noumen 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +767 -51
  2. package/dist/a2a/index.d.ts +148 -0
  3. package/dist/a2a/index.js +579 -0
  4. package/dist/a2a/index.js.map +1 -0
  5. package/dist/acp/index.d.ts +129 -0
  6. package/dist/acp/index.js +498 -0
  7. package/dist/acp/index.js.map +1 -0
  8. package/dist/agent-BrkbZyOT.d.ts +1028 -0
  9. package/dist/cache-DVqaCX8v.d.ts +38 -0
  10. package/dist/chunk-2ZTGQLYK.js +356 -0
  11. package/dist/chunk-2ZTGQLYK.js.map +1 -0
  12. package/dist/chunk-42PHHZUA.js +132 -0
  13. package/dist/chunk-42PHHZUA.js.map +1 -0
  14. package/dist/chunk-4SQA2UCV.js +26 -0
  15. package/dist/chunk-4SQA2UCV.js.map +1 -0
  16. package/dist/chunk-5GEX6ZSB.js +179 -0
  17. package/dist/chunk-5GEX6ZSB.js.map +1 -0
  18. package/dist/chunk-7ZMN7XJE.js +94 -0
  19. package/dist/chunk-7ZMN7XJE.js.map +1 -0
  20. package/dist/chunk-AMYIJSAZ.js +57 -0
  21. package/dist/chunk-AMYIJSAZ.js.map +1 -0
  22. package/dist/chunk-BGG2E6JD.js +10 -0
  23. package/dist/chunk-BGG2E6JD.js.map +1 -0
  24. package/dist/chunk-BZSFUEWM.js +43 -0
  25. package/dist/chunk-BZSFUEWM.js.map +1 -0
  26. package/dist/chunk-CPFHEPW4.js +139 -0
  27. package/dist/chunk-CPFHEPW4.js.map +1 -0
  28. package/dist/chunk-D43BWEZA.js +346 -0
  29. package/dist/chunk-D43BWEZA.js.map +1 -0
  30. package/dist/chunk-DGUM43GV.js +11 -0
  31. package/dist/chunk-DGUM43GV.js.map +1 -0
  32. package/dist/chunk-JACGEMTF.js +43 -0
  33. package/dist/chunk-JACGEMTF.js.map +1 -0
  34. package/dist/chunk-JX7CLUCV.js +21 -0
  35. package/dist/chunk-JX7CLUCV.js.map +1 -0
  36. package/dist/chunk-KXDB56YW.js +39 -0
  37. package/dist/chunk-KXDB56YW.js.map +1 -0
  38. package/dist/chunk-KY6ZPWHO.js +112 -0
  39. package/dist/chunk-KY6ZPWHO.js.map +1 -0
  40. package/dist/chunk-NBDFQYUZ.js +7992 -0
  41. package/dist/chunk-NBDFQYUZ.js.map +1 -0
  42. package/dist/chunk-OGXNFXFA.js +196 -0
  43. package/dist/chunk-OGXNFXFA.js.map +1 -0
  44. package/dist/chunk-QTJ7VTJY.js +1994 -0
  45. package/dist/chunk-QTJ7VTJY.js.map +1 -0
  46. package/dist/chunk-UVSSQBDY.js +192 -0
  47. package/dist/chunk-UVSSQBDY.js.map +1 -0
  48. package/dist/chunk-Y45R3PQL.js +684 -0
  49. package/dist/chunk-Y45R3PQL.js.map +1 -0
  50. package/dist/cli/index.d.ts +1 -0
  51. package/dist/cli/index.js +868 -0
  52. package/dist/cli/index.js.map +1 -0
  53. package/dist/client/index.d.ts +64 -0
  54. package/dist/client/index.js +409 -0
  55. package/dist/client/index.js.map +1 -0
  56. package/dist/client-CRRO2376.js +10 -0
  57. package/dist/client-CRRO2376.js.map +1 -0
  58. package/dist/headless-Q7XHHZIW.js +143 -0
  59. package/dist/headless-Q7XHHZIW.js.map +1 -0
  60. package/dist/history-snip-64GYP4ZL.js +12 -0
  61. package/dist/history-snip-64GYP4ZL.js.map +1 -0
  62. package/dist/index.d.ts +1305 -418
  63. package/dist/index.js +384 -1757
  64. package/dist/index.js.map +1 -1
  65. package/dist/jsonrpc/index.d.ts +54 -0
  66. package/dist/jsonrpc/index.js +34 -0
  67. package/dist/jsonrpc/index.js.map +1 -0
  68. package/dist/lsp/index.d.ts +36 -0
  69. package/dist/lsp/index.js +16 -0
  70. package/dist/lsp/index.js.map +1 -0
  71. package/dist/lsp-PS3BWIHC.js +8 -0
  72. package/dist/lsp-PS3BWIHC.js.map +1 -0
  73. package/dist/manager-DLXK63XC.js +8 -0
  74. package/dist/manager-DLXK63XC.js.map +1 -0
  75. package/dist/mcp/index.d.ts +111 -0
  76. package/dist/mcp/index.js +104 -0
  77. package/dist/mcp/index.js.map +1 -0
  78. package/dist/mcp-auth-AEI2R4ZC.js +9 -0
  79. package/dist/mcp-auth-AEI2R4ZC.js.map +1 -0
  80. package/dist/ollama-YNXAYP3R.js +18 -0
  81. package/dist/ollama-YNXAYP3R.js.map +1 -0
  82. package/dist/provider-factory-34MSWJZ3.js +20 -0
  83. package/dist/provider-factory-34MSWJZ3.js.map +1 -0
  84. package/dist/providers/anthropic.d.ts +19 -0
  85. package/dist/providers/anthropic.js +33 -0
  86. package/dist/providers/anthropic.js.map +1 -0
  87. package/dist/providers/bedrock.d.ts +39 -0
  88. package/dist/providers/bedrock.js +54 -0
  89. package/dist/providers/bedrock.js.map +1 -0
  90. package/dist/providers/gemini.d.ts +16 -0
  91. package/dist/providers/gemini.js +224 -0
  92. package/dist/providers/gemini.js.map +1 -0
  93. package/dist/providers/openai.d.ts +18 -0
  94. package/dist/providers/openai.js +8 -0
  95. package/dist/providers/openai.js.map +1 -0
  96. package/dist/providers/openrouter.d.ts +16 -0
  97. package/dist/providers/openrouter.js +23 -0
  98. package/dist/providers/openrouter.js.map +1 -0
  99. package/dist/providers/vertex.d.ts +40 -0
  100. package/dist/providers/vertex.js +64 -0
  101. package/dist/providers/vertex.js.map +1 -0
  102. package/dist/render-GRN4ZSSW.js +14 -0
  103. package/dist/render-GRN4ZSSW.js.map +1 -0
  104. package/dist/resolve-XM52G7YE.js +14 -0
  105. package/dist/resolve-XM52G7YE.js.map +1 -0
  106. package/dist/server/index.d.ts +128 -0
  107. package/dist/server/index.js +626 -0
  108. package/dist/server/index.js.map +1 -0
  109. package/dist/server-Cg1yWGaV.d.ts +96 -0
  110. package/dist/spinner-OJNR6NFO.js +8 -0
  111. package/dist/spinner-OJNR6NFO.js.map +1 -0
  112. package/dist/types-2kTLUCnD.d.ts +107 -0
  113. package/dist/types-3c88cRKH.d.ts +547 -0
  114. package/dist/types-CwKKucOF.d.ts +620 -0
  115. package/dist/types-DwdzmXfs.d.ts +107 -0
  116. package/dist/types-NIyVwQ4h.d.ts +109 -0
  117. package/dist/types-QwfylltH.d.ts +71 -0
  118. package/package.json +134 -6
