@gencode/cli 0.0.9 → 0.0.11
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/dist/bin.d.ts +4 -6
- package/dist/bin.js +1 -17
- package/dist/program-CUSjxuYI.js +6 -0
- package/dist/program.d.ts +6 -7
- package/dist/program.js +1 -37
- package/package.json +3 -3
- package/dist/auth.d.ts +0 -4
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -9
- package/dist/auth.js.map +0 -1
- package/dist/bin.d.ts.map +0 -1
- package/dist/bin.js.map +0 -1
- package/dist/commands/agents.d.ts +0 -10
- package/dist/commands/agents.d.ts.map +0 -1
- package/dist/commands/agents.js +0 -319
- package/dist/commands/agents.js.map +0 -1
- package/dist/commands/bootstrap.d.ts +0 -12
- package/dist/commands/bootstrap.d.ts.map +0 -1
- package/dist/commands/bootstrap.js +0 -25
- package/dist/commands/bootstrap.js.map +0 -1
- package/dist/commands/commands.d.ts +0 -12
- package/dist/commands/commands.d.ts.map +0 -1
- package/dist/commands/commands.js +0 -37
- package/dist/commands/commands.js.map +0 -1
- package/dist/commands/memory.d.ts +0 -14
- package/dist/commands/memory.d.ts.map +0 -1
- package/dist/commands/memory.js +0 -173
- package/dist/commands/memory.js.map +0 -1
- package/dist/commands/plugins.d.ts +0 -3
- package/dist/commands/plugins.d.ts.map +0 -1
- package/dist/commands/plugins.js +0 -228
- package/dist/commands/plugins.js.map +0 -1
- package/dist/commands/run.d.ts +0 -29
- package/dist/commands/run.d.ts.map +0 -1
- package/dist/commands/run.js +0 -341
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/sessions.d.ts +0 -14
- package/dist/commands/sessions.d.ts.map +0 -1
- package/dist/commands/sessions.js +0 -30
- package/dist/commands/sessions.js.map +0 -1
- package/dist/config.d.ts +0 -21
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -33
- package/dist/config.js.map +0 -1
- package/dist/events/agent-progress.d.ts +0 -58
- package/dist/events/agent-progress.d.ts.map +0 -1
- package/dist/events/agent-progress.js +0 -2
- package/dist/events/agent-progress.js.map +0 -1
- package/dist/events/composite-sink.d.ts +0 -9
- package/dist/events/composite-sink.d.ts.map +0 -1
- package/dist/events/composite-sink.js +0 -17
- package/dist/events/composite-sink.js.map +0 -1
- package/dist/events/event-sink.d.ts +0 -6
- package/dist/events/event-sink.d.ts.map +0 -1
- package/dist/events/event-sink.js +0 -2
- package/dist/events/event-sink.js.map +0 -1
- package/dist/events/http-callback-sink.d.ts +0 -11
- package/dist/events/http-callback-sink.d.ts.map +0 -1
- package/dist/events/http-callback-sink.js +0 -68
- package/dist/events/http-callback-sink.js.map +0 -1
- package/dist/events/types.d.ts +0 -75
- package/dist/events/types.d.ts.map +0 -1
- package/dist/events/types.js +0 -2
- package/dist/events/types.js.map +0 -1
- package/dist/events/websocket-auth.d.ts +0 -8
- package/dist/events/websocket-auth.d.ts.map +0 -1
- package/dist/events/websocket-auth.js +0 -9
- package/dist/events/websocket-auth.js.map +0 -1
- package/dist/events/websocket-sink.d.ts +0 -17
- package/dist/events/websocket-sink.d.ts.map +0 -1
- package/dist/events/websocket-sink.js +0 -143
- package/dist/events/websocket-sink.js.map +0 -1
- package/dist/gensign_node_bg.wasm +0 -0
- package/dist/logger.d.ts +0 -30
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -59
- package/dist/logger.js.map +0 -1
- package/dist/output.d.ts +0 -21
- package/dist/output.d.ts.map +0 -1
- package/dist/output.js +0 -99
- package/dist/output.js.map +0 -1
- package/dist/pkg-path.d.ts +0 -6
- package/dist/pkg-path.d.ts.map +0 -1
- package/dist/pkg-path.js +0 -8
- package/dist/pkg-path.js.map +0 -1
- package/dist/plugins-config.d.ts +0 -5
- package/dist/plugins-config.d.ts.map +0 -1
- package/dist/plugins-config.js +0 -30
- package/dist/plugins-config.js.map +0 -1
- package/dist/program-glxy0j6y.js +0 -765
- package/dist/program-glxy0j6y.js.map +0 -1
- package/dist/program.d.ts.map +0 -1
- package/dist/program.js.map +0 -1
- package/dist/utils/message-input.d.ts +0 -72
- package/dist/utils/message-input.d.ts.map +0 -1
- package/dist/utils/message-input.js +0 -117
- package/dist/utils/message-input.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"program-glxy0j6y.js","names":[],"sources":["../src/output.ts","../src/commands/bootstrap.ts","../src/auth.ts","../src/config.ts","../src/plugins-config.ts","../src/commands/run.ts","../src/commands/sessions.ts","../src/commands/memory.ts","../src/commands/agents.ts","../src/commands/plugins.ts","../src/program.ts"],"sourcesContent":["/**\n * Output formatting utilities for @pingclaw/cli.\n */\n\nimport type {\n AgentRunResult,\n AgentProgressEvent,\n SessionSummary,\n BootstrapMountResult,\n} from \"@pingclaw/agents\";\n\nexport type OutputFormat = \"text\" | \"json\";\n\n/** Writes a string to stdout without a trailing newline */\nexport function write(text: string): void {\n process.stdout.write(text);\n}\n\n/** Writes a line to stdout */\nexport function writeLine(text: string): void {\n process.stdout.write(text + \"\\n\");\n}\n\n/** Writes a line to stderr */\nexport function writeError(text: string): void {\n process.stderr.write(text + \"\\n\");\n}\n\n/** Formats and prints a progress event during streaming execution */\nexport function printProgressEvent(event: AgentProgressEvent): void {\n switch (event.type) {\n case \"text\":\n write(event.text);\n break;\n case \"tool_start\":\n writeLine(`\\n[tool:${event.name}] ${JSON.stringify(event.input)}`);\n break;\n case \"tool_end\":\n writeLine(`[tool:${event.name}] ${event.isError ? \"ERROR\" : \"OK\"} ${event.output.slice(0, 200)}`);\n break;\n case \"compaction\":\n writeLine(`\\n[compaction] ${event.reason}`);\n break;\n case \"error\":\n writeError(`\\n[error] ${event.message}`);\n break;\n case \"subagent_spawn\": {\n const label = event.label ? ` \"${event.label}\"` : \"\";\n writeLine(`\\n[subagent:spawn]${label} ${event.task}`);\n break;\n }\n case \"subagent_complete\": {\n writeLine(`[subagent:${event.status}] ${event.task}`);\n break;\n }\n }\n}\n\n/** Prints the final run result to stdout */\nexport function printRunResult(result: AgentRunResult, format: OutputFormat): void {\n if (format === \"json\") {\n writeLine(JSON.stringify(result, null, 2));\n return;\n }\n writeLine(\"\\n\");\n writeLine(`session: ${result.sessionId}`);\n writeLine(`duration: ${result.durationMs}ms`);\n writeLine(`tokens: input=${result.usage.input} output=${result.usage.output} total=${result.usage.total}`);\n if (result.error) {\n writeError(`error: ${result.error}`);\n }\n}\n\n/** Prints the session list to stdout */\nexport function printSessionList(sessions: SessionSummary[], format: OutputFormat): void {\n if (format === \"json\") {\n writeLine(JSON.stringify(sessions, null, 2));\n return;\n }\n if (sessions.length === 0) {\n writeLine(\"No sessions found.\");\n return;\n }\n for (const session of sessions) {\n const date = session.createdAt ? new Date(session.createdAt).toLocaleString() : \"unknown\";\n writeLine(`${session.id} ${date} [${session.channel}] ${session.title}`);\n }\n}\n\n/** Prints bootstrap result to stdout */\nexport function printBootstrapResult(result: BootstrapMountResult, format: OutputFormat): void {\n if (format === \"json\") {\n writeLine(JSON.stringify(result, null, 2));\n return;\n }\n\n writeLine(\"Bootstrap completed.\");\n writeLine(`dataDir: ${result.dataDir}`);\n writeLine(`created dirs: ${result.createdDirs.length}`);\n writeLine(`created files: ${result.createdFiles.length}`);\n writeLine(`skipped dirs: ${result.skippedDirs.length}`);\n writeLine(`skipped files: ${result.skippedFiles.length}`);\n}\n","/**\n * `pingclaw bootstrap` command — initializes the data directory structure.\n */\n\nimport type { Command } from \"commander\";\nimport { bootstrapMountLayout } from \"@pingclaw/agents\";\nimport { printBootstrapResult, writeError, type OutputFormat } from \"../output.js\";\n\nexport type BootstrapOptions = {\n dataDir: string;\n output?: OutputFormat;\n};\n\n/** Registers the `bootstrap` subcommand on the given Commander program */\nexport function registerBootstrapCommand(program: Command): void {\n program\n .command(\"bootstrap\")\n .description(\"Initialize the data directory with required directories and templates\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .option(\"--output <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: BootstrapOptions) => {\n const format: OutputFormat = options.output === \"json\" ? \"json\" : \"text\";\n try {\n const result = await bootstrapMountLayout(options.dataDir);\n printBootstrapResult(result, format);\n } catch (err) {\n writeError(`Error bootstrapping data directory: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import gensign from \"gensign-node\";\n\ndeclare global {\n // Provided by gensign-node consumers to locate package info.\n // eslint-disable-next-line no-var\n var getPkgPath: () => string;\n}\n\nif (!globalThis.getPkgPath) {\n globalThis.getPkgPath = () => \"@wizard/pingclaw\";\n}\n\nexport function encryptWithSM4(ticket: string): string {\n return gensign.sm4_encrypt_ecb(ticket);\n}\n\nexport function generateApiKey(ticket: string): string {\n return encryptWithSM4(ticket);\n}\n\nexport {};\n","/**\n * LLM configuration resolution for @pingclaw/cli.\n *\n * Priority: auth token > CLI flags > environment variables > error\n */\nimport { generateApiKey } from \"./auth.js\";\n\nexport type LlmConfig = {\n baseUrl: string;\n apiKey: string;\n model: string;\n contextWindow?: number;\n};\n\n/** Resolved CLI options that may override env vars */\nexport type LlmCliOptions = {\n baseUrl?: string;\n apiKey?: string;\n authToken?: string;\n model?: string;\n contextWindow?: number;\n};\n\n/**\n * Resolves LLM configuration from CLI options and environment variables.\n * CLI options take precedence over environment variables.\n * Throws if required fields cannot be resolved.\n */\nexport function resolveLlmConfig(options: LlmCliOptions = {}): LlmConfig {\n const baseUrl = options.baseUrl ?? process.env[\"PINGCLAW_BASE_URL\"];\n const envAuthToken = process.env[\"PINGCLAW_AUTH_TOKEN\"];\n const apiKey = options.authToken\n ? generateApiKey(options.authToken)\n : (envAuthToken ? generateApiKey(envAuthToken) : (options.apiKey ?? process.env[\"PINGCLAW_API_KEY\"]));\n const model = options.model ?? process.env[\"PINGCLAW_MODEL\"];\n\n const missing: string[] = [];\n if (!baseUrl) missing.push(\"--base-url / PINGCLAW_BASE_URL\");\n if (!apiKey) missing.push(\"--api-key / PINGCLAW_API_KEY\");\n if (!model) missing.push(\"--model / PINGCLAW_MODEL\");\n\n if (missing.length > 0) {\n throw new Error(`Missing required LLM configuration: ${missing.join(\", \")}`);\n }\n\n const contextWindow = options.contextWindow\n ?? (process.env[\"PINGCLAW_CONTEXT_WINDOW\"] ? Number(process.env[\"PINGCLAW_CONTEXT_WINDOW\"]) : undefined);\n\n return { baseUrl: baseUrl!, apiKey: apiKey!, model: model!, contextWindow };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { PluginsConfig } from \"@pingclaw/agents\";\n\nconst CONFIG_FILE = \"plugins.json\";\n\nexport function resolvePluginsConfigPath(dataDir: string): string {\n return path.join(dataDir, \".pingclaw\", CONFIG_FILE);\n}\n\nexport async function loadPluginsConfig(dataDir: string): Promise<PluginsConfig | undefined> {\n const filePath = resolvePluginsConfigPath(dataDir);\n try {\n const raw = await fs.readFile(filePath, \"utf-8\");\n const parsed = JSON.parse(raw) as PluginsConfig;\n return parsed;\n } catch (err) {\n const code = (err as { code?: string }).code;\n if (code === \"ENOENT\") {\n return undefined;\n }\n throw err;\n }\n}\n\nexport async function savePluginsConfig(dataDir: string, config: PluginsConfig): Promise<void> {\n const filePath = resolvePluginsConfigPath(dataDir);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, JSON.stringify(config, null, 2), \"utf-8\");\n}\n","/**\n * `pingclaw run` command — executes an agent task.\n */\n\nimport type { Command } from \"commander\";\nimport { runAgent } from \"@pingclaw/agents\";\nimport type { Channel } from \"@pingclaw/agents\";\nimport path from \"node:path\";\nimport { resolveLlmConfig } from \"../config.js\";\nimport { printProgressEvent, printRunResult, writeError, type OutputFormat } from \"../output.js\";\nimport { loadPluginsConfig } from \"../plugins-config.js\";\n\nexport type RunOptions = {\n dataDir: string;\n message: string;\n sessionId?: string;\n messageId?: string;\n channel?: Channel;\n baseUrl?: string;\n apiKey?: string;\n authToken?: string;\n model?: string;\n contextWindow?: string;\n callbackUrl?: string;\n timeout?: string;\n output?: OutputFormat;\n};\n\n/** Registers the `run` subcommand on the given Commander program */\nexport function registerRunCommand(program: Command): void {\n program\n .command(\"run\")\n .description(\"Run an agent task\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .requiredOption(\"--message <text>\", \"User message to send to the agent\")\n .option(\"-s, --session-id <id>\", \"Resume an existing session by ID\")\n .option(\"--message-id <id>\", \"Message ID for correlating events\")\n .option(\"-c, --channel <channel>\", \"Channel type: H5 | WEB | KLPA | CRON (default: WEB)\", \"WEB\")\n .option(\"--base-url <url>\", \"LLM API base URL (overrides PINGCLAW_BASE_URL)\")\n .option(\"--api-key <key>\", \"LLM API key (overrides PINGCLAW_API_KEY)\")\n .option(\"--auth-token <token>\", \"Auth token used to generate the API key (highest priority)\")\n .option(\"--model <name>\", \"LLM model name (overrides PINGCLAW_MODEL)\")\n .option(\"--context-window <n>\", \"LLM context window size\")\n .option(\"--callback-url <url>\", \"HTTP callback URL for progress events\")\n .option(\"--timeout <ms>\", \"Execution timeout in milliseconds (default: 600000)\")\n .option(\"--output <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: RunOptions) => {\n let llm;\n try {\n llm = resolveLlmConfig({\n baseUrl: options.baseUrl,\n apiKey: options.apiKey,\n authToken: options.authToken,\n model: options.model,\n contextWindow: options.contextWindow ? Number(options.contextWindow) : undefined,\n });\n } catch (err) {\n writeError((err as Error).message);\n process.exit(1);\n }\n\n // Validate channel\n const channel: Channel = options.channel ?? \"WEB\";\n if (channel !== \"H5\" && channel !== \"WEB\" && channel !== \"KLPA\" && channel !== \"CRON\") {\n writeError(`Invalid channel: ${channel}. Must be 'H5', 'WEB', 'KLPA', or 'CRON'`);\n process.exit(1);\n }\n\n const format: OutputFormat = options.output === \"json\" ? \"json\" : \"text\";\n\n // Wire abort signal to OS termination signals so the agent can be\n // gracefully cancelled when the container is stopped (SIGTERM) or\n // the user presses Ctrl-C (SIGINT).\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n process.once(\"SIGTERM\", abort);\n process.once(\"SIGINT\", abort);\n\n try {\n const pluginsConfig = await loadPluginsConfig(options.dataDir);\n const result = await runAgent({\n dataDir: options.dataDir,\n message: options.message,\n sessionId: options.sessionId,\n messageId: options.messageId,\n channel,\n llm,\n callbackUrl: options.callbackUrl,\n timeoutMs: options.timeout ? Number(options.timeout) : undefined,\n abortSignal: abortController.signal,\n plugins: pluginsConfig ? {\n config: pluginsConfig,\n dataDir: options.dataDir,\n workspaceDir: path.join(options.dataDir, \"workspace\"),\n bundledDir: process.env.PINGCLAW_PLUGINS_BUNDLED_DIR,\n llmAllowlist: pluginsConfig.llmAllowlist,\n } : undefined,\n onProgress: format === \"text\"\n ? async (event) => { printProgressEvent(event); }\n : undefined,\n });\n\n printRunResult(result, format);\n process.exit(result.error ? 1 : 0);\n } catch (err) {\n writeError(`Fatal: ${(err as Error).message}`);\n process.exit(1);\n } finally {\n process.off(\"SIGTERM\", abort);\n process.off(\"SIGINT\", abort);\n }\n });\n}\n","/**\n * `pingclaw sessions` command — lists sessions for a data directory.\n */\n\nimport type { Command } from \"commander\";\nimport { listSessionSummaries, type Channel } from \"@pingclaw/agents\";\nimport { printSessionList, writeError, type OutputFormat } from \"../output.js\";\n\nexport type SessionsOptions = {\n dataDir: string;\n channel?: Channel;\n output?: OutputFormat;\n};\n\n/** Registers the `sessions` subcommand on the given Commander program */\nexport function registerSessionsCommand(program: Command): void {\n program\n .command(\"sessions\")\n .description(\"List sessions for a data directory\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .option(\"-c, --channel <channel>\", \"Filter by channel type: H5 | WEB | KLPA | CRON\")\n .option(\"--output <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: SessionsOptions) => {\n const format: OutputFormat = options.output === \"json\" ? \"json\" : \"text\";\n\n // Validate channel if provided\n if (options.channel && options.channel !== \"H5\" && options.channel !== \"WEB\" && options.channel !== \"KLPA\" && options.channel !== \"CRON\") {\n writeError(`Invalid channel: ${options.channel}. Must be 'H5', 'WEB', 'KLPA', or 'CRON'`);\n process.exit(1);\n }\n\n try {\n const sessions = await listSessionSummaries(options.dataDir, options.channel);\n printSessionList(sessions, format);\n } catch (err) {\n writeError(`Error listing sessions: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","/**\n * `pingclaw memory` command — status/index/search for semantic memory.\n */\n\nimport type { Command } from \"commander\";\nimport { MemoryIndexManager, type MemoryProviderStatus } from \"@pingclaw/agents\";\nimport { writeError, writeLine, type OutputFormat } from \"../output.js\";\n\nexport type MemoryCommandOptions = {\n dataDir: string;\n output?: OutputFormat;\n includeSessions?: boolean;\n};\n\ntype StatusOptions = MemoryCommandOptions & {\n deep?: boolean;\n index?: boolean;\n verbose?: boolean;\n};\n\ntype IndexOptions = MemoryCommandOptions & {\n verbose?: boolean;\n};\n\ntype SearchOptions = MemoryCommandOptions & {\n query?: string;\n};\n\nfunction formatStatus(status: MemoryProviderStatus, deep?: boolean): string {\n const lines: string[] = [];\n lines.push(`backend: ${status.backend}`);\n lines.push(`provider: ${status.provider}${status.model ? ` (${status.model})` : \"\"}`);\n if (typeof status.files === \"number\") {\n lines.push(`files: ${status.files}`);\n }\n if (typeof status.chunks === \"number\") {\n lines.push(`chunks: ${status.chunks}`);\n }\n if (typeof status.dirty === \"boolean\") {\n lines.push(`dirty: ${status.dirty}`);\n }\n if (status.dbPath) {\n lines.push(`db: ${status.dbPath}`);\n }\n if (status.sources?.length) {\n lines.push(`sources: ${status.sources.join(\", \")}`);\n }\n if (deep) {\n if (status.fts) {\n lines.push(`fts: enabled=${status.fts.enabled} available=${status.fts.available}`);\n if (status.fts.error) {\n lines.push(`fts_error: ${status.fts.error}`);\n }\n }\n if (status.vector) {\n lines.push(`vector: enabled=${status.vector.enabled} available=${status.vector.available ?? \"unknown\"}`);\n if (status.vector.dims) {\n lines.push(`vector_dims: ${status.vector.dims}`);\n }\n if (status.vector.loadError) {\n lines.push(`vector_error: ${status.vector.loadError}`);\n }\n }\n if (status.cache) {\n lines.push(`cache: enabled=${status.cache.enabled} entries=${status.cache.entries ?? 0}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\nfunction getManager(dataDir: string, includeSessions?: boolean): MemoryIndexManager {\n return MemoryIndexManager.get(dataDir, includeSessions ? {\n experimental: { sessionMemory: true },\n sources: [\"memory\", \"sessions\"],\n } : undefined);\n}\n\nexport function registerMemoryCommand(program: Command): void {\n const memory = program.command(\"memory\").description(\"Manage semantic memory indexing and search\");\n\n memory\n .command(\"status\")\n .description(\"Show memory index status\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .option(\"--deep\", \"Probe embedding/vector availability\")\n .option(\"--index\", \"Run a refresh before reporting status\")\n .option(\"--include-sessions\", \"Include session transcripts in indexing\")\n .option(\"--verbose\", \"Verbose output\")\n .option(\"--output <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: StatusOptions) => {\n const format: OutputFormat = options.output === \"json\" ? \"json\" : \"text\";\n try {\n const manager = getManager(options.dataDir, options.includeSessions);\n if (options.index) {\n await manager.sync({ reason: \"cli-status\" });\n }\n const status = manager.status();\n if (options.deep) {\n const [embed, vector] = await Promise.all([\n manager.probeEmbeddingAvailability(),\n manager.probeVectorAvailability(),\n ]);\n (status.custom ??= {}).embeddingProbe = embed;\n (status.custom ??= {}).vectorProbe = { ok: vector };\n }\n if (format === \"json\") {\n writeLine(JSON.stringify(status, null, 2));\n } else {\n writeLine(formatStatus(status, options.deep));\n }\n } catch (err) {\n writeError(`Error getting memory status: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n memory\n .command(\"index\")\n .description(\"Reindex memory files\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .option(\"--include-sessions\", \"Include session transcripts in indexing\")\n .option(\"--verbose\", \"Verbose output\")\n .action(async (options: IndexOptions) => {\n try {\n const manager = getManager(options.dataDir, options.includeSessions);\n await manager.sync({ reason: \"cli-index\" });\n writeLine(\"Memory index refreshed.\");\n } catch (err) {\n writeError(`Error indexing memory: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n memory\n .command(\"search [query]\")\n .description(\"Search semantic memory\")\n .requiredOption(\"-d, --data-dir <path>\", \"Data directory path\")\n .option(\"--query <text>\", \"Search query\")\n .option(\"--include-sessions\", \"Include session transcripts in search\")\n .option(\"--output <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (query: string | undefined, options: SearchOptions) => {\n const format: OutputFormat = options.output === \"json\" ? \"json\" : \"text\";\n const q = options.query?.trim() || query?.trim();\n if (!q) {\n writeError(\"Query is required: provide [query] or --query <text>\");\n process.exit(1);\n }\n try {\n const manager = getManager(options.dataDir, options.includeSessions);\n const results = await manager.search(q);\n if (format === \"json\") {\n writeLine(JSON.stringify(results, null, 2));\n return;\n }\n if (results.length === 0) {\n writeLine(`No results found for: ${q}`);\n return;\n }\n const lines = results.map((r) => {\n const base = `${r.path}:${r.startLine}-${r.endLine} (${r.score.toFixed(4)}) ${r.snippet}`;\n return r.citation ? `${base}\\n${r.citation}` : base;\n });\n writeLine(lines.join(\"\\n\"));\n } catch (err) {\n writeError(`Error searching memory: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","/**\n * Agents command group for @pingclaw/cli.\n * Manages multi-agent configuration (add, delete, list, bind, unbind, set-identity).\n */\n\nimport { Command } from \"commander\";\nimport {\n loadAgentsConfig,\n saveAgentsConfig,\n listAgents,\n listBindings,\n getAgentConfig,\n resolveDefaultAgentId,\n resolveAgentDir,\n normalizeAgentId,\n addAgent,\n removeAgent,\n addBinding,\n removeBindings,\n updateAgentIdentity,\n type AgentConfig,\n type AgentBinding,\n} from \"@pingclaw/agents/config\";\nimport fs from \"node:fs/promises\";\n\n/**\n * Formats an agent binding for display.\n */\nfunction describeBinding(binding: AgentBinding): string {\n const route = binding.match.accountId\n ? `${binding.match.channel}:${binding.match.accountId}`\n : binding.match.channel;\n return `${route} -> ${binding.agentId}`;\n}\n\n/**\n * Lists all configured agents.\n */\nfunction agentsListAction(options: { json?: boolean; bindings?: boolean }) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n const agents = listAgents(config);\n const bindings = listBindings(config);\n const defaultId = resolveDefaultAgentId(config);\n\n if (options.json) {\n console.log(JSON.stringify({ agents, bindings }, null, 2));\n return;\n }\n\n console.log(\"Agents:\");\n for (const agent of agents) {\n const defaultTag = agent.default ? \" (default)\" : \"\";\n const header =\n agent.name && agent.name !== agent.id\n ? `${agent.id}${defaultTag} (${agent.name})`\n : `${agent.id}${defaultTag}`;\n\n console.log(` - ${header}`);\n\n if (agent.identity?.emoji || agent.identity?.name) {\n const identity = [agent.identity.emoji, agent.identity.name]\n .filter(Boolean)\n .join(\" \");\n console.log(` Identity: ${identity}`);\n }\n\n const agentDir = resolveAgentDir(dataDir, agent.id);\n console.log(` Agent dir: ${agentDir}`);\n\n if (agent.model) {\n const modelStr =\n typeof agent.model === \"string\"\n ? agent.model\n : agent.model.primary;\n console.log(` Model: ${modelStr}`);\n }\n\n // 绑定规则\n const agentBindings = bindings.filter((b) => b.agentId === agent.id);\n if (agentBindings.length > 0) {\n console.log(` Routing rules:`);\n for (const binding of agentBindings) {\n console.log(` - ${describeBinding(binding)}`);\n }\n }\n }\n };\n}\n\n/**\n * Adds a new agent.\n */\nfunction agentsAddAction(\n id: string,\n options: { name?: string; model?: string; default?: boolean },\n) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n\n // 检查 ID 是否已存在\n const normalizedId = normalizeAgentId(id);\n if (getAgentConfig(config, normalizedId)) {\n console.error(`Agent \"${id}\" already exists.`);\n process.exit(1);\n }\n\n const newAgent: AgentConfig = {\n id,\n name: options.name,\n model: options.model,\n default: options.default,\n };\n\n const created = await addAgent(dataDir, newAgent);\n if (!created) {\n console.error(`Agent \"${id}\" already exists.`);\n process.exit(1);\n }\n\n const agentDir = resolveAgentDir(dataDir, id);\n console.log(`Agent \"${id}\" added successfully.`);\n console.log(` Agent dir: ${agentDir}`);\n };\n}\n\n/**\n * Deletes an agent.\n */\nfunction agentsDeleteAction(id: string) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n\n const normalizedId = normalizeAgentId(id);\n const agent = getAgentConfig(config, normalizedId);\n\n if (!agent) {\n console.error(`Agent \"${id}\" not found.`);\n process.exit(1);\n }\n\n // 不允许删除默认 agent\n if (agent.default === true) {\n console.error(`Cannot delete default agent \"${id}\".`);\n process.exit(1);\n }\n\n const removed = await removeAgent(dataDir, id);\n if (!removed) {\n console.error(`Failed to delete agent \"${id}\".`);\n process.exit(1);\n }\n\n console.log(`Agent \"${id}\" deleted.`);\n };\n}\n\n/**\n * Binds a channel to an agent.\n */\nfunction agentsBindAction(options: {\n agent?: string;\n bind?: string[];\n}) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n const agentId = options.agent ?? resolveDefaultAgentId(config);\n\n // 验证 agent 存在\n if (!getAgentConfig(config, agentId)) {\n console.error(`Agent \"${agentId}\" not found.`);\n process.exit(1);\n }\n\n if (!options.bind || options.bind.length === 0) {\n console.error(\"Please specify --bind <channel>[:<account>]\");\n process.exit(1);\n }\n\n for (const bindSpec of options.bind) {\n const [channel, ...rest] = bindSpec.split(\":\");\n const accountId = rest.join(\":\");\n\n const validChannels = [\"H5\", \"WEB\", \"KLPA\", \"CRON\"];\n if (!validChannels.includes(channel)) {\n console.error(`Invalid channel: ${channel}`);\n console.error(`Valid channels: ${validChannels.join(\", \")}`);\n process.exit(1);\n }\n\n const binding: AgentBinding = {\n agentId,\n match: {\n channel: channel as \"H5\" | \"WEB\" | \"KLPA\" | \"CRON\",\n accountId: accountId || undefined,\n },\n };\n\n await addBinding(dataDir, binding);\n console.log(`Binding added: ${bindSpec} -> ${agentId}`);\n }\n };\n}\n\n/**\n * Unbinds a channel from an agent.\n */\nfunction agentsUnbindAction(options: {\n agent?: string;\n bind?: string[];\n all?: boolean;\n}) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n const agentId = options.agent ?? resolveDefaultAgentId(config);\n\n // 验证 agent 存在\n if (!getAgentConfig(config, agentId)) {\n console.error(`Agent \"${agentId}\" not found.`);\n process.exit(1);\n }\n\n if (options.all) {\n // 删除该 agent 的所有绑定\n const removed = await removeBindings(dataDir, agentId, \"*\");\n console.log(`Removed ${removed} binding(s) for agent \"${agentId}\".`);\n } else if (options.bind && options.bind.length > 0) {\n // 删除指定绑定\n let totalRemoved = 0;\n for (const bindSpec of options.bind) {\n const [channel, ...rest] = bindSpec.split(\":\");\n const accountId = rest.join(\":\");\n\n const removed = await removeBindings(\n dataDir,\n agentId,\n channel,\n accountId || undefined,\n );\n if (removed > 0) {\n console.log(`Binding removed: ${bindSpec} -> ${agentId}`);\n totalRemoved += removed;\n } else {\n console.log(`No binding found: ${bindSpec} -> ${agentId}`);\n }\n }\n } else {\n console.error('Please specify --bind <channel>[:<account>] or --all');\n process.exit(1);\n }\n };\n}\n\n/**\n * Lists routing bindings.\n */\nfunction agentsBindingsAction(options: {\n agent?: string;\n json?: boolean;\n}) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n let bindings = listBindings(config);\n\n if (options.agent) {\n bindings = bindings.filter((b) => b.agentId === options.agent);\n }\n\n if (options.json) {\n console.log(JSON.stringify(bindings, null, 2));\n return;\n }\n\n if (bindings.length === 0) {\n console.log(\"No bindings configured.\");\n return;\n }\n\n console.log(\"Routing bindings:\");\n for (const binding of bindings) {\n console.log(` ${describeBinding(binding)}`);\n }\n };\n}\n\n/**\n * Sets agent identity.\n */\nfunction agentsSetIdentityAction(options: {\n agent?: string;\n name?: string;\n emoji?: string;\n avatar?: string;\n}) {\n return async (dataDir: string) => {\n const config = await loadAgentsConfig(dataDir);\n const agentId = options.agent ?? resolveDefaultAgentId(config);\n\n // 验证 agent 存在\n if (!getAgentConfig(config, agentId)) {\n console.error(`Agent \"${agentId}\" not found.`);\n process.exit(1);\n }\n\n const updated = await updateAgentIdentity(dataDir, agentId, {\n name: options.name,\n emoji: options.emoji,\n avatar: options.avatar,\n });\n\n if (!updated) {\n console.error(`Failed to update identity for agent \"${agentId}\".`);\n process.exit(1);\n }\n\n console.log(`Identity updated for agent \"${agentId}\".`);\n };\n}\n\n/**\n * Registers all agents subcommands with the program.\n */\nexport function registerAgentsCommands(\n program: Command,\n getDataDir: () => string,\n): void {\n const agentsCmd = program\n .command(\"agents\")\n .description(\"Manage agents\");\n\n // agents list\n agentsCmd\n .command(\"list\")\n .description(\"List all configured agents\")\n .option(\"-j, --json\", \"Output as JSON\")\n .option(\"-b, --bindings\", \"Show detailed binding rules\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n await agentsListAction(opts)(dataDir);\n });\n\n // agents add\n agentsCmd\n .command(\"add <id>\")\n .description(\"Add a new agent\")\n .option(\"-n, --name <name>\", \"Display name\")\n .option(\"-m, --model <model>\", \"Model identifier\")\n .option(\"--default\", \"Mark as default agent\")\n .action(async (id, opts) => {\n const dataDir = getDataDir();\n await agentsAddAction(id, opts)(dataDir);\n });\n\n // agents delete\n agentsCmd\n .command(\"delete <id>\")\n .description(\"Delete an agent\")\n .action(async (id) => {\n const dataDir = getDataDir();\n await agentsDeleteAction(id)(dataDir);\n });\n\n // agents bind\n agentsCmd\n .command(\"bind\")\n .description(\"Bind a channel to an agent\")\n .option(\"-a, --agent <id>\", \"Target agent ID\")\n .option(\"-b, --bind <channel...>\", \"Channel binding (e.g., WEB, KLPA:ops)\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n await agentsBindAction(opts)(dataDir);\n });\n\n // agents unbind\n agentsCmd\n .command(\"unbind\")\n .description(\"Unbind a channel from an agent\")\n .option(\"-a, --agent <id>\", \"Target agent ID\")\n .option(\"-b, --bind <channel...>\", \"Channel binding to remove\")\n .option(\"--all\", \"Remove all bindings for the agent\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n await agentsUnbindAction(opts)(dataDir);\n });\n\n // agents bindings\n agentsCmd\n .command(\"bindings\")\n .description(\"List routing bindings\")\n .option(\"-a, --agent <id>\", \"Filter by agent ID\")\n .option(\"-j, --json\", \"Output as JSON\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n await agentsBindingsAction(opts)(dataDir);\n });\n\n // agents set-identity\n agentsCmd\n .command(\"set-identity\")\n .description(\"Set agent identity\")\n .option(\"-a, --agent <id>\", \"Target agent ID\")\n .option(\"-n, --name <name>\", \"Agent name\")\n .option(\"-e, --emoji <emoji>\", \"Agent emoji\")\n .option(\"--avatar <path>\", \"Avatar path\")\n .action(async (opts) => {\n const dataDir = getDataDir();\n await agentsSetIdentityAction(opts)(dataDir);\n });\n}\n","import type { Command } from \"commander\";\nimport path from \"node:path\";\nimport {\n initializePluginSystem,\n normalizePluginsConfig,\n type PluginsConfig,\n type PluginRecord,\n} from \"@pingclaw/agents\";\nimport { loadPluginsConfig, savePluginsConfig } from \"../plugins-config.js\";\nimport { writeError, writeLine } from \"../output.js\";\n\nfunction resolveWorkspaceDir(dataDir: string): string {\n return path.join(dataDir, \"workspace\");\n}\n\nfunction resolveBundledDir(): string | undefined {\n const raw = process.env.PINGCLAW_PLUGINS_BUNDLED_DIR;\n return raw ? raw.trim() || undefined : undefined;\n}\n\nfunction printPluginList(records: PluginRecord[]): void {\n if (records.length === 0) {\n writeLine(\"No plugins discovered.\");\n return;\n }\n for (const record of records) {\n const status = record.status.padEnd(8, \" \");\n writeLine(`${record.id} ${status} ${record.origin} ${record.source}`);\n }\n}\n\nfunction printPluginInfo(record: PluginRecord): void {\n writeLine(`id: ${record.id}`);\n writeLine(`status: ${record.status}`);\n writeLine(`origin: ${record.origin}`);\n writeLine(`source: ${record.source}`);\n writeLine(`enabled: ${record.enabled}`);\n if (record.error) {\n writeLine(`error: ${record.error}`);\n }\n writeLine(`tools: ${record.toolCount}`);\n writeLine(`hooks: ${record.hookCount}`);\n if (record.skills.length > 0) {\n writeLine(`skills: ${record.skills.join(\", \")}`);\n }\n}\n\nfunction normalizeAllowlist(list: string[] | undefined): string[] {\n return Array.from(\n new Set((list ?? []).map((entry) => entry.trim()).filter(Boolean)),\n );\n}\n\nfunction printAllowlist(list: string[]): void {\n if (list.length === 0) {\n writeLine(\"LLM allowlist is empty.\");\n return;\n }\n for (const entry of list) {\n writeLine(entry);\n }\n}\n\nexport function registerPluginsCommand(program: Command, getDataDir: () => string): void {\n const cmd = program.command(\"plugins\").description(\"Manage PingClaw plugins\");\n\n cmd\n .command(\"list\")\n .description(\"List discovered plugins\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = await loadPluginsConfig(dataDir);\n const system = initializePluginSystem({\n config,\n dataDir,\n workspaceDir: resolveWorkspaceDir(dataDir),\n bundledDir: resolveBundledDir(),\n });\n printPluginList(system.registry.plugins);\n });\n\n cmd\n .command(\"info\")\n .description(\"Show plugin details\")\n .argument(\"<id>\", \"Plugin id\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (id: string, options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = await loadPluginsConfig(dataDir);\n const system = initializePluginSystem({\n config,\n dataDir,\n workspaceDir: resolveWorkspaceDir(dataDir),\n bundledDir: resolveBundledDir(),\n });\n const record = system.registry.plugins.find((entry) => entry.id === id);\n if (!record) {\n writeError(`Plugin not found: ${id}`);\n process.exit(1);\n }\n printPluginInfo(record);\n });\n\n cmd\n .command(\"enable\")\n .description(\"Enable a plugin\")\n .argument(\"<id>\", \"Plugin id\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (id: string, options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = (await loadPluginsConfig(dataDir)) ?? {};\n const normalized = normalizePluginsConfig(config);\n const system = initializePluginSystem({\n config,\n dataDir,\n workspaceDir: resolveWorkspaceDir(dataDir),\n bundledDir: resolveBundledDir(),\n });\n const exists = system.registry.plugins.some((entry) => entry.id === id);\n if (!exists) {\n writeError(`Plugin not found: ${id}`);\n process.exit(1);\n }\n const updated: PluginsConfig = {\n ...config,\n entries: {\n ...config.entries,\n [id]: { ...(config.entries?.[id] ?? {}), enabled: true },\n },\n };\n await savePluginsConfig(dataDir, updated);\n writeLine(`Enabled ${id}`);\n if (normalized.allow.length > 0 && !normalized.allow.includes(id)) {\n writeLine(\"Note: plugins.allow is set; add this plugin id to allowlist if needed.\");\n }\n });\n\n cmd\n .command(\"disable\")\n .description(\"Disable a plugin\")\n .argument(\"<id>\", \"Plugin id\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (id: string, options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = (await loadPluginsConfig(dataDir)) ?? {};\n const system = initializePluginSystem({\n config,\n dataDir,\n workspaceDir: resolveWorkspaceDir(dataDir),\n bundledDir: resolveBundledDir(),\n });\n const exists = system.registry.plugins.some((entry) => entry.id === id);\n if (!exists) {\n writeError(`Plugin not found: ${id}`);\n process.exit(1);\n }\n const updated: PluginsConfig = {\n ...config,\n entries: {\n ...config.entries,\n [id]: { ...(config.entries?.[id] ?? {}), enabled: false },\n },\n };\n await savePluginsConfig(dataDir, updated);\n writeLine(`Disabled ${id}`);\n });\n\n cmd\n .command(\"doctor\")\n .description(\"Validate plugin configuration\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = await loadPluginsConfig(dataDir);\n const system = initializePluginSystem({\n config,\n dataDir,\n workspaceDir: resolveWorkspaceDir(dataDir),\n bundledDir: resolveBundledDir(),\n });\n if (system.diagnostics.length === 0) {\n writeLine(\"No plugin issues detected.\");\n return;\n }\n for (const diag of system.diagnostics) {\n const prefix = diag.level === \"error\" ? \"ERROR\" : \"WARN\";\n const id = diag.pluginId ? ` ${diag.pluginId}` : \"\";\n writeLine(`${prefix}${id}: ${diag.message}`);\n }\n const hasError = system.diagnostics.some((d) => d.level === \"error\");\n if (hasError) {\n process.exit(1);\n }\n });\n\n const llmCmd = cmd.command(\"llm-allow\").description(\"Manage plugin LLM allowlist\");\n\n llmCmd\n .command(\"list\")\n .description(\"List LLM allowlist entries\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = await loadPluginsConfig(dataDir);\n const allowlist = normalizeAllowlist(config?.llmAllowlist);\n printAllowlist(allowlist);\n });\n\n llmCmd\n .command(\"add\")\n .description(\"Add entries to the LLM allowlist (plugin id or tool name)\")\n .argument(\"<entry...>\", \"Plugin id or tool name\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (entries: string[], options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = (await loadPluginsConfig(dataDir)) ?? {};\n const allowlist = normalizeAllowlist([...((config.llmAllowlist ?? [])), ...entries]);\n const updated: PluginsConfig = {\n ...config,\n llmAllowlist: allowlist,\n };\n await savePluginsConfig(dataDir, updated);\n writeLine(`LLM allowlist updated (${allowlist.length} entries).`);\n });\n\n llmCmd\n .command(\"remove\")\n .description(\"Remove entries from the LLM allowlist\")\n .argument(\"<entry...>\", \"Plugin id or tool name\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (entries: string[], options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = (await loadPluginsConfig(dataDir)) ?? {};\n const removeSet = new Set(entries.map((entry) => entry.trim()).filter(Boolean));\n const current = normalizeAllowlist(config.llmAllowlist);\n const allowlist = current.filter((entry) => !removeSet.has(entry));\n const updated: PluginsConfig = {\n ...config,\n llmAllowlist: allowlist,\n };\n await savePluginsConfig(dataDir, updated);\n writeLine(`LLM allowlist updated (${allowlist.length} entries).`);\n });\n\n llmCmd\n .command(\"clear\")\n .description(\"Clear the LLM allowlist\")\n .option(\"-d, --data-dir <path>\", \"Data directory path\")\n .action(async (options: { dataDir?: string }) => {\n const dataDir = options.dataDir ?? getDataDir();\n const config = (await loadPluginsConfig(dataDir)) ?? {};\n const updated: PluginsConfig = {\n ...config,\n llmAllowlist: [],\n };\n await savePluginsConfig(dataDir, updated);\n writeLine(\"LLM allowlist cleared.\");\n });\n}\n","/**\n * Commander program setup for @pingclaw/cli.\n * Exported separately from the binary entrypoint to allow unit testing.\n */\n\nimport { Command } from \"commander\";\nimport { registerBootstrapCommand } from \"./commands/bootstrap.js\";\nimport { registerRunCommand } from \"./commands/run.js\";\nimport { registerSessionsCommand } from \"./commands/sessions.js\";\nimport { registerMemoryCommand } from \"./commands/memory.js\";\nimport { registerAgentsCommands } from \"./commands/agents.js\";\nimport { registerPluginsCommand } from \"./commands/plugins.js\";\nimport { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\nconst cliPackage = require(\"../package.json\") as { version: string };\n\n/**\n * Resolves the data directory from environment or current working directory.\n */\nexport function getDataDir(): string {\n return process.env.PINGCLAW_DATA_DIR || process.cwd();\n}\n\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name(\"pingclaw\")\n .description(\"PingClaw CLI — runs agent tasks in a containerized environment\")\n .version(cliPackage.version);\n\n registerRunCommand(program);\n registerSessionsCommand(program);\n registerBootstrapCommand(program);\n registerMemoryCommand(program);\n registerAgentsCommands(program, getDataDir);\n registerPluginsCommand(program, getDataDir);\n\n return program;\n}\n"],"mappings":"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"}
|
package/dist/program.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,aAAa,IAAI,OAAO,CAiBvC"}
|
package/dist/program.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAErE;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,6DAA6D,CAAC;SAC1E,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC5C,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAE5C,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
export type RunMessageInput = {
|
|
2
|
-
kind: "text";
|
|
3
|
-
message: string;
|
|
4
|
-
} | {
|
|
5
|
-
kind: "messages";
|
|
6
|
-
messages: StructuredMessages;
|
|
7
|
-
};
|
|
8
|
-
type TextContent = {
|
|
9
|
-
type: "text";
|
|
10
|
-
text: string;
|
|
11
|
-
textSignature?: string;
|
|
12
|
-
};
|
|
13
|
-
type ImageContent = {
|
|
14
|
-
type: "image";
|
|
15
|
-
data: string;
|
|
16
|
-
mimeType: string;
|
|
17
|
-
};
|
|
18
|
-
type ThinkingContent = {
|
|
19
|
-
type: "thinking";
|
|
20
|
-
thinking: string;
|
|
21
|
-
thinkingSignature?: string;
|
|
22
|
-
redacted?: boolean;
|
|
23
|
-
};
|
|
24
|
-
type ToolCallContent = {
|
|
25
|
-
type: "toolCall";
|
|
26
|
-
id: string;
|
|
27
|
-
name: string;
|
|
28
|
-
arguments: Record<string, unknown>;
|
|
29
|
-
thoughtSignature?: string;
|
|
30
|
-
};
|
|
31
|
-
type MessageUsage = {
|
|
32
|
-
input: number;
|
|
33
|
-
output: number;
|
|
34
|
-
cacheRead: number;
|
|
35
|
-
cacheWrite: number;
|
|
36
|
-
totalTokens: number;
|
|
37
|
-
cost: {
|
|
38
|
-
input: number;
|
|
39
|
-
output: number;
|
|
40
|
-
cacheRead: number;
|
|
41
|
-
cacheWrite: number;
|
|
42
|
-
total: number;
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
type StructuredMessage = {
|
|
46
|
-
role: "user";
|
|
47
|
-
content: string | Array<TextContent | ImageContent>;
|
|
48
|
-
} | {
|
|
49
|
-
role: "assistant";
|
|
50
|
-
content: Array<TextContent | ThinkingContent | ToolCallContent>;
|
|
51
|
-
api: string;
|
|
52
|
-
provider: string;
|
|
53
|
-
model: string;
|
|
54
|
-
usage: MessageUsage;
|
|
55
|
-
stopReason: "stop" | "length" | "toolUse" | "error" | "aborted";
|
|
56
|
-
errorMessage?: string;
|
|
57
|
-
} | {
|
|
58
|
-
role: "toolResult";
|
|
59
|
-
toolCallId: string;
|
|
60
|
-
toolName: string;
|
|
61
|
-
content: Array<TextContent | ImageContent>;
|
|
62
|
-
details?: unknown;
|
|
63
|
-
isError: boolean;
|
|
64
|
-
};
|
|
65
|
-
export type StructuredMessages = StructuredMessage[];
|
|
66
|
-
export declare function loadMessagesFromFile(filePath: string): Promise<StructuredMessages>;
|
|
67
|
-
export declare function resolveRunMessageInput(options: {
|
|
68
|
-
message?: string;
|
|
69
|
-
fromFile?: string;
|
|
70
|
-
}): Promise<RunMessageInput>;
|
|
71
|
-
export {};
|
|
72
|
-
//# sourceMappingURL=message-input.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-input.d.ts","sourceRoot":"","sources":["../../src/utils/message-input.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAEvD,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1E,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AACtE,KAAK,eAAe,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAC9G,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AACF,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AACF,KAAK,iBAAiB,GAClB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC;CACrD,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,eAAe,GAAG,eAAe,CAAC,CAAC;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AACN,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;AA8FrD,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqBxF;AAED,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB3B"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs/promises";
|
|
2
|
-
function isRecord(value) {
|
|
3
|
-
return typeof value === "object" && value !== null;
|
|
4
|
-
}
|
|
5
|
-
function isTextContent(value) {
|
|
6
|
-
return isRecord(value)
|
|
7
|
-
&& value.type === "text"
|
|
8
|
-
&& typeof value.text === "string"
|
|
9
|
-
&& (value.textSignature === undefined || typeof value.textSignature === "string");
|
|
10
|
-
}
|
|
11
|
-
function isImageContent(value) {
|
|
12
|
-
return isRecord(value)
|
|
13
|
-
&& value.type === "image"
|
|
14
|
-
&& typeof value.data === "string"
|
|
15
|
-
&& typeof value.mimeType === "string";
|
|
16
|
-
}
|
|
17
|
-
function isThinkingContent(value) {
|
|
18
|
-
return isRecord(value)
|
|
19
|
-
&& value.type === "thinking"
|
|
20
|
-
&& typeof value.thinking === "string"
|
|
21
|
-
&& (value.thinkingSignature === undefined || typeof value.thinkingSignature === "string")
|
|
22
|
-
&& (value.redacted === undefined || typeof value.redacted === "boolean");
|
|
23
|
-
}
|
|
24
|
-
function isToolCallContent(value) {
|
|
25
|
-
return isRecord(value)
|
|
26
|
-
&& value.type === "toolCall"
|
|
27
|
-
&& typeof value.id === "string"
|
|
28
|
-
&& typeof value.name === "string"
|
|
29
|
-
&& isRecord(value.arguments)
|
|
30
|
-
&& (value.thoughtSignature === undefined || typeof value.thoughtSignature === "string");
|
|
31
|
-
}
|
|
32
|
-
function isUserContent(value) {
|
|
33
|
-
return typeof value === "string" || (Array.isArray(value) && value.every((item) => isTextContent(item) || isImageContent(item)));
|
|
34
|
-
}
|
|
35
|
-
function isAssistantContent(value) {
|
|
36
|
-
return Array.isArray(value) && value.every((item) => isTextContent(item) || isThinkingContent(item) || isToolCallContent(item));
|
|
37
|
-
}
|
|
38
|
-
function isUsage(value) {
|
|
39
|
-
return isRecord(value)
|
|
40
|
-
&& typeof value.input === "number"
|
|
41
|
-
&& typeof value.output === "number"
|
|
42
|
-
&& typeof value.cacheRead === "number"
|
|
43
|
-
&& typeof value.cacheWrite === "number"
|
|
44
|
-
&& typeof value.totalTokens === "number"
|
|
45
|
-
&& isRecord(value.cost)
|
|
46
|
-
&& typeof value.cost.input === "number"
|
|
47
|
-
&& typeof value.cost.output === "number"
|
|
48
|
-
&& typeof value.cost.cacheRead === "number"
|
|
49
|
-
&& typeof value.cost.cacheWrite === "number"
|
|
50
|
-
&& typeof value.cost.total === "number";
|
|
51
|
-
}
|
|
52
|
-
function isStructuredMessage(value) {
|
|
53
|
-
if (!isRecord(value) || typeof value.role !== "string") {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
if (value.role === "user") {
|
|
57
|
-
return isUserContent(value.content);
|
|
58
|
-
}
|
|
59
|
-
if (value.role === "assistant") {
|
|
60
|
-
return isAssistantContent(value.content)
|
|
61
|
-
&& typeof value.api === "string"
|
|
62
|
-
&& typeof value.provider === "string"
|
|
63
|
-
&& typeof value.model === "string"
|
|
64
|
-
&& isUsage(value.usage)
|
|
65
|
-
&& (value.stopReason === "stop"
|
|
66
|
-
|| value.stopReason === "length"
|
|
67
|
-
|| value.stopReason === "toolUse"
|
|
68
|
-
|| value.stopReason === "error"
|
|
69
|
-
|| value.stopReason === "aborted")
|
|
70
|
-
&& (value.errorMessage === undefined || typeof value.errorMessage === "string");
|
|
71
|
-
}
|
|
72
|
-
if (value.role === "toolResult") {
|
|
73
|
-
return typeof value.toolCallId === "string"
|
|
74
|
-
&& typeof value.toolName === "string"
|
|
75
|
-
&& Array.isArray(value.content)
|
|
76
|
-
&& value.content.every((item) => isTextContent(item) || isImageContent(item))
|
|
77
|
-
&& typeof value.isError === "boolean";
|
|
78
|
-
}
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
export async function loadMessagesFromFile(filePath) {
|
|
82
|
-
let raw;
|
|
83
|
-
try {
|
|
84
|
-
raw = await fs.readFile(filePath, "utf-8");
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
throw new Error(`Failed to read message file: ${err.message}`);
|
|
88
|
-
}
|
|
89
|
-
let parsed;
|
|
90
|
-
try {
|
|
91
|
-
parsed = JSON.parse(raw);
|
|
92
|
-
}
|
|
93
|
-
catch (err) {
|
|
94
|
-
throw new Error(`Invalid JSON in message file: ${err.message}`);
|
|
95
|
-
}
|
|
96
|
-
const messages = Array.isArray(parsed) ? parsed : [parsed];
|
|
97
|
-
if (messages.length === 0 || !messages.every((message) => isStructuredMessage(message))) {
|
|
98
|
-
throw new Error("Message file must contain one Message object or an array of Message objects");
|
|
99
|
-
}
|
|
100
|
-
return messages;
|
|
101
|
-
}
|
|
102
|
-
export async function resolveRunMessageInput(options) {
|
|
103
|
-
if (Boolean(options.message) === Boolean(options.fromFile)) {
|
|
104
|
-
throw new Error("Exactly one of --message or --from-file must be provided");
|
|
105
|
-
}
|
|
106
|
-
if (options.fromFile) {
|
|
107
|
-
return {
|
|
108
|
-
kind: "messages",
|
|
109
|
-
messages: await loadMessagesFromFile(options.fromFile),
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
return {
|
|
113
|
-
kind: "text",
|
|
114
|
-
message: options.message,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=message-input.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-input.js","sourceRoot":"","sources":["../../src/utils/message-input.ts"],"names":[],"mappings":"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"}
|