@brainervirus/workit-opencode 7.6.0 → 8.0.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.
@@ -8,60 +8,60 @@ description: Run independent slices in parallel - one worker per isolated worktr
8
8
  Fan out only independent slices: disjoint files, no shared mutable state, each
9
9
  verifiable alone. Code-coupled work stays with one owner, who fans out after
10
10
  the blocking part lands. A worker whose whole job is re-running one command is
11
- ceremony; do it yourself.
11
+ ceremony; do it yourself. Workit never spawns agents; you do.
12
12
 
13
13
  1. **Plan the slices** (call the skill tool with `workit-shape`) in a plan file (`references/brief.md`):
14
- per slice an id, branch, TIER, the file-scope manifest (SCOPE globs),
15
- `owns` for shared files (lockfile, registry, barrels), `dependsOn` only for
16
- a real dependency (independent PRs off trunk are the default), and the
17
- brief fields. `workit fanout plan <plan.json>` refuses an empty or
18
- placeholder (`<goal>`, `TBD`) brief field (exit 2) and two slices that may
19
- write one file (exit 3) with a fix: an owner for a shared file, or a
20
- dependency that serializes them. Apply it and re-run: refuse to spawn while
21
- a field is empty or the plan is refused. Its `waves` say which slices may
22
- run together; keep 4-6 in flight.
23
- 2. **Brief each worker** from its slice with the fixed template: GOAL, SCOPE,
24
- CONTEXT (pointers, not pasted text), ACCEPTANCE (Given/When/Then), VERIFY
25
- (exact commands), TIER, TIMEBOX, SCRATCH, FORBIDDEN, REPORT, STANDING.
26
- STANDING is every standing order and user directive so far, pasted
27
- verbatim into each spawn and respawn: directives decay across resumes.
28
- 3. **Spawn all workers in one message**, in the background, each in its own
29
- worktree: Claude Code's `implementer` agent (first command `workit git
30
- branch <branch> --base <base>`); elsewhere `workit fanout worktree create
31
- <slice>`, which prints the SCRATCH dir. Refill from `fanout status`.
32
- 4. **Judge liveness by side effects only:** `workit fanout status` (head age,
33
- PR, CI, verdict, landed; STUCK past the TIMEBOX, default 30 min). Stop a
34
- stuck worker and observe that it exited (a timeout is not proof). Removing
35
- a worktree drops its uncommitted changes: `workit fanout worktree release
36
- <slice>` records `git status` in the ledger first and refuses them without
37
- `--force` (native worktrees: record `git -C <wt> status --short` first).
38
- Respawn in `MODE: resume` (brief, directives, last report), same branch.
39
- Never two live workers on one branch. Replace at most twice, then re-slice
40
- or report the gap. Never chain resumes.
41
- 5. **Verify each slice independently.** A fresh agent that did not write it
42
- (Claude Code: the `verifier` agent) runs VERIFY and verify-<app>, then
43
- `workit ledger verdict <result> --branch <b> --how "<evidence>"` under the
44
- session you started it with (`WORKIT_SESSION_ID=<lead>-v<n>`, set by you,
45
- never chosen by the author; Claude Code: the hook names one).
46
- A worker's report is a pointer, never evidence.
47
- 6. **Fan in** with `workit fanout check`: out-of-scope files (any file outside
48
- it stops the fan-in), and `git merge-tree` conflicts with trunk and between
49
- siblings, charged to the slice that lands later. Fix what it names (an
50
- out-of-scope edit becomes a follow-up slice) until it exits 0. A slice
51
- whose PR merged reads as landed; its dependents stop waiting. Then
52
- `workit ledger check --branch <b>` per slice, land in `fanout status` order
53
- and release the worktrees you made. Stacks: `workit stack plan <bottom> …
54
- <top>` once, then `stack sync` and `land`. Only you touch topology: workers
55
- never rebase, retarget or merge. Then ship (call the skill tool with `workit-ship`).
14
+ per slice an id, branch, TIER, SCOPE globs, `owns` for shared files,
15
+ `dependsOn` only for a real dependency, and the brief fields. `workit fanout
16
+ plan <plan.json>` refuses an empty or placeholder brief field (exit 2) and
17
+ two slices that may write one file (exit 3) with a fix; apply it and re-run:
18
+ refuse to spawn while a field is empty or the plan is refused. One PR per
19
+ slice is the default; `"fanIn": "integration"` only when the user wants one
20
+ PR (`references/orchestration.md`).
21
+ 2. **Record standing orders** (`workit ledger standing add "<order>"`): every
22
+ user directive all workers share. Directives decay across resumes.
23
+ 3. **Brief each worker verbatim** with `workit fanout brief <slice>`: plan
24
+ fields, standing orders, SCRATCH, session id, fan-in rule. Never hand-edit
25
+ it; change the plan or the standing orders and render again.
26
+ 4. **Spawn in a rolling window**, in the background, each in its own worktree:
27
+ keep 4-6 in flight and refill from `spawnable` in `workit fanout status` as
28
+ each one finishes. Pick the model from TIER (`references/orchestration.md`).
29
+ Claude Code: the `implementer` agent; elsewhere first `workit fanout
30
+ worktree create <slice>`.
31
+ 5. **Judge liveness by side effects only:** `workit fanout status` (head age,
32
+ PR, CI, verdict, landed; STUCK past the TIMEBOX). Stop a stuck worker and
33
+ observe that it exited (a timeout is not proof). Removing a worktree drops
34
+ its uncommitted changes: `workit fanout worktree release <slice>` records
35
+ `git status` in the ledger first and refuses them without `--force`. Never
36
+ two live workers on one branch.
37
+ 6. **Retry once, then escalate.** A stuck or failed slice gets one retry with
38
+ a fresh brief (`workit fanout brief <slice> --mode resume`, same branch);
39
+ if that fails too, re-slice it, take it over, or report the gap. Never
40
+ chain resumes. A hard slice may race instead: N attempts, keep the best
41
+ verdict (`references/orchestration.md`).
42
+ 7. **Verify by the workspace `verification` setting** (`workit grant show`).
43
+ A report is a pointer, never evidence. `self`: a verifier that wrote none
44
+ of the slices, or you if you wrote none. `independent` or high risk: a
45
+ separate verifier session, never yours (doctrine: the ledger only refuses
46
+ authors). One verifier may take a batch of slices, one verdict per branch
47
+ (`workit ledger verdict <result> --branch <b> --how "<evidence>"`), in a
48
+ session never chosen by the author. A review panel on separate models only at high risk.
49
+ 8. **Fan in** with `workit fanout check`: out-of-scope files (any file outside
50
+ it stops the fan-in) and `git merge-tree` conflicts with trunk and between
51
+ siblings. Fix what it names until it exits 0; a merged slice reads as
52
+ landed. Then `workit ledger check --branch <b>` per slice, land in `fanout
53
+ status` order, release the worktrees you made, and `workit ledger standing
54
+ clear`. Only you touch topology: workers never rebase, retarget or merge,
55
+ except the integration-tip merge in integration mode. Then ship
56
+ (call the skill tool with `workit-ship`).
56
57
 
57
58
  ## Example
58
59
 
59
60
  Bad brief: "Do the API part and add tests." (no scope, no acceptance, no
60
61
  verify command, so nobody can tell when it is done)
61
62
 
62
- Good brief: `references/brief.md` (GOAL: `GET /v1/usage` returns daily run
63
- counts; SCOPE: `src/routes/usage.ts`, `test/usage.test.ts`; VERIFY:
64
- `workit check test`; ...).
63
+ Good brief: the output of `workit fanout brief usage-endpoint`
64
+ (`references/brief.md` shows one).
65
65
 
66
66
  ## Check
67
67
 
@@ -1,8 +1,11 @@
1
1
  # Worker brief template
2
2
 
3
- Every field is required. A brief with an empty field is not spawned. Point to
4
- files and ledger rows instead of pasting their content. Size the slice so the
5
- worker finishes it in about 150k tokens of context; split a larger one first.
3
+ `workit fanout brief <slice>` renders this brief from the plan, the standing
4
+ orders in force (`workit ledger standing list`) and the slice's scratch dir;
5
+ pass its output verbatim. The template below is what it fills in. Every field
6
+ is required. A brief with an empty field is not spawned. Point to files and
7
+ ledger rows instead of pasting their content. Size the slice so the worker
8
+ finishes it in about 150k tokens of context; split a larger one first.
6
9
 
7
10
  ```md
