@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.
@@ -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":"AAGA,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,UAAU,EAQhB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0CxB,MAAM,MAAM,SAAS,GACjB,OAAO,GACP,OAAO,GACP,UAAU,GACV,MAAM,GACN,MAAM,GACN,OAAO,GACP,SAAS,GACT,WAAW,GACX,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,MAAM,OAAO,GACf,KAAK,GACL,MAAM,GACN,OAAO,GACP,SAAS,GACT,MAAM,GACN,OAAO,GACP,IAAI,GACJ,aAAa,GACb,MAAM,CAAC;AAEX,+EAA+E;AAC/E,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,mBAAmB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEvF,MAAM,WAAW,YAAY;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,KAAK,CAAC,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE;QACX,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;KACvC,CAAC;CACH;AAED,eAAO,MAAM,sCAAsC,SAAU,CAAC;AAC9D,eAAO,MAAM,kCAAkC,QAAS,CAAC;AACzD,eAAO,MAAM,kCAAkC,SAAU,CAAC;AAS1D,sFAAsF;AACtF,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAI5E;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC;IACnC,gGAAgG;IAChG,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,6BAA6B,CAAC,EAAE,OAAO,CAAC;QACxC,iCAAiC,CAAC,EAAE,MAAM,CAAC;KAC5C,CAAC;IACF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,8BAA8B;IAC7C,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,KAAK,CAAC;AAE5D,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4FAA4F;IAC5F,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mFAAmF;IACnF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2JAA2J;IAC3J,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C;;;OAGG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,gFAAgF;IAChF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4HAA4H;IAC5H,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACnC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mFAAmF;IACnF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,oEAAoE;IACpE,2BAA2B,CAAC,EAAE,yBAAyB,CAAC;IACxD,wIAAwI;IACxI,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oFAAoF;IACpF,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qJAAqJ;IACrJ,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,4GAA4G;IAC5G,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,kGAAkG;IAClG,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE;QACT,6FAA6F;QAC7F,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,+GAA+G;IAC/G,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC5B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,aAAa,EAAE,OAAO,CAAC;IACvB,2JAA2J;IAC3J,sBAAsB,EAAE,OAAO,CAAC;IAChC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C;;;OAGG;IACH,yBAAyB,EAAE,MAAM,CAAC;IAClC,8DAA8D;IAC9D,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,iEAAiE;AACjE,eAAO,MAAM,iCAAiC,QAAS,CAAC;AACxD,4EAA4E;AAC5E,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AAEnD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,kBAAkB,CA+EvE;AAqUD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAK3B,CAAC;AAaF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,qBAAqB,CAuDrF;AAED;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgD9F;AAED,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,SAAS,GAChB,8BAA8B,CAsBhC;AAED,KAAK,MAAM,GAAG;IACZ,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAyKF,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAsB,GAC7B;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAgD1C;AAMD,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAIhE,wBAAgB,mBAAmB,IAAI,SAAS,eAAe,EAAE,CAEhE;AAED,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAKhG;AAuYD,8DAA8D;AAC9D,eAAO,MAAM,iCAAiC,QAAS,CAAC;AACxD,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C,oKAAoK;AACpK,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAGhD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAElE;AAED,8EAA8E;AAC9E,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,SAAS,GAAG;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,CAKA;AAQD,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,CACvC,gBAAgB,EAAE,MAAM,EACxB,MAAM,GAAE,MAAsB,GAC7B,4BAA4B,EAAE,CAmBhC;AAED,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,GAAG,sBAAsB,CAKtF;AAED,wBAAgB,8BAA8B,CAC5C,gBAAgB,EAAE,MAAM,EACxB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACzC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAC3B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,0BAA0B,EAAE,MAAM,CAAC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAkBA;AAMD,wBAAgB,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAkCjE"}
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 };
@@ -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
- const newStringEmpty = !hasOwn(record, "newString") || isNullOrEmptyString(record.newString);
15816
- if (!newStringEmpty)
15817
- return false;
15818
- return !hasOwn(record, "content") || isNullOrEmptyString(record.content);
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 stripLineRangeSentinels(item) {
15872
- const hasRangeField = ["startLine", "endLine", "content"].some((key) => hasOwn(item, key));
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
- if (!hasRangeField)
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.occurrence === 1)
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
- stripLineRangeSentinels(item);
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).wakeDeferredTaskIds.clear();
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
- const key = `${kind}\x00${drainContext.directory}\x00${drainContext.sessionID}`;
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
- sessionLog(drainContext.sessionID, `${LOG_PREFIX} ${message}`, {
17029
- event: "subc_bg_nudge_delivery",
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
- 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)}`);
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
- sessionWarn(drainContext.sessionID ?? "", `${LOG_PREFIX} drain failed: ${String(response.message ?? "unknown error")}`);
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
- sessionWarn(drainContext.sessionID ?? "", `${LOG_PREFIX} drain failed: ${err instanceof Error ? err.message : String(err)}`);
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
- sessionWarn(drainContext.sessionID ?? "", `${LOG_PREFIX} ack failed: ${String(response.message ?? "unknown error")}`);
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
- sessionWarn(drainContext.sessionID ?? "", `${LOG_PREFIX} ack failed: ${err instanceof Error ? err.message : String(err)}`);
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.54.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.54.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.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"
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 spawn3 } from "node:child_process";
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
- return true;
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 false;
33709
+ return null;
33366
33710
  warn2(`[lsp] unexpected error acquiring install lock for ${lockKey}: ${err}`);
33367
- return false;
33711
+ return null;
33368
33712
  }
33369
33713
  };
33370
- if (tryClaim())
33371
- return true;
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 false;
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 firstLine = raw.split(/\r?\n/, 1)[0]?.trim() ?? "";
33415
- const parsed = Number.parseInt(firstLine, 10);
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}: owned by pid ${owningPid ?? "unknown"} (we are ${process.pid})`);
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
- if (!acquireInstallLock(lockKey))
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
- releaseInstallLock(lockKey);
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 child = spawn3(npm.command, ["install", "--no-save", "--ignore-scripts", "--silent", target], {
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 killTimer = null;
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.kill("SIGTERM");
33879
- killTimer = setTimeout(() => {
33880
- if (!settled)
33881
- child.kill("SIGKILL");
33882
- }, 5000);
33883
- killTimer.unref?.();
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
- error2(`[lsp] install ${target} failed to spawn: ${err}`);
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
- const outcome = await withInstallLock(spec.npm, async () => {
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.includes(BASH_WAIT_DETACH_MAGIC_KEYWORD))
35451
+ if (!containsStandaloneDetachKeyword(messageText))
35059
35452
  return messageText;
35060
- const stripped = messageText.replaceAll(BASH_WAIT_DETACH_MAGIC_KEYWORD, "").replace(/[ \t]{2,}/g, " ");
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.includes(BASH_WAIT_DETACH_MAGIC_KEYWORD);
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 Array.isArray(extCtx.model?.input) && extCtx.model.input.includes("image");
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: "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.",
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, _signal, _onUpdate, extCtx) {
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.54.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,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":"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;AA6D7B;;;;GAIG;AACH,UAAU,iBAAiB;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;CAClB;AAuFD;;;;;;;;;GASG;AACH,wBAAsB,iCAAiC,CACrD,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/E,OAAO,CAAC,IAAI,CAAC,CA6Bf;AA4HD,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,kEAAkE;AAClE,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA8ED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,gBAAgB,GACxB,IAAI,CA2TN;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,eAAe,CAAC,mBAAmB,CAAC,CAmFtC;AAuED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,GAAG,MAAM,EAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,CAAC,mBAAmB,CAAC,EAC5C,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,uBAA4C,GACpD,SAAS,CA8EX;AAQD;6BAC6B;AAC7B,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA0B3D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,mBAAmB,EAAE,OAAO,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAER"}
@@ -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.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.54.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.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.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",