@compilr-dev/cli 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/README.md +30 -12
  2. package/dist/agent.d.ts +74 -1
  3. package/dist/agent.js +259 -76
  4. package/dist/anchors/index.d.ts +9 -0
  5. package/dist/anchors/index.js +9 -0
  6. package/dist/anchors/project-anchors.d.ts +79 -0
  7. package/dist/anchors/project-anchors.js +202 -0
  8. package/dist/commands/handler-types.d.ts +68 -0
  9. package/dist/commands/handler-types.js +8 -0
  10. package/dist/commands/handlers/agent-commands.d.ts +13 -0
  11. package/dist/commands/handlers/agent-commands.js +305 -0
  12. package/dist/commands/handlers/design-commands.d.ts +15 -0
  13. package/dist/commands/handlers/design-commands.js +334 -0
  14. package/dist/commands/handlers/index.d.ts +20 -0
  15. package/dist/commands/handlers/index.js +43 -0
  16. package/dist/commands/handlers/overlay-commands.d.ts +21 -0
  17. package/dist/commands/handlers/overlay-commands.js +287 -0
  18. package/dist/commands/handlers/project-commands.d.ts +11 -0
  19. package/dist/commands/handlers/project-commands.js +167 -0
  20. package/dist/commands/handlers/simple-commands.d.ts +19 -0
  21. package/dist/commands/handlers/simple-commands.js +144 -0
  22. package/dist/commands/index.d.ts +2 -1
  23. package/dist/commands/registry.d.ts +50 -0
  24. package/dist/commands/registry.js +75 -0
  25. package/dist/commands-v2/handlers/context.d.ts +13 -0
  26. package/dist/commands-v2/handlers/context.js +348 -0
  27. package/dist/commands-v2/handlers/core.d.ts +13 -0
  28. package/dist/commands-v2/handlers/core.js +165 -0
  29. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  30. package/dist/commands-v2/handlers/debug.js +159 -0
  31. package/dist/commands-v2/handlers/index.d.ts +12 -0
  32. package/dist/commands-v2/handlers/index.js +24 -0
  33. package/dist/commands-v2/handlers/project.d.ts +22 -0
  34. package/dist/commands-v2/handlers/project.js +814 -0
  35. package/dist/commands-v2/handlers/settings.d.ts +15 -0
  36. package/dist/commands-v2/handlers/settings.js +235 -0
  37. package/dist/commands-v2/index.d.ts +13 -0
  38. package/dist/commands-v2/index.js +15 -0
  39. package/dist/commands-v2/registry.d.ts +37 -0
  40. package/dist/commands-v2/registry.js +80 -0
  41. package/dist/commands-v2/types.d.ts +75 -0
  42. package/dist/commands-v2/types.js +7 -0
  43. package/dist/commands.js +110 -7
  44. package/dist/index.js +288 -29
  45. package/dist/input-handlers/index.d.ts +7 -0
  46. package/dist/input-handlers/index.js +7 -0
  47. package/dist/input-handlers/memory-handler.d.ts +26 -0
  48. package/dist/input-handlers/memory-handler.js +68 -0
  49. package/dist/repl-helpers.d.ts +63 -0
  50. package/dist/repl-helpers.js +318 -0
  51. package/dist/repl-v2.d.ts +155 -0
  52. package/dist/repl-v2.js +774 -0
  53. package/dist/repl.d.ts +32 -4
  54. package/dist/repl.js +250 -977
  55. package/dist/settings/index.d.ts +23 -0
  56. package/dist/settings/index.js +48 -0
  57. package/dist/settings/paths.d.ts +110 -0
  58. package/dist/settings/paths.js +264 -0
  59. package/dist/templates/compilr-md.js +7 -4
  60. package/dist/templates/index.js +3 -4
  61. package/dist/themes/colors.js +3 -1
  62. package/dist/themes/registry.d.ts +5 -36
  63. package/dist/themes/registry.js +11 -95
  64. package/dist/themes/types.d.ts +3 -38
  65. package/dist/themes/types.js +2 -2
  66. package/dist/tools/anchor-tools.d.ts +31 -0
  67. package/dist/tools/anchor-tools.js +255 -0
  68. package/dist/tools/backlog-wrappers.d.ts +54 -0
  69. package/dist/tools/backlog-wrappers.js +338 -0
  70. package/dist/tools/backlog.js +1 -1
  71. package/dist/tools/db-tools.d.ts +65 -0
  72. package/dist/tools/db-tools.js +19 -0
  73. package/dist/tools/document-db.d.ts +43 -0
  74. package/dist/tools/document-db.js +220 -0
  75. package/dist/tools/project-db.d.ts +102 -0
  76. package/dist/tools/project-db.js +370 -0
  77. package/dist/tools/workitem-db.d.ts +103 -0
  78. package/dist/tools/workitem-db.js +549 -0
  79. package/dist/tools.js +13 -3
  80. package/dist/ui/agents-overlay-v2.d.ts +43 -0
  81. package/dist/ui/agents-overlay-v2.js +809 -0
  82. package/dist/ui/agents-overlay.d.ts +5 -5
  83. package/dist/ui/agents-overlay.js +782 -420
  84. package/dist/ui/anchors-overlay.d.ts +12 -0
  85. package/dist/ui/anchors-overlay.js +775 -0
  86. package/dist/ui/arch-type-overlay.d.ts +1 -6
  87. package/dist/ui/arch-type-overlay.js +175 -203
  88. package/dist/ui/ask-user-overlay-v2.d.ts +26 -0
  89. package/dist/ui/ask-user-overlay-v2.js +555 -0
  90. package/dist/ui/ask-user-overlay.d.ts +2 -2
  91. package/dist/ui/ask-user-overlay.js +443 -535
  92. package/dist/ui/ask-user-simple-overlay-v2.d.ts +25 -0
  93. package/dist/ui/ask-user-simple-overlay-v2.js +215 -0
  94. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  95. package/dist/ui/ask-user-simple-overlay.js +182 -209
  96. package/dist/ui/backlog-overlay.d.ts +16 -1
  97. package/dist/ui/backlog-overlay.js +525 -659
  98. package/dist/ui/base/index.d.ts +26 -0
  99. package/dist/ui/base/index.js +33 -0
  100. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  101. package/dist/ui/base/inline-overlay-utils.js +320 -0
  102. package/dist/ui/base/inline-overlay.d.ts +159 -0
  103. package/dist/ui/base/inline-overlay.js +257 -0
  104. package/dist/ui/base/key-utils.d.ts +15 -0
  105. package/dist/ui/base/key-utils.js +30 -0
  106. package/dist/ui/base/overlay-base-v2.d.ts +193 -0
  107. package/dist/ui/base/overlay-base-v2.js +246 -0
  108. package/dist/ui/base/overlay-base.d.ts +156 -0
  109. package/dist/ui/base/overlay-base.js +238 -0
  110. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  111. package/dist/ui/base/overlay-lifecycle.js +159 -0
  112. package/dist/ui/base/overlay-types.d.ts +185 -0
  113. package/dist/ui/base/overlay-types.js +7 -0
  114. package/dist/ui/base/render-utils.d.ts +8 -0
  115. package/dist/ui/base/render-utils.js +11 -0
  116. package/dist/ui/base/screen-stack.d.ts +148 -0
  117. package/dist/ui/base/screen-stack.js +184 -0
  118. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +103 -0
  119. package/dist/ui/base/tabbed-list-overlay-v2.js +317 -0
  120. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  121. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  122. package/dist/ui/commands-overlay-v2.d.ts +33 -0
  123. package/dist/ui/commands-overlay-v2.js +441 -0
  124. package/dist/ui/commands-overlay.d.ts +7 -2
  125. package/dist/ui/commands-overlay.js +384 -355
  126. package/dist/ui/config-overlay.d.ts +5 -4
  127. package/dist/ui/config-overlay.js +243 -513
  128. package/dist/ui/conversation.d.ts +75 -4
  129. package/dist/ui/conversation.js +374 -161
  130. package/dist/ui/docs-overlay.d.ts +17 -0
  131. package/dist/ui/docs-overlay.js +303 -0
  132. package/dist/ui/ephemeral.d.ts +1 -1
  133. package/dist/ui/ephemeral.js +1 -1
  134. package/dist/ui/features/index.d.ts +34 -0
  135. package/dist/ui/features/index.js +34 -0
  136. package/dist/ui/features/input-feature.d.ts +85 -0
  137. package/dist/ui/features/input-feature.js +238 -0
  138. package/dist/ui/features/list-feature.d.ts +155 -0
  139. package/dist/ui/features/list-feature.js +244 -0
  140. package/dist/ui/features/pagination-feature.d.ts +154 -0
  141. package/dist/ui/features/pagination-feature.js +238 -0
  142. package/dist/ui/features/search-feature.d.ts +148 -0
  143. package/dist/ui/features/search-feature.js +185 -0
  144. package/dist/ui/features/tab-feature.d.ts +194 -0
  145. package/dist/ui/features/tab-feature.js +307 -0
  146. package/dist/ui/footer-v2.d.ts +222 -0
  147. package/dist/ui/footer-v2.js +1349 -0
  148. package/dist/ui/footer.d.ts +107 -0
  149. package/dist/ui/footer.js +359 -67
  150. package/dist/ui/guardrail-overlay.d.ts +29 -0
  151. package/dist/ui/guardrail-overlay.js +145 -0
  152. package/dist/ui/help-overlay-v2.d.ts +34 -0
  153. package/dist/ui/help-overlay-v2.js +309 -0
  154. package/dist/ui/help-overlay.d.ts +16 -0
  155. package/dist/ui/help-overlay.js +316 -0
  156. package/dist/ui/index.d.ts +1 -1
  157. package/dist/ui/index.js +1 -3
  158. package/dist/ui/init-overlay-v2.d.ts +34 -0
  159. package/dist/ui/init-overlay-v2.js +600 -0
  160. package/dist/ui/init-overlay.d.ts +12 -2
  161. package/dist/ui/init-overlay.js +349 -270
  162. package/dist/ui/input-prompt-v2.d.ts +1 -0
  163. package/dist/ui/input-prompt-v2.js +14 -6
  164. package/dist/ui/input-prompt.d.ts +116 -33
  165. package/dist/ui/input-prompt.js +536 -337
  166. package/dist/ui/iteration-limit-overlay-v2.d.ts +21 -0
  167. package/dist/ui/iteration-limit-overlay-v2.js +114 -0
  168. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  169. package/dist/ui/iteration-limit-overlay.js +92 -128
  170. package/dist/ui/keys-overlay-v2.d.ts +41 -0
  171. package/dist/ui/keys-overlay-v2.js +248 -0
  172. package/dist/ui/keys-overlay.d.ts +1 -0
  173. package/dist/ui/keys-overlay.js +203 -141
  174. package/dist/ui/line-utils.d.ts +88 -0
  175. package/dist/ui/line-utils.js +150 -0
  176. package/dist/ui/live-region.d.ts +161 -0
  177. package/dist/ui/live-region.js +387 -0
  178. package/dist/ui/mascot/expressions.d.ts +32 -0
  179. package/dist/ui/mascot/expressions.js +213 -0
  180. package/dist/ui/mascot/index.d.ts +8 -0
  181. package/dist/ui/mascot/index.js +8 -0
  182. package/dist/ui/mascot/renderer.d.ts +19 -0
  183. package/dist/ui/mascot/renderer.js +97 -0
  184. package/dist/ui/mascot-overlay-v2.d.ts +41 -0
  185. package/dist/ui/mascot-overlay-v2.js +138 -0
  186. package/dist/ui/mascot-overlay.d.ts +21 -0
  187. package/dist/ui/mascot-overlay.js +146 -0
  188. package/dist/ui/model-overlay-v2.d.ts +49 -0
  189. package/dist/ui/model-overlay-v2.js +118 -0
  190. package/dist/ui/model-overlay.d.ts +27 -0
  191. package/dist/ui/model-overlay.js +221 -0
  192. package/dist/ui/model-warning-overlay.js +3 -5
  193. package/dist/ui/new-overlay.d.ts +34 -0
  194. package/dist/ui/new-overlay.js +604 -0
  195. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  196. package/dist/ui/overlay/impl/agents-overlay-v2.js +825 -0
  197. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  198. package/dist/ui/overlay/impl/anchors-overlay-v2.js +783 -0
  199. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  200. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  201. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  202. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +584 -0
  203. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  204. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  205. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +49 -0
  206. package/dist/ui/overlay/impl/backlog-overlay-v2.js +642 -0
  207. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  208. package/dist/ui/overlay/impl/commands-overlay-v2.js +441 -0
  209. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +100 -0
  210. package/dist/ui/overlay/impl/config-overlay-v2.js +654 -0
  211. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +55 -0
  212. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +359 -0
  213. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  214. package/dist/ui/overlay/impl/docs-overlay-v2.js +114 -0
  215. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +77 -0
  216. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1071 -0
  217. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  218. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  219. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +34 -0
  220. package/dist/ui/overlay/impl/help-overlay-v2.js +309 -0
  221. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +77 -0
  222. package/dist/ui/overlay/impl/init-overlay-v2.js +593 -0
  223. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  224. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  225. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  226. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  227. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  228. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  229. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  230. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  231. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +49 -0
  232. package/dist/ui/overlay/impl/model-overlay-v2.js +118 -0
  233. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  234. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  235. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +77 -0
  236. package/dist/ui/overlay/impl/new-overlay-v2.js +593 -0
  237. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  238. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  239. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +36 -0
  240. package/dist/ui/overlay/impl/projects-overlay-v2.js +499 -0
  241. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  242. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  243. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  244. package/dist/ui/overlay/impl/tools-overlay-v2.js +218 -0
  245. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +31 -0
  246. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +1035 -0
  247. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  248. package/dist/ui/overlay/impl/workflow-overlay-v2.js +637 -0
  249. package/dist/ui/overlay/index.d.ts +33 -0
  250. package/dist/ui/overlay/index.js +35 -0
  251. package/dist/ui/overlay/key-utils.d.ts +6 -0
  252. package/dist/ui/overlay/key-utils.js +6 -0
  253. package/dist/ui/overlay/overlay-types.d.ts +128 -0
  254. package/dist/ui/overlay/overlay-types.js +22 -0
  255. package/dist/ui/overlay/types.d.ts +135 -0
  256. package/dist/ui/overlay/types.js +22 -0
  257. package/dist/ui/overlays/help-overlay-v2.d.ts +28 -0
  258. package/dist/ui/overlays/help-overlay-v2.js +198 -0
  259. package/dist/ui/overlays/index.d.ts +11 -0
  260. package/dist/ui/overlays/index.js +11 -0
  261. package/dist/ui/overlays.d.ts +0 -4
  262. package/dist/ui/overlays.js +0 -444
  263. package/dist/ui/permission-overlay-v2.d.ts +36 -0
  264. package/dist/ui/permission-overlay-v2.js +380 -0
  265. package/dist/ui/permission-overlay.d.ts +1 -1
  266. package/dist/ui/permission-overlay.js +186 -298
  267. package/dist/ui/projects-overlay.d.ts +19 -0
  268. package/dist/ui/projects-overlay.js +484 -0
  269. package/dist/ui/providers/types.d.ts +178 -0
  270. package/dist/ui/providers/types.js +9 -0
  271. package/dist/ui/render-modes.d.ts +36 -0
  272. package/dist/ui/render-modes.js +44 -0
  273. package/dist/ui/startup-menu.d.ts +36 -0
  274. package/dist/ui/startup-menu.js +236 -0
  275. package/dist/ui/subagent-renderer.d.ts +117 -0
  276. package/dist/ui/subagent-renderer.js +334 -0
  277. package/dist/ui/terminal-codes.d.ts +94 -0
  278. package/dist/ui/terminal-codes.js +124 -0
  279. package/dist/ui/terminal-renderer.d.ts +221 -0
  280. package/dist/ui/terminal-renderer.js +751 -0
  281. package/dist/ui/terminal-ui.d.ts +463 -0
  282. package/dist/ui/terminal-ui.js +2296 -0
  283. package/dist/ui/terminal.d.ts +20 -0
  284. package/dist/ui/terminal.js +72 -0
  285. package/dist/ui/theme-overlay-v2.d.ts +42 -0
  286. package/dist/ui/theme-overlay-v2.js +135 -0
  287. package/dist/ui/theme-overlay.d.ts +24 -0
  288. package/dist/ui/theme-overlay.js +127 -0
  289. package/dist/ui/todo-zone.js +53 -25
  290. package/dist/ui/tool-formatters.d.ts +16 -0
  291. package/dist/ui/tool-formatters.js +516 -0
  292. package/dist/ui/tools-overlay-v2.d.ts +47 -0
  293. package/dist/ui/tools-overlay-v2.js +218 -0
  294. package/dist/ui/tools-overlay.d.ts +10 -2
  295. package/dist/ui/tools-overlay.js +172 -220
  296. package/dist/ui/tutorial-overlay-v2.d.ts +31 -0
  297. package/dist/ui/tutorial-overlay-v2.js +1035 -0
  298. package/dist/ui/tutorial-overlay.d.ts +1 -0
  299. package/dist/ui/tutorial-overlay.js +400 -302
  300. package/dist/ui/workflow-overlay.d.ts +22 -0
  301. package/dist/ui/workflow-overlay.js +636 -0
  302. package/dist/utils/debug-log.d.ts +28 -0
  303. package/dist/utils/debug-log.js +57 -0
  304. package/dist/utils/model-tiers.js +1 -1
  305. package/dist/utils/path-safety.d.ts +56 -0
  306. package/dist/utils/path-safety.js +239 -0
  307. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  308. package/dist/workflow/guided-mode-injector.js +191 -0
  309. package/dist/workflow/index.d.ts +8 -0
  310. package/dist/workflow/index.js +8 -0
  311. package/dist/workflow/step-criteria.d.ts +62 -0
  312. package/dist/workflow/step-criteria.js +150 -0
  313. package/dist/workflow/step-tracker.d.ts +92 -0
  314. package/dist/workflow/step-tracker.js +141 -0
  315. package/package.json +12 -5
