@sage-protocol/pi-adapter 0.3.12 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"sage-pi-adapter.d.ts","sourceRoot":"","sources":["../src/sage-pi-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sage-pi-adapter.d.ts","sourceRoot":"","sources":["../src/sage-pi-adapter.ts"],"names":[],"mappings":"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"}
@@ -437,6 +437,7 @@ function normalizeAction(aliasesByDomain, domain, action) {
437
437
  export async function defaultSageCommandRunner(request) {
438
438
  return new Promise((resolve, reject) => {
439
439
  const proc = spawn(request.command, request.args, {
440
+ cwd: request.cwd,
440
441
  env: { ...process.env, ...request.env },
441
442
  stdio: ["pipe", "pipe", "pipe"],
442
443
  });
@@ -657,26 +658,59 @@ function loadHostPiTui() {
657
658
  hostPiTui = null;
658
659
  return null;
659
660
  }
660
- /**
661
- * Clamp a single (possibly ANSI-styled) line to `width` visible columns so a
662
- * custom widget/status line can never trip pi's "Rendered line exceeds terminal
663
- * width" guard. Uses the host pi-tui truncateToWidth when resolvable (ANSI-aware,
664
- * preserves color); otherwise strips ANSI and hard-slices.
665
- */
666
- export function clampLineToWidth(line, width) {
661
+ /** Return terminal-visible width while ignoring ANSI SGR sequences. */
662
+ export function visibleWidthOf(line) {
663
+ const mod = loadHostPiTui();
664
+ if (mod?.visibleWidth) {
665
+ try {
666
+ return mod.visibleWidth(line);
667
+ }
668
+ catch {
669
+ /* fall through to the dependency-free counter */
670
+ }
671
+ }
672
+ // eslint-disable-next-line no-control-regex
673
+ return [...line.replace(/\x1b\[[0-9;]*m/g, "")].length;
674
+ }
675
+ /** Truncate one ANSI-styled line without counting styling bytes as columns. */
676
+ export function truncateLineToWidth(line, width) {
667
677
  const cols = Number.isFinite(width) && width > 0 ? Math.floor(width) : 80;
678
+ if (visibleWidthOf(line) <= cols)
679
+ return line;
668
680
  const mod = loadHostPiTui();
669
681
  if (mod?.truncateToWidth) {
670
682
  try {
671
683
  return mod.truncateToWidth(line, cols);
672
684
  }
673
685
  catch {
674
- /* fall through to manual clamp */
686
+ /* fall through to the dependency-free truncator */
675
687
  }
676
688
  }
689
+ // Preserve SGR styling while counting only visible code points.
677
690
  // eslint-disable-next-line no-control-regex
678
- const plain = line.replace(/\x1b\[[0-9;]*m/g, "");
679
- return plain.length > cols ? plain.slice(0, cols) : plain;
691
+ const tokens = line.match(/\x1b\[[0-9;]*m|./gu) ?? [];
692
+ let visible = 0;
693
+ let sawStyle = false;
694
+ let result = "";
695
+ for (const token of tokens) {
696
+ // eslint-disable-next-line no-control-regex
697
+ if (/^\x1b\[[0-9;]*m$/.test(token)) {
698
+ result += token;
699
+ sawStyle = true;
700
+ continue;
701
+ }
702
+ if (visible >= cols)
703
+ break;
704
+ result += token;
705
+ visible += 1;
706
+ }
707
+ if (sawStyle && !result.endsWith("\x1b[0m"))
708
+ result += "\x1b[0m";
709
+ return result;
710
+ }
711
+ /** Clamp a line so custom TUI/status rendering cannot exceed terminal width. */
712
+ export function clampLineToWidth(line, width) {
713
+ return truncateLineToWidth(line, width);
680
714
  }
681
715
  function createTextComponent(text) {
682
716
  // Canonical path: return the host pi-tui's real Text component. It wraps via
@@ -1104,6 +1138,140 @@ function looksUnknownToolError(error) {
1104
1138
  msg.includes("no such tool") ||
1105
1139
  msg.includes("does not exist"));
1106
1140
  }
1141
+ const FAILED_NATIVE_SKILL_LOAD_RESULT = {
1142
+ schema: "sage.native-skill-load-signal.v1",
1143
+ status: "failed",
1144
+ recorded: false,
1145
+ };
1146
+ const NATIVE_SKILL_LOAD_EVIDENCE_TIERS = new Set([
1147
+ "full_serve",
1148
+ "native_observed",
1149
+ ]);
1150
+ function parseJsonObject(stdout) {
1151
+ try {
1152
+ const parsed = JSON.parse(stdout.trim());
1153
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed)
1154
+ ? parsed
1155
+ : null;
1156
+ }
1157
+ catch {
1158
+ return null;
1159
+ }
1160
+ }
1161
+ function parseNativeSkillLoadResult(stdout) {
1162
+ const parsed = parseJsonObject(stdout);
1163
+ if (!parsed ||
1164
+ parsed.schema !== "sage.native-skill-load-signal.v1") {
1165
+ return null;
1166
+ }
1167
+ if (parsed.status === "ignored" && parsed.recorded === false) {
1168
+ const result = {
1169
+ schema: "sage.native-skill-load-signal.v1",
1170
+ status: "ignored",
1171
+ recorded: false,
1172
+ };
1173
+ if (typeof parsed.reason === "string" && parsed.reason.trim()) {
1174
+ result.reason = parsed.reason;
1175
+ }
1176
+ return result;
1177
+ }
1178
+ if (parsed.status !== "recorded" ||
1179
+ parsed.recorded !== true ||
1180
+ typeof parsed.qualified_key !== "string" ||
1181
+ !parsed.qualified_key.trim() ||
1182
+ parsed.load_evidence_tier !== "native_observed" ||
1183
+ typeof parsed.loaded_at_ms !== "number" ||
1184
+ !Number.isSafeInteger(parsed.loaded_at_ms) ||
1185
+ parsed.loaded_at_ms < 0) {
1186
+ return null;
1187
+ }
1188
+ return {
1189
+ schema: "sage.native-skill-load-signal.v1",
1190
+ status: "recorded",
1191
+ recorded: true,
1192
+ qualified_key: parsed.qualified_key,
1193
+ load_evidence_tier: "native_observed",
1194
+ loaded_at_ms: parsed.loaded_at_ms,
1195
+ };
1196
+ }
1197
+ function normalizeNativeSkillName(value) {
1198
+ return value.trim().toLocaleLowerCase("en-US");
1199
+ }
1200
+ function dedupeNativeSkillNames(skillKeys) {
1201
+ const names = new Map();
1202
+ for (const raw of skillKeys) {
1203
+ const trimmed = raw.trim();
1204
+ if (!trimmed)
1205
+ continue;
1206
+ const normalized = normalizeNativeSkillName(trimmed);
1207
+ if (!names.has(normalized))
1208
+ names.set(normalized, trimmed);
1209
+ }
1210
+ return [...names.values()];
1211
+ }
1212
+ function parseNativeSkillUseResult(stdout, expectedCaptureId, expectedNames) {
1213
+ const parsed = parseJsonObject(stdout);
1214
+ if (!parsed ||
1215
+ parsed.schema !== "sage.native-skill-use.v1" ||
1216
+ parsed.status !== "recorded" ||
1217
+ parsed.capture_id !== expectedCaptureId ||
1218
+ !Array.isArray(parsed.uses) ||
1219
+ parsed.uses.length === 0) {
1220
+ return null;
1221
+ }
1222
+ const expected = new Set(expectedNames.map(normalizeNativeSkillName));
1223
+ if (expected.size === 0 || parsed.uses.length !== expected.size)
1224
+ return null;
1225
+ if (parsed.capture_linkage !== "explicit")
1226
+ return null;
1227
+ const returnedNames = new Set();
1228
+ const returnedQualifiedKeys = new Set();
1229
+ const uses = [];
1230
+ for (const entry of parsed.uses) {
1231
+ if (!entry || typeof entry !== "object" || Array.isArray(entry))
1232
+ return null;
1233
+ const record = entry;
1234
+ if (typeof record.requested_name !== "string" ||
1235
+ !record.requested_name.trim() ||
1236
+ typeof record.qualified_key !== "string" ||
1237
+ !record.qualified_key.trim() ||
1238
+ typeof record.load_evidence_tier !== "string" ||
1239
+ !NATIVE_SKILL_LOAD_EVIDENCE_TIERS.has(record.load_evidence_tier) ||
1240
+ typeof record.load_observed_at_ms !== "number" ||
1241
+ !Number.isSafeInteger(record.load_observed_at_ms) ||
1242
+ record.load_observed_at_ms < 0 ||
1243
+ typeof record.recorded !== "boolean") {
1244
+ return null;
1245
+ }
1246
+ const requestedName = record.requested_name.trim();
1247
+ const normalizedName = normalizeNativeSkillName(requestedName);
1248
+ const qualifiedKey = record.qualified_key.trim();
1249
+ const normalizedQualifiedKey = normalizeNativeSkillName(qualifiedKey);
1250
+ if (!expected.has(normalizedName) ||
1251
+ returnedNames.has(normalizedName) ||
1252
+ returnedQualifiedKeys.has(normalizedQualifiedKey)) {
1253
+ return null;
1254
+ }
1255
+ returnedNames.add(normalizedName);
1256
+ returnedQualifiedKeys.add(normalizedQualifiedKey);
1257
+ uses.push({
1258
+ requested_name: requestedName,
1259
+ qualified_key: qualifiedKey,
1260
+ load_evidence_tier: record.load_evidence_tier,
1261
+ load_observed_at_ms: record.load_observed_at_ms,
1262
+ recorded: record.recorded,
1263
+ });
1264
+ }
1265
+ if ([...expected].some((name) => !returnedNames.has(name)))
1266
+ return null;
1267
+ return {
1268
+ schema: "sage.native-skill-use.v1",
1269
+ status: "recorded",
1270
+ capture_id: expectedCaptureId,
1271
+ capture_linkage: "explicit",
1272
+ uses,
1273
+ };
1274
+ }
1107
1275
  function parseSecurityDecision(stdout) {
1108
1276
  const lines = stdout
1109
1277
  .split(/\r?\n/)
@@ -1422,6 +1590,7 @@ export class SageMcpBridge {
1422
1590
  export class SageHookRuntime {
1423
1591
  config;
1424
1592
  commandRunner;
1593
+ workingDirectory;
1425
1594
  sessionContextCache = new Map();
1426
1595
  skillVisibilityCache = null;
1427
1596
  softFailureState = new Map();
@@ -1429,6 +1598,10 @@ export class SageHookRuntime {
1429
1598
  this.config = config;
1430
1599
  this.commandRunner = config.commandRunner ?? defaultSageCommandRunner;
1431
1600
  }
1601
+ setWorkingDirectory(cwd) {
1602
+ this.workingDirectory =
1603
+ typeof cwd === "string" && cwd.trim() ? cwd.trim() : undefined;
1604
+ }
1432
1605
  getSoftTimeout(maxTimeoutMs) {
1433
1606
  return Math.max(250, Math.min(this.config.timeoutMs, maxTimeoutMs));
1434
1607
  }
@@ -1544,7 +1717,11 @@ export class SageHookRuntime {
1544
1717
  }
1545
1718
  return this.skillVisibilityCache ?? current;
1546
1719
  }
1547
- async suggestSkill(prompt, sessionId) {
1720
+ /**
1721
+ * @deprecated Low-level compatibility helper. The default Pi path uses
1722
+ * native skill discovery/loading and does not call this per prompt.
1723
+ */
1724
+ async suggestSkill(prompt, sessionId, model) {
1548
1725
  const trimmed = prompt.trim();
1549
1726
  if (!trimmed)
1550
1727
  return "";
@@ -1562,6 +1739,7 @@ export class SageHookRuntime {
1562
1739
  SAGE_PROMPT: trimmed,
1563
1740
  SAGE_SOURCE: this.config.source ?? "pi",
1564
1741
  SAGE_SESSION_ID: sessionId ?? "",
1742
+ SAGE_MODEL: model ?? "",
1565
1743
  }, JSON.stringify({ prompt: trimmed }), {
1566
1744
  failurePolicy: "warn",
1567
1745
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.suggest),
@@ -1570,11 +1748,11 @@ export class SageHookRuntime {
1570
1748
  }
1571
1749
  async capturePrompt(prompt, sessionId) {
1572
1750
  if (this.config.enableRlmFeedback === false)
1573
- return;
1751
+ return undefined;
1574
1752
  const trimmed = prompt.trim();
1575
1753
  if (!trimmed)
1576
- return;
1577
- await this.run(["capture", "hook", "prompt"], {
1754
+ return undefined;
1755
+ const result = await this.run(["capture", "hook", "prompt"], {
1578
1756
  PROMPT: trimmed,
1579
1757
  SAGE_PROMPT: trimmed,
1580
1758
  SAGE_SOURCE: this.config.source ?? "pi",
@@ -1583,34 +1761,153 @@ export class SageHookRuntime {
1583
1761
  failurePolicy: "silent",
1584
1762
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.capture),
1585
1763
  });
1764
+ const captureId = result?.stdout
1765
+ .trim()
1766
+ .match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i)?.[0];
1767
+ return captureId;
1586
1768
  }
1587
- async captureResponse(response, usage, sessionId) {
1769
+ async captureResponse(response, usage, sessionId, captureId) {
1588
1770
  if (this.config.enableRlmFeedback === false)
1589
- return;
1771
+ return false;
1590
1772
  const trimmed = response.trim();
1591
1773
  if (!trimmed)
1592
- return;
1593
- await this.run(["capture", "hook", "response"], {
1774
+ return false;
1775
+ const args = ["capture", "hook", "response"];
1776
+ const exactCaptureId = captureId?.trim();
1777
+ if (exactCaptureId)
1778
+ args.push("--correlation-id", exactCaptureId);
1779
+ const result = await this.run(args, {
1594
1780
  SAGE_RESPONSE: trimmed,
1595
1781
  LAST_RESPONSE: trimmed,
1596
1782
  SAGE_SOURCE: this.config.source ?? "pi",
1597
1783
  SAGE_SESSION_ID: sessionId ?? "",
1784
+ SAGE_DEFER_SUGGESTION_FEEDBACK: "1",
1598
1785
  TOKENS_INPUT: usage.input ?? "",
1599
1786
  TOKENS_OUTPUT: usage.output ?? "",
1600
1787
  }, JSON.stringify({ response: trimmed }), {
1601
1788
  failurePolicy: "silent",
1602
1789
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.capture),
1603
1790
  });
1791
+ return result !== null;
1604
1792
  }
1605
- async recordSuggestionUse(skillKeys, sessionId) {
1793
+ async recordSuggestionUse(skillKeys, sessionId, correlationId) {
1606
1794
  if (this.config.enableRlmFeedback === false)
1607
- return;
1795
+ return false;
1608
1796
  const used = [
1609
1797
  ...new Set(skillKeys.map((key) => key.trim()).filter(Boolean)),
1610
1798
  ];
1611
1799
  if (used.length === 0)
1800
+ return false;
1801
+ const args = [
1802
+ "suggest",
1803
+ "feedback",
1804
+ "use",
1805
+ ...used.flatMap((key) => ["--used", key]),
1806
+ ];
1807
+ const correlation = correlationId?.trim();
1808
+ if (correlation)
1809
+ args.push("--correlation-id", correlation);
1810
+ const result = await this.run(args, {
1811
+ SAGE_SOURCE: this.config.source ?? "pi",
1812
+ SAGE_SESSION_ID: sessionId ?? "",
1813
+ }, undefined, {
1814
+ failurePolicy: "silent",
1815
+ timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1816
+ });
1817
+ return result !== null;
1818
+ }
1819
+ /**
1820
+ * Atomically record use of procedures that Pi loaded natively. This path
1821
+ * intentionally has no fallback to legacy suggestion feedback: the daemon
1822
+ * must authorize every returned qualified record from session-scoped load
1823
+ * evidence and link the complete batch to the exact capture.
1824
+ */
1825
+ async recordNativeSkillUse(skillKeys, sessionId, captureId) {
1826
+ if (this.config.enableRlmFeedback === false)
1827
+ return null;
1828
+ const used = dedupeNativeSkillNames(skillKeys);
1829
+ const session = sessionId?.trim();
1830
+ const capture = captureId?.trim();
1831
+ if (used.length === 0 || !session || !capture)
1832
+ return null;
1833
+ const source = this.config.source?.trim() || "pi";
1834
+ const result = await this.run([
1835
+ "suggest",
1836
+ "feedback",
1837
+ "native-use",
1838
+ ...used.flatMap((key) => ["--used", key]),
1839
+ "--capture-id",
1840
+ capture,
1841
+ "--source",
1842
+ source,
1843
+ "--session",
1844
+ session,
1845
+ "--format",
1846
+ "json",
1847
+ ], {
1848
+ SAGE_SOURCE: source,
1849
+ SAGE_SESSION_ID: session,
1850
+ }, undefined, {
1851
+ failurePolicy: "silent",
1852
+ timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1853
+ });
1854
+ return result
1855
+ ? parseNativeSkillUseResult(result.stdout, capture, used)
1856
+ : null;
1857
+ }
1858
+ /**
1859
+ * Record a daemon load receipt for a full skill procedure this session
1860
+ * loaded through Pi's native full SKILL.md read or sage_execute get. The
1861
+ * structured result only reports `recorded: true` after validating the
1862
+ * explicit CLI's versioned JSON receipt. Ignored and failed writes remain
1863
+ * non-recorded so callers can retry honestly.
1864
+ */
1865
+ async recordSkillLoadSignal(skillKey, sessionId, via = "slash") {
1866
+ if (this.config.enableRlmFeedback === false) {
1867
+ return { ...FAILED_NATIVE_SKILL_LOAD_RESULT };
1868
+ }
1869
+ const key = skillKey.trim();
1870
+ const session = sessionId?.trim();
1871
+ // A receipt is session-scoped evidence. Without the real Pi session id,
1872
+ // the CLI would fall back to ambient env (a foreign harness session) and
1873
+ // record evidence that verifies the WRONG scope — worse than nothing.
1874
+ if (!key || !session)
1875
+ return { ...FAILED_NATIVE_SKILL_LOAD_RESULT };
1876
+ const source = this.config.source?.trim() || "pi";
1877
+ const result = await this.run([
1878
+ "suggest",
1879
+ "load-signal",
1880
+ "--name",
1881
+ key,
1882
+ "--via",
1883
+ via,
1884
+ "--source",
1885
+ source,
1886
+ "--session",
1887
+ session,
1888
+ "--format",
1889
+ "json",
1890
+ ], {
1891
+ SAGE_SOURCE: source,
1892
+ SAGE_SESSION_ID: session,
1893
+ }, undefined, {
1894
+ failurePolicy: "silent",
1895
+ timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1896
+ });
1897
+ if (!result)
1898
+ return { ...FAILED_NATIVE_SKILL_LOAD_RESULT };
1899
+ return (parseNativeSkillLoadResult(result.stdout) ?? {
1900
+ ...FAILED_NATIVE_SKILL_LOAD_RESULT,
1901
+ });
1902
+ }
1903
+ async recordSuggestionSkip(sessionId, correlationId) {
1904
+ if (this.config.enableRlmFeedback === false)
1612
1905
  return;
1613
- await this.run(["suggest", "feedback", "use", ...used.flatMap((key) => ["--used", key])], {
1906
+ const args = ["suggest", "feedback", "skip"];
1907
+ const correlation = correlationId?.trim();
1908
+ if (correlation)
1909
+ args.push("--correlation-id", correlation);
1910
+ await this.run(args, {
1614
1911
  SAGE_SOURCE: this.config.source ?? "pi",
1615
1912
  SAGE_SESSION_ID: sessionId ?? "",
1616
1913
  }, undefined, {
@@ -1618,10 +1915,14 @@ export class SageHookRuntime {
1618
1915
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1619
1916
  });
1620
1917
  }
1621
- async recordSuggestionSkip(sessionId) {
1918
+ async recordSuggestionReject(sessionId, correlationId) {
1622
1919
  if (this.config.enableRlmFeedback === false)
1623
1920
  return;
1624
- await this.run(["suggest", "feedback", "skip"], {
1921
+ const args = ["suggest", "feedback", "reject"];
1922
+ const correlation = correlationId?.trim();
1923
+ if (correlation)
1924
+ args.push("--correlation-id", correlation);
1925
+ await this.run(args, {
1625
1926
  SAGE_SOURCE: this.config.source ?? "pi",
1626
1927
  SAGE_SESSION_ID: sessionId ?? "",
1627
1928
  }, undefined, {
@@ -1629,7 +1930,7 @@ export class SageHookRuntime {
1629
1930
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1630
1931
  });
1631
1932
  }
1632
- async recordExecutionOutcome(skillKey, status, queryPreview, sessionId, _model) {
1933
+ async recordExecutionOutcome(skillKey, status, queryPreview, sessionId, _model, correlationId, captureId) {
1633
1934
  if (this.config.enableRlmFeedback === false)
1634
1935
  return;
1635
1936
  const key = skillKey.trim();
@@ -1639,6 +1940,12 @@ export class SageHookRuntime {
1639
1940
  const preview = queryPreview?.trim();
1640
1941
  if (preview)
1641
1942
  args.push("--query-preview", preview.slice(0, 500));
1943
+ const correlation = correlationId?.trim();
1944
+ if (correlation)
1945
+ args.push("--correlation-id", correlation);
1946
+ const exactCaptureId = captureId?.trim();
1947
+ if (exactCaptureId)
1948
+ args.push("--capture-id", exactCaptureId);
1642
1949
  await this.run(args, {
1643
1950
  SAGE_SOURCE: this.config.source ?? "pi",
1644
1951
  SAGE_SESSION_ID: sessionId ?? "",
@@ -1774,11 +2081,15 @@ export class SageHookRuntime {
1774
2081
  if (this.config.sageProfile) {
1775
2082
  commandEnv.SAGE_PROFILE = this.config.sageProfile;
1776
2083
  }
2084
+ if (this.workingDirectory && !commandEnv.SAGE_WORKSPACE) {
2085
+ commandEnv.SAGE_WORKSPACE = this.workingDirectory;
2086
+ }
1777
2087
  const result = await this.commandRunner({
1778
2088
  command: this.config.sageBin,
1779
2089
  args,
1780
2090
  env: commandEnv,
1781
2091
  stdin,
2092
+ cwd: this.workingDirectory,
1782
2093
  timeoutMs: options.timeoutMs ?? this.config.timeoutMs,
1783
2094
  });
1784
2095
  if (result.timedOut || result.exitCode !== 0) {
@@ -2351,7 +2662,7 @@ async function injectHookMessage(session, customType, content, display = false)
2351
2662
  console.log(`\n[${customType}]\n${trimmed}\n`);
2352
2663
  }
2353
2664
  export function createSageExtensions(options) {
2354
- const { mcpBridge, debounceMs = 800 } = options;
2665
+ const { mcpBridge } = options;
2355
2666
  const hookRuntime = options.hookRuntime ??
2356
2667
  new SageHookRuntime({
2357
2668
  sageBin: options.config.sageBin ?? "sage",
@@ -2375,40 +2686,13 @@ export function createSageExtensions(options) {
2375
2686
  hookRuntime,
2376
2687
  getSessionId: options.getSessionId,
2377
2688
  });
2378
- let currentSuggestions = "";
2379
- let lastInjectionTimestamp = 0;
2380
- let lastSuggestionPrompt = "";
2381
2689
  return {
2382
2690
  customTools,
2383
- sageInjectSuggestion: async (userPrompt, session, sessionId) => {
2384
- const prompt = userPrompt.trim();
2385
- if (!prompt)
2386
- return;
2387
- const now = Date.now();
2388
- if (now - lastInjectionTimestamp < debounceMs)
2389
- return;
2390
- if (prompt === lastSuggestionPrompt)
2391
- return;
2392
- lastInjectionTimestamp = now;
2393
- lastSuggestionPrompt = prompt;
2394
- try {
2395
- const suggestions = await hookRuntime.suggestSkill(prompt, sessionId);
2396
- if (!suggestions.trim())
2397
- return;
2398
- currentSuggestions = suggestions;
2399
- if (session) {
2400
- await injectHookMessage(session, "sage-suggested-skills", suggestions, false);
2401
- }
2402
- }
2403
- catch (error) {
2404
- console.error("[sage-pi-adapter] suggestion hook failed:", error);
2405
- }
2406
- },
2407
- sageClearSuggestions: () => {
2408
- currentSuggestions = "";
2409
- lastSuggestionPrompt = "";
2410
- },
2411
- sageGetSuggestions: () => currentSuggestions,
2691
+ // Preserved for one compatibility release. Pi's native skill surface owns
2692
+ // discovery/loading now, so adapter-side prompt injection must stay inert.
2693
+ sageInjectSuggestion: async (_userPrompt, _session, _sessionId) => { },
2694
+ sageClearSuggestions: () => { },
2695
+ sageGetSuggestions: () => "",
2412
2696
  };
2413
2697
  }
2414
2698
  export async function createSageSessionConfig(config = {}) {
@@ -2487,7 +2771,6 @@ export async function createSageSessionConfig(config = {}) {
2487
2771
  .catch((error) => {
2488
2772
  console.error("[sage-pi-adapter] prompt capture failed:", error);
2489
2773
  });
2490
- void extension.sageInjectSuggestion(content, session, activeSessionId);
2491
2774
  return;
2492
2775
  }
2493
2776
  if (parsed.role === "assistant") {