create-universal-ai-context 2.4.0 → 2.6.0-final
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/LICENSE +21 -21
- package/README.md +331 -294
- package/bin/create-ai-context.js +1507 -764
- package/lib/adapters/aider.js +131 -131
- package/lib/adapters/antigravity.js +205 -205
- package/lib/adapters/claude.js +397 -397
- package/lib/adapters/cline.js +125 -125
- package/lib/adapters/continue.js +138 -138
- package/lib/adapters/copilot.js +131 -131
- package/lib/adapters/index.js +78 -78
- package/lib/adapters/windsurf.js +138 -138
- package/lib/ai-context-generator.js +234 -234
- package/lib/ai-orchestrator.js +432 -432
- package/lib/call-tracer.js +444 -444
- package/lib/content-preservation.js +243 -243
- package/lib/cross-tool-sync/file-watcher.js +274 -274
- package/lib/cross-tool-sync/index.js +41 -40
- package/lib/cross-tool-sync/sync-manager.js +540 -512
- package/lib/cross-tool-sync/sync-service.js +297 -297
- package/lib/detector.js +726 -726
- package/lib/doc-discovery.js +741 -741
- package/lib/drift-checker.js +920 -920
- package/lib/environment-detector.js +239 -239
- package/lib/index.js +399 -399
- package/lib/install-hooks.js +82 -82
- package/lib/installer.js +419 -419
- package/lib/migrate.js +328 -328
- package/lib/placeholder.js +632 -632
- package/lib/prompts.js +341 -341
- package/lib/smart-merge.js +540 -540
- package/lib/spinner.js +60 -60
- package/lib/static-analyzer.js +729 -729
- package/lib/template-coordination.js +148 -148
- package/lib/template-populator.js +843 -843
- package/lib/template-renderer.js +392 -392
- package/lib/utils/fs-wrapper.js +79 -79
- package/lib/utils/path-utils.js +60 -60
- package/lib/validate.js +155 -155
- package/package.json +1 -1
- package/templates/AI_CONTEXT.md.template +245 -245
- package/templates/base/README.md +260 -257
- package/templates/base/RPI_WORKFLOW_PLAN.md +325 -320
- package/templates/base/agents/api-developer.md +76 -76
- package/templates/base/agents/context-engineer.md +525 -525
- package/templates/base/agents/core-architect.md +76 -76
- package/templates/base/agents/database-ops.md +76 -76
- package/templates/base/agents/deployment-ops.md +76 -76
- package/templates/base/agents/integration-hub.md +76 -76
- package/templates/base/analytics/README.md +114 -114
- package/templates/base/automation/config.json +58 -58
- package/templates/base/automation/generators/code-mapper.js +308 -308
- package/templates/base/automation/generators/index-builder.js +321 -321
- package/templates/base/automation/hooks/post-commit.sh +83 -83
- package/templates/base/automation/hooks/pre-commit.sh +103 -103
- package/templates/base/ci-templates/README.md +108 -108
- package/templates/base/ci-templates/github-actions/context-check.yml +144 -144
- package/templates/base/ci-templates/github-actions/validate-docs.yml +105 -105
- package/templates/base/commands/analytics.md +238 -238
- package/templates/base/commands/auto-sync.md +172 -172
- package/templates/base/commands/collab.md +194 -194
- package/templates/base/commands/context-optimize.md +226 -0
- package/templates/base/commands/help.md +485 -450
- package/templates/base/commands/rpi-implement.md +164 -115
- package/templates/base/commands/rpi-plan.md +147 -93
- package/templates/base/commands/rpi-research.md +145 -88
- package/templates/base/commands/session-resume.md +144 -144
- package/templates/base/commands/session-save.md +112 -112
- package/templates/base/commands/validate-all.md +77 -77
- package/templates/base/commands/verify-docs-current.md +86 -86
- package/templates/base/config/base.json +57 -57
- package/templates/base/config/environments/development.json +13 -13
- package/templates/base/config/environments/production.json +17 -17
- package/templates/base/config/environments/staging.json +13 -13
- package/templates/base/config/local.json.example +21 -21
- package/templates/base/context/.meta/generated-at.json +18 -18
- package/templates/base/context/ARCHITECTURE_SNAPSHOT.md +156 -156
- package/templates/base/context/CODE_TO_WORKFLOW_MAP.md +94 -94
- package/templates/base/context/FILE_OWNERSHIP.md +57 -57
- package/templates/base/context/INTEGRATION_POINTS.md +92 -92
- package/templates/base/context/KNOWN_GOTCHAS.md +195 -195
- package/templates/base/context/TESTING_MAP.md +95 -95
- package/templates/base/context/WORKFLOW_INDEX.md +129 -129
- package/templates/base/context/workflows/WORKFLOW_TEMPLATE.md +294 -294
- package/templates/base/indexes/agents/CAPABILITY_MATRIX.md +255 -255
- package/templates/base/indexes/agents/CATEGORY_INDEX.md +44 -44
- package/templates/base/indexes/code/CATEGORY_INDEX.md +38 -38
- package/templates/base/indexes/routing/CATEGORY_INDEX.md +39 -39
- package/templates/base/indexes/search/CATEGORY_INDEX.md +39 -39
- package/templates/base/indexes/workflows/CATEGORY_INDEX.md +38 -38
- package/templates/base/knowledge/README.md +98 -98
- package/templates/base/knowledge/sessions/README.md +88 -88
- package/templates/base/knowledge/sessions/TEMPLATE.md +150 -150
- package/templates/base/knowledge/shared/decisions/0001-adopt-context-engineering.md +144 -144
- package/templates/base/knowledge/shared/decisions/README.md +49 -49
- package/templates/base/knowledge/shared/decisions/TEMPLATE.md +123 -123
- package/templates/base/knowledge/shared/patterns/README.md +62 -62
- package/templates/base/knowledge/shared/patterns/TEMPLATE.md +120 -120
- package/templates/base/plans/PLAN_TEMPLATE.md +316 -250
- package/templates/base/research/RESEARCH_TEMPLATE.md +245 -153
- package/templates/base/schemas/agent.schema.json +141 -141
- package/templates/base/schemas/anchors.schema.json +54 -54
- package/templates/base/schemas/automation.schema.json +93 -93
- package/templates/base/schemas/command.schema.json +134 -134
- package/templates/base/schemas/hashes.schema.json +40 -40
- package/templates/base/schemas/manifest.schema.json +117 -117
- package/templates/base/schemas/plan.schema.json +136 -136
- package/templates/base/schemas/research.schema.json +115 -115
- package/templates/base/schemas/roles.schema.json +34 -34
- package/templates/base/schemas/session.schema.json +77 -77
- package/templates/base/schemas/settings.schema.json +244 -244
- package/templates/base/schemas/staleness.schema.json +53 -53
- package/templates/base/schemas/team-config.schema.json +42 -42
- package/templates/base/schemas/workflow.schema.json +126 -126
- package/templates/base/session/checkpoints/.gitkeep +2 -2
- package/templates/base/session/current/state.json +20 -20
- package/templates/base/session/history/.gitkeep +2 -2
- package/templates/base/settings.json +3 -3
- package/templates/base/standards/COMPATIBILITY.md +219 -219
- package/templates/base/standards/EXTENSION_GUIDELINES.md +280 -280
- package/templates/base/standards/QUALITY_CHECKLIST.md +211 -211
- package/templates/base/standards/README.md +66 -66
- package/templates/base/sync/anchors.json +6 -6
- package/templates/base/sync/hashes.json +6 -6
- package/templates/base/sync/staleness.json +10 -10
- package/templates/base/team/README.md +168 -168
- package/templates/base/team/config.json +79 -79
- package/templates/base/team/roles.json +145 -145
- package/templates/base/tools/bin/claude-context.js +151 -151
- package/templates/base/tools/lib/anchor-resolver.js +276 -276
- package/templates/base/tools/lib/config-loader.js +363 -363
- package/templates/base/tools/lib/detector.js +350 -350
- package/templates/base/tools/lib/diagnose.js +206 -206
- package/templates/base/tools/lib/drift-detector.js +373 -373
- package/templates/base/tools/lib/errors.js +199 -199
- package/templates/base/tools/lib/index.js +36 -36
- package/templates/base/tools/lib/init.js +192 -192
- package/templates/base/tools/lib/logger.js +230 -230
- package/templates/base/tools/lib/placeholder.js +201 -201
- package/templates/base/tools/lib/session-manager.js +354 -354
- package/templates/base/tools/lib/validate.js +521 -521
- package/templates/base/tools/package.json +49 -49
- package/templates/handlebars/aider-config.hbs +146 -80
- package/templates/handlebars/antigravity.hbs +377 -377
- package/templates/handlebars/claude.hbs +183 -183
- package/templates/handlebars/cline.hbs +62 -62
- package/templates/handlebars/continue-config.hbs +116 -116
- package/templates/handlebars/copilot.hbs +130 -130
- package/templates/handlebars/partials/gotcha-list.hbs +11 -11
- package/templates/handlebars/partials/header.hbs +3 -3
- package/templates/handlebars/partials/workflow-summary.hbs +16 -16
- package/templates/handlebars/windsurf-rules.hbs +69 -69
- package/templates/hooks/post-commit.hbs +28 -29
- package/templates/hooks/pre-commit.hbs +46 -46
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
# Claude Context Engineering - Post-Commit Hook
|
|
4
|
-
#
|
|
5
|
-
# Rebuilds indexes and updates tracking after successful commits.
|
|
6
|
-
# Install with: npx claude-context hooks install
|
|
7
|
-
#
|
|
8
|
-
|
|
9
|
-
# Colors for output
|
|
10
|
-
GREEN='\033[0;32m'
|
|
11
|
-
YELLOW='\033[1;33m'
|
|
12
|
-
NC='\033[0m' # No Color
|
|
13
|
-
|
|
14
|
-
# Get the repository root
|
|
15
|
-
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
16
|
-
CLAUDE_DIR="$REPO_ROOT/.claude"
|
|
17
|
-
CONFIG_FILE="$CLAUDE_DIR/automation/config.json"
|
|
18
|
-
|
|
19
|
-
# Check if claude context is set up
|
|
20
|
-
if [ ! -d "$CLAUDE_DIR" ]; then
|
|
21
|
-
exit 0 # No .claude directory, skip
|
|
22
|
-
fi
|
|
23
|
-
|
|
24
|
-
# Load config (if jq is available)
|
|
25
|
-
REBUILD_CODE_MAP=true
|
|
26
|
-
UPDATE_HASHES=true
|
|
27
|
-
|
|
28
|
-
if command -v jq &> /dev/null && [ -f "$CONFIG_FILE" ]; then
|
|
29
|
-
REBUILD_CODE_MAP=$(jq -r '.hooks.post_commit.rebuild_code_map // true' "$CONFIG_FILE")
|
|
30
|
-
UPDATE_HASHES=$(jq -r '.hooks.post_commit.update_hashes // true' "$CONFIG_FILE")
|
|
31
|
-
fi
|
|
32
|
-
|
|
33
|
-
# Check if npx is available
|
|
34
|
-
if ! command -v npx &> /dev/null; then
|
|
35
|
-
exit 0
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
# Get list of files that were committed
|
|
39
|
-
COMMITTED_FILES=$(git diff-tree --no-commit-id --name-only -r HEAD)
|
|
40
|
-
|
|
41
|
-
# Check if any code files were committed
|
|
42
|
-
CODE_COMMITTED=false
|
|
43
|
-
for file in $COMMITTED_FILES; do
|
|
44
|
-
case "$file" in
|
|
45
|
-
*.py|*.js|*.ts|*.jsx|*.tsx|*.go|*.rs|*.rb|*.java)
|
|
46
|
-
CODE_COMMITTED=true
|
|
47
|
-
break
|
|
48
|
-
;;
|
|
49
|
-
esac
|
|
50
|
-
done
|
|
51
|
-
|
|
52
|
-
# Skip if no code files
|
|
53
|
-
if [ "$CODE_COMMITTED" = false ]; then
|
|
54
|
-
exit 0
|
|
55
|
-
fi
|
|
56
|
-
|
|
57
|
-
echo -e "${GREEN}Claude Context: Post-commit update${NC}"
|
|
58
|
-
|
|
59
|
-
# Update file hashes (async, don't block)
|
|
60
|
-
if [ "$UPDATE_HASHES" = "true" ]; then
|
|
61
|
-
# Update hashes for committed files
|
|
62
|
-
for file in $COMMITTED_FILES; do
|
|
63
|
-
if [ -f "$file" ]; then
|
|
64
|
-
HASH=$(git hash-object "$file" 2>/dev/null)
|
|
65
|
-
if [ -n "$HASH" ]; then
|
|
66
|
-
# Write to hashes file (simple append for now)
|
|
67
|
-
echo " Updated hash: $file"
|
|
68
|
-
fi
|
|
69
|
-
fi
|
|
70
|
-
done
|
|
71
|
-
fi
|
|
72
|
-
|
|
73
|
-
# Rebuild code map (optional, can be slow)
|
|
74
|
-
if [ "$REBUILD_CODE_MAP" = "true" ]; then
|
|
75
|
-
if [ -f "$CLAUDE_DIR/automation/generators/code-mapper.js" ]; then
|
|
76
|
-
# Run in background to not slow down commits
|
|
77
|
-
(node "$CLAUDE_DIR/automation/generators/code-mapper.js" --quiet &> /dev/null &)
|
|
78
|
-
echo -e " ${YELLOW}Code map rebuild queued (background)${NC}"
|
|
79
|
-
fi
|
|
80
|
-
fi
|
|
81
|
-
|
|
82
|
-
echo -e "${GREEN}Post-commit update complete.${NC}"
|
|
83
|
-
exit 0
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Claude Context Engineering - Post-Commit Hook
|
|
4
|
+
#
|
|
5
|
+
# Rebuilds indexes and updates tracking after successful commits.
|
|
6
|
+
# Install with: npx claude-context hooks install
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
# Colors for output
|
|
10
|
+
GREEN='\033[0;32m'
|
|
11
|
+
YELLOW='\033[1;33m'
|
|
12
|
+
NC='\033[0m' # No Color
|
|
13
|
+
|
|
14
|
+
# Get the repository root
|
|
15
|
+
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
16
|
+
CLAUDE_DIR="$REPO_ROOT/.claude"
|
|
17
|
+
CONFIG_FILE="$CLAUDE_DIR/automation/config.json"
|
|
18
|
+
|
|
19
|
+
# Check if claude context is set up
|
|
20
|
+
if [ ! -d "$CLAUDE_DIR" ]; then
|
|
21
|
+
exit 0 # No .claude directory, skip
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Load config (if jq is available)
|
|
25
|
+
REBUILD_CODE_MAP=true
|
|
26
|
+
UPDATE_HASHES=true
|
|
27
|
+
|
|
28
|
+
if command -v jq &> /dev/null && [ -f "$CONFIG_FILE" ]; then
|
|
29
|
+
REBUILD_CODE_MAP=$(jq -r '.hooks.post_commit.rebuild_code_map // true' "$CONFIG_FILE")
|
|
30
|
+
UPDATE_HASHES=$(jq -r '.hooks.post_commit.update_hashes // true' "$CONFIG_FILE")
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# Check if npx is available
|
|
34
|
+
if ! command -v npx &> /dev/null; then
|
|
35
|
+
exit 0
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# Get list of files that were committed
|
|
39
|
+
COMMITTED_FILES=$(git diff-tree --no-commit-id --name-only -r HEAD)
|
|
40
|
+
|
|
41
|
+
# Check if any code files were committed
|
|
42
|
+
CODE_COMMITTED=false
|
|
43
|
+
for file in $COMMITTED_FILES; do
|
|
44
|
+
case "$file" in
|
|
45
|
+
*.py|*.js|*.ts|*.jsx|*.tsx|*.go|*.rs|*.rb|*.java)
|
|
46
|
+
CODE_COMMITTED=true
|
|
47
|
+
break
|
|
48
|
+
;;
|
|
49
|
+
esac
|
|
50
|
+
done
|
|
51
|
+
|
|
52
|
+
# Skip if no code files
|
|
53
|
+
if [ "$CODE_COMMITTED" = false ]; then
|
|
54
|
+
exit 0
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
echo -e "${GREEN}Claude Context: Post-commit update${NC}"
|
|
58
|
+
|
|
59
|
+
# Update file hashes (async, don't block)
|
|
60
|
+
if [ "$UPDATE_HASHES" = "true" ]; then
|
|
61
|
+
# Update hashes for committed files
|
|
62
|
+
for file in $COMMITTED_FILES; do
|
|
63
|
+
if [ -f "$file" ]; then
|
|
64
|
+
HASH=$(git hash-object "$file" 2>/dev/null)
|
|
65
|
+
if [ -n "$HASH" ]; then
|
|
66
|
+
# Write to hashes file (simple append for now)
|
|
67
|
+
echo " Updated hash: $file"
|
|
68
|
+
fi
|
|
69
|
+
fi
|
|
70
|
+
done
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# Rebuild code map (optional, can be slow)
|
|
74
|
+
if [ "$REBUILD_CODE_MAP" = "true" ]; then
|
|
75
|
+
if [ -f "$CLAUDE_DIR/automation/generators/code-mapper.js" ]; then
|
|
76
|
+
# Run in background to not slow down commits
|
|
77
|
+
(node "$CLAUDE_DIR/automation/generators/code-mapper.js" --quiet &> /dev/null &)
|
|
78
|
+
echo -e " ${YELLOW}Code map rebuild queued (background)${NC}"
|
|
79
|
+
fi
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
echo -e "${GREEN}Post-commit update complete.${NC}"
|
|
83
|
+
exit 0
|
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
# Claude Context Engineering - Pre-Commit Hook
|
|
4
|
-
#
|
|
5
|
-
# Validates documentation synchronization before allowing commits.
|
|
6
|
-
# Install with: npx claude-context hooks install
|
|
7
|
-
#
|
|
8
|
-
|
|
9
|
-
# Colors for output
|
|
10
|
-
RED='\033[0;31m'
|
|
11
|
-
YELLOW='\033[1;33m'
|
|
12
|
-
GREEN='\033[0;32m'
|
|
13
|
-
NC='\033[0m' # No Color
|
|
14
|
-
|
|
15
|
-
# Get the repository root
|
|
16
|
-
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
17
|
-
CLAUDE_DIR="$REPO_ROOT/.claude"
|
|
18
|
-
CONFIG_FILE="$CLAUDE_DIR/automation/config.json"
|
|
19
|
-
|
|
20
|
-
# Check if claude context is set up
|
|
21
|
-
if [ ! -d "$CLAUDE_DIR" ]; then
|
|
22
|
-
exit 0 # No .claude directory, skip checks
|
|
23
|
-
fi
|
|
24
|
-
|
|
25
|
-
# Load config (if jq is available)
|
|
26
|
-
BLOCK_ON_STALE=false
|
|
27
|
-
CHECK_DRIFT=true
|
|
28
|
-
|
|
29
|
-
if command -v jq &> /dev/null && [ -f "$CONFIG_FILE" ]; then
|
|
30
|
-
BLOCK_ON_STALE=$(jq -r '.hooks.pre_commit.block_on_stale // false' "$CONFIG_FILE")
|
|
31
|
-
CHECK_DRIFT=$(jq -r '.hooks.pre_commit.check_drift // true' "$CONFIG_FILE")
|
|
32
|
-
fi
|
|
33
|
-
|
|
34
|
-
# Skip if drift check is disabled
|
|
35
|
-
if [ "$CHECK_DRIFT" != "true" ]; then
|
|
36
|
-
exit 0
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
|
-
echo -e "${GREEN}Claude Context: Pre-commit validation${NC}"
|
|
40
|
-
|
|
41
|
-
# Get list of staged files
|
|
42
|
-
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACMR)
|
|
43
|
-
|
|
44
|
-
# Check if any code files are being committed
|
|
45
|
-
CODE_FILES=""
|
|
46
|
-
for file in $STAGED_FILES; do
|
|
47
|
-
case "$file" in
|
|
48
|
-
*.py|*.js|*.ts|*.jsx|*.tsx|*.go|*.rs|*.rb|*.java)
|
|
49
|
-
CODE_FILES="$CODE_FILES $file"
|
|
50
|
-
;;
|
|
51
|
-
esac
|
|
52
|
-
done
|
|
53
|
-
|
|
54
|
-
# If no code files, skip checks
|
|
55
|
-
if [ -z "$CODE_FILES" ]; then
|
|
56
|
-
echo -e "${GREEN}No code files in commit, skipping drift check.${NC}"
|
|
57
|
-
exit 0
|
|
58
|
-
fi
|
|
59
|
-
|
|
60
|
-
# Check if npx is available
|
|
61
|
-
if ! command -v npx &> /dev/null; then
|
|
62
|
-
echo -e "${YELLOW}Warning: npx not found, skipping documentation drift check.${NC}"
|
|
63
|
-
exit 0
|
|
64
|
-
fi
|
|
65
|
-
|
|
66
|
-
# Run drift check
|
|
67
|
-
DRIFT_FOUND=false
|
|
68
|
-
DRIFT_OUTPUT=""
|
|
69
|
-
|
|
70
|
-
for file in $CODE_FILES; do
|
|
71
|
-
# Check if this file is referenced in any workflow
|
|
72
|
-
if grep -r "$file" "$CLAUDE_DIR/context/workflows" &> /dev/null; then
|
|
73
|
-
echo -e " Checking: $file"
|
|
74
|
-
|
|
75
|
-
# Simple hash-based check
|
|
76
|
-
CURRENT_HASH=$(git hash-object "$file" 2>/dev/null)
|
|
77
|
-
STAGED_HASH=$(git ls-files -s "$file" 2>/dev/null | awk '{print $2}')
|
|
78
|
-
|
|
79
|
-
if [ -n "$STAGED_HASH" ]; then
|
|
80
|
-
DRIFT_OUTPUT="$DRIFT_OUTPUT\n - $file (modified, may affect documentation)"
|
|
81
|
-
DRIFT_FOUND=true
|
|
82
|
-
fi
|
|
83
|
-
fi
|
|
84
|
-
done
|
|
85
|
-
|
|
86
|
-
# Report findings
|
|
87
|
-
if [ "$DRIFT_FOUND" = true ]; then
|
|
88
|
-
echo -e "${YELLOW}Documentation may need updating:${NC}"
|
|
89
|
-
echo -e "$DRIFT_OUTPUT"
|
|
90
|
-
echo ""
|
|
91
|
-
|
|
92
|
-
if [ "$BLOCK_ON_STALE" = true ]; then
|
|
93
|
-
echo -e "${RED}Commit blocked: Documentation drift detected.${NC}"
|
|
94
|
-
echo -e "Run ${GREEN}/verify-docs-current${NC} or ${GREEN}npx claude-context sync --check${NC}"
|
|
95
|
-
echo -e "To skip this check: git commit --no-verify"
|
|
96
|
-
exit 1
|
|
97
|
-
else
|
|
98
|
-
echo -e "${YELLOW}Warning: Consider running /verify-docs-current to check documentation.${NC}"
|
|
99
|
-
fi
|
|
100
|
-
fi
|
|
101
|
-
|
|
102
|
-
echo -e "${GREEN}Pre-commit check complete.${NC}"
|
|
103
|
-
exit 0
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Claude Context Engineering - Pre-Commit Hook
|
|
4
|
+
#
|
|
5
|
+
# Validates documentation synchronization before allowing commits.
|
|
6
|
+
# Install with: npx claude-context hooks install
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
# Colors for output
|
|
10
|
+
RED='\033[0;31m'
|
|
11
|
+
YELLOW='\033[1;33m'
|
|
12
|
+
GREEN='\033[0;32m'
|
|
13
|
+
NC='\033[0m' # No Color
|
|
14
|
+
|
|
15
|
+
# Get the repository root
|
|
16
|
+
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
17
|
+
CLAUDE_DIR="$REPO_ROOT/.claude"
|
|
18
|
+
CONFIG_FILE="$CLAUDE_DIR/automation/config.json"
|
|
19
|
+
|
|
20
|
+
# Check if claude context is set up
|
|
21
|
+
if [ ! -d "$CLAUDE_DIR" ]; then
|
|
22
|
+
exit 0 # No .claude directory, skip checks
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
# Load config (if jq is available)
|
|
26
|
+
BLOCK_ON_STALE=false
|
|
27
|
+
CHECK_DRIFT=true
|
|
28
|
+
|
|
29
|
+
if command -v jq &> /dev/null && [ -f "$CONFIG_FILE" ]; then
|
|
30
|
+
BLOCK_ON_STALE=$(jq -r '.hooks.pre_commit.block_on_stale // false' "$CONFIG_FILE")
|
|
31
|
+
CHECK_DRIFT=$(jq -r '.hooks.pre_commit.check_drift // true' "$CONFIG_FILE")
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
# Skip if drift check is disabled
|
|
35
|
+
if [ "$CHECK_DRIFT" != "true" ]; then
|
|
36
|
+
exit 0
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
echo -e "${GREEN}Claude Context: Pre-commit validation${NC}"
|
|
40
|
+
|
|
41
|
+
# Get list of staged files
|
|
42
|
+
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACMR)
|
|
43
|
+
|
|
44
|
+
# Check if any code files are being committed
|
|
45
|
+
CODE_FILES=""
|
|
46
|
+
for file in $STAGED_FILES; do
|
|
47
|
+
case "$file" in
|
|
48
|
+
*.py|*.js|*.ts|*.jsx|*.tsx|*.go|*.rs|*.rb|*.java)
|
|
49
|
+
CODE_FILES="$CODE_FILES $file"
|
|
50
|
+
;;
|
|
51
|
+
esac
|
|
52
|
+
done
|
|
53
|
+
|
|
54
|
+
# If no code files, skip checks
|
|
55
|
+
if [ -z "$CODE_FILES" ]; then
|
|
56
|
+
echo -e "${GREEN}No code files in commit, skipping drift check.${NC}"
|
|
57
|
+
exit 0
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
# Check if npx is available
|
|
61
|
+
if ! command -v npx &> /dev/null; then
|
|
62
|
+
echo -e "${YELLOW}Warning: npx not found, skipping documentation drift check.${NC}"
|
|
63
|
+
exit 0
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# Run drift check
|
|
67
|
+
DRIFT_FOUND=false
|
|
68
|
+
DRIFT_OUTPUT=""
|
|
69
|
+
|
|
70
|
+
for file in $CODE_FILES; do
|
|
71
|
+
# Check if this file is referenced in any workflow
|
|
72
|
+
if grep -r "$file" "$CLAUDE_DIR/context/workflows" &> /dev/null; then
|
|
73
|
+
echo -e " Checking: $file"
|
|
74
|
+
|
|
75
|
+
# Simple hash-based check
|
|
76
|
+
CURRENT_HASH=$(git hash-object "$file" 2>/dev/null)
|
|
77
|
+
STAGED_HASH=$(git ls-files -s "$file" 2>/dev/null | awk '{print $2}')
|
|
78
|
+
|
|
79
|
+
if [ -n "$STAGED_HASH" ]; then
|
|
80
|
+
DRIFT_OUTPUT="$DRIFT_OUTPUT\n - $file (modified, may affect documentation)"
|
|
81
|
+
DRIFT_FOUND=true
|
|
82
|
+
fi
|
|
83
|
+
fi
|
|
84
|
+
done
|
|
85
|
+
|
|
86
|
+
# Report findings
|
|
87
|
+
if [ "$DRIFT_FOUND" = true ]; then
|
|
88
|
+
echo -e "${YELLOW}Documentation may need updating:${NC}"
|
|
89
|
+
echo -e "$DRIFT_OUTPUT"
|
|
90
|
+
echo ""
|
|
91
|
+
|
|
92
|
+
if [ "$BLOCK_ON_STALE" = true ]; then
|
|
93
|
+
echo -e "${RED}Commit blocked: Documentation drift detected.${NC}"
|
|
94
|
+
echo -e "Run ${GREEN}/verify-docs-current${NC} or ${GREEN}npx claude-context sync --check${NC}"
|
|
95
|
+
echo -e "To skip this check: git commit --no-verify"
|
|
96
|
+
exit 1
|
|
97
|
+
else
|
|
98
|
+
echo -e "${YELLOW}Warning: Consider running /verify-docs-current to check documentation.${NC}"
|
|
99
|
+
fi
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
echo -e "${GREEN}Pre-commit check complete.${NC}"
|
|
103
|
+
exit 0
|
|
@@ -1,108 +1,108 @@
|
|
|
1
|
-
# CI/CD Templates
|
|
2
|
-
|
|
3
|
-
Pre-built CI/CD workflows for Claude Context Engineering validation.
|
|
4
|
-
|
|
5
|
-
## Available Templates
|
|
6
|
-
|
|
7
|
-
### GitHub Actions
|
|
8
|
-
|
|
9
|
-
| Template | Purpose | Trigger |
|
|
10
|
-
|----------|---------|---------|
|
|
11
|
-
| `validate-docs.yml` | Validate documentation on PRs | Pull requests |
|
|
12
|
-
| `context-check.yml` | Monitor context budget health | Push, weekly, manual |
|
|
13
|
-
|
|
14
|
-
## Installation
|
|
15
|
-
|
|
16
|
-
### GitHub Actions
|
|
17
|
-
|
|
18
|
-
Copy templates to your `.github/workflows/` directory:
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
# From project root
|
|
22
|
-
mkdir -p .github/workflows
|
|
23
|
-
cp .ai-context/ci-templates/github-actions/*.yml .github/workflows/
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### Prerequisites
|
|
27
|
-
|
|
28
|
-
1. Node.js 18+ available in CI environment
|
|
29
|
-
2. `.ai-context/tools/` dependencies installed:
|
|
30
|
-
```bash
|
|
31
|
-
cd .ai-context/tools && npm ci
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## Customization
|
|
35
|
-
|
|
36
|
-
### Adjust Validation Strictness
|
|
37
|
-
|
|
38
|
-
Edit the workflow files to change thresholds:
|
|
39
|
-
|
|
40
|
-
```yaml
|
|
41
|
-
# In validate-docs.yml
|
|
42
|
-
- name: Check Line Number Accuracy
|
|
43
|
-
run: |
|
|
44
|
-
npx claude-context validate --lines --threshold 70 # Stricter
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### Add Notifications
|
|
48
|
-
|
|
49
|
-
Add Slack/Discord notifications on failure:
|
|
50
|
-
|
|
51
|
-
```yaml
|
|
52
|
-
- name: Notify on Failure
|
|
53
|
-
if: failure()
|
|
54
|
-
uses: 8398a7/action-slack@v3
|
|
55
|
-
with:
|
|
56
|
-
status: ${{ job.status }}
|
|
57
|
-
webhook_url: ${{ secrets.SLACK_WEBHOOK }}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### Skip on Specific Files
|
|
61
|
-
|
|
62
|
-
Modify the `paths` filter:
|
|
63
|
-
|
|
64
|
-
```yaml
|
|
65
|
-
on:
|
|
66
|
-
pull_request:
|
|
67
|
-
paths:
|
|
68
|
-
- '.ai-context/**'
|
|
69
|
-
- 'src/**'
|
|
70
|
-
- '!src/**/*.test.js' # Exclude test files
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Workflow Outputs
|
|
74
|
-
|
|
75
|
-
### validate-docs.yml
|
|
76
|
-
|
|
77
|
-
- **validation-report.md** - Detailed validation results
|
|
78
|
-
- PR comment on failure with specific issues
|
|
79
|
-
|
|
80
|
-
### context-check.yml
|
|
81
|
-
|
|
82
|
-
- **metrics.json** - Documentation metrics
|
|
83
|
-
- **diagnostics.txt** - System diagnostics
|
|
84
|
-
- **validation.txt** - Full validation output
|
|
85
|
-
- Auto-creates issue on weekly failure
|
|
86
|
-
|
|
87
|
-
## Troubleshooting
|
|
88
|
-
|
|
89
|
-
### "CLI tools not found"
|
|
90
|
-
|
|
91
|
-
Ensure tools are installed:
|
|
92
|
-
```bash
|
|
93
|
-
cd .ai-context/tools && npm ci
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### "Validation always fails on line numbers"
|
|
97
|
-
|
|
98
|
-
Line number drift is expected. Adjust threshold:
|
|
99
|
-
```yaml
|
|
100
|
-
--threshold 50 # More lenient
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
### "Context budget exceeded"
|
|
104
|
-
|
|
105
|
-
Review documentation and consider:
|
|
106
|
-
1. Splitting large workflow files
|
|
107
|
-
2. Moving rarely-used content to separate files
|
|
108
|
-
3. Compacting verbose sections
|
|
1
|
+
# CI/CD Templates
|
|
2
|
+
|
|
3
|
+
Pre-built CI/CD workflows for Claude Context Engineering validation.
|
|
4
|
+
|
|
5
|
+
## Available Templates
|
|
6
|
+
|
|
7
|
+
### GitHub Actions
|
|
8
|
+
|
|
9
|
+
| Template | Purpose | Trigger |
|
|
10
|
+
|----------|---------|---------|
|
|
11
|
+
| `validate-docs.yml` | Validate documentation on PRs | Pull requests |
|
|
12
|
+
| `context-check.yml` | Monitor context budget health | Push, weekly, manual |
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
### GitHub Actions
|
|
17
|
+
|
|
18
|
+
Copy templates to your `.github/workflows/` directory:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# From project root
|
|
22
|
+
mkdir -p .github/workflows
|
|
23
|
+
cp .ai-context/ci-templates/github-actions/*.yml .github/workflows/
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Prerequisites
|
|
27
|
+
|
|
28
|
+
1. Node.js 18+ available in CI environment
|
|
29
|
+
2. `.ai-context/tools/` dependencies installed:
|
|
30
|
+
```bash
|
|
31
|
+
cd .ai-context/tools && npm ci
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Customization
|
|
35
|
+
|
|
36
|
+
### Adjust Validation Strictness
|
|
37
|
+
|
|
38
|
+
Edit the workflow files to change thresholds:
|
|
39
|
+
|
|
40
|
+
```yaml
|
|
41
|
+
# In validate-docs.yml
|
|
42
|
+
- name: Check Line Number Accuracy
|
|
43
|
+
run: |
|
|
44
|
+
npx claude-context validate --lines --threshold 70 # Stricter
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Add Notifications
|
|
48
|
+
|
|
49
|
+
Add Slack/Discord notifications on failure:
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
- name: Notify on Failure
|
|
53
|
+
if: failure()
|
|
54
|
+
uses: 8398a7/action-slack@v3
|
|
55
|
+
with:
|
|
56
|
+
status: ${{ job.status }}
|
|
57
|
+
webhook_url: ${{ secrets.SLACK_WEBHOOK }}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Skip on Specific Files
|
|
61
|
+
|
|
62
|
+
Modify the `paths` filter:
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
on:
|
|
66
|
+
pull_request:
|
|
67
|
+
paths:
|
|
68
|
+
- '.ai-context/**'
|
|
69
|
+
- 'src/**'
|
|
70
|
+
- '!src/**/*.test.js' # Exclude test files
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Workflow Outputs
|
|
74
|
+
|
|
75
|
+
### validate-docs.yml
|
|
76
|
+
|
|
77
|
+
- **validation-report.md** - Detailed validation results
|
|
78
|
+
- PR comment on failure with specific issues
|
|
79
|
+
|
|
80
|
+
### context-check.yml
|
|
81
|
+
|
|
82
|
+
- **metrics.json** - Documentation metrics
|
|
83
|
+
- **diagnostics.txt** - System diagnostics
|
|
84
|
+
- **validation.txt** - Full validation output
|
|
85
|
+
- Auto-creates issue on weekly failure
|
|
86
|
+
|
|
87
|
+
## Troubleshooting
|
|
88
|
+
|
|
89
|
+
### "CLI tools not found"
|
|
90
|
+
|
|
91
|
+
Ensure tools are installed:
|
|
92
|
+
```bash
|
|
93
|
+
cd .ai-context/tools && npm ci
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### "Validation always fails on line numbers"
|
|
97
|
+
|
|
98
|
+
Line number drift is expected. Adjust threshold:
|
|
99
|
+
```yaml
|
|
100
|
+
--threshold 50 # More lenient
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### "Context budget exceeded"
|
|
104
|
+
|
|
105
|
+
Review documentation and consider:
|
|
106
|
+
1. Splitting large workflow files
|
|
107
|
+
2. Moving rarely-used content to separate files
|
|
108
|
+
3. Compacting verbose sections
|