package/README.md CHANGED
@@ -1,7 +1,20 @@
1
1
  # @compilr-dev/cli
2
2
 
3
+ ```
4
+ \|/
5
+ ╭══════════╮ ___ ___ _ __ ___ _ __ (_) |_ __
6
+ ║' ▐▌ ▐▌ │ / __|/ _ \| '_ ` _ \| '_ \| | | '__|
7
+ ║ │ | (__| (_) | | | | | | |_) | | | |
8
+ ╰─═──────═─╯ \___|\___/|_| |_| |_| .__/|_|_|_|
9
+ \________\ | | .dev
10
+ |_| CLI
11
+ ```
12
+
3
13
  > AI-powered CLI assistant using @compilr-dev/agents
4
14
 
15
+ [![npm version](https://img.shields.io/npm/v/@compilr-dev/cli.svg)](https://www.npmjs.com/package/@compilr-dev/cli)
16
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
17
+
5
18
  ## Overview
6
19
 
7
20
  An AI coding assistant for the terminal, built with the `@compilr-dev/agents` library. Supports multiple LLM providers (Claude, OpenAI, Gemini, Ollama) with streaming output, tool execution, and context management.
@@ -63,8 +76,8 @@ compilr --verbose
63
76
 
64
77
  ```bash
65
78
  # Clone the repository
