@jterrats/open-orchestra 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/AGENTS.md +90 -0
  2. package/CHANGELOG.md +104 -0
  3. package/CLAUDE.md +103 -0
  4. package/README.md +173 -22
  5. package/dist/assets/web-console.js +743 -0
  6. package/dist/autonomous-workflow.d.ts +45 -0
  7. package/dist/autonomous-workflow.js +386 -0
  8. package/dist/autonomous-workflow.js.map +1 -0
  9. package/dist/benchmark.d.ts +8 -0
  10. package/dist/benchmark.js +193 -0
  11. package/dist/benchmark.js.map +1 -0
  12. package/dist/burndown.d.ts +3 -0
  13. package/dist/burndown.js +141 -0
  14. package/dist/burndown.js.map +1 -0
  15. package/dist/clarification.d.ts +6 -0
  16. package/dist/clarification.js +88 -0
  17. package/dist/clarification.js.map +1 -0
  18. package/dist/cli.js +221 -4
  19. package/dist/cli.js.map +1 -1
  20. package/dist/collaboration-flows.d.ts +5 -0
  21. package/dist/collaboration-flows.js +256 -0
  22. package/dist/collaboration-flows.js.map +1 -0
  23. package/dist/command-manifest.d.ts +11 -0
  24. package/dist/command-manifest.js +52 -0
  25. package/dist/command-manifest.js.map +1 -0
  26. package/dist/commands.d.ts +39 -0
  27. package/dist/commands.js +1069 -2
  28. package/dist/commands.js.map +1 -1
  29. package/dist/constants.d.ts +4 -0
  30. package/dist/constants.js +22 -0
  31. package/dist/constants.js.map +1 -1
  32. package/dist/defaults.d.ts +7 -11
  33. package/dist/defaults.js +7 -625
  34. package/dist/defaults.js.map +1 -1
  35. package/dist/delegation-decision.d.ts +14 -0
  36. package/dist/delegation-decision.js +391 -0
  37. package/dist/delegation-decision.js.map +1 -0
  38. package/dist/detect-commands.d.ts +3 -0
  39. package/dist/detect-commands.js +28 -0
  40. package/dist/detect-commands.js.map +1 -0
  41. package/dist/diagram-validation.d.ts +36 -0
  42. package/dist/diagram-validation.js +118 -0
  43. package/dist/diagram-validation.js.map +1 -0
  44. package/dist/fs-utils.d.ts +2 -0
  45. package/dist/fs-utils.js +75 -6
  46. package/dist/fs-utils.js.map +1 -1
  47. package/dist/github.d.ts +11 -0
  48. package/dist/github.js +48 -0
  49. package/dist/github.js.map +1 -0
  50. package/dist/health-checks.d.ts +28 -0
  51. package/dist/health-checks.js +219 -0
  52. package/dist/health-checks.js.map +1 -0
  53. package/dist/health-commands.d.ts +2 -0
  54. package/dist/health-commands.js +18 -0
  55. package/dist/health-commands.js.map +1 -0
  56. package/dist/instruction-apply.d.ts +34 -0
  57. package/dist/instruction-apply.js +150 -0
  58. package/dist/instruction-apply.js.map +1 -0
  59. package/dist/instruction-blocks.d.ts +22 -0
  60. package/dist/instruction-blocks.js +120 -0
  61. package/dist/instruction-blocks.js.map +1 -0
  62. package/dist/instruction-imports.d.ts +12 -0
  63. package/dist/instruction-imports.js +45 -0
  64. package/dist/instruction-imports.js.map +1 -0
  65. package/dist/instruction-stale.d.ts +9 -0
  66. package/dist/instruction-stale.js +106 -0
  67. package/dist/instruction-stale.js.map +1 -0
  68. package/dist/instruction-types.d.ts +66 -0
  69. package/dist/instruction-types.js +2 -0
  70. package/dist/instruction-types.js.map +1 -0
  71. package/dist/instruction-updates.d.ts +4 -0
  72. package/dist/instruction-updates.js +5 -0
  73. package/dist/instruction-updates.js.map +1 -0
  74. package/dist/knowledge-base.d.ts +10 -0
  75. package/dist/knowledge-base.js +117 -0
  76. package/dist/knowledge-base.js.map +1 -0
  77. package/dist/mcp-oauth-proxy.d.ts +39 -0
  78. package/dist/mcp-oauth-proxy.js +80 -0
  79. package/dist/mcp-oauth-proxy.js.map +1 -0
  80. package/dist/pr-review.d.ts +20 -0
  81. package/dist/pr-review.js +142 -0
  82. package/dist/pr-review.js.map +1 -0
  83. package/dist/project-detection.d.ts +22 -0
  84. package/dist/project-detection.js +174 -0
  85. package/dist/project-detection.js.map +1 -0
  86. package/dist/prompt-registry.d.ts +56 -0
  87. package/dist/prompt-registry.js +163 -0
  88. package/dist/prompt-registry.js.map +1 -0
  89. package/dist/release-candidate.d.ts +41 -0
  90. package/dist/release-candidate.js +196 -0
  91. package/dist/release-candidate.js.map +1 -0
  92. package/dist/release-commands.d.ts +4 -0
  93. package/dist/release-commands.js +50 -0
  94. package/dist/release-commands.js.map +1 -0
  95. package/dist/roles/ai-support-roles.d.ts +11 -0
  96. package/dist/roles/ai-support-roles.js +67 -0
  97. package/dist/roles/ai-support-roles.js.map +1 -0
  98. package/dist/roles/core-roles.d.ts +11 -0
  99. package/dist/roles/core-roles.js +144 -0
  100. package/dist/roles/core-roles.js.map +1 -0
  101. package/dist/roles/engineering-roles.d.ts +11 -0
  102. package/dist/roles/engineering-roles.js +176 -0
  103. package/dist/roles/engineering-roles.js.map +1 -0
  104. package/dist/roles/governance-roles.d.ts +11 -0
  105. package/dist/roles/governance-roles.js +117 -0
  106. package/dist/roles/governance-roles.js.map +1 -0
  107. package/dist/roles/index.d.ts +11 -0
  108. package/dist/roles/index.js +17 -0
  109. package/dist/roles/index.js.map +1 -0
  110. package/dist/roles/platform-ops-roles.d.ts +11 -0
  111. package/dist/roles/platform-ops-roles.js +158 -0
  112. package/dist/roles/platform-ops-roles.js.map +1 -0
  113. package/dist/roles/qa-ux-roles.d.ts +11 -0
  114. package/dist/roles/qa-ux-roles.js +193 -0
  115. package/dist/roles/qa-ux-roles.js.map +1 -0
  116. package/dist/roles/release-ops-roles.d.ts +11 -0
  117. package/dist/roles/release-ops-roles.js +109 -0
  118. package/dist/roles/release-ops-roles.js.map +1 -0
  119. package/dist/runtime-adapters.d.ts +6 -0
  120. package/dist/runtime-adapters.js +88 -0
  121. package/dist/runtime-adapters.js.map +1 -0
  122. package/dist/runtime-bootstrap.d.ts +12 -0
  123. package/dist/runtime-bootstrap.js +136 -0
  124. package/dist/runtime-bootstrap.js.map +1 -0
  125. package/dist/skills.d.ts +36 -0
  126. package/dist/skills.js +665 -0
  127. package/dist/skills.js.map +1 -0
  128. package/dist/subagent-protocol.d.ts +41 -0
  129. package/dist/subagent-protocol.js +179 -0
  130. package/dist/subagent-protocol.js.map +1 -0
  131. package/dist/telemetry-consent.d.ts +24 -0
  132. package/dist/telemetry-consent.js +95 -0
  133. package/dist/telemetry-consent.js.map +1 -0
  134. package/dist/telemetry-export.d.ts +14 -0
  135. package/dist/telemetry-export.js +126 -0
  136. package/dist/telemetry-export.js.map +1 -0
  137. package/dist/telemetry-records.d.ts +3 -0
  138. package/dist/telemetry-records.js +96 -0
  139. package/dist/telemetry-records.js.map +1 -0
  140. package/dist/telemetry-redaction.d.ts +9 -0
  141. package/dist/telemetry-redaction.js +55 -0
  142. package/dist/telemetry-redaction.js.map +1 -0
  143. package/dist/telemetry-types.d.ts +52 -0
  144. package/dist/telemetry-types.js +2 -0
  145. package/dist/telemetry-types.js.map +1 -0
  146. package/dist/telemetry.d.ts +4 -0
  147. package/dist/telemetry.js +4 -0
  148. package/dist/telemetry.js.map +1 -0
  149. package/dist/types.d.ts +304 -1
  150. package/dist/types.js +1 -1
  151. package/dist/types.js.map +1 -1
  152. package/dist/validation.d.ts +3 -1
  153. package/dist/validation.js +28 -5
  154. package/dist/validation.js.map +1 -1
  155. package/dist/web-api.js +167 -3
  156. package/dist/web-api.js.map +1 -1
  157. package/dist/web-console.js +6 -160
  158. package/dist/web-console.js.map +1 -1
  159. package/dist/workflow-gates.js +4 -2
  160. package/dist/workflow-gates.js.map +1 -1
  161. package/dist/workflow-services.js +143 -67
  162. package/dist/workflow-services.js.map +1 -1
  163. package/dist/workflow-templates.d.ts +10 -0
  164. package/dist/workflow-templates.js +141 -0
  165. package/dist/workflow-templates.js.map +1 -0
  166. package/dist/workspace-classification.d.ts +5 -0
  167. package/dist/workspace-classification.js +127 -0
  168. package/dist/workspace-classification.js.map +1 -0
  169. package/dist/workspace-validator.js +11 -1
  170. package/dist/workspace-validator.js.map +1 -1
  171. package/dist/workspace.d.ts +8 -4
  172. package/dist/workspace.js +111 -4
  173. package/dist/workspace.js.map +1 -1
  174. package/docs/autonomous-workflow.md +165 -0
  175. package/docs/benchmark.md +219 -0
  176. package/docs/dev-team-specialist-role-profiles.md +171 -0
  177. package/docs/mcp-oauth-proxy-evaluation.md +44 -0
  178. package/docs/multi-agent-orchestrator-backlog.md +413 -1
  179. package/docs/open-orchestra-dogfooding-findings.md +66 -0
  180. package/docs/orchestra-mvp.md +161 -3
  181. package/docs/runtime-adapters.md +86 -0
  182. package/docs/runtime-llm-flow.md +124 -0
  183. package/docs/setup-agents-dogfooding-findings.md +101 -0
  184. package/docs/skill-loading-strategy.md +114 -0
  185. package/docs/source-of-truth-and-agent-learning.md +83 -0
  186. package/package.json +9 -5
  187. package/rules/agent-roles.mdc +30 -0
  188. package/rules/ai-assisted-development.mdc +22 -0
  189. package/skills/agent-learning/SKILL.md +24 -0
  190. package/skills/agent-learning/manifest.json +40 -0
  191. package/skills/backlog-sync/SKILL.md +24 -0
  192. package/skills/backlog-sync/manifest.json +41 -0
  193. package/skills/diagram-export/SKILL.md +35 -0
  194. package/skills/diagram-export/manifest.json +40 -0
  195. package/skills/model-evaluation/SKILL.md +25 -0
  196. package/skills/model-evaluation/manifest.json +41 -0
  197. package/skills/playwright-evidence/SKILL.md +28 -0
  198. package/skills/playwright-evidence/manifest.json +46 -0
  199. package/skills/pr-review/SKILL.md +23 -0
  200. package/skills/pr-review/manifest.json +43 -0
  201. package/skills/prompt-registry/SKILL.md +24 -0
  202. package/skills/prompt-registry/manifest.json +45 -0
  203. package/skills/release-readiness/SKILL.md +25 -0
  204. package/skills/release-readiness/manifest.json +45 -0
  205. package/skills/source-of-truth/SKILL.md +24 -0
  206. package/skills/source-of-truth/manifest.json +47 -0
  207. package/skills/static-analysis/SKILL.md +26 -0
  208. package/skills/static-analysis/manifest.json +46 -0
@@ -1,4 +1,4 @@
1
- import { EVIDENCE_TYPES, REVIEW_RESULTS, SEVERITIES, TASK_STATUSES, } from "./constants.js";
1
+ import { EVIDENCE_TYPE_ALIASES, EVIDENCE_TYPES, REVIEW_RESULTS, REVIEW_ROLE_ALIASES, SEVERITIES, TASK_STATUSES, } from "./constants.js";
2
2
  export function assertObject(value, name) {
3
3
  if (!value || typeof value !== "object" || Array.isArray(value)) {
4
4
  throw new Error(`${name} must be an object`);
@@ -115,8 +115,8 @@ function validateOptionalStringArray(value, name) {
115
115
  export function validateReviewInput(input, roleIds) {
116
116
  assertNonEmptyString(input.task, "task");
117
117
  assertNonEmptyString(input.role, "role");
118
- if (!roleIds.has(input.role)) {
119
- throw new Error(`unknown reviewer role: ${input.role}`);
118
+ if (!normalizeReviewRole(input.role, roleIds)) {
119
+ throw new Error(`unknown reviewer role: ${input.role}; accepted roles: ${Array.from(roleIds).sort().join(", ")}; aliases: ${reviewRoleAliasList()}`);
120
120
  }
121
121
  if (!REVIEW_RESULTS.includes(input.result)) {
122
122
  throw new Error(`result must be one of: ${REVIEW_RESULTS.join(", ")}`);
@@ -127,17 +127,40 @@ export function validateReviewInput(input, roleIds) {
127
127
  assertNonEmptyString(input.findings, "findings");
128
128
  assertNonEmptyString(input.recommendation, "recommendation");
129
129
  }
130
+ export function normalizeReviewRole(role, roleIds) {
131
+ if (roleIds.has(role)) {
132
+ return role;
133
+ }
134
+ const alias = REVIEW_ROLE_ALIASES[role];
135
+ return alias && roleIds.has(alias) ? alias : undefined;
136
+ }
137
+ function reviewRoleAliasList() {
138
+ return Object.entries(REVIEW_ROLE_ALIASES)
139
+ .map(([alias, role]) => `${alias}=${role}`)
140
+ .join(", ");
141
+ }
130
142
  export function validateEvidenceInput(input, roleIds) {
131
143
  assertNonEmptyString(input.task, "task");
132
144
  assertNonEmptyString(input.role, "role");
133
145
  if (!roleIds.has(input.role)) {
134
146
  throw new Error(`unknown evidence role: ${input.role}`);
135
147
  }
136
- if (!EVIDENCE_TYPES.includes(input.type)) {
137
- throw new Error(`type must be one of: ${EVIDENCE_TYPES.join(", ")}`);
148
+ if (!normalizeEvidenceType(input.type)) {
149
+ throw new Error(`valid evidence types: ${EVIDENCE_TYPES.join(", ")}; aliases: ${evidenceTypeAliasList()}`);
138
150
  }
139
151
  assertNonEmptyString(input.summary, "summary");
140
152
  }
153
+ export function normalizeEvidenceType(type) {
154
+ if (EVIDENCE_TYPES.includes(type)) {
155
+ return type;
156
+ }
157
+ return EVIDENCE_TYPE_ALIASES[type];
158
+ }
159
+ function evidenceTypeAliasList() {
160
+ return Object.entries(EVIDENCE_TYPE_ALIASES)
161
+ .map(([alias, type]) => `${alias}=${type}`)
162
+ .join(", ");
163
+ }
141
164
  export function validateReadiness(task) {
142
165
  const missing = [];
143
166
  const fields = [
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
package/dist/web-api.js CHANGED
@@ -4,24 +4,45 @@ import { dirname, join } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { listApprovals, listEvidence, listRoles, listTasks, generateTaskGraphPlan, getWorkflowConfig, getWorkflowStatus, } from "./workflow-services.js";
6
6
  import { validateWorkspace } from "./workspace-validator.js";
7
+ import { getLocalHealthReport } from "./health-checks.js";
8
+ import { classifyWorkspace } from "./workspace-classification.js";
9
+ import { listRuntimeAdapters, parseRuntimeTarget } from "./runtime-adapters.js";
7
10
  import { listWebEvidence, readWorkspaceArtifact } from "./web-evidence.js";
8
11
  import { attachWebPlaywrightEvidence, getWebPlaywrightPlan, } from "./web-playwright.js";
9
12
  import { getWebRoleActivation } from "./web-roles.js";
10
13
  import { renderWebConsoleHtml } from "./web-console.js";
14
+ import { renderSubagentProtocol } from "./subagent-protocol.js";
15
+ import { listCollaborationFlows, recommendCollaborationFlow, } from "./collaboration-flows.js";
16
+ import { listWorkflowTemplates, renderWorkflowTemplates, selectWorkflowTemplates, validateWorkflowTemplates, } from "./workflow-templates.js";
17
+ import { decideTaskDelegation } from "./delegation-decision.js";
18
+ import { addAgentLesson, listAgentLessons, listSkills, planSkillsForTask, promoteAgentLessons, readSourceOfTruth, renderSkills, validateSkills, } from "./skills.js";
11
19
  const LOCAL_HOSTS = new Set(["127.0.0.1", "localhost", "::1"]);
12
20
  const DEFAULT_WEB_HOST = "127.0.0.1";
13
21
  const DEFAULT_WEB_PORT = 3717;
14
22
  const PACKAGE_ROOT = dirname(dirname(fileURLToPath(import.meta.url)));
15
23
  const CHART_JS_PATH = join(PACKAGE_ROOT, "node_modules/chart.js/dist/chart.umd.js");
24
+ const WEB_CONSOLE_BUNDLE_PATH = join(PACKAGE_ROOT, "dist/assets/web-console.js");
16
25
  const routes = {
17
26
  "/api/status": ({ root }) => getWorkflowStatus(root),
18
27
  "/api/validate": ({ root }) => validateWorkspace(root),
28
+ "/api/health": ({ root }) => getLocalHealthReport({ root }),
29
+ "/api/workspace/classification": ({ root }) => classifyWorkspace({ root }),
30
+ "/api/runtime/adapters": async () => listRuntimeAdapters(),
19
31
  "/api/graph/plan": ({ root }) => generateTaskGraphPlan(root),
20
32
  "/api/roles": ({ root }) => listRoles(root),
21
33
  "/api/evidence": ({ root }) => listEvidence(undefined, root),
22
34
  "/api/approvals": ({ root }) => listApprovals(undefined, root),
23
35
  "/api/config": ({ root }) => getWorkflowConfig(root),
24
36
  "/api/tasks": ({ root }) => listTasks(root),
37
+ "/api/skills": async () => listSkills(),
38
+ "/api/skills/validate": async () => validateSkills(),
39
+ "/api/collaboration/flows": async () => listCollaborationFlows(),
40
+ "/api/workflow/templates": async () => ({
41
+ templates: listWorkflowTemplates(),
42
+ validationErrors: validateWorkflowTemplates(),
43
+ }),
44
+ "/api/sources": ({ root }) => readSourceOfTruth(root),
45
+ "/api/lessons": ({ root }) => listAgentLessons(root),
25
46
  };
26
47
  const requestRoutes = {
27
48
  "/api/evidence/view": async ({ root, url }) => ({
@@ -36,6 +57,66 @@ const requestRoutes = {
36
57
  status: 200,
37
58
  body: await getWebPlaywrightPlan(root, requiredParam(url, "task")),
38
59
  }),
60
+ "/api/delegation/decide": async ({ root, url }) => ({
61
+ status: 200,
62
+ body: await decideTaskDelegation(requiredParam(url, "task"), root, {
63
+ record: false,
64
+ }),
65
+ }),
66
+ "/api/skills/plan": async ({ root, url }) => ({
67
+ status: 200,
68
+ body: await planSkillsForTask(requiredParam(url, "task"), root),
69
+ }),
70
+ "/api/skills/render": async ({ root, url }) => ({
71
+ status: 200,
72
+ body: await renderSkills({
73
+ target: parseSkillRenderTarget(stringParam(url, "target") ?? "generic"),
74
+ taskId: stringParam(url, "task"),
75
+ skillIds: csvParam(url, "skills"),
76
+ root,
77
+ }),
78
+ }),
79
+ "/api/protocol/render": async ({ root, url }) => ({
80
+ status: 200,
81
+ body: await renderSubagentProtocol({
82
+ target: parseSkillRenderTarget(stringParam(url, "target") ?? "generic"),
83
+ taskId: stringParam(url, "task"),
84
+ root,
85
+ }),
86
+ }),
87
+ "/api/collaboration/recommend": async ({ root, url }) => {
88
+ const taskId = requiredParam(url, "task");
89
+ const task = (await listTasks(root)).find((candidate) => candidate.id === taskId);
90
+ if (!task) {
91
+ throw new Error(`unknown task: ${taskId}`);
92
+ }
93
+ return {
94
+ status: 200,
95
+ body: recommendCollaborationFlow(task),
96
+ };
97
+ },
98
+ "/api/workflow/select": async ({ root, url }) => {
99
+ const taskId = requiredParam(url, "task");
100
+ const task = (await listTasks(root)).find((candidate) => candidate.id === taskId);
101
+ if (!task) {
102
+ throw new Error(`unknown task: ${taskId}`);
103
+ }
104
+ return { status: 200, body: selectWorkflowTemplates(task) };
105
+ },
106
+ "/api/workflow/render": async ({ root, url }) => {
107
+ const taskId = requiredParam(url, "task");
108
+ const task = (await listTasks(root)).find((candidate) => candidate.id === taskId);
109
+ if (!task) {
110
+ throw new Error(`unknown task: ${taskId}`);
111
+ }
112
+ return {
113
+ status: 200,
114
+ body: renderWorkflowTemplates({
115
+ task,
116
+ target: parseSkillRenderTarget(stringParam(url, "target") ?? "generic"),
117
+ }),
118
+ };
119
+ },
39
120
  };
40
121
  export async function handleWebApiRequest(pathname, context) {
41
122
  const handler = routes[pathname];
@@ -67,6 +148,16 @@ export async function startWebApiServer(options = {}) {
67
148
  writeJson(response, result.status, result.body);
68
149
  return;
69
150
  }
151
+ if (request.method === "POST" && url.pathname === "/api/lessons/add") {
152
+ const result = await handleLessonAddPost(request, root);
153
+ writeJson(response, result.status, result.body);
154
+ return;
155
+ }
156
+ if (request.method === "POST" && url.pathname === "/api/lessons/promote") {
157
+ const result = await handleLessonPromotePost(request, root);
158
+ writeJson(response, result.status, result.body);
159
+ return;
160
+ }
70
161
  if (request.method !== "GET") {
71
162
  writeJson(response, 405, {
72
163
  error: "method_not_allowed",
@@ -79,7 +170,11 @@ export async function startWebApiServer(options = {}) {
79
170
  return;
80
171
  }
81
172
  if (url.pathname === "/vendor/chart.umd.js") {
82
- await writeChartBundle(response);
173
+ await writeJavaScript(response, CHART_JS_PATH);
174
+ return;
175
+ }
176
+ if (url.pathname === "/assets/web-console.js") {
177
+ await writeJavaScript(response, WEB_CONSOLE_BUNDLE_PATH);
83
178
  return;
84
179
  }
85
180
  if (url.pathname === "/api/artifacts") {
@@ -127,8 +222,8 @@ function writeHtml(response, body) {
127
222
  });
128
223
  response.end(body);
129
224
  }
130
- async function writeChartBundle(response) {
131
- const bundle = await readFile(CHART_JS_PATH, "utf8");
225
+ async function writeJavaScript(response, filePath) {
226
+ const bundle = await readFile(filePath, "utf8");
132
227
  response.writeHead(200, {
133
228
  "content-type": "text/javascript; charset=utf-8",
134
229
  "cache-control": "no-store",
@@ -172,6 +267,75 @@ function validatePlaywrightEvidenceInput(input) {
172
267
  throw new Error(`invalid playwright evidence kind: ${input.kind}`);
173
268
  }
174
269
  }
270
+ async function handleLessonAddPost(request, root) {
271
+ try {
272
+ const input = (await readJsonBody(request));
273
+ validateLessonInput(input);
274
+ return { status: 200, body: await addAgentLesson(input, root) };
275
+ }
276
+ catch (error) {
277
+ return errorResult(error);
278
+ }
279
+ }
280
+ async function handleLessonPromotePost(request, root) {
281
+ try {
282
+ const input = (await readJsonBody(request));
283
+ return {
284
+ status: 200,
285
+ body: await promoteAgentLessons(removeUndefined({
286
+ to: parsePromotionTarget(input.to ?? "doc"),
287
+ filter: input.filter,
288
+ root,
289
+ })),
290
+ };
291
+ }
292
+ catch (error) {
293
+ return errorResult(error);
294
+ }
295
+ }
296
+ function validateLessonInput(input) {
297
+ for (const field of [
298
+ "actor",
299
+ "operation",
300
+ "failedAction",
301
+ "errorSignature",
302
+ "rootCause",
303
+ "fix",
304
+ "prevention",
305
+ ]) {
306
+ if (typeof input[field] !== "string" || input[field]?.trim() === "") {
307
+ throw new Error(`${field} is required`);
308
+ }
309
+ }
310
+ if (!Array.isArray(input.appliesTo)) {
311
+ throw new Error("appliesTo is required");
312
+ }
313
+ if (!Array.isArray(input.verifiedBy)) {
314
+ throw new Error("verifiedBy is required");
315
+ }
316
+ }
317
+ function parsePromotionTarget(value) {
318
+ if (["skill", "rule", "doc"].includes(value)) {
319
+ return value;
320
+ }
321
+ throw new Error(`unknown promotion target: ${value}`);
322
+ }
323
+ function parseSkillRenderTarget(value) {
324
+ return parseRuntimeTarget(value);
325
+ }
326
+ function csvParam(url, name) {
327
+ const value = stringParam(url, name);
328
+ if (!value) {
329
+ return undefined;
330
+ }
331
+ return value
332
+ .split(",")
333
+ .map((item) => item.trim())
334
+ .filter(Boolean);
335
+ }
336
+ function removeUndefined(value) {
337
+ return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
338
+ }
175
339
  function errorResult(error) {
176
340
  return {
177
341
  status: 500,
@@ -1 +1 @@
1
- {"version":3,"file":"web-api.js","sourceRoot":"","sources":["../src/web-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-api.js","sourceRoot":"","sources":["../src/web-api.ts"],"names":[],"mappings":"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"}
@@ -46,12 +46,14 @@ export function renderWebConsoleHtml() {
46
46
  .control-row { display: grid; grid-template-columns: 1fr; gap: 8px; margin-bottom: 10px; }
47
47
  .field { display: grid; gap: 4px; }
48
48
  .field label { color: var(--muted); font-size: 0.82rem; }
49
- .field input, .field select { min-height: 38px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel); color: var(--ink); padding: 0 10px; }
49
+ .field input, .field select, .field textarea { min-height: 38px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel); color: var(--ink); padding: 0 10px; }
50
+ .field textarea { min-height: 72px; padding-top: 8px; resize: vertical; }
50
51
  .text-button { min-height: 38px; border: 1px solid var(--accent); border-radius: 6px; background: var(--accent); color: white; padding: 0 12px; cursor: pointer; }
51
52
  .tag-row { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
52
53
  .tag { border: 1px solid var(--line); border-radius: 999px; padding: 2px 8px; color: var(--muted); font-size: 0.78rem; }
53
54
  .artifact-link { color: var(--accent); font-size: 0.85rem; }
54
55
  .missing { color: var(--warn); font-size: 0.85rem; }
56
+ .preview { max-height: 340px; overflow: auto; border: 1px solid var(--line); border-radius: 6px; background: color-mix(in srgb, var(--panel) 78%, var(--bg)); padding: 10px; white-space: pre-wrap; word-break: break-word; font: 0.82rem/1.45 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
55
57
  .scenario { margin-top: 8px; }
56
58
  .empty-state { border: 1px dashed var(--line); border-radius: 8px; padding: 18px; background: color-mix(in srgb, var(--panel) 85%, var(--bg)); }
57
59
  .empty-state strong { display: block; margin-bottom: 4px; }
@@ -64,168 +66,12 @@ export function renderWebConsoleHtml() {
64
66
  <header class="topbar"><div class="topbar-inner"><div class="brand-row"><div class="brand"><h1>Open Orchestra</h1><p>Local workflow console</p></div><div class="header-actions"><button class="icon-button" id="theme-toggle" type="button" title="Toggle color theme" aria-label="Toggle color theme"><svg viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M12 3v2.2M12 18.8V21M4.6 4.6l1.6 1.6M17.8 17.8l1.6 1.6M3 12h2.2M18.8 12H21M4.6 19.4l1.6-1.6M17.8 6.2l1.6-1.6M12 8a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></button><button class="refresh-button" id="refresh" type="button" title="Reload workflow data">Refresh</button></div></div></div></header>
65
67
  <main>
66
68
  <section class="status-line" aria-live="polite"><span class="pill" id="load-state">Loading workflow</span><span id="last-updated">Waiting for local API data</span></section>
67
- <section class="grid"><div class="panel"><h2>Dashboard</h2><div class="metric-grid" id="metrics"></div><div class="chart-grid" id="charts"><div class="chart-card"><h3>Task Status</h3><div class="chart-frame"><canvas id="task-status-chart" aria-label="Task status distribution" role="img"></canvas></div></div><div class="chart-card"><h3>Graph State</h3><div class="chart-frame"><canvas id="graph-state-chart" aria-label="Graph state distribution" role="img"></canvas></div></div></div></div><div class="panel"><h2>Validation</h2><div id="validation"></div></div></section>
68
- <section class="grid"><div class="panel"><h2>Graph Plan</h2><ul class="list" id="graph"></ul></div><div class="panel"><h2>Next Actions</h2><ul class="list" id="actions"></ul></div></section><section class="grid"><div class="panel"><h2>Evidence</h2><div class="control-row"><div class="field"><label for="evidence-task">Task</label><select id="evidence-task"></select></div><div class="field"><label for="evidence-type">Type</label><select id="evidence-type"></select></div><button class="text-button" id="evidence-filter" type="button">Apply</button></div><ul class="list" id="evidence-list"></ul></div><div class="panel"><h2>Roles</h2><ul class="list" id="roles-view"></ul></div></section><section class="grid"><div class="panel"><h2>Planning</h2><ul class="list" id="planning-view"></ul></div><div class="panel"><h2>Playwright</h2><div class="control-row"><div class="field"><label for="playwright-task">Task</label><select id="playwright-task"></select></div><div class="field"><label for="playwright-kind">Kind</label><select id="playwright-kind"><option>screenshot</option><option>trace</option><option>video</option><option>report</option></select></div><div class="field"><label for="playwright-path">Artifact path</label><input id="playwright-path" placeholder="reports/smoke.png" /></div><div class="field"><label for="playwright-summary">Summary</label><input id="playwright-summary" placeholder="Evidence summary" /></div><button class="text-button" id="playwright-attach" type="button">Attach</button></div><ul class="list" id="playwright-plan"></ul></div></section>
69
+ <section class="grid"><div class="panel"><h2>Dashboard</h2><div class="metric-grid" id="metrics"></div><div class="chart-grid" id="charts"><div class="chart-card"><h3>Task Status</h3><div class="chart-frame"><canvas id="task-status-chart" aria-label="Task status distribution" role="img"></canvas></div></div><div class="chart-card"><h3>Graph State</h3><div class="chart-frame"><canvas id="graph-state-chart" aria-label="Graph state distribution" role="img"></canvas></div></div></div></div><div class="panel"><h2>Workspace</h2><ul class="list" id="workspace-view"></ul><h2>Validation</h2><div id="validation"></div></div></section>
70
+ <section class="grid"><div class="panel"><h2>Graph Plan</h2><ul class="list" id="graph"></ul></div><div class="panel"><h2>Next Actions</h2><ul class="list" id="actions"></ul></div></section><section class="grid"><div class="panel"><h2>Evidence</h2><div class="control-row"><div class="field"><label for="evidence-task">Task</label><select id="evidence-task"></select></div><div class="field"><label for="evidence-type">Type</label><select id="evidence-type"></select></div><button class="text-button" id="evidence-filter" type="button">Apply</button></div><ul class="list" id="evidence-list"></ul></div><div class="panel"><h2>Roles</h2><ul class="list" id="roles-view"></ul></div></section><section class="grid"><div class="panel"><h2>Planning</h2><ul class="list" id="planning-view"></ul></div><div class="panel"><h2>Playwright</h2><div class="control-row"><div class="field"><label for="playwright-task">Task</label><select id="playwright-task"></select></div><div class="field"><label for="playwright-kind">Kind</label><select id="playwright-kind"><option>screenshot</option><option>trace</option><option>video</option><option>report</option></select></div><div class="field"><label for="playwright-path">Artifact path</label><input id="playwright-path" placeholder="reports/smoke.png" /></div><div class="field"><label for="playwright-summary">Summary</label><input id="playwright-summary" placeholder="Evidence summary" /></div><button class="text-button" id="playwright-attach" type="button">Attach</button></div><ul class="list" id="playwright-plan"></ul></div></section><section class="grid"><div class="panel"><h2>Skills</h2><div class="control-row"><div class="field"><label for="skills-task">Task</label><select id="skills-task"></select></div><div class="field"><label for="skills-target">Target</label><select id="skills-target"><option>generic</option><option>claude</option><option>cursor</option><option>codex</option><option>vscode</option><option>windsurf</option></select></div><button class="text-button" id="skills-plan" type="button">Plan</button><button class="text-button" id="skills-render" type="button">Render</button></div><ul class="list" id="skills-plan-list"></ul></div><div class="panel"><h2>Skill Catalog</h2><ul class="list" id="skills-list"></ul><h2>Render Preview</h2><pre class="preview" id="skills-preview">No skill render yet.</pre></div></section><section class="grid"><div class="panel"><h2>Source of Truth</h2><ul class="list" id="sources-list"></ul></div><div class="panel"><h2>Lessons Learned</h2><div class="control-row"><div class="field"><label for="lesson-promote-target">Promote to</label><select id="lesson-promote-target"><option>doc</option><option>skill</option><option>rule</option></select></div><div class="field"><label for="lesson-promote-filter">Filter</label><input id="lesson-promote-filter" placeholder="operation or error" /></div><button class="text-button" id="lesson-promote" type="button">Promote</button></div><ul class="list" id="lesson-promotion-result"></ul><ul class="list" id="lessons-list"></ul></div></section><section class="grid"><div class="panel"><h2>Add Lesson</h2><div class="control-row"><div class="field"><label for="lesson-task">Task</label><select id="lesson-task"></select></div><div class="field"><label for="lesson-actor">Actor</label><input id="lesson-actor" value="parent" data-lesson-required required /></div><div class="field"><label for="lesson-operation">Operation</label><input id="lesson-operation" placeholder="generated-doc-update" data-lesson-required required /></div><div class="field"><label for="lesson-error-signature">Error signature</label><input id="lesson-error-signature" placeholder="syntax error" data-lesson-required required /></div></div><div class="control-row"><div class="field"><label for="lesson-failed-action">Failed action</label><input id="lesson-failed-action" placeholder="command or attempted step" data-lesson-required required /></div><div class="field"><label for="lesson-root-cause">Root cause</label><input id="lesson-root-cause" placeholder="why it failed" data-lesson-required required /></div><div class="field"><label for="lesson-fix">Fix</label><input id="lesson-fix" placeholder="working correction" data-lesson-required required /></div><div class="field"><label for="lesson-prevention">Prevention</label><input id="lesson-prevention" placeholder="how to avoid repeat" data-lesson-required required /></div></div><div class="control-row"><div class="field"><label for="lesson-applies-to">Applies to</label><input id="lesson-applies-to" placeholder="web, skills" /></div><div class="field"><label for="lesson-verified-by">Verified by</label><input id="lesson-verified-by" placeholder="test, precommit" /></div><button class="text-button" id="lesson-add" type="button">Add Lesson</button></div></div></section>
69
71
  </main>
70
72
  </div>
71
73
  <script src="/vendor/chart.umd.js"></script>
72
- <script>
73
- const endpoints = [["status", "/api/status"], ["validation", "/api/validate"], ["graph", "/api/graph/plan"], ["roles", "/api/roles"], ["evidence", "/api/evidence"], ["approvals", "/api/approvals"], ["tasks", "/api/tasks"], ["evidenceView", "/api/evidence/view"], ["roleActivation", "/api/roles/activation"]];
74
- const statePill = document.querySelector("#load-state");
75
- const lastUpdated = document.querySelector("#last-updated");
76
- const metrics = document.querySelector("#metrics");
77
- const validation = document.querySelector("#validation");
78
- const graph = document.querySelector("#graph");
79
- const actions = document.querySelector("#actions");
80
- const charts = document.querySelector("#charts");
81
- const evidenceTask = document.querySelector("#evidence-task");
82
- const evidenceType = document.querySelector("#evidence-type");
83
- const evidenceList = document.querySelector("#evidence-list");
84
- const rolesView = document.querySelector("#roles-view");
85
- const planningView = document.querySelector("#planning-view");
86
- const playwrightTask = document.querySelector("#playwright-task");
87
- const playwrightPlan = document.querySelector("#playwright-plan");
88
- let taskStatusChart;
89
- let graphStateChart;
90
- const themeToggle = document.querySelector("#theme-toggle");
91
- applyStoredTheme();
92
- themeToggle.addEventListener("click", toggleTheme);
93
- document.querySelector("#refresh").addEventListener("click", loadDashboard);
94
- document.querySelector("#evidence-filter").addEventListener("click", loadEvidence);
95
- document.querySelector("#playwright-task").addEventListener("change", loadPlaywrightPlan);
96
- document.querySelector("#playwright-attach").addEventListener("click", attachPlaywrightEvidence);
97
- loadDashboard();
98
- function applyStoredTheme() {
99
- const stored = localStorage.getItem("open-orchestra-theme");
100
- if (stored === "dark" || stored === "light") { document.documentElement.dataset.theme = stored; }
101
- }
102
- function toggleTheme() {
103
- const current = document.documentElement.dataset.theme || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
104
- const next = current === "dark" ? "light" : "dark";
105
- document.documentElement.dataset.theme = next;
106
- localStorage.setItem("open-orchestra-theme", next);
107
- loadDashboard();
108
- }
109
- async function loadDashboard() {
110
- setLoading("Loading workflow", "");
111
- try {
112
- const entries = await Promise.all(endpoints.map(async function (entry) {
113
- const response = await fetch(entry[1]);
114
- if (!response.ok) { throw new Error(entry[1] + " returned " + response.status); }
115
- return [entry[0], await response.json()];
116
- }));
117
- render(Object.fromEntries(entries));
118
- setLoading("Workflow loaded", "ok");
119
- lastUpdated.textContent = "Updated " + new Date().toLocaleTimeString();
120
- } catch (error) {
121
- setLoading("Console unavailable", "warn");
122
- renderEmpty("The local API is not ready yet.", String(error.message || error));
123
- }
124
- }
125
- function render(data) {
126
- replace(metrics, [metric(String(data.status.tasks.total), "Tasks"), metric(String(data.graph.ready.length), "Ready"), metric(String(data.graph.blocked.length), "Blocked"), metric(String(data.graph.locked.length), "Locked"), metric(String(data.roles.length), "Roles"), metric(String(data.evidence.length), "Evidence"), metric(String(data.approvals.length), "Approvals"), metric(data.validation.valid ? "Valid" : "Needs work", "Workspace")]);
127
- renderValidation(data.validation); renderGraph(data.graph); renderActions(data); renderCharts(data); renderEvidenceControls(data); renderEvidence(data.evidenceView); renderRoles(data.roleActivation); renderPlanning(data.roleActivation); renderPlaywrightTasks(data.tasks); loadPlaywrightPlan();
128
- }
129
- function renderCharts(data) {
130
- const chartData = buildDashboardChartData(data);
131
- const hasChartData = chartData.taskStatus.length > 0 || chartData.graphState.length > 0;
132
- charts.hidden = !hasChartData;
133
- if (!hasChartData || !window.Chart) { return; }
134
- taskStatusChart = renderChart(taskStatusChart, "task-status-chart", "doughnut", chartData.taskStatus);
135
- graphStateChart = renderChart(graphStateChart, "graph-state-chart", "bar", chartData.graphState);
136
- }
137
- function buildDashboardChartData(data) {
138
- return {
139
- taskStatus: Object.entries(data.status.tasks.byStatus).map(function (entry) { return { label: entry[0], value: entry[1] }; }).filter(function (slice) { return slice.value > 0; }),
140
- graphState: [["ready", data.graph.ready.length], ["blocked", data.graph.blocked.length], ["locked", data.graph.locked.length], ["complete", data.graph.complete.length]].map(function (entry) { return { label: entry[0], value: entry[1] }; }).filter(function (slice) { return slice.value > 0; }),
141
- };
142
- }
143
- function renderChart(current, canvasId, type, slices) {
144
- const style = getComputedStyle(document.documentElement);
145
- const colors = [style.getPropertyValue("--accent").trim(), style.getPropertyValue("--ok").trim(), style.getPropertyValue("--warn").trim(), "#8a6fdf", "#d36d8c", "#5f9ea0"];
146
- const textColor = style.getPropertyValue("--ink").trim();
147
- const lineColor = style.getPropertyValue("--line").trim();
148
- if (current) { current.destroy(); }
149
- return new Chart(document.getElementById(canvasId), {
150
- type,
151
- data: { labels: slices.map(function (slice) { return slice.label; }), datasets: [{ data: slices.map(function (slice) { return slice.value; }), backgroundColor: colors, borderColor: lineColor, borderWidth: 1 }] },
152
- options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: "bottom", labels: { color: textColor } } }, scales: type === "bar" ? { x: { ticks: { color: textColor }, grid: { color: lineColor } }, y: { beginAtZero: true, ticks: { color: textColor, precision: 0 }, grid: { color: lineColor } } } : {} },
153
- });
154
- }
155
- async function loadEvidence() {
156
- const query = new URLSearchParams();
157
- if (evidenceTask.value) { query.set("task", evidenceTask.value); }
158
- if (evidenceType.value) { query.set("type", evidenceType.value); }
159
- const response = await fetch("/api/evidence/view?" + query.toString());
160
- renderEvidence(await response.json());
161
- }
162
- function renderEvidenceControls(data) {
163
- replace(evidenceTask, [option("", "All tasks")].concat(data.tasks.map(function (task) { return option(task.id, task.id); })));
164
- replace(evidenceType, [option("", "All types")].concat(["command", "file", "screenshot", "trace", "video", "log", "report"].map(function (type) { return option(type, type); })));
165
- replace(playwrightTask, data.tasks.map(function (task) { return option(task.id, task.id); }));
166
- }
167
- function renderEvidence(items) {
168
- replace(evidenceList, items.length > 0 ? items.map(evidenceItem) : [empty("No evidence yet", "Attach command, report, screenshot, trace, video, or log evidence.")]);
169
- }
170
- function evidenceItem(item) {
171
- const node = listItem(item.summary, (item.taskId || "no-task") + " - " + item.type + " - " + item.actor);
172
- const row = document.createElement("div"); row.className = "tag-row";
173
- item.artifacts.forEach(function (artifact) {
174
- if (artifact.exists) { const link = document.createElement("a"); link.className = "artifact-link"; link.href = artifact.url; link.target = "_blank"; link.rel = "noreferrer"; link.textContent = artifact.path; row.append(link); }
175
- else { const miss = document.createElement("span"); miss.className = "missing"; miss.textContent = "Missing: " + artifact.path; row.append(miss); }
176
- });
177
- node.append(row); return node;
178
- }
179
- function renderRoles(report) {
180
- replace(rolesView, report.roles.slice(0, 12).map(function (entry) {
181
- const node = listItem(entry.role.name, entry.state + " - " + entry.role.description);
182
- const tags = document.createElement("div"); tags.className = "tag-row";
183
- ["activationCriteria", "expectedEvidence", "gateParticipation"].forEach(function (field) { (entry.role[field] || []).slice(0, 3).forEach(function (value) { const tag = document.createElement("span"); tag.className = "tag"; tag.textContent = value; tags.append(tag); }); });
184
- node.append(tags); return node;
185
- }));
186
- }
187
- function renderPlanning(report) {
188
- const totals = report.planning.totals;
189
- const rows = [listItem("Graph totals", "ready " + totals.ready + " - blocked " + totals.blocked + " - locked " + totals.locked + " - complete " + totals.complete)].concat(report.planning.byRole.map(function (role) { return listItem(role.roleId, "ready " + role.ready + " - blocked " + role.blocked + " - locked " + role.locked + " - complete " + role.complete); }));
190
- replace(planningView, rows);
191
- }
192
- function renderPlaywrightTasks(tasks) { if (tasks.length === 0) { replace(playwrightTask, [option("", "No tasks")]); } }
193
- async function loadPlaywrightPlan() {
194
- if (!playwrightTask.value) { replace(playwrightPlan, [empty("No task selected", "Create a task to generate a Playwright plan.")]); return; }
195
- const response = await fetch("/api/playwright/plan?task=" + encodeURIComponent(playwrightTask.value));
196
- const plan = await response.json();
197
- replace(playwrightPlan, plan.scenarios.map(function (scenario) { return listItem(scenario.name, scenario.assertions.join(" | ")); }));
198
- }
199
- async function attachPlaywrightEvidence() {
200
- const body = { task: playwrightTask.value, kind: document.querySelector("#playwright-kind").value, path: document.querySelector("#playwright-path").value, summary: document.querySelector("#playwright-summary").value };
201
- const response = await fetch("/api/playwright/evidence", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(body) });
202
- if (!response.ok) { setLoading("Evidence attach failed", "warn"); return; }
203
- await loadDashboard();
204
- }
205
- function option(value, label) { const node = document.createElement("option"); node.value = value; node.textContent = label; return node; }
206
- function renderValidation(report) {
207
- if (report.valid && report.warnings.length === 0) { replace(validation, [empty("Workspace is valid", "No validation issues were reported.")]); return; }
208
- replace(validation, report.errors.concat(report.warnings).map(function (message) { return listItem(message, report.errors.includes(message) ? "Error" : "Warning"); }));
209
- }
210
- function renderGraph(plan) {
211
- const rows = [["Ready", plan.ready], ["Blocked", plan.blocked], ["Locked", plan.locked], ["Complete", plan.complete]].flatMap(function (group) { return group[1].slice(0, 4).map(function (item) { return listItem(item.title, group[0] + " - " + item.id + " - " + item.ownerRole); }); });
212
- replace(graph, rows.length > 0 ? rows : [empty("No tasks yet", "Add tasks with orchestra task add to start planning.")]);
213
- }
214
- function renderActions(data) {
215
- const next = [];
216
- if (!data.validation.valid) { next.push(listItem("Fix workspace validation", "Run orchestra validate for full details.")); }
217
- if (data.graph.ready.length > 0) { next.push(listItem("Start ready work", data.graph.ready.length + " task(s) can run now.")); }
218
- if (data.approvals.length > 0) { next.push(listItem("Review pending approvals", data.approvals.length + " approval artifact(s) found.")); }
219
- if (data.status.tasks.total === 0) { next.push(listItem("Create the first task", "Use a backlog item, owner role, scope, and acceptance criteria.")); }
220
- replace(actions, next.length > 0 ? next : [empty("No immediate action", "The workflow has no blocking console actions.")]);
221
- }
222
- function metric(value, label) { const node = document.createElement("div"); node.className = "metric"; const strong = document.createElement("strong"); strong.textContent = value; const span = document.createElement("span"); span.textContent = label; node.append(strong, span); return node; }
223
- function listItem(title, detail) { const node = document.createElement("li"); node.className = "list-item"; const strong = document.createElement("strong"); strong.textContent = title; const span = document.createElement("span"); span.textContent = detail; node.append(strong, span); return node; }
224
- function empty(title, detail) { const node = document.createElement("div"); node.className = "empty-state"; const strong = document.createElement("strong"); strong.textContent = title; const p = document.createElement("p"); p.textContent = detail; node.append(strong, p); return node; }
225
- function replace(parent, nodes) { parent.replaceChildren(...nodes); }
226
- function renderEmpty(title, detail) { replace(metrics, [empty(title, detail)]); charts.hidden = true; replace(validation, []); replace(graph, []); replace(actions, []); }
227
- function setLoading(label, tone) { statePill.textContent = label; statePill.className = ("pill " + tone).trim(); }
228
- </script>
74
+ <script type="module" src="/assets/web-console.js"></script>
229
75
  </body>
230
76
  </html>`;
231
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"web-console.js","sourceRoot":"","sources":["../src/web-console.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAoOX,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"web-console.js","sourceRoot":"","sources":["../src/web-console.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0EX,CAAC;AACT,CAAC"}
@@ -276,9 +276,11 @@ function requiredRolesFor(impactAreas) {
276
276
  security: "security",
277
277
  sre: "sre",
278
278
  dba: "dba",
279
+ data: "data_engineer",
279
280
  devops: "devops",
280
- compliance: "compliance",
281
- ux: "ux-ui",
281
+ compliance: "compliance_privacy",
282
+ accessibility: "accessibility_reviewer",
283
+ ux: "ux_ui_designer",
282
284
  };
283
285
  return [...new Set(impactAreas.map((area) => roleByImpact[area]))];
284
286
  }