@hongmaple0820/scale-engine 0.48.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 (242) hide show
  1. package/README.en.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/agents/evidenceDiscipline.d.ts +7 -0
  4. package/dist/agents/evidenceDiscipline.js +21 -0
  5. package/dist/agents/evidenceDiscipline.js.map +1 -0
  6. package/dist/agents/profiles.js +8 -1
  7. package/dist/agents/profiles.js.map +1 -1
  8. package/dist/agents/types.d.ts +1 -0
  9. package/dist/api/DashboardHttpConfig.d.ts +28 -0
  10. package/dist/api/DashboardHttpConfig.js +110 -0
  11. package/dist/api/DashboardHttpConfig.js.map +1 -0
  12. package/dist/api/cli.js +102 -11
  13. package/dist/api/cli.js.map +1 -1
  14. package/dist/api/http.d.ts +1 -0
  15. package/dist/api/http.js +50 -0
  16. package/dist/api/http.js.map +1 -0
  17. package/dist/artifact/types.d.ts +64 -0
  18. package/dist/artifact/types.js.map +1 -1
  19. package/dist/bootstrap/DependencyBootstrap.d.ts +1 -0
  20. package/dist/bootstrap/DependencyBootstrap.js +14 -3
  21. package/dist/bootstrap/DependencyBootstrap.js.map +1 -1
  22. package/dist/cli/cortexApplyCommand.d.ts +26 -0
  23. package/dist/cli/cortexApplyCommand.js +74 -0
  24. package/dist/cli/cortexApplyCommand.js.map +1 -0
  25. package/dist/cli/cortexCandidateCommands.d.ts +42 -0
  26. package/dist/cli/cortexCandidateCommands.js +119 -0
  27. package/dist/cli/cortexCandidateCommands.js.map +1 -0
  28. package/dist/cli/cortexCommands.d.ts +51 -0
  29. package/dist/cli/cortexCommands.js +127 -13
  30. package/dist/cli/cortexCommands.js.map +1 -1
  31. package/dist/cli/engineBootstrap.d.ts +1 -1
  32. package/dist/cli/engineBootstrap.js +2 -0
  33. package/dist/cli/engineBootstrap.js.map +1 -1
  34. package/dist/cli/evalCommands.js +13 -1
  35. package/dist/cli/evalCommands.js.map +1 -1
  36. package/dist/cli/phaseCommands.d.ts +81 -1
  37. package/dist/cli/phaseCommands.js +465 -31
  38. package/dist/cli/phaseCommands.js.map +1 -1
  39. package/dist/cli/runtimeSkillCommands.js +12 -2
  40. package/dist/cli/runtimeSkillCommands.js.map +1 -1
  41. package/dist/cli/shieldCommands.d.ts +1 -0
  42. package/dist/cli/shieldCommands.js +20 -7
  43. package/dist/cli/shieldCommands.js.map +1 -1
  44. package/dist/cli/workflowEvidenceCommands.d.ts +120 -0
  45. package/dist/cli/workflowEvidenceCommands.js +228 -2
  46. package/dist/cli/workflowEvidenceCommands.js.map +1 -1
  47. package/dist/cortex/AutoFixEventObservations.d.ts +11 -0
  48. package/dist/cortex/AutoFixEventObservations.js +72 -0
  49. package/dist/cortex/AutoFixEventObservations.js.map +1 -0
  50. package/dist/cortex/GateEvidenceObservations.d.ts +22 -0
  51. package/dist/cortex/GateEvidenceObservations.js +179 -0
  52. package/dist/cortex/GateEvidenceObservations.js.map +1 -0
  53. package/dist/cortex/GovernanceMetrics.d.ts +2 -0
  54. package/dist/cortex/GovernanceMetrics.js +112 -22
  55. package/dist/cortex/GovernanceMetrics.js.map +1 -1
  56. package/dist/cortex/InstinctApplicationRecorder.d.ts +28 -0
  57. package/dist/cortex/InstinctApplicationRecorder.js +145 -0
  58. package/dist/cortex/InstinctApplicationRecorder.js.map +1 -0
  59. package/dist/cortex/InstinctCandidateAudit.d.ts +3 -0
  60. package/dist/cortex/InstinctCandidateAudit.js +39 -0
  61. package/dist/cortex/InstinctCandidateAudit.js.map +1 -0
  62. package/dist/cortex/InstinctCandidateReview.d.ts +32 -0
  63. package/dist/cortex/InstinctCandidateReview.js +125 -0
  64. package/dist/cortex/InstinctCandidateReview.js.map +1 -0
  65. package/dist/cortex/InstinctExtractor.d.ts +1 -0
  66. package/dist/cortex/InstinctExtractor.js +24 -17
  67. package/dist/cortex/InstinctExtractor.js.map +1 -1
  68. package/dist/cortex/InstinctRuntimeEvidence.d.ts +14 -0
  69. package/dist/cortex/InstinctRuntimeEvidence.js +120 -0
  70. package/dist/cortex/InstinctRuntimeEvidence.js.map +1 -0
  71. package/dist/cortex/InstinctStore.d.ts +50 -4
  72. package/dist/cortex/InstinctStore.js +262 -48
  73. package/dist/cortex/InstinctStore.js.map +1 -1
  74. package/dist/cortex/InstinctValidation.d.ts +9 -0
  75. package/dist/cortex/InstinctValidation.js +55 -0
  76. package/dist/cortex/InstinctValidation.js.map +1 -0
  77. package/dist/cortex/SessionInjector.d.ts +1 -0
  78. package/dist/cortex/SessionInjector.js +28 -8
  79. package/dist/cortex/SessionInjector.js.map +1 -1
  80. package/dist/dashboard/DashboardServer.d.ts +79 -0
  81. package/dist/dashboard/DashboardServer.js +330 -6
  82. package/dist/dashboard/DashboardServer.js.map +1 -1
  83. package/dist/dashboard/spa/app.js +515 -0
  84. package/dist/dashboard/spa/components/DataTable.js +53 -0
  85. package/dist/dashboard/spa/components/EventStream.js +66 -0
  86. package/dist/dashboard/spa/components/LoadingState.js +39 -0
  87. package/dist/dashboard/spa/components/MetricCard.js +30 -0
  88. package/dist/dashboard/spa/components/Panel.js +27 -0
  89. package/dist/dashboard/spa/components/StatusBadge.js +51 -0
  90. package/dist/dashboard/spa/i18n.js +767 -0
  91. package/dist/dashboard/spa/index.html +463 -0
  92. package/dist/dashboard/spa/pages/costs.js +522 -0
  93. package/dist/dashboard/spa/pages/documents.js +540 -0
  94. package/dist/dashboard/spa/pages/knowledge.js +457 -0
  95. package/dist/dashboard/spa/pages/monitoring.js +361 -0
  96. package/dist/dashboard/spa/pages/overview.js +301 -0
  97. package/dist/dashboard/spa/pages/topology-renderers.js +251 -0
  98. package/dist/dashboard/spa/pages/topology.js +370 -0
  99. package/dist/dashboard/spa/pages/workflow-renderers.js +239 -0
  100. package/dist/dashboard/spa/pages/workflow.js +217 -0
  101. package/dist/env/EnvironmentDoctor.js +12 -7
  102. package/dist/env/EnvironmentDoctor.js.map +1 -1
  103. package/dist/eval/BenchmarkPublisher.d.ts +2 -0
  104. package/dist/eval/BenchmarkPublisher.js +43 -0
  105. package/dist/eval/BenchmarkPublisher.js.map +1 -1
  106. package/dist/eval/WorkflowEval.d.ts +9 -0
  107. package/dist/eval/WorkflowEval.js +348 -2
  108. package/dist/eval/WorkflowEval.js.map +1 -1
  109. package/dist/guardrails/ast/confirmers.d.ts +18 -0
  110. package/dist/guardrails/ast/confirmers.js +69 -0
  111. package/dist/guardrails/ast/confirmers.js.map +1 -0
  112. package/dist/guardrails/ast/parse.d.ts +20 -0
  113. package/dist/guardrails/ast/parse.js +51 -0
  114. package/dist/guardrails/ast/parse.js.map +1 -0
  115. package/dist/memory/MemoryBrain.d.ts +13 -0
  116. package/dist/memory/MemoryBrain.js +47 -0
  117. package/dist/memory/MemoryBrain.js.map +1 -1
  118. package/dist/memory/MemoryFabric.d.ts +1 -0
  119. package/dist/memory/MemoryFabric.js +12 -8
  120. package/dist/memory/MemoryFabric.js.map +1 -1
  121. package/dist/memory/MemoryLearning.d.ts +1 -0
  122. package/dist/memory/MemoryLearning.js +6 -3
  123. package/dist/memory/MemoryLearning.js.map +1 -1
  124. package/dist/memory/MemoryProviders.d.ts +8 -1
  125. package/dist/memory/MemoryProviders.js +143 -29
  126. package/dist/memory/MemoryProviders.js.map +1 -1
  127. package/dist/output/HTMLDocumentRenderer.d.ts +9 -0
  128. package/dist/output/HTMLDocumentRenderer.js +19 -0
  129. package/dist/output/HTMLDocumentRenderer.js.map +1 -1
  130. package/dist/review/FreshContextVerifier.d.ts +35 -0
  131. package/dist/review/FreshContextVerifier.js +120 -0
  132. package/dist/review/FreshContextVerifier.js.map +1 -0
  133. package/dist/review/JsonLlmClient.d.ts +37 -0
  134. package/dist/review/JsonLlmClient.js +94 -0
  135. package/dist/review/JsonLlmClient.js.map +1 -0
  136. package/dist/review/LlmJudge.d.ts +61 -0
  137. package/dist/review/LlmJudge.js +167 -0
  138. package/dist/review/LlmJudge.js.map +1 -0
  139. package/dist/runtime/AiOsRuntime.d.ts +14 -1
  140. package/dist/runtime/AiOsRuntime.js +59 -3
  141. package/dist/runtime/AiOsRuntime.js.map +1 -1
  142. package/dist/runtime/RuntimeDoctor.js +3 -1
  143. package/dist/runtime/RuntimeDoctor.js.map +1 -1
  144. package/dist/runtime/RuntimeEvidenceLedger.d.ts +6 -0
  145. package/dist/runtime/RuntimeEvidenceLedger.js +52 -1
  146. package/dist/runtime/RuntimeEvidenceLedger.js.map +1 -1
  147. package/dist/runtime/SessionLedger.d.ts +2 -0
  148. package/dist/runtime/SessionLedger.js +4 -0
  149. package/dist/runtime/SessionLedger.js.map +1 -1
  150. package/dist/setup/SetupVerification.js +53 -5
  151. package/dist/setup/SetupVerification.js.map +1 -1
  152. package/dist/shield/PolicyCompiler.js +73 -12
  153. package/dist/shield/PolicyCompiler.js.map +1 -1
  154. package/dist/shield/ProtectedPaths.js +4 -2
  155. package/dist/shield/ProtectedPaths.js.map +1 -1
  156. package/dist/skills/SkillCatalog.d.ts +2 -0
  157. package/dist/skills/SkillCatalog.js +8 -0
  158. package/dist/skills/SkillCatalog.js.map +1 -1
  159. package/dist/skills/SkillDoctor.d.ts +19 -2
  160. package/dist/skills/SkillDoctor.js +163 -13
  161. package/dist/skills/SkillDoctor.js.map +1 -1
  162. package/dist/tools/SafeCommandRunner.d.ts +1 -0
  163. package/dist/tools/SafeCommandRunner.js +1 -0
  164. package/dist/tools/SafeCommandRunner.js.map +1 -1
  165. package/dist/tools/ToolCapabilityRegistry.js +25 -3
  166. package/dist/tools/ToolCapabilityRegistry.js.map +1 -1
  167. package/dist/tools/ToolOrchestrator.js +21 -0
  168. package/dist/tools/ToolOrchestrator.js.map +1 -1
  169. package/dist/version.d.ts +1 -1
  170. package/dist/version.js +1 -1
  171. package/dist/workflow/AgentLoopReadiness.d.ts +103 -0
  172. package/dist/workflow/AgentLoopReadiness.js +371 -0
  173. package/dist/workflow/AgentLoopReadiness.js.map +1 -0
  174. package/dist/workflow/BoundaryEnforcement.d.ts +60 -0
  175. package/dist/workflow/BoundaryEnforcement.js +182 -0
  176. package/dist/workflow/BoundaryEnforcement.js.map +1 -0
  177. package/dist/workflow/EcosystemReadinessGate.d.ts +46 -0
  178. package/dist/workflow/EcosystemReadinessGate.js +126 -0
  179. package/dist/workflow/EcosystemReadinessGate.js.map +1 -0
  180. package/dist/workflow/EngineeringStandards.js +67 -12
  181. package/dist/workflow/EngineeringStandards.js.map +1 -1
  182. package/dist/workflow/GateCatalog.js +21 -2
  183. package/dist/workflow/GateCatalog.js.map +1 -1
  184. package/dist/workflow/GovernanceTemplatePacks.js +2 -26
  185. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -1
  186. package/dist/workflow/GovernanceTemplates.js +8 -1
  187. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  188. package/dist/workflow/ProfileEnforcement.d.ts +7 -0
  189. package/dist/workflow/ProfileEnforcement.js +12 -0
  190. package/dist/workflow/ProfileEnforcement.js.map +1 -0
  191. package/dist/workflow/ReleaseDeploymentLedger.d.ts +63 -0
  192. package/dist/workflow/ReleaseDeploymentLedger.js +154 -0
  193. package/dist/workflow/ReleaseDeploymentLedger.js.map +1 -0
  194. package/dist/workflow/ReviewAnalyzer.js +50 -3
  195. package/dist/workflow/ReviewAnalyzer.js.map +1 -1
  196. package/dist/workflow/ReviewStore.d.ts +10 -0
  197. package/dist/workflow/ReviewStore.js.map +1 -1
  198. package/dist/workflow/SessionPreamble.d.ts +7 -0
  199. package/dist/workflow/SessionPreamble.js +48 -9
  200. package/dist/workflow/SessionPreamble.js.map +1 -1
  201. package/dist/workflow/SurfaceCoverage.d.ts +19 -0
  202. package/dist/workflow/SurfaceCoverage.js +57 -0
  203. package/dist/workflow/SurfaceCoverage.js.map +1 -0
  204. package/dist/workflow/VerificationCommands.d.ts +1 -0
  205. package/dist/workflow/VerificationCommands.js.map +1 -1
  206. package/dist/workflow/VerificationProfile.d.ts +5 -0
  207. package/dist/workflow/VerificationProfile.js +26 -0
  208. package/dist/workflow/VerificationProfile.js.map +1 -1
  209. package/dist/workflow/VerificationSchema.d.ts +3 -0
  210. package/dist/workflow/VerificationSchema.js +6 -0
  211. package/dist/workflow/VerificationSchema.js.map +1 -1
  212. package/dist/workflow/WorkflowEffectiveness.d.ts +97 -0
  213. package/dist/workflow/WorkflowEffectiveness.js +302 -0
  214. package/dist/workflow/WorkflowEffectiveness.js.map +1 -0
  215. package/dist/workflow/WorkflowEffectivenessRenderer.d.ts +2 -0
  216. package/dist/workflow/WorkflowEffectivenessRenderer.js +67 -0
  217. package/dist/workflow/WorkflowEffectivenessRenderer.js.map +1 -0
  218. package/dist/workflow/WorkflowEffectivenessScoring.d.ts +6 -0
  219. package/dist/workflow/WorkflowEffectivenessScoring.js +243 -0
  220. package/dist/workflow/WorkflowEffectivenessScoring.js.map +1 -0
  221. package/dist/workflow/gates/EnhancedGates.js +2 -0
  222. package/dist/workflow/gates/EnhancedGates.js.map +1 -1
  223. package/dist/workflow/gates/GateSystem.d.ts +16 -0
  224. package/dist/workflow/gates/GateSystem.js +208 -41
  225. package/dist/workflow/gates/GateSystem.js.map +1 -1
  226. package/dist/workflow/gates/MetaGovernanceGates.js +269 -8
  227. package/dist/workflow/gates/MetaGovernanceGates.js.map +1 -1
  228. package/dist/workflow/gates/TestIntegrityGate.d.ts +51 -0
  229. package/dist/workflow/gates/TestIntegrityGate.js +175 -0
  230. package/dist/workflow/gates/TestIntegrityGate.js.map +1 -0
  231. package/dist/workflow/types.d.ts +1 -1
  232. package/docs/guides/DEVELOPMENT_WORKFLOW.md +28 -0
  233. package/docs/reference/cli.md +2 -1
  234. package/docs/start/agent-governance-demo.md +1 -1
  235. package/docs/workflow/E2E_EXAMPLE.md +133 -0
  236. package/docs/workflow/README.md +7 -1
  237. package/docs/workflow/TEMPLATE_GUIDE.md +162 -0
  238. package/docs/workflow/templates/github-actions-scale-preflight.yml +4 -1
  239. package/docs/workflow/templates/plan.md +26 -0
  240. package/docs/workflow/templates/spec.md +28 -0
  241. package/package.json +7 -3
  242. package/scripts/workflow/run-vitest.mjs +123 -0
