@aexol/spectral 0.8.5 → 0.8.7

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.
Files changed (160) hide show
  1. package/dist/agent/index.d.ts +1 -1
  2. package/dist/agent/index.d.ts.map +1 -1
  3. package/dist/agent/index.js +11 -11
  4. package/dist/cli.js +1 -1
  5. package/dist/commands/serve.d.ts +3 -3
  6. package/dist/commands/serve.d.ts.map +1 -1
  7. package/dist/commands/serve.js +5 -2
  8. package/dist/config.d.ts +1 -1
  9. package/dist/config.js +1 -1
  10. package/dist/designer/index.d.ts +3 -3
  11. package/dist/designer/index.d.ts.map +1 -1
  12. package/dist/designer/index.js +9 -9
  13. package/dist/extensions/aexol-mcp.d.ts +6 -6
  14. package/dist/extensions/aexol-mcp.d.ts.map +1 -1
  15. package/dist/extensions/aexol-mcp.js +12 -12
  16. package/dist/extensions/kanban-bridge.d.ts +2 -2
  17. package/dist/extensions/kanban-bridge.d.ts.map +1 -1
  18. package/dist/extensions/kanban-bridge.js +3 -3
  19. package/dist/extensions/openrouter-attribution.d.ts +1 -1
  20. package/dist/extensions/openrouter-attribution.d.ts.map +1 -1
  21. package/dist/extensions/openrouter-attribution.js +2 -2
  22. package/dist/extensions/spectral-vision-fallback.d.ts +1 -1
  23. package/dist/extensions/spectral-vision-fallback.d.ts.map +1 -1
  24. package/dist/extensions/spectral-vision-fallback.js +3 -3
  25. package/dist/index.d.ts +4 -4
  26. package/dist/index.js +4 -4
  27. package/dist/mcp/commands.d.ts +1 -1
  28. package/dist/mcp/commands.d.ts.map +1 -1
  29. package/dist/mcp/commands.js +1 -1
  30. package/dist/mcp/config.d.ts +5 -5
  31. package/dist/mcp/config.d.ts.map +1 -1
  32. package/dist/mcp/config.js +15 -15
  33. package/dist/mcp/host-html-template.js +3 -3
  34. package/dist/mcp/index.d.ts +1 -1
  35. package/dist/mcp/index.d.ts.map +1 -1
  36. package/dist/mcp/index.js +15 -13
  37. package/dist/mcp/init.d.ts +1 -1
  38. package/dist/mcp/init.d.ts.map +1 -1
  39. package/dist/mcp/init.js +4 -4
  40. package/dist/mcp/mcp-oauth-provider.js +1 -1
  41. package/dist/mcp/proxy-modes.d.ts +1 -1
  42. package/dist/mcp/proxy-modes.d.ts.map +1 -1
  43. package/dist/mcp/proxy-modes.js +2 -2
  44. package/dist/mcp/server-manager.js +2 -2
  45. package/dist/mcp/state-getter.d.ts +14 -0
  46. package/dist/mcp/state-getter.d.ts.map +1 -0
  47. package/dist/mcp/state-getter.js +21 -0
  48. package/dist/mcp/tool-registrar.js +1 -1
  49. package/dist/mcp/ui-server.js +1 -1
  50. package/dist/mcp/ui-stream-types.d.ts +11 -11
  51. package/dist/mcp/ui-stream-types.d.ts.map +1 -1
  52. package/dist/mcp/ui-stream-types.js +5 -5
  53. package/dist/mcp/utils.d.ts +2 -2
  54. package/dist/mcp/utils.d.ts.map +1 -1
  55. package/dist/mcp/utils.js +10 -10
  56. package/dist/mcp-client.d.ts +1 -1
  57. package/dist/mcp-client.js +1 -1
  58. package/dist/memory/commands/status.d.ts +1 -1
  59. package/dist/memory/commands/status.d.ts.map +1 -1
  60. package/dist/memory/commands/status.js +2 -2
  61. package/dist/memory/commands/view.d.ts +1 -1
  62. package/dist/memory/commands/view.d.ts.map +1 -1
  63. package/dist/memory/commands/view.js +2 -2
  64. package/dist/memory/hooks/compaction-hook.d.ts +1 -1
  65. package/dist/memory/hooks/compaction-hook.d.ts.map +1 -1
  66. package/dist/memory/hooks/compaction-hook.js +5 -5
  67. package/dist/memory/hooks/compaction-trigger.d.ts +1 -1
  68. package/dist/memory/hooks/compaction-trigger.d.ts.map +1 -1
  69. package/dist/memory/hooks/compaction-trigger.js +3 -3
  70. package/dist/memory/hooks/observer-trigger.d.ts +1 -1
  71. package/dist/memory/hooks/observer-trigger.d.ts.map +1 -1
  72. package/dist/memory/hooks/observer-trigger.js +4 -4
  73. package/dist/memory/index.d.ts +1 -1
  74. package/dist/memory/index.d.ts.map +1 -1
  75. package/dist/memory/index.js +9 -9
  76. package/dist/memory/tools/read-project-observations.d.ts +1 -1
  77. package/dist/memory/tools/read-project-observations.d.ts.map +1 -1
  78. package/dist/memory/tools/read-project-observations.js +2 -2
  79. package/dist/memory/tools/recall-observation.d.ts +1 -1
  80. package/dist/memory/tools/recall-observation.d.ts.map +1 -1
  81. package/dist/memory/tools/recall-observation.js +2 -2
  82. package/dist/memory/tools/write-project-observation.d.ts +1 -1
  83. package/dist/memory/tools/write-project-observation.d.ts.map +1 -1
  84. package/dist/memory/tools/write-project-observation.js +2 -2
  85. package/dist/preflight.d.ts +1 -1
  86. package/dist/preflight.js +1 -1
  87. package/dist/relay/auto-research.d.ts +2 -2
  88. package/dist/relay/auto-research.js +34 -34
  89. package/dist/relay/dispatcher.d.ts +15 -6
  90. package/dist/relay/dispatcher.d.ts.map +1 -1
  91. package/dist/relay/dispatcher.js +33 -6
  92. package/dist/relay/models-fetch.d.ts +1 -1
  93. package/dist/relay/models-fetch.js +4 -4
  94. package/dist/sdk/ai/types.d.ts +1 -1
  95. package/dist/sdk/ai/utils/oauth/openai-codex.d.ts +1 -1
  96. package/dist/sdk/ai/utils/oauth/openai-codex.js +2 -2
  97. package/dist/sdk/coding-agent/core/agent-session.d.ts +2 -2
  98. package/dist/sdk/coding-agent/core/agent-session.js +3 -3
  99. package/dist/sdk/coding-agent/core/auth-storage.d.ts +2 -2
  100. package/dist/sdk/coding-agent/core/auth-storage.js +2 -2
  101. package/dist/sdk/coding-agent/core/bash-executor.js +1 -1
  102. package/dist/sdk/coding-agent/core/compaction/branch-summarization.js +1 -1
  103. package/dist/sdk/coding-agent/core/compaction/compaction.js +1 -1
  104. package/dist/sdk/coding-agent/core/extensions/loader.d.ts.map +1 -1
  105. package/dist/sdk/coding-agent/core/extensions/loader.js +18 -22
  106. package/dist/sdk/coding-agent/core/extensions/runner.d.ts.map +1 -1
  107. package/dist/sdk/coding-agent/core/extensions/runner.js +1 -1
  108. package/dist/sdk/coding-agent/core/extensions/types.d.ts +9 -9
  109. package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -1
  110. package/dist/sdk/coding-agent/core/package-manager.d.ts +1 -1
  111. package/dist/sdk/coding-agent/core/package-manager.d.ts.map +1 -1
  112. package/dist/sdk/coding-agent/core/package-manager.js +14 -14
  113. package/dist/sdk/coding-agent/core/sdk.d.ts +1 -1
  114. package/dist/sdk/coding-agent/core/sdk.js +2 -2
  115. package/dist/sdk/coding-agent/core/session-manager.d.ts +2 -2
  116. package/dist/sdk/coding-agent/core/session-manager.d.ts.map +1 -1
  117. package/dist/sdk/coding-agent/core/system-prompt.js +7 -7
  118. package/dist/sdk/coding-agent/core/tools/bash.d.ts +2 -2
  119. package/dist/sdk/coding-agent/core/tools/bash.js +3 -3
  120. package/dist/sdk/coding-agent/core/tools/output-accumulator.js +1 -1
  121. package/dist/sdk/coding-agent/migrations.d.ts +1 -1
  122. package/dist/sdk/coding-agent/migrations.js +4 -4
  123. package/dist/sdk/coding-agent/modes/print-mode.d.ts +2 -2
  124. package/dist/sdk/coding-agent/modes/print-mode.js +2 -2
  125. package/dist/sdk/coding-agent/utils/clipboard-image.js +1 -1
  126. package/dist/sdk/coding-agent/utils/spectral-user-agent.d.ts +2 -0
  127. package/dist/sdk/coding-agent/utils/spectral-user-agent.d.ts.map +1 -0
  128. package/dist/sdk/coding-agent/utils/spectral-user-agent.js +3 -0
  129. package/dist/sdk/coding-agent/utils/version-check.d.ts +5 -5
  130. package/dist/sdk/coding-agent/utils/version-check.d.ts.map +1 -1
  131. package/dist/sdk/coding-agent/utils/version-check.js +7 -7
  132. package/dist/sdk/coding-agent/utils/windows-self-update.js +1 -1
  133. package/dist/server/agent-bridge.d.ts +35 -35
  134. package/dist/server/agent-bridge.d.ts.map +1 -1
  135. package/dist/server/agent-bridge.js +59 -59
  136. package/dist/server/handlers/mcp-status.d.ts +21 -0
  137. package/dist/server/handlers/mcp-status.d.ts.map +1 -0
  138. package/dist/server/handlers/mcp-status.js +52 -0
  139. package/dist/server/handlers/sessions.d.ts +1 -1
  140. package/dist/server/handlers/sessions.js +1 -1
  141. package/dist/server/handlers/settings.d.ts +30 -0
  142. package/dist/server/handlers/settings.d.ts.map +1 -0
  143. package/dist/server/handlers/settings.js +123 -0
  144. package/dist/server/paths.d.ts +2 -2
  145. package/dist/server/paths.js +2 -2
  146. package/dist/server/session-stream.d.ts +25 -25
  147. package/dist/server/session-stream.d.ts.map +1 -1
  148. package/dist/server/session-stream.js +66 -38
  149. package/dist/server/shutdown.d.ts +3 -3
  150. package/dist/server/shutdown.d.ts.map +1 -1
  151. package/dist/server/shutdown.js +3 -3
  152. package/dist/server/storage.d.ts +4 -4
  153. package/dist/server/storage.js +6 -6
  154. package/dist/server/wire.d.ts +8 -8
  155. package/dist/server/wire.d.ts.map +1 -1
  156. package/dist/server/wire.js +1 -1
  157. package/package.json +1 -1
  158. package/dist/sdk/coding-agent/utils/pi-user-agent.d.ts +0 -2
  159. package/dist/sdk/coding-agent/utils/pi-user-agent.d.ts.map +0 -1
  160. package/dist/sdk/coding-agent/utils/pi-user-agent.js +0 -3
