agent-enderun 1.1.4 → 1.1.5

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 (539) hide show
  1. package/.github/workflows/ci.yml +40 -0
  2. package/ENDERUN.md +36 -38
  3. package/README.md +12 -8
  4. package/bin/validate-agent-army.js +27 -12
  5. package/dist/framework-mcp/src/index.js +7 -1
  6. package/dist/framework-mcp/src/index.js.map +1 -1
  7. package/dist/framework-mcp/src/tools/definitions.js +1 -0
  8. package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
  9. package/dist/framework-mcp/src/tools/file_system/patch_file.js +3 -0
  10. package/dist/framework-mcp/src/tools/file_system/patch_file.js.map +1 -1
  11. package/dist/framework-mcp/src/tools/file_system/read_file.js +7 -0
  12. package/dist/framework-mcp/src/tools/file_system/read_file.js.map +1 -1
  13. package/dist/framework-mcp/src/tools/file_system/replace_text.js +3 -0
  14. package/dist/framework-mcp/src/tools/file_system/replace_text.js.map +1 -1
  15. package/dist/framework-mcp/src/tools/messaging/send_message.js +41 -11
  16. package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
  17. package/dist/framework-mcp/src/tools/types.d.ts +1 -0
  18. package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.d.ts +1 -0
  19. package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js +187 -0
  20. package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js.map +1 -0
  21. package/dist/framework-mcp/tests/tools/messaging/send_message.test.d.ts +1 -0
  22. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +115 -0
  23. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -0
  24. package/dist/init-adapters/antigravity-cli/.agents/BRAIN_DASHBOARD.md +11 -0
  25. package/dist/init-adapters/antigravity-cli/.agents/STATUS.md +3 -0
  26. package/dist/init-adapters/antigravity-cli/.agents/agents/analyst/agent.json +28 -0
  27. package/dist/init-adapters/antigravity-cli/.agents/agents/architect/agent.json +30 -0
  28. package/dist/init-adapters/antigravity-cli/.agents/agents/backend/agent.json +30 -0
  29. package/dist/init-adapters/antigravity-cli/.agents/agents/database/agent.json +29 -0
  30. package/dist/init-adapters/antigravity-cli/.agents/agents/devops/agent.json +28 -0
  31. package/dist/init-adapters/antigravity-cli/.agents/agents/explorer/agent.json +29 -0
  32. package/dist/init-adapters/antigravity-cli/.agents/agents/frontend/agent.json +29 -0
  33. package/dist/init-adapters/antigravity-cli/.agents/agents/git/agent.json +28 -0
  34. package/dist/init-adapters/antigravity-cli/.agents/agents/manager/agent.json +30 -0
  35. package/dist/init-adapters/antigravity-cli/.agents/agents/mobile/agent.json +29 -0
  36. package/dist/init-adapters/antigravity-cli/.agents/agents/native/agent.json +29 -0
  37. package/dist/init-adapters/antigravity-cli/.agents/agents/quality/agent.json +29 -0
  38. package/dist/init-adapters/antigravity-cli/.agents/agents/security/agent.json +29 -0
  39. package/dist/init-adapters/antigravity-cli/.agents/cli-commands.json +32 -0
  40. package/dist/init-adapters/antigravity-cli/.agents/config.json +12 -0
  41. package/dist/init-adapters/antigravity-cli/.agents/knowledge/agents-manifest.md +79 -0
  42. package/dist/init-adapters/antigravity-cli/.agents/knowledge/approval-flows.md +61 -0
  43. package/dist/init-adapters/antigravity-cli/.agents/knowledge/enterprise-architecture.md +69 -0
  44. package/dist/init-adapters/antigravity-cli/.agents/knowledge/eslint-standards.md +10 -0
  45. package/dist/init-adapters/antigravity-cli/.agents/mcp_config.json +13 -0
  46. package/dist/init-adapters/antigravity-cli/.agents/memory/DECISIONS.md +10 -0
  47. package/dist/init-adapters/antigravity-cli/.agents/memory/PROJECT_MEMORY.md +8 -0
  48. package/dist/init-adapters/antigravity-cli/.agents/observability/audit_log.md +5 -0
  49. package/dist/init-adapters/antigravity-cli/.agents/observability/telemetry.md +6 -0
  50. package/dist/init-adapters/antigravity-cli/.agents/registry/agent_registry.md +18 -0
  51. package/dist/init-adapters/antigravity-cli/.agents/router/routing_rules.md +8 -0
  52. package/dist/init-adapters/antigravity-cli/.agents/rules/analyst.md +16 -0
  53. package/dist/init-adapters/antigravity-cli/.agents/rules/architect.md +16 -0
  54. package/dist/init-adapters/antigravity-cli/.agents/rules/backend.md +16 -0
  55. package/dist/init-adapters/antigravity-cli/.agents/rules/database.md +16 -0
  56. package/dist/init-adapters/antigravity-cli/.agents/rules/devops.md +16 -0
  57. package/dist/init-adapters/antigravity-cli/.agents/rules/explorer.md +16 -0
  58. package/dist/init-adapters/antigravity-cli/.agents/rules/frontend.md +16 -0
  59. package/dist/init-adapters/antigravity-cli/.agents/rules/git.md +16 -0
  60. package/dist/init-adapters/antigravity-cli/.agents/rules/manager.md +16 -0
  61. package/dist/init-adapters/antigravity-cli/.agents/rules/mobile.md +16 -0
  62. package/dist/init-adapters/antigravity-cli/.agents/rules/native.md +16 -0
  63. package/dist/init-adapters/antigravity-cli/.agents/rules/quality.md +16 -0
  64. package/dist/init-adapters/antigravity-cli/.agents/rules/security.md +16 -0
  65. package/dist/init-adapters/antigravity-cli/.agents/skills/discovery.md +3 -0
  66. package/dist/init-adapters/antigravity-cli/.agents/skills/editing.md +3 -0
  67. package/dist/init-adapters/antigravity-cli/.agents/skills/execution.md +4 -0
  68. package/dist/init-adapters/antigravity-cli/.agents/skills/file_system.md +4 -0
  69. package/dist/init-adapters/antigravity-cli/.agents/skills/orchestration.md +3 -0
  70. package/dist/init-adapters/antigravity-cli/AGENTS.md +8 -0
  71. package/dist/init-adapters/antigravity-cli/ENDERUN.md +261 -0
  72. package/dist/init-adapters/antigravity-cli/docs/README.md +6 -0
  73. package/dist/init-adapters/antigravity-cli/docs/getting-started.md +4 -0
  74. package/dist/init-adapters/antigravity-cli/mcp.json +13 -0
  75. package/dist/init-adapters/antigravity-cli/package.json +5 -0
  76. package/dist/init-adapters/antigravity-cli/panda.config.ts +2 -0
  77. package/dist/init-adapters/claude/.claude/BRAIN_DASHBOARD.md +11 -0
  78. package/dist/init-adapters/claude/.claude/STATUS.md +3 -0
  79. package/dist/init-adapters/claude/.claude/agents/analyst.md +17 -0
  80. package/dist/init-adapters/claude/.claude/agents/architect.md +17 -0
  81. package/dist/init-adapters/claude/.claude/agents/backend.md +17 -0
  82. package/dist/init-adapters/claude/.claude/agents/database.md +17 -0
  83. package/dist/init-adapters/claude/.claude/agents/devops.md +17 -0
  84. package/dist/init-adapters/claude/.claude/agents/explorer.md +17 -0
  85. package/dist/init-adapters/claude/.claude/agents/frontend.md +17 -0
  86. package/dist/init-adapters/claude/.claude/agents/git.md +17 -0
  87. package/dist/init-adapters/claude/.claude/agents/manager.md +17 -0
  88. package/dist/init-adapters/claude/.claude/agents/mobile.md +17 -0
  89. package/dist/init-adapters/claude/.claude/agents/native.md +17 -0
  90. package/dist/init-adapters/claude/.claude/agents/quality.md +17 -0
  91. package/dist/init-adapters/claude/.claude/agents/security.md +17 -0
  92. package/dist/init-adapters/claude/.claude/cli-commands.json +32 -0
  93. package/dist/init-adapters/claude/.claude/config.json +12 -0
  94. package/dist/init-adapters/claude/.claude/knowledge/agents-manifest.md +79 -0
  95. package/dist/init-adapters/claude/.claude/knowledge/approval-flows.md +61 -0
  96. package/dist/init-adapters/claude/.claude/knowledge/component-patterns.md +91 -0
  97. package/dist/init-adapters/claude/.claude/knowledge/data-fetching-patterns.md +13 -0
  98. package/dist/init-adapters/claude/.claude/knowledge/design-system.md +31 -0
  99. package/dist/init-adapters/claude/.claude/knowledge/enterprise-architecture.md +69 -0
  100. package/dist/init-adapters/claude/.claude/knowledge/error-handling.md +74 -0
  101. package/dist/init-adapters/claude/.claude/knowledge/eslint-standards.md +10 -0
  102. package/dist/init-adapters/claude/.claude/knowledge/logging.md +7 -0
  103. package/dist/init-adapters/claude/.claude/knowledge/tech-stack.md +9 -0
  104. package/dist/init-adapters/claude/.claude/mcp_config.json +13 -0
  105. package/dist/init-adapters/claude/.claude/memory/DECISIONS.md +10 -0
  106. package/dist/init-adapters/claude/.claude/memory/PROJECT_MEMORY.md +8 -0
  107. package/dist/init-adapters/claude/.claude/observability/audit_log.md +5 -0
  108. package/dist/init-adapters/claude/.claude/observability/telemetry.md +6 -0
  109. package/dist/init-adapters/claude/.claude/registry/agent_registry.md +18 -0
  110. package/dist/init-adapters/claude/.claude/router/routing_rules.md +8 -0
  111. package/dist/init-adapters/claude/.claude/rules/analyst.md +16 -0
  112. package/dist/init-adapters/claude/.claude/rules/architect.md +16 -0
  113. package/dist/init-adapters/claude/.claude/rules/backend.md +16 -0
  114. package/dist/init-adapters/claude/.claude/rules/database.md +16 -0
  115. package/dist/init-adapters/claude/.claude/rules/devops.md +16 -0
  116. package/dist/init-adapters/claude/.claude/rules/explorer.md +16 -0
  117. package/dist/init-adapters/claude/.claude/rules/frontend.md +16 -0
  118. package/dist/init-adapters/claude/.claude/rules/git.md +16 -0
  119. package/dist/init-adapters/claude/.claude/rules/manager.md +16 -0
  120. package/dist/init-adapters/claude/.claude/rules/mobile.md +16 -0
  121. package/dist/init-adapters/claude/.claude/rules/native.md +16 -0
  122. package/dist/init-adapters/claude/.claude/rules/quality.md +16 -0
  123. package/dist/init-adapters/claude/.claude/rules/security.md +16 -0
  124. package/dist/init-adapters/claude/.claude/skills/discovery.md +3 -0
  125. package/dist/init-adapters/claude/.claude/skills/editing.md +3 -0
  126. package/dist/init-adapters/claude/.claude/skills/execution.md +4 -0
  127. package/dist/init-adapters/claude/.claude/skills/file_system.md +4 -0
  128. package/dist/init-adapters/claude/.claude/skills/orchestration.md +3 -0
  129. package/dist/init-adapters/claude/.mcp.json +13 -0
  130. package/dist/init-adapters/claude/CLAUDE.md +8 -0
  131. package/dist/init-adapters/claude/ENDERUN.md +261 -0
  132. package/dist/init-adapters/claude/docs/README.md +6 -0
  133. package/dist/init-adapters/claude/docs/getting-started.md +4 -0
  134. package/dist/init-adapters/claude/mcp.json +13 -0
  135. package/dist/init-adapters/claude/package.json +5 -0
  136. package/dist/init-adapters/claude/panda.config.ts +2 -0
  137. package/dist/init-adapters/codex/.github/BRAIN_DASHBOARD.md +11 -0
  138. package/dist/init-adapters/codex/.github/STATUS.md +3 -0
  139. package/dist/init-adapters/codex/.github/agents/analyst.md +17 -0
  140. package/dist/init-adapters/codex/.github/agents/architect.md +17 -0
  141. package/dist/init-adapters/codex/.github/agents/backend.md +17 -0
  142. package/dist/init-adapters/codex/.github/agents/database.md +17 -0
  143. package/dist/init-adapters/codex/.github/agents/devops.md +17 -0
  144. package/dist/init-adapters/codex/.github/agents/explorer.md +17 -0
  145. package/dist/init-adapters/codex/.github/agents/frontend.md +17 -0
  146. package/dist/init-adapters/codex/.github/agents/git.md +17 -0
  147. package/dist/init-adapters/codex/.github/agents/manager.md +17 -0
  148. package/dist/init-adapters/codex/.github/agents/mobile.md +17 -0
  149. package/dist/init-adapters/codex/.github/agents/native.md +17 -0
  150. package/dist/init-adapters/codex/.github/agents/quality.md +17 -0
  151. package/dist/init-adapters/codex/.github/agents/security.md +17 -0
  152. package/dist/init-adapters/codex/.github/cli-commands.json +32 -0
  153. package/dist/init-adapters/codex/.github/config.json +12 -0
  154. package/dist/init-adapters/codex/.github/instructions/agents-manifest.md +79 -0
  155. package/dist/init-adapters/codex/.github/instructions/analyst.md +16 -0
  156. package/dist/init-adapters/codex/.github/instructions/approval-flows.md +61 -0
  157. package/dist/init-adapters/codex/.github/instructions/architect.md +16 -0
  158. package/dist/init-adapters/codex/.github/instructions/backend.md +16 -0
  159. package/dist/init-adapters/codex/.github/instructions/component-patterns.md +91 -0
  160. package/dist/init-adapters/codex/.github/instructions/data-fetching-patterns.md +13 -0
  161. package/dist/init-adapters/codex/.github/instructions/database.md +16 -0
  162. package/dist/init-adapters/codex/.github/instructions/design-system.md +31 -0
  163. package/dist/init-adapters/codex/.github/instructions/devops.md +16 -0
  164. package/dist/init-adapters/codex/.github/instructions/enterprise-architecture.md +69 -0
  165. package/dist/init-adapters/codex/.github/instructions/error-handling.md +74 -0
  166. package/dist/init-adapters/codex/.github/instructions/eslint-standards.md +10 -0
  167. package/dist/init-adapters/codex/.github/instructions/explorer.md +16 -0
  168. package/dist/init-adapters/codex/.github/instructions/frontend.md +16 -0
  169. package/dist/init-adapters/codex/.github/instructions/git.md +16 -0
  170. package/dist/init-adapters/codex/.github/instructions/logging.md +7 -0
  171. package/dist/init-adapters/codex/.github/instructions/manager.md +16 -0
  172. package/dist/init-adapters/codex/.github/instructions/mobile.md +16 -0
  173. package/dist/init-adapters/codex/.github/instructions/native.md +16 -0
  174. package/dist/init-adapters/codex/.github/instructions/quality.md +16 -0
  175. package/dist/init-adapters/codex/.github/instructions/security.md +16 -0
  176. package/dist/init-adapters/codex/.github/instructions/tech-stack.md +9 -0
  177. package/dist/init-adapters/codex/.github/mcp_config.json +13 -0
  178. package/dist/init-adapters/codex/.github/memory/DECISIONS.md +10 -0
  179. package/dist/init-adapters/codex/.github/memory/PROJECT_MEMORY.md +8 -0
  180. package/dist/init-adapters/codex/.github/observability/audit_log.md +5 -0
  181. package/dist/init-adapters/codex/.github/observability/telemetry.md +6 -0
  182. package/dist/init-adapters/codex/.github/registry/agent_registry.md +18 -0
  183. package/dist/init-adapters/codex/.github/router/routing_rules.md +8 -0
  184. package/dist/init-adapters/codex/.github/skills/discovery.md +3 -0
  185. package/dist/init-adapters/codex/.github/skills/editing.md +3 -0
  186. package/dist/init-adapters/codex/.github/skills/execution.md +4 -0
  187. package/dist/init-adapters/codex/.github/skills/file_system.md +4 -0
  188. package/dist/init-adapters/codex/.github/skills/orchestration.md +3 -0
  189. package/dist/init-adapters/codex/.mcp.json +13 -0
  190. package/dist/init-adapters/codex/.vscode/mcp.json +13 -0
  191. package/dist/init-adapters/codex/ENDERUN.md +261 -0
  192. package/dist/init-adapters/codex/copilot-instructions.md +7 -0
  193. package/dist/init-adapters/codex/docs/README.md +6 -0
  194. package/dist/init-adapters/codex/docs/getting-started.md +4 -0
  195. package/dist/init-adapters/codex/mcp.json +13 -0
  196. package/dist/init-adapters/codex/package.json +5 -0
  197. package/dist/init-adapters/codex/panda.config.ts +2 -0
  198. package/dist/init-adapters/cursor/.cursor/BRAIN_DASHBOARD.md +11 -0
  199. package/dist/init-adapters/cursor/.cursor/STATUS.md +3 -0
  200. package/dist/init-adapters/cursor/.cursor/agents/analyst.md +17 -0
  201. package/dist/init-adapters/cursor/.cursor/agents/architect.md +17 -0
  202. package/dist/init-adapters/cursor/.cursor/agents/backend.md +17 -0
  203. package/dist/init-adapters/cursor/.cursor/agents/database.md +17 -0
  204. package/dist/init-adapters/cursor/.cursor/agents/devops.md +17 -0
  205. package/dist/init-adapters/cursor/.cursor/agents/explorer.md +17 -0
  206. package/dist/init-adapters/cursor/.cursor/agents/frontend.md +17 -0
  207. package/dist/init-adapters/cursor/.cursor/agents/git.md +17 -0
  208. package/dist/init-adapters/cursor/.cursor/agents/manager.md +17 -0
  209. package/dist/init-adapters/cursor/.cursor/agents/mobile.md +17 -0
  210. package/dist/init-adapters/cursor/.cursor/agents/native.md +17 -0
  211. package/dist/init-adapters/cursor/.cursor/agents/quality.md +17 -0
  212. package/dist/init-adapters/cursor/.cursor/agents/security.md +17 -0
  213. package/dist/init-adapters/cursor/.cursor/cli-commands.json +32 -0
  214. package/dist/init-adapters/cursor/.cursor/config.json +12 -0
  215. package/dist/init-adapters/cursor/.cursor/knowledge/agents-manifest.md +79 -0
  216. package/dist/init-adapters/cursor/.cursor/knowledge/approval-flows.md +61 -0
  217. package/dist/init-adapters/cursor/.cursor/knowledge/component-patterns.md +91 -0
  218. package/dist/init-adapters/cursor/.cursor/knowledge/data-fetching-patterns.md +13 -0
  219. package/dist/init-adapters/cursor/.cursor/knowledge/design-system.md +31 -0
  220. package/dist/init-adapters/cursor/.cursor/knowledge/enterprise-architecture.md +69 -0
  221. package/dist/init-adapters/cursor/.cursor/knowledge/error-handling.md +74 -0
  222. package/dist/init-adapters/cursor/.cursor/knowledge/eslint-standards.md +10 -0
  223. package/dist/init-adapters/cursor/.cursor/knowledge/logging.md +7 -0
  224. package/dist/init-adapters/cursor/.cursor/knowledge/tech-stack.md +9 -0
  225. package/dist/init-adapters/cursor/.cursor/mcp.json +13 -0
  226. package/dist/init-adapters/cursor/.cursor/memory/DECISIONS.md +10 -0
  227. package/dist/init-adapters/cursor/.cursor/memory/PROJECT_MEMORY.md +8 -0
  228. package/dist/init-adapters/cursor/.cursor/observability/audit_log.md +5 -0
  229. package/dist/init-adapters/cursor/.cursor/observability/telemetry.md +6 -0
  230. package/dist/init-adapters/cursor/.cursor/registry/agent_registry.md +18 -0
  231. package/dist/init-adapters/cursor/.cursor/router/routing_rules.md +8 -0
  232. package/dist/init-adapters/cursor/.cursor/rules/analyst.mdc +22 -0
  233. package/dist/init-adapters/cursor/.cursor/rules/architect.mdc +22 -0
  234. package/dist/init-adapters/cursor/.cursor/rules/backend.mdc +22 -0
  235. package/dist/init-adapters/cursor/.cursor/rules/database.mdc +22 -0
  236. package/dist/init-adapters/cursor/.cursor/rules/devops.mdc +22 -0
  237. package/dist/init-adapters/cursor/.cursor/rules/explorer.mdc +22 -0
  238. package/dist/init-adapters/cursor/.cursor/rules/frontend.mdc +22 -0
  239. package/dist/init-adapters/cursor/.cursor/rules/git.mdc +22 -0
  240. package/dist/init-adapters/cursor/.cursor/rules/manager.mdc +22 -0
  241. package/dist/init-adapters/cursor/.cursor/rules/mobile.mdc +22 -0
  242. package/dist/init-adapters/cursor/.cursor/rules/native.mdc +22 -0
  243. package/dist/init-adapters/cursor/.cursor/rules/quality.mdc +22 -0
  244. package/dist/init-adapters/cursor/.cursor/rules/security.mdc +22 -0
  245. package/dist/init-adapters/cursor/.cursor/skills/discovery.md +3 -0
  246. package/dist/init-adapters/cursor/.cursor/skills/editing.md +3 -0
  247. package/dist/init-adapters/cursor/.cursor/skills/execution.md +4 -0
  248. package/dist/init-adapters/cursor/.cursor/skills/file_system.md +4 -0
  249. package/dist/init-adapters/cursor/.cursor/skills/orchestration.md +3 -0
  250. package/dist/init-adapters/cursor/CURSOR.md +7 -0
  251. package/dist/init-adapters/cursor/ENDERUN.md +261 -0
  252. package/dist/init-adapters/cursor/docs/README.md +6 -0
  253. package/dist/init-adapters/cursor/docs/getting-started.md +4 -0
  254. package/dist/init-adapters/cursor/mcp.json +13 -0
  255. package/dist/init-adapters/cursor/package.json +5 -0
  256. package/dist/init-adapters/cursor/panda.config.ts +2 -0
  257. package/dist/init-adapters/gemini/.gemini/BRAIN_DASHBOARD.md +11 -0
  258. package/dist/init-adapters/gemini/.gemini/STATUS.md +3 -0
  259. package/dist/init-adapters/gemini/.gemini/agents/analyst.md +17 -0
  260. package/dist/init-adapters/gemini/.gemini/agents/architect.md +17 -0
  261. package/dist/init-adapters/gemini/.gemini/agents/backend.md +17 -0
  262. package/dist/init-adapters/gemini/.gemini/agents/database.md +17 -0
  263. package/dist/init-adapters/gemini/.gemini/agents/devops.md +17 -0
  264. package/dist/init-adapters/gemini/.gemini/agents/explorer.md +17 -0
  265. package/dist/init-adapters/gemini/.gemini/agents/frontend.md +17 -0
  266. package/dist/init-adapters/gemini/.gemini/agents/git.md +17 -0
  267. package/dist/init-adapters/gemini/.gemini/agents/manager.md +17 -0
  268. package/dist/init-adapters/gemini/.gemini/agents/mobile.md +17 -0
  269. package/dist/init-adapters/gemini/.gemini/agents/native.md +17 -0
  270. package/dist/init-adapters/gemini/.gemini/agents/quality.md +17 -0
  271. package/dist/init-adapters/gemini/.gemini/agents/security.md +17 -0
  272. package/dist/init-adapters/gemini/.gemini/cli-commands.json +32 -0
  273. package/dist/init-adapters/gemini/.gemini/config.json +12 -0
  274. package/dist/init-adapters/gemini/.gemini/knowledge/agents-manifest.md +79 -0
  275. package/dist/init-adapters/gemini/.gemini/knowledge/approval-flows.md +61 -0
  276. package/dist/init-adapters/gemini/.gemini/knowledge/component-patterns.md +91 -0
  277. package/dist/init-adapters/gemini/.gemini/knowledge/data-fetching-patterns.md +13 -0
  278. package/dist/init-adapters/gemini/.gemini/knowledge/design-system.md +31 -0
  279. package/dist/init-adapters/gemini/.gemini/knowledge/enterprise-architecture.md +69 -0
  280. package/dist/init-adapters/gemini/.gemini/knowledge/error-handling.md +74 -0
  281. package/dist/init-adapters/gemini/.gemini/knowledge/eslint-standards.md +10 -0
  282. package/dist/init-adapters/gemini/.gemini/knowledge/logging.md +7 -0
  283. package/dist/init-adapters/gemini/.gemini/knowledge/tech-stack.md +9 -0
  284. package/dist/init-adapters/gemini/.gemini/mcp.json +13 -0
  285. package/dist/init-adapters/gemini/.gemini/memory/DECISIONS.md +10 -0
  286. package/dist/init-adapters/gemini/.gemini/memory/PROJECT_MEMORY.md +8 -0
  287. package/dist/init-adapters/gemini/.gemini/observability/audit_log.md +5 -0
  288. package/dist/init-adapters/gemini/.gemini/observability/telemetry.md +6 -0
  289. package/dist/init-adapters/gemini/.gemini/registry/agent_registry.md +18 -0
  290. package/dist/init-adapters/gemini/.gemini/router/routing_rules.md +8 -0
  291. package/dist/init-adapters/gemini/.gemini/rules/analyst.md +16 -0
  292. package/dist/init-adapters/gemini/.gemini/rules/architect.md +16 -0
  293. package/dist/init-adapters/gemini/.gemini/rules/backend.md +16 -0
  294. package/dist/init-adapters/gemini/.gemini/rules/database.md +16 -0
  295. package/dist/init-adapters/gemini/.gemini/rules/devops.md +16 -0
  296. package/dist/init-adapters/gemini/.gemini/rules/explorer.md +16 -0
  297. package/dist/init-adapters/gemini/.gemini/rules/frontend.md +16 -0
  298. package/dist/init-adapters/gemini/.gemini/rules/git.md +16 -0
  299. package/dist/init-adapters/gemini/.gemini/rules/manager.md +16 -0
  300. package/dist/init-adapters/gemini/.gemini/rules/mobile.md +16 -0
  301. package/dist/init-adapters/gemini/.gemini/rules/native.md +16 -0
  302. package/dist/init-adapters/gemini/.gemini/rules/quality.md +16 -0
  303. package/dist/init-adapters/gemini/.gemini/rules/security.md +16 -0
  304. package/dist/init-adapters/gemini/.gemini/skills/discovery.md +3 -0
  305. package/dist/init-adapters/gemini/.gemini/skills/editing.md +3 -0
  306. package/dist/init-adapters/gemini/.gemini/skills/execution.md +4 -0
  307. package/dist/init-adapters/gemini/.gemini/skills/file_system.md +4 -0
  308. package/dist/init-adapters/gemini/.gemini/skills/orchestration.md +3 -0
  309. package/dist/init-adapters/gemini/ENDERUN.md +261 -0
  310. package/dist/init-adapters/gemini/GEMINI.md +8 -0
  311. package/dist/init-adapters/gemini/docs/README.md +6 -0
  312. package/dist/init-adapters/gemini/docs/getting-started.md +4 -0
  313. package/dist/init-adapters/gemini/mcp.json +13 -0
  314. package/dist/init-adapters/gemini/package.json +5 -0
  315. package/dist/init-adapters/gemini/panda.config.ts +2 -0
  316. package/dist/init-adapters/grok/.grok/BRAIN_DASHBOARD.md +11 -0
  317. package/dist/init-adapters/grok/.grok/STATUS.md +3 -0
  318. package/dist/init-adapters/grok/.grok/agents/analyst.md +17 -0
  319. package/dist/init-adapters/grok/.grok/agents/architect.md +17 -0
  320. package/dist/init-adapters/grok/.grok/agents/backend.md +17 -0
  321. package/dist/init-adapters/grok/.grok/agents/database.md +17 -0
  322. package/dist/init-adapters/grok/.grok/agents/devops.md +17 -0
  323. package/dist/init-adapters/grok/.grok/agents/explorer.md +17 -0
  324. package/dist/init-adapters/grok/.grok/agents/frontend.md +17 -0
  325. package/dist/init-adapters/grok/.grok/agents/git.md +17 -0
  326. package/dist/init-adapters/grok/.grok/agents/manager.md +17 -0
  327. package/dist/init-adapters/grok/.grok/agents/mobile.md +17 -0
  328. package/dist/init-adapters/grok/.grok/agents/native.md +17 -0
  329. package/dist/init-adapters/grok/.grok/agents/quality.md +17 -0
  330. package/dist/init-adapters/grok/.grok/agents/security.md +17 -0
  331. package/dist/init-adapters/grok/.grok/cli-commands.json +32 -0
  332. package/dist/init-adapters/grok/.grok/config.json +12 -0
  333. package/dist/init-adapters/grok/.grok/knowledge/agents-manifest.md +79 -0
  334. package/dist/init-adapters/grok/.grok/knowledge/approval-flows.md +61 -0
  335. package/dist/init-adapters/grok/.grok/knowledge/component-patterns.md +91 -0
  336. package/dist/init-adapters/grok/.grok/knowledge/data-fetching-patterns.md +13 -0
  337. package/dist/init-adapters/grok/.grok/knowledge/design-system.md +31 -0
  338. package/dist/init-adapters/grok/.grok/knowledge/enterprise-architecture.md +69 -0
  339. package/dist/init-adapters/grok/.grok/knowledge/error-handling.md +74 -0
  340. package/dist/init-adapters/grok/.grok/knowledge/eslint-standards.md +10 -0
  341. package/dist/init-adapters/grok/.grok/knowledge/logging.md +7 -0
  342. package/dist/init-adapters/grok/.grok/knowledge/tech-stack.md +9 -0
  343. package/dist/init-adapters/grok/.grok/mcp_config.json +13 -0
  344. package/dist/init-adapters/grok/.grok/memory/DECISIONS.md +10 -0
  345. package/dist/init-adapters/grok/.grok/memory/PROJECT_MEMORY.md +8 -0
  346. package/dist/init-adapters/grok/.grok/observability/audit_log.md +5 -0
  347. package/dist/init-adapters/grok/.grok/observability/telemetry.md +6 -0
  348. package/dist/init-adapters/grok/.grok/registry/agent_registry.md +18 -0
  349. package/dist/init-adapters/grok/.grok/router/routing_rules.md +8 -0
  350. package/dist/init-adapters/grok/.grok/rules/analyst.md +16 -0
  351. package/dist/init-adapters/grok/.grok/rules/architect.md +16 -0
  352. package/dist/init-adapters/grok/.grok/rules/backend.md +16 -0
  353. package/dist/init-adapters/grok/.grok/rules/database.md +16 -0
  354. package/dist/init-adapters/grok/.grok/rules/devops.md +16 -0
  355. package/dist/init-adapters/grok/.grok/rules/explorer.md +16 -0
  356. package/dist/init-adapters/grok/.grok/rules/frontend.md +16 -0
  357. package/dist/init-adapters/grok/.grok/rules/git.md +16 -0
  358. package/dist/init-adapters/grok/.grok/rules/manager.md +16 -0
  359. package/dist/init-adapters/grok/.grok/rules/mobile.md +16 -0
  360. package/dist/init-adapters/grok/.grok/rules/native.md +16 -0
  361. package/dist/init-adapters/grok/.grok/rules/quality.md +16 -0
  362. package/dist/init-adapters/grok/.grok/rules/security.md +16 -0
  363. package/dist/init-adapters/grok/.grok/skills/discovery.md +3 -0
  364. package/dist/init-adapters/grok/.grok/skills/editing.md +3 -0
  365. package/dist/init-adapters/grok/.grok/skills/execution.md +4 -0
  366. package/dist/init-adapters/grok/.grok/skills/file_system.md +4 -0
  367. package/dist/init-adapters/grok/.grok/skills/orchestration.md +3 -0
  368. package/dist/init-adapters/grok/ENDERUN.md +261 -0
  369. package/dist/init-adapters/grok/GROK.md +7 -0
  370. package/dist/init-adapters/grok/docs/README.md +6 -0
  371. package/dist/init-adapters/grok/docs/getting-started.md +4 -0
  372. package/dist/init-adapters/grok/mcp.json +13 -0
  373. package/dist/init-adapters/grok/package.json +5 -0
  374. package/dist/init-adapters/grok/panda.config.ts +2 -0
  375. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/mcp.json +13 -0
  376. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/mcp_config.json +13 -0
  377. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/analyst/agent.json +28 -0
  378. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/analyst.json +28 -0
  379. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/architect/agent.json +30 -0
  380. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/architect.json +30 -0
  381. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/backend/agent.json +30 -0
  382. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/backend.json +30 -0
  383. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/database/agent.json +29 -0
  384. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/database.json +29 -0
  385. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/devops/agent.json +28 -0
  386. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/devops.json +28 -0
  387. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/explorer/agent.json +29 -0
  388. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/explorer.json +29 -0
  389. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/frontend/agent.json +29 -0
  390. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/frontend.json +29 -0
  391. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/git/agent.json +28 -0
  392. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/git.json +28 -0
  393. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/manager/agent.json +30 -0
  394. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/manager.json +30 -0
  395. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/mobile/agent.json +29 -0
  396. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/mobile.json +29 -0
  397. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/native/agent.json +29 -0
  398. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/native.json +29 -0
  399. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/quality/agent.json +29 -0
  400. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/quality.json +29 -0
  401. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/security/agent.json +29 -0
  402. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/agents/security.json +29 -0
  403. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/hooks.json +4 -0
  404. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/mcp.json +13 -0
  405. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/mcp_config.json +13 -0
  406. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/plugin.json +5 -0
  407. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/analyst.md +11 -0
  408. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/architect.md +11 -0
  409. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/backend.md +11 -0
  410. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/database.md +11 -0
  411. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/devops.md +11 -0
  412. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/explorer.md +11 -0
  413. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/frontend.md +11 -0
  414. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/git.md +11 -0
  415. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/manager.md +11 -0
  416. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/mobile.md +11 -0
  417. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/native.md +11 -0
  418. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/quality.md +11 -0
  419. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/rules/security.md +11 -0
  420. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/skills/discovery.md +3 -0
  421. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/skills/editing.md +3 -0
  422. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/skills/execution.md +4 -0
  423. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/skills/file_system.md +4 -0
  424. package/dist/init-adapters/mock-home/.gemini/antigravity-cli/plugins/agent-enderun/skills/orchestration.md +3 -0
  425. package/dist/init-adapters/mock-home/Library/Application Support/Claude/claude_desktop_config.json +13 -0
  426. package/dist/src/cli/adapters.js +11 -10
  427. package/dist/src/cli/adapters.js.map +1 -1
  428. package/dist/src/cli/commands/approve.d.ts +1 -0
  429. package/dist/src/cli/commands/approve.js +64 -0
  430. package/dist/src/cli/commands/approve.js.map +1 -0
  431. package/dist/src/cli/commands/check.js +87 -5
  432. package/dist/src/cli/commands/check.js.map +1 -1
  433. package/dist/src/cli/commands/contract.js +3 -25
  434. package/dist/src/cli/commands/contract.js.map +1 -1
  435. package/dist/src/cli/commands/init.js +167 -10
  436. package/dist/src/cli/commands/init.js.map +1 -1
  437. package/dist/src/cli/commands/knowledge.js +2 -3
  438. package/dist/src/cli/commands/knowledge.js.map +1 -1
  439. package/dist/src/cli/commands/log.js +1 -2
  440. package/dist/src/cli/commands/log.js.map +1 -1
  441. package/dist/src/cli/commands/orchestrate.d.ts +43 -9
  442. package/dist/src/cli/commands/orchestrate.js +161 -16
  443. package/dist/src/cli/commands/orchestrate.js.map +1 -1
  444. package/dist/src/cli/commands/status.js +35 -0
  445. package/dist/src/cli/commands/status.js.map +1 -1
  446. package/dist/src/cli/index.js +18 -4
  447. package/dist/src/cli/index.js.map +1 -1
  448. package/dist/src/cli/shims.d.ts +1 -0
  449. package/dist/src/cli/shims.js +54 -0
  450. package/dist/src/cli/shims.js.map +1 -0
  451. package/dist/src/cli/utils/app.js +118 -33
  452. package/dist/src/cli/utils/app.js.map +1 -1
  453. package/dist/src/cli/utils/fs.d.ts +1 -0
  454. package/dist/src/cli/utils/fs.js +15 -0
  455. package/dist/src/cli/utils/fs.js.map +1 -1
  456. package/dist/src/cli/utils/memory.js +11 -1
  457. package/dist/src/cli/utils/memory.js.map +1 -1
  458. package/dist/src/modules/agents/definitions.js +12 -12
  459. package/dist/src/modules/agents/definitions.js.map +1 -1
  460. package/dist/src/modules/skills/definitions.d.ts +19 -2
  461. package/dist/src/modules/skills/definitions.js +53 -14
  462. package/dist/src/modules/skills/definitions.js.map +1 -1
  463. package/dist/src/shared/config.d.ts +41 -0
  464. package/dist/src/shared/config.js +61 -0
  465. package/dist/src/shared/config.js.map +1 -0
  466. package/dist/src/shared/container.d.ts +25 -0
  467. package/dist/src/shared/container.js +56 -0
  468. package/dist/src/shared/container.js.map +1 -0
  469. package/dist/src/shared/errors.d.ts +44 -0
  470. package/dist/src/shared/errors.js +66 -0
  471. package/dist/src/shared/errors.js.map +1 -0
  472. package/dist/src/shared/logger.d.ts +28 -0
  473. package/dist/src/shared/logger.js +117 -0
  474. package/dist/src/shared/logger.js.map +1 -0
  475. package/dist/tests/mock-project/apps/web/panda.config.d.ts +4 -0
  476. package/dist/tests/mock-project/apps/web/panda.config.js +3 -0
  477. package/dist/tests/mock-project/apps/web/panda.config.js.map +1 -0
  478. package/dist/tests/shared.test.d.ts +1 -0
  479. package/dist/tests/shared.test.js +80 -0
  480. package/dist/tests/shared.test.js.map +1 -0
  481. package/eslint.config.js +2 -1
  482. package/framework-mcp/dist/index.js +7 -1
  483. package/framework-mcp/dist/tools/definitions.js +1 -0
  484. package/framework-mcp/dist/tools/file_system/patch_file.js +3 -0
  485. package/framework-mcp/dist/tools/file_system/read_file.js +7 -0
  486. package/framework-mcp/dist/tools/file_system/replace_text.js +3 -0
  487. package/framework-mcp/dist/tools/messaging/send_message.js +41 -11
  488. package/framework-mcp/package.json +1 -1
  489. package/framework-mcp/src/index.ts +8 -1
  490. package/framework-mcp/src/tools/definitions.ts +1 -0
  491. package/framework-mcp/src/tools/file_system/patch_file.ts +6 -0
  492. package/framework-mcp/src/tools/file_system/read_file.ts +7 -1
  493. package/framework-mcp/src/tools/file_system/replace_text.ts +6 -0
  494. package/framework-mcp/src/tools/messaging/send_message.ts +39 -12
  495. package/framework-mcp/src/tools/types.ts +1 -0
  496. package/framework-mcp/tests/tools/file_system/file_system_tools.test.ts +42 -0
  497. package/framework-mcp/tests/tools/messaging/send_message.test.ts +136 -0
  498. package/package.json +9 -6
  499. package/src/cli/adapters.ts +13 -11
  500. package/src/cli/commands/approve.ts +65 -0
  501. package/src/cli/commands/check.ts +98 -5
  502. package/src/cli/commands/contract.ts +3 -29
  503. package/src/cli/commands/init.ts +187 -10
  504. package/src/cli/commands/knowledge.ts +2 -4
  505. package/src/cli/commands/log.ts +1 -3
  506. package/src/cli/commands/orchestrate.ts +164 -29
  507. package/src/cli/commands/status.ts +33 -0
  508. package/src/cli/index.ts +180 -163
  509. package/src/cli/shims.ts +53 -0
  510. package/src/cli/utils/app.ts +124 -33
  511. package/src/cli/utils/fs.ts +17 -0
  512. package/src/cli/utils/memory.ts +11 -1
  513. package/src/modules/agents/definitions.ts +12 -12
  514. package/src/modules/skills/definitions.ts +53 -14
  515. package/src/schema/agent-lifecycle-schema.json +59 -0
  516. package/src/shared/config.ts +73 -0
  517. package/src/shared/container.ts +67 -0
  518. package/src/shared/errors.ts +72 -0
  519. package/src/shared/logger.ts +139 -0
  520. package/templates/architecture/agents-manifest.md +79 -0
  521. package/templates/architecture/enterprise-architecture.md +69 -0
  522. package/templates/architecture/standards/crud-governance.md +46 -0
  523. package/templates/architecture/standards/data-fetching-patterns.md +13 -0
  524. package/templates/architecture/standards/design-system.md +31 -0
  525. package/templates/architecture/standards/documentation-ownership.md +21 -0
  526. package/templates/architecture/standards/logging.md +7 -0
  527. package/templates/architecture/standards/mobile-standards.md +48 -0
  528. package/templates/architecture/standards/tech-stack.md +9 -0
  529. package/templates/backend/error-handling.md +74 -0
  530. package/templates/frontend/component-patterns.md +91 -0
  531. package/tsconfig.json +1 -0
  532. package/docs/getting-started.md +0 -22
  533. /package/{docs/frontend → dist/init-adapters/antigravity-cli/.agents/knowledge}/component-patterns.md +0 -0
  534. /package/{docs/architecture/standards → dist/init-adapters/antigravity-cli/.agents/knowledge}/data-fetching-patterns.md +0 -0
  535. /package/{docs/architecture/standards → dist/init-adapters/antigravity-cli/.agents/knowledge}/design-system.md +0 -0
  536. /package/{docs/backend → dist/init-adapters/antigravity-cli/.agents/knowledge}/error-handling.md +0 -0
  537. /package/{docs/architecture/standards → dist/init-adapters/antigravity-cli/.agents/knowledge}/logging.md +0 -0
  538. /package/{docs/architecture/standards → dist/init-adapters/antigravity-cli/.agents/knowledge}/tech-stack.md +0 -0
  539. /package/{docs → templates}/architecture/approval-flows.md +0 -0
