sweteam 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.
- package/LICENSE +21 -0
- package/README.md +587 -0
- package/dist/adapters/adapter.d.ts +19 -0
- package/dist/adapters/adapter.d.ts.map +1 -0
- package/dist/adapters/adapter.js +20 -0
- package/dist/adapters/adapter.js.map +1 -0
- package/dist/adapters/claude-code.d.ts +13 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +150 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/codex.d.ts +13 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +100 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/custom.d.ts +16 -0
- package/dist/adapters/custom.d.ts.map +1 -0
- package/dist/adapters/custom.js +167 -0
- package/dist/adapters/custom.js.map +1 -0
- package/dist/adapters/opencode.d.ts +13 -0
- package/dist/adapters/opencode.d.ts.map +1 -0
- package/dist/adapters/opencode.js +100 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/adapters/prompt-detection.d.ts +14 -0
- package/dist/adapters/prompt-detection.d.ts.map +1 -0
- package/dist/adapters/prompt-detection.js +74 -0
- package/dist/adapters/prompt-detection.js.map +1 -0
- package/dist/commands/create.d.ts +8 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +38 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/delete.d.ts +2 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +22 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/enter.d.ts +19 -0
- package/dist/commands/enter.d.ts.map +1 -0
- package/dist/commands/enter.js +73 -0
- package/dist/commands/enter.js.map +1 -0
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +52 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +8 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +98 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/show.d.ts +33 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +142 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/stop.d.ts +2 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +10 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/config/discovery.d.ts +12 -0
- package/dist/config/discovery.d.ts.map +1 -0
- package/dist/config/discovery.js +62 -0
- package/dist/config/discovery.js.map +1 -0
- package/dist/config/gh-auth.d.ts +5 -0
- package/dist/config/gh-auth.d.ts.map +1 -0
- package/dist/config/gh-auth.js +18 -0
- package/dist/config/gh-auth.js.map +1 -0
- package/dist/config/loader.d.ts +38 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +72 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/db/client.d.ts +10 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +84 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/schema.d.ts +805 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +66 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/git/git.d.ts +29 -0
- package/dist/git/git.d.ts.map +1 -0
- package/dist/git/git.js +200 -0
- package/dist/git/git.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +154 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle.d.ts +5 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +63 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/orchestrator/build-handler.d.ts +20 -0
- package/dist/orchestrator/build-handler.d.ts.map +1 -0
- package/dist/orchestrator/build-handler.js +212 -0
- package/dist/orchestrator/build-handler.js.map +1 -0
- package/dist/orchestrator/dag.d.ts +10 -0
- package/dist/orchestrator/dag.d.ts.map +1 -0
- package/dist/orchestrator/dag.js +70 -0
- package/dist/orchestrator/dag.js.map +1 -0
- package/dist/orchestrator/error-handling.d.ts +21 -0
- package/dist/orchestrator/error-handling.d.ts.map +1 -0
- package/dist/orchestrator/error-handling.js +124 -0
- package/dist/orchestrator/error-handling.js.map +1 -0
- package/dist/orchestrator/feedback-handler.d.ts +36 -0
- package/dist/orchestrator/feedback-handler.d.ts.map +1 -0
- package/dist/orchestrator/feedback-handler.js +316 -0
- package/dist/orchestrator/feedback-handler.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +21 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +188 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/parallel-runner.d.ts +3 -0
- package/dist/orchestrator/parallel-runner.d.ts.map +1 -0
- package/dist/orchestrator/parallel-runner.js +111 -0
- package/dist/orchestrator/parallel-runner.js.map +1 -0
- package/dist/orchestrator/reviewer.d.ts +20 -0
- package/dist/orchestrator/reviewer.d.ts.map +1 -0
- package/dist/orchestrator/reviewer.js +175 -0
- package/dist/orchestrator/reviewer.js.map +1 -0
- package/dist/orchestrator/task-runner.d.ts +20 -0
- package/dist/orchestrator/task-runner.d.ts.map +1 -0
- package/dist/orchestrator/task-runner.js +122 -0
- package/dist/orchestrator/task-runner.js.map +1 -0
- package/dist/orchestrator/test-runner.d.ts +8 -0
- package/dist/orchestrator/test-runner.d.ts.map +1 -0
- package/dist/orchestrator/test-runner.js +81 -0
- package/dist/orchestrator/test-runner.js.map +1 -0
- package/dist/planner/plan-parser.d.ts +14 -0
- package/dist/planner/plan-parser.d.ts.map +1 -0
- package/dist/planner/plan-parser.js +182 -0
- package/dist/planner/plan-parser.js.map +1 -0
- package/dist/planner/planner.d.ts +9 -0
- package/dist/planner/planner.d.ts.map +1 -0
- package/dist/planner/planner.js +151 -0
- package/dist/planner/planner.js.map +1 -0
- package/dist/repl/repl.d.ts +19 -0
- package/dist/repl/repl.d.ts.map +1 -0
- package/dist/repl/repl.js +505 -0
- package/dist/repl/repl.js.map +1 -0
- package/dist/session/agent-log.d.ts +35 -0
- package/dist/session/agent-log.d.ts.map +1 -0
- package/dist/session/agent-log.js +120 -0
- package/dist/session/agent-log.js.map +1 -0
- package/dist/session/chat.d.ts +38 -0
- package/dist/session/chat.d.ts.map +1 -0
- package/dist/session/chat.js +106 -0
- package/dist/session/chat.js.map +1 -0
- package/dist/session/cost-tracker.d.ts +14 -0
- package/dist/session/cost-tracker.d.ts.map +1 -0
- package/dist/session/cost-tracker.js +61 -0
- package/dist/session/cost-tracker.js.map +1 -0
- package/dist/session/export.d.ts +2 -0
- package/dist/session/export.d.ts.map +1 -0
- package/dist/session/export.js +105 -0
- package/dist/session/export.js.map +1 -0
- package/dist/session/in-session-commands.d.ts +7 -0
- package/dist/session/in-session-commands.d.ts.map +1 -0
- package/dist/session/in-session-commands.js +227 -0
- package/dist/session/in-session-commands.js.map +1 -0
- package/dist/session/interactive.d.ts +37 -0
- package/dist/session/interactive.d.ts.map +1 -0
- package/dist/session/interactive.js +226 -0
- package/dist/session/interactive.js.map +1 -0
- package/dist/session/manager.d.ts +63 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +229 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/resume.d.ts +7 -0
- package/dist/session/resume.d.ts.map +1 -0
- package/dist/session/resume.js +53 -0
- package/dist/session/resume.js.map +1 -0
- package/dist/session/state-machine.d.ts +4 -0
- package/dist/session/state-machine.d.ts.map +1 -0
- package/dist/session/state-machine.js +47 -0
- package/dist/session/state-machine.js.map +1 -0
- package/dist/tui/chat-ui.d.ts +16 -0
- package/dist/tui/chat-ui.d.ts.map +1 -0
- package/dist/tui/chat-ui.js +19 -0
- package/dist/tui/chat-ui.js.map +1 -0
- package/dist/tui/dashboard.d.ts +17 -0
- package/dist/tui/dashboard.d.ts.map +1 -0
- package/dist/tui/dashboard.js +57 -0
- package/dist/tui/dashboard.js.map +1 -0
- package/dist/tui/session-list.d.ts +18 -0
- package/dist/tui/session-list.d.ts.map +1 -0
- package/dist/tui/session-list.js +26 -0
- package/dist/tui/session-list.js.map +1 -0
- package/dist/ui/agent-panel.d.ts +9 -0
- package/dist/ui/agent-panel.d.ts.map +1 -0
- package/dist/ui/agent-panel.js +100 -0
- package/dist/ui/agent-panel.js.map +1 -0
- package/dist/ui/banner.d.ts +10 -0
- package/dist/ui/banner.d.ts.map +1 -0
- package/dist/ui/banner.js +100 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/markdown.d.ts +19 -0
- package/dist/ui/markdown.d.ts.map +1 -0
- package/dist/ui/markdown.js +174 -0
- package/dist/ui/markdown.js.map +1 -0
- package/dist/ui/prompt.d.ts +24 -0
- package/dist/ui/prompt.d.ts.map +1 -0
- package/dist/ui/prompt.js +226 -0
- package/dist/ui/prompt.js.map +1 -0
- package/dist/utils/time.d.ts +3 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +29 -0
- package/dist/utils/time.js.map +1 -0
- package/drizzle/migrations/0000_naive_human_fly.sql +56 -0
- package/drizzle/migrations/meta/0000_snapshot.json +395 -0
- package/drizzle/migrations/meta/_journal.json +13 -0
- package/package.json +70 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { MarkdownRenderer } from "./markdown.js";
|
|
3
|
+
const border = chalk.blue;
|
|
4
|
+
const iconRunning = chalk.blue("▶");
|
|
5
|
+
const iconDone = chalk.green("✓");
|
|
6
|
+
const iconFailed = chalk.red("✗");
|
|
7
|
+
export class AgentPanel {
|
|
8
|
+
slots = new Map();
|
|
9
|
+
activeId = null;
|
|
10
|
+
addAgent(id, role, taskId, taskTitle) {
|
|
11
|
+
const label = `${role} ─ ${taskId}: ${taskTitle}`;
|
|
12
|
+
const slot = {
|
|
13
|
+
id,
|
|
14
|
+
label,
|
|
15
|
+
role,
|
|
16
|
+
status: "running",
|
|
17
|
+
midLine: false,
|
|
18
|
+
lineBuffer: "",
|
|
19
|
+
renderer: new MarkdownRenderer(),
|
|
20
|
+
};
|
|
21
|
+
this.slots.set(id, slot);
|
|
22
|
+
this.activeId = id;
|
|
23
|
+
// Print header
|
|
24
|
+
process.stdout.write(`${iconRunning} ${label}\n`);
|
|
25
|
+
process.stdout.write(border("─".repeat(Math.min(process.stdout.columns || 80, 80))) + "\n");
|
|
26
|
+
}
|
|
27
|
+
appendOutput(id, chunk) {
|
|
28
|
+
const slot = this.slots.get(id);
|
|
29
|
+
if (!slot || slot.status !== "running")
|
|
30
|
+
return;
|
|
31
|
+
const prefix = border("│ ");
|
|
32
|
+
let i = 0;
|
|
33
|
+
while (i < chunk.length) {
|
|
34
|
+
const nlIdx = chunk.indexOf("\n", i);
|
|
35
|
+
if (nlIdx === -1) {
|
|
36
|
+
// No newline remaining — show immediately for streaming feel
|
|
37
|
+
const segment = chunk.slice(i);
|
|
38
|
+
if (segment.length > 0) {
|
|
39
|
+
slot.lineBuffer += segment;
|
|
40
|
+
if (!slot.midLine) {
|
|
41
|
+
process.stdout.write(prefix);
|
|
42
|
+
}
|
|
43
|
+
process.stdout.write(segment);
|
|
44
|
+
slot.midLine = true;
|
|
45
|
+
}
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
// Complete line available
|
|
49
|
+
const segment = chunk.slice(i, nlIdx).replace(/\r$/, "");
|
|
50
|
+
const fullLine = slot.lineBuffer + segment;
|
|
51
|
+
// Always pass through renderer to keep state (code block tracking) in sync
|
|
52
|
+
const renderedLines = slot.renderer.renderLine(fullLine);
|
|
53
|
+
if (slot.midLine) {
|
|
54
|
+
// Already showed partial content raw — just finish the line
|
|
55
|
+
process.stdout.write(segment + "\n");
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// Full line arrived at once — show the markdown-rendered version(s)
|
|
59
|
+
for (const rl of renderedLines) {
|
|
60
|
+
process.stdout.write(prefix + rl + "\n");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
slot.lineBuffer = "";
|
|
64
|
+
slot.midLine = false;
|
|
65
|
+
i = nlIdx + 1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
completeAgent(id, success) {
|
|
69
|
+
const slot = this.slots.get(id);
|
|
70
|
+
if (!slot)
|
|
71
|
+
return;
|
|
72
|
+
slot.status = success ? "done" : "failed";
|
|
73
|
+
// Flush any partial line
|
|
74
|
+
if (slot.midLine || slot.lineBuffer) {
|
|
75
|
+
process.stdout.write("\n");
|
|
76
|
+
slot.lineBuffer = "";
|
|
77
|
+
slot.midLine = false;
|
|
78
|
+
}
|
|
79
|
+
// Flush any buffered table rows
|
|
80
|
+
const remaining = slot.renderer.flush();
|
|
81
|
+
if (remaining.length > 0) {
|
|
82
|
+
const prefix = border("│ ");
|
|
83
|
+
for (const rl of remaining) {
|
|
84
|
+
process.stdout.write(prefix + rl + "\n");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Print footer
|
|
88
|
+
const icon = success ? iconDone : iconFailed;
|
|
89
|
+
const verb = success ? "completed" : "failed";
|
|
90
|
+
process.stdout.write(`${icon} ${slot.role} ${verb}\n\n`);
|
|
91
|
+
if (this.activeId === id) {
|
|
92
|
+
this.activeId = null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
destroy() {
|
|
96
|
+
this.slots.clear();
|
|
97
|
+
this.activeId = null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=agent-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-panel.js","sourceRoot":"","sources":["../../src/ui/agent-panel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Visible length of a string after stripping ANSI escape codes. */
|
|
2
|
+
export declare function vLen(s: string): number;
|
|
3
|
+
/** Pad string to `w` visible characters (right-pad with spaces). */
|
|
4
|
+
export declare function rPad(s: string, w: number): string;
|
|
5
|
+
export interface RecentSession {
|
|
6
|
+
id: string;
|
|
7
|
+
goal: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function renderBanner(sessions?: RecentSession[]): string;
|
|
10
|
+
//# sourceMappingURL=banner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAiBA,oEAAoE;AACpE,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGtC;AAED,oEAAoE;AACpE,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjD;AAWD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,QAAQ,GAAE,aAAa,EAAO,GAAG,MAAM,CA6EnE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import os from "os";
|
|
3
|
+
import { createRequire } from "module";
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
const pkg = require("../../package.json");
|
|
6
|
+
const VERSION = pkg.version;
|
|
7
|
+
// ── Blue theme palette ──────────────────────────────────────────────
|
|
8
|
+
const border = chalk.blue;
|
|
9
|
+
const accent = chalk.blueBright;
|
|
10
|
+
const title = chalk.bold.blueBright;
|
|
11
|
+
const dim = chalk.dim;
|
|
12
|
+
const cmd = chalk.cyanBright;
|
|
13
|
+
// ── Helpers ─────────────────────────────────────────────────────────
|
|
14
|
+
/** Visible length of a string after stripping ANSI escape codes. */
|
|
15
|
+
export function vLen(s) {
|
|
16
|
+
// eslint-disable-next-line no-control-regex
|
|
17
|
+
return s.replace(/\x1b\[[0-9;]*m/g, "").length;
|
|
18
|
+
}
|
|
19
|
+
/** Pad string to `w` visible characters (right-pad with spaces). */
|
|
20
|
+
export function rPad(s, w) {
|
|
21
|
+
const diff = w - vLen(s);
|
|
22
|
+
return diff > 0 ? s + " ".repeat(diff) : s;
|
|
23
|
+
}
|
|
24
|
+
/** Shorten cwd by replacing homedir with ~. */
|
|
25
|
+
function shortCwd() {
|
|
26
|
+
const cwd = process.cwd();
|
|
27
|
+
const home = os.homedir();
|
|
28
|
+
return cwd.startsWith(home) ? "~" + cwd.slice(home.length) : cwd;
|
|
29
|
+
}
|
|
30
|
+
export function renderBanner(sessions = []) {
|
|
31
|
+
const termW = process.stdout.columns || 80;
|
|
32
|
+
// Box outer width = termW - 1 (leave 1 col margin to avoid terminal wrap)
|
|
33
|
+
// Inner = outer - 2 (left + right border)
|
|
34
|
+
// Inner splits into left | divider | right → LW + 1 + RW = IW
|
|
35
|
+
const IW = Math.max(termW - 3, 60); // -3: left border + right border + margin
|
|
36
|
+
const LW = Math.min(44, Math.floor(IW * 0.4));
|
|
37
|
+
const RW = IW - 1 - LW; // remaining goes to right
|
|
38
|
+
// ── Mascot (from README, blue-styled) ──
|
|
39
|
+
const mascot = [
|
|
40
|
+
accent(" ┌─────────────────┐"),
|
|
41
|
+
accent(" │") + " ◉ ◉ " + accent("│"),
|
|
42
|
+
accent(" │") + " ───────── " + accent("│"),
|
|
43
|
+
accent(" └─────────────────┘"),
|
|
44
|
+
];
|
|
45
|
+
// ── Left column ──
|
|
46
|
+
const left = [
|
|
47
|
+
"",
|
|
48
|
+
title(" Welcome to sweteam!"),
|
|
49
|
+
"",
|
|
50
|
+
...mascot.map((l) => " " + l),
|
|
51
|
+
"",
|
|
52
|
+
dim(` Orchestrator · v${VERSION}`),
|
|
53
|
+
dim(" " + shortCwd()),
|
|
54
|
+
"",
|
|
55
|
+
];
|
|
56
|
+
// ── Right column ──
|
|
57
|
+
const maxCmdPad = Math.max(RW - 30, 4);
|
|
58
|
+
const right = [
|
|
59
|
+
"",
|
|
60
|
+
title(" Getting started"),
|
|
61
|
+
" " + cmd("/create") + dim(" [repo]") + " ".repeat(Math.max(maxCmdPad - 6, 1)) + "Start a new session",
|
|
62
|
+
" " + cmd("/list") + " ".repeat(Math.max(maxCmdPad + 5, 1)) + "See all sessions",
|
|
63
|
+
" " + cmd("/enter") + dim(" <id>") + " ".repeat(Math.max(maxCmdPad - 3, 1)) + "Resume a session",
|
|
64
|
+
" " + dim("─".repeat(Math.max(RW - 4, 10))),
|
|
65
|
+
title(" Recent sessions"),
|
|
66
|
+
];
|
|
67
|
+
if (sessions.length > 0) {
|
|
68
|
+
const maxGoal = RW - 16;
|
|
69
|
+
for (const s of sessions.slice(0, 3)) {
|
|
70
|
+
const g = s.goal.length > maxGoal ? s.goal.slice(0, maxGoal - 1) + "…" : s.goal;
|
|
71
|
+
right.push(" " + dim(s.id.slice(0, 12)) + " " + g);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
right.push(" " + dim("No recent sessions"));
|
|
76
|
+
}
|
|
77
|
+
right.push("");
|
|
78
|
+
// ── Equalise row count ──
|
|
79
|
+
const h = Math.max(left.length, right.length);
|
|
80
|
+
while (left.length < h)
|
|
81
|
+
left.push("");
|
|
82
|
+
while (right.length < h)
|
|
83
|
+
right.push("");
|
|
84
|
+
// ── Assemble box ──
|
|
85
|
+
const label = ` sweteam v${VERSION} `;
|
|
86
|
+
const topDashes = Math.max(IW - 3 - label.length, 0);
|
|
87
|
+
const top = border("╭───") + title(label) + border("─".repeat(topDashes)) + border("╮");
|
|
88
|
+
const bot = border("╰" + "─".repeat(IW) + "╯");
|
|
89
|
+
const rows = [top];
|
|
90
|
+
for (let i = 0; i < h; i++) {
|
|
91
|
+
rows.push(border("│") +
|
|
92
|
+
rPad(left[i], LW) +
|
|
93
|
+
border("│") +
|
|
94
|
+
rPad(right[i], RW) +
|
|
95
|
+
border("│"));
|
|
96
|
+
}
|
|
97
|
+
rows.push(bot);
|
|
98
|
+
return rows.join("\n");
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming-friendly markdown renderer for terminal output.
|
|
3
|
+
* Processes one line at a time, tracking state across lines
|
|
4
|
+
* (e.g. code block boundaries, table accumulation).
|
|
5
|
+
*/
|
|
6
|
+
export declare class MarkdownRenderer {
|
|
7
|
+
private inCodeBlock;
|
|
8
|
+
private tableBuffer;
|
|
9
|
+
/**
|
|
10
|
+
* Render a single input line. Returns an array of rendered lines.
|
|
11
|
+
* May return an empty array when buffering table rows (the table
|
|
12
|
+
* is emitted once a non-table line arrives or flush() is called).
|
|
13
|
+
*/
|
|
14
|
+
renderLine(line: string): string[];
|
|
15
|
+
/** Flush any buffered table rows. Call when agent output ends. */
|
|
16
|
+
flush(): string[];
|
|
17
|
+
private flushTable;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/ui/markdown.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAgB;IAEnC;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAiElC,kEAAkE;IAClE,KAAK,IAAI,MAAM,EAAE;IAIjB,OAAO,CAAC,UAAU;CAMnB"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
/**
|
|
3
|
+
* Streaming-friendly markdown renderer for terminal output.
|
|
4
|
+
* Processes one line at a time, tracking state across lines
|
|
5
|
+
* (e.g. code block boundaries, table accumulation).
|
|
6
|
+
*/
|
|
7
|
+
export class MarkdownRenderer {
|
|
8
|
+
inCodeBlock = false;
|
|
9
|
+
tableBuffer = [];
|
|
10
|
+
/**
|
|
11
|
+
* Render a single input line. Returns an array of rendered lines.
|
|
12
|
+
* May return an empty array when buffering table rows (the table
|
|
13
|
+
* is emitted once a non-table line arrives or flush() is called).
|
|
14
|
+
*/
|
|
15
|
+
renderLine(line) {
|
|
16
|
+
// Code block toggle: ```lang or ```
|
|
17
|
+
if (/^\s*```/.test(line)) {
|
|
18
|
+
const flushed = this.flushTable();
|
|
19
|
+
this.inCodeBlock = !this.inCodeBlock;
|
|
20
|
+
if (this.inCodeBlock) {
|
|
21
|
+
const lang = line.replace(/^\s*```/, "").trim();
|
|
22
|
+
const label = lang ? ` ${lang} ` : "";
|
|
23
|
+
const ruleLen = Math.max(0, 40 - label.length);
|
|
24
|
+
return [...flushed, chalk.dim(` ${"─".repeat(2)}${label}${"─".repeat(ruleLen)}`)];
|
|
25
|
+
}
|
|
26
|
+
return [...flushed, chalk.dim(` ${"─".repeat(42)}`)];
|
|
27
|
+
}
|
|
28
|
+
// Inside code block — show dimmed with a gutter
|
|
29
|
+
if (this.inCodeBlock) {
|
|
30
|
+
return [chalk.dim(` ${line}`)];
|
|
31
|
+
}
|
|
32
|
+
// Table row: buffer lines that look like | … | for batch rendering
|
|
33
|
+
if (isTableRow(line)) {
|
|
34
|
+
this.tableBuffer.push(line);
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
// Non-table line — flush any buffered table first
|
|
38
|
+
const flushed = this.flushTable();
|
|
39
|
+
// Heading: # … through ######
|
|
40
|
+
const headerMatch = line.match(/^(#{1,6})\s+(.*)/);
|
|
41
|
+
if (headerMatch) {
|
|
42
|
+
const level = headerMatch[1].length;
|
|
43
|
+
const text = renderInline(headerMatch[2]);
|
|
44
|
+
if (level === 1)
|
|
45
|
+
return [...flushed, "\n" + chalk.bold.underline(text)];
|
|
46
|
+
if (level === 2)
|
|
47
|
+
return [...flushed, "\n" + chalk.bold(text)];
|
|
48
|
+
return [...flushed, chalk.bold(text)];
|
|
49
|
+
}
|
|
50
|
+
// Horizontal rule: --- / *** / ___
|
|
51
|
+
if (/^\s*[-*_]{3,}\s*$/.test(line)) {
|
|
52
|
+
return [...flushed, chalk.dim("─".repeat(40))];
|
|
53
|
+
}
|
|
54
|
+
// Blockquote: > text
|
|
55
|
+
const bqMatch = line.match(/^>\s?(.*)/);
|
|
56
|
+
if (bqMatch) {
|
|
57
|
+
return [...flushed, chalk.dim(" │ ") + renderInline(bqMatch[1])];
|
|
58
|
+
}
|
|
59
|
+
// Unordered list item: - / * / + followed by space
|
|
60
|
+
const ulMatch = line.match(/^(\s*)[-*+]\s+(.*)/);
|
|
61
|
+
if (ulMatch) {
|
|
62
|
+
return [...flushed, `${ulMatch[1]} ${chalk.dim("•")} ${renderInline(ulMatch[2])}`];
|
|
63
|
+
}
|
|
64
|
+
// Ordered list item: 1. text
|
|
65
|
+
const olMatch = line.match(/^(\s*)(\d+)\.\s+(.*)/);
|
|
66
|
+
if (olMatch) {
|
|
67
|
+
return [...flushed, `${olMatch[1]} ${chalk.dim(olMatch[2] + ".")} ${renderInline(olMatch[3])}`];
|
|
68
|
+
}
|
|
69
|
+
// Regular line — just apply inline formatting
|
|
70
|
+
return [...flushed, renderInline(line)];
|
|
71
|
+
}
|
|
72
|
+
/** Flush any buffered table rows. Call when agent output ends. */
|
|
73
|
+
flush() {
|
|
74
|
+
return this.flushTable();
|
|
75
|
+
}
|
|
76
|
+
flushTable() {
|
|
77
|
+
if (this.tableBuffer.length === 0)
|
|
78
|
+
return [];
|
|
79
|
+
const lines = renderTable(this.tableBuffer);
|
|
80
|
+
this.tableBuffer = [];
|
|
81
|
+
return lines;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/* ── Table helpers ─────────────────────────────────────────────── */
|
|
85
|
+
function isTableRow(line) {
|
|
86
|
+
const trimmed = line.trim();
|
|
87
|
+
// Must contain pipes and start/end with a pipe (standard markdown table row)
|
|
88
|
+
return /^\|.*\|$/.test(trimmed) && trimmed.length > 2;
|
|
89
|
+
}
|
|
90
|
+
function isSeparatorRow(line) {
|
|
91
|
+
return /^\s*\|[\s:|-]+\|\s*$/.test(line);
|
|
92
|
+
}
|
|
93
|
+
function parseCells(line) {
|
|
94
|
+
const cells = line.trim().split("|").map((c) => c.trim());
|
|
95
|
+
if (cells.length > 0 && cells[0] === "")
|
|
96
|
+
cells.shift();
|
|
97
|
+
if (cells.length > 0 && cells[cells.length - 1] === "")
|
|
98
|
+
cells.pop();
|
|
99
|
+
return cells;
|
|
100
|
+
}
|
|
101
|
+
function renderTable(bufferedLines) {
|
|
102
|
+
// Separate header and data rows (skip separator rows)
|
|
103
|
+
const rows = [];
|
|
104
|
+
for (const line of bufferedLines) {
|
|
105
|
+
if (isSeparatorRow(line))
|
|
106
|
+
continue;
|
|
107
|
+
const cells = parseCells(line);
|
|
108
|
+
if (cells.length > 0)
|
|
109
|
+
rows.push(cells);
|
|
110
|
+
}
|
|
111
|
+
if (rows.length === 0)
|
|
112
|
+
return bufferedLines; // fallback to raw lines
|
|
113
|
+
// Normalise column count
|
|
114
|
+
const maxCols = Math.max(...rows.map((r) => r.length));
|
|
115
|
+
for (const row of rows) {
|
|
116
|
+
while (row.length < maxCols)
|
|
117
|
+
row.push("");
|
|
118
|
+
}
|
|
119
|
+
// Calculate column widths, capped at 30 visible chars
|
|
120
|
+
const MAX_COL = 30;
|
|
121
|
+
const colW = new Array(maxCols).fill(0);
|
|
122
|
+
for (const row of rows) {
|
|
123
|
+
for (let j = 0; j < maxCols; j++) {
|
|
124
|
+
colW[j] = Math.min(MAX_COL, Math.max(colW[j], row[j].length));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const dim = chalk.dim;
|
|
128
|
+
const pad = (s, w) => {
|
|
129
|
+
if (s.length > w)
|
|
130
|
+
return s.slice(0, w - 1) + "…";
|
|
131
|
+
return s.padEnd(w);
|
|
132
|
+
};
|
|
133
|
+
const out = [];
|
|
134
|
+
// Top border: ┌──┬──┐
|
|
135
|
+
out.push(dim(" ┌" + colW.map((w) => "─".repeat(w + 2)).join("┬") + "┐"));
|
|
136
|
+
for (let i = 0; i < rows.length; i++) {
|
|
137
|
+
const cells = rows[i].map((c, j) => {
|
|
138
|
+
const content = pad(c, colW[j]);
|
|
139
|
+
// First row is the header — render bold
|
|
140
|
+
return i === 0 ? chalk.bold(content) : renderInline(content);
|
|
141
|
+
});
|
|
142
|
+
out.push(dim(" │") + cells.map((c) => ` ${c} `).join(dim("│")) + dim("│"));
|
|
143
|
+
// Separator after header: ├──┼──┤
|
|
144
|
+
if (i === 0) {
|
|
145
|
+
out.push(dim(" ├" + colW.map((w) => "─".repeat(w + 2)).join("┼") + "┤"));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Bottom border: └──┴──┘
|
|
149
|
+
out.push(dim(" └" + colW.map((w) => "─".repeat(w + 2)).join("┴") + "┘"));
|
|
150
|
+
return out;
|
|
151
|
+
}
|
|
152
|
+
/* ── Inline formatting ─────────────────────────────────────────── */
|
|
153
|
+
/**
|
|
154
|
+
* Apply inline markdown formatting to a single line of text.
|
|
155
|
+
* Order matters: code spans first (to protect their contents),
|
|
156
|
+
* then bold, then italic.
|
|
157
|
+
*/
|
|
158
|
+
function renderInline(text) {
|
|
159
|
+
// Protect inline code spans from other transforms
|
|
160
|
+
const codeSpans = [];
|
|
161
|
+
text = text.replace(/`([^`]+)`/g, (_, code) => {
|
|
162
|
+
codeSpans.push(chalk.cyan(code));
|
|
163
|
+
return `\x00C${codeSpans.length - 1}\x00`;
|
|
164
|
+
});
|
|
165
|
+
// Bold: **text** or __text__
|
|
166
|
+
text = text.replace(/\*\*(.+?)\*\*/g, (_, p1) => chalk.bold(p1));
|
|
167
|
+
text = text.replace(/__(.+?)__/g, (_, p1) => chalk.bold(p1));
|
|
168
|
+
// Italic: *text* (single asterisk, not preceded/followed by *)
|
|
169
|
+
text = text.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g, (_, p1) => chalk.italic(p1));
|
|
170
|
+
// Restore protected code spans
|
|
171
|
+
text = text.replace(/\x00C(\d+)\x00/g, (_, idx) => codeSpans[parseInt(idx)]);
|
|
172
|
+
return text;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/ui/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive prompt with dropdown autocomplete and ghost-text.
|
|
3
|
+
*
|
|
4
|
+
* When completions are available, a dropdown list renders below the
|
|
5
|
+
* prompt line. The user can navigate with Up/Down arrows and accept
|
|
6
|
+
* with Tab. Ghost text (fish-shell style) also shows the highlighted
|
|
7
|
+
* match inline.
|
|
8
|
+
*
|
|
9
|
+
* - Tab Accept the highlighted suggestion
|
|
10
|
+
* - Up/Down Navigate the dropdown
|
|
11
|
+
* - Right arrow Accept one ghost character (fish-style)
|
|
12
|
+
* - Enter Submit the current input
|
|
13
|
+
* - Escape Dismiss the dropdown
|
|
14
|
+
* - Ctrl-C Exit
|
|
15
|
+
*/
|
|
16
|
+
/** Sentinel value returned by promptLine when the user presses Escape to back out. */
|
|
17
|
+
export declare const ESCAPE_SIGNAL = "\u001B__ESCAPE__";
|
|
18
|
+
export interface PromptOptions {
|
|
19
|
+
prompt: string;
|
|
20
|
+
/** Returns matching completions for the current input. */
|
|
21
|
+
getCompletions: (input: string) => string[];
|
|
22
|
+
}
|
|
23
|
+
export declare function promptLine(opts: PromptOptions): Promise<string>;
|
|
24
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/ui/prompt.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AAEH,sFAAsF;AACtF,eAAO,MAAM,aAAa,qBAAmB,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CAC7C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAwO/D"}
|