@hongmaple0820/scale-engine 0.29.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 (152) hide show
  1. package/README.en.md +86 -374
  2. package/README.md +89 -547
  3. package/dist/api/cli.js +189 -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/evolution/SessionLearnings.d.ts +70 -0
  28. package/dist/evolution/SessionLearnings.js +217 -0
  29. package/dist/evolution/SessionLearnings.js.map +1 -0
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.js +1 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/knowledge/CerebrumManager.d.ts +2 -2
  34. package/dist/knowledge/CerebrumManager.js.map +1 -1
  35. package/dist/knowledge/GraphifyKnowledgeBase.d.ts +38 -0
  36. package/dist/knowledge/GraphifyKnowledgeBase.js +409 -0
  37. package/dist/knowledge/GraphifyKnowledgeBase.js.map +1 -0
  38. package/dist/memory/MemoryFabric.js +1 -0
  39. package/dist/memory/MemoryFabric.js.map +1 -1
  40. package/dist/memory/MemoryIntelligence.d.ts +42 -0
  41. package/dist/memory/MemoryIntelligence.js +215 -0
  42. package/dist/memory/MemoryIntelligence.js.map +1 -0
  43. package/dist/memory/MemoryProviders.d.ts +22 -0
  44. package/dist/memory/MemoryProviders.js +138 -5
  45. package/dist/memory/MemoryProviders.js.map +1 -1
  46. package/dist/memory/index.d.ts +1 -0
  47. package/dist/memory/index.js +1 -0
  48. package/dist/memory/index.js.map +1 -1
  49. package/dist/runtime/AiOsRuntime.d.ts +101 -1
  50. package/dist/runtime/AiOsRuntime.js +464 -14
  51. package/dist/runtime/AiOsRuntime.js.map +1 -1
  52. package/dist/runtime/ExecutionLedger.d.ts +46 -0
  53. package/dist/runtime/ExecutionLedger.js +71 -0
  54. package/dist/runtime/ExecutionLedger.js.map +1 -0
  55. package/dist/runtime/index.d.ts +1 -0
  56. package/dist/runtime/index.js +1 -0
  57. package/dist/runtime/index.js.map +1 -1
  58. package/dist/skills/RoleSkills.d.ts +20 -0
  59. package/dist/skills/RoleSkills.js +154 -0
  60. package/dist/skills/RoleSkills.js.map +1 -0
  61. package/dist/skills/SkillDiscovery.d.ts +5 -0
  62. package/dist/skills/SkillDiscovery.js +15 -0
  63. package/dist/skills/SkillDiscovery.js.map +1 -1
  64. package/dist/skills/SkillFrontmatter.d.ts +28 -0
  65. package/dist/skills/SkillFrontmatter.js +152 -0
  66. package/dist/skills/SkillFrontmatter.js.map +1 -0
  67. package/dist/skills/SkillRegistry.d.ts +11 -0
  68. package/dist/skills/SkillRegistry.js +12 -0
  69. package/dist/skills/SkillRegistry.js.map +1 -1
  70. package/dist/skills/SkillRepository.js +5 -5
  71. package/dist/skills/SkillRepository.js.map +1 -1
  72. package/dist/skills/index.d.ts +1 -0
  73. package/dist/skills/index.js +1 -0
  74. package/dist/skills/index.js.map +1 -1
  75. package/dist/skills/routing/SkillPolicy.js +2 -2
  76. package/dist/skills/routing/SkillPolicy.js.map +1 -1
  77. package/dist/testing/DiffTestSelector.d.ts +22 -0
  78. package/dist/testing/DiffTestSelector.js +114 -0
  79. package/dist/testing/DiffTestSelector.js.map +1 -0
  80. package/dist/testing/index.d.ts +1 -0
  81. package/dist/testing/index.js +3 -0
  82. package/dist/testing/index.js.map +1 -0
  83. package/dist/tools/RtkRuntime.d.ts +9 -0
  84. package/dist/tools/RtkRuntime.js +43 -0
  85. package/dist/tools/RtkRuntime.js.map +1 -0
  86. package/dist/tools/ToolCapabilityRegistry.d.ts +1 -0
  87. package/dist/tools/ToolCapabilityRegistry.js +68 -11
  88. package/dist/tools/ToolCapabilityRegistry.js.map +1 -1
  89. package/dist/tools/ToolOrchestrator.js +6 -4
  90. package/dist/tools/ToolOrchestrator.js.map +1 -1
  91. package/dist/tools/ToolPolicy.js +16 -1
  92. package/dist/tools/ToolPolicy.js.map +1 -1
  93. package/dist/workflow/AdaptiveWorkflowRouter.d.ts +38 -0
  94. package/dist/workflow/AdaptiveWorkflowRouter.js +214 -0
  95. package/dist/workflow/AdaptiveWorkflowRouter.js.map +1 -0
  96. package/dist/workflow/CommitDiscipline.d.ts +68 -0
  97. package/dist/workflow/CommitDiscipline.js +327 -0
  98. package/dist/workflow/CommitDiscipline.js.map +1 -0
  99. package/dist/workflow/CrossRepoOrchestrator.d.ts +92 -0
  100. package/dist/workflow/CrossRepoOrchestrator.js +400 -0
  101. package/dist/workflow/CrossRepoOrchestrator.js.map +1 -0
  102. package/dist/workflow/EvolutionShadowPromoter.d.ts +46 -0
  103. package/dist/workflow/EvolutionShadowPromoter.js +73 -0
  104. package/dist/workflow/EvolutionShadowPromoter.js.map +1 -0
  105. package/dist/workflow/GovernanceRoi.d.ts +52 -0
  106. package/dist/workflow/GovernanceRoi.js +204 -0
  107. package/dist/workflow/GovernanceRoi.js.map +1 -0
  108. package/dist/workflow/GovernanceTemplates.js +2 -2
  109. package/dist/workflow/McpGovernance.d.ts +63 -0
  110. package/dist/workflow/McpGovernance.js +198 -0
  111. package/dist/workflow/McpGovernance.js.map +1 -0
  112. package/dist/workflow/ReviewAnalyzer.d.ts +15 -0
  113. package/dist/workflow/ReviewAnalyzer.js +82 -0
  114. package/dist/workflow/ReviewAnalyzer.js.map +1 -1
  115. package/dist/workflow/SecurityAudit.d.ts +27 -0
  116. package/dist/workflow/SecurityAudit.js +294 -0
  117. package/dist/workflow/SecurityAudit.js.map +1 -0
  118. package/dist/workflow/SessionCoordinator.d.ts +103 -0
  119. package/dist/workflow/SessionCoordinator.js +401 -0
  120. package/dist/workflow/SessionCoordinator.js.map +1 -0
  121. package/dist/workflow/SessionPreamble.d.ts +19 -0
  122. package/dist/workflow/SessionPreamble.js +125 -0
  123. package/dist/workflow/SessionPreamble.js.map +1 -0
  124. package/dist/workflow/ShipPipeline.d.ts +30 -0
  125. package/dist/workflow/ShipPipeline.js +366 -0
  126. package/dist/workflow/ShipPipeline.js.map +1 -0
  127. package/dist/workflow/TaskDependencyGraph.d.ts +73 -0
  128. package/dist/workflow/TaskDependencyGraph.js +245 -0
  129. package/dist/workflow/TaskDependencyGraph.js.map +1 -0
  130. package/dist/workflow/WorkflowGuidance.d.ts +5 -1
  131. package/dist/workflow/WorkflowGuidance.js +31 -0
  132. package/dist/workflow/WorkflowGuidance.js.map +1 -1
  133. package/dist/workflow/WorkflowTemplates.d.ts +38 -0
  134. package/dist/workflow/WorkflowTemplates.js +371 -0
  135. package/dist/workflow/WorkflowTemplates.js.map +1 -0
  136. package/dist/workflow/WorkspacePolicy.d.ts +46 -0
  137. package/dist/workflow/WorkspacePolicy.js +141 -0
  138. package/dist/workflow/WorkspacePolicy.js.map +1 -0
  139. package/dist/workflow/gates/GateSystem.js +12 -9
  140. package/dist/workflow/gates/GateSystem.js.map +1 -1
  141. package/dist/workflow/index.d.ts +12 -0
  142. package/dist/workflow/index.js +12 -0
  143. package/dist/workflow/index.js.map +1 -1
  144. package/docs/AI_ENGINEERING_OS_POSITIONING.md +9 -0
  145. package/docs/CODE_INTELLIGENCE.md +22 -5
  146. package/docs/CONTEXT_BUDGET.md +1 -1
  147. package/docs/EXTERNAL_REFERENCES.md +5 -2
  148. package/docs/MEMORY_FABRIC.md +7 -3
  149. package/docs/SKILL-REPOSITORY.md +3 -3
  150. package/docs/start/quickstart.md +11 -0
  151. package/docs/workflow/templates/skill-plan.md +1 -1
  152. package/package.json +3 -2