8
11
  MODE: <new | resume (a replacement continuing an existing branch)>
@@ -16,11 +19,12 @@ VERIFY: <exact commands, e.g. `workit check test`, the verify-<app> feature to d
16
19
  TIER: <mundane | standard | hard: how much model the slice needs>
17
20
  TIMEBOX: <wall clock or turn budget; past it without a new commit you will be replaced>
18
21
  SCRATCH: <your own temp dir: the one `fanout worktree create` printed, else `mktemp -d`; never a shared path>
19
- FORBIDDEN: <no edits outside SCOPE; no rebase, retarget, merge or force-push; no new dependencies; ...>
22
+ FORBIDDEN: <no edits outside SCOPE; no new dependencies; ...>
23
+ FAN-IN: <one PR per slice: no rebase, retarget, merge or force-push | integration: merge the integration tip before reporting, nothing else>
20
24
  REPORT: branch, head SHA, files changed, each VERIFY command with its exit code,
21
25
  each ACCEPTANCE line met / not met, rulings you made (`workit ledger ruling`),
22
26
  anything out of scope as a follow-up, not a diff.
23
- STANDING: <the standing orders, verbatim: user preferences and every directive given so far>
27
+ STANDING: <the standing orders, verbatim: `workit ledger standing add` records each one>
24
28
  export WORKIT_SESSION_ID=<lead>-w<n> (set by the lead; a verifier brief gets <lead>-v<n>)
25
29
  ```
26
30
 
@@ -40,7 +44,8 @@ VERIFY: `workit check test`; verify-api feature "usage"
40
44
  TIER: standard
41
45
  TIMEBOX: 45 minutes
42
46
  SCRATCH: ../app-wt/usage-endpoint/.workit-scratch
43
- FORBIDDEN: no edits outside SCOPE; no schema migration; no rebase or force-push; no new packages
47
+ FORBIDDEN: no edits outside SCOPE; no schema migration; no new packages
48
+ FAN-IN: one PR per slice. Never rebase, retarget, merge or force-push: the lead owns topology.
44
49
  REPORT: as in the template
45
50
  STANDING: conventional commits; no comments that restate code; ask nothing, record rulings instead
46
51
  ```
@@ -55,7 +60,9 @@ stack); `worktree` defaults to `../<repo>-wt/<id>`. `owns` claims a shared
55
60
  file another slice's glob also matches. Globs that match no file yet are compared
56
61
  through a sample path. Use `/` as the separator; a backslash only escapes
57
62
  literal brackets: `"app/\\[id\\]/page.tsx"`. A `timebox` such as `45 minutes`
58
- is the slice's STUCK threshold in `workit fanout status`.
63
+ is the slice's STUCK threshold in `workit fanout status`. `"fanIn":
64
+ "integration"` (with an integration branch as `trunk`) is the one-PR mode in
65
+ `orchestration.md`; the default `"prs"` lands one PR per slice.
59
66
 
60
67
  ```json
61
68
  {
@@ -90,7 +97,7 @@ is the slice's STUCK threshold in `workit fanout status`.
90
97
  }
