claude-flow-novice 2.18.12 → 2.18.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.backups/unknown/1765417503_2999b9ec66f591dd76075617ec31fcea/metadata.json +8 -0
- package/.backups/unknown/1765417503_2999b9ec66f591dd76075617ec31fcea/original +3 -0
- package/.backups/unknown/1765417503_2999b9ec66f591dd76075617ec31fcea/revert.sh +7 -0
- package/.backups/unknown/1765417531_2999b9ec66f591dd76075617ec31fcea/metadata.json +8 -0
- package/.backups/unknown/1765417531_2999b9ec66f591dd76075617ec31fcea/original +3 -0
- package/.backups/unknown/1765417531_2999b9ec66f591dd76075617ec31fcea/revert.sh +7 -0
- package/.backups/unknown/1765417552_2999b9ec66f591dd76075617ec31fcea/metadata.json +8 -0
- package/.backups/unknown/1765417552_2999b9ec66f591dd76075617ec31fcea/original +3 -0
- package/.backups/unknown/1765417552_2999b9ec66f591dd76075617ec31fcea/revert.sh +7 -0
- package/.backups/unknown/1765417613_1f34dbf0fe1ec3b6cb74ba7c4e12a2a4/metadata.json +8 -0
- package/.backups/unknown/1765417613_1f34dbf0fe1ec3b6cb74ba7c4e12a2a4/original +1212 -0
- package/.backups/unknown/1765417613_1f34dbf0fe1ec3b6cb74ba7c4e12a2a4/revert.sh +7 -0
- package/.backups/unknown/1765417613_332e9bb223a26270398922640c1c1653/metadata.json +8 -0
- package/.backups/unknown/1765417613_332e9bb223a26270398922640c1c1653/original +1212 -0
- package/.backups/unknown/1765417613_332e9bb223a26270398922640c1c1653/revert.sh +7 -0
- package/.backups/unknown/1765417613_45880a7afef063347b701e7e88e2df9c/metadata.json +8 -0
- package/.backups/unknown/1765417613_45880a7afef063347b701e7e88e2df9c/original +1212 -0
- package/.backups/unknown/1765417613_45880a7afef063347b701e7e88e2df9c/revert.sh +7 -0
- package/.backups/unknown/1765417614_1b6c3b658c2891dbe245aea4bad41661/metadata.json +8 -0
- package/.backups/unknown/1765417614_1b6c3b658c2891dbe245aea4bad41661/original +1228 -0
- package/.backups/unknown/1765417614_1b6c3b658c2891dbe245aea4bad41661/revert.sh +7 -0
- package/.backups/unknown/1765417614_1ed5bd129f0b5d1b297a04ec5267ef62/metadata.json +8 -0
- package/.backups/unknown/1765417614_1ed5bd129f0b5d1b297a04ec5267ef62/original +1237 -0
- package/.backups/unknown/1765417614_1ed5bd129f0b5d1b297a04ec5267ef62/revert.sh +7 -0
- package/.backups/unknown/1765417614_28e032bd1b62dbfcecbd56327a0b0e23/metadata.json +8 -0
- package/.backups/unknown/1765417614_28e032bd1b62dbfcecbd56327a0b0e23/original +1240 -0
- package/.backups/unknown/1765417614_28e032bd1b62dbfcecbd56327a0b0e23/revert.sh +7 -0
- package/.backups/unknown/1765417614_40a1ce1b0efa2e1ba1958c27b2cbc557/metadata.json +8 -0
- package/.backups/unknown/1765417614_40a1ce1b0efa2e1ba1958c27b2cbc557/original +1216 -0
- package/.backups/unknown/1765417614_40a1ce1b0efa2e1ba1958c27b2cbc557/revert.sh +7 -0
- package/.backups/unknown/1765417614_f65dbf58cff7a9aa1c5c3d0d1618074a/metadata.json +8 -0
- package/.backups/unknown/1765417614_f65dbf58cff7a9aa1c5c3d0d1618074a/original +1238 -0
- package/.backups/unknown/1765417614_f65dbf58cff7a9aa1c5c3d0d1618074a/revert.sh +7 -0
- package/.backups/unknown/1765417615_0f45c28b9b8d5204974421c06075ff74/metadata.json +8 -0
- package/.backups/unknown/1765417615_0f45c28b9b8d5204974421c06075ff74/original +1167 -0
- package/.backups/unknown/1765417615_0f45c28b9b8d5204974421c06075ff74/revert.sh +7 -0
- package/.backups/unknown/1765417615_41d36156891ddb6f63d1b4da59d1db4c/metadata.json +8 -0
- package/.backups/unknown/1765417615_41d36156891ddb6f63d1b4da59d1db4c/original +1242 -0
- package/.backups/unknown/1765417615_41d36156891ddb6f63d1b4da59d1db4c/revert.sh +7 -0
- package/.backups/unknown/1765417709_77dda8631459cfc2ab94b8928f7d90b4/metadata.json +8 -0
- package/.backups/unknown/1765417709_77dda8631459cfc2ab94b8928f7d90b4/original +2 -0
- package/.backups/unknown/1765417709_77dda8631459cfc2ab94b8928f7d90b4/revert.sh +7 -0
- package/.backups/unknown/1765417775_1405837bacf112ba832a139840fe94e7/metadata.json +8 -0
- package/.backups/unknown/1765417775_1405837bacf112ba832a139840fe94e7/original +1169 -0
- package/.backups/unknown/1765417775_1405837bacf112ba832a139840fe94e7/revert.sh +7 -0
- package/.backups/unknown/1765417775_8044b4a5cfdcb5cd71317831ad53f5a2/metadata.json +8 -0
- package/.backups/unknown/1765417775_8044b4a5cfdcb5cd71317831ad53f5a2/original +1171 -0
- package/.backups/unknown/1765417775_8044b4a5cfdcb5cd71317831ad53f5a2/revert.sh +7 -0
- package/.backups/unknown/1765417775_8eb94d60151e1db262377fbf8a187212/metadata.json +8 -0
- package/.backups/unknown/1765417775_8eb94d60151e1db262377fbf8a187212/original +1170 -0
- package/.backups/unknown/1765417775_8eb94d60151e1db262377fbf8a187212/revert.sh +7 -0
- package/.backups/unknown/1765417776_a0d4b709e15e0bfa002c4b128f5e4603/metadata.json +8 -0
- package/.backups/unknown/1765417776_a0d4b709e15e0bfa002c4b128f5e4603/original +1173 -0
- package/.backups/unknown/1765417776_a0d4b709e15e0bfa002c4b128f5e4603/revert.sh +7 -0
- package/.backups/unknown/1765417776_cb1bc24d98b63564eb73ef782b8c68b3/metadata.json +8 -0
- package/.backups/unknown/1765417776_cb1bc24d98b63564eb73ef782b8c68b3/original +1170 -0
- package/.backups/unknown/1765417776_cb1bc24d98b63564eb73ef782b8c68b3/revert.sh +7 -0
- package/.backups/unknown/1765417777_1c4cc8c33f476f0c87c8efd4e34efc22/metadata.json +8 -0
- package/.backups/unknown/1765417777_1c4cc8c33f476f0c87c8efd4e34efc22/original +1172 -0
- package/.backups/unknown/1765417777_1c4cc8c33f476f0c87c8efd4e34efc22/revert.sh +7 -0
- package/.backups/unknown/1765417777_325de83ffd34544909b8b9aa6e18dd05/metadata.json +8 -0
- package/.backups/unknown/1765417777_325de83ffd34544909b8b9aa6e18dd05/original +1175 -0
- package/.backups/unknown/1765417777_325de83ffd34544909b8b9aa6e18dd05/revert.sh +7 -0
- package/.backups/unknown/1765417950_402e7c1a8956b56ac7b88e89f024acb4/metadata.json +8 -0
- package/.backups/unknown/1765417950_402e7c1a8956b56ac7b88e89f024acb4/original +1178 -0
- package/.backups/unknown/1765417950_402e7c1a8956b56ac7b88e89f024acb4/revert.sh +7 -0
- package/.backups/unknown/1765417950_647e27e4da18ae42c339e04b4d334feb/metadata.json +8 -0
- package/.backups/unknown/1765417950_647e27e4da18ae42c339e04b4d334feb/original +1174 -0
- package/.backups/unknown/1765417950_647e27e4da18ae42c339e04b4d334feb/revert.sh +7 -0
- package/.backups/unknown/1765417951_1424d2dd67b8c8a4e7cf649b379d21f2/metadata.json +8 -0
- package/.backups/unknown/1765417951_1424d2dd67b8c8a4e7cf649b379d21f2/original +1194 -0
- package/.backups/unknown/1765417951_1424d2dd67b8c8a4e7cf649b379d21f2/revert.sh +7 -0
- package/.backups/unknown/1765417951_6df070ca287ea94a7f08efc69ec9ea51/metadata.json +8 -0
- package/.backups/unknown/1765417951_6df070ca287ea94a7f08efc69ec9ea51/original +1186 -0
- package/.backups/unknown/1765417951_6df070ca287ea94a7f08efc69ec9ea51/revert.sh +7 -0
- package/.backups/unknown/1765417951_848919a1365f6536e5ef8d85d0c80fa7/metadata.json +8 -0
- package/.backups/unknown/1765417951_848919a1365f6536e5ef8d85d0c80fa7/original +1180 -0
- package/.backups/unknown/1765417951_848919a1365f6536e5ef8d85d0c80fa7/revert.sh +7 -0
- package/.backups/unknown/1765417951_b0d1d4ecf85ad10cda0f3900d414b608/metadata.json +8 -0
- package/.backups/unknown/1765417951_b0d1d4ecf85ad10cda0f3900d414b608/original +1198 -0
- package/.backups/unknown/1765417951_b0d1d4ecf85ad10cda0f3900d414b608/revert.sh +7 -0
- package/.backups/unknown/1765417952_2b720e213b5197cbaad53f9f0857f23f/metadata.json +8 -0
- package/.backups/unknown/1765417952_2b720e213b5197cbaad53f9f0857f23f/original +1202 -0
- package/.backups/unknown/1765417952_2b720e213b5197cbaad53f9f0857f23f/revert.sh +7 -0
- package/.backups/unknown/1765417952_ef1d15e8b83a802a0c0f0fc03e56a89c/metadata.json +8 -0
- package/.backups/unknown/1765417952_ef1d15e8b83a802a0c0f0fc03e56a89c/original +1202 -0
- package/.backups/unknown/1765417952_ef1d15e8b83a802a0c0f0fc03e56a89c/revert.sh +7 -0
- package/.backups/unknown/1765418048_ac94238a69a6f86a6ba9d31f623c18a7/metadata.json +8 -0
- package/.backups/unknown/1765418048_ac94238a69a6f86a6ba9d31f623c18a7/original +1209 -0
- package/.backups/unknown/1765418048_ac94238a69a6f86a6ba9d31f623c18a7/revert.sh +7 -0
- package/.backups/unknown/1765418048_f3afed98da63fef9ff57fb5646976f63/metadata.json +8 -0
- package/.backups/unknown/1765418048_f3afed98da63fef9ff57fb5646976f63/original +1207 -0
- package/.backups/unknown/1765418048_f3afed98da63fef9ff57fb5646976f63/revert.sh +7 -0
- package/.backups/unknown/1765418049_9c392702a4e1cace37d17f6f2dfaf54e/metadata.json +8 -0
- package/.backups/unknown/1765418049_9c392702a4e1cace37d17f6f2dfaf54e/original +1207 -0
- package/.backups/unknown/1765418049_9c392702a4e1cace37d17f6f2dfaf54e/revert.sh +7 -0
- package/.backups/unknown/1765418049_9e0777555b51dea4d24d0503b584cfc5/metadata.json +8 -0
- package/.backups/unknown/1765418049_9e0777555b51dea4d24d0503b584cfc5/original +1193 -0
- package/.backups/unknown/1765418049_9e0777555b51dea4d24d0503b584cfc5/revert.sh +7 -0
- package/.backups/unknown/1765418050_22d534bed68f9f5d883bee54e7cbc4d3/metadata.json +8 -0
- package/.backups/unknown/1765418050_22d534bed68f9f5d883bee54e7cbc4d3/original +1194 -0
- package/.backups/unknown/1765418050_22d534bed68f9f5d883bee54e7cbc4d3/revert.sh +7 -0
- package/.backups/unknown/1765418051_d9243722dc90dabc851c5767a62ac7f2/metadata.json +8 -0
- package/.backups/unknown/1765418051_d9243722dc90dabc851c5767a62ac7f2/original +1193 -0
- package/.backups/unknown/1765418051_d9243722dc90dabc851c5767a62ac7f2/revert.sh +7 -0
- package/.backups/unknown/1765418177_21a2fa816d25d419b54ef2d429aab474/metadata.json +8 -0
- package/.backups/unknown/1765418177_21a2fa816d25d419b54ef2d429aab474/original +1191 -0
- package/.backups/unknown/1765418177_21a2fa816d25d419b54ef2d429aab474/revert.sh +7 -0
- package/.backups/unknown/1765418177_33b673dce1eb59d7eb4f752aec882794/metadata.json +8 -0
- package/.backups/unknown/1765418177_33b673dce1eb59d7eb4f752aec882794/original +1190 -0
- package/.backups/unknown/1765418177_33b673dce1eb59d7eb4f752aec882794/revert.sh +7 -0
- package/.backups/unknown/1765418177_72568812ea5a73cf6861a6b14da065fa/metadata.json +8 -0
- package/.backups/unknown/1765418177_72568812ea5a73cf6861a6b14da065fa/original +1191 -0
- package/.backups/unknown/1765418177_72568812ea5a73cf6861a6b14da065fa/revert.sh +7 -0
- package/.backups/unknown/1765418178_20c28b95f12194fe4b81cfb35f4f3757/metadata.json +8 -0
- package/.backups/unknown/1765418178_20c28b95f12194fe4b81cfb35f4f3757/original +1189 -0
- package/.backups/unknown/1765418178_20c28b95f12194fe4b81cfb35f4f3757/revert.sh +7 -0
- package/.backups/unknown/1765418178_cdf68719cc09173769027743e2718ad4/metadata.json +8 -0
- package/.backups/unknown/1765418178_cdf68719cc09173769027743e2718ad4/original +1197 -0
- package/.backups/unknown/1765418178_cdf68719cc09173769027743e2718ad4/revert.sh +7 -0
- package/.backups/unknown/1765418178_eb19e0f8542405480e51af09fad84b71/metadata.json +8 -0
- package/.backups/unknown/1765418178_eb19e0f8542405480e51af09fad84b71/original +1190 -0
- package/.backups/unknown/1765418178_eb19e0f8542405480e51af09fad84b71/revert.sh +7 -0
- package/.backups/unknown/1765418236_c016507725847318a3c369b047cbb802/metadata.json +8 -0
- package/.backups/unknown/1765418236_c016507725847318a3c369b047cbb802/original +1197 -0
- package/.backups/unknown/1765418236_c016507725847318a3c369b047cbb802/revert.sh +7 -0
- package/.backups/unknown/1765418237_932c3cc3a5c537b7933c2370b65f4b39/metadata.json +8 -0
- package/.backups/unknown/1765418237_932c3cc3a5c537b7933c2370b65f4b39/original +1197 -0
- package/.backups/unknown/1765418237_932c3cc3a5c537b7933c2370b65f4b39/revert.sh +7 -0
- package/.claude/agents/cfn-dev-team/utility/epic-creator-v2.md +194 -2
- package/.claude/agents/cfn-dev-team/utility/epic-creator-v2.sh +264 -0
- package/.claude/agents/cfn-dev-team/utility/epic-creator-v2.sh.backup +698 -0
- package/.claude/agents/custom/claude-code-expert.md +56 -0
- package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/SKILL.md +1 -1
- package/.claude/hooks/README.md +148 -0
- package/.claude/hooks/SessionStart:cfn-load-openai-key.sh +35 -0
- package/.claude/hooks/cfn-invoke-pre-edit.sh +1 -1
- package/.claude/hooks/cfn-load-cerebras-env.sh +65 -0
- package/.claude/hooks/cfn-precompact-enhanced.sh +283 -0
- package/.claude/hooks/deprecated/README.md +27 -0
- package/.claude/settings.json +71 -6
- package/.claude/skills/cfn-agent-lifecycle/SKILL.md +1 -1
- package/.claude/skills/cfn-agent-tooling/SKILL.md +1 -1
- package/.claude/skills/cfn-cerebras-coordinator/QUICKSTART.md +348 -0
- package/.claude/skills/cfn-cerebras-coordinator/README.md +525 -0
- package/.claude/skills/cfn-cerebras-coordinator/TDD_COORDINATOR_OVERVIEW.md +284 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-py-v2-test-1733854200.json +36 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-py-v3-test-1765383241.json +36 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-rust-v2-test-1765381361.json +36 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-rust-v3-test-1765383242.json +46 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v2-test-1733864400.json +66 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v3-test-1765383238.json +66 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v4-test-1765386506.json +66 -0
- package/.claude/skills/cfn-cerebras-coordinator/conversations/2025-12-10-ts-v5-test-1765393100.json +66 -0
- package/.claude/skills/cfn-cerebras-coordinator/example-usage.sh +206 -0
- package/.claude/skills/cfn-cerebras-coordinator/lib/tdd-conversation-coordinator.ts +569 -0
- package/.claude/skills/cfn-cerebras-coordinator/test-tdd-coordinator.sh +250 -0
- package/.claude/skills/cfn-compilation-error-fixer/SKILL.md +1 -1
- package/.claude/skills/cfn-compilation-error-fixer/lib/fixer/cerebras-gated-fixer-v2.ts +1 -1
- package/.claude/skills/cfn-config/SKILL.md +1 -1
- package/.claude/skills/cfn-dependency-management/SKILL.md +1 -1
- package/.claude/skills/cfn-deployment-lifecycle/SKILL.md +1 -1
- package/.claude/skills/cfn-edit-safety/SKILL.md +1 -1
- package/.claude/skills/cfn-epic-creator/SKILL.md +392 -0
- package/.claude/skills/cfn-epic-creator/estimate-costs.sh +524 -0
- package/.claude/skills/cfn-epic-creator/invoke.sh +445 -0
- package/.claude/skills/cfn-epic-creator/parse-personas.sh +533 -0
- package/.claude/skills/cfn-epic-creator/security-utils.sh +268 -0
- package/.claude/skills/cfn-epic-creator/security-verification-demo.sh +127 -0
- package/.claude/skills/cfn-epic-creator/test-invoke.sh +620 -0
- package/.claude/skills/cfn-epic-creator/test-security-fixes.sh +195 -0
- package/.claude/skills/cfn-epic-creator/test-security-simple.sh +165 -0
- package/.claude/skills/cfn-epic-creator/validate-epic.sh +474 -0
- package/.claude/skills/cfn-epic-parser/SKILL.md +8 -0
- package/.claude/skills/cfn-error-management/SKILL.md +1 -1
- package/.claude/skills/cfn-intervention-system/SKILL.md +1 -1
- package/.claude/skills/cfn-knowledge-base/SKILL.md +1 -1
- package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/metadata.json +8 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/original +209 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/.backups/unknown/1765358428_2cf0ad7377232c919ff0a65630cb307d/revert.sh +7 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/AGENT_INTEGRATION_PATTERNS.md +255 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/Cargo.toml +8 -1
- package/.claude/skills/cfn-local-ruvector-accelerator/Cargo.toml.backup +47 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/EXTRACTION_EXAMPLES.md +287 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/README.md +2 -563
- package/.claude/skills/cfn-local-ruvector-accelerator/SCHEMA_V2_IMPLEMENTATION.md +151 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/SECURITY_IMPLEMENTATION.md +185 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/SKILL.md +8 -343
- package/.claude/skills/cfn-local-ruvector-accelerator/docs/EXECUTIVE_SUMMARY.txt +90 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/docs/PHASE_4_QUERY_API.md +210 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/docs/RUST_AST_EXTRACTOR_IMPLEMENTATION.md +222 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/docs/TRANSACTION_MANAGEMENT.md +241 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/docs/VALIDATION_FINDINGS.txt +250 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/epic-ast-indexer.json +335 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/index-code.sh +292 -96
- package/.claude/skills/cfn-local-ruvector-accelerator/index-code.sh.backup +249 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/index_all.sh +65 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/find.rs +214 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index.rs +275 -94
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index_ast.rs +767 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/index_modified.rs +37 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/init.rs +17 -12
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/migration.rs +34 -1
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/mod.rs +6 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/query.rs +2 -2
- package/.claude/skills/cfn-local-ruvector-accelerator/src/cli/refs.rs +209 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/embeddings.rs +82 -33
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/mod.rs +251 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/rust.rs +425 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/rust_placeholder.rs +420 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/text_fallback.rs +490 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/typescript.rs +520 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/extractors/typescript_full.rs +531 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/lib.rs +20 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/main.rs +33 -2
- package/.claude/skills/cfn-local-ruvector-accelerator/src/main.rs.backup +360 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/migration.rs +325 -318
- package/.claude/skills/cfn-local-ruvector-accelerator/src/migration_backup.rs +325 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/migration_tx.rs +513 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/paths.rs +29 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/query_api.rs +609 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/schema_v2.rs +603 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/search_engine.rs +150 -29
- package/.claude/skills/cfn-local-ruvector-accelerator/src/security_tests.rs +154 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/sqlite_store.rs +1 -1
- package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2.rs +583 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_backup.rs +560 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_fixed.rs +0 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/store_v2_tx.rs +397 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/test_schema.rs +228 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/src/transaction_tests.rs +410 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/test_ast_indexing.rs +59 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/test_query_api.sh +103 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/test_schema.sql +158 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/test_schema_v2.sql +147 -0
- package/.claude/skills/cfn-loop-orchestration-v2/SKILL.md +1 -1
- package/.claude/skills/cfn-loop-orchestration-v2/lib/decision/SKILL.md +8 -0
- package/.claude/skills/cfn-loop-orchestration-v2/lib/orchestrator/SKILL.md +1 -1
- package/.claude/skills/cfn-loop-orchestration-v2/lib/output/SKILL.md +8 -0
- package/.claude/skills/cfn-loop-orchestration-v2/lib/validation/SKILL.md +11 -2
- package/.claude/skills/cfn-mdap-context-injection/SKILL.md +31 -10
- package/.claude/skills/cfn-mdap-error-fixer/skill.md +15 -205
- package/.claude/skills/cfn-memory-persistence/lib/auto/SKILL.md +7 -0
- package/.claude/skills/cfn-memory-persistence/lib/management/SKILL.md +7 -0
- package/.claude/skills/cfn-parameterized-queries/SKILL.md +8 -0
- package/.claude/skills/cfn-planning/SKILL.md +1 -1
- package/.claude/skills/cfn-session-handoff/SKILL.md +1 -53
- package/.claude/skills/cfn-skill-management/SKILL.md +1 -1
- package/.claude/skills/cfn-task-decomposition/SKILL.md +1 -0
- package/.claude/skills/cfn-task-intelligence/SKILL.md +39 -18
- package/.claude/skills/cfn-task-planning/SKILL.md +37 -12
- package/.claude/skills/cfn-transparency-middleware/SKILL.md +1 -1
- package/.claude/skills/cfn-utilities/SKILL.md +1 -1
- package/.claude/skills/cfn-validation-framework/SKILL.md +3 -60
- package/.claude/skills/cfn-vision-analysis/SKILL.md +3 -20
- package/.claude-flow/metrics/performance.json +3 -3
- package/.claude-flow/metrics/task-metrics.json +3 -3
- package/.ruvector/index_v2.db-shm +0 -0
- package/.ruvector/index_v2.db-wal +0 -0
- package/CLAUDE.md +9 -1
- package/README.md +56 -0
- package/docs/AGENT_PRODUCTION_FEEDBACK_PATTERNS.md +389 -0
- package/docs/CEREBRAS_TDD_COORDINATOR_TEST_RESULTS.md +213 -0
- package/docs/CEREBRAS_TDD_ROUND1_VS_ROUND2_COMPARISON.md +225 -0
- package/docs/CEREBRAS_TDD_ROUND3_FINAL_RESULTS.md +264 -0
- package/docs/EPIC_CREATOR_V2_ARCHITECTURE.md +629 -0
- package/docs/HOOKS_IMPLEMENTATION_PRIORITY.md +585 -0
- package/docs/SKILLS_HOOKS_INTEGRATION.md +1074 -0
- package/epic-with-personas-2025-12-09-17-15-13.json +253 -0
- package/index/index.bin +0 -0
- package/index/metadata.json +1 -0
- package/package.json +2 -1
- package/test-epic-creator-security.sh +203 -0
- package/.claude/skills/cfn-compilation-error-fixer/HANDOFF.md +0 -29
- package/.claude/skills/cfn-local-ruvector-accelerator/__pycache__/search_engine_v2.cpython-312.pyc +0 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/search_engine.py +0 -200
- package/.ruvector/index.db-journal +0 -0
- package/jest.config.ts.cjs +0 -17
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/context-analyzer.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-cerebras-code-generator/generate-code.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/execute.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/INTEGRATION.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/SAMPLE_OUTPUTS.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/capture-container-logs.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/enable-logging.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/init-hybrid-logging.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/analytics-summary.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-agent-timeline.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-consensus-history.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-coordination-timeline.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-failed-containers.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/queries/query-gate-checks.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/schema.sql +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/sqlite-helpers.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/logging/test-hybrid-logging.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/mcp/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/mcp/skill-mcp-selector.js +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/orchestration/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/orchestration/orchestrate.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/spawning/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/spawning/spawn-agent.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/cleanup-wave.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/lib/docker-helpers.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/monitor-wave.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-docker-runtime/lib/waves/spawn-wave.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-node-heap-sizer/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/cfn-node-heap-sizer/task-mode-heap-limiter.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/deprecated/analyze-patterns.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/README.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/SECURITY.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/SKILL.md +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/package.json +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/solve.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test-equation-solver-minimal.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test-equation-solver.sh +0 -0
- /package/.claude/{skills → cfn-extras/skills/deprecated}/equation-solver/test.cjs +0 -0
- /package/.claude/hooks/{cfn-credential-scanner.sh → deprecated/cfn-credential-scanner.sh} +0 -0
- /package/.claude/hooks/{cfn-detect-hardcoded-credentials.sh → deprecated/cfn-detect-hardcoded-credentials.sh} +0 -0
- /package/.claude/hooks/{cfn-invoke-post-edit-ts.sh → deprecated/cfn-invoke-post-edit-ts.sh} +0 -0
- /package/.claude/hooks/{cfn-invoke-pre-edit-ts.sh → deprecated/cfn-invoke-pre-edit-ts.sh} +0 -0
- /package/.claude/hooks/{cfn-invoke-security-validation.sh → deprecated/cfn-invoke-security-validation.sh} +0 -0
- /package/.claude/hooks/{cfn-lint-sql-injection.sh → deprecated/cfn-lint-sql-injection.sh} +0 -0
- /package/.claude/hooks/{cfn-post-edit.sh → deprecated/cfn-post-edit.sh} +0 -0
- /package/.claude/hooks/{cfn-pre-edit-backup.sh → deprecated/cfn-pre-edit-backup.sh} +0 -0
- /package/.claude/skills/cfn-local-ruvector-accelerator/{embeddings_manager.py → embeddings_manager.py.backup} +0 -0
- /package/{.ruvector → .claude/skills/cfn-local-ruvector-accelerator/index}/index.bin +0 -0
- /package/{.ruvector → .claude/skills/cfn-local-ruvector-accelerator/index}/metadata.json +0 -0
- /package/.claude/skills/cfn-local-ruvector-accelerator/{search_engine_v2.py → search_engine_v2.py.backup} +0 -0
- /package/.claude/skills/cfn-local-ruvector-accelerator/{sqlite_store.py → sqlite_store.py.backup} +0 -0
|
@@ -237,6 +237,61 @@ Claude Code auto-discovers MCP servers from:
|
|
|
237
237
|
|
|
238
238
|
To prevent auto-discovered servers from connecting, add them to `disabledMcpServers`.
|
|
239
239
|
|
|
240
|
+
## SKILL.md Best Practices
|
|
241
|
+
|
|
242
|
+
### Description Field is Primary Discovery
|
|
243
|
+
- Claude reads **only the `description` field** at startup to decide when to invoke skills
|
|
244
|
+
- Full SKILL.md content is loaded **only after** Claude decides the skill is relevant
|
|
245
|
+
- Description must answer: **What does it do?** + **When should it be used?**
|
|
246
|
+
|
|
247
|
+
### Effective Description Formula
|
|
248
|
+
```yaml
|
|
249
|
+
description: "<Capability>. Use when <condition 1>, <condition 2>, or <condition 3>."
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Good example:**
|
|
253
|
+
```yaml
|
|
254
|
+
description: "Extract text and tables from PDF files, fill forms, merge documents. Use when working with PDF files or when the user mentions PDFs, forms, or document extraction."
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**Bad examples:**
|
|
258
|
+
- `"Helps with documents"` - too vague
|
|
259
|
+
- `"Processes data"` - too generic
|
|
260
|
+
- Missing trigger conditions
|
|
261
|
+
|
|
262
|
+
### Required Frontmatter
|
|
263
|
+
```yaml
|
|
264
|
+
---
|
|
265
|
+
name: lowercase-skill-name # Max 64 chars, hyphens/lowercase only
|
|
266
|
+
description: What + when # Max 1024 chars
|
|
267
|
+
version: 1.0.0 # Optional but recommended
|
|
268
|
+
tags: [category, type] # For organization (not indexed by Claude)
|
|
269
|
+
---
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### Content Best Practices
|
|
273
|
+
- **Under 500 lines** in SKILL.md body
|
|
274
|
+
- Use **progressive disclosure** - detailed docs in separate files
|
|
275
|
+
- Include concrete **Quick Start** examples
|
|
276
|
+
- One level deep for reference files (no deep nesting)
|
|
277
|
+
|
|
278
|
+
### Anti-Patterns to Avoid
|
|
279
|
+
- Missing trigger conditions in description
|
|
280
|
+
- Verbose prose instead of blueprints
|
|
281
|
+
- Time-sensitive information
|
|
282
|
+
- Offering too many options without clear recommendation
|
|
283
|
+
- Inconsistent terminology
|
|
284
|
+
|
|
285
|
+
### Skill Analysis Checklist
|
|
286
|
+
When reviewing SKILL.md files, verify:
|
|
287
|
+
- [ ] Description includes both capability AND trigger conditions
|
|
288
|
+
- [ ] Uses "Use when..." pattern for discovery
|
|
289
|
+
- [ ] Under 500 lines in body
|
|
290
|
+
- [ ] Has YAML frontmatter with name, description
|
|
291
|
+
- [ ] Includes concrete Quick Start example
|
|
292
|
+
- [ ] No deep nesting of reference files
|
|
293
|
+
- [ ] Consistent terminology throughout
|
|
294
|
+
|
|
240
295
|
## Documentation URLs to Reference
|
|
241
296
|
|
|
242
297
|
Primary resources:
|
|
@@ -244,6 +299,7 @@ Primary resources:
|
|
|
244
299
|
- https://docs.claudecode.com/workflows
|
|
245
300
|
- https://docs.claudecode.com/tools
|
|
246
301
|
- https://docs.claudecode.com/best-practices
|
|
302
|
+
- https://docs.claudecode.com/skills (skill creation guide)
|
|
247
303
|
|
|
248
304
|
## Output Format
|
|
249
305
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cfn-docker-runtime
|
|
3
|
-
description: Docker container orchestration for CFN Loop - spawning, coordination, logging, wave execution
|
|
3
|
+
description: "Docker container orchestration for CFN Loop - spawning, coordination, logging, wave execution. Use when running CFN Loop agents in Docker containers, executing waves of parallel agents, coordinating containerized agents via Redis, or managing Docker-based agent lifecycle."
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
tags: [mega-skill, docker, containers, orchestration]
|
|
6
6
|
status: production
|
|
@@ -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
|