indusagi 0.12.19 → 0.12.21

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 (518) hide show
  1. package/README.md +16 -36
  2. package/dist/agent/agent-loop.d.ts +3 -9
  3. package/dist/agent/agent-loop.d.ts.map +1 -1
  4. package/dist/agent/agent-loop.js +19 -58
  5. package/dist/agent/agent-loop.js.map +1 -1
  6. package/dist/agent/agent.d.ts +9 -10
  7. package/dist/agent/agent.d.ts.map +1 -1
  8. package/dist/agent/agent.js +182 -129
  9. package/dist/agent/agent.js.map +1 -1
  10. package/dist/agent/error-handler.d.ts.map +1 -1
  11. package/dist/agent/error-handler.js.map +1 -1
  12. package/dist/agent/event-bus.d.ts.map +1 -1
  13. package/dist/agent/event-bus.js +1 -3
  14. package/dist/agent/event-bus.js.map +1 -1
  15. package/dist/agent/index.d.ts.map +1 -1
  16. package/dist/agent/index.js +0 -6
  17. package/dist/agent/index.js.map +1 -1
  18. package/dist/agent/messages.d.ts +1 -1
  19. package/dist/agent/messages.d.ts.map +1 -1
  20. package/dist/agent/proxy.d.ts +1 -14
  21. package/dist/agent/proxy.d.ts.map +1 -1
  22. package/dist/agent/proxy.js +67 -148
  23. package/dist/agent/proxy.js.map +1 -1
  24. package/dist/agent/session-manager.d.ts +10 -10
  25. package/dist/agent/session-manager.d.ts.map +1 -1
  26. package/dist/agent/session-manager.js +20 -16
  27. package/dist/agent/session-manager.js.map +1 -1
  28. package/dist/agent/state-manager.d.ts +1 -1
  29. package/dist/agent/state-manager.d.ts.map +1 -1
  30. package/dist/agent/state-manager.js +1 -0
  31. package/dist/agent/state-manager.js.map +1 -1
  32. package/dist/agent/telemetry.d.ts.map +1 -1
  33. package/dist/agent/telemetry.js +1 -3
  34. package/dist/agent/telemetry.js.map +1 -1
  35. package/dist/agent/tools/bash.d.ts.map +1 -1
  36. package/dist/agent/tools/bash.js +143 -118
  37. package/dist/agent/tools/bash.js.map +1 -1
  38. package/dist/agent/tools/edit-diff.d.ts +1 -1
  39. package/dist/agent/tools/edit-diff.d.ts.map +1 -1
  40. package/dist/agent/tools/edit-diff.js +189 -175
  41. package/dist/agent/tools/edit-diff.js.map +1 -1
  42. package/dist/agent/tools/edit.d.ts.map +1 -1
  43. package/dist/agent/tools/edit.js +137 -121
  44. package/dist/agent/tools/edit.js.map +1 -1
  45. package/dist/agent/tools/find.d.ts.map +1 -1
  46. package/dist/agent/tools/find.js +100 -65
  47. package/dist/agent/tools/find.js.map +1 -1
  48. package/dist/agent/tools/grep.d.ts.map +1 -1
  49. package/dist/agent/tools/grep.js +126 -97
  50. package/dist/agent/tools/grep.js.map +1 -1
  51. package/dist/agent/tools/index.d.ts +53 -40
  52. package/dist/agent/tools/index.d.ts.map +1 -1
  53. package/dist/agent/tools/index.js +19 -12
  54. package/dist/agent/tools/index.js.map +1 -1
  55. package/dist/agent/tools/ls.d.ts +2 -1
  56. package/dist/agent/tools/ls.d.ts.map +1 -1
  57. package/dist/agent/tools/ls.js +145 -94
  58. package/dist/agent/tools/ls.js.map +1 -1
  59. package/dist/agent/tools/path-utils.d.ts.map +1 -1
  60. package/dist/agent/tools/path-utils.js +48 -29
  61. package/dist/agent/tools/path-utils.js.map +1 -1
  62. package/dist/agent/tools/process-controller.d.ts +15 -0
  63. package/dist/agent/tools/process-controller.d.ts.map +1 -0
  64. package/dist/agent/tools/process-controller.js +39 -0
  65. package/dist/agent/tools/process-controller.js.map +1 -0
  66. package/dist/agent/tools/process-manager.d.ts +60 -0
  67. package/dist/agent/tools/process-manager.d.ts.map +1 -0
  68. package/dist/agent/tools/process-manager.js +485 -0
  69. package/dist/agent/tools/process-manager.js.map +1 -0
  70. package/dist/agent/tools/process-types.d.ts +74 -0
  71. package/dist/agent/tools/process-types.d.ts.map +1 -0
  72. package/dist/agent/tools/process-types.js +7 -0
  73. package/dist/agent/tools/process-types.js.map +1 -0
  74. package/dist/agent/tools/process.d.ts +38 -0
  75. package/dist/agent/tools/process.d.ts.map +1 -0
  76. package/dist/agent/tools/process.js +360 -0
  77. package/dist/agent/tools/process.js.map +1 -0
  78. package/dist/agent/tools/read.d.ts.map +1 -1
  79. package/dist/agent/tools/read.js +157 -135
  80. package/dist/agent/tools/read.js.map +1 -1
  81. package/dist/agent/tools/registry.js +2 -4
  82. package/dist/agent/tools/registry.js.map +1 -1
  83. package/dist/agent/tools/teams/activity-tracker.d.ts +66 -0
  84. package/dist/agent/tools/teams/activity-tracker.d.ts.map +1 -0
  85. package/dist/agent/tools/teams/activity-tracker.js +480 -0
  86. package/dist/agent/tools/teams/activity-tracker.js.map +1 -0
  87. package/dist/agent/tools/teams/cleanup.d.ts +51 -0
  88. package/dist/agent/tools/teams/cleanup.d.ts.map +1 -0
  89. package/dist/agent/tools/teams/cleanup.js +219 -0
  90. package/dist/agent/tools/teams/cleanup.js.map +1 -0
  91. package/dist/agent/tools/teams/fs-lock.d.ts +12 -0
  92. package/dist/agent/tools/teams/fs-lock.d.ts.map +1 -0
  93. package/dist/agent/tools/teams/fs-lock.js +74 -0
  94. package/dist/agent/tools/teams/fs-lock.js.map +1 -0
  95. package/dist/agent/tools/teams/index.d.ts +12 -0
  96. package/dist/agent/tools/teams/index.d.ts.map +1 -0
  97. package/dist/agent/tools/teams/index.js +12 -0
  98. package/dist/agent/tools/teams/index.js.map +1 -0
  99. package/dist/agent/tools/teams/mailbox.d.ts +21 -0
  100. package/dist/agent/tools/teams/mailbox.d.ts.map +1 -0
  101. package/dist/agent/tools/teams/mailbox.js +106 -0
  102. package/dist/agent/tools/teams/mailbox.js.map +1 -0
  103. package/dist/agent/tools/teams/model-policy.d.ts +23 -0
  104. package/dist/agent/tools/teams/model-policy.d.ts.map +1 -0
  105. package/dist/agent/tools/teams/model-policy.js +113 -0
  106. package/dist/agent/tools/teams/model-policy.js.map +1 -0
  107. package/dist/agent/tools/teams/names.d.ts +28 -0
  108. package/dist/agent/tools/teams/names.d.ts.map +1 -0
  109. package/dist/agent/tools/teams/names.js +109 -0
  110. package/dist/agent/tools/teams/names.js.map +1 -0
  111. package/dist/agent/tools/teams/protocol.d.ts +75 -0
  112. package/dist/agent/tools/teams/protocol.d.ts.map +1 -0
  113. package/dist/agent/tools/teams/protocol.js +205 -0
  114. package/dist/agent/tools/teams/protocol.js.map +1 -0
  115. package/dist/agent/tools/teams/task-store.d.ts +89 -0
  116. package/dist/agent/tools/teams/task-store.d.ts.map +1 -0
  117. package/dist/agent/tools/teams/task-store.js +445 -0
  118. package/dist/agent/tools/teams/task-store.js.map +1 -0
  119. package/dist/agent/tools/teams/team-attach-claim.d.ts +36 -0
  120. package/dist/agent/tools/teams/team-attach-claim.d.ts.map +1 -0
  121. package/dist/agent/tools/teams/team-attach-claim.js +144 -0
  122. package/dist/agent/tools/teams/team-attach-claim.js.map +1 -0
  123. package/dist/agent/tools/teams/team-config.d.ts +55 -0
  124. package/dist/agent/tools/teams/team-config.d.ts.map +1 -0
  125. package/dist/agent/tools/teams/team-config.js +252 -0
  126. package/dist/agent/tools/teams/team-config.js.map +1 -0
  127. package/dist/agent/tools/teams/worktree.d.ts +40 -0
  128. package/dist/agent/tools/teams/worktree.d.ts.map +1 -0
  129. package/dist/agent/tools/teams/worktree.js +213 -0
  130. package/dist/agent/tools/teams/worktree.js.map +1 -0
  131. package/dist/agent/tools/todo-store.js +2 -1
  132. package/dist/agent/tools/todo-store.js.map +1 -1
  133. package/dist/agent/tools/todo.d.ts +2 -2
  134. package/dist/agent/tools/todo.js +2 -2
  135. package/dist/agent/tools/truncate.d.ts.map +1 -1
  136. package/dist/agent/tools/truncate.js +150 -134
  137. package/dist/agent/tools/truncate.js.map +1 -1
  138. package/dist/agent/tools/utils/hook-runner.d.ts +9 -10
  139. package/dist/agent/tools/utils/hook-runner.d.ts.map +1 -1
  140. package/dist/agent/tools/utils/hook-runner.js +18 -16
  141. package/dist/agent/tools/utils/hook-runner.js.map +1 -1
  142. package/dist/agent/tools/utils/image-resize.d.ts +1 -14
  143. package/dist/agent/tools/utils/image-resize.d.ts.map +1 -1
  144. package/dist/agent/tools/utils/image-resize.js +80 -34
  145. package/dist/agent/tools/utils/image-resize.js.map +1 -1
  146. package/dist/agent/tools/utils/mime.d.ts +0 -8
  147. package/dist/agent/tools/utils/mime.d.ts.map +1 -1
  148. package/dist/agent/tools/utils/mime.js +43 -32
  149. package/dist/agent/tools/utils/mime.js.map +1 -1
  150. package/dist/agent/tools/utils/shell.d.ts +1 -23
  151. package/dist/agent/tools/utils/shell.d.ts.map +1 -1
  152. package/dist/agent/tools/utils/shell.js +43 -86
  153. package/dist/agent/tools/utils/shell.js.map +1 -1
  154. package/dist/agent/tools/write.d.ts.map +1 -1
  155. package/dist/agent/tools/write.js +105 -62
  156. package/dist/agent/tools/write.js.map +1 -1
  157. package/dist/agent/types.d.ts +69 -64
  158. package/dist/agent/types.d.ts.map +1 -1
  159. package/dist/agent/types.js +38 -23
  160. package/dist/agent/types.js.map +1 -1
  161. package/dist/agent.d.ts +4 -0
  162. package/dist/agent.d.ts.map +1 -1
  163. package/dist/agent.js +4 -0
  164. package/dist/agent.js.map +1 -1
  165. package/dist/ai/api-registry.d.ts.map +1 -1
  166. package/dist/ai/api-registry.js +3 -4
  167. package/dist/ai/api-registry.js.map +1 -1
  168. package/dist/ai/cli.js +62 -82
  169. package/dist/ai/cli.js.map +1 -1
  170. package/dist/ai/env-api-keys.d.ts.map +1 -1
  171. package/dist/ai/env-api-keys.js +78 -81
  172. package/dist/ai/env-api-keys.js.map +1 -1
  173. package/dist/ai/index.d.ts +6 -0
  174. package/dist/ai/index.d.ts.map +1 -1
  175. package/dist/ai/index.js +6 -0
  176. package/dist/ai/index.js.map +1 -1
  177. package/dist/ai/models.d.ts +7 -17
  178. package/dist/ai/models.d.ts.map +1 -1
  179. package/dist/ai/models.generated.d.ts +19 -0
  180. package/dist/ai/models.generated.d.ts.map +1 -1
  181. package/dist/ai/models.generated.js +14 -2
  182. package/dist/ai/models.generated.js.map +1 -1
  183. package/dist/ai/models.js +17 -11
  184. package/dist/ai/models.js.map +1 -1
  185. package/dist/ai/providers/amazon-bedrock.d.ts.map +1 -1
  186. package/dist/ai/providers/amazon-bedrock.js +319 -248
  187. package/dist/ai/providers/amazon-bedrock.js.map +1 -1
  188. package/dist/ai/providers/anthropic.d.ts.map +1 -1
  189. package/dist/ai/providers/anthropic.js +378 -324
  190. package/dist/ai/providers/anthropic.js.map +1 -1
  191. package/dist/ai/providers/azure-openai-responses.d.ts.map +1 -1
  192. package/dist/ai/providers/azure-openai-responses.js +164 -123
  193. package/dist/ai/providers/azure-openai-responses.js.map +1 -1
  194. package/dist/ai/providers/google-shared.d.ts +0 -18
  195. package/dist/ai/providers/google-shared.d.ts.map +1 -1
  196. package/dist/ai/providers/google-shared.js +224 -225
  197. package/dist/ai/providers/google-shared.js.map +1 -1
  198. package/dist/ai/providers/google-vertex.d.ts.map +1 -1
  199. package/dist/ai/providers/google-vertex.js +244 -226
  200. package/dist/ai/providers/google-vertex.js.map +1 -1
  201. package/dist/ai/providers/google.d.ts +3 -0
  202. package/dist/ai/providers/google.d.ts.map +1 -1
  203. package/dist/ai/providers/google.js +232 -210
  204. package/dist/ai/providers/google.js.map +1 -1
  205. package/dist/ai/providers/kimi.js +1 -0
  206. package/dist/ai/providers/kimi.js.map +1 -1
  207. package/dist/ai/providers/mock.d.ts +10 -0
  208. package/dist/ai/providers/mock.d.ts.map +1 -0
  209. package/dist/ai/providers/mock.js +64 -0
  210. package/dist/ai/providers/mock.js.map +1 -0
  211. package/dist/ai/providers/openai-codex-responses.d.ts.map +1 -1
  212. package/dist/ai/providers/openai-codex-responses.js +178 -133
  213. package/dist/ai/providers/openai-codex-responses.js.map +1 -1
  214. package/dist/ai/providers/openai-completions.d.ts.map +1 -1
  215. package/dist/ai/providers/openai-completions.js +468 -387
  216. package/dist/ai/providers/openai-completions.js.map +1 -1
  217. package/dist/ai/providers/openai-responses-shared.d.ts.map +1 -1
  218. package/dist/ai/providers/openai-responses-shared.js +187 -166
  219. package/dist/ai/providers/openai-responses-shared.js.map +1 -1
  220. package/dist/ai/providers/openai-responses.d.ts.map +1 -1
  221. package/dist/ai/providers/openai-responses.js +108 -85
  222. package/dist/ai/providers/openai-responses.js.map +1 -1
  223. package/dist/ai/providers/openai-scaffold.d.ts +4 -0
  224. package/dist/ai/providers/openai-scaffold.d.ts.map +1 -0
  225. package/dist/ai/providers/openai-scaffold.js +33 -0
  226. package/dist/ai/providers/openai-scaffold.js.map +1 -0
  227. package/dist/ai/providers/register-builtins.d.ts.map +1 -1
  228. package/dist/ai/providers/register-builtins.js +109 -42
  229. package/dist/ai/providers/register-builtins.js.map +1 -1
  230. package/dist/ai/providers/simple-options.js +2 -0
  231. package/dist/ai/providers/simple-options.js.map +1 -1
  232. package/dist/ai/providers/transform-messages.js +3 -9
  233. package/dist/ai/providers/transform-messages.js.map +1 -1
  234. package/dist/ai/stream.d.ts +4 -14
  235. package/dist/ai/stream.d.ts.map +1 -1
  236. package/dist/ai/stream.js +0 -36
  237. package/dist/ai/stream.js.map +1 -1
  238. package/dist/ai/types.d.ts +22 -3
  239. package/dist/ai/types.d.ts.map +1 -1
  240. package/dist/ai/types.js +154 -77
  241. package/dist/ai/types.js.map +1 -1
  242. package/dist/ai/utils/base-stream-handler.js +1 -0
  243. package/dist/ai/utils/base-stream-handler.js.map +1 -1
  244. package/dist/ai/utils/event-stream.d.ts +2 -0
  245. package/dist/ai/utils/event-stream.d.ts.map +1 -1
  246. package/dist/ai/utils/event-stream.js +22 -5
  247. package/dist/ai/utils/event-stream.js.map +1 -1
  248. package/dist/ai/utils/json-parse.d.ts +3 -0
  249. package/dist/ai/utils/json-parse.d.ts.map +1 -1
  250. package/dist/ai/utils/json-parse.js +8 -5
  251. package/dist/ai/utils/json-parse.js.map +1 -1
  252. package/dist/ai/utils/oauth/anthropic.d.ts.map +1 -1
  253. package/dist/ai/utils/oauth/anthropic.js +110 -65
  254. package/dist/ai/utils/oauth/anthropic.js.map +1 -1
  255. package/dist/ai/utils/oauth/github-copilot.d.ts +8 -16
  256. package/dist/ai/utils/oauth/github-copilot.d.ts.map +1 -1
  257. package/dist/ai/utils/oauth/github-copilot.js +218 -227
  258. package/dist/ai/utils/oauth/github-copilot.js.map +1 -1
  259. package/dist/ai/utils/oauth/openai-codex.d.ts +4 -2
  260. package/dist/ai/utils/oauth/openai-codex.d.ts.map +1 -1
  261. package/dist/ai/utils/oauth/openai-codex.js +221 -236
  262. package/dist/ai/utils/oauth/openai-codex.js.map +1 -1
  263. package/dist/ai/utils/oauth/pkce.d.ts +6 -5
  264. package/dist/ai/utils/oauth/pkce.d.ts.map +1 -1
  265. package/dist/ai/utils/oauth/pkce.js +24 -21
  266. package/dist/ai/utils/oauth/pkce.js.map +1 -1
  267. package/dist/ai/utils/oauth/types.d.ts +31 -12
  268. package/dist/ai/utils/oauth/types.d.ts.map +1 -1
  269. package/dist/ai/utils/oauth/types.js +10 -1
  270. package/dist/ai/utils/oauth/types.js.map +1 -1
  271. package/dist/ai/utils/overflow.d.ts.map +1 -1
  272. package/dist/ai/utils/overflow.js +49 -21
  273. package/dist/ai/utils/overflow.js.map +1 -1
  274. package/dist/ai/utils/provider-adapter.js +9 -0
  275. package/dist/ai/utils/provider-adapter.js.map +1 -1
  276. package/dist/ai/utils/provider-client-builder.js +1 -1
  277. package/dist/ai/utils/provider-client-builder.js.map +1 -1
  278. package/dist/ai/utils/provider-errors.js +2 -0
  279. package/dist/ai/utils/provider-errors.js.map +1 -1
  280. package/dist/ai/utils/sanitize-unicode.d.ts +0 -20
  281. package/dist/ai/utils/sanitize-unicode.d.ts.map +1 -1
  282. package/dist/ai/utils/sanitize-unicode.js +35 -17
  283. package/dist/ai/utils/sanitize-unicode.js.map +1 -1
  284. package/dist/ai/utils/stream-event-helper.js +3 -0
  285. package/dist/ai/utils/stream-event-helper.js.map +1 -1
  286. package/dist/ai/utils/stream-handler-types.js +5 -0
  287. package/dist/ai/utils/stream-handler-types.js.map +1 -1
  288. package/dist/ai/utils/streaming-state-manager.js +4 -2
  289. package/dist/ai/utils/streaming-state-manager.js.map +1 -1
  290. package/dist/ai/utils/typebox-helpers.d.ts +6 -4
  291. package/dist/ai/utils/typebox-helpers.d.ts.map +1 -1
  292. package/dist/ai/utils/typebox-helpers.js +25 -7
  293. package/dist/ai/utils/typebox-helpers.js.map +1 -1
  294. package/dist/ai/utils/validation.d.ts.map +1 -1
  295. package/dist/ai/utils/validation.js +67 -34
  296. package/dist/ai/utils/validation.js.map +1 -1
  297. package/dist/ai.d.ts +4 -0
  298. package/dist/ai.d.ts.map +1 -1
  299. package/dist/ai.js +4 -0
  300. package/dist/ai.js.map +1 -1
  301. package/dist/cli.d.ts +3 -0
  302. package/dist/cli.d.ts.map +1 -0
  303. package/dist/cli.js +3 -0
  304. package/dist/cli.js.map +1 -0
  305. package/dist/index.d.ts +1 -0
  306. package/dist/index.d.ts.map +1 -1
  307. package/dist/index.js +1 -0
  308. package/dist/index.js.map +1 -1
  309. package/dist/mcp/client-pool.js +3 -2
  310. package/dist/mcp/client-pool.js.map +1 -1
  311. package/dist/mcp/client.js +19 -6
  312. package/dist/mcp/client.js.map +1 -1
  313. package/dist/mcp/config.d.ts +6 -6
  314. package/dist/mcp/config.js +17 -17
  315. package/dist/mcp/config.js.map +1 -1
  316. package/dist/mcp/errors.js +8 -0
  317. package/dist/mcp/errors.js.map +1 -1
  318. package/dist/mcp/index.d.ts +5 -5
  319. package/dist/mcp/index.js +5 -5
  320. package/dist/mcp/schema-converter.d.ts +1 -1
  321. package/dist/mcp/schema-converter.js +1 -1
  322. package/dist/mcp/server.d.ts +4 -4
  323. package/dist/mcp/server.js +12 -7
  324. package/dist/mcp/server.js.map +1 -1
  325. package/dist/mcp/tool-factory.d.ts +2 -2
  326. package/dist/mcp/tool-factory.js +2 -2
  327. package/dist/mcp.d.ts +0 -4
  328. package/dist/mcp.d.ts.map +1 -1
  329. package/dist/mcp.js +0 -4
  330. package/dist/mcp.js.map +1 -1
  331. package/dist/observability.d.ts +2 -0
  332. package/dist/observability.d.ts.map +1 -0
  333. package/dist/observability.js +2 -0
  334. package/dist/observability.js.map +1 -0
  335. package/dist/tui/autocomplete.d.ts +14 -18
  336. package/dist/tui/autocomplete.d.ts.map +1 -1
  337. package/dist/tui/autocomplete.js +290 -402
  338. package/dist/tui/autocomplete.js.map +1 -1
  339. package/dist/tui/components/box.d.ts +1 -6
  340. package/dist/tui/components/box.d.ts.map +1 -1
  341. package/dist/tui/components/box.js +98 -67
  342. package/dist/tui/components/box.js.map +1 -1
  343. package/dist/tui/components/cancellable-loader.d.ts +6 -3
  344. package/dist/tui/components/cancellable-loader.d.ts.map +1 -1
  345. package/dist/tui/components/cancellable-loader.js +8 -9
  346. package/dist/tui/components/cancellable-loader.js.map +1 -1
  347. package/dist/tui/components/editor.d.ts +18 -0
  348. package/dist/tui/components/editor.d.ts.map +1 -1
  349. package/dist/tui/components/editor.js +356 -354
  350. package/dist/tui/components/editor.js.map +1 -1
  351. package/dist/tui/components/image.d.ts +2 -0
  352. package/dist/tui/components/image.d.ts.map +1 -1
  353. package/dist/tui/components/image.js +79 -37
  354. package/dist/tui/components/image.js.map +1 -1
  355. package/dist/tui/components/input.d.ts +4 -8
  356. package/dist/tui/components/input.d.ts.map +1 -1
  357. package/dist/tui/components/input.js +236 -232
  358. package/dist/tui/components/input.js.map +1 -1
  359. package/dist/tui/components/loader.d.ts +5 -5
  360. package/dist/tui/components/loader.d.ts.map +1 -1
  361. package/dist/tui/components/loader.js +22 -19
  362. package/dist/tui/components/loader.js.map +1 -1
  363. package/dist/tui/components/markdown.d.ts +2 -32
  364. package/dist/tui/components/markdown.d.ts.map +1 -1
  365. package/dist/tui/components/markdown.js +338 -357
  366. package/dist/tui/components/markdown.js.map +1 -1
  367. package/dist/tui/components/select-list.d.ts +1 -0
  368. package/dist/tui/components/select-list.d.ts.map +1 -1
  369. package/dist/tui/components/select-list.js +83 -82
  370. package/dist/tui/components/select-list.js.map +1 -1
  371. package/dist/tui/components/settings-list.d.ts +10 -10
  372. package/dist/tui/components/settings-list.d.ts.map +1 -1
  373. package/dist/tui/components/settings-list.js +48 -40
  374. package/dist/tui/components/settings-list.js.map +1 -1
  375. package/dist/tui/components/spacer.d.ts +1 -0
  376. package/dist/tui/components/spacer.d.ts.map +1 -1
  377. package/dist/tui/components/spacer.js +20 -5
  378. package/dist/tui/components/spacer.js.map +1 -1
  379. package/dist/tui/components/text.d.ts.map +1 -1
  380. package/dist/tui/components/text.js +47 -20
  381. package/dist/tui/components/text.js.map +1 -1
  382. package/dist/tui/components/truncated-text.d.ts +8 -4
  383. package/dist/tui/components/truncated-text.d.ts.map +1 -1
  384. package/dist/tui/components/truncated-text.js +15 -12
  385. package/dist/tui/components/truncated-text.js.map +1 -1
  386. package/dist/tui/editor-component.d.ts +87 -23
  387. package/dist/tui/editor-component.d.ts.map +1 -1
  388. package/dist/tui/fuzzy.d.ts.map +1 -1
  389. package/dist/tui/fuzzy.js +101 -50
  390. package/dist/tui/fuzzy.js.map +1 -1
  391. package/dist/tui/keybindings.d.ts +3 -3
  392. package/dist/tui/keybindings.d.ts.map +1 -1
  393. package/dist/tui/keybindings.js +137 -111
  394. package/dist/tui/keybindings.js.map +1 -1
  395. package/dist/tui/keys.d.ts +46 -43
  396. package/dist/tui/keys.d.ts.map +1 -1
  397. package/dist/tui/keys.js +493 -411
  398. package/dist/tui/keys.js.map +1 -1
  399. package/dist/tui/stdin-buffer.d.ts.map +1 -1
  400. package/dist/tui/stdin-buffer.js +162 -159
  401. package/dist/tui/stdin-buffer.js.map +1 -1
  402. package/dist/tui/terminal-image.d.ts +10 -5
  403. package/dist/tui/terminal-image.d.ts.map +1 -1
  404. package/dist/tui/terminal-image.js +53 -51
  405. package/dist/tui/terminal-image.js.map +1 -1
  406. package/dist/tui/terminal.d.ts +4 -27
  407. package/dist/tui/terminal.d.ts.map +1 -1
  408. package/dist/tui/terminal.js +123 -121
  409. package/dist/tui/terminal.js.map +1 -1
  410. package/dist/tui/tui.d.ts +14 -1
  411. package/dist/tui/tui.d.ts.map +1 -1
  412. package/dist/tui/tui.js +185 -145
  413. package/dist/tui/tui.js.map +1 -1
  414. package/dist/tui/utils.d.ts.map +1 -1
  415. package/dist/tui/utils.js +235 -216
  416. package/dist/tui/utils.js.map +1 -1
  417. package/dist/tui.d.ts +4 -0
  418. package/dist/tui.d.ts.map +1 -1
  419. package/dist/tui.js +4 -0
  420. package/dist/tui.js.map +1 -1
  421. package/package.json +23 -43
  422. package/LICENSE.md +0 -22
  423. package/dist/agent/tools/task-types.d.ts +0 -74
  424. package/dist/agent/tools/task-types.d.ts.map +0 -1
  425. package/dist/agent/tools/task-types.js +0 -8
  426. package/dist/agent/tools/task-types.js.map +0 -1
  427. package/dist/agent/tools/task.d.ts +0 -84
  428. package/dist/agent/tools/task.d.ts.map +0 -1
  429. package/dist/agent/tools/task.js +0 -184
  430. package/dist/agent/tools/task.js.map +0 -1
  431. package/dist/memory/embedder/base.d.ts +0 -41
  432. package/dist/memory/embedder/base.d.ts.map +0 -1
  433. package/dist/memory/embedder/base.js +0 -10
  434. package/dist/memory/embedder/base.js.map +0 -1
  435. package/dist/memory/embedder/index.d.ts +0 -8
  436. package/dist/memory/embedder/index.d.ts.map +0 -1
  437. package/dist/memory/embedder/index.js +0 -6
  438. package/dist/memory/embedder/index.js.map +0 -1
  439. package/dist/memory/embedder/openai.d.ts +0 -35
  440. package/dist/memory/embedder/openai.d.ts.map +0 -1
  441. package/dist/memory/embedder/openai.js +0 -103
  442. package/dist/memory/embedder/openai.js.map +0 -1
  443. package/dist/memory/index.d.ts +0 -33
  444. package/dist/memory/index.d.ts.map +0 -1
  445. package/dist/memory/index.js +0 -31
  446. package/dist/memory/index.js.map +0 -1
  447. package/dist/memory/memory.d.ts +0 -126
  448. package/dist/memory/memory.d.ts.map +0 -1
  449. package/dist/memory/memory.js +0 -280
  450. package/dist/memory/memory.js.map +0 -1
  451. package/dist/memory/processors/base.d.ts +0 -42
  452. package/dist/memory/processors/base.d.ts.map +0 -1
  453. package/dist/memory/processors/base.js +0 -6
  454. package/dist/memory/processors/base.js.map +0 -1
  455. package/dist/memory/processors/index.d.ts +0 -16
  456. package/dist/memory/processors/index.d.ts.map +0 -1
  457. package/dist/memory/processors/index.js +0 -18
  458. package/dist/memory/processors/index.js.map +0 -1
  459. package/dist/memory/processors/message-history.d.ts +0 -35
  460. package/dist/memory/processors/message-history.d.ts.map +0 -1
  461. package/dist/memory/processors/message-history.js +0 -51
  462. package/dist/memory/processors/message-history.js.map +0 -1
  463. package/dist/memory/processors/observational-memory/index.d.ts +0 -82
  464. package/dist/memory/processors/observational-memory/index.d.ts.map +0 -1
  465. package/dist/memory/processors/observational-memory/index.js +0 -234
  466. package/dist/memory/processors/observational-memory/index.js.map +0 -1
  467. package/dist/memory/processors/observational-memory/observer-agent.d.ts +0 -64
  468. package/dist/memory/processors/observational-memory/observer-agent.d.ts.map +0 -1
  469. package/dist/memory/processors/observational-memory/observer-agent.js +0 -362
  470. package/dist/memory/processors/observational-memory/observer-agent.js.map +0 -1
  471. package/dist/memory/processors/observational-memory/reflector-agent.d.ts +0 -38
  472. package/dist/memory/processors/observational-memory/reflector-agent.d.ts.map +0 -1
  473. package/dist/memory/processors/observational-memory/reflector-agent.js +0 -213
  474. package/dist/memory/processors/observational-memory/reflector-agent.js.map +0 -1
  475. package/dist/memory/processors/observational-memory/token-counter.d.ts +0 -35
  476. package/dist/memory/processors/observational-memory/token-counter.d.ts.map +0 -1
  477. package/dist/memory/processors/observational-memory/token-counter.js +0 -90
  478. package/dist/memory/processors/observational-memory/token-counter.js.map +0 -1
  479. package/dist/memory/processors/semantic-recall.d.ts +0 -55
  480. package/dist/memory/processors/semantic-recall.d.ts.map +0 -1
  481. package/dist/memory/processors/semantic-recall.js +0 -143
  482. package/dist/memory/processors/semantic-recall.js.map +0 -1
  483. package/dist/memory/processors/working-memory.d.ts +0 -41
  484. package/dist/memory/processors/working-memory.d.ts.map +0 -1
  485. package/dist/memory/processors/working-memory.js +0 -82
  486. package/dist/memory/processors/working-memory.js.map +0 -1
  487. package/dist/memory/storage/base.d.ts +0 -288
  488. package/dist/memory/storage/base.d.ts.map +0 -1
  489. package/dist/memory/storage/base.js +0 -211
  490. package/dist/memory/storage/base.js.map +0 -1
  491. package/dist/memory/storage/index.d.ts +0 -9
  492. package/dist/memory/storage/index.d.ts.map +0 -1
  493. package/dist/memory/storage/index.js +0 -7
  494. package/dist/memory/storage/index.js.map +0 -1
  495. package/dist/memory/storage/inmemory.d.ts +0 -93
  496. package/dist/memory/storage/inmemory.d.ts.map +0 -1
  497. package/dist/memory/storage/inmemory.js +0 -646
  498. package/dist/memory/storage/inmemory.js.map +0 -1
  499. package/dist/memory/tools/working-memory.d.ts +0 -100
  500. package/dist/memory/tools/working-memory.d.ts.map +0 -1
  501. package/dist/memory/tools/working-memory.js +0 -237
  502. package/dist/memory/tools/working-memory.js.map +0 -1
  503. package/dist/memory/types.d.ts +0 -386
  504. package/dist/memory/types.d.ts.map +0 -1
  505. package/dist/memory/types.js +0 -58
  506. package/dist/memory/types.js.map +0 -1
  507. package/dist/memory/vector/base.d.ts +0 -145
  508. package/dist/memory/vector/base.d.ts.map +0 -1
  509. package/dist/memory/vector/base.js +0 -83
  510. package/dist/memory/vector/base.js.map +0 -1
  511. package/dist/memory/vector/index.d.ts +0 -8
  512. package/dist/memory/vector/index.d.ts.map +0 -1
  513. package/dist/memory/vector/index.js +0 -7
  514. package/dist/memory/vector/index.js.map +0 -1
  515. package/dist/memory/vector/inmemory.d.ts +0 -47
  516. package/dist/memory/vector/inmemory.d.ts.map +0 -1
  517. package/dist/memory/vector/inmemory.js +0 -234
  518. package/dist/memory/vector/inmemory.js.map +0 -1
