@principles/pd-cli 1.147.4 → 1.147.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-worker.d.ts","sourceRoot":"","sources":["../../src/commands/codex-worker.ts"],"names":[],"mappings":"AA6BA,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,GAAG,wBAAwB,GAAG,QAAQ,GAAG,UAAU,CAAC;IACjE,2BAA2B,EAAE,OAAO,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA6ED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"codex-worker.d.ts","sourceRoot":"","sources":["../../src/commands/codex-worker.ts"],"names":[],"mappings":"AA6BA,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,GAAG,wBAAwB,GAAG,QAAQ,GAAG,UAAU,CAAC;IACjE,2BAA2B,EAAE,OAAO,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA6ED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DlF;;AAED,kEAAkE"}
|
|
@@ -140,8 +140,20 @@ export async function handleCodexWorker(options) {
|
|
|
140
140
|
process.on('SIGTERM', onSignal);
|
|
141
141
|
try {
|
|
142
142
|
while (!stopped) {
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
// PRI-655: one escaping cycle exception must not kill the daemon —
|
|
144
|
+
// runCodexWorkspaceWorkerCycle reports component failures as degraded
|
|
145
|
+
// results, but anything it still throws would propagate out of this
|
|
146
|
+
// handler (commander's sync parse does not catch action rejections) and
|
|
147
|
+
// crash the process. Log with a next action and keep the loop alive.
|
|
148
|
+
try {
|
|
149
|
+
const result = await runCodexWorkspaceWorkerCycle({ workspaceDir: workspace, env: { CODEX_HOME: process.env.CODEX_HOME } });
|
|
150
|
+
printCycleReport(result, false);
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
154
|
+
console.error(`[PD:CodexWorker] cycle failed: ${message}`);
|
|
155
|
+
console.error(` continuing in ${interval}ms. Investigate: pd codex worker --status --workspace "${workspace}"`);
|
|
156
|
+
}
|
|
145
157
|
if (stopped)
|
|
146
158
|
break;
|
|
147
159
|
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-worker.js","sourceRoot":"","sources":["../../src/commands/codex-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAA+B,MAAM,2BAA2B,CAAC;AACtG,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEzF,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAoBpC,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,IAAa;IAC/D,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,aAAiC,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAY,CAAC;QAC3E,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClC,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC;QACrH,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,6BAA6B,CAAC;IAChD,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,gEAAgE;IAChE,MAAM,EAAE,4BAA4B,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,4BAA4B,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE,UAAU,EAAE,CAAC,CAAC;IAEtH,MAAM,MAAM,GAA4B;QACtC,WAAW;QACX,IAAI,EAAE,OAAO;QACb,SAAS;QACT,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,2BAA2B,EAAE,UAAU;QACvC,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,IAAI,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5F,CAAC;IACF,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG;QACZ,kCAAkC,SAAS,GAAG;QAC9C,WAAW,MAAM,CAAC,IAAI,EAAE;QACxB,qCAAqC,UAAU,EAAE;KAClD,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA8B,EAAE,IAAa;IACrE,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG;QACZ,2BAA2B,MAAM,CAAC,YAAY,GAAG;QACjD,WAAW,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;KACpF,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,EAAC,OAAO,EAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAChC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,gBAAgB,OAAO,CAAC,QAAQ,CAAC,MAAM,QAAQ,OAAO,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;QAC5L,KAAK,CAAC,IAAI,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,YAAY,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,kBAAkB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;QACrK,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/G,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnR,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAA2B;IACjE,wEAAwE;IACxE,sEAAsE;IACtE,wDAAwD;IACxD,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAG;YACZ,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,6BAA6B;YACrC,UAAU,EAAE,yHAAyH;SACtI,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEzD,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC5H,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACjI,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"codex-worker.js","sourceRoot":"","sources":["../../src/commands/codex-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAA+B,MAAM,2BAA2B,CAAC;AACtG,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEzF,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAoBpC,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,IAAa;IAC/D,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,aAAiC,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAY,CAAC;QAC3E,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClC,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC;QACrH,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,6BAA6B,CAAC;IAChD,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,gEAAgE;IAChE,MAAM,EAAE,4BAA4B,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,4BAA4B,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE,UAAU,EAAE,CAAC,CAAC;IAEtH,MAAM,MAAM,GAA4B;QACtC,WAAW;QACX,IAAI,EAAE,OAAO;QACb,SAAS;QACT,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,2BAA2B,EAAE,UAAU;QACvC,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,IAAI,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5F,CAAC;IACF,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG;QACZ,kCAAkC,SAAS,GAAG;QAC9C,WAAW,MAAM,CAAC,IAAI,EAAE;QACxB,qCAAqC,UAAU,EAAE;KAClD,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA8B,EAAE,IAAa;IACrE,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG;QACZ,2BAA2B,MAAM,CAAC,YAAY,GAAG;QACjD,WAAW,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;KACpF,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,EAAC,OAAO,EAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAChC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,gBAAgB,OAAO,CAAC,QAAQ,CAAC,MAAM,QAAQ,OAAO,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;QAC5L,KAAK,CAAC,IAAI,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,YAAY,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,kBAAkB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;QACrK,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/G,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnR,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAA2B;IACjE,wEAAwE;IACxE,sEAAsE;IACtE,wDAAwD;IACxD,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAG;YACZ,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,6BAA6B;YACrC,UAAU,EAAE,yHAAyH;SACtI,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEzD,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC5H,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACjI,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,EAAE,CAAC;YAChB,mEAAmE;YACnE,sEAAsE;YACtE,oEAAoE;YACpE,wEAAwE;YACxE,qEAAqE;YACrE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC5H,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,OAAO,CAAC,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;gBAC3D,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,0DAA0D,SAAS,GAAG,CAAC,CAAC;YACnH,CAAC;YACD,IAAI,OAAO;gBAAE,MAAM;YACnB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,kEAAkE"}
|
package/package.json
CHANGED
|
@@ -160,8 +160,19 @@ export async function handleCodexWorker(options: CodexWorkerOptions): Promise<vo
|
|
|
160
160
|
process.on('SIGTERM', onSignal);
|
|
161
161
|
try {
|
|
162
162
|
while (!stopped) {
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
// PRI-655: one escaping cycle exception must not kill the daemon —
|
|
164
|
+
// runCodexWorkspaceWorkerCycle reports component failures as degraded
|
|
165
|
+
// results, but anything it still throws would propagate out of this
|
|
166
|
+
// handler (commander's sync parse does not catch action rejections) and
|
|
167
|
+
// crash the process. Log with a next action and keep the loop alive.
|
|
168
|
+
try {
|
|
169
|
+
const result = await runCodexWorkspaceWorkerCycle({ workspaceDir: workspace, env: { CODEX_HOME: process.env.CODEX_HOME } });
|
|
170
|
+
printCycleReport(result, false);
|
|
171
|
+
} catch (err) {
|
|
172
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
173
|
+
console.error(`[PD:CodexWorker] cycle failed: ${message}`);
|
|
174
|
+
console.error(` continuing in ${interval}ms. Investigate: pd codex worker --status --workspace "${workspace}"`);
|
|
175
|
+
}
|
|
165
176
|
if (stopped) break;
|
|
166
177
|
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
167
178
|
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRI-655 — `pd codex worker` daemon loop resilience.
|
|
3
|
+
*
|
|
4
|
+
* Drives the REAL handleCodexWorker with only the cycle boundary mocked
|
|
5
|
+
* (importOriginal spread — ERR-115): the first cycle rejects (an exception
|
|
6
|
+
* escaping the adapter's internal component catches), the second resolves.
|
|
7
|
+
* The daemon must (a) log the failure with a next action, (b) keep looping —
|
|
8
|
+
* round two runs, (c) exit cleanly on SIGINT with signal listeners removed.
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
11
|
+
import * as fs from 'node:fs';
|
|
12
|
+
import * as os from 'node:os';
|
|
13
|
+
import * as path from 'node:path';
|
|
14
|
+
|
|
15
|
+
const { mockRunCycle } = vi.hoisted(() => {
|
|
16
|
+
const mockRunCycle = vi.fn();
|
|
17
|
+
return { mockRunCycle };
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
vi.mock('@principles/codex-adapter', async (importOriginal) => {
|
|
21
|
+
const actual = await importOriginal<typeof import('@principles/codex-adapter')>();
|
|
22
|
+
return {
|
|
23
|
+
...actual,
|
|
24
|
+
runCodexWorkspaceWorkerCycle: mockRunCycle,
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const { resolveWorkspaceDir } = vi.hoisted(() => {
|
|
29
|
+
const resolveWorkspaceDir = vi.fn();
|
|
30
|
+
return { resolveWorkspaceDir };
|
|
31
|
+
});
|
|
32
|
+
vi.mock('../../src/resolve-workspace.js', () => ({
|
|
33
|
+
resolveWorkspaceDir,
|
|
34
|
+
}));
|
|
35
|
+
|
|
36
|
+
import { handleCodexWorker } from '../../src/commands/codex-worker.js';
|
|
37
|
+
|
|
38
|
+
describe('codex worker daemon loop resilience (PRI-655)', () => {
|
|
39
|
+
let workspaceDir: string;
|
|
40
|
+
let logSpy: ReturnType<typeof vi.spyOn>;
|
|
41
|
+
let errorSpy: ReturnType<typeof vi.spyOn>;
|
|
42
|
+
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
workspaceDir = fs.mkdtempSync(path.join(os.tmpdir(), 'pd-codex-daemon-'));
|
|
45
|
+
resolveWorkspaceDir.mockReturnValue(workspaceDir);
|
|
46
|
+
logSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
|
47
|
+
errorSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
afterEach(() => {
|
|
51
|
+
vi.restoreAllMocks();
|
|
52
|
+
vi.clearAllMocks();
|
|
53
|
+
fs.rmSync(workspaceDir, { recursive: true, force: true });
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
async function waitForCalls(count: number, timeoutMs = 8000): Promise<void> {
|
|
57
|
+
const deadline = Date.now() + timeoutMs;
|
|
58
|
+
while (mockRunCycle.mock.calls.length < count && Date.now() < deadline) {
|
|
59
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
60
|
+
}
|
|
61
|
+
expect(mockRunCycle.mock.calls.length).toBeGreaterThanOrEqual(count);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
it('a rejected cycle logs with a next action and the daemon SURVIVES to the next round', async () => {
|
|
65
|
+
mockRunCycle
|
|
66
|
+
.mockRejectedValueOnce(new Error('boom: escaping exception'))
|
|
67
|
+
.mockResolvedValue({ workspaceDir, mode: 'ready' });
|
|
68
|
+
|
|
69
|
+
const handler = handleCodexWorker({ workspace: workspaceDir, intervalMs: 1000 });
|
|
70
|
+
|
|
71
|
+
// Review fix (ERR-071 recurrence): the daemon keeps looping with real
|
|
72
|
+
// timers and signal listeners — stop it in finally so assertion failures
|
|
73
|
+
// cannot leak a live background loop into subsequent tests.
|
|
74
|
+
try {
|
|
75
|
+
// Round one rejects; the daemon reports it instead of crashing.
|
|
76
|
+
await waitForCalls(1);
|
|
77
|
+
await vi.waitFor(() => {
|
|
78
|
+
expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('[PD:CodexWorker] cycle failed: boom: escaping exception'));
|
|
79
|
+
expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('Investigate: pd codex worker --status'));
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Round two runs — the loop did not die (the bug: process crash).
|
|
83
|
+
await waitForCalls(2);
|
|
84
|
+
expect(logSpy).toHaveBeenCalledWith(expect.stringContaining(`Codex workspace worker (${workspaceDir})`));
|
|
85
|
+
} finally {
|
|
86
|
+
process.emit('SIGINT');
|
|
87
|
+
await handler.catch(() => undefined);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Clean exit: signal listeners removed (only reached after the finally
|
|
91
|
+
// stopped the daemon, on the happy path AND on assertion failure).
|
|
92
|
+
expect(process.listenerCount('SIGINT')).toBe(0);
|
|
93
|
+
expect(process.listenerCount('SIGTERM')).toBe(0);
|
|
94
|
+
}, 20_000);
|
|
95
|
+
});
|