@claudexor/cli 3.2.1 → 3.3.7

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 (77) hide show
  1. package/dist/accounts-services.d.ts +47 -49
  2. package/dist/accounts-services.d.ts.map +1 -1
  3. package/dist/accounts-services.js +46 -9
  4. package/dist/accounts-services.js.map +1 -1
  5. package/dist/claude-oauth-usage.d.ts.map +1 -1
  6. package/dist/claude-oauth-usage.js +13 -1
  7. package/dist/claude-oauth-usage.js.map +1 -1
  8. package/dist/claudexord.d.ts.map +1 -1
  9. package/dist/claudexord.js +16 -25
  10. package/dist/claudexord.js.map +1 -1
  11. package/dist/command-flags.d.ts.map +1 -1
  12. package/dist/command-flags.js +1 -0
  13. package/dist/command-flags.js.map +1 -1
  14. package/dist/control-services.d.ts +235 -53
  15. package/dist/control-services.d.ts.map +1 -1
  16. package/dist/control-services.js +40 -23
  17. package/dist/control-services.js.map +1 -1
  18. package/dist/credential-commands.d.ts.map +1 -1
  19. package/dist/credential-commands.js +6 -9
  20. package/dist/credential-commands.js.map +1 -1
  21. package/dist/mcp-run-projections.d.ts +2 -1
  22. package/dist/mcp-run-projections.d.ts.map +1 -1
  23. package/dist/native-login.d.ts +6 -4
  24. package/dist/native-login.d.ts.map +1 -1
  25. package/dist/native-login.js +18 -1
  26. package/dist/native-login.js.map +1 -1
  27. package/dist/profile-registration.js +2 -2
  28. package/dist/profile-registration.js.map +1 -1
  29. package/dist/review-command.d.ts.map +1 -1
  30. package/dist/review-command.js +27 -1
  31. package/dist/review-command.js.map +1 -1
  32. package/dist/run-applicability.d.ts.map +1 -1
  33. package/dist/run-applicability.js +10 -2
  34. package/dist/run-applicability.js.map +1 -1
  35. package/dist/setup-client-pty.d.ts.map +1 -1
  36. package/dist/setup-client-pty.js +5 -1
  37. package/dist/setup-client-pty.js.map +1 -1
  38. package/dist/setup-device-code-disclosure.d.ts +4 -2
  39. package/dist/setup-device-code-disclosure.d.ts.map +1 -1
  40. package/dist/setup-device-code-disclosure.js +45 -13
  41. package/dist/setup-device-code-disclosure.js.map +1 -1
  42. package/dist/setup-job-store.d.ts +2 -2
  43. package/dist/setup-job-store.d.ts.map +1 -1
  44. package/dist/setup-job-store.js +1 -0
  45. package/dist/setup-job-store.js.map +1 -1
  46. package/dist/setup-job-support.d.ts.map +1 -1
  47. package/dist/setup-job-support.js +6 -3
  48. package/dist/setup-job-support.js.map +1 -1
  49. package/dist/setup-jobs.d.ts +3 -2
  50. package/dist/setup-jobs.d.ts.map +1 -1
  51. package/dist/setup-jobs.js +85 -31
  52. package/dist/setup-jobs.js.map +1 -1
  53. package/dist/setup-login-completion.d.ts +27 -0
  54. package/dist/setup-login-completion.d.ts.map +1 -0
  55. package/dist/setup-login-completion.js +85 -0
  56. package/dist/setup-login-completion.js.map +1 -0
  57. package/dist/setup-login-io.d.ts +36 -0
  58. package/dist/setup-login-io.d.ts.map +1 -0
  59. package/dist/setup-login-io.js +99 -0
  60. package/dist/setup-login-io.js.map +1 -0
  61. package/dist/setup-login-protocol.d.ts +4 -1
  62. package/dist/setup-login-protocol.d.ts.map +1 -1
  63. package/dist/setup-login-protocol.js +21 -10
  64. package/dist/setup-login-protocol.js.map +1 -1
  65. package/dist/setup-login-runner.d.ts +8 -8
  66. package/dist/setup-login-runner.d.ts.map +1 -1
  67. package/dist/setup-login-runner.js +144 -182
  68. package/dist/setup-login-runner.js.map +1 -1
  69. package/dist/status-projection-cache.d.ts +57 -0
  70. package/dist/status-projection-cache.d.ts.map +1 -0
  71. package/dist/status-projection-cache.js +103 -0
  72. package/dist/status-projection-cache.js.map +1 -0
  73. package/dist/thread-continuity-context.d.ts +36 -0
  74. package/dist/thread-continuity-context.d.ts.map +1 -0
  75. package/dist/thread-continuity-context.js +33 -0
  76. package/dist/thread-continuity-context.js.map +1 -0
  77. package/package.json +23 -23
