@cortexkit/aft-pi 0.31.0 → 0.32.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":"status-dialog.d.ts","sourceRoot":"","sources":["../../src/dialogs/status-dialog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAUpG,OAAO,EACL,KAAK,iBAAiB,EAGtB,KAAK,iBAAiB,EAEvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,uBAAuB,EAC/B,SAAS,EAAE,aAAa,GACvB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAyOD,wBAAgB,8BAA8B,CAC5C,CAAC,EAAE,iBAAiB,GAAG,IAAI,EAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAEV;AAkBD,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,EAAE,CAShG"}
1
+ {"version":3,"file":"status-dialog.d.ts","sourceRoot":"","sources":["../../src/dialogs/status-dialog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAUpG,OAAO,EACL,KAAK,iBAAiB,EAKtB,KAAK,iBAAiB,EAEvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjD,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,uBAAuB,EAC/B,SAAS,EAAE,aAAa,GACvB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAqPD,wBAAgB,8BAA8B,CAC5C,CAAC,EAAE,iBAAiB,GAAG,IAAI,EAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAEV;AAkBD,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,EAAE,CAShG"}
package/dist/index.js CHANGED
@@ -13035,7 +13035,7 @@ async function ensureStorageMigrated(opts) {
13035
13035
  import { execFileSync } from "node:child_process";
13036
13036
  import { createHash as createHash2 } from "node:crypto";
13037
13037
  import { chmodSync as chmodSync3, closeSync as closeSync2, copyFileSync as copyFileSync2, createWriteStream as createWriteStream2, existsSync as existsSync5, lstatSync, mkdirSync as mkdirSync5, openSync as openSync2, readdirSync, readFileSync as readFileSync3, readlinkSync, realpathSync, rmSync as rmSync2, statSync as statSync2, symlinkSync, unlinkSync as unlinkSync2, writeFileSync as writeFileSync2 } from "node:fs";
13038
- import { basename, dirname as dirname3, join as join6, relative, resolve } from "node:path";
13038
+ import { basename, dirname as dirname3, isAbsolute, join as join6, relative, resolve, win32 } from "node:path";
13039
13039
  import { Readable as Readable2 } from "node:stream";
13040
13040
  import { pipeline as pipeline2 } from "node:stream/promises";
13041
13041
  var ORT_VERSION = "1.24.4";
@@ -13238,6 +13238,29 @@ function isOnnxVersionCompatible(version) {
13238
13238
  return false;
13239
13239
  return minor >= REQUIRED_ORT_MIN_MINOR;
13240
13240
  }
13241
+ function pathEnvValue() {
13242
+ return process.env.PATH ?? process.env.Path ?? process.env.path ?? "";
13243
+ }
13244
+ function pathEntriesForPlatform() {
13245
+ const delimiter = process.platform === "win32" ? ";" : ":";
13246
+ return pathEnvValue().split(delimiter).map((entry) => entry.trim().replace(/^"|"$/g, "")).filter((entry) => {
13247
+ if (!entry || entry === "." || entry.includes("\x00"))
13248
+ return false;
13249
+ return isAbsolute(entry) || win32.isAbsolute(entry);
13250
+ });
13251
+ }
13252
+ function directoryContainsLibrary(dir, libName) {
13253
+ try {
13254
+ const entries = readdirSync(dir);
13255
+ if (process.platform === "win32") {
13256
+ const expected = libName.toLowerCase();
13257
+ return entries.some((entry) => entry.toLowerCase() === expected);
13258
+ }
13259
+ return entries.includes(libName);
13260
+ } catch {
13261
+ return false;
13262
+ }
13263
+ }
13241
13264
  function findSystemOnnxRuntime(libName) {
13242
13265
  if (!libName)
13243
13266
  return null;
@@ -13246,9 +13269,15 @@ function findSystemOnnxRuntime(libName) {
13246
13269
  searchPaths.push("/opt/homebrew/lib", "/usr/local/lib");
13247
13270
  } else if (process.platform === "linux") {
13248
13271
  searchPaths.push("/usr/lib", "/usr/lib/x86_64-linux-gnu", "/usr/lib/aarch64-linux-gnu", "/usr/local/lib");
13272
+ } else if (process.platform === "win32") {
13273
+ searchPaths.push(...pathEntriesForPlatform());
13249
13274
  }
13275
+ const seen = new Set;
13250
13276
  for (const dir of searchPaths) {
13251
- if (!existsSync5(join6(dir, libName)))
13277
+ if (seen.has(dir))
13278
+ continue;
13279
+ seen.add(dir);
13280
+ if (!directoryContainsLibrary(dir, libName))
13252
13281
  continue;
13253
13282
  const version = detectOnnxVersion(dir, libName);
13254
13283
  if (version && !isOnnxVersionCompatible(version)) {
@@ -14505,7 +14534,7 @@ import {
14505
14534
  // package.json
14506
14535
  var package_default = {
14507
14536
  name: "@cortexkit/aft-pi",
14508
- version: "0.31.0",
14537
+ version: "0.32.0",
14509
14538
  type: "module",
14510
14539
  description: "Pi coding agent extension for Agent File Tools (AFT) — tree-sitter and LSP-powered code analysis",
14511
14540
  main: "dist/index.js",
@@ -14527,7 +14556,7 @@ var package_default = {
14527
14556
  prepublishOnly: "bun run build"
14528
14557
  },
14529
14558
  dependencies: {
14530
- "@cortexkit/aft-bridge": "0.31.0",
14559
+ "@cortexkit/aft-bridge": "0.32.0",
14531
14560
  "@xterm/headless": "^5.5.0",
14532
14561
  "comment-json": "^5.0.0",
14533
14562
  diff: "^8.0.4",
@@ -14535,12 +14564,12 @@ var package_default = {
14535
14564
  zod: "^4.1.8"
14536
14565
  },
14537
14566
  optionalDependencies: {
14538
- "@cortexkit/aft-darwin-arm64": "0.31.0",
14539
- "@cortexkit/aft-darwin-x64": "0.31.0",
14540
- "@cortexkit/aft-linux-arm64": "0.31.0",
14541
- "@cortexkit/aft-linux-x64": "0.31.0",
14542
- "@cortexkit/aft-win32-arm64": "0.31.0",
14543
- "@cortexkit/aft-win32-x64": "0.31.0"
14567
+ "@cortexkit/aft-darwin-arm64": "0.32.0",
14568
+ "@cortexkit/aft-darwin-x64": "0.32.0",
14569
+ "@cortexkit/aft-linux-arm64": "0.32.0",
14570
+ "@cortexkit/aft-linux-x64": "0.32.0",
14571
+ "@cortexkit/aft-win32-arm64": "0.32.0",
14572
+ "@cortexkit/aft-win32-x64": "0.32.0"
14544
14573
  },
14545
14574
  devDependencies: {
14546
14575
  "@earendil-works/pi-coding-agent": "*",
@@ -14609,6 +14638,19 @@ function formatFlag(enabled) {
14609
14638
  function formatCount(value) {
14610
14639
  return value == null ? "—" : value.toLocaleString("en-US");
14611
14640
  }
14641
+ function formatSemanticIndexStatus(status, stage) {
14642
+ if ((status === "loading" || status === "building") && stage === "fingerprint_change") {
14643
+ return "Rebuilding (model changed)";
14644
+ }
14645
+ return status;
14646
+ }
14647
+ function formatSemanticRefreshing(refreshingCount) {
14648
+ if (!Number.isFinite(refreshingCount) || refreshingCount <= 0)
14649
+ return null;
14650
+ if (refreshingCount > 20)
14651
+ return "Ready (many files refreshing)";
14652
+ return `Ready (${refreshingCount} file(s) refreshing)`;
14653
+ }
14612
14654
  function formatBytes(bytes) {
14613
14655
  if (!Number.isFinite(bytes) || bytes <= 0)
14614
14656
  return "0 B";
@@ -14659,6 +14701,7 @@ function coerceAftStatus(response) {
14659
14701
  files: readOptionalNumber(semanticIndex.files),
14660
14702
  entries_done: readOptionalNumber(semanticIndex.entries_done),
14661
14703
  entries_total: readOptionalNumber(semanticIndex.entries_total),
14704
+ refreshing_count: readNumber(semanticIndex.refreshing_count),
14662
14705
  entries: readOptionalNumber(semanticIndex.entries),
14663
14706
  dimension: readOptionalNumber(semanticIndex.dimension),
14664
14707
  error: readNullableString(semanticIndex.error)
@@ -14701,9 +14744,13 @@ function formatStatusDialogMessage(status) {
14701
14744
  `- trigrams: ${formatCount(status.search_index.trigrams)}`,
14702
14745
  "",
14703
14746
  "Semantic index",
14704
- `- status: ${status.semantic_index.status}`,
14705
- `- entries: ${formatCount(status.semantic_index.entries)}`
14747
+ `- status: ${formatSemanticIndexStatus(status.semantic_index.status, status.semantic_index.stage)}`
14706
14748
  ];
14749
+ const refreshing = formatSemanticRefreshing(status.semantic_index.refreshing_count);
14750
+ if (refreshing) {
14751
+ lines.push(`- ${refreshing}`);
14752
+ }
14753
+ lines.push(`- entries: ${formatCount(status.semantic_index.entries)}`);
14707
14754
  if (status.semantic_index.backend) {
14708
14755
  lines.push(`- backend: ${status.semantic_index.backend}`);
14709
14756
  }
@@ -14750,6 +14797,17 @@ function coerceOptionalInt(v, paramName, min, max) {
14750
14797
  }
14751
14798
  return n;
14752
14799
  }
14800
+ function isEmptyParam(value) {
14801
+ if (value === undefined || value === null)
14802
+ return true;
14803
+ if (typeof value === "string")
14804
+ return value.length === 0;
14805
+ if (Array.isArray(value))
14806
+ return value.length === 0;
14807
+ if (typeof value === "object")
14808
+ return Object.keys(value).length === 0;
14809
+ return false;
14810
+ }
14753
14811
  var LONG_RUNNING_COMMAND_TIMEOUT_MS = {
14754
14812
  callers: 60000,
14755
14813
  trace_to: 60000,
@@ -14758,7 +14816,7 @@ var LONG_RUNNING_COMMAND_TIMEOUT_MS = {
14758
14816
  impact: 60000,
14759
14817
  grep: 60000,
14760
14818
  glob: 60000,
14761
- semantic_search: 45000
14819
+ semantic_search: 60000
14762
14820
  };
14763
14821
  function timeoutForCommand(command) {
14764
14822
  return LONG_RUNNING_COMMAND_TIMEOUT_MS[command];
@@ -14971,7 +15029,10 @@ function renderInner(s, error3, theme, innerWidth) {
14971
15029
  left.push(kv("trigrams", formatCountShort(s.search_index.trigrams), theme));
14972
15030
  left.push(kv("disk", formatBytes(s.disk.trigram_disk_bytes), theme));
14973
15031
  right.push(theme.fg("muted", "Semantic index"));
14974
- right.push(kv("status", colorStatus(s.semantic_index.status, theme), theme));
15032
+ right.push(kv("status", colorStatus(s.semantic_index.status, theme, formatSemanticIndexStatus(s.semantic_index.status, s.semantic_index.stage)), theme));
15033
+ const semanticRefreshing = formatSemanticRefreshing(s.semantic_index.refreshing_count);
15034
+ if (semanticRefreshing)
15035
+ right.push(theme.fg("muted", ` ${semanticRefreshing}`));
14975
15036
  right.push(kv("entries", formatCountShort(s.semantic_index.entries), theme));
14976
15037
  if (s.semantic_index.backend)
14977
15038
  right.push(kv("backend", s.semantic_index.backend, theme));
@@ -15045,24 +15106,24 @@ function formatCompressionStatusRows(compression) {
15045
15106
  appendCompressionScope(rows, "Project", compression.project);
15046
15107
  return rows;
15047
15108
  }
15048
- function colorStatus(status, theme) {
15109
+ function colorStatus(status, theme, label = status) {
15049
15110
  switch (status) {
15050
15111
  case "ready":
15051
15112
  try {
15052
- return theme.fg("success", status);
15113
+ return theme.fg("success", label);
15053
15114
  } catch {
15054
- return theme.fg("accent", status);
15115
+ return theme.fg("accent", label);
15055
15116
  }
15056
15117
  case "loading":
15057
15118
  case "building":
15058
- return theme.fg("warning", status);
15119
+ return theme.fg("warning", label);
15059
15120
  case "failed":
15060
15121
  case "error":
15061
- return theme.fg("error", status);
15122
+ return theme.fg("error", label);
15062
15123
  case "disabled":
15063
- return theme.fg("muted", status);
15124
+ return theme.fg("muted", label);
15064
15125
  default:
15065
- return status;
15126
+ return label;
15066
15127
  }
15067
15128
  }
15068
15129
  function featureBadge(name, enabled, theme) {
@@ -31502,9 +31563,9 @@ function registerAstTools(pi, ctx, surface) {
31502
31563
  pattern: params.pattern,
31503
31564
  lang: params.lang
31504
31565
  };
31505
- if (params.paths !== undefined)
31566
+ if (!isEmptyParam(params.paths))
31506
31567
  req.paths = params.paths;
31507
- if (params.globs !== undefined)
31568
+ if (!isEmptyParam(params.globs))
31508
31569
  req.globs = params.globs;
31509
31570
  if (params.contextLines !== undefined)
31510
31571
  req.context_lines = params.contextLines;
@@ -31532,9 +31593,9 @@ function registerAstTools(pi, ctx, surface) {
31532
31593
  rewrite: params.rewrite,
31533
31594
  lang: params.lang
31534
31595
  };
31535
- if (params.paths !== undefined)
31596
+ if (!isEmptyParam(params.paths))
31536
31597
  req.paths = params.paths;
31537
- if (params.globs !== undefined)
31598
+ if (!isEmptyParam(params.globs))
31538
31599
  req.globs = params.globs;
31539
31600
  req.dry_run = params.dryRun === true;
31540
31601
  const response = await callBridge(bridge, "ast_replace", req, extCtx);
@@ -32370,7 +32431,7 @@ function registerFsTools(pi, ctx, surface) {
32370
32431
  // src/tools/hoisted.ts
32371
32432
  import { stat } from "node:fs/promises";
32372
32433
  import { homedir as homedir9 } from "node:os";
32373
- import { isAbsolute, relative as relative3, resolve as resolve3, sep } from "node:path";
32434
+ import { isAbsolute as isAbsolute2, relative as relative3, resolve as resolve3, sep } from "node:path";
32374
32435
  import {
32375
32436
  renderDiff as renderDiff2
32376
32437
  } from "@earendil-works/pi-coding-agent";
@@ -32482,7 +32543,7 @@ function formatDiffForPi(oldContent, newContent, contextLines = DEFAULT_CONTEXT_
32482
32543
  // src/tools/hoisted.ts
32483
32544
  function containsPath(parent, child) {
32484
32545
  const rel = relative3(parent, child);
32485
- return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
32546
+ return rel === "" || !rel.startsWith("..") && !isAbsolute2(rel);
32486
32547
  }
32487
32548
  function expandTilde(path2) {
32488
32549
  if (!path2 || !path2.startsWith("~"))
@@ -32505,7 +32566,7 @@ async function assertExternalDirectoryPermission(extCtx, target, action = "modif
32505
32566
  if (!target)
32506
32567
  return;
32507
32568
  const expanded = expandTilde(target);
32508
- const absoluteTarget = isAbsolute(expanded) ? expanded : resolve3(extCtx.cwd, expanded);
32569
+ const absoluteTarget = isAbsolute2(expanded) ? expanded : resolve3(extCtx.cwd, expanded);
32509
32570
  if (containsPath(extCtx.cwd, absoluteTarget))
32510
32571
  return;
32511
32572
  if (options.restrictToProjectRoot === false)
@@ -32873,7 +32934,7 @@ function shortenPath2(path2) {
32873
32934
  }
32874
32935
  async function resolvePathArg(cwd, path2) {
32875
32936
  const expanded = expandTilde(path2);
32876
- const abs = isAbsolute(expanded) ? expanded : resolve3(cwd, expanded);
32937
+ const abs = isAbsolute2(expanded) ? expanded : resolve3(cwd, expanded);
32877
32938
  try {
32878
32939
  await stat(abs);
32879
32940
  return abs;
@@ -33553,10 +33614,10 @@ Pass a single \`target\`:
33553
33614
  parameters: ZoomParams,
33554
33615
  async execute(_toolCallId, params, _signal, _onUpdate, extCtx) {
33555
33616
  const bridge = bridgeFor(ctx, extCtx.cwd);
33556
- const hasFilePath = typeof params.filePath === "string" && params.filePath.length > 0;
33557
- const hasUrl = typeof params.url === "string" && params.url.length > 0;
33558
- const hasTargets = params.targets !== undefined && params.targets !== null;
33559
- const hasSymbols = params.symbols !== undefined && params.symbols !== null && (typeof params.symbols === "string" ? params.symbols.length > 0 : Array.isArray(params.symbols) && params.symbols.length > 0);
33617
+ const hasFilePath = !isEmptyParam(params.filePath);
33618
+ const hasUrl = !isEmptyParam(params.url);
33619
+ const hasTargets = !isEmptyParam(params.targets);
33620
+ const hasSymbols = !isEmptyParam(params.symbols);
33560
33621
  if (hasTargets) {
33561
33622
  if (hasFilePath || hasUrl || hasSymbols) {
33562
33623
  throw new Error("'targets' is mutually exclusive with 'filePath', 'url', and 'symbols'");
@@ -33779,14 +33840,23 @@ function registerRefactorTool(pi, ctx) {
33779
33840
  extract: "extract_function",
33780
33841
  inline: "inline_symbol"
33781
33842
  };
33843
+ if ((params.op === "move" || params.op === "inline") && isEmptyParam(params.symbol)) {
33844
+ throw new Error(`'symbol' is required for '${params.op}' op`);
33845
+ }
33846
+ if (params.op === "move" && isEmptyParam(params.destination)) {
33847
+ throw new Error("'destination' is required for 'move' op");
33848
+ }
33849
+ if (params.op === "extract" && isEmptyParam(params.name)) {
33850
+ throw new Error("'name' is required for 'extract' op");
33851
+ }
33782
33852
  const req = { file: params.filePath };
33783
- if (params.symbol !== undefined)
33853
+ if (!isEmptyParam(params.symbol))
33784
33854
  req.symbol = params.symbol;
33785
- if (params.destination !== undefined)
33855
+ if (!isEmptyParam(params.destination))
33786
33856
  req.destination = params.destination;
33787
- if (params.scope !== undefined)
33857
+ if (!isEmptyParam(params.scope))
33788
33858
  req.scope = params.scope;
33789
- if (params.name !== undefined)
33859
+ if (!isEmptyParam(params.name))
33790
33860
  req.name = params.name;
33791
33861
  const startLine = coerceOptionalInt(params.startLine, "startLine", 1, Number.MAX_SAFE_INTEGER);
33792
33862
  const endLine = coerceOptionalInt(params.endLine, "endLine", 1, Number.MAX_SAFE_INTEGER);
@@ -33955,31 +34025,55 @@ function registerSafetyTool(pi, ctx) {
33955
34025
  import { Type as Type13 } from "typebox";
33956
34026
  var SearchParams2 = Type13.Object({
33957
34027
  query: Type13.String({
33958
- description: "Concept or capability to find, phrased as a programmer would describe the code. Examples: 'fuzzy match with whitespace tolerance', 'undo backup before edit', 'retry failed network request'."
34028
+ description: "Concept, regex, literal text, filename, or capability to find. Examples: 'fuzzy match with whitespace tolerance', '^export', 'Cargo.lock'."
33959
34029
  }),
33960
- topK: Type13.Optional(Type13.Number({ description: "Maximum number of results (default: 10, max: 100)" }))
34030
+ topK: Type13.Optional(Type13.Number({ description: "Maximum number of results (default: 10, max: 100)" })),
34031
+ hint: Type13.Optional(Type13.Union([
34032
+ Type13.Literal("regex"),
34033
+ Type13.Literal("literal"),
34034
+ Type13.Literal("semantic"),
34035
+ Type13.Literal("auto")
34036
+ ], {
34037
+ description: "Optional routing hint. Defaults to 'auto'."
34038
+ }))
33961
34039
  });
33962
34040
  function buildSemanticSections(args, payload, theme) {
33963
34041
  const response = asRecord2(payload);
33964
34042
  if (!response)
33965
- return [theme.fg("muted", "No semantic search result.")];
34043
+ return [theme.fg("muted", "No search result.")];
33966
34044
  const status = asString(response.status) ?? "unknown";
34045
+ const semanticStatus = asString(response.semantic_status) ?? status;
34046
+ const interpretedAs = asString(response.interpreted_as) ?? "unknown";
34047
+ const queryKind = asString(response.query_kind);
33967
34048
  const sections = [
33968
- `${theme.fg(status === "ready" ? "success" : "warning", `index: ${status}`)} ${theme.fg("muted", `query=${JSON.stringify(args.query)} topK=${args.topK ?? 10}`)}`
34049
+ `${theme.fg(semanticStatus === "ready" ? "success" : "warning", `semantic: ${semanticStatus}`)} ${theme.fg("muted", `mode=${interpretedAs}${queryKind ? ` kind=${queryKind}` : ""} query=${JSON.stringify(args.query)} topK=${args.topK ?? 10}`)}`
33969
34050
  ];
33970
- if (status !== "ready") {
34051
+ const warnings = Array.isArray(response.warnings) ? response.warnings.filter((warning) => typeof warning === "string") : [];
34052
+ if (warnings.length > 0) {
34053
+ sections.push(warnings.map((warning) => theme.fg("warning", `⚠ ${warning}`)).join(`
34054
+ `));
34055
+ }
34056
+ const results = asRecords(response.results);
34057
+ if (status !== "ready" && results.length === 0) {
33971
34058
  sections.push(asString(response.text) ?? theme.fg("muted", "Semantic index is not ready."));
33972
34059
  return sections;
33973
34060
  }
33974
- const results = asRecords(response.results);
33975
34061
  if (results.length === 0) {
33976
- sections.push(theme.fg("muted", "No semantic matches found."));
34062
+ sections.push(theme.fg("muted", "No matches found."));
33977
34063
  return sections;
33978
34064
  }
33979
34065
  const grouped = groupByFile(results, (result) => asString(result.file));
33980
34066
  for (const [file2, fileResults] of grouped.entries()) {
33981
34067
  const lines = [theme.fg("accent", shortenPath(file2))];
33982
34068
  fileResults.forEach((result) => {
34069
+ if (asString(result.kind) === "GrepLine") {
34070
+ const line = asNumber(result.line);
34071
+ const column = asNumber(result.column);
34072
+ const lineText = asString(result.line_text) ?? "";
34073
+ const location = line !== undefined ? `${line}${column !== undefined ? `:${column}` : ""}` : "?";
34074
+ lines.push(` ↳ ${theme.fg("muted", `line ${location}`)} ${lineText}`);
34075
+ return;
34076
+ }
33983
34077
  const score = asNumber(result.score);
33984
34078
  const source = asString(result.source);
33985
34079
  if (source === "lexical") {
@@ -34009,33 +34103,33 @@ function buildSemanticSections(args, payload, theme) {
34009
34103
  return sections;
34010
34104
  }
34011
34105
  function renderSemanticCall(args, theme, context) {
34012
- return renderToolCall("semantic search", theme.fg("toolOutput", args.query), theme, context);
34106
+ return renderToolCall("search", theme.fg("toolOutput", args.query), theme, context);
34013
34107
  }
34014
34108
  function renderSemanticResult(result, args, theme, context) {
34015
34109
  if (context.isError)
34016
- return renderErrorResult(result, "semantic search failed", theme, context);
34110
+ return renderErrorResult(result, "search failed", theme, context);
34017
34111
  return renderSections(buildSemanticSections(args, extractStructuredPayload(result), theme), context);
34018
34112
  }
34019
34113
  function registerSemanticTool(pi, ctx) {
34020
34114
  pi.registerTool({
34021
34115
  name: "aft_search",
34022
- label: "semantic search",
34116
+ label: "search",
34023
34117
  description: [
34024
- "Find symbols by concept using hybrid semantic + lexical search. Returns ranked code matches with similarity scores and provenance tags.",
34118
+ "Find code with unified semantic, lexical, literal, and regex search. Returns ranked symbol/file results or exact matching lines, with routing metadata.",
34025
34119
  "",
34026
34120
  "When to reach for it:",
34027
34121
  "- Exploring an unfamiliar area: 'where is rate limiting handled', 'how does auth flow work'",
34028
34122
  "- Concept doesn't appear as a literal string: 'retry logic', 'cache invalidation', 'graceful shutdown'",
34029
34123
  "- Filename-shaped concepts: 'the bridge spawn helper', 'the session detection module'",
34030
- "- After 2+ grep attempts that came back empty or noisy",
34124
+ "- Regex-shaped or exact text queries when you want AFT to classify and route automatically",
34031
34125
  "- You know roughly what the function does but not what it's named",
34032
34126
  "",
34033
34127
  "When NOT to use:",
34034
- "- You have an error message or stack trace → use grep",
34128
+ "- You need exhaustive literal enumeration → use grep directly",
34035
34129
  "- You want the file/module structure → use aft_outline",
34036
34130
  "- You're following a call chain → use aft_navigate",
34037
34131
  "",
34038
- "Each result tags `source` as one of: 'semantic' (embedding match only), 'lexical' (trigram exact-token match the embedding lane missed), or 'hybrid' (both lanes agreed strongest signal)."
34132
+ "Set hint to 'regex', 'literal', 'semantic', or 'auto' to override or document routing intent."
34039
34133
  ].join(`
34040
34134
  `),
34041
34135
  parameters: SearchParams2,
@@ -34044,6 +34138,8 @@ function registerSemanticTool(pi, ctx) {
34044
34138
  const req = { query: params.query };
34045
34139
  if (params.topK !== undefined)
34046
34140
  req.top_k = params.topK;
34141
+ if (params.hint !== undefined)
34142
+ req.hint = params.hint;
34047
34143
  const response = await callBridge(bridge, "semantic_search", req, extCtx);
34048
34144
  return textResult(response.text ?? JSON.stringify(response, null, 2));
34049
34145
  },
@@ -34198,8 +34294,12 @@ function buildWorkflowHints(opts) {
34198
34294
  sections.push(`**Web/URL access**: \`aft_outline({ target: "<url>" })\` first for structure, then \`aft_zoom({ url: "<url>", symbols: "<heading>" })\` for the specific section.`);
34199
34295
  }
34200
34296
  if (hasOutline && hasZoom && (hasGrep || hasSearch)) {
34201
- const locator = hasGrep ? `\`${grepName}\`` : "`aft_search`";
34202
- sections.push(hasGrep && hasSearch ? `**Code exploration**: For exact identifiers (\`useState\`, function names, env vars), error messages, or path-shaped queries → \`${grepName}\` first. For broad concepts ('where is X handled', 'how does Y work') \`aft_search\`. Then use \`aft_outline\` for structure → \`aft_zoom\` for symbol(s).` : `**Code exploration**: ${locator} to locate → \`aft_outline\` for structure → \`aft_zoom\` for symbol(s).`);
34297
+ if (hasSearch) {
34298
+ const grepFallback = hasGrep ? ` Use \`${grepName}\` directly only when you need exhaustive enumeration of literal text (every TODO, every import of X) without ranking.` : "";
34299
+ 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. Pass \`hint: "regex"\` / \`hint: "literal"\` / \`hint: "semantic"\` to override routing if needed. Then \`aft_outline\` for structure → \`aft_zoom\` for symbol(s).${grepFallback}`);
34300
+ } else {
34301
+ sections.push(`**Code exploration**: \`${grepName}\` to locate → \`aft_outline\` for structure → \`aft_zoom\` for symbol(s).`);
34302
+ }
34203
34303
  }
34204
34304
  if (hasNavigate) {
34205
34305
  sections.push([
@@ -34307,13 +34407,13 @@ var PLUGIN_VERSION = (() => {
34307
34407
  return "0.0.0";
34308
34408
  }
34309
34409
  })();
34310
- var ANNOUNCEMENT_VERSION = "0.31.0";
34410
+ var ANNOUNCEMENT_VERSION = "0.32.0";
34311
34411
  var ANNOUNCEMENT_FEATURES = [
34312
- "`aft_navigate` has a new `trace_to_symbol` op for path-between-symbols queries. One call returns the shortest call path from one function to another with file + line for every hop. Honest errors for ambiguous, missing, or unreachable targets — including a candidate list to disambiguate.",
34313
- '`aft_outline target: "<dir>", files: true` returns an indexed file tree with language, symbol count, and byte size per file. Lets agents pick which files to actually open without first reading symbol bodies. Honest truncation (`complete: false` + `walk_truncated`/`unchecked_files`) when the directory exceeds the walk cap.',
34314
- '`aft_zoom` adds `targets` for cross-file batches — pull bodies from different files in one call. Schema breaking change: `symbol` is removed; pass `symbols: "name"` (string) or `symbols: ["a", "b"]` (array). Same shape works for `url` mode so you can grab multiple sections from one URL fetch.',
34315
- "Pi `grep`/`write`/`edit` no longer hang on external paths. The plugin used to nag with an `Allow external directory access?` prompt even under the Pi default (`restrict_to_project_root: false`) which explicitly opts into no restriction. The plugin now defers to Rust without prompting in that case, expands `~/...` paths correctly, and bounds the prompt with a 30s timeout when strict mode is enabled.",
34316
- "Tool descriptions trimmed: ~1.2K agent-facing tokens removed by dropping redundant `Returns:` blocks and compressing `lsp_diagnostics` while preserving its load-bearing honesty guidance."
34412
+ "`aft_search` is now the primary code-search tool auto-routes regex / literal / semantic / hybrid by query shape, with a `hint` override.",
34413
+ 'Semantic search stays queryable through edits no more "rebuilding" fallback after every save.',
34414
+ "Workflow hints promote `aft_search` as primary; `grep` is positioned as the specialized fallback.",
34415
+ "Bare `\\n`, `\\t`, `\\r` queries correctly route to regex mode.",
34416
+ 'Empty params (`targets: []`, `url: ""`) no longer trigger misleading mutual-exclusion errors.'
34317
34417
  ];
34318
34418
  var ANNOUNCEMENT_FOOTER = "Join us on Discord: https://discord.gg/F2uWxjGnU";
34319
34419
  var ALL_ONLY_TOOLS = new Set([
@@ -33,6 +33,7 @@ export interface AftStatusSnapshot {
33
33
  files?: number | null;
34
34
  entries_done?: number | null;
35
35
  entries_total?: number | null;
36
+ refreshing_count: number;
36
37
  entries: number | null;
37
38
  dimension: number | null;
38
39
  error?: string | null;
@@ -64,6 +65,8 @@ export interface AftStatusSnapshot {
64
65
  */
65
66
  message?: string;
66
67
  }
68
+ export declare function formatSemanticIndexStatus(status: string, stage?: string | null): string;
69
+ export declare function formatSemanticRefreshing(refreshingCount: number): string | null;
67
70
  export declare function formatBytes(bytes: number): string;
68
71
  export declare function coerceAftStatus(response: Record<string, unknown>): AftStatusSnapshot;
69
72
  export declare function formatStatusDialogMessage(status: AftStatusSnapshot): string;
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/shared/status.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,0BAA0B,CAAC;IACpC,OAAO,EAAE,0BAA0B,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QACR,cAAc,EAAE,OAAO,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,wBAAwB,EAAE,OAAO,CAAC;QAClC,YAAY,EAAE,OAAO,CAAC;QACtB,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;IACF,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iEAAiE;IACjE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,wEAAwE;IACxE,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAqDD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAajD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CA+DpF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CA+D3E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAiEtE"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/shared/status.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,0BAA0B,CAAC;IACpC,OAAO,EAAE,0BAA0B,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QACR,cAAc,EAAE,OAAO,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,wBAAwB,EAAE,OAAO,CAAC;QAClC,YAAY,EAAE,OAAO,CAAC;QACtB,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,gBAAgB,EAAE,MAAM,CAAC;QACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;IACF,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iEAAiE;IACjE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,wEAAwE;IACxE,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAqDD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAKvF;AAED,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI/E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAajD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAgEpF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAmE3E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAqEtE"}
@@ -7,6 +7,19 @@ import { Type } from "typebox";
7
7
  import type { PluginContext } from "../types.js";
8
8
  export declare const optionalInt: (_min: number, _max: number) => Type.TOptional<Type.TAny>;
9
9
  export declare function coerceOptionalInt(v: unknown, paramName: string, min: number, max: number): number | undefined;
10
+ /**
11
+ * True when a value represents "agent did not provide this param".
12
+ *
13
+ * GPT-family models send empty strings / empty arrays / null instead of
14
+ * omitting optional params entirely. Use this BEFORE mutual-exclusion
15
+ * checks so an empty `targets: []` or `url: ""` doesn't get counted as
16
+ * present and trigger a misleading "X is mutually exclusive with Y" error.
17
+ *
18
+ * Treats undefined / null / "" / [] / {} as empty. Booleans and numbers
19
+ * (including 0 and false) are NOT empty by themselves — only string and
20
+ * collection sentinels qualify.
21
+ */
22
+ export declare function isEmptyParam(value: unknown): boolean;
10
23
  /**
11
24
  * Per-command timeout overrides (milliseconds).
12
25
  *
@@ -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;;;;;;;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;;;;;;;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 +1 @@
1
- {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/tools/ast.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;AAEjD,OAAO,EASL,KAAK,iBAAiB,EAMvB,MAAM,qBAAqB,CAAC;AAM7B,QAAA,MAAM,YAAY;;;;;;EAehB,CAAC;AAEH,QAAA,MAAM,aAAa;;;;;;;EAOjB,CAAC;AAEH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAkCD,wCAAwC;AACxC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAqD/E;AAED,wCAAwC;AACxC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAmDhF;AAED,wCAAwC;AACxC,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,iBAAiB,GAAG,kBAAkB,EAChD,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,GAAG,MAAM,CAAC,OAAO,aAAa,CAAC,EAChE,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAa3B;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,iBAAiB,GAAG,kBAAkB,EAChD,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAiB3B;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAsEhG"}
1
+ {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/tools/ast.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;AAEjD,OAAO,EASL,KAAK,iBAAiB,EAMvB,MAAM,qBAAqB,CAAC;AAM7B,QAAA,MAAM,YAAY;;;;;;EAehB,CAAC;AAEH,QAAA,MAAM,aAAa;;;;;;;EAOjB,CAAC;AAEH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAkCD,wCAAwC;AACxC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAqD/E;AAED,wCAAwC;AACxC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAmDhF;AAED,wCAAwC;AACxC,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,iBAAiB,GAAG,kBAAkB,EAChD,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,GAAG,MAAM,CAAC,OAAO,aAAa,CAAC,EAChE,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAa3B;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,iBAAiB,GAAG,kBAAkB,EAChD,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAiB3B;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CA0EhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"reading.d.ts","sourceRoot":"","sources":["../../src/tools/reading.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,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;AAEjD,OAAO,EAOL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAE7B,QAAA,MAAM,aAAa;;;EAWjB,CAAC;AAOH,QAAA,MAAM,UAAU;;;;;;;;;;;;EAwBd,CAAC;AAWH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAOzE;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,OAAO,UAAU,CAAC,EAC/B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CAwFV;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,OAAO,aAAa,CAAC,EAClC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAQ3B;AAED,wCAAwC;AACxC,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAI3B;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,CAAC,OAAO,UAAU,CAAC,EAC/B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAuB3B;AAED,wCAAwC;AACxC,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,OAAO,UAAU,CAAC,EAC/B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAI3B;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,cAAc,GACtB,IAAI,CAwPN;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACnC,eAAe,CAyBjB;AA0BD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA2ChF"}
1
+ {"version":3,"file":"reading.d.ts","sourceRoot":"","sources":["../../src/tools/reading.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,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;AAEjD,OAAO,EAOL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAE7B,QAAA,MAAM,aAAa;;;EAWjB,CAAC;AAOH,QAAA,MAAM,UAAU;;;;;;;;;;;;EAwBd,CAAC;AAWH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAOzE;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,OAAO,UAAU,CAAC,EAC/B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CAwFV;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,OAAO,aAAa,CAAC,EAClC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAQ3B;AAED,wCAAwC;AACxC,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAI3B;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,CAAC,OAAO,UAAU,CAAC,EAC/B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAuB3B;AAED,wCAAwC;AACxC,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,OAAO,UAAU,CAAC,EAC/B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAI3B;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,cAAc,GACtB,IAAI,CAuPN;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACnC,eAAe,CAyBjB;AA0BD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA2ChF"}
@@ -1 +1 @@
1
- {"version":3,"file":"refactor.d.ts","sourceRoot":"","sources":["../../src/tools/refactor.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;AAEjD,OAAO,EAOL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAE7B,QAAA,MAAM,cAAc;;;;;;;;;;EAYlB,CAAC;AAEH,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,OAAO,cAAc,CAAC,EACnC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CAiCV;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,OAAO,cAAc,CAAC,EACnC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAU3B;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,OAAO,cAAc,CAAC,EACnC,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":"refactor.d.ts","sourceRoot":"","sources":["../../src/tools/refactor.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;AASjD,OAAO,EAOL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAE7B,QAAA,MAAM,cAAc;;;;;;;;;;EAYlB,CAAC;AAEH,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,OAAO,cAAc,CAAC,EACnC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CAiCV;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,OAAO,cAAc,CAAC,EACnC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,yCAU3B;AAED,wCAAwC;AACxC,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,OAAO,cAAc,CAAC,EACnC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,sFAO3B;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAqE/E"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * aft_search — semantic (embedding-based) code search.
2
+ * aft_search — unified code search.
3
3
  * Only registered when config.semantic_search is enabled AND
4
4
  * the ONNX runtime / configured backend is available.
5
5
  */
@@ -10,6 +10,7 @@ import { type RenderContextLike } from "./render-helpers.js";
10
10
  declare const SearchParams: Type.TObject<{
11
11
  query: Type.TString;
12
12
  topK: Type.TOptional<Type.TNumber>;
13
+ hint: Type.TOptional<Type.TUnion<[Type.TLiteral<"regex">, Type.TLiteral<"literal">, Type.TLiteral<"semantic">, Type.TLiteral<"auto">]>>;
13
14
  }>;
14
15
  /** Exported for renderer unit tests. */
15
16
  export declare function buildSemanticSections(args: Static<typeof SearchParams>, payload: unknown, theme: Theme): string[];
@@ -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;AAEjD,OAAO,EAOL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAE7B,QAAA,MAAM,YAAY;;;EAQhB,CAAC;AAEH,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CAwDV;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,sFAO3B;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CA0C/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;AAEjD,OAAO,EAOL,KAAK,iBAAiB,EAKvB,MAAM,qBAAqB,CAAC;AAE7B,QAAA,MAAM,YAAY;;;;EAqBhB,CAAC;AAEH,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,OAAO,YAAY,CAAC,EACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX,MAAM,EAAE,CA4EV;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,sFAO3B;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CA2C/E"}
@@ -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+DzE;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,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,CA8BN"}
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,CAqEzE;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,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,CA8BN"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cortexkit/aft-pi",
3
- "version": "0.31.0",
3
+ "version": "0.32.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",
@@ -22,7 +22,7 @@
22
22
  "prepublishOnly": "bun run build"
23
23
  },
24
24
  "dependencies": {
25
- "@cortexkit/aft-bridge": "0.31.0",
25
+ "@cortexkit/aft-bridge": "0.32.0",
26
26
  "@xterm/headless": "^5.5.0",
27
27
  "comment-json": "^5.0.0",
28
28
  "diff": "^8.0.4",
@@ -30,12 +30,12 @@
30
30
  "zod": "^4.1.8"
31
31
  },
32
32
  "optionalDependencies": {
33
- "@cortexkit/aft-darwin-arm64": "0.31.0",
34
- "@cortexkit/aft-darwin-x64": "0.31.0",
35
- "@cortexkit/aft-linux-arm64": "0.31.0",
36
- "@cortexkit/aft-linux-x64": "0.31.0",
37
- "@cortexkit/aft-win32-arm64": "0.31.0",
38
- "@cortexkit/aft-win32-x64": "0.31.0"
33
+ "@cortexkit/aft-darwin-arm64": "0.32.0",
34
+ "@cortexkit/aft-darwin-x64": "0.32.0",
35
+ "@cortexkit/aft-linux-arm64": "0.32.0",
36
+ "@cortexkit/aft-linux-x64": "0.32.0",
37
+ "@cortexkit/aft-win32-arm64": "0.32.0",
38
+ "@cortexkit/aft-win32-x64": "0.32.0"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@earendil-works/pi-coding-agent": "*",