@tokenfactory/acc-runner 0.40.16 → 0.40.18
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/chat-lane.d.ts +24 -0
- package/dist/chat-lane.d.ts.map +1 -1
- package/dist/chat-lane.js +198 -65
- package/dist/chat-lane.js.map +1 -1
- package/dist/companion-mirror-socket.d.ts +20 -0
- package/dist/companion-mirror-socket.d.ts.map +1 -1
- package/dist/companion-mirror-socket.js +55 -8
- package/dist/companion-mirror-socket.js.map +1 -1
- package/dist/companion-run.d.ts.map +1 -1
- package/dist/companion-run.js +19 -2
- package/dist/companion-run.js.map +1 -1
- package/dist/companion.d.ts +37 -0
- package/dist/companion.d.ts.map +1 -1
- package/dist/companion.js +102 -5
- package/dist/companion.js.map +1 -1
- package/dist/task-runner.d.ts +30 -0
- package/dist/task-runner.d.ts.map +1 -1
- package/dist/task-runner.js +176 -0
- package/dist/task-runner.js.map +1 -1
- package/package.json +1 -1
package/dist/chat-lane.d.ts
CHANGED
|
@@ -131,6 +131,30 @@ export type ChatFailureDisposition = {
|
|
|
131
131
|
* task_error → error (turn completes 'error')
|
|
132
132
|
*/
|
|
133
133
|
export declare function classifyChatDisposition(classified: ClassifiedExit): ChatFailureDisposition;
|
|
134
|
+
/**
|
|
135
|
+
* FU-9 (CHAT-RT): a TRANSIENT server-side / transport failure the shared claude
|
|
136
|
+
* classifier does NOT recognise (it has no 5xx / "overloaded" rule — see the
|
|
137
|
+
* classifyClaudeExit block, which only the codex classifier mirrors) and would
|
|
138
|
+
* otherwise mis-route to `task_error`, BURNING the operator's turn as a hard
|
|
139
|
+
* `error`. The operator drives chat on the Claude SUBSCRIPTION (interactive
|
|
140
|
+
* session), where a 5xx / "overloaded" / dropped connection mid-turn is EXPECTED
|
|
141
|
+
* and recoverable — so the chat lane must treat it as engine_unavailable and
|
|
142
|
+
* REQUEUE (never burn the turn, never trip the circuit, never exit). Kept
|
|
143
|
+
* chat-lane-local because failure-classifier.ts is the frozen shared taxonomy;
|
|
144
|
+
* this is a chat-lane routing override, not a new global class.
|
|
145
|
+
*
|
|
146
|
+
* The 5xx match is anchored on an HTTP/error context (mirroring the codex
|
|
147
|
+
* classifier's CODEX_UNAVAILABLE_PATTERNS) so a bare "500" in a genuine task
|
|
148
|
+
* reply ("500 files changed") never mis-triggers a requeue.
|
|
149
|
+
*/
|
|
150
|
+
export declare const CHAT_TRANSIENT_SERVER_PATTERNS: readonly RegExp[];
|
|
151
|
+
/**
|
|
152
|
+
* True when `text` carries a transient server/transport failure signal (5xx,
|
|
153
|
+
* overloaded, connection drop) — see CHAT_TRANSIENT_SERVER_PATTERNS. Used by the
|
|
154
|
+
* driver to REQUEUE a turn the shared classifier left as `task_error`, rather
|
|
155
|
+
* than burning it, on the subscription auth path.
|
|
156
|
+
*/
|
|
157
|
+
export declare function isTransientChatServerError(text: string | null | undefined): boolean;
|
|
134
158
|
/**
|
|
135
159
|
* The chat-lane wire seam. Claim goes through the service-role acc.claim_chat_turn
|
|
136
160
|
* RPC (advisory-lock per conversation); stream/complete/requeue carry the
|
package/dist/chat-lane.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-lane.d.ts","sourceRoot":"","sources":["../src/chat-lane.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAsB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAExG,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EAErB,MAAM,oBAAoB,CAAC;AAW5B,kFAAkF;AAClF,eAAO,MAAM,0BAA0B,EAAG,CAAU,CAAC;AAErD,4EAA4E;AAC5E,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,OAAO,GAAG,WAAW,CAAC;AAE3D,iEAAiE;AACjE,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,eAAe,GACf,oBAAoB,GACpB,iBAAiB,GACjB,oBAAoB,GACpB,iBAAiB,CAAC;AAEtB,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAED,0DAA0D;AAC1D,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,0EAA0E;AAC1E,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAMD;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,uBAAuB,GACvB,MAAM,GACN,iBAAiB,GACjB,QAAQ,GACR,WAAW,GACX,UAAU,CAAC;AAEf,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,EAAE,SAAS,iBAAiB,EAM/D,CAAC;AAqBF,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAE7F;AAED,uEAAuE;AACvE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAEzE;AAMD;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,sBAAsB,GAC9B;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAC;IAAC,UAAU,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvF;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAC;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,cAAc,GAAG,sBAAsB,CAoB1F;
|
|
1
|
+
{"version":3,"file":"chat-lane.d.ts","sourceRoot":"","sources":["../src/chat-lane.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAsB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAExG,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EAErB,MAAM,oBAAoB,CAAC;AAW5B,kFAAkF;AAClF,eAAO,MAAM,0BAA0B,EAAG,CAAU,CAAC;AAErD,4EAA4E;AAC5E,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,OAAO,GAAG,WAAW,CAAC;AAE3D,iEAAiE;AACjE,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,eAAe,GACf,oBAAoB,GACpB,iBAAiB,GACjB,oBAAoB,GACpB,iBAAiB,CAAC;AAEtB,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAED,0DAA0D;AAC1D,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,0EAA0E;AAC1E,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAMD;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,uBAAuB,GACvB,MAAM,GACN,iBAAiB,GACjB,QAAQ,GACR,WAAW,GACX,UAAU,CAAC;AAEf,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,EAAE,SAAS,iBAAiB,EAM/D,CAAC;AAqBF,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAE7F;AAED,uEAAuE;AACvE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAEzE;AAMD;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,sBAAsB,GAC9B;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAC;IAAC,UAAU,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvF;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAC;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,cAAc,GAAG,sBAAsB,CAoB1F;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,8BAA8B,EAAE,SAAS,MAAM,EAiB3D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAInF;AAgBD;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,uFAAuF;IACvF,KAAK,CAAC,IAAI,EAAE;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,oBAAoB,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAEpC,8DAA8D;IAC9D,aAAa,CAAC,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD,0CAA0C;IAC1C,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7E,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjF,uDAAuD;IACvD,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChF;AAMD,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,MAAM,EAAE,qBAAqB,CAAC;IAC9B,iDAAiD;IACjD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,mFAAmF;IACnF,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC;IAC5E;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC1D,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,mFAAmF;IACnF,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3F,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC/C;AAED,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,+CAA+C;AAC/C,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,SAAS,EAAE,OAAO,CAChB,iBAAiB,EACjB,MAAM,GAAG,uBAAuB,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,iBAAiB,CAC3F,CAAC;IACF,+EAA+E;IAC/E,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,0CAA0C;IAC1C,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,WAAW,EAAE,OAAO,CAAC;IACrB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAwBD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,mBAAmB,CAAC,CA4M9B;AAMD,gEAAgE;AAChE,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAC9D,yDAAyD;AACzD,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAQ1E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,MAAM,CAeT;AAMD,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,yBAAyB,CAAC;AAC5D,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAC5D,2EAA2E;AAC3E,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAQ5C;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAIzE;AAED,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,oBAAoB,CAOhG"}
|
package/dist/chat-lane.js
CHANGED
|
@@ -104,6 +104,59 @@ export function classifyChatDisposition(classified) {
|
|
|
104
104
|
const reason = cls === "claude_unavailable" ? "engine_unavailable" : "capacity_lost";
|
|
105
105
|
return { action: "requeue", reason, quarantine: false, detail };
|
|
106
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* FU-9 (CHAT-RT): a TRANSIENT server-side / transport failure the shared claude
|
|
109
|
+
* classifier does NOT recognise (it has no 5xx / "overloaded" rule — see the
|
|
110
|
+
* classifyClaudeExit block, which only the codex classifier mirrors) and would
|
|
111
|
+
* otherwise mis-route to `task_error`, BURNING the operator's turn as a hard
|
|
112
|
+
* `error`. The operator drives chat on the Claude SUBSCRIPTION (interactive
|
|
113
|
+
* session), where a 5xx / "overloaded" / dropped connection mid-turn is EXPECTED
|
|
114
|
+
* and recoverable — so the chat lane must treat it as engine_unavailable and
|
|
115
|
+
* REQUEUE (never burn the turn, never trip the circuit, never exit). Kept
|
|
116
|
+
* chat-lane-local because failure-classifier.ts is the frozen shared taxonomy;
|
|
117
|
+
* this is a chat-lane routing override, not a new global class.
|
|
118
|
+
*
|
|
119
|
+
* The 5xx match is anchored on an HTTP/error context (mirroring the codex
|
|
120
|
+
* classifier's CODEX_UNAVAILABLE_PATTERNS) so a bare "500" in a genuine task
|
|
121
|
+
* reply ("500 files changed") never mis-triggers a requeue.
|
|
122
|
+
*/
|
|
123
|
+
export const CHAT_TRANSIENT_SERVER_PATTERNS = [
|
|
124
|
+
/\bhttp[\s/]?5\d\d\b/i,
|
|
125
|
+
/\b5\d\d\b[^\n]{0,40}(?:server|gateway|unavailable|timeout|overloaded|error)/i,
|
|
126
|
+
/(?:server|gateway|unavailable|timeout|overloaded|error)[^\n]{0,40}\b5\d\d\b/i,
|
|
127
|
+
/\boverloaded\b/i,
|
|
128
|
+
/overloaded_error/i,
|
|
129
|
+
/internal server error/i,
|
|
130
|
+
/service unavailable/i,
|
|
131
|
+
/bad gateway/i,
|
|
132
|
+
/gateway time-?out/i,
|
|
133
|
+
/server_?error/i,
|
|
134
|
+
/temporarily unavailable/i,
|
|
135
|
+
/\b(?:econnreset|econnrefused|etimedout|enotfound|epipe|eai_again)\b/i,
|
|
136
|
+
/connection (?:reset|refused|closed|error)/i,
|
|
137
|
+
/socket hang up/i,
|
|
138
|
+
/fetch failed/i,
|
|
139
|
+
/network (?:error|timeout)/i,
|
|
140
|
+
];
|
|
141
|
+
/**
|
|
142
|
+
* True when `text` carries a transient server/transport failure signal (5xx,
|
|
143
|
+
* overloaded, connection drop) — see CHAT_TRANSIENT_SERVER_PATTERNS. Used by the
|
|
144
|
+
* driver to REQUEUE a turn the shared classifier left as `task_error`, rather
|
|
145
|
+
* than burning it, on the subscription auth path.
|
|
146
|
+
*/
|
|
147
|
+
export function isTransientChatServerError(text) {
|
|
148
|
+
const t = (text ?? "").toString();
|
|
149
|
+
if (!t)
|
|
150
|
+
return false;
|
|
151
|
+
return CHAT_TRANSIENT_SERVER_PATTERNS.some((p) => p.test(t));
|
|
152
|
+
}
|
|
153
|
+
/** Best-effort, log-safe text of a thrown value (message + stderr/stdout tail). */
|
|
154
|
+
function errText(err) {
|
|
155
|
+
const e = err;
|
|
156
|
+
const parts = [e?.stderr, e?.message, e?.stdout].filter((s) => typeof s === "string" && s.length > 0);
|
|
157
|
+
const text = parts.length > 0 ? parts.join(" ") : String(err ?? "");
|
|
158
|
+
return text.slice(0, 500);
|
|
159
|
+
}
|
|
107
160
|
/** Coerce an arbitrary thrown value into a `ClassifiedExit` via the shared mapper. */
|
|
108
161
|
function classifyThrown(err, engine) {
|
|
109
162
|
const anyErr = err;
|
|
@@ -147,82 +200,110 @@ export async function driveChatTurn(turn, deps) {
|
|
|
147
200
|
};
|
|
148
201
|
const requeue = async (reason, detail, opts = {}) => {
|
|
149
202
|
if (opts.quarantine) {
|
|
150
|
-
|
|
203
|
+
// FU-9: a throwing circuit-trip hook must never propagate — the process
|
|
204
|
+
// must survive. Best-effort; the requeue below is what protects the turn.
|
|
205
|
+
try {
|
|
206
|
+
await deps.onCircuitTrip?.({ cause: opts.quarantine.cause, detail });
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
emit("requeued", `circuit-trip hook failed: ${errText(err)}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// FU-9: the terminal transport call is the ONE place a transient server 5xx
|
|
213
|
+
// (the subscription cap symptom) could throw AFTER classification. Swallow it
|
|
214
|
+
// so driveChatTurn's promise never rejects: a companion drives turns
|
|
215
|
+
// fire-and-forget, so a reject here would surface as an unhandledRejection and
|
|
216
|
+
// KILL the process (the FU-9 root cause — pids churning, turns stranded). When
|
|
217
|
+
// the requeue POST fails the turn's lease still expires server-side and another
|
|
218
|
+
// claimant (or this runner) re-drives it — no turn is lost, the process lives.
|
|
219
|
+
try {
|
|
220
|
+
await deps.transport.requeue(turn, { reason, requeue_count: turn.requeue_count + 1 });
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
emit("requeued", `requeue transport failed (turn survives via lease expiry): ${errText(err)}`);
|
|
151
224
|
}
|
|
152
|
-
await deps.transport.requeue(turn, { reason, requeue_count: turn.requeue_count + 1 });
|
|
153
225
|
const lifecycle = reason === "capacity_lost" && !opts.quarantine ? "capacity_paused" : "requeued";
|
|
154
226
|
emit(lifecycle, detail);
|
|
155
227
|
return { ...base, totalSeq: seq, lifecycle, requeueReason: reason, quarantined: !!opts.quarantine, detail };
|
|
156
228
|
};
|
|
157
229
|
const complete = async (outcome, lifecycle, detail) => {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
230
|
+
// FU-9: swallow a transport throw here too, for the same process-survival
|
|
231
|
+
// reason as `requeue` above — the driver's promise must never reject.
|
|
232
|
+
try {
|
|
233
|
+
await deps.transport.complete(turn, {
|
|
234
|
+
outcome,
|
|
235
|
+
total_seq: seq,
|
|
236
|
+
...(detail && outcome === "error" ? { error: detail } : {}),
|
|
237
|
+
...(lifecycle === "awaiting_confirmation" ? { awaiting_confirmation: true } : {}),
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
emit(lifecycle, `complete transport failed: ${errText(err)}`);
|
|
242
|
+
}
|
|
164
243
|
emit(lifecycle, detail);
|
|
165
244
|
return { ...base, totalSeq: seq, lifecycle, outcome, detail };
|
|
166
245
|
};
|
|
167
|
-
//
|
|
168
|
-
|
|
169
|
-
|
|
246
|
+
// FU-9: the ENTIRE drive body runs under one outer safety net so the returned
|
|
247
|
+
// promise NEVER rejects. A companion launches turns fire-and-forget (see
|
|
248
|
+
// ChatCompanion.launch), so any reject that escapes here becomes a process-
|
|
249
|
+
// killing unhandledRejection — the exact FU-9 failure (the companion churned
|
|
250
|
+
// through pids on a mid-turn 429/500, each death stranding the queued turn).
|
|
251
|
+
// The inner handlers still produce precise dispositions; this catch is the
|
|
252
|
+
// last-resort requeue for a genuinely-unexpected throw.
|
|
170
253
|
try {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
turnId: turn.id,
|
|
175
|
-
...(deps.cwd !== undefined ? { cwd: deps.cwd } : {}),
|
|
176
|
-
...(deps.delegationToken !== undefined ? { delegationToken: deps.delegationToken } : {}),
|
|
177
|
-
...(deps.signal ? { signal: deps.signal } : {}),
|
|
178
|
-
});
|
|
179
|
-
for await (const chunk of iter) {
|
|
180
|
-
if (deps.signal?.aborted) {
|
|
181
|
-
// Abort observed mid-stream: stop streaming and requeue cleanly. We do
|
|
182
|
-
// NOT emit further deltas or a complete — the turn survives untouched.
|
|
183
|
-
return await requeue(deps.abortReason ?? "operator_cancelled", "aborted mid-stream");
|
|
184
|
-
}
|
|
185
|
-
if (deps.wallClockMs !== undefined && nowMs() - startedAt >= deps.wallClockMs) {
|
|
186
|
-
// CC-7A wall-clock cap: a runaway turn is completed as a terminal error
|
|
187
|
-
// (never requeued) so it cannot re-trip the same cap on retry.
|
|
188
|
-
const elapsed = nowMs() - startedAt;
|
|
189
|
-
return await complete("error", "failed", `wall-clock timeout (${elapsed}ms >= ${deps.wallClockMs}ms)`);
|
|
190
|
-
}
|
|
191
|
-
await deps.transport.stream(turn, { seq: chunk.seq, delta: chunk.delta, done: chunk.done });
|
|
192
|
-
seq = chunk.seq + 1;
|
|
193
|
-
if (chunk.delta) {
|
|
194
|
-
sawText = true;
|
|
195
|
-
fullText += chunk.delta;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
catch (err) {
|
|
200
|
-
if (wasAborted(deps.signal, err)) {
|
|
201
|
-
return await requeue(deps.abortReason ?? "operator_cancelled", "aborted mid-stream");
|
|
254
|
+
// claimed → streaming (guarded: a transport throw here must not reject).
|
|
255
|
+
try {
|
|
256
|
+
await deps.transport.markStreaming?.(turn);
|
|
202
257
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
return await complete("error", "failed", disposition.detail);
|
|
258
|
+
catch (err) {
|
|
259
|
+
return await requeue("engine_unavailable", `markStreaming failed: ${errText(err)}`);
|
|
206
260
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
261
|
+
emit("streaming");
|
|
262
|
+
try {
|
|
263
|
+
const iter = deps.engine.streamTurn({
|
|
264
|
+
prompt: turn.prompt,
|
|
265
|
+
conversationId: turn.conversation_id,
|
|
266
|
+
turnId: turn.id,
|
|
267
|
+
...(deps.cwd !== undefined ? { cwd: deps.cwd } : {}),
|
|
268
|
+
...(deps.delegationToken !== undefined ? { delegationToken: deps.delegationToken } : {}),
|
|
269
|
+
...(deps.signal ? { signal: deps.signal } : {}),
|
|
210
270
|
});
|
|
271
|
+
for await (const chunk of iter) {
|
|
272
|
+
if (deps.signal?.aborted) {
|
|
273
|
+
// Abort observed mid-stream: stop streaming and requeue cleanly. We do
|
|
274
|
+
// NOT emit further deltas or a complete — the turn survives untouched.
|
|
275
|
+
return await requeue(deps.abortReason ?? "operator_cancelled", "aborted mid-stream");
|
|
276
|
+
}
|
|
277
|
+
if (deps.wallClockMs !== undefined && nowMs() - startedAt >= deps.wallClockMs) {
|
|
278
|
+
// CC-7A wall-clock cap: a runaway turn is completed as a terminal error
|
|
279
|
+
// (never requeued) so it cannot re-trip the same cap on retry.
|
|
280
|
+
const elapsed = nowMs() - startedAt;
|
|
281
|
+
return await complete("error", "failed", `wall-clock timeout (${elapsed}ms >= ${deps.wallClockMs}ms)`);
|
|
282
|
+
}
|
|
283
|
+
await deps.transport.stream(turn, { seq: chunk.seq, delta: chunk.delta, done: chunk.done });
|
|
284
|
+
seq = chunk.seq + 1;
|
|
285
|
+
if (chunk.delta) {
|
|
286
|
+
sawText = true;
|
|
287
|
+
fullText += chunk.delta;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
211
290
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
291
|
+
catch (err) {
|
|
292
|
+
if (wasAborted(deps.signal, err)) {
|
|
293
|
+
return await requeue(deps.abortReason ?? "operator_cancelled", "aborted mid-stream");
|
|
294
|
+
}
|
|
295
|
+
const classified = classifyThrown(err, deps.engine);
|
|
296
|
+
const disposition = classifyChatDisposition(classified);
|
|
297
|
+
// FU-9: a transient 5xx / "overloaded" / dropped-connection failure the
|
|
298
|
+
// shared classifier left as `task_error` is EXPECTED on subscription auth
|
|
299
|
+
// and recoverable — REQUEUE it (engine_unavailable) instead of burning the
|
|
300
|
+
// operator's turn as a hard error. Never trips the circuit (a resettable
|
|
301
|
+
// server blip is not a broken credential). Check the raw thrown text, not
|
|
302
|
+
// just the classified detail, so an engine that surfaced the 5xx only in
|
|
303
|
+
// stderr is still caught.
|
|
304
|
+
if (disposition.action === "error" && isTransientChatServerError(errText(err))) {
|
|
305
|
+
return await requeue("engine_unavailable", `transient server error — requeued, not burned: ${classified.detail}`);
|
|
306
|
+
}
|
|
226
307
|
if (disposition.action === "error") {
|
|
227
308
|
return await complete("error", "failed", disposition.detail);
|
|
228
309
|
}
|
|
@@ -233,11 +314,63 @@ export async function driveChatTurn(turn, deps) {
|
|
|
233
314
|
}
|
|
234
315
|
return await requeue(disposition.reason, disposition.detail);
|
|
235
316
|
}
|
|
317
|
+
// Stream ended cleanly. A late abort (signalled after the last chunk) still
|
|
318
|
+
// requeues rather than completing.
|
|
319
|
+
if (deps.signal?.aborted) {
|
|
320
|
+
return await requeue(deps.abortReason ?? "operator_cancelled", "aborted after stream end");
|
|
321
|
+
}
|
|
322
|
+
// A clean stream with zero visible text may be a SILENT engine failure. Probe
|
|
323
|
+
// it (batch-lane parity): an unhealthy probe means the empty turn was really a
|
|
324
|
+
// machine fault, not a genuine empty reply. Guarded: a throwing probe falls
|
|
325
|
+
// back to treating the empty reply as a genuine (ok) empty reply.
|
|
326
|
+
if (!sawText && deps.silentFailureProbe) {
|
|
327
|
+
let probe = null;
|
|
328
|
+
try {
|
|
329
|
+
probe = await deps.silentFailureProbe();
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
probe = null;
|
|
333
|
+
}
|
|
334
|
+
if (probe) {
|
|
335
|
+
const disposition = classifyChatDisposition(probe);
|
|
336
|
+
// FU-9: same transient-server override on the silent-failure path.
|
|
337
|
+
if (disposition.action === "error" && isTransientChatServerError(probe.detail)) {
|
|
338
|
+
return await requeue("engine_unavailable", `transient server error (silent probe) — requeued, not burned: ${probe.detail}`);
|
|
339
|
+
}
|
|
340
|
+
if (disposition.action === "error") {
|
|
341
|
+
return await complete("error", "failed", disposition.detail);
|
|
342
|
+
}
|
|
343
|
+
if (disposition.action === "quarantine_requeue") {
|
|
344
|
+
return await requeue(disposition.reason, disposition.detail, {
|
|
345
|
+
quarantine: { cause: disposition.cause },
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
return await requeue(disposition.reason, disposition.detail);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
// Guarded: a throwing operator-confirmation predicate defaults to "no
|
|
352
|
+
// confirmation" rather than rejecting the driver.
|
|
353
|
+
let needsConfirmation = false;
|
|
354
|
+
try {
|
|
355
|
+
needsConfirmation = deps.requiresConfirmation?.(fullText, turn) ?? false;
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
needsConfirmation = false;
|
|
359
|
+
}
|
|
360
|
+
if (needsConfirmation) {
|
|
361
|
+
return await complete("ok", "awaiting_confirmation");
|
|
362
|
+
}
|
|
363
|
+
return await complete("ok", "done");
|
|
236
364
|
}
|
|
237
|
-
|
|
238
|
-
|
|
365
|
+
catch (err) {
|
|
366
|
+
// Last-resort net: an unexpected throw from anywhere above (e.g. a rejected
|
|
367
|
+
// async iterator that slipped a classification) requeues rather than
|
|
368
|
+
// rejecting, so the companion process always survives.
|
|
369
|
+
if (wasAborted(deps.signal, err)) {
|
|
370
|
+
return await requeue(deps.abortReason ?? "operator_cancelled", "aborted");
|
|
371
|
+
}
|
|
372
|
+
return await requeue("engine_unavailable", `unexpected chat driver error: ${errText(err)}`);
|
|
239
373
|
}
|
|
240
|
-
return await complete("ok", "done");
|
|
241
374
|
}
|
|
242
375
|
/* ------------------------------------------------------------------ *
|
|
243
376
|
* 6. Max-share — the chat-lane concurrency knob
|
package/dist/chat-lane.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-lane.js","sourceRoot":"","sources":["../src/chat-lane.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat-lane.js","sourceRoot":"","sources":["../src/chat-lane.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,13 @@ export declare const MIRROR_SOCKET_HOST: "127.0.0.1";
|
|
|
42
42
|
export declare const MIRROR_TOKEN_QUERY_KEY: "token";
|
|
43
43
|
/** WebSocket close code for an unauthenticated / unauthorised upgrade (policy violation). */
|
|
44
44
|
export declare const MIRROR_CLOSE_UNAUTHORIZED: 1008;
|
|
45
|
+
/**
|
|
46
|
+
* FU-8: how many consecutive ports the mirror tries on an EADDRINUSE clash
|
|
47
|
+
* before giving up (starting at the configured port). A second companion
|
|
48
|
+
* instance clashing on the default 7717 walks 7717→7718→… so a port clash
|
|
49
|
+
* degrades to a different loopback port instead of breaking chat serving.
|
|
50
|
+
*/
|
|
51
|
+
export declare const DEFAULT_MIRROR_PORT_ATTEMPTS: 8;
|
|
45
52
|
/** Mirror-frame lifecycle events (the subset of chat-topic events worth mirroring). */
|
|
46
53
|
export type MirrorFrameEvent = "turn_stream" | "turn_complete" | "turn_requeued";
|
|
47
54
|
/**
|
|
@@ -90,6 +97,12 @@ export interface CompanionMirrorSocketOptions {
|
|
|
90
97
|
onInbound?: (raw: string) => void;
|
|
91
98
|
/** Injected server factory (default: node http.createServer). Test seam. */
|
|
92
99
|
createHttpServer?: () => Server;
|
|
100
|
+
/**
|
|
101
|
+
* FU-8: max consecutive ports to try on an EADDRINUSE clash before failing
|
|
102
|
+
* (default `DEFAULT_MIRROR_PORT_ATTEMPTS`). Ignored for an ephemeral port
|
|
103
|
+
* (`port: 0`), which the OS never clashes on. `1` disables auto-increment.
|
|
104
|
+
*/
|
|
105
|
+
maxPortAttempts?: number;
|
|
93
106
|
}
|
|
94
107
|
/**
|
|
95
108
|
* The loopback mirror server. Construct it with an OUTBOUND broadcast source
|
|
@@ -107,6 +120,13 @@ export declare class CompanionMirrorSocket {
|
|
|
107
120
|
constructor(opts: CompanionMirrorSocketOptions);
|
|
108
121
|
/** Bind the loopback server and begin accepting authed upgrades. */
|
|
109
122
|
start(): Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* Bind `http` to one loopback port. Resolves once listening (recording the
|
|
125
|
+
* bound port, resolving an ephemeral 0), rejects on the first `error` (e.g.
|
|
126
|
+
* EADDRINUSE) so `start` can try the next port. Listeners are one-shot so a
|
|
127
|
+
* failed attempt leaves the server reusable for the next `listen`.
|
|
128
|
+
*/
|
|
129
|
+
private listenOnce;
|
|
110
130
|
/** The bound loopback port (meaningful only after `start`; resolves an ephemeral 0). */
|
|
111
131
|
port(): number;
|
|
112
132
|
/** Live authed browser client count. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"companion-mirror-socket.d.ts","sourceRoot":"","sources":["../src/companion-mirror-socket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D,oFAAoF;AACpF,eAAO,MAAM,kBAAkB,EAAG,WAAoB,CAAC;AAEvD,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,EAAG,OAAgB,CAAC;AAEvD,6FAA6F;AAC7F,eAAO,MAAM,yBAAyB,EAAG,IAAa,CAAC;AAEvD,uFAAuF;AACvF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;AAEjF;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB,EAAE,OAAO,0BAA0B,CAAC;IACpD,MAAM,EAAE,kBAAkB,CAAC;IAC3B,4EAA4E;IAC5E,WAAW,EAAE,IAAI,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,CAAC;IACxB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMlE;AAED,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"companion-mirror-socket.d.ts","sourceRoot":"","sources":["../src/companion-mirror-socket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D,oFAAoF;AACpF,eAAO,MAAM,kBAAkB,EAAG,WAAoB,CAAC;AAEvD,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,EAAG,OAAgB,CAAC;AAEvD,6FAA6F;AAC7F,eAAO,MAAM,yBAAyB,EAAG,IAAa,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,EAAG,CAAU,CAAC;AAEvD,uFAAuF;AACvF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;AAEjF;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB,EAAE,OAAO,0BAA0B,CAAC;IACpD,MAAM,EAAE,kBAAkB,CAAC;IAC3B,4EAA4E;IAC5E,WAAW,EAAE,IAAI,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,CAAC;IACxB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMlE;AAED,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IAChC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,qBAAqB;IAQpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEN,IAAI,EAAE,4BAA4B;IAI/D,oEAAoE;IAC9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD5B;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAkBlB,wFAAwF;IACxF,IAAI,IAAI,MAAM;IAId,wCAAwC;IACxC,WAAW,IAAI,MAAM;IAIrB,2FAA2F;IAC3F,YAAY,IAAI,MAAM;IAItB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM;IA0BjG,4EAA4E;IACtE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5B,OAAO,CAAC,MAAM;CAYf"}
|
|
@@ -44,6 +44,13 @@ export const MIRROR_SOCKET_HOST = "127.0.0.1";
|
|
|
44
44
|
export const MIRROR_TOKEN_QUERY_KEY = "token";
|
|
45
45
|
/** WebSocket close code for an unauthenticated / unauthorised upgrade (policy violation). */
|
|
46
46
|
export const MIRROR_CLOSE_UNAUTHORIZED = 1008;
|
|
47
|
+
/**
|
|
48
|
+
* FU-8: how many consecutive ports the mirror tries on an EADDRINUSE clash
|
|
49
|
+
* before giving up (starting at the configured port). A second companion
|
|
50
|
+
* instance clashing on the default 7717 walks 7717→7718→… so a port clash
|
|
51
|
+
* degrades to a different loopback port instead of breaking chat serving.
|
|
52
|
+
*/
|
|
53
|
+
export const DEFAULT_MIRROR_PORT_ATTEMPTS = 8;
|
|
47
54
|
/** Constant-time token compare that tolerates length mismatch without throwing. */
|
|
48
55
|
export function tokensMatch(a, b) {
|
|
49
56
|
if (a.length === 0 || b.length === 0)
|
|
@@ -103,17 +110,57 @@ export class CompanionMirrorSocket {
|
|
|
103
110
|
}
|
|
104
111
|
wss.handleUpgrade(req, socket, head, (ws) => this.accept(ws));
|
|
105
112
|
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
// FU-8: bind resilience. On an EADDRINUSE clash (a second companion on the
|
|
114
|
+
// same loopback port) walk to the next port instead of throwing — the caller
|
|
115
|
+
// treats a hard failure as "serve mirror-less", so either way a port clash
|
|
116
|
+
// never breaks chat. An ephemeral port (0) can't clash, so it binds once.
|
|
117
|
+
const attempts = this.opts.port === 0 ? 1 : Math.max(1, this.opts.maxPortAttempts ?? DEFAULT_MIRROR_PORT_ATTEMPTS);
|
|
118
|
+
let lastErr = null;
|
|
119
|
+
for (let i = 0; i < attempts; i += 1) {
|
|
120
|
+
const port = this.opts.port === 0 ? 0 : this.opts.port + i;
|
|
121
|
+
try {
|
|
122
|
+
await this.listenOnce(http, port);
|
|
123
|
+
if (port !== this.opts.port) {
|
|
124
|
+
this.opts.onLog?.(`[acc-runner] mirror socket: port ${this.opts.port} in use, bound ${port} instead`);
|
|
125
|
+
}
|
|
126
|
+
this.http = http;
|
|
127
|
+
this.wss = wss;
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
lastErr = err;
|
|
132
|
+
// Only a port clash is retryable; any other bind error fails fast.
|
|
133
|
+
if (lastErr.code !== "EADDRINUSE")
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Give up: drop our upgrade listener so the abandoned server holds nothing,
|
|
138
|
+
// and throw so the caller can fall back to serving mirror-less.
|
|
139
|
+
http.removeAllListeners("upgrade");
|
|
140
|
+
throw lastErr ?? new Error("mirror socket failed to bind");
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Bind `http` to one loopback port. Resolves once listening (recording the
|
|
144
|
+
* bound port, resolving an ephemeral 0), rejects on the first `error` (e.g.
|
|
145
|
+
* EADDRINUSE) so `start` can try the next port. Listeners are one-shot so a
|
|
146
|
+
* failed attempt leaves the server reusable for the next `listen`.
|
|
147
|
+
*/
|
|
148
|
+
listenOnce(http, port) {
|
|
149
|
+
return new Promise((resolve, reject) => {
|
|
150
|
+
const onError = (err) => {
|
|
151
|
+
http.off("listening", onListening);
|
|
152
|
+
reject(err);
|
|
153
|
+
};
|
|
154
|
+
const onListening = () => {
|
|
155
|
+
http.off("error", onError);
|
|
110
156
|
const addr = http.address();
|
|
111
|
-
this.boundPort = typeof addr === "object" && addr ? addr.port :
|
|
157
|
+
this.boundPort = typeof addr === "object" && addr ? addr.port : port;
|
|
112
158
|
resolve();
|
|
113
|
-
}
|
|
159
|
+
};
|
|
160
|
+
http.once("error", onError);
|
|
161
|
+
http.once("listening", onListening);
|
|
162
|
+
http.listen(port, MIRROR_SOCKET_HOST);
|
|
114
163
|
});
|
|
115
|
-
this.http = http;
|
|
116
|
-
this.wss = wss;
|
|
117
164
|
}
|
|
118
165
|
/** The bound loopback port (meaningful only after `start`; resolves an ephemeral 0). */
|
|
119
166
|
port() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"companion-mirror-socket.js","sourceRoot":"","sources":["../src/companion-mirror-socket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,EAAE,YAAY,EAAe,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAkB,MAAM,IAAI,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D,oFAAoF;AACpF,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAoB,CAAC;AAEvD,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAgB,CAAC;AAEvD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAa,CAAC;AAuBvD,mFAAmF;AACnF,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,CAAS;IAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAuB;IACxD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC;
|
|
1
|
+
{"version":3,"file":"companion-mirror-socket.js","sourceRoot":"","sources":["../src/companion-mirror-socket.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"companion-run.d.ts","sourceRoot":"","sources":["../src/companion-run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"companion-run.d.ts","sourceRoot":"","sources":["../src/companion-run.ts"],"names":[],"mappings":"AAiDA,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC,CAqTjE;AAED,+DAA+D;AAC/D,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmB5D;AAED,8DAA8D;AAC9D,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7D;AAED,wCAAwC;AACxC,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK/D"}
|
package/dist/companion-run.js
CHANGED
|
@@ -17,7 +17,7 @@ import { getChatEngine } from "./engines/registry.js";
|
|
|
17
17
|
import { writeMcpConfig } from "./mcp-spawn.js";
|
|
18
18
|
import { ChatCircuitBreaker, getChatCircuit } from "./runtime/chat-circuit-breaker.js";
|
|
19
19
|
import { CompanionMirrorSocket } from "./companion-mirror-socket.js";
|
|
20
|
-
import { CompanionRunner, OwnerConversationSource, createConversationListener, createIdentityBroadcaster, deriveMirrorToken, resolveCompanionConfig, } from "./companion.js";
|
|
20
|
+
import { CompanionRunner, OwnerConversationSource, backfillActiveConversations, createConversationListener, createIdentityBroadcaster, deriveMirrorToken, resolveCompanionConfig, } from "./companion.js";
|
|
21
21
|
import { companionStatusLine, defaultAutostartHost, installAutostart, uninstallAutostart, } from "./companion-autostart.js";
|
|
22
22
|
import { companionBanner, discoverCompanionIdentities, providerForEngine, reportIdentityProbe, resolveBinding, } from "./companion-identity.js";
|
|
23
23
|
import { PACKAGE_VERSION } from "./pkg-version.js";
|
|
@@ -271,6 +271,14 @@ export async function companionCommand() {
|
|
|
271
271
|
await conversationListener.start().catch((err) => {
|
|
272
272
|
console.log(chalk.yellow(`[acc-runner] conversation discovery listener failed to start: ${err.message}`));
|
|
273
273
|
});
|
|
274
|
+
// FU-8: STARTUP BACKFILL — a companion (re)start starts with an empty served
|
|
275
|
+
// set and, before this, only re-learned conversations from a live browser
|
|
276
|
+
// announce (FU-4). Backfill the bound user's conversations that currently have
|
|
277
|
+
// a queued/streaming turn so a restart self-heals and drains the in-flight
|
|
278
|
+
// turn with no manual re-announce. Best-effort (the helper swallows + logs).
|
|
279
|
+
await backfillActiveConversations(supabase, session.user_id, conversations, {
|
|
280
|
+
onLog: (line) => console.log(chalk.gray(line)),
|
|
281
|
+
});
|
|
274
282
|
// HONESTY: the banner states the bound identity (green) or "UNBOUND — not
|
|
275
283
|
// serving provider status" (yellow) with the reason + how to fix. `tone==="ok"`
|
|
276
284
|
// iff bound, so a green-and-silent-while-unbound banner is impossible.
|
|
@@ -278,8 +286,17 @@ export async function companionCommand() {
|
|
|
278
286
|
console.log((banner.tone === "ok" ? chalk.green : chalk.yellow.bold)(banner.headline));
|
|
279
287
|
for (const line of banner.lines)
|
|
280
288
|
console.log(chalk.gray(line));
|
|
289
|
+
// FU-8: mirror.port() > 0 iff the loopback socket actually bound (possibly on
|
|
290
|
+
// an auto-incremented port after a clash); a live mirror that couldn't bind
|
|
291
|
+
// fell back to mirror-less, so report that honestly rather than "127.0.0.1:0".
|
|
292
|
+
const mirrorPort = mirror?.port() ?? 0;
|
|
293
|
+
const mirrorNote = !mirror
|
|
294
|
+
? "; mirror disabled"
|
|
295
|
+
: mirrorPort > 0
|
|
296
|
+
? `; mirror on 127.0.0.1:${mirrorPort}`
|
|
297
|
+
: "; mirror unavailable (port busy — serving mirror-less)";
|
|
281
298
|
console.log(chalk.gray(` serving ${conversations.size()} conversation(s) (discovered live over identity:${session.user_id})` +
|
|
282
|
-
|
|
299
|
+
mirrorNote));
|
|
283
300
|
return {
|
|
284
301
|
async stop() {
|
|
285
302
|
await runner.stop();
|