@tokenfactory/acc-runner 0.44.1 → 0.44.3
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/README.md +20 -1
- package/dist/bin-resolve.d.ts +39 -3
- package/dist/bin-resolve.d.ts.map +1 -1
- package/dist/bin-resolve.js +176 -12
- package/dist/bin-resolve.js.map +1 -1
- package/dist/build-fingerprint.d.ts +66 -0
- package/dist/build-fingerprint.d.ts.map +1 -0
- package/dist/build-fingerprint.js +70 -0
- package/dist/build-fingerprint.js.map +1 -0
- package/dist/build-info.generated.d.ts +3 -0
- package/dist/build-info.generated.d.ts.map +1 -0
- package/dist/build-info.generated.js +3 -0
- package/dist/build-info.generated.js.map +1 -0
- package/dist/capacity/resume-controller.d.ts +5 -3
- package/dist/capacity/resume-controller.d.ts.map +1 -1
- package/dist/capacity/resume-controller.js +9 -0
- package/dist/capacity/resume-controller.js.map +1 -1
- package/dist/chat-delegation-guard.d.ts +23 -0
- package/dist/chat-delegation-guard.d.ts.map +1 -0
- package/dist/chat-delegation-guard.js +62 -0
- package/dist/chat-delegation-guard.js.map +1 -0
- package/dist/chat-lane.d.ts +17 -6
- package/dist/chat-lane.d.ts.map +1 -1
- package/dist/chat-lane.js +29 -8
- package/dist/chat-lane.js.map +1 -1
- package/dist/companion-identity.d.ts +37 -0
- package/dist/companion-identity.d.ts.map +1 -1
- package/dist/companion-identity.js +98 -29
- package/dist/companion-identity.js.map +1 -1
- package/dist/companion-run.d.ts +1 -50
- package/dist/companion-run.d.ts.map +1 -1
- package/dist/companion-run.js +48 -105
- package/dist/companion-run.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -3
- package/dist/config.js.map +1 -1
- package/dist/conformance.d.ts +49 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +121 -0
- package/dist/conformance.js.map +1 -0
- package/dist/cost-pricing.d.ts +46 -0
- package/dist/cost-pricing.d.ts.map +1 -1
- package/dist/cost-pricing.js +58 -1
- package/dist/cost-pricing.js.map +1 -1
- package/dist/credential-identity.d.ts +70 -0
- package/dist/credential-identity.d.ts.map +1 -0
- package/dist/credential-identity.js +128 -0
- package/dist/credential-identity.js.map +1 -0
- package/dist/doctor.d.ts +33 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +284 -44
- package/dist/doctor.js.map +1 -1
- package/dist/engines/chat-stream.d.ts +71 -1
- package/dist/engines/chat-stream.d.ts.map +1 -1
- package/dist/engines/chat-stream.js +126 -8
- package/dist/engines/chat-stream.js.map +1 -1
- package/dist/engines/claude-code-chat.d.ts +11 -1
- package/dist/engines/claude-code-chat.d.ts.map +1 -1
- package/dist/engines/claude-code-chat.js +69 -5
- package/dist/engines/claude-code-chat.js.map +1 -1
- package/dist/engines/claude-code.d.ts.map +1 -1
- package/dist/engines/claude-code.js +30 -6
- package/dist/engines/claude-code.js.map +1 -1
- package/dist/engines/codex.d.ts.map +1 -1
- package/dist/engines/codex.js +18 -5
- package/dist/engines/codex.js.map +1 -1
- package/dist/engines/registry.d.ts +26 -0
- package/dist/engines/registry.d.ts.map +1 -1
- package/dist/engines/registry.js +37 -0
- package/dist/engines/registry.js.map +1 -1
- package/dist/engines/types.d.ts +5 -0
- package/dist/engines/types.d.ts.map +1 -1
- package/dist/failure-classifier.d.ts +1 -1
- package/dist/failure-classifier.d.ts.map +1 -1
- package/dist/failure-classifier.js +65 -12
- package/dist/failure-classifier.js.map +1 -1
- package/dist/gh.d.ts +15 -0
- package/dist/gh.d.ts.map +1 -1
- package/dist/gh.js +18 -0
- package/dist/gh.js.map +1 -1
- package/dist/git.d.ts +6 -0
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +27 -1
- package/dist/git.js.map +1 -1
- package/dist/keychain.d.ts +17 -0
- package/dist/keychain.d.ts.map +1 -1
- package/dist/keychain.js +30 -0
- package/dist/keychain.js.map +1 -1
- package/dist/loc-advisory.d.ts +70 -0
- package/dist/loc-advisory.d.ts.map +1 -0
- package/dist/loc-advisory.js +196 -0
- package/dist/loc-advisory.js.map +1 -0
- package/dist/locks/claim-lock-policy.d.ts +67 -0
- package/dist/locks/claim-lock-policy.d.ts.map +1 -0
- package/dist/locks/claim-lock-policy.js +132 -0
- package/dist/locks/claim-lock-policy.js.map +1 -0
- package/dist/login.d.ts +59 -2
- package/dist/login.d.ts.map +1 -1
- package/dist/login.js +87 -7
- package/dist/login.js.map +1 -1
- package/dist/mcp-spawn.d.ts +54 -0
- package/dist/mcp-spawn.d.ts.map +1 -1
- package/dist/mcp-spawn.js +88 -4
- package/dist/mcp-spawn.js.map +1 -1
- package/dist/migration-seq-guard.d.ts +28 -1
- package/dist/migration-seq-guard.d.ts.map +1 -1
- package/dist/migration-seq-guard.js +111 -6
- package/dist/migration-seq-guard.js.map +1 -1
- package/dist/output-diagnostics.d.ts +15 -0
- package/dist/output-diagnostics.d.ts.map +1 -0
- package/dist/output-diagnostics.js +95 -0
- package/dist/output-diagnostics.js.map +1 -0
- package/dist/pr-open-guard.d.ts +67 -0
- package/dist/pr-open-guard.d.ts.map +1 -0
- package/dist/pr-open-guard.js +79 -0
- package/dist/pr-open-guard.js.map +1 -0
- package/dist/prepr-gate.d.ts +229 -1
- package/dist/prepr-gate.d.ts.map +1 -1
- package/dist/prepr-gate.js +406 -3
- package/dist/prepr-gate.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +30 -5
- package/dist/program.js.map +1 -1
- package/dist/provider-auth.d.ts +8 -0
- package/dist/provider-auth.d.ts.map +1 -1
- package/dist/provider-auth.js +10 -0
- package/dist/provider-auth.js.map +1 -1
- package/dist/runtime/quarantine.d.ts +11 -0
- package/dist/runtime/quarantine.d.ts.map +1 -1
- package/dist/runtime/quarantine.js +16 -1
- package/dist/runtime/quarantine.js.map +1 -1
- package/dist/runtime/reviewer.d.ts +90 -2
- package/dist/runtime/reviewer.d.ts.map +1 -1
- package/dist/runtime/reviewer.js +547 -46
- package/dist/runtime/reviewer.js.map +1 -1
- package/dist/runtime/running-build.d.ts +24 -0
- package/dist/runtime/running-build.d.ts.map +1 -0
- package/dist/runtime/running-build.js +62 -0
- package/dist/runtime/running-build.js.map +1 -0
- package/dist/runtime/worktree.d.ts +45 -0
- package/dist/runtime/worktree.d.ts.map +1 -1
- package/dist/runtime/worktree.js +174 -5
- package/dist/runtime/worktree.js.map +1 -1
- package/dist/task-runner.d.ts +126 -5
- package/dist/task-runner.d.ts.map +1 -1
- package/dist/task-runner.js +1219 -127
- package/dist/task-runner.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/watch-chat/wire.d.ts +80 -0
- package/dist/watch-chat/wire.d.ts.map +1 -1
- package/dist/watch-chat/wire.js +203 -43
- package/dist/watch-chat/wire.js.map +1 -1
- package/dist/watch.d.ts +70 -16
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +501 -89
- package/dist/watch.js.map +1 -1
- package/package.json +2 -2
package/dist/login.js
CHANGED
|
@@ -13,12 +13,16 @@ import { execa } from "execa";
|
|
|
13
13
|
import open from "open";
|
|
14
14
|
import { applyBootstrapConfig, concurrencyEnvExplicit, loadConfig, resolveRunnerConcurrency, } from "./config.js";
|
|
15
15
|
import { detectCapableEngines } from "./doctor.js";
|
|
16
|
+
import { buildEnv, requireExecutable, resolveSpawnCommand } from "./bin-resolve.js";
|
|
17
|
+
import { KNOWN_BATCH_ENGINE_IDS, engineIds } from "./engines/registry.js";
|
|
16
18
|
import { instanceMachineSuffix } from "./instance.js";
|
|
17
19
|
import { saveSession } from "./keychain.js";
|
|
18
20
|
import { createRunnerClient } from "./supabase.js";
|
|
19
21
|
import { PROTOCOL_VERSION } from "./types.js";
|
|
20
22
|
import { PACKAGE_VERSION } from "./pkg-version.js";
|
|
21
23
|
import { PAUSE_CAPS_KEY } from "./task-pause/protocol.js";
|
|
24
|
+
import { buildFingerprintCaps } from "./build-fingerprint.js";
|
|
25
|
+
import { resolveCredentialIdentity, resolveCredentialIdentitySync, } from "./credential-identity.js";
|
|
22
26
|
// v0.12.0 (T-52-7): exported so the env-token-mode boot registration in
|
|
23
27
|
// watch.ts declares the same capability surface as a login-registered runner.
|
|
24
28
|
export const RUNNER_CAPS = {
|
|
@@ -73,15 +77,69 @@ export function runnerCapsWithRepos(repos, engines, conc = resolveRunnerConcurre
|
|
|
73
77
|
// server override is known yet, so it defaults to env-vs-default; the watch
|
|
74
78
|
// loop republishes it (with source='server') via runner_pull_concurrency the
|
|
75
79
|
// moment an operator override applies.
|
|
76
|
-
source = concurrencyEnvExplicit() ? "env" : "default"
|
|
77
|
-
|
|
80
|
+
source = concurrencyEnvExplicit() ? "env" : "default", processCapabilities = [],
|
|
81
|
+
// Default resolves env-var/config-file identity synchronously; production
|
|
82
|
+
// register paths pass the awaited full `resolveCredentialIdentity()` (which
|
|
83
|
+
// also reads the OS keychain) so divergent keychain/env accounts across
|
|
84
|
+
// runners surface in the runners table.
|
|
85
|
+
identity = resolveCredentialIdentitySync(), build) {
|
|
86
|
+
const caps = {
|
|
78
87
|
...RUNNER_CAPS,
|
|
79
88
|
repos: repos ? [...repos] : [],
|
|
80
89
|
engines: engines ? [...engines] : [],
|
|
90
|
+
process_capabilities: [...processCapabilities],
|
|
81
91
|
concurrency: conc.concurrency,
|
|
82
92
|
reserved_review_slots: conc.reservedReviewSlots,
|
|
83
93
|
concurrency_source: source,
|
|
94
|
+
...identity,
|
|
84
95
|
};
|
|
96
|
+
return build ? { ...caps, build } : caps;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* CAPS-ENGINES-STALE-KEYCHAIN-1 (AC10): the SINGLE `register_runner` `p_caps`
|
|
100
|
+
* builder shared by the `login` CLI and the watch-boot register, so the two
|
|
101
|
+
* cannot drift for the same environment. Merged with the upstream caps shape:
|
|
102
|
+
* it also folds liveProcessCapabilities(cfg), the resolved credential identity
|
|
103
|
+
* (capacity-attribution), and the build fingerprint — the caller resolves the
|
|
104
|
+
* async `identity`/`build` once and passes them so both paths publish an
|
|
105
|
+
* identical rich caps payload.
|
|
106
|
+
*/
|
|
107
|
+
export function registerRunnerCaps(cfg, engines, conc, identity, build) {
|
|
108
|
+
return runnerCapsWithRepos(cfg.repos, engines, conc, concurrencyEnvExplicit() ? "env" : "default", liveProcessCapabilities(cfg), identity, build);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* REGISTER-CAPS-PRESERVE-1 — the `p_capabilities` array every `register_runner`
|
|
112
|
+
* call must send. Neither call site passed the argument at all, so PostgREST
|
|
113
|
+
* omitted it, the RPC took its `text[] default '{}'` and the 0114/0153 body
|
|
114
|
+
* wrote that empty array straight over acc.runners.capabilities: a runner
|
|
115
|
+
* dispatchable for seven tags came back matching only tasks with an EMPTY
|
|
116
|
+
* required_capabilities — nothing the board queues. Migration 0349 makes the
|
|
117
|
+
* server refuse to shrink; this stops the client asking, which is what keeps
|
|
118
|
+
* 0349's activity-event alarm quiet in steady state. Same set that
|
|
119
|
+
* `set_runner_capabilities` publishes (ACC_RUNNER_CAPABILITIES > config.json >
|
|
120
|
+
* profile > []), so register and refresh can never disagree. Empty stays empty
|
|
121
|
+
* on the wire: 0349 reads it as "preserve", and on a FRESH row it is the 0114
|
|
122
|
+
* backward-compat default.
|
|
123
|
+
*/
|
|
124
|
+
export function advertisedCapabilities(cfg) {
|
|
125
|
+
return [...(cfg.capabilities ?? [])];
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* M5 (CODEX-DISPATCH-WIRE-1): the runner's LIVE process capabilities, published
|
|
129
|
+
* as `caps.process_capabilities` for the capability-divergence report (#2131).
|
|
130
|
+
* Advertised capabilities are static config (`ACC_RUNNER_CAPABILITIES`); the
|
|
131
|
+
* live set drops any advertised tag that names a batch engine THIS runner's
|
|
132
|
+
* registry does not currently register — e.g. a config advertising `codex`
|
|
133
|
+
* while `ACC_ENGINE_CODEX_ENABLED` is off. Publishing the config value verbatim
|
|
134
|
+
* (the pre-M5 behaviour) made `advertised == process` always, so `stale_config`
|
|
135
|
+
* could never fire; deriving it from `engineIds()` is what lets the fleet report
|
|
136
|
+
* surface a disabled/unregistered Codex runner whose advertised caps are stale.
|
|
137
|
+
* Non-engine tags (e.g. `code`, `migration`, `review`) pass through untouched.
|
|
138
|
+
*/
|
|
139
|
+
export function liveProcessCapabilities(cfg, registeredEngineIds = engineIds()) {
|
|
140
|
+
const registered = new Set(registeredEngineIds);
|
|
141
|
+
const knownEngineTag = new Set(KNOWN_BATCH_ENGINE_IDS);
|
|
142
|
+
return advertisedCapabilities(cfg).filter((tag) => !knownEngineTag.has(tag) || registered.has(tag));
|
|
85
143
|
}
|
|
86
144
|
/** The `machine` string the server dedups identity on. NAMED-INSTANCES-1
|
|
87
145
|
* appends `#<name>` so each instance resolves its own stable runner id;
|
|
@@ -95,7 +153,15 @@ export async function detectInstalledModels() {
|
|
|
95
153
|
const out = [];
|
|
96
154
|
for (const bin of ["claude", "codex"]) {
|
|
97
155
|
try {
|
|
98
|
-
|
|
156
|
+
// AC4: no POSIX behaviour change. Only Windows needs the augmented PATH (to
|
|
157
|
+
// reach the claude shim under launchd/install dirs); POSIX keeps the exact
|
|
158
|
+
// pre-PR probe `execa(bin, ["--version"], { env: process.env })`, so which
|
|
159
|
+
// models a POSIX host reports as installed is unchanged.
|
|
160
|
+
const env = bin === "claude" && process.platform === "win32" ? buildEnv() : process.env;
|
|
161
|
+
// Windows resolves claude's concrete shim; POSIX keeps the bare name so
|
|
162
|
+
// execa resolves it against the env PATH (unchanged pre-PR behavior).
|
|
163
|
+
const command = bin === "claude" ? resolveSpawnCommand(bin, { env }) : bin;
|
|
164
|
+
await execa(command, ["--version"], { env });
|
|
99
165
|
if (bin === "claude") {
|
|
100
166
|
out.push("claude-sonnet-4", "claude-code");
|
|
101
167
|
}
|
|
@@ -271,12 +337,20 @@ export async function loginCommand(options = {}) {
|
|
|
271
337
|
// register call targets the right project even on a machine that has
|
|
272
338
|
// never set ACC_SUPABASE_URL (env still overrides via applyBootstrapConfig).
|
|
273
339
|
const bootstrappedCfg = applyBootstrapConfig(cfg, exchanged);
|
|
340
|
+
const claudePreflight = options.claudePreflight ?? (() => void requireExecutable("claude", { env: buildEnv() }));
|
|
341
|
+
claudePreflight();
|
|
274
342
|
const supabase = createRunnerClient(bootstrappedCfg, exchanged.access_token, exchanged.realtime_config);
|
|
275
343
|
const models = await detectInstalledModels();
|
|
276
344
|
// M5: advertise the installed+authed coding engines so the server's
|
|
277
|
-
// engine-aware dispatch (mig 0229)
|
|
278
|
-
//
|
|
279
|
-
const engines = await detectCapableEngines();
|
|
345
|
+
// engine-aware dispatch (mig 0229) routes engine-pinned tasks from the first
|
|
346
|
+
// heartbeat. AC11 seam: defaults to the real detection.
|
|
347
|
+
const engines = await (options.detectEngines ?? detectCapableEngines)();
|
|
348
|
+
const concurrencyCaps = resolveRunnerConcurrency();
|
|
349
|
+
// Resolve the SERVING model-credential account (config-file OR OS-keychain)
|
|
350
|
+
// so the runner row records WHICH account is serving — the whole point of the
|
|
351
|
+
// capacity-attribution feature. Await the full resolver (not the sync default)
|
|
352
|
+
// so a keychain-only login is not silently reported as null.
|
|
353
|
+
const identity = await resolveCredentialIdentity();
|
|
280
354
|
const { error } = await supabase.rpc("register_runner", {
|
|
281
355
|
p_id: exchanged.runner_id,
|
|
282
356
|
p_name: `${exchanged.email ?? exchanged.user_id}'s ${os.hostname()}`,
|
|
@@ -287,8 +361,14 @@ export async function loginCommand(options = {}) {
|
|
|
287
361
|
// first register so the server's repo-aware router has it before
|
|
288
362
|
// watch.ts's set_runner_repos refresh runs. cfg.repos is resolved
|
|
289
363
|
// from ACC_RUNNER_REPOS / config.json `repos` by loadConfig().
|
|
290
|
-
|
|
364
|
+
// AC10: the SAME shared builder the watch-boot register uses, so login and
|
|
365
|
+
// boot publish an identical (now rich: caps + process caps + identity + build
|
|
366
|
+
// fingerprint) shape for the same environment.
|
|
367
|
+
p_caps: registerRunnerCaps(cfg, engines, concurrencyCaps, identity, await buildFingerprintCaps()),
|
|
291
368
|
p_version: PACKAGE_VERSION,
|
|
369
|
+
// REGISTER-CAPS-PRESERVE-1: send the tags EXPLICITLY — omitting the arg let
|
|
370
|
+
// the RPC default clobber the row on every re-login.
|
|
371
|
+
p_capabilities: advertisedCapabilities(cfg),
|
|
292
372
|
});
|
|
293
373
|
if (error) {
|
|
294
374
|
throw new Error(`register_runner failed: ${error.message}`);
|
package/dist/login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,wBAAwB,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,wBAAwB,GAIzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAMnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAwB,MAAM,wBAAwB,CAAC;AACpF,OAAO,EACL,yBAAyB,EACzB,6BAA6B,GAE9B,MAAM,0BAA0B,CAAC;AAElC,wEAAwE;AACxE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,WAAW,GAAe;IACrC,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,EAAE,EAAE,IAAI;IACR,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,IAAI;IAClB,+EAA+E;IAC/E,6EAA6E;IAC7E,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,+EAA+E;IAC/E,CAAC,cAAc,CAAC,EAAE,IAAI;CACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAoC,EACpC,OAAuC,EACvC,OAA0B,wBAAwB,EAAE;AACpD,0EAA0E;AAC1E,4EAA4E;AAC5E,6EAA6E;AAC7E,uCAAuC;AACvC,SAA4B,sBAAsB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EACxE,sBAAyC,EAAE;AAC3C,0EAA0E;AAC1E,4EAA4E;AAC5E,wEAAwE;AACxE,wCAAwC;AACxC,WAA+B,6BAA6B,EAAE,EAC9D,KAAuB;IAavB,MAAM,IAAI,GAAG;QACX,GAAG,WAAW;QACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC9B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QACpC,oBAAoB,EAAE,CAAC,GAAG,mBAAmB,CAAC;QAC9C,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,qBAAqB,EAAE,IAAI,CAAC,mBAAmB;QAC/C,kBAAkB,EAAE,MAAM;QAC1B,GAAG,QAAQ;KACZ,CAAC;IACF,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAAiD,EACjD,OAA0B,EAC1B,IAAuB,EACvB,QAA4B,EAC5B,KAAkC;IAElC,OAAO,mBAAmB,CACxB,GAAG,CAAC,KAAK,EACT,OAAO,EACP,IAAI,EACJ,sBAAsB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAC5C,uBAAuB,CAAC,GAAG,CAAC,EAC5B,QAAQ,EACR,KAAK,CACN,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAuC;IAEvC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAAuC,EACvC,sBAAyC,SAAS,EAAE;IAEpD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACvD,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CACzD,CAAC;AACJ,CAAC;AAED;;;8DAG8D;AAC9D,MAAM,UAAU,eAAe;IAC7B,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,qBAAqB,EAAE,EAAE,CAAC;AAC1F,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAU,EAAE,CAAC;QAC/C,IAAI,CAAC;YACH,4EAA4E;YAC5E,2EAA2E;YAC3E,2EAA2E;YAC3E,yDAAyD;YACzD,MAAM,GAAG,GAAG,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YACxF,wEAAwE;YACxE,sEAAsE;YACtE,MAAM,OAAO,GAAG,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3E,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7C,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,QAAQ,CAAI,GAAW,EAAE,IAAa;IACnD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,cAAc,gBAAgB,EAAE;SAC/C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;KACjC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,YAAY,GAAG,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;AACjC,CAAC;AAED,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAShD,mFAAmF;AACnF,SAAS,OAAO,CAAC,KAAyB;IACxC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,OAAO,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA0B,EAAE;IAC/D,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACnC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IAClD,sEAAsE;IACtE,gEAAgE;IAChE,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,gBAAgB,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC/E,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC;IACjF,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,gBAAgB,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAA0B,EAAE;IAC5D,OAAO,oBAAoB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AAC5C,CAAC;AAOD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,UAAmC,EAAE;IAErC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAuBD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAwB,EAAE;IAC3D,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IAEzB,4BAA4B;IAC5B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAC1B,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,gCAAgC,EACpE,EAAE,CACH,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAErD,6EAA6E;IAC7E,+EAA+E;IAC/E,KAAK,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE/B,iCAAiC;IACjC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IAClF,IAAI,SAAS,GAAsC,IAAI,CAAC;IACxD,4EAA4E;IAC5E,6EAA6E;IAC7E,6DAA6D;IAC7D,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,QAAoC,CAAC;QACzC,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,QAAQ,CACvB,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,kCAAkC,EACtE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CACtD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mBAAmB,IAAI,CAAC,CAAC;YACzB,WAAW,GAAI,GAAa,CAAC,OAAO,CAAC;YACrC,IAAI,mBAAmB,IAAI,iBAAiB,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CACb,+BAA+B,mBAAmB,oBAAoB,WAAW,EAAE,CACpF,CAAC;YACJ,CAAC;YACD,SAAS;QACX,CAAC;QACD,mBAAmB,GAAG,CAAC,CAAC;QACxB,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC7B,SAAS,GAAG,QAAQ,CAAC;YACrB,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAEnF,qEAAqE;IACrE,sEAAsE;IACtE,iCAAiC;IACjC,uEAAuE;IACvE,0EAA0E;IAC1E,uEAAuE;IACvE,iDAAiD;IACjD,MAAM,WAAW,CAAC;QAChB,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,iBAAiB,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;QACtE,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,eAAe,EAAE,SAAS,CAAC,eAAe;KAC3C,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;IAEvE,mEAAmE;IACnE,qEAAqE;IACrE,oEAAoE;IACpE,qEAAqE;IACrE,wEAAwE;IACxE,gFAAgF;IAChF,MAAM,eAAe,GAAG,oBAAoB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,eAAe,GACnB,OAAO,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,iBAAiB,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3F,eAAe,EAAE,CAAC;IAClB,MAAM,QAAQ,GAAG,kBAAkB,CACjC,eAAe,EACf,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,eAAe,CAC1B,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAC7C,oEAAoE;IACpE,6EAA6E;IAC7E,wDAAwD;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,oBAAoB,CAAC,EAAE,CAAC;IACxE,MAAM,eAAe,GAAG,wBAAwB,EAAE,CAAC;IACnD,4EAA4E;IAC5E,8EAA8E;IAC9E,+EAA+E;IAC/E,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,MAAM,yBAAyB,EAAE,CAAC;IACnD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE;QACtD,IAAI,EAAE,SAAS,CAAC,SAAS;QACzB,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;QACpE,OAAO,EAAE,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO;QAC7C,SAAS,EAAE,OAAO;QAClB,QAAQ,EAAE,MAAM;QAChB,iEAAiE;QACjE,iEAAiE;QACjE,kEAAkE;QAClE,+DAA+D;QAC/D,2EAA2E;QAC3E,8EAA8E;QAC9E,+CAA+C;QAC/C,MAAM,EAAE,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oBAAoB,EAAE,CAAC;QACjG,SAAS,EAAE,eAAe;QAC1B,4EAA4E;QAC5E,qDAAqD;QACrD,cAAc,EAAE,sBAAsB,CAAC,GAAG,CAAC;KAC5C,CAAC,CAAC;IACH,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAC;AACjF,CAAC"}
|
package/dist/mcp-spawn.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare const ACC_MCP_KEY = "acc";
|
|
2
|
+
export declare const ACC_MCP_PACKAGE_SPEC = "@tokenfactory/acc-mcp-server@0.6.2";
|
|
2
3
|
/** Env var acc-mcp-server reads the per-turn delegation JWT from (see cli.ts). */
|
|
3
4
|
export declare const ACC_MCP_DELEGATION_TOKEN_ENV = "ACC_MCP_DELEGATION_TOKEN";
|
|
4
5
|
/** Env var acc-mcp-server (future-facing) reads the calling agent's id from. */
|
|
@@ -31,6 +32,20 @@ export interface McpConfigCleanup {
|
|
|
31
32
|
/** Restore .mcp.json to its pre-spawn state (or delete if we created it). */
|
|
32
33
|
restore(): Promise<void>;
|
|
33
34
|
}
|
|
35
|
+
export interface McpConfigSession {
|
|
36
|
+
/** Write or rotate ACC's entry while preserving the one original snapshot. */
|
|
37
|
+
write(opts: McpSpawnOptions): Promise<void>;
|
|
38
|
+
/** Restore the exact config that existed before this runner session. */
|
|
39
|
+
restore(): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
export interface McpConfigShape {
|
|
42
|
+
mcpServers?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
/** Pre-spawn `.mcp.json` snapshot: prior text and its parsed form (null when absent/malformed). */
|
|
45
|
+
export interface ExistingMcpConfig {
|
|
46
|
+
text: string | null;
|
|
47
|
+
parsed: McpConfigShape | null;
|
|
48
|
+
}
|
|
34
49
|
/**
|
|
35
50
|
* Locate a globally installed binary by name. Returns the absolute
|
|
36
51
|
* path when found, or null otherwise. Used to skip the per-task
|
|
@@ -41,9 +56,48 @@ export interface McpConfigCleanup {
|
|
|
41
56
|
* `whichBinary(name)` directly.
|
|
42
57
|
*/
|
|
43
58
|
export declare function whichBinary(name: string): Promise<string | null>;
|
|
59
|
+
export interface McpServerEntry {
|
|
60
|
+
command: string;
|
|
61
|
+
args: string[];
|
|
62
|
+
env: Record<string, string>;
|
|
63
|
+
}
|
|
64
|
+
export interface McpProbeResult {
|
|
65
|
+
ok: boolean;
|
|
66
|
+
detail: string;
|
|
67
|
+
command: "global" | "npx";
|
|
68
|
+
}
|
|
69
|
+
export interface McpProbeDeps {
|
|
70
|
+
which?: (name: string) => Promise<string | null>;
|
|
71
|
+
run?: (command: string, args: string[], options: {
|
|
72
|
+
env: NodeJS.ProcessEnv;
|
|
73
|
+
timeout: number;
|
|
74
|
+
}) => Promise<{
|
|
75
|
+
exitCode: number;
|
|
76
|
+
stdout: string;
|
|
77
|
+
stderr: string;
|
|
78
|
+
}>;
|
|
79
|
+
timeoutMs?: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Start the exact MCP command/config shape Claude will receive and exercise the
|
|
83
|
+
* package's initialize + tools/list healthcheck. This catches a missing/stale
|
|
84
|
+
* global binary, broken package install, incomplete env, and protocol startup
|
|
85
|
+
* failure before the chat lane claims an operator turn.
|
|
86
|
+
*/
|
|
87
|
+
export declare function probeMcpServer(opts: McpSpawnOptions, deps?: McpProbeDeps): Promise<McpProbeResult>;
|
|
88
|
+
/** Injectable READ seam for `<cwd>/.mcp.json`. ENOENT is absent config, never an error. */
|
|
89
|
+
export declare function readMcpConfig(cwd: string): Promise<ExistingMcpConfig>;
|
|
44
90
|
export interface WriteMcpConfigDeps {
|
|
45
91
|
/** Override for tests; defaults to a real PATH lookup via which/where. */
|
|
46
92
|
which?: (name: string) => Promise<string | null>;
|
|
93
|
+
/** Pre-read snapshot from {@link readMcpConfig}; when set, no second real read happens. */
|
|
94
|
+
existing?: ExistingMcpConfig;
|
|
47
95
|
}
|
|
48
96
|
export declare function writeMcpConfig(opts: McpSpawnOptions, deps?: WriteMcpConfigDeps): Promise<McpConfigCleanup>;
|
|
97
|
+
/**
|
|
98
|
+
* Own one runner session's `.mcp.json` lifecycle. Every token refresh rewrites
|
|
99
|
+
* against the same original snapshot; shutdown can therefore never restore a
|
|
100
|
+
* generated entry containing an older access token.
|
|
101
|
+
*/
|
|
102
|
+
export declare function createMcpConfigSession(cwd: string, deps?: Pick<WriteMcpConfigDeps, "which">): Promise<McpConfigSession>;
|
|
49
103
|
//# sourceMappingURL=mcp-spawn.d.ts.map
|
package/dist/mcp-spawn.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-spawn.d.ts","sourceRoot":"","sources":["../src/mcp-spawn.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,WAAW,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-spawn.d.ts","sourceRoot":"","sources":["../src/mcp-spawn.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-spawn.js
CHANGED
|
@@ -34,7 +34,7 @@ import path from "node:path";
|
|
|
34
34
|
import { execa } from "execa";
|
|
35
35
|
export const ACC_MCP_KEY = "acc";
|
|
36
36
|
const MCP_CONFIG_FILENAME = ".mcp.json";
|
|
37
|
-
const
|
|
37
|
+
export const ACC_MCP_PACKAGE_SPEC = "@tokenfactory/acc-mcp-server@0.6.2";
|
|
38
38
|
const ACC_MCP_BIN = "acc-mcp-server";
|
|
39
39
|
/** Env var acc-mcp-server reads the per-turn delegation JWT from (see cli.ts). */
|
|
40
40
|
export const ACC_MCP_DELEGATION_TOKEN_ENV = "ACC_MCP_DELEGATION_TOKEN";
|
|
@@ -96,7 +96,14 @@ function buildEnvBlock(opts) {
|
|
|
96
96
|
}
|
|
97
97
|
/** Non-secret coordinate flags shared by both the global-bin and npx spawn shapes. */
|
|
98
98
|
function coordinateArgs(opts) {
|
|
99
|
-
const args = [
|
|
99
|
+
const args = [
|
|
100
|
+
"--task-id",
|
|
101
|
+
opts.taskId,
|
|
102
|
+
"--runner-id",
|
|
103
|
+
opts.runnerId,
|
|
104
|
+
"--public-url",
|
|
105
|
+
opts.publicUrl,
|
|
106
|
+
];
|
|
100
107
|
const agentId = (opts.agentId ?? "").trim();
|
|
101
108
|
if (agentId)
|
|
102
109
|
args.push("--agent-id", agentId);
|
|
@@ -117,10 +124,63 @@ async function buildEntry(opts, which) {
|
|
|
117
124
|
}
|
|
118
125
|
return {
|
|
119
126
|
command: "npx",
|
|
120
|
-
args: ["-y",
|
|
127
|
+
args: ["-y", ACC_MCP_PACKAGE_SPEC, ...coordinateArgs(opts)],
|
|
121
128
|
env: buildEnvBlock(opts),
|
|
122
129
|
};
|
|
123
130
|
}
|
|
131
|
+
function safeProbeDetail(raw, opts) {
|
|
132
|
+
let detail = raw;
|
|
133
|
+
for (const secret of [opts.accessToken, opts.delegationToken, opts.supabaseAnonKey]) {
|
|
134
|
+
const value = (secret ?? "").trim();
|
|
135
|
+
if (value)
|
|
136
|
+
detail = detail.split(value).join("[redacted]");
|
|
137
|
+
}
|
|
138
|
+
return detail.slice(0, 500);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Start the exact MCP command/config shape Claude will receive and exercise the
|
|
142
|
+
* package's initialize + tools/list healthcheck. This catches a missing/stale
|
|
143
|
+
* global binary, broken package install, incomplete env, and protocol startup
|
|
144
|
+
* failure before the chat lane claims an operator turn.
|
|
145
|
+
*/
|
|
146
|
+
export async function probeMcpServer(opts, deps = {}) {
|
|
147
|
+
const entry = await buildEntry(opts, deps.which ?? whichBinary);
|
|
148
|
+
const commandKind = entry.command === "npx" ? "npx" : "global";
|
|
149
|
+
const run = deps.run ??
|
|
150
|
+
(async (command, args, options) => {
|
|
151
|
+
const result = await execa(command, args, {
|
|
152
|
+
env: options.env,
|
|
153
|
+
timeout: options.timeout,
|
|
154
|
+
reject: false,
|
|
155
|
+
});
|
|
156
|
+
return {
|
|
157
|
+
exitCode: result.exitCode ?? 1,
|
|
158
|
+
stdout: result.stdout,
|
|
159
|
+
stderr: result.stderr,
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
try {
|
|
163
|
+
const result = await run(entry.command, [...entry.args, "--healthcheck"], {
|
|
164
|
+
env: { ...process.env, ...entry.env },
|
|
165
|
+
timeout: deps.timeoutMs ?? 20_000,
|
|
166
|
+
});
|
|
167
|
+
const detail = safeProbeDetail((result.stdout || result.stderr || `exit ${result.exitCode}`)
|
|
168
|
+
.split(/\r?\n/)[0]
|
|
169
|
+
?.trim() ?? "", opts);
|
|
170
|
+
return {
|
|
171
|
+
ok: result.exitCode === 0,
|
|
172
|
+
detail: detail || `exit ${result.exitCode}`,
|
|
173
|
+
command: commandKind,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
return {
|
|
178
|
+
ok: false,
|
|
179
|
+
detail: safeProbeDetail(err.message.split("\n")[0], opts),
|
|
180
|
+
command: commandKind,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
124
184
|
async function readExisting(filePath) {
|
|
125
185
|
try {
|
|
126
186
|
const text = await fs.readFile(filePath, "utf8");
|
|
@@ -141,9 +201,13 @@ async function readExisting(filePath) {
|
|
|
141
201
|
throw err;
|
|
142
202
|
}
|
|
143
203
|
}
|
|
204
|
+
/** Injectable READ seam for `<cwd>/.mcp.json`. ENOENT is absent config, never an error. */
|
|
205
|
+
export async function readMcpConfig(cwd) {
|
|
206
|
+
return readExisting(path.join(cwd, MCP_CONFIG_FILENAME));
|
|
207
|
+
}
|
|
144
208
|
export async function writeMcpConfig(opts, deps = {}) {
|
|
145
209
|
const filePath = path.join(opts.cwd, MCP_CONFIG_FILENAME);
|
|
146
|
-
const existing = await readExisting(filePath);
|
|
210
|
+
const existing = deps.existing ?? (await readExisting(filePath));
|
|
147
211
|
const which = deps.which ?? whichBinary;
|
|
148
212
|
// Build merged config. If the existing file has a parseable mcpServers
|
|
149
213
|
// block, keep the operator's other servers and slot ours in.
|
|
@@ -168,4 +232,24 @@ export async function writeMcpConfig(opts, deps = {}) {
|
|
|
168
232
|
},
|
|
169
233
|
};
|
|
170
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* Own one runner session's `.mcp.json` lifecycle. Every token refresh rewrites
|
|
237
|
+
* against the same original snapshot; shutdown can therefore never restore a
|
|
238
|
+
* generated entry containing an older access token.
|
|
239
|
+
*/
|
|
240
|
+
export async function createMcpConfigSession(cwd, deps = {}) {
|
|
241
|
+
const original = await readMcpConfig(cwd);
|
|
242
|
+
let active = null;
|
|
243
|
+
return {
|
|
244
|
+
async write(opts) {
|
|
245
|
+
if (path.resolve(opts.cwd) !== path.resolve(cwd)) {
|
|
246
|
+
throw new Error("MCP config session cannot change working directory");
|
|
247
|
+
}
|
|
248
|
+
active = await writeMcpConfig(opts, { ...deps, existing: original });
|
|
249
|
+
},
|
|
250
|
+
async restore() {
|
|
251
|
+
await active?.restore();
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
171
255
|
//# sourceMappingURL=mcp-spawn.js.map
|
package/dist/mcp-spawn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-spawn.js","sourceRoot":"","sources":["../src/mcp-spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AACjC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AACxC,MAAM,
|
|
1
|
+
{"version":3,"file":"mcp-spawn.js","sourceRoot":"","sources":["../src/mcp-spawn.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Kill switch. Set to `0`/`false` to skip the pre-push re-validation entirely. */
|
|
2
2
|
export declare const SEQ_GUARD_ENV = "ACC_MIGRATION_SEQ_GUARD";
|
|
3
3
|
/** Every reason the guard can decline to renumber, for the runner log. */
|
|
4
|
-
export type SeqGuardSkipReason = "disabled" | "no-base-ref" | "no-new-migrations" | "no-remote-seqs" | "seq-free" | "renumber-noop" | "renumber-failed";
|
|
4
|
+
export type SeqGuardSkipReason = "disabled" | "no-base-ref" | "no-new-migrations" | "no-remote-seqs" | "seq-free" | "inherited-only" | "renumber-noop" | "renumber-failed";
|
|
5
5
|
export interface SeqGuardRenumber {
|
|
6
6
|
/** Repo-relative path the migration had before the guard ran. */
|
|
7
7
|
file: string;
|
|
@@ -10,6 +10,17 @@ export interface SeqGuardRenumber {
|
|
|
10
10
|
/** Numeric seq before → after. */
|
|
11
11
|
fromSeq: number;
|
|
12
12
|
toSeq: number;
|
|
13
|
+
/** AC4: the seq on the fresh target head this branch's file collided with. */
|
|
14
|
+
upstreamSeq: number | null;
|
|
15
|
+
/** AC4: the branch's file was byte-identical (modulo seq refs) to the target's
|
|
16
|
+
* file at that seq. Always false for a file that was renumbered — an identical
|
|
17
|
+
* file is INHERITED and excluded, never renamed (#2132). */
|
|
18
|
+
identicalModuloSeq: boolean;
|
|
19
|
+
/** AC4: the branch's exact file path was present on the fresh target head. */
|
|
20
|
+
reachableFromTarget: boolean;
|
|
21
|
+
/** AC5: repo-relative files the renumber rewrote OUTSIDE supabase/migrations/
|
|
22
|
+
* (sibling tests, contract fixtures) — the text-substitution is never silent. */
|
|
23
|
+
refsRewrittenOutside: string[];
|
|
13
24
|
/** Tail of the renumber tool's own log (which refs it rewrote). */
|
|
14
25
|
output: string;
|
|
15
26
|
}
|
|
@@ -50,12 +61,19 @@ export interface SeqGuardDeps {
|
|
|
50
61
|
listRemoteMigrations?: (workdir: string, ref: string) => Promise<string[] | null>;
|
|
51
62
|
/** Migration files this branch ADDED vs `baseRef`, repo-relative. */
|
|
52
63
|
listAddedMigrations?: (workdir: string, baseRef?: string) => Promise<string[]>;
|
|
64
|
+
/** A candidate's content in the working tree (the branch's copy). `null` = unreadable. */
|
|
65
|
+
readWorkingFile?: (workdir: string, file: string) => Promise<string | null>;
|
|
66
|
+
/** A file's content at a git ref (the fresh target's copy). `null` = absent/unreadable. */
|
|
67
|
+
readRefFile?: (workdir: string, ref: string, file: string) => Promise<string | null>;
|
|
53
68
|
/** Run the renumber pass with an out-of-tree baseline roster. */
|
|
54
69
|
runRenumber?: (workdir: string, files: string[], baselineSeqs: number[]) => Promise<{
|
|
55
70
|
output: string;
|
|
56
71
|
}>;
|
|
57
72
|
/** True when the working tree has uncommitted changes (did the renumber act?). */
|
|
58
73
|
isDirty?: (workdir: string) => Promise<boolean>;
|
|
74
|
+
/** Repo-relative paths the renumber changed (git status), to record which files
|
|
75
|
+
* OUTSIDE supabase/migrations/ it rewrote (AC5). Defaults to `git status`. */
|
|
76
|
+
listChangedFiles?: (workdir: string) => Promise<string[]>;
|
|
59
77
|
/** Commit the rename so the push carries it. */
|
|
60
78
|
commit?: (workdir: string, message: string) => Promise<void>;
|
|
61
79
|
}
|
|
@@ -68,6 +86,15 @@ export interface SeqGuardDeps {
|
|
|
68
86
|
export declare function migrationSeq(file: string): number | null;
|
|
69
87
|
/** Whether the guard is enabled. ON by default; `0`/`false`/`no` turns it off. */
|
|
70
88
|
export declare function seqGuardEnabled(env?: NodeJS.ProcessEnv): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* True when two migration bodies are the SAME migration modulo their seq number
|
|
91
|
+
* — the branch merely INHERITED this file from the target (a merge brought it in
|
|
92
|
+
* unchanged), so renaming it would corrupt an already-merged, already-applied
|
|
93
|
+
* migration (#2132). A same-seq file with different content is a genuine
|
|
94
|
+
* collision and returns false, so it still renumbers (AC2). The seq token (both
|
|
95
|
+
* zero-padded and bare) is neutralised in both sides before the compare.
|
|
96
|
+
*/
|
|
97
|
+
export declare function sameMigrationModuloSeq(a: string, b: string, seq: number): boolean;
|
|
71
98
|
/**
|
|
72
99
|
* Re-validate this branch's NEW migration seq against a freshly-fetched
|
|
73
100
|
* integration head and auto-renumber it when a sibling has since taken the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-seq-guard.d.ts","sourceRoot":"","sources":["../src/migration-seq-guard.ts"],"names":[],"mappings":"AAkDA,mFAAmF;AACnF,eAAO,MAAM,aAAa,4BAA4B,CAAC;AAIvD,0EAA0E;AAC1E,MAAM,MAAM,kBAAkB,GAC1B,UAAU,GACV,aAAa,GACb,mBAAmB,GACnB,gBAAgB,GAChB,UAAU,GACV,eAAe,GACf,iBAAiB,CAAC;AAEtB,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,UAAU,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mCAAmC;IACnC,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IAClF,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/E,iEAAiE;IACjE,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,EAAE,MAAM,EAAE,KACnB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjC,kFAAkF;IAClF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,gDAAgD;IAChD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMxD;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAI7E;
|
|
1
|
+
{"version":3,"file":"migration-seq-guard.d.ts","sourceRoot":"","sources":["../src/migration-seq-guard.ts"],"names":[],"mappings":"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"}
|