@code-yeongyu/senpi 2026.5.15 → 2026.5.16

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 (170) hide show
  1. package/CHANGELOG.md +1113 -1177
  2. package/README.md +1 -2
  3. package/dist/core/agent-session.d.ts +9 -0
  4. package/dist/core/agent-session.d.ts.map +1 -1
  5. package/dist/core/agent-session.js +114 -8
  6. package/dist/core/agent-session.js.map +1 -1
  7. package/dist/core/dynamic-prompt/verification.d.ts +31 -0
  8. package/dist/core/dynamic-prompt/verification.d.ts.map +1 -1
  9. package/dist/core/dynamic-prompt/verification.js +41 -0
  10. package/dist/core/dynamic-prompt/verification.js.map +1 -1
  11. package/dist/core/extensions/builtin/compaction/context-reduction.d.ts +97 -0
  12. package/dist/core/extensions/builtin/compaction/context-reduction.d.ts.map +1 -0
  13. package/dist/core/extensions/builtin/compaction/context-reduction.js +420 -0
  14. package/dist/core/extensions/builtin/compaction/context-reduction.js.map +1 -0
  15. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  16. package/dist/core/extensions/builtin/compaction/index.js +168 -31
  17. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  18. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +197 -0
  19. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -0
  20. package/dist/core/extensions/builtin/compaction/openai-remote.js +690 -0
  21. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -0
  22. package/dist/core/extensions/builtin/compaction/prompts.d.ts +3 -3
  23. package/dist/core/extensions/builtin/compaction/prompts.d.ts.map +1 -1
  24. package/dist/core/extensions/builtin/compaction/prompts.js +0 -22
  25. package/dist/core/extensions/builtin/compaction/prompts.js.map +1 -1
  26. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.d.ts +4 -0
  27. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.d.ts.map +1 -0
  28. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.js +48 -0
  29. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.js.map +1 -0
  30. package/dist/core/extensions/builtin/compaction/speculative.d.ts +3 -1
  31. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  32. package/dist/core/extensions/builtin/compaction/speculative.js +80 -33
  33. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  34. package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts +8 -0
  35. package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts.map +1 -1
  36. package/dist/core/extensions/builtin/compaction/todo-bridge.js +12 -6
  37. package/dist/core/extensions/builtin/compaction/todo-bridge.js.map +1 -1
  38. package/dist/core/extensions/builtin/diff.d.ts.map +1 -1
  39. package/dist/core/extensions/builtin/diff.js +1 -1
  40. package/dist/core/extensions/builtin/diff.js.map +1 -1
  41. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  42. package/dist/core/extensions/builtin/index.js +0 -2
  43. package/dist/core/extensions/builtin/index.js.map +1 -1
  44. package/dist/core/extensions/builtin/openai-web-search/index.d.ts +6 -2
  45. package/dist/core/extensions/builtin/openai-web-search/index.d.ts.map +1 -1
  46. package/dist/core/extensions/builtin/openai-web-search/index.js +82 -10
  47. package/dist/core/extensions/builtin/openai-web-search/index.js.map +1 -1
  48. package/dist/core/extensions/builtin/permission-system/prompt.d.ts.map +1 -1
  49. package/dist/core/extensions/builtin/permission-system/prompt.js +0 -5
  50. package/dist/core/extensions/builtin/permission-system/prompt.js.map +1 -1
  51. package/dist/core/extensions/builtin/system-messages.d.ts +1 -1
  52. package/dist/core/extensions/builtin/system-messages.d.ts.map +1 -1
  53. package/dist/core/extensions/builtin/system-messages.js.map +1 -1
  54. package/dist/core/extensions/builtin/tool-pair-guard/index.d.ts +1 -1
  55. package/dist/core/extensions/builtin/tool-pair-guard/index.d.ts.map +1 -1
  56. package/dist/core/extensions/builtin/tool-pair-guard/index.js +8 -4
  57. package/dist/core/extensions/builtin/tool-pair-guard/index.js.map +1 -1
  58. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.d.ts +3 -0
  59. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.d.ts.map +1 -0
  60. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.js +89 -0
  61. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.js.map +1 -0
  62. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.d.ts +3 -0
  63. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.d.ts.map +1 -0
  64. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.js +122 -0
  65. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.js.map +1 -0
  66. package/dist/core/extensions/loader.d.ts.map +1 -1
  67. package/dist/core/extensions/loader.js +2 -0
  68. package/dist/core/extensions/loader.js.map +1 -1
  69. package/dist/core/extensions/runner.d.ts +3 -0
  70. package/dist/core/extensions/runner.d.ts.map +1 -1
  71. package/dist/core/extensions/runner.js +18 -0
  72. package/dist/core/extensions/runner.js.map +1 -1
  73. package/dist/core/extensions/types.d.ts +22 -0
  74. package/dist/core/extensions/types.d.ts.map +1 -1
  75. package/dist/core/extensions/types.js.map +1 -1
  76. package/dist/core/messages.d.ts +3 -3
  77. package/dist/core/messages.d.ts.map +1 -1
  78. package/dist/core/messages.js +5 -10
  79. package/dist/core/messages.js.map +1 -1
  80. package/dist/core/model-registry.d.ts.map +1 -1
  81. package/dist/core/model-registry.js +2 -0
  82. package/dist/core/model-registry.js.map +1 -1
  83. package/dist/core/sdk.d.ts +1 -1
  84. package/dist/core/sdk.d.ts.map +1 -1
  85. package/dist/core/sdk.js +7 -22
  86. package/dist/core/sdk.js.map +1 -1
  87. package/dist/core/session-manager.d.ts.map +1 -1
  88. package/dist/core/session-manager.js +1 -1
  89. package/dist/core/session-manager.js.map +1 -1
  90. package/dist/core/settings-manager.d.ts +0 -5
  91. package/dist/core/settings-manager.d.ts.map +1 -1
  92. package/dist/core/settings-manager.js.map +1 -1
  93. package/dist/core/thinking-levels.d.ts +6 -0
  94. package/dist/core/thinking-levels.d.ts.map +1 -0
  95. package/dist/core/thinking-levels.js +36 -0
  96. package/dist/core/thinking-levels.js.map +1 -0
  97. package/dist/core/tools/bash.d.ts.map +1 -1
  98. package/dist/core/tools/bash.js +15 -1
  99. package/dist/core/tools/bash.js.map +1 -1
  100. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  101. package/dist/modes/interactive/components/compaction-summary-message.js +20 -2
  102. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  103. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  104. package/dist/modes/interactive/components/keybinding-hints.js +3 -1
  105. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  106. package/dist/modes/interactive/interactive-mode.d.ts +8 -0
  107. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  108. package/dist/modes/interactive/interactive-mode.js +137 -49
  109. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  110. package/dist/modes/interactive/working-status.d.ts +15 -0
  111. package/dist/modes/interactive/working-status.d.ts.map +1 -0
  112. package/dist/modes/interactive/working-status.js +60 -0
  113. package/dist/modes/interactive/working-status.js.map +1 -0
  114. package/dist/utils/clipboard-image.d.ts.map +1 -1
  115. package/dist/utils/clipboard-image.js +1 -1
  116. package/dist/utils/clipboard-image.js.map +1 -1
  117. package/docs/extensions.md +0 -1
  118. package/docs/index.md +0 -1
  119. package/docs/models.md +9 -0
  120. package/docs/sdk.md +0 -1
  121. package/docs/settings.md +1 -29
  122. package/docs/termux.md +2 -2
  123. package/docs/usage.md +1 -1
  124. package/examples/README.md +1 -1
  125. package/examples/extensions/README.md +0 -1
  126. package/examples/extensions/overlay-qa-tests.ts +1 -1
  127. package/package.json +4 -4
  128. package/dist/core/extensions/builtin/background-task/cancel-tool.d.ts +0 -10
  129. package/dist/core/extensions/builtin/background-task/cancel-tool.d.ts.map +0 -1
  130. package/dist/core/extensions/builtin/background-task/cancel-tool.js +0 -109
  131. package/dist/core/extensions/builtin/background-task/cancel-tool.js.map +0 -1
  132. package/dist/core/extensions/builtin/background-task/index.d.ts +0 -3
  133. package/dist/core/extensions/builtin/background-task/index.d.ts.map +0 -1
  134. package/dist/core/extensions/builtin/background-task/index.js +0 -207
  135. package/dist/core/extensions/builtin/background-task/index.js.map +0 -1
  136. package/dist/core/extensions/builtin/background-task/manager.d.ts +0 -17
  137. package/dist/core/extensions/builtin/background-task/manager.d.ts.map +0 -1
  138. package/dist/core/extensions/builtin/background-task/manager.js +0 -114
  139. package/dist/core/extensions/builtin/background-task/manager.js.map +0 -1
  140. package/dist/core/extensions/builtin/background-task/notification.d.ts +0 -22
  141. package/dist/core/extensions/builtin/background-task/notification.d.ts.map +0 -1
  142. package/dist/core/extensions/builtin/background-task/notification.js +0 -105
  143. package/dist/core/extensions/builtin/background-task/notification.js.map +0 -1
  144. package/dist/core/extensions/builtin/background-task/output-tool.d.ts +0 -11
  145. package/dist/core/extensions/builtin/background-task/output-tool.d.ts.map +0 -1
  146. package/dist/core/extensions/builtin/background-task/output-tool.js +0 -127
  147. package/dist/core/extensions/builtin/background-task/output-tool.js.map +0 -1
  148. package/dist/core/extensions/builtin/background-task/spawner.d.ts +0 -8
  149. package/dist/core/extensions/builtin/background-task/spawner.d.ts.map +0 -1
  150. package/dist/core/extensions/builtin/background-task/spawner.js +0 -207
  151. package/dist/core/extensions/builtin/background-task/spawner.js.map +0 -1
  152. package/dist/core/extensions/builtin/background-task/task-tool.d.ts +0 -20
  153. package/dist/core/extensions/builtin/background-task/task-tool.d.ts.map +0 -1
  154. package/dist/core/extensions/builtin/background-task/task-tool.js +0 -302
  155. package/dist/core/extensions/builtin/background-task/task-tool.js.map +0 -1
  156. package/dist/core/extensions/builtin/background-task/types.d.ts +0 -72
  157. package/dist/core/extensions/builtin/background-task/types.d.ts.map +0 -1
  158. package/dist/core/extensions/builtin/background-task/types.js +0 -32
  159. package/dist/core/extensions/builtin/background-task/types.js.map +0 -1
  160. package/docs/agents.md +0 -348
  161. package/examples/extensions/subagent/README.md +0 -172
  162. package/examples/extensions/subagent/agents/planner.md +0 -37
  163. package/examples/extensions/subagent/agents/reviewer.md +0 -35
  164. package/examples/extensions/subagent/agents/scout.md +0 -50
  165. package/examples/extensions/subagent/agents/worker.md +0 -24
  166. package/examples/extensions/subagent/agents.ts +0 -126
  167. package/examples/extensions/subagent/index.ts +0 -987
  168. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -10
  169. package/examples/extensions/subagent/prompts/implement.md +0 -10
  170. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -9
