@aexol/spectral 0.8.5 → 0.8.6

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 (158) 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/sdk/ai/types.d.ts +1 -1
  93. package/dist/sdk/ai/utils/oauth/openai-codex.d.ts +1 -1
  94. package/dist/sdk/ai/utils/oauth/openai-codex.js +2 -2
  95. package/dist/sdk/coding-agent/core/agent-session.d.ts +2 -2
  96. package/dist/sdk/coding-agent/core/agent-session.js +3 -3
  97. package/dist/sdk/coding-agent/core/auth-storage.d.ts +2 -2
  98. package/dist/sdk/coding-agent/core/auth-storage.js +2 -2
  99. package/dist/sdk/coding-agent/core/bash-executor.js +1 -1
  100. package/dist/sdk/coding-agent/core/compaction/branch-summarization.js +1 -1
  101. package/dist/sdk/coding-agent/core/compaction/compaction.js +1 -1
  102. package/dist/sdk/coding-agent/core/extensions/loader.d.ts.map +1 -1
  103. package/dist/sdk/coding-agent/core/extensions/loader.js +18 -22
  104. package/dist/sdk/coding-agent/core/extensions/runner.d.ts.map +1 -1
  105. package/dist/sdk/coding-agent/core/extensions/runner.js +1 -1
  106. package/dist/sdk/coding-agent/core/extensions/types.d.ts +9 -9
  107. package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -1
  108. package/dist/sdk/coding-agent/core/package-manager.d.ts +1 -1
  109. package/dist/sdk/coding-agent/core/package-manager.d.ts.map +1 -1
  110. package/dist/sdk/coding-agent/core/package-manager.js +14 -14
  111. package/dist/sdk/coding-agent/core/sdk.d.ts +1 -1
  112. package/dist/sdk/coding-agent/core/sdk.js +2 -2
  113. package/dist/sdk/coding-agent/core/session-manager.d.ts +2 -2
  114. package/dist/sdk/coding-agent/core/session-manager.d.ts.map +1 -1
  115. package/dist/sdk/coding-agent/core/system-prompt.js +7 -7
  116. package/dist/sdk/coding-agent/core/tools/bash.d.ts +2 -2
  117. package/dist/sdk/coding-agent/core/tools/bash.js +3 -3
  118. package/dist/sdk/coding-agent/core/tools/output-accumulator.js +1 -1
  119. package/dist/sdk/coding-agent/migrations.d.ts +1 -1
  120. package/dist/sdk/coding-agent/migrations.js +4 -4
  121. package/dist/sdk/coding-agent/modes/print-mode.d.ts +2 -2
  122. package/dist/sdk/coding-agent/modes/print-mode.js +2 -2
  123. package/dist/sdk/coding-agent/utils/clipboard-image.js +1 -1
  124. package/dist/sdk/coding-agent/utils/spectral-user-agent.d.ts +2 -0
  125. package/dist/sdk/coding-agent/utils/spectral-user-agent.d.ts.map +1 -0
  126. package/dist/sdk/coding-agent/utils/spectral-user-agent.js +3 -0
  127. package/dist/sdk/coding-agent/utils/version-check.d.ts +5 -5
  128. package/dist/sdk/coding-agent/utils/version-check.d.ts.map +1 -1
  129. package/dist/sdk/coding-agent/utils/version-check.js +7 -7
  130. package/dist/sdk/coding-agent/utils/windows-self-update.js +1 -1
  131. package/dist/server/agent-bridge.d.ts +33 -33
  132. package/dist/server/agent-bridge.d.ts.map +1 -1
  133. package/dist/server/agent-bridge.js +58 -58
  134. package/dist/server/handlers/mcp-status.d.ts +21 -0
  135. package/dist/server/handlers/mcp-status.d.ts.map +1 -0
  136. package/dist/server/handlers/mcp-status.js +52 -0
  137. package/dist/server/handlers/sessions.d.ts +1 -1
  138. package/dist/server/handlers/sessions.js +1 -1
  139. package/dist/server/handlers/settings.d.ts +30 -0
  140. package/dist/server/handlers/settings.d.ts.map +1 -0
  141. package/dist/server/handlers/settings.js +123 -0
  142. package/dist/server/paths.d.ts +2 -2
  143. package/dist/server/paths.js +2 -2
  144. package/dist/server/session-stream.d.ts +25 -25
  145. package/dist/server/session-stream.d.ts.map +1 -1
  146. package/dist/server/session-stream.js +43 -34
  147. package/dist/server/shutdown.d.ts +3 -3
  148. package/dist/server/shutdown.d.ts.map +1 -1
  149. package/dist/server/shutdown.js +3 -3
  150. package/dist/server/storage.d.ts +4 -4
  151. package/dist/server/storage.js +6 -6
  152. package/dist/server/wire.d.ts +8 -8
  153. package/dist/server/wire.d.ts.map +1 -1
  154. package/dist/server/wire.js +1 -1
  155. package/package.json +1 -1
  156. package/dist/sdk/coding-agent/utils/pi-user-agent.d.ts +0 -2
  157. package/dist/sdk/coding-agent/utils/pi-user-agent.d.ts.map +0 -1
  158. package/dist/sdk/coding-agent/utils/pi-user-agent.js +0 -3
