@cortexkit/aft-pi 0.19.6 → 0.20.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.
- package/dist/bg-notifications.d.ts +11 -0
- package/dist/bg-notifications.d.ts.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +174 -30
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/hoisted.d.ts +13 -0
- package/dist/tools/hoisted.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -12,9 +12,16 @@ export interface BgCompletion {
|
|
|
12
12
|
/** True when the captured tail is shorter than the actual output. */
|
|
13
13
|
output_truncated?: boolean;
|
|
14
14
|
}
|
|
15
|
+
export interface BgLongRunningReminder {
|
|
16
|
+
task_id: string;
|
|
17
|
+
session_id: string;
|
|
18
|
+
command: string;
|
|
19
|
+
elapsed_ms: number;
|
|
20
|
+
}
|
|
15
21
|
type SessionBgState = {
|
|
16
22
|
outstandingTaskIds: Set<string>;
|
|
17
23
|
pendingCompletions: BgCompletion[];
|
|
24
|
+
pendingLongRunning: BgLongRunningReminder[];
|
|
18
25
|
debounceTimer: NodeJS.Timeout | null;
|
|
19
26
|
wakeFiredThisIdle: boolean;
|
|
20
27
|
firstCompletionAt: number | null;
|
|
@@ -56,12 +63,16 @@ export declare function ingestBgCompletions(sessionID: string | undefined, compl
|
|
|
56
63
|
export declare function handlePushedBgCompletion(drainContext: DrainContext & {
|
|
57
64
|
runtime: SendUserMessageRuntime;
|
|
58
65
|
}, completion: unknown): Promise<void>;
|
|
66
|
+
export declare function handlePushedBgLongRunning(drainContext: DrainContext & {
|
|
67
|
+
runtime: SendUserMessageRuntime;
|
|
68
|
+
}, reminder: BgLongRunningReminder): Promise<void>;
|
|
59
69
|
export declare function appendToolResultBgCompletions(drainContext: DrainContext, content: ContentBlock[]): Promise<ContentBlock[] | undefined>;
|
|
60
70
|
export declare function handleTurnEndBgCompletions(drainContext: DrainContext & {
|
|
61
71
|
runtime: SendUserMessageRuntime;
|
|
62
72
|
}): Promise<void>;
|
|
63
73
|
export declare function resetBgWake(sessionID: string | undefined): void;
|
|
64
74
|
export declare function formatSystemReminder(completions: readonly BgCompletion[]): string;
|
|
75
|
+
export declare function formatLongRunningReminder(reminders: readonly BgLongRunningReminder[]): string;
|
|
65
76
|
export declare function __resetBgNotificationStateForTests(): void;
|
|
66
77
|
export declare function cleanupIdleSessionStates(now?: number): void;
|
|
67
78
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bg-notifications.d.ts","sourceRoot":"","sources":["../src/bg-notifications.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,KAAK,cAAc,GAAG;IACpB,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,kBAAkB,EAAE,YAAY,EAAE,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACrC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,wBAAwB,EAAE,MAAM,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,YAAY,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1E,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AACtE,KAAK,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;AAC/C,KAAK,sBAAsB,GAAG;IAC5B,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC;CAC5F,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAa,CAAC;AAGtE,eAAO,MAAM,4BAA4B,QAAiB,CAAC;AAQ3D,UAAU,YAAY;IACpB,GAAG,EAAE,aAAa,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgB/E;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,OAAO,GACnB,YAAY,EAAE,CAoBhB;AAED,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,YAAY,GAAG;IAAE,OAAO,EAAE,sBAAsB,CAAA;CAAE,EAChE,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,6BAA6B,CACjD,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,YAAY,EAAE,GACtB,OAAO,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,
|
|
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
|
@@ -33,6 +33,8 @@ export interface ExperimentalConfig {
|
|
|
33
33
|
rewrite?: boolean;
|
|
34
34
|
compress?: boolean;
|
|
35
35
|
background?: boolean;
|
|
36
|
+
long_running_reminder_enabled?: boolean;
|
|
37
|
+
long_running_reminder_interval_ms?: number;
|
|
36
38
|
};
|
|
37
39
|
lsp_ty?: boolean;
|
|
38
40
|
}
|
|
@@ -45,6 +47,8 @@ export interface ConfigureExperimentalOverrides {
|
|
|
45
47
|
experimental_bash_rewrite?: boolean;
|
|
46
48
|
experimental_bash_compress?: boolean;
|
|
47
49
|
experimental_bash_background?: boolean;
|
|
50
|
+
bash_long_running_reminder_enabled?: boolean;
|
|
51
|
+
bash_long_running_reminder_interval_ms?: number;
|
|
48
52
|
experimental_lsp_ty?: boolean;
|
|
49
53
|
}
|
|
50
54
|
export type ToolSurface = "minimal" | "recommended" | "all";
|
|
@@ -123,6 +127,8 @@ export declare const AftConfigSchema: z.ZodObject<{
|
|
|
123
127
|
rewrite: z.ZodOptional<z.ZodBoolean>;
|
|
124
128
|
compress: z.ZodOptional<z.ZodBoolean>;
|
|
125
129
|
background: z.ZodOptional<z.ZodBoolean>;
|
|
130
|
+
long_running_reminder_enabled: z.ZodOptional<z.ZodBoolean>;
|
|
131
|
+
long_running_reminder_interval_ms: z.ZodOptional<z.ZodNumber>;
|
|
126
132
|
}, z.core.$strip>>;
|
|
127
133
|
lsp_ty: z.ZodOptional<z.ZodBoolean>;
|
|
128
134
|
}, z.core.$strip>>;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,MAAM,MAAM,SAAS,GACjB,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,OAAO,GACP,SAAS,GACT,MAAM,GACN,OAAO,GACP,IAAI,GACJ,aAAa,GACb,MAAM,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,mBAAmB,GAAG,QAAQ,CAAC;AAE3E,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,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,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,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,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;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAaH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAaH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AASlE,OAAO,EACL,aAAa,EAGd,MAAM,aAAa,CAAC;AA+FrB,iBAAe,iCAAiC,CAAC,OAAO,EAAE;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhB;AAQD;;;;;;;;GAQG;AACH,iBAAS,kBAAkB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,GAAG;IACrE,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAiEA;AAED;;;;GAIG;AACH,yBAA+B,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuY9D;AAED,eAAO,MAAM,QAAQ;;;CAA4D,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -30612,6 +30612,7 @@ class BinaryBridge {
|
|
|
30612
30612
|
onVersionMismatch;
|
|
30613
30613
|
onConfigureWarnings;
|
|
30614
30614
|
onBashCompletion;
|
|
30615
|
+
onBashLongRunning;
|
|
30615
30616
|
configureWarningClients = new Map;
|
|
30616
30617
|
restartResetTimer = null;
|
|
30617
30618
|
errorPrefix;
|
|
@@ -30625,6 +30626,7 @@ class BinaryBridge {
|
|
|
30625
30626
|
this.onVersionMismatch = options?.onVersionMismatch;
|
|
30626
30627
|
this.onConfigureWarnings = options?.onConfigureWarnings;
|
|
30627
30628
|
this.onBashCompletion = options?.onBashCompletion;
|
|
30629
|
+
this.onBashLongRunning = options?.onBashLongRunning;
|
|
30628
30630
|
this.errorPrefix = options?.errorPrefix ?? "[aft-bridge]";
|
|
30629
30631
|
}
|
|
30630
30632
|
get restartCount() {
|
|
@@ -30937,6 +30939,10 @@ class BinaryBridge {
|
|
|
30937
30939
|
this.onBashCompletion?.(response, this);
|
|
30938
30940
|
continue;
|
|
30939
30941
|
}
|
|
30942
|
+
if (response.type === "bash_long_running") {
|
|
30943
|
+
this.onBashLongRunning?.(response, this);
|
|
30944
|
+
continue;
|
|
30945
|
+
}
|
|
30940
30946
|
if (response.type === "configure_warnings") {
|
|
30941
30947
|
this.handleConfigureWarningsFrame(response).catch((err) => {
|
|
30942
30948
|
warn(`configure warning delivery failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -31758,7 +31764,8 @@ class BridgePool {
|
|
|
31758
31764
|
minVersion: options.minVersion,
|
|
31759
31765
|
onVersionMismatch: options.onVersionMismatch,
|
|
31760
31766
|
onConfigureWarnings: options.onConfigureWarnings,
|
|
31761
|
-
onBashCompletion: options.onBashCompletion
|
|
31767
|
+
onBashCompletion: options.onBashCompletion,
|
|
31768
|
+
onBashLongRunning: options.onBashLongRunning
|
|
31762
31769
|
};
|
|
31763
31770
|
this.configOverrides = configOverrides;
|
|
31764
31771
|
if (Number.isFinite(this.idleTimeoutMs)) {
|
|
@@ -32593,17 +32600,22 @@ async function handlePushedBgCompletion(drainContext, completion) {
|
|
|
32593
32600
|
ingestBgCompletions(drainContext.sessionID, [completion]);
|
|
32594
32601
|
await triggerWakeIfPending(drainContext, true);
|
|
32595
32602
|
}
|
|
32603
|
+
async function handlePushedBgLongRunning(drainContext, reminder) {
|
|
32604
|
+
stateFor(drainContext.sessionID).pendingLongRunning.push(reminder);
|
|
32605
|
+
await triggerWakeIfPending(drainContext, true);
|
|
32606
|
+
}
|
|
32596
32607
|
async function appendToolResultBgCompletions(drainContext, content) {
|
|
32597
32608
|
const state = stateFor(drainContext.sessionID);
|
|
32598
|
-
if (state.outstandingTaskIds.size === 0 && state.pendingCompletions.length === 0)
|
|
32609
|
+
if (state.outstandingTaskIds.size === 0 && state.pendingCompletions.length === 0 && state.pendingLongRunning.length === 0)
|
|
32599
32610
|
return;
|
|
32600
32611
|
if (state.outstandingTaskIds.size > 0) {
|
|
32601
32612
|
await drainCompletions(drainContext);
|
|
32602
32613
|
}
|
|
32603
|
-
if (state.pendingCompletions.length === 0)
|
|
32614
|
+
if (state.pendingCompletions.length === 0 && state.pendingLongRunning.length === 0)
|
|
32604
32615
|
return;
|
|
32605
|
-
const reminder =
|
|
32616
|
+
const reminder = formatCombinedSystemReminder(state.pendingCompletions, state.pendingLongRunning);
|
|
32606
32617
|
state.pendingCompletions = [];
|
|
32618
|
+
state.pendingLongRunning = [];
|
|
32607
32619
|
return [...content, { type: "text", text: reminder }];
|
|
32608
32620
|
}
|
|
32609
32621
|
async function handleTurnEndBgCompletions(drainContext) {
|
|
@@ -32618,7 +32630,7 @@ async function triggerWakeIfPending(drainContext, skipDrain) {
|
|
|
32618
32630
|
if (!skipDrain && state.outstandingTaskIds.size > 0) {
|
|
32619
32631
|
await drainCompletions(drainContext);
|
|
32620
32632
|
}
|
|
32621
|
-
if (state.pendingCompletions.length === 0)
|
|
32633
|
+
if (state.pendingCompletions.length === 0 && state.pendingLongRunning.length === 0)
|
|
32622
32634
|
return;
|
|
32623
32635
|
scheduleWake(state, async (reminder) => {
|
|
32624
32636
|
drainContext.runtime.sendUserMessage(reminder, { deliverAs: "steer" });
|
|
@@ -32641,6 +32653,23 @@ For truncated tasks, use bash_status({ task_id: "..." }) to retrieve full output
|
|
|
32641
32653
|
${bullets}${tail}
|
|
32642
32654
|
</system-reminder>`;
|
|
32643
32655
|
}
|
|
32656
|
+
function formatLongRunningReminder(reminders) {
|
|
32657
|
+
const bullets = reminders.map((reminder) => `- ${reminder.task_id} still running after ${formatDurationMs(reminder.elapsed_ms)}: ${shorten(reminder.command, 120)}`).join(`
|
|
32658
|
+
`);
|
|
32659
|
+
return `<system-reminder>
|
|
32660
|
+
[BACKGROUND BASH STILL RUNNING]
|
|
32661
|
+
${bullets}
|
|
32662
|
+
Use bash_status({ task_id: "..." }) to inspect output or bash_kill({ task_id: "..." }) to terminate.
|
|
32663
|
+
</system-reminder>`;
|
|
32664
|
+
}
|
|
32665
|
+
function formatCombinedSystemReminder(completions, longRunning) {
|
|
32666
|
+
if (completions.length === 0)
|
|
32667
|
+
return formatLongRunningReminder(longRunning);
|
|
32668
|
+
if (longRunning.length === 0)
|
|
32669
|
+
return formatSystemReminder(completions);
|
|
32670
|
+
return `${formatSystemReminder(completions)}
|
|
32671
|
+
${formatLongRunningReminder(longRunning)}`;
|
|
32672
|
+
}
|
|
32644
32673
|
async function drainCompletions({ ctx, directory, sessionID }) {
|
|
32645
32674
|
try {
|
|
32646
32675
|
const bridge = ctx.pool.getActiveBridgeForRoot(directory) ?? ctx.pool.getBridge(directory);
|
|
@@ -32658,7 +32687,8 @@ async function drainCompletions({ ctx, directory, sessionID }) {
|
|
|
32658
32687
|
}
|
|
32659
32688
|
function scheduleWake(state, sendWake, onSendFailure) {
|
|
32660
32689
|
const now = Date.now();
|
|
32661
|
-
|
|
32690
|
+
const pendingCount = state.pendingCompletions.length + state.pendingLongRunning.length;
|
|
32691
|
+
if (state.debounceTimer && pendingCount <= state.scheduledCompletionCount) {
|
|
32662
32692
|
return;
|
|
32663
32693
|
}
|
|
32664
32694
|
if (state.firstCompletionAt === null) {
|
|
@@ -32668,14 +32698,16 @@ function scheduleWake(state, sendWake, onSendFailure) {
|
|
|
32668
32698
|
const previousFireAt = state.scheduledFireAt ?? now;
|
|
32669
32699
|
state.scheduledFireAt = Math.min(previousFireAt + DEBOUNCE_STEP_MS, state.firstCompletionAt + DEBOUNCE_CAP_MS);
|
|
32670
32700
|
}
|
|
32671
|
-
state.scheduledCompletionCount =
|
|
32701
|
+
state.scheduledCompletionCount = pendingCount;
|
|
32672
32702
|
if (state.debounceTimer)
|
|
32673
32703
|
clearTimeout(state.debounceTimer);
|
|
32674
32704
|
const delay = state.retryDelayMs ?? Math.max(0, (state.scheduledFireAt ?? now) - now);
|
|
32675
32705
|
state.debounceTimer = setTimeout(() => {
|
|
32676
32706
|
const pending = state.pendingCompletions;
|
|
32677
|
-
const
|
|
32707
|
+
const pendingLongRunning = state.pendingLongRunning;
|
|
32708
|
+
const reminder = formatCombinedSystemReminder(pending, pendingLongRunning);
|
|
32678
32709
|
state.pendingCompletions = [];
|
|
32710
|
+
state.pendingLongRunning = [];
|
|
32679
32711
|
state.debounceTimer = null;
|
|
32680
32712
|
state.firstCompletionAt = null;
|
|
32681
32713
|
state.scheduledFireAt = null;
|
|
@@ -32685,6 +32717,7 @@ function scheduleWake(state, sendWake, onSendFailure) {
|
|
|
32685
32717
|
state.wakeFiredThisIdle = true;
|
|
32686
32718
|
}).catch((err) => {
|
|
32687
32719
|
state.pendingCompletions = [...pending, ...state.pendingCompletions];
|
|
32720
|
+
state.pendingLongRunning = [...pendingLongRunning, ...state.pendingLongRunning];
|
|
32688
32721
|
state.retryDelayMs = Math.min((delay || DEBOUNCE_STEP_MS) * 2, DEBOUNCE_CAP_MS);
|
|
32689
32722
|
onSendFailure(err);
|
|
32690
32723
|
scheduleWake(state, sendWake, onSendFailure);
|
|
@@ -32701,6 +32734,7 @@ function stateFor(sessionID) {
|
|
|
32701
32734
|
state = {
|
|
32702
32735
|
outstandingTaskIds: new Set,
|
|
32703
32736
|
pendingCompletions: [],
|
|
32737
|
+
pendingLongRunning: [],
|
|
32704
32738
|
debounceTimer: null,
|
|
32705
32739
|
wakeFiredThisIdle: false,
|
|
32706
32740
|
firstCompletionAt: null,
|
|
@@ -32787,6 +32821,17 @@ function formatDuration(completion) {
|
|
|
32787
32821
|
const seconds = totalSeconds % 60;
|
|
32788
32822
|
return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
|
|
32789
32823
|
}
|
|
32824
|
+
function formatDurationMs(ms) {
|
|
32825
|
+
if (!Number.isFinite(ms) || ms < 1000)
|
|
32826
|
+
return `${Math.max(0, Math.round(ms))}ms`;
|
|
32827
|
+
const totalSeconds = Math.round(ms / 1000);
|
|
32828
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
32829
|
+
const seconds = totalSeconds % 60;
|
|
32830
|
+
return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
|
|
32831
|
+
}
|
|
32832
|
+
function shorten(value, limit) {
|
|
32833
|
+
return value.length <= limit ? value : `${value.slice(0, limit - 1)}…`;
|
|
32834
|
+
}
|
|
32790
32835
|
|
|
32791
32836
|
// src/shared/status.ts
|
|
32792
32837
|
function asRecord(value) {
|
|
@@ -46594,7 +46639,9 @@ var ExperimentalConfigSchema = exports_external.object({
|
|
|
46594
46639
|
bash: exports_external.object({
|
|
46595
46640
|
rewrite: exports_external.boolean().optional(),
|
|
46596
46641
|
compress: exports_external.boolean().optional(),
|
|
46597
|
-
background: exports_external.boolean().optional()
|
|
46642
|
+
background: exports_external.boolean().optional(),
|
|
46643
|
+
long_running_reminder_enabled: exports_external.boolean().optional(),
|
|
46644
|
+
long_running_reminder_interval_ms: exports_external.number().int().positive().optional()
|
|
46598
46645
|
}).optional(),
|
|
46599
46646
|
lsp_ty: exports_external.boolean().optional()
|
|
46600
46647
|
});
|
|
@@ -46673,6 +46720,12 @@ function resolveExperimentalConfigForConfigure(config2) {
|
|
|
46673
46720
|
if (config2.experimental?.bash?.background !== undefined) {
|
|
46674
46721
|
overrides.experimental_bash_background = config2.experimental.bash.background;
|
|
46675
46722
|
}
|
|
46723
|
+
if (config2.experimental?.bash?.long_running_reminder_enabled !== undefined) {
|
|
46724
|
+
overrides.bash_long_running_reminder_enabled = config2.experimental.bash.long_running_reminder_enabled;
|
|
46725
|
+
}
|
|
46726
|
+
if (config2.experimental?.bash?.long_running_reminder_interval_ms !== undefined) {
|
|
46727
|
+
overrides.bash_long_running_reminder_interval_ms = config2.experimental.bash.long_running_reminder_interval_ms;
|
|
46728
|
+
}
|
|
46676
46729
|
if (config2.experimental?.lsp_ty !== undefined) {
|
|
46677
46730
|
overrides.experimental_lsp_ty = config2.experimental.lsp_ty;
|
|
46678
46731
|
}
|
|
@@ -48966,14 +49019,16 @@ function registerAstTools(pi, ctx, surface) {
|
|
|
48966
49019
|
// src/tools/bash.ts
|
|
48967
49020
|
import { Container as Container2, Spacer as Spacer2, Text as Text2 } from "@mariozechner/pi-tui";
|
|
48968
49021
|
import { Type as Type2 } from "@sinclair/typebox";
|
|
48969
|
-
var
|
|
48970
|
-
var
|
|
49022
|
+
var FOREGROUND_WAIT_WINDOW_MS = 5000;
|
|
49023
|
+
var FOREGROUND_POLL_INTERVAL_MS = 100;
|
|
49024
|
+
var BASH_TRANSPORT_TIMEOUT_MS = 30000;
|
|
48971
49025
|
var BashParams = Type2.Object({
|
|
48972
49026
|
command: Type2.String({
|
|
48973
49027
|
description: "Shell command to execute. Supports pipes, redirections, and shell syntax."
|
|
48974
49028
|
}),
|
|
48975
|
-
timeout: Type2.Optional(Type2.
|
|
48976
|
-
|
|
49029
|
+
timeout: Type2.Optional(Type2.Integer({
|
|
49030
|
+
minimum: 1,
|
|
49031
|
+
description: "Hard kill cap in milliseconds (positive integer). When omitted, the task can run up to 30 minutes. Foreground bash returns inline if the command finishes within ~5s; otherwise it's automatically promoted to background and a completion reminder is delivered when the task actually finishes."
|
|
48977
49032
|
})),
|
|
48978
49033
|
workdir: Type2.Optional(Type2.String({
|
|
48979
49034
|
description: "Working directory for command execution. Relative paths resolve against the project root. Defaults to the current session's working directory."
|
|
@@ -49023,7 +49078,6 @@ function registerBashTool(pi, ctx) {
|
|
|
49023
49078
|
promptSnippet: "Run shell commands (timeout in milliseconds; supports workdir, background tasks, compressed output)",
|
|
49024
49079
|
promptGuidelines: [
|
|
49025
49080
|
"Use bash only when a dedicated AFT tool is not a better fit.",
|
|
49026
|
-
"Prefer background: true for commands that may take longer than 30 seconds.",
|
|
49027
49081
|
"Set compressed: false when you need ANSI color codes in the output."
|
|
49028
49082
|
],
|
|
49029
49083
|
parameters: BashParams,
|
|
@@ -49048,9 +49102,10 @@ function registerBashTool(pi, ctx) {
|
|
|
49048
49102
|
env: spawnContext.env,
|
|
49049
49103
|
description: params.description,
|
|
49050
49104
|
background: params.background,
|
|
49105
|
+
notify_on_completion: params.background === true,
|
|
49051
49106
|
compressed: params.compressed
|
|
49052
49107
|
}, extCtx, {
|
|
49053
|
-
transportTimeoutMs:
|
|
49108
|
+
transportTimeoutMs: BASH_TRANSPORT_TIMEOUT_MS,
|
|
49054
49109
|
keepBridgeOnTimeout: true,
|
|
49055
49110
|
onProgress: ({ text }) => {
|
|
49056
49111
|
streamed += text;
|
|
@@ -49068,7 +49123,38 @@ function registerBashTool(pi, ctx) {
|
|
|
49068
49123
|
}
|
|
49069
49124
|
const taskId = response.task_id;
|
|
49070
49125
|
if (response.status === "running" && taskId) {
|
|
49071
|
-
|
|
49126
|
+
if (params.background === true) {
|
|
49127
|
+
trackBgTask(resolveSessionId(extCtx), taskId);
|
|
49128
|
+
return bashResult(formatBackgroundLaunch(taskId), { task_id: taskId });
|
|
49129
|
+
}
|
|
49130
|
+
const waitTimeoutMs = params.timeout !== undefined ? Math.min(params.timeout, FOREGROUND_WAIT_WINDOW_MS) : FOREGROUND_WAIT_WINDOW_MS;
|
|
49131
|
+
const startedAt = Date.now();
|
|
49132
|
+
while (true) {
|
|
49133
|
+
const status = await callBridge(bridge, "bash_status", { task_id: taskId }, extCtx);
|
|
49134
|
+
if (status.success === false) {
|
|
49135
|
+
throw new Error(status.message ?? "bash_status failed");
|
|
49136
|
+
}
|
|
49137
|
+
if (isTerminalStatus(status.status)) {
|
|
49138
|
+
return bashResult(formatForegroundResult(status), {
|
|
49139
|
+
exit_code: status.exit_code,
|
|
49140
|
+
duration_ms: status.duration_ms,
|
|
49141
|
+
truncated: status.output_truncated,
|
|
49142
|
+
output_path: status.output_path,
|
|
49143
|
+
task_id: taskId
|
|
49144
|
+
});
|
|
49145
|
+
}
|
|
49146
|
+
if (Date.now() - startedAt >= waitTimeoutMs) {
|
|
49147
|
+
const promoted = await callBridge(bridge, "bash_promote", { task_id: taskId }, extCtx);
|
|
49148
|
+
if (promoted.success === false) {
|
|
49149
|
+
throw new Error(promoted.message ?? "bash_promote failed");
|
|
49150
|
+
}
|
|
49151
|
+
trackBgTask(resolveSessionId(extCtx), taskId);
|
|
49152
|
+
return bashResult(formatPromotionMessage(taskId, params.timeout), {
|
|
49153
|
+
task_id: taskId
|
|
49154
|
+
});
|
|
49155
|
+
}
|
|
49156
|
+
await sleep(FOREGROUND_POLL_INTERVAL_MS);
|
|
49157
|
+
}
|
|
49072
49158
|
}
|
|
49073
49159
|
const details = {
|
|
49074
49160
|
exit_code: response.exit_code,
|
|
@@ -49077,10 +49163,6 @@ function registerBashTool(pi, ctx) {
|
|
|
49077
49163
|
output_path: response.output_path,
|
|
49078
49164
|
task_id: taskId
|
|
49079
49165
|
};
|
|
49080
|
-
if (response.status === "running" && taskId) {
|
|
49081
|
-
const startedLine = `Background task started: ${taskId}. A completion reminder will be delivered automatically; don't poll bash_status.`;
|
|
49082
|
-
return bashResult(startedLine, details);
|
|
49083
|
-
}
|
|
49084
49166
|
const output = response.output ?? "";
|
|
49085
49167
|
return bashResult(output, details);
|
|
49086
49168
|
},
|
|
@@ -49091,14 +49173,39 @@ function registerBashTool(pi, ctx) {
|
|
|
49091
49173
|
return renderBashResult(result, theme, context);
|
|
49092
49174
|
}
|
|
49093
49175
|
});
|
|
49094
|
-
|
|
49095
|
-
|
|
49096
|
-
|
|
49176
|
+
pi.registerTool(createBashStatusTool(ctx));
|
|
49177
|
+
pi.registerTool(createBashKillTool(ctx));
|
|
49178
|
+
}
|
|
49179
|
+
function formatBackgroundLaunch(taskId) {
|
|
49180
|
+
return `Background task started: ${taskId}. A completion reminder will be delivered automatically; don't poll bash_status.`;
|
|
49181
|
+
}
|
|
49182
|
+
function formatPromotionMessage(taskId, timeout) {
|
|
49183
|
+
const waited = timeout !== undefined ? Math.min(timeout, FOREGROUND_WAIT_WINDOW_MS) : FOREGROUND_WAIT_WINDOW_MS;
|
|
49184
|
+
return `Foreground bash didn't finish within ${waited}ms and was promoted to background: ${taskId}. A completion reminder will be delivered automatically; use bash_status({ task_id: "${taskId}" }) to inspect output or bash_kill({ task_id: "${taskId}" }) to terminate.`;
|
|
49185
|
+
}
|
|
49186
|
+
function formatForegroundResult(data) {
|
|
49187
|
+
const output = data.output_preview ?? "";
|
|
49188
|
+
const outputPath = data.output_path;
|
|
49189
|
+
const truncated = data.output_truncated === true;
|
|
49190
|
+
const status = data.status;
|
|
49191
|
+
const exit = data.exit_code;
|
|
49192
|
+
let rendered = output;
|
|
49193
|
+
if (truncated && outputPath) {
|
|
49194
|
+
rendered += `
|
|
49195
|
+
[output truncated; full output at ${outputPath}]`;
|
|
49097
49196
|
}
|
|
49197
|
+
if (status === "timed_out") {
|
|
49198
|
+
rendered += `
|
|
49199
|
+
[command timed out]`;
|
|
49200
|
+
}
|
|
49201
|
+
if (typeof exit === "number" && exit !== 0) {
|
|
49202
|
+
rendered += `
|
|
49203
|
+
[exit code: ${exit}]`;
|
|
49204
|
+
}
|
|
49205
|
+
return rendered;
|
|
49098
49206
|
}
|
|
49099
|
-
function
|
|
49100
|
-
|
|
49101
|
-
return Math.max(30000, bashTimeout + BASH_TRANSPORT_TIMEOUT_OVERHEAD_MS);
|
|
49207
|
+
function sleep(ms) {
|
|
49208
|
+
return new Promise((resolve3) => setTimeout(resolve3, ms));
|
|
49102
49209
|
}
|
|
49103
49210
|
function createBashStatusTool(ctx) {
|
|
49104
49211
|
return {
|
|
@@ -49176,7 +49283,7 @@ A completion reminder will be delivered automatically; don't poll.`;
|
|
|
49176
49283
|
return text;
|
|
49177
49284
|
}
|
|
49178
49285
|
function isTerminalStatus(status) {
|
|
49179
|
-
return status
|
|
49286
|
+
return status === "completed" || status === "failed" || status === "killed" || status === "timed_out";
|
|
49180
49287
|
}
|
|
49181
49288
|
function renderBashCall(command, description, theme, context) {
|
|
49182
49289
|
const text = reuseText2(context.lastComponent);
|
|
@@ -49840,7 +49947,34 @@ async function resolvePathArg(cwd, path2) {
|
|
|
49840
49947
|
}
|
|
49841
49948
|
}
|
|
49842
49949
|
function splitIncludeGlobs(include) {
|
|
49843
|
-
|
|
49950
|
+
const out = [];
|
|
49951
|
+
let depth = 0;
|
|
49952
|
+
let buf = "";
|
|
49953
|
+
for (const ch of include) {
|
|
49954
|
+
if (ch === "{") {
|
|
49955
|
+
depth++;
|
|
49956
|
+
buf += ch;
|
|
49957
|
+
continue;
|
|
49958
|
+
}
|
|
49959
|
+
if (ch === "}") {
|
|
49960
|
+
if (depth > 0)
|
|
49961
|
+
depth--;
|
|
49962
|
+
buf += ch;
|
|
49963
|
+
continue;
|
|
49964
|
+
}
|
|
49965
|
+
if (ch === "," && depth === 0) {
|
|
49966
|
+
const trimmed = buf.trim();
|
|
49967
|
+
if (trimmed.length > 0)
|
|
49968
|
+
out.push(trimmed);
|
|
49969
|
+
buf = "";
|
|
49970
|
+
continue;
|
|
49971
|
+
}
|
|
49972
|
+
buf += ch;
|
|
49973
|
+
}
|
|
49974
|
+
const tail = buf.trim();
|
|
49975
|
+
if (tail.length > 0)
|
|
49976
|
+
out.push(tail);
|
|
49977
|
+
return out;
|
|
49844
49978
|
}
|
|
49845
49979
|
function formatReadFooter(agentSpecifiedRange, data) {
|
|
49846
49980
|
if (agentSpecifiedRange)
|
|
@@ -51260,7 +51394,7 @@ ${lines}
|
|
|
51260
51394
|
} catch (err) {
|
|
51261
51395
|
warn2(`[lsp] auto-install setup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
51262
51396
|
}
|
|
51263
|
-
const
|
|
51397
|
+
const poolOptions = {
|
|
51264
51398
|
errorPrefix: "[aft-pi]",
|
|
51265
51399
|
minVersion: PLUGIN_VERSION,
|
|
51266
51400
|
onConfigureWarnings: async ({ projectRoot, sessionId, client, warnings }) => {
|
|
@@ -51281,8 +51415,18 @@ ${lines}
|
|
|
51281
51415
|
runtime: pi,
|
|
51282
51416
|
isActive: () => bridge.hasPendingRequests()
|
|
51283
51417
|
}, completion);
|
|
51418
|
+
},
|
|
51419
|
+
onBashLongRunning: (reminder, bridge) => {
|
|
51420
|
+
handlePushedBgLongRunning({
|
|
51421
|
+
ctx,
|
|
51422
|
+
directory: process.cwd(),
|
|
51423
|
+
sessionID: reminder.session_id,
|
|
51424
|
+
runtime: pi,
|
|
51425
|
+
isActive: () => bridge.hasPendingRequests()
|
|
51426
|
+
}, reminder);
|
|
51284
51427
|
}
|
|
51285
|
-
}
|
|
51428
|
+
};
|
|
51429
|
+
const pool = new BridgePool(binaryPath, poolOptions, configOverrides);
|
|
51286
51430
|
const ctx = { pool, config: config2, storageDir };
|
|
51287
51431
|
if (onnxRuntimePromise) {
|
|
51288
51432
|
onnxRuntimePromise.then((ortDylibDir) => {
|
package/dist/tools/bash.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAqEjD,QAAA,MAAM,cAAc;;EAIlB,CAAC;AAWH,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAsCD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CA0J3E;AAwCD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa;;;;;;;;yBASpC,MAAM,UACX,MAAM,CAAC,OAAO,cAAc,CAAC,WAC5B,WAAW,GAAG,SAAS,aACrB,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,UACrE,gBAAgB;EAW7B;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa;;;;;;;;yBASlC,MAAM,UACX,MAAM,CAAC,OAAO,cAAc,CAAC,WAC5B,WAAW,GAAG,SAAS,aACrB,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,UACnE,gBAAgB;EAW7B"}
|
package/dist/tools/hoisted.d.ts
CHANGED
|
@@ -63,6 +63,19 @@ export declare function registerHoistedTools(pi: ExtensionAPI, ctx: PluginContex
|
|
|
63
63
|
* behavior without spinning up a real bridge.
|
|
64
64
|
*/
|
|
65
65
|
export declare function buildMutationResult(filePath: string, response: Record<string, unknown>): AgentToolResult<FileMutationDetails>;
|
|
66
|
+
/**
|
|
67
|
+
* Brace-aware split for OpenCode-style include args.
|
|
68
|
+
*
|
|
69
|
+
* Accepts:
|
|
70
|
+
* - "*.ts,*.tsx" (comma-separated includes)
|
|
71
|
+
* - "**\/*.{vue,ts,tsx}" (single glob with brace alternation)
|
|
72
|
+
* - "*.ts,**\/*.{vue,tsx}" (mix of both)
|
|
73
|
+
*
|
|
74
|
+
* A naive split-by-`,` would chop `*.{vue,ts}` into `*.{vue` + `ts}`,
|
|
75
|
+
* which then fails downstream globbing with
|
|
76
|
+
* `unclosed alternate group; missing '}'`.
|
|
77
|
+
*/
|
|
78
|
+
export declare function splitIncludeGlobs(include: string): string[];
|
|
66
79
|
/**
|
|
67
80
|
* Build the navigation footer for a `read` response. Mirrors the OpenCode
|
|
68
81
|
* plugin's helper of the same name. See packages/opencode-plugin/src/tools/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hoisted.d.ts","sourceRoot":"","sources":["../../src/tools/hoisted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAGlB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA2DjD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;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,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;CAC9B;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,gBAAgB,GACxB,IAAI,CAmLN;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,eAAe,CAAC,mBAAmB,CAAC,CAiFtC;
|
|
1
|
+
{"version":3,"file":"hoisted.d.ts","sourceRoot":"","sources":["../../src/tools/hoisted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAGlB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA2DjD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;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,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;CAC9B;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,gBAAgB,GACxB,IAAI,CAmLN;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,eAAe,CAAC,mBAAmB,CAAC,CAiFtC;AAgJD;;;;;;;;;;;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,CAgBR"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cortexkit/aft-pi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.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",
|
|
@@ -22,18 +22,18 @@
|
|
|
22
22
|
"prepublishOnly": "bun run build"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@cortexkit/aft-bridge": "0.
|
|
25
|
+
"@cortexkit/aft-bridge": "0.20.1",
|
|
26
26
|
"@sinclair/typebox": "^0.34.33",
|
|
27
27
|
"comment-json": "^5.0.0",
|
|
28
28
|
"diff": "^8.0.4",
|
|
29
29
|
"zod": "^4.1.8"
|
|
30
30
|
},
|
|
31
31
|
"optionalDependencies": {
|
|
32
|
-
"@cortexkit/aft-darwin-arm64": "0.
|
|
33
|
-
"@cortexkit/aft-darwin-x64": "0.
|
|
34
|
-
"@cortexkit/aft-linux-arm64": "0.
|
|
35
|
-
"@cortexkit/aft-linux-x64": "0.
|
|
36
|
-
"@cortexkit/aft-win32-x64": "0.
|
|
32
|
+
"@cortexkit/aft-darwin-arm64": "0.20.1",
|
|
33
|
+
"@cortexkit/aft-darwin-x64": "0.20.1",
|
|
34
|
+
"@cortexkit/aft-linux-arm64": "0.20.1",
|
|
35
|
+
"@cortexkit/aft-linux-x64": "0.20.1",
|
|
36
|
+
"@cortexkit/aft-win32-x64": "0.20.1"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@mariozechner/pi-coding-agent": "*",
|