@brainervirus/workit-opencode 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -43,7 +43,7 @@ plugin is a self-contained Node bundle; its default export is a dual entry
43
43
 
44
44
  - **Receipts** — native `question` answers are purpose-bound, session-bound, fresh, and one-use; unrelated questions fail closed.
45
45
  - **Delegation** — native `task` workers are direct-child-only; nested or uncertain lineage is denied (`delegation_lineage_denied`).
46
- - **Continuity** — compact task context is injected once on session start and once after compaction; unobservable shell surfaces are labeled `agent_guided`.
46
+ - **Continuity** — compact task context carries the newest decisions and bounded redacted choice summaries, injected once on session start and once after compaction; unobservable shell surfaces are labeled `agent_guided`.
47
47
 
48
48
  Workit does not register `workit_external_action` on either OpenCode version.
49
49
  Use native tools for mutations under the host permissions and target conventions;
@@ -22,6 +22,14 @@ request, and a timeout is not proof that a worker stopped.
22
22
  until process exit or explicit recovery.
23
23
  4. Reconcile helper reports and run the checks appropriate to the requested
24
24
  outcome. If delegation is unavailable, continue inline when useful.
25
+ 5. Before a cross-repo mutation, resolve the actual checkout, branch and remote
26
+ from the request and current context. Ask only if competing plausible targets
27
+ remain unresolved. Branch, commit, direct push, PR-ready, merge and release
28
+ are distinct endpoints; perform only the authorized one under target rules.
29
+ Before saying done, reconcile every named deliverable against that checkout
30
+ and verify the requested result. For a push, observe the destination remote
31
+ ref and confirm it contains the delivered commit; report drift or missing
32
+ items as blockers instead of treating local success as remote delivery.
25
33
 
26
34
  Do not edit Workit metadata directly, create nested helper trees, widen paths, or
27
35
  create a second lifecycle. Read-only investigation and bounded reports do not
@@ -18,7 +18,11 @@ request. Preserve continuity when it helps; do not manufacture task mutations.
18
18
  3. For a separate request, do not silently resume an old objective. Park a
19
19
  concise checkpoint only when substantial work needs to continue later. Start
20
20
  a distinct tracked record only if the new work benefits from continuity,
21
- dependencies, coordination, or durable decisions.
21
+ dependencies, coordination, or durable decisions. For work spanning repos,
22
+ checkpoint each unfinished item with its checkout, branch, requested
23
+ deliverables, and delivery endpoint. Keep explicitly held items parked with
24
+ their resume condition until the user resumes them. A conversational
25
+ checkpoint is sufficient when no task record is needed.
22
26
  4. Before resuming a named tracked task, reconcile its checkout, branch, dirty
23
27
  state, current policy, stale evidence, uncertain effects, and ownership. Do
24
28
  not change branches, stash, fetch large histories, or seize ownership just
package/dist/plugin.js CHANGED
@@ -12560,7 +12560,8 @@ let imported decisions grant authority. Never turn a host deny into allow or
12560
12560
  claim enforcement/evidence a host cannot provide. A precise request with settled
12561
12561
  constraints does not need an interview. Present genuine unresolved options with
12562
12562
  evidence and a recommendation, then continue toward the requested delivery
12563
- endpoint: investigation, implementation, PR/MR-ready, merge, or release. Run
12563
+ endpoint: investigation, implementation, branch/commit/push, PR/MR-ready,
12564
+ merge, or release. Run
12564
12565
  applicable checks and safe repairs without repeated continuation questions;
12565
12566
  stop for missing host authority, a new consequential choice, a conflicting edit,
12566
12567
  or an unresolved blocker. A tracked record may close when actual evidence
@@ -12572,6 +12573,12 @@ confirm the stop. Preserve unresolved requirements, gaps, and uncertain workers.
12572
12573
  When context changes, distinguish a quick question, same-task adjustment, and
12573
12574
  separate request. Answer a quick question without pausing/resuming task state;
12574
12575
  park a concise checkpoint only when substantial work needs to continue later.
12576
+ For work spanning repositories, bind each unfinished item to its actual checkout,
12577
+ branch, requested deliverables, and delivery endpoint. Preserve held items with
12578
+ an explicit resume condition. Resolve competing plausible targets before a
12579
+ mutation; ask only when available context cannot settle that consequential choice.
12580
+ Before reporting delivery, reconcile every requested item and observe the actual
12581
+ target result; a local commit alone is not evidence of a requested remote push.
12575
12582
 
12576
12583
  Skill routing: slash aliases /wk-* load on demand. Use workit-steer for a
12577
12584
  substantial interruption or change of direction, workit-deslop when relevant
@@ -12618,6 +12625,13 @@ var compactText = (value, limit) => value === null ? null : value.replace(privat
12618
12625
  return `${match.slice(0, space)} <redacted>`;
12619
12626
  }).slice(0, limit);
12620
12627
  var compactBytes = (value) => new TextEncoder().encode(value).byteLength;
12628
+ var compactTimestamp = (value) => `${value.slice(0, 19)}.${value.slice(20, -1).padEnd(9, "0")}`;
12629
+ var compactDecisionChoice = (entry) => {
12630
+ const stated = entry.data.binding.statedChoice?.text;
12631
+ const approved = entry.data.response === "approved" ? entry.data.binding.approvedContent : "";
12632
+ const source = stated?.trim() || approved.trim() || null;
12633
+ return compactText(source, COMPACT_TEXT_BYTES);
12634
+ };
12621
12635
  var compactReference = (ref) => {
12622
12636
  if (ref.kind === "file")
12623
12637
  return {
@@ -12633,11 +12647,18 @@ var compactReference = (ref) => {
12633
12647
  return { kind: ref.kind };
12634
12648
  };
12635
12649
  function compactTaskContext(view) {
12636
- const decisions = view.task.decisions.slice().sort((left, right) => left.id < right.id ? -1 : left.id > right.id ? 1 : 0).slice(0, COMPACT_MAX_ITEMS).map((entry) => ({
12650
+ const decisions = view.task.decisions.slice().sort((left, right) => {
12651
+ const leftAt = compactTimestamp(left.recordedAt);
12652
+ const rightAt = compactTimestamp(right.recordedAt);
12653
+ if (leftAt !== rightAt)
12654
+ return leftAt > rightAt ? -1 : 1;
12655
+ return left.id < right.id ? -1 : left.id > right.id ? 1 : 0;
12656
+ }).slice(0, COMPACT_MAX_ITEMS).map((entry) => ({
12637
12657
  id: entry.id,
12638
12658
  purpose: entry.data.purpose,
12639
12659
  status: entry.data.response,
12640
12660
  digest: entry.data.digest,
12661
+ choice: compactDecisionChoice(entry) || `task.inspect taskId=${view.task.id} view=full; decision=${entry.id}`,
12641
12662
  references: entry.data.binding.contentRefs.slice(0, 1).map(compactReference)
12642
12663
  }));
12643
12664
  const methods = view.task.policy ? selectMethods(view.task.policy, view.capabilities).map((method) => ({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brainervirus/workit-opencode",
3
- "version": "2.0.1",
3
+ "version": "2.0.2",
4
4
  "private": false,
5
5
  "description": "Workit OpenCode plugin — native tools, adaptive policy, and fourteen method skills",
6
6
  "keywords": [
@@ -39,7 +39,7 @@
39
39
  "typecheck": "tsc --noEmit"
40
40
  },
41
41
  "dependencies": {
42
- "@brainervirus/workit-core": "^2.0.1"
42
+ "@brainervirus/workit-core": "^2.0.2"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@opencode-ai/plugin": "1.18.30",