@oh-my-pi/pi-coding-agent 15.10.11 → 15.10.12

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 (121) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/cli.js +5349 -5328
  3. package/dist/types/cli/args.d.ts +1 -0
  4. package/dist/types/cli-commands.d.ts +12 -0
  5. package/dist/types/commands/launch.d.ts +4 -0
  6. package/dist/types/config/api-key-resolver.d.ts +3 -0
  7. package/dist/types/config/model-registry.d.ts +1 -0
  8. package/dist/types/config/model-resolver.d.ts +18 -0
  9. package/dist/types/config/settings-schema.d.ts +29 -1
  10. package/dist/types/config/settings.d.ts +7 -0
  11. package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
  12. package/dist/types/eval/py/executor.d.ts +5 -0
  13. package/dist/types/eval/py/kernel.d.ts +6 -1
  14. package/dist/types/eval/py/runtime.d.ts +9 -0
  15. package/dist/types/exec/bash-executor.d.ts +2 -0
  16. package/dist/types/extensibility/extensions/runner.d.ts +3 -2
  17. package/dist/types/extensibility/extensions/types.d.ts +3 -0
  18. package/dist/types/memory-backend/index.d.ts +1 -0
  19. package/dist/types/memory-backend/runtime.d.ts +4 -0
  20. package/dist/types/memory-backend/types.d.ts +66 -1
  21. package/dist/types/modes/index.d.ts +3 -3
  22. package/dist/types/modes/interactive-mode.d.ts +7 -2
  23. package/dist/types/modes/oauth-manual-input.d.ts +7 -0
  24. package/dist/types/modes/rpc/rpc-client.d.ts +39 -2
  25. package/dist/types/modes/rpc/rpc-mode.d.ts +31 -2
  26. package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
  27. package/dist/types/modes/rpc/rpc-types.d.ts +75 -1
  28. package/dist/types/modes/setup-wizard/index.d.ts +5 -1
  29. package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
  30. package/dist/types/modes/types.d.ts +2 -0
  31. package/dist/types/secrets/index.d.ts +1 -1
  32. package/dist/types/secrets/obfuscator.d.ts +8 -2
  33. package/dist/types/session/agent-session.d.ts +14 -2
  34. package/dist/types/session/streaming-output.d.ts +23 -0
  35. package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
  36. package/dist/types/slash-commands/builtin-registry.d.ts +1 -0
  37. package/dist/types/slash-commands/types.d.ts +1 -1
  38. package/dist/types/system-prompt.d.ts +2 -0
  39. package/dist/types/task/executor.d.ts +1 -0
  40. package/dist/types/task/index.d.ts +2 -2
  41. package/dist/types/task/types.d.ts +8 -0
  42. package/dist/types/thinking.d.ts +4 -0
  43. package/dist/types/tiny/title-client.d.ts +11 -0
  44. package/dist/types/tiny/title-protocol.d.ts +1 -0
  45. package/dist/types/tools/index.d.ts +6 -0
  46. package/dist/types/utils/git.d.ts +15 -2
  47. package/dist/types/utils/title-generator.d.ts +3 -2
  48. package/package.json +10 -10
  49. package/src/auto-thinking/classifier.ts +1 -0
  50. package/src/cli/args.ts +3 -0
  51. package/src/cli-commands.ts +29 -0
  52. package/src/cli.ts +8 -9
  53. package/src/commands/launch.ts +4 -0
  54. package/src/commit/model-selection.ts +3 -2
  55. package/src/config/api-key-resolver.ts +8 -6
  56. package/src/config/model-registry.ts +97 -30
  57. package/src/config/model-resolver.ts +60 -0
  58. package/src/config/settings-schema.ts +43 -15
  59. package/src/config/settings.ts +61 -3
  60. package/src/edit/hashline/execute.ts +39 -2
  61. package/src/edit/hashline/noop-loop-guard.ts +99 -0
  62. package/src/eval/completion-bridge.ts +1 -0
  63. package/src/eval/py/executor.ts +29 -7
  64. package/src/eval/py/index.ts +6 -1
  65. package/src/eval/py/kernel.ts +31 -11
  66. package/src/eval/py/runtime.ts +37 -0
  67. package/src/exec/bash-executor.ts +82 -3
  68. package/src/extensibility/extensions/get-commands-handler.ts +2 -1
  69. package/src/extensibility/extensions/runner.ts +6 -1
  70. package/src/extensibility/extensions/types.ts +3 -0
  71. package/src/hindsight/bank.ts +17 -2
  72. package/src/internal-urls/docs-index.generated.ts +3 -3
  73. package/src/main.ts +18 -6
  74. package/src/memories/index.ts +2 -0
  75. package/src/memory-backend/index.ts +1 -0
  76. package/src/memory-backend/local-backend.ts +9 -0
  77. package/src/memory-backend/off-backend.ts +9 -0
  78. package/src/memory-backend/runtime.ts +66 -0
  79. package/src/memory-backend/types.ts +81 -1
  80. package/src/mnemopi/backend.ts +151 -4
  81. package/src/modes/acp/acp-agent.ts +119 -11
  82. package/src/modes/components/assistant-message.ts +19 -21
  83. package/src/modes/components/footer.ts +3 -1
  84. package/src/modes/components/status-line/component.ts +118 -34
  85. package/src/modes/controllers/command-controller.ts +1 -1
  86. package/src/modes/controllers/input-controller.ts +1 -0
  87. package/src/modes/controllers/mcp-command-controller.ts +38 -3
  88. package/src/modes/index.ts +3 -21
  89. package/src/modes/interactive-mode.ts +39 -9
  90. package/src/modes/oauth-manual-input.ts +30 -3
  91. package/src/modes/rpc/rpc-client.ts +154 -3
  92. package/src/modes/rpc/rpc-mode.ts +97 -12
  93. package/src/modes/rpc/rpc-subagents.ts +265 -0
  94. package/src/modes/rpc/rpc-types.ts +81 -1
  95. package/src/modes/setup-wizard/index.ts +12 -2
  96. package/src/modes/setup-wizard/lazy.ts +16 -0
  97. package/src/modes/types.ts +2 -0
  98. package/src/sdk.ts +8 -1
  99. package/src/secrets/index.ts +8 -1
  100. package/src/secrets/obfuscator.ts +39 -18
  101. package/src/session/agent-session.ts +179 -54
  102. package/src/session/streaming-output.ts +166 -10
  103. package/src/slash-commands/acp-builtins.ts +24 -0
  104. package/src/slash-commands/builtin-registry.ts +20 -0
  105. package/src/slash-commands/types.ts +1 -1
  106. package/src/system-prompt.ts +14 -0
  107. package/src/task/executor.ts +13 -12
  108. package/src/task/index.ts +9 -8
  109. package/src/task/render.ts +18 -3
  110. package/src/task/types.ts +9 -0
  111. package/src/thinking.ts +7 -0
  112. package/src/tiny/title-client.ts +34 -5
  113. package/src/tiny/title-protocol.ts +1 -1
  114. package/src/tiny/worker.ts +6 -4
  115. package/src/tools/bash.ts +46 -5
  116. package/src/tools/image-gen.ts +11 -4
  117. package/src/tools/index.ts +13 -1
  118. package/src/tools/inspect-image.ts +1 -0
  119. package/src/utils/commit-message-generator.ts +1 -0
  120. package/src/utils/git.ts +267 -13
  121. package/src/utils/title-generator.ts +24 -5
