@claudexor/control-api 3.1.2 → 3.3.7-rc.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.
- package/dist/authorization.d.ts +3 -0
- package/dist/authorization.d.ts.map +1 -0
- package/dist/authorization.js +15 -0
- package/dist/authorization.js.map +1 -0
- package/dist/binary-response.d.ts +5 -0
- package/dist/binary-response.d.ts.map +1 -0
- package/dist/binary-response.js +31 -0
- package/dist/binary-response.js.map +1 -0
- package/dist/candidates.d.ts.map +1 -1
- package/dist/candidates.js +26 -1
- package/dist/candidates.js.map +1 -1
- package/dist/catalog-query.d.ts +317 -0
- package/dist/catalog-query.d.ts.map +1 -0
- package/dist/catalog-query.js +36 -0
- package/dist/catalog-query.js.map +1 -0
- package/dist/daemon-server.d.ts +28 -17
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +119 -223
- package/dist/daemon-server.js.map +1 -1
- package/dist/decision-accept-risk.d.ts +36 -0
- package/dist/decision-accept-risk.d.ts.map +1 -0
- package/dist/decision-accept-risk.js +79 -0
- package/dist/decision-accept-risk.js.map +1 -0
- package/dist/decision-rerun.d.ts +2 -1
- package/dist/decision-rerun.d.ts.map +1 -1
- package/dist/decision-rerun.js +72 -48
- package/dist/decision-rerun.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/maintenance-routes.d.ts +2 -2
- package/dist/maintenance-routes.d.ts.map +1 -1
- package/dist/maintenance-routes.js +11 -10
- package/dist/maintenance-routes.js.map +1 -1
- package/dist/operation-catalog.d.ts +9 -9
- package/dist/operation-catalog.d.ts.map +1 -1
- package/dist/operation-catalog.js +22 -79
- package/dist/operation-catalog.js.map +1 -1
- package/dist/operation-draft.d.ts +3 -0
- package/dist/operation-draft.d.ts.map +1 -0
- package/dist/operation-draft.js +2 -0
- package/dist/operation-draft.js.map +1 -0
- package/dist/operation-parameters.d.ts.map +1 -1
- package/dist/operation-summaries.d.ts +3 -0
- package/dist/operation-summaries.d.ts.map +1 -0
- package/dist/operation-summaries.js +75 -0
- package/dist/operation-summaries.js.map +1 -0
- package/dist/primary-output.d.ts +3 -3
- package/dist/primary-output.d.ts.map +1 -1
- package/dist/primary-output.js +70 -19
- package/dist/primary-output.js.map +1 -1
- package/dist/problem-response.d.ts.map +1 -1
- package/dist/problem-response.js +14 -9
- package/dist/problem-response.js.map +1 -1
- package/dist/project-routes.d.ts +21 -13
- package/dist/project-routes.d.ts.map +1 -1
- package/dist/project-routes.js +80 -34
- package/dist/project-routes.js.map +1 -1
- package/dist/remote-operation-descriptors.d.ts +36 -0
- package/dist/remote-operation-descriptors.d.ts.map +1 -0
- package/dist/remote-operation-descriptors.js +35 -0
- package/dist/remote-operation-descriptors.js.map +1 -0
- package/dist/resource-routes.d.ts +4 -3
- package/dist/resource-routes.d.ts.map +1 -1
- package/dist/resource-routes.js +63 -39
- package/dist/resource-routes.js.map +1 -1
- package/dist/route-stages.d.ts +15 -0
- package/dist/route-stages.d.ts.map +1 -0
- package/dist/route-stages.js +24 -0
- package/dist/route-stages.js.map +1 -0
- package/dist/run-facts-projection.d.ts +35 -0
- package/dist/run-facts-projection.d.ts.map +1 -0
- package/dist/run-facts-projection.js +133 -0
- package/dist/run-facts-projection.js.map +1 -0
- package/dist/run-list-fingerprint.d.ts +7 -0
- package/dist/run-list-fingerprint.d.ts.map +1 -0
- package/dist/run-list-fingerprint.js +68 -0
- package/dist/run-list-fingerprint.js.map +1 -0
- package/dist/run-record.d.ts +4 -0
- package/dist/run-record.d.ts.map +1 -1
- package/dist/run-record.js.map +1 -1
- package/dist/run-retry-routes.d.ts +3 -2
- package/dist/run-retry-routes.d.ts.map +1 -1
- package/dist/run-retry-routes.js +103 -47
- package/dist/run-retry-routes.js.map +1 -1
- package/dist/run-start.d.ts +13 -1
- package/dist/run-start.d.ts.map +1 -1
- package/dist/run-start.js +93 -19
- package/dist/run-start.js.map +1 -1
- package/dist/run-timeline.d.ts.map +1 -1
- package/dist/run-timeline.js +16 -9
- package/dist/run-timeline.js.map +1 -1
- package/dist/thread-lifecycle-routes.d.ts +1 -1
- package/dist/thread-lifecycle-routes.d.ts.map +1 -1
- package/dist/thread-lifecycle-routes.js +3 -4
- package/dist/thread-lifecycle-routes.js.map +1 -1
- package/dist/thread-mutation.d.ts +6 -0
- package/dist/thread-mutation.d.ts.map +1 -1
- package/dist/thread-mutation.js +23 -0
- package/dist/thread-mutation.js.map +1 -1
- package/dist/thread-plan-answer.d.ts +16 -0
- package/dist/thread-plan-answer.d.ts.map +1 -0
- package/dist/thread-plan-answer.js +69 -0
- package/dist/thread-plan-answer.js.map +1 -0
- package/dist/thread-projection.d.ts.map +1 -1
- package/dist/thread-projection.js +10 -0
- package/dist/thread-projection.js.map +1 -1
- package/dist/thread-recovery.d.ts +54 -0
- package/dist/thread-recovery.d.ts.map +1 -0
- package/dist/thread-recovery.js +71 -0
- package/dist/thread-recovery.js.map +1 -0
- package/dist/thread-turn-routes.d.ts +23 -9
- package/dist/thread-turn-routes.d.ts.map +1 -1
- package/dist/thread-turn-routes.js +92 -55
- package/dist/thread-turn-routes.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
2
|
import type { DaemonControlApiOptions, DaemonRunRecord } from "./daemon-server.js";
|
|
3
|
-
import {
|
|
3
|
+
import type { ThreadTurnRouteCtx } from "./thread-turn-routes.js";
|
|
4
4
|
import type { verifyAndDeliver } from "@claudexor/delivery";
|
|
5
5
|
export interface ThreadLifecycleRouteCtx {
|
|
6
6
|
turnCtx: ThreadTurnRouteCtx;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-lifecycle-routes.d.ts","sourceRoot":"","sources":["../src/thread-lifecycle-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAOjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEnF,OAAO,
|
|
1
|
+
{"version":3,"file":"thread-lifecycle-routes.d.ts","sourceRoot":"","sources":["../src/thread-lifecycle-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAOjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC9C,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/D,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACxD,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAAC;IACrD,qBAAqB,CAAC,CAAC,EAAE,KAAK,EAAE;QAC9B,MAAM,EAAE,OAAO,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;KACxB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACf,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC;IAClD,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3F,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC3F,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACzF;AAqBD,sFAAsF;AACtF,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,uBAAuB,EAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,OAAO,CAAC,CAqJlB"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { ControlThread, ControlThreadApplyRequest, ControlThreadApplyResponse, } from "@claudexor/schema";
|
|
2
2
|
import { assertNoInlineSecretValues } from "@claudexor/util";
|
|
3
3
|
import { projectThread } from "./thread-projection.js";
|
|
4
|
-
import { chainThreadMutation } from "./thread-
|
|
5
|
-
import { findActiveMutatingThreadRun } from "./thread-mutation.js";
|
|
4
|
+
import { chainThreadMutation, findActiveMutatingThreadRun } from "./thread-mutation.js";
|
|
6
5
|
async function lifecycle(ctx, threadId, service, res) {
|
|
7
6
|
if (!service) {
|
|
8
7
|
ctx.json(res, 501, { error: "thread lifecycle is not supported by this build" });
|
|
9
8
|
return;
|
|
10
9
|
}
|
|
11
|
-
await chainThreadMutation(ctx.turnCtx, threadId, async () => {
|
|
10
|
+
await chainThreadMutation(ctx.turnCtx.threadTurnChains, threadId, async () => {
|
|
12
11
|
try {
|
|
13
12
|
ctx.json(res, 200, ControlThread.parse(projectThread(await service(threadId), false)));
|
|
14
13
|
}
|
|
@@ -52,7 +51,7 @@ export async function handleThreadLifecycleRoutes(ctx, method, path, req, res) {
|
|
|
52
51
|
ctx.requestError(res, error);
|
|
53
52
|
return true;
|
|
54
53
|
}
|
|
55
|
-
await chainThreadMutation(ctx.turnCtx, threadId, async () => {
|
|
54
|
+
await chainThreadMutation(ctx.turnCtx.threadTurnChains, threadId, async () => {
|
|
56
55
|
try {
|
|
57
56
|
const body = ControlThreadApplyRequest.parse(await ctx.readBody(req));
|
|
58
57
|
assertNoInlineSecretValues(body);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-lifecycle-routes.js","sourceRoot":"","sources":["../src/thread-lifecycle-routes.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"thread-lifecycle-routes.js","sourceRoot":"","sources":["../src/thread-lifecycle-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,4 +3,10 @@ import type { DaemonRunRecord } from "./daemon-server.js";
|
|
|
3
3
|
export declare function findActiveMutatingThreadRun(records: DaemonRunRecord[], threadId: string): DaemonRunRecord | undefined;
|
|
4
4
|
export declare function threadIdOfRun(record: DaemonRunRecord): string | null;
|
|
5
5
|
export declare function assertThreadIdle(record: DaemonRunRecord, listRuns: () => Promise<DaemonRunRecord[]>): Promise<void>;
|
|
6
|
+
/** Serialize one thread mutation and retire the chain entry after settlement. */
|
|
7
|
+
export declare function chainThreadMutation<T>(chains: Map<string, Promise<void>>, threadId: string, work: () => Promise<T>): Promise<T>;
|
|
8
|
+
/** Existing apply/decision mutations require an idle thread but create no turn. */
|
|
9
|
+
export declare function chainIdleRunMutation<T>(chains: Map<string, Promise<void>>, daemon: {
|
|
10
|
+
list(): Promise<DaemonRunRecord[]>;
|
|
11
|
+
}, record: DaemonRunRecord, work: () => Promise<T>): Promise<T>;
|
|
6
12
|
//# sourceMappingURL=thread-mutation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-mutation.d.ts","sourceRoot":"","sources":["../src/thread-mutation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,yEAAyE;AACzE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,EAAE,MAAM,GACf,eAAe,GAAG,SAAS,CAS7B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAMpE;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,GACzC,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
1
|
+
{"version":3,"file":"thread-mutation.d.ts","sourceRoot":"","sources":["../src/thread-mutation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,yEAAyE;AACzE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,EAAE,MAAM,GACf,eAAe,GAAG,SAAS,CAS7B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAMpE;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,GACzC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAClC,MAAM,EAAE;IAAE,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;CAAE,EAC9C,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,CAAC,CAOZ"}
|
package/dist/thread-mutation.js
CHANGED
|
@@ -24,4 +24,27 @@ export async function assertThreadIdle(record, listRuns) {
|
|
|
24
24
|
throw Object.assign(new Error(`thread ${threadId} has an active mutating turn (${active.state})`), { status: 409, code: "thread_busy" });
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
+
/** Serialize one thread mutation and retire the chain entry after settlement. */
|
|
28
|
+
export function chainThreadMutation(chains, threadId, work) {
|
|
29
|
+
const previous = chains.get(threadId) ?? Promise.resolve();
|
|
30
|
+
const chained = previous.catch(() => undefined).then(work);
|
|
31
|
+
const entry = chained
|
|
32
|
+
.then(() => undefined, () => undefined)
|
|
33
|
+
.finally(() => {
|
|
34
|
+
if (chains.get(threadId) === entry)
|
|
35
|
+
chains.delete(threadId);
|
|
36
|
+
});
|
|
37
|
+
chains.set(threadId, entry);
|
|
38
|
+
return chained;
|
|
39
|
+
}
|
|
40
|
+
/** Existing apply/decision mutations require an idle thread but create no turn. */
|
|
41
|
+
export function chainIdleRunMutation(chains, daemon, record, work) {
|
|
42
|
+
const threadId = threadIdOfRun(record);
|
|
43
|
+
if (!threadId)
|
|
44
|
+
return work();
|
|
45
|
+
return chainThreadMutation(chains, threadId, async () => {
|
|
46
|
+
await assertThreadIdle(record, () => daemon.list());
|
|
47
|
+
return work();
|
|
48
|
+
});
|
|
49
|
+
}
|
|
27
50
|
//# sourceMappingURL=thread-mutation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-mutation.js","sourceRoot":"","sources":["../src/thread-mutation.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,UAAU,2BAA2B,CACzC,OAA0B,EAC1B,QAAgB;IAEhB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC1E,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YAChD,CAAC,CAAE,MAAM,CAAC,MAAkC;YAC5C,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAuB;IACnD,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;QAChD,CAAC,CAAE,MAAM,CAAC,MAAkC;QAC5C,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAuB,EACvB,QAA0C;IAE1C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,MAAM,MAAM,GAAG,2BAA2B,CAAC,MAAM,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;IACvE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,UAAU,QAAQ,iCAAiC,MAAM,CAAC,KAAK,GAAG,CAAC,EAC7E,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CACrC,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"thread-mutation.js","sourceRoot":"","sources":["../src/thread-mutation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Validate the one durable relation created by a plan-answer action. The
|
|
2
|
+
* route owns current-head and duplicate admission so every UI/CLI client gets
|
|
3
|
+
* the same fail-closed behavior; prompt text is deliberately irrelevant. */
|
|
4
|
+
export declare function assertPlanAnswerSubmission(input: {
|
|
5
|
+
sourcePlanRunId: string | null;
|
|
6
|
+
implementPlanRunId: string | null;
|
|
7
|
+
mode: string;
|
|
8
|
+
headRunId: string | null;
|
|
9
|
+
threadRunIds: string[];
|
|
10
|
+
turns: Array<Record<string, unknown>>;
|
|
11
|
+
}): void;
|
|
12
|
+
/** Prove the referenced current-head run actually owns an open plan-question
|
|
13
|
+
* artifact. Membership alone is not enough: otherwise a client could attach
|
|
14
|
+
* answer provenance to an arbitrary run and suppress the wrong card. */
|
|
15
|
+
export declare function assertPlanAnswerQuestionsArtifact(text: string | null): void;
|
|
16
|
+
//# sourceMappingURL=thread-plan-answer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-plan-answer.d.ts","sourceRoot":"","sources":["../src/thread-plan-answer.ts"],"names":[],"mappings":"AAEA;;4EAE4E;AAC5E,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvC,GAAG,IAAI,CA+CP;AAED;;wEAEwE;AACxE,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAc3E"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { PlanQuestionsArtifact } from "@claudexor/schema";
|
|
2
|
+
/** Validate the one durable relation created by a plan-answer action. The
|
|
3
|
+
* route owns current-head and duplicate admission so every UI/CLI client gets
|
|
4
|
+
* the same fail-closed behavior; prompt text is deliberately irrelevant. */
|
|
5
|
+
export function assertPlanAnswerSubmission(input) {
|
|
6
|
+
const source = input.sourcePlanRunId;
|
|
7
|
+
if (!source)
|
|
8
|
+
return;
|
|
9
|
+
if (input.implementPlanRunId) {
|
|
10
|
+
throw Object.assign(new Error("a turn cannot answer plan questions and implement a plan at the same time"), {
|
|
11
|
+
status: 400,
|
|
12
|
+
code: "plan_answers_action_conflict",
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
if (input.mode !== "plan") {
|
|
16
|
+
throw Object.assign(new Error("plan answers must be submitted as a plan turn"), {
|
|
17
|
+
status: 400,
|
|
18
|
+
code: "plan_answers_mode_invalid",
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
if (!input.threadRunIds.includes(source)) {
|
|
22
|
+
throw Object.assign(new Error(`answersPlanRunId ${source} is not a run of this thread`), {
|
|
23
|
+
status: 400,
|
|
24
|
+
code: "plan_answers_source_invalid",
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (input.headRunId !== source) {
|
|
28
|
+
throw Object.assign(new Error("the plan is no longer the current thread head; reload before answering"), {
|
|
29
|
+
status: 409,
|
|
30
|
+
code: "plan_answers_stale",
|
|
31
|
+
requiredActions: ["reload_thread"],
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const accepted = input.turns.find((turn) => {
|
|
35
|
+
if (turn["answers_plan_run_id"] !== source)
|
|
36
|
+
return false;
|
|
37
|
+
if (typeof turn["run_id"] === "string")
|
|
38
|
+
return true;
|
|
39
|
+
const refusal = turn["enqueue_error"];
|
|
40
|
+
return refusal == null || refusal.retryable !== false;
|
|
41
|
+
});
|
|
42
|
+
if (accepted) {
|
|
43
|
+
throw Object.assign(new Error("answers for this plan were already submitted"), {
|
|
44
|
+
status: 409,
|
|
45
|
+
code: "plan_answers_already_submitted",
|
|
46
|
+
requiredActions: ["reload_thread"],
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Prove the referenced current-head run actually owns an open plan-question
|
|
51
|
+
* artifact. Membership alone is not enough: otherwise a client could attach
|
|
52
|
+
* answer provenance to an arbitrary run and suppress the wrong card. */
|
|
53
|
+
export function assertPlanAnswerQuestionsArtifact(text) {
|
|
54
|
+
let raw;
|
|
55
|
+
try {
|
|
56
|
+
raw = text == null ? null : JSON.parse(text);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
raw = null;
|
|
60
|
+
}
|
|
61
|
+
const parsed = PlanQuestionsArtifact.safeParse(raw);
|
|
62
|
+
if (!parsed.success || parsed.data.parse !== "found" || parsed.data.questions.length === 0) {
|
|
63
|
+
throw Object.assign(new Error("the referenced run has no readable open plan questions"), {
|
|
64
|
+
status: 400,
|
|
65
|
+
code: "plan_answers_source_not_open",
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=thread-plan-answer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-plan-answer.js","sourceRoot":"","sources":["../src/thread-plan-answer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-projection.d.ts","sourceRoot":"","sources":["../src/thread-projection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAsC,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE3F,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,SAAS,eAAe,EAAE,GAC/B,MAAM,EAAE,CAIV;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,aAAa,CAwB9E;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAW3D;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CACzB,OAAO,EAAE,iBAAiB,EAC1B,oBAAoB,GAAE,SAAS,MAAM,EAAO,GAC3C,kBAAkB,
|
|
1
|
+
{"version":3,"file":"thread-projection.d.ts","sourceRoot":"","sources":["../src/thread-projection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAsC,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE3F,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,SAAS,eAAe,EAAE,GAC/B,MAAM,EAAE,CAIV;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,aAAa,CAwB9E;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAW3D;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CACzB,OAAO,EAAE,iBAAiB,EAC1B,oBAAoB,GAAE,SAAS,MAAM,EAAO,GAC3C,kBAAkB,CAepB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,EAC5C,IAAI,EAAE,SAAS,eAAe,EAAE,EAChC,SAAS,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,iBAAiB,GACxD,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAWjC;AAED,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GACrC,iBAAiB,CAwFnB"}
|
|
@@ -53,6 +53,7 @@ export function turnRunCard(summary, delegatedChildRunIds = []) {
|
|
|
53
53
|
strategy: summary.strategy ?? null,
|
|
54
54
|
n: summary.n,
|
|
55
55
|
result: summary.result,
|
|
56
|
+
outcomeFacts: summary.outcomeFacts,
|
|
56
57
|
spendUsd: summary.spendUsd ?? null,
|
|
57
58
|
outputReadyState: summary.outputReadyState,
|
|
58
59
|
waitingOnUser: summary.waitingOnUser,
|
|
@@ -83,6 +84,7 @@ export function projectTurn(raw, cards) {
|
|
|
83
84
|
threadId: t["thread_id"],
|
|
84
85
|
runId,
|
|
85
86
|
parentRunId: t["parent_run_id"] ?? null,
|
|
87
|
+
answersPlanRunId: t["answers_plan_run_id"] ?? null,
|
|
86
88
|
planRunId: t["plan_run_id"] ?? null,
|
|
87
89
|
// INV-081 provenance (QA-046): the durable turn records the frozen plan's
|
|
88
90
|
// SHA-256 and whether the operator implemented over open questions, but the
|
|
@@ -104,6 +106,14 @@ export function projectTurn(raw, cards) {
|
|
|
104
106
|
// Legacy records (pre-retryable) default to true — they came from
|
|
105
107
|
// the runner-hook path, where a job exists to replay.
|
|
106
108
|
retryable: enqueueError.retryable !== false,
|
|
109
|
+
requiredActions: Array.isArray(enqueueError.required_actions)
|
|
110
|
+
? enqueueError.required_actions
|
|
111
|
+
: [],
|
|
112
|
+
context: enqueueError.context &&
|
|
113
|
+
typeof enqueueError.context === "object" &&
|
|
114
|
+
!Array.isArray(enqueueError.context)
|
|
115
|
+
? enqueueError.context
|
|
116
|
+
: {},
|
|
107
117
|
failedAt: String(enqueueError.failed_at ?? ""),
|
|
108
118
|
}
|
|
109
119
|
: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-projection.js","sourceRoot":"","sources":["../src/thread-projection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kCAAkC,EAAwB,MAAM,iBAAiB,CAAC;AAE3F,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,IAAgC;IAEhC,OAAO,kCAAkC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,CAC9D,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,UAAmB;IAC7D,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAA6B,CAAC;IACnD,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAkC,CAAC;IAClE,OAAO,aAAa,CAAC,KAAK,CAAC;QACzB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;QACzB,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI;QAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,aAAa,EAAE,SAAS,EAAE,IAAI,IAAI,UAAU;QAC5C,cAAc,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,MAAM;QAC9C,cAAc,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,IAAI;QAC5C,iBAAiB,EAAE,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE;QAChD,mBAAmB,EAAE,CAAC,CAAC,uBAAuB,CAAC,IAAI,IAAI;QACvD,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI;QAC3B,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,QAAQ;QAC7B,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI;QAClC,UAAU,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI;QACpC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE;QAC1B,SAAS,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI;QACnC,UAAU;QACV,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC;QAC1B,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO,cAAc,CAAC,KAAK,CAAC;QAC1B,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;QACX,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC;QACxB,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC;QAC1B,eAAe,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,IAAI;QAC/C,aAAa,EAAE,CAAC,CAAC,qBAAqB,CAAC,IAAI,IAAI;QAC/C,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI;QAClC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,WAAW,CACzB,OAA0B,EAC1B,
|
|
1
|
+
{"version":3,"file":"thread-projection.js","sourceRoot":"","sources":["../src/thread-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ResourceAttachmentRef } from "@claudexor/schema";
|
|
2
|
+
import type { DaemonFacadeClient, DaemonRunRecord } from "./daemon-server.js";
|
|
3
|
+
export interface ThreadTurnIdempotency {
|
|
4
|
+
key: string;
|
|
5
|
+
client: string;
|
|
6
|
+
request: unknown;
|
|
7
|
+
}
|
|
8
|
+
export interface ThreadRecoveryTurnCreateOptions {
|
|
9
|
+
kind?: unknown;
|
|
10
|
+
parentRunId?: string | null;
|
|
11
|
+
planRunId?: string | null;
|
|
12
|
+
planHash?: string | null;
|
|
13
|
+
planOverridden?: boolean;
|
|
14
|
+
attachments?: ResourceAttachmentRef[];
|
|
15
|
+
}
|
|
16
|
+
export type FindThreadTurnByIdempotency = (id: string, idempotency: ThreadTurnIdempotency) => Promise<{
|
|
17
|
+
id: string;
|
|
18
|
+
} | null>;
|
|
19
|
+
export interface ThreadRecoveryServices {
|
|
20
|
+
createThreadTurn?: (id: string, prompt: string, options: ThreadRecoveryTurnCreateOptions & {
|
|
21
|
+
idempotency?: ThreadTurnIdempotency;
|
|
22
|
+
}) => Promise<unknown>;
|
|
23
|
+
findThreadTurnByIdempotency?: FindThreadTurnByIdempotency;
|
|
24
|
+
threadDetail?: (id: string) => Promise<{
|
|
25
|
+
thread: unknown;
|
|
26
|
+
sessions: unknown[];
|
|
27
|
+
turns: unknown[];
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
interface ThreadTurnCreateReplayServices {
|
|
31
|
+
threadDetail(id: string): Promise<{
|
|
32
|
+
thread: unknown;
|
|
33
|
+
sessions: unknown[];
|
|
34
|
+
turns: unknown[];
|
|
35
|
+
}>;
|
|
36
|
+
findThreadTurnByIdempotency?: FindThreadTurnByIdempotency;
|
|
37
|
+
}
|
|
38
|
+
export declare function assertLatestThreadTurn(turns: unknown[], turnId: string): void;
|
|
39
|
+
/** Read-only admission for ordinary turn create: accepted handle or tail orphan. */
|
|
40
|
+
export declare function inspectThreadTurnCreateReplay(daemon: Pick<DaemonFacadeClient, "findAccepted">, services: ThreadTurnCreateReplayServices, threadId: string, idempotency: ThreadTurnIdempotency): Promise<{
|
|
41
|
+
detail: {
|
|
42
|
+
thread: unknown;
|
|
43
|
+
sessions: unknown[];
|
|
44
|
+
turns: unknown[];
|
|
45
|
+
};
|
|
46
|
+
existingId: string | null;
|
|
47
|
+
accepted: DaemonRunRecord | null;
|
|
48
|
+
}>;
|
|
49
|
+
/** Durable command replay, orphan tail fence, idle fence, then create. */
|
|
50
|
+
export declare function resolveThreadRecoveryTurn(daemon: Pick<DaemonFacadeClient, "list">, services: ThreadRecoveryServices | undefined, source: DaemonRunRecord, threadId: string, prompt: string, options: ThreadRecoveryTurnCreateOptions, idempotency: ThreadTurnIdempotency, findAccepted?: (turnId: string) => Promise<unknown | null | undefined>): Promise<{
|
|
51
|
+
id: string;
|
|
52
|
+
}>;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=thread-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-recovery.d.ts","sourceRoot":"","sources":["../src/thread-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG9E,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACvC;AAED,MAAM,MAAM,2BAA2B,GAAG,CACxC,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,qBAAqB,KAC/B,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAAC;AAEpC,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,CAAC,EAAE,CACjB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,+BAA+B,GAAG;QAAE,WAAW,CAAC,EAAE,qBAAqB,CAAA;KAAE,KAC/E,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,YAAY,CAAC,EAAE,CACb,EAAE,EAAE,MAAM,KACP,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED,UAAU,8BAA8B;IACtC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;IAC9F,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;CAC3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAkB7E;AAkBD,oFAAoF;AACpF,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,EAChD,QAAQ,EAAE,8BAA8B,EACxC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,qBAAqB,GACjC,OAAO,CAAC;IACT,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IACnE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAClC,CAAC,CAsBD;AAED,0EAA0E;AAC1E,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,EACxC,QAAQ,EAAE,sBAAsB,GAAG,SAAS,EAC5C,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,+BAA+B,EACxC,WAAW,EAAE,qBAAqB,EAClC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,GACrE,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAmCzB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { assertThreadIdle } from "./thread-mutation.js";
|
|
2
|
+
export function assertLatestThreadTurn(turns, turnId) {
|
|
3
|
+
const latest = [...turns]
|
|
4
|
+
.reverse()
|
|
5
|
+
.find((turn) => turn !== null &&
|
|
6
|
+
typeof turn === "object" &&
|
|
7
|
+
!Array.isArray(turn) &&
|
|
8
|
+
typeof turn.id === "string");
|
|
9
|
+
if (latest?.id !== turnId) {
|
|
10
|
+
throw Object.assign(new Error(`turn ${turnId} is not the latest turn of this thread; the conversation moved on — send a new message instead`), { code: "thread_turn_not_latest", status: 409, retryable: false });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function assertExistingTurnIsRunless(turn, turnId) {
|
|
14
|
+
if (turn !== null &&
|
|
15
|
+
typeof turn === "object" &&
|
|
16
|
+
!Array.isArray(turn) &&
|
|
17
|
+
typeof turn.run_id === "string") {
|
|
18
|
+
throw Object.assign(new Error(`turn ${turnId} already has a run; its original command is no longer retained — open that run or send a new message instead`), { code: "thread_turn_already_bound", status: 409, retryable: false });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Read-only admission for ordinary turn create: accepted handle or tail orphan. */
|
|
22
|
+
export async function inspectThreadTurnCreateReplay(daemon, services, threadId, idempotency) {
|
|
23
|
+
const existing = await services.findThreadTurnByIdempotency?.(threadId, idempotency);
|
|
24
|
+
const detail = await services.threadDetail(threadId);
|
|
25
|
+
if (!existing)
|
|
26
|
+
return { detail, existingId: null, accepted: null };
|
|
27
|
+
const accepted = await daemon.findAccepted?.({ threadId }, {
|
|
28
|
+
idempotencyKey: idempotency.key,
|
|
29
|
+
clientId: idempotency.client,
|
|
30
|
+
operation: "thread.turn.create",
|
|
31
|
+
idempotencyRequest: idempotency.request,
|
|
32
|
+
});
|
|
33
|
+
if (accepted)
|
|
34
|
+
return { detail, existingId: existing.id, accepted };
|
|
35
|
+
const turn = detail.turns.find((candidate) => candidate["id"] === existing.id);
|
|
36
|
+
assertExistingTurnIsRunless(turn, existing.id);
|
|
37
|
+
assertLatestThreadTurn(detail.turns, existing.id);
|
|
38
|
+
return { detail, existingId: existing.id, accepted: null };
|
|
39
|
+
}
|
|
40
|
+
/** Durable command replay, orphan tail fence, idle fence, then create. */
|
|
41
|
+
export async function resolveThreadRecoveryTurn(daemon, services, source, threadId, prompt, options, idempotency, findAccepted) {
|
|
42
|
+
if (!services?.createThreadTurn || !services.findThreadTurnByIdempotency) {
|
|
43
|
+
throw Object.assign(new Error("thread recovery requires the durable thread idempotency service"), { status: 501, code: "thread_recovery_unavailable" });
|
|
44
|
+
}
|
|
45
|
+
const existing = await services.findThreadTurnByIdempotency(threadId, idempotency);
|
|
46
|
+
if (existing) {
|
|
47
|
+
// Once the daemon accepted this exact command, its original handle wins
|
|
48
|
+
// even if the conversation later advanced. Only a RUNLESS/no-command
|
|
49
|
+
// orphan is eligible for fresh admission, and only while it remains tail.
|
|
50
|
+
if (await findAccepted?.(existing.id))
|
|
51
|
+
return existing;
|
|
52
|
+
if (!services.threadDetail) {
|
|
53
|
+
throw Object.assign(new Error("thread recovery requires the durable thread detail service"), {
|
|
54
|
+
status: 501,
|
|
55
|
+
code: "thread_recovery_unavailable",
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const detail = await services.threadDetail(threadId);
|
|
59
|
+
const turn = detail.turns.find((candidate) => candidate !== null &&
|
|
60
|
+
typeof candidate === "object" &&
|
|
61
|
+
!Array.isArray(candidate) &&
|
|
62
|
+
candidate.id === existing.id);
|
|
63
|
+
assertExistingTurnIsRunless(turn, existing.id);
|
|
64
|
+
assertLatestThreadTurn(detail.turns, existing.id);
|
|
65
|
+
}
|
|
66
|
+
await assertThreadIdle(source, () => daemon.list());
|
|
67
|
+
if (existing)
|
|
68
|
+
return existing;
|
|
69
|
+
return (await services.createThreadTurn(threadId, prompt, { ...options, idempotency }));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=thread-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-recovery.js","sourceRoot":"","sources":["../src/thread-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ServerResponse } from "node:http";
|
|
2
2
|
import { ControlRunStartRequest } from "@claudexor/schema";
|
|
3
|
-
import type { ResourceAttachmentRef } from "@claudexor/schema";
|
|
3
|
+
import type { ResourceAttachmentRef, TurnEnqueueProblem } from "@claudexor/schema";
|
|
4
4
|
import type { DaemonFacadeClient, DaemonRunRecord } from "./daemon-server.js";
|
|
5
5
|
export interface ThreadTurnRouteCtx {
|
|
6
6
|
json(res: ServerResponse, status: number, body: unknown): void;
|
|
@@ -10,6 +10,8 @@ export interface ThreadTurnRouteCtx {
|
|
|
10
10
|
/** The server's single run-start normalizer (scope/prompt/policy validation). */
|
|
11
11
|
normalizeStart(parsed: ControlRunStartRequest): ControlRunStartRequest;
|
|
12
12
|
preflightRunRequirements?: (request: ControlRunStartRequest) => Promise<void>;
|
|
13
|
+
/** Non-durable request checks for a thread turn; Git runs inside its daemon job. */
|
|
14
|
+
preflightThreadRunRequirements?: (request: ControlRunStartRequest) => Promise<void>;
|
|
13
15
|
/** True for terminal job states (the server's TERMINAL_STATES set). */
|
|
14
16
|
isTerminalState(state: string): boolean;
|
|
15
17
|
daemon: DaemonFacadeClient;
|
|
@@ -20,6 +22,7 @@ export interface ThreadTurnRouteCtx {
|
|
|
20
22
|
}>;
|
|
21
23
|
createThreadTurn(id: string, prompt: string, opts: {
|
|
22
24
|
parentRunId?: string | null;
|
|
25
|
+
answersPlanRunId?: string | null;
|
|
23
26
|
planRunId?: string | null;
|
|
24
27
|
planHash?: string | null;
|
|
25
28
|
planOverridden?: boolean;
|
|
@@ -30,15 +33,16 @@ export interface ThreadTurnRouteCtx {
|
|
|
30
33
|
request: unknown;
|
|
31
34
|
};
|
|
32
35
|
}): Promise<unknown>;
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
findThreadTurnByIdempotency?: (id: string, idempotency: {
|
|
37
|
+
key: string;
|
|
38
|
+
client: string;
|
|
39
|
+
request: unknown;
|
|
40
|
+
}) => Promise<{
|
|
41
|
+
id: string;
|
|
42
|
+
} | null>;
|
|
43
|
+
setTurnEnqueueError?: (turnId: string, problem: TurnEnqueueProblem) => void;
|
|
35
44
|
threadTurnChains: Map<string, Promise<void>>;
|
|
36
45
|
}
|
|
37
|
-
/**
|
|
38
|
-
* Chain `work` onto the thread's serialization chain and drop the entry once
|
|
39
|
-
* settled so the Map cannot grow unbounded across a thread's lifetime.
|
|
40
|
-
*/
|
|
41
|
-
export declare function chainThreadMutation<T>(ctx: Pick<ThreadTurnRouteCtx, "threadTurnChains">, threadId: string, work: () => Promise<T>): Promise<T>;
|
|
42
46
|
/** A typed throw's machine code (e.g. the trust gate's), null when absent or
|
|
43
47
|
* non-string (a numeric errno-style `code` must not leak into the typed
|
|
44
48
|
* refusal contract). ONE owner — daemon-server's refusal recorder reuses it. */
|
|
@@ -52,7 +56,17 @@ export declare function errCode(err: unknown): string | null;
|
|
|
52
56
|
* contract: recording must never mask the original error (callers always
|
|
53
57
|
* return it), and errCode yields null for absent/non-string codes.
|
|
54
58
|
*/
|
|
55
|
-
export declare function recordTurnEnqueueFailure(setTurnEnqueueError: ((turnId: string,
|
|
59
|
+
export declare function recordTurnEnqueueFailure(setTurnEnqueueError: ((turnId: string, problem: TurnEnqueueProblem) => void) | undefined, turnId: string | undefined, err: unknown): TurnEnqueueProblem;
|
|
60
|
+
/**
|
|
61
|
+
* Project the same typed refusal used by durable thread storage onto the HTTP
|
|
62
|
+
* problem boundary. Durable storage uses snake_case while ControlProblem uses
|
|
63
|
+
* camelCase; keeping this conversion here prevents one surface from silently
|
|
64
|
+
* dropping remediation or recovery context.
|
|
65
|
+
*/
|
|
66
|
+
export declare function turnEnqueueProblemResponse(problem: TurnEnqueueProblem, identifiers: {
|
|
67
|
+
threadId?: string;
|
|
68
|
+
turnId?: string;
|
|
69
|
+
}): Record<string, unknown>;
|
|
56
70
|
/**
|
|
57
71
|
* POST /threads/:id/turns — create the turn record FIRST (single-writer), then
|
|
58
72
|
* enqueue its run. Per-thread serialization: concurrent turns on one thread
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-turn-routes.d.ts","sourceRoot":"","sources":["../src/thread-turn-routes.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAEL,sBAAsB,EAGvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"thread-turn-routes.d.ts","sourceRoot":"","sources":["../src/thread-turn-routes.ts"],"names":[],"mappings":"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"}
|