91
98
  ```
92
99
 
93
- ## Worker rules (paste into the brief when the host has no implementer agent)
100
+ ## Worker rules (`workit fanout brief` appends them as RULES)
94
101
 
95
102
  1. First command. `MODE: new`: `workit git branch <branch> --base <base>` (the
96
103
  worktree may start on a name that breaks branch policy). `MODE: resume`:
@@ -0,0 +1,117 @@
1
+ # Running a fanout
2
+
3
+ How the lead picks models, keeps workers flowing, retries, races, verifies
4
+ and fans in. Workit records and checks; the host's own subagents run the work.
5
+
6
+ ## TIER to model
7
+
8
+ TIER is a field of each slice and of its brief. Map it where the host lets you
9
+ pick a model per spawn; nothing in the workspace config routes it.
10
+
11
+ | TIER | Claude Code (`model` on the Agent call) | Hosts without a per-spawn model |
12
+ | --- | --- | --- |
13
+ | scouting (read-only search, not a slice) | `haiku` | host default |
14
+ | mundane | `sonnet` | host default |
15
+ | standard | omit it (inherits yours) | host default |
16
+ | hard | omit it (inherits yours); consider a race | host default |
17
+
18
+ OpenCode takes a subagent's model from its agent config: pick a configured
19
+ agent whose model fits the TIER, else the default. Codex, Cursor and Pi run
20
+ every worker on the host's model, so TIER only sizes the timebox and decides
21
+ whether to race.
22
+
23
+ ## Rolling window
24
+
25
+ Keep 4-6 workers in flight on Claude Code; elsewhere as many as the host runs
26
+ in the background, never more than 6. Do not wait for a whole wave: when one
27
+ worker finishes (its notification, or a new head or PR in `workit fanout
28
+ status`), verify it, then spawn the next slice from `spawnable` in the same
29
+ status output. A slice whose dependencies landed, or a stacked child whose
30
+ parent is verified, appears there by itself.
31
+
32
+ ## Retry, then escalate
33
+
34
+ A slice is retried when it is STUCK, its worker exits without meeting
35
+ ACCEPTANCE, or its verdict fails. Stop the worker and observe that it exited.
36
+ Release its worktree: `workit fanout worktree release <slice>` (native
37
+ worktrees: record `git -C <wt> status --short` first). Then spawn one fresh
38
+ worker with `workit fanout brief <slice> --mode resume`: same branch, and the
39
+ brief points at its head and its ledger rows (last report, verdicts,
40
+ rulings). If the retry fails too, escalate instead of a third worker:
41
+ re-slice it smaller (`workit fanout plan` again), take it over yourself, or
42
+ report the gap to the user.
43
+
44
+ ## Race a hard slice
45
+
46
+ When a hard slice has an uncertain approach and a cheap VERIFY, run 2-3
47
+ attempts at once instead of retrying in series. `workit fanout brief <slice>
48
+ --attempt <n>` gives each attempt its own branch (`<branch>-try<n>`), session
49
+ and scratch dir. Each attempt needs its own worktree: Claude Code's
50
+ `implementer` isolates natively; on other hosts `fanout worktree create` makes
51
+ only the slice's own worktree, so run the attempts one after another there.
52
+ Verify every attempt, keep the one with the best verdict (accepted first,
53
+ then the fewest changed files, then the earliest), point the slice branch at
54
+ it (`git branch <branch> <winner>`), have the verifier record the verdict on
55
+ `<branch>` (same head), and delete the losing attempt branches.
56
+
57
+ ## Verification
58
+
59
+ Follow the workspace `verification` setting (`workit grant show`); the
60
+ worker never records a verdict on its own work.
61
+
62
+ - `self` (the default): a verifier that wrote none of the slices records the
63
+ verdicts. A lead that authored none of the slices may record them in its
64
+ own session.
65
+ - `independent`, and any slice at high risk: a separate verifier session
66
+ records them, never the lead's own; at high risk one verifier per slice,
67
+ plus a review panel (below). This is doctrine, not enforced: the ledger
68
+ only tells a branch's authors from everyone else, and a lead that wrote
69
+ none of it counts as independent.
70
+
71
+ Which session id a verdict carries, per host:
72
+
73
+ - Claude Code: subagents inherit your `WORKIT_SESSION_ID`, so the
74
+ SubagentStart hook names each `verifier` and `reviewer` its own session
75
+ (`<lead>:<agent id>`), passed as `--session`; that one wins over any
76
+ `<lead>-v<n>` in a brief. An `implementer` uses the session its brief
77
+ exports for its workit commands.
78
+ - Other hosts: the session the brief sets wins: `export
79
+ WORKIT_SESSION_ID=<lead>-w-<slice>` from `workit fanout brief` for a
80
+ worker, `<lead>-v<n>` (or `--as verifier`) for a verifier you start.
81
+
82
+ A batch verifier takes several slices on one surface in one session: for
83
+ each branch it checks out the head, runs that slice's VERIFY, and records its
84
+ own `workit ledger verdict <result> --branch <b> --how "<evidence>"`. Every
85
+ verdict is keyed to that branch's head SHA; a slice whose head moves after
86
+ it needs a new one. Batch at most what fits one context, about 4 slices.
87
+
88
+ ## Review panel (high risk only)
89
+
90
+ At risk=high only, 2-3 fresh reviewers (call the skill tool with `workit-review`), each on a model
91
+ other than the author's (Claude Code: a different `model`), each records
92
+ `workit ledger verdict <result> --kind review --branch <b> --how "<findings>"`.
93
+ Land only when every panel verdict passes. Below high risk a panel costs
94
+ more than it finds.
95
+
96
+ ## Integration-branch fan-in (one PR)
97
+
98
+ Only when the user wants one PR for the whole fanout:
99
+
100
+ 1. Cut the integration branch (`workit git branch <integration> --base
101
+ <trunk>`) and plan with `"fanIn": "integration"` and `--trunk
102
+ <integration>`. Planning refuses integration mode on origin's default
103
+ branch.
104
+ 2. Every brief then tells the worker to merge the integration tip into its
105
+ branch before reporting (the fast-forward rule). That merge is the only
106
+ one a worker makes, and only in this mode.
107
+ 3. Land each verified slice with `git merge --ff-only <slice-branch>` in the
108
+ integration checkout. Not a fast-forward (the tip moved since the worker
109
+ merged)? Resume the worker to merge again; never a merge commit of your own.
110
+ 4. `workit fanout check` gates against the integration branch; a slice whose
111
+ tip is on it reads as landed. When all have landed, ship the integration
112
+ branch as one PR (call the skill tool with `workit-ship`).
113
+
114
+ ## Stacks
115
+
116
+ For stacked slices (`dependsOn` one parent): `workit stack plan <bottom> …
117
+ <top>` once, then `workit stack sync` and `workit stack land`.
@@ -51,8 +51,8 @@ the base keeps moving, or after 3 failed fix attempts on the same check.
51
51
  flake|infra` per head. Real: reproduce with `workit check`, fix the root
52
52
  cause, batch fixes into one push.
53
53
  6. **Verified.** After the last push a non-author records a verdict
54
- (call the skill tool with `workit-review`). Land only when granted: `workit stack land` (the
55
- contiguous verified run from the root) or `workit pr merge`.
54
+ (call the skill tool with `workit-review`). Land only when granted: `workit stack land` (verified run
55
+ from the root) or `workit pr merge`; `--unverified --reason` only if user-asked.
56
56
  7. **Observe it landed:** `workit verify-delivery pr` or `merge`. After a failed
