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
@@ -0,0 +1,695 @@
1
+ /**
2
+ * Schema Transform Library
3
+ *
4
+ * Provides bidirectional transformations between SQLite and Redis schemas.
5
+ * Ensures data consistency and prevents data loss during transformations.
6
+ *
7
+ * Task: Integration Standardization Plan - Task 2.2
8
+ * Version: 1.0.0
9
+ */ import { getGlobalLogger } from './logging.js';
10
+ import { StandardError } from './errors.js';
11
+ const logger = getGlobalLogger();
12
+ // ============================================================================
13
+ // Type Converters
14
+ // ============================================================================
15
+ export const TYPE_CONVERTERS = {
16
+ /**
17
+ * DECIMAL to REAL (PostgreSQL → SQLite)
18
+ */ 'DECIMAL_TO_REAL': (val)=>{
19
+ if (val === null || val === undefined) return null;
20
+ const num = typeof val === 'string' ? parseFloat(val) : val;
21
+ return isNaN(num) ? null : num;
22
+ },
23
+ /**
24
+ * INTEGER conversion (handles string/number inputs)
25
+ */ 'INTEGER': (val)=>{
26
+ if (val === null || val === undefined) return null;
27
+ const num = typeof val === 'string' ? parseInt(val, 10) : val;
28
+ return isNaN(num) ? null : num;
29
+ },
30
+ /**
31
+ * REAL conversion (handles string/number inputs)
32
+ */ 'REAL': (val)=>{
33
+ if (val === null || val === undefined) return null;
34
+ const num = typeof val === 'string' ? parseFloat(val) : val;
35
+ return isNaN(num) ? null : num;
36
+ },
37
+ /**
38
+ * Number to string (for Redis storage)
39
+ */ 'NUMBER_TO_STRING': (val)=>{
40
+ if (val === null || val === undefined) return null;
41
+ if (isNaN(val)) return null;
42
+ return val.toString();
43
+ },
44
+ /**
45
+ * String to number (from Redis)
46
+ */ 'STRING_TO_NUMBER': (val)=>{
47
+ if (val === null || val === undefined || val === '') return null;
48
+ const num = parseFloat(val);
49
+ return isNaN(num) ? null : num;
50
+ },
51
+ /**
52
+ * ENUM to TEXT (PostgreSQL → SQLite)
53
+ */ 'ENUM_TO_TEXT': (val)=>{
54
+ if (val === null || val === undefined) return null;
55
+ return val.toString();
56
+ },
57
+ /**
58
+ * DATETIME string to Unix timestamp (SQLite → Redis)
59
+ */ 'DATETIME_TO_TIMESTAMP': (val)=>{
60
+ if (val === null || val === undefined) return null;
61
+ const timestamp = new Date(val).getTime();
62
+ return isNaN(timestamp) ? null : timestamp;
63
+ },
64
+ /**
65
+ * Unix timestamp to DATETIME string (Redis → SQLite)
66
+ */ 'TIMESTAMP_TO_DATETIME': (val)=>{
67
+ if (val === null || val === undefined) return null;
68
+ const num = typeof val === 'string' ? parseInt(val, 10) : val;
69
+ if (isNaN(num)) return null;
70
+ return new Date(num).toISOString();
71
+ },
72
+ /**
73
+ * PostgreSQL TIMESTAMP to SQLite DATETIME
74
+ */ 'TIMESTAMP_TO_ISO': (val)=>{
75
+ if (val === null || val === undefined) return null;
76
+ try {
77
+ if (val instanceof Date) return val.toISOString();
78
+ if (typeof val === 'number') return new Date(val * 1000).toISOString();
79
+ return new Date(val).toISOString();
80
+ } catch {
81
+ return null;
82
+ }
83
+ },
84
+ /**
85
+ * Parse JSON string to object
86
+ */ 'TEXT_TO_JSON': (val)=>{
87
+ if (val === null || val === undefined || val === '') return null;
88
+ try {
89
+ return JSON.parse(val);
90
+ } catch (err) {
91
+ logger.warn('Failed to parse JSON', {
92
+ value: val,
93
+ error: err.message
94
+ });
95
+ return null;
96
+ }
97
+ },
98
+ /**
99
+ * Stringify object to JSON
100
+ */ 'JSON_TO_TEXT': (val)=>{
101
+ if (val === null || val === undefined) return null;
102
+ try {
103
+ return JSON.stringify(val);
104
+ } catch (err) {
105
+ logger.warn('Failed to stringify JSON', {
106
+ value: val,
107
+ error: err.message
108
+ });
109
+ return null;
110
+ }
111
+ },
112
+ /**
113
+ * Boolean to INTEGER (0/1 for SQLite)
114
+ */ 'BOOLEAN_TO_INTEGER': (val)=>{
115
+ if (val === null || val === undefined) return null;
116
+ if (typeof val === 'number') return val === 1 ? 1 : 0;
117
+ return val ? 1 : 0;
118
+ },
119
+ /**
120
+ * INTEGER to Boolean (SQLite → JavaScript)
121
+ */ 'INTEGER_TO_BOOLEAN': (val)=>{
122
+ if (val === null || val === undefined) return null;
123
+ const num = typeof val === 'string' ? parseInt(val, 10) : val;
124
+ return num === 1;
125
+ },
126
+ /**
127
+ * Identity transform (no conversion needed)
128
+ */ 'IDENTITY': (val)=>val
129
+ };
130
+ // ============================================================================
131
+ // Schema Mappings
132
+ // ============================================================================
133
+ export const SCHEMA_MAPPINGS = {
134
+ /**
135
+ * Agent Executions: Redis ↔ SQLite
136
+ */ agent_executions: {
137
+ version: '1.0.0',
138
+ schema: 'agent_executions',
139
+ primaryKey: 'agent_id',
140
+ ttl: 86400,
141
+ fields: [
142
+ {
143
+ source: 'id',
144
+ destination: 'agent_id',
145
+ sourceType: 'TEXT',
146
+ destinationType: 'string',
147
+ transform: TYPE_CONVERTERS.IDENTITY,
148
+ required: true
149
+ },
150
+ {
151
+ source: 'agent_id',
152
+ destination: 'agent_id',
153
+ sourceType: 'TEXT',
154
+ destinationType: 'string',
155
+ transform: TYPE_CONVERTERS.IDENTITY,
156
+ required: true
157
+ },
158
+ {
159
+ source: 'task_id',
160
+ destination: 'task_id',
161
+ sourceType: 'TEXT',
162
+ destinationType: 'string',
163
+ transform: TYPE_CONVERTERS.IDENTITY,
164
+ required: true
165
+ },
166
+ {
167
+ source: 'type',
168
+ destination: 'type',
169
+ sourceType: 'TEXT',
170
+ destinationType: 'string',
171
+ transform: TYPE_CONVERTERS.IDENTITY,
172
+ required: true
173
+ },
174
+ {
175
+ source: 'status',
176
+ destination: 'status',
177
+ sourceType: 'TEXT',
178
+ destinationType: 'string',
179
+ transform: TYPE_CONVERTERS.IDENTITY,
180
+ required: true
181
+ },
182
+ {
183
+ source: 'confidence',
184
+ destination: 'confidence',
185
+ sourceType: 'REAL',
186
+ destinationType: 'string',
187
+ transform: null,
188
+ required: false
189
+ },
190
+ {
191
+ source: 'spawned_at',
192
+ destination: 'spawned_at',
193
+ sourceType: 'DATETIME',
194
+ destinationType: 'number',
195
+ transform: null,
196
+ required: true
197
+ },
198
+ {
199
+ source: 'completed_at',
200
+ destination: 'completed_at',
201
+ sourceType: 'DATETIME',
202
+ destinationType: 'number',
203
+ transform: null,
204
+ required: false
205
+ },
206
+ {
207
+ source: 'metadata',
208
+ destination: 'metadata',
209
+ sourceType: 'TEXT',
210
+ destinationType: 'string',
211
+ transform: TYPE_CONVERTERS.IDENTITY,
212
+ required: false
213
+ }
214
+ ]
215
+ },
216
+ /**
217
+ * Skill Executions: PostgreSQL → SQLite (one-way)
218
+ */ skill_executions: {
219
+ version: '1.0.0',
220
+ schema: 'skill_executions',
221
+ primaryKey: 'id',
222
+ fields: [
223
+ {
224
+ source: 'id',
225
+ destination: 'id',
226
+ sourceType: 'SERIAL',
227
+ destinationType: 'INTEGER',
228
+ transform: TYPE_CONVERTERS.INTEGER,
229
+ required: true
230
+ },
231
+ {
232
+ source: 'skill_id',
233
+ destination: 'skill_id',
234
+ sourceType: 'INTEGER',
235
+ destinationType: 'INTEGER',
236
+ transform: TYPE_CONVERTERS.INTEGER,
237
+ required: true
238
+ },
239
+ {
240
+ source: 'execution_time_ms',
241
+ destination: 'execution_time_ms',
242
+ sourceType: 'INTEGER',
243
+ destinationType: 'INTEGER',
244
+ transform: TYPE_CONVERTERS.INTEGER,
245
+ required: true
246
+ },
247
+ {
248
+ source: 'cost_usd',
249
+ destination: 'cost_usd',
250
+ sourceType: 'DECIMAL',
251
+ destinationType: 'REAL',
252
+ transform: TYPE_CONVERTERS.DECIMAL_TO_REAL,
253
+ required: false
254
+ },
255
+ {
256
+ source: 'tokens_avoided',
257
+ destination: 'tokens_avoided',
258
+ sourceType: 'INTEGER',
259
+ destinationType: 'INTEGER',
260
+ transform: TYPE_CONVERTERS.INTEGER,
261
+ required: false
262
+ },
263
+ {
264
+ source: 'status',
265
+ destination: 'status',
266
+ sourceType: 'ENUM',
267
+ destinationType: 'TEXT',
268
+ transform: TYPE_CONVERTERS.ENUM_TO_TEXT,
269
+ required: true
270
+ },
271
+ {
272
+ source: 'executed_at',
273
+ destination: 'executed_at',
274
+ sourceType: 'TIMESTAMP',
275
+ destinationType: 'DATETIME',
276
+ transform: TYPE_CONVERTERS.TIMESTAMP_TO_ISO,
277
+ required: true
278
+ },
279
+ {
280
+ source: 'metadata',
281
+ destination: 'metadata',
282
+ sourceType: 'JSONB',
283
+ destinationType: 'TEXT',
284
+ transform: TYPE_CONVERTERS.JSON_TO_TEXT,
285
+ required: false
286
+ }
287
+ ]
288
+ },
289
+ /**
290
+ * Artifacts: SQLite ↔ Redis (cache layer)
291
+ */ artifacts: {
292
+ version: '1.0.0',
293
+ schema: 'artifacts',
294
+ primaryKey: 'id',
295
+ ttl: 2592000,
296
+ fields: [
297
+ {
298
+ source: 'id',
299
+ destination: 'artifact_id',
300
+ sourceType: 'TEXT',
301
+ destinationType: 'string',
302
+ transform: TYPE_CONVERTERS.IDENTITY,
303
+ required: true
304
+ },
305
+ {
306
+ source: 'name',
307
+ destination: 'name',
308
+ sourceType: 'TEXT',
309
+ destinationType: 'string',
310
+ transform: TYPE_CONVERTERS.IDENTITY,
311
+ required: true
312
+ },
313
+ {
314
+ source: 'type',
315
+ destination: 'type',
316
+ sourceType: 'TEXT',
317
+ destinationType: 'string',
318
+ transform: TYPE_CONVERTERS.IDENTITY,
319
+ required: true
320
+ },
321
+ {
322
+ source: 'content',
323
+ destination: 'content',
324
+ sourceType: 'TEXT',
325
+ destinationType: 'string',
326
+ transform: TYPE_CONVERTERS.IDENTITY,
327
+ required: false
328
+ },
329
+ {
330
+ source: 'content_hash',
331
+ destination: 'content_hash',
332
+ sourceType: 'TEXT',
333
+ destinationType: 'string',
334
+ transform: TYPE_CONVERTERS.IDENTITY,
335
+ required: false
336
+ },
337
+ {
338
+ source: 'size_bytes',
339
+ destination: 'size_bytes',
340
+ sourceType: 'INTEGER',
341
+ destinationType: 'string',
342
+ transform: null,
343
+ required: false
344
+ },
345
+ {
346
+ source: 'metadata',
347
+ destination: 'metadata',
348
+ sourceType: 'TEXT',
349
+ destinationType: 'string',
350
+ transform: TYPE_CONVERTERS.IDENTITY,
351
+ required: false
352
+ },
353
+ {
354
+ source: 'created_at',
355
+ destination: 'created_at',
356
+ sourceType: 'DATETIME',
357
+ destinationType: 'number',
358
+ transform: null,
359
+ required: true
360
+ },
361
+ {
362
+ source: 'expires_at',
363
+ destination: 'expires_at',
364
+ sourceType: 'DATETIME',
365
+ destinationType: 'number',
366
+ transform: null,
367
+ required: false
368
+ },
369
+ {
370
+ source: 'status',
371
+ destination: 'status',
372
+ sourceType: 'TEXT',
373
+ destinationType: 'string',
374
+ transform: TYPE_CONVERTERS.IDENTITY,
375
+ required: true
376
+ }
377
+ ]
378
+ },
379
+ /**
380
+ * Coordination Events: Redis → SQLite (archival)
381
+ */ coordination_events: {
382
+ version: '1.0.0',
383
+ schema: 'coordination_events',
384
+ primaryKey: 'event_id',
385
+ ttl: 3600,
386
+ fields: [
387
+ {
388
+ source: 'event_id',
389
+ destination: 'id',
390
+ sourceType: 'string',
391
+ destinationType: 'TEXT',
392
+ transform: TYPE_CONVERTERS.IDENTITY,
393
+ required: true
394
+ },
395
+ {
396
+ source: 'task_id',
397
+ destination: 'task_id',
398
+ sourceType: 'string',
399
+ destinationType: 'TEXT',
400
+ transform: TYPE_CONVERTERS.IDENTITY,
401
+ required: true
402
+ },
403
+ {
404
+ source: 'agent_id',
405
+ destination: 'agent_id',
406
+ sourceType: 'string',
407
+ destinationType: 'TEXT',
408
+ transform: TYPE_CONVERTERS.IDENTITY,
409
+ required: false
410
+ },
411
+ {
412
+ source: 'event_type',
413
+ destination: 'event_type',
414
+ sourceType: 'string',
415
+ destinationType: 'TEXT',
416
+ transform: TYPE_CONVERTERS.IDENTITY,
417
+ required: true
418
+ },
419
+ {
420
+ source: 'timestamp',
421
+ destination: 'timestamp',
422
+ sourceType: 'number',
423
+ destinationType: 'DATETIME',
424
+ transform: null,
425
+ required: true
426
+ },
427
+ {
428
+ source: 'payload',
429
+ destination: 'payload',
430
+ sourceType: 'string',
431
+ destinationType: 'TEXT',
432
+ transform: TYPE_CONVERTERS.IDENTITY,
433
+ required: false
434
+ }
435
+ ]
436
+ }
437
+ };
438
+ // ============================================================================
439
+ // Transform Functions
440
+ // ============================================================================
441
+ /**
442
+ * Transform SQLite row to Redis data
443
+ */ export function sqliteToRedis(schema, row) {
444
+ const errors = [];
445
+ const warnings = [];
446
+ const result = {};
447
+ const mapping = SCHEMA_MAPPINGS[schema];
448
+ if (!mapping) {
449
+ throw new StandardError(`Unknown schema: ${schema}`, 'SCHEMA_TRANSFORM_ERROR');
450
+ }
451
+ for (const field of mapping.fields){
452
+ const value = row[field.source];
453
+ // Handle required fields
454
+ if (field.required && (value === null || value === undefined)) {
455
+ errors.push(`Required field '${field.source}' is missing`);
456
+ continue;
457
+ }
458
+ // Skip null/undefined for optional fields
459
+ if (value === null || value === undefined) {
460
+ continue;
461
+ }
462
+ // Apply transformation
463
+ let transformed;
464
+ if (field.transform) {
465
+ transformed = field.transform(value);
466
+ } else {
467
+ // Direction-specific transforms
468
+ if (field.sourceType === 'REAL' && field.destinationType === 'string') {
469
+ transformed = TYPE_CONVERTERS.NUMBER_TO_STRING(value);
470
+ } else if (field.sourceType === 'INTEGER' && field.destinationType === 'string') {
471
+ transformed = TYPE_CONVERTERS.NUMBER_TO_STRING(value);
472
+ } else if (field.sourceType === 'DATETIME' && field.destinationType === 'number') {
473
+ transformed = TYPE_CONVERTERS.DATETIME_TO_TIMESTAMP(value);
474
+ } else {
475
+ transformed = value;
476
+ }
477
+ }
478
+ // Validate transformation
479
+ if (transformed === null && field.required) {
480
+ warnings.push(`Transformation of required field '${field.source}' resulted in null`);
481
+ }
482
+ // Only add non-null values to Redis (Redis doesn't have NULL)
483
+ if (transformed !== null) {
484
+ result[field.destination] = transformed;
485
+ }
486
+ }
487
+ if (errors.length > 0) {
488
+ return {
489
+ success: false,
490
+ errors,
491
+ warnings
492
+ };
493
+ }
494
+ logger.debug('SQLite → Redis transformation completed', {
495
+ schema,
496
+ fieldCount: Object.keys(result).length,
497
+ warnings: warnings.length
498
+ });
499
+ return {
500
+ success: true,
501
+ data: result,
502
+ warnings: warnings.length > 0 ? warnings : undefined
503
+ };
504
+ }
505
+ /**
506
+ * Transform Redis data to SQLite row
507
+ */ export function redisToSqlite(schema, data) {
508
+ const errors = [];
509
+ const warnings = [];
510
+ const result = {};
511
+ const mapping = SCHEMA_MAPPINGS[schema];
512
+ if (!mapping) {
513
+ throw new StandardError(`Unknown schema: ${schema}`, 'SCHEMA_TRANSFORM_ERROR');
514
+ }
515
+ for (const field of mapping.fields){
516
+ const value = data[field.destination];
517
+ // Handle required fields
518
+ if (field.required && (value === null || value === undefined)) {
519
+ errors.push(`Required field '${field.destination}' is missing`);
520
+ continue;
521
+ }
522
+ // Set null for missing optional fields
523
+ if (value === null || value === undefined) {
524
+ result[field.source] = null;
525
+ continue;
526
+ }
527
+ // Apply transformation
528
+ let transformed;
529
+ if (field.transform) {
530
+ transformed = field.transform(value);
531
+ } else {
532
+ // Direction-specific transforms
533
+ if (field.destinationType === 'string' && field.sourceType === 'REAL') {
534
+ transformed = TYPE_CONVERTERS.STRING_TO_NUMBER(value);
535
+ } else if (field.destinationType === 'string' && field.sourceType === 'INTEGER') {
536
+ transformed = TYPE_CONVERTERS.STRING_TO_NUMBER(value);
537
+ } else if (field.destinationType === 'number' && field.sourceType === 'DATETIME') {
538
+ transformed = TYPE_CONVERTERS.TIMESTAMP_TO_DATETIME(value);
539
+ } else {
540
+ transformed = value;
541
+ }
542
+ }
543
+ // Validate transformation
544
+ if (transformed === null && field.required) {
545
+ warnings.push(`Transformation of required field '${field.destination}' resulted in null`);
546
+ }
547
+ result[field.source] = transformed;
548
+ }
549
+ if (errors.length > 0) {
550
+ return {
551
+ success: false,
552
+ errors,
553
+ warnings
554
+ };
555
+ }
556
+ logger.debug('Redis → SQLite transformation completed', {
557
+ schema,
558
+ fieldCount: Object.keys(result).length,
559
+ warnings: warnings.length
560
+ });
561
+ return {
562
+ success: true,
563
+ data: result,
564
+ warnings: warnings.length > 0 ? warnings : undefined
565
+ };
566
+ }
567
+ /**
568
+ * Transform PostgreSQL row to SQLite row (one-way)
569
+ */ export function postgrestoSqlite(schema, row) {
570
+ if (schema !== 'skill_executions') {
571
+ throw new StandardError(`PostgreSQL → SQLite transform only supports 'skill_executions', got: ${schema}`, 'SCHEMA_TRANSFORM_ERROR');
572
+ }
573
+ const errors = [];
574
+ const warnings = [];
575
+ const result = {};
576
+ const mapping = SCHEMA_MAPPINGS[schema];
577
+ for (const field of mapping.fields){
578
+ const value = row[field.source];
579
+ // Handle required fields
580
+ if (field.required && (value === null || value === undefined)) {
581
+ errors.push(`Required field '${field.source}' is missing`);
582
+ continue;
583
+ }
584
+ // Set null for missing optional fields
585
+ if (value === null || value === undefined) {
586
+ result[field.destination] = null;
587
+ continue;
588
+ }
589
+ // Apply transformation
590
+ const transformed = field.transform ? field.transform(value) : value;
591
+ // Validate transformation
592
+ if (transformed === null && field.required) {
593
+ warnings.push(`Transformation of required field '${field.source}' resulted in null`);
594
+ }
595
+ result[field.destination] = transformed;
596
+ }
597
+ if (errors.length > 0) {
598
+ return {
599
+ success: false,
600
+ errors,
601
+ warnings
602
+ };
603
+ }
604
+ logger.debug('PostgreSQL → SQLite transformation completed', {
605
+ schema,
606
+ fieldCount: Object.keys(result).length,
607
+ warnings: warnings.length
608
+ });
609
+ return {
610
+ success: true,
611
+ data: result,
612
+ warnings: warnings.length > 0 ? warnings : undefined
613
+ };
614
+ }
615
+ /**
616
+ * Transform batch of records
617
+ */ export function transformBatch(schema, data, direction) {
618
+ const results = [];
619
+ const allErrors = [];
620
+ const allWarnings = [];
621
+ for(let i = 0; i < data.length; i++){
622
+ const item = data[i];
623
+ let transformResult;
624
+ try {
625
+ switch(direction){
626
+ case 'sqlite-to-redis':
627
+ transformResult = sqliteToRedis(schema, item);
628
+ break;
629
+ case 'redis-to-sqlite':
630
+ transformResult = redisToSqlite(schema, item);
631
+ break;
632
+ case 'postgres-to-sqlite':
633
+ transformResult = postgrestoSqlite(schema, item);
634
+ break;
635
+ default:
636
+ throw new StandardError(`Unknown transform direction: ${direction}`, 'SCHEMA_TRANSFORM_ERROR');
637
+ }
638
+ if (transformResult.success && transformResult.data) {
639
+ results.push(transformResult.data);
640
+ } else {
641
+ allErrors.push(`Record ${i}: ${transformResult.errors?.join(', ')}`);
642
+ }
643
+ if (transformResult.warnings) {
644
+ allWarnings.push(...transformResult.warnings.map((w)=>`Record ${i}: ${w}`));
645
+ }
646
+ } catch (err) {
647
+ allErrors.push(`Record ${i}: ${err.message}`);
648
+ }
649
+ }
650
+ logger.info('Batch transformation completed', {
651
+ schema,
652
+ direction,
653
+ total: data.length,
654
+ succeeded: results.length,
655
+ failed: allErrors.length,
656
+ warnings: allWarnings.length
657
+ });
658
+ if (allErrors.length > 0) {
659
+ return {
660
+ success: false,
661
+ data: results,
662
+ errors: allErrors,
663
+ warnings: allWarnings.length > 0 ? allWarnings : undefined
664
+ };
665
+ }
666
+ return {
667
+ success: true,
668
+ data: results,
669
+ warnings: allWarnings.length > 0 ? allWarnings : undefined
670
+ };
671
+ }
672
+ /**
673
+ * Get schema mapping for a given schema
674
+ */ export function getSchemaMapping(schema) {
675
+ const mapping = SCHEMA_MAPPINGS[schema];
676
+ if (!mapping) {
677
+ throw new StandardError(`Unknown schema: ${schema}`, 'SCHEMA_TRANSFORM_ERROR');
678
+ }
679
+ return mapping;
680
+ }
681
+ /**
682
+ * Check if transformation is supported
683
+ */ export function isTransformSupported(schema, direction) {
684
+ if (!SCHEMA_MAPPINGS[schema]) {
685
+ return false;
686
+ }
687
+ // skill_executions only supports postgres-to-sqlite
688
+ if (schema === 'skill_executions') {
689
+ return direction === 'postgres-to-sqlite';
690
+ }
691
+ // Other schemas support bidirectional
692
+ return direction === 'sqlite-to-redis' || direction === 'redis-to-sqlite';
693
+ }
694
+
695
+ //# sourceMappingURL=schema-transform.js.map