@hongmaple0820/scale-engine 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/adapters/AiderAdapter.js +53 -53
  2. package/dist/adapters/AiderAdapter.js.map +1 -1
  3. package/dist/adapters/ClaudeCodeAdapter.js +2 -0
  4. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  5. package/dist/adapters/CodexAdapter.js +1 -1
  6. package/dist/adapters/CodexAdapter.js.map +1 -1
  7. package/dist/adapters/CursorAdapter.js +1 -1
  8. package/dist/adapters/CursorAdapter.js.map +1 -1
  9. package/dist/adapters/DeepSeekTuiAdapter.js +2 -0
  10. package/dist/adapters/DeepSeekTuiAdapter.js.map +1 -1
  11. package/dist/adapters/DoubaoAdapter.js +34 -34
  12. package/dist/adapters/DoubaoAdapter.js.map +1 -1
  13. package/dist/adapters/GeminiAdapter.js +1 -1
  14. package/dist/adapters/GeminiAdapter.js.map +1 -1
  15. package/dist/adapters/HermesAdapter.js +1 -1
  16. package/dist/adapters/HermesAdapter.js.map +1 -1
  17. package/dist/adapters/KimiAdapter.js +33 -33
  18. package/dist/adapters/KimiAdapter.js.map +1 -1
  19. package/dist/adapters/KiroAdapter.js +27 -27
  20. package/dist/adapters/KiroAdapter.js.map +1 -1
  21. package/dist/adapters/OpenClawAdapter.js +1 -1
  22. package/dist/adapters/OpenClawAdapter.js.map +1 -1
  23. package/dist/adapters/OpenCodeAdapter.js +1 -1
  24. package/dist/adapters/OpenCodeAdapter.js.map +1 -1
  25. package/dist/adapters/QCoderAdapter.js +1 -1
  26. package/dist/adapters/QCoderAdapter.js.map +1 -1
  27. package/dist/adapters/TraeAdapter.js +1 -1
  28. package/dist/adapters/TraeAdapter.js.map +1 -1
  29. package/dist/adapters/VSCAdapter.js +1 -1
  30. package/dist/adapters/VSCAdapter.js.map +1 -1
  31. package/dist/adapters/WindsurfAdapter.js +33 -33
  32. package/dist/adapters/WindsurfAdapter.js.map +1 -1
  33. package/dist/adapters/WorkBuddyAdapter.js +1 -1
  34. package/dist/adapters/WorkBuddyAdapter.js.map +1 -1
  35. package/dist/api/cli.js +365 -13
  36. package/dist/api/cli.js.map +1 -1
  37. package/dist/api/doctor.d.ts +1 -0
  38. package/dist/api/doctor.js +29 -0
  39. package/dist/api/doctor.js.map +1 -1
  40. package/dist/api/quickstart.d.ts +1 -0
  41. package/dist/api/quickstart.js +2 -2
  42. package/dist/api/quickstart.js.map +1 -1
  43. package/dist/cli/phaseCommands.d.ts +5 -0
  44. package/dist/cli/phaseCommands.js +149 -25
  45. package/dist/cli/phaseCommands.js.map +1 -1
  46. package/dist/skills/ExternalSkills.js +2 -0
  47. package/dist/skills/ExternalSkills.js.map +1 -1
  48. package/dist/skills/SkillCatalog.d.ts +13 -0
  49. package/dist/skills/SkillCatalog.js +184 -0
  50. package/dist/skills/SkillCatalog.js.map +1 -0
  51. package/dist/skills/SkillDoctor.d.ts +37 -0
  52. package/dist/skills/SkillDoctor.js +90 -0
  53. package/dist/skills/SkillDoctor.js.map +1 -0
  54. package/dist/skills/index.d.ts +1 -0
  55. package/dist/skills/index.js +1 -0
  56. package/dist/skills/index.js.map +1 -1
  57. package/dist/skills/routing/SkillGate.d.ts +2 -1
  58. package/dist/skills/routing/SkillGate.js +19 -2
  59. package/dist/skills/routing/SkillGate.js.map +1 -1
  60. package/dist/skills/routing/SkillPlanner.js +40 -40
  61. package/dist/skills/routing/SkillPolicy.js +39 -12
  62. package/dist/skills/routing/SkillPolicy.js.map +1 -1
  63. package/dist/workflow/GovernanceLock.d.ts +35 -0
  64. package/dist/workflow/GovernanceLock.js +58 -0
  65. package/dist/workflow/GovernanceLock.js.map +1 -0
  66. package/dist/workflow/GovernanceTemplatePacks.d.ts +24 -0
  67. package/dist/workflow/GovernanceTemplatePacks.js +128 -0
  68. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -0
  69. package/dist/workflow/GovernanceTemplates.d.ts +6 -1
  70. package/dist/workflow/GovernanceTemplates.js +585 -414
  71. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  72. package/dist/workflow/TaskArtifactScaffolder.js +17 -17
  73. package/dist/workflow/TaskArtifactScaffolder.js.map +1 -1
  74. package/dist/workflow/VerificationCommands.js +1 -8
  75. package/dist/workflow/VerificationCommands.js.map +1 -1
  76. package/dist/workflow/VerificationProfile.d.ts +1 -0
  77. package/dist/workflow/VerificationProfile.js +42 -5
  78. package/dist/workflow/VerificationProfile.js.map +1 -1
  79. package/dist/workflow/WorkflowEngine.d.ts +6 -3
  80. package/dist/workflow/WorkflowEngine.js +1 -1
  81. package/dist/workflow/WorkflowEngine.js.map +1 -1
  82. package/dist/workflow/WorkspaceLifecycle.d.ts +53 -0
  83. package/dist/workflow/WorkspaceLifecycle.js +285 -0
  84. package/dist/workflow/WorkspaceLifecycle.js.map +1 -0
  85. package/dist/workflow/WorkspaceTopology.d.ts +49 -0
  86. package/dist/workflow/WorkspaceTopology.js +125 -0
  87. package/dist/workflow/WorkspaceTopology.js.map +1 -0
  88. package/dist/workflow/index.d.ts +4 -0
  89. package/dist/workflow/index.js +4 -0
  90. package/dist/workflow/index.js.map +1 -1
  91. package/package.json +2 -2
