neoctl 0.2.1 → 0.2.3

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 (83) hide show
  1. package/dist/core/query-engine.d.ts +1 -3
  2. package/dist/core/query-engine.js +26 -35
  3. package/dist/core/query-engine.js.map +1 -1
  4. package/dist/core/query.d.ts +1 -1
  5. package/dist/index.d.ts +9 -10
  6. package/dist/index.js +9 -10
  7. package/dist/index.js.map +1 -1
  8. package/dist/model/model-gateway.js +1 -1
  9. package/dist/model/model-gateway.js.map +1 -1
  10. package/dist/repl/index.js +45 -23
  11. package/dist/repl/index.js.map +1 -1
  12. package/dist/repl/markdown-renderer.d.ts +0 -19
  13. package/dist/repl/markdown-renderer.js +3 -58
  14. package/dist/repl/markdown-renderer.js.map +1 -1
  15. package/dist/session/session-export.d.ts +1 -0
  16. package/dist/session/session-export.js +2 -1
  17. package/dist/session/session-export.js.map +1 -1
  18. package/dist/skills/skill-tool.js +1 -1
  19. package/dist/skills/skill-tool.js.map +1 -1
  20. package/dist/tasks/task-store.d.ts +23 -9
  21. package/dist/tasks/task-store.js +37 -2
  22. package/dist/tasks/task-store.js.map +1 -1
  23. package/dist/tasks/task-tools.d.ts +18 -3
  24. package/dist/tasks/task-tools.js +89 -9
  25. package/dist/tasks/task-tools.js.map +1 -1
  26. package/dist/tips.js +5 -5
  27. package/dist/tips.js.map +1 -1
  28. package/dist/tools/builtins/exec-tool.js +2 -2
  29. package/dist/tools/builtins/exec-tool.js.map +1 -1
  30. package/dist/types/messages.d.ts +1 -0
  31. package/dist/types/messages.js.map +1 -1
  32. package/dist/web/index.d.ts +5 -5
  33. package/dist/web/index.js +8 -8
  34. package/dist/web/index.js.map +1 -1
  35. package/package.json +3 -2
  36. package/dist/core/commands.d.ts +0 -66
  37. package/dist/core/commands.js +0 -151
  38. package/dist/core/commands.js.map +0 -1
  39. package/dist/core/runtime.d.ts +0 -59
  40. package/dist/core/runtime.js +0 -161
  41. package/dist/core/runtime.js.map +0 -1
  42. package/dist/repl/render.d.ts +0 -2
  43. package/dist/repl/render.js +0 -45
  44. package/dist/repl/render.js.map +0 -1
  45. package/dist/repl/status-line.d.ts +0 -19
  46. package/dist/repl/status-line.js +0 -160
  47. package/dist/repl/status-line.js.map +0 -1
  48. package/dist/repl/transcript-flush.d.ts +0 -6
  49. package/dist/repl/transcript-flush.js +0 -54
  50. package/dist/repl/transcript-flush.js.map +0 -1
  51. package/dist/repl/transcript-format.d.ts +0 -16
  52. package/dist/repl/transcript-format.js +0 -199
  53. package/dist/repl/transcript-format.js.map +0 -1
  54. package/dist/server/agent-manager.d.ts +0 -56
  55. package/dist/server/agent-manager.js +0 -171
  56. package/dist/server/agent-manager.js.map +0 -1
  57. package/dist/server/connection-manager.d.ts +0 -18
  58. package/dist/server/connection-manager.js +0 -52
  59. package/dist/server/connection-manager.js.map +0 -1
  60. package/dist/server/event-mapper.d.ts +0 -4
  61. package/dist/server/event-mapper.js +0 -31
  62. package/dist/server/event-mapper.js.map +0 -1
  63. package/dist/server/query-runtime.d.ts +0 -29
  64. package/dist/server/query-runtime.js +0 -61
  65. package/dist/server/query-runtime.js.map +0 -1
  66. package/dist/server/rpc-router.d.ts +0 -24
  67. package/dist/server/rpc-router.js +0 -165
  68. package/dist/server/rpc-router.js.map +0 -1
  69. package/dist/server/rpc-types.d.ts +0 -92
  70. package/dist/server/rpc-types.js +0 -2
  71. package/dist/server/rpc-types.js.map +0 -1
  72. package/dist/server/ws-server.d.ts +0 -22
  73. package/dist/server/ws-server.js +0 -84
  74. package/dist/server/ws-server.js.map +0 -1
  75. package/dist/tasks/task-record.d.ts +0 -50
  76. package/dist/tasks/task-record.js +0 -50
  77. package/dist/tasks/task-record.js.map +0 -1
  78. package/dist/tools/builtins/echo-tool.d.ts +0 -4
  79. package/dist/tools/builtins/echo-tool.js +0 -26
  80. package/dist/tools/builtins/echo-tool.js.map +0 -1
  81. package/dist/tools/builtins/vision-tool.d.ts +0 -38
  82. package/dist/tools/builtins/vision-tool.js +0 -351
  83. package/dist/tools/builtins/vision-tool.js.map +0 -1
