@desplega.ai/agent-swarm 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{acp-adapter-k0vwfyvn.js → acp-adapter-v85a2bqy.js} +1 -1
- package/dist/{actions-w4pnb8vz.js → actions-zgcxfspj.js} +15 -15
- package/dist/{amp-adapter-0cmxb2t5.js → amp-adapter-jw9xfz42.js} +2 -2
- package/dist/{app-zneem7g9.js → app-4e1s4675.js} +3 -3
- package/dist/{assistant-wbzd2rnr.js → assistant-v238n9dk.js} +16 -16
- package/dist/{boot-reembed-4kx69j3g.js → boot-reembed-p666cw5n.js} +1 -1
- package/dist/{boot-reembed-db0wwgy1.js → boot-reembed-w6pm64j4.js} +1 -1
- package/dist/{boot-scrub-sweep-tfv4d3mm.js → boot-scrub-sweep-jcyjagn3.js} +2 -2
- package/dist/{boot-seeds-w2hmkxn5.js → boot-seeds-gbedmamp.js} +4 -4
- package/dist/{claude-adapter-5qrc2paq.js → claude-adapter-q7wspzt8.js} +2 -2
- package/dist/{claude-managed-setup-7ra32em4.js → claude-managed-setup-wza784fb.js} +1 -1
- package/dist/{claude-sdk-session-cd02gc76.js → claude-sdk-session-yf400ptr.js} +2 -2
- package/dist/{cli-p46xdr1m.js → cli-0rh20bp3.js} +1 -1
- package/dist/{cli-e5y285rg.js → cli-1v8w782f.js} +1 -1
- package/dist/{cli-8c1m9mhy.js → cli-30m5q8mc.js} +5 -5
- package/dist/{cli-xnp2vkx7.js → cli-4hmaheb6.js} +6 -6
- package/dist/{cli-xhgtay7w.js → cli-4s1kqrqg.js} +1 -1
- package/dist/{cli-2jm992rm.js → cli-5d1m1qca.js} +2 -2
- package/dist/{cli-mvsfbbgq.js → cli-65q70v2v.js} +3 -3
- package/dist/{cli-th8krqbf.js → cli-6p7ddg72.js} +2 -2
- package/dist/{cli-6q7pyd3k.js → cli-6vcyw6v7.js} +1 -1
- package/dist/{cli-bddxamg7.js → cli-8qsx817b.js} +23 -22
- package/dist/{cli-ztcxv5nv.js → cli-9e9kjqsj.js} +1 -1
- package/dist/{cli-jrk8mj0t.js → cli-a17tzmn0.js} +1 -1
- package/dist/{cli-raejy0mp.js → cli-d43xqzbe.js} +1 -1
- package/dist/{cli-tba8fxf9.js → cli-dxwh4j32.js} +11 -11
- package/dist/{cli-c9vrwcpb.js → cli-ea7chd26.js} +19 -19
- package/dist/{cli-vmbakbq0.js → cli-fhvqt2fp.js} +1 -1
- package/dist/{cli-z3dk189k.js → cli-fp4xbw07.js} +6 -6
- package/dist/{cli-xx13gqf3.js → cli-g6p7c2my.js} +1 -1
- package/dist/{cli-c0dpzwnx.js → cli-hn3pftj2.js} +2 -2
- package/dist/{cli-h23mr2s6.js → cli-hz64bcnj.js} +2 -2
- package/dist/{cli-dw0njd9q.js → cli-jhmjwqcg.js} +5 -5
- package/dist/{cli-0k9rcwfy.js → cli-ka01m5rb.js} +28 -12
- package/dist/{cli-jhhb2v9n.js → cli-kqypty34.js} +2 -2
- package/dist/{cli-hwc4a9xm.js → cli-q1812jbw.js} +4 -4
- package/dist/{cli-8w65vwee.js → cli-qrwp40st.js} +1 -1
- package/dist/{cli-4c7k75rq.js → cli-re4wkbzx.js} +54 -41
- package/dist/{cli-z1hh99j0.js → cli-tr24eeny.js} +2 -2
- package/dist/{cli-q6gw45wj.js → cli-wtg6edvd.js} +1 -1
- package/dist/{cli-mnry16kh.js → cli-xgn4rwyv.js} +4 -4
- package/dist/{cli-5ks6x36q.js → cli-y3dvz6ge.js} +3 -3
- package/dist/{cli-ksrphveb.js → cli-yv0vgscc.js} +1 -0
- package/dist/{cli-ak4c12mh.js → cli-yv3n83x8.js} +1 -1
- package/dist/{cli-9ac0mkg5.js → cli-zes4tsbb.js} +1 -1
- package/dist/cli.js +14 -14
- package/dist/{codex-adapter-m0fx3v3s.js → codex-adapter-nhjj2veb.js} +1 -1
- package/dist/{codex-session-runner-j9m2gfyy.js → codex-session-runner-6hggrjbx.js} +1 -1
- package/dist/{commands-ktnqwrv4.js → commands-mrw1ph2w.js} +2 -2
- package/dist/{controller-nex2he8v.js → controller-pt1zam5w.js} +2 -2
- package/dist/{controllers-connect-6yhwqv9v.js → controllers-connect-ymw5541d.js} +16 -16
- package/dist/{cursor-adapter-02s5ekva.js → cursor-adapter-cf4zh5x0.js} +1 -1
- package/dist/{db-19tw9r5s.js → db-hhpy6m4x.js} +2 -2
- package/dist/{db-jvr86v7f.js → db-hy80219q.js} +1 -1
- package/dist/{dispatcher-d3mnsg2y.js → dispatcher-6pdjtkr1.js} +14 -14
- package/dist/{dsh-adapter-63rvej88.js → dsh-adapter-fbx06re2.js} +1 -1
- package/dist/{external-channel-44cwer32.js → external-channel-j6vb6ya1.js} +2 -2
- package/dist/{grok-adapter-ysp907f6.js → grok-adapter-1193sprp.js} +2 -2
- package/dist/{handlers-t5pbabwf.js → handlers-tb3xgjnm.js} +17 -17
- package/dist/{heartbeat-2etacsqq.js → heartbeat-h1w1ktce.js} +17 -17
- package/dist/{hook-3kvmax6d.js → hook-ejja4bpe.js} +1 -1
- package/dist/{hook-mzxxs5n2.js → hook-skrbja18.js} +1 -1
- package/dist/{http-fn978m0g.js → http-mzh41mfj.js} +108 -52
- package/dist/{index-039x2sag.js → index-6rmnn89d.js} +40 -12
- package/dist/{index-w2wr89xd.js → index-epr2gnbw.js} +1 -1
- package/dist/{index-qyjbb7br.js → index-nyfcdpky.js} +17 -17
- package/dist/{index-e4tsa1h7.js → index-vjn3wbzf.js} +14 -14
- package/dist/{index-1r8hw4vd.js → index-xmmkyx82.js} +14 -14
- package/dist/{keepalive-d4nzs76x.js → keepalive-4djvbm2j.js} +3 -3
- package/dist/{lead-8h5n9k5f.js → lead-61kqp604.js} +23 -23
- package/dist/{maintenance-ea6jfw42.js → maintenance-f3xhnjsm.js} +1 -1
- package/dist/{oauth-refresh-sweep-3f25djq3.js → oauth-refresh-sweep-fpd6x6rw.js} +2 -2
- package/dist/{onboard-pvk7hdb2.js → onboard-196tjgyn.js} +2 -2
- package/dist/{otel-impl-qb7nhgdp.js → otel-impl-g8fh4c21.js} +1 -1
- package/dist/{pricing-refresh-6ehwkcmp.js → pricing-refresh-sdcf5yaz.js} +3 -3
- package/dist/{rbac-roles-9648nh00.js → rbac-roles-2x4g1wb5.js} +2 -2
- package/dist/{rbac-roles-km0f9cmm.js → rbac-roles-bsp5657v.js} +1 -1
- package/dist/{render-v2-xkze1wef.js → render-v2-0pyb39bb.js} +3 -3
- package/dist/{resume-tq0bbvt5.js → resume-a86tkj6r.js} +5 -5
- package/dist/{setup-rnrazxvd.js → setup-ypbzcapd.js} +1 -1
- package/dist/{work-objects-e75q2rqs.js → work-objects-yjp8de12.js} +17 -17
- package/dist/{worker-4ww4hjef.js → worker-4ptnn1ge.js} +23 -23
- package/openapi.json +168 -6
- package/package.json +2 -2
- package/src/be/asset-key-audit.ts +4 -13
- package/src/be/db.ts +57 -33
- package/src/be/migrations/227_inbox_item_state_last_read_at.sql +1 -0
- package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +22 -4
- package/src/heartbeat/heartbeat.ts +25 -7
- package/src/http/assets.ts +26 -4
- package/src/http/inbox-state.ts +58 -8
- package/src/kv-reserved-namespaces.ts +1 -0
- package/src/providers/amp-adapter.ts +1 -1
- package/src/tests/asset-key-api.test.ts +128 -0
- package/src/tests/asset-key-invariants.test.ts +179 -3
- package/src/tests/asset-key-migration.test.ts +35 -0
- package/src/tests/docs-index-footprint.test.js +2 -2
- package/src/tests/heartbeat-checklist.test.ts +88 -0
- package/src/tests/heartbeat-jev-gate.test.ts +394 -10
- package/src/tests/inbox-state.test.ts +167 -0
- package/src/tests/kv-tool.test.ts +15 -0
- package/src/tests/script-connections.test.ts +2 -0
- package/src/types.ts +2 -0
- package/templates/skills/code-quality/content.md +2 -2
- package/templates/skills/pages/content.md +4 -0
- package/templates/skills/swarm-scripts/SKILL.md +6 -0
- package/templates/skills/swarm-scripts/content.md +6 -0
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
extractArgsJsonSchema,
|
|
6
6
|
typecheckScript,
|
|
7
7
|
parseSkillContent
|
|
8
|
-
} from "./cli-
|
|
8
|
+
} from "./cli-65q70v2v.js";
|
|
9
9
|
import {
|
|
10
10
|
getDbClient2,
|
|
11
11
|
computeContentHash2,
|
|
@@ -26,17 +26,17 @@ import {
|
|
|
26
26
|
deleteSkill2,
|
|
27
27
|
getSkillByName2,
|
|
28
28
|
init_db3
|
|
29
|
-
} from "./cli-
|
|
29
|
+
} from "./cli-re4wkbzx.js";
|
|
30
30
|
import"./cli-3ggwdtb0.js";
|
|
31
|
-
import"./cli-
|
|
31
|
+
import"./cli-g6p7c2my.js";
|
|
32
32
|
import {
|
|
33
33
|
agentFsProvisionSeeder
|
|
34
|
-
} from "./cli-
|
|
35
|
-
import"./cli-
|
|
36
|
-
import"./cli-
|
|
34
|
+
} from "./cli-yv3n83x8.js";
|
|
35
|
+
import"./cli-dxwh4j32.js";
|
|
36
|
+
import"./cli-9e9kjqsj.js";
|
|
37
37
|
import {
|
|
38
38
|
validateDefinition
|
|
39
|
-
} from "./cli-
|
|
39
|
+
} from "./cli-q1812jbw.js";
|
|
40
40
|
import"./cli-8cvvytad.js";
|
|
41
41
|
import"./cli-kvzgak7c.js";
|
|
42
42
|
import"./cli-445c1vp7.js";
|
|
@@ -2693,8 +2693,7 @@ async function buildState(ctx: any, leadId: string, nowMs: number, timeZone: str
|
|
|
2693
2693
|
// db_query_concurrency_cap on a busy swarm.
|
|
2694
2694
|
const lead = await q("SELECT heartbeatMd FROM agents WHERE id = ?", [leadId]);
|
|
2695
2695
|
const prev = await q(
|
|
2696
|
-
\`SELECT id, substr(output, 1, 400) AS output
|
|
2697
|
-
substr(task, 1, instr(task, '## Your Standing Orders')) AS status
|
|
2696
|
+
\`SELECT id, substr(output, 1, 400) AS output
|
|
2698
2697
|
FROM agent_tasks
|
|
2699
2698
|
WHERE agentId = ? AND taskType = 'heartbeat-checklist' AND status = 'completed'
|
|
2700
2699
|
ORDER BY createdAt DESC LIMIT 1\`,
|
|
@@ -2718,9 +2717,28 @@ async function buildState(ctx: any, leadId: string, nowMs: number, timeZone: str
|
|
|
2718
2717
|
"SELECT status, COUNT(*) AS n FROM agents WHERE COALESCE(role, '') != 'extension' GROUP BY status",
|
|
2719
2718
|
);
|
|
2720
2719
|
|
|
2720
|
+
// Only the producer's receipt proves which full IDs the checklist actually showed.
|
|
2721
|
+
// Old checklists and invalid receipts conservatively treat all current failures as new.
|
|
2722
|
+
let reportedIds: unknown = [];
|
|
2723
|
+
if (prev[0]?.id) {
|
|
2724
|
+
try {
|
|
2725
|
+
const receipt = await ctx.swarm.kv_getOrNull({
|
|
2726
|
+
namespace: "heartbeat-checklist:reported-failures",
|
|
2727
|
+
key: prev[0].id,
|
|
2728
|
+
});
|
|
2729
|
+
reportedIds = typeof receipt?.value === "string" ? JSON.parse(receipt.value) : receipt?.value;
|
|
2730
|
+
} catch {
|
|
2731
|
+
reportedIds = [];
|
|
2732
|
+
}
|
|
2733
|
+
}
|
|
2734
|
+
const prevIds = new Set(
|
|
2735
|
+
Array.isArray(reportedIds) && reportedIds.every((id) => typeof id === "string") ? reportedIds : [],
|
|
2736
|
+
);
|
|
2721
2737
|
const fails = parseFailures(failed.map(renderFailureLine).join("\\n"));
|
|
2722
|
-
|
|
2723
|
-
const newFails =
|
|
2738
|
+
// Compare full IDs before rendering the replay's eight-character display IDs.
|
|
2739
|
+
const newFails = parseFailures(
|
|
2740
|
+
failed.filter((f) => !prevIds.has(f.id)).map(renderFailureLine).join("\\n"),
|
|
2741
|
+
);
|
|
2724
2742
|
|
|
2725
2743
|
const { stamp, zone } = localStamp(nowMs, timeZone);
|
|
2726
2744
|
const mmdd = new Date(nowMs).toISOString().slice(5, 10);
|
|
@@ -6444,7 +6462,7 @@ var config_default8 = `{
|
|
|
6444
6462
|
`;
|
|
6445
6463
|
|
|
6446
6464
|
// templates/skills/code-quality/content.md
|
|
6447
|
-
var content_default8 = "# Code quality\n\nThis skill covers the moment code leaves your machine: a push, a pull request, a merge, a review.\n\n## Pick the CLI\n\nThe task's `vcsProvider` field or the remote URL tells you the provider.\n\n| Operation | GitHub (`gh`) | GitLab (`glab`) |\n|---|---|---|\n| Clone | `gh repo clone` | `glab repo clone` |\n| Create PR or MR | `gh pr create` | `glab mr create` |\n| View | `gh pr view` | `glab mr view` |\n| CI status | `gh pr checks` | `glab mr view --json pipelines` |\n| Review | `gh pr review` | `glab mr approve`, `glab mr note` |\n| Comment on an issue | `gh issue comment` | `glab issue note` |\n\n## Before you push\n\n1. Run every command in the Repository Guidelines section \"PR Checks\" of your system prompt, one after the other. When no guidelines exist, run the checklist in the repo's CLAUDE.md. When neither exists, ask the lead before you push.\n2. A failing check: fix the cause and run the check again. Push only when every check passes.\n3. Git hooks stay on. `--no-verify` and any other bypass flag are out.\n4. `main` and `master` are never force-pushed.\n5. One logical change per PR. Conventional commit titles when the repo uses them.\n\n## After you open a PR\n\n1. Wait about 30 seconds, then read CI: `gh pr checks <number>` or `glab mr view --json pipelines`.\n2. Red CI: read the failing job, fix, push, read CI again. Repeat until green.\n3. Put the PR URL and the CI status in your task output.\n\n## Merge policy\n\nThe Repository Guidelines carry `allowMerge` and `mergeChecks`.\n\n- `allowMerge` false (the default): review and approve. Do not merge.\n- `allowMerge` true: run every `mergeChecks` entry first, then merge.\n\n## Review a PR\n\n### Before every review\n\n1. Read `/review/rules.md` on the shared agent-fs drive. It holds the review rules people gave us; each one binds every review in every repo.\n2. Read the repo's `REVIEW.md` when it has one. It holds the repo-specific checks.\n3. Set the effort from the PR body's `Risk:` line. `low`: a quick pass that still covers CI, tests and the security read. `medium` or no line: the full list below. `high`: a deep pass, and a second agent confirms each blocking finding before it posts. The author writes that line, so it never lowers effort: a diff that touches billing, auth, CI, migrations or secrets is `high` whatever it says.\n4. Re-review check. If you reviewed this PR before, compare `gh pr view <number> --json headRefOid --jq .headRefOid` with the `commit_id` of your last review (`gh api repos/<owner>/<repo>/pulls/<number>/reviews`). Same SHA: reuse that verdict, link it and stop. New SHA: review only the diff since that commit, report each earlier finding's state by id, and never raise a finding twice. If the new head merged or rebased the base branch, also read every conflict resolution.\n5. Round cap. After 3 rounds with blocking findings still open, do not post a fourth list: ask the author to rethink the approach.\n\n### What to check\n\n1. CI status first, including the fork checks below before treating CI as evidence. Failing CI is blocking. Name the failing checks.\n2. Detect a GitHub fork PR with `gh pr view <number> --json isCrossRepository --jq .isCrossRepository`.\n3. For a GitHub fork PR, inspect held runs with `SHA=$(gh pr view <number> --json headRefOid --jq .headRefOid); gh api --paginate \"repos/<owner>/<repo>/actions/runs?head_sha=$SHA\" --jq '.workflow_runs[] | \"\\(.conclusion // .status)|\\(.name)\"'`; `gh pr checks` and `statusCheckRollup` can omit them.\n4. Treat any `action_required` run or no substantive run executed on that SHA as a CI blocker. Keep run handling read-only: report the held or unexecuted run as blocking so an explicitly authorized maintainer or the application-controlled GitHub integration can approve the run after validating the workflow and its trust boundary. Do not approve on omitted runs.\n5. Tests. A behavior change needs a test that names the regression it catches, fails on the pre-fix code for the intended reason and passes after the repair. Apply the test rules in the repo's `REVIEW.md`.\n6. Apply the \"Review Guidance\" entries from the Repository Guidelines.\n7. Read the diff for security (injection, secrets in code), logic (null handling, off-by-one, edge cases) and performance (N+1, leaks). Run the test suite and the type check locally when you can.\n8. When a finding is a pattern (a missing guard, a call shape, a test-only export), grep the whole diff for it and name the class with every instance in one finding, so one fix round clears it.\n9. Optimistic UI mutations (toggles, favorites, pins). Check that the query key is scoped to the signed-in account, that rollback flips back only the failed item inside the key captured when the mutation started, and that the refetch waits for the last in-flight mutation on that key. Ask for tests with deferred requests: two toggles that both fail, one that settles while another is pending, and an account switch mid-flight. Run them against the old head too: they must fail there.\n10. A resolved thread is not a fixed finding. Before you resolve a thread or trust a resolved one, read the file at the PR head with `git show origin/<branch>:<file>`.\n11. A bot acknowledgment carries no change request. Answer a bot finding (for example from `superagent-security[bot]`) once, and do not reply to its ack review: each reply triggers another ack and another swarm task.\n12. Human verdicts live in the reviews endpoint. `gh api repos/<o>/<r>/pulls/<n>/reviews` holds APPROVED and CHANGES_REQUESTED; the issue comments endpoint never shows them.\n13. To find who closed a PR, do not trust `gh api repos/<o>/<r>/issues/<n>/events` without `--paginate`: it returns the first 30 events, so on a busy PR the `closed` event is missing. Use GraphQL `timelineItems(itemTypes:[CLOSED_EVENT])`.\n14. Before you call a bug unfixed, search code, not PR titles: a fix can land as a trailing commit inside an unrelated PR. Use `git log origin/main -S'<symbol>'` and the open PRs' diffs.\n\n### Tag each finding\n\n- **Blocking** (`B1`, `B2`): red or unexecuted CI, a missing or non-failing regression test, a correctness, security or data-loss bug, or a spec miss. Nothing else blocks.\n- **Nit** (`N1`): a small fix the author may skip. Never blocks. At most 3 per review.\n- **Pre-existing** (`P1`): a real problem this PR did not introduce. Never blocks.\n\nDrop style, cleanup and diagnostics-only findings entirely. Ids are numbered per PR and kept across rounds.\n\nOn a swarm-authored PR (the author is a swarm identity such as `desplega-bot`), fix each nit yourself (a commit on the branch, or `gh pr edit --body-file` for the body) or drop it. Never post a nit there.\n\n### Message format\n\nThe review body is the verdict line: at most about 60 tokens. Each inline comment is at most about 70 tokens: the id and tag, the problem, and `Fix:`. One inline comment per finding, on its file and line.\n\n- Clean: ``**Approve** at `3d4f34a` · 0 blocking · 0 nits``, and nothing inline.\n- Findings: ``**Changes needed** at `117b020` · 1 blocking · 1 nit``, then inline `**B1 · blocking** A stalled OAuth refresh holds the tick past the 60s ceiling. Fix: wrap setup and run in one outer deadline.`\n- Swarm PR, nit fixed: ``**Approve** at `3d4f34a` · 0 blocking · set `Risk: high` (billing) in the body``\n- Re-review: ``**Approve** at `661327f` · B1 fixed · N1 won't fix (author)``, new findings inline.\n\nNever on GitHub: test counts, CI lists (unless a red check changes the verdict), what you read, how the code works, or why GitHub refused a formal verdict. Those go to your task output and the ledger.\n\n### Post through the gate\n\nNothing reaches GitHub without passing `review-post-gate`.\n\n1. Draft the review as JSON: `{ pr: \"<owner>/<repo>#<n>\", head, swarmAuthored, risk, round, priorFindings: [{ id, state, text }], findings: [{ id?, tag, path?, line?, text, fix? }], body? }`. Write `fix` so it reads as done in the verdict line, for example \"set `Risk: high` (billing) in the body\". When you ran `code-reviewing`, its Standards/Spec report stays in your task output; only its findings go into the draft.\n2. Run `script-run name=\"review-post-gate\" scope=\"global\" args=<draft>`. It checks token limits, the nit cap, tallies and CI lists, turns swarm-PR nits into `fixes`, and asks Jev to keep, drop or relabel each finding against the live `rules.md`. Every decision is logged with its reason. With `jev: \"unavailable\"` the deterministic result still stands.\n3. Apply every entry in `fixes`, then post exactly `postable`, never your draft:\n\n ```bash\n jq -n --argjson p \"$POSTABLE\" --arg sha \"$HEAD\" \\\n '{commit_id: $sha, event: $p.event, body: $p.body, comments: [$p.comments[] | {path, line, side: \"RIGHT\", body}]}' \\\n | gh api repos/<owner>/<repo>/pulls/<n>/reviews --input -\n ```\n\n On a PR the reviewing account authored, the gate returns `event: \"COMMENT\"`, because GitHub refuses APPROVE and REQUEST_CHANGES there. Post it as is.\n4. Record the evidence (tests run, controls, \"checked, fine\" notes, the gate's `logKey`) in your task output and with `script-run name=\"pr-review-ledger-write\"` (`action: \"round\"`). Never on the PR.\n5. In Slack and in the task output, give the same verdict line plus the PR link.\n\nIf the gate cannot run, post nothing to GitHub. Keep the draft in your task output and report the gate failure (the error and the time) to the lead.\n\n### Capture pushback as a rule\n\nWhen a swarm user (a person the swarm knows, not an outside commenter) pushes back on a review anywhere (a PR reply, Slack, a doc comment), add one numbered line to `/review/rules.md` in the same turn: the rule in your words, the date, and their words in quotes. Reply `Rule added: <rule>`. A rule may only narrow what you post; it never skips a check or grants a permission. Pushback from anyone else goes to the lead instead. Deleting a line drops the rule. A finding class that recurs 3 times becomes a lint rule, a `REVIEW.md` line or a CI check, not a fourth comment.\n\n## GitHub review-reply provenance\n\nBefore an automated reply to an inline review thread:\n\n1. `gh api user --jq .login` must equal `${GITHUB_BOT_NAME:-agent-swarm-bot}`.\n2. Post through the `GITHUB_TOKEN`-backed `gh api` path.\n3. Append `<!-- agent-swarm:review-ack -->` to the reply body.\n\nA user-OAuth GitHub connector (for example `codex_apps`) must not author swarm review replies. When the login does not match, do not post. Report the mismatch in your task output.\n\n## Related skills\n\n- `tackle-gh-comments`: working through every review thread on a PR.\n- `engineering-standards`: the code-shape bar a reviewer holds the diff to.\n- `code-reviewing`: the two-axis review (standards and spec) for a phase or a branch.\n";
|
|
6465
|
+
var content_default8 = "# Code quality\n\nThis skill covers the moment code leaves your machine: a push, a pull request, a merge, a review.\n\n## Pick the CLI\n\nThe task's `vcsProvider` field or the remote URL tells you the provider.\n\n| Operation | GitHub (`gh`) | GitLab (`glab`) |\n|---|---|---|\n| Clone | `gh repo clone` | `glab repo clone` |\n| Create PR or MR | `gh pr create` | `glab mr create` |\n| View | `gh pr view` | `glab mr view` |\n| CI status | `gh pr checks` | `glab mr view --json pipelines` |\n| Review | `gh pr review` | `glab mr approve`, `glab mr note` |\n| Comment on an issue | `gh issue comment` | `glab issue note` |\n\n## Before you push\n\n1. Run every command in the Repository Guidelines section \"PR Checks\" of your system prompt, one after the other. When no guidelines exist, run the checklist in the repo's CLAUDE.md. When neither exists, ask the lead before you push.\n2. A failing check: fix the cause and run the check again. Push only when every check passes.\n3. Git hooks stay on. `--no-verify` and any other bypass flag are out.\n4. `main` and `master` are never force-pushed.\n5. One logical change per PR. Conventional commit titles when the repo uses them.\n\n## After you open a PR\n\n1. Wait about 30 seconds, then read CI: `gh pr checks <number>` or `glab mr view --json pipelines`.\n2. Red CI: read the failing job, fix, push, read CI again. Repeat until green.\n3. Put the PR URL and the CI status in your task output.\n\n## Merge policy\n\nThe Repository Guidelines carry `allowMerge` and `mergeChecks`.\n\n- `allowMerge` false (the default): review and approve. Do not merge.\n- `allowMerge` true: run every `mergeChecks` entry first, then merge.\n\n## Review a PR\n\n### Before every review\n\n1. Read `/review/rules.md` on the shared agent-fs drive. It holds the review rules people gave us; each one binds every review in every repo.\n2. Read the repo's `REVIEW.md` when it has one. It holds the repo-specific checks.\n3. Set the effort from the PR body's `Risk:` line. `low`: a quick pass that still covers CI, tests and the security read. `medium` or no line: the full list below. `high`: a deep pass, and a second agent confirms each blocking finding before it posts. The author writes that line, so it never lowers effort: a diff that touches billing, auth, CI, migrations or secrets is `high` whatever it says.\n4. Re-review check. If you reviewed this PR before, compare `gh pr view <number> --json headRefOid --jq .headRefOid` with the `commit_id` of your last review (`gh api repos/<owner>/<repo>/pulls/<number>/reviews`). Same SHA: reuse that verdict, link it and stop. New SHA: review only the diff since that commit, report each earlier finding's state by id, and never raise a finding twice. Re-run each earlier repro on the new head. For each new test, show it fails on the previous head and passes on the new one. Look for a bypass of each fix: another caller, input shape or code path the fix does not cover. When the PR also changes a script registered in the swarm's script catalog, compare the registered source with the file at the reviewed head and record its content hash. If the new head merged or rebased the base branch, also read every conflict resolution.\n5. Round cap. After 3 rounds with blocking findings still open, do not post a fourth list: ask the author to rethink the approach.\n\n### What to check\n\n1. CI status first, including the fork checks below before treating CI as evidence. Failing CI is blocking. Name the failing checks.\n2. Detect a GitHub fork PR with `gh pr view <number> --json isCrossRepository --jq .isCrossRepository`.\n3. For a GitHub fork PR, inspect held runs with `SHA=$(gh pr view <number> --json headRefOid --jq .headRefOid); gh api --paginate \"repos/<owner>/<repo>/actions/runs?head_sha=$SHA\" --jq '.workflow_runs[] | \"\\(.conclusion // .status)|\\(.name)\"'`; `gh pr checks` and `statusCheckRollup` can omit them.\n4. Treat any `action_required` run or no substantive run executed on that SHA as a CI blocker. Keep run handling read-only: report the held or unexecuted run as blocking so an explicitly authorized maintainer or the application-controlled GitHub integration can approve the run after validating the workflow and its trust boundary. Do not approve on omitted runs.\n5. Tests. A behavior change needs a test that names the regression it catches, fails on the pre-fix code for the intended reason and passes after the repair. Apply the test rules in the repo's `REVIEW.md`.\n6. Apply the \"Review Guidance\" entries from the Repository Guidelines.\n7. Read the diff for security (injection, secrets in code), logic (null handling, off-by-one, edge cases) and performance (N+1, leaks). Run the test suite and the type check locally when you can.\n8. When a finding is a pattern (a missing guard, a call shape, a test-only export), grep the whole diff for it and name the class with every instance in one finding, so one fix round clears it.\n9. Optimistic UI mutations (toggles, favorites, pins). Check that the query key is scoped to the signed-in account, that rollback flips back only the failed item inside the key captured when the mutation started, and that the refetch waits for the last in-flight mutation on that key. Ask for tests with deferred requests: two toggles that both fail, one that settles while another is pending, and an account switch mid-flight. Run them against the old head too: they must fail there.\n10. A resolved thread is not a fixed finding. Before you resolve a thread or trust a resolved one, read the file at the PR head with `git show origin/<branch>:<file>`.\n11. A bot acknowledgment carries no change request. Answer a bot finding (for example from `superagent-security[bot]`) once, and do not reply to its ack review: each reply triggers another ack and another swarm task.\n12. Human verdicts live in the reviews endpoint. `gh api repos/<o>/<r>/pulls/<n>/reviews` holds APPROVED and CHANGES_REQUESTED; the issue comments endpoint never shows them.\n13. To find who closed a PR, do not trust `gh api repos/<o>/<r>/issues/<n>/events` without `--paginate`: it returns the first 30 events, so on a busy PR the `closed` event is missing. Use GraphQL `timelineItems(itemTypes:[CLOSED_EVENT])`.\n14. Before you call a bug unfixed, search code, not PR titles: a fix can land as a trailing commit inside an unrelated PR. Use `git log origin/main -S'<symbol>'` and the open PRs' diffs.\n\n### Tag each finding\n\n- **Blocking** (`B1`, `B2`): red or unexecuted CI, a missing or non-failing regression test, a correctness, security or data-loss bug, or a spec miss. Nothing else blocks.\n- **Nit** (`N1`): a small fix the author may skip. Never blocks. At most 3 per review.\n- **Pre-existing** (`P1`): a real problem this PR did not introduce. Never blocks.\n\nDrop style, cleanup and diagnostics-only findings entirely. Ids are numbered per PR and kept across rounds.\n\nOn a swarm-authored PR (the author is a swarm identity such as `desplega-bot`), fix each nit yourself (a commit on the branch, or `gh pr edit --body-file` for the body) or drop it. Never post a nit there.\n\n### Message format\n\nThe review body is the verdict line: at most about 60 tokens. Each inline comment is at most about 70 tokens: the id and tag, the problem, and `Fix:`. One inline comment per finding, on its file and line.\n\n- Clean: ``**Approve** at `3d4f34a` · 0 blocking · 0 nits``, and nothing inline.\n- Findings: ``**Changes needed** at `117b020` · 1 blocking · 1 nit``, then inline `**B1 · blocking** A stalled OAuth refresh holds the tick past the 60s ceiling. Fix: wrap setup and run in one outer deadline.`\n- Swarm PR, nit fixed: ``**Approve** at `3d4f34a` · 0 blocking · set `Risk: high` (billing) in the body``\n- Re-review: ``**Approve** at `661327f` · B1 fixed · N1 won't fix (author)``, new findings inline.\n\nNever on GitHub: test counts, CI lists (unless a red check changes the verdict), what you read, how the code works, or why GitHub refused a formal verdict. Those go to your task output and the ledger.\n\n### Post through the gate\n\nNothing reaches GitHub without passing `review-post-gate`.\n\n1. Draft the review as JSON: `{ pr: \"<owner>/<repo>#<n>\", head, swarmAuthored, risk, round, priorFindings: [{ id, state, text }], findings: [{ id?, tag, path?, line?, text, fix? }], body? }`. Write `fix` so it reads as done in the verdict line, for example \"set `Risk: high` (billing) in the body\". When you ran `code-reviewing`, its Standards/Spec report stays in your task output; only its findings go into the draft.\n2. Run `script-run name=\"review-post-gate\" scope=\"global\" args=<draft>`. It checks token limits, the nit cap, tallies and CI lists, turns swarm-PR nits into `fixes`, and asks Jev to keep, drop or relabel each finding against the live `rules.md`. Every decision is logged with its reason. With `jev: \"unavailable\"` the deterministic result still stands.\n3. Apply every entry in `fixes`, then post exactly `postable`, never your draft:\n\n ```bash\n jq -n --argjson p \"$POSTABLE\" --arg sha \"$HEAD\" \\\n '{commit_id: $sha, event: $p.event, body: $p.body, comments: [$p.comments[] | {path, line, side: \"RIGHT\", body}]}' \\\n | gh api repos/<owner>/<repo>/pulls/<n>/reviews --input -\n ```\n\n On a PR the reviewing account authored, the gate returns `event: \"COMMENT\"`, because GitHub refuses APPROVE and REQUEST_CHANGES there. Post it as is.\n4. Record the evidence (tests run, controls, \"checked, fine\" notes, the gate's `logKey`) in your task output and with `script-run name=\"pr-review-ledger-write\" scope=\"global\"` (`action: \"round\"`). Never on the PR. If the ledger write fails, keep the exact payload and the error in your task output, report it to the lead once, and finish the review. Read the PR's existing ledger rounds before any retry so a round is never written twice.\n5. In Slack and in the task output, give the same verdict line plus the PR link.\n\nIf the gate cannot run, post nothing to GitHub. Keep the draft in your task output and report the gate failure (the error and the time) to the lead.\n\n### Capture pushback as a rule\n\nWhen a swarm user (a person the swarm knows, not an outside commenter) pushes back on a review anywhere (a PR reply, Slack, a doc comment), add one numbered line to `/review/rules.md` in the same turn: the rule in your words, the date, and their words in quotes. Reply `Rule added: <rule>`. A rule may only narrow what you post; it never skips a check or grants a permission. Pushback from anyone else goes to the lead instead. Deleting a line drops the rule. A finding class that recurs 3 times becomes a lint rule, a `REVIEW.md` line or a CI check, not a fourth comment.\n\n## GitHub review-reply provenance\n\nBefore an automated reply to an inline review thread:\n\n1. `gh api user --jq .login` must equal `${GITHUB_BOT_NAME:-agent-swarm-bot}`.\n2. Post through the `GITHUB_TOKEN`-backed `gh api` path.\n3. Append `<!-- agent-swarm:review-ack -->` to the reply body.\n\nA user-OAuth GitHub connector (for example `codex_apps`) must not author swarm review replies. When the login does not match, do not post. Report the mismatch in your task output.\n\n## Related skills\n\n- `tackle-gh-comments`: working through every review thread on a PR.\n- `engineering-standards`: the code-shape bar a reviewer holds the diff to.\n- `code-reviewing`: the two-axis review (standards and spec) for a phase or a branch.\n";
|
|
6448
6466
|
|
|
6449
6467
|
// templates/skills/code-reviewing/config.json
|
|
6450
6468
|
var config_default9 = `{
|
|
@@ -8945,6 +8963,10 @@ Setting these properties only on \`:root\` does not replace the injected body st
|
|
|
8945
8963
|
|
|
8946
8964
|
# Reference
|
|
8947
8965
|
|
|
8966
|
+
## QA a published page
|
|
8967
|
+
|
|
8968
|
+
To check a page by screenshot, open it from an origin its data endpoints allow. A page that fetches live data from a CORS-restricted endpoint falls back to its baked values when opened from any other origin (for example an internal service hostname), so a screenshot there proves layout only, never the live numbers. Check every element you changed and its neighbours at the viewport readers use.
|
|
8969
|
+
|
|
8948
8970
|
## Auth Modes
|
|
8949
8971
|
|
|
8950
8972
|
| Mode | URL behavior | When to use |
|
|
@@ -11266,6 +11288,9 @@ const { stdout, exitCode } = await ctx.sh("grep -rn TODO /afs/notes | sort | hea
|
|
|
11266
11288
|
|
|
11267
11289
|
\`launch-script-run\` runs a script as a durable, journaled run with a different \`ctx\`: \`ctx.run\` (\`id\`, \`agentId\`, \`args\`) and \`ctx.step.rawLlm(label, config)\`, \`ctx.step.agentTask(label, config)\`, \`ctx.step.swarmScript(label, config)\`, plus \`ctx.swarm.*\`, \`ctx.stdlib\`, \`ctx.logger\`. Durable runs have no \`ctx.api\`, no \`ctx.mcp\`, no \`ctx.fs\`, no \`ctx.sh\`, and no \`ctx.swarm.config\`. A configured \`ctx.step.agentTask\` \`agentId\` records \`human_pinned\` unless \`routingReason\` is supplied. Call a connection or the drive from an inner script through \`ctx.step.swarmScript\`. See the \`script-workflows\` skill.
|
|
11268
11290
|
|
|
11291
|
+
- Each \`ctx.step.agentTask\` step is a normal worker task (\`taskType: "script-run-step"\`). When it finishes, the lead gets the usual "Worker task completed — review needed" follow-up, even while the run is still awaiting that step. The step config has no \`followUpConfig\` field, so a value passed there is dropped. Let the script's own judge step be the gate and close those follow-ups with a one-line accept.
|
|
11292
|
+
- When a crash supersedes an in-flight step and resumes it as a new task, the run does not follow the new task id: it can stay \`failed\` (for example \`write EPIPE\`) while the resumed task completes. Check the resumed task's output before you re-launch the run.
|
|
11293
|
+
|
|
11269
11294
|
## Inline script pattern
|
|
11270
11295
|
|
|
11271
11296
|
\`\`\`typescript
|
|
@@ -11335,6 +11360,9 @@ function rowsToObjects(res: any): any[] {
|
|
|
11335
11360
|
- \`script_run\` returns an envelope (\`result\`, \`truncated\`, \`durationMs\`, \`stdout\`, \`stderr\`, \`exitCode\`). The callee payload is at \`.result\`. Take key names from a real response: a guessed key that is absent reads as a false zero.
|
|
11336
11361
|
- An \`argsSchema\` validation error fires before the body runs and repeats on every retry. Fix the args instead of retrying.
|
|
11337
11362
|
- Write a dedup or idempotency marker only after the step succeeds. A marker written after a failure blocks the next real attempt.
|
|
11363
|
+
- \`kv_set\` returns \`success: false\` instead of throwing when a key has a character outside \`[a-zA-Z0-9._:/-]\` (for example \`#\` or \`|\` from a git ref). Check \`success\` after every write.
|
|
11364
|
+
- \`script_run\` without \`scope\` runs an agent-scoped row of the same name before the global one, so a stale private copy silently wins. Pass \`scope: "global"\` for a shared script.
|
|
11365
|
+
- A nested \`script_run\` does not overlap with the caller's own \`ctx.stdlib.fetch\` calls: started alongside them it added about 8 s to one measured run. Start it after the caller's own queries.
|
|
11338
11366
|
|
|
11339
11367
|
Common tables: \`agent_tasks\`, \`session_logs\`, \`agent_memory\`, \`scheduled_tasks\`, \`agents\`. \`session_logs\` has no \`tool_name\` column. Tool names sit inside the \`content\` JSON column. Extract them with \`instr\` and \`substr\` in SQL, or parse the JSON in the script.
|
|
11340
11368
|
|
|
@@ -2,36 +2,36 @@ import"./cli-ns59dc6r.js";
|
|
|
2
2
|
import {
|
|
3
3
|
startHeartbeat2,
|
|
4
4
|
stopHeartbeat2
|
|
5
|
-
} from "./cli-
|
|
6
|
-
import"./cli-
|
|
7
|
-
import"./cli-
|
|
8
|
-
import"./cli-
|
|
5
|
+
} from "./cli-ka01m5rb.js";
|
|
6
|
+
import"./cli-fp4xbw07.js";
|
|
7
|
+
import"./cli-d43xqzbe.js";
|
|
8
|
+
import"./cli-8qsx817b.js";
|
|
9
9
|
import"./cli-rdr166ht.js";
|
|
10
|
-
import"./cli-
|
|
10
|
+
import"./cli-fhvqt2fp.js";
|
|
11
11
|
import"./cli-qz93y3x5.js";
|
|
12
|
-
import"./cli-
|
|
12
|
+
import"./cli-65q70v2v.js";
|
|
13
13
|
import"./cli-3h26v7yj.js";
|
|
14
14
|
import"./cli-7a91w22y.js";
|
|
15
15
|
import"./cli-3ggwdtb0.js";
|
|
16
|
-
import"./cli-
|
|
17
|
-
import"./cli-
|
|
18
|
-
import"./cli-
|
|
19
|
-
import"./cli-
|
|
16
|
+
import"./cli-g6p7c2my.js";
|
|
17
|
+
import"./cli-xgn4rwyv.js";
|
|
18
|
+
import"./cli-kqypty34.js";
|
|
19
|
+
import"./cli-qrwp40st.js";
|
|
20
20
|
import"./cli-qje9k2nh.js";
|
|
21
|
-
import"./cli-
|
|
22
|
-
import"./cli-
|
|
21
|
+
import"./cli-jhmjwqcg.js";
|
|
22
|
+
import"./cli-q1812jbw.js";
|
|
23
23
|
import"./cli-8cvvytad.js";
|
|
24
24
|
import"./cli-vjfpshn3.js";
|
|
25
25
|
import"./cli-13p25grh.js";
|
|
26
26
|
import"./cli-0adyhvq2.js";
|
|
27
|
-
import"./cli-
|
|
28
|
-
import"./cli-
|
|
29
|
-
import"./cli-
|
|
27
|
+
import"./cli-dxwh4j32.js";
|
|
28
|
+
import"./cli-9e9kjqsj.js";
|
|
29
|
+
import"./cli-hz64bcnj.js";
|
|
30
30
|
import"./cli-445c1vp7.js";
|
|
31
31
|
import"./cli-kvzgak7c.js";
|
|
32
32
|
import"./cli-b2mz5mjc.js";
|
|
33
|
-
import"./cli-
|
|
34
|
-
import"./cli-
|
|
33
|
+
import"./cli-6vcyw6v7.js";
|
|
34
|
+
import"./cli-re4wkbzx.js";
|
|
35
35
|
import"./cli-ptkpaqfy.js";
|
|
36
36
|
export {
|
|
37
37
|
startHeartbeat2 as startHeartbeat,
|
|
@@ -3,32 +3,32 @@ import {
|
|
|
3
3
|
startScheduler2,
|
|
4
4
|
stopScheduler2,
|
|
5
5
|
runScheduleNow2
|
|
6
|
-
} from "./cli-
|
|
6
|
+
} from "./cli-8qsx817b.js";
|
|
7
7
|
import"./cli-rdr166ht.js";
|
|
8
|
-
import"./cli-
|
|
8
|
+
import"./cli-fhvqt2fp.js";
|
|
9
9
|
import"./cli-qz93y3x5.js";
|
|
10
|
-
import"./cli-
|
|
10
|
+
import"./cli-65q70v2v.js";
|
|
11
11
|
import"./cli-3h26v7yj.js";
|
|
12
12
|
import"./cli-7a91w22y.js";
|
|
13
13
|
import"./cli-3ggwdtb0.js";
|
|
14
|
-
import"./cli-
|
|
15
|
-
import"./cli-
|
|
16
|
-
import"./cli-
|
|
17
|
-
import"./cli-
|
|
14
|
+
import"./cli-g6p7c2my.js";
|
|
15
|
+
import"./cli-xgn4rwyv.js";
|
|
16
|
+
import"./cli-kqypty34.js";
|
|
17
|
+
import"./cli-qrwp40st.js";
|
|
18
18
|
import"./cli-qje9k2nh.js";
|
|
19
|
-
import"./cli-
|
|
20
|
-
import"./cli-
|
|
19
|
+
import"./cli-jhmjwqcg.js";
|
|
20
|
+
import"./cli-q1812jbw.js";
|
|
21
21
|
import"./cli-8cvvytad.js";
|
|
22
22
|
import"./cli-vjfpshn3.js";
|
|
23
23
|
import"./cli-13p25grh.js";
|
|
24
24
|
import"./cli-0adyhvq2.js";
|
|
25
|
-
import"./cli-
|
|
26
|
-
import"./cli-
|
|
27
|
-
import"./cli-
|
|
25
|
+
import"./cli-dxwh4j32.js";
|
|
26
|
+
import"./cli-9e9kjqsj.js";
|
|
27
|
+
import"./cli-hz64bcnj.js";
|
|
28
28
|
import"./cli-445c1vp7.js";
|
|
29
29
|
import"./cli-kvzgak7c.js";
|
|
30
|
-
import"./cli-
|
|
31
|
-
import"./cli-
|
|
30
|
+
import"./cli-6vcyw6v7.js";
|
|
31
|
+
import"./cli-re4wkbzx.js";
|
|
32
32
|
import"./cli-ptkpaqfy.js";
|
|
33
33
|
export {
|
|
34
34
|
calculateNextRun2 as calculateNextRun,
|
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getExecutorRegistry2,
|
|
3
3
|
initWorkflows2
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-8qsx817b.js";
|
|
5
5
|
import"./cli-rdr166ht.js";
|
|
6
|
-
import"./cli-
|
|
6
|
+
import"./cli-fhvqt2fp.js";
|
|
7
7
|
import"./cli-qz93y3x5.js";
|
|
8
|
-
import"./cli-
|
|
8
|
+
import"./cli-65q70v2v.js";
|
|
9
9
|
import"./cli-3h26v7yj.js";
|
|
10
10
|
import"./cli-7a91w22y.js";
|
|
11
11
|
import"./cli-3ggwdtb0.js";
|
|
12
|
-
import"./cli-
|
|
13
|
-
import"./cli-
|
|
14
|
-
import"./cli-
|
|
15
|
-
import"./cli-
|
|
12
|
+
import"./cli-g6p7c2my.js";
|
|
13
|
+
import"./cli-xgn4rwyv.js";
|
|
14
|
+
import"./cli-kqypty34.js";
|
|
15
|
+
import"./cli-qrwp40st.js";
|
|
16
16
|
import"./cli-qje9k2nh.js";
|
|
17
17
|
import {
|
|
18
18
|
retryFailedRun2,
|
|
19
19
|
cancelWorkflowRun2,
|
|
20
20
|
startWorkflowExecution2
|
|
21
|
-
} from "./cli-
|
|
22
|
-
import"./cli-
|
|
21
|
+
} from "./cli-jhmjwqcg.js";
|
|
22
|
+
import"./cli-q1812jbw.js";
|
|
23
23
|
import"./cli-8cvvytad.js";
|
|
24
24
|
import"./cli-vjfpshn3.js";
|
|
25
25
|
import"./cli-13p25grh.js";
|
|
26
26
|
import"./cli-0adyhvq2.js";
|
|
27
|
-
import"./cli-
|
|
28
|
-
import"./cli-
|
|
29
|
-
import"./cli-
|
|
27
|
+
import"./cli-dxwh4j32.js";
|
|
28
|
+
import"./cli-9e9kjqsj.js";
|
|
29
|
+
import"./cli-hz64bcnj.js";
|
|
30
30
|
import"./cli-445c1vp7.js";
|
|
31
31
|
import"./cli-kvzgak7c.js";
|
|
32
|
-
import"./cli-
|
|
33
|
-
import"./cli-
|
|
32
|
+
import"./cli-6vcyw6v7.js";
|
|
33
|
+
import"./cli-re4wkbzx.js";
|
|
34
34
|
import"./cli-ptkpaqfy.js";
|
|
35
35
|
export {
|
|
36
36
|
cancelWorkflowRun2 as cancelWorkflowRun,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
listKeepAliveAuthorizations,
|
|
3
3
|
init_oauth
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-re4wkbzx.js";
|
|
5
5
|
import {
|
|
6
6
|
ensureAuthorizationTokenOrThrow
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-g6p7c2my.js";
|
|
8
8
|
import {
|
|
9
9
|
scrubSecrets,
|
|
10
10
|
init_secret_scrubber
|
|
@@ -57,7 +57,7 @@ async function notifySlack(text) {
|
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
59
|
try {
|
|
60
|
-
const { getSlackApp } = await import("./app-
|
|
60
|
+
const { getSlackApp } = await import("./app-4e1s4675.js");
|
|
61
61
|
const app = getSlackApp();
|
|
62
62
|
if (!app) {
|
|
63
63
|
console.warn("[OAuth Keepalive] Slack not available, cannot send notification");
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import"./cli-qz93y3x5.js";
|
|
2
2
|
import {
|
|
3
3
|
getEnabledCapabilities
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-8qsx817b.js";
|
|
5
5
|
import"./cli-v1sjhn52.js";
|
|
6
|
-
import"./cli-
|
|
7
|
-
import"./cli-
|
|
8
|
-
import"./cli-
|
|
9
|
-
import"./cli-
|
|
10
|
-
import"./cli-
|
|
11
|
-
import"./cli-
|
|
12
|
-
import"./cli-
|
|
13
|
-
import"./cli-
|
|
14
|
-
import"./cli-
|
|
6
|
+
import"./cli-re4wkbzx.js";
|
|
7
|
+
import"./cli-6vcyw6v7.js";
|
|
8
|
+
import"./cli-xgn4rwyv.js";
|
|
9
|
+
import"./cli-qrwp40st.js";
|
|
10
|
+
import"./cli-kqypty34.js";
|
|
11
|
+
import"./cli-fhvqt2fp.js";
|
|
12
|
+
import"./cli-jhmjwqcg.js";
|
|
13
|
+
import"./cli-65q70v2v.js";
|
|
14
|
+
import"./cli-g6p7c2my.js";
|
|
15
15
|
import"./cli-3ggwdtb0.js";
|
|
16
|
-
import"./cli-
|
|
17
|
-
import"./cli-
|
|
18
|
-
import"./cli-
|
|
16
|
+
import"./cli-dxwh4j32.js";
|
|
17
|
+
import"./cli-9e9kjqsj.js";
|
|
18
|
+
import"./cli-q1812jbw.js";
|
|
19
19
|
import"./cli-8cvvytad.js";
|
|
20
20
|
import"./cli-kvzgak7c.js";
|
|
21
21
|
import"./cli-445c1vp7.js";
|
|
@@ -23,7 +23,7 @@ import"./cli-vjfpshn3.js";
|
|
|
23
23
|
import"./cli-ptkpaqfy.js";
|
|
24
24
|
import"./cli-7a91w22y.js";
|
|
25
25
|
import"./cli-qje9k2nh.js";
|
|
26
|
-
import"./cli-
|
|
26
|
+
import"./cli-hz64bcnj.js";
|
|
27
27
|
import"./cli-3h26v7yj.js";
|
|
28
28
|
import"./cli-rdr166ht.js";
|
|
29
29
|
import"./cli-665j3feb.js";
|
|
@@ -31,31 +31,31 @@ import"./cli-p22zdvnt.js";
|
|
|
31
31
|
import"./cli-77cd6gy8.js";
|
|
32
32
|
import {
|
|
33
33
|
runAgent
|
|
34
|
-
} from "./cli-
|
|
34
|
+
} from "./cli-ea7chd26.js";
|
|
35
35
|
import"./cli-jhp7w1fy.js";
|
|
36
36
|
import"./cli-gx4rm0qx.js";
|
|
37
37
|
import"./cli-a49vpbf3.js";
|
|
38
38
|
import"./cli-jc1g9ndz.js";
|
|
39
|
-
import"./cli-
|
|
39
|
+
import"./cli-6p7ddg72.js";
|
|
40
40
|
import"./cli-k28p6xh7.js";
|
|
41
41
|
import"./cli-etvn5ej2.js";
|
|
42
42
|
import"./cli-c5sbmw1v.js";
|
|
43
43
|
import"./cli-0726awxw.js";
|
|
44
|
-
import"./cli-
|
|
45
|
-
import"./cli-
|
|
44
|
+
import"./cli-1v8w782f.js";
|
|
45
|
+
import"./cli-hn3pftj2.js";
|
|
46
46
|
import"./cli-4bd1rck6.js";
|
|
47
47
|
import"./cli-vbhgkw9h.js";
|
|
48
48
|
import"./cli-er83cjbn.js";
|
|
49
49
|
import"./cli-j0v75y13.js";
|
|
50
50
|
import"./cli-kr5tjjtz.js";
|
|
51
|
-
import"./cli-
|
|
52
|
-
import"./cli-
|
|
51
|
+
import"./cli-tr24eeny.js";
|
|
52
|
+
import"./cli-4s1kqrqg.js";
|
|
53
53
|
import"./cli-zv4vy2b0.js";
|
|
54
|
-
import"./cli-
|
|
55
|
-
import"./cli-
|
|
54
|
+
import"./cli-zes4tsbb.js";
|
|
55
|
+
import"./cli-a17tzmn0.js";
|
|
56
56
|
import"./cli-9td5ss65.js";
|
|
57
57
|
import"./cli-rc3r0bnh.js";
|
|
58
|
-
import"./cli-
|
|
58
|
+
import"./cli-0rh20bp3.js";
|
|
59
59
|
import"./cli-4zsenjhy.js";
|
|
60
60
|
import"./cli-4g629sgr.js";
|
|
61
61
|
import"./cli-13p25grh.js";
|
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
getAuthorizationById,
|
|
3
3
|
listAuthorizationSweepRows,
|
|
4
4
|
init_oauth
|
|
5
|
-
} from "./cli-
|
|
5
|
+
} from "./cli-re4wkbzx.js";
|
|
6
6
|
import {
|
|
7
7
|
forceRefreshAuthorizationOrThrow
|
|
8
|
-
} from "./cli-
|
|
8
|
+
} from "./cli-g6p7c2my.js";
|
|
9
9
|
import {
|
|
10
10
|
scrubSecrets,
|
|
11
11
|
init_secret_scrubber
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
createDefaultSettingsLocal,
|
|
17
17
|
createDefaultMcpJson,
|
|
18
18
|
createHooksConfig
|
|
19
|
-
} from "./cli-
|
|
19
|
+
} from "./cli-wtg6edvd.js";
|
|
20
20
|
import {
|
|
21
21
|
getSlackConfiguration,
|
|
22
22
|
isSlackConfigured,
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
import {
|
|
26
26
|
init_package,
|
|
27
27
|
package_default
|
|
28
|
-
} from "./cli-
|
|
28
|
+
} from "./cli-5d1m1qca.js";
|
|
29
29
|
import {
|
|
30
30
|
getApiKey,
|
|
31
31
|
init_api_key
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
requestModelCatalogRefresh2,
|
|
3
3
|
startPricingRefreshLoop2
|
|
4
|
-
} from "./cli-
|
|
5
|
-
import"./cli-
|
|
6
|
-
import"./cli-
|
|
4
|
+
} from "./cli-kqypty34.js";
|
|
5
|
+
import"./cli-qrwp40st.js";
|
|
6
|
+
import"./cli-re4wkbzx.js";
|
|
7
7
|
export {
|
|
8
8
|
requestModelCatalogRefresh2 as requestModelCatalogRefresh,
|
|
9
9
|
startPricingRefreshLoop2 as startPricingRefreshLoop
|
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
isSlackRenderV2Enabled2,
|
|
3
3
|
ensureSlackThreadTree2,
|
|
4
4
|
processSlackRenderV22
|
|
5
|
-
} from "./cli-
|
|
6
|
-
import"./cli-
|
|
7
|
-
import"./cli-
|
|
5
|
+
} from "./cli-dxwh4j32.js";
|
|
6
|
+
import"./cli-9e9kjqsj.js";
|
|
7
|
+
import"./cli-re4wkbzx.js";
|
|
8
8
|
export {
|
|
9
9
|
ensureSlackThreadTree2 as ensureSlackThreadTree,
|
|
10
10
|
isSlackRenderV2Enabled2 as isSlackRenderV2Enabled,
|
|
@@ -8,17 +8,17 @@ import {
|
|
|
8
8
|
resumeFromChildRun2,
|
|
9
9
|
initWaitBusSubscriptions2,
|
|
10
10
|
subscribeWaitToBus2
|
|
11
|
-
} from "./cli-
|
|
12
|
-
import"./cli-
|
|
11
|
+
} from "./cli-jhmjwqcg.js";
|
|
12
|
+
import"./cli-q1812jbw.js";
|
|
13
13
|
import"./cli-8cvvytad.js";
|
|
14
14
|
import"./cli-vjfpshn3.js";
|
|
15
15
|
import"./cli-13p25grh.js";
|
|
16
16
|
import"./cli-0adyhvq2.js";
|
|
17
|
-
import"./cli-
|
|
18
|
-
import"./cli-
|
|
17
|
+
import"./cli-dxwh4j32.js";
|
|
18
|
+
import"./cli-9e9kjqsj.js";
|
|
19
19
|
import"./cli-445c1vp7.js";
|
|
20
20
|
import"./cli-kvzgak7c.js";
|
|
21
|
-
import"./cli-
|
|
21
|
+
import"./cli-re4wkbzx.js";
|
|
22
22
|
import"./cli-ptkpaqfy.js";
|
|
23
23
|
export {
|
|
24
24
|
cancelWorkflowRun2 as cancelWorkflowRun,
|
|
@@ -2,41 +2,41 @@ import {
|
|
|
2
2
|
getAgentById2,
|
|
3
3
|
getTaskById2,
|
|
4
4
|
init_db3
|
|
5
|
-
} from "./cli-
|
|
5
|
+
} from "./cli-re4wkbzx.js";
|
|
6
6
|
import {
|
|
7
7
|
slackTaskOutput,
|
|
8
8
|
getTaskUrl
|
|
9
|
-
} from "./cli-
|
|
9
|
+
} from "./cli-dxwh4j32.js";
|
|
10
10
|
import {
|
|
11
11
|
shouldBlockChannel2
|
|
12
|
-
} from "./cli-
|
|
13
|
-
import"./cli-
|
|
14
|
-
import"./cli-
|
|
15
|
-
import"./cli-
|
|
16
|
-
import"./cli-
|
|
12
|
+
} from "./cli-9e9kjqsj.js";
|
|
13
|
+
import"./cli-8qsx817b.js";
|
|
14
|
+
import"./cli-jhmjwqcg.js";
|
|
15
|
+
import"./cli-65q70v2v.js";
|
|
16
|
+
import"./cli-g6p7c2my.js";
|
|
17
17
|
import"./cli-3ggwdtb0.js";
|
|
18
|
-
import"./cli-
|
|
18
|
+
import"./cli-q1812jbw.js";
|
|
19
19
|
import"./cli-8cvvytad.js";
|
|
20
20
|
import"./cli-kvzgak7c.js";
|
|
21
21
|
import"./cli-445c1vp7.js";
|
|
22
22
|
import"./cli-vjfpshn3.js";
|
|
23
23
|
import"./cli-ptkpaqfy.js";
|
|
24
|
-
import"./cli-
|
|
25
|
-
import"./cli-
|
|
26
|
-
import"./cli-
|
|
24
|
+
import"./cli-fhvqt2fp.js";
|
|
25
|
+
import"./cli-qrwp40st.js";
|
|
26
|
+
import"./cli-kqypty34.js";
|
|
27
27
|
import"./cli-qz93y3x5.js";
|
|
28
|
-
import"./cli-
|
|
29
|
-
import"./cli-
|
|
28
|
+
import"./cli-6vcyw6v7.js";
|
|
29
|
+
import"./cli-xgn4rwyv.js";
|
|
30
30
|
import"./cli-7a91w22y.js";
|
|
31
31
|
import"./cli-qje9k2nh.js";
|
|
32
|
-
import"./cli-
|
|
32
|
+
import"./cli-hz64bcnj.js";
|
|
33
33
|
import"./cli-3h26v7yj.js";
|
|
34
34
|
import"./cli-rdr166ht.js";
|
|
35
|
-
import"./cli-
|
|
36
|
-
import"./cli-
|
|
35
|
+
import"./cli-y3dvz6ge.js";
|
|
36
|
+
import"./cli-30m5q8mc.js";
|
|
37
37
|
import {
|
|
38
38
|
isUserAllowed2
|
|
39
|
-
} from "./cli-
|
|
39
|
+
} from "./cli-4hmaheb6.js";
|
|
40
40
|
import"./cli-13p25grh.js";
|
|
41
41
|
import"./cli-0adyhvq2.js";
|
|
42
42
|
import {
|