fixo-cli 1.0.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 +201 -0
- package/README.md +530 -0
- package/dist/agent/agent-client.d.ts +108 -0
- package/dist/agent/agent-client.d.ts.map +1 -0
- package/dist/agent/agent-client.js +1247 -0
- package/dist/agent/agent-client.js.map +1 -0
- package/dist/agent/agent-pool.d.ts +20 -0
- package/dist/agent/agent-pool.d.ts.map +1 -0
- package/dist/agent/agent-pool.js +217 -0
- package/dist/agent/agent-pool.js.map +1 -0
- package/dist/agent/background-awareness.d.ts +55 -0
- package/dist/agent/background-awareness.d.ts.map +1 -0
- package/dist/agent/background-awareness.js +104 -0
- package/dist/agent/background-awareness.js.map +1 -0
- package/dist/agent/command-parser.d.ts +33 -0
- package/dist/agent/command-parser.d.ts.map +1 -0
- package/dist/agent/command-parser.js +120 -0
- package/dist/agent/command-parser.js.map +1 -0
- package/dist/agent/context-budget.d.ts +91 -0
- package/dist/agent/context-budget.d.ts.map +1 -0
- package/dist/agent/context-budget.js +219 -0
- package/dist/agent/context-budget.js.map +1 -0
- package/dist/agent/conversation.d.ts +190 -0
- package/dist/agent/conversation.d.ts.map +1 -0
- package/dist/agent/conversation.js +547 -0
- package/dist/agent/conversation.js.map +1 -0
- package/dist/agent/hooks.d.ts +72 -0
- package/dist/agent/hooks.d.ts.map +1 -0
- package/dist/agent/hooks.js +214 -0
- package/dist/agent/hooks.js.map +1 -0
- package/dist/agent/mcp-bridge.d.ts +13 -0
- package/dist/agent/mcp-bridge.d.ts.map +1 -0
- package/dist/agent/mcp-bridge.js +86 -0
- package/dist/agent/mcp-bridge.js.map +1 -0
- package/dist/agent/mcp-client.d.ts +24 -0
- package/dist/agent/mcp-client.d.ts.map +1 -0
- package/dist/agent/mcp-client.js +146 -0
- package/dist/agent/mcp-client.js.map +1 -0
- package/dist/agent/mcp-manager.d.ts +13 -0
- package/dist/agent/mcp-manager.d.ts.map +1 -0
- package/dist/agent/mcp-manager.js +84 -0
- package/dist/agent/mcp-manager.js.map +1 -0
- package/dist/agent/mcp-registry.d.ts +45 -0
- package/dist/agent/mcp-registry.d.ts.map +1 -0
- package/dist/agent/mcp-registry.js +98 -0
- package/dist/agent/mcp-registry.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +14 -0
- package/dist/agent/orchestrator.d.ts.map +1 -0
- package/dist/agent/orchestrator.js +118 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/parser-adapter.d.ts +120 -0
- package/dist/agent/parser-adapter.d.ts.map +1 -0
- package/dist/agent/parser-adapter.js +265 -0
- package/dist/agent/parser-adapter.js.map +1 -0
- package/dist/agent/parsers/imports.d.ts +11 -0
- package/dist/agent/parsers/imports.d.ts.map +1 -0
- package/dist/agent/parsers/imports.js +94 -0
- package/dist/agent/parsers/imports.js.map +1 -0
- package/dist/agent/parsers/shell.d.ts +23 -0
- package/dist/agent/parsers/shell.d.ts.map +1 -0
- package/dist/agent/parsers/shell.js +200 -0
- package/dist/agent/parsers/shell.js.map +1 -0
- package/dist/agent/parsers/symbols.d.ts +17 -0
- package/dist/agent/parsers/symbols.d.ts.map +1 -0
- package/dist/agent/parsers/symbols.js +103 -0
- package/dist/agent/parsers/symbols.js.map +1 -0
- package/dist/agent/permissions.d.ts +65 -0
- package/dist/agent/permissions.d.ts.map +1 -0
- package/dist/agent/permissions.js +219 -0
- package/dist/agent/permissions.js.map +1 -0
- package/dist/agent/predictive-gate.d.ts +69 -0
- package/dist/agent/predictive-gate.d.ts.map +1 -0
- package/dist/agent/predictive-gate.js +128 -0
- package/dist/agent/predictive-gate.js.map +1 -0
- package/dist/agent/provider-cooldown.d.ts +144 -0
- package/dist/agent/provider-cooldown.d.ts.map +1 -0
- package/dist/agent/provider-cooldown.js +300 -0
- package/dist/agent/provider-cooldown.js.map +1 -0
- package/dist/agent/providers-manager.d.ts +109 -0
- package/dist/agent/providers-manager.d.ts.map +1 -0
- package/dist/agent/providers-manager.js +464 -0
- package/dist/agent/providers-manager.js.map +1 -0
- package/dist/agent/repo-map.d.ts +6 -0
- package/dist/agent/repo-map.d.ts.map +1 -0
- package/dist/agent/repo-map.js +221 -0
- package/dist/agent/repo-map.js.map +1 -0
- package/dist/agent/retry.d.ts +103 -0
- package/dist/agent/retry.d.ts.map +1 -0
- package/dist/agent/retry.js +276 -0
- package/dist/agent/retry.js.map +1 -0
- package/dist/agent/search/index.d.ts +61 -0
- package/dist/agent/search/index.d.ts.map +1 -0
- package/dist/agent/search/index.js +314 -0
- package/dist/agent/search/index.js.map +1 -0
- package/dist/agent/single-agent.d.ts +76 -0
- package/dist/agent/single-agent.d.ts.map +1 -0
- package/dist/agent/single-agent.js +697 -0
- package/dist/agent/single-agent.js.map +1 -0
- package/dist/agent/skills.d.ts +22 -0
- package/dist/agent/skills.d.ts.map +1 -0
- package/dist/agent/skills.js +139 -0
- package/dist/agent/skills.js.map +1 -0
- package/dist/agent/stream-glue.d.ts +85 -0
- package/dist/agent/stream-glue.d.ts.map +1 -0
- package/dist/agent/stream-glue.js +120 -0
- package/dist/agent/stream-glue.js.map +1 -0
- package/dist/agent/subagent.d.ts +72 -0
- package/dist/agent/subagent.d.ts.map +1 -0
- package/dist/agent/subagent.js +193 -0
- package/dist/agent/subagent.js.map +1 -0
- package/dist/agent/telemetry.d.ts +192 -0
- package/dist/agent/telemetry.d.ts.map +1 -0
- package/dist/agent/telemetry.js +400 -0
- package/dist/agent/telemetry.js.map +1 -0
- package/dist/agent/tokenizer.d.ts +42 -0
- package/dist/agent/tokenizer.d.ts.map +1 -0
- package/dist/agent/tokenizer.js +107 -0
- package/dist/agent/tokenizer.js.map +1 -0
- package/dist/agent/tool-executor.d.ts +289 -0
- package/dist/agent/tool-executor.d.ts.map +1 -0
- package/dist/agent/tool-executor.js +2519 -0
- package/dist/agent/tool-executor.js.map +1 -0
- package/dist/agent/web-impl.d.ts +2 -0
- package/dist/agent/web-impl.d.ts.map +1 -0
- package/dist/agent/web-impl.js +34 -0
- package/dist/agent/web-impl.js.map +1 -0
- package/dist/agent/web.d.ts +8 -0
- package/dist/agent/web.d.ts.map +1 -0
- package/dist/agent/web.js +8 -0
- package/dist/agent/web.js.map +1 -0
- package/dist/agent/worker-agent.d.ts +27 -0
- package/dist/agent/worker-agent.d.ts.map +1 -0
- package/dist/agent/worker-agent.js +503 -0
- package/dist/agent/worker-agent.js.map +1 -0
- package/dist/config.d.ts +162 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +138 -0
- package/dist/config.js.map +1 -0
- package/dist/context/fixo-md-watcher.d.ts +42 -0
- package/dist/context/fixo-md-watcher.d.ts.map +1 -0
- package/dist/context/fixo-md-watcher.js +126 -0
- package/dist/context/fixo-md-watcher.js.map +1 -0
- package/dist/context/fixo-md.d.ts +50 -0
- package/dist/context/fixo-md.d.ts.map +1 -0
- package/dist/context/fixo-md.js +118 -0
- package/dist/context/fixo-md.js.map +1 -0
- package/dist/context/todo.d.ts +65 -0
- package/dist/context/todo.d.ts.map +1 -0
- package/dist/context/todo.js +194 -0
- package/dist/context/todo.js.map +1 -0
- package/dist/git/git-manager.d.ts +33 -0
- package/dist/git/git-manager.d.ts.map +1 -0
- package/dist/git/git-manager.js +293 -0
- package/dist/git/git-manager.js.map +1 -0
- package/dist/git/git-ops.d.ts +10 -0
- package/dist/git/git-ops.d.ts.map +1 -0
- package/dist/git/git-ops.js +131 -0
- package/dist/git/git-ops.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +352 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.d.ts +30 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +273 -0
- package/dist/indexer.js.map +1 -0
- package/dist/lsp/lsp-client.d.ts +24 -0
- package/dist/lsp/lsp-client.d.ts.map +1 -0
- package/dist/lsp/lsp-client.js +205 -0
- package/dist/lsp/lsp-client.js.map +1 -0
- package/dist/lsp/lsp-manager.d.ts +17 -0
- package/dist/lsp/lsp-manager.d.ts.map +1 -0
- package/dist/lsp/lsp-manager.js +154 -0
- package/dist/lsp/lsp-manager.js.map +1 -0
- package/dist/lsp/lsp-pre-save.d.ts +137 -0
- package/dist/lsp/lsp-pre-save.d.ts.map +1 -0
- package/dist/lsp/lsp-pre-save.js +245 -0
- package/dist/lsp/lsp-pre-save.js.map +1 -0
- package/dist/lsp/syntax-fallback.d.ts +83 -0
- package/dist/lsp/syntax-fallback.d.ts.map +1 -0
- package/dist/lsp/syntax-fallback.js +275 -0
- package/dist/lsp/syntax-fallback.js.map +1 -0
- package/dist/model-outcomes.d.ts +12 -0
- package/dist/model-outcomes.d.ts.map +1 -0
- package/dist/model-outcomes.js +46 -0
- package/dist/model-outcomes.js.map +1 -0
- package/dist/planner.d.ts +32 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +163 -0
- package/dist/planner.js.map +1 -0
- package/dist/project-memory.d.ts +29 -0
- package/dist/project-memory.d.ts.map +1 -0
- package/dist/project-memory.js +349 -0
- package/dist/project-memory.js.map +1 -0
- package/dist/review.d.ts +2 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +61 -0
- package/dist/review.js.map +1 -0
- package/dist/runtime/background-jobs.d.ts +97 -0
- package/dist/runtime/background-jobs.d.ts.map +1 -0
- package/dist/runtime/background-jobs.js +331 -0
- package/dist/runtime/background-jobs.js.map +1 -0
- package/dist/runtime/credential-vault.d.ts +124 -0
- package/dist/runtime/credential-vault.d.ts.map +1 -0
- package/dist/runtime/credential-vault.js +184 -0
- package/dist/runtime/credential-vault.js.map +1 -0
- package/dist/runtime/loop-trap.d.ts +197 -0
- package/dist/runtime/loop-trap.d.ts.map +1 -0
- package/dist/runtime/loop-trap.js +420 -0
- package/dist/runtime/loop-trap.js.map +1 -0
- package/dist/runtime/policy.d.ts +15 -0
- package/dist/runtime/policy.d.ts.map +1 -0
- package/dist/runtime/policy.js +60 -0
- package/dist/runtime/policy.js.map +1 -0
- package/dist/runtime/redaction.d.ts +66 -0
- package/dist/runtime/redaction.d.ts.map +1 -0
- package/dist/runtime/redaction.js +155 -0
- package/dist/runtime/redaction.js.map +1 -0
- package/dist/runtime/session-snapshots.d.ts +76 -0
- package/dist/runtime/session-snapshots.d.ts.map +1 -0
- package/dist/runtime/session-snapshots.js +166 -0
- package/dist/runtime/session-snapshots.js.map +1 -0
- package/dist/runtime/staging.d.ts +205 -0
- package/dist/runtime/staging.d.ts.map +1 -0
- package/dist/runtime/staging.js +526 -0
- package/dist/runtime/staging.js.map +1 -0
- package/dist/runtime/task-session.d.ts +95 -0
- package/dist/runtime/task-session.d.ts.map +1 -0
- package/dist/runtime/task-session.js +263 -0
- package/dist/runtime/task-session.js.map +1 -0
- package/dist/runtime/worktree.d.ts +55 -0
- package/dist/runtime/worktree.d.ts.map +1 -0
- package/dist/runtime/worktree.js +175 -0
- package/dist/runtime/worktree.js.map +1 -0
- package/dist/setup-wizard.d.ts +8 -0
- package/dist/setup-wizard.d.ts.map +1 -0
- package/dist/setup-wizard.js +73 -0
- package/dist/setup-wizard.js.map +1 -0
- package/dist/shared/content.d.ts +43 -0
- package/dist/shared/content.d.ts.map +1 -0
- package/dist/shared/content.js +61 -0
- package/dist/shared/content.js.map +1 -0
- package/dist/shared/types.d.ts +217 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +3 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/test-runner.d.ts +5 -0
- package/dist/test-runner.d.ts.map +1 -0
- package/dist/test-runner.js +42 -0
- package/dist/test-runner.js.map +1 -0
- package/dist/types.d.ts +85 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/ascii.d.ts +23 -0
- package/dist/ui/ascii.d.ts.map +1 -0
- package/dist/ui/ascii.js +45 -0
- package/dist/ui/ascii.js.map +1 -0
- package/dist/ui/colors.d.ts +111 -0
- package/dist/ui/colors.d.ts.map +1 -0
- package/dist/ui/colors.js +166 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/ui/image-attach.d.ts +27 -0
- package/dist/ui/image-attach.d.ts.map +1 -0
- package/dist/ui/image-attach.js +100 -0
- package/dist/ui/image-attach.js.map +1 -0
- package/dist/ui/index.d.ts +18 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +18 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/markdown-stream.d.ts +91 -0
- package/dist/ui/markdown-stream.d.ts.map +1 -0
- package/dist/ui/markdown-stream.js +524 -0
- package/dist/ui/markdown-stream.js.map +1 -0
- package/dist/ui/plan-renderer.d.ts +36 -0
- package/dist/ui/plan-renderer.d.ts.map +1 -0
- package/dist/ui/plan-renderer.js +79 -0
- package/dist/ui/plan-renderer.js.map +1 -0
- package/dist/ui/prompt.d.ts +11 -0
- package/dist/ui/prompt.d.ts.map +1 -0
- package/dist/ui/prompt.js +1960 -0
- package/dist/ui/prompt.js.map +1 -0
- package/dist/ui/render-primitives.d.ts +117 -0
- package/dist/ui/render-primitives.d.ts.map +1 -0
- package/dist/ui/render-primitives.js +322 -0
- package/dist/ui/render-primitives.js.map +1 -0
- package/dist/ui/render.d.ts +133 -0
- package/dist/ui/render.d.ts.map +1 -0
- package/dist/ui/render.js +547 -0
- package/dist/ui/render.js.map +1 -0
- package/dist/ui/session-header.d.ts +30 -0
- package/dist/ui/session-header.d.ts.map +1 -0
- package/dist/ui/session-header.js +74 -0
- package/dist/ui/session-header.js.map +1 -0
- package/dist/workspace-guard.d.ts +68 -0
- package/dist/workspace-guard.d.ts.map +1 -0
- package/dist/workspace-guard.js +168 -0
- package/dist/workspace-guard.js.map +1 -0
- package/dist/workspace-lock.d.ts +27 -0
- package/dist/workspace-lock.d.ts.map +1 -0
- package/dist/workspace-lock.js +95 -0
- package/dist/workspace-lock.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 24-bit TrueColor ANSI escape sequences for the FixO Theme.
|
|
3
|
+
* Supports dynamic toggling between Dark Mode ('dark') and High-Contrast Inverted Mode ('inverted').
|
|
4
|
+
*
|
|
5
|
+
* The legacy `colors` object is preserved for backward compatibility
|
|
6
|
+
* with the 305+ tests that import it. The new `C` palette is the
|
|
7
|
+
* canonical brand identity — the "Liquid Lava" / "Dark Void" / "Snow"
|
|
8
|
+
* triad that's used across the new UI primitives in
|
|
9
|
+
* `src/ui/render.ts` and friends.
|
|
10
|
+
*/
|
|
11
|
+
export declare let themeMode: 'dark' | 'inverted';
|
|
12
|
+
export declare function setThemeMode(mode: 'dark' | 'inverted'): void;
|
|
13
|
+
export declare const colors: {
|
|
14
|
+
readonly reset: string;
|
|
15
|
+
readonly bold: string;
|
|
16
|
+
readonly dim: string;
|
|
17
|
+
readonly underline: string;
|
|
18
|
+
readonly snow: "\u001B[38;2;21;20;25m" | "\u001B[38;2;251;251;251m";
|
|
19
|
+
readonly bgSnow: "\u001B[48;2;251;251;251m" | "\u001B[48;2;21;20;25m";
|
|
20
|
+
readonly darkVoid: "\u001B[38;2;21;20;25m" | "\u001B[38;2;251;251;251m";
|
|
21
|
+
readonly bgDarkVoid: "\u001B[48;2;251;251;251m" | "\u001B[48;2;21;20;25m";
|
|
22
|
+
readonly liquidLava: string;
|
|
23
|
+
readonly bgLiquidLava: string;
|
|
24
|
+
readonly cyan: string;
|
|
25
|
+
readonly blue: string;
|
|
26
|
+
readonly magenta: string;
|
|
27
|
+
readonly white: "\u001B[38;2;21;20;25m" | "\u001B[38;2;251;251;251m";
|
|
28
|
+
readonly green: string;
|
|
29
|
+
readonly yellow: string;
|
|
30
|
+
readonly red: string;
|
|
31
|
+
readonly gray: string;
|
|
32
|
+
readonly bgCyan: string;
|
|
33
|
+
};
|
|
34
|
+
/** Helper to render a high-contrast label with Snow background and Dark Void text */
|
|
35
|
+
export declare function renderStatusLabel(text: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Canonical FixO brand palette. The first class — `LAVA` —
|
|
38
|
+
* is the primary accent used on EVERY key highlight, the
|
|
39
|
+
* ASCII logo, the prompt glyph, the status-bar pills, and the
|
|
40
|
+
* top border of the AI response frame.
|
|
41
|
+
*
|
|
42
|
+
* The hex values are duplicated as comment annotations so the
|
|
43
|
+
* palette can be audited without an external reference.
|
|
44
|
+
*/
|
|
45
|
+
export declare const C: {
|
|
46
|
+
readonly LAVA: "\u001B[38;2;245;110;15m";
|
|
47
|
+
readonly LAVA_BG: "\u001B[48;2;42;26;10m";
|
|
48
|
+
readonly LAVA_DIM: "\u001B[38;2;122;54;8m";
|
|
49
|
+
readonly VOID: "\u001B[48;2;21;20;25m";
|
|
50
|
+
readonly VOID2: "\u001B[48;2;28;27;33m";
|
|
51
|
+
readonly VOID3: "\u001B[48;2;35;34;40m";
|
|
52
|
+
readonly VOID4_FG: "\u001B[38;2;46;45;53m";
|
|
53
|
+
readonly SNOW: "\u001B[38;2;251;251;251m";
|
|
54
|
+
readonly SNOW2: "\u001B[38;2;200;200;200m";
|
|
55
|
+
readonly SNOW3: "\u001B[38;2;136;136;136m";
|
|
56
|
+
readonly SNOW4: "\u001B[38;2;68;68;68m";
|
|
57
|
+
readonly BLUE: "\u001B[38;2;96;165;250m";
|
|
58
|
+
readonly GREEN: "\u001B[38;2;74;222;128m";
|
|
59
|
+
readonly YELLOW: "\u001B[38;2;250;204;21m";
|
|
60
|
+
readonly PURPLE: "\u001B[38;2;192;132;252m";
|
|
61
|
+
readonly RED: "\u001B[38;2;248;113;113m";
|
|
62
|
+
readonly P_ANTHROPIC: "\u001B[38;2;245;110;15m";
|
|
63
|
+
readonly P_GOOGLE: "\u001B[38;2;74;222;128m";
|
|
64
|
+
readonly P_GROQ: "\u001B[38;2;250;204;21m";
|
|
65
|
+
readonly P_OPENAI: "\u001B[38;2;96;165;250m";
|
|
66
|
+
readonly P_ZEN: "\u001B[38;2;192;132;252m";
|
|
67
|
+
readonly P_MISTRAL: "\u001B[38;2;251;191;36m";
|
|
68
|
+
readonly P_NVIDIA: "\u001B[38;2;134;239;172m";
|
|
69
|
+
readonly BOLD: "\u001B[1m";
|
|
70
|
+
readonly DIM: "\u001B[2m";
|
|
71
|
+
readonly RESET: "\u001B[0m";
|
|
72
|
+
readonly NL: "\n";
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Helper wrappers that wrap a string in a colour + RESET.
|
|
76
|
+
* Pure, allocation-light, safe to use in any hot path.
|
|
77
|
+
*/
|
|
78
|
+
export declare function lava(text: string): string;
|
|
79
|
+
export declare function snow(text: string): string;
|
|
80
|
+
export declare function dim(text: string): string;
|
|
81
|
+
export declare function green(text: string): string;
|
|
82
|
+
export declare function blue(text: string): string;
|
|
83
|
+
export declare function yellow(text: string): string;
|
|
84
|
+
export declare function purple(text: string): string;
|
|
85
|
+
export declare function red(text: string): string;
|
|
86
|
+
export declare function bold(text: string): string;
|
|
87
|
+
/**
|
|
88
|
+
* Visible-character length of a string with ANSI escapes removed.
|
|
89
|
+
* Use this whenever you need to pad an ANSI-coloured string to a
|
|
90
|
+
* target column width — `.length` over-counts because it includes
|
|
91
|
+
* the escape bytes.
|
|
92
|
+
*/
|
|
93
|
+
export declare function visLen(s: string): number;
|
|
94
|
+
/**
|
|
95
|
+
* Pad a string (which may contain ANSI escapes) to a target
|
|
96
|
+
* visual width. If the string is already at or beyond the target,
|
|
97
|
+
* it is returned unchanged. Negative widths are treated as zero.
|
|
98
|
+
*/
|
|
99
|
+
export declare function padToVisual(s: string, width: number, char?: string): string;
|
|
100
|
+
/**
|
|
101
|
+
* Pick the brand colour for a provider by its display name.
|
|
102
|
+
* Returns the colour code; callers add the text and RESET.
|
|
103
|
+
*/
|
|
104
|
+
export declare function providerColor(name: string): string;
|
|
105
|
+
/**
|
|
106
|
+
* Render a single pill: `${bg}${fg} ${text} ${RESET}`.
|
|
107
|
+
* Used by the status bar and any other place a labelled chip
|
|
108
|
+
* needs a coloured background.
|
|
109
|
+
*/
|
|
110
|
+
export declare function pill(text: string, fg: string, bg: string): string;
|
|
111
|
+
//# sourceMappingURL=colors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/ui/colors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,IAAI,SAAS,EAAE,MAAM,GAAG,UAAmB,CAAC;AAEnD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,QAErD;AAID,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;CAwClB,CAAC;AAEF,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCJ,CAAC;AAIX;;;GAGG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAA2C;AACrF,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAA2C;AACrF,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAA6C;AACtF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAA2C;AACtF,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAA2C;AACrF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAA2C;AACvF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAA2C;AACvF,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAA2C;AACpF,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAA2C;AAErF;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,SAAM,GAAG,MAAM,CAIxE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEjE"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 24-bit TrueColor ANSI escape sequences for the FixO Theme.
|
|
3
|
+
* Supports dynamic toggling between Dark Mode ('dark') and High-Contrast Inverted Mode ('inverted').
|
|
4
|
+
*
|
|
5
|
+
* The legacy `colors` object is preserved for backward compatibility
|
|
6
|
+
* with the 305+ tests that import it. The new `C` palette is the
|
|
7
|
+
* canonical brand identity — the "Liquid Lava" / "Dark Void" / "Snow"
|
|
8
|
+
* triad that's used across the new UI primitives in
|
|
9
|
+
* `src/ui/render.ts` and friends.
|
|
10
|
+
*/
|
|
11
|
+
export let themeMode = 'dark';
|
|
12
|
+
export function setThemeMode(mode) {
|
|
13
|
+
themeMode = mode;
|
|
14
|
+
}
|
|
15
|
+
/* ──────────────────────── Legacy palette (preserved) ──────────────────────── */
|
|
16
|
+
export const colors = {
|
|
17
|
+
get reset() { return '\x1b[0m'; },
|
|
18
|
+
get bold() { return '\x1b[1m'; },
|
|
19
|
+
get dim() { return '\x1b[2m'; },
|
|
20
|
+
get underline() { return '\x1b[4m'; },
|
|
21
|
+
// Snow (#FBFBFB)
|
|
22
|
+
get snow() {
|
|
23
|
+
return themeMode === 'dark' ? '\x1b[38;2;251;251;251m' : '\x1b[38;2;21;20;25m';
|
|
24
|
+
},
|
|
25
|
+
get bgSnow() {
|
|
26
|
+
return themeMode === 'dark' ? '\x1b[48;2;251;251;251m' : '\x1b[48;2;21;20;25m';
|
|
27
|
+
},
|
|
28
|
+
// Dark Void (#151419)
|
|
29
|
+
get darkVoid() {
|
|
30
|
+
return themeMode === 'dark' ? '\x1b[38;2;21;20;25m' : '\x1b[38;2;251;251;251m';
|
|
31
|
+
},
|
|
32
|
+
get bgDarkVoid() {
|
|
33
|
+
return themeMode === 'dark' ? '\x1b[48;2;21;20;25m' : '\x1b[48;2;251;251;251m';
|
|
34
|
+
},
|
|
35
|
+
// Liquid Lava (#F56E0F)
|
|
36
|
+
get liquidLava() {
|
|
37
|
+
return '\x1b[38;2;245;110;15m';
|
|
38
|
+
},
|
|
39
|
+
get bgLiquidLava() {
|
|
40
|
+
return '\x1b[48;2;245;110;15m';
|
|
41
|
+
},
|
|
42
|
+
// Compatibility Mappings mapped to our Theme Palette
|
|
43
|
+
get cyan() { return '\x1b[38;2;56;189;248m'; },
|
|
44
|
+
get blue() { return '\x1b[38;2;96;165;250m'; },
|
|
45
|
+
get magenta() { return '\x1b[38;2;236;72;153m'; },
|
|
46
|
+
get white() { return this.snow; },
|
|
47
|
+
get green() { return '\x1b[38;2;76;175;80m'; },
|
|
48
|
+
get yellow() { return '\x1b[38;2;245;180;64m'; },
|
|
49
|
+
get red() { return '\x1b[38;2;244;67;54m'; },
|
|
50
|
+
get gray() { return '\x1b[38;2;145;145;155m'; },
|
|
51
|
+
get bgCyan() { return '\x1b[48;2;56;189;248m'; },
|
|
52
|
+
};
|
|
53
|
+
/** Helper to render a high-contrast label with Snow background and Dark Void text */
|
|
54
|
+
export function renderStatusLabel(text) {
|
|
55
|
+
return `${colors.bgSnow}${colors.darkVoid} ${text} ${colors.reset}`;
|
|
56
|
+
}
|
|
57
|
+
/* ──────────────────────── C palette (brand identity) ──────────────────────── */
|
|
58
|
+
/**
|
|
59
|
+
* Canonical FixO brand palette. The first class — `LAVA` —
|
|
60
|
+
* is the primary accent used on EVERY key highlight, the
|
|
61
|
+
* ASCII logo, the prompt glyph, the status-bar pills, and the
|
|
62
|
+
* top border of the AI response frame.
|
|
63
|
+
*
|
|
64
|
+
* The hex values are duplicated as comment annotations so the
|
|
65
|
+
* palette can be audited without an external reference.
|
|
66
|
+
*/
|
|
67
|
+
export const C = {
|
|
68
|
+
// Brand
|
|
69
|
+
LAVA: '\x1b[38;2;245;110;15m', // #F56E0F — primary accent
|
|
70
|
+
LAVA_BG: '\x1b[48;2;42;26;10m', // dark orange surface
|
|
71
|
+
LAVA_DIM: '\x1b[38;2;122;54;8m', // muted lava for secondary accents
|
|
72
|
+
// Backgrounds (used as surface layers)
|
|
73
|
+
VOID: '\x1b[48;2;21;20;25m', // #151419 — deepest bg
|
|
74
|
+
VOID2: '\x1b[48;2;28;27;33m', // slightly lifted surface
|
|
75
|
+
VOID3: '\x1b[48;2;35;34;40m', // hover / selected row bg
|
|
76
|
+
VOID4_FG: '\x1b[38;2;46;45;53m', // border color as foreground
|
|
77
|
+
// Text
|
|
78
|
+
SNOW: '\x1b[38;2;251;251;251m', // #FBFBFB — primary text
|
|
79
|
+
SNOW2: '\x1b[38;2;200;200;200m', // secondary text
|
|
80
|
+
SNOW3: '\x1b[38;2;136;136;136m', // muted / hints
|
|
81
|
+
SNOW4: '\x1b[38;2;68;68;68m', // very dim / decorative
|
|
82
|
+
// Semantic (tool call types)
|
|
83
|
+
BLUE: '\x1b[38;2;96;165;250m', // ReadFile, info
|
|
84
|
+
GREEN: '\x1b[38;2;74;222;128m', // success
|
|
85
|
+
YELLOW: '\x1b[38;2;250;204;21m', // Bash, warnings
|
|
86
|
+
PURPLE: '\x1b[38;2;192;132;252m', // WriteFile, AI highlights
|
|
87
|
+
RED: '\x1b[38;2;248;113;113m', // errors
|
|
88
|
+
// Provider colors
|
|
89
|
+
P_ANTHROPIC: '\x1b[38;2;245;110;15m',
|
|
90
|
+
P_GOOGLE: '\x1b[38;2;74;222;128m',
|
|
91
|
+
P_GROQ: '\x1b[38;2;250;204;21m',
|
|
92
|
+
P_OPENAI: '\x1b[38;2;96;165;250m',
|
|
93
|
+
P_ZEN: '\x1b[38;2;192;132;252m',
|
|
94
|
+
P_MISTRAL: '\x1b[38;2;251;191;36m',
|
|
95
|
+
P_NVIDIA: '\x1b[38;2;134;239;172m',
|
|
96
|
+
// Formatting
|
|
97
|
+
BOLD: '\x1b[1m',
|
|
98
|
+
DIM: '\x1b[2m',
|
|
99
|
+
RESET: '\x1b[0m',
|
|
100
|
+
NL: '\n',
|
|
101
|
+
};
|
|
102
|
+
/* ──────────────────────── Helper wrappers ──────────────────────── */
|
|
103
|
+
/**
|
|
104
|
+
* Helper wrappers that wrap a string in a colour + RESET.
|
|
105
|
+
* Pure, allocation-light, safe to use in any hot path.
|
|
106
|
+
*/
|
|
107
|
+
export function lava(text) { return `${C.LAVA}${text}${C.RESET}`; }
|
|
108
|
+
export function snow(text) { return `${C.SNOW}${text}${C.RESET}`; }
|
|
109
|
+
export function dim(text) { return `${C.SNOW4}${text}${C.RESET}`; }
|
|
110
|
+
export function green(text) { return `${C.GREEN}${text}${C.RESET}`; }
|
|
111
|
+
export function blue(text) { return `${C.BLUE}${text}${C.RESET}`; }
|
|
112
|
+
export function yellow(text) { return `${C.YELLOW}${text}${C.RESET}`; }
|
|
113
|
+
export function purple(text) { return `${C.PURPLE}${text}${C.RESET}`; }
|
|
114
|
+
export function red(text) { return `${C.RED}${text}${C.RESET}`; }
|
|
115
|
+
export function bold(text) { return `${C.BOLD}${text}${C.RESET}`; }
|
|
116
|
+
/**
|
|
117
|
+
* Visible-character length of a string with ANSI escapes removed.
|
|
118
|
+
* Use this whenever you need to pad an ANSI-coloured string to a
|
|
119
|
+
* target column width — `.length` over-counts because it includes
|
|
120
|
+
* the escape bytes.
|
|
121
|
+
*/
|
|
122
|
+
export function visLen(s) {
|
|
123
|
+
return s.replace(/\x1b\[[0-9;]*m/g, '').length;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Pad a string (which may contain ANSI escapes) to a target
|
|
127
|
+
* visual width. If the string is already at or beyond the target,
|
|
128
|
+
* it is returned unchanged. Negative widths are treated as zero.
|
|
129
|
+
*/
|
|
130
|
+
export function padToVisual(s, width, char = ' ') {
|
|
131
|
+
const v = visLen(s);
|
|
132
|
+
if (v >= width)
|
|
133
|
+
return s;
|
|
134
|
+
return s + char.repeat(width - v);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Pick the brand colour for a provider by its display name.
|
|
138
|
+
* Returns the colour code; callers add the text and RESET.
|
|
139
|
+
*/
|
|
140
|
+
export function providerColor(name) {
|
|
141
|
+
const lower = name.toLowerCase();
|
|
142
|
+
if (lower.includes('anthropic') || lower.includes('claude'))
|
|
143
|
+
return C.P_ANTHROPIC;
|
|
144
|
+
if (lower.includes('google') || lower.includes('gemini'))
|
|
145
|
+
return C.P_GOOGLE;
|
|
146
|
+
if (lower.includes('groq'))
|
|
147
|
+
return C.P_GROQ;
|
|
148
|
+
if (lower.includes('openai'))
|
|
149
|
+
return C.P_OPENAI;
|
|
150
|
+
if (lower.includes('zen') || lower.includes('opencode'))
|
|
151
|
+
return C.P_ZEN;
|
|
152
|
+
if (lower.includes('mistral'))
|
|
153
|
+
return C.P_MISTRAL;
|
|
154
|
+
if (lower.includes('nvidia') || lower.includes('nim'))
|
|
155
|
+
return C.P_NVIDIA;
|
|
156
|
+
return C.SNOW2;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Render a single pill: `${bg}${fg} ${text} ${RESET}`.
|
|
160
|
+
* Used by the status bar and any other place a labelled chip
|
|
161
|
+
* needs a coloured background.
|
|
162
|
+
*/
|
|
163
|
+
export function pill(text, fg, bg) {
|
|
164
|
+
return `${bg}${fg} ${text} ${C.RESET}`;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/ui/colors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ChatContentBlock, ChatImageMediaType } from '../shared/types.js';
|
|
2
|
+
/** Hard cap before base64 encoding. 5 MiB ≈ 7 MiB once encoded. */
|
|
3
|
+
export declare const MAX_IMAGE_BYTES: number;
|
|
4
|
+
export type AttachImageResult = {
|
|
5
|
+
ok: true;
|
|
6
|
+
block: ChatContentBlock;
|
|
7
|
+
mediaType: ChatImageMediaType;
|
|
8
|
+
bytes: number;
|
|
9
|
+
} | {
|
|
10
|
+
ok: false;
|
|
11
|
+
error: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Sniff the image MIME type from the file's leading bytes. We
|
|
15
|
+
* deliberately avoid pulling in a MIME-detection library — these
|
|
16
|
+
* four magic numbers are enough for every format we support.
|
|
17
|
+
*/
|
|
18
|
+
export declare function sniffImageMediaType(prefix: Buffer): ChatImageMediaType | null;
|
|
19
|
+
/**
|
|
20
|
+
* Load an image off disk and return a typed content block.
|
|
21
|
+
* Failures (missing file, oversized, unsupported MIME, workspace
|
|
22
|
+
* escape) return `{ ok: false, error }` rather than throwing, so
|
|
23
|
+
* the slash-command dispatcher can render a friendly message
|
|
24
|
+
* instead of crashing the REPL.
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadImageAsBlock(rawPath: string, cwd: string): AttachImageResult;
|
|
27
|
+
//# sourceMappingURL=image-attach.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-attach.d.ts","sourceRoot":"","sources":["../../src/ui/image-attach.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE/E,mEAAmE;AACnE,eAAO,MAAM,eAAe,QAAkB,CAAC;AAE/C,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnF;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAwB7E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAsDhF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* image-attach.ts — Phase 2 helper for the `/image` slash command.
|
|
3
|
+
*
|
|
4
|
+
* Reads an image off disk through `WorkspaceGuard`, sniffs the
|
|
5
|
+
* MIME type by looking at the byte prefix (no external lib), caps
|
|
6
|
+
* the byte size at 5 MiB (matches Anthropic's documented ceiling),
|
|
7
|
+
* and returns either a typed `ChatContentBlock` or a structured
|
|
8
|
+
* error. Pure read-side — never writes, never spawns processes.
|
|
9
|
+
*/
|
|
10
|
+
import fs from 'node:fs';
|
|
11
|
+
import { WorkspaceGuard } from '../workspace-guard.js';
|
|
12
|
+
/** Hard cap before base64 encoding. 5 MiB ≈ 7 MiB once encoded. */
|
|
13
|
+
export const MAX_IMAGE_BYTES = 5 * 1024 * 1024;
|
|
14
|
+
/**
|
|
15
|
+
* Sniff the image MIME type from the file's leading bytes. We
|
|
16
|
+
* deliberately avoid pulling in a MIME-detection library — these
|
|
17
|
+
* four magic numbers are enough for every format we support.
|
|
18
|
+
*/
|
|
19
|
+
export function sniffImageMediaType(prefix) {
|
|
20
|
+
if (prefix.length >= 8 && prefix[0] === 0x89 && prefix[1] === 0x50 && prefix[2] === 0x4e && prefix[3] === 0x47) {
|
|
21
|
+
return 'image/png';
|
|
22
|
+
}
|
|
23
|
+
if (prefix.length >= 3 && prefix[0] === 0xff && prefix[1] === 0xd8 && prefix[2] === 0xff) {
|
|
24
|
+
return 'image/jpeg';
|
|
25
|
+
}
|
|
26
|
+
// WebP: 'RIFF' .... 'WEBP'
|
|
27
|
+
if (prefix.length >= 12 &&
|
|
28
|
+
prefix[0] === 0x52 && prefix[1] === 0x49 && prefix[2] === 0x46 && prefix[3] === 0x46 &&
|
|
29
|
+
prefix[8] === 0x57 && prefix[9] === 0x45 && prefix[10] === 0x42 && prefix[11] === 0x50) {
|
|
30
|
+
return 'image/webp';
|
|
31
|
+
}
|
|
32
|
+
// GIF: 'GIF87a' or 'GIF89a'
|
|
33
|
+
if (prefix.length >= 6 &&
|
|
34
|
+
prefix[0] === 0x47 && prefix[1] === 0x49 && prefix[2] === 0x46 && prefix[3] === 0x38 &&
|
|
35
|
+
(prefix[4] === 0x37 || prefix[4] === 0x39) && prefix[5] === 0x61) {
|
|
36
|
+
return 'image/gif';
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Load an image off disk and return a typed content block.
|
|
42
|
+
* Failures (missing file, oversized, unsupported MIME, workspace
|
|
43
|
+
* escape) return `{ ok: false, error }` rather than throwing, so
|
|
44
|
+
* the slash-command dispatcher can render a friendly message
|
|
45
|
+
* instead of crashing the REPL.
|
|
46
|
+
*/
|
|
47
|
+
export function loadImageAsBlock(rawPath, cwd) {
|
|
48
|
+
let resolved;
|
|
49
|
+
try {
|
|
50
|
+
const guard = new WorkspaceGuard(cwd);
|
|
51
|
+
resolved = guard.resolve(rawPath, 'image');
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
return { ok: false, error: `path rejected: ${err.message}` };
|
|
55
|
+
}
|
|
56
|
+
let stat;
|
|
57
|
+
try {
|
|
58
|
+
stat = fs.statSync(resolved);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return { ok: false, error: `file not found: ${rawPath}` };
|
|
62
|
+
}
|
|
63
|
+
if (!stat.isFile()) {
|
|
64
|
+
return { ok: false, error: `not a regular file: ${rawPath}` };
|
|
65
|
+
}
|
|
66
|
+
if (stat.size > MAX_IMAGE_BYTES) {
|
|
67
|
+
return {
|
|
68
|
+
ok: false,
|
|
69
|
+
error: `image too large: ${stat.size} bytes (cap ${MAX_IMAGE_BYTES}).`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
if (stat.size === 0) {
|
|
73
|
+
return { ok: false, error: `image is empty: ${rawPath}` };
|
|
74
|
+
}
|
|
75
|
+
let bytes;
|
|
76
|
+
try {
|
|
77
|
+
bytes = fs.readFileSync(resolved);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
return { ok: false, error: `read failed: ${err.message}` };
|
|
81
|
+
}
|
|
82
|
+
const mediaType = sniffImageMediaType(bytes.subarray(0, 16));
|
|
83
|
+
if (mediaType == null) {
|
|
84
|
+
return {
|
|
85
|
+
ok: false,
|
|
86
|
+
error: `unsupported image format. Supported: PNG, JPEG, WebP, GIF. ` +
|
|
87
|
+
`(File magic did not match.)`,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const block = {
|
|
91
|
+
type: 'image',
|
|
92
|
+
source: {
|
|
93
|
+
kind: 'base64',
|
|
94
|
+
mediaType,
|
|
95
|
+
data: bytes.toString('base64'),
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
return { ok: true, block, mediaType, bytes: stat.size };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=image-attach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-attach.js","sourceRoot":"","sources":["../../src/ui/image-attach.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ui/index.ts — Barrel export for the FixO UI surface.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the brand palette (`C` + helpers), the logo, all
|
|
5
|
+
* high-level render primitives, the session header, the plan
|
|
6
|
+
* renderer, and the legacy `colors` object / `renderStatusLabel`
|
|
7
|
+
* used by the rest of the codebase.
|
|
8
|
+
*
|
|
9
|
+
* Existing callers continue to import from the granular files
|
|
10
|
+
* (e.g. `import { colors } from './colors.js'`); this barrel is
|
|
11
|
+
* for the new code and the new tests.
|
|
12
|
+
*/
|
|
13
|
+
export * from './colors.js';
|
|
14
|
+
export * from './ascii.js';
|
|
15
|
+
export * from './render-primitives.js';
|
|
16
|
+
export * from './session-header.js';
|
|
17
|
+
export * from './plan-renderer.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
package/dist/ui/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ui/index.ts — Barrel export for the FixO UI surface.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the brand palette (`C` + helpers), the logo, all
|
|
5
|
+
* high-level render primitives, the session header, the plan
|
|
6
|
+
* renderer, and the legacy `colors` object / `renderStatusLabel`
|
|
7
|
+
* used by the rest of the codebase.
|
|
8
|
+
*
|
|
9
|
+
* Existing callers continue to import from the granular files
|
|
10
|
+
* (e.g. `import { colors } from './colors.js'`); this barrel is
|
|
11
|
+
* for the new code and the new tests.
|
|
12
|
+
*/
|
|
13
|
+
export * from './colors.js';
|
|
14
|
+
export * from './ascii.js';
|
|
15
|
+
export * from './render-primitives.js';
|
|
16
|
+
export * from './session-header.js';
|
|
17
|
+
export * from './plan-renderer.js';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* markdown-stream.ts — incremental ANSI markdown renderer for
|
|
3
|
+
* streaming model output.
|
|
4
|
+
*
|
|
5
|
+
* Design contract:
|
|
6
|
+
* - `write(chunk)` accepts arbitrary chunks (a single byte, half
|
|
7
|
+
* a word, a full paragraph). Lines are buffered until the
|
|
8
|
+
* trailing `\n` arrives; partial lines stay in the buffer.
|
|
9
|
+
* - `flush()` closes the renderer and emits any remaining buffer.
|
|
10
|
+
*
|
|
11
|
+
* State machine: `text` → `code-fence` → `text`, `text` → `table`
|
|
12
|
+
* → `text`. Transitions trigger on a complete line; partial lines
|
|
13
|
+
* never push the renderer into a new mode.
|
|
14
|
+
*
|
|
15
|
+
* Fenced code blocks use a hybrid presentation:
|
|
16
|
+
* - TTY path: stream a dim preview with side borders + the top
|
|
17
|
+
* border, then on close fence cursor-up + clear-to-end-of-screen
|
|
18
|
+
* and re-emit the finalised framed block with syntax highlight.
|
|
19
|
+
* - Non-TTY path (tests, pipes): suppress the preview and emit
|
|
20
|
+
* only the finalised framed block. Output is deterministic.
|
|
21
|
+
*
|
|
22
|
+
* Tables are buffered until a blank line / non-table line arrives,
|
|
23
|
+
* then rendered with Unicode box drawing.
|
|
24
|
+
*/
|
|
25
|
+
import { padToVisual } from './colors.js';
|
|
26
|
+
/**
|
|
27
|
+
* Apply inline markdown formatting to a single line: bold, italic,
|
|
28
|
+
* inline code, links, file paths, error keywords. Returns an
|
|
29
|
+
* ANSI-coloured string suitable for embedding in a wider line.
|
|
30
|
+
*
|
|
31
|
+
* Order matters: bold (`**`) before italic (`*`) so the longer
|
|
32
|
+
* delimiter wins. Inline code uses backticks and runs after the
|
|
33
|
+
* emphasis pass so backticks inside emphasis are honoured.
|
|
34
|
+
*/
|
|
35
|
+
declare function inlineFormat(text: string): string;
|
|
36
|
+
declare function langKey(raw: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Tokenise a single line of code and emit ANSI-coloured output.
|
|
39
|
+
* Token rules (in scan order, first match wins):
|
|
40
|
+
* - Line comment (`//` for C-family, `#` for python/bash) → SNOW4.
|
|
41
|
+
* - String literal (`"`, `'`, `` ` ``) → GREEN.
|
|
42
|
+
* - Numeric literal → YELLOW.
|
|
43
|
+
* - Identifier / keyword → PURPLE if keyword, SNOW2 otherwise.
|
|
44
|
+
* - Punctuation / whitespace → SNOW3.
|
|
45
|
+
*
|
|
46
|
+
* Languages without an entry in {@link LANG_KEYWORDS} get a plain
|
|
47
|
+
* SNOW2 rendering (no highlighting).
|
|
48
|
+
*/
|
|
49
|
+
declare function highlightCodeLine(line: string, lang: string): string;
|
|
50
|
+
export declare class MarkdownStreamRenderer {
|
|
51
|
+
private buf;
|
|
52
|
+
private state;
|
|
53
|
+
private codeLang;
|
|
54
|
+
private codeLines;
|
|
55
|
+
private previewLineCount;
|
|
56
|
+
private tableRows;
|
|
57
|
+
private firstWrite;
|
|
58
|
+
/**
|
|
59
|
+
* Feed a chunk of streamed text. Lines are emitted as they
|
|
60
|
+
* complete; the trailing fragment (text after the last `\n`)
|
|
61
|
+
* stays in the buffer until the next write or flush.
|
|
62
|
+
*/
|
|
63
|
+
write(chunk: string): void;
|
|
64
|
+
/**
|
|
65
|
+
* Close the renderer. Emits any buffered partial line, closes
|
|
66
|
+
* any open code fence (treating EOF as an implicit close), and
|
|
67
|
+
* flushes any open table.
|
|
68
|
+
*/
|
|
69
|
+
flush(): void;
|
|
70
|
+
private handleLine;
|
|
71
|
+
private renderTextLine;
|
|
72
|
+
private openCodeFence;
|
|
73
|
+
private streamCodePreviewLine;
|
|
74
|
+
private closeCodeFence;
|
|
75
|
+
private codeTopBorder;
|
|
76
|
+
private looksLikeTableRow;
|
|
77
|
+
private flushTable;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Render a complete markdown string (non-streaming path). Used by
|
|
81
|
+
* the post-tool response print site in single-agent.ts.
|
|
82
|
+
*/
|
|
83
|
+
export declare function renderMarkdown(text: string): void;
|
|
84
|
+
export declare const __internal: {
|
|
85
|
+
inlineFormat: typeof inlineFormat;
|
|
86
|
+
highlightCodeLine: typeof highlightCodeLine;
|
|
87
|
+
langKey: typeof langKey;
|
|
88
|
+
padToVisual: typeof padToVisual;
|
|
89
|
+
};
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=markdown-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-stream.d.ts","sourceRoot":"","sources":["../../src/ui/markdown-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAa,WAAW,EAAE,MAAM,aAAa,CAAC;AA2BrD;;;;;;;;GAQG;AACH,iBAAS,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAe1C;AAeD,iBAAS,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQpC;AAED;;;;;;;;;;;GAWG;AACH,iBAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAqD7D;AAoCD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,UAAU,CAAQ;IAE1B;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAgB1B;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAYb,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,cAAc;IAoDtB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,UAAU;CAwHnB;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKjD;AAID,eAAO,MAAM,UAAU;;;;;CAA4D,CAAC"}
|