@@ -0,0 +1,103 @@
1
+ /**
2
+ * TTL + single-flight cache for the daemon's poll-heavy status projections.
3
+ *
4
+ * Hit live 2026-08-04: a UI polling `/v2/credential-profiles` and
5
+ * `/v2/harnesses` every 5 seconds made the daemon spawn full harness sweeps
6
+ * (discover + doctor for every adapter, plus a doctor probe per registered
7
+ * credential profile) on EVERY tick — each sweep shells out to the vendor
8
+ * CLIs, takes >8s under load, and starves the daemon's request loop until an
9
+ * interactive login POST times out client-side ("Daemon unreachable:
10
+ * ReadTimeout"). The poller needs cheap reads, not fresh probes per tick, so
11
+ * these projections now serve the last computed value inside a short TTL and
12
+ * coalesce concurrent recomputes into one in-flight sweep. An explicit
13
+ * fresh/snapshot request still bypasses the TTL, and a credential-state
14
+ * change (login/logout) invalidates every registered cache so a fresh login
15
+ * is visible on the next poll rather than a TTL later.
16
+ */
17
+ import { statSync } from "node:fs";
18
+ import { globalConfigPath } from "@claudexor/config";
19
+ const registry = new Set();
20
+ /** Cheap identity stamp of the global config file: any write — service-layer,
21
+ * CLI, or hand edit — changes it, so config-derived projection facts are never
22
+ * served stale. One stat() per poll read. */
23
+ export function globalConfigVersion() {
24
+ try {
25
+ const s = statSync(globalConfigPath());
26
+ return `${s.mtimeMs}:${s.size}`;
27
+ }
28
+ catch {
29
+ return "absent";
30
+ }
31
+ }
32
+ export const STATUS_PROJECTION_TTL_MS = 15_000;
33
+ export class StatusProjectionCache {
34
+ value = null;
35
+ inFlight = null;
36
+ generation = 0;
37
+ ttlMs;
38
+ now;
39
+ versionOf;
40
+ constructor(opts = {}) {
41
+ this.ttlMs = opts.ttlMs ?? STATUS_PROJECTION_TTL_MS;
42
+ this.now = opts.now ?? Date.now;
43
+ this.versionOf = opts.versionOf ?? (() => "");
44
+ registry.add(this);
45
+ }
46
+ /** Serve the cached value inside the TTL (same version); otherwise compute
47
+ * once, shared by every concurrent reader. `fresh` bypasses the TTL but
48
+ * still coalesces with a current in-flight compute and re-primes the cache
49
+ * on completion. An invalidation or version change during an in-flight
50
+ * compute keeps that compute's result OUT of the cache (its data predates
51
+ * the change) and later readers start a new one. */
52
+ async read(compute, opts) {
53
+ const version = this.versionOf();
54
+ if (!opts?.fresh &&
55
+ this.value &&
56
+ this.value.version === version &&
57
+ this.now() - this.value.at < this.ttlMs) {
58
+ return this.value.data;
59
+ }
60
+ if (this.inFlight &&
61
+ this.inFlight.generation === this.generation &&
62
+ this.inFlight.version === version) {
63
+ return this.inFlight.promise;
64
+ }
65
+ const generation = this.generation;
66
+ const entry = {
67
+ generation,
68
+ version,
69
+ promise: compute().then((data) => {
70
+ // Stamp with the version CAPTURED at read() entry, never re-read at
71
+ // completion: a config change DURING the computation must not label
72
+ // pre-change data as post-change (wave finding, both reviewers). A
73
+ // stale-versioned late completion also never clobbers a value that
74
+ // is current; it may still prime an empty or equally-stale slot.
75
+ const primeable = !this.value || this.value.version === version || version === this.versionOf();
76
+ if (this.generation === generation && primeable) {
77
+ this.value = { at: this.now(), version, data };
78
+ }
79
+ if (this.inFlight === entry)
80
+ this.inFlight = null;
81
+ return data;
82
+ }, (err) => {
83
+ // A failed sweep must not poison the cache: the next reader retries.
84
+ if (this.inFlight === entry)
85
+ this.inFlight = null;
86
+ throw err;
87
+ }),
88
+ };
89
+ this.inFlight = entry;
90
+ return entry.promise;
91
+ }
92
+ invalidate() {
93
+ this.value = null;
94
+ this.generation += 1;
95
+ }
96
+ }
97
+ /** Credential state changed (login/logout): every projection that embeds
98
+ * harness/profile status is stale at once. */
99
+ export function invalidateStatusProjections() {
100
+ for (const cache of registry)
101
+ cache.invalidate();
102
+ }
103
+ //# sourceMappingURL=status-projection-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-projection-cache.js","sourceRoot":"","sources":["../src/status-projection-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { ThreadContinuityContext } from "@claudexor/orchestrator";
2
+ /** The thread-store reads this projection needs; narrower than the whole store. */
3
+ export interface ThreadContinuitySource {
4
+ getTurn(id: string): {
5
+ created_at?: string;
6
+ } | undefined;
7
+ turnsFor(threadId: string): ReadonlyArray<{
8
+ id: string;
9
+ prompt: string;
10
+ run_id: string | null;
11
+ created_at: string;
12
+ }>;
13
+ laneCheckpointsForThread(threadId: string): ReadonlyArray<{
14
+ harness_id: string;
15
+ profile_id: string | null;
16
+ turn_id: string;
17
+ }>;
18
+ }
19
+ /**
20
+ * Continuity facts for one thread turn (INV-137): the prior turns the engine
21
+ * builds its delta packet from, plus every lane checkpoint of the thread.
22
+ *
23
+ * Only a BOUND thread turn has any — a non-thread one-shot has no conversation
24
+ * to continue, so this returns undefined and the engine hydrates nothing.
25
+ *
26
+ * Lives here rather than inline in `claudexord.ts` because it is a pure
27
+ * thread-store projection with no daemon lifecycle in it, and `claudexord.ts`
28
+ * is a tracked complexity-ratchet file (INV-124) whose job is wiring.
29
+ */
30
+ export declare function threadContinuityContext(input: {
31
+ threads: ThreadContinuitySource;
32
+ threadId: string | null | undefined;
33
+ turnId: string | null | undefined;
34
+ profileId: string | null;
35
+ }): ThreadContinuityContext | undefined;
36
+ //# sourceMappingURL=thread-continuity-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-continuity-context.d.ts","sourceRoot":"","sources":["../src/thread-continuity-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,mFAAmF;AACnF,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC;QACxC,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,wBAAwB,CACtB,QAAQ,EAAE,MAAM,GACf,aAAa,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,OAAO,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GAAG,uBAAuB,GAAG,SAAS,CAsBtC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Continuity facts for one thread turn (INV-137): the prior turns the engine
3
+ * builds its delta packet from, plus every lane checkpoint of the thread.
4
+ *
5
+ * Only a BOUND thread turn has any — a non-thread one-shot has no conversation
6
+ * to continue, so this returns undefined and the engine hydrates nothing.
7
+ *
8
+ * Lives here rather than inline in `claudexord.ts` because it is a pure
9
+ * thread-store projection with no daemon lifecycle in it, and `claudexord.ts`
10
+ * is a tracked complexity-ratchet file (INV-124) whose job is wiring.
11
+ */
12
+ export function threadContinuityContext(input) {
13
+ const { threads, threadId, turnId, profileId } = input;
14
+ if (!threadId || !turnId)
15
+ return undefined;
16
+ const currentCreatedAt = threads.getTurn(turnId)?.created_at ?? "";
17
+ return {
18
+ turnId,
19
+ profileId,
20
+ priorTurns: threads
21
+ .turnsFor(threadId)
22
+ .filter((t) => t.id !== turnId &&
23
+ t.run_id != null &&
24
+ (!currentCreatedAt || t.created_at < currentCreatedAt))
25
+ .map((t) => ({ id: t.id, prompt: t.prompt, runId: t.run_id })),
26
+ laneCheckpoints: threads.laneCheckpointsForThread(threadId).map((c) => ({
27
+ harness: c.harness_id,
28
+ profileId: c.profile_id ?? null,
29
+ turnId: c.turn_id,
30
+ })),
31
+ };
32
+ }
33
+ //# sourceMappingURL=thread-continuity-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-continuity-context.js","sourceRoot":"","sources":["../src/thread-continuity-context.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAKvC;IACC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACvD,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC;IACnE,OAAO;QACL,MAAM;QACN,SAAS;QACT,UAAU,EAAE,OAAO;aAChB,QAAQ,CAAC,QAAQ,CAAC;aAClB,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,EAAE,KAAK,MAAM;YACf,CAAC,CAAC,MAAM,IAAI,IAAI;YAChB,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,UAAU,GAAG,gBAAgB,CAAC,CACzD;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,eAAe,EAAE,OAAO,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtE,OAAO,EAAE,CAAC,CAAC,UAAU;YACrB,SAAS,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;YAC/B,MAAM,EAAE,CAAC,CAAC,OAAO;SAClB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claudexor/cli",
3
- "version": "3.2.1",
3
+ "version": "3.3.7",
4
4
  "license": "MIT",