66
- git clone https://github.com/scozzola/compilr-dev-cli.git
67
- cd compilr-dev-cli
79
+ git clone https://github.com/compilr-dev/cli.git
80
+ cd cli
68
81
 
69
82
  # Install dependencies
70
83
  npm install
@@ -86,13 +99,15 @@ npm run build
86
99
 
87
100
  ## Documentation
88
101
 
89
- Specs in `/workspace/project-docs/00-requirements/compilr-dev-cli/`:
90
- - `poc-objectives.md` - Original validation objectives
91
- - `poc-scope.md` - Feature scope
92
- - `poc-architecture.md` - Technical design
93
- - `streaming-output-plan.md` - Streaming implementation
94
- - `theme-system-spec.md` - Theme configuration
95
- - `config-overlay-spec.md` - Settings system
102
+ Full documentation and tutorials available at [compilr.dev](https://compilr.dev):
103
+ - Getting Started Guide
104
+ - Configuration Reference
105
+ - Tool Documentation
106
+ - Best Practices
107
+
108
+ ## Contributing
109
+
110
+ Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
96
111
 
97
112
  ## License
98
113
 
@@ -100,11 +115,14 @@ MIT
100
115
 
101
116
  ## Links
102
117
 
103
- - [compilr.dev](https://compilr.dev) - Main website
118
+ - [compilr.dev](https://compilr.dev) - Main website & documentation
104
119
  - [@compilr-dev/agents](https://www.npmjs.com/package/@compilr-dev/agents) - Agent library
105
120
  - [@compilr-dev/agents-coding](https://www.npmjs.com/package/@compilr-dev/agents-coding) - Coding tools
106
- - [GitHub](https://github.com/scozzola/compilr-dev-cli) - Source code
121
+ - [GitHub](https://github.com/compilr-dev/cli) - Source code
122
+ - [Examples](https://github.com/compilr-dev/examples) - Example projects
107
123
 
108
124
  ---
109
125
 
110
- **Built with @compilr-dev/agents**
126
+ ```
127
+ [^_^] Built with @compilr-dev/agents
128
+ ```
package/dist/agent.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  * and available tools.
7
7
  */
8
8
  import { Agent } from '@compilr-dev/agents';
9
- import type { AgentEvent, PermissionHandler } from '@compilr-dev/agents';
9
+ import type { AgentEvent, PermissionHandler, GuardrailTriggeredHandler } from '@compilr-dev/agents';
10
10
  /**
11
11
  * Supported providers
12
12
  */
@@ -47,6 +47,68 @@ export interface AgentOptions {
47
47
  * This is appended to the system prompt to give the agent project-specific knowledge.
48
48
  */
49
49
  projectContext?: string;
50
+ /**
51
+ * Guided workflow context.
52
+ * Appended to the system prompt when in guided mode.
53
+ * Generated by the workflow module based on project/item state.
54
+ */
55
+ guidedModeContext?: string;
56
+ /**
57
+ * Enable anchors (critical info that survives compaction).
58
+ * When true, agent is configured with AnchorManager.
59
+ */
60
+ enableAnchors?: boolean;
61
+ /**
62
+ * Pre-loaded anchors to add to the agent at startup.
63
+ * These are loaded from persisted files (global + project).
64
+ */
65
+ persistedAnchors?: Array<{
66
+ id?: string;
67
+ content: string;
68
+ priority: 'critical' | 'safety' | 'info';
69
+ scope: 'session' | 'persistent' | 'temporary';
70
+ tags?: string[];
71
+ projectId?: string;
72
+ }>;
73
+ /**
74
+ * Enable guardrails (safety checks for risky operations).
75
+ * When true, 15 built-in patterns are enabled for git, filesystem, database, etc.
76
+ * Warnings are emitted as 'guardrail_warning' events on the agent.
77
+ */
78
+ enableGuardrails?: boolean;
79
+ /**
80
+ * Callback for guardrail confirmation prompts.
81
+ * Called when a guardrail with action='confirm' is triggered.
82
+ * Return true to proceed, false to block.
83
+ */
84
+ onGuardrailTriggered?: GuardrailTriggeredHandler;
85
+ /**
86
+ * Callback when a subagent starts (task tool spawns agent).
87
+ * @param toolUseId - Tool use ID for correlation (from task tool's tool_start event)
88
+ * @param agentType - Type of agent being spawned
89
+ * @param description - Task description
90
+ */
91
+ onSubagentStart?: (toolUseId: string, agentType: string, description: string) => void;
92
+ /**
93
+ * Callback when a subagent completes.
94
+ * @param toolUseId - Tool use ID for correlation
95
+ * @param success - Whether the subagent completed successfully
96
+ * @param tokenCount - Total tokens used by the subagent
97
+ * @param error - Error message if failed
98
+ */
99
+ onSubagentEnd?: (toolUseId: string, success: boolean, tokenCount: number, error?: string) => void;
100
+ /**
101
+ * Callback when a subagent uses a tool (for live updates).
102
+ * @param toolUseId - Tool use ID for correlation
103
+ * @param toolName - Name of the tool being used
104
+ * @param summary - Optional summary of what the tool is doing
105
+ */
106
+ onSubagentToolUse?: (toolUseId: string, toolName: string, summary?: string) => void;
107
+ /**
108
+ * Callback invoked when subagent tracking should be cleared (e.g., new run starting).
109
+ * Returns a function to clear the tracking state.
110
+ */
111
+ onSubagentTrackingReady?: (clearTracking: () => void) => void;
50
112
  }
51
113
  /**
52
114
  * Get permission info for a tool by name.
@@ -56,6 +118,17 @@ export declare function getToolPermissionInfo(toolName: string): {
56
118
  level: 'once' | 'always' | 'session';
57
119
  description: string;
58
120
  } | undefined;
121
+ /**
122
+ * Get information about built-in guardrails.
123
+ * Used for displaying guardrail info in /help or status overlays.
124
+ */
125
+ export declare function getBuiltinGuardrailInfo(): Array<{
126
+ id: string;
127
+ name: string;
128
+ description: string;
129
+ action: 'warn' | 'confirm' | 'block';
130
+ category: string;
131
+ }>;
59
132
  /**
60
133
  * Creates an Agent instance configured with all tools.
61
134
  */
package/dist/agent.js CHANGED
@@ -5,94 +5,176 @@
5
5
  * ClaudeProvider, OllamaProvider, OpenAIProvider, or GeminiProvider
6
6
  * and available tools.
7
7
  */
8
- import { Agent, ClaudeProvider, OllamaProvider, OpenAIProvider, GeminiProvider, ContextManager, DEFAULT_CONTEXT_CONFIG, createTaskTool, createSuggestTool, defaultAgentTypes, TOOL_SETS, } from '@compilr-dev/agents';
8
+ import { Agent, ClaudeProvider, OllamaProvider, OpenAIProvider, GeminiProvider, ContextManager, DEFAULT_CONTEXT_CONFIG, createTaskTool, createSuggestTool, defaultAgentTypes, TOOL_SETS, BUILTIN_GUARDRAILS, } from '@compilr-dev/agents';
9
9
  import { isAutoCompactEnabled } from './settings/index.js';
10
10
  import { getApiKey } from './utils/credentials.js';
11
11
  import { createToolRegistry, createMinimalToolRegistry } from './tools.js';
12
12
  import { getAgentRegistry } from './agents/registry.js';
13
- const SYSTEM_PROMPT = `You are a helpful coding assistant running in a terminal.
13
+ const SYSTEM_PROMPT = `You are a coding assistant running in a terminal CLI.
14
14
 
15
- AVAILABLE TOOLS (use these exact names - lowercase with underscores):
15
+ You help users with software engineering tasks: writing code, debugging, refactoring, explaining concepts, managing projects, and more.
16
16
 
17
- File Operations:
18
- - read_file: Read contents of a file (parameter: path)
17
+ ## Tone and Style
18
+
19
+ - Your output displays in a terminal. Keep responses short and concise.
20
+ - Use GitHub-flavored markdown for formatting.
21
+ - Only use emojis if the user explicitly requests them.
22
+ - Output text to communicate. Never use tools (like bash echo) to communicate.
23
+ - NEVER create files unless absolutely necessary. Always prefer editing existing files.
24
+ - When referencing code, include file path and line number: src/utils.ts:42
25
+
26
+ ## Professional Objectivity
27
+
28
+ Prioritize technical accuracy over validating the user's beliefs. Provide direct, objective technical info without unnecessary praise or emotional validation. Disagree when necessary - objective guidance is more valuable than false agreement.
29
+
30
+ Avoid phrases like "You're absolutely right!" or "Great question!" - just answer directly.
31
+
32
+ ## No Time Estimates
33
+
34
+ Never predict how long tasks will take. Avoid phrases like "this will take a few minutes" or "quick fix". Focus on what needs to be done, not duration.
35
+
36
+ ---
37
+
38
+ ## Doing Tasks
39
+
40
+ When the user requests software engineering work:
41
+
42
+ 1. **Read before modifying**: NEVER propose changes to code you haven't read. Always read files first.
43
+ 2. **Use todo_write for complex tasks**: Track progress on multi-step work (3+ steps).
44
+ 3. **Avoid over-engineering**:
45
+ - Only make changes that are directly requested
46
+ - Don't add features beyond what was asked
47
+ - Don't add error handling for scenarios that can't happen
48
+ - Don't create abstractions for one-time operations
49
+ - Three similar lines is better than a premature abstraction
50
+ 4. **Security awareness**: Don't introduce vulnerabilities (injection, XSS, SQL injection). If you notice insecure code, fix it immediately.
51
+ 5. **Clean up completely**: If something is unused, delete it. No backwards-compatibility hacks.
52
+
53
+ ## Task Management (todo_write)
54
+
55
+ Use todo_write to track progress on multi-step tasks.
56
+
57
+ When to use:
58
+ - Tasks with 3+ distinct steps
59
+ - User provides multiple tasks
60
+ - Complex work requiring planning
61
+
62
+ When NOT to use:
63
+ - Single, trivial tasks
64
+ - Purely informational questions
65
+ - Tasks completable in 1-2 steps
66
+
67
+ ### Example: When to use todo_write
68
+
69
+ User: Fix the type errors and run the tests
70
+ Assistant: I'll track this multi-step task:
71
+ [Uses todo_write: "Fix type errors", "Run tests"]
72
+ [Marks "Fix type errors" as in_progress]
73
+ [Reads files, fixes errors]
74
+ [Marks "Fix type errors" complete, "Run tests" in_progress]
75
+ [Runs tests]
76
+ [Marks "Run tests" complete]
77
+
78
+ ### Example: When NOT to use todo_write
79
+
80
+ User: What does this function do?
81
+ Assistant: [Reads the file and explains directly - no todo needed for a simple question]
82
+
83
+ ---
84
+
85
+ ## Tool Usage
86
+
87
+ IMPORTANT: Tool names are lowercase with underscores. Use them exactly as shown.
88
+
89
+ ### File Operations
90
+ - read_file: Read file contents (parameter: path)
19
91
  - write_file: Create or overwrite a file (parameters: path, content)
20
92
  - edit: Replace text in a file (parameters: path, old_text, new_text)
21
93
  - glob: Find files matching a pattern (parameters: pattern, path)
22
94
  - grep: Search file contents with regex (parameters: pattern, path)
23
95
 
24
- Shell:
96
+ ### Shell
25
97
  - bash: Run shell commands (parameter: command)
26
- For long-running commands (dev servers, watch modes), use run_in_background=true
27
- - bash_output: Get output from a background shell (parameter: shell_id)
28
- - kill_shell: Terminate a background shell (parameter: shell_id)
29
-
30
- BACKGROUND PROCESSES:
31
- When running commands that don't exit (like npm run dev, npm start, watch commands):
32
- 1. Use bash with run_in_background=true to start the process
33
- 2. The tool returns a shell_id you can use to monitor or kill the process
34
- 3. Use bash_output with the shell_id to check output/status
35
- 4. Use kill_shell with the shell_id to stop the process when done
36
-
37
- Example: Starting a dev server
38
- bash(command="npm run dev", run_in_background=true) → returns shell_id
39
- bash_output(shell_id="...") → check if server started
40
- kill_shell(shell_id="...") → stop when done
41
-
42
- Git:
98
+ For long-running commands (dev servers), use run_in_background=true
99
+ - bash_output: Get output from background shell (parameter: shell_id)
100
+ - kill_shell: Terminate background shell (parameter: shell_id)
101
+
102
+ ### Git
43
103
  - git_status: Show working tree status
44
104
  - git_diff: Show file differences
45
- - git_log: Show commit history (parameter: limit)
105
+ - git_log: Show commit history
46
106
  - git_commit: Create a commit (parameters: message, files)
47
107
  - git_branch: List or manage branches
48
108
 
49
- Project Analysis:
109
+ ### Project Analysis
50
110
  - detect_project: Detect project type and framework
51
- - find_project_root: Find the root directory of the project
52
- - run_tests: Run project test suite
53
- - run_lint: Run project linter
111
+ - find_project_root: Find project root directory
112
+ - run_tests: Run test suite
113
+ - run_lint: Run linter
54
114
 
55
- Task Management:
56
- - todo_write: Add/update todo items (parameters: todos array)
115
+ ### Task Management
116
+ - todo_write: Add/update todo items
57
117
  - todo_read: View current todo list
58
118
 
59
- Next Action Suggestions:
60
- - suggest: Suggest a next action to the user (parameters: action, reason)
61
- The suggestion appears as ghost text in the input prompt (user presses Tab to accept).
62
-
63
- IMPORTANT: Always use 'suggest' after completing a task or answering a question.
64
- This is a mandatory part of your response workflow, not optional.
65
-
66
- When to suggest:
67
- - After ANY tool-based task → suggest verifying, testing, or next logical step
68
- - After answering a question → suggest a follow-up to explore
69
- - After explaining something → suggest trying it out or diving deeper
70
- - When your reply ends with a question → suggest an answer option
71
-
72
- Good suggestions are short commands or actions: "run npm test", "commit the changes",
73
- "show me the API endpoints", "explain the error in more detail"
74
-
75
- Sub-agents (via task tool):
76
- - task: Spawn a specialized sub-agent for complex, multi-step tasks
77
- Parameters: description (3-5 words), prompt (detailed task), subagent_type
78
- Built-in types:
79
- - explore: Fast codebase search and navigation
80
- - code-review: Review code for bugs and best practices
81
- - plan: Break down complex tasks into steps
82
- - debug: Investigate and fix issues
83
- - test-runner: Run and analyze tests
84
- - refactor: Safe code refactoring
85
- - security-audit: Scan for vulnerabilities
86
- - doc-lookup: Search documentation
87
- - general: General-purpose multi-step tasks
88
- Custom agents may also be available (check /agents command).
89
-
90
- IMPORTANT RULES:
91
- 1. Tool names are lowercase with underscores - use them exactly as shown
92
- 2. If unsure which tool to use, pick the closest match from the list
93
- 3. For simple questions (math, facts), answer directly without tools
94
- 4. After calling a tool, you MUST respond with the result to the user - never end silently
95
- 5. Use the task tool to delegate complex tasks to specialized sub-agents
119
+ ### User Interaction
120
+ - ask_user: Ask question with multiple choice options
121
+ - ask_user_simple: Ask simple yes/no or text input question
122
+ - suggest: Suggest next action (appears as ghost text - user presses Tab to accept)
123
+
124
+ ### Sub-agents
125
+ - task: Spawn specialized sub-agent for complex tasks
126
+ Types: explore, code-review, plan, debug, test-runner, refactor, security-audit, general
127
+
128
+ ---
129
+
130
+ ## Git Safety Protocol
131
+
132
+ When working with git:
133
+
134
+ 1. **Never update git config** without explicit user request
135
+ 2. **Never force push** to main/master - warn if requested
136
+ 3. **Never use --amend** unless:
137
+ - User explicitly requested it, AND
138
+ - Commit was created by you in this session, AND
139
+ - Commit has NOT been pushed to remote
140
+ 4. **Check before destructive operations**:
141
+ - git reset --hard (loses uncommitted changes)
142
+ - git checkout -- file (discards local changes)
143
+ - git clean (deletes untracked files)
144
+ 5. **Only commit when asked** - don't commit proactively
145
+
146
+ ### Commit Workflow
147
+ 1. Run git_status to see changes
148
+ 2. Run git_diff to review what will be committed
149
+ 3. Check recent git_log for commit message style
150
+ 4. Create focused commit with clear message
151
+ 5. Never commit files with secrets (.env, credentials.json)
152
+
153
+ ---
154
+
155
+ ## Next Action Suggestions
156
+
157
+ After completing a task, call the suggest tool to recommend the next action.
158
+
159
+ Good suggestions are short commands or actions:
160
+ - "run npm test"
161
+ - "commit the changes"
162
+ - "check the error log"
163
+
164
+ CALL the suggest tool - never write "suggest: ..." as text.
165
+
166
+ ---
167
+
168
+ ## IMPORTANT RULES (read carefully)
169
+
170
+ 1. Tool names are lowercase with underscores - use exactly as shown
171
+ 2. ALWAYS read files before proposing changes to them
172
+ 3. After calling a tool, respond with the result - never end silently
173
+ 4. Use todo_write for multi-step tasks (3+ steps)
174
+ 5. Don't over-engineer - implement exactly what was asked
175
+ 6. Check for security issues - fix insecure code immediately
176
+ 7. Use the task tool to delegate complex work to sub-agents
177
+ 8. Call suggest tool after completing tasks (don't write "suggest:" as text)
96
178
 
97
179
  Current working directory: ${process.cwd()}`;
98
180
  /**
@@ -111,8 +193,7 @@ const DEFAULT_PERMISSION_RULES = [
111
193
  // Project runners (can have side effects)
112
194
  { toolName: 'run_tests', level: 'once', description: 'Run test suite' },
113
195
  { toolName: 'run_lint', level: 'once', description: 'Run linter (may auto-fix)' },
114
- // Local file modifications
115
- { toolName: 'backlog_write', level: 'once', description: 'Modify backlog file' },
196
+ // Note: backlog_write removed - use workitem_* tools which modify database
116
197
  ];
117
198
  /**
118
199
  * Get permission info for a tool by name.
@@ -128,6 +209,19 @@ export function getToolPermissionInfo(toolName) {
128
209
  }
129
210
  return undefined;
130
211
  }
212
+ /**
213
+ * Get information about built-in guardrails.
214
+ * Used for displaying guardrail info in /help or status overlays.
215
+ */
216
+ export function getBuiltinGuardrailInfo() {
217
+ return BUILTIN_GUARDRAILS.map((g) => ({
218
+ id: g.id,
219
+ name: g.name,
220
+ description: g.description,
221
+ action: g.action,
222
+ category: g.tags?.[0] ?? 'general',
223
+ }));
224
+ }
131
225
  /**
132
226
  * Merges built-in agent types with custom agents from registry.
133
227
  * Custom agents get safe read-only tools by default.
@@ -254,10 +348,16 @@ export function createAgent(options = {}) {
254
348
  }
255
349
  }
256
350
  : undefined;
257
- // Build system prompt with optional project context
258
- const systemPrompt = options.projectContext
259
- ? `${SYSTEM_PROMPT}\n\n---\n\n## Project Context\n\nThe following is project-specific context loaded from COMPILR.md:\n\n${options.projectContext}`
260
- : SYSTEM_PROMPT;
351
+ // Build system prompt with optional project context and guided mode context
352
+ // Note: Anchors are NOT added here - they're handled by library's AnchorManager
353
+ // which re-injects them on every LLM call (survives compaction)
354
+ let systemPrompt = SYSTEM_PROMPT;
355
+ if (options.projectContext) {
356
+ systemPrompt += `\n\n---\n\n## Project Context\n\nThe following is project-specific context loaded from COMPILR.md:\n\n${options.projectContext}`;
357
+ }
358
+ if (options.guidedModeContext) {
359
+ systemPrompt += `\n\n---\n\n${options.guidedModeContext}`;
360
+ }
261
361
  const agent = new Agent({
262
362
  provider,
263
363
  systemPrompt,
@@ -280,7 +380,40 @@ export function createAgent(options = {}) {
280
380
  : undefined,
281
381
  // Iteration limit handler - asks user if they want to continue
282
382
  onIterationLimitReached: options.onIterationLimitReached,
383
+ // Anchors - critical info that survives context compaction
384
+ // Library re-injects anchors on every LLM call
385
+ anchors: options.enableAnchors
386
+ ? {
387
+ maxAnchors: 50,
388
+ maxTokens: 4000,
389
+ includeDefaults: true,
390
+ // Note: We manage persistence ourselves via project-anchors.ts
391
+ // Don't set persistPath - we load anchors manually below
392
+ }
393
+ : undefined,
394
+ // Guardrails - pattern-based safety checks for risky operations
395
+ // 15 built-in patterns: git destructive ops, rm -rf, DROP TABLE, secrets, etc.
396
+ guardrails: options.enableGuardrails
397
+ ? {
398
+ enabled: true,
399
+ includeDefaults: true,
400
+ onTriggered: options.onGuardrailTriggered,
401
+ }
402
+ : undefined,
283
403
  });
404
+ // Load persisted anchors into the agent's AnchorManager
405
+ if (options.enableAnchors && options.persistedAnchors) {
406
+ for (const anchor of options.persistedAnchors) {
407
+ agent.addAnchor({
408
+ id: anchor.id,
409
+ content: anchor.content,
410
+ priority: anchor.priority,
411
+ scope: anchor.scope,
412
+ tags: anchor.tags,
413
+ // Note: projectId is for our tracking, not needed by library
414
+ });
415
+ }
416
+ }
284
417
  // Register tools using registerTools method
285
418
  const tools = options.minimal
286
419
  ? createMinimalToolRegistry()
@@ -289,20 +422,70 @@ export function createAgent(options = {}) {
289
422
  agent.registerTools(tools);
290
423
  // Register Task tool for sub-agent spawning (only in full mode)
291
424
  if (!options.minimal) {
425
+ // Track active subagents to correlate spawn/complete/events
426
+ // Track active subagents by toolUseId for token counting
427
+ const activeSubagents = new Map();
428
+ // Provide a way for caller to clear tracking state between runs
429
+ if (options.onSubagentTrackingReady) {
430
+ options.onSubagentTrackingReady(() => {
431
+ activeSubagents.clear();
432
+ });
433
+ }
292
434
  const taskTool = createTaskTool({
293
435
  parentAgent: agent,
294
436
  agentTypes: getMergedAgentTypes(),
295
437
  enableEventStreaming: true,
296
438
  defaultTimeout: 120000, // 2 minutes for subagent operations
297
- onSpawn: (agentType, description) => {
439
+ // Now uses toolUseId for direct correlation (no more FIFO matching!)
440
+ onSpawn: (agentType, description, toolUseId) => {
298
441
  if (options.verbose) {
299
- console.log(`\n[Sub-agent] Spawning ${agentType}: ${description}`);
442
+ console.log(`\n[Sub-agent] Spawning ${agentType}: ${description} (${toolUseId ?? 'no-id'})`);
443
+ }
444
+ // Immediately notify with toolUseId - no more queuing/matching!
445
+ if (toolUseId) {
446
+ activeSubagents.set(toolUseId, { agentType, tokenCount: 0 });
447
+ if (options.onSubagentStart) {
448
+ options.onSubagentStart(toolUseId, agentType, description);
449
+ }
300
450
  }
301
451
  },
302
- onComplete: (agentType, result) => {
452
+ onComplete: (agentType, result, toolUseId) => {
303
453
  if (options.verbose) {
304
454
  console.log(`[Sub-agent] ${agentType} completed (${String(result.iterations)} iterations)`);
305
455
  }
456
+ // Direct notification with toolUseId - no more searching!
457
+ if (toolUseId && options.onSubagentEnd) {
458
+ options.onSubagentEnd(toolUseId, true, result.toolCalls);
459
+ activeSubagents.delete(toolUseId);
460
+ }
461
+ },
462
+ // Stream subagent events for live updates
463
+ onSubAgentEvent: (eventInfo) => {
464
+ const { toolUseId, event } = eventInfo;
465
+ // Handle tool events for live updates
466
+ if (event.type === 'tool_start' && toolUseId && event.name && options.onSubagentToolUse) {
467
+ // Extract tool name and input summary
468
+ const toolName = event.name;
469
+ let summary;
470
+ // Try to get a meaningful summary from input
471
+ const input = event.input;
472
+ if (input) {
473
+ // Common patterns for tool input summaries
474
+ const path = input.path;
475
+ const pattern = input.pattern;
476
+ const command = input.command;
477
+ const filePath = input.file_path;
478
+ if (typeof path === 'string')
479
+ summary = path;
480
+ else if (typeof pattern === 'string')
481
+ summary = pattern;
482
+ else if (typeof command === 'string')
483
+ summary = command.slice(0, 40);
484
+ else if (typeof filePath === 'string')
485
+ summary = filePath;
486
+ }
487
+ options.onSubagentToolUse(toolUseId, toolName, summary);
488
+ }
306
489
  },
307
490
  });
308
491
  // Type assertion needed for task tool compatibility
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Anchors Module
3
+ *
4
+ * Re-exports the project-anchors API for managing persistent
5
+ * critical information that survives context compaction.
6
+ */
7
+ export { getAnchorManager, getGlobalAnchorManager, clearProjectAnchors, getFormattedAnchors, addAnchor, getAllAnchors, getProjectsWithAnchors, getAnchorStats, clearManagerCache, } from './project-anchors.js';
8
+ export type { Anchor, AnchorInput, AnchorQueryOptions } from './project-anchors.js';
9
+ export { AnchorManager } from '@compilr-dev/agents';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Anchors Module
3
+ *
4
+ * Re-exports the project-anchors API for managing persistent
5
+ * critical information that survives context compaction.
6
+ */
7
+ export { getAnchorManager, getGlobalAnchorManager, clearProjectAnchors, getFormattedAnchors, addAnchor, getAllAnchors, getProjectsWithAnchors, getAnchorStats, clearManagerCache, } from './project-anchors.js';
8
+ // Re-export the AnchorManager type from agents for consumers
9
+ export { AnchorManager } from '@compilr-dev/agents';