57
57
  verdict or a check red 3+ times, at any endpoint: offer `/wk-retro` in one
58
58
  line of the final or stop report; never pause the babysit loop for it.
package/dist/plugin.js CHANGED
@@ -3,12 +3,12 @@ function define(plugin) {
3
3
  return plugin;
4
4
  }
5
5
 
6
- // packages/workit-core/src/core.ts
6
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core.ts
7
7
  import { spawnSync as spawnSync12 } from "node:child_process";
8
8
  import { existsSync as existsSync7, realpathSync as realpathSync5 } from "node:fs";
9
9
  import path19 from "node:path";
10
10
 
11
- // packages/workit-core/src/core/task-contract.ts
11
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/task-contract.ts
12
12
  import { createHash, randomUUID } from "node:crypto";
13
13
 
14
14
  // node_modules/zod/v4/core/util.js
@@ -7740,7 +7740,7 @@ function refine(fn, _params = {}) {
7740
7740
  function superRefine(fn, params) {
7741
7741
  return _superRefine(fn, params);
7742
7742
  }
7743
- // packages/workit-core/src/core/task-contract.ts
7743
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/task-contract.ts
7744
7744
  var SCHEMA_VERSION = 1;
7745
7745
  var POLICY_VERSION = "1.0.0";
7746
7746
  var OPERATION_FAMILIES = [
@@ -8595,7 +8595,7 @@ function requirementId(input) {
8595
8595
  }
8596
8596
  });
8597
8597
  }
8598
- // packages/workit-core/src/core/operation-input.ts
8598
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/operation-input.ts
8599
8599
  var str = (d, values) => ({
8600
8600
  type: "string",
8601
8601
  ...values ? { enum: values } : {},
@@ -8991,7 +8991,7 @@ function parseAdvertisedOperation(family, input, host) {
8991
8991
  }))
8992
8992
  });
8993
8993
  }
8994
- // packages/workit-core/src/core/task-store.ts
8994
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/task-store.ts
8995
8995
  import { createHash as createHash4, randomUUID as randomUUID3 } from "node:crypto";
8996
8996
  import * as fs7 from "node:fs";
8997
8997
  import path6 from "node:path";
@@ -9597,7 +9597,7 @@ function acquireFileLockSync(targetPath, options) {
9597
9597
  }
9598
9598
  }
9599
9599
  }
9600
- // packages/workit-core/src/core/package-root.ts
9600
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/package-root.ts
9601
9601
  import { existsSync } from "node:fs";
9602
9602
  import path3 from "node:path";
9603
9603
  import { fileURLToPath } from "node:url";
@@ -9616,12 +9616,12 @@ var assetRoot = () => {
9616
9616
  return existsSync(assets) ? assets : root;
9617
9617
  };
9618
9618
 
9619
- // packages/workit-core/src/core/store-lock.ts
9619
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/store-lock.ts
9620
9620
  import { spawnSync as spawnSync2 } from "node:child_process";
9621
9621
  import fs5 from "node:fs";
9622
9622
  import { hostname } from "node:os";
9623
9623
 
9624
- // packages/workit-core/src/store/paths.ts
9624
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/store/paths.ts
9625
9625
  import { spawnSync } from "node:child_process";
9626
9626
  import { createHash as createHash2 } from "node:crypto";
9627
9627
  import fs4 from "node:fs";
@@ -9901,7 +9901,7 @@ var checkoutSlug = (root) => {
9901
9901
  return `${base}-${shortHash(canonical)}`;
9902
9902
  };
9903
9903
 