@@ -39,6 +39,7 @@
39
39
  * transparent to this layer — we just respond when we can.
40
40
  */
41
41
  import type { AutoResearchFrame, CancelTurnFrame, ClientMessageFrame, MetaEvent, RestRequestFrame, RestResponseFrame, SubscribeFrame } from "@aexol/relay-protocol";
42
+ import type { McpExtensionState } from "../mcp/state.js";
42
43
  import type { SessionStreamManager, Subscriber } from "../server/session-stream.js";
43
44
  import type { SessionStore } from "../server/storage.js";
44
45
  import type { RelayClient } from "./client.js";
@@ -47,7 +48,7 @@ import type { RelayClient } from "./client.js";
47
48
  * `id` is populated when the route had an `:id` placeholder.
48
49
  */
49
50
  interface RouteMatch {
50
- route: "list_projects" | "create_project" | "update_project" | "delete_project" | "bind_studio" | "list_project_sessions" | "create_session" | "get_session" | "update_session" | "delete_session" | "get_session_memory" | "get_session_memory_details" | "compact_session" | "remember_and_delete_session" | "fork_session" | "list_path_autocomplete" | "enqueue_prompt" | "get_prompt_queue" | "remove_prompt" | "clear_prompt_queue";
51
+ route: "list_projects" | "create_project" | "update_project" | "delete_project" | "bind_studio" | "list_project_sessions" | "create_session" | "get_session" | "update_session" | "delete_session" | "get_session_memory" | "get_session_memory_details" | "compact_session" | "remember_and_delete_session" | "fork_session" | "list_path_autocomplete" | "enqueue_prompt" | "get_prompt_queue" | "remove_prompt" | "clear_prompt_queue" | "list_mcp_status" | "get_settings" | "put_settings";
51
52
  id?: string;
52
53
  /** Parsed query params, if the path carried a `?...` suffix. */
53
54
  query?: URLSearchParams;
@@ -59,7 +60,7 @@ interface RouteMatch {
59
60
  * don't recognise; the caller turns that into a `404 Unknown route`.
60
61
  *
61
62
  * Intentionally literal — a regex table would be marginally fancier but
62
- * also marginally slower and harder to read for ~9 routes.
63
+ * also marginally slower and harder to read for ~11 routes.
63
64
  */
64
65
  export declare function matchRoute(method: string, path: string): RouteMatch | null;
65
66
  /**
@@ -76,10 +77,18 @@ export type PublishMetaEvent = (event: MetaEvent) => void;
76
77
  export interface RestRequestDeps {
77
78
  store: SessionStore;
78
79
  manager: SessionStreamManager;
80
+ /** Working directory for this machine. Used by settings persistence. Defaults to homedir. */
81
+ cwd?: string;
79
82
  /** Optional logger for unexpected errors. Defaults to console.error. */
80
83
  logger?: {
81
84
  error: (...args: unknown[]) => void;
82
85
  };
86
+ /**
87
+ * Optional MCP extension state. Passed through by `serve.ts` from the
88
+ * `AgentBridge`. When set, `GET /api/mcp-status` returns the current
89
+ * machine-local MCP snapshot.
90
+ */
91
+ mcpState?: McpExtensionState;
83
92
  /**
84
93
  * Optional meta-event publisher. Invoked AFTER each successful mutation
85
94
  * (create/update/delete project, create/update/delete session) so all
@@ -156,7 +165,7 @@ export declare function handleClientMessage(frame: ClientMessageFrame, deps: Cli
156
165
  */
157
166
  export declare function handleSubscribe(frame: SubscribeFrame, deps: ClientMessageDeps): void;
158
167
  /**
159
- * Dispatch a `cancel_turn` frame. Disposes the session's pi bridge and
168
+ * Dispatch a `cancel_turn` frame. Disposes the session's agent bridge and
160
169
  * removes the stream so the next user message creates a fresh one. The
161
170
  * bridge dispose triggers `agent_end` broadcast to all subscribers.
162
171
  *
@@ -170,10 +179,10 @@ export declare function handleCancelTurn(frame: CancelTurnFrame, deps: {
170
179
  }): void;
171
180
  /**
172
181
  * Detach every subscriber the dispatcher has attached. Called by
173
- * `serve.ts` on relay disconnect / shutdown so the underlying pi
182
+ * `serve.ts` on relay disconnect / shutdown so the underlying spectral
174
183
  * processes don't keep an unreachable subscriber pinned.
175
184
  *
176
- * NOTE: this does NOT dispose the streams themselves — pi keeps running
185
+ * NOTE: this does NOT dispose the streams themselves — spectral keeps running
177
186
  * so a future browser reconnect can resume mid-turn. Use
178
187
  * `manager.dispose()` at full shutdown.
179
188
  */
@@ -193,7 +202,7 @@ export interface AutoResearchDeps {
193
202
  }
194
203
  /**
195
204
  * Dispatch an `auto_research` frame. Sends the auto-research task through
196
- * the existing AgentBridge (backend proxy) instead of spawning a separate pi
205
+ * the existing AgentBridge (backend proxy) instead of spawning a separate spectral
197
206
  * subprocess. This ensures auto-research uses the same model and API keys
198
207
  * as the active session.
199
208
  *
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/relay/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACf,MAAM,uBAAuB,CAAC;AA6B/B,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACX,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C;;;GAGG;AACH,UAAU,UAAU;IAClB,KAAK,EACD,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,uBAAuB,GACvB,gBAAgB,GAChB,aAAa,GACb,gBAAgB,GAChB,gBAAgB,GAChB,oBAAoB,GACpB,4BAA4B,GAC5B,iBAAiB,GACjB,6BAA6B,GAC7B,cAAc,GACd,wBAAwB,GACxB,gBAAgB,GAChB,kBAAkB,GAClB,eAAe,GACf,oBAAoB,CAAC;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,UAAU,GAAG,IAAI,CAoGnB;AAMD;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,wEAAwE;IACxE,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;IACjD;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAiD5B;AAwRD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,2DAA2D;IAC3D,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;;;;;OASG;IACH,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrC,yEAAyE;IACzE,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;CAClD;AA8BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,iBAAiB,GACtB,IAAI,CAqIN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,iBAAiB,GACtB,IAAI,CAsDN;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE;IAAE,OAAO,EAAE,oBAAoB,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAA;CAAE,GACxF,IAAI,CAEN;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,oBAAoB,EAC7B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GACnC,IAAI,CASN;AAMD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjC,sDAAsD;IACtD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrC,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;CAClD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,gBAAgB,GACrB,IAAI,CAQN"}
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/relay/dispatcher.ts"],"names":[],"mappings":"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"}
@@ -38,11 +38,14 @@
38
38
  * or `code:"machine_offline"` (CLI socket dropped). Both are
39
39
  * transparent to this layer — we just respond when we can.
40
40
  */
41
+ import { homedir } from "node:os";
41
42
  import { BadRequestError, NotFoundError } from "../server/handlers/errors.js";
43
+ import { handleListMcpStatus } from "../server/handlers/mcp-status.js";
42
44
  import { handlePathAutocomplete } from "../server/handlers/paths-autocomplete.js";
43
45
  import { handleBindStudioProject, handleCreateProject, handleDeleteProject, handleListProjects, handleListSessionsByProject, handleUpdateProject, } from "../server/handlers/projects.js";
44
46
  import { handleCompactSession, handleCreateSession, handleDeleteSession, handleForkSession, handleRememberAndDeleteSession, handleGetSessionDetail, handleGetSessionMemoryDetails, handleGetSessionMemoryStatus, handleUpdateSession, } from "../server/handlers/sessions.js";
45
47
  import { handleClearPromptQueue, handleEnqueuePrompt, handleGetPromptQueue, handleRemovePrompt, } from "../server/handlers/queue.js";
48
+ import { handleGetSettings, handlePutSettings, } from "../server/handlers/settings.js";
46
49
  import { shutdownState } from "../server/shutdown.js";
47
50
  import { handleAutoResearch } from "./auto-research.js";
48
51
  /**
@@ -50,13 +53,27 @@ import { handleAutoResearch } from "./auto-research.js";
50
53
  * don't recognise; the caller turns that into a `404 Unknown route`.
51
54
  *
52
55
  * Intentionally literal — a regex table would be marginally fancier but
53
- * also marginally slower and harder to read for ~9 routes.
56
+ * also marginally slower and harder to read for ~11 routes.
54
57
  */
55
58
  export function matchRoute(method, path) {
56
59
  // Strip query string for path matching but keep it for the handler.
57
60
  const qIdx = path.indexOf("?");
58
61
  const cleanPath = qIdx === -1 ? path : path.slice(0, qIdx);
59
62
  const query = qIdx >= 0 ? new URLSearchParams(path.slice(qIdx + 1)) : undefined;
63
+ // /api/mcp-status
64
+ if (cleanPath === "/api/mcp-status") {
65
+ if (method === "GET")
66
+ return { route: "list_mcp_status" };
67
+ return null;
68
+ }
69
+ // /api/settings
70
+ if (cleanPath === "/api/settings") {
71
+ if (method === "GET")
72
+ return { route: "get_settings" };
73
+ if (method === "PUT")
74
+ return { route: "put_settings" };
75
+ return null;
76
+ }
60
77
  // /api/paths/autocomplete
61
78
  if (cleanPath === "/api/paths/autocomplete") {
62
79
  if (method === "GET")
@@ -390,6 +407,16 @@ async function dispatchRoute(match, body, deps) {
390
407
  case "clear_prompt_queue":
391
408
  handleClearPromptQueue(store, manager, id);
392
409
  return { ok: true };
410
+ case "list_mcp_status": {
411
+ if (!deps.mcpState) {
412
+ return [];
413
+ }
414
+ return handleListMcpStatus(deps.mcpState);
415
+ }
416
+ case "get_settings":
417
+ return handleGetSettings(deps.cwd ?? homedir());
418
+ case "put_settings":
419
+ return handlePutSettings(deps.cwd ?? homedir(), asObject(body));
393
420
  }
394
421
  }
395
422
  /**
@@ -604,7 +631,7 @@ export function handleClientMessage(frame, deps) {
604
631
  // converted to `error` events by the manager itself, so we just log.
605
632
  // `modelId` (Phase 3 — Available Models whitelist) is forwarded as
606
633
  // sticky next-prompt selection. The backend has already validated it
607
- // against the team-scoped whitelist; the CLI resolves it via pi's
634
+ // against the team-scoped whitelist; the CLI resolves it via spectral's
608
635
  // own model registry inside the manager → bridge.
609
636
  //
610
637
  // When `loop: true`, loop state is set before prompting; the normal
@@ -677,7 +704,7 @@ export function handleSubscribe(frame, deps) {
677
704
  }
678
705
  }
679
706
  /**
680
- * Dispatch a `cancel_turn` frame. Disposes the session's pi bridge and
707
+ * Dispatch a `cancel_turn` frame. Disposes the session's agent bridge and
681
708
  * removes the stream so the next user message creates a fresh one. The
682
709
  * bridge dispose triggers `agent_end` broadcast to all subscribers.
683
710
  *
@@ -688,10 +715,10 @@ export function handleCancelTurn(frame, deps) {
688
715
  }
689
716
  /**
690
717
  * Detach every subscriber the dispatcher has attached. Called by
691
- * `serve.ts` on relay disconnect / shutdown so the underlying pi
718
+ * `serve.ts` on relay disconnect / shutdown so the underlying spectral
692
719
  * processes don't keep an unreachable subscriber pinned.
693
720
  *
694
- * NOTE: this does NOT dispose the streams themselves — pi keeps running
721
+ * NOTE: this does NOT dispose the streams themselves — spectral keeps running
695
722
  * so a future browser reconnect can resume mid-turn. Use
696
723
  * `manager.dispose()` at full shutdown.
697
724
  */
@@ -708,7 +735,7 @@ export function detachAllSubscribers(manager, subscribers) {
708
735
  }
709
736
  /**
710
737
  * Dispatch an `auto_research` frame. Sends the auto-research task through
711
- * the existing AgentBridge (backend proxy) instead of spawning a separate pi
738
+ * the existing AgentBridge (backend proxy) instead of spawning a separate spectral
712
739
  * subprocess. This ensures auto-research uses the same model and API keys
713
740
  * as the active session.
714
741
  *
@@ -463,7 +463,7 @@ export interface Model<TApi extends Api> {
463
463
  baseUrl: string;
464
464
  reasoning: boolean;
465
465
  /**
466
- * Maps pi thinking levels to provider/model-specific values.
466
+ * Maps spectral thinking levels to provider/model-specific values.
467
467
  * Missing keys use provider defaults. null marks a level as unsupported.
468
468
  */
469
469
  thinkingLevelMap?: ThinkingLevelMap;
@@ -14,7 +14,7 @@ import type { OAuthCredentials, OAuthPrompt, OAuthProviderInterface } from "./ty
14
14
  * @param options.onManualCodeInput - Optional promise that resolves with user-pasted code.
15
15
  * Races with browser callback - whichever completes first wins.
16
16
  * Useful for showing paste input immediately alongside browser flow.
17
- * @param options.originator - OAuth originator parameter (defaults to "pi")
17
+ * @param options.originator - OAuth originator parameter (defaults to "spectral")
18
18
  */
19
19
  export declare function loginOpenAICodex(options: {
20
20
  onAuth: (info: {
@@ -144,7 +144,7 @@ async function refreshAccessToken(refreshToken) {
144
144
  };
145
145
  }
146
146
  }
147
- async function createAuthorizationFlow(originator = "pi") {
147
+ async function createAuthorizationFlow(originator = "spectral") {
148
148
  const { verifier, challenge } = await generatePKCE();
149
149
  const state = createState();
150
150
  const url = new URL(AUTHORIZE_URL);
@@ -250,7 +250,7 @@ function getAccountId(accessToken) {
250
250
  * @param options.onManualCodeInput - Optional promise that resolves with user-pasted code.
251
251
  * Races with browser callback - whichever completes first wins.
252
252
  * Useful for showing paste input immediately alongside browser flow.
253
- * @param options.originator - OAuth originator parameter (defaults to "pi")
253
+ * @param options.originator - OAuth originator parameter (defaults to "spectral")
254
254
  */
255
255
  export async function loginOpenAICodex(options) {
256
256
  const { verifier, state, url } = await createAuthorizationFlow(options.originator);
@@ -89,7 +89,7 @@ export interface AgentSessionConfig {
89
89
  }>;
90
90
  /** Resource loader for skills, prompts, themes, context files, system prompt */
91
91
  resourceLoader: ResourceLoader;
92
- /** SDK custom tools registered outside extensions */
92
+ /** sdk custom tools registered outside extensions */
93
93
  customTools?: ToolDefinition[];
94
94
  /** Model registry for API key resolution and model discovery */
95
95
  modelRegistry: ModelRegistry;
@@ -314,7 +314,7 @@ export declare class AgentSession {
314
314
  private _handlePostAgentRun;
315
315
  /**
316
316
  * Send a prompt to the agent.
317
- * - Handles extension commands (registered via pi.registerCommand) immediately, even during streaming
317
+ * - Handles extension commands (registered via spectral.registerCommand) immediately, even during streaming
318
318
  * - Expands file-based prompt templates by default
319
319
  * - During streaming, queues via steer() or followUp() based on streamingBehavior option
320
320
  * - Validates model and API key before sending (when not streaming)
@@ -464,7 +464,7 @@ export class AgentSession {
464
464
  * Call this when completely done with the session.
465
465
  */
466
466
  dispose() {
467
- this._extensionRunner.invalidate("This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().");
467
+ this._extensionRunner.invalidate("This extension ctx is stale after session replacement or reload. Do not use a captured agent or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().");
468
468
  this.abortRetry();
469
469
  this.agent.abort();
470
470
  this._disconnectFromAgent();
@@ -671,7 +671,7 @@ export class AgentSession {
671
671
  }
672
672
  /**
673
673
  * Send a prompt to the agent.
674
- * - Handles extension commands (registered via pi.registerCommand) immediately, even during streaming
674
+ * - Handles extension commands (registered via spectral.registerCommand) immediately, even during streaming
675
675
  * - Expands file-based prompt templates by default
676
676
  * - During streaming, queues via steer() or followUp() based on streamingBehavior option
677
677
  * - Validates model and API key before sending (when not streaming)
@@ -684,7 +684,7 @@ export class AgentSession {
684
684
  let messages;
685
685
  try {
686
686
  // Handle extension commands first (execute immediately, even during streaming)
687
- // Extension commands manage their own LLM interaction via pi.sendMessage()
687
+ // Extension commands manage their own LLM interaction via spectral.sendMessage()
688
688
  if (expandPromptTemplates && text.startsWith("/")) {
689
689
  const handled = await this._tryExecuteExtensionCommand(text);
690
690
  if (handled) {
@@ -2,7 +2,7 @@
2
2
  * Credential storage for API keys and OAuth tokens.
3
3
  * Handles loading, saving, and refreshing credentials from auth.json.
4
4
  *
5
- * Uses file locking to prevent race conditions when multiple pi instances
5
+ * Uses file locking to prevent race conditions when multiple spectral instances
6
6
  * try to refresh tokens simultaneously.
7
7
  */
8
8
  import { type OAuthCredentials, type OAuthLoginCallbacks, type OAuthProviderId } from "../../ai/index.js";
@@ -121,7 +121,7 @@ export declare class AuthStorage {
121
121
  logout(provider: string): void;
122
122
  /**
123
123
  * Refresh OAuth token with backend locking to prevent race conditions.
124
- * Multiple pi instances may try to refresh simultaneously when tokens expire.
124
+ * Multiple spectral instances may try to refresh simultaneously when tokens expire.
125
125
  */
126
126
  private refreshOAuthTokenWithLock;
127
127
  /**
@@ -2,7 +2,7 @@
2
2
  * Credential storage for API keys and OAuth tokens.
3
3
  * Handles loading, saving, and refreshing credentials from auth.json.
4
4
  *
5
- * Uses file locking to prevent race conditions when multiple pi instances
5
+ * Uses file locking to prevent race conditions when multiple spectral instances
6
6
  * try to refresh tokens simultaneously.
7
7
  */
8
8
  import { findEnvKeys, getEnvApiKey, } from "../../ai/index.js";
@@ -330,7 +330,7 @@ export class AuthStorage {
330
330
  }
331
331
  /**
332
332
  * Refresh OAuth token with backend locking to prevent race conditions.
333
- * Multiple pi instances may try to refresh simultaneously when tokens expire.
333
+ * Multiple spectral instances may try to refresh simultaneously when tokens expire.
334
334
  */
335
335
  async refreshOAuthTokenWithLock(providerId) {
336
336
  const provider = getOAuthProvider(providerId);
@@ -31,7 +31,7 @@ export async function executeBashWithOperations(command, cwd, operations, option
31
31
  return;
32
32
  }
33
33
  const id = randomBytes(8).toString("hex");
34
- tempFilePath = join(tmpdir(), `pi-bash-${id}.log`);
34
+ tempFilePath = join(tmpdir(), `spectral-bash-${id}.log`);
35
35
  tempFileStream = createWriteStream(tempFilePath);
36
36
  for (const chunk of outputChunks) {
37
37
  tempFileStream.write(chunk);
@@ -101,7 +101,7 @@ export function prepareBranchEntries(entries, tokenBudget = 0) {
101
101
  let totalTokens = 0;
102
102
  // First pass: collect file ops from ALL entries (even if they don't fit in token budget)
103
103
  // This ensures we capture cumulative file tracking from nested branch summaries
104
- // Only extract from pi-generated summaries (fromHook !== true), not extension-generated ones
104
+ // Only extract from spectral-generated summaries (fromHook !== true), not extension-generated ones
105
105
  for (const entry of entries) {
106
106
  if (entry.type === "branch_summary" && !entry.fromHook && entry.details) {
107
107
  const details = entry.details;
@@ -13,7 +13,7 @@ import { computeFileLists, createFileOps, extractFileOpsFromMessage, formatFileO
13
13
  */
14
14
  function extractFileOperations(messages, entries, prevCompactionIndex) {
15
15
  const fileOps = createFileOps();
16
- // Collect from previous compaction's details (if pi-generated)
16
+ // Collect from previous compaction's details (if spectral-generated)
17
17
  if (prevCompactionIndex >= 0) {
18
18
  const prevCompaction = entries[prevCompactionIndex];
19
19
  if (!prevCompaction.fromHook && prevCompaction.details) {
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIhE,OAAO,KAAK,EACX,SAAS,EAET,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EAKpB,MAAM,YAAY,CAAC;AAwDpB;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CA+CzD;AAiOD;;GAEG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,gBAAgB,EACzB,aAAa,SAAa,GACxB,OAAO,CAAC,SAAS,CAAC,CAMpB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAyBrH;AA+GD;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAsB,EAChC,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,oBAAoB,CAAC,CA2C/B"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIhE,OAAO,KAAK,EACX,SAAS,EAET,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EAKpB,MAAM,YAAY,CAAC;AAoDpB;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CA+CzD;AAiOD;;GAEG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,gBAAgB,EACzB,aAAa,SAAa,GACxB,OAAO,CAAC,SAAS,CAAC,CAMpB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAyBrH;AA+GD;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAsB,EAChC,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,oBAAoB,CAAC,CA2C/B"}
@@ -33,20 +33,16 @@ function getAliases() {
33
33
  }
34
34
  return fileURLToPath(import.meta.resolve(specifier));
35
35
  };
36
- const piCodingAgentEntry = packageIndex;
37
- const piAgentCoreEntry = resolveWorkspaceOrImport("agent/dist/index.js", "../../../agent-core/index.ts");
38
- const piAiEntry = resolveWorkspaceOrImport("ai/dist/index.js", "../../../ai/index.ts");
39
- const piAiOauthEntry = resolveWorkspaceOrImport("ai/dist/oauth.js", "../../../ai/oauth.ts");
36
+ const spectralCodingAgentEntry = packageIndex;
37
+ const spectralAgentCoreEntry = resolveWorkspaceOrImport("agent/dist/index.js", "../../../agent-core/index.ts");
38
+ const spectralAiEntry = resolveWorkspaceOrImport("ai/dist/index.js", "../../../ai/index.ts");
39
+ const spectralAiOauthEntry = resolveWorkspaceOrImport("ai/dist/oauth.js", "../../../ai/oauth.ts");
40
40
  _aliases = {
41
- "../../index.ts": piCodingAgentEntry,
42
- "../../../agent-core/index.ts": piAgentCoreEntry,
43
- "../../../ai/index.ts": piAiEntry,
44
- "../../../ai/oauth.ts": piAiOauthEntry,
45
- "@mariozechner/pi-coding-agent": piCodingAgentEntry,
46
- "@mariozechner/pi-agent": piAgentCoreEntry,
47
- "@mariozechner/pi-ai": piAiEntry,
48
- "@mariozechner/pi-ai/oauth": piAiOauthEntry,
49
- "@aexol/spectral": piCodingAgentEntry,
41
+ "../../index.ts": spectralCodingAgentEntry,
42
+ "../../../agent-core/index.ts": spectralAgentCoreEntry,
43
+ "../../../ai/index.ts": spectralAiEntry,
44
+ "../../../ai/oauth.ts": spectralAiOauthEntry,
45
+ "@aexol/spectral": spectralCodingAgentEntry,
50
46
  typebox: typeboxEntry,
51
47
  "typebox/compile": typeboxCompileEntry,
52
48
  "typebox/value": typeboxValueEntry,
@@ -93,7 +89,7 @@ export function createExtensionRuntime() {
93
89
  invalidate: (message) => {
94
90
  state.staleMessage ??=
95
91
  message ??
96
- "This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().";
92
+ "This extension ctx is stale after session replacement or reload. Do not use a captured agent or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().";
97
93
  },
98
94
  // Pre-bind: queue registrations so bindCore() can flush them once the
99
95
  // model registry is available. bindCore() replaces both with direct calls.
@@ -312,12 +308,12 @@ export async function loadExtensions(paths, cwd, eventBus) {
312
308
  runtime,
313
309
  };
314
310
  }
315
- function readPiManifest(packageJsonPath) {
311
+ function readSpectralManifest(packageJsonPath) {
316
312
  try {
317
313
  const content = fs.readFileSync(packageJsonPath, "utf-8");
318
314
  const pkg = JSON.parse(content);
319
- if (pkg.pi && typeof pkg.pi === "object") {
320
- return pkg.pi;
315
+ if (pkg.spectral && typeof pkg.spectral === "object") {
316
+ return pkg.spectral;
321
317
  }
322
318
  return null;
323
319
  }
@@ -332,16 +328,16 @@ function isExtensionFile(name) {
332
328
  * Resolve extension entry points from a directory.
333
329
  *
334
330
  * Checks for:
335
- * 1. package.json with "pi.extensions" field -> returns declared paths
331
+ * 1. package.json with "spectral.extensions" field -> returns declared paths
336
332
  * 2. index.ts or index.js -> returns the index file
337
333
  *
338
334
  * Returns resolved paths or null if no entry points found.
339
335
  */
340
336
  function resolveExtensionEntries(dir) {
341
- // Check for package.json with "pi" field first
337
+ // Check for package.json with "spectral" field first
342
338
  const packageJsonPath = path.join(dir, "package.json");
343
339
  if (fs.existsSync(packageJsonPath)) {
344
- const manifest = readPiManifest(packageJsonPath);
340
+ const manifest = readSpectralManifest(packageJsonPath);
345
341
  if (manifest?.extensions?.length) {
346
342
  const entries = [];
347
343
  for (const extPath of manifest.extensions) {
@@ -372,7 +368,7 @@ function resolveExtensionEntries(dir) {
372
368
  * Discovery rules:
373
369
  * 1. Direct files: `extensions/*.ts` or `*.js` → load
374
370
  * 2. Subdirectory with index: `extensions/* /index.ts` or `index.js` → load
375
- * 3. Subdirectory with package.json: `extensions/* /package.json` with "pi" field → load what it declares
371
+ * 3. Subdirectory with package.json: `extensions/* /package.json` with "spectral" field → load what it declares
376
372
  *
377
373
  * No recursion beyond one level. Complex packages must use package.json manifest.
378
374
  */
@@ -431,7 +427,7 @@ export async function discoverAndLoadExtensions(configuredPaths, cwd, agentDir =
431
427
  for (const p of configuredPaths) {
432
428
  const resolved = resolvePath(p, resolvedCwd, { normalizeUnicodeSpaces: true });
433
429
  if (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) {
434
- // Check for package.json with pi manifest or index.ts
430
+ // Check for package.json with spectral manifest or index.ts
435
431
  const entries = resolveExtensionEntries(resolved);
436
432
  if (entries) {
437
433
  addPaths(entries);
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/extensions/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/extensions/runner.ts"],"names":[],"mappings":"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"}
@@ -288,7 +288,7 @@ export class ExtensionRunner {
288
288
  getShortcutDiagnostics() {
289
289
  return this.shortcutDiagnostics;
290
290
  }
291
- invalidate(message = "This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().") {
291
+ invalidate(message = "This extension ctx is stale after session replacement or reload. Do not use a captured agent or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().") {
292
292
  if (!this.staleMessage) {
293
293
  this.staleMessage = message;
294
294
  this.runtime.invalidate(message);
@@ -270,7 +270,7 @@ export interface ExtensionContext {
270
270
  abort(): void;
271
271
  /** Whether there are queued messages waiting */
272
272
  hasPendingMessages(): boolean;
273
- /** Gracefully shutdown pi and exit. Available in all contexts. */
273
+ /** Gracefully shutdown spectral and exit. Available in all contexts. */
274
274
  shutdown(): void;
275
275
  /** Get current context usage for the active model. */
276
276
  getContextUsage(): ContextUsage | undefined;
@@ -887,7 +887,7 @@ export interface ExtensionAPI {
887
887
  *
888
888
  * @example
889
889
  * // Register a new provider with custom models
890
- * pi.registerProvider("my-proxy", {
890
+ * spectral.registerProvider("my-proxy", {
891
891
  * baseUrl: "https://proxy.example.com",
892
892
  * apiKey: "PROXY_API_KEY",
893
893
  * api: "anthropic-messages",
@@ -906,13 +906,13 @@ export interface ExtensionAPI {
906
906
  *
907
907
  * @example
908
908
  * // Override baseUrl for an existing provider
909
- * pi.registerProvider("anthropic", {
909
+ * spectral.registerProvider("anthropic", {
910
910
  * baseUrl: "https://proxy.example.com"
911
911
  * });
912
912
  *
913
913
  * @example
914
914
  * // Register provider with OAuth support
915
- * pi.registerProvider("corporate-ai", {
915
+ * spectral.registerProvider("corporate-ai", {
916
916
  * baseUrl: "https://ai.corp.com",
917
917
  * api: "openai-responses",
918
918
  * models: [...],
@@ -936,13 +936,13 @@ export interface ExtensionAPI {
936
936
  * the initial load phase.
937
937
  *
938
938
  * @example
939
- * pi.unregisterProvider("my-proxy");
939
+ * spectral.unregisterProvider("my-proxy");
940
940
  */
941
941
  unregisterProvider(name: string): void;
942
942
  /** Shared event bus for extension communication. */
943
943
  events: EventBus;
944
944
  }
945
- /** Configuration for registering a provider via pi.registerProvider(). */
945
+ /** Configuration for registering a provider via spectral.registerProvider(). */
946
946
  export interface ProviderConfig {
947
947
  /** Display name for the provider in UI. */
948
948
  name?: string;
@@ -986,7 +986,7 @@ export interface ProviderModelConfig {
986
986
  baseUrl?: string;
987
987
  /** Whether the model supports extended thinking. */
988
988
  reasoning: boolean;
989
- /** Maps pi thinking levels to provider/model-specific values; null marks a level unsupported. */
989
+ /** Maps spectral thinking levels to provider/model-specific values; null marks a level unsupported. */
990
990
  thinkingLevelMap?: Model<Api>["thinkingLevelMap"];
991
991
  /** Supported input types. */
992
992
  input: ("text" | "image")[];
@@ -1007,7 +1007,7 @@ export interface ProviderModelConfig {
1007
1007
  compat?: Model<Api>["compat"];
1008
1008
  }
1009
1009
  /** Extension factory function type. Supports both sync and async initialization. */
1010
- export type ExtensionFactory = (pi: ExtensionAPI) => void | Promise<void>;
1010
+ export type ExtensionFactory = (ext: ExtensionAPI) => void | Promise<void>;
1011
1011
  export interface RegisteredTool {
1012
1012
  definition: ToolDefinition;
1013
1013
  sourceInfo: SourceInfo;
@@ -1075,7 +1075,7 @@ export interface ExtensionRuntimeState {
1075
1075
  unregisterProvider: (name: string, extensionPath?: string) => void;
1076
1076
  }
1077
1077
  /**
1078
- * Action implementations for pi.* API methods.
1078
+ * Action implementations for spectral.* API methods.
1079
1079
  * Provided to runner.initialize(), copied into the shared runtime.
1080
1080
  */
1081
1081
  export interface ExtensionActions {