@hongmaple0820/scale-engine 0.12.1 → 0.12.3
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.en.md +6 -6
- package/README.md +34 -6
- package/dist/adapters/AiderAdapter.d.ts +22 -0
- package/dist/adapters/AiderAdapter.js +262 -0
- package/dist/adapters/AiderAdapter.js.map +1 -0
- package/dist/adapters/DoubaoAdapter.d.ts +14 -0
- package/dist/adapters/DoubaoAdapter.js +184 -0
- package/dist/adapters/DoubaoAdapter.js.map +1 -0
- package/dist/adapters/KimiAdapter.d.ts +14 -0
- package/dist/adapters/KimiAdapter.js +183 -0
- package/dist/adapters/KimiAdapter.js.map +1 -0
- package/dist/adapters/WindsurfAdapter.d.ts +14 -0
- package/dist/adapters/WindsurfAdapter.js +185 -0
- package/dist/adapters/WindsurfAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts +4 -0
- package/dist/adapters/index.js +12 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/api/cli.js +6 -1
- package/dist/api/cli.js.map +1 -1
- package/dist/api/quickstart.js +5 -1
- package/dist/api/quickstart.js.map +1 -1
- package/dist/artifact/types.d.ts +1 -1
- package/dist/cli/vibeCommands.d.ts +44 -0
- package/dist/cli/vibeCommands.js +244 -0
- package/dist/cli/vibeCommands.js.map +1 -0
- package/dist/prompts/PhasePromptRegistry.d.ts +53 -0
- package/dist/prompts/PhasePromptRegistry.js +517 -0
- package/dist/prompts/PhasePromptRegistry.js.map +1 -0
- package/dist/skills/SkillDiscovery.js +9 -1
- package/dist/skills/SkillDiscovery.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
// SCALE Engine — Kimi Adapter
|
|
2
|
+
// 生成 .kimi/settings.json + .kimi/rules.md + .kimi/skills/
|
|
3
|
+
// Kimi: Moonshot AI assistant (https://kimi.moonshot.cn)
|
|
4
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { logger } from '../core/logger.js';
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Kimi Adapter
|
|
9
|
+
// ============================================================================
|
|
10
|
+
export class KimiAdapter {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.agentType = 'kimi';
|
|
13
|
+
this.projectDir = '.';
|
|
14
|
+
this.scaleDir = '.scale';
|
|
15
|
+
}
|
|
16
|
+
getSettingsPath() {
|
|
17
|
+
return join(this.projectDir, '.kimi', 'settings.json');
|
|
18
|
+
}
|
|
19
|
+
getKnowledgeDocPath() {
|
|
20
|
+
return join(this.projectDir, '.kimi', 'rules.md');
|
|
21
|
+
}
|
|
22
|
+
getSkillsDir() {
|
|
23
|
+
return join(this.projectDir, '.kimi', 'skills');
|
|
24
|
+
}
|
|
25
|
+
isInstalled() {
|
|
26
|
+
return existsSync(join(this.projectDir, '.kimi'));
|
|
27
|
+
}
|
|
28
|
+
generateSettings() {
|
|
29
|
+
return {
|
|
30
|
+
hooks: {
|
|
31
|
+
'pre-tool-use': [
|
|
32
|
+
{ matcher: 'Bash', command: 'scale gate pre-tool Bash --args-json "$ARGS" --session-id "$SESSION_ID"' },
|
|
33
|
+
{ matcher: 'Edit|Write', command: 'scale gate pre-tool Edit --args-json "$ARGS" --session-id "$SESSION_ID"' },
|
|
34
|
+
],
|
|
35
|
+
'post-tool-use': [
|
|
36
|
+
{ matcher: 'Edit|Write', command: 'scale gate post-tool Edit --args-json "$ARGS" --exit-code "$EXIT_CODE" --session-id "$SESSION_ID"' },
|
|
37
|
+
{ matcher: 'Bash', command: 'scale gate post-tool Bash --args-json "$ARGS" --exit-code "$EXIT_CODE" --session-id "$SESSION_ID"' },
|
|
38
|
+
],
|
|
39
|
+
'exit': [
|
|
40
|
+
{ matcher: '', command: 'scale gate before-stop --session-id "$SESSION_ID"' },
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
permissions: {
|
|
44
|
+
allow: ['scale:*'],
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
mergeSettings(existing) {
|
|
49
|
+
const generated = this.generateSettings();
|
|
50
|
+
const merged = { ...existing };
|
|
51
|
+
if (!merged.hooks)
|
|
52
|
+
merged.hooks = {};
|
|
53
|
+
for (const [hookType, entries] of Object.entries(generated.hooks)) {
|
|
54
|
+
if (!merged.hooks[hookType])
|
|
55
|
+
merged.hooks[hookType] = [];
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
const alreadyExists = merged.hooks[hookType].some((e) => e.command.includes('scale '));
|
|
58
|
+
if (!alreadyExists) {
|
|
59
|
+
merged.hooks[hookType].push(entry);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (!merged.permissions)
|
|
64
|
+
merged.permissions = {};
|
|
65
|
+
if (!merged.permissions.allow)
|
|
66
|
+
merged.permissions.allow = [];
|
|
67
|
+
for (const perm of generated.permissions.allow) {
|
|
68
|
+
if (!merged.permissions.allow.includes(perm)) {
|
|
69
|
+
merged.permissions.allow.push(perm);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return merged;
|
|
73
|
+
}
|
|
74
|
+
generateKnowledgeDoc(projectName, techStack = []) {
|
|
75
|
+
const stackLine = techStack.length > 0
|
|
76
|
+
? `\n## Tech Stack\n${techStack.map((t) => `- ${t}`).join('\n')}\n`
|
|
77
|
+
: '';
|
|
78
|
+
return `# ${projectName}
|
|
79
|
+
${stackLine}
|
|
80
|
+
## SCALE Engine Integration (Kimi)
|
|
81
|
+
|
|
82
|
+
This project uses SCALE Engine for AI engineering governance via Kimi (Moonshot AI).
|
|
83
|
+
|
|
84
|
+
### Commands
|
|
85
|
+
- \`scale create <type> <title>\` — Create artifact
|
|
86
|
+
- \`scale transition <id> <action>\` — Transition artifact state
|
|
87
|
+
- \`scale list --type Spec\` — List artifacts
|
|
88
|
+
- \`scale role activate <role>\` — Switch role
|
|
89
|
+
- \`scale doctor\` — Health check
|
|
90
|
+
|
|
91
|
+
### Workflow
|
|
92
|
+
1. **Explore** → Role: explorer (Read/Grep only)
|
|
93
|
+
2. **Plan** → Create Spec → refine → approve (guard: ambiguity ≤ 0.2)
|
|
94
|
+
3. **Implement** → Role: implementer (Edit/Write/Bash unlocked)
|
|
95
|
+
4. **Verify** → Must run tests before claiming done
|
|
96
|
+
5. **Learn** → Defects → Lessons → Rules → Hooks
|
|
97
|
+
|
|
98
|
+
### Rules
|
|
99
|
+
- 🔴 Dangerous commands are physically blocked
|
|
100
|
+
- 🔴 Hardcoded secrets are blocked on Edit/Write
|
|
101
|
+
- 🟡 3 identical retries triggers brute-retry detection
|
|
102
|
+
- 🟡 Claiming done without running tests is blocked
|
|
103
|
+
- 🟢 All tool calls are tracked in .scale/events/
|
|
104
|
+
|
|
105
|
+
### Kimi-Specific Notes
|
|
106
|
+
- Kimi supports long-context reasoning (200K+ tokens)
|
|
107
|
+
- Use Kimi for complex analysis and documentation tasks
|
|
108
|
+
- This rules.md file provides AI assistant context
|
|
109
|
+
- SCALE hooks are defined in \`.kimi/settings.json\`
|
|
110
|
+
`;
|
|
111
|
+
}
|
|
112
|
+
async init(config) {
|
|
113
|
+
this.projectDir = config.projectDir;
|
|
114
|
+
this.scaleDir = config.scaleDir ?? join(config.projectDir, '.scale');
|
|
115
|
+
const created = [];
|
|
116
|
+
const skipped = [];
|
|
117
|
+
// 1. Create .scale/ directory structure
|
|
118
|
+
for (const dir of ['events', 'artifacts', 'rules', 'hooks', 'checkpoints']) {
|
|
119
|
+
const fullDir = join(this.scaleDir, dir);
|
|
120
|
+
if (!existsSync(fullDir)) {
|
|
121
|
+
mkdirSync(fullDir, { recursive: true });
|
|
122
|
+
created.push(fullDir);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
skipped.push(fullDir);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// 2. Create .kimi/ directory + settings.json
|
|
129
|
+
const kimiDir = join(this.projectDir, '.kimi');
|
|
130
|
+
if (!existsSync(kimiDir)) {
|
|
131
|
+
mkdirSync(kimiDir, { recursive: true });
|
|
132
|
+
created.push(kimiDir);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
skipped.push(kimiDir);
|
|
136
|
+
}
|
|
137
|
+
const settingsPath = this.getSettingsPath();
|
|
138
|
+
if (existsSync(settingsPath)) {
|
|
139
|
+
const existing = JSON.parse(readFileSync(settingsPath, 'utf-8'));
|
|
140
|
+
const merged = this.mergeSettings(existing);
|
|
141
|
+
writeFileSync(settingsPath, JSON.stringify(merged, null, 2), 'utf-8');
|
|
142
|
+
skipped.push(settingsPath + ' (merged)');
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
writeFileSync(settingsPath, JSON.stringify(this.generateSettings(), null, 2), 'utf-8');
|
|
146
|
+
created.push(settingsPath);
|
|
147
|
+
}
|
|
148
|
+
// 3. Create skills directory
|
|
149
|
+
const skillsDir = this.getSkillsDir();
|
|
150
|
+
if (!existsSync(skillsDir)) {
|
|
151
|
+
mkdirSync(skillsDir, { recursive: true });
|
|
152
|
+
created.push(skillsDir);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
skipped.push(skillsDir);
|
|
156
|
+
}
|
|
157
|
+
// 4. Create .kimi/rules.md (knowledge document)
|
|
158
|
+
const knowledgeDocPath = this.getKnowledgeDocPath();
|
|
159
|
+
if (!existsSync(knowledgeDocPath)) {
|
|
160
|
+
const projectName = config.projectDir.split(/[/\\]/).pop() ?? 'Project';
|
|
161
|
+
writeFileSync(knowledgeDocPath, this.generateKnowledgeDoc(projectName), 'utf-8');
|
|
162
|
+
created.push(knowledgeDocPath);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
skipped.push(knowledgeDocPath);
|
|
166
|
+
}
|
|
167
|
+
// 5. .gitignore
|
|
168
|
+
const gitignorePath = join(this.scaleDir, '.gitignore');
|
|
169
|
+
if (!existsSync(gitignorePath)) {
|
|
170
|
+
writeFileSync(gitignorePath, `*.db\n*.db-journal\nevents/\ncheckpoints/\nhooks/*.sh\n`, 'utf-8');
|
|
171
|
+
created.push(gitignorePath);
|
|
172
|
+
}
|
|
173
|
+
logger.info({ created: created.length, skipped: skipped.length }, 'SCALE init (kimi) completed');
|
|
174
|
+
return {
|
|
175
|
+
settingsPath,
|
|
176
|
+
knowledgeDocPath,
|
|
177
|
+
scaleDir: this.scaleDir,
|
|
178
|
+
created,
|
|
179
|
+
skipped,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=KimiAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KimiAdapter.js","sourceRoot":"","sources":["../../src/adapters/KimiAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IAgentAdapter, AdapterConfig, InitResult, SettingsJson } from './ClaudeCodeAdapter.js';
|
|
2
|
+
export declare class WindsurfAdapter implements IAgentAdapter {
|
|
3
|
+
readonly agentType = "windsurf";
|
|
4
|
+
private projectDir;
|
|
5
|
+
private scaleDir;
|
|
6
|
+
getSettingsPath(): string;
|
|
7
|
+
getKnowledgeDocPath(): string;
|
|
8
|
+
getSkillsDir(): string;
|
|
9
|
+
isInstalled(): boolean;
|
|
10
|
+
generateSettings(): SettingsJson;
|
|
11
|
+
mergeSettings(existing: SettingsJson): SettingsJson;
|
|
12
|
+
generateKnowledgeDoc(projectName: string, techStack?: string[]): string;
|
|
13
|
+
init(config: AdapterConfig): Promise<InitResult>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// SCALE Engine — Windsurf Adapter
|
|
2
|
+
// 生成 .windsurf/settings.json + .windsurf/rules.md + .windsurf/skills/
|
|
3
|
+
// Windsurf: AI-first code editor (https://codeium.com/windsurf)
|
|
4
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { logger } from '../core/logger.js';
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Windsurf Adapter
|
|
9
|
+
// ============================================================================
|
|
10
|
+
export class WindsurfAdapter {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.agentType = 'windsurf';
|
|
13
|
+
this.projectDir = '.';
|
|
14
|
+
this.scaleDir = '.scale';
|
|
15
|
+
}
|
|
16
|
+
getSettingsPath() {
|
|
17
|
+
return join(this.projectDir, '.windsurf', 'settings.json');
|
|
18
|
+
}
|
|
19
|
+
getKnowledgeDocPath() {
|
|
20
|
+
// Windsurf uses .windsurf/rules.md for AI instructions (similar to .cursorrules)
|
|
21
|
+
return join(this.projectDir, '.windsurf', 'rules.md');
|
|
22
|
+
}
|
|
23
|
+
getSkillsDir() {
|
|
24
|
+
return join(this.projectDir, '.windsurf', 'skills');
|
|
25
|
+
}
|
|
26
|
+
isInstalled() {
|
|
27
|
+
return existsSync(join(this.projectDir, '.windsurf')) ||
|
|
28
|
+
existsSync(join(this.projectDir, '.windsurfrc'));
|
|
29
|
+
}
|
|
30
|
+
generateSettings() {
|
|
31
|
+
return {
|
|
32
|
+
hooks: {
|
|
33
|
+
'pre-exec': [
|
|
34
|
+
{ matcher: 'Bash', command: 'scale gate pre-tool Bash --args-json "$ARGS" --session-id "$SESSION_ID"' },
|
|
35
|
+
{ matcher: 'Edit|Write', command: 'scale gate pre-tool Edit --args-json "$ARGS" --session-id "$SESSION_ID"' },
|
|
36
|
+
],
|
|
37
|
+
'post-exec': [
|
|
38
|
+
{ matcher: 'Edit|Write', command: 'scale gate post-tool Edit --args-json "$ARGS" --exit-code "$EXIT_CODE" --session-id "$SESSION_ID"' },
|
|
39
|
+
{ matcher: 'Bash', command: 'scale gate post-tool Bash --args-json "$ARGS" --exit-code "$EXIT_CODE" --session-id "$SESSION_ID"' },
|
|
40
|
+
],
|
|
41
|
+
'before-stop': [
|
|
42
|
+
{ matcher: '', command: 'scale gate before-stop --session-id "$SESSION_ID"' },
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
permissions: {
|
|
46
|
+
allow: ['scale:*'],
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
mergeSettings(existing) {
|
|
51
|
+
const generated = this.generateSettings();
|
|
52
|
+
const merged = { ...existing };
|
|
53
|
+
if (!merged.hooks)
|
|
54
|
+
merged.hooks = {};
|
|
55
|
+
for (const [hookType, entries] of Object.entries(generated.hooks)) {
|
|
56
|
+
if (!merged.hooks[hookType])
|
|
57
|
+
merged.hooks[hookType] = [];
|
|
58
|
+
for (const entry of entries) {
|
|
59
|
+
const alreadyExists = merged.hooks[hookType].some((e) => e.command.includes('scale '));
|
|
60
|
+
if (!alreadyExists) {
|
|
61
|
+
merged.hooks[hookType].push(entry);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (!merged.permissions)
|
|
66
|
+
merged.permissions = {};
|
|
67
|
+
if (!merged.permissions.allow)
|
|
68
|
+
merged.permissions.allow = [];
|
|
69
|
+
for (const perm of generated.permissions.allow) {
|
|
70
|
+
if (!merged.permissions.allow.includes(perm)) {
|
|
71
|
+
merged.permissions.allow.push(perm);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return merged;
|
|
75
|
+
}
|
|
76
|
+
generateKnowledgeDoc(projectName, techStack = []) {
|
|
77
|
+
const stackLine = techStack.length > 0
|
|
78
|
+
? `\n## Tech Stack\n${techStack.map((t) => `- ${t}`).join('\n')}\n`
|
|
79
|
+
: '';
|
|
80
|
+
return `# ${projectName}
|
|
81
|
+
${stackLine}
|
|
82
|
+
## SCALE Engine Integration (Windsurf)
|
|
83
|
+
|
|
84
|
+
This project uses SCALE Engine for AI engineering governance via Windsurf.
|
|
85
|
+
|
|
86
|
+
### Commands
|
|
87
|
+
- \`scale create <type> <title>\` — Create artifact
|
|
88
|
+
- \`scale transition <id> <action>\` — Transition artifact state
|
|
89
|
+
- \`scale list --type Spec\` — List artifacts
|
|
90
|
+
- \`scale role activate <role>\` — Switch role
|
|
91
|
+
- \`scale doctor\` — Health check
|
|
92
|
+
|
|
93
|
+
### Workflow
|
|
94
|
+
1. **Explore** → Role: explorer (Read/Grep only)
|
|
95
|
+
2. **Plan** → Create Spec → refine → approve (guard: ambiguity ≤ 0.2)
|
|
96
|
+
3. **Implement** → Role: implementer (Edit/Write/Bash unlocked)
|
|
97
|
+
4. **Verify** → Must run tests before claiming done
|
|
98
|
+
5. **Learn** → Defects → Lessons → Rules → Hooks
|
|
99
|
+
|
|
100
|
+
### Rules
|
|
101
|
+
- 🔴 Dangerous commands are physically blocked
|
|
102
|
+
- 🔴 Hardcoded secrets are blocked on Edit/Write
|
|
103
|
+
- 🟡 3 identical retries triggers brute-retry detection
|
|
104
|
+
- 🟡 Claiming done without running tests is blocked
|
|
105
|
+
- 🟢 All tool calls are tracked in .scale/events/
|
|
106
|
+
|
|
107
|
+
### Windsurf-Specific Notes
|
|
108
|
+
- Windsurf uses Cascade Flow for multi-file editing
|
|
109
|
+
- Use Chat mode for quick questions, Cascade for complex tasks
|
|
110
|
+
- This rules.md file provides AI assistant context
|
|
111
|
+
- SCALE hooks are defined in \`.windsurf/settings.json\`
|
|
112
|
+
`;
|
|
113
|
+
}
|
|
114
|
+
async init(config) {
|
|
115
|
+
this.projectDir = config.projectDir;
|
|
116
|
+
this.scaleDir = config.scaleDir ?? join(config.projectDir, '.scale');
|
|
117
|
+
const created = [];
|
|
118
|
+
const skipped = [];
|
|
119
|
+
// 1. Create .scale/ directory structure
|
|
120
|
+
for (const dir of ['events', 'artifacts', 'rules', 'hooks', 'checkpoints']) {
|
|
121
|
+
const fullDir = join(this.scaleDir, dir);
|
|
122
|
+
if (!existsSync(fullDir)) {
|
|
123
|
+
mkdirSync(fullDir, { recursive: true });
|
|
124
|
+
created.push(fullDir);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
skipped.push(fullDir);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// 2. Create .windsurf/ directory + settings.json
|
|
131
|
+
const windsurfDir = join(this.projectDir, '.windsurf');
|
|
132
|
+
if (!existsSync(windsurfDir)) {
|
|
133
|
+
mkdirSync(windsurfDir, { recursive: true });
|
|
134
|
+
created.push(windsurfDir);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
skipped.push(windsurfDir);
|
|
138
|
+
}
|
|
139
|
+
const settingsPath = this.getSettingsPath();
|
|
140
|
+
if (existsSync(settingsPath)) {
|
|
141
|
+
const existing = JSON.parse(readFileSync(settingsPath, 'utf-8'));
|
|
142
|
+
const merged = this.mergeSettings(existing);
|
|
143
|
+
writeFileSync(settingsPath, JSON.stringify(merged, null, 2), 'utf-8');
|
|
144
|
+
skipped.push(settingsPath + ' (merged)');
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
writeFileSync(settingsPath, JSON.stringify(this.generateSettings(), null, 2), 'utf-8');
|
|
148
|
+
created.push(settingsPath);
|
|
149
|
+
}
|
|
150
|
+
// 3. Create skills directory
|
|
151
|
+
const skillsDir = this.getSkillsDir();
|
|
152
|
+
if (!existsSync(skillsDir)) {
|
|
153
|
+
mkdirSync(skillsDir, { recursive: true });
|
|
154
|
+
created.push(skillsDir);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
skipped.push(skillsDir);
|
|
158
|
+
}
|
|
159
|
+
// 4. Create .windsurf/rules.md (knowledge document)
|
|
160
|
+
const knowledgeDocPath = this.getKnowledgeDocPath();
|
|
161
|
+
if (!existsSync(knowledgeDocPath)) {
|
|
162
|
+
const projectName = config.projectDir.split(/[/\\]/).pop() ?? 'Project';
|
|
163
|
+
writeFileSync(knowledgeDocPath, this.generateKnowledgeDoc(projectName), 'utf-8');
|
|
164
|
+
created.push(knowledgeDocPath);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
skipped.push(knowledgeDocPath);
|
|
168
|
+
}
|
|
169
|
+
// 5. .gitignore
|
|
170
|
+
const gitignorePath = join(this.scaleDir, '.gitignore');
|
|
171
|
+
if (!existsSync(gitignorePath)) {
|
|
172
|
+
writeFileSync(gitignorePath, `*.db\n*.db-journal\nevents/\ncheckpoints/\nhooks/*.sh\n`, 'utf-8');
|
|
173
|
+
created.push(gitignorePath);
|
|
174
|
+
}
|
|
175
|
+
logger.info({ created: created.length, skipped: skipped.length }, 'SCALE init (windsurf) completed');
|
|
176
|
+
return {
|
|
177
|
+
settingsPath,
|
|
178
|
+
knowledgeDocPath,
|
|
179
|
+
scaleDir: this.scaleDir,
|
|
180
|
+
created,
|
|
181
|
+
skipped,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=WindsurfAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WindsurfAdapter.js","sourceRoot":"","sources":["../../src/adapters/WindsurfAdapter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -13,6 +13,10 @@ export { WorkBuddyAdapter } from './WorkBuddyAdapter.js';
|
|
|
13
13
|
export { VSCAdapter } from './VSCAdapter.js';
|
|
14
14
|
export { QCoderAdapter } from './QCoderAdapter.js';
|
|
15
15
|
export { DeepSeekTuiAdapter } from './DeepSeekTuiAdapter.js';
|
|
16
|
+
export { AiderAdapter } from './AiderAdapter.js';
|
|
17
|
+
export { WindsurfAdapter } from './WindsurfAdapter.js';
|
|
18
|
+
export { KimiAdapter } from './KimiAdapter.js';
|
|
19
|
+
export { DoubaoAdapter } from './DoubaoAdapter.js';
|
|
16
20
|
/** All supported agent type identifiers */
|
|
17
21
|
export declare const SUPPORTED_AGENTS: AgentPlatform[];
|
|
18
22
|
/**
|
package/dist/adapters/index.js
CHANGED
|
@@ -12,6 +12,10 @@ import { WorkBuddyAdapter } from './WorkBuddyAdapter.js';
|
|
|
12
12
|
import { VSCAdapter } from './VSCAdapter.js';
|
|
13
13
|
import { QCoderAdapter } from './QCoderAdapter.js';
|
|
14
14
|
import { DeepSeekTuiAdapter } from './DeepSeekTuiAdapter.js';
|
|
15
|
+
import { AiderAdapter } from './AiderAdapter.js';
|
|
16
|
+
import { WindsurfAdapter } from './WindsurfAdapter.js';
|
|
17
|
+
import { KimiAdapter } from './KimiAdapter.js';
|
|
18
|
+
import { DoubaoAdapter } from './DoubaoAdapter.js';
|
|
15
19
|
export { ClaudeCodeAdapter } from './ClaudeCodeAdapter.js';
|
|
16
20
|
export { CodexAdapter } from './CodexAdapter.js';
|
|
17
21
|
export { OpenCodeAdapter } from './OpenCodeAdapter.js';
|
|
@@ -24,6 +28,10 @@ export { WorkBuddyAdapter } from './WorkBuddyAdapter.js';
|
|
|
24
28
|
export { VSCAdapter } from './VSCAdapter.js';
|
|
25
29
|
export { QCoderAdapter } from './QCoderAdapter.js';
|
|
26
30
|
export { DeepSeekTuiAdapter } from './DeepSeekTuiAdapter.js';
|
|
31
|
+
export { AiderAdapter } from './AiderAdapter.js';
|
|
32
|
+
export { WindsurfAdapter } from './WindsurfAdapter.js';
|
|
33
|
+
export { KimiAdapter } from './KimiAdapter.js';
|
|
34
|
+
export { DoubaoAdapter } from './DoubaoAdapter.js';
|
|
27
35
|
// ============================================================================
|
|
28
36
|
// Adapter Registry
|
|
29
37
|
// ============================================================================
|
|
@@ -40,6 +48,10 @@ const ADAPTER_MAP = {
|
|
|
40
48
|
'vsc': VSCAdapter,
|
|
41
49
|
'qcoder': QCoderAdapter,
|
|
42
50
|
'deepseek-tui': DeepSeekTuiAdapter,
|
|
51
|
+
'aider': AiderAdapter,
|
|
52
|
+
'windsurf': WindsurfAdapter,
|
|
53
|
+
'kimi': KimiAdapter,
|
|
54
|
+
'doubao': DoubaoAdapter,
|
|
43
55
|
};
|
|
44
56
|
/** All supported agent type identifiers */
|
|
45
57
|
export const SUPPORTED_AGENTS = Object.keys(ADAPTER_MAP);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,4CAA4C;AAG5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"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"}
|
package/dist/api/cli.js
CHANGED
|
@@ -1242,11 +1242,16 @@ const team = defineCommand({
|
|
|
1242
1242
|
// ============================================================================
|
|
1243
1243
|
import * as phaseCommands from '../cli/phaseCommands.js';
|
|
1244
1244
|
import * as liteCommands from '../cli/liteCommands.js';
|
|
1245
|
+
import * as vibeCommands from '../cli/vibeCommands.js';
|
|
1245
1246
|
const main = defineCommand({
|
|
1246
|
-
meta: { name: 'scale', version: '0.
|
|
1247
|
+
meta: { name: 'scale', version: '0.12.2', description: 'SCALE Engine v0.12.2 CLI - hardened phase workflow gates: define/plan/build/verify/review/ship; Vibe templates: scale vibe; 16 platform adapters; 12 agents; 10 workflows; 19 detectors' },
|
|
1247
1248
|
subCommands: {
|
|
1248
1249
|
// Lite Mode (agent-skills style interactive entry)
|
|
1249
1250
|
lite: liteCommands.liteCommand,
|
|
1251
|
+
// Vibe Templates (one-click prompt workflow)
|
|
1252
|
+
vibe: vibeCommands.vibeCommand,
|
|
1253
|
+
'vibe-next': vibeCommands.vibeNextCommand,
|
|
1254
|
+
'vibe-index': vibeCommands.vibeIndexCommand,
|
|
1250
1255
|
// Phase-Aligned Commands (agent-skills style)
|
|
1251
1256
|
define: phaseCommands.phaseDefine,
|
|
1252
1257
|
plan: phaseCommands.phasePlan,
|