opencode-swarm 7.134.1 → 7.134.3

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 (52) hide show
  1. package/.opencode/skills/swarm-pr-feedback/SKILL.md +10 -3
  2. package/.opencode/skills/swarm-pr-review/SKILL.md +11 -3
  3. package/README.md +1 -1
  4. package/dist/background/pr-event-delivery.d.ts +8 -0
  5. package/dist/background/pr-event-subscribers.d.ts +5 -0
  6. package/dist/background/pr-feedback-event-queue.d.ts +37 -0
  7. package/dist/background/workspace-snapshot.d.ts +8 -3
  8. package/dist/cli/{config-doctor-4avzz3rh.js → config-doctor-yqwm2tfh.js} +2 -2
  9. package/dist/cli/{curation-policy-8vkzjtwb.js → curation-policy-x5m4x34n.js} +2 -2
  10. package/dist/cli/{curator-llm-factory-2qk8q4y9.js → curator-llm-factory-24mjnh2y.js} +14 -14
  11. package/dist/cli/{curator-3vsvhwav.js → curator-thrwgwh1.js} +14 -14
  12. package/dist/cli/{evidence-summary-service-mrzsjpg4.js → evidence-summary-service-pay9409b.js} +1 -1
  13. package/dist/cli/{guardrail-explain-tw521x47.js → guardrail-explain-nmfq71cm.js} +15 -15
  14. package/dist/cli/{guardrail-log-e3jrwdw8.js → guardrail-log-2a61rz1w.js} +3 -3
  15. package/dist/cli/{hive-promoter-sdy5qjzn.js → hive-promoter-2nkjjwgc.js} +14 -14
  16. package/dist/cli/{index-m8ajf6wb.js → index-1mq8kmp6.js} +3 -3
  17. package/dist/cli/{index-bq2848a3.js → index-2b7sv71f.js} +1 -1
  18. package/dist/cli/{index-h3k62043.js → index-3nasn371.js} +47 -12
  19. package/dist/cli/{index-0541h76w.js → index-5f403c30.js} +1 -1
  20. package/dist/cli/{index-358f9h8p.js → index-6kfqz0jw.js} +3203 -2039
  21. package/dist/cli/{index-8t9xpn1a.js → index-6wya5cqh.js} +1 -1
  22. package/dist/cli/{index-k742ecbm.js → index-8fhg2nt2.js} +2 -2
  23. package/dist/cli/{index-9z1q181f.js → index-8wktghbc.js} +1 -1
  24. package/dist/cli/{index-c0e3vhv9.js → index-ddxt327j.js} +1 -1
  25. package/dist/cli/{index-kwm7hz18.js → index-mgr951p8.js} +5 -5
  26. package/dist/cli/{index-6b69mp0r.js → index-q3m6bpx2.js} +2 -2
  27. package/dist/cli/{index-463k8mfr.js → index-reesz606.js} +2 -2
  28. package/dist/cli/{index-2j8f71c3.js → index-rjngxx7q.js} +4 -4
  29. package/dist/cli/{index-y2esw64s.js → index-tsmjmhnk.js} +1 -1
  30. package/dist/cli/{index-mz6sqtm9.js → index-txwm0fv4.js} +16 -16
  31. package/dist/cli/{index-zjw32rv9.js → index-y3rj2jgb.js} +1 -1
  32. package/dist/cli/{index-pz49rx4y.js → index-yaptf0hg.js} +2 -2
  33. package/dist/cli/{index-1v5mby7t.js → index-yqvh2s4w.js} +1 -1
  34. package/dist/cli/index.js +14 -14
  35. package/dist/cli/{knowledge-escalator-v09w0jmg.js → knowledge-escalator-fqsavryx.js} +3 -3
  36. package/dist/cli/{knowledge-events-qp19r2he.js → knowledge-events-ykt8vrvj.js} +1 -1
  37. package/dist/cli/{knowledge-store-n5pvv0s3.js → knowledge-store-tpd98m39.js} +1 -1
  38. package/dist/cli/{knowledge-validator-qg31ycbb.js → knowledge-validator-kc7fnt2r.js} +4 -4
  39. package/dist/cli/{scan-cursor-wtzfvkh2.js → scan-cursor-121b73j0.js} +2 -2
  40. package/dist/cli/{schema-erk5bz43.js → schema-jb4p8ja9.js} +1 -1
  41. package/dist/cli/{skill-generator-nxs65tq3.js → skill-generator-m2g5mdva.js} +5 -5
  42. package/dist/cli/{workspace-snapshot-35qc0y8a.js → workspace-snapshot-9h5za0s6.js} +3 -1
  43. package/dist/commands/pr-feedback.d.ts +15 -2
  44. package/dist/git/pr-workflow-state.d.ts +37 -0
  45. package/dist/hooks/pr-workflow-gate.d.ts +42 -2
  46. package/dist/hooks/pr-workflow-response-gate.d.ts +3 -0
  47. package/dist/hooks/shell-write-detect.d.ts +1 -1
  48. package/dist/index.js +490 -476
  49. package/dist/tools/pr-workflow-status.d.ts +2 -0
  50. package/dist/tools/pre-check-batch.d.ts +22 -0
  51. package/dist/tools/prepare-pr-workflow-checkout.d.ts +2 -0
  52. package/package.json +1 -1