5
5
  "description": "Claudexor CLI (claudexor). Thin surface over the orchestrator.",
6
6
  "type": "module",
@@ -10,28 +10,28 @@
10
10
  "dist"
11
11
  ],
12
12
  "dependencies": {
13
- "@claudexor/acp-server": "3.2.1",
14
- "@claudexor/config": "3.2.1",
15
- "@claudexor/control-api": "3.2.1",
16
- "@claudexor/artifact-store": "3.2.1",
17
- "@claudexor/core": "3.2.1",
18
- "@claudexor/delivery": "3.2.1",
19
- "@claudexor/daemon": "3.2.1",
20
- "@claudexor/orchestrator": "3.2.1",
21
- "@claudexor/mcp-server": "3.2.1",
22
- "@claudexor/review": "3.2.1",
23
- "@claudexor/journal": "3.2.1",
24
- "@claudexor/harness-codex": "3.2.1",
25
- "@claudexor/harness-opencode": "3.2.1",
26
- "@claudexor/gateway": "3.2.1",
27
- "@claudexor/harness-cursor": "3.2.1",
28
- "@claudexor/harness-raw-api": "3.2.1",
29
- "@claudexor/secrets": "3.2.1",
30
- "@claudexor/harness-fake": "3.2.1",
31
- "@claudexor/harness-claude": "3.2.1",
32
- "@claudexor/workspace": "3.2.1",
33
- "@claudexor/schema": "3.2.1",
34
- "@claudexor/util": "3.2.1"
13
+ "@claudexor/artifact-store": "3.3.7",
14
+ "@claudexor/config": "3.3.7",
15
+ "@claudexor/acp-server": "3.3.7",
16
+ "@claudexor/delivery": "3.3.7",
17
+ "@claudexor/core": "3.3.7",
18
+ "@claudexor/control-api": "3.3.7",
19
+ "@claudexor/daemon": "3.3.7",
20
+ "@claudexor/mcp-server": "3.3.7",
21
+ "@claudexor/gateway": "3.3.7",
22
+ "@claudexor/orchestrator": "3.3.7",
23
+ "@claudexor/journal": "3.3.7",
24
+ "@claudexor/review": "3.3.7",
25
+ "@claudexor/harness-codex": "3.3.7",
26
+ "@claudexor/harness-cursor": "3.3.7",
27
+ "@claudexor/harness-fake": "3.3.7",
28
+ "@claudexor/harness-opencode": "3.3.7",
29
+ "@claudexor/harness-raw-api": "3.3.7",
30
+ "@claudexor/harness-claude": "3.3.7",
31
+ "@claudexor/secrets": "3.3.7",
32
+ "@claudexor/util": "3.3.7",
33
+ "@claudexor/workspace": "3.3.7",
34
+ "@claudexor/schema": "3.3.7"
35
35
  },
36
36
  "repository": {
37
37
  "type": "git",