@@ -0,0 +1,219 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { cleanupWorktrees } from "./worktree.js";
4
+ export function assertTeamDirWithinTeamsRoot(teamsRootDir, teamDir) {
5
+ const teamsRootAbs = path.resolve(teamsRootDir);
6
+ const teamDirAbs = path.resolve(teamDir);
7
+ const rel = path.relative(teamsRootAbs, teamDirAbs);
8
+ // rel === "" => same path (would delete the whole root)
9
+ // rel starts with ".." or is absolute => outside root
10
+ if (!rel || rel === "" || rel.startsWith("..") || path.isAbsolute(rel)) {
11
+ throw new Error(`Refusing to operate on path outside teams root. teamsRootDir=${teamsRootAbs} teamDir=${teamDirAbs}`);
12
+ }
13
+ return { teamsRootAbs, teamDirAbs };
14
+ }
15
+ /**
16
+ * Recursively delete the given teamDir, including proper git worktree + branch removal.
17
+ *
18
+ * Steps:
19
+ * 1. Remove git worktrees and branches via `cleanupWorktrees`
20
+ * 2. Delete the team directory recursively
21
+ *
22
+ * Idempotent — safe to call multiple times.
23
+ */
24
+ export async function cleanupTeamDir(teamsRootDir, teamDir, opts) {
25
+ const { teamDirAbs } = assertTeamDirWithinTeamsRoot(teamsRootDir, teamDir);
26
+ const warnings = [];
27
+ // Infer teamId from directory name if not provided.
28
+ const teamId = opts?.teamId ?? path.basename(teamDirAbs);
29
+ // 1. Clean up git worktrees and branches before deleting the directory.
30
+ let worktreeResult = { removedWorktrees: [], removedBranches: [], warnings: [] };
31
+ try {
32
+ worktreeResult = await cleanupWorktrees({ teamDir: teamDirAbs, teamId, repoCwd: opts?.repoCwd });
33
+ warnings.push(...worktreeResult.warnings);
34
+ }
35
+ catch (err) {
36
+ const msg = err instanceof Error ? err.message : String(err);
37
+ warnings.push(`Worktree cleanup failed (non-fatal): ${msg}`);
38
+ }
39
+ // 2. Delete the team directory.
40
+ await fs.promises.rm(teamDirAbs, { recursive: true, force: true });
41
+ return { teamDir: teamDirAbs, worktreeResult, warnings };
42
+ }
43
+ /**
44
+ * Garbage-collect stale team directories that have no active workers and are older
45
+ * than the given threshold.
46
+ *
47
+ * A team directory is considered stale when:
48
+ * - Its config.json `createdAt` (or directory mtime) is older than `maxAgeMs`
49
+ * - It has no in_progress tasks
50
+ * - It has no online members
51
+ *
52
+ * Returns a summary of what was cleaned up.
53
+ */
54
+ export async function gcStaleTeamDirs(opts) {
55
+ const { teamsRootDir, maxAgeMs, repoCwd, dryRun, excludeTeamIds } = opts;
56
+ const teamsRootAbs = path.resolve(teamsRootDir);
57
+ const removed = [];
58
+ const skipped = [];
59
+ const warnings = [];
60
+ let entries;
61
+ try {
62
+ entries = await fs.promises.readdir(teamsRootAbs);
63
+ }
64
+ catch {
65
+ return { scanned: 0, removed, skipped, warnings: ["teams root directory not found"] };
66
+ }
67
+ // Filter out non-team entries (like _styles, _hooks).
68
+ const teamEntries = entries.filter((e) => !e.startsWith("_"));
69
+ const now = Date.now();
70
+ for (const teamId of teamEntries) {
71
+ if (excludeTeamIds?.has(teamId)) {
72
+ skipped.push({ teamId, reason: "excluded" });
73
+ continue;
74
+ }
75
+ const teamDir = path.join(teamsRootAbs, teamId);
76
+ let stat;
77
+ try {
78
+ stat = await fs.promises.stat(teamDir);
79
+ }
80
+ catch {
81
+ continue;
82
+ }
83
+ if (!stat.isDirectory())
84
+ continue;
85
+ // Check age: prefer config.json createdAt, fall back to directory mtime.
86
+ let ageMs;
87
+ try {
88
+ const configPath = path.join(teamDir, "config.json");
89
+ const configRaw = await fs.promises.readFile(configPath, "utf8");
90
+ const config = JSON.parse(configRaw);
91
+ const createdAt = typeof config === "object" && config !== null && "createdAt" in config
92
+ ? config.createdAt
93
+ : undefined;
94
+ if (typeof createdAt === "string") {
95
+ const ts = Date.parse(createdAt);
96
+ ageMs = Number.isFinite(ts) ? now - ts : now - stat.mtimeMs;
97
+ }
98
+ else {
99
+ ageMs = now - stat.mtimeMs;
100
+ }
101
+ }
102
+ catch {
103
+ ageMs = now - stat.mtimeMs;
104
+ }
105
+ if (ageMs < maxAgeMs) {
106
+ skipped.push({ teamId, reason: "too recent" });
107
+ continue;
108
+ }
109
+ // Check for active work: in_progress tasks, online workers, or live attach claims.
110
+ let hasActiveWork = false;
111
+ try {
112
+ const configPath = path.join(teamDir, "config.json");
113
+ const configRaw = await fs.promises.readFile(configPath, "utf8");
114
+ const config = JSON.parse(configRaw);
115
+ if (typeof config === "object" && config !== null) {
116
+ const members = config.members;
117
+ if (Array.isArray(members)) {
118
+ for (const m of members) {
119
+ if (typeof m !== "object" || m === null)
120
+ continue;
121
+ const rec = m;
122
+ // Ignore the lead — it stays "online" forever and is not a signal of activity.
123
+ if (rec.role === "lead")
124
+ continue;
125
+ if (rec.status === "online") {
126
+ hasActiveWork = true;
127
+ break;
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
133
+ catch {
134
+ // No config — probably safe to remove.
135
+ }
136
+ // Check for a live attach claim (another session is using this team).
137
+ if (!hasActiveWork) {
138
+ try {
139
+ const claimPath = path.join(teamDir, ".attach-claim.json");
140
+ const claimRaw = await fs.promises.readFile(claimPath, "utf8");
141
+ const claim = JSON.parse(claimRaw);
142
+ if (typeof claim === "object" && claim !== null) {
143
+ const heartbeatAt = claim.heartbeatAt;
144
+ if (typeof heartbeatAt === "string") {
145
+ const hbTs = Date.parse(heartbeatAt);
146
+ // Consider claims fresh if heartbeat is within 5 minutes.
147
+ const claimFreshnessMs = 5 * 60 * 1000;
148
+ if (Number.isFinite(hbTs) && now - hbTs < claimFreshnessMs) {
149
+ hasActiveWork = true;
150
+ }
151
+ }
152
+ }
153
+ }
154
+ catch {
155
+ // No claim file or invalid — not actively attached.
156
+ }
157
+ }
158
+ if (!hasActiveWork) {
159
+ // Check task files for in_progress tasks.
160
+ // Tasks live at tasks/<taskListId>/<id>.json — scan all subdirectories.
161
+ try {
162
+ const tasksDir = path.join(teamDir, "tasks");
163
+ const taskListDirs = await fs.promises.readdir(tasksDir);
164
+ for (const listDir of taskListDirs) {
165
+ if (hasActiveWork)
166
+ break;
167
+ const listPath = path.join(tasksDir, listDir);
168
+ let listStat;
169
+ try {
170
+ listStat = await fs.promises.stat(listPath);
171
+ }
172
+ catch {
173
+ continue;
174
+ }
175
+ if (!listStat.isDirectory())
176
+ continue;
177
+ const taskFiles = await fs.promises.readdir(listPath);
178
+ for (const tf of taskFiles) {
179
+ if (!tf.endsWith(".json"))
180
+ continue;
181
+ try {
182
+ const raw = await fs.promises.readFile(path.join(listPath, tf), "utf8");
183
+ const parsed = JSON.parse(raw);
184
+ if (typeof parsed === "object" && parsed !== null && parsed.status === "in_progress") {
185
+ hasActiveWork = true;
186
+ break;
187
+ }
188
+ }
189
+ catch {
190
+ // ignore individual task read errors
191
+ }
192
+ }
193
+ }
194
+ }
195
+ catch {
196
+ // No tasks dir — fine.
197
+ }
198
+ }
199
+ if (hasActiveWork) {
200
+ skipped.push({ teamId, reason: "has active work" });
201
+ continue;
202
+ }
203
+ if (dryRun) {
204
+ removed.push(teamId);
205
+ continue;
206
+ }
207
+ try {
208
+ const result = await cleanupTeamDir(teamsRootAbs, teamDir, { teamId, repoCwd });
209
+ warnings.push(...result.warnings);
210
+ removed.push(teamId);
211
+ }
212
+ catch (err) {
213
+ const msg = err instanceof Error ? err.message : String(err);
214
+ warnings.push(`Failed to remove ${teamId}: ${msg}`);
215
+ }
216
+ }
217
+ return { scanned: teamEntries.length, removed, skipped, warnings };
218
+ }
219
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../../src/agent/tools/teams/cleanup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface LockOptions {
2
+ /** How long to wait to acquire the lock before failing. */
3
+ timeoutMs?: number;
4
+ /** If lock file is older than this, consider it stale and remove it. */
5
+ staleMs?: number;
6
+ /** Poll interval while waiting for lock. */
7
+ pollMs?: number;
8
+ /** Optional label to help debugging (written into lock file). */
9
+ label?: string;
10
+ }
11
+ export declare function withLock<T>(lockFilePath: string, fn: () => Promise<T>, opts?: LockOptions): Promise<T>;
12
+ //# sourceMappingURL=fs-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-lock.d.ts","sourceRoot":"","sources":["../../../../src/agent/tools/teams/fs-lock.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC3B,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAiEhH"}
@@ -0,0 +1,74 @@
1
+ import * as fs from "node:fs";
2
+ function sleep(ms) {
3
+ return new Promise((r) => setTimeout(r, ms));
4
+ }
5
+ function isErrnoException(err) {
6
+ return typeof err === "object" && err !== null && "code" in err;
7
+ }
8
+ export async function withLock(lockFilePath, fn, opts = {}) {
9
+ const timeoutMs = opts.timeoutMs ?? 10_000;
10
+ const staleMs = opts.staleMs ?? 60_000;
11
+ const basePollMs = opts.pollMs ?? 50;
12
+ const maxPollMs = Math.max(basePollMs, 1_000);
13
+ const start = Date.now();
14
+ let fd = null;
15
+ let attempt = 0;
16
+ while (fd === null) {
17
+ try {
18
+ fd = fs.openSync(lockFilePath, "wx");
19
+ const payload = {
20
+ pid: process.pid,
21
+ createdAt: new Date().toISOString(),
22
+ label: opts.label,
23
+ };
24
+ fs.writeFileSync(fd, JSON.stringify(payload));
25
+ }
26
+ catch (err) {
27
+ if (!isErrnoException(err) || err.code !== "EEXIST")
28
+ throw err;
29
+ // Stale lock handling
30
+ try {
31
+ const st = fs.statSync(lockFilePath);
32
+ const age = Date.now() - st.mtimeMs;
33
+ if (age > staleMs) {
34
+ fs.unlinkSync(lockFilePath);
35
+ attempt = 0;
36
+ continue;
37
+ }
38
+ }
39
+ catch {
40
+ // ignore: stat/unlink failures fall through to wait
41
+ }
42
+ const elapsedMs = Date.now() - start;
43
+ if (elapsedMs > timeoutMs) {
44
+ throw new Error(`Timeout acquiring lock: ${lockFilePath}`);
45
+ }
46
+ attempt += 1;
47
+ const expBackoff = Math.min(maxPollMs, basePollMs * 2 ** Math.min(attempt, 6));
48
+ const jitterFactor = 0.5 + Math.random(); // [0.5, 1.5)
49
+ const jitteredBackoff = Math.min(maxPollMs, Math.round(expBackoff * jitterFactor));
50
+ const remainingMs = timeoutMs - elapsedMs;
51
+ const sleepMs = Math.max(1, Math.min(remainingMs, jitteredBackoff));
52
+ await sleep(sleepMs);
53
+ }
54
+ }
55
+ try {
56
+ return await fn();
57
+ }
58
+ finally {
59
+ try {
60
+ if (fd !== null)
61
+ fs.closeSync(fd);
62
+ }
63
+ catch {
64
+ // ignore
65
+ }
66
+ try {
67
+ fs.unlinkSync(lockFilePath);
68
+ }
69
+ catch {
70
+ // ignore
71
+ }
72
+ }
73
+ }
74
+ //# sourceMappingURL=fs-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-lock.js","sourceRoot":"","sources":["../../../../src/agent/tools/teams/fs-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export * from "./activity-tracker.js";
2
+ export * from "./cleanup.js";
3
+ export * from "./fs-lock.js";
4
+ export * from "./mailbox.js";
5
+ export * from "./model-policy.js";
6
+ export * from "./names.js";
7
+ export * from "./protocol.js";
8
+ export * from "./task-store.js";
9
+ export * from "./team-attach-claim.js";
10
+ export * from "./team-config.js";
11
+ export * from "./worktree.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/agent/tools/teams/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,12 @@
1
+ export * from "./activity-tracker.js";
2
+ export * from "./cleanup.js";
3
+ export * from "./fs-lock.js";
4
+ export * from "./mailbox.js";
5
+ export * from "./model-policy.js";
6
+ export * from "./names.js";
7
+ export * from "./protocol.js";
8
+ export * from "./task-store.js";
9
+ export * from "./team-attach-claim.js";
10
+ export * from "./team-config.js";
11
+ export * from "./worktree.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/agent/tools/teams/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface MailboxMessage {
2
+ from: string;
3
+ text: string;
4
+ timestamp: string;
5
+ read: boolean;
6
+ color?: string;
7
+ /** When true, the recipient should deliver this message as a steering interrupt
8
+ * even if the agent is mid-turn, rather than queueing for the next idle window. */
9
+ urgent?: boolean;
10
+ }
11
+ export declare function getInboxPath(teamDir: string, namespace: string, agentName: string): string;
12
+ /** Append a message to an agent's inbox. */
13
+ export declare function writeToMailbox(teamDir: string, namespace: string, recipient: string, msg: Omit<MailboxMessage, "read"> & {
14
+ read?: boolean;
15
+ }): Promise<void>;
16
+ /**
17
+ * Read unread messages and mark them as read in a single locked transaction.
18
+ * This is the worker/leader poll primitive.
19
+ */
20
+ export declare function popUnreadMessages(teamDir: string, namespace: string, agentName: string): Promise<MailboxMessage[]>;
21
+ //# sourceMappingURL=mailbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox.d.ts","sourceRoot":"","sources":["../../../../src/agent/tools/teams/mailbox.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;wFACoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAMD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1F;AA0CD,4CAA4C;AAC5C,wBAAsB,cAAc,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GACpD,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAoCxH"}
@@ -0,0 +1,106 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { withLock } from "./fs-lock.js";
4
+ import { sanitizeName } from "./names.js";
5
+ function inboxDir(teamDir, namespace) {
6
+ return path.join(teamDir, "mailboxes", sanitizeName(namespace), "inboxes");
7
+ }
8
+ export function getInboxPath(teamDir, namespace, agentName) {
9
+ return path.join(inboxDir(teamDir, namespace), `${sanitizeName(agentName)}.json`);
10
+ }
11
+ async function ensureDir(p) {
12
+ await fs.promises.mkdir(p, { recursive: true });
13
+ }
14
+ function isRecord(v) {
15
+ return typeof v === "object" && v !== null;
16
+ }
17
+ function isLockTimeoutError(err) {
18
+ return err instanceof Error && err.message.startsWith("Timeout acquiring lock:");
19
+ }
20
+ function coerceMailboxMessage(v) {
21
+ if (!isRecord(v))
22
+ return null;
23
+ if (typeof v.from !== "string")
24
+ return null;
25
+ if (typeof v.text !== "string")
26
+ return null;
27
+ if (typeof v.timestamp !== "string")
28
+ return null;
29
+ const read = typeof v.read === "boolean" ? v.read : false;
30
+ const color = typeof v.color === "string" ? v.color : undefined;
31
+ const urgent = typeof v.urgent === "boolean" ? v.urgent : undefined;
32
+ return { from: v.from, text: v.text, timestamp: v.timestamp, read, color, urgent };
33
+ }
34
+ async function readJsonArray(file) {
35
+ try {
36
+ const raw = await fs.promises.readFile(file, "utf8");
37
+ const parsed = JSON.parse(raw);
38
+ return Array.isArray(parsed) ? parsed : [];
39
+ }
40
+ catch {
41
+ return [];
42
+ }
43
+ }
44
+ async function writeJsonAtomic(file, data) {
45
+ await ensureDir(path.dirname(file));
46
+ const tmp = `${file}.tmp.${process.pid}.${Date.now()}`;
47
+ await fs.promises.writeFile(tmp, JSON.stringify(data, null, 2) + "\n", "utf8");
48
+ await fs.promises.rename(tmp, file);
49
+ }
50
+ /** Append a message to an agent's inbox. */
51
+ export async function writeToMailbox(teamDir, namespace, recipient, msg) {
52
+ const inboxPath = getInboxPath(teamDir, namespace, recipient);
53
+ const lockPath = `${inboxPath}.lock`;
54
+ await ensureDir(path.dirname(inboxPath));
55
+ await withLock(lockPath, async () => {
56
+ const arr = await readJsonArray(inboxPath);
57
+ const m = {
58
+ from: msg.from,
59
+ text: msg.text,
60
+ timestamp: msg.timestamp,
61
+ read: msg.read ?? false,
62
+ color: msg.color,
63
+ ...(msg.urgent === true ? { urgent: true } : {}),
64
+ };
65
+ arr.push(m);
66
+ await writeJsonAtomic(inboxPath, arr);
67
+ }, { label: `mailbox:write:${namespace}:${recipient}` });
68
+ }
69
+ /**
70
+ * Read unread messages and mark them as read in a single locked transaction.
71
+ * This is the worker/leader poll primitive.
72
+ */
73
+ export async function popUnreadMessages(teamDir, namespace, agentName) {
74
+ const inboxPath = getInboxPath(teamDir, namespace, agentName);
75
+ const lockPath = `${inboxPath}.lock`;
76
+ await ensureDir(path.dirname(inboxPath));
77
+ try {
78
+ return await withLock(lockPath, async () => {
79
+ const arr = (await readJsonArray(inboxPath))
80
+ .map(coerceMailboxMessage)
81
+ .filter((m) => m !== null);
82
+ if (arr.length === 0)
83
+ return [];
84
+ const unread = [];
85
+ const updated = arr.map((m) => {
86
+ if (!m.read) {
87
+ const next = { ...m, read: true };
88
+ unread.push(next);
89
+ return next;
90
+ }
91
+ return m;
92
+ });
93
+ if (unread.length)
94
+ await writeJsonAtomic(inboxPath, updated);
95
+ return unread;
96
+ }, { label: `mailbox:pop:${namespace}:${agentName}` });
97
+ }
98
+ catch (err) {
99
+ // In practice this can happen if a previous process crashed and left a non-stale
100
+ // lockfile behind. Treat as transient and try again on the next poll tick.
101
+ if (isLockTimeoutError(err))
102
+ return [];
103
+ throw err;
104
+ }
105
+ }
106
+ //# sourceMappingURL=mailbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../../../src/agent/tools/teams/mailbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export declare function isDeprecatedTeammateModelId(modelId: string): boolean;
2
+ export type TeammateModelSource = "override" | "inherit_leader" | "default";
3
+ export interface ResolvedTeammateModel {
4
+ source: TeammateModelSource;
5
+ provider?: string;
6
+ modelId?: string;
7
+ warnings: string[];
8
+ }
9
+ export type ResolveTeammateModelResult = {
10
+ ok: true;
11
+ value: ResolvedTeammateModel;
12
+ } | {
13
+ ok: false;
14
+ error: string;
15
+ reason: "invalid_override" | "deprecated_override";
16
+ };
17
+ export declare function formatProviderModel(provider: string | undefined, modelId: string | undefined): string | null;
18
+ export declare function resolveTeammateModelSelection(input: {
19
+ modelOverride?: string;
20
+ leaderProvider?: string;
21
+ leaderModelId?: string;
22
+ }): ResolveTeammateModelResult;
23
+ //# sourceMappingURL=model-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-policy.d.ts","sourceRoot":"","sources":["../../../../src/agent/tools/teams/model-policy.ts"],"names":[],"mappings":"AAoBA,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAUpE;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,0BAA0B,GACnC;IACA,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,qBAAqB,CAAC;CAC5B,GACD;IACA,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,kBAAkB,GAAG,qBAAqB,CAAC;CAClD,CAAC;AAEL,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAG5G;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,0BAA0B,CAgF7B"}
@@ -0,0 +1,113 @@
1
+ const SONNET4_DEPRECATED_MARKER = "claude-sonnet-4";
2
+ const SONNET45_ALLOWED_MARKERS = ["claude-sonnet-4-5", "claude-sonnet-4.5"];
3
+ function normalizeModelId(modelId) {
4
+ return modelId.trim().toLowerCase();
5
+ }
6
+ function hasAnyMarker(value, markers) {
7
+ for (const marker of markers) {
8
+ if (value.includes(marker))
9
+ return true;
10
+ }
11
+ return false;
12
+ }
13
+ function trimOrUndefined(value) {
14
+ if (value === undefined)
15
+ return undefined;
16
+ const trimmed = value.trim();
17
+ return trimmed.length > 0 ? trimmed : undefined;
18
+ }
19
+ export function isDeprecatedTeammateModelId(modelId) {
20
+ const normalized = normalizeModelId(modelId);
21
+ if (!normalized)
22
+ return false;
23
+ if (!normalized.includes(SONNET4_DEPRECATED_MARKER))
24
+ return false;
25
+ if (hasAnyMarker(normalized, SONNET45_ALLOWED_MARKERS))
26
+ return false;
27
+ const idx = normalized.indexOf(SONNET4_DEPRECATED_MARKER);
28
+ const next = normalized.at(idx + SONNET4_DEPRECATED_MARKER.length);
29
+ if (!next)
30
+ return true;
31
+ return next === "-" || next === "_" || next === "." || next === ":";
32
+ }
33
+ export function formatProviderModel(provider, modelId) {
34
+ if (!modelId)
35
+ return null;
36
+ return provider ? `${provider}/${modelId}` : modelId;
37
+ }
38
+ export function resolveTeammateModelSelection(input) {
39
+ const override = trimOrUndefined(input.modelOverride);
40
+ if (override) {
41
+ const slashIdx = override.indexOf("/");
42
+ if (slashIdx >= 0) {
43
+ const provider = override.slice(0, slashIdx).trim();
44
+ const id = override.slice(slashIdx + 1).trim();
45
+ if (!provider || !id) {
46
+ return {
47
+ ok: false,
48
+ reason: "invalid_override",
49
+ error: `Invalid model override '${override}'. Expected <provider>/<modelId>.`,
50
+ };
51
+ }
52
+ if (isDeprecatedTeammateModelId(id)) {
53
+ return {
54
+ ok: false,
55
+ reason: "deprecated_override",
56
+ error: `Model override '${override}' is deprecated. Choose a current model id.`,
57
+ };
58
+ }
59
+ return {
60
+ ok: true,
61
+ value: {
62
+ source: "override",
63
+ provider,
64
+ modelId: id,
65
+ warnings: [],
66
+ },
67
+ };
68
+ }
69
+ if (isDeprecatedTeammateModelId(override)) {
70
+ return {
71
+ ok: false,
72
+ reason: "deprecated_override",
73
+ error: `Model override '${override}' is deprecated. Choose a current model id.`,
74
+ };
75
+ }
76
+ const leaderProvider = trimOrUndefined(input.leaderProvider);
77
+ const warnings = [];
78
+ if (!leaderProvider) {
79
+ warnings.push(`Model override '${override}' provided without a provider. ` +
80
+ `Teammate will use its default provider; use <provider>/<modelId> to force one.`);
81
+ }
82
+ return {
83
+ ok: true,
84
+ value: {
85
+ source: "override",
86
+ provider: leaderProvider,
87
+ modelId: override,
88
+ warnings,
89
+ },
90
+ };
91
+ }
92
+ const leaderModelId = trimOrUndefined(input.leaderModelId);
93
+ const leaderProvider = trimOrUndefined(input.leaderProvider);
94
+ if (leaderModelId && !isDeprecatedTeammateModelId(leaderModelId)) {
95
+ return {
96
+ ok: true,
97
+ value: {
98
+ source: "inherit_leader",
99
+ provider: leaderProvider,
100
+ modelId: leaderModelId,
101
+ warnings: [],
102
+ },
103
+ };
104
+ }
105
+ return {
106
+ ok: true,
107
+ value: {
108
+ source: "default",
109
+ warnings: [],
110
+ },
111
+ };
112
+ }
113
+ //# sourceMappingURL=model-policy.js.map