@markusylisiurunen/tau 0.1.2

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 (106) hide show
  1. package/README.md +228 -0
  2. package/dist/app.js +1140 -0
  3. package/dist/app.js.map +1 -0
  4. package/dist/bash_commands.js +81 -0
  5. package/dist/bash_commands.js.map +1 -0
  6. package/dist/cli.js +147 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/clipboard.js +16 -0
  9. package/dist/clipboard.js.map +1 -0
  10. package/dist/commands.js +76 -0
  11. package/dist/commands.js.map +1 -0
  12. package/dist/config.js +39 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/content_loader.js +241 -0
  15. package/dist/content_loader.js.map +1 -0
  16. package/dist/debug-ui.js +134 -0
  17. package/dist/debug-ui.js.map +1 -0
  18. package/dist/main.js +85 -0
  19. package/dist/main.js.map +1 -0
  20. package/dist/personas.js +227 -0
  21. package/dist/personas.js.map +1 -0
  22. package/dist/prompts.js +261 -0
  23. package/dist/prompts.js.map +1 -0
  24. package/dist/session/message_accumulator.js +56 -0
  25. package/dist/session/message_accumulator.js.map +1 -0
  26. package/dist/session/session_engine.js +290 -0
  27. package/dist/session/session_engine.js.map +1 -0
  28. package/dist/subagents/explore.js +42 -0
  29. package/dist/subagents/explore.js.map +1 -0
  30. package/dist/subagents/registry.js +30 -0
  31. package/dist/subagents/registry.js.map +1 -0
  32. package/dist/subagents/subagent_engine.js +147 -0
  33. package/dist/subagents/subagent_engine.js.map +1 -0
  34. package/dist/subagents/types.js +2 -0
  35. package/dist/subagents/types.js.map +1 -0
  36. package/dist/terminal.js +115 -0
  37. package/dist/terminal.js.map +1 -0
  38. package/dist/tools/bash.js +334 -0
  39. package/dist/tools/bash.js.map +1 -0
  40. package/dist/tools/edit.js +199 -0
  41. package/dist/tools/edit.js.map +1 -0
  42. package/dist/tools/registry.js +15 -0
  43. package/dist/tools/registry.js.map +1 -0
  44. package/dist/tools/task.js +202 -0
  45. package/dist/tools/task.js.map +1 -0
  46. package/dist/tools/write.js +89 -0
  47. package/dist/tools/write.js.map +1 -0
  48. package/dist/types.js +9 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/ui/assistant_message.js +87 -0
  51. package/dist/ui/assistant_message.js.map +1 -0
  52. package/dist/ui/bash_execution.js +127 -0
  53. package/dist/ui/bash_execution.js.map +1 -0
  54. package/dist/ui/chat_container.js +90 -0
  55. package/dist/ui/chat_container.js.map +1 -0
  56. package/dist/ui/components/dynamic_border.js +11 -0
  57. package/dist/ui/components/dynamic_border.js.map +1 -0
  58. package/dist/ui/components/one_line_segments.js +79 -0
  59. package/dist/ui/components/one_line_segments.js.map +1 -0
  60. package/dist/ui/components/padded_container.js +24 -0
  61. package/dist/ui/components/padded_container.js.map +1 -0
  62. package/dist/ui/custom_editor.js +53 -0
  63. package/dist/ui/custom_editor.js.map +1 -0
  64. package/dist/ui/file_execution.js +189 -0
  65. package/dist/ui/file_execution.js.map +1 -0
  66. package/dist/ui/footer.js +56 -0
  67. package/dist/ui/footer.js.map +1 -0
  68. package/dist/ui/queued_messages.js +31 -0
  69. package/dist/ui/queued_messages.js.map +1 -0
  70. package/dist/ui/session_divider.js +17 -0
  71. package/dist/ui/session_divider.js.map +1 -0
  72. package/dist/ui/session_summary.js +30 -0
  73. package/dist/ui/session_summary.js.map +1 -0
  74. package/dist/ui/slash_autocomplete.js +177 -0
  75. package/dist/ui/slash_autocomplete.js.map +1 -0
  76. package/dist/ui/system_message.js +8 -0
  77. package/dist/ui/system_message.js.map +1 -0
  78. package/dist/ui/task_execution.js +190 -0
  79. package/dist/ui/task_execution.js.map +1 -0
  80. package/dist/ui/theme.js +108 -0
  81. package/dist/ui/theme.js.map +1 -0
  82. package/dist/ui/tool_output.js +24 -0
  83. package/dist/ui/tool_output.js.map +1 -0
  84. package/dist/ui/user_message.js +14 -0
  85. package/dist/ui/user_message.js.map +1 -0
  86. package/dist/utils/color.js +13 -0
  87. package/dist/utils/color.js.map +1 -0
  88. package/dist/utils/context.js +108 -0
  89. package/dist/utils/context.js.map +1 -0
  90. package/dist/utils/fork.js +41 -0
  91. package/dist/utils/fork.js.map +1 -0
  92. package/dist/utils/format.js +35 -0
  93. package/dist/utils/format.js.map +1 -0
  94. package/dist/utils/fuzzy.js +48 -0
  95. package/dist/utils/fuzzy.js.map +1 -0
  96. package/dist/utils/git.js +21 -0
  97. package/dist/utils/git.js.map +1 -0
  98. package/dist/utils/messages.js +41 -0
  99. package/dist/utils/messages.js.map +1 -0
  100. package/dist/utils/never.js +4 -0
  101. package/dist/utils/never.js.map +1 -0
  102. package/dist/utils/project_files.js +96 -0
  103. package/dist/utils/project_files.js.map +1 -0
  104. package/dist/utils/truncate.js +299 -0
  105. package/dist/utils/truncate.js.map +1 -0
  106. package/package.json +37 -0
