greprag 5.60.3 → 5.60.5

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 (101) hide show
  1. package/dist/codex-chip-hooks.d.ts +2 -7
  2. package/dist/codex-chip-hooks.js +25 -159
  3. package/dist/codex-chip-hooks.js.map +1 -1
  4. package/dist/codex-steering.d.ts +2 -1
  5. package/dist/codex-steering.js +8 -5
  6. package/dist/codex-steering.js.map +1 -1
  7. package/dist/commands/codex-chip/bootstrap.d.ts +8 -0
  8. package/dist/commands/codex-chip/bootstrap.js +103 -0
  9. package/dist/commands/codex-chip/bootstrap.js.map +1 -0
  10. package/dist/commands/codex-chip/breakthrough-command.js +0 -7
  11. package/dist/commands/codex-chip/breakthrough-command.js.map +1 -1
  12. package/dist/commands/codex-chip/cleanup-command.js +1 -9
  13. package/dist/commands/codex-chip/cleanup-command.js.map +1 -1
  14. package/dist/commands/codex-chip/command.js +5 -63
  15. package/dist/commands/codex-chip/command.js.map +1 -1
  16. package/dist/commands/codex-chip/git.d.ts +0 -1
  17. package/dist/commands/codex-chip/git.js +0 -2
  18. package/dist/commands/codex-chip/git.js.map +1 -1
  19. package/dist/commands/codex-chip/goals.d.ts +9 -0
  20. package/dist/commands/codex-chip/goals.js +54 -7
  21. package/dist/commands/codex-chip/goals.js.map +1 -1
  22. package/dist/commands/codex-chip/help.d.ts +1 -1
  23. package/dist/commands/codex-chip/help.js +13 -24
  24. package/dist/commands/codex-chip/help.js.map +1 -1
  25. package/dist/commands/codex-chip/model.d.ts +2 -4
  26. package/dist/commands/codex-chip/model.js +1 -1
  27. package/dist/commands/codex-chip/model.js.map +1 -1
  28. package/dist/commands/codex-chip/naming.js +4 -10
  29. package/dist/commands/codex-chip/naming.js.map +1 -1
  30. package/dist/commands/codex-chip/native.js +11 -15
  31. package/dist/commands/codex-chip/native.js.map +1 -1
  32. package/dist/commands/codex-chip/prompt.d.ts +2 -1
  33. package/dist/commands/codex-chip/prompt.js +15 -59
  34. package/dist/commands/codex-chip/prompt.js.map +1 -1
  35. package/dist/commands/codex-chip/resume-command.js +0 -3
  36. package/dist/commands/codex-chip/resume-command.js.map +1 -1
  37. package/dist/commands/codex-chip/selection.d.ts +1 -1
  38. package/dist/commands/codex-chip/selection.js +15 -59
  39. package/dist/commands/codex-chip/selection.js.map +1 -1
  40. package/dist/commands/codex-chip/worker.js +60 -122
  41. package/dist/commands/codex-chip/worker.js.map +1 -1
  42. package/dist/commands/codex-delivery.d.ts +32 -7
  43. package/dist/commands/codex-delivery.js +76 -92
  44. package/dist/commands/codex-delivery.js.map +1 -1
  45. package/dist/commands/codex-startup.js +1 -1
  46. package/dist/commands/codex-startup.js.map +1 -1
  47. package/dist/commands/codex.js +36 -34
  48. package/dist/commands/codex.js.map +1 -1
  49. package/dist/commands/friction-reminder.d.ts +9 -9
  50. package/dist/commands/friction-reminder.js +12 -17
  51. package/dist/commands/friction-reminder.js.map +1 -1
  52. package/dist/commands/inbox-primer-reminder.js +3 -3
  53. package/dist/commands/inbox-primer-reminder.js.map +1 -1
  54. package/dist/commands/init.js +7 -5
  55. package/dist/commands/init.js.map +1 -1
  56. package/dist/commands/load-primer-reminder.js +2 -2
  57. package/dist/commands/load-primer-reminder.js.map +1 -1
  58. package/dist/commands/load.js +28 -27
  59. package/dist/commands/load.js.map +1 -1
  60. package/dist/commands/mechanic-spawn.d.ts +10 -0
  61. package/dist/commands/mechanic-spawn.js +67 -0
  62. package/dist/commands/mechanic-spawn.js.map +1 -0
  63. package/dist/commands/mechanic.js +6 -0
  64. package/dist/commands/mechanic.js.map +1 -1
  65. package/dist/commands/opencode-chip-client.d.ts +8 -0
  66. package/dist/commands/opencode-chip-client.js +45 -0
  67. package/dist/commands/opencode-chip-client.js.map +1 -0
  68. package/dist/commands/opencode-chip-lifecycle.d.ts +2 -0
  69. package/dist/commands/opencode-chip-lifecycle.js +137 -0
  70. package/dist/commands/opencode-chip-lifecycle.js.map +1 -0
  71. package/dist/commands/opencode-chip-mission.d.ts +22 -0
  72. package/dist/commands/opencode-chip-mission.js +105 -0
  73. package/dist/commands/opencode-chip-mission.js.map +1 -0
  74. package/dist/commands/opencode-chip-store.d.ts +72 -0
  75. package/dist/commands/opencode-chip-store.js +141 -0
  76. package/dist/commands/opencode-chip-store.js.map +1 -0
  77. package/dist/commands/opencode-chip.d.ts +3 -0
  78. package/dist/commands/opencode-chip.js +488 -0
  79. package/dist/commands/opencode-chip.js.map +1 -0
  80. package/dist/commands/opencode-goals.d.ts +5 -0
  81. package/dist/commands/opencode-goals.js +83 -0
  82. package/dist/commands/opencode-goals.js.map +1 -0
  83. package/dist/hook.js +8 -3
  84. package/dist/hook.js.map +1 -1
  85. package/dist/index.js +11 -90
  86. package/dist/index.js.map +1 -1
  87. package/dist/opencode-plugin.bundle.js +9 -11
  88. package/package.json +1 -1
  89. package/skill/greprag/SKILL.md +2 -2
  90. package/skill/greprag/docs/codex-chip.md +20 -59
  91. package/skill/greprag/docs/setup.md +15 -21
  92. package/skill/templates/chip-bootloader.md +33 -91
  93. package/skill/templates/chip-leader-opencode.md +90 -75
  94. package/skill/templates/chip-leader.md +81 -221
  95. package/skill/templates/codex-chip-spawn.md +129 -173
  96. package/skill/templates/codex-subagent-spawn.md +32 -0
  97. package/dist/commands/codex-native-delivery.d.ts +0 -70
  98. package/dist/commands/codex-native-delivery.js +0 -285
  99. package/dist/commands/codex-native-delivery.js.map +0 -1
  100. package/skill/templates/reflex-chip.md +0 -58
  101. package/skill/templates/workshop-chip.md +0 -46