@@ -0,0 +1,285 @@
1
+ import { existsSync, readdirSync } from 'node:fs';
2
+ import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
3
+ import { execa } from 'execa';
4
+ import { resolveWorkspaceTopology, } from './WorkspaceTopology.js';
5
+ export async function inspectWorkspaceLifecycle(options = {}) {
6
+ const projectDir = resolve(options.projectDir ?? process.cwd());
7
+ const rootTopLevel = await gitRequired(projectDir, ['rev-parse', '--show-toplevel']);
8
+ const root = await inspectRepository(rootTopLevel, rootTopLevel, 'root');
9
+ const topology = resolveWorkspaceTopology({ projectDir: rootTopLevel });
10
+ const childRepositories = await inspectChildRepositories(rootTopLevel, topology);
11
+ const finish = decideFinish(root, childRepositories, topology);
12
+ return { root, childRepositories, topology, finish };
13
+ }
14
+ export async function cleanupWorkspaceLifecycle(options = {}) {
15
+ const report = await inspectWorkspaceLifecycle(options);
16
+ const targetPath = resolve(report.root.path);
17
+ const mode = options.apply ? 'apply' : 'dry-run';
18
+ const confirmationToken = report.root.branch ?? report.root.head;
19
+ const blockers = [...report.finish.blockers];
20
+ const warnings = [...report.finish.warnings];
21
+ if (!report.root.isLinkedWorktree) {
22
+ blockers.push('Workspace root is not a linked worktree');
23
+ }
24
+ if (report.root.isSubmodule) {
25
+ blockers.push('Workspace root is a submodule; clean it up from the parent repository workflow');
26
+ }
27
+ if (!report.root.gitCommonDir) {
28
+ blockers.push('Workspace git common directory could not be resolved');
29
+ }
30
+ if (!confirmationToken) {
31
+ blockers.push('Cleanup confirmation token could not be resolved from branch or HEAD');
32
+ }
33
+ const mainRoot = report.root.gitCommonDir ? resolve(dirname(report.root.gitCommonDir)) : null;
34
+ if (mainRoot && normalizeAbsolute(mainRoot) === normalizeAbsolute(targetPath)) {
35
+ blockers.push('Refusing to remove the main repository checkout');
36
+ }
37
+ if (mainRoot && !await isRegisteredWorktree(mainRoot, targetPath)) {
38
+ blockers.push('Workspace root is not registered in git worktree list');
39
+ }
40
+ if (mode === 'apply') {
41
+ if (!options.confirm || options.confirm !== confirmationToken) {
42
+ blockers.push(`Cleanup apply requires confirmation token "${confirmationToken ?? '(unknown)'}"; pass --confirm ${confirmationToken ?? '(unknown)'}`);
43
+ }
44
+ }
45
+ const canApply = blockers.length === 0;
46
+ const commands = [`git worktree remove "${targetPath}"`];
47
+ if (mode === 'apply' && canApply && mainRoot) {
48
+ await execa('git', ['worktree', 'remove', targetPath], { cwd: mainRoot });
49
+ return {
50
+ mode,
51
+ canApply,
52
+ applied: true,
53
+ targetPath,
54
+ confirmationToken,
55
+ blockers,
56
+ warnings,
57
+ commands,
58
+ report,
59
+ };
60
+ }
61
+ return {
62
+ mode,
63
+ canApply,
64
+ applied: false,
65
+ targetPath,
66
+ confirmationToken,
67
+ blockers,
68
+ warnings,
69
+ commands,
70
+ report,
71
+ };
72
+ }
73
+ async function inspectRepository(repoDir, rootDir, kind, explicitRelativePath) {
74
+ const [branch, head, gitDirRaw, gitCommonDirRaw, superproject, status, upstream] = await Promise.all([
75
+ gitOptional(repoDir, ['branch', '--show-current']),
76
+ gitOptional(repoDir, ['rev-parse', '--short', 'HEAD']),
77
+ gitOptional(repoDir, ['rev-parse', '--git-dir']),
78
+ gitOptional(repoDir, ['rev-parse', '--git-common-dir']),
79
+ gitOptional(repoDir, ['rev-parse', '--show-superproject-working-tree']),
80
+ gitOptional(repoDir, ['status', '--porcelain=v1'], { trim: false }),
81
+ gitOptional(repoDir, ['rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{upstream}']),
82
+ ]);
83
+ const aheadBehind = upstream ? await readAheadBehind(repoDir) : { ahead: 0, behind: 0 };
84
+ const parsedStatus = parsePorcelainStatus(status);
85
+ const gitDir = gitDirRaw ? absolutizeGitPath(repoDir, gitDirRaw) : null;
86
+ const gitCommonDir = gitCommonDirRaw ? absolutizeGitPath(repoDir, gitCommonDirRaw) : null;
87
+ const isSubmodule = Boolean(superproject);
88
+ return {
89
+ kind,
90
+ path: repoDir,
91
+ relativePath: explicitRelativePath ?? (normalizeRelative(relative(rootDir, repoDir)) || '.'),
92
+ branch: branch || null,
93
+ head: head || null,
94
+ upstream: upstream || null,
95
+ ahead: aheadBehind.ahead,
96
+ behind: aheadBehind.behind,
97
+ gitDir,
98
+ gitCommonDir,
99
+ isLinkedWorktree: Boolean(gitDir && gitCommonDir && gitDir !== gitCommonDir && !isSubmodule),
100
+ isSubmodule,
101
+ superproject: superproject || null,
102
+ clean: parsedStatus.clean,
103
+ staged: parsedStatus.staged,
104
+ unstaged: parsedStatus.unstaged,
105
+ untracked: parsedStatus.untracked,
106
+ };
107
+ }
108
+ async function inspectChildRepositories(rootDir, topology) {
109
+ const submodules = await readGitmodules(rootDir);
110
+ const statuses = [];
111
+ const seen = new Set();
112
+ for (const repo of topology.repositories) {
113
+ if (repo.path === '.' || repo.role === 'root')
114
+ continue;
115
+ const repoDir = resolve(rootDir, repo.path);
116
+ if (!existsSync(repoDir))
117
+ continue;
118
+ if (!await isGitRepository(repoDir))
119
+ continue;
120
+ seen.add(resolve(repoDir));
121
+ statuses.push(await inspectRepository(repoDir, rootDir, kindForConfiguredRepository(repo), normalizeRelative(repo.path)));
122
+ }
123
+ for (const relativePath of submodules) {
124
+ const repoDir = join(rootDir, relativePath);
125
+ if (!existsSync(repoDir))
126
+ continue;
127
+ if (!await isGitRepository(repoDir))
128
+ continue;
129
+ seen.add(resolve(repoDir));
130
+ statuses.push(await inspectRepository(repoDir, rootDir, 'submodule', normalizeRelative(relativePath)));
131
+ }
132
+ for (const repoDir of findNestedGitRepositories(rootDir)) {
133
+ const resolved = resolve(repoDir);
134
+ if (seen.has(resolved))
135
+ continue;
136
+ seen.add(resolved);
137
+ statuses.push(await inspectRepository(repoDir, rootDir, 'nested-repo'));
138
+ }
139
+ return statuses.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
140
+ }
141
+ function decideFinish(root, childRepositories, topology) {
142
+ const blockers = [];
143
+ const warnings = [];
144
+ const nextActions = [];
145
+ const policy = topology.finishPolicy;
146
+ const isMoe = topology.topology === 'moe';
147
+ if (policy.requireCleanRepositories && !root.clean)
148
+ blockers.push('Root repository has uncommitted changes');
149
+ if (root.upstream && root.ahead > 0)
150
+ warnings.push(`Root branch ${root.branch ?? '(detached)'} is ${root.ahead} commit(s) ahead of ${root.upstream}`);
151
+ if (!root.upstream && root.branch)
152
+ warnings.push(`Root branch ${root.branch} has no upstream`);
153
+ for (const child of childRepositories) {
154
+ if (policy.requireCleanRepositories && !child.clean)
155
+ blockers.push(`Child repository ${child.relativePath} has uncommitted changes`);
156
+ if (policy.requirePushedBranches && child.upstream && child.ahead > 0)
157
+ blockers.push(`Child repository ${child.relativePath} has unpushed commits`);
158
+ if (policy.requirePushedBranches && isMoe && !child.upstream && child.branch)
159
+ blockers.push(`Child repository ${child.relativePath} has unpushed commits`);
160
+ if (!child.upstream && child.branch)
161
+ warnings.push(`Child repository ${child.relativePath} branch ${child.branch} has no upstream`);
162
+ }
163
+ if (policy.requireRootPointerUpdate && childRepositories.some(hasChildIntegrationWork)) {
164
+ warnings.push('MOE finish policy requires root pointer or integration metadata review after child repository changes');
165
+ }
166
+ if (blockers.length === 0) {
167
+ if (root.isLinkedWorktree) {
168
+ nextActions.push('Safe to remove linked worktree after branch is pushed, merged, or intentionally discarded');
169
+ }
170
+ else {
171
+ nextActions.push('No linked worktree cleanup is required for the root checkout');
172
+ }
173
+ }
174
+ else {
175
+ nextActions.push('Commit or stash child repository changes before removing the temporary worktree');
176
+ nextActions.push('If child repositories changed, push or review them in their own remotes before root cleanup');
177
+ }
178
+ return {
179
+ canCleanup: blockers.length === 0 && root.isLinkedWorktree,
180
+ blockers,
181
+ warnings,
182
+ nextActions,
183
+ };
184
+ }
185
+ function kindForConfiguredRepository(repo) {
186
+ return repo.role === 'submodule' ? 'submodule' : 'nested-repo';
187
+ }
188
+ function hasChildIntegrationWork(child) {
189
+ return !child.clean || child.ahead > 0 || Boolean(child.branch && !child.upstream);
190
+ }
191
+ async function readGitmodules(rootDir) {
192
+ if (!existsSync(join(rootDir, '.gitmodules')))
193
+ return [];
194
+ const output = await gitOptional(rootDir, ['config', '--file', '.gitmodules', '--get-regexp', 'path']);
195
+ return output
196
+ .split(/\r?\n/)
197
+ .map(line => line.trim().split(/\s+/)[1])
198
+ .filter((path) => Boolean(path))
199
+ .map(normalizeRelative);
200
+ }
201
+ function findNestedGitRepositories(rootDir) {
202
+ const results = [];
203
+ const ignored = new Set(['.git', '.scale', 'node_modules', 'dist', 'coverage', '.worktrees', 'worktrees']);
204
+ function walk(dir, depth) {
205
+ if (depth > 5)
206
+ return;
207
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
208
+ if (!entry.isDirectory())
209
+ continue;
210
+ if (ignored.has(entry.name))
211
+ continue;
212
+ const child = join(dir, entry.name);
213
+ if (existsSync(join(child, '.git'))) {
214
+ results.push(child);
215
+ continue;
216
+ }
217
+ walk(child, depth + 1);
218
+ }
219
+ }
220
+ walk(rootDir, 0);
221
+ return results;
222
+ }
223
+ async function isGitRepository(dir) {
224
+ const result = await execa('git', ['rev-parse', '--is-inside-work-tree'], { cwd: dir, reject: false });
225
+ return result.exitCode === 0 && result.stdout.trim() === 'true';
226
+ }
227
+ async function isRegisteredWorktree(mainRoot, targetPath) {
228
+ const result = await execa('git', ['worktree', 'list', '--porcelain'], { cwd: mainRoot, reject: false });
229
+ if (result.exitCode !== 0)
230
+ return false;
231
+ const normalizedTarget = normalizeAbsolute(targetPath);
232
+ return result.stdout
233
+ .split(/\r?\n/)
234
+ .filter(line => line.startsWith('worktree '))
235
+ .some(line => normalizeAbsolute(line.slice('worktree '.length)) === normalizedTarget);
236
+ }
237
+ async function readAheadBehind(repoDir) {
238
+ const output = await gitOptional(repoDir, ['rev-list', '--left-right', '--count', '@{upstream}...HEAD']);
239
+ const [behind, ahead] = output.split(/\s+/).map(value => Number.parseInt(value, 10));
240
+ return {
241
+ ahead: Number.isFinite(ahead) ? ahead : 0,
242
+ behind: Number.isFinite(behind) ? behind : 0,
243
+ };
244
+ }
245
+ function parsePorcelainStatus(output) {
246
+ let staged = 0;
247
+ let unstaged = 0;
248
+ let untracked = 0;
249
+ for (const line of output.split(/\r?\n/).filter(Boolean)) {
250
+ if (line.startsWith('??')) {
251
+ untracked += 1;
252
+ continue;
253
+ }
254
+ if (line[0] !== ' ')
255
+ staged += 1;
256
+ if (line[1] !== ' ')
257
+ unstaged += 1;
258
+ }
259
+ return {
260
+ clean: staged === 0 && unstaged === 0 && untracked === 0,
261
+ staged,
262
+ unstaged,
263
+ untracked,
264
+ };
265
+ }
266
+ async function gitRequired(cwd, args) {
267
+ const result = await execa('git', args, { cwd });
268
+ return result.stdout.trim();
269
+ }
270
+ async function gitOptional(cwd, args, options = {}) {
271
+ const result = await execa('git', args, { cwd, reject: false });
272
+ if (result.exitCode !== 0)
273
+ return '';
274
+ return options.trim === false ? result.stdout : result.stdout.trim();
275
+ }
276
+ function absolutizeGitPath(cwd, path) {
277
+ return normalizeAbsolute(isAbsolute(path) ? path : resolve(cwd, path));
278
+ }
279
+ function normalizeAbsolute(path) {
280
+ return resolve(path).replace(/\\/g, '/');
281
+ }
282
+ function normalizeRelative(path) {
283
+ return path.replace(/\\/g, '/');
284
+ }
285
+ //# 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,49 @@
1
+ export type WorkspaceTopologyKind = 'single' | 'monorepo' | 'polyrepo' | 'submodule-workspace' | 'moe';
2
+ export type WorkspaceRepositoryRole = 'root' | 'service' | 'package' | 'submodule' | 'nested-repo' | 'external';
3
+ export interface WorkspaceRepositoryConfig {
4
+ name: string;
5
+ path: string;
6
+ role: WorkspaceRepositoryRole;
7
+ required?: boolean;
8
+ services?: string[];
9
+ branchPattern?: string;
10
+ remote?: string;
11
+ }
12
+ export interface WorkspaceBranchPolicy {
13
+ protectedBranches?: string[];
14
+ featurePrefixes?: string[];
15
+ requireAuthorScopeDate?: boolean;
16
+ }
17
+ export interface WorkspaceFinishPolicy {
18
+ requireCleanRepositories?: boolean;
19
+ requirePushedBranches?: boolean;
20
+ requireRootPointerUpdate?: boolean;
21
+ requireReviewArtifacts?: boolean;
22
+ }
23
+ export interface WorkspaceTopologyConfig {
24
+ version?: number;
25
+ topology: WorkspaceTopologyKind;
26
+ repositories: WorkspaceRepositoryConfig[];
27
+ branchPolicy?: WorkspaceBranchPolicy;
28
+ finishPolicy?: WorkspaceFinishPolicy;
29
+ }
30
+ export interface ResolvedWorkspaceTopology extends WorkspaceTopologyConfig {
31
+ version: number;
32
+ configured: boolean;
33
+ configPath: string;
34
+ finishPolicy: Required<WorkspaceFinishPolicy>;
35
+ warnings: string[];
36
+ }
37
+ export interface WorkspaceTopologyOptions {
38
+ projectDir?: string;
39
+ scaleDir?: string;
40
+ }
41
+ export interface WorkspaceTopologyTemplateOptions {
42
+ topology?: WorkspaceTopologyKind;
43
+ projectName?: string;
44
+ }
45
+ export declare function loadWorkspaceTopology(projectDir?: string, scaleDir?: string): ResolvedWorkspaceTopology | null;
46
+ export declare function resolveWorkspaceTopology(options?: WorkspaceTopologyOptions): ResolvedWorkspaceTopology;
47
+ export declare function writeWorkspaceTopologyTemplate(projectDir?: string, options?: WorkspaceTopologyTemplateOptions, scaleDir?: string): string;
48
+ export declare function workspaceTopologyTemplate(options?: WorkspaceTopologyTemplateOptions): string;
49
+ export declare function workspaceTopologyPath(projectDir?: string, scaleDir?: string): string;
@@ -0,0 +1,125 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { isAbsolute, join, resolve } from 'node:path';
3
+ export function loadWorkspaceTopology(projectDir = process.cwd(), scaleDir = '.scale') {
4
+ const path = workspaceTopologyPath(projectDir, scaleDir);
5
+ if (!existsSync(path))
6
+ return null;
7
+ const raw = JSON.parse(readFileSync(path, 'utf-8'));
8
+ return normalizeWorkspaceTopology(raw, {
9
+ configured: true,
10
+ configPath: path,
11
+ });
12
+ }
13
+ export function resolveWorkspaceTopology(options = {}) {
14
+ const projectDir = resolve(options.projectDir ?? process.cwd());
15
+ const scaleDir = options.scaleDir ?? '.scale';
16
+ const loaded = loadWorkspaceTopology(projectDir, scaleDir);
17
+ if (loaded)
18
+ return loaded;
19
+ return normalizeWorkspaceTopology({
20
+ version: 1,
21
+ topology: 'single',
22
+ repositories: [
23
+ { name: 'root', path: '.', role: 'root', required: true },
24
+ ],
25
+ }, {
26
+ configured: false,
27
+ configPath: workspaceTopologyPath(projectDir, scaleDir),
28
+ warnings: [`No workspace topology found at ${workspaceTopologyPath(projectDir, scaleDir)}; using single-repository defaults.`],
29
+ });
30
+ }
31
+ export function writeWorkspaceTopologyTemplate(projectDir = process.cwd(), options = {}, scaleDir = '.scale') {
32
+ const path = workspaceTopologyPath(projectDir, scaleDir);
33
+ const dir = path.split(/[\\/]/).slice(0, -1).join('/');
34
+ if (dir && !existsSync(dir))
35
+ mkdirSync(dir, { recursive: true });
36
+ writeFileSync(path, workspaceTopologyTemplate(options), 'utf-8');
37
+ return path;
38
+ }
39
+ export function workspaceTopologyTemplate(options = {}) {
40
+ const topology = options.topology ?? 'moe';
41
+ const config = {
42
+ version: 1,
43
+ topology,
44
+ repositories: [
45
+ {
46
+ name: 'root',
47
+ path: '.',
48
+ role: 'root',
49
+ required: true,
50
+ },
51
+ {
52
+ name: 'example-service',
53
+ path: 'services/example',
54
+ role: topology === 'monorepo' ? 'service' : 'nested-repo',
55
+ required: false,
56
+ services: ['example'],
57
+ },
58
+ ],
59
+ branchPolicy: {
60
+ protectedBranches: ['main', 'master'],
61
+ featurePrefixes: ['feature/', 'fix/', 'docs/', 'codex/'],
62
+ requireAuthorScopeDate: true,
63
+ },
64
+ finishPolicy: defaultFinishPolicy(topology),
65
+ };
66
+ return `${JSON.stringify(config, null, 2)}\n`;
67
+ }
68
+ export function workspaceTopologyPath(projectDir = process.cwd(), scaleDir = '.scale') {
69
+ const root = isAbsolute(scaleDir) ? scaleDir : join(projectDir, scaleDir);
70
+ return join(root, 'workspace.json');
71
+ }
72
+ function normalizeWorkspaceTopology(raw, meta) {
73
+ const topology = normalizeTopology(raw.topology);
74
+ const repositories = normalizeRepositories(raw.repositories);
75
+ return {
76
+ version: raw.version ?? 1,
77
+ topology,
78
+ repositories,
79
+ branchPolicy: raw.branchPolicy,
80
+ finishPolicy: {
81
+ ...defaultFinishPolicy(topology),
82
+ ...(raw.finishPolicy ?? {}),
83
+ },
84
+ configured: meta.configured,
85
+ configPath: meta.configPath,
86
+ warnings: meta.warnings ?? [],
87
+ };
88
+ }
89
+ function normalizeTopology(value) {
90
+ if (value === 'single'
91
+ || value === 'monorepo'
92
+ || value === 'polyrepo'
93
+ || value === 'submodule-workspace'
94
+ || value === 'moe') {
95
+ return value;
96
+ }
97
+ return 'single';
98
+ }
99
+ function normalizeRepositories(repositories) {
100
+ const normalized = (repositories ?? [])
101
+ .filter(repo => Boolean(repo.name && repo.path))
102
+ .map(repo => ({
103
+ ...repo,
104
+ path: normalizeRelative(repo.path),
105
+ required: repo.required !== false,
106
+ }));
107
+ if (!normalized.some(repo => repo.role === 'root' || repo.path === '.')) {
108
+ normalized.unshift({ name: 'root', path: '.', role: 'root', required: true });
109
+ }
110
+ return normalized.length > 0
111
+ ? normalized
112
+ : [{ name: 'root', path: '.', role: 'root', required: true }];
113
+ }
114
+ function defaultFinishPolicy(topology) {
115
+ return {
116
+ requireCleanRepositories: true,
117
+ requirePushedBranches: true,
118
+ requireRootPointerUpdate: topology === 'moe' || topology === 'submodule-workspace',
119
+ requireReviewArtifacts: topology === 'moe',
120
+ };
121
+ }
122
+ function normalizeRelative(path) {
123
+ return path.replace(/\\/g, '/');
124
+ }
125
+ //# sourceMappingURL=WorkspaceTopology.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceTopology.js","sourceRoot":"","sources":["../../src/workflow/WorkspaceTopology.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAsDrD,MAAM,UAAU,qBAAqB,CACnC,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,EAC1B,QAAQ,GAAG,QAAQ;IAEnB,MAAM,IAAI,GAAG,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAA4B,CAAA;IAC9E,OAAO,0BAA0B,CAAC,GAAG,EAAE;QACrC,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,UAAoC,EAAE;IAEtC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAA;IAC7C,MAAM,MAAM,GAAG,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC1D,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,OAAO,0BAA0B,CAAC;QAChC,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE;YACZ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC1D;KACF,EAAE;QACD,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC;QACvD,QAAQ,EAAE,CAAC,kCAAkC,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,qCAAqC,CAAC;KAC/H,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,EAC1B,UAA4C,EAAE,EAC9C,QAAQ,GAAG,QAAQ;IAEnB,MAAM,IAAI,GAAG,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACtD,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAChE,aAAa,CAAC,IAAI,EAAE,yBAAyB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;IAChE,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAA4C,EAAE;IACtF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAA;IAC1C,MAAM,MAAM,GAA4B;QACtC,OAAO,EAAE,CAAC;QACV,QAAQ;QACR,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,GAAG;gBACT,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;gBACzD,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,CAAC,SAAS,CAAC;aACtB;SACF;QACD,YAAY,EAAE;YACZ,iBAAiB,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;YACrC,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;YACxD,sBAAsB,EAAE,IAAI;SAC7B;QACD,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC;KAC5C,CAAA;IACD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,GAAG,QAAQ;IACnF,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACzE,OAAO,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;AACrC,CAAC;AAED,SAAS,0BAA0B,CACjC,GAA4B,EAC5B,IAAsE;IAEtE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAChD,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAE5D,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC;QACzB,QAAQ;QACR,YAAY;QACZ,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,YAAY,EAAE;YACZ,GAAG,mBAAmB,CAAC,QAAQ,CAAC;YAChC,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;SAC5B;QACD,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;KAC9B,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAiD;IAC1E,IACE,KAAK,KAAK,QAAQ;WACf,KAAK,KAAK,UAAU;WACpB,KAAK,KAAK,UAAU;WACpB,KAAK,KAAK,qBAAqB;WAC/B,KAAK,KAAK,KAAK,EAClB,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAqD;IAClF,MAAM,UAAU,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;SACpC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/C,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,GAAG,IAAI;QACP,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,KAAK;KAClC,CAAC,CAAC,CAAA;IAEL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACxE,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/E,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AACjE,CAAC;AAED,SAAS,mBAAmB,CAAC,QAA+B;IAC1D,OAAO;QACL,wBAAwB,EAAE,IAAI;QAC9B,qBAAqB,EAAE,IAAI;QAC3B,wBAAwB,EAAE,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,qBAAqB;QAClF,sBAAsB,EAAE,QAAQ,KAAK,KAAK;KAC3C,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC"}
@@ -12,8 +12,12 @@ export * from './ReviewStore.js';
12
12
  export * from './WorkflowEngine.js';
