@cortexkit/aft-pi 0.54.0 → 0.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bash-wait-detach.d.ts.map +1 -1
- package/dist/bg-notifications.d.ts +1 -0
- package/dist/bg-notifications.d.ts.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/index.js +485 -81
- package/dist/lsp-auto-install.d.ts.map +1 -1
- package/dist/lsp-cache.d.ts +9 -6
- package/dist/lsp-cache.d.ts.map +1 -1
- package/dist/tools/hoisted.d.ts.map +1 -1
- package/dist/tools/semantic.d.ts.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash-wait-detach.d.ts","sourceRoot":"","sources":["../src/bash-wait-detach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,KAAK,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;AAEzE,eAAO,MAAM,8BAA8B,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"bash-wait-detach.d.ts","sourceRoot":"","sources":["../src/bash-wait-detach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,KAAK,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;AAEzE,eAAO,MAAM,8BAA8B,YAAY,CAAC;AAcxD,4GAA4G;AAC5G,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAIzE;AAED,iFAAiF;AACjF,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAIjG;AAaD,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
|
@@ -175,6 +175,7 @@ export declare function handleSubcBgEventsNudge(drainContext: DrainContext & {
|
|
|
175
175
|
export declare function formatSystemReminder(completions: readonly BgCompletion[]): string;
|
|
176
176
|
export declare function formatLongRunningReminder(reminders: readonly BgLongRunningReminder[]): string;
|
|
177
177
|
export declare function formatPatternMatchReminder(matches: readonly PatternMatchEntry[]): string;
|
|
178
|
+
export declare function __setBgNotificationHopTimeoutForTests(timeoutMs: number): void;
|
|
178
179
|
export declare function __resetBgNotificationStateForTests(): void;
|
|
179
180
|
export declare function cleanupIdleSessionStates(now?: number): void;
|
|
180
181
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bg-notifications.d.ts","sourceRoot":"","sources":["../src/bg-notifications.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bg-notifications.d.ts","sourceRoot":"","sources":["../src/bg-notifications.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -27,6 +27,10 @@ export interface GhShimConfig {
|
|
|
27
27
|
/** User-tier AFT image used by the managed `gh` entry. Defaults to the running image. */
|
|
28
28
|
binary_path?: string;
|
|
29
29
|
}
|
|
30
|
+
export interface GhReadConfig {
|
|
31
|
+
/** User-tier operator opt-in for structured issue:// and pr:// reads. Default: false. */
|
|
32
|
+
enabled?: boolean;
|
|
33
|
+
}
|
|
30
34
|
export interface GitConfig {
|
|
31
35
|
/** "off" (default), "auto", or an explicit "Name <email>" identity. */
|
|
32
36
|
co_author?: string;
|
|
@@ -210,6 +214,7 @@ export interface AftConfig {
|
|
|
210
214
|
bridge?: BridgeConfig;
|
|
211
215
|
subc?: SubcConfig;
|
|
212
216
|
gh_shim?: GhShimConfig;
|
|
217
|
+
gh_read?: GhReadConfig;
|
|
213
218
|
git?: GitConfig;
|
|
214
219
|
/** Per-harness config overrides; nested harnesses are ignored. */
|
|
215
220
|
harnesses?: Record<string, Omit<AftConfig, "harnesses">>;
|
|
@@ -421,6 +426,9 @@ export declare const AftConfigSchema: z.ZodPreprocess<z.ZodObject<{
|
|
|
421
426
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
422
427
|
binary_path: z.ZodOptional<z.ZodString>;
|
|
423
428
|
}, z.core.$strip>>;
|
|
429
|
+
gh_read: z.ZodOptional<z.ZodObject<{
|
|
430
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
431
|
+
}, z.core.$strip>>;
|
|
424
432
|
git: z.ZodOptional<z.ZodObject<{
|
|
425
433
|
co_author: z.ZodOptional<z.ZodString>;
|
|
426
434
|
}, z.core.$strip>>;
|
|
@@ -586,6 +594,9 @@ export declare const AftConfigSchema: z.ZodPreprocess<z.ZodObject<{
|
|
|
586
594
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
587
595
|
binary_path: z.ZodOptional<z.ZodString>;
|
|
588
596
|
}, z.core.$strip>>;
|
|
597
|
+
gh_read: z.ZodOptional<z.ZodObject<{
|
|
598
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
599
|
+
}, z.core.$strip>>;
|
|
589
600
|
git: z.ZodOptional<z.ZodObject<{
|
|
590
601
|
co_author: z.ZodOptional<z.ZodString>;
|
|
591
602
|
}, z.core.$strip>>;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8923,6 +8923,21 @@ class BinaryBridge {
|
|
|
8923
8923
|
}
|
|
8924
8924
|
return this.sendWithVersionMismatchRetry(command, dispatchParams, options, true);
|
|
8925
8925
|
}
|
|
8926
|
+
listenForRequestAbort(requestId, signal) {
|
|
8927
|
+
if (!signal)
|
|
8928
|
+
return () => {};
|
|
8929
|
+
let fired = false;
|
|
8930
|
+
const onAbort = () => {
|
|
8931
|
+
if (fired)
|
|
8932
|
+
return;
|
|
8933
|
+
fired = true;
|
|
8934
|
+
this.send("cancel_request", { id: requestId }, { keepBridgeOnTimeout: true }).catch(() => {});
|
|
8935
|
+
};
|
|
8936
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
8937
|
+
if (signal.aborted)
|
|
8938
|
+
onAbort();
|
|
8939
|
+
return () => signal.removeEventListener("abort", onAbort);
|
|
8940
|
+
}
|
|
8926
8941
|
async toolCall(sessionId, name, rawArgs = {}, options) {
|
|
8927
8942
|
const params = { name, arguments: rawArgs };
|
|
8928
8943
|
if (sessionId)
|
|
@@ -8945,7 +8960,7 @@ class BinaryBridge {
|
|
|
8945
8960
|
if (this._shuttingDown) {
|
|
8946
8961
|
throw new BridgeTransportUnavailableError(`${this.errorPrefix} Bridge is shutting down, cannot send "${command}"`);
|
|
8947
8962
|
}
|
|
8948
|
-
if (Object.hasOwn(params, "id")) {
|
|
8963
|
+
if (Object.hasOwn(params, "id") && command !== "cancel_request") {
|
|
8949
8964
|
throw new Error("params cannot contain reserved key 'id'");
|
|
8950
8965
|
}
|
|
8951
8966
|
const requestSessionId = typeof params.session_id === "string" && params.session_id.length > 0 ? params.session_id : undefined;
|
|
@@ -8999,7 +9014,7 @@ class BinaryBridge {
|
|
|
8999
9014
|
}
|
|
9000
9015
|
const id = String(this.nextId++);
|
|
9001
9016
|
let request;
|
|
9002
|
-
if (Object.hasOwn(params, "command") || Object.hasOwn(params, "method")) {
|
|
9017
|
+
if (command === "cancel_request" || Object.hasOwn(params, "command") || Object.hasOwn(params, "method")) {
|
|
9003
9018
|
const nested = { ...params };
|
|
9004
9019
|
const reserved = {};
|
|
9005
9020
|
for (const key of ["session_id", "lsp_hints"]) {
|
|
@@ -9019,11 +9034,12 @@ class BinaryBridge {
|
|
|
9019
9034
|
const child = this.process;
|
|
9020
9035
|
const response = await new Promise((resolve3, reject) => {
|
|
9021
9036
|
const timer = setTimeout(() => {
|
|
9022
|
-
const
|
|
9023
|
-
if (!
|
|
9037
|
+
const entry2 = this.pending.get(id);
|
|
9038
|
+
if (!entry2)
|
|
9024
9039
|
return;
|
|
9025
9040
|
this.pending.delete(id);
|
|
9026
|
-
clearTimeout(
|
|
9041
|
+
clearTimeout(entry2.timer);
|
|
9042
|
+
entry2.onSettled?.();
|
|
9027
9043
|
if (keepBridgeOnTimeout) {
|
|
9028
9044
|
const timeoutMsg2 = `Request "${command}" (id=${id}) timed out after ${effectiveTimeoutMs}ms`;
|
|
9029
9045
|
if (requestSessionId) {
|
|
@@ -9031,7 +9047,7 @@ class BinaryBridge {
|
|
|
9031
9047
|
} else {
|
|
9032
9048
|
this.warnVia(timeoutMsg2);
|
|
9033
9049
|
}
|
|
9034
|
-
|
|
9050
|
+
entry2.reject(new BridgeTransportTimeoutError(command, effectiveTimeoutMs, `${this.errorPrefix} Request "${command}" (id=${id}) timed out after ${effectiveTimeoutMs}ms`));
|
|
9035
9051
|
return;
|
|
9036
9052
|
}
|
|
9037
9053
|
const childActiveSinceRequest = this.lastChildActivityAt > requestSentAt;
|
|
@@ -9046,13 +9062,20 @@ class BinaryBridge {
|
|
|
9046
9062
|
this.warnVia(timeoutMsg);
|
|
9047
9063
|
}
|
|
9048
9064
|
if (keepWarm) {
|
|
9049
|
-
|
|
9065
|
+
entry2.reject(new Error(`${this.errorPrefix} request "${command}" timed out after ${effectiveTimeoutMs}ms (bridge busy/under load); bridge kept warm — retry`));
|
|
9050
9066
|
return;
|
|
9051
9067
|
}
|
|
9052
|
-
|
|
9068
|
+
entry2.reject(new Error(`${this.errorPrefix} Request "${command}" (id=${id}) timed out after ${effectiveTimeoutMs}ms`));
|
|
9053
9069
|
this.handleTimeout(requestSessionId);
|
|
9054
9070
|
}, effectiveTimeoutMs);
|
|
9055
|
-
|
|
9071
|
+
const entry = {
|
|
9072
|
+
resolve: resolve3,
|
|
9073
|
+
reject,
|
|
9074
|
+
timer,
|
|
9075
|
+
onProgress: options?.onProgress,
|
|
9076
|
+
command
|
|
9077
|
+
};
|
|
9078
|
+
this.pending.set(id, entry);
|
|
9056
9079
|
if (!child?.stdin?.writable) {
|
|
9057
9080
|
this.pending.delete(id);
|
|
9058
9081
|
clearTimeout(timer);
|
|
@@ -9066,11 +9089,12 @@ class BinaryBridge {
|
|
|
9066
9089
|
const handleWriteFailure = (cause) => {
|
|
9067
9090
|
const writeError = cause instanceof Error ? cause : new Error(String(cause));
|
|
9068
9091
|
const error2 = new BridgeTransportUnknownOutcomeError(`${this.errorPrefix} Failed to write to stdin: ${writeError.message}`, { cause: writeError });
|
|
9069
|
-
const
|
|
9070
|
-
if (
|
|
9092
|
+
const entry2 = this.pending.get(id);
|
|
9093
|
+
if (entry2) {
|
|
9071
9094
|
this.pending.delete(id);
|
|
9072
|
-
clearTimeout(
|
|
9073
|
-
|
|
9095
|
+
clearTimeout(entry2.timer);
|
|
9096
|
+
entry2.onSettled?.();
|
|
9097
|
+
entry2.reject(error2);
|
|
9074
9098
|
}
|
|
9075
9099
|
if (this.process === child)
|
|
9076
9100
|
this.invalidateTransportProcess(error2);
|
|
@@ -9083,6 +9107,9 @@ class BinaryBridge {
|
|
|
9083
9107
|
} catch (err) {
|
|
9084
9108
|
handleWriteFailure(err);
|
|
9085
9109
|
}
|
|
9110
|
+
if (this.pending.has(id)) {
|
|
9111
|
+
entry.onSettled = this.listenForRequestAbort(id, options?.abortSignal);
|
|
9112
|
+
}
|
|
9086
9113
|
});
|
|
9087
9114
|
if (command === "configure" && response.success === true && options?.markConfiguredOnSuccess !== false) {
|
|
9088
9115
|
this.configured = true;
|
|
@@ -9451,6 +9478,7 @@ class BinaryBridge {
|
|
|
9451
9478
|
if (requestId && entry) {
|
|
9452
9479
|
this.pending.delete(requestId);
|
|
9453
9480
|
clearTimeout(entry.timer);
|
|
9481
|
+
entry.onSettled?.();
|
|
9454
9482
|
entry.resolve({
|
|
9455
9483
|
success: false,
|
|
9456
9484
|
code: "permission_required",
|
|
@@ -9492,6 +9520,7 @@ class BinaryBridge {
|
|
|
9492
9520
|
return;
|
|
9493
9521
|
this.pending.delete(id);
|
|
9494
9522
|
clearTimeout(entry.timer);
|
|
9523
|
+
entry.onSettled?.();
|
|
9495
9524
|
this.consecutiveRequestTimeouts = 0;
|
|
9496
9525
|
this.scheduleRestartCountReset();
|
|
9497
9526
|
this.accountForBashTaskResponse(entry.command, response);
|
|
@@ -9582,6 +9611,7 @@ class BinaryBridge {
|
|
|
9582
9611
|
rejectAllPending(error2) {
|
|
9583
9612
|
for (const [_id, entry] of this.pending) {
|
|
9584
9613
|
clearTimeout(entry.timer);
|
|
9614
|
+
entry.onSettled?.();
|
|
9585
9615
|
entry.reject(error2);
|
|
9586
9616
|
}
|
|
9587
9617
|
this.pending.clear();
|
|
@@ -14686,6 +14716,7 @@ async function ensureStorageMigrated(opts) {
|
|
|
14686
14716
|
throw new Error(`AFT storage migration failed (${detail}). ` + `Harness: ${opts.harness}. Legacy: ${legacyRoot}. Target: ${newRoot}. ` + `See log: ${logPath}. ` + `Plugin load aborted to prevent legacy/new state divergence.` + (stderrTail ? ` Stderr tail: ${stderrTail}` : "") + (stdoutTail ? ` Stdout tail: ${stdoutTail}` : ""));
|
|
14687
14717
|
}
|
|
14688
14718
|
// ../aft-bridge/dist/npm-resolver.js
|
|
14719
|
+
import { spawn as spawn3, spawnSync as spawnSync3 } from "node:child_process";
|
|
14689
14720
|
import { readdirSync as readdirSync2, statSync as statSync5 } from "node:fs";
|
|
14690
14721
|
import { homedir as homedir9 } from "node:os";
|
|
14691
14722
|
import { delimiter as delimiter2, dirname as dirname4, isAbsolute as isAbsolute3, join as join10 } from "node:path";
|
|
@@ -14792,6 +14823,189 @@ function resolveNpm(deps = defaultDeps()) {
|
|
|
14792
14823
|
}
|
|
14793
14824
|
return null;
|
|
14794
14825
|
}
|
|
14826
|
+
function quoteCmdArgument(value) {
|
|
14827
|
+
if (/[\0\r\n"%]/.test(value)) {
|
|
14828
|
+
throw new Error(`npm argument cannot be represented safely for cmd.exe: ${JSON.stringify(value)}`);
|
|
14829
|
+
}
|
|
14830
|
+
return `"${value}"`;
|
|
14831
|
+
}
|
|
14832
|
+
function npmInvocation(resolved, npmArgs, platform = process.platform, env = process.env) {
|
|
14833
|
+
if (platform !== "win32" || !/\.(?:cmd|bat)$/i.test(resolved.command)) {
|
|
14834
|
+
return { command: resolved.command, args: [...npmArgs] };
|
|
14835
|
+
}
|
|
14836
|
+
if (/[\0\r\n"]/.test(resolved.command)) {
|
|
14837
|
+
throw new Error(`npm command cannot be represented safely for cmd.exe: ${JSON.stringify(resolved.command)}`);
|
|
14838
|
+
}
|
|
14839
|
+
const commandEnvName = "AFT_NPM_COMMAND";
|
|
14840
|
+
const quotedArgs = npmArgs.map(quoteCmdArgument);
|
|
14841
|
+
const commandLine = `""%${commandEnvName}%"${quotedArgs.length > 0 ? ` ${quotedArgs.join(" ")}` : ""}"`;
|
|
14842
|
+
return {
|
|
14843
|
+
command: env.ComSpec ?? env.COMSPEC ?? "cmd.exe",
|
|
14844
|
+
args: ["/d", "/s", "/v:off", "/c", commandLine],
|
|
14845
|
+
env: { [commandEnvName]: resolved.command },
|
|
14846
|
+
windowsVerbatimArguments: true,
|
|
14847
|
+
windowsCmdShim: true
|
|
14848
|
+
};
|
|
14849
|
+
}
|
|
14850
|
+
|
|
14851
|
+
class NpmTerminationUnknownError extends Error {
|
|
14852
|
+
code = "npm_termination_unknown";
|
|
14853
|
+
constructor(detail) {
|
|
14854
|
+
super(`npm process-tree termination could not be confirmed: ${detail}`);
|
|
14855
|
+
this.name = "NpmTerminationUnknownError";
|
|
14856
|
+
}
|
|
14857
|
+
}
|
|
14858
|
+
function terminateDirectNpmChild(child, gracePeriodMs) {
|
|
14859
|
+
if (child.exitCode !== null || child.signalCode !== null)
|
|
14860
|
+
return Promise.resolve();
|
|
14861
|
+
return new Promise((resolve7, reject) => {
|
|
14862
|
+
let settled = false;
|
|
14863
|
+
let forceTimer = null;
|
|
14864
|
+
let confirmationTimer = null;
|
|
14865
|
+
let signalFailure = null;
|
|
14866
|
+
const cleanup = () => {
|
|
14867
|
+
if (forceTimer)
|
|
14868
|
+
clearTimeout(forceTimer);
|
|
14869
|
+
if (confirmationTimer)
|
|
14870
|
+
clearTimeout(confirmationTimer);
|
|
14871
|
+
child.removeListener("exit", finish);
|
|
14872
|
+
child.removeListener("error", onChildError);
|
|
14873
|
+
};
|
|
14874
|
+
const finish = () => {
|
|
14875
|
+
if (settled)
|
|
14876
|
+
return;
|
|
14877
|
+
settled = true;
|
|
14878
|
+
cleanup();
|
|
14879
|
+
resolve7();
|
|
14880
|
+
};
|
|
14881
|
+
const fail = () => {
|
|
14882
|
+
if (settled)
|
|
14883
|
+
return;
|
|
14884
|
+
if (child.exitCode !== null || child.signalCode !== null) {
|
|
14885
|
+
finish();
|
|
14886
|
+
return;
|
|
14887
|
+
}
|
|
14888
|
+
settled = true;
|
|
14889
|
+
cleanup();
|
|
14890
|
+
reject(new NpmTerminationUnknownError(signalFailure ?? `direct npm child did not exit after SIGKILL within ${gracePeriodMs}ms`));
|
|
14891
|
+
};
|
|
14892
|
+
const onChildError = (error2) => {
|
|
14893
|
+
signalFailure = `direct npm child error during termination: ${String(error2)}`;
|
|
14894
|
+
};
|
|
14895
|
+
const signal = (value) => {
|
|
14896
|
+
try {
|
|
14897
|
+
if (!child.kill(value)) {
|
|
14898
|
+
signalFailure = `direct npm child rejected ${value ?? "SIGTERM"}`;
|
|
14899
|
+
}
|
|
14900
|
+
} catch (error2) {
|
|
14901
|
+
signalFailure = `direct npm child ${value ?? "SIGTERM"} failed: ${String(error2)}`;
|
|
14902
|
+
}
|
|
14903
|
+
};
|
|
14904
|
+
child.once("exit", finish);
|
|
14905
|
+
child.on("error", onChildError);
|
|
14906
|
+
forceTimer = setTimeout(() => {
|
|
14907
|
+
signal("SIGKILL");
|
|
14908
|
+
confirmationTimer = setTimeout(fail, gracePeriodMs);
|
|
14909
|
+
}, gracePeriodMs);
|
|
14910
|
+
signal();
|
|
14911
|
+
if (child.exitCode !== null || child.signalCode !== null)
|
|
14912
|
+
finish();
|
|
14913
|
+
});
|
|
14914
|
+
}
|
|
14915
|
+
function terminateNpmProcessTree(child, invocation, env = process.env, gracePeriodMs = 5000) {
|
|
14916
|
+
if (!invocation.windowsCmdShim)
|
|
14917
|
+
return terminateDirectNpmChild(child, gracePeriodMs);
|
|
14918
|
+
const exitedSuccessfully = () => child.exitCode === 0 && child.signalCode === null;
|
|
14919
|
+
if (exitedSuccessfully())
|
|
14920
|
+
return Promise.resolve();
|
|
14921
|
+
if (child.pid === undefined) {
|
|
14922
|
+
return Promise.reject(new NpmTerminationUnknownError("cmd.exe child has no process ID"));
|
|
14923
|
+
}
|
|
14924
|
+
return new Promise((resolve7, reject) => {
|
|
14925
|
+
let settled = false;
|
|
14926
|
+
let childExited = child.exitCode !== null || child.signalCode !== null;
|
|
14927
|
+
let treeKillConfirmed = false;
|
|
14928
|
+
let treeKillFailure = null;
|
|
14929
|
+
let killer = null;
|
|
14930
|
+
const timeout = setTimeout(() => {
|
|
14931
|
+
try {
|
|
14932
|
+
killer?.kill();
|
|
14933
|
+
} catch {}
|
|
14934
|
+
if (treeKillConfirmed || exitedSuccessfully()) {
|
|
14935
|
+
settled = true;
|
|
14936
|
+
cleanup();
|
|
14937
|
+
resolve7();
|
|
14938
|
+
return;
|
|
14939
|
+
}
|
|
14940
|
+
fail(treeKillFailure ?? `taskkill.exe did not finish within ${gracePeriodMs}ms`);
|
|
14941
|
+
}, gracePeriodMs);
|
|
14942
|
+
const cleanup = () => {
|
|
14943
|
+
clearTimeout(timeout);
|
|
14944
|
+
child.removeListener("exit", onChildExit);
|
|
14945
|
+
};
|
|
14946
|
+
const succeedIfConfirmed = () => {
|
|
14947
|
+
if (settled || !childExited || !treeKillConfirmed)
|
|
14948
|
+
return;
|
|
14949
|
+
settled = true;
|
|
14950
|
+
cleanup();
|
|
14951
|
+
resolve7();
|
|
14952
|
+
};
|
|
14953
|
+
const fail = (detail) => {
|
|
14954
|
+
if (settled)
|
|
14955
|
+
return;
|
|
14956
|
+
settled = true;
|
|
14957
|
+
cleanup();
|
|
14958
|
+
reject(new NpmTerminationUnknownError(detail));
|
|
14959
|
+
};
|
|
14960
|
+
function onChildExit() {
|
|
14961
|
+
childExited = true;
|
|
14962
|
+
if (treeKillFailure !== null) {
|
|
14963
|
+
if (exitedSuccessfully()) {
|
|
14964
|
+
settled = true;
|
|
14965
|
+
cleanup();
|
|
14966
|
+
resolve7();
|
|
14967
|
+
} else {
|
|
14968
|
+
fail(treeKillFailure);
|
|
14969
|
+
}
|
|
14970
|
+
return;
|
|
14971
|
+
}
|
|
14972
|
+
succeedIfConfirmed();
|
|
14973
|
+
}
|
|
14974
|
+
const recordTreeKillFailure = (detail) => {
|
|
14975
|
+
if (settled)
|
|
14976
|
+
return;
|
|
14977
|
+
if (exitedSuccessfully()) {
|
|
14978
|
+
settled = true;
|
|
14979
|
+
cleanup();
|
|
14980
|
+
resolve7();
|
|
14981
|
+
return;
|
|
14982
|
+
}
|
|
14983
|
+
treeKillFailure = detail;
|
|
14984
|
+
if (childExited)
|
|
14985
|
+
fail(detail);
|
|
14986
|
+
};
|
|
14987
|
+
child.once("exit", onChildExit);
|
|
14988
|
+
const systemRoot = env.SystemRoot ?? env.SYSTEMROOT;
|
|
14989
|
+
const taskkill = systemRoot ? join10(systemRoot, "System32", "taskkill.exe") : "taskkill.exe";
|
|
14990
|
+
try {
|
|
14991
|
+
killer = spawn3(taskkill, ["/pid", String(child.pid), "/t", "/f"], {
|
|
14992
|
+
stdio: "ignore",
|
|
14993
|
+
windowsHide: true
|
|
14994
|
+
});
|
|
14995
|
+
killer.once("error", (error2) => recordTreeKillFailure(`taskkill.exe failed to start: ${String(error2)}`));
|
|
14996
|
+
killer.once("exit", (code) => {
|
|
14997
|
+
if (code !== 0) {
|
|
14998
|
+
recordTreeKillFailure(`taskkill.exe exited with code ${code ?? "unknown"}`);
|
|
14999
|
+
return;
|
|
15000
|
+
}
|
|
15001
|
+
treeKillConfirmed = true;
|
|
15002
|
+
succeedIfConfirmed();
|
|
15003
|
+
});
|
|
15004
|
+
} catch (error2) {
|
|
15005
|
+
recordTreeKillFailure(`taskkill.exe failed to start: ${String(error2)}`);
|
|
15006
|
+
}
|
|
15007
|
+
});
|
|
15008
|
+
}
|
|
14795
15009
|
function npmSpawnEnv(resolved, baseEnv = process.env) {
|
|
14796
15010
|
if (!resolved.binDir)
|
|
14797
15011
|
return { ...baseEnv };
|
|
@@ -15812,10 +16026,13 @@ function isEditSentinelItem(item) {
|
|
|
15812
16026
|
if (record.oldString === null && ["startLine", "endLine"].some((key) => hasOwn(record, key) && record[key] !== null)) {
|
|
15813
16027
|
return false;
|
|
15814
16028
|
}
|
|
15815
|
-
|
|
15816
|
-
|
|
15817
|
-
|
|
15818
|
-
return
|
|
16029
|
+
return (!hasOwn(record, "newString") || isNullOrEmptyString(record.newString)) && (!hasOwn(record, "content") || isNullOrEmptyString(record.content)) && (!hasOwn(record, "replaceAll") || record.replaceAll === null || record.replaceAll === false) && isDefaultOccurrence(record.occurrence);
|
|
16030
|
+
}
|
|
16031
|
+
function hasMeaningfulFindPayload(item) {
|
|
16032
|
+
return isNonEmptyString(item.oldString);
|
|
16033
|
+
}
|
|
16034
|
+
function isDefaultOccurrence(value) {
|
|
16035
|
+
return value === undefined || value === null || value === 1;
|
|
15819
16036
|
}
|
|
15820
16037
|
function normalizeEditArraySentinels(record) {
|
|
15821
16038
|
const value = record.edits;
|
|
@@ -15868,8 +16085,8 @@ function parseEditArray(value) {
|
|
|
15868
16085
|
}
|
|
15869
16086
|
return value;
|
|
15870
16087
|
}
|
|
15871
|
-
function
|
|
15872
|
-
const
|
|
16088
|
+
function normalizeEditItemSentinels(item) {
|
|
16089
|
+
const hadRangeFields = ["startLine", "endLine", "content"].some((key) => hasOwn(item, key));
|
|
15873
16090
|
for (const key of [
|
|
15874
16091
|
"oldString",
|
|
15875
16092
|
"newString",
|
|
@@ -15882,7 +16099,19 @@ function stripLineRangeSentinels(item) {
|
|
|
15882
16099
|
if (item[key] === null)
|
|
15883
16100
|
delete item[key];
|
|
15884
16101
|
}
|
|
15885
|
-
|
|
16102
|
+
const contentIsEmpty = item.content === "";
|
|
16103
|
+
if (hasMeaningfulFindPayload(item) && (!hasOwn(item, "content") || contentIsEmpty)) {
|
|
16104
|
+
for (const key of ["startLine", "endLine", "content"])
|
|
16105
|
+
delete item[key];
|
|
16106
|
+
if (hadRangeFields) {
|
|
16107
|
+
if (item.replaceAll === false)
|
|
16108
|
+
delete item.replaceAll;
|
|
16109
|
+
if (hasOwn(item, "occurrence") && isDefaultOccurrence(item.occurrence))
|
|
16110
|
+
delete item.occurrence;
|
|
16111
|
+
}
|
|
16112
|
+
return;
|
|
16113
|
+
}
|
|
16114
|
+
if (!isNonEmptyString(item.content))
|
|
15886
16115
|
return;
|
|
15887
16116
|
if (item.oldString === "")
|
|
15888
16117
|
delete item.oldString;
|
|
@@ -15890,7 +16119,7 @@ function stripLineRangeSentinels(item) {
|
|
|
15890
16119
|
delete item.newString;
|
|
15891
16120
|
if (item.replaceAll === false)
|
|
15892
16121
|
delete item.replaceAll;
|
|
15893
|
-
if (item
|
|
16122
|
+
if (hasOwn(item, "occurrence") && isDefaultOccurrence(item.occurrence))
|
|
15894
16123
|
delete item.occurrence;
|
|
15895
16124
|
}
|
|
15896
16125
|
function normalizeEditItem(value, index) {
|
|
@@ -15901,7 +16130,7 @@ function normalizeEditItem(value, index) {
|
|
|
15901
16130
|
const item = copyOwnProperties(source);
|
|
15902
16131
|
normalizeItemAlias(item, "oldString", "oldText");
|
|
15903
16132
|
normalizeItemAlias(item, "newString", "newText");
|
|
15904
|
-
|
|
16133
|
+
normalizeEditItemSentinels(item);
|
|
15905
16134
|
const hasFindField = ["oldString", "newString", "replaceAll", "occurrence"].some((key) => hasOwn(item, key));
|
|
15906
16135
|
const hasRangeField = ["startLine", "endLine", "content"].some((key) => hasOwn(item, key));
|
|
15907
16136
|
if (hasFindField && hasRangeField) {
|
|
@@ -16789,6 +17018,8 @@ var UNKNOWN_COMPLETION_CAP = 32;
|
|
|
16789
17018
|
var DEFAULT_SESSION_ID2 = "__default__";
|
|
16790
17019
|
var LOG_PREFIX = "[aft-pi] bg-notifications:";
|
|
16791
17020
|
var SUBC_NUDGE_LOG_INTERVAL_MS = 60000;
|
|
17021
|
+
var DEFAULT_BG_HOP_TIMEOUT_MS = 15000;
|
|
17022
|
+
var bgHopTimeoutMs = DEFAULT_BG_HOP_TIMEOUT_MS;
|
|
16792
17023
|
var subcNudgesInFlight = new Map;
|
|
16793
17024
|
var subcNudgeLogState = new Map;
|
|
16794
17025
|
function normalizeSessionID(sessionID) {
|
|
@@ -17012,11 +17243,21 @@ function handleSubcBgEventsNudge(drainContext) {
|
|
|
17012
17243
|
}
|
|
17013
17244
|
async function handleSubcBgEventsNudgeOnce(drainContext) {
|
|
17014
17245
|
bridgeForDrain(drainContext);
|
|
17015
|
-
stateFor(drainContext.sessionID)
|
|
17246
|
+
const state = stateFor(drainContext.sessionID);
|
|
17247
|
+
state.wakeDeferredTaskIds.clear();
|
|
17248
|
+
rearmHardStoppedWake(state, drainContext);
|
|
17016
17249
|
await triggerWakeIfPending(drainContext, false, true, true);
|
|
17017
17250
|
}
|
|
17018
17251
|
function logSubcNudgeLifecycle(drainContext, kind, message) {
|
|
17019
|
-
|
|
17252
|
+
logDeliveryHop(drainContext, kind, message, {
|
|
17253
|
+
event: "subc_bg_nudge_delivery",
|
|
17254
|
+
cause: kind
|
|
17255
|
+
});
|
|
17256
|
+
}
|
|
17257
|
+
function logDeliveryHop(drainContext, kind, message, data, level = "info") {
|
|
17258
|
+
const sessionID = normalizeSessionID(drainContext.sessionID);
|
|
17259
|
+
const taskKey = typeof data.task_id === "string" ? data.task_id : Array.isArray(data.task_ids) ? data.task_ids.join(",") : "";
|
|
17260
|
+
const key = `${kind}\x00${taskKey}\x00${drainContext.directory}\x00${sessionID}`;
|
|
17020
17261
|
const now = Date.now();
|
|
17021
17262
|
const state = subcNudgeLogState.get(key);
|
|
17022
17263
|
if (state && now - state.lastEmittedAt < SUBC_NUDGE_LOG_INTERVAL_MS) {
|
|
@@ -17025,13 +17266,48 @@ function logSubcNudgeLifecycle(drainContext, kind, message) {
|
|
|
17025
17266
|
}
|
|
17026
17267
|
const suppressed = state?.suppressed ?? 0;
|
|
17027
17268
|
subcNudgeLogState.set(key, { lastEmittedAt: now, suppressed: 0 });
|
|
17028
|
-
|
|
17029
|
-
|
|
17030
|
-
cause: kind,
|
|
17269
|
+
const payload = {
|
|
17270
|
+
...data,
|
|
17031
17271
|
canonical_root: drainContext.directory,
|
|
17032
17272
|
suppressed
|
|
17273
|
+
};
|
|
17274
|
+
if (level === "warn") {
|
|
17275
|
+
sessionWarn(sessionID, `${LOG_PREFIX} ${message}`, payload);
|
|
17276
|
+
} else {
|
|
17277
|
+
sessionLog(sessionID, `${LOG_PREFIX} ${message}`, payload);
|
|
17278
|
+
}
|
|
17279
|
+
}
|
|
17280
|
+
function logPerTaskDeliveryHop(drainContext, kind, message, taskIDs, data, level = "info") {
|
|
17281
|
+
for (const taskID of taskIDs) {
|
|
17282
|
+
logDeliveryHop(drainContext, kind, message, { ...data, task_id: taskID, task_ids: taskIDs }, level);
|
|
17283
|
+
}
|
|
17284
|
+
}
|
|
17285
|
+
function rearmHardStoppedWake(state, drainContext) {
|
|
17286
|
+
if (!state.wakeHardStopped)
|
|
17287
|
+
return;
|
|
17288
|
+
state.wakeHardStopped = false;
|
|
17289
|
+
state.wakeRetryAttempts = 0;
|
|
17290
|
+
state.retryDelayMs = null;
|
|
17291
|
+
logDeliveryHop(drainContext, "inject-rearmed", "delivery retry re-armed", {
|
|
17292
|
+
event: "bash_completion_inject_rearmed",
|
|
17293
|
+
task_ids: state.pendingCompletions.map((completion) => completion.task_id)
|
|
17033
17294
|
});
|
|
17034
17295
|
}
|
|
17296
|
+
async function withBgHopTimeout(operation, label) {
|
|
17297
|
+
let timer;
|
|
17298
|
+
try {
|
|
17299
|
+
return await Promise.race([
|
|
17300
|
+
operation,
|
|
17301
|
+
new Promise((_, reject) => {
|
|
17302
|
+
timer = setTimeout(() => reject(new Error(`${label} timed out after ${bgHopTimeoutMs}ms`)), bgHopTimeoutMs);
|
|
17303
|
+
timer.unref?.();
|
|
17304
|
+
})
|
|
17305
|
+
]);
|
|
17306
|
+
} finally {
|
|
17307
|
+
if (timer)
|
|
17308
|
+
clearTimeout(timer);
|
|
17309
|
+
}
|
|
17310
|
+
}
|
|
17035
17311
|
async function triggerWakeIfPending(drainContext, skipDrain, includeDeferredCompletions = true, forceDrain = false) {
|
|
17036
17312
|
const state = stateFor(drainContext.sessionID);
|
|
17037
17313
|
if (!skipDrain && (forceDrain || state.outstandingTaskIds.size > 0 || !state.forcedDrainCompleted)) {
|
|
@@ -17041,8 +17317,25 @@ async function triggerWakeIfPending(drainContext, skipDrain, includeDeferredComp
|
|
|
17041
17317
|
if (!hasWakeEligiblePending(state, includeDeferredCompletions))
|
|
17042
17318
|
return;
|
|
17043
17319
|
scheduleWake(state, async (reminder, deliveredCompletions) => {
|
|
17044
|
-
drainContext.runtime.sendUserMessage(reminder, { deliverAs: "steer" });
|
|
17045
17320
|
const ackTargetIds = deliveredCompletions.map((completion) => completion.task_id);
|
|
17321
|
+
logPerTaskDeliveryHop(drainContext, "inject-start", "session inject start", ackTargetIds, {
|
|
17322
|
+
event: "bash_completion_wake_send_user_message_start",
|
|
17323
|
+
attempt: state.wakeRetryAttempts + 1
|
|
17324
|
+
});
|
|
17325
|
+
try {
|
|
17326
|
+
drainContext.runtime.sendUserMessage(reminder, { deliverAs: "steer" });
|
|
17327
|
+
} catch (err) {
|
|
17328
|
+
logPerTaskDeliveryHop(drainContext, "inject-error", "session inject failed", ackTargetIds, {
|
|
17329
|
+
event: "bash_completion_wake_send_user_message_error",
|
|
17330
|
+
attempt: state.wakeRetryAttempts + 1,
|
|
17331
|
+
cause: err instanceof Error ? err.message : String(err)
|
|
17332
|
+
}, "warn");
|
|
17333
|
+
throw err;
|
|
17334
|
+
}
|
|
17335
|
+
logPerTaskDeliveryHop(drainContext, "inject-ok", "session inject ok", ackTargetIds, {
|
|
17336
|
+
event: "bash_completion_wake_send_user_message_ok",
|
|
17337
|
+
attempt: state.wakeRetryAttempts + 1
|
|
17338
|
+
});
|
|
17046
17339
|
markDeliveredAwaitingAck(state, ackTargetIds);
|
|
17047
17340
|
const acked = await ackCompletions(drainContext, deliveredCompletions);
|
|
17048
17341
|
if (acked)
|
|
@@ -17058,7 +17351,12 @@ async function triggerWakeIfPending(drainContext, skipDrain, includeDeferredComp
|
|
|
17058
17351
|
});
|
|
17059
17352
|
return;
|
|
17060
17353
|
}
|
|
17061
|
-
|
|
17354
|
+
if (hardStopped) {
|
|
17355
|
+
logDeliveryHop(drainContext, "inject-hard-stopped", "delivery retries paused", {
|
|
17356
|
+
event: "bash_completion_inject_hard_stopped",
|
|
17357
|
+
cause: err instanceof Error ? err.message : String(err)
|
|
17358
|
+
});
|
|
17359
|
+
}
|
|
17062
17360
|
}, includeDeferredCompletions);
|
|
17063
17361
|
}
|
|
17064
17362
|
function formatSystemReminder(completions) {
|
|
@@ -17128,12 +17426,21 @@ async function drainCompletions(drainContext) {
|
|
|
17128
17426
|
const bridge = bridgeForDrain(drainContext);
|
|
17129
17427
|
const state = stateFor(drainContext.sessionID);
|
|
17130
17428
|
const params = drainContext.sessionID ? { session_id: drainContext.sessionID } : {};
|
|
17131
|
-
const response = await bridge.send("bash_drain_completions", params);
|
|
17429
|
+
const response = await withBgHopTimeout(bridge.send("bash_drain_completions", params, { timeoutMs: bgHopTimeoutMs }), "bash_drain_completions");
|
|
17132
17430
|
if (response.success === false) {
|
|
17133
|
-
|
|
17431
|
+
logDeliveryHop(drainContext, "drain-error", "drain failed", {
|
|
17432
|
+
event: "bash_completion_drain_error",
|
|
17433
|
+
cause: String(response.message ?? "unknown error")
|
|
17434
|
+
}, "warn");
|
|
17134
17435
|
return;
|
|
17135
17436
|
}
|
|
17136
17437
|
state.forcedDrainCompleted = true;
|
|
17438
|
+
const drainedTaskIds = Array.isArray(response.bg_completions) ? response.bg_completions.filter(isBgCompletion).map((completion) => completion.task_id) : [];
|
|
17439
|
+
logDeliveryHop(drainContext, "drain-ok", "drain ok", {
|
|
17440
|
+
event: "bash_completion_drain_ok",
|
|
17441
|
+
count: drainedTaskIds.length,
|
|
17442
|
+
task_ids: drainedTaskIds
|
|
17443
|
+
});
|
|
17137
17444
|
const reackTaskIds = reconcileAwaitingAck(state, response.bg_completions);
|
|
17138
17445
|
ingestDrainedBgCompletions(drainContext.sessionID, response.bg_completions);
|
|
17139
17446
|
if (reackTaskIds.length > 0) {
|
|
@@ -17149,7 +17456,10 @@ async function drainCompletions(drainContext) {
|
|
|
17149
17456
|
} catch (err) {
|
|
17150
17457
|
if (drainContext.nudgeRef && isTerminalNudgeError(err))
|
|
17151
17458
|
throw err;
|
|
17152
|
-
|
|
17459
|
+
logDeliveryHop(drainContext, "drain-error", "drain failed", {
|
|
17460
|
+
event: "bash_completion_drain_error",
|
|
17461
|
+
cause: err instanceof Error ? err.message : String(err)
|
|
17462
|
+
}, "warn");
|
|
17153
17463
|
}
|
|
17154
17464
|
}
|
|
17155
17465
|
async function ackCompletions(drainContext, completions) {
|
|
@@ -17159,16 +17469,25 @@ async function ackCompletions(drainContext, completions) {
|
|
|
17159
17469
|
try {
|
|
17160
17470
|
const bridge = bridgeForDrain(drainContext);
|
|
17161
17471
|
const params = drainContext.sessionID ? { session_id: drainContext.sessionID, task_ids: taskIds } : { task_ids: taskIds };
|
|
17162
|
-
const response = await bridge.send("bash_ack_completions", params);
|
|
17472
|
+
const response = await withBgHopTimeout(bridge.send("bash_ack_completions", params, { timeoutMs: bgHopTimeoutMs }), "bash_ack_completions");
|
|
17163
17473
|
if (response.success === false) {
|
|
17164
|
-
|
|
17474
|
+
logPerTaskDeliveryHop(drainContext, "ack-error", "ack failed", taskIds, {
|
|
17475
|
+
event: "bash_completion_ack_error",
|
|
17476
|
+
cause: String(response.message ?? "unknown error")
|
|
17477
|
+
}, "warn");
|
|
17165
17478
|
return false;
|
|
17166
17479
|
}
|
|
17480
|
+
logPerTaskDeliveryHop(drainContext, "ack-ok", "ack ok", taskIds, {
|
|
17481
|
+
event: "bash_completion_ack_ok"
|
|
17482
|
+
});
|
|
17167
17483
|
return true;
|
|
17168
17484
|
} catch (err) {
|
|
17169
17485
|
if (drainContext.nudgeRef && isTerminalNudgeError(err))
|
|
17170
17486
|
throw err;
|
|
17171
|
-
|
|
17487
|
+
logPerTaskDeliveryHop(drainContext, "ack-error", "ack failed", taskIds, {
|
|
17488
|
+
event: "bash_completion_ack_error",
|
|
17489
|
+
cause: err instanceof Error ? err.message : String(err)
|
|
17490
|
+
}, "warn");
|
|
17172
17491
|
return false;
|
|
17173
17492
|
}
|
|
17174
17493
|
}
|
|
@@ -17499,7 +17818,7 @@ import {
|
|
|
17499
17818
|
// package.json
|
|
17500
17819
|
var package_default = {
|
|
17501
17820
|
name: "@cortexkit/aft-pi",
|
|
17502
|
-
version: "0.
|
|
17821
|
+
version: "0.55.0",
|
|
17503
17822
|
type: "module",
|
|
17504
17823
|
description: "Pi coding agent extension for Agent File Tools (AFT) — tree-sitter and LSP-powered code analysis",
|
|
17505
17824
|
main: "dist/index.js",
|
|
@@ -17522,19 +17841,19 @@ var package_default = {
|
|
|
17522
17841
|
"test:unit": "bun test src/__tests__ --path-ignore-patterns 'src/__tests__/e2e/**'"
|
|
17523
17842
|
},
|
|
17524
17843
|
dependencies: {
|
|
17525
|
-
"@cortexkit/aft-bridge": "0.
|
|
17844
|
+
"@cortexkit/aft-bridge": "0.55.0",
|
|
17526
17845
|
"comment-json": "^5.0.0",
|
|
17527
17846
|
diff: "^8.0.4",
|
|
17528
17847
|
typebox: "1.1.38",
|
|
17529
17848
|
zod: "^4.4.3"
|
|
17530
17849
|
},
|
|
17531
17850
|
optionalDependencies: {
|
|
17532
|
-
"@cortexkit/aft-darwin-arm64": "0.
|
|
17533
|
-
"@cortexkit/aft-darwin-x64": "0.
|
|
17534
|
-
"@cortexkit/aft-linux-arm64": "0.
|
|
17535
|
-
"@cortexkit/aft-linux-x64": "0.
|
|
17536
|
-
"@cortexkit/aft-win32-arm64": "0.
|
|
17537
|
-
"@cortexkit/aft-win32-x64": "0.
|
|
17851
|
+
"@cortexkit/aft-darwin-arm64": "0.55.0",
|
|
17852
|
+
"@cortexkit/aft-darwin-x64": "0.55.0",
|
|
17853
|
+
"@cortexkit/aft-linux-arm64": "0.55.0",
|
|
17854
|
+
"@cortexkit/aft-linux-x64": "0.55.0",
|
|
17855
|
+
"@cortexkit/aft-win32-arm64": "0.55.0",
|
|
17856
|
+
"@cortexkit/aft-win32-x64": "0.55.0"
|
|
17538
17857
|
},
|
|
17539
17858
|
devDependencies: {
|
|
17540
17859
|
"@earendil-works/pi-coding-agent": "^0.80.2",
|
|
@@ -32683,6 +33002,9 @@ var GhShimConfigSchema = exports_external.object({
|
|
|
32683
33002
|
enabled: exports_external.boolean().optional(),
|
|
32684
33003
|
binary_path: exports_external.string().trim().refine(isAbsolute6, "gh_shim.binary_path must be absolute").optional()
|
|
32685
33004
|
});
|
|
33005
|
+
var GhReadConfigSchema = exports_external.object({
|
|
33006
|
+
enabled: exports_external.boolean().optional()
|
|
33007
|
+
});
|
|
32686
33008
|
var GitCoAuthorSchema = exports_external.string().trim().refine((value) => value === "off" || value === "auto" || /^[^<>\r\n]+\s+<[^<>\s@]+@[^<>\s@]+>$/.test(value), "git.co_author must be 'off', 'auto', or an explicit 'Name <email>' identity");
|
|
32687
33009
|
var GitConfigSchema = exports_external.object({
|
|
32688
33010
|
co_author: GitCoAuthorSchema.optional()
|
|
@@ -32737,6 +33059,7 @@ var AftConfigFieldsSchema = exports_external.object({
|
|
|
32737
33059
|
bridge: BridgeConfigSchema.optional(),
|
|
32738
33060
|
subc: SubcConfigSchema.optional(),
|
|
32739
33061
|
gh_shim: GhShimConfigSchema.optional(),
|
|
33062
|
+
gh_read: GhReadConfigSchema.optional(),
|
|
32740
33063
|
git: GitConfigSchema.optional()
|
|
32741
33064
|
});
|
|
32742
33065
|
var HarnessOverrideSchema = exports_external.preprocess((value) => {
|
|
@@ -33139,6 +33462,8 @@ function getStrippedTopLevelKeys(override) {
|
|
|
33139
33462
|
stripped.push("subc");
|
|
33140
33463
|
if (override.gh_shim !== undefined)
|
|
33141
33464
|
stripped.push("gh_shim");
|
|
33465
|
+
if (override.gh_read !== undefined)
|
|
33466
|
+
stripped.push("gh_read");
|
|
33142
33467
|
if (override.disabled_tools?.includes("aft_safety"))
|
|
33143
33468
|
stripped.push("disabled_tools.aft_safety");
|
|
33144
33469
|
return stripped;
|
|
@@ -33252,7 +33577,7 @@ function loadAftConfig(projectDirectory) {
|
|
|
33252
33577
|
}
|
|
33253
33578
|
|
|
33254
33579
|
// src/lsp-auto-install.ts
|
|
33255
|
-
import { spawn as
|
|
33580
|
+
import { spawn as spawn4 } from "node:child_process";
|
|
33256
33581
|
import { createHash as createHash4 } from "node:crypto";
|
|
33257
33582
|
import {
|
|
33258
33583
|
createReadStream,
|
|
@@ -33267,6 +33592,7 @@ import {
|
|
|
33267
33592
|
import { join as join15 } from "node:path";
|
|
33268
33593
|
|
|
33269
33594
|
// src/lsp-cache.ts
|
|
33595
|
+
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
33270
33596
|
import {
|
|
33271
33597
|
closeSync as closeSync5,
|
|
33272
33598
|
mkdirSync as mkdirSync6,
|
|
@@ -33348,27 +33674,46 @@ var STALE_LOCK_MS2 = 30 * 60 * 1000;
|
|
|
33348
33674
|
function acquireInstallLock(lockKey) {
|
|
33349
33675
|
mkdirSync6(lspPackageDir(lockKey), { recursive: true });
|
|
33350
33676
|
const lock = lockPath(lockKey);
|
|
33677
|
+
const token = randomUUID2();
|
|
33351
33678
|
const tryClaim = () => {
|
|
33352
33679
|
try {
|
|
33353
33680
|
const fd = openSync5(lock, "wx");
|
|
33354
33681
|
try {
|
|
33355
33682
|
writeFileSync5(fd, `${process.pid}
|
|
33356
33683
|
${new Date().toISOString()}
|
|
33684
|
+
${token}
|
|
33357
33685
|
`);
|
|
33358
33686
|
} finally {
|
|
33359
33687
|
closeSync5(fd);
|
|
33360
33688
|
}
|
|
33361
|
-
|
|
33689
|
+
let retained = false;
|
|
33690
|
+
let released = false;
|
|
33691
|
+
return {
|
|
33692
|
+
retain() {
|
|
33693
|
+
retained = true;
|
|
33694
|
+
},
|
|
33695
|
+
release() {
|
|
33696
|
+
if (released)
|
|
33697
|
+
return;
|
|
33698
|
+
released = true;
|
|
33699
|
+
if (retained) {
|
|
33700
|
+
warn2(`[lsp] retaining install lock for ${lockKey} after unconfirmed npm termination; ` + `cross-process retries remain blocked until stale-lock recovery`);
|
|
33701
|
+
return;
|
|
33702
|
+
}
|
|
33703
|
+
releaseInstallLock(lockKey, token);
|
|
33704
|
+
}
|
|
33705
|
+
};
|
|
33362
33706
|
} catch (err) {
|
|
33363
33707
|
const code = err.code;
|
|
33364
33708
|
if (code === "EEXIST")
|
|
33365
|
-
return
|
|
33709
|
+
return null;
|
|
33366
33710
|
warn2(`[lsp] unexpected error acquiring install lock for ${lockKey}: ${err}`);
|
|
33367
|
-
return
|
|
33711
|
+
return null;
|
|
33368
33712
|
}
|
|
33369
33713
|
};
|
|
33370
|
-
|
|
33371
|
-
|
|
33714
|
+
const claimed = tryClaim();
|
|
33715
|
+
if (claimed)
|
|
33716
|
+
return claimed;
|
|
33372
33717
|
let owningPid = null;
|
|
33373
33718
|
let lockMtimeMs = 0;
|
|
33374
33719
|
try {
|
|
@@ -33386,7 +33731,7 @@ ${new Date().toISOString()}
|
|
|
33386
33731
|
const skipLiveness = process.platform === "win32";
|
|
33387
33732
|
const ownerAlive = !skipLiveness && owningPid !== null && isProcessAlive3(owningPid);
|
|
33388
33733
|
if (skipLiveness ? ageWithinFresh : ownerAlive && ageWithinFresh) {
|
|
33389
|
-
return
|
|
33734
|
+
return null;
|
|
33390
33735
|
}
|
|
33391
33736
|
log2(`[lsp] reclaiming install lock for ${lockKey} (owner_pid=${owningPid ?? "unknown"}, alive=${ownerAlive}, age_ms=${age})`);
|
|
33392
33737
|
try {
|
|
@@ -33405,16 +33750,18 @@ function isProcessAlive3(pid) {
|
|
|
33405
33750
|
return true;
|
|
33406
33751
|
}
|
|
33407
33752
|
}
|
|
33408
|
-
function releaseInstallLock(lockKey) {
|
|
33753
|
+
function releaseInstallLock(lockKey, acquisitionToken) {
|
|
33409
33754
|
const lock = lockPath(lockKey);
|
|
33410
33755
|
try {
|
|
33411
33756
|
let owningPid = null;
|
|
33757
|
+
let owningToken = "";
|
|
33412
33758
|
try {
|
|
33413
33759
|
const raw = readFileSync8(lock, "utf8");
|
|
33414
|
-
const
|
|
33415
|
-
const parsed = Number.parseInt(
|
|
33760
|
+
const lines = raw.split(/\r?\n/);
|
|
33761
|
+
const parsed = Number.parseInt(lines[0]?.trim() ?? "", 10);
|
|
33416
33762
|
if (Number.isFinite(parsed) && parsed > 0)
|
|
33417
33763
|
owningPid = parsed;
|
|
33764
|
+
owningToken = lines[2]?.trim() ?? "";
|
|
33418
33765
|
} catch (readErr) {
|
|
33419
33766
|
const code = readErr.code;
|
|
33420
33767
|
if (code === "ENOENT")
|
|
@@ -33422,8 +33769,8 @@ function releaseInstallLock(lockKey) {
|
|
|
33422
33769
|
warn2(`[lsp] could not read install lock for ${lockKey} during release: ${readErr}`);
|
|
33423
33770
|
return;
|
|
33424
33771
|
}
|
|
33425
|
-
if (owningPid !== process.pid) {
|
|
33426
|
-
log2(`[lsp] not releasing install lock for ${lockKey}:
|
|
33772
|
+
if (owningPid !== process.pid || owningToken !== acquisitionToken) {
|
|
33773
|
+
log2(`[lsp] not releasing install lock for ${lockKey}: acquisition ownership changed`);
|
|
33427
33774
|
return;
|
|
33428
33775
|
}
|
|
33429
33776
|
try {
|
|
@@ -33439,12 +33786,13 @@ function releaseInstallLock(lockKey) {
|
|
|
33439
33786
|
}
|
|
33440
33787
|
}
|
|
33441
33788
|
async function withInstallLock(lockKey, task) {
|
|
33442
|
-
|
|
33789
|
+
const lease = acquireInstallLock(lockKey);
|
|
33790
|
+
if (!lease)
|
|
33443
33791
|
return null;
|
|
33444
33792
|
try {
|
|
33445
|
-
return await task();
|
|
33793
|
+
return await task(lease);
|
|
33446
33794
|
} finally {
|
|
33447
|
-
|
|
33795
|
+
lease.release();
|
|
33448
33796
|
}
|
|
33449
33797
|
}
|
|
33450
33798
|
var VERSION_CHECK_FILE = ".aft-version-check";
|
|
@@ -33789,6 +34137,7 @@ function buildExtensionMap(specs) {
|
|
|
33789
34137
|
return byExt;
|
|
33790
34138
|
}
|
|
33791
34139
|
var inFlightAutoInstalls = new Set;
|
|
34140
|
+
var quarantinedNpmInstalls = new Set;
|
|
33792
34141
|
function trackInFlightAutoInstall(controller, promise2) {
|
|
33793
34142
|
const entry = { controller, promise: promise2 };
|
|
33794
34143
|
inFlightAutoInstalls.add(entry);
|
|
@@ -33836,7 +34185,7 @@ function ensureInstallAnchor(cwd) {
|
|
|
33836
34185
|
warn2(`[lsp] could not write package.json stub in ${cwd}: ${err}`);
|
|
33837
34186
|
}
|
|
33838
34187
|
}
|
|
33839
|
-
function runInstall(spec, version2, cwd, signal) {
|
|
34188
|
+
function runInstall(spec, version2, cwd, installLock, signal) {
|
|
33840
34189
|
return new Promise((resolve8) => {
|
|
33841
34190
|
const target = `${spec.npm}@${version2}`;
|
|
33842
34191
|
log2(`[lsp] installing ${target} to ${cwd}`);
|
|
@@ -33852,19 +34201,25 @@ function runInstall(spec, version2, cwd, signal) {
|
|
|
33852
34201
|
return;
|
|
33853
34202
|
}
|
|
33854
34203
|
ensureInstallAnchor(cwd);
|
|
33855
|
-
const
|
|
34204
|
+
const invocation = npmInvocation(npm, [
|
|
34205
|
+
"install",
|
|
34206
|
+
"--no-save",
|
|
34207
|
+
"--ignore-scripts",
|
|
34208
|
+
"--silent",
|
|
34209
|
+
target
|
|
34210
|
+
]);
|
|
34211
|
+
const child = spawn4(invocation.command, invocation.args, {
|
|
33856
34212
|
stdio: ["ignore", "pipe", "pipe"],
|
|
33857
34213
|
cwd,
|
|
33858
|
-
env: npmSpawnEnv(npm)
|
|
34214
|
+
env: { ...npmSpawnEnv(npm), ...invocation.env },
|
|
34215
|
+
windowsVerbatimArguments: invocation.windowsVerbatimArguments
|
|
33859
34216
|
});
|
|
33860
34217
|
child.unref();
|
|
33861
34218
|
let stderrBuf = "";
|
|
33862
34219
|
let settled = false;
|
|
33863
|
-
let
|
|
34220
|
+
let terminationPromise = null;
|
|
33864
34221
|
const cleanup = () => {
|
|
33865
34222
|
signal?.removeEventListener("abort", onAbort);
|
|
33866
|
-
if (killTimer)
|
|
33867
|
-
clearTimeout(killTimer);
|
|
33868
34223
|
};
|
|
33869
34224
|
const finish = (ok) => {
|
|
33870
34225
|
if (settled)
|
|
@@ -33873,14 +34228,31 @@ function runInstall(spec, version2, cwd, signal) {
|
|
|
33873
34228
|
cleanup();
|
|
33874
34229
|
resolve8(ok);
|
|
33875
34230
|
};
|
|
34231
|
+
const childCompletedSuccessfully = () => child.exitCode === 0 && child.signalCode === null;
|
|
34232
|
+
const finishAfterConfirmedTermination = () => {
|
|
34233
|
+
const completedSuccessfully = childCompletedSuccessfully();
|
|
34234
|
+
if (completedSuccessfully)
|
|
34235
|
+
log2(`[lsp] installed ${target}`);
|
|
34236
|
+
finish(completedSuccessfully);
|
|
34237
|
+
};
|
|
33876
34238
|
const onAbort = () => {
|
|
34239
|
+
if (childCompletedSuccessfully()) {
|
|
34240
|
+
finishAfterConfirmedTermination();
|
|
34241
|
+
return;
|
|
34242
|
+
}
|
|
33877
34243
|
warn2(`[lsp] install ${target} aborted during shutdown`);
|
|
33878
|
-
child
|
|
33879
|
-
|
|
33880
|
-
if (
|
|
33881
|
-
|
|
33882
|
-
|
|
33883
|
-
|
|
34244
|
+
terminationPromise ??= terminateNpmProcessTree(child, invocation);
|
|
34245
|
+
terminationPromise.then(finishAfterConfirmedTermination, (terminationError) => {
|
|
34246
|
+
if (child.pid === undefined) {
|
|
34247
|
+
error2(`[lsp] install ${target} failed to spawn during shutdown: ${terminationError}`);
|
|
34248
|
+
finish(false);
|
|
34249
|
+
return;
|
|
34250
|
+
}
|
|
34251
|
+
quarantinedNpmInstalls.add(spec.npm);
|
|
34252
|
+
installLock.retain();
|
|
34253
|
+
error2(`[lsp] install ${target} termination outcome unknown; quarantining retries for this session: ${String(terminationError)}`);
|
|
34254
|
+
finish(false);
|
|
34255
|
+
});
|
|
33884
34256
|
};
|
|
33885
34257
|
signal?.addEventListener("abort", onAbort, { once: true });
|
|
33886
34258
|
if (signal?.aborted)
|
|
@@ -33894,10 +34266,16 @@ function runInstall(spec, version2, cwd, signal) {
|
|
|
33894
34266
|
}
|
|
33895
34267
|
});
|
|
33896
34268
|
child.on("error", (err) => {
|
|
33897
|
-
|
|
34269
|
+
if (settled)
|
|
34270
|
+
return;
|
|
34271
|
+
error2(`[lsp] install ${target} child-process error: ${err}`);
|
|
34272
|
+
if (terminationPromise && child.pid !== undefined)
|
|
34273
|
+
return;
|
|
33898
34274
|
finish(false);
|
|
33899
34275
|
});
|
|
33900
34276
|
child.on("exit", (code) => {
|
|
34277
|
+
if (settled || terminationPromise)
|
|
34278
|
+
return;
|
|
33901
34279
|
if (code === 0) {
|
|
33902
34280
|
log2(`[lsp] installed ${target}`);
|
|
33903
34281
|
finish(true);
|
|
@@ -33910,7 +34288,13 @@ ${stderrBuf.trim()}`);
|
|
|
33910
34288
|
});
|
|
33911
34289
|
}
|
|
33912
34290
|
async function ensureServerInstalled(spec, config2, fetchImpl, signal) {
|
|
33913
|
-
|
|
34291
|
+
if (quarantinedNpmInstalls.has(spec.npm)) {
|
|
34292
|
+
return {
|
|
34293
|
+
started: false,
|
|
34294
|
+
reason: "install blocked after unconfirmed npm termination; restart the host to retry"
|
|
34295
|
+
};
|
|
34296
|
+
}
|
|
34297
|
+
const outcome = await withInstallLock(spec.npm, async (installLock) => {
|
|
33914
34298
|
const { version: version2, probe } = await resolveTargetVersion(spec, config2, fetchImpl);
|
|
33915
34299
|
if (!version2) {
|
|
33916
34300
|
const installed = isInstalled(spec.npm, spec.binary);
|
|
@@ -33946,7 +34330,7 @@ async function ensureServerInstalled(spec, config2, fetchImpl, signal) {
|
|
|
33946
34330
|
log2(`[lsp] reinstalling ${spec.npm}@${version2}: no installed-version metadata recorded`);
|
|
33947
34331
|
}
|
|
33948
34332
|
}
|
|
33949
|
-
const ok = await runInstall(spec, version2, cachedPackageDir(spec.npm), signal).catch((err) => {
|
|
34333
|
+
const ok = await runInstall(spec, version2, cachedPackageDir(spec.npm), installLock, signal).catch((err) => {
|
|
33950
34334
|
error2(`[lsp] background install ${spec.npm} crashed: ${err}`);
|
|
33951
34335
|
return false;
|
|
33952
34336
|
});
|
|
@@ -35054,14 +35438,23 @@ function sendFeatureAnnouncement(version2, features, footer, storageDir) {
|
|
|
35054
35438
|
var BASH_TRANSPORT_TIMEOUT_MS = 30000;
|
|
35055
35439
|
var BASH_WAIT_DETACH_MAGIC_KEYWORD = "&detach";
|
|
35056
35440
|
var EMPTY_DETACH_MESSAGE = "(requested background detach)";
|
|
35441
|
+
var STANDALONE_DETACH_KEYWORD_SOURCE = `(^|[^\\p{L}\\p{N}_])${BASH_WAIT_DETACH_MAGIC_KEYWORD}(?![\\p{L}\\p{N}_])`;
|
|
35442
|
+
var STANDALONE_DETACH_KEYWORD_PATTERN = new RegExp(STANDALONE_DETACH_KEYWORD_SOURCE, "u");
|
|
35443
|
+
var STANDALONE_DETACH_KEYWORDS_PATTERN = new RegExp(STANDALONE_DETACH_KEYWORD_SOURCE, "gu");
|
|
35444
|
+
function containsStandaloneDetachKeyword(messageText) {
|
|
35445
|
+
return STANDALONE_DETACH_KEYWORD_PATTERN.test(messageText);
|
|
35446
|
+
}
|
|
35447
|
+
function stripStandaloneDetachKeywords(messageText) {
|
|
35448
|
+
return messageText.replace(STANDALONE_DETACH_KEYWORDS_PATTERN, "$1");
|
|
35449
|
+
}
|
|
35057
35450
|
function stripUserMessageDetachKeyword(messageText) {
|
|
35058
|
-
if (!messageText
|
|
35451
|
+
if (!containsStandaloneDetachKeyword(messageText))
|
|
35059
35452
|
return messageText;
|
|
35060
|
-
const stripped = messageText
|
|
35453
|
+
const stripped = stripStandaloneDetachKeywords(messageText).replace(/[ \t]{2,}/g, " ");
|
|
35061
35454
|
return stripped.trim() === "" ? EMPTY_DETACH_MESSAGE : stripped;
|
|
35062
35455
|
}
|
|
35063
35456
|
function shouldDetachBashWaitOnUserMessage(config2, messageText) {
|
|
35064
|
-
return resolveBashConfig(config2).detach_on_user_message || messageText
|
|
35457
|
+
return resolveBashConfig(config2).detach_on_user_message || containsStandaloneDetachKeyword(messageText);
|
|
35065
35458
|
}
|
|
35066
35459
|
async function sendBashWaitDetach(bridge, sessionID) {
|
|
35067
35460
|
const response = await bridge.send("bash_wait_detach", { session_id: sessionID }, { keepBridgeOnTimeout: true, transportTimeoutMs: BASH_TRANSPORT_TIMEOUT_MS });
|
|
@@ -35524,8 +35917,16 @@ function formatReadAttachmentText(attachment) {
|
|
|
35524
35917
|
}
|
|
35525
35918
|
return `Read attachment [${mime}]${size ? ` ${size}` : ""}`;
|
|
35526
35919
|
}
|
|
35920
|
+
var ISSUE_AND_PR_READ_DESCRIPTION = "GitHub issues and pull requests can be read with `issue://NUMBER` and `pr://NUMBER` (or `issue://OWNER/REPO/NUMBER` and `pr://OWNER/REPO/NUMBER`).";
|
|
35921
|
+
var READ_DESCRIPTION = "Read file contents with line numbers. Backed by AFT's indexed Rust reader — faster than the built-in `read` on large repos. Images are returned as attachments on vision-capable models; PDFs and non-vision models are not yet supported.";
|
|
35922
|
+
function readDescription(ghReadEnabled) {
|
|
35923
|
+
return ghReadEnabled ? `${READ_DESCRIPTION} ${ISSUE_AND_PR_READ_DESCRIPTION}` : READ_DESCRIPTION;
|
|
35924
|
+
}
|
|
35925
|
+
function visionCapabilityForPiModel(extCtx) {
|
|
35926
|
+
return Array.isArray(extCtx.model?.input) ? extCtx.model.input.includes("image") : undefined;
|
|
35927
|
+
}
|
|
35527
35928
|
function modelSupportsImages(extCtx) {
|
|
35528
|
-
return
|
|
35929
|
+
return visionCapabilityForPiModel(extCtx) === true;
|
|
35529
35930
|
}
|
|
35530
35931
|
var NON_VISION_IMAGE_NOTE = "[Current model does not support images. The image will be omitted from this request.]";
|
|
35531
35932
|
function containsPath(parent, child) {
|
|
@@ -35743,7 +36144,7 @@ function registerHoistedTools(pi, ctx, surface) {
|
|
|
35743
36144
|
pi.registerTool(withPathAliasPreparation({
|
|
35744
36145
|
name: readName,
|
|
35745
36146
|
label: readName,
|
|
35746
|
-
description:
|
|
36147
|
+
description: readDescription(ctx.config.gh_read?.enabled === true),
|
|
35747
36148
|
promptSnippet: "Read file contents (supports offset/limit for large files)",
|
|
35748
36149
|
promptGuidelines: [`Use ${readName} to examine files instead of cat or sed.`],
|
|
35749
36150
|
parameters: ReadParams,
|
|
@@ -35771,6 +36172,9 @@ function registerHoistedTools(pi, ctx, surface) {
|
|
|
35771
36172
|
rawArgs.offset = offset;
|
|
35772
36173
|
if (limit !== undefined)
|
|
35773
36174
|
rawArgs.limit = limit;
|
|
36175
|
+
const visionCapability = visionCapabilityForPiModel(extCtx);
|
|
36176
|
+
if (visionCapability !== undefined)
|
|
36177
|
+
rawArgs.vision_capability = visionCapability;
|
|
35774
36178
|
const response = await callToolCall(bridge, "read", rawArgs, extCtx);
|
|
35775
36179
|
if (response.success === false) {
|
|
35776
36180
|
throw new Error(response.text || response.message || "read failed");
|
|
@@ -38866,7 +39270,7 @@ function registerSemanticTool(pi, ctx) {
|
|
|
38866
39270
|
].join(`
|
|
38867
39271
|
`),
|
|
38868
39272
|
parameters: SearchParams2,
|
|
38869
|
-
async execute(_toolCallId, params,
|
|
39273
|
+
async execute(_toolCallId, params, signal, _onUpdate, extCtx) {
|
|
38870
39274
|
if (isEmptyParam(params.query) || typeof params.query !== "string" || params.query.trim().length === 0) {
|
|
38871
39275
|
throw new Error("semantic_search: invalid params: `query` must be a non-empty string");
|
|
38872
39276
|
}
|
|
@@ -38878,7 +39282,7 @@ function registerSemanticTool(pi, ctx) {
|
|
|
38878
39282
|
req.includeTests = params.includeTests;
|
|
38879
39283
|
if (params.path !== undefined)
|
|
38880
39284
|
req.path = params.path;
|
|
38881
|
-
const response = await callToolCall(bridge, "search", req, extCtx);
|
|
39285
|
+
const response = await callToolCall(bridge, "search", req, extCtx, signal ? { abortSignal: signal } : undefined);
|
|
38882
39286
|
if (response.success === false) {
|
|
38883
39287
|
throw new Error(response.text || response.message || "search failed");
|
|
38884
39288
|
}
|
|
@@ -39178,7 +39582,7 @@ var PLUGIN_VERSION = (() => {
|
|
|
39178
39582
|
return "0.0.0";
|
|
39179
39583
|
}
|
|
39180
39584
|
})();
|
|
39181
|
-
var ANNOUNCEMENT_VERSION = "0.
|
|
39585
|
+
var ANNOUNCEMENT_VERSION = "0.55.0";
|
|
39182
39586
|
var ANNOUNCEMENT_FEATURES = [
|
|
39183
39587
|
"Callgraph stays consistent under load: edits arriving mid-rebuild can no longer be silently lost from navigation results.",
|
|
39184
39588
|
"aft_zoom handles real-world .jsonc: files with comment banners above the opening brace now resolve, and not-found errors point at the segment that actually failed (thanks @iceteaSA).",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp-auto-install.d.ts","sourceRoot":"","sources":["../src/lsp-auto-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAeH,OAAO,
|
|
1
|
+
{"version":3,"file":"lsp-auto-install.d.ts","sourceRoot":"","sources":["../src/lsp-auto-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAeH,OAAO,EACL,KAAK,gBAAgB,EAKtB,MAAM,uBAAuB,CAAC;AAwB/B,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,kGAAkG;IAClG,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,qCAAqC;AACrC,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B;;;;;;;OAOG;IACH,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C;;;;;;;;;OASG;IACH,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,MAAM,EAAE,CAAC;CAClC;AAiED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM/D;AAyDD;;;;;GAKG;AACH;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAYrD;AA0VD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,EACzB,SAAS,GAAE,OAAO,KAAa,GAC9B,iBAAiB,CA8EnB;AAED,gFAAgF;AAChF,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,GAAG,aAAa,CAAC,EACpE,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
package/dist/lsp-cache.d.ts
CHANGED
|
@@ -49,6 +49,10 @@ export declare function readInstalledMetaIn(installDir: string): InstalledMeta |
|
|
|
49
49
|
export declare function writeInstalledMeta(packageKey: string, version: string, sha256?: string): void;
|
|
50
50
|
/** npm install path: read installed metadata from the package cache dir. */
|
|
51
51
|
export declare function readInstalledMeta(packageKey: string): InstalledMeta | null;
|
|
52
|
+
export interface InstallLockLease {
|
|
53
|
+
retain(): void;
|
|
54
|
+
release(): void;
|
|
55
|
+
}
|
|
52
56
|
/**
|
|
53
57
|
* Acquire an install lock for `lockKey` using an atomic `O_EXCL` open.
|
|
54
58
|
*
|
|
@@ -60,13 +64,12 @@ export declare function readInstalledMeta(packageKey: string): InstalledMeta | n
|
|
|
60
64
|
* Stale-lock recovery: if the lock file exists, we read it. If the recorded
|
|
61
65
|
* PID is no longer alive OR the file is older than `STALE_LOCK_MS`, we claim
|
|
62
66
|
* the lock by atomically replacing it (unlink + create with `wx`). If that
|
|
63
|
-
* race fails (someone else just claimed it), we return
|
|
67
|
+
* race fails (someone else just claimed it), we return null honestly.
|
|
64
68
|
*
|
|
65
|
-
* The lock file content is `<pid>\n<iso-timestamp>\n` so
|
|
66
|
-
* can detect dead owners.
|
|
69
|
+
* The lock file content is `<pid>\n<iso-timestamp>\n<acquisition-token>\n` so
|
|
70
|
+
* other processes can detect dead owners while releases remain generation-safe.
|
|
67
71
|
*/
|
|
68
|
-
export declare function acquireInstallLock(lockKey: string):
|
|
69
|
-
export declare function releaseInstallLock(lockKey: string): void;
|
|
72
|
+
export declare function acquireInstallLock(lockKey: string): InstallLockLease | null;
|
|
70
73
|
/**
|
|
71
74
|
* Run `task` while holding the install lock. The lock is released only
|
|
72
75
|
* when `task` settles (resolves or rejects), not when it starts.
|
|
@@ -74,7 +77,7 @@ export declare function releaseInstallLock(lockKey: string): void;
|
|
|
74
77
|
* Returns the task's resolved value, or `null` if the lock could not be
|
|
75
78
|
* acquired (caller should treat as "another install in progress").
|
|
76
79
|
*/
|
|
77
|
-
export declare function withInstallLock<T>(lockKey: string, task: () => Promise<T>): Promise<T | null>;
|
|
80
|
+
export declare function withInstallLock<T>(lockKey: string, task: (lease: InstallLockLease) => Promise<T>): Promise<T | null>;
|
|
78
81
|
/** Last-checked metadata stored next to the install. */
|
|
79
82
|
interface VersionCheckRecord {
|
|
80
83
|
/** ISO timestamp of the last `npm registry probe`. */
|
package/dist/lsp-cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp-cache.d.ts","sourceRoot":"","sources":["../src/lsp-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"lsp-cache.d.ts","sourceRoot":"","sources":["../src/lsp-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAgBH,mHAAmH;AACnH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,qDAAqD;AACrD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CASvE;AAOD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAY/F;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAiB5E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAE7F;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAE1E;AAeD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAqF3E;AA0DD;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,GAC5C,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAQnB;AAED,wDAAwD;AACxD,UAAU,kBAAkB;IAC1B,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAID,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAe9E;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAQjF;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,kBAAkB,GAAG,IAAI,EACjC,qBAAqB,SAA0B,GAC9C,OAAO,CAKT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hoisted.d.ts","sourceRoot":"","sources":["../../src/tools/hoisted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAEjB,KAAK,KAAK,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAqB,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAajD,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"hoisted.d.ts","sourceRoot":"","sources":["../../src/tools/hoisted.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/tools/semantic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAC5F,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,OAAO,EAQL,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAK7B,MAAM,qBAAqB,CAAC;AAW7B,QAAA,MAAM,YAAY;;;;;EAgCjB,CAAC;AAEF,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CAuFV;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAG3B;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,uBAA4C,sFAUtD;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/tools/semantic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAC5F,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,OAAO,EAQL,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAK7B,MAAM,qBAAqB,CAAC;AAW7B,QAAA,MAAM,YAAY;;;;;EAgCjB,CAAC;AAEF,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CAuFV;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAG3B;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,uBAA4C,sFAUtD;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAqD/E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cortexkit/aft-pi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.55.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Pi coding agent extension for Agent File Tools (AFT) — tree-sitter and LSP-powered code analysis",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -23,19 +23,19 @@
|
|
|
23
23
|
"test:unit": "bun test src/__tests__ --path-ignore-patterns 'src/__tests__/e2e/**'"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@cortexkit/aft-bridge": "0.
|
|
26
|
+
"@cortexkit/aft-bridge": "0.55.0",
|
|
27
27
|
"comment-json": "^5.0.0",
|
|
28
28
|
"diff": "^8.0.4",
|
|
29
29
|
"typebox": "1.1.38",
|
|
30
30
|
"zod": "^4.4.3"
|
|
31
31
|
},
|
|
32
32
|
"optionalDependencies": {
|
|
33
|
-
"@cortexkit/aft-darwin-arm64": "0.
|
|
34
|
-
"@cortexkit/aft-darwin-x64": "0.
|
|
35
|
-
"@cortexkit/aft-linux-arm64": "0.
|
|
36
|
-
"@cortexkit/aft-linux-x64": "0.
|
|
37
|
-
"@cortexkit/aft-win32-arm64": "0.
|
|
38
|
-
"@cortexkit/aft-win32-x64": "0.
|
|
33
|
+
"@cortexkit/aft-darwin-arm64": "0.55.0",
|
|
34
|
+
"@cortexkit/aft-darwin-x64": "0.55.0",
|
|
35
|
+
"@cortexkit/aft-linux-arm64": "0.55.0",
|
|
36
|
+
"@cortexkit/aft-linux-x64": "0.55.0",
|
|
37
|
+
"@cortexkit/aft-win32-arm64": "0.55.0",
|
|
38
|
+
"@cortexkit/aft-win32-x64": "0.55.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@earendil-works/pi-coding-agent": "^0.80.2",
|