package/dist/mcp/utils.js CHANGED
@@ -1,25 +1,25 @@
1
1
  import { homedir, platform } from "node:os";
2
2
  import { join } from "node:path";
3
- async function execOpen(pi, target, browser) {
3
+ async function execOpen(ext, target, browser) {
4
4
  const os = platform();
5
5
  if (os === "darwin") {
6
- return browser ? pi.exec("open", ["-a", browser, target]) : pi.exec("open", [target]);
6
+ return browser ? ext.exec("open", ["-a", browser, target]) : ext.exec("open", [target]);
7
7
  }
8
8
  if (os === "win32") {
9
9
  return browser
10
- ? pi.exec("cmd", ["/c", "start", "", browser, target])
11
- : pi.exec("cmd", ["/c", "start", "", target]);
10
+ ? ext.exec("cmd", ["/c", "start", "", browser, target])
11
+ : ext.exec("cmd", ["/c", "start", "", target]);
12
12
  }
13
- return browser ? pi.exec(browser, [target]) : pi.exec("xdg-open", [target]);
13
+ return browser ? ext.exec(browser, [target]) : ext.exec("xdg-open", [target]);
14
14
  }
15
- export async function openUrl(pi, url, browser) {
16
- const result = await execOpen(pi, url, browser);
15
+ export async function openUrl(ext, url, browser) {
16
+ const result = await execOpen(ext, url, browser);
17
17
  if (result.code !== 0) {
18
18
  throw new Error(result.stderr || `Failed to open browser (exit code ${result.code})`);
19
19
  }
20
20
  }
21
- export async function openPath(pi, targetPath) {
22
- const result = await execOpen(pi, targetPath);
21
+ export async function openPath(ext, targetPath) {
22
+ const result = await execOpen(ext, targetPath);
23
23
  if (result.code !== 0) {
24
24
  throw new Error(result.stderr || `Failed to open path (exit code ${result.code})`);
25
25
  }
@@ -96,7 +96,7 @@ export function extractToolUiStreamMode(toolMeta) {
96
96
  const uiMeta = toolMeta?.ui;
97
97
  if (!uiMeta || typeof uiMeta !== "object")
98
98
  return undefined;
99
- const streamMode = uiMeta["pi-mcp-adapter.streamMode"];
99
+ const streamMode = uiMeta["spectral-mcp-adapter.streamMode"];
100
100
  if (streamMode === "eager" || streamMode === "stream-first") {
101
101
  return streamMode;
102
102
  }
@@ -51,7 +51,7 @@ export declare class AexolMcpClient {
51
51
  listTools(): Promise<McpTool[]>;
52
52
  /**
53
53
  * Invoke a single tool. Returns the raw `{ content, isError? }` envelope —
54
- * the caller (the pi extension) decides how to surface it back to the model.
54
+ * the caller (the spectral extension) decides how to surface it back to the model.
55
55
  */
56
56
  callTool(name: string, args: unknown): Promise<McpToolCallResult>;
57
57
  }
@@ -101,7 +101,7 @@ export class AexolMcpClient {
101
101
  }
102
102
  /**
103
103
  * Invoke a single tool. Returns the raw `{ content, isError? }` envelope —
104
- * the caller (the pi extension) decides how to surface it back to the model.
104
+ * the caller (the spectral extension) decides how to surface it back to the model.
105
105
  */
106
106
  async callTool(name, args) {
107
107
  const result = await this.call("tools/call", {
@@ -1,4 +1,4 @@
1
1
  import type { ExtensionAPI } from "../../sdk/coding-agent/index.js";
2
2
  import type { Runtime } from "../runtime.js";
3
- export declare function registerStatusCommand(pi: ExtensionAPI, runtime: Runtime): void;
3
+ export declare function registerStatusCommand(ext: ExtensionAPI, runtime: Runtime): void;
4
4
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/memory/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AASpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA6F9E"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/memory/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AASpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA6F/E"}
@@ -4,8 +4,8 @@ import { observationPoolTokens as estimateObservationPoolTokens } from "../compa
4
4
  import { countByRelevance, formatRelevanceHistogram } from "../relevance.js";
5
5
  import { estimateStringTokens } from "../tokens.js";
6
6
  import { reflectionContent } from "../types.js";
7
- export function registerStatusCommand(pi, runtime) {
8
- pi.registerCommand("om-status", {
7
+ export function registerStatusCommand(ext, runtime) {
8
+ ext.registerCommand("om-status", {
9
9
  description: "Show observational memory status",
10
10
  handler: async (_args, ctx) => {
11
11
  runtime.ensureConfig(ctx.cwd);
@@ -1,4 +1,4 @@
1
1
  import type { ExtensionAPI } from "../../sdk/coding-agent/index.js";
2
2
  import type { Runtime } from "../runtime.js";
3
- export declare function registerViewCommand(pi: ExtensionAPI, runtime: Runtime): void;
3
+ export declare function registerViewCommand(ext: ExtensionAPI, runtime: Runtime): void;
4
4
  //# sourceMappingURL=view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/memory/commands/view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAUpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA0E5E"}
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/memory/commands/view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAUpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA0E7E"}
@@ -3,8 +3,8 @@ import { observationPoolTokens as estimateObservationPoolTokens, observationsToM
3
3
  import { countByRelevance, formatRelevanceHistogram } from "../relevance.js";
4
4
  import { estimateStringTokens } from "../tokens.js";
5
5
  import { reflectionContent } from "../types.js";
6
- export function registerViewCommand(pi, runtime) {
7
- pi.registerCommand("om-view", {
6
+ export function registerViewCommand(ext, runtime) {
7
+ ext.registerCommand("om-view", {
8
8
  description: "Print observational memory details (reflections + observations)",
9
9
  handler: async (_args, ctx) => {
10
10
  runtime.ensureConfig(ctx.cwd);
@@ -1,4 +1,4 @@
1
1
  import type { ExtensionAPI } from "../../sdk/coding-agent/index.js";
2
2
  import type { Runtime } from "../runtime.js";
3
- export declare function registerCompactionHook(pi: ExtensionAPI, runtime: Runtime): void;
3
+ export declare function registerCompactionHook(ext: ExtensionAPI, runtime: Runtime): void;
4
4
  //# sourceMappingURL=compaction-hook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compaction-hook.d.ts","sourceRoot":"","sources":["../../../src/memory/hooks/compaction-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AAsBtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA6B7C,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA2V/E"}
1
+ {"version":3,"file":"compaction-hook.d.ts","sourceRoot":"","sources":["../../../src/memory/hooks/compaction-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AAsBtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA6B7C,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA2VhF"}
@@ -20,8 +20,8 @@ function formatReflectorStats(stats) {
20
20
  function formatPrunerStats(result) {
21
21
  return `pruner dropped ${plural(result.droppedIds.length, "observation")} in ${plural(result.passes.length, "pass", "passes")}, stop: ${result.stopReason}`;
22
22
  }
23
- export function registerCompactionHook(pi, runtime) {
24
- pi.on("session_before_compact", async (event, ctx) => {
23
+ export function registerCompactionHook(ext, runtime) {
24
+ ext.on("session_before_compact", async (event, ctx) => {
25
25
  if (runtime.compactHookInFlight) {
26
26
  if (ctx.hasUI)
27
27
  ctx.ui.notify("Observational memory: another compaction is already in progress; cancelling duplicate", "warning");
@@ -124,7 +124,7 @@ export function registerCompactionHook(pi, runtime) {
124
124
  coversUpToId: gapUpToId,
125
125
  records,
126
126
  });
127
- pi.appendEntry(OBSERVATION_CUSTOM_TYPE, gapObservationData);
127
+ ext.appendEntry(OBSERVATION_CUSTOM_TYPE, gapObservationData);
128
128
  if (hasUI && ui)
129
129
  ui.notify(`Observational memory: sync catch-up recorded ${records.length} observation${records.length === 1 ? "" : "s"} (~${observationTokens.toLocaleString()} tokens)`, "info");
130
130
  }
@@ -161,7 +161,7 @@ export function registerCompactionHook(pi, runtime) {
161
161
  });
162
162
  if (deltaObservationData.length === 0) {
163
163
  // No new observations since last compaction. If we have existing memory,
164
- // carry it forward in a no-op compaction so it survives Pi's compaction.
164
+ // carry it forward in a no-op compaction so it survives spectral's compaction.
165
165
  // If there is truly nothing (no prior memory either), cancel.
166
166
  if (memoryState.committedObs.length === 0 && memoryState.reflections.length === 0) {
167
167
  debugLog("compaction.no_delta_cancel", {
@@ -296,7 +296,7 @@ export function registerCompactionHook(pi, runtime) {
296
296
  function persistProjectObservations(ctx, reflections) {
297
297
  const store = getProjectObsStore();
298
298
  if (!store)
299
- return; // Not available in standalone pi mode.
299
+ return; // Not available in standalone spectral mode.
300
300
  const projectId = store.getProjectByCwd(ctx.cwd);
301
301
  if (!projectId)
302
302
  return; // No project registered for this cwd.
@@ -1,4 +1,4 @@
1
1
  import type { ExtensionAPI } from "../../sdk/coding-agent/index.js";
2
2
  import type { Runtime } from "../runtime.js";
3
- export declare function registerCompactionTrigger(pi: ExtensionAPI, runtime: Runtime): void;
3
+ export declare function registerCompactionTrigger(ext: ExtensionAPI, runtime: Runtime): void;
4
4
  //# sourceMappingURL=compaction-trigger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compaction-trigger.d.ts","sourceRoot":"","sources":["../../../src/memory/hooks/compaction-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAU7C,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAsFlF"}
1
+ {"version":3,"file":"compaction-trigger.d.ts","sourceRoot":"","sources":["../../../src/memory/hooks/compaction-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAU7C,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAsFnF"}
@@ -1,12 +1,12 @@
1
1
  import { rawTokensSinceLastCompaction } from "../branch.js";
2
2
  /**
3
- * Regex matching Pi's internal retryable error detection.
3
+ * Regex matching spectral's internal retryable error detection.
4
4
  * When the last assistant message in agent_end has stopReason "error" matching this pattern,
5
5
  * Pi will auto-retry — we must not trigger compaction between attempts.
6
6
  */
7
7
  const RETRYABLE_ERROR_RE = /overloaded|provider.?returned.?error|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|network.?error|connection.?error|connection.?refused|connection.?lost|websocket.?closed|websocket.?error|other side closed|fetch failed|upstream.?connect|reset before headers|socket hang up|ended without|http2 request did not get a response|timed? out|timeout|terminated|retry delay/i;
8
- export function registerCompactionTrigger(pi, runtime) {
9
- pi.on("agent_end", (event, ctx) => {
8
+ export function registerCompactionTrigger(ext, runtime) {
9
+ ext.on("agent_end", (event, ctx) => {
10
10
  runtime.ensureConfig(ctx.cwd);
11
11
  if (runtime.config.passive === true)
12
12
  return;
@@ -1,4 +1,4 @@
1
1
  import type { ExtensionAPI } from "../../sdk/coding-agent/index.js";
2
2
  import type { Runtime } from "../runtime.js";
3
- export declare function registerObserverTrigger(pi: ExtensionAPI, runtime: Runtime): void;
3
+ export declare function registerObserverTrigger(ext: ExtensionAPI, runtime: Runtime): void;
4
4
  //# sourceMappingURL=observer-trigger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"observer-trigger.d.ts","sourceRoot":"","sources":["../../../src/memory/hooks/observer-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAWpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAK7C,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAyKhF"}
1
+ {"version":3,"file":"observer-trigger.d.ts","sourceRoot":"","sources":["../../../src/memory/hooks/observer-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAWpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAK7C,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAyKjF"}
@@ -5,8 +5,8 @@ import { observationsToPromptLines, runObserver } from "../observer.js";
5
5
  import { serializeSourceAddressedBranchEntries } from "../serialize.js";
6
6
  import { estimateEntryTokens, estimateStringTokens } from "../tokens.js";
7
7
  import { OBSERVATION_CUSTOM_TYPE, reflectionToPromptLine } from "../types.js";
8
- export function registerObserverTrigger(pi, runtime) {
9
- pi.on("turn_end", (_event, ctx) => {
8
+ export function registerObserverTrigger(ext, runtime) {
9
+ ext.on("turn_end", (_event, ctx) => {
10
10
  process.stderr.write("[obs-mem] turn_end fired\n");
11
11
  runtime.ensureConfig(ctx.cwd);
12
12
  if (runtime.config.passive === true) {
@@ -125,7 +125,7 @@ export function registerObserverTrigger(pi, runtime) {
125
125
  coversUpToId: effectiveCoversUpToId,
126
126
  tokenCount: 0,
127
127
  };
128
- pi.appendEntry(OBSERVATION_CUSTOM_TYPE, placeholderData);
128
+ ext.appendEntry(OBSERVATION_CUSTOM_TYPE, placeholderData);
129
129
  debugLog("observer.empty_placeholder", { coversFromId, coversUpToId: effectiveCoversUpToId });
130
130
  if (hasUI && ui)
131
131
  ui.notify("Observational memory: observer returned no observations; bound advanced to prevent re-processing", "warning");
@@ -145,7 +145,7 @@ export function registerObserverTrigger(pi, runtime) {
145
145
  coversUpToId: effectiveCoversUpToId,
146
146
  records,
147
147
  });
148
- pi.appendEntry(OBSERVATION_CUSTOM_TYPE, data);
148
+ ext.appendEntry(OBSERVATION_CUSTOM_TYPE, data);
149
149
  debugLog("observer.appended", { count: records.length, tokenCount: observationTokens, coversFromId, coversUpToId: effectiveCoversUpToId });
150
150
  if (hasUI && ui)
151
151
  ui.notify(`Observational memory: ${records.length} observation${records.length === 1 ? "" : "s"} recorded (~${observationTokens.toLocaleString()} tokens)`, "info");
@@ -1,3 +1,3 @@
1
1
  import type { ExtensionAPI } from "../sdk/coding-agent/index.js";
2
- export default function observationalMemory(pi: ExtensionAPI): void;
2
+ export default function observationalMemory(ext: ExtensionAPI): void;
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAWjE,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,EAAE,YAAY,QAe3D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAWjE,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,GAAG,EAAE,YAAY,QAe5D"}
@@ -7,16 +7,16 @@ import { Runtime } from "./runtime.js";
7
7
  import { registerRecallTool } from "./tools/recall-observation.js";
8
8
  import { registerReadProjectObservationsTool } from "./tools/read-project-observations.js";
9
9
  import { registerWriteProjectObservationTool } from "./tools/write-project-observation.js";
10
- export default function observationalMemory(pi) {
10
+ export default function observationalMemory(ext) {
11
11
  const runtime = new Runtime();
12
12
  // Log extension load so we can confirm it's running in serve mode.
13
13
  process.stderr.write("[obs-mem] extension loaded\n");
14
- registerObserverTrigger(pi, runtime);
15
- registerCompactionTrigger(pi, runtime);
16
- registerCompactionHook(pi, runtime);
17
- registerStatusCommand(pi, runtime);
18
- registerViewCommand(pi, runtime);
19
- registerRecallTool(pi);
20
- registerReadProjectObservationsTool(pi);
21
- registerWriteProjectObservationTool(pi);
14
+ registerObserverTrigger(ext, runtime);
15
+ registerCompactionTrigger(ext, runtime);
16
+ registerCompactionHook(ext, runtime);
17
+ registerStatusCommand(ext, runtime);
18
+ registerViewCommand(ext, runtime);
19
+ registerRecallTool(ext);
20
+ registerReadProjectObservationsTool(ext);
21
+ registerWriteProjectObservationTool(ext);
22
22
  }
@@ -4,5 +4,5 @@ export declare const READ_PROJECT_OBSERVATIONS_TOOL_NAME = "read_project_observa
4
4
  export declare const readProjectObservationsTool: import("../../sdk/coding-agent/index.js").ToolDefinition<Type.TObject<{
5
5
  query: Type.TString;
6
6
  }>, unknown> & import("../../sdk/coding-agent/index.js").ToolDefinition<any, any>;
7
- export declare function registerReadProjectObservationsTool(pi: ExtensionAPI): void;
7
+ export declare function registerReadProjectObservationsTool(ext: ExtensionAPI): void;
8
8
  //# sourceMappingURL=read-project-observations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-project-observations.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/read-project-observations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGhF,eAAO,MAAM,mCAAmC,8BAA8B,CAAC;AAE/E,eAAO,MAAM,2BAA2B;;iFAqFtC,CAAC;AAEH,wBAAgB,mCAAmC,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAE1E"}
1
+ {"version":3,"file":"read-project-observations.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/read-project-observations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGhF,eAAO,MAAM,mCAAmC,8BAA8B,CAAC;AAE/E,eAAO,MAAM,2BAA2B;;iFAqFtC,CAAC;AAEH,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAE3E"}
@@ -77,6 +77,6 @@ export const readProjectObservationsTool = defineTool({
77
77
  };
78
78
  },
79
79
  });
80
- export function registerReadProjectObservationsTool(pi) {
81
- pi.registerTool(readProjectObservationsTool);
80
+ export function registerReadProjectObservationsTool(ext) {
81
+ ext.registerTool(readProjectObservationsTool);
82
82
  }
@@ -58,6 +58,6 @@ export type RecallObservationToolDetails = {
58
58
  export declare const recallObservationTool: import("../../sdk/coding-agent/index.js").ToolDefinition<Type.TObject<{
59
59
  id: Type.TString;
60
60
  }>, unknown> & import("../../sdk/coding-agent/index.js").ToolDefinition<any, any>;
61
- export declare function registerRecallTool(pi: ExtensionAPI): void;
61
+ export declare function registerRecallTool(ext: ExtensionAPI): void;
62
62
  export {};
63
63
  //# sourceMappingURL=recall-observation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recall-observation.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/recall-observation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,EAGN,KAAK,uBAAuB,EAE5B,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvE,eAAO,MAAM,4BAA4B,WAAW,CAAC;AAIrD,KAAK,2BAA2B,GAC7B,IAAI,GACJ,SAAS,GACT,YAAY,GACZ,WAAW,GACX,WAAW,GACX,oBAAoB,GACpB,eAAe,CAAC;AAEnB,KAAK,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC;AAChG,KAAK,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,SAAS,GAAG,0BAA0B,GAAG,QAAQ,CAAC,GAAG;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAExI,MAAM,MAAM,wBAAwB,GAAG;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,6BAA6B,GAAG;IACpC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC1C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC3C,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,KAAK,6CAA6C,GAAG;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,4CAA4C,GAAG;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IAC1C,MAAM,EAAE,2BAA2B,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,wBAAwB,EAAE,6BAA6B,EAAE,CAAC;IAC1D,YAAY,EAAE,6BAA6B,EAAE,CAAC;IAC9C,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACzC,aAAa,EAAE,wBAAwB,EAAE,CAAC;IAC1C,iCAAiC,EAAE,6CAA6C,EAAE,CAAC;IACnF,+BAA+B,EAAE,4CAA4C,EAAE,CAAC;IAChF,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAuUF,eAAO,MAAM,qBAAqB;;iFAuChC,CAAC;AAEH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAEzD"}
1
+ {"version":3,"file":"recall-observation.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/recall-observation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,EAGN,KAAK,uBAAuB,EAE5B,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvE,eAAO,MAAM,4BAA4B,WAAW,CAAC;AAIrD,KAAK,2BAA2B,GAC7B,IAAI,GACJ,SAAS,GACT,YAAY,GACZ,WAAW,GACX,WAAW,GACX,oBAAoB,GACpB,eAAe,CAAC;AAEnB,KAAK,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC;AAChG,KAAK,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,SAAS,GAAG,0BAA0B,GAAG,QAAQ,CAAC,GAAG;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAExI,MAAM,MAAM,wBAAwB,GAAG;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,6BAA6B,GAAG;IACpC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC1C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC3C,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,KAAK,6CAA6C,GAAG;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,4CAA4C,GAAG;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IAC1C,MAAM,EAAE,2BAA2B,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,wBAAwB,EAAE,6BAA6B,EAAE,CAAC;IAC1D,YAAY,EAAE,6BAA6B,EAAE,CAAC;IAC9C,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACzC,aAAa,EAAE,wBAAwB,EAAE,CAAC;IAC1C,iCAAiC,EAAE,6CAA6C,EAAE,CAAC;IACnF,+BAA+B,EAAE,4CAA4C,EAAE,CAAC;IAChF,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAuUF,eAAO,MAAM,qBAAqB;;iFAuChC,CAAC;AAEH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAE1D"}
@@ -348,6 +348,6 @@ export const recallObservationTool = defineTool({
348
348
  return renderFoundResult(result);
349
349
  },
350
350
  });
351
- export function registerRecallTool(pi) {
352
- pi.registerTool(recallObservationTool);
351
+ export function registerRecallTool(ext) {
352
+ ext.registerTool(recallObservationTool);
353
353
  }
@@ -5,5 +5,5 @@ export declare const writeProjectObservationTool: import("../../sdk/coding-agent
5
5
  content: Type.TString;
6
6
  relevance: Type.TUnion<[Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">, Type.TLiteral<"critical">]>;
7
7
  }>, unknown> & import("../../sdk/coding-agent/index.js").ToolDefinition<any, any>;
8
- export declare function registerWriteProjectObservationTool(pi: ExtensionAPI): void;
8
+ export declare function registerWriteProjectObservationTool(ext: ExtensionAPI): void;
9
9
  //# sourceMappingURL=write-project-observation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"write-project-observation.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/write-project-observation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAIhF,eAAO,MAAM,mCAAmC,8BAA8B,CAAC;AAE/E,eAAO,MAAM,2BAA2B;;;iFA6DtC,CAAC;AAEH,wBAAgB,mCAAmC,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAE1E"}
1
+ {"version":3,"file":"write-project-observation.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/write-project-observation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAIhF,eAAO,MAAM,mCAAmC,8BAA8B,CAAC;AAE/E,eAAO,MAAM,2BAA2B;;;iFA6DtC,CAAC;AAEH,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAE3E"}
@@ -55,6 +55,6 @@ export const writeProjectObservationTool = defineTool({
55
55
  };
56
56
  },
57
57
  });
58
- export function registerWriteProjectObservationTool(pi) {
59
- pi.registerTool(writeProjectObservationTool);
58
+ export function registerWriteProjectObservationTool(ext) {
59
+ ext.registerTool(writeProjectObservationTool);
60
60
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Shared pre-flight check: every authenticated `spectral` subcommand (and the
3
- * fall-through to pi) must verify that credentials exist in
3
+ * fall-through to spectral) must verify that credentials exist in
4
4
  * `~/.spectral/config.json` before proceeding.
5
5
  *
6
6
  * Extracted from `cli.ts` so `serve` (and any future subcommand) reuses the
package/dist/preflight.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Shared pre-flight check: every authenticated `spectral` subcommand (and the
3
- * fall-through to pi) must verify that credentials exist in
3
+ * fall-through to spectral) must verify that credentials exist in
4
4
  * `~/.spectral/config.json` before proceeding.
5
5
  *
6
6
  * Extracted from `cli.ts` so `serve` (and any future subcommand) reuses the
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Auto-research handler — sends an auto-research task through the existing
3
- * AgentBridge (backend proxy) instead of spawning a separate pi process.
3
+ * AgentBridge (backend proxy) instead of spawning a separate spectral process.
4
4
  *
5
5
  * This ensures auto-research uses the same model and API keys as the active
6
6
  * session — no separate subprocess, no missing API key errors.
@@ -56,7 +56,7 @@ export interface AutoResearchExtension {
56
56
  * rather than thrown.
57
57
  *
58
58
  * This replaces the old subprocess-spawning approach. Instead of launching
59
- * a separate pi process (which lacks backend proxy credentials), we send
59
+ * a separate spectral process (which lacks backend proxy credentials), we send
60
60
  * the auto-research task through the session's existing AgentBridge. The agent
61
61
  * uses the session's model, backend proxy, and all available tools.
62
62
  */
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Auto-research handler — sends an auto-research task through the existing
3
- * AgentBridge (backend proxy) instead of spawning a separate pi process.
3
+ * AgentBridge (backend proxy) instead of spawning a separate spectral process.
4
4
  *
5
5
  * This ensures auto-research uses the same model and API keys as the active
6
6
  * session — no separate subprocess, no missing API key errors.
@@ -283,7 +283,7 @@ function buildAutoResearchTask(projectPath, projectName, preRunContext = null) {
283
283
  "## Pi Extension API Reference (HARD-CODED — DO NOT RESEARCH)",
284
284
  "",
285
285
  "This section is the canonical extension API. Use it directly — do NOT research",
286
- "pi internals. For the full guide, see `cli-node/docs/extensions.md` in the pi repo.",
286
+ "spectral internals. For the full guide, see `cli-node/docs/extensions.md` in the spectral repo.",
287
287
  "",
288
288
  "### Extension Entry Point",
289
289
  "",
@@ -291,7 +291,7 @@ function buildAutoResearchTask(projectPath, projectName, preRunContext = null) {
291
291
  "",
292
292
  "```typescript",
293
293
  "import type { ExtensionAPI, ToolDefinition } from \"@aexol/spectral\";",
294
- "export default function activate(pi: ExtensionAPI): void {",
294
+ "export default function activate(ext: ExtensionAPI): void {",
295
295
  " // Register tools, commands, event handlers here",
296
296
  "}",
297
297
  "```",
@@ -299,14 +299,14 @@ function buildAutoResearchTask(projectPath, projectName, preRunContext = null) {
299
299
  "Extensions live in: `.spectral/extensions/` (project-local) or `~/.spectral/agent/extensions/` (user-global).",
300
300
  "Auto-research generates extensions into `.spectral/extensions/auto-research/<name>/`.",
301
301
  "",
302
- "### Tools: pi.registerTool(tool)",
302
+ "### Tools: ext.registerTool(tool)",
303
303
  "",
304
304
  "The primary extension mechanism. Tools become callable by the LLM.",
305
305
  "",
306
306
  "```typescript",
307
307
  "import { Type } from \"typebox\"; // Built-in, zero-dependency schema validation",
308
308
  "",
309
- "pi.registerTool({",
309
+ "ext.registerTool({",
310
310
  " name: \"tool_name\", // snake_case, globally unique",
311
311
  " label: \"Tool Name\", // Human-readable label for UI",
312
312
  " description: \"What this tool does\", // Used by the LLM to decide when to call",
@@ -364,21 +364,21 @@ function buildAutoResearchTask(projectPath, projectName, preRunContext = null) {
364
364
  "}",
365
365
  "```",
366
366
  "",
367
- "### Commands: pi.registerCommand(name, options)",
367
+ "### Commands: ext.registerCommand(name, options)",
368
368
  "",
369
369
  "Register slash-commands invoked as `/command-name`:",
370
370
  "",
371
371
  "```typescript",
372
- "pi.registerCommand({",
372
+ "ext.registerCommand({",
373
373
  " name: \"my-command\",",
374
374
  " description: \"What /my-command does\",",
375
- " async execute(args: string[], ctx: ExtensionContext) {",
375
+ " async execute(args: string, ctx: ExtensionContext) {",
376
376
  " return { content: [{ type: \"text\", text: \"Done\" }] };",
377
377
  " },",
378
378
  "});",
379
379
  "```",
380
380
  "",
381
- "### Events: pi.on(eventType, handler)",
381
+ "### Events: ext.on(eventType, handler)",
382
382
  "",
383
383
  "Hook into the agent lifecycle. Handlers can observe, modify (return result), or block.",
384
384
  "",
@@ -414,27 +414,27 @@ function buildAutoResearchTask(projectPath, projectName, preRunContext = null) {
414
414
  "| `after_provider_response` | After provider API response | — |",
415
415
  "",
416
416
  "```typescript",
417
- "pi.on(\"before_agent_start\", (event, ctx) => {",
417
+ "ext.on(\"before_agent_start\", (event, ctx) => {",
418
418
  " // Inject extra instructions into every turn:",
419
419
  " return { systemPrompt: event.systemPrompt + \"\\nExtra rules...\" };",
420
420
  "});",
421
421
  "",
422
- "pi.on(\"tool_call\", (event, ctx) => {",
422
+ "ext.on(\"tool_call\", (event, ctx) => {",
423
423
  " // event.name, event.params, event.toolCallId",
424
424
  " // Return { blocked: true, reason: \"...\" } to block",
425
425
  " // Return { params: {...} } to mutate input",
426
426
  "});",
427
427
  "```",
428
428
  "",
429
- "### Actions: pi.sendMessage / pi.sendUserMessage / pi.exec",
429
+ "### Actions: ext.sendMessage / ext.sendUserMessage / ext.exec",
430
430
  "",
431
431
  "```typescript",
432
432
  "// Send custom messages into the session stream:",
433
- "pi.sendMessage({ customType: \"my-event\", content: \"Something happened!\", display: \"Notification\", details: {} });",
434
- "pi.sendUserMessage(\"Continue with the task.\");",
433
+ "ext.sendMessage({ customType: \"my-event\", content: \"Something happened!\", display: \"Notification\", details: {} });",
434
+ "ext.sendUserMessage(\"Continue with the task.\");",
435
435
  "",
436
436
  "// Run a shell command:",
437
- "const result = await pi.exec(\"npm\", [\"test\"], { cwd: \"/path\" });",
437
+ "const result = await ext.exec(\"npm\", [\"test\"], { cwd: \"/path\" });",
438
438
  "// result.exitCode, result.stdout, result.stderr",
439
439
  "```",
440
440
  "",
@@ -442,26 +442,26 @@ function buildAutoResearchTask(projectPath, projectName, preRunContext = null) {
442
442
  "",
443
443
  "```typescript",
444
444
  "// Get/set thinking level (off | minimal | low | medium | high)",
445
- "pi.getThinkingLevel();",
446
- "pi.setThinkingLevel(\"high\");",
445
+ "ext.getThinkingLevel();",
446
+ "ext.setThinkingLevel(\"high\");",
447
447
  "",
448
448
  "// Tool visibility management",
449
- "pi.getActiveTools(); // string[] — currently enabled tool names",
450
- "pi.getAllTools(); // ToolInfo[] — all registered tools",
451
- "pi.setActiveTools([\"bash\", \"read\", \"write\", \"edit\", \"my_tool\"]);",
449
+ "ext.getActiveTools(); // string[] — currently enabled tool names",
450
+ "ext.getAllTools(); // ToolInfo[] — all registered tools",
451
+ "ext.setActiveTools([\"bash\", \"read\", \"write\", \"edit\", \"my_tool\"]);",
452
452
  "```",
453
453
  "",
454
- "### CLI Flags: pi.registerFlag",
454
+ "### CLI Flags: ext.registerFlag",
455
455
  "",
456
456
  "```typescript",
457
- "pi.registerFlag(\"api-endpoint\", { description: \"Override API endpoint\", type: \"string\" });",
458
- "const endpoint = pi.getFlag(\"api-endpoint\") as string;",
457
+ "ext.registerFlag(\"api-endpoint\", { description: \"Override API endpoint\", type: \"string\" });",
458
+ "const endpoint = ext.getFlag(\"api-endpoint\") as string;",
459
459
  "```",
460
460
  "",
461
- "### Provider Registration: pi.registerProvider",
461
+ "### Provider Registration: ext.registerProvider",
462
462
  "",
463
463
  "```typescript",
464
- "pi.registerProvider(\"my-proxy\", {",
464
+ "ext.registerProvider(\"my-proxy\", {",
465
465
  " baseUrl: \"https://proxy.example.com\",",
466
466
  " apiKey: \"sk-...\",",
467
467
  " api: \"anthropic-messages\",",
@@ -471,10 +471,10 @@ function buildAutoResearchTask(projectPath, projectName, preRunContext = null) {
471
471
  "});",
472
472
  "```",
473
473
  "",
474
- "### Keyboard Shortcuts: pi.registerShortcut",
474
+ "### Keyboard Shortcuts: ext.registerShortcut",
475
475
  "",
476
476
  "```typescript",
477
- "pi.registerShortcut(\"ctrl+shift+k\", { description: \"Run custom action\", handler(ctx) { /* ... */ } });",
477
+ "ext.registerShortcut(\"ctrl+shift+k\", { description: \"Run custom action\", handler(ctx) { /* ... */ } });",
478
478
  "```",
479
479
  "",
480
480
  "### The ExtensionContext (ctx)",
@@ -506,7 +506,7 @@ function buildAutoResearchTask(projectPath, projectName, preRunContext = null) {
506
506
  "- All `node:*` built-ins: `fs`, `path`, `child_process`, `os`, `crypto`, etc.",
507
507
  "- Any npm package already in the project's node_modules",
508
508
  "",
509
- "### Pi's Built-in Tools (what the agent already has — DO NOT reimplement)",
509
+ "### spectral's Built-in Tools (what the agent already has — DO NOT reimplement)",
510
510
  "",
511
511
  "- `read` — Read file contents",
512
512
  "- `write` — Create/overwrite files",
@@ -525,7 +525,7 @@ function buildAutoResearchTask(projectPath, projectName, preRunContext = null) {
525
525
  "```",
526
526
  ".spectral/extensions/auto-research/",
527
527
  " <extension-name>/",
528
- " index.ts # Entry point — default export activate(pi)",
528
+ " index.ts # Entry point — default export activate(ext)",
529
529
  " utils.ts # [optional] Helper functions",
530
530
  " state.json # [optional] Persisted state (for stateful extensions)",
531
531
  "```",
@@ -534,8 +534,8 @@ function buildAutoResearchTask(projectPath, projectName, preRunContext = null) {
534
534
  "",
535
535
  "1. **Shell wrapper** — Use `execSync` from \"node:child_process\" to run project commands",
536
536
  "2. **File processor** — Use `node:fs` to read/write project files",
537
- "3. **LLM-powered** — Use `pi.modelRegistry` to call AI models for smart processing",
538
- "4. **Event listener** — Use `pi.on()` to react to agent lifecycle events",
537
+ "3. **LLM-powered** — Use `ext.modelRegistry` to call AI models for smart processing",
538
+ "4. **Event listener** — Use `ext.on()` to react to agent lifecycle events",
539
539
  "5. **Stateful** — Use `node:fs` to persist state as JSON between calls",
540
540
  "6. **Subagent** — Use the `subagent` tool for isolated analysis tasks",
541
541
  "",
@@ -556,8 +556,8 @@ function buildAutoResearchTask(projectPath, projectName, preRunContext = null) {
556
556
  " - Could LLM-powered extensions improve developer workflows?",
557
557
  "",
558
558
  "3. **Extension Generation** — Create extension .ts files:",
559
- " - Use `pi.registerTool()` for simple tools with TypeBox validation",
560
- " - Use `pi.registerCommand()` for custom slash commands",
559
+ " - Use `ext.registerTool()` for simple tools with TypeBox validation",
560
+ " - Use `ext.registerCommand()` for custom slash commands",
561
561
  " - For LLM-powered extensions, use `ctx.modelRegistry` to call models",
562
562
  " - Create files under `.spectral/extensions/auto-research/<name>/`",
563
563
  " - Each extension needs an `index.ts` that registers its tools/commands",
@@ -685,7 +685,7 @@ const AR_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes — generous for LLM-based a
685
685
  * rather than thrown.
686
686
  *
687
687
  * This replaces the old subprocess-spawning approach. Instead of launching
688
- * a separate pi process (which lacks backend proxy credentials), we send
688
+ * a separate spectral process (which lacks backend proxy credentials), we send
689
689
  * the auto-research task through the session's existing AgentBridge. The agent
690
690
  * uses the session's model, backend proxy, and all available tools.
691
691
  */