agents-reverse-engineer 0.1.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 -0
- package/README.md +238 -0
- package/dist/change-detection/detector.d.ts +24 -0
- package/dist/change-detection/detector.d.ts.map +1 -0
- package/dist/change-detection/detector.js +114 -0
- package/dist/change-detection/detector.js.map +1 -0
- package/dist/change-detection/index.d.ts +9 -0
- package/dist/change-detection/index.d.ts.map +1 -0
- package/dist/change-detection/index.js +8 -0
- package/dist/change-detection/index.js.map +1 -0
- package/dist/change-detection/types.d.ts +39 -0
- package/dist/change-detection/types.d.ts.map +1 -0
- package/dist/change-detection/types.js +5 -0
- package/dist/change-detection/types.js.map +1 -0
- package/dist/cli/discover.d.ts +52 -0
- package/dist/cli/discover.d.ts.map +1 -0
- package/dist/cli/discover.js +125 -0
- package/dist/cli/discover.js.map +1 -0
- package/dist/cli/generate.d.ts +41 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +179 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +182 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +38 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +94 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/update.d.ts +28 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +296 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/config/defaults.d.ts +38 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +89 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +66 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +158 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +235 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +80 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/discovery/filters/binary.d.ts +46 -0
- package/dist/discovery/filters/binary.d.ts.map +1 -0
- package/dist/discovery/filters/binary.js +157 -0
- package/dist/discovery/filters/binary.js.map +1 -0
- package/dist/discovery/filters/custom.d.ts +26 -0
- package/dist/discovery/filters/custom.d.ts.map +1 -0
- package/dist/discovery/filters/custom.js +50 -0
- package/dist/discovery/filters/custom.js.map +1 -0
- package/dist/discovery/filters/gitignore.d.ts +24 -0
- package/dist/discovery/filters/gitignore.d.ts.map +1 -0
- package/dist/discovery/filters/gitignore.js +53 -0
- package/dist/discovery/filters/gitignore.js.map +1 -0
- package/dist/discovery/filters/index.d.ts +85 -0
- package/dist/discovery/filters/index.d.ts.map +1 -0
- package/dist/discovery/filters/index.js +98 -0
- package/dist/discovery/filters/index.js.map +1 -0
- package/dist/discovery/filters/vendor.d.ts +30 -0
- package/dist/discovery/filters/vendor.d.ts.map +1 -0
- package/dist/discovery/filters/vendor.js +57 -0
- package/dist/discovery/filters/vendor.js.map +1 -0
- package/dist/discovery/types.d.ts +66 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +8 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/discovery/walker.d.ts +24 -0
- package/dist/discovery/walker.d.ts.map +1 -0
- package/dist/discovery/walker.js +35 -0
- package/dist/discovery/walker.js.map +1 -0
- package/dist/generation/budget/chunker.d.ts +38 -0
- package/dist/generation/budget/chunker.d.ts.map +1 -0
- package/dist/generation/budget/chunker.js +73 -0
- package/dist/generation/budget/chunker.js.map +1 -0
- package/dist/generation/budget/counter.d.ts +26 -0
- package/dist/generation/budget/counter.d.ts.map +1 -0
- package/dist/generation/budget/counter.js +45 -0
- package/dist/generation/budget/counter.js.map +1 -0
- package/dist/generation/budget/index.d.ts +4 -0
- package/dist/generation/budget/index.d.ts.map +1 -0
- package/dist/generation/budget/index.js +4 -0
- package/dist/generation/budget/index.js.map +1 -0
- package/dist/generation/budget/tracker.d.ts +63 -0
- package/dist/generation/budget/tracker.d.ts.map +1 -0
- package/dist/generation/budget/tracker.js +96 -0
- package/dist/generation/budget/tracker.js.map +1 -0
- package/dist/generation/complexity.d.ts +43 -0
- package/dist/generation/complexity.d.ts.map +1 -0
- package/dist/generation/complexity.js +156 -0
- package/dist/generation/complexity.js.map +1 -0
- package/dist/generation/detection/detector.d.ts +23 -0
- package/dist/generation/detection/detector.d.ts.map +1 -0
- package/dist/generation/detection/detector.js +62 -0
- package/dist/generation/detection/detector.js.map +1 -0
- package/dist/generation/detection/patterns.d.ts +21 -0
- package/dist/generation/detection/patterns.d.ts.map +1 -0
- package/dist/generation/detection/patterns.js +115 -0
- package/dist/generation/detection/patterns.js.map +1 -0
- package/dist/generation/executor.d.ts +95 -0
- package/dist/generation/executor.d.ts.map +1 -0
- package/dist/generation/executor.js +352 -0
- package/dist/generation/executor.js.map +1 -0
- package/dist/generation/orchestrator.d.ts +126 -0
- package/dist/generation/orchestrator.d.ts.map +1 -0
- package/dist/generation/orchestrator.js +222 -0
- package/dist/generation/orchestrator.js.map +1 -0
- package/dist/generation/prompts/builder.d.ts +31 -0
- package/dist/generation/prompts/builder.d.ts.map +1 -0
- package/dist/generation/prompts/builder.js +136 -0
- package/dist/generation/prompts/builder.js.map +1 -0
- package/dist/generation/prompts/index.d.ts +5 -0
- package/dist/generation/prompts/index.d.ts.map +1 -0
- package/dist/generation/prompts/index.js +4 -0
- package/dist/generation/prompts/index.js.map +1 -0
- package/dist/generation/prompts/templates.d.ts +11 -0
- package/dist/generation/prompts/templates.d.ts.map +1 -0
- package/dist/generation/prompts/templates.js +247 -0
- package/dist/generation/prompts/templates.js.map +1 -0
- package/dist/generation/prompts/types.d.ts +71 -0
- package/dist/generation/prompts/types.d.ts.map +1 -0
- package/dist/generation/prompts/types.js +23 -0
- package/dist/generation/prompts/types.js.map +1 -0
- package/dist/generation/types.d.ts +72 -0
- package/dist/generation/types.d.ts.map +1 -0
- package/dist/generation/types.js +5 -0
- package/dist/generation/types.js.map +1 -0
- package/dist/generation/writers/agents-md.d.ts +63 -0
- package/dist/generation/writers/agents-md.d.ts.map +1 -0
- package/dist/generation/writers/agents-md.js +235 -0
- package/dist/generation/writers/agents-md.js.map +1 -0
- package/dist/generation/writers/claude-md.d.ts +13 -0
- package/dist/generation/writers/claude-md.d.ts.map +1 -0
- package/dist/generation/writers/claude-md.js +33 -0
- package/dist/generation/writers/claude-md.js.map +1 -0
- package/dist/generation/writers/index.d.ts +5 -0
- package/dist/generation/writers/index.d.ts.map +1 -0
- package/dist/generation/writers/index.js +5 -0
- package/dist/generation/writers/index.js.map +1 -0
- package/dist/generation/writers/sum.d.ts +37 -0
- package/dist/generation/writers/sum.d.ts.map +1 -0
- package/dist/generation/writers/sum.js +98 -0
- package/dist/generation/writers/sum.js.map +1 -0
- package/dist/generation/writers/supplementary.d.ts +53 -0
- package/dist/generation/writers/supplementary.d.ts.map +1 -0
- package/dist/generation/writers/supplementary.js +195 -0
- package/dist/generation/writers/supplementary.js.map +1 -0
- package/dist/integration/detect.d.ts +28 -0
- package/dist/integration/detect.d.ts.map +1 -0
- package/dist/integration/detect.js +64 -0
- package/dist/integration/detect.js.map +1 -0
- package/dist/integration/generate.d.ts +36 -0
- package/dist/integration/generate.d.ts.map +1 -0
- package/dist/integration/generate.js +107 -0
- package/dist/integration/generate.js.map +1 -0
- package/dist/integration/templates.d.ts +42 -0
- package/dist/integration/templates.d.ts.map +1 -0
- package/dist/integration/templates.js +203 -0
- package/dist/integration/templates.js.map +1 -0
- package/dist/integration/types.d.ts +44 -0
- package/dist/integration/types.d.ts.map +1 -0
- package/dist/integration/types.js +8 -0
- package/dist/integration/types.js.map +1 -0
- package/dist/output/logger.d.ts +86 -0
- package/dist/output/logger.d.ts.map +1 -0
- package/dist/output/logger.js +107 -0
- package/dist/output/logger.js.map +1 -0
- package/dist/state/database.d.ts +9 -0
- package/dist/state/database.d.ts.map +1 -0
- package/dist/state/database.js +66 -0
- package/dist/state/database.js.map +1 -0
- package/dist/state/index.d.ts +8 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/migrations.d.ts +12 -0
- package/dist/state/migrations.d.ts.map +1 -0
- package/dist/state/migrations.js +39 -0
- package/dist/state/migrations.js.map +1 -0
- package/dist/state/types.d.ts +54 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +2 -0
- package/dist/state/types.js.map +1 -0
- package/dist/types/index.d.ts +39 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/update/index.d.ts +10 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +9 -0
- package/dist/update/index.js.map +1 -0
- package/dist/update/orchestrator.d.ts +91 -0
- package/dist/update/orchestrator.d.ts.map +1 -0
- package/dist/update/orchestrator.js +204 -0
- package/dist/update/orchestrator.js.map +1 -0
- package/dist/update/orphan-cleaner.d.ts +30 -0
- package/dist/update/orphan-cleaner.d.ts.map +1 -0
- package/dist/update/orphan-cleaner.js +151 -0
- package/dist/update/orphan-cleaner.js.map +1 -0
- package/dist/update/types.d.ts +59 -0
- package/dist/update/types.d.ts.map +1 -0
- package/dist/update/types.js +2 -0
- package/dist/update/types.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template generators for AI coding assistant integration files
|
|
3
|
+
*
|
|
4
|
+
* Generates command file templates for Claude Code, OpenCode, and session hooks.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Get Claude Code command file templates
|
|
8
|
+
*
|
|
9
|
+
* Returns templates for:
|
|
10
|
+
* - generate.md: Full documentation generation command
|
|
11
|
+
* - update.md: Incremental documentation update command
|
|
12
|
+
* - init.md: Initialize agents-reverse-engineer in a project
|
|
13
|
+
*
|
|
14
|
+
* @returns Array of Claude Code command templates
|
|
15
|
+
*/
|
|
16
|
+
export function getClaudeTemplates() {
|
|
17
|
+
return [
|
|
18
|
+
{
|
|
19
|
+
filename: 'generate.md',
|
|
20
|
+
path: '.claude/commands/are/generate.md',
|
|
21
|
+
content: `---
|
|
22
|
+
name: are:generate
|
|
23
|
+
description: Generate AI-friendly documentation for the entire codebase
|
|
24
|
+
argument-hint: "[--budget N] [--dry-run] [--verbose]"
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
Generate comprehensive documentation for this codebase using agents-reverse-engineer.
|
|
28
|
+
|
|
29
|
+
<execution>
|
|
30
|
+
Run the agents-reverse-engineer generate command:
|
|
31
|
+
|
|
32
|
+
\`\`\`bash
|
|
33
|
+
npx are generate $ARGUMENTS
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
After completion, summarize:
|
|
37
|
+
- Number of files analyzed
|
|
38
|
+
- Token budget used
|
|
39
|
+
- Any files skipped due to budget
|
|
40
|
+
- Location of generated CLAUDE.md and AGENTS.md files
|
|
41
|
+
|
|
42
|
+
If budget concerns arise, suggest \`--budget N\` to adjust.
|
|
43
|
+
</execution>
|
|
44
|
+
`,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
filename: 'update.md',
|
|
48
|
+
path: '.claude/commands/are/update.md',
|
|
49
|
+
content: `---
|
|
50
|
+
name: are:update
|
|
51
|
+
description: Incrementally update documentation for changed files
|
|
52
|
+
argument-hint: "[--uncommitted] [--dry-run] [--verbose]"
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
Update documentation for files that changed since last run.
|
|
56
|
+
|
|
57
|
+
<execution>
|
|
58
|
+
Run the agents-reverse-engineer update command:
|
|
59
|
+
|
|
60
|
+
\`\`\`bash
|
|
61
|
+
npx are update $ARGUMENTS
|
|
62
|
+
\`\`\`
|
|
63
|
+
|
|
64
|
+
After completion, summarize:
|
|
65
|
+
- Files updated
|
|
66
|
+
- Files unchanged
|
|
67
|
+
- Any orphaned docs cleaned up
|
|
68
|
+
|
|
69
|
+
Use \`--uncommitted\` to include staged but uncommitted changes.
|
|
70
|
+
</execution>
|
|
71
|
+
`,
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
filename: 'init.md',
|
|
75
|
+
path: '.claude/commands/are/init.md',
|
|
76
|
+
content: `---
|
|
77
|
+
name: are:init
|
|
78
|
+
description: Initialize agents-reverse-engineer configuration and integration
|
|
79
|
+
argument-hint: "[--integration]"
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
Initialize agents-reverse-engineer in this project.
|
|
83
|
+
|
|
84
|
+
<execution>
|
|
85
|
+
Run the agents-reverse-engineer init command:
|
|
86
|
+
|
|
87
|
+
\`\`\`bash
|
|
88
|
+
npx are init $ARGUMENTS
|
|
89
|
+
\`\`\`
|
|
90
|
+
|
|
91
|
+
This creates:
|
|
92
|
+
- \`.agents-reverse-engineer.yaml\` configuration file
|
|
93
|
+
- With \`--integration\`: command files for detected AI assistants
|
|
94
|
+
</execution>
|
|
95
|
+
`,
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get OpenCode command file templates
|
|
101
|
+
*
|
|
102
|
+
* Returns templates for:
|
|
103
|
+
* - are-generate.md: Full documentation generation command
|
|
104
|
+
* - are-update.md: Incremental documentation update command
|
|
105
|
+
*
|
|
106
|
+
* @returns Array of OpenCode command templates
|
|
107
|
+
*/
|
|
108
|
+
export function getOpenCodeTemplates() {
|
|
109
|
+
return [
|
|
110
|
+
{
|
|
111
|
+
filename: 'are-generate.md',
|
|
112
|
+
path: '.opencode/commands/are-generate.md',
|
|
113
|
+
content: `---
|
|
114
|
+
description: Generate AI-friendly documentation for the entire codebase
|
|
115
|
+
agent: build
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
Generate comprehensive documentation for this codebase using agents-reverse-engineer.
|
|
119
|
+
|
|
120
|
+
Run: \`npx are generate $ARGUMENTS\`
|
|
121
|
+
|
|
122
|
+
Arguments supported:
|
|
123
|
+
- \`--budget N\` - Override token budget
|
|
124
|
+
- \`--dry-run\` - Show plan without writing files
|
|
125
|
+
- \`--verbose\` - Show detailed output
|
|
126
|
+
`,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
filename: 'are-update.md',
|
|
130
|
+
path: '.opencode/commands/are-update.md',
|
|
131
|
+
content: `---
|
|
132
|
+
description: Incrementally update documentation for changed files
|
|
133
|
+
agent: build
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
Update documentation for files that changed since last run.
|
|
137
|
+
|
|
138
|
+
Run: \`npx are update $ARGUMENTS\`
|
|
139
|
+
|
|
140
|
+
Arguments supported:
|
|
141
|
+
- \`--uncommitted\` - Include staged but uncommitted changes
|
|
142
|
+
- \`--dry-run\` - Show plan without writing files
|
|
143
|
+
- \`--verbose\` - Show detailed output
|
|
144
|
+
`,
|
|
145
|
+
},
|
|
146
|
+
];
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get session-end hook template for automatic documentation updates
|
|
150
|
+
*
|
|
151
|
+
* The hook:
|
|
152
|
+
* - Checks ARE_DISABLE_HOOK env var for temporary disable
|
|
153
|
+
* - Checks config file for permanent disable (hook_enabled: false)
|
|
154
|
+
* - Checks git status and exits silently if no changes
|
|
155
|
+
* - Spawns are update --quiet in background (detached, unref'd)
|
|
156
|
+
*
|
|
157
|
+
* Uses CommonJS (require) since hooks run via node directly.
|
|
158
|
+
*
|
|
159
|
+
* @returns JavaScript hook code as a string
|
|
160
|
+
*/
|
|
161
|
+
export function getHookTemplate() {
|
|
162
|
+
return `#!/usr/bin/env node
|
|
163
|
+
// .claude/hooks/are-session-end.js
|
|
164
|
+
// Triggers are update when session ends (if there are uncommitted changes)
|
|
165
|
+
|
|
166
|
+
const { execSync, spawn } = require('child_process');
|
|
167
|
+
const fs = require('fs');
|
|
168
|
+
|
|
169
|
+
// Check for disable flag
|
|
170
|
+
if (process.env.ARE_DISABLE_HOOK === '1') {
|
|
171
|
+
process.exit(0);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Check config file for permanent disable
|
|
175
|
+
const configPath = '.agents-reverse-engineer.yaml';
|
|
176
|
+
if (fs.existsSync(configPath)) {
|
|
177
|
+
const config = fs.readFileSync(configPath, 'utf-8');
|
|
178
|
+
if (config.includes('hook_enabled: false')) {
|
|
179
|
+
process.exit(0);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Check git status - skip if no changes
|
|
184
|
+
try {
|
|
185
|
+
const status = execSync('git status --porcelain', { encoding: 'utf-8' });
|
|
186
|
+
if (!status.trim()) {
|
|
187
|
+
// No changes since last run - exit silently
|
|
188
|
+
process.exit(0);
|
|
189
|
+
}
|
|
190
|
+
} catch {
|
|
191
|
+
// Not a git repo or git not available - exit silently
|
|
192
|
+
process.exit(0);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Run update in background (don't block session close)
|
|
196
|
+
const child = spawn('npx', ['are', 'update', '--quiet'], {
|
|
197
|
+
stdio: 'ignore',
|
|
198
|
+
detached: true,
|
|
199
|
+
});
|
|
200
|
+
child.unref();
|
|
201
|
+
`;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/integration/templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL;YACE,QAAQ,EAAE,aAAa;YACvB,IAAI,EAAE,kCAAkC;YACxC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;CAuBd;SACI;QACD;YACE,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,gCAAgC;YACtC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;CAsBd;SACI;QACD;YACE,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,8BAA8B;YACpC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;CAmBd;SACI;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL;YACE,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,oCAAoC;YAC1C,OAAO,EAAE;;;;;;;;;;;;;CAad;SACI;QACD;YACE,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,kCAAkC;YACxC,OAAO,EAAE;;;;;;;;;;;;;CAad;SACI;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCR,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration types for AI coding assistant environments
|
|
3
|
+
*
|
|
4
|
+
* Defines types for detecting AI assistant environments (Claude Code, OpenCode, etc.)
|
|
5
|
+
* and generating appropriate integration templates (command files, hooks).
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Supported AI coding assistant environment types
|
|
9
|
+
*/
|
|
10
|
+
export type EnvironmentType = 'claude' | 'opencode' | 'aider';
|
|
11
|
+
/**
|
|
12
|
+
* Result of detecting an AI coding assistant environment
|
|
13
|
+
*/
|
|
14
|
+
export interface DetectedEnvironment {
|
|
15
|
+
/** Type of AI assistant detected */
|
|
16
|
+
type: EnvironmentType;
|
|
17
|
+
/** Configuration directory for this environment (e.g., '.claude', '.opencode') */
|
|
18
|
+
configDir: string;
|
|
19
|
+
/** Whether this environment was detected in the project */
|
|
20
|
+
detected: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Template for integration files (command files, hooks, etc.)
|
|
24
|
+
*/
|
|
25
|
+
export interface IntegrationTemplate {
|
|
26
|
+
/** File name (e.g., 'generate.md') */
|
|
27
|
+
filename: string;
|
|
28
|
+
/** Relative path from project root (e.g., '.claude/commands/ar/generate.md') */
|
|
29
|
+
path: string;
|
|
30
|
+
/** Template content to write to the file */
|
|
31
|
+
content: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Result of generating integration files for an environment
|
|
35
|
+
*/
|
|
36
|
+
export interface IntegrationResult {
|
|
37
|
+
/** Environment type that was configured */
|
|
38
|
+
environment: EnvironmentType;
|
|
39
|
+
/** Files that were successfully created */
|
|
40
|
+
filesCreated: string[];
|
|
41
|
+
/** Files that were skipped (already exist) */
|
|
42
|
+
filesSkipped: string[];
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/integration/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,WAAW,EAAE,eAAe,CAAC;IAC7B,2CAA2C;IAC3C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration types for AI coding assistant environments
|
|
3
|
+
*
|
|
4
|
+
* Defines types for detecting AI assistant environments (Claude Code, OpenCode, etc.)
|
|
5
|
+
* and generating appropriate integration templates (command files, hooks).
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/integration/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal logger for agents-reverse
|
|
3
|
+
*
|
|
4
|
+
* Provides colored output with verbose/quiet modes.
|
|
5
|
+
* Output format follows CONTEXT.md human-readable specification.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Logger interface for discovery output.
|
|
9
|
+
*
|
|
10
|
+
* All methods respect the configured verbosity levels.
|
|
11
|
+
*/
|
|
12
|
+
export interface Logger {
|
|
13
|
+
/** Log an informational message */
|
|
14
|
+
info(message: string): void;
|
|
15
|
+
/** Log a discovered file (verbose mode only) */
|
|
16
|
+
file(path: string): void;
|
|
17
|
+
/** Log an excluded file (--show-excluded mode only) */
|
|
18
|
+
excluded(path: string, reason: string, filter: string): void;
|
|
19
|
+
/** Log discovery summary (always shown unless quiet) */
|
|
20
|
+
summary(included: number, excluded: number): void;
|
|
21
|
+
/** Log a warning message */
|
|
22
|
+
warn(message: string): void;
|
|
23
|
+
/** Log an error message (always shown) */
|
|
24
|
+
error(message: string): void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Options for creating a logger instance.
|
|
28
|
+
*/
|
|
29
|
+
export interface LoggerOptions {
|
|
30
|
+
/**
|
|
31
|
+
* Show verbose output (each file as discovered).
|
|
32
|
+
* @default true per CONTEXT.md
|
|
33
|
+
*/
|
|
34
|
+
verbose: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Suppress all output except errors.
|
|
37
|
+
* @default false
|
|
38
|
+
*/
|
|
39
|
+
quiet: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Use colors in terminal output.
|
|
42
|
+
* @default true
|
|
43
|
+
*/
|
|
44
|
+
colors: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Show each excluded file (with --show-excluded flag).
|
|
47
|
+
* @default false
|
|
48
|
+
*/
|
|
49
|
+
showExcluded: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create a logger instance with the given options.
|
|
53
|
+
*
|
|
54
|
+
* Output format per CONTEXT.md (human-readable):
|
|
55
|
+
* - file: green " +" prefix + relative path
|
|
56
|
+
* - excluded: dim " -" prefix + path + reason (when shown)
|
|
57
|
+
* - summary: bold count + dim excluded count
|
|
58
|
+
* - warn: yellow "Warning:" prefix
|
|
59
|
+
* - error: red "Error:" prefix
|
|
60
|
+
*
|
|
61
|
+
* @param options - Logger configuration
|
|
62
|
+
* @returns Logger instance
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const log = createLogger({
|
|
67
|
+
* verbose: true,
|
|
68
|
+
* quiet: false,
|
|
69
|
+
* colors: true,
|
|
70
|
+
* showExcluded: false,
|
|
71
|
+
* });
|
|
72
|
+
*
|
|
73
|
+
* log.file('src/index.ts');
|
|
74
|
+
* log.summary(42, 10);
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function createLogger(options: LoggerOptions): Logger;
|
|
78
|
+
/**
|
|
79
|
+
* Create a silent logger that produces no output.
|
|
80
|
+
*
|
|
81
|
+
* Useful for testing or programmatic usage.
|
|
82
|
+
*
|
|
83
|
+
* @returns Logger instance with all no-op methods
|
|
84
|
+
*/
|
|
85
|
+
export declare function createSilentLogger(): Logger;
|
|
86
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/output/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACrB,mCAAmC;IACnC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,gDAAgD;IAChD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7D,wDAAwD;IACxD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAElD,4BAA4B;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,0CAA0C;IAC1C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AA6BD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA0C3D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAU3C"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal logger for agents-reverse
|
|
3
|
+
*
|
|
4
|
+
* Provides colored output with verbose/quiet modes.
|
|
5
|
+
* Output format follows CONTEXT.md human-readable specification.
|
|
6
|
+
*/
|
|
7
|
+
import pc from 'picocolors';
|
|
8
|
+
/**
|
|
9
|
+
* Identity function for no-color mode
|
|
10
|
+
*/
|
|
11
|
+
const identity = (s) => s;
|
|
12
|
+
/**
|
|
13
|
+
* No-color formatter that returns strings unchanged
|
|
14
|
+
*/
|
|
15
|
+
const noColor = {
|
|
16
|
+
green: identity,
|
|
17
|
+
dim: identity,
|
|
18
|
+
red: identity,
|
|
19
|
+
bold: identity,
|
|
20
|
+
yellow: identity,
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Create a logger instance with the given options.
|
|
24
|
+
*
|
|
25
|
+
* Output format per CONTEXT.md (human-readable):
|
|
26
|
+
* - file: green " +" prefix + relative path
|
|
27
|
+
* - excluded: dim " -" prefix + path + reason (when shown)
|
|
28
|
+
* - summary: bold count + dim excluded count
|
|
29
|
+
* - warn: yellow "Warning:" prefix
|
|
30
|
+
* - error: red "Error:" prefix
|
|
31
|
+
*
|
|
32
|
+
* @param options - Logger configuration
|
|
33
|
+
* @returns Logger instance
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const log = createLogger({
|
|
38
|
+
* verbose: true,
|
|
39
|
+
* quiet: false,
|
|
40
|
+
* colors: true,
|
|
41
|
+
* showExcluded: false,
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* log.file('src/index.ts');
|
|
45
|
+
* log.summary(42, 10);
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export function createLogger(options) {
|
|
49
|
+
const { verbose, quiet, colors, showExcluded } = options;
|
|
50
|
+
// Select color functions based on colors option
|
|
51
|
+
const c = colors ? pc : noColor;
|
|
52
|
+
return {
|
|
53
|
+
info(message) {
|
|
54
|
+
if (quiet)
|
|
55
|
+
return;
|
|
56
|
+
console.log(message);
|
|
57
|
+
},
|
|
58
|
+
file(path) {
|
|
59
|
+
if (quiet)
|
|
60
|
+
return;
|
|
61
|
+
if (!verbose)
|
|
62
|
+
return;
|
|
63
|
+
console.log(c.green(' +') + ' ' + path);
|
|
64
|
+
},
|
|
65
|
+
excluded(path, reason, filter) {
|
|
66
|
+
if (quiet)
|
|
67
|
+
return;
|
|
68
|
+
if (!showExcluded)
|
|
69
|
+
return;
|
|
70
|
+
console.log(c.dim(' -') + ' ' + path + c.dim(` (${reason}: ${filter})`));
|
|
71
|
+
},
|
|
72
|
+
summary(included, excluded) {
|
|
73
|
+
if (quiet)
|
|
74
|
+
return;
|
|
75
|
+
console.log(c.bold(`\nDiscovered ${included} files`) +
|
|
76
|
+
c.dim(` (${excluded} excluded)`));
|
|
77
|
+
},
|
|
78
|
+
warn(message) {
|
|
79
|
+
if (quiet)
|
|
80
|
+
return;
|
|
81
|
+
console.warn(c.yellow('Warning: ') + message);
|
|
82
|
+
},
|
|
83
|
+
error(message) {
|
|
84
|
+
// Error is always shown, even in quiet mode
|
|
85
|
+
console.error(c.red('Error: ') + message);
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create a silent logger that produces no output.
|
|
91
|
+
*
|
|
92
|
+
* Useful for testing or programmatic usage.
|
|
93
|
+
*
|
|
94
|
+
* @returns Logger instance with all no-op methods
|
|
95
|
+
*/
|
|
96
|
+
export function createSilentLogger() {
|
|
97
|
+
const noop = () => { };
|
|
98
|
+
return {
|
|
99
|
+
info: noop,
|
|
100
|
+
file: noop,
|
|
101
|
+
excluded: noop,
|
|
102
|
+
summary: noop,
|
|
103
|
+
warn: noop,
|
|
104
|
+
error: noop,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/output/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAmE5B;;GAEG;AACH,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC;AAE1C;;GAEG;AACH,MAAM,OAAO,GAAmB;IAC9B,KAAK,EAAE,QAAQ;IACf,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAEzD,gDAAgD;IAChD,MAAM,CAAC,GAAmB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAEhD,OAAO;QACL,IAAI,CAAC,OAAe;YAClB,IAAI,KAAK;gBAAE,OAAO;YAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,IAAY;YACf,IAAI,KAAK;gBAAE,OAAO;YAClB,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;QAC3C,CAAC;QAED,QAAQ,CAAC,IAAY,EAAE,MAAc,EAAE,MAAc;YACnD,IAAI,KAAK;gBAAE,OAAO;YAClB,IAAI,CAAC,YAAY;gBAAE,OAAO;YAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,CAAC,QAAgB,EAAE,QAAgB;YACxC,IAAI,KAAK;gBAAE,OAAO;YAClB,OAAO,CAAC,GAAG,CACT,CAAC,CAAC,IAAI,CAAC,gBAAgB,QAAQ,QAAQ,CAAC;gBACtC,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,YAAY,CAAC,CACnC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAe;YAClB,IAAI,KAAK;gBAAE,OAAO;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,CAAC,OAAe;YACnB,4CAA4C;YAC5C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,IAAI,GAAG,GAAS,EAAE,GAAE,CAAC,CAAC;IAC5B,OAAO;QACL,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { StateDatabase } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Opens the state database, applying migrations if needed.
|
|
4
|
+
* Uses WAL mode for performance.
|
|
5
|
+
*
|
|
6
|
+
* @param dbPath - Path to the SQLite database file
|
|
7
|
+
*/
|
|
8
|
+
export declare function openDatabase(dbPath: string): StateDatabase;
|
|
9
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/state/database.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAyB,aAAa,EAAE,MAAM,YAAY,CAAC;AAGvE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAuF1D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite state database with prepared statements
|
|
3
|
+
*/
|
|
4
|
+
import Database from 'better-sqlite3';
|
|
5
|
+
import { CURRENT_SCHEMA_VERSION, migrateSchema } from './migrations.js';
|
|
6
|
+
/**
|
|
7
|
+
* Opens the state database, applying migrations if needed.
|
|
8
|
+
* Uses WAL mode for performance.
|
|
9
|
+
*
|
|
10
|
+
* @param dbPath - Path to the SQLite database file
|
|
11
|
+
*/
|
|
12
|
+
export function openDatabase(dbPath) {
|
|
13
|
+
const db = new Database(dbPath);
|
|
14
|
+
// Enable WAL mode for better concurrent read performance
|
|
15
|
+
db.pragma('journal_mode = WAL');
|
|
16
|
+
// Check and apply migrations
|
|
17
|
+
const version = db.pragma('user_version', { simple: true });
|
|
18
|
+
if (version < CURRENT_SCHEMA_VERSION) {
|
|
19
|
+
migrateSchema(db, version, CURRENT_SCHEMA_VERSION);
|
|
20
|
+
}
|
|
21
|
+
// Prepared statements for performance
|
|
22
|
+
const getFileStmt = db.prepare('SELECT path, content_hash, sum_generated_at, last_analyzed_commit FROM files WHERE path = ?');
|
|
23
|
+
const upsertFileStmt = db.prepare(`
|
|
24
|
+
INSERT INTO files (path, content_hash, sum_generated_at, last_analyzed_commit)
|
|
25
|
+
VALUES (?, ?, ?, ?)
|
|
26
|
+
ON CONFLICT(path) DO UPDATE SET
|
|
27
|
+
content_hash = excluded.content_hash,
|
|
28
|
+
sum_generated_at = excluded.sum_generated_at,
|
|
29
|
+
last_analyzed_commit = excluded.last_analyzed_commit
|
|
30
|
+
`);
|
|
31
|
+
const deleteFileStmt = db.prepare('DELETE FROM files WHERE path = ?');
|
|
32
|
+
const getAllFilesStmt = db.prepare('SELECT path, content_hash, sum_generated_at, last_analyzed_commit FROM files');
|
|
33
|
+
const getLastRunStmt = db.prepare('SELECT id, commit_hash, completed_at, files_analyzed, files_skipped FROM runs ORDER BY id DESC LIMIT 1');
|
|
34
|
+
const insertRunStmt = db.prepare(`
|
|
35
|
+
INSERT INTO runs (commit_hash, completed_at, files_analyzed, files_skipped)
|
|
36
|
+
VALUES (?, ?, ?, ?)
|
|
37
|
+
`);
|
|
38
|
+
return {
|
|
39
|
+
getFile(path) {
|
|
40
|
+
return getFileStmt.get(path);
|
|
41
|
+
},
|
|
42
|
+
upsertFile(record) {
|
|
43
|
+
upsertFileStmt.run(record.path, record.content_hash, record.sum_generated_at, record.last_analyzed_commit);
|
|
44
|
+
},
|
|
45
|
+
deleteFile(path) {
|
|
46
|
+
deleteFileStmt.run(path);
|
|
47
|
+
},
|
|
48
|
+
getAllFiles() {
|
|
49
|
+
return getAllFilesStmt.all();
|
|
50
|
+
},
|
|
51
|
+
getLastRun() {
|
|
52
|
+
return getLastRunStmt.get();
|
|
53
|
+
},
|
|
54
|
+
insertRun(run) {
|
|
55
|
+
const result = insertRunStmt.run(run.commit_hash, run.completed_at, run.files_analyzed, run.files_skipped);
|
|
56
|
+
return Number(result.lastInsertRowid);
|
|
57
|
+
},
|
|
58
|
+
close() {
|
|
59
|
+
db.close();
|
|
60
|
+
},
|
|
61
|
+
getDb() {
|
|
62
|
+
return db;
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/state/database.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAExE;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,yDAAyD;IACzD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEhC,6BAA6B;IAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAW,CAAC;IACtE,IAAI,OAAO,GAAG,sBAAsB,EAAE,CAAC;QACrC,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC;IACrD,CAAC;IAED,sCAAsC;IACtC,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAC5B,6FAA6F,CAC9F,CAAC;IAEF,MAAM,cAAc,GAAG,EAAE,CAAC,OAAO,CAAiD;;;;;;;GAOjF,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,EAAE,CAAC,OAAO,CAC/B,kCAAkC,CACnC,CAAC;IAEF,MAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAChC,8EAA8E,CAC/E,CAAC;IAEF,MAAM,cAAc,GAAG,EAAE,CAAC,OAAO,CAC/B,wGAAwG,CACzG,CAAC;IAEF,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAAmC;;;GAGlE,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,CAAC,IAAY;YAClB,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,UAAU,CAAC,MAAkB;YAC3B,cAAc,CAAC,GAAG,CAChB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,oBAAoB,CAC5B,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,IAAY;YACrB,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,WAAW;YACT,OAAO,eAAe,CAAC,GAAG,EAAE,CAAC;QAC/B,CAAC;QAED,UAAU;YACR,OAAO,cAAc,CAAC,GAAG,EAAE,CAAC;QAC9B,CAAC;QAED,SAAS,CAAC,GAA0B;YAClC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAC9B,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,aAAa,CAClB,CAAC;YACF,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACxC,CAAC;QAED,KAAK;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;QAED,KAAK;YACH,OAAO,EAAE,CAAC;QACZ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State management module
|
|
3
|
+
*
|
|
4
|
+
* Provides SQLite-based state persistence for tracking file generation.
|
|
5
|
+
*/
|
|
6
|
+
export { openDatabase } from './database.js';
|
|
7
|
+
export type { FileRecord, RunRecord, StateDatabase } from './types.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema migrations using SQLite user_version pragma
|
|
3
|
+
*/
|
|
4
|
+
import type Database from 'better-sqlite3';
|
|
5
|
+
/** Current schema version */
|
|
6
|
+
export declare const CURRENT_SCHEMA_VERSION = 1;
|
|
7
|
+
/**
|
|
8
|
+
* Apply schema migrations from `fromVersion` to `toVersion`.
|
|
9
|
+
* Uses transaction for atomicity.
|
|
10
|
+
*/
|
|
11
|
+
export declare function migrateSchema(db: Database.Database, fromVersion: number, toVersion: number): void;
|
|
12
|
+
//# sourceMappingURL=migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/state/migrations.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,6BAA6B;AAC7B,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,IAAI,CAoCN"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Current schema version */
|
|
2
|
+
export const CURRENT_SCHEMA_VERSION = 1;
|
|
3
|
+
/**
|
|
4
|
+
* Apply schema migrations from `fromVersion` to `toVersion`.
|
|
5
|
+
* Uses transaction for atomicity.
|
|
6
|
+
*/
|
|
7
|
+
export function migrateSchema(db, fromVersion, toVersion) {
|
|
8
|
+
const migrate = db.transaction(() => {
|
|
9
|
+
if (fromVersion < 1) {
|
|
10
|
+
// Initial schema
|
|
11
|
+
db.exec(`
|
|
12
|
+
CREATE TABLE files (
|
|
13
|
+
path TEXT PRIMARY KEY,
|
|
14
|
+
content_hash TEXT NOT NULL,
|
|
15
|
+
sum_generated_at TEXT,
|
|
16
|
+
last_analyzed_commit TEXT
|
|
17
|
+
)
|
|
18
|
+
`);
|
|
19
|
+
db.exec(`
|
|
20
|
+
CREATE TABLE runs (
|
|
21
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
22
|
+
commit_hash TEXT NOT NULL,
|
|
23
|
+
completed_at TEXT NOT NULL,
|
|
24
|
+
files_analyzed INTEGER NOT NULL,
|
|
25
|
+
files_skipped INTEGER NOT NULL
|
|
26
|
+
)
|
|
27
|
+
`);
|
|
28
|
+
// Index for faster queries by commit
|
|
29
|
+
db.exec(`
|
|
30
|
+
CREATE INDEX idx_runs_commit ON runs(commit_hash)
|
|
31
|
+
`);
|
|
32
|
+
}
|
|
33
|
+
// Future migrations would go here:
|
|
34
|
+
// if (fromVersion < 2) { ... }
|
|
35
|
+
db.pragma(`user_version = ${toVersion}`);
|
|
36
|
+
});
|
|
37
|
+
migrate();
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/state/migrations.ts"],"names":[],"mappings":"AAKA,6BAA6B;AAC7B,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,EAAqB,EACrB,WAAmB,EACnB,SAAiB;IAEjB,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAClC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,iBAAiB;YACjB,EAAE,CAAC,IAAI,CAAC;;;;;;;OAOP,CAAC,CAAC;YAEH,EAAE,CAAC,IAAI,CAAC;;;;;;;;OAQP,CAAC,CAAC;YAEH,qCAAqC;YACrC,EAAE,CAAC,IAAI,CAAC;;OAEP,CAAC,CAAC;QACL,CAAC;QAED,mCAAmC;QACnC,+BAA+B;QAE/B,EAAE,CAAC,MAAM,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,CAAC;AACZ,CAAC"}
|