@hongmaple0820/scale-engine 0.33.0 → 0.38.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 (108) hide show
  1. package/README.en.md +86 -376
  2. package/README.md +89 -549
  3. package/dist/api/cli.js +185 -12
  4. package/dist/api/cli.js.map +1 -1
  5. package/dist/api/doctor.d.ts +38 -3
  6. package/dist/api/doctor.js +269 -44
  7. package/dist/api/doctor.js.map +1 -1
  8. package/dist/api/mcp.js +2 -2
  9. package/dist/api/mcp.js.map +1 -1
  10. package/dist/api/quickstart.d.ts +34 -4
  11. package/dist/api/quickstart.js +90 -73
  12. package/dist/api/quickstart.js.map +1 -1
  13. package/dist/bootstrap/DependencyBootstrap.d.ts +89 -0
  14. package/dist/bootstrap/DependencyBootstrap.js +441 -0
  15. package/dist/bootstrap/DependencyBootstrap.js.map +1 -0
  16. package/dist/capabilities/InstalledSkillsIntegration.js +14 -6
  17. package/dist/capabilities/InstalledSkillsIntegration.js.map +1 -1
  18. package/dist/codegraph/CodeIntelligence.d.ts +12 -0
  19. package/dist/codegraph/CodeIntelligence.js +251 -30
  20. package/dist/codegraph/CodeIntelligence.js.map +1 -1
  21. package/dist/config/profiles.d.ts +12 -0
  22. package/dist/config/profiles.js +39 -4
  23. package/dist/config/profiles.js.map +1 -1
  24. package/dist/core/ExternalCommand.d.ts +9 -0
  25. package/dist/core/ExternalCommand.js +56 -0
  26. package/dist/core/ExternalCommand.js.map +1 -0
  27. package/dist/index.d.ts +1 -0
  28. package/dist/index.js +1 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/knowledge/CerebrumManager.d.ts +2 -2
  31. package/dist/knowledge/CerebrumManager.js.map +1 -1
  32. package/dist/knowledge/GraphifyKnowledgeBase.d.ts +38 -0
  33. package/dist/knowledge/GraphifyKnowledgeBase.js +409 -0
  34. package/dist/knowledge/GraphifyKnowledgeBase.js.map +1 -0
  35. package/dist/memory/MemoryFabric.js +1 -0
  36. package/dist/memory/MemoryFabric.js.map +1 -1
  37. package/dist/memory/MemoryIntelligence.d.ts +42 -0
  38. package/dist/memory/MemoryIntelligence.js +215 -0
  39. package/dist/memory/MemoryIntelligence.js.map +1 -0
  40. package/dist/memory/MemoryProviders.d.ts +22 -0
  41. package/dist/memory/MemoryProviders.js +138 -5
  42. package/dist/memory/MemoryProviders.js.map +1 -1
  43. package/dist/memory/index.d.ts +1 -0
  44. package/dist/memory/index.js +1 -0
  45. package/dist/memory/index.js.map +1 -1
  46. package/dist/runtime/AiOsRuntime.d.ts +2 -0
  47. package/dist/runtime/AiOsRuntime.js +2 -0
  48. package/dist/runtime/AiOsRuntime.js.map +1 -1
  49. package/dist/runtime/ExecutionLedger.d.ts +46 -0
  50. package/dist/runtime/ExecutionLedger.js +71 -0
  51. package/dist/runtime/ExecutionLedger.js.map +1 -0
  52. package/dist/runtime/index.d.ts +1 -0
  53. package/dist/runtime/index.js +1 -0
  54. package/dist/runtime/index.js.map +1 -1
  55. package/dist/skills/SkillRepository.js +5 -5
  56. package/dist/skills/SkillRepository.js.map +1 -1
  57. package/dist/skills/routing/SkillPolicy.js +2 -2
  58. package/dist/skills/routing/SkillPolicy.js.map +1 -1
  59. package/dist/tools/RtkRuntime.d.ts +9 -0
  60. package/dist/tools/RtkRuntime.js +43 -0
  61. package/dist/tools/RtkRuntime.js.map +1 -0
  62. package/dist/tools/ToolCapabilityRegistry.d.ts +1 -0
  63. package/dist/tools/ToolCapabilityRegistry.js +68 -11
  64. package/dist/tools/ToolCapabilityRegistry.js.map +1 -1
  65. package/dist/tools/ToolOrchestrator.js +6 -4
  66. package/dist/tools/ToolOrchestrator.js.map +1 -1
  67. package/dist/tools/ToolPolicy.js +16 -1
  68. package/dist/tools/ToolPolicy.js.map +1 -1
  69. package/dist/workflow/AdaptiveWorkflowRouter.d.ts +1 -0
  70. package/dist/workflow/AdaptiveWorkflowRouter.js +3 -0
  71. package/dist/workflow/AdaptiveWorkflowRouter.js.map +1 -1
  72. package/dist/workflow/CommitDiscipline.d.ts +68 -0
  73. package/dist/workflow/CommitDiscipline.js +327 -0
  74. package/dist/workflow/CommitDiscipline.js.map +1 -0
  75. package/dist/workflow/CrossRepoOrchestrator.d.ts +92 -0
  76. package/dist/workflow/CrossRepoOrchestrator.js +400 -0
  77. package/dist/workflow/CrossRepoOrchestrator.js.map +1 -0
  78. package/dist/workflow/GovernanceRoi.d.ts +52 -0
  79. package/dist/workflow/GovernanceRoi.js +204 -0
  80. package/dist/workflow/GovernanceRoi.js.map +1 -0
  81. package/dist/workflow/GovernanceTemplates.js +2 -2
  82. package/dist/workflow/McpGovernance.d.ts +63 -0
  83. package/dist/workflow/McpGovernance.js +198 -0
  84. package/dist/workflow/McpGovernance.js.map +1 -0
  85. package/dist/workflow/SessionCoordinator.d.ts +103 -0
  86. package/dist/workflow/SessionCoordinator.js +401 -0
  87. package/dist/workflow/SessionCoordinator.js.map +1 -0
  88. package/dist/workflow/TaskDependencyGraph.d.ts +73 -0
  89. package/dist/workflow/TaskDependencyGraph.js +245 -0
  90. package/dist/workflow/TaskDependencyGraph.js.map +1 -0
  91. package/dist/workflow/WorkflowTemplates.d.ts +38 -0
  92. package/dist/workflow/WorkflowTemplates.js +371 -0
  93. package/dist/workflow/WorkflowTemplates.js.map +1 -0
  94. package/dist/workflow/WorkspacePolicy.d.ts +46 -0
  95. package/dist/workflow/WorkspacePolicy.js +141 -0
  96. package/dist/workflow/WorkspacePolicy.js.map +1 -0
  97. package/dist/workflow/gates/GateSystem.js +12 -9
  98. package/dist/workflow/gates/GateSystem.js.map +1 -1
  99. package/dist/workflow/index.d.ts +7 -0
  100. package/dist/workflow/index.js +7 -0
  101. package/dist/workflow/index.js.map +1 -1
  102. package/docs/CODE_INTELLIGENCE.md +22 -5
  103. package/docs/EXTERNAL_REFERENCES.md +5 -2
  104. package/docs/MEMORY_FABRIC.md +7 -3
  105. package/docs/SKILL-REPOSITORY.md +3 -3
  106. package/docs/start/quickstart.md +11 -0
  107. package/docs/workflow/templates/skill-plan.md +1 -1
  108. package/package.json +3 -2