@@ -0,0 +1,488 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.listRecords = exports.findRecord = exports.activeRecords = exports.buildMission = exports.parseModel = exports.roleTitle = void 0;
37
+ exports.runOpencodeChip = runOpencodeChip;
38
+ /**
39
+ * greprag opencode chip — OpenCode Desktop chip control plane.
40
+ *
41
+ * Two spawn paths (both first-class):
42
+ * A) Quick chip — initiator is LEAD: leader goal in this session → Chip A/B.
43
+ * B) Mission — PLANNER → LEAD chip → nested leader goal → Chip A/B.
44
+ * Workers always letter-titled. Goals: ~/.greprag/chip-goals; records: opencode-chips.
45
+ */
46
+ const crypto = __importStar(require("crypto"));
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ const project_anchor_1 = require("../project-anchor");
50
+ const naming_1 = require("./codex-chip/naming");
51
+ const opencode_goals_1 = require("./opencode-goals");
52
+ const goals_1 = require("./codex-chip/goals");
53
+ const opencode_chip_client_1 = require("./opencode-chip-client");
54
+ const opencode_chip_mission_1 = require("./opencode-chip-mission");
55
+ const opencode_chip_lifecycle_1 = require("./opencode-chip-lifecycle");
56
+ const opencode_chip_store_1 = require("./opencode-chip-store");
57
+ function printHelp() {
58
+ console.log(`greprag opencode chip — OpenCode Desktop chip spawn
59
+
60
+ Paths:
61
+ A) Quick (default) initiator = LEAD
62
+ goal create --owner-role leader --owner-session <this-8hex>
63
+ spawn --role worker --label A --goal-id … --parent-greprag <this-8hex>
64
+ B) Mission (multi-chip / seams)
65
+ PLANNER goal → spawn --role leader → nested leader goal → bind-lead → Chip A/B
66
+
67
+ Subcommands:
68
+ goal create|accept|status Mission goals (shared chip-goals store)
69
+ spawn Create child session + optional prompt_async
70
+ report Record DONE evidence onto a goal
71
+ bind-lead LEAD adopts nested mission goal (path B only)
72
+ status | list | handoff
73
+ close | archive Accept-gated close + DELETE session
74
+ respawn Archive old → spawn replacement under same goal
75
+ mechanic-dormant Set MECHANIC chip dormant (incident closed)
76
+
77
+ Worker titles ALWAYS --label A|B|C… → "Chip A: <purview>" (solo = A).
78
+ --model provider/model required. Auth: OPENCODE_SERVER_USERNAME/PASSWORD.
79
+ `);
80
+ }
81
+ async function goalCreate(args) {
82
+ const objective = (0, opencode_chip_mission_1.flag)(args, '--objective');
83
+ const finalState = (0, opencode_chip_mission_1.flag)(args, '--final-state');
84
+ const ownerSession = (0, opencode_chip_mission_1.flag)(args, '--owner-session');
85
+ // Default leader = quick path (initiator-as-LEAD). Use --owner-role planner only for multi-chip missions.
86
+ const ownerRole = (0, opencode_chip_mission_1.flag)(args, '--owner-role') || 'leader';
87
+ const criteria = (0, goals_1.parseGoalCriteria)((0, opencode_chip_mission_1.flags)(args, '--criterion'));
88
+ if (!objective || !finalState || !ownerSession) {
89
+ throw new Error('goal create requires --objective, --final-state, --owner-session, and --criterion id:text');
90
+ }
91
+ if (!['planner', 'leader'].includes(ownerRole)) {
92
+ throw new Error('--owner-role must be planner or leader (default leader = quick chip path).');
93
+ }
94
+ const directory = path.resolve((0, opencode_chip_mission_1.flag)(args, '--directory') || process.cwd());
95
+ const anchor = (0, project_anchor_1.readAnchor)(directory);
96
+ const goal = (0, goals_1.createMissionGoal)({
97
+ projectId: anchor.projectId,
98
+ ownerSessionId: ownerSession,
99
+ objective,
100
+ finalState,
101
+ criteria,
102
+ parentGoalId: (0, opencode_chip_mission_1.flag)(args, '--parent-goal-id'),
103
+ ownerRole,
104
+ });
105
+ console.log(JSON.stringify(goal, null, 2));
106
+ }
107
+ async function goalAccept(args) {
108
+ const id = args[0] || (0, opencode_chip_mission_1.flag)(args, '--id') || (0, opencode_chip_mission_1.flag)(args, '--goal-id');
109
+ const owner = (0, opencode_chip_mission_1.flag)(args, '--owner-session');
110
+ const summary = (0, opencode_chip_mission_1.flag)(args, '--summary');
111
+ if (!id || !owner || !summary) {
112
+ throw new Error('goal accept requires <goal-id> --owner-session <8hex|ses> --summary "…"');
113
+ }
114
+ // Optional inline evidence before accept
115
+ const evidenceArgs = (0, opencode_chip_mission_1.flags)(args, '--evidence');
116
+ if (evidenceArgs.length) {
117
+ const parsed = (0, goals_1.parseReportEvidence)(evidenceArgs, ((0, goals_1.readMissionGoal)(id)?.criteria || []).map((c) => c.id));
118
+ (0, opencode_goals_1.recordOpencodeGoalEvidence)(id, `goal-owner:${id}`, parsed, (0, opencode_chip_mission_1.flags)(args, '--check'));
119
+ }
120
+ const goal = (0, opencode_goals_1.acceptOpencodeMissionGoal)(id, owner, summary, { force: args.includes('--force') });
121
+ console.log(JSON.stringify(goal, null, 2));
122
+ }
123
+ async function goalStatus(args) {
124
+ const id = args[0] || (0, opencode_chip_mission_1.flag)(args, '--id');
125
+ if (!id)
126
+ throw new Error('goal status requires goal id');
127
+ const goal = (0, goals_1.readMissionGoal)(id);
128
+ if (!goal)
129
+ throw new Error(`Unknown mission goal: ${id}`);
130
+ console.log(JSON.stringify(goal, null, 2));
131
+ }
132
+ async function spawnChip(args) {
133
+ const role = (0, opencode_chip_mission_1.parseRole)(args);
134
+ const titleFlag = (0, opencode_chip_mission_1.flag)(args, '--title');
135
+ if (!titleFlag)
136
+ throw new Error('--title is required (human purview, e.g. "Auth Middleware").');
137
+ const labelFlag = (0, opencode_chip_mission_1.flag)(args, '--label');
138
+ if (role === 'worker' && !labelFlag) {
139
+ throw new Error('Workers require --label A|B|C… (solo chips use --label A → "Chip A: <purview>").');
140
+ }
141
+ const multiChip = args.includes('--multi-chip') || role === 'worker';
142
+ const name = (0, opencode_chip_mission_1.flag)(args, '--name') || (0, opencode_chip_mission_1.slugify)(titleFlag);
143
+ const naming = (0, naming_1.resolveChipNaming)(name, titleFlag, labelFlag, role, multiChip);
144
+ const title = (0, opencode_chip_mission_1.roleTitle)(role, naming.displayName, naming.label);
145
+ const goalId = (0, opencode_chip_mission_1.flag)(args, '--goal-id');
146
+ if (!goalId)
147
+ throw new Error('Every chip requires --goal-id. Create one with `greprag opencode chip goal create`.');
148
+ const covers = (0, opencode_chip_mission_1.flags)(args, '--covers');
149
+ const parentOc = (0, opencode_chip_mission_1.flag)(args, '--parent-session');
150
+ const parentGreprag = (0, opencode_chip_mission_1.flag)(args, '--parent-greprag');
151
+ if (!parentOc)
152
+ throw new Error('--parent-session (OpenCode ses_…) is required.');
153
+ if (!parentGreprag || !/^[0-9a-f]{8}$/i.test(parentGreprag)) {
154
+ throw new Error('--parent-greprag must be the parent greprag 8-hex session id.');
155
+ }
156
+ const modelSpec = (0, opencode_chip_mission_1.flag)(args, '--model');
157
+ if (!modelSpec)
158
+ throw new Error('--model provider/model is required (no silent default).');
159
+ const model = (0, opencode_chip_mission_1.parseModel)(modelSpec);
160
+ const directory = path.resolve((0, opencode_chip_mission_1.flag)(args, '--directory') || process.cwd());
161
+ const anchor = (0, project_anchor_1.readAnchor)(directory);
162
+ (0, goals_1.requireGoalForSpawn)(goalId, anchor.projectId, parentGreprag, covers, role);
163
+ let task = (0, opencode_chip_mission_1.flag)(args, '--task') || '';
164
+ const taskFile = (0, opencode_chip_mission_1.flag)(args, '--task-file');
165
+ if (taskFile)
166
+ task = fs.readFileSync(taskFile, 'utf-8');
167
+ if (task.trim().length < 12)
168
+ throw new Error('--task must be a concrete mission (≥12 chars), or pass --task-file.');
169
+ // Unified execution contract: no forced read-only; the goal defines constraints.
170
+ const baseUrl = (0, opencode_chip_client_1.resolveBaseUrl)((0, opencode_chip_mission_1.flag)(args, '--opencode-url'));
171
+ const id = crypto.randomUUID();
172
+ const createBody = { title };
173
+ if (!args.includes('--top-level'))
174
+ createBody.parentID = parentOc;
175
+ const created = await (0, opencode_chip_client_1.ocFetch)(baseUrl, 'POST', '/session', { directory }, createBody);
176
+ if (!created.ok || !created.data?.id) {
177
+ throw new Error(`OpenCode session create failed (${created.status}): ${created.text}`);
178
+ }
179
+ const childId = created.data.id;
180
+ if (created.data.title !== title) {
181
+ await (0, opencode_chip_client_1.ocFetch)(baseUrl, 'PATCH', `/session/${childId}`, { directory }, { title });
182
+ }
183
+ // Stable greprag-facing 8-hex for this chip (LEAD uses it as nested-goal owner + worker parent-greprag).
184
+ const childGreprag = (0, opencode_chip_mission_1.flag)(args, '--child-greprag') ||
185
+ crypto.createHash('sha256').update(id).digest('hex').slice(0, 8);
186
+ const mission = (0, opencode_chip_mission_1.buildMission)({
187
+ title,
188
+ role,
189
+ task: task.trim(),
190
+ parentGreprag,
191
+ goalId,
192
+ covers,
193
+ });
194
+ const record = {
195
+ version: 1,
196
+ id,
197
+ name: naming.name,
198
+ title,
199
+ role,
200
+ label: naming.label,
201
+ goalId,
202
+ covers,
203
+ task: task.trim(),
204
+ projectId: anchor.projectId,
205
+ directory,
206
+ parent: { opencodeSessionId: parentOc, grepragSessionId: parentGreprag },
207
+ child: { opencodeSessionId: childId, grepragSessionId: childGreprag },
208
+ model,
209
+ state: 'prepared',
210
+ multiChip: args.includes('--multi-chip'),
211
+ createdAt: new Date().toISOString(),
212
+ };
213
+ // LEAD's goalId is the planner goal it was spawned under; missionGoalId set via bind-lead.
214
+ (0, opencode_chip_store_1.assertNoActiveNamingConflicts)(record);
215
+ const handoff = {
216
+ kind: 'greprag-opencode-chip-v1',
217
+ chipId: id,
218
+ title,
219
+ role,
220
+ goalId,
221
+ covers,
222
+ parent: record.parent,
223
+ child: record.child,
224
+ model,
225
+ directory,
226
+ opencodeUrl: baseUrl,
227
+ mission,
228
+ create: { id: childId, title, parentID: created.data.parentID || null },
229
+ childGrepragSessionId: childGreprag,
230
+ dispatch: args.includes('--dispatch')
231
+ ? {
232
+ method: 'POST',
233
+ path: `/session/${childId}/prompt_async`,
234
+ body: { model, parts: [{ type: 'text', text: mission }] },
235
+ }
236
+ : null,
237
+ surface: {
238
+ note: 'Desktop does not auto-focus API-created sessions; open session list or cycle children.',
239
+ },
240
+ };
241
+ if (args.includes('--dispatch')) {
242
+ const prompt = await (0, opencode_chip_client_1.ocFetch)(baseUrl, 'POST', `/session/${childId}/prompt_async`, { directory }, { model, parts: [{ type: 'text', text: mission }] });
243
+ if (!prompt.ok) {
244
+ record.state = 'failed';
245
+ record.error = `prompt_async ${prompt.status}: ${prompt.text}`;
246
+ (0, opencode_chip_store_1.writeRecord)(record);
247
+ throw new Error(record.error);
248
+ }
249
+ record.state = 'dispatched';
250
+ record.dispatchedAt = new Date().toISOString();
251
+ await (0, opencode_chip_client_1.ocFetch)(baseUrl, 'POST', '/tui/show-toast', { directory }, {
252
+ title: 'Chip spawned',
253
+ message: `${title}\n${childId}`,
254
+ variant: 'info',
255
+ duration: 8000,
256
+ }).catch(() => null);
257
+ await (0, opencode_chip_client_1.ocFetch)(baseUrl, 'POST', '/tui/open-sessions', { directory }, {}).catch(() => null);
258
+ }
259
+ (0, opencode_chip_store_1.writeRecord)(record);
260
+ console.log(JSON.stringify(handoff, null, 2));
261
+ if (!args.includes('--json')) {
262
+ console.log(`\n[opencode-chip] ${record.state} ${title}`);
263
+ console.log(`[opencode-chip] child=${childId} chipId=${id}`);
264
+ }
265
+ }
266
+ /** LEAD adopts a nested leader-owned goal as its dispatch goal. */
267
+ async function bindLead(args) {
268
+ const chipRef = args[0] || (0, opencode_chip_mission_1.flag)(args, '--chip');
269
+ const goalId = (0, opencode_chip_mission_1.flag)(args, '--goal-id');
270
+ const owner = (0, opencode_chip_mission_1.flag)(args, '--owner-session');
271
+ if (!chipRef || !goalId || !owner) {
272
+ throw new Error('bind-lead requires <chip> --goal-id <nested> --owner-session <lead-id>');
273
+ }
274
+ const record = (0, opencode_chip_store_1.findRecord)(chipRef);
275
+ if (!record)
276
+ throw new Error(`Unknown opencode chip: ${chipRef}`);
277
+ if (record.role !== 'leader')
278
+ throw new Error('Only a LEAD chip can bind a nested mission goal.');
279
+ const goal = (0, goals_1.readMissionGoal)(goalId);
280
+ if (!goal || goal.ownerRole !== 'leader' || goal.state !== 'active') {
281
+ throw new Error('bind-lead requires an active LEAD-owned nested goal.');
282
+ }
283
+ if (goal.ownerSessionId !== owner) {
284
+ throw new Error('Nested goal owner-session must match --owner-session.');
285
+ }
286
+ if (goal.parentGoalId !== record.goalId) {
287
+ throw new Error('Nested goal parentGoalId must equal the LEAD chip planner goalId.');
288
+ }
289
+ const next = {
290
+ ...record,
291
+ missionGoalId: goalId,
292
+ child: {
293
+ ...record.child,
294
+ grepragSessionId: owner.length === 8 ? owner : record.child.grepragSessionId,
295
+ },
296
+ };
297
+ (0, opencode_chip_store_1.writeRecord)(next);
298
+ console.log(JSON.stringify({ ok: true, chipId: next.id, missionGoalId: goalId, title: next.title }, null, 2));
299
+ }
300
+ async function reportChip(args) {
301
+ const chipRef = args[0] || (0, opencode_chip_mission_1.flag)(args, '--chip');
302
+ const summary = (0, opencode_chip_mission_1.flag)(args, '--summary');
303
+ if (!chipRef || !summary)
304
+ throw new Error('report requires <chip> --summary "…" and --evidence id:text');
305
+ const record = (0, opencode_chip_store_1.findRecord)(chipRef);
306
+ if (!record)
307
+ throw new Error(`Unknown opencode chip: ${chipRef}`);
308
+ const evidenceArgs = (0, opencode_chip_mission_1.flags)(args, '--evidence');
309
+ if (!evidenceArgs.length)
310
+ throw new Error('report requires at least one --evidence criterionId:text');
311
+ const evidence = (0, goals_1.parseReportEvidence)(evidenceArgs, record.covers);
312
+ const checks = (0, opencode_chip_mission_1.flags)(args, '--check');
313
+ (0, opencode_goals_1.recordOpencodeGoalEvidence)(record.goalId, record.id, evidence, checks);
314
+ const next = {
315
+ ...record,
316
+ report: { summary, evidence, checks, at: new Date().toISOString() },
317
+ };
318
+ (0, opencode_chip_store_1.writeRecord)(next);
319
+ console.log(JSON.stringify({ ok: true, chipId: next.id, goalId: next.goalId, evidence }, null, 2));
320
+ }
321
+ async function statusChip(args) {
322
+ const id = args[0] || (0, opencode_chip_mission_1.flag)(args, '--id');
323
+ if (!id)
324
+ throw new Error('status requires chip id (or ses_… / title)');
325
+ const record = (0, opencode_chip_store_1.findRecord)(id);
326
+ if (!record)
327
+ throw new Error(`Unknown opencode chip: ${id}`);
328
+ console.log(JSON.stringify(record, null, 2));
329
+ }
330
+ async function listChips(args) {
331
+ const all = args.includes('--all');
332
+ const rows = (0, opencode_chip_store_1.listRecords)()
333
+ .filter((r) => all || r.state === 'prepared' || r.state === 'dispatched')
334
+ .sort((a, b) => b.createdAt.localeCompare(a.createdAt));
335
+ if (args.includes('--json')) {
336
+ console.log(JSON.stringify(rows, null, 2));
337
+ return;
338
+ }
339
+ if (!rows.length) {
340
+ console.log(all ? 'No opencode chips recorded.' : 'No active opencode chips.');
341
+ return;
342
+ }
343
+ for (const r of rows) {
344
+ console.log(`${r.state.padEnd(10)} ${r.title.padEnd(40)} ${r.child.opencodeSessionId.slice(0, 24)}… ${r.id.slice(0, 8)}`);
345
+ }
346
+ }
347
+ async function closeChip(args) {
348
+ const id = args[0] || (0, opencode_chip_mission_1.flag)(args, '--id');
349
+ if (!id)
350
+ throw new Error('close requires chip id (or ses_… / title)');
351
+ const record = (0, opencode_chip_store_1.findRecord)(id);
352
+ if (!record)
353
+ throw new Error(`Unknown opencode chip: ${id}`);
354
+ if (record.state === 'closed' || record.state === 'archived') {
355
+ console.log(JSON.stringify({ ok: true, already: true, record }, null, 2));
356
+ return;
357
+ }
358
+ if (record.state === 'failed' && !args.includes('--force')) {
359
+ throw new Error(`Chip is failed; pass --force to close/archive anyway (${record.error || 'no error'}).`);
360
+ }
361
+ // Accept gate: mission goal must be accepted (or --force / --keep-open-goal).
362
+ const goal = (0, goals_1.readMissionGoal)(record.goalId);
363
+ if (goal && goal.state !== 'accepted' && !args.includes('--force') && !args.includes('--keep-open-goal')) {
364
+ throw new Error(`Mission goal ${record.goalId.slice(0, 8)} is ${goal.state || 'missing'}; ` +
365
+ `accept it first (\`greprag opencode chip goal accept\`) or pass --force / --keep-open-goal.`);
366
+ }
367
+ const summary = (0, opencode_chip_mission_1.flag)(args, '--summary') || 'closed by parent';
368
+ const keepSession = args.includes('--keep-session');
369
+ const directory = (0, opencode_chip_mission_1.flag)(args, '--directory') || record.directory;
370
+ const baseUrl = (0, opencode_chip_client_1.resolveBaseUrl)((0, opencode_chip_mission_1.flag)(args, '--opencode-url'));
371
+ let sessionDeleted = false;
372
+ let deleteError;
373
+ if (!keepSession && record.child.opencodeSessionId) {
374
+ await (0, opencode_chip_client_1.ocFetch)(baseUrl, 'POST', `/session/${record.child.opencodeSessionId}/abort`, {
375
+ directory,
376
+ }).catch(() => null);
377
+ const del = await (0, opencode_chip_client_1.ocFetch)(baseUrl, 'DELETE', `/session/${record.child.opencodeSessionId}`, {
378
+ directory,
379
+ });
380
+ if (del.ok || del.status === 404)
381
+ sessionDeleted = true;
382
+ else {
383
+ deleteError = `session delete ${del.status}: ${del.text}`;
384
+ if (!args.includes('--force')) {
385
+ throw new Error(`${deleteError}. Pass --force to mark closed without deleting the session.`);
386
+ }
387
+ }
388
+ }
389
+ const next = {
390
+ ...record,
391
+ state: 'archived',
392
+ closedAt: new Date().toISOString(),
393
+ closeSummary: summary,
394
+ sessionDeleted,
395
+ error: deleteError || record.error,
396
+ };
397
+ (0, opencode_chip_store_1.writeRecord)(next);
398
+ const out = {
399
+ ok: true,
400
+ chipId: next.id,
401
+ title: next.title,
402
+ state: next.state,
403
+ sessionDeleted,
404
+ childSessionId: next.child.opencodeSessionId,
405
+ goalState: goal?.state || null,
406
+ summary,
407
+ deleteError: deleteError || null,
408
+ };
409
+ console.log(JSON.stringify(out, null, 2));
410
+ if (!args.includes('--json')) {
411
+ console.log(`[opencode-chip] archived ${next.title}` +
412
+ (sessionDeleted ? ' (session deleted)' : keepSession ? ' (session kept)' : ''));
413
+ }
414
+ }
415
+ async function handoffChip(args) {
416
+ const id = args[0] || (0, opencode_chip_mission_1.flag)(args, '--id');
417
+ if (!id)
418
+ throw new Error('handoff requires chip id');
419
+ const record = (0, opencode_chip_store_1.findRecord)(id);
420
+ if (!record)
421
+ throw new Error(`Unknown opencode chip: ${id}`);
422
+ const mission = (0, opencode_chip_mission_1.buildMission)({
423
+ title: record.title,
424
+ role: record.role,
425
+ task: record.task,
426
+ parentGreprag: record.parent.grepragSessionId,
427
+ goalId: record.goalId,
428
+ covers: record.covers,
429
+ });
430
+ console.log(JSON.stringify({
431
+ kind: 'greprag-opencode-chip-v1',
432
+ chipId: record.id,
433
+ title: record.title,
434
+ child: record.child,
435
+ parent: record.parent,
436
+ model: record.model,
437
+ mission,
438
+ state: record.state,
439
+ missionGoalId: record.missionGoalId || null,
440
+ }, null, 2));
441
+ }
442
+ // Lifecycle commands (mechanic-dormant, respawn) extracted to opencode-chip-lifecycle.ts
443
+ async function runOpencodeChip(args) {
444
+ const sub = args[0];
445
+ if (!sub || sub === '--help' || sub === '-h' || sub === 'help') {
446
+ printHelp();
447
+ return;
448
+ }
449
+ if (sub === 'goal') {
450
+ const gsub = args[1];
451
+ if (gsub === 'create')
452
+ return goalCreate(args.slice(2));
453
+ if (gsub === 'accept')
454
+ return goalAccept(args.slice(2));
455
+ if (gsub === 'status')
456
+ return goalStatus(args.slice(2));
457
+ throw new Error('Usage: greprag opencode chip goal create|accept|status ...');
458
+ }
459
+ if (sub === 'spawn')
460
+ return spawnChip(args.slice(1));
461
+ if (sub === 'report')
462
+ return reportChip(args.slice(1));
463
+ if (sub === 'bind-lead')
464
+ return bindLead(args.slice(1));
465
+ if (sub === 'status')
466
+ return statusChip(args.slice(1));
467
+ if (sub === 'list')
468
+ return listChips(args.slice(1));
469
+ if (sub === 'close' || sub === 'archive')
470
+ return closeChip(args.slice(1));
471
+ if (sub === 'handoff')
472
+ return handoffChip(args.slice(1));
473
+ if (sub === 'respawn')
474
+ return (0, opencode_chip_lifecycle_1.respawnChip)(args.slice(1));
475
+ if (sub === 'mechanic-dormant')
476
+ return (0, opencode_chip_lifecycle_1.mechanicDormant)(args.slice(1));
477
+ throw new Error(`Unknown opencode chip subcommand: ${sub}. Run greprag opencode chip --help.`);
478
+ }
479
+ // re-export for tests
480
+ var opencode_chip_mission_2 = require("./opencode-chip-mission");
481
+ Object.defineProperty(exports, "roleTitle", { enumerable: true, get: function () { return opencode_chip_mission_2.roleTitle; } });
482
+ Object.defineProperty(exports, "parseModel", { enumerable: true, get: function () { return opencode_chip_mission_2.parseModel; } });
483
+ Object.defineProperty(exports, "buildMission", { enumerable: true, get: function () { return opencode_chip_mission_2.buildMission; } });
484
+ var opencode_chip_store_2 = require("./opencode-chip-store");
485
+ Object.defineProperty(exports, "activeRecords", { enumerable: true, get: function () { return opencode_chip_store_2.activeRecords; } });
486
+ Object.defineProperty(exports, "findRecord", { enumerable: true, get: function () { return opencode_chip_store_2.findRecord; } });
487
+ Object.defineProperty(exports, "listRecords", { enumerable: true, get: function () { return opencode_chip_store_2.listRecords; } });
488
+ //# sourceMappingURL=opencode-chip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-chip.js","sourceRoot":"","sources":["../../src/commands/opencode-chip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { MissionGoal } from './codex-chip/goals';
2
+ export declare function acceptOpencodeMissionGoal(id: string, ownerSessionId: string, summary: string, opts?: {
3
+ force?: boolean;
4
+ }): MissionGoal;
5
+ export declare function recordOpencodeGoalEvidence(goalId: string, chipId: string, evidence: Record<string, string>, checks?: string[]): MissionGoal;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.acceptOpencodeMissionGoal = acceptOpencodeMissionGoal;
4
+ exports.recordOpencodeGoalEvidence = recordOpencodeGoalEvidence;
5
+ const goals_1 = require("./codex-chip/goals");
6
+ const store_1 = require("./codex-chip/store");
7
+ function acceptOpencodeMissionGoal(id, ownerSessionId, summary, opts = {}) {
8
+ const goal = (0, goals_1.readMissionGoal)(id);
9
+ if (!goal)
10
+ throw new Error(`Unknown mission goal: ${id}.`);
11
+ (0, goals_1.meaningful)(summary, 'Acceptance summary');
12
+ return (0, store_1.withProjectChipLock)(goal.projectId, () => {
13
+ const current = (0, goals_1.readMissionGoal)(id);
14
+ if (current.ownerSessionId !== ownerSessionId) {
15
+ throw new Error('Only the recorded goal owner session may accept completion.');
16
+ }
17
+ if (current.state !== 'active')
18
+ throw new Error(`Mission goal is ${current.state}; expected active.`);
19
+ const treeIds = new Set((0, goals_1.goalTreeIds)(id));
20
+ const nested = (0, goals_1.listMissionGoals)().filter((item) => treeIds.has(item.id) && item.id !== id);
21
+ const incompleteNested = nested.filter((item) => item.state !== 'accepted');
22
+ if (incompleteNested.length) {
23
+ throw new Error(`Nested mission goals must be accepted before parent acceptance: ${incompleteNested
24
+ .map((item) => item.id.slice(0, 8))
25
+ .join(', ')}.`);
26
+ }
27
+ const missing = current.criteria
28
+ .filter((item) => !(current.evidence[item.id] || []).length)
29
+ .map((item) => item.id);
30
+ if (missing.length && !opts.force) {
31
+ throw new Error(`Mission goal lacks evidence for: ${missing.join(', ')}. ` +
32
+ `Record via \`greprag opencode chip report\` or \`goal accept --evidence id:text\`.`);
33
+ }
34
+ if (!opts.force) {
35
+ try {
36
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
37
+ const oc = require('./opencode-chip-store');
38
+ const mechChips = oc.activeRecords().filter((c) => c.role === 'mechanic' && c.goalId === current.id);
39
+ const stuck = mechChips.filter((c) => c.mechanic && c.mechanic.state !== 'dormant' && c.mechanic.state !== 'terminal');
40
+ if (stuck.length) {
41
+ throw new Error(`MECHANIC chips must be dormant/terminal before goal acceptance: ` +
42
+ `${stuck.map((c) => c.mechanic?.summary || 'open').join(', ')}. Pass --force to override.`);
43
+ }
44
+ }
45
+ catch { /* opencode-chip-store unavailable */ }
46
+ }
47
+ const now = new Date().toISOString();
48
+ current.state = 'accepted';
49
+ current.acceptedAt = now;
50
+ current.acceptedBy = ownerSessionId;
51
+ current.acceptanceSummary = summary.trim();
52
+ current.updatedAt = now;
53
+ (0, goals_1.writeMissionGoal)(current);
54
+ return current;
55
+ });
56
+ }
57
+ function recordOpencodeGoalEvidence(goalId, chipId, evidence, checks = []) {
58
+ const goal = (0, goals_1.readMissionGoal)(goalId);
59
+ if (!goal || goal.state !== 'active')
60
+ throw new Error('Mission goal is unavailable for report evidence.');
61
+ return (0, store_1.withProjectChipLock)(goal.projectId, () => {
62
+ const current = (0, goals_1.readMissionGoal)(goalId);
63
+ const now = new Date().toISOString();
64
+ for (const [criterion, text] of Object.entries(evidence)) {
65
+ if (!current.criteria.some((c) => c.id === criterion)) {
66
+ throw new Error(`Unknown goal criterion: ${criterion}.`);
67
+ }
68
+ const prior = (current.evidence[criterion] || []).filter((item) => item.chipId !== chipId);
69
+ prior.push({
70
+ chipId,
71
+ text: (0, goals_1.meaningful)(text, `Evidence ${criterion}`),
72
+ commit: 'opencode',
73
+ checks,
74
+ at: now,
75
+ });
76
+ current.evidence[criterion] = prior;
77
+ }
78
+ current.updatedAt = now;
79
+ (0, goals_1.writeMissionGoal)(current);
80
+ return current;
81
+ });
82
+ }
83
+ //# sourceMappingURL=opencode-goals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-goals.js","sourceRoot":"","sources":["../../src/commands/opencode-goals.ts"],"names":[],"mappings":"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"}
package/dist/hook.js CHANGED
@@ -1875,7 +1875,12 @@ async function notify(input, source = 'claude-code', chipContext) {
1875
1875
  }
