opencode-swarm 7.199.6 → 7.200.1

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 (114) hide show
  1. package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
  2. package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
  3. package/dist/cli/attest-task-sg8b5a5j.js +2209 -0
  4. package/dist/cli/{auto-checkpoint-gv21fb1h.js → auto-checkpoint-bywgxh27.js} +9 -9
  5. package/dist/cli/{checkpoint-rd1bt793.js → checkpoint-k2092cbw.js} +20 -18
  6. package/dist/cli/{coder-settlement-21zd1g3a.js → coder-settlement-y0hkcngn.js} +12 -12
  7. package/dist/cli/{config-doctor-mxe9nr78.js → config-doctor-0fnrwkga.js} +16 -16
  8. package/dist/cli/{core-7bd1sd36.js → core-mfyaj8b4.js} +3 -3
  9. package/dist/cli/{curation-policy-w9y0db1n.js → curation-policy-fth5n93x.js} +6 -6
  10. package/dist/cli/{curator-7rf98h3k.js → curator-1s64jkc3.js} +44 -44
  11. package/dist/cli/{curator-drift-21y19fnz.js → curator-drift-famx6p6s.js} +8 -8
  12. package/dist/cli/curator-llm-factory-vya4epq6.js +82 -0
  13. package/dist/cli/{doctor-knowledge-receipt-phase-id-6pdjxgfa.js → doctor-knowledge-receipt-phase-id-v4y6pbek.js} +9 -9
  14. package/dist/cli/{evidence-summary-service-vdcx7fqd.js → evidence-summary-service-rd7y6yjq.js} +20 -20
  15. package/dist/cli/{gate-evidence-ernx9gck.js → gate-evidence-kama66h5.js} +15 -7
  16. package/dist/cli/guardrail-explain-8fkhq0cg.js +83 -0
  17. package/dist/cli/{guardrail-log-jr6b9rt3.js → guardrail-log-gdj19fq5.js} +7 -7
  18. package/dist/cli/{guardrail-reset-0qyt8vpd.js → guardrail-reset-bmg6czzk.js} +44 -44
  19. package/dist/cli/{hive-promoter-2qwxrrsc.js → hive-promoter-ychygdgc.js} +44 -44
  20. package/dist/cli/{index-s4wbe96z.js → index-0ptf66x5.js} +4 -4
  21. package/dist/cli/{index-cyp3r8ar.js → index-0tygsk8b.js} +10 -10
  22. package/dist/cli/{index-b9f2j9bx.js → index-12h2rtdj.js} +3 -3
  23. package/dist/cli/{index-eyq1q1xn.js → index-1v277wxc.js} +2 -2
  24. package/dist/cli/{index-syaa76vg.js → index-2dm42tgp.js} +48 -46
  25. package/dist/cli/{index-exj9yb0x.js → index-2hnnkj64.js} +1979 -1945
  26. package/dist/cli/{index-7m2gcmm7.js → index-2m740hyt.js} +6 -6
  27. package/dist/cli/{index-cs1d9e03.js → index-2w5grmmj.js} +2 -2
  28. package/dist/cli/{index-88d5kpjj.js → index-3020n6d9.js} +1 -1
  29. package/dist/cli/{index-vgb679vr.js → index-3exe6k66.js} +3 -3
  30. package/dist/cli/{index-gx2vp8gx.js → index-3t46mez1.js} +27 -1
  31. package/dist/cli/{index-38fgg593.js → index-3zspah3v.js} +2 -2
  32. package/dist/cli/{index-f02p4yn4.js → index-51dw4bjc.js} +2 -2
  33. package/dist/cli/{index-hx2f3j9w.js → index-5snwc3dz.js} +2 -2
  34. package/dist/cli/{index-eqw5vq9r.js → index-b0d8ra32.js} +1 -1
  35. package/dist/cli/{index-tsg61z0r.js → index-b4kdms7x.js} +2 -2
  36. package/dist/cli/{index-cwg99gea.js → index-bn3aa5q1.js} +7 -7
  37. package/dist/cli/{index-dtwj4hsk.js → index-c2k7q723.js} +2 -2
  38. package/dist/cli/{index-tqtfjzb0.js → index-c9g3hkjz.js} +3 -3
  39. package/dist/cli/{index-r227g76y.js → index-dgyddtje.js} +6 -6
  40. package/dist/cli/{index-270zfq1f.js → index-epzadpmm.js} +7 -7
  41. package/dist/cli/{index-txh6dtnj.js → index-f6nrw8am.js} +44 -44
  42. package/dist/cli/{index-n1ddn12j.js → index-g57p8p1k.js} +1 -1
  43. package/dist/cli/{index-9y6yk1n0.js → index-na6ph1fp.js} +1 -1
  44. package/dist/cli/{index-bef4nhtj.js → index-nawp90n7.js} +4 -4
  45. package/dist/cli/{index-3mzc5rqc.js → index-nzfq1ms2.js} +3 -3
  46. package/dist/cli/{index-0bw1jyen.js → index-p6v544jn.js} +1 -1
  47. package/dist/cli/{index-s5tgnsmh.js → index-parkaa70.js} +6 -6
  48. package/dist/cli/{index-exr153j1.js → index-pe77h482.js} +5 -5
  49. package/dist/cli/{index-dz15f98h.js → index-q8vfw61p.js} +1 -1
  50. package/dist/cli/{index-s9hekeej.js → index-qaqyq25k.js} +7 -7
  51. package/dist/cli/{index-jhjmf5sn.js → index-qzakbjcg.js} +3 -3
  52. package/dist/cli/{index-2cb644vj.js → index-rzkmg02a.js} +918 -154
  53. package/dist/cli/{index-0je0mees.js → index-s3w41p1x.js} +1 -1
  54. package/dist/cli/{index-zzpy5cx3.js → index-s8eac99p.js} +12 -8
  55. package/dist/cli/{index-j3rfbs45.js → index-s9y49avf.js} +2 -2
  56. package/dist/cli/{index-dqkr60bw.js → index-sva5swrs.js} +172 -14
  57. package/dist/cli/{index-3ct8kgfj.js → index-sz67z90q.js} +4 -4
  58. package/dist/cli/{index-gdyqdhz1.js → index-th667k1y.js} +4 -4
  59. package/dist/cli/{index-jmhn6ab5.js → index-traz987v.js} +2 -2
  60. package/dist/cli/{index-0veqvgny.js → index-v1h70r3y.js} +1 -1
  61. package/dist/cli/{index-snx2vb1x.js → index-ves1rtqt.js} +1 -1
  62. package/dist/cli/{index-qbhjey8k.js → index-vtkgg2qn.js} +3 -3
  63. package/dist/cli/{index-x6rv0e00.js → index-w2bhrp6z.js} +21 -14
  64. package/dist/cli/{index-4cyc18bc.js → index-wgf1780e.js} +7 -7
  65. package/dist/cli/{index-b3ws03kp.js → index-xyvsdn07.js} +1 -1
  66. package/dist/cli/{index-zbygz217.js → index-ypxq0x7r.js} +2 -2
  67. package/dist/cli/{index-t67n8jhb.js → index-z9mysg5m.js} +2 -2
  68. package/dist/cli/index.js +45 -45
  69. package/dist/cli/{knowledge-escalator-rsj9nqqt.js → knowledge-escalator-zxd76jna.js} +15 -15
  70. package/dist/cli/{knowledge-events-appww5kb.js → knowledge-events-z8h0wmaw.js} +13 -13
  71. package/dist/cli/{knowledge-link-t0ce3mw7.js → knowledge-link-wfhsfyn2.js} +5 -5
  72. package/dist/cli/{knowledge-store-n76rzv27.js → knowledge-store-g2gm13s8.js} +6 -6
  73. package/dist/cli/{knowledge-validator-ycxvjasa.js → knowledge-validator-2sech2sx.js} +8 -8
  74. package/dist/cli/{mcp-jy0gk3c8.js → mcp-t88363gj.js} +1 -1
  75. package/dist/cli/{model-preflight-rg0mppzf.js → model-preflight-akj8g1m2.js} +44 -44
  76. package/dist/cli/{pending-delegations-e6brjxp2.js → pending-delegations-bqp6b6as.js} +13 -13
  77. package/dist/cli/{pr-subscriptions-vjsb5ydq.js → pr-subscriptions-wxjvkg56.js} +12 -12
  78. package/dist/cli/{pr-workflow-gate-bj66aa9k.js → pr-workflow-gate-2wcrfa6g.js} +44 -44
  79. package/dist/cli/{runner-wq954cda.js → runner-s1a73y5h.js} +6 -6
  80. package/dist/cli/{scan-cursor-kkg94g0t.js → scan-cursor-8br4x41t.js} +7 -7
  81. package/dist/cli/{schema-d1exxwv8.js → schema-mc419qh8.js} +1 -1
  82. package/dist/cli/{scope-persistence-3v9hce7b.js → scope-persistence-5gyjt70q.js} +16 -16
  83. package/dist/cli/{server-jkcwkh8t.js → server-bp247fqe.js} +46 -46
  84. package/dist/cli/{skill-generator-wg8qfdm8.js → skill-generator-q4afafh3.js} +17 -17
  85. package/dist/cli/{snapshot-coordination-init-xyffgya9.js → snapshot-coordination-init-b4kmrgh7.js} +44 -44
  86. package/dist/cli/{speckit-checkoff-61xn2c2v.js → speckit-checkoff-1v02b2dt.js} +4 -4
  87. package/dist/cli/{telemetry-gena5typ.js → telemetry-cr8q16wk.js} +1 -1
  88. package/dist/cli/{workspace-snapshot-hzhz0rxw.js → workspace-snapshot-93gzfac2.js} +3 -3
  89. package/dist/cli/{worktree-collision-ownership-gsv009xc.js → worktree-collision-ownership-84m9f5an.js} +14 -14
  90. package/dist/cli/{worktree-isolation-3sdvs69a.js → worktree-isolation-xwbszhja.js} +44 -44
  91. package/dist/commands/attest.d.ts +10 -0
  92. package/dist/commands/close/internals.d.ts +1 -1
  93. package/dist/commands/close/orchestrator.d.ts +7 -0
  94. package/dist/commands/destructive-purge.d.ts +15 -0
  95. package/dist/commands/git-status-read.d.ts +23 -0
  96. package/dist/commands/index.d.ts +1 -0
  97. package/dist/commands/registry.d.ts +9 -1
  98. package/dist/commands/rollback-gate.d.ts +77 -10
  99. package/dist/config/plan-schema.d.ts +44 -0
  100. package/dist/gate-evidence.d.ts +138 -1
  101. package/dist/git/branch.d.ts +22 -0
  102. package/dist/index.js +570 -562
  103. package/dist/session/snapshot-coordination-init.d.ts +34 -0
  104. package/dist/session/snapshot-writer.d.ts +5 -1
  105. package/dist/tools/attest-task.d.ts +67 -0
  106. package/dist/tools/checkpoint.d.ts +17 -0
  107. package/dist/tools/phase-complete.d.ts +12 -0
  108. package/dist/tools/save-plan.d.ts +16 -0
  109. package/dist/tools/update-task-status.d.ts +1 -1
  110. package/dist/workflow/task-terminal.d.ts +1 -0
  111. package/dist/workflow/workflow-wal-schema.d.ts +2 -0
  112. package/package.json +1 -1
  113. package/dist/cli/curator-llm-factory-ab821je6.js +0 -82
  114. package/dist/cli/guardrail-explain-7jef0dhs.js +0 -83
