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.
- package/dist/codex-chip-hooks.d.ts +2 -7
- package/dist/codex-chip-hooks.js +25 -159
- package/dist/codex-chip-hooks.js.map +1 -1
- package/dist/codex-steering.d.ts +2 -1
- package/dist/codex-steering.js +8 -5
- package/dist/codex-steering.js.map +1 -1
- package/dist/commands/codex-chip/bootstrap.d.ts +8 -0
- package/dist/commands/codex-chip/bootstrap.js +103 -0
- package/dist/commands/codex-chip/bootstrap.js.map +1 -0
- package/dist/commands/codex-chip/breakthrough-command.js +0 -7
- package/dist/commands/codex-chip/breakthrough-command.js.map +1 -1
- package/dist/commands/codex-chip/cleanup-command.js +1 -9
- package/dist/commands/codex-chip/cleanup-command.js.map +1 -1
- package/dist/commands/codex-chip/command.js +5 -63
- package/dist/commands/codex-chip/command.js.map +1 -1
- package/dist/commands/codex-chip/git.d.ts +0 -1
- package/dist/commands/codex-chip/git.js +0 -2
- package/dist/commands/codex-chip/git.js.map +1 -1
- package/dist/commands/codex-chip/goals.d.ts +9 -0
- package/dist/commands/codex-chip/goals.js +54 -7
- package/dist/commands/codex-chip/goals.js.map +1 -1
- package/dist/commands/codex-chip/help.d.ts +1 -1
- package/dist/commands/codex-chip/help.js +13 -24
- package/dist/commands/codex-chip/help.js.map +1 -1
- package/dist/commands/codex-chip/model.d.ts +2 -4
- package/dist/commands/codex-chip/model.js +1 -1
- package/dist/commands/codex-chip/model.js.map +1 -1
- package/dist/commands/codex-chip/naming.js +4 -10
- package/dist/commands/codex-chip/naming.js.map +1 -1
- package/dist/commands/codex-chip/native.js +11 -15
- package/dist/commands/codex-chip/native.js.map +1 -1
- package/dist/commands/codex-chip/prompt.d.ts +2 -1
- package/dist/commands/codex-chip/prompt.js +15 -59
- package/dist/commands/codex-chip/prompt.js.map +1 -1
- package/dist/commands/codex-chip/resume-command.js +0 -3
- package/dist/commands/codex-chip/resume-command.js.map +1 -1
- package/dist/commands/codex-chip/selection.d.ts +1 -1
- package/dist/commands/codex-chip/selection.js +15 -59
- package/dist/commands/codex-chip/selection.js.map +1 -1
- package/dist/commands/codex-chip/worker.js +60 -122
- package/dist/commands/codex-chip/worker.js.map +1 -1
- package/dist/commands/codex-delivery.d.ts +32 -7
- package/dist/commands/codex-delivery.js +76 -92
- package/dist/commands/codex-delivery.js.map +1 -1
- package/dist/commands/codex-startup.js +1 -1
- package/dist/commands/codex-startup.js.map +1 -1
- package/dist/commands/codex.js +36 -34
- package/dist/commands/codex.js.map +1 -1
- package/dist/commands/friction-reminder.d.ts +9 -9
- package/dist/commands/friction-reminder.js +12 -17
- package/dist/commands/friction-reminder.js.map +1 -1
- package/dist/commands/inbox-primer-reminder.js +3 -3
- package/dist/commands/inbox-primer-reminder.js.map +1 -1
- package/dist/commands/init.js +7 -5
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/load-primer-reminder.js +2 -2
- package/dist/commands/load-primer-reminder.js.map +1 -1
- package/dist/commands/load.js +28 -27
- package/dist/commands/load.js.map +1 -1
- package/dist/commands/mechanic-spawn.d.ts +10 -0
- package/dist/commands/mechanic-spawn.js +67 -0
- package/dist/commands/mechanic-spawn.js.map +1 -0
- package/dist/commands/mechanic.js +6 -0
- package/dist/commands/mechanic.js.map +1 -1
- package/dist/commands/opencode-chip-client.d.ts +8 -0
- package/dist/commands/opencode-chip-client.js +45 -0
- package/dist/commands/opencode-chip-client.js.map +1 -0
- package/dist/commands/opencode-chip-lifecycle.d.ts +2 -0
- package/dist/commands/opencode-chip-lifecycle.js +137 -0
- package/dist/commands/opencode-chip-lifecycle.js.map +1 -0
- package/dist/commands/opencode-chip-mission.d.ts +22 -0
- package/dist/commands/opencode-chip-mission.js +105 -0
- package/dist/commands/opencode-chip-mission.js.map +1 -0
- package/dist/commands/opencode-chip-store.d.ts +72 -0
- package/dist/commands/opencode-chip-store.js +141 -0
- package/dist/commands/opencode-chip-store.js.map +1 -0
- package/dist/commands/opencode-chip.d.ts +3 -0
- package/dist/commands/opencode-chip.js +488 -0
- package/dist/commands/opencode-chip.js.map +1 -0
- package/dist/commands/opencode-goals.d.ts +5 -0
- package/dist/commands/opencode-goals.js +83 -0
- package/dist/commands/opencode-goals.js.map +1 -0
- package/dist/hook.js +8 -3
- package/dist/hook.js.map +1 -1
- package/dist/index.js +11 -90
- package/dist/index.js.map +1 -1
- package/dist/opencode-plugin.bundle.js +9 -11
- package/package.json +1 -1
- package/skill/greprag/SKILL.md +2 -2
- package/skill/greprag/docs/codex-chip.md +20 -59
- package/skill/greprag/docs/setup.md +15 -21
- package/skill/templates/chip-bootloader.md +33 -91
- package/skill/templates/chip-leader-opencode.md +90 -75
- package/skill/templates/chip-leader.md +81 -221
- package/skill/templates/codex-chip-spawn.md +129 -173
- package/skill/templates/codex-subagent-spawn.md +32 -0
- package/dist/commands/codex-native-delivery.d.ts +0 -70
- package/dist/commands/codex-native-delivery.js +0 -285
- package/dist/commands/codex-native-delivery.js.map +0 -1
- package/skill/templates/reflex-chip.md +0 -58
- 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
|
|
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 (
|
|
1917
|
-
*
|
|
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);
|