@cortexkit/aft-pi 0.54.0 → 0.55.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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;AAGxD,4GAA4G;AAC5G,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAMzE;AAED,iFAAiF;AACjF,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAKjG;AAaD,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,IAAI,CAAC,CAWf"}
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>>;
@@ -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 entry = this.pending.get(id);
9023
- if (!entry)
9037
+ const entry2 = this.pending.get(id);
9038
+ if (!entry2)
9024
9039
  return;
9025
9040
  this.pending.delete(id);
9026
- clearTimeout(entry.timer);
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
- entry.reject(new BridgeTransportTimeoutError(command, effectiveTimeoutMs, `${this.errorPrefix} Request "${command}" (id=${id}) timed out after ${effectiveTimeoutMs}ms`));
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
- entry.reject(new Error(`${this.errorPrefix} request "${command}" timed out after ${effectiveTimeoutMs}ms (bridge busy/under load); bridge kept warm — retry`));
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
- entry.reject(new Error(`${this.errorPrefix} Request "${command}" (id=${id}) timed out after ${effectiveTimeoutMs}ms`));
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
- this.pending.set(id, { resolve: resolve3, reject, timer, onProgress: options?.onProgress, command });
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 entry = this.pending.get(id);
9070
- if (entry) {
9092
+ const entry2 = this.pending.get(id);
9093
+ if (entry2) {
9071
9094
  this.pending.delete(id);
9072
- clearTimeout(entry.timer);
9073
- entry.reject(error2);
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 };
@@ -15538,6 +15752,10 @@ function pathValue(record, property) {
15538
15752
  return value;
15539
15753
  }
15540
15754
  function normalizeAliasPair(record, canonical, legacy, required) {
15755
+ if (isNullOrEmptyString(record[canonical]))
15756
+ delete record[canonical];
15757
+ if (isNullOrEmptyString(record[legacy]))
15758
+ delete record[legacy];
15541
15759
  const hasCanonical = hasOwn(record, canonical);
15542
15760
  const hasLegacy = hasOwn(record, legacy);
15543
15761
  if (!hasCanonical && !hasLegacy) {
@@ -15569,8 +15787,13 @@ function normalizeAliasPair(record, canonical, legacy, required) {
15569
15787
  delete record[legacy];
15570
15788
  }
15571
15789
  function validateOptionalCanonicalPath(record, property) {
15572
- if (hasOwn(record, property))
15573
- pathValue(record, property);
15790
+ if (!hasOwn(record, property))
15791
+ return;
15792
+ if (isNullOrEmptyString(record[property])) {
15793
+ delete record[property];
15794
+ return;
15795
+ }
15796
+ pathValue(record, property);
15574
15797
  }
15575
15798
  function normalizeZoomTargets(record) {
15576
15799
  if (!hasOwn(record, "targets"))
@@ -15726,6 +15949,10 @@ function prepareCanonicalEditArguments(toolName, rawArguments) {
15726
15949
  return record;
15727
15950
  }
15728
15951
  function normalizeEditPathAlias(record) {
15952
+ if (isNullOrEmptyString(record.path))
15953
+ delete record.path;
15954
+ if (isNullOrEmptyString(record.filePath))
15955
+ delete record.filePath;
15729
15956
  const hasCanonical = hasOwn(record, "path");
15730
15957
  const hasLegacy = hasOwn(record, "filePath");
15731
15958
  if (!hasCanonical && !hasLegacy)
@@ -15751,7 +15978,7 @@ function normalizeEditPathAlias(record) {
15751
15978
  }
15752
15979
  }
15753
15980
  function validateEditPath(record) {
15754
- if (!hasOwn(record, "path")) {
15981
+ if (!hasOwn(record, "path") || isNullOrEmptyString(record.path)) {
15755
15982
  throw new InvalidRequestError("'path' is required");
15756
15983
  }
15757
15984
  pathValue(record, "path");
@@ -15812,10 +16039,13 @@ function isEditSentinelItem(item) {
15812
16039
  if (record.oldString === null && ["startLine", "endLine"].some((key) => hasOwn(record, key) && record[key] !== null)) {
15813
16040
  return false;
15814
16041
  }
15815
- const newStringEmpty = !hasOwn(record, "newString") || isNullOrEmptyString(record.newString);
15816
- if (!newStringEmpty)
15817
- return false;
15818
- return !hasOwn(record, "content") || isNullOrEmptyString(record.content);
16042
+ 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);
16043
+ }
16044
+ function hasMeaningfulFindPayload(item) {
16045
+ return isNonEmptyString(item.oldString);
16046
+ }
16047
+ function isDefaultOccurrence(value) {
16048
+ return value === undefined || value === null || value === 1;
15819
16049
  }
15820
16050
  function normalizeEditArraySentinels(record) {
15821
16051
  const value = record.edits;
@@ -15868,8 +16098,8 @@ function parseEditArray(value) {
15868
16098
  }
15869
16099
  return value;
15870
16100
  }
15871
- function stripLineRangeSentinels(item) {
15872
- const hasRangeField = ["startLine", "endLine", "content"].some((key) => hasOwn(item, key));
16101
+ function normalizeEditItemSentinels(item) {
16102
+ const hadRangeFields = ["startLine", "endLine", "content"].some((key) => hasOwn(item, key));
15873
16103
  for (const key of [
15874
16104
  "oldString",
15875
16105
  "newString",
@@ -15882,7 +16112,19 @@ function stripLineRangeSentinels(item) {
15882
16112
  if (item[key] === null)
15883
16113
  delete item[key];
15884
16114
  }
15885
- if (!hasRangeField)
16115
+ const contentIsEmpty = item.content === "";
16116
+ if (hasMeaningfulFindPayload(item) && (!hasOwn(item, "content") || contentIsEmpty)) {
16117
+ for (const key of ["startLine", "endLine", "content"])
16118
+ delete item[key];
16119
+ if (hadRangeFields) {
16120
+ if (item.replaceAll === false)
16121
+ delete item.replaceAll;
16122
+ if (hasOwn(item, "occurrence") && isDefaultOccurrence(item.occurrence))
16123
+ delete item.occurrence;
16124
+ }
16125
+ return;
16126
+ }
16127
+ if (!isNonEmptyString(item.content))
15886
16128
  return;
15887
16129
  if (item.oldString === "")
15888
16130
  delete item.oldString;
@@ -15890,7 +16132,7 @@ function stripLineRangeSentinels(item) {
15890
16132
  delete item.newString;
15891
16133
  if (item.replaceAll === false)
15892
16134
  delete item.replaceAll;
15893
- if (item.occurrence === 1)
16135
+ if (hasOwn(item, "occurrence") && isDefaultOccurrence(item.occurrence))
15894
16136
  delete item.occurrence;
15895
16137
  }
15896
16138
  function normalizeEditItem(value, index) {
@@ -15901,7 +16143,7 @@ function normalizeEditItem(value, index) {
15901
16143
  const item = copyOwnProperties(source);
15902
16144
  normalizeItemAlias(item, "oldString", "oldText");
15903
16145
  normalizeItemAlias(item, "newString", "newText");
15904
- stripLineRangeSentinels(item);
16146
+ normalizeEditItemSentinels(item);
15905
16147
  const hasFindField = ["oldString", "newString", "replaceAll", "occurrence"].some((key) => hasOwn(item, key));
15906
16148
  const hasRangeField = ["startLine", "endLine", "content"].some((key) => hasOwn(item, key));
15907
16149
  if (hasFindField && hasRangeField) {
@@ -16789,6 +17031,8 @@ var UNKNOWN_COMPLETION_CAP = 32;
16789
17031
  var DEFAULT_SESSION_ID2 = "__default__";
16790
17032
  var LOG_PREFIX = "[aft-pi] bg-notifications:";
16791
17033
  var SUBC_NUDGE_LOG_INTERVAL_MS = 60000;
17034
+ var DEFAULT_BG_HOP_TIMEOUT_MS = 15000;
17035
+ var bgHopTimeoutMs = DEFAULT_BG_HOP_TIMEOUT_MS;
16792
17036
  var subcNudgesInFlight = new Map;
16793
17037
  var subcNudgeLogState = new Map;
16794
17038
  function normalizeSessionID(sessionID) {
@@ -17012,11 +17256,21 @@ function handleSubcBgEventsNudge(drainContext) {
17012
17256
  }
17013
17257
  async function handleSubcBgEventsNudgeOnce(drainContext) {
17014
17258
  bridgeForDrain(drainContext);
17015
- stateFor(drainContext.sessionID).wakeDeferredTaskIds.clear();
17259
+ const state = stateFor(drainContext.sessionID);
17260
+ state.wakeDeferredTaskIds.clear();
17261
+ rearmHardStoppedWake(state, drainContext);
17016
17262
  await triggerWakeIfPending(drainContext, false, true, true);
17017
17263
  }
17018
17264
  function logSubcNudgeLifecycle(drainContext, kind, message) {
17019
- const key = `${kind}\x00${drainContext.directory}\x00${drainContext.sessionID}`;
17265
+ logDeliveryHop(drainContext, kind, message, {
17266
+ event: "subc_bg_nudge_delivery",
17267
+ cause: kind
17268
+ });
17269
+ }
17270
+ function logDeliveryHop(drainContext, kind, message, data, level = "info") {
17271
+ const sessionID = normalizeSessionID(drainContext.sessionID);
17272
+ const taskKey = typeof data.task_id === "string" ? data.task_id : Array.isArray(data.task_ids) ? data.task_ids.join(",") : "";
17273
+ const key = `${kind}\x00${taskKey}\x00${drainContext.directory}\x00${sessionID}`;
17020
17274
  const now = Date.now();
17021
17275
  const state = subcNudgeLogState.get(key);
17022
17276
  if (state && now - state.lastEmittedAt < SUBC_NUDGE_LOG_INTERVAL_MS) {
@@ -17025,13 +17279,48 @@ function logSubcNudgeLifecycle(drainContext, kind, message) {
17025
17279
  }
17026
17280
  const suppressed = state?.suppressed ?? 0;
17027
17281
  subcNudgeLogState.set(key, { lastEmittedAt: now, suppressed: 0 });
17028
- sessionLog(drainContext.sessionID, `${LOG_PREFIX} ${message}`, {
17029
- event: "subc_bg_nudge_delivery",
17030
- cause: kind,
17282
+ const payload = {
17283
+ ...data,
17031
17284
  canonical_root: drainContext.directory,
17032
17285
  suppressed
17286
+ };
17287
+ if (level === "warn") {
17288
+ sessionWarn(sessionID, `${LOG_PREFIX} ${message}`, payload);
17289
+ } else {
17290
+ sessionLog(sessionID, `${LOG_PREFIX} ${message}`, payload);
17291
+ }
17292
+ }
17293
+ function logPerTaskDeliveryHop(drainContext, kind, message, taskIDs, data, level = "info") {
17294
+ for (const taskID of taskIDs) {
17295
+ logDeliveryHop(drainContext, kind, message, { ...data, task_id: taskID, task_ids: taskIDs }, level);
17296
+ }
17297
+ }
17298
+ function rearmHardStoppedWake(state, drainContext) {
17299
+ if (!state.wakeHardStopped)
17300
+ return;
17301
+ state.wakeHardStopped = false;
17302
+ state.wakeRetryAttempts = 0;
17303
+ state.retryDelayMs = null;
17304
+ logDeliveryHop(drainContext, "inject-rearmed", "delivery retry re-armed", {
17305
+ event: "bash_completion_inject_rearmed",
17306
+ task_ids: state.pendingCompletions.map((completion) => completion.task_id)
17033
17307
  });
17034
17308
  }
17309
+ async function withBgHopTimeout(operation, label) {
17310
+ let timer;
17311
+ try {
17312
+ return await Promise.race([
17313
+ operation,
17314
+ new Promise((_, reject) => {
17315
+ timer = setTimeout(() => reject(new Error(`${label} timed out after ${bgHopTimeoutMs}ms`)), bgHopTimeoutMs);
17316
+ timer.unref?.();
17317
+ })
17318
+ ]);
17319
+ } finally {
17320
+ if (timer)
17321
+ clearTimeout(timer);
17322
+ }
17323
+ }
17035
17324
  async function triggerWakeIfPending(drainContext, skipDrain, includeDeferredCompletions = true, forceDrain = false) {
17036
17325
  const state = stateFor(drainContext.sessionID);
17037
17326
  if (!skipDrain && (forceDrain || state.outstandingTaskIds.size > 0 || !state.forcedDrainCompleted)) {
@@ -17041,8 +17330,25 @@ async function triggerWakeIfPending(drainContext, skipDrain, includeDeferredComp
17041
17330
  if (!hasWakeEligiblePending(state, includeDeferredCompletions))
17042
17331
  return;
17043
17332
  scheduleWake(state, async (reminder, deliveredCompletions) => {
17044
- drainContext.runtime.sendUserMessage(reminder, { deliverAs: "steer" });
17045
17333
  const ackTargetIds = deliveredCompletions.map((completion) => completion.task_id);
17334
+ logPerTaskDeliveryHop(drainContext, "inject-start", "session inject start", ackTargetIds, {
17335
+ event: "bash_completion_wake_send_user_message_start",
17336
+ attempt: state.wakeRetryAttempts + 1
17337
+ });
17338
+ try {
17339
+ drainContext.runtime.sendUserMessage(reminder, { deliverAs: "steer" });
17340
+ } catch (err) {
17341
+ logPerTaskDeliveryHop(drainContext, "inject-error", "session inject failed", ackTargetIds, {
17342
+ event: "bash_completion_wake_send_user_message_error",
17343
+ attempt: state.wakeRetryAttempts + 1,
17344
+ cause: err instanceof Error ? err.message : String(err)
17345
+ }, "warn");
17346
+ throw err;
17347
+ }
17348
+ logPerTaskDeliveryHop(drainContext, "inject-ok", "session inject ok", ackTargetIds, {
17349
+ event: "bash_completion_wake_send_user_message_ok",
17350
+ attempt: state.wakeRetryAttempts + 1
17351
+ });
17046
17352
  markDeliveredAwaitingAck(state, ackTargetIds);
17047
17353
  const acked = await ackCompletions(drainContext, deliveredCompletions);
17048
17354
  if (acked)
@@ -17058,7 +17364,12 @@ async function triggerWakeIfPending(drainContext, skipDrain, includeDeferredComp
17058
17364
  });
17059
17365
  return;
17060
17366
  }
17061
- sessionWarn(drainContext.sessionID ?? "", hardStopped ? `${LOG_PREFIX} wake send failed ${MAX_WAKE_SEND_ATTEMPTS} times; stopping retries: ${err instanceof Error ? err.message : String(err)}` : `${LOG_PREFIX} wake send failed: ${err instanceof Error ? err.message : String(err)}`);
17367
+ if (hardStopped) {
17368
+ logDeliveryHop(drainContext, "inject-hard-stopped", "delivery retries paused", {
17369
+ event: "bash_completion_inject_hard_stopped",
17370
+ cause: err instanceof Error ? err.message : String(err)
17371
+ });
17372
+ }
17062
17373
  }, includeDeferredCompletions);
17063
17374
  }
17064
17375
  function formatSystemReminder(completions) {
@@ -17128,12 +17439,21 @@ async function drainCompletions(drainContext) {
17128
17439
  const bridge = bridgeForDrain(drainContext);
17129
17440
  const state = stateFor(drainContext.sessionID);
17130
17441
  const params = drainContext.sessionID ? { session_id: drainContext.sessionID } : {};
17131
- const response = await bridge.send("bash_drain_completions", params);
17442
+ const response = await withBgHopTimeout(bridge.send("bash_drain_completions", params, { timeoutMs: bgHopTimeoutMs }), "bash_drain_completions");
17132
17443
  if (response.success === false) {
17133
- sessionWarn(drainContext.sessionID ?? "", `${LOG_PREFIX} drain failed: ${String(response.message ?? "unknown error")}`);
17444
+ logDeliveryHop(drainContext, "drain-error", "drain failed", {
17445
+ event: "bash_completion_drain_error",
17446
+ cause: String(response.message ?? "unknown error")
17447
+ }, "warn");
17134
17448
  return;
17135
17449
  }
17136
17450
  state.forcedDrainCompleted = true;
17451
+ const drainedTaskIds = Array.isArray(response.bg_completions) ? response.bg_completions.filter(isBgCompletion).map((completion) => completion.task_id) : [];
17452
+ logDeliveryHop(drainContext, "drain-ok", "drain ok", {
17453
+ event: "bash_completion_drain_ok",
17454
+ count: drainedTaskIds.length,
17455
+ task_ids: drainedTaskIds
17456
+ });
17137
17457
  const reackTaskIds = reconcileAwaitingAck(state, response.bg_completions);
17138
17458
  ingestDrainedBgCompletions(drainContext.sessionID, response.bg_completions);
17139
17459
  if (reackTaskIds.length > 0) {
@@ -17149,7 +17469,10 @@ async function drainCompletions(drainContext) {
17149
17469
  } catch (err) {
17150
17470
  if (drainContext.nudgeRef && isTerminalNudgeError(err))
17151
17471
  throw err;
17152
- sessionWarn(drainContext.sessionID ?? "", `${LOG_PREFIX} drain failed: ${err instanceof Error ? err.message : String(err)}`);
17472
+ logDeliveryHop(drainContext, "drain-error", "drain failed", {
17473
+ event: "bash_completion_drain_error",
17474
+ cause: err instanceof Error ? err.message : String(err)
17475
+ }, "warn");
17153
17476
  }
17154
17477
  }
17155
17478
  async function ackCompletions(drainContext, completions) {
@@ -17159,16 +17482,25 @@ async function ackCompletions(drainContext, completions) {
17159
17482
  try {
17160
17483
  const bridge = bridgeForDrain(drainContext);
17161
17484
  const params = drainContext.sessionID ? { session_id: drainContext.sessionID, task_ids: taskIds } : { task_ids: taskIds };
17162
- const response = await bridge.send("bash_ack_completions", params);
17485
+ const response = await withBgHopTimeout(bridge.send("bash_ack_completions", params, { timeoutMs: bgHopTimeoutMs }), "bash_ack_completions");
17163
17486
  if (response.success === false) {
17164
- sessionWarn(drainContext.sessionID ?? "", `${LOG_PREFIX} ack failed: ${String(response.message ?? "unknown error")}`);
17487
+ logPerTaskDeliveryHop(drainContext, "ack-error", "ack failed", taskIds, {
17488
+ event: "bash_completion_ack_error",
17489
+ cause: String(response.message ?? "unknown error")
17490
+ }, "warn");
17165
17491
  return false;
17166
17492
  }
17493
+ logPerTaskDeliveryHop(drainContext, "ack-ok", "ack ok", taskIds, {
17494
+ event: "bash_completion_ack_ok"
17495
+ });
17167
17496
  return true;
17168
17497
  } catch (err) {
17169
17498
  if (drainContext.nudgeRef && isTerminalNudgeError(err))
17170
17499
  throw err;
17171
- sessionWarn(drainContext.sessionID ?? "", `${LOG_PREFIX} ack failed: ${err instanceof Error ? err.message : String(err)}`);
17500
+ logPerTaskDeliveryHop(drainContext, "ack-error", "ack failed", taskIds, {
17501
+ event: "bash_completion_ack_error",
17502
+ cause: err instanceof Error ? err.message : String(err)
17503
+ }, "warn");
17172
17504
  return false;
17173
17505
  }
17174
17506
  }
@@ -17499,7 +17831,7 @@ import {
17499
17831
  // package.json
17500
17832
  var package_default = {
17501
17833
  name: "@cortexkit/aft-pi",
17502
- version: "0.54.0",
17834
+ version: "0.55.1",
17503
17835
  type: "module",
17504
17836
  description: "Pi coding agent extension for Agent File Tools (AFT) — tree-sitter and LSP-powered code analysis",
17505
17837
  main: "dist/index.js",
@@ -17522,19 +17854,19 @@ var package_default = {
17522
17854
  "test:unit": "bun test src/__tests__ --path-ignore-patterns 'src/__tests__/e2e/**'"
17523
17855
  },
17524
17856
  dependencies: {
17525
- "@cortexkit/aft-bridge": "0.54.0",
17857
+ "@cortexkit/aft-bridge": "0.55.1",
17526
17858
  "comment-json": "^5.0.0",
17527
17859
  diff: "^8.0.4",
17528
17860
  typebox: "1.1.38",
17529
17861
  zod: "^4.4.3"
17530
17862
  },
17531
17863
  optionalDependencies: {
17532
- "@cortexkit/aft-darwin-arm64": "0.54.0",
17533
- "@cortexkit/aft-darwin-x64": "0.54.0",
17534
- "@cortexkit/aft-linux-arm64": "0.54.0",
17535
- "@cortexkit/aft-linux-x64": "0.54.0",
17536
- "@cortexkit/aft-win32-arm64": "0.54.0",
17537
- "@cortexkit/aft-win32-x64": "0.54.0"
17864
+ "@cortexkit/aft-darwin-arm64": "0.55.1",
17865
+ "@cortexkit/aft-darwin-x64": "0.55.1",
17866
+ "@cortexkit/aft-linux-arm64": "0.55.1",
17867
+ "@cortexkit/aft-linux-x64": "0.55.1",
17868
+ "@cortexkit/aft-win32-arm64": "0.55.1",
17869
+ "@cortexkit/aft-win32-x64": "0.55.1"
17538
17870
  },
17539
17871
  devDependencies: {
17540
17872
  "@earendil-works/pi-coding-agent": "^0.80.2",
@@ -32683,6 +33015,9 @@ var GhShimConfigSchema = exports_external.object({
32683
33015
  enabled: exports_external.boolean().optional(),
32684
33016
  binary_path: exports_external.string().trim().refine(isAbsolute6, "gh_shim.binary_path must be absolute").optional()
32685
33017
  });
33018
+ var GhReadConfigSchema = exports_external.object({
33019
+ enabled: exports_external.boolean().optional()
33020
+ });
32686
33021
  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
33022
  var GitConfigSchema = exports_external.object({
32688
33023
  co_author: GitCoAuthorSchema.optional()
@@ -32737,6 +33072,7 @@ var AftConfigFieldsSchema = exports_external.object({
32737
33072
  bridge: BridgeConfigSchema.optional(),
32738
33073
  subc: SubcConfigSchema.optional(),
32739
33074
  gh_shim: GhShimConfigSchema.optional(),
33075
+ gh_read: GhReadConfigSchema.optional(),
32740
33076
  git: GitConfigSchema.optional()
32741
33077
  });
32742
33078
  var HarnessOverrideSchema = exports_external.preprocess((value) => {
@@ -33139,6 +33475,8 @@ function getStrippedTopLevelKeys(override) {
33139
33475
  stripped.push("subc");
33140
33476
  if (override.gh_shim !== undefined)
33141
33477
  stripped.push("gh_shim");
33478
+ if (override.gh_read !== undefined)
33479
+ stripped.push("gh_read");
33142
33480
  if (override.disabled_tools?.includes("aft_safety"))
33143
33481
  stripped.push("disabled_tools.aft_safety");
33144
33482
  return stripped;
@@ -33252,7 +33590,7 @@ function loadAftConfig(projectDirectory) {
33252
33590
  }
33253
33591
 
33254
33592
  // src/lsp-auto-install.ts
33255
- import { spawn as spawn3 } from "node:child_process";
33593
+ import { spawn as spawn4 } from "node:child_process";
33256
33594
  import { createHash as createHash4 } from "node:crypto";
33257
33595
  import {
33258
33596
  createReadStream,
@@ -33267,6 +33605,7 @@ import {
33267
33605
  import { join as join15 } from "node:path";
33268
33606
 
33269
33607
  // src/lsp-cache.ts
33608
+ import { randomUUID as randomUUID2 } from "node:crypto";
33270
33609
  import {
33271
33610
  closeSync as closeSync5,
33272
33611
  mkdirSync as mkdirSync6,
@@ -33348,27 +33687,46 @@ var STALE_LOCK_MS2 = 30 * 60 * 1000;
33348
33687
  function acquireInstallLock(lockKey) {
33349
33688
  mkdirSync6(lspPackageDir(lockKey), { recursive: true });
33350
33689
  const lock = lockPath(lockKey);
33690
+ const token = randomUUID2();
33351
33691
  const tryClaim = () => {
33352
33692
  try {
33353
33693
  const fd = openSync5(lock, "wx");
33354
33694
  try {
33355
33695
  writeFileSync5(fd, `${process.pid}
33356
33696
  ${new Date().toISOString()}
33697
+ ${token}
33357
33698
  `);
33358
33699
  } finally {
33359
33700
  closeSync5(fd);
33360
33701
  }
33361
- return true;
33702
+ let retained = false;
33703
+ let released = false;
33704
+ return {
33705
+ retain() {
33706
+ retained = true;
33707
+ },
33708
+ release() {
33709
+ if (released)
33710
+ return;
33711
+ released = true;
33712
+ if (retained) {
33713
+ warn2(`[lsp] retaining install lock for ${lockKey} after unconfirmed npm termination; ` + `cross-process retries remain blocked until stale-lock recovery`);
33714
+ return;
33715
+ }
33716
+ releaseInstallLock(lockKey, token);
33717
+ }
33718
+ };
33362
33719
  } catch (err) {
33363
33720
  const code = err.code;
33364
33721
  if (code === "EEXIST")
33365
- return false;
33722
+ return null;
33366
33723
  warn2(`[lsp] unexpected error acquiring install lock for ${lockKey}: ${err}`);
33367
- return false;
33724
+ return null;
33368
33725
  }
33369
33726
  };
33370
- if (tryClaim())
33371
- return true;
33727
+ const claimed = tryClaim();
33728
+ if (claimed)
33729
+ return claimed;
33372
33730
  let owningPid = null;
33373
33731
  let lockMtimeMs = 0;
33374
33732
  try {
@@ -33386,7 +33744,7 @@ ${new Date().toISOString()}
33386
33744
  const skipLiveness = process.platform === "win32";
33387
33745
  const ownerAlive = !skipLiveness && owningPid !== null && isProcessAlive3(owningPid);
33388
33746
  if (skipLiveness ? ageWithinFresh : ownerAlive && ageWithinFresh) {
33389
- return false;
33747
+ return null;
33390
33748
  }
33391
33749
  log2(`[lsp] reclaiming install lock for ${lockKey} (owner_pid=${owningPid ?? "unknown"}, alive=${ownerAlive}, age_ms=${age})`);
33392
33750
  try {
@@ -33405,16 +33763,18 @@ function isProcessAlive3(pid) {
33405
33763
  return true;
33406
33764
  }
33407
33765
  }
33408
- function releaseInstallLock(lockKey) {
33766
+ function releaseInstallLock(lockKey, acquisitionToken) {
33409
33767
  const lock = lockPath(lockKey);
33410
33768
  try {
33411
33769
  let owningPid = null;
33770
+ let owningToken = "";
33412
33771
  try {
33413
33772
  const raw = readFileSync8(lock, "utf8");
33414
- const firstLine = raw.split(/\r?\n/, 1)[0]?.trim() ?? "";
33415
- const parsed = Number.parseInt(firstLine, 10);
33773
+ const lines = raw.split(/\r?\n/);
33774
+ const parsed = Number.parseInt(lines[0]?.trim() ?? "", 10);
33416
33775
  if (Number.isFinite(parsed) && parsed > 0)
33417
33776
  owningPid = parsed;
33777
+ owningToken = lines[2]?.trim() ?? "";
33418
33778
  } catch (readErr) {
33419
33779
  const code = readErr.code;
33420
33780
  if (code === "ENOENT")
@@ -33422,8 +33782,8 @@ function releaseInstallLock(lockKey) {
33422
33782
  warn2(`[lsp] could not read install lock for ${lockKey} during release: ${readErr}`);
33423
33783
  return;
33424
33784
  }
33425
- if (owningPid !== process.pid) {
33426
- log2(`[lsp] not releasing install lock for ${lockKey}: owned by pid ${owningPid ?? "unknown"} (we are ${process.pid})`);
33785
+ if (owningPid !== process.pid || owningToken !== acquisitionToken) {
33786
+ log2(`[lsp] not releasing install lock for ${lockKey}: acquisition ownership changed`);
33427
33787
  return;
33428
33788
  }
33429
33789
  try {
@@ -33439,12 +33799,13 @@ function releaseInstallLock(lockKey) {
33439
33799
  }
33440
33800
  }
33441
33801
  async function withInstallLock(lockKey, task) {
33442
- if (!acquireInstallLock(lockKey))
33802
+ const lease = acquireInstallLock(lockKey);
33803
+ if (!lease)
33443
33804
  return null;
33444
33805
  try {
33445
- return await task();
33806
+ return await task(lease);
33446
33807
  } finally {
33447
- releaseInstallLock(lockKey);
33808
+ lease.release();
33448
33809
  }
33449
33810
  }
33450
33811
  var VERSION_CHECK_FILE = ".aft-version-check";
@@ -33789,6 +34150,7 @@ function buildExtensionMap(specs) {
33789
34150
  return byExt;
33790
34151
  }
33791
34152
  var inFlightAutoInstalls = new Set;
34153
+ var quarantinedNpmInstalls = new Set;
33792
34154
  function trackInFlightAutoInstall(controller, promise2) {
33793
34155
  const entry = { controller, promise: promise2 };
33794
34156
  inFlightAutoInstalls.add(entry);
@@ -33836,7 +34198,7 @@ function ensureInstallAnchor(cwd) {
33836
34198
  warn2(`[lsp] could not write package.json stub in ${cwd}: ${err}`);
33837
34199
  }
33838
34200
  }
33839
- function runInstall(spec, version2, cwd, signal) {
34201
+ function runInstall(spec, version2, cwd, installLock, signal) {
33840
34202
  return new Promise((resolve8) => {
33841
34203
  const target = `${spec.npm}@${version2}`;
33842
34204
  log2(`[lsp] installing ${target} to ${cwd}`);
@@ -33852,19 +34214,25 @@ function runInstall(spec, version2, cwd, signal) {
33852
34214
  return;
33853
34215
  }
33854
34216
  ensureInstallAnchor(cwd);
33855
- const child = spawn3(npm.command, ["install", "--no-save", "--ignore-scripts", "--silent", target], {
34217
+ const invocation = npmInvocation(npm, [
34218
+ "install",
34219
+ "--no-save",
34220
+ "--ignore-scripts",
34221
+ "--silent",
34222
+ target
34223
+ ]);
34224
+ const child = spawn4(invocation.command, invocation.args, {
33856
34225
  stdio: ["ignore", "pipe", "pipe"],
33857
34226
  cwd,
33858
- env: npmSpawnEnv(npm)
34227
+ env: { ...npmSpawnEnv(npm), ...invocation.env },
34228
+ windowsVerbatimArguments: invocation.windowsVerbatimArguments
33859
34229
  });
33860
34230
  child.unref();
33861
34231
  let stderrBuf = "";
33862
34232
  let settled = false;
33863
- let killTimer = null;
34233
+ let terminationPromise = null;
33864
34234
  const cleanup = () => {
33865
34235
  signal?.removeEventListener("abort", onAbort);
33866
- if (killTimer)
33867
- clearTimeout(killTimer);
33868
34236
  };
33869
34237
  const finish = (ok) => {
33870
34238
  if (settled)
@@ -33873,14 +34241,31 @@ function runInstall(spec, version2, cwd, signal) {
33873
34241
  cleanup();
33874
34242
  resolve8(ok);
33875
34243
  };
34244
+ const childCompletedSuccessfully = () => child.exitCode === 0 && child.signalCode === null;
34245
+ const finishAfterConfirmedTermination = () => {
34246
+ const completedSuccessfully = childCompletedSuccessfully();
34247
+ if (completedSuccessfully)
34248
+ log2(`[lsp] installed ${target}`);
34249
+ finish(completedSuccessfully);
34250
+ };
33876
34251
  const onAbort = () => {
34252
+ if (childCompletedSuccessfully()) {
34253
+ finishAfterConfirmedTermination();
34254
+ return;
34255
+ }
33877
34256
  warn2(`[lsp] install ${target} aborted during shutdown`);
33878
- child.kill("SIGTERM");
33879
- killTimer = setTimeout(() => {
33880
- if (!settled)
33881
- child.kill("SIGKILL");
33882
- }, 5000);
33883
- killTimer.unref?.();
34257
+ terminationPromise ??= terminateNpmProcessTree(child, invocation);
34258
+ terminationPromise.then(finishAfterConfirmedTermination, (terminationError) => {
34259
+ if (child.pid === undefined) {
34260
+ error2(`[lsp] install ${target} failed to spawn during shutdown: ${terminationError}`);
34261
+ finish(false);
34262
+ return;
34263
+ }
34264
+ quarantinedNpmInstalls.add(spec.npm);
34265
+ installLock.retain();
34266
+ error2(`[lsp] install ${target} termination outcome unknown; quarantining retries for this session: ${String(terminationError)}`);
34267
+ finish(false);
34268
+ });
33884
34269
  };
33885
34270
  signal?.addEventListener("abort", onAbort, { once: true });
33886
34271
  if (signal?.aborted)
@@ -33894,10 +34279,16 @@ function runInstall(spec, version2, cwd, signal) {
33894
34279
  }
33895
34280
  });
33896
34281
  child.on("error", (err) => {
33897
- error2(`[lsp] install ${target} failed to spawn: ${err}`);
34282
+ if (settled)
34283
+ return;
34284
+ error2(`[lsp] install ${target} child-process error: ${err}`);
34285
+ if (terminationPromise && child.pid !== undefined)
34286
+ return;
33898
34287
  finish(false);
33899
34288
  });
33900
34289
  child.on("exit", (code) => {
34290
+ if (settled || terminationPromise)
34291
+ return;
33901
34292
  if (code === 0) {
33902
34293
  log2(`[lsp] installed ${target}`);
33903
34294
  finish(true);
@@ -33910,7 +34301,13 @@ ${stderrBuf.trim()}`);
33910
34301
  });
33911
34302
  }
33912
34303
  async function ensureServerInstalled(spec, config2, fetchImpl, signal) {
33913
- const outcome = await withInstallLock(spec.npm, async () => {
34304
+ if (quarantinedNpmInstalls.has(spec.npm)) {
34305
+ return {
34306
+ started: false,
34307
+ reason: "install blocked after unconfirmed npm termination; restart the host to retry"
34308
+ };
34309
+ }
34310
+ const outcome = await withInstallLock(spec.npm, async (installLock) => {
33914
34311
  const { version: version2, probe } = await resolveTargetVersion(spec, config2, fetchImpl);
33915
34312
  if (!version2) {
33916
34313
  const installed = isInstalled(spec.npm, spec.binary);
@@ -33946,7 +34343,7 @@ async function ensureServerInstalled(spec, config2, fetchImpl, signal) {
33946
34343
  log2(`[lsp] reinstalling ${spec.npm}@${version2}: no installed-version metadata recorded`);
33947
34344
  }
33948
34345
  }
33949
- const ok = await runInstall(spec, version2, cachedPackageDir(spec.npm), signal).catch((err) => {
34346
+ const ok = await runInstall(spec, version2, cachedPackageDir(spec.npm), installLock, signal).catch((err) => {
33950
34347
  error2(`[lsp] background install ${spec.npm} crashed: ${err}`);
33951
34348
  return false;
33952
34349
  });
@@ -35054,14 +35451,23 @@ function sendFeatureAnnouncement(version2, features, footer, storageDir) {
35054
35451
  var BASH_TRANSPORT_TIMEOUT_MS = 30000;
35055
35452
  var BASH_WAIT_DETACH_MAGIC_KEYWORD = "&detach";
35056
35453
  var EMPTY_DETACH_MESSAGE = "(requested background detach)";
35454
+ var STANDALONE_DETACH_KEYWORD_SOURCE = `(^|[^\\p{L}\\p{N}_])${BASH_WAIT_DETACH_MAGIC_KEYWORD}(?![\\p{L}\\p{N}_])`;
35455
+ var STANDALONE_DETACH_KEYWORD_PATTERN = new RegExp(STANDALONE_DETACH_KEYWORD_SOURCE, "u");
35456
+ var STANDALONE_DETACH_KEYWORDS_PATTERN = new RegExp(STANDALONE_DETACH_KEYWORD_SOURCE, "gu");
35457
+ function containsStandaloneDetachKeyword(messageText) {
35458
+ return STANDALONE_DETACH_KEYWORD_PATTERN.test(messageText);
35459
+ }
35460
+ function stripStandaloneDetachKeywords(messageText) {
35461
+ return messageText.replace(STANDALONE_DETACH_KEYWORDS_PATTERN, "$1");
35462
+ }
35057
35463
  function stripUserMessageDetachKeyword(messageText) {
35058
- if (!messageText.includes(BASH_WAIT_DETACH_MAGIC_KEYWORD))
35464
+ if (!containsStandaloneDetachKeyword(messageText))
35059
35465
  return messageText;
35060
- const stripped = messageText.replaceAll(BASH_WAIT_DETACH_MAGIC_KEYWORD, "").replace(/[ \t]{2,}/g, " ");
35466
+ const stripped = stripStandaloneDetachKeywords(messageText).replace(/[ \t]{2,}/g, " ");
35061
35467
  return stripped.trim() === "" ? EMPTY_DETACH_MESSAGE : stripped;
35062
35468
  }
35063
35469
  function shouldDetachBashWaitOnUserMessage(config2, messageText) {
35064
- return resolveBashConfig(config2).detach_on_user_message || messageText.includes(BASH_WAIT_DETACH_MAGIC_KEYWORD);
35470
+ return resolveBashConfig(config2).detach_on_user_message || containsStandaloneDetachKeyword(messageText);
35065
35471
  }
35066
35472
  async function sendBashWaitDetach(bridge, sessionID) {
35067
35473
  const response = await bridge.send("bash_wait_detach", { session_id: sessionID }, { keepBridgeOnTimeout: true, transportTimeoutMs: BASH_TRANSPORT_TIMEOUT_MS });
@@ -35524,8 +35930,16 @@ function formatReadAttachmentText(attachment) {
35524
35930
  }
35525
35931
  return `Read attachment [${mime}]${size ? ` ${size}` : ""}`;
35526
35932
  }
35933
+ 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`).";
35934
+ 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.";
35935
+ function readDescription(ghReadEnabled) {
35936
+ return ghReadEnabled ? `${READ_DESCRIPTION} ${ISSUE_AND_PR_READ_DESCRIPTION}` : READ_DESCRIPTION;
35937
+ }
35938
+ function visionCapabilityForPiModel(extCtx) {
35939
+ return Array.isArray(extCtx.model?.input) ? extCtx.model.input.includes("image") : undefined;
35940
+ }
35527
35941
  function modelSupportsImages(extCtx) {
35528
- return Array.isArray(extCtx.model?.input) && extCtx.model.input.includes("image");
35942
+ return visionCapabilityForPiModel(extCtx) === true;
35529
35943
  }
35530
35944
  var NON_VISION_IMAGE_NOTE = "[Current model does not support images. The image will be omitted from this request.]";
35531
35945
  function containsPath(parent, child) {
@@ -35743,7 +36157,7 @@ function registerHoistedTools(pi, ctx, surface) {
35743
36157
  pi.registerTool(withPathAliasPreparation({
35744
36158
  name: readName,
35745
36159
  label: readName,
35746
- 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.",
36160
+ description: readDescription(ctx.config.gh_read?.enabled === true),
35747
36161
  promptSnippet: "Read file contents (supports offset/limit for large files)",
35748
36162
  promptGuidelines: [`Use ${readName} to examine files instead of cat or sed.`],
35749
36163
  parameters: ReadParams,
@@ -35771,6 +36185,9 @@ function registerHoistedTools(pi, ctx, surface) {
35771
36185
  rawArgs.offset = offset;
35772
36186
  if (limit !== undefined)
35773
36187
  rawArgs.limit = limit;
36188
+ const visionCapability = visionCapabilityForPiModel(extCtx);
36189
+ if (visionCapability !== undefined)
36190
+ rawArgs.vision_capability = visionCapability;
35774
36191
  const response = await callToolCall(bridge, "read", rawArgs, extCtx);
35775
36192
  if (response.success === false) {
35776
36193
  throw new Error(response.text || response.message || "read failed");
@@ -37604,7 +38021,7 @@ var InspectParams = Type8.Object({
37604
38021
  description: "Categories to include in detailed drill-down (e.g. 'todos' or ['todos', 'dead_code', 'cycles']). Use 'all' for every active category. Omit for summary-only mode. `sections` changes detail, not the categories verified."
37605
38022
  })),
37606
38023
  scope: Type8.Optional(Type8.Union([Type8.String(), Type8.Array(Type8.String())], {
37607
- description: "Restrict returned results to paths under this scope (file or directory, absolute or relative to project root). `scope=` narrows results; it does not change the diagnostic collection work. Scoped files no producer has authoritatively analyzed are reported as named gaps (complete: false), never as a clean empty result."
38024
+ description: "Restrict returned results to paths under this scope (file or directory, absolute or relative to project root). `scope=` narrows results and limits Rust LSP startup to owning Cargo workspaces; it does not trigger per-file diagnostic collection. Scoped files no producer has authoritatively analyzed are reported as named gaps (complete: false), never as a clean empty result."
37608
38025
  })),
37609
38026
  topK: Type8.Optional(Type8.Integer({
37610
38027
  minimum: 1,
@@ -37916,7 +38333,7 @@ function registerInspectTool(pi, ctx) {
37916
38333
  pi.registerTool({
37917
38334
  name: "aft_inspect",
37918
38335
  label: "inspect",
37919
- description: "Blocking-fresh codebase health inspection. Each call completes current analysis and produces exactly one terminal result: FRESH includes a wait-stamp and completed phases; INTERRUPTED and PHASE-FAILED retain completed phases, with PHASE-FAILED also reporting its phase attribution and failure reason. `sections` selects drill-down detail, not the categories verified.\n\n" + "Use `scope=` to narrow returned results. Scope filters rendered diagnostics; it does not change collection work. Scoped files no producer has authoritatively analyzed are reported as named gaps (complete: false). Passive health changes use the alert channel; do not infer inspect completion from that channel.\n\n" + `Use when: starting work on unfamiliar code, after multi-edit batches to check diagnostics, before a refactor, before review, or to verify cleanup completeness.
38336
+ description: "Blocking-fresh codebase health inspection. Each call completes current analysis and produces exactly one terminal result: FRESH includes a wait-stamp and completed phases; INTERRUPTED and PHASE-FAILED retain completed phases, with PHASE-FAILED also reporting its phase attribution and failure reason. `sections` selects drill-down detail, not the categories verified.\n\n" + "Use `scope=` to narrow returned results. Scope filters rendered diagnostics and limits Rust LSP startup to Cargo workspaces owning the scoped paths; it does not trigger per-file collection work. Scoped files no producer has authoritatively analyzed are reported as named gaps (complete: false). Passive health changes use the alert channel; do not infer inspect completion from that channel.\n\n" + `Use when: starting work on unfamiliar code, after multi-edit batches to check diagnostics, before a refactor, before review, or to verify cleanup completeness.
37920
38337
 
37921
38338
  ` + "Treat `dead_code` as a hint, not proof: reachability is call-based, so symbols reached only via method dispatch or referenced only in type position may be false positives — verify before deleting.",
37922
38339
  parameters: InspectParams,
@@ -38866,7 +39283,7 @@ function registerSemanticTool(pi, ctx) {
38866
39283
  ].join(`
38867
39284
  `),
38868
39285
  parameters: SearchParams2,
38869
- async execute(_toolCallId, params, _signal, _onUpdate, extCtx) {
39286
+ async execute(_toolCallId, params, signal, _onUpdate, extCtx) {
38870
39287
  if (isEmptyParam(params.query) || typeof params.query !== "string" || params.query.trim().length === 0) {
38871
39288
  throw new Error("semantic_search: invalid params: `query` must be a non-empty string");
38872
39289
  }
@@ -38878,7 +39295,7 @@ function registerSemanticTool(pi, ctx) {
38878
39295
  req.includeTests = params.includeTests;
38879
39296
  if (params.path !== undefined)
38880
39297
  req.path = params.path;
38881
- const response = await callToolCall(bridge, "search", req, extCtx);
39298
+ const response = await callToolCall(bridge, "search", req, extCtx, signal ? { abortSignal: signal } : undefined);
38882
39299
  if (response.success === false) {
38883
39300
  throw new Error(response.text || response.message || "search failed");
38884
39301
  }
@@ -39178,7 +39595,7 @@ var PLUGIN_VERSION = (() => {
39178
39595
  return "0.0.0";
39179
39596
  }
39180
39597
  })();
39181
- var ANNOUNCEMENT_VERSION = "0.54.0";
39598
+ var ANNOUNCEMENT_VERSION = "0.55.1";
39182
39599
  var ANNOUNCEMENT_FEATURES = [
39183
39600
  "Callgraph stays consistent under load: edits arriving mid-rebuild can no longer be silently lost from navigation results.",
39184
39601
  "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,EAAE,KAAK,gBAAgB,EAA2B,MAAM,uBAAuB,CAAC;AAuBvF,+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;AA8DD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM/D;AAyDD;;;;;GAKG;AACH;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAYrD;AA+SD;;;;;;;;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"}
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"}
@@ -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 false honestly.
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 other processes
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): boolean;
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`. */
@@ -1 +1 @@
1
- {"version":3,"file":"lsp-cache.d.ts","sourceRoot":"","sources":["../src/lsp-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAeH,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;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiE3D;AAmBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAqCxD;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAOnB;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
+ {"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":"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"}
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":"inspect.d.ts","sourceRoot":"","sources":["../../src/tools/inspect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EAEZ,KAAK,EACN,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAOL,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAI7B,MAAM,qBAAqB,CAAC;AAM7B,QAAA,MAAM,aAAa;;;;EAqBjB,CAAC;AAGH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,aAAa,GAAG,cAAc,CAAC;AAE3E,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAyED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAmB5E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAoDlF;AAaD,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CA6B5F;AAmGD,wCAAwC;AACxC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAkC7E;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,OAAO,aAAa,CAAC,EAClC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAe3B;AAED,wCAAwC;AACxC,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,uBAA4C,sFAqBtD;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAoC9E"}
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/tools/inspect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EAEZ,KAAK,EACN,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAOL,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAI7B,MAAM,qBAAqB,CAAC;AAO7B,QAAA,MAAM,aAAa;;;;EAqBjB,CAAC;AAGH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,aAAa,GAAG,cAAc,CAAC;AAE3E,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAyED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAmB5E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAoDlF;AAaD,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CA6B5F;AAmGD,wCAAwC;AACxC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAkC7E;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,OAAO,aAAa,CAAC,EAClC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAe3B;AAED,wCAAwC;AACxC,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,uBAA4C,sFAqBtD;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAoC9E"}
@@ -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,CA+C/E"}
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.54.0",
3
+ "version": "0.55.1",
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.54.0",
26
+ "@cortexkit/aft-bridge": "0.55.1",
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.54.0",
34
- "@cortexkit/aft-darwin-x64": "0.54.0",
35
- "@cortexkit/aft-linux-arm64": "0.54.0",
36
- "@cortexkit/aft-linux-x64": "0.54.0",
37
- "@cortexkit/aft-win32-arm64": "0.54.0",
38
- "@cortexkit/aft-win32-x64": "0.54.0"
33
+ "@cortexkit/aft-darwin-arm64": "0.55.1",
34
+ "@cortexkit/aft-darwin-x64": "0.55.1",
35
+ "@cortexkit/aft-linux-arm64": "0.55.1",
36
+ "@cortexkit/aft-linux-x64": "0.55.1",
37
+ "@cortexkit/aft-win32-arm64": "0.55.1",
38
+ "@cortexkit/aft-win32-x64": "0.55.1"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@earendil-works/pi-coding-agent": "^0.80.2",