@@ -16,6 +16,7 @@
16
16
  * authorization against a process with arbitrary same-user workspace access;
17
17
  * that requires a protected trust root outside the project workspace.
18
18
  */
19
+ import { z } from 'zod';
19
20
  import { appendTaskGateRequirementsReceiptIfNeeded } from './evidence/task-gate-requirements.js';
20
21
  import type { ReviewRouteEvidence } from './review/routing-enforcement.js';
21
22
  import type { TaskWorkflowState } from './state';
@@ -28,7 +29,7 @@ export interface GateEvidence {
28
29
  agent: string;
29
30
  }
30
31
  export declare const TASK_WORKFLOW_SCHEMA_MARKER: "exact-task-v1";
31
- declare const TASK_WORKFLOW_OUTCOMES: readonly ["none", "dispatch_attempted", "dispatch_no_mutation", "accepted_mutation", "accepted_mutation_failed", "stage_a_passed", "stage_a_failed", "stage_b_completed", "stage_b_failed", "gate_recorded", "task_completed", "task_blocked", "task_closed", "repair_idle"];
32
+ declare const TASK_WORKFLOW_OUTCOMES: readonly ["none", "dispatch_attempted", "dispatch_no_mutation", "accepted_mutation", "accepted_mutation_failed", "stage_a_passed", "stage_a_failed", "stage_b_completed", "stage_b_failed", "gate_recorded", "task_completed", "task_blocked", "task_closed", "repair_idle", "external_evidence_attested", "external_evidence_revoked"];
32
33
  export type TaskWorkflowTransitionOutcome = (typeof TASK_WORKFLOW_OUTCOMES)[number];