9904
- // packages/workit-core/src/core/store-lock.ts
9904
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/store-lock.ts
9905
9905
  var metadataLockSchema = object({
9906
9906
  pid: number2().int().nonnegative().safe(),
9907
9907
  processStart: string2().nullable(),
@@ -10032,7 +10032,7 @@ var clearAbandonedReclaimGuard = (lockPath, nowMs = Date.now()) => {
10032
10032
  }
10033
10033
  };
10034
10034
 
10035
- // packages/workit-core/src/store/event-log.ts
10035
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/store/event-log.ts
10036
10036
  import { randomUUID as randomUUID2 } from "node:crypto";
10037
10037
  import fs6 from "node:fs";
10038
10038
  import path5 from "node:path";
@@ -10192,7 +10192,7 @@ var retryTransient = (run) => {
10192
10192
  };
10193
10193
  var renameWithRetry = (from, to) => retryTransient(() => fs6.renameSync(from, to));
10194
10194
 
10195
- // packages/workit-core/src/store/patch.ts
10195
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/store/patch.ts
10196
10196
  var isPlainObject2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
10197
10197
  var equal = (left, right) => {
10198
10198
  if (left === right)
@@ -10302,7 +10302,7 @@ var isPatch = (value) => Array.isArray(value) && value.every((op) => {
10302
10302
  return false;
10303
10303
  });
10304
10304
 
10305
- // packages/workit-core/src/store/reduce.ts
10305
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/store/reduce.ts
10306
10306
  import { createHash as createHash3 } from "node:crypto";
10307
10307
  var OPENING_TYPES = new Set([
10308
10308
  "task.opened",
@@ -10433,7 +10433,7 @@ function eventType(before, after) {
10433
10433
  return "task.updated";
10434
10434
  }
10435
10435
 
10436
- // packages/workit-core/src/store/notes.ts
10436
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/store/notes.ts
10437
10437
  var SLOT = Symbol.for("workit.migrationReporter");
10438
10438
  var reportMigration = (report) => {
10439
10439
  try {
@@ -10444,7 +10444,7 @@ var reportMigration = (report) => {
10444
10444
  };
10445
10445
  var migrationReporterInstalled = () => typeof globalThis[SLOT] === "function";
10446
10446
 
10447
- // packages/workit-core/src/core/task-store.ts
10447
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/task-store.ts
10448
10448
  var MIGRATION_PENDING = "workit migration pending";
10449
10449
  var STORE_FORMAT = 3;
10450
10450
  var STORE_MIN_RUNTIME = "3.0.0";
@@ -12080,18 +12080,18 @@ class TaskStore {
12080
12080
  return failure2(recovery ? "recovery_required" : "storage_error", `lock operation failed: ${String(error)}`, { path: lockPath });
12081
12081
  }
12082
12082
  }
12083
- // packages/workit-core/src/core/workers.ts
12083
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/workers.ts
12084
12084
  var UNCERTAIN_WORKER_STATES = ["dispatching", "running", "cancelling", "unknown"];
12085
12085
  var isUncertainWorker = (state) => UNCERTAIN_WORKER_STATES.includes(state);
12086
12086
  var workerBlocksTransition = (transition, state) => transition === "pause" ? false : isUncertainWorker(state);
12087
12087
 
12088
- // packages/workit-core/src/core/task-evaluation.ts
12088
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/task-evaluation.ts
12089
12089
  import { createHash as createHash7 } from "node:crypto";
12090
12090
  import * as fs11 from "node:fs";
12091
12091
  import { spawnSync as spawnSync6 } from "node:child_process";
12092
12092
  import path11 from "node:path";
12093
12093
 
12094
- // packages/workit-core/src/check-config.ts
12094
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/check-config.ts
12095
12095
  import { spawnSync as spawnSync3 } from "node:child_process";
12096
12096
  import fs8 from "node:fs";
12097
12097
  import path7 from "node:path";
@@ -12296,7 +12296,7 @@ function checkCommand(args, version, onPath = workitAvailable()) {
12296
12296
  return onPath ? `workit check ${args}` : `npx -y @brainervirus/workit-cli@${version} check ${args}`;
12297
12297
  }
12298
12298
 
12299
- // packages/workit-core/src/git/rev.ts
12299
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/git/rev.ts
12300
12300
  import { spawnSync as spawnSync4 } from "node:child_process";
12301
12301
  import { createHash as createHash5 } from "node:crypto";
12302
12302
  import fs9 from "node:fs";
@@ -12477,11 +12477,11 @@ function pushRemoteName(cwd, branch) {
12477
12477
  return remotes.length === 1 ? remotes[0] : null;
12478
12478
  }
12479
12479
 
12480
- // packages/workit-core/src/core/policy/derive.ts
12480
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/policy/derive.ts
12481
12481
  import { existsSync as existsSync3 } from "node:fs";
12482
12482
  import path10 from "node:path";
12483
12483
 
12484
- // packages/workit-core/src/ledger.ts
12484
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/ledger.ts
12485
12485
  import { spawnSync as spawnSync5 } from "node:child_process";
12486
12486
  import { createHash as createHash6, randomBytes as randomBytes2 } from "node:crypto";
12487
12487
  import fs10 from "node:fs";
@@ -12832,7 +12832,7 @@ function checkVerdicts(cwd, branch, rows) {
12832
12832
  }
12833
12833
  var OBSERVED_ONLY = new Set(["check", ...PR_ROW_TYPES]);
12834
12834
 
12835
- // packages/workit-core/src/core/policy/derive.ts
12835
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/policy/derive.ts
12836
12836
  var RULES = {
12837
12837
  test: "check:test",
12838
12838
  self: "verdict:self",
@@ -13031,7 +13031,7 @@ function writeBlockers(task, root) {
13031
13031
  });
13032
13032
  }
13033
13033
 
13034
- // packages/workit-core/src/core/task-evaluation.ts
13034
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/task-evaluation.ts
13035
13035
  var digestBytes = (value) => createHash7("sha256").update(value).digest("hex");
13036
13036
  var inside = (root, candidate) => candidate === root || candidate.startsWith(`${root}${path11.sep}`);
13037
13037
  var relative = (root, candidate) => path11.relative(root, candidate).split(path11.sep).join("/") || ".";
@@ -13697,7 +13697,7 @@ function evaluateClosure(requestedOutcome, view) {
13697
13697
  });
13698
13698
  }
13699
13699
 
13700
- // packages/workit-core/src/core/methods.ts
13700
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/methods.ts
13701
13701
  var METHODS = {
13702
13702
  "workit-shape": { dimensions: ["challenge", "decisions", "artifacts", "continuity"] },
13703
13703
  "workit-bdd": { dimensions: ["testing"] },
@@ -13805,7 +13805,7 @@ Skills: load the skill, never act from memory of it (slash aliases /wk-<name>).
13805
13805
  - architecture, deepen modules (user-invoked; offer it): workit-architecture
13806
13806
  `.trim();
13807
13807
 
13808
- // packages/workit-core/src/core/task-context.ts
13808
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/task-context.ts
13809
13809
  function reconcileResume(view, observations = []) {
13810
13810
  if (observations.length > 0)
13811
13811
  return failure2("permission_denied", "worker observations require native host verification");
@@ -13919,10 +13919,10 @@ var exportDigest = (bundle) => sha256({
13919
13919
  sourceWorkspaceId: bundle.sourceWorkspaceId,
13920
13920
  task: bundle.task
13921
13921
  });
13922
- // packages/workit-core/src/core/branch.ts
13922
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/branch.ts
13923
13923
  import { createHash as createHash10 } from "node:crypto";
13924
13924
 
13925
- // packages/workit-core/src/core/git.ts
13925
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/git.ts
13926
13926
  import { execFileSync } from "node:child_process";
13927
13927
  var run = (cwd, args) => {
13928
13928
  try {
@@ -13990,7 +13990,7 @@ var gitContext = (workspaceRoot, paths = []) => {
13990
13990
  };
13991
13991
  };
13992
13992
 
13993
- // packages/workit-core/src/core/config.ts
13993
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/config.ts
13994
13994
  import {
13995
13995
  copyFileSync as copyFileSync2,
13996
13996
  cpSync as cpSync2,
@@ -14003,7 +14003,7 @@ import {
14003
14003
  import os2 from "node:os";
14004
14004
  import path12 from "node:path";
14005
14005
 
14006
- // packages/workit-core/src/core/boundary.ts
14006
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/boundary.ts
14007
14007
  import { statSync as statSync2 } from "node:fs";
14008
14008
  var EVENT = {
14009
14009
  initialization: "initialization",
@@ -14039,7 +14039,7 @@ var changedSourcesSinceLoad = (marker) => {
14039
14039
  return changed;
14040
14040
  };
14041
14041
 
14042
- // packages/workit-core/src/core/config.ts
14042
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/config.ts
14043
14043
  var diagnosticLogger;
14044
14044
  var PRESETS = {
14045
14045
  gitflow: {
@@ -14214,7 +14214,7 @@ var resolveCommitPolicy = (config, workspace) => {
14214
14214
  return config.commitPolicy ?? { preset: "conventional" };
14215
14215
  };
14216
14216
 
14217
- // packages/workit-core/src/core/workspaces.ts
14217
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/workspaces.ts
14218
14218
  import { createHash as createHash8 } from "node:crypto";
14219
14219
  import { readFileSync as readFileSync4, realpathSync as realpathSync3 } from "node:fs";
14220
14220
  import path13 from "node:path";
@@ -14623,12 +14623,12 @@ function workspaceDefaultTarget(cwd, globalDefault) {
14623
14623
  return String(ws?.vcs?.defaultTargetBranch ?? (hasWorkspacePolicy ? policyDefault : globalDefault ?? policyDefault) ?? "develop");
14624
14624
  }
14625
14625
 
14626
- // packages/workit-core/src/core/vcs-config.ts
14626
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/vcs-config.ts
14627
14627
  import fs12 from "node:fs";
14628
14628
  import path14 from "node:path";
14629
14629
  import { spawnSync as spawnSync8 } from "node:child_process";
14630
14630
 
14631
- // packages/workit-core/src/core/release-tracks.ts
14631
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/release-tracks.ts
14632
14632
  import { createHash as createHash9 } from "node:crypto";
14633
14633
  import { spawnSync as spawnSync7 } from "node:child_process";
14634
14634
  class ReleaseTrackError extends Error {
@@ -15026,7 +15026,7 @@ function resolveTrackFor(cwd, options) {
15026
15026
  return resolution;
15027
15027
  }
15028
15028
 
15029
- // packages/workit-core/src/core/vcs-config.ts
15029
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/vcs-config.ts
15030
15030
  var workspacesPath = () => path14.join(configDir(), "workspaces.json");
15031
15031
  var vcsCwd = (cwd) => cwd ?? process.env.WORKFLOW_WORKSPACE_ROOT ?? process.cwd();
15032
15032
  var remoteProvider = (cwd) => {
@@ -15308,7 +15308,7 @@ function mergedPrStyle(limit = 6, cwd) {
15308
15308
  };
15309
15309
  }
15310
15310
 
15311
- // packages/workit-core/src/core/branch.ts
15311
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/branch.ts
15312
15312
  var withReleaseTracks = (workspaceRoot, policy) => {
15313
15313
  const read = workspaceReleaseTracks(workspaceRoot);
15314
15314
  if (read.error)
@@ -15401,7 +15401,7 @@ var validateBranchNameFor = (workspaceRoot, name) => {
15401
15401
  }
15402
15402
  };
15403
15403
 
15404
- // packages/workit-core/src/core/route-intent.ts
15404
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/route-intent.ts
15405
15405
  var shellBranchTarget = (command) => {
15406
15406
  if (!command.trim() || /[\r\n;&|<>`'"$()\\*?{}~!#]/u.test(command) || command.includes("[") || command.includes("]"))
15407
15407
  return null;
@@ -15416,10 +15416,10 @@ var shellBranchPolicyViolation = (root, command) => {
15416
15416
  const target = shellBranchTarget(command);
15417
15417
  return target === null ? null : validateBranchNameFor(root, target);
15418
15418
  };
15419
- // packages/workit-core/src/core/task-engine.ts
15419
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/task-engine.ts
15420
15420
  import { realpathSync as realpathSync4 } from "node:fs";
15421
15421
 
15422
- // packages/workit-core/src/core/policy-resolver.ts
15422
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/policy-resolver.ts
15423
15423
  function resolvePolicy(input) {
15424
15424
  const ids = input.constraints.map((constraint) => constraint.id);
15425
15425
  if (new Set(ids).size !== ids.length)
@@ -15475,7 +15475,7 @@ function diffPolicy(previous, next, reason, now) {
15475
15475
  return parsed.data;
15476
15476
  }
15477
15477
 
15478
- // packages/workit-core/src/core/policy/judgment.ts
15478
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/policy/judgment.ts
15479
15479
  var isObject6 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
15480
15480
  var squash = (key) => key.toLowerCase().replace(/[_-]/g, "");
15481
15481
  var ALIASES = {
@@ -15599,11 +15599,11 @@ function normalizeJudgment(raw, previous) {
15599
15599
  return success(null, null, { judgment: parsed.data, ignored, legacy });
15600
15600
  }
15601
15601
 
15602
- // packages/workit-core/src/autonomy.ts
15602
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/autonomy.ts
15603
15603
  import os3 from "node:os";
15604
15604
  import path15 from "node:path";
15605
15605
 
15606
- // packages/workit-core/src/core/safe-write.ts
15606
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/safe-write.ts
15607
15607
  import {
15608
15608
  closeSync as closeSync2,
15609
15609
  fchmodSync,
@@ -15626,7 +15626,7 @@ function writeFileExclusive(file, content, mode) {
15626
15626
  }
15627
15627
  }
15628
15628
 
15629
- // packages/workit-core/src/autonomy.ts
15629
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/autonomy.ts
15630
15630
  var accountHome = () => {
15631
15631
  try {
15632
15632
  return os3.userInfo().homedir;
@@ -15761,7 +15761,7 @@ function resolveAutonomy(cwd) {
15761
15761
  var suggested = (kind) => kind === "merge" ? "verified" : "true";
15762
15762
  var grantHint = (workspace, kind) => `ask the user to run, in their own terminal: workit grant set ${workspace ?? "<workspace>"} ${kind}=${suggested(kind)}`;
15763
15763
 
15764
- // packages/workit-core/src/core/task-engine.ts
15764
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/task-engine.ts
15765
15765
  var workspaceVerification = (root) => {
15766
15766
  try {
15767
15767
  return resolveAutonomy(root).verification;
@@ -17346,7 +17346,7 @@ class WorkitCore {
17346
17346
  return this.summary(changed.data.task);
17347
17347
  }
17348
17348
  }
17349
- // packages/workit-core/src/core/repo-context.ts
17349
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/repo-context.ts
17350
17350
  import { spawnSync as spawnSync9 } from "node:child_process";
17351
17351
  import { existsSync as existsSync6, readFileSync as readFileSync5, readdirSync as readdirSync4 } from "node:fs";
17352
17352
  import path16 from "node:path";
@@ -17816,20 +17816,20 @@ function releaseNotesContext(root, rangeOrTag) {
17816
17816
  return { stdout, stderr: "", exitCode: 0, cwd };
17817
17817
  }
17818
17818
 
17819
- // packages/workit-core/src/core/tracker-issues.ts
17819
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/tracker-issues.ts
17820
17820
  import { spawnSync as spawnSync11 } from "node:child_process";
17821
17821
 
17822
- // packages/workit-core/src/core/pr-create.ts
17822
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/pr-create.ts
17823
17823
  import fs13 from "node:fs";
17824
17824
  import path17 from "node:path";
17825
17825
  import { spawnSync as spawnSync10 } from "node:child_process";
17826
- // packages/workit-core/src/forge/pr-body.ts
17826
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/forge/pr-body.ts
17827
17827
  function parseGhIssue(value) {
17828
17828
  const m = /issues\/(\d+)/.exec(value);
17829
17829
  return m ? m[1] : String(value).trim().replace(/^#/, "");
17830
17830
  }
17831
17831
 
17832
- // packages/workit-core/src/core/pr-create.ts
17832
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/pr-create.ts
17833
17833
  function whichOnPath(tool) {
17834
17834
  const names = process.platform === "win32" ? [tool, `${tool}.exe`, `${tool}.cmd`] : [tool];
17835
17835
  for (const dir of (process.env.PATH ?? "").split(path17.delimiter)) {
@@ -17857,7 +17857,7 @@ var pushRemote = (cwd) => {
17857
17857
  return urls.length === 1 ? urls[0] : null;
17858
17858
  };
17859
17859
 
17860
- // packages/workit-core/src/core/tracker-issues.ts
17860
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/tracker-issues.ts
17861
17861
  var repoPathFromRemote = (remote) => {
17862
17862
  let rest = (remote || "").trim().replace(/\/+$/, "");
17863
17863
  if (!rest)
@@ -17955,19 +17955,19 @@ var fetchGitLabIssueBody = async (ref, root, deps = {}) => {
17955
17955
  return tryCliTriple(deps.cli ?? defaultCli("glab", hostingCliAvailable("gitlab")), "glab", ["issue", "view", id, "-R", repoArg, "-F", "json"], root, id, ["iid"], ["description"]);
17956
17956
  };
17957
17957
 
17958
- // packages/workit-core/src/core/youtrack.ts
17958
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/youtrack.ts
17959
17959
  import fs14 from "node:fs";
17960
17960
  import path18 from "node:path";
17961
17961
 
17962
- // packages/workit-core/src/core/templates.ts
17962
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/templates.ts
17963
17963
  var repoRoot2 = assetRoot();
17964
17964
 
17965
- // packages/workit-core/src/core/scripts.ts
17965
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/scripts.ts
17966
17966
  var PLUGIN_ROOT = packageRoot();
17967
17967
  var ASSET_ROOT = assetRoot();
17968
17968
  var resolveWorkspaceRoot = (explicit) => explicit || process.cwd();
17969
17969
 
17970
- // packages/workit-core/src/core/youtrack.ts
17970
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/youtrack.ts
17971
17971
  var ISSUE_RE = /^[A-Z]+-\d+$/;
17972
17972
  var TOKEN_PLACEHOLDER = "YOUR_TOKEN_HERE";
17973
17973
  var youTrackConfigPath = () => process.env.WORKFLOW_YOUTRACK_CONFIG ?? path18.join(configDir(), "youtrack.json");
@@ -18294,7 +18294,7 @@ var fetchYouTrackIssueBody = async (issue, creds = youTrackToken, request = youT
18294
18294
  }
18295
18295
  };
18296
18296
 
18297
- // packages/workit-core/src/core/context-read.ts
18297
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/context-read.ts
18298
18298
  var contextReadSchema = object({
18299
18299
  kind: _enum([
18300
18300
  "git",
@@ -18405,7 +18405,7 @@ var readExternalContext = async (root, payload) => {
18405
18405
  }
18406
18406
  };
18407
18407
 
18408
- // packages/workit-core/src/core.ts
18408
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core.ts
18409
18409
  var ok = (data) => ({ ok: true, data, error: null });
18410
18410
  var fail = (error, data = null) => ({
18411
18411
  ok: false,
@@ -18466,7 +18466,7 @@ function run2(root, executable, args, env = {}) {
18466
18466
  cwd
18467
18467
  };
18468
18468
  }
18469
- // packages/workit-core/src/hooks/descriptor.ts
18469
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/hooks/descriptor.ts
18470
18470
  var support = (descriptor, axis) => {
18471
18471
  if (axis.startsWith("event:"))
18472
18472
  return descriptor.events[axis.slice("event:".length)].support;
@@ -18490,7 +18490,7 @@ var capabilitiesFor = (descriptor, observed = {}) => descriptor.capabilities.map
18490
18490
  refs: rule.refs.map((handle) => ({ kind: "host", host: descriptor.host, handle }))
18491
18491
  };
18492
18492
  });
18493
- // packages/workit-core/src/hooks/context.ts
18493
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/hooks/context.ts
18494
18494
  import path20 from "node:path";
18495
18495
  var MIGRATION_PENDING_NOTE = "workit migration pending — run `workit task status`";
18496
18496
  var migrationPending = (result) => !result.ok && result.code === "needs_input" && (result.error ?? "").startsWith(MIGRATION_PENDING);
@@ -18587,12 +18587,12 @@ function entryCompactContext(store, entry, session, context) {
18587
18587
  cache.delete(cache.keys().next().value);
18588
18588
  return compact.data;
18589
18589
  }
18590
- // packages/workit-core/src/hooks/policy.ts
18590
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/hooks/policy.ts
18591
18591
  var shellPolicy = (cwd, command) => {
18592
18592
  const policy = shellBranchPolicyViolation(cwd, command);
18593
18593
  return policy && !policy.ok ? { kind: "deny", reason: `branch_policy_denied: ${policy.error}`, unblock: null } : { kind: "none" };
18594
18594
  };
18595
- // packages/workit-core/src/hooks/write-gate.ts
18595
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/hooks/write-gate.ts
18596
18596
  import { realpathSync as realpathSync6 } from "node:fs";
18597
18597
  import path21 from "node:path";
18598
18598
  var NONE2 = { kind: "none" };
@@ -18853,7 +18853,7 @@ function writeGate(cwd, paths) {
18853
18853
  return NONE2;
18854
18854
  }
18855
18855
  }
18856
- // packages/workit-core/src/hooks/hosts/fields.ts
18856
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/hooks/hosts/fields.ts
18857
18857
  var SHELLS = new Set(["sh", "bash", "zsh", "dash", "pwsh", "powershell", "cmd"]);
18858
18858
  var WRITE_TOOLS = new Set([
18859
18859
  "write",
@@ -18874,24 +18874,24 @@ var WRITE_TOOLS = new Set([
18874
18874
  "editfile",
18875
18875
  "writefile"
18876
18876
  ]);
18877
- // packages/workit-core/src/hooks/handle.ts
18877
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/hooks/handle.ts
18878
18878
  var offered = new Set;
18879
18879
  var CLAUDE_JUDGES = new Set(["workit:verifier", "workit:reviewer"]);
18880
- // packages/workit-core/src/hooks/hosts/claude-code.ts
18880
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/hooks/hosts/claude-code.ts
18881
18881
  var SOURCES = new Set(["startup", "resume", "clear", "compact", "fork"]);
18882
18882
  var SHELL_TOOLS = new Set(["Bash", "PowerShell"]);
18883
18883
  var CONTEXT_EVENTS = new Set(["SessionStart", "UserPromptSubmit", "SubagentStart"]);
18884
18884
 
18885
- // packages/workit-core/src/hooks/hosts/codex.ts
18885
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/hooks/hosts/codex.ts
18886
18886
  var SHELL_TOOLS2 = new Set(["bash", "unified-exec"]);
18887
18887
  var SOURCES2 = new Set(["startup", "resume", "clear", "compact"]);
18888
18888
 
18889
- // packages/workit-core/src/hooks/hosts/cursor.ts
18889
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/hooks/hosts/cursor.ts
18890
18890
  var BLOCKING = new Set(["preToolUse", "beforeShellExecution", "subagentStart"]);
18891
18891
 
18892
- // packages/workit-core/src/hooks/run.ts
18892
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/hooks/run.ts
18893
18893
  if (false) {}
18894
- // packages/workit-core/src/hooks/hosts/opencode.ts
18894
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/hooks/hosts/opencode.ts
18895
18895
  var OPENCODE_DESCRIPTOR = {
18896
18896
  host: "opencode",
18897
18897
  label: "OpenCode",
@@ -18960,7 +18960,7 @@ var OPENCODE_DESCRIPTOR = {
18960
18960
  // packages/workit-opencode/src/shared/init-apply.ts
18961
18961
  import path26 from "node:path";
18962
18962
 
18963
- // packages/workit-core/src/core/gitignore.ts
18963
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/gitignore.ts
18964
18964
  import { existsSync as existsSync8, readFileSync as readFileSync6, writeFileSync as writeFileSync4 } from "node:fs";
18965
18965
  import path22 from "node:path";
18966
18966
  var GITIGNORE_ENTRIES = [
@@ -19008,7 +19008,7 @@ var ensureProjectGitignore = (workspaceRoot, confirmed) => {
19008
19008
  return { ok: true, path: file, added };
19009
19009
  };
19010
19010
 
19011
- // packages/workit-core/src/core/hygiene.ts
19011
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/hygiene.ts
19012
19012
  import { existsSync as existsSync9, readFileSync as readFileSync7, writeFileSync as writeFileSync5 } from "node:fs";
19013
19013
  import path23 from "node:path";
19014
19014
  var repoRoot3 = assetRoot();
@@ -19072,17 +19072,17 @@ var ensureHygieneFiles = (root, opts) => {
19072
19072
  return { ok: true, created };
19073
19073
  };
19074
19074
 
19075
- // packages/workit-core/src/core/init.ts
19075
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/init.ts
19076
19076
  import fs15 from "node:fs";
19077
19077
  import path25 from "node:path";
19078
19078
  import { spawnSync as spawnSync14 } from "node:child_process";
19079
19079
 
19080
- // packages/workit-core/src/core/workspace-branch-policy.ts
19080
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/workspace-branch-policy.ts
19081
19081
  import { mkdirSync as mkdirSync4, readFileSync as readFileSync8, renameSync as renameSync3, rmSync as rmSync2, writeFileSync as writeFileSync6 } from "node:fs";
19082
19082
  import path24 from "node:path";
19083
19083
  import { isDeepStrictEqual } from "node:util";
19084
19084
 
19085
- // packages/workit-core/src/core/branch-policy.ts
19085
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/branch-policy.ts
19086
19086
  import { spawnSync as spawnSync13 } from "node:child_process";
19087
19087
  var PREFIXES2 = {
19088
19088
  feature: "feature/*",
@@ -19142,7 +19142,7 @@ var detectBranchPolicy = (workspaceRoot) => {
19142
19142
  };
19143
19143
  };
19144
19144
 
19145
- // packages/workit-core/src/core/workspace-branch-policy.ts
19145
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/workspace-branch-policy.ts
19146
19146
  var readFileSafe = (p) => {
19147
19147
  try {
19148
19148
  return readFileSync8(p, "utf8");
@@ -19244,7 +19244,7 @@ function applyWorkspaceBranchPolicy(opts) {
19244
19244
  };
19245
19245
  }
19246
19246
 
19247
- // packages/workit-core/src/core/init.ts
19247
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/init.ts
19248
19248
  var TOKEN_PLACEHOLDER2 = "YOUR_TOKEN_HERE";
19249
19249
  var readJson = (p) => {
19250
19250
  try {
@@ -20173,7 +20173,7 @@ var evaluateShellPermission = (root, event) => {
20173
20173
  import { existsSync as existsSync11, readFileSync as readFileSync9 } from "node:fs";
20174
20174
  import path30 from "node:path";
20175
20175
 
20176
- // packages/workit-core/src/core/skill-manifests.ts
20176
+ // packages/workit-opencode/node_modules/@brainervirus/workit-core/src/core/skill-manifests.ts
20177
20177
  var WORKIT_METHOD_SKILLS = [
20178
20178
  "workit-shape",
20179
20179
  "workit-implement",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brainervirus/workit-opencode",
3
- "version": "7.6.0",
3
+ "version": "8.0.0",
4
4
  "private": false,
5
5
  "description": "Workit OpenCode plugin — native tools, adaptive policy, and sixteen method skills",
6
6
  "keywords": [
@@ -39,7 +39,7 @@
39
39
  "typecheck": "tsc --noEmit"
40
40
  },
41
41
  "dependencies": {
42
- "@brainervirus/workit-core": "^7.6.0"
42
+ "@brainervirus/workit-core": "^8.0.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@opencode/plugin": "2.0.18"