@hongmaple0820/scale-engine 0.12.0 → 0.12.2

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 CHANGED
@@ -1,11 +1,11 @@
1
1
  <p align="center">
2
- <img src="https://img.shields.io/badge/version-0.11.2-orange?style=flat-square" alt="version" />
3
- <img src="https://img.shields.io/badge/platforms-11-blue?style=flat-square" alt="platforms" />
2
+ <img src="https://img.shields.io/badge/version-0.12.2-orange?style=flat-square" alt="version" />
3
+ <img src="https://img.shields.io/badge/platforms-16-blue?style=flat-square" alt="platforms" />
4
4
  <img src="https://img.shields.io/badge/agents-12-blue?style=flat-square" alt="agents" />
5
5
  <img src="https://img.shields.io/badge/workflows-10-green?style=flat-square" alt="workflows" />
6
6
  <img src="https://img.shields.io/badge/detectors-19-red?style=flat-square" alt="detectors" />
7
- <img src="https://img.shields.io/badge/tests-499-passing-brightgreen?style=flat-square" alt="tests" />
8
- <img src="https://img.shields.io/badge/npm-0.11.2-cb3837?style=flat-square&logo=npm" alt="npm" />
7
+ <img src="https://img.shields.io/badge/tests-560-passing-brightgreen?style=flat-square" alt="tests" />
8
+ <img src="https://img.shields.io/badge/npm-0.12.2-cb3837?style=flat-square&logo=npm" alt="npm" />
9
9
  </p>
10
10
 
11
11
  # SCALE Engine v0.11.2
@@ -60,7 +60,7 @@ v0.11.1 introduces four priority improvements:
60
60
  - Optional strict TDD evidence gate with `--tdd-evidence` and `--tdd-strict`
61
61
  - `ship --no-commit` delivery reports
62
62
  - Review-gated release commits
63
- - 11 platform adapters, 12 professional agent profiles
63
+ - 16 platform adapters, 12 professional agent profiles
64
64
  - Browser QA Capability (Playwright MCP)
65
65
  - Evolution self-improve loop
66
66
  - 499 Vitest tests passing
@@ -141,7 +141,7 @@ G7 `SecurityGate` includes a lightweight built-in scan for hardcoded secrets, pr
141
141
 
142
142
  ## Supported Platforms
143
143
 
144
- SCALE Engine includes adapters for 11 agent platforms, including Claude Code, Codex CLI, OpenCode, Cursor, Gemini CLI, OpenClaw, Hermes, Trae, WorkBuddy, VS Code Copilot CLI, and QCoder.
144
+ SCALE Engine includes adapters for 16 agent platforms, including Claude Code, Codex CLI, OpenCode, Cursor, Gemini CLI, OpenClaw, Hermes, Trae, WorkBuddy, VS Code Copilot CLI, QCoder, DeepSeek-TUI, Aider, Windsurf, Kimi, and Doubao.
145
145
 
146
146
  It also includes 12 professional agent profiles:
147
147
 
package/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  <p align="center">
2
- <img src="https://img.shields.io/badge/version-0.12.0-orange?style=flat-square" alt="version" />
3
- <img src="https://img.shields.io/badge/platforms-13-blue?style=flat-square" alt="platforms" />
2
+ <img src="https://img.shields.io/badge/version-0.12.2-orange?style=flat-square" alt="version" />
3
+ <img src="https://img.shields.io/badge/platforms-16-blue?style=flat-square" alt="platforms" />
4
4
  <img src="https://img.shields.io/badge/agents-12-blue?style=flat-square" alt="agents" />
5
5
  <img src="https://img.shields.io/badge/workflows-10-green?style=flat-square" alt="workflows" />
6
6
  <img src="https://img.shields.io/badge/detectors-19-red?style=flat-square" alt="detectors" />
7
7
  <img src="https://img.shields.io/badge/tests-562-passing-brightgreen?style=flat-square" alt="tests" />
