@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
@@ -0,0 +1,53 @@
1
+ /**
2
+ * DataTable — Reusable sortable data table
3
+ * Usage: Dashboard.components.DataTable({ columns, rows, emptyText })
4
+ */
5
+ ;(() => {
6
+ 'use strict'
7
+
8
+ window.Dashboard = window.Dashboard || {}
9
+ window.Dashboard.components = window.Dashboard.components || {}
10
+
11
+ /**
12
+ * @param {Object} opts
13
+ * @param {Array<{key: string, label: string, width?: string, render?: Function}>} opts.columns
14
+ * @param {Array<Object>} opts.rows
15
+ * @param {string} opts.emptyText
16
+ * @param {string} opts.cls
17
+ */
18
+ window.Dashboard.components.DataTable = function DataTable({ columns = [], rows = [], emptyText = 'No data', cls = '' }) {
19
+ if (!rows.length) {
20
+ return `<div class="text-muted" style="padding:24px;text-align:center">${emptyText}</div>`
21
+ }
22
+
23
+ const header = columns.map(c =>
24
+ `<th${c.width ? ` style="width:${c.width}"` : ''}>${c.label}</th>`
25
+ ).join('')
26
+
27
+ const body = rows.map(row => {
28
+ const cells = columns.map(c => {
29
+ const value = row[c.key]
30
+ const rendered = c.render ? c.render(value, row) : escapeHtml(String(value ?? ''))
31
+ return `<td>${rendered}</td>`
32
+ }).join('')
33
+ return `<tr>${cells}</tr>`
34
+ }).join('')
35
+
36
+ return `
37
+ <div class="table-wrap ${cls}">
38
+ <table class="data-table">
39
+ <thead><tr>${header}</tr></thead>
40
+ <tbody>${body}</tbody>
41
+ </table>
42
+ </div>
43
+ `
44
+ }
45
+
46
+ function escapeHtml(str) {
47
+ return str
48
+ .replace(/&/g, '&amp;')
49
+ .replace(/</g, '&lt;')
50
+ .replace(/>/g, '&gt;')
51
+ .replace(/"/g, '&quot;')
52
+ }
53
+ })()
@@ -0,0 +1,66 @@
1
+ /**
2
+ * EventStream — Real-time event display
3
+ * Usage: Dashboard.components.EventStream(events, opts)
4
+ */
5
+ ;(() => {
6
+ 'use strict'
7
+
8
+ window.Dashboard = window.Dashboard || {}
9
+ window.Dashboard.components = window.Dashboard.components || {}
10
+
11
+ const { relativeTime, t } = window.Dashboard
12
+
13
+ const EVENT_ICONS = {
14
+ 'tool.completed': '&#10003;',
15
+ 'tool.failed': '&#10007;',
16
+ 'review.required': '&#128269;',
17
+ 'review.passed': '&#10003;',
18
+ 'review.failed': '&#10007;',
19
+ 'hook.deployed': '&#128279;',
20
+ 'hook.generated': '&#9881;',
21
+ 'behavior.brute_retry': '&#9888;',
22
+ 'behavior.premature_done': '&#9888;',
23
+ 'behavior.blame_shift': '&#9888;',
24
+ 'evolution.cycle_completed': '&#128260;',
25
+ 'task.transition': '&#8594;',
26
+ }
27
+
28
+ const EVENT_COLORS = {
29
+ 'tool.completed': 'accent',
30
+ 'tool.failed': 'danger',
31
+ 'review.passed': 'success',
32
+ 'review.failed': 'danger',
33
+ 'hook.deployed': 'info',
34
+ 'behavior.brute_retry': 'warning',
35
+ 'behavior.premature_done': 'warning',
36
+ }
37
+
38
+ /**
39
+ * @param {Array} events
40
+ * @param {Object} opts
41
+ * @param {number} opts.limit - Max events to show (default 20)
42
+ * @param {boolean} opts.showTime - Show relative time (default true)
43
+ */
44
+ window.Dashboard.components.EventStream = function EventStream(events = [], opts = {}) {
45
+ const limit = opts.limit ?? 20
46
+ const showTime = opts.showTime !== false
47
+ const sliced = events.slice(0, limit)
48
+
49
+ if (!sliced.length) {
50
+ return `<div class="text-muted" style="padding:16px;text-align:center">${t('common.noEvents') || 'No events'}</div>`
51
+ }
52
+
53
+ return `<div class="event-stream">${sliced.map(ev => {
54
+ const icon = EVENT_ICONS[ev.type] || '&#8226;'
55
+ const color = EVENT_COLORS[ev.type] || 'text-2'
56
+ const typeLabel = ev.type.split('.').pop()
57
+ return `
58
+ <div class="event-item">
59
+ <span class="event-icon ${color}">${icon}</span>
60
+ <span class="event-type">${typeLabel}</span>
61
+ ${showTime ? `<span class="event-time">${relativeTime(ev.timestamp)}</span>` : ''}
62
+ </div>
63
+ `
64
+ }).join('')}</div>`
65
+ }
66
+ })()
@@ -0,0 +1,39 @@
1
+ /**
2
+ * LoadingState — Loading and empty state components
3
+ * Usage: Dashboard.components.LoadingState(message)
4
+ * Dashboard.components.EmptyState({ icon, title, description })
5
+ */
6
+ ;(() => {
7
+ 'use strict'
8
+
9
+ window.Dashboard = window.Dashboard || {}
10
+ window.Dashboard.components = window.Dashboard.components || {}
11
+
12
+ window.Dashboard.components.LoadingState = function LoadingState(message = 'Loading...') {
13
+ return `
14
+ <div class="loading-state">
15
+ <div class="loading-spinner"></div>
16
+ <div class="text-muted">${message}</div>
17
+ </div>
18
+ `
19
+ }
20
+
21
+ window.Dashboard.components.EmptyState = function EmptyState({ icon = '&#128196;', title = 'No data', description = '' } = {}) {
22
+ return `
23
+ <div class="empty-state">
24
+ <div class="empty-icon">${icon}</div>
25
+ <div class="empty-title">${title}</div>
26
+ ${description ? `<div class="empty-desc text-muted">${description}</div>` : ''}
27
+ </div>
28
+ `
29
+ }
30
+
31
+ window.Dashboard.components.ErrorState = function ErrorState(message = 'Something went wrong') {
32
+ return `
33
+ <div class="empty-state">
34
+ <div class="empty-icon" style="color:var(--danger)">&#9888;</div>
35
+ <div class="empty-title">${message}</div>
36
+ </div>
37
+ `
38
+ }
39
+ })()
@@ -0,0 +1,30 @@
1
+ /**
2
+ * MetricCard — Reusable metric display card
3
+ * Usage: Dashboard.components.MetricCard({ label, value, cls, icon })
4
+ */
5
+ ;(() => {
6
+ 'use strict'
7
+
8
+ window.Dashboard = window.Dashboard || {}
9
+ window.Dashboard.components = window.Dashboard.components || {}
10
+
11
+ window.Dashboard.components.MetricCard = function MetricCard({ label, value, cls = '', icon = '' }) {
12
+ return `
13
+ <div class="metric-card">
14
+ ${icon ? `<div class="metric-icon">${icon}</div>` : ''}
15
+ <div class="metric-label">${label}</div>
16
+ <div class="metric-value ${cls}">${value}</div>
17
+ </div>
18
+ `
19
+ }
20
+
21
+ /**
22
+ * MetricCardRow — Row of metric cards
23
+ * Usage: Dashboard.components.MetricRow(cards)
24
+ */
25
+ window.Dashboard.components.MetricRow = function MetricRow(cards) {
26
+ return `<div class="metrics-row">${cards.map(c =>
27
+ window.Dashboard.components.MetricCard(c)
28
+ ).join('')}</div>`
29
+ }
30
+ })()
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Panel — Reusable content panel with title
3
+ * Usage: Dashboard.components.Panel({ title, content, cls, badge })
4
+ */
5
+ ;(() => {
6
+ 'use strict'
7
+
8
+ window.Dashboard = window.Dashboard || {}
9
+ window.Dashboard.components = window.Dashboard.components || {}
10
+
11
+ window.Dashboard.components.Panel = function Panel({ title = '', content = '', cls = '', badge = '' }) {
12
+ return `
13
+ <div class="panel ${cls}">
14
+ ${title ? `<div class="panel-title">${title}${badge ? ` <span class="count">${badge}</span>` : ''}</div>` : ''}
15
+ <div class="panel-content">${content}</div>
16
+ </div>
17
+ `
18
+ }
19
+
20
+ /**
21
+ * Grid — 2-column grid layout
22
+ * Usage: Dashboard.components.Grid2(leftContent, rightContent)
23
+ */
24
+ window.Dashboard.components.Grid2 = function Grid2(left, right, cls = '') {
25
+ return `<div class="grid-2 ${cls}">${left}${right}</div>`
26
+ }
27
+ })()
@@ -0,0 +1,51 @@
1
+ /**
2
+ * StatusBadge — Status indicator with color coding
3
+ * Usage: Dashboard.components.StatusBadge(status)
4
+ */
5
+ ;(() => {
6
+ 'use strict'
7
+
8
+ window.Dashboard = window.Dashboard || {}
9
+ window.Dashboard.components = window.Dashboard.components || {}
10
+
11
+ const STATUS_COLORS = {
12
+ // Artifact statuses
13
+ DRAFT: 'info',
14
+ REVIEWING: 'warning',
15
+ FROZEN: 'accent',
16
+ DONE: 'success',
17
+ CANCELLED: 'muted',
18
+ // Task statuses
19
+ TODO: 'info',
20
+ READY: 'info',
21
+ IN_PROGRESS: 'warning',
22
+ REVIEW_REQUIRED: 'warning',
23
+ REVIEW_PASSED: 'accent',
24
+ COMPLETED: 'success',
25
+ FAILED: 'danger',
26
+ // Gate statuses
27
+ passed: 'success',
28
+ failed: 'danger',
29
+ pending: 'warning',
30
+ // General
31
+ active: 'accent',
32
+ inactive: 'muted',
33
+ error: 'danger',
34
+ }
35
+
36
+ window.Dashboard.components.StatusBadge = function StatusBadge(status, label = '') {
37
+ const color = STATUS_COLORS[status] || 'info'
38
+ const text = label || status
39
+ return `<span class="badge badge-${color}">${text}</span>`
40
+ }
41
+
42
+ /**
43
+ * PriorityBadge — Priority indicator
44
+ */
45
+ window.Dashboard.components.PriorityBadge = function PriorityBadge(priority) {
46
+ const labels = ['Critical', 'High', 'Medium', 'Low']
47
+ const colors = ['danger', 'warning', 'info', 'muted']
48
+ const idx = Math.min(Math.max(Number(priority) || 2, 0), 3)
49
+ return `<span class="badge badge-${colors[idx]}">${labels[idx]}</span>`
50
+ }
51
+ })()