claude-flow-novice 2.18.12 → 2.18.14
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.
- package/.backups/unknown/1765417503_2999b9ec66f591dd76075617ec31fcea/metadata.json +8 -0
- package/.backups/unknown/1765417503_2999b9ec66f591dd76075617ec31fcea/original +3 -0
- package/.backups/unknown/1765417503_2999b9ec66f591dd76075617ec31fcea/revert.sh +7 -0
- package/.backups/unknown/1765417531_2999b9ec66f591dd76075617ec31fcea/metadata.json +8 -0
- package/.backups/unknown/1765417531_2999b9ec66f591dd76075617ec31fcea/original +3 -0
- package/.backups/unknown/1765417531_2999b9ec66f591dd76075617ec31fcea/revert.sh +7 -0
- package/.backups/unknown/1765417552_2999b9ec66f591dd76075617ec31fcea/metadata.json +8 -0
- package/.backups/unknown/1765417552_2999b9ec66f591dd76075617ec31fcea/original +3 -0
- package/.backups/unknown/1765417552_2999b9ec66f591dd76075617ec31fcea/revert.sh +7 -0
- package/.backups/unknown/1765417613_1f34dbf0fe1ec3b6cb74ba7c4e12a2a4/metadata.json +8 -0
- package/.backups/unknown/1765417613_1f34dbf0fe1ec3b6cb74ba7c4e12a2a4/original +1212 -0
- package/.backups/unknown/1765417613_1f34dbf0fe1ec3b6cb74ba7c4e12a2a4/revert.sh +7 -0
- package/.backups/unknown/1765417613_332e9bb223a26270398922640c1c1653/metadata.json +8 -0
- package/.backups/unknown/1765417613_332e9bb223a26270398922640c1c1653/original +1212 -0
- package/.backups/unknown/1765417613_332e9bb223a26270398922640c1c1653/revert.sh +7 -0
- package/.backups/unknown/1765417613_45880a7afef063347b701e7e88e2df9c/metadata.json +8 -0
- package/.backups/unknown/1765417613_45880a7afef063347b701e7e88e2df9c/original +1212 -0
- package/.backups/unknown/1765417613_45880a7afef063347b701e7e88e2df9c/revert.sh +7 -0
- package/.backups/unknown/1765417614_1b6c3b658c2891dbe245aea4bad41661/metadata.json +8 -0
- package/.backups/unknown/1765417614_1b6c3b658c2891dbe245aea4bad41661/original +1228 -0
- package/.backups/unknown/1765417614_1b6c3b658c2891dbe245aea4bad41661/revert.sh +7 -0
- package/.backups/unknown/1765417614_1ed5bd129f0b5d1b297a04ec5267ef62/metadata.json +8 -0
- package/.backups/unknown/1765417614_1ed5bd129f0b5d1b297a04ec5267ef62/original +1237 -0
- package/.backups/unknown/1765417614_1ed5bd129f0b5d1b297a04ec5267ef62/revert.sh +7 -0
- package/.backups/unknown/1765417614_28e032bd1b62dbfcecbd56327a0b0e23/metadata.json +8 -0
- package/.backups/unknown/1765417614_28e032bd1b62dbfcecbd56327a0b0e23/original +1240 -0
- package/.backups/unknown/1765417614_28e032bd1b62dbfcecbd56327a0b0e23/revert.sh +7 -0
- package/.backups/unknown/1765417614_40a1ce1b0efa2e1ba1958c27b2cbc557/metadata.json +8 -0
- package/.backups/unknown/1765417614_40a1ce1b0efa2e1ba1958c27b2cbc557/original +1216 -0
- package/.backups/unknown/1765417614_40a1ce1b0efa2e1ba1958c27b2cbc557/revert.sh +7 -0
- package/.backups/unknown/1765417614_f65dbf58cff7a9aa1c5c3d0d1618074a/metadata.json +8 -0
- package/.backups/unknown/1765417614_f65dbf58cff7a9aa1c5c3d0d1618074a/original +1238 -0
- package/.backups/unknown/1765417614_f65dbf58cff7a9aa1c5c3d0d1618074a/revert.sh +7 -0
- package/.backups/unknown/1765417615_0f45c28b9b8d5204974421c06075ff74/metadata.json +8 -0
- package/.backups/unknown/1765417615_0f45c28b9b8d5204974421c06075ff74/original +1167 -0
- package/.backups/unknown/1765417615_0f45c28b9b8d5204974421c06075ff74/revert.sh +7 -0
- package/.backups/unknown/1765417615_41d36156891ddb6f63d1b4da59d1db4c/metadata.json +8 -0
- package/.backups/unknown/1765417615_41d36156891ddb6f63d1b4da59d1db4c/original +1242 -0
- package/.backups/unknown/1765417615_41d36156891ddb6f63d1b4da59d1db4c/revert.sh +7 -0
- package/.backups/unknown/1765417709_77dda8631459cfc2ab94b8928f7d90b4/metadata.json +8 -0
- package/.backups/unknown/1765417709_77dda8631459cfc2ab94b8928f7d90b4/original +2 -0
- package/.backups/unknown/1765417709_77dda8631459cfc2ab94b8928f7d90b4/revert.sh +7 -0
- package/.backups/unknown/1765417775_1405837bacf112ba832a139840fe94e7/metadata.json +8 -0
- package/.backups/unknown/1765417775_1405837bacf112ba832a139840fe94e7/original +1169 -0
- package/.backups/unknown/1765417775_1405837bacf112ba832a139840fe94e7/revert.sh +7 -0
- package/.backups/unknown/1765417775_8044b4a5cfdcb5cd71317831ad53f5a2/metadata.json +8 -0
- package/.backups/unknown/1765417775_8044b4a5cfdcb5cd71317831ad53f5a2/original +1171 -0
- package/.backups/unknown/1765417775_8044b4a5cfdcb5cd71317831ad53f5a2/revert.sh +7 -0
- package/.backups/unknown/1765417775_8eb94d60151e1db262377fbf8a187212/metadata.json +8 -0
- package/.backups/unknown/1765417775_8eb94d60151e1db262377fbf8a187212/original +1170 -0
- package/.backups/unknown/1765417775_8eb94d60151e1db262377fbf8a187212/revert.sh +7 -0
- package/.backups/unknown/1765417776_a0d4b709e15e0bfa002c4b128f5e4603/metadata.json +8 -0
- package/.backups/unknown/1765417776_a0d4b709e15e0bfa002c4b128f5e4603/original +1173 -0
- package/.backups/unknown/1765417776_a0d4b709e15e0bfa002c4b128f5e4603/revert.sh +7 -0
- package/.backups/unknown/1765417776_cb1bc24d98b63564eb73ef782b8c68b3/metadata.json +8 -0
- package/.backups/unknown/1765417776_cb1bc24d98b63564eb73ef782b8c68b3/original +1170 -0
- package/.backups/unknown/1765417776_cb1bc24d98b63564eb73ef782b8c68b3/revert.sh +7 -0
- package/.backups/unknown/1765417777_1c4cc8c33f476f0c87c8efd4e34efc22/metadata.json +8 -0
- package/.backups/unknown/1765417777_1c4cc8c33f476f0c87c8efd4e34efc22/original +1172 -0
- package/.backups/unknown/1765417777_1c4cc8c33f476f0c87c8efd4e34efc22/revert.sh +7 -0
- package/.backups/unknown/1765417777_325de83ffd34544909b8b9aa6e18dd05/metadata.json +8 -0
- package/.backups/unknown/1765417777_325de83ffd34544909b8b9aa6e18dd05/original +1175 -0
- package/.backups/unknown/1765417777_325de83ffd34544909b8b9aa6e18dd05/revert.sh +7 -0
- package/.backups/unknown/1765417950_402e7c1a8956b56ac7b88e89f024acb4/metadata.json +8 -0
- package/.backups/unknown/1765417950_402e7c1a8956b56ac7b88e89f024acb4/original +1178 -0
- package/.backups/unknown/1765417950_402e7c1a8956b56ac7b88e89f024acb4/revert.sh +7 -0
- package/.backups/unknown/1765417950_647e27e4da18ae42c339e04b4d334feb/metadata.json +8 -0
- package/.backups/unknown/1765417950_647e27e4da18ae42c339e04b4d334feb/original +1174 -0
- package/.backups/unknown/1765417950_647e27e4da18ae42c339e04b4d334feb/revert.sh +7 -0
- package/.backups/unknown/1765417951_1424d2dd67b8c8a4e7cf649b379d21f2/metadata.json +8 -0
- package/.backups/unknown/1765417951_1424d2dd67b8c8a4e7cf649b379d21f2/original +1194 -0
- package/.backups/unknown/1765417951_1424d2dd67b8c8a4e7cf649b379d21f2/revert.sh +7 -0
- package/.backups/unknown/1765417951_6df070ca287ea94a7f08efc69ec9ea51/metadata.json +8 -0
- package/.backups/unknown/1765417951_6df070ca287ea94a7f08efc69ec9ea51/original +1186 -0
- package/.backups/unknown/1765417951_6df070ca287ea94a7f08efc69ec9ea51/revert.sh +7 -0
- package/.backups/unknown/1765417951_848919a1365f6536e5ef8d85d0c80fa7/metadata.json +8 -0
- package/.backups/unknown/1765417951_848919a1365f6536e5ef8d85d0c80fa7/original +1180 -0
- package/.backups/unknown/1765417951_848919a1365f6536e5ef8d85d0c80fa7/revert.sh +7 -0
- package/.backups/unknown/1765417951_b0d1d4ecf85ad10cda0f3900d414b608/metadata.json +8 -0
- package/.backups/unknown/1765417951_b0d1d4ecf85ad10cda0f3900d414b608/original +1198 -0
- package/.backups/unknown/1765417951_b0d1d4ecf85ad10cda0f3900d414b608/revert.sh +7 -0
- package/.backups/unknown/1765417952_2b720e213b5197cbaad53f9f0857f23f/metadata.json +8 -0
- package/.backups/unknown/1765417952_2b720e213b5197cbaad53f9f0857f23f/original +1202 -0
- package/.backups/unknown/1765417952_2b720e213b5197cbaad53f9f0857f23f/revert.sh +7 -0
- package/.backups/unknown/1765417952_ef1d15e8b83a802a0c0f0fc03e56a89c/metadata.json +8 -0
- package/.backups/unknown/1765417952_ef1d15e8b83a802a0c0f0fc03e56a89c/original +1202 -0
- package/.backups/unknown/1765417952_ef1d15e8b83a802a0c0f0fc03e56a89c/revert.sh +7 -0
- package/.backups/unknown/1765418048_ac94238a69a6f86a6ba9d31f623c18a7/metadata.json +8 -0
- package/.backups/unknown/1765418048_ac94238a69a6f86a6ba9d31f623c18a7/original +1209 -0
- package/.backups/unknown/1765418048_ac94238a69a6f86a6ba9d31f623c18a7/revert.sh +7 -0
- package/.backups/unknown/1765418048_f3afed98da63fef9ff57fb5646976f63/metadata.json +8 -0
- package/.backups/unknown/1765418048_f3afed98da63fef9ff57fb5646976f63/original +1207 -0
- package/.backups/unknown/1765418048_f3afed98da63fef9ff57fb5646976f63/revert.sh +7 -0
- package/.backups/unknown/1765418049_9c392702a4e1cace37d17f6f2dfaf54e/metadata.json +8 -0
- package/.backups/unknown/1765418049_9c392702a4e1cace37d17f6f2dfaf54e/original +1207 -0
- package/.backups/unknown/1765418049_9c392702a4e1cace37d17f6f2dfaf54e/revert.sh +7 -0
- package/.backups/unknown/1765418049_9e0777555b51dea4d24d0503b584cfc5/metadata.json +8 -0
- package/.backups/unknown/1765418049_9e0777555b51dea4d24d0503b584cfc5/original +1193 -0
- package/.backups/unknown/1765418049_9e0777555b51dea4d24d0503b584cfc5/revert.sh +7 -0
- package/.backups/unknown/1765418050_22d534bed68f9f5d883bee54e7cbc4d3/metadata.json +8 -0
- package/.backups/unknown/1765418050_22d534bed68f9f5d883bee54e7cbc4d3/original +1194 -0
- package/.backups/unknown/1765418050_22d534bed68f9f5d883bee54e7cbc4d3/revert.sh +7 -0
- package/.backups/unknown/1765418051_d9243722dc90dabc851c5767a62ac7f2/metadata.json +8 -0
- package/.backups/unknown/1765418051_d9243722dc90dabc851c5767a62ac7f2/original +1193 -0
- package/.backups/unknown/1765418051_d9243722dc90dabc851c5767a62ac7f2/revert.sh +7 -0
- package/.backups/unknown/1765418177_21a2fa816d25d419b54ef2d429aab474/metadata.json +8 -0
- package/.backups/unknown/1765418177_21a2fa816d25d419b54ef2d429aab474/original +1191 -0
- package/.backups/unknown/1765418177_21a2fa816d25d419b54ef2d429aab474/revert.sh +7 -0
- package/.backups/unknown/1765418177_33b673dce1eb59d7eb4f752aec882794/metadata.json +8 -0
- package/.backups/unknown/1765418177_33b673dce1eb59d7eb4f752aec882794/original +1190 -0
- package/.backups/unknown/1765418177_33b673dce1eb59d7eb4f752aec882794/revert.sh +7 -0
- package/.backups/unknown/1765418177_72568812ea5a73cf6861a6b14da065fa/metadata.json +8 -0
- package/.backups/unknown/1765418177_72568812ea5a73cf6861a6b14da065fa/original +1191 -0
- package/.backups/unknown/1765418177_72568812ea5a73cf6861a6b14da065fa/revert.sh +7 -0
- package/.backups/unknown/1765418178_20c28b95f12194fe4b81cfb35f4f3757/metadata.json +8 -0
- package/.backups/unknown/1765418178_20c28b95f12194fe4b81cfb35f4f3757/original +1189 -0
- package/.backups/unknown/1765418178_20c28b95f12194fe4b81cfb35f4f3757/revert.sh +7 -0
- package/.backups/unknown/1765418178_cdf68719cc09173769027743e2718ad4/metadata.json +8 -0
- package/.backups/unknown/1765418178_cdf68719cc09173769027743e2718ad4/original +1197 -0
- package/.backups/unknown/1765418178_cdf68719cc09173769027743e2718ad4/revert.sh +7 -0
- package/.backups/unknown/1765418178_eb19e0f8542405480e51af09fad84b71/metadata.json +8 -0
- package/.backups/unknown/1765418178_eb19e0f8542405480e51af09fad84b71/original +1190 -0
- package/.backups/unknown/1765418178_eb19e0f8542405480e51af09fad84b71/revert.sh +7 -0
- package/.backups/unknown/1765418236_c016507725847318a3c369b047cbb802/metadata.json +8 -0
- package/.backups/unknown/1765418236_c016507725847318a3c369b047cbb802/original +1197 -0
- package/.backups/unknown/1765418236_c016507725847318a3c369b047cbb802/revert.sh +7 -0
- package/.backups/unknown/1765418237_932c3cc3a5c537b7933c2370b65f4b39/metadata.json +8 -0
- package/.backups/unknown/1765418237_932c3cc3a5c537b7933c2370b65f4b39/original +1197 -0
- package/.backups/unknown/1765418237_932c3cc3a5c537b7933c2370b65f4b39/revert.sh +7 -0
- package/.claude/agents/cfn-dev-team/utility/epic-creator-v2.md +194 -2
- package/.claude/agents/cfn-dev-team/utility/epic-creator-v2.sh +264 -0
- package/.claude/agents/cfn-dev-team/utility/epic-creator-v2.sh.backup +698 -0
- package/.claude/agents/custom/claude-code-expert.md +56 -0
- package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/SKILL.md +1 -1
- package/.claude/hooks/README.md +148 -0
- package/.claude/hooks/SessionStart:cfn-load-openai-key.sh +35 -0
- package/.claude/hooks/cfn-invoke-pre-edit.sh +1 -1
- package/.claude/hooks/cfn-load-cerebras-env.sh +65 -0
- package/.claude/hooks/cfn-precompact-enhanced.sh +283 -0
- package/.claude/hooks/deprecated/README.md +27 -0
- package/.claude/settings.json +71 -6
- package/.claude/skills/cfn-agent-lifecycle/SKILL.md +1 -1
- package/.claude/skills/cfn-agent-tooling/SKILL.md +1 -1
- package/.claude/skills/cfn-cerebras-coordinator/QUICKSTART.md +348 -0
- package/.claude/skills/cfn-cerebras-coordinator/README.md +525 -0
- package/.claude/skills/cfn-cerebras-coordinator/TDD_COORDINATOR_OVERVIEW.md +284 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-py-v2-test-1733854200.json +36 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-py-v3-test-1765383241.json +36 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-rust-v2-test-1765381361.json +36 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-rust-v3-test-1765383242.json +46 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v2-test-1733864400.json +66 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v3-test-1765383238.json +66 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v4-test-1765386506.json +66 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v5-test-1765393100.json +66 -0
- package/.claude/skills/cfn-cerebras-coordinator/example-usage.sh +206 -0
- package/.claude/skills/cfn-cerebras-coordinator/lib/tdd-conversation-coordinator.ts +569 -0
- package/.claude/skills/cfn-cerebras-coordinator/test-tdd-coordinator.sh +250 -0
- package/.claude/skills/cfn-compilation-error-fixer/SKILL.md +1 -1
- package/.claude/skills/cfn-compilation-error-fixer/lib/fixer/cerebras-gated-fixer-v2.ts +1 -1
- package/.claude/skills/cfn-config/SKILL.md +1 -1
- package/.claude/skills/cfn-dependency-management/SKILL.md +1 -1
- package/.claude/skills/cfn-deployment-lifecycle/SKILL.md +1 -1
- package/.claude/skills/cfn-edit-safety/SKILL.md +1 -1
- package/.claude/skills/cfn-epic-creator/SKILL.md +392 -0
- package/.claude/skills/cfn-epic-creator/estimate-costs.sh +524 -0
- package/.claude/skills/cfn-epic-creator/invoke.sh +445 -0
- package/.claude/skills/cfn-epic-creator/parse-personas.sh +533 -0
- package/.claude/skills/cfn-epic-creator/security-utils.sh +268 -0
- package/.claude/skills/cfn-epic-creator/security-verification-demo.sh +127 -0
- package/.claude/skills/cfn-epic-creator/test-invoke.sh +620 -0
- package/.claude/skills/cfn-epic-creator/test-security-fixes.sh +195 -0
- package/.claude/skills/cfn-epic-creator/test-security-simple.sh +165 -0
- package/.claude/skills/cfn-epic-creator/validate-epic.sh +474 -0
- package/.claude/skills/cfn-epic-parser/SKILL.md +8 -0
- package/.claude/skills/cfn-error-management/SKILL.md +1 -1
- package/.claude/skills/cfn-intervention-system/SKILL.md +1 -1
- package/.claude/skills/cfn-knowledge-base/SKILL.md +1 -1
- package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/metadata.json +8 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/original +209 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/revert.sh +7 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/AGENT_INTEGRATION_PATTERNS.md +255 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/Cargo.toml +8 -1
- package/.claude/skills/cfn-local-ruvector-accelerator/Cargo.toml.backup +47 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/EXTRACTION_EXAMPLES.md +287 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/README.md +2 -563
- package/.claude/skills/cfn-local-ruvector-accelerator/SCHEMA_V2_IMPLEMENTATION.md +151 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/SECURITY_IMPLEMENTATION.md +185 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/SKILL.md +8 -343
- package/.claude/skills/cfn-local-ruvector-accelerator/docs/EXECUTIVE_SUMMARY.txt +90 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/docs/PHASE_4_QUERY_API.md +210 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/docs/RUST_AST_EXTRACTOR_IMPLEMENTATION.md +222 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/docs/TRANSACTION_MANAGEMENT.md +241 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/docs/VALIDATION_FINDINGS.txt +250 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/epic-ast-indexer.json +335 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/index-code.sh +292 -96
- package/.claude/skills/cfn-local-ruvector-accelerator/index-code.sh.backup +249 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/index_all.sh +65 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/find.rs +214 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index.rs +275 -94
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index_ast.rs +767 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index_modified.rs +37 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/init.rs +17 -12
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/migration.rs +34 -1
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/mod.rs +6 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/query.rs +2 -2
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/refs.rs +209 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/embeddings.rs +82 -33
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/mod.rs +251 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/rust.rs +425 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/rust_placeholder.rs +420 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/text_fallback.rs +490 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/typescript.rs +520 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/typescript_full.rs +531 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/lib.rs +20 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/main.rs +33 -2
- package/.claude/skills/cfn-local-ruvector-accelerator/src/main.rs.backup +360 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/migration.rs +325 -318
- package/.claude/skills/cfn-local-ruvector-accelerator/src/migration_backup.rs +325 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/migration_tx.rs +513 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/paths.rs +29 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/query_api.rs +609 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/schema_v2.rs +603 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/search_engine.rs +150 -29
- package/.claude/skills/cfn-local-ruvector-accelerator/src/security_tests.rs +154 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/sqlite_store.rs +1 -1
- package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2.rs +583 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_backup.rs +560 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_fixed.rs +0 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_tx.rs +397 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/test_schema.rs +228 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/transaction_tests.rs +410 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/test_ast_indexing.rs +59 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/test_query_api.sh +103 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/test_schema.sql +158 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/test_schema_v2.sql +147 -0
- package/.claude/skills/cfn-loop-orchestration-v2/SKILL.md +1 -1
- package/.claude/skills/cfn-loop-orchestration-v2/lib/decision/SKILL.md +8 -0
- package/.claude/skills/cfn-loop-orchestration-v2/lib/orchestrator/SKILL.md +1 -1
- package/.claude/skills/cfn-loop-orchestration-v2/lib/output/SKILL.md +8 -0
- package/.claude/skills/cfn-loop-orchestration-v2/lib/validation/SKILL.md +11 -2
- package/.claude/skills/cfn-mdap-context-injection/SKILL.md +31 -10
- package/.claude/skills/cfn-mdap-error-fixer/skill.md +15 -205
- package/.claude/skills/cfn-memory-persistence/lib/auto/SKILL.md +7 -0
- package/.claude/skills/cfn-memory-persistence/lib/management/SKILL.md +7 -0
- package/.claude/skills/cfn-parameterized-queries/SKILL.md +8 -0
- package/.claude/skills/cfn-planning/SKILL.md +1 -1
- package/.claude/skills/cfn-session-handoff/SKILL.md +1 -53
- package/.claude/skills/cfn-skill-management/SKILL.md +1 -1
- package/.claude/skills/cfn-task-decomposition/SKILL.md +1 -0
- package/.claude/skills/cfn-task-intelligence/SKILL.md +39 -18
- package/.claude/skills/cfn-task-planning/SKILL.md +37 -12
- package/.claude/skills/cfn-transparency-middleware/SKILL.md +1 -1
- package/.claude/skills/cfn-utilities/SKILL.md +1 -1
- package/.claude/skills/cfn-validation-framework/SKILL.md +3 -60
- package/.claude/skills/cfn-vision-analysis/SKILL.md +3 -20
- package/.claude-flow/metrics/performance.json +3 -3
- package/.claude-flow/metrics/task-metrics.json +3 -3
- package/.ruvector/index_v2.db-shm +0 -0
- package/.ruvector/index_v2.db-wal +0 -0
- package/CLAUDE.md +9 -1
- package/README.md +56 -0
- package/docs/AGENT_PRODUCTION_FEEDBACK_PATTERNS.md +389 -0
- package/docs/CEREBRAS_TDD_COORDINATOR_TEST_RESULTS.md +213 -0
- package/docs/CEREBRAS_TDD_ROUND1_VS_ROUND2_COMPARISON.md +225 -0
- package/docs/CEREBRAS_TDD_ROUND3_FINAL_RESULTS.md +264 -0
- package/docs/EPIC_CREATOR_V2_ARCHITECTURE.md +629 -0
- package/docs/HOOKS_IMPLEMENTATION_PRIORITY.md +585 -0
- package/docs/SKILLS_HOOKS_INTEGRATION.md +1074 -0
- package/epic-with-personas-2025-12-09-17-15-13.json +253 -0
- package/index/index.bin +0 -0
- package/index/metadata.json +1 -0
- package/package.json +2 -1
- package/test-epic-creator-security.sh +203 -0
- package/.claude/skills/cfn-compilation-error-fixer/HANDOFF.md +0 -29
- package/.claude/skills/cfn-local-ruvector-accelerator/__pycache__/search_engine_v2.cpython-312.pyc +0 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/search_engine.py +0 -200
- package/.ruvector/index.db-journal +0 -0
- package/jest.config.ts.cjs +0 -17
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/context-analyzer.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/generate-code.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/execute.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/INTEGRATION.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/SAMPLE_OUTPUTS.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/capture-container-logs.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/enable-logging.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/init-hybrid-logging.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/analytics-summary.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-agent-timeline.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-consensus-history.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-coordination-timeline.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-failed-containers.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-gate-checks.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/schema.sql +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/sqlite-helpers.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/test-hybrid-logging.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/mcp/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/mcp/skill-mcp-selector.js +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/orchestration/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/orchestration/orchestrate.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/spawning/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/spawning/spawn-agent.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/cleanup-wave.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/lib/docker-helpers.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/monitor-wave.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/spawn-wave.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-node-heap-sizer/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-node-heap-sizer/task-mode-heap-limiter.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/deprecated/analyze-patterns.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/README.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/SECURITY.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/package.json +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/solve.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test-equation-solver-minimal.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test-equation-solver.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test.cjs +0 -0
- /package/.claude/hooks/{cfn-credential-scanner.sh → deprecated/cfn-credential-scanner.sh} +0 -0
- /package/.claude/hooks/{cfn-detect-hardcoded-credentials.sh → deprecated/cfn-detect-hardcoded-credentials.sh} +0 -0
- /package/.claude/hooks/{cfn-invoke-post-edit-ts.sh → deprecated/cfn-invoke-post-edit-ts.sh} +0 -0
- /package/.claude/hooks/{cfn-invoke-pre-edit-ts.sh → deprecated/cfn-invoke-pre-edit-ts.sh} +0 -0
- /package/.claude/hooks/{cfn-invoke-security-validation.sh → deprecated/cfn-invoke-security-validation.sh} +0 -0
- /package/.claude/hooks/{cfn-lint-sql-injection.sh → deprecated/cfn-lint-sql-injection.sh} +0 -0
- /package/.claude/hooks/{cfn-post-edit.sh → deprecated/cfn-post-edit.sh} +0 -0
- /package/.claude/hooks/{cfn-pre-edit-backup.sh → deprecated/cfn-pre-edit-backup.sh} +0 -0
- /package/.claude/skills/cfn-local-ruvector-accelerator/{embeddings_manager.py → embeddings_manager.py.backup} +0 -0
- /package/{.ruvector → .claude/skills/cfn-local-ruvector-accelerator/index}/index.bin +0 -0
- /package/{.ruvector → .claude/skills/cfn-local-ruvector-accelerator/index}/metadata.json +0 -0
- /package/.claude/skills/cfn-local-ruvector-accelerator/{search_engine_v2.py → search_engine_v2.py.backup} +0 -0
- /package/.claude/skills/cfn-local-ruvector-accelerator/{sqlite_store.py → sqlite_store.py.backup} +0 -0
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# CFN Epic Creator - Validate Epic JSON
|
|
5
|
+
# Validates generated epic JSON structure and content
|
|
6
|
+
|
|
7
|
+
# Colors for output
|
|
8
|
+
RED='\033[0;31m'
|
|
9
|
+
GREEN='\033[0;32m'
|
|
10
|
+
YELLOW='\033[1;33m'
|
|
11
|
+
BLUE='\033[0;34m'
|
|
12
|
+
NC='\033[0m' # No Color
|
|
13
|
+
|
|
14
|
+
# Logging functions
|
|
15
|
+
log_info() {
|
|
16
|
+
echo -e "${BLUE}[INFO]${NC} $*"
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
log_success() {
|
|
20
|
+
echo -e "${GREEN}[SUCCESS]${NC} $*"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
log_warning() {
|
|
24
|
+
echo -e "${YELLOW}[WARNING]${NC} $*"
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
log_error() {
|
|
28
|
+
echo -e "${RED}[ERROR]${NC} $*" >&2
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Show help message
|
|
32
|
+
show_help() {
|
|
33
|
+
cat << 'HELP_EOF'
|
|
34
|
+
CFN Epic Creator - Validate Epic JSON
|
|
35
|
+
|
|
36
|
+
USAGE:
|
|
37
|
+
./validate-epic.sh <json-file> [OPTIONS]
|
|
38
|
+
|
|
39
|
+
REQUIRED ARGUMENTS:
|
|
40
|
+
<json-file> Path to the epic JSON file to validate
|
|
41
|
+
|
|
42
|
+
OPTIONS:
|
|
43
|
+
-v, --verbose Show detailed validation output
|
|
44
|
+
-s, --strict Enable strict validation (fails on warnings)
|
|
45
|
+
-h, --help Show this help message
|
|
46
|
+
|
|
47
|
+
EXIT CODES:
|
|
48
|
+
0 Validation passed
|
|
49
|
+
1 Validation failed
|
|
50
|
+
2 File not found or invalid JSON
|
|
51
|
+
3 Missing required arguments
|
|
52
|
+
|
|
53
|
+
HELP_EOF
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
# Validate JSON structure
|
|
57
|
+
validate_json_structure() {
|
|
58
|
+
local json_file="$1"
|
|
59
|
+
local strict="${2:-false}"
|
|
60
|
+
local verbose="${3:-false}"
|
|
61
|
+
|
|
62
|
+
local validation_errors=0
|
|
63
|
+
local validation_warnings=0
|
|
64
|
+
|
|
65
|
+
if [[ "$verbose" == true ]]; then
|
|
66
|
+
log_info "Validating JSON structure in: $json_file"
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Check if file exists and is readable
|
|
70
|
+
if [[ ! -f "$json_file" ]]; then
|
|
71
|
+
log_error "File not found: $json_file"
|
|
72
|
+
return 2
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
if [[ ! -r "$json_file" ]]; then
|
|
76
|
+
log_error "File not readable: $json_file"
|
|
77
|
+
return 2
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# Check if valid JSON
|
|
81
|
+
if ! jq empty "$json_file" 2>/dev/null; then
|
|
82
|
+
log_error "Invalid JSON format in: $json_file"
|
|
83
|
+
return 2
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
# Check top-level structure
|
|
87
|
+
if [[ "$verbose" == true ]]; then
|
|
88
|
+
log_info "Checking top-level structure..."
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
if ! jq -e '.epic' "$json_file" >/dev/null; then
|
|
92
|
+
log_error "Missing required 'epic' object at top level"
|
|
93
|
+
validation_errors=$((validation_errors + 1))
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
# Validate epic metadata
|
|
97
|
+
if [[ "$verbose" == true ]]; then
|
|
98
|
+
log_info "Validating epic metadata..."
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
local required_fields=("id" "title" "description" "status" "personas")
|
|
102
|
+
local optional_fields=("priority" "estimatedDuration" "budget" "owner" "metadata" "implementationRoadmap" "totalCostBreakdown" "riskAssessment")
|
|
103
|
+
|
|
104
|
+
for field in "${required_fields[@]}"; do
|
|
105
|
+
if ! jq -e ".epic.${field}" "$json_file" >/dev/null; then
|
|
106
|
+
log_error "Missing required epic field: ${field}"
|
|
107
|
+
validation_errors=$((validation_errors + 1))
|
|
108
|
+
elif [[ "$verbose" == true ]]; then
|
|
109
|
+
log_success "Found required field: ${field}"
|
|
110
|
+
fi
|
|
111
|
+
done
|
|
112
|
+
|
|
113
|
+
# Check optional fields
|
|
114
|
+
for field in "${optional_fields[@]}"; do
|
|
115
|
+
if jq -e ".epic.${field}" "$json_file" >/dev/null; then
|
|
116
|
+
if [[ "$verbose" == true ]]; then
|
|
117
|
+
log_info "Found optional field: ${field}"
|
|
118
|
+
fi
|
|
119
|
+
fi
|
|
120
|
+
done
|
|
121
|
+
|
|
122
|
+
# Validate epic ID format
|
|
123
|
+
local epic_id
|
|
124
|
+
epic_id=$(jq -r '.epic.id // empty' "$json_file")
|
|
125
|
+
if [[ -n "$epic_id" ]]; then
|
|
126
|
+
if [[ ! "$epic_id" =~ ^EPIC-[0-9]{6}$ ]]; then
|
|
127
|
+
log_warning "Epic ID format should be 'EPIC-XXXXXX' (6 digits): $epic_id"
|
|
128
|
+
validation_warnings=$((validation_warnings + 1))
|
|
129
|
+
elif [[ "$verbose" == true ]]; then
|
|
130
|
+
log_success "Epic ID has correct format: $epic_id"
|
|
131
|
+
fi
|
|
132
|
+
fi
|
|
133
|
+
|
|
134
|
+
# Validate status
|
|
135
|
+
local epic_status
|
|
136
|
+
epic_status=$(jq -r '.epic.status // empty' "$json_file")
|
|
137
|
+
if [[ -n "$epic_status" ]]; then
|
|
138
|
+
case "$epic_status" in
|
|
139
|
+
"not_started"|"in-progress"|"completed"|"blocked"|"in-review"|"cancelled")
|
|
140
|
+
if [[ "$verbose" == true ]]; then
|
|
141
|
+
log_success "Epic status is valid: $epic_status"
|
|
142
|
+
fi
|
|
143
|
+
;;
|
|
144
|
+
*)
|
|
145
|
+
log_warning "Unusual epic status: $epic_status"
|
|
146
|
+
validation_warnings=$((validation_warnings + 1))
|
|
147
|
+
;;
|
|
148
|
+
esac
|
|
149
|
+
fi
|
|
150
|
+
|
|
151
|
+
# Validate personas array
|
|
152
|
+
if [[ "$verbose" == true ]]; then
|
|
153
|
+
log_info "Validating personas array..."
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
if ! jq -e '.epic.personas | type == "array"' "$json_file" >/dev/null; then
|
|
157
|
+
log_error "epic.personas must be an array"
|
|
158
|
+
validation_errors=$((validation_errors + 1))
|
|
159
|
+
else
|
|
160
|
+
local persona_count
|
|
161
|
+
persona_count=$(jq -r '.epic.personas | length' "$json_file")
|
|
162
|
+
if [[ "$persona_count" -ne 6 ]]; then
|
|
163
|
+
log_error "Expected exactly 6 personas, found: $persona_count"
|
|
164
|
+
validation_errors=$((validation_errors + 1))
|
|
165
|
+
elif [[ "$verbose" == true ]]; then
|
|
166
|
+
log_success "Found correct number of personas: $persona_count"
|
|
167
|
+
fi
|
|
168
|
+
|
|
169
|
+
# Validate each persona
|
|
170
|
+
local required_persona_names=("product-owner" "architect" "security-specialist" "performance-specialist" "accessibility-advocate" "devops-engineer")
|
|
171
|
+
local found_personas
|
|
172
|
+
found_personas=$(jq -r '.epic.personas[].name' "$json_file")
|
|
173
|
+
|
|
174
|
+
for persona_name in "${required_persona_names[@]}"; do
|
|
175
|
+
if echo "$found_personas" | grep -q "^${persona_name}$"; then
|
|
176
|
+
if [[ "$verbose" == true ]]; then
|
|
177
|
+
log_success "Found required persona: $persona_name"
|
|
178
|
+
fi
|
|
179
|
+
|
|
180
|
+
# Validate persona structure
|
|
181
|
+
validate_persona_structure "$json_file" "$persona_name" "$verbose" || validation_errors=$((validation_errors + 1))
|
|
182
|
+
else
|
|
183
|
+
log_error "Missing required persona: $persona_name"
|
|
184
|
+
validation_errors=$((validation_errors + 1))
|
|
185
|
+
fi
|
|
186
|
+
done
|
|
187
|
+
|
|
188
|
+
# Check for unexpected personas
|
|
189
|
+
while IFS= read -r found_persona; do
|
|
190
|
+
if [[ ! " ${required_persona_names[*]} " =~ " ${found_persona} " ]]; then
|
|
191
|
+
log_warning "Unexpected persona found: $found_persona"
|
|
192
|
+
validation_warnings=$((validation_warnings + 1))
|
|
193
|
+
fi
|
|
194
|
+
done <<< "$found_personas"
|
|
195
|
+
fi
|
|
196
|
+
|
|
197
|
+
# Validate recommendations structure
|
|
198
|
+
if [[ "$verbose" == true ]]; then
|
|
199
|
+
log_info "Validating recommendations structure..."
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
if ! jq -e '.epic.personas[].recommendations | type == "array"' "$json_file" >/dev/null; then
|
|
203
|
+
log_error "Persona recommendations must be arrays"
|
|
204
|
+
validation_errors=$((validation_errors + 1))
|
|
205
|
+
else
|
|
206
|
+
validate_recommendations "$json_file" "$verbose" || validation_errors=$((validation_errors + 1))
|
|
207
|
+
fi
|
|
208
|
+
|
|
209
|
+
# Validate metadata if present
|
|
210
|
+
if jq -e '.epic.metadata' "$json_file" >/dev/null; then
|
|
211
|
+
if [[ "$verbose" == true ]]; then
|
|
212
|
+
log_info "Validating epic metadata..."
|
|
213
|
+
fi
|
|
214
|
+
|
|
215
|
+
validate_metadata "$json_file" "$verbose" || validation_errors=$((validation_errors + 1))
|
|
216
|
+
fi
|
|
217
|
+
|
|
218
|
+
# Report results
|
|
219
|
+
echo ""
|
|
220
|
+
log_info "=== Validation Results ==="
|
|
221
|
+
|
|
222
|
+
if [[ $validation_errors -eq 0 ]]; then
|
|
223
|
+
log_success "✅ All required validations passed"
|
|
224
|
+
else
|
|
225
|
+
log_error "❌ Found $validation_errors validation errors"
|
|
226
|
+
fi
|
|
227
|
+
|
|
228
|
+
if [[ $validation_warnings -gt 0 ]]; then
|
|
229
|
+
log_warning "⚠️ Found $validation_warnings warnings"
|
|
230
|
+
|
|
231
|
+
if [[ "$strict" == true ]]; then
|
|
232
|
+
log_error "Strict mode enabled: treating warnings as errors"
|
|
233
|
+
validation_errors=$((validation_errors + validation_warnings))
|
|
234
|
+
fi
|
|
235
|
+
fi
|
|
236
|
+
|
|
237
|
+
echo ""
|
|
238
|
+
log_info "Summary:"
|
|
239
|
+
log_info " Errors: $validation_errors"
|
|
240
|
+
log_info " Warnings: $validation_warnings"
|
|
241
|
+
|
|
242
|
+
if [[ $validation_errors -eq 0 ]]; then
|
|
243
|
+
echo ""
|
|
244
|
+
log_success "JSON validation PASSED"
|
|
245
|
+
return 0
|
|
246
|
+
else
|
|
247
|
+
echo ""
|
|
248
|
+
log_error "JSON validation FAILED"
|
|
249
|
+
return 1
|
|
250
|
+
fi
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
# Validate individual persona structure
|
|
254
|
+
validate_persona_structure() {
|
|
255
|
+
local json_file="$1"
|
|
256
|
+
local persona_name="$2"
|
|
257
|
+
local verbose="${3:-false}"
|
|
258
|
+
|
|
259
|
+
local persona_query=".epic.personas[] | select(.name == \"${persona_name}\")"
|
|
260
|
+
|
|
261
|
+
# Check required fields
|
|
262
|
+
local required_persona_fields=("name" "reviewOrder" "status" "insights" "recommendations" "costAnalysis")
|
|
263
|
+
|
|
264
|
+
for field in "${required_persona_fields[@]}"; do
|
|
265
|
+
if ! jq -e "${persona_query} | .${field}" "$json_file" >/dev/null; then
|
|
266
|
+
log_error "Missing required field in ${persona_name}: ${field}"
|
|
267
|
+
return 1
|
|
268
|
+
elif [[ "$verbose" == true ]]; then
|
|
269
|
+
log_success " ${persona_name}: Found required field: ${field}"
|
|
270
|
+
fi
|
|
271
|
+
done
|
|
272
|
+
|
|
273
|
+
# Check reviewOrder
|
|
274
|
+
local review_order
|
|
275
|
+
review_order=$(jq -r "${persona_query} | .reviewOrder" "$json_file")
|
|
276
|
+
if [[ ! "$review_order" =~ ^[1-6]$ ]]; then
|
|
277
|
+
log_error "Invalid reviewOrder for ${persona_name}: $review_order (must be 1-6)"
|
|
278
|
+
return 1
|
|
279
|
+
fi
|
|
280
|
+
|
|
281
|
+
# Check status
|
|
282
|
+
local persona_status
|
|
283
|
+
persona_status=$(jq -r "${persona_query} | .status" "$json_file")
|
|
284
|
+
case "$persona_status" in
|
|
285
|
+
"completed"|"failed"|"in-progress"|"pending")
|
|
286
|
+
if [[ "$verbose" == true ]]; then
|
|
287
|
+
log_success " ${persona_name}: Status is valid: $persona_status"
|
|
288
|
+
fi
|
|
289
|
+
;;
|
|
290
|
+
*)
|
|
291
|
+
log_warning "Unusual persona status for ${persona_name}: $persona_status"
|
|
292
|
+
;;
|
|
293
|
+
esac
|
|
294
|
+
|
|
295
|
+
# Check insights and recommendations are arrays
|
|
296
|
+
if ! jq -e "${persona_query} | .insights | type == \"array\"" "$json_file" >/dev/null; then
|
|
297
|
+
log_error "${persona_name}.insights must be an array"
|
|
298
|
+
return 1
|
|
299
|
+
fi
|
|
300
|
+
|
|
301
|
+
if ! jq -e "${persona_query} | .recommendations | type == \"array\"" "$json_file" >/dev/null; then
|
|
302
|
+
log_error "${persona_name}.recommendations must be an array"
|
|
303
|
+
return 1
|
|
304
|
+
fi
|
|
305
|
+
|
|
306
|
+
return 0
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
# Validate recommendations structure
|
|
310
|
+
validate_recommendations() {
|
|
311
|
+
local json_file="$1"
|
|
312
|
+
local verbose="${2:-false}"
|
|
313
|
+
|
|
314
|
+
local recommendation_count
|
|
315
|
+
recommendation_count=$(jq '[.epic.personas[].recommendations[]] | length' "$json_file")
|
|
316
|
+
|
|
317
|
+
if [[ "$verbose" == true ]]; then
|
|
318
|
+
log_info " Total recommendations found: $recommendation_count"
|
|
319
|
+
fi
|
|
320
|
+
|
|
321
|
+
# Check each recommendation has required fields
|
|
322
|
+
local invalid_recs
|
|
323
|
+
invalid_recs=$(jq -r '
|
|
324
|
+
.epic.personas[] as $persona |
|
|
325
|
+
$persona.recommendations[] |
|
|
326
|
+
select(has("id") == false or has("title") == false or has("type") == false or has("priority") == false) |
|
|
327
|
+
"\($persona.name): Missing required fields"
|
|
328
|
+
' "$json_file")
|
|
329
|
+
|
|
330
|
+
if [[ -n "$invalid_recs" ]]; then
|
|
331
|
+
log_error "Invalid recommendations found:"
|
|
332
|
+
echo "$invalid_recs" | sed 's/^/ /'
|
|
333
|
+
return 1
|
|
334
|
+
fi
|
|
335
|
+
|
|
336
|
+
# Check recommendation types
|
|
337
|
+
local invalid_types
|
|
338
|
+
invalid_types=$(jq -r '
|
|
339
|
+
.epic.personas[] as $persona |
|
|
340
|
+
$persona.recommendations[] |
|
|
341
|
+
select(.type != "blocking" and .type != "suggested") |
|
|
342
|
+
"\($persona.name): Invalid type \(.type)"
|
|
343
|
+
' "$json_file")
|
|
344
|
+
|
|
345
|
+
if [[ -n "$invalid_types" ]]; then
|
|
346
|
+
log_error "Invalid recommendation types found:"
|
|
347
|
+
echo "$invalid_types" | sed 's/^/ /'
|
|
348
|
+
return 1
|
|
349
|
+
fi
|
|
350
|
+
|
|
351
|
+
# Check recommendation priorities
|
|
352
|
+
local invalid_priorities
|
|
353
|
+
invalid_priorities=$(jq -r '
|
|
354
|
+
.epic.personas[] as $persona |
|
|
355
|
+
$persona.recommendations[] |
|
|
356
|
+
select(.priority != "critical" and .priority != "high" and .priority != "medium" and .priority != "low") |
|
|
357
|
+
"\($persona.name): Invalid priority \(.priority)"
|
|
358
|
+
' "$json_file")
|
|
359
|
+
|
|
360
|
+
if [[ -n "$invalid_priorities" ]]; then
|
|
361
|
+
log_warning "Invalid recommendation priorities found:"
|
|
362
|
+
echo "$invalid_priorities" | sed 's/^/ /'
|
|
363
|
+
fi
|
|
364
|
+
|
|
365
|
+
return 0
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
# Validate metadata structure
|
|
369
|
+
validate_metadata() {
|
|
370
|
+
local json_file="$1"
|
|
371
|
+
local verbose="${2:-false}"
|
|
372
|
+
|
|
373
|
+
# Check for expected metadata fields
|
|
374
|
+
local expected_metadata_fields=("createdAt" "reviewMode" "devopsEnforced")
|
|
375
|
+
|
|
376
|
+
for field in "${expected_metadata_fields[@]}"; do
|
|
377
|
+
if jq -e ".epic.metadata.${field}" "$json_file" >/dev/null; then
|
|
378
|
+
if [[ "$verbose" == true ]]; then
|
|
379
|
+
log_success " Found metadata field: $field"
|
|
380
|
+
fi
|
|
381
|
+
fi
|
|
382
|
+
done
|
|
383
|
+
|
|
384
|
+
# Validate reviewMode
|
|
385
|
+
local review_mode
|
|
386
|
+
review_mode=$(jq -r '.epic.metadata.reviewMode // empty' "$json_file")
|
|
387
|
+
if [[ -n "$review_mode" ]]; then
|
|
388
|
+
case "$review_mode" in
|
|
389
|
+
"mvp"|"standard"|"enterprise")
|
|
390
|
+
if [[ "$verbose" == true ]]; then
|
|
391
|
+
log_success " Review mode is valid: $review_mode"
|
|
392
|
+
fi
|
|
393
|
+
;;
|
|
394
|
+
*)
|
|
395
|
+
log_warning "Invalid reviewMode in metadata: $review_mode"
|
|
396
|
+
;;
|
|
397
|
+
esac
|
|
398
|
+
fi
|
|
399
|
+
|
|
400
|
+
# Check createdAt format (ISO 8601)
|
|
401
|
+
local created_at
|
|
402
|
+
created_at=$(jq -r '.epic.metadata.createdAt // empty' "$json_file")
|
|
403
|
+
if [[ -n "$created_at" ]]; then
|
|
404
|
+
if [[ "$created_at" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}Z$ ]]; then
|
|
405
|
+
if [[ "$verbose" == true ]]; then
|
|
406
|
+
log_success " createdAt has valid ISO 8601 format"
|
|
407
|
+
fi
|
|
408
|
+
else
|
|
409
|
+
log_warning "createdAt does not match ISO 8601 format: $created_at"
|
|
410
|
+
fi
|
|
411
|
+
fi
|
|
412
|
+
|
|
413
|
+
return 0
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
# Main execution
|
|
417
|
+
main() {
|
|
418
|
+
# Parse command line arguments
|
|
419
|
+
local json_file=""
|
|
420
|
+
local verbose=false
|
|
421
|
+
local strict=false
|
|
422
|
+
local show_help=false
|
|
423
|
+
|
|
424
|
+
while [[ $# -gt 0 ]]; do
|
|
425
|
+
case $1 in
|
|
426
|
+
-h|--help)
|
|
427
|
+
show_help=true
|
|
428
|
+
shift
|
|
429
|
+
;;
|
|
430
|
+
-v|--verbose)
|
|
431
|
+
verbose=true
|
|
432
|
+
shift
|
|
433
|
+
;;
|
|
434
|
+
-s|--strict)
|
|
435
|
+
strict=true
|
|
436
|
+
shift
|
|
437
|
+
;;
|
|
438
|
+
-*)
|
|
439
|
+
log_error "Unknown option: $1"
|
|
440
|
+
log_error "Use -h or --help for usage information"
|
|
441
|
+
exit 3
|
|
442
|
+
;;
|
|
443
|
+
*)
|
|
444
|
+
if [[ -z "$json_file" ]]; then
|
|
445
|
+
json_file="$1"
|
|
446
|
+
else
|
|
447
|
+
log_error "Too many arguments"
|
|
448
|
+
log_error "Use -h or --help for usage information"
|
|
449
|
+
exit 3
|
|
450
|
+
fi
|
|
451
|
+
shift
|
|
452
|
+
;;
|
|
453
|
+
esac
|
|
454
|
+
done
|
|
455
|
+
|
|
456
|
+
# Show help if requested
|
|
457
|
+
if [[ "$show_help" == true ]]; then
|
|
458
|
+
show_help
|
|
459
|
+
exit 0
|
|
460
|
+
fi
|
|
461
|
+
|
|
462
|
+
# Validate required arguments
|
|
463
|
+
if [[ -z "$json_file" ]]; then
|
|
464
|
+
log_error "Missing required JSON file path"
|
|
465
|
+
log_error "Use -h or --help for usage information"
|
|
466
|
+
exit 3
|
|
467
|
+
fi
|
|
468
|
+
|
|
469
|
+
# Run validation
|
|
470
|
+
validate_json_structure "$json_file" "$strict" "$verbose"
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
# Execute main function
|
|
474
|
+
main "$@"
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cfn-epic-parser
|
|
3
|
+
description: "Converts natural language epic documents from markdown into structured JSON configurations for MDAP or CFN Loop execution. Use when you need to parse epic documents, validate epic structure, or generate execution configurations from planning documents."
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [epic, parser, mdap, cfn-loop, planning]
|
|
6
|
+
status: production
|
|
7
|
+
---
|
|
8
|
+
|
|
1
9
|
# CFN Epic Parser
|
|
2
10
|
|
|
3
11
|
## Overview
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cfn-error-management
|
|
3
|
-
description: Unified error handling, batching, and logging for CFN Loop
|
|
3
|
+
description: "Unified error handling, batching, and logging for CFN Loop. Use when you need to capture agent errors, batch multiple errors for processing, log structured error data, or categorize and recover from agent failures."
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
tags: [mega-skill, errors, logging, batch-processing]
|
|
6
6
|
status: production
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cfn-intervention-system
|
|
3
|
-
description: Human intervention detection and orchestration for CFN Loop
|
|
3
|
+
description: "Human intervention detection and orchestration for CFN Loop. Use when automated processes need human oversight, when escalation is required, or when managing intervention workflows and approval gates."
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
tags: [mega-skill, intervention, human-in-the-loop, escalation]
|
|
6
6
|
status: production
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cfn-knowledge-base
|
|
3
|
-
description: Organizational learning from CFN Loop execution - workflow codification and playbooks
|
|
3
|
+
description: "Organizational learning from CFN Loop execution - workflow codification and playbooks. Use when you need to store successful patterns, query past learnings, track edge cases and failures, or retrieve agent configurations and iteration strategies from previous tasks."
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
tags: [mega-skill, learning, workflow, playbook]
|
|
6
6
|
status: production
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"timestamp": "1765358428",
|
|
3
|
+
"agent_id": "unknown",
|
|
4
|
+
"original_file": "/mnt/c/Users/masha/Documents/claude-flow-novice/.claude/skills/cfn-local-ruvector-accelerator/src/cli/refs.rs",
|
|
5
|
+
"file_hash": "2cf0ad7377232c919ff0a65630cb307d",
|
|
6
|
+
"backup_path": "/mnt/c/Users/masha/Documents/claude-flow-novice/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d",
|
|
7
|
+
"created_at": "2025-12-10T09:20:29Z"
|
|
8
|
+
}
|