@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.
Files changed (117) hide show
  1. package/dist/authorization.d.ts +3 -0
  2. package/dist/authorization.d.ts.map +1 -0
  3. package/dist/authorization.js +15 -0
  4. package/dist/authorization.js.map +1 -0
  5. package/dist/binary-response.d.ts +5 -0
  6. package/dist/binary-response.d.ts.map +1 -0
  7. package/dist/binary-response.js +31 -0
  8. package/dist/binary-response.js.map +1 -0
  9. package/dist/candidates.d.ts.map +1 -1
  10. package/dist/candidates.js +26 -1
  11. package/dist/candidates.js.map +1 -1
  12. package/dist/catalog-query.d.ts +317 -0
  13. package/dist/catalog-query.d.ts.map +1 -0
  14. package/dist/catalog-query.js +36 -0
  15. package/dist/catalog-query.js.map +1 -0
  16. package/dist/daemon-server.d.ts +28 -17
  17. package/dist/daemon-server.d.ts.map +1 -1
  18. package/dist/daemon-server.js +119 -223
  19. package/dist/daemon-server.js.map +1 -1
  20. package/dist/decision-accept-risk.d.ts +36 -0
  21. package/dist/decision-accept-risk.d.ts.map +1 -0
  22. package/dist/decision-accept-risk.js +79 -0
  23. package/dist/decision-accept-risk.js.map +1 -0
  24. package/dist/decision-rerun.d.ts +2 -1
  25. package/dist/decision-rerun.d.ts.map +1 -1
  26. package/dist/decision-rerun.js +72 -48
  27. package/dist/decision-rerun.js.map +1 -1
  28. package/dist/index.d.ts +1 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +1 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/maintenance-routes.d.ts +2 -2
  33. package/dist/maintenance-routes.d.ts.map +1 -1
  34. package/dist/maintenance-routes.js +11 -10
  35. package/dist/maintenance-routes.js.map +1 -1
  36. package/dist/operation-catalog.d.ts +9 -9
  37. package/dist/operation-catalog.d.ts.map +1 -1
  38. package/dist/operation-catalog.js +22 -79
  39. package/dist/operation-catalog.js.map +1 -1
  40. package/dist/operation-draft.d.ts +3 -0
  41. package/dist/operation-draft.d.ts.map +1 -0
  42. package/dist/operation-draft.js +2 -0
  43. package/dist/operation-draft.js.map +1 -0
  44. package/dist/operation-parameters.d.ts.map +1 -1
  45. package/dist/operation-summaries.d.ts +3 -0
  46. package/dist/operation-summaries.d.ts.map +1 -0
  47. package/dist/operation-summaries.js +75 -0
  48. package/dist/operation-summaries.js.map +1 -0
  49. package/dist/primary-output.d.ts +3 -3
  50. package/dist/primary-output.d.ts.map +1 -1
  51. package/dist/primary-output.js +70 -19
  52. package/dist/primary-output.js.map +1 -1
  53. package/dist/problem-response.d.ts.map +1 -1
  54. package/dist/problem-response.js +14 -9
  55. package/dist/problem-response.js.map +1 -1
  56. package/dist/project-routes.d.ts +21 -13
  57. package/dist/project-routes.d.ts.map +1 -1
  58. package/dist/project-routes.js +80 -34
  59. package/dist/project-routes.js.map +1 -1
  60. package/dist/remote-operation-descriptors.d.ts +36 -0
  61. package/dist/remote-operation-descriptors.d.ts.map +1 -0
  62. package/dist/remote-operation-descriptors.js +35 -0
  63. package/dist/remote-operation-descriptors.js.map +1 -0
  64. package/dist/resource-routes.d.ts +4 -3
  65. package/dist/resource-routes.d.ts.map +1 -1
  66. package/dist/resource-routes.js +63 -39
  67. package/dist/resource-routes.js.map +1 -1
  68. package/dist/route-stages.d.ts +15 -0
  69. package/dist/route-stages.d.ts.map +1 -0
  70. package/dist/route-stages.js +24 -0
  71. package/dist/route-stages.js.map +1 -0
  72. package/dist/run-facts-projection.d.ts +35 -0
  73. package/dist/run-facts-projection.d.ts.map +1 -0
  74. package/dist/run-facts-projection.js +133 -0
  75. package/dist/run-facts-projection.js.map +1 -0
  76. package/dist/run-list-fingerprint.d.ts +7 -0
  77. package/dist/run-list-fingerprint.d.ts.map +1 -0
  78. package/dist/run-list-fingerprint.js +68 -0
  79. package/dist/run-list-fingerprint.js.map +1 -0
  80. package/dist/run-record.d.ts +4 -0
  81. package/dist/run-record.d.ts.map +1 -1
  82. package/dist/run-record.js.map +1 -1
  83. package/dist/run-retry-routes.d.ts +3 -2
  84. package/dist/run-retry-routes.d.ts.map +1 -1
  85. package/dist/run-retry-routes.js +103 -47
  86. package/dist/run-retry-routes.js.map +1 -1
  87. package/dist/run-start.d.ts +13 -1
  88. package/dist/run-start.d.ts.map +1 -1
  89. package/dist/run-start.js +93 -19
  90. package/dist/run-start.js.map +1 -1
  91. package/dist/run-timeline.d.ts.map +1 -1
  92. package/dist/run-timeline.js +16 -9
  93. package/dist/run-timeline.js.map +1 -1
  94. package/dist/thread-lifecycle-routes.d.ts +1 -1
  95. package/dist/thread-lifecycle-routes.d.ts.map +1 -1
  96. package/dist/thread-lifecycle-routes.js +3 -4
  97. package/dist/thread-lifecycle-routes.js.map +1 -1
  98. package/dist/thread-mutation.d.ts +6 -0
  99. package/dist/thread-mutation.d.ts.map +1 -1
  100. package/dist/thread-mutation.js +23 -0
  101. package/dist/thread-mutation.js.map +1 -1
  102. package/dist/thread-plan-answer.d.ts +16 -0
  103. package/dist/thread-plan-answer.d.ts.map +1 -0
  104. package/dist/thread-plan-answer.js +69 -0
  105. package/dist/thread-plan-answer.js.map +1 -0
  106. package/dist/thread-projection.d.ts.map +1 -1
  107. package/dist/thread-projection.js +10 -0
  108. package/dist/thread-projection.js.map +1 -1
  109. package/dist/thread-recovery.d.ts +54 -0
  110. package/dist/thread-recovery.d.ts.map +1 -0
  111. package/dist/thread-recovery.js +71 -0
  112. package/dist/thread-recovery.js.map +1 -0
  113. package/dist/thread-turn-routes.d.ts +23 -9
  114. package/dist/thread-turn-routes.d.ts.map +1 -1
  115. package/dist/thread-turn-routes.js +92 -55
  116. package/dist/thread-turn-routes.js.map +1 -1
  117. package/package.json +6 -6
