@hongmaple0820/scale-engine 0.49.0 → 0.50.1

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 (190) hide show
  1. package/README.en.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/api/DashboardHttpConfig.d.ts +28 -0
  4. package/dist/api/DashboardHttpConfig.js +110 -0
  5. package/dist/api/DashboardHttpConfig.js.map +1 -0
  6. package/dist/api/cli.js +102 -11
  7. package/dist/api/cli.js.map +1 -1
  8. package/dist/api/http.d.ts +1 -0
  9. package/dist/api/http.js +50 -0
  10. package/dist/api/http.js.map +1 -0
  11. package/dist/artifact/types.d.ts +5 -0
  12. package/dist/artifact/types.js.map +1 -1
  13. package/dist/bootstrap/DependencyBootstrap.d.ts +1 -0
  14. package/dist/bootstrap/DependencyBootstrap.js +14 -3
  15. package/dist/bootstrap/DependencyBootstrap.js.map +1 -1
  16. package/dist/cli/cortexApplyCommand.d.ts +26 -0
  17. package/dist/cli/cortexApplyCommand.js +74 -0
  18. package/dist/cli/cortexApplyCommand.js.map +1 -0
  19. package/dist/cli/cortexCandidateCommands.d.ts +42 -0
  20. package/dist/cli/cortexCandidateCommands.js +119 -0
  21. package/dist/cli/cortexCandidateCommands.js.map +1 -0
  22. package/dist/cli/cortexCommands.d.ts +15 -0
  23. package/dist/cli/cortexCommands.js +57 -15
  24. package/dist/cli/cortexCommands.js.map +1 -1
  25. package/dist/cli/engineBootstrap.d.ts +1 -1
  26. package/dist/cli/engineBootstrap.js +2 -0
  27. package/dist/cli/engineBootstrap.js.map +1 -1
  28. package/dist/cli/evalCommands.js +1 -0
  29. package/dist/cli/evalCommands.js.map +1 -1
  30. package/dist/cli/phaseCommands.d.ts +28 -0
  31. package/dist/cli/phaseCommands.js +148 -9
  32. package/dist/cli/phaseCommands.js.map +1 -1
  33. package/dist/cli/runtimeSkillCommands.js +12 -2
  34. package/dist/cli/runtimeSkillCommands.js.map +1 -1
  35. package/dist/cli/shieldCommands.d.ts +1 -0
  36. package/dist/cli/shieldCommands.js +20 -7
  37. package/dist/cli/shieldCommands.js.map +1 -1
  38. package/dist/cli/workflowEvidenceCommands.d.ts +120 -0
  39. package/dist/cli/workflowEvidenceCommands.js +228 -2
  40. package/dist/cli/workflowEvidenceCommands.js.map +1 -1
  41. package/dist/cortex/AutoFixEventObservations.d.ts +11 -0
  42. package/dist/cortex/AutoFixEventObservations.js +72 -0
  43. package/dist/cortex/AutoFixEventObservations.js.map +1 -0
  44. package/dist/cortex/GateEvidenceObservations.d.ts +22 -0
  45. package/dist/cortex/GateEvidenceObservations.js +179 -0
  46. package/dist/cortex/GateEvidenceObservations.js.map +1 -0
  47. package/dist/cortex/GovernanceMetrics.d.ts +2 -0
  48. package/dist/cortex/GovernanceMetrics.js +112 -22
  49. package/dist/cortex/GovernanceMetrics.js.map +1 -1
  50. package/dist/cortex/InstinctApplicationRecorder.d.ts +28 -0
  51. package/dist/cortex/InstinctApplicationRecorder.js +145 -0
  52. package/dist/cortex/InstinctApplicationRecorder.js.map +1 -0
  53. package/dist/cortex/InstinctCandidateAudit.d.ts +3 -0
  54. package/dist/cortex/InstinctCandidateAudit.js +39 -0
  55. package/dist/cortex/InstinctCandidateAudit.js.map +1 -0
  56. package/dist/cortex/InstinctCandidateReview.d.ts +32 -0
  57. package/dist/cortex/InstinctCandidateReview.js +125 -0
  58. package/dist/cortex/InstinctCandidateReview.js.map +1 -0
  59. package/dist/cortex/InstinctExtractor.d.ts +1 -0
  60. package/dist/cortex/InstinctExtractor.js +24 -17
  61. package/dist/cortex/InstinctExtractor.js.map +1 -1
  62. package/dist/cortex/InstinctRuntimeEvidence.d.ts +14 -0
  63. package/dist/cortex/InstinctRuntimeEvidence.js +120 -0
  64. package/dist/cortex/InstinctRuntimeEvidence.js.map +1 -0
  65. package/dist/cortex/InstinctStore.d.ts +18 -3
  66. package/dist/cortex/InstinctStore.js +30 -9
  67. package/dist/cortex/InstinctStore.js.map +1 -1
  68. package/dist/cortex/SessionInjector.d.ts +1 -0
  69. package/dist/cortex/SessionInjector.js +15 -2
  70. package/dist/cortex/SessionInjector.js.map +1 -1
  71. package/dist/dashboard/DashboardServer.d.ts +79 -0
  72. package/dist/dashboard/DashboardServer.js +330 -6
  73. package/dist/dashboard/DashboardServer.js.map +1 -1
  74. package/dist/dashboard/spa/app.js +515 -0
  75. package/dist/dashboard/spa/components/DataTable.js +53 -0
  76. package/dist/dashboard/spa/components/EventStream.js +66 -0
  77. package/dist/dashboard/spa/components/LoadingState.js +39 -0
  78. package/dist/dashboard/spa/components/MetricCard.js +30 -0
  79. package/dist/dashboard/spa/components/Panel.js +27 -0
  80. package/dist/dashboard/spa/components/StatusBadge.js +51 -0
  81. package/dist/dashboard/spa/i18n.js +767 -0
  82. package/dist/dashboard/spa/index.html +463 -0
  83. package/dist/dashboard/spa/pages/costs.js +522 -0
  84. package/dist/dashboard/spa/pages/documents.js +540 -0
  85. package/dist/dashboard/spa/pages/knowledge.js +457 -0
  86. package/dist/dashboard/spa/pages/monitoring.js +361 -0
  87. package/dist/dashboard/spa/pages/overview.js +301 -0
  88. package/dist/dashboard/spa/pages/topology-renderers.js +251 -0
  89. package/dist/dashboard/spa/pages/topology.js +370 -0
  90. package/dist/dashboard/spa/pages/workflow-renderers.js +239 -0
  91. package/dist/dashboard/spa/pages/workflow.js +217 -0
  92. package/dist/env/EnvironmentDoctor.js +12 -7
  93. package/dist/env/EnvironmentDoctor.js.map +1 -1
  94. package/dist/eval/WorkflowEval.d.ts +9 -0
  95. package/dist/eval/WorkflowEval.js +348 -2
  96. package/dist/eval/WorkflowEval.js.map +1 -1
  97. package/dist/memory/MemoryBrain.d.ts +13 -0
  98. package/dist/memory/MemoryBrain.js +47 -0
  99. package/dist/memory/MemoryBrain.js.map +1 -1
  100. package/dist/memory/MemoryFabric.d.ts +1 -0
  101. package/dist/memory/MemoryFabric.js +12 -8
  102. package/dist/memory/MemoryFabric.js.map +1 -1
  103. package/dist/memory/MemoryLearning.d.ts +1 -0
  104. package/dist/memory/MemoryLearning.js +6 -3
  105. package/dist/memory/MemoryLearning.js.map +1 -1
  106. package/dist/memory/MemoryProviders.d.ts +8 -1
  107. package/dist/memory/MemoryProviders.js +143 -29
  108. package/dist/memory/MemoryProviders.js.map +1 -1
  109. package/dist/runtime/AiOsRuntime.d.ts +14 -1
  110. package/dist/runtime/AiOsRuntime.js +59 -3
  111. package/dist/runtime/AiOsRuntime.js.map +1 -1
  112. package/dist/runtime/RuntimeDoctor.js +3 -1
  113. package/dist/runtime/RuntimeDoctor.js.map +1 -1
  114. package/dist/runtime/RuntimeEvidenceLedger.d.ts +6 -0
  115. package/dist/runtime/RuntimeEvidenceLedger.js +52 -1
  116. package/dist/runtime/RuntimeEvidenceLedger.js.map +1 -1
  117. package/dist/runtime/SessionLedger.d.ts +2 -0
  118. package/dist/runtime/SessionLedger.js +4 -0
  119. package/dist/runtime/SessionLedger.js.map +1 -1
  120. package/dist/setup/SetupVerification.js +53 -5
  121. package/dist/setup/SetupVerification.js.map +1 -1
  122. package/dist/shield/PolicyCompiler.js +73 -12
  123. package/dist/shield/PolicyCompiler.js.map +1 -1
  124. package/dist/shield/ProtectedPaths.js +4 -2
  125. package/dist/shield/ProtectedPaths.js.map +1 -1
  126. package/dist/skills/SkillCatalog.d.ts +2 -0
  127. package/dist/skills/SkillCatalog.js +8 -0
  128. package/dist/skills/SkillCatalog.js.map +1 -1
  129. package/dist/skills/SkillDoctor.d.ts +19 -2
  130. package/dist/skills/SkillDoctor.js +163 -13
  131. package/dist/skills/SkillDoctor.js.map +1 -1
  132. package/dist/tools/SafeCommandRunner.d.ts +1 -0
  133. package/dist/tools/SafeCommandRunner.js +1 -0
  134. package/dist/tools/SafeCommandRunner.js.map +1 -1
  135. package/dist/tools/ToolCapabilityRegistry.js +25 -3
  136. package/dist/tools/ToolCapabilityRegistry.js.map +1 -1
  137. package/dist/tools/ToolOrchestrator.js +21 -0
  138. package/dist/tools/ToolOrchestrator.js.map +1 -1
  139. package/dist/version.d.ts +1 -1
  140. package/dist/version.js +1 -1
  141. package/dist/workflow/AgentLoopReadiness.d.ts +103 -0
  142. package/dist/workflow/AgentLoopReadiness.js +371 -0
  143. package/dist/workflow/AgentLoopReadiness.js.map +1 -0
  144. package/dist/workflow/EcosystemReadinessGate.d.ts +46 -0
  145. package/dist/workflow/EcosystemReadinessGate.js +126 -0
  146. package/dist/workflow/EcosystemReadinessGate.js.map +1 -0
  147. package/dist/workflow/EngineeringStandards.js +48 -3
  148. package/dist/workflow/EngineeringStandards.js.map +1 -1
  149. package/dist/workflow/GateCatalog.js +9 -0
  150. package/dist/workflow/GateCatalog.js.map +1 -1
  151. package/dist/workflow/GovernanceTemplatePacks.js +2 -26
  152. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -1
  153. package/dist/workflow/GovernanceTemplates.js +8 -1
  154. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  155. package/dist/workflow/ReleaseDeploymentLedger.d.ts +63 -0
  156. package/dist/workflow/ReleaseDeploymentLedger.js +154 -0
  157. package/dist/workflow/ReleaseDeploymentLedger.js.map +1 -0
  158. package/dist/workflow/ReviewAnalyzer.js +50 -3
  159. package/dist/workflow/ReviewAnalyzer.js.map +1 -1
  160. package/dist/workflow/SessionPreamble.d.ts +7 -0
  161. package/dist/workflow/SessionPreamble.js +48 -9
  162. package/dist/workflow/SessionPreamble.js.map +1 -1
  163. package/dist/workflow/VerificationCommands.d.ts +1 -0
  164. package/dist/workflow/VerificationCommands.js.map +1 -1
  165. package/dist/workflow/VerificationProfile.d.ts +5 -0
  166. package/dist/workflow/VerificationProfile.js +26 -0
  167. package/dist/workflow/VerificationProfile.js.map +1 -1
  168. package/dist/workflow/VerificationSchema.d.ts +3 -0
  169. package/dist/workflow/VerificationSchema.js +6 -0
  170. package/dist/workflow/VerificationSchema.js.map +1 -1
  171. package/dist/workflow/WorkflowEffectiveness.d.ts +97 -0
  172. package/dist/workflow/WorkflowEffectiveness.js +302 -0
  173. package/dist/workflow/WorkflowEffectiveness.js.map +1 -0
  174. package/dist/workflow/WorkflowEffectivenessRenderer.d.ts +2 -0
  175. package/dist/workflow/WorkflowEffectivenessRenderer.js +67 -0
  176. package/dist/workflow/WorkflowEffectivenessRenderer.js.map +1 -0
  177. package/dist/workflow/WorkflowEffectivenessScoring.d.ts +6 -0
  178. package/dist/workflow/WorkflowEffectivenessScoring.js +243 -0
  179. package/dist/workflow/WorkflowEffectivenessScoring.js.map +1 -0
  180. package/dist/workflow/gates/GateSystem.d.ts +16 -0
  181. package/dist/workflow/gates/GateSystem.js +208 -41
  182. package/dist/workflow/gates/GateSystem.js.map +1 -1
  183. package/dist/workflow/gates/MetaGovernanceGates.js +269 -8
  184. package/dist/workflow/gates/MetaGovernanceGates.js.map +1 -1
  185. package/docs/reference/cli.md +2 -1
  186. package/docs/start/agent-governance-demo.md +1 -1
  187. package/docs/workflow/README.md +1 -1
  188. package/docs/workflow/templates/github-actions-scale-preflight.yml +4 -1
  189. package/package.json +6 -3
  190. package/scripts/workflow/run-vitest.mjs +123 -0