33
34
  export interface TaskWorkflowMetadata {
34
35
  schema: typeof TASK_WORKFLOW_SCHEMA_MARKER;
@@ -95,6 +96,17 @@ export interface TaskWorkflowMetadata {
95
96
  transitionId: string;
96
97
  declaredFiles: string[];
97
98
  };
99
+ /**
100
+ * Pinned external evidence bundle (issue #3422): the read-only git proof
101
+ * for a task declared `evidence_class: 'external_git'`, attested while the
102
+ * workflow is idle and preserved through the terminal task_completed write
103
+ * so a duplicate completion can re-validate the same current proof. Cleared
104
+ * by a new coder attribution window (dispatch_attempted /
105
+ * dispatch_no_mutation / accepted_mutation), by repair_idle's fresh
106
+ * generation, and by the declaration-change revoke; terminal states are
107
+ * never revoked (06-critic-review.md R4F1).
108
+ */
109
+ externalEvidence?: ExternalEvidenceBundle;
98
110
  }
99
111
  export interface TaskWorkflowSnapshot extends TaskWorkflowMetadata {
100
112
  authoritative: boolean;
@@ -237,6 +249,13 @@ export type TaskWorkflowTransitionEvent = {
237
249
  qaExempt?: boolean;
238
250
  /** Durable, non-forced completion of a trusted empty-scope settlement. */
239
251
  readOnlyNoMutation?: boolean;
252
+ /**
253
+ * Issue #3422: the caller proved the external bundle current via
254
+ * externalProofCurrent / isExternalEvidenceInitialCompletionEligible
255
+ * before forwarding the terminal event; the reducer still requires the
256
+ * durable bundle to exist and fully match before admitting it.
257
+ */
258
+ externalEvidence?: boolean;
240
259
  expectedGeneration: number;
241
260
  transitionId?: string;
242
261
  } | {
@@ -251,6 +270,27 @@ export type TaskWorkflowTransitionEvent = {
251
270
  type: 'repair_idle';
252
271
  expectedGeneration: number;
253
272
  transitionId?: string;
273
+ } | {
274
+ /**
275
+ * Issue #3422: pin the attest producer's validated read-only git bundle
276
+ * as durable workflow metadata. State-preserving (the gate_recorded
277
+ * precedent) and admitted from idle only — an external task never
278
+ * enters the coder QA lifecycle.
279
+ */
280
+ type: 'external_evidence_attested';
281
+ bundle: ExternalEvidenceBundle;
282
+ expectedGeneration: number;
283
+ transitionId?: string;
284
+ } | {
285
+ /**
286
+ * Issue #3422: the plan declaration changed under a nonterminal task, so
287
+ * the pinned bundle no longer describes the declared work. Terminal
288
+ * states are never revoked (06-critic-review.md R4F1).
289
+ */
290
+ type: 'external_evidence_revoked';
291
+ reason: 'declaration_changed';
292
+ expectedGeneration: number;
293
+ transitionId?: string;
254
294
  };
255
295
  export interface TaskEvidenceTransaction {
256
296
  taskId: string;
@@ -277,6 +317,29 @@ export interface TaskEvidenceTransaction {
277
317
  */
278
318
  save?(nextEvidence: TaskEvidence): Promise<TaskEvidence>;
279
319
  }
320
+ /**
321
+ * Durable external-evidence bundle (issue #3422): the pinned read-only git
322
+ * proof for a task whose deliverable is verified outside the coder QA
323
+ * lifecycle. The attest producer validates the bundle (digest recompute, all
324
+ * anchors matched, bounds) before publishing it through the
325
+ * `external_evidence_attested` transition; this schema is the persistence
326
+ * boundary that refuses anything malformed after the fact.
327
+ */
328
+ export declare const ExternalEvidenceBundleSchema: z.ZodObject<{
329
+ class: z.ZodLiteral<"external_git">;
330
+ transitionId: z.ZodString;
331
+ declarationDigest: z.ZodString;
332
+ anchors: z.ZodArray<z.ZodObject<{
333
+ command: z.ZodString;
334
+ expect: z.ZodOptional<z.ZodString>;
335
+ expect_prefix: z.ZodOptional<z.ZodString>;
336
+ matched: z.ZodBoolean;
337
+ exit_code: z.ZodNumber;
338
+ stdout: z.ZodString;
339
+ }, z.core.$strip>>;
340
+ attestedAt: z.ZodString;
341
+ }, z.core.$strip>;
342
+ export type ExternalEvidenceBundle = z.infer<typeof ExternalEvidenceBundleSchema>;
280
343
  export declare function parseTaskEvidence(raw: string, expectedTaskId: string): TaskEvidence;
281
344
  export declare const DEFAULT_REQUIRED_GATES: string[];
282
345
  export interface GateDerivationContext {
@@ -308,6 +371,80 @@ export declare function deriveApplicableGateSet(evidence: TaskEvidence | null |
308
371
  export declare function isReadOnlyNoMutationEligible(evidence: TaskEvidence | null | undefined, options?: {
309
372
  currentDeclaredFiles?: readonly string[] | null;
310
373
  }): boolean;
374
+ /**
375
+ * Inputs to the external-evidence declaration digest (issue #3422,
376
+ * 05-fix-plan.md §3): the exact task declaration plus the plan identity and
377
+ * evidence generation the digest binds.
378
+ */
379
+ export interface ExternalDeclarationInput {
380
+ taskId: string;
381
+ evidence_class: 'external_git';
382
+ evidence_anchors: ReadonlyArray<{
383
+ command: string;
384
+ expect?: string;
385
+ expect_prefix?: string;
386
+ }>;
387
+ plan_title: string;
388
+ plan_swarm: string;
389
+ generation: number;
390
+ }
391
+ /**
392
+ * Compute the declaration digest bound into an external evidence bundle:
393
+ * sha256 hex over the canonical JSON of `{taskId, evidence_class,
394
+ * evidence_anchors (ordered definitions only), plan_title, plan_swarm,
395
+ * generation}`.
396
+ *
397
+ * Deliberately CURSOR-FREE (issue #3422, 05-fix-plan.md §3): the whole-plan
398
+ * structure hash includes `current_phase`, which advances during the terminal
399
+ * plan write. Binding the digest to it would self-invalidate the proof in
400
+ * the crash window after plan.json advances and before the evidence
401
+ * transaction applies. Every revalidation recomputes this digest from the
402
+ * CURRENT plan task and CURRENT generation instead — no whole-plan hash is
403
+ * ever consulted.
404
+ */
405
+ export declare function computeExternalDeclarationDigest(input: ExternalDeclarationInput): string;
406
+ /** Plan identity inputs to the external declaration digest (issue #3422). */
407
+ export interface ExternalPlanIdentity {
408
+ title: string;
409
+ swarm: string;
410
+ }
411
+ /**
412
+ * The subset of a plan task the external-evidence predicates consult: the
413
+ * declaration fields save_plan validated (issue #3422).
414
+ */
415
+ export interface ExternalPlanTaskRef {
416
+ id: string;
417
+ evidence_class?: string;
418
+ evidence_anchors?: ReadonlyArray<{
419
+ command: string;
420
+ expect?: string;
421
+ expect_prefix?: string;
422
+ }> | undefined;
423
+ }
424
+ /**
425
+ * Proof-currency predicate (issue #3422, 05-fix-plan.md §4c / R3F1): true iff
426
+ * the task declares `external_git`, a bundle exists with at least one anchor,
427
+ * every anchor matched, and the bundle's declarationDigest equals the digest
428
+ * recomputed from the CURRENT plan declaration + CURRENT generation. There is
429
+ * NO workflow-state condition — this is the "proof is current" predicate
430
+ * usable in ANY state (mirroring isNoMutationSettlementMetadata's
431
+ * idle || complete acceptance), so duplicate completion, committed-WAL
432
+ * idempotent replay, terminal recovery, and check_gate_status on a completed
433
+ * task all re-validate the same way.
434
+ */
435
+ export declare function externalProofCurrent(plan: ExternalPlanIdentity, planTask: ExternalPlanTaskRef, evidence: TaskEvidence | null | undefined): boolean;
436
+ /**
437
+ * Initial-completion eligibility (issue #3422, 05-fix-plan.md §4c / R3F1):
438
+ * `externalProofCurrent` AND the authoritative workflow state is exactly
439
+ * `idle` (blocked removed — a blocked task reopens via the audited
440
+ * blocked → in_progress plan transition first). This is the R3F1 split's
441
+ * other half: the FIRST completion requires idle, while DUPLICATE
442
+ * completions and terminal recovery use `externalProofCurrent` and accept
443
+ * `complete`. Consults the authoritative snapshot (the
444
+ * isNoMutationSettlementMetadata pattern) so non-authoritative legacy
445
+ * metadata never admits an external completion.
446
+ */
447
+ export declare function isExternalEvidenceInitialCompletionEligible(plan: ExternalPlanIdentity, planTask: ExternalPlanTaskRef, evidence: TaskEvidence | null | undefined): boolean;
311
448
  export declare function reduceTaskWorkflowSnapshot(current: TaskWorkflowSnapshot, event: TaskWorkflowTransitionEvent, context: {
312
449
  requiredGates: string[];
313
450
  gates: Record<string, GateEvidence>;
@@ -7,6 +7,13 @@ export type GitRepositoryStatus = {
7
7
  reason: 'not_git_repo' | 'git_unavailable' | 'git_error';
8
8
  message: string;
9
9
  };
10
+ /**
11
+ * Repo-detection vocabulary shared with the async detailed reader
12
+ * (`src/commands/git-status-read.ts`, #3427): the same case-folded phrases
13
+ * classify a nonzero `rev-parse` exit as `not_git_repo` on the sync and
14
+ * async probe paths alike, so the two probes cannot drift apart.
15
+ */
16
+ export declare function isNotGitRepositoryMessage(message: string): boolean;
10
17
  /**
11
18
  * Seam that calls child_process.spawnSync dynamically.
12
19
  * Uses getChildProcessSpawnSync() to resolve at call time, allowing
@@ -71,6 +78,21 @@ declare const __spawnSyncSeam: {
71
78
  * looks sufficient but is not — that gap is exactly what #2263 reported.
72
79
  */
73
80
  export declare function readLaneEnvFileFromDiskSync(worktreePath: string, laneIndex: number): Record<string, string>;
81
+ /**
82
+ * Issue #2236 F5: builds the *actionable* "git is not available" message.
83
+ *
84
+ * `describeGitResolution()` (src/utils/git-executable.ts) is the production
85
+ * source of truth for what the resolver actually tried — every candidate path,
86
+ * its source (`override`/`platform`/`path`), and why each was rejected. A bare
87
+ * "git executable is not available on PATH" is what sent the original report
88
+ * down a four-day PATH investigation while git was present the whole time, so
89
+ * the thrown message names the candidates and the override escape hatch.
90
+ *
91
+ * `cwd` is named too: reaching this function means the cwd was positively
92
+ * classified as present-and-a-directory, which is the fact that rules the
93
+ * #2236 misdiagnosis out rather than leaving it implied.
94
+ */
95
+ export declare function gitBinaryMissingMessage(cwd: string): string;
74
96
  declare function gitExec(args: string[], cwd: string, laneEnv?: Record<string, string>, laneIndex?: number): string;
75
97
  export declare function getGitRepositoryStatus(cwd: string): GitRepositoryStatus;
76
98
  /**