claude-flow-novice 2.18.13 → 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/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-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-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-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 -351
- 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 +259 -103
- 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/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/security_tests.rs +154 -0
- 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-mdap-context-injection/SKILL.md +31 -10
- package/.claude/skills/cfn-mdap-error-fixer/skill.md +15 -205
- package/.claude/skills/cfn-session-handoff/SKILL.md +1 -53
- 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-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/package.json +2 -1
- package/test-epic-creator-security.sh +203 -0
- 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/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/SKILL.md +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,253 @@
|
|
|
1
|
+
{
|
|
2
|
+
"epic": {
|
|
3
|
+
"id": "EPIC-329313",
|
|
4
|
+
"title": "Build a real-time analytics dashboard with user au",
|
|
5
|
+
"description": "Build a real-time analytics dashboard with user authentication, data visualization, and automated reporting capabilities\n",
|
|
6
|
+
"priority": "high",
|
|
7
|
+
"estimatedDuration": "TBD",
|
|
8
|
+
"budget": "TBD",
|
|
9
|
+
"status": "in-review",
|
|
10
|
+
"metadata": {
|
|
11
|
+
"createdAt": "2025-12-10T01:15:13.018Z",
|
|
12
|
+
"reviewMode": "standard",
|
|
13
|
+
"devopsEnforced": false
|
|
14
|
+
},
|
|
15
|
+
"personas": [
|
|
16
|
+
{
|
|
17
|
+
"name": "product-owner",
|
|
18
|
+
"reviewOrder": 1,
|
|
19
|
+
"status": "completed",
|
|
20
|
+
"insights": [
|
|
21
|
+
"User-centric approach identified in requirements",
|
|
22
|
+
"Clear value proposition needed for stakeholder alignment"
|
|
23
|
+
],
|
|
24
|
+
"recommendations": [
|
|
25
|
+
{
|
|
26
|
+
"id": "PO-001",
|
|
27
|
+
"title": "Create detailed user story mapping",
|
|
28
|
+
"type": "blocking",
|
|
29
|
+
"priority": "critical",
|
|
30
|
+
"estimatedCost": "$5,000",
|
|
31
|
+
"description": "Map user journeys to ensure all features address real user needs"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "PO-003",
|
|
35
|
+
"title": "Define success metrics and KPIs",
|
|
36
|
+
"type": "suggested",
|
|
37
|
+
"priority": "high",
|
|
38
|
+
"estimatedCost": "$3,000",
|
|
39
|
+
"description": "Establish measurable success criteria for the epic"
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"costAnalysis": {
|
|
43
|
+
"productPlanning": "$8,000",
|
|
44
|
+
"userResearch": "$5,000",
|
|
45
|
+
"stakeholderManagement": "$4,000"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "architect",
|
|
50
|
+
"reviewOrder": 2,
|
|
51
|
+
"status": "completed",
|
|
52
|
+
"insights": [
|
|
53
|
+
"Architecture must balance complexity with maintainability"
|
|
54
|
+
],
|
|
55
|
+
"recommendations": [
|
|
56
|
+
{
|
|
57
|
+
"id": "ARCH-001",
|
|
58
|
+
"title": "Design system architecture with clear component boundaries",
|
|
59
|
+
"type": "blocking",
|
|
60
|
+
"priority": "critical",
|
|
61
|
+
"estimatedCost": "$15,000",
|
|
62
|
+
"description": "Create detailed architecture diagrams and component specifications"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "ARCH-002",
|
|
66
|
+
"title": "Define integration patterns and data flows",
|
|
67
|
+
"type": "suggested",
|
|
68
|
+
"priority": "high",
|
|
69
|
+
"estimatedCost": "$8,000",
|
|
70
|
+
"description": "Document how components will interact and share data"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "ARCH-004",
|
|
74
|
+
"title": "Plan for future extensibility and evolution",
|
|
75
|
+
"type": "suggested",
|
|
76
|
+
"priority": "medium",
|
|
77
|
+
"estimatedCost": "$5,000",
|
|
78
|
+
"description": "Design for anticipated future requirements"
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"costAnalysis": {
|
|
82
|
+
"architectureDesign": "$20,000",
|
|
83
|
+
"technologySelection": "$10,000",
|
|
84
|
+
"documentation": "$5,000"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "security-specialist",
|
|
89
|
+
"reviewOrder": 3,
|
|
90
|
+
"status": "completed",
|
|
91
|
+
"insights": [
|
|
92
|
+
"Authentication and authorization mechanisms are critical",
|
|
93
|
+
"Data protection and privacy must be addressed early",
|
|
94
|
+
"Security should be integrated throughout the development lifecycle"
|
|
95
|
+
],
|
|
96
|
+
"recommendations": [
|
|
97
|
+
{
|
|
98
|
+
"id": "SEC-001",
|
|
99
|
+
"title": "Conduct threat modeling and security assessment",
|
|
100
|
+
"type": "blocking",
|
|
101
|
+
"priority": "critical",
|
|
102
|
+
"estimatedCost": "$12,000",
|
|
103
|
+
"description": "Identify potential security threats and mitigation strategies"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "SEC-002",
|
|
107
|
+
"title": "Implement secure coding standards and reviews",
|
|
108
|
+
"type": "suggested",
|
|
109
|
+
"priority": "high",
|
|
110
|
+
"estimatedCost": "$8,000",
|
|
111
|
+
"description": "Establish security guidelines and review processes"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "SEC-004",
|
|
115
|
+
"title": "Plan for incident response and monitoring",
|
|
116
|
+
"type": "suggested",
|
|
117
|
+
"priority": "medium",
|
|
118
|
+
"estimatedCost": "$6,000",
|
|
119
|
+
"description": "Prepare for security incident handling"
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"costAnalysis": {
|
|
123
|
+
"securityAssessment": "$15,000",
|
|
124
|
+
"implementation": "$10,000",
|
|
125
|
+
"testing": "$8,000"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"name": "performance-specialist",
|
|
130
|
+
"reviewOrder": 4,
|
|
131
|
+
"status": "completed",
|
|
132
|
+
"insights": [
|
|
133
|
+
"Performance requirements will be critical for user experience",
|
|
134
|
+
"Database performance and query optimization must be considered",
|
|
135
|
+
"Performance testing should start early and continue throughout"
|
|
136
|
+
],
|
|
137
|
+
"recommendations": [
|
|
138
|
+
{
|
|
139
|
+
"id": "PERF-001",
|
|
140
|
+
"title": "Define performance requirements and success criteria",
|
|
141
|
+
"type": "blocking",
|
|
142
|
+
"priority": "critical",
|
|
143
|
+
"estimatedCost": "$8,000",
|
|
144
|
+
"description": "Establish measurable performance targets and SLAs"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"id": "PERF-002",
|
|
148
|
+
"title": "Implement performance monitoring and alerting",
|
|
149
|
+
"type": "suggested",
|
|
150
|
+
"priority": "high",
|
|
151
|
+
"estimatedCost": "$6,000",
|
|
152
|
+
"description": "Set up tools to track performance metrics in production"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "PERF-004",
|
|
156
|
+
"title": "Create performance optimization plan",
|
|
157
|
+
"type": "suggested",
|
|
158
|
+
"priority": "medium",
|
|
159
|
+
"estimatedCost": "$5,000",
|
|
160
|
+
"description": "Identify and plan for performance improvements"
|
|
161
|
+
}
|
|
162
|
+
],
|
|
163
|
+
"costAnalysis": {
|
|
164
|
+
"performanceTesting": "$10,000",
|
|
165
|
+
"monitoring": "$7,000",
|
|
166
|
+
"optimization": "$8,000"
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"name": "accessibility-advocate",
|
|
171
|
+
"reviewOrder": 5,
|
|
172
|
+
"status": "completed",
|
|
173
|
+
"insights": [
|
|
174
|
+
"UI components must meet WCAG 2.1 AA standards",
|
|
175
|
+
"Accessibility benefits all users, not just those with disabilities"
|
|
176
|
+
],
|
|
177
|
+
"recommendations": [
|
|
178
|
+
{
|
|
179
|
+
"id": "A11Y-001",
|
|
180
|
+
"title": "Ensure WCAG 2.1 AA compliance for all user interfaces",
|
|
181
|
+
"type": "blocking",
|
|
182
|
+
"priority": "critical",
|
|
183
|
+
"estimatedCost": "$10,000",
|
|
184
|
+
"description": "Make the application accessible to users with disabilities"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"id": "A11Y-002",
|
|
188
|
+
"title": "Conduct accessibility testing with assistive technologies",
|
|
189
|
+
"type": "suggested",
|
|
190
|
+
"priority": "high",
|
|
191
|
+
"estimatedCost": "$6,000",
|
|
192
|
+
"description": "Test with screen readers, keyboard navigation, and other tools"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"id": "A11Y-004",
|
|
196
|
+
"title": "Create accessibility documentation and guides",
|
|
197
|
+
"type": "suggested",
|
|
198
|
+
"priority": "medium",
|
|
199
|
+
"estimatedCost": "$4,000",
|
|
200
|
+
"description": "Document accessibility features and usage"
|
|
201
|
+
}
|
|
202
|
+
],
|
|
203
|
+
"costAnalysis": {
|
|
204
|
+
"accessibilityImplementation": "$15,000",
|
|
205
|
+
"testing": "$5,000",
|
|
206
|
+
"training": "$3,000"
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"name": "devops-engineer",
|
|
211
|
+
"reviewOrder": 6,
|
|
212
|
+
"status": "completed",
|
|
213
|
+
"insights": [
|
|
214
|
+
"Infrastructure as Code provides reproducibility and consistency"
|
|
215
|
+
],
|
|
216
|
+
"recommendations": [
|
|
217
|
+
{
|
|
218
|
+
"id": "DEVOPS-001",
|
|
219
|
+
"title": "Set up CI/CD pipeline for automated builds and deployments",
|
|
220
|
+
"type": "suggested",
|
|
221
|
+
"priority": "high",
|
|
222
|
+
"estimatedCost": "$10,000",
|
|
223
|
+
"description": "Automate testing, building, and deployment processes"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"id": "DEVOPS-002",
|
|
227
|
+
"title": "Implement infrastructure monitoring and alerting",
|
|
228
|
+
"type": "suggested",
|
|
229
|
+
"priority": "high",
|
|
230
|
+
"estimatedCost": "$7,000",
|
|
231
|
+
"description": "Monitor application and infrastructure health"
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"id": "DEVOPS-004",
|
|
235
|
+
"title": "Create runbooks and operational documentation",
|
|
236
|
+
"type": "suggested",
|
|
237
|
+
"priority": "medium",
|
|
238
|
+
"estimatedCost": "$5,000",
|
|
239
|
+
"description": "Document operational procedures and troubleshooting"
|
|
240
|
+
}
|
|
241
|
+
],
|
|
242
|
+
"costAnalysis": {
|
|
243
|
+
"infrastructureSetup": "$15,000",
|
|
244
|
+
"automation": "$10,000",
|
|
245
|
+
"monitoring": "$8,000"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
],
|
|
249
|
+
"implementationRoadmap": [],
|
|
250
|
+
"totalCostBreakdown": {},
|
|
251
|
+
"riskAssessment": {}
|
|
252
|
+
}
|
|
253
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-flow-novice",
|
|
3
|
-
"version": "2.18.
|
|
3
|
+
"version": "2.18.14",
|
|
4
4
|
"description": "Claude Flow Novice - Advanced orchestration platform for multi-agent AI workflows with CFN Loop architecture\n\nIncludes Local RuVector Accelerator and all CFN skills for complete functionality.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -118,6 +118,7 @@
|
|
|
118
118
|
"yaml": "^2.3.4"
|
|
119
119
|
},
|
|
120
120
|
"devDependencies": {
|
|
121
|
+
"@cerebras/cerebras_cloud_sdk": "^1.59.0",
|
|
121
122
|
"@types/bcryptjs": "^2.4.6",
|
|
122
123
|
"@types/compression": "^1.7.5",
|
|
123
124
|
"@types/cors": "^2.8.17",
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Test script to validate epic-creator-v2 security fixes
|
|
5
|
+
# Tests command injection, path traversal, and input sanitization
|
|
6
|
+
|
|
7
|
+
# Color codes for output
|
|
8
|
+
readonly GREEN='\033[0;32m'
|
|
9
|
+
readonly RED='\033[0;31m'
|
|
10
|
+
readonly YELLOW='\033[1;33m'
|
|
11
|
+
readonly NC='\033[0m' # No Color
|
|
12
|
+
|
|
13
|
+
# Test counters
|
|
14
|
+
TESTS_RUN=0
|
|
15
|
+
TESTS_PASSED=0
|
|
16
|
+
TESTS_FAILED=0
|
|
17
|
+
|
|
18
|
+
# Logging functions
|
|
19
|
+
log_test() {
|
|
20
|
+
echo -e "${YELLOW}[TEST]${NC} $1"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
log_pass() {
|
|
24
|
+
echo -e "${GREEN}[PASS]${NC} $1"
|
|
25
|
+
((TESTS_PASSED++))
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
log_fail() {
|
|
29
|
+
echo -e "${RED}[FAIL]${NC} $1"
|
|
30
|
+
((TESTS_FAILED++))
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Run a test case
|
|
34
|
+
run_test() {
|
|
35
|
+
((TESTS_RUN++))
|
|
36
|
+
log_test "Running: $1"
|
|
37
|
+
|
|
38
|
+
if eval "$2"; then
|
|
39
|
+
log_pass "Test passed: $1"
|
|
40
|
+
else
|
|
41
|
+
log_fail "Test failed: $1"
|
|
42
|
+
fi
|
|
43
|
+
echo
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
# Test command injection protection
|
|
47
|
+
test_command_injection() {
|
|
48
|
+
echo "=== Testing Command Injection Protection ==="
|
|
49
|
+
|
|
50
|
+
# Test 1: Command substitution attempt
|
|
51
|
+
run_test "Command substitution \$(whoami)" \
|
|
52
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
53
|
+
&& ! sanitize_string "test\$(whoami)" 2>/dev/null'
|
|
54
|
+
|
|
55
|
+
# Test 2: Backtick command substitution
|
|
56
|
+
run_test "Backtick command substitution \`whoami\`" \
|
|
57
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
58
|
+
&& ! sanitize_string "test\`whoami\`" 2>/dev/null'
|
|
59
|
+
|
|
60
|
+
# Test 3: Pipe character
|
|
61
|
+
run_test "Pipe character injection" \
|
|
62
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
63
|
+
&& ! sanitize_string "test | ls" 2>/dev/null'
|
|
64
|
+
|
|
65
|
+
# Test 4: Command chaining
|
|
66
|
+
run_test "Command chaining &&" \
|
|
67
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
68
|
+
&& ! sanitize_string "test && rm -rf" 2>/dev/null'
|
|
69
|
+
|
|
70
|
+
# Test 5: Command chaining ||"
|
|
71
|
+
run_test "Command chaining ||" \
|
|
72
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
73
|
+
&& ! sanitize_string "test || rm -rf" 2>/dev/null'
|
|
74
|
+
|
|
75
|
+
# Test 6: Semicolon
|
|
76
|
+
run_test "Semicolon separator" \
|
|
77
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
78
|
+
&& ! sanitize_string "test; rm -rf" 2>/dev/null'
|
|
79
|
+
|
|
80
|
+
# Test 7: Output redirection
|
|
81
|
+
run_test "Output redirection >" \
|
|
82
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
83
|
+
&& ! sanitize_string "test > /etc/passwd" 2>/dev/null'
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
# Test path traversal protection
|
|
87
|
+
test_path_traversal() {
|
|
88
|
+
echo "=== Testing Path Traversal Protection ==="
|
|
89
|
+
|
|
90
|
+
# Test 1: Directory traversal
|
|
91
|
+
run_test "Directory traversal ../etc/passwd" \
|
|
92
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
93
|
+
&& ! validate_path "../../../etc/passwd" 2>/dev/null'
|
|
94
|
+
|
|
95
|
+
# Test 2: Absolute path outside
|
|
96
|
+
run_test "Absolute path outside /etc/passwd" \
|
|
97
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
98
|
+
&& ! validate_path "/etc/passwd" 2>/dev/null'
|
|
99
|
+
|
|
100
|
+
# Test 3: Home directory
|
|
101
|
+
run_test "Home directory ~/" \
|
|
102
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
103
|
+
&& ! validate_path "~/.ssh/id_rsa" 2>/dev/null'
|
|
104
|
+
|
|
105
|
+
# Test 4: Valid relative path
|
|
106
|
+
run_test "Valid relative path" \
|
|
107
|
+
'. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
108
|
+
&& validate_path "./output.json" 2>/dev/null'
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
# Test input validation
|
|
112
|
+
test_input_validation() {
|
|
113
|
+
echo "=== Testing Input Validation ==="
|
|
114
|
+
|
|
115
|
+
# Test 1: Empty input
|
|
116
|
+
run_test "Empty epic description" \
|
|
117
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
118
|
+
&& ! validate_epic_description "" 2>/dev/null'
|
|
119
|
+
|
|
120
|
+
# Test 2: Too short input
|
|
121
|
+
run_test "Too short epic description" \
|
|
122
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
123
|
+
&& ! validate_epic_description "ab" 2>/dev/null'
|
|
124
|
+
|
|
125
|
+
# Test 3: Valid input
|
|
126
|
+
run_test "Valid epic description" \
|
|
127
|
+
'. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
128
|
+
&& validate_epic_description "This is a valid epic description" 2>/dev/null'
|
|
129
|
+
|
|
130
|
+
# Test 4: Input exceeding max length
|
|
131
|
+
run_test "Input exceeding max length" \
|
|
132
|
+
'!. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
133
|
+
&& ! sanitize_string "$(printf "a%.0s" {1..10001})" 2>/dev/null'
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
# Test secure temp file creation
|
|
137
|
+
test_temp_file_creation() {
|
|
138
|
+
echo "=== Testing Secure Temp File Creation ==="
|
|
139
|
+
|
|
140
|
+
# Test 1: Create secure temp file
|
|
141
|
+
run_test "Create secure temp file" \
|
|
142
|
+
'. ./.claude/skills/cfn-epic-creator/security-utils.sh \
|
|
143
|
+
&& temp_file=$(create_secure_temp "test" "tmp") \
|
|
144
|
+
&& [[ -f "$temp_file" ]] \
|
|
145
|
+
&& [[ "$(stat -c %a "$temp_file" 2>/dev/null || stat -f%A "$temp_file" 2>/dev/null)" == "600" ]] \
|
|
146
|
+
&& rm -f "$temp_file"'
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
# Test epic creator with malicious inputs
|
|
150
|
+
test_epic_creator_malicious() {
|
|
151
|
+
echo "=== Testing Epic Creator with Malicious Inputs ==="
|
|
152
|
+
|
|
153
|
+
# Test 1: Command injection in description
|
|
154
|
+
run_test "Epic creator with command injection" \
|
|
155
|
+
'! ./.claude/agents/cfn-dev-team/utility/epic-creator-v2.sh \
|
|
156
|
+
"test\$(whoami) injection" --mode=mvp >/dev/null 2>&1'
|
|
157
|
+
|
|
158
|
+
# Test 2: Path traversal in output
|
|
159
|
+
run_test "Epic creator with path traversal output" \
|
|
160
|
+
'! ./.claude/agents/cfn-dev-team/utility/epic-creator-v2.sh \
|
|
161
|
+
"test epic" --output="../../../etc/passwd" >/dev/null 2>&1'
|
|
162
|
+
|
|
163
|
+
# Test 3: Valid epic creation
|
|
164
|
+
run_test "Valid epic creation" \
|
|
165
|
+
'temp_out=$(mktemp) \
|
|
166
|
+
&& ./.claude/agents/cfn-dev-team/utility/epic-creator-v2.sh \
|
|
167
|
+
"Test epic for validation" --output="$temp_out" >/dev/null 2>&1 \
|
|
168
|
+
&& [[ -f "$temp_out" ]] \
|
|
169
|
+
&& jq . "$temp_out" >/dev/null 2>&1 \
|
|
170
|
+
&& rm -f "$temp_out"'
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
# Main execution
|
|
174
|
+
main() {
|
|
175
|
+
echo "Starting Epic Creator v2 Security Validation Tests"
|
|
176
|
+
echo "=============================================="
|
|
177
|
+
echo
|
|
178
|
+
|
|
179
|
+
# Run all test suites
|
|
180
|
+
test_command_injection
|
|
181
|
+
test_path_traversal
|
|
182
|
+
test_input_validation
|
|
183
|
+
test_temp_file_creation
|
|
184
|
+
test_epic_creator_malicious
|
|
185
|
+
|
|
186
|
+
# Summary
|
|
187
|
+
echo "=============================================="
|
|
188
|
+
echo "Test Summary:"
|
|
189
|
+
echo " Total tests run: $TESTS_RUN"
|
|
190
|
+
echo -e " Passed: ${GREEN}$TESTS_PASSED${NC}"
|
|
191
|
+
echo -e " Failed: ${RED}$TESTS_FAILED${NC}"
|
|
192
|
+
|
|
193
|
+
if [[ $TESTS_FAILED -eq 0 ]]; then
|
|
194
|
+
echo -e "\n${GREEN}✅ All security tests passed!${NC}"
|
|
195
|
+
exit 0
|
|
196
|
+
else
|
|
197
|
+
echo -e "\n${RED}❌ Some security tests failed!${NC}"
|
|
198
|
+
exit 1
|
|
199
|
+
fi
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
# Run main function
|
|
203
|
+
main "$@"
|
package/.claude/skills/cfn-local-ruvector-accelerator/__pycache__/search_engine_v2.cpython-312.pyc
DELETED
|
Binary file
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
from sklearn.metrics.pairwise import cosine_similarity
|
|
2
|
-
import numpy as np
|
|
3
|
-
from typing import List, Dict, Optional, Tuple
|
|
4
|
-
import sqlite3
|
|
5
|
-
from datetime import datetime
|
|
6
|
-
|
|
7
|
-
class EmbeddingsManager:
|
|
8
|
-
def __init__(self):
|
|
9
|
-
self.embeddings = {}
|
|
10
|
-
|
|
11
|
-
def get_embedding(self, text: str) -> np.ndarray:
|
|
12
|
-
if text not in self.embeddings:
|
|
13
|
-
self.embeddings[text] = np.random.rand(1536).astype(np.float32)
|
|
14
|
-
return self.embeddings[text]
|
|
15
|
-
|
|
16
|
-
class SQLiteStore:
|
|
17
|
-
def __init__(self, db_path: str = ":memory:"):
|
|
18
|
-
self.conn = sqlite3.connect(db_path)
|
|
19
|
-
self._init_db()
|
|
20
|
-
|
|
21
|
-
def _init_db(self):
|
|
22
|
-
self.conn.execute("""
|
|
23
|
-
CREATE TABLE IF NOT EXISTS patterns (
|
|
24
|
-
id TEXT PRIMARY KEY,
|
|
25
|
-
pattern TEXT NOT NULL,
|
|
26
|
-
file_type TEXT,
|
|
27
|
-
embedding BLOB,
|
|
28
|
-
success_rate REAL DEFAULT 0.0,
|
|
29
|
-
usage_count INTEGER DEFAULT 0,
|
|
30
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
31
|
-
)
|
|
32
|
-
""")
|
|
33
|
-
self.conn.commit()
|
|
34
|
-
|
|
35
|
-
def get_patterns(self, file_type: str = None, limit: int = 10) -> List[Dict]:
|
|
36
|
-
query = "SELECT * FROM patterns"
|
|
37
|
-
params = []
|
|
38
|
-
if file_type:
|
|
39
|
-
query += " WHERE file_type = ?"
|
|
40
|
-
params.append(file_type)
|
|
41
|
-
query += " ORDER BY usage_count DESC LIMIT ?"
|
|
42
|
-
params.append(limit)
|
|
43
|
-
|
|
44
|
-
cursor = self.conn.execute(query, params)
|
|
45
|
-
columns = [desc[0] for desc in cursor.description]
|
|
46
|
-
return [dict(zip(columns, row)) for row in cursor.fetchall()]
|
|
47
|
-
|
|
48
|
-
def get_pattern_by_id(self, pattern_id: str) -> Optional[Dict]:
|
|
49
|
-
cursor = self.conn.execute("SELECT * FROM patterns WHERE id = ?", (pattern_id,))
|
|
50
|
-
row = cursor.fetchone()
|
|
51
|
-
if row:
|
|
52
|
-
columns = [desc[0] for desc in cursor.description]
|
|
53
|
-
return dict(zip(columns, row))
|
|
54
|
-
return None
|
|
55
|
-
|
|
56
|
-
def text_search(self, query: str, file_type: str = None, limit: int = 10) -> List[Dict]:
|
|
57
|
-
query_sql = "SELECT * FROM patterns WHERE pattern LIKE ?"
|
|
58
|
-
params = [f"%{query}%"]
|
|
59
|
-
if file_type:
|
|
60
|
-
query_sql += " AND file_type = ?"
|
|
61
|
-
params.append(file_type)
|
|
62
|
-
query_sql += " ORDER BY usage_count DESC LIMIT ?"
|
|
63
|
-
params.append(limit)
|
|
64
|
-
|
|
65
|
-
cursor = self.conn.execute(query_sql, params)
|
|
66
|
-
columns = [desc[0] for desc in cursor.description]
|
|
67
|
-
return [dict(zip(columns, row)) for row in cursor.fetchall()]
|
|
68
|
-
|
|
69
|
-
class SearchEngine:
|
|
70
|
-
def __init__(self, embeddings_manager: EmbeddingsManager, sqlite_store: SQLiteStore):
|
|
71
|
-
self.embeddings = embeddings_manager
|
|
72
|
-
self.db = sqlite_store
|
|
73
|
-
self._embedding_cache = {}
|
|
74
|
-
|
|
75
|
-
def search(self, query_pattern: str, file_type: str = None,
|
|
76
|
-
limit: int = 10, min_similarity: float = 0.7) -> List[Dict]:
|
|
77
|
-
"""Search for similar patterns using semantic similarity"""
|
|
78
|
-
query_embedding = self.get_embedding(query_pattern)
|
|
79
|
-
|
|
80
|
-
patterns = self.db.get_patterns(file_type=file_type, limit=limit * 3)
|
|
81
|
-
|
|
82
|
-
if not patterns:
|
|
83
|
-
return []
|
|
84
|
-
|
|
85
|
-
pattern_embeddings = []
|
|
86
|
-
valid_patterns = []
|
|
87
|
-
|
|
88
|
-
for pattern in patterns:
|
|
89
|
-
if pattern['embedding']:
|
|
90
|
-
embedding = np.frombuffer(pattern['embedding'], dtype=np.float32)
|
|
91
|
-
pattern_embeddings.append(embedding)
|
|
92
|
-
valid_patterns.append(pattern)
|
|
93
|
-
|
|
94
|
-
if not pattern_embeddings:
|
|
95
|
-
return self.search_by_text(query_pattern, file_type, limit)
|
|
96
|
-
|
|
97
|
-
pattern_embeddings = np.array(pattern_embeddings)
|
|
98
|
-
similarities = self._calculate_similarity(query_embedding, pattern_embeddings)
|
|
99
|
-
|
|
100
|
-
results = []
|
|
101
|
-
for i, pattern in enumerate(valid_patterns):
|
|
102
|
-
similarity = similarities[i]
|
|
103
|
-
if similarity >= min_similarity:
|
|
104
|
-
pattern['similarity_score'] = float(similarity)
|
|
105
|
-
pattern['hybrid_score'] = self._calculate_hybrid_score(pattern, similarity)
|
|
106
|
-
results.append(pattern)
|
|
107
|
-
|
|
108
|
-
results.sort(key=lambda x: x['hybrid_score'], reverse=True)
|
|
109
|
-
return results[:limit]
|
|
110
|
-
|
|
111
|
-
def search_by_text(self, query_text: str, file_type: str = None,
|
|
112
|
-
limit: int = 10) -> List[Dict]:
|
|
113
|
-
"""Full-text search fallback"""
|
|
114
|
-
patterns = self.db.text_search(query_text, file_type, limit)
|
|
115
|
-
|
|
116
|
-
for pattern in patterns:
|
|
117
|
-
pattern['similarity_score'] = 0.5
|
|
118
|
-
pattern['hybrid_score'] = self._calculate_hybrid_score(pattern, 0.5)
|
|
119
|
-
|
|
120
|
-
return patterns
|
|
121
|
-
|
|
122
|
-
def get_embedding(self, text: str) -> np.ndarray:
|
|
123
|
-
"""Get embedding for text with caching"""
|
|
124
|
-
if text in self._embedding_cache:
|
|
125
|
-
return self._embedding_cache[text]
|
|
126
|
-
|
|
127
|
-
embedding = self.embeddings.get_embedding(text)
|
|
128
|
-
self._embedding_cache[text] = embedding
|
|
129
|
-
return embedding
|
|
130
|
-
|
|
131
|
-
def _calculate_similarity(self, query_embedding: np.ndarray,
|
|
132
|
-
pattern_embeddings: np.ndarray) -> np.ndarray:
|
|
133
|
-
"""Calculate cosine similarities"""
|
|
134
|
-
return cosine_similarity([query_embedding], pattern_embeddings)[0]
|
|
135
|
-
|
|
136
|
-
def get_similar_patterns(self, pattern_id: str, limit: int = 5) -> List[Dict]:
|
|
137
|
-
"""Get patterns similar to a given pattern"""
|
|
138
|
-
pattern = self.db.get_pattern_by_id(pattern_id)
|
|
139
|
-
if not pattern:
|
|
140
|
-
return []
|
|
141
|
-
|
|
142
|
-
return self.search(
|
|
143
|
-
query_pattern=pattern['pattern'],
|
|
144
|
-
file_type=pattern['file_type'],
|
|
145
|
-
limit=limit,
|
|
146
|
-
min_similarity=0.5
|
|
147
|
-
)
|
|
148
|
-
|
|
149
|
-
def _calculate_hybrid_score(self, pattern: Dict, similarity: float) -> float:
|
|
150
|
-
"""Calculate hybrid ranking score combining similarity, success rate, and usage"""
|
|
151
|
-
similarity_weight = 0.6
|
|
152
|
-
success_weight = 0.25
|
|
153
|
-
usage_weight = 0.15
|
|
154
|
-
|
|
155
|
-
max_usage = 100
|
|
156
|
-
usage_score = min(pattern['usage_count'] / max_usage, 1.0)
|
|
157
|
-
|
|
158
|
-
hybrid_score = (
|
|
159
|
-
similarity * similarity_weight +
|
|
160
|
-
pattern['success_rate'] * success_weight +
|
|
161
|
-
usage_score * usage_weight
|
|
162
|
-
)
|
|
163
|
-
|
|
164
|
-
return hybrid_score
|
|
165
|
-
|
|
166
|
-
def add_pattern(self, pattern_id: str, pattern_text: str,
|
|
167
|
-
file_type: str = None, success_rate: float = 0.0,
|
|
168
|
-
usage_count: int = 0) -> None:
|
|
169
|
-
"""Add a new pattern to the database"""
|
|
170
|
-
embedding = self.get_embedding(pattern_text)
|
|
171
|
-
embedding_blob = embedding.tobytes()
|
|
172
|
-
|
|
173
|
-
self.db.conn.execute("""
|
|
174
|
-
INSERT OR REPLACE INTO patterns
|
|
175
|
-
(id, pattern, file_type, embedding, success_rate, usage_count)
|
|
176
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
177
|
-
""", (pattern_id, pattern_text, file_type, embedding_blob,
|
|
178
|
-
success_rate, usage_count))
|
|
179
|
-
self.db.conn.commit()
|
|
180
|
-
|
|
181
|
-
def update_usage(self, pattern_id: str, success: bool = True) -> None:
|
|
182
|
-
"""Update pattern usage statistics"""
|
|
183
|
-
pattern = self.db.get_pattern_by_id(pattern_id)
|
|
184
|
-
if pattern:
|
|
185
|
-
new_usage = pattern['usage_count'] + 1
|
|
186
|
-
if success:
|
|
187
|
-
new_success_rate = ((pattern['success_rate'] * pattern['usage_count']) + 1) / new_usage
|
|
188
|
-
else:
|
|
189
|
-
new_success_rate = (pattern['success_rate'] * pattern['usage_count']) / new_usage
|
|
190
|
-
|
|
191
|
-
self.db.conn.execute("""
|
|
192
|
-
UPDATE patterns
|
|
193
|
-
SET usage_count = ?, success_rate = ?
|
|
194
|
-
WHERE id = ?
|
|
195
|
-
""", (new_usage, new_success_rate, pattern_id))
|
|
196
|
-
self.db.conn.commit()
|
|
197
|
-
|
|
198
|
-
def clear_cache(self) -> None:
|
|
199
|
-
"""Clear the embedding cache"""
|
|
200
|
-
self._embedding_cache.clear()
|
package/jest.config.ts.cjs
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
preset: 'ts-jest',
|
|
3
|
-
testEnvironment: 'node',
|
|
4
|
-
testMatch: ['**/*.test.ts', '**/*.test.cjs'],
|
|
5
|
-
transform: {
|
|
6
|
-
'^.+\\.ts$': 'ts-jest',
|
|
7
|
-
},
|
|
8
|
-
moduleNameMapper: {
|
|
9
|
-
'^(\\.{1,2}/.*)\\.js$': '$1',
|
|
10
|
-
},
|
|
11
|
-
extensionsToTreatAsEsm: ['.ts'],
|
|
12
|
-
globals: {
|
|
13
|
-
'ts-jest': {
|
|
14
|
-
useESM: true,
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
};
|