tuplet 2.7.0

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 (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +136 -0
  3. package/dist/agent.d.ts +46 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +393 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/built-in-agents/explore.d.ts +9 -0
  8. package/dist/built-in-agents/explore.d.ts.map +1 -0
  9. package/dist/built-in-agents/explore.js +40 -0
  10. package/dist/built-in-agents/explore.js.map +1 -0
  11. package/dist/built-in-agents/index.d.ts +15 -0
  12. package/dist/built-in-agents/index.d.ts.map +1 -0
  13. package/dist/built-in-agents/index.js +19 -0
  14. package/dist/built-in-agents/index.js.map +1 -0
  15. package/dist/built-in-agents/plan.d.ts +10 -0
  16. package/dist/built-in-agents/plan.d.ts.map +1 -0
  17. package/dist/built-in-agents/plan.js +62 -0
  18. package/dist/built-in-agents/plan.js.map +1 -0
  19. package/dist/built-in-agents/worker.d.ts +9 -0
  20. package/dist/built-in-agents/worker.d.ts.map +1 -0
  21. package/dist/built-in-agents/worker.js +53 -0
  22. package/dist/built-in-agents/worker.js.map +1 -0
  23. package/dist/constants.d.ts +7 -0
  24. package/dist/constants.d.ts.map +1 -0
  25. package/dist/constants.js +18 -0
  26. package/dist/constants.js.map +1 -0
  27. package/dist/context-manager.d.ts +65 -0
  28. package/dist/context-manager.d.ts.map +1 -0
  29. package/dist/context-manager.js +272 -0
  30. package/dist/context-manager.js.map +1 -0
  31. package/dist/context-manager.test.d.ts +2 -0
  32. package/dist/context-manager.test.d.ts.map +1 -0
  33. package/dist/context-manager.test.js +394 -0
  34. package/dist/context-manager.test.js.map +1 -0
  35. package/dist/executor.d.ts +29 -0
  36. package/dist/executor.d.ts.map +1 -0
  37. package/dist/executor.js +399 -0
  38. package/dist/executor.js.map +1 -0
  39. package/dist/index.d.ts +24 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +40 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/prompt/index.d.ts +9 -0
  44. package/dist/prompt/index.d.ts.map +1 -0
  45. package/dist/prompt/index.js +10 -0
  46. package/dist/prompt/index.js.map +1 -0
  47. package/dist/prompt/main-agent-builder.d.ts +81 -0
  48. package/dist/prompt/main-agent-builder.d.ts.map +1 -0
  49. package/dist/prompt/main-agent-builder.js +287 -0
  50. package/dist/prompt/main-agent-builder.js.map +1 -0
  51. package/dist/prompt/sub-agent-builder.d.ts +133 -0
  52. package/dist/prompt/sub-agent-builder.d.ts.map +1 -0
  53. package/dist/prompt/sub-agent-builder.js +337 -0
  54. package/dist/prompt/sub-agent-builder.js.map +1 -0
  55. package/dist/prompt/templates.d.ts +87 -0
  56. package/dist/prompt/templates.d.ts.map +1 -0
  57. package/dist/prompt/templates.js +343 -0
  58. package/dist/prompt/templates.js.map +1 -0
  59. package/dist/prompt/types.d.ts +159 -0
  60. package/dist/prompt/types.d.ts.map +1 -0
  61. package/dist/prompt/types.js +5 -0
  62. package/dist/prompt/types.js.map +1 -0
  63. package/dist/prompt.d.ts +32 -0
  64. package/dist/prompt.d.ts.map +1 -0
  65. package/dist/prompt.js +86 -0
  66. package/dist/prompt.js.map +1 -0
  67. package/dist/providers/dataset/base.d.ts +74 -0
  68. package/dist/providers/dataset/base.d.ts.map +1 -0
  69. package/dist/providers/dataset/base.js +7 -0
  70. package/dist/providers/dataset/base.js.map +1 -0
  71. package/dist/providers/dataset/index.d.ts +8 -0
  72. package/dist/providers/dataset/index.d.ts.map +1 -0
  73. package/dist/providers/dataset/index.js +8 -0
  74. package/dist/providers/dataset/index.js.map +1 -0
  75. package/dist/providers/dataset/recorder.d.ts +46 -0
  76. package/dist/providers/dataset/recorder.d.ts.map +1 -0
  77. package/dist/providers/dataset/recorder.js +105 -0
  78. package/dist/providers/dataset/recorder.js.map +1 -0
  79. package/dist/providers/dataset/replayer.d.ts +46 -0
  80. package/dist/providers/dataset/replayer.d.ts.map +1 -0
  81. package/dist/providers/dataset/replayer.js +163 -0
  82. package/dist/providers/dataset/replayer.js.map +1 -0
  83. package/dist/providers/dataset/tester.d.ts +89 -0
  84. package/dist/providers/dataset/tester.d.ts.map +1 -0
  85. package/dist/providers/dataset/tester.js +143 -0
  86. package/dist/providers/dataset/tester.js.map +1 -0
  87. package/dist/providers/env/memory.d.ts +14 -0
  88. package/dist/providers/env/memory.d.ts.map +1 -0
  89. package/dist/providers/env/memory.js +19 -0
  90. package/dist/providers/env/memory.js.map +1 -0
  91. package/dist/providers/index.d.ts +12 -0
  92. package/dist/providers/index.d.ts.map +1 -0
  93. package/dist/providers/index.js +10 -0
  94. package/dist/providers/index.js.map +1 -0
  95. package/dist/providers/llm/base.d.ts +7 -0
  96. package/dist/providers/llm/base.d.ts.map +1 -0
  97. package/dist/providers/llm/base.js +7 -0
  98. package/dist/providers/llm/base.js.map +1 -0
  99. package/dist/providers/llm/claude.d.ts +32 -0
  100. package/dist/providers/llm/claude.d.ts.map +1 -0
  101. package/dist/providers/llm/claude.js +171 -0
  102. package/dist/providers/llm/claude.js.map +1 -0
  103. package/dist/providers/llm/openai.d.ts +26 -0
  104. package/dist/providers/llm/openai.d.ts.map +1 -0
  105. package/dist/providers/llm/openai.js +174 -0
  106. package/dist/providers/llm/openai.js.map +1 -0
  107. package/dist/providers/llm/openrouter.d.ts +43 -0
  108. package/dist/providers/llm/openrouter.d.ts.map +1 -0
  109. package/dist/providers/llm/openrouter.js +288 -0
  110. package/dist/providers/llm/openrouter.js.map +1 -0
  111. package/dist/providers/logger/base.d.ts +7 -0
  112. package/dist/providers/logger/base.d.ts.map +1 -0
  113. package/dist/providers/logger/base.js +7 -0
  114. package/dist/providers/logger/base.js.map +1 -0
  115. package/dist/providers/logger/console.d.ts +29 -0
  116. package/dist/providers/logger/console.d.ts.map +1 -0
  117. package/dist/providers/logger/console.js +70 -0
  118. package/dist/providers/logger/console.js.map +1 -0
  119. package/dist/providers/repository/base.d.ts +7 -0
  120. package/dist/providers/repository/base.d.ts.map +1 -0
  121. package/dist/providers/repository/base.js +7 -0
  122. package/dist/providers/repository/base.js.map +1 -0
  123. package/dist/providers/repository/memory.d.ts +21 -0
  124. package/dist/providers/repository/memory.d.ts.map +1 -0
  125. package/dist/providers/repository/memory.js +50 -0
  126. package/dist/providers/repository/memory.js.map +1 -0
  127. package/dist/providers/workspace/file.d.ts +26 -0
  128. package/dist/providers/workspace/file.d.ts.map +1 -0
  129. package/dist/providers/workspace/file.js +151 -0
  130. package/dist/providers/workspace/file.js.map +1 -0
  131. package/dist/providers/workspace/index.d.ts +7 -0
  132. package/dist/providers/workspace/index.d.ts.map +1 -0
  133. package/dist/providers/workspace/index.js +6 -0
  134. package/dist/providers/workspace/index.js.map +1 -0
  135. package/dist/providers/workspace/memory.d.ts +26 -0
  136. package/dist/providers/workspace/memory.d.ts.map +1 -0
  137. package/dist/providers/workspace/memory.js +136 -0
  138. package/dist/providers/workspace/memory.js.map +1 -0
  139. package/dist/providers/workspace/types.d.ts +27 -0
  140. package/dist/providers/workspace/types.d.ts.map +1 -0
  141. package/dist/providers/workspace/types.js +8 -0
  142. package/dist/providers/workspace/types.js.map +1 -0
  143. package/dist/providers/workspace/workspace-provider.test.d.ts +2 -0
  144. package/dist/providers/workspace/workspace-provider.test.d.ts.map +1 -0
  145. package/dist/providers/workspace/workspace-provider.test.js +250 -0
  146. package/dist/providers/workspace/workspace-provider.test.js.map +1 -0
  147. package/dist/shell/commands/browse.d.ts +6 -0
  148. package/dist/shell/commands/browse.d.ts.map +1 -0
  149. package/dist/shell/commands/browse.js +158 -0
  150. package/dist/shell/commands/browse.js.map +1 -0
  151. package/dist/shell/commands/cat.d.ts +6 -0
  152. package/dist/shell/commands/cat.d.ts.map +1 -0
  153. package/dist/shell/commands/cat.js +104 -0
  154. package/dist/shell/commands/cat.js.map +1 -0
  155. package/dist/shell/commands/curl.d.ts +6 -0
  156. package/dist/shell/commands/curl.d.ts.map +1 -0
  157. package/dist/shell/commands/curl.js +190 -0
  158. package/dist/shell/commands/curl.js.map +1 -0
  159. package/dist/shell/commands/date.d.ts +6 -0
  160. package/dist/shell/commands/date.d.ts.map +1 -0
  161. package/dist/shell/commands/date.js +151 -0
  162. package/dist/shell/commands/date.js.map +1 -0
  163. package/dist/shell/commands/echo.d.ts +6 -0
  164. package/dist/shell/commands/echo.d.ts.map +1 -0
  165. package/dist/shell/commands/echo.js +48 -0
  166. package/dist/shell/commands/echo.js.map +1 -0
  167. package/dist/shell/commands/env.d.ts +8 -0
  168. package/dist/shell/commands/env.d.ts.map +1 -0
  169. package/dist/shell/commands/env.js +41 -0
  170. package/dist/shell/commands/env.js.map +1 -0
  171. package/dist/shell/commands/file.d.ts +6 -0
  172. package/dist/shell/commands/file.d.ts.map +1 -0
  173. package/dist/shell/commands/file.js +213 -0
  174. package/dist/shell/commands/file.js.map +1 -0
  175. package/dist/shell/commands/find.d.ts +6 -0
  176. package/dist/shell/commands/find.d.ts.map +1 -0
  177. package/dist/shell/commands/find.js +100 -0
  178. package/dist/shell/commands/find.js.map +1 -0
  179. package/dist/shell/commands/grep.d.ts +6 -0
  180. package/dist/shell/commands/grep.d.ts.map +1 -0
  181. package/dist/shell/commands/grep.js +229 -0
  182. package/dist/shell/commands/grep.js.map +1 -0
  183. package/dist/shell/commands/head.d.ts +6 -0
  184. package/dist/shell/commands/head.d.ts.map +1 -0
  185. package/dist/shell/commands/head.js +88 -0
  186. package/dist/shell/commands/head.js.map +1 -0
  187. package/dist/shell/commands/index.d.ts +25 -0
  188. package/dist/shell/commands/index.d.ts.map +1 -0
  189. package/dist/shell/commands/index.js +43 -0
  190. package/dist/shell/commands/index.js.map +1 -0
  191. package/dist/shell/commands/jq.d.ts +8 -0
  192. package/dist/shell/commands/jq.d.ts.map +1 -0
  193. package/dist/shell/commands/jq.js +233 -0
  194. package/dist/shell/commands/jq.js.map +1 -0
  195. package/dist/shell/commands/ls.d.ts +6 -0
  196. package/dist/shell/commands/ls.d.ts.map +1 -0
  197. package/dist/shell/commands/ls.js +88 -0
  198. package/dist/shell/commands/ls.js.map +1 -0
  199. package/dist/shell/commands/mkdir.d.ts +6 -0
  200. package/dist/shell/commands/mkdir.d.ts.map +1 -0
  201. package/dist/shell/commands/mkdir.js +43 -0
  202. package/dist/shell/commands/mkdir.js.map +1 -0
  203. package/dist/shell/commands/rm.d.ts +6 -0
  204. package/dist/shell/commands/rm.d.ts.map +1 -0
  205. package/dist/shell/commands/rm.js +64 -0
  206. package/dist/shell/commands/rm.js.map +1 -0
  207. package/dist/shell/commands/sed.d.ts +6 -0
  208. package/dist/shell/commands/sed.d.ts.map +1 -0
  209. package/dist/shell/commands/sed.js +414 -0
  210. package/dist/shell/commands/sed.js.map +1 -0
  211. package/dist/shell/commands/sort.d.ts +6 -0
  212. package/dist/shell/commands/sort.d.ts.map +1 -0
  213. package/dist/shell/commands/sort.js +109 -0
  214. package/dist/shell/commands/sort.js.map +1 -0
  215. package/dist/shell/commands/tail.d.ts +6 -0
  216. package/dist/shell/commands/tail.d.ts.map +1 -0
  217. package/dist/shell/commands/tail.js +68 -0
  218. package/dist/shell/commands/tail.js.map +1 -0
  219. package/dist/shell/commands/wc.d.ts +6 -0
  220. package/dist/shell/commands/wc.d.ts.map +1 -0
  221. package/dist/shell/commands/wc.js +86 -0
  222. package/dist/shell/commands/wc.js.map +1 -0
  223. package/dist/shell/index.d.ts +10 -0
  224. package/dist/shell/index.d.ts.map +1 -0
  225. package/dist/shell/index.js +10 -0
  226. package/dist/shell/index.js.map +1 -0
  227. package/dist/shell/limits.d.ts +5 -0
  228. package/dist/shell/limits.d.ts.map +1 -0
  229. package/dist/shell/limits.js +5 -0
  230. package/dist/shell/limits.js.map +1 -0
  231. package/dist/shell/parser.d.ts +8 -0
  232. package/dist/shell/parser.d.ts.map +1 -0
  233. package/dist/shell/parser.js +307 -0
  234. package/dist/shell/parser.js.map +1 -0
  235. package/dist/shell/path-validation.d.ts +35 -0
  236. package/dist/shell/path-validation.d.ts.map +1 -0
  237. package/dist/shell/path-validation.js +81 -0
  238. package/dist/shell/path-validation.js.map +1 -0
  239. package/dist/shell/shell.d.ts +66 -0
  240. package/dist/shell/shell.d.ts.map +1 -0
  241. package/dist/shell/shell.js +301 -0
  242. package/dist/shell/shell.js.map +1 -0
  243. package/dist/shell/shell.test.d.ts +2 -0
  244. package/dist/shell/shell.test.d.ts.map +1 -0
  245. package/dist/shell/shell.test.js +1088 -0
  246. package/dist/shell/shell.test.js.map +1 -0
  247. package/dist/shell/types.d.ts +82 -0
  248. package/dist/shell/types.d.ts.map +1 -0
  249. package/dist/shell/types.js +5 -0
  250. package/dist/shell/types.js.map +1 -0
  251. package/dist/summarizer.d.ts +28 -0
  252. package/dist/summarizer.d.ts.map +1 -0
  253. package/dist/summarizer.js +136 -0
  254. package/dist/summarizer.js.map +1 -0
  255. package/dist/summarizer.test.d.ts +2 -0
  256. package/dist/summarizer.test.d.ts.map +1 -0
  257. package/dist/summarizer.test.js +192 -0
  258. package/dist/summarizer.test.js.map +1 -0
  259. package/dist/tools/ask-user.d.ts +11 -0
  260. package/dist/tools/ask-user.d.ts.map +1 -0
  261. package/dist/tools/ask-user.js +35 -0
  262. package/dist/tools/ask-user.js.map +1 -0
  263. package/dist/tools/index.d.ts +11 -0
  264. package/dist/tools/index.d.ts.map +1 -0
  265. package/dist/tools/index.js +18 -0
  266. package/dist/tools/index.js.map +1 -0
  267. package/dist/tools/output.d.ts +15 -0
  268. package/dist/tools/output.d.ts.map +1 -0
  269. package/dist/tools/output.js +40 -0
  270. package/dist/tools/output.js.map +1 -0
  271. package/dist/tools/shell.d.ts +13 -0
  272. package/dist/tools/shell.d.ts.map +1 -0
  273. package/dist/tools/shell.js +166 -0
  274. package/dist/tools/shell.js.map +1 -0
  275. package/dist/tools/sub-agent.d.ts +25 -0
  276. package/dist/tools/sub-agent.d.ts.map +1 -0
  277. package/dist/tools/sub-agent.js +312 -0
  278. package/dist/tools/sub-agent.js.map +1 -0
  279. package/dist/tools/tasks.d.ts +170 -0
  280. package/dist/tools/tasks.d.ts.map +1 -0
  281. package/dist/tools/tasks.js +947 -0
  282. package/dist/tools/tasks.js.map +1 -0
  283. package/dist/trace/builder.d.ts +54 -0
  284. package/dist/trace/builder.d.ts.map +1 -0
  285. package/dist/trace/builder.js +229 -0
  286. package/dist/trace/builder.js.map +1 -0
  287. package/dist/trace/console.d.ts +45 -0
  288. package/dist/trace/console.d.ts.map +1 -0
  289. package/dist/trace/console.js +143 -0
  290. package/dist/trace/console.js.map +1 -0
  291. package/dist/trace/index.d.ts +11 -0
  292. package/dist/trace/index.d.ts.map +1 -0
  293. package/dist/trace/index.js +11 -0
  294. package/dist/trace/index.js.map +1 -0
  295. package/dist/trace/openrouter-pricing.d.ts +9 -0
  296. package/dist/trace/openrouter-pricing.d.ts.map +1 -0
  297. package/dist/trace/openrouter-pricing.js +321 -0
  298. package/dist/trace/openrouter-pricing.js.map +1 -0
  299. package/dist/trace/pricing.d.ts +13 -0
  300. package/dist/trace/pricing.d.ts.map +1 -0
  301. package/dist/trace/pricing.js +41 -0
  302. package/dist/trace/pricing.js.map +1 -0
  303. package/dist/trace/types.d.ts +142 -0
  304. package/dist/trace/types.d.ts.map +1 -0
  305. package/dist/trace/types.js +16 -0
  306. package/dist/trace/types.js.map +1 -0
  307. package/dist/trace.d.ts +5 -0
  308. package/dist/trace.d.ts.map +1 -0
  309. package/dist/trace.js +5 -0
  310. package/dist/trace.js.map +1 -0
  311. package/dist/types.d.ts +382 -0
  312. package/dist/types.d.ts.map +1 -0
  313. package/dist/types.js +5 -0
  314. package/dist/types.js.map +1 -0
  315. package/dist/workspace.d.ts +287 -0
  316. package/dist/workspace.d.ts.map +1 -0
  317. package/dist/workspace.js +560 -0
  318. package/dist/workspace.js.map +1 -0
  319. package/package.json +47 -0
@@ -0,0 +1,399 @@
1
+ /**
2
+ * Executor - Tool Execution Loop
3
+ *
4
+ * Core execution loop that runs tools and handles agent responses.
5
+ */
6
+ const ASK_USER_TOOL_NAME = '__ask_user__';
7
+ /**
8
+ * Extract text from content blocks
9
+ */
10
+ function extractText(content) {
11
+ return content
12
+ .filter((block) => block.type === 'text')
13
+ .map(block => block.text)
14
+ .join('\n');
15
+ }
16
+ /**
17
+ * Extract thinking blocks
18
+ */
19
+ function extractThinking(content) {
20
+ return content
21
+ .filter((block) => block.type === 'thinking')
22
+ .map(block => block.thinking);
23
+ }
24
+ /**
25
+ * Convert tools to schemas for LLM
26
+ */
27
+ function toolsToSchemas(tools) {
28
+ return tools.map(tool => ({
29
+ name: tool.name,
30
+ description: tool.description,
31
+ input_schema: tool.parameters
32
+ }));
33
+ }
34
+ /**
35
+ * Truncate and stringify data for logging
36
+ */
37
+ function truncateForLog(data, maxLength = 500) {
38
+ const str = JSON.stringify(data);
39
+ if (str.length <= maxLength)
40
+ return str;
41
+ return str.slice(0, maxLength) + `... (${str.length} chars total)`;
42
+ }
43
+ /**
44
+ * Execute a single tool
45
+ */
46
+ async function executeTool(tool, params, context, logger) {
47
+ const startTime = Date.now();
48
+ // Progress: tool starting (with context for specific tools)
49
+ let progressMessage = `Running ${tool.name}...`;
50
+ if (tool.name === 'TaskCreate') {
51
+ const subject = params.subject;
52
+ progressMessage = subject ? `Creating task: "${subject}"...` : 'Creating task...';
53
+ }
54
+ else if (tool.name === 'TaskUpdate') {
55
+ const status = params.status;
56
+ if (status === 'completed') {
57
+ progressMessage = 'Marking task complete...';
58
+ }
59
+ else if (status === 'in_progress') {
60
+ progressMessage = 'Starting task...';
61
+ }
62
+ else if (status === 'deleted') {
63
+ progressMessage = 'Deleting task...';
64
+ }
65
+ else {
66
+ progressMessage = 'Updating task...';
67
+ }
68
+ }
69
+ else if (tool.name === 'TaskList') {
70
+ progressMessage = 'Checking tasks...';
71
+ }
72
+ else if (tool.name === 'TaskGet') {
73
+ progressMessage = 'Getting task details...';
74
+ }
75
+ else if (tool.name === '__sub_agent__') {
76
+ const agent = params.agent;
77
+ progressMessage = `Delegating to ${agent}...`;
78
+ }
79
+ else if (tool.name === '__shell__') {
80
+ const command = params.command;
81
+ if (command) {
82
+ // Show the full command, truncated if too long
83
+ const truncated = command.length > 80 ? command.slice(0, 80) + '...' : command;
84
+ progressMessage = `$ ${truncated}`;
85
+ }
86
+ }
87
+ logger?.onProgress?.({
88
+ type: 'tool_start',
89
+ message: progressMessage,
90
+ details: { toolName: tool.name }
91
+ });
92
+ // Log tool execution details
93
+ logger?.debug(`[Tool: ${tool.name}] Executing with params: ${truncateForLog(params)}`);
94
+ logger?.debug(`[Tool: ${tool.name}] Context: conversationId=${context.conversationId}, userId=${context.userId}, remainingTokens=${context.remainingTokens}`);
95
+ logger?.onToolCall?.(tool.name, params);
96
+ try {
97
+ const result = await tool.execute(params, context);
98
+ const durationMs = Date.now() - startTime;
99
+ // Log result details
100
+ logger?.debug(`[Tool: ${tool.name}] Completed in ${durationMs}ms, success=${result.success}`);
101
+ if (result.success) {
102
+ if (result.data !== undefined) {
103
+ logger?.debug(`[Tool: ${tool.name}] Result data: ${truncateForLog(result.data)}`);
104
+ }
105
+ }
106
+ else {
107
+ logger?.warn(`[Tool: ${tool.name}] Error: ${result.error}`);
108
+ if (result.data !== undefined) {
109
+ logger?.warn(`[Tool: ${tool.name}] Details: ${truncateForLog(result.data, 1000)}`);
110
+ }
111
+ }
112
+ // Progress: tool completed (with result context)
113
+ let completionMessage = `${tool.name} completed`;
114
+ if (!result.success) {
115
+ completionMessage = `${tool.name} failed: ${result.error}`;
116
+ }
117
+ else if (tool.name === '__shell__') {
118
+ const command = params.command;
119
+ if (command) {
120
+ const truncated = command.length > 80 ? command.slice(0, 80) + '...' : command;
121
+ completionMessage = `$ ${truncated}`;
122
+ }
123
+ }
124
+ else {
125
+ const isTaskTool = ['TaskCreate', 'TaskUpdate', 'TaskGet', 'TaskList'].includes(tool.name);
126
+ if (isTaskTool && result.data) {
127
+ const data = result.data;
128
+ if (data.message) {
129
+ completionMessage = data.message;
130
+ }
131
+ }
132
+ }
133
+ logger?.onProgress?.({
134
+ type: 'tool_end',
135
+ message: completionMessage,
136
+ details: { toolName: tool.name, duration: durationMs, success: result.success }
137
+ });
138
+ logger?.onToolResult?.(tool.name, result, durationMs);
139
+ return { result, durationMs };
140
+ }
141
+ catch (error) {
142
+ const durationMs = Date.now() - startTime;
143
+ const errorMessage = error instanceof Error ? error.message : String(error);
144
+ const errorStack = error instanceof Error ? error.stack : undefined;
145
+ logger?.error(`[Tool: ${tool.name}] Exception after ${durationMs}ms: ${errorMessage}`);
146
+ if (errorStack) {
147
+ logger?.error(`[Tool: ${tool.name}] Stack trace: ${errorStack}`);
148
+ }
149
+ const result = {
150
+ success: false,
151
+ error: errorMessage
152
+ };
153
+ // Progress: tool failed
154
+ logger?.onProgress?.({
155
+ type: 'tool_end',
156
+ message: `${tool.name} failed`,
157
+ details: { toolName: tool.name, duration: durationMs, success: false }
158
+ });
159
+ logger?.onToolResult?.(tool.name, result, durationMs);
160
+ return { result, durationMs };
161
+ }
162
+ }
163
+ /**
164
+ * Check if execution should be interrupted
165
+ */
166
+ async function checkInterruption(signal, shouldContinue) {
167
+ // Check AbortSignal
168
+ if (signal?.aborted) {
169
+ return 'aborted';
170
+ }
171
+ // Check shouldContinue callback
172
+ if (shouldContinue) {
173
+ const continueExecution = await shouldContinue();
174
+ if (!continueExecution) {
175
+ return 'stopped';
176
+ }
177
+ }
178
+ return null;
179
+ }
180
+ /**
181
+ * Build interrupted result
182
+ */
183
+ function buildInterruptedResult(reason, iteration, messages, toolCallLogs, thinkingBlocks, taskManager) {
184
+ const tasks = taskManager.getAll();
185
+ return {
186
+ response: '',
187
+ history: messages,
188
+ toolCalls: toolCallLogs,
189
+ thinking: thinkingBlocks.length > 0 ? thinkingBlocks : undefined,
190
+ tasks: tasks.length > 0 ? tasks : undefined,
191
+ status: 'interrupted',
192
+ interrupted: {
193
+ reason,
194
+ iterationsCompleted: iteration
195
+ }
196
+ };
197
+ }
198
+ /**
199
+ * Main execution loop
200
+ */
201
+ export async function executeLoop(config, initialMessages, toolContext) {
202
+ const { systemPrompt, tools, llm, logger, maxIterations, contextManager, taskManager, llmOptions, signal, shouldContinue, traceBuilder } = config;
203
+ const messages = [...initialMessages];
204
+ const toolCallLogs = [];
205
+ const thinkingBlocks = [];
206
+ const toolSchemas = toolsToSchemas(tools);
207
+ const modelId = llm.getModelId?.() || 'unknown';
208
+ for (let iteration = 0; iteration < maxIterations; iteration++) {
209
+ // Check for interruption at start of each iteration
210
+ const interruptReason = await checkInterruption(signal, shouldContinue);
211
+ if (interruptReason) {
212
+ logger?.onProgress?.({
213
+ type: 'status',
214
+ message: `Interrupted: ${interruptReason}`
215
+ });
216
+ return buildInterruptedResult(interruptReason, iteration, messages, toolCallLogs, thinkingBlocks, taskManager);
217
+ }
218
+ logger?.onIteration?.(iteration, messages.length);
219
+ // Progress: thinking
220
+ logger?.onProgress?.({
221
+ type: 'thinking',
222
+ message: iteration === 0 ? 'Thinking...' : 'Processing...'
223
+ });
224
+ // Manage context (truncate/summarize if needed)
225
+ const managedMessages = await contextManager.manageContext(messages);
226
+ // Call LLM with timing
227
+ const llmStartTime = Date.now();
228
+ let response;
229
+ try {
230
+ response = await llm.chat(systemPrompt, managedMessages, toolSchemas, llmOptions);
231
+ }
232
+ catch (error) {
233
+ const llmDurationMs = Date.now() - llmStartTime;
234
+ const errorMessage = error instanceof Error ? error.message : String(error);
235
+ logger?.error(`[LLM] Failed after ${llmDurationMs}ms: ${errorMessage}`);
236
+ const tasks = taskManager.getAll();
237
+ return {
238
+ response: '',
239
+ history: messages,
240
+ toolCalls: toolCallLogs,
241
+ thinking: thinkingBlocks.length > 0 ? thinkingBlocks : undefined,
242
+ tasks: tasks.length > 0 ? tasks : undefined,
243
+ status: 'error',
244
+ error: errorMessage
245
+ };
246
+ }
247
+ const llmDurationMs = Date.now() - llmStartTime;
248
+ // Record usage in trace
249
+ if (response.usage) {
250
+ traceBuilder?.recordLLMCall(modelId, response.usage.inputTokens, response.usage.outputTokens, llmDurationMs, {
251
+ cacheCreationTokens: response.cacheUsage?.cacheCreationInputTokens,
252
+ cacheReadTokens: response.cacheUsage?.cacheReadInputTokens,
253
+ systemPrompt,
254
+ messages: managedMessages,
255
+ response: response.content
256
+ });
257
+ }
258
+ // Collect thinking blocks
259
+ thinkingBlocks.push(...extractThinking(response.content));
260
+ // Add assistant message to history
261
+ messages.push({ role: 'assistant', content: response.content });
262
+ // Check if done (no tool use)
263
+ if (response.stopReason !== 'tool_use') {
264
+ const tasks = taskManager.getAll();
265
+ const incompleteTasks = tasks.filter(t => t.status !== 'completed');
266
+ // If there are incomplete tasks, force the agent to continue working
267
+ if (incompleteTasks.length > 0) {
268
+ logger?.onProgress?.({
269
+ type: 'status',
270
+ message: `${incompleteTasks.length} tasks remaining, continuing...`
271
+ });
272
+ // Add a reminder to continue working on tasks
273
+ const reminderContent = `You have ${incompleteTasks.length} incomplete task(s) in your task list:\n${incompleteTasks.map(t => `- ${t.status === 'in_progress' ? '[IN PROGRESS] ' : ''}${t.subject}`).join('\n')}\n\nYou MUST continue working on these tasks. Use the TaskUpdate tool with status "completed" after finishing each task. Do not respond to the user until all tasks are completed.`;
274
+ messages.push({
275
+ role: 'user',
276
+ content: reminderContent
277
+ });
278
+ // Continue the loop instead of returning
279
+ continue;
280
+ }
281
+ const result = {
282
+ response: extractText(response.content),
283
+ history: messages,
284
+ toolCalls: toolCallLogs,
285
+ thinking: thinkingBlocks.length > 0 ? thinkingBlocks : undefined,
286
+ tasks: tasks.length > 0 ? tasks : undefined,
287
+ status: 'complete'
288
+ };
289
+ logger?.onComplete?.(result);
290
+ return result;
291
+ }
292
+ // Execute tool calls
293
+ const toolUseBlocks = response.content.filter((block) => block.type === 'tool_use');
294
+ const toolResults = [];
295
+ for (const toolUse of toolUseBlocks) {
296
+ // Check for interruption between tool calls
297
+ const toolInterruptReason = await checkInterruption(signal, shouldContinue);
298
+ if (toolInterruptReason) {
299
+ logger?.onProgress?.({
300
+ type: 'status',
301
+ message: `Interrupted between tools: ${toolInterruptReason}`
302
+ });
303
+ return buildInterruptedResult(toolInterruptReason, iteration, messages, toolCallLogs, thinkingBlocks, taskManager);
304
+ }
305
+ // Handle ask_user tool specially
306
+ if (toolUse.name === ASK_USER_TOOL_NAME) {
307
+ const input = toolUse.input;
308
+ // Build pendingQuestion from questions array
309
+ const questions = input.questions && Array.isArray(input.questions) && input.questions.length > 0
310
+ ? input.questions
311
+ : [{ question: 'The assistant needs more information. Please provide additional details.' }];
312
+ const pendingQuestion = { questions };
313
+ const tasks = taskManager.getAll();
314
+ return {
315
+ response: '',
316
+ history: messages,
317
+ toolCalls: toolCallLogs,
318
+ thinking: thinkingBlocks.length > 0 ? thinkingBlocks : undefined,
319
+ tasks: tasks.length > 0 ? tasks : undefined,
320
+ pendingQuestion,
321
+ status: 'needs_input'
322
+ };
323
+ }
324
+ // Find and execute the tool
325
+ const tool = tools.find(t => t.name === toolUse.name);
326
+ if (!tool) {
327
+ toolResults.push({
328
+ type: 'tool_result',
329
+ tool_use_id: toolUse.id,
330
+ content: JSON.stringify({ success: false, error: `Unknown tool: ${toolUse.name}` }),
331
+ is_error: true
332
+ });
333
+ continue;
334
+ }
335
+ const { result, durationMs } = await executeTool(tool, toolUse.input, toolContext, logger);
336
+ toolCallLogs.push({
337
+ name: toolUse.name,
338
+ input: toolUse.input,
339
+ output: result,
340
+ durationMs
341
+ });
342
+ // Record in trace
343
+ traceBuilder?.recordToolCall(toolUse.name, toolUse.input, result, durationMs);
344
+ // If a sub-agent needs user input, propagate needs_input immediately
345
+ // We add the __sub_agent__ tool result to history, then synthesize an __ask_user__
346
+ // tool call so the existing resume logic in agent.ts works correctly
347
+ if (toolUse.name === '__sub_agent__' && !result.success && result.error === 'Sub-agent needs user input' && result.data) {
348
+ const subAgentData = result.data;
349
+ if (subAgentData.questions && Array.isArray(subAgentData.questions) && subAgentData.questions.length > 0) {
350
+ // Add the __sub_agent__ tool result to close the pending tool_use
351
+ toolResults.push({
352
+ type: 'tool_result',
353
+ tool_use_id: toolUse.id,
354
+ content: JSON.stringify(result),
355
+ is_error: true
356
+ });
357
+ messages.push({ role: 'user', content: toolResults });
358
+ // Synthesize an __ask_user__ tool call so resume logic works
359
+ const syntheticAskUserId = `synthetic_ask_user_${Date.now()}`;
360
+ messages.push({
361
+ role: 'assistant',
362
+ content: [{
363
+ type: 'tool_use',
364
+ id: syntheticAskUserId,
365
+ name: ASK_USER_TOOL_NAME,
366
+ input: { questions: subAgentData.questions }
367
+ }]
368
+ });
369
+ const pendingQuestion = { questions: subAgentData.questions };
370
+ const tasks = taskManager.getAll();
371
+ return {
372
+ response: '',
373
+ history: messages,
374
+ toolCalls: toolCallLogs,
375
+ thinking: thinkingBlocks.length > 0 ? thinkingBlocks : undefined,
376
+ tasks: tasks.length > 0 ? tasks : undefined,
377
+ pendingQuestion,
378
+ status: 'needs_input'
379
+ };
380
+ }
381
+ }
382
+ toolResults.push({
383
+ type: 'tool_result',
384
+ tool_use_id: toolUse.id,
385
+ content: JSON.stringify(result),
386
+ is_error: !result.success
387
+ });
388
+ }
389
+ // Add tool results as user message
390
+ messages.push({ role: 'user', content: toolResults });
391
+ }
392
+ // Max iterations reached - return as interrupted instead of throwing
393
+ logger?.onProgress?.({
394
+ type: 'status',
395
+ message: `Max iterations (${maxIterations}) reached`
396
+ });
397
+ return buildInterruptedResult('max_iterations', maxIterations, messages, toolCallLogs, thinkingBlocks, taskManager);
398
+ }
399
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Tuplet Agent Framework
3
+ *
4
+ * Minimal TypeScript agent framework inspired by Claude Code architecture.
5
+ */
6
+ export { Tuplet, Tuplet as Hive, PLAN_PATH } from './agent.js';
7
+ export type { Message, MessageRole, ContentBlock, TextBlock, ThinkingBlock, ToolUseBlock, ToolResultBlock, Tool, ToolSchema, ToolResult, ToolContext, ToolCallLog, JSONSchema, TupletConfig, TupletConfig as HiveConfig, SubAgentConfig, RunOptions, AgentResult, AgentStatus, PendingQuestion, QuestionOption, EnhancedQuestion, TaskItem, TaskStatus, TaskComment, TaskProgress, TaskUpdateNotification, TodoItem, TodoStatus, TodoProgress, TodoUpdate, LLMProvider, LLMResponse, LLMOptions, StopReason, LogProvider, RepositoryProvider, EnvironmentProvider, ProgressUpdate, CacheUsage, ContextStrategy, SystemPromptConfig, EnvironmentInfo } from './types.js';
8
+ export { ClaudeProvider, type ClaudeProviderConfig } from './providers/llm/claude.js';
9
+ export { OpenAIProvider, type OpenAIProviderConfig } from './providers/llm/openai.js';
10
+ export { OpenRouterProvider, type OpenRouterProviderConfig } from './providers/llm/openrouter.js';
11
+ export { ConsoleLogger, type ConsoleLoggerConfig, type LogLevel } from './providers/logger/console.js';
12
+ export { MemoryRepository } from './providers/repository/memory.js';
13
+ export { MemoryEnvironmentProvider } from './providers/env/memory.js';
14
+ export { estimateTokens, estimateMessageTokens, estimateTotalTokens, truncateOldMessages, sanitizeHistory, ContextManager } from './context-manager.js';
15
+ export { summarizeMessages, microCompact, parseSummary } from './summarizer.js';
16
+ export { buildSystemPrompt, buildEnvironmentSection, buildRemindersSection, getCurrentEnvironment, DEFAULT_SYSTEM_PROMPT, SubAgentBuilder, roleSection, subAgentsTable, questionHandlingSection, directToolsSection, workspaceStorageSection, rulesSection, taskExamplesSection, subAgentRoleSection, taskSection, workflowSection, guidelinesSection, outputSection, type SubAgentDef, type ToolDef, type WorkspacePathDef, type TaskExample, type WorkflowStep, type OutputFormat, type SubAgentPromptConfig } from './prompt.js';
17
+ export { TaskManager, formatTaskList, createTaskTools, createTaskCreateTool, createTaskUpdateTool, createTaskGetTool, createTaskListTool, type TaskToolOptions, TodoManager, formatTodoList, createTodoTool, type TodoToolOptions } from './tools/tasks.js';
18
+ export { TraceBuilder, ConsoleTraceProvider, generateTraceId, generateSpanId, calculateCost, DEFAULT_MODEL_PRICING, OPENROUTER_MODEL_PRICING, type TraceProvider, type TraceId, type SpanId, type Trace, type AgentSpan, type TraceEvent, type LLMCallEvent, type ToolCallEvent, type TraceContext, type ModelPricing, type ConsoleTraceConfig } from './trace.js';
19
+ export { Workspace, type WorkspaceEntry, type WorkspaceListItem, type WorkspaceConfig, type WorkspaceConfigExt, type PathConfig, type ValidatorFn, type ZodLike, type ValidationError, type WriteResult } from './workspace.js';
20
+ export { type WorkspaceProvider, type WorkspaceChange, type WorkspaceChangeListener, MemoryWorkspaceProvider, FileWorkspaceProvider } from './providers/workspace/index.js';
21
+ export { Shell, type ShellConfig, type ShellResult, type CommandHandler, type CommandHelp, type CommandFlag, type CommandExample } from './shell/index.js';
22
+ export { exploreAgent, planAgent, getBuiltInAgents } from './built-in-agents/index.js';
23
+ export { RunRecorder, RunReplayer, RunTester, type RunRecorderConfig, type RunRecord, type RunRecordConfig, type RunRecordResult, type SerializedTool, type SerializedSubAgentConfig, type RunTesterConfig, type TestResult, type TestSummary } from './providers/dataset/index.js';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Tuplet Agent Framework
3
+ *
4
+ * Minimal TypeScript agent framework inspired by Claude Code architecture.
5
+ */
6
+ // Main agent class
7
+ export { Tuplet, Tuplet as Hive, PLAN_PATH } from './agent.js';
8
+ // Providers
9
+ export { ClaudeProvider } from './providers/llm/claude.js';
10
+ export { OpenAIProvider } from './providers/llm/openai.js';
11
+ export { OpenRouterProvider } from './providers/llm/openrouter.js';
12
+ export { ConsoleLogger } from './providers/logger/console.js';
13
+ export { MemoryRepository } from './providers/repository/memory.js';
14
+ // Environment Providers
15
+ export { MemoryEnvironmentProvider } from './providers/env/memory.js';
16
+ // Utilities
17
+ export { estimateTokens, estimateMessageTokens, estimateTotalTokens, truncateOldMessages, sanitizeHistory, ContextManager } from './context-manager.js';
18
+ export { summarizeMessages, microCompact, parseSummary } from './summarizer.js';
19
+ export { buildSystemPrompt, buildEnvironmentSection, buildRemindersSection, getCurrentEnvironment, DEFAULT_SYSTEM_PROMPT,
20
+ // Prompt builders
21
+ SubAgentBuilder,
22
+ // Template functions (for advanced customization)
23
+ roleSection, subAgentsTable, questionHandlingSection, directToolsSection, workspaceStorageSection, rulesSection, taskExamplesSection, subAgentRoleSection, taskSection, workflowSection, guidelinesSection, outputSection } from './prompt.js';
24
+ // Task Management utilities (new 4-tool approach)
25
+ export { TaskManager, formatTaskList, createTaskTools, createTaskCreateTool, createTaskUpdateTool, createTaskGetTool, createTaskListTool,
26
+ // Backward compatibility (deprecated)
27
+ TodoManager, formatTodoList, createTodoTool } from './tools/tasks.js';
28
+ // Tracing
29
+ export { TraceBuilder, ConsoleTraceProvider, generateTraceId, generateSpanId, calculateCost, DEFAULT_MODEL_PRICING, OPENROUTER_MODEL_PRICING } from './trace.js';
30
+ // Workspace
31
+ export { Workspace } from './workspace.js';
32
+ // Workspace Providers
33
+ export { MemoryWorkspaceProvider, FileWorkspaceProvider } from './providers/workspace/index.js';
34
+ // Shell
35
+ export { Shell } from './shell/index.js';
36
+ // Built-in Agents
37
+ export { exploreAgent, planAgent, getBuiltInAgents } from './built-in-agents/index.js';
38
+ // Dataset (Run Recording, Replay & Testing)
39
+ export { RunRecorder, RunReplayer, RunTester } from './providers/dataset/index.js';
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mBAAmB;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAgE9D,YAAY;AACZ,OAAO,EACL,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,kBAAkB,EAEnB,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EACL,aAAa,EAGd,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EACL,gBAAgB,EACjB,MAAM,kCAAkC,CAAA;AAEzC,wBAAwB;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAErE,YAAY;AACZ,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACf,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACb,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB;AACrB,kBAAkB;AAClB,eAAe;AACf,kDAAkD;AAClD,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,aAAa,EASd,MAAM,aAAa,CAAA;AAEpB,kDAAkD;AAClD,OAAO,EACL,WAAW,EACX,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB;AAElB,sCAAsC;AACtC,WAAW,EACX,cAAc,EACd,cAAc,EAEf,MAAM,kBAAkB,CAAA;AAEzB,UAAU;AACV,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,aAAa,EACb,qBAAqB,EACrB,wBAAwB,EAYzB,MAAM,YAAY,CAAA;AAEnB,YAAY;AACZ,OAAO,EACL,SAAS,EAUV,MAAM,gBAAgB,CAAA;AAEvB,sBAAsB;AACtB,OAAO,EAIL,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,gCAAgC,CAAA;AAEvC,QAAQ;AACR,OAAO,EACL,KAAK,EAON,MAAM,kBAAkB,CAAA;AAEzB,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAEtF,4CAA4C;AAC5C,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EAUV,MAAM,8BAA8B,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Prompt Builder Module
3
+ *
4
+ * Fluent API builders for creating main agent and sub-agent system prompts.
5
+ */
6
+ export type { SubAgentDef, ToolDef, WorkspacePathDef, TaskExample, WorkflowStep, OutputFormat, MainAgentPromptConfig, SubAgentPromptConfig } from './types.js';
7
+ export { SubAgentBuilder } from './sub-agent-builder.js';
8
+ export { roleSection, subAgentsTable, questionHandlingSection, directToolsSection, workspaceStorageSection, rulesSection, taskExamplesSection, subAgentRoleSection, taskSection, workflowSection, guidelinesSection, outputSection } from './templates.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,WAAW,EACX,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD,OAAO,EACL,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,aAAa,EACd,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Prompt Builder Module
3
+ *
4
+ * Fluent API builders for creating main agent and sub-agent system prompts.
5
+ */
6
+ // Builders
7
+ export { SubAgentBuilder } from './sub-agent-builder.js';
8
+ // Templates (for advanced customization)
9
+ export { roleSection, subAgentsTable, questionHandlingSection, directToolsSection, workspaceStorageSection, rulesSection, taskExamplesSection, subAgentRoleSection, taskSection, workflowSection, guidelinesSection, outputSection } from './templates.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,yCAAyC;AACzC,OAAO,EACL,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,aAAa,EACd,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Main Agent Prompt Builder
3
+ *
4
+ * Fluent API for building main agent system prompts.
5
+ */
6
+ import type { WorkspacePathDef, TaskExample, MainAgentPromptConfig } from './types.js';
7
+ import type { Tool, SubAgentConfig } from '../types.js';
8
+ export declare class MainAgentBuilder {
9
+ private config;
10
+ private _skipBuiltInAgents;
11
+ /**
12
+ * Skip auto-injecting built-in agents (used when Tuplet already merges them)
13
+ */
14
+ skipBuiltInAgents(): this;
15
+ /**
16
+ * Set the agent's role identity
17
+ */
18
+ role(role: string): this;
19
+ /**
20
+ * Set the agent's description
21
+ */
22
+ description(description: string): this;
23
+ /**
24
+ * Set sub-agents from actual SubAgentConfig objects
25
+ * Extracts name, description, and input parameters automatically
26
+ */
27
+ agents(configs: SubAgentConfig[]): this;
28
+ /**
29
+ * Configure question handling behavior
30
+ */
31
+ questionHandling(options: {
32
+ description?: string;
33
+ exampleFlow?: string[];
34
+ }): this;
35
+ /**
36
+ * Set tools from actual Tool objects
37
+ * Extracts name and description automatically
38
+ */
39
+ tools(toolObjects: Tool[]): this;
40
+ /**
41
+ * Add a workspace path definition
42
+ */
43
+ addWorkspacePath(path: string, description: string): this;
44
+ /**
45
+ * Add multiple workspace paths at once
46
+ */
47
+ addWorkspacePaths(paths: WorkspacePathDef[]): this;
48
+ /**
49
+ * Add a behavioral rule
50
+ */
51
+ addRule(rule: string): this;
52
+ /**
53
+ * Add multiple rules at once
54
+ */
55
+ addRules(rules: string[]): this;
56
+ /**
57
+ * Add a task example showing the flow
58
+ */
59
+ addExample(example: TaskExample): this;
60
+ /**
61
+ * Add multiple examples at once
62
+ */
63
+ addExamples(examples: TaskExample[]): this;
64
+ /**
65
+ * Add a custom section with title and content
66
+ */
67
+ addSection(title: string, content: string): this;
68
+ /**
69
+ * Get the current configuration
70
+ */
71
+ getConfig(): MainAgentPromptConfig;
72
+ /**
73
+ * Build the final system prompt string
74
+ */
75
+ build(): string;
76
+ /**
77
+ * Reset the builder to initial state
78
+ */
79
+ reset(): this;
80
+ }
81
+ //# sourceMappingURL=main-agent-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-agent-builder.d.ts","sourceRoot":"","sources":["../../src/prompt/main-agent-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACtB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAavD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAOb;IAED,OAAO,CAAC,kBAAkB,CAAQ;IAElC;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAKzB;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKtC;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAyBvC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE;QACxB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KACvB,GAAG,IAAI;IAKR;;;OAGG;IACH,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI;IAYhC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAKzD;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAKlD;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAK/B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKtC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI;IAK1C;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKhD;;OAEG;IACH,SAAS,IAAI,qBAAqB;IAIlC;;OAEG;IACH,KAAK,IAAI,MAAM;IA8If;;OAEG;IACH,KAAK,IAAI,IAAI;CAWd"}