@@ -0,0 +1,103 @@
1
+ export type AgentLoopReadinessStatus = 'ready' | 'warning' | 'missing';
2
+ export type AgentLoopEvidenceLevel = 'measured' | 'partial' | 'missing';
3
+ export interface AgentLoopMetric<T = number> {
4
+ value: T | null;
5
+ evidence: AgentLoopEvidenceLevel;
6
+ source: string;
7
+ note?: string;
8
+ }
9
+ export interface AgentLoopReadinessReport {
10
+ status: AgentLoopReadinessStatus;
11
+ score: number;
12
+ summary: {
13
+ readySignals: number;
14
+ warningSignals: number;
15
+ missingSignals: number;
16
+ evidence: string[];
17
+ recommendations: string[];
18
+ };
19
+ metrics: {
20
+ toolExecutionEvidence: AgentLoopMetric<boolean>;
21
+ loopRecoveryRate: AgentLoopMetric;
22
+ guardrailCoverage: AgentLoopMetric;
23
+ budgetControlEvidence: AgentLoopMetric<boolean>;
24
+ handoffOrDelegationEvidence: AgentLoopMetric<boolean>;
25
+ terminationEvidence: AgentLoopMetric<boolean>;
26
+ };
27
+ }
28
+ export interface AgentLoopReadinessOptions {
29
+ projectDir?: string;
30
+ scaleDir?: string;
31
+ lookbackDays?: number;
32
+ now?: Date;
33
+ runReports?: AgentLoopRunReport[];
34
+ memoryRecallItems?: number;
35
+ }
36
+ export interface AgentLoopRunReport {
37
+ generatedAt?: string;
38
+ mode?: string;
39
+ status?: string;
40
+ dryRun?: boolean;
41
+ plan?: {
42
+ task?: {
43
+ taskId?: string;
44
+ task?: string;
45
+ level?: string;
46
+ };
47
+ adaptiveWorkflow?: {
48
+ gates?: string[];
49
+ profile?: string;
50
+ };
51
+ evaluator?: {
52
+ gates?: Array<{
53
+ id?: string;
54
+ required?: boolean;
55
+ }>;
56
+ };
57
+ toolStrategy?: {
58
+ nodes?: Array<{
59
+ id?: string;
60
+ kind?: string;
61
+ fallback?: string;
62
+ evidence?: string[];
63
+ }>;
64
+ summary?: {
65
+ totalSteps?: number;
66
+ requiredSteps?: number;
67
+ highRiskSteps?: number;
68
+ estimatedCostUnits?: number;
69
+ fallbackCoveredSteps?: number;
70
+ };
71
+ };
72
+ skillPlan?: {
73
+ executionPlan?: {
74
+ steps?: Array<{
75
+ id?: string;
76
+ kind?: string;
77
+ required?: boolean;
78
+ }>;
79
+ };
80
+ };
81
+ };
82
+ steps?: Array<{
83
+ id?: string;
84
+ kind?: string;
85
+ status?: string;
86
+ required?: boolean;
87
+ }>;
88
+ evidence?: {
89
+ produced?: string[];
90
+ pending?: string[];
91
+ };
92
+ verification?: {
93
+ commands?: Array<{
94
+ status?: string;
95
+ evidenceId?: string;
96
+ }>;
97
+ allPassed?: boolean;
98
+ };
99
+ artifacts?: {
100
+ runReport?: string;
101
+ };
102
+ }
103
+ export declare function assessAgentLoopReadiness(options?: AgentLoopReadinessOptions): AgentLoopReadinessReport;
@@ -0,0 +1,371 @@
1
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
2
+ import { isAbsolute, join, resolve } from 'node:path';
3
+ import { RuntimeEvidenceLedger, } from '../runtime/RuntimeEvidenceLedger.js';
4
+ export function assessAgentLoopReadiness(options = {}) {
5
+ const projectDir = resolve(options.projectDir ?? process.cwd());
6
+ const scaleDir = resolveScaleDir(projectDir, options.scaleDir ?? '.scale');
7
+ const lookbackDays = normalizeLookbackDays(options.lookbackDays);
8
+ const now = options.now ?? new Date();
9
+ const gateRecords = readGateEvidence(projectDir, scaleDir, lookbackDays, now);
10
+ const reviewRecords = readReviewEvidence(scaleDir, lookbackDays, now);
11
+ const runtimeRecords = new RuntimeEvidenceLedger({ projectDir, scaleDir, createDirs: false })
12
+ .list({ limit: Number.MAX_SAFE_INTEGER })
13
+ .filter(record => withinLookback(record.createdAt, lookbackDays, now));
14
+ const runtimeSummary = summarizeRuntimeRecords(runtimeRecords);
15
+ const runReports = (options.runReports ?? readRunReports(scaleDir))
16
+ .filter(report => withinLookback(report.generatedAt, lookbackDays, now));
17
+ const metrics = {
18
+ toolExecutionEvidence: buildToolExecutionMetric(runtimeRecords, runReports),
19
+ loopRecoveryRate: buildLoopRecoveryMetric(runtimeSummary, runReports),
20
+ guardrailCoverage: buildGuardrailCoverageMetric(gateRecords, runReports),
21
+ budgetControlEvidence: buildBudgetControlMetric(runReports),
22
+ handoffOrDelegationEvidence: buildDelegationMetric(reviewRecords, runtimeRecords, runReports),
23
+ terminationEvidence: buildTerminationMetric(gateRecords, runtimeRecords, runReports),
24
+ };
25
+ const values = Object.values(metrics);
26
+ const readySignals = values.filter(metric => isReadyMetric(metric)).length;
27
+ const missingSignals = values.filter(metric => metric.evidence === 'missing').length;
28
+ const warningSignals = values.length - readySignals - missingSignals;
29
+ const score = Math.round((readySignals / values.length) * 100);
30
+ const evidence = [
31
+ ...values
32
+ .filter(metric => metric.evidence !== 'missing')
33
+ .map(metric => metric.source),
34
+ ];
35
+ const recommendations = buildRecommendations(metrics);
36
+ return {
37
+ status: readySignals === values.length ? 'ready' : readySignals === 0 ? 'missing' : 'warning',
38
+ score,
39
+ summary: {
40
+ readySignals,
41
+ warningSignals,
42
+ missingSignals,
43
+ evidence: [...new Set(evidence)],
44
+ recommendations,
45
+ },
46
+ metrics,
47
+ };
48
+ }
49
+ function buildToolExecutionMetric(runtimeRecords, runReports) {
50
+ const runtimeToolRecords = runtimeRecords.filter(record => ['command', 'tool', 'skill', 'mcp', 'browser', 'desktop'].includes(record.kind));
51
+ const strategySteps = runReports.reduce((sum, report) => sum + toolStrategyStepCount(report), 0);
52
+ const skillSteps = runReports.reduce((sum, report) => sum + skillStepCount(report), 0);
53
+ const total = runtimeToolRecords.length + strategySteps + skillSteps;
54
+ if (total === 0) {
55
+ return missing('No command, tool, skill, MCP, browser, desktop, or AI OS tool-strategy evidence found.', '.scale/evidence/runtime + .scale/ai-os/runs');
56
+ }
57
+ return measured(true, '.scale/evidence/runtime + .scale/ai-os/runs', `${total} tool execution/planning evidence item(s).`);
58
+ }
59
+ function buildLoopRecoveryMetric(runtimeSummary, runReports) {
60
+ const runtimeFailureCandidates = runtimeSummary.failed + runtimeSummary.resolvedFailed;
61
+ const failedRunCommands = runReports.reduce((sum, report) => {
62
+ const commands = report.verification?.commands ?? [];
63
+ return sum + commands.filter(command => command.status === 'failed').length;
64
+ }, 0);
65
+ const blockedRuns = runReports.filter(report => report.status === 'blocked').length;
66
+ const candidates = runtimeFailureCandidates + failedRunCommands + blockedRuns;
67
+ if (runtimeSummary.total === 0 && runReports.length === 0) {
68
+ return missing('No runtime or AI OS run evidence exists to prove feedback/recovery behavior.', '.scale/evidence/runtime + .scale/ai-os/runs');
69
+ }
70
+ if (candidates === 0) {
71
+ return measured(1, '.scale/evidence/runtime + .scale/ai-os/runs', 'No unresolved runtime or guarded-run failure evidence in the current window.');
72
+ }
73
+ const recovered = runtimeSummary.resolvedFailed;
74
+ return measured(roundRatio(recovered, candidates), '.scale/evidence/runtime + .scale/ai-os/runs', `${recovered}/${candidates} failed loop candidate(s) recovered or superseded.`);
75
+ }
76
+ function buildGuardrailCoverageMetric(gateRecords, runReports) {
77
+ const guardrailGates = gateRecords.filter(record => isGuardrailGate(record.gate));
78
+ if (guardrailGates.length > 0) {
79
+ const historicalPassed = guardrailGates.filter(record => isPassedGateEvidence(record)).length;
80
+ const latestByGate = latestGateEvidenceByGate(guardrailGates);
81
+ const latestPassed = latestByGate.filter(record => isPassedGateEvidence(record)).length;
82
+ return measured(roundRatio(latestPassed, latestByGate.length), '.scale/evidence', `Latest ${latestPassed}/${latestByGate.length} guardrail gate state(s) passed; historical ${historicalPassed}/${guardrailGates.length} record(s) passed.`);
83
+ }
84
+ const aiOsGuardrails = runReports.flatMap(report => [
85
+ ...(report.plan?.adaptiveWorkflow?.gates ?? []),
86
+ ...(report.plan?.evaluator?.gates ?? []).map(gate => gate.id ?? ''),
87
+ ]).filter(gate => isGuardrailGate(gate) || isReasoningGuardrail(gate));
88
+ if (aiOsGuardrails.length > 0) {
89
+ return measured(1, '.scale/ai-os/runs', `${aiOsGuardrails.length} AI OS evaluator/adaptive guardrail reference(s).`);
90
+ }
91
+ return missing('No G7/G11/security/boundary guardrail evidence was found.', '.scale/evidence + .scale/ai-os/runs');
92
+ }
93
+ function buildBudgetControlMetric(runReports) {
94
+ const boundedRuns = runReports.filter(report => {
95
+ const totalSteps = toolStrategyStepCount(report);
96
+ const cost = report.plan?.toolStrategy?.summary?.estimatedCostUnits;
97
+ const fallbackCovered = report.plan?.toolStrategy?.summary?.fallbackCoveredSteps;
98
+ return totalSteps > 0 && typeof cost === 'number' && Number.isFinite(cost) && typeof fallbackCovered === 'number';
99
+ });
100
+ if (boundedRuns.length === 0) {
101
+ return missing('No AI OS tool strategy with total step count, estimated cost, and fallback coverage was found.', '.scale/ai-os/runs');
102
+ }
103
+ return measured(true, '.scale/ai-os/runs', `${boundedRuns.length} AI OS run(s) include step, cost, and fallback controls.`);
104
+ }
105
+ function buildDelegationMetric(reviewRecords, runtimeRecords, runReports) {
106
+ const reviewDelegations = reviewRecords.filter(record => record.reviewMode === 'fresh-subagent' || record.reviewMode === 'hybrid');
107
+ const runtimeDelegations = runtimeRecords.filter(record => {
108
+ const haystack = `${record.kind} ${record.title} ${record.summary} ${JSON.stringify(record.metadata ?? {})}`.toLowerCase();
109
+ return haystack.includes('subagent') || haystack.includes('handoff') || haystack.includes('delegat');
110
+ });
111
+ const aiOsDelegations = runReports.reduce((sum, report) => sum + delegatedStepCount(report), 0);
112
+ const total = reviewDelegations.length + runtimeDelegations.length + aiOsDelegations;
113
+ if (total === 0) {
114
+ return missing('No fresh-subagent, hybrid review, handoff, or delegated skill evidence found.', '.scale/reviews + .scale/evidence/runtime + .scale/ai-os/runs');
115
+ }
116
+ return measured(true, '.scale/reviews + .scale/evidence/runtime + .scale/ai-os/runs', `${total} delegation/handoff evidence item(s).`);
117
+ }
118
+ function buildTerminationMetric(gateRecords, runtimeRecords, runReports) {
119
+ const completedRuns = runReports.filter(report => report.status === 'ready' || report.verification?.allPassed === true || (report.evidence?.pending ?? []).length === 0);
120
+ const finalRuntime = runtimeRecords.filter(record => record.kind === 'final-report' && record.status === 'passed');
121
+ const verifyGatePasses = gateRecords.filter(record => {
122
+ const text = `${record.gate ?? ''} ${record.evidence ?? ''}`.toLowerCase();
123
+ return (record.passed || record.status === 'passed') && (['g3', 'g8', 'g11'].includes(String(record.gate ?? '').toLowerCase())
124
+ || text.includes('verify')
125
+ || text.includes('ship')
126
+ || text.includes('status'));
127
+ });
128
+ const total = completedRuns.length + finalRuntime.length + verifyGatePasses.length;
129
+ if (total === 0) {
130
+ return missing('No completed verify/ship/status or final-report evidence found.', '.scale/evidence + .scale/evidence/runtime + .scale/ai-os/runs');
131
+ }
132
+ return measured(true, '.scale/evidence + .scale/evidence/runtime + .scale/ai-os/runs', `${total} termination evidence item(s).`);
133
+ }
134
+ function summarizeRuntimeRecords(records) {
135
+ const passedKeys = new Set();
136
+ const failedCandidates = [];
137
+ let resolvedFailed = 0;
138
+ for (const record of records) {
139
+ const key = runtimeResolutionKey(record);
140
+ if (record.status === 'passed' && key) {
141
+ passedKeys.add(key);
142
+ continue;
143
+ }
144
+ if (record.status !== 'failed' || isExpectedRedEvidence(record))
145
+ continue;
146
+ if (isResolvedEvidence(record) || key && passedKeys.has(key)) {
147
+ resolvedFailed += 1;
148
+ continue;
149
+ }
150
+ failedCandidates.push(record);
151
+ }
152
+ return {
153
+ total: records.length,
154
+ failed: failedCandidates.length,
155
+ resolvedFailed,
156
+ };
157
+ }
158
+ function readGateEvidence(projectDir, scaleDir, lookbackDays, now) {
159
+ const dir = join(scaleDir, 'evidence');
160
+ if (!existsSync(dir))
161
+ return [];
162
+ return readdirSync(dir)
163
+ .filter(file => file.endsWith('.json'))
164
+ .map(file => readJson(join(dir, file)))
165
+ .filter((record) => Boolean(record?.gate))
166
+ .filter(record => withinLookback(record.createdAt, lookbackDays, now))
167
+ .filter(record => !isStaleSecurityFindingRecord(projectDir, record));
168
+ }
169
+ function readReviewEvidence(scaleDir, lookbackDays, now) {
170
+ const dir = join(scaleDir, 'reviews');
171
+ if (!existsSync(dir))
172
+ return [];
173
+ return readdirSync(dir)
174
+ .filter(file => file.endsWith('.json'))
175
+ .map(file => readJson(join(dir, file)))
176
+ .filter((record) => Boolean(record))
177
+ .filter(record => withinLookback(record.createdAt, lookbackDays, now));
178
+ }
179
+ function readRunReports(scaleDir) {
180
+ const dir = join(scaleDir, 'ai-os', 'runs');
181
+ if (!existsSync(dir))
182
+ return [];
183
+ return readdirSync(dir)
184
+ .filter(file => file.endsWith('.json'))
185
+ .map(file => readJson(join(dir, file)))
186
+ .filter((report) => Boolean(report?.plan));
187
+ }
188
+ function toolStrategyStepCount(report) {
189
+ const fromSummary = report.plan?.toolStrategy?.summary?.totalSteps;
190
+ if (typeof fromSummary === 'number' && Number.isFinite(fromSummary))
191
+ return fromSummary;
192
+ return report.plan?.toolStrategy?.nodes?.length ?? 0;
193
+ }
194
+ function skillStepCount(report) {
195
+ return report.plan?.skillPlan?.executionPlan?.steps?.length ?? 0;
196
+ }
197
+ function delegatedStepCount(report) {
198
+ const skillSteps = report.plan?.skillPlan?.executionPlan?.steps ?? [];
199
+ const strategyNodes = report.plan?.toolStrategy?.nodes ?? [];
200
+ const runSteps = report.steps ?? [];
201
+ return [
202
+ ...skillSteps.map(step => `${step.kind ?? ''} ${step.id ?? ''}`),
203
+ ...strategyNodes.map(step => `${step.kind ?? ''} ${step.id ?? ''}`),
204
+ ...runSteps.map(step => `${step.kind ?? ''} ${step.id ?? ''}`),
205
+ ].filter(value => {
206
+ const normalized = value.toLowerCase();
207
+ return normalized.includes('skill') || normalized.includes('agent') || normalized.includes('mcp') || normalized.includes('delegate');
208
+ }).length;
209
+ }
210
+ function isGuardrailGate(gate) {
211
+ const normalized = String(gate ?? '').toUpperCase();
212
+ return normalized === 'G7' || normalized === 'G11';
213
+ }
214
+ function latestGateEvidenceByGate(records) {
215
+ const latest = new Map();
216
+ for (const record of records) {
217
+ const gate = String(record.gate ?? '').toUpperCase();
218
+ const existing = latest.get(gate);
219
+ if (!existing || gateEvidenceTimestamp(record) >= gateEvidenceTimestamp(existing)) {
220
+ latest.set(gate, record);
221
+ }
222
+ }
223
+ return [...latest.values()];
224
+ }
225
+ function gateEvidenceTimestamp(record) {
226
+ return typeof record.createdAt === 'number' && Number.isFinite(record.createdAt) ? record.createdAt : 0;
227
+ }
228
+ function isPassedGateEvidence(record) {
229
+ return record.passed === true || String(record.status ?? '').toLowerCase() === 'passed';
230
+ }
231
+ function isReasoningGuardrail(gate) {
232
+ const normalized = String(gate ?? '').toLowerCase();
233
+ return normalized.includes('security')
234
+ || normalized.includes('boundary')
235
+ || normalized.includes('guardrail')
236
+ || normalized.includes('uncertainty')
237
+ || normalized.includes('release-readiness');
238
+ }
239
+ function isStaleSecurityFindingRecord(projectDir, record) {
240
+ const findings = (record.evidenceItems ?? []).filter(item => typeof item.label === 'string' &&
241
+ item.label.startsWith('Security finding ') &&
242
+ typeof item.path === 'string' &&
243
+ typeof item.detail === 'string');
244
+ if (findings.length === 0)
245
+ return false;
246
+ return findings.every(item => {
247
+ const path = item.path ?? '';
248
+ const evidence = extractSecurityEvidence(item.detail ?? '');
249
+ if (!evidence)
250
+ return false;
251
+ const filePath = resolve(projectDir, path);
252
+ if (!existsSync(filePath))
253
+ return true;
254
+ try {
255
+ return !readFileSync(filePath, 'utf-8').includes(evidence);
256
+ }
257
+ catch {
258
+ return true;
259
+ }
260
+ });
261
+ }
262
+ function extractSecurityEvidence(detail) {
263
+ const marker = '; ';
264
+ const index = detail.indexOf(marker);
265
+ if (index < 0)
266
+ return null;
267
+ const evidence = detail.slice(index + marker.length).trim();
268
+ return evidence.length > 0 ? evidence : null;
269
+ }
270
+ function buildRecommendations(metrics) {
271
+ const recommendations = [];
272
+ if (metrics.toolExecutionEvidence.evidence === 'missing') {
273
+ recommendations.push('Record command/tool/skill runtime evidence before claiming agent-loop execution ability.');
274
+ }
275
+ if (metrics.loopRecoveryRate.evidence === 'missing') {
276
+ recommendations.push('Run at least one guarded AI OS or runtime-evidence task so loop recovery can be measured.');
277
+ }
278
+ else if ((metrics.loopRecoveryRate.value ?? 1) < 1) {
279
+ recommendations.push('Resolve failed runtime evidence with matching passed evidence before promotion.');
280
+ }
281
+ if (metrics.guardrailCoverage.evidence === 'missing') {
282
+ recommendations.push('Record G7/G11 or AI OS evaluator guardrail evidence for boundary and security checks.');
283
+ }
284
+ else if ((metrics.guardrailCoverage.value ?? 1) < 1) {
285
+ recommendations.push('Inspect failed or blocked G7/G11 guardrail evidence and close boundary/security findings before release promotion.');
286
+ }
287
+ if (metrics.budgetControlEvidence.evidence === 'missing') {
288
+ recommendations.push('Use AI OS tool strategy evidence to prove bounded steps, cost, and fallback coverage.');
289
+ }
290
+ if (metrics.handoffOrDelegationEvidence.evidence === 'missing') {
291
+ recommendations.push('Record fresh-subagent, hybrid review, or delegated skill evidence for handoff/delegation coverage.');
292
+ }
293
+ if (metrics.terminationEvidence.evidence === 'missing') {
294
+ recommendations.push('Record verify/ship/status completion evidence so loops have a visible stop condition.');
295
+ }
296
+ return [...new Set(recommendations)];
297
+ }
298
+ function isReadyMetric(metric) {
299
+ if (metric.evidence === 'missing' || metric.value === null)
300
+ return false;
301
+ if (typeof metric.value === 'boolean')
302
+ return metric.value;
303
+ return Number(metric.value) >= 1;
304
+ }
305
+ function measured(value, source, note) {
306
+ return { value, evidence: 'measured', source, note };
307
+ }
308
+ function missing(note, source) {
309
+ return { value: null, evidence: 'missing', source, note };
310
+ }
311
+ function withinLookback(value, days, now) {
312
+ if (!value)
313
+ return false;
314
+ const timestamp = typeof value === 'number' ? value : Date.parse(value);
315
+ if (!Number.isFinite(timestamp))
316
+ return false;
317
+ return timestamp >= now.getTime() - days * 24 * 60 * 60 * 1000 && timestamp <= now.getTime() + 24 * 60 * 60 * 1000;
318
+ }
319
+ function resolveScaleDir(projectDir, scaleDir) {
320
+ return isAbsolute(scaleDir) ? scaleDir : resolve(projectDir, scaleDir);
321
+ }
322
+ function normalizeLookbackDays(value) {
323
+ const parsed = Number.parseInt(String(value ?? 30), 10);
324
+ if (!Number.isFinite(parsed) || parsed <= 0)
325
+ return 30;
326
+ return Math.min(parsed, 365);
327
+ }
328
+ function readJson(path) {
329
+ try {
330
+ return JSON.parse(readFileSync(path, 'utf-8'));
331
+ }
332
+ catch {
333
+ return null;
334
+ }
335
+ }
336
+ function isExpectedRedEvidence(record) {
337
+ const metadata = record.metadata ?? {};
338
+ return metadata.expectedRed === true || metadata.expectedFailure === true;
339
+ }
340
+ function isResolvedEvidence(record) {
341
+ const metadata = record.metadata ?? {};
342
+ return metadata.resolved === true || metadata.superseded === true || typeof metadata.resolvedBy === 'string';
343
+ }
344
+ function runtimeResolutionKey(record) {
345
+ const metadata = record.metadata ?? {};
346
+ const metadataKey = firstString(metadata.resolutionKey, metadata.stepId, metadata.gate, metadata.checkId, metadata.scenario, metadata.phase);
347
+ const itemKey = metadataKey ?? normalizeEvidenceKey(record.command) ?? normalizeEvidenceKey(record.title);
348
+ if (!itemKey)
349
+ return null;
350
+ return [
351
+ record.taskId ?? '',
352
+ record.sessionId ?? '',
353
+ record.kind,
354
+ itemKey,
355
+ ].join('\u001f');
356
+ }
357
+ function firstString(...values) {
358
+ for (const value of values) {
359
+ if (typeof value === 'string' && value.trim().length > 0)
360
+ return value.trim();
361
+ }
362
+ return undefined;
363
+ }
364
+ function normalizeEvidenceKey(value) {
365
+ const normalized = value?.trim().replace(/\s+/g, ' ').toLowerCase();
366
+ return normalized && normalized.length > 0 ? normalized : undefined;
367
+ }
368
+ function roundRatio(part, total) {
369
+ return total === 0 ? 0 : Number((part / total).toFixed(3));
370
+ }
371
+ //# sourceMappingURL=AgentLoopReadiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentLoopReadiness.js","sourceRoot":"","sources":["../../src/workflow/AgentLoopReadiness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { verifySetup, type SetupVerificationReport } from '../setup/SetupVerification.js';
2
+ import { inspectWorkflowSkills, type SkillDoctorReport } from '../skills/SkillDoctor.js';
3
+ import type { VerificationPolicy } from './VerificationProfile.js';
4
+ export type EcosystemReadinessGateMode = 'off' | 'warn' | 'block';
5
+ export type EcosystemReadinessSkillScope = 'required' | 'recommended' | 'all';
6
+ export interface EcosystemReadinessGateReport {
7
+ mode: EcosystemReadinessGateMode;
8
+ checked: boolean;
9
+ ok: boolean;
10
+ blocked: boolean;
11
+ packIds: string[];
12
+ summary: {
13
+ blockingIssues: string[];
14
+ warningCount: number;
15
+ installedTools: number;
16
+ totalTools: number;
17
+ missingTools: string[];
18
+ installedWorkflowSkills: number;
19
+ totalWorkflowSkills: number;
20
+ missingWorkflowSkills: string[];
21
+ missingRequiredWorkflowSkills: string[];
22
+ missingRecommendedWorkflowSkills: string[];
23
+ missingOptionalWorkflowSkills: string[];
24
+ blockingMissingWorkflowSkills: string[];
25
+ skillScope: EcosystemReadinessSkillScope;
26
+ };
27
+ setup?: SetupVerificationReport;
28
+ skillDoctor?: SkillDoctorReport;
29
+ warnings: string[];
30
+ recommendations: string[];
31
+ }
32
+ export interface EcosystemReadinessGateOptions {
33
+ projectDir: string;
34
+ scaleDir: string;
35
+ policy: VerificationPolicy;
36
+ checked?: boolean;
37
+ skipReason?: string;
38
+ deps?: {
39
+ verifySetup?: typeof verifySetup;
40
+ inspectWorkflowSkills?: typeof inspectWorkflowSkills;
41
+ };
42
+ }
43
+ export declare function evaluateEcosystemReadinessGate(options: EcosystemReadinessGateOptions): Promise<EcosystemReadinessGateReport>;
44
+ export declare function normalizeEcosystemReadinessGateMode(value: unknown): EcosystemReadinessGateMode;
45
+ export declare function normalizeEcosystemReadinessPacks(value: unknown): string[];
46
+ export declare function normalizeEcosystemReadinessSkillScope(value: unknown): EcosystemReadinessSkillScope;