@@ -29,9 +29,12 @@ ledger row is marked FIXED, and no PR is published until all three gates pass on
29
29
  the current diff. There is no speed, efficiency, or time exception. See
30
30
  "Mandatory Gates" below for the full protocol.
31
31
 
32
- When the work starts from a prior `swarm-pr-review` run, ingest the review's
33
- handoff artifact (for example
34
- `.swarm/pr-review/<run_id>/feedback-handoff.md` or `.json`) before triage.
32
+ When the work starts from a prior Profile-A `swarm-pr-review` run, use the exact
33
+ user command `/swarm pr-feedback <PR_URL> continue from
34
+ .swarm/pr-review/<run_id>/feedback-handoff.json`. The controller validates the
35
+ terminal review and artifact before atomically creating an unbound feedback
36
+ gate; the artifact alone is not write authorization. Profiles B/C ingest their
37
+ task-workspace handoff directly before triage.
35
38
  Carry forward the original review finding IDs, classifications, reviewer/critic
36
39
  provenance, and any operational blockers instead of renumbering them as new
37
40
  discoveries.
@@ -175,6 +178,10 @@ tree:
175
178
  stashes untracked files; move or remove those manually, or abort the checkout.
176
179
  Without the controller, surface dirty tracked state to the user or abort the
177
180
  checkout — do not blind-stash.
181
+ - Treat `recovery-required` and `indeterminate` controller results as terminal
182
+ for the current attempt: report the typed `required_action`, abort/clear any
183
+ already-active gate, and stop. Only `stashable` permits one preparation call;
184
+ retry only when the controller explicitly returns `retryable: true`.
178
185
  - **Check out the head branch locally before dispatching feedback lanes.** Feedback verification reads the working-tree
179
186
  filesystem (`Read`/`Glob`/`Grep`), and fixes must land on the PR branch — without a
180
187
  checkout you would verify and patch the base branch's code instead. Record the
@@ -36,9 +36,11 @@ path substituted for `<handoff_artifact_path>`:
36
36
 
37
37
  `<run_id>` is a stable identifier for this review run, such as
38
38
  `pr-<number>-<YYYYMMDDHHMMSS>` or the existing review artifact run ID when one
39
- was already created. The `pr-feedback` command forwards `continue from <path>`
40
- as session instructions after the PR reference; the feedback skill is
41
- responsible for ingesting that file into the ledger before triage.
39
+ was already created. Under Profile A, the exact command is parsed mechanically:
40
+ the controller validates the terminal review, the bounded handoff artifact, and
41
+ its provenance before atomically replacing the review gate with an unbound
42
+ feedback gate. Extra trailing text is not permitted on this continuation form.
43
+ Profiles B/C ingest their task-workspace artifact through the skill-managed path.
42
44
 
43
45
  Review closure is not the end of the PR lifecycle: when PR monitoring is
44
46
  enabled (`pr_monitor.enabled`), the PR remains subscribed and monitored under
@@ -211,6 +213,12 @@ Before launching explorers (Phase 3), perform this exact standalone sequence:
211
213
  contract. Without the controller (Profiles B/C), do not blind-stash over
212
214
  dirty state: surface tracked changes to the user, or abort. Do not issue
213
215
  `git stash` through shell.
216
+ Treat the controller's Git-state result as final for this attempt: `clean`
217
+ proceeds, `stashable` permits exactly one checkout-preparation call, and
218
+ `recovery-required` or `indeterminate` means report the typed
219
+ `required_action`, abort/clear any already-active gate, and stop. Retry only
220
+ when the controller explicitly returns `retryable: true`; never fight an
221
+ unmerged index or in-progress Git operation with repeated stash attempts.
214
222
  3. Fetch the PR head as one standalone command, for example
215
223
  `git fetch origin refs/pull/<N>/head`. Do not compose fetch and checkout.
216
224
  3a. Fetch the base branch as its own standalone command, for example
package/README.md CHANGED
@@ -39,7 +39,7 @@ Most AI coding tools let one model write code and ask that same model whether th
39
39
  - 🔬 **External Skill Curation Pipeline** — Opt-in discovery, quarantine, evaluation, and promotion of external skill candidates from configured sources (disabled by default; enable via `external_skills.curation_enabled: true` in config). Includes 7 tools: `external_skill_discover`, `external_skill_list`, `external_skill_inspect`, `external_skill_promote`, `external_skill_reject`, `external_skill_delete`, `external_skill_revoke`. Candidates pass through a 3-gate validation pipeline before evaluation: **prompt injection scan** (12 regex patterns), **unsafe instruction scan** (25 patterns), and **provenance integrity check** (SHA-256, timestamp, URL, publisher, and hash verification).
40
40
  - 🔄 **Phase completion gates** — completion-verify and drift verifier gates enforced before phase completion
41
41
  - 🔁 **Resumable sessions** — all state saved to `.swarm/`; pick up any project any day