@@ -0,0 +1,3 @@
1
+ /** Parse the HTTP Bearer credential without overlapping regular-expression quantifiers. */
2
+ export declare function bearerCredential(header: string | undefined): string | undefined;
3
+ //# sourceMappingURL=authorization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAS/E"}
@@ -0,0 +1,15 @@
1
+ const BEARER_SCHEME = "bearer";
2
+ /** Parse the HTTP Bearer credential without overlapping regular-expression quantifiers. */
3
+ export function bearerCredential(header) {
4
+ if (!header || header.slice(0, BEARER_SCHEME.length).toLowerCase() !== BEARER_SCHEME) {
5
+ return undefined;
6
+ }
7
+ let cursor = BEARER_SCHEME.length;
8
+ if (header[cursor] !== " " && header[cursor] !== "\t")
9
+ return undefined;
10
+ while (header[cursor] === " " || header[cursor] === "\t")
11
+ cursor += 1;
12
+ const credential = header.slice(cursor).trim();
13
+ return credential || undefined;
14
+ }
15
+ //# sourceMappingURL=authorization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization.js","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,QAAQ,CAAC;AAE/B,2FAA2F;AAC3F,MAAM,UAAU,gBAAgB,CAAC,MAA0B;IACzD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,aAAa,EAAE,CAAC;QACrF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;IAClC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACxE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI;QAAE,MAAM,IAAI,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,OAAO,UAAU,IAAI,SAAS,CAAC;AACjC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ServerResponse } from "node:http";
2
+ /** RFC 6266/RFC 5987 filename projection with an ASCII compatibility fallback. */
3
+ export declare function inlineContentDisposition(fileName: string): string;
4
+ export declare function writeBinaryResponse(response: ServerResponse, status: number, body: Buffer, contentType: string, fileName: string): void;
5
+ //# sourceMappingURL=binary-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-response.d.ts","sourceRoot":"","sources":["../src/binary-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,kFAAkF;AAClF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgBjE;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,IAAI,CAiBN"}
@@ -0,0 +1,31 @@
1
+ /** RFC 6266/RFC 5987 filename projection with an ASCII compatibility fallback. */
2
+ export function inlineContentDisposition(fileName) {
3
+ const validUtf8 = Buffer.from(fileName, "utf8")
4
+ .toString("utf8")
5
+ .normalize("NFC")
6
+ .replace(/[\u0000-\u001f\u007f]/g, "_");
7
+ const bounded = [...validUtf8].slice(0, 180).join("") || "remote-file";
8
+ const fallback = [...bounded]
9
+ .map((character) => (/^[A-Za-z0-9._ -]$/.test(character) ? character : "_"))
10
+ .join("")
11
+ .slice(0, 180) || "remote-file";
12
+ const encoded = encodeURIComponent(bounded).replace(/[!'()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
13
+ return `inline; filename="${fallback}"; filename*=UTF-8''${encoded}`;
14
+ }
15
+ export function writeBinaryResponse(response, status, body, contentType, fileName) {
16
+ if (!Buffer.isBuffer(body) ||
17
+ typeof contentType !== "string" ||
18
+ contentType.length === 0 ||
19
+ typeof fileName !== "string" ||
20
+ fileName.length === 0) {
21
+ throw new TypeError("binary response is invalid");
22
+ }
23
+ response.writeHead(status, {
24
+ "content-type": contentType,
25
+ "content-length": body.length,
26
+ "content-disposition": inlineContentDisposition(fileName),
27
+ "cache-control": "private, no-store",
28
+ });
29
+ response.end(body);
30
+ }
31
+ //# sourceMappingURL=binary-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-response.js","sourceRoot":"","sources":["../src/binary-response.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;SAC5C,QAAQ,CAAC,MAAM,CAAC;SAChB,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,aAAa,CAAC;IACvE,MAAM,QAAQ,GACZ,CAAC,GAAG,OAAO,CAAC;SACT,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAC3E,IAAI,CAAC,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,aAAa,CAAC;IACpC,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,CACjD,UAAU,EACV,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CACxE,CAAC;IACF,OAAO,qBAAqB,QAAQ,uBAAuB,OAAO,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAwB,EACxB,MAAc,EACd,IAAY,EACZ,WAAmB,EACnB,QAAgB;IAEhB,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtB,OAAO,WAAW,KAAK,QAAQ;QAC/B,WAAW,CAAC,MAAM,KAAK,CAAC;QACxB,OAAO,QAAQ,KAAK,QAAQ;QAC5B,QAAQ,CAAC,MAAM,KAAK,CAAC,EACrB,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACpD,CAAC;IACD,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE;QACzB,cAAc,EAAE,WAAW;QAC3B,gBAAgB,EAAE,IAAI,CAAC,MAAM;QAC7B,qBAAqB,EAAE,wBAAwB,CAAC,QAAQ,CAAC;QACzD,eAAe,EAAE,mBAAmB;KACrC,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"candidates.d.ts","sourceRoot":"","sources":["../src/candidates.ts"],"names":[],"mappings":"AASA,OAAO,EACL,gBAAgB,EAGhB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAoB3B,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,gBAAgB,EAAE,CA8DjG"}
1
+ {"version":3,"file":"candidates.d.ts","sourceRoot":"","sources":["../src/candidates.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,gBAAgB,EAKhB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAoB3B,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,gBAAgB,EAAE,CA+DjG"}
@@ -7,7 +7,7 @@ import { existsSync, readFileSync, readdirSync } from "node:fs";
7
7
  import { join } from "node:path";
8
8
  import { parse as parseYaml } from "yaml";
9
9
  import { redactSecrets } from "@claudexor/util";
10
- import { ControlCandidate, ReviewFinding, isBlocking, } from "@claudexor/schema";
10
+ import { ControlCandidate, confinementBoundaryProven, ReviewFinding, isBlocking, } from "@claudexor/schema";
11
11
  export function candidatesFor(runDir, decision) {
12
12
  const attemptsDir = join(runDir, "attempts");
13
13
  if (!existsSync(attemptsDir))
@@ -64,6 +64,7 @@ export function candidatesFor(runDir, decision) {
64
64
  }
65
65
  : null,
66
66
  rankingAxes: scorecardRow ? scorecardRow.axes : null,
67
+ confinement: confinementCard(raw),
67
68
  });
68
69
  if (parsed.success)
69
70
  out.push(parsed.data);
@@ -74,6 +75,30 @@ export function candidatesFor(runDir, decision) {
74
75
  function numberOr(v, fallback) {
75
76
  return typeof v === "number" && Number.isFinite(v) && v >= 0 ? v : fallback;
76
77
  }
78
+ function stringOrNull(v) {
79
+ return typeof v === "string" && v.length > 0 ? v : null;
80
+ }
81
+ /**
82
+ * The applied-boundary card, third and last place the absence of a boundary is
83
+ * disclosed (the attempt record and the child's prompt are the other two).
84
+ *
85
+ * `proven` comes from the shared owner rather than from a second reading of the
86
+ * same two fields, so this projection cannot drift into calling an unproven
87
+ * mechanism name a boundary. Null only for an attempt whose record carries
88
+ * neither half — a run that never asked for a boundary at all.
89
+ */
90
+ function confinementCard(raw) {
91
+ const mechanism = stringOrNull(raw.confinement_mechanism);
92
+ const unavailableReason = stringOrNull(raw.confinement_unavailable_reason);
93
+ if (!mechanism && !unavailableReason)
94
+ return null;
95
+ return {
96
+ proven: confinementBoundaryProven(raw),
97
+ mechanism,
98
+ verifiedDeniedPath: stringOrNull(raw.confinement_verified_denied_path),
99
+ unavailableReason,
100
+ };
101
+ }
77
102
  function readYamlMaybe(path) {
78
103
  try {
79
104
  if (!existsSync(path))
@@ -1 +1 @@
1
- {"version":3,"file":"candidates.js","sourceRoot":"","sources":["../src/candidates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"candidates.js","sourceRoot":"","sources":["../src/candidates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,317 @@
1
+ export interface HarnessListQuery {
2
+ fresh?: boolean;
3
+ includeFakes?: boolean;
4
+ harnessIds?: string[];
5
+ }
6
+ export declare function parseHarnessListQuery(url: URL): HarnessListQuery;
7
+ export declare function parseCredentialProfilesSnapshotQuery(url: URL): {
8
+ input: {
9
+ snapshot: boolean;
10
+ };
11
+ schema: import("zod/v3").ZodObject<{
12
+ profiles: import("zod/v3").ZodArray<import("zod/v3").ZodObject<{
13
+ profile: import("zod/v3").ZodEffects<import("zod/v3").ZodObject<{
14
+ profile_id: import("zod/v3").ZodString;
15
+ harness_id: import("zod/v3").ZodString;
16
+ display_name: import("zod/v3").ZodString;
17
+ credential_kind: import("zod/v3").ZodEnum<["config_dir_login", "oauth_token", "api_key"]>;
18
+ isolation_locator: import("zod/v3").ZodDefault<import("zod/v3").ZodNullable<import("zod/v3").ZodString>>;
19
+ secret_ref: import("zod/v3").ZodDefault<import("zod/v3").ZodNullable<import("zod/v3").ZodString>>;
20
+ enabled: import("zod/v3").ZodDefault<import("zod/v3").ZodBoolean>;
21
+ created_at: import("zod/v3").ZodDefault<import("zod/v3").ZodNullable<import("zod/v3").ZodString>>;
22
+ }, "strict", import("zod/v3").ZodTypeAny, {
23
+ profile_id: string;
24
+ harness_id: string;
25
+ display_name: string;
26
+ credential_kind: "api_key" | "config_dir_login" | "oauth_token";
27
+ isolation_locator: string | null;
28
+ secret_ref: string | null;
29
+ enabled: boolean;
30
+ created_at: string | null;
31
+ }, {
32
+ profile_id: string;
33
+ harness_id: string;
34
+ display_name: string;
35
+ credential_kind: "api_key" | "config_dir_login" | "oauth_token";
36
+ isolation_locator?: string | null | undefined;
37
+ secret_ref?: string | null | undefined;
38
+ enabled?: boolean | undefined;
39
+ created_at?: string | null | undefined;
40
+ }>, {
41
+ profile_id: string;
42
+ harness_id: string;
43
+ display_name: string;
44
+ credential_kind: "api_key" | "config_dir_login" | "oauth_token";
45
+ isolation_locator: string | null;
46
+ secret_ref: string | null;
47
+ enabled: boolean;
48
+ created_at: string | null;
49
+ }, {
50
+ profile_id: string;
51
+ harness_id: string;
52
+ display_name: string;
53
+ credential_kind: "api_key" | "config_dir_login" | "oauth_token";
54
+ isolation_locator?: string | null | undefined;
55
+ secret_ref?: string | null | undefined;
56
+ enabled?: boolean | undefined;
57
+ created_at?: string | null | undefined;
58
+ }>;
59
+ status: import("zod/v3").ZodObject<{
60
+ profile_id: import("zod/v3").ZodString;
61
+ harness_id: import("zod/v3").ZodString;
62
+ availability: import("zod/v3").ZodEnum<["available", "unavailable", "unknown"]>;
63
+ verification: import("zod/v3").ZodEnum<["passed", "failed", "not_run"]>;
64
+ verification_source: import("zod/v3").ZodDefault<import("zod/v3").ZodEnum<["local_store", "vendor"]>>;
65
+ detail: import("zod/v3").ZodOptional<import("zod/v3").ZodString>;
66
+ last_verified_at: import("zod/v3").ZodDefault<import("zod/v3").ZodNullable<import("zod/v3").ZodString>>;
67
+ }, "strict", import("zod/v3").ZodTypeAny, {
68
+ profile_id: string;
69
+ harness_id: string;
70
+ availability: "available" | "unavailable" | "unknown";
71
+ verification: "failed" | "not_run" | "passed";
72
+ verification_source: "local_store" | "vendor";
73
+ detail?: string | undefined;
74
+ last_verified_at: string | null;
75
+ }, {
76
+ profile_id: string;
77
+ harness_id: string;
78
+ availability: "available" | "unavailable" | "unknown";
79
+ verification: "failed" | "not_run" | "passed";
80
+ verification_source?: "local_store" | "vendor" | undefined;
81
+ detail?: string | undefined;
82
+ last_verified_at?: string | null | undefined;
83
+ }>;
84
+ identity: import("zod/v3").ZodDefault<import("zod/v3").ZodNullable<import("zod/v3").ZodObject<{
85
+ email: import("zod/v3").ZodOptional<import("zod/v3").ZodString>;
86
+ plan: import("zod/v3").ZodOptional<import("zod/v3").ZodString>;
87
+ }, "strict", import("zod/v3").ZodTypeAny, {
88
+ email?: string | undefined;
89
+ plan?: string | undefined;
90
+ }, {
91
+ email?: string | undefined;
92
+ plan?: string | undefined;
93
+ }>>>;
94
+ }, "strict", import("zod/v3").ZodTypeAny, {
95
+ profile: {
96
+ profile_id: string;
97
+ harness_id: string;
98
+ display_name: string;
99
+ credential_kind: "api_key" | "config_dir_login" | "oauth_token";
100
+ isolation_locator: string | null;
101
+ secret_ref: string | null;
102
+ enabled: boolean;
103
+ created_at: string | null;
104
+ };
105
+ status: {
106
+ profile_id: string;
107
+ harness_id: string;
108
+ availability: "available" | "unavailable" | "unknown";
109
+ verification: "failed" | "not_run" | "passed";
110
+ verification_source: "local_store" | "vendor";
111
+ detail?: string | undefined;
112
+ last_verified_at: string | null;
113
+ };
114
+ identity: {
115
+ email?: string | undefined;
116
+ plan?: string | undefined;
117
+ } | null;
118
+ }, {
119
+ profile: {
120
+ profile_id: string;
121
+ harness_id: string;
122
+ display_name: string;
123
+ credential_kind: "api_key" | "config_dir_login" | "oauth_token";
124
+ isolation_locator?: string | null | undefined;
125
+ secret_ref?: string | null | undefined;
126
+ enabled?: boolean | undefined;
127
+ created_at?: string | null | undefined;
128
+ };
129
+ status: {
130
+ profile_id: string;
131
+ harness_id: string;
132
+ availability: "available" | "unavailable" | "unknown";
133
+ verification: "failed" | "not_run" | "passed";
134
+ verification_source?: "local_store" | "vendor" | undefined;
135
+ detail?: string | undefined;
136
+ last_verified_at?: string | null | undefined;
137
+ };
138
+ identity?: {
139
+ email?: string | undefined;
140
+ plan?: string | undefined;
141
+ } | null | undefined;
142
+ }>, "many">;
143
+ harnessAccounts: import("zod/v3").ZodDefault<import("zod/v3").ZodArray<import("zod/v3").ZodObject<{
144
+ harness_id: import("zod/v3").ZodString;
145
+ native_credentials_enabled: import("zod/v3").ZodBoolean;
146
+ native_login_detected: import("zod/v3").ZodBoolean;
147
+ identity: import("zod/v3").ZodDefault<import("zod/v3").ZodNullable<import("zod/v3").ZodObject<{
148
+ email: import("zod/v3").ZodOptional<import("zod/v3").ZodString>;
149
+ plan: import("zod/v3").ZodOptional<import("zod/v3").ZodString>;
150
+ }, "strict", import("zod/v3").ZodTypeAny, {
151
+ email?: string | undefined;
152
+ plan?: string | undefined;
153
+ }, {
154
+ email?: string | undefined;
155
+ plan?: string | undefined;
156
+ }>>>;
157
+ next_up: import("zod/v3").ZodDiscriminatedUnion<"kind", [import("zod/v3").ZodObject<{
158
+ kind: import("zod/v3").ZodLiteral<"profile">;
159
+ profileId: import("zod/v3").ZodString;
160
+ }, "strict", import("zod/v3").ZodTypeAny, {
161
+ kind: "profile";
162
+ profileId: string;
163
+ }, {
164
+ kind: "profile";
165
+ profileId: string;
166
+ }>, import("zod/v3").ZodObject<{
167
+ kind: import("zod/v3").ZodLiteral<"native">;
168
+ route: import("zod/v3").ZodOptional<import("zod/v3").ZodEnum<["local_session", "api_key"]>>;
169
+ }, "strict", import("zod/v3").ZodTypeAny, {
170
+ kind: "native";
171
+ route?: "api_key" | "local_session" | undefined;
172
+ }, {
173
+ kind: "native";
174
+ route?: "api_key" | "local_session" | undefined;
175
+ }>, import("zod/v3").ZodObject<{
176
+ kind: import("zod/v3").ZodLiteral<"none">;
177
+ reason: import("zod/v3").ZodString;
178
+ }, "strict", import("zod/v3").ZodTypeAny, {
179
+ kind: "none";
180
+ reason: string;
181
+ }, {
182
+ kind: "none";
183
+ reason: string;
184
+ }>]>;
185
+ }, "strict", import("zod/v3").ZodTypeAny, {
186
+ harness_id: string;
187
+ native_credentials_enabled: boolean;
188
+ native_login_detected: boolean;
189
+ identity: {
190
+ email?: string | undefined;
191
+ plan?: string | undefined;
192
+ } | null;
193
+ next_up: {
194
+ kind: "profile";
195
+ profileId: string;
196
+ } | {
197
+ kind: "native";
198
+ route?: "api_key" | "local_session" | undefined;
199
+ } | {
200
+ kind: "none";
201
+ reason: string;
202
+ };
203
+ }, {
204
+ harness_id: string;
205
+ native_credentials_enabled: boolean;
206
+ native_login_detected: boolean;
207
+ identity?: {
208
+ email?: string | undefined;
209
+ plan?: string | undefined;
210
+ } | null | undefined;
211
+ next_up: {
212
+ kind: "profile";
213
+ profileId: string;
214
+ } | {
215
+ kind: "native";
216
+ route?: "api_key" | "local_session" | undefined;
217
+ } | {
218
+ kind: "none";
219
+ reason: string;
220
+ };
221
+ }>, "many">>;
222
+ }, "strict", import("zod/v3").ZodTypeAny, {
223
+ profiles: {
224
+ profile: {
225
+ profile_id: string;
226
+ harness_id: string;
227
+ display_name: string;
228
+ credential_kind: "api_key" | "config_dir_login" | "oauth_token";
229
+ isolation_locator: string | null;
230
+ secret_ref: string | null;
231
+ enabled: boolean;
232
+ created_at: string | null;
233
+ };
234
+ status: {
235
+ profile_id: string;
236
+ harness_id: string;
237
+ availability: "available" | "unavailable" | "unknown";
238
+ verification: "failed" | "not_run" | "passed";
239
+ verification_source: "local_store" | "vendor";
240
+ detail?: string | undefined;
241
+ last_verified_at: string | null;
242
+ };
243
+ identity: {
244
+ email?: string | undefined;
245
+ plan?: string | undefined;
246
+ } | null;
247
+ }[];
248
+ harnessAccounts: {
249
+ harness_id: string;
250
+ native_credentials_enabled: boolean;
251
+ native_login_detected: boolean;
252
+ identity: {
253
+ email?: string | undefined;
254
+ plan?: string | undefined;
255
+ } | null;
256
+ next_up: {
257
+ kind: "profile";
258
+ profileId: string;
259
+ } | {
260
+ kind: "native";
261
+ route?: "api_key" | "local_session" | undefined;
262
+ } | {
263
+ kind: "none";
264
+ reason: string;
265
+ };
266
+ }[];
267
+ }, {
268
+ profiles: {
269
+ profile: {
270
+ profile_id: string;
271
+ harness_id: string;
272
+ display_name: string;
273
+ credential_kind: "api_key" | "config_dir_login" | "oauth_token";
274
+ isolation_locator?: string | null | undefined;
275
+ secret_ref?: string | null | undefined;
276
+ enabled?: boolean | undefined;
277
+ created_at?: string | null | undefined;
278
+ };
279
+ status: {
280
+ profile_id: string;
281
+ harness_id: string;
282
+ availability: "available" | "unavailable" | "unknown";
283
+ verification: "failed" | "not_run" | "passed";
284
+ verification_source?: "local_store" | "vendor" | undefined;
285
+ detail?: string | undefined;
286
+ last_verified_at?: string | null | undefined;
287
+ };
288
+ identity?: {
289
+ email?: string | undefined;
290
+ plan?: string | undefined;
291
+ } | null | undefined;
292
+ }[];
293
+ harnessAccounts?: {
294
+ harness_id: string;
295
+ native_credentials_enabled: boolean;
296
+ native_login_detected: boolean;
297
+ identity?: {
298
+ email?: string | undefined;
299
+ plan?: string | undefined;
300
+ } | null | undefined;
301
+ next_up: {
302
+ kind: "profile";
303
+ profileId: string;
304
+ } | {
305
+ kind: "native";
306
+ route?: "api_key" | "local_session" | undefined;
307
+ } | {
308
+ kind: "none";
309
+ reason: string;
310
+ };
311
+ }[] | undefined;
312
+ }>;
313
+ };
314
+ export declare function parseRunApplicabilityQuery(url: URL): {
315
+ repoRoot: string;
316
+ };
317
+ //# sourceMappingURL=catalog-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-query.d.ts","sourceRoot":"","sources":["../src/catalog-query.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,gBAAgB,CAchE;AAED,wBAAgB,oCAAoC,CAAC,GAAG,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS5D;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,GAAG,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAOzE"}
@@ -0,0 +1,36 @@
1
+ import { assertOnlyQueryParams, optionalBooleanQuery, singleQuery } from "./query.js";
2
+ import { ControlCredentialProfilesResponse, ControlCredentialProfilesSnapshotResponse, } from "@claudexor/schema";
3
+ export function parseHarnessListQuery(url) {
4
+ assertOnlyQueryParams(url, ["fresh", "all", "harness"]);
5
+ const fresh = optionalBooleanQuery(url, "fresh");
6
+ const includeFakes = optionalBooleanQuery(url, "all");
7
+ const harnessValues = url.searchParams.getAll("harness");
8
+ if (harnessValues.some((id) => id.trim().length === 0)) {
9
+ throw new Error("harness query parameters must be non-empty");
10
+ }
11
+ const harnessIds = harnessValues.map((id) => id.trim());
12
+ return {
13
+ ...(fresh === undefined ? {} : { fresh }),
14
+ ...(includeFakes === undefined ? {} : { includeFakes }),
15
+ ...(harnessIds.length === 0 ? {} : { harnessIds }),
16
+ };
17
+ }
18
+ export function parseCredentialProfilesSnapshotQuery(url) {
19
+ assertOnlyQueryParams(url, ["snapshot"]);
20
+ const snapshot = optionalBooleanQuery(url, "snapshot") ?? false;
21
+ return {
22
+ input: { snapshot },
23
+ schema: snapshot
24
+ ? ControlCredentialProfilesSnapshotResponse
25
+ : ControlCredentialProfilesResponse,
26
+ };
27
+ }
28
+ export function parseRunApplicabilityQuery(url) {
29
+ assertOnlyQueryParams(url, ["repoRoot"]);
30
+ const repoRoot = singleQuery(url, "repoRoot");
31
+ if (repoRoot === undefined || repoRoot.trim().length === 0) {
32
+ throw new Error("repoRoot query parameter is required");
33
+ }
34
+ return { repoRoot };
35
+ }
36
+ //# sourceMappingURL=catalog-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-query.js","sourceRoot":"","sources":["../src/catalog-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EACL,iCAAiC,EACjC,yCAAyC,GAC1C,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,UAAU,qBAAqB,CAAC,GAAQ;IAC5C,qBAAqB,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,OAAO;QACL,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACzC,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;QACvD,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oCAAoC,CAAC,GAAQ;IAC3D,qBAAqB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,KAAK,CAAC;IAChE,OAAO;QACL,KAAK,EAAE,EAAE,QAAQ,EAAE;QACnB,MAAM,EAAE,QAAQ;YACd,CAAC,CAAC,yCAAyC;YAC3C,CAAC,CAAC,iCAAiC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,GAAQ;IACjD,qBAAqB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC"}
@@ -3,8 +3,11 @@ import { type ControlOperatorDecisionRecord, type DaemonFacadeClient } from "./r
3
3
  export { type ControlOperatorDecisionRecord, type DaemonFacadeClient, type DaemonRunRecord, } from "./run-record.js";
4
4
  import { type DeliveryCommandServices } from "./run-apply-routes.js";
5
5
  export { normalizeRunStartRequest } from "./run-start.js";
6
+ import { type ProjectRouteServices } from "./project-routes.js";
7
+ export { inlineContentDisposition } from "./binary-response.js";
6
8
  import { type MaintenanceRouteServices } from "./maintenance-routes.js";
7
9
  import { type ResourceRouteServices } from "./resource-routes.js";
10
+ export { resetRunListFingerprintProbeCountForTests, runListFingerprintProbeCountForTests, } from "./run-list-fingerprint.js";
8
11
  import { ControlAuthReadinessRefreshRequest, ResourceAttachmentRef, ControlSetupJobCreateRequest, type ControlRunStartRequest, ControlTrustUpdateRequest, type ControlPendingInteraction } from "@claudexor/schema";
9
12
  export interface DaemonControlApiOptions {
10
13
  token: string;
@@ -19,17 +22,7 @@ export interface DaemonControlApiOptions {
19
22
  run_id: string;
20
23
  }) => void): () => void;
21
24
  };
22
- services?: DeliveryCommandServices & Partial<ResourceRouteServices> & Partial<MaintenanceRouteServices> & {
23
- listProjects?: () => Promise<{
24
- projects: unknown[];
25
- }>;
26
- registerProject?: (input: {
27
- root: string;
28
- idempotencyKey: string;
29
- clientId: string;
30
- }) => Promise<unknown>;
31
- relinkProject?: (id: string, root: string) => Promise<unknown>;
32
- removeProject?: (id: string) => Promise<unknown>;
25
+ services?: DeliveryCommandServices & Partial<ResourceRouteServices> & Partial<MaintenanceRouteServices> & Partial<ProjectRouteServices> & {
33
26
  harnesses?: (input?: {
34
27
  fresh?: boolean;
35
28
  includeFakes?: boolean;
@@ -37,6 +30,7 @@ export interface DaemonControlApiOptions {
37
30
  }) => Promise<unknown>;
38
31
  agentCapabilities?: () => Promise<unknown>;
39
32
  preflightRunRequirements?: (request: ControlRunStartRequest) => Promise<void>;
33
+ preflightThreadRunRequirements?: (request: ControlRunStartRequest) => Promise<void>;
40
34
  harnessModels?: (input: {
41
35
  harnessId: string;
42
36
  route?: "local_session" | "api_key";
@@ -66,7 +60,12 @@ export interface DaemonControlApiOptions {
66
60
  updateSettings?: (patch: unknown) => Promise<unknown>;
67
61
  quota?: () => Promise<unknown>;
68
62
  refreshQuota?: () => Promise<unknown>;
69
- credentialProfiles?: () => Promise<unknown>;
63
+ credentialProfiles?: (input?: {
64
+ snapshot?: boolean;
65
+ }) => Promise<unknown>;
66
+ runApplicability?: (input: {
67
+ repoRoot: string;
68
+ }) => Promise<unknown>;
70
69
  createCredentialProfile?: (input: unknown) => Promise<unknown>;
71
70
  updateCredentialProfile?: (input: unknown) => Promise<unknown>;
72
71
  deleteCredentialProfile?: (input: unknown) => Promise<unknown>;
@@ -79,11 +78,19 @@ export interface DaemonControlApiOptions {
79
78
  message?: string;
80
79
  };
81
80
  operatorDecision?: (runId: string, params: unknown) => ControlOperatorDecisionRecord | null;
81
+ findOperatorDecisionByIdempotency?: (runId: string, params: unknown, idempotency: {
82
+ key: string;
83
+ client: string;
84
+ request: unknown;
85
+ }) => ControlOperatorDecisionRecord | null;
82
86
  recordOperatorDecision?: (runId: string, params: unknown, decision: ControlOperatorDecisionRecord, idempotency?: {
83
87
  key: string;
84
88
  client: string;
85
89
  request: unknown;
86
- }) => ControlOperatorDecisionRecord;
90
+ }) => {
91
+ record: ControlOperatorDecisionRecord;
92
+ reused: boolean;
93
+ };
87
94
  createThread?: (input: unknown) => Promise<unknown>;
88
95
  listThreads?: () => Promise<{
89
96
  threads: unknown[];
@@ -107,6 +114,13 @@ export interface DaemonControlApiOptions {
107
114
  request: unknown;
108
115
  };
109
116
  }) => Promise<unknown>;
117
+ findThreadTurnByIdempotency?: (id: string, idempotency: {
118
+ key: string;
119
+ client: string;
120
+ request: unknown;
121
+ }) => Promise<{
122
+ id: string;
123
+ } | null>;
110
124
  updateThread?: (id: string, patch: {
111
125
  title?: string;
112
126
  state?: string;
@@ -124,7 +138,7 @@ export interface DaemonControlApiOptions {
124
138
  message?: string;
125
139
  gates?: NonNullable<Parameters<typeof verifyAndDeliver>[3]>;
126
140
  }) => Promise<unknown>;
127
- setTurnEnqueueError?: (turnId: string, message: string, code: string | null, retryable?: boolean) => void;
141
+ setTurnEnqueueError?: (turnId: string, problem: import("@claudexor/schema").TurnEnqueueProblem) => void;
128
142
  listTrust?: (input?: {
129
143
  repoRoot?: string;
130
144
  }) => Promise<unknown>;
@@ -205,7 +219,6 @@ export declare class DaemonControlApiServer {
205
219
  * so the decision endpoint rejects accept_risk with a typed problem instead of
206
220
  * a false "Apply is now available" ACK the delivery gate would then refuse. */
207
221
  private runWorkStateVeto;
208
- private recordOperatorDecision;
209
222
  private chainRunMutation;
210
223
  private threadTurnRouteCtx;
211
224
  private runApplyRouteCtx;
@@ -251,6 +264,4 @@ export declare class DaemonControlApiServer {
251
264
  private streamEvents;
252
265
  private pendingInteractionsFor;
253
266
  }
254
- export declare function runListFingerprintProbeCountForTests(): number;
255
- export declare function resetRunListFingerprintProbeCountForTests(): void;
256
267
  //# sourceMappingURL=daemon-server.d.ts.map