@pencil-agent/nano-pencil 1.11.23 → 1.11.24

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 (410) hide show
  1. package/dist/cli.js +0 -0
  2. package/dist/core/runtime/sdk.js +1 -1
  3. package/dist/modes/interactive/interactive-mode.js +2 -0
  4. package/dist/packages/agent-core/src/agent-loop.d.ts +27 -0
  5. package/dist/packages/agent-core/src/agent-loop.js +314 -0
  6. package/dist/packages/agent-core/src/agent.d.ts +163 -0
  7. package/dist/packages/agent-core/src/agent.js +416 -0
  8. package/dist/packages/agent-core/src/index.d.ts +11 -0
  9. package/dist/packages/agent-core/src/index.js +15 -0
  10. package/dist/packages/agent-core/src/proxy.d.ts +91 -0
  11. package/dist/packages/agent-core/src/proxy.js +274 -0
  12. package/dist/packages/agent-core/src/types.d.ts +184 -0
  13. package/dist/packages/agent-core/src/types.js +8 -0
  14. package/dist/packages/ai/src/api-registry.d.ts +26 -0
  15. package/dist/packages/ai/src/api-registry.js +50 -0
  16. package/dist/packages/ai/src/env-api-keys.d.ts +9 -0
  17. package/dist/packages/ai/src/env-api-keys.js +106 -0
  18. package/dist/packages/ai/src/index.d.ts +28 -0
  19. package/dist/packages/ai/src/index.js +21 -0
  20. package/dist/packages/ai/src/models.d.ts +30 -0
  21. package/dist/packages/ai/src/models.generated.d.ts +14525 -0
  22. package/dist/packages/ai/src/models.generated.js +14307 -0
  23. package/dist/packages/ai/src/models.js +61 -0
  24. package/dist/packages/ai/src/providers/amazon-bedrock.d.ts +21 -0
  25. package/dist/packages/ai/src/providers/amazon-bedrock.js +603 -0
  26. package/dist/packages/ai/src/providers/anthropic.d.ts +39 -0
  27. package/dist/packages/ai/src/providers/anthropic.js +735 -0
  28. package/dist/packages/ai/src/providers/azure-openai-responses.d.ts +21 -0
  29. package/dist/packages/ai/src/providers/azure-openai-responses.js +190 -0
  30. package/dist/packages/ai/src/providers/github-copilot-headers.d.ts +14 -0
  31. package/dist/packages/ai/src/providers/github-copilot-headers.js +35 -0
  32. package/dist/packages/ai/src/providers/google-gemini-cli.d.ts +80 -0
  33. package/dist/packages/ai/src/providers/google-gemini-cli.js +750 -0
  34. package/dist/packages/ai/src/providers/google-shared.d.ts +71 -0
  35. package/dist/packages/ai/src/providers/google-shared.js +312 -0
  36. package/dist/packages/ai/src/providers/google-vertex.d.ts +21 -0
  37. package/dist/packages/ai/src/providers/google-vertex.js +377 -0
  38. package/dist/packages/ai/src/providers/google.d.ts +19 -0
  39. package/dist/packages/ai/src/providers/google.js +358 -0
  40. package/dist/packages/ai/src/providers/openai-codex-responses.d.ts +9 -0
  41. package/dist/packages/ai/src/providers/openai-codex-responses.js +705 -0
  42. package/dist/packages/ai/src/providers/openai-completions.d.ts +21 -0
  43. package/dist/packages/ai/src/providers/openai-completions.js +733 -0
  44. package/dist/packages/ai/src/providers/openai-responses-shared.d.ts +23 -0
  45. package/dist/packages/ai/src/providers/openai-responses-shared.js +433 -0
  46. package/dist/packages/ai/src/providers/openai-responses.d.ts +19 -0
  47. package/dist/packages/ai/src/providers/openai-responses.js +204 -0
  48. package/dist/packages/ai/src/providers/register-builtins.d.ts +9 -0
  49. package/dist/packages/ai/src/providers/register-builtins.js +69 -0
  50. package/dist/packages/ai/src/providers/simple-options.d.ts +14 -0
  51. package/dist/packages/ai/src/providers/simple-options.js +41 -0
  52. package/dist/packages/ai/src/providers/transform-messages.d.ts +14 -0
  53. package/dist/packages/ai/src/providers/transform-messages.js +161 -0
  54. package/dist/packages/ai/src/stream.d.ts +15 -0
  55. package/dist/packages/ai/src/stream.js +34 -0
  56. package/dist/packages/ai/src/types.d.ts +287 -0
  57. package/dist/packages/ai/src/types.js +8 -0
  58. package/dist/packages/ai/src/utils/event-stream.d.ts +27 -0
  59. package/dist/packages/ai/src/utils/event-stream.js +87 -0
  60. package/dist/packages/ai/src/utils/http-proxy.d.ts +14 -0
  61. package/dist/packages/ai/src/utils/http-proxy.js +21 -0
  62. package/dist/packages/ai/src/utils/json-parse.d.ts +15 -0
  63. package/dist/packages/ai/src/utils/json-parse.js +35 -0
  64. package/dist/packages/ai/src/utils/oauth/anthropic.d.ts +23 -0
  65. package/dist/packages/ai/src/utils/oauth/anthropic.js +110 -0
  66. package/dist/packages/ai/src/utils/oauth/github-copilot.d.ts +36 -0
  67. package/dist/packages/ai/src/utils/oauth/github-copilot.js +287 -0
  68. package/dist/packages/ai/src/utils/oauth/google-antigravity.d.ts +32 -0
  69. package/dist/packages/ai/src/utils/oauth/google-antigravity.js +379 -0
  70. package/dist/packages/ai/src/utils/oauth/google-gemini-cli.d.ts +32 -0
  71. package/dist/packages/ai/src/utils/oauth/google-gemini-cli.js +484 -0
  72. package/dist/packages/ai/src/utils/oauth/index.d.ts +68 -0
  73. package/dist/packages/ai/src/utils/oauth/index.js +139 -0
  74. package/dist/packages/ai/src/utils/oauth/openai-codex.d.ts +40 -0
  75. package/dist/packages/ai/src/utils/oauth/openai-codex.js +386 -0
  76. package/dist/packages/ai/src/utils/oauth/pkce.d.ts +19 -0
  77. package/dist/packages/ai/src/utils/oauth/pkce.js +37 -0
  78. package/dist/packages/ai/src/utils/oauth/types.d.ts +53 -0
  79. package/dist/packages/ai/src/utils/oauth/types.js +8 -0
  80. package/dist/packages/ai/src/utils/overflow.d.ts +58 -0
  81. package/dist/packages/ai/src/utils/overflow.js +121 -0
  82. package/dist/packages/ai/src/utils/sanitize-unicode.d.ts +28 -0
  83. package/dist/packages/ai/src/utils/sanitize-unicode.js +32 -0
  84. package/dist/packages/ai/src/utils/typebox-helpers.d.ts +23 -0
  85. package/dist/packages/ai/src/utils/typebox-helpers.js +27 -0
  86. package/dist/packages/ai/src/utils/validation.d.ts +24 -0
  87. package/dist/packages/ai/src/utils/validation.js +78 -0
  88. package/dist/packages/tui/src/autocomplete.d.ts +56 -0
  89. package/dist/packages/tui/src/autocomplete.js +602 -0
  90. package/dist/packages/tui/src/components/box.d.ts +28 -0
  91. package/dist/packages/tui/src/components/box.js +110 -0
  92. package/dist/packages/tui/src/components/cancellable-loader.d.ts +28 -0
  93. package/dist/packages/tui/src/components/cancellable-loader.js +41 -0
  94. package/dist/packages/tui/src/components/editor.d.ts +211 -0
  95. package/dist/packages/tui/src/components/editor.js +1692 -0
  96. package/dist/packages/tui/src/components/image.d.ts +34 -0
  97. package/dist/packages/tui/src/components/image.js +75 -0
  98. package/dist/packages/tui/src/components/input.d.ts +43 -0
  99. package/dist/packages/tui/src/components/input.js +439 -0
  100. package/dist/packages/tui/src/components/loader.d.ts +27 -0
  101. package/dist/packages/tui/src/components/loader.js +55 -0
  102. package/dist/packages/tui/src/components/markdown.d.ts +101 -0
  103. package/dist/packages/tui/src/components/markdown.js +635 -0
  104. package/dist/packages/tui/src/components/select-list.d.ts +38 -0
  105. package/dist/packages/tui/src/components/select-list.js +158 -0
  106. package/dist/packages/tui/src/components/settings-list.d.ts +56 -0
  107. package/dist/packages/tui/src/components/settings-list.js +191 -0
  108. package/dist/packages/tui/src/components/spacer.d.ts +18 -0
  109. package/dist/packages/tui/src/components/spacer.js +29 -0
  110. package/dist/packages/tui/src/components/text.d.ts +25 -0
  111. package/dist/packages/tui/src/components/text.js +95 -0
  112. package/dist/packages/tui/src/components/truncated-text.d.ts +19 -0
  113. package/dist/packages/tui/src/components/truncated-text.js +57 -0
  114. package/dist/packages/tui/src/editor-component.d.ts +45 -0
  115. package/dist/packages/tui/src/editor-component.js +8 -0
  116. package/dist/packages/tui/src/fuzzy.d.ts +22 -0
  117. package/dist/packages/tui/src/fuzzy.js +113 -0
  118. package/dist/packages/tui/src/index.d.ts +29 -0
  119. package/dist/packages/tui/src/index.js +38 -0
  120. package/dist/packages/tui/src/keybindings.d.ts +45 -0
  121. package/dist/packages/tui/src/keybindings.js +120 -0
  122. package/dist/packages/tui/src/keys.d.ts +166 -0
  123. package/dist/packages/tui/src/keys.js +965 -0
  124. package/dist/packages/tui/src/kill-ring.d.ts +34 -0
  125. package/dist/packages/tui/src/kill-ring.js +50 -0
  126. package/dist/packages/tui/src/stdin-buffer.d.ts +54 -0
  127. package/dist/packages/tui/src/stdin-buffer.js +323 -0
  128. package/dist/packages/tui/src/terminal-image.d.ts +74 -0
  129. package/dist/packages/tui/src/terminal-image.js +288 -0
  130. package/dist/packages/tui/src/terminal.d.ts +84 -0
  131. package/dist/packages/tui/src/terminal.js +255 -0
  132. package/dist/packages/tui/src/tui.d.ts +216 -0
  133. package/dist/packages/tui/src/tui.js +961 -0
  134. package/dist/packages/tui/src/undo-stack.d.ts +23 -0
  135. package/dist/packages/tui/src/undo-stack.js +31 -0
  136. package/dist/packages/tui/src/utils.d.ts +84 -0
  137. package/dist/packages/tui/src/utils.js +812 -0
  138. package/node_modules/@pencil-agent/agent-core/README.md +412 -412
  139. package/node_modules/@pencil-agent/agent-core/dist/agent-loop.d.ts +6 -0
  140. package/node_modules/@pencil-agent/agent-core/dist/agent-loop.d.ts.map +1 -1
  141. package/node_modules/@pencil-agent/agent-core/dist/agent-loop.js +6 -0
  142. package/node_modules/@pencil-agent/agent-core/dist/agent-loop.js.map +1 -1
  143. package/node_modules/@pencil-agent/agent-core/dist/agent.d.ts +6 -0
  144. package/node_modules/@pencil-agent/agent-core/dist/agent.d.ts.map +1 -1
  145. package/node_modules/@pencil-agent/agent-core/dist/agent.js +6 -0
  146. package/node_modules/@pencil-agent/agent-core/dist/agent.js.map +1 -1
  147. package/node_modules/@pencil-agent/agent-core/dist/index.d.ts +6 -0
  148. package/node_modules/@pencil-agent/agent-core/dist/index.d.ts.map +1 -1
  149. package/node_modules/@pencil-agent/agent-core/dist/index.js +6 -0
  150. package/node_modules/@pencil-agent/agent-core/dist/index.js.map +1 -1
  151. package/node_modules/@pencil-agent/agent-core/dist/proxy.d.ts +6 -0
  152. package/node_modules/@pencil-agent/agent-core/dist/proxy.d.ts.map +1 -1
  153. package/node_modules/@pencil-agent/agent-core/dist/proxy.js +6 -0
  154. package/node_modules/@pencil-agent/agent-core/dist/proxy.js.map +1 -1
  155. package/node_modules/@pencil-agent/agent-core/dist/types.d.ts +6 -0
  156. package/node_modules/@pencil-agent/agent-core/dist/types.d.ts.map +1 -1
  157. package/node_modules/@pencil-agent/agent-core/dist/types.js +6 -0
  158. package/node_modules/@pencil-agent/agent-core/dist/types.js.map +1 -1
  159. package/node_modules/@pencil-agent/agent-core/package.json +8 -8
  160. package/node_modules/@pencil-agent/ai/README.md +1190 -1188
  161. package/node_modules/@pencil-agent/ai/dist/api-registry.d.ts +6 -0
  162. package/node_modules/@pencil-agent/ai/dist/api-registry.d.ts.map +1 -1
  163. package/node_modules/@pencil-agent/ai/dist/api-registry.js +6 -0
  164. package/node_modules/@pencil-agent/ai/dist/api-registry.js.map +1 -1
  165. package/node_modules/@pencil-agent/ai/dist/cli.js +19 -13
  166. package/node_modules/@pencil-agent/ai/dist/cli.js.map +1 -1
  167. package/node_modules/@pencil-agent/ai/dist/env-api-keys.d.ts.map +1 -1
  168. package/node_modules/@pencil-agent/ai/dist/env-api-keys.js +6 -0
  169. package/node_modules/@pencil-agent/ai/dist/env-api-keys.js.map +1 -1
  170. package/node_modules/@pencil-agent/ai/dist/index.d.ts +6 -0
  171. package/node_modules/@pencil-agent/ai/dist/index.d.ts.map +1 -1
  172. package/node_modules/@pencil-agent/ai/dist/index.js.map +1 -1
  173. package/node_modules/@pencil-agent/ai/dist/models.d.ts +6 -0
  174. package/node_modules/@pencil-agent/ai/dist/models.d.ts.map +1 -1
  175. package/node_modules/@pencil-agent/ai/dist/models.generated.d.ts +1416 -412
  176. package/node_modules/@pencil-agent/ai/dist/models.generated.d.ts.map +1 -1
  177. package/node_modules/@pencil-agent/ai/dist/models.generated.js +1724 -734
  178. package/node_modules/@pencil-agent/ai/dist/models.generated.js.map +1 -1
  179. package/node_modules/@pencil-agent/ai/dist/models.js +6 -0
  180. package/node_modules/@pencil-agent/ai/dist/models.js.map +1 -1
  181. package/node_modules/@pencil-agent/ai/dist/providers/amazon-bedrock.d.ts +6 -0
  182. package/node_modules/@pencil-agent/ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  183. package/node_modules/@pencil-agent/ai/dist/providers/amazon-bedrock.js +6 -0
  184. package/node_modules/@pencil-agent/ai/dist/providers/amazon-bedrock.js.map +1 -1
  185. package/node_modules/@pencil-agent/ai/dist/providers/anthropic.d.ts +6 -0
  186. package/node_modules/@pencil-agent/ai/dist/providers/anthropic.d.ts.map +1 -1
  187. package/node_modules/@pencil-agent/ai/dist/providers/anthropic.js +6 -0
  188. package/node_modules/@pencil-agent/ai/dist/providers/anthropic.js.map +1 -1
  189. package/node_modules/@pencil-agent/ai/dist/providers/azure-openai-responses.d.ts +6 -0
  190. package/node_modules/@pencil-agent/ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
  191. package/node_modules/@pencil-agent/ai/dist/providers/azure-openai-responses.js +6 -0
  192. package/node_modules/@pencil-agent/ai/dist/providers/azure-openai-responses.js.map +1 -1
  193. package/node_modules/@pencil-agent/ai/dist/providers/github-copilot-headers.d.ts +6 -0
  194. package/node_modules/@pencil-agent/ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  195. package/node_modules/@pencil-agent/ai/dist/providers/github-copilot-headers.js +6 -0
  196. package/node_modules/@pencil-agent/ai/dist/providers/github-copilot-headers.js.map +1 -1
  197. package/node_modules/@pencil-agent/ai/dist/providers/google-gemini-cli.d.ts +6 -0
  198. package/node_modules/@pencil-agent/ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  199. package/node_modules/@pencil-agent/ai/dist/providers/google-gemini-cli.js +6 -0
  200. package/node_modules/@pencil-agent/ai/dist/providers/google-gemini-cli.js.map +1 -1
  201. package/node_modules/@pencil-agent/ai/dist/providers/google-shared.d.ts +6 -0
  202. package/node_modules/@pencil-agent/ai/dist/providers/google-shared.d.ts.map +1 -1
  203. package/node_modules/@pencil-agent/ai/dist/providers/google-shared.js +6 -0
  204. package/node_modules/@pencil-agent/ai/dist/providers/google-shared.js.map +1 -1
  205. package/node_modules/@pencil-agent/ai/dist/providers/google-vertex.d.ts +6 -0
  206. package/node_modules/@pencil-agent/ai/dist/providers/google-vertex.d.ts.map +1 -1
  207. package/node_modules/@pencil-agent/ai/dist/providers/google-vertex.js +6 -0
  208. package/node_modules/@pencil-agent/ai/dist/providers/google-vertex.js.map +1 -1
  209. package/node_modules/@pencil-agent/ai/dist/providers/google.d.ts +6 -0
  210. package/node_modules/@pencil-agent/ai/dist/providers/google.d.ts.map +1 -1
  211. package/node_modules/@pencil-agent/ai/dist/providers/google.js +6 -0
  212. package/node_modules/@pencil-agent/ai/dist/providers/google.js.map +1 -1
  213. package/node_modules/@pencil-agent/ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  214. package/node_modules/@pencil-agent/ai/dist/providers/openai-codex-responses.js +6 -0
  215. package/node_modules/@pencil-agent/ai/dist/providers/openai-codex-responses.js.map +1 -1
  216. package/node_modules/@pencil-agent/ai/dist/providers/openai-completions.d.ts +6 -0
  217. package/node_modules/@pencil-agent/ai/dist/providers/openai-completions.d.ts.map +1 -1
  218. package/node_modules/@pencil-agent/ai/dist/providers/openai-completions.js +6 -0
  219. package/node_modules/@pencil-agent/ai/dist/providers/openai-completions.js.map +1 -1
  220. package/node_modules/@pencil-agent/ai/dist/providers/openai-responses-shared.d.ts +6 -0
  221. package/node_modules/@pencil-agent/ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
  222. package/node_modules/@pencil-agent/ai/dist/providers/openai-responses-shared.js +6 -0
  223. package/node_modules/@pencil-agent/ai/dist/providers/openai-responses-shared.js.map +1 -1
  224. package/node_modules/@pencil-agent/ai/dist/providers/openai-responses.d.ts +6 -0
  225. package/node_modules/@pencil-agent/ai/dist/providers/openai-responses.d.ts.map +1 -1
  226. package/node_modules/@pencil-agent/ai/dist/providers/openai-responses.js +6 -0
  227. package/node_modules/@pencil-agent/ai/dist/providers/openai-responses.js.map +1 -1
  228. package/node_modules/@pencil-agent/ai/dist/providers/register-builtins.d.ts +6 -0
  229. package/node_modules/@pencil-agent/ai/dist/providers/register-builtins.d.ts.map +1 -1
  230. package/node_modules/@pencil-agent/ai/dist/providers/register-builtins.js +6 -0
  231. package/node_modules/@pencil-agent/ai/dist/providers/register-builtins.js.map +1 -1
  232. package/node_modules/@pencil-agent/ai/dist/providers/simple-options.d.ts +6 -0
  233. package/node_modules/@pencil-agent/ai/dist/providers/simple-options.d.ts.map +1 -1
  234. package/node_modules/@pencil-agent/ai/dist/providers/simple-options.js +6 -0
  235. package/node_modules/@pencil-agent/ai/dist/providers/simple-options.js.map +1 -1
  236. package/node_modules/@pencil-agent/ai/dist/providers/transform-messages.d.ts +6 -0
  237. package/node_modules/@pencil-agent/ai/dist/providers/transform-messages.d.ts.map +1 -1
  238. package/node_modules/@pencil-agent/ai/dist/providers/transform-messages.js +6 -0
  239. package/node_modules/@pencil-agent/ai/dist/providers/transform-messages.js.map +1 -1
  240. package/node_modules/@pencil-agent/ai/dist/stream.d.ts +6 -0
  241. package/node_modules/@pencil-agent/ai/dist/stream.d.ts.map +1 -1
  242. package/node_modules/@pencil-agent/ai/dist/stream.js +6 -0
  243. package/node_modules/@pencil-agent/ai/dist/stream.js.map +1 -1
  244. package/node_modules/@pencil-agent/ai/dist/types.d.ts +6 -0
  245. package/node_modules/@pencil-agent/ai/dist/types.d.ts.map +1 -1
  246. package/node_modules/@pencil-agent/ai/dist/types.js +6 -0
  247. package/node_modules/@pencil-agent/ai/dist/types.js.map +1 -1
  248. package/node_modules/@pencil-agent/ai/dist/utils/event-stream.d.ts +6 -0
  249. package/node_modules/@pencil-agent/ai/dist/utils/event-stream.d.ts.map +1 -1
  250. package/node_modules/@pencil-agent/ai/dist/utils/event-stream.js +6 -0
  251. package/node_modules/@pencil-agent/ai/dist/utils/event-stream.js.map +1 -1
  252. package/node_modules/@pencil-agent/ai/dist/utils/http-proxy.d.ts +13 -0
  253. package/node_modules/@pencil-agent/ai/dist/utils/http-proxy.d.ts.map +1 -1
  254. package/node_modules/@pencil-agent/ai/dist/utils/http-proxy.js +6 -0
  255. package/node_modules/@pencil-agent/ai/dist/utils/http-proxy.js.map +1 -1
  256. package/node_modules/@pencil-agent/ai/dist/utils/json-parse.d.ts +6 -0
  257. package/node_modules/@pencil-agent/ai/dist/utils/json-parse.d.ts.map +1 -1
  258. package/node_modules/@pencil-agent/ai/dist/utils/json-parse.js +6 -0
  259. package/node_modules/@pencil-agent/ai/dist/utils/json-parse.js.map +1 -1
  260. package/node_modules/@pencil-agent/ai/dist/utils/oauth/anthropic.d.ts +6 -0
  261. package/node_modules/@pencil-agent/ai/dist/utils/oauth/anthropic.d.ts.map +1 -1
  262. package/node_modules/@pencil-agent/ai/dist/utils/oauth/anthropic.js +6 -0
  263. package/node_modules/@pencil-agent/ai/dist/utils/oauth/anthropic.js.map +1 -1
  264. package/node_modules/@pencil-agent/ai/dist/utils/oauth/github-copilot.d.ts +6 -0
  265. package/node_modules/@pencil-agent/ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  266. package/node_modules/@pencil-agent/ai/dist/utils/oauth/github-copilot.js +6 -0
  267. package/node_modules/@pencil-agent/ai/dist/utils/oauth/github-copilot.js.map +1 -1
  268. package/node_modules/@pencil-agent/ai/dist/utils/oauth/google-antigravity.d.ts +6 -0
  269. package/node_modules/@pencil-agent/ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
  270. package/node_modules/@pencil-agent/ai/dist/utils/oauth/google-antigravity.js +17 -3
  271. package/node_modules/@pencil-agent/ai/dist/utils/oauth/google-antigravity.js.map +1 -1
  272. package/node_modules/@pencil-agent/ai/dist/utils/oauth/google-gemini-cli.d.ts +6 -0
  273. package/node_modules/@pencil-agent/ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
  274. package/node_modules/@pencil-agent/ai/dist/utils/oauth/google-gemini-cli.js +17 -3
  275. package/node_modules/@pencil-agent/ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
  276. package/node_modules/@pencil-agent/ai/dist/utils/oauth/index.d.ts +6 -0
  277. package/node_modules/@pencil-agent/ai/dist/utils/oauth/index.d.ts.map +1 -1
  278. package/node_modules/@pencil-agent/ai/dist/utils/oauth/index.js +6 -0
  279. package/node_modules/@pencil-agent/ai/dist/utils/oauth/index.js.map +1 -1
  280. package/node_modules/@pencil-agent/ai/dist/utils/oauth/openai-codex.d.ts +6 -0
  281. package/node_modules/@pencil-agent/ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  282. package/node_modules/@pencil-agent/ai/dist/utils/oauth/openai-codex.js +16 -10
  283. package/node_modules/@pencil-agent/ai/dist/utils/oauth/openai-codex.js.map +1 -1
  284. package/node_modules/@pencil-agent/ai/dist/utils/oauth/pkce.d.ts +6 -0
  285. package/node_modules/@pencil-agent/ai/dist/utils/oauth/pkce.d.ts.map +1 -1
  286. package/node_modules/@pencil-agent/ai/dist/utils/oauth/pkce.js +6 -0
  287. package/node_modules/@pencil-agent/ai/dist/utils/oauth/pkce.js.map +1 -1
  288. package/node_modules/@pencil-agent/ai/dist/utils/oauth/types.d.ts +6 -0
  289. package/node_modules/@pencil-agent/ai/dist/utils/oauth/types.d.ts.map +1 -1
  290. package/node_modules/@pencil-agent/ai/dist/utils/oauth/types.js +6 -0
  291. package/node_modules/@pencil-agent/ai/dist/utils/oauth/types.js.map +1 -1
  292. package/node_modules/@pencil-agent/ai/dist/utils/overflow.d.ts +6 -0
  293. package/node_modules/@pencil-agent/ai/dist/utils/overflow.d.ts.map +1 -1
  294. package/node_modules/@pencil-agent/ai/dist/utils/overflow.js +6 -0
  295. package/node_modules/@pencil-agent/ai/dist/utils/overflow.js.map +1 -1
  296. package/node_modules/@pencil-agent/ai/dist/utils/sanitize-unicode.d.ts +6 -0
  297. package/node_modules/@pencil-agent/ai/dist/utils/sanitize-unicode.d.ts.map +1 -1
  298. package/node_modules/@pencil-agent/ai/dist/utils/sanitize-unicode.js +6 -0
  299. package/node_modules/@pencil-agent/ai/dist/utils/sanitize-unicode.js.map +1 -1
  300. package/node_modules/@pencil-agent/ai/dist/utils/typebox-helpers.d.ts +6 -0
  301. package/node_modules/@pencil-agent/ai/dist/utils/typebox-helpers.d.ts.map +1 -1
  302. package/node_modules/@pencil-agent/ai/dist/utils/typebox-helpers.js +6 -0
  303. package/node_modules/@pencil-agent/ai/dist/utils/typebox-helpers.js.map +1 -1
  304. package/node_modules/@pencil-agent/ai/dist/utils/validation.d.ts +6 -0
  305. package/node_modules/@pencil-agent/ai/dist/utils/validation.d.ts.map +1 -1
  306. package/node_modules/@pencil-agent/ai/dist/utils/validation.js +6 -0
  307. package/node_modules/@pencil-agent/ai/dist/utils/validation.js.map +1 -1
  308. package/node_modules/@pencil-agent/ai/package.json +66 -65
  309. package/node_modules/@pencil-agent/tui/README.md +761 -761
  310. package/node_modules/@pencil-agent/tui/dist/autocomplete.d.ts +6 -0
  311. package/node_modules/@pencil-agent/tui/dist/autocomplete.d.ts.map +1 -1
  312. package/node_modules/@pencil-agent/tui/dist/autocomplete.js +6 -0
  313. package/node_modules/@pencil-agent/tui/dist/autocomplete.js.map +1 -1
  314. package/node_modules/@pencil-agent/tui/dist/components/box.d.ts +6 -0
  315. package/node_modules/@pencil-agent/tui/dist/components/box.d.ts.map +1 -1
  316. package/node_modules/@pencil-agent/tui/dist/components/box.js +6 -0
  317. package/node_modules/@pencil-agent/tui/dist/components/box.js.map +1 -1
  318. package/node_modules/@pencil-agent/tui/dist/components/cancellable-loader.d.ts +6 -0
  319. package/node_modules/@pencil-agent/tui/dist/components/cancellable-loader.d.ts.map +1 -1
  320. package/node_modules/@pencil-agent/tui/dist/components/cancellable-loader.js +6 -0
  321. package/node_modules/@pencil-agent/tui/dist/components/cancellable-loader.js.map +1 -1
  322. package/node_modules/@pencil-agent/tui/dist/components/editor.d.ts +6 -0
  323. package/node_modules/@pencil-agent/tui/dist/components/editor.d.ts.map +1 -1
  324. package/node_modules/@pencil-agent/tui/dist/components/editor.js +14 -1
  325. package/node_modules/@pencil-agent/tui/dist/components/editor.js.map +1 -1
  326. package/node_modules/@pencil-agent/tui/dist/components/image.d.ts +6 -0
  327. package/node_modules/@pencil-agent/tui/dist/components/image.d.ts.map +1 -1
  328. package/node_modules/@pencil-agent/tui/dist/components/image.js +6 -0
  329. package/node_modules/@pencil-agent/tui/dist/components/image.js.map +1 -1
  330. package/node_modules/@pencil-agent/tui/dist/components/input.d.ts +6 -0
  331. package/node_modules/@pencil-agent/tui/dist/components/input.d.ts.map +1 -1
  332. package/node_modules/@pencil-agent/tui/dist/components/input.js +6 -0
  333. package/node_modules/@pencil-agent/tui/dist/components/input.js.map +1 -1
  334. package/node_modules/@pencil-agent/tui/dist/components/loader.d.ts +6 -0
  335. package/node_modules/@pencil-agent/tui/dist/components/loader.d.ts.map +1 -1
  336. package/node_modules/@pencil-agent/tui/dist/components/loader.js +6 -0
  337. package/node_modules/@pencil-agent/tui/dist/components/loader.js.map +1 -1
  338. package/node_modules/@pencil-agent/tui/dist/components/markdown.d.ts +6 -0
  339. package/node_modules/@pencil-agent/tui/dist/components/markdown.d.ts.map +1 -1
  340. package/node_modules/@pencil-agent/tui/dist/components/markdown.js +6 -0
  341. package/node_modules/@pencil-agent/tui/dist/components/markdown.js.map +1 -1
  342. package/node_modules/@pencil-agent/tui/dist/components/select-list.d.ts +6 -0
  343. package/node_modules/@pencil-agent/tui/dist/components/select-list.d.ts.map +1 -1
  344. package/node_modules/@pencil-agent/tui/dist/components/select-list.js +6 -0
  345. package/node_modules/@pencil-agent/tui/dist/components/select-list.js.map +1 -1
  346. package/node_modules/@pencil-agent/tui/dist/components/settings-list.d.ts +6 -0
  347. package/node_modules/@pencil-agent/tui/dist/components/settings-list.d.ts.map +1 -1
  348. package/node_modules/@pencil-agent/tui/dist/components/settings-list.js +6 -0
  349. package/node_modules/@pencil-agent/tui/dist/components/settings-list.js.map +1 -1
  350. package/node_modules/@pencil-agent/tui/dist/components/spacer.d.ts +6 -0
  351. package/node_modules/@pencil-agent/tui/dist/components/spacer.d.ts.map +1 -1
  352. package/node_modules/@pencil-agent/tui/dist/components/spacer.js +6 -0
  353. package/node_modules/@pencil-agent/tui/dist/components/spacer.js.map +1 -1
  354. package/node_modules/@pencil-agent/tui/dist/components/text.d.ts +6 -0
  355. package/node_modules/@pencil-agent/tui/dist/components/text.d.ts.map +1 -1
  356. package/node_modules/@pencil-agent/tui/dist/components/text.js +6 -0
  357. package/node_modules/@pencil-agent/tui/dist/components/text.js.map +1 -1
  358. package/node_modules/@pencil-agent/tui/dist/components/truncated-text.d.ts +6 -0
  359. package/node_modules/@pencil-agent/tui/dist/components/truncated-text.d.ts.map +1 -1
  360. package/node_modules/@pencil-agent/tui/dist/components/truncated-text.js +6 -0
  361. package/node_modules/@pencil-agent/tui/dist/components/truncated-text.js.map +1 -1
  362. package/node_modules/@pencil-agent/tui/dist/editor-component.d.ts +6 -0
  363. package/node_modules/@pencil-agent/tui/dist/editor-component.d.ts.map +1 -1
  364. package/node_modules/@pencil-agent/tui/dist/editor-component.js +6 -0
  365. package/node_modules/@pencil-agent/tui/dist/editor-component.js.map +1 -1
  366. package/node_modules/@pencil-agent/tui/dist/fuzzy.d.ts +6 -0
  367. package/node_modules/@pencil-agent/tui/dist/fuzzy.d.ts.map +1 -1
  368. package/node_modules/@pencil-agent/tui/dist/fuzzy.js +6 -0
  369. package/node_modules/@pencil-agent/tui/dist/fuzzy.js.map +1 -1
  370. package/node_modules/@pencil-agent/tui/dist/index.d.ts +6 -0
  371. package/node_modules/@pencil-agent/tui/dist/index.d.ts.map +1 -1
  372. package/node_modules/@pencil-agent/tui/dist/index.js +6 -0
  373. package/node_modules/@pencil-agent/tui/dist/index.js.map +1 -1
  374. package/node_modules/@pencil-agent/tui/dist/keybindings.d.ts +6 -0
  375. package/node_modules/@pencil-agent/tui/dist/keybindings.d.ts.map +1 -1
  376. package/node_modules/@pencil-agent/tui/dist/keybindings.js +6 -0
  377. package/node_modules/@pencil-agent/tui/dist/keybindings.js.map +1 -1
  378. package/node_modules/@pencil-agent/tui/dist/keys.d.ts +6 -0
  379. package/node_modules/@pencil-agent/tui/dist/keys.d.ts.map +1 -1
  380. package/node_modules/@pencil-agent/tui/dist/keys.js +6 -0
  381. package/node_modules/@pencil-agent/tui/dist/keys.js.map +1 -1
  382. package/node_modules/@pencil-agent/tui/dist/kill-ring.d.ts +6 -0
  383. package/node_modules/@pencil-agent/tui/dist/kill-ring.d.ts.map +1 -1
  384. package/node_modules/@pencil-agent/tui/dist/kill-ring.js +6 -0
  385. package/node_modules/@pencil-agent/tui/dist/kill-ring.js.map +1 -1
  386. package/node_modules/@pencil-agent/tui/dist/stdin-buffer.d.ts +6 -0
  387. package/node_modules/@pencil-agent/tui/dist/stdin-buffer.d.ts.map +1 -1
  388. package/node_modules/@pencil-agent/tui/dist/stdin-buffer.js +6 -0
  389. package/node_modules/@pencil-agent/tui/dist/stdin-buffer.js.map +1 -1
  390. package/node_modules/@pencil-agent/tui/dist/terminal-image.d.ts +6 -0
  391. package/node_modules/@pencil-agent/tui/dist/terminal-image.d.ts.map +1 -1
  392. package/node_modules/@pencil-agent/tui/dist/terminal-image.js.map +1 -1
  393. package/node_modules/@pencil-agent/tui/dist/terminal.d.ts +6 -0
  394. package/node_modules/@pencil-agent/tui/dist/terminal.d.ts.map +1 -1
  395. package/node_modules/@pencil-agent/tui/dist/terminal.js +6 -0
  396. package/node_modules/@pencil-agent/tui/dist/terminal.js.map +1 -1
  397. package/node_modules/@pencil-agent/tui/dist/tui.d.ts +6 -0
  398. package/node_modules/@pencil-agent/tui/dist/tui.d.ts.map +1 -1
  399. package/node_modules/@pencil-agent/tui/dist/tui.js +6 -0
  400. package/node_modules/@pencil-agent/tui/dist/tui.js.map +1 -1
  401. package/node_modules/@pencil-agent/tui/dist/undo-stack.d.ts +6 -0
  402. package/node_modules/@pencil-agent/tui/dist/undo-stack.d.ts.map +1 -1
  403. package/node_modules/@pencil-agent/tui/dist/undo-stack.js +6 -0
  404. package/node_modules/@pencil-agent/tui/dist/undo-stack.js.map +1 -1
  405. package/node_modules/@pencil-agent/tui/dist/utils.d.ts +6 -0
  406. package/node_modules/@pencil-agent/tui/dist/utils.d.ts.map +1 -1
  407. package/node_modules/@pencil-agent/tui/dist/utils.js +6 -0
  408. package/node_modules/@pencil-agent/tui/dist/utils.js.map +1 -1
  409. package/node_modules/@pencil-agent/tui/package.json +3 -3
  410. package/package.json +1 -1