@@ -0,0 +1,371 @@
1
+ // SCALE Engine — Adaptive Workflow Templates (v0.35.0)
2
+ // Composable workflow template system with profile-based selection
3
+ // ============================================================================
4
+ // Built-in Templates
5
+ // ============================================================================
6
+ const LIGHT_DOCS = {
7
+ id: 'light-docs',
8
+ name: 'Light Documentation',
9
+ description: 'Lightweight template for documentation and config changes',
10
+ profile: 'light',
11
+ riskLevel: 'low',
12
+ steps: [
13
+ {
14
+ id: 'explore',
15
+ type: 'explore',
16
+ name: 'Explore',
17
+ description: 'Understand existing documentation structure',
18
+ required: true,
19
+ riskLevel: 'low',
20
+ estimatedDuration: '5min',
21
+ evidenceRequired: [],
22
+ tools: ['Read', 'Glob'],
23
+ },
24
+ {
25
+ id: 'build',
26
+ type: 'build',
27
+ name: 'Build',
28
+ description: 'Write or update documentation',
29
+ required: true,
30
+ riskLevel: 'low',
31
+ estimatedDuration: '15min',
32
+ evidenceRequired: [],
33
+ tools: ['Edit', 'Write'],
34
+ },
35
+ {
36
+ id: 'verify',
37
+ type: 'verify',
38
+ name: 'Verify',
39
+ description: 'Check links, formatting, and accuracy',
40
+ required: false,
41
+ riskLevel: 'low',
42
+ estimatedDuration: '5min',
43
+ evidenceRequired: [],
44
+ tools: ['Read'],
45
+ skipConditions: ['No structural changes'],
46
+ },
47
+ ],
48
+ exitCriteria: ['Documentation updated and readable'],
49
+ tags: ['docs', 'config', 'lightweight'],
50
+ };
51
+ const STANDARD_CODE = {
52
+ id: 'standard-code',
53
+ name: 'Standard Code',
54
+ description: 'Standard template for typical code changes',
55
+ profile: 'standard',
56
+ riskLevel: 'medium',
57
+ steps: [
58
+ {
59
+ id: 'explore',
60
+ type: 'explore',
61
+ name: 'Explore',
62
+ description: 'Understand codebase structure and dependencies',
63
+ required: true,
64
+ riskLevel: 'low',
65
+ estimatedDuration: '10min',
66
+ evidenceRequired: [],
67
+ tools: ['Read', 'Glob', 'Grep'],
68
+ },
69
+ {
70
+ id: 'plan',
71
+ type: 'plan',
72
+ name: 'Plan',
73
+ description: 'Design implementation approach',
74
+ required: true,
75
+ riskLevel: 'low',
76
+ estimatedDuration: '10min',
77
+ evidenceRequired: [],
78
+ tools: ['Read'],
79
+ },
80
+ {
81
+ id: 'build',
82
+ type: 'build',
83
+ name: 'Build',
84
+ description: 'Implement changes with tests',
85
+ required: true,
86
+ riskLevel: 'medium',
87
+ estimatedDuration: '30min',
88
+ evidenceRequired: [],
89
+ tools: ['Edit', 'Write', 'Bash'],
90
+ },
91
+ {
92
+ id: 'verify',
93
+ type: 'verify',
94
+ name: 'Verify',
95
+ description: 'Run tests and type checks',
96
+ required: true,
97
+ riskLevel: 'medium',
98
+ estimatedDuration: '10min',
99
+ evidenceRequired: ['test-results', 'typecheck-results'],
100
+ tools: ['Bash'],
101
+ },
102
+ {
103
+ id: 'review',
104
+ type: 'review',
105
+ name: 'Review',
106
+ description: 'Code review for quality and security',
107
+ required: false,
108
+ riskLevel: 'medium',
109
+ estimatedDuration: '10min',
110
+ evidenceRequired: [],
111
+ tools: ['Read', 'Grep'],
112
+ skipConditions: ['Trivial changes under 20 lines'],
113
+ },
114
+ ],
115
+ exitCriteria: ['All tests pass', 'Type check clean', 'Code reviewed'],
116
+ tags: ['code', 'standard', 'feature'],
117
+ };
118
+ const STRICT_FEATURE = {
119
+ id: 'strict-feature',
120
+ name: 'Strict Feature',
121
+ description: 'Strict template for high-risk features with full gates',
122
+ profile: 'strict',
123
+ riskLevel: 'high',
124
+ steps: [
125
+ {
126
+ id: 'explore',
127
+ type: 'explore',
128
+ name: 'Explore',
129
+ description: 'Deep codebase analysis with dependency mapping',
130
+ required: true,
131
+ riskLevel: 'low',
132
+ estimatedDuration: '15min',
133
+ evidenceRequired: [],
134
+ tools: ['Read', 'Glob', 'Grep'],
135
+ },
136
+ {
137
+ id: 'plan',
138
+ type: 'plan',
139
+ name: 'Plan',
140
+ description: 'Detailed implementation plan with risk assessment',
141
+ required: true,
142
+ riskLevel: 'medium',
143
+ estimatedDuration: '15min',
144
+ evidenceRequired: ['risk-assessment'],
145
+ tools: ['Read'],
146
+ },
147
+ {
148
+ id: 'build',
149
+ type: 'build',
150
+ name: 'Build',
151
+ description: 'Implement with TDD and defensive coding',
152
+ required: true,
153
+ riskLevel: 'high',
154
+ estimatedDuration: '60min',
155
+ evidenceRequired: [],
156
+ tools: ['Edit', 'Write', 'Bash'],
157
+ },
158
+ {
159
+ id: 'verify',
160
+ type: 'verify',
161
+ name: 'Verify',
162
+ description: 'Full test suite + coverage + type check',
163
+ required: true,
164
+ riskLevel: 'high',
165
+ estimatedDuration: '15min',
166
+ evidenceRequired: ['test-results', 'typecheck-results', 'coverage-report'],
167
+ tools: ['Bash'],
168
+ },
169
+ {
170
+ id: 'review',
171
+ type: 'review',
172
+ name: 'Review',
173
+ description: 'Multi-role review (eng-manager + security-reviewer)',
174
+ required: true,
175
+ riskLevel: 'high',
176
+ estimatedDuration: '15min',
177
+ evidenceRequired: ['review-report'],
178
+ tools: ['Read', 'Grep'],
179
+ },
180
+ {
181
+ id: 'ship',
182
+ type: 'ship',
183
+ name: 'Ship',
184
+ description: 'Ship pipeline with version bump and PR',
185
+ required: false,
186
+ riskLevel: 'high',
187
+ estimatedDuration: '10min',
188
+ evidenceRequired: ['ship-report'],
189
+ tools: ['Bash'],
190
+ skipConditions: ['Not ready for release'],
191
+ },
192
+ ],
193
+ exitCriteria: ['All tests pass', 'Coverage >= 80%', 'Security review passed', 'Code reviewed by 2+ roles'],
194
+ tags: ['feature', 'strict', 'high-risk'],
195
+ };
196
+ const CRITICAL_SECURITY = {
197
+ id: 'critical-security',
198
+ name: 'Critical Security',
199
+ description: 'Maximum security template for auth, crypto, and sensitive changes',
200
+ profile: 'critical',
201
+ riskLevel: 'critical',
202
+ steps: [
203
+ {
204
+ id: 'explore',
205
+ type: 'explore',
206
+ name: 'Explore',
207
+ description: 'Full codebase audit with OWASP/STRIDE analysis',
208
+ required: true,
209
+ riskLevel: 'medium',
210
+ estimatedDuration: '20min',
211
+ evidenceRequired: [],
212
+ tools: ['Read', 'Glob', 'Grep'],
213
+ },
214
+ {
215
+ id: 'plan',
216
+ type: 'plan',
217
+ name: 'Plan',
218
+ description: 'Security-focused plan with threat model',
219
+ required: true,
220
+ riskLevel: 'high',
221
+ estimatedDuration: '20min',
222
+ evidenceRequired: ['threat-model', 'risk-assessment'],
223
+ tools: ['Read'],
224
+ },
225
+ {
226
+ id: 'build',
227
+ type: 'build',
228
+ name: 'Build',
229
+ description: 'Implement with security-first patterns',
230
+ required: true,
231
+ riskLevel: 'critical',
232
+ estimatedDuration: '60min',
233
+ evidenceRequired: [],
234
+ tools: ['Edit', 'Write', 'Bash'],
235
+ },
236
+ {
237
+ id: 'verify',
238
+ type: 'verify',
239
+ name: 'Verify',
240
+ description: 'Full test suite + security audit + dependency audit',
241
+ required: true,
242
+ riskLevel: 'critical',
243
+ estimatedDuration: '20min',
244
+ evidenceRequired: ['test-results', 'typecheck-results', 'security-audit', 'dependency-audit'],
245
+ tools: ['Bash'],
246
+ },
247
+ {
248
+ id: 'review',
249
+ type: 'review',
250
+ name: 'Review',
251
+ description: 'Security-reviewer + eng-manager mandatory review',
252
+ required: true,
253
+ riskLevel: 'critical',
254
+ estimatedDuration: '20min',
255
+ evidenceRequired: ['security-review-report', 'architecture-review-report'],
256
+ tools: ['Read', 'Grep'],
257
+ },
258
+ {
259
+ id: 'ship',
260
+ type: 'ship',
261
+ name: 'Ship',
262
+ description: 'Controlled ship with rollback plan',
263
+ required: true,
264
+ riskLevel: 'critical',
265
+ estimatedDuration: '15min',
266
+ evidenceRequired: ['ship-report', 'rollback-plan'],
267
+ tools: ['Bash'],
268
+ },
269
+ ],
270
+ exitCriteria: [
271
+ 'All tests pass',
272
+ 'Security audit clean',
273
+ 'OWASP Top 10 checked',
274
+ 'STRIDE analysis done',
275
+ 'Dependency audit clean',
276
+ 'Reviewed by security-reviewer',
277
+ 'Rollback plan documented',
278
+ ],
279
+ tags: ['security', 'critical', 'auth', 'crypto'],
280
+ };
281
+ export const WORKFLOW_TEMPLATES = {
282
+ 'light-docs': LIGHT_DOCS,
283
+ 'standard-code': STANDARD_CODE,
284
+ 'strict-feature': STRICT_FEATURE,
285
+ 'critical-security': CRITICAL_SECURITY,
286
+ };
287
+ const PROFILE_TEMPLATE_MAP = {
288
+ light: 'light-docs',
289
+ standard: 'standard-code',
290
+ strict: 'strict-feature',
291
+ critical: 'critical-security',
292
+ };
293
+ // ============================================================================
294
+ // Public API
295
+ // ============================================================================
296
+ export function selectTemplate(input) {
297
+ const { profile, task, level, riskFactors } = input;
298
+ // Check for security keywords → force critical template
299
+ const securityKeywords = ['auth', 'security', 'crypto', 'password', 'token', 'secret', 'credential', 'oauth', 'jwt'];
300
+ const taskLower = task.toLowerCase();
301
+ if (securityKeywords.some(kw => taskLower.includes(kw))) {
302
+ return WORKFLOW_TEMPLATES['critical-security'];
303
+ }
304
+ // Check for doc keywords → prefer light template
305
+ const docKeywords = ['readme', 'docs', 'documentation', 'changelog', 'comment'];
306
+ if (docKeywords.some(kw => taskLower.includes(kw)) && profile === 'light') {
307
+ return WORKFLOW_TEMPLATES['light-docs'];
308
+ }
309
+ // Risk factor escalation
310
+ if (riskFactors && riskFactors.length >= 3 && profileRank(profile) < profileRank('strict')) {
311
+ return WORKFLOW_TEMPLATES['strict-feature'];
312
+ }
313
+ // Level-based escalation
314
+ if ((level === 'CRITICAL' || level === 'L') && profileRank(profile) < profileRank('strict')) {
315
+ return WORKFLOW_TEMPLATES['strict-feature'];
316
+ }
317
+ // Default: use profile mapping
318
+ const templateId = PROFILE_TEMPLATE_MAP[profile] ?? 'standard-code';
319
+ return WORKFLOW_TEMPLATES[templateId];
320
+ }
321
+ export function customizeTemplate(template, overrides) {
322
+ return {
323
+ ...template,
324
+ ...overrides,
325
+ steps: overrides.steps ?? template.steps,
326
+ exitCriteria: overrides.exitCriteria ?? template.exitCriteria,
327
+ tags: overrides.tags ?? template.tags,
328
+ };
329
+ }
330
+ export function listTemplates() {
331
+ return Object.values(WORKFLOW_TEMPLATES);
332
+ }
333
+ export function getTemplateSteps(templateId) {
334
+ return WORKFLOW_TEMPLATES[templateId]?.steps ?? [];
335
+ }
336
+ export function formatTemplateForAgent(template) {
337
+ const lines = [
338
+ `# Workflow Template: ${template.name}`,
339
+ '',
340
+ `**Profile:** ${template.profile} | **Risk:** ${template.riskLevel}`,
341
+ `**Description:** ${template.description}`,
342
+ '',
343
+ '## Steps',
344
+ '',
345
+ ];
346
+ for (const step of template.steps) {
347
+ const required = step.required ? '*(required)*' : '*(optional)*';
348
+ lines.push(`### ${step.name} ${required}`);
349
+ lines.push(`- **Type:** ${step.type}`);
350
+ lines.push(`- **Risk:** ${step.riskLevel}`);
351
+ lines.push(`- **Duration:** ${step.estimatedDuration}`);
352
+ lines.push(`- **Description:** ${step.description}`);
353
+ if (step.evidenceRequired.length > 0) {
354
+ lines.push(`- **Evidence:** ${step.evidenceRequired.join(', ')}`);
355
+ }
356
+ if (step.skipConditions && step.skipConditions.length > 0) {
357
+ lines.push(`- **Skip when:** ${step.skipConditions.join('; ')}`);
358
+ }
359
+ lines.push('');
360
+ }
361
+ lines.push('## Exit Criteria');
362
+ for (const criteria of template.exitCriteria) {
363
+ lines.push(`- ${criteria}`);
364
+ }
365
+ return lines.join('\n');
366
+ }
367
+ function profileRank(profile) {
368
+ const order = ['light', 'standard', 'strict', 'critical'];
369
+ return order.indexOf(profile);
370
+ }
371
+ //# sourceMappingURL=WorkflowTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowTemplates.js","sourceRoot":"","sources":["../../src/workflow/WorkflowTemplates.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,mEAAmE;AAuCnE,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,MAAM,UAAU,GAAqB;IACnC,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,2DAA2D;IACxE,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE;QACL;YACE,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,6CAA6C;YAC1D,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,KAAK;YAChB,iBAAiB,EAAE,MAAM;YACzB,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;SACxB;QACD;YACE,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,+BAA+B;YAC5C,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,KAAK;YAChB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;SACzB;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uCAAuC;YACpD,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,KAAK;YAChB,iBAAiB,EAAE,MAAM;YACzB,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,CAAC,MAAM,CAAC;YACf,cAAc,EAAE,CAAC,uBAAuB,CAAC;SAC1C;KACF;IACD,YAAY,EAAE,CAAC,oCAAoC,CAAC;IACpD,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC;CACxC,CAAA;AAED,MAAM,aAAa,GAAqB;IACtC,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,4CAA4C;IACzD,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,QAAQ;IACnB,KAAK,EAAE;QACL;YACE,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,gDAAgD;YAC7D,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,KAAK;YAChB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC;QACD;YACE,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,gCAAgC;YAC7C,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,KAAK;YAChB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,CAAC,MAAM,CAAC;SAChB;QACD;YACE,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,8BAA8B;YAC3C,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,QAAQ;YACnB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;SACjC;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,2BAA2B;YACxC,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,QAAQ;YACnB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,CAAC,cAAc,EAAE,mBAAmB,CAAC;YACvD,KAAK,EAAE,CAAC,MAAM,CAAC;SAChB;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sCAAsC;YACnD,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,QAAQ;YACnB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,CAAC,gCAAgC,CAAC;SACnD;KACF;IACD,YAAY,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,CAAC;IACrE,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC;CACtC,CAAA;AAED,MAAM,cAAc,GAAqB;IACvC,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,wDAAwD;IACrE,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,MAAM;IACjB,KAAK,EAAE;QACL;YACE,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,gDAAgD;YAC7D,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,KAAK;YAChB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC;QACD;YACE,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,mDAAmD;YAChE,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,QAAQ;YACnB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,CAAC,iBAAiB,CAAC;YACrC,KAAK,EAAE,CAAC,MAAM,CAAC;SAChB;QACD;YACE,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,yCAAyC;YACtD,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,MAAM;YACjB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;SACjC;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,yCAAyC;YACtD,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,MAAM;YACjB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,CAAC;YAC1E,KAAK,EAAE,CAAC,MAAM,CAAC;SAChB;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,MAAM;YACjB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,CAAC,eAAe,CAAC;YACnC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;SACxB;QACD;YACE,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,MAAM;YACjB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,CAAC,aAAa,CAAC;YACjC,KAAK,EAAE,CAAC,MAAM,CAAC;YACf,cAAc,EAAE,CAAC,uBAAuB,CAAC;SAC1C;KACF;IACD,YAAY,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,2BAA2B,CAAC;IAC1G,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC;CACzC,CAAA;AAED,MAAM,iBAAiB,GAAqB;IAC1C,EAAE,EAAE,mBAAmB;IACvB,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mEAAmE;IAChF,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,UAAU;IACrB,KAAK,EAAE;QACL;YACE,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,gDAAgD;YAC7D,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,QAAQ;YACnB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC;QACD;YACE,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,yCAAyC;YACtD,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,MAAM;YACjB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC;YACrD,KAAK,EAAE,CAAC,MAAM,CAAC;SAChB;QACD;YACE,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,UAAU;YACrB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;SACjC;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,UAAU;YACrB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC;YAC7F,KAAK,EAAE,CAAC,MAAM,CAAC;SAChB;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kDAAkD;YAC/D,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,UAAU;YACrB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,CAAC,wBAAwB,EAAE,4BAA4B,CAAC;YAC1E,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;SACxB;QACD;YACE,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,oCAAoC;YACjD,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,UAAU;YACrB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC;YAClD,KAAK,EAAE,CAAC,MAAM,CAAC;SAChB;KACF;IACD,YAAY,EAAE;QACZ,gBAAgB;QAChB,sBAAsB;QACtB,sBAAsB;QACtB,sBAAsB;QACtB,wBAAwB;QACxB,+BAA+B;QAC/B,0BAA0B;KAC3B;IACD,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC;CACjD,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAqC;IAClE,YAAY,EAAE,UAAU;IACxB,eAAe,EAAE,aAAa;IAC9B,gBAAgB,EAAE,cAAc;IAChC,mBAAmB,EAAE,iBAAiB;CACvC,CAAA;AAED,MAAM,oBAAoB,GAAoC;IAC5D,KAAK,EAAE,YAAY;IACnB,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,mBAAmB;CAC9B,CAAA;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,MAAM,UAAU,cAAc,CAAC,KAA4B;IACzD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAEnD,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IACpH,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IACpC,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;IAChD,CAAC;IAED,iDAAiD;IACjD,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;IAC/E,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QAC1E,OAAO,kBAAkB,CAAC,YAAY,CAAC,CAAA;IACzC,CAAC;IAED,yBAAyB;IACzB,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3F,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;IAC7C,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5F,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;IAC7C,CAAC;IAED,+BAA+B;IAC/B,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,eAAe,CAAA;IACnE,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA0B,EAAE,SAAoC;IAChG,OAAO;QACL,GAAG,QAAQ;QACX,GAAG,SAAS;QACZ,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;QACxC,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;QAC7D,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;KACtC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,OAAO,kBAAkB,CAAC,UAAU,CAAC,EAAE,KAAK,IAAI,EAAE,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAA0B;IAC/D,MAAM,KAAK,GAAa;QACtB,wBAAwB,QAAQ,CAAC,IAAI,EAAE;QACvC,EAAE;QACF,gBAAgB,QAAQ,CAAC,OAAO,gBAAgB,QAAQ,CAAC,SAAS,EAAE;QACpE,oBAAoB,QAAQ,CAAC,WAAW,EAAE;QAC1C,EAAE;QACF,UAAU;QACV,EAAE;KACH,CAAA;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAA;QAChE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAA;QAC1C,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACtC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QAC3C,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;QACvD,KAAK,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QACpD,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAClE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9B,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAA;IAC7B,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,OAAwB;IAC3C,MAAM,KAAK,GAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAA;IAC5E,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC"}
@@ -0,0 +1,46 @@
1
+ export type PolicyEnforcement = 'advisory' | 'warn' | 'block';
2
+ export type ResourceType = 'file' | 'directory' | 'tool' | 'branch';
3
+ export interface ResourcePolicy {
4
+ resource: string;
5
+ type: ResourceType;
6
+ owner?: string;
7
+ allowedAgents?: string[];
8
+ enforcement: PolicyEnforcement;
9
+ reason?: string;
10
+ }
11
+ export interface WorkspacePolicyConfig {
12
+ version: number;
13
+ defaultEnforcement: PolicyEnforcement;
14
+ resources: ResourcePolicy[];
15
+ conflictResolution: 'first-wins' | 'owner-priority' | 'block-all';
16
+ }
17
+ export interface PolicyViolation {
18
+ id: string;
19
+ ts: string;
20
+ agentId: string;
21
+ resource: string;
22
+ policy: ResourcePolicy;
23
+ action: 'read' | 'write' | 'delete';
24
+ verdict: 'allowed' | 'warned' | 'blocked';
25
+ message: string;
26
+ }
27
+ export interface PolicyCheckResult {
28
+ allowed: boolean;
29
+ violations: PolicyViolation[];
30
+ message?: string;
31
+ }
32
+ export declare class WorkspacePolicyEngine {
33
+ private config;
34
+ private violations;
35
+ private now;
36
+ constructor(config?: WorkspacePolicyConfig, now?: () => Date);
37
+ checkAccess(agentId: string, resource: string, action: 'read' | 'write' | 'delete'): PolicyCheckResult;
38
+ addPolicy(policy: ResourcePolicy): void;
39
+ removePolicy(resource: string): void;
40
+ listPolicies(): ResourcePolicy[];
41
+ getViolations(agentId?: string): PolicyViolation[];
42
+ getConfig(): WorkspacePolicyConfig;
43
+ loadFromProject(projectDir?: string): void;
44
+ private evaluatePolicy;
45
+ private buildMessage;
46
+ }
@@ -0,0 +1,141 @@
1
+ // SCALE Engine — Workspace Policy Runtime Enforcement (v0.34.0)
2
+ // Runtime workspace policy engine with file access rules, resource locks, agent boundaries
3
+ import { existsSync, readFileSync } from 'node:fs';
4
+ import { join, resolve } from 'node:path';
5
+ import yaml from 'js-yaml';
6
+ import { randomUUID } from 'node:crypto';
7
+ const DEFAULT_CONFIG = {
8
+ version: 1,
9
+ defaultEnforcement: 'advisory',
10
+ resources: [],
11
+ conflictResolution: 'owner-priority',
12
+ };
13
+ export class WorkspacePolicyEngine {
14
+ constructor(config, now) {
15
+ this.violations = [];
16
+ this.config = config ?? { ...DEFAULT_CONFIG };
17
+ this.now = now ?? (() => new Date());
18
+ }
19
+ checkAccess(agentId, resource, action) {
20
+ const matchingPolicies = this.config.resources.filter(p => matchGlob(resource, p.resource));
21
+ if (matchingPolicies.length === 0) {
22
+ return { allowed: true, violations: [] };
23
+ }
24
+ const violations = [];
25
+ for (const policy of matchingPolicies) {
26
+ const verdict = this.evaluatePolicy(agentId, resource, action, policy);
27
+ if (verdict !== 'allowed') {
28
+ const violation = {
29
+ id: `PV-${Date.now()}-${randomUUID().slice(0, 8)}`,
30
+ ts: this.now().toISOString(),
31
+ agentId,
32
+ resource,
33
+ policy,
34
+ action,
35
+ verdict,
36
+ message: this.buildMessage(agentId, resource, action, policy, verdict),
37
+ };
38
+ violations.push(violation);
39
+ this.violations.push(violation);
40
+ }
41
+ }
42
+ const blocked = violations.some(v => v.verdict === 'blocked');
43
+ return {
44
+ allowed: !blocked,
45
+ violations,
46
+ message: blocked
47
+ ? `Access blocked: ${violations.filter(v => v.verdict === 'blocked').map(v => v.message).join('; ')}`
48
+ : undefined,
49
+ };
50
+ }
51
+ addPolicy(policy) {
52
+ const existing = this.config.resources.findIndex(p => p.resource === policy.resource);
53
+ if (existing >= 0) {
54
+ this.config.resources[existing] = policy;
55
+ }
56
+ else {
57
+ this.config.resources.push(policy);
58
+ }
59
+ }
60
+ removePolicy(resource) {
61
+ this.config.resources = this.config.resources.filter(p => p.resource !== resource);
62
+ }
63
+ listPolicies() {
64
+ return [...this.config.resources];
65
+ }
66
+ getViolations(agentId) {
67
+ if (agentId)
68
+ return this.violations.filter(v => v.agentId === agentId);
69
+ return [...this.violations];
70
+ }
71
+ getConfig() {
72
+ return { ...this.config };
73
+ }
74
+ loadFromProject(projectDir) {
75
+ const dir = resolve(projectDir ?? process.cwd());
76
+ const policyPath = join(dir, '.scale', 'workspace-policy.yaml');
77
+ if (!existsSync(policyPath))
78
+ return;
79
+ try {
80
+ const content = readFileSync(policyPath, 'utf-8');
81
+ const parsed = yaml.load(content);
82
+ if (parsed.version)
83
+ this.config.version = parsed.version;
84
+ if (parsed.defaultEnforcement)
85
+ this.config.defaultEnforcement = parsed.defaultEnforcement;
86
+ if (parsed.conflictResolution)
87
+ this.config.conflictResolution = parsed.conflictResolution;
88
+ if (Array.isArray(parsed.resources))
89
+ this.config.resources = parsed.resources;
90
+ }
91
+ catch {
92
+ // ignore parse errors, keep existing config
93
+ }
94
+ }
95
+ evaluatePolicy(agentId, _resource, _action, policy) {
96
+ // Owner always gets full access
97
+ if (policy.owner && policy.owner === agentId) {
98
+ return 'allowed';
99
+ }
100
+ // Check allowedAgents list
101
+ if (policy.allowedAgents && policy.allowedAgents.length > 0) {
102
+ if (!policy.allowedAgents.includes(agentId)) {
103
+ return policy.enforcement === 'block' ? 'blocked' : policy.enforcement === 'warn' ? 'warned' : 'allowed';
104
+ }
105
+ return 'allowed';
106
+ }
107
+ // Non-owner with owner-priority conflict resolution
108
+ if (policy.owner && this.config.conflictResolution === 'owner-priority') {
109
+ return policy.enforcement === 'block' ? 'blocked' : policy.enforcement === 'warn' ? 'warned' : 'allowed';
110
+ }
111
+ // Default enforcement for write/delete on directories
112
+ if (policy.type === 'directory' && (_action === 'write' || _action === 'delete')) {
113
+ if (policy.enforcement === 'block')
114
+ return 'blocked';
115
+ if (policy.enforcement === 'warn')
116
+ return 'warned';
117
+ }
118
+ return 'allowed';
119
+ }
120
+ buildMessage(agentId, resource, action, policy, verdict) {
121
+ const parts = [
122
+ `Agent "${agentId}" ${verdict} from ${action} "${resource}"`,
123
+ ];
124
+ if (policy.owner)
125
+ parts.push(`(owner: ${policy.owner})`);
126
+ if (policy.reason)
127
+ parts.push(`— ${policy.reason}`);
128
+ return parts.join(' ');
129
+ }
130
+ }
131
+ function matchGlob(filePath, pattern) {
132
+ const regexStr = pattern
133
+ .replace(/\./g, '\\.')
134
+ .replace(/\*\*/g, '{{GLOBSTAR}}')
135
+ .replace(/\*/g, '[^/]*')
136
+ .replace(/\{\{GLOBSTAR\}\}/g, '.*')
137
+ .replace(/\?/g, '[^/]');
138
+ const regex = new RegExp(`^${regexStr}$`);
139
+ return regex.test(filePath);
140
+ }
141
+ //# sourceMappingURL=WorkspacePolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspacePolicy.js","sourceRoot":"","sources":["../../src/workflow/WorkspacePolicy.ts"],"names":[],"mappings":"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"}
@@ -395,8 +395,8 @@ export class ExplorationGate {
395
395
  kind: 'file',
396
396
  label: 'Knowledge graph',
397
397
  passed: hasKnowledgeGraph,
398
- path: 'graphify-out/GRAPH_REPORT.md',
399
- detail: hasKnowledgeGraph ? 'available' : 'not available',
398
+ path: hasKnowledgeGraph ? 'graphify-out/graph.json' : 'graphify-out/graph.json',
399
+ detail: hasKnowledgeGraph ? 'graphify graph artifact is available' : 'graphify graph artifact is not available',
400
400
  }));
401
401
  const passed = blockers.length === 0;
402
402
  return {
@@ -423,14 +423,17 @@ export class ExplorationGate {
423
423
  return null;
424
424
  }
425
425
  async checkKnowledgeGraph() {
426
- try {
427
- const fs = await import('fs/promises');
428
- await fs.access('graphify-out/GRAPH_REPORT.md');
429
- return true;
430
- }
431
- catch {
432
- return false;
426
+ const fs = await import('fs/promises');
427
+ for (const candidate of ['graphify-out/graph.json', 'graphify-out/GRAPH_REPORT.md']) {
428
+ try {
429
+ await fs.access(candidate);
430
+ return true;
431
+ }
432
+ catch {
433
+ // Try the next graphify artifact candidate.
434
+ }
433
435
  }
436
+ return false;
434
437
  }
435
438
  }
436
439
  export class PlanningGate {