@hongmaple0820/scale-engine 0.12.3 → 0.14.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/dist/adapters/AiderAdapter.js +1 -1
- package/dist/adapters/AiderAdapter.js.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.d.ts +1 -0
- package/dist/adapters/ClaudeCodeAdapter.js +5 -3
- package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
- package/dist/adapters/CodexAdapter.js +1 -1
- package/dist/adapters/CodexAdapter.js.map +1 -1
- package/dist/adapters/CursorAdapter.js +1 -1
- package/dist/adapters/CursorAdapter.js.map +1 -1
- package/dist/adapters/DeepSeekTuiAdapter.js +5 -3
- package/dist/adapters/DeepSeekTuiAdapter.js.map +1 -1
- package/dist/adapters/DoubaoAdapter.js +1 -1
- package/dist/adapters/DoubaoAdapter.js.map +1 -1
- package/dist/adapters/GeminiAdapter.js +1 -1
- package/dist/adapters/GeminiAdapter.js.map +1 -1
- package/dist/adapters/HermesAdapter.js +1 -1
- package/dist/adapters/HermesAdapter.js.map +1 -1
- package/dist/adapters/KimiAdapter.js +1 -1
- package/dist/adapters/KimiAdapter.js.map +1 -1
- package/dist/adapters/KiroAdapter.d.ts +14 -0
- package/dist/adapters/KiroAdapter.js +180 -0
- package/dist/adapters/KiroAdapter.js.map +1 -0
- package/dist/adapters/OpenClawAdapter.js +1 -1
- package/dist/adapters/OpenClawAdapter.js.map +1 -1
- package/dist/adapters/OpenCodeAdapter.js +1 -1
- package/dist/adapters/OpenCodeAdapter.js.map +1 -1
- package/dist/adapters/QCoderAdapter.js +1 -1
- package/dist/adapters/QCoderAdapter.js.map +1 -1
- package/dist/adapters/TraeAdapter.js +1 -1
- package/dist/adapters/TraeAdapter.js.map +1 -1
- package/dist/adapters/VSCAdapter.js +1 -1
- package/dist/adapters/VSCAdapter.js.map +1 -1
- package/dist/adapters/WindsurfAdapter.js +1 -1
- package/dist/adapters/WindsurfAdapter.js.map +1 -1
- package/dist/adapters/WorkBuddyAdapter.js +1 -1
- package/dist/adapters/WorkBuddyAdapter.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -0
- package/dist/adapters/index.js +3 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/api/cli.js +690 -9
- package/dist/api/cli.js.map +1 -1
- package/dist/api/doctor.d.ts +13 -0
- package/dist/api/doctor.js +261 -5
- package/dist/api/doctor.js.map +1 -1
- package/dist/api/quickstart.d.ts +20 -1
- package/dist/api/quickstart.js +104 -3
- package/dist/api/quickstart.js.map +1 -1
- package/dist/artifact/types.d.ts +16 -2
- package/dist/artifact/types.js.map +1 -1
- package/dist/cli/phaseCommands.d.ts +66 -0
- package/dist/cli/phaseCommands.js +695 -51
- package/dist/cli/phaseCommands.js.map +1 -1
- package/dist/guardrails/detectors.d.ts +9 -0
- package/dist/guardrails/detectors.js +102 -0
- package/dist/guardrails/detectors.js.map +1 -1
- package/dist/hooks/HookGeneratorEnhanced.js +29 -0
- package/dist/hooks/HookGeneratorEnhanced.js.map +1 -1
- package/dist/hooks/WorkflowHooksManager.js +20 -1
- package/dist/hooks/WorkflowHooksManager.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/output/BrandThemeLoader.d.ts +54 -0
- package/dist/output/BrandThemeLoader.js +340 -0
- package/dist/output/BrandThemeLoader.js.map +1 -0
- package/dist/output/HTMLDocumentRenderer.d.ts +83 -0
- package/dist/output/HTMLDocumentRenderer.js +717 -0
- package/dist/output/HTMLDocumentRenderer.js.map +1 -0
- package/dist/output/UIPrototypeRenderer.d.ts +61 -0
- package/dist/output/UIPrototypeRenderer.js +500 -0
- package/dist/output/UIPrototypeRenderer.js.map +1 -0
- package/dist/output/index.d.ts +6 -0
- package/dist/output/index.js +6 -0
- package/dist/output/index.js.map +1 -0
- package/dist/skills/ExternalSkills.js +2 -0
- package/dist/skills/ExternalSkills.js.map +1 -1
- package/dist/skills/SkillCatalog.d.ts +13 -0
- package/dist/skills/SkillCatalog.js +184 -0
- package/dist/skills/SkillCatalog.js.map +1 -0
- package/dist/skills/SkillDiscovery.js +2 -1
- package/dist/skills/SkillDiscovery.js.map +1 -1
- package/dist/skills/SkillDoctor.d.ts +37 -0
- package/dist/skills/SkillDoctor.js +90 -0
- package/dist/skills/SkillDoctor.js.map +1 -0
- package/dist/skills/index.d.ts +2 -0
- package/dist/skills/index.js +2 -0
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/routing/SkillGate.d.ts +12 -0
- package/dist/skills/routing/SkillGate.js +93 -0
- package/dist/skills/routing/SkillGate.js.map +1 -0
- package/dist/skills/routing/SkillPlanner.d.ts +8 -0
- package/dist/skills/routing/SkillPlanner.js +91 -0
- package/dist/skills/routing/SkillPlanner.js.map +1 -0
- package/dist/skills/routing/SkillPolicy.d.ts +6 -0
- package/dist/skills/routing/SkillPolicy.js +173 -0
- package/dist/skills/routing/SkillPolicy.js.map +1 -0
- package/dist/skills/routing/SkillRoutingTypes.d.ts +72 -0
- package/dist/skills/routing/SkillRoutingTypes.js +2 -0
- package/dist/skills/routing/SkillRoutingTypes.js.map +1 -0
- package/dist/skills/routing/TaskIntentClassifier.d.ts +6 -0
- package/dist/skills/routing/TaskIntentClassifier.js +79 -0
- package/dist/skills/routing/TaskIntentClassifier.js.map +1 -0
- package/dist/skills/routing/index.d.ts +5 -0
- package/dist/skills/routing/index.js +6 -0
- package/dist/skills/routing/index.js.map +1 -0
- package/dist/workflow/GovernanceLock.d.ts +35 -0
- package/dist/workflow/GovernanceLock.js +58 -0
- package/dist/workflow/GovernanceLock.js.map +1 -0
- package/dist/workflow/GovernanceTemplatePacks.d.ts +24 -0
- package/dist/workflow/GovernanceTemplatePacks.js +83 -0
- package/dist/workflow/GovernanceTemplatePacks.js.map +1 -0
- package/dist/workflow/GovernanceTemplates.d.ts +17 -0
- package/dist/workflow/GovernanceTemplates.js +686 -0
- package/dist/workflow/GovernanceTemplates.js.map +1 -0
- package/dist/workflow/PhaseMarkerTracker.d.ts +63 -0
- package/dist/workflow/PhaseMarkerTracker.js +291 -0
- package/dist/workflow/PhaseMarkerTracker.js.map +1 -0
- package/dist/workflow/SessionStateTracker.d.ts +74 -0
- package/dist/workflow/SessionStateTracker.js +270 -0
- package/dist/workflow/SessionStateTracker.js.map +1 -0
- package/dist/workflow/TaskArtifactScaffolder.d.ts +47 -0
- package/dist/workflow/TaskArtifactScaffolder.js +237 -0
- package/dist/workflow/TaskArtifactScaffolder.js.map +1 -0
- package/dist/workflow/TaskMetricsStore.d.ts +49 -0
- package/dist/workflow/TaskMetricsStore.js +149 -0
- package/dist/workflow/TaskMetricsStore.js.map +1 -0
- package/dist/workflow/VerificationCommands.d.ts +2 -0
- package/dist/workflow/VerificationCommands.js +8 -12
- package/dist/workflow/VerificationCommands.js.map +1 -1
- package/dist/workflow/VerificationProfile.d.ts +56 -0
- package/dist/workflow/VerificationProfile.js +170 -0
- package/dist/workflow/VerificationProfile.js.map +1 -0
- package/dist/workflow/WorkflowArtifactWriter.d.ts +113 -0
- package/dist/workflow/WorkflowArtifactWriter.js +241 -0
- package/dist/workflow/WorkflowArtifactWriter.js.map +1 -0
- package/dist/workflow/WorkflowEngine.d.ts +26 -5
- package/dist/workflow/WorkflowEngine.js +38 -9
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/dist/workflow/WorkspaceLifecycle.d.ts +51 -0
- package/dist/workflow/WorkspaceLifecycle.js +259 -0
- package/dist/workflow/WorkspaceLifecycle.js.map +1 -0
- package/dist/workflow/autonomous/AutonomousDevLoop.d.ts +88 -0
- package/dist/workflow/autonomous/AutonomousDevLoop.js +381 -0
- package/dist/workflow/autonomous/AutonomousDevLoop.js.map +1 -0
- package/dist/workflow/autonomous/WorklogManager.d.ts +50 -0
- package/dist/workflow/autonomous/WorklogManager.js +264 -0
- package/dist/workflow/autonomous/WorklogManager.js.map +1 -0
- package/dist/workflow/autonomous/index.d.ts +2 -0
- package/dist/workflow/autonomous/index.js +4 -0
- package/dist/workflow/autonomous/index.js.map +1 -0
- package/dist/workflow/gates/GateSystem.d.ts +12 -3
- package/dist/workflow/gates/GateSystem.js +185 -41
- package/dist/workflow/gates/GateSystem.js.map +1 -1
- package/dist/workflow/index.d.ts +10 -0
- package/dist/workflow/index.js +10 -0
- package/dist/workflow/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
3
|
+
import { execa } from 'execa';
|
|
4
|
+
export async function inspectWorkspaceLifecycle(options = {}) {
|
|
5
|
+
const projectDir = resolve(options.projectDir ?? process.cwd());
|
|
6
|
+
const rootTopLevel = await gitRequired(projectDir, ['rev-parse', '--show-toplevel']);
|
|
7
|
+
const root = await inspectRepository(rootTopLevel, rootTopLevel, 'root');
|
|
8
|
+
const childRepositories = await inspectChildRepositories(rootTopLevel);
|
|
9
|
+
const finish = decideFinish(root, childRepositories);
|
|
10
|
+
return { root, childRepositories, finish };
|
|
11
|
+
}
|
|
12
|
+
export async function cleanupWorkspaceLifecycle(options = {}) {
|
|
13
|
+
const report = await inspectWorkspaceLifecycle(options);
|
|
14
|
+
const targetPath = resolve(report.root.path);
|
|
15
|
+
const mode = options.apply ? 'apply' : 'dry-run';
|
|
16
|
+
const confirmationToken = report.root.branch ?? report.root.head;
|
|
17
|
+
const blockers = [...report.finish.blockers];
|
|
18
|
+
const warnings = [...report.finish.warnings];
|
|
19
|
+
if (!report.root.isLinkedWorktree) {
|
|
20
|
+
blockers.push('Workspace root is not a linked worktree');
|
|
21
|
+
}
|
|
22
|
+
if (report.root.isSubmodule) {
|
|
23
|
+
blockers.push('Workspace root is a submodule; clean it up from the parent repository workflow');
|
|
24
|
+
}
|
|
25
|
+
if (!report.root.gitCommonDir) {
|
|
26
|
+
blockers.push('Workspace git common directory could not be resolved');
|
|
27
|
+
}
|
|
28
|
+
if (!confirmationToken) {
|
|
29
|
+
blockers.push('Cleanup confirmation token could not be resolved from branch or HEAD');
|
|
30
|
+
}
|
|
31
|
+
const mainRoot = report.root.gitCommonDir ? resolve(dirname(report.root.gitCommonDir)) : null;
|
|
32
|
+
if (mainRoot && normalizeAbsolute(mainRoot) === normalizeAbsolute(targetPath)) {
|
|
33
|
+
blockers.push('Refusing to remove the main repository checkout');
|
|
34
|
+
}
|
|
35
|
+
if (mainRoot && !await isRegisteredWorktree(mainRoot, targetPath)) {
|
|
36
|
+
blockers.push('Workspace root is not registered in git worktree list');
|
|
37
|
+
}
|
|
38
|
+
if (mode === 'apply') {
|
|
39
|
+
if (!options.confirm || options.confirm !== confirmationToken) {
|
|
40
|
+
blockers.push(`Cleanup apply requires confirmation token "${confirmationToken ?? '(unknown)'}"; pass --confirm ${confirmationToken ?? '(unknown)'}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const canApply = blockers.length === 0;
|
|
44
|
+
const commands = [`git worktree remove "${targetPath}"`];
|
|
45
|
+
if (mode === 'apply' && canApply && mainRoot) {
|
|
46
|
+
await execa('git', ['worktree', 'remove', targetPath], { cwd: mainRoot });
|
|
47
|
+
return {
|
|
48
|
+
mode,
|
|
49
|
+
canApply,
|
|
50
|
+
applied: true,
|
|
51
|
+
targetPath,
|
|
52
|
+
confirmationToken,
|
|
53
|
+
blockers,
|
|
54
|
+
warnings,
|
|
55
|
+
commands,
|
|
56
|
+
report,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
mode,
|
|
61
|
+
canApply,
|
|
62
|
+
applied: false,
|
|
63
|
+
targetPath,
|
|
64
|
+
confirmationToken,
|
|
65
|
+
blockers,
|
|
66
|
+
warnings,
|
|
67
|
+
commands,
|
|
68
|
+
report,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async function inspectRepository(repoDir, rootDir, kind, explicitRelativePath) {
|
|
72
|
+
const [branch, head, gitDirRaw, gitCommonDirRaw, superproject, status, upstream] = await Promise.all([
|
|
73
|
+
gitOptional(repoDir, ['branch', '--show-current']),
|
|
74
|
+
gitOptional(repoDir, ['rev-parse', '--short', 'HEAD']),
|
|
75
|
+
gitOptional(repoDir, ['rev-parse', '--git-dir']),
|
|
76
|
+
gitOptional(repoDir, ['rev-parse', '--git-common-dir']),
|
|
77
|
+
gitOptional(repoDir, ['rev-parse', '--show-superproject-working-tree']),
|
|
78
|
+
gitOptional(repoDir, ['status', '--porcelain=v1'], { trim: false }),
|
|
79
|
+
gitOptional(repoDir, ['rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{upstream}']),
|
|
80
|
+
]);
|
|
81
|
+
const aheadBehind = upstream ? await readAheadBehind(repoDir) : { ahead: 0, behind: 0 };
|
|
82
|
+
const parsedStatus = parsePorcelainStatus(status);
|
|
83
|
+
const gitDir = gitDirRaw ? absolutizeGitPath(repoDir, gitDirRaw) : null;
|
|
84
|
+
const gitCommonDir = gitCommonDirRaw ? absolutizeGitPath(repoDir, gitCommonDirRaw) : null;
|
|
85
|
+
const isSubmodule = Boolean(superproject);
|
|
86
|
+
return {
|
|
87
|
+
kind,
|
|
88
|
+
path: repoDir,
|
|
89
|
+
relativePath: explicitRelativePath ?? (normalizeRelative(relative(rootDir, repoDir)) || '.'),
|
|
90
|
+
branch: branch || null,
|
|
91
|
+
head: head || null,
|
|
92
|
+
upstream: upstream || null,
|
|
93
|
+
ahead: aheadBehind.ahead,
|
|
94
|
+
behind: aheadBehind.behind,
|
|
95
|
+
gitDir,
|
|
96
|
+
gitCommonDir,
|
|
97
|
+
isLinkedWorktree: Boolean(gitDir && gitCommonDir && gitDir !== gitCommonDir && !isSubmodule),
|
|
98
|
+
isSubmodule,
|
|
99
|
+
superproject: superproject || null,
|
|
100
|
+
clean: parsedStatus.clean,
|
|
101
|
+
staged: parsedStatus.staged,
|
|
102
|
+
unstaged: parsedStatus.unstaged,
|
|
103
|
+
untracked: parsedStatus.untracked,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
async function inspectChildRepositories(rootDir) {
|
|
107
|
+
const submodules = await readGitmodules(rootDir);
|
|
108
|
+
const statuses = [];
|
|
109
|
+
const seen = new Set();
|
|
110
|
+
for (const relativePath of submodules) {
|
|
111
|
+
const repoDir = join(rootDir, relativePath);
|
|
112
|
+
if (!existsSync(repoDir))
|
|
113
|
+
continue;
|
|
114
|
+
if (!await isGitRepository(repoDir))
|
|
115
|
+
continue;
|
|
116
|
+
seen.add(resolve(repoDir));
|
|
117
|
+
statuses.push(await inspectRepository(repoDir, rootDir, 'submodule', normalizeRelative(relativePath)));
|
|
118
|
+
}
|
|
119
|
+
for (const repoDir of findNestedGitRepositories(rootDir)) {
|
|
120
|
+
const resolved = resolve(repoDir);
|
|
121
|
+
if (seen.has(resolved))
|
|
122
|
+
continue;
|
|
123
|
+
seen.add(resolved);
|
|
124
|
+
statuses.push(await inspectRepository(repoDir, rootDir, 'nested-repo'));
|
|
125
|
+
}
|
|
126
|
+
return statuses.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
127
|
+
}
|
|
128
|
+
function decideFinish(root, childRepositories) {
|
|
129
|
+
const blockers = [];
|
|
130
|
+
const warnings = [];
|
|
131
|
+
const nextActions = [];
|
|
132
|
+
if (!root.clean)
|
|
133
|
+
blockers.push('Root repository has uncommitted changes');
|
|
134
|
+
if (root.upstream && root.ahead > 0)
|
|
135
|
+
warnings.push(`Root branch ${root.branch ?? '(detached)'} is ${root.ahead} commit(s) ahead of ${root.upstream}`);
|
|
136
|
+
if (!root.upstream && root.branch)
|
|
137
|
+
warnings.push(`Root branch ${root.branch} has no upstream`);
|
|
138
|
+
for (const child of childRepositories) {
|
|
139
|
+
if (!child.clean)
|
|
140
|
+
blockers.push(`Child repository ${child.relativePath} has uncommitted changes`);
|
|
141
|
+
if (child.upstream && child.ahead > 0)
|
|
142
|
+
blockers.push(`Child repository ${child.relativePath} has unpushed commits`);
|
|
143
|
+
if (!child.upstream && child.branch)
|
|
144
|
+
warnings.push(`Child repository ${child.relativePath} branch ${child.branch} has no upstream`);
|
|
145
|
+
}
|
|
146
|
+
if (blockers.length === 0) {
|
|
147
|
+
if (root.isLinkedWorktree) {
|
|
148
|
+
nextActions.push('Safe to remove linked worktree after branch is pushed, merged, or intentionally discarded');
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
nextActions.push('No linked worktree cleanup is required for the root checkout');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
nextActions.push('Commit or stash child repository changes before removing the temporary worktree');
|
|
156
|
+
nextActions.push('If child repositories changed, push or review them in their own remotes before root cleanup');
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
canCleanup: blockers.length === 0 && root.isLinkedWorktree,
|
|
160
|
+
blockers,
|
|
161
|
+
warnings,
|
|
162
|
+
nextActions,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
async function readGitmodules(rootDir) {
|
|
166
|
+
if (!existsSync(join(rootDir, '.gitmodules')))
|
|
167
|
+
return [];
|
|
168
|
+
const output = await gitOptional(rootDir, ['config', '--file', '.gitmodules', '--get-regexp', 'path']);
|
|
169
|
+
return output
|
|
170
|
+
.split(/\r?\n/)
|
|
171
|
+
.map(line => line.trim().split(/\s+/)[1])
|
|
172
|
+
.filter((path) => Boolean(path))
|
|
173
|
+
.map(normalizeRelative);
|
|
174
|
+
}
|
|
175
|
+
function findNestedGitRepositories(rootDir) {
|
|
176
|
+
const results = [];
|
|
177
|
+
const ignored = new Set(['.git', '.scale', 'node_modules', 'dist', 'coverage', '.worktrees', 'worktrees']);
|
|
178
|
+
function walk(dir, depth) {
|
|
179
|
+
if (depth > 5)
|
|
180
|
+
return;
|
|
181
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
182
|
+
if (!entry.isDirectory())
|
|
183
|
+
continue;
|
|
184
|
+
if (ignored.has(entry.name))
|
|
185
|
+
continue;
|
|
186
|
+
const child = join(dir, entry.name);
|
|
187
|
+
if (existsSync(join(child, '.git'))) {
|
|
188
|
+
results.push(child);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
walk(child, depth + 1);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
walk(rootDir, 0);
|
|
195
|
+
return results;
|
|
196
|
+
}
|
|
197
|
+
async function isGitRepository(dir) {
|
|
198
|
+
const result = await execa('git', ['rev-parse', '--is-inside-work-tree'], { cwd: dir, reject: false });
|
|
199
|
+
return result.exitCode === 0 && result.stdout.trim() === 'true';
|
|
200
|
+
}
|
|
201
|
+
async function isRegisteredWorktree(mainRoot, targetPath) {
|
|
202
|
+
const result = await execa('git', ['worktree', 'list', '--porcelain'], { cwd: mainRoot, reject: false });
|
|
203
|
+
if (result.exitCode !== 0)
|
|
204
|
+
return false;
|
|
205
|
+
const normalizedTarget = normalizeAbsolute(targetPath);
|
|
206
|
+
return result.stdout
|
|
207
|
+
.split(/\r?\n/)
|
|
208
|
+
.filter(line => line.startsWith('worktree '))
|
|
209
|
+
.some(line => normalizeAbsolute(line.slice('worktree '.length)) === normalizedTarget);
|
|
210
|
+
}
|
|
211
|
+
async function readAheadBehind(repoDir) {
|
|
212
|
+
const output = await gitOptional(repoDir, ['rev-list', '--left-right', '--count', '@{upstream}...HEAD']);
|
|
213
|
+
const [behind, ahead] = output.split(/\s+/).map(value => Number.parseInt(value, 10));
|
|
214
|
+
return {
|
|
215
|
+
ahead: Number.isFinite(ahead) ? ahead : 0,
|
|
216
|
+
behind: Number.isFinite(behind) ? behind : 0,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
function parsePorcelainStatus(output) {
|
|
220
|
+
let staged = 0;
|
|
221
|
+
let unstaged = 0;
|
|
222
|
+
let untracked = 0;
|
|
223
|
+
for (const line of output.split(/\r?\n/).filter(Boolean)) {
|
|
224
|
+
if (line.startsWith('??')) {
|
|
225
|
+
untracked += 1;
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
if (line[0] !== ' ')
|
|
229
|
+
staged += 1;
|
|
230
|
+
if (line[1] !== ' ')
|
|
231
|
+
unstaged += 1;
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
clean: staged === 0 && unstaged === 0 && untracked === 0,
|
|
235
|
+
staged,
|
|
236
|
+
unstaged,
|
|
237
|
+
untracked,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
async function gitRequired(cwd, args) {
|
|
241
|
+
const result = await execa('git', args, { cwd });
|
|
242
|
+
return result.stdout.trim();
|
|
243
|
+
}
|
|
244
|
+
async function gitOptional(cwd, args, options = {}) {
|
|
245
|
+
const result = await execa('git', args, { cwd, reject: false });
|
|
246
|
+
if (result.exitCode !== 0)
|
|
247
|
+
return '';
|
|
248
|
+
return options.trim === false ? result.stdout : result.stdout.trim();
|
|
249
|
+
}
|
|
250
|
+
function absolutizeGitPath(cwd, path) {
|
|
251
|
+
return normalizeAbsolute(isAbsolute(path) ? path : resolve(cwd, path));
|
|
252
|
+
}
|
|
253
|
+
function normalizeAbsolute(path) {
|
|
254
|
+
return resolve(path).replace(/\\/g, '/');
|
|
255
|
+
}
|
|
256
|
+
function normalizeRelative(path) {
|
|
257
|
+
return path.replace(/\\/g, '/');
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=WorkspaceLifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceLifecycle.js","sourceRoot":"","sources":["../../src/workflow/WorkspaceLifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { IEventBus } from '../../core/eventBus.js';
|
|
2
|
+
import { WorklogManager, type WorklogState } from './WorklogManager.js';
|
|
3
|
+
export interface DevLoopConfig {
|
|
4
|
+
/** Base directory for .scale artifacts */
|
|
5
|
+
scaleDir: string;
|
|
6
|
+
/** Path to worklog markdown file */
|
|
7
|
+
worklogPath: string;
|
|
8
|
+
/** Path to baton directory for cross-session persistence */
|
|
9
|
+
batonPath: string;
|
|
10
|
+
/** Max defects to fix per run (prevents session timeout) */
|
|
11
|
+
maxDefectsPerRun: number;
|
|
12
|
+
/** Max features to develop per run */
|
|
13
|
+
maxFeaturesPerRun: number;
|
|
14
|
+
/** Command to run QA tests */
|
|
15
|
+
qaCommand: string;
|
|
16
|
+
/** Working directory for QA command execution */
|
|
17
|
+
cwd: string;
|
|
18
|
+
}
|
|
19
|
+
export interface QAResult {
|
|
20
|
+
passed: boolean;
|
|
21
|
+
totalTests: number;
|
|
22
|
+
passedTests: number;
|
|
23
|
+
failedTests: number;
|
|
24
|
+
failures: QAFailure[];
|
|
25
|
+
duration: number;
|
|
26
|
+
rawOutput: string;
|
|
27
|
+
}
|
|
28
|
+
export interface QAFailure {
|
|
29
|
+
testName: string;
|
|
30
|
+
file: string;
|
|
31
|
+
error: string;
|
|
32
|
+
}
|
|
33
|
+
export interface FixResult {
|
|
34
|
+
entryId: string;
|
|
35
|
+
success: boolean;
|
|
36
|
+
description: string;
|
|
37
|
+
filesChanged: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface DevResult {
|
|
40
|
+
entryId: string;
|
|
41
|
+
success: boolean;
|
|
42
|
+
description: string;
|
|
43
|
+
filesChanged: string[];
|
|
44
|
+
}
|
|
45
|
+
export interface LoopState {
|
|
46
|
+
runId: string;
|
|
47
|
+
startedAt: string;
|
|
48
|
+
phase: 'read_worklog' | 'run_qa' | 'fix_defects' | 'develop_features' | 'update_worklog' | 'write_baton' | 'complete';
|
|
49
|
+
worklogState?: WorklogState;
|
|
50
|
+
qaResult?: QAResult;
|
|
51
|
+
fixResults: FixResult[];
|
|
52
|
+
devResult?: DevResult;
|
|
53
|
+
errors: string[];
|
|
54
|
+
}
|
|
55
|
+
export interface LoopResult {
|
|
56
|
+
runId: string;
|
|
57
|
+
success: boolean;
|
|
58
|
+
duration: number;
|
|
59
|
+
phase: LoopState['phase'];
|
|
60
|
+
qaPassed: boolean;
|
|
61
|
+
defectsFixed: number;
|
|
62
|
+
featureProgressed: boolean;
|
|
63
|
+
errors: string[];
|
|
64
|
+
nextAction: string;
|
|
65
|
+
}
|
|
66
|
+
export declare function createDefaultConfig(overrides?: Partial<DevLoopConfig>): DevLoopConfig;
|
|
67
|
+
export declare class AutonomousDevLoop {
|
|
68
|
+
private config;
|
|
69
|
+
private eventBus;
|
|
70
|
+
private worklogManager;
|
|
71
|
+
constructor(eventBus: IEventBus, config?: Partial<DevLoopConfig>);
|
|
72
|
+
/** Execute the autonomous development loop */
|
|
73
|
+
run(): Promise<LoopResult>;
|
|
74
|
+
private readWorklog;
|
|
75
|
+
private runQA;
|
|
76
|
+
/** Parse QA output into structured result */
|
|
77
|
+
private parseQAOutput;
|
|
78
|
+
private fixDefects;
|
|
79
|
+
private developFeatures;
|
|
80
|
+
private updateWorklogState;
|
|
81
|
+
private writeBaton;
|
|
82
|
+
private buildBatonSession;
|
|
83
|
+
private buildNextPrompt;
|
|
84
|
+
private determineNextAction;
|
|
85
|
+
private buildResult;
|
|
86
|
+
getConfig(): DevLoopConfig;
|
|
87
|
+
getWorklogManager(): WorklogManager;
|
|
88
|
+
}
|