@@ -1 +1 @@
1
- {"version":3,"file":"SessionInjector.js","sourceRoot":"","sources":["../../src/cortex/SessionInjector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionInjector.js","sourceRoot":"","sources":["../../src/cortex/SessionInjector.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ import type { IArtifactStore } from '../artifact/store.js';
8
8
  import type { IFSM } from '../artifact/fsm.js';
9
9
  import type { IEvolutionEvaluator, EvolutionMetrics } from '../evolution/EvolutionEvaluator.js';
10
10
  import type { DetectorStatisticsTracker } from '../guardrails/DetectorEnhanced.js';
11
+ import { type MemoryNode } from '../memory/MemoryBrain.js';
12
+ import { type MemoryProviderRecallReport, type MemoryProviderStatusReport } from '../memory/MemoryProviders.js';
11
13
  import { type TopologyGraph } from '../codegraph/CodeIntelligence.js';
12
14
  export interface DashboardState {
13
15
  artifacts: ArtifactTreeNode[];
@@ -58,6 +60,69 @@ export interface RecentEvent {
58
60
  artifactId?: string;
59
61
  data?: Record<string, unknown>;
60
62
  }
63
+ export interface DashboardProjectSummary {
64
+ id: string;
65
+ name: string;
66
+ projectDir: string;
67
+ scaleDir: string;
68
+ url?: string;
69
+ current?: boolean;
70
+ }
71
+ export interface DashboardKnowledgeReport {
72
+ project: DashboardProjectSummary;
73
+ local: {
74
+ available: boolean;
75
+ total: number;
76
+ byStatus: Record<string, number>;
77
+ nodes: MemoryNode[];
78
+ };
79
+ providers?: MemoryProviderStatusReport;
80
+ recall?: MemoryProviderRecallReport;
81
+ warnings: string[];
82
+ }
83
+ export interface DashboardProjectsSummaryReport {
84
+ generatedAt: number;
85
+ sinceDays: number;
86
+ currentProjectId: string;
87
+ totals: {
88
+ projects: number;
89
+ readyProjects: number;
90
+ warningProjects: number;
91
+ missingProjects: number;
92
+ documents: number;
93
+ localMemoryNodes: number;
94
+ activeMemoryNodes: number;
95
+ commandRuns: number;
96
+ failedCommandRuns: number;
97
+ gateFailures: number;
98
+ };
99
+ projects: DashboardProjectOverview[];
100
+ warnings: string[];
101
+ }
102
+ export interface DashboardProjectOverview {
103
+ project: DashboardProjectSummary;
104
+ health: 'ready' | 'warning' | 'missing';
105
+ scaleDirExists: boolean;
106
+ documents: {
107
+ total: number;
108
+ byType: Record<string, number>;
109
+ };
110
+ knowledge: {
111
+ available: boolean;
112
+ total: number;
113
+ active: number;
114
+ };
115
+ metrics: {
116
+ available: boolean;
117
+ commandRuns: number;
118
+ failedCommandRuns: number;
119
+ commandPassRate: number;
120
+ gateFailures: number;
121
+ recentTasks: number;
122
+ recentFirstPassRate: number;
123
+ };
124
+ warnings: string[];
125
+ }
61
126
  export interface DashboardOptions {
62
127
  port?: number;
63
128
  host?: string;
@@ -68,6 +133,10 @@ export interface DashboardOptions {
68
133
  bus?: EventBus;
69
134
  projectDir?: string;
70
135
  scaleDir?: string;
136
+ projectName?: string;
137
+ projectUrl?: string;
138
+ currentProjectId?: string;
139
+ projects?: DashboardProjectSummary[];
71
140
  }
72
141
  export declare class DashboardServer {
73
142
  private app;
@@ -80,6 +149,8 @@ export declare class DashboardServer {
80
149
  private host;
81
150
  private projectDir;
82
151
  private scaleDir;
152
+ private currentProject;
153
+ private projects;
83
154
  private server;
84
155
  constructor(options?: DashboardOptions);
85
156
  private setupMiddleware;
@@ -87,6 +158,7 @@ export declare class DashboardServer {
87
158
  private setupAPI;
88
159
  private setupSSE;
89
160
  private setupWriteOps;
161
+ private recordMemoryReviewEvidence;
90
162
  getDashboardState(): Promise<DashboardState>;
91
163
  getArtifactTree(): Promise<ArtifactTreeNode[]>;
92
164
  getEvolutionMetrics(): Promise<EvolutionMetrics | null>;
@@ -94,8 +166,15 @@ export declare class DashboardServer {
94
166
  getAutoDefectStats(): Promise<AutoDefectSummary | null>;
95
167
  getRecentEvents(limit: number): Promise<RecentEvent[]>;
96
168
  getTopology(): TopologyGraph;
169
+ private getProjectsSummary;
170
+ private getProjectOverview;
171
+ private getGovernanceMetricSummary;
172
+ private getLocalKnowledgeSummary;
97
173
  private listDocuments;
174
+ private listDocumentsFor;
98
175
  private serveDocument;
176
+ private getKnowledgeReport;
177
+ private getLocalKnowledge;
99
178
  start(): Promise<void>;
100
179
  stop(): void;
101
180
  /** Get the underlying Hono app (for testing or embedding) */
@@ -6,15 +6,19 @@ import { Hono } from 'hono';
6
6
  import { cors } from 'hono/cors';
7
7
  import { streamSSE } from 'hono/streaming';
8
8
  import { readFileSync, existsSync, readdirSync, statSync } from 'node:fs';
9
- import { join, dirname, extname } from 'node:path';
9
+ import { basename, join, dirname, extname, resolve } from 'node:path';
10
10
  import { fileURLToPath } from 'node:url';
11
+ import { MemoryBrain } from '../memory/MemoryBrain.js';
12
+ import { inspectMemoryProviders, recallMemoryProviders, } from '../memory/MemoryProviders.js';
11
13
  import { dumpCodeGraphData } from '../codegraph/CodeIntelligence.js';
12
14
  import { classifyLayers } from '../topology/LayerClassifier.js';
13
15
  import { mapDomains } from '../topology/DomainMapper.js';
14
16
  import { generateTour } from '../topology/TourGenerator.js';
15
17
  import { aggregateGovernanceMetrics } from './MetricsAggregator.js';
16
18
  import { logger } from '../core/logger.js';
19
+ import { RuntimeEvidenceLedger } from '../runtime/RuntimeEvidenceLedger.js';
17
20
  const __dirname = dirname(fileURLToPath(import.meta.url));
21
+ const MEMORY_REVIEW_ACTIONS = ['approve', 'reject', 'stale', 'restore'];
18
22
  // ── Dashboard Server ─────────────────────────────────────────────────────
19
23
  export class DashboardServer {
20
24
  constructor(options = {}) {
@@ -27,8 +31,17 @@ export class DashboardServer {
27
31
  this.detectorTracker = options.detectorTracker ?? null;
28
32
  this.port = options.port ?? 3210;
29
33
  this.host = options.host ?? '0.0.0.0';
30
- this.projectDir = options.projectDir ?? process.cwd();
31
- this.scaleDir = options.scaleDir ?? join(this.projectDir, '.scale');
34
+ this.projectDir = resolve(options.projectDir ?? process.cwd());
35
+ this.scaleDir = resolve(options.scaleDir ?? join(this.projectDir, '.scale'));
36
+ this.currentProject = normalizeProjectSummary({
37
+ id: options.currentProjectId,
38
+ name: options.projectName,
39
+ projectDir: this.projectDir,
40
+ scaleDir: this.scaleDir,
41
+ url: options.projectUrl,
42
+ current: true,
43
+ });
44
+ this.projects = normalizeProjectList(options.projects, this.currentProject);
32
45
  this.setupMiddleware();
33
46
  this.setupSPA();
34
47
  this.setupAPI();
@@ -70,6 +83,10 @@ export class DashboardServer {
70
83
  });
71
84
  // Root redirect to SPA
72
85
  this.app.get('/', (c) => c.redirect('/spa/'));
86
+ this.app.get('/favicon.ico', () => new Response(null, {
87
+ status: 204,
88
+ headers: { 'Cache-Control': 'public, max-age=86400' },
89
+ }));
73
90
  // Legacy views (backward compat)
74
91
  const distViews = join(__dirname, 'views');
75
92
  const srcViews = join(__dirname, '..', '..', 'src', 'dashboard', 'views');
@@ -100,6 +117,14 @@ export class DashboardServer {
100
117
  }
101
118
  // ── API Routes ───────────────────────────────────────────────────────
102
119
  setupAPI() {
120
+ // Project metadata for multi-project dashboard launchers
121
+ this.app.get('/api/project', (c) => c.json(this.currentProject));
122
+ this.app.get('/api/projects', (c) => c.json(this.projects));
123
+ this.app.get('/api/projects/summary', (c) => {
124
+ const sinceDays = parsePositiveInt(c.req.query('days'), 7);
125
+ const limit = parsePositiveInt(c.req.query('limit'), 100);
126
+ return c.json(this.getProjectsSummary(sinceDays, limit));
127
+ });
103
128
  // Full dashboard state
104
129
  this.app.get('/api/state', async (c) => c.json(await this.getDashboardState()));
105
130
  // Artifact tree
@@ -147,6 +172,15 @@ export class DashboardServer {
147
172
  const docPath = c.req.path.replace('/api/documents/', '');
148
173
  return this.serveDocument(docPath, c);
149
174
  });
175
+ // Memory/knowledge view. Provider recall is explicit to keep page load cheap.
176
+ this.app.get('/api/knowledge', async (c) => {
177
+ const query = (c.req.query('query') ?? '').trim();
178
+ const limit = parsePositiveInt(c.req.query('limit'), 20);
179
+ const includeProviders = c.req.query('providers') !== 'false';
180
+ const runRecall = c.req.query('recall') === '1' || c.req.query('recall') === 'true';
181
+ const provider = c.req.query('provider')?.trim() || undefined;
182
+ return c.json(await this.getKnowledgeReport({ query, limit, includeProviders, runRecall, provider }));
183
+ });
150
184
  // Available FSM actions for artifact
151
185
  this.app.get('/api/artifacts/:id/actions', async (c) => {
152
186
  if (!this.fsm)
@@ -294,8 +328,79 @@ export class DashboardServer {
294
328
  return c.json({ error: e instanceof Error ? e.message : String(e) }, 500);
295
329
  }
296
330
  });
331
+ this.app.post('/api/knowledge/local/:id/review', async (c) => {
332
+ const id = c.req.param('id');
333
+ const body = await c.req.json().catch(() => ({}));
334
+ const action = normalizeMemoryReviewAction(body.action);
335
+ if (!action) {
336
+ return c.json({
337
+ error: 'Invalid memory review action',
338
+ allowedActions: MEMORY_REVIEW_ACTIONS,
339
+ }, 400);
340
+ }
341
+ let brain = null;
342
+ try {
343
+ brain = new MemoryBrain({ projectDir: this.projectDir, scaleDir: this.scaleDir });
344
+ const report = brain.review(id, action, {
345
+ reason: body.reason ?? `Dashboard memory review: ${action}`,
346
+ actor: 'dashboard',
347
+ });
348
+ if (!report.ok || !report.node) {
349
+ return c.json({
350
+ error: report.warnings[0] ?? 'Memory review transition blocked',
351
+ warnings: report.warnings,
352
+ action,
353
+ previousStatus: report.previousStatus,
354
+ node: report.node,
355
+ }, report.node ? 422 : 404);
356
+ }
357
+ const evidence = this.recordMemoryReviewEvidence({
358
+ action,
359
+ node: report.node,
360
+ previousStatus: report.previousStatus,
361
+ reason: body.reason,
362
+ });
363
+ return c.json({
364
+ success: true,
365
+ action,
366
+ previousStatus: report.previousStatus,
367
+ node: report.node,
368
+ warnings: report.warnings,
369
+ evidence,
370
+ });
371
+ }
372
+ catch (e) {
373
+ return c.json({ error: e instanceof Error ? e.message : String(e) }, 500);
374
+ }
375
+ finally {
376
+ brain?.close();
377
+ }
378
+ });
297
379
  }
298
380
  // ── Data Collection ──────────────────────────────────────────────────
381
+ recordMemoryReviewEvidence(input) {
382
+ const ledger = new RuntimeEvidenceLedger({
383
+ projectDir: this.projectDir,
384
+ scaleDir: this.scaleDir,
385
+ });
386
+ return ledger.record({
387
+ taskId: 'dashboard-memory-review',
388
+ kind: 'manual',
389
+ status: 'passed',
390
+ title: `Dashboard memory review: ${input.action} ${input.node.id}`,
391
+ summary: `Memory node ${input.node.id} transitioned from ${input.previousStatus ?? 'unknown'} to ${input.node.status}.`,
392
+ artifacts: ['.scale/memory/brain.sqlite', ...input.node.evidencePaths],
393
+ metadata: {
394
+ action: input.action,
395
+ nodeId: input.node.id,
396
+ previousStatus: input.previousStatus,
397
+ nextStatus: input.node.status,
398
+ reason: input.reason,
399
+ source: 'dashboard',
400
+ resolutionKey: `memory-review:${input.node.id}`,
401
+ },
402
+ });
403
+ }
299
404
  async getDashboardState() {
300
405
  const [artifacts, evolutionMetrics, detectorStats, autoDefectStats, recentEvents] = await Promise.all([
301
406
  this.getArtifactTree(),
@@ -382,7 +487,112 @@ export class DashboardServer {
382
487
  const raw = dumpCodeGraphData({ projectDir: this.projectDir });
383
488
  return classifyLayers(raw);
384
489
  }
490
+ getProjectsSummary(sinceDays, limit) {
491
+ const projects = this.projects.slice(0, limit).map(project => this.getProjectOverview(project, sinceDays));
492
+ const warnings = projects.flatMap(project => project.warnings.map(warning => `${project.project.name}: ${warning}`));
493
+ return {
494
+ generatedAt: Date.now(),
495
+ sinceDays,
496
+ currentProjectId: this.currentProject.id,
497
+ totals: {
498
+ projects: projects.length,
499
+ readyProjects: projects.filter(project => project.health === 'ready').length,
500
+ warningProjects: projects.filter(project => project.health === 'warning').length,
501
+ missingProjects: projects.filter(project => project.health === 'missing').length,
502
+ documents: sum(projects, project => project.documents.total),
503
+ localMemoryNodes: sum(projects, project => project.knowledge.total),
504
+ activeMemoryNodes: sum(projects, project => project.knowledge.active),
505
+ commandRuns: sum(projects, project => project.metrics.commandRuns),
506
+ failedCommandRuns: sum(projects, project => project.metrics.failedCommandRuns),
507
+ gateFailures: sum(projects, project => project.metrics.gateFailures),
508
+ },
509
+ projects,
510
+ warnings,
511
+ };
512
+ }
513
+ getProjectOverview(project, sinceDays) {
514
+ const warnings = [];
515
+ const scaleDirExists = existsSync(project.scaleDir);
516
+ if (!scaleDirExists)
517
+ warnings.push('.scale directory is missing');
518
+ const documents = this.listDocumentsFor(project.projectDir, project.scaleDir);
519
+ const knowledge = this.getLocalKnowledgeSummary(project, warnings);
520
+ const metrics = this.getGovernanceMetricSummary(project, sinceDays, warnings);
521
+ const health = !scaleDirExists
522
+ ? 'missing'
523
+ : warnings.length > 0
524
+ ? 'warning'
525
+ : 'ready';
526
+ return {
527
+ project,
528
+ health,
529
+ scaleDirExists,
530
+ documents: {
531
+ total: documents.length,
532
+ byType: countBy(documents, document => document.type),
533
+ },
534
+ knowledge,
535
+ metrics,
536
+ warnings,
537
+ };
538
+ }
539
+ getGovernanceMetricSummary(project, sinceDays, warnings) {
540
+ try {
541
+ const metrics = aggregateGovernanceMetrics({
542
+ projectDir: project.projectDir,
543
+ scaleDir: project.scaleDir,
544
+ sinceDays,
545
+ });
546
+ const commandRuns = metrics.commandRuns.total;
547
+ return {
548
+ available: true,
549
+ commandRuns,
550
+ failedCommandRuns: metrics.commandRuns.failed,
551
+ commandPassRate: commandRuns > 0 ? metrics.commandRuns.passed / commandRuns : 0,
552
+ gateFailures: metrics.gateFailures.failed,
553
+ recentTasks: metrics.taskMetrics.recentTasks,
554
+ recentFirstPassRate: metrics.taskMetrics.recentFirstPassRate,
555
+ };
556
+ }
557
+ catch (error) {
558
+ warnings.push(`governance metrics failed: ${error instanceof Error ? error.message : String(error)}`);
559
+ return {
560
+ available: false,
561
+ commandRuns: 0,
562
+ failedCommandRuns: 0,
563
+ commandPassRate: 0,
564
+ gateFailures: 0,
565
+ recentTasks: 0,
566
+ recentFirstPassRate: 0,
567
+ };
568
+ }
569
+ }
570
+ getLocalKnowledgeSummary(project, warnings) {
571
+ const dbPath = join(project.scaleDir, 'memory', 'brain.sqlite');
572
+ if (!existsSync(dbPath))
573
+ return { available: false, total: 0, active: 0 };
574
+ let brain = null;
575
+ try {
576
+ brain = new MemoryBrain({ projectDir: project.projectDir, scaleDir: project.scaleDir });
577
+ const nodes = brain.list();
578
+ return {
579
+ available: true,
580
+ total: nodes.length,
581
+ active: nodes.filter(node => node.status === 'active').length,
582
+ };
583
+ }
584
+ catch (error) {
585
+ warnings.push(`local memory brain failed: ${error instanceof Error ? error.message : String(error)}`);
586
+ return { available: false, total: 0, active: 0 };
587
+ }
588
+ finally {
589
+ brain?.close();
590
+ }
591
+ }
385
592
  listDocuments() {
593
+ return this.listDocumentsFor(this.projectDir, this.scaleDir);
594
+ }
595
+ listDocumentsFor(projectDir, scaleDir) {
386
596
  const docs = [];
387
597
  const scanDir = (dir, prefix) => {
388
598
  if (!existsSync(dir))
@@ -400,9 +610,9 @@ export class DashboardServer {
400
610
  }
401
611
  };
402
612
  // Scan common doc locations
403
- scanDir(join(this.scaleDir, 'docs'), '.scale/docs');
404
- scanDir(join(this.scaleDir, 'artifacts'), '.scale/artifacts');
405
- scanDir(join(this.projectDir, 'docs'), 'docs');
613
+ scanDir(join(scaleDir, 'docs'), '.scale/docs');
614
+ scanDir(join(scaleDir, 'artifacts'), '.scale/artifacts');
615
+ scanDir(join(projectDir, 'docs'), 'docs');
406
616
  return docs;
407
617
  }
408
618
  serveDocument(docPath, c) {
@@ -422,6 +632,62 @@ export class DashboardServer {
422
632
  }
423
633
  return c.json({ error: 'Document not found' }, 404);
424
634
  }
635
+ async getKnowledgeReport(options) {
636
+ const warnings = [];
637
+ const local = this.getLocalKnowledge(options.query, options.limit, warnings);
638
+ let providers;
639
+ let recall;
640
+ if (options.includeProviders) {
641
+ try {
642
+ providers = inspectMemoryProviders({ projectDir: this.projectDir, scaleDir: this.scaleDir });
643
+ }
644
+ catch (error) {
645
+ warnings.push(`memory provider status failed: ${error instanceof Error ? error.message : String(error)}`);
646
+ }
647
+ }
648
+ if (options.runRecall && options.query.length > 0) {
649
+ try {
650
+ recall = await recallMemoryProviders({
651
+ projectDir: this.projectDir,
652
+ scaleDir: this.scaleDir,
653
+ query: options.query,
654
+ limit: options.limit,
655
+ includeCandidates: true,
656
+ provider: options.provider,
657
+ });
658
+ }
659
+ catch (error) {
660
+ warnings.push(`memory provider recall failed: ${error instanceof Error ? error.message : String(error)}`);
661
+ }
662
+ }
663
+ return { project: this.currentProject, local, providers, recall, warnings };
664
+ }
665
+ getLocalKnowledge(query, limit, warnings) {
666
+ const dbPath = join(this.scaleDir, 'memory', 'brain.sqlite');
667
+ if (!existsSync(dbPath))
668
+ return { available: false, total: 0, byStatus: {}, nodes: [] };
669
+ let brain = null;
670
+ try {
671
+ brain = new MemoryBrain({ projectDir: this.projectDir, scaleDir: this.scaleDir });
672
+ const allNodes = brain.list();
673
+ const nodes = query
674
+ ? brain.query(query, { limit }).nodes
675
+ : allNodes.slice(0, limit);
676
+ return {
677
+ available: true,
678
+ total: allNodes.length,
679
+ byStatus: countBy(allNodes, node => node.status),
680
+ nodes,
681
+ };
682
+ }
683
+ catch (error) {
684
+ warnings.push(`local memory brain failed: ${error instanceof Error ? error.message : String(error)}`);
685
+ return { available: false, total: 0, byStatus: {}, nodes: [] };
686
+ }
687
+ finally {
688
+ brain?.close();
689
+ }
690
+ }
425
691
  // ── Lifecycle ────────────────────────────────────────────────────────
426
692
  async start() {
427
693
  try {
@@ -456,4 +722,62 @@ export class DashboardServer {
456
722
  return this.app;
457
723
  }
458
724
  }
725
+ function normalizeProjectSummary(input) {
726
+ const projectDir = resolve(input.projectDir);
727
+ const scaleDir = resolve(input.scaleDir);
728
+ const name = input.name?.trim() || basename(projectDir) || 'project';
729
+ return {
730
+ id: input.id?.trim() || safeProjectId(name),
731
+ name,
732
+ projectDir,
733
+ scaleDir,
734
+ url: input.url,
735
+ current: input.current,
736
+ };
737
+ }
738
+ function normalizeProjectList(projects, currentProject) {
739
+ const input = projects && projects.length > 0 ? projects : [currentProject];
740
+ const seen = new Set();
741
+ const normalized = [];
742
+ for (const project of input) {
743
+ const item = normalizeProjectSummary({
744
+ ...project,
745
+ current: project.id === currentProject.id || project.projectDir === currentProject.projectDir,
746
+ });
747
+ let id = item.id;
748
+ let suffix = 2;
749
+ while (seen.has(id))
750
+ id = `${item.id}-${suffix++}`;
751
+ seen.add(id);
752
+ normalized.push({ ...item, id });
753
+ }
754
+ if (!normalized.some(project => project.current)) {
755
+ normalized.unshift(currentProject);
756
+ }
757
+ return normalized.map(project => ({ ...project, current: project.projectDir === currentProject.projectDir }));
758
+ }
759
+ function safeProjectId(name) {
760
+ const id = name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
761
+ return id || 'project';
762
+ }
763
+ function parsePositiveInt(value, fallback) {
764
+ const parsed = Number(value);
765
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;
766
+ }
767
+ function normalizeMemoryReviewAction(value) {
768
+ if (!value)
769
+ return null;
770
+ return MEMORY_REVIEW_ACTIONS.includes(value) ? value : null;
771
+ }
772
+ function countBy(items, selector) {
773
+ const counts = {};
774
+ for (const item of items) {
775
+ const key = selector(item);
776
+ counts[key] = (counts[key] ?? 0) + 1;
777
+ }
778
+ return counts;
779
+ }
780
+ function sum(items, selector) {
781
+ return items.reduce((total, item) => total + selector(item), 0);
782
+ }
459
783
  //# sourceMappingURL=DashboardServer.js.map