@alevental/cccp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/.claude/skills/cccp-pipeline/SKILL.md +562 -0
  2. package/.claude/skills/cccp-run/SKILL.md +111 -0
  3. package/README.md +280 -0
  4. package/dist/activity-bus.d.ts +9 -0
  5. package/dist/activity-bus.js +10 -0
  6. package/dist/activity-bus.js.map +1 -0
  7. package/dist/agent-resolver.d.ts +29 -0
  8. package/dist/agent-resolver.js +122 -0
  9. package/dist/agent-resolver.js.map +1 -0
  10. package/dist/agent.d.ts +39 -0
  11. package/dist/agent.js +117 -0
  12. package/dist/agent.js.map +1 -0
  13. package/dist/autoresearch.d.ts +11 -0
  14. package/dist/autoresearch.js +295 -0
  15. package/dist/autoresearch.js.map +1 -0
  16. package/dist/cli.d.ts +2 -0
  17. package/dist/cli.js +157 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/config.d.ts +126 -0
  20. package/dist/config.js +76 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/context.d.ts +24 -0
  23. package/dist/context.js +82 -0
  24. package/dist/context.js.map +1 -0
  25. package/dist/contract.d.ts +26 -0
  26. package/dist/contract.js +65 -0
  27. package/dist/contract.js.map +1 -0
  28. package/dist/db.d.ts +70 -0
  29. package/dist/db.js +358 -0
  30. package/dist/db.js.map +1 -0
  31. package/dist/dispatcher.d.ts +9 -0
  32. package/dist/dispatcher.js +7 -0
  33. package/dist/dispatcher.js.map +1 -0
  34. package/dist/errors.d.ts +16 -0
  35. package/dist/errors.js +30 -0
  36. package/dist/errors.js.map +1 -0
  37. package/dist/evaluator.d.ts +23 -0
  38. package/dist/evaluator.js +49 -0
  39. package/dist/evaluator.js.map +1 -0
  40. package/dist/gate/auto-approve.d.ts +9 -0
  41. package/dist/gate/auto-approve.js +11 -0
  42. package/dist/gate/auto-approve.js.map +1 -0
  43. package/dist/gate/gate-strategy.d.ts +22 -0
  44. package/dist/gate/gate-strategy.js +2 -0
  45. package/dist/gate/gate-strategy.js.map +1 -0
  46. package/dist/gate/gate-watcher.d.ts +15 -0
  47. package/dist/gate/gate-watcher.js +64 -0
  48. package/dist/gate/gate-watcher.js.map +1 -0
  49. package/dist/logger.d.ts +24 -0
  50. package/dist/logger.js +22 -0
  51. package/dist/logger.js.map +1 -0
  52. package/dist/mcp/gate-notifier.d.ts +26 -0
  53. package/dist/mcp/gate-notifier.js +161 -0
  54. package/dist/mcp/gate-notifier.js.map +1 -0
  55. package/dist/mcp/mcp-config.d.ts +25 -0
  56. package/dist/mcp/mcp-config.js +80 -0
  57. package/dist/mcp/mcp-config.js.map +1 -0
  58. package/dist/mcp/mcp-server.d.ts +1 -0
  59. package/dist/mcp/mcp-server.js +262 -0
  60. package/dist/mcp/mcp-server.js.map +1 -0
  61. package/dist/pge.d.ts +12 -0
  62. package/dist/pge.js +361 -0
  63. package/dist/pge.js.map +1 -0
  64. package/dist/pipeline.d.ts +6 -0
  65. package/dist/pipeline.js +120 -0
  66. package/dist/pipeline.js.map +1 -0
  67. package/dist/prompt.d.ts +67 -0
  68. package/dist/prompt.js +121 -0
  69. package/dist/prompt.js.map +1 -0
  70. package/dist/runner.d.ts +11 -0
  71. package/dist/runner.js +494 -0
  72. package/dist/runner.js.map +1 -0
  73. package/dist/scaffold/index.d.ts +14 -0
  74. package/dist/scaffold/index.js +260 -0
  75. package/dist/scaffold/index.js.map +1 -0
  76. package/dist/scaffold/templates.d.ts +47 -0
  77. package/dist/scaffold/templates.js +2177 -0
  78. package/dist/scaffold/templates.js.map +1 -0
  79. package/dist/stage-helpers.d.ts +7 -0
  80. package/dist/stage-helpers.js +27 -0
  81. package/dist/stage-helpers.js.map +1 -0
  82. package/dist/state.d.ts +43 -0
  83. package/dist/state.js +177 -0
  84. package/dist/state.js.map +1 -0
  85. package/dist/stream/stream-tail.d.ts +17 -0
  86. package/dist/stream/stream-tail.js +95 -0
  87. package/dist/stream/stream-tail.js.map +1 -0
  88. package/dist/stream/stream.d.ts +142 -0
  89. package/dist/stream/stream.js +251 -0
  90. package/dist/stream/stream.js.map +1 -0
  91. package/dist/temp-tracker.d.ts +6 -0
  92. package/dist/temp-tracker.js +24 -0
  93. package/dist/temp-tracker.js.map +1 -0
  94. package/dist/tui/cmux.d.ts +22 -0
  95. package/dist/tui/cmux.js +82 -0
  96. package/dist/tui/cmux.js.map +1 -0
  97. package/dist/tui/components.d.ts +21 -0
  98. package/dist/tui/components.js +108 -0
  99. package/dist/tui/components.js.map +1 -0
  100. package/dist/tui/dashboard.d.ts +6 -0
  101. package/dist/tui/dashboard.js +125 -0
  102. package/dist/tui/dashboard.js.map +1 -0
  103. package/dist/tui/detail-log.d.ts +10 -0
  104. package/dist/tui/detail-log.js +171 -0
  105. package/dist/tui/detail-log.js.map +1 -0
  106. package/dist/types.d.ts +273 -0
  107. package/dist/types.js +2 -0
  108. package/dist/types.js.map +1 -0
  109. package/examples/agents/diff-evaluator.md +57 -0
  110. package/examples/agents/prompt-tuner.md +30 -0
  111. package/examples/agents/summarizer.md +14 -0
  112. package/examples/autoresearch-artifacts/expected-output.md +17 -0
  113. package/examples/autoresearch-artifacts/prompt.md +35 -0
  114. package/examples/autoresearch-artifacts/source-material.md +28 -0
  115. package/examples/business-case.yaml +41 -0
  116. package/examples/cccp.yaml +48 -0
  117. package/examples/content-calendar.yaml +59 -0
  118. package/examples/customer-feedback-loop.yaml +44 -0
  119. package/examples/design-sprint.yaml +54 -0
  120. package/examples/feature-development.yaml +96 -0
  121. package/examples/growth-experiment.yaml +49 -0
  122. package/examples/incident-runbook.yaml +43 -0
  123. package/examples/product-launch.yaml +85 -0
  124. package/examples/prompt-tuning.yaml +25 -0
  125. package/examples/quarterly-planning.yaml +51 -0
  126. package/examples/sprint-cycle.yaml +67 -0
  127. package/package.json +47 -0
