Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
ba32e2b
test(workflow-operator): add spec for TextGenCodegen (#5789)
EmilySun621 Jun 19, 2026
97480f1
test(frontend): add spec for AdminGuardService (#5787)
EmilySun621 Jun 19, 2026
5e23f22
test(workflow-operator): add unit test coverage for source-descriptor…
aglinxinyuan Jun 19, 2026
72071ff
test(workflow-operator): add unit test coverage for SplitOp and UrlVi…
aglinxinyuan Jun 19, 2026
00b4ea0
chore(deps): bump ajv from 8.10.0 to 8.18.0 in /agent-service (#4962)
dependabot[bot] Jun 19, 2026
c2129d4
chore(deps): bump elysia from 1.4.18 to 1.4.27 in /agent-service (#4961)
dependabot[bot] Jun 19, 2026
b0996e4
chore(deps): bump tar from 7.5.13 to 7.5.16 in /frontend (#5802)
dependabot[bot] Jun 20, 2026
bf1eefe
chore(deps): bump torch from 2.8.0 to 2.12.0+cpu in /amber (#5809)
dependabot[bot] Jun 20, 2026
5811aaf
chore(deps): bump launch-editor from 2.13.2 to 2.14.1 in /frontend (#…
dependabot[bot] Jun 20, 2026
44b894a
chore(deps): bump js-yaml from 4.1.1 to 4.2.0 in /frontend (#5812)
dependabot[bot] Jun 20, 2026
02c69fb
chore(deps): bump pyarrow from 21.0.0 to 23.0.1 in /amber (#5800)
dependabot[bot] Jun 20, 2026
5e4a8d9
chore(deps-dev): bump pytest from 7.4.0 to 9.0.3 in /amber (#5801)
dependabot[bot] Jun 20, 2026
383fc3e
chore(deps): bump elysia from 1.4.27 to 1.4.29 in /agent-service (#5820)
dependabot[bot] Jun 20, 2026
dd566ba
chore(deps): bump hono from 4.12.15 to 4.12.26 in /frontend (#5805)
dependabot[bot] Jun 20, 2026
0c5109a
chore(deps): bump prettier from 3.4.2 to 3.8.4 in /agent-service (#5819)
dependabot[bot] Jun 20, 2026
e8d9e15
chore(deps): bump ws from 6.2.3 to 6.2.4 in /frontend (#5803)
dependabot[bot] Jun 20, 2026
bd66953
chore(deps): bump @types/bun from 1.3.3 to 1.3.14 in /agent-service (…
dependabot[bot] Jun 20, 2026
a30eecd
chore(deps): bump typescript from 5.9.3 to 6.0.3 in /agent-service (#…
dependabot[bot] Jun 20, 2026
e341dc4
chore(deps): bump uuid from 8.3.2 to 14.0.0 in /frontend (#5804)
dependabot[bot] Jun 20, 2026
0eb7baa
chore(deps): bump @ai-sdk/openai to 3.0.73 and ai to 6.0.208 in /agen…
dependabot[bot] Jun 20, 2026
eba14a6
test(workflow-operator): add unit test coverage for SklearnAdvanced t…
aglinxinyuan Jun 20, 2026
f2867f0
chore(deps): bump @angular/compiler from 21.2.10 to 21.2.17 in /front…
dependabot[bot] Jun 20, 2026
8582cba
test(workflow-operator): add unit test coverage for operator config b…
aglinxinyuan Jun 20, 2026
c8a4cd9
test(workflow-operator): add unit test coverage for small visualizati…
aglinxinyuan Jun 20, 2026
f5cf00a
test(workflow-operator): add unit test coverage for map/filter/flatma…
aglinxinyuan Jun 20, 2026
4722a42
test(workflow-core): cover PortIdentity key serde (#5799)
tanishqgandhi1908 Jun 20, 2026
8febad2
test(workflow-operator): add unit test coverage for OperatorDescripto…
aglinxinyuan Jun 20, 2026
41123c0
test(workflow-operator): add unit test coverage for text search and m…
aglinxinyuan Jun 20, 2026
8ca6bb2
test(workflow-operator): add unit test coverage for row-count-shaping…
aglinxinyuan Jun 20, 2026
ea41378
test(workflow-operator): add unit test coverage for column-transform …
aglinxinyuan Jun 20, 2026
357fed0
test(workflow-core): add unit test coverage for VirtualCollection + R…
aglinxinyuan Jun 20, 2026
f2d5737
test(workflow-operator): add unit test coverage for sort and set oper…
aglinxinyuan Jun 21, 2026
e3df0ce
test(workflow-operator): add unit test coverage for control and aggre…
aglinxinyuan Jun 21, 2026
a4848af
test(workflow-operator): add unit test coverage for operator metadata…
aglinxinyuan Jun 21, 2026
e87bc0b
test(workflow-operator): add unit test coverage for visualization des…
aglinxinyuan Jun 21, 2026
6d31f46
test(workflow-operator): add unit test coverage for visualization ope…
aglinxinyuan Jun 21, 2026
5882434
test(workflow-operator): add unit test coverage for IntervalJoin, Joi…
aglinxinyuan Jun 21, 2026
86f865c
fix(amber): add timeout and retry to dataset file-service requests (#…
Ma77Ball Jun 21, 2026
c305bb4
feat(comment-commands): auto suggest reviewers on pr open/update via …
juliethecao Jun 21, 2026
b2886ca
refactor(frontend): remove unused fs-extra devDependency (#5842)
Ma77Ball Jun 21, 2026
74fecdf
test(workflow-operator): add unit test coverage for visualization des…
aglinxinyuan Jun 21, 2026
9032260
test(workflow-operator): add unit test coverage for visualization des…
aglinxinyuan Jun 21, 2026
ed22158
refactor(config): unify default-data-transfer-batch-size into one con…
Ma77Ball Jun 21, 2026
44df4f7
feat(frontend): recover from ChunkLoadError with a guarded reload (#5…
Ma77Ball Jun 22, 2026
2e0dd7c
feat(execution): add PhysicalOp.requiresMaterializedExecution, consum…
aglinxinyuan Jun 22, 2026
3ced705
refactor(amber): centralize uncaught-exception console reporting (#5783)
aglinxinyuan Jun 22, 2026
0f98a14
test(workflow-operator): add unit test coverage for Python UDF operat…
aglinxinyuan Jun 22, 2026
a5d8602
test(workflow-operator): add unit test coverage for PropertyNameConst…
aglinxinyuan Jun 22, 2026
18e4e67
fix(file-service): retry S3 bucket creation on slow startup (#5853)
Ma77Ball Jun 22, 2026
439ea72
feat(huggingface): add audio and media generation tasks (#5570)
anishshiva7 Jun 22, 2026
27fce8a
feat(huggingface): add qa and ranking tasks
anishshiva7 May 29, 2026
33fcf12
fix(huggingface): validate qa ranking inputs
anishshiva7 Jun 15, 2026
463b463
fix(huggingface): validate zero-shot labels
anishshiva7 Jun 20, 2026
cb2bd44
fix(huggingface): refine text ranking payload
anishshiva7 Jun 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

# agent-service uses Bun (bun.lock). The npm/yarn updater leaves bun.lock
# stale, so version updates run through the bun ecosystem instead. Requires
# Dependabot bun support (>= v1.2.5).
version: 2
updates:
- package-ecosystem: "bun"
directory: "/agent-service"
schedule:
interval: "weekly"
commit-message:
prefix: "chore(deps)"
10 changes: 9 additions & 1 deletion .github/workflows/comment-commands.yml
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,15 @@ jobs:
reviewers.push(h);
}
if (!reviewers.length && !team_reviewers.length) {
core.warning(`No valid @mentions in '${action}'; skipping.`);
// Explicit @mentions are required — the suggest-reviewers CI job
// already posted a suggestion comment on this PR, so the author
// has candidates to choose from.
await github.rest.issues.createComment({
owner, repo, issue_number: pull_number,
body:
`Please specify at least one reviewer: \`/${action} @user\`.\n` +
`Check the suggestion comment on this PR for candidates.`,
});
return;
}

Expand Down
181 changes: 181 additions & 0 deletions .github/workflows/suggest-reviewers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# On PR open/update, runs `git blame` on every changed file and posts (or
# edits) a single reviewer-suggestion comment split into two buckets:
# • Committers — collaborators who can be formally review-requested.
# The author uses `/request-review @login` to act on these.
# • Non-committer contributors — have context but cannot be review-
# requested; the author can @-mention them to notify.
# The CI never sends a review request on its own.
name: Suggest reviewers
on:
pull_request_target:
types: [opened, synchronize, reopened]

permissions:
contents: read
issues: write
pull-requests: write

jobs:
suggest-reviewers:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: actions/github-script@v8
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const { execFileSync } = require('node:child_process');
const pull_number = context.payload.pull_request.number;
const author = context.payload.pull_request.user.login;
const { owner, repo } = context.repo;

const { data: pull } = await github.rest.pulls.get({ owner, repo, pull_number });

try {
execFileSync('git', ['fetch', 'origin', pull.base.ref], { encoding: 'utf8' });
} catch (e) {
core.warning(`git fetch for base ref ${pull.base.ref} failed: ${e.message}`);
}

const files = await github.paginate(github.rest.pulls.listFiles, {
owner, repo, pull_number, per_page: 100,
});

// Parse `git blame -p` output to find the most-recent commit per file.
function latestBlameCommit(blameOutput) {
let latest = null;
let current = null;

function finalizeCurrent() {
if (!current || current.authorTime == null) return;
if (!latest || current.authorTime > latest.authorTime) latest = current;
}

for (const line of blameOutput.split(/\r?\n/)) {
const header = line.match(/^([0-9a-f^]+)\s+\d+\s+\d+\s+\d+$/);
if (header) {
finalizeCurrent();
current = { sha: header[1].replace(/^\^/, ''), authorTime: null };
continue;
}
const authorTime = line.match(/^author-time\s+(\d+)$/);
if (authorTime && current) current.authorTime = Number(authorTime[1]);
}

finalizeCurrent();
return latest;
}

// Count changed files touched per login; track collaborator status.
const committerCounts = new Map(); // collaborators
const nonCommitterCounts = new Map(); // non-collaborators with a GitHub login

for (const { filename, status, previous_filename } of files) {
if (status === 'removed' || status === 'added') continue;
const blamePath = status === 'renamed' ? previous_filename : filename;

let blameOutput;
try {
blameOutput = execFileSync(
'git', ['blame', '-p', pull.base.sha, '--', blamePath],
{ encoding: 'utf8' },
);
} catch (e) {
core.warning(`git blame on ${filename} failed: ${e.message}`);
continue;
}

const latest = latestBlameCommit(blameOutput);
if (!latest) continue;

let commit;
try {
({ data: commit } = await github.rest.repos.getCommit({ owner, repo, ref: latest.sha }));
} catch (e) {
core.warning(`Commit lookup for ${latest.sha} failed: ${e.message}`);
continue;
}

const login = commit.author?.login ?? commit.committer?.login;
if (!login) continue;
if (login.toLowerCase() === author.toLowerCase()) continue;

const loginSource = commit.author?.login ? commit.author : commit.committer;
if (loginSource?.type === 'Bot') continue;

let isCollaborator = false;
try {
await github.rest.repos.checkCollaborator({ owner, repo, username: login });
isCollaborator = true;
} catch (_) { /* not a collaborator */ }

if (isCollaborator) {
committerCounts.set(login, (committerCounts.get(login) ?? 0) + 1);
} else {
nonCommitterCounts.set(login, (nonCommitterCounts.get(login) ?? 0) + 1);
}
}

const MAX_EACH = 3;

const committers = [...committerCounts.entries()]
.sort((a, b) => b[1] - a[1])
.slice(0, MAX_EACH)
.map(([l]) => l);

const nonCommitters = [...nonCommitterCounts.entries()]
.sort((a, b) => b[1] - a[1])
.slice(0, MAX_EACH)
.map(([l]) => l);

const MARKER = '<!-- texera-reviewer-suggestion -->';

let body = `${MARKER}\n`;
body += `### Automated Reviewer Suggestions\n\n`;
body += `Based on the \`git blame\` history of the changed files, we recommend the following reviewers:\n\n`;

if (committers.length) {
body += `- **Committers with relevant context:** ${committers.map(l => `\`@${l}\``).join(', ')}\n`;
body += ` You can request their reviews formally with \`/request-review ${committers.map(l => `@${l}`).join(' ')}\`.\n\n`;
}

if (nonCommitters.length) {
body += `- **Contributors with relevant context:** ${nonCommitters.map(l => `\`@${l}\``).join(', ')}\n`;
body += ` You can notify them by mentioning ${nonCommitters.map(l => `\`@${l}\``).join(', ')} in a comment.\n`;
}

if (!committers.length && !nonCommitters.length) {
body += `- No candidates found from \`git blame\` history.\n`;
}

// Update existing suggestion comment rather than posting a new one.
const allComments = await github.paginate(github.rest.issues.listComments, {
owner, repo, issue_number: pull_number, per_page: 100,
});
const existing = allComments.find(c => c.body?.includes(MARKER));

if (existing) {
await github.rest.issues.updateComment({ owner, repo, comment_id: existing.id, body });
core.info(`Updated reviewer suggestion comment on #${pull_number}`);
} else {
await github.rest.issues.createComment({ owner, repo, issue_number: pull_number, body });
core.info(`Posted reviewer suggestion comment on #${pull_number}`);
}
28 changes: 14 additions & 14 deletions agent-service/LICENSE-binary
Original file line number Diff line number Diff line change
Expand Up @@ -211,15 +211,15 @@ Dependencies under the Apache License, Version 2.0
--------------------------------------------------------------------------------

Agent service npm packages:
- @ai-sdk/gateway@2.0.18
- @ai-sdk/openai@2.0.79
- @ai-sdk/provider-utils@3.0.18
- @ai-sdk/provider@2.0.0
- @ai-sdk/gateway@3.0.133
- @ai-sdk/openai@3.0.73
- @ai-sdk/provider-utils@4.0.30
- @ai-sdk/provider@3.0.10
- @opentelemetry/api@1.9.0
- @vercel/oidc@3.0.5
- ai@5.0.108
- @vercel/oidc@3.2.0
- ai@6.0.208
- rxjs@7.8.2
- typescript@5.9.3
- typescript@6.0.3

--------------------------------------------------------------------------------
Dependencies under the MIT License
Expand All @@ -230,20 +230,20 @@ Agent service npm packages:
- @elysiajs/cors@1.4.0
- @pinojs/redact@0.4.0
- @sinclair/typebox@0.34.41
- @standard-schema/spec@1.0.0
- @standard-schema/spec@1.1.0
- @tokenizer/inflate@0.4.1
- @tokenizer/token@0.3.0
- @types/bun@1.3.3
- @types/bun@1.3.14
- @types/node@24.10.1
- ajv@8.17.1
- ajv@8.18.0
- atomic-sleep@1.0.0
- bun-types@1.3.3
- bun-types@1.3.14
- cookie@1.1.1
- dagre@0.8.5
- debug@4.4.3
- elysia@1.4.18
- eventsource-parser@3.0.6
- exact-mirror@0.2.5
- elysia@1.4.29
- eventsource-parser@3.1.0
- exact-mirror@0.2.7
- fast-decode-uri-component@1.0.1
- fast-deep-equal@3.1.3
- file-type@21.1.1
Expand Down
Loading