@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.
- package/AGENTS.md +90 -0
- package/CHANGELOG.md +104 -0
- package/CLAUDE.md +103 -0
- package/README.md +173 -22
- package/dist/assets/web-console.js +743 -0
- package/dist/autonomous-workflow.d.ts +45 -0
- package/dist/autonomous-workflow.js +386 -0
- package/dist/autonomous-workflow.js.map +1 -0
- package/dist/benchmark.d.ts +8 -0
- package/dist/benchmark.js +193 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/burndown.d.ts +3 -0
- package/dist/burndown.js +141 -0
- package/dist/burndown.js.map +1 -0
- package/dist/clarification.d.ts +6 -0
- package/dist/clarification.js +88 -0
- package/dist/clarification.js.map +1 -0
- package/dist/cli.js +221 -4
- package/dist/cli.js.map +1 -1
- package/dist/collaboration-flows.d.ts +5 -0
- package/dist/collaboration-flows.js +256 -0
- package/dist/collaboration-flows.js.map +1 -0
- package/dist/command-manifest.d.ts +11 -0
- package/dist/command-manifest.js +52 -0
- package/dist/command-manifest.js.map +1 -0
- package/dist/commands.d.ts +39 -0
- package/dist/commands.js +1069 -2
- package/dist/commands.js.map +1 -1
- package/dist/constants.d.ts +4 -0
- package/dist/constants.js +22 -0
- package/dist/constants.js.map +1 -1
- package/dist/defaults.d.ts +7 -11
- package/dist/defaults.js +7 -625
- package/dist/defaults.js.map +1 -1
- package/dist/delegation-decision.d.ts +14 -0
- package/dist/delegation-decision.js +391 -0
- package/dist/delegation-decision.js.map +1 -0
- package/dist/detect-commands.d.ts +3 -0
- package/dist/detect-commands.js +28 -0
- package/dist/detect-commands.js.map +1 -0
- package/dist/diagram-validation.d.ts +36 -0
- package/dist/diagram-validation.js +118 -0
- package/dist/diagram-validation.js.map +1 -0
- package/dist/fs-utils.d.ts +2 -0
- package/dist/fs-utils.js +75 -6
- package/dist/fs-utils.js.map +1 -1
- package/dist/github.d.ts +11 -0
- package/dist/github.js +48 -0
- package/dist/github.js.map +1 -0
- package/dist/health-checks.d.ts +28 -0
- package/dist/health-checks.js +219 -0
- package/dist/health-checks.js.map +1 -0
- package/dist/health-commands.d.ts +2 -0
- package/dist/health-commands.js +18 -0
- package/dist/health-commands.js.map +1 -0
- package/dist/instruction-apply.d.ts +34 -0
- package/dist/instruction-apply.js +150 -0
- package/dist/instruction-apply.js.map +1 -0
- package/dist/instruction-blocks.d.ts +22 -0
- package/dist/instruction-blocks.js +120 -0
- package/dist/instruction-blocks.js.map +1 -0
- package/dist/instruction-imports.d.ts +12 -0
- package/dist/instruction-imports.js +45 -0
- package/dist/instruction-imports.js.map +1 -0
- package/dist/instruction-stale.d.ts +9 -0
- package/dist/instruction-stale.js +106 -0
- package/dist/instruction-stale.js.map +1 -0
- package/dist/instruction-types.d.ts +66 -0
- package/dist/instruction-types.js +2 -0
- package/dist/instruction-types.js.map +1 -0
- package/dist/instruction-updates.d.ts +4 -0
- package/dist/instruction-updates.js +5 -0
- package/dist/instruction-updates.js.map +1 -0
- package/dist/knowledge-base.d.ts +10 -0
- package/dist/knowledge-base.js +117 -0
- package/dist/knowledge-base.js.map +1 -0
- package/dist/mcp-oauth-proxy.d.ts +39 -0
- package/dist/mcp-oauth-proxy.js +80 -0
- package/dist/mcp-oauth-proxy.js.map +1 -0
- package/dist/pr-review.d.ts +20 -0
- package/dist/pr-review.js +142 -0
- package/dist/pr-review.js.map +1 -0
- package/dist/project-detection.d.ts +22 -0
- package/dist/project-detection.js +174 -0
- package/dist/project-detection.js.map +1 -0
- package/dist/prompt-registry.d.ts +56 -0
- package/dist/prompt-registry.js +163 -0
- package/dist/prompt-registry.js.map +1 -0
- package/dist/release-candidate.d.ts +41 -0
- package/dist/release-candidate.js +196 -0
- package/dist/release-candidate.js.map +1 -0
- package/dist/release-commands.d.ts +4 -0
- package/dist/release-commands.js +50 -0
- package/dist/release-commands.js.map +1 -0
- package/dist/roles/ai-support-roles.d.ts +11 -0
- package/dist/roles/ai-support-roles.js +67 -0
- package/dist/roles/ai-support-roles.js.map +1 -0
- package/dist/roles/core-roles.d.ts +11 -0
- package/dist/roles/core-roles.js +144 -0
- package/dist/roles/core-roles.js.map +1 -0
- package/dist/roles/engineering-roles.d.ts +11 -0
- package/dist/roles/engineering-roles.js +176 -0
- package/dist/roles/engineering-roles.js.map +1 -0
- package/dist/roles/governance-roles.d.ts +11 -0
- package/dist/roles/governance-roles.js +117 -0
- package/dist/roles/governance-roles.js.map +1 -0
- package/dist/roles/index.d.ts +11 -0
- package/dist/roles/index.js +17 -0
- package/dist/roles/index.js.map +1 -0
- package/dist/roles/platform-ops-roles.d.ts +11 -0
- package/dist/roles/platform-ops-roles.js +158 -0
- package/dist/roles/platform-ops-roles.js.map +1 -0
- package/dist/roles/qa-ux-roles.d.ts +11 -0
- package/dist/roles/qa-ux-roles.js +193 -0
- package/dist/roles/qa-ux-roles.js.map +1 -0
- package/dist/roles/release-ops-roles.d.ts +11 -0
- package/dist/roles/release-ops-roles.js +109 -0
- package/dist/roles/release-ops-roles.js.map +1 -0
- package/dist/runtime-adapters.d.ts +6 -0
- package/dist/runtime-adapters.js +88 -0
- package/dist/runtime-adapters.js.map +1 -0
- package/dist/runtime-bootstrap.d.ts +12 -0
- package/dist/runtime-bootstrap.js +136 -0
- package/dist/runtime-bootstrap.js.map +1 -0
- package/dist/skills.d.ts +36 -0
- package/dist/skills.js +665 -0
- package/dist/skills.js.map +1 -0
- package/dist/subagent-protocol.d.ts +41 -0
- package/dist/subagent-protocol.js +179 -0
- package/dist/subagent-protocol.js.map +1 -0
- package/dist/telemetry-consent.d.ts +24 -0
- package/dist/telemetry-consent.js +95 -0
- package/dist/telemetry-consent.js.map +1 -0
- package/dist/telemetry-export.d.ts +14 -0
- package/dist/telemetry-export.js +126 -0
- package/dist/telemetry-export.js.map +1 -0
- package/dist/telemetry-records.d.ts +3 -0
- package/dist/telemetry-records.js +96 -0
- package/dist/telemetry-records.js.map +1 -0
- package/dist/telemetry-redaction.d.ts +9 -0
- package/dist/telemetry-redaction.js +55 -0
- package/dist/telemetry-redaction.js.map +1 -0
- package/dist/telemetry-types.d.ts +52 -0
- package/dist/telemetry-types.js +2 -0
- package/dist/telemetry-types.js.map +1 -0
- package/dist/telemetry.d.ts +4 -0
- package/dist/telemetry.js +4 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +304 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validation.d.ts +3 -1
- package/dist/validation.js +28 -5
- package/dist/validation.js.map +1 -1
- package/dist/web-api.js +167 -3
- package/dist/web-api.js.map +1 -1
- package/dist/web-console.js +6 -160
- package/dist/web-console.js.map +1 -1
- package/dist/workflow-gates.js +4 -2
- package/dist/workflow-gates.js.map +1 -1
- package/dist/workflow-services.js +143 -67
- package/dist/workflow-services.js.map +1 -1
- package/dist/workflow-templates.d.ts +10 -0
- package/dist/workflow-templates.js +141 -0
- package/dist/workflow-templates.js.map +1 -0
- package/dist/workspace-classification.d.ts +5 -0
- package/dist/workspace-classification.js +127 -0
- package/dist/workspace-classification.js.map +1 -0
- package/dist/workspace-validator.js +11 -1
- package/dist/workspace-validator.js.map +1 -1
- package/dist/workspace.d.ts +8 -4
- package/dist/workspace.js +111 -4
- package/dist/workspace.js.map +1 -1
- package/docs/autonomous-workflow.md +165 -0
- package/docs/benchmark.md +219 -0
- package/docs/dev-team-specialist-role-profiles.md +171 -0
- package/docs/mcp-oauth-proxy-evaluation.md +44 -0
- package/docs/multi-agent-orchestrator-backlog.md +413 -1
- package/docs/open-orchestra-dogfooding-findings.md +66 -0
- package/docs/orchestra-mvp.md +161 -3
- package/docs/runtime-adapters.md +86 -0
- package/docs/runtime-llm-flow.md +124 -0
- package/docs/setup-agents-dogfooding-findings.md +101 -0
- package/docs/skill-loading-strategy.md +114 -0
- package/docs/source-of-truth-and-agent-learning.md +83 -0
- package/package.json +9 -5
- package/rules/agent-roles.mdc +30 -0
- package/rules/ai-assisted-development.mdc +22 -0
- package/skills/agent-learning/SKILL.md +24 -0
- package/skills/agent-learning/manifest.json +40 -0
- package/skills/backlog-sync/SKILL.md +24 -0
- package/skills/backlog-sync/manifest.json +41 -0
- package/skills/diagram-export/SKILL.md +35 -0
- package/skills/diagram-export/manifest.json +40 -0
- package/skills/model-evaluation/SKILL.md +25 -0
- package/skills/model-evaluation/manifest.json +41 -0
- package/skills/playwright-evidence/SKILL.md +28 -0
- package/skills/playwright-evidence/manifest.json +46 -0
- package/skills/pr-review/SKILL.md +23 -0
- package/skills/pr-review/manifest.json +43 -0
- package/skills/prompt-registry/SKILL.md +24 -0
- package/skills/prompt-registry/manifest.json +45 -0
- package/skills/release-readiness/SKILL.md +25 -0
- package/skills/release-readiness/manifest.json +45 -0
- package/skills/source-of-truth/SKILL.md +24 -0
- package/skills/source-of-truth/manifest.json +47 -0
- package/skills/static-analysis/SKILL.md +26 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-types.js","sourceRoot":"","sources":["../src/telemetry-types.ts"],"names":[],"mappings":""}
|
|
@@ -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"}
|
package/dist/validation.d.ts
CHANGED
|
@@ -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;
|