@oh-my-pi/pi-coding-agent 16.2.1 → 16.2.3

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 (187) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/dist/cli.js +3621 -3579
  3. package/dist/types/advisor/__tests__/config.test.d.ts +1 -0
  4. package/dist/types/advisor/advise-tool.d.ts +8 -4
  5. package/dist/types/advisor/config.d.ts +88 -0
  6. package/dist/types/advisor/index.d.ts +1 -0
  7. package/dist/types/advisor/runtime.d.ts +15 -1
  8. package/dist/types/advisor/transcript-recorder.d.ts +13 -2
  9. package/dist/types/advisor/watchdog.d.ts +20 -0
  10. package/dist/types/collab/guest.d.ts +29 -0
  11. package/dist/types/config/model-roles.d.ts +1 -1
  12. package/dist/types/config/settings-schema.d.ts +113 -12
  13. package/dist/types/debug/log-viewer.d.ts +1 -0
  14. package/dist/types/debug/raw-sse.d.ts +1 -0
  15. package/dist/types/discovery/omp-extension-roots.d.ts +3 -3
  16. package/dist/types/edit/hashline/diff.d.ts +0 -11
  17. package/dist/types/edit/index.d.ts +18 -0
  18. package/dist/types/edit/streaming.d.ts +30 -0
  19. package/dist/types/extensibility/custom-tools/types.d.ts +1 -0
  20. package/dist/types/extensibility/shared-events.d.ts +1 -0
  21. package/dist/types/extensibility/tool-event-input.d.ts +7 -0
  22. package/dist/types/extensibility/utils.d.ts +12 -0
  23. package/dist/types/mcp/oauth-discovery.d.ts +0 -11
  24. package/dist/types/mcp/transports/index.d.ts +1 -0
  25. package/dist/types/mcp/transports/sse.d.ts +20 -0
  26. package/dist/types/modes/components/advisor-config.d.ts +59 -0
  27. package/dist/types/modes/components/index.d.ts +1 -0
  28. package/dist/types/modes/components/model-selector.d.ts +9 -1
  29. package/dist/types/modes/components/settings-selector.d.ts +1 -0
  30. package/dist/types/modes/components/status-line/component.d.ts +30 -3
  31. package/dist/types/modes/components/status-line/types.d.ts +13 -1
  32. package/dist/types/modes/controllers/selector-controller.d.ts +1 -0
  33. package/dist/types/modes/interactive-mode.d.ts +10 -4
  34. package/dist/types/modes/skill-command.d.ts +32 -0
  35. package/dist/types/modes/types.d.ts +7 -2
  36. package/dist/types/sdk.d.ts +1 -1
  37. package/dist/types/session/agent-session.d.ts +84 -12
  38. package/dist/types/session/indexed-session-storage.d.ts +7 -1
  39. package/dist/types/session/messages.d.ts +32 -7
  40. package/dist/types/session/messages.test.d.ts +1 -0
  41. package/dist/types/session/session-entries.d.ts +31 -3
  42. package/dist/types/session/session-history-format.d.ts +6 -0
  43. package/dist/types/session/session-loader.d.ts +9 -1
  44. package/dist/types/session/session-manager.d.ts +6 -4
  45. package/dist/types/session/session-storage.d.ts +11 -0
  46. package/dist/types/session/session-title-slot.d.ts +19 -0
  47. package/dist/types/session/settings-stream-fn.d.ts +21 -0
  48. package/dist/types/session/turn-persistence.d.ts +88 -0
  49. package/dist/types/ssh/connection-manager.d.ts +47 -0
  50. package/dist/types/ssh/utils.d.ts +16 -0
  51. package/dist/types/task/executor.d.ts +3 -16
  52. package/dist/types/task/render.d.ts +0 -5
  53. package/dist/types/task/renderer.d.ts +13 -0
  54. package/dist/types/task/types.d.ts +16 -0
  55. package/dist/types/task/yield-assembly.d.ts +28 -0
  56. package/dist/types/tiny/text.d.ts +8 -0
  57. package/dist/types/tools/render-utils.d.ts +2 -0
  58. package/dist/types/tools/review.d.ts +6 -4
  59. package/dist/types/tools/ssh.d.ts +1 -1
  60. package/dist/types/tools/todo.d.ts +6 -0
  61. package/dist/types/tools/yield.d.ts +8 -3
  62. package/dist/types/utils/thinking-display.d.ts +4 -0
  63. package/package.json +12 -12
  64. package/src/advisor/__tests__/advisor.test.ts +438 -10
  65. package/src/advisor/__tests__/config.test.ts +173 -0
  66. package/src/advisor/advise-tool.ts +11 -6
  67. package/src/advisor/config.ts +256 -0
  68. package/src/advisor/index.ts +1 -0
  69. package/src/advisor/runtime.ts +77 -4
  70. package/src/advisor/transcript-recorder.ts +25 -2
  71. package/src/advisor/watchdog.ts +57 -31
  72. package/src/auto-thinking/classifier.ts +2 -2
  73. package/src/autoresearch/index.ts +7 -2
  74. package/src/cli/gc-cli.ts +17 -10
  75. package/src/collab/guest.ts +43 -7
  76. package/src/config/model-registry.ts +80 -18
  77. package/src/config/model-resolver.ts +5 -1
  78. package/src/config/model-roles.ts +3 -3
  79. package/src/config/settings-schema.ts +107 -8
  80. package/src/debug/index.ts +32 -7
  81. package/src/debug/log-viewer.ts +111 -53
  82. package/src/debug/raw-sse.ts +68 -48
  83. package/src/discovery/codex.ts +13 -5
  84. package/src/discovery/omp-extension-roots.ts +38 -13
  85. package/src/edit/hashline/diff.ts +57 -4
  86. package/src/edit/index.ts +21 -0
  87. package/src/edit/streaming.ts +170 -0
  88. package/src/eval/js/shared/local-module-loader.ts +23 -1
  89. package/src/export/html/template.js +13 -7
  90. package/src/extensibility/custom-tools/types.ts +1 -0
  91. package/src/extensibility/extensions/loader.ts +5 -3
  92. package/src/extensibility/extensions/wrapper.ts +9 -3
  93. package/src/extensibility/hooks/loader.ts +3 -3
  94. package/src/extensibility/hooks/tool-wrapper.ts +13 -4
  95. package/src/extensibility/plugins/legacy-pi-bundled-keys.ts +18 -1
  96. package/src/extensibility/plugins/legacy-pi-bundled-registry.ts +59 -2
  97. package/src/extensibility/plugins/manager.ts +76 -5
  98. package/src/extensibility/shared-events.ts +1 -0
  99. package/src/extensibility/tool-event-input.ts +23 -0
  100. package/src/extensibility/utils.ts +74 -0
  101. package/src/internal-urls/docs-index.generated.txt +1 -1
  102. package/src/mcp/client.ts +3 -1
  103. package/src/mcp/manager.ts +12 -5
  104. package/src/mcp/oauth-discovery.ts +5 -29
  105. package/src/mcp/transports/http.ts +3 -1
  106. package/src/mcp/transports/index.ts +1 -0
  107. package/src/mcp/transports/sse.ts +377 -0
  108. package/src/memories/index.ts +15 -6
  109. package/src/mnemopi/backend.ts +2 -2
  110. package/src/modes/acp/acp-agent.ts +1 -1
  111. package/src/modes/components/advisor-config.ts +555 -0
  112. package/src/modes/components/advisor-message.ts +9 -2
  113. package/src/modes/components/agent-hub.ts +9 -4
  114. package/src/modes/components/assistant-message.ts +5 -5
  115. package/src/modes/components/index.ts +2 -0
  116. package/src/modes/components/model-selector.ts +79 -48
  117. package/src/modes/components/settings-selector.ts +1 -0
  118. package/src/modes/components/status-line/component.ts +145 -14
  119. package/src/modes/components/status-line/segments.ts +47 -22
  120. package/src/modes/components/status-line/types.ts +13 -1
  121. package/src/modes/components/tool-execution.ts +47 -6
  122. package/src/modes/controllers/command-controller.ts +23 -2
  123. package/src/modes/controllers/event-controller.ts +114 -11
  124. package/src/modes/controllers/extension-ui-controller.ts +1 -1
  125. package/src/modes/controllers/input-controller.ts +61 -61
  126. package/src/modes/controllers/selector-controller.ts +100 -9
  127. package/src/modes/interactive-mode.ts +65 -10
  128. package/src/modes/print-mode.ts +1 -1
  129. package/src/modes/skill-command.ts +116 -0
  130. package/src/modes/types.ts +7 -2
  131. package/src/modes/utils/transcript-render-helpers.ts +2 -2
  132. package/src/modes/utils/ui-helpers.ts +46 -27
  133. package/src/prompts/agents/reviewer.md +11 -10
  134. package/src/prompts/review-custom-request.md +1 -2
  135. package/src/prompts/review-request.md +1 -2
  136. package/src/prompts/system/interrupted-thinking.md +7 -0
  137. package/src/prompts/system/recap-user.md +9 -0
  138. package/src/prompts/system/subagent-system-prompt.md +8 -5
  139. package/src/prompts/system/subagent-yield-reminder.md +6 -5
  140. package/src/prompts/system/system-prompt.md +0 -1
  141. package/src/prompts/tools/irc.md +2 -2
  142. package/src/prompts/tools/read.md +2 -2
  143. package/src/sdk.ts +40 -50
  144. package/src/session/agent-session.ts +1139 -600
  145. package/src/session/indexed-session-storage.ts +86 -13
  146. package/src/session/messages.test.ts +125 -0
  147. package/src/session/messages.ts +192 -21
  148. package/src/session/redis-session-storage.ts +49 -2
  149. package/src/session/session-entries.ts +39 -2
  150. package/src/session/session-history-format.ts +29 -2
  151. package/src/session/session-listing.ts +54 -24
  152. package/src/session/session-loader.ts +66 -3
  153. package/src/session/session-manager.ts +113 -19
  154. package/src/session/session-persistence.ts +96 -3
  155. package/src/session/session-storage.ts +36 -0
  156. package/src/session/session-title-slot.ts +141 -0
  157. package/src/session/settings-stream-fn.ts +49 -0
  158. package/src/session/sql-session-storage.ts +71 -11
  159. package/src/session/turn-persistence.ts +142 -0
  160. package/src/session/unexpected-stop-classifier.ts +2 -2
  161. package/src/slash-commands/builtin-registry.ts +16 -3
  162. package/src/slash-commands/helpers/mcp.ts +2 -1
  163. package/src/ssh/__tests__/connection-manager-args.test.ts +123 -1
  164. package/src/ssh/__tests__/file-transfer-posix-guard.test.ts +55 -18
  165. package/src/ssh/connection-manager.ts +139 -12
  166. package/src/ssh/file-transfer.ts +23 -18
  167. package/src/ssh/ssh-executor.ts +2 -13
  168. package/src/ssh/utils.ts +19 -0
  169. package/src/task/executor.ts +21 -23
  170. package/src/task/render.ts +162 -20
  171. package/src/task/renderer.ts +14 -0
  172. package/src/task/types.ts +17 -0
  173. package/src/task/yield-assembly.ts +207 -0
  174. package/src/tiny/models.ts +8 -6
  175. package/src/tiny/text.ts +37 -7
  176. package/src/tools/ask.ts +55 -4
  177. package/src/tools/image-gen.ts +2 -1
  178. package/src/tools/render-utils.ts +2 -0
  179. package/src/tools/renderers.ts +8 -2
  180. package/src/tools/review.ts +17 -7
  181. package/src/tools/ssh.ts +8 -4
  182. package/src/tools/todo.ts +17 -1
  183. package/src/tools/tts.ts +2 -1
  184. package/src/tools/yield.ts +140 -31
  185. package/src/utils/thinking-display.ts +15 -0
  186. package/src/utils/title-generator.ts +1 -1
  187. package/src/web/search/providers/tavily.ts +36 -19
