@jterrats/open-orchestra 0.3.1 → 0.4.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/CHANGELOG.md +50 -0
- package/dist/autonomous-phase-lifecycle.d.ts +25 -0
- package/dist/autonomous-phase-lifecycle.js +194 -0
- package/dist/autonomous-phase-lifecycle.js.map +1 -0
- package/dist/autonomous-run-state.d.ts +6 -0
- package/dist/autonomous-run-state.js +91 -0
- package/dist/autonomous-run-state.js.map +1 -0
- package/dist/autonomous-run-store.d.ts +12 -0
- package/dist/autonomous-run-store.js +64 -0
- package/dist/autonomous-run-store.js.map +1 -0
- package/dist/autonomous-workflow-constants.d.ts +6 -0
- package/dist/autonomous-workflow-constants.js +36 -0
- package/dist/autonomous-workflow-constants.js.map +1 -0
- package/dist/autonomous-workflow.d.ts +6 -45
- package/dist/autonomous-workflow.js +4 -385
- package/dist/autonomous-workflow.js.map +1 -1
- package/dist/benchmark.d.ts +2 -1
- package/dist/benchmark.js +70 -0
- package/dist/benchmark.js.map +1 -1
- package/dist/cli.js +31 -2
- package/dist/cli.js.map +1 -1
- package/dist/command-utils.d.ts +6 -0
- package/dist/command-utils.js +19 -0
- package/dist/command-utils.js.map +1 -0
- package/dist/commands.d.ts +8 -40
- package/dist/commands.js +59 -803
- package/dist/commands.js.map +1 -1
- package/dist/constants.js +14 -0
- package/dist/constants.js.map +1 -1
- package/dist/defaults.d.ts +17 -0
- package/dist/defaults.js +17 -0
- package/dist/defaults.js.map +1 -1
- package/dist/instruction-commands.d.ts +5 -0
- package/dist/instruction-commands.js +98 -0
- package/dist/instruction-commands.js.map +1 -0
- package/dist/metrics-commands.d.ts +3 -0
- package/dist/metrics-commands.js +114 -0
- package/dist/metrics-commands.js.map +1 -0
- package/dist/model-commands.d.ts +13 -0
- package/dist/model-commands.js +199 -0
- package/dist/model-commands.js.map +1 -0
- package/dist/model-providers.d.ts +26 -1
- package/dist/model-providers.js +257 -1
- package/dist/model-providers.js.map +1 -1
- package/dist/notifications.d.ts +31 -0
- package/dist/notifications.js +165 -0
- package/dist/notifications.js.map +1 -0
- package/dist/phase-executor.d.ts +18 -0
- package/dist/phase-executor.js +218 -0
- package/dist/phase-executor.js.map +1 -0
- package/dist/release-commands.d.ts +10 -0
- package/dist/release-commands.js +116 -0
- package/dist/release-commands.js.map +1 -1
- package/dist/runtime-adapters.d.ts +5 -1
- package/dist/runtime-adapters.js +27 -0
- package/dist/runtime-adapters.js.map +1 -1
- package/dist/runtime-commands.d.ts +9 -0
- package/dist/runtime-commands.js +156 -0
- package/dist/runtime-commands.js.map +1 -0
- package/dist/runtime-execution-adapters.d.ts +2 -0
- package/dist/runtime-execution-adapters.js +163 -0
- package/dist/runtime-execution-adapters.js.map +1 -0
- package/dist/runtime-execution-renderer.d.ts +10 -0
- package/dist/runtime-execution-renderer.js +110 -0
- package/dist/runtime-execution-renderer.js.map +1 -0
- package/dist/runtime-execution.d.ts +27 -0
- package/dist/runtime-execution.js +147 -0
- package/dist/runtime-execution.js.map +1 -0
- package/dist/skills-commands.d.ts +9 -0
- package/dist/skills-commands.js +130 -0
- package/dist/skills-commands.js.map +1 -0
- package/dist/sprint-commands.d.ts +5 -0
- package/dist/sprint-commands.js +120 -0
- package/dist/sprint-commands.js.map +1 -0
- package/dist/sprint-metrics.d.ts +9 -0
- package/dist/sprint-metrics.js +203 -0
- package/dist/sprint-metrics.js.map +1 -0
- package/dist/telemetry-commands.d.ts +7 -0
- package/dist/telemetry-commands.js +82 -0
- package/dist/telemetry-commands.js.map +1 -0
- package/dist/tool-commands.d.ts +3 -0
- package/dist/tool-commands.js +67 -0
- package/dist/tool-commands.js.map +1 -0
- package/dist/types.d.ts +177 -0
- package/dist/types.js.map +1 -1
- package/dist/workflow-services.d.ts +3 -1
- package/dist/workflow-services.js +16 -6
- package/dist/workflow-services.js.map +1 -1
- package/docs/autonomous-workflow.md +28 -1
- package/docs/benchmark.md +18 -0
- package/docs/runtime-llm-flow.md +80 -9
- package/package.json +1 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { requireArg } from "./args.js";
|
|
2
|
+
import { computeVelocity } from "./benchmark.js";
|
|
3
|
+
import { computeSprintBurndown, renderBurndownAscii } from "./burndown.js";
|
|
4
|
+
import { calibrationReport, closeSprint, startSprint, velocityTrend, } from "./sprint-metrics.js";
|
|
5
|
+
export async function velocityCommand(options, io) {
|
|
6
|
+
const cwd = process.cwd();
|
|
7
|
+
if (typeof options.sprints === "string") {
|
|
8
|
+
const limit = Number(options.sprints);
|
|
9
|
+
if (!Number.isInteger(limit) || limit <= 0) {
|
|
10
|
+
throw new Error("--sprints must be a positive integer");
|
|
11
|
+
}
|
|
12
|
+
const report = await velocityTrend(cwd, limit);
|
|
13
|
+
if (options.json) {
|
|
14
|
+
io.log(JSON.stringify(report, null, 2));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
io.log(`Sprint Velocity Report`);
|
|
18
|
+
io.log(` Trend: ${report.trend}`);
|
|
19
|
+
for (const sprint of report.sprints) {
|
|
20
|
+
io.log(` ${sprint.sprintId} ${sprint.storiesCompleted} stories ${sprint.pointsCompleted} pts`);
|
|
21
|
+
}
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const report = await computeVelocity(cwd);
|
|
25
|
+
if (options.json) {
|
|
26
|
+
io.log(JSON.stringify(report, null, 2));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
io.log(`Velocity Report`);
|
|
30
|
+
io.log(` Stories completed: ${report.totalStoriesCompleted}`);
|
|
31
|
+
io.log(` Points completed: ${report.totalPointsCompleted}`);
|
|
32
|
+
io.log(` Avg actual days: ${report.avgActualDaysPerStory !== null ? report.avgActualDaysPerStory + "d" : "n/a"}`);
|
|
33
|
+
io.log(` vs Solo estimate: ${report.avgVsSoloPct !== null ? report.avgVsSoloPct + "%" : "n/a"}`);
|
|
34
|
+
io.log(` vs AI estimate: ${report.avgVsAiUnguidedPct !== null ? report.avgVsAiUnguidedPct + "%" : "n/a"}`);
|
|
35
|
+
io.log(` Trend: ${report.trend}`);
|
|
36
|
+
if (report.weeks.length > 0) {
|
|
37
|
+
io.log(`\nWeekly breakdown:`);
|
|
38
|
+
for (const week of report.weeks) {
|
|
39
|
+
io.log(` ${week.week} ${week.storiesCompleted} stories ${week.pointsCompleted} pts`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export async function sprintCommand(subcommand, options, io) {
|
|
44
|
+
const cwd = process.cwd();
|
|
45
|
+
if (subcommand === "start") {
|
|
46
|
+
const id = requireArg(options, "id");
|
|
47
|
+
const taskIds = requireArg(options, "tasks")
|
|
48
|
+
.split(",")
|
|
49
|
+
.map((taskId) => taskId.trim())
|
|
50
|
+
.filter(Boolean);
|
|
51
|
+
const sprint = await startSprint(cwd, id, taskIds);
|
|
52
|
+
if (options.json) {
|
|
53
|
+
io.log(JSON.stringify(sprint, null, 2));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
io.log(`Sprint started: ${sprint.id} (${sprint.taskIds.length} tasks)`);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (subcommand === "close") {
|
|
60
|
+
const id = requireArg(options, "id");
|
|
61
|
+
const sprint = await closeSprint(cwd, id);
|
|
62
|
+
if (options.json) {
|
|
63
|
+
io.log(JSON.stringify(sprint, null, 2));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
io.log(`Sprint closed: ${sprint.id}`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
throw new Error(`unknown sprint command: ${subcommand ?? ""}`.trim());
|
|
70
|
+
}
|
|
71
|
+
export async function calibrationCommand(options, io) {
|
|
72
|
+
const report = await calibrationReport(process.cwd());
|
|
73
|
+
const roleFilter = typeof options.role === "string" ? options.role : null;
|
|
74
|
+
const filtered = roleFilter
|
|
75
|
+
? { roles: report.roles.filter((role) => role.role === roleFilter) }
|
|
76
|
+
: report;
|
|
77
|
+
if (options.json) {
|
|
78
|
+
io.log(JSON.stringify(filtered, null, 2));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
io.log(`Calibration Report`);
|
|
82
|
+
for (const role of filtered.roles) {
|
|
83
|
+
io.log(` ${role.role} stories=${role.stories} declared=${role.avgDeclaredDays}d actual=${role.avgActualDays}d error=${role.avgErrorPct}% bias=${role.bias}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export async function burndownCommand(options, io) {
|
|
87
|
+
const cwd = process.cwd();
|
|
88
|
+
const sprintTaskIds = requireArg(options, "sprint")
|
|
89
|
+
.split(",")
|
|
90
|
+
.map((taskId) => taskId.trim())
|
|
91
|
+
.filter(Boolean);
|
|
92
|
+
if (sprintTaskIds.length === 0) {
|
|
93
|
+
throw new Error(`--sprint requires at least one task id`);
|
|
94
|
+
}
|
|
95
|
+
const series = await computeSprintBurndown(cwd, sprintTaskIds);
|
|
96
|
+
if (options.json) {
|
|
97
|
+
io.log(JSON.stringify(series, null, 2));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
for (const warning of series.warnings)
|
|
101
|
+
io.log(`⚠ ${warning}`);
|
|
102
|
+
if (series.totalPoints === 0) {
|
|
103
|
+
io.log("No points to chart — record estimates first with: orchestra estimate --task <id> ...");
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
io.log(`Sprint burndown total=${series.totalPoints} pts tasks=${series.sprintTaskIds.length}`);
|
|
107
|
+
io.log("");
|
|
108
|
+
io.log(renderBurndownAscii(series));
|
|
109
|
+
io.log("");
|
|
110
|
+
io.log("Task breakdown:");
|
|
111
|
+
for (const task of series.taskBreakdown) {
|
|
112
|
+
const architectPoints = task.architectPoints !== null ? `arch=${task.architectPoints}` : "arch=—";
|
|
113
|
+
const developerPoints = task.developerPoints !== null ? `dev=${task.developerPoints}` : "dev=—";
|
|
114
|
+
const done = task.completedAt
|
|
115
|
+
? `done ${task.completedAt.slice(0, 10)}`
|
|
116
|
+
: "pending";
|
|
117
|
+
io.log(` ${task.taskId.padEnd(14)} ${architectPoints.padEnd(10)} ${developerPoints.padEnd(10)} resolved=${task.resolvedPoints} ${done}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=sprint-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprint-commands.js","sourceRoot":"","sources":["../src/sprint-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CalibrationReport, SprintRecord, SprintVelocity, SprintVelocityReport } from "./types.js";
|
|
2
|
+
export declare const SPRINTS_FILE = "sprints.jsonl";
|
|
3
|
+
export declare function sprintsPath(root: string): string;
|
|
4
|
+
export declare function startSprint(root: string, sprintId: string, taskIds: string[]): Promise<SprintRecord>;
|
|
5
|
+
export declare function closeSprint(root: string, sprintId: string): Promise<SprintRecord>;
|
|
6
|
+
export declare function listSprints(root: string): Promise<SprintRecord[]>;
|
|
7
|
+
export declare function computeSprintVelocity(root: string, sprintId: string): Promise<SprintVelocity>;
|
|
8
|
+
export declare function velocityTrend(root: string, limit: number): Promise<SprintVelocityReport>;
|
|
9
|
+
export declare function calibrationReport(root: string): Promise<CalibrationReport>;
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { appendJsonLine, resolveWorkflowPath } from "./fs-utils.js";
|
|
4
|
+
import { appendEvent } from "./workspace.js";
|
|
5
|
+
import { computeBenchmark, listEstimates } from "./benchmark.js";
|
|
6
|
+
export const SPRINTS_FILE = "sprints.jsonl";
|
|
7
|
+
const POINTS_BY_SIZE = { xs: 1, s: 2, m: 3, l: 5, xl: 8 };
|
|
8
|
+
const CALIBRATION_BIAS_THRESHOLD_PCT = 30;
|
|
9
|
+
const CALIBRATION_MIN_STORIES = 3;
|
|
10
|
+
export function sprintsPath(root) {
|
|
11
|
+
return resolveWorkflowPath(root, SPRINTS_FILE);
|
|
12
|
+
}
|
|
13
|
+
export async function startSprint(root, sprintId, taskIds) {
|
|
14
|
+
if (taskIds.length === 0) {
|
|
15
|
+
throw new Error("--tasks requires at least one task id");
|
|
16
|
+
}
|
|
17
|
+
const existing = await listSprints(root);
|
|
18
|
+
const latest = existing.find((sprint) => sprint.id === sprintId);
|
|
19
|
+
if (latest?.status === "active") {
|
|
20
|
+
throw new Error(`sprint already active: ${sprintId}`);
|
|
21
|
+
}
|
|
22
|
+
const now = new Date().toISOString();
|
|
23
|
+
const record = {
|
|
24
|
+
id: sprintId,
|
|
25
|
+
taskIds,
|
|
26
|
+
status: "active",
|
|
27
|
+
startedAt: now,
|
|
28
|
+
closedAt: null,
|
|
29
|
+
};
|
|
30
|
+
await appendJsonLine(sprintsPath(root), record);
|
|
31
|
+
await appendEvent(root, {
|
|
32
|
+
type: "SPRINT_STARTED",
|
|
33
|
+
actor: "pm",
|
|
34
|
+
summary: `Sprint started: ${sprintId}`,
|
|
35
|
+
metadata: { sprintId, taskIds },
|
|
36
|
+
});
|
|
37
|
+
return record;
|
|
38
|
+
}
|
|
39
|
+
export async function closeSprint(root, sprintId) {
|
|
40
|
+
const latest = (await listSprints(root)).find((sprint) => sprint.id === sprintId);
|
|
41
|
+
if (!latest) {
|
|
42
|
+
throw new Error(`sprint not found: ${sprintId}`);
|
|
43
|
+
}
|
|
44
|
+
if (latest.status === "closed") {
|
|
45
|
+
return latest;
|
|
46
|
+
}
|
|
47
|
+
const record = {
|
|
48
|
+
...latest,
|
|
49
|
+
status: "closed",
|
|
50
|
+
closedAt: new Date().toISOString(),
|
|
51
|
+
};
|
|
52
|
+
await appendJsonLine(sprintsPath(root), record);
|
|
53
|
+
await appendEvent(root, {
|
|
54
|
+
type: "SPRINT_CLOSED",
|
|
55
|
+
actor: "pm",
|
|
56
|
+
summary: `Sprint closed: ${sprintId}`,
|
|
57
|
+
metadata: { sprintId, taskIds: record.taskIds },
|
|
58
|
+
});
|
|
59
|
+
return record;
|
|
60
|
+
}
|
|
61
|
+
export async function listSprints(root) {
|
|
62
|
+
const file = sprintsPath(root);
|
|
63
|
+
if (!existsSync(file))
|
|
64
|
+
return [];
|
|
65
|
+
const lines = (await readFile(file, "utf8"))
|
|
66
|
+
.split("\n")
|
|
67
|
+
.filter((line) => line.trim() !== "");
|
|
68
|
+
const latest = new Map();
|
|
69
|
+
for (const line of lines) {
|
|
70
|
+
const sprint = JSON.parse(line);
|
|
71
|
+
latest.set(sprint.id, sprint);
|
|
72
|
+
}
|
|
73
|
+
return [...latest.values()].sort((a, b) => a.startedAt.localeCompare(b.startedAt));
|
|
74
|
+
}
|
|
75
|
+
export async function computeSprintVelocity(root, sprintId) {
|
|
76
|
+
const sprint = (await listSprints(root)).find((item) => item.id === sprintId);
|
|
77
|
+
if (!sprint) {
|
|
78
|
+
throw new Error(`sprint not found: ${sprintId}`);
|
|
79
|
+
}
|
|
80
|
+
const completed = [];
|
|
81
|
+
for (const taskId of sprint.taskIds) {
|
|
82
|
+
const benchmark = await computeBenchmark(root, taskId).catch(() => null);
|
|
83
|
+
if (benchmark?.status === "complete" && benchmark.actualDays !== null) {
|
|
84
|
+
completed.push(benchmark);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
sprintId,
|
|
89
|
+
taskIds: sprint.taskIds,
|
|
90
|
+
storiesCompleted: completed.length,
|
|
91
|
+
pointsCompleted: completed.reduce((sum, story) => sum + POINTS_BY_SIZE[story.sizingLabel], 0),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export async function velocityTrend(root, limit) {
|
|
95
|
+
const closed = (await listSprints(root))
|
|
96
|
+
.filter((sprint) => sprint.status === "closed")
|
|
97
|
+
.slice(-limit);
|
|
98
|
+
const sprints = [];
|
|
99
|
+
for (const sprint of closed) {
|
|
100
|
+
sprints.push(await computeSprintVelocity(root, sprint.id));
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
sprints,
|
|
104
|
+
trend: computeTrend(sprints.map((s) => s.pointsCompleted)),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
export async function calibrationReport(root) {
|
|
108
|
+
const estimates = await listEstimates(root);
|
|
109
|
+
const byRole = new Map();
|
|
110
|
+
for (const estimate of estimates) {
|
|
111
|
+
const benchmark = await computeBenchmark(root, estimate.taskId).catch(() => null);
|
|
112
|
+
if (benchmark?.status !== "complete" || benchmark.actualDays === null) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const current = byRole.get(estimate.declaredBy) ?? {
|
|
116
|
+
declaredTotal: 0,
|
|
117
|
+
actualTotal: 0,
|
|
118
|
+
errorPctTotal: 0,
|
|
119
|
+
stories: 0,
|
|
120
|
+
};
|
|
121
|
+
const errorPct = ((benchmark.actualDays - estimate.soloEstimateDays) /
|
|
122
|
+
estimate.soloEstimateDays) *
|
|
123
|
+
100;
|
|
124
|
+
byRole.set(estimate.declaredBy, {
|
|
125
|
+
declaredTotal: current.declaredTotal + estimate.soloEstimateDays,
|
|
126
|
+
actualTotal: current.actualTotal + benchmark.actualDays,
|
|
127
|
+
errorPctTotal: current.errorPctTotal + errorPct,
|
|
128
|
+
stories: current.stories + 1,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
const roles = [];
|
|
132
|
+
for (const [role, stats] of byRole) {
|
|
133
|
+
const avgErrorPct = Math.round(stats.errorPctTotal / stats.stories);
|
|
134
|
+
const bias = calibrationBias(stats.stories, avgErrorPct);
|
|
135
|
+
const lessonRecorded = bias === "over" || bias === "under";
|
|
136
|
+
if (lessonRecorded) {
|
|
137
|
+
await recordCalibrationLesson(root, role, bias, avgErrorPct);
|
|
138
|
+
}
|
|
139
|
+
roles.push({
|
|
140
|
+
role,
|
|
141
|
+
stories: stats.stories,
|
|
142
|
+
avgDeclaredDays: round(stats.declaredTotal / stats.stories),
|
|
143
|
+
avgActualDays: round(stats.actualTotal / stats.stories),
|
|
144
|
+
avgErrorPct,
|
|
145
|
+
bias,
|
|
146
|
+
lessonRecorded,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return { roles: roles.sort((a, b) => a.role.localeCompare(b.role)) };
|
|
150
|
+
}
|
|
151
|
+
async function recordCalibrationLesson(root, role, bias, avgErrorPct) {
|
|
152
|
+
const eventsPath = resolveWorkflowPath(root, "events.jsonl");
|
|
153
|
+
const content = existsSync(eventsPath)
|
|
154
|
+
? await readFile(eventsPath, "utf8")
|
|
155
|
+
: "";
|
|
156
|
+
const signature = `calibration:${role}:${bias}`;
|
|
157
|
+
if (content.includes(signature)) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
await appendEvent(root, {
|
|
161
|
+
type: "LESSON_RECORDED",
|
|
162
|
+
actor: "system",
|
|
163
|
+
summary: `Calibration lesson recorded for ${role}`,
|
|
164
|
+
metadata: {
|
|
165
|
+
signature,
|
|
166
|
+
role,
|
|
167
|
+
bias,
|
|
168
|
+
avgErrorPct,
|
|
169
|
+
recommendation: bias === "under"
|
|
170
|
+
? "Increase future estimates or split stories before commitment."
|
|
171
|
+
: "Reduce future estimates or raise confidence thresholds before commitment.",
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
function calibrationBias(stories, avgErrorPct) {
|
|
176
|
+
if (stories < CALIBRATION_MIN_STORIES)
|
|
177
|
+
return "insufficient_data";
|
|
178
|
+
if (avgErrorPct > CALIBRATION_BIAS_THRESHOLD_PCT)
|
|
179
|
+
return "under";
|
|
180
|
+
if (avgErrorPct < -CALIBRATION_BIAS_THRESHOLD_PCT)
|
|
181
|
+
return "over";
|
|
182
|
+
return "balanced";
|
|
183
|
+
}
|
|
184
|
+
function computeTrend(points) {
|
|
185
|
+
if (points.length < 3)
|
|
186
|
+
return "insufficient_data";
|
|
187
|
+
const half = Math.floor(points.length / 2);
|
|
188
|
+
const firstHalf = average(points.slice(0, half));
|
|
189
|
+
const secondHalf = average(points.slice(-half));
|
|
190
|
+
const delta = secondHalf - firstHalf;
|
|
191
|
+
if (delta > firstHalf * 0.1)
|
|
192
|
+
return "improving";
|
|
193
|
+
if (delta < -firstHalf * 0.1)
|
|
194
|
+
return "declining";
|
|
195
|
+
return "stable";
|
|
196
|
+
}
|
|
197
|
+
function average(values) {
|
|
198
|
+
return values.reduce((sum, value) => sum + value, 0) / values.length;
|
|
199
|
+
}
|
|
200
|
+
function round(value) {
|
|
201
|
+
return Math.round(value * 100) / 100;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=sprint-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprint-metrics.js","sourceRoot":"","sources":["../src/sprint-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CliIo, CliOptions } from "./types.js";
|
|
2
|
+
export declare function telemetryStatusCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
3
|
+
export declare function telemetryEnableCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
4
|
+
export declare function telemetryExportCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
5
|
+
export declare function telemetrySubmitCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
6
|
+
export declare function telemetryEvalDatasetCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
7
|
+
export declare function telemetryDisableCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { requireArg } from "./args.js";
|
|
2
|
+
import { stringOption } from "./command-utils.js";
|
|
3
|
+
import { disableTelemetryConsent, enableTelemetryConsent, exportTelemetryDataset, exportTelemetryEvalDataset, getTelemetryConsent, parseTelemetryLevel, requiresSensitiveTelemetryOptIn, submitTelemetryDataset, } from "./telemetry.js";
|
|
4
|
+
export async function telemetryStatusCommand(options, io) {
|
|
5
|
+
const telemetry = await getTelemetryConsent();
|
|
6
|
+
if (options.json) {
|
|
7
|
+
io.log(JSON.stringify(telemetry, null, 2));
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
io.log("Telemetry: " + (telemetry.enabled ? "enabled" : "off"));
|
|
11
|
+
io.log("Level: " + telemetry.level);
|
|
12
|
+
io.log("Policy: " + telemetry.policyVersion);
|
|
13
|
+
}
|
|
14
|
+
export async function telemetryEnableCommand(options, io) {
|
|
15
|
+
const level = parseTelemetryLevel(stringOption(options.level) ?? "metadata");
|
|
16
|
+
if (requiresSensitiveTelemetryOptIn(level) && !options["confirm-sensitive"]) {
|
|
17
|
+
throw new Error("prompt-sample and eval-dataset telemetry require --confirm-sensitive");
|
|
18
|
+
}
|
|
19
|
+
const telemetry = await enableTelemetryConsent({
|
|
20
|
+
level,
|
|
21
|
+
actor: stringOption(options.actor) ?? "user",
|
|
22
|
+
});
|
|
23
|
+
if (options.json) {
|
|
24
|
+
io.log(JSON.stringify(telemetry, null, 2));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
io.log("Telemetry enabled at level " + telemetry.level);
|
|
28
|
+
}
|
|
29
|
+
export async function telemetryExportCommand(options, io) {
|
|
30
|
+
const result = await exportTelemetryDataset({
|
|
31
|
+
dryRun: Boolean(options["dry-run"]),
|
|
32
|
+
});
|
|
33
|
+
if (options.json) {
|
|
34
|
+
io.log(JSON.stringify(result, null, 2));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
io.log((result.dryRun ? "Telemetry export dry run" : "Telemetry exported") +
|
|
38
|
+
": " +
|
|
39
|
+
result.recordCount +
|
|
40
|
+
" record(s)");
|
|
41
|
+
if (result.file) {
|
|
42
|
+
io.log("File: " + result.file);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function telemetrySubmitCommand(options, io) {
|
|
46
|
+
const result = await submitTelemetryDataset({
|
|
47
|
+
file: requireArg(options, "file"),
|
|
48
|
+
endpoint: requireArg(options, "endpoint"),
|
|
49
|
+
});
|
|
50
|
+
if (options.json) {
|
|
51
|
+
io.log(JSON.stringify(result, null, 2));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
io.log("Telemetry submission recorded: " + result.fileHash);
|
|
55
|
+
}
|
|
56
|
+
export async function telemetryEvalDatasetCommand(options, io) {
|
|
57
|
+
const result = await exportTelemetryEvalDataset({
|
|
58
|
+
dryRun: Boolean(options["dry-run"]),
|
|
59
|
+
});
|
|
60
|
+
if (options.json) {
|
|
61
|
+
io.log(JSON.stringify(result, null, 2));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
io.log((result.dryRun ? "Eval dataset dry run" : "Eval dataset exported") +
|
|
65
|
+
": " +
|
|
66
|
+
result.recordCount +
|
|
67
|
+
" record(s)");
|
|
68
|
+
if (result.file) {
|
|
69
|
+
io.log("File: " + result.file);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export async function telemetryDisableCommand(options, io) {
|
|
73
|
+
const telemetry = await disableTelemetryConsent({
|
|
74
|
+
actor: stringOption(options.actor) ?? "user",
|
|
75
|
+
});
|
|
76
|
+
if (options.json) {
|
|
77
|
+
io.log(JSON.stringify(telemetry, null, 2));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
io.log("Telemetry disabled");
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=telemetry-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-commands.js","sourceRoot":"","sources":["../src/telemetry-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { requireArg } from "./args.js";
|
|
2
|
+
import { removeUndefined, stringOption } from "./command-utils.js";
|
|
3
|
+
import { lintMermaidDiagram, recordDiagramLintEvidence, } from "./diagram-validation.js";
|
|
4
|
+
import { evaluateMcpOAuthProxy, } from "./mcp-oauth-proxy.js";
|
|
5
|
+
export async function diagramsLintCommand(options, io) {
|
|
6
|
+
const result = await lintMermaidDiagram({
|
|
7
|
+
filePath: requireArg(options, "file"),
|
|
8
|
+
});
|
|
9
|
+
const evidence = stringOption(options.task)
|
|
10
|
+
? await recordDiagramLintEvidence({
|
|
11
|
+
taskId: stringOption(options.task) ?? "",
|
|
12
|
+
result,
|
|
13
|
+
})
|
|
14
|
+
: undefined;
|
|
15
|
+
const output = removeUndefined({ result, evidence });
|
|
16
|
+
if (options.json) {
|
|
17
|
+
io.log(JSON.stringify(output, null, 2));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
io.log(result.valid ? "Mermaid diagram valid" : "Mermaid diagram invalid");
|
|
21
|
+
if (result.installHint) {
|
|
22
|
+
io.log(result.installHint);
|
|
23
|
+
}
|
|
24
|
+
if (evidence) {
|
|
25
|
+
io.log("Created " + evidence.artifact);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (!result.valid) {
|
|
29
|
+
throw new Error("diagram lint failed");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export async function mcpOAuthProxyEvaluateCommand(options, io) {
|
|
33
|
+
const evaluation = evaluateMcpOAuthProxy(removeUndefined({
|
|
34
|
+
enabled: Boolean(options.enable),
|
|
35
|
+
mode: parseMcpProxyMode(stringOption(options.mode) ?? "stdio-proxy"),
|
|
36
|
+
serverUrl: requireArg(options, "server-url"),
|
|
37
|
+
tokenStorage: parseMcpSecretStorage(stringOption(options["token-storage"]) ?? "keychain"),
|
|
38
|
+
tokenPath: stringOption(options["token-path"]),
|
|
39
|
+
refreshWindowSeconds: Number(stringOption(options["refresh-window"]) ?? 300),
|
|
40
|
+
approvedBy: options.approve
|
|
41
|
+
? (stringOption(options.approver) ?? "local-user")
|
|
42
|
+
: undefined,
|
|
43
|
+
}));
|
|
44
|
+
if (options.json) {
|
|
45
|
+
io.log(JSON.stringify(evaluation, null, 2));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
io.log(evaluation.approved
|
|
49
|
+
? "MCP proxy plan approved"
|
|
50
|
+
: "MCP proxy plan has risks");
|
|
51
|
+
for (const risk of evaluation.risks) {
|
|
52
|
+
io.log("RISK: " + risk);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function parseMcpProxyMode(value) {
|
|
56
|
+
if (["stdio-proxy", "direct-http", "tool-native-oauth"].includes(value)) {
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
throw new Error("unknown MCP proxy mode: " + value);
|
|
60
|
+
}
|
|
61
|
+
function parseMcpSecretStorage(value) {
|
|
62
|
+
if (["keychain", "libsecret", "windows-credential", "secure-file"].includes(value)) {
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
throw new Error("unknown MCP secret storage: " + value);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=tool-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-commands.js","sourceRoot":"","sources":["../src/tool-commands.ts"],"names":[],"mappings":"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"}
|