@@ -33,7 +33,7 @@ const setTitleTool: Tool = {
33
33
  title: {
34
34
  type: "string",
35
35
  description:
36
- 'A concise, sentence-case 3-7 word title for the session (capitalize only the first word and proper nouns), or exactly "none" when the message carries no concrete task yet (greeting, small talk, vague).',
36
+ 'The generated session title, or exactly "none" when the message carries no concrete task yet.',
37
37
  },
38
38
  },
39
39
  required: ["title"],
@@ -137,6 +137,7 @@ export async function raceFirstNonNull<T>(
137
137
  * to produce request metadata (e.g. user_id for session attribution). Using a
138
138
  * resolver instead of a pre-evaluated value ensures the metadata's account_uuid
139
139
  * reflects the credential actually selected for this request.
140
+ * @param customSystemPrompt Optional title-specific system prompt override
140
141
  */
141
142
  export async function generateSessionTitle(
142
143
  firstMessage: string,
@@ -145,6 +146,7 @@ export async function generateSessionTitle(
145
146
  sessionId?: string,
146
147
  currentModel?: Model<Api>,
147
148
  metadataResolver?: (provider: string) => Record<string, unknown> | undefined,
149
+ customSystemPrompt?: string,
148
150
  ): Promise<string | null> {
149
151
  // Defer titling for greetings / acknowledgements / empty input. The default
150
152
  // tiny title model can't reliably decline trivial input, so this happens
@@ -155,13 +157,26 @@ export async function generateSessionTitle(
155
157
  return null;
156
158
  }
157
159
 
160
+ const titleSystemPrompt = customSystemPrompt?.trim() || undefined;
158
161
  const tinyModel = settings.get("providers.tinyModel");
159
162
  if (tinyModel === ONLINE_TINY_TITLE_MODEL_KEY) {
160
- return generateTitleOnline(firstMessage, registry, settings, sessionId, currentModel, metadataResolver);
163
+ return generateTitleOnline(
164
+ firstMessage,
165
+ registry,
166
+ settings,
167
+ sessionId,
168
+ currentModel,
169
+ metadataResolver,
170
+ undefined,
171
+ titleSystemPrompt,
172
+ );
161
173
  }
162
174
 
163
175
  const onlineAbortController = new AbortController();
164
- const localTitle = tinyTitleClient.generate(tinyModel, firstMessage).then(
176
+ const localTitlePromise = titleSystemPrompt
177
+ ? tinyTitleClient.generate(tinyModel, firstMessage, { systemPrompt: titleSystemPrompt })
178
+ : tinyTitleClient.generate(tinyModel, firstMessage);
179
+ const localTitle = localTitlePromise.then(
165
180
  title => title || null,
166
181
  err => {
167
182
  logger.warn("title-generator: local model error", {
@@ -181,6 +196,7 @@ export async function generateSessionTitle(
181
196
  currentModel,
182
197
  metadataResolver,
183
198
  onlineAbortController.signal,
199
+ titleSystemPrompt,
184
200
  );
185
201
 
186
202
  return raceFirstNonNull(localTitle, startOnline, TITLE_LOCAL_FALLBACK_DELAY_MS, () => {
@@ -196,6 +212,7 @@ export async function generateTitleOnline(
196
212
  currentModel?: Model<Api>,
197
213
  metadataResolver?: (provider: string) => Record<string, unknown> | undefined,
198
214
  signal?: AbortSignal,
215
+ customSystemPrompt?: string,
199
216
  ): Promise<string | null> {
200
217
  const model = getTitleModel(registry, settings, currentModel);
201
218
  if (!model) {
@@ -203,6 +220,8 @@ export async function generateTitleOnline(
203
220
  return null;
204
221
  }
205
222
 
223
+ const titleSystemPrompt = customSystemPrompt?.trim() || undefined;
224
+ const systemPrompt = titleSystemPrompt ?? TITLE_SYSTEM_PROMPT;
206
225
  const userMessage = formatTitleUserMessage(firstMessage);
207
226
  const modelName = `${model.provider}/${model.id}`;
208
227
  const modelContext = {
@@ -234,12 +253,12 @@ export async function generateTitleOnline(
234
253
  const response = await completeSimple(
235
254
  model,
236
255
  {
237
- systemPrompt: [TITLE_SYSTEM_PROMPT],
256
+ systemPrompt: [systemPrompt],
238
257
  messages: [{ role: "user", content: userMessage, timestamp: Date.now() }],
239
258
  tools: [setTitleTool],
240
259
  },
241
260
  {
242
- apiKey: registry.resolver(model.provider, { sessionId, baseUrl: model.baseUrl }),
261
+ apiKey: registry.resolver(model.provider, { sessionId, baseUrl: model.baseUrl, modelId: model.id }),
243
262
  maxTokens,
244
263
  disableReasoning: true,
245
264
  toolChoice: { type: "tool", name: SET_TITLE_TOOL_NAME },