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,148 @@
|
|
|
1
|
+
# Claude Code Hooks
|
|
2
|
+
|
|
3
|
+
This directory contains hooks that integrate with Claude Code's lifecycle events.
|
|
4
|
+
|
|
5
|
+
## cfn-precompact-enhanced.sh
|
|
6
|
+
|
|
7
|
+
Enhanced PreCompact hook that preserves context before conversation compaction (manual or auto).
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
**Context Preservation:**
|
|
12
|
+
- Captures current git state (branch, status, recent commits)
|
|
13
|
+
- Saves uncommitted and staged changes
|
|
14
|
+
- Records modified files
|
|
15
|
+
|
|
16
|
+
**Session Metrics:**
|
|
17
|
+
- Counts recently edited files
|
|
18
|
+
- Estimates session duration from git history
|
|
19
|
+
- Detects test execution and status
|
|
20
|
+
- Tracks tool usage (if transcript available)
|
|
21
|
+
- Approximates token usage
|
|
22
|
+
|
|
23
|
+
**CFN-Specific Detection:**
|
|
24
|
+
- Active CFN Loop tasks
|
|
25
|
+
- Running CFN Docker containers
|
|
26
|
+
- Redis coordination state
|
|
27
|
+
- Recent pre-edit backups
|
|
28
|
+
|
|
29
|
+
**Output:**
|
|
30
|
+
- Prints structured summary to stdout (injected into Claude's context)
|
|
31
|
+
- Saves detailed JSON log to `.artifacts/precompact/session-{timestamp}.json`
|
|
32
|
+
- Includes CLAUDE.md reminders for best practices
|
|
33
|
+
|
|
34
|
+
### Configuration
|
|
35
|
+
|
|
36
|
+
The hook is configured in `.claude/settings.json`:
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"hooks": {
|
|
41
|
+
"PreCompact": [
|
|
42
|
+
{
|
|
43
|
+
"matcher": "manual",
|
|
44
|
+
"hooks": [
|
|
45
|
+
{
|
|
46
|
+
"type": "command",
|
|
47
|
+
"command": "/bin/bash .claude/hooks/cfn-precompact-enhanced.sh"
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"matcher": "auto",
|
|
53
|
+
"hooks": [
|
|
54
|
+
{
|
|
55
|
+
"type": "command",
|
|
56
|
+
"command": "/bin/bash .claude/hooks/cfn-precompact-enhanced.sh"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Performance
|
|
66
|
+
|
|
67
|
+
- **Timeout Protection**: 9-second overall script timeout
|
|
68
|
+
- **Non-Blocking**: Always exits with code 0
|
|
69
|
+
- **Optimized for WSL2**: Limits `find` depth and targets specific directories
|
|
70
|
+
- **Graceful Degradation**: Continues if git/jq unavailable
|
|
71
|
+
|
|
72
|
+
### Testing
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# Test without stdin
|
|
76
|
+
./.claude/hooks/cfn-precompact-enhanced.sh
|
|
77
|
+
|
|
78
|
+
# Test with simulated input
|
|
79
|
+
echo '{"type": "manual", "compact_type": "manual"}' | \
|
|
80
|
+
CLAUDE_PROJECT_DIR=$(pwd) bash .claude/hooks/cfn-precompact-enhanced.sh
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Output Example
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
=== PRE-COMPACT CONTEXT PRESERVATION ===
|
|
87
|
+
|
|
88
|
+
Compact Type: manual
|
|
89
|
+
Timestamp: 2025-12-10 04:46:26
|
|
90
|
+
|
|
91
|
+
Git State:
|
|
92
|
+
Branch: feature/auth-system
|
|
93
|
+
Uncommitted: 3 files
|
|
94
|
+
Modified: 2 files
|
|
95
|
+
Staged: 1 files
|
|
96
|
+
Last commit: abc123 - "Add JWT validation" (2 hours ago)
|
|
97
|
+
|
|
98
|
+
Session Summary:
|
|
99
|
+
Recent file edits: 5
|
|
100
|
+
Duration: 45 minutes
|
|
101
|
+
Tests run: true
|
|
102
|
+
Test status: passing
|
|
103
|
+
Tools used: 12 (Bash: 8, Edit: 4)
|
|
104
|
+
Approx tokens: ~800
|
|
105
|
+
|
|
106
|
+
Key Context:
|
|
107
|
+
- Working directory: /path/to/project
|
|
108
|
+
- Uncommitted changes
|
|
109
|
+
- 2 CFN container(s) running
|
|
110
|
+
|
|
111
|
+
Full context saved to: .artifacts/precompact/session-1765370786.json
|
|
112
|
+
|
|
113
|
+
=== CLAUDE.md REMINDERS ===
|
|
114
|
+
• Use CFN Loop for multi-step tasks
|
|
115
|
+
• Batch operations in single messages
|
|
116
|
+
• Pre-edit backup required before edits
|
|
117
|
+
• Run tests before commits
|
|
118
|
+
• Use service names in Docker networks
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Artifacts
|
|
122
|
+
|
|
123
|
+
Session data is preserved in:
|
|
124
|
+
- `.artifacts/precompact/session-{timestamp}.json` - Full JSON context
|
|
125
|
+
- `.artifacts/precompact/{timestamp}-git.diff` - Git diff (if changes exist)
|
|
126
|
+
- `.artifacts/precompact/{timestamp}-commits.txt` - Recent commit history
|
|
127
|
+
- `.artifacts/precompact/backup-{todo-file}-{timestamp}` - Copied todo files
|
|
128
|
+
|
|
129
|
+
### Environment Variables
|
|
130
|
+
|
|
131
|
+
- `CLAUDE_PROJECT_DIR` - Project root (defaults to `pwd`)
|
|
132
|
+
- `TRANSCRIPT_PATH` - Path to conversation transcript (optional, for tool usage stats)
|
|
133
|
+
- `INPUT` - JSON input from Claude Code (compact_type, custom_instructions)
|
|
134
|
+
|
|
135
|
+
### Troubleshooting
|
|
136
|
+
|
|
137
|
+
**Hook times out:**
|
|
138
|
+
- Check if running on Windows mount (should be Linux filesystem)
|
|
139
|
+
- Verify timeout settings in script (default 9 seconds)
|
|
140
|
+
- Reduce `find` depth or target fewer directories
|
|
141
|
+
|
|
142
|
+
**No JSON output:**
|
|
143
|
+
- Ensure `.artifacts/precompact/` directory exists
|
|
144
|
+
- Check for `jq` availability (gracefully degrades if missing)
|
|
145
|
+
|
|
146
|
+
**Line ending issues:**
|
|
147
|
+
- Convert to Unix line endings: `dos2unix .claude/hooks/cfn-precompact-enhanced.sh`
|
|
148
|
+
- Or use: `sed -i 's/\r$//' .claude/hooks/cfn-precompact-enhanced.sh`
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# SessionStart hook: Load OpenAI API key from root .env file
|
|
4
|
+
# This ensures OPENAI_API_KEY is available for embedding generation
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# Path to root .env file
|
|
9
|
+
ROOT_ENV="${PROJECT_ROOT:-.}/.env"
|
|
10
|
+
|
|
11
|
+
# Check if .env exists
|
|
12
|
+
if [[ ! -f "$ROOT_ENV" ]]; then
|
|
13
|
+
echo "⚠️ Warning: $ROOT_ENV not found. OpenAI embeddings will not work." >&2
|
|
14
|
+
exit 0
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# Extract OPENAI_API_KEY from .env
|
|
18
|
+
if grep -q "^OPENAI_API_KEY=" "$ROOT_ENV"; then
|
|
19
|
+
# Export the key for this session
|
|
20
|
+
export OPENAI_API_KEY=$(grep "^OPENAI_API_KEY=" "$ROOT_ENV" | cut -d'=' -f2- | tr -d '"')
|
|
21
|
+
|
|
22
|
+
# Verify key is set
|
|
23
|
+
if [[ -n "$OPENAI_API_KEY" ]]; then
|
|
24
|
+
echo "✅ Loaded OPENAI_API_KEY from root .env" >&2
|
|
25
|
+
else
|
|
26
|
+
echo "⚠️ Warning: OPENAI_API_KEY found but empty in $ROOT_ENV" >&2
|
|
27
|
+
fi
|
|
28
|
+
else
|
|
29
|
+
echo "⚠️ Warning: OPENAI_API_KEY not found in $ROOT_ENV. OpenAI embeddings will not work." >&2
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# Make it available to subprocesses
|
|
33
|
+
export OPENAI_API_KEY
|
|
34
|
+
|
|
35
|
+
exit 0
|
|
@@ -92,7 +92,7 @@ fi
|
|
|
92
92
|
# === Execute Pre-Edit Backup ===
|
|
93
93
|
|
|
94
94
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
95
|
-
BACKUP_SCRIPT="${SCRIPT_DIR}/../skills/
|
|
95
|
+
BACKUP_SCRIPT="${SCRIPT_DIR}/../skills/cfn-edit-safety/lib/backup/backup.sh"
|
|
96
96
|
|
|
97
97
|
if [[ ! -f "$BACKUP_SCRIPT" ]]; then
|
|
98
98
|
echo "Error: Backup script not found: $BACKUP_SCRIPT" >&2
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
log_prefix="[Cerebras-SessionStart]"
|
|
5
|
+
|
|
6
|
+
if [[ -n "${CEREBRAS_API_KEY:-}" ]]; then
|
|
7
|
+
exit 0
|
|
8
|
+
fi
|
|
9
|
+
|
|
10
|
+
env_file="${CLAUDE_PROJECT_DIR:-.}/.env"
|
|
11
|
+
|
|
12
|
+
if [[ ! -f "$env_file" ]]; then
|
|
13
|
+
echo "$log_prefix Warning: .env file not found at $env_file. Set via: export CEREBRAS_API_KEY=your_key" >&2
|
|
14
|
+
exit 0
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
if [[ ! -r "$env_file" ]]; then
|
|
18
|
+
echo "$log_prefix Warning: .env file at $env_file is not readable. Check permissions." >&2
|
|
19
|
+
exit 0
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
if [[ ! -s "$env_file" ]]; then
|
|
23
|
+
echo "$log_prefix Warning: .env file at $env_file is empty." >&2
|
|
24
|
+
exit 0
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
api_key=""
|
|
28
|
+
model="zai-glm-4.6"
|
|
29
|
+
line_num=0
|
|
30
|
+
|
|
31
|
+
while IFS= read -r line || [[ -n "$line" ]]; do
|
|
32
|
+
((line_num++))
|
|
33
|
+
|
|
34
|
+
[[ "$line" =~ ^[[:space:]]*# ]] && continue
|
|
35
|
+
[[ -z "${line// }" ]] && continue
|
|
36
|
+
|
|
37
|
+
if [[ "$line" =~ ^CEREBRAS_API_KEY[[:space:]]*= ]]; then
|
|
38
|
+
if [[ "$line" =~ ^CEREBRAS_API_KEY[[:space:]]*=[[:space:]]*$ ]]; then
|
|
39
|
+
echo "$log_prefix Warning: Empty CEREBRAS_API_KEY at line $line_num in $env_file" >&2
|
|
40
|
+
else
|
|
41
|
+
api_key=$(echo "$line" | cut -d= -f2-)
|
|
42
|
+
api_key="${api_key#"${api_key%%[![:space:]]*}"}"
|
|
43
|
+
api_key="${api_key%"${api_key##*[![:space:]]}"}"
|
|
44
|
+
fi
|
|
45
|
+
elif [[ "$line" =~ ^CEREBRAS_MODEL[[:space:]]*= ]]; then
|
|
46
|
+
if [[ ! "$line" =~ ^CEREBRAS_MODEL[[:space:]]*=[[:space:]]*$ ]]; then
|
|
47
|
+
model=$(echo "$line" | cut -d= -f2-)
|
|
48
|
+
model="${model#"${model%%[![:space:]]*}"}"
|
|
49
|
+
model="${model%"${model##*[![:space:]]}"}"
|
|
50
|
+
fi
|
|
51
|
+
fi
|
|
52
|
+
done < "$env_file"
|
|
53
|
+
|
|
54
|
+
if [[ -z "$api_key" ]]; then
|
|
55
|
+
echo "$log_prefix Warning: CEREBRAS_API_KEY not found in $env_file. Set via: export CEREBRAS_API_KEY=your_key" >&2
|
|
56
|
+
exit 0
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
redacted_key="${api_key:0:8}***"
|
|
60
|
+
|
|
61
|
+
cat <<EOF
|
|
62
|
+
{
|
|
63
|
+
"additionalContext": "Cerebras API configured: model=$model, key=$redacted_key"
|
|
64
|
+
}
|
|
65
|
+
EOF
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Enhanced PreCompact Hook for Claude Code
|
|
5
|
+
# Preserves context before conversation compaction
|
|
6
|
+
# Exit 0 always to ensure non-blocking behavior
|
|
7
|
+
|
|
8
|
+
# Overall script timeout (9 seconds, allowing 1 second buffer)
|
|
9
|
+
(
|
|
10
|
+
sleep 9
|
|
11
|
+
kill -TERM $$ 2>/dev/null || true
|
|
12
|
+
) &
|
|
13
|
+
TIMEOUT_PID=$!
|
|
14
|
+
|
|
15
|
+
SCRIPT_START=$(date +%s)
|
|
16
|
+
TIMEOUT_SECONDS=2
|
|
17
|
+
|
|
18
|
+
# Timeout wrapper for all operations
|
|
19
|
+
timeout_wrapper() {
|
|
20
|
+
timeout ${TIMEOUT_SECONDS}s "$@" 2>/dev/null || true
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
# Ensure we kill timeout watcher on exit
|
|
24
|
+
trap "kill $TIMEOUT_PID 2>/dev/null || true" EXIT
|
|
25
|
+
|
|
26
|
+
# Setup
|
|
27
|
+
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
|
|
28
|
+
ARTIFACTS_DIR="${PROJECT_DIR}/.artifacts/precompact"
|
|
29
|
+
TIMESTAMP=$(date +%s)
|
|
30
|
+
SESSION_FILE="${ARTIFACTS_DIR}/session-${TIMESTAMP}.json"
|
|
31
|
+
|
|
32
|
+
# Create artifacts directory
|
|
33
|
+
mkdir -p "${ARTIFACTS_DIR}" 2>/dev/null || true
|
|
34
|
+
|
|
35
|
+
# Parse INPUT from stdin (if available) - non-blocking read
|
|
36
|
+
if [ -t 0 ]; then
|
|
37
|
+
# No stdin available (terminal)
|
|
38
|
+
INPUT="{}"
|
|
39
|
+
else
|
|
40
|
+
# Read from stdin with timeout
|
|
41
|
+
INPUT=$(timeout 1s cat 2>/dev/null || echo "{}")
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
COMPACT_TYPE=$(echo "$INPUT" | jq -r '.compact_type // .type // "unknown"' 2>/dev/null || echo "unknown")
|
|
45
|
+
CUSTOM_INSTRUCTIONS=$(echo "$INPUT" | jq -r '.custom_instructions // ""' 2>/dev/null || echo "")
|
|
46
|
+
|
|
47
|
+
# Check for transcript path (if available from environment)
|
|
48
|
+
TRANSCRIPT_PATH="${TRANSCRIPT_PATH:-}"
|
|
49
|
+
|
|
50
|
+
# Initialize context object
|
|
51
|
+
CONTEXT="{}"
|
|
52
|
+
|
|
53
|
+
# === GIT STATE PRESERVATION ===
|
|
54
|
+
git_available() {
|
|
55
|
+
command -v git >/dev/null 2>&1 && [ -d "${PROJECT_DIR}/.git" ]
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if git_available; then
|
|
59
|
+
GIT_BRANCH=$(timeout_wrapper git -C "${PROJECT_DIR}" rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
|
|
60
|
+
GIT_STATUS=$(timeout_wrapper git -C "${PROJECT_DIR}" status --short 2>/dev/null || echo "")
|
|
61
|
+
GIT_UNCOMMITTED_COUNT=$(echo "$GIT_STATUS" | grep -c "^" 2>/dev/null || echo "0")
|
|
62
|
+
|
|
63
|
+
# Recent commits
|
|
64
|
+
GIT_LAST_COMMIT=$(timeout_wrapper git -C "${PROJECT_DIR}" log -1 --pretty=format:"%h - %s (%ar)" 2>/dev/null || echo "unknown")
|
|
65
|
+
GIT_RECENT_COMMITS=$(timeout_wrapper git -C "${PROJECT_DIR}" log -5 --pretty=format:"%h - %s" 2>/dev/null || echo "")
|
|
66
|
+
|
|
67
|
+
# Modified files
|
|
68
|
+
MODIFIED_FILES=$(timeout_wrapper git -C "${PROJECT_DIR}" diff --name-only HEAD 2>/dev/null | head -20 || echo "")
|
|
69
|
+
MODIFIED_COUNT=$(echo "$MODIFIED_FILES" | grep -c "^" 2>/dev/null || echo "0")
|
|
70
|
+
|
|
71
|
+
# Staged files
|
|
72
|
+
STAGED_FILES=$(timeout_wrapper git -C "${PROJECT_DIR}" diff --cached --name-only 2>/dev/null | head -20 || echo "")
|
|
73
|
+
STAGED_COUNT=$(echo "$STAGED_FILES" | grep -c "^" 2>/dev/null || echo "0")
|
|
74
|
+
|
|
75
|
+
CONTEXT=$(echo "$CONTEXT" | jq --arg branch "$GIT_BRANCH" \
|
|
76
|
+
--arg last_commit "$GIT_LAST_COMMIT" \
|
|
77
|
+
--arg uncommitted "$GIT_UNCOMMITTED_COUNT" \
|
|
78
|
+
--arg modified "$MODIFIED_COUNT" \
|
|
79
|
+
--arg staged "$STAGED_COUNT" \
|
|
80
|
+
'. + {git: {branch: $branch, last_commit: $last_commit, uncommitted_files: $uncommitted, modified_files: $modified, staged_files: $staged}}' 2>/dev/null || echo "$CONTEXT")
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
# === TODO PRESERVATION ===
|
|
84
|
+
TODO_FILES=()
|
|
85
|
+
for todo_path in ".claude/todos.json" "TODO.md" ".todos" "todos.json"; do
|
|
86
|
+
if [ -f "${PROJECT_DIR}/${todo_path}" ]; then
|
|
87
|
+
TODO_FILES+=("$todo_path")
|
|
88
|
+
# Copy to artifacts
|
|
89
|
+
cp "${PROJECT_DIR}/${todo_path}" "${ARTIFACTS_DIR}/backup-${todo_path##*/}-${TIMESTAMP}" 2>/dev/null || true
|
|
90
|
+
fi
|
|
91
|
+
done
|
|
92
|
+
|
|
93
|
+
TODO_COUNT=${#TODO_FILES[@]}
|
|
94
|
+
CONTEXT=$(echo "$CONTEXT" | jq --arg count "$TODO_COUNT" '. + {todos: {files_found: $count}}' 2>/dev/null || echo "$CONTEXT")
|
|
95
|
+
|
|
96
|
+
# === SESSION METRICS ===
|
|
97
|
+
# Count recently modified files in artifacts and project (with timeout to avoid hanging on slow mounts)
|
|
98
|
+
# Only search specific directories to avoid slow Windows mount traversal
|
|
99
|
+
RECENT_EDITS=0
|
|
100
|
+
for dir in "src" ".claude" "tests" "scripts"; do
|
|
101
|
+
if [ -d "${PROJECT_DIR}/${dir}" ]; then
|
|
102
|
+
DIR_COUNT=$(timeout 1s find "${PROJECT_DIR}/${dir}" -maxdepth 2 -type f -mmin -60 \( -name "*.ts" -o -name "*.js" -o -name "*.sh" -o -name "*.md" \) 2>/dev/null | wc -l)
|
|
103
|
+
DIR_COUNT=${DIR_COUNT:-0}
|
|
104
|
+
RECENT_EDITS=$((RECENT_EDITS + DIR_COUNT))
|
|
105
|
+
fi
|
|
106
|
+
done
|
|
107
|
+
|
|
108
|
+
# Check for common work indicators
|
|
109
|
+
TESTS_RUN=false
|
|
110
|
+
TEST_STATUS="none"
|
|
111
|
+
if [ -d "${PROJECT_DIR}/.artifacts/test-results" ]; then
|
|
112
|
+
RECENT_TEST_FILES=$(timeout_wrapper find "${PROJECT_DIR}/.artifacts/test-results" -type f -mmin -60 2>/dev/null | wc -l || echo "0")
|
|
113
|
+
if [ "$RECENT_TEST_FILES" -gt 0 ]; then
|
|
114
|
+
TESTS_RUN=true
|
|
115
|
+
# Try to extract test pass/fail status
|
|
116
|
+
LATEST_TEST_LOG=$(timeout_wrapper find "${PROJECT_DIR}/.artifacts/test-results" -type f -mmin -60 -name "*.log" 2>/dev/null | head -1)
|
|
117
|
+
if [ -n "$LATEST_TEST_LOG" ] && [ -f "$LATEST_TEST_LOG" ]; then
|
|
118
|
+
if grep -q "All tests passed" "$LATEST_TEST_LOG" 2>/dev/null; then
|
|
119
|
+
TEST_STATUS="passing"
|
|
120
|
+
elif grep -q "FAIL" "$LATEST_TEST_LOG" 2>/dev/null; then
|
|
121
|
+
TEST_STATUS="failing"
|
|
122
|
+
else
|
|
123
|
+
TEST_STATUS="unknown"
|
|
124
|
+
fi
|
|
125
|
+
fi
|
|
126
|
+
fi
|
|
127
|
+
fi
|
|
128
|
+
|
|
129
|
+
# Estimate session duration from git log (more reliable than file times on Windows mounts)
|
|
130
|
+
SESSION_DURATION="unknown"
|
|
131
|
+
if git_available; then
|
|
132
|
+
FIRST_COMMIT_TODAY=$(timeout_wrapper git -C "${PROJECT_DIR}" log --since="24 hours ago" --format=%ct --reverse 2>/dev/null | head -1 || echo "")
|
|
133
|
+
if [ -n "$FIRST_COMMIT_TODAY" ]; then
|
|
134
|
+
DURATION_MIN=$(( (SCRIPT_START - FIRST_COMMIT_TODAY) / 60 ))
|
|
135
|
+
if [ "$DURATION_MIN" -lt 60 ]; then
|
|
136
|
+
SESSION_DURATION="${DURATION_MIN} minutes"
|
|
137
|
+
else
|
|
138
|
+
DURATION_HOURS=$((DURATION_MIN / 60))
|
|
139
|
+
SESSION_DURATION="${DURATION_HOURS} hour(s)"
|
|
140
|
+
fi
|
|
141
|
+
fi
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
# Tool usage extraction (if transcript available)
|
|
145
|
+
TOOL_COUNT=0
|
|
146
|
+
BASH_CALLS=0
|
|
147
|
+
EDIT_CALLS=0
|
|
148
|
+
if [ -n "$TRANSCRIPT_PATH" ] && [ -f "$TRANSCRIPT_PATH" ]; then
|
|
149
|
+
TOOL_COUNT=$(timeout_wrapper grep -c '"type":"tool_use"' "$TRANSCRIPT_PATH" 2>/dev/null || echo "0")
|
|
150
|
+
BASH_CALLS=$(timeout_wrapper grep -c '"name":"Bash"' "$TRANSCRIPT_PATH" 2>/dev/null || echo "0")
|
|
151
|
+
EDIT_CALLS=$(timeout_wrapper grep -c '"name":"Edit"' "$TRANSCRIPT_PATH" 2>/dev/null || echo "0")
|
|
152
|
+
fi
|
|
153
|
+
|
|
154
|
+
# Approximate token usage (very rough estimate based on file changes)
|
|
155
|
+
APPROX_TOKENS="unknown"
|
|
156
|
+
if [ "$MODIFIED_COUNT" -gt 0 ]; then
|
|
157
|
+
# Rough: 100 tokens per modified file + 50 per Bash call + 200 per Edit
|
|
158
|
+
APPROX_TOKENS=$((MODIFIED_COUNT * 100 + BASH_CALLS * 50 + EDIT_CALLS * 200))
|
|
159
|
+
fi
|
|
160
|
+
|
|
161
|
+
CONTEXT=$(echo "$CONTEXT" | jq --arg recent "$RECENT_EDITS" \
|
|
162
|
+
--arg duration "$SESSION_DURATION" \
|
|
163
|
+
--argjson tests "$TESTS_RUN" \
|
|
164
|
+
--arg test_status "$TEST_STATUS" \
|
|
165
|
+
--arg tool_count "$TOOL_COUNT" \
|
|
166
|
+
--arg bash_calls "$BASH_CALLS" \
|
|
167
|
+
--arg edit_calls "$EDIT_CALLS" \
|
|
168
|
+
--arg approx_tokens "$APPROX_TOKENS" \
|
|
169
|
+
'. + {session: {recent_file_edits: $recent, estimated_duration: $duration, tests_run: $tests, test_status: $test_status, tool_count: $tool_count, bash_calls: $bash_calls, edit_calls: $edit_calls, approx_tokens: $approx_tokens}}' 2>/dev/null || echo "$CONTEXT")
|
|
170
|
+
|
|
171
|
+
# === IN-PROGRESS WORK DETECTION ===
|
|
172
|
+
WORK_INDICATORS=()
|
|
173
|
+
[ -f "${PROJECT_DIR}/.artifacts/runtime/task-in-progress" ] && WORK_INDICATORS+=("Task in progress")
|
|
174
|
+
[ -f "${PROJECT_DIR}/.claude/agents/spawned" ] && WORK_INDICATORS+=("Agents spawned")
|
|
175
|
+
[ "$GIT_UNCOMMITTED_COUNT" -gt 0 ] && WORK_INDICATORS+=("Uncommitted changes")
|
|
176
|
+
|
|
177
|
+
# Check for CFN Loop state
|
|
178
|
+
if [ -f "${PROJECT_DIR}/.artifacts/runtime/cfn-loop-state.json" ]; then
|
|
179
|
+
LOOP_STATUS=$(timeout_wrapper jq -r '.status // "unknown"' "${PROJECT_DIR}/.artifacts/runtime/cfn-loop-state.json" 2>/dev/null || echo "unknown")
|
|
180
|
+
[ "$LOOP_STATUS" != "unknown" ] && WORK_INDICATORS+=("CFN Loop: ${LOOP_STATUS}")
|
|
181
|
+
fi
|
|
182
|
+
|
|
183
|
+
# Check for Redis coordination (CLI mode)
|
|
184
|
+
if command -v redis-cli >/dev/null 2>&1; then
|
|
185
|
+
REDIS_TASKS=$(timeout_wrapper redis-cli --scan --pattern "cfn:task:*" 2>/dev/null | wc -l || echo "0")
|
|
186
|
+
[ "$REDIS_TASKS" -gt 0 ] && WORK_INDICATORS+=("${REDIS_TASKS} active CFN task(s)")
|
|
187
|
+
fi
|
|
188
|
+
|
|
189
|
+
# Check for running Docker containers
|
|
190
|
+
if command -v docker >/dev/null 2>&1; then
|
|
191
|
+
CFN_CONTAINERS=$(timeout_wrapper docker ps --filter "name=cfn-" --format "{{.Names}}" 2>/dev/null | wc -l || echo "0")
|
|
192
|
+
[ "$CFN_CONTAINERS" -gt 0 ] && WORK_INDICATORS+=("${CFN_CONTAINERS} CFN container(s) running")
|
|
193
|
+
fi
|
|
194
|
+
|
|
195
|
+
# Check for recent backups (pre-edit)
|
|
196
|
+
if [ -d "${PROJECT_DIR}/.artifacts/backups" ]; then
|
|
197
|
+
RECENT_BACKUPS=$(timeout_wrapper find "${PROJECT_DIR}/.artifacts/backups" -type f -mmin -60 2>/dev/null | wc -l || echo "0")
|
|
198
|
+
[ "$RECENT_BACKUPS" -gt 0 ] && WORK_INDICATORS+=("${RECENT_BACKUPS} recent backup(s)")
|
|
199
|
+
fi
|
|
200
|
+
|
|
201
|
+
# === GENERATE OUTPUT FOR CLAUDE ===
|
|
202
|
+
echo ""
|
|
203
|
+
echo "=== PRE-COMPACT CONTEXT PRESERVATION ==="
|
|
204
|
+
echo ""
|
|
205
|
+
echo "Compact Type: ${COMPACT_TYPE}"
|
|
206
|
+
[ -n "$CUSTOM_INSTRUCTIONS" ] && echo "Custom Instructions: ${CUSTOM_INSTRUCTIONS}"
|
|
207
|
+
echo ""
|
|
208
|
+
|
|
209
|
+
if git_available; then
|
|
210
|
+
echo "Git State:"
|
|
211
|
+
echo " Branch: ${GIT_BRANCH}"
|
|
212
|
+
echo " Uncommitted: ${GIT_UNCOMMITTED_COUNT} files"
|
|
213
|
+
[ "$MODIFIED_COUNT" -gt 0 ] && echo " Modified: ${MODIFIED_COUNT} files"
|
|
214
|
+
[ "$STAGED_COUNT" -gt 0 ] && echo " Staged: ${STAGED_COUNT} files"
|
|
215
|
+
echo " Last commit: ${GIT_LAST_COMMIT}"
|
|
216
|
+
echo ""
|
|
217
|
+
fi
|
|
218
|
+
|
|
219
|
+
echo "Session Summary:"
|
|
220
|
+
echo " Recent file edits: ${RECENT_EDITS}"
|
|
221
|
+
echo " Duration: ${SESSION_DURATION}"
|
|
222
|
+
echo " Tests run: ${TESTS_RUN}"
|
|
223
|
+
[ "$TEST_STATUS" != "none" ] && echo " Test status: ${TEST_STATUS}"
|
|
224
|
+
[ "$TOOL_COUNT" -gt 0 ] && echo " Tools used: ${TOOL_COUNT} (Bash: ${BASH_CALLS}, Edit: ${EDIT_CALLS})"
|
|
225
|
+
[ "$APPROX_TOKENS" != "unknown" ] && echo " Approx tokens: ~${APPROX_TOKENS}"
|
|
226
|
+
[ ${#WORK_INDICATORS[@]} -gt 0 ] && echo " In-progress work: ${WORK_INDICATORS[*]}"
|
|
227
|
+
echo ""
|
|
228
|
+
|
|
229
|
+
if [ ${#TODO_FILES[@]} -gt 0 ]; then
|
|
230
|
+
echo "Todo Files Preserved:"
|
|
231
|
+
for todo in "${TODO_FILES[@]}"; do
|
|
232
|
+
echo " - ${todo}"
|
|
233
|
+
done
|
|
234
|
+
echo ""
|
|
235
|
+
fi
|
|
236
|
+
|
|
237
|
+
if git_available && [ "$MODIFIED_COUNT" -gt 0 ]; then
|
|
238
|
+
echo "Recently Modified Files:"
|
|
239
|
+
echo "$MODIFIED_FILES" | head -10 | sed 's/^/ - /'
|
|
240
|
+
[ "$MODIFIED_COUNT" -gt 10 ] && echo " ... and $(($MODIFIED_COUNT - 10)) more"
|
|
241
|
+
echo ""
|
|
242
|
+
fi
|
|
243
|
+
|
|
244
|
+
echo "Key Context:"
|
|
245
|
+
echo " - Working directory: ${PROJECT_DIR}"
|
|
246
|
+
if [ ${#WORK_INDICATORS[@]} -gt 0 ]; then
|
|
247
|
+
for indicator in "${WORK_INDICATORS[@]}"; do
|
|
248
|
+
echo " - ${indicator}"
|
|
249
|
+
done
|
|
250
|
+
fi
|
|
251
|
+
echo ""
|
|
252
|
+
|
|
253
|
+
echo "Full context saved to: ${SESSION_FILE#${PROJECT_DIR}/}"
|
|
254
|
+
echo ""
|
|
255
|
+
|
|
256
|
+
echo "=== CLAUDE.md REMINDERS ==="
|
|
257
|
+
echo "• Use CFN Loop for multi-step tasks"
|
|
258
|
+
echo "• Batch operations in single messages"
|
|
259
|
+
echo "• Pre-edit backup required before edits"
|
|
260
|
+
echo "• Run tests before commits"
|
|
261
|
+
echo "• Use service names in Docker networks"
|
|
262
|
+
echo ""
|
|
263
|
+
|
|
264
|
+
# === SAVE DETAILED JSON LOG ===
|
|
265
|
+
FINAL_CONTEXT=$(echo "$CONTEXT" | jq --arg type "$COMPACT_TYPE" \
|
|
266
|
+
--arg custom "$CUSTOM_INSTRUCTIONS" \
|
|
267
|
+
--arg timestamp "$TIMESTAMP" \
|
|
268
|
+
--argjson indicators "$(printf '%s\n' "${WORK_INDICATORS[@]}" | jq -R . | jq -s . 2>/dev/null || echo '[]')" \
|
|
269
|
+
--arg modified_files "$MODIFIED_FILES" \
|
|
270
|
+
--arg staged_files "$STAGED_FILES" \
|
|
271
|
+
--arg recent_commits "$GIT_RECENT_COMMITS" \
|
|
272
|
+
'. + {
|
|
273
|
+
compact_type: $type,
|
|
274
|
+
custom_instructions: $custom,
|
|
275
|
+
timestamp: $timestamp,
|
|
276
|
+
work_indicators: $indicators,
|
|
277
|
+
git: (.git + {modified_file_list: $modified_files, staged_file_list: $staged_files, recent_commits: $recent_commits})
|
|
278
|
+
}' 2>/dev/null || echo "$CONTEXT")
|
|
279
|
+
|
|
280
|
+
echo "$FINAL_CONTEXT" > "${SESSION_FILE}" 2>/dev/null || true
|
|
281
|
+
|
|
282
|
+
# Always exit 0 (non-blocking)
|
|
283
|
+
exit 0
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Deprecated Hooks
|
|
2
|
+
|
|
3
|
+
These hooks have been superseded by the integrated post-edit pipeline (`config/hooks/post-edit-pipeline.js`) and settings.json hook configuration.
|
|
4
|
+
|
|
5
|
+
## Deprecation Date: 2025-12-10
|
|
6
|
+
|
|
7
|
+
## Why Deprecated
|
|
8
|
+
|
|
9
|
+
| Script | Superseded By |
|
|
10
|
+
|--------|---------------|
|
|
11
|
+
| cfn-credential-scanner.sh | Pipeline Phase 2 security scanner |
|
|
12
|
+
| cfn-lint-sql-injection.sh | Pipeline Phase 2.6 SQL injection detection |
|
|
13
|
+
| cfn-detect-hardcoded-credentials.sh | Pipeline Phase 2 security scanner |
|
|
14
|
+
| cfn-invoke-security-validation.sh | Pipeline Phase 2 security scanner |
|
|
15
|
+
| cfn-post-edit.sh | Full pipeline via PostToolUse hook |
|
|
16
|
+
| cfn-pre-edit-backup.sh | cfn-invoke-pre-edit.sh (wired in settings.json) |
|
|
17
|
+
| cfn-invoke-post-edit-ts.sh | Pipeline handles TypeScript directly |
|
|
18
|
+
| cfn-invoke-pre-edit-ts.sh | Pre-edit backup wired in settings.json |
|
|
19
|
+
|
|
20
|
+
## Active Hooks (in parent directory)
|
|
21
|
+
|
|
22
|
+
- `cfn-invoke-pre-edit.sh` - Pre-edit backup (WIRED)
|
|
23
|
+
- `cfn-precompact-enhanced.sh` - Context preservation (WIRED)
|
|
24
|
+
- `cfn-restore-from-backup.sh` - Revert capability
|
|
25
|
+
- `cfn-subagent-start.sh` - Future use
|
|
26
|
+
- `cfn-subagent-stop.sh` - Future use
|
|
27
|
+
- `install-git-hooks.sh` - Git integration
|