create-claude-context 1.0.0 → 1.2.1
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 +169 -146
- package/bin/create-claude-context.js +75 -61
- package/lib/ai-orchestrator.js +423 -0
- package/lib/call-tracer.js +444 -0
- package/lib/detector.js +456 -373
- package/lib/environment-detector.js +239 -0
- package/lib/index.js +271 -170
- package/lib/installer.js +371 -362
- package/lib/placeholder.js +269 -208
- package/lib/prompts.js +287 -287
- package/lib/spinner.js +60 -60
- package/lib/static-analyzer.js +729 -0
- package/lib/template-populator.js +835 -0
- package/lib/validate.js +147 -147
- package/package.json +59 -59
- package/templates/CLAUDE.md.template +235 -235
- package/templates/base/README.md +257 -257
- package/templates/base/RPI_WORKFLOW_PLAN.md +320 -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 -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 -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 -0
- package/templates/base/commands/collab.md +194 -194
- package/templates/base/commands/help.md +450 -450
- package/templates/base/commands/rpi-implement.md +115 -115
- package/templates/base/commands/rpi-plan.md +93 -93
- package/templates/base/commands/rpi-research.md +88 -88
- 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 -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 -0
- 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 -0
- package/templates/base/context/INTEGRATION_POINTS.md +92 -0
- package/templates/base/context/KNOWN_GOTCHAS.md +195 -195
- package/templates/base/context/TESTING_MAP.md +95 -0
- 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 +250 -250
- package/templates/base/research/RESEARCH_TEMPLATE.md +153 -153
- package/templates/base/schemas/agent.schema.json +141 -141
- 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 -134
- package/templates/base/schemas/hashes.schema.json +40 -0
- 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 -0
- package/templates/base/schemas/session.schema.json +77 -0
- package/templates/base/schemas/settings.schema.json +244 -244
- 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 -126
- 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 -57
- 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 -0
- package/templates/base/sync/hashes.json +6 -0
- package/templates/base/sync/staleness.json +10 -0
- 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 -0
- 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 -0
- package/templates/base/tools/lib/errors.js +199 -199
- package/templates/base/tools/lib/index.js +36 -24
- 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 -0
- package/templates/base/tools/lib/validate.js +521 -521
- package/templates/base/tools/package.json +49 -49
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects execution context to determine analysis mode:
|
|
5
|
+
* - full-ai: Running inside Claude Code with API access
|
|
6
|
+
* - hybrid: Running inside Claude Code without direct API access
|
|
7
|
+
* - standalone: Running via npx without Claude Code
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
const fs = require('fs');
|
|
11
|
+
const path = require('path');
|
|
12
|
+
const os = require('os');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Environment indicators for Claude Code detection
|
|
16
|
+
*/
|
|
17
|
+
const CLAUDE_INDICATORS = {
|
|
18
|
+
// Environment variables set by Claude Code
|
|
19
|
+
envVars: [
|
|
20
|
+
'CLAUDE_CODE_SESSION',
|
|
21
|
+
'CLAUDE_SESSION_ID',
|
|
22
|
+
'CLAUDE_AGENT_ID',
|
|
23
|
+
'ANTHROPIC_API_KEY',
|
|
24
|
+
'CLAUDE_API_KEY'
|
|
25
|
+
],
|
|
26
|
+
|
|
27
|
+
// Directories that indicate Claude Code presence
|
|
28
|
+
directories: [
|
|
29
|
+
path.join(os.homedir(), '.claude'),
|
|
30
|
+
path.join(os.homedir(), '.claude-code'),
|
|
31
|
+
path.join(os.homedir(), '.config', 'claude-code')
|
|
32
|
+
],
|
|
33
|
+
|
|
34
|
+
// Files that indicate active Claude Code session
|
|
35
|
+
sessionFiles: [
|
|
36
|
+
'.claude-session',
|
|
37
|
+
'.claude-code-session'
|
|
38
|
+
]
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Capability definitions by mode
|
|
43
|
+
*/
|
|
44
|
+
const CAPABILITIES = {
|
|
45
|
+
'full-ai': [
|
|
46
|
+
'workflow-discovery',
|
|
47
|
+
'call-tracing',
|
|
48
|
+
'semantic-analysis',
|
|
49
|
+
'architecture-understanding',
|
|
50
|
+
'smart-documentation'
|
|
51
|
+
],
|
|
52
|
+
'hybrid': [
|
|
53
|
+
'workflow-discovery',
|
|
54
|
+
'basic-analysis',
|
|
55
|
+
'pattern-matching'
|
|
56
|
+
],
|
|
57
|
+
'standalone': [
|
|
58
|
+
'static-analysis',
|
|
59
|
+
'pattern-matching',
|
|
60
|
+
'structure-mapping'
|
|
61
|
+
]
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Detect if running inside a Claude Code session
|
|
66
|
+
* @returns {boolean}
|
|
67
|
+
*/
|
|
68
|
+
function isClaudeCodeSession() {
|
|
69
|
+
// Check environment variables
|
|
70
|
+
for (const envVar of CLAUDE_INDICATORS.envVars) {
|
|
71
|
+
if (process.env[envVar]) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Check for Claude directories
|
|
77
|
+
for (const dir of CLAUDE_INDICATORS.directories) {
|
|
78
|
+
if (fs.existsSync(dir)) {
|
|
79
|
+
// Directory exists, check for recent session markers
|
|
80
|
+
const sessionMarker = path.join(dir, 'session', 'current', 'state.json');
|
|
81
|
+
if (fs.existsSync(sessionMarker)) {
|
|
82
|
+
try {
|
|
83
|
+
const state = JSON.parse(fs.readFileSync(sessionMarker, 'utf-8'));
|
|
84
|
+
// Check if session is recent (within last 24 hours)
|
|
85
|
+
if (state.startedAt) {
|
|
86
|
+
const sessionStart = new Date(state.startedAt);
|
|
87
|
+
const hoursSinceStart = (Date.now() - sessionStart.getTime()) / (1000 * 60 * 60);
|
|
88
|
+
if (hoursSinceStart < 24) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
} catch {
|
|
93
|
+
// Ignore parse errors
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Even without active session, presence of .claude indicates CLI usage
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Check for session files in current directory
|
|
102
|
+
for (const sessionFile of CLAUDE_INDICATORS.sessionFiles) {
|
|
103
|
+
if (fs.existsSync(path.join(process.cwd(), sessionFile))) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Check if we're in a TTY with Claude Code characteristics
|
|
109
|
+
if (process.stdout.isTTY) {
|
|
110
|
+
// Check for VS Code terminal (common Claude Code environment)
|
|
111
|
+
if (process.env.TERM_PROGRAM === 'vscode') {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Check for Claude Code specific terminal markers
|
|
116
|
+
if (process.env.CLAUDE_CODE_TERMINAL === 'true') {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Check if API access is available
|
|
126
|
+
* @returns {boolean}
|
|
127
|
+
*/
|
|
128
|
+
function hasApiAccess() {
|
|
129
|
+
return !!(
|
|
130
|
+
process.env.ANTHROPIC_API_KEY ||
|
|
131
|
+
process.env.CLAUDE_API_KEY ||
|
|
132
|
+
process.env.CLAUDE_CODE_API_ACCESS === 'true'
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Detect the current execution environment
|
|
138
|
+
* @returns {{mode: string, isClaudeCode: boolean, hasApiAccess: boolean, capabilities: string[], indicators: string[]}}
|
|
139
|
+
*/
|
|
140
|
+
function detectEnvironment() {
|
|
141
|
+
const result = {
|
|
142
|
+
isClaudeCode: false,
|
|
143
|
+
hasApiAccess: false,
|
|
144
|
+
mode: 'standalone',
|
|
145
|
+
capabilities: [],
|
|
146
|
+
indicators: []
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
// Check for Claude Code session
|
|
150
|
+
result.isClaudeCode = isClaudeCodeSession();
|
|
151
|
+
|
|
152
|
+
// Check for API access
|
|
153
|
+
result.hasApiAccess = hasApiAccess();
|
|
154
|
+
|
|
155
|
+
// Collect detected indicators for debugging
|
|
156
|
+
for (const envVar of CLAUDE_INDICATORS.envVars) {
|
|
157
|
+
if (process.env[envVar]) {
|
|
158
|
+
result.indicators.push(`env:${envVar}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
for (const dir of CLAUDE_INDICATORS.directories) {
|
|
162
|
+
if (fs.existsSync(dir)) {
|
|
163
|
+
result.indicators.push(`dir:${path.basename(dir)}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Determine mode based on detection
|
|
168
|
+
if (result.isClaudeCode && result.hasApiAccess) {
|
|
169
|
+
result.mode = 'full-ai';
|
|
170
|
+
} else if (result.isClaudeCode) {
|
|
171
|
+
result.mode = 'hybrid';
|
|
172
|
+
} else {
|
|
173
|
+
result.mode = 'standalone';
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Assign capabilities based on mode
|
|
177
|
+
result.capabilities = CAPABILITIES[result.mode] || CAPABILITIES.standalone;
|
|
178
|
+
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Get a human-readable description of the environment
|
|
184
|
+
* @param {object} env - Environment detection result
|
|
185
|
+
* @returns {string}
|
|
186
|
+
*/
|
|
187
|
+
function getEnvironmentDescription(env) {
|
|
188
|
+
switch (env.mode) {
|
|
189
|
+
case 'full-ai':
|
|
190
|
+
return 'Claude Code session with AI analysis enabled';
|
|
191
|
+
case 'hybrid':
|
|
192
|
+
return 'Claude Code session (AI analysis available on next run)';
|
|
193
|
+
case 'standalone':
|
|
194
|
+
return 'Standalone mode (static analysis only)';
|
|
195
|
+
default:
|
|
196
|
+
return 'Unknown environment';
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Check if a specific capability is available
|
|
202
|
+
* @param {object} env - Environment detection result
|
|
203
|
+
* @param {string} capability - Capability to check
|
|
204
|
+
* @returns {boolean}
|
|
205
|
+
*/
|
|
206
|
+
function hasCapability(env, capability) {
|
|
207
|
+
return env.capabilities.includes(capability);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Force a specific mode (for testing or CLI override)
|
|
212
|
+
* @param {string} mode - Mode to force ('full-ai', 'hybrid', 'standalone')
|
|
213
|
+
* @returns {object} Environment result with forced mode
|
|
214
|
+
*/
|
|
215
|
+
function forceMode(mode) {
|
|
216
|
+
if (!CAPABILITIES[mode]) {
|
|
217
|
+
throw new Error(`Invalid mode: ${mode}. Valid modes: ${Object.keys(CAPABILITIES).join(', ')}`);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
return {
|
|
221
|
+
isClaudeCode: mode !== 'standalone',
|
|
222
|
+
hasApiAccess: mode === 'full-ai',
|
|
223
|
+
mode,
|
|
224
|
+
capabilities: CAPABILITIES[mode],
|
|
225
|
+
indicators: [`forced:${mode}`],
|
|
226
|
+
forced: true
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
module.exports = {
|
|
231
|
+
detectEnvironment,
|
|
232
|
+
isClaudeCodeSession,
|
|
233
|
+
hasApiAccess,
|
|
234
|
+
getEnvironmentDescription,
|
|
235
|
+
hasCapability,
|
|
236
|
+
forceMode,
|
|
237
|
+
CLAUDE_INDICATORS,
|
|
238
|
+
CAPABILITIES
|
|
239
|
+
};
|