opencode-swarm 7.190.1 → 7.191.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.
Files changed (78) hide show
  1. package/.opencode/skills/swarm-pr-review/SKILL.md +2 -2
  2. package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
  3. package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
  4. package/dist/cli/{auto-checkpoint-26m3h5f4.js → auto-checkpoint-rdwd6w8t.js} +6 -6
  5. package/dist/cli/{checkpoint-7a0achpv.js → checkpoint-jvccxnf3.js} +10 -10
  6. package/dist/cli/{coder-settlement-dsb1t39t.js → coder-settlement-tezdqdzb.js} +4 -4
  7. package/dist/cli/{config-doctor-9txawzng.js → config-doctor-48ehw0b0.js} +8 -8
  8. package/dist/cli/{core-kv7jz9ty.js → core-xevv38dk.js} +2 -2
  9. package/dist/cli/{curator-drift-kxn5sk3z.js → curator-drift-ej1s4fv9.js} +6 -6
  10. package/dist/cli/{curator-llm-factory-hs2y9kmw.js → curator-llm-factory-bx720pwc.js} +27 -27
  11. package/dist/cli/{curator-26yzg8wp.js → curator-xckkw7yt.js} +27 -27
  12. package/dist/cli/{doctor-knowledge-receipt-phase-id-z8wea03e.js → doctor-knowledge-receipt-phase-id-89jrgknr.js} +6 -6
  13. package/dist/cli/{evidence-summary-service-bg5zq78s.js → evidence-summary-service-b8jqdf13.js} +11 -11
  14. package/dist/cli/{gate-evidence-0beg9c7r.js → gate-evidence-xcydwkha.js} +3 -3
  15. package/dist/cli/{guardrail-explain-n8bm0hpm.js → guardrail-explain-wvymt5na.js} +28 -28
  16. package/dist/cli/{guardrail-log-r2zazmbn.js → guardrail-log-5mmc2y1v.js} +4 -4
  17. package/dist/cli/{guardrail-reset-0q54t44w.js → guardrail-reset-8nje6gxk.js} +27 -27
  18. package/dist/cli/{hive-promoter-7dr5b9zv.js → hive-promoter-sd1h9vjg.js} +27 -27
  19. package/dist/cli/{index-sfjpbnqs.js → index-0331n4t3.js} +27 -27
  20. package/dist/cli/{index-ay8ggtgr.js → index-25p51rw2.js} +2 -2
  21. package/dist/cli/{index-bcwmn4d7.js → index-2e2v96yk.js} +1 -1
  22. package/dist/cli/{index-yy5yyyst.js → index-46fe64s6.js} +5 -5
  23. package/dist/cli/{index-67a6mk20.js → index-4c7qdtcy.js} +1 -1
  24. package/dist/cli/{index-rjzn7hf0.js → index-4wsvkvhc.js} +4 -4
  25. package/dist/cli/{index-fthhppnc.js → index-5y2y23ac.js} +29 -29
  26. package/dist/cli/{index-xdq6mak1.js → index-7r41s196.js} +1 -1
  27. package/dist/cli/{index-dbdkh7pq.js → index-7rapcpgx.js} +2 -2
  28. package/dist/cli/{index-2c47efpt.js → index-9mq96f00.js} +2 -2
  29. package/dist/cli/{index-1f084tqn.js → index-ap0tkg3v.js} +102 -63
  30. package/dist/cli/{index-bfyh3gpe.js → index-aw4ex9kn.js} +4 -4
  31. package/dist/cli/{index-sc7t1tev.js → index-evj271tm.js} +6 -6
  32. package/dist/cli/{index-spgfs5y7.js → index-hq84mfha.js} +1 -1
  33. package/dist/cli/{index-4a15347d.js → index-hqdfm79v.js} +1 -1
  34. package/dist/cli/{index-pkhbd2t5.js → index-j5nhx6e8.js} +1 -0
  35. package/dist/cli/{index-enq166kw.js → index-kar6wt5k.js} +2 -2
  36. package/dist/cli/{index-cewpxcwm.js → index-kdsdybmz.js} +5 -5
  37. package/dist/cli/{index-dnp4qtpf.js → index-ks4h9hag.js} +1 -1
  38. package/dist/cli/{index-f46dbyew.js → index-mnx6hgh0.js} +3 -3
  39. package/dist/cli/{index-v3j9fk16.js → index-msz0qtfy.js} +1 -1
  40. package/dist/cli/{index-hx1fmywk.js → index-n9wg3f7d.js} +2 -2
  41. package/dist/cli/{index-s8b67e6h.js → index-pksy4nzv.js} +4 -0
  42. package/dist/cli/{index-efztf4yw.js → index-r27sprvr.js} +1 -1
  43. package/dist/cli/{index-s9cgnd2z.js → index-rq6tz67x.js} +1 -1
  44. package/dist/cli/{index-0yrg10jx.js → index-se6v59r8.js} +2 -2
  45. package/dist/cli/{index-0gve0mkj.js → index-tn2znwwf.js} +3 -3
  46. package/dist/cli/{index-26e2s6r1.js → index-wxsmmw0j.js} +1 -1
  47. package/dist/cli/{index-ha0w0a7t.js → index-y6hwrfkt.js} +2 -2
  48. package/dist/cli/{index-m28dzyy8.js → index-y8ak7me7.js} +3 -3
  49. package/dist/cli/{index-0z8vdkvg.js → index-ykkpkzf7.js} +2 -2
  50. package/dist/cli/{index-gqb8etv4.js → index-zr2ywh0s.js} +3 -3
  51. package/dist/cli/index.js +28 -28
  52. package/dist/cli/{knowledge-escalator-hdrqt5pj.js → knowledge-escalator-8ppf9pcx.js} +9 -9
  53. package/dist/cli/{knowledge-events-ttebc8gn.js → knowledge-events-6tqb0a12.js} +7 -7
  54. package/dist/cli/{knowledge-store-8cxv6w2n.js → knowledge-store-2y8rpsj2.js} +1 -1
  55. package/dist/cli/{knowledge-validator-kr5xmqpa.js → knowledge-validator-5drk80a9.js} +2 -2
  56. package/dist/cli/{mcp-jtk79ygp.js → mcp-pehs7fdc.js} +1 -1
  57. package/dist/cli/{model-preflight-d6tt7479.js → model-preflight-wq4ejsrk.js} +27 -27
  58. package/dist/cli/{pending-delegations-ttk09f50.js → pending-delegations-6yd5nraz.js} +2 -2
  59. package/dist/cli/{pr-subscriptions-2kbeezsr.js → pr-subscriptions-a1xd8smp.js} +1 -1
  60. package/dist/cli/{pr-workflow-gate-3ra6p7k4.js → pr-workflow-gate-prb2tzz7.js} +27 -27
  61. package/dist/cli/{scan-cursor-zzccy117.js → scan-cursor-waxfq7x5.js} +2 -2
  62. package/dist/cli/{schema-9prswg1x.js → schema-zx5j97ww.js} +2 -2
  63. package/dist/cli/{scope-persistence-eqm8vwnx.js → scope-persistence-2q1jzy0h.js} +6 -6
  64. package/dist/cli/{server-swjre81h.js → server-70mbpd3m.js} +27 -27
  65. package/dist/cli/{skill-generator-d8dk9vps.js → skill-generator-xarcb8vm.js} +10 -10
  66. package/dist/cli/{snapshot-coordination-init-f49y0zr0.js → snapshot-coordination-init-cqxsm2rr.js} +27 -27
  67. package/dist/cli/{speckit-checkoff-pnb6q9gd.js → speckit-checkoff-fgt7fdvj.js} +4 -4
  68. package/dist/cli/{worktree-collision-ownership-3c7xyc4p.js → worktree-collision-ownership-bk6znw4c.js} +2 -2
  69. package/dist/cli/{worktree-isolation-jggdf28m.js → worktree-isolation-79jmdq2z.js} +27 -27
  70. package/dist/config/evidence-schema.d.ts +3 -0
  71. package/dist/index.js +46 -38
  72. package/dist/pr-review/render-review-body.d.ts +53 -0
  73. package/dist/tools/index.d.ts +1 -0
  74. package/dist/tools/manifest.d.ts +1 -0
  75. package/dist/tools/pr-review-submission.d.ts +10 -0
  76. package/dist/tools/secretscan.d.ts +26 -4
  77. package/dist/tools/tool-metadata.d.ts +4 -0
  78. package/package.json +1 -1
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Pure PR-review submission body renderer (issue #3096, Workstream C PR 1/2).
3
+ *
4
+ * Renders settled PR-review findings into the GitHub PR Review submission body
5
+ * plus the inline-comment plan. STRICTLY pure: no filesystem, no network, no
6
+ * clock — authorization and transport live in `src/tools/pr-review-submission.ts`
7
+ * so any future preview surface (e.g. #3097 post-abort export) can reuse this
8
+ * module without submission authority.
9
+ */
10
+ export declare const PR_REVIEW_INLINE_COMMENT_CAP = 20;
11
+ /** GitHub rejects oversized review bodies (~64 KiB); cap the rendered body below it. */
12
+ export declare const PR_REVIEW_BODY_CHAR_CAP = 60000;
13
+ export interface RendererFinding {
14
+ finding_id: string;
15
+ status: string;
16
+ file_line: string;
17
+ evidence: string;
18
+ next_action: string;
19
+ severity?: string;
20
+ }
21
+ export interface RendererCoverage {
22
+ kind: string;
23
+ unresolved_dimensions: string[];
24
+ }
25
+ export interface RenderReviewBodyInput {
26
+ run_id: string;
27
+ pr_head_sha: string;
28
+ verdict?: string;
29
+ base_verification?: string;
30
+ coverage: RendererCoverage;
31
+ findings: RendererFinding[];
32
+ /** Previously posted comment/review bodies; findings whose rendered marker already appears are skipped (AC4 dedupe). */
33
+ existingComments?: string[];
34
+ }
35
+ export interface RenderedInlineComment {
36
+ path: string;
37
+ line: number;
38
+ body: string;
39
+ finding_id: string;
40
+ }
41
+ export interface RenderedReviewBody {
42
+ body: string;
43
+ inlineComments: RenderedInlineComment[];
44
+ /** finding ids skipped because their rendered marker already appears in existingComments. */
45
+ skippedAsPosted: string[];
46
+ /** inline comments dropped by the cap (disclosed in the body). */
47
+ truncatedInlineComments: number;
48
+ /** findings omitted from the body as dismissed (severity NONE at settlement). */
49
+ dismissedCount: number;
50
+ /** true when the body exceeded PR_REVIEW_BODY_CHAR_CAP and was truncated with a disclosure. */
51
+ bodyTruncated: boolean;
52
+ }
53
+ export declare function renderPrReviewSubmissionBody(input: RenderReviewBodyInput): RenderedReviewBody;
@@ -117,6 +117,7 @@ export { lean_turbo_runner_status } from './lean-turbo-runner-status';
117
117
  export { lean_turbo_status } from './lean-turbo-status';
118
118
  export { lint_spec } from './lint-spec';
119
119
  export { mutation_test } from './mutation-test';
120
+ export { executePrReviewSubmission, pr_review_submission, } from './pr-review-submission';
120
121
  export { executePreparePrWorkflowCheckout, prepare_pr_workflow_checkout, } from './prepare-pr-workflow-checkout';
121
122
  export { executeRebindPrFeedbackHead, rebind_pr_feedback_head, } from './rebind-pr-feedback-head';
122
123
  export { executeRecordBranchFreshness, record_branch_freshness, } from './record-branch-freshness';
@@ -72,6 +72,7 @@ export declare const TOOL_MANIFEST: {
72
72
  plan_conflict_check: () => ToolDefinition;
73
73
  prepare_pr_feedback_scope: () => ToolDefinition;
74
74
  write_pr_review_artifact: () => ToolDefinition;
75
+ pr_review_submission: () => ToolDefinition;
75
76
  write_pr_review_trigger_eval: () => ToolDefinition;
76
77
  test_runner: () => ToolDefinition;
77
78
  test_impact: () => ToolDefinition;
@@ -0,0 +1,10 @@
1
+ import type { ExternalToolRunOptions, ExternalToolRunResult } from '../utils/external-tool-runner.js';
2
+ import { createSwarmTool } from './create-tool.js';
3
+ export declare const _internals: {
4
+ resolveGhBinary: () => string | null;
5
+ runExternalTool: (options: ExternalToolRunOptions) => Promise<ExternalToolRunResult>;
6
+ };
7
+ export declare function executePrReviewSubmission(args: unknown, directory: string, context?: {
8
+ sessionID?: string;
9
+ }): Promise<string>;
10
+ export declare const pr_review_submission: ReturnType<typeof createSwarmTool>;
@@ -18,14 +18,26 @@ export interface SecretscanResult {
18
18
  count: number;
19
19
  files_scanned: number;
20
20
  skipped_files: number;
21
+ /**
22
+ * Files suppressed by `.secretscanignore` patterns (#3107, explicit-files
23
+ * path only; optional for legacy producers, treated as 0). Audit/
24
+ * diagnosability counter — never part of the #2918 vacuous-coverage
25
+ * predicate, which keys on policy_skipped_files. The directory path emits
26
+ * literal 0 (traversal prunes at visitation and does not track
27
+ * per-suppression counts — see the caution on policy_skipped_files).
28
+ */
29
+ ignored_files?: number;
21
30
  /**
22
31
  * Skips attributable specifically to scan-policy extension exclusion
23
32
  * (#2918). The extension-exclusion site in runSecretscanOnFiles is the
24
33
  * ONLY increment site: binary-content skips, missing files, invalid
25
- * entries, and every incomplete route deliberately do NOT count, so
26
- * `policy_skipped_files === requested_files` with zero findings and zero
27
- * incomplete coverage proves vacuous coverage (nothing the scan policy
28
- * allows scanning was requested).
34
+ * entries, .secretscanignore suppressions (#3107), and every incomplete
35
+ * route deliberately do NOT count, so `policy_skipped_files ===
36
+ * requested_files` with zero findings and zero incomplete coverage proves
37
+ * vacuous coverage (nothing the scan policy allows scanning was
38
+ * requested). Ignore-file suppressions count toward skipped_files only —
39
+ * a repo-writable ignore file can never satisfy the vacuous-coverage
40
+ * predicate of the changed-file gate.
29
41
  */
30
42
  policy_skipped_files: number;
31
43
  /**
@@ -70,6 +82,16 @@ export declare function runSecretscan(directory: string): Promise<SecretscanResu
70
82
  * Run secretscan over an explicit, already-selected file set.
71
83
  * Used by pre_check_batch so changed-file hard gates share the same detector
72
84
  * registry and entropy logic as the standalone scanner.
85
+ *
86
+ * #3107: also reads `.secretscanignore` at the scan root with the same pattern
87
+ * language and precedence as the directory scan (exact names + globs; comments,
88
+ * blanks, and unsafe patterns skipped; ancestor directories prune like
89
+ * traversal). Ignore-matched files that reach the ignore check count toward
90
+ * `skipped_files` only — never `policy_skipped_files` — so the #2918
91
+ * vacuous-coverage fail-closed arm keeps biting on all-ignored batches. One
92
+ * deliberate carve-out: the docs-safe extension-exclusion route is evaluated
93
+ * FIRST (#2918, pinned by test), so an ignore-matched `.md`/`.markdown`/`.mdx`
94
+ * file keeps its extension accounting and the ignore file is inert for it.
73
95
  */
74
96
  export declare function runSecretscanOnFiles(files: string[], directory: string,
75
97
  /**
@@ -273,6 +273,10 @@ export declare const TOOL_METADATA: {
273
273
  description: string;
274
274
  agents: "architect"[];
275
275
  };
276
+ pr_review_submission: {
277
+ description: string;
278
+ agents: "architect"[];
279
+ };
276
280
  prepare_pr_feedback_scope: {
277
281
  description: string;
278
282
  agents: "architect"[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-swarm",
3
- "version": "7.190.1",
3
+ "version": "7.191.0",
4
4
  "description": "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",