42
- - 🖥️ **PR Monitor** — GitHub PR subscription and background polling via `gh` CLI; delivers real-time CI, review, and merge status updates via the AutomationEventBus (FR-001, opt-in via `pr_monitor.enabled: true`). Subscribe with `/swarm pr subscribe <pr-url|owner/repo#N|N>`; unsubscribe with `/swarm pr unsubscribe <pr-url|owner/repo#N|N>`; check status with `/swarm pr status`. Enable `auto_pr_feedback: true` in `pr_monitor` config to inject `[MODE: PR_FEEDBACK pr="URL"]` on CI failures and merge conflicts automatically.
42
+ - 🖥️ **PR Monitor** — GitHub PR subscription and background polling via `gh` CLI; delivers real-time CI, review, and merge status updates via the AutomationEventBus (FR-001, opt-in via `pr_monitor.enabled: true`). Subscribe with `/swarm pr subscribe <pr-url|owner/repo#N|N>`; unsubscribe with `/swarm pr unsubscribe <pr-url|owner/repo#N|N>`; check status with `/swarm pr status`. With `auto_pr_feedback: true`, CI failures and merge conflicts mechanically activate PR_FEEDBACK only when no other workflow owns the session; otherwise they are durably queued for a later round.
43
43
  - 🌐 **13 full language profiles** (TypeScript, JavaScript, Python, Go, Rust, Java, Kotlin, C/C++, C#, Ruby, Swift, Dart, PHP) with **tree-sitter parse validation across 20 grammars** (adds CSS, Bash, PowerShell, INI, Regex — and `.tsx` / `.c` aliases) — extending: see [docs/adding-a-language.md](docs/adding-a-language.md)
44
44
  - 🛡️ **Built-in security** — SAST, secrets scanning, dependency audit per task
45
45
  - 🔒 **Scope enforcement** — Validates write targets against declared scope with cross-process persistence, TTL expiry, and scope-aware destructive command blocking. **Handles both single-string and array-based path arguments** (`files[]`, `paths[]`, `targetFiles[]`) to prevent scope bypass via multi-file tool calls.
@@ -22,8 +22,10 @@
22
22
  */
23
23
  import type { OpencodeClient } from '@opencode-ai/sdk';
24
24
  import type { PrMonitorConfig } from '../config/schema';
25
+ import { activatePrWorkflow, readPrWorkflowGateState } from '../hooks/pr-workflow-gate';
25
26
  import { log } from '../utils';
26
27
  import { withTimeout } from '../utils/timeout';
28
+ import { claimPrFeedbackMonitorEvents, readPrFeedbackMonitorQueue } from './pr-feedback-event-queue.js';
27
29
  /** A single formatted PR event handed over by pr-event-subscribers. */
28
30
  export interface FormattedPrEvent {
29
31
  /** Automation event type, e.g. 'pr.ci.failed'. */
@@ -36,6 +38,8 @@ export interface FormattedPrEvent {
36
38
  message: string;
37
39
  /** `[pr-monitor:<type>:<repo>#<n>]` — used for queue dedup. */
38
40
  dedupToken: string;
41
+ /** Lifecycle intake is durable but cannot enter the current workflow yet. */
42
+ disposition?: 'queued-for-later';
39
43
  }
40
44
  export interface PrEventDeliveryOptions {
41
45
  client: OpencodeClient;
@@ -93,6 +97,10 @@ declare function sendWakePrompt(sessionID: string, events: FormattedPrEvent[], m
93
97
  export declare const _internals: {
94
98
  sendWakePrompt: typeof sendWakePrompt;
95
99
  withTimeout: typeof withTimeout;
100
+ readPrWorkflowGateState: typeof readPrWorkflowGateState;
101
+ activatePrWorkflow: typeof activatePrWorkflow;
102
+ readPrFeedbackMonitorQueue: typeof readPrFeedbackMonitorQueue;
103
+ claimPrFeedbackMonitorEvents: typeof claimPrFeedbackMonitorEvents;
96
104
  wakePromptTimeoutMs: number;
97
105
  log: typeof log;
98
106
  };
@@ -24,10 +24,12 @@
24
24
  * are deduped by token inside the delivery queue.
25
25
  */
26
26
  import type { PrMonitorConfig } from '../config/schema';
27
+ import { activatePrWorkflow, readPrWorkflowGateState } from '../hooks/pr-workflow-gate';
27
28
  import { getAgentSession } from '../state';
28
29
  import { log } from '../utils';
29
30
  import { getGlobalEventBus } from './event-bus';
30
31
  import { deliverPrActivity, isPrEventDeliveryRegistered } from './pr-event-delivery';
32
+ import { enqueuePrFeedbackMonitorEvent } from './pr-feedback-event-queue.js';
31
33
  import { listActive, updateSnapshot } from './pr-subscriptions';
32
34
  export interface PrEventSubscriberOptions {
33
35
  directory: string;
@@ -43,6 +45,9 @@ export declare const _internals: {
43
45
  listActive: typeof listActive;
44
46
  updateSnapshot: typeof updateSnapshot;
45
47
  getAgentSession: typeof getAgentSession;
48
+ readPrWorkflowGateState: typeof readPrWorkflowGateState;
49
+ activatePrWorkflow: typeof activatePrWorkflow;
50
+ enqueuePrFeedbackMonitorEvent: typeof enqueuePrFeedbackMonitorEvent;
46
51
  deliverPrActivity: typeof deliverPrActivity;
47
52
  isPrEventDeliveryRegistered: typeof isPrEventDeliveryRegistered;
48
53
  scheduleClearUnaddressed: typeof scheduleClearUnaddressed;
@@ -0,0 +1,37 @@
1
+ import * as fsp from 'node:fs/promises';
2
+ export declare const MAX_PR_FEEDBACK_MONITOR_EVENTS = 20;
3
+ export interface PrFeedbackMonitorEvent {
4
+ type: string;
5
+ repoFullName: string;
6
+ prNumber: number;
7
+ prUrl: string;
8
+ message: string;
9
+ dedupToken: string;
10
+ authorized: boolean;
11
+ queuedAt: string;
12
+ claimedWorkflowInstanceId?: string;
13
+ claimedAt?: string;
14
+ }
15
+ export interface PrFeedbackMonitorQueueRecord {
16
+ schemaVersion: 1;
17
+ revision: number;
18
+ sessionID: string;
19
+ events: PrFeedbackMonitorEvent[];
20
+ }
21
+ export declare function enqueuePrFeedbackMonitorEvent(directory: string, sessionID: string, event: Omit<PrFeedbackMonitorEvent, 'claimedWorkflowInstanceId' | 'claimedAt'>): Promise<PrFeedbackMonitorQueueRecord>;
22
+ export declare function readPrFeedbackMonitorQueue(directory: string, sessionID: string): Promise<PrFeedbackMonitorQueueRecord | null>;
23
+ export declare function claimPrFeedbackMonitorEvents(directory: string, sessionID: string, workflowInstanceId: string, prUrl: string, dedupTokens?: readonly string[]): Promise<PrFeedbackMonitorEvent[]>;
24
+ export declare const _internals: {
25
+ queueRelativePath: typeof queueRelativePath;
26
+ queueLockRelativePath: typeof queueLockRelativePath;
27
+ resetQueueCache: () => void;
28
+ rename: typeof fsp.rename;
29
+ nowMs: () => number;
30
+ isProcessAlive: typeof isProcessAlive;
31
+ beforeQueueFileOpen: (() => Promise<void>) | undefined;
32
+ beforeQueueLockWrite: (() => Promise<void>) | undefined;
33
+ };
34
+ declare function isProcessAlive(pid: number): boolean;
35
+ declare function queueRelativePath(sessionID: string): string;
36
+ declare function queueLockRelativePath(sessionID: string): string;
37
+ export {};
@@ -111,15 +111,20 @@ export declare function resolvePrWorkflowRevisionDigest(directory: string, baseH
111
111
  export declare function resolvePrWorkflowRevisionDigestAsync(directory: string, baseHeadSha: string): Promise<string | null>;
112
112
  /** Parse `git status --porcelain=v1 -z`, including both sides of renames. */
113
113
  export declare function parsePorcelainPaths(output: string): string[] | null;
114
- interface PorcelainV2Snapshot {
114
+ export interface PorcelainV2Snapshot {
115
115
  gitHead: string | null;
116
- changedFiles: string[];
116
+ dirtyTrackedPaths: string[];
117
+ untrackedPaths: string[];
118
+ renameOrCopy: boolean;
119
+ unmergedPaths: string[];
120
+ unmergedCodes: string[];
121
+ dirtySubmodulePaths: string[];
117
122
  }
118
123
  /**
119
124
  * Parse the one-command `git status --porcelain=v2 --branch -z` snapshot used
120
125
  * by background evidence capture. A malformed or unknown record fails closed.
121
126
  */
122
- declare function parsePorcelainV2Snapshot(output: string): PorcelainV2Snapshot | null;
127
+ export declare function parsePorcelainV2Snapshot(output: string): PorcelainV2Snapshot | null;
123
128
  export declare function captureWorkspaceSnapshot(directory: string, optionsOrScope?: string | null | CaptureWorkspaceSnapshotOptions, prHeadShaArg?: string | null): BackgroundWorkspaceSnapshot;
124
129
  /**
125
130
  * Conservatively derive final paths changed since a pre-task snapshot.
@@ -12,8 +12,8 @@ import {
12
12
  shouldRunOnStartup,
13
13
  writeBackupArtifact,
14
14
  writeDoctorArtifact
15
- } from "./index-bq2848a3.js";
16
- import"./index-y2esw64s.js";
15
+ } from "./index-2b7sv71f.js";
16
+ import"./index-tsmjmhnk.js";
17
17
  import"./index-bk5tah7q.js";
18
18
  import"./index-bpmtbmy9.js";
19
19
  import"./index-z6xqpmqg.js";
@@ -4,9 +4,9 @@ import {
4
4
  authorizeCuration,
5
5
  buildConfigFingerprintInput,
6
6
  readCohortConfigFingerprint
7
- } from "./index-zjw32rv9.js";
7
+ } from "./index-y3rj2jgb.js";
8
8
  import"./index-rtry5xyf.js";
9
- import"./index-8t9xpn1a.js";
9
+ import"./index-6wya5cqh.js";
10
10
  import"./index-ae75rja9.js";
11
11
  import"./index-cfkvc5q9.js";
12
12
  import"./index-dd7ttx8x.js";
@@ -1,33 +1,33 @@
1
1
  // @bun
2
2
  import {
3
3
  createCuratorLLMDelegate
4
- } from "./index-358f9h8p.js";
4
+ } from "./index-6kfqz0jw.js";
5
5
  import"./index-13xxjfhn.js";
6
- import"./index-1v5mby7t.js";
7
- import"./index-bq2848a3.js";
8
- import"./index-k742ecbm.js";
6
+ import"./index-yqvh2s4w.js";
7
+ import"./index-2b7sv71f.js";
8
+ import"./index-8fhg2nt2.js";
9
9
  import"./index-4905hd2m.js";
10
10
  import"./index-134d35c1.js";
11
- import"./index-m8ajf6wb.js";
12
- import"./index-kwm7hz18.js";
13
- import"./index-0541h76w.js";
11
+ import"./index-1mq8kmp6.js";
12
+ import"./index-mgr951p8.js";
13
+ import"./index-5f403c30.js";
14
14
  import"./index-vxv732ex.js";
15
15
  import"./index-c8s9a3zh.js";
16
16
  import"./index-9ss2m4rs.js";
17
17
  import"./index-wk1h5ec2.js";
18
18
  import"./index-1j3682j8.js";
19
- import"./index-6b69mp0r.js";
20
- import"./index-zjw32rv9.js";
19
+ import"./index-q3m6bpx2.js";
20
+ import"./index-y3rj2jgb.js";
21
21
  import"./index-rtry5xyf.js";
22
- import"./index-2j8f71c3.js";
23
- import"./index-8t9xpn1a.js";
22
+ import"./index-rjngxx7q.js";
23
+ import"./index-6wya5cqh.js";
24
24
  import"./index-ae75rja9.js";
25
25
  import"./index-cfkvc5q9.js";
26
26
  import"./index-dd7ttx8x.js";
27
- import"./index-c0e3vhv9.js";
27
+ import"./index-ddxt327j.js";
28
28
  import"./index-k5jrywpr.js";
29
29
  import"./index-n832052r.js";
30
- import"./index-y2esw64s.js";
30
+ import"./index-tsmjmhnk.js";
31
31
  import"./index-bk5tah7q.js";
32
32
  import"./index-8fwhhayc.js";
33
33
  import"./index-q1exe2b3.js";
@@ -49,7 +49,7 @@ import"./index-z6xqpmqg.js";
49
49
  import"./index-zjygnfay.js";
50
50
  import"./index-qe3v54nb.js";
51
51
  import"./index-zgwm4ryv.js";
52
- import"./index-h3k62043.js";
52
+ import"./index-3nasn371.js";
53
53
  import"./index-a76rekgs.js";
54
54
  export {
55
55
  createCuratorLLMDelegate
@@ -14,33 +14,33 @@ import {
14
14
  runCuratorInit,
15
15
  runCuratorPhase,
16
16
  writeCuratorSummary
17
- } from "./index-358f9h8p.js";
17
+ } from "./index-6kfqz0jw.js";
18
18
  import"./index-13xxjfhn.js";
19
- import"./index-1v5mby7t.js";
20
- import"./index-bq2848a3.js";
21
- import"./index-k742ecbm.js";
19
+ import"./index-yqvh2s4w.js";
20
+ import"./index-2b7sv71f.js";
21
+ import"./index-8fhg2nt2.js";
22
22
  import"./index-4905hd2m.js";
23
23
  import"./index-134d35c1.js";
24
- import"./index-m8ajf6wb.js";
25
- import"./index-kwm7hz18.js";
26
- import"./index-0541h76w.js";
24
+ import"./index-1mq8kmp6.js";
25
+ import"./index-mgr951p8.js";
26
+ import"./index-5f403c30.js";
27
27
  import"./index-vxv732ex.js";
28
28
  import"./index-c8s9a3zh.js";
29
29
  import"./index-9ss2m4rs.js";
30
30
  import"./index-wk1h5ec2.js";
31
31
  import"./index-1j3682j8.js";
32
- import"./index-6b69mp0r.js";
33
- import"./index-zjw32rv9.js";
32
+ import"./index-q3m6bpx2.js";
33
+ import"./index-y3rj2jgb.js";
34
34
  import"./index-rtry5xyf.js";
35
- import"./index-2j8f71c3.js";
36
- import"./index-8t9xpn1a.js";
35
+ import"./index-rjngxx7q.js";
36
+ import"./index-6wya5cqh.js";
37
37
  import"./index-ae75rja9.js";
38
38
  import"./index-cfkvc5q9.js";
39
39
  import"./index-dd7ttx8x.js";
40
- import"./index-c0e3vhv9.js";
40
+ import"./index-ddxt327j.js";
41
41
  import"./index-k5jrywpr.js";
42
42
  import"./index-n832052r.js";
43
- import"./index-y2esw64s.js";
43
+ import"./index-tsmjmhnk.js";
44
44
  import"./index-bk5tah7q.js";
45
45
  import"./index-8fwhhayc.js";
46
46
  import"./index-q1exe2b3.js";
@@ -62,7 +62,7 @@ import"./index-z6xqpmqg.js";
62
62
  import"./index-zjygnfay.js";
63
63
  import"./index-qe3v54nb.js";
64
64
  import"./index-zgwm4ryv.js";
65
- import"./index-h3k62043.js";
65
+ import"./index-3nasn371.js";
66
66
  import"./index-a76rekgs.js";
67
67
  export {
68
68
  writeCuratorSummary,
@@ -6,7 +6,7 @@ import {
6
6
  loadPlanJsonOnly,
7
7
  mergeDurableGateEntriesFromEvidence,
8
8
  readDurableGateEvidence
9
- } from "./index-k742ecbm.js";
9
+ } from "./index-8fhg2nt2.js";
10
10
  import"./index-9ss2m4rs.js";
11
11
  import"./index-wk1h5ec2.js";
12
12
  import"./index-dd7ttx8x.js";
@@ -1,34 +1,34 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-pz49rx4y.js";
5
- import"./index-358f9h8p.js";
4
+ } from "./index-yaptf0hg.js";
5
+ import"./index-6kfqz0jw.js";
6
6
  import"./index-13xxjfhn.js";
7
- import"./index-1v5mby7t.js";
8
- import"./index-bq2848a3.js";
9
- import"./index-k742ecbm.js";
7
+ import"./index-yqvh2s4w.js";
8
+ import"./index-2b7sv71f.js";
9
+ import"./index-8fhg2nt2.js";
10
10
  import"./index-4905hd2m.js";
11
11
  import"./index-134d35c1.js";
12
- import"./index-m8ajf6wb.js";
13
- import"./index-kwm7hz18.js";
14
- import"./index-0541h76w.js";
12
+ import"./index-1mq8kmp6.js";
13
+ import"./index-mgr951p8.js";
14
+ import"./index-5f403c30.js";
15
15
  import"./index-vxv732ex.js";
16
16
  import"./index-c8s9a3zh.js";
17
17
  import"./index-9ss2m4rs.js";
18
18
  import"./index-wk1h5ec2.js";
19
19
  import"./index-1j3682j8.js";
20
- import"./index-6b69mp0r.js";
21
- import"./index-zjw32rv9.js";
20
+ import"./index-q3m6bpx2.js";
21
+ import"./index-y3rj2jgb.js";
22
22
  import"./index-rtry5xyf.js";
23
- import"./index-2j8f71c3.js";
24
- import"./index-8t9xpn1a.js";
23
+ import"./index-rjngxx7q.js";
24
+ import"./index-6wya5cqh.js";
25
25
  import"./index-ae75rja9.js";
26
26
  import"./index-cfkvc5q9.js";
27
27
  import"./index-dd7ttx8x.js";
28
- import"./index-c0e3vhv9.js";
28
+ import"./index-ddxt327j.js";
29
29
  import"./index-k5jrywpr.js";
30
30
  import"./index-n832052r.js";
31
- import"./index-y2esw64s.js";
31
+ import"./index-tsmjmhnk.js";
32
32
  import"./index-bk5tah7q.js";
33
33
  import"./index-8fwhhayc.js";
34
34
  import"./index-q1exe2b3.js";
@@ -50,7 +50,7 @@ import"./index-z6xqpmqg.js";
50
50
  import"./index-zjygnfay.js";
51
51
  import"./index-qe3v54nb.js";
52
52
  import"./index-zgwm4ryv.js";
53
- import"./index-h3k62043.js";
53
+ import"./index-3nasn371.js";
54
54
  import"./index-a76rekgs.js";
55
55
  export {
56
56
  handleGuardrailExplain
@@ -1,9 +1,9 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailLog
4
- } from "./index-9z1q181f.js";
5
- import"./index-1v5mby7t.js";
6
- import"./index-y2esw64s.js";
4
+ } from "./index-8wktghbc.js";
5
+ import"./index-yqvh2s4w.js";
6
+ import"./index-tsmjmhnk.js";
7
7
  import"./index-bk5tah7q.js";
8
8
  import"./index-bpmtbmy9.js";
9
9
  import"./index-z6xqpmqg.js";
@@ -7,35 +7,35 @@ import {
7
7
  isHiveEligible,
8
8
  promoteFromSwarm,
9
9
  promoteToHive
10
- } from "./index-358f9h8p.js";
10
+ } from "./index-6kfqz0jw.js";
11
11
  import"./index-13xxjfhn.js";
12
- import"./index-1v5mby7t.js";
13
- import"./index-bq2848a3.js";
14
- import"./index-k742ecbm.js";
12
+ import"./index-yqvh2s4w.js";
13
+ import"./index-2b7sv71f.js";
14
+ import"./index-8fhg2nt2.js";
15
15
  import"./index-4905hd2m.js";
16
16
  import"./index-134d35c1.js";
17
- import"./index-m8ajf6wb.js";
18
- import"./index-kwm7hz18.js";
19
- import"./index-0541h76w.js";
17
+ import"./index-1mq8kmp6.js";
18
+ import"./index-mgr951p8.js";
19
+ import"./index-5f403c30.js";
20
20
  import"./index-vxv732ex.js";
21
21
  import"./index-c8s9a3zh.js";
22
22
  import"./index-9ss2m4rs.js";
23
23
  import"./index-wk1h5ec2.js";
24
24
  import"./index-1j3682j8.js";
25
- import"./index-6b69mp0r.js";
26
- import"./index-zjw32rv9.js";
25
+ import"./index-q3m6bpx2.js";
26
+ import"./index-y3rj2jgb.js";
27
27
  import"./index-rtry5xyf.js";
28
28
  import {
29
29
  resolveHiveKnowledgePath
30
- } from "./index-2j8f71c3.js";
31
- import"./index-8t9xpn1a.js";
30
+ } from "./index-rjngxx7q.js";
31
+ import"./index-6wya5cqh.js";
32
32
  import"./index-ae75rja9.js";
33
33
  import"./index-cfkvc5q9.js";
34
34
  import"./index-dd7ttx8x.js";
35
- import"./index-c0e3vhv9.js";
35
+ import"./index-ddxt327j.js";
36
36
  import"./index-k5jrywpr.js";
37
37
  import"./index-n832052r.js";
38
- import"./index-y2esw64s.js";
38
+ import"./index-tsmjmhnk.js";
39
39
  import"./index-bk5tah7q.js";
40
40
  import"./index-8fwhhayc.js";
41
41
  import"./index-q1exe2b3.js";
@@ -57,7 +57,7 @@ import"./index-z6xqpmqg.js";
57
57
  import"./index-zjygnfay.js";
58
58
  import"./index-qe3v54nb.js";
59
59
  import"./index-zgwm4ryv.js";
60
- import"./index-h3k62043.js";
60
+ import"./index-3nasn371.js";
61
61
  import"./index-a76rekgs.js";
62
62
  export {
63
63
  resolveHiveKnowledgePath,
@@ -2,18 +2,18 @@
2
2
  import {
3
3
  ALLOWED_SKILL_PATH_PREFIXES,
4
4
  validateSkillPath
5
- } from "./index-6b69mp0r.js";
5
+ } from "./index-q3m6bpx2.js";
6
6
  import {
7
7
  computeOutcomeSignal,
8
8
  readKnowledge,
9
9
  resolveHiveKnowledgePath,
10
10
  resolveSwarmKnowledgePath,
11
11
  transactKnowledge
12
- } from "./index-2j8f71c3.js";
12
+ } from "./index-rjngxx7q.js";
13
13
  import {
14
14
  effectiveRetrievalOutcomes,
15
15
  readKnowledgeCounterRollups
16
- } from "./index-8t9xpn1a.js";
16
+ } from "./index-6wya5cqh.js";
17
17
  import {
18
18
  init_knowledge_types,
19
19
  isActiveStatus
@@ -8,7 +8,7 @@ import {
8
8
  init_constants,
9
9
  init_schema,
10
10
  stripKnownSwarmPrefix
11
- } from "./index-y2esw64s.js";
11
+ } from "./index-tsmjmhnk.js";
12
12
  import {
13
13
  log
14
14
  } from "./index-zgwm4ryv.js";
@@ -651,41 +651,71 @@ function parsePorcelainV2Snapshot(output) {
651
651
  `).match(/^# branch\.oid (.+)$/m);
652
652
  if (!oidMatch)
653
653
  return null;
654
- const gitHead = /^[0-9a-f]{6,64}$/i.test(oidMatch[1]) ? oidMatch[1] : oidMatch[1] === "(initial)" ? null : null;
655
- const paths = [];
654
+ if (!/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/i.test(oidMatch[1]) && oidMatch[1] !== "(initial)") {
655
+ return null;
656
+ }
657
+ const gitHead = oidMatch[1] === "(initial)" ? null : oidMatch[1];
658
+ const dirtyTrackedPaths = [];
659
+ const untrackedPaths = [];
660
+ const unmergedPaths = [];
661
+ const unmergedCodes = [];
662
+ const dirtySubmodulePaths = [];
663
+ let renameOrCopy = false;
656
664
  for (let index = 0;index < records.length; index++) {
657
665
  const record = records[index];
658
666
  if (!record)
659
667
  continue;
660
668
  if (record.startsWith("? ")) {
661
- paths.push(record.slice(2));
669
+ untrackedPaths.push(record.slice(2));
662
670
  continue;
663
671
  }
664
672
  if (record.startsWith("1 ")) {
673
+ const fields = record.split(" ");
665
674
  const changedPath = porcelainV2PathAfterFields(record, 8);
666
- if (!changedPath)
675
+ if (!changedPath || !fields[2])
667
676
  return null;
668
- paths.push(changedPath);
677
+ dirtyTrackedPaths.push(changedPath);
678
+ if (fields[2] !== "N...")
679
+ dirtySubmodulePaths.push(changedPath);
669
680
  continue;
670
681
  }
671
682
  if (record.startsWith("2 ")) {
683
+ const fields = record.split(" ");
672
684
  const changedPath = porcelainV2PathAfterFields(record, 9);
673
685
  const originalPath = records[++index];
674
- if (!changedPath || !originalPath)
686
+ if (!changedPath || !originalPath || !fields[2])
675
687
  return null;
676
- paths.push(changedPath, originalPath);
688
+ renameOrCopy = true;
689
+ dirtyTrackedPaths.push(changedPath, originalPath);
690
+ if (fields[2] !== "N...")
691
+ dirtySubmodulePaths.push(changedPath);
677
692
  continue;
678
693
  }
679
694
  if (record.startsWith("u ")) {
695
+ const fields = record.split(" ");
680
696
  const changedPath = porcelainV2PathAfterFields(record, 10);
681
- if (!changedPath)
697
+ const unmergedCode = fields[1];
698
+ if (!changedPath || !fields[2] || !unmergedCode || !/^(?:DD|AU|UD|UA|DU|AA|UU)$/.test(unmergedCode)) {
682
699
  return null;
683
- paths.push(changedPath);
700
+ }
701
+ unmergedPaths.push(changedPath);
702
+ unmergedCodes.push(unmergedCode);
703
+ dirtyTrackedPaths.push(changedPath);
704
+ if (fields[2] !== "N...")
705
+ dirtySubmodulePaths.push(changedPath);
684
706
  continue;
685
707
  }
686
708
  return null;
687
709
  }
688
- return { gitHead, changedFiles: [...new Set(paths)] };
710
+ return {
711
+ gitHead,
712
+ dirtyTrackedPaths: [...new Set(dirtyTrackedPaths)],
713
+ untrackedPaths: [...new Set(untrackedPaths)],
714
+ renameOrCopy,
715
+ unmergedPaths: [...new Set(unmergedPaths)],
716
+ unmergedCodes: [...new Set(unmergedCodes)],
717
+ dirtySubmodulePaths: [...new Set(dirtySubmodulePaths)]
718
+ };
689
719
  }
690
720
  function porcelainV2PathAfterFields(record, fields) {
691
721
  let offset = 0;
@@ -722,7 +752,12 @@ function captureWorkspaceSnapshot(directory, optionsOrScope = null, prHeadShaArg
722
752
  directory: path.resolve(directory),
723
753
  gitHead: snapshot?.gitHead ?? null,
724
754
  dirtyHash: porcelain === null ? null : digest(porcelain),
725
- changedFiles: snapshot?.changedFiles ?? null,
755
+ changedFiles: snapshot ? [
756
+ ...new Set([
757
+ ...snapshot.dirtyTrackedPaths,
758
+ ...snapshot.untrackedPaths
759
+ ])
760
+ ] : null,
726
761
  prHeadSha,
727
762
  scope
728
763
  };
@@ -790,4 +825,4 @@ var _internals = {
790
825
  parsePorcelainV2Snapshot
791
826
  };
792
827
 
793
- export { readGitTextAtRevision, resolveCurrentGitHead, resolveCurrentGitHeadAsync, resolveExactMergeBase, resolveExactMergeBaseAsync, resolvePrReviewDiffStats, resolvePrReviewDiffStatsAsync, resolveCurrentUpstreamRemoteRef, resolveCurrentUpstreamPushTarget, resolveCurrentUpstreamPushTargetAsync, resolveExactRemoteBranchHead, resolveExactRemoteBranchHeadAsync, resolveGitControlStateDigest, resolveGitControlStateDigestAsync, resolveIsWorkingTreeClean, resolveIsWorkingTreeCleanAsync, resolveCommitCountSince, resolveCommitCountSinceAsync, resolveIsExactSingleChildCommit, resolveIsExactSingleChildCommitAsync, resolveRemoteRefsContainingHead, resolveRemoteRefsContainingHeadAsync, resolvePrWorkflowRevisionDigest, resolvePrWorkflowRevisionDigestAsync, parsePorcelainPaths, captureWorkspaceSnapshot, changedFilesSinceSnapshot, workspaceSnapshotMatches, compareWorkspaceSnapshot, compareWorkspaceSnapshots, digest, _internals };
828
+ export { readGitTextAtRevision, resolveCurrentGitHead, resolveCurrentGitHeadAsync, resolveExactMergeBase, resolveExactMergeBaseAsync, resolvePrReviewDiffStats, resolvePrReviewDiffStatsAsync, resolveCurrentUpstreamRemoteRef, resolveCurrentUpstreamPushTarget, resolveCurrentUpstreamPushTargetAsync, resolveExactRemoteBranchHead, resolveExactRemoteBranchHeadAsync, resolveGitControlStateDigest, resolveGitControlStateDigestAsync, resolveIsWorkingTreeClean, resolveIsWorkingTreeCleanAsync, resolveCommitCountSince, resolveCommitCountSinceAsync, resolveIsExactSingleChildCommit, resolveIsExactSingleChildCommitAsync, resolveRemoteRefsContainingHead, resolveRemoteRefsContainingHeadAsync, resolvePrWorkflowRevisionDigest, resolvePrWorkflowRevisionDigestAsync, parsePorcelainPaths, parsePorcelainV2Snapshot, captureWorkspaceSnapshot, changedFilesSinceSnapshot, workspaceSnapshotMatches, compareWorkspaceSnapshot, compareWorkspaceSnapshots, digest, _internals };
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  readKnowledge,
4
4
  transactKnowledge
5
- } from "./index-2j8f71c3.js";
5
+ } from "./index-rjngxx7q.js";
6
6
  import {
7
7
  resolveKnowledgeStoreDir
8
8
  } from "./index-cfkvc5q9.js";