@@ -0,0 +1,241 @@
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { getModels, getProviders } from "@mariozechner/pi-ai";
5
+ import { personas as builtinPersonas } from "./personas.js";
6
+ import { prompts as builtinPrompts } from "./prompts.js";
7
+ import { BASH_TOOL } from "./tools/bash.js";
8
+ import { EDIT_TOOL } from "./tools/edit.js";
9
+ import { WRITE_TOOL } from "./tools/write.js";
10
+ import { REASONING_LEVELS } from "./types.js";
11
+ function parseMarkdownWithFrontMatter(content) {
12
+ const lines = content.split("\n");
13
+ // Check for opening delimiter
14
+ if (lines[0]?.trim() !== "---") {
15
+ return { frontMatter: {}, body: content };
16
+ }
17
+ // Find closing delimiter
18
+ let endIndex = -1;
19
+ for (let i = 1; i < lines.length; i++) {
20
+ if (lines[i]?.trim() === "---") {
21
+ endIndex = i;
22
+ break;
23
+ }
24
+ }
25
+ if (endIndex === -1) {
26
+ return { frontMatter: {}, body: content };
27
+ }
28
+ const frontMatterLines = lines.slice(1, endIndex);
29
+ const bodyLines = lines.slice(endIndex + 1);
30
+ // Parse simple YAML
31
+ const frontMatter = parseSimpleYaml(frontMatterLines.join("\n"));
32
+ const body = bodyLines.join("\n").trim();
33
+ return { frontMatter, body };
34
+ }
35
+ function parseSimpleYaml(yamlText) {
36
+ const result = {};
37
+ const lines = yamlText.split("\n");
38
+ let currentKey;
39
+ let currentList = [];
40
+ for (const line of lines) {
41
+ const trimmed = line.trim();
42
+ if (!trimmed)
43
+ continue;
44
+ // List item
45
+ if (trimmed.startsWith("- ")) {
46
+ const item = trimmed.slice(2).trim();
47
+ currentList.push(item);
48
+ continue;
49
+ }
50
+ // Finalize any pending list
51
+ if (currentKey && currentList.length > 0) {
52
+ result[currentKey] = currentList;
53
+ currentList = [];
54
+ }
55
+ // Scalar key: value
56
+ const colonIndex = line.indexOf(":");
57
+ if (colonIndex > 0) {
58
+ currentKey = line.substring(0, colonIndex).trim();
59
+ const valueStr = line.substring(colonIndex + 1).trim();
60
+ if (valueStr) {
61
+ // Parse value: treat as string by default
62
+ // Simple heuristic: "true"/"false" -> boolean, numbers -> number
63
+ if (valueStr.toLowerCase() === "true") {
64
+ result[currentKey] = true;
65
+ }
66
+ else if (valueStr.toLowerCase() === "false") {
67
+ result[currentKey] = false;
68
+ }
69
+ else if (!Number.isNaN(Number(valueStr))) {
70
+ result[currentKey] = Number(valueStr);
71
+ }
72
+ else {
73
+ result[currentKey] = valueStr;
74
+ }
75
+ }
76
+ }
77
+ }
78
+ // Finalize pending list
79
+ if (currentKey && currentList.length > 0) {
80
+ result[currentKey] = currentList;
81
+ }
82
+ return result;
83
+ }
84
+ function isKnownProvider(value) {
85
+ return getProviders().includes(value);
86
+ }
87
+ function isReasoningEffort(value) {
88
+ return typeof value === "string" && REASONING_LEVELS.includes(value);
89
+ }
90
+ function resolveModel(provider, modelId) {
91
+ if (!isKnownProvider(provider))
92
+ return undefined;
93
+ return getModels(provider).find((m) => m.id === modelId);
94
+ }
95
+ export async function loadUserPersonas() {
96
+ const configDir = process.env.XDG_CONFIG_HOME || join(homedir(), ".config");
97
+ const personasDir = join(configDir, "tau", "personas");
98
+ const personas = [];
99
+ const errors = [];
100
+ if (!existsSync(personasDir)) {
101
+ return { personas, errors };
102
+ }
103
+ let files = [];
104
+ try {
105
+ files = readdirSync(personasDir).filter((f) => f.endsWith(".md"));
106
+ }
107
+ catch {
108
+ errors.push(`failed to read personas directory: ${personasDir}`);
109
+ return { personas, errors };
110
+ }
111
+ const builtinIds = new Set(builtinPersonas.map((p) => p.id.toLowerCase()));
112
+ for (const file of files) {
113
+ const filePath = join(personasDir, file);
114
+ try {
115
+ const content = readFileSync(filePath, "utf-8");
116
+ const { frontMatter, body } = parseMarkdownWithFrontMatter(content);
117
+ // Validate required fields
118
+ const id = frontMatter.id;
119
+ const label = frontMatter.label;
120
+ const provider = frontMatter.provider;
121
+ const model = frontMatter.model;
122
+ if (!id || !provider || !model) {
123
+ errors.push(`${file}: missing required fields (id, provider, model). skipped.`);
124
+ continue;
125
+ }
126
+ // Check for collision with built-ins
127
+ if (builtinIds.has(id.toLowerCase())) {
128
+ errors.push(`${file}: persona id "${id}" conflicts with built-in. skipped.`);
129
+ continue;
130
+ }
131
+ try {
132
+ const modelObj = resolveModel(provider, model);
133
+ if (!modelObj) {
134
+ errors.push(`${file}: failed to load model "${provider}:${model}". skipped.`);
135
+ continue;
136
+ }
137
+ const description = frontMatter.description;
138
+ const reasoningRaw = frontMatter.reasoning;
139
+ const allowedReasoningLevelsRaw = frontMatter.allowedReasoningLevels;
140
+ const settings = {};
141
+ if (isReasoningEffort(reasoningRaw)) {
142
+ settings.reasoning = reasoningRaw;
143
+ }
144
+ const filteredReasoningLevels = Array.isArray(allowedReasoningLevelsRaw)
145
+ ? allowedReasoningLevelsRaw.filter(isReasoningEffort)
146
+ : undefined;
147
+ const persona = {
148
+ id,
149
+ label: label || "custom",
150
+ model: modelObj,
151
+ systemPrompt: body,
152
+ settings,
153
+ tools: [BASH_TOOL, WRITE_TOOL, EDIT_TOOL],
154
+ ...(description && { description }),
155
+ ...(filteredReasoningLevels && filteredReasoningLevels.length > 0
156
+ ? { allowedReasoningLevels: filteredReasoningLevels }
157
+ : {}),
158
+ };
159
+ personas.push(persona);
160
+ }
161
+ catch (err) {
162
+ errors.push(`${file}: failed to load persona. skipped.`);
163
+ }
164
+ }
165
+ catch (err) {
166
+ errors.push(`${file}: ${err.message}`);
167
+ }
168
+ }
169
+ return { personas, errors };
170
+ }
171
+ export async function loadUserPrompts() {
172
+ const configDir = process.env.XDG_CONFIG_HOME || join(homedir(), ".config");
173
+ const promptsDir = join(configDir, "tau", "prompts");
174
+ const prompts = [];
175
+ const errors = [];
176
+ if (!existsSync(promptsDir)) {
177
+ return { prompts, errors };
178
+ }
179
+ let files = [];
180
+ try {
181
+ files = readdirSync(promptsDir).filter((f) => f.endsWith(".md"));
182
+ }
183
+ catch {
184
+ errors.push(`failed to read prompts directory: ${promptsDir}`);
185
+ return { prompts, errors };
186
+ }
187
+ const builtinIds = new Set(builtinPrompts.map((p) => p.id.toLowerCase()));
188
+ for (const file of files) {
189
+ const filePath = join(promptsDir, file);
190
+ try {
191
+ const content = readFileSync(filePath, "utf-8");
192
+ const { frontMatter, body } = parseMarkdownWithFrontMatter(content);
193
+ // Validate required fields
194
+ const id = frontMatter.id;
195
+ if (!id) {
196
+ errors.push(`${file}: missing required field 'id'. skipped.`);
197
+ continue;
198
+ }
199
+ // Check for collision with built-ins
200
+ if (builtinIds.has(id.toLowerCase())) {
201
+ errors.push(`${file}: prompt id "${id}" conflicts with built-in. skipped.`);
202
+ continue;
203
+ }
204
+ const label = frontMatter.label;
205
+ const description = frontMatter.description;
206
+ const prompt = {
207
+ id,
208
+ template: body,
209
+ ...(label && { label }),
210
+ ...(description && { description }),
211
+ };
212
+ prompts.push(prompt);
213
+ }
214
+ catch (err) {
215
+ errors.push(`${file}: ${err.message}`);
216
+ }
217
+ }
218
+ return { prompts, errors };
219
+ }
220
+ export async function loadAllContent() {
221
+ try {
222
+ const userPersonasResult = await loadUserPersonas();
223
+ const userPromptsResult = await loadUserPrompts();
224
+ const allErrors = [...userPersonasResult.errors, ...userPromptsResult.errors];
225
+ return {
226
+ personas: [...builtinPersonas, ...userPersonasResult.personas],
227
+ prompts: [...builtinPrompts, ...userPromptsResult.prompts],
228
+ errors: allErrors,
229
+ };
230
+ }
231
+ catch (err) {
232
+ // Safeguard: should not happen if loadUserPersonas/loadUserPrompts are robust,
233
+ // but wrap to ensure we never throw during startup
234
+ return {
235
+ personas: builtinPersonas,
236
+ prompts: builtinPrompts,
237
+ errors: [`unexpected error loading user content: ${err.message}`],
238
+ };
239
+ }
240
+ }
241
+ //# sourceMappingURL=content_loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content_loader.js","sourceRoot":"","sources":["../src/content_loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAM9C,SAAS,4BAA4B,CAAC,OAAe;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,8BAA8B;IAC9B,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED,yBAAyB;IACzB,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;YAC/B,QAAQ,GAAG,CAAC,CAAC;YACb,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAE5C,oBAAoB;IACpB,MAAM,WAAW,GAAG,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,UAA8B,CAAC;IACnC,IAAI,WAAW,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,YAAY;QACZ,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QAED,4BAA4B;QAC5B,IAAI,UAAU,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;YACjC,WAAW,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,oBAAoB;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEvD,IAAI,QAAQ,EAAE,CAAC;gBACb,0CAA0C;gBAC1C,iEAAiE;gBACjE,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;oBACtC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;gBAC5B,CAAC;qBAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;oBAC9C,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;gBAC7B,CAAC;qBAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBAC3C,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAU,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAsB,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAwB,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,OAAe;IACrD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAA2B,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAIpC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,sCAAsC,WAAW,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAE3E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;YAEpE,2BAA2B;YAC3B,MAAM,EAAE,GAAG,WAAW,CAAC,EAAwB,CAAC;YAChD,MAAM,KAAK,GAAG,WAAW,CAAC,KAA2B,CAAC;YACtD,MAAM,QAAQ,GAAG,WAAW,CAAC,QAA8B,CAAC;YAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,KAA2B,CAAC;YAEtD,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,2DAA2D,CAAC,CAAC;gBAChF,SAAS;YACX,CAAC;YAED,qCAAqC;YACrC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,iBAAiB,EAAE,qCAAqC,CAAC,CAAC;gBAC7E,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,2BAA2B,QAAQ,IAAI,KAAK,aAAa,CAAC,CAAC;oBAC9E,SAAS;gBACX,CAAC;gBAED,MAAM,WAAW,GAAG,WAAW,CAAC,WAAiC,CAAC;gBAClE,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC;gBAC3C,MAAM,yBAAyB,GAAG,WAAW,CAAC,sBAAsB,CAAC;gBAErE,MAAM,QAAQ,GAAwB,EAAE,CAAC;gBACzC,IAAI,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;oBACpC,QAAQ,CAAC,SAAS,GAAG,YAAY,CAAC;gBACpC,CAAC;gBAED,MAAM,uBAAuB,GAAG,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC;oBACtE,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,iBAAiB,CAAC;oBACrD,CAAC,CAAC,SAAS,CAAC;gBAEd,MAAM,OAAO,GAAY;oBACvB,EAAE;oBACF,KAAK,EAAE,KAAK,IAAI,QAAQ;oBACxB,KAAK,EAAE,QAAQ;oBACf,YAAY,EAAE,IAAI;oBAClB,QAAQ;oBACR,KAAK,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC;oBACzC,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;oBACnC,GAAG,CAAC,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC;wBAC/D,CAAC,CAAC,EAAE,sBAAsB,EAAE,uBAAuB,EAAE;wBACrD,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC;gBAEF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,oCAAoC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IAInC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,qCAAqC,UAAU,EAAE,CAAC,CAAC;QAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAE1E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;YAEpE,2BAA2B;YAC3B,MAAM,EAAE,GAAG,WAAW,CAAC,EAAwB,CAAC;YAChD,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,yCAAyC,CAAC,CAAC;gBAC9D,SAAS;YACX,CAAC;YAED,qCAAqC;YACrC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,gBAAgB,EAAE,qCAAqC,CAAC,CAAC;gBAC5E,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAA2B,CAAC;YACtD,MAAM,WAAW,GAAG,WAAW,CAAC,WAAiC,CAAC;YAElE,MAAM,MAAM,GAAmB;gBAC7B,EAAE;gBACF,QAAQ,EAAE,IAAI;gBACd,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;gBACvB,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;aACpC,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAKlC,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACpD,MAAM,iBAAiB,GAAG,MAAM,eAAe,EAAE,CAAC;QAElD,MAAM,SAAS,GAAG,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE9E,OAAO;YACL,QAAQ,EAAE,CAAC,GAAG,eAAe,EAAE,GAAG,kBAAkB,CAAC,QAAQ,CAAC;YAC9D,OAAO,EAAE,CAAC,GAAG,cAAc,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC;YAC1D,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,+EAA+E;QAC/E,mDAAmD;QACnD,OAAO;YACL,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,CAAC,0CAA2C,GAAa,CAAC,OAAO,EAAE,CAAC;SAC7E,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,134 @@
1
+ #!/usr/bin/env node
2
+ import { Container, Markdown, Spacer, Text, TUI } from "@mariozechner/pi-tui";
3
+ import { createAppTerminal } from "./terminal.js";
4
+ import { DynamicBorder } from "./ui/components/dynamic_border.js";
5
+ import { OneLineSegmentsComponent } from "./ui/components/one_line_segments.js";
6
+ import { CustomEditor } from "./ui/custom_editor.js";
7
+ import { theme } from "./ui/theme.js";
8
+ const palette = theme.palette;
9
+ // Create root container
10
+ const root = new Container();
11
+ // Title with accent color and border
12
+ root.addChild(new DynamicBorder(palette.accent));
13
+ root.addChild(new Text(palette.accent("═══════════════════════════════════════════════════════"), 0, 0));
14
+ root.addChild(new Text(palette.accent(" DEBUG UI - UI Component Showcase "), 0, 0));
15
+ root.addChild(new Text(palette.accent("═══════════════════════════════════════════════════════"), 0, 0));
16
+ root.addChild(new DynamicBorder(palette.accent));
17
+ root.addChild(new Spacer(1));
18
+ // Primary Colors Section
19
+ root.addChild(new Text(palette.accent("▸ PRIMARY COLORS"), 1, 0));
20
+ root.addChild(new Spacer(1));
21
+ root.addChild(new Text(palette.accent("Accent:"), 2, 0));
22
+ root.addChild(new Text(palette.muted("Muted:"), 2, 0));
23
+ root.addChild(new Text(palette.dim("Dim:"), 2, 0));
24
+ root.addChild(new Text(palette.link("Link:"), 2, 0));
25
+ root.addChild(new Text(palette.codeInline("Code Inline:"), 2, 0));
26
+ root.addChild(new Text(palette.codeBlock("Code Block:"), 2, 0));
27
+ root.addChild(new Spacer(1));
28
+ // Semantic Colors Section
29
+ root.addChild(new Text(palette.accent("▸ SEMANTIC COLORS"), 1, 0));
30
+ root.addChild(new Spacer(1));
31
+ root.addChild(new Text(palette.warn("⚠ Warning"), 2, 0));
32
+ root.addChild(new Text(palette.error("✗ Error"), 2, 0));
33
+ root.addChild(new Text(palette.bashRunning("$ Bash Running"), 2, 0));
34
+ root.addChild(new Text(palette.bashRan("$ Bash Ran"), 2, 0));
35
+ root.addChild(new Text(palette.bashOutput("Bash Output"), 2, 0));
36
+ root.addChild(new Text(palette.toolFileRan("Tool File Ran"), 2, 0));
37
+ root.addChild(new Spacer(1));
38
+ // Diff Colors Section
39
+ root.addChild(new Text(palette.accent("▸ DIFF COLORS"), 1, 0));
40
+ root.addChild(new Spacer(1));
41
+ root.addChild(new Text(palette.diffAdded("+ Added line"), 2, 0));
42
+ root.addChild(new Text(palette.diffRemoved("- Removed line"), 2, 0));
43
+ root.addChild(new Spacer(1));
44
+ // Notice Colors Section
45
+ root.addChild(new Text(palette.accent("▸ NOTICE COLORS"), 1, 0));
46
+ root.addChild(new Spacer(1));
47
+ root.addChild(new Text(palette.noticeSuccess("✓ Notice Success"), 2, 0));
48
+ root.addChild(new Text(palette.noticeWarn("⚠ Notice Warning"), 2, 0));
49
+ root.addChild(new Text(palette.noticeError("✗ Notice Error"), 2, 0));
50
+ root.addChild(new Spacer(1));
51
+ // Risk Level Section
52
+ root.addChild(new Text(palette.accent("▸ RISK LEVELS"), 1, 0));
53
+ root.addChild(new Spacer(1));
54
+ root.addChild(new Text(palette.riskNone("◇ None"), 2, 0));
55
+ root.addChild(new Text(palette.riskReadOnly("▪ Read-Only"), 2, 0));
56
+ root.addChild(new Text(palette.riskReadWrite("▲ Read-Write"), 2, 0));
57
+ root.addChild(new Spacer(1));
58
+ // Markdown Section
59
+ root.addChild(new DynamicBorder(palette.muted));
60
+ root.addChild(new Text(palette.accent("▸ MARKDOWN RENDERING"), 1, 0));
61
+ root.addChild(new Spacer(1));
62
+ const markdownText = `
63
+ # Heading 1
64
+ ## Heading 2
65
+
66
+ This is **bold text**, *italic text*, and ~~strikethrough~~.
67
+
68
+ \`code inline\` example.
69
+
70
+ > A quote with styling
71
+ > Multiple lines supported
72
+
73
+ - List item 1
74
+ - List item 2
75
+ - List item 3
76
+
77
+ [Link example](https://example.com)
78
+ `;
79
+ root.addChild(new Markdown(markdownText, 1, 0, theme.markdownTheme));
80
+ root.addChild(new Spacer(1));
81
+ // User Message Style Section
82
+ root.addChild(new DynamicBorder(palette.muted));
83
+ root.addChild(new Text(palette.accent("▸ USER MESSAGE STYLE"), 1, 0));
84
+ root.addChild(new Spacer(1));
85
+ const userContainer = new Container();
86
+ userContainer.addChild(new Text(palette.userText(" User: This is how user messages appear in the chat "), 1, 1, palette.userBg));
87
+ root.addChild(userContainer);
88
+ root.addChild(new Spacer(1));
89
+ // One Line Segments Component Section
90
+ root.addChild(new DynamicBorder(palette.link));
91
+ root.addChild(new Text(palette.accent("▸ ONE LINE SEGMENTS"), 1, 0));
92
+ root.addChild(new Spacer(1));
93
+ // Create a OneLineSegmentsComponent with multiple styled segments
94
+ const segmentsComponent = new OneLineSegmentsComponent([
95
+ { text: "Status", style: palette.accent },
96
+ { text: "Running", style: palette.bashRunning },
97
+ { text: "Tools", style: palette.muted },
98
+ { text: "3/5", style: palette.link },
99
+ { text: "Errors", style: palette.error },
100
+ ]);
101
+ root.addChild(segmentsComponent);
102
+ root.addChild(new Spacer(1));
103
+ // Border Examples Section
104
+ root.addChild(new DynamicBorder(palette.codeInline));
105
+ root.addChild(new Text(palette.accent("▸ BORDER EXAMPLES"), 1, 0));
106
+ root.addChild(new Spacer(1));
107
+ root.addChild(new Text(palette.muted("Green border above"), 1, 0));
108
+ root.addChild(new DynamicBorder(palette.warn));
109
+ root.addChild(new Spacer(1));
110
+ root.addChild(new DynamicBorder(palette.error));
111
+ root.addChild(new Text(palette.muted("Red border above"), 1, 0));
112
+ root.addChild(new DynamicBorder(palette.codeBlock));
113
+ root.addChild(new Spacer(2));
114
+ // Footer
115
+ root.addChild(new DynamicBorder(palette.accent));
116
+ root.addChild(new Text(palette.muted("Press Ctrl+C to exit"), 1, 0));
117
+ root.addChild(new DynamicBorder(palette.accent));
118
+ // Initialize TUI and render
119
+ const terminal = createAppTerminal(true);
120
+ const tui = new TUI(terminal);
121
+ // Add root container and children to TUI
122
+ tui.addChild(root);
123
+ tui.addChild(new Spacer(1));
124
+ // Add editor for input handling (Ctrl+C support)
125
+ const editor = new CustomEditor(theme.editorTheme);
126
+ editor.onCtrlC = () => {
127
+ tui.stop();
128
+ process.exit(0);
129
+ };
130
+ tui.addChild(editor);
131
+ tui.setFocus(editor);
132
+ // Start the TUI
133
+ tui.start();
134
+ //# sourceMappingURL=debug-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-ui.js","sourceRoot":"","sources":["../src/debug-ui.ts"],"names":[],"mappings":"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"}
package/dist/main.js ADDED
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env node
2
+ import { ChatApp } from "./app.js";
3
+ import { loadBashCommands } from "./bash_commands.js";
4
+ import { CliError, parseCliArgs, printHelp } from "./cli.js";
5
+ import { loadConfig } from "./config.js";
6
+ import { loadAllContent } from "./content_loader.js";
7
+ // Load configuration from file
8
+ const config = loadConfig();
9
+ const bashCommands = loadBashCommands(process.cwd()).commands;
10
+ async function readPipedStdin() {
11
+ if (process.stdin.isTTY)
12
+ return undefined;
13
+ process.stdin.setEncoding("utf8");
14
+ let data = "";
15
+ for await (const chunk of process.stdin) {
16
+ data += chunk;
17
+ }
18
+ return data;
19
+ }
20
+ // Load built-in and user content
21
+ let personas;
22
+ let prompts;
23
+ try {
24
+ const content = await loadAllContent();
25
+ personas = content.personas;
26
+ prompts = content.prompts;
27
+ }
28
+ catch (err) {
29
+ // Safeguard: loadAllContent should not throw, but wrap to ensure tau --help works
30
+ // eslint-disable-next-line no-console
31
+ console.error(`warning: failed to load user content: ${err.message}`);
32
+ // eslint-disable-next-line no-console
33
+ console.error("using built-in personas and prompts only.");
34
+ // Import fallback built-ins
35
+ const { personas: builtinPersonas } = await import("./personas.js");
36
+ const { prompts: builtinPrompts } = await import("./prompts.js");
37
+ personas = builtinPersonas;
38
+ prompts = builtinPrompts;
39
+ }
40
+ let cli;
41
+ try {
42
+ cli = parseCliArgs(process.argv.slice(2), personas);
43
+ }
44
+ catch (err) {
45
+ if (err instanceof CliError) {
46
+ // eslint-disable-next-line no-console
47
+ console.error(err.message);
48
+ // eslint-disable-next-line no-console
49
+ console.error("");
50
+ printHelp(personas);
51
+ process.exit(1);
52
+ }
53
+ throw err;
54
+ }
55
+ if (cli.help) {
56
+ printHelp(personas);
57
+ process.exit(0);
58
+ }
59
+ const initialPersona = cli.personaId
60
+ ? (personas.find((p) => p.id === cli.personaId) ?? personas[0])
61
+ : personas[0];
62
+ if (cli.reasoningOverride !== undefined) {
63
+ initialPersona.settings.reasoning = cli.reasoningOverride;
64
+ }
65
+ const initialUserMessage = await readPipedStdin();
66
+ const app = new ChatApp({
67
+ personas,
68
+ prompts,
69
+ bashCommands,
70
+ initialPersonaId: cli.personaId,
71
+ initialUserMessage,
72
+ initialRiskLevel: cli.riskLevel,
73
+ withContext: cli.withContext,
74
+ config,
75
+ });
76
+ try {
77
+ await app.start();
78
+ }
79
+ catch (err) {
80
+ app.stop();
81
+ // eslint-disable-next-line no-console
82
+ console.error(err);
83
+ process.exit(1);
84
+ }
85
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}