@@ -0,0 +1,196 @@
1
+ // src/cli/render.ts
2
+ import chalk from "chalk";
3
+ import "readline/promises";
4
+ function renderEvent(event, config, state) {
5
+ if (config.json) {
6
+ renderJsonl(event);
7
+ return;
8
+ }
9
+ if (config.quiet) {
10
+ if (event.type === "text_delta") {
11
+ state.accumulatedText += event.text;
12
+ }
13
+ return;
14
+ }
15
+ renderPretty(event, config, state);
16
+ }
17
+ var VISIBLE_EVENTS = /* @__PURE__ */ new Set([
18
+ "text_delta",
19
+ "tool_use_start",
20
+ "tool_result",
21
+ "permission_request",
22
+ "permission_denied",
23
+ "error",
24
+ "compact_start",
25
+ "retry_attempt",
26
+ "retry_exhausted",
27
+ "subagent_start",
28
+ "subagent_end",
29
+ "session_resumed",
30
+ "max_turns_reached"
31
+ ]);
32
+ function isVisibleEvent(event, config) {
33
+ if (config.json) return true;
34
+ if (event.type === "thinking_delta" && config.verbose) return true;
35
+ if (event.type === "cost_update" && config.verbose) return true;
36
+ if (event.type === "permission_granted" && config.verbose) return true;
37
+ return VISIBLE_EVENTS.has(event.type);
38
+ }
39
+ function createRenderState() {
40
+ return {
41
+ accumulatedText: "",
42
+ activeTools: /* @__PURE__ */ new Map(),
43
+ showedActivity: false
44
+ };
45
+ }
46
+ function renderJsonl(event) {
47
+ const serializable = { ...event };
48
+ if ("error" in event && event.type === "error") {
49
+ serializable.error = {
50
+ message: event.error.message,
51
+ name: event.error.name
52
+ };
53
+ }
54
+ process.stdout.write(JSON.stringify(serializable) + "\n");
55
+ }
56
+ function renderPretty(event, config, state) {
57
+ switch (event.type) {
58
+ case "text_delta":
59
+ process.stdout.write(event.text);
60
+ state.accumulatedText += event.text;
61
+ break;
62
+ case "thinking_delta":
63
+ if (config.verbose) {
64
+ process.stderr.write(chalk.dim.italic(event.text));
65
+ }
66
+ break;
67
+ case "tool_use_start":
68
+ state.activeTools.set(event.toolUseId, event.toolName);
69
+ process.stderr.write(chalk.dim(` [${event.toolName}] `));
70
+ if (config.verbose) {
71
+ process.stderr.write(chalk.dim("running..."));
72
+ }
73
+ break;
74
+ case "tool_result": {
75
+ state.activeTools.delete(event.toolUseId);
76
+ if (config.verbose) {
77
+ const preview = truncateResult(
78
+ typeof event.result === "string" ? event.result : JSON.stringify(event.result),
79
+ 120
80
+ );
81
+ process.stderr.write(chalk.dim(preview) + "\n");
82
+ } else {
83
+ process.stderr.write(chalk.dim("done\n"));
84
+ }
85
+ break;
86
+ }
87
+ case "permission_request":
88
+ process.stderr.write(
89
+ "\n" + chalk.yellow(" Permission required: ") + chalk.white(event.toolName) + "\n" + chalk.dim(" " + event.message) + "\n"
90
+ );
91
+ break;
92
+ case "permission_granted":
93
+ if (config.verbose) {
94
+ process.stderr.write(chalk.green(" \u2713 Granted\n"));
95
+ }
96
+ break;
97
+ case "permission_denied":
98
+ process.stderr.write(
99
+ chalk.red(" \u2717 Denied: ") + chalk.dim(event.message) + "\n"
100
+ );
101
+ break;
102
+ case "error":
103
+ process.stderr.write(
104
+ chalk.red("\n Error: ") + event.error.message + "\n"
105
+ );
106
+ break;
107
+ case "compact_start":
108
+ process.stderr.write(chalk.dim(" Compacting conversation..."));
109
+ break;
110
+ case "compact_complete":
111
+ process.stderr.write(chalk.dim(" done\n"));
112
+ break;
113
+ case "cost_update":
114
+ if (config.verbose) {
115
+ const s = event.summary;
116
+ process.stderr.write(
117
+ chalk.dim(
118
+ `
119
+ Cost: $${s.totalCostUSD.toFixed(4)} (${s.totalInputTokens} in / ${s.totalOutputTokens} out)
120
+ `
121
+ )
122
+ );
123
+ }
124
+ break;
125
+ case "retry_attempt":
126
+ process.stderr.write(
127
+ chalk.yellow(
128
+ `
129
+ Retrying (${event.attempt}/${event.maxRetries}) in ${event.delayMs}ms...
130
+ `
131
+ )
132
+ );
133
+ break;
134
+ case "retry_exhausted":
135
+ process.stderr.write(
136
+ chalk.red(`
137
+ All ${event.attempts} retry attempts failed.
138
+ `)
139
+ );
140
+ break;
141
+ case "subagent_start": {
142
+ const preview = event.prompt.slice(0, 60);
143
+ process.stderr.write(chalk.dim(` [subagent] ${preview}...
144
+ `));
145
+ break;
146
+ }
147
+ case "subagent_end":
148
+ process.stderr.write(chalk.dim(" [subagent] complete\n"));
149
+ break;
150
+ case "session_resumed":
151
+ process.stderr.write(
152
+ chalk.dim(
153
+ `
154
+ Resumed session ${event.sessionId.slice(0, 8)}... (${event.messageCount} messages)
155
+ `
156
+ )
157
+ );
158
+ break;
159
+ case "max_turns_reached":
160
+ process.stderr.write(
161
+ chalk.yellow(
162
+ `
163
+ Max turns reached (${event.turnCount}/${event.maxTurns})
164
+ `
165
+ )
166
+ );
167
+ break;
168
+ case "turn_complete":
169
+ if (state.accumulatedText && !state.accumulatedText.endsWith("\n")) {
170
+ process.stdout.write("\n");
171
+ }
172
+ state.accumulatedText = "";
173
+ break;
174
+ default:
175
+ break;
176
+ }
177
+ }
178
+ async function promptPermission(rl, toolName, message) {
179
+ const answer = await rl.question(
180
+ chalk.yellow(` Allow ${toolName}? `) + chalk.dim("[Y/n] ")
181
+ );
182
+ const normalized = answer.trim().toLowerCase();
183
+ return normalized === "" || normalized === "y" || normalized === "yes";
184
+ }
185
+ function truncateResult(text, max) {
186
+ if (text.length <= max) return text;
187
+ return text.slice(0, max) + "...";
188
+ }
189
+
190
+ export {
191
+ renderEvent,
192
+ isVisibleEvent,
193
+ createRenderState,
194
+ promptPermission
195
+ };
196
+ //# sourceMappingURL=chunk-OGXNFXFA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/render.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport * as readline from \"node:readline/promises\";\nimport type { StreamEvent } from \"../session/types.js\";\nimport type { MergedConfig } from \"./config.js\";\n\n/**\n * Render a single StreamEvent to the terminal. Handles three modes:\n * - JSONL (--json): one JSON line per event to stdout\n * - Quiet (--quiet): accumulates text, caller prints at end\n * - Pretty (default): colored streaming output\n */\nexport function renderEvent(\n event: StreamEvent,\n config: MergedConfig,\n state: RenderState,\n): void {\n if (config.json) {\n renderJsonl(event);\n return;\n }\n\n if (config.quiet) {\n if (event.type === \"text_delta\") {\n state.accumulatedText += event.text;\n }\n return;\n }\n\n renderPretty(event, config, state);\n}\n\n/** Event types that produce visible terminal output in pretty mode. */\nconst VISIBLE_EVENTS = new Set([\n \"text_delta\",\n \"tool_use_start\",\n \"tool_result\",\n \"permission_request\",\n \"permission_denied\",\n \"error\",\n \"compact_start\",\n \"retry_attempt\",\n \"retry_exhausted\",\n \"subagent_start\",\n \"subagent_end\",\n \"session_resumed\",\n \"max_turns_reached\",\n]);\n\nexport function isVisibleEvent(event: StreamEvent, config: MergedConfig): boolean {\n if (config.json) return true;\n if (event.type === \"thinking_delta\" && config.verbose) return true;\n if (event.type === \"cost_update\" && config.verbose) return true;\n if (event.type === \"permission_granted\" && config.verbose) return true;\n return VISIBLE_EVENTS.has(event.type);\n}\n\nexport interface RenderState {\n accumulatedText: string;\n activeTools: Map<string, string>;\n showedActivity: boolean;\n}\n\nexport function createRenderState(): RenderState {\n return {\n accumulatedText: \"\",\n activeTools: new Map(),\n showedActivity: false,\n };\n}\n\nfunction renderJsonl(event: StreamEvent): void {\n const serializable = { ...event } as Record<string, unknown>;\n if (\"error\" in event && event.type === \"error\") {\n serializable.error = {\n message: event.error.message,\n name: event.error.name,\n };\n }\n process.stdout.write(JSON.stringify(serializable) + \"\\n\");\n}\n\nfunction renderPretty(\n event: StreamEvent,\n config: MergedConfig,\n state: RenderState,\n): void {\n switch (event.type) {\n case \"text_delta\":\n process.stdout.write(event.text);\n state.accumulatedText += event.text;\n break;\n\n case \"thinking_delta\":\n if (config.verbose) {\n process.stderr.write(chalk.dim.italic(event.text));\n }\n break;\n\n case \"tool_use_start\":\n state.activeTools.set(event.toolUseId, event.toolName);\n process.stderr.write(chalk.dim(` [${event.toolName}] `));\n if (config.verbose) {\n process.stderr.write(chalk.dim(\"running...\"));\n }\n break;\n\n case \"tool_result\": {\n state.activeTools.delete(event.toolUseId);\n if (config.verbose) {\n const preview = truncateResult(\n typeof event.result === \"string\"\n ? event.result\n : JSON.stringify(event.result),\n 120,\n );\n process.stderr.write(chalk.dim(preview) + \"\\n\");\n } else {\n process.stderr.write(chalk.dim(\"done\\n\"));\n }\n break;\n }\n\n case \"permission_request\":\n process.stderr.write(\n \"\\n\" +\n chalk.yellow(\" Permission required: \") +\n chalk.white(event.toolName) +\n \"\\n\" +\n chalk.dim(\" \" + event.message) +\n \"\\n\",\n );\n break;\n\n case \"permission_granted\":\n if (config.verbose) {\n process.stderr.write(chalk.green(\" ✓ Granted\\n\"));\n }\n break;\n\n case \"permission_denied\":\n process.stderr.write(\n chalk.red(\" ✗ Denied: \") + chalk.dim(event.message) + \"\\n\",\n );\n break;\n\n case \"error\":\n process.stderr.write(\n chalk.red(\"\\n Error: \") + event.error.message + \"\\n\",\n );\n break;\n\n case \"compact_start\":\n process.stderr.write(chalk.dim(\" Compacting conversation...\"));\n break;\n\n case \"compact_complete\":\n process.stderr.write(chalk.dim(\" done\\n\"));\n break;\n\n case \"cost_update\":\n if (config.verbose) {\n const s = event.summary;\n process.stderr.write(\n chalk.dim(\n `\\n Cost: $${s.totalCostUSD.toFixed(4)} ` +\n `(${s.totalInputTokens} in / ${s.totalOutputTokens} out)\\n`,\n ),\n );\n }\n break;\n\n case \"retry_attempt\":\n process.stderr.write(\n chalk.yellow(\n `\\n Retrying (${event.attempt}/${event.maxRetries}) in ${event.delayMs}ms...\\n`,\n ),\n );\n break;\n\n case \"retry_exhausted\":\n process.stderr.write(\n chalk.red(`\\n All ${event.attempts} retry attempts failed.\\n`),\n );\n break;\n\n case \"subagent_start\": {\n const preview = event.prompt.slice(0, 60);\n process.stderr.write(chalk.dim(` [subagent] ${preview}...\\n`));\n break;\n }\n\n case \"subagent_end\":\n process.stderr.write(chalk.dim(\" [subagent] complete\\n\"));\n break;\n\n case \"session_resumed\":\n process.stderr.write(\n chalk.dim(\n `\\n Resumed session ${event.sessionId.slice(0, 8)}... (${event.messageCount} messages)\\n`,\n ),\n );\n break;\n\n case \"max_turns_reached\":\n process.stderr.write(\n chalk.yellow(\n `\\n Max turns reached (${event.turnCount}/${event.maxTurns})\\n`,\n ),\n );\n break;\n\n case \"turn_complete\":\n if (state.accumulatedText && !state.accumulatedText.endsWith(\"\\n\")) {\n process.stdout.write(\"\\n\");\n }\n state.accumulatedText = \"\";\n break;\n\n default:\n break;\n }\n}\n\n/**\n * Create a permission handler that prompts Y/n in the terminal.\n * Writes to stderr so stdout stays clean for JSONL piping.\n */\nexport async function promptPermission(\n rl: readline.Interface,\n toolName: string,\n message: string,\n): Promise<boolean> {\n const answer = await rl.question(\n chalk.yellow(` Allow ${toolName}? `) + chalk.dim(\"[Y/n] \"),\n );\n const normalized = answer.trim().toLowerCase();\n return normalized === \"\" || normalized === \"y\" || normalized === \"yes\";\n}\n\nfunction truncateResult(text: string, max: number): string {\n if (text.length <= max) return text;\n return text.slice(0, max) + \"...\";\n}\n"],"mappings":"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","names":[]}