@@ -11,7 +11,8 @@ import {
11
11
  } from "../adapters.js";
12
12
  import { getPackageRoot, getPackageVersion } from "../utils/pkg.js";
13
13
  import { ensureDir, writeJsonFile } from "../utils/fs.js";
14
- import { initializeMemory } from "../utils/memory.js";
14
+ import { initializeMemory, getConfiguredPaths } from "../utils/memory.js";
15
+ import { SHIM_TEMPLATES } from "../shims.js";
15
16
 
16
17
  // Import Modular Definitions
17
18
  import { ALL_AGENTS, buildAgentJson } from "../../modules/agents/definitions.js";
@@ -22,7 +23,6 @@ const FRAMEWORK_NAME = "Enderun Core";
22
23
  const FRAMEWORK_VERSION = getPackageVersion();
23
24
 
24
25
  const FRAMEWORK_SUBDIRS = [
25
- "apps",
26
26
  "agents",
27
27
  "skills",
28
28
  "knowledge",
@@ -33,6 +33,7 @@ const FRAMEWORK_SUBDIRS = [
33
33
  "rules",
34
34
  ];
35
35
 
36
+
36
37
  const COLOR_PALETTES = {
37
38
  "Modern Blue": { primary: "#0ea5e9", secondary: "#64748b", accent: "#f43f5e" },
38
39
  "Enterprise Slate": { primary: "#334155", secondary: "#94a3b8", accent: "#10b981" },
@@ -68,16 +69,19 @@ async function runInteractiveInit(): Promise<{ selectedDirs: string[], selectedA
68
69
  function scaffoldConstitution(targetDir: string, frameworkDir: string, adapterId: AdapterId, dryRun: boolean) {
69
70
  if (dryRun) return;
70
71
  let content = `# 🎖️ ${FRAMEWORK_NAME} — Constitution (v${FRAMEWORK_VERSION})\n\nDiscipline and Order.`;
72
+ let readSuccess = false;
71
73
  try {
72
74
  const templatePath = path.join(getPackageRoot(), "ENDERUN.md");
73
75
  if (fs.existsSync(templatePath)) {
74
76
  content = fs.readFileSync(templatePath, "utf8");
77
+ readSuccess = true;
75
78
  }
76
- } catch {
77
- // Fallback to default content
79
+ } catch (e) {
80
+ console.warn(`⚠️ Failed to read global constitution template: ${e}`);
78
81
  }
79
82
  content = remapFrameworkContent(content, frameworkDir, adapterId);
80
83
  fs.writeFileSync(path.join(targetDir, "ENDERUN.md"), content);
84
+ console.warn(`✅ Constitution file created: ENDERUN.md${readSuccess ? "" : " (default template)"}`);
81
85
  }
82
86
 
83
87
  function scaffoldCoreAgents(agentsToScaffold: string[], agentsBaseDir: string, adapterId: string, dryRun: boolean) {
@@ -104,10 +108,12 @@ function scaffoldCoreAgents(agentsToScaffold: string[], agentsBaseDir: string, a
104
108
  const mdContent = `---
105
109
  name: "${ag.name}"
106
110
  description: "${ag.description}"
107
- capability: ${ag.capability}
108
- tags: [${ag.tags.map(t => `"${t}"`).join(", ")}]
109
111
  ---
110
112
 
113
+ <!-- capability: ${ag.capability} -->
114
+ <!-- tags: [${ag.tags.map(t => `"${t}"`).join(", ")}] -->
115
+
116
+
111
117
  # 🎖️ ${FRAMEWORK_NAME} — @${ag.name} (${ag.displayName})
112
118
 
113
119
  ## 🤖 Talimatlar (Instructions)
@@ -128,7 +134,16 @@ function scaffoldSkills(skillsBaseDir: string, dryRun: boolean) {
128
134
  if (dryRun) return;
129
135
  ensureDir(skillsBaseDir, dryRun);
130
136
  for (const [key, skill] of Object.entries(CORE_SKILLS)) {
131
- const mdContent = `# 🛠️ ${FRAMEWORK_NAME} Skill — ${skill.name}\n\n${skill.mandates.join("\n")}\n`;
137
+ const mdContent = `# 🛠️ ${FRAMEWORK_NAME} Skill — ${skill.name}
138
+
139
+ ${skill.description}
140
+
141
+ ## 🔌 Associated Tools
142
+ ${skill.tools.map(t => `- \`${t}\``).join("\n")}
143
+
144
+ ## 🛡️ Core Mandates
145
+ ${skill.mandates.join("\n")}
146
+ `;
132
147
  fs.writeFileSync(path.join(skillsBaseDir, `${key.toLowerCase()}.md`), mdContent);
133
148
  }
134
149
  }
@@ -147,7 +162,29 @@ function scaffoldFrameworkConfigs(targetDir: string, fDir: string, adapter: Adap
147
162
  }
148
163
  };
149
164
  writeJsonFile(path.join(frameworkDir, "config.json"), config, dryRun);
150
- fs.writeFileSync(path.join(frameworkDir, "STATUS.md"), "# 🎖️ Status\n\nStable.\n");
165
+ let statusContent = "# 🎖️ Status\n\n| Agent | State | Active Task | Last Updated | Notes | Extra | Backup |\n|---|---|---|---|---|---|---|\n";
166
+ for (const ag of ALL_AGENTS) {
167
+ statusContent += "| @" + ag.name + " | READY | Idle | - | - | - | - |\n";
168
+ }
169
+ fs.writeFileSync(path.join(frameworkDir, "STATUS.md"), statusContent);
170
+
171
+ // Scaffold eslint-standards.md
172
+ let knowledgeDir = "knowledge";
173
+ if (fDir === ".github") knowledgeDir = "instructions";
174
+ const eslintStandardsContent = `# 🎖️ Agent Enderun — ESLint Standards
175
+
176
+ This document outlines the strict ESLint coding standards for Agent Enderun projects.
177
+
178
+ ## 📏 Core Rules
179
+ - **Indentation:** 4 spaces (strict).
180
+ - **Quotes:** Double quotes (\`"\`) for strings.
181
+ - **Semicolons:** Always terminate statements with a semicolon (\`;\`).
182
+ - **No Explicit Any:** Avoid using \`any\`. Use strongly typed interfaces, generics, or \`unknown\` with type assertions.
183
+ - **Unused Variables:** Warning on unused variables unless prefixed with an underscore (\`_\`).
184
+ `;
185
+ const knowledgePath = path.join(frameworkDir, knowledgeDir);
186
+ if (!fs.existsSync(knowledgePath)) fs.mkdirSync(knowledgePath, { recursive: true });
187
+ fs.writeFileSync(path.join(knowledgePath, "eslint-standards.md"), eslintStandardsContent);
151
188
 
152
189
  // Scaffold cli-commands.json
153
190
  const cliCommands = {
@@ -166,9 +203,125 @@ function scaffoldFrameworkConfigs(targetDir: string, fDir: string, adapter: Adap
166
203
  // Scaffold BRAIN_DASHBOARD.md
167
204
  fs.writeFileSync(path.join(frameworkDir, "BRAIN_DASHBOARD.md"), "# 🧠 Brain Dashboard\n\nActive Trace: T-000\nActive Phase: PHASE_0 (Genesis)\n\n## Ajan Durumları (Agent Statuses)\n- @manager: READY\n- @architect: READY\n- @backend: READY\n- @frontend: READY\n- @quality: READY\n");
168
205
 
206
+ // Scaffold router/routing_rules.md
207
+ const routerDir = path.join(frameworkDir, "router");
208
+ if (!fs.existsSync(routerDir)) fs.mkdirSync(routerDir, { recursive: true });
209
+ fs.writeFileSync(
210
+ path.join(routerDir, "routing_rules.md"),
211
+ `# 📡 Agent Enderun — Natural Language & Event Router
212
+
213
+ This configuration governs how user inputs and event messages are routed across the 12 expert agents.
214
+
215
+ ## 🧭 Routing Engine Protocols
216
+ - **User Input Routing:** By default, all un-targeted natural language prompts are routed to the \`@manager\` agent for analysis and decomposition into a Directed Acyclic Graph (DAG) task list.
217
+ - **Targeted Input Routing:** Prompts beginning with \`@<agent_name>\` (e.g., \`@backend\`) bypass the general manager routing and are directly appended to the target agent's Hermes mailbox.
218
+ - **Hermes Event Loops:** Agents publish status changes and handoffs which the message broker routes dynamically according to active dependencies.
219
+ `
220
+ );
221
+
222
+ // Scaffold registry/agent_registry.md
223
+ const registryDir = path.join(frameworkDir, "registry");
224
+ if (!fs.existsSync(registryDir)) fs.mkdirSync(registryDir, { recursive: true });
225
+ fs.writeFileSync(
226
+ path.join(registryDir, "agent_registry.md"),
227
+ `# 🎖️ Agent Enderun — Army Registry
228
+
229
+ List of active agents, their roles, capacities, and matching directory patterns.
230
+
231
+ | Agent Name | Role | Scope / Globs | Action Compliance |
232
+ |---|---|---|---|
233
+ | \`@manager\` | Orchestrator & Controller | \`*\` | Rules Verification |
234
+ | \`@quality\` | Quality & Test Enforcer | \`*\` | AST Security Scans |
235
+ | \`@database\` | Database Optimizer | \`apps/backend/src/database/**/*\` | Schema & Migrations |
236
+ | \`@backend\` | Core Domain Developer | \`apps/backend/**/*\` | Branded Types & APIs |
237
+ | \`@frontend\` | UI/UX Developer | \`apps/web/**/*\` | Panda CSS, Fluid UI |
238
+ | \`@mobile\` | Mobile App Specialist | \`apps/mobile/**/*\` | Expo/React Native |
239
+ | \`@native\` | Desktop / Native Integrator | \`apps/native/**/*\` | Electron/Tauri |
240
+ | \`@devops\` | Deployment & CI/CD | CI/CD YAML & Deployment files | Native Rollbacks |
241
+ | \`@explorer\` | Codebase Discovery | All source directories | Onboarding & Audit |
242
+ | \`@git\` | Version Control System | \`.git/\` & Commit traces | Trace ID commits |
243
+ | \`@security\` | Security Officer | All source directories | RLS & Secrets Scan |
244
+ | \`@analyst\` | Contract Validator | Contract and API schema definitions | SHA-256 validation |
245
+ `
246
+ );
247
+
248
+ // Scaffold observability files
249
+ const obsDir = path.join(frameworkDir, "observability");
250
+ if (!fs.existsSync(obsDir)) fs.mkdirSync(obsDir, { recursive: true });
251
+ fs.writeFileSync(
252
+ path.join(obsDir, "audit_log.md"),
253
+ `# 🕵️ Agent Enderun — Audit Log
254
+
255
+ This log tracks all asynchronous agent communication and state transitions handled by the Hermes Message Broker.
256
+
257
+ ## Hermes Event Log
258
+ `
259
+ );
260
+ fs.writeFileSync(
261
+ path.join(obsDir, "telemetry.md"),
262
+ `# 📊 Agent Enderun — Telemetry & Memory Observability
263
+
264
+ ## 🧠 Context & Token Observability
265
+ - **Memory File:** \`${fDir}/memory/PROJECT_MEMORY.md\` (SSOT)
266
+ - **Pruning Trigger:** Active history entries are pruned and archived under \`${fDir}/memory-graph/archive/\` once the log exceeds 10 records.
267
+ - **Audit Logs:** Agent interactions are saved locally inside \`observability/audit_log.md\` to keep API usage transparent and track performance bottlenecks.
268
+ `
269
+ );
270
+
169
271
  if (fDir === adapter.frameworkDir) {
170
272
  const entryFileName = adapter.shimFile || `${adapter.id.toUpperCase()}.md`;
171
- fs.writeFileSync(path.join(targetDir, entryFileName), `# 🎖️ ${FRAMEWORK_NAME} — ${adapter.id.toUpperCase()} Strategy\n`);
273
+ const destShimPath = path.join(targetDir, entryFileName);
274
+
275
+ let shimContent = SHIM_TEMPLATES[adapter.id] || `# 🎖️ ${FRAMEWORK_NAME} — ${adapter.id.toUpperCase()} Strategy\n`;
276
+ shimContent = remapFrameworkContent(shimContent, fDir, adapter.id);
277
+
278
+ fs.writeFileSync(destShimPath, shimContent);
279
+ console.warn(`✅ Strategy shim created: ${entryFileName}`);
280
+ }
281
+ }
282
+
283
+ function scaffoldKnowledgeDocs(targetDir: string, fDir: string, dryRun: boolean) {
284
+ if (dryRun) return;
285
+ const pkgRoot = getPackageRoot();
286
+ const sourceDocsDir = path.join(pkgRoot, "templates");
287
+ const frameworkDir = path.join(targetDir, fDir);
288
+
289
+ let knowledgeDirName = "knowledge";
290
+ if (fDir === ".github") knowledgeDirName = "instructions";
291
+ const destKnowledgeDir = path.join(frameworkDir, knowledgeDirName);
292
+
293
+ if (!fs.existsSync(destKnowledgeDir)) {
294
+ fs.mkdirSync(destKnowledgeDir, { recursive: true });
295
+ }
296
+
297
+ const filesToCopy = [
298
+ { src: "architecture/standards/data-fetching-patterns.md", dest: "data-fetching-patterns.md" },
299
+ { src: "architecture/standards/design-system.md", dest: "design-system.md" },
300
+ { src: "architecture/standards/logging.md", dest: "logging.md" },
301
+ { src: "architecture/standards/tech-stack.md", dest: "tech-stack.md" },
302
+ { src: "architecture/standards/documentation-ownership.md", dest: "documentation_ownership.md" },
303
+ { src: "architecture/standards/mobile-standards.md", dest: "mobile_standards.md" },
304
+ { src: "architecture/standards/crud-governance.md", dest: "crud-governance.md" },
305
+ { src: "backend/error-handling.md", dest: "error-handling.md" },
306
+ { src: "frontend/component-patterns.md", dest: "component-patterns.md" },
307
+ { src: "architecture/enterprise-architecture.md", dest: "enterprise-architecture.md" },
308
+ { src: "architecture/approval-flows.md", dest: "approval-flows.md" },
309
+ { src: "architecture/agents-manifest.md", dest: "agents-manifest.md" }
310
+ ];
311
+
312
+ for (const item of filesToCopy) {
313
+ const srcPath = path.join(sourceDocsDir, item.src);
314
+ const destPath = path.join(destKnowledgeDir, item.dest);
315
+ try {
316
+ if (fs.existsSync(srcPath)) {
317
+ let content = fs.readFileSync(srcPath, "utf8");
318
+ content = remapFrameworkContent(content, fDir, fDir === ".github" ? "codex" : "gemini");
319
+ fs.writeFileSync(destPath, content);
320
+ console.warn(`✅ Copied document: ${item.dest} to ${fDir}/${knowledgeDirName}/`);
321
+ }
322
+ } catch (e) {
323
+ console.warn(`⚠️ Failed to copy ${item.src} to ${destPath}: ${e}`);
324
+ }
172
325
  }
173
326
  }
174
327
 
@@ -187,6 +340,7 @@ export async function initCommand(adapterInput?: string, dryRun = false, isInter
187
340
  scaffoldCoreAgents(selections.selectedAgents, path.join(base, "agents"), adapter.id, dryRun);
188
341
  scaffoldSkills(path.join(base, "skills"), dryRun);
189
342
  scaffoldFrameworkConfigs(targetDir, fdir, adapter, dryRun, selections.selectedPalette);
343
+ scaffoldKnowledgeDocs(targetDir, fdir, dryRun);
190
344
 
191
345
  // NATIVE TOOL CONFIGURATION (MCP REGISTRATION)
192
346
  if (!dryRun) {
@@ -196,10 +350,33 @@ export async function initCommand(adapterInput?: string, dryRun = false, isInter
196
350
 
197
351
  scaffoldConstitution(targetDir, adapter.frameworkDir, adapter.id, dryRun);
198
352
  ensureDir(path.join(targetDir, "apps"), dryRun);
353
+
354
+ // Scaffold target project docs/ folder
355
+ const targetDocsDir = path.join(targetDir, "docs");
356
+ ensureDir(targetDocsDir, dryRun);
357
+ if (!dryRun) {
358
+ const readmePath = path.join(targetDocsDir, "README.md");
359
+ if (!fs.existsSync(readmePath)) {
360
+ fs.writeFileSync(readmePath, "# 📝 Project Documentation\n\nWelcome to your new project scaffolded with Agent Enderun.\n\n## Project Overview\nWrite your project description, goals, and target audience here. The AI agents will read this file to understand the scope.\n");
361
+ }
362
+ const gettingStartedPath = path.join(targetDocsDir, "getting-started.md");
363
+ if (!fs.existsSync(gettingStartedPath)) {
364
+ fs.writeFileSync(gettingStartedPath, "# 🚀 Getting Started\n\n## Project Requirements\nWrite the core requirements and features of your application here.\n");
365
+ }
366
+ console.warn("✅ Project docs folder initialized with placeholders.");
367
+ }
368
+
199
369
  initializeMemory(path.join(targetDir, adapter.frameworkDir, "memory/PROJECT_MEMORY.md"), adapter.frameworkDir, dryRun);
200
370
  const mcpConfig = { mcpServers: { "agent-enderun": { command: "node", args: [path.join(getPackageRoot(), "framework-mcp/dist/index.js")], env: { ENDERUN_PROJECT_ROOT: targetDir } } } };
201
371
  fs.writeFileSync(path.join(targetDir, "mcp.json"), JSON.stringify(mcpConfig, null, 2));
372
+
373
+ const paths = getConfiguredPaths();
374
+ const frontendDir = path.join(targetDir, paths.frontend);
375
+ ensureDir(frontendDir, dryRun);
376
+
202
377
  const pandaTemplate = `import { defineConfig } from "@pandacss/dev";\nexport default defineConfig({ theme: { extend: { tokens: { colors: { primary: { value: "${COLOR_PALETTES[selections.selectedPalette as keyof typeof COLOR_PALETTES]?.primary || "#0ea5e9"}" } } } } } });`;
203
- fs.writeFileSync(path.join(targetDir, "panda.config.ts"), pandaTemplate);
378
+ if (!dryRun) {
379
+ fs.writeFileSync(path.join(frontendDir, "panda.config.ts"), pandaTemplate);
380
+ }
204
381
  console.warn(`\n✨ ${FRAMEWORK_NAME} scaffolded! (v${FRAMEWORK_VERSION})`);
205
382
  }
@@ -3,15 +3,13 @@ import path from "path";
3
3
 
4
4
  import { getFrameworkDir } from "../utils/memory.js";
5
5
 
6
- const targetDir = process.cwd(); // Assuming targetDir is process.cwd() in the CLI context
7
-
8
6
  export function updateKnowledgeBaseCommand(topic: string, content: string) {
9
7
  if (!topic || !content) {
10
8
  console.error("❌ Usage: agent-enderun update_knowledge_base <topic> <content>");
11
9
  return;
12
10
  }
13
11
  const frameworkDir = getFrameworkDir();
14
- const kbDir = path.join(targetDir, frameworkDir, "knowledge");
12
+ const kbDir = path.join(frameworkDir, "knowledge");
15
13
  if (!fs.existsSync(kbDir)) fs.mkdirSync(kbDir, { recursive: true });
16
14
  const fileName = topic.replace(/[^a-z0-9]/gi, "_").toLowerCase() + ".md";
17
15
  fs.writeFileSync(path.join(kbDir, fileName), content);
@@ -24,7 +22,7 @@ export function searchKnowledgeBaseCommand(query: string) {
24
22
  return;
25
23
  }
26
24
  const frameworkDir = getFrameworkDir();
27
- const kbDir = path.join(targetDir, frameworkDir, "knowledge");
25
+ const kbDir = path.join(frameworkDir, "knowledge");
28
26
  if (!fs.existsSync(kbDir)) {
29
27
  console.warn("ℹ️ Knowledge base is empty.");
30
28
  return;
@@ -4,11 +4,9 @@ import path from "path";
4
4
  import { getFrameworkDir } from "../utils/memory.js";
5
5
  import { normalizeAgentName } from "../utils/string.js";
6
6
 
7
- const targetDir = process.cwd(); // Assuming targetDir is process.cwd() in the CLI context
8
-
9
7
  export function logAgentActionCommand(data: { agent?: unknown; action?: string; requestId?: string; traceId?: string; status?: string; summary?: string; files?: string[]; details?: Record<string, unknown> }) {
10
8
  const frameworkDir = getFrameworkDir();
11
- const logsDir = path.join(targetDir, frameworkDir, "logs");
9
+ const logsDir = path.join(frameworkDir, "logs");
12
10
  if (!fs.existsSync(logsDir)) {
13
11
  fs.mkdirSync(logsDir, { recursive: true });
14
12
  }
@@ -3,24 +3,69 @@ import path from "path";
3
3
  import chalk from "chalk";
4
4
  import { getFrameworkDir } from "../utils/memory.js";
5
5
  import { UI } from "../utils/ui.js";
6
+ import { z } from "zod";
6
7
 
7
- /**
8
- * Hermes Protocol Message for Multi-Agent Collaboration.
9
- */
10
- interface HermesMessage {
11
- timestamp: string;
12
- from: string;
13
- to: string;
14
- category: "ACTION" | "DELEGATION" | "SUBTASK" | "REPLY" | "ALERT";
15
- content: string;
16
- traceId: string;
17
- parentId?: string; // Links sub-tasks to parent tasks
18
- status: "PENDING" | "PROCESSED" | "WAITING";
19
- }
8
+ export const HermesMessageSchema = z.object({
9
+ timestamp: z.string(),
10
+ from: z.string(),
11
+ to: z.string(),
12
+ category: z.enum(["ACTION", "DELEGATION", "SUBTASK", "REPLY", "ALERT"]),
13
+ content: z.string(),
14
+ traceId: z.string(),
15
+ parentId: z.string().optional(),
16
+ status: z.enum(["PENDING", "PROCESSED", "WAITING", "APPROVED"]),
17
+ priority: z.enum(["HIGH", "NORMAL", "LOW"]).optional(),
18
+ action: z.string().optional()
19
+ });
20
+
21
+ export type HermesMessage = z.infer<typeof HermesMessageSchema>;
20
22
 
21
23
  export async function orchestrateCommand() {
22
24
  const frameworkDir = getFrameworkDir();
23
- const messagesDir = path.join(process.cwd(), frameworkDir, "messages");
25
+ const messagesDir = path.join(frameworkDir, "messages");
26
+
27
+ // Check for agent timeouts (e.g. 30 minutes in EXECUTING state)
28
+ const statusPath = path.join(frameworkDir, "STATUS.md");
29
+ if (fs.existsSync(statusPath)) {
30
+ try {
31
+ const content = fs.readFileSync(statusPath, "utf8");
32
+ const lines = content.split("\n");
33
+ let updatedStatus = false;
34
+ const newLines = lines.map(line => {
35
+ if (line.includes("| @") && line.includes("| EXECUTING |")) {
36
+ const parts = line.split("|");
37
+ if (parts.length >= 7) {
38
+ const lastUpdatedStr = parts[4].trim();
39
+ if (lastUpdatedStr && lastUpdatedStr !== "-") {
40
+ const lastUpdatedTime = Date.parse(lastUpdatedStr);
41
+ if (!isNaN(lastUpdatedTime) && Date.now() - lastUpdatedTime > 30 * 60 * 1000) {
42
+ const agentName = parts[1].trim();
43
+ UI.error(`⚠️ Agent ${agentName} has TIMED OUT (in EXECUTING state for >30m). Transitioning to BLOCKED.`);
44
+ parts[2] = " BLOCKED ";
45
+ parts[3] = " Timeout occurred ";
46
+ parts[4] = ` ${new Date().toISOString()} `;
47
+ updatedStatus = true;
48
+
49
+ // Log to audit log
50
+ const auditPath = path.join(frameworkDir, "observability/audit_log.md");
51
+ if (fs.existsSync(auditPath)) {
52
+ const logEntry = `\n- **[${new Date().toISOString()}]** ${agentName} status auto-escalated to BLOCKED due to 30m execution timeout.`;
53
+ fs.appendFileSync(auditPath, logEntry);
54
+ }
55
+ return parts.join("|");
56
+ }
57
+ }
58
+ }
59
+ }
60
+ return line;
61
+ });
62
+ if (updatedStatus) {
63
+ fs.writeFileSync(statusPath, newLines.join("\n"));
64
+ }
65
+ } catch {
66
+ UI.error("Ajan zaman aşımı kontrolü sırasında hata oluştu.");
67
+ }
68
+ }
24
69
 
25
70
  if (!fs.existsSync(messagesDir)) {
26
71
  UI.success("Henüz işlenecek bir mesaj yok.");
@@ -40,11 +85,16 @@ export async function orchestrateCommand() {
40
85
  const allMsgs: HermesMessage[] = [];
41
86
  lines.forEach((line) => {
42
87
  if (!line.trim()) return;
43
- const msg = JSON.parse(line) as HermesMessage;
44
- if (msg.status === "PENDING") {
45
- pendingMessages.push(msg);
88
+ try {
89
+ const parsed = JSON.parse(line);
90
+ const msg = HermesMessageSchema.parse(parsed);
91
+ if (msg.status === "PENDING") {
92
+ pendingMessages.push(msg);
93
+ }
94
+ allMsgs.push(msg);
95
+ } catch (e) {
96
+ UI.error(`Geçersiz Hermes mesaj formatı atlandı: ${(e as Error).message}`);
46
97
  }
47
- allMsgs.push(msg);
48
98
  });
49
99
  fileMessagesMap[file] = allMsgs;
50
100
  } catch {
@@ -57,6 +107,15 @@ export async function orchestrateCommand() {
57
107
  return;
58
108
  }
59
109
 
110
+ // Sort by priority: HIGH -> NORMAL -> LOW
111
+ const priorityOrder = { HIGH: 1, NORMAL: 2, LOW: 3 };
112
+ pendingMessages.sort((a, b) => {
113
+ const pA = priorityOrder[a.priority || "NORMAL"] || 2;
114
+ const pB = priorityOrder[b.priority || "NORMAL"] || 2;
115
+ if (pA !== pB) return pA - pB;
116
+ return Date.parse(a.timestamp) - Date.parse(b.timestamp);
117
+ });
118
+
60
119
  UI.intent("Multi-Agent Orkestrasyonu", `${pendingMessages.length} adet bekleyen görev ve işbirliği mesajı bulundu.`);
61
120
 
62
121
  for (const msg of pendingMessages) {
@@ -89,15 +148,41 @@ export async function orchestrateCommand() {
89
148
  msg.status = "PROCESSED";
90
149
  }
91
150
 
92
- // Write back updated message statuses to files
151
+ // Write back updated message statuses to files and archive processed messages
152
+ const archiveDir = path.join(messagesDir, "archive");
153
+
93
154
  for (const file of Object.keys(fileMessagesMap)) {
94
155
  const filePath = path.join(messagesDir, file);
95
156
  const msgs = fileMessagesMap[file];
157
+
158
+ const activeMsgs = msgs.filter(m => m.status !== "PROCESSED");
159
+ const processedMsgs = msgs.filter(m => m.status === "PROCESSED");
160
+
96
161
  try {
97
- const updatedContent = msgs.map(m => JSON.stringify(m)).join("\n") + "\n";
98
- fs.writeFileSync(filePath, updatedContent, "utf8");
162
+ // Write remaining active messages
163
+ if (activeMsgs.length > 0) {
164
+ const updatedContent = activeMsgs.map(m => JSON.stringify(m)).join("\n") + "\n";
165
+ fs.writeFileSync(filePath, updatedContent, "utf8");
166
+ } else {
167
+ // Empty the file if no active messages
168
+ if (fs.existsSync(filePath)) {
169
+ fs.writeFileSync(filePath, "", "utf8");
170
+ }
171
+ }
172
+
173
+ // Archive processed messages
174
+ if (processedMsgs.length > 0) {
175
+ if (!fs.existsSync(archiveDir)) {
176
+ fs.mkdirSync(archiveDir, { recursive: true });
177
+ }
178
+ const agentName = file.replace(".json", "");
179
+ const archivePath = path.join(archiveDir, `${agentName}_archive.json`);
180
+ const archiveContent = processedMsgs.map(m => JSON.stringify(m)).join("\n") + "\n";
181
+ fs.appendFileSync(archivePath, archiveContent, "utf8");
182
+ UI.success(`Archived ${processedMsgs.length} messages for @${agentName}`);
183
+ }
99
184
  } catch {
100
- UI.error(`${file} mesaj dosyası güncellenirken hata oluştu.`);
185
+ UI.error(`${file} mesaj dosyası güncellenirken ve arşivlenirken hata oluştu.`);
101
186
  }
102
187
  }
103
188
  }
@@ -105,24 +190,65 @@ export async function orchestrateCommand() {
105
190
  /**
106
191
  * Standard tool for agents to delegate tasks to other agents.
107
192
  */
108
- export function sendMessage(args: {
193
+ export async function sendMessage(args: {
109
194
  from: string;
110
195
  to: string;
111
196
  category: "ACTION" | "DELEGATION" | "SUBTASK" | "REPLY" | "ALERT";
112
197
  content: string;
113
198
  traceId: string;
114
199
  parentId?: string;
200
+ priority?: "HIGH" | "NORMAL" | "LOW";
115
201
  }) {
116
202
  const frameworkDir = getFrameworkDir();
117
- const messagesDir = path.join(process.cwd(), frameworkDir, "messages");
203
+ const messagesDir = path.join(frameworkDir, "messages");
118
204
  const agentName = args.to.replace("@", "");
119
205
  const messagePath = path.join(messagesDir, `${agentName}.json`);
206
+ const lockPath = path.join(messagesDir, ".lock");
207
+
208
+ let retries = 3;
209
+ let acquired = false;
210
+ while (retries > 0) {
211
+ try {
212
+ if (fs.existsSync(lockPath)) {
213
+ try {
214
+ const stats = fs.statSync(lockPath);
215
+ if (Date.now() - stats.mtimeMs > 5000) {
216
+ fs.unlinkSync(lockPath);
217
+ }
218
+ } catch {
219
+ // ignore if concurrently unlinked
220
+ }
221
+ }
222
+ if (!fs.existsSync(messagesDir)) {
223
+ fs.mkdirSync(messagesDir, { recursive: true });
224
+ }
225
+ fs.writeFileSync(lockPath, `Locked by ${args.from} at ${new Date().toISOString()}`, { flag: "wx" });
226
+ acquired = true;
227
+ break;
228
+ } catch (err: unknown) {
229
+ const error = err as { code?: string; message?: string };
230
+ if (error.code === "EEXIST") {
231
+ retries--;
232
+ if (retries > 0) {
233
+ await new Promise((resolve) => setTimeout(resolve, 500));
234
+ }
235
+ } else {
236
+ UI.error(`Kilit alınırken beklenmedik hata oluştu: ${error.message || String(err)}`);
237
+ break;
238
+ }
239
+ }
240
+ }
241
+
242
+ if (!acquired) {
243
+ UI.error(`Mesaj iletilemedi: Hermes kilidi meşgul. (${args.from} -> ${args.to})`);
244
+ return;
245
+ }
120
246
 
121
247
  try {
122
- if (!fs.existsSync(messagesDir)) fs.mkdirSync(messagesDir, { recursive: true });
123
-
248
+ const defaultPriority = (args.category === "ALERT" || args.category === "ACTION") ? "HIGH" : "NORMAL";
124
249
  const message: HermesMessage = {
125
250
  timestamp: new Date().toISOString(),
251
+ priority: args.priority || defaultPriority,
126
252
  ...args,
127
253
  status: "PENDING"
128
254
  };
@@ -130,21 +256,29 @@ export function sendMessage(args: {
130
256
  fs.appendFileSync(messagePath, JSON.stringify(message) + "\n");
131
257
 
132
258
  // Log collaboration to audit log
133
- const auditPath = path.join(process.cwd(), frameworkDir, "observability/audit_log.md");
259
+ const auditPath = path.join(frameworkDir, "observability/audit_log.md");
134
260
  if (fs.existsSync(auditPath)) {
135
- const logEntry = `\n- **[${message.timestamp}]** ${args.from} -> ${args.to} | ${args.category} | Trace: ${args.traceId}`;
261
+ const logEntry = `\n- **[${message.timestamp}]** ${args.from} -> ${args.to} | ${args.category} | Priority: ${message.priority} | Trace: ${args.traceId}`;
136
262
  fs.appendFileSync(auditPath, logEntry);
137
263
  }
138
264
 
139
265
  return message;
140
266
  } catch {
141
267
  UI.error(`Mesaj iletilemedi: ${args.from} -> ${args.to}`);
268
+ } finally {
269
+ if (acquired && fs.existsSync(lockPath)) {
270
+ try {
271
+ fs.unlinkSync(lockPath);
272
+ } catch {
273
+ // Ignore delete errors if concurrently unlinked
274
+ }
275
+ }
142
276
  }
143
277
  }
144
278
 
145
279
  function transitionAgentState(agent: string, state: string, task: string) {
146
280
  const frameworkDir = getFrameworkDir();
147
- const statusPath = path.join(process.cwd(), frameworkDir, "STATUS.md");
281
+ const statusPath = path.join(frameworkDir, "STATUS.md");
148
282
  if (!fs.existsSync(statusPath)) return;
149
283
  try {
150
284
  const content = fs.readFileSync(statusPath, "utf8");
@@ -156,6 +290,7 @@ function transitionAgentState(agent: string, state: string, task: string) {
156
290
  if (parts.length >= 7) {
157
291
  parts[2] = ` ${state} `;
158
292
  parts[3] = ` ${task.slice(0, 25)}... `;
293
+ parts[4] = ` ${new Date().toISOString()} `;
159
294
  return parts.join("|");
160
295
  }
161
296
  }
@@ -1,4 +1,6 @@
1
1
  import fs from "fs";
2
+ import path from "path";
3
+ import chalk from "chalk";
2
4
 
3
5
  import { getMemoryPath, getFrameworkDir } from "../utils/memory.js";
4
6
 
@@ -49,6 +51,37 @@ export function statusCommand() {
49
51
  console.warn("⚠️ Status data could not be parsed in standard formats.");
50
52
  }
51
53
 
54
+ // Army status check
55
+ const statusPath = path.join(frameworkDir, "STATUS.md");
56
+ if (fs.existsSync(statusPath)) {
57
+ try {
58
+ const statusContent = fs.readFileSync(statusPath, "utf8");
59
+ const lines = statusContent.split("\n");
60
+ const agentRows = lines.filter(line => line.includes("| @") && line.includes("|"));
61
+ if (agentRows.length > 0) {
62
+ console.warn("\n🎖️ Enderun Army Status (Agent States):");
63
+ agentRows.forEach(row => {
64
+ const parts = row.split("|");
65
+ if (parts.length >= 4) {
66
+ const agentName = parts[1].trim();
67
+ const state = parts[2].trim();
68
+ const activeTask = parts[3].trim();
69
+
70
+ let coloredState = state;
71
+ if (state === "READY") coloredState = chalk.green(state);
72
+ else if (state === "EXECUTING") coloredState = chalk.yellow(state);
73
+ else if (state === "BLOCKED" || state === "TIMEOUT") coloredState = chalk.red(state);
74
+ else if (state === "WAITING") coloredState = chalk.cyan(state);
75
+
76
+ console.warn(` ${chalk.bold(agentName.padEnd(12))} : [${coloredState}] - ${activeTask}`);
77
+ }
78
+ });
79
+ }
80
+ } catch {
81
+ // Ignore status read errors
82
+ }
83
+ }
84
+
52
85
  const tasksSection = content.match(/## ACTIVE TASKS\n\n([\s\S]*?)(?=\n##|$)/);
53
86
  if (tasksSection) {
54
87
  console.warn("\n📋 Active Tasks:");