@@ -1,302 +0,0 @@
1
- import { Text } from "@earendil-works/pi-tui";
2
- import { Type } from "typebox";
3
- import { DEPTH_ENV_VAR, MAX_SUBAGENT_DEPTH, TASK_ENTRY_TYPE } from "./types.js";
4
- function buildTaskMetadata(args) {
5
- const overview = [
6
- args.agentType,
7
- args.model,
8
- args.activeToolNames && args.activeToolNames.length > 0 ? `tools: ${args.activeToolNames.join(", ")}` : undefined,
9
- ].filter((value) => typeof value === "string" && value.length > 0);
10
- return {
11
- headline: `${args.description}${args.runInBackground ? " [async]" : " [sync]"}`,
12
- ...(overview.length > 0 ? { overview: overview.join(" · ") } : {}),
13
- };
14
- }
15
- function buildTaskOverviewItems(details) {
16
- if (!details) {
17
- return [];
18
- }
19
- return [
20
- details.agentType,
21
- details.model,
22
- details.activeToolNames && details.activeToolNames.length > 0
23
- ? `tools: ${details.activeToolNames.join(", ")}`
24
- : undefined,
25
- ].filter((value) => typeof value === "string" && value.length > 0);
26
- }
27
- const TaskToolParams = Type.Object({
28
- description: Type.String({
29
- description: "A short (3-5 words) description of the task",
30
- }),
31
- prompt: Type.String({
32
- description: "The task for the agent to perform",
33
- }),
34
- run_in_background: Type.Boolean({
35
- description: "REQUIRED. true=async (returns task_id, system notifies on completion), false=sync (waits for result).",
36
- }),
37
- session_id: Type.Optional(Type.String({ description: "Existing Task session to continue" })),
38
- model: Type.Optional(Type.String({ description: "Model to use for this task" })),
39
- agent_type: Type.Optional(Type.String({
40
- description: "Agent type to use for this task (e.g. 'explore', 'general'). Determines available tools and permissions.",
41
- })),
42
- });
43
- function createErrorResult(text) {
44
- return {
45
- content: [{ type: "text", text }],
46
- details: {},
47
- isError: true,
48
- };
49
- }
50
- function resolveModel(params, ctx) {
51
- if (params.model) {
52
- return params.model;
53
- }
54
- if (!ctx.model) {
55
- return undefined;
56
- }
57
- return `${ctx.model.provider}/${ctx.model.id}`;
58
- }
59
- function isCancelledTask(manager, taskId) {
60
- return manager.getTask(taskId)?.status === "cancelled";
61
- }
62
- export function createTaskTool(manager, spawner, pi, agentDescriptions) {
63
- const baseDescription = `Run a sub-agent in sync or async mode.
64
-
65
- Sync mode (run_in_background=false): waits for the sub-agent to finish and returns its text output directly.
66
- Async mode (run_in_background=true): starts the sub-agent, returns a task_id immediately. System sends a notification when done.
67
-
68
- session_id is optional and continues an existing session when provided.
69
- model is optional and defaults to the current model.`;
70
- const fullDescription = agentDescriptions
71
- ? `${baseDescription}\n\nAvailable agent types:\n${agentDescriptions}`
72
- : baseDescription;
73
- const taskTool = {
74
- name: "task",
75
- label: "Task",
76
- description: fullDescription,
77
- promptSnippet: "Run a sub-agent either synchronously for direct output or asynchronously for a background task_id.",
78
- promptGuidelines: [
79
- "Use run_in_background=false when you need the sub-agent result in the same turn.",
80
- "Use run_in_background=true for parallel work. System notifies on completion via <system-reminder>.",
81
- "After launching a background task, do NOT call background_output - wait for the <system-reminder> notification first.",
82
- "Pass session_id to continue an existing sub-agent session.",
83
- ],
84
- parameters: TaskToolParams,
85
- async execute(_toolCallId, params, signal, onUpdate, ctx) {
86
- if (!params.description.trim()) {
87
- return createErrorResult("Error: description is required");
88
- }
89
- const currentDepth = Number.parseInt(process.env[DEPTH_ENV_VAR] ?? "0", 10);
90
- if (currentDepth >= MAX_SUBAGENT_DEPTH) {
91
- return createErrorResult(`Error: max subagent depth (${MAX_SUBAGENT_DEPTH}) exceeded`);
92
- }
93
- const model = resolveModel(params, ctx);
94
- const taskDetails = {
95
- agentType: params.agent_type,
96
- model,
97
- activeToolNames: [],
98
- };
99
- const permissionFlag = typeof pi.getFlag === "function"
100
- ? (pi.getFlag("permission") ?? undefined)
101
- : undefined;
102
- if (!params.run_in_background) {
103
- const spawned = spawner({
104
- prompt: params.prompt,
105
- cwd: ctx.cwd,
106
- model,
107
- agentType: params.agent_type,
108
- sessionPath: params.session_id,
109
- permissionFlag: permissionFlag ?? undefined,
110
- signal,
111
- });
112
- const result = await spawned.result;
113
- return {
114
- content: [{ type: "text", text: result.text || "(no output)" }],
115
- details: taskDetails,
116
- };
117
- }
118
- let executeReturned = false;
119
- try {
120
- const task = manager.launch({
121
- description: params.description,
122
- prompt: params.prompt,
123
- model,
124
- agentType: params.agent_type,
125
- pid: undefined,
126
- sessionPath: params.session_id,
127
- activeToolNames: [],
128
- completedAt: undefined,
129
- result: undefined,
130
- error: undefined,
131
- parentSessionId: "unknown",
132
- });
133
- pi.appendEntry(TASK_ENTRY_TYPE, task);
134
- const spawned = spawner({
135
- prompt: params.prompt,
136
- cwd: ctx.cwd,
137
- model,
138
- agentType: params.agent_type,
139
- sessionPath: params.session_id,
140
- permissionFlag: permissionFlag ?? undefined,
141
- signal,
142
- onEvent: (() => {
143
- const activeToolCalls = new Map();
144
- return (event) => {
145
- if (event.type === "tool_execution_start") {
146
- activeToolCalls.set(event.toolCallId, event.toolName);
147
- }
148
- else if (event.type === "tool_execution_end") {
149
- activeToolCalls.delete(event.toolCallId);
150
- }
151
- const currentTask = manager.getTask(task.id);
152
- if (!currentTask) {
153
- return;
154
- }
155
- const activeToolNames = Array.from(activeToolCalls.values());
156
- manager.updateTask(task.id, {
157
- activeToolNames,
158
- ...(activeToolCalls.size > 0 && currentTask.status === "pending" ? { status: "running" } : {}),
159
- });
160
- if (!executeReturned) {
161
- onUpdate?.({
162
- content: [],
163
- details: {
164
- ...taskDetails,
165
- activeToolNames,
166
- },
167
- });
168
- }
169
- const activeTask = manager.getTask(task.id);
170
- if (activeTask) {
171
- pi.appendEntry(TASK_ENTRY_TYPE, activeTask);
172
- }
173
- };
174
- })(),
175
- });
176
- if (spawned.process.pid !== undefined) {
177
- manager.updateTask(task.id, { pid: spawned.process.pid, status: "running" });
178
- onUpdate?.({ content: [], details: taskDetails });
179
- const runningTask = manager.getTask(task.id);
180
- if (runningTask) {
181
- pi.appendEntry(TASK_ENTRY_TYPE, runningTask);
182
- }
183
- }
184
- spawned.result
185
- .then((result) => {
186
- if (isCancelledTask(manager, task.id)) {
187
- return;
188
- }
189
- manager.updateTask(task.id, {
190
- status: result.exitCode === 0 ? "completed" : "error",
191
- completedAt: new Date(),
192
- activeToolNames: [],
193
- result: result.text,
194
- error: result.exitCode === 0 ? undefined : `Sub-agent exited with code ${result.exitCode}`,
195
- });
196
- const completedTask = manager.getTask(task.id);
197
- if (completedTask) {
198
- pi.appendEntry(TASK_ENTRY_TYPE, completedTask);
199
- }
200
- pi.sendMessage({
201
- customType: "background-task.complete",
202
- display: true,
203
- content: [
204
- {
205
- type: "text",
206
- text: [
207
- `Task ${task.id} completed: ${params.description}`,
208
- "",
209
- "Result:",
210
- result.text || "(no output)",
211
- ].join("\n"),
212
- },
213
- ],
214
- }, { triggerTurn: true, deliverAs: "followUp" });
215
- })
216
- .catch((error) => {
217
- if (isCancelledTask(manager, task.id)) {
218
- return;
219
- }
220
- manager.updateTask(task.id, {
221
- status: "error",
222
- completedAt: new Date(),
223
- activeToolNames: [],
224
- error: error instanceof Error ? error.message : String(error),
225
- });
226
- const erroredTask = manager.getTask(task.id);
227
- if (erroredTask) {
228
- pi.appendEntry(TASK_ENTRY_TYPE, erroredTask);
229
- }
230
- const errorMsg = error instanceof Error ? error.message : String(error);
231
- pi.sendMessage({
232
- customType: "background-task.complete",
233
- display: true,
234
- content: [
235
- {
236
- type: "text",
237
- text: [`Task ${task.id} failed: ${params.description}`, "", "Error:", errorMsg].join("\n"),
238
- },
239
- ],
240
- }, { triggerTurn: true, deliverAs: "followUp" });
241
- });
242
- executeReturned = true;
243
- const sessionIdBlock = params.session_id
244
- ? `\n\n<task_metadata>\nsession_id: ${params.session_id}\ntask_id: ${task.id}\nbackground_task_id: ${task.id}\n</task_metadata>\n\nto continue: task(session_id="${params.session_id}", run_in_background=false, prompt="...")`
245
- : `\n\n<task_metadata>\ntask_id: ${task.id}\nbackground_task_id: ${task.id}\n</task_metadata>`;
246
- return {
247
- content: [
248
- {
249
- type: "text",
250
- text: `Background task launched.
251
-
252
- Background Task ID: ${task.id}
253
- Description: ${params.description}
254
- Agent: ${params.agent_type ?? "default"}
255
- Status: ${task.status}
256
-
257
- System notifies on completion. Use \`background_output\` with task_id="${task.id}" to check.
258
-
259
- Do NOT call background_output now. Wait for <system-reminder> notification first.${sessionIdBlock}`,
260
- },
261
- ],
262
- details: taskDetails,
263
- };
264
- }
265
- catch (error) {
266
- return createErrorResult(error instanceof Error ? error.message : String(error));
267
- }
268
- },
269
- renderCall(args, theme) {
270
- const metadata = buildTaskMetadata({
271
- description: args.description,
272
- runInBackground: args.run_in_background,
273
- agentType: args.agent_type,
274
- model: args.model,
275
- });
276
- return new Text([
277
- theme.fg("toolTitle", theme.bold("Task ")) + theme.fg("accent", metadata.headline),
278
- ...(metadata.overview ? [theme.fg("muted", ` ${metadata.overview}`)] : []),
279
- ].join("\n"), 0, 0);
280
- },
281
- renderResult(result, options, theme, context) {
282
- const firstContent = result.content[0];
283
- const text = firstContent?.type === "text" ? firstContent.text : undefined;
284
- const argDetails = {
285
- agentType: context.args.agent_type,
286
- model: context.args.model,
287
- };
288
- const callOverviewItems = new Set(buildTaskOverviewItems(argDetails));
289
- const extraOverviewItems = buildTaskOverviewItems(result.details).filter((item) => !callOverviewItems.has(item));
290
- const overview = extraOverviewItems.length > 0 ? extraOverviewItems.join(" · ") : undefined;
291
- if (!text && !overview) {
292
- return new Text("", 0, 0);
293
- }
294
- if (options.isPartial && !text) {
295
- return new Text(overview ? theme.fg("muted", overview) : "", 0, 0);
296
- }
297
- return new Text([...(overview ? [theme.fg("muted", overview)] : []), ...(text ? [theme.fg("muted", text)] : [])].join("\n\n"), 0, 0);
298
- },
299
- };
300
- return taskTool;
301
- }
302
- //# sourceMappingURL=task-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-tool.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/background-task/task-tool.ts"],"names":[],"mappings":"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","sourcesContent":["import { Text } from \"@earendil-works/pi-tui\";\nimport { Type } from \"typebox\";\nimport type { ExtensionAPI, ExtensionContext, ToolDefinition } from \"../../types.js\";\nimport type { BackgroundManager } from \"./manager.js\";\nimport type { spawnSubagent } from \"./spawner.js\";\nimport { DEPTH_ENV_VAR, MAX_SUBAGENT_DEPTH, TASK_ENTRY_TYPE } from \"./types.js\";\n\ntype TaskToolDetails = {\n\tagentType?: string;\n\tmodel?: string;\n\tactiveToolNames?: string[];\n};\n\nfunction buildTaskMetadata(args: {\n\tdescription: string;\n\trunInBackground: boolean;\n\tagentType?: string;\n\tmodel?: string;\n\tactiveToolNames?: string[];\n}): { headline: string; overview?: string } {\n\tconst overview = [\n\t\targs.agentType,\n\t\targs.model,\n\t\targs.activeToolNames && args.activeToolNames.length > 0 ? `tools: ${args.activeToolNames.join(\", \")}` : undefined,\n\t].filter((value): value is string => typeof value === \"string\" && value.length > 0);\n\n\treturn {\n\t\theadline: `${args.description}${args.runInBackground ? \" [async]\" : \" [sync]\"}`,\n\t\t...(overview.length > 0 ? { overview: overview.join(\" · \") } : {}),\n\t};\n}\n\nfunction buildTaskOverviewItems(details: TaskToolDetails | undefined): string[] {\n\tif (!details) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\tdetails.agentType,\n\t\tdetails.model,\n\t\tdetails.activeToolNames && details.activeToolNames.length > 0\n\t\t\t? `tools: ${details.activeToolNames.join(\", \")}`\n\t\t\t: undefined,\n\t].filter((value): value is string => typeof value === \"string\" && value.length > 0);\n}\n\nconst TaskToolParams = Type.Object({\n\tdescription: Type.String({\n\t\tdescription: \"A short (3-5 words) description of the task\",\n\t}),\n\tprompt: Type.String({\n\t\tdescription: \"The task for the agent to perform\",\n\t}),\n\trun_in_background: Type.Boolean({\n\t\tdescription:\n\t\t\t\"REQUIRED. true=async (returns task_id, system notifies on completion), false=sync (waits for result).\",\n\t}),\n\tsession_id: Type.Optional(Type.String({ description: \"Existing Task session to continue\" })),\n\tmodel: Type.Optional(Type.String({ description: \"Model to use for this task\" })),\n\tagent_type: Type.Optional(\n\t\tType.String({\n\t\t\tdescription:\n\t\t\t\t\"Agent type to use for this task (e.g. 'explore', 'general'). Determines available tools and permissions.\",\n\t\t}),\n\t),\n});\n\nfunction createErrorResult(text: string): {\n\tcontent: [{ type: \"text\"; text: string }];\n\tdetails: TaskToolDetails;\n\tisError: true;\n} {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\tdetails: {},\n\t\tisError: true,\n\t};\n}\n\nfunction resolveModel(params: { model?: string }, ctx: ExtensionContext): string | undefined {\n\tif (params.model) {\n\t\treturn params.model;\n\t}\n\n\tif (!ctx.model) {\n\t\treturn undefined;\n\t}\n\n\treturn `${ctx.model.provider}/${ctx.model.id}`;\n}\n\nfunction isCancelledTask(manager: BackgroundManager, taskId: string): boolean {\n\treturn manager.getTask(taskId)?.status === \"cancelled\";\n}\n\nexport function createTaskTool(\n\tmanager: BackgroundManager,\n\tspawner: typeof spawnSubagent,\n\tpi: ExtensionAPI,\n\tagentDescriptions?: string,\n): ToolDefinition<typeof TaskToolParams, TaskToolDetails> {\n\tconst baseDescription = `Run a sub-agent in sync or async mode.\n\nSync mode (run_in_background=false): waits for the sub-agent to finish and returns its text output directly.\nAsync mode (run_in_background=true): starts the sub-agent, returns a task_id immediately. System sends a notification when done.\n\nsession_id is optional and continues an existing session when provided.\nmodel is optional and defaults to the current model.`;\n\n\tconst fullDescription = agentDescriptions\n\t\t? `${baseDescription}\\n\\nAvailable agent types:\\n${agentDescriptions}`\n\t\t: baseDescription;\n\n\tconst taskTool: ToolDefinition<typeof TaskToolParams, TaskToolDetails> = {\n\t\tname: \"task\",\n\t\tlabel: \"Task\",\n\t\tdescription: fullDescription,\n\t\tpromptSnippet:\n\t\t\t\"Run a sub-agent either synchronously for direct output or asynchronously for a background task_id.\",\n\t\tpromptGuidelines: [\n\t\t\t\"Use run_in_background=false when you need the sub-agent result in the same turn.\",\n\t\t\t\"Use run_in_background=true for parallel work. System notifies on completion via <system-reminder>.\",\n\t\t\t\"After launching a background task, do NOT call background_output - wait for the <system-reminder> notification first.\",\n\t\t\t\"Pass session_id to continue an existing sub-agent session.\",\n\t\t],\n\t\tparameters: TaskToolParams,\n\t\tasync execute(_toolCallId, params, signal, onUpdate, ctx) {\n\t\t\tif (!params.description.trim()) {\n\t\t\t\treturn createErrorResult(\"Error: description is required\");\n\t\t\t}\n\n\t\t\tconst currentDepth = Number.parseInt(process.env[DEPTH_ENV_VAR] ?? \"0\", 10);\n\t\t\tif (currentDepth >= MAX_SUBAGENT_DEPTH) {\n\t\t\t\treturn createErrorResult(`Error: max subagent depth (${MAX_SUBAGENT_DEPTH}) exceeded`);\n\t\t\t}\n\n\t\t\tconst model = resolveModel(params, ctx);\n\t\t\tconst taskDetails: TaskToolDetails = {\n\t\t\t\tagentType: params.agent_type,\n\t\t\t\tmodel,\n\t\t\t\tactiveToolNames: [],\n\t\t\t};\n\n\t\t\tconst permissionFlag =\n\t\t\t\ttypeof pi.getFlag === \"function\"\n\t\t\t\t\t? ((pi.getFlag(\"permission\") as string | undefined) ?? undefined)\n\t\t\t\t\t: undefined;\n\n\t\t\tif (!params.run_in_background) {\n\t\t\t\tconst spawned = spawner({\n\t\t\t\t\tprompt: params.prompt,\n\t\t\t\t\tcwd: ctx.cwd,\n\t\t\t\t\tmodel,\n\t\t\t\t\tagentType: params.agent_type,\n\t\t\t\t\tsessionPath: params.session_id,\n\t\t\t\t\tpermissionFlag: permissionFlag ?? undefined,\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t\tconst result = await spawned.result;\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: result.text || \"(no output)\" }],\n\t\t\t\t\tdetails: taskDetails,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet executeReturned = false;\n\t\t\ttry {\n\t\t\t\tconst task = manager.launch({\n\t\t\t\t\tdescription: params.description,\n\t\t\t\t\tprompt: params.prompt,\n\t\t\t\t\tmodel,\n\t\t\t\t\tagentType: params.agent_type,\n\t\t\t\t\tpid: undefined,\n\t\t\t\t\tsessionPath: params.session_id,\n\t\t\t\t\tactiveToolNames: [],\n\t\t\t\t\tcompletedAt: undefined,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\terror: undefined,\n\t\t\t\t\tparentSessionId: \"unknown\",\n\t\t\t\t});\n\n\t\t\t\tpi.appendEntry(TASK_ENTRY_TYPE, task);\n\n\t\t\t\tconst spawned = spawner({\n\t\t\t\t\tprompt: params.prompt,\n\t\t\t\t\tcwd: ctx.cwd,\n\t\t\t\t\tmodel,\n\t\t\t\t\tagentType: params.agent_type,\n\t\t\t\t\tsessionPath: params.session_id,\n\t\t\t\t\tpermissionFlag: permissionFlag ?? undefined,\n\t\t\t\t\tsignal,\n\t\t\t\t\tonEvent: (() => {\n\t\t\t\t\t\tconst activeToolCalls = new Map<string, string>();\n\t\t\t\t\t\treturn (event) => {\n\t\t\t\t\t\t\tif (event.type === \"tool_execution_start\") {\n\t\t\t\t\t\t\t\tactiveToolCalls.set(event.toolCallId, event.toolName);\n\t\t\t\t\t\t\t} else if (event.type === \"tool_execution_end\") {\n\t\t\t\t\t\t\t\tactiveToolCalls.delete(event.toolCallId);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst currentTask = manager.getTask(task.id);\n\t\t\t\t\t\t\tif (!currentTask) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst activeToolNames = Array.from(activeToolCalls.values());\n\n\t\t\t\t\t\t\tmanager.updateTask(task.id, {\n\t\t\t\t\t\t\t\tactiveToolNames,\n\t\t\t\t\t\t\t\t...(activeToolCalls.size > 0 && currentTask.status === \"pending\" ? { status: \"running\" } : {}),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (!executeReturned) {\n\t\t\t\t\t\t\t\tonUpdate?.({\n\t\t\t\t\t\t\t\t\tcontent: [],\n\t\t\t\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\t\t\t\t...taskDetails,\n\t\t\t\t\t\t\t\t\t\tactiveToolNames,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst activeTask = manager.getTask(task.id);\n\t\t\t\t\t\t\tif (activeTask) {\n\t\t\t\t\t\t\t\tpi.appendEntry(TASK_ENTRY_TYPE, activeTask);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t})(),\n\t\t\t\t});\n\n\t\t\t\tif (spawned.process.pid !== undefined) {\n\t\t\t\t\tmanager.updateTask(task.id, { pid: spawned.process.pid, status: \"running\" });\n\t\t\t\t\tonUpdate?.({ content: [], details: taskDetails });\n\t\t\t\t\tconst runningTask = manager.getTask(task.id);\n\t\t\t\t\tif (runningTask) {\n\t\t\t\t\t\tpi.appendEntry(TASK_ENTRY_TYPE, runningTask);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tspawned.result\n\t\t\t\t\t.then((result) => {\n\t\t\t\t\t\tif (isCancelledTask(manager, task.id)) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmanager.updateTask(task.id, {\n\t\t\t\t\t\t\tstatus: result.exitCode === 0 ? \"completed\" : \"error\",\n\t\t\t\t\t\t\tcompletedAt: new Date(),\n\t\t\t\t\t\t\tactiveToolNames: [],\n\t\t\t\t\t\t\tresult: result.text,\n\t\t\t\t\t\t\terror: result.exitCode === 0 ? undefined : `Sub-agent exited with code ${result.exitCode}`,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst completedTask = manager.getTask(task.id);\n\t\t\t\t\t\tif (completedTask) {\n\t\t\t\t\t\t\tpi.appendEntry(TASK_ENTRY_TYPE, completedTask);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpi.sendMessage(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcustomType: \"background-task.complete\",\n\t\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: [\n\t\t\t\t\t\t\t\t\t\t\t`Task ${task.id} completed: ${params.description}`,\n\t\t\t\t\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\t\t\t\t\t\"Result:\",\n\t\t\t\t\t\t\t\t\t\t\tresult.text || \"(no output)\",\n\t\t\t\t\t\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ triggerTurn: true, deliverAs: \"followUp\" },\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\t\tif (isCancelledTask(manager, task.id)) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmanager.updateTask(task.id, {\n\t\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\t\tcompletedAt: new Date(),\n\t\t\t\t\t\t\tactiveToolNames: [],\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst erroredTask = manager.getTask(task.id);\n\t\t\t\t\t\tif (erroredTask) {\n\t\t\t\t\t\t\tpi.appendEntry(TASK_ENTRY_TYPE, erroredTask);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tpi.sendMessage(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcustomType: \"background-task.complete\",\n\t\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: [`Task ${task.id} failed: ${params.description}`, \"\", \"Error:\", errorMsg].join(\n\t\t\t\t\t\t\t\t\t\t\t\"\\n\",\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ triggerTurn: true, deliverAs: \"followUp\" },\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\n\t\t\t\texecuteReturned = true;\n\n\t\t\t\tconst sessionIdBlock = params.session_id\n\t\t\t\t\t? `\\n\\n<task_metadata>\\nsession_id: ${params.session_id}\\ntask_id: ${task.id}\\nbackground_task_id: ${task.id}\\n</task_metadata>\\n\\nto continue: task(session_id=\"${params.session_id}\", run_in_background=false, prompt=\"...\")`\n\t\t\t\t\t: `\\n\\n<task_metadata>\\ntask_id: ${task.id}\\nbackground_task_id: ${task.id}\\n</task_metadata>`;\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Background task launched.\n\nBackground Task ID: ${task.id}\nDescription: ${params.description}\nAgent: ${params.agent_type ?? \"default\"}\nStatus: ${task.status}\n\nSystem notifies on completion. Use \\`background_output\\` with task_id=\"${task.id}\" to check.\n\nDo NOT call background_output now. Wait for <system-reminder> notification first.${sessionIdBlock}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: taskDetails,\n\t\t\t\t};\n\t\t\t} catch (error: unknown) {\n\t\t\t\treturn createErrorResult(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t},\n\t\trenderCall(args, theme) {\n\t\t\tconst metadata = buildTaskMetadata({\n\t\t\t\tdescription: args.description,\n\t\t\t\trunInBackground: args.run_in_background,\n\t\t\t\tagentType: args.agent_type,\n\t\t\t\tmodel: args.model,\n\t\t\t});\n\t\t\treturn new Text(\n\t\t\t\t[\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"Task \")) + theme.fg(\"accent\", metadata.headline),\n\t\t\t\t\t...(metadata.overview ? [theme.fg(\"muted\", ` ${metadata.overview}`)] : []),\n\t\t\t\t].join(\"\\n\"),\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t);\n\t\t},\n\t\trenderResult(result, options, theme, context) {\n\t\t\tconst firstContent = result.content[0];\n\t\t\tconst text = firstContent?.type === \"text\" ? firstContent.text : undefined;\n\t\t\tconst argDetails: TaskToolDetails = {\n\t\t\t\tagentType: context.args.agent_type,\n\t\t\t\tmodel: context.args.model,\n\t\t\t};\n\t\t\tconst callOverviewItems = new Set(buildTaskOverviewItems(argDetails));\n\t\t\tconst extraOverviewItems = buildTaskOverviewItems(result.details).filter(\n\t\t\t\t(item) => !callOverviewItems.has(item),\n\t\t\t);\n\t\t\tconst overview = extraOverviewItems.length > 0 ? extraOverviewItems.join(\" · \") : undefined;\n\n\t\t\tif (!text && !overview) {\n\t\t\t\treturn new Text(\"\", 0, 0);\n\t\t\t}\n\n\t\t\tif (options.isPartial && !text) {\n\t\t\t\treturn new Text(overview ? theme.fg(\"muted\", overview) : \"\", 0, 0);\n\t\t\t}\n\n\t\t\treturn new Text(\n\t\t\t\t[...(overview ? [theme.fg(\"muted\", overview)] : []), ...(text ? [theme.fg(\"muted\", text)] : [])].join(\n\t\t\t\t\t\"\\n\\n\",\n\t\t\t\t),\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t);\n\t\t},\n\t};\n\n\treturn taskTool;\n}\n"]}
@@ -1,72 +0,0 @@
1
- import { type Static, Type } from "typebox";
2
- export type SpawnOptions = {
3
- prompt: string;
4
- cwd: string;
5
- model?: string;
6
- agentType?: string;
7
- sessionPath?: string;
8
- permissionFlag?: string;
9
- signal?: AbortSignal;
10
- env?: Record<string, string>;
11
- onEvent?: (event: SpawnEvent) => void;
12
- };
13
- export type SpawnEvent = {
14
- type: "tool_execution_start";
15
- toolCallId: string;
16
- toolName: string;
17
- } | {
18
- type: "tool_execution_end";
19
- toolCallId: string;
20
- toolName: string;
21
- };
22
- export type SpawnedAgent = {
23
- process: import("node:child_process").ChildProcess;
24
- result: Promise<{
25
- text: string;
26
- exitCode: number;
27
- }>;
28
- };
29
- export type BackgroundTask = {
30
- id: string;
31
- description: string;
32
- prompt: string;
33
- model: string | undefined;
34
- agentType: string | undefined;
35
- status: "pending" | "running" | "completed" | "error" | "cancelled";
36
- pid: number | undefined;
37
- sessionPath: string | undefined;
38
- activeToolNames: string[];
39
- startedAt: Date;
40
- completedAt: Date | undefined;
41
- result: string | undefined;
42
- error: string | undefined;
43
- parentSessionId: string;
44
- };
45
- export declare const TaskToolParams: Type.TObject<{
46
- description: Type.TString;
47
- prompt: Type.TString;
48
- run_in_background: Type.TBoolean;
49
- session_id: Type.TOptional<Type.TString>;
50
- model: Type.TOptional<Type.TString>;
51
- agent_type: Type.TOptional<Type.TString>;
52
- }>;
53
- export type TaskToolParamsType = Static<typeof TaskToolParams>;
54
- export declare const BackgroundOutputParams: Type.TObject<{
55
- task_id: Type.TString;
56
- block: Type.TOptional<Type.TBoolean>;
57
- timeout: Type.TOptional<Type.TNumber>;
58
- }>;
59
- export type BackgroundOutputParamsType = Static<typeof BackgroundOutputParams>;
60
- export declare const BackgroundCancelParams: Type.TObject<{
61
- taskId: Type.TOptional<Type.TString>;
62
- all: Type.TOptional<Type.TBoolean>;
63
- }>;
64
- export type BackgroundCancelParamsType = Static<typeof BackgroundCancelParams>;
65
- export declare const MAX_CONCURRENT_TASKS: number;
66
- export declare const MAX_SUBAGENT_DEPTH = 1;
67
- export declare const DEPTH_ENV_VAR = "SENPI_SUBAGENT_DEPTH";
68
- export declare const AGENT_TYPE_ENV_VAR = "SENPI_AGENT_TYPE";
69
- export declare const TASK_ENTRY_TYPE = "background-task.state";
70
- export declare const DEFAULT_BLOCK_TIMEOUT = 60000;
71
- export declare const MAX_BLOCK_TIMEOUT = 300000;
72
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/background-task/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,UAAU,GACnB;IACA,IAAI,EAAE,sBAAsB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAChB,GACD;IACA,IAAI,EAAE,oBAAoB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAChB,CAAC;AAEL,MAAM,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,OAAO,oBAAoB,EAAE,YAAY,CAAC;IACnD,MAAM,EAAE,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;IACpE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;EAezB,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC;AAE/D,eAAO,MAAM,sBAAsB;;;;EAQjC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE/E,eAAO,MAAM,sBAAsB;;;EAGjC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE/E,eAAO,MAAM,oBAAoB,QAAW,CAAC;AAC7C,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,aAAa,yBAAyB,CAAC;AACpD,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AACrD,eAAO,MAAM,eAAe,0BAA0B,CAAC;AACvD,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,iBAAiB,SAAS,CAAC","sourcesContent":["import { type Static, Type } from \"typebox\";\n\nexport type SpawnOptions = {\n\tprompt: string;\n\tcwd: string;\n\tmodel?: string;\n\tagentType?: string;\n\tsessionPath?: string;\n\tpermissionFlag?: string;\n\tsignal?: AbortSignal;\n\tenv?: Record<string, string>;\n\tonEvent?: (event: SpawnEvent) => void;\n};\n\nexport type SpawnEvent =\n\t| {\n\t\t\ttype: \"tool_execution_start\";\n\t\t\ttoolCallId: string;\n\t\t\ttoolName: string;\n\t }\n\t| {\n\t\t\ttype: \"tool_execution_end\";\n\t\t\ttoolCallId: string;\n\t\t\ttoolName: string;\n\t };\n\nexport type SpawnedAgent = {\n\tprocess: import(\"node:child_process\").ChildProcess;\n\tresult: Promise<{ text: string; exitCode: number }>;\n};\n\nexport type BackgroundTask = {\n\tid: string;\n\tdescription: string;\n\tprompt: string;\n\tmodel: string | undefined;\n\tagentType: string | undefined;\n\tstatus: \"pending\" | \"running\" | \"completed\" | \"error\" | \"cancelled\";\n\tpid: number | undefined;\n\tsessionPath: string | undefined;\n\tactiveToolNames: string[];\n\tstartedAt: Date;\n\tcompletedAt: Date | undefined;\n\tresult: string | undefined;\n\terror: string | undefined;\n\tparentSessionId: string;\n};\n\nexport const TaskToolParams = Type.Object({\n\tdescription: Type.String({ description: \"A short (3-5 words) description of the task\" }),\n\tprompt: Type.String({ description: \"The task for the agent to perform\" }),\n\trun_in_background: Type.Boolean({\n\t\tdescription:\n\t\t\t\"REQUIRED. true=async (returns task_id, system notifies on completion), false=sync (waits for result).\",\n\t}),\n\tsession_id: Type.Optional(Type.String({ description: \"Existing Task session to continue\" })),\n\tmodel: Type.Optional(Type.String({ description: \"Model to use for this task\" })),\n\tagent_type: Type.Optional(\n\t\tType.String({\n\t\t\tdescription:\n\t\t\t\t\"Agent type to use for this task (e.g. 'explore', 'general'). Determines available tools and permissions.\",\n\t\t}),\n\t),\n});\n\nexport type TaskToolParamsType = Static<typeof TaskToolParams>;\n\nexport const BackgroundOutputParams = Type.Object({\n\ttask_id: Type.String({ description: \"Task ID to get output from\" }),\n\tblock: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription: \"Wait for completion (default: false). System notifies when done, so blocking is rarely needed.\",\n\t\t}),\n\t),\n\ttimeout: Type.Optional(Type.Number({ description: \"Max wait time in ms (default: 60000, max: 300000)\" })),\n});\n\nexport type BackgroundOutputParamsType = Static<typeof BackgroundOutputParams>;\n\nexport const BackgroundCancelParams = Type.Object({\n\ttaskId: Type.Optional(Type.String({ description: \"Task ID to cancel (required if all=false)\" })),\n\tall: Type.Optional(Type.Boolean({ description: \"Cancel all running background tasks (default: false)\" })),\n});\n\nexport type BackgroundCancelParamsType = Static<typeof BackgroundCancelParams>;\n\nexport const MAX_CONCURRENT_TASKS = Infinity;\nexport const MAX_SUBAGENT_DEPTH = 1;\nexport const DEPTH_ENV_VAR = \"SENPI_SUBAGENT_DEPTH\";\nexport const AGENT_TYPE_ENV_VAR = \"SENPI_AGENT_TYPE\";\nexport const TASK_ENTRY_TYPE = \"background-task.state\";\nexport const DEFAULT_BLOCK_TIMEOUT = 60000;\nexport const MAX_BLOCK_TIMEOUT = 300000;\n"]}
@@ -1,32 +0,0 @@
1
- import { Type } from "typebox";
2
- export const TaskToolParams = Type.Object({
3
- description: Type.String({ description: "A short (3-5 words) description of the task" }),
4
- prompt: Type.String({ description: "The task for the agent to perform" }),
5
- run_in_background: Type.Boolean({
6
- description: "REQUIRED. true=async (returns task_id, system notifies on completion), false=sync (waits for result).",
7
- }),
8
- session_id: Type.Optional(Type.String({ description: "Existing Task session to continue" })),
9
- model: Type.Optional(Type.String({ description: "Model to use for this task" })),
10
- agent_type: Type.Optional(Type.String({
11
- description: "Agent type to use for this task (e.g. 'explore', 'general'). Determines available tools and permissions.",
12
- })),
13
- });
14
- export const BackgroundOutputParams = Type.Object({
15
- task_id: Type.String({ description: "Task ID to get output from" }),
16
- block: Type.Optional(Type.Boolean({
17
- description: "Wait for completion (default: false). System notifies when done, so blocking is rarely needed.",
18
- })),
19
- timeout: Type.Optional(Type.Number({ description: "Max wait time in ms (default: 60000, max: 300000)" })),
20
- });
21
- export const BackgroundCancelParams = Type.Object({
22
- taskId: Type.Optional(Type.String({ description: "Task ID to cancel (required if all=false)" })),
23
- all: Type.Optional(Type.Boolean({ description: "Cancel all running background tasks (default: false)" })),
24
- });
25
- export const MAX_CONCURRENT_TASKS = Infinity;
26
- export const MAX_SUBAGENT_DEPTH = 1;
27
- export const DEPTH_ENV_VAR = "SENPI_SUBAGENT_DEPTH";
28
- export const AGENT_TYPE_ENV_VAR = "SENPI_AGENT_TYPE";
29
- export const TASK_ENTRY_TYPE = "background-task.state";
30
- export const DEFAULT_BLOCK_TIMEOUT = 60000;
31
- export const MAX_BLOCK_TIMEOUT = 300000;
32
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/background-task/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,IAAI,EAAE,MAAM,SAAS,CAAC;AAgD5C,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACzC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6CAA6C,EAAE,CAAC;IACxF,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC;IACzE,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC;QAC/B,WAAW,EACV,uGAAuG;KACxG,CAAC;IACF,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC,CAAC;IAC5F,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAChF,UAAU,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,MAAM,CAAC;QACX,WAAW,EACV,0GAA0G;KAC3G,CAAC,CACF;CACD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;IACnE,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,OAAO,CAAC;QACZ,WAAW,EAAE,gGAAgG;KAC7G,CAAC,CACF;IACD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mDAAmD,EAAE,CAAC,CAAC;CACzG,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2CAA2C,EAAE,CAAC,CAAC;IAChG,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,sDAAsD,EAAE,CAAC,CAAC;CACzG,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,aAAa,GAAG,sBAAsB,CAAC;AACpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAuB,CAAC;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC","sourcesContent":["import { type Static, Type } from \"typebox\";\n\nexport type SpawnOptions = {\n\tprompt: string;\n\tcwd: string;\n\tmodel?: string;\n\tagentType?: string;\n\tsessionPath?: string;\n\tpermissionFlag?: string;\n\tsignal?: AbortSignal;\n\tenv?: Record<string, string>;\n\tonEvent?: (event: SpawnEvent) => void;\n};\n\nexport type SpawnEvent =\n\t| {\n\t\t\ttype: \"tool_execution_start\";\n\t\t\ttoolCallId: string;\n\t\t\ttoolName: string;\n\t }\n\t| {\n\t\t\ttype: \"tool_execution_end\";\n\t\t\ttoolCallId: string;\n\t\t\ttoolName: string;\n\t };\n\nexport type SpawnedAgent = {\n\tprocess: import(\"node:child_process\").ChildProcess;\n\tresult: Promise<{ text: string; exitCode: number }>;\n};\n\nexport type BackgroundTask = {\n\tid: string;\n\tdescription: string;\n\tprompt: string;\n\tmodel: string | undefined;\n\tagentType: string | undefined;\n\tstatus: \"pending\" | \"running\" | \"completed\" | \"error\" | \"cancelled\";\n\tpid: number | undefined;\n\tsessionPath: string | undefined;\n\tactiveToolNames: string[];\n\tstartedAt: Date;\n\tcompletedAt: Date | undefined;\n\tresult: string | undefined;\n\terror: string | undefined;\n\tparentSessionId: string;\n};\n\nexport const TaskToolParams = Type.Object({\n\tdescription: Type.String({ description: \"A short (3-5 words) description of the task\" }),\n\tprompt: Type.String({ description: \"The task for the agent to perform\" }),\n\trun_in_background: Type.Boolean({\n\t\tdescription:\n\t\t\t\"REQUIRED. true=async (returns task_id, system notifies on completion), false=sync (waits for result).\",\n\t}),\n\tsession_id: Type.Optional(Type.String({ description: \"Existing Task session to continue\" })),\n\tmodel: Type.Optional(Type.String({ description: \"Model to use for this task\" })),\n\tagent_type: Type.Optional(\n\t\tType.String({\n\t\t\tdescription:\n\t\t\t\t\"Agent type to use for this task (e.g. 'explore', 'general'). Determines available tools and permissions.\",\n\t\t}),\n\t),\n});\n\nexport type TaskToolParamsType = Static<typeof TaskToolParams>;\n\nexport const BackgroundOutputParams = Type.Object({\n\ttask_id: Type.String({ description: \"Task ID to get output from\" }),\n\tblock: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription: \"Wait for completion (default: false). System notifies when done, so blocking is rarely needed.\",\n\t\t}),\n\t),\n\ttimeout: Type.Optional(Type.Number({ description: \"Max wait time in ms (default: 60000, max: 300000)\" })),\n});\n\nexport type BackgroundOutputParamsType = Static<typeof BackgroundOutputParams>;\n\nexport const BackgroundCancelParams = Type.Object({\n\ttaskId: Type.Optional(Type.String({ description: \"Task ID to cancel (required if all=false)\" })),\n\tall: Type.Optional(Type.Boolean({ description: \"Cancel all running background tasks (default: false)\" })),\n});\n\nexport type BackgroundCancelParamsType = Static<typeof BackgroundCancelParams>;\n\nexport const MAX_CONCURRENT_TASKS = Infinity;\nexport const MAX_SUBAGENT_DEPTH = 1;\nexport const DEPTH_ENV_VAR = \"SENPI_SUBAGENT_DEPTH\";\nexport const AGENT_TYPE_ENV_VAR = \"SENPI_AGENT_TYPE\";\nexport const TASK_ENTRY_TYPE = \"background-task.state\";\nexport const DEFAULT_BLOCK_TIMEOUT = 60000;\nexport const MAX_BLOCK_TIMEOUT = 300000;\n"]}