create-universal-ai-context 2.0.0
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 -0
- package/README.md +171 -0
- package/bin/create-ai-context.js +337 -0
- package/lib/adapters/antigravity.js +160 -0
- package/lib/adapters/claude.js +122 -0
- package/lib/adapters/cline.js +111 -0
- package/lib/adapters/copilot.js +117 -0
- package/lib/adapters/index.js +69 -0
- package/lib/ai-context-generator.js +234 -0
- package/lib/ai-orchestrator.js +431 -0
- package/lib/call-tracer.js +444 -0
- package/lib/detector.js +726 -0
- package/lib/environment-detector.js +239 -0
- package/lib/index.js +310 -0
- package/lib/installer.js +418 -0
- package/lib/migrate.js +319 -0
- package/lib/placeholder.js +541 -0
- package/lib/prompts.js +287 -0
- package/lib/spinner.js +60 -0
- package/lib/static-analyzer.js +729 -0
- package/lib/template-populator.js +843 -0
- package/lib/template-renderer.js +382 -0
- package/lib/validate.js +155 -0
- package/package.json +70 -0
- package/templates/AI_CONTEXT.md.template +245 -0
- package/templates/base/README.md +257 -0
- package/templates/base/RPI_WORKFLOW_PLAN.md +320 -0
- package/templates/base/agents/api-developer.md +76 -0
- package/templates/base/agents/context-engineer.md +525 -0
- package/templates/base/agents/core-architect.md +76 -0
- package/templates/base/agents/database-ops.md +76 -0
- package/templates/base/agents/deployment-ops.md +76 -0
- package/templates/base/agents/integration-hub.md +76 -0
- package/templates/base/analytics/README.md +114 -0
- package/templates/base/automation/config.json +58 -0
- package/templates/base/automation/generators/code-mapper.js +308 -0
- package/templates/base/automation/generators/index-builder.js +321 -0
- package/templates/base/automation/hooks/post-commit.sh +83 -0
- package/templates/base/automation/hooks/pre-commit.sh +103 -0
- package/templates/base/ci-templates/README.md +108 -0
- package/templates/base/ci-templates/github-actions/context-check.yml +144 -0
- package/templates/base/ci-templates/github-actions/validate-docs.yml +105 -0
- package/templates/base/commands/analytics.md +238 -0
- package/templates/base/commands/auto-sync.md +172 -0
- package/templates/base/commands/collab.md +194 -0
- package/templates/base/commands/help.md +450 -0
- package/templates/base/commands/rpi-implement.md +115 -0
- package/templates/base/commands/rpi-plan.md +93 -0
- package/templates/base/commands/rpi-research.md +88 -0
- package/templates/base/commands/session-resume.md +144 -0
- package/templates/base/commands/session-save.md +112 -0
- package/templates/base/commands/validate-all.md +77 -0
- package/templates/base/commands/verify-docs-current.md +86 -0
- package/templates/base/config/base.json +57 -0
- package/templates/base/config/environments/development.json +13 -0
- package/templates/base/config/environments/production.json +17 -0
- package/templates/base/config/environments/staging.json +13 -0
- package/templates/base/config/local.json.example +21 -0
- package/templates/base/context/.meta/generated-at.json +18 -0
- package/templates/base/context/ARCHITECTURE_SNAPSHOT.md +156 -0
- package/templates/base/context/CODE_TO_WORKFLOW_MAP.md +94 -0
- package/templates/base/context/FILE_OWNERSHIP.md +57 -0
- package/templates/base/context/INTEGRATION_POINTS.md +92 -0
- package/templates/base/context/KNOWN_GOTCHAS.md +195 -0
- package/templates/base/context/TESTING_MAP.md +95 -0
- package/templates/base/context/WORKFLOW_INDEX.md +129 -0
- package/templates/base/context/workflows/WORKFLOW_TEMPLATE.md +294 -0
- package/templates/base/indexes/agents/CAPABILITY_MATRIX.md +255 -0
- package/templates/base/indexes/agents/CATEGORY_INDEX.md +44 -0
- package/templates/base/indexes/code/CATEGORY_INDEX.md +38 -0
- package/templates/base/indexes/routing/CATEGORY_INDEX.md +39 -0
- package/templates/base/indexes/search/CATEGORY_INDEX.md +39 -0
- package/templates/base/indexes/workflows/CATEGORY_INDEX.md +38 -0
- package/templates/base/knowledge/README.md +98 -0
- package/templates/base/knowledge/sessions/README.md +88 -0
- package/templates/base/knowledge/sessions/TEMPLATE.md +150 -0
- package/templates/base/knowledge/shared/decisions/0001-adopt-context-engineering.md +144 -0
- package/templates/base/knowledge/shared/decisions/README.md +49 -0
- package/templates/base/knowledge/shared/decisions/TEMPLATE.md +123 -0
- package/templates/base/knowledge/shared/patterns/README.md +62 -0
- package/templates/base/knowledge/shared/patterns/TEMPLATE.md +120 -0
- package/templates/base/plans/PLAN_TEMPLATE.md +250 -0
- package/templates/base/plans/active/.gitkeep +0 -0
- package/templates/base/plans/completed/.gitkeep +0 -0
- package/templates/base/research/RESEARCH_TEMPLATE.md +153 -0
- package/templates/base/research/active/.gitkeep +0 -0
- package/templates/base/research/completed/.gitkeep +0 -0
- package/templates/base/schemas/agent.schema.json +141 -0
- package/templates/base/schemas/anchors.schema.json +54 -0
- package/templates/base/schemas/automation.schema.json +93 -0
- package/templates/base/schemas/command.schema.json +134 -0
- package/templates/base/schemas/hashes.schema.json +40 -0
- package/templates/base/schemas/manifest.schema.json +117 -0
- package/templates/base/schemas/plan.schema.json +136 -0
- package/templates/base/schemas/research.schema.json +115 -0
- package/templates/base/schemas/roles.schema.json +34 -0
- package/templates/base/schemas/session.schema.json +77 -0
- package/templates/base/schemas/settings.schema.json +244 -0
- package/templates/base/schemas/staleness.schema.json +53 -0
- package/templates/base/schemas/team-config.schema.json +42 -0
- package/templates/base/schemas/workflow.schema.json +126 -0
- package/templates/base/session/checkpoints/.gitkeep +2 -0
- package/templates/base/session/current/state.json +20 -0
- package/templates/base/session/history/.gitkeep +2 -0
- package/templates/base/settings.json +3 -0
- package/templates/base/standards/COMPATIBILITY.md +219 -0
- package/templates/base/standards/EXTENSION_GUIDELINES.md +280 -0
- package/templates/base/standards/QUALITY_CHECKLIST.md +211 -0
- package/templates/base/standards/README.md +66 -0
- package/templates/base/sync/anchors.json +6 -0
- package/templates/base/sync/hashes.json +6 -0
- package/templates/base/sync/staleness.json +10 -0
- package/templates/base/team/README.md +168 -0
- package/templates/base/team/config.json +79 -0
- package/templates/base/team/roles.json +145 -0
- package/templates/base/tools/bin/claude-context.js +151 -0
- package/templates/base/tools/lib/anchor-resolver.js +276 -0
- package/templates/base/tools/lib/config-loader.js +363 -0
- package/templates/base/tools/lib/detector.js +350 -0
- package/templates/base/tools/lib/diagnose.js +206 -0
- package/templates/base/tools/lib/drift-detector.js +373 -0
- package/templates/base/tools/lib/errors.js +199 -0
- package/templates/base/tools/lib/index.js +36 -0
- package/templates/base/tools/lib/init.js +192 -0
- package/templates/base/tools/lib/logger.js +230 -0
- package/templates/base/tools/lib/placeholder.js +201 -0
- package/templates/base/tools/lib/session-manager.js +354 -0
- package/templates/base/tools/lib/validate.js +521 -0
- package/templates/base/tools/package.json +49 -0
- package/templates/handlebars/antigravity.hbs +337 -0
- package/templates/handlebars/claude.hbs +184 -0
- package/templates/handlebars/cline.hbs +63 -0
- package/templates/handlebars/copilot.hbs +131 -0
- package/templates/handlebars/partials/gotcha-list.hbs +11 -0
- package/templates/handlebars/partials/header.hbs +3 -0
- package/templates/handlebars/partials/workflow-summary.hbs +16 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deployment-ops
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
displayName: "Deployment Operations"
|
|
5
|
+
description: "CI/CD pipeline management, infrastructure as code, and deployment automation specialist"
|
|
6
|
+
category: "deployment"
|
|
7
|
+
complexity: "high"
|
|
8
|
+
context_budget: "~45K tokens"
|
|
9
|
+
capabilities:
|
|
10
|
+
- "ci-cd-pipeline-design"
|
|
11
|
+
- "infrastructure-as-code"
|
|
12
|
+
- "deployment-strategies"
|
|
13
|
+
- "environment-management"
|
|
14
|
+
- "monitoring-and-rollback"
|
|
15
|
+
workflows:
|
|
16
|
+
- "deployment"
|
|
17
|
+
- "infrastructure"
|
|
18
|
+
- "ci-cd"
|
|
19
|
+
commands: ["/rpi-research", "/rpi-plan", "/rpi-implement", "/validate-all"]
|
|
20
|
+
dependencies:
|
|
21
|
+
agents: []
|
|
22
|
+
commands: []
|
|
23
|
+
hooks:
|
|
24
|
+
pre_invoke: null
|
|
25
|
+
post_invoke: "verify-docs-current"
|
|
26
|
+
examples:
|
|
27
|
+
- invocation: '@deployment-ops "Document deployment pipeline"'
|
|
28
|
+
description: "Create CI/CD documentation"
|
|
29
|
+
- invocation: '@deployment-ops "Review infrastructure configuration"'
|
|
30
|
+
description: "Audit IaC files and configurations"
|
|
31
|
+
- invocation: '@deployment-ops "Plan rollback strategy"'
|
|
32
|
+
description: "Design safe rollback procedures"
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
# Deployment Ops Agent
|
|
36
|
+
|
|
37
|
+
**Purpose:** CI/CD pipeline management, infrastructure as code, and deployment automation
|
|
38
|
+
|
|
39
|
+
## Capabilities
|
|
40
|
+
|
|
41
|
+
This agent specializes in:
|
|
42
|
+
- **Pipeline design and optimization** - Creating and optimizing CI/CD pipelines
|
|
43
|
+
- **Infrastructure as code** - Managing cloud infrastructure with Terraform, CloudFormation, etc.
|
|
44
|
+
- **Deployment strategies** - Implementing blue-green, canary, rolling deployments
|
|
45
|
+
- **Environment management** - Managing development, staging, and production environments
|
|
46
|
+
- **Monitoring and rollback** - Implementing monitoring and automatic rollback strategies
|
|
47
|
+
|
|
48
|
+
## Usage
|
|
49
|
+
|
|
50
|
+
After template initialization, this agent will be generated based on your deployment requirements. It will:
|
|
51
|
+
1. Analyze your existing deployment pipelines
|
|
52
|
+
2. Create comprehensive deployment documentation
|
|
53
|
+
3. Identify potential reliability issues
|
|
54
|
+
4. Provide recommendations for deployment optimization
|
|
55
|
+
|
|
56
|
+
## Example Commands
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
@deployment-ops "Document deployment pipeline for [environment]"
|
|
60
|
+
@deployment-ops "Validate infrastructure as code for [service]"
|
|
61
|
+
@deployment-ops "Generate rollback strategy for [deployment]"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Integration Points
|
|
65
|
+
|
|
66
|
+
This agent integrates with:
|
|
67
|
+
- Workflow documentation
|
|
68
|
+
- API design (for deployment endpoints)
|
|
69
|
+
- Monitoring and alerting
|
|
70
|
+
- Security validation
|
|
71
|
+
|
|
72
|
+
## Validation
|
|
73
|
+
|
|
74
|
+
- Pipeline reliability checks
|
|
75
|
+
- Infrastructure consistency validation
|
|
76
|
+
- Deployment strategy verification
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: integration-hub
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
displayName: "Integration Hub"
|
|
5
|
+
description: "External service integration, third-party API management, and webhook handling specialist"
|
|
6
|
+
category: "integration"
|
|
7
|
+
complexity: "medium-high"
|
|
8
|
+
context_budget: "~40K tokens"
|
|
9
|
+
capabilities:
|
|
10
|
+
- "third-party-api-integration"
|
|
11
|
+
- "webhook-handling"
|
|
12
|
+
- "authentication-management"
|
|
13
|
+
- "rate-limiting-implementation"
|
|
14
|
+
- "error-handling-patterns"
|
|
15
|
+
workflows:
|
|
16
|
+
- "external-services"
|
|
17
|
+
- "webhooks"
|
|
18
|
+
- "integrations"
|
|
19
|
+
commands: ["/rpi-research", "/rpi-plan", "/rpi-implement"]
|
|
20
|
+
dependencies:
|
|
21
|
+
agents: []
|
|
22
|
+
commands: []
|
|
23
|
+
hooks:
|
|
24
|
+
pre_invoke: null
|
|
25
|
+
post_invoke: "verify-docs-current"
|
|
26
|
+
examples:
|
|
27
|
+
- invocation: '@integration-hub "Document integration with [service]"'
|
|
28
|
+
description: "Create integration documentation"
|
|
29
|
+
- invocation: '@integration-hub "Analyze webhook endpoints"'
|
|
30
|
+
description: "Review webhook security and reliability"
|
|
31
|
+
- invocation: '@integration-hub "Review authentication flows"'
|
|
32
|
+
description: "Audit third-party auth mechanisms"
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
# Integration Hub Agent
|
|
36
|
+
|
|
37
|
+
**Purpose:** External service integration, third-party API management, and webhook handling
|
|
38
|
+
|
|
39
|
+
## Capabilities
|
|
40
|
+
|
|
41
|
+
This agent specializes in:
|
|
42
|
+
- **Third-party API integration** - Connecting with external services and APIs
|
|
43
|
+
- **Webhook handling** - Managing incoming and outgoing webhooks
|
|
44
|
+
- **Authentication management** - Handling API keys, OAuth, and other auth mechanisms
|
|
45
|
+
- **Rate limiting and retries** - Implementing robust integration patterns
|
|
46
|
+
- **Error handling** - Managing integration failures and retries
|
|
47
|
+
|
|
48
|
+
## Usage
|
|
49
|
+
|
|
50
|
+
After template initialization, this agent will be generated based on your integration requirements. It will:
|
|
51
|
+
1. Analyze your existing external integrations
|
|
52
|
+
2. Create comprehensive integration documentation
|
|
53
|
+
3. Identify potential security vulnerabilities
|
|
54
|
+
4. Provide recommendations for integration optimization
|
|
55
|
+
|
|
56
|
+
## Example Commands
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
@integration-hub "Document integration with [service]"
|
|
60
|
+
@integration-hub "Validate webhook endpoints for [integration]"
|
|
61
|
+
@integration-hub "Generate authentication strategy for [service]"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Integration Points
|
|
65
|
+
|
|
66
|
+
This agent integrates with:
|
|
67
|
+
- Workflow documentation
|
|
68
|
+
- API design (for integration endpoints)
|
|
69
|
+
- Testing strategies
|
|
70
|
+
- Monitoring and alerting
|
|
71
|
+
|
|
72
|
+
## Validation
|
|
73
|
+
|
|
74
|
+
- Integration security checks
|
|
75
|
+
- Authentication mechanism validation
|
|
76
|
+
- Rate limiting configuration
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Analytics Data
|
|
2
|
+
|
|
3
|
+
Local storage for usage analytics and metrics.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This directory stores local analytics data collected during Claude Code sessions. All data is stored locally and never sent externally unless explicitly configured.
|
|
8
|
+
|
|
9
|
+
## Files
|
|
10
|
+
|
|
11
|
+
| File | Description |
|
|
12
|
+
|------|-------------|
|
|
13
|
+
| `sessions.json` | Session history and metadata |
|
|
14
|
+
| `commands.json` | Command usage statistics |
|
|
15
|
+
| `agents.json` | Agent invocation tracking |
|
|
16
|
+
| `context.json` | Context budget metrics over time |
|
|
17
|
+
| `exports/` | Exported analytics files |
|
|
18
|
+
|
|
19
|
+
## Data Schema
|
|
20
|
+
|
|
21
|
+
### sessions.json
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"sessions": [
|
|
26
|
+
{
|
|
27
|
+
"id": "uuid",
|
|
28
|
+
"started": "ISO-timestamp",
|
|
29
|
+
"ended": "ISO-timestamp",
|
|
30
|
+
"duration_minutes": 45,
|
|
31
|
+
"files_modified": 12,
|
|
32
|
+
"commits": 3,
|
|
33
|
+
"member_id": "dev-1"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### commands.json
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"commands": {
|
|
44
|
+
"/rpi-research": {
|
|
45
|
+
"count": 23,
|
|
46
|
+
"last_used": "ISO-timestamp",
|
|
47
|
+
"success_rate": 0.95,
|
|
48
|
+
"history": [
|
|
49
|
+
{
|
|
50
|
+
"timestamp": "ISO-timestamp",
|
|
51
|
+
"duration_seconds": 120,
|
|
52
|
+
"success": true
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### agents.json
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"agents": {
|
|
65
|
+
"@core-architect": {
|
|
66
|
+
"invocations": 18,
|
|
67
|
+
"last_used": "ISO-timestamp",
|
|
68
|
+
"avg_context_tokens": 35000,
|
|
69
|
+
"tasks_completed": 15
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### context.json
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"snapshots": [
|
|
80
|
+
{
|
|
81
|
+
"timestamp": "ISO-timestamp",
|
|
82
|
+
"total_tokens": 45000,
|
|
83
|
+
"breakdown": {
|
|
84
|
+
"indexes": 12400,
|
|
85
|
+
"workflows": 18200,
|
|
86
|
+
"agents": 8600,
|
|
87
|
+
"commands": 5800
|
|
88
|
+
},
|
|
89
|
+
"budget_percentage": 22.5
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Retention
|
|
96
|
+
|
|
97
|
+
Data is retained according to `telemetry.retention_days` in settings (default: 90 days). Older data is automatically pruned.
|
|
98
|
+
|
|
99
|
+
## Clearing Data
|
|
100
|
+
|
|
101
|
+
To clear all analytics data:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
/analytics clear
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Or manually delete files in this directory (except README.md).
|
|
108
|
+
|
|
109
|
+
## Privacy
|
|
110
|
+
|
|
111
|
+
- All data stored locally
|
|
112
|
+
- No external transmission
|
|
113
|
+
- User has full control
|
|
114
|
+
- Can be disabled in settings
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../schemas/automation.schema.json",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"generators": {
|
|
5
|
+
"code_mapper": {
|
|
6
|
+
"enabled": true,
|
|
7
|
+
"output_path": "context/CODE_TO_WORKFLOW_MAP.md",
|
|
8
|
+
"scan_patterns": [
|
|
9
|
+
"context/workflows/*.md",
|
|
10
|
+
"agents/*.md",
|
|
11
|
+
"commands/*.md"
|
|
12
|
+
],
|
|
13
|
+
"reference_patterns": [
|
|
14
|
+
"\\[Line (\\d+)\\]",
|
|
15
|
+
"\\[Lines (\\d+)-(\\d+)\\]",
|
|
16
|
+
":(\\d+)",
|
|
17
|
+
"::(\\w+)\\(\\)"
|
|
18
|
+
],
|
|
19
|
+
"ignore_paths": [
|
|
20
|
+
"node_modules",
|
|
21
|
+
".git",
|
|
22
|
+
"dist",
|
|
23
|
+
"build"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"index_builder": {
|
|
27
|
+
"enabled": true,
|
|
28
|
+
"rebuild_on_change": true,
|
|
29
|
+
"indexes": [
|
|
30
|
+
"indexes/workflows/CATEGORY_INDEX.md",
|
|
31
|
+
"indexes/code/CATEGORY_INDEX.md",
|
|
32
|
+
"indexes/agents/CATEGORY_INDEX.md"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"gotcha_extractor": {
|
|
36
|
+
"enabled": false,
|
|
37
|
+
"scan_git_history": true,
|
|
38
|
+
"keywords": ["fix", "bug", "revert", "hotfix", "GOTCHA", "WARN"],
|
|
39
|
+
"output_path": "context/KNOWN_GOTCHAS.md"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"hooks": {
|
|
43
|
+
"pre_commit": {
|
|
44
|
+
"enabled": true,
|
|
45
|
+
"check_drift": true,
|
|
46
|
+
"block_on_stale": false
|
|
47
|
+
},
|
|
48
|
+
"post_commit": {
|
|
49
|
+
"enabled": true,
|
|
50
|
+
"rebuild_code_map": true,
|
|
51
|
+
"update_hashes": true
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"schedule": {
|
|
55
|
+
"full_rebuild": "weekly",
|
|
56
|
+
"drift_check": "on_file_change"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Mapper - Auto-generates CODE_TO_WORKFLOW_MAP.md
|
|
3
|
+
*
|
|
4
|
+
* Scans workflow files for file:line references and builds
|
|
5
|
+
* a reverse index mapping code files to their documentation.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const fs = require('fs');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
const glob = require('glob');
|
|
11
|
+
|
|
12
|
+
const CLAUDE_DIR = path.join(__dirname, '..', '..');
|
|
13
|
+
const CONFIG_PATH = path.join(__dirname, '..', 'config.json');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Load automation config
|
|
17
|
+
*/
|
|
18
|
+
function loadConfig() {
|
|
19
|
+
try {
|
|
20
|
+
const content = fs.readFileSync(CONFIG_PATH, 'utf-8');
|
|
21
|
+
return JSON.parse(content);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
console.error('Failed to load config:', error.message);
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Extract file references from markdown content
|
|
30
|
+
*/
|
|
31
|
+
function extractReferences(content, filePath) {
|
|
32
|
+
const references = [];
|
|
33
|
+
const patterns = [
|
|
34
|
+
// file.ext:123 format
|
|
35
|
+
/([a-zA-Z0-9_\-./]+\.[a-zA-Z]+):(\d+)/g,
|
|
36
|
+
// [Line 123] format with preceding file path
|
|
37
|
+
/`([^`]+)`[^[]*\[Line (\d+)\]/g,
|
|
38
|
+
// [Lines 123-456] format
|
|
39
|
+
/`([^`]+)`[^[]*\[Lines (\d+)-(\d+)\]/g,
|
|
40
|
+
// file.ext::function() semantic anchor format
|
|
41
|
+
/([a-zA-Z0-9_\-./]+\.[a-zA-Z]+)::(\w+)\(\)/g
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
// Simple line number extraction
|
|
45
|
+
const linePattern = /([a-zA-Z0-9_\-./]+\.[a-zA-Z0-9]+):(\d+)/g;
|
|
46
|
+
let match;
|
|
47
|
+
while ((match = linePattern.exec(content)) !== null) {
|
|
48
|
+
references.push({
|
|
49
|
+
file: match[1],
|
|
50
|
+
line: parseInt(match[2]),
|
|
51
|
+
type: 'line',
|
|
52
|
+
source: filePath
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Semantic anchor extraction
|
|
57
|
+
const anchorPattern = /([a-zA-Z0-9_\-./]+\.[a-zA-Z0-9]+)::(\w+)\(\)/g;
|
|
58
|
+
while ((match = anchorPattern.exec(content)) !== null) {
|
|
59
|
+
references.push({
|
|
60
|
+
file: match[1],
|
|
61
|
+
anchor: match[2],
|
|
62
|
+
type: 'anchor',
|
|
63
|
+
source: filePath
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return references;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Scan workflow files and extract all references
|
|
72
|
+
*/
|
|
73
|
+
function scanWorkflows() {
|
|
74
|
+
const config = loadConfig();
|
|
75
|
+
if (!config) return {};
|
|
76
|
+
|
|
77
|
+
const allReferences = {};
|
|
78
|
+
const scanPatterns = config.generators.code_mapper.scan_patterns || [
|
|
79
|
+
'context/workflows/*.md',
|
|
80
|
+
'agents/*.md'
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
for (const pattern of scanPatterns) {
|
|
84
|
+
const fullPattern = path.join(CLAUDE_DIR, pattern);
|
|
85
|
+
const files = glob.sync(fullPattern);
|
|
86
|
+
|
|
87
|
+
for (const file of files) {
|
|
88
|
+
try {
|
|
89
|
+
const content = fs.readFileSync(file, 'utf-8');
|
|
90
|
+
const relativePath = path.relative(CLAUDE_DIR, file);
|
|
91
|
+
const refs = extractReferences(content, relativePath);
|
|
92
|
+
|
|
93
|
+
for (const ref of refs) {
|
|
94
|
+
const normalizedPath = ref.file.replace(/\\/g, '/');
|
|
95
|
+
if (!allReferences[normalizedPath]) {
|
|
96
|
+
allReferences[normalizedPath] = {
|
|
97
|
+
documentedIn: [],
|
|
98
|
+
references: []
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Add source document
|
|
103
|
+
if (!allReferences[normalizedPath].documentedIn.includes(relativePath)) {
|
|
104
|
+
allReferences[normalizedPath].documentedIn.push(relativePath);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Add reference details
|
|
108
|
+
allReferences[normalizedPath].references.push({
|
|
109
|
+
source: relativePath,
|
|
110
|
+
line: ref.line,
|
|
111
|
+
anchor: ref.anchor,
|
|
112
|
+
type: ref.type
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
} catch (error) {
|
|
116
|
+
console.error(`Error scanning ${file}:`, error.message);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return allReferences;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Generate CODE_TO_WORKFLOW_MAP.md content
|
|
126
|
+
*/
|
|
127
|
+
function generateMapContent(references) {
|
|
128
|
+
const now = new Date().toISOString();
|
|
129
|
+
let content = `# Code to Workflow Map
|
|
130
|
+
|
|
131
|
+
> **Auto-generated:** ${now}
|
|
132
|
+
> **Generator:** code-mapper.js
|
|
133
|
+
>
|
|
134
|
+
> This file maps source code files to the workflow documentation that references them.
|
|
135
|
+
> Use this to find which docs need updating after code changes.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## How to Use
|
|
140
|
+
|
|
141
|
+
1. **Modified a file?** Search for it below
|
|
142
|
+
2. **Find "Documented In"** section for affected workflows
|
|
143
|
+
3. **Check references** to see what needs updating
|
|
144
|
+
4. **Run \`/verify-docs-current [file]\`** to validate
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## File Mappings
|
|
149
|
+
|
|
150
|
+
`;
|
|
151
|
+
|
|
152
|
+
// Sort files alphabetically
|
|
153
|
+
const sortedFiles = Object.keys(references).sort();
|
|
154
|
+
|
|
155
|
+
// Group by directory
|
|
156
|
+
const byDirectory = {};
|
|
157
|
+
for (const file of sortedFiles) {
|
|
158
|
+
const dir = path.dirname(file) || '.';
|
|
159
|
+
if (!byDirectory[dir]) {
|
|
160
|
+
byDirectory[dir] = [];
|
|
161
|
+
}
|
|
162
|
+
byDirectory[dir].push(file);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
for (const dir of Object.keys(byDirectory).sort()) {
|
|
166
|
+
content += `### ${dir}/\n\n`;
|
|
167
|
+
|
|
168
|
+
for (const file of byDirectory[dir]) {
|
|
169
|
+
const data = references[file];
|
|
170
|
+
const fileName = path.basename(file);
|
|
171
|
+
const refCount = data.references.length;
|
|
172
|
+
|
|
173
|
+
content += `#### \`${fileName}\`\n\n`;
|
|
174
|
+
content += `**Documented In:**\n`;
|
|
175
|
+
for (const doc of data.documentedIn) {
|
|
176
|
+
content += `- [${doc}](./${doc})\n`;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
content += `\n**References:** ${refCount}\n`;
|
|
180
|
+
|
|
181
|
+
// Group references by type
|
|
182
|
+
const lineRefs = data.references.filter(r => r.type === 'line');
|
|
183
|
+
const anchorRefs = data.references.filter(r => r.type === 'anchor');
|
|
184
|
+
|
|
185
|
+
if (lineRefs.length > 0) {
|
|
186
|
+
content += `\n*Line References:*\n`;
|
|
187
|
+
for (const ref of lineRefs.slice(0, 5)) {
|
|
188
|
+
content += `- Line ${ref.line} in ${ref.source}\n`;
|
|
189
|
+
}
|
|
190
|
+
if (lineRefs.length > 5) {
|
|
191
|
+
content += `- ... and ${lineRefs.length - 5} more\n`;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (anchorRefs.length > 0) {
|
|
196
|
+
content += `\n*Semantic Anchors:*\n`;
|
|
197
|
+
for (const ref of anchorRefs) {
|
|
198
|
+
content += `- \`${ref.anchor}()\` in ${ref.source}\n`;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
content += `\n**Update After Changing:**\n`;
|
|
203
|
+
for (const doc of data.documentedIn) {
|
|
204
|
+
content += `- [ ] ${doc}\n`;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
content += '\n---\n\n';
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Summary section
|
|
212
|
+
content += `## Summary
|
|
213
|
+
|
|
214
|
+
| Metric | Value |
|
|
215
|
+
|--------|-------|
|
|
216
|
+
| Files Documented | ${sortedFiles.length} |
|
|
217
|
+
| Total References | ${Object.values(references).reduce((sum, r) => sum + r.references.length, 0)} |
|
|
218
|
+
| Workflow Files | ${new Set(Object.values(references).flatMap(r => r.documentedIn)).size} |
|
|
219
|
+
| Generated | ${now} |
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Files NOT Currently Documented
|
|
224
|
+
|
|
225
|
+
*Run \`npx claude-context generate --scan-orphans\` to find undocumented code files.*
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
*This file is auto-generated. Do not edit manually.*
|
|
230
|
+
*Regenerate with: \`npx claude-context generate --code-map\`*
|
|
231
|
+
`;
|
|
232
|
+
|
|
233
|
+
return content;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Generate and write CODE_TO_WORKFLOW_MAP.md
|
|
238
|
+
*/
|
|
239
|
+
function generate(options = {}) {
|
|
240
|
+
const { dryRun = false, verbose = false } = options;
|
|
241
|
+
|
|
242
|
+
console.log('Scanning workflow files...');
|
|
243
|
+
const references = scanWorkflows();
|
|
244
|
+
|
|
245
|
+
const fileCount = Object.keys(references).length;
|
|
246
|
+
const refCount = Object.values(references).reduce(
|
|
247
|
+
(sum, r) => sum + r.references.length, 0
|
|
248
|
+
);
|
|
249
|
+
|
|
250
|
+
console.log(`Found ${fileCount} files with ${refCount} references`);
|
|
251
|
+
|
|
252
|
+
if (verbose) {
|
|
253
|
+
for (const [file, data] of Object.entries(references)) {
|
|
254
|
+
console.log(` ${file}: ${data.references.length} refs in ${data.documentedIn.length} docs`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const content = generateMapContent(references);
|
|
259
|
+
|
|
260
|
+
if (dryRun) {
|
|
261
|
+
console.log('\n--- DRY RUN OUTPUT ---\n');
|
|
262
|
+
console.log(content.substring(0, 2000) + '\n...(truncated)');
|
|
263
|
+
return { success: true, fileCount, refCount };
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const outputPath = path.join(CLAUDE_DIR, 'context', 'CODE_TO_WORKFLOW_MAP.md');
|
|
267
|
+
try {
|
|
268
|
+
fs.writeFileSync(outputPath, content);
|
|
269
|
+
console.log(`Generated: ${outputPath}`);
|
|
270
|
+
|
|
271
|
+
// Update metadata
|
|
272
|
+
const metaPath = path.join(CLAUDE_DIR, 'context', '.meta', 'generated-at.json');
|
|
273
|
+
const metaDir = path.dirname(metaPath);
|
|
274
|
+
if (!fs.existsSync(metaDir)) {
|
|
275
|
+
fs.mkdirSync(metaDir, { recursive: true });
|
|
276
|
+
}
|
|
277
|
+
const metadata = {
|
|
278
|
+
'CODE_TO_WORKFLOW_MAP.md': {
|
|
279
|
+
generatedAt: new Date().toISOString(),
|
|
280
|
+
filesScanned: fileCount,
|
|
281
|
+
referencesFound: refCount
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
fs.writeFileSync(metaPath, JSON.stringify(metadata, null, 2));
|
|
285
|
+
|
|
286
|
+
return { success: true, fileCount, refCount, outputPath };
|
|
287
|
+
} catch (error) {
|
|
288
|
+
console.error('Failed to write output:', error.message);
|
|
289
|
+
return { success: false, error: error.message };
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// CLI execution
|
|
294
|
+
if (require.main === module) {
|
|
295
|
+
const args = process.argv.slice(2);
|
|
296
|
+
const dryRun = args.includes('--dry-run');
|
|
297
|
+
const verbose = args.includes('--verbose') || args.includes('-v');
|
|
298
|
+
|
|
299
|
+
const result = generate({ dryRun, verbose });
|
|
300
|
+
process.exit(result.success ? 0 : 1);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
module.exports = {
|
|
304
|
+
generate,
|
|
305
|
+
scanWorkflows,
|
|
306
|
+
extractReferences,
|
|
307
|
+
generateMapContent
|
|
308
|
+
};
|