@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
@@ -0,0 +1,96 @@
1
+ import { FILES } from "./constants.js";
2
+ import { readJson, resolveWorkflowPath } from "./fs-utils.js";
3
+ import { planSkillsForTask } from "./skills.js";
4
+ import { readEvents } from "./workspace.js";
5
+ import { consentReference } from "./telemetry-consent.js";
6
+ export async function buildTelemetryRecords(root, consent, recordType) {
7
+ const tasks = await readJson(resolveWorkflowPath(root, FILES.tasks), []);
8
+ const events = await readEvents(root);
9
+ const provenance = events
10
+ .filter((event) => event.type === "MODEL_PROVENANCE_RECORDED")
11
+ .map((event) => event.metadata);
12
+ const records = [];
13
+ for (const task of tasks) {
14
+ const skills = await planSkillsForTask(task.id, root);
15
+ const taskEvents = events.filter((event) => event.taskId === task.id);
16
+ const qualityLabels = qualityLabelsForTask(task, taskEvents);
17
+ const promptFields = promptFieldsForLevel(consent.level, task);
18
+ records.push(removeUndefinedTelemetryRecord({
19
+ schemaVersion: 1,
20
+ recordType,
21
+ taskId: task.id,
22
+ taskTitle: task.title,
23
+ taskStatus: task.status,
24
+ ownerRole: task.ownerRole,
25
+ selectedRoles: Array.from(new Set([task.ownerRole, ...taskEvents.map((event) => event.actor)])),
26
+ selectedSkills: skills.selected.map((item) => item.skill.id),
27
+ sourceGroups: skills.sourceGroups,
28
+ providerMetadata: provenance
29
+ .filter((record) => record.task === task.id)
30
+ .map((record) => ({
31
+ role: record.role,
32
+ provider: record.provider,
33
+ model: record.model,
34
+ promptId: record.promptId,
35
+ responseId: record.responseId,
36
+ inputTokens: record.inputTokens,
37
+ outputTokens: record.outputTokens,
38
+ estimatedCostUsd: record.estimatedCostUsd,
39
+ })),
40
+ qualityOutcome: {
41
+ reviews: taskEvents.filter((event) => event.type === "REVIEW_RECORDED").length,
42
+ evidence: taskEvents.filter((event) => event.type === "EVIDENCE_ADDED").length,
43
+ gatesPassed: taskEvents.filter((event) => event.type === "GATE_PASSED").length,
44
+ gatesBlocked: taskEvents.filter((event) => event.type === "GATE_BLOCKED").length,
45
+ },
46
+ ...promptFields,
47
+ expectedBehavior: recordType === "eval-dataset-item"
48
+ ? (task.acceptanceCriteria ?? []).join("; ")
49
+ : undefined,
50
+ qualityLabels,
51
+ consent: consentReference(consent),
52
+ redaction: { redactedFields: [], blockedFields: [] },
53
+ }));
54
+ }
55
+ return records;
56
+ }
57
+ function promptFieldsForLevel(level, task) {
58
+ if (level === "prompt-summary" ||
59
+ level === "prompt-sample" ||
60
+ level === "eval-dataset") {
61
+ const promptSummary = [
62
+ task.goal,
63
+ task.scope,
64
+ task.blockedReason,
65
+ ...(task.acceptanceCriteria ?? []),
66
+ ]
67
+ .filter(Boolean)
68
+ .join("; ");
69
+ if (level === "prompt-sample" || level === "eval-dataset") {
70
+ return { promptSummary, promptSample: promptSummary };
71
+ }
72
+ return { promptSummary };
73
+ }
74
+ return {};
75
+ }
76
+ function qualityLabelsForTask(task, events) {
77
+ const labels = new Set();
78
+ if (task.status === "approved" || task.status === "done") {
79
+ labels.add("approved");
80
+ }
81
+ if (events.some((event) => event.type === "REVIEW_RECORDED" &&
82
+ event.summary.toLowerCase().includes("approve"))) {
83
+ labels.add("approved");
84
+ }
85
+ if (events.some((event) => event.type === "GATE_BLOCKED")) {
86
+ labels.add("blocked");
87
+ }
88
+ if (events.some((event) => event.type === "EVIDENCE_ADDED")) {
89
+ labels.add("evidence-backed");
90
+ }
91
+ return Array.from(labels);
92
+ }
93
+ function removeUndefinedTelemetryRecord(value) {
94
+ return Object.fromEntries(Object.entries(value).filter((entry) => entry[1] !== undefined));
95
+ }
96
+ //# sourceMappingURL=telemetry-records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-records.js","sourceRoot":"","sources":["../src/telemetry-records.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface TelemetryRedactionReport {
2
+ redactedFields: string[];
3
+ blockedFields: string[];
4
+ }
5
+ export declare function redactTelemetryData<T>(value: T): {
6
+ value: T;
7
+ report: TelemetryRedactionReport;
8
+ };
9
+ export declare function mergeRedactionReports(reports: TelemetryRedactionReport[]): TelemetryRedactionReport;
@@ -0,0 +1,55 @@
1
+ export function redactTelemetryData(value) {
2
+ const report = {
3
+ redactedFields: [],
4
+ blockedFields: [],
5
+ };
6
+ const redacted = redactValue(value, [], report);
7
+ return { value: redacted, report };
8
+ }
9
+ function redactValue(value, pathSegments, report) {
10
+ if (typeof value === "string") {
11
+ return redactString(value, pathSegments.join("."), report);
12
+ }
13
+ if (Array.isArray(value)) {
14
+ return value.map((item, index) => redactValue(item, pathSegments.concat(String(index)), report));
15
+ }
16
+ if (value && typeof value === "object") {
17
+ return Object.fromEntries(Object.entries(value).map(([key, entry]) => [
18
+ key,
19
+ redactValue(entry, pathSegments.concat(key), report),
20
+ ]));
21
+ }
22
+ return value;
23
+ }
24
+ function redactString(value, fieldPath, report) {
25
+ const lower = fieldPath.toLowerCase();
26
+ if (lower.includes(".env") || lower.includes("credential")) {
27
+ report.blockedFields.push(fieldPath);
28
+ return "[BLOCKED]";
29
+ }
30
+ let output = value;
31
+ const replacements = [
32
+ [/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi, "[REDACTED_EMAIL]"],
33
+ [/(sk|ghp|github_pat)_[A-Za-z0-9_-]{12,}/g, "[REDACTED_TOKEN]"],
34
+ [/Bearer\s+[A-Za-z0-9._-]+/gi, "Bearer [REDACTED_TOKEN]"],
35
+ [
36
+ /\b[A-Za-z0-9_-]{24,}\.[A-Za-z0-9_-]{24,}\.[A-Za-z0-9_-]{24,}\b/g,
37
+ "[REDACTED_TOKEN]",
38
+ ],
39
+ [/\/Users\/[^\s/]+/g, "/Users/[REDACTED_USER]"],
40
+ ];
41
+ for (const [pattern, replacement] of replacements) {
42
+ output = output.replace(pattern, replacement);
43
+ }
44
+ if (output !== value) {
45
+ report.redactedFields.push(fieldPath);
46
+ }
47
+ return output;
48
+ }
49
+ export function mergeRedactionReports(reports) {
50
+ return {
51
+ redactedFields: Array.from(new Set(reports.flatMap((report) => report.redactedFields))),
52
+ blockedFields: Array.from(new Set(reports.flatMap((report) => report.blockedFields))),
53
+ };
54
+ }
55
+ //# sourceMappingURL=telemetry-redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-redaction.js","sourceRoot":"","sources":["../src/telemetry-redaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { TelemetryLevel } from "./types.js";
2
+ import type { TelemetryConsentReference } from "./telemetry-consent.js";
3
+ import type { TelemetryRedactionReport } from "./telemetry-redaction.js";
4
+ export interface TelemetryExportRecord {
5
+ schemaVersion: 1;
6
+ recordType: "workflow-task" | "eval-dataset-item";
7
+ taskId: string;
8
+ taskTitle: string;
9
+ taskStatus: string;
10
+ ownerRole: string;
11
+ selectedRoles: string[];
12
+ selectedSkills: string[];
13
+ sourceGroups: string[];
14
+ providerMetadata: Array<{
15
+ role: string;
16
+ provider: string;
17
+ model: string;
18
+ promptId: string;
19
+ responseId: string;
20
+ inputTokens: number;
21
+ outputTokens: number;
22
+ estimatedCostUsd: number;
23
+ }>;
24
+ qualityOutcome: {
25
+ reviews: number;
26
+ evidence: number;
27
+ gatesPassed: number;
28
+ gatesBlocked: number;
29
+ };
30
+ promptSummary?: string;
31
+ promptSample?: string;
32
+ expectedBehavior?: string;
33
+ qualityLabels?: string[];
34
+ consent: TelemetryConsentReference;
35
+ redaction: TelemetryRedactionReport;
36
+ }
37
+ export interface TelemetryExportSummary {
38
+ dryRun: boolean;
39
+ level: TelemetryLevel;
40
+ file?: string;
41
+ recordCount: number;
42
+ redaction: TelemetryRedactionReport;
43
+ }
44
+ export interface TelemetrySubmissionAudit {
45
+ endpoint: string;
46
+ file: string;
47
+ fileHash: string;
48
+ consent: TelemetryConsentReference;
49
+ submittedAt: string;
50
+ result: "recorded" | "failed";
51
+ message: string;
52
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=telemetry-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-types.js","sourceRoot":"","sources":["../src/telemetry-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from "./telemetry-consent.js";
2
+ export * from "./telemetry-redaction.js";
3
+ export * from "./telemetry-export.js";
4
+ export type * from "./telemetry-types.js";
@@ -0,0 +1,4 @@
1
+ export * from "./telemetry-consent.js";
2
+ export * from "./telemetry-redaction.js";
3
+ export * from "./telemetry-export.js";
4
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -2,6 +2,133 @@ export type TaskStatus = "pending" | "ready" | "in_progress" | "blocked" | "revi
2
2
  export type ReviewResult = "approve" | "block" | "changes";
3
3
  export type Severity = "info" | "low" | "medium" | "high" | "critical";
4
4
  export type EvidenceType = "command" | "file" | "screenshot" | "trace" | "video" | "log" | "report";
5
+ export type SkillLoadBudget = "small" | "normal" | "large";
6
+ export type SkillRenderTarget = "generic" | "claude" | "cursor" | "codex" | "vscode" | "windsurf";
7
+ export type RuntimeAdapterKind = "llm" | "ide" | "cli";
8
+ export interface RuntimeAdapter {
9
+ target: SkillRenderTarget;
10
+ label: string;
11
+ kind: RuntimeAdapterKind;
12
+ defaultInstructionFiles: string[];
13
+ supportsStructuredPayload: boolean;
14
+ supportsManagedBlocks: boolean;
15
+ supportsImports: boolean;
16
+ guidance: string;
17
+ }
18
+ export type WorkspaceClassificationKind = "project" | "advisory" | "unsafe" | "unknown";
19
+ export type WorkspaceWritePolicy = "allow" | "confirm_required" | "blocked";
20
+ export interface WorkspaceClassification {
21
+ root: string;
22
+ normalizedRoot: string;
23
+ kind: WorkspaceClassificationKind;
24
+ confidence: "high" | "medium" | "low";
25
+ signals: string[];
26
+ reasons: string[];
27
+ writePolicy: WorkspaceWritePolicy;
28
+ recommendedAction: string;
29
+ supportedTargets: SkillRenderTarget[];
30
+ }
31
+ export interface Skill {
32
+ id: string;
33
+ name: string;
34
+ summary: string;
35
+ triggers: string[];
36
+ roles: string[];
37
+ capabilities: string[];
38
+ riskAreas: string[];
39
+ sourceGroups: string[];
40
+ entry: string;
41
+ assets: string[];
42
+ evidence: EvidenceType[];
43
+ loadBudget: SkillLoadBudget;
44
+ instructions: string[];
45
+ }
46
+ export interface SkillPlanItem {
47
+ skill: Skill;
48
+ score: number;
49
+ rationale: string[];
50
+ }
51
+ export interface SkillPlan {
52
+ taskId: string;
53
+ selected: SkillPlanItem[];
54
+ skipped: SkillPlanItem[];
55
+ sourceGroups: string[];
56
+ }
57
+ export interface SkillValidationReport {
58
+ valid: boolean;
59
+ errors: string[];
60
+ warnings: string[];
61
+ }
62
+ export interface CollaborationFlowStep {
63
+ from: string;
64
+ to: string;
65
+ purpose: string;
66
+ requiredContext: string[];
67
+ requiredArtifacts: string[];
68
+ exitCriteria: string[];
69
+ }
70
+ export interface CollaborationFlow {
71
+ id: string;
72
+ name: string;
73
+ summary: string;
74
+ triggers: string[];
75
+ roles: string[];
76
+ riskAreas: string[];
77
+ requiredContext: string[];
78
+ requiredArtifacts: string[];
79
+ exitCriteria: string[];
80
+ optionalReviewers: string[];
81
+ steps: CollaborationFlowStep[];
82
+ }
83
+ export interface CollaborationFlowRecommendation {
84
+ flow: CollaborationFlow;
85
+ score: number;
86
+ rationale: string[];
87
+ missingArtifacts: string[];
88
+ requiredHandoffFields: string[];
89
+ optionalReviewers: string[];
90
+ }
91
+ export interface WorkflowTemplate {
92
+ id: string;
93
+ name: string;
94
+ summary: string;
95
+ triggers: string[];
96
+ roles: string[];
97
+ riskAreas: string[];
98
+ inputs: string[];
99
+ outputs: string[];
100
+ evidenceRequirements: EvidenceType[];
101
+ gates: string[];
102
+ compatibleSkills: string[];
103
+ steps: string[];
104
+ }
105
+ export interface WorkflowTemplateSelection {
106
+ template: WorkflowTemplate;
107
+ score: number;
108
+ rationale: string[];
109
+ missingEvidence: EvidenceType[];
110
+ }
111
+ export interface RenderedWorkflowTemplate {
112
+ target: SkillRenderTarget;
113
+ taskId?: string;
114
+ selected: WorkflowTemplateSelection[];
115
+ content: string;
116
+ }
117
+ export interface AgentLessonInput {
118
+ taskId?: string;
119
+ actor: string;
120
+ operation: string;
121
+ failedAction: string;
122
+ errorSignature: string;
123
+ rootCause: string;
124
+ fix: string;
125
+ prevention: string;
126
+ appliesTo: string[];
127
+ verifiedBy: string[];
128
+ }
129
+ export interface AgentLesson extends AgentLessonInput {
130
+ timestamp: string;
131
+ }
5
132
  export interface Role {
6
133
  id: string;
7
134
  name: string;
@@ -28,7 +155,7 @@ export interface QaGateMetadata {
28
155
  deferredRationale?: string;
29
156
  deferredOwner?: string;
30
157
  }
31
- export type RiskImpactArea = "security" | "sre" | "dba" | "devops" | "compliance" | "ux";
158
+ export type RiskImpactArea = "security" | "sre" | "dba" | "data" | "devops" | "compliance" | "accessibility" | "ux";
32
159
  export interface RiskAcceptance {
33
160
  acceptedBy?: string;
34
161
  rationale?: string;
@@ -207,11 +334,25 @@ export interface BudgetPolicy {
207
334
  byRole: Record<string, BudgetLimit>;
208
335
  byTask: Record<string, BudgetLimit>;
209
336
  }
337
+ export type TelemetryLevel = "off" | "metadata" | "prompt-summary" | "prompt-sample" | "eval-dataset";
338
+ export interface TelemetryConsentState {
339
+ enabled: boolean;
340
+ level: TelemetryLevel;
341
+ policyVersion: string;
342
+ actor: string;
343
+ updatedAt?: string;
344
+ }
345
+ export interface GitHubConfig {
346
+ autoCreatePr?: boolean;
347
+ baseBranch?: string;
348
+ }
210
349
  export interface WorkflowConfig {
211
350
  version: number;
212
351
  providers: WorkflowProvidersConfig;
213
352
  budgets?: BudgetPolicy;
214
353
  tools: Record<string, ToolConfig>;
354
+ telemetry?: TelemetryConsentState;
355
+ github?: GitHubConfig;
215
356
  staticAnalysis: {
216
357
  preCommit: {
217
358
  required: boolean;
@@ -323,6 +464,18 @@ export interface TaskGraphPlan {
323
464
  locked: TaskGraphLockedItem[];
324
465
  complete: TaskGraphCompleteItem[];
325
466
  }
467
+ export interface PullRequestReviewAnalysis {
468
+ behaviorSummary: string;
469
+ changedFiles: string[];
470
+ testEvidence: string[];
471
+ unresolvedQuestions: string[];
472
+ requiredReviewers: string[];
473
+ missingReviewers: string[];
474
+ checklist: string[];
475
+ evidenceGaps: string[];
476
+ mergeBlocked: boolean;
477
+ mergeBlockers: string[];
478
+ }
326
479
  export interface PullRequestSummary {
327
480
  task: Task;
328
481
  handoffs: EventEntry[];
@@ -333,6 +486,7 @@ export interface PullRequestSummary {
333
486
  risks: string[];
334
487
  rollout: string;
335
488
  rollback: string;
489
+ review: PullRequestReviewAnalysis;
336
490
  }
337
491
  export interface PlaywrightScenario {
338
492
  name: string;
@@ -433,6 +587,27 @@ export interface DecisionInput {
433
587
  export interface DecisionRecord extends DecisionInput {
434
588
  artifact: string;
435
589
  }
590
+ export type DelegationRecommendation = "local" | "single_delegate" | "parallel_delegate" | "review_delegate" | "no_delegation";
591
+ export type DelegationMode = "execute" | "review";
592
+ export interface DelegationAssignment {
593
+ role: string;
594
+ mode: DelegationMode;
595
+ rationale: string[];
596
+ writeScopes: string[];
597
+ expectedOutputs: string[];
598
+ }
599
+ export interface DelegationDecision {
600
+ taskId: string;
601
+ recommendation: DelegationRecommendation;
602
+ complexityScore: number;
603
+ urgency: "normal" | "high";
604
+ rationale: string[];
605
+ blockingConditions: string[];
606
+ contextBundle: string[];
607
+ expectedOutputs: string[];
608
+ delegates: DelegationAssignment[];
609
+ disjointWriteScopes: boolean;
610
+ }
436
611
  export interface TaskContext {
437
612
  task: Task;
438
613
  dependencies: DependencyReport;
@@ -443,7 +618,12 @@ export interface TaskContext {
443
618
  evidence: EventEntry[];
444
619
  gates: EventEntry[];
445
620
  modelProvenance: ModelProvenanceRecord[];
621
+ skills: SkillPlan;
622
+ telemetry: TelemetryConsentState;
446
623
  risks: string[];
624
+ delegation?: DelegationDecision;
625
+ collaborationFlow: CollaborationFlowRecommendation | null;
626
+ workflowTemplates: WorkflowTemplateSelection[];
447
627
  }
448
628
  export interface ExecutionPlanStep {
449
629
  id: string;
@@ -548,3 +728,126 @@ export interface ApprovalDecisionInput {
548
728
  approver: string;
549
729
  rationale: string;
550
730
  }
731
+ export type SizingLabel = "xs" | "s" | "m" | "l" | "xl";
732
+ export declare const SIZING_LABELS: SizingLabel[];
733
+ export type AutonomousGateMode = "none" | "phase" | "all";
734
+ export type AutonomousPhaseStatus = "pending" | "running" | "done" | "gate_paused" | "qa_failed" | "blocked" | "awaiting_clarification";
735
+ export interface AutonomousPhase {
736
+ phase: string;
737
+ role: string;
738
+ status: AutonomousPhaseStatus;
739
+ taskId: string;
740
+ handoffArtifact?: string;
741
+ reviewArtifact?: string;
742
+ startedAt: string;
743
+ completedAt?: string;
744
+ notes?: string;
745
+ }
746
+ export interface AutonomousRun {
747
+ id: string;
748
+ taskId: string;
749
+ gates: AutonomousGateMode;
750
+ maxIterations: number;
751
+ qaIterations: number;
752
+ phases: AutonomousPhase[];
753
+ status: "running" | "paused" | "done" | "failed";
754
+ createdAt: string;
755
+ updatedAt: string;
756
+ }
757
+ export interface AutonomousRunResult {
758
+ run: AutonomousRun;
759
+ file: string;
760
+ cwd: string;
761
+ }
762
+ export type ClarificationStatus = "open" | "answered";
763
+ export type ClarificationTarget = "po" | "architect";
764
+ export interface ClarificationRecord {
765
+ id: string;
766
+ runId: string;
767
+ taskId: string;
768
+ fromRole: string;
769
+ toRole: string;
770
+ question: string;
771
+ answer?: string;
772
+ status: ClarificationStatus;
773
+ createdAt: string;
774
+ answeredAt?: string;
775
+ }
776
+ export interface ClarificationInput {
777
+ runId: string;
778
+ taskId: string;
779
+ fromRole: string;
780
+ to: ClarificationTarget;
781
+ question: string;
782
+ }
783
+ export interface ClarificationAnswerInput {
784
+ id: string;
785
+ answer: string;
786
+ }
787
+ export type EstimateConfidence = "low" | "medium" | "high";
788
+ export interface EstimateRecord {
789
+ id: string;
790
+ taskId: string;
791
+ sizingLabel: SizingLabel;
792
+ soloEstimateDays: number;
793
+ aiUnguidedEstimateDays: number;
794
+ confidence: EstimateConfidence;
795
+ declaredBy: string;
796
+ declaredAt: string;
797
+ }
798
+ export interface EstimateInput {
799
+ taskId: string;
800
+ sizingLabel: SizingLabel;
801
+ soloEstimateDays: number;
802
+ aiUnguidedEstimateDays: number;
803
+ confidence: EstimateConfidence;
804
+ declaredBy: string;
805
+ }
806
+ export interface BenchmarkQualitySignals {
807
+ reviewCount: number;
808
+ blockingReviews: number;
809
+ evidenceCount: number;
810
+ gateBlockCount: number;
811
+ lessonCount: number;
812
+ totalInputTokens: number;
813
+ totalOutputTokens: number;
814
+ estimatedCostUsd: number;
815
+ }
816
+ export interface BenchmarkResult {
817
+ taskId: string;
818
+ sizingLabel: SizingLabel;
819
+ soloEstimateDays: number;
820
+ aiUnguidedEstimateDays: number;
821
+ actualDays: number | null;
822
+ vsSoloPct: number | null;
823
+ vsAiUnguidedPct: number | null;
824
+ qaIterations: number;
825
+ quality: BenchmarkQualitySignals;
826
+ status: "pending" | "complete";
827
+ }
828
+ export interface BenchmarkSummary {
829
+ stories: BenchmarkResult[];
830
+ totalWithActuals: number;
831
+ avgVsSoloPct: number | null;
832
+ avgVsAiUnguidedPct: number | null;
833
+ }
834
+ export interface BurndownPoint {
835
+ day: number;
836
+ remaining: number;
837
+ completedTaskIds?: string[];
838
+ }
839
+ export interface TaskEstimateBreakdown {
840
+ taskId: string;
841
+ architectPoints: number | null;
842
+ developerPoints: number | null;
843
+ resolvedPoints: number;
844
+ completedAt: string | null;
845
+ }
846
+ export interface BurndownSeries {
847
+ sprintTaskIds: string[];
848
+ totalPoints: number;
849
+ idealLine: BurndownPoint[];
850
+ actualLine: BurndownPoint[];
851
+ taskBreakdown: TaskEstimateBreakdown[];
852
+ warnings: string[];
853
+ }
package/dist/types.js CHANGED
@@ -1,2 +1,2 @@
1
- export {};
1
+ export const SIZING_LABELS = ["xs", "s", "m", "l", "xl"];
2
2
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAw2BA,MAAM,CAAC,MAAM,aAAa,GAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { EvidenceInput, ReadinessReport, ReviewInput, Task } from "./types.js";
1
+ import type { EvidenceInput, EvidenceType, ReadinessReport, ReviewInput, Task } from "./types.js";
2
2
  export declare function assertObject(value: unknown, name: string): asserts value is Record<string, unknown>;
3
3
  export declare function validateLocks(locks: unknown, taskIds: Set<string>, roleIds: Set<string>): void;
4
4
  export declare function taskIdsFor(tasks: Task[]): Set<string>;
@@ -6,5 +6,7 @@ export declare function assertNonEmptyString(value: unknown, name: string): asse
6
6
  export declare function validateRoles(roles: unknown): Set<string>;
7
7
  export declare function validateTasks(tasks: unknown, roleIds: Set<string>): void;
8
8
  export declare function validateReviewInput(input: ReviewInput, roleIds: Set<string>): void;
9
+ export declare function normalizeReviewRole(role: string, roleIds: Set<string>): string | undefined;
9
10
  export declare function validateEvidenceInput(input: EvidenceInput, roleIds: Set<string>): void;
11
+ export declare function normalizeEvidenceType(type: string): EvidenceType | undefined;
10
12
  export declare function validateReadiness(task: Task): ReadinessReport;