@@ -1,151 +0,0 @@
1
- export const runtimeCommandDefinitions = [
2
- { name: "/help", usage: "/help", description: "Show commands", arguments: "none" },
3
- { name: "/cost", usage: "/cost", description: "Show total token usage for this session", arguments: "none" },
4
- { name: "/compact", usage: "/compact", description: "Manually compact earlier context", arguments: "none" },
5
- { name: "/pure", usage: "/pure", description: "Sanitize context after WAF/risk blocks without resetting", arguments: "none" },
6
- { name: "/export", usage: "/export <absolute-md-path>", description: "Export the current session transcript as detailed Markdown", arguments: "required" },
7
- { name: "/env", usage: "/env", description: "Open the neoctl configuration directory", arguments: "none" },
8
- { name: "/login", usage: "/login", description: "Configure and save a model provider to the env file", arguments: "none" },
9
- { name: "/model", usage: "/model [model-id] [effort|default|off]", description: "Show or switch model and supported reasoning effort", arguments: "optional" },
10
- { name: "/new", usage: "/new", description: "Start a new session; running current session continues in background", arguments: "none" },
11
- { name: "/log", usage: "/log <dir>", description: "Write model communication logs to an absolute directory", arguments: "required" },
12
- { name: "/log off", usage: "/log off", description: "Disable model communication logs", arguments: "none" },
13
- { name: "/sessions", usage: "/sessions", description: "Browse saved sessions", arguments: "none" },
14
- { name: "/state", usage: "/state", description: "Show query engine state", arguments: "none" },
15
- { name: "/reset", usage: "/reset", description: "Clear current transcript and add a reset marker", arguments: "none" },
16
- { name: "/exit", usage: "/exit", description: "Quit", arguments: "none", aliases: ["/quit"] },
17
- ];
18
- export const commandUsages = runtimeCommandDefinitions.map((command) => command.usage);
19
- export function parseRuntimeCommand(line) {
20
- const parsed = parseSlashCommandLine(line);
21
- if (!parsed.valid)
22
- return { type: "input", text: line };
23
- const { name, argument } = parsed;
24
- if (name === "/help")
25
- return { type: "help" };
26
- if (name === "/cost")
27
- return { type: "cost" };
28
- if (name === "/compact")
29
- return { type: "compact" };
30
- if (name === "/pure")
31
- return { type: "pure" };
32
- if (name === "/export")
33
- return { type: "export", path: argument };
34
- if (name === "/env")
35
- return { type: "env" };
36
- if (name === "/login")
37
- return { type: "login" };
38
- if (name === "/exit" || name === "/quit")
39
- return { type: "exit" };
40
- if (name === "/model")
41
- return parseModelCommand(argument) ?? { type: "input", text: line };
42
- if (name === "/new")
43
- return { type: "new" };
44
- if (name === "/log") {
45
- if (argument.toLowerCase() === "off")
46
- return { type: "log", off: true };
47
- return { type: "log", path: argument };
48
- }
49
- if (name === "/reset")
50
- return { type: "reset" };
51
- if (name === "/sessions")
52
- return { type: "sessions" };
53
- if (name === "/state")
54
- return { type: "state" };
55
- return { type: "input", text: line };
56
- }
57
- export function isValidRuntimeCommandLine(line) {
58
- return parseSlashCommandLine(line).valid && parseRuntimeCommand(line).type !== "input";
59
- }
60
- export function isModelReasoningArgument(value) {
61
- return value === "none" || value === "minimal" || value === "low" || value === "medium" || value === "high" || value === "xhigh" || value === "max" || value === "default" || value === "off";
62
- }
63
- function parseModelCommand(argument) {
64
- const tokens = argument.split(/\s+/).filter(Boolean);
65
- if (tokens.length === 0)
66
- return { type: "model" };
67
- if (tokens.length > 2)
68
- return undefined;
69
- if (tokens.length === 1) {
70
- const [single] = tokens;
71
- return isModelReasoningArgument(single)
72
- ? { type: "model", reasoning: single }
73
- : { type: "model", model: single };
74
- }
75
- const [model, reasoning] = tokens;
76
- if (!isModelReasoningArgument(reasoning))
77
- return undefined;
78
- return { type: "model", model, reasoning };
79
- }
80
- function parseSlashCommandLine(line) {
81
- if (!line.startsWith("/"))
82
- return { valid: false };
83
- const trimmed = line.trimEnd();
84
- const match = /^(\/\S+)(?:\s+(.*))?$/.exec(trimmed);
85
- if (!match)
86
- return { valid: false };
87
- const typedName = match[1].toLowerCase();
88
- const argument = match[2]?.trim() ?? "";
89
- const definition = runtimeCommandDefinitions.find((command) => command.name.toLowerCase() === typedName || command.aliases?.some((alias) => alias.toLowerCase() === typedName));
90
- if (!definition)
91
- return { valid: false };
92
- if (definition.arguments === "none" && argument.length > 0)
93
- return { valid: false };
94
- if (definition.arguments === "required" && argument.length === 0)
95
- return { valid: false };
96
- if (definition.arguments === "log" && argument.length === 0)
97
- return { valid: false };
98
- return { valid: true, name: typedName, argument };
99
- }
100
- const helpUsageWidth = Math.max(...runtimeCommandDefinitions.map((command) => command.usage.length));
101
- export const runtimeHelpText = [
102
- "Commands:",
103
- ...runtimeCommandDefinitions.map((command) => ` ${command.usage.padEnd(helpUsageWidth)} ${command.description}`),
104
- ].join("\n");
105
- export function parseCliRuntimeCommandArgs(argv) {
106
- if (argv.length === 0)
107
- return undefined;
108
- const first = argv[0];
109
- const match = /^--?([^=\s]+)(?:=(.*))?$/.exec(first);
110
- if (!match)
111
- return undefined;
112
- const commandName = `/${match[1].toLowerCase()}`;
113
- const definition = runtimeCommandDefinitions.find((command) => command.name.toLowerCase() === commandName || command.aliases?.some((alias) => alias.toLowerCase() === commandName));
114
- if (!definition)
115
- return undefined;
116
- const inlineArgument = match[2];
117
- const rest = inlineArgument === undefined ? argv.slice(1) : [inlineArgument, ...argv.slice(1)];
118
- if (definition.arguments === "none" && rest.length > 0)
119
- return undefined;
120
- if ((definition.arguments === "required" || definition.arguments === "log") && rest.length === 0)
121
- return undefined;
122
- const line = rest.length === 0 ? definition.name : `${definition.name} ${rest.join(" ")}`;
123
- return { line, definition };
124
- }
125
- export function cliHelpText(binaryName = "neo") {
126
- const cliCommandUsages = runtimeCommandDefinitions.map((command) => command.usage.replace(/^\//, "-"));
127
- const cliUsageWidth = Math.max(...cliCommandUsages.map((usage) => usage.length));
128
- return [
129
- `Usage: ${binaryName} [command]`,
130
- "",
131
- "CLI commands mirror slash commands; use '-' or '--' in place of '/'.",
132
- "",
133
- "Commands:",
134
- ...runtimeCommandDefinitions.map((command) => {
135
- const usage = command.usage.replace(/^\//, "-");
136
- return ` ${usage.padEnd(cliUsageWidth)} ${command.description}`;
137
- }),
138
- "",
139
- "Examples:",
140
- ` ${binaryName} -help`,
141
- ` ${binaryName} -model`,
142
- ` ${binaryName} -model gpt-5.5 high`,
143
- ` ${binaryName} -new`,
144
- ].join("\n");
145
- }
146
- export const replCommandDefinitions = runtimeCommandDefinitions;
147
- export const helpText = runtimeHelpText;
148
- export const parseReplCommand = parseRuntimeCommand;
149
- export const isValidReplCommandLine = isValidRuntimeCommandLine;
150
- export const parseCliReplCommandArgs = parseCliRuntimeCommandArgs;
151
- //# sourceMappingURL=commands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/core/commands.ts"],"names":[],"mappings":"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"}
@@ -1,59 +0,0 @@
1
- import { TaskStore } from "../tasks/task-store.js";
2
- import { type ModelProviderName } from "../model/config.js";
3
- import { CommunicationLogger, LoggingModelGateway } from "../model/communication-logger.js";
4
- import type { ModelUsage, ReasoningConfig } from "../model/model-gateway.js";
5
- import { ToolRegistry } from "../tools/registry.js";
6
- import type { ContextMetrics } from "../types/events.js";
7
- import type { TaskNotificationSource } from "./query.js";
8
- import { QueryEngine } from "./query-engine.js";
9
- export interface CoreRuntime {
10
- engine: QueryEngine;
11
- communicationLogger: CommunicationLogger;
12
- modelGateway: LoggingModelGateway;
13
- usage: SessionUsageTracker;
14
- taskStore: TaskStore;
15
- tools: ToolRegistry;
16
- initialMetrics: ContextMetrics;
17
- defaultReasoning?: ReasoningConfig | null;
18
- envPath: string;
19
- envNotice?: string;
20
- }
21
- export interface CreateCoreRuntimeOptions {
22
- agentId?: string;
23
- queryOrigin?: string;
24
- sessionId?: string;
25
- sessionCwd?: string;
26
- resume?: boolean;
27
- }
28
- export interface CoreServices {
29
- communicationLogger: CommunicationLogger;
30
- modelGateway: LoggingModelGateway;
31
- taskStore: TaskStore;
32
- tools: ToolRegistry;
33
- defaultReasoning?: ReasoningConfig | null;
34
- envPath: string;
35
- envNotice?: string;
36
- }
37
- export interface UsageTotals {
38
- inputTokens: number;
39
- outputTokens: number;
40
- totalTokens: number;
41
- reasoningTokens: number;
42
- cachedTokens: number;
43
- requests: number;
44
- computedTotalTokens: boolean;
45
- }
46
- export declare class SessionUsageTracker {
47
- private totals;
48
- private lastUsage?;
49
- add(usage: ModelUsage): void;
50
- reset(): void;
51
- snapshot(): UsageTotals;
52
- }
53
- export declare function createCoreServices(): CoreServices;
54
- export declare function createQueryEngineRuntime(services: CoreServices, options?: CreateCoreRuntimeOptions): Promise<CoreRuntime>;
55
- export declare function createCoreRuntime(options?: CreateCoreRuntimeOptions): Promise<CoreRuntime>;
56
- export declare function createTaskNotificationSource(taskStore: TaskStore): TaskNotificationSource;
57
- export declare function syncImageGenerationTool(runtime: Pick<CoreRuntime, "tools">, provider: ModelProviderName | undefined): void;
58
- export declare function formatCreatedEnvNotice(dotEnvPath: string): string;
59
- export declare function parseResumeFlag(value: string | undefined): boolean;
@@ -1,161 +0,0 @@
1
- import path from "node:path";
2
- import { TaskStore } from "../tasks/task-store.js";
3
- import { createTaskTools } from "../tasks/task-tools.js";
4
- import { loadDefaultDotEnvFiles } from "../model/env.js";
5
- import { readModelProviderConfig } from "../model/config.js";
6
- import { CommunicationLogger, LoggingModelGateway } from "../model/communication-logger.js";
7
- import { createModelGatewayFromProcessEnv } from "../model/provider-factory.js";
8
- import { ToolRegistry } from "../tools/registry.js";
9
- import { editTool, writeTool } from "../tools/builtins/edit-tool.js";
10
- import { createExecTool } from "../tools/builtins/exec-tool.js";
11
- import { listDirectoryTool, readFileTool } from "../tools/builtins/filesystem-tools.js";
12
- import { grepTool } from "../tools/builtins/grep-tool.js";
13
- import { searchTool } from "../tools/builtins/search-tool.js";
14
- import { planTool } from "../tools/builtins/plan-tool.js";
15
- import { createOpenAIImageGenerationTool } from "../tools/builtins/image-generation-tool.js";
16
- import { createLoadImageTool } from "../tools/builtins/image-loader-tool.js";
17
- import { QueryEngine } from "./query-engine.js";
18
- import { commandUsages } from "./commands.js";
19
- export class SessionUsageTracker {
20
- totals = emptyUsageTotals();
21
- lastUsage;
22
- add(usage) {
23
- if (usage === this.lastUsage)
24
- return;
25
- this.lastUsage = usage;
26
- const inputTokens = usageTokenValue(usage.inputTokens);
27
- const outputTokens = usageTokenValue(usage.outputTokens);
28
- const reportedTotalTokens = usageTokenValue(usage.totalTokens);
29
- const computedTotalTokens = reportedTotalTokens ?? sumUsageTokens(inputTokens, outputTokens);
30
- const reasoningTokens = usageTokenValue(usage.reasoningTokens);
31
- const cachedTokens = usageTokenValue(usage.cachedTokens);
32
- if (inputTokens === undefined && outputTokens === undefined && computedTotalTokens === undefined && reasoningTokens === undefined && cachedTokens === undefined)
33
- return;
34
- this.totals = {
35
- inputTokens: this.totals.inputTokens + (inputTokens ?? 0),
36
- outputTokens: this.totals.outputTokens + (outputTokens ?? 0),
37
- totalTokens: this.totals.totalTokens + (computedTotalTokens ?? 0),
38
- reasoningTokens: this.totals.reasoningTokens + (reasoningTokens ?? 0),
39
- cachedTokens: this.totals.cachedTokens + (cachedTokens ?? 0),
40
- requests: this.totals.requests + 1,
41
- computedTotalTokens: this.totals.computedTotalTokens || (reportedTotalTokens === undefined && computedTotalTokens !== undefined),
42
- };
43
- }
44
- reset() {
45
- this.totals = emptyUsageTotals();
46
- this.lastUsage = undefined;
47
- }
48
- snapshot() {
49
- return { ...this.totals };
50
- }
51
- }
52
- function emptyUsageTotals() {
53
- return { inputTokens: 0, outputTokens: 0, totalTokens: 0, reasoningTokens: 0, cachedTokens: 0, requests: 0, computedTotalTokens: false };
54
- }
55
- function usageTokenValue(value) {
56
- return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
57
- }
58
- function sumUsageTokens(left, right) {
59
- if (left === undefined && right === undefined)
60
- return undefined;
61
- return (left ?? 0) + (right ?? 0);
62
- }
63
- export function createCoreServices() {
64
- const envLoad = loadDefaultDotEnvFiles({ override: true });
65
- const modelConfig = readModelProviderConfig(process.env);
66
- const communicationLogger = new CommunicationLogger();
67
- const modelGateway = new LoggingModelGateway(createModelGatewayFromProcessEnv(process.env), communicationLogger);
68
- const taskStore = new TaskStore();
69
- const tools = new ToolRegistry();
70
- tools.register(editTool);
71
- tools.register(writeTool);
72
- tools.register(createExecTool({ taskStore }));
73
- tools.register(listDirectoryTool);
74
- tools.register(readFileTool);
75
- tools.register(grepTool);
76
- tools.register(searchTool);
77
- tools.register(createLoadImageTool());
78
- if (modelConfig?.provider === "openai")
79
- tools.register(createOpenAIImageGenerationTool());
80
- tools.register(planTool);
81
- for (const tool of createTaskTools(taskStore))
82
- tools.register(tool);
83
- return {
84
- communicationLogger,
85
- modelGateway,
86
- taskStore,
87
- tools,
88
- defaultReasoning: modelConfig?.defaultReasoning,
89
- envPath: process.env.NEO_ENV_FILE?.trim() ? path.resolve(process.env.NEO_ENV_FILE.trim()) : envLoad.userDotEnvPath,
90
- envNotice: envLoad.createdUserDotEnv ? formatCreatedEnvNotice(envLoad.userDotEnvPath) : undefined,
91
- };
92
- }
93
- export async function createQueryEngineRuntime(services, options = {}) {
94
- const modelConfig = readModelProviderConfig(process.env);
95
- const engine = new QueryEngine({
96
- agentId: options.agentId ?? "main",
97
- model: modelConfig?.model,
98
- fallbackModel: modelConfig?.fallbackModel,
99
- reasoning: modelConfig?.defaultReasoning,
100
- queryOrigin: options.queryOrigin,
101
- modelGateway: services.modelGateway,
102
- tools: services.tools,
103
- taskNotificationSource: createTaskNotificationSource(services.taskStore),
104
- commands: commandUsages,
105
- session: {
106
- enabled: process.env.AGENT_SESSION_TRANSCRIPT !== "0",
107
- sessionId: options.sessionId ?? process.env.AGENT_SESSION_ID,
108
- rootDir: process.env.AGENT_SESSION_DIR,
109
- cwd: options.sessionCwd,
110
- resume: options.resume ?? parseResumeFlag(process.env.AGENT_SESSION_RESUME),
111
- toolResultThresholdChars: process.env.AGENT_TOOL_RESULT_THRESHOLD_CHARS ? Number(process.env.AGENT_TOOL_RESULT_THRESHOLD_CHARS) : undefined,
112
- },
113
- });
114
- await engine.initialize();
115
- const initialMetrics = await engine.contextMetrics();
116
- return {
117
- engine,
118
- communicationLogger: services.communicationLogger,
119
- modelGateway: services.modelGateway,
120
- usage: new SessionUsageTracker(),
121
- taskStore: services.taskStore,
122
- tools: services.tools,
123
- initialMetrics,
124
- defaultReasoning: services.defaultReasoning,
125
- envPath: services.envPath,
126
- envNotice: services.envNotice,
127
- };
128
- }
129
- export async function createCoreRuntime(options = {}) {
130
- return createQueryEngineRuntime(createCoreServices(), options);
131
- }
132
- export function createTaskNotificationSource(taskStore) {
133
- return {
134
- collectUnnotifiedCompletions() {
135
- return taskStore.collectUnnotifiedCompletions().map((task) => ({
136
- taskId: task.taskId,
137
- agentId: task.agentId,
138
- status: task.status,
139
- type: task.type,
140
- content: task.result?.content ?? task.error ?? "",
141
- }));
142
- },
143
- markNotified(taskId) {
144
- taskStore.markNotified(taskId);
145
- },
146
- };
147
- }
148
- export function syncImageGenerationTool(runtime, provider) {
149
- runtime.tools.unregister("image2");
150
- if (provider === "openai")
151
- runtime.tools.register(createOpenAIImageGenerationTool());
152
- }
153
- export function formatCreatedEnvNotice(dotEnvPath) {
154
- return `Created default config file: ${dotEnvPath}\nSet MODEL_PROVIDER and the matching provider section (for example OPENAI_API_KEY, ANTHROPIC_API_KEY, or KIMI_API_KEY), then restart neo.`;
155
- }
156
- export function parseResumeFlag(value) {
157
- if (!value)
158
- return false;
159
- return ["1", "true", "yes", "latest"].includes(value.toLowerCase());
160
- }
161
- //# sourceMappingURL=runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/core/runtime.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import type { AgentEvent } from "../types/events.js";
2
- export declare function renderEvent(event: AgentEvent): string | undefined;
@@ -1,45 +0,0 @@
1
- export function renderEvent(event) {
2
- switch (event.type) {
3
- case "state":
4
- return `${titleCaseMeta(event.phase)}${event.detail ? ` · ${event.detail}` : ""}`;
5
- case "context.metrics":
6
- return undefined;
7
- case "assistant.delta":
8
- return event.text;
9
- case "thinking.delta":
10
- return `thinking> ${event.text}`;
11
- case "message":
12
- return event.message.blocks
13
- .map((block) => {
14
- const prefix = event.message.isMeta ? undefined : event.message.role;
15
- if (block.type === "text")
16
- return prefix ? `${prefix}> ${block.text}` : block.text;
17
- if (block.type === "thinking")
18
- return `thinking> ${block.text}`;
19
- if (block.type === "tool_result")
20
- return `tool_result:${block.name}> ${JSON.stringify(block.output)}`;
21
- return `tool_use:${block.name}> ${JSON.stringify(block.input)}`;
22
- })
23
- .join("\n");
24
- case "tool.started":
25
- return `tool started: ${event.toolUse.name}`;
26
- case "tool.finished":
27
- return `tool finished: ${event.toolUse.name} (${event.ok ? "ok" : "failed"})`;
28
- case "usage":
29
- return undefined;
30
- case "retrying":
31
- return `retrying model request: attempt ${event.attempt}, delay ${event.delayMs}ms, ${event.error.message}`;
32
- case "terminal":
33
- return `Stopped · ${event.reason}${event.detail ? ` · ${event.detail}` : ""}`;
34
- case "error":
35
- return `error: ${event.error.message}`;
36
- }
37
- }
38
- function titleCaseMeta(value) {
39
- return value
40
- .split(/[_\s-]+/u)
41
- .filter(Boolean)
42
- .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
43
- .join(" ");
44
- }
45
- //# sourceMappingURL=render.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/repl/render.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpF,KAAK,iBAAiB;YACpB,OAAO,SAAS,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,KAAK,gBAAgB;YACnB,OAAO,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM;iBACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACb,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,OAAO,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChE,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;oBAAE,OAAO,eAAe,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtG,OAAO,YAAY,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/C,KAAK,eAAe;YAClB,OAAO,kBAAkB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,mCAAmC,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9G,KAAK,UAAU;YACb,OAAO,aAAa,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,UAAU,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,KAAK,CAAC,UAAU,CAAC;SACjB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
@@ -1,19 +0,0 @@
1
- import type { Writable } from "node:stream";
2
- import type { AgentEvent } from "../types/events.js";
3
- export declare class ReplStatusLine {
4
- private readonly output;
5
- private phase;
6
- private lastDetail;
7
- private metrics?;
8
- private lastUsage?;
9
- private outputTokensStreamed;
10
- private visible;
11
- private pulseFrame;
12
- constructor(output: Writable & {
13
- isTTY?: boolean;
14
- });
15
- handle(event: AgentEvent): void;
16
- clear(): void;
17
- render(): void;
18
- renderLine(): string;
19
- }
@@ -1,160 +0,0 @@
1
- import readline from "node:readline";
2
- export class ReplStatusLine {
3
- output;
4
- phase = "ready";
5
- lastDetail = "";
6
- metrics;
7
- lastUsage;
8
- outputTokensStreamed = 0;
9
- visible = false;
10
- pulseFrame = 0;
11
- constructor(output) {
12
- this.output = output;
13
- }
14
- handle(event) {
15
- if (event.type === "state") {
16
- this.phase = event.phase;
17
- this.lastDetail = event.detail ?? "";
18
- if (event.phase === "preparing") {
19
- this.lastUsage = undefined;
20
- this.outputTokensStreamed = 0;
21
- }
22
- }
23
- if (event.type === "context.metrics") {
24
- this.metrics = event.metrics;
25
- }
26
- if (event.type === "assistant.delta") {
27
- this.outputTokensStreamed += estimateDeltaTokens(event.text);
28
- }
29
- if (event.type === "usage") {
30
- this.lastUsage = event.usage;
31
- }
32
- if (event.type === "terminal") {
33
- this.phase = "stopped";
34
- this.lastDetail = event.reason;
35
- }
36
- }
37
- clear() {
38
- if (!this.visible || !this.output.isTTY)
39
- return;
40
- readline.clearLine(this.output, 0);
41
- readline.cursorTo(this.output, 0);
42
- this.visible = false;
43
- }
44
- render() {
45
- if (!this.output.isTTY)
46
- return;
47
- const line = this.renderLine();
48
- readline.clearLine(this.output, 0);
49
- readline.cursorTo(this.output, 0);
50
- this.output.write(line);
51
- this.visible = true;
52
- }
53
- renderLine() {
54
- const input = this.lastUsage?.inputTokens ?? this.metrics?.estimatedInputTokens;
55
- const output = this.lastUsage?.outputTokens ?? this.outputTokensStreamed;
56
- const context = renderContext(this.metrics);
57
- const model = this.metrics?.model ?? "model?";
58
- const source = this.metrics?.contextWindowSource ?? "unknown";
59
- const detail = this.lastDetail ? ` - ${this.lastDetail}` : "";
60
- const width = terminalWidth(this.output);
61
- const label = animatedPhaseLabel(this.phase, this.pulseFrame);
62
- if (isActivePhase(this.phase))
63
- this.pulseFrame += 1;
64
- const fixedPrefix = [
65
- fixed(label, 12, "left"),
66
- contextMeter(this.metrics, 10),
67
- `model ${fixed(truncateMiddle(model, 20), 20, "left")}`,
68
- `in ${fixed(formatCompact(input), 7, "left")}`,
69
- `out ${fixed(formatCompact(output), 7, "left")}`,
70
- `ctx ${fixed(context, 20, "left")}`,
71
- `src ${fixed(source, 7, "left")}`,
72
- ].join(" ");
73
- return fitToWidth(`${fixedPrefix}${detail}`, width);
74
- }
75
- }
76
- function renderContext(metrics) {
77
- if (!metrics)
78
- return "unknown";
79
- const used = formatCompact(metrics.estimatedInputTokens);
80
- if (!metrics.contextWindowTokens)
81
- return `${used}/?`;
82
- const window = formatCompact(metrics.contextWindowTokens);
83
- const percent = metrics.contextUsageRatio === undefined ? "?" : `${(metrics.contextUsageRatio * 100).toFixed(1)}%`;
84
- return `${used}/${window} ${percent}`;
85
- }
86
- function estimateDeltaTokens(text) {
87
- if (!text)
88
- return 0;
89
- return Math.max(1, Math.ceil(text.length / 4));
90
- }
91
- function formatCompact(value) {
92
- if (value === undefined)
93
- return "?";
94
- const rounded = Math.max(0, Math.round(value));
95
- if (rounded >= 1_000_000)
96
- return `${trimFixed(rounded / 1_000_000)}m`;
97
- if (rounded >= 10_000)
98
- return `${Math.round(rounded / 1000)}k`;
99
- if (rounded >= 1000)
100
- return `${trimFixed(rounded / 1000)}k`;
101
- return String(rounded);
102
- }
103
- function trimFixed(value) {
104
- return value >= 10 ? value.toFixed(0) : value.toFixed(1).replace(/\.0$/, "");
105
- }
106
- function terminalWidth(output) {
107
- return Math.max(72, Math.min(output.columns ?? 100, 160)) - 1;
108
- }
109
- function animatedPhaseLabel(phase, tick) {
110
- const label = phaseLabel(phase).toUpperCase();
111
- if (!isActivePhase(phase))
112
- return label;
113
- return `${label}${STATUS_PULSE_FRAMES[tick % STATUS_PULSE_FRAMES.length]}`;
114
- }
115
- function phaseLabel(phase) {
116
- if (phase === "calling_model")
117
- return "model";
118
- if (phase === "running_tools")
119
- return "tools";
120
- if (phase === "injecting_context")
121
- return "context";
122
- return phase;
123
- }
124
- function isActivePhase(phase) {
125
- return phase === "running" ||
126
- phase === "preparing" ||
127
- phase === "calling_model" ||
128
- phase === "running_tools" ||
129
- phase === "compacting" ||
130
- phase === "injecting_context";
131
- }
132
- function contextMeter(metrics, width) {
133
- if (!metrics || metrics.contextUsageRatio === undefined)
134
- return `[${"-".repeat(width)}]`;
135
- const ratio = Math.max(0, Math.min(1, metrics.contextUsageRatio));
136
- const filled = Math.min(width, Math.max(0, Math.round(ratio * width)));
137
- return `[${"#".repeat(filled)}${"-".repeat(width - filled)}]`;
138
- }
139
- function fixed(value, width, align = "right") {
140
- const clipped = value.length > width ? value.slice(0, width) : value;
141
- return align === "left" ? clipped.padEnd(width, " ") : clipped.padStart(width, " ");
142
- }
143
- function fitToWidth(value, width) {
144
- if (value.length === width)
145
- return value;
146
- if (value.length > width)
147
- return value.slice(0, width);
148
- return value.padEnd(width, " ");
149
- }
150
- function truncateMiddle(value, maxLength) {
151
- if (value.length <= maxLength)
152
- return value;
153
- if (maxLength <= 3)
154
- return value.slice(0, maxLength);
155
- const left = Math.ceil((maxLength - 3) / 2);
156
- const right = Math.floor((maxLength - 3) / 2);
157
- return `${value.slice(0, left)}...${value.slice(value.length - right)}`;
158
- }
159
- const STATUS_PULSE_FRAMES = ["", ".", "..", "..."];
160
- //# sourceMappingURL=status-line.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/repl/status-line.ts"],"names":[],"mappings":"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"}