package/dist/cli.js CHANGED
File without changes
@@ -310,7 +310,7 @@ export async function createAgentSession(options = {}) {
310
310
  const soulMgr = await createSoulManager();
311
311
  if (soulMgr) {
312
312
  soulManager = soulMgr;
313
- await soulManager.initialize();
313
+ await soulMgr.initialize();
314
314
  time("soul.initialize");
315
315
  }
316
316
  else {
@@ -329,6 +329,8 @@ export class InteractiveMode {
329
329
  this.updateTerminalTitle();
330
330
  // Subscribe to agent events
331
331
  this.subscribeToAgent();
332
+ this.chatContainer.clear();
333
+ this.renderInitialMessages();
332
334
  // Set up theme file watcher
333
335
  onThemeChange(() => {
334
336
  this.ui.invalidate();
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Agent loop that works with AgentMessage throughout.
3
+ * Transforms to Message[] only at the LLM call boundary.
4
+ */
5
+ /**
6
+ * [UPSTREAM]: No external dependencies
7
+ * [SURFACE]: agentLoop, agentLoopContinue
8
+ * [LOCUS]: packages/agent-core/src/agent-loop.ts -
9
+ * [COVENANT]: Change → update this header
10
+ */
11
+ import { EventStream } from "@pencil-agent/ai";
12
+ import type { AgentContext, AgentEvent, AgentLoopConfig, AgentMessage, StreamFn } from "./types.js";
13
+ /**
14
+ * Start an agent loop with a new prompt message.
15
+ * The prompt is added to the context and events are emitted for it.
16
+ */
17
+ export declare function agentLoop(prompts: AgentMessage[], context: AgentContext, config: AgentLoopConfig, signal?: AbortSignal, streamFn?: StreamFn): EventStream<AgentEvent, AgentMessage[]>;
18
+ /**
19
+ * Continue an agent loop from the current context without adding a new message.
20
+ * Used for retries - context already has user message or tool results.
21
+ *
22
+ * **Important:** The last message in context must convert to a `user` or `toolResult` message
23
+ * via `convertToLlm`. If it doesn't, the LLM provider will reject the request.
24
+ * This cannot be validated here since `convertToLlm` is only called once per turn.
25
+ */
26
+ export declare function agentLoopContinue(context: AgentContext, config: AgentLoopConfig, signal?: AbortSignal, streamFn?: StreamFn): EventStream<AgentEvent, AgentMessage[]>;
27
+ //# sourceMappingURL=agent-loop.d.ts.map
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Agent loop that works with AgentMessage throughout.
3
+ * Transforms to Message[] only at the LLM call boundary.
4
+ */
5
+ /**
6
+ * [UPSTREAM]: No external dependencies
7
+ * [SURFACE]: agentLoop, agentLoopContinue
8
+ * [LOCUS]: packages/agent-core/src/agent-loop.ts -
9
+ * [COVENANT]: Change → update this header
10
+ */
11
+ import { EventStream, streamSimple, validateToolArguments, } from "@pencil-agent/ai";
12
+ /**
13
+ * Start an agent loop with a new prompt message.
14
+ * The prompt is added to the context and events are emitted for it.
15
+ */
16
+ export function agentLoop(prompts, context, config, signal, streamFn) {
17
+ const stream = createAgentStream();
18
+ (async () => {
19
+ const newMessages = [...prompts];
20
+ const currentContext = {
21
+ ...context,
22
+ messages: [...context.messages, ...prompts],
23
+ };
24
+ stream.push({ type: "agent_start" });
25
+ stream.push({ type: "turn_start" });
26
+ for (const prompt of prompts) {
27
+ stream.push({ type: "message_start", message: prompt });
28
+ stream.push({ type: "message_end", message: prompt });
29
+ }
30
+ await runLoop(currentContext, newMessages, config, signal, stream, streamFn);
31
+ })();
32
+ return stream;
33
+ }
34
+ /**
35
+ * Continue an agent loop from the current context without adding a new message.
36
+ * Used for retries - context already has user message or tool results.
37
+ *
38
+ * **Important:** The last message in context must convert to a `user` or `toolResult` message
39
+ * via `convertToLlm`. If it doesn't, the LLM provider will reject the request.
40
+ * This cannot be validated here since `convertToLlm` is only called once per turn.
41
+ */
42
+ export function agentLoopContinue(context, config, signal, streamFn) {
43
+ if (context.messages.length === 0) {
44
+ throw new Error("Cannot continue: no messages in context");
45
+ }
46
+ if (context.messages[context.messages.length - 1].role === "assistant") {
47
+ throw new Error("Cannot continue from message role: assistant");
48
+ }
49
+ const stream = createAgentStream();
50
+ (async () => {
51
+ const newMessages = [];
52
+ const currentContext = { ...context };
53
+ stream.push({ type: "agent_start" });
54
+ stream.push({ type: "turn_start" });
55
+ await runLoop(currentContext, newMessages, config, signal, stream, streamFn);
56
+ })();
57
+ return stream;
58
+ }
59
+ function createAgentStream() {
60
+ return new EventStream((event) => event.type === "agent_end", (event) => (event.type === "agent_end" ? event.messages : []));
61
+ }
62
+ /**
63
+ * Main loop logic shared by agentLoop and agentLoopContinue.
64
+ */
65
+ async function runLoop(currentContext, newMessages, config, signal, stream, streamFn) {
66
+ let firstTurn = true;
67
+ // Check for steering messages at start (user may have typed while waiting)
68
+ let pendingMessages = (await config.getSteeringMessages?.()) || [];
69
+ // Outer loop: continues when queued follow-up messages arrive after agent would stop
70
+ while (true) {
71
+ let hasMoreToolCalls = true;
72
+ let steeringAfterTools = null;
73
+ // Inner loop: process tool calls and steering messages
74
+ while (hasMoreToolCalls || pendingMessages.length > 0) {
75
+ if (!firstTurn) {
76
+ stream.push({ type: "turn_start" });
77
+ }
78
+ else {
79
+ firstTurn = false;
80
+ }
81
+ // Process pending messages (inject before next assistant response)
82
+ if (pendingMessages.length > 0) {
83
+ for (const message of pendingMessages) {
84
+ stream.push({ type: "message_start", message });
85
+ stream.push({ type: "message_end", message });
86
+ currentContext.messages.push(message);
87
+ newMessages.push(message);
88
+ }
89
+ pendingMessages = [];
90
+ }
91
+ // Stream assistant response
92
+ const message = await streamAssistantResponse(currentContext, config, signal, stream, streamFn);
93
+ newMessages.push(message);
94
+ if (message.stopReason === "error" || message.stopReason === "aborted") {
95
+ stream.push({ type: "turn_end", message, toolResults: [] });
96
+ stream.push({ type: "agent_end", messages: newMessages });
97
+ stream.end(newMessages);
98
+ return;
99
+ }
100
+ // Check for tool calls
101
+ const toolCalls = message.content.filter((c) => c.type === "toolCall");
102
+ hasMoreToolCalls = toolCalls.length > 0;
103
+ const toolResults = [];
104
+ if (hasMoreToolCalls) {
105
+ const toolExecution = await executeToolCalls(currentContext.tools, message, signal, stream, config.getSteeringMessages);
106
+ toolResults.push(...toolExecution.toolResults);
107
+ steeringAfterTools = toolExecution.steeringMessages ?? null;
108
+ for (const result of toolResults) {
109
+ currentContext.messages.push(result);
110
+ newMessages.push(result);
111
+ }
112
+ }
113
+ stream.push({ type: "turn_end", message, toolResults });
114
+ // Get steering messages after turn completes
115
+ if (steeringAfterTools && steeringAfterTools.length > 0) {
116
+ pendingMessages = steeringAfterTools;
117
+ steeringAfterTools = null;
118
+ }
119
+ else {
120
+ pendingMessages = (await config.getSteeringMessages?.()) || [];
121
+ }
122
+ }
123
+ // Agent would stop here. Check for follow-up messages.
124
+ const followUpMessages = (await config.getFollowUpMessages?.()) || [];
125
+ if (followUpMessages.length > 0) {
126
+ // Set as pending so inner loop processes them
127
+ pendingMessages = followUpMessages;
128
+ continue;
129
+ }
130
+ // No more messages, exit
131
+ break;
132
+ }
133
+ stream.push({ type: "agent_end", messages: newMessages });
134
+ stream.end(newMessages);
135
+ }
136
+ /**
137
+ * Stream an assistant response from the LLM.
138
+ * This is where AgentMessage[] gets transformed to Message[] for the LLM.
139
+ */
140
+ async function streamAssistantResponse(context, config, signal, stream, streamFn) {
141
+ // Apply context transform if configured (AgentMessage[] → AgentMessage[])
142
+ let messages = context.messages;
143
+ if (config.transformContext) {
144
+ messages = await config.transformContext(messages, signal);
145
+ }
146
+ // Convert to LLM-compatible messages (AgentMessage[] → Message[])
147
+ const llmMessages = await config.convertToLlm(messages);
148
+ // Build LLM context
149
+ const llmContext = {
150
+ systemPrompt: context.systemPrompt,
151
+ messages: llmMessages,
152
+ tools: context.tools,
153
+ };
154
+ const streamFunction = streamFn || streamSimple;
155
+ // Resolve API key (important for expiring tokens)
156
+ const resolvedApiKey = (config.getApiKey ? await config.getApiKey(config.model.provider) : undefined) || config.apiKey;
157
+ const response = await streamFunction(config.model, llmContext, {
158
+ ...config,
159
+ apiKey: resolvedApiKey,
160
+ signal,
161
+ });
162
+ let partialMessage = null;
163
+ let addedPartial = false;
164
+ for await (const event of response) {
165
+ switch (event.type) {
166
+ case "start":
167
+ partialMessage = event.partial;
168
+ context.messages.push(partialMessage);
169
+ addedPartial = true;
170
+ stream.push({ type: "message_start", message: { ...partialMessage } });
171
+ break;
172
+ case "text_start":
173
+ case "text_delta":
174
+ case "text_end":
175
+ case "thinking_start":
176
+ case "thinking_delta":
177
+ case "thinking_end":
178
+ case "toolcall_start":
179
+ case "toolcall_delta":
180
+ case "toolcall_end":
181
+ if (partialMessage) {
182
+ partialMessage = event.partial;
183
+ context.messages[context.messages.length - 1] = partialMessage;
184
+ stream.push({
185
+ type: "message_update",
186
+ assistantMessageEvent: event,
187
+ message: { ...partialMessage },
188
+ });
189
+ }
190
+ break;
191
+ case "done":
192
+ case "error": {
193
+ const finalMessage = await response.result();
194
+ if (addedPartial) {
195
+ context.messages[context.messages.length - 1] = finalMessage;
196
+ }
197
+ else {
198
+ context.messages.push(finalMessage);
199
+ }
200
+ if (!addedPartial) {
201
+ stream.push({ type: "message_start", message: { ...finalMessage } });
202
+ }
203
+ stream.push({ type: "message_end", message: finalMessage });
204
+ return finalMessage;
205
+ }
206
+ }
207
+ }
208
+ return await response.result();
209
+ }
210
+ /**
211
+ * Execute tool calls from an assistant message.
212
+ */
213
+ async function executeToolCalls(tools, assistantMessage, signal, stream, getSteeringMessages) {
214
+ const toolCalls = assistantMessage.content.filter((c) => c.type === "toolCall");
215
+ const results = [];
216
+ let steeringMessages;
217
+ for (let index = 0; index < toolCalls.length; index++) {
218
+ const toolCall = toolCalls[index];
219
+ const tool = tools?.find((t) => t.name === toolCall.name);
220
+ stream.push({
221
+ type: "tool_execution_start",
222
+ toolCallId: toolCall.id,
223
+ toolName: toolCall.name,
224
+ args: toolCall.arguments,
225
+ });
226
+ let result;
227
+ let isError = false;
228
+ try {
229
+ if (!tool)
230
+ throw new Error(`Tool ${toolCall.name} not found`);
231
+ const validatedArgs = validateToolArguments(tool, toolCall);
232
+ result = await tool.execute(toolCall.id, validatedArgs, signal, (partialResult) => {
233
+ stream.push({
234
+ type: "tool_execution_update",
235
+ toolCallId: toolCall.id,
236
+ toolName: toolCall.name,
237
+ args: toolCall.arguments,
238
+ partialResult,
239
+ });
240
+ });
241
+ }
242
+ catch (e) {
243
+ result = {
244
+ content: [{ type: "text", text: e instanceof Error ? e.message : String(e) }],
245
+ details: {},
246
+ };
247
+ isError = true;
248
+ }
249
+ stream.push({
250
+ type: "tool_execution_end",
251
+ toolCallId: toolCall.id,
252
+ toolName: toolCall.name,
253
+ result,
254
+ isError,
255
+ });
256
+ const toolResultMessage = {
257
+ role: "toolResult",
258
+ toolCallId: toolCall.id,
259
+ toolName: toolCall.name,
260
+ content: result.content,
261
+ details: result.details,
262
+ isError,
263
+ timestamp: Date.now(),
264
+ };
265
+ results.push(toolResultMessage);
266
+ stream.push({ type: "message_start", message: toolResultMessage });
267
+ stream.push({ type: "message_end", message: toolResultMessage });
268
+ // Check for steering messages - skip remaining tools if user interrupted
269
+ if (getSteeringMessages) {
270
+ const steering = await getSteeringMessages();
271
+ if (steering.length > 0) {
272
+ steeringMessages = steering;
273
+ const remainingCalls = toolCalls.slice(index + 1);
274
+ for (const skipped of remainingCalls) {
275
+ results.push(skipToolCall(skipped, stream));
276
+ }
277
+ break;
278
+ }
279
+ }
280
+ }
281
+ return { toolResults: results, steeringMessages };
282
+ }
283
+ function skipToolCall(toolCall, stream) {
284
+ const result = {
285
+ content: [{ type: "text", text: "Skipped due to queued user message." }],
286
+ details: {},
287
+ };
288
+ stream.push({
289
+ type: "tool_execution_start",
290
+ toolCallId: toolCall.id,
291
+ toolName: toolCall.name,
292
+ args: toolCall.arguments,
293
+ });
294
+ stream.push({
295
+ type: "tool_execution_end",
296
+ toolCallId: toolCall.id,
297
+ toolName: toolCall.name,
298
+ result,
299
+ isError: true,
300
+ });
301
+ const toolResultMessage = {
302
+ role: "toolResult",
303
+ toolCallId: toolCall.id,
304
+ toolName: toolCall.name,
305
+ content: result.content,
306
+ details: {},
307
+ isError: true,
308
+ timestamp: Date.now(),
309
+ };
310
+ stream.push({ type: "message_start", message: toolResultMessage });
311
+ stream.push({ type: "message_end", message: toolResultMessage });
312
+ return toolResultMessage;
313
+ }
314
+ //# sourceMappingURL=agent-loop.js.map
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Agent class that uses the agent-loop directly.
3
+ * No transport abstraction - calls streamSimple via the loop.
4
+ */
5
+ /**
6
+ * [UPSTREAM]: Depends on ./agent-loop.js
7
+ * [SURFACE]: AgentOptions, Agent
8
+ * [LOCUS]: packages/agent-core/src/agent.ts -
9
+ * [COVENANT]: Change → update this header
10
+ */
11
+ import { type ImageContent, type Message, type Model, type ThinkingBudgets, type Transport } from "@pencil-agent/ai";
12
+ import type { AgentEvent, AgentMessage, AgentState, AgentTool, StreamFn, ThinkingLevel } from "./types.js";
13
+ export interface AgentOptions {
14
+ initialState?: Partial<AgentState>;
15
+ /**
16
+ * Converts AgentMessage[] to LLM-compatible Message[] before each LLM call.
17
+ * Default filters to user/assistant/toolResult and converts attachments.
18
+ */
19
+ convertToLlm?: (messages: AgentMessage[]) => Message[] | Promise<Message[]>;
20
+ /**
21
+ * Optional transform applied to context before convertToLlm.
22
+ * Use for context pruning, injecting external context, etc.
23
+ */
24
+ transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;
25
+ /**
26
+ * Steering mode: "all" = send all steering messages at once, "one-at-a-time" = one per turn
27
+ */
28
+ steeringMode?: "all" | "one-at-a-time";
29
+ /**
30
+ * Follow-up mode: "all" = send all follow-up messages at once, "one-at-a-time" = one per turn
31
+ */
32
+ followUpMode?: "all" | "one-at-a-time";
33
+ /**
34
+ * Custom stream function (for proxy backends, etc.). Default uses streamSimple.
35
+ */
36
+ streamFn?: StreamFn;
37
+ /**
38
+ * Optional session identifier forwarded to LLM providers.
39
+ * Used by providers that support session-based caching (e.g., OpenAI Codex).
40
+ */
41
+ sessionId?: string;
42
+ /**
43
+ * Resolves an API key dynamically for each LLM call.
44
+ * Useful for expiring tokens (e.g., GitHub Copilot OAuth).
45
+ */
46
+ getApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;
47
+ /**
48
+ * Custom token budgets for thinking levels (token-based providers only).
49
+ */
50
+ thinkingBudgets?: ThinkingBudgets;
51
+ /**
52
+ * Preferred transport for providers that support multiple transports.
53
+ */
54
+ transport?: Transport;
55
+ /**
56
+ * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.
57
+ * If the server's requested delay exceeds this value, the request fails immediately,
58
+ * allowing higher-level retry logic to handle it with user visibility.
59
+ * Default: 60000 (60 seconds). Set to 0 to disable the cap.
60
+ */
61
+ maxRetryDelayMs?: number;
62
+ }
63
+ export declare class Agent {
64
+ private _state;
65
+ private listeners;
66
+ private abortController?;
67
+ private convertToLlm;
68
+ private transformContext?;
69
+ private steeringQueue;
70
+ private followUpQueue;
71
+ private steeringMode;
72
+ private followUpMode;
73
+ streamFn: StreamFn;
74
+ private _sessionId?;
75
+ getApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;
76
+ private runningPrompt?;
77
+ private resolveRunningPrompt?;
78
+ private _thinkingBudgets?;
79
+ private _transport;
80
+ private _maxRetryDelayMs?;
81
+ constructor(opts?: AgentOptions);
82
+ /**
83
+ * Get the current session ID used for provider caching.
84
+ */
85
+ get sessionId(): string | undefined;
86
+ /**
87
+ * Set the session ID for provider caching.
88
+ * Call this when switching sessions (new session, branch, resume).
89
+ */
90
+ set sessionId(value: string | undefined);
91
+ /**
92
+ * Get the current thinking budgets.
93
+ */
94
+ get thinkingBudgets(): ThinkingBudgets | undefined;
95
+ /**
96
+ * Set custom thinking budgets for token-based providers.
97
+ */
98
+ set thinkingBudgets(value: ThinkingBudgets | undefined);
99
+ /**
100
+ * Get the current preferred transport.
101
+ */
102
+ get transport(): Transport;
103
+ /**
104
+ * Set the preferred transport.
105
+ */
106
+ setTransport(value: Transport): void;
107
+ /**
108
+ * Get the current max retry delay in milliseconds.
109
+ */
110
+ get maxRetryDelayMs(): number | undefined;
111
+ /**
112
+ * Set the maximum delay to wait for server-requested retries.
113
+ * Set to 0 to disable the cap.
114
+ */
115
+ set maxRetryDelayMs(value: number | undefined);
116
+ get state(): AgentState;
117
+ subscribe(fn: (e: AgentEvent) => void): () => void;
118
+ setSystemPrompt(v: string): void;
119
+ setModel(m: Model<any>): void;
120
+ setThinkingLevel(l: ThinkingLevel): void;
121
+ setSteeringMode(mode: "all" | "one-at-a-time"): void;
122
+ getSteeringMode(): "all" | "one-at-a-time";
123
+ setFollowUpMode(mode: "all" | "one-at-a-time"): void;
124
+ getFollowUpMode(): "all" | "one-at-a-time";
125
+ setTools(t: AgentTool<any>[]): void;
126
+ replaceMessages(ms: AgentMessage[]): void;
127
+ appendMessage(m: AgentMessage): void;
128
+ /**
129
+ * Queue a steering message to interrupt the agent mid-run.
130
+ * Delivered after current tool execution, skips remaining tools.
131
+ */
132
+ steer(m: AgentMessage): void;
133
+ /**
134
+ * Queue a follow-up message to be processed after the agent finishes.
135
+ * Delivered only when agent has no more tool calls or steering messages.
136
+ */
137
+ followUp(m: AgentMessage): void;
138
+ clearSteeringQueue(): void;
139
+ clearFollowUpQueue(): void;
140
+ clearAllQueues(): void;
141
+ hasQueuedMessages(): boolean;
142
+ private dequeueSteeringMessages;
143
+ private dequeueFollowUpMessages;
144
+ clearMessages(): void;
145
+ abort(): void;
146
+ waitForIdle(): Promise<void>;
147
+ reset(): void;
148
+ /** Send a prompt with an AgentMessage */
149
+ prompt(message: AgentMessage | AgentMessage[]): Promise<void>;
150
+ prompt(input: string, images?: ImageContent[]): Promise<void>;
151
+ /**
152
+ * Continue from current context (used for retries and resuming queued messages).
153
+ */
154
+ continue(): Promise<void>;
155
+ /**
156
+ * Run the agent loop.
157
+ * If messages are provided, starts a new conversation turn with those messages.
158
+ * Otherwise, continues from existing context.
159
+ */
160
+ private _runLoop;
161
+ private emit;
162
+ }
163
+ //# sourceMappingURL=agent.d.ts.map