8
- <img src="https://img.shields.io/badge/npm-0.12.0-cb3837?style=flat-square&logo=npm" alt="npm" />
8
+ <img src="https://img.shields.io/badge/npm-0.12.2-cb3837?style=flat-square&logo=npm" alt="npm" />
9
9
  </p>
10
10
 
11
- # SCALE Engine v0.12.0
11
+ # SCALE Engine v0.12.2
12
12
 
13
13
  SCALE Engine 是一个面向 AI 编码 Agent 的工程化工作流运行时。它把提示词里的工程纪律,下沉为状态机、质量门禁、持久化证据、确定性 review 记录和发布检查。
14
14
 
@@ -61,7 +61,7 @@ v0.11.1 新增四大优先级改进:
61
61
  - 可选严格 TDD evidence 门禁:`--tdd-evidence` 和 `--tdd-strict`
62
62
  - `ship --no-commit` 交付报告
63
63
  - `ship` 发布前强制验证 review evidence
64
- - 11 个平台适配器,12 个专业 Agent Profile
64
+ - 16 个平台适配器,12 个专业 Agent Profile
65
65
  - Browser QA Capability (Playwright MCP)
66
66
  - Evolution 自改进闭环
67
67
  - 本轮加固后,499 个 Vitest 测试通过
@@ -144,7 +144,7 @@ G7 `SecurityGate` 内置轻量安全扫描,覆盖硬编码密钥、私钥、TL
144
144
 
145
145
  ## 支持的平台与角色
146
146
 
147
- SCALE Engine 内置 11 个平台适配器,包括 Claude Code、Codex CLI、OpenCode、Cursor、Gemini CLI、OpenClaw、Hermes、Trae、WorkBuddy、VS Code Copilot CLI、QCoder。
147
+ SCALE Engine 内置 16 个平台适配器,包括 Claude Code、Codex CLI、OpenCode、Cursor、Gemini CLI、OpenClaw、Hermes、Trae、WorkBuddy、VS Code Copilot CLI、QCoder、DeepSeek-TUI、Aider、Windsurf、Kimi、Doubao
148
148
 
149
149
  内置 12 个专业 Agent Profile:
150
150
 