@@ -1,5 +1,6 @@
1
1
  // SCALE Engine — Adaptive Workflow Router v1
2
2
  // Routes evaluator risk/uncertainty and tool strategy signals into a concrete workflow profile.
3
+ import { selectTemplate } from './WorkflowTemplates.js';
3
4
  const PROFILE_ORDER = ['light', 'standard', 'strict', 'critical'];
4
5
  export function routeAdaptiveWorkflow(input) {
5
6
  const { governance, evaluator, toolStrategy } = input;
@@ -83,8 +84,10 @@ export function routeAdaptiveWorkflow(input) {
83
84
  }
84
85
  const behavioralConstraints = buildBehavioralConstraints(profile, signals);
85
86
  const exitCriteria = buildExitCriteria(profile, evaluator, toolStrategy);
87
+ const template = selectTemplate({ profile, task: '', level: profile === 'critical' ? 'CRITICAL' : profile === 'strict' ? 'L' : 'M' });
86
88
  return {
87
89
  profile,
90
+ templateId: template.id,
88
91
  strategy: 'adaptive-workflow-router-v1',
89
92
  escalationReasons: reasons,
90
93
  gateOverrides,
@@ -1 +1 @@
1
- {"version":3,"file":"AdaptiveWorkflowRouter.js","sourceRoot":"","sources":["../../src/workflow/AdaptiveWorkflowRouter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AdaptiveWorkflowRouter.js","sourceRoot":"","sources":["../../src/workflow/AdaptiveWorkflowRouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ export type ViolationType = 'too-many-files' | 'too-long-since-commit' | 'task-switch-without-commit';
2
+ export type ViolationSeverity = 'warn' | 'block';
3
+ export interface CommitDisciplineConfig {
4
+ maxUncommittedFiles: number;
5
+ maxUncommittedFilesBlock: number;
6
+ maxMinutesWithoutCommit: number;
7
+ maxMinutesBlock: number;
8
+ warnOnTaskSwitch: boolean;
9
+ projectDir?: string;
10
+ scaleDir?: string;
11
+ }
12
+ export interface CommitViolation {
13
+ type: ViolationType;
14
+ severity: ViolationSeverity;
15
+ message: string;
16
+ count?: number;
17
+ threshold?: number;
18
+ }
19
+ export interface CommitDisciplineStatus {
20
+ uncommittedFiles: number;
21
+ stagedFiles: number;
22
+ unstagedFiles: number;
23
+ untrackedFiles: number;
24
+ minutesSinceLastCommit: number;
25
+ commitsThisSession: number;
26
+ avgFilesPerCommit: number;
27
+ violations: CommitViolation[];
28
+ recommendations: string[];
29
+ }
30
+ export interface FileGroup {
31
+ name: string;
32
+ files: string[];
33
+ suggestedMessage: string;
34
+ }
35
+ export interface CommitRecord {
36
+ id: string;
37
+ sha: string;
38
+ timestamp: string;
39
+ fileCount: number;
40
+ message: string;
41
+ files: string[];
42
+ }
43
+ export interface TaskSwitchResult {
44
+ allowed: boolean;
45
+ violations: CommitViolation[];
46
+ uncommittedCount: number;
47
+ suggestion: string;
48
+ }
49
+ export declare class CommitDiscipline {
50
+ private config;
51
+ private records;
52
+ private statePath;
53
+ private stateDir;
54
+ private now;
55
+ constructor(config?: Partial<CommitDisciplineConfig>, now?: () => Date);
56
+ check(): CommitDisciplineStatus;
57
+ suggestGroups(taskDescription?: string): FileGroup[];
58
+ recordCommit(sha: string, message: string, files: string[]): CommitRecord;
59
+ enforceBeforeTaskSwitch(taskDescription?: string): TaskSwitchResult;
60
+ summarize(): string;
61
+ getRecords(): CommitRecord[];
62
+ private inspectGit;
63
+ private getUncommittedFiles;
64
+ private minutesSinceLastCommit;
65
+ private loadState;
66
+ private saveState;
67
+ }
68
+ export declare function summarizeCommitDiscipline(status: CommitDisciplineStatus): string;
@@ -0,0 +1,327 @@
1
+ // SCALE Engine — Commit Discipline (v0.38.0)
2
+ // Prevents agents from accumulating uncommitted changes. Monitors git state,
3
+ // enforces thresholds, suggests logical commit groupings, tracks commit cadence.
4
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { execSync } from 'node:child_process';
7
+ import { randomUUID } from 'node:crypto';
8
+ // ============================================================================
9
+ // Defaults
10
+ // ============================================================================
11
+ const DEFAULT_CONFIG = {
12
+ maxUncommittedFiles: 10,
13
+ maxUncommittedFilesBlock: 25,
14
+ maxMinutesWithoutCommit: 30,
15
+ maxMinutesBlock: 60,
16
+ warnOnTaskSwitch: true,
17
+ };
18
+ // Group name rules: path prefix → group name
19
+ const GROUP_RULES = [
20
+ { test: f => /^src\/workflow\//.test(f), name: 'workflow', commitPrefix: 'feat(workflow)' },
21
+ { test: f => /^src\/memory\//.test(f), name: 'memory', commitPrefix: 'feat(memory)' },
22
+ { test: f => /^src\/runtime\//.test(f), name: 'runtime', commitPrefix: 'feat(runtime)' },
23
+ { test: f => /^src\/governance\//.test(f), name: 'governance', commitPrefix: 'feat(governance)' },
24
+ { test: f => /^src\/tools\//.test(f), name: 'tools', commitPrefix: 'feat(tools)' },
25
+ { test: f => /^src\/skills\//.test(f), name: 'skills', commitPrefix: 'feat(skills)' },
26
+ { test: f => /^src\//.test(f), name: 'src-other', commitPrefix: 'feat' },
27
+ { test: f => /^tests\/workflow\//.test(f), name: 'tests-workflow', commitPrefix: 'test(workflow)' },
28
+ { test: f => /^tests\//.test(f), name: 'tests', commitPrefix: 'test' },
29
+ { test: f => /^docs\//.test(f), name: 'docs', commitPrefix: 'docs' },
30
+ { test: f => /\.md$/.test(f) && !f.includes('/'), name: 'docs-root', commitPrefix: 'docs' },
31
+ { test: f => /^package(-lock)?\.json$/.test(f), name: 'deps', commitPrefix: 'chore(deps)' },
32
+ { test: f => /^\.(eslint|prettier|gitignore|npmrc)/.test(f), name: 'config', commitPrefix: 'chore(config)' },
33
+ ];
34
+ // ============================================================================
35
+ // CommitDiscipline
36
+ // ============================================================================
37
+ export class CommitDiscipline {
38
+ constructor(config, now) {
39
+ this.records = [];
40
+ this.config = { ...DEFAULT_CONFIG, ...config };
41
+ this.now = now ?? (() => new Date());
42
+ const projectDir = this.config.projectDir ?? process.cwd();
43
+ const scaleRoot = this.config.scaleDir ?? '.scale';
44
+ this.stateDir = join(projectDir, scaleRoot, 'commit-discipline');
45
+ this.statePath = join(this.stateDir, 'records.json');
46
+ this.loadState();
47
+ }
48
+ // --------------------------------------------------------------------------
49
+ // Core API
50
+ // --------------------------------------------------------------------------
51
+ check() {
52
+ const gitState = this.inspectGit();
53
+ const minutes = this.minutesSinceLastCommit();
54
+ const violations = [];
55
+ const recommendations = [];
56
+ // File count violations
57
+ const total = gitState.staged + gitState.unstaged + gitState.untracked;
58
+ if (total >= this.config.maxUncommittedFilesBlock) {
59
+ violations.push({
60
+ type: 'too-many-files',
61
+ severity: 'block',
62
+ message: `${total} uncommitted files exceeds block threshold (${this.config.maxUncommittedFilesBlock}). Commit or stash before continuing.`,
63
+ count: total,
64
+ threshold: this.config.maxUncommittedFilesBlock,
65
+ });
66
+ recommendations.push(`Split into logical commits by module. Use 'suggestGroups()' for grouping.`);
67
+ }
68
+ else if (total >= this.config.maxUncommittedFiles) {
69
+ violations.push({
70
+ type: 'too-many-files',
71
+ severity: 'warn',
72
+ message: `${total} uncommitted files exceeds warning threshold (${this.config.maxUncommittedFiles}). Consider committing soon.`,
73
+ count: total,
74
+ threshold: this.config.maxUncommittedFiles,
75
+ });
76
+ recommendations.push(`${total} files accumulating — commit before adding more changes.`);
77
+ }
78
+ // Time violations
79
+ if (minutes >= this.config.maxMinutesBlock) {
80
+ violations.push({
81
+ type: 'too-long-since-commit',
82
+ severity: 'block',
83
+ message: `${Math.round(minutes)} minutes since last commit exceeds block threshold (${this.config.maxMinutesBlock} min). Commit now.`,
84
+ count: Math.round(minutes),
85
+ threshold: this.config.maxMinutesBlock,
86
+ });
87
+ }
88
+ else if (minutes >= this.config.maxMinutesWithoutCommit) {
89
+ violations.push({
90
+ type: 'too-long-since-commit',
91
+ severity: 'warn',
92
+ message: `${Math.round(minutes)} minutes since last commit exceeds warning threshold (${this.config.maxMinutesWithoutCommit} min).`,
93
+ count: Math.round(minutes),
94
+ threshold: this.config.maxMinutesWithoutCommit,
95
+ });
96
+ }
97
+ // General recommendations
98
+ if (gitState.staged > 0 && gitState.unstaged > 0) {
99
+ recommendations.push('You have both staged and unstaged changes. Consider committing staged changes first.');
100
+ }
101
+ if (gitState.untracked > 5) {
102
+ recommendations.push(`${gitState.untracked} untracked files. Add new files intentionally with 'git add <file>'.`);
103
+ }
104
+ const totalCommitted = this.records.reduce((s, r) => s + r.fileCount, 0);
105
+ const avgFiles = this.records.length > 0 ? Math.round(totalCommitted / this.records.length) : 0;
106
+ return {
107
+ uncommittedFiles: total,
108
+ stagedFiles: gitState.staged,
109
+ unstagedFiles: gitState.unstaged,
110
+ untrackedFiles: gitState.untracked,
111
+ minutesSinceLastCommit: Math.round(minutes),
112
+ commitsThisSession: this.records.length,
113
+ avgFilesPerCommit: avgFiles,
114
+ violations,
115
+ recommendations,
116
+ };
117
+ }
118
+ suggestGroups(taskDescription) {
119
+ const files = this.getUncommittedFiles();
120
+ if (files.length === 0)
121
+ return [];
122
+ const groupMap = new Map();
123
+ for (const file of files) {
124
+ let matched = false;
125
+ for (const rule of GROUP_RULES) {
126
+ if (rule.test(file)) {
127
+ const group = groupMap.get(rule.name) ?? [];
128
+ group.push(file);
129
+ groupMap.set(rule.name, group);
130
+ matched = true;
131
+ break;
132
+ }
133
+ }
134
+ if (!matched) {
135
+ const group = groupMap.get('misc') ?? [];
136
+ group.push(file);
137
+ groupMap.set('misc', group);
138
+ }
139
+ }
140
+ const groups = [];
141
+ for (const [name, groupFiles] of groupMap) {
142
+ const rule = GROUP_RULES.find(r => r.name === name);
143
+ const prefix = rule?.commitPrefix ?? 'chore';
144
+ const desc = taskDescription ?? 'update';
145
+ groups.push({
146
+ name,
147
+ files: groupFiles,
148
+ suggestedMessage: `${prefix}: ${desc}`,
149
+ });
150
+ }
151
+ return groups;
152
+ }
153
+ recordCommit(sha, message, files) {
154
+ const record = {
155
+ id: `COMMIT-${Date.now()}-${randomUUID().slice(0, 8)}`,
156
+ sha,
157
+ timestamp: this.now().toISOString(),
158
+ fileCount: files.length,
159
+ message,
160
+ files,
161
+ };
162
+ this.records.push(record);
163
+ this.saveState();
164
+ return record;
165
+ }
166
+ enforceBeforeTaskSwitch(taskDescription) {
167
+ const status = this.check();
168
+ const violations = [];
169
+ if (status.uncommittedFiles > 0 && this.config.warnOnTaskSwitch) {
170
+ const severity = status.uncommittedFiles >= this.config.maxUncommittedFilesBlock ? 'block' : 'warn';
171
+ violations.push({
172
+ type: 'task-switch-without-commit',
173
+ severity,
174
+ message: `Switching tasks with ${status.uncommittedFiles} uncommitted files. Commit current work first.`,
175
+ count: status.uncommittedFiles,
176
+ });
177
+ }
178
+ const allowed = !violations.some(v => v.severity === 'block');
179
+ const groups = this.suggestGroups(taskDescription);
180
+ return {
181
+ allowed,
182
+ violations: [...status.violations, ...violations],
183
+ uncommittedCount: status.uncommittedFiles,
184
+ suggestion: groups.length > 0
185
+ ? `Suggested commit groups: ${groups.map(g => `${g.name} (${g.files.length} files)`).join(', ')}`
186
+ : 'No uncommitted files.',
187
+ };
188
+ }
189
+ summarize() {
190
+ const status = this.check();
191
+ const lines = [
192
+ '## Commit Discipline Status',
193
+ '',
194
+ `**Uncommitted Files:** ${status.uncommittedFiles} (staged: ${status.stagedFiles}, unstaged: ${status.unstagedFiles}, untracked: ${status.untrackedFiles})`,
195
+ `**Time Since Last Commit:** ${status.minutesSinceLastCommit} min`,
196
+ `**Commits This Session:** ${status.commitsThisSession}`,
197
+ `**Avg Files Per Commit:** ${status.avgFilesPerCommit}`,
198
+ '',
199
+ ];
200
+ if (status.violations.length > 0) {
201
+ lines.push('### Violations');
202
+ for (const v of status.violations) {
203
+ const icon = v.severity === 'block' ? '[BLOCK]' : '[WARN]';
204
+ lines.push(`- ${icon} ${v.message}`);
205
+ }
206
+ lines.push('');
207
+ }
208
+ if (status.recommendations.length > 0) {
209
+ lines.push('### Recommendations');
210
+ for (const r of status.recommendations)
211
+ lines.push(`- ${r}`);
212
+ lines.push('');
213
+ }
214
+ const groups = this.suggestGroups();
215
+ if (groups.length > 1) {
216
+ lines.push('### Suggested Commit Groups');
217
+ for (const g of groups) {
218
+ lines.push(`- **${g.name}** (${g.files.length} files): \`${g.suggestedMessage}\``);
219
+ for (const f of g.files)
220
+ lines.push(` - ${f}`);
221
+ }
222
+ lines.push('');
223
+ }
224
+ if (status.violations.length === 0 && status.uncommittedFiles === 0) {
225
+ lines.push('No issues detected. Working tree is clean.');
226
+ }
227
+ return lines.join('\n');
228
+ }
229
+ getRecords() {
230
+ return [...this.records];
231
+ }
232
+ // --------------------------------------------------------------------------
233
+ // Git Inspection
234
+ // --------------------------------------------------------------------------
235
+ inspectGit() {
236
+ try {
237
+ const projectDir = this.config.projectDir ?? process.cwd();
238
+ const staged = execSync('git diff --cached --name-only', {
239
+ cwd: projectDir, encoding: 'utf-8', timeout: 5000,
240
+ }).trim().split('\n').filter(Boolean).length;
241
+ const unstaged = execSync('git diff --name-only', {
242
+ cwd: projectDir, encoding: 'utf-8', timeout: 5000,
243
+ }).trim().split('\n').filter(Boolean).length;
244
+ const untracked = execSync('git ls-files --others --exclude-standard', {
245
+ cwd: projectDir, encoding: 'utf-8', timeout: 5000,
246
+ }).trim().split('\n').filter(Boolean).length;
247
+ return { staged, unstaged, untracked };
248
+ }
249
+ catch {
250
+ return { staged: 0, unstaged: 0, untracked: 0 };
251
+ }
252
+ }
253
+ getUncommittedFiles() {
254
+ try {
255
+ const projectDir = this.config.projectDir ?? process.cwd();
256
+ const staged = execSync('git diff --cached --name-only', {
257
+ cwd: projectDir, encoding: 'utf-8', timeout: 5000,
258
+ }).trim().split('\n').filter(Boolean);
259
+ const unstaged = execSync('git diff --name-only', {
260
+ cwd: projectDir, encoding: 'utf-8', timeout: 5000,
261
+ }).trim().split('\n').filter(Boolean);
262
+ const untracked = execSync('git ls-files --others --exclude-standard', {
263
+ cwd: projectDir, encoding: 'utf-8', timeout: 5000,
264
+ }).trim().split('\n').filter(Boolean);
265
+ return [...new Set([...staged, ...unstaged, ...untracked])];
266
+ }
267
+ catch {
268
+ return [];
269
+ }
270
+ }
271
+ minutesSinceLastCommit() {
272
+ try {
273
+ const projectDir = this.config.projectDir ?? process.cwd();
274
+ const ts = execSync('git log -1 --format=%ct', {
275
+ cwd: projectDir, encoding: 'utf-8', timeout: 5000,
276
+ }).trim();
277
+ const lastCommitEpoch = parseInt(ts, 10) * 1000;
278
+ return (this.now().getTime() - lastCommitEpoch) / 60000;
279
+ }
280
+ catch {
281
+ return 0;
282
+ }
283
+ }
284
+ // --------------------------------------------------------------------------
285
+ // State Persistence
286
+ // --------------------------------------------------------------------------
287
+ loadState() {
288
+ if (!existsSync(this.statePath))
289
+ return;
290
+ try {
291
+ const raw = JSON.parse(readFileSync(this.statePath, 'utf-8'));
292
+ if (Array.isArray(raw.records))
293
+ this.records = raw.records;
294
+ }
295
+ catch { /* ignore corrupt state */ }
296
+ }
297
+ saveState() {
298
+ if (!existsSync(this.stateDir))
299
+ mkdirSync(this.stateDir, { recursive: true });
300
+ writeFileSync(this.statePath, JSON.stringify({ records: this.records }, null, 2), 'utf-8');
301
+ }
302
+ }
303
+ // ============================================================================
304
+ // Summary Formatter (standalone)
305
+ // ============================================================================
306
+ export function summarizeCommitDiscipline(status) {
307
+ const lines = [
308
+ '## Commit Discipline',
309
+ '',
310
+ `**Uncommitted:** ${status.uncommittedFiles} files (staged: ${status.stagedFiles}, unstaged: ${status.unstagedFiles}, untracked: ${status.untrackedFiles})`,
311
+ `**Last Commit:** ${status.minutesSinceLastCommit} min ago`,
312
+ `**Session Commits:** ${status.commitsThisSession} (avg ${status.avgFilesPerCommit} files/commit)`,
313
+ ];
314
+ if (status.violations.length > 0) {
315
+ lines.push('', '### Violations');
316
+ for (const v of status.violations) {
317
+ lines.push(`- ${v.severity === 'block' ? '[BLOCK]' : '[WARN]'} ${v.message}`);
318
+ }
319
+ }
320
+ if (status.recommendations.length > 0) {
321
+ lines.push('', '### Recommendations');
322
+ for (const r of status.recommendations)
323
+ lines.push(`- ${r}`);
324
+ }
325
+ return lines.join('\n');
326
+ }
327
+ //# sourceMappingURL=CommitDiscipline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommitDiscipline.js","sourceRoot":"","sources":["../../src/workflow/CommitDiscipline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ export type RepoChangeStatus = 'planned' | 'in-progress' | 'ready' | 'merged' | 'shipped';
2
+ export interface CrossRepoChange {
3
+ repoName: string;
4
+ branch: string;
5
+ files: string[];
6
+ commitShas: string[];
7
+ dependsOn: string[];
8
+ description: string;
9
+ status: RepoChangeStatus;
10
+ startedAt: string;
11
+ mergedAt?: string;
12
+ shippedAt?: string;
13
+ }
14
+ export interface CrossRepoBranch {
15
+ name: string;
16
+ repos: string[];
17
+ createdAt: string;
18
+ createdBy: string;
19
+ }
20
+ export interface CrossRepoMergePlan {
21
+ changes: CrossRepoChange[];
22
+ mergeOrder: string[];
23
+ testOrder: string[];
24
+ deployOrder: string[];
25
+ blockers: string[];
26
+ }
27
+ export interface CrossRepoMergeStep {
28
+ repoName: string;
29
+ action: 'merge' | 'test' | 'tag' | 'push' | 'deploy';
30
+ status: 'pending' | 'passed' | 'failed' | 'skipped';
31
+ duration: number;
32
+ error?: string;
33
+ evidence?: string;
34
+ }
35
+ export interface CrossRepoShipResult {
36
+ success: boolean;
37
+ steps: CrossRepoMergeStep[];
38
+ totalDuration: number;
39
+ warnings: string[];
40
+ }
41
+ export interface CrossRepoStatus {
42
+ topology: string;
43
+ managedBranches: CrossRepoBranch[];
44
+ activeChanges: CrossRepoChange[];
45
+ repoStates: Array<{
46
+ name: string;
47
+ path: string;
48
+ branch: string;
49
+ clean: boolean;
50
+ ahead: number;
51
+ behind: number;
52
+ }>;
53
+ recommendations: string[];
54
+ }
55
+ export interface CrossRepoOrchestratorInput {
56
+ projectDir?: string;
57
+ scaleDir?: string;
58
+ }
59
+ export declare class CrossRepoOrchestrator {
60
+ private projectDir;
61
+ private scaleRoot;
62
+ private stateDir;
63
+ private statePath;
64
+ private branches;
65
+ private changes;
66
+ private repositories;
67
+ constructor(input?: CrossRepoOrchestratorInput);
68
+ createCoordinatedBranch(branchName: string, repoNames: string[], options?: {
69
+ createdBy?: string;
70
+ fromBranch?: string;
71
+ }): CrossRepoBranch;
72
+ deleteCoordinatedBranch(branchName: string): void;
73
+ getManagedBranches(): CrossRepoBranch[];
74
+ registerChange(change: Omit<CrossRepoChange, 'status' | 'startedAt'>): CrossRepoChange;
75
+ updateChangeStatus(repoName: string, branch: string, status: RepoChangeStatus): void;
76
+ buildMergePlan(branchName: string): CrossRepoMergePlan;
77
+ shipCoordinated(branchName: string, options?: {
78
+ remote?: string;
79
+ baseBranch?: string;
80
+ dryRun?: boolean;
81
+ skipRepos?: string[];
82
+ }): Promise<CrossRepoShipResult>;
83
+ getCrossRepoStatus(): CrossRepoStatus;
84
+ private loadTopology;
85
+ private loadState;
86
+ private saveState;
87
+ private resolveMergeOrder;
88
+ private execGit;
89
+ private getRepoGitState;
90
+ private buildRecommendations;
91
+ }
92
+ export declare function summarizeCrossRepoStatus(status: CrossRepoStatus): string;