@jterrats/open-orchestra 0.5.7 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +9 -8
- package/CLAUDE.md +13 -11
- package/README.md +78 -11
- package/dist/assets/web-console.js +169 -32
- package/dist/automation-evidence.d.ts +23 -0
- package/dist/automation-evidence.js +97 -0
- package/dist/automation-evidence.js.map +1 -0
- package/dist/autonomous-run-store.js +3 -3
- package/dist/autonomous-run-store.js.map +1 -1
- package/dist/benchmark.d.ts +4 -1
- package/dist/benchmark.js +93 -4
- package/dist/benchmark.js.map +1 -1
- package/dist/cli.js +73 -2
- package/dist/cli.js.map +1 -1
- package/dist/collaboration-flows.js +3 -5
- package/dist/collaboration-flows.js.map +1 -1
- package/dist/collection-utils.d.ts +3 -0
- package/dist/collection-utils.js +10 -0
- package/dist/collection-utils.js.map +1 -0
- package/dist/command-manifest.d.ts +12 -1
- package/dist/command-manifest.js +213 -10
- package/dist/command-manifest.js.map +1 -1
- package/dist/commands.d.ts +10 -5
- package/dist/commands.js +16 -6
- package/dist/commands.js.map +1 -1
- package/dist/config-migrations.d.ts +24 -0
- package/dist/config-migrations.js +102 -0
- package/dist/config-migrations.js.map +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +22 -0
- package/dist/constants.js.map +1 -1
- package/dist/dashboard-commands.d.ts +2 -0
- package/dist/dashboard-commands.js +14 -0
- package/dist/dashboard-commands.js.map +1 -0
- package/dist/defaults.d.ts +13 -0
- package/dist/defaults.js +13 -0
- package/dist/defaults.js.map +1 -1
- package/dist/delegation-decision.js +23 -8
- package/dist/delegation-decision.js.map +1 -1
- package/dist/delivery-commands.js +5 -0
- package/dist/delivery-commands.js.map +1 -1
- package/dist/delivery-dashboard-charts.d.ts +4 -0
- package/dist/delivery-dashboard-charts.js +156 -0
- package/dist/delivery-dashboard-charts.js.map +1 -0
- package/dist/delivery-dashboard-html.d.ts +2 -0
- package/dist/delivery-dashboard-html.js +115 -0
- package/dist/delivery-dashboard-html.js.map +1 -0
- package/dist/delivery-dashboard-types.d.ts +78 -0
- package/dist/delivery-dashboard-types.js +2 -0
- package/dist/delivery-dashboard-types.js.map +1 -0
- package/dist/delivery-dashboard.d.ts +8 -0
- package/dist/delivery-dashboard.js +124 -0
- package/dist/delivery-dashboard.js.map +1 -0
- package/dist/effort-classification.d.ts +7 -0
- package/dist/effort-classification.js +72 -0
- package/dist/effort-classification.js.map +1 -0
- package/dist/extension-commands.d.ts +3 -0
- package/dist/extension-commands.js +40 -0
- package/dist/extension-commands.js.map +1 -0
- package/dist/extensions.d.ts +22 -0
- package/dist/extensions.js +126 -0
- package/dist/extensions.js.map +1 -0
- package/dist/github.d.ts +2 -0
- package/dist/github.js +15 -3
- package/dist/github.js.map +1 -1
- package/dist/health-checks.js +51 -0
- package/dist/health-checks.js.map +1 -1
- package/dist/lucid-story-map.d.ts +73 -0
- package/dist/lucid-story-map.js +112 -0
- package/dist/lucid-story-map.js.map +1 -0
- package/dist/mcp-integrations.d.ts +19 -0
- package/dist/mcp-integrations.js +58 -0
- package/dist/mcp-integrations.js.map +1 -0
- package/dist/mcp-tool-adapter.d.ts +21 -0
- package/dist/mcp-tool-adapter.js +56 -0
- package/dist/mcp-tool-adapter.js.map +1 -0
- package/dist/metrics-commands.js +47 -13
- package/dist/metrics-commands.js.map +1 -1
- package/dist/model-commands.d.ts +5 -0
- package/dist/model-commands.js +95 -1
- package/dist/model-commands.js.map +1 -1
- package/dist/model-providers.js +13 -1
- package/dist/model-providers.js.map +1 -1
- package/dist/package-update-check.d.ts +18 -0
- package/dist/package-update-check.js +20 -0
- package/dist/package-update-check.js.map +1 -1
- package/dist/phase-executor.d.ts +1 -0
- package/dist/phase-executor.js +115 -14
- package/dist/phase-executor.js.map +1 -1
- package/dist/phase-playbooks.d.ts +15 -0
- package/dist/phase-playbooks.js +82 -0
- package/dist/phase-playbooks.js.map +1 -1
- package/dist/planning-commands.d.ts +1 -0
- package/dist/planning-commands.js +24 -1
- package/dist/planning-commands.js.map +1 -1
- package/dist/project-detection.js +9 -7
- package/dist/project-detection.js.map +1 -1
- package/dist/prompt-registry-update.d.ts +2 -0
- package/dist/prompt-registry-update.js +5 -1
- package/dist/prompt-registry-update.js.map +1 -1
- package/dist/prompt-registry-validation.js +39 -2
- package/dist/prompt-registry-validation.js.map +1 -1
- package/dist/qa-commands.d.ts +2 -0
- package/dist/qa-commands.js +18 -0
- package/dist/qa-commands.js.map +1 -0
- package/dist/qa-coverage.d.ts +24 -0
- package/dist/qa-coverage.js +189 -0
- package/dist/qa-coverage.js.map +1 -0
- package/dist/qa-readiness.d.ts +5 -0
- package/dist/qa-readiness.js +26 -0
- package/dist/qa-readiness.js.map +1 -0
- package/dist/refresh-generated.d.ts +10 -1
- package/dist/refresh-generated.js +83 -6
- package/dist/refresh-generated.js.map +1 -1
- package/dist/release-candidate.d.ts +9 -1
- package/dist/release-candidate.js +52 -1
- package/dist/release-candidate.js.map +1 -1
- package/dist/release-commands.js +161 -8
- package/dist/release-commands.js.map +1 -1
- package/dist/release-readiness.d.ts +33 -0
- package/dist/release-readiness.js +187 -3
- package/dist/release-readiness.js.map +1 -1
- package/dist/runtime-bootstrap.js +1 -1
- package/dist/runtime-bootstrap.js.map +1 -1
- package/dist/runtime-commands.d.ts +2 -0
- package/dist/runtime-commands.js +77 -0
- package/dist/runtime-commands.js.map +1 -1
- package/dist/runtime-execution-renderer.d.ts +3 -2
- package/dist/runtime-execution-renderer.js +19 -1
- package/dist/runtime-execution-renderer.js.map +1 -1
- package/dist/runtime-execution.d.ts +2 -1
- package/dist/runtime-execution.js +71 -11
- package/dist/runtime-execution.js.map +1 -1
- package/dist/runtime-guardrails.d.ts +26 -0
- package/dist/runtime-guardrails.js +168 -0
- package/dist/runtime-guardrails.js.map +1 -0
- package/dist/setup-agents-import.js +5 -3
- package/dist/setup-agents-import.js.map +1 -1
- package/dist/skills-commands.d.ts +4 -0
- package/dist/skills-commands.js +55 -2
- package/dist/skills-commands.js.map +1 -1
- package/dist/skills-memory.d.ts +36 -2
- package/dist/skills-memory.js +165 -6
- package/dist/skills-memory.js.map +1 -1
- package/dist/skills-planning.js +2 -4
- package/dist/skills-planning.js.map +1 -1
- package/dist/skills-render.js +2 -4
- package/dist/skills-render.js.map +1 -1
- package/dist/skills.d.ts +1 -1
- package/dist/skills.js +1 -1
- package/dist/skills.js.map +1 -1
- package/dist/sprint-commands.js +2 -1
- package/dist/sprint-commands.js.map +1 -1
- package/dist/subagent-protocol.js +3 -5
- package/dist/subagent-protocol.js.map +1 -1
- package/dist/support-commands.d.ts +2 -0
- package/dist/support-commands.js +18 -0
- package/dist/support-commands.js.map +1 -0
- package/dist/support-diagnostics.d.ts +49 -0
- package/dist/support-diagnostics.js +86 -0
- package/dist/support-diagnostics.js.map +1 -0
- package/dist/task-graph-commands.js +5 -3
- package/dist/task-graph-commands.js.map +1 -1
- package/dist/telemetry-redaction.js +8 -1
- package/dist/telemetry-redaction.js.map +1 -1
- package/dist/tool-commands.d.ts +3 -0
- package/dist/tool-commands.js +62 -0
- package/dist/tool-commands.js.map +1 -1
- package/dist/tracker-adapters.d.ts +71 -0
- package/dist/tracker-adapters.js +186 -0
- package/dist/tracker-adapters.js.map +1 -0
- package/dist/tracker-commands.d.ts +2 -0
- package/dist/tracker-commands.js +119 -0
- package/dist/tracker-commands.js.map +1 -0
- package/dist/types/metrics.d.ts +24 -0
- package/dist/types/model-config.d.ts +35 -0
- package/dist/types/runtime.d.ts +56 -0
- package/dist/types/skills.d.ts +2 -0
- package/dist/types/tasks.d.ts +6 -0
- package/dist/types/workflow-run.d.ts +17 -0
- package/dist/types.d.ts +4 -4
- package/dist/types.js.map +1 -1
- package/dist/upgrade-commands.js +13 -4
- package/dist/upgrade-commands.js.map +1 -1
- package/dist/validation.js +2 -2
- package/dist/validation.js.map +1 -1
- package/dist/visual-validation.d.ts +81 -0
- package/dist/visual-validation.js +290 -0
- package/dist/visual-validation.js.map +1 -0
- package/dist/web-action-security.d.ts +11 -0
- package/dist/web-action-security.js +45 -0
- package/dist/web-action-security.js.map +1 -0
- package/dist/web-api-read-routes.js +101 -1
- package/dist/web-api-read-routes.js.map +1 -1
- package/dist/web-api.js +507 -5
- package/dist/web-api.js.map +1 -1
- package/dist/web-artifacts.d.ts +55 -0
- package/dist/web-artifacts.js +222 -0
- package/dist/web-artifacts.js.map +1 -0
- package/dist/web-console/assets/index-C9lx-V42.css +1 -0
- package/dist/web-console/assets/index-M3S0g1GK.js +11 -0
- package/dist/web-console/index.html +13 -0
- package/dist/web-console.js +9 -3
- package/dist/web-console.js.map +1 -1
- package/dist/web-recovery.d.ts +30 -0
- package/dist/web-recovery.js +163 -0
- package/dist/web-recovery.js.map +1 -0
- package/dist/web-workflow-progress.d.ts +41 -0
- package/dist/web-workflow-progress.js +114 -0
- package/dist/web-workflow-progress.js.map +1 -0
- package/dist/workflow-approval-service.d.ts +2 -1
- package/dist/workflow-approval-service.js +72 -0
- package/dist/workflow-approval-service.js.map +1 -1
- package/dist/workflow-evidence-service.js +8 -1
- package/dist/workflow-evidence-service.js.map +1 -1
- package/dist/workflow-gates.d.ts +1 -0
- package/dist/workflow-gates.js +57 -0
- package/dist/workflow-gates.js.map +1 -1
- package/dist/workflow-run-commands.js +13 -1
- package/dist/workflow-run-commands.js.map +1 -1
- package/dist/workflow-services.d.ts +16 -12
- package/dist/workflow-services.js +311 -253
- package/dist/workflow-services.js.map +1 -1
- package/dist/workflow-task-service.d.ts +11 -0
- package/dist/workflow-task-service.js +242 -0
- package/dist/workflow-task-service.js.map +1 -0
- package/dist/workspace-validator.js +109 -3
- package/dist/workspace-validator.js.map +1 -1
- package/dist/workspace.js +8 -2
- package/dist/workspace.js.map +1 -1
- package/docs/adoption-guide.md +147 -0
- package/docs/autonomous-workflow.md +118 -27
- package/docs/benchmark.md +15 -7
- package/docs/command-contracts.md +18 -1
- package/docs/core-command-surface.md +59 -13
- package/docs/end-to-end-demo.md +1 -0
- package/docs/extension-contracts.md +83 -0
- package/docs/orchestra-mvp.md +83 -3
- package/docs/persona-workflows.md +32 -0
- package/docs/release-test-matrix.md +42 -0
- package/docs/runtime-adapters.md +92 -0
- package/docs/runtime-llm-flow.md +13 -0
- package/docs/setup-agents-applicability-review.md +173 -0
- package/docs/source-of-truth-and-agent-learning.md +14 -0
- package/docs/traceability-flow.md +5 -1
- package/docs/tracker-adapter-contract.md +10 -1
- package/docs/web-console-qa.md +35 -0
- package/package.json +12 -6
- package/rules/development-engineering.mdc +66 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export type TrackerProvider = "github" | "jira" | "gitlab" | "bitbucket";
|
|
2
|
+
export type TrackerAdapterTransport = "cli" | "mcp-skill";
|
|
3
|
+
export type TrackerIssueState = "open" | "in_progress" | "blocked" | "done";
|
|
4
|
+
export interface TrackerAdapterContract {
|
|
5
|
+
tracker: TrackerProvider;
|
|
6
|
+
nativeCli: string;
|
|
7
|
+
mcpSkill: string;
|
|
8
|
+
operations: Array<"issue-read" | "comment-upsert" | "close">;
|
|
9
|
+
}
|
|
10
|
+
export interface TrackerTransportSelection {
|
|
11
|
+
tracker: TrackerProvider;
|
|
12
|
+
transport: TrackerAdapterTransport;
|
|
13
|
+
reason: string;
|
|
14
|
+
}
|
|
15
|
+
export interface NormalizedTrackerIssue {
|
|
16
|
+
tracker: TrackerProvider;
|
|
17
|
+
remoteId: string;
|
|
18
|
+
url?: string;
|
|
19
|
+
title: string;
|
|
20
|
+
body?: string;
|
|
21
|
+
state?: TrackerIssueState;
|
|
22
|
+
labels: string[];
|
|
23
|
+
assignees: string[];
|
|
24
|
+
acceptanceCriteria: string[];
|
|
25
|
+
updatedAt?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface TrackerSyncPlan {
|
|
28
|
+
tracker: TrackerProvider;
|
|
29
|
+
remoteId: string;
|
|
30
|
+
taskId: string;
|
|
31
|
+
action: "create" | "update" | "none" | "conflict";
|
|
32
|
+
conflicts: string[];
|
|
33
|
+
mappedFields: string[];
|
|
34
|
+
}
|
|
35
|
+
export declare function listTrackerAdapterContracts(): TrackerAdapterContract[];
|
|
36
|
+
export declare function getTrackerAdapterContract(tracker: string): TrackerAdapterContract;
|
|
37
|
+
export declare function selectTrackerTransport({ tracker, requestedTransport, cliAvailable, mcpSkillAvailable, }: {
|
|
38
|
+
tracker: string;
|
|
39
|
+
requestedTransport?: TrackerAdapterTransport;
|
|
40
|
+
cliAvailable: boolean;
|
|
41
|
+
mcpSkillAvailable: boolean;
|
|
42
|
+
}): TrackerTransportSelection;
|
|
43
|
+
export declare function normalizeTrackerIssue(input: {
|
|
44
|
+
tracker: string;
|
|
45
|
+
remoteId: string | number;
|
|
46
|
+
url?: unknown;
|
|
47
|
+
title: unknown;
|
|
48
|
+
body?: unknown;
|
|
49
|
+
state?: unknown;
|
|
50
|
+
labels?: unknown;
|
|
51
|
+
assignees?: unknown;
|
|
52
|
+
acceptanceCriteria?: unknown;
|
|
53
|
+
updatedAt?: unknown;
|
|
54
|
+
}): NormalizedTrackerIssue;
|
|
55
|
+
export declare function defaultTrackerTaskId(issue: NormalizedTrackerIssue): string;
|
|
56
|
+
export declare function trackerIssueTaskFields(issue: NormalizedTrackerIssue): {
|
|
57
|
+
title: string;
|
|
58
|
+
backlogItem: string;
|
|
59
|
+
goal?: string;
|
|
60
|
+
acceptanceCriteria?: string[];
|
|
61
|
+
risks?: string[];
|
|
62
|
+
status?: "pending" | "in_progress" | "blocked" | "done";
|
|
63
|
+
};
|
|
64
|
+
export declare function planTrackerSync(input: {
|
|
65
|
+
issue: NormalizedTrackerIssue;
|
|
66
|
+
taskId?: string;
|
|
67
|
+
existingTask?: {
|
|
68
|
+
title: string;
|
|
69
|
+
backlogItem?: string;
|
|
70
|
+
};
|
|
71
|
+
}): TrackerSyncPlan;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
const TRACKER_CONTRACTS = [
|
|
2
|
+
contract("github", "gh", "github-mcp"),
|
|
3
|
+
contract("jira", "jira", "jira-mcp"),
|
|
4
|
+
contract("gitlab", "glab", "gitlab-mcp"),
|
|
5
|
+
contract("bitbucket", "bb", "bitbucket-mcp"),
|
|
6
|
+
];
|
|
7
|
+
export function listTrackerAdapterContracts() {
|
|
8
|
+
return TRACKER_CONTRACTS.map((item) => ({
|
|
9
|
+
...item,
|
|
10
|
+
operations: [...item.operations],
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
export function getTrackerAdapterContract(tracker) {
|
|
14
|
+
const normalized = normalizeTrackerProvider(tracker);
|
|
15
|
+
const contract = TRACKER_CONTRACTS.find((item) => item.tracker === normalized);
|
|
16
|
+
if (!contract) {
|
|
17
|
+
throw new Error(`unsupported tracker: ${tracker}`);
|
|
18
|
+
}
|
|
19
|
+
return { ...contract, operations: [...contract.operations] };
|
|
20
|
+
}
|
|
21
|
+
export function selectTrackerTransport({ tracker, requestedTransport, cliAvailable, mcpSkillAvailable, }) {
|
|
22
|
+
const contract = getTrackerAdapterContract(tracker);
|
|
23
|
+
if (requestedTransport === "cli") {
|
|
24
|
+
if (!cliAvailable) {
|
|
25
|
+
throw new Error(`${contract.tracker} CLI transport requires ${contract.nativeCli}`);
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
tracker: contract.tracker,
|
|
29
|
+
transport: "cli",
|
|
30
|
+
reason: `${contract.nativeCli} CLI selected explicitly`,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (requestedTransport === "mcp-skill") {
|
|
34
|
+
if (!mcpSkillAvailable) {
|
|
35
|
+
throw new Error(`${contract.tracker} MCP skill transport requires ${contract.mcpSkill}`);
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
tracker: contract.tracker,
|
|
39
|
+
transport: "mcp-skill",
|
|
40
|
+
reason: `${contract.mcpSkill} selected explicitly`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (cliAvailable) {
|
|
44
|
+
return {
|
|
45
|
+
tracker: contract.tracker,
|
|
46
|
+
transport: "cli",
|
|
47
|
+
reason: `${contract.nativeCli} CLI available`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (mcpSkillAvailable) {
|
|
51
|
+
return {
|
|
52
|
+
tracker: contract.tracker,
|
|
53
|
+
transport: "mcp-skill",
|
|
54
|
+
reason: `${contract.nativeCli} unavailable; ${contract.mcpSkill} fallback available`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
throw new Error(`${contract.tracker} tracker sync requires ${contract.nativeCli} CLI or ${contract.mcpSkill} MCP skill`);
|
|
58
|
+
}
|
|
59
|
+
export function normalizeTrackerIssue(input) {
|
|
60
|
+
const tracker = normalizeTrackerProvider(input.tracker);
|
|
61
|
+
const state = normalizeTrackerIssueState(input.state);
|
|
62
|
+
if (typeof input.title !== "string" || input.title.trim() === "") {
|
|
63
|
+
throw new Error("tracker issue title is required");
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
tracker,
|
|
67
|
+
remoteId: String(input.remoteId),
|
|
68
|
+
...(typeof input.url === "string" && input.url.trim()
|
|
69
|
+
? { url: input.url }
|
|
70
|
+
: {}),
|
|
71
|
+
title: input.title,
|
|
72
|
+
...(typeof input.body === "string" ? { body: input.body } : {}),
|
|
73
|
+
...(state ? { state } : {}),
|
|
74
|
+
labels: stringArray(input.labels),
|
|
75
|
+
assignees: stringArray(input.assignees),
|
|
76
|
+
acceptanceCriteria: stringArray(input.acceptanceCriteria),
|
|
77
|
+
...(typeof input.updatedAt === "string" && input.updatedAt.trim()
|
|
78
|
+
? { updatedAt: input.updatedAt }
|
|
79
|
+
: {}),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export function defaultTrackerTaskId(issue) {
|
|
83
|
+
return `${issue.tracker.toUpperCase()}-${issue.remoteId.replace(/[^a-z0-9]+/gi, "-").replace(/^-|-$/g, "")}`;
|
|
84
|
+
}
|
|
85
|
+
export function trackerIssueTaskFields(issue) {
|
|
86
|
+
const goal = issue.body ? firstSection(issue.body, "User Story") : undefined;
|
|
87
|
+
return {
|
|
88
|
+
title: issue.title,
|
|
89
|
+
backlogItem: issue.url ?? `${issue.tracker}:${issue.remoteId}`,
|
|
90
|
+
...(goal ? { goal } : {}),
|
|
91
|
+
...(issue.acceptanceCriteria.length > 0
|
|
92
|
+
? { acceptanceCriteria: issue.acceptanceCriteria }
|
|
93
|
+
: {}),
|
|
94
|
+
...(issue.labels.length > 0 ? { risks: issue.labels } : {}),
|
|
95
|
+
...(issue.state ? { status: trackerStateToTaskStatus(issue.state) } : {}),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export function planTrackerSync(input) {
|
|
99
|
+
const taskId = input.taskId ?? defaultTrackerTaskId(input.issue);
|
|
100
|
+
const fields = trackerIssueTaskFields(input.issue);
|
|
101
|
+
if (!input.existingTask) {
|
|
102
|
+
return {
|
|
103
|
+
tracker: input.issue.tracker,
|
|
104
|
+
remoteId: input.issue.remoteId,
|
|
105
|
+
taskId,
|
|
106
|
+
action: "create",
|
|
107
|
+
conflicts: [],
|
|
108
|
+
mappedFields: mappedTrackerFields(fields),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const conflicts = [];
|
|
112
|
+
if (input.existingTask.backlogItem &&
|
|
113
|
+
input.existingTask.backlogItem !== fields.backlogItem) {
|
|
114
|
+
conflicts.push(`task ${taskId} is already linked to ${input.existingTask.backlogItem}`);
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
tracker: input.issue.tracker,
|
|
118
|
+
remoteId: input.issue.remoteId,
|
|
119
|
+
taskId,
|
|
120
|
+
action: conflicts.length > 0
|
|
121
|
+
? "conflict"
|
|
122
|
+
: input.existingTask.title === fields.title
|
|
123
|
+
? "none"
|
|
124
|
+
: "update",
|
|
125
|
+
conflicts,
|
|
126
|
+
mappedFields: mappedTrackerFields(fields),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function contract(tracker, nativeCli, mcpSkill) {
|
|
130
|
+
return {
|
|
131
|
+
tracker,
|
|
132
|
+
nativeCli,
|
|
133
|
+
mcpSkill,
|
|
134
|
+
operations: ["issue-read", "comment-upsert", "close"],
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function normalizeTrackerProvider(tracker) {
|
|
138
|
+
const normalized = tracker.toLowerCase().trim();
|
|
139
|
+
if (normalized === "github" ||
|
|
140
|
+
normalized === "jira" ||
|
|
141
|
+
normalized === "gitlab" ||
|
|
142
|
+
normalized === "bitbucket") {
|
|
143
|
+
return normalized;
|
|
144
|
+
}
|
|
145
|
+
throw new Error(`unsupported tracker: ${tracker}`);
|
|
146
|
+
}
|
|
147
|
+
function normalizeTrackerIssueState(value) {
|
|
148
|
+
if (typeof value !== "string") {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
const normalized = value
|
|
152
|
+
.toLowerCase()
|
|
153
|
+
.trim()
|
|
154
|
+
.replace(/[-\s]+/g, "_");
|
|
155
|
+
if (normalized === "open" ||
|
|
156
|
+
normalized === "in_progress" ||
|
|
157
|
+
normalized === "blocked" ||
|
|
158
|
+
normalized === "done") {
|
|
159
|
+
return normalized;
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
function trackerStateToTaskStatus(state) {
|
|
164
|
+
if (state === "open")
|
|
165
|
+
return "pending";
|
|
166
|
+
return state;
|
|
167
|
+
}
|
|
168
|
+
function stringArray(value) {
|
|
169
|
+
return Array.isArray(value)
|
|
170
|
+
? value.filter((item) => typeof item === "string")
|
|
171
|
+
: [];
|
|
172
|
+
}
|
|
173
|
+
function mappedTrackerFields(fields) {
|
|
174
|
+
return Object.entries(fields)
|
|
175
|
+
.filter(([, value]) => Array.isArray(value) ? value.length > 0 : value !== undefined)
|
|
176
|
+
.map(([key]) => key);
|
|
177
|
+
}
|
|
178
|
+
function firstSection(body, heading) {
|
|
179
|
+
const pattern = new RegExp(`##\\s+${escapeRegExp(heading)}\\s*\\n([\\s\\S]*?)(?=\\n##\\s+|$)`, "i");
|
|
180
|
+
const match = body.match(pattern);
|
|
181
|
+
return match?.[1]?.trim();
|
|
182
|
+
}
|
|
183
|
+
function escapeRegExp(value) {
|
|
184
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=tracker-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker-adapters.js","sourceRoot":"","sources":["../src/tracker-adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { requireArg } from "./args.js";
|
|
4
|
+
import { removeUndefined, stringOption, targetRootOption, } from "./command-utils.js";
|
|
5
|
+
import { normalizeTaskStatus } from "./constants.js";
|
|
6
|
+
import { resolveWorkspaceWritePath } from "./fs-utils.js";
|
|
7
|
+
import { normalizeTrackerIssue, defaultTrackerTaskId, planTrackerSync, trackerIssueTaskFields, } from "./tracker-adapters.js";
|
|
8
|
+
import { addEvidence, addTask, listTasks, updateTask, } from "./workflow-services.js";
|
|
9
|
+
export async function trackerSyncCommand(options, io) {
|
|
10
|
+
const root = targetRootOption(options);
|
|
11
|
+
const tracker = requireArg(options, "tracker");
|
|
12
|
+
const remoteId = requireArg(options, "remote");
|
|
13
|
+
const issueFile = stringOption(options["issue-file"]);
|
|
14
|
+
if (!issueFile) {
|
|
15
|
+
throw new Error("tracker sync requires --issue-file with normalized tracker issue JSON; live provider runners must inject an adapter");
|
|
16
|
+
}
|
|
17
|
+
const payload = await readIssuePayload(root, issueFile);
|
|
18
|
+
const issue = normalizeTrackerIssue({
|
|
19
|
+
tracker,
|
|
20
|
+
remoteId,
|
|
21
|
+
title: payload.title,
|
|
22
|
+
url: payload.url,
|
|
23
|
+
body: payload.body,
|
|
24
|
+
state: payload.state,
|
|
25
|
+
labels: payload.labels,
|
|
26
|
+
assignees: payload.assignees,
|
|
27
|
+
acceptanceCriteria: payload.acceptanceCriteria,
|
|
28
|
+
updatedAt: payload.updatedAt,
|
|
29
|
+
});
|
|
30
|
+
const tasks = await listTasks(root);
|
|
31
|
+
const taskId = stringOption(options.task);
|
|
32
|
+
const effectiveTaskId = taskId ?? undefined;
|
|
33
|
+
const existing = tasks.find((task) => task.id === (effectiveTaskId ?? defaultTrackerTaskId(issue)) ||
|
|
34
|
+
task.backlogItem === (issue.url ?? `${issue.tracker}:${issue.remoteId}`));
|
|
35
|
+
const plan = planTrackerSync({
|
|
36
|
+
issue,
|
|
37
|
+
...(effectiveTaskId ? { taskId: effectiveTaskId } : {}),
|
|
38
|
+
...(existing
|
|
39
|
+
? {
|
|
40
|
+
existingTask: {
|
|
41
|
+
title: existing.title,
|
|
42
|
+
...(existing.backlogItem
|
|
43
|
+
? { backlogItem: existing.backlogItem }
|
|
44
|
+
: {}),
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
: {}),
|
|
48
|
+
});
|
|
49
|
+
if (plan.action === "conflict") {
|
|
50
|
+
throw new Error(`tracker sync conflict: ${plan.conflicts.join("; ")}`);
|
|
51
|
+
}
|
|
52
|
+
const fields = trackerIssueTaskFields(issue);
|
|
53
|
+
const ownerRole = stringOption(options.owner) ?? existing?.ownerRole ?? "developer";
|
|
54
|
+
const status = parseTaskStatus(stringOption(options.status)) ?? fields.status;
|
|
55
|
+
const taskInput = removeUndefined({
|
|
56
|
+
id: plan.taskId,
|
|
57
|
+
title: fields.title,
|
|
58
|
+
ownerRole,
|
|
59
|
+
dependencies: existing?.dependencies ?? [],
|
|
60
|
+
status,
|
|
61
|
+
backlogItem: fields.backlogItem,
|
|
62
|
+
goal: fields.goal ?? existing?.goal,
|
|
63
|
+
acceptanceCriteria: fields.acceptanceCriteria ?? existing?.acceptanceCriteria,
|
|
64
|
+
risks: fields.risks ?? existing?.risks,
|
|
65
|
+
qaGate: existing?.qaGate ??
|
|
66
|
+
defaultQaPlanForImportedExecution(status, issue.tracker, issue.remoteId),
|
|
67
|
+
});
|
|
68
|
+
if (!options["dry-run"]) {
|
|
69
|
+
if (plan.action === "create") {
|
|
70
|
+
await addTask(taskInput, root);
|
|
71
|
+
if (status && status !== "pending") {
|
|
72
|
+
await updateTask({ id: taskInput.id, status }, root);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else if (plan.action === "update") {
|
|
76
|
+
await updateTask(taskInput, root);
|
|
77
|
+
}
|
|
78
|
+
await addEvidence({
|
|
79
|
+
task: plan.taskId,
|
|
80
|
+
role: "developer",
|
|
81
|
+
type: "report",
|
|
82
|
+
summary: `${issue.tracker} issue ${issue.remoteId} synchronized from normalized tracker adapter (${plan.action})`,
|
|
83
|
+
}, root);
|
|
84
|
+
}
|
|
85
|
+
const result = {
|
|
86
|
+
...plan,
|
|
87
|
+
dryRun: Boolean(options["dry-run"]),
|
|
88
|
+
task: taskInput,
|
|
89
|
+
issue,
|
|
90
|
+
};
|
|
91
|
+
if (options.json) {
|
|
92
|
+
io.log(JSON.stringify(result, null, 2));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
io.log(`${plan.tracker} ${plan.remoteId} -> ${plan.taskId}: ${plan.action}`);
|
|
96
|
+
}
|
|
97
|
+
async function readIssuePayload(root, issueFile) {
|
|
98
|
+
const issuePath = resolveWorkspaceWritePath(root, path.normalize(issueFile));
|
|
99
|
+
return JSON.parse(await readFile(issuePath, "utf8"));
|
|
100
|
+
}
|
|
101
|
+
function parseTaskStatus(value) {
|
|
102
|
+
if (!value) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
const status = normalizeTaskStatus(value);
|
|
106
|
+
if (!status) {
|
|
107
|
+
throw new Error(`invalid task status: ${value}`);
|
|
108
|
+
}
|
|
109
|
+
return status;
|
|
110
|
+
}
|
|
111
|
+
function defaultQaPlanForImportedExecution(status, tracker, remoteId) {
|
|
112
|
+
if (status !== "ready" && status !== "in_progress") {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
plan: `Validate imported ${tracker} issue ${remoteId} against mapped acceptance criteria, regression risk, and synchronization evidence before release.`,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=tracker-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker-commands.js","sourceRoot":"","sources":["../src/tracker-commands.ts"],"names":[],"mappings":"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"}
|
package/dist/types/metrics.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export interface EstimateRecord {
|
|
|
8
8
|
sizingLabel: SizingLabel;
|
|
9
9
|
soloEstimateDays: number;
|
|
10
10
|
aiUnguidedEstimateDays: number;
|
|
11
|
+
aiGuidedEstimateDays: number;
|
|
11
12
|
confidence: EstimateConfidence;
|
|
12
13
|
declaredBy: string;
|
|
13
14
|
declaredAt: string;
|
|
@@ -17,9 +18,18 @@ export interface EstimateInput {
|
|
|
17
18
|
sizingLabel: SizingLabel;
|
|
18
19
|
soloEstimateDays: number;
|
|
19
20
|
aiUnguidedEstimateDays: number;
|
|
21
|
+
aiGuidedEstimateDays: number;
|
|
20
22
|
confidence: EstimateConfidence;
|
|
21
23
|
declaredBy: string;
|
|
22
24
|
}
|
|
25
|
+
export interface EstimateCalibration {
|
|
26
|
+
baselineEstimateDays: number;
|
|
27
|
+
historicalMedian: number | null;
|
|
28
|
+
variance: number | null;
|
|
29
|
+
calibrationNote: string;
|
|
30
|
+
sampleSize: number;
|
|
31
|
+
ignored: boolean;
|
|
32
|
+
}
|
|
23
33
|
export interface BenchmarkQualitySignals {
|
|
24
34
|
reviewCount: number;
|
|
25
35
|
blockingReviews: number;
|
|
@@ -30,18 +40,30 @@ export interface BenchmarkQualitySignals {
|
|
|
30
40
|
totalOutputTokens: number;
|
|
31
41
|
estimatedCostUsd: number;
|
|
32
42
|
}
|
|
43
|
+
export interface EffortBreakdown {
|
|
44
|
+
aiAutonomousMinutes: number;
|
|
45
|
+
aiSupervisedMinutes: number;
|
|
46
|
+
aiCalibrationBaselineMinutes: number;
|
|
47
|
+
humanReviewMinutes: number;
|
|
48
|
+
humanManualMinutes: number;
|
|
49
|
+
classification: "ai_autonomous" | "ai_supervised" | "human_manual" | "pending";
|
|
50
|
+
notes: string[];
|
|
51
|
+
}
|
|
33
52
|
export interface BenchmarkResult {
|
|
34
53
|
taskId: string;
|
|
35
54
|
sizingLabel: SizingLabel;
|
|
36
55
|
soloEstimateDays: number;
|
|
37
56
|
aiUnguidedEstimateDays: number;
|
|
57
|
+
aiGuidedEstimateDays: number;
|
|
38
58
|
actualSource: "phase-timeline" | "task-lifecycle" | "task-timestamps" | "none";
|
|
39
59
|
actualDays: number | null;
|
|
40
60
|
actualHours: number | null;
|
|
41
61
|
vsSoloPct: number | null;
|
|
42
62
|
vsAiUnguidedPct: number | null;
|
|
63
|
+
vsAiGuidedPct: number | null;
|
|
43
64
|
qaIterations: number;
|
|
44
65
|
phaseDurations: BenchmarkPhaseDuration[];
|
|
66
|
+
effortBreakdown: EffortBreakdown;
|
|
45
67
|
quality: BenchmarkQualitySignals;
|
|
46
68
|
status: "pending" | "complete";
|
|
47
69
|
}
|
|
@@ -50,6 +72,7 @@ export interface BenchmarkSummary {
|
|
|
50
72
|
totalWithActuals: number;
|
|
51
73
|
avgVsSoloPct: number | null;
|
|
52
74
|
avgVsAiUnguidedPct: number | null;
|
|
75
|
+
avgVsAiGuidedPct: number | null;
|
|
53
76
|
}
|
|
54
77
|
export interface VelocityWeek {
|
|
55
78
|
week: string;
|
|
@@ -62,6 +85,7 @@ export interface VelocityReport {
|
|
|
62
85
|
avgActualDaysPerStory: number | null;
|
|
63
86
|
avgVsSoloPct: number | null;
|
|
64
87
|
avgVsAiUnguidedPct: number | null;
|
|
88
|
+
avgVsAiGuidedPct: number | null;
|
|
65
89
|
weeks: VelocityWeek[];
|
|
66
90
|
trend: "improving" | "stable" | "declining" | "insufficient_data";
|
|
67
91
|
}
|
|
@@ -54,7 +54,10 @@ export interface ModelProviderError {
|
|
|
54
54
|
}
|
|
55
55
|
export interface ProviderFailureDetail {
|
|
56
56
|
provider: string;
|
|
57
|
+
code: "provider_error" | "timeout" | "permission_denied" | "policy_blocked";
|
|
57
58
|
reason: string;
|
|
59
|
+
retryable: boolean;
|
|
60
|
+
attempts: number;
|
|
58
61
|
}
|
|
59
62
|
export interface ProviderFallbackResult {
|
|
60
63
|
provider: string;
|
|
@@ -102,6 +105,7 @@ export interface PhaseStructuredOutput {
|
|
|
102
105
|
decisions: string[];
|
|
103
106
|
evidence: string[];
|
|
104
107
|
handoff: string;
|
|
108
|
+
noOpRationale?: string;
|
|
105
109
|
architecturalConcerns?: {
|
|
106
110
|
inherited: string[];
|
|
107
111
|
selfImposed: string[];
|
|
@@ -145,12 +149,43 @@ export interface ProviderRouting {
|
|
|
145
149
|
export interface WorkflowProvidersConfig {
|
|
146
150
|
defaults: ProviderRouting;
|
|
147
151
|
byRole: Record<string, ProviderRouting>;
|
|
152
|
+
profiles?: Record<string, ProviderRuntimeProfile>;
|
|
153
|
+
activeProfile?: string;
|
|
148
154
|
}
|
|
149
155
|
export interface ProviderPolicyConfig {
|
|
150
156
|
allowedProviders?: string[];
|
|
151
157
|
blockedProviders?: string[];
|
|
152
158
|
allowVendorFallbackWithoutApproval?: boolean;
|
|
153
159
|
}
|
|
160
|
+
export interface ProviderRuntimeProfile {
|
|
161
|
+
description?: string;
|
|
162
|
+
defaults?: ProviderRouting;
|
|
163
|
+
byRole: Record<string, ProviderRouting>;
|
|
164
|
+
budgets?: BudgetPolicy;
|
|
165
|
+
providerPolicy?: ProviderPolicyConfig;
|
|
166
|
+
requiredEnv?: string[];
|
|
167
|
+
}
|
|
168
|
+
export interface ProviderRuntimeProfileSummary {
|
|
169
|
+
name: string;
|
|
170
|
+
active: boolean;
|
|
171
|
+
description?: string;
|
|
172
|
+
roles: string[];
|
|
173
|
+
defaultProvider?: string;
|
|
174
|
+
defaultModel?: string;
|
|
175
|
+
requiredEnv: string[];
|
|
176
|
+
}
|
|
177
|
+
export interface ProviderProfileSmokeCheck {
|
|
178
|
+
scope: string;
|
|
179
|
+
provider: string;
|
|
180
|
+
model: string;
|
|
181
|
+
status: "pass" | "fail";
|
|
182
|
+
detail: string;
|
|
183
|
+
}
|
|
184
|
+
export interface ProviderProfileSmokeResult {
|
|
185
|
+
profile: string;
|
|
186
|
+
passed: boolean;
|
|
187
|
+
checks: ProviderProfileSmokeCheck[];
|
|
188
|
+
}
|
|
154
189
|
export interface ProviderCredentialConfig {
|
|
155
190
|
apiKeyFile?: string;
|
|
156
191
|
apiKeyFileEnv?: string;
|
package/dist/types/runtime.d.ts
CHANGED
|
@@ -67,6 +67,7 @@ export interface RuntimeExecutorConfig {
|
|
|
67
67
|
export interface RuntimeDelegationPolicy {
|
|
68
68
|
mode: RuntimeDelegationMode;
|
|
69
69
|
allowDirectProviderApi: boolean;
|
|
70
|
+
guardrails?: RuntimeDelegationGuardrails;
|
|
70
71
|
}
|
|
71
72
|
export interface RuntimeExecutionPolicy {
|
|
72
73
|
defaults?: RuntimeExecutorConfig;
|
|
@@ -87,6 +88,59 @@ export interface RuntimeDelegationAssignment {
|
|
|
87
88
|
allowedCommands: string[];
|
|
88
89
|
expectedArtifacts: string[];
|
|
89
90
|
}
|
|
91
|
+
export type RuntimeDelegationLimitAction = "queue" | "reject";
|
|
92
|
+
export interface RuntimeDelegationGuardrails {
|
|
93
|
+
maxConcurrentDelegates: number;
|
|
94
|
+
maxDelegationDepth: number;
|
|
95
|
+
maxSpawnsPerTask: number;
|
|
96
|
+
spawnBudgetTokens: number;
|
|
97
|
+
contextBudgetTokens: number;
|
|
98
|
+
timeoutMs: number;
|
|
99
|
+
staleClaimTtlMs: number;
|
|
100
|
+
allowNestedDelegation: boolean;
|
|
101
|
+
limitAction: RuntimeDelegationLimitAction;
|
|
102
|
+
handoffMaxChars: number;
|
|
103
|
+
}
|
|
104
|
+
export type RuntimeDelegationGuardrailStatus = "allow" | "queue" | "reject";
|
|
105
|
+
export interface RuntimeDelegationGuardrailEvaluation {
|
|
106
|
+
status: RuntimeDelegationGuardrailStatus;
|
|
107
|
+
reasons: string[];
|
|
108
|
+
policy: RuntimeDelegationGuardrails;
|
|
109
|
+
activeSessions: number;
|
|
110
|
+
requestedSpawns: number;
|
|
111
|
+
delegationDepth: number;
|
|
112
|
+
contextBudgetTokens: number;
|
|
113
|
+
spawnBudgetTokens: number;
|
|
114
|
+
staleSessions: string[];
|
|
115
|
+
}
|
|
116
|
+
export type RuntimeDelegationSessionStatus = "planned" | "spawned" | "active" | "suspended" | "completed" | "failed" | "timed_out" | "canceled" | "closed";
|
|
117
|
+
export interface RuntimeDelegationSessionSummary {
|
|
118
|
+
sessionId: string;
|
|
119
|
+
taskId: string;
|
|
120
|
+
runtime?: RuntimeExecutionId | string;
|
|
121
|
+
mode?: RuntimeDelegationMode;
|
|
122
|
+
roles: string[];
|
|
123
|
+
status: RuntimeDelegationSessionStatus;
|
|
124
|
+
lastEventType: string;
|
|
125
|
+
updatedAt: string;
|
|
126
|
+
ageMs: number;
|
|
127
|
+
active: boolean;
|
|
128
|
+
stale: boolean;
|
|
129
|
+
artifacts: string[];
|
|
130
|
+
}
|
|
131
|
+
export interface RuntimeDelegationOperationsReport {
|
|
132
|
+
generatedAt: string;
|
|
133
|
+
taskId?: string;
|
|
134
|
+
policy: RuntimeDelegationGuardrails;
|
|
135
|
+
counts: {
|
|
136
|
+
total: number;
|
|
137
|
+
active: number;
|
|
138
|
+
stale: number;
|
|
139
|
+
suspended: number;
|
|
140
|
+
terminal: number;
|
|
141
|
+
};
|
|
142
|
+
sessions: RuntimeDelegationSessionSummary[];
|
|
143
|
+
}
|
|
90
144
|
export interface RuntimeBrief {
|
|
91
145
|
taskId: string;
|
|
92
146
|
runtime: RuntimeExecutionId;
|
|
@@ -98,6 +152,7 @@ export interface RuntimeBrief {
|
|
|
98
152
|
}
|
|
99
153
|
export interface RuntimeDelegationPacket {
|
|
100
154
|
taskId: string;
|
|
155
|
+
sessionId: string;
|
|
101
156
|
runtime: RuntimeExecutionId;
|
|
102
157
|
artifact: string;
|
|
103
158
|
content: string;
|
|
@@ -106,6 +161,7 @@ export interface RuntimeDelegationPacket {
|
|
|
106
161
|
assignments: RuntimeDelegationAssignment[];
|
|
107
162
|
requiresApproval: boolean;
|
|
108
163
|
contextBudget: ContextBudgetMetadata;
|
|
164
|
+
guardrails: RuntimeDelegationGuardrailEvaluation;
|
|
109
165
|
}
|
|
110
166
|
export interface RuntimeInvocationPlan {
|
|
111
167
|
runtime: RuntimeExecutionId;
|
package/dist/types/skills.d.ts
CHANGED
|
@@ -111,6 +111,8 @@ export interface AgentLessonInput {
|
|
|
111
111
|
export interface AgentLesson extends AgentLessonInput {
|
|
112
112
|
id: string;
|
|
113
113
|
timestamp: string;
|
|
114
|
+
archivedAt?: string;
|
|
115
|
+
archiveReason?: string;
|
|
114
116
|
}
|
|
115
117
|
export type MemoryHookPoint = "before_plan" | "before_implementation" | "before_handoff" | "before_final" | "after_failure";
|
|
116
118
|
export interface MemoryLessonSnippet {
|
package/dist/types/tasks.d.ts
CHANGED
|
@@ -108,6 +108,7 @@ export interface UpdateTaskInput {
|
|
|
108
108
|
testStrategy?: string;
|
|
109
109
|
status?: TaskStatus;
|
|
110
110
|
blockedReason?: string;
|
|
111
|
+
qaGate?: QaGateMetadata;
|
|
111
112
|
claimedAt?: string;
|
|
112
113
|
doneAt?: string;
|
|
113
114
|
}
|
|
@@ -149,6 +150,11 @@ export interface EvidenceInput {
|
|
|
149
150
|
path?: string | boolean | string[];
|
|
150
151
|
command?: string | boolean | string[];
|
|
151
152
|
exitCode?: string | boolean | string[];
|
|
153
|
+
surface?: string | boolean | string[];
|
|
154
|
+
assertions?: string | boolean | string[];
|
|
155
|
+
externalValidation?: string | boolean | string[];
|
|
156
|
+
deferredOwner?: string | boolean | string[];
|
|
157
|
+
deferredRationale?: string | boolean | string[];
|
|
152
158
|
}
|
|
153
159
|
export interface PlaywrightEvidenceInput {
|
|
154
160
|
task: string;
|
|
@@ -41,6 +41,23 @@ export interface WorkflowGateApprovalResult {
|
|
|
41
41
|
approvedAt: string;
|
|
42
42
|
alreadyApproved: boolean;
|
|
43
43
|
}
|
|
44
|
+
export type WorkflowGateDecisionResult = "approve" | "block" | "changes";
|
|
45
|
+
export interface WorkflowGateDecisionInput {
|
|
46
|
+
runId: string;
|
|
47
|
+
gateId: string;
|
|
48
|
+
reviewer: string;
|
|
49
|
+
rationale: string;
|
|
50
|
+
result: WorkflowGateDecisionResult;
|
|
51
|
+
}
|
|
52
|
+
export interface WorkflowGateDecisionRecord {
|
|
53
|
+
run: AutonomousRun;
|
|
54
|
+
gateId: string;
|
|
55
|
+
reviewer: string;
|
|
56
|
+
rationale: string;
|
|
57
|
+
result: WorkflowGateDecisionResult;
|
|
58
|
+
decidedAt: string;
|
|
59
|
+
alreadyApproved: boolean;
|
|
60
|
+
}
|
|
44
61
|
export interface AutonomousRun {
|
|
45
62
|
id: string;
|
|
46
63
|
taskId: string;
|