@@ -0,0 +1,22 @@
1
+ import type { IAgentAdapter, AdapterConfig, InitResult, SettingsJson } from './ClaudeCodeAdapter.js';
2
+ export declare class AiderAdapter implements IAgentAdapter {
3
+ readonly agentType = "aider";
4
+ private projectDir;
5
+ private scaleDir;
6
+ getSettingsPath(): string;
7
+ getKnowledgeDocPath(): string;
8
+ getSkillsDir(): string;
9
+ isInstalled(): boolean;
10
+ /**
11
+ * Generate settings as JSON (interface requirement)
12
+ * Aider uses YAML, so init() will convert this to YAML format
13
+ */
14
+ generateSettings(): SettingsJson;
15
+ mergeSettings(existing: SettingsJson): SettingsJson;
16
+ /**
17
+ * Convert SettingsJson to YAML format for Aider
18
+ */
19
+ private settingsToYaml;
20
+ generateKnowledgeDoc(projectName: string, techStack?: string[]): string;
21
+ init(config: AdapterConfig): Promise<InitResult>;
22
+ }
@@ -0,0 +1,262 @@
1
+ // SCALE Engine — Aider Adapter
2
+ // 生成 .aider.conf.yml + AIDER.md
3
+ // Aider: 开源 AI 编码 CLI (https://github.com/Aider-AI/aider)
4
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { logger } from '../core/logger.js';
7
+ // ============================================================================
8
+ // Aider Adapter
9
+ // ============================================================================
10
+ export class AiderAdapter {
11
+ constructor() {
12
+ this.agentType = 'aider';
13
+ this.projectDir = '.';
14
+ this.scaleDir = '.scale';
15
+ }
16
+ getSettingsPath() {
17
+ return join(this.projectDir, '.aider.conf.yml');
18
+ }
19
+ getKnowledgeDocPath() {
20
+ return join(this.projectDir, 'AIDER.md');
21
+ }
22
+ getSkillsDir() {
23
+ // Aider uses .aider/commands/ for custom commands
24
+ return join(this.projectDir, '.aider', 'commands');
25
+ }
26
+ isInstalled() {
27
+ return existsSync(join(this.projectDir, '.aider')) ||
28
+ existsSync(this.getSettingsPath());
29
+ }
30
+ /**
31
+ * Generate settings as JSON (interface requirement)
32
+ * Aider uses YAML, so init() will convert this to YAML format
33
+ */
34
+ generateSettings() {
35
+ return {
36
+ hooks: {
37
+ 'pre-tool-use': [
38
+ { matcher: 'Bash', command: 'scale gate pre-tool Bash --args-json "$ARGS" --session-id "$SESSION_ID"' },
39
+ { matcher: 'Editor|ApplyFix', command: 'scale gate pre-tool Edit --args-json "$ARGS" --session-id "$SESSION_ID"' },
40
+ { matcher: 'Create', command: 'scale gate pre-tool Write --args-json "$ARGS" --session-id "$SESSION_ID"' },
41
+ ],
42
+ 'post-tool-use': [
43
+ { matcher: 'Editor|ApplyFix', command: 'scale gate post-tool Edit --args-json "$ARGS" --exit-code "$EXIT_CODE" --session-id "$SESSION_ID"' },
44
+ { matcher: 'Bash', command: 'scale gate post-tool Bash --args-json "$ARGS" --exit-code "$EXIT_CODE" --session-id "$SESSION_ID"' },
45
+ { matcher: 'Create', command: 'scale gate post-tool Write --args-json "$ARGS" --exit-code "$EXIT_CODE" --session-id "$SESSION_ID"' },
46
+ ],
47
+ 'exit': [
48
+ { matcher: '', command: 'scale gate before-stop --session-id "$SESSION_ID"' },
49
+ ],
50
+ },
51
+ permissions: {
52
+ allow: ['scale:*'],
53
+ },
54
+ };
55
+ }
56
+ mergeSettings(existing) {
57
+ const generated = this.generateSettings();
58
+ const merged = { ...existing };
59
+ if (!merged.hooks)
60
+ merged.hooks = {};
61
+ for (const [hookType, entries] of Object.entries(generated.hooks)) {
62
+ if (!merged.hooks[hookType])
63
+ merged.hooks[hookType] = [];
64
+ for (const entry of entries) {
65
+ const alreadyExists = merged.hooks[hookType].some((e) => e.command.includes('scale '));
66
+ if (!alreadyExists) {
67
+ merged.hooks[hookType].push(entry);
68
+ }
69
+ }
70
+ }
71
+ if (!merged.permissions)
72
+ merged.permissions = {};
73
+ if (!merged.permissions.allow)
74
+ merged.permissions.allow = [];
75
+ for (const perm of generated.permissions.allow) {
76
+ if (!merged.permissions.allow.includes(perm)) {
77
+ merged.permissions.allow.push(perm);
78
+ }
79
+ }
80
+ return merged;
81
+ }
82
+ /**
83
+ * Convert SettingsJson to YAML format for Aider
84
+ */
85
+ settingsToYaml(settings) {
86
+ const lines = [
87
+ '# Aider Configuration with SCALE Engine Integration',
88
+ '# https://github.com/Aider-AI/aider',
89
+ '',
90
+ ];
91
+ // Write hooks section
92
+ if (settings.hooks) {
93
+ for (const [hookType, entries] of Object.entries(settings.hooks)) {
94
+ lines.push(`${hookType}:`);
95
+ for (const entry of entries) {
96
+ lines.push(` - command: ${entry.command}`);
97
+ if (entry.matcher) {
98
+ lines.push(` tools: ["${entry.matcher.replace(/\|/g, '", "')}"]`);
99
+ }
100
+ }
101
+ lines.push('');
102
+ }
103
+ }
104
+ // Write permissions section
105
+ if (settings.permissions?.allow) {
106
+ lines.push('# Allow SCALE commands without confirmation');
107
+ lines.push('auto-commits: false');
108
+ lines.push('dirty-commits: true');
109
+ lines.push('');
110
+ }
111
+ // Write additional Aider-specific settings
112
+ lines.push('# Model settings (can be overridden)');
113
+ lines.push('model: auto');
114
+ lines.push('');
115
+ lines.push('# Read AIDER.md for project context');
116
+ lines.push('read: AIDER.md');
117
+ return lines.join('\n');
118
+ }
119
+ generateKnowledgeDoc(projectName, techStack = []) {
120
+ const stackLine = techStack.length > 0
121
+ ? `\n## Tech Stack\n${techStack.map((t) => `- ${t}`).join('\n')}\n`
122
+ : '';
123
+ return `# ${projectName}
124
+ ${stackLine}
125
+ ## SCALE Engine Integration (Aider)
126
+
127
+ This project uses SCALE Engine for AI engineering governance via Aider CLI.
128
+
129
+ ### Commands
130
+ - \`scale create <type> <title>\` — Create artifact
131
+ - \`scale transition <id> <action>\` — Transition artifact state
132
+ - \`scale list --type Spec\` — List artifacts
133
+ - \`scale role activate <role>\` — Switch role
134
+ - \`scale doctor\` — Health check
135
+
136
+ ### Workflow
137
+ 1. **Explore** → Role: explorer (Read/Grep only)
138
+ 2. **Plan** → Create Spec → refine → approve (guard: ambiguity ≤ 0.2)
139
+ 3. **Implement** → Role: implementer (Edit/Write/Bash unlocked)
140
+ 4. **Verify** → Must run tests before claiming done
141
+ 5. **Learn** → Defects → Lessons → Rules → Hooks
142
+
143
+ ### Rules
144
+ - 🔴 Dangerous commands are physically blocked
145
+ - 🔴 Hardcoded secrets are blocked on Edit/Write
146
+ - 🟡 3 identical retries triggers brute-retry detection
147
+ - 🟡 Claiming done without running tests is blocked
148
+ - 🟢 All tool calls are tracked in .scale/events/
149
+
150
+ ### Aider-Specific Notes
151
+ - Aider uses \`/add\` and \`/drop\` to manage context files
152
+ - Use \`/run\` for shell commands (SCALE hooks apply)
153
+ - Use \`/clear\` to reset context between phases
154
+ - SCALE hooks are defined in \`.aider.conf.yml\`
155
+
156
+ ### Quick Reference
157
+ \`\`\`
158
+ # Start with exploration
159
+ > /add src/
160
+ > /read AIDER.md
161
+
162
+ # Plan phase
163
+ > scale create Spec "Feature name"
164
+
165
+ # Implement
166
+ > scale role activate implementer
167
+ > (make changes)
168
+
169
+ # Verify
170
+ > /run npm test
171
+
172
+ # Complete
173
+ > scale transition <id> approve
174
+ \`\`\`
175
+ `;
176
+ }
177
+ async init(config) {
178
+ this.projectDir = config.projectDir;
179
+ this.scaleDir = config.scaleDir ?? join(config.projectDir, '.scale');
180
+ const created = [];
181
+ const skipped = [];
182
+ // Create .scale subdirectories
183
+ for (const dir of ['events', 'artifacts', 'rules', 'hooks', 'checkpoints']) {
184
+ const fullDir = join(this.scaleDir, dir);
185
+ if (!existsSync(fullDir)) {
186
+ mkdirSync(fullDir, { recursive: true });
187
+ created.push(fullDir);
188
+ }
189
+ else {
190
+ skipped.push(fullDir);
191
+ }
192
+ }
193
+ // Create .aider directory for commands
194
+ const aiderDir = join(this.projectDir, '.aider', 'commands');
195
+ if (!existsSync(aiderDir)) {
196
+ mkdirSync(aiderDir, { recursive: true });
197
+ created.push(aiderDir);
198
+ }
199
+ else {
200
+ skipped.push(aiderDir);
201
+ }
202
+ // Create/merge .aider.conf.yml
203
+ const settingsPath = this.getSettingsPath();
204
+ if (existsSync(settingsPath)) {
205
+ // Parse existing YAML (simple approach: check for SCALE hooks)
206
+ const existingYaml = readFileSync(settingsPath, 'utf-8');
207
+ if (existingYaml.includes('scale gate')) {
208
+ skipped.push(settingsPath + ' (already integrated)');
209
+ }
210
+ else {
211
+ // Merge: prepend SCALE hooks
212
+ const generated = this.generateSettings();
213
+ const yamlContent = this.settingsToYaml(generated);
214
+ // Insert after header comments
215
+ const existingLines = existingYaml.split('\n');
216
+ let insertIndex = 0;
217
+ for (let i = 0; i < existingLines.length; i++) {
218
+ if (existingLines[i].startsWith('#') || existingLines[i].trim() === '') {
219
+ insertIndex = i + 1;
220
+ }
221
+ else {
222
+ break;
223
+ }
224
+ }
225
+ const merged = existingLines.slice(0, insertIndex).join('\n') + '\n' + yamlContent + '\n' + existingLines.slice(insertIndex).join('\n');
226
+ writeFileSync(settingsPath, merged.trimStart(), 'utf-8');
227
+ skipped.push(settingsPath + ' (merged)');
228
+ }
229
+ }
230
+ else {
231
+ const generated = this.generateSettings();
232
+ const yamlContent = this.settingsToYaml(generated);
233
+ writeFileSync(settingsPath, yamlContent, 'utf-8');
234
+ created.push(settingsPath);
235
+ }
236
+ // Create AIDER.md knowledge doc
237
+ const knowledgeDocPath = this.getKnowledgeDocPath();
238
+ if (!existsSync(knowledgeDocPath)) {
239
+ const projectName = config.projectDir.split(/[/\\]/).pop() ?? 'Project';
240
+ writeFileSync(knowledgeDocPath, this.generateKnowledgeDoc(projectName), 'utf-8');
241
+ created.push(knowledgeDocPath);
242
+ }
243
+ else {
244
+ skipped.push(knowledgeDocPath);
245
+ }
246
+ // Create .scale/.gitignore
247
+ const gitignorePath = join(this.scaleDir, '.gitignore');
248
+ if (!existsSync(gitignorePath)) {
249
+ writeFileSync(gitignorePath, `*.db\n*.db-journal\nevents/\ncheckpoints/\nhooks/*.sh\n`, 'utf-8');
250
+ created.push(gitignorePath);
251
+ }
252
+ logger.info({ created: created.length, skipped: skipped.length }, 'SCALE init (aider) completed');
253
+ return {
254
+ settingsPath,
255
+ knowledgeDocPath,
256
+ scaleDir: this.scaleDir,
257
+ created,
258
+ skipped,
259
+ };
260
+ }
261
+ }
262
+ //# sourceMappingURL=AiderAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiderAdapter.js","sourceRoot":"","sources":["../../src/adapters/AiderAdapter.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 DoubaoAdapter implements IAgentAdapter {
3
+ readonly agentType = "doubao";
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,184 @@
1
+ // SCALE Engine — Doubao Adapter
2
+ // 生成 .doubao/settings.json + .doubao/rules.md + .doubao/skills/
3
+ // Doubao: ByteDance AI assistant (https://www.doubao.com)
4
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { logger } from '../core/logger.js';
7
+ // ============================================================================
8
+ // Doubao Adapter
9
+ // ============================================================================
10
+ export class DoubaoAdapter {
11
+ constructor() {
12
+ this.agentType = 'doubao';
13
+ this.projectDir = '.';
14
+ this.scaleDir = '.scale';
15
+ }
16
+ getSettingsPath() {
17
+ return join(this.projectDir, '.doubao', 'settings.json');
18
+ }
19
+ getKnowledgeDocPath() {
20
+ return join(this.projectDir, '.doubao', 'rules.md');
21
+ }
22
+ getSkillsDir() {
23
+ return join(this.projectDir, '.doubao', 'skills');
24
+ }
25
+ isInstalled() {
26
+ return existsSync(join(this.projectDir, '.doubao'));
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
+ 'stop': [
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 (Doubao)
81
+
82
+ This project uses SCALE Engine for AI engineering governance via Doubao (ByteDance 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
+ ### Doubao-Specific Notes
106
+ - Doubao supports Chinese-optimized reasoning
107
+ - Use Doubao for Chinese documentation and analysis
108
+ - This rules.md file provides AI assistant context
109
+ - SCALE hooks are defined in \`.doubao/settings.json\`
110
+ - ByteDance Trae IDE users may also use \`scale init --agent trae\`
111
+ `;
112
+ }
113
+ async init(config) {
114
+ this.projectDir = config.projectDir;
115
+ this.scaleDir = config.scaleDir ?? join(config.projectDir, '.scale');
116
+ const created = [];
117
+ const skipped = [];
118
+ // 1. Create .scale/ directory structure
119
+ for (const dir of ['events', 'artifacts', 'rules', 'hooks', 'checkpoints']) {
120
+ const fullDir = join(this.scaleDir, dir);
121
+ if (!existsSync(fullDir)) {
122
+ mkdirSync(fullDir, { recursive: true });
123
+ created.push(fullDir);
124
+ }
125
+ else {
126
+ skipped.push(fullDir);
127
+ }
128
+ }
129
+ // 2. Create .doubao/ directory + settings.json
130
+ const doubaoDir = join(this.projectDir, '.doubao');
131
+ if (!existsSync(doubaoDir)) {
132
+ mkdirSync(doubaoDir, { recursive: true });
133
+ created.push(doubaoDir);
134
+ }
135
+ else {
136
+ skipped.push(doubaoDir);
137
+ }
138
+ const settingsPath = this.getSettingsPath();
139
+ if (existsSync(settingsPath)) {
140
+ const existing = JSON.parse(readFileSync(settingsPath, 'utf-8'));
141
+ const merged = this.mergeSettings(existing);
142
+ writeFileSync(settingsPath, JSON.stringify(merged, null, 2), 'utf-8');
143
+ skipped.push(settingsPath + ' (merged)');
144
+ }
145
+ else {
146
+ writeFileSync(settingsPath, JSON.stringify(this.generateSettings(), null, 2), 'utf-8');
147
+ created.push(settingsPath);
148
+ }
149
+ // 3. Create skills directory
150
+ const skillsDir = this.getSkillsDir();
151
+ if (!existsSync(skillsDir)) {
152
+ mkdirSync(skillsDir, { recursive: true });
153
+ created.push(skillsDir);
154
+ }
155
+ else {
156
+ skipped.push(skillsDir);
157
+ }
158
+ // 4. Create .doubao/rules.md (knowledge document)
159
+ const knowledgeDocPath = this.getKnowledgeDocPath();
160
+ if (!existsSync(knowledgeDocPath)) {
161
+ const projectName = config.projectDir.split(/[/\\]/).pop() ?? 'Project';
162
+ writeFileSync(knowledgeDocPath, this.generateKnowledgeDoc(projectName), 'utf-8');
163
+ created.push(knowledgeDocPath);
164
+ }
165
+ else {
166
+ skipped.push(knowledgeDocPath);
167
+ }
168
+ // 5. .gitignore
169
+ const gitignorePath = join(this.scaleDir, '.gitignore');
170
+ if (!existsSync(gitignorePath)) {
171
+ writeFileSync(gitignorePath, `*.db\n*.db-journal\nevents/\ncheckpoints/\nhooks/*.sh\n`, 'utf-8');
172
+ created.push(gitignorePath);
173
+ }
174
+ logger.info({ created: created.length, skipped: skipped.length }, 'SCALE init (doubao) completed');
175
+ return {
176
+ settingsPath,
177
+ knowledgeDocPath,
178
+ scaleDir: this.scaleDir,
179
+ created,
180
+ skipped,
181
+ };
182
+ }
183
+ }
184
+ //# sourceMappingURL=DoubaoAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DoubaoAdapter.js","sourceRoot":"","sources":["../../src/adapters/DoubaoAdapter.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 KimiAdapter implements IAgentAdapter {
3
+ readonly agentType = "kimi";
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
+ }