1876
1876
  catch { /* fail-open */ }
1877
1877
  if (source === 'codex') {
1878
- const context = await (0, codex_steering_1.buildCodexInboxSteering)(input, cfg);
1878
+ const liveMessageId = typeof input.prompt === 'string'
1879
+ ? input.prompt.match(/^\[GrepRAG live (?:inbox|mechanic) message\]\r?\nMessage id: ([^\s]+)/)?.[1]
1880
+ : undefined;
1881
+ const context = await (0, codex_steering_1.buildCodexInboxSteering)(input, cfg, {
1882
+ excludeMessageIds: liveMessageId ? [liveMessageId] : [],
1883
+ });
1879
1884
  const reminders = await injectReminders(input, cfg, short, 'codex');
1880
1885
  const parts = [chipContext, context, reminders].filter((p) => !!p);
1881
1886
  if (parts.length)
@@ -1913,8 +1918,8 @@ function frictionStatsPath(projectId) {
1913
1918
  }
1914
1919
  /** Fire-counter I/O (the adherence DENOMINATOR). Reads the prior stats, tallies one
1915
1920
  * fire via the PURE tallyFrictionFire, writes them back. Fully best-effort: a miss
1916
- * never blocks the turn. The numerator (reflex chips actually spawned) lands via
1917
- * tallyReflexSpawn from the spawn path — see the report's Measurement note. */
1921
+ * never blocks the turn. The numerator (Mechanic Chips actually spawned) lands
1922
+ * via tallyMechanicSpawn from the spawn path — see the report's Measurement note. */
1918
1923
  function recordFrictionFire(projectId, tier, turnCount) {
1919
1924
  try {
1920
1925
  const file = frictionStatsPath(projectId);