@rasensio/aidlc 0.1.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/README.md +251 -0
- package/capabilities/claude-code.yaml +9 -0
- package/capabilities/codex.yaml +8 -0
- package/capabilities/cursor.yaml +8 -0
- package/capabilities/kiro.yaml +9 -0
- package/capabilities/windsurf.yaml +8 -0
- package/ci/aidlc-gate.yml +100 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +39 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add-action.d.ts +83 -0
- package/dist/commands/add-action.d.ts.map +1 -0
- package/dist/commands/add-action.js +437 -0
- package/dist/commands/add-action.js.map +1 -0
- package/dist/commands/continue.d.ts +23 -0
- package/dist/commands/continue.d.ts.map +1 -0
- package/dist/commands/continue.js +238 -0
- package/dist/commands/continue.js.map +1 -0
- package/dist/commands/discover.d.ts +19 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +85 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/docs.d.ts +25 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +282 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/gate.d.ts +25 -0
- package/dist/commands/gate.d.ts.map +1 -0
- package/dist/commands/gate.js +168 -0
- package/dist/commands/gate.js.map +1 -0
- package/dist/commands/init.d.ts +24 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +187 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/review.d.ts +60 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +264 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/setup.d.ts +24 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +206 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +27 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +243 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +25 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +263 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/transition.d.ts +30 -0
- package/dist/commands/transition.d.ts.map +1 -0
- package/dist/commands/transition.js +353 -0
- package/dist/commands/transition.js.map +1 -0
- package/dist/compile/adapters/claude-code.d.ts +24 -0
- package/dist/compile/adapters/claude-code.d.ts.map +1 -0
- package/dist/compile/adapters/claude-code.js +271 -0
- package/dist/compile/adapters/claude-code.js.map +1 -0
- package/dist/compile/adapters/codex.d.ts +19 -0
- package/dist/compile/adapters/codex.d.ts.map +1 -0
- package/dist/compile/adapters/codex.js +157 -0
- package/dist/compile/adapters/codex.js.map +1 -0
- package/dist/compile/adapters/cursor.d.ts +21 -0
- package/dist/compile/adapters/cursor.d.ts.map +1 -0
- package/dist/compile/adapters/cursor.js +181 -0
- package/dist/compile/adapters/cursor.js.map +1 -0
- package/dist/compile/adapters/index.d.ts +16 -0
- package/dist/compile/adapters/index.d.ts.map +1 -0
- package/dist/compile/adapters/index.js +26 -0
- package/dist/compile/adapters/index.js.map +1 -0
- package/dist/compile/adapters/kiro.d.ts +24 -0
- package/dist/compile/adapters/kiro.d.ts.map +1 -0
- package/dist/compile/adapters/kiro.js +222 -0
- package/dist/compile/adapters/kiro.js.map +1 -0
- package/dist/compile/adapters/windsurf.d.ts +25 -0
- package/dist/compile/adapters/windsurf.d.ts.map +1 -0
- package/dist/compile/adapters/windsurf.js +242 -0
- package/dist/compile/adapters/windsurf.js.map +1 -0
- package/dist/compile/install-plan.d.ts +49 -0
- package/dist/compile/install-plan.d.ts.map +1 -0
- package/dist/compile/install-plan.js +112 -0
- package/dist/compile/install-plan.js.map +1 -0
- package/dist/compile/loaders.d.ts +81 -0
- package/dist/compile/loaders.d.ts.map +1 -0
- package/dist/compile/loaders.js +293 -0
- package/dist/compile/loaders.js.map +1 -0
- package/dist/compile/merger.d.ts +32 -0
- package/dist/compile/merger.d.ts.map +1 -0
- package/dist/compile/merger.js +60 -0
- package/dist/compile/merger.js.map +1 -0
- package/dist/core/gate.d.ts +36 -0
- package/dist/core/gate.d.ts.map +1 -0
- package/dist/core/gate.js +97 -0
- package/dist/core/gate.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lifecycle.d.ts +89 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +356 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/template-resolver.d.ts +56 -0
- package/dist/core/template-resolver.d.ts.map +1 -0
- package/dist/core/template-resolver.js +261 -0
- package/dist/core/template-resolver.js.map +1 -0
- package/dist/core/types.d.ts +527 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +8 -0
- package/dist/core/types.js.map +1 -0
- package/dist/discover/scanner.d.ts +58 -0
- package/dist/discover/scanner.d.ts.map +1 -0
- package/dist/discover/scanner.js +772 -0
- package/dist/discover/scanner.js.map +1 -0
- package/dist/events/event-bus.d.ts +53 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +263 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/events/plugin-hooks.d.ts +44 -0
- package/dist/events/plugin-hooks.d.ts.map +1 -0
- package/dist/events/plugin-hooks.js +225 -0
- package/dist/events/plugin-hooks.js.map +1 -0
- package/dist/orchestrator/budget-packer.d.ts +57 -0
- package/dist/orchestrator/budget-packer.d.ts.map +1 -0
- package/dist/orchestrator/budget-packer.js +70 -0
- package/dist/orchestrator/budget-packer.js.map +1 -0
- package/dist/orchestrator/config.d.ts +43 -0
- package/dist/orchestrator/config.d.ts.map +1 -0
- package/dist/orchestrator/config.js +109 -0
- package/dist/orchestrator/config.js.map +1 -0
- package/dist/orchestrator/endpoint-clients.d.ts +23 -0
- package/dist/orchestrator/endpoint-clients.d.ts.map +1 -0
- package/dist/orchestrator/endpoint-clients.js +129 -0
- package/dist/orchestrator/endpoint-clients.js.map +1 -0
- package/dist/orchestrator/orchestrator-loop.d.ts +93 -0
- package/dist/orchestrator/orchestrator-loop.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator-loop.js +185 -0
- package/dist/orchestrator/orchestrator-loop.js.map +1 -0
- package/dist/security/confirmation.d.ts +90 -0
- package/dist/security/confirmation.d.ts.map +1 -0
- package/dist/security/confirmation.js +140 -0
- package/dist/security/confirmation.js.map +1 -0
- package/dist/setup/setup-compute.d.ts +54 -0
- package/dist/setup/setup-compute.d.ts.map +1 -0
- package/dist/setup/setup-compute.js +66 -0
- package/dist/setup/setup-compute.js.map +1 -0
- package/dist/state/snapshot-store.d.ts +79 -0
- package/dist/state/snapshot-store.d.ts.map +1 -0
- package/dist/state/snapshot-store.js +164 -0
- package/dist/state/snapshot-store.js.map +1 -0
- package/dist/state/state-recovery.d.ts +87 -0
- package/dist/state/state-recovery.d.ts.map +1 -0
- package/dist/state/state-recovery.js +274 -0
- package/dist/state/state-recovery.js.map +1 -0
- package/dist/state/transition-log.d.ts +40 -0
- package/dist/state/transition-log.d.ts.map +1 -0
- package/dist/state/transition-log.js +83 -0
- package/dist/state/transition-log.js.map +1 -0
- package/dist/state/yaml-helpers.d.ts +53 -0
- package/dist/state/yaml-helpers.d.ts.map +1 -0
- package/dist/state/yaml-helpers.js +110 -0
- package/dist/state/yaml-helpers.js.map +1 -0
- package/examples/.gitkeep +0 -0
- package/guidance/accessibility.md +67 -0
- package/guidance/api-conventions.md +124 -0
- package/guidance/index.yaml +7 -0
- package/guidance/secure-defaults.md +71 -0
- package/package.json +52 -0
- package/phases/.gitkeep +0 -0
- package/skills/00-overview.md +74 -0
- package/skills/10-ideation.md +45 -0
- package/skills/20-requirements.md +54 -0
- package/skills/30-design.md +57 -0
- package/skills/40-implementation.md +64 -0
- package/skills/50-testing.md +60 -0
- package/skills/60-deployment.md +63 -0
- package/skills/70-maintenance.md +56 -0
- package/skills/80-review.md +85 -0
- package/skills/81-continue.md +57 -0
- package/skills/82-add-action.md +71 -0
- package/templates/.gitkeep +0 -0
- package/templates/bugfix.yaml +14 -0
- package/templates/full-feature.yaml +44 -0
- package/templates/micro-task.yaml +11 -0
- package/templates/quick-feature.yaml +20 -0
- package/templates/spike.yaml +15 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kiro platform adapter for the AIDLC install pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Emits an InstallPlan that:
|
|
5
|
+
* 1. Copies canonical skill bodies to `.aidlc/skills/`
|
|
6
|
+
* 2. Generates `.kiro/skills/aidlc-<name>/SKILL.md` per skill with:
|
|
7
|
+
* - YAML frontmatter (name, description)
|
|
8
|
+
* - Body: activation directive (from capability map) + pointer to canonical skill
|
|
9
|
+
* 3. Generates a `merge-block` steering file `.kiro/steering/aidlc.md`
|
|
10
|
+
* (always-included, carries overview + context-doc references)
|
|
11
|
+
*
|
|
12
|
+
* Requirements: 1.1, 18.1
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Helpers
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
/**
|
|
20
|
+
* Convert a skill name to a safe directory name for .kiro/skills/.
|
|
21
|
+
* Kiro convention: lowercase, hyphens only, max 64 chars, prefixed with `aidlc-`.
|
|
22
|
+
*/
|
|
23
|
+
function toKiroDirName(name) {
|
|
24
|
+
const safe = name
|
|
25
|
+
.toLowerCase()
|
|
26
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
27
|
+
.replace(/-+/g, '-')
|
|
28
|
+
.replace(/^-|-$/g, '');
|
|
29
|
+
const prefixed = safe.startsWith('aidlc-') ? safe : `aidlc-${safe}`;
|
|
30
|
+
return prefixed.slice(0, 64);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolve the activation directive for a skill on this platform.
|
|
34
|
+
*
|
|
35
|
+
* Precedence (Req 18.3, 18.4, 18.6):
|
|
36
|
+
* 1. skill.meta.native_mode_hint['kiro'] if present
|
|
37
|
+
* 2. Capability map entry covering the skill's phase
|
|
38
|
+
* 3. null (no native directive)
|
|
39
|
+
*/
|
|
40
|
+
function resolveActivation(skill, caps) {
|
|
41
|
+
// 1. Per-skill native_mode_hint
|
|
42
|
+
const hint = skill.meta.native_mode_hint?.kiro;
|
|
43
|
+
if (hint) {
|
|
44
|
+
return hint;
|
|
45
|
+
}
|
|
46
|
+
// 2. Capability map entry covering this phase
|
|
47
|
+
if (caps?.capabilities) {
|
|
48
|
+
for (const entry of Object.values(caps.capabilities)) {
|
|
49
|
+
if (entry.phases.includes(skill.meta.phase)) {
|
|
50
|
+
return entry.activation;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Generate the SKILL.md content for a Kiro skill shim.
|
|
58
|
+
*/
|
|
59
|
+
function generateSkillShim(skill, activation) {
|
|
60
|
+
const lines = [];
|
|
61
|
+
// Frontmatter
|
|
62
|
+
lines.push('---');
|
|
63
|
+
lines.push(`name: ${toKiroDirName(skill.meta.name)}`);
|
|
64
|
+
lines.push(`description: ${skill.meta.description}`);
|
|
65
|
+
lines.push('---');
|
|
66
|
+
lines.push('');
|
|
67
|
+
// Body: activation directive + pointer to canonical skill
|
|
68
|
+
if (activation) {
|
|
69
|
+
lines.push(activation);
|
|
70
|
+
lines.push('');
|
|
71
|
+
}
|
|
72
|
+
const canonicalPath = `.aidlc/skills/${skill.meta.name}.md`;
|
|
73
|
+
lines.push(`Read \`${canonicalPath}\` and follow the instructions within.`);
|
|
74
|
+
lines.push('');
|
|
75
|
+
return lines.join('\n');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Generate the steering file content (overview + context-doc references).
|
|
79
|
+
*/
|
|
80
|
+
function generateSteeringContent(skills, ctx) {
|
|
81
|
+
const lines = [];
|
|
82
|
+
lines.push('# AIDLC Framework');
|
|
83
|
+
lines.push('');
|
|
84
|
+
lines.push('This project uses the AI Development Lifecycle (AIDLC) framework. ' +
|
|
85
|
+
'Lifecycle skills are installed under `.aidlc/skills/` and activated ' +
|
|
86
|
+
'via `.kiro/skills/` shims.');
|
|
87
|
+
lines.push('');
|
|
88
|
+
// Context doc references (Req 1.8)
|
|
89
|
+
const contextEntries = Object.entries(ctx.contextDocs);
|
|
90
|
+
if (contextEntries.length > 0) {
|
|
91
|
+
lines.push('## Context Documents');
|
|
92
|
+
lines.push('');
|
|
93
|
+
for (const [name, relPath] of contextEntries) {
|
|
94
|
+
lines.push(`- **${name}**: \`.aidlc/context/${relPath}\``);
|
|
95
|
+
}
|
|
96
|
+
lines.push('');
|
|
97
|
+
}
|
|
98
|
+
// Guidance layer references
|
|
99
|
+
const guidanceEntries = Object.entries(ctx.guidanceLayers);
|
|
100
|
+
if (guidanceEntries.length > 0) {
|
|
101
|
+
lines.push('## Guidance Layers');
|
|
102
|
+
lines.push('');
|
|
103
|
+
for (const [name, relPath] of guidanceEntries) {
|
|
104
|
+
lines.push(`- **${name}**: \`.aidlc/guidance/${relPath}\``);
|
|
105
|
+
}
|
|
106
|
+
lines.push('');
|
|
107
|
+
}
|
|
108
|
+
// Available skills summary
|
|
109
|
+
lines.push('## Installed Skills');
|
|
110
|
+
lines.push('');
|
|
111
|
+
for (const skill of skills) {
|
|
112
|
+
lines.push(`- **${skill.meta.name}** (${skill.meta.phase}): ${skill.meta.description}`);
|
|
113
|
+
}
|
|
114
|
+
lines.push('');
|
|
115
|
+
return lines.join('\n');
|
|
116
|
+
}
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
// Adapter
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
/**
|
|
121
|
+
* Kiro platform adapter.
|
|
122
|
+
*
|
|
123
|
+
* Implements the PlatformAdapter interface to produce an InstallPlan
|
|
124
|
+
* for Kiro's `.kiro/skills/` and `.kiro/steering/` layout.
|
|
125
|
+
*/
|
|
126
|
+
export const kiroAdapter = {
|
|
127
|
+
id: 'kiro',
|
|
128
|
+
plan(skills, caps, ctx) {
|
|
129
|
+
const ops = [];
|
|
130
|
+
const warnings = [];
|
|
131
|
+
// Validate capability map if provided (Req 18.7)
|
|
132
|
+
if (caps && caps.platform !== 'kiro') {
|
|
133
|
+
warnings.push(`capability map platform mismatch: expected 'kiro', got '${caps.platform}'; proceeding without capabilities`);
|
|
134
|
+
caps = null;
|
|
135
|
+
}
|
|
136
|
+
for (const skill of skills) {
|
|
137
|
+
// 1. Copy canonical skill body to .aidlc/skills/
|
|
138
|
+
ops.push({
|
|
139
|
+
kind: 'create',
|
|
140
|
+
path: `.aidlc/skills/${skill.meta.name}.md`,
|
|
141
|
+
content: formatCanonicalSkill(skill),
|
|
142
|
+
});
|
|
143
|
+
// 2. Generate .kiro/skills/aidlc-<name>/SKILL.md shim
|
|
144
|
+
const dirName = toKiroDirName(skill.meta.name);
|
|
145
|
+
const activation = resolveActivation(skill, caps);
|
|
146
|
+
if (!activation && caps) {
|
|
147
|
+
// Skill's phase not covered by any capability — note as warning
|
|
148
|
+
warnings.push(`skill '${skill.meta.name}' (phase: ${skill.meta.phase}) has no matching capability; using full structured guidance`);
|
|
149
|
+
}
|
|
150
|
+
const shimContent = generateSkillShim(skill, activation);
|
|
151
|
+
ops.push({
|
|
152
|
+
kind: 'create',
|
|
153
|
+
path: `.kiro/skills/${dirName}/SKILL.md`,
|
|
154
|
+
content: shimContent,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
// 3. Generate merge-block steering file .kiro/steering/aidlc.md
|
|
158
|
+
const steeringContent = generateSteeringContent(skills, ctx);
|
|
159
|
+
ops.push({
|
|
160
|
+
kind: 'merge-block',
|
|
161
|
+
path: '.kiro/steering/aidlc.md',
|
|
162
|
+
blockId: 'aidlc-overview',
|
|
163
|
+
content: steeringContent,
|
|
164
|
+
});
|
|
165
|
+
return { ops, warnings };
|
|
166
|
+
},
|
|
167
|
+
validate(op) {
|
|
168
|
+
const errors = [];
|
|
169
|
+
const warnings = [];
|
|
170
|
+
// Validate SKILL.md paths follow Kiro conventions
|
|
171
|
+
if (op.path.startsWith('.kiro/skills/')) {
|
|
172
|
+
const pathParts = op.path.split('/');
|
|
173
|
+
// Expected: .kiro/skills/<dir-name>/SKILL.md
|
|
174
|
+
if (pathParts.length === 4) {
|
|
175
|
+
const dirName = pathParts[2];
|
|
176
|
+
// Must be lowercase with hyphens, max 64 chars
|
|
177
|
+
if (!/^[a-z0-9][a-z0-9-]*$/.test(dirName)) {
|
|
178
|
+
errors.push(`skill directory name '${dirName}' must be lowercase alphanumeric with hyphens`);
|
|
179
|
+
}
|
|
180
|
+
if (dirName.length > 64) {
|
|
181
|
+
errors.push(`skill directory name '${dirName}' exceeds 64 character limit (${dirName.length})`);
|
|
182
|
+
}
|
|
183
|
+
// File must be SKILL.md
|
|
184
|
+
if (pathParts[3] !== 'SKILL.md') {
|
|
185
|
+
warnings.push(`expected SKILL.md, got '${pathParts[3]}'`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Validate steering files are markdown
|
|
190
|
+
if (op.path.startsWith('.kiro/steering/') && !op.path.endsWith('.md')) {
|
|
191
|
+
warnings.push(`steering file '${op.path}' should have .md extension`);
|
|
192
|
+
}
|
|
193
|
+
// Check content is non-empty for create/replace
|
|
194
|
+
if (op.kind !== 'merge-block' && op.content.trim() === '') {
|
|
195
|
+
errors.push(`empty content for file '${op.path}'`);
|
|
196
|
+
}
|
|
197
|
+
return { valid: errors.length === 0, errors, warnings };
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
// Internal Helpers
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
/**
|
|
204
|
+
* Format a canonical skill file with frontmatter + body.
|
|
205
|
+
*/
|
|
206
|
+
function formatCanonicalSkill(skill) {
|
|
207
|
+
const lines = [];
|
|
208
|
+
lines.push('---');
|
|
209
|
+
lines.push(`name: ${skill.meta.name}`);
|
|
210
|
+
lines.push(`description: ${skill.meta.description}`);
|
|
211
|
+
lines.push(`phase: ${skill.meta.phase}`);
|
|
212
|
+
if (skill.meta.priority !== undefined) {
|
|
213
|
+
lines.push(`priority: ${skill.meta.priority}`);
|
|
214
|
+
}
|
|
215
|
+
if (skill.meta.trigger) {
|
|
216
|
+
lines.push(`trigger: ${skill.meta.trigger}`);
|
|
217
|
+
}
|
|
218
|
+
lines.push('---');
|
|
219
|
+
lines.push(skill.body);
|
|
220
|
+
return lines.join('\n');
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=kiro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../../src/compile/adapters/kiro.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Windsurf platform adapter for the AIDLC install pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Windsurf imposes strict size limits:
|
|
5
|
+
* - ~6,000 chars per rule file
|
|
6
|
+
* - ~12,000 chars total across all rules
|
|
7
|
+
*
|
|
8
|
+
* Strategy:
|
|
9
|
+
* 1. Copy canonical skill bodies to `.aidlc/skills/` (same as other adapters).
|
|
10
|
+
* 2. Generate `.windsurf/rules/aidlc-overview.md` — always-on overview (compact, well under 6K).
|
|
11
|
+
* 3. Generate `.windsurf/rules/aidlc-<phase>.md` — per-phase pointer rules:
|
|
12
|
+
* - Thin pointers: phase description + "Read and follow `.aidlc/skills/<file>`"
|
|
13
|
+
* - Full skill bodies stay in `.aidlc/skills/`
|
|
14
|
+
*
|
|
15
|
+
* Size enforcement:
|
|
16
|
+
* - If a generated rule file would exceed 6000 chars, truncate to just the pointer.
|
|
17
|
+
* - Warn if total size approaches 12K.
|
|
18
|
+
*
|
|
19
|
+
* Requirements: 1.1
|
|
20
|
+
*
|
|
21
|
+
* @module
|
|
22
|
+
*/
|
|
23
|
+
import type { PlatformAdapter } from '../../core/types.js';
|
|
24
|
+
export declare const windsurfAdapter: PlatformAdapter;
|
|
25
|
+
//# sourceMappingURL=windsurf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../../src/compile/adapters/windsurf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EACV,eAAe,EAOhB,MAAM,qBAAqB,CAAC;AA0K7B,eAAO,MAAM,eAAe,EAAE,eA0G7B,CAAC"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Windsurf platform adapter for the AIDLC install pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Windsurf imposes strict size limits:
|
|
5
|
+
* - ~6,000 chars per rule file
|
|
6
|
+
* - ~12,000 chars total across all rules
|
|
7
|
+
*
|
|
8
|
+
* Strategy:
|
|
9
|
+
* 1. Copy canonical skill bodies to `.aidlc/skills/` (same as other adapters).
|
|
10
|
+
* 2. Generate `.windsurf/rules/aidlc-overview.md` — always-on overview (compact, well under 6K).
|
|
11
|
+
* 3. Generate `.windsurf/rules/aidlc-<phase>.md` — per-phase pointer rules:
|
|
12
|
+
* - Thin pointers: phase description + "Read and follow `.aidlc/skills/<file>`"
|
|
13
|
+
* - Full skill bodies stay in `.aidlc/skills/`
|
|
14
|
+
*
|
|
15
|
+
* Size enforcement:
|
|
16
|
+
* - If a generated rule file would exceed 6000 chars, truncate to just the pointer.
|
|
17
|
+
* - Warn if total size approaches 12K.
|
|
18
|
+
*
|
|
19
|
+
* Requirements: 1.1
|
|
20
|
+
*
|
|
21
|
+
* @module
|
|
22
|
+
*/
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Constants
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
/** Maximum characters allowed per rule file. */
|
|
27
|
+
const MAX_FILE_CHARS = 6000;
|
|
28
|
+
/** Maximum total characters across all rule files. */
|
|
29
|
+
const MAX_TOTAL_CHARS = 12000;
|
|
30
|
+
/** Warning threshold — warn when total approaches this percentage of the limit. */
|
|
31
|
+
const TOTAL_WARN_THRESHOLD = 0.85;
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Helpers
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
/**
|
|
36
|
+
* Derive a short filename-safe slug from a skill name.
|
|
37
|
+
* E.g., "aidlc-implementation" -> "aidlc-implementation"
|
|
38
|
+
*/
|
|
39
|
+
function skillSlug(skill) {
|
|
40
|
+
return skill.meta.name.toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Determine the canonical skill filename for `.aidlc/skills/`.
|
|
44
|
+
* Follows the naming convention from the skills/ directory.
|
|
45
|
+
*/
|
|
46
|
+
function canonicalSkillFilename(skill) {
|
|
47
|
+
return `${skillSlug(skill)}.md`;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Build canonical skill file content (frontmatter + body).
|
|
51
|
+
*/
|
|
52
|
+
function buildCanonicalContent(skill) {
|
|
53
|
+
const lines = ['---'];
|
|
54
|
+
lines.push(`name: ${skill.meta.name}`);
|
|
55
|
+
lines.push(`description: ${skill.meta.description}`);
|
|
56
|
+
lines.push(`phase: ${skill.meta.phase}`);
|
|
57
|
+
if (skill.meta.trigger) {
|
|
58
|
+
lines.push(`trigger: ${skill.meta.trigger}`);
|
|
59
|
+
}
|
|
60
|
+
if (skill.meta.priority !== undefined) {
|
|
61
|
+
lines.push(`priority: ${skill.meta.priority}`);
|
|
62
|
+
}
|
|
63
|
+
lines.push('---');
|
|
64
|
+
lines.push(skill.body);
|
|
65
|
+
return lines.join('\n');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Generate the overview rule content — a compact summary of the framework.
|
|
69
|
+
* Must stay well under 6K chars.
|
|
70
|
+
*/
|
|
71
|
+
function generateOverviewRule(skills, ctx) {
|
|
72
|
+
const lines = [];
|
|
73
|
+
lines.push('# AIDLC Framework Overview');
|
|
74
|
+
lines.push('');
|
|
75
|
+
lines.push('This project uses the AI Development Lifecycle (AIDLC) framework.');
|
|
76
|
+
lines.push('Full skill instructions live in `.aidlc/skills/` — read them when working on a phase.');
|
|
77
|
+
lines.push('');
|
|
78
|
+
lines.push('## Lifecycle Phases');
|
|
79
|
+
lines.push('');
|
|
80
|
+
lines.push('1. Ideation — Problem exploration, goals, constraints');
|
|
81
|
+
lines.push('2. Requirements — Acceptance criteria, user stories, scope');
|
|
82
|
+
lines.push('3. Design — Architecture, interfaces, data flow');
|
|
83
|
+
lines.push('4. Implementation — Code production following the design');
|
|
84
|
+
lines.push('5. Testing — Verification against requirements');
|
|
85
|
+
lines.push('6. Deployment — Release preparation and execution');
|
|
86
|
+
lines.push('7. Maintenance — Monitoring, iteration, documentation updates');
|
|
87
|
+
lines.push('');
|
|
88
|
+
lines.push('## State Protocol');
|
|
89
|
+
lines.push('');
|
|
90
|
+
lines.push('- State files: `.aidlc/state/<instance>/`');
|
|
91
|
+
lines.push('- Check current phase in `instance.yaml`');
|
|
92
|
+
lines.push('- Update artifact status in `phase-<name>.yaml`');
|
|
93
|
+
lines.push('- Append transitions to `transitions.log`');
|
|
94
|
+
lines.push('');
|
|
95
|
+
lines.push('## Available Skills');
|
|
96
|
+
lines.push('');
|
|
97
|
+
for (const skill of skills) {
|
|
98
|
+
const filename = canonicalSkillFilename(skill);
|
|
99
|
+
lines.push('- **' + skill.meta.phase + '**: `.aidlc/skills/' + filename + '`');
|
|
100
|
+
}
|
|
101
|
+
// Add context doc references if available
|
|
102
|
+
const contextEntries = Object.entries(ctx.contextDocs);
|
|
103
|
+
if (contextEntries.length > 0) {
|
|
104
|
+
lines.push('');
|
|
105
|
+
lines.push('## Project Context');
|
|
106
|
+
lines.push('');
|
|
107
|
+
for (const [name, path] of contextEntries) {
|
|
108
|
+
lines.push(`- ${name}: \`.aidlc/context/${path}\``);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Add guidance layer references if available
|
|
112
|
+
const guidanceEntries = Object.entries(ctx.guidanceLayers);
|
|
113
|
+
if (guidanceEntries.length > 0) {
|
|
114
|
+
lines.push('');
|
|
115
|
+
lines.push('## Guidance Layers');
|
|
116
|
+
lines.push('');
|
|
117
|
+
for (const [name, path] of guidanceEntries) {
|
|
118
|
+
lines.push(`- ${name}: \`.aidlc/guidance/${path}\``);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
lines.push('');
|
|
122
|
+
return lines.join('\n');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Generate a per-phase pointer rule.
|
|
126
|
+
* Includes phase description and a pointer to the full skill file.
|
|
127
|
+
*/
|
|
128
|
+
function generatePhasePointerRule(skill, caps) {
|
|
129
|
+
const filename = canonicalSkillFilename(skill);
|
|
130
|
+
const lines = [];
|
|
131
|
+
lines.push(`# ${skill.meta.phase.charAt(0).toUpperCase() + skill.meta.phase.slice(1)} Phase`);
|
|
132
|
+
lines.push('');
|
|
133
|
+
lines.push(skill.meta.description);
|
|
134
|
+
lines.push('');
|
|
135
|
+
// Add capability activation directive if available
|
|
136
|
+
if (caps) {
|
|
137
|
+
for (const [, entry] of Object.entries(caps.capabilities)) {
|
|
138
|
+
if (entry.phases.includes(skill.meta.phase)) {
|
|
139
|
+
lines.push(`> ${entry.activation}`);
|
|
140
|
+
lines.push('');
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
lines.push(`Read and follow \`.aidlc/skills/${filename}\` for detailed instructions.`);
|
|
146
|
+
lines.push('');
|
|
147
|
+
return lines.join('\n');
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Generate a minimal pointer (metadata + path only) for when content exceeds limits.
|
|
151
|
+
*/
|
|
152
|
+
function generateMinimalPointer(skill) {
|
|
153
|
+
const filename = canonicalSkillFilename(skill);
|
|
154
|
+
return [
|
|
155
|
+
`# ${skill.meta.phase.charAt(0).toUpperCase() + skill.meta.phase.slice(1)} Phase`,
|
|
156
|
+
'',
|
|
157
|
+
`Read and follow \`.aidlc/skills/${filename}\` for detailed instructions.`,
|
|
158
|
+
'',
|
|
159
|
+
].join('\n');
|
|
160
|
+
}
|
|
161
|
+
// ---------------------------------------------------------------------------
|
|
162
|
+
// Adapter Implementation
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
export const windsurfAdapter = {
|
|
165
|
+
id: 'windsurf',
|
|
166
|
+
plan(skills, caps, ctx) {
|
|
167
|
+
const ops = [];
|
|
168
|
+
const warnings = [];
|
|
169
|
+
// 1. Copy canonical skill bodies to .aidlc/skills/
|
|
170
|
+
for (const skill of skills) {
|
|
171
|
+
const filename = canonicalSkillFilename(skill);
|
|
172
|
+
ops.push({
|
|
173
|
+
kind: 'create',
|
|
174
|
+
path: `.aidlc/skills/${filename}`,
|
|
175
|
+
content: buildCanonicalContent(skill),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
// 2. Generate .windsurf/rules/aidlc-overview.md
|
|
179
|
+
let overviewContent = generateOverviewRule(skills, ctx);
|
|
180
|
+
// Enforce size limit on overview
|
|
181
|
+
if (overviewContent.length > MAX_FILE_CHARS) {
|
|
182
|
+
warnings.push(`windsurf: overview rule exceeds ${MAX_FILE_CHARS} chars (${overviewContent.length}), truncating`);
|
|
183
|
+
// Truncate to a minimal overview
|
|
184
|
+
overviewContent = [
|
|
185
|
+
'# AIDLC Framework Overview',
|
|
186
|
+
'',
|
|
187
|
+
'This project uses the AIDLC framework. Full skills are in `.aidlc/skills/`.',
|
|
188
|
+
'',
|
|
189
|
+
'Read `.aidlc/skills/aidlc-overview.md` for the complete framework overview.',
|
|
190
|
+
'',
|
|
191
|
+
].join('\n');
|
|
192
|
+
}
|
|
193
|
+
ops.push({
|
|
194
|
+
kind: 'create',
|
|
195
|
+
path: '.windsurf/rules/aidlc-overview.md',
|
|
196
|
+
content: overviewContent,
|
|
197
|
+
});
|
|
198
|
+
let totalChars = overviewContent.length;
|
|
199
|
+
// 3. Generate per-phase pointer rules
|
|
200
|
+
// Skip the overview skill (it's already covered by the overview rule)
|
|
201
|
+
const phaseSkills = skills.filter((s) => s.meta.name !== 'aidlc-overview');
|
|
202
|
+
for (const skill of phaseSkills) {
|
|
203
|
+
let ruleContent = generatePhasePointerRule(skill, caps);
|
|
204
|
+
// Enforce per-file size limit
|
|
205
|
+
if (ruleContent.length > MAX_FILE_CHARS) {
|
|
206
|
+
warnings.push(`windsurf: rule for ${skill.meta.name} exceeds ${MAX_FILE_CHARS} chars (${ruleContent.length}), using minimal pointer`);
|
|
207
|
+
ruleContent = generateMinimalPointer(skill);
|
|
208
|
+
}
|
|
209
|
+
totalChars += ruleContent.length;
|
|
210
|
+
ops.push({
|
|
211
|
+
kind: 'create',
|
|
212
|
+
path: `.windsurf/rules/aidlc-${skillSlug(skill)}.md`,
|
|
213
|
+
content: ruleContent,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
// Warn if total approaches the limit
|
|
217
|
+
if (totalChars > MAX_TOTAL_CHARS * TOTAL_WARN_THRESHOLD) {
|
|
218
|
+
warnings.push(`windsurf: total rule size (${totalChars} chars) approaches the ${MAX_TOTAL_CHARS} char platform limit`);
|
|
219
|
+
}
|
|
220
|
+
return { ops, warnings };
|
|
221
|
+
},
|
|
222
|
+
validate(op) {
|
|
223
|
+
const errors = [];
|
|
224
|
+
const warnings = [];
|
|
225
|
+
// Only validate files in .windsurf/rules/
|
|
226
|
+
if (!op.path.startsWith('.windsurf/rules/')) {
|
|
227
|
+
return { valid: true, errors, warnings };
|
|
228
|
+
}
|
|
229
|
+
const content = op.kind === 'merge-block' ? op.content : op.content;
|
|
230
|
+
const charCount = content.length;
|
|
231
|
+
// Check per-file size limit
|
|
232
|
+
if (charCount > MAX_FILE_CHARS) {
|
|
233
|
+
errors.push(`file ${op.path} exceeds windsurf per-file limit: ${charCount} > ${MAX_FILE_CHARS} chars`);
|
|
234
|
+
}
|
|
235
|
+
// Warn when approaching file limit
|
|
236
|
+
if (charCount > MAX_FILE_CHARS * TOTAL_WARN_THRESHOLD && charCount <= MAX_FILE_CHARS) {
|
|
237
|
+
warnings.push(`file ${op.path} is approaching the per-file limit: ${charCount}/${MAX_FILE_CHARS} chars`);
|
|
238
|
+
}
|
|
239
|
+
return { valid: errors.length === 0, errors, warnings };
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
//# sourceMappingURL=windsurf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../../src/compile/adapters/windsurf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install plan executors for the AIDLC install pipeline.
|
|
3
|
+
*
|
|
4
|
+
* The plan/execute split ensures `--dry-run` is provably equivalent to a real
|
|
5
|
+
* install — same plan, different executor (Req 1.5).
|
|
6
|
+
*
|
|
7
|
+
* - `executePlan()`: applies a plan to the filesystem (creates dirs, writes files,
|
|
8
|
+
* invokes `mergeBlock` for managed blocks).
|
|
9
|
+
* - `dryRunPlan()`: returns an identical report shape without touching the filesystem.
|
|
10
|
+
*
|
|
11
|
+
* Requirements: 1.2, 1.5, 17.2
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
import type { InstallPlan } from '../core/types.js';
|
|
16
|
+
/** Result of applying (or simulating) an install plan. */
|
|
17
|
+
export interface ExecutionReport {
|
|
18
|
+
/** Paths of files that were written or updated. */
|
|
19
|
+
filesWritten: string[];
|
|
20
|
+
/** Paths that would not change (content already identical). */
|
|
21
|
+
filesSkipped: string[];
|
|
22
|
+
/** Non-fatal warnings forwarded from the plan. */
|
|
23
|
+
warnings: string[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Apply an install plan to the filesystem.
|
|
27
|
+
*
|
|
28
|
+
* - `create`/`replace`: write file content, creating directories as needed.
|
|
29
|
+
* - `merge-block`: read existing file (or empty), call `mergeBlock()`, write result.
|
|
30
|
+
*
|
|
31
|
+
* Skips files whose computed content is identical to what's already on disk.
|
|
32
|
+
*
|
|
33
|
+
* @param plan - The install plan to execute.
|
|
34
|
+
* @param rootDir - Absolute path to the project root. All `op.path` entries are relative to this.
|
|
35
|
+
* @returns Report of what was written, skipped, and warnings.
|
|
36
|
+
*/
|
|
37
|
+
export declare function executePlan(plan: InstallPlan, rootDir: string): ExecutionReport;
|
|
38
|
+
/**
|
|
39
|
+
* Simulate applying an install plan without writing to the filesystem.
|
|
40
|
+
*
|
|
41
|
+
* Computes the same content resolution as `executePlan()` to determine which
|
|
42
|
+
* files would be written or skipped, but never creates directories or writes files.
|
|
43
|
+
*
|
|
44
|
+
* @param plan - The install plan to simulate.
|
|
45
|
+
* @param rootDir - Absolute path to the project root.
|
|
46
|
+
* @returns Report of what would be written, skipped, and warnings.
|
|
47
|
+
*/
|
|
48
|
+
export declare function dryRunPlan(plan: InstallPlan, rootDir: string): ExecutionReport;
|
|
49
|
+
//# sourceMappingURL=install-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-plan.d.ts","sourceRoot":"","sources":["../../src/compile/install-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAU,MAAM,kBAAkB,CAAC;AAO5D,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+DAA+D;IAC/D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAuCD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAyB/E;AAMD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAiB9E"}
|