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
|
@@ -3,7 +3,7 @@ export interface ChipHookInput extends CodexHookEventInput {
|
|
|
3
3
|
hook_event_name?: string;
|
|
4
4
|
stop_hook_active?: boolean;
|
|
5
5
|
}
|
|
6
|
-
interface
|
|
6
|
+
export interface ChipHookOutput {
|
|
7
7
|
hookSpecificOutput: {
|
|
8
8
|
hookEventName: string;
|
|
9
9
|
additionalContext?: string;
|
|
@@ -11,10 +11,5 @@ interface ChipContextHookOutput {
|
|
|
11
11
|
permissionDecisionReason?: string;
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
-
|
|
15
|
-
decision: 'block';
|
|
16
|
-
reason: string;
|
|
17
|
-
}
|
|
18
|
-
export type ChipHookOutput = ChipContextHookOutput | ChipStopHookOutput;
|
|
14
|
+
export type ChipHookResult = ChipHookOutput;
|
|
19
15
|
export declare function evaluateCodexChipHook(input: ChipHookInput): ChipHookOutput | null;
|
|
20
|
-
export {};
|
package/dist/codex-chip-hooks.js
CHANGED
|
@@ -34,42 +34,37 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.evaluateCodexChipHook = evaluateCodexChipHook;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
37
|
const path = __importStar(require("path"));
|
|
39
38
|
const store_1 = require("./commands/codex-chip/store");
|
|
40
|
-
const git_1 = require("./commands/codex-chip/git");
|
|
41
39
|
const model_1 = require("./commands/codex-chip/model");
|
|
42
40
|
const native_1 = require("./commands/codex-chip/native");
|
|
43
|
-
const goals_1 = require("./commands/codex-chip/goals");
|
|
44
41
|
function manifestFor(input) {
|
|
45
42
|
return (0, store_1.findManifestByContext)(input.cwd || process.cwd(), input.session_id);
|
|
46
43
|
}
|
|
47
|
-
function output(event,
|
|
48
|
-
return {
|
|
44
|
+
function output(event, additionalContext, reason) {
|
|
45
|
+
return {
|
|
46
|
+
hookSpecificOutput: {
|
|
47
|
+
hookEventName: event,
|
|
48
|
+
additionalContext,
|
|
49
|
+
...(reason ? { permissionDecision: 'deny', permissionDecisionReason: reason } : {}),
|
|
50
|
+
},
|
|
51
|
+
};
|
|
49
52
|
}
|
|
50
53
|
function context(input) {
|
|
51
54
|
const chip = manifestFor(input);
|
|
52
55
|
if (!chip)
|
|
53
56
|
return null;
|
|
54
|
-
const ownership = chip.mode === 'read' ? 'read-only' : chip.owns.join(', ');
|
|
55
57
|
const cli = chip.codex.cliCommand || 'greprag';
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
`Parent session: ${chip.parent.sessionId || 'not recorded'}`,
|
|
67
|
-
goal ? `Parent goal: ${goal.objective}\nFinal state: ${goal.finalState}` : '',
|
|
68
|
-
covered.length ? `Covered criteria:\n${covered.map(item => `- ${item.id}: ${item.text}`).join('\n')}` : '',
|
|
69
|
-
`Finish with: ${cli} codex chip report ${chip.id} --summary "<result>" --check "<verification>"${evidence}`,
|
|
70
|
-
'Do not merge, push, clean up, or edit the parent checkout.',
|
|
71
|
-
].filter(Boolean).join('\n'),
|
|
72
|
-
});
|
|
58
|
+
return output(input.hook_event_name || 'SessionStart', [
|
|
59
|
+
`[GrepRAG Codex chip ${chip.id.slice(0, 8)}]`,
|
|
60
|
+
`Task: ${(0, model_1.chipTitle)(chip)}`,
|
|
61
|
+
`Assignment: ${chip.task}`,
|
|
62
|
+
`Worktree: ${(0, model_1.chipExecutionPath)(chip)}`,
|
|
63
|
+
`Branch: ${chip.worktree.branch}`,
|
|
64
|
+
`Parent session: ${chip.parent.sessionId || 'not recorded'}`,
|
|
65
|
+
`Finish with a parent result of DONE or BLOCKED, including the commit, checks, and caveats. The optional host command is ${cli} codex chip report ${chip.id}.`,
|
|
66
|
+
'Do not merge, push, deploy, clean up, or edit the parent checkout.',
|
|
67
|
+
].join('\n'));
|
|
73
68
|
}
|
|
74
69
|
function bindInitialMission(input) {
|
|
75
70
|
if (!input.prompt || !input.session_id || !input.cwd)
|
|
@@ -77,154 +72,25 @@ function bindInitialMission(input) {
|
|
|
77
72
|
const chip = (0, native_1.provisionNativeBindingFromPrompt)(input.prompt, input.cwd, input.session_id, input.model);
|
|
78
73
|
return chip ? context(input) : null;
|
|
79
74
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
for (const key of ['file_path', 'path', 'file', 'source', 'destination', 'old_path', 'new_path']) {
|
|
83
|
-
const raw = input.tool_input?.[key];
|
|
84
|
-
if (typeof raw === 'string')
|
|
85
|
-
paths.push(raw);
|
|
86
|
-
}
|
|
87
|
-
const many = input.tool_input?.paths;
|
|
88
|
-
if (Array.isArray(many))
|
|
89
|
-
paths.push(...many.filter((item) => typeof item === 'string'));
|
|
90
|
-
const patch = input.tool_input?.patch || input.tool_input?.input;
|
|
91
|
-
if (typeof patch === 'string') {
|
|
92
|
-
for (const match of patch.matchAll(/^\*\*\* (?:Add|Update|Delete) File: (.+)$/gm))
|
|
93
|
-
paths.push(match[1].trim());
|
|
94
|
-
}
|
|
95
|
-
return paths;
|
|
96
|
-
}
|
|
97
|
-
function physicalPath(target) {
|
|
98
|
-
let existing = path.resolve(target);
|
|
99
|
-
const suffix = [];
|
|
100
|
-
while (true) {
|
|
101
|
-
try {
|
|
102
|
-
fs.lstatSync(existing);
|
|
103
|
-
break;
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
// Missing lexical components are appended after resolving the nearest
|
|
107
|
-
// existing ancestor. lstat sees dangling links that existsSync hides.
|
|
108
|
-
}
|
|
109
|
-
const parent = path.dirname(existing);
|
|
110
|
-
if (parent === existing)
|
|
111
|
-
return null;
|
|
112
|
-
suffix.unshift(path.basename(existing));
|
|
113
|
-
existing = parent;
|
|
114
|
-
}
|
|
115
|
-
try {
|
|
116
|
-
return path.join(fs.realpathSync(existing), ...suffix);
|
|
117
|
-
}
|
|
118
|
-
catch {
|
|
119
|
-
return null; // dangling or otherwise unresolvable link: fail closed
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
function isInside(root, target) {
|
|
123
|
-
const physicalRoot = physicalPath(root);
|
|
124
|
-
const physicalTarget = physicalPath(target);
|
|
125
|
-
if (!physicalRoot || !physicalTarget)
|
|
126
|
-
return false;
|
|
127
|
-
const relative = path.relative(physicalRoot, physicalTarget);
|
|
128
|
-
return Boolean(relative) && !relative.startsWith('..') && !path.isAbsolute(relative);
|
|
129
|
-
}
|
|
75
|
+
/** Keep native tasks attached to the exact Codex-provided worktree and thread.
|
|
76
|
+
* The child otherwise has ordinary writable task permissions. */
|
|
130
77
|
function guard(input) {
|
|
131
78
|
const chip = manifestFor(input);
|
|
132
|
-
if (!chip)
|
|
79
|
+
if (!chip || chip.codex.runtime !== 'native')
|
|
133
80
|
return null;
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (actualCwd !== expectedCwd || input.session_id !== chip.codex.threadId || chip.codex.sandbox !== 'workspace-write') {
|
|
139
|
-
return output(event, {
|
|
140
|
-
permissionDecision: 'deny',
|
|
141
|
-
permissionDecisionReason: 'Native chip tool use requires the exact bound thread, execution cwd, and attested workspace-write sandbox.',
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
for (const key of ['cwd', 'workdir', 'working_directory']) {
|
|
146
|
-
const requested = input.tool_input?.[key];
|
|
147
|
-
const requestedPath = typeof requested === 'string'
|
|
148
|
-
? physicalPath(path.resolve(input.cwd || process.cwd(), requested)) : null;
|
|
149
|
-
const expectedPath = physicalPath((0, model_1.chipExecutionPath)(chip));
|
|
150
|
-
if (typeof requested === 'string' && (!requestedPath || !expectedPath ||
|
|
151
|
-
requestedPath.toLowerCase() !== expectedPath.toLowerCase())) {
|
|
152
|
-
return output(event, {
|
|
153
|
-
permissionDecision: 'deny',
|
|
154
|
-
permissionDecisionReason: 'Chip tools may not change their execution directory outside the bound checkout.',
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
for (const file of toolPaths(input)) {
|
|
159
|
-
const absolute = path.resolve(input.cwd || process.cwd(), file);
|
|
160
|
-
const executionPath = (0, model_1.chipExecutionPath)(chip);
|
|
161
|
-
if (!isInside(executionPath, absolute)) {
|
|
162
|
-
return output(event, {
|
|
163
|
-
permissionDecision: 'deny',
|
|
164
|
-
permissionDecisionReason: `Chip ${chip.id.slice(0, 8)} may not write through a link outside ${executionPath}.`,
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
const relative = path.relative(executionPath, absolute).replace(/\\/g, '/');
|
|
168
|
-
if (!relative || relative.startsWith('..') || path.isAbsolute(relative)) {
|
|
169
|
-
return output(event, {
|
|
170
|
-
permissionDecision: 'deny',
|
|
171
|
-
permissionDecisionReason: `Chip ${chip.id.slice(0, 8)} may only write inside ${executionPath}.`,
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
if (chip.mode === 'read' || (0, git_1.outsideLease)([relative], chip.owns).length > 0) {
|
|
175
|
-
return output(event, {
|
|
176
|
-
permissionDecision: 'deny',
|
|
177
|
-
permissionDecisionReason: chip.mode === 'read'
|
|
178
|
-
? `Chip ${chip.id.slice(0, 8)} is read-only.`
|
|
179
|
-
: `Path ${relative} is outside this chip's write lease: ${chip.owns.join(', ')}.`,
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
const command = typeof input.tool_input?.command === 'string' ? input.tool_input.command : '';
|
|
184
|
-
if (command) {
|
|
185
|
-
const linkEscape = /\b(?:mklink|junction(?:\.exe)?|ln)\b|New-Item[^\n]*(?:Junction|SymbolicLink|HardLink)|(?:fs\.)?(?:symlink|link)Sync?\s*\(/i;
|
|
186
|
-
if (linkEscape.test(command)) {
|
|
187
|
-
return output(event, {
|
|
188
|
-
permissionDecision: 'deny',
|
|
189
|
-
permissionDecisionReason: 'Chip shell commands may not create symlinks or junctions; link escapes bypass the native worktree boundary.',
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
const forbidden = /\bgit\s+(?:merge|push|worktree|switch|checkout|clean|reset\s+--hard)\b|\brm\s+-rf\b|\bRemove-Item\b[^\n]*-Recurse/i;
|
|
193
|
-
if (forbidden.test(command)) {
|
|
194
|
-
return output(event, {
|
|
195
|
-
permissionDecision: 'deny',
|
|
196
|
-
permissionDecisionReason: 'Chip lifecycle forbids merge/push/worktree switching and destructive recursive cleanup. Return the committed branch to the parent.',
|
|
197
|
-
});
|
|
198
|
-
}
|
|
81
|
+
const actualCwd = path.resolve(input.cwd || process.cwd()).toLowerCase();
|
|
82
|
+
const expectedCwd = path.resolve((0, model_1.chipExecutionPath)(chip)).toLowerCase();
|
|
83
|
+
if (actualCwd !== expectedCwd || input.session_id !== chip.codex.threadId || chip.codex.sandbox !== 'workspace-write') {
|
|
84
|
+
return output(input.hook_event_name || 'PreToolUse', '', 'Native chip tool use requires the exact bound Codex task, execution worktree, and workspace-write sandbox.');
|
|
199
85
|
}
|
|
200
86
|
return null;
|
|
201
87
|
}
|
|
202
|
-
function stop(input) {
|
|
203
|
-
const chip = manifestFor(input);
|
|
204
|
-
if (!chip || input.stop_hook_active)
|
|
205
|
-
return null;
|
|
206
|
-
if (chip.mode === 'read' && chip.codex.runtime !== 'native')
|
|
207
|
-
return null; // CLI worker auto-reports read analysis
|
|
208
|
-
if (chip.state === 'ready' || chip.state === 'blocked' || chip.state === 'cancelled' || chip.state === 'failed')
|
|
209
|
-
return null;
|
|
210
|
-
const cli = chip.codex.cliCommand || 'greprag';
|
|
211
|
-
const action = chip.mode === 'read'
|
|
212
|
-
? `Keep the checkout unchanged and run ${cli} codex chip report ${chip.id} --summary "<result>" --check "read-only repository state verified"`
|
|
213
|
-
: `Commit and run ${cli} codex chip report ${chip.id} --summary "<result>" --check "<verification>"`;
|
|
214
|
-
const reason = `Chip ${chip.id.slice(0, 8)} has not reported. ${action}, or record a real blocker with ${cli} codex chip block.`;
|
|
215
|
-
return {
|
|
216
|
-
decision: 'block',
|
|
217
|
-
reason,
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
88
|
function evaluateCodexChipHook(input) {
|
|
221
89
|
const event = input.hook_event_name || '';
|
|
222
90
|
if (event === 'UserPromptSubmit')
|
|
223
91
|
return bindInitialMission(input);
|
|
224
92
|
if (event === 'PreToolUse')
|
|
225
93
|
return guard(input);
|
|
226
|
-
if (event === 'Stop')
|
|
227
|
-
return stop(input);
|
|
228
94
|
if (event === 'SessionStart' || event === 'SubagentStart' || event === 'SubagentStop')
|
|
229
95
|
return context(input);
|
|
230
96
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-chip-hooks.js","sourceRoot":"","sources":["../src/codex-chip-hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"codex-chip-hooks.js","sourceRoot":"","sources":["../src/codex-chip-hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwEA,sDAMC;AA9ED,2CAA6B;AAE7B,uDAAoE;AACpE,uDAA2E;AAC3E,yDAAgF;AAkBhF,SAAS,WAAW,CAAC,KAAoB;IACvC,OAAO,IAAA,6BAAqB,EAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,iBAAyB,EAAE,MAAe;IACvE,OAAO;QACL,kBAAkB,EAAE;YAClB,aAAa,EAAE,KAAK;YACpB,iBAAiB;YACjB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,KAAoB;IACnC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IAC/C,OAAO,MAAM,CAAC,KAAK,CAAC,eAAe,IAAI,cAAc,EAAE;QACrD,uBAAuB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAC7C,SAAS,IAAA,iBAAS,EAAC,IAAI,CAAC,EAAE;QAC1B,eAAe,IAAI,CAAC,IAAI,EAAE;QAC1B,aAAa,IAAA,yBAAiB,EAAC,IAAI,CAAC,EAAE;QACtC,WAAW,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QACjC,mBAAmB,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,cAAc,EAAE;QAC5D,2HAA2H,GAAG,sBAAsB,IAAI,CAAC,EAAE,GAAG;QAC9J,oEAAoE;KACrE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAoB;IAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAClE,MAAM,IAAI,GAAG,IAAA,yCAAgC,EAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACtG,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED;iEACiE;AACjE,SAAS,KAAK,CAAC,KAAoB;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACzE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAA,yBAAiB,EAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxE,IAAI,SAAS,KAAK,WAAW,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;QACtH,OAAO,MAAM,CAAC,KAAK,CAAC,eAAe,IAAI,YAAY,EAAE,EAAE,EACrD,4GAA4G,CAAC,CAAC;IAClH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,qBAAqB,CAAC,KAAoB;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;IAC1C,IAAI,KAAK,KAAK,kBAAkB;QAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnE,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,cAAc;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7G,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/codex-steering.d.ts
CHANGED
|
@@ -22,8 +22,9 @@ interface InboxMessage {
|
|
|
22
22
|
message_type?: string;
|
|
23
23
|
created_at?: string;
|
|
24
24
|
}
|
|
25
|
-
export declare function formatCodexInboxSteering(messages: InboxMessage[], session8: string): string | null;
|
|
25
|
+
export declare function formatCodexInboxSteering(messages: InboxMessage[], session8: string, excludedIds?: Set<string>): string | null;
|
|
26
26
|
export declare function buildCodexInboxSteering(input: CodexSteeringInput, cfg: GrepragHookConfig, opts?: {
|
|
27
27
|
debounce?: boolean;
|
|
28
|
+
excludeMessageIds?: Iterable<string>;
|
|
28
29
|
}): Promise<string | null>;
|
|
29
30
|
export {};
|
package/dist/codex-steering.js
CHANGED
|
@@ -107,10 +107,12 @@ function formatReplyHint(message) {
|
|
|
107
107
|
return `Reply with: greprag send "..." --to ${handle}`;
|
|
108
108
|
return null;
|
|
109
109
|
}
|
|
110
|
-
function deliverableMessages(messages, session8) {
|
|
110
|
+
function deliverableMessages(messages, session8, excludedIds = new Set()) {
|
|
111
111
|
return messages.filter(m => {
|
|
112
112
|
if (!m || typeof m.body !== 'string' || !m.body.trim())
|
|
113
113
|
return false;
|
|
114
|
+
if (excludedIds.has(m.id))
|
|
115
|
+
return false;
|
|
114
116
|
if ((0, session_id_1.truncateSessionId)(m.to_session_id || undefined) !== session8)
|
|
115
117
|
return false;
|
|
116
118
|
return (0, session_id_1.truncateSessionId)(m.from?.session_id || undefined) !== session8;
|
|
@@ -131,8 +133,8 @@ async function markRead(apiUrl, apiKey, ids) {
|
|
|
131
133
|
// Best-effort. A failed mark-read may duplicate context, but must not block the hook.
|
|
132
134
|
}
|
|
133
135
|
}
|
|
134
|
-
function formatCodexInboxSteering(messages, session8) {
|
|
135
|
-
const unread = deliverableMessages(messages, session8);
|
|
136
|
+
function formatCodexInboxSteering(messages, session8, excludedIds = new Set()) {
|
|
137
|
+
const unread = deliverableMessages(messages, session8, excludedIds);
|
|
136
138
|
if (unread.length === 0)
|
|
137
139
|
return null;
|
|
138
140
|
const parts = [
|
|
@@ -190,8 +192,9 @@ async function buildCodexInboxSteering(input, cfg, opts = {}) {
|
|
|
190
192
|
return null;
|
|
191
193
|
const data = await res.json();
|
|
192
194
|
const messages = data.messages || [];
|
|
193
|
-
const
|
|
194
|
-
const
|
|
195
|
+
const excludedIds = new Set(opts.excludeMessageIds || []);
|
|
196
|
+
const delivered = deliverableMessages(messages, session8, excludedIds);
|
|
197
|
+
const context = formatCodexInboxSteering(messages, session8, excludedIds);
|
|
195
198
|
if (context)
|
|
196
199
|
await markRead(base, cfg.apiKey, delivered.slice(0, 10).map(m => m.id));
|
|
197
200
|
return context;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-steering.js","sourceRoot":"","sources":["../src/codex-steering.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"codex-steering.js","sourceRoot":"","sources":["../src/codex-steering.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type NativeBootstrapResult = 'already-present' | 'installed' | 'not-applicable';
|
|
2
|
+
/**
|
|
3
|
+
* Give a Codex-owned native checkout its own dependency tree before the
|
|
4
|
+
* mission can run. Native worktrees do not inherit node_modules from the
|
|
5
|
+
* parent checkout, and sharing that directory through a Windows junction can
|
|
6
|
+
* let cleanup delete the parent's dependencies.
|
|
7
|
+
*/
|
|
8
|
+
export declare function bootstrapNativeDependencies(nativeCwd: string): NativeBootstrapResult;
|
|
@@ -0,0 +1,103 @@
|
|
|
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.bootstrapNativeDependencies = bootstrapNativeDependencies;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const proc_1 = require("../../proc");
|
|
40
|
+
function nodeModulesState(target) {
|
|
41
|
+
try {
|
|
42
|
+
const stat = fs.lstatSync(target);
|
|
43
|
+
if (stat.isSymbolicLink())
|
|
44
|
+
return 'linked';
|
|
45
|
+
if (!stat.isDirectory())
|
|
46
|
+
throw new Error(`Native dependency path is not a directory: ${target}`);
|
|
47
|
+
return fs.readdirSync(target).length ? 'installed' : 'missing';
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (error.code === 'ENOENT')
|
|
51
|
+
return 'missing';
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function commandFailure(error) {
|
|
56
|
+
const failure = error;
|
|
57
|
+
return [failure.stderr, failure.stdout, failure.message]
|
|
58
|
+
.filter((value) => typeof value === 'string' && value.trim().length > 0)
|
|
59
|
+
.map(value => value.trim()).join('\n');
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Give a Codex-owned native checkout its own dependency tree before the
|
|
63
|
+
* mission can run. Native worktrees do not inherit node_modules from the
|
|
64
|
+
* parent checkout, and sharing that directory through a Windows junction can
|
|
65
|
+
* let cleanup delete the parent's dependencies.
|
|
66
|
+
*/
|
|
67
|
+
function bootstrapNativeDependencies(nativeCwd) {
|
|
68
|
+
const cwd = path.resolve(nativeCwd);
|
|
69
|
+
const packageJson = path.join(cwd, 'package.json');
|
|
70
|
+
if (!fs.existsSync(packageJson))
|
|
71
|
+
return 'not-applicable';
|
|
72
|
+
const nodeModules = path.join(cwd, 'node_modules');
|
|
73
|
+
const state = nodeModulesState(nodeModules);
|
|
74
|
+
if (state === 'linked') {
|
|
75
|
+
throw new Error(`Native checkout has a node_modules link at ${nodeModules}. `
|
|
76
|
+
+ 'Remove the link safely, then let the native bootstrap install locally; '
|
|
77
|
+
+ 'never run worktree cleanup through a dependency junction.');
|
|
78
|
+
}
|
|
79
|
+
if (state === 'installed')
|
|
80
|
+
return 'already-present';
|
|
81
|
+
const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
82
|
+
const args = fs.existsSync(path.join(cwd, 'package-lock.json')) ? ['ci'] : ['install'];
|
|
83
|
+
args.push('--ignore-scripts', '--no-audit', '--no-fund');
|
|
84
|
+
try {
|
|
85
|
+
(0, proc_1.safeExecSync)(`${npm} ${args.join(' ')}`, {
|
|
86
|
+
cwd,
|
|
87
|
+
encoding: 'utf-8',
|
|
88
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
89
|
+
timeout: 300_000,
|
|
90
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
const detail = commandFailure(error);
|
|
95
|
+
throw new Error(`Native dependency bootstrap failed in ${cwd}: ${npm} ${args.join(' ')}`
|
|
96
|
+
+ (detail ? `\n${detail}` : ''));
|
|
97
|
+
}
|
|
98
|
+
if (nodeModulesState(nodeModules) === 'missing') {
|
|
99
|
+
throw new Error(`Native dependency bootstrap completed without creating ${nodeModules}.`);
|
|
100
|
+
}
|
|
101
|
+
return 'installed';
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/commands/codex-chip/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,6 @@ const inbox_1 = require("./inbox");
|
|
|
6
6
|
const git_1 = require("./git");
|
|
7
7
|
const store_1 = require("./store");
|
|
8
8
|
const breakthrough_1 = require("./breakthrough");
|
|
9
|
-
const mechanic_lifecycle_1 = require("./mechanic-lifecycle");
|
|
10
|
-
const store_2 = require("./store");
|
|
11
9
|
function flag(args, name) {
|
|
12
10
|
const index = args.indexOf(name);
|
|
13
11
|
return index >= 0 ? args[index + 1] : undefined;
|
|
@@ -31,11 +29,6 @@ async function runBreakthroughCommand(args) {
|
|
|
31
29
|
console.log(`Breakthrough routed for chip ${id.slice(0, 8)}.`);
|
|
32
30
|
}
|
|
33
31
|
async function routeBreakthrough(manifest, reason, targetSession) {
|
|
34
|
-
if (manifest.codex.role === 'mechanic' && manifest.codex.mechanic?.state === 'dormant') {
|
|
35
|
-
manifest = (0, store_2.updateManifest)(manifest.id, { codex: {
|
|
36
|
-
...manifest.codex, mechanic: (0, mechanic_lifecycle_1.reopenMechanicIncident)(manifest.codex.mechanic),
|
|
37
|
-
} });
|
|
38
|
-
}
|
|
39
32
|
const queued = (0, breakthrough_1.queueBreakthrough)(manifest, reason, targetSession);
|
|
40
33
|
await (0, inbox_1.sendChipEvent)(queued.manifest, queued.delivery.targetSession, {
|
|
41
34
|
kind: 'breakthrough', summary: `BREAKTHROUGH:${queued.delivery.nonce} ${reason}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"breakthrough-command.js","sourceRoot":"","sources":["../../../src/commands/codex-chip/breakthrough-command.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"breakthrough-command.js","sourceRoot":"","sources":["../../../src/commands/codex-chip/breakthrough-command.ts"],"names":[],"mappings":";;AAUA,wDAcC;AAED,8CAOC;AAjCD,mCAAwC;AACxC,+BAAuC;AACvC,mCAAuC;AACvC,iDAA6E;AAE7E,SAAS,IAAI,CAAC,IAAc,EAAE,IAAY;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,IAAc;IACzD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,oBAAc,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACnH,MAAM,KAAK,GAAG,IAAA,oBAAY,EAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACjE,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,QAAsD,EAAE,MAAc,EAAE,aAAsB;IACpI,MAAM,MAAM,GAAG,IAAA,gCAAiB,EAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAClE,MAAM,IAAA,qBAAa,EAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE;QAClE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,MAAM,EAAE;KACjF,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvE,IAAA,uCAAwB,EAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -40,8 +40,6 @@ const git_1 = require("./git");
|
|
|
40
40
|
const model_1 = require("./model");
|
|
41
41
|
const store_1 = require("./store");
|
|
42
42
|
const lifecycle_1 = require("./lifecycle");
|
|
43
|
-
const goals_1 = require("./goals");
|
|
44
|
-
const mechanic_lifecycle_1 = require("./mechanic-lifecycle");
|
|
45
43
|
function alive(pid) { try {
|
|
46
44
|
process.kill(pid, 0);
|
|
47
45
|
return true;
|
|
@@ -57,10 +55,6 @@ function runCleanupCommand(args) {
|
|
|
57
55
|
if (!manifest)
|
|
58
56
|
throw new Error(`Unknown chip: ${ref}`);
|
|
59
57
|
const force = args.includes('--force');
|
|
60
|
-
(0, goals_1.assertGoalAcceptedForCleanup)(manifest);
|
|
61
|
-
if (manifest.codex.role === 'mechanic' && !args.includes('--mechanic-final')) {
|
|
62
|
-
throw new Error('MECHANIC remains OPEN+DORMANT after incident repair; only final LEAD mission teardown may pass --mechanic-final.');
|
|
63
|
-
}
|
|
64
58
|
manifest = (0, lifecycle_1.prepareCleanup)(manifest, args.includes('--integrated'));
|
|
65
59
|
if (manifest.codex.runtime === 'native' && manifest.codex.threadId && !args.includes('--native-archived')) {
|
|
66
60
|
throw new Error(`Archive native Codex task ${manifest.codex.threadId} first, then rerun cleanup with --native-archived.`);
|
|
@@ -93,9 +87,7 @@ function runCleanupCommand(args) {
|
|
|
93
87
|
if (branchExists)
|
|
94
88
|
(0, git_1.deleteBranch)(manifest.parent.root, manifest.worktree.branch);
|
|
95
89
|
manifest = (0, store_1.updateManifest)(manifest.id, nativeArchiveAt
|
|
96
|
-
? { state: 'cleaned', codex: { ...manifest.codex, nativeArchivedAt: nativeArchiveAt
|
|
97
|
-
mechanic: manifest.codex.role === 'mechanic' && manifest.codex.mechanic
|
|
98
|
-
? (0, mechanic_lifecycle_1.terminalMechanic)(manifest.codex.mechanic) : manifest.codex.mechanic } }
|
|
90
|
+
? { state: 'cleaned', codex: { ...manifest.codex, nativeArchivedAt: nativeArchiveAt } }
|
|
99
91
|
: { state: 'cleaned' });
|
|
100
92
|
if (args.includes('--json'))
|
|
101
93
|
return void console.log(JSON.stringify({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup-command.js","sourceRoot":"","sources":["../../../src/commands/codex-chip/cleanup-command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"cleanup-command.js","sourceRoot":"","sources":["../../../src/commands/codex-chip/cleanup-command.ts"],"names":[],"mappings":"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"}
|