13
13
  export * from './VerificationProfile.js';
14
14
  export * from './GovernanceTemplates.js';
15
+ export * from './GovernanceTemplatePacks.js';
16
+ export * from './GovernanceLock.js';
15
17
  export * from './TaskMetricsStore.js';
16
18
  export * from './TaskArtifactScaffolder.js';
17
19
  export * from './PhaseMarkerTracker.js';
18
20
  export * from './WorkflowArtifactWriter.js';
21
+ export * from './WorkspaceLifecycle.js';
22
+ export * from './WorkspaceTopology.js';
19
23
  export * from './autonomous/index.js';
@@ -13,9 +13,13 @@ export * from './ReviewStore.js';
13
13
  export * from './WorkflowEngine.js';
14
14
  export * from './VerificationProfile.js';
15
15
  export * from './GovernanceTemplates.js';
16
+ export * from './GovernanceTemplatePacks.js';
17
+ export * from './GovernanceLock.js';
16
18
  export * from './TaskMetricsStore.js';
17
19
  export * from './TaskArtifactScaffolder.js';
18
20
  export * from './PhaseMarkerTracker.js';
19
21
  export * from './WorkflowArtifactWriter.js';
22
+ export * from './WorkspaceLifecycle.js';
23
+ export * from './WorkspaceTopology.js';
20
24
  export * from './autonomous/index.js';
21
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAEvC,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,mCAAmC,CAAA;AACjD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAEvC,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,mCAAmC,CAAA;AACjD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hongmaple0820/scale-engine",
3
- "version": "0.13.0",
4
- "description": "SCALE Engine v0.13.0 - Artifact-based Gate verification, autonomous dev loop, 16 platform adapters, OWASP Top 10 detector, 649 tests",
3
+ "version": "0.15.0",
4
+ "description": "SCALE Engine v0.15.0 - MOE workspace topology, governance packs, lifecycle finish policy, and service-aware engineering workflow gates",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "scale": "dist/api/cli.js"