claude-flow-novice 2.15.3 → 2.15.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 (473) hide show
  1. package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  2. package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  3. package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  4. package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  5. package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  6. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  7. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  8. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  9. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  10. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  11. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  12. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  13. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  14. package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  15. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  16. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  17. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  18. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  19. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  20. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  21. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  22. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  23. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  24. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  25. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  26. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  27. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  28. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  29. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  30. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  31. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  32. package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  33. package/.claude/commands/cfn-loop-cli.md +29 -6
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  36. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  37. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  38. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  39. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  40. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  41. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  42. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  43. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  44. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
  45. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  46. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  47. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  48. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  49. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  50. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  51. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  52. package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
  53. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  54. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
  55. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  56. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +34 -0
  57. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  58. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  59. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  60. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  61. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  62. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  63. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  64. package/README.md +116 -475
  65. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  66. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  67. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  68. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  69. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  70. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  71. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  72. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  73. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  74. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  75. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  76. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  77. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  78. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  79. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  80. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  81. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  82. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  83. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  84. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  85. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  86. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  87. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  88. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  89. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  90. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  91. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  92. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  93. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  94. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  95. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  96. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  97. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  98. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  99. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  100. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  101. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  102. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  103. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  104. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  105. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  106. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  107. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  108. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  109. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  110. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  111. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  112. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  113. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  114. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  115. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  116. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  117. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  118. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  119. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  120. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  121. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  122. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  123. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  124. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  125. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  126. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  127. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  128. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  129. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  130. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  131. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  137. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  138. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  139. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  140. package/claude-assets/commands/cfn-loop-cli.md +29 -6
  141. package/claude-assets/commands/switch-api.md +31 -10
  142. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  143. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  144. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  145. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  146. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  147. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
  148. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
  149. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  150. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  151. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  152. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  153. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  154. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  155. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  156. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  157. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  158. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  159. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  160. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  161. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  162. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  163. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  164. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  165. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  166. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  167. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  168. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  169. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  170. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  171. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  172. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  173. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  174. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  175. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  176. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  177. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  178. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  179. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  180. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
  181. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  182. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  183. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  184. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  185. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  186. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  187. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  188. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  189. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  190. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  191. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  192. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  193. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
  194. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  195. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
  196. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  197. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +34 -0
  198. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  199. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  200. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  201. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  202. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  203. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  204. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  205. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  206. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  207. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  208. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  209. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  210. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  211. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  212. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  213. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  214. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  215. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  216. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  217. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  218. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  219. package/claude-assets/skills/integration/agent-handoff.sh +62 -64
  220. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  221. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  222. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  223. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  224. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  225. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  226. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  227. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  228. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  229. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  230. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  231. package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
  232. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  233. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
  234. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  235. package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
  236. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  237. package/dist/ace/ace-curator.js +10 -2
  238. package/dist/ace/ace-curator.js.map +1 -1
  239. package/dist/ace/ace-generator.js +4 -0
  240. package/dist/ace/ace-generator.js.map +1 -1
  241. package/dist/ace/ace-reflector.js +1 -1
  242. package/dist/ace/ace-reflector.js.map +1 -1
  243. package/dist/ace/context-injection.js +24 -2
  244. package/dist/ace/context-injection.js.map +1 -1
  245. package/dist/agents/task-agent-integration.js +1 -1
  246. package/dist/agents/task-agent-integration.js.map +1 -1
  247. package/dist/api/health-endpoints.js +390 -0
  248. package/dist/api/health-endpoints.js.map +1 -0
  249. package/dist/cli/agent-executor.js +4 -1
  250. package/dist/cli/agent-executor.js.map +1 -1
  251. package/dist/cli/agent-prompt-builder.js +89 -1
  252. package/dist/cli/agent-prompt-builder.js.map +1 -1
  253. package/dist/cli/agent-spawn.js +130 -37
  254. package/dist/cli/agent-spawn.js.map +1 -1
  255. package/dist/cli/config-manager.js +109 -91
  256. package/dist/cli/config-manager.js.map +1 -1
  257. package/dist/cli/conversation-fork-cleanup.js +201 -0
  258. package/dist/cli/conversation-fork-cleanup.js.map +1 -0
  259. package/dist/cli/conversation-fork.js +16 -3
  260. package/dist/cli/conversation-fork.js.map +1 -1
  261. package/dist/cli/skill-cache-validator.js +412 -0
  262. package/dist/cli/skill-cache-validator.js.map +1 -0
  263. package/dist/cli/skill-cli.js +991 -0
  264. package/dist/cli/skill-cli.js.map +1 -0
  265. package/dist/cli/skill-execution-logger.js +284 -0
  266. package/dist/cli/skill-execution-logger.js.map +1 -0
  267. package/dist/cli/skill-loader.js +457 -0
  268. package/dist/cli/skill-loader.js.map +1 -0
  269. package/dist/coordination/event-bus.js +2 -2
  270. package/dist/coordination/event-bus.js.map +1 -1
  271. package/dist/coordination/fleet-manager.js +1 -1
  272. package/dist/coordination/fleet-manager.js.map +1 -1
  273. package/dist/coordination/index.js +23 -9
  274. package/dist/coordination/index.js.map +1 -1
  275. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  276. package/dist/db/migration-manager.js +483 -0
  277. package/dist/db/migration-manager.js.map +1 -0
  278. package/dist/db/skills-query.js +535 -0
  279. package/dist/db/skills-query.js.map +1 -0
  280. package/dist/integration/DatabaseHandoff.js +1 -1
  281. package/dist/integration/DatabaseHandoff.js.map +1 -1
  282. package/dist/jobs/edge-case-analyzer.js +367 -0
  283. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  284. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  285. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  286. package/dist/lib/agent-output-parser.js.map +1 -1
  287. package/dist/lib/agent-output-validator.js.map +1 -1
  288. package/dist/lib/agent-workspace.js +281 -0
  289. package/dist/lib/agent-workspace.js.map +1 -0
  290. package/dist/lib/atomic-file-writer.js +377 -0
  291. package/dist/lib/atomic-file-writer.js.map +1 -0
  292. package/dist/lib/backup-manager.js +779 -0
  293. package/dist/lib/backup-manager.js.map +1 -0
  294. package/dist/lib/checkpoint-manager.js +837 -0
  295. package/dist/lib/checkpoint-manager.js.map +1 -0
  296. package/dist/lib/circuit-breaker.js +340 -0
  297. package/dist/lib/circuit-breaker.js.map +1 -0
  298. package/dist/lib/completion-signal-handler.js +243 -0
  299. package/dist/lib/completion-signal-handler.js.map +1 -0
  300. package/dist/lib/config-manager.js +312 -0
  301. package/dist/lib/config-manager.js.map +1 -0
  302. package/dist/lib/config-migrator.js +386 -0
  303. package/dist/lib/config-migrator.js.map +1 -0
  304. package/dist/lib/config-validator.js.map +1 -1
  305. package/dist/lib/correlation-cache.js +311 -0
  306. package/dist/lib/correlation-cache.js.map +1 -0
  307. package/dist/lib/correlation.js +263 -0
  308. package/dist/lib/correlation.js.map +1 -0
  309. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  310. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  311. package/dist/lib/database-service/correlation.js +329 -0
  312. package/dist/lib/database-service/correlation.js.map +1 -0
  313. package/dist/lib/database-service/errors.js +120 -0
  314. package/dist/lib/database-service/errors.js.map +1 -0
  315. package/dist/lib/database-service/index.js +168 -0
  316. package/dist/lib/database-service/index.js.map +1 -0
  317. package/dist/lib/database-service/postgres-adapter.js +526 -0
  318. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  319. package/dist/lib/database-service/redis-adapter.js +360 -0
  320. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  321. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  322. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  323. package/dist/lib/database-service/transaction-manager.js +773 -0
  324. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  325. package/dist/lib/database-service/types.js +23 -0
  326. package/dist/lib/database-service/types.js.map +1 -0
  327. package/dist/lib/deadlock-resolver.js +292 -0
  328. package/dist/lib/deadlock-resolver.js.map +1 -0
  329. package/dist/lib/distributed-lock.js +451 -0
  330. package/dist/lib/distributed-lock.js.map +1 -0
  331. package/dist/lib/edge-case-deduplicator.js +227 -0
  332. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  333. package/dist/lib/encryption-manager.js +322 -0
  334. package/dist/lib/encryption-manager.js.map +1 -0
  335. package/dist/lib/error-aggregator.js +234 -0
  336. package/dist/lib/error-aggregator.js.map +1 -0
  337. package/dist/lib/errors.js +287 -0
  338. package/dist/lib/errors.js.map +1 -0
  339. package/dist/lib/file-lock-manager.js +578 -0
  340. package/dist/lib/file-lock-manager.js.map +1 -0
  341. package/dist/lib/file-operations.js +367 -0
  342. package/dist/lib/file-operations.js.map +1 -0
  343. package/dist/lib/idempotent-write.js +237 -0
  344. package/dist/lib/idempotent-write.js.map +1 -0
  345. package/dist/lib/integration-schema-validator.js +522 -0
  346. package/dist/lib/integration-schema-validator.js.map +1 -0
  347. package/dist/lib/lock-health-monitor.js +298 -0
  348. package/dist/lib/lock-health-monitor.js.map +1 -0
  349. package/dist/lib/log-shipper.js +422 -0
  350. package/dist/lib/log-shipper.js.map +1 -0
  351. package/dist/lib/logging.js +146 -0
  352. package/dist/lib/logging.js.map +1 -0
  353. package/dist/lib/message-deduplicator.js +439 -0
  354. package/dist/lib/message-deduplicator.js.map +1 -0
  355. package/dist/lib/multi-system-query.js +604 -0
  356. package/dist/lib/multi-system-query.js.map +1 -0
  357. package/dist/lib/orphan-detector.js +332 -0
  358. package/dist/lib/orphan-detector.js.map +1 -0
  359. package/dist/lib/password-generator.js +166 -0
  360. package/dist/lib/password-generator.js.map +1 -0
  361. package/dist/lib/path-validator.js +429 -0
  362. package/dist/lib/path-validator.js.map +1 -0
  363. package/dist/lib/query-translator.js +905 -0
  364. package/dist/lib/query-translator.js.map +1 -0
  365. package/dist/lib/queue-recovery.js +469 -0
  366. package/dist/lib/queue-recovery.js.map +1 -0
  367. package/dist/lib/redis-queue-manager.js +512 -0
  368. package/dist/lib/redis-queue-manager.js.map +1 -0
  369. package/dist/lib/reflection-archiver.js +272 -0
  370. package/dist/lib/reflection-archiver.js.map +1 -0
  371. package/dist/lib/retry-manager.js +453 -0
  372. package/dist/lib/retry-manager.js.map +1 -0
  373. package/dist/lib/retry.js +262 -0
  374. package/dist/lib/retry.js.map +1 -0
  375. package/dist/lib/schema-transform.js +695 -0
  376. package/dist/lib/schema-transform.js.map +1 -0
  377. package/dist/lib/schema-validator.js +491 -0
  378. package/dist/lib/schema-validator.js.map +1 -0
  379. package/dist/lib/skill-cache.js +297 -0
  380. package/dist/lib/skill-cache.js.map +1 -0
  381. package/dist/lib/skill-content-manager.js +337 -0
  382. package/dist/lib/skill-content-manager.js.map +1 -0
  383. package/dist/lib/skill-frontmatter-parser.js +237 -0
  384. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  385. package/dist/lib/skill-git-integration.js +275 -0
  386. package/dist/lib/skill-git-integration.js.map +1 -0
  387. package/dist/lib/skill-markdown-validator.js +396 -0
  388. package/dist/lib/skill-markdown-validator.js.map +1 -0
  389. package/dist/lib/skill-output-parser.js +312 -0
  390. package/dist/lib/skill-output-parser.js.map +1 -0
  391. package/dist/lib/unified-query-api.js +467 -0
  392. package/dist/lib/unified-query-api.js.map +1 -0
  393. package/dist/middleware/auth-middleware.js +350 -0
  394. package/dist/middleware/auth-middleware.js.map +1 -0
  395. package/dist/middleware/schema-validation.js +347 -0
  396. package/dist/middleware/schema-validation.js.map +1 -0
  397. package/dist/providers/anthropic-provider.js +1 -1
  398. package/dist/providers/anthropic-provider.js.map +1 -1
  399. package/dist/providers/provider-factory.js +2 -2
  400. package/dist/providers/provider-factory.js.map +1 -1
  401. package/dist/services/edge-case-analyzer.js +321 -0
  402. package/dist/services/edge-case-analyzer.js.map +1 -0
  403. package/dist/services/edge-case-deduplicator.js +266 -0
  404. package/dist/services/edge-case-deduplicator.js.map +1 -0
  405. package/dist/services/edge-case-detector.js +337 -0
  406. package/dist/services/edge-case-detector.js.map +1 -0
  407. package/dist/services/edge-case-tracker.js +547 -0
  408. package/dist/services/edge-case-tracker.js.map +1 -0
  409. package/dist/services/health-check-system.js +586 -0
  410. package/dist/services/health-check-system.js.map +1 -0
  411. package/dist/services/metrics-logger.js +412 -0
  412. package/dist/services/metrics-logger.js.map +1 -0
  413. package/dist/services/patch-generator.js +378 -0
  414. package/dist/services/patch-generator.js.map +1 -0
  415. package/dist/services/patch-validator.js +337 -0
  416. package/dist/services/patch-validator.js.map +1 -0
  417. package/dist/services/performance-monitor.js +811 -0
  418. package/dist/services/performance-monitor.js.map +1 -0
  419. package/dist/services/promotion-pipeline.js +918 -0
  420. package/dist/services/promotion-pipeline.js.map +1 -0
  421. package/dist/services/promotion-validator.js +394 -0
  422. package/dist/services/promotion-validator.js.map +1 -0
  423. package/dist/services/reflection-logger.js +388 -0
  424. package/dist/services/reflection-logger.js.map +1 -0
  425. package/dist/services/skill-deployment.js +472 -0
  426. package/dist/services/skill-deployment.js.map +1 -0
  427. package/dist/services/skill-loader.js +427 -0
  428. package/dist/services/skill-loader.js.map +1 -0
  429. package/dist/services/skill-promotion.js +372 -0
  430. package/dist/services/skill-promotion.js.map +1 -0
  431. package/dist/services/skill-validator.js +454 -0
  432. package/dist/services/skill-validator.js.map +1 -0
  433. package/dist/services/skill-versioning.js +244 -0
  434. package/dist/services/skill-versioning.js.map +1 -0
  435. package/dist/services/workspace-supervisor.js +597 -0
  436. package/dist/services/workspace-supervisor.js.map +1 -0
  437. package/dist/types/edge-case.js +45 -0
  438. package/dist/types/edge-case.js.map +1 -0
  439. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
  440. package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
  441. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
  442. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
  443. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
  444. package/package.json +35 -4
  445. package/readme/README.md +53 -5
  446. package/scripts/backup-cleanup.sh +627 -0
  447. package/scripts/cleanup-workspaces.sh +412 -0
  448. package/scripts/cleanup-yaml-configs.sh +141 -0
  449. package/scripts/deploy-approved-skills.sh +263 -0
  450. package/scripts/health-check.sh +447 -0
  451. package/scripts/log-aggregator.sh +554 -0
  452. package/scripts/log-monitor.sh +629 -0
  453. package/scripts/manage-agent-workspaces.sh +434 -0
  454. package/scripts/migrate-schema.sh +533 -0
  455. package/scripts/promote-staged-skills.sh +423 -0
  456. package/scripts/verify-no-secrets.sh +88 -35
  457. package/scripts/verify-redis-cleanup.sh +173 -0
  458. package/tests/README.md +84 -0
  459. package/tests/test-memory-leak-task-mode.sh +435 -0
  460. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  461. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  462. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  463. package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
  464. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
  465. package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
  466. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  467. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  468. package/README.md.backup_before_replace +0 -781
  469. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  470. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  471. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  472. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  473. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -95,7 +95,7 @@ export class ACEReflector {
95
95
  }