@@ -29,6 +29,7 @@ export class LocalModuleLoader {
29
29
  #externalModules = new Map<string, Promise<vm.Module>>();
30
30
  #requireCache = new Map<string, NodeJS.Require>();
31
31
  #modulePaths = new WeakMap<vm.Module, string>();
32
+ #linkChain: Promise<void> = Promise.resolve();
32
33
 
33
34
  constructor(sessionId: string) {
34
35
  this.#context = vm.createContext(globalThis);
@@ -147,7 +148,17 @@ export class LocalModuleLoader {
147
148
  async #linkAndEvaluate(entry: LocalModuleEntry, modulePath: string): Promise<void> {
148
149
  const { module } = entry;
149
150
  try {
150
- if (module.status === "unlinked") await module.link(this.#linkResolve);
151
+ // Serialize the link phase across every graph root. Bun's node:vm linker
152
+ // segfaults (getImportedModule on a null record) when two link passes
153
+ // instantiate overlapping module instances concurrently — e.g.
154
+ // Promise.all([import("./a"), import("./b")]) over a graph that shares
155
+ // dependencies. Holding the lock for the whole module.link() (including its
156
+ // async resolver callbacks) guarantees the linker is never re-entered
157
+ // mid-instantiation. The lock is released before evaluate(), so a dynamic
158
+ // import during evaluation can re-acquire it without deadlock.
159
+ await this.#serializeLink(async () => {
160
+ if (module.status === "unlinked") await module.link(this.#linkResolve);
161
+ });
151
162
  if (module.status === "linked") await module.evaluate();
152
163
  } catch (error) {
153
164
  this.#invalidateFailedLoad(modulePath);
@@ -159,6 +170,17 @@ export class LocalModuleLoader {
159
170
  }
160
171
  }
161
172
 
173
+ // Promise-chain mutex serializing node:vm link passes (see #linkAndEvaluate).
174
+ // #linkChain is kept non-rejecting so a failed link never wedges the queue.
175
+ #serializeLink<T>(run: () => Promise<T>): Promise<T> {
176
+ const result = this.#linkChain.then(run);
177
+ this.#linkChain = result.then(
178
+ () => undefined,
179
+ () => undefined,
180
+ );
181
+ return result;
182
+ }
183
+
162
184
  // Shared static-link resolver for `module.link()`. node:vm passes the referencing
163
185
  // module and reuses this one resolver for the entire graph, so the referrer path is
164
186
  // recovered from `#modulePaths`. Local dependencies are constructed but NOT linked or
@@ -1236,7 +1236,7 @@
1236
1236
  let html = `
1237
1237
  <div class="header">
1238
1238
  <h1>Session: ${escapeHtml(header?.id || 'unknown')}</h1>
1239
- <div class="help-bar">Ctrl+T toggle thinking · Ctrl+O toggle tools</div>
1239
+ <div class="help-bar">T toggle thinking · O toggle tools</div>
1240
1240
  <div class="header-info">
1241
1241
  <div class="info-item"><span class="info-label">Date:</span><span class="info-value">${header?.timestamp ? new Date(header.timestamp).toLocaleString() : 'unknown'}</span></div>
1242
1242
  <div class="info-item"><span class="info-label">Models:</span><span class="info-value">${globalStats.models.join(', ') || 'unknown'}</span></div>
@@ -1580,13 +1580,19 @@
1580
1580
  searchQuery = '';
1581
1581
  navigateTo(leafId, 'bottom');
1582
1582
  }
1583
- if (e.ctrlKey && e.key === 't') {
1583
+ if (e.key === 't' || e.key === 'T' || e.key === 'o' || e.key === 'O') {
1584
+ // Skip when typing in the sidebar search (or any other editable target)
1585
+ // so the chord can't fire on a user's letter input. Avoid Ctrl/Cmd-based
1586
+ // chords entirely — every major browser reserves Ctrl+T (new tab) and
1587
+ // Ctrl+O (open file), so the shortcut would never reach the page.
1588
+ const t = e.target;
1589
+ const editable =
1590
+ t && (t.tagName === 'INPUT' || t.tagName === 'TEXTAREA' || t.isContentEditable);
1591
+ if (editable) return;
1592
+ if (e.ctrlKey || e.metaKey || e.altKey) return;
1584
1593
  e.preventDefault();
1585
- toggleThinking();
1586
- }
1587
- if (e.ctrlKey && e.key === 'o') {
1588
- e.preventDefault();
1589
- toggleToolOutputs();
1594
+ if (e.key === 't' || e.key === 'T') toggleThinking();
1595
+ else toggleToolOutputs();
1590
1596
  }
1591
1597
  });
1592
1598
 
@@ -126,6 +126,7 @@ export type CustomToolSessionEvent =
126
126
  maxAttempts: number;
127
127
  delayMs: number;
128
128
  errorMessage: string;
129
+ errorId?: number;
129
130
  }
130
131
  | {
131
132
  reason: "auto_retry_end";
@@ -24,7 +24,7 @@ import { installLegacyPiSpecifierShim, loadLegacyPiModule } from "../plugins/leg
24
24
  import { getAllPluginExtensionPaths } from "../plugins/loader";
25
25
  import * as TypeBox from "../typebox";
26
26
 
27
- import { resolvePath } from "../utils";
27
+ import { resolvePath, withExitGuard } from "../utils";
28
28
  import type {
29
29
  AssistantThinkingRenderer,
30
30
  Extension,
@@ -290,7 +290,7 @@ async function loadExtension(
290
290
  ): Promise<{ extension: Extension | null; error: string | null }> {
291
291
  const resolvedPath = resolvePath(extensionPath, cwd);
292
292
  try {
293
- const module = (await loadLegacyPiModule(resolvedPath)) as LoadedExtensionModule;
293
+ const module = (await withExitGuard(() => loadLegacyPiModule(resolvedPath))) as LoadedExtensionModule;
294
294
  const factory = getExtensionFactory(module);
295
295
 
296
296
  if (typeof factory !== "function") {
@@ -302,7 +302,9 @@ async function loadExtension(
302
302
 
303
303
  const extension = createExtension(extensionPath, resolvedPath);
304
304
  const api = new ConcreteExtensionAPI(PiCodingAgent, extension, runtime, cwd, eventBus);
305
- await factory(api);
305
+ await withExitGuard(async () => {
306
+ await factory(api);
307
+ });
306
308
 
307
309
  return { extension, error: null };
308
310
  } catch (err) {
@@ -6,7 +6,7 @@ import type { ImageContent, Static, TextContent, TSchema } from "@oh-my-pi/pi-ai
6
6
  import type { Settings } from "../../config/settings";
7
7
  import type { Theme } from "../../modes/theme/theme";
8
8
  import { type ApprovalMode, formatApprovalPrompt, requiresApproval } from "../../tools/approval";
9
- import { normalizeToolEventInput } from "../tool-event-input";
9
+ import { normalizeToolEventInput, resolveToolEventInput } from "../tool-event-input";
10
10
  import { applyToolProxy } from "../tool-proxy";
11
11
  import type { ExtensionRunner } from "./runner";
12
12
  import type { RegisteredTool, ToolCallEventResult } from "./types";
@@ -186,7 +186,10 @@ export class ExtensionToolWrapper<TParameters extends TSchema = TSchema, TDetail
186
186
  type: "tool_call",
187
187
  toolName: this.tool.name,
188
188
  toolCallId,
189
- input: normalizeToolEventInput(this.tool.name, params as Record<string, unknown>),
189
+ input: normalizeToolEventInput(
190
+ this.tool.name,
191
+ resolveToolEventInput(this.tool, params as Record<string, unknown>),
192
+ ),
190
193
  })) as ToolCallEventResult | undefined;
191
194
 
192
195
  if (callResult?.block) {
@@ -221,7 +224,10 @@ export class ExtensionToolWrapper<TParameters extends TSchema = TSchema, TDetail
221
224
  type: "tool_result",
222
225
  toolName: this.tool.name,
223
226
  toolCallId,
224
- input: normalizeToolEventInput(this.tool.name, params as Record<string, unknown>),
227
+ input: normalizeToolEventInput(
228
+ this.tool.name,
229
+ resolveToolEventInput(this.tool, params as Record<string, unknown>),
230
+ ),
225
231
  content: result.content,
226
232
  details: result.details,
227
233
  isError: !!executionError,
@@ -12,7 +12,7 @@ import { loadCapability } from "../../discovery";
12
12
  import * as PiCodingAgent from "../../index";
13
13
  import type { HookMessage } from "../../session/messages";
14
14
  import * as typebox from "../typebox";
15
- import { resolvePath } from "../utils";
15
+ import { resolvePath, withExitGuard } from "../utils";
16
16
  import { execCommand } from "./runner";
17
17
  import type { ExecOptions, HookAPI, HookFactory, HookMessageRenderer, RegisteredCommand } from "./types";
18
18
 
@@ -149,7 +149,7 @@ async function loadHook(hookPath: string, cwd: string): Promise<{ hook: LoadedHo
149
149
 
150
150
  try {
151
151
  // Import the module using native Bun import
152
- const module = await import(resolvedPath);
152
+ const module = await withExitGuard(() => import(resolvedPath));
153
153
  const factory = module.default as HookFactory;
154
154
 
155
155
  if (typeof factory !== "function") {
@@ -164,7 +164,7 @@ async function loadHook(hookPath: string, cwd: string): Promise<{ hook: LoadedHo
164
164
  );
165
165
 
166
166
  // Call factory to register handlers
167
- factory(api);
167
+ await withExitGuard(async () => factory(api));
168
168
 
169
169
  return {
170
170
  hook: {
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import type { AgentTool, AgentToolContext, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
5
5
  import type { Static, TSchema } from "@oh-my-pi/pi-ai";
6
- import { normalizeToolEventInput } from "../tool-event-input";
6
+ import { normalizeToolEventInput, resolveToolEventInput } from "../tool-event-input";
7
7
  import { applyToolProxy } from "../tool-proxy";
8
8
  import type { HookRunner } from "./runner";
9
9
  import type { ToolCallEventResult, ToolResultEventResult } from "./types";
@@ -47,7 +47,10 @@ export class HookToolWrapper<TParameters extends TSchema = TSchema, TDetails = u
47
47
  type: "tool_call",
48
48
  toolName: this.tool.name,
49
49
  toolCallId,
50
- input: normalizeToolEventInput(this.tool.name, params as Record<string, unknown>),
50
+ input: normalizeToolEventInput(
51
+ this.tool.name,
52
+ resolveToolEventInput(this.tool, params as Record<string, unknown>),
53
+ ),
51
54
  })) as ToolCallEventResult | undefined;
52
55
 
53
56
  if (callResult?.block) {
@@ -73,7 +76,10 @@ export class HookToolWrapper<TParameters extends TSchema = TSchema, TDetails = u
73
76
  type: "tool_result",
74
77
  toolName: this.tool.name,
75
78
  toolCallId,
76
- input: normalizeToolEventInput(this.tool.name, params as Record<string, unknown>),
79
+ input: normalizeToolEventInput(
80
+ this.tool.name,
81
+ resolveToolEventInput(this.tool, params as Record<string, unknown>),
82
+ ),
77
83
  content: result.content,
78
84
  details: result.details,
79
85
  isError: false,
@@ -96,7 +102,10 @@ export class HookToolWrapper<TParameters extends TSchema = TSchema, TDetails = u
96
102
  type: "tool_result",
97
103
  toolName: this.tool.name,
98
104
  toolCallId,
99
- input: normalizeToolEventInput(this.tool.name, params as Record<string, unknown>),
105
+ input: normalizeToolEventInput(
106
+ this.tool.name,
107
+ resolveToolEventInput(this.tool, params as Record<string, unknown>),
108
+ ),
100
109
  content: [{ type: "text", text: err instanceof Error ? err.message : String(err) }],
101
110
  details: undefined,
102
111
  isError: true,
@@ -23,6 +23,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
23
23
  "@oh-my-pi/pi-agent-core/compaction/tool-protection",
24
24
  "@oh-my-pi/pi-agent-core/compaction/utils",
25
25
  "@oh-my-pi/pi-ai",
26
+ "@oh-my-pi/pi-ai/error",
26
27
  "@oh-my-pi/pi-ai/auth-broker",
27
28
  "@oh-my-pi/pi-ai/auth-gateway",
28
29
  "@oh-my-pi/pi-ai/utils/harmony-leak",
@@ -56,6 +57,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
56
57
  "@oh-my-pi/pi-ai/providers/devin",
57
58
  "@oh-my-pi/pi-ai/providers/error-message",
58
59
  "@oh-my-pi/pi-ai/providers/github-copilot-headers",
60
+ "@oh-my-pi/pi-ai/providers/gitlab-duo-workflow",
59
61
  "@oh-my-pi/pi-ai/providers/gitlab-duo",
60
62
  "@oh-my-pi/pi-ai/providers/google-auth",
61
63
  "@oh-my-pi/pi-ai/providers/google-gemini-cli",
@@ -94,6 +96,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
94
96
  "@oh-my-pi/pi-ai/usage/kimi",
95
97
  "@oh-my-pi/pi-ai/usage/minimax-code",
96
98
  "@oh-my-pi/pi-ai/usage/ollama",
99
+ "@oh-my-pi/pi-ai/usage/openai-codex-base-url",
97
100
  "@oh-my-pi/pi-ai/usage/openai-codex-reset",
98
101
  "@oh-my-pi/pi-ai/usage/openai-codex",
99
102
  "@oh-my-pi/pi-ai/usage/opencode-go",
@@ -101,6 +104,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
101
104
  "@oh-my-pi/pi-ai/usage/zai",
102
105
  "@oh-my-pi/pi-ai/utils/abort",
103
106
  "@oh-my-pi/pi-ai/utils/anthropic-auth",
107
+ "@oh-my-pi/pi-ai/utils/block-symbols",
104
108
  "@oh-my-pi/pi-ai/utils/deterministic-id",
105
109
  "@oh-my-pi/pi-ai/utils/empty-completion-retry",
106
110
  "@oh-my-pi/pi-ai/utils/event-stream",
@@ -110,7 +114,6 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
110
114
  "@oh-my-pi/pi-ai/utils/idle-iterator",
111
115
  "@oh-my-pi/pi-ai/utils/openai-http",
112
116
  "@oh-my-pi/pi-ai/utils/openrouter-headers",
113
- "@oh-my-pi/pi-ai/utils/overflow",
114
117
  "@oh-my-pi/pi-ai/utils/parse-bind",
115
118
  "@oh-my-pi/pi-ai/utils/provider-response",
116
119
  "@oh-my-pi/pi-ai/utils/proxy",
@@ -128,6 +131,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
128
131
  "@oh-my-pi/pi-ai/oauth/cursor",
129
132
  "@oh-my-pi/pi-ai/oauth/devin",
130
133
  "@oh-my-pi/pi-ai/oauth/github-copilot",
134
+ "@oh-my-pi/pi-ai/oauth/gitlab-duo-workflow",
131
135
  "@oh-my-pi/pi-ai/oauth/gitlab-duo",
132
136
  "@oh-my-pi/pi-ai/oauth/google-antigravity",
133
137
  "@oh-my-pi/pi-ai/oauth/google-gemini-cli",
@@ -187,6 +191,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
187
191
  "@oh-my-pi/pi-coding-agent/eval",
188
192
  "@oh-my-pi/pi-coding-agent/lsp",
189
193
  "@oh-my-pi/pi-coding-agent/lsp/clients",
194
+ "@oh-my-pi/pi-coding-agent/markit",
190
195
  "@oh-my-pi/pi-coding-agent/mcp",
191
196
  "@oh-my-pi/pi-coding-agent/mcp/transports",
192
197
  "@oh-my-pi/pi-coding-agent/memories",
@@ -481,6 +486,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
481
486
  "@oh-my-pi/pi-coding-agent/internal-urls/router",
482
487
  "@oh-my-pi/pi-coding-agent/internal-urls/rule-protocol",
483
488
  "@oh-my-pi/pi-coding-agent/internal-urls/skill-protocol",
489
+ "@oh-my-pi/pi-coding-agent/internal-urls/ssh-protocol",
484
490
  "@oh-my-pi/pi-coding-agent/internal-urls/types",
485
491
  "@oh-my-pi/pi-coding-agent/internal-urls/vault-protocol",
486
492
  "@oh-my-pi/pi-coding-agent/eval/js/context-manager",
@@ -508,6 +514,8 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
508
514
  "@oh-my-pi/pi-coding-agent/lsp/clients/biome-client",
509
515
  "@oh-my-pi/pi-coding-agent/lsp/clients/lsp-linter-client",
510
516
  "@oh-my-pi/pi-coding-agent/lsp/clients/swiftlint-client",
517
+ "@oh-my-pi/pi-coding-agent/markit/registry",
518
+ "@oh-my-pi/pi-coding-agent/markit/types",
511
519
  "@oh-my-pi/pi-coding-agent/mcp/client",
512
520
  "@oh-my-pi/pi-coding-agent/mcp/config-writer",
513
521
  "@oh-my-pi/pi-coding-agent/mcp/config",
@@ -554,6 +562,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
554
562
  "@oh-my-pi/pi-coding-agent/modes/orchestrate",
555
563
  "@oh-my-pi/pi-coding-agent/modes/print-mode",
556
564
  "@oh-my-pi/pi-coding-agent/modes/prompt-action-autocomplete",
565
+ "@oh-my-pi/pi-coding-agent/modes/running-subagent-badge",
557
566
  "@oh-my-pi/pi-coding-agent/modes/runtime-init",
558
567
  "@oh-my-pi/pi-coding-agent/modes/session-observer-registry",
559
568
  "@oh-my-pi/pi-coding-agent/modes/setup-version",
@@ -603,6 +612,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
603
612
  "@oh-my-pi/pi-coding-agent/modes/components/mcp-add-wizard",
604
613
  "@oh-my-pi/pi-coding-agent/modes/components/message-frame",
605
614
  "@oh-my-pi/pi-coding-agent/modes/components/model-selector",
615
+ "@oh-my-pi/pi-coding-agent/modes/components/move-overlay",
606
616
  "@oh-my-pi/pi-coding-agent/modes/components/oauth-selector",
607
617
  "@oh-my-pi/pi-coding-agent/modes/components/omfg-panel",
608
618
  "@oh-my-pi/pi-coding-agent/modes/components/overlay-box",
@@ -614,6 +624,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
614
624
  "@oh-my-pi/pi-coding-agent/modes/components/read-tool-group",
615
625
  "@oh-my-pi/pi-coding-agent/modes/components/reset-usage-selector",
616
626
  "@oh-my-pi/pi-coding-agent/modes/components/segment-track",
627
+ "@oh-my-pi/pi-coding-agent/modes/components/select-list-mouse-routing",
617
628
  "@oh-my-pi/pi-coding-agent/modes/components/selector-helpers",
618
629
  "@oh-my-pi/pi-coding-agent/modes/components/session-selector",
619
630
  "@oh-my-pi/pi-coding-agent/modes/components/settings-defs",
@@ -714,12 +725,14 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
714
725
  "@oh-my-pi/pi-coding-agent/session/session-paths",
715
726
  "@oh-my-pi/pi-coding-agent/session/session-persistence",
716
727
  "@oh-my-pi/pi-coding-agent/session/session-storage",
728
+ "@oh-my-pi/pi-coding-agent/session/settings-stream-fn",
717
729
  "@oh-my-pi/pi-coding-agent/session/shake-types",
718
730
  "@oh-my-pi/pi-coding-agent/session/snapcompact-inline",
719
731
  "@oh-my-pi/pi-coding-agent/session/snapcompact-savings-journal",
720
732
  "@oh-my-pi/pi-coding-agent/session/sql-session-storage",
721
733
  "@oh-my-pi/pi-coding-agent/session/streaming-output",
722
734
  "@oh-my-pi/pi-coding-agent/session/tool-choice-queue",
735
+ "@oh-my-pi/pi-coding-agent/session/turn-persistence",
723
736
  "@oh-my-pi/pi-coding-agent/session/unexpected-stop-classifier",
724
737
  "@oh-my-pi/pi-coding-agent/session/yield-queue",
725
738
  "@oh-my-pi/pi-coding-agent/slash-commands/acp-builtins",
@@ -729,6 +742,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
729
742
  "@oh-my-pi/pi-coding-agent/slash-commands/types",
730
743
  "@oh-my-pi/pi-coding-agent/ssh/config-writer",
731
744
  "@oh-my-pi/pi-coding-agent/ssh/connection-manager",
745
+ "@oh-my-pi/pi-coding-agent/ssh/file-transfer",
732
746
  "@oh-my-pi/pi-coding-agent/ssh/ssh-executor",
733
747
  "@oh-my-pi/pi-coding-agent/ssh/sshfs-mount",
734
748
  "@oh-my-pi/pi-coding-agent/ssh/utils",
@@ -838,6 +852,7 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
838
852
  "@oh-my-pi/pi-coding-agent/tui/types",
839
853
  "@oh-my-pi/pi-coding-agent/tui/utils",
840
854
  "@oh-my-pi/pi-coding-agent/tui/width-aware-text",
855
+ "@oh-my-pi/pi-coding-agent/utils/active-repo-context",
841
856
  "@oh-my-pi/pi-coding-agent/utils/block-context",
842
857
  "@oh-my-pi/pi-coding-agent/utils/changelog",
843
858
  "@oh-my-pi/pi-coding-agent/utils/clipboard",
@@ -856,9 +871,11 @@ export const BUNDLED_PI_REGISTRY_KEYS: ReadonlySet<string> = new Set([
856
871
  "@oh-my-pi/pi-coding-agent/utils/ipc",
857
872
  "@oh-my-pi/pi-coding-agent/utils/jj",
858
873
  "@oh-my-pi/pi-coding-agent/utils/lang-from-path",
874
+ "@oh-my-pi/pi-coding-agent/utils/markit-cache",
859
875
  "@oh-my-pi/pi-coding-agent/utils/markit",
860
876
  "@oh-my-pi/pi-coding-agent/utils/mupdf-wasm-embed",
861
877
  "@oh-my-pi/pi-coding-agent/utils/open",
878
+ "@oh-my-pi/pi-coding-agent/utils/prompt-path",
862
879
  "@oh-my-pi/pi-coding-agent/utils/qrcode",
863
880
  "@oh-my-pi/pi-coding-agent/utils/session-color",
864
881
  "@oh-my-pi/pi-coding-agent/utils/shell-snapshot",