@claudexor/cli 1.0.1

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 (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -0
  3. package/dist/args.d.ts +12 -0
  4. package/dist/args.d.ts.map +1 -0
  5. package/dist/args.js +88 -0
  6. package/dist/args.js.map +1 -0
  7. package/dist/attachment-resolver.d.ts +11 -0
  8. package/dist/attachment-resolver.d.ts.map +1 -0
  9. package/dist/attachment-resolver.js +61 -0
  10. package/dist/attachment-resolver.js.map +1 -0
  11. package/dist/capabilities.d.ts +13 -0
  12. package/dist/capabilities.d.ts.map +1 -0
  13. package/dist/capabilities.js +90 -0
  14. package/dist/capabilities.js.map +1 -0
  15. package/dist/claudexord.d.ts +3 -0
  16. package/dist/claudexord.d.ts.map +1 -0
  17. package/dist/claudexord.js +564 -0
  18. package/dist/claudexord.js.map +1 -0
  19. package/dist/cli-io.d.ts +28 -0
  20. package/dist/cli-io.d.ts.map +1 -0
  21. package/dist/cli-io.js +37 -0
  22. package/dist/cli-io.js.map +1 -0
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +1459 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/command-registry.d.ts +105 -0
  28. package/dist/command-registry.d.ts.map +1 -0
  29. package/dist/command-registry.js +516 -0
  30. package/dist/command-registry.js.map +1 -0
  31. package/dist/daemon-lifecycle.d.ts +18 -0
  32. package/dist/daemon-lifecycle.d.ts.map +1 -0
  33. package/dist/daemon-lifecycle.js +62 -0
  34. package/dist/daemon-lifecycle.js.map +1 -0
  35. package/dist/daemon-run.d.ts +86 -0
  36. package/dist/daemon-run.d.ts.map +1 -0
  37. package/dist/daemon-run.js +269 -0
  38. package/dist/daemon-run.js.map +1 -0
  39. package/dist/decision.d.ts +18 -0
  40. package/dist/decision.d.ts.map +1 -0
  41. package/dist/decision.js +46 -0
  42. package/dist/decision.js.map +1 -0
  43. package/dist/live.d.ts +26 -0
  44. package/dist/live.d.ts.map +1 -0
  45. package/dist/live.js +311 -0
  46. package/dist/live.js.map +1 -0
  47. package/dist/mcp-runner.d.ts +41 -0
  48. package/dist/mcp-runner.d.ts.map +1 -0
  49. package/dist/mcp-runner.js +306 -0
  50. package/dist/mcp-runner.js.map +1 -0
  51. package/dist/ops-commands.d.ts +11 -0
  52. package/dist/ops-commands.d.ts.map +1 -0
  53. package/dist/ops-commands.js +358 -0
  54. package/dist/ops-commands.js.map +1 -0
  55. package/dist/orchestrate-options.d.ts +9 -0
  56. package/dist/orchestrate-options.d.ts.map +1 -0
  57. package/dist/orchestrate-options.js +16 -0
  58. package/dist/orchestrate-options.js.map +1 -0
  59. package/dist/orphan-reaper.d.ts +9 -0
  60. package/dist/orphan-reaper.d.ts.map +1 -0
  61. package/dist/orphan-reaper.js +97 -0
  62. package/dist/orphan-reaper.js.map +1 -0
  63. package/dist/orphan-sweeper.d.ts +7 -0
  64. package/dist/orphan-sweeper.d.ts.map +1 -0
  65. package/dist/orphan-sweeper.js +289 -0
  66. package/dist/orphan-sweeper.js.map +1 -0
  67. package/dist/plugins.d.ts +44 -0
  68. package/dist/plugins.d.ts.map +1 -0
  69. package/dist/plugins.js +1383 -0
  70. package/dist/plugins.js.map +1 -0
  71. package/dist/primary-output.d.ts +14 -0
  72. package/dist/primary-output.d.ts.map +1 -0
  73. package/dist/primary-output.js +34 -0
  74. package/dist/primary-output.js.map +1 -0
  75. package/dist/registry.d.ts +26 -0
  76. package/dist/registry.d.ts.map +1 -0
  77. package/dist/registry.js +71 -0
  78. package/dist/registry.js.map +1 -0
  79. package/dist/release.d.ts +14 -0
  80. package/dist/release.d.ts.map +1 -0
  81. package/dist/release.js +49 -0
  82. package/dist/release.js.map +1 -0
  83. package/dist/repl.d.ts +26 -0
  84. package/dist/repl.d.ts.map +1 -0
  85. package/dist/repl.js +277 -0
  86. package/dist/repl.js.map +1 -0
  87. package/dist/review-command.d.ts +3 -0
  88. package/dist/review-command.d.ts.map +1 -0
  89. package/dist/review-command.js +83 -0
  90. package/dist/review-command.js.map +1 -0
  91. package/dist/reviewer-options.d.ts +18 -0
  92. package/dist/reviewer-options.d.ts.map +1 -0
  93. package/dist/reviewer-options.js +110 -0
  94. package/dist/reviewer-options.js.map +1 -0
  95. package/dist/run-options.d.ts +8 -0
  96. package/dist/run-options.d.ts.map +1 -0
  97. package/dist/run-options.js +50 -0
  98. package/dist/run-options.js.map +1 -0
  99. package/dist/run-secret-scan.d.ts +2 -0
  100. package/dist/run-secret-scan.d.ts.map +1 -0
  101. package/dist/run-secret-scan.js +5 -0
  102. package/dist/run-secret-scan.js.map +1 -0
  103. package/dist/settings-command.d.ts +3 -0
  104. package/dist/settings-command.d.ts.map +1 -0
  105. package/dist/settings-command.js +202 -0
  106. package/dist/settings-command.js.map +1 -0
  107. package/dist/settings-display.d.ts +3 -0
  108. package/dist/settings-display.d.ts.map +1 -0
  109. package/dist/settings-display.js +33 -0
  110. package/dist/settings-display.js.map +1 -0
  111. package/dist/settings-service.d.ts +15 -0
  112. package/dist/settings-service.d.ts.map +1 -0
  113. package/dist/settings-service.js +91 -0
  114. package/dist/settings-service.js.map +1 -0
  115. package/dist/setup-jobs.d.ts +28 -0
  116. package/dist/setup-jobs.d.ts.map +1 -0
  117. package/dist/setup-jobs.js +477 -0
  118. package/dist/setup-jobs.js.map +1 -0
  119. package/dist/spec.d.ts +84 -0
  120. package/dist/spec.d.ts.map +1 -0
  121. package/dist/spec.js +438 -0
  122. package/dist/spec.js.map +1 -0
  123. package/dist/trust-command.d.ts +3 -0
  124. package/dist/trust-command.d.ts.map +1 -0
  125. package/dist/trust-command.js +80 -0
  126. package/dist/trust-command.js.map +1 -0
  127. package/dist/trust-services.d.ts +7 -0
  128. package/dist/trust-services.d.ts.map +1 -0
  129. package/dist/trust-services.js +35 -0
  130. package/dist/trust-services.js.map +1 -0
  131. package/package.json +59 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 joi-lab
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # @claudexor/cli
2
+
3
+ The Claudexor command-line interface — the primary supported entry point of
4
+ [Claudexor](https://github.com/razzant/claudexor): a harness-agnostic AI
5
+ coding control plane over Codex CLI, Claude Code, Cursor CLI, and OpenCode.
6
+
7
+ Install the friendly bin wrapper instead of depending on this package
8
+ directly:
9
+
10
+ ```bash
11
+ npm install -g claudexor
12
+ claudexor doctor
13
+ ```
14
+
15
+ This package ships the CLI implementation and the explicit `./cli` and
16
+ `./claudexord` entry exports; the GLOBAL bin names are owned by the bare
17
+ `claudexor` wrapper package (one bin owner, no collisions), so
18
+ `npm install -g @claudexor/cli` intentionally installs NO bins — install
19
+ `claudexor` instead. It follows the
20
+ monorepo's lockstep version; the STABLE contract is the CLI surface itself
21
+ (`claudexor help --json`) and the documented `--json` outputs — not this
22
+ package's internal module shape.
package/dist/args.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ export interface ParsedArgs {
2
+ _: string[];
3
+ flags: Record<string, string | boolean | Array<string | boolean>>;
4
+ }
5
+ /** Minimal, dependency-free arg parser: supports `--k v`, `--k=v`, and boolean `--k`. */
6
+ export declare function parseArgs(argv: string[]): ParsedArgs;
7
+ export declare function flagValues(args: ParsedArgs, key: string): Array<string | boolean>;
8
+ export declare function flagStr(args: ParsedArgs, key: string): string | undefined;
9
+ export declare function flagStringList(args: ParsedArgs, key: string): string[];
10
+ export declare function flagBool(args: ParsedArgs, key: string): boolean;
11
+ export declare function requiredStringFlagError(args: ParsedArgs, keys: readonly string[]): string | null;
12
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CACnE;AAOD,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAqCpD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAIjF;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIzE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAWtE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAQhG"}
package/dist/args.js ADDED
@@ -0,0 +1,88 @@
1
+ import { BOOLEAN_FLAGS } from "./command-registry.js";
2
+ // Flags that never take a value (`--flag token` must leave `token` a
3
+ // positional instead of eating it; `--flag=value` still works for explicit
4
+ // `true`/`false`) are a PROJECTION of the command registry — see
5
+ // command-registry.ts, the one owner of the CLI surface.
6
+ /** Minimal, dependency-free arg parser: supports `--k v`, `--k=v`, and boolean `--k`. */
7
+ export function parseArgs(argv) {
8
+ const _ = [];
9
+ const flags = Object.create(null);
10
+ const setFlag = (key, value) => {
11
+ const existing = flags[key];
12
+ if (Array.isArray(existing)) {
13
+ existing.push(value);
14
+ }
15
+ else if (existing !== undefined) {
16
+ flags[key] = [existing, value];
17
+ }
18
+ else {
19
+ flags[key] = value;
20
+ }
21
+ };
22
+ for (let i = 0; i < argv.length; i++) {
23
+ const a = argv[i] ?? "";
24
+ if (a.startsWith("--")) {
25
+ const eq = a.indexOf("=");
26
+ if (eq >= 0) {
27
+ setFlag(a.slice(2, eq), a.slice(eq + 1));
28
+ }
29
+ else {
30
+ const key = a.slice(2);
31
+ const next = argv[i + 1];
32
+ if (next !== undefined && !next.startsWith("--") && !BOOLEAN_FLAGS.has(key)) {
33
+ setFlag(key, next);
34
+ i++;
35
+ }
36
+ else {
37
+ setFlag(key, true);
38
+ }
39
+ }
40
+ }
41
+ else {
42
+ _.push(a);
43
+ }
44
+ }
45
+ return { _, flags };
46
+ }
47
+ export function flagValues(args, key) {
48
+ const v = args.flags[key];
49
+ if (v === undefined)
50
+ return [];
51
+ return Array.isArray(v) ? v : [v];
52
+ }
53
+ export function flagStr(args, key) {
54
+ const values = flagValues(args, key);
55
+ const v = values[values.length - 1];
56
+ return typeof v === "string" ? v : undefined;
57
+ }
58
+ export function flagStringList(args, key) {
59
+ const out = [];
60
+ for (const value of flagValues(args, key)) {
61
+ if (typeof value !== "string")
62
+ continue;
63
+ for (const part of value.split(",")) {
64
+ const token = part.trim();
65
+ if (!token)
66
+ throw new Error(`invalid --${key} value (empty comma-separated entry)`);
67
+ out.push(token);
68
+ }
69
+ }
70
+ return out;
71
+ }
72
+ export function flagBool(args, key) {
73
+ const values = flagValues(args, key);
74
+ const v = values[values.length - 1];
75
+ return v === true || v === "true";
76
+ }
77
+ export function requiredStringFlagError(args, keys) {
78
+ for (const key of keys) {
79
+ if (!Object.prototype.hasOwnProperty.call(args.flags, key))
80
+ continue;
81
+ for (const value of flagValues(args, key)) {
82
+ if (typeof value !== "string" || value.trim() === "")
83
+ return `claudexor: --${key} requires a value`;
84
+ }
85
+ }
86
+ return null;
87
+ }
88
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAOtD,qEAAqE;AACrE,2EAA2E;AAC3E,iEAAiE;AACjE,yDAAyD;AAEzD,yFAAyF;AACzF,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,CAAC,GAAa,EAAE,CAAC;IACvB,MAAM,KAAK,GAA+D,MAAM,CAAC,MAAM,CAAC,IAAI,CAG3F,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,KAAuB,EAAQ,EAAE;QAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACZ,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5E,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACnB,CAAC,EAAE,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAgB,EAAE,GAAW;IACtD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAgB,EAAE,GAAW;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAgB,EAAE,GAAW;IAC1D,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,sCAAsC,CAAC,CAAC;YACpF,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAgB,EAAE,GAAW;IACpD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAgB,EAAE,IAAuB;IAC/E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;YAAE,SAAS;QACrE,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,OAAO,gBAAgB,GAAG,mBAAmB,CAAC;QACtG,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Attachment, AttachmentInput } from "@claudexor/schema";
2
+ export declare function attachmentError(message: string): Error & {
3
+ status: number;
4
+ };
5
+ /**
6
+ * Resolve inbound attachments (base64 `data`, or an existing `path`) to durable
7
+ * Attachments under a scoped dir OUTSIDE any worktree, so they never enter a git
8
+ * diff. base64 is decoded ONCE here and `jobs.json` never carries the bytes.
9
+ */
10
+ export declare function resolveAttachments(inputs: AttachmentInput[] | undefined): Attachment[];
11
+ //# sourceMappingURL=attachment-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-resolver.d.ts","sourceRoot":"","sources":["../src/attachment-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAUrE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAE3E;AAWD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,SAAS,GAAG,UAAU,EAAE,CA8BtF"}
@@ -0,0 +1,61 @@
1
+ import { existsSync, lstatSync, mkdirSync, writeFileSync } from "node:fs";
2
+ import { isAbsolute, join } from "node:path";
3
+ import { daemonDir } from "@claudexor/daemon";
4
+ import { newId } from "@claudexor/util";
5
+ /** Filename allowlist (no regex governance): keep only safe chars for the stored name. */
6
+ function safeAttachmentName(name) {
7
+ const allowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._-";
8
+ let s = "";
9
+ for (const ch of name)
10
+ s += allowed.includes(ch) ? ch : "_";
11
+ return (s || "attachment").slice(0, 120);
12
+ }
13
+ export function attachmentError(message) {
14
+ return Object.assign(new Error(message), { status: 400 });
15
+ }
16
+ function decodeBase64AttachmentData(data, index) {
17
+ const normalized = data.replaceAll("\r", "").replaceAll("\n", "");
18
+ const decoded = Buffer.from(normalized, "base64");
19
+ if (decoded.length === 0 || decoded.toString("base64") !== normalized) {
20
+ throw attachmentError(`attachment ${index} data must be non-empty valid base64`);
21
+ }
22
+ return decoded;
23
+ }
24
+ /**
25
+ * Resolve inbound attachments (base64 `data`, or an existing `path`) to durable
26
+ * Attachments under a scoped dir OUTSIDE any worktree, so they never enter a git
27
+ * diff. base64 is decoded ONCE here and `jobs.json` never carries the bytes.
28
+ */
29
+ export function resolveAttachments(inputs) {
30
+ if (!inputs || inputs.length === 0)
31
+ return [];
32
+ const dir = join(daemonDir(), "attachments", newId("attb"));
33
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
34
+ const out = [];
35
+ for (const [index, a] of inputs.entries()) {
36
+ const hasData = typeof a.data === "string" && a.data.length > 0;
37
+ const attachmentPath = typeof a.path === "string" ? a.path.trim() : "";
38
+ const hasPath = attachmentPath.length > 0;
39
+ if (hasData && hasPath) {
40
+ throw attachmentError(`attachment ${index} must include either data or path, not both`);
41
+ }
42
+ if (hasData) {
43
+ const path = join(dir, `${newId("f")}-${safeAttachmentName(a.name)}`);
44
+ writeFileSync(path, decodeBase64AttachmentData(a.data ?? "", index), { mode: 0o600 });
45
+ out.push({ id: newId("att"), kind: a.kind, mime: a.mime, name: a.name, path });
46
+ continue;
47
+ }
48
+ if (!hasPath) {
49
+ throw attachmentError(`attachment ${index} must include data or an absolute file path`);
50
+ }
51
+ if (!isAbsolute(attachmentPath)) {
52
+ throw attachmentError(`attachment ${index} path must be absolute: ${attachmentPath}`);
53
+ }
54
+ if (!existsSync(attachmentPath) || !lstatSync(attachmentPath).isFile()) {
55
+ throw attachmentError(`attachment ${index} path does not exist or is not a file: ${attachmentPath}`);
56
+ }
57
+ out.push({ id: newId("att"), kind: a.kind, mime: a.mime, name: a.name, path: attachmentPath });
58
+ }
59
+ return out;
60
+ }
61
+ //# sourceMappingURL=attachment-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-resolver.js","sourceRoot":"","sources":["../src/attachment-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { AgentCapabilityCatalog } from "@claudexor/schema";
2
+ /** MCP tool names from the server's own descriptor producer (noop runner). */
3
+ export declare function mcpToolNames(): readonly string[];
4
+ /**
5
+ * Compose the AgentCapabilityCatalog from the existing truth producers:
6
+ * gateway.statusAll (manifest + doctor), the model-truth service, the user
7
+ * config (configured models), the CLI command registry, and the schema's own
8
+ * closed vocabularies. Shared verbatim by the daemon's GET /agent-capabilities
9
+ * service, the `claudexor capabilities` verb, and the MCP
10
+ * `claudexor_capabilities` tool — three views, one composer.
11
+ */
12
+ export declare function buildAgentCapabilityCatalog(): Promise<AgentCapabilityCatalog>;
13
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,EASvB,MAAM,mBAAmB,CAAC;AAQ3B,8EAA8E;AAC9E,wBAAgB,YAAY,IAAI,SAAS,MAAM,EAAE,CAEhD;AAKD;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,sBAAsB,CAAC,CA8EnF"}
@@ -0,0 +1,90 @@
1
+ import { AccessProfile, AgentCapabilityCatalog, ControlRunStartRequest, MODE_MUTABILITY, ModeKind, RUN_START_CLIENT_REJECTED_KEYS, RunApplyState, WorkspaceMode, } from "@claudexor/schema";
2
+ import { loadConfig } from "@claudexor/config";
3
+ import { validateModel } from "@claudexor/core";
4
+ import { defaultClaudexorTools } from "@claudexor/mcp-server";
5
+ import { CLAUDEXOR_VERSION } from "@claudexor/util";
6
+ import { CLI_COMMANDS } from "./command-registry.js";
7
+ import { buildGateway, harnessModels } from "./registry.js";
8
+ /** MCP tool names from the server's own descriptor producer (noop runner). */
9
+ export function mcpToolNames() {
10
+ return defaultClaudexorTools(async () => "").map((t) => t.name);
11
+ }
12
+ /** Sentinel for user-level probes with no project root (same as claudexord). */
13
+ const NO_PROJECT_ROOT = "/nonexistent-claudexor-project";
14
+ /**
15
+ * Compose the AgentCapabilityCatalog from the existing truth producers:
16
+ * gateway.statusAll (manifest + doctor), the model-truth service, the user
17
+ * config (configured models), the CLI command registry, and the schema's own
18
+ * closed vocabularies. Shared verbatim by the daemon's GET /agent-capabilities
19
+ * service, the `claudexor capabilities` verb, and the MCP
20
+ * `claudexor_capabilities` tool — three views, one composer.
21
+ */
22
+ export async function buildAgentCapabilityCatalog() {
23
+ const statuses = await buildGateway({ includeFakes: false }).statusAll({ cwd: NO_PROJECT_ROOT });
24
+ const cfg = loadConfig(NO_PROJECT_ROOT);
25
+ const harnesses = await Promise.all(statuses.map(async (s) => {
26
+ // Model truth degrades soft: a catalog is a status surface, so an
27
+ // unreachable vendor CLI yields source=none instead of throwing the
28
+ // whole catalog away. The fallback is the full typed response shape.
29
+ const truth = await harnessModels(s.id, NO_PROJECT_ROOT, false).catch(() => ({ harnessId: s.id, models: [], source: "none", verifiedAgainst: null }));
30
+ const configured = cfg.global.harnesses[s.id]?.default_model ?? null;
31
+ const check = configured
32
+ ? validateModel(configured, truth.models.map((m) => m.id), truth.source === "api" ? "api" : "manifest")
33
+ : null;
34
+ const profile = s.manifest?.capability_profile;
35
+ // Settings can disable a harness outright (harnesses.<id>.enabled=false);
36
+ // routing drops it, so the catalog must not advertise it as available.
37
+ const enabled = cfg.global.harnesses[s.id]?.enabled !== false;
38
+ return {
39
+ id: s.id,
40
+ enabled,
41
+ displayName: s.manifest?.display_name ?? s.id,
42
+ status: s.status,
43
+ providerFamily: s.manifest?.provider_family ?? "unknown",
44
+ enabledIntents: [...s.enabledIntents],
45
+ disabledIntents: [...s.disabledIntents],
46
+ reasons: [...s.reasons],
47
+ configuredModel: configured,
48
+ configuredModelValid: check ? check.status === "ok" : null,
49
+ models: { source: truth.source, count: truth.models.length, verifiedAgainst: truth.verifiedAgainst },
50
+ webPolicy: s.manifest?.capabilities.web_policy ?? "none",
51
+ imageInput: profile?.image_input ?? "none",
52
+ effortLevels: [...(s.manifest?.capabilities.effort_levels ?? [])],
53
+ accessProfilesSupported: [...(s.manifest?.access_profiles_supported ?? [])],
54
+ readonlyMechanism: profile?.access_control.readonly_mechanism ?? "none",
55
+ };
56
+ }));
57
+ // Run-control keys are DERIVED from the schema shape, minus the keys the
58
+ // daemon rejects from direct clients (thread-turn pipeline internals) —
59
+ // one shared list in @claudexor/schema keeps catalog and guards in lockstep.
60
+ const rejected = new Set(RUN_START_CLIENT_REJECTED_KEYS);
61
+ const runControlKeys = Object.keys(ControlRunStartRequest.shape)
62
+ .filter((k) => !rejected.has(k))
63
+ .sort();
64
+ return AgentCapabilityCatalog.parse({
65
+ ok: true,
66
+ version: CLAUDEXOR_VERSION,
67
+ generatedAt: new Date().toISOString(),
68
+ harnesses,
69
+ availableHarnesses: harnesses.filter((h) => h.status === "ok" && h.enabled).map((h) => h.id),
70
+ modes: [...ModeKind.options],
71
+ runControlKeys,
72
+ mutability: {
73
+ readOnlyModes: ModeKind.options.filter((m) => MODE_MUTABILITY[m] === "read"),
74
+ writeModes: ModeKind.options.filter((m) => MODE_MUTABILITY[m] === "write"),
75
+ isolationKinds: ["envelope", "live"],
76
+ workspaceModes: [...WorkspaceMode.options],
77
+ accessProfiles: [...AccessProfile.options],
78
+ applyModes: ["apply", "commit", "branch", "pr"],
79
+ },
80
+ cliCommands: CLI_COMMANDS.map((c) => ({
81
+ id: c.id,
82
+ mutability: c.mutability,
83
+ stability: c.stability,
84
+ recovery: c.recovery === true,
85
+ })),
86
+ mcpTools: [...mcpToolNames()],
87
+ runApplyStates: [...RunApplyState.options],
88
+ });
89
+ }
90
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=claudexord.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudexord.d.ts","sourceRoot":"","sources":["../src/claudexord.ts"],"names":[],"mappings":""}