96
96
  async reflect(context, options = {}) {
97
97
  const reflection = {
98
- id: `ref-${Date.now()}`,
98
+ id: `ref-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
99
99
  timestamp: Date.now(),
100
100
  complexity: options.complexity ?? this.calculateComplexity(context),
101
101
  context,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ace/ace-reflector.ts"],"sourcesContent":["import { SQLiteMemorySystem } from '../memory/sqlite-memory-system.js';\r\nimport { MemoryAdapter, AccessLevel } from '../memory/memory-adapter.js';\r\n\r\nexport interface CognitiveReflection {\r\n id: string;\r\n timestamp: number;\r\n complexity: number;\r\n context: Record<string, any>;\r\n insights: string[];\r\n}\r\n\r\nexport class ACEReflector {\r\n private memorySystem: SQLiteMemorySystem;\r\n private memoryAdapter: MemoryAdapter;\r\n\r\n constructor(\r\n memoryPath: string = './ace-reflections.sqlite'\r\n ) {\r\n this.memorySystem = new SQLiteMemorySystem(memoryPath);\r\n this.memoryAdapter = new MemoryAdapter(AccessLevel.SYSTEM);\r\n }\r\n\r\n async initialize(): Promise<void> {\r\n await this.memorySystem.initialize();\r\n\r\n // Note: Production schema is managed by .claude/skills/cfn-ace-system/schema/001-create-context-reflections.sql\r\n // This initialization ensures compatibility with the production schema\r\n\r\n // Apply performance indexes from init-indexes.sql\r\n await this.applyPerformanceIndexes();\r\n }\r\n\r\n /**\r\n * Apply performance indexes for context reflection queries\r\n * Based on .claude/skills/cfn-ace-system/init-indexes.sql\r\n * Target: < 100ms query time with 1000+ reflections\r\n */\r\n private async applyPerformanceIndexes(): Promise<void> {\r\n const db = this.memorySystem['db'];\r\n if (!db) {\r\n console.warn('⚠️ Database not initialized, skipping index creation');\r\n return;\r\n }\r\n\r\n // Check if context_reflections table exists\r\n const tableExists = await db.get<{ count: number }>(\r\n \"SELECT COUNT(*) as count FROM sqlite_master WHERE type='table' AND name='context_reflections'\"\r\n );\r\n\r\n if (!tableExists || tableExists.count === 0) {\r\n console.warn('⚠️ context_reflections table not found. Run schema migration first.');\r\n console.warn(' Use: .claude/skills/cfn-ace-system/schema/run-migration.sh');\r\n return;\r\n }\r\n\r\n const indexes = [\r\n // JSON Tag Extraction Index (most common query pattern)\r\n {\r\n name: 'idx_reflections_tags',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_tags\r\n ON context_reflections(json_extract(metadata, '$.tags'))`\r\n },\r\n // Domain Classification Index\r\n {\r\n name: 'idx_reflections_domain',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_domain\r\n ON context_reflections(json_extract(metadata, '$.domain'))`\r\n },\r\n // Confidence Score Index (DESC for high-to-low sorting)\r\n {\r\n name: 'idx_reflections_confidence',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_confidence\r\n ON context_reflections(confidence DESC)`\r\n },\r\n // Recency Index (DESC for chronological sorting)\r\n {\r\n name: 'idx_reflections_created_at',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_created_at\r\n ON context_reflections(created_at DESC)`\r\n },\r\n // Composite Index: Domain + Confidence + Recency\r\n {\r\n name: 'idx_reflections_domain_conf_date',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_domain_conf_date\r\n ON context_reflections(\r\n json_extract(metadata, '$.domain'),\r\n confidence,\r\n created_at DESC\r\n )`\r\n },\r\n // Composite Index: Confidence + Recency (covering index)\r\n {\r\n name: 'idx_reflections_conf_date',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_conf_date\r\n ON context_reflections(\r\n confidence DESC,\r\n created_at DESC\r\n )`\r\n }\r\n ];\r\n\r\n let successCount = 0;\r\n const failedIndexes: string[] = [];\r\n\r\n for (const index of indexes) {\r\n try {\r\n await db.run(index.sql);\r\n successCount++;\r\n } catch (error) {\r\n failedIndexes.push(index.name);\r\n console.error(`❌ Failed to create index ${index.name}:`, error);\r\n }\r\n }\r\n\r\n if (successCount === indexes.length) {\r\n console.log(`✅ Applied ${successCount} performance indexes (target: <100ms query time)`);\r\n } else {\r\n console.warn(`⚠️ Applied ${successCount}/${indexes.length} indexes. Failed: ${failedIndexes.join(', ')}`);\r\n }\r\n }\r\n\r\n async reflect(\r\n context: Record<string, any>,\r\n options: {\r\n complexity?: number\r\n } = {}\r\n ): Promise<CognitiveReflection> {\r\n const reflection: CognitiveReflection = {\r\n id: `ref-${Date.now()}`,\r\n timestamp: Date.now(),\r\n complexity: options.complexity ?? this.calculateComplexity(context),\r\n context,\r\n insights: this.generateInsights(context)\r\n };\r\n\r\n await this.memorySystem.store(\r\n `reflection:${reflection.id}`,\r\n reflection,\r\n AccessLevel.SYSTEM\r\n );\r\n\r\n // Insert reflection data into SQL table (production schema)\r\n await this.memorySystem['db']?.run(\r\n `INSERT INTO context_reflections (\r\n id, reflection_type, task_id, swarm_id, execution_trace,\r\n feedback_signals, extracted_lessons, metadata, confidence\r\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\r\n [\r\n reflection.id,\r\n 'strategy', // Default reflection type\r\n reflection.context.task_id || 'unknown',\r\n reflection.context.swarm_id || 'default',\r\n JSON.stringify({ timestamp: reflection.timestamp, complexity: reflection.complexity }),\r\n JSON.stringify({ insights: reflection.insights }),\r\n JSON.stringify({ strategies: reflection.insights, antiPatterns: [], edgeCases: [] }),\r\n JSON.stringify({ complexity: reflection.complexity }),\r\n reflection.complexity // Use complexity as confidence proxy\r\n ]\r\n );\r\n\r\n return reflection;\r\n }\r\n\r\n private calculateComplexity(\r\n context: Record<string, any>\r\n ): number {\r\n // Advanced complexity calculation\r\n const keyCount = Object.keys(context).length;\r\n const contentLength = JSON.stringify(context).length;\r\n\r\n return Math.log(keyCount * contentLength) / Math.log(10);\r\n }\r\n\r\n private generateInsights(\r\n context: Record<string, any>\r\n ): string[] {\r\n // Meta-cognitive analysis\r\n const insights: string[] = [];\r\n\r\n if (context.task && context.constraints) {\r\n insights.push(`Task complexity requires careful constraint management`);\r\n }\r\n\r\n if (context.previousResults) {\r\n insights.push(`Learning from past iterations`);\r\n }\r\n\r\n return insights;\r\n }\r\n\r\n async retrieveReflection(\r\n reflectionId: string\r\n ): Promise<CognitiveReflection | null> {\r\n return await this.memorySystem.retrieve(\r\n `reflection:${reflectionId}`,\r\n AccessLevel.SYSTEM\r\n );\r\n }\r\n}\r\n\r\nexport default ACEReflector;"],"names":["SQLiteMemorySystem","MemoryAdapter","AccessLevel","ACEReflector","memorySystem","memoryAdapter","memoryPath","SYSTEM","initialize","applyPerformanceIndexes","db","console","warn","tableExists","get","count","indexes","name","sql","successCount","failedIndexes","index","run","error","push","length","log","join","reflect","context","options","reflection","id","Date","now","timestamp","complexity","calculateComplexity","insights","generateInsights","store","task_id","swarm_id","JSON","stringify","strategies","antiPatterns","edgeCases","keyCount","Object","keys","contentLength","Math","task","constraints","previousResults","retrieveReflection","reflectionId","retrieve"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,oCAAoC;AACvE,SAASC,aAAa,EAAEC,WAAW,QAAQ,8BAA8B;AAUzE,OAAO,MAAMC;IACHC,aAAiC;IACjCC,cAA6B;IAErC,YACEC,aAAqB,0BAA0B,CAC/C;QACA,IAAI,CAACF,YAAY,GAAG,IAAIJ,mBAAmBM;QAC3C,IAAI,CAACD,aAAa,GAAG,IAAIJ,cAAcC,YAAYK,MAAM;IAC3D;IAEA,MAAMC,aAA4B;QAChC,MAAM,IAAI,CAACJ,YAAY,CAACI,UAAU;QAElC,gHAAgH;QAChH,uEAAuE;QAEvE,kDAAkD;QAClD,MAAM,IAAI,CAACC,uBAAuB;IACpC;IAEA;;;;GAIC,GACD,MAAcA,0BAAyC;QACrD,MAAMC,KAAK,IAAI,CAACN,YAAY,CAAC,KAAK;QAClC,IAAI,CAACM,IAAI;YACPC,QAAQC,IAAI,CAAC;YACb;QACF;QAEA,4CAA4C;QAC5C,MAAMC,cAAc,MAAMH,GAAGI,GAAG,CAC9B;QAGF,IAAI,CAACD,eAAeA,YAAYE,KAAK,KAAK,GAAG;YAC3CJ,QAAQC,IAAI,CAAC;YACbD,QAAQC,IAAI,CAAC;YACb;QACF;QAEA,MAAMI,UAAU;YACd,wDAAwD;YACxD;gBACEC,MAAM;gBACNC,KAAK,CAAC;sEACwD,CAAC;YACjE;YACA,8BAA8B;YAC9B;gBACED,MAAM;gBACNC,KAAK,CAAC;wEAC0D,CAAC;YACnE;YACA,wDAAwD;YACxD;gBACED,MAAM;gBACNC,KAAK,CAAC;qDACuC,CAAC;YAChD;YACA,iDAAiD;YACjD;gBACED,MAAM;gBACNC,KAAK,CAAC;qDACuC,CAAC;YAChD;YACA,iDAAiD;YACjD;gBACED,MAAM;gBACNC,KAAK,CAAC;;;;;eAKC,CAAC;YACV;YACA,yDAAyD;YACzD;gBACED,MAAM;gBACNC,KAAK,CAAC;;;;eAIC,CAAC;YACV;SACD;QAED,IAAIC,eAAe;QACnB,MAAMC,gBAA0B,EAAE;QAElC,KAAK,MAAMC,SAASL,QAAS;YAC3B,IAAI;gBACF,MAAMN,GAAGY,GAAG,CAACD,MAAMH,GAAG;gBACtBC;YACF,EAAE,OAAOI,OAAO;gBACdH,cAAcI,IAAI,CAACH,MAAMJ,IAAI;gBAC7BN,QAAQY,KAAK,CAAC,CAAC,yBAAyB,EAAEF,MAAMJ,IAAI,CAAC,CAAC,CAAC,EAAEM;YAC3D;QACF;QAEA,IAAIJ,iBAAiBH,QAAQS,MAAM,EAAE;YACnCd,QAAQe,GAAG,CAAC,CAAC,UAAU,EAAEP,aAAa,gDAAgD,CAAC;QACzF,OAAO;YACLR,QAAQC,IAAI,CAAC,CAAC,WAAW,EAAEO,aAAa,CAAC,EAAEH,QAAQS,MAAM,CAAC,kBAAkB,EAAEL,cAAcO,IAAI,CAAC,OAAO;QAC1G;IACF;IAEA,MAAMC,QACJC,OAA4B,EAC5BC,UAEI,CAAC,CAAC,EACwB;QAC9B,MAAMC,aAAkC;YACtCC,IAAI,CAAC,IAAI,EAAEC,KAAKC,GAAG,IAAI;YACvBC,WAAWF,KAAKC,GAAG;YACnBE,YAAYN,QAAQM,UAAU,IAAI,IAAI,CAACC,mBAAmB,CAACR;YAC3DA;YACAS,UAAU,IAAI,CAACC,gBAAgB,CAACV;QAClC;QAEA,MAAM,IAAI,CAACzB,YAAY,CAACoC,KAAK,CAC3B,CAAC,WAAW,EAAET,WAAWC,EAAE,EAAE,EAC7BD,YACA7B,YAAYK,MAAM;QAGpB,4DAA4D;QAC5D,MAAM,IAAI,CAACH,YAAY,CAAC,KAAK,EAAEkB,IAC7B,CAAC;;;0CAGmC,CAAC,EACrC;YACES,WAAWC,EAAE;YACb;YACAD,WAAWF,OAAO,CAACY,OAAO,IAAI;YAC9BV,WAAWF,OAAO,CAACa,QAAQ,IAAI;YAC/BC,KAAKC,SAAS,CAAC;gBAAET,WAAWJ,WAAWI,SAAS;gBAAEC,YAAYL,WAAWK,UAAU;YAAC;YACpFO,KAAKC,SAAS,CAAC;gBAAEN,UAAUP,WAAWO,QAAQ;YAAC;YAC/CK,KAAKC,SAAS,CAAC;gBAAEC,YAAYd,WAAWO,QAAQ;gBAAEQ,cAAc,EAAE;gBAAEC,WAAW,EAAE;YAAC;YAClFJ,KAAKC,SAAS,CAAC;gBAAER,YAAYL,WAAWK,UAAU;YAAC;YACnDL,WAAWK,UAAU,CAAE,qCAAqC;SAC7D;QAGH,OAAOL;IACT;IAEQM,oBACNR,OAA4B,EACpB;QACR,kCAAkC;QAClC,MAAMmB,WAAWC,OAAOC,IAAI,CAACrB,SAASJ,MAAM;QAC5C,MAAM0B,gBAAgBR,KAAKC,SAAS,CAACf,SAASJ,MAAM;QAEpD,OAAO2B,KAAK1B,GAAG,CAACsB,WAAWG,iBAAiBC,KAAK1B,GAAG,CAAC;IACvD;IAEQa,iBACNV,OAA4B,EAClB;QACV,0BAA0B;QAC1B,MAAMS,WAAqB,EAAE;QAE7B,IAAIT,QAAQwB,IAAI,IAAIxB,QAAQyB,WAAW,EAAE;YACvChB,SAASd,IAAI,CAAC,CAAC,sDAAsD,CAAC;QACxE;QAEA,IAAIK,QAAQ0B,eAAe,EAAE;YAC3BjB,SAASd,IAAI,CAAC,CAAC,6BAA6B,CAAC;QAC/C;QAEA,OAAOc;IACT;IAEA,MAAMkB,mBACJC,YAAoB,EACiB;QACrC,OAAO,MAAM,IAAI,CAACrD,YAAY,CAACsD,QAAQ,CACrC,CAAC,WAAW,EAAED,cAAc,EAC5BvD,YAAYK,MAAM;IAEtB;AACF;AAEA,eAAeJ,aAAa"}
1
+ {"version":3,"sources":["../../src/ace/ace-reflector.ts"],"sourcesContent":["import { SQLiteMemorySystem } from '../memory/sqlite-memory-system.js';\r\nimport { MemoryAdapter, AccessLevel } from '../memory/memory-adapter.js';\r\n\r\nexport interface CognitiveReflection {\r\n id: string;\r\n timestamp: number;\r\n complexity: number;\r\n context: Record<string, any>;\r\n insights: string[];\r\n}\r\n\r\nexport class ACEReflector {\r\n private memorySystem: SQLiteMemorySystem;\r\n private memoryAdapter: MemoryAdapter;\r\n\r\n constructor(\r\n memoryPath: string = './ace-reflections.sqlite'\r\n ) {\r\n this.memorySystem = new SQLiteMemorySystem(memoryPath);\r\n this.memoryAdapter = new MemoryAdapter(AccessLevel.SYSTEM);\r\n }\r\n\r\n async initialize(): Promise<void> {\r\n await this.memorySystem.initialize();\r\n\r\n // Note: Production schema is managed by .claude/skills/cfn-ace-system/schema/001-create-context-reflections.sql\r\n // This initialization ensures compatibility with the production schema\r\n\r\n // Apply performance indexes from init-indexes.sql\r\n await this.applyPerformanceIndexes();\r\n }\r\n\r\n /**\r\n * Apply performance indexes for context reflection queries\r\n * Based on .claude/skills/cfn-ace-system/init-indexes.sql\r\n * Target: < 100ms query time with 1000+ reflections\r\n */\r\n private async applyPerformanceIndexes(): Promise<void> {\r\n const db = this.memorySystem['db'];\r\n if (!db) {\r\n console.warn('⚠️ Database not initialized, skipping index creation');\r\n return;\r\n }\r\n\r\n // Check if context_reflections table exists\r\n const tableExists = await db.get<{ count: number }>(\r\n \"SELECT COUNT(*) as count FROM sqlite_master WHERE type='table' AND name='context_reflections'\"\r\n );\r\n\r\n if (!tableExists || tableExists.count === 0) {\r\n console.warn('⚠️ context_reflections table not found. Run schema migration first.');\r\n console.warn(' Use: .claude/skills/cfn-ace-system/schema/run-migration.sh');\r\n return;\r\n }\r\n\r\n const indexes = [\r\n // JSON Tag Extraction Index (most common query pattern)\r\n {\r\n name: 'idx_reflections_tags',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_tags\r\n ON context_reflections(json_extract(metadata, '$.tags'))`\r\n },\r\n // Domain Classification Index\r\n {\r\n name: 'idx_reflections_domain',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_domain\r\n ON context_reflections(json_extract(metadata, '$.domain'))`\r\n },\r\n // Confidence Score Index (DESC for high-to-low sorting)\r\n {\r\n name: 'idx_reflections_confidence',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_confidence\r\n ON context_reflections(confidence DESC)`\r\n },\r\n // Recency Index (DESC for chronological sorting)\r\n {\r\n name: 'idx_reflections_created_at',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_created_at\r\n ON context_reflections(created_at DESC)`\r\n },\r\n // Composite Index: Domain + Confidence + Recency\r\n {\r\n name: 'idx_reflections_domain_conf_date',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_domain_conf_date\r\n ON context_reflections(\r\n json_extract(metadata, '$.domain'),\r\n confidence,\r\n created_at DESC\r\n )`\r\n },\r\n // Composite Index: Confidence + Recency (covering index)\r\n {\r\n name: 'idx_reflections_conf_date',\r\n sql: `CREATE INDEX IF NOT EXISTS idx_reflections_conf_date\r\n ON context_reflections(\r\n confidence DESC,\r\n created_at DESC\r\n )`\r\n }\r\n ];\r\n\r\n let successCount = 0;\r\n const failedIndexes: string[] = [];\r\n\r\n for (const index of indexes) {\r\n try {\r\n await db.run(index.sql);\r\n successCount++;\r\n } catch (error) {\r\n failedIndexes.push(index.name);\r\n console.error(`❌ Failed to create index ${index.name}:`, error);\r\n }\r\n }\r\n\r\n if (successCount === indexes.length) {\r\n console.log(`✅ Applied ${successCount} performance indexes (target: <100ms query time)`);\r\n } else {\r\n console.warn(`⚠️ Applied ${successCount}/${indexes.length} indexes. Failed: ${failedIndexes.join(', ')}`);\r\n }\r\n }\r\n\r\n async reflect(\r\n context: Record<string, any>,\r\n options: {\r\n complexity?: number\r\n } = {}\r\n ): Promise<CognitiveReflection> {\r\n const reflection: CognitiveReflection = {\r\n id: `ref-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\r\n timestamp: Date.now(),\r\n complexity: options.complexity ?? this.calculateComplexity(context),\r\n context,\r\n insights: this.generateInsights(context)\r\n };\r\n\r\n await this.memorySystem.store(\r\n `reflection:${reflection.id}`,\r\n reflection,\r\n AccessLevel.SYSTEM\r\n );\r\n\r\n // Insert reflection data into SQL table (production schema)\r\n await this.memorySystem['db']?.run(\r\n `INSERT INTO context_reflections (\r\n id, reflection_type, task_id, swarm_id, execution_trace,\r\n feedback_signals, extracted_lessons, metadata, confidence\r\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\r\n [\r\n reflection.id,\r\n 'strategy', // Default reflection type\r\n reflection.context.task_id || 'unknown',\r\n reflection.context.swarm_id || 'default',\r\n JSON.stringify({ timestamp: reflection.timestamp, complexity: reflection.complexity }),\r\n JSON.stringify({ insights: reflection.insights }),\r\n JSON.stringify({ strategies: reflection.insights, antiPatterns: [], edgeCases: [] }),\r\n JSON.stringify({ complexity: reflection.complexity }),\r\n reflection.complexity // Use complexity as confidence proxy\r\n ]\r\n );\r\n\r\n return reflection;\r\n }\r\n\r\n private calculateComplexity(\r\n context: Record<string, any>\r\n ): number {\r\n // Advanced complexity calculation\r\n const keyCount = Object.keys(context).length;\r\n const contentLength = JSON.stringify(context).length;\r\n\r\n return Math.log(keyCount * contentLength) / Math.log(10);\r\n }\r\n\r\n private generateInsights(\r\n context: Record<string, any>\r\n ): string[] {\r\n // Meta-cognitive analysis\r\n const insights: string[] = [];\r\n\r\n if (context.task && context.constraints) {\r\n insights.push(`Task complexity requires careful constraint management`);\r\n }\r\n\r\n if (context.previousResults) {\r\n insights.push(`Learning from past iterations`);\r\n }\r\n\r\n return insights;\r\n }\r\n\r\n async retrieveReflection(\r\n reflectionId: string\r\n ): Promise<CognitiveReflection | null> {\r\n return await this.memorySystem.retrieve(\r\n `reflection:${reflectionId}`,\r\n AccessLevel.SYSTEM\r\n );\r\n }\r\n}\r\n\r\nexport default ACEReflector;"],"names":["SQLiteMemorySystem","MemoryAdapter","AccessLevel","ACEReflector","memorySystem","memoryAdapter","memoryPath","SYSTEM","initialize","applyPerformanceIndexes","db","console","warn","tableExists","get","count","indexes","name","sql","successCount","failedIndexes","index","run","error","push","length","log","join","reflect","context","options","reflection","id","Date","now","Math","random","toString","substr","timestamp","complexity","calculateComplexity","insights","generateInsights","store","task_id","swarm_id","JSON","stringify","strategies","antiPatterns","edgeCases","keyCount","Object","keys","contentLength","task","constraints","previousResults","retrieveReflection","reflectionId","retrieve"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,oCAAoC;AACvE,SAASC,aAAa,EAAEC,WAAW,QAAQ,8BAA8B;AAUzE,OAAO,MAAMC;IACHC,aAAiC;IACjCC,cAA6B;IAErC,YACEC,aAAqB,0BAA0B,CAC/C;QACA,IAAI,CAACF,YAAY,GAAG,IAAIJ,mBAAmBM;QAC3C,IAAI,CAACD,aAAa,GAAG,IAAIJ,cAAcC,YAAYK,MAAM;IAC3D;IAEA,MAAMC,aAA4B;QAChC,MAAM,IAAI,CAACJ,YAAY,CAACI,UAAU;QAElC,gHAAgH;QAChH,uEAAuE;QAEvE,kDAAkD;QAClD,MAAM,IAAI,CAACC,uBAAuB;IACpC;IAEA;;;;GAIC,GACD,MAAcA,0BAAyC;QACrD,MAAMC,KAAK,IAAI,CAACN,YAAY,CAAC,KAAK;QAClC,IAAI,CAACM,IAAI;YACPC,QAAQC,IAAI,CAAC;YACb;QACF;QAEA,4CAA4C;QAC5C,MAAMC,cAAc,MAAMH,GAAGI,GAAG,CAC9B;QAGF,IAAI,CAACD,eAAeA,YAAYE,KAAK,KAAK,GAAG;YAC3CJ,QAAQC,IAAI,CAAC;YACbD,QAAQC,IAAI,CAAC;YACb;QACF;QAEA,MAAMI,UAAU;YACd,wDAAwD;YACxD;gBACEC,MAAM;gBACNC,KAAK,CAAC;sEACwD,CAAC;YACjE;YACA,8BAA8B;YAC9B;gBACED,MAAM;gBACNC,KAAK,CAAC;wEAC0D,CAAC;YACnE;YACA,wDAAwD;YACxD;gBACED,MAAM;gBACNC,KAAK,CAAC;qDACuC,CAAC;YAChD;YACA,iDAAiD;YACjD;gBACED,MAAM;gBACNC,KAAK,CAAC;qDACuC,CAAC;YAChD;YACA,iDAAiD;YACjD;gBACED,MAAM;gBACNC,KAAK,CAAC;;;;;eAKC,CAAC;YACV;YACA,yDAAyD;YACzD;gBACED,MAAM;gBACNC,KAAK,CAAC;;;;eAIC,CAAC;YACV;SACD;QAED,IAAIC,eAAe;QACnB,MAAMC,gBAA0B,EAAE;QAElC,KAAK,MAAMC,SAASL,QAAS;YAC3B,IAAI;gBACF,MAAMN,GAAGY,GAAG,CAACD,MAAMH,GAAG;gBACtBC;YACF,EAAE,OAAOI,OAAO;gBACdH,cAAcI,IAAI,CAACH,MAAMJ,IAAI;gBAC7BN,QAAQY,KAAK,CAAC,CAAC,yBAAyB,EAAEF,MAAMJ,IAAI,CAAC,CAAC,CAAC,EAAEM;YAC3D;QACF;QAEA,IAAIJ,iBAAiBH,QAAQS,MAAM,EAAE;YACnCd,QAAQe,GAAG,CAAC,CAAC,UAAU,EAAEP,aAAa,gDAAgD,CAAC;QACzF,OAAO;YACLR,QAAQC,IAAI,CAAC,CAAC,WAAW,EAAEO,aAAa,CAAC,EAAEH,QAAQS,MAAM,CAAC,kBAAkB,EAAEL,cAAcO,IAAI,CAAC,OAAO;QAC1G;IACF;IAEA,MAAMC,QACJC,OAA4B,EAC5BC,UAEI,CAAC,CAAC,EACwB;QAC9B,MAAMC,aAAkC;YACtCC,IAAI,CAAC,IAAI,EAAEC,KAAKC,GAAG,GAAG,CAAC,EAAEC,KAAKC,MAAM,GAAGC,QAAQ,CAAC,IAAIC,MAAM,CAAC,GAAG,IAAI;YAClEC,WAAWN,KAAKC,GAAG;YACnBM,YAAYV,QAAQU,UAAU,IAAI,IAAI,CAACC,mBAAmB,CAACZ;YAC3DA;YACAa,UAAU,IAAI,CAACC,gBAAgB,CAACd;QAClC;QAEA,MAAM,IAAI,CAACzB,YAAY,CAACwC,KAAK,CAC3B,CAAC,WAAW,EAAEb,WAAWC,EAAE,EAAE,EAC7BD,YACA7B,YAAYK,MAAM;QAGpB,4DAA4D;QAC5D,MAAM,IAAI,CAACH,YAAY,CAAC,KAAK,EAAEkB,IAC7B,CAAC;;;0CAGmC,CAAC,EACrC;YACES,WAAWC,EAAE;YACb;YACAD,WAAWF,OAAO,CAACgB,OAAO,IAAI;YAC9Bd,WAAWF,OAAO,CAACiB,QAAQ,IAAI;YAC/BC,KAAKC,SAAS,CAAC;gBAAET,WAAWR,WAAWQ,SAAS;gBAAEC,YAAYT,WAAWS,UAAU;YAAC;YACpFO,KAAKC,SAAS,CAAC;gBAAEN,UAAUX,WAAWW,QAAQ;YAAC;YAC/CK,KAAKC,SAAS,CAAC;gBAAEC,YAAYlB,WAAWW,QAAQ;gBAAEQ,cAAc,EAAE;gBAAEC,WAAW,EAAE;YAAC;YAClFJ,KAAKC,SAAS,CAAC;gBAAER,YAAYT,WAAWS,UAAU;YAAC;YACnDT,WAAWS,UAAU,CAAE,qCAAqC;SAC7D;QAGH,OAAOT;IACT;IAEQU,oBACNZ,OAA4B,EACpB;QACR,kCAAkC;QAClC,MAAMuB,WAAWC,OAAOC,IAAI,CAACzB,SAASJ,MAAM;QAC5C,MAAM8B,gBAAgBR,KAAKC,SAAS,CAACnB,SAASJ,MAAM;QAEpD,OAAOU,KAAKT,GAAG,CAAC0B,WAAWG,iBAAiBpB,KAAKT,GAAG,CAAC;IACvD;IAEQiB,iBACNd,OAA4B,EAClB;QACV,0BAA0B;QAC1B,MAAMa,WAAqB,EAAE;QAE7B,IAAIb,QAAQ2B,IAAI,IAAI3B,QAAQ4B,WAAW,EAAE;YACvCf,SAASlB,IAAI,CAAC,CAAC,sDAAsD,CAAC;QACxE;QAEA,IAAIK,QAAQ6B,eAAe,EAAE;YAC3BhB,SAASlB,IAAI,CAAC,CAAC,6BAA6B,CAAC;QAC/C;QAEA,OAAOkB;IACT;IAEA,MAAMiB,mBACJC,YAAoB,EACiB;QACrC,OAAO,MAAM,IAAI,CAACxD,YAAY,CAACyD,QAAQ,CACrC,CAAC,WAAW,EAAED,cAAc,EAC5B1D,YAAYK,MAAM;IAEtB;AACF;AAEA,eAAeJ,aAAa"}
@@ -11,6 +11,10 @@ export class ContextInjector {
11
11
  this.generator = new ACEGenerator();
12
12
  }
13
13
  async injectContext(target, contextOverrides = {}) {
14
+ // Validate target is not null or undefined
15
+ if (target === null || target === undefined) {
16
+ throw new Error('Target cannot be null or undefined');
17
+ }
14
18
  // Reflection on current target
15
19
  const initialReflection = await this.reflector.reflect({
16
20
  target,
@@ -21,13 +25,31 @@ export class ContextInjector {
21
25
  ...initialReflection.context,
22
26
  ...contextOverrides
23
27
  });
24
- // Dynamic context injection
25
- return this.dynamicInject(target, adaptedContext);
28
+ // Context overrides take highest priority, then adapted context
29
+ const finalContext = {
30
+ ...adaptedContext,
31
+ ...contextOverrides
32
+ };
33
+ // Check if target is frozen - if so, return a new merged object
34
+ if (Object.isFrozen(target)) {
35
+ return {
36
+ ...target,
37
+ ...finalContext
38
+ };
39
+ }
40
+ // Dynamic context injection via Proxy
41
+ return this.dynamicInject(target, finalContext);
26
42
  }
27
43
  dynamicInject(target, context) {
28
44
  // Advanced context injection using Proxy
29
45
  return new Proxy(target, {
30
46
  get: (obj, prop)=>{
47
+ // Check property descriptor to respect frozen/sealed properties
48
+ const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
49
+ // If property is non-configurable and non-writable, must return actual value
50
+ if (descriptor && !descriptor.configurable && !descriptor.writable) {
51
+ return Reflect.get(obj, prop);
52
+ }
31
53
  // Check if context has override for property
32
54
  if (context.hasOwnProperty(prop)) {
33
55
  return context[prop];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ace/context-injection.ts"],"sourcesContent":["import { ACEReflector } from './ace-reflector.js';\r\nimport { ACECurator } from './ace-curator.js';\r\nimport { ACEGenerator } from './ace-generator.js';\r\n\r\nexport class ContextInjector {\r\n private reflector: ACEReflector;\r\n private curator: ACECurator;\r\n private generator: ACEGenerator;\r\n\r\n constructor() {\r\n this.reflector = new ACEReflector();\r\n this.curator = new ACECurator();\r\n this.generator = new ACEGenerator();\r\n }\r\n\r\n async injectContext<T>(\r\n target: T,\r\n contextOverrides: Record<string, any> = {}\r\n ): Promise<T> {\r\n // Reflection on current target\r\n const initialReflection = await this.reflector.reflect(\r\n { target, contextOverrides }\r\n );\r\n\r\n // Generate adaptive context\r\n const adaptedContext = await this.generator.generateContext(\r\n {\r\n ...initialReflection.context,\r\n ...contextOverrides\r\n }\r\n );\r\n\r\n // Dynamic context injection\r\n return this.dynamicInject(target, adaptedContext);\r\n }\r\n\r\n private dynamicInject<T>(\r\n target: T,\r\n context: Record<string, any>\r\n ): T {\r\n // Advanced context injection using Proxy\r\n return new Proxy(target as any, {\r\n get: (obj, prop) => {\r\n // Check if context has override for property\r\n if (context.hasOwnProperty(prop)) {\r\n return context[prop];\r\n }\r\n return Reflect.get(obj, prop);\r\n },\r\n set: (obj, prop, value) => {\r\n // Optional: Trigger reflection on state changes\r\n this.reflector.reflect({\r\n target: obj,\r\n property: prop,\r\n value\r\n });\r\n return Reflect.set(obj, prop, value);\r\n }\r\n }) as T;\r\n }\r\n\r\n // Advanced method for context-aware method execution\r\n async executeWithContext<T, R>(\r\n method: (target: T) => Promise<R>,\r\n target: T,\r\n contextOverrides: Record<string, any> = {}\r\n ): Promise<R> {\r\n const contextualizedTarget = await this.injectContext(\r\n target,\r\n contextOverrides\r\n );\r\n\r\n return method(contextualizedTarget);\r\n }\r\n}\r\n\r\nexport default ContextInjector;"],"names":["ACEReflector","ACECurator","ACEGenerator","ContextInjector","reflector","curator","generator","injectContext","target","contextOverrides","initialReflection","reflect","adaptedContext","generateContext","context","dynamicInject","Proxy","get","obj","prop","hasOwnProperty","Reflect","set","value","property","executeWithContext","method","contextualizedTarget"],"mappings":"AAAA,SAASA,YAAY,QAAQ,qBAAqB;AAClD,SAASC,UAAU,QAAQ,mBAAmB;AAC9C,SAASC,YAAY,QAAQ,qBAAqB;AAElD,OAAO,MAAMC;IACHC,UAAwB;IACxBC,QAAoB;IACpBC,UAAwB;IAEhC,aAAc;QACZ,IAAI,CAACF,SAAS,GAAG,IAAIJ;QACrB,IAAI,CAACK,OAAO,GAAG,IAAIJ;QACnB,IAAI,CAACK,SAAS,GAAG,IAAIJ;IACvB;IAEA,MAAMK,cACJC,MAAS,EACTC,mBAAwC,CAAC,CAAC,EAC9B;QACZ,+BAA+B;QAC/B,MAAMC,oBAAoB,MAAM,IAAI,CAACN,SAAS,CAACO,OAAO,CACpD;YAAEH;YAAQC;QAAiB;QAG7B,4BAA4B;QAC5B,MAAMG,iBAAiB,MAAM,IAAI,CAACN,SAAS,CAACO,eAAe,CACzD;YACE,GAAGH,kBAAkBI,OAAO;YAC5B,GAAGL,gBAAgB;QACrB;QAGF,4BAA4B;QAC5B,OAAO,IAAI,CAACM,aAAa,CAACP,QAAQI;IACpC;IAEQG,cACNP,MAAS,EACTM,OAA4B,EACzB;QACH,yCAAyC;QACzC,OAAO,IAAIE,MAAMR,QAAe;YAC9BS,KAAK,CAACC,KAAKC;gBACT,6CAA6C;gBAC7C,IAAIL,QAAQM,cAAc,CAACD,OAAO;oBAChC,OAAOL,OAAO,CAACK,KAAK;gBACtB;gBACA,OAAOE,QAAQJ,GAAG,CAACC,KAAKC;YAC1B;YACAG,KAAK,CAACJ,KAAKC,MAAMI;gBACf,gDAAgD;gBAChD,IAAI,CAACnB,SAAS,CAACO,OAAO,CAAC;oBACrBH,QAAQU;oBACRM,UAAUL;oBACVI;gBACF;gBACA,OAAOF,QAAQC,GAAG,CAACJ,KAAKC,MAAMI;YAChC;QACF;IACF;IAEA,qDAAqD;IACrD,MAAME,mBACJC,MAAiC,EACjClB,MAAS,EACTC,mBAAwC,CAAC,CAAC,EAC9B;QACZ,MAAMkB,uBAAuB,MAAM,IAAI,CAACpB,aAAa,CACnDC,QACAC;QAGF,OAAOiB,OAAOC;IAChB;AACF;AAEA,eAAexB,gBAAgB"}
1
+ {"version":3,"sources":["../../src/ace/context-injection.ts"],"sourcesContent":["import { ACEReflector } from './ace-reflector.js';\r\nimport { ACECurator } from './ace-curator.js';\r\nimport { ACEGenerator } from './ace-generator.js';\r\n\r\nexport class ContextInjector {\r\n private reflector: ACEReflector;\r\n private curator: ACECurator;\r\n private generator: ACEGenerator;\r\n\r\n constructor() {\r\n this.reflector = new ACEReflector();\r\n this.curator = new ACECurator();\r\n this.generator = new ACEGenerator();\r\n }\r\n\r\n async injectContext<T>(\r\n target: T,\r\n contextOverrides: Record<string, any> = {}\r\n ): Promise<T> {\r\n // Validate target is not null or undefined\r\n if (target === null || target === undefined) {\r\n throw new Error('Target cannot be null or undefined');\r\n }\r\n\r\n // Reflection on current target\r\n const initialReflection = await this.reflector.reflect(\r\n { target, contextOverrides }\r\n );\r\n\r\n // Generate adaptive context\r\n const adaptedContext = await this.generator.generateContext(\r\n {\r\n ...initialReflection.context,\r\n ...contextOverrides\r\n }\r\n );\r\n\r\n // Context overrides take highest priority, then adapted context\r\n const finalContext = { ...adaptedContext, ...contextOverrides };\r\n\r\n // Check if target is frozen - if so, return a new merged object\r\n if (Object.isFrozen(target)) {\r\n return { ...target as any, ...finalContext } as T;\r\n }\r\n\r\n // Dynamic context injection via Proxy\r\n return this.dynamicInject(target, finalContext);\r\n }\r\n\r\n private dynamicInject<T>(\r\n target: T,\r\n context: Record<string, any>\r\n ): T {\r\n // Advanced context injection using Proxy\r\n return new Proxy(target as any, {\r\n get: (obj, prop) => {\r\n // Check property descriptor to respect frozen/sealed properties\r\n const descriptor = Object.getOwnPropertyDescriptor(obj, prop);\r\n\r\n // If property is non-configurable and non-writable, must return actual value\r\n if (descriptor && !descriptor.configurable && !descriptor.writable) {\r\n return Reflect.get(obj, prop);\r\n }\r\n\r\n // Check if context has override for property\r\n if (context.hasOwnProperty(prop)) {\r\n return context[prop];\r\n }\r\n return Reflect.get(obj, prop);\r\n },\r\n set: (obj, prop, value) => {\r\n // Optional: Trigger reflection on state changes\r\n this.reflector.reflect({\r\n target: obj,\r\n property: prop,\r\n value\r\n });\r\n return Reflect.set(obj, prop, value);\r\n }\r\n }) as T;\r\n }\r\n\r\n // Advanced method for context-aware method execution\r\n async executeWithContext<T, R>(\r\n method: (target: T) => Promise<R>,\r\n target: T,\r\n contextOverrides: Record<string, any> = {}\r\n ): Promise<R> {\r\n const contextualizedTarget = await this.injectContext(\r\n target,\r\n contextOverrides\r\n );\r\n\r\n return method(contextualizedTarget);\r\n }\r\n}\r\n\r\nexport default ContextInjector;"],"names":["ACEReflector","ACECurator","ACEGenerator","ContextInjector","reflector","curator","generator","injectContext","target","contextOverrides","undefined","Error","initialReflection","reflect","adaptedContext","generateContext","context","finalContext","Object","isFrozen","dynamicInject","Proxy","get","obj","prop","descriptor","getOwnPropertyDescriptor","configurable","writable","Reflect","hasOwnProperty","set","value","property","executeWithContext","method","contextualizedTarget"],"mappings":"AAAA,SAASA,YAAY,QAAQ,qBAAqB;AAClD,SAASC,UAAU,QAAQ,mBAAmB;AAC9C,SAASC,YAAY,QAAQ,qBAAqB;AAElD,OAAO,MAAMC;IACHC,UAAwB;IACxBC,QAAoB;IACpBC,UAAwB;IAEhC,aAAc;QACZ,IAAI,CAACF,SAAS,GAAG,IAAIJ;QACrB,IAAI,CAACK,OAAO,GAAG,IAAIJ;QACnB,IAAI,CAACK,SAAS,GAAG,IAAIJ;IACvB;IAEA,MAAMK,cACJC,MAAS,EACTC,mBAAwC,CAAC,CAAC,EAC9B;QACZ,2CAA2C;QAC3C,IAAID,WAAW,QAAQA,WAAWE,WAAW;YAC3C,MAAM,IAAIC,MAAM;QAClB;QAEA,+BAA+B;QAC/B,MAAMC,oBAAoB,MAAM,IAAI,CAACR,SAAS,CAACS,OAAO,CACpD;YAAEL;YAAQC;QAAiB;QAG7B,4BAA4B;QAC5B,MAAMK,iBAAiB,MAAM,IAAI,CAACR,SAAS,CAACS,eAAe,CACzD;YACE,GAAGH,kBAAkBI,OAAO;YAC5B,GAAGP,gBAAgB;QACrB;QAGF,gEAAgE;QAChE,MAAMQ,eAAe;YAAE,GAAGH,cAAc;YAAE,GAAGL,gBAAgB;QAAC;QAE9D,gEAAgE;QAChE,IAAIS,OAAOC,QAAQ,CAACX,SAAS;YAC3B,OAAO;gBAAE,GAAGA,MAAM;gBAAS,GAAGS,YAAY;YAAC;QAC7C;QAEA,sCAAsC;QACtC,OAAO,IAAI,CAACG,aAAa,CAACZ,QAAQS;IACpC;IAEQG,cACNZ,MAAS,EACTQ,OAA4B,EACzB;QACH,yCAAyC;QACzC,OAAO,IAAIK,MAAMb,QAAe;YAC9Bc,KAAK,CAACC,KAAKC;gBACT,gEAAgE;gBAChE,MAAMC,aAAaP,OAAOQ,wBAAwB,CAACH,KAAKC;gBAExD,6EAA6E;gBAC7E,IAAIC,cAAc,CAACA,WAAWE,YAAY,IAAI,CAACF,WAAWG,QAAQ,EAAE;oBAClE,OAAOC,QAAQP,GAAG,CAACC,KAAKC;gBAC1B;gBAEA,6CAA6C;gBAC7C,IAAIR,QAAQc,cAAc,CAACN,OAAO;oBAChC,OAAOR,OAAO,CAACQ,KAAK;gBACtB;gBACA,OAAOK,QAAQP,GAAG,CAACC,KAAKC;YAC1B;YACAO,KAAK,CAACR,KAAKC,MAAMQ;gBACf,gDAAgD;gBAChD,IAAI,CAAC5B,SAAS,CAACS,OAAO,CAAC;oBACrBL,QAAQe;oBACRU,UAAUT;oBACVQ;gBACF;gBACA,OAAOH,QAAQE,GAAG,CAACR,KAAKC,MAAMQ;YAChC;QACF;IACF;IAEA,qDAAqD;IACrD,MAAME,mBACJC,MAAiC,EACjC3B,MAAS,EACTC,mBAAwC,CAAC,CAAC,EAC9B;QACZ,MAAM2B,uBAAuB,MAAM,IAAI,CAAC7B,aAAa,CACnDC,QACAC;QAGF,OAAO0B,OAAOC;IAChB;AACF;AAEA,eAAejC,gBAAgB"}
@@ -42,7 +42,7 @@ export class TaskAgentIntegration {
42
42
  if (validation.fallbackUsed) {
43
43
  enhancedPrompt = `[Agent Type: Originally requested '${validation.originalType}', using '${validation.resolvedType}' as validated type]\n\n${enhancedPrompt}`;
44
44
  }
45
- enhancedPrompt += `\n\n[Coordination Context: Use hooks for coordination - npx claude-flow@alpha hooks pre-task --description "${request.description}"]`;
45
+ enhancedPrompt += `\n\n[Coordination Context: Task coordination via TodoWrite tool]`;
46
46
  return enhancedPrompt;
47
47
  }
48
48
  async prepareBatchAgentSpawn(requests) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/agents/task-agent-integration.ts"],"sourcesContent":["/**\r\n * Task Agent Integration Layer\r\n * Provides validation and fallback for Claude Code's Task tool\r\n */\r\n\r\nimport { validateAgentType, AgentValidationResult } from './agent-validator.js';\r\nimport { getAvailableAgentTypes } from './agent-loader.js';\r\n\r\nexport interface TaskAgentSpawnRequest {\r\n type: string;\r\n description: string;\r\n prompt: string;\r\n capabilities?: string[];\r\n priority?: 'low' | 'medium' | 'high' | 'critical';\r\n}\r\n\r\nexport interface TaskAgentSpawnResult {\r\n originalRequest: TaskAgentSpawnRequest;\r\n validationResult: AgentValidationResult;\r\n finalType: string;\r\n spawnCommand: string;\r\n warnings: string[];\r\n success: boolean;\r\n}\r\n\r\nexport class TaskAgentIntegration {\r\n private static instance: TaskAgentIntegration;\r\n\r\n static getInstance(): TaskAgentIntegration {\r\n if (!this.instance) {\r\n this.instance = new TaskAgentIntegration();\r\n }\r\n return this.instance;\r\n }\r\n\r\n async prepareAgentSpawn(request: TaskAgentSpawnRequest): Promise<TaskAgentSpawnResult> {\r\n const validation = await validateAgentType(request.type);\r\n const warnings: string[] = [...validation.warnings];\r\n\r\n const spawnCommand = this.generateTaskCommand(request, validation);\r\n\r\n if (validation.fallbackUsed) {\r\n console.warn(`⚠️ Agent type validation for '${request.type}':`);\r\n for (const warning of warnings) {\r\n console.warn(` ${warning}`);\r\n }\r\n console.info(`✅ Using validated type: '${validation.resolvedType}'`);\r\n }\r\n\r\n return {\r\n originalRequest: request,\r\n validationResult: validation,\r\n finalType: validation.resolvedType,\r\n spawnCommand,\r\n warnings,\r\n success: true,\r\n };\r\n }\r\n\r\n private generateTaskCommand(\r\n request: TaskAgentSpawnRequest,\r\n validation: AgentValidationResult,\r\n ): string {\r\n const enhancedPrompt = this.enhancePrompt(request, validation);\r\n\r\n return `Task(\"${request.description}\", \"${enhancedPrompt}\", \"${validation.resolvedType}\")`;\r\n }\r\n\r\n private enhancePrompt(request: TaskAgentSpawnRequest, validation: AgentValidationResult): string {\r\n let enhancedPrompt = request.prompt;\r\n\r\n if (validation.fallbackUsed) {\r\n enhancedPrompt = `[Agent Type: Originally requested '${validation.originalType}', using '${validation.resolvedType}' as validated type]\\n\\n${enhancedPrompt}`;\r\n }\r\n\r\n enhancedPrompt += `\\n\\n[Coordination Context: Use hooks for coordination - npx claude-flow@alpha hooks pre-task --description \"${request.description}\"]`;\r\n\r\n return enhancedPrompt;\r\n }\r\n\r\n async prepareBatchAgentSpawn(requests: TaskAgentSpawnRequest[]): Promise<TaskAgentSpawnResult[]> {\r\n const results: TaskAgentSpawnResult[] = [];\r\n\r\n for (const request of requests) {\r\n try {\r\n const result = await this.prepareAgentSpawn(request);\r\n results.push(result);\r\n } catch (error) {\r\n console.error(`Failed to prepare agent spawn for ${request.type}:`, error);\r\n results.push({\r\n originalRequest: request,\r\n validationResult: {\r\n isValid: false,\r\n resolvedType: 'researcher',\r\n originalType: request.type,\r\n fallbackUsed: true,\r\n warnings: [`Error validating agent type: ${error}`],\r\n },\r\n finalType: 'researcher',\r\n spawnCommand: `Task(\"${request.description}\", \"${request.prompt}\", \"researcher\")`,\r\n warnings: [`Failed to validate ${request.type}, using researcher as fallback`],\r\n success: false,\r\n });\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n async suggestAgentTypes(taskDescription: string): Promise<string[]> {\r\n const availableTypes = await getAvailableAgentTypes();\r\n const suggestions: string[] = [];\r\n const keywords = taskDescription.toLowerCase().split(/\\s+/);\r\n\r\n for (const agentType of availableTypes) {\r\n const agentKeywords = agentType.toLowerCase().split(/[-_]/);\r\n\r\n const overlap = keywords.some((keyword) =>\r\n agentKeywords.some(\r\n (agentKeyword) => agentKeyword.includes(keyword) || keyword.includes(agentKeyword),\r\n ),\r\n );\r\n\r\n if (overlap) {\r\n suggestions.push(agentType);\r\n }\r\n }\r\n\r\n return suggestions.length === 0\r\n ? ['researcher', 'coder', 'reviewer', 'tester']\r\n : suggestions.slice(0, 5);\r\n }\r\n\r\n validateAgentTypeSync(type: string): { isValid: boolean; resolvedType: string } {\r\n const legacyMapping: Record<string, string> = {\r\n analyst: 'code-analyzer',\r\n 'consensus-builder': 'consensus-builder',\r\n monitor: 'performance-benchmarker',\r\n coordinator: 'hierarchical-coordinator',\r\n optimizer: 'perf-analyzer',\r\n documenter: 'api-docs',\r\n specialist: 'system-architect',\r\n architect: 'system-architect',\r\n };\r\n\r\n const resolvedType = legacyMapping[type.toLowerCase()] || type;\r\n\r\n return {\r\n isValid: true,\r\n resolvedType,\r\n };\r\n }\r\n\r\n async getAgentInfo(): Promise<{\r\n available: string[];\r\n categories: { [category: string]: string[] };\r\n legacy: { [old: string]: string };\r\n suggestions: { [task: string]: string[] };\r\n }> {\r\n const availableTypes = await getAvailableAgentTypes();\r\n\r\n const categories: Record<string, string[]> = {\r\n core: [],\r\n development: [],\r\n analysis: [],\r\n coordination: [],\r\n testing: [],\r\n specialized: [],\r\n };\r\n\r\n for (const type of availableTypes) {\r\n if (type.includes('coder') || type.includes('dev')) {\r\n categories.development.push(type);\r\n } else if (type.includes('test')) {\r\n categories.testing.push(type);\r\n } else if (type.includes('analyz') || type.includes('review')) {\r\n categories.analysis.push(type);\r\n } else if (type.includes('coordinator') || type.includes('orchestrat')) {\r\n categories.coordination.push(type);\r\n } else if (['researcher', 'reviewer', 'planner'].includes(type)) {\r\n categories.core.push(type);\r\n } else {\r\n categories.specialized.push(type);\r\n }\r\n }\r\n\r\n return {\r\n available: availableTypes,\r\n categories,\r\n legacy: {\r\n analyst: 'code-analyzer',\r\n 'consensus-builder': 'consensus-builder',\r\n monitor: 'performance-benchmarker',\r\n coordinator: 'hierarchical-coordinator',\r\n optimizer: 'perf-analyzer',\r\n documenter: 'api-docs',\r\n specialist: 'system-architect',\r\n architect: 'system-architect',\r\n },\r\n suggestions: {\r\n code: ['coder', 'reviewer', 'code-analyzer'],\r\n test: ['tester', 'production-validator'],\r\n design: ['system-architect', 'base-template-generator'],\r\n analysis: ['code-analyzer', 'perf-analyzer'],\r\n documentation: ['api-docs'],\r\n coordination: ['task-orchestrator', 'hierarchical-coordinator'],\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport const taskAgentIntegration = TaskAgentIntegration.getInstance();\r\n\r\nexport const prepareAgentSpawn = (request: TaskAgentSpawnRequest) =>\r\n taskAgentIntegration.prepareAgentSpawn(request);\r\n\r\nexport const prepareBatchAgentSpawn = (requests: TaskAgentSpawnRequest[]) =>\r\n taskAgentIntegration.prepareBatchAgentSpawn(requests);\r\n\r\nexport const suggestAgentTypes = (taskDescription: string) =>\r\n taskAgentIntegration.suggestAgentTypes(taskDescription);\r\n\r\nexport const validateAgentTypeSync = (type: string) =>\r\n taskAgentIntegration.validateAgentTypeSync(type);\r\n\r\nexport const getAgentInfo = () => taskAgentIntegration.getAgentInfo();\r\n\r\nexport async function claudeCodeTaskHook(\r\n subagentType: string,\r\n description: string,\r\n prompt: string,\r\n): Promise<{\r\n validatedType: string;\r\n enhancedPrompt: string;\r\n warnings: string[];\r\n}> {\r\n const request: TaskAgentSpawnRequest = {\r\n type: subagentType,\r\n description,\r\n prompt,\r\n };\r\n\r\n const result = await prepareAgentSpawn(request);\r\n\r\n return {\r\n validatedType: result.finalType,\r\n enhancedPrompt: result.originalRequest.prompt,\r\n warnings: result.warnings,\r\n };\r\n}"],"names":["validateAgentType","getAvailableAgentTypes","TaskAgentIntegration","instance","getInstance","prepareAgentSpawn","request","validation","type","warnings","spawnCommand","generateTaskCommand","fallbackUsed","console","warn","warning","info","resolvedType","originalRequest","validationResult","finalType","success","enhancedPrompt","enhancePrompt","description","prompt","originalType","prepareBatchAgentSpawn","requests","results","result","push","error","isValid","suggestAgentTypes","taskDescription","availableTypes","suggestions","keywords","toLowerCase","split","agentType","agentKeywords","overlap","some","keyword","agentKeyword","includes","length","slice","validateAgentTypeSync","legacyMapping","analyst","monitor","coordinator","optimizer","documenter","specialist","architect","getAgentInfo","categories","core","development","analysis","coordination","testing","specialized","available","legacy","code","test","design","documentation","taskAgentIntegration","claudeCodeTaskHook","subagentType","validatedType"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/agents/task-agent-integration.ts"],"sourcesContent":["/**\r\n * Task Agent Integration Layer\r\n * Provides validation and fallback for Claude Code's Task tool\r\n */\r\n\r\nimport { validateAgentType, AgentValidationResult } from './agent-validator.js';\r\nimport { getAvailableAgentTypes } from './agent-loader.js';\r\n\r\nexport interface TaskAgentSpawnRequest {\r\n type: string;\r\n description: string;\r\n prompt: string;\r\n capabilities?: string[];\r\n priority?: 'low' | 'medium' | 'high' | 'critical';\r\n}\r\n\r\nexport interface TaskAgentSpawnResult {\r\n originalRequest: TaskAgentSpawnRequest;\r\n validationResult: AgentValidationResult;\r\n finalType: string;\r\n spawnCommand: string;\r\n warnings: string[];\r\n success: boolean;\r\n}\r\n\r\nexport class TaskAgentIntegration {\r\n private static instance: TaskAgentIntegration;\r\n\r\n static getInstance(): TaskAgentIntegration {\r\n if (!this.instance) {\r\n this.instance = new TaskAgentIntegration();\r\n }\r\n return this.instance;\r\n }\r\n\r\n async prepareAgentSpawn(request: TaskAgentSpawnRequest): Promise<TaskAgentSpawnResult> {\r\n const validation = await validateAgentType(request.type);\r\n const warnings: string[] = [...validation.warnings];\r\n\r\n const spawnCommand = this.generateTaskCommand(request, validation);\r\n\r\n if (validation.fallbackUsed) {\r\n console.warn(`⚠️ Agent type validation for '${request.type}':`);\r\n for (const warning of warnings) {\r\n console.warn(` ${warning}`);\r\n }\r\n console.info(`✅ Using validated type: '${validation.resolvedType}'`);\r\n }\r\n\r\n return {\r\n originalRequest: request,\r\n validationResult: validation,\r\n finalType: validation.resolvedType,\r\n spawnCommand,\r\n warnings,\r\n success: true,\r\n };\r\n }\r\n\r\n private generateTaskCommand(\r\n request: TaskAgentSpawnRequest,\r\n validation: AgentValidationResult,\r\n ): string {\r\n const enhancedPrompt = this.enhancePrompt(request, validation);\r\n\r\n return `Task(\"${request.description}\", \"${enhancedPrompt}\", \"${validation.resolvedType}\")`;\r\n }\r\n\r\n private enhancePrompt(request: TaskAgentSpawnRequest, validation: AgentValidationResult): string {\r\n let enhancedPrompt = request.prompt;\r\n\r\n if (validation.fallbackUsed) {\r\n enhancedPrompt = `[Agent Type: Originally requested '${validation.originalType}', using '${validation.resolvedType}' as validated type]\\n\\n${enhancedPrompt}`;\r\n }\r\n\r\n enhancedPrompt += `\\n\\n[Coordination Context: Task coordination via TodoWrite tool]`;\r\n\r\n return enhancedPrompt;\r\n }\r\n\r\n async prepareBatchAgentSpawn(requests: TaskAgentSpawnRequest[]): Promise<TaskAgentSpawnResult[]> {\r\n const results: TaskAgentSpawnResult[] = [];\r\n\r\n for (const request of requests) {\r\n try {\r\n const result = await this.prepareAgentSpawn(request);\r\n results.push(result);\r\n } catch (error) {\r\n console.error(`Failed to prepare agent spawn for ${request.type}:`, error);\r\n results.push({\r\n originalRequest: request,\r\n validationResult: {\r\n isValid: false,\r\n resolvedType: 'researcher',\r\n originalType: request.type,\r\n fallbackUsed: true,\r\n warnings: [`Error validating agent type: ${error}`],\r\n },\r\n finalType: 'researcher',\r\n spawnCommand: `Task(\"${request.description}\", \"${request.prompt}\", \"researcher\")`,\r\n warnings: [`Failed to validate ${request.type}, using researcher as fallback`],\r\n success: false,\r\n });\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n async suggestAgentTypes(taskDescription: string): Promise<string[]> {\r\n const availableTypes = await getAvailableAgentTypes();\r\n const suggestions: string[] = [];\r\n const keywords = taskDescription.toLowerCase().split(/\\s+/);\r\n\r\n for (const agentType of availableTypes) {\r\n const agentKeywords = agentType.toLowerCase().split(/[-_]/);\r\n\r\n const overlap = keywords.some((keyword) =>\r\n agentKeywords.some(\r\n (agentKeyword) => agentKeyword.includes(keyword) || keyword.includes(agentKeyword),\r\n ),\r\n );\r\n\r\n if (overlap) {\r\n suggestions.push(agentType);\r\n }\r\n }\r\n\r\n return suggestions.length === 0\r\n ? ['researcher', 'coder', 'reviewer', 'tester']\r\n : suggestions.slice(0, 5);\r\n }\r\n\r\n validateAgentTypeSync(type: string): { isValid: boolean; resolvedType: string } {\r\n const legacyMapping: Record<string, string> = {\r\n analyst: 'code-analyzer',\r\n 'consensus-builder': 'consensus-builder',\r\n monitor: 'performance-benchmarker',\r\n coordinator: 'hierarchical-coordinator',\r\n optimizer: 'perf-analyzer',\r\n documenter: 'api-docs',\r\n specialist: 'system-architect',\r\n architect: 'system-architect',\r\n };\r\n\r\n const resolvedType = legacyMapping[type.toLowerCase()] || type;\r\n\r\n return {\r\n isValid: true,\r\n resolvedType,\r\n };\r\n }\r\n\r\n async getAgentInfo(): Promise<{\r\n available: string[];\r\n categories: { [category: string]: string[] };\r\n legacy: { [old: string]: string };\r\n suggestions: { [task: string]: string[] };\r\n }> {\r\n const availableTypes = await getAvailableAgentTypes();\r\n\r\n const categories: Record<string, string[]> = {\r\n core: [],\r\n development: [],\r\n analysis: [],\r\n coordination: [],\r\n testing: [],\r\n specialized: [],\r\n };\r\n\r\n for (const type of availableTypes) {\r\n if (type.includes('coder') || type.includes('dev')) {\r\n categories.development.push(type);\r\n } else if (type.includes('test')) {\r\n categories.testing.push(type);\r\n } else if (type.includes('analyz') || type.includes('review')) {\r\n categories.analysis.push(type);\r\n } else if (type.includes('coordinator') || type.includes('orchestrat')) {\r\n categories.coordination.push(type);\r\n } else if (['researcher', 'reviewer', 'planner'].includes(type)) {\r\n categories.core.push(type);\r\n } else {\r\n categories.specialized.push(type);\r\n }\r\n }\r\n\r\n return {\r\n available: availableTypes,\r\n categories,\r\n legacy: {\r\n analyst: 'code-analyzer',\r\n 'consensus-builder': 'consensus-builder',\r\n monitor: 'performance-benchmarker',\r\n coordinator: 'hierarchical-coordinator',\r\n optimizer: 'perf-analyzer',\r\n documenter: 'api-docs',\r\n specialist: 'system-architect',\r\n architect: 'system-architect',\r\n },\r\n suggestions: {\r\n code: ['coder', 'reviewer', 'code-analyzer'],\r\n test: ['tester', 'production-validator'],\r\n design: ['system-architect', 'base-template-generator'],\r\n analysis: ['code-analyzer', 'perf-analyzer'],\r\n documentation: ['api-docs'],\r\n coordination: ['task-orchestrator', 'hierarchical-coordinator'],\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport const taskAgentIntegration = TaskAgentIntegration.getInstance();\r\n\r\nexport const prepareAgentSpawn = (request: TaskAgentSpawnRequest) =>\r\n taskAgentIntegration.prepareAgentSpawn(request);\r\n\r\nexport const prepareBatchAgentSpawn = (requests: TaskAgentSpawnRequest[]) =>\r\n taskAgentIntegration.prepareBatchAgentSpawn(requests);\r\n\r\nexport const suggestAgentTypes = (taskDescription: string) =>\r\n taskAgentIntegration.suggestAgentTypes(taskDescription);\r\n\r\nexport const validateAgentTypeSync = (type: string) =>\r\n taskAgentIntegration.validateAgentTypeSync(type);\r\n\r\nexport const getAgentInfo = () => taskAgentIntegration.getAgentInfo();\r\n\r\nexport async function claudeCodeTaskHook(\r\n subagentType: string,\r\n description: string,\r\n prompt: string,\r\n): Promise<{\r\n validatedType: string;\r\n enhancedPrompt: string;\r\n warnings: string[];\r\n}> {\r\n const request: TaskAgentSpawnRequest = {\r\n type: subagentType,\r\n description,\r\n prompt,\r\n };\r\n\r\n const result = await prepareAgentSpawn(request);\r\n\r\n return {\r\n validatedType: result.finalType,\r\n enhancedPrompt: result.originalRequest.prompt,\r\n warnings: result.warnings,\r\n };\r\n}"],"names":["validateAgentType","getAvailableAgentTypes","TaskAgentIntegration","instance","getInstance","prepareAgentSpawn","request","validation","type","warnings","spawnCommand","generateTaskCommand","fallbackUsed","console","warn","warning","info","resolvedType","originalRequest","validationResult","finalType","success","enhancedPrompt","enhancePrompt","description","prompt","originalType","prepareBatchAgentSpawn","requests","results","result","push","error","isValid","suggestAgentTypes","taskDescription","availableTypes","suggestions","keywords","toLowerCase","split","agentType","agentKeywords","overlap","some","keyword","agentKeyword","includes","length","slice","validateAgentTypeSync","legacyMapping","analyst","monitor","coordinator","optimizer","documenter","specialist","architect","getAgentInfo","categories","core","development","analysis","coordination","testing","specialized","available","legacy","code","test","design","documentation","taskAgentIntegration","claudeCodeTaskHook","subagentType","validatedType"],"mappings":"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"}
@@ -0,0 +1,390 @@
1
+ /**
2
+ * Health Check HTTP Endpoints
3
+ *
4
+ * Provides REST API endpoints for health monitoring:
5
+ * - GET /health - Overall system health status
6
+ * - GET /health/ready - Kubernetes readiness probe
7
+ * - GET /health/live - Kubernetes liveness probe
8
+ * - GET /health/detailed - Detailed component-level health report
9
+ *
10
+ * Integrates with monitoring dashboards and Kubernetes orchestration.
11
+ *
12
+ * Part of Task P2-4.1: Comprehensive Health Checks
13
+ */ import express from 'express';
14
+ import { HealthCheckSystem } from '../services/health-check-system.js';
15
+ /**
16
+ * Health check endpoints router
17
+ */ export class HealthEndpoints {
18
+ router;
19
+ healthCheckSystem;
20
+ constructor(config){
21
+ this.router = express.Router();
22
+ this.healthCheckSystem = new HealthCheckSystem(config?.systemConfig);
23
+ this.setupRoutes();
24
+ }
25
+ /**
26
+ * Setup all health check routes
27
+ */ setupRoutes() {
28
+ /**
29
+ * GET /health - Overall system health
30
+ *
31
+ * Returns the current health status of the system including:
32
+ * - Overall status (healthy/degraded/unhealthy)
33
+ * - Response latency
34
+ * - Component health summary
35
+ *
36
+ * Response time: <1s
37
+ * Status codes:
38
+ * 200: System healthy
39
+ * 503: System degraded or unhealthy
40
+ */ this.router.get('/health', async (req, res)=>{
41
+ const startTime = Date.now();
42
+ const overall = await this.healthCheckSystem.getOverallHealth();
43
+ const responseTime = Date.now() - startTime;
44
+ const response = {
45
+ status: overall.status,
46
+ timestamp: new Date().toISOString(),
47
+ latency: responseTime,
48
+ checks: {
49
+ database: overall.dependencies?.[0].status,
50
+ redis: overall.dependencies?.[1].status,
51
+ filesystem: overall.dependencies?.[2].status,
52
+ agents: overall.dependencies?.[3].status
53
+ }
54
+ };
55
+ const statusCode = overall.status === 'healthy' ? 200 : 503;
56
+ res.status(statusCode).json(response);
57
+ });
58
+ /**
59
+ * GET /health/ready - Kubernetes readiness probe
60
+ *
61
+ * Checks if the system is ready to accept traffic.
62
+ * All critical services must be healthy.
63
+ *
64
+ * Response time: <500ms
65
+ * Status codes:
66
+ * 200: Ready to accept traffic
67
+ * 503: Not ready
68
+ */ this.router.get('/health/ready', async (req, res)=>{
69
+ const startTime = Date.now();
70
+ const overall = await this.healthCheckSystem.getOverallHealth();
71
+ const isReady = overall.status === 'healthy';
72
+ const responseTime = Date.now() - startTime;
73
+ const response = {
74
+ status: isReady ? 'ready' : 'not-ready',
75
+ timestamp: new Date().toISOString()
76
+ };
77
+ const statusCode = isReady ? 200 : 503;
78
+ res.status(statusCode).json(response);
79
+ });
80
+ /**
81
+ * GET /health/live - Kubernetes liveness probe
82
+ *
83
+ * Checks if the system is alive and responding.
84
+ * Allows degraded services.
85
+ *
86
+ * Response time: <500ms
87
+ * Status codes:
88
+ * 200: System alive
89
+ * 503: System down/unhealthy
90
+ */ this.router.get('/health/live', async (req, res)=>{
91
+ const startTime = Date.now();
92
+ const overall = await this.healthCheckSystem.getOverallHealth();
93
+ const isAlive = overall.status !== 'unhealthy';
94
+ const responseTime = Date.now() - startTime;
95
+ const response = {
96
+ status: isAlive ? 'alive' : 'not-alive',
97
+ timestamp: new Date().toISOString()
98
+ };
99
+ const statusCode = isAlive ? 200 : 503;
100
+ res.status(statusCode).json(response);
101
+ });
102
+ /**
103
+ * GET /health/detailed - Detailed health report
104
+ *
105
+ * Returns comprehensive health information including:
106
+ * - Overall system status
107
+ * - Individual service metrics
108
+ * - Response latencies
109
+ * - Disk usage
110
+ * - Queue depth
111
+ * - Active agents
112
+ * - Alerts and warnings
113
+ *
114
+ * Response time: <1s
115
+ * Status codes:
116
+ * 200: Report generated (regardless of health status)
117
+ */ this.router.get('/health/detailed', async (req, res)=>{
118
+ const startTime = Date.now();
119
+ const report = await this.healthCheckSystem.getDetailedHealthReport();
120
+ const responseTime = Date.now() - startTime;
121
+ const response = {
122
+ timestamp: report.timestamp.toISOString(),
123
+ overallStatus: report.overallStatus,
124
+ latency: responseTime,
125
+ totalLatency: report.latency,
126
+ services: {
127
+ database: {
128
+ status: report.services.database.status,
129
+ latency: report.services.database.latency,
130
+ message: report.services.database.message,
131
+ metadata: report.services.database.metadata
132
+ },
133
+ redis: {
134
+ status: report.services.redis.status,
135
+ latency: report.services.redis.latency,
136
+ message: report.services.redis.message,
137
+ metadata: report.services.redis.metadata
138
+ },
139
+ filesystem: {
140
+ status: report.services.filesystem.status,
141
+ latency: report.services.filesystem.latency,
142
+ message: report.services.filesystem.message,
143
+ metadata: report.services.filesystem.metadata
144
+ },
145
+ agents: {
146
+ status: report.services.agents.status,
147
+ latency: report.services.agents.latency,
148
+ message: report.services.agents.message,
149
+ metadata: report.services.agents.metadata
150
+ }
151
+ },
152
+ alerts: report.alerts || []
153
+ };
154
+ res.status(200).json(response);
155
+ });
156
+ /**
157
+ * GET /health/database - Database health only
158
+ *
159
+ * Focused check for database connectivity.
160
+ * Useful for targeted monitoring.
161
+ */ this.router.get('/health/database', async (req, res)=>{
162
+ const startTime = Date.now();
163
+ const check = await this.healthCheckSystem.checkDatabase();
164
+ const responseTime = Date.now() - startTime;
165
+ const response = {
166
+ service: 'database',
167
+ status: check.status,
168
+ latency: responseTime,
169
+ message: check.message,
170
+ metadata: check.metadata,
171
+ timestamp: new Date().toISOString()
172
+ };
173
+ const statusCode = check.status === 'healthy' ? 200 : 503;
174
+ res.status(statusCode).json(response);
175
+ });
176
+ /**
177
+ * GET /health/redis - Redis health only
178
+ *
179
+ * Focused check for Redis connectivity.
180
+ */ this.router.get('/health/redis', async (req, res)=>{
181
+ const startTime = Date.now();
182
+ const check = await this.healthCheckSystem.checkRedis();
183
+ const responseTime = Date.now() - startTime;
184
+ const response = {
185
+ service: 'redis',
186
+ status: check.status,
187
+ latency: responseTime,
188
+ message: check.message,
189
+ metadata: check.metadata,
190
+ timestamp: new Date().toISOString()
191
+ };
192
+ const statusCode = check.status === 'healthy' ? 200 : 503;
193
+ res.status(statusCode).json(response);
194
+ });
195
+ /**
196
+ * GET /health/filesystem - File system health only
197
+ *
198
+ * Focused check for disk space and permissions.
199
+ */ this.router.get('/health/filesystem', async (req, res)=>{
200
+ const startTime = Date.now();
201
+ const check = await this.healthCheckSystem.checkFileSystem();
202
+ const responseTime = Date.now() - startTime;
203
+ const response = {
204
+ service: 'filesystem',
205
+ status: check.status,
206
+ latency: responseTime,
207
+ message: check.message,
208
+ metadata: check.metadata,
209
+ timestamp: new Date().toISOString()
210
+ };
211
+ const statusCode = check.status === 'healthy' ? 200 : 503;
212
+ res.status(statusCode).json(response);
213
+ });
214
+ /**
215
+ * GET /health/agents - Agent health only
216
+ *
217
+ * Focused check for active agents and queue depth.
218
+ */ this.router.get('/health/agents', async (req, res)=>{
219
+ const startTime = Date.now();
220
+ const check = await this.healthCheckSystem.checkAgents();
221
+ const responseTime = Date.now() - startTime;
222
+ const response = {
223
+ service: 'agents',
224
+ status: check.status,
225
+ latency: responseTime,
226
+ message: check.message,
227
+ metadata: check.metadata,
228
+ timestamp: new Date().toISOString()
229
+ };
230
+ const statusCode = check.status === 'healthy' ? 200 : 503;
231
+ res.status(statusCode).json(response);
232
+ });
233
+ /**
234
+ * GET /health/ping - Fast connectivity check
235
+ *
236
+ * Ultra-fast ping endpoint for basic connectivity checks.
237
+ * Returns in <100ms for Kubernetes probes and dashboards.
238
+ *
239
+ * Query parameters:
240
+ * - timeout: Optional timeout in milliseconds (default: 100)
241
+ *
242
+ * Response time: <100ms
243
+ * Status codes:
244
+ * 200: System responsive
245
+ * 503: System unresponsive or timeout
246
+ */ this.router.get('/health/ping', async (req, res)=>{
247
+ const startTime = Date.now();
248
+ try {
249
+ // Parse optional timeout parameter
250
+ const timeout = req.query.timeout ? parseInt(req.query.timeout, 10) : 100;
251
+ // Validate timeout
252
+ if (isNaN(timeout) || timeout < 1 || timeout > 1000) {
253
+ res.status(400).json({
254
+ error: 'Invalid timeout parameter',
255
+ message: 'Timeout must be between 1 and 1000 milliseconds',
256
+ timestamp: new Date().toISOString()
257
+ });
258
+ return;
259
+ }
260
+ const check = await this.healthCheckSystem.ping(timeout);
261
+ const responseTime = Date.now() - startTime;
262
+ const response = {
263
+ status: check.status,
264
+ latency: responseTime,
265
+ message: check.message,
266
+ metadata: check.metadata,
267
+ timestamp: new Date().toISOString()
268
+ };
269
+ res.status(200).json(response);
270
+ } catch (error) {
271
+ const responseTime = Date.now() - startTime;
272
+ const response = {
273
+ status: 'unhealthy',
274
+ latency: responseTime,
275
+ message: error.message || 'Ping failed',
276
+ error: error.code || 'UNKNOWN_ERROR',
277
+ timestamp: new Date().toISOString()
278
+ };
279
+ res.status(503).json(response);
280
+ }
281
+ });
282
+ /**
283
+ * GET /health/aggregate - Aggregated health statistics
284
+ *
285
+ * Returns comprehensive aggregated health metrics from all services.
286
+ * Includes service counts, average latency, warnings, and errors.
287
+ *
288
+ * Query parameters:
289
+ * - timeout: Optional timeout in milliseconds (default: 5000)
290
+ *
291
+ * Response time: <5s (default)
292
+ * Status codes:
293
+ * 200: Stats collected successfully
294
+ * 503: Timeout or aggregation failure
295
+ */ this.router.get('/health/aggregate', async (req, res)=>{
296
+ const startTime = Date.now();
297
+ try {
298
+ // Parse optional timeout parameter
299
+ const timeout = req.query.timeout ? parseInt(req.query.timeout, 10) : 5000;
300
+ // Validate timeout
301
+ if (isNaN(timeout) || timeout < 100 || timeout > 30000) {
302
+ res.status(400).json({
303
+ error: 'Invalid timeout parameter',
304
+ message: 'Timeout must be between 100 and 30000 milliseconds',
305
+ timestamp: new Date().toISOString()
306
+ });
307
+ return;
308
+ }
309
+ const stats = await this.healthCheckSystem.getAggregateStats(timeout);
310
+ const responseTime = Date.now() - startTime;
311
+ const response = {
312
+ timestamp: stats.timestamp.toISOString(),
313
+ overallStatus: stats.overallStatus,
314
+ latency: responseTime,
315
+ totalLatency: stats.latency,
316
+ averageServiceLatency: stats.averageServiceLatency,
317
+ serviceCount: stats.serviceCount,
318
+ services: {
319
+ database: {
320
+ status: stats.services.database.status,
321
+ latency: stats.services.database.latency,
322
+ message: stats.services.database.message
323
+ },
324
+ redis: {
325
+ status: stats.services.redis.status,
326
+ latency: stats.services.redis.latency,
327
+ message: stats.services.redis.message
328
+ },
329
+ filesystem: {
330
+ status: stats.services.filesystem.status,
331
+ latency: stats.services.filesystem.latency,
332
+ message: stats.services.filesystem.message
333
+ },
334
+ agents: {
335
+ status: stats.services.agents.status,
336
+ latency: stats.services.agents.latency,
337
+ message: stats.services.agents.message
338
+ }
339
+ },
340
+ metadata: stats.metadata,
341
+ warnings: stats.warnings,
342
+ errors: stats.errors
343
+ };
344
+ const statusCode = stats.overallStatus === 'healthy' ? 200 : 503;
345
+ res.status(statusCode).json(response);
346
+ } catch (error) {
347
+ const responseTime = Date.now() - startTime;
348
+ const response = {
349
+ status: 'error',
350
+ latency: responseTime,
351
+ message: error.message || 'Failed to aggregate health stats',
352
+ error: error.code || 'UNKNOWN_ERROR',
353
+ timestamp: new Date().toISOString()
354
+ };
355
+ res.status(503).json(response);
356
+ }
357
+ });
358
+ }
359
+ /**
360
+ * Get the configured router
361
+ */ getRouter() {
362
+ return this.router;
363
+ }
364
+ /**
365
+ * Get the health check system instance
366
+ */ getHealthCheckSystem() {
367
+ return this.healthCheckSystem;
368
+ }
369
+ }
370
+ /**
371
+ * Create and configure health check endpoints
372
+ * Usage:
373
+ * const app = express();
374
+ * const healthEndpoints = new HealthEndpoints();
375
+ * app.use('/health', healthEndpoints.getRouter());
376
+ */ export function createHealthEndpoints(config) {
377
+ return new HealthEndpoints(config);
378
+ }
379
+ /**
380
+ * Middleware for adding health check endpoints to an Express app
381
+ * Usage:
382
+ * const app = express();
383
+ * app.use(mountHealthEndpoints());
384
+ */ export function mountHealthEndpoints(config) {
385
+ const endpoints = new HealthEndpoints(config);
386
+ return endpoints.getRouter();
387
+ }
388
+ export { HealthCheckSystem };
389
+
390
+ //# sourceMappingURL=health-endpoints.js.map