greprag 5.56.0 → 5.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/codex-chip-hooks.d.ts +20 -0
  2. package/dist/codex-chip-hooks.js +217 -0
  3. package/dist/codex-chip-hooks.js.map +1 -0
  4. package/dist/commands/codex-chip/command.d.ts +3 -0
  5. package/dist/commands/codex-chip/command.js +583 -0
  6. package/dist/commands/codex-chip/command.js.map +1 -0
  7. package/dist/commands/codex-chip/git.d.ts +30 -0
  8. package/dist/commands/codex-chip/git.js +223 -0
  9. package/dist/commands/codex-chip/git.js.map +1 -0
  10. package/dist/commands/codex-chip/inbox.d.ts +10 -0
  11. package/dist/commands/codex-chip/inbox.js +128 -0
  12. package/dist/commands/codex-chip/inbox.js.map +1 -0
  13. package/dist/commands/codex-chip/lifecycle.d.ts +5 -0
  14. package/dist/commands/codex-chip/lifecycle.js +94 -0
  15. package/dist/commands/codex-chip/lifecycle.js.map +1 -0
  16. package/dist/commands/codex-chip/model.d.ts +92 -0
  17. package/dist/commands/codex-chip/model.js +16 -0
  18. package/dist/commands/codex-chip/model.js.map +1 -0
  19. package/dist/commands/codex-chip/native.d.ts +62 -0
  20. package/dist/commands/codex-chip/native.js +283 -0
  21. package/dist/commands/codex-chip/native.js.map +1 -0
  22. package/dist/commands/codex-chip/prompt.d.ts +2 -0
  23. package/dist/commands/codex-chip/prompt.js +44 -0
  24. package/dist/commands/codex-chip/prompt.js.map +1 -0
  25. package/dist/commands/codex-chip/selection.d.ts +14 -0
  26. package/dist/commands/codex-chip/selection.js +109 -0
  27. package/dist/commands/codex-chip/selection.js.map +1 -0
  28. package/dist/commands/codex-chip/store.d.ts +15 -0
  29. package/dist/commands/codex-chip/store.js +197 -0
  30. package/dist/commands/codex-chip/store.js.map +1 -0
  31. package/dist/commands/codex-chip/worker.d.ts +4 -0
  32. package/dist/commands/codex-chip/worker.js +344 -0
  33. package/dist/commands/codex-chip/worker.js.map +1 -0
  34. package/dist/commands/codex-doctor.js +8 -1
  35. package/dist/commands/codex-doctor.js.map +1 -1
  36. package/dist/commands/codex-startup.d.ts +13 -0
  37. package/dist/commands/codex-startup.js +177 -0
  38. package/dist/commands/codex-startup.js.map +1 -0
  39. package/dist/commands/codex-supervisor.d.ts +5 -0
  40. package/dist/commands/codex-supervisor.js +59 -10
  41. package/dist/commands/codex-supervisor.js.map +1 -1
  42. package/dist/commands/codex-watch-health.d.ts +57 -0
  43. package/dist/commands/codex-watch-health.js +168 -0
  44. package/dist/commands/codex-watch-health.js.map +1 -0
  45. package/dist/commands/codex.d.ts +1 -11
  46. package/dist/commands/codex.js +104 -144
  47. package/dist/commands/codex.js.map +1 -1
  48. package/dist/commands/init.js +23 -0
  49. package/dist/commands/init.js.map +1 -1
  50. package/dist/commands/load-primer-reminder.d.ts +4 -0
  51. package/dist/commands/load-primer-reminder.js +15 -2
  52. package/dist/commands/load-primer-reminder.js.map +1 -1
  53. package/dist/commands/load.js +4 -0
  54. package/dist/commands/load.js.map +1 -1
  55. package/dist/commands/loadout.js +34 -2
  56. package/dist/commands/loadout.js.map +1 -1
  57. package/dist/commands/reminder-registry.js +1 -0
  58. package/dist/commands/reminder-registry.js.map +1 -1
  59. package/dist/commands/reminder-types.d.ts +12 -0
  60. package/dist/commands/version-reminder.d.ts +13 -1
  61. package/dist/commands/version-reminder.js +24 -1
  62. package/dist/commands/version-reminder.js.map +1 -1
  63. package/dist/hook.js +33 -5
  64. package/dist/hook.js.map +1 -1
  65. package/dist/opencode-plugin.bundle.js +23 -1
  66. package/package.json +1 -1
  67. package/skill/greprag/SKILL.md +8 -4
  68. package/skill/greprag/docs/codex-chip.md +38 -0
  69. package/skill/greprag/docs/setup.md +3 -2
  70. package/skill/templates/codex-chip-spawn.md +139 -0
@@ -0,0 +1,197 @@
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.grepragHome = grepragHome;
37
+ exports.chipStoreRoot = chipStoreRoot;
38
+ exports.chipWorktreeRoot = chipWorktreeRoot;
39
+ exports.manifestPath = manifestPath;
40
+ exports.withProjectChipLock = withProjectChipLock;
41
+ exports.writeManifest = writeManifest;
42
+ exports.readManifest = readManifest;
43
+ exports.listManifests = listManifests;
44
+ exports.activeManifests = activeManifests;
45
+ exports.findManifest = findManifest;
46
+ exports.findManifestByContext = findManifestByContext;
47
+ exports.updateManifest = updateManifest;
48
+ const fs = __importStar(require("fs"));
49
+ const os = __importStar(require("os"));
50
+ const path = __importStar(require("path"));
51
+ const model_1 = require("./model");
52
+ function grepragHome() {
53
+ return path.join(process.env.HOME || process.env.USERPROFILE || os.homedir(), '.greprag');
54
+ }
55
+ function chipStoreRoot() {
56
+ return path.join(grepragHome(), 'chips');
57
+ }
58
+ function chipWorktreeRoot(projectId) {
59
+ return path.join(grepragHome(), 'worktrees', projectId.slice(0, 8));
60
+ }
61
+ function manifestPath(id) {
62
+ return path.join(chipStoreRoot(), id, 'manifest.json');
63
+ }
64
+ function sleep(ms) {
65
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
66
+ }
67
+ function withLock(file, fn) {
68
+ fs.mkdirSync(path.dirname(file), { recursive: true });
69
+ let fd = null;
70
+ for (let attempt = 0; attempt < 50; attempt++) {
71
+ try {
72
+ fd = fs.openSync(file, 'wx');
73
+ fs.writeFileSync(fd, JSON.stringify({ pid: process.pid, at: new Date().toISOString() }));
74
+ break;
75
+ }
76
+ catch {
77
+ try {
78
+ const lock = JSON.parse(fs.readFileSync(file, 'utf-8'));
79
+ if (!lock.pid || !processIsAlive(lock.pid)) {
80
+ fs.rmSync(file, { force: true });
81
+ continue;
82
+ }
83
+ }
84
+ catch { /* another process may be creating or releasing it */ }
85
+ sleep(10);
86
+ }
87
+ }
88
+ if (fd === null)
89
+ throw new Error(`Chip state lock is busy: ${file}`);
90
+ try {
91
+ return fn();
92
+ }
93
+ finally {
94
+ fs.closeSync(fd);
95
+ fs.rmSync(file, { force: true });
96
+ }
97
+ }
98
+ function processIsAlive(pid) {
99
+ try {
100
+ process.kill(pid, 0);
101
+ return true;
102
+ }
103
+ catch {
104
+ return false;
105
+ }
106
+ }
107
+ function withProjectChipLock(projectId, fn) {
108
+ return withLock(path.join(chipStoreRoot(), '.locks', `${projectId}.lock`), fn);
109
+ }
110
+ function writeManifest(manifest) {
111
+ const file = manifestPath(manifest.id);
112
+ fs.mkdirSync(path.dirname(file), { recursive: true });
113
+ const tmp = `${file}.${process.pid}.${Date.now()}.tmp`;
114
+ fs.writeFileSync(tmp, JSON.stringify(manifest, null, 2) + '\n', 'utf-8');
115
+ fs.renameSync(tmp, file);
116
+ }
117
+ function readManifest(id) {
118
+ try {
119
+ return JSON.parse(fs.readFileSync(manifestPath(id), 'utf-8'));
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ }
125
+ function listManifests() {
126
+ try {
127
+ return fs.readdirSync(chipStoreRoot(), { withFileTypes: true })
128
+ .filter(entry => entry.isDirectory() && entry.name !== '.locks')
129
+ .map(entry => {
130
+ try {
131
+ return JSON.parse(fs.readFileSync(manifestPath(entry.name), 'utf-8'));
132
+ }
133
+ catch {
134
+ return null;
135
+ }
136
+ })
137
+ .filter((item) => Boolean(item))
138
+ .sort((a, b) => b.createdAt.localeCompare(a.createdAt));
139
+ }
140
+ catch {
141
+ return [];
142
+ }
143
+ }
144
+ function activeManifests(projectId) {
145
+ return listManifests().filter(m => (0, model_1.isActiveChip)(m) && (!projectId || m.project.id === projectId));
146
+ }
147
+ function findManifest(ref) {
148
+ const exact = readManifest(ref);
149
+ if (exact)
150
+ return exact;
151
+ const matches = listManifests().filter(m => m.id.startsWith(ref) || m.name === ref || m.codex.threadId === ref || m.codex.clientThreadId === ref ||
152
+ (0, model_1.chipExecutionPath)(m) === path.resolve(ref));
153
+ if (matches.length > 1)
154
+ throw new Error(`Ambiguous chip reference: ${ref}`);
155
+ return matches[0] || null;
156
+ }
157
+ function findManifestByContext(cwd, sessionId) {
158
+ const resolved = path.resolve(cwd).toLowerCase();
159
+ return listManifests().find(m => path.resolve((0, model_1.chipExecutionPath)(m)).toLowerCase() === resolved ||
160
+ Boolean(sessionId && m.codex.threadId === sessionId)) || null;
161
+ }
162
+ function updateManifest(id, patch) {
163
+ return withLock(path.join(chipStoreRoot(), id, '.lock'), () => {
164
+ const current = readManifest(id);
165
+ if (!current)
166
+ throw new Error(`Unknown chip: ${id}`);
167
+ if (patch.state && patch.state !== current.state && !allowedTransition(current.state, patch.state)) {
168
+ throw new Error(`Invalid chip transition: ${current.state} -> ${patch.state}`);
169
+ }
170
+ const next = {
171
+ ...current, ...patch, revision: (current.revision || 0) + 1,
172
+ updatedAt: new Date().toISOString(),
173
+ };
174
+ writeManifest(next);
175
+ return next;
176
+ });
177
+ }
178
+ function allowedTransition(from, to) {
179
+ const transitions = {
180
+ planned: ['provisioning', 'failed', 'cancelled'],
181
+ provisioning: ['starting', 'awaiting-native', 'failed', 'cancelled'],
182
+ starting: ['running', 'failed', 'cancelled', 'orphaned'],
183
+ 'awaiting-native': ['running', 'failed', 'cancelled', 'orphaned'],
184
+ running: ['reported', 'ready', 'blocked', 'failed', 'cancelled', 'orphaned'],
185
+ blocked: ['running', 'ready', 'failed', 'cancelled', 'orphaned', 'abandoned'],
186
+ reported: ['ready', 'blocked', 'failed'],
187
+ ready: ['merged', 'orphaned'],
188
+ merged: ['cleaned', 'complete'],
189
+ failed: ['cleaned'],
190
+ cancelled: ['cleaned'],
191
+ orphaned: ['cleaned', 'abandoned'],
192
+ abandoned: ['cleaned'],
193
+ cleaned: ['complete'],
194
+ };
195
+ return transitions[from]?.includes(to) === true;
196
+ }
197
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/commands/codex-chip/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { CodexAppServerLike } from '../codex-app-server-client';
2
+ import { ChipManifest } from './model';
3
+ export declare function runChipWorker(id: string, client?: CodexAppServerLike, pollMs?: number, initialPrompt?: string): Promise<void>;
4
+ export declare function processChipReceipt(id: string): Promise<ChipManifest | null>;
@@ -0,0 +1,344 @@
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.runChipWorker = runChipWorker;
37
+ exports.processChipReceipt = processChipReceipt;
38
+ const codex_app_server_client_1 = require("../codex-app-server-client");
39
+ const codex_startup_1 = require("../codex-startup");
40
+ const prompt_1 = require("./prompt");
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const store_1 = require("./store");
44
+ const inbox_1 = require("./inbox");
45
+ const git_1 = require("./git");
46
+ const model_1 = require("./model");
47
+ function terminal(status) {
48
+ return Boolean(status && !['inProgress', 'in_progress', 'running'].includes(status));
49
+ }
50
+ async function runChipWorker(id, client, pollMs = 2_000, initialPrompt) {
51
+ let manifest = (0, store_1.readManifest)(id);
52
+ if (!manifest)
53
+ throw new Error(`Unknown chip: ${id}`);
54
+ const ownsClient = !client;
55
+ const app = client || new codex_app_server_client_1.CodexAppServerClient({ timeoutMs: 30_000, transport: manifest.codex.transport });
56
+ try {
57
+ await app.initialize();
58
+ await assertModelAvailable(app, manifest);
59
+ let threadId = manifest.codex.threadId;
60
+ if (threadId) {
61
+ await requestWithThreadRetry(app, 'thread/resume', { threadId });
62
+ }
63
+ else {
64
+ const started = await app.request('thread/start', {
65
+ cwd: manifest.worktree.path,
66
+ approvalPolicy: 'never',
67
+ sandbox: manifest.mode === 'read' ? 'read-only' : 'workspace-write',
68
+ model: manifest.codex.model,
69
+ });
70
+ threadId = started.thread?.id;
71
+ }
72
+ if (!threadId)
73
+ throw new Error('Codex app-server thread/start returned no thread id');
74
+ manifest = (0, store_1.updateManifest)(id, { codex: { ...manifest.codex, threadId }, state: 'running' });
75
+ let turnId = manifest.codex.turnId;
76
+ if (!turnId) {
77
+ const turn = await requestWithThreadRetry(app, 'turn/start', {
78
+ threadId,
79
+ cwd: manifest.worktree.path,
80
+ input: [{
81
+ type: 'text',
82
+ text: initialPrompt || (0, prompt_1.chipPrompt)(manifest, manifest.codex.cliCommand || [
83
+ `"${(0, codex_startup_1.stableExecutable)(process.execPath).replace(/"/g, '\\"')}"`,
84
+ `"${path.join(__dirname, '..', '..', 'index.js').replace(/"/g, '\\"')}"`,
85
+ ].join(' ')),
86
+ }],
87
+ clientUserMessageId: `greprag-chip-${manifest.id}`,
88
+ responsesapiClientMetadata: { greprag_chip_id: manifest.id, greprag_role: 'chip' },
89
+ model: manifest.codex.model,
90
+ effort: manifest.codex.effort,
91
+ sandboxPolicy: manifest.mode === 'read'
92
+ ? { type: 'readOnly', networkAccess: true }
93
+ : {
94
+ type: 'workspaceWrite', networkAccess: true,
95
+ writableRoots: [manifest.worktree.path],
96
+ },
97
+ });
98
+ turnId = turn.turn?.id;
99
+ }
100
+ manifest = (0, store_1.updateManifest)(id, { codex: { ...manifest.codex, threadId, turnId } });
101
+ await (0, inbox_1.sendChipEvent)(manifest, manifest.parent.sessionId, {
102
+ kind: 'running',
103
+ summary: `${manifest.name} started in Codex task ${threadId.slice(0, 8)}.`,
104
+ }, threadId);
105
+ while (turnId) {
106
+ await new Promise(resolve => setTimeout(resolve, pollMs));
107
+ const current = (0, store_1.readManifest)(id);
108
+ // A report is submitted from inside the still-running turn. Keep the
109
+ // app-server alive until that turn actually settles or Codex can lose its
110
+ // final response immediately after a successful report.
111
+ if (!current)
112
+ return;
113
+ if (['cancelled', 'failed'].includes(current.state)) {
114
+ (0, store_1.updateManifest)(id, {
115
+ worker: { pid: process.pid, heartbeatAt: new Date().toISOString(), settledAt: new Date().toISOString() },
116
+ });
117
+ return;
118
+ }
119
+ (0, store_1.updateManifest)(id, {
120
+ worker: { pid: process.pid, heartbeatAt: new Date().toISOString() },
121
+ });
122
+ const receiptState = await processChipReceipt(id);
123
+ if (receiptState) {
124
+ manifest = receiptState;
125
+ if (['ready', 'blocked'].includes(receiptState.state)) {
126
+ (0, store_1.updateManifest)(id, {
127
+ worker: {
128
+ pid: process.pid,
129
+ heartbeatAt: new Date().toISOString(),
130
+ settledAt: new Date().toISOString(),
131
+ },
132
+ });
133
+ return;
134
+ }
135
+ }
136
+ const result = await requestWithThreadRetry(app, 'thread/turns/list', {
137
+ threadId, limit: 10, sortDirection: 'desc', itemsView: 'notLoaded',
138
+ });
139
+ const row = result.data?.find(item => item.id === turnId);
140
+ if (terminal(row?.status))
141
+ break;
142
+ }
143
+ manifest = (0, store_1.readManifest)(id) || manifest;
144
+ manifest = (0, store_1.updateManifest)(id, {
145
+ worker: { pid: process.pid, heartbeatAt: new Date().toISOString(), settledAt: new Date().toISOString() },
146
+ });
147
+ if (manifest.mode === 'read' && manifest.state === 'running') {
148
+ const commit = (0, git_1.headCommit)(manifest.worktree.path);
149
+ const files = (0, git_1.changedFiles)(manifest.worktree.path, manifest.parent.baseSha);
150
+ if ((0, git_1.isDirty)(manifest.worktree.path) || commit !== manifest.parent.baseSha || files.length > 0) {
151
+ manifest = (0, store_1.updateManifest)(id, { state: 'failed', error: 'Read-only chip modified repository state.' });
152
+ }
153
+ else {
154
+ const summary = await readFinalSummary(app, threadId);
155
+ if (!summary) {
156
+ const error = `Codex turn completed without assistant output for model ${manifest.codex.model}; update Codex or choose a supported --model.`;
157
+ manifest = (0, store_1.updateManifest)(id, { state: 'failed', error });
158
+ await (0, inbox_1.sendChipEvent)(manifest, manifest.parent.sessionId, {
159
+ kind: 'failed', summary: error,
160
+ }, manifest.codex.threadId);
161
+ }
162
+ else if (/^BLOCKED:/i.test(summary)) {
163
+ manifest = (0, store_1.updateManifest)(id, { state: 'blocked', error: summary.replace(/^BLOCKED:\s*/i, '') });
164
+ await (0, inbox_1.sendChipEvent)(manifest, manifest.parent.sessionId, {
165
+ kind: 'blocked', summary: manifest.error || summary,
166
+ }, manifest.codex.threadId);
167
+ }
168
+ else {
169
+ manifest = (0, store_1.updateManifest)(id, {
170
+ state: 'ready', error: undefined,
171
+ report: {
172
+ summary, commit, changedFiles: [], checks: ['read-only repository state verified'],
173
+ reportedAt: new Date().toISOString(),
174
+ },
175
+ });
176
+ await (0, inbox_1.sendChipEvent)(manifest, manifest.parent.sessionId, {
177
+ kind: 'reported', summary,
178
+ }, manifest.codex.threadId);
179
+ }
180
+ }
181
+ }
182
+ else if (manifest.state === 'running') {
183
+ manifest = (0, store_1.updateManifest)(id, {
184
+ state: 'blocked',
185
+ error: 'Codex turn ended without a successful chip report.',
186
+ });
187
+ await (0, inbox_1.sendChipEvent)(manifest, manifest.parent.sessionId, {
188
+ kind: 'blocked',
189
+ summary: manifest.error || 'Turn ended without a report.',
190
+ }, manifest.codex.threadId);
191
+ }
192
+ }
193
+ catch (err) {
194
+ const message = err.message;
195
+ const current = (0, store_1.readManifest)(id);
196
+ manifest = current && ['cancelled', 'cleaned', 'ready', 'merged'].includes(current.state)
197
+ ? current
198
+ : (0, store_1.updateManifest)(id, {
199
+ state: 'failed', error: message,
200
+ worker: { pid: process.pid, heartbeatAt: new Date().toISOString(), settledAt: new Date().toISOString() },
201
+ });
202
+ if (manifest.state === 'failed') {
203
+ await (0, inbox_1.sendChipEvent)(manifest, manifest.parent.sessionId, { kind: 'failed', summary: message });
204
+ }
205
+ throw err;
206
+ }
207
+ finally {
208
+ if (ownsClient)
209
+ app.close();
210
+ }
211
+ }
212
+ async function assertModelAvailable(app, manifest) {
213
+ if (!manifest.codex.model)
214
+ return;
215
+ const result = await app.request('model/list', { includeHidden: true, limit: 100 });
216
+ const model = result.data?.find(row => row.id === manifest.codex.model || row.model === manifest.codex.model);
217
+ if (!model) {
218
+ throw new Error(`Model ${manifest.codex.model} is not available in this Codex app-server. ` +
219
+ 'Update Codex or choose a supported --model.');
220
+ }
221
+ const supported = model.supportedReasoningEfforts?.map(item => item.reasoningEffort).filter(Boolean) || [];
222
+ if (manifest.codex.effort && supported.length && !supported.includes(manifest.codex.effort)) {
223
+ throw new Error(`Model ${manifest.codex.model} does not support effort ${manifest.codex.effort}.`);
224
+ }
225
+ }
226
+ async function processChipReceipt(id) {
227
+ let manifest = (0, store_1.readManifest)(id);
228
+ if (!manifest)
229
+ throw new Error(`Unknown chip: ${id}`);
230
+ const executionPath = (0, model_1.chipExecutionPath)(manifest);
231
+ const file = (0, git_1.chipReceiptPath)(executionPath);
232
+ let receipt;
233
+ try {
234
+ receipt = JSON.parse(fs.readFileSync(file, 'utf-8'));
235
+ }
236
+ catch {
237
+ return null;
238
+ }
239
+ if (receipt.id !== id)
240
+ throw new Error('Chip receipt id does not match its manifest.');
241
+ if (receipt.type === 'block') {
242
+ manifest = (0, store_1.updateManifest)(id, { state: 'blocked', error: receipt.reason });
243
+ await (0, inbox_1.sendChipEvent)(manifest, manifest.parent.sessionId, {
244
+ kind: 'blocked', summary: receipt.reason,
245
+ }, manifest.codex.threadId);
246
+ fs.rmSync(file, { force: true });
247
+ return manifest;
248
+ }
249
+ const reportedBranch = (0, git_1.branchName)(executionPath);
250
+ if (manifest.codex.runtime !== 'native' && reportedBranch !== manifest.worktree.branch) {
251
+ throw new Error('Reported checkout branch does not match the authoritative manifest.');
252
+ }
253
+ if (manifest.codex.runtime === 'native' && reportedBranch && reportedBranch !== manifest.worktree.branch) {
254
+ throw new Error('Reported native checkout is on an unexpected branch.');
255
+ }
256
+ if ((0, git_1.isDirty)(executionPath))
257
+ throw new Error('Reported chip checkout is dirty.');
258
+ const commit = (0, git_1.headCommit)(executionPath);
259
+ if (commit !== receipt.commit)
260
+ throw new Error('Chip HEAD changed after the report receipt was created.');
261
+ if (!(0, git_1.isCommitAncestor)(executionPath, manifest.parent.baseSha, commit)) {
262
+ throw new Error('Reported chip history does not descend from its recorded base commit.');
263
+ }
264
+ const files = (0, git_1.changedFiles)(executionPath, manifest.parent.baseSha);
265
+ if (manifest.mode === 'write' && commit === manifest.parent.baseSha) {
266
+ throw new Error('Write chip report has no commit beyond its base.');
267
+ }
268
+ if (manifest.mode === 'read' && (commit !== manifest.parent.baseSha || files.length > 0 || (0, git_1.isDirty)(executionPath))) {
269
+ throw new Error('Read-only chip changed repository state.');
270
+ }
271
+ const escaped = (0, git_1.outsideLease)(files, manifest.owns);
272
+ if (escaped.length)
273
+ throw new Error(`Reported files outside the chip lease: ${escaped.join(', ')}`);
274
+ if (manifest.mode === 'write')
275
+ (0, git_1.importBranch)(manifest.parent.root, executionPath, manifest.worktree.branch, commit);
276
+ manifest = (0, store_1.updateManifest)(id, {
277
+ state: 'reported', error: undefined,
278
+ report: {
279
+ summary: receipt.summary, commit, changedFiles: files, checks: receipt.checks,
280
+ reportedAt: new Date().toISOString(),
281
+ },
282
+ });
283
+ await (0, inbox_1.sendChipEvent)(manifest, manifest.parent.sessionId, {
284
+ kind: 'reported',
285
+ summary: `${receipt.summary} Commit ${commit.slice(0, 8)}; checks: ${receipt.checks.join(', ') || 'none declared'}.`,
286
+ }, manifest.codex.threadId);
287
+ manifest = (0, store_1.updateManifest)(id, { state: 'ready' });
288
+ fs.rmSync(file, { force: true });
289
+ return manifest;
290
+ }
291
+ async function readFinalSummary(app, threadId) {
292
+ try {
293
+ const response = await requestWithThreadRetry(app, 'thread/read', { threadId, includeTurns: true });
294
+ const texts = [];
295
+ const visit = (value) => {
296
+ if (Array.isArray(value))
297
+ return value.forEach(visit);
298
+ if (!value || typeof value !== 'object')
299
+ return;
300
+ const row = value;
301
+ if (row.type === 'agentMessage' || row.type === 'assistantMessage') {
302
+ if (typeof row.text === 'string')
303
+ texts.push(row.text.trim());
304
+ if (typeof row.message === 'string')
305
+ texts.push(row.message.trim());
306
+ if (Array.isArray(row.content)) {
307
+ for (const part of row.content) {
308
+ if (part && typeof part === 'object' && typeof part.text === 'string') {
309
+ texts.push((part.text).trim());
310
+ }
311
+ }
312
+ }
313
+ }
314
+ Object.values(row).forEach(visit);
315
+ };
316
+ visit(app.notifications || []);
317
+ visit(response);
318
+ if (process.env.GREPRAG_CODEX_CHIP_DEBUG === '1') {
319
+ const relevant = (app.notifications || []).filter(entry => /item|agent|message|turn\/completed|turn\/failed|error/i.test(entry.method));
320
+ process.stderr.write(`[codex-chip debug] notifications=${JSON.stringify(relevant.slice(-30))}\n`);
321
+ }
322
+ return texts.filter(Boolean).pop() || null;
323
+ }
324
+ catch {
325
+ return null;
326
+ }
327
+ }
328
+ async function requestWithThreadRetry(app, method, params, attempts = 8) {
329
+ let last;
330
+ for (let attempt = 0; attempt < attempts; attempt++) {
331
+ try {
332
+ return await app.request(method, params);
333
+ }
334
+ catch (err) {
335
+ last = err;
336
+ const message = err.message || '';
337
+ if (!/thread-store internal error|failed to read thread|rollout .* empty/i.test(message))
338
+ throw err;
339
+ await new Promise(resolve => setTimeout(resolve, 150 * (attempt + 1)));
340
+ }
341
+ }
342
+ throw last;
343
+ }
344
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/commands/codex-chip/worker.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,7 @@ const path = __importStar(require("path"));
40
40
  const proc_1 = require("../proc");
41
41
  const session_id_1 = require("../session-id");
42
42
  const codex_wake_test_1 = require("./codex-wake-test");
43
+ const codex_watch_health_1 = require("./codex-watch-health");
43
44
  const API_URL_DEFAULT = 'https://api.greprag.com';
44
45
  function home() {
45
46
  return process.env.HOME || process.env.USERPROFILE || os.homedir();
@@ -169,6 +170,8 @@ async function doctorCodex(args, deps) {
169
170
  const hooks = readCodexHooks();
170
171
  const version = runCodex(['--version']);
171
172
  const versionText = version.ok ? version.text : 'not found on PATH';
173
+ const supervisor = (0, codex_watch_health_1.supervisorStatus)();
174
+ const exact = session8 ? (0, codex_watch_health_1.exactWatcherStatus)(session8) : null;
172
175
  console.log('Codex doctor\n');
173
176
  console.log(` Codex CLI: ${versionText}`);
174
177
  console.log(` API key: ${cfg.apiKey ? 'configured' : 'missing (run greprag init --codex --tenant-id <handle>)'}`);
@@ -176,6 +179,10 @@ async function doctorCodex(args, deps) {
176
179
  console.log(` Hooks file: ${fs.existsSync(hooksPath) ? hooksPath : 'missing'}`);
177
180
  console.log(' Hook trust: Codex Desktop Settings -> Settings -> Hooks, then trust the GrepRAG hooks');
178
181
  console.log(` Startup watcher: ${startup.installed ? 'installed' : 'not installed'} (${startup.path})`);
182
+ console.log(` Supervisor: ${supervisor.state} (${supervisor.detail})`);
183
+ if (session8) {
184
+ console.log(` Delivery health: ${exact.state} (${exact.detail})`);
185
+ }
179
186
  console.log('');
180
187
  console.log(' Expected hooks:');
181
188
  console.log(` SessionStart recap: ${hasHook(hooks, 'SessionStart', 'recap') ? 'yes' : 'no'}`);
@@ -205,7 +212,7 @@ async function doctorCodex(args, deps) {
205
212
  console.log('');
206
213
  console.log(` Live watchers: ${watchers.length}`);
207
214
  if (session8)
208
- console.log(` This session: ${match ? 'visible in watcher registry' : 'not visible in watcher registry'}`);
215
+ console.log(` This session: ${match ? 'registry-visible' : 'not registry-visible'}; delivery=${exact.state}`);
209
216
  }
210
217
  catch (err) {
211
218
  console.log('');