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.
- package/README.md +767 -51
- package/dist/a2a/index.d.ts +148 -0
- package/dist/a2a/index.js +579 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/acp/index.d.ts +129 -0
- package/dist/acp/index.js +498 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/agent-BrkbZyOT.d.ts +1028 -0
- package/dist/cache-DVqaCX8v.d.ts +38 -0
- package/dist/chunk-2ZTGQLYK.js +356 -0
- package/dist/chunk-2ZTGQLYK.js.map +1 -0
- package/dist/chunk-42PHHZUA.js +132 -0
- package/dist/chunk-42PHHZUA.js.map +1 -0
- package/dist/chunk-4SQA2UCV.js +26 -0
- package/dist/chunk-4SQA2UCV.js.map +1 -0
- package/dist/chunk-5GEX6ZSB.js +179 -0
- package/dist/chunk-5GEX6ZSB.js.map +1 -0
- package/dist/chunk-7ZMN7XJE.js +94 -0
- package/dist/chunk-7ZMN7XJE.js.map +1 -0
- package/dist/chunk-AMYIJSAZ.js +57 -0
- package/dist/chunk-AMYIJSAZ.js.map +1 -0
- package/dist/chunk-BGG2E6JD.js +10 -0
- package/dist/chunk-BGG2E6JD.js.map +1 -0
- package/dist/chunk-BZSFUEWM.js +43 -0
- package/dist/chunk-BZSFUEWM.js.map +1 -0
- package/dist/chunk-CPFHEPW4.js +139 -0
- package/dist/chunk-CPFHEPW4.js.map +1 -0
- package/dist/chunk-D43BWEZA.js +346 -0
- package/dist/chunk-D43BWEZA.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +11 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/chunk-JACGEMTF.js +43 -0
- package/dist/chunk-JACGEMTF.js.map +1 -0
- package/dist/chunk-JX7CLUCV.js +21 -0
- package/dist/chunk-JX7CLUCV.js.map +1 -0
- package/dist/chunk-KXDB56YW.js +39 -0
- package/dist/chunk-KXDB56YW.js.map +1 -0
- package/dist/chunk-KY6ZPWHO.js +112 -0
- package/dist/chunk-KY6ZPWHO.js.map +1 -0
- package/dist/chunk-NBDFQYUZ.js +7992 -0
- package/dist/chunk-NBDFQYUZ.js.map +1 -0
- package/dist/chunk-OGXNFXFA.js +196 -0
- package/dist/chunk-OGXNFXFA.js.map +1 -0
- package/dist/chunk-QTJ7VTJY.js +1994 -0
- package/dist/chunk-QTJ7VTJY.js.map +1 -0
- package/dist/chunk-UVSSQBDY.js +192 -0
- package/dist/chunk-UVSSQBDY.js.map +1 -0
- package/dist/chunk-Y45R3PQL.js +684 -0
- package/dist/chunk-Y45R3PQL.js.map +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +868 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client/index.d.ts +64 -0
- package/dist/client/index.js +409 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client-CRRO2376.js +10 -0
- package/dist/client-CRRO2376.js.map +1 -0
- package/dist/headless-Q7XHHZIW.js +143 -0
- package/dist/headless-Q7XHHZIW.js.map +1 -0
- package/dist/history-snip-64GYP4ZL.js +12 -0
- package/dist/history-snip-64GYP4ZL.js.map +1 -0
- package/dist/index.d.ts +1305 -418
- package/dist/index.js +384 -1757
- package/dist/index.js.map +1 -1
- package/dist/jsonrpc/index.d.ts +54 -0
- package/dist/jsonrpc/index.js +34 -0
- package/dist/jsonrpc/index.js.map +1 -0
- package/dist/lsp/index.d.ts +36 -0
- package/dist/lsp/index.js +16 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp-PS3BWIHC.js +8 -0
- package/dist/lsp-PS3BWIHC.js.map +1 -0
- package/dist/manager-DLXK63XC.js +8 -0
- package/dist/manager-DLXK63XC.js.map +1 -0
- package/dist/mcp/index.d.ts +111 -0
- package/dist/mcp/index.js +104 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp-auth-AEI2R4ZC.js +9 -0
- package/dist/mcp-auth-AEI2R4ZC.js.map +1 -0
- package/dist/ollama-YNXAYP3R.js +18 -0
- package/dist/ollama-YNXAYP3R.js.map +1 -0
- package/dist/provider-factory-34MSWJZ3.js +20 -0
- package/dist/provider-factory-34MSWJZ3.js.map +1 -0
- package/dist/providers/anthropic.d.ts +19 -0
- package/dist/providers/anthropic.js +33 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/bedrock.d.ts +39 -0
- package/dist/providers/bedrock.js +54 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/gemini.d.ts +16 -0
- package/dist/providers/gemini.js +224 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/openai.d.ts +18 -0
- package/dist/providers/openai.js +8 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openrouter.d.ts +16 -0
- package/dist/providers/openrouter.js +23 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/vertex.d.ts +40 -0
- package/dist/providers/vertex.js +64 -0
- package/dist/providers/vertex.js.map +1 -0
- package/dist/render-GRN4ZSSW.js +14 -0
- package/dist/render-GRN4ZSSW.js.map +1 -0
- package/dist/resolve-XM52G7YE.js +14 -0
- package/dist/resolve-XM52G7YE.js.map +1 -0
- package/dist/server/index.d.ts +128 -0
- package/dist/server/index.js +626 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server-Cg1yWGaV.d.ts +96 -0
- package/dist/spinner-OJNR6NFO.js +8 -0
- package/dist/spinner-OJNR6NFO.js.map +1 -0
- package/dist/types-2kTLUCnD.d.ts +107 -0
- package/dist/types-3c88cRKH.d.ts +547 -0
- package/dist/types-CwKKucOF.d.ts +620 -0
- package/dist/types-DwdzmXfs.d.ts +107 -0
- package/dist/types-NIyVwQ4h.d.ts +109 -0
- package/dist/types-QwfylltH.d.ts +71 -0
- 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":[]}
|