@cortexkit/aft-pi 0.35.4 → 0.36.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":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AASpE,OAAO,EACL,KAAK,SAAS,EACd,aAAa,EAId,MAAM,aAAa,CAAC;AA8DrB,KAAK,mBAAmB,GAAG;IACzB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAC;AAEF,iBAAS,4BAA4B,CACnC,OAAO,EAAE,MAAM,mBAAmB,GAAG,SAAS,EAC9C,sBAAsB,GAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAgB,IAOrE,eAAe,MAAM,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyCjF;AA4DD,iBAAS,wBAAwB,CAC/B,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,iBAAiB,GAAG,UAAU,CAAC,GACtD,OAAO,CAGT;AAED,iBAAS,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG9E;AASD,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,MAAM,EAAE,IAAI,CAAC,OAAO,uBAAuB,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACnE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChB;AAED;;;;;;;;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,qBAAqB,EAAE,OAAO,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,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,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAwEA;AAED;;;;GAIG;AACH,yBAA+B,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqd9D;AAED,eAAO,MAAM,QAAQ;;;;;;CAMpB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AASpE,OAAO,EACL,KAAK,SAAS,EACd,aAAa,EAId,MAAM,aAAa,CAAC;AA8DrB,KAAK,mBAAmB,GAAG;IACzB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAC;AAEF,iBAAS,4BAA4B,CACnC,OAAO,EAAE,MAAM,mBAAmB,GAAG,SAAS,EAC9C,sBAAsB,GAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAgB,IAOrE,eAAe,MAAM,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyCjF;AA4DD,iBAAS,wBAAwB,CAC/B,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,iBAAiB,GAAG,UAAU,CAAC,GACtD,OAAO,CAGT;AAED,iBAAS,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG9E;AASD,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,MAAM,EAAE,IAAI,CAAC,OAAO,uBAAuB,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACnE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChB;AAED;;;;;;;;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,qBAAqB,EAAE,OAAO,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,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,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAwEA;AAED;;;;GAIG;AACH,yBAA+B,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2d9D;AAED,eAAO,MAAM,QAAQ;;;;;;CAMpB,CAAC"}
package/dist/index.js CHANGED
@@ -11678,9 +11678,6 @@ function error(message, meta) {
11678
11678
  var CONFLICT_HINT = `
11679
11679
 
11680
11680
  [Hint] Use aft_conflicts to see all conflict regions across files in a single call.`;
11681
- var GREP_HINT = `
11682
-
11683
- [Hint] Use the grep tool instead of bash for faster indexed search.`;
11684
11681
  function maybeAppendConflictsHint(output) {
11685
11682
  if (!output.includes("Automatic merge failed; fix conflicts"))
11686
11683
  return output;
@@ -11688,12 +11685,12 @@ function maybeAppendConflictsHint(output) {
11688
11685
  return output;
11689
11686
  return output + CONFLICT_HINT;
11690
11687
  }
11691
- function maybeAppendGrepHint(output, command) {
11692
- const probe = command !== undefined ? command : output.slice(0, 300).split(`
11693
- `)[0] ?? "";
11694
- if (!/\b(rg|grep)\s/.test(probe))
11695
- return output;
11696
- return output + GREP_HINT;
11688
+ // ../aft-bridge/dist/bash-timeout.js
11689
+ function resolveBashKillTimeout(modelTimeout, foregroundWaitMs) {
11690
+ if (modelTimeout !== undefined && modelTimeout >= foregroundWaitMs) {
11691
+ return modelTimeout;
11692
+ }
11693
+ return;
11697
11694
  }
11698
11695
  // ../aft-bridge/dist/bridge.js
11699
11696
  import { spawn } from "node:child_process";
@@ -12543,6 +12540,27 @@ class BinaryBridge {
12543
12540
  }
12544
12541
  }
12545
12542
  }
12543
+ // ../aft-bridge/dist/coerce.js
12544
+ function coerceStringArray(value) {
12545
+ if (Array.isArray(value)) {
12546
+ return value.filter((entry) => typeof entry === "string" && entry.length > 0);
12547
+ }
12548
+ if (typeof value === "string") {
12549
+ const trimmed = value.trim();
12550
+ if (trimmed.length === 0)
12551
+ return [];
12552
+ if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
12553
+ try {
12554
+ const parsed = JSON.parse(trimmed);
12555
+ if (Array.isArray(parsed)) {
12556
+ return parsed.filter((entry) => typeof entry === "string" && entry.length > 0);
12557
+ }
12558
+ } catch {}
12559
+ }
12560
+ return [value];
12561
+ }
12562
+ return [];
12563
+ }
12546
12564
  // ../aft-bridge/dist/downloader.js
12547
12565
  import { spawnSync } from "node:child_process";
12548
12566
  import { createHash, randomUUID } from "node:crypto";
@@ -14052,6 +14070,221 @@ function isProcessAlive(pid) {
14052
14070
  return true;
14053
14071
  }
14054
14072
  }
14073
+ // ../aft-bridge/dist/pipe-strip.js
14074
+ var NOISE_FILTERS = new Set(["grep", "rg", "head", "tail", "cat", "less", "more"]);
14075
+ var GREP_GUARD_FLAGS = new Set([
14076
+ "c",
14077
+ "count",
14078
+ "q",
14079
+ "quiet",
14080
+ "o",
14081
+ "only-matching",
14082
+ "l",
14083
+ "files-with-matches"
14084
+ ]);
14085
+ function maybeStripCompressorPipe(command, compressionEnabled) {
14086
+ if (!compressionEnabled)
14087
+ return { command, stripped: false };
14088
+ const chain = splitTopLevelAndChain(command);
14089
+ if (chain === null)
14090
+ return { command, stripped: false };
14091
+ const prefix = chain.slice(0, -1).map((segment) => segment.trim()).filter(Boolean);
14092
+ const pipeline3 = chain[chain.length - 1] ?? "";
14093
+ const stages = splitTopLevelPipeline(pipeline3);
14094
+ if (stages.length < 2)
14095
+ return { command, stripped: false };
14096
+ const firstStage = stages[0]?.trim() ?? "";
14097
+ if (!isCompressorHandledRunner(firstStage))
14098
+ return { command, stripped: false };
14099
+ const filterStages = stages.slice(1).map((stage) => stage.trim());
14100
+ for (const stage of filterStages) {
14101
+ if (!isPlainNoiseFilter(stage))
14102
+ return { command, stripped: false };
14103
+ }
14104
+ const filters = filterStages.join(" | ");
14105
+ const rebuilt = [...prefix, firstStage].join(" && ");
14106
+ return {
14107
+ command: rebuilt,
14108
+ stripped: true,
14109
+ note: `[AFT dropped \`| ${filters}\` (compressed:false to keep)]`
14110
+ };
14111
+ }
14112
+ function splitTopLevelAndChain(command) {
14113
+ const segments = [];
14114
+ let start = 0;
14115
+ let quote = null;
14116
+ let escaped = false;
14117
+ for (let index = 0;index < command.length; index++) {
14118
+ const char = command[index];
14119
+ const next = command[index + 1];
14120
+ if (escaped) {
14121
+ escaped = false;
14122
+ continue;
14123
+ }
14124
+ if (char === "\\" && quote !== "'") {
14125
+ escaped = true;
14126
+ continue;
14127
+ }
14128
+ if (quote) {
14129
+ if (char === quote)
14130
+ quote = null;
14131
+ continue;
14132
+ }
14133
+ if (char === "'" || char === '"') {
14134
+ quote = char;
14135
+ continue;
14136
+ }
14137
+ if (char === "&" && next === "&") {
14138
+ segments.push(command.slice(start, index));
14139
+ start = index + 2;
14140
+ index++;
14141
+ continue;
14142
+ }
14143
+ if (char === "|" && next === "|")
14144
+ return null;
14145
+ if (char === ";")
14146
+ return null;
14147
+ }
14148
+ segments.push(command.slice(start));
14149
+ return segments;
14150
+ }
14151
+ function splitTopLevelPipeline(command) {
14152
+ const stages = [];
14153
+ let start = 0;
14154
+ let quote = null;
14155
+ let escaped = false;
14156
+ for (let index = 0;index < command.length; index++) {
14157
+ const char = command[index];
14158
+ const next = command[index + 1];
14159
+ const previous = command[index - 1];
14160
+ if (escaped) {
14161
+ escaped = false;
14162
+ continue;
14163
+ }
14164
+ if (char === "\\" && quote !== "'") {
14165
+ escaped = true;
14166
+ continue;
14167
+ }
14168
+ if (quote) {
14169
+ if (char === quote)
14170
+ quote = null;
14171
+ continue;
14172
+ }
14173
+ if (char === "'" || char === '"') {
14174
+ quote = char;
14175
+ continue;
14176
+ }
14177
+ if (char === "|" && previous !== "|" && next !== "|") {
14178
+ stages.push(command.slice(start, index));
14179
+ start = index + 1;
14180
+ }
14181
+ }
14182
+ stages.push(command.slice(start));
14183
+ return stages;
14184
+ }
14185
+ function isCompressorHandledRunner(stage) {
14186
+ const tokens = tokenizeStage(stage);
14187
+ if (tokens.length === 0)
14188
+ return false;
14189
+ const [first, second, third] = tokens;
14190
+ if (!first)
14191
+ return false;
14192
+ if (tokens.some((token) => token === "&&" || token === "||" || token.includes(";"))) {
14193
+ return false;
14194
+ }
14195
+ if (first === "bun")
14196
+ return second === "test" || second === "run" && startsWithTest(third);
14197
+ if (first === "cargo")
14198
+ return ["test", "build", "check", "clippy"].includes(second ?? "");
14199
+ if (first === "go")
14200
+ return second === "test" || second === "build";
14201
+ if (["npm", "pnpm"].includes(first)) {
14202
+ return second === "test" || second === "run" && startsWithTest(third);
14203
+ }
14204
+ if (first === "yarn")
14205
+ return second === "test";
14206
+ if (first === "playwright")
14207
+ return second === "test";
14208
+ if (first === "npx")
14209
+ return ["tsc", "eslint", "vitest", "jest"].includes(second ?? "");
14210
+ return ["vitest", "jest", "pytest", "tsc", "eslint", "biome", "ruff", "mypy"].includes(first);
14211
+ }
14212
+ function startsWithTest(token) {
14213
+ return token?.startsWith("test") === true;
14214
+ }
14215
+ function isPlainNoiseFilter(stage) {
14216
+ const tokens = tokenizeStage(stage);
14217
+ const head = tokens[0];
14218
+ if (!head)
14219
+ return false;
14220
+ if (head === "wc")
14221
+ return false;
14222
+ if (!NOISE_FILTERS.has(head))
14223
+ return false;
14224
+ if ((head === "grep" || head === "rg") && hasIntentChangingGrepFlag(tokens.slice(1)))
14225
+ return false;
14226
+ return true;
14227
+ }
14228
+ function hasIntentChangingGrepFlag(args) {
14229
+ for (const arg of args) {
14230
+ if (arg === "--")
14231
+ return false;
14232
+ if (!arg.startsWith("-") || arg === "-")
14233
+ continue;
14234
+ if (arg.startsWith("--")) {
14235
+ const flag = arg.slice(2).split("=", 1)[0];
14236
+ if (GREP_GUARD_FLAGS.has(flag))
14237
+ return true;
14238
+ continue;
14239
+ }
14240
+ for (const flag of arg.slice(1)) {
14241
+ if (GREP_GUARD_FLAGS.has(flag))
14242
+ return true;
14243
+ }
14244
+ }
14245
+ return false;
14246
+ }
14247
+ function tokenizeStage(stage) {
14248
+ const tokens = [];
14249
+ let current = "";
14250
+ let quote = null;
14251
+ let escaped = false;
14252
+ for (let index = 0;index < stage.length; index++) {
14253
+ const char = stage[index];
14254
+ if (escaped) {
14255
+ current += char;
14256
+ escaped = false;
14257
+ continue;
14258
+ }
14259
+ if (char === "\\" && quote !== "'") {
14260
+ escaped = true;
14261
+ continue;
14262
+ }
14263
+ if (quote) {
14264
+ if (char === quote) {
14265
+ quote = null;
14266
+ } else {
14267
+ current += char;
14268
+ }
14269
+ continue;
14270
+ }
14271
+ if (char === "'" || char === '"') {
14272
+ quote = char;
14273
+ continue;
14274
+ }
14275
+ if (/\s/.test(char)) {
14276
+ if (current.length > 0) {
14277
+ tokens.push(current);
14278
+ current = "";
14279
+ }
14280
+ continue;
14281
+ }
14282
+ current += char;
14283
+ }
14284
+ if (current.length > 0)
14285
+ tokens.push(current);
14286
+ return tokens;
14287
+ }
14055
14288
  // ../aft-bridge/dist/pool.js
14056
14289
  import { realpathSync as realpathSync2 } from "node:fs";
14057
14290
  import { homedir as homedir6 } from "node:os";
@@ -14974,7 +15207,7 @@ import {
14974
15207
  // package.json
14975
15208
  var package_default = {
14976
15209
  name: "@cortexkit/aft-pi",
14977
- version: "0.35.4",
15210
+ version: "0.36.0",
14978
15211
  type: "module",
14979
15212
  description: "Pi coding agent extension for Agent File Tools (AFT) — tree-sitter and LSP-powered code analysis",
14980
15213
  main: "dist/index.js",
@@ -14997,7 +15230,7 @@ var package_default = {
14997
15230
  "test:unit": "bun test src/__tests__ --path-ignore-patterns 'src/__tests__/e2e/**'"
14998
15231
  },
14999
15232
  dependencies: {
15000
- "@cortexkit/aft-bridge": "0.35.4",
15233
+ "@cortexkit/aft-bridge": "0.36.0",
15001
15234
  "@xterm/headless": "^5.5.0",
15002
15235
  "comment-json": "^5.0.0",
15003
15236
  diff: "^8.0.4",
@@ -15005,12 +15238,12 @@ var package_default = {
15005
15238
  zod: "^4.1.8"
15006
15239
  },
15007
15240
  optionalDependencies: {
15008
- "@cortexkit/aft-darwin-arm64": "0.35.4",
15009
- "@cortexkit/aft-darwin-x64": "0.35.4",
15010
- "@cortexkit/aft-linux-arm64": "0.35.4",
15011
- "@cortexkit/aft-linux-x64": "0.35.4",
15012
- "@cortexkit/aft-win32-arm64": "0.35.4",
15013
- "@cortexkit/aft-win32-x64": "0.35.4"
15241
+ "@cortexkit/aft-darwin-arm64": "0.36.0",
15242
+ "@cortexkit/aft-darwin-x64": "0.36.0",
15243
+ "@cortexkit/aft-linux-arm64": "0.36.0",
15244
+ "@cortexkit/aft-linux-x64": "0.36.0",
15245
+ "@cortexkit/aft-win32-arm64": "0.36.0",
15246
+ "@cortexkit/aft-win32-x64": "0.36.0"
15014
15247
  },
15015
15248
  devDependencies: {
15016
15249
  "@earendil-works/pi-coding-agent": "*",
@@ -15351,6 +15584,15 @@ function resolveSessionId(extCtx) {
15351
15584
  const id = manager?.getSessionId?.();
15352
15585
  return typeof id === "string" && id.length > 0 ? id : undefined;
15353
15586
  }
15587
+
15588
+ class BridgeError extends Error {
15589
+ code;
15590
+ constructor(message, code) {
15591
+ super(message);
15592
+ this.name = "BridgeError";
15593
+ this.code = code;
15594
+ }
15595
+ }
15354
15596
  async function callBridge(bridge, command, params = {}, extCtx, options) {
15355
15597
  const timeoutMs = timeoutForCommand(command);
15356
15598
  const merged = { ...params };
@@ -15365,7 +15607,7 @@ async function callBridge(bridge, command, params = {}, extCtx, options) {
15365
15607
  };
15366
15608
  const response = await bridge.send(command, merged, Object.keys(sendOptions).length > 0 ? sendOptions : undefined);
15367
15609
  if (response.success === false) {
15368
- throw new Error(formatBridgeErrorMessage(command, response, merged));
15610
+ throw new BridgeError(formatBridgeErrorMessage(command, response, merged), typeof response.code === "string" ? response.code : "");
15369
15611
  }
15370
15612
  ingestBgCompletions(sessionId, response.bg_completions);
15371
15613
  return response;
@@ -32752,6 +32994,15 @@ var FOREGROUND_POLL_INTERVAL_MS = 100;
32752
32994
  var BASH_WAIT_POLL_INTERVAL_MS = 100;
32753
32995
  var DEFAULT_BASH_STATUS_WAIT_TIMEOUT_MS = 30000;
32754
32996
  var MAX_BASH_STATUS_WAIT_TIMEOUT_MS = 300000;
32997
+ function resolveForegroundWaitMs(configured) {
32998
+ const override = process.env.AFT_TEST_FOREGROUND_WAIT_MS;
32999
+ if (override !== undefined) {
33000
+ const parsed = Number(override);
33001
+ if (Number.isFinite(parsed) && parsed >= 0)
33002
+ return parsed;
33003
+ }
33004
+ return configured;
33005
+ }
32755
33006
  var BASH_TRANSPORT_TIMEOUT_MS = 30000;
32756
33007
  var BashParams = Type4.Object({
32757
33008
  command: Type4.String({
@@ -32858,11 +33109,13 @@ function registerBashTool(pi, ctx) {
32858
33109
  parameters: BashParams,
32859
33110
  async execute(_toolCallId, params, _signal, onUpdate, extCtx) {
32860
33111
  const bridge = bridgeFor(ctx, extCtx.cwd);
32861
- const foregroundWaitMs = resolveBashConfig(ctx.config).foreground_wait_window_ms;
33112
+ const bashCfg = resolveBashConfig(ctx.config);
33113
+ const foregroundWaitMs = resolveForegroundWaitMs(bashCfg.foreground_wait_window_ms);
32862
33114
  const timeout = coerceOptionalInt(params.timeout, "timeout", 1, Number.MAX_SAFE_INTEGER);
32863
33115
  const ptyRows = coerceOptionalInt(params.ptyRows, "ptyRows", 1, 60);
32864
33116
  const ptyCols = coerceOptionalInt(params.ptyCols, "ptyCols", 1, 140);
32865
33117
  const effectiveBackground = params.background === true || params.pty === true;
33118
+ const effectiveTimeout = effectiveBackground ? timeout : resolveBashKillTimeout(timeout, foregroundWaitMs);
32866
33119
  let spawnContext = {
32867
33120
  command: params.command,
32868
33121
  cwd: params.workdir
@@ -32874,10 +33127,13 @@ function registerBashTool(pi, ctx) {
32874
33127
  throw new Error(`BashSpawnHook failed: ${hookErr instanceof Error ? hookErr.message : String(hookErr)}`);
32875
33128
  }
32876
33129
  }
33130
+ const compressionEnabled = bashCfg.compress && params.compressed !== false;
33131
+ const pipeStrip = maybeStripCompressorPipe(spawnContext.command, compressionEnabled);
33132
+ const bridgeCommand = pipeStrip.command;
32877
33133
  let streamed = "";
32878
33134
  const response = await callBashBridge(bridge, "bash", {
32879
- command: spawnContext.command,
32880
- timeout,
33135
+ command: bridgeCommand,
33136
+ timeout: effectiveTimeout,
32881
33137
  workdir: spawnContext.cwd ?? params.workdir,
32882
33138
  env: spawnContext.env,
32883
33139
  description: params.description,
@@ -32910,7 +33166,7 @@ function registerBashTool(pi, ctx) {
32910
33166
  task_id: taskId
32911
33167
  });
32912
33168
  }
32913
- const waitTimeoutMs = timeout !== undefined ? Math.min(timeout, foregroundWaitMs) : foregroundWaitMs;
33169
+ const waitTimeoutMs = effectiveTimeout !== undefined ? Math.min(effectiveTimeout, foregroundWaitMs) : foregroundWaitMs;
32914
33170
  const startedAt = Date.now();
32915
33171
  while (true) {
32916
33172
  const status = await callBashBridge(bridge, "bash_status", { task_id: taskId }, extCtx);
@@ -32918,7 +33174,7 @@ function registerBashTool(pi, ctx) {
32918
33174
  throw new Error(status.message ?? "bash_status failed");
32919
33175
  }
32920
33176
  if (isTerminalStatus(status.status)) {
32921
- return bashResult(withBashHints(formatForegroundResult(status), params.command), {
33177
+ return bashResult(appendPipeStripNote(withBashHints(formatForegroundResult(status)), pipeStrip.note), {
32922
33178
  exit_code: status.exit_code,
32923
33179
  duration_ms: status.duration_ms,
32924
33180
  truncated: status.output_truncated,
@@ -32932,7 +33188,7 @@ function registerBashTool(pi, ctx) {
32932
33188
  throw new Error(promoted.message ?? "bash_promote failed");
32933
33189
  }
32934
33190
  trackBgTask(resolveSessionId(extCtx), taskId);
32935
- return bashResult(formatPromotionMessage(taskId, params.timeout, foregroundWaitMs), {
33191
+ return bashResult(formatPromotionMessage(taskId, effectiveTimeout, foregroundWaitMs), {
32936
33192
  task_id: taskId
32937
33193
  });
32938
33194
  }
@@ -32947,7 +33203,7 @@ function registerBashTool(pi, ctx) {
32947
33203
  task_id: taskId
32948
33204
  };
32949
33205
  const output = response.output ?? "";
32950
- return bashResult(withBashHints(output, params.command), details);
33206
+ return bashResult(appendPipeStripNote(withBashHints(output), pipeStrip.note), details);
32951
33207
  },
32952
33208
  renderCall(args, theme, context) {
32953
33209
  return renderBashCall(args?.command, args?.description, theme, context);
@@ -32961,6 +33217,11 @@ function registerBashTool(pi, ctx) {
32961
33217
  pi.registerTool(createBashWriteTool(ctx));
32962
33218
  pi.registerTool(createBashKillTool(ctx));
32963
33219
  }
33220
+ function appendPipeStripNote(output, note) {
33221
+ return note ? `${output}
33222
+
33223
+ ${note}` : output;
33224
+ }
32964
33225
  function formatBackgroundLaunch(taskId, isPty) {
32965
33226
  if (isPty) {
32966
33227
  return `PTY task started: ${taskId}. Use bash_status({ task_id: "${taskId}", output_mode: "screen" }) to see the visible terminal, bash_write({ task_id: "${taskId}", input: ... }) to send keystrokes. A completion reminder fires automatically when the task exits.`;
@@ -32974,10 +33235,8 @@ function formatPromotionMessage(taskId, timeout, waitWindowMs) {
32974
33235
  function formatSeconds(ms) {
32975
33236
  return `${Number((ms / 1000).toFixed(1))}s`;
32976
33237
  }
32977
- function withBashHints(output, command) {
32978
- let result = maybeAppendConflictsHint(output);
32979
- result = maybeAppendGrepHint(result, command);
32980
- return result;
33238
+ function withBashHints(output) {
33239
+ return maybeAppendConflictsHint(output);
32981
33240
  }
32982
33241
  function formatForegroundResult(data) {
32983
33242
  const output = data.output_preview ?? "";
@@ -33022,7 +33281,7 @@ function createBashWatchTool(ctx) {
33022
33281
  return {
33023
33282
  name: "bash_watch",
33024
33283
  label: "bash_watch",
33025
- description: "Block on a background bash task until a pattern matches, it exits, or timeout elapses; or register an async pattern notification with background:true.",
33284
+ description: "Watch a background bash task. Two modes. Async (background:true, requires pattern) registers a non-blocking notification and returns immediately — use this to be pinged when a specific line appears or the task exits, without freezing your turn. Sync (default) blocks until a pattern matches/the task exits/timeout, and is ONLY for short bounded waits (seconds, e.g. a dev server printing a readiness line). Do NOT sync-wait for a long task (build/test/install): blocking locks the user out until it ends — instead end your turn and let the automatic completion reminder arrive, or use async mode.",
33026
33285
  promptSnippet: "Wait for or watch a background bash task",
33027
33286
  parameters: BashWatchParams,
33028
33287
  async execute(_toolCallId, params, _signal, _onUpdate, extCtx) {
@@ -33289,7 +33548,7 @@ ${formatWaitSummary(details.waited, details)}`;
33289
33548
  } else {
33290
33549
  if (isTerminalStatus(details.status) && details.output_preview) {
33291
33550
  text += `
33292
- ${details.output_preview.slice(0, 2000)}`;
33551
+ ${details.output_preview}`;
33293
33552
  }
33294
33553
  if (!isTerminalStatus(details.status)) {
33295
33554
  text += `
@@ -33365,12 +33624,7 @@ ${theme.fg("error", errorText || "bash failed")}`);
33365
33624
  const rawOutput = result.content.filter((c) => c.type === "text").map((c) => c.text ?? "").join(`
33366
33625
  `).trim();
33367
33626
  if (rawOutput) {
33368
- const lines = rawOutput.split(`
33369
- `);
33370
- const preview = lines.length > 25 ? `... (${lines.length - 25} lines omitted)
33371
- ${lines.slice(-25).join(`
33372
- `)}` : rawOutput;
33373
- container.addChild(new Text3(preview, 1, 0));
33627
+ container.addChild(new Text3(rawOutput, 1, 0));
33374
33628
  container.addChild(new Spacer3(1));
33375
33629
  }
33376
33630
  if (exitCode !== undefined) {
@@ -33528,7 +33782,11 @@ function registerFsTools(pi, ctx, surface) {
33528
33782
  description: "Delete one or more files (or directories) with backup. Each file is backed up before deletion — use `aft_safety undo` to recover any of them. " + "For directories, every file inside is individually backed up before removal. Directory deletion requires recursive: true. " + "Returns { success, complete, deleted, skipped_files }: partial success is allowed; files that fail are reported in skipped_files.",
33529
33783
  parameters: DeleteParams,
33530
33784
  async execute(_toolCallId, params, _signal, _onUpdate, extCtx) {
33531
- const files = await Promise.all(params.files.map((file2) => resolvePathArg(extCtx.cwd, file2)));
33785
+ const inputs = coerceStringArray(params.files);
33786
+ if (inputs.length === 0) {
33787
+ throw new Error("delete: `files` must be a non-empty array of paths");
33788
+ }
33789
+ const files = await Promise.all(inputs.map((file2) => resolvePathArg(extCtx.cwd, file2)));
33532
33790
  const checked = new Set;
33533
33791
  for (const file2 of files) {
33534
33792
  if (checked.has(file2))
@@ -33551,7 +33809,7 @@ function registerFsTools(pi, ctx, surface) {
33551
33809
  ` + skipped.map((entry) => ` ${entry.file}: ${entry.reason}`).join(`
33552
33810
  `));
33553
33811
  }
33554
- const summary = deleted.length === 1 && skipped.length === 0 ? `Deleted ${deleted[0]}` : `Deleted ${deleted.length}/${params.files.length} file(s)`;
33812
+ const summary = deleted.length === 1 && skipped.length === 0 ? `Deleted ${deleted[0]}` : `Deleted ${deleted.length}/${inputs.length} file(s)`;
33555
33813
  return textResult(summary, {
33556
33814
  success: true,
33557
33815
  complete: skipped.length === 0,
@@ -34007,6 +34265,7 @@ function registerInspectTool(pi, ctx) {
34007
34265
  // src/tools/navigate.ts
34008
34266
  import { StringEnum as StringEnum3 } from "@earendil-works/pi-ai";
34009
34267
  import { Type as Type9 } from "typebox";
34268
+ var CALLGRAPH_SOFT_CODES = new Set(["symbol_not_found", "callgraph_building"]);
34010
34269
  function navigateParamsSchema() {
34011
34270
  return Type9.Object({
34012
34271
  op: StringEnum3(["call_tree", "callers", "trace_to", "trace_to_symbol", "impact", "trace_data"], {
@@ -34218,8 +34477,15 @@ function registerNavigateTool(pi, ctx) {
34218
34477
  req.toSymbol = params.toSymbol;
34219
34478
  if (toFile !== undefined)
34220
34479
  req.toFile = toFile;
34221
- const response = await callBridge(bridge, params.op, req, extCtx);
34222
- return textResult(JSON.stringify(response, null, 2));
34480
+ try {
34481
+ const response = await callBridge(bridge, params.op, req, extCtx);
34482
+ return textResult(JSON.stringify(response, null, 2));
34483
+ } catch (error50) {
34484
+ if (error50 instanceof BridgeError && CALLGRAPH_SOFT_CODES.has(error50.code)) {
34485
+ return textResult(error50.message);
34486
+ }
34487
+ throw error50;
34488
+ }
34223
34489
  },
34224
34490
  renderCall(args, theme, context) {
34225
34491
  return renderNavigateCall(args, theme, context);
@@ -34904,7 +35170,8 @@ function registerSafetyTool(pi, ctx) {
34904
35170
  throw new Error(`op='${params.op}' requires 'name'`);
34905
35171
  }
34906
35172
  const filePath = params.filePath ? await resolvePathArg(extCtx.cwd, params.filePath) : undefined;
34907
- const files = params.files ? await Promise.all(params.files.map((file2) => resolvePathArg(extCtx.cwd, file2))) : undefined;
35173
+ const fileInputs = coerceStringArray(params.files);
35174
+ const files = fileInputs.length > 0 ? await Promise.all(fileInputs.map((file2) => resolvePathArg(extCtx.cwd, file2))) : undefined;
34908
35175
  const bridge = bridgeFor(ctx, extCtx.cwd);
34909
35176
  const restrictToProjectRoot = ctx.config.restrict_to_project_root ?? false;
34910
35177
  if (params.op === "undo") {
@@ -35289,17 +35556,17 @@ function buildWorkflowHints(opts) {
35289
35556
  const hasSearch = opts.toolSurface !== "minimal" && opts.semanticEnabled && !opts.absentTools.has("aft_search");
35290
35557
  const hasNavigate = opts.toolSurface === "all" && !opts.absentTools.has("aft_callgraph");
35291
35558
  const hasInspect = opts.toolSurface !== "minimal" && !opts.absentTools.has("aft_inspect");
35292
- const hasBgBash = opts.bashBackgroundEnabled && !opts.absentTools.has(bashName) && !opts.absentTools.has("bash_status");
35559
+ const hasBash = !opts.absentTools.has(bashName);
35560
+ const hasBgBash = opts.bashBackgroundEnabled && hasBash && !opts.absentTools.has("bash_status");
35561
+ if (hasBash && opts.bashCompressionEnabled) {
35562
+ sections.push("When AFT bash output compression is on, do NOT pipe test/build commands through grep/head/tail (e.g. `bun test | grep fail`) to summarize. The compressor already keeps failures and the summary; piping hides failures. Run the command bare.");
35563
+ }
35293
35564
  if (hasOutline && hasZoom) {
35294
35565
  sections.push(`**Web/URL access**: \`aft_outline({ target: "<url>" })\` first for structure, then \`aft_zoom({ url: "<url>", symbols: "<heading>" })\` for the specific section.`);
35295
35566
  }
35296
35567
  if (hasOutline && hasZoom && (hasGrep || hasSearch)) {
35297
- if (hasSearch) {
35298
- const grepFallback = hasGrep ? ` Use \`${grepName}\` directly only when you need exhaustive enumeration of literal text (every TODO, every import of X) without ranking.` : "";
35299
- sections.push(`**Code exploration**: \`aft_search\` is the primary code-search tool. It auto-routes by query shape — exact identifiers, regex, error messages, natural language all use the same call. Very short queries fall back to literal scans; pass \`hint: "regex"\` / \`hint: "literal"\` / \`hint: "semantic"\` to override routing if needed. Then \`aft_outline\` for structure → \`aft_zoom\` for symbol(s).${grepFallback}`);
35300
- } else {
35301
- sections.push(`**Code exploration**: \`${grepName}\` to locate → \`aft_outline\` for structure → \`aft_zoom\` for symbol(s).`);
35302
- }
35568
+ const locate = hasSearch ? '`aft_search` is the primary code-search tool: one call auto-routes concepts, identifiers, regex, error strings, and literals (pass `hint: "regex"`/`"literal"`/`"semantic"` to force a lane).' : `\`${grepName}\` (the tool — indexed and ranked) locates code.`;
35569
+ sections.push(`**Code exploration**: fire independent lookups in ONE parallel tool-call wave — do NOT serialize them. ${locate} Then \`aft_outline\` for structure \`aft_zoom\` for symbol(s). DO NOT run \`grep\`/\`rg\`/\`find\` through \`bash\` to locate code — the bash path is unindexed, unranked, serial, and routinely surfaces the wrong hit. Keep \`bash\` for shell facts (git state, file metadata, processes).`);
35303
35570
  }
35304
35571
  if (hasInspect) {
35305
35572
  sections.push("**Codebase health & diagnostics**: AFT does not surface compile/type errors automatically after edits — pull them with `aft_inspect`. Run it after a batch of edits and before you run tests or commit, when starting in unfamiliar code, or before a refactor/review. One call summarizes diagnostics (compile/type errors), TODOs, metrics, dead code, unused exports, and duplicates; pass `sections` for focused drill-down and `scope` to actively pull diagnostics for a specific file or directory. Its diagnostics are a fast checkpoint, not the authority — a clean `tsc` / `cargo check` / `pyright` run is the real gate. Treat `stale_categories` as a genuine stale-cache signal while an async Tier 2 refresh catches up.");
@@ -35317,12 +35584,13 @@ function buildWorkflowHints(opts) {
35317
35584
  `));
35318
35585
  }
35319
35586
  if (hasBgBash) {
35320
- sections.push(`**Long-running commands** (builds, installs, full test suites): \`${bashName}({ background: true })\` returns immediately with a \`task_id\`. A completion reminder is delivered automatically do not poll \`bash_status({ task_id })\`. Use \`bash_status\` only after the reminder arrives, or to inspect a task you already know is complete.`);
35587
+ sections.push(`**Long-running commands** (builds, installs, full test suites): \`${bashName}({ background: true })\` returns immediately with a \`task_id\`, then **end your turn** — a completion reminder arrives automatically when it finishes. Do not poll \`bash_status({ task_id })\`, and do not sync-wait with \`bash_watch\` for a long task: blocking freezes your turn and locks the user out until it ends. For an early non-blocking ping on a specific output line, register an async watch \`bash_watch({ task_id, pattern, background: true })\`. \`bash_watch\` synchronous mode is only for short bounded waits (seconds, e.g. a dev server printing a readiness line), never for multi-minute jobs.`);
35321
35588
  sections.push(`**PTY / interactive commands**: PTY mode is for interactive REPLs and terminal apps (python, node, bash itself, vim). Start with \`${bashName}({ command: "python", pty: true, background: true })\`, read the screen with \`bash_status({ task_id, output_mode: "screen" })\`, and send input with \`bash_write({ task_id, input: "..." })\`.`);
35322
35589
  }
35323
35590
  if (sections.length === 0) {
35324
35591
  return null;
35325
35592
  }
35593
+ sections.unshift("**Parallel tool calls**: when several read-only operations are independent, emit them in ONE response instead of serializing — file reads, structure and symbol lookups, code search, diagnostics, and git status/diff/log. Sequence only when a call depends on a prior result or when a command mutates state.");
35326
35594
  return `${HEADING}
35327
35595
 
35328
35596
  ${sections.join(`
@@ -35335,6 +35603,7 @@ function buildHintsFromConfig(config2, absentTools, hoistBuiltins) {
35335
35603
  hoistBuiltins,
35336
35604
  semanticEnabled: config2.semantic_search === true,
35337
35605
  bashBackgroundEnabled: resolveBashConfig(config2).background,
35606
+ bashCompressionEnabled: resolveBashConfig(config2).compress,
35338
35607
  absentTools
35339
35608
  });
35340
35609
  }
@@ -35413,12 +35682,12 @@ var PLUGIN_VERSION = (() => {
35413
35682
  return "0.0.0";
35414
35683
  }
35415
35684
  })();
35416
- var ANNOUNCEMENT_VERSION = "0.35.3";
35685
+ var ANNOUNCEMENT_VERSION = "0.36.0";
35417
35686
  var ANNOUNCEMENT_FEATURES = [
35418
- "Code Health in `/aft-status`: live LSP errors and warnings plus duplicate and TODO counts.",
35419
- "The semantic index now recovers on its own from a transient embedding-backend blip (a restarted local server, or a model still loading) instead of getting stuck on `failed`.",
35420
- "Fixed a background codebase-scan crash on very deep or minified files.",
35421
- "More reliable LSP auto-install when a parent directory has its own `package.json`."
35687
+ "Persisted call graph: dead-code analysis runs on large repositories again (the file-count cap is gone), `aft_callgraph` queries resolve from disk, and method-call edges are more accurate across more languages.",
35688
+ "Bash output stops hiding failures: piping a test/build through `grep`/`head` with compression on now keeps the failures and summary instead of stripping them.",
35689
+ "Code search steering: guidance and hints now point to `aft_search` and parallel `aft_*` tools instead of `grep`/`find` in bash.",
35690
+ "Fixes: a small `timeout` no longer kills a foreground `bash` command (#102), and `aft_delete`/`aft_safety checkpoint` no longer crash on a mistyped `files` argument."
35422
35691
  ];
35423
35692
  var ANNOUNCEMENT_FOOTER = "Join us on Discord: https://discord.gg/DSa65w8wuf";
35424
35693
  var ALL_ONLY_TOOLS = new Set([
@@ -35702,6 +35971,7 @@ ${lines}
35702
35971
  };
35703
35972
  pool = new BridgePool(binaryPath, poolOptions, configOverrides);
35704
35973
  pool.setConfigureOverride("harness", "pi");
35974
+ pool.setConfigureOverride("aft_search_registered", resolveToolSurface(config2).semantic);
35705
35975
  const ctx = { pool, config: config2, storageDir };
35706
35976
  if (onnxRuntimePromise) {
35707
35977
  onnxRuntimePromise.then((ortDylibDir) => {
@@ -46,7 +46,16 @@ export declare function bridgeFor(ctx: PluginContext, cwd: string): BinaryBridge
46
46
  */
47
47
  export declare function resolveSessionId(extCtx: ExtensionContext): string | undefined;
48
48
  /**
49
- * Call a bridge command and throw a plain Error on failure.
49
+ * Error thrown by callBridge on a `success: false` response. Carries the Rust
50
+ * error `code` so callers can distinguish soft negatives (e.g. symbol_not_found)
51
+ * from genuine errors without re-parsing the message.
52
+ */
53
+ export declare class BridgeError extends Error {
54
+ readonly code: string;
55
+ constructor(message: string, code: string);
56
+ }
57
+ /**
58
+ * Call a bridge command and throw a BridgeError on failure.
50
59
  * Every tool handler should guard with `if (response.success === false)`
51
60
  * before accessing success-only fields — this helper does it uniformly.
52
61
  *
@@ -1 +1 @@
1
- {"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../src/tools/_shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,8BACC,CAAC;AAExD,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,OAAO,EACV,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAWpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMpD;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASlE,CAAC;AAEF,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErE;AA2BD,8EAA8E;AAC9E,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,MAAM,CAsDR;AAsBD,gEAAgE;AAChE,wBAAgB,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAEvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAK7E;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,MAAM,CAAC,EAAE,gBAAgB,EACzB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAsBlC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,GAAG,OAAO,EAC3C,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,QAAQ,GACjB,eAAe,CAAC,QAAQ,CAAC,CAK3B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,GAAG,OAAO,EAC/C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,QAAQ,GACjB,eAAe,CAAC,QAAQ,CAAC,CAE3B;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGvF"}
1
+ {"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../src/tools/_shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,8BACC,CAAC;AAExD,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,OAAO,EACV,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAWpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMpD;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASlE,CAAC;AAEF,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErE;AA2BD,8EAA8E;AAC9E,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,MAAM,CAsDR;AAsBD,gEAAgE;AAChE,wBAAgB,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAEvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAK7E;AAED;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAK1C;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,MAAM,CAAC,EAAE,gBAAgB,EACzB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAyBlC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,GAAG,OAAO,EAC3C,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,QAAQ,GACjB,eAAe,CAAC,QAAQ,CAAC,CAK3B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,GAAG,OAAO,EAC/C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,QAAQ,GACjB,eAAe,CAAC,QAAQ,CAAC,CAE3B;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGvF"}
@@ -1 +1 @@
1
- {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAEjB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAiB5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAkFjD,QAAA,MAAM,cAAc;;EAIlB,CAAC;AAEH,QAAA,MAAM,gBAAgB;;;EAUpB,CAAC;AAEH,QAAA,MAAM,eAAe;;;;;;;;EAQnB,CAAC;AAEH,QAAA,MAAM,eAAe;;;;;EA+BnB,CAAC;AAWH,UAAU,gBAAgB;IACxB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,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;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,gBAAiB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAAG;AAoD7D,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CA4K3E;AAiED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;yBASpC,MAAM,UACX,MAAM,CAAC,OAAO,gBAAgB,CAAC,WAC9B,WAAW,GAAG,SAAS,aACrB,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,UACrE,gBAAgB;EAc7B;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;;;;;;yBASnC,MAAM,UACX,MAAM,CAAC,OAAO,eAAe,CAAC,WAC7B,WAAW,GAAG,SAAS,aACrB,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,UACpE,gBAAgB;EA2D7B;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;;;yBAanC,MAAM,UACX,MAAM,CAAC,OAAO,eAAe,CAAC,WAC7B,WAAW,GAAG,SAAS,aACrB,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,UACpE,gBAAgB;EAe7B;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;EAe7B"}
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAEjB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAiB5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgGjD,QAAA,MAAM,cAAc;;EAIlB,CAAC;AAEH,QAAA,MAAM,gBAAgB;;;EAUpB,CAAC;AAEH,QAAA,MAAM,eAAe;;;;;;;;EAQnB,CAAC;AAEH,QAAA,MAAM,eAAe;;;;;EA+BnB,CAAC;AAWH,UAAU,gBAAgB;IACxB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,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;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,gBAAiB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAAG;AAoD7D,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAgM3E;AAsED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;yBASpC,MAAM,UACX,MAAM,CAAC,OAAO,gBAAgB,CAAC,WAC9B,WAAW,GAAG,SAAS,aACrB,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,UACrE,gBAAgB;EAc7B;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;;;;;;yBASnC,MAAM,UACX,MAAM,CAAC,OAAO,eAAe,CAAC,WAC7B,WAAW,GAAG,SAAS,aACrB,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,UACpE,gBAAgB;EA2D7B;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;;;yBAanC,MAAM,UACX,MAAM,CAAC,OAAO,eAAe,CAAC,WAC7B,WAAW,GAAG,SAAS,aACrB,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,UACpE,gBAAgB;EAe7B;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;EAe7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/tools/fs.ts"],"names":[],"mappings":"AAAA;;;GAGG;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;AAGjD,OAAO,EAEL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAE7B,QAAA,MAAM,YAAY;;;EAWhB,CAAC;AAEH,QAAA,MAAM,UAAU;;;EAOd,CAAC;AAEH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wCAAwC;AACxC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,YAAY,GAAG,UAAU,EACnC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,EAC7D,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAkB3B;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,YAAY,GAAG,UAAU,EACnC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,EAC7D,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAsC3B;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,CAoH9F"}
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/tools/fs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,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;AAGjD,OAAO,EAEL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAE7B,QAAA,MAAM,YAAY;;;EAWhB,CAAC;AAEH,QAAA,MAAM,UAAU;;;EAOd,CAAC;AAEH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wCAAwC;AACxC,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,YAAY,GAAG,UAAU,EACnC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,EAC7D,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAkB3B;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,YAAY,GAAG,UAAU,EACnC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,EAC7D,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAsC3B;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,CAyH9F"}
@@ -1 +1 @@
1
- {"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,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;AAUjD,OAAO,EAQL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAE7B,iBAAS,oBAAoB;;;;;;;;GA4B5B;AAED,KAAK,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;AA6CpE,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CAoHV;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,yCAU9F;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAO3B;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAsD/E"}
1
+ {"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,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;AAWjD,OAAO,EAQL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAS7B,iBAAS,oBAAoB;;;;;;;;GA4B5B;AAED,KAAK,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;AA6CpE,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CAoHV;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,yCAU9F;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAO3B;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAkE/E"}
@@ -1 +1 @@
1
- {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/tools/safety.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,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;AAGjD,OAAO,EAQL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAQ7B,QAAA,MAAM,YAAY;;;;;EAkBhB,CAAC;AAEH,wCAAwC;AACxC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CA4EV;AAED,wCAAwC;AACxC,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAO3B;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAO3B;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAiG7E"}
1
+ {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/tools/safety.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,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;AAGjD,OAAO,EAQL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAQ7B,QAAA,MAAM,YAAY;;;;;EAkBhB,CAAC;AAEH,wCAAwC;AACxC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CA4EV;AAED,wCAAwC;AACxC,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAO3B;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAO3B;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAqG7E"}
@@ -5,6 +5,7 @@ export interface WorkflowHintsOpts {
5
5
  hoistBuiltins: boolean;
6
6
  semanticEnabled: boolean;
7
7
  bashBackgroundEnabled: boolean;
8
+ bashCompressionEnabled: boolean;
8
9
  /** Set of tool names KNOWN-ABSENT from the registered surface. */
9
10
  absentTools: Set<string>;
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-hints.d.ts","sourceRoot":"","sources":["../src/workflow-hints.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,SAAS,GAAG,aAAa,GAAG,KAAK,CAAC;IAC/C,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CA+EzE;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,aAAa,EAAE,OAAO,GACrB,MAAM,GAAG,IAAI,CAYf;AAMD,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,gBAAgB,GACxB,IAAI,CA+BN"}
1
+ {"version":3,"file":"workflow-hints.d.ts","sourceRoot":"","sources":["../src/workflow-hints.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,SAAS,GAAG,aAAa,GAAG,KAAK,CAAC;IAC/C,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kEAAkE;IAClE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAyFzE;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,aAAa,EAAE,OAAO,GACrB,MAAM,GAAG,IAAI,CAaf;AAMD,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,gBAAgB,GACxB,IAAI,CA+BN"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cortexkit/aft-pi",
3
- "version": "0.35.4",
3
+ "version": "0.36.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,7 +23,7 @@
23
23
  "test:unit": "bun test src/__tests__ --path-ignore-patterns 'src/__tests__/e2e/**'"
24
24
  },
25
25
  "dependencies": {
26
- "@cortexkit/aft-bridge": "0.35.4",
26
+ "@cortexkit/aft-bridge": "0.36.0",
27
27
  "@xterm/headless": "^5.5.0",
28
28
  "comment-json": "^5.0.0",
29
29
  "diff": "^8.0.4",
@@ -31,12 +31,12 @@
31
31
  "zod": "^4.1.8"
32
32
  },
33
33
  "optionalDependencies": {
34
- "@cortexkit/aft-darwin-arm64": "0.35.4",
35
- "@cortexkit/aft-darwin-x64": "0.35.4",
36
- "@cortexkit/aft-linux-arm64": "0.35.4",
37
- "@cortexkit/aft-linux-x64": "0.35.4",
38
- "@cortexkit/aft-win32-arm64": "0.35.4",
39
- "@cortexkit/aft-win32-x64": "0.35.4"
34
+ "@cortexkit/aft-darwin-arm64": "0.36.0",
35
+ "@cortexkit/aft-darwin-x64": "0.36.0",
36
+ "@cortexkit/aft-linux-arm64": "0.36.0",
37
+ "@cortexkit/aft-linux-x64": "0.36.0",
38
+ "@cortexkit/aft-win32-arm64": "0.36.0",
39
+ "@cortexkit/aft-win32-x64": "0.36.0"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@earendil-works/pi-coding-agent": "*",