@rasensio/aidlc 1.3.0 → 1.5.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.
Files changed (98) hide show
  1. package/dist/commands/claim.d.ts +8 -6
  2. package/dist/commands/claim.d.ts.map +1 -1
  3. package/dist/commands/claim.js +49 -41
  4. package/dist/commands/claim.js.map +1 -1
  5. package/dist/commands/gate.d.ts.map +1 -1
  6. package/dist/commands/gate.js +17 -0
  7. package/dist/commands/gate.js.map +1 -1
  8. package/dist/commands/init.js +13 -0
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/start.d.ts.map +1 -1
  11. package/dist/commands/start.js +145 -4
  12. package/dist/commands/start.js.map +1 -1
  13. package/dist/commands/status.d.ts.map +1 -1
  14. package/dist/commands/status.js +109 -3
  15. package/dist/commands/status.js.map +1 -1
  16. package/dist/commands/transition.d.ts.map +1 -1
  17. package/dist/commands/transition.js +39 -2
  18. package/dist/commands/transition.js.map +1 -1
  19. package/dist/commands/update.d.ts.map +1 -1
  20. package/dist/commands/update.js +13 -0
  21. package/dist/commands/update.js.map +1 -1
  22. package/dist/concurrency/claim-store.d.ts +44 -0
  23. package/dist/concurrency/claim-store.d.ts.map +1 -0
  24. package/dist/concurrency/claim-store.js +273 -0
  25. package/dist/concurrency/claim-store.js.map +1 -0
  26. package/dist/concurrency/common-dir.d.ts +25 -0
  27. package/dist/concurrency/common-dir.d.ts.map +1 -0
  28. package/dist/concurrency/common-dir.js +81 -0
  29. package/dist/concurrency/common-dir.js.map +1 -0
  30. package/dist/concurrency/detect.d.ts +23 -0
  31. package/dist/concurrency/detect.d.ts.map +1 -0
  32. package/dist/concurrency/detect.js +59 -0
  33. package/dist/concurrency/detect.js.map +1 -0
  34. package/dist/concurrency/gitattributes.d.ts +23 -0
  35. package/dist/concurrency/gitattributes.d.ts.map +1 -0
  36. package/dist/concurrency/gitattributes.js +52 -0
  37. package/dist/concurrency/gitattributes.js.map +1 -0
  38. package/dist/concurrency/registry.d.ts +48 -0
  39. package/dist/concurrency/registry.d.ts.map +1 -0
  40. package/dist/concurrency/registry.js +163 -0
  41. package/dist/concurrency/registry.js.map +1 -0
  42. package/dist/concurrency/session-id.d.ts +22 -0
  43. package/dist/concurrency/session-id.d.ts.map +1 -0
  44. package/dist/concurrency/session-id.js +35 -0
  45. package/dist/concurrency/session-id.js.map +1 -0
  46. package/dist/concurrency/types.d.ts +39 -0
  47. package/dist/concurrency/types.d.ts.map +1 -0
  48. package/dist/concurrency/types.js +12 -0
  49. package/dist/concurrency/types.js.map +1 -0
  50. package/dist/concurrency/worktree.d.ts +49 -0
  51. package/dist/concurrency/worktree.d.ts.map +1 -0
  52. package/dist/concurrency/worktree.js +169 -0
  53. package/dist/concurrency/worktree.js.map +1 -0
  54. package/dist/core/gate.d.ts +7 -0
  55. package/dist/core/gate.d.ts.map +1 -1
  56. package/dist/core/gate.js.map +1 -1
  57. package/dist/core/types.d.ts +16 -1
  58. package/dist/core/types.d.ts.map +1 -1
  59. package/dist/cost/ledger.d.ts.map +1 -1
  60. package/dist/cost/ledger.js +6 -0
  61. package/dist/cost/ledger.js.map +1 -1
  62. package/dist/cost/sessions.d.ts +6 -1
  63. package/dist/cost/sessions.d.ts.map +1 -1
  64. package/dist/cost/sessions.js +10 -1
  65. package/dist/cost/sessions.js.map +1 -1
  66. package/dist/traceability/cache.d.ts +21 -0
  67. package/dist/traceability/cache.d.ts.map +1 -0
  68. package/dist/traceability/cache.js +106 -0
  69. package/dist/traceability/cache.js.map +1 -0
  70. package/dist/traceability/coverage-block.d.ts +21 -0
  71. package/dist/traceability/coverage-block.d.ts.map +1 -0
  72. package/dist/traceability/coverage-block.js +41 -0
  73. package/dist/traceability/coverage-block.js.map +1 -0
  74. package/dist/traceability/gate-criterion.d.ts +34 -0
  75. package/dist/traceability/gate-criterion.d.ts.map +1 -0
  76. package/dist/traceability/gate-criterion.js +128 -0
  77. package/dist/traceability/gate-criterion.js.map +1 -0
  78. package/dist/traceability/matrix.d.ts +35 -0
  79. package/dist/traceability/matrix.d.ts.map +1 -0
  80. package/dist/traceability/matrix.js +93 -0
  81. package/dist/traceability/matrix.js.map +1 -0
  82. package/dist/traceability/parser.d.ts +27 -0
  83. package/dist/traceability/parser.d.ts.map +1 -0
  84. package/dist/traceability/parser.js +101 -0
  85. package/dist/traceability/parser.js.map +1 -0
  86. package/dist/traceability/scanner.d.ts +62 -0
  87. package/dist/traceability/scanner.d.ts.map +1 -0
  88. package/dist/traceability/scanner.js +198 -0
  89. package/dist/traceability/scanner.js.map +1 -0
  90. package/dist/traceability/types.d.ts +77 -0
  91. package/dist/traceability/types.d.ts.map +1 -0
  92. package/dist/traceability/types.js +8 -0
  93. package/dist/traceability/types.js.map +1 -0
  94. package/package.json +2 -2
  95. package/dist/commands/setup.d.ts +0 -24
  96. package/dist/commands/setup.d.ts.map +0 -1
  97. package/dist/commands/setup.js +0 -262
  98. package/dist/commands/setup.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rasensio/aidlc",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "AI Development Lifecycle Framework — structured lifecycle guidance for AI coding agents across platforms",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",
@@ -24,7 +24,7 @@
24
24
  "commander": "15.0.0",
25
25
  "picomatch": "4.0.5",
26
26
  "yaml": "2.9.0",
27
- "@rasensio/aidlc-content": "1.3.0"
27
+ "@rasensio/aidlc-content": "1.5.0"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/node": "22.15.32",
@@ -1,24 +0,0 @@
1
- /**
2
- * `aidlc setup` command — interactive setup or update of AIDLC configuration.
3
- *
4
- * Behavior:
5
- * - Detect existing `.aidlc/config.yaml` → update mode vs fresh-setup mode.
6
- * - In interactive mode: use @clack/prompts to collect SetupAnswers.
7
- * - In non-interactive mode (`--non-interactive`): use empty answers (preserve
8
- * existing or apply defaults).
9
- * - Call `computeSetup(existingConfig, answers)` to produce the config.
10
- * - Write the result to `.aidlc/config.yaml` using `saveYaml`.
11
- * - Run `aidlc init` for each configured platform.
12
- * - Run `aidlc discover` to generate context docs.
13
- * - Print summary.
14
- *
15
- * Requirements: 21.1, 21.9, 7.8
16
- *
17
- * @module
18
- */
19
- import { Command } from 'commander';
20
- /**
21
- * Register the `aidlc setup` command on the given commander program.
22
- */
23
- export declare function registerSetup(program: Command): void;
24
- //# sourceMappingURL=setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsLpC;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQpD"}
@@ -1,262 +0,0 @@
1
- /**
2
- * `aidlc setup` command — interactive setup or update of AIDLC configuration.
3
- *
4
- * Behavior:
5
- * - Detect existing `.aidlc/config.yaml` → update mode vs fresh-setup mode.
6
- * - In interactive mode: use @clack/prompts to collect SetupAnswers.
7
- * - In non-interactive mode (`--non-interactive`): use empty answers (preserve
8
- * existing or apply defaults).
9
- * - Call `computeSetup(existingConfig, answers)` to produce the config.
10
- * - Write the result to `.aidlc/config.yaml` using `saveYaml`.
11
- * - Run `aidlc init` for each configured platform.
12
- * - Run `aidlc discover` to generate context docs.
13
- * - Print summary.
14
- *
15
- * Requirements: 21.1, 21.9, 7.8
16
- *
17
- * @module
18
- */
19
- import { Command } from 'commander';
20
- import { existsSync } from 'node:fs';
21
- import { join } from 'node:path';
22
- import * as clack from '@clack/prompts';
23
- import { computeSetup } from '../setup/setup-compute.js';
24
- import { loadYaml, saveYaml } from '../state/yaml-helpers.js';
25
- // ---------------------------------------------------------------------------
26
- // Constants
27
- // ---------------------------------------------------------------------------
28
- /**
29
- * Mapping from complexity to default scope and template (Req 21.5).
30
- */
31
- const COMPLEXITY_DEFAULTS = {
32
- simple: { scope: 'micro', template: 'micro-task' },
33
- moderate: { scope: 'standard', template: 'quick-feature' },
34
- complex: { scope: 'full', template: 'full-feature' },
35
- };
36
- // ---------------------------------------------------------------------------
37
- // Helpers
38
- // ---------------------------------------------------------------------------
39
- /**
40
- * Load existing config from `.aidlc/config.yaml`, or null if it doesn't exist.
41
- */
42
- function loadExistingConfig(projectRoot) {
43
- const configPath = join(projectRoot, '.aidlc', 'config.yaml');
44
- if (!existsSync(configPath)) {
45
- return null;
46
- }
47
- try {
48
- return loadYaml(configPath);
49
- }
50
- catch {
51
- // Malformed config → treat as fresh setup
52
- return null;
53
- }
54
- }
55
- /**
56
- * Collect answers interactively using @clack/prompts.
57
- */
58
- async function collectInteractiveAnswers(existing) {
59
- clack.intro('aidlc setup');
60
- if (existing) {
61
- clack.note(`Existing configuration found. Current platforms: ${existing.platforms.join(', ') || 'none'}\n` +
62
- `Scope: ${existing.defaults.scope}, Template: ${existing.defaults.template}`, 'Update mode');
63
- }
64
- // Project type
65
- const projectType = await clack.select({
66
- message: 'What kind of project is this?',
67
- options: [
68
- { value: 'web-app', label: 'web-app', hint: 'Frontend or full-stack web application (React, Next.js, etc.)' },
69
- { value: 'api', label: 'api', hint: 'Backend service or REST/GraphQL API' },
70
- { value: 'cli', label: 'cli', hint: 'Command-line tool or terminal utility' },
71
- { value: 'library', label: 'library', hint: 'Reusable package or SDK consumed by other projects' },
72
- { value: 'service', label: 'service', hint: 'Background worker, MCP server, daemon, or long-running process' },
73
- { value: 'monorepo', label: 'monorepo', hint: 'Multiple packages/apps in one repo (apps, APIs, libraries, etc.)' },
74
- { value: 'other', label: 'other', hint: 'Something else — docs site, infra config, or anything not listed above' },
75
- ],
76
- });
77
- if (clack.isCancel(projectType))
78
- return null;
79
- // Complexity
80
- const complexity = await clack.select({
81
- message: 'How complex is this project? (determines which lifecycle phases are used)',
82
- options: [
83
- {
84
- value: 'simple',
85
- label: 'simple',
86
- hint: 'Small tasks — skip straight to implementation and testing',
87
- },
88
- {
89
- value: 'moderate',
90
- label: 'moderate',
91
- hint: 'Typical features — includes requirements, design, implementation, and testing',
92
- },
93
- {
94
- value: 'complex',
95
- label: 'complex',
96
- hint: 'Large features — full lifecycle from ideation through maintenance with review gates',
97
- },
98
- ],
99
- });
100
- if (clack.isCancel(complexity))
101
- return null;
102
- // Platforms
103
- const platforms = await clack.multiselect({
104
- message: 'Which AI coding platforms will you use? (generates config files for each)',
105
- options: [
106
- { value: 'claude-code', label: 'claude-code', hint: 'Anthropic Claude Code (CLAUDE.md)' },
107
- { value: 'codex', label: 'codex', hint: 'OpenAI Codex CLI (AGENTS.md)' },
108
- { value: 'cursor', label: 'cursor', hint: 'Cursor IDE (.cursor/rules/)' },
109
- { value: 'kiro', label: 'kiro', hint: 'Kiro IDE (.kiro/steering/)' },
110
- { value: 'windsurf', label: 'windsurf', hint: 'Windsurf IDE (.windsurfrules)' },
111
- ],
112
- required: false,
113
- });
114
- if (clack.isCancel(platforms))
115
- return null;
116
- // Default template
117
- const template = await clack.select({
118
- message: 'Default workflow template (defines the phases and artifacts for each lifecycle run):',
119
- options: [
120
- {
121
- value: 'micro-task',
122
- label: 'micro-task',
123
- hint: 'Minimal: implementation → testing only',
124
- },
125
- {
126
- value: 'quick-feature',
127
- label: 'quick-feature',
128
- hint: 'Standard: requirements → design → implementation → testing → deployment',
129
- },
130
- {
131
- value: 'full-feature',
132
- label: 'full-feature',
133
- hint: 'Complete: ideation through maintenance with adversarial review gates',
134
- },
135
- {
136
- value: 'bugfix',
137
- label: 'bugfix',
138
- hint: 'Bug fixes: reproduction → requirements → implementation → testing → deployment',
139
- },
140
- {
141
- value: 'spike',
142
- label: 'spike',
143
- hint: 'Research/exploration: ideation → findings documentation',
144
- },
145
- ],
146
- initialValue: COMPLEXITY_DEFAULTS[complexity]?.template ?? 'micro-task',
147
- });
148
- if (clack.isCancel(template))
149
- return null;
150
- // Default scope
151
- const scope = await clack.select({
152
- message: 'Default scope (controls how many lifecycle phases are active per run):',
153
- options: [
154
- {
155
- value: 'full',
156
- label: 'full',
157
- hint: 'All phases enabled — ideation, requirements, design, implementation, testing, deployment, maintenance',
158
- },
159
- {
160
- value: 'standard',
161
- label: 'standard',
162
- hint: 'Core phases — requirements, design, implementation, testing, deployment',
163
- },
164
- {
165
- value: 'micro',
166
- label: 'micro',
167
- hint: 'Minimal — implementation and testing only (fastest)',
168
- },
169
- ],
170
- initialValue: COMPLEXITY_DEFAULTS[complexity]?.scope ?? 'micro',
171
- });
172
- if (clack.isCancel(scope))
173
- return null;
174
- return {
175
- projectType: projectType,
176
- complexity: complexity,
177
- platforms: platforms,
178
- template: template,
179
- scope: scope,
180
- };
181
- }
182
- // ---------------------------------------------------------------------------
183
- // Command registration
184
- // ---------------------------------------------------------------------------
185
- /**
186
- * Register the `aidlc setup` command on the given commander program.
187
- */
188
- export function registerSetup(program) {
189
- program
190
- .command('setup')
191
- .description('Interactive setup or update of AIDLC configuration')
192
- .option('--non-interactive', 'Skip prompts, use defaults or existing config')
193
- .action(async (opts) => {
194
- await runSetup(opts);
195
- });
196
- }
197
- // ---------------------------------------------------------------------------
198
- // Core logic
199
- // ---------------------------------------------------------------------------
200
- async function runSetup(opts) {
201
- const projectRoot = process.cwd();
202
- const configPath = join(projectRoot, '.aidlc', 'config.yaml');
203
- // Load existing config
204
- const existing = loadExistingConfig(projectRoot);
205
- const isUpdate = existing !== null;
206
- let answers;
207
- if (opts.nonInteractive) {
208
- // Non-interactive: use empty answers (preserve existing or apply defaults)
209
- answers = {};
210
- }
211
- else {
212
- // Interactive: collect answers via prompts
213
- const collected = await collectInteractiveAnswers(existing);
214
- if (collected === null) {
215
- process.stderr.write('Setup cancelled.\n');
216
- process.exitCode = 1;
217
- return;
218
- }
219
- answers = collected;
220
- }
221
- // Compute the resulting config
222
- const config = computeSetup(existing, answers);
223
- // Write `.aidlc/config.yaml`
224
- saveYaml(configPath, config);
225
- // Run `aidlc init` for each configured platform
226
- if (config.platforms.length > 0) {
227
- const { registerInit } = await import('./init.js');
228
- for (const platform of config.platforms) {
229
- process.stderr.write(`Running init for platform: ${platform}\n`);
230
- const initProgram = new Command();
231
- initProgram.exitOverride();
232
- registerInit(initProgram);
233
- try {
234
- await initProgram.parseAsync(['init', '--platform', platform], { from: 'user' });
235
- }
236
- catch {
237
- // commander throws on exitOverride; non-fatal for setup
238
- }
239
- }
240
- }
241
- // Run discover to generate context docs
242
- process.stderr.write('Running discover...\n');
243
- try {
244
- const { registerDiscover } = await import('./discover.js');
245
- const discoverProgram = new Command();
246
- discoverProgram.exitOverride();
247
- registerDiscover(discoverProgram);
248
- await discoverProgram.parseAsync(['discover'], { from: 'user' });
249
- }
250
- catch {
251
- // Non-fatal: discover may fail on empty projects
252
- }
253
- // Print summary
254
- process.stdout.write(`\n${isUpdate ? 'Configuration updated' : 'Setup complete'}:\n`);
255
- process.stdout.write(` Config: ${configPath}\n`);
256
- process.stdout.write(` Scope: ${config.defaults.scope}\n`);
257
- process.stdout.write(` Template: ${config.defaults.template}\n`);
258
- process.stdout.write(` Platforms: ${config.platforms.length > 0 ? config.platforms.join(', ') : 'none'}\n`);
259
- process.stdout.write(` Actions: ${config.actions.length > 0 ? config.actions.join(', ') : 'none'}\n`);
260
- process.stdout.write('\n');
261
- }
262
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}