@tokenfactory/acc-runner 0.44.0 → 0.44.2
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 +43 -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 +91 -0
- package/dist/cost-pricing.d.ts.map +1 -1
- package/dist/cost-pricing.js +115 -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 +37 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +300 -41
- 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/instance.d.ts +30 -0
- package/dist/instance.d.ts.map +1 -0
- package/dist/instance.js +51 -0
- package/dist/instance.js.map +1 -0
- package/dist/keychain.d.ts +20 -7
- package/dist/keychain.d.ts.map +1 -1
- package/dist/keychain.js +40 -4
- 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 +63 -2
- package/dist/login.d.ts.map +1 -1
- package/dist/login.js +93 -8
- 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/memory-context.d.ts +106 -0
- package/dist/memory-context.d.ts.map +1 -0
- package/dist/memory-context.js +220 -0
- package/dist/memory-context.js.map +1 -0
- package/dist/memory-curation.d.ts +172 -0
- package/dist/memory-curation.d.ts.map +1 -0
- package/dist/memory-curation.js +277 -0
- package/dist/memory-curation.js.map +1 -0
- 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 +43 -5
- package/dist/program.js.map +1 -1
- package/dist/provider-auth.d.ts +27 -0
- package/dist/provider-auth.d.ts.map +1 -1
- package/dist/provider-auth.js +33 -0
- package/dist/provider-auth.js.map +1 -1
- package/dist/runtime/cache-dir.d.ts.map +1 -1
- package/dist/runtime/cache-dir.js +8 -3
- package/dist/runtime/cache-dir.js.map +1 -1
- package/dist/runtime/decision-provenance.d.ts +63 -0
- package/dist/runtime/decision-provenance.d.ts.map +1 -0
- package/dist/runtime/decision-provenance.js +107 -0
- package/dist/runtime/decision-provenance.js.map +1 -0
- package/dist/runtime/prompt-substitute.d.ts +100 -0
- package/dist/runtime/prompt-substitute.d.ts.map +1 -0
- package/dist/runtime/prompt-substitute.js +124 -0
- package/dist/runtime/prompt-substitute.js.map +1 -0
- 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/review-cost-cap.d.ts +167 -0
- package/dist/runtime/review-cost-cap.d.ts.map +1 -0
- package/dist/runtime/review-cost-cap.js +182 -0
- package/dist/runtime/review-cost-cap.js.map +1 -0
- package/dist/runtime/reviewer-abstain.d.ts +101 -0
- package/dist/runtime/reviewer-abstain.d.ts.map +1 -0
- package/dist/runtime/reviewer-abstain.js +138 -0
- package/dist/runtime/reviewer-abstain.js.map +1 -0
- package/dist/runtime/reviewer.d.ts +165 -2
- package/dist/runtime/reviewer.d.ts.map +1 -1
- package/dist/runtime/reviewer.js +752 -111
- 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/singleton.d.ts.map +1 -1
- package/dist/runtime/singleton.js +9 -1
- package/dist/runtime/singleton.js.map +1 -1
- 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/serving-auth/index.d.ts +79 -0
- package/dist/serving-auth/index.d.ts.map +1 -0
- package/dist/serving-auth/index.js +169 -0
- package/dist/serving-auth/index.js.map +1 -0
- package/dist/task-runner.d.ts +134 -5
- package/dist/task-runner.d.ts.map +1 -1
- package/dist/task-runner.js +1255 -129
- 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 +548 -108
- package/dist/watch.js.map +1 -1
- package/package.json +4 -3
package/dist/login.js
CHANGED
|
@@ -13,11 +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";
|
|
18
|
+
import { instanceMachineSuffix } from "./instance.js";
|
|
16
19
|
import { saveSession } from "./keychain.js";
|
|
17
20
|
import { createRunnerClient } from "./supabase.js";
|
|
18
21
|
import { PROTOCOL_VERSION } from "./types.js";
|
|
19
22
|
import { PACKAGE_VERSION } from "./pkg-version.js";
|
|
20
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";
|
|
21
26
|
// v0.12.0 (T-52-7): exported so the env-token-mode boot registration in
|
|
22
27
|
// watch.ts declares the same capability surface as a login-registered runner.
|
|
23
28
|
export const RUNNER_CAPS = {
|
|
@@ -72,25 +77,91 @@ export function runnerCapsWithRepos(repos, engines, conc = resolveRunnerConcurre
|
|
|
72
77
|
// server override is known yet, so it defaults to env-vs-default; the watch
|
|
73
78
|
// loop republishes it (with source='server') via runner_pull_concurrency the
|
|
74
79
|
// moment an operator override applies.
|
|
75
|
-
source = concurrencyEnvExplicit() ? "env" : "default"
|
|
76
|
-
|
|
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 = {
|
|
77
87
|
...RUNNER_CAPS,
|
|
78
88
|
repos: repos ? [...repos] : [],
|
|
79
89
|
engines: engines ? [...engines] : [],
|
|
90
|
+
process_capabilities: [...processCapabilities],
|
|
80
91
|
concurrency: conc.concurrency,
|
|
81
92
|
reserved_review_slots: conc.reservedReviewSlots,
|
|
82
93
|
concurrency_source: source,
|
|
94
|
+
...identity,
|
|
83
95
|
};
|
|
96
|
+
return build ? { ...caps, build } : caps;
|
|
84
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));
|
|
143
|
+
}
|
|
144
|
+
/** The `machine` string the server dedups identity on. NAMED-INSTANCES-1
|
|
145
|
+
* appends `#<name>` so each instance resolves its own stable runner id;
|
|
146
|
+
* unnamed = the v0.44.0 string byte-for-byte. Every caller shares this fn so
|
|
147
|
+
* the suffix can never reach some payloads and not others. */
|
|
85
148
|
export function machineIdentity() {
|
|
86
|
-
return `${process.platform}-${process.arch}-${os.hostname()}`;
|
|
149
|
+
return `${process.platform}-${process.arch}-${os.hostname()}${instanceMachineSuffix()}`;
|
|
87
150
|
}
|
|
88
151
|
// v0.12.0 (T-52-7): exported for the same reason as RUNNER_CAPS above.
|
|
89
152
|
export async function detectInstalledModels() {
|
|
90
153
|
const out = [];
|
|
91
154
|
for (const bin of ["claude", "codex"]) {
|
|
92
155
|
try {
|
|
93
|
-
|
|
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 });
|
|
94
165
|
if (bin === "claude") {
|
|
95
166
|
out.push("claude-sonnet-4", "claude-code");
|
|
96
167
|
}
|
|
@@ -266,12 +337,20 @@ export async function loginCommand(options = {}) {
|
|
|
266
337
|
// register call targets the right project even on a machine that has
|
|
267
338
|
// never set ACC_SUPABASE_URL (env still overrides via applyBootstrapConfig).
|
|
268
339
|
const bootstrappedCfg = applyBootstrapConfig(cfg, exchanged);
|
|
340
|
+
const claudePreflight = options.claudePreflight ?? (() => void requireExecutable("claude", { env: buildEnv() }));
|
|
341
|
+
claudePreflight();
|
|
269
342
|
const supabase = createRunnerClient(bootstrappedCfg, exchanged.access_token, exchanged.realtime_config);
|
|
270
343
|
const models = await detectInstalledModels();
|
|
271
344
|
// M5: advertise the installed+authed coding engines so the server's
|
|
272
|
-
// engine-aware dispatch (mig 0229)
|
|
273
|
-
//
|
|
274
|
-
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();
|
|
275
354
|
const { error } = await supabase.rpc("register_runner", {
|
|
276
355
|
p_id: exchanged.runner_id,
|
|
277
356
|
p_name: `${exchanged.email ?? exchanged.user_id}'s ${os.hostname()}`,
|
|
@@ -282,8 +361,14 @@ export async function loginCommand(options = {}) {
|
|
|
282
361
|
// first register so the server's repo-aware router has it before
|
|
283
362
|
// watch.ts's set_runner_repos refresh runs. cfg.repos is resolved
|
|
284
363
|
// from ACC_RUNNER_REPOS / config.json `repos` by loadConfig().
|
|
285
|
-
|
|
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()),
|
|
286
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),
|
|
287
372
|
});
|
|
288
373
|
if (error) {
|
|
289
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":"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"}
|
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.1";
|
|
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.1";
|
|
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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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/** The ONLY `acc.memory_data_class` value this module will read. */
|
|
2
|
+
export declare const OPERATIONAL = "operational";
|
|
3
|
+
/** Hard ceiling on injected rows. */
|
|
4
|
+
export declare const MAX_INJECTED_MEMORIES = 5;
|
|
5
|
+
/**
|
|
6
|
+
* How many rows to ASK the RPC for. Wider than the injection because ranking,
|
|
7
|
+
* dedup and the relevance gate all run after the fetch: gating a 5-row window
|
|
8
|
+
* would usually leave 0-1 rows, which reads as "memory does nothing".
|
|
9
|
+
*/
|
|
10
|
+
export declare const MAX_MEMORY_CANDIDATES = 30;
|
|
11
|
+
/** Longest single memory rendered; longer bodies are cut with an ellipsis. */
|
|
12
|
+
export declare const MAX_MEMORY_CHARS = 400;
|
|
13
|
+
/** Longest whole section, in characters. The secondary ceiling under the budget. */
|
|
14
|
+
export declare const MAX_SECTION_CHARS = 2000;
|
|
15
|
+
/**
|
|
16
|
+
* The PRIMARY bound: estimated tokens of the rendered section, heading and
|
|
17
|
+
* preamble included. A prompt budget is denominated in tokens, so this is what
|
|
18
|
+
* the cap has to be expressed in; ~500 tokens is a few percent of a task prompt.
|
|
19
|
+
*/
|
|
20
|
+
export declare const MAX_INJECTED_TOKENS = 500;
|
|
21
|
+
/** The heading the section is emitted under — the label the agent reads. */
|
|
22
|
+
export declare const MEMORY_SECTION_HEADING = "## Prior operational memory (from earlier runs)";
|
|
23
|
+
/** One `acc.agent_memory` row, as much of it as this module uses. */
|
|
24
|
+
export interface OperationalMemory {
|
|
25
|
+
id: string;
|
|
26
|
+
data_class: string;
|
|
27
|
+
content: string;
|
|
28
|
+
is_pinned: boolean;
|
|
29
|
+
created_at: string;
|
|
30
|
+
/** MEMORY-2 (migration 0335). Null for a row written before that migration. */
|
|
31
|
+
updated_at: string | null;
|
|
32
|
+
confidence: number | null;
|
|
33
|
+
read_count: number;
|
|
34
|
+
/** MEMORY-2 (migration 0335). Near-identical writes that merged into this row. */
|
|
35
|
+
merge_count: number;
|
|
36
|
+
source_task_id: string | null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The Supabase surface this module needs — one RPC, nothing else.
|
|
40
|
+
*
|
|
41
|
+
* any-allowed: the supabase-js Database generic isn't generated for acc.*, and
|
|
42
|
+
* rpc() returns a thenable builder whose resolved union is not expressible as a
|
|
43
|
+
* single narrow signature. Mirrors the loose client typing used across the
|
|
44
|
+
* runner and api/_lib.
|
|
45
|
+
*/
|
|
46
|
+
export interface MemoryRpcClient {
|
|
47
|
+
rpc(fn: string, args: Record<string, unknown>): any;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Keep only genuinely operational rows, rank them, collapse near-identical
|
|
51
|
+
* ones, and bound the count.
|
|
52
|
+
*
|
|
53
|
+
* Pure. Re-applies the class filter the RPC argument already made because this
|
|
54
|
+
* is the last gate before a row reaches a model's context: if the definer RPC
|
|
55
|
+
* ever changes under us, the failure mode must be "nothing is injected", never
|
|
56
|
+
* "a sensitive row is".
|
|
57
|
+
*
|
|
58
|
+
* `nowMs` is a parameter and never `Date.now()` read inline — the ranking is a
|
|
59
|
+
* pure function of (rows, clock), which is what makes it testable without a
|
|
60
|
+
* fixture that expires (the SWEEP-FIX-1 lesson).
|
|
61
|
+
*/
|
|
62
|
+
export declare function selectOperationalMemories(rows: unknown, limit?: number, nowMs?: number): OperationalMemory[];
|
|
63
|
+
/**
|
|
64
|
+
* Drop memories that have nothing to do with the task at hand.
|
|
65
|
+
*
|
|
66
|
+
* Pure. An empty `taskText` returns the input unchanged (see the module
|
|
67
|
+
* docblock on why the gate is inert rather than total in that case).
|
|
68
|
+
*/
|
|
69
|
+
export declare function selectRelevantMemories(memories: readonly OperationalMemory[], taskText: string | null | undefined): OperationalMemory[];
|
|
70
|
+
/**
|
|
71
|
+
* Render the injected section, or `""` when there is nothing to inject.
|
|
72
|
+
*
|
|
73
|
+
* Pure. The empty string is what makes injection a true no-op: the caller
|
|
74
|
+
* concatenates unconditionally and an agent with no relevant memory gets
|
|
75
|
+
* exactly the pre-injection prompt.
|
|
76
|
+
*
|
|
77
|
+
* The budget is charged against the HEADING AND PREAMBLE as well as the rows,
|
|
78
|
+
* because those are tokens the prompt pays for too. A row that would breach
|
|
79
|
+
* either the token budget or the character ceiling is DROPPED WHOLE rather than
|
|
80
|
+
* cut — a half-sentence memory reads as a corrupted instruction.
|
|
81
|
+
*/
|
|
82
|
+
export declare function renderMemorySection(memories: readonly OperationalMemory[], tokenBudget?: number): string;
|
|
83
|
+
/** What {@link buildMemoryContext} may be told about the run it is building for. */
|
|
84
|
+
export interface MemoryContextOptions {
|
|
85
|
+
/** Rows to inject, at most {@link MAX_INJECTED_MEMORIES}. */
|
|
86
|
+
limit?: number;
|
|
87
|
+
/**
|
|
88
|
+
* The task, as text: title + description + acceptance criteria. Drives the
|
|
89
|
+
* relevance gate. Omit it and the gate is inert.
|
|
90
|
+
*/
|
|
91
|
+
taskText?: string | null;
|
|
92
|
+
/** Token budget for the rendered section. */
|
|
93
|
+
tokenBudget?: number;
|
|
94
|
+
/** Injected clock. Never read from `Date.now()` inside the ranking. */
|
|
95
|
+
nowMs?: number;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Fetch, rank, gate, budget and render this agent's operational memory.
|
|
99
|
+
*
|
|
100
|
+
* Best-effort by construction: a missing agent id, an RPC error, a malformed
|
|
101
|
+
* payload, or nothing relevant to this task all resolve to `""`. The memory
|
|
102
|
+
* store is an enhancement to a run, so it is never allowed to be the reason a
|
|
103
|
+
* run does not happen.
|
|
104
|
+
*/
|
|
105
|
+
export declare function buildMemoryContext(sb: MemoryRpcClient, agentId: string | null | undefined, opts?: MemoryContextOptions): Promise<string>;
|
|
106
|
+
//# sourceMappingURL=memory-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-context.d.ts","sourceRoot":"","sources":["../src/memory-context.ts"],"names":[],"mappings":"AA4DA,oEAAoE;AACpE,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,qCAAqC;AACrC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AACvC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,oDAAoD,CAAC;AAExF,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAE9B,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC;CACrD;AAOD;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,OAAO,EACb,KAAK,GAAE,MAA8B,EACrC,KAAK,GAAE,MAAmB,GACzB,iBAAiB,EAAE,CA0BrB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EACtC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,iBAAiB,EAAE,CAIrB;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EACtC,WAAW,GAAE,MAA4B,GACxC,MAAM,CA6BR;AAED,oFAAoF;AACpF,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,eAAe,EACnB,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
|