@@ -0,0 +1,125 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect, useRef, useCallback } from "react";
3
+ import { render, Box, Text, useStdout } from "ink";
4
+ import { resolve } from "node:path";
5
+ import { loadState } from "../state.js";
6
+ import { openDatabase } from "../db.js";
7
+ import { activityBus } from "../activity-bus.js";
8
+ import { StreamTailer } from "../stream/stream-tail.js";
9
+ import { Header, StageList, AgentActivityPanel } from "./components.js";
10
+ import { DetailLog } from "./detail-log.js";
11
+ function Dashboard({ runId, artifactDir, projectDir, initialState, useEventBus, onComplete }) {
12
+ const { stdout } = useStdout();
13
+ const [state, setState] = useState(initialState);
14
+ const [activity, setActivity] = useState(null);
15
+ const [events, setEvents] = useState([]);
16
+ const [startTime] = useState(Date.now());
17
+ const [elapsed, setElapsed] = useState(0);
18
+ const lastEventId = useRef(0);
19
+ // Debounce activity updates.
20
+ const lastActivityTime = useRef(0);
21
+ const pendingActivity = useRef(null);
22
+ const debounceTimer = useRef(null);
23
+ const updateActivity = useCallback((a) => {
24
+ const now = Date.now();
25
+ if (now - lastActivityTime.current >= 100) {
26
+ lastActivityTime.current = now;
27
+ setActivity(a);
28
+ }
29
+ else {
30
+ pendingActivity.current = a;
31
+ if (!debounceTimer.current) {
32
+ debounceTimer.current = setTimeout(() => {
33
+ debounceTimer.current = null;
34
+ if (pendingActivity.current) {
35
+ lastActivityTime.current = Date.now();
36
+ setActivity(pendingActivity.current);
37
+ pendingActivity.current = null;
38
+ }
39
+ }, 100);
40
+ }
41
+ }
42
+ }, []);
43
+ // Subscribe to in-process activity bus.
44
+ useEffect(() => {
45
+ if (!useEventBus)
46
+ return;
47
+ const handler = (a) => updateActivity(a);
48
+ activityBus.on("activity", handler);
49
+ return () => {
50
+ activityBus.off("activity", handler);
51
+ if (debounceTimer.current)
52
+ clearTimeout(debounceTimer.current);
53
+ };
54
+ }, [useEventBus, updateActivity]);
55
+ // File-tailing mode for standalone dashboard.
56
+ useEffect(() => {
57
+ if (useEventBus)
58
+ return;
59
+ const cccpDir = resolve(artifactDir, ".cccp");
60
+ const tailer = new StreamTailer(cccpDir);
61
+ tailer.on("activity", (a) => updateActivity(a));
62
+ tailer.start().catch(() => { });
63
+ return () => { tailer.stop(); };
64
+ }, [artifactDir, useEventBus, updateActivity]);
65
+ // Poll SQLite for state changes + events.
66
+ useEffect(() => {
67
+ const interval = setInterval(async () => {
68
+ try {
69
+ const updated = await loadState(runId, projectDir);
70
+ if (!updated)
71
+ return;
72
+ if (updated.status !== state.status ||
73
+ JSON.stringify(updated.stages) !== JSON.stringify(state.stages) ||
74
+ updated.gate?.status !== state.gate?.status) {
75
+ setState(updated);
76
+ if (updated.status === "passed" ||
77
+ updated.status === "failed" ||
78
+ updated.status === "error") {
79
+ setTimeout(() => onComplete?.(), 500);
80
+ }
81
+ }
82
+ // Poll events incrementally.
83
+ const db = await openDatabase(projectDir);
84
+ const newEvents = db.getEvents(updated.runId, lastEventId.current);
85
+ if (newEvents.length > 0) {
86
+ lastEventId.current = newEvents[newEvents.length - 1].id;
87
+ setEvents((prev) => [...prev, ...newEvents].slice(-200));
88
+ }
89
+ }
90
+ catch {
91
+ // Ignore — DB may be mid-write.
92
+ }
93
+ }, 300);
94
+ return () => clearInterval(interval);
95
+ }, [runId, projectDir, onComplete]);
96
+ // Tick elapsed timer.
97
+ useEffect(() => {
98
+ const interval = setInterval(() => {
99
+ setElapsed(Date.now() - startTime);
100
+ }, 1000);
101
+ return () => clearInterval(interval);
102
+ }, [startTime]);
103
+ const isComplete = state.status === "passed" ||
104
+ state.status === "failed" ||
105
+ state.status === "error";
106
+ const terminalRows = stdout.rows ?? 24;
107
+ return (_jsxs(Box, { flexDirection: "column", height: terminalRows, overflow: "hidden", children: [_jsx(Header, { pipelineName: state.pipeline, project: state.project, elapsed: elapsed }), _jsxs(Box, { marginTop: 1, flexDirection: "row", height: Math.max(state.stageOrder.length + 3, 8), overflow: "hidden", children: [_jsx(StageList, { state: state }), !isComplete ? (_jsx(AgentActivityPanel, { activity: activity })) : (_jsxs(Box, { flexDirection: "column", flexGrow: 1, marginLeft: 1, children: [_jsxs(Text, { color: state.status === "passed" ? "green" : "red", bold: true, children: ["Pipeline ", state.status, "."] }), activity && activity.totalCostUsd > 0 && (_jsxs(Text, { dimColor: true, children: ["Total cost: $", activity.totalCostUsd.toFixed(4)] }))] }))] }), _jsx(DetailLog, { events: events, chromeHeight: Math.max(state.stageOrder.length + 3, 8) + 3 })] }));
108
+ }
109
+ // ---------------------------------------------------------------------------
110
+ // Launch dashboard (standalone)
111
+ // ---------------------------------------------------------------------------
112
+ export async function launchDashboard(runId, projectDir, initialState) {
113
+ return new Promise((resolve) => {
114
+ const { unmount, waitUntilExit } = render(_jsx(Dashboard, { runId: runId, artifactDir: initialState.artifactDir, projectDir: projectDir, initialState: initialState, onComplete: () => {
115
+ unmount();
116
+ resolve();
117
+ } }));
118
+ waitUntilExit().then(() => resolve());
119
+ });
120
+ }
121
+ export function startDashboard(runId, projectDir, initialState) {
122
+ const { unmount } = render(_jsx(Dashboard, { runId: runId, artifactDir: initialState.artifactDir, projectDir: projectDir, initialState: initialState, useEventBus: true }));
123
+ return { unmount };
124
+ }
125
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tui/dashboard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import type { StateEvent } from "../types.js";
3
+ interface DetailLogProps {
4
+ events: StateEvent[];
5
+ /** Height of the fixed panes above (header + split pane + margins). */
6
+ chromeHeight?: number;
7
+ }
8
+ export declare function DetailLog({ events, chromeHeight }: DetailLogProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function formatDetailEvent(event: StateEvent): React.ReactNode[];
10
+ export {};
@@ -0,0 +1,171 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useStdout } from "ink";
3
+ export function DetailLog({ events, chromeHeight = 14 }) {
4
+ const { stdout } = useStdout();
5
+ // +2 for the DetailLog title line and its marginTop
6
+ const availableHeight = Math.max(5, (stdout.rows ?? 24) - chromeHeight - 2);
7
+ // Flatten all events into formatted lines, then show the last N.
8
+ const allLines = [];
9
+ for (const event of events) {
10
+ allLines.push(...formatDetailEvent(event));
11
+ }
12
+ const visibleLines = allLines.slice(-availableHeight);
13
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, underline: true, children: "Detail Log" }), visibleLines.length === 0 && (_jsx(Text, { dimColor: true, children: " Waiting for events..." })), visibleLines.map((line, i) => (_jsx(Box, { children: line }, i)))] }));
14
+ }
15
+ // ---------------------------------------------------------------------------
16
+ // Event formatting — returns one or more <Text> lines per event
17
+ // ---------------------------------------------------------------------------
18
+ // PAD must be 10 chars to align with "{HH:MM:SS} " (8 + 2 = 10) before the bar.
19
+ const PAD = " ";
20
+ const BAR = "\u2502";
21
+ const MAX_PREVIEW_LINES = 15;
22
+ /** Render a preview of artifact content under the PGE gutter bar. */
23
+ function artifactPreview(content) {
24
+ if (!content.trim())
25
+ return [];
26
+ const lines = content.split("\n").filter((l) => l.trim());
27
+ const preview = lines.slice(0, MAX_PREVIEW_LINES);
28
+ const remaining = lines.length - preview.length;
29
+ const result = [];
30
+ for (const [i, line] of preview.entries()) {
31
+ const truncated = line.length > 80 ? line.slice(0, 77) + "..." : line;
32
+ result.push(_jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: PAD }), _jsx(Text, { color: "cyan", children: BAR }), _jsxs(Text, { dimColor: true, children: [" ", truncated] })] }, `ap-${i}`));
33
+ }
34
+ if (remaining > 0) {
35
+ result.push(_jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: PAD }), _jsx(Text, { color: "cyan", children: BAR }), _jsxs(Text, { dimColor: true, children: [" ... ", remaining, " more lines"] })] }, "ap-more"));
36
+ }
37
+ return result;
38
+ }
39
+ export function formatDetailEvent(event) {
40
+ const time = event.timestamp.slice(11, 19); // HH:MM:SS
41
+ const d = (event.data ?? {});
42
+ switch (event.eventType) {
43
+ // --- PGE events ---
44
+ case "pge_planner_start": {
45
+ const agent = String(d.agent ?? "?");
46
+ return [
47
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", "\u250C\u2500", " PGE: ", event.stageName] })] }, "ps"),
48
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: PAD }), _jsx(Text, { color: "cyan", children: BAR }), _jsxs(Text, { color: "yellow", children: [" ", "\u25B6", " Planner [", agent, "]"] })] }, "ps2"),
49
+ ];
50
+ }
51
+ case "pge_planner_done":
52
+ return [
53
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", BAR] }), _jsxs(Text, { dimColor: true, children: [" ", "\u2713", " Task plan ", "\u2192", " "] }), _jsx(Text, { color: "white", children: String(d.taskPlanPath ?? "") })] }, "pd"),
54
+ ];
55
+ case "pge_contract_start": {
56
+ const agent = String(d.agent ?? "?");
57
+ return [
58
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", BAR] }), _jsxs(Text, { color: "yellow", children: [" ", "\u25B6", " Contract [", agent, "]"] })] }, "cs"),
59
+ ];
60
+ }
61
+ case "pge_contract_done": {
62
+ const contractPath = String(d.contractPath ?? "");
63
+ const contract = d.contractContent ?? "";
64
+ return [
65
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", BAR] }), _jsxs(Text, { dimColor: true, children: [" ", "\u2713", " Contract ", "\u2192", " "] }), _jsx(Text, { color: "white", children: contractPath })] }, "cd"),
66
+ ...(contract ? artifactPreview(contract) : []),
67
+ ];
68
+ }
69
+ case "pge_start": {
70
+ const planner = d.planner ?? "?";
71
+ const gen = d.generator ?? "?";
72
+ const eval_ = d.evaluator ?? "?";
73
+ const maxIter = String(d.maxIterations ?? "?");
74
+ return [
75
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", BAR] }), _jsxs(Text, { children: [" Planner: ", _jsx(Text, { color: "green", children: planner }), " Generator: ", _jsx(Text, { color: "green", children: gen }), " Evaluator: ", _jsx(Text, { color: "green", children: eval_ })] })] }, "s1"),
76
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: PAD }), _jsx(Text, { color: "cyan", children: BAR }), _jsxs(Text, { children: [" Max: ", maxIter, " iters \u2014 GE loop starting"] })] }, "s2"),
77
+ ];
78
+ }
79
+ case "pge_generator_start": {
80
+ const agent = String(d.agent ?? "?");
81
+ const iter = String(d.iteration ?? "?");
82
+ const maxI = String(d.maxIterations ?? "?");
83
+ return [
84
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", BAR] }), _jsxs(Text, { color: "yellow", children: [" ", "\u25B6", " Generator [", agent, "] iter ", iter, "/", maxI] })] }, "gs"),
85
+ ];
86
+ }
87
+ case "pge_generator_done":
88
+ return [
89
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", BAR] }), _jsxs(Text, { dimColor: true, children: [" ", "\u2713", " Deliverable ", "\u2192", " "] }), _jsx(Text, { color: "white", children: String(d.deliverablePath ?? "") })] }, "gd"),
90
+ ];
91
+ case "pge_evaluator_start": {
92
+ const agent = String(d.agent ?? "?");
93
+ const iter = String(d.iteration ?? "?");
94
+ const maxI = String(d.maxIterations ?? "?");
95
+ return [
96
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", BAR] }), _jsxs(Text, { color: "yellow", children: [" ", "\u25B6", " Evaluator [", agent, "] iter ", iter, "/", maxI] })] }, "es"),
97
+ ];
98
+ }
99
+ case "pge_evaluator_done":
100
+ return [
101
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", BAR] }), _jsxs(Text, { dimColor: true, children: [" ", "\u2713", " Evaluation ", "\u2192", " "] }), _jsx(Text, { color: "white", children: String(d.evaluationPath ?? "") })] }, "ed"),
102
+ ];
103
+ case "pge_evaluation": {
104
+ const outcome = String(d.outcome ?? "?");
105
+ const iter = String(d.iteration ?? "?");
106
+ const maxIter = String(d.maxIterations ?? "?");
107
+ const evalContent = d.evaluationContent ?? "";
108
+ const evalPath = String(d.evaluationPath ?? "");
109
+ const willRetry = d.willRetry;
110
+ const escalation = d.escalation;
111
+ if (outcome === "pass") {
112
+ return [
113
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", BAR] }), _jsxs(Text, { color: "green", bold: true, children: [" ", "\u2714", " PASS (iter ", iter, "/", maxIter, ")"] }), _jsxs(Text, { dimColor: true, children: [" ", "\u2192", " "] }), _jsx(Text, { color: "white", children: evalPath })] }, "ep"),
114
+ ...(evalContent ? artifactPreview(evalContent) : []),
115
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: PAD }), _jsx(Text, { color: "cyan", children: "\u2514\u2500\u2500\u2500\u2500\u2500\u2500" })] }, "epc"),
116
+ ];
117
+ }
118
+ if (outcome === "fail") {
119
+ const suffix = willRetry
120
+ ? " \u2014 retrying"
121
+ : ` \u2014 exhausted, escalation: ${escalation ?? "stop"}`;
122
+ return [
123
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", BAR] }), _jsxs(Text, { color: "red", children: [" ", "\u2717", " FAIL (iter ", iter, "/", maxIter, ")", suffix] }), _jsxs(Text, { dimColor: true, children: [" ", "\u2192", " "] }), _jsx(Text, { color: "white", children: evalPath })] }, "ef"),
124
+ ...(evalContent ? artifactPreview(evalContent) : []),
125
+ ...(!willRetry ? [
126
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: PAD }), _jsx(Text, { color: "cyan", children: "\u2514\u2500\u2500\u2500\u2500\u2500\u2500" })] }, "efc"),
127
+ ] : []),
128
+ ];
129
+ }
130
+ // parse_error
131
+ return [
132
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "cyan", children: [" ", BAR] }), _jsxs(Text, { color: "red", children: [" ", "\u26A0", " PARSE ERROR: ", String(d.error ?? "unknown")] })] }, "ee"),
133
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: PAD }), _jsx(Text, { color: "cyan", children: "\u2514\u2500\u2500\u2500\u2500\u2500\u2500" })] }, "eec"),
134
+ ];
135
+ }
136
+ // --- Non-PGE events (compact single line) ---
137
+ case "stage_start":
138
+ return [
139
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "yellow", children: [" ", "\u25B6", " Started: ", event.stageName] })] }, "ss"),
140
+ ];
141
+ case "stage_complete": {
142
+ const status = d.status ?? "?";
143
+ const ms = d.durationMs;
144
+ const dur = ms != null ? ` (${(ms / 1000).toFixed(1)}s)` : "";
145
+ const color = status === "passed" ? "green" : "red";
146
+ return [
147
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: color, children: [" ", status === "passed" ? "\u2713" : "\u2717", " Completed: ", event.stageName, " ", status, dur] })] }, "sc"),
148
+ ];
149
+ }
150
+ case "gate_pending":
151
+ return [
152
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "blue", children: [" ", "\u23F8", " Gate pending: ", event.stageName] })] }, "gp"),
153
+ ];
154
+ case "gate_responded":
155
+ return [
156
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: "green", children: [" ", "\u2713", " Gate responded: ", event.stageName] })] }, "gr"),
157
+ ];
158
+ case "pipeline_complete": {
159
+ const status = d.status ?? "?";
160
+ const color = status === "passed" ? "green" : "red";
161
+ return [
162
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { color: color, bold: true, children: [" ", "\u2550", " Pipeline ", status] })] }, "pc"),
163
+ ];
164
+ }
165
+ default:
166
+ return [
167
+ _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: time }), _jsxs(Text, { children: [" ", event.eventType, event.stageName ? ` ${event.stageName}` : ""] })] }, "df"),
168
+ ];
169
+ }
170
+ }
171
+ //# sourceMappingURL=detail-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detail-log.js","sourceRoot":"","sources":["../../src/tui/detail-log.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ import type { ProjectConfig } from "./config.js";
2
+ import type { GateStrategy } from "./gate/gate-strategy.js";
3
+ /** Top-level pipeline definition loaded from YAML. */
4
+ export interface Pipeline {
5
+ name: string;
6
+ description?: string;
7
+ /** Default variables available to all stages. */
8
+ variables?: Record<string, string>;
9
+ stages: Stage[];
10
+ }
11
+ /** A single stage in a pipeline. Discriminated on `type`. */
12
+ export type Stage = AgentStage | PgeStage | HumanGateStage | AutoresearchStage;
13
+ /** Base fields shared by every stage type. */
14
+ export interface StageBase {
15
+ name: string;
16
+ /** Task instructions passed to the agent as the primary directive. */
17
+ task?: string;
18
+ /** Path to a file whose contents are used as the task body (mutually exclusive with `task`). */
19
+ task_file?: string;
20
+ /** Named MCP profile (resolved from project cccp.yaml). */
21
+ mcp_profile?: string;
22
+ /** Stage-level variable overrides. */
23
+ variables?: Record<string, string>;
24
+ }
25
+ /** Simple stage: dispatch one agent, collect output. */
26
+ export interface AgentStage extends StageBase {
27
+ type: "agent";
28
+ agent: string;
29
+ operation?: string;
30
+ inputs?: string[];
31
+ output?: string;
32
+ allowed_tools?: string[];
33
+ }
34
+ /** Shared agent config for planner, generator, and evaluator in PGE stages. */
35
+ export interface PgeAgentConfig {
36
+ agent: string;
37
+ operation?: string;
38
+ mcp_profile?: string;
39
+ allowed_tools?: string[];
40
+ /** Agent-specific input files (merged with stage-level inputs at dispatch). */
41
+ inputs?: string[];
42
+ }
43
+ /** Plan-Generate-Evaluate stage with retry loop. */
44
+ export interface PgeStage extends StageBase {
45
+ type: "pge";
46
+ /** Path to the plan document containing the task reference. */
47
+ plan?: string;
48
+ /** Stage-level inputs shared across all agents (planner, generator, evaluator). */
49
+ inputs?: string[];
50
+ /** Planner agent — reads plan + codebase, writes task-plan.md. */
51
+ planner: PgeAgentConfig;
52
+ /** Generator agent — reads contract + task plan, produces deliverable. */
53
+ generator: PgeAgentConfig;
54
+ /** Evaluator agent — writes contract, then evaluates deliverable on each iteration. */
55
+ evaluator: PgeAgentConfig;
56
+ contract: {
57
+ deliverable: string;
58
+ /** Structural template for the contract writer to follow. */
59
+ template?: string;
60
+ /** Free-form guidance for the planner and contract writer. */
61
+ guidance?: string;
62
+ max_iterations: number;
63
+ };
64
+ /** What to do when max iterations reached with FAIL. */
65
+ on_fail?: EscalationStrategy;
66
+ }
67
+ /** A single success criterion in a PGE contract. @deprecated Used by contract.ts only. */
68
+ export interface ContractCriterion {
69
+ name: string;
70
+ description: string;
71
+ }
72
+ /** Human approval gate — blocks pipeline until approved/rejected. */
73
+ export interface HumanGateStage extends StageBase {
74
+ type: "human_gate";
75
+ /** Artifact paths the reviewer should inspect. */
76
+ artifacts?: string[];
77
+ /** What the reviewer is being asked to approve. */
78
+ prompt?: string;
79
+ /** What to do if the gate is rejected. */
80
+ on_reject?: "retry" | "stop";
81
+ }
82
+ /** Autoresearch stage: iterative artifact optimization against ground truth. */
83
+ export interface AutoresearchStage extends StageBase {
84
+ type: "autoresearch";
85
+ /** Path to the artifact being tuned (modified by adjuster on each iteration). */
86
+ artifact: string;
87
+ /** Path to the known correct output (ground truth for comparison). */
88
+ ground_truth: string;
89
+ /** Path where the executor writes its output. */
90
+ output: string;
91
+ /** Stage-level inputs shared across all agents. */
92
+ inputs?: string[];
93
+ /** Adjuster agent — reads evaluation feedback, modifies the artifact. */
94
+ adjuster: PgeAgentConfig;
95
+ /** Executor agent — runs the task using the current artifact. */
96
+ executor: PgeAgentConfig;
97
+ /** Evaluator agent — compares executor output against ground truth. */
98
+ evaluator: PgeAgentConfig;
99
+ /** Max iterations (optional — omit for unlimited). */
100
+ max_iterations?: number;
101
+ /** What to do when max iterations reached with FAIL. */
102
+ on_fail?: EscalationStrategy;
103
+ }
104
+ export type EscalationStrategy = "stop" | "human_gate" | "skip";
105
+ export type StageStatus = "pending" | "in_progress" | "passed" | "failed" | "skipped" | "error";
106
+ export type PgeStep = "planner_dispatched" | "contract_dispatched" | "generator_dispatched" | "evaluator_dispatched" | "routed";
107
+ export type AutoresearchStep = "adjuster_dispatched" | "executor_dispatched" | "evaluator_dispatched" | "routed";
108
+ export interface StageState {
109
+ name: string;
110
+ type: string;
111
+ status: StageStatus;
112
+ /** Current PGE iteration (1-based). Only for type: pge. */
113
+ iteration?: number;
114
+ /** Last completed sub-step within the current iteration (PGE or autoresearch). */
115
+ pgeStep?: PgeStep | AutoresearchStep;
116
+ /** Paths to artifacts produced by this stage. */
117
+ artifacts?: Record<string, string>;
118
+ /** Duration in ms (set on completion). */
119
+ durationMs?: number;
120
+ /** Error message if status is error/failed. */
121
+ error?: string;
122
+ }
123
+ export interface GateInfo {
124
+ stageName: string;
125
+ status: "pending" | "approved" | "rejected";
126
+ prompt?: string;
127
+ feedback?: string;
128
+ respondedAt?: string;
129
+ }
130
+ export interface PipelineState {
131
+ /** Unique run ID. */
132
+ runId: string;
133
+ /** Pipeline name. */
134
+ pipeline: string;
135
+ /** Project name. */
136
+ project: string;
137
+ /** Pipeline YAML file path. */
138
+ pipelineFile: string;
139
+ /** ISO timestamp when the run started. */
140
+ startedAt: string;
141
+ /** ISO timestamp when the run completed (set on finish). */
142
+ completedAt?: string;
143
+ /** Overall status. */
144
+ status: "running" | "passed" | "failed" | "error" | "interrupted";
145
+ /** Per-stage state, keyed by stage name. */
146
+ stages: Record<string, StageState>;
147
+ /** Stage execution order (preserves YAML order). */
148
+ stageOrder: string[];
149
+ /** Active gate info, if any. */
150
+ gate?: GateInfo;
151
+ /** Artifact output directory for this run. */
152
+ artifactDir: string;
153
+ /** Project root directory. Used to locate the database. */
154
+ projectDir?: string;
155
+ }
156
+ export interface ResumePoint {
157
+ /** Index into stageOrder to resume from. */
158
+ stageIndex: number;
159
+ /** Stage name to resume from. */
160
+ stageName: string;
161
+ /** For PGE stages: which iteration to resume at. */
162
+ resumeIteration?: number;
163
+ /** For PGE/autoresearch stages: which sub-step to resume at within the iteration. */
164
+ resumeStep?: PgeStep | AutoresearchStep;
165
+ }
166
+ /** Event in the state audit log. */
167
+ export interface StateEvent {
168
+ id: number;
169
+ runId: string;
170
+ timestamp: string;
171
+ eventType: string;
172
+ stageName?: string;
173
+ data?: unknown;
174
+ }
175
+ /** A discovered pipeline run (returned by listRuns). */
176
+ export interface DiscoveredRun {
177
+ artifactDir: string;
178
+ state: PipelineState;
179
+ }
180
+ /** Runtime context passed through the runner and into agent dispatch. */
181
+ export interface RunContext {
182
+ /** Name of the project (from --project CLI arg). */
183
+ project: string;
184
+ /** Absolute path to the project directory (cwd or --project-dir). */
185
+ projectDir: string;
186
+ /** Resolved artifact output directory. */
187
+ artifactDir: string;
188
+ /** Path to the pipeline YAML file. */
189
+ pipelineFile: string;
190
+ /** The loaded pipeline definition. */
191
+ pipeline: Pipeline;
192
+ /** Whether to show commands without executing them. */
193
+ dryRun: boolean;
194
+ /** Resolved variables (pipeline defaults + CLI overrides). */
195
+ variables: Record<string, string>;
196
+ /** Ordered directories to search for agent definitions. */
197
+ agentSearchPaths: string[];
198
+ /** Project config (from cccp.yaml), if loaded. */
199
+ projectConfig?: ProjectConfig;
200
+ /** Gate strategy for human_gate stages. Created lazily by runner if not provided. */
201
+ gateStrategy?: GateStrategy;
202
+ /** Whether running in headless mode (auto-approve gates). */
203
+ headless?: boolean;
204
+ /** Suppress console output (when TUI dashboard is rendering). */
205
+ quiet?: boolean;
206
+ /** Logger for pipeline output. */
207
+ logger?: import("./logger.js").Logger;
208
+ /** Agent dispatcher (injectable for testing). */
209
+ dispatcher?: import("./dispatcher.js").AgentDispatcher;
210
+ /** Tracks temp files for cleanup. */
211
+ tempTracker?: import("./temp-tracker.js").TempFileTracker;
212
+ }
213
+ /** Result of dispatching a single agent. */
214
+ export interface AgentResult {
215
+ /** Process exit code (0 = success). */
216
+ exitCode: number;
217
+ /** Path to the output file, if the agent was expected to produce one. */
218
+ outputPath?: string;
219
+ /** Whether the output file exists on disk after the agent finished. */
220
+ outputExists: boolean;
221
+ /** Duration in milliseconds. */
222
+ durationMs: number;
223
+ }
224
+ /** Result of a full PGE cycle (may span multiple iterations). */
225
+ export interface PgeResult {
226
+ /** Final evaluation outcome. */
227
+ outcome: "pass" | "fail" | "error";
228
+ /** Number of iterations executed. */
229
+ iterations: number;
230
+ /** Max iterations allowed. */
231
+ maxIterations: number;
232
+ /** Path to the final evaluation file. */
233
+ evaluationPath?: string;
234
+ /** Path to the contract file. */
235
+ contractPath?: string;
236
+ /** Path to the task plan file (produced by planner). */
237
+ taskPlanPath?: string;
238
+ /** Duration in milliseconds (total across all iterations). */
239
+ durationMs: number;
240
+ }
241
+ /** Result of a full autoresearch cycle. */
242
+ export interface AutoresearchResult {
243
+ /** Final evaluation outcome. */
244
+ outcome: "pass" | "fail" | "error";
245
+ /** Number of iterations executed. */
246
+ iterations: number;
247
+ /** Max iterations allowed (undefined = unlimited). */
248
+ maxIterations?: number;
249
+ /** Path to the final evaluation file. */
250
+ evaluationPath?: string;
251
+ /** Path to the final tuned artifact. */
252
+ artifactPath?: string;
253
+ /** Path to the executor's final output. */
254
+ outputPath?: string;
255
+ /** Duration in milliseconds (total across all iterations). */
256
+ durationMs: number;
257
+ }
258
+ /** Result of a single stage execution. */
259
+ export interface StageResult {
260
+ stageName: string;
261
+ status: "passed" | "failed" | "skipped" | "error";
262
+ result?: AgentResult | PgeResult | AutoresearchResult;
263
+ error?: string;
264
+ durationMs: number;
265
+ }
266
+ /** Overall pipeline run result. */
267
+ export interface PipelineResult {
268
+ pipeline: string;
269
+ project: string;
270
+ stages: StageResult[];
271
+ status: "passed" | "failed" | "error";
272
+ durationMs: number;
273
+ }
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}