@di-code/coding-agent 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/core/session/session-manager.d.ts +18 -1
- package/dist/core/session/session-manager.d.ts.map +1 -1
- package/dist/core/session/session-manager.js +90 -1
- package/dist/core/session/session-manager.js.map +1 -1
- package/dist/core/session/session-storage.d.ts +2 -0
- package/dist/core/session/session-storage.d.ts.map +1 -1
- package/dist/core/session/session-storage.js +22 -1
- package/dist/core/session/session-storage.js.map +1 -1
- package/dist/core/session/types.d.ts +16 -1
- package/dist/core/session/types.d.ts.map +1 -1
- package/dist/core/session/types.js.map +1 -1
- package/dist/core/session.d.ts +27 -2
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +59 -0
- package/dist/core/session.js.map +1 -1
- package/dist/entry.js +1 -1
- package/dist/entry.js.map +1 -1
- package/dist/i18n.js +4 -4
- package/dist/i18n.js.map +1 -1
- package/dist/interactive-host-entry.d.ts.map +1 -1
- package/dist/interactive-host-entry.js +107 -12
- package/dist/interactive-host-entry.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +3 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive-components.d.ts +8 -0
- package/dist/modes/interactive-components.d.ts.map +1 -1
- package/dist/modes/interactive-components.js +7 -2
- package/dist/modes/interactive-components.js.map +1 -1
- package/dist/modes/interactive.d.ts +4 -0
- package/dist/modes/interactive.d.ts.map +1 -1
- package/dist/modes/interactive.js +69 -0
- package/dist/modes/interactive.js.map +1 -1
- package/dist/modes/tree-selector.d.ts.map +1 -1
- package/dist/modes/tree-selector.js +4 -0
- package/dist/modes/tree-selector.js.map +1 -1
- package/dist/rpc/client.d.ts +2 -0
- package/dist/rpc/client.d.ts.map +1 -1
- package/dist/rpc/client.js +3 -0
- package/dist/rpc/client.js.map +1 -1
- package/dist/rpc/dispatcher.d.ts +14 -0
- package/dist/rpc/dispatcher.d.ts.map +1 -1
- package/dist/rpc/dispatcher.js +222 -7
- package/dist/rpc/dispatcher.js.map +1 -1
- package/dist/rpc/protocol.d.ts +12 -5
- package/dist/rpc/protocol.d.ts.map +1 -1
- package/dist/rpc/protocol.js +34 -0
- package/dist/rpc/protocol.js.map +1 -1
- package/dist/rpc/server.d.ts +5 -0
- package/dist/rpc/server.d.ts.map +1 -1
- package/dist/rpc/server.js +4 -0
- package/dist/rpc/server.js.map +1 -1
- package/dist/rpc-server-entry.d.ts.map +1 -1
- package/dist/rpc-server-entry.js +15 -1
- package/dist/rpc-server-entry.js.map +1 -1
- package/dist/runtime/product-host.d.ts +7 -0
- package/dist/runtime/product-host.d.ts.map +1 -1
- package/dist/runtime/product-host.js +29 -9
- package/dist/runtime/product-host.js.map +1 -1
- package/dist/runtime/session-factory.d.ts +18 -2
- package/dist/runtime/session-factory.d.ts.map +1 -1
- package/dist/runtime/session-factory.js +286 -24
- package/dist/runtime/session-factory.js.map +1 -1
- package/dist/runtime/session-host.d.ts +46 -1
- package/dist/runtime/session-host.d.ts.map +1 -1
- package/dist/runtime/session-host.js +38 -6
- package/dist/runtime/session-host.js.map +1 -1
- package/dist/ui-host.d.ts.map +1 -1
- package/dist/ui-host.js +3 -0
- package/dist/ui-host.js.map +1 -1
- package/dist/web/assets/index-C2SOU925.css +1 -0
- package/dist/web/assets/index-knXkInvO.js +41 -0
- package/dist/web/assets/index-knXkInvO.js.map +1 -0
- package/dist/web/index.html +2 -2
- package/dist/web-command.d.ts.map +1 -1
- package/dist/web-command.js +8 -1
- package/dist/web-command.js.map +1 -1
- package/dist/webui-entry.js +9 -1
- package/dist/webui-entry.js.map +1 -1
- package/dist/webui.d.ts +10 -0
- package/dist/webui.d.ts.map +1 -1
- package/dist/webui.js +21 -0
- package/dist/webui.js.map +1 -1
- package/package.json +11 -9
- package/dist/web/assets/index-C-NyCPxd.css +0 -1
- package/dist/web/assets/index-DgyxuNNG.js +0 -41
- package/dist/web/assets/index-DgyxuNNG.js.map +0 -1
package/dist/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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","sourcesContent":["export type Locale = \"en\" | \"zh-CN\";\n\nexport const DEFAULT_LOCALE: Locale = \"en\";\n\ntype Message = string | ((...values: string[]) => string);\n\nconst MESSAGES: Record<Locale, Record<string, Message>> = {\n\ten: {\n\t\tusage: \"Usage: di-code [options] <prompt>\",\n\t\toptions: \"Options:\",\n\t\tprint: \"Print only the final assistant text (default)\",\n\t\tmode: \"Output mode: print, json, or interactive\",\n\t\tinteractive: \"Start interactive terminal mode\",\n\t\tcontinueSession: \"Continue the most recently modified session\",\n\t\tsession: \"Create or resume a JSONL session (relative to the work root)\",\n\t\timage: \"Attach a local PNG, JPEG, WebP, or GIF image (repeatable)\",\n\t\tskill: \"Add a SKILL.md file or skill directory (repeatable)\",\n\t\tnoSkills: \"Disable all Skill loading\",\n\t\tnoContextFiles: \"Disable AGENTS.md discovery and loading\",\n\t\ttrustProject: \"Persist trust for project-local Skill discovery\",\n\t\tuntrustProject: \"Persist denial for project-local Skill discovery\",\n\t\tplugin: \"Install, list, enable, disable, update, or remove a plugin\",\n\t\tmcp: \"Manage MCP configuration (add <id> -- <command> defaults to local stdio)\",\n\t\thelp: \"Show help\",\n\t\tversion: \"Show version\",\n\t\tcommands: \"commands\",\n\t\tcomplete: \"complete\",\n\t\tworking: \"WORKING\",\n\t\tready: \"READY\",\n\t\terror: \"ERROR\",\n\t\tcompacting: \"COMPACTING\",\n\t\tretrying: \"RETRYING\",\n\t\tthinking: \"Thinking\",\n\t\tactivity: \"Activity\",\n\t\tqueue: (count) => `Queue (${count})`,\n\t\terrorPrefix: \"Error\",\n\t\tedited: \"Edited\",\n\t\twrote: \"Wrote\",\n\t\tearlierToolUpdates: (count) => `${count} earlier tool updates`,\n\t\tmessages: (count) => `${count} messages`,\n\t\tcontext: \"ctx\",\n\t\ttotal: \"total\",\n\t\ttokens: \"tok\",\n\t\tsend: \"send\",\n\t\tpasteImage: \"paste image\",\n\t\tthinkingShortcut: \"thinking\",\n\t\tcancel: \"cancel\",\n\t\tcancelled: \"Cancelled\",\n\t\tmodel: \"model\",\n\t\timageShortcut: \"image\",\n\t\tlanguage: \"Language\",\n\t\tsettings: \"Settings\",\n\t\tenglish: \"English\",\n\t\tchinese: \"中文\",\n\t\tcontextCompaction: \"Context compaction\",\n\t\ton: \"on\",\n\t\toff: \"off\",\n\t\tcompactionUnavailable: \"compaction unavailable without a persisted session\",\n\t\tvisibleMessagesCleared: \"visible messages cleared\",\n\t\tnothingToRetry: \"nothing to retry\",\n\t\tmanualCompactionStarting: \"starting manual compaction\",\n\t\tmanualCompactionComplete: \"manual compaction complete\",\n\t\tcurrentSession: \"Current session\",\n\t\tinMemorySession: \"In-memory session\",\n\t\tnewSession: \"New session\",\n\t\tnewSessionDescription: \"Start a new persistent conversation.\",\n\t\tdark: \"Dark\",\n\t\tlight: \"Light\",\n\t\tdarkTheme: \"Dark terminal theme\",\n\t\tlightTheme: \"Light terminal theme\",\n\t\topenModelSelector: \"Open the model selector\",\n\t\topenSessionSelector: \"Open the session selector\",\n\t\topenTreeSelector: \"Browse the current session tree\",\n\t\ttreeTitle: \"Branch tree\",\n\t\ttreeNodes: \"Branches\",\n\t\ttreePreview: \"Preview\",\n\t\ttreeEmpty: \"The current session has no history nodes.\",\n\t\ttreeActiveLeaf: \"active leaf\",\n\t\ttreeBranchNode: \"branch node\",\n\t\ttreeImagesOmitted: \"Images are not restored when editing this prompt.\",\n\t\ttreeContinue: \"Continue\",\n\t\ttreeEdit: \"Edit prompt\",\n\t\ttreeSummarize: \"Summarize + branch\",\n\t\ttreeCancel: \"Cancel\",\n\t\topenThemeSelector: \"Open the theme selector\",\n\t\topenSettingsSelector: \"Open the settings selector\",\n\t\tshowInteractiveCommands: \"Show interactive commands\",\n\t\tclearVisibleMessages: \"Clear visible messages\",\n\t\tchooseProvider: \"Choose a Provider and save its global API key\",\n\t\tremoveProviderKey: \"Remove the current Provider global API key\",\n\t\tcompactContext: \"Compact the persisted context now\",\n\t\tshowUsage: \"Show token and cost usage\",\n\t\tretryPrompt: \"Retry the last failed prompt\",\n\t\tsteerAgent: \"Steer the running agent\",\n\t\tproviderSetup: \"di-code provider setup\",\n\t\tlogin: \"di-code login\",\n\t\tselectProvider: \"Select a provider:\",\n\t\tselectProviderModel: (provider) => `Select a ${provider} model:`,\n\t\tenterApiKey: (name) => `Enter ${name} (input is hidden):`,\n\t\tapiKeyRequired: \"API key cannot be empty. Press Escape to cancel.\",\n\t\tproviderSetupCancelled: \"Provider setup cancelled.\",\n\t\tproviderConfigured: \"Provider configured for this run.\",\n\t\tproviderSetupFailed: \"Provider setup failed.\",\n\t\treasoning: \"reasoning\",\n\t\tfauxProvider: \"Deterministic local provider\",\n\t\tcustomProvider: \"Custom\",\n\t\tcustomProviderDescription: \"Configure a compatible gateway or private endpoint\",\n\t\tselectCustomApi: \"Select an API protocol:\",\n\t\tenterCustomBaseUrl: \"Enter the API base URL (for example, https://gateway.example.com/v1):\",\n\t\tenterCustomApiKey: \"Enter API key (input is hidden):\",\n\t\tenterCustomModelId: \"Enter model ID:\",\n\t\tmodelIdRequired: \"Model ID cannot be empty. Press Escape to cancel.\",\n\t\tcustomBaseUrlInvalid: \"Base URL is invalid.\",\n\t},\n\t\"zh-CN\": {\n\t\tusage: \"用法:di-code [选项] <提示词>\",\n\t\toptions: \"选项:\",\n\t\tprint: \"只输出最终 assistant 文本(默认)\",\n\t\tmode: \"输出模式:print、json 或 interactive\",\n\t\tinteractive: \"启动交互式终端模式\",\n\t\tcontinueSession: \"继续最近修改的会话\",\n\t\tsession: \"创建或恢复 JSONL 会话(相对工作根目录)\",\n\t\timage: \"附加本地 PNG、JPEG、WebP 或 GIF 图片(可重复)\",\n\t\tskill: \"加载一个 SKILL.md 文件或技能目录(可重复)\",\n\t\tnoSkills: \"禁用所有 Skill 加载\",\n\t\tnoContextFiles: \"禁用 AGENTS.md 发现和加载\",\n\t\ttrustProject: \"保存对项目本地 Skill 的信任\",\n\t\tuntrustProject: \"保存对项目本地 Skill 的拒绝\",\n\t\tplugin: \"安装、列出、启用、禁用、更新或移除插件\",\n\t\tmcp: \"管理 MCP 配置(add <id> -- <command> 默认为本地 stdio)\",\n\t\thelp: \"显示帮助\",\n\t\tversion: \"显示版本\",\n\t\tcommands: \"命令\",\n\t\tcomplete: \"补全\",\n\t\tworking: \"工作中\",\n\t\tready: \"就绪\",\n\t\terror: \"错误\",\n\t\tcompacting: \"压缩中\",\n\t\tretrying: \"重试中\",\n\t\tthinking: \"思考中\",\n\t\tactivity: \"活动\",\n\t\tqueue: (count) => `队列(${count})`,\n\t\terrorPrefix: \"错误\",\n\t\tedited: \"已编辑\",\n\t\twrote: \"已写入\",\n\t\tearlierToolUpdates: (count) => `之前还有 ${count} 条工具更新`,\n\t\tmessages: (count) => `${count} 条消息`,\n\t\tcontext: \"上下文\",\n\t\ttotal: \"总计\",\n\t\ttokens: \"token\",\n\t\tsend: \"发送\",\n\t\tpasteImage: \"粘贴图片\",\n\t\tthinkingShortcut: \"思考\",\n\t\tcancel: \"取消\",\n\t\tcancelled: \"已取消\",\n\t\tmodel: \"模型\",\n\t\timageShortcut: \"图片\",\n\t\tlanguage: \"语言\",\n\t\tsettings: \"设置\",\n\t\tenglish: \"English\",\n\t\tchinese: \"中文\",\n\t\tcontextCompaction: \"上下文压缩\",\n\t\ton: \"开\",\n\t\toff: \"关\",\n\t\tcompactionUnavailable: \"没有持久化会话,无法进行上下文压缩\",\n\t\tvisibleMessagesCleared: \"已清除可见消息\",\n\t\tnothingToRetry: \"没有可重试的内容\",\n\t\tmanualCompactionStarting: \"开始手动压缩\",\n\t\tmanualCompactionComplete: \"手动压缩完成\",\n\t\tcurrentSession: \"当前会话\",\n\t\tinMemorySession: \"内存会话\",\n\t\tnewSession: \"新建会话\",\n\t\tnewSessionDescription: \"开始新的持久化对话。\",\n\t\tdark: \"深色\",\n\t\tlight: \"浅色\",\n\t\tdarkTheme: \"深色终端主题\",\n\t\tlightTheme: \"浅色终端主题\",\n\t\topenModelSelector: \"打开模型选择器\",\n\t\topenSessionSelector: \"打开会话选择器\",\n\t\topenTreeSelector: \"浏览当前会话树\",\n\t\ttreeTitle: \"分支树\",\n\t\ttreeNodes: \"分支\",\n\t\ttreePreview: \"预览\",\n\t\ttreeEmpty: \"当前会话还没有历史节点。\",\n\t\ttreeActiveLeaf: \"当前叶节点\",\n\t\ttreeBranchNode: \"分支节点\",\n\t\ttreeImagesOmitted: \"编辑此提示词时不会恢复图片。\",\n\t\ttreeContinue: \"从此处继续\",\n\t\ttreeEdit: \"编辑提示词\",\n\t\ttreeSummarize: \"摘要后分支\",\n\t\ttreeCancel: \"取消\",\n\t\topenThemeSelector: \"打开主题选择器\",\n\t\topenSettingsSelector: \"打开设置选择器\",\n\t\tshowInteractiveCommands: \"显示交互命令\",\n\t\tclearVisibleMessages: \"清除可见消息\",\n\t\tchooseProvider: \"选择 Provider 并保存全局 API key\",\n\t\tremoveProviderKey: \"移除当前 Provider 的全局 API key\",\n\t\tcompactContext: \"立即压缩持久化上下文\",\n\t\tshowUsage: \"显示 token 和费用用量\",\n\t\tretryPrompt: \"重试上次失败的提示词\",\n\t\tsteerAgent: \"调整运行中的 Agent\",\n\t\tproviderSetup: \"di-code Provider 设置\",\n\t\tlogin: \"di-code 登录\",\n\t\tselectProvider: \"选择 Provider:\",\n\t\tselectProviderModel: (provider) => `选择 ${provider} 模型:`,\n\t\tenterApiKey: (name) => `输入 ${name}(输入内容会隐藏):`,\n\t\tapiKeyRequired: \"API key 不能为空。按 Escape 取消。\",\n\t\tproviderSetupCancelled: \"已取消 Provider 设置。\",\n\t\tproviderConfigured: \"已为本次运行配置 Provider。\",\n\t\tproviderSetupFailed: \"Provider 设置失败。\",\n\t\treasoning: \"推理\",\n\t\tfauxProvider: \"确定性的本地 Provider\",\n\t\tcustomProvider: \"Custom\",\n\t\tcustomProviderDescription: \"配置兼容网关或私有 endpoint\",\n\t\tselectCustomApi: \"选择 API 协议:\",\n\t\tenterCustomBaseUrl: \"输入 API 根地址(例如 https://gateway.example.com/v1):\",\n\t\tenterCustomApiKey: \"输入 API key(输入内容会隐藏):\",\n\t\tenterCustomModelId: \"输入模型 ID:\",\n\t\tmodelIdRequired: \"模型 ID 不能为空。按 Escape 取消。\",\n\t\tcustomBaseUrlInvalid: \"Base URL 无效。\",\n\t},\n};\n\nexport function isLocale(value: unknown): value is Locale {\n\treturn value === \"en\" || value === \"zh-CN\";\n}\n\nexport function translate(locale: Locale, key: string, ...values: string[]): string {\n\tconst message = MESSAGES[locale][key] ?? MESSAGES[DEFAULT_LOCALE][key] ?? key;\n\treturn typeof message === \"function\" ? message(...values) : message;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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","sourcesContent":["export type Locale = \"en\" | \"zh-CN\";\n\nexport const DEFAULT_LOCALE: Locale = \"en\";\n\ntype Message = string | ((...values: string[]) => string);\n\nconst MESSAGES: Record<Locale, Record<string, Message>> = {\n\ten: {\n\t\tusage: \"Usage: di-code [options] <prompt>\",\n\t\toptions: \"Options:\",\n\t\tprint: \"Print only the final assistant text (default)\",\n\t\tmode: \"Output mode: print, json, or interactive\",\n\t\tinteractive: \"Start interactive terminal mode\",\n\t\tcontinueSession: \"Continue the most recently modified session\",\n\t\tsession: \"Create or resume a JSONL session (relative to the work root)\",\n\t\timage: \"Attach a local PNG, JPEG, WebP, or GIF image (repeatable)\",\n\t\tskill: \"Add a SKILL.md file or skill directory (repeatable)\",\n\t\tnoSkills: \"Disable all Skill loading\",\n\t\tnoContextFiles: \"Disable AGENTS.md discovery and loading\",\n\t\ttrustProject: \"Persist trust for project-local plugins, Skills, and MCP configuration\",\n\t\tuntrustProject: \"Persist denial for project-local plugins, Skills, and MCP configuration\",\n\t\tplugin: \"Install, list, enable, disable, update, or remove a plugin\",\n\t\tmcp: \"Manage MCP configuration (add <id> -- <command> defaults to local stdio)\",\n\t\thelp: \"Show help\",\n\t\tversion: \"Show version\",\n\t\tcommands: \"commands\",\n\t\tcomplete: \"complete\",\n\t\tworking: \"WORKING\",\n\t\tready: \"READY\",\n\t\terror: \"ERROR\",\n\t\tcompacting: \"COMPACTING\",\n\t\tretrying: \"RETRYING\",\n\t\tthinking: \"Thinking\",\n\t\tactivity: \"Activity\",\n\t\tqueue: (count) => `Queue (${count})`,\n\t\terrorPrefix: \"Error\",\n\t\tedited: \"Edited\",\n\t\twrote: \"Wrote\",\n\t\tearlierToolUpdates: (count) => `${count} earlier tool updates`,\n\t\tmessages: (count) => `${count} messages`,\n\t\tcontext: \"ctx\",\n\t\ttotal: \"total\",\n\t\ttokens: \"tok\",\n\t\tsend: \"send\",\n\t\tpasteImage: \"paste image\",\n\t\tthinkingShortcut: \"thinking\",\n\t\tcancel: \"cancel\",\n\t\tcancelled: \"Cancelled\",\n\t\tmodel: \"model\",\n\t\timageShortcut: \"image\",\n\t\tlanguage: \"Language\",\n\t\tsettings: \"Settings\",\n\t\tenglish: \"English\",\n\t\tchinese: \"中文\",\n\t\tcontextCompaction: \"Context compaction\",\n\t\ton: \"on\",\n\t\toff: \"off\",\n\t\tcompactionUnavailable: \"compaction unavailable without a persisted session\",\n\t\tvisibleMessagesCleared: \"visible messages cleared\",\n\t\tnothingToRetry: \"nothing to retry\",\n\t\tmanualCompactionStarting: \"starting manual compaction\",\n\t\tmanualCompactionComplete: \"manual compaction complete\",\n\t\tcurrentSession: \"Current session\",\n\t\tinMemorySession: \"In-memory session\",\n\t\tnewSession: \"New session\",\n\t\tnewSessionDescription: \"Start a new persistent conversation.\",\n\t\tdark: \"Dark\",\n\t\tlight: \"Light\",\n\t\tdarkTheme: \"Dark terminal theme\",\n\t\tlightTheme: \"Light terminal theme\",\n\t\topenModelSelector: \"Open the model selector\",\n\t\topenSessionSelector: \"Open the session selector\",\n\t\topenTreeSelector: \"Browse the current session tree\",\n\t\ttreeTitle: \"Branch tree\",\n\t\ttreeNodes: \"Branches\",\n\t\ttreePreview: \"Preview\",\n\t\ttreeEmpty: \"The current session has no history nodes.\",\n\t\ttreeActiveLeaf: \"active leaf\",\n\t\ttreeBranchNode: \"branch node\",\n\t\ttreeImagesOmitted: \"Images are not restored when editing this prompt.\",\n\t\ttreeContinue: \"Continue\",\n\t\ttreeEdit: \"Edit prompt\",\n\t\ttreeSummarize: \"Summarize + branch\",\n\t\ttreeCancel: \"Cancel\",\n\t\topenThemeSelector: \"Open the theme selector\",\n\t\topenSettingsSelector: \"Open the settings selector\",\n\t\tshowInteractiveCommands: \"Show interactive commands\",\n\t\tclearVisibleMessages: \"Clear visible messages\",\n\t\tchooseProvider: \"Choose a Provider and save its global API key\",\n\t\tremoveProviderKey: \"Remove the current Provider global API key\",\n\t\tcompactContext: \"Compact the persisted context now\",\n\t\tshowUsage: \"Show token and cost usage\",\n\t\tretryPrompt: \"Retry the last failed prompt\",\n\t\tsteerAgent: \"Steer the running agent\",\n\t\tproviderSetup: \"di-code provider setup\",\n\t\tlogin: \"di-code login\",\n\t\tselectProvider: \"Select a provider:\",\n\t\tselectProviderModel: (provider) => `Select a ${provider} model:`,\n\t\tenterApiKey: (name) => `Enter ${name} (input is hidden):`,\n\t\tapiKeyRequired: \"API key cannot be empty. Press Escape to cancel.\",\n\t\tproviderSetupCancelled: \"Provider setup cancelled.\",\n\t\tproviderConfigured: \"Provider configured for this run.\",\n\t\tproviderSetupFailed: \"Provider setup failed.\",\n\t\treasoning: \"reasoning\",\n\t\tfauxProvider: \"Deterministic local provider\",\n\t\tcustomProvider: \"Custom\",\n\t\tcustomProviderDescription: \"Configure a compatible gateway or private endpoint\",\n\t\tselectCustomApi: \"Select an API protocol:\",\n\t\tenterCustomBaseUrl: \"Enter the API base URL (for example, https://gateway.example.com/v1):\",\n\t\tenterCustomApiKey: \"Enter API key (input is hidden):\",\n\t\tenterCustomModelId: \"Enter model ID:\",\n\t\tmodelIdRequired: \"Model ID cannot be empty. Press Escape to cancel.\",\n\t\tcustomBaseUrlInvalid: \"Base URL is invalid.\",\n\t},\n\t\"zh-CN\": {\n\t\tusage: \"用法:di-code [选项] <提示词>\",\n\t\toptions: \"选项:\",\n\t\tprint: \"只输出最终 assistant 文本(默认)\",\n\t\tmode: \"输出模式:print、json 或 interactive\",\n\t\tinteractive: \"启动交互式终端模式\",\n\t\tcontinueSession: \"继续最近修改的会话\",\n\t\tsession: \"创建或恢复 JSONL 会话(相对工作根目录)\",\n\t\timage: \"附加本地 PNG、JPEG、WebP 或 GIF 图片(可重复)\",\n\t\tskill: \"加载一个 SKILL.md 文件或技能目录(可重复)\",\n\t\tnoSkills: \"禁用所有 Skill 加载\",\n\t\tnoContextFiles: \"禁用 AGENTS.md 发现和加载\",\n\t\ttrustProject: \"保存对项目本地插件、Skill 和 MCP 配置的信任\",\n\t\tuntrustProject: \"保存对项目本地插件、Skill 和 MCP 配置的拒绝\",\n\t\tplugin: \"安装、列出、启用、禁用、更新或移除插件\",\n\t\tmcp: \"管理 MCP 配置(add <id> -- <command> 默认为本地 stdio)\",\n\t\thelp: \"显示帮助\",\n\t\tversion: \"显示版本\",\n\t\tcommands: \"命令\",\n\t\tcomplete: \"补全\",\n\t\tworking: \"工作中\",\n\t\tready: \"就绪\",\n\t\terror: \"错误\",\n\t\tcompacting: \"压缩中\",\n\t\tretrying: \"重试中\",\n\t\tthinking: \"思考中\",\n\t\tactivity: \"活动\",\n\t\tqueue: (count) => `队列(${count})`,\n\t\terrorPrefix: \"错误\",\n\t\tedited: \"已编辑\",\n\t\twrote: \"已写入\",\n\t\tearlierToolUpdates: (count) => `之前还有 ${count} 条工具更新`,\n\t\tmessages: (count) => `${count} 条消息`,\n\t\tcontext: \"上下文\",\n\t\ttotal: \"总计\",\n\t\ttokens: \"token\",\n\t\tsend: \"发送\",\n\t\tpasteImage: \"粘贴图片\",\n\t\tthinkingShortcut: \"思考\",\n\t\tcancel: \"取消\",\n\t\tcancelled: \"已取消\",\n\t\tmodel: \"模型\",\n\t\timageShortcut: \"图片\",\n\t\tlanguage: \"语言\",\n\t\tsettings: \"设置\",\n\t\tenglish: \"English\",\n\t\tchinese: \"中文\",\n\t\tcontextCompaction: \"上下文压缩\",\n\t\ton: \"开\",\n\t\toff: \"关\",\n\t\tcompactionUnavailable: \"没有持久化会话,无法进行上下文压缩\",\n\t\tvisibleMessagesCleared: \"已清除可见消息\",\n\t\tnothingToRetry: \"没有可重试的内容\",\n\t\tmanualCompactionStarting: \"开始手动压缩\",\n\t\tmanualCompactionComplete: \"手动压缩完成\",\n\t\tcurrentSession: \"当前会话\",\n\t\tinMemorySession: \"内存会话\",\n\t\tnewSession: \"新建会话\",\n\t\tnewSessionDescription: \"开始新的持久化对话。\",\n\t\tdark: \"深色\",\n\t\tlight: \"浅色\",\n\t\tdarkTheme: \"深色终端主题\",\n\t\tlightTheme: \"浅色终端主题\",\n\t\topenModelSelector: \"打开模型选择器\",\n\t\topenSessionSelector: \"打开会话选择器\",\n\t\topenTreeSelector: \"浏览当前会话树\",\n\t\ttreeTitle: \"分支树\",\n\t\ttreeNodes: \"分支\",\n\t\ttreePreview: \"预览\",\n\t\ttreeEmpty: \"当前会话还没有历史节点。\",\n\t\ttreeActiveLeaf: \"当前叶节点\",\n\t\ttreeBranchNode: \"分支节点\",\n\t\ttreeImagesOmitted: \"编辑此提示词时不会恢复图片。\",\n\t\ttreeContinue: \"从此处继续\",\n\t\ttreeEdit: \"编辑提示词\",\n\t\ttreeSummarize: \"摘要后分支\",\n\t\ttreeCancel: \"取消\",\n\t\topenThemeSelector: \"打开主题选择器\",\n\t\topenSettingsSelector: \"打开设置选择器\",\n\t\tshowInteractiveCommands: \"显示交互命令\",\n\t\tclearVisibleMessages: \"清除可见消息\",\n\t\tchooseProvider: \"选择 Provider 并保存全局 API key\",\n\t\tremoveProviderKey: \"移除当前 Provider 的全局 API key\",\n\t\tcompactContext: \"立即压缩持久化上下文\",\n\t\tshowUsage: \"显示 token 和费用用量\",\n\t\tretryPrompt: \"重试上次失败的提示词\",\n\t\tsteerAgent: \"调整运行中的 Agent\",\n\t\tproviderSetup: \"di-code Provider 设置\",\n\t\tlogin: \"di-code 登录\",\n\t\tselectProvider: \"选择 Provider:\",\n\t\tselectProviderModel: (provider) => `选择 ${provider} 模型:`,\n\t\tenterApiKey: (name) => `输入 ${name}(输入内容会隐藏):`,\n\t\tapiKeyRequired: \"API key 不能为空。按 Escape 取消。\",\n\t\tproviderSetupCancelled: \"已取消 Provider 设置。\",\n\t\tproviderConfigured: \"已为本次运行配置 Provider。\",\n\t\tproviderSetupFailed: \"Provider 设置失败。\",\n\t\treasoning: \"推理\",\n\t\tfauxProvider: \"确定性的本地 Provider\",\n\t\tcustomProvider: \"Custom\",\n\t\tcustomProviderDescription: \"配置兼容网关或私有 endpoint\",\n\t\tselectCustomApi: \"选择 API 协议:\",\n\t\tenterCustomBaseUrl: \"输入 API 根地址(例如 https://gateway.example.com/v1):\",\n\t\tenterCustomApiKey: \"输入 API key(输入内容会隐藏):\",\n\t\tenterCustomModelId: \"输入模型 ID:\",\n\t\tmodelIdRequired: \"模型 ID 不能为空。按 Escape 取消。\",\n\t\tcustomBaseUrlInvalid: \"Base URL 无效。\",\n\t},\n};\n\nexport function isLocale(value: unknown): value is Locale {\n\treturn value === \"en\" || value === \"zh-CN\";\n}\n\nexport function translate(locale: Locale, key: string, ...values: string[]): string {\n\tconst message = MESSAGES[locale][key] ?? MESSAGES[DEFAULT_LOCALE][key] ?? key;\n\treturn typeof message === \"function\" ? message(...values) : message;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-host-entry.d.ts","sourceRoot":"","sources":["../src/interactive-host-entry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interactive-host-entry.d.ts","sourceRoot":"","sources":["../src/interactive-host-entry.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAyGhE,+FAA+F;AAC/F,eAAO,MAAM,UAAU,EAAG,CAAU,CAAC;AACrC,eAAO,MAAM,IAAI,qBAAqB,CAAC;AACvC,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,KAAK,EAAE,gBAAgB,CAAC,OAAO,CA+H3C,CAAC"}
|
|
@@ -1,11 +1,71 @@
|
|
|
1
1
|
import { basename, extname, resolve } from "node:path";
|
|
2
2
|
import { commandRegistryKey, hostCommandRegistryKey, interactiveContextKey, keybindingRegistryKey, modeRegistryKey, } from "@di-code/builtins";
|
|
3
|
+
import { redactSensitiveText } from "@di-code/plugin-runtime";
|
|
4
|
+
import { createUserInteraction } from "@di-code/plugin-sdk";
|
|
3
5
|
import { ProcessTerminal } from "@di-code/tui";
|
|
4
6
|
import { DEFAULT_LOCALE, translate } from "./i18n.js";
|
|
5
7
|
import { runInteractiveMode } from "./modes/interactive-entry.js";
|
|
6
8
|
import { runProviderOnboarding, shouldStartProviderOnboarding } from "./provider-onboarding.js";
|
|
9
|
+
import { pluginInventoryKey } from "./runtime/plugin-inventory-service.js";
|
|
7
10
|
import { createSessionHost } from "./runtime/session-host.js";
|
|
8
11
|
import { loadStartupConfiguration, resolveStartupRuntime } from "./startup.js";
|
|
12
|
+
const ANSI = {
|
|
13
|
+
reset: "\u001b[0m",
|
|
14
|
+
bold: "\u001b[1m",
|
|
15
|
+
dim: "\u001b[2m",
|
|
16
|
+
cyan: "\u001b[36m",
|
|
17
|
+
blue: "\u001b[34m",
|
|
18
|
+
green: "\u001b[32m",
|
|
19
|
+
yellow: "\u001b[33m",
|
|
20
|
+
red: "\u001b[31m",
|
|
21
|
+
gray: "\u001b[90m",
|
|
22
|
+
magenta: "\u001b[35m",
|
|
23
|
+
};
|
|
24
|
+
function paint(value, color) {
|
|
25
|
+
return `${ANSI[color]}${value}${ANSI.reset}`;
|
|
26
|
+
}
|
|
27
|
+
function paintStatus(status) {
|
|
28
|
+
const color = status === "active" || status === "connected"
|
|
29
|
+
? "green"
|
|
30
|
+
: status === "failed"
|
|
31
|
+
? "red"
|
|
32
|
+
: status === "disabled"
|
|
33
|
+
? "gray"
|
|
34
|
+
: "yellow";
|
|
35
|
+
return paint(status, color);
|
|
36
|
+
}
|
|
37
|
+
function printStartupResources(request, inventory, startup) {
|
|
38
|
+
const projectEntries = inventory?.entries.filter((record) => record.entry.projectLocal || record.entry.id.startsWith("managed.") || record.status === "failed") ?? [];
|
|
39
|
+
const hasDetails = projectEntries.length > 0 ||
|
|
40
|
+
startup.skills.length > 0 ||
|
|
41
|
+
startup.resourceDiagnostics.length > 0 ||
|
|
42
|
+
startup.mcpServers.length > 0 ||
|
|
43
|
+
startup.mcpDiagnostics.length > 0;
|
|
44
|
+
if (!hasDetails)
|
|
45
|
+
return;
|
|
46
|
+
const lines = ["", `${paint("di-code startup resources", "bold")}:`, ` ${paint("Plugins", "cyan")}:`];
|
|
47
|
+
if (projectEntries.length === 0)
|
|
48
|
+
lines.push(` ${paint("- none", "dim")}`);
|
|
49
|
+
for (const record of projectEntries) {
|
|
50
|
+
const reason = record.error ? `: ${redactSensitiveText(record.error.message)}` : "";
|
|
51
|
+
lines.push(` - ${record.entry.id}: ${paintStatus(record.status)}${reason}`);
|
|
52
|
+
}
|
|
53
|
+
lines.push(` ${paint("Skills", "magenta")}:`);
|
|
54
|
+
if (startup.skills.length === 0)
|
|
55
|
+
lines.push(` ${paint("- none", "dim")}`);
|
|
56
|
+
for (const skill of startup.skills)
|
|
57
|
+
lines.push(` - ${paint(skill.name, "magenta")} ${paint(`(${skill.scope})`, "dim")}`);
|
|
58
|
+
for (const diagnostic of startup.resourceDiagnostics)
|
|
59
|
+
lines.push(` - ${paint(`${diagnostic.kind} ${diagnostic.severity}`, diagnostic.severity === "error" ? "red" : "yellow")}: ${diagnostic.path}: ${diagnostic.message}`);
|
|
60
|
+
lines.push(` ${paint("MCP", "blue")}:`);
|
|
61
|
+
if (startup.mcpServers.length === 0 && startup.mcpDiagnostics.length === 0)
|
|
62
|
+
lines.push(` ${paint("- none", "dim")}`);
|
|
63
|
+
for (const server of startup.mcpServers)
|
|
64
|
+
lines.push(` - ${server.id}: ${paintStatus("connected")} ${paint(`(tools ${server.tools}, resources ${server.resources}, prompts ${server.prompts})`, "dim")}`);
|
|
65
|
+
for (const diagnostic of startup.mcpDiagnostics)
|
|
66
|
+
lines.push(` - ${diagnostic.serverId}: ${paintStatus("failed")} (${diagnostic.stage}): ${redactSensitiveText(diagnostic.message)}`);
|
|
67
|
+
request.stderr(`${lines.join("\n")}\n\n`);
|
|
68
|
+
}
|
|
9
69
|
function isInteractiveHostRequest(value) {
|
|
10
70
|
return (typeof value === "object" &&
|
|
11
71
|
value !== null &&
|
|
@@ -39,21 +99,56 @@ export const apply = (context, _config, fiber) => {
|
|
|
39
99
|
: resolveStartupRuntime(configuration.environment, configuration.providers, configuration.defaults);
|
|
40
100
|
if (!runtime)
|
|
41
101
|
return 0;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
provider: runtime.provider,
|
|
50
|
-
model: runtime.model,
|
|
51
|
-
signal,
|
|
52
|
-
...(request.command.sessionPath ? { initialSessionPath: resolve(request.cwd, request.command.sessionPath) } : {}),
|
|
102
|
+
let mode;
|
|
103
|
+
const interaction = createUserInteraction({
|
|
104
|
+
request: (input, interactionSignal) => {
|
|
105
|
+
if (!mode)
|
|
106
|
+
throw new Error("Interactive mode is not ready.");
|
|
107
|
+
return mode.requestInteraction(input, interactionSignal);
|
|
108
|
+
},
|
|
53
109
|
});
|
|
110
|
+
let host;
|
|
111
|
+
try {
|
|
112
|
+
host = await createSessionHost(context, {
|
|
113
|
+
cwd: request.cwd,
|
|
114
|
+
agentDir: request.agentDir,
|
|
115
|
+
projectTrusted: request.projectTrusted,
|
|
116
|
+
noSkills: request.command.noSkills,
|
|
117
|
+
noContextFiles: request.command.noContextFiles,
|
|
118
|
+
skillPaths: request.command.skillPaths,
|
|
119
|
+
provider: runtime.provider,
|
|
120
|
+
model: runtime.model,
|
|
121
|
+
signal,
|
|
122
|
+
planMode: {
|
|
123
|
+
section: "You are in plan mode. Explore and design before presenting the complete plan through exit_plan_mode.",
|
|
124
|
+
},
|
|
125
|
+
interaction,
|
|
126
|
+
...(request.command.sessionPath
|
|
127
|
+
? { initialSessionPath: resolve(request.cwd, request.command.sessionPath) }
|
|
128
|
+
: {}),
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch (cause) {
|
|
132
|
+
printStartupResources(request, context.get(pluginInventoryKey)?.snapshot(), {
|
|
133
|
+
skills: [],
|
|
134
|
+
resourceDiagnostics: [
|
|
135
|
+
{
|
|
136
|
+
path: request.cwd,
|
|
137
|
+
kind: "startup",
|
|
138
|
+
stage: "load",
|
|
139
|
+
severity: "error",
|
|
140
|
+
message: redactSensitiveText(cause instanceof Error ? cause.message : String(cause)),
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
mcpServers: [],
|
|
144
|
+
mcpDiagnostics: [],
|
|
145
|
+
});
|
|
146
|
+
throw cause;
|
|
147
|
+
}
|
|
54
148
|
if (!host.state().activeSession)
|
|
55
149
|
await host.createSession();
|
|
56
150
|
const ui = host.ui();
|
|
151
|
+
printStartupResources(request, context.get(pluginInventoryKey)?.snapshot(), host.startupStatus());
|
|
57
152
|
const sessions = await host.listSessions();
|
|
58
153
|
const activeId = host.state().activeSession?.id;
|
|
59
154
|
const sessionChoices = [
|
|
@@ -78,7 +173,6 @@ export const apply = (context, _config, fiber) => {
|
|
|
78
173
|
},
|
|
79
174
|
})),
|
|
80
175
|
];
|
|
81
|
-
let mode;
|
|
82
176
|
let selectedTheme = "dark";
|
|
83
177
|
const unbind = context.require(interactiveContextKey).bind({
|
|
84
178
|
sessionChoices: () => sessionChoices,
|
|
@@ -115,6 +209,7 @@ export const apply = (context, _config, fiber) => {
|
|
|
115
209
|
}
|
|
116
210
|
finally {
|
|
117
211
|
unbind();
|
|
212
|
+
await interaction.dispose();
|
|
118
213
|
await host.dispose();
|
|
119
214
|
}
|
|
120
215
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-host-entry.js","sourceRoot":"","sources":["../src/interactive-host-entry.ts"],"names":[],"mappings":"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","sourcesContent":["import { basename, extname, resolve } from \"node:path\";\nimport {\n\tcommandRegistryKey,\n\thostCommandRegistryKey,\n\tinteractiveContextKey,\n\tkeybindingRegistryKey,\n\tmodeRegistryKey,\n} from \"@di-code/builtins\";\nimport type { PluginDefinition } from \"@di-code/plugin-runtime\";\nimport { ProcessTerminal } from \"@di-code/tui\";\nimport { DEFAULT_LOCALE, translate } from \"./i18n.ts\";\nimport { runInteractiveMode } from \"./modes/interactive-entry.ts\";\nimport { runProviderOnboarding, shouldStartProviderOnboarding } from \"./provider-onboarding.ts\";\nimport type { InteractiveHostRequest } from \"./runtime/interactive-host-service.ts\";\nimport { createSessionHost } from \"./runtime/session-host.ts\";\nimport { loadStartupConfiguration, resolveStartupRuntime } from \"./startup.ts\";\n\nfunction isInteractiveHostRequest(value: unknown): value is InteractiveHostRequest {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"command\" in value &&\n\t\ttypeof value.command === \"object\" &&\n\t\tvalue.command !== null &&\n\t\t\"mode\" in value.command &&\n\t\tvalue.command.mode === \"interactive\" &&\n\t\t\"cwd\" in value &&\n\t\ttypeof value.cwd === \"string\" &&\n\t\t\"agentDir\" in value &&\n\t\ttypeof value.agentDir === \"string\" &&\n\t\t\"projectTrusted\" in value &&\n\t\ttypeof value.projectTrusted === \"boolean\" &&\n\t\t\"stderr\" in value &&\n\t\ttypeof value.stderr === \"function\"\n\t);\n}\n\n/** Owns the interactive ProductHost and gives the presentation mode only its UiHost facade. */\nexport const apiVersion = 1 as const;\nexport const name = \"interactive-host\";\nexport const version = \"0.1.7\";\nexport const apply: PluginDefinition[\"apply\"] = (context, _config, fiber) => {\n\tconst registry = context.require(hostCommandRegistryKey);\n\tconst run = async (input: unknown, signal?: AbortSignal): Promise<number> => {\n\t\tif (!isInteractiveHostRequest(input)) throw new TypeError(\"Interactive host request is invalid\");\n\t\tconst request = input;\n\t\tconst configuration = await loadStartupConfiguration(request.cwd, process.env, request.agentDir);\n\t\tconst runtime = shouldStartProviderOnboarding(request.command, true, configuration)\n\t\t\t? await runProviderOnboarding({ configuration, terminal: new ProcessTerminal(), agentDir: request.agentDir })\n\t\t\t: resolveStartupRuntime(configuration.environment, configuration.providers, configuration.defaults);\n\t\tif (!runtime) return 0;\n\t\tconst host = await createSessionHost(context, {\n\t\t\tcwd: request.cwd,\n\t\t\tagentDir: request.agentDir,\n\t\t\tprojectTrusted: request.projectTrusted,\n\t\t\tnoSkills: request.command.noSkills,\n\t\t\tnoContextFiles: request.command.noContextFiles,\n\t\t\tskillPaths: request.command.skillPaths,\n\t\t\tprovider: runtime.provider,\n\t\t\tmodel: runtime.model,\n\t\t\tsignal,\n\t\t\t...(request.command.sessionPath ? { initialSessionPath: resolve(request.cwd, request.command.sessionPath) } : {}),\n\t\t});\n\t\tif (!host.state().activeSession) await host.createSession();\n\t\tconst ui = host.ui();\n\t\tconst sessions = await host.listSessions();\n\t\tconst activeId = host.state().activeSession?.id;\n\t\tconst sessionChoices = [\n\t\t\t{\n\t\t\t\tid: \"new-session\",\n\t\t\t\tlabel: translate(configuration.locale ?? DEFAULT_LOCALE, \"newSession\"),\n\t\t\t\tdescription: translate(configuration.locale ?? DEFAULT_LOCALE, \"newSessionDescription\"),\n\t\t\t\topen: async () => {\n\t\t\t\t\tawait host.createSession();\n\t\t\t\t\treturn host.ui();\n\t\t\t\t},\n\t\t\t},\n\t\t\t...sessions\n\t\t\t\t.filter((item) => item.id !== activeId)\n\t\t\t\t.map((item) => ({\n\t\t\t\t\tid: item.displayId ?? item.id,\n\t\t\t\t\tlabel: item.label || basename(item.id, extname(item.id)),\n\t\t\t\t\tdescription: item.cwd,\n\t\t\t\t\topen: async () => {\n\t\t\t\t\t\tawait host.openSession(item.id);\n\t\t\t\t\t\treturn host.ui();\n\t\t\t\t\t},\n\t\t\t\t})),\n\t\t];\n\t\tlet mode: import(\"./modes/interactive.ts\").InteractiveMode | undefined;\n\t\tlet selectedTheme = \"dark\";\n\t\tconst unbind = context.require(interactiveContextKey).bind({\n\t\t\tsessionChoices: () => sessionChoices,\n\t\t\tcancel: () => mode?.cancelActivePrompt(),\n\t\t\tretry: () => mode?.retryLastPrompt(),\n\t\t\ttheme: () => selectedTheme,\n\t\t\tsetTheme: (theme) => {\n\t\t\t\tselectedTheme = theme;\n\t\t\t},\n\t\t\tkeybindings: () => context.get(keybindingRegistryKey)?.snapshot(),\n\t\t});\n\t\ttry {\n\t\t\tlet finish: (() => void) | undefined;\n\t\t\tconst finished = new Promise<void>((resolveFinish) => {\n\t\t\t\tfinish = resolveFinish;\n\t\t\t});\n\t\t\tawait context.require(modeRegistryKey).execute(\n\t\t\t\t\"interactive\",\n\t\t\t\t{\n\t\t\t\t\trun: () =>\n\t\t\t\t\t\t(request.startInteractiveMode ?? runInteractiveMode)({\n\t\t\t\t\t\t\tsession: ui,\n\t\t\t\t\t\t\tagentDir: request.agentDir,\n\t\t\t\t\t\t\tlocale: configuration.locale ?? DEFAULT_LOCALE,\n\t\t\t\t\t\t\tcommandRegistry: context.require(commandRegistryKey),\n\t\t\t\t\t\t\tcontext: context.require(interactiveContextKey),\n\t\t\t\t\t\t\tproviderOnboarding: { configuration, agentDir: request.agentDir },\n\t\t\t\t\t\t\tinitialPrompt: request.command.prompt,\n\t\t\t\t\t\t\tonCreated: (created) => {\n\t\t\t\t\t\t\t\tmode = created;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonExit: () => finish?.(),\n\t\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tawait finished;\n\t\t\treturn 0;\n\t\t} finally {\n\t\t\tunbind();\n\t\t\tawait host.dispose();\n\t\t}\n\t};\n\tfiber.addDisposer(registry.register(\"interactive\", run));\n};\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-host-entry.js","sourceRoot":"","sources":["../src/interactive-host-entry.ts"],"names":[],"mappings":"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","sourcesContent":["import { basename, extname, resolve } from \"node:path\";\nimport {\n\tcommandRegistryKey,\n\thostCommandRegistryKey,\n\tinteractiveContextKey,\n\tkeybindingRegistryKey,\n\tmodeRegistryKey,\n} from \"@di-code/builtins\";\nimport type { PluginInventory } from \"@di-code/plugin-loader\";\nimport type { PluginDefinition } from \"@di-code/plugin-runtime\";\nimport { redactSensitiveText } from \"@di-code/plugin-runtime\";\nimport { createUserInteraction } from \"@di-code/plugin-sdk\";\nimport { ProcessTerminal } from \"@di-code/tui\";\nimport { DEFAULT_LOCALE, translate } from \"./i18n.ts\";\nimport { runInteractiveMode } from \"./modes/interactive-entry.ts\";\nimport { runProviderOnboarding, shouldStartProviderOnboarding } from \"./provider-onboarding.ts\";\nimport type { InteractiveHostRequest } from \"./runtime/interactive-host-service.ts\";\nimport { pluginInventoryKey } from \"./runtime/plugin-inventory-service.ts\";\nimport { createSessionHost, type SessionStartupStatus } from \"./runtime/session-host.ts\";\nimport { loadStartupConfiguration, resolveStartupRuntime } from \"./startup.ts\";\n\nconst ANSI = {\n\treset: \"\\u001b[0m\",\n\tbold: \"\\u001b[1m\",\n\tdim: \"\\u001b[2m\",\n\tcyan: \"\\u001b[36m\",\n\tblue: \"\\u001b[34m\",\n\tgreen: \"\\u001b[32m\",\n\tyellow: \"\\u001b[33m\",\n\tred: \"\\u001b[31m\",\n\tgray: \"\\u001b[90m\",\n\tmagenta: \"\\u001b[35m\",\n} as const;\n\nfunction paint(value: string, color: keyof typeof ANSI): string {\n\treturn `${ANSI[color]}${value}${ANSI.reset}`;\n}\n\nfunction paintStatus(status: string): string {\n\tconst color =\n\t\tstatus === \"active\" || status === \"connected\"\n\t\t\t? \"green\"\n\t\t\t: status === \"failed\"\n\t\t\t\t? \"red\"\n\t\t\t\t: status === \"disabled\"\n\t\t\t\t\t? \"gray\"\n\t\t\t\t\t: \"yellow\";\n\treturn paint(status, color);\n}\n\nfunction printStartupResources(\n\trequest: InteractiveHostRequest,\n\tinventory: PluginInventory | undefined,\n\tstartup: SessionStartupStatus,\n): void {\n\tconst projectEntries =\n\t\tinventory?.entries.filter(\n\t\t\t(record) => record.entry.projectLocal || record.entry.id.startsWith(\"managed.\") || record.status === \"failed\",\n\t\t) ?? [];\n\tconst hasDetails =\n\t\tprojectEntries.length > 0 ||\n\t\tstartup.skills.length > 0 ||\n\t\tstartup.resourceDiagnostics.length > 0 ||\n\t\tstartup.mcpServers.length > 0 ||\n\t\tstartup.mcpDiagnostics.length > 0;\n\tif (!hasDetails) return;\n\tconst lines = [\"\", `${paint(\"di-code startup resources\", \"bold\")}:`, ` ${paint(\"Plugins\", \"cyan\")}:`];\n\tif (projectEntries.length === 0) lines.push(` ${paint(\"- none\", \"dim\")}`);\n\tfor (const record of projectEntries) {\n\t\tconst reason = record.error ? `: ${redactSensitiveText(record.error.message)}` : \"\";\n\t\tlines.push(` - ${record.entry.id}: ${paintStatus(record.status)}${reason}`);\n\t}\n\tlines.push(` ${paint(\"Skills\", \"magenta\")}:`);\n\tif (startup.skills.length === 0) lines.push(` ${paint(\"- none\", \"dim\")}`);\n\tfor (const skill of startup.skills)\n\t\tlines.push(` - ${paint(skill.name, \"magenta\")} ${paint(`(${skill.scope})`, \"dim\")}`);\n\tfor (const diagnostic of startup.resourceDiagnostics)\n\t\tlines.push(\n\t\t\t` - ${paint(`${diagnostic.kind} ${diagnostic.severity}`, diagnostic.severity === \"error\" ? \"red\" : \"yellow\")}: ${diagnostic.path}: ${diagnostic.message}`,\n\t\t);\n\tlines.push(` ${paint(\"MCP\", \"blue\")}:`);\n\tif (startup.mcpServers.length === 0 && startup.mcpDiagnostics.length === 0)\n\t\tlines.push(` ${paint(\"- none\", \"dim\")}`);\n\tfor (const server of startup.mcpServers)\n\t\tlines.push(\n\t\t\t` - ${server.id}: ${paintStatus(\"connected\")} ${paint(`(tools ${server.tools}, resources ${server.resources}, prompts ${server.prompts})`, \"dim\")}`,\n\t\t);\n\tfor (const diagnostic of startup.mcpDiagnostics)\n\t\tlines.push(\n\t\t\t` - ${diagnostic.serverId}: ${paintStatus(\"failed\")} (${diagnostic.stage}): ${redactSensitiveText(diagnostic.message)}`,\n\t\t);\n\trequest.stderr(`${lines.join(\"\\n\")}\\n\\n`);\n}\n\nfunction isInteractiveHostRequest(value: unknown): value is InteractiveHostRequest {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"command\" in value &&\n\t\ttypeof value.command === \"object\" &&\n\t\tvalue.command !== null &&\n\t\t\"mode\" in value.command &&\n\t\tvalue.command.mode === \"interactive\" &&\n\t\t\"cwd\" in value &&\n\t\ttypeof value.cwd === \"string\" &&\n\t\t\"agentDir\" in value &&\n\t\ttypeof value.agentDir === \"string\" &&\n\t\t\"projectTrusted\" in value &&\n\t\ttypeof value.projectTrusted === \"boolean\" &&\n\t\t\"stderr\" in value &&\n\t\ttypeof value.stderr === \"function\"\n\t);\n}\n\n/** Owns the interactive ProductHost and gives the presentation mode only its UiHost facade. */\nexport const apiVersion = 1 as const;\nexport const name = \"interactive-host\";\nexport const version = \"0.1.7\";\nexport const apply: PluginDefinition[\"apply\"] = (context, _config, fiber) => {\n\tconst registry = context.require(hostCommandRegistryKey);\n\tconst run = async (input: unknown, signal?: AbortSignal): Promise<number> => {\n\t\tif (!isInteractiveHostRequest(input)) throw new TypeError(\"Interactive host request is invalid\");\n\t\tconst request = input;\n\t\tconst configuration = await loadStartupConfiguration(request.cwd, process.env, request.agentDir);\n\t\tconst runtime = shouldStartProviderOnboarding(request.command, true, configuration)\n\t\t\t? await runProviderOnboarding({ configuration, terminal: new ProcessTerminal(), agentDir: request.agentDir })\n\t\t\t: resolveStartupRuntime(configuration.environment, configuration.providers, configuration.defaults);\n\t\tif (!runtime) return 0;\n\t\tlet mode: import(\"./modes/interactive.ts\").InteractiveMode | undefined;\n\t\tconst interaction = createUserInteraction({\n\t\t\trequest: (input, interactionSignal) => {\n\t\t\t\tif (!mode) throw new Error(\"Interactive mode is not ready.\");\n\t\t\t\treturn mode.requestInteraction(input, interactionSignal);\n\t\t\t},\n\t\t});\n\t\tlet host: Awaited<ReturnType<typeof createSessionHost>>;\n\t\ttry {\n\t\t\thost = await createSessionHost(context, {\n\t\t\t\tcwd: request.cwd,\n\t\t\t\tagentDir: request.agentDir,\n\t\t\t\tprojectTrusted: request.projectTrusted,\n\t\t\t\tnoSkills: request.command.noSkills,\n\t\t\t\tnoContextFiles: request.command.noContextFiles,\n\t\t\t\tskillPaths: request.command.skillPaths,\n\t\t\t\tprovider: runtime.provider,\n\t\t\t\tmodel: runtime.model,\n\t\t\t\tsignal,\n\t\t\t\tplanMode: {\n\t\t\t\t\tsection:\n\t\t\t\t\t\t\"You are in plan mode. Explore and design before presenting the complete plan through exit_plan_mode.\",\n\t\t\t\t},\n\t\t\t\tinteraction,\n\t\t\t\t...(request.command.sessionPath\n\t\t\t\t\t? { initialSessionPath: resolve(request.cwd, request.command.sessionPath) }\n\t\t\t\t\t: {}),\n\t\t\t});\n\t\t} catch (cause) {\n\t\t\tprintStartupResources(request, context.get(pluginInventoryKey)?.snapshot(), {\n\t\t\t\tskills: [],\n\t\t\t\tresourceDiagnostics: [\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: request.cwd,\n\t\t\t\t\t\tkind: \"startup\",\n\t\t\t\t\t\tstage: \"load\",\n\t\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\t\tmessage: redactSensitiveText(cause instanceof Error ? cause.message : String(cause)),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tmcpServers: [],\n\t\t\t\tmcpDiagnostics: [],\n\t\t\t});\n\t\t\tthrow cause;\n\t\t}\n\t\tif (!host.state().activeSession) await host.createSession();\n\t\tconst ui = host.ui();\n\t\tprintStartupResources(request, context.get(pluginInventoryKey)?.snapshot(), host.startupStatus());\n\t\tconst sessions = await host.listSessions();\n\t\tconst activeId = host.state().activeSession?.id;\n\t\tconst sessionChoices = [\n\t\t\t{\n\t\t\t\tid: \"new-session\",\n\t\t\t\tlabel: translate(configuration.locale ?? DEFAULT_LOCALE, \"newSession\"),\n\t\t\t\tdescription: translate(configuration.locale ?? DEFAULT_LOCALE, \"newSessionDescription\"),\n\t\t\t\topen: async () => {\n\t\t\t\t\tawait host.createSession();\n\t\t\t\t\treturn host.ui();\n\t\t\t\t},\n\t\t\t},\n\t\t\t...sessions\n\t\t\t\t.filter((item) => item.id !== activeId)\n\t\t\t\t.map((item) => ({\n\t\t\t\t\tid: item.displayId ?? item.id,\n\t\t\t\t\tlabel: item.label || basename(item.id, extname(item.id)),\n\t\t\t\t\tdescription: item.cwd,\n\t\t\t\t\topen: async () => {\n\t\t\t\t\t\tawait host.openSession(item.id);\n\t\t\t\t\t\treturn host.ui();\n\t\t\t\t\t},\n\t\t\t\t})),\n\t\t];\n\t\tlet selectedTheme = \"dark\";\n\t\tconst unbind = context.require(interactiveContextKey).bind({\n\t\t\tsessionChoices: () => sessionChoices,\n\t\t\tcancel: () => mode?.cancelActivePrompt(),\n\t\t\tretry: () => mode?.retryLastPrompt(),\n\t\t\ttheme: () => selectedTheme,\n\t\t\tsetTheme: (theme) => {\n\t\t\t\tselectedTheme = theme;\n\t\t\t},\n\t\t\tkeybindings: () => context.get(keybindingRegistryKey)?.snapshot(),\n\t\t});\n\t\ttry {\n\t\t\tlet finish: (() => void) | undefined;\n\t\t\tconst finished = new Promise<void>((resolveFinish) => {\n\t\t\t\tfinish = resolveFinish;\n\t\t\t});\n\t\t\tawait context.require(modeRegistryKey).execute(\n\t\t\t\t\"interactive\",\n\t\t\t\t{\n\t\t\t\t\trun: () =>\n\t\t\t\t\t\t(request.startInteractiveMode ?? runInteractiveMode)({\n\t\t\t\t\t\t\tsession: ui,\n\t\t\t\t\t\t\tagentDir: request.agentDir,\n\t\t\t\t\t\t\tlocale: configuration.locale ?? DEFAULT_LOCALE,\n\t\t\t\t\t\t\tcommandRegistry: context.require(commandRegistryKey),\n\t\t\t\t\t\t\tcontext: context.require(interactiveContextKey),\n\t\t\t\t\t\t\tproviderOnboarding: { configuration, agentDir: request.agentDir },\n\t\t\t\t\t\t\tinitialPrompt: request.command.prompt,\n\t\t\t\t\t\t\tonCreated: (created) => {\n\t\t\t\t\t\t\t\tmode = created;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonExit: () => finish?.(),\n\t\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tawait finished;\n\t\t\treturn 0;\n\t\t} finally {\n\t\t\tunbind();\n\t\t\tawait interaction.dispose();\n\t\t\tawait host.dispose();\n\t\t}\n\t};\n\tfiber.addDisposer(registry.register(\"interactive\", run));\n};\n"]}
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAqB,KAAK,YAAY,EAAuB,MAAM,yBAAyB,CAAC;AAQpG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAGzF,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IACxC,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,2BAA2B,CAAC;IACnD,uFAAuF;IACvF,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CAChE;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAqB,KAAK,YAAY,EAAuB,MAAM,yBAAyB,CAAC;AAQpG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAGzF,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IACxC,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,2BAA2B,CAAC;IACnD,uFAAuF;IACvF,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CAChE;AAoCD,6EAA6E;AAC7E,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqHhH"}
|
package/dist/main.js
CHANGED
|
@@ -19,6 +19,9 @@ function isMinimalCommand(command) {
|
|
|
19
19
|
}
|
|
20
20
|
async function hasTrustedProjectContent(cwd) {
|
|
21
21
|
for (const path of [
|
|
22
|
+
join(cwd, ".di-code", "composition.yml"),
|
|
23
|
+
join(cwd, ".di-code", "composition.yaml"),
|
|
24
|
+
join(cwd, ".di-code", "plugins"),
|
|
22
25
|
join(cwd, ".di-code", "skills"),
|
|
23
26
|
join(cwd, ".agents", "skills"),
|
|
24
27
|
join(cwd, ".di-code", "mcp.local.json"),
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["import { access } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { hostCommandRegistryKey, processExitKey, sessionStoreKey } from \"@di-code/builtins\";\nimport { createCompositionLoader, type PluginModule } from \"@di-code/plugin-loader\";\nimport { createRootContext, type RuntimeEvent, redactSensitiveText } from \"@di-code/plugin-runtime\";\nimport { type CliCommand, createCliParser } from \"./cli.ts\";\nimport {\n\timportCompositionModule,\n\tresolveCompositionEntries,\n\tresolveManagedCompositionEntries,\n} from \"./compositions.ts\";\nimport { createProjectTrustStore } from \"./project-trust-entry.ts\";\nimport type { InteractiveBootstrapOptions } from \"./runtime/interactive-host-service.ts\";\nimport { pluginInventoryKey } from \"./runtime/plugin-inventory-service.ts\";\n\nexport interface MinimalProfileOptions {\n\treadonly version: string;\n\treadonly allowedRoot?: string;\n\t/** User data root used to resolve managed plugin state. */\n\treadonly agentDir?: string;\n\treadonly stdout: (text: string) => void;\n\treadonly stderr: (text: string) => void;\n\treadonly onRuntimeEvent?: (event: RuntimeEvent) => void;\n\treadonly onSessionDisposed?: () => void;\n\t/** Terminal-only facilities supplied by the executable bootstrap. */\n\treadonly interactive?: InteractiveBootstrapOptions;\n\t/** Test-only namespace importer; production uses package-aware composition imports. */\n\treadonly importModule?: (name: string) => Promise<PluginModule>;\n}\n\nfunction errorMessage(cause: unknown): string {\n\treturn redactSensitiveText(cause instanceof Error ? cause.message : String(cause));\n}\n\nfunction isRun(command: CliCommand): command is Extract<CliCommand, { kind: \"run\" }> {\n\treturn command.kind === \"run\";\n}\n\nfunction isMinimalCommand(\n\tcommand: CliCommand,\n): command is Extract<CliCommand, { kind: \"run\" | \"plugin\" | \"observe\" | \"mcp\" }> {\n\treturn command.kind === \"run\" || command.kind === \"plugin\" || command.kind === \"observe\" || command.kind === \"mcp\";\n}\n\nasync function hasTrustedProjectContent(cwd: string): Promise<boolean> {\n\tfor (const path of [\n\t\tjoin(cwd, \".di-code\", \"skills\"),\n\t\tjoin(cwd, \".agents\", \"skills\"),\n\t\tjoin(cwd, \".di-code\", \"mcp.local.json\"),\n\t\tjoin(cwd, \".mcp.json\"),\n\t]) {\n\t\ttry {\n\t\t\tawait access(path);\n\t\t\treturn true;\n\t\t} catch (cause) {\n\t\t\tif (!(cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")) throw cause;\n\t\t}\n\t}\n\treturn false;\n}\n\n/** Starts a composition profile and executes its registered host command. */\nexport async function runMinimalProfile(args: readonly string[], options: MinimalProfileOptions): Promise<number> {\n\tconst parser = createCliParser();\n\tlet command: CliCommand;\n\ttry {\n\t\tcommand = parser.parse(args);\n\t} catch (cause) {\n\t\toptions.stderr(`${errorMessage(cause)}\\n`);\n\t\treturn 1;\n\t}\n\tif (command.kind === \"help\") {\n\t\toptions.stdout(`${parser.help(\"en\")}\\n`);\n\t\treturn 0;\n\t}\n\tif (command.kind === \"version\") {\n\t\toptions.stdout(`${options.version}\\n`);\n\t\treturn 0;\n\t}\n\tif (!isMinimalCommand(command)) {\n\t\toptions.stderr(\"MCP commands are unavailable in the minimal profile.\\n\");\n\t\treturn 1;\n\t}\n\tif (isRun(command) && command.mode === \"interactive\" && !options.interactive?.isInteractiveTerminal) {\n\t\toptions.stderr(\"Interactive mode requires an interactive TTY.\\n\");\n\t\treturn 1;\n\t}\n\tconst mode = isRun(command) ? command.mode : \"print\";\n\tconst observability = command.kind === \"observe\";\n\tconst allowedRoot = resolve(options.allowedRoot ?? process.cwd());\n\tconst agentDir = resolve(options.agentDir ?? join(homedir(), \".di-code\"));\n\tconst trustStore = createProjectTrustStore(join(agentDir, \"trust.json\"));\n\tif (isRun(command) && command.projectTrust !== undefined) await trustStore.set(allowedRoot, command.projectTrust);\n\tlet projectTrusted = isRun(command) && !command.noProjectPlugins && (await trustStore.get(allowedRoot)) === true;\n\tif (\n\t\tisRun(command) &&\n\t\tcommand.mode === \"interactive\" &&\n\t\t!projectTrusted &&\n\t\tcommand.projectTrust === undefined &&\n\t\toptions.interactive?.promptProjectTrust &&\n\t\t(await hasTrustedProjectContent(allowedRoot))\n\t) {\n\t\tprojectTrusted = await options.interactive.promptProjectTrust(allowedRoot);\n\t\tawait trustStore.set(allowedRoot, projectTrusted);\n\t}\n\tconst managedEntries = await resolveManagedCompositionEntries(agentDir);\n\tconst compositionEntries = await resolveCompositionEntries(\n\t\tisRun(command) ? (command.profile ?? command.mode) : \"base\",\n\t\t{\n\t\t\tcwd: allowedRoot,\n\t\t\tagentDir,\n\t\t\t...(isRun(command) && command.compositionPath ? { compositionPath: command.compositionPath } : {}),\n\t\t\tincludeProjectComposition: projectTrusted,\n\t\t\tobservability,\n\t\t\tallowedRoot,\n\t\t},\n\t);\n\tconst context = createRootContext({ id: \"minimal-profile\", mode, trustedProject: projectTrusted });\n\tconst unsubscribe = context.events.subscribe((event) => options.onRuntimeEvent?.(event));\n\tconst loader = createCompositionLoader({\n\t\tcontext,\n\t\tentries: [...compositionEntries, ...managedEntries],\n\t\timportModule: options.importModule ?? importCompositionModule,\n\t\tprojectTrusted,\n\t});\n\ttry {\n\t\tawait loader.load();\n\t\tcontext.require(pluginInventoryKey).set(loader.tree.snapshot());\n\t\tconst host = context.require(hostCommandRegistryKey);\n\t\tlet name: string;\n\t\tlet input: unknown;\n\t\tif (command.kind === \"observe\") {\n\t\t\tname = command.action === \"trace\" ? \"trace-plugins\" : \"dump-composition\";\n\t\t\tinput = { stdout: options.stdout };\n\t\t} else if (command.kind === \"plugin\") {\n\t\t\tname = \"plugin\";\n\t\t\tinput = { ...command, stdout: options.stdout, stderr: options.stderr };\n\t\t} else if (command.kind === \"mcp\") {\n\t\t\tname = \"mcp\";\n\t\t\tinput = { ...command, cwd: allowedRoot, stdout: options.stdout, stderr: options.stderr };\n\t\t} else if (command.mode === \"interactive\") {\n\t\t\tname = \"interactive\";\n\t\t\tinput = {\n\t\t\t\tcommand,\n\t\t\t\tcwd: allowedRoot,\n\t\t\t\tagentDir,\n\t\t\t\tprojectTrusted,\n\t\t\t\tstderr: options.stderr,\n\t\t\t\t...(options.interactive?.startInteractiveMode\n\t\t\t\t\t? { startInteractiveMode: options.interactive.startInteractiveMode }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t} else {\n\t\t\tname = command.mode;\n\t\t\tinput = { prompt: command.prompt, stdout: options.stdout };\n\t\t}\n\t\tconst code = await host.execute(name, input, context.signal);\n\t\tconst processExit = context.require(processExitKey);\n\t\tprocessExit.setCode(code);\n\t\treturn processExit.code();\n\t} catch (cause) {\n\t\toptions.stderr(`${errorMessage(cause).replace(/^Required entry agent-loop failed: /, \"\")}\\n`);\n\t\treturn 1;\n\t} finally {\n\t\tconst memory = context.get(sessionStoreKey);\n\t\ttry {\n\t\t\ttry {\n\t\t\t\tawait loader.dispose();\n\t\t\t} finally {\n\t\t\t\tawait context.dispose();\n\t\t\t}\n\t\t} finally {\n\t\t\tunsubscribe();\n\t\t\tif (memory) {\n\t\t\t\tmemory.dispose();\n\t\t\t\tif (memory.disposed()) options.onSessionDisposed?.();\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["import { access } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { hostCommandRegistryKey, processExitKey, sessionStoreKey } from \"@di-code/builtins\";\nimport { createCompositionLoader, type PluginModule } from \"@di-code/plugin-loader\";\nimport { createRootContext, type RuntimeEvent, redactSensitiveText } from \"@di-code/plugin-runtime\";\nimport { type CliCommand, createCliParser } from \"./cli.ts\";\nimport {\n\timportCompositionModule,\n\tresolveCompositionEntries,\n\tresolveManagedCompositionEntries,\n} from \"./compositions.ts\";\nimport { createProjectTrustStore } from \"./project-trust-entry.ts\";\nimport type { InteractiveBootstrapOptions } from \"./runtime/interactive-host-service.ts\";\nimport { pluginInventoryKey } from \"./runtime/plugin-inventory-service.ts\";\n\nexport interface MinimalProfileOptions {\n\treadonly version: string;\n\treadonly allowedRoot?: string;\n\t/** User data root used to resolve managed plugin state. */\n\treadonly agentDir?: string;\n\treadonly stdout: (text: string) => void;\n\treadonly stderr: (text: string) => void;\n\treadonly onRuntimeEvent?: (event: RuntimeEvent) => void;\n\treadonly onSessionDisposed?: () => void;\n\t/** Terminal-only facilities supplied by the executable bootstrap. */\n\treadonly interactive?: InteractiveBootstrapOptions;\n\t/** Test-only namespace importer; production uses package-aware composition imports. */\n\treadonly importModule?: (name: string) => Promise<PluginModule>;\n}\n\nfunction errorMessage(cause: unknown): string {\n\treturn redactSensitiveText(cause instanceof Error ? cause.message : String(cause));\n}\n\nfunction isRun(command: CliCommand): command is Extract<CliCommand, { kind: \"run\" }> {\n\treturn command.kind === \"run\";\n}\n\nfunction isMinimalCommand(\n\tcommand: CliCommand,\n): command is Extract<CliCommand, { kind: \"run\" | \"plugin\" | \"observe\" | \"mcp\" }> {\n\treturn command.kind === \"run\" || command.kind === \"plugin\" || command.kind === \"observe\" || command.kind === \"mcp\";\n}\n\nasync function hasTrustedProjectContent(cwd: string): Promise<boolean> {\n\tfor (const path of [\n\t\tjoin(cwd, \".di-code\", \"composition.yml\"),\n\t\tjoin(cwd, \".di-code\", \"composition.yaml\"),\n\t\tjoin(cwd, \".di-code\", \"plugins\"),\n\t\tjoin(cwd, \".di-code\", \"skills\"),\n\t\tjoin(cwd, \".agents\", \"skills\"),\n\t\tjoin(cwd, \".di-code\", \"mcp.local.json\"),\n\t\tjoin(cwd, \".mcp.json\"),\n\t]) {\n\t\ttry {\n\t\t\tawait access(path);\n\t\t\treturn true;\n\t\t} catch (cause) {\n\t\t\tif (!(cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")) throw cause;\n\t\t}\n\t}\n\treturn false;\n}\n\n/** Starts a composition profile and executes its registered host command. */\nexport async function runMinimalProfile(args: readonly string[], options: MinimalProfileOptions): Promise<number> {\n\tconst parser = createCliParser();\n\tlet command: CliCommand;\n\ttry {\n\t\tcommand = parser.parse(args);\n\t} catch (cause) {\n\t\toptions.stderr(`${errorMessage(cause)}\\n`);\n\t\treturn 1;\n\t}\n\tif (command.kind === \"help\") {\n\t\toptions.stdout(`${parser.help(\"en\")}\\n`);\n\t\treturn 0;\n\t}\n\tif (command.kind === \"version\") {\n\t\toptions.stdout(`${options.version}\\n`);\n\t\treturn 0;\n\t}\n\tif (!isMinimalCommand(command)) {\n\t\toptions.stderr(\"MCP commands are unavailable in the minimal profile.\\n\");\n\t\treturn 1;\n\t}\n\tif (isRun(command) && command.mode === \"interactive\" && !options.interactive?.isInteractiveTerminal) {\n\t\toptions.stderr(\"Interactive mode requires an interactive TTY.\\n\");\n\t\treturn 1;\n\t}\n\tconst mode = isRun(command) ? command.mode : \"print\";\n\tconst observability = command.kind === \"observe\";\n\tconst allowedRoot = resolve(options.allowedRoot ?? process.cwd());\n\tconst agentDir = resolve(options.agentDir ?? join(homedir(), \".di-code\"));\n\tconst trustStore = createProjectTrustStore(join(agentDir, \"trust.json\"));\n\tif (isRun(command) && command.projectTrust !== undefined) await trustStore.set(allowedRoot, command.projectTrust);\n\tlet projectTrusted = isRun(command) && !command.noProjectPlugins && (await trustStore.get(allowedRoot)) === true;\n\tif (\n\t\tisRun(command) &&\n\t\tcommand.mode === \"interactive\" &&\n\t\t!projectTrusted &&\n\t\tcommand.projectTrust === undefined &&\n\t\toptions.interactive?.promptProjectTrust &&\n\t\t(await hasTrustedProjectContent(allowedRoot))\n\t) {\n\t\tprojectTrusted = await options.interactive.promptProjectTrust(allowedRoot);\n\t\tawait trustStore.set(allowedRoot, projectTrusted);\n\t}\n\tconst managedEntries = await resolveManagedCompositionEntries(agentDir);\n\tconst compositionEntries = await resolveCompositionEntries(\n\t\tisRun(command) ? (command.profile ?? command.mode) : \"base\",\n\t\t{\n\t\t\tcwd: allowedRoot,\n\t\t\tagentDir,\n\t\t\t...(isRun(command) && command.compositionPath ? { compositionPath: command.compositionPath } : {}),\n\t\t\tincludeProjectComposition: projectTrusted,\n\t\t\tobservability,\n\t\t\tallowedRoot,\n\t\t},\n\t);\n\tconst context = createRootContext({ id: \"minimal-profile\", mode, trustedProject: projectTrusted });\n\tconst unsubscribe = context.events.subscribe((event) => options.onRuntimeEvent?.(event));\n\tconst loader = createCompositionLoader({\n\t\tcontext,\n\t\tentries: [...compositionEntries, ...managedEntries],\n\t\timportModule: options.importModule ?? importCompositionModule,\n\t\tprojectTrusted,\n\t});\n\ttry {\n\t\tawait loader.load();\n\t\tcontext.require(pluginInventoryKey).set(loader.tree.snapshot());\n\t\tconst host = context.require(hostCommandRegistryKey);\n\t\tlet name: string;\n\t\tlet input: unknown;\n\t\tif (command.kind === \"observe\") {\n\t\t\tname = command.action === \"trace\" ? \"trace-plugins\" : \"dump-composition\";\n\t\t\tinput = { stdout: options.stdout };\n\t\t} else if (command.kind === \"plugin\") {\n\t\t\tname = \"plugin\";\n\t\t\tinput = { ...command, stdout: options.stdout, stderr: options.stderr };\n\t\t} else if (command.kind === \"mcp\") {\n\t\t\tname = \"mcp\";\n\t\t\tinput = { ...command, cwd: allowedRoot, stdout: options.stdout, stderr: options.stderr };\n\t\t} else if (command.mode === \"interactive\") {\n\t\t\tname = \"interactive\";\n\t\t\tinput = {\n\t\t\t\tcommand,\n\t\t\t\tcwd: allowedRoot,\n\t\t\t\tagentDir,\n\t\t\t\tprojectTrusted,\n\t\t\t\tstderr: options.stderr,\n\t\t\t\t...(options.interactive?.startInteractiveMode\n\t\t\t\t\t? { startInteractiveMode: options.interactive.startInteractiveMode }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t} else {\n\t\t\tname = command.mode;\n\t\t\tinput = { prompt: command.prompt, stdout: options.stdout };\n\t\t}\n\t\tconst code = await host.execute(name, input, context.signal);\n\t\tconst processExit = context.require(processExitKey);\n\t\tprocessExit.setCode(code);\n\t\treturn processExit.code();\n\t} catch (cause) {\n\t\toptions.stderr(`${errorMessage(cause).replace(/^Required entry agent-loop failed: /, \"\")}\\n`);\n\t\treturn 1;\n\t} finally {\n\t\tconst memory = context.get(sessionStoreKey);\n\t\ttry {\n\t\t\ttry {\n\t\t\t\tawait loader.dispose();\n\t\t\t} finally {\n\t\t\t\tawait context.dispose();\n\t\t\t}\n\t\t} finally {\n\t\t\tunsubscribe();\n\t\t\tif (memory) {\n\t\t\t\tmemory.dispose();\n\t\t\t\tif (memory.disposed()) options.onSessionDisposed?.();\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
@@ -6,6 +6,14 @@ export interface InteractiveViewState extends InteractiveState {
|
|
|
6
6
|
readonly theme: "dark" | "light";
|
|
7
7
|
readonly locale?: Locale;
|
|
8
8
|
readonly pasteImageShortcut?: string;
|
|
9
|
+
readonly planMode?: {
|
|
10
|
+
readonly active: boolean;
|
|
11
|
+
readonly pending: boolean;
|
|
12
|
+
};
|
|
13
|
+
readonly extensions?: readonly {
|
|
14
|
+
readonly label: string;
|
|
15
|
+
readonly tone: "neutral" | "info" | "success" | "warning" | "error";
|
|
16
|
+
}[];
|
|
9
17
|
}
|
|
10
18
|
export declare class InteractiveHeader implements Component {
|
|
11
19
|
private readonly readState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-components.d.ts","sourceRoot":"","sources":["../../src/modes/interactive-components.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAiB,MAAM,cAAc,CAAC;AAE/E,OAAO,EAAkB,KAAK,MAAM,EAAa,MAAM,YAAY,CAAC;AAGpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"interactive-components.d.ts","sourceRoot":"","sources":["../../src/modes/interactive-components.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAiB,MAAM,cAAc,CAAC;AAE/E,OAAO,EAAkB,KAAK,MAAM,EAAa,MAAM,YAAY,CAAC;AAGpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS;QAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;KACpE,EAAE,CAAC;CACJ;AAwFD,qBAAa,iBAAkB,YAAW,SAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;gBAE3C,SAAS,EAAE,MAAM,oBAAoB;IAIjD,UAAU,IAAI,IAAI;IAElB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAW/B;AAED,qBAAa,eAAgB,YAAW,SAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;gBAE3C,SAAS,EAAE,MAAM,oBAAoB;IAIjD,UAAU,IAAI,IAAI;IAElB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CA+G/B;AAED,qBAAa,mBAAoB,YAAW,SAAS;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;gBAE3C,SAAS,EAAE,MAAM,oBAAoB;IAIjD,UAAU,IAAI,IAAI;IAElB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAU/B;AAED,qBAAa,iBAAkB,YAAW,SAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;gBAE3C,SAAS,EAAE,MAAM,oBAAoB;IAIjD,UAAU,IAAI,IAAI;IAElB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAqB/B;AAQD,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,gBAAiB,YAAW,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;gBAE5C,SAAS,EAAE,MAAM,qBAAqB;IAIlD,UAAU,IAAI,IAAI;IAElB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAgB/B"}
|
|
@@ -102,6 +102,8 @@ export class InteractiveChat {
|
|
|
102
102
|
const lines = [];
|
|
103
103
|
const colors = paletteFor(state.theme);
|
|
104
104
|
const markdownTheme = markdownThemeFor(colors);
|
|
105
|
+
for (const extension of state.extensions ?? [])
|
|
106
|
+
lines.push(...renderLine(paint(colors.dim, `[${extension.label}]`, extension.tone === "warning" || extension.tone === "error"), width));
|
|
105
107
|
for (const [index, message] of state.messageItems.entries()) {
|
|
106
108
|
if (index > 0)
|
|
107
109
|
lines.push(" ");
|
|
@@ -208,11 +210,14 @@ export class InteractiveFooter {
|
|
|
208
210
|
const activity = activityLabel(state);
|
|
209
211
|
const left = paint(activity.color, `* ${activity.text}`, true);
|
|
210
212
|
const context = paint(colors.dim, `${translate(state.locale ?? DEFAULT_LOCALE, "messages", String(state.messageItems.length))} ${translate(state.locale ?? DEFAULT_LOCALE, "context")} ${formatTokenCount(state.usage.estimatedContextTokens)}/${formatTokenCount(state.usage.contextWindow)} ${translate(state.locale ?? DEFAULT_LOCALE, "total")} ${formatTokenCount(state.usage.totalTokens)} ${translate(state.locale ?? DEFAULT_LOCALE, "tokens")}`);
|
|
211
|
-
const
|
|
213
|
+
const plan = state.planMode;
|
|
214
|
+
const planLabel = plan?.pending ? "plan: pending" : plan?.active ? "plan: ON" : "plan: off";
|
|
215
|
+
const model = paint(colors.dim, `${state.model} ${state.theme}`);
|
|
216
|
+
const right = plan ? `${paint(plan.active ? colors.accent : colors.dim, planLabel)} ${model}` : model;
|
|
212
217
|
const status = width >= 60 ? alignEnds(`${left} ${context}`, right, width) : `${left} ${right}`;
|
|
213
218
|
const pasteImageShortcut = state.pasteImageShortcut ?? (process.platform === "win32" ? "Alt+V" : "Ctrl+V");
|
|
214
219
|
const hints = width >= 60
|
|
215
|
-
? `Enter ${translate(state.locale ?? DEFAULT_LOCALE, "send")} ${pasteImageShortcut} ${translate(state.locale ?? DEFAULT_LOCALE, "pasteImage")} Shift+Tab ${translate(state.locale ?? DEFAULT_LOCALE, "thinkingShortcut")} Esc ${translate(state.locale ?? DEFAULT_LOCALE, "cancel")} Ctrl+O ${translate(state.locale ?? DEFAULT_LOCALE, "model")}`
|
|
220
|
+
? `Enter ${translate(state.locale ?? DEFAULT_LOCALE, "send")} ${pasteImageShortcut} ${translate(state.locale ?? DEFAULT_LOCALE, "pasteImage")} Alt+P Plan Shift+Tab ${translate(state.locale ?? DEFAULT_LOCALE, "thinkingShortcut")} Esc ${translate(state.locale ?? DEFAULT_LOCALE, "cancel")} Ctrl+O ${translate(state.locale ?? DEFAULT_LOCALE, "model")}`
|
|
216
221
|
: `Enter ${translate(state.locale ?? DEFAULT_LOCALE, "send")} ${pasteImageShortcut} ${translate(state.locale ?? DEFAULT_LOCALE, "imageShortcut")}`;
|
|
217
222
|
return [...renderLine(status, width), ...renderLine(paint(colors.dim, hints), width)];
|
|
218
223
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-components.js","sourceRoot":"","sources":["../../src/modes/interactive-components.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AutocompleteItem, Component, MarkdownTheme } from \"@di-code/tui\";\nimport { Markdown, SelectionPanel, Text, truncateToWidth, visibleWidth } from \"@di-code/tui\";\nimport { DEFAULT_LOCALE, type Locale, translate } from \"../i18n.ts\";\nimport { highlightCode } from \"../utils/syntax-highlight.ts\";\nimport { renderDiff } from \"./interactive-diff.ts\";\nimport type { InteractiveState } from \"./interactive-state.ts\";\n\nexport interface InteractiveViewState extends InteractiveState {\n\treadonly model: string;\n\treadonly theme: \"dark\" | \"light\";\n\treadonly locale?: Locale;\n\treadonly pasteImageShortcut?: string;\n}\n\ninterface Palette {\n\treadonly accent: string;\n\treadonly assistant: string;\n\treadonly dim: string;\n\treadonly error: string;\n\treadonly success: string;\n\treadonly userBackground: string;\n\treadonly warning: string;\n}\n\nconst RESET = \"\\x1b[0m\";\nconst BOLD = \"\\x1b[1m\";\nconst MAX_VISIBLE_TOOL_ITEMS = 6;\nconst SPINNER_FRAMES = [\"|\", \"/\", \"-\", \"\\\\\"] as const;\n\nfunction paletteFor(theme: InteractiveViewState[\"theme\"]): Palette {\n\treturn theme === \"light\"\n\t\t? {\n\t\t\t\taccent: \"\\x1b[38;5;25m\",\n\t\t\t\tassistant: \"\\x1b[38;5;30m\",\n\t\t\t\tdim: \"\\x1b[38;5;242m\",\n\t\t\t\terror: \"\\x1b[38;5;160m\",\n\t\t\t\tsuccess: \"\\x1b[38;5;28m\",\n\t\t\t\tuserBackground: \"\\x1b[48;2;239;246;255m\",\n\t\t\t\twarning: \"\\x1b[38;5;130m\",\n\t\t\t}\n\t\t: {\n\t\t\t\taccent: \"\\x1b[38;5;45m\",\n\t\t\t\tassistant: \"\\x1b[38;5;80m\",\n\t\t\t\tdim: \"\\x1b[38;5;245m\",\n\t\t\t\terror: \"\\x1b[38;5;210m\",\n\t\t\t\tsuccess: \"\\x1b[38;5;114m\",\n\t\t\t\tuserBackground: \"\\x1b[48;2;31;39;50m\",\n\t\t\t\twarning: \"\\x1b[38;5;222m\",\n\t\t\t};\n}\n\nfunction paint(color: string, text: string, bold = false): string {\n\treturn `${color}${bold ? BOLD : \"\"}${text}${RESET}`;\n}\n\nfunction paintBackground(background: string, text: string): string {\n\treturn `${background}${text}${RESET}`;\n}\n\nfunction markdownThemeFor(colors: Palette): MarkdownTheme {\n\treturn {\n\t\theading: (text) => paint(colors.assistant, text, true),\n\t\tlink: (text) => paint(colors.accent, text),\n\t\tlinkUrl: (text) => paint(colors.dim, text),\n\t\tcode: (text) => paint(colors.warning, text),\n\t\tcodeBlock: (text) => paint(colors.assistant, text),\n\t\tcodeBlockBorder: (text) => paint(colors.dim, text),\n\t\tquote: (text) => paint(colors.dim, text),\n\t\tquoteBorder: (text) => paint(colors.dim, text),\n\t\thr: (text) => paint(colors.dim, text),\n\t\tlistBullet: (text) => paint(colors.accent, text),\n\t\tbold: (text) => paint(colors.assistant, text, true),\n\t\titalic: (text) => `\\x1b[3m${text}${RESET}`,\n\t\tstrikethrough: (text) => `\\x1b[9m${text}${RESET}`,\n\t\tunderline: (text) => `\\x1b[4m${text}${RESET}`,\n\t\thighlightCode: (code, language) =>\n\t\t\t(language ? highlightCode(code, language) : undefined) ??\n\t\t\tcode.split(\"\\n\").map((line) => paint(colors.assistant, line)),\n\t};\n}\n\nfunction renderLine(text: string, width: number): string[] {\n\treturn new Text(truncateToWidth(text, width, \"\")).render(width);\n}\n\nfunction alignEnds(left: string, right: string, width: number): string {\n\tconst gap = 3;\n\tif (visibleWidth(left) + visibleWidth(right) + gap > width) return truncateToWidth(left, width, \"\");\n\treturn `${left}${\" \".repeat(width - visibleWidth(left) - visibleWidth(right))}${right}`;\n}\n\nfunction activityLabel(state: InteractiveViewState): { readonly text: string; readonly color: string } {\n\tconst colors = paletteFor(state.theme);\n\tif (state.error) return { text: translate(state.locale ?? DEFAULT_LOCALE, \"error\"), color: colors.error };\n\tif (state.compacting) return { text: translate(state.locale ?? DEFAULT_LOCALE, \"compacting\"), color: colors.warning };\n\tif (state.retrying) return { text: translate(state.locale ?? DEFAULT_LOCALE, \"retrying\"), color: colors.warning };\n\tif (state.busy) return { text: translate(state.locale ?? DEFAULT_LOCALE, \"working\"), color: colors.accent };\n\treturn { text: translate(state.locale ?? DEFAULT_LOCALE, \"ready\"), color: colors.success };\n}\n\nexport class InteractiveHeader implements Component {\n\tprivate readonly readState: () => InteractiveViewState;\n\n\tconstructor(readState: () => InteractiveViewState) {\n\t\tthis.readState = readState;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst state = this.readState();\n\t\tconst colors = paletteFor(state.theme);\n\t\tconst brand = paint(colors.accent, \"DI-CODE / INTERACTIVE\", true);\n\t\tconst model = paint(colors.dim, `MODEL ${state.model}`);\n\t\tconst title =\n\t\t\twidth >= 56\n\t\t\t\t? alignEnds(brand, model, width)\n\t\t\t\t: `${paint(colors.accent, \"DI-CODE\", true)} ${paint(colors.dim, state.model)}`;\n\t\treturn [...renderLine(title, width), ...renderLine(paint(colors.dim, \"-\".repeat(Math.max(0, width))), width)];\n\t}\n}\n\nexport class InteractiveChat implements Component {\n\tprivate readonly readState: () => InteractiveViewState;\n\n\tconstructor(readState: () => InteractiveViewState) {\n\t\tthis.readState = readState;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst state = this.readState();\n\t\tconst lines: string[] = [];\n\t\tconst colors = paletteFor(state.theme);\n\t\tconst markdownTheme = markdownThemeFor(colors);\n\t\tfor (const [index, message] of state.messageItems.entries()) {\n\t\t\tif (index > 0) lines.push(\" \");\n\t\t\tif (message.role === \"file_change\") {\n\t\t\t\tlines.push(\n\t\t\t\t\t...renderLine(\n\t\t\t\t\t\tpaint(\n\t\t\t\t\t\t\tcolors.dim,\n\t\t\t\t\t\t\t`${translate(state.locale ?? DEFAULT_LOCALE, message.kind === \"edit\" ? \"edited\" : \"wrote\")} ${message.path}`,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t),\n\t\t\t\t\t\twidth,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tif (message.diff) {\n\t\t\t\t\tfor (const line of renderDiff(message.diff, colors)) lines.push(...renderLine(line, width));\n\t\t\t\t} else {\n\t\t\t\t\tfor (const line of message.removed) lines.push(...renderLine(paint(colors.error, `- ${line}`), width));\n\t\t\t\t\tfor (const line of message.added) lines.push(...renderLine(paint(colors.success, `+ ${line}`), width));\n\t\t\t\t}\n\t\t\t} else if (message.role === \"user\") {\n\t\t\t\tlines.push(\n\t\t\t\t\t...new Text(message.text, 2, 1).render(width).map((line) => paintBackground(colors.userBackground, line)),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlines.push(...new Markdown(message.text, { paddingX: 2, theme: markdownTheme }).render(width));\n\t\t\t}\n\t\t}\n\t\tconst hasProcess = state.processItems.length > 0 || (state.busy && !state.streamingText);\n\t\tif (hasProcess && lines.length > 0) lines.push(\" \");\n\t\tconst toolCount = state.processItems.filter((item) => item.type === \"tool\").length;\n\t\tconst hiddenToolItems = Math.max(0, toolCount - MAX_VISIBLE_TOOL_ITEMS);\n\t\tlet skippedToolItems = 0;\n\t\tfor (const item of state.processItems) {\n\t\t\tif (item.type === \"tool\" && skippedToolItems < hiddenToolItems) {\n\t\t\t\tskippedToolItems += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (item.type === \"tool\" && skippedToolItems === hiddenToolItems && hiddenToolItems > 0) {\n\t\t\t\tlines.push(\n\t\t\t\t\t...renderLine(\n\t\t\t\t\t\t` ${paint(colors.dim, translate(state.locale ?? DEFAULT_LOCALE, \"earlierToolUpdates\", String(hiddenToolItems)))}`,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tskippedToolItems += 1;\n\t\t\t}\n\t\t\tif (item.type === \"thinking\") {\n\t\t\t\tconst frame = SPINNER_FRAMES[state.spinnerFrame % SPINNER_FRAMES.length] ?? SPINNER_FRAMES[0];\n\t\t\t\tlines.push(\n\t\t\t\t\t...renderLine(\n\t\t\t\t\t\t` ${paint(colors.accent, `${frame} ${translate(state.locale ?? DEFAULT_LOCALE, \"thinking\")}`)}`,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst marker = item.status === \"running\" ? \">\" : item.status === \"error\" ? \"!\" : \"+\";\n\t\t\tconst command = truncateToWidth(item.command, Math.max(1, width - 6), \"...\");\n\t\t\tconst color = item.status === \"error\" ? colors.error : item.status === \"done\" ? colors.success : colors.warning;\n\t\t\tlines.push(...renderLine(` ${paint(color, marker)} ${paint(colors.dim, command)}`, width));\n\t\t}\n\t\tif (state.busy && !state.streamingText && !state.processItems.some((item) => item.type === \"thinking\")) {\n\t\t\tconst frame = SPINNER_FRAMES[state.spinnerFrame % SPINNER_FRAMES.length] ?? SPINNER_FRAMES[0];\n\t\t\tlines.push(\n\t\t\t\t...renderLine(\n\t\t\t\t\t` ${paint(colors.accent, `${frame} ${translate(state.locale ?? DEFAULT_LOCALE, \"thinking\")}`)}`,\n\t\t\t\t\twidth,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tif (hasProcess) lines.push(\" \");\n\t\tif (state.streamingText) {\n\t\t\tif (lines.length > 0 && lines.at(-1) !== \" \") lines.push(\" \");\n\t\t\tlines.push(...new Markdown(state.streamingText, { paddingX: 2, theme: markdownTheme }).render(width));\n\t\t}\n\t\tconst hasActivity = state.status || state.queue.length > 0 || state.error;\n\t\tif (hasActivity) {\n\t\t\tif (lines.length > 0) lines.push(\" \");\n\t\t\tlines.push(...renderLine(paint(colors.dim, translate(state.locale ?? DEFAULT_LOCALE, \"activity\"), true), width));\n\t\t\tif (state.status) lines.push(...renderLine(` ${paint(colors.dim, state.status)}`, width));\n\t\t\tif (state.queue.length > 0) {\n\t\t\t\tlines.push(\n\t\t\t\t\t...renderLine(\n\t\t\t\t\t\t` ${paint(colors.dim, translate(state.locale ?? DEFAULT_LOCALE, \"queue\", String(state.queue.length)))}`,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tfor (const prompt of state.queue) lines.push(...new Text(` ${prompt}`).render(width));\n\t\t\t}\n\t\t\tif (state.error)\n\t\t\t\tlines.push(\n\t\t\t\t\t...new Text(\n\t\t\t\t\t\t` ${paint(colors.error, `${translate(state.locale ?? DEFAULT_LOCALE, \"errorPrefix\")}: ${state.error}`, true)}`,\n\t\t\t\t\t).render(width),\n\t\t\t\t);\n\t\t}\n\t\tconst rendered = lines.flatMap((line) => new Text(line).render(width));\n\t\treturn rendered.length > 0 ? rendered : [\"\"];\n\t}\n}\n\nexport class InteractiveComposer implements Component {\n\tprivate readonly readState: () => InteractiveViewState;\n\n\tconstructor(readState: () => InteractiveViewState) {\n\t\tthis.readState = readState;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst state = this.readState();\n\t\tconst colors = paletteFor(state.theme);\n\t\tconst locale = state.locale ?? DEFAULT_LOCALE;\n\t\tconst copy =\n\t\t\twidth >= 56\n\t\t\t\t? `/ ${translate(locale, \"commands\")} Tab ${translate(locale, \"complete\")}`\n\t\t\t\t: `/ ${translate(locale, \"commands\")}`;\n\t\treturn renderLine(paint(colors.dim, copy), width);\n\t}\n}\n\nexport class InteractiveFooter implements Component {\n\tprivate readonly readState: () => InteractiveViewState;\n\n\tconstructor(readState: () => InteractiveViewState) {\n\t\tthis.readState = readState;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst state = this.readState();\n\t\tconst colors = paletteFor(state.theme);\n\t\tconst activity = activityLabel(state);\n\t\tconst left = paint(activity.color, `* ${activity.text}`, true);\n\t\tconst context = paint(\n\t\t\tcolors.dim,\n\t\t\t`${translate(state.locale ?? DEFAULT_LOCALE, \"messages\", String(state.messageItems.length))} ${translate(state.locale ?? DEFAULT_LOCALE, \"context\")} ${formatTokenCount(state.usage.estimatedContextTokens)}/${formatTokenCount(state.usage.contextWindow)} ${translate(state.locale ?? DEFAULT_LOCALE, \"total\")} ${formatTokenCount(state.usage.totalTokens)} ${translate(state.locale ?? DEFAULT_LOCALE, \"tokens\")}`,\n\t\t);\n\t\tconst right = paint(colors.dim, `${state.model} ${state.theme}`);\n\t\tconst status = width >= 60 ? alignEnds(`${left} ${context}`, right, width) : `${left} ${right}`;\n\t\tconst pasteImageShortcut = state.pasteImageShortcut ?? (process.platform === \"win32\" ? \"Alt+V\" : \"Ctrl+V\");\n\t\tconst hints =\n\t\t\twidth >= 60\n\t\t\t\t? `Enter ${translate(state.locale ?? DEFAULT_LOCALE, \"send\")} ${pasteImageShortcut} ${translate(state.locale ?? DEFAULT_LOCALE, \"pasteImage\")} Shift+Tab ${translate(state.locale ?? DEFAULT_LOCALE, \"thinkingShortcut\")} Esc ${translate(state.locale ?? DEFAULT_LOCALE, \"cancel\")} Ctrl+O ${translate(state.locale ?? DEFAULT_LOCALE, \"model\")}`\n\t\t\t\t: `Enter ${translate(state.locale ?? DEFAULT_LOCALE, \"send\")} ${pasteImageShortcut} ${translate(state.locale ?? DEFAULT_LOCALE, \"imageShortcut\")}`;\n\t\treturn [...renderLine(status, width), ...renderLine(paint(colors.dim, hints), width)];\n\t}\n}\n\nfunction formatTokenCount(value: number): string {\n\tif (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}m`;\n\tif (value >= 1_000) return `${(value / 1_000).toFixed(1)}k`;\n\treturn String(value);\n}\n\nexport interface AutocompleteMenuState {\n\treadonly items: readonly AutocompleteItem[];\n\treadonly index: number;\n}\n\nexport class AutocompleteMenu implements Component {\n\tprivate readonly readState: () => AutocompleteMenuState;\n\n\tconstructor(readState: () => AutocompleteMenuState) {\n\t\tthis.readState = readState;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst state = this.readState();\n\t\tconst maxVisible = 6;\n\t\tconst start = Math.min(\n\t\t\tMath.max(0, state.index - Math.floor(maxVisible / 2)),\n\t\t\tMath.max(0, state.items.length - maxVisible),\n\t\t);\n\t\tconst items = state.items.slice(start, start + maxVisible);\n\t\treturn new SelectionPanel({\n\t\t\ttitle: \"Suggestions\",\n\t\t\trows: items.map((item) => `${item.label}${item.description ? ` - ${item.description}` : \"\"}`),\n\t\t\tselectedIndex: state.index - start,\n\t\t\tposition: state.index + 1,\n\t\t\ttotal: state.items.length,\n\t\t}).render(width);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-components.js","sourceRoot":"","sources":["../../src/modes/interactive-components.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AutocompleteItem, Component, MarkdownTheme } from \"@di-code/tui\";\nimport { Markdown, SelectionPanel, Text, truncateToWidth, visibleWidth } from \"@di-code/tui\";\nimport { DEFAULT_LOCALE, type Locale, translate } from \"../i18n.ts\";\nimport { highlightCode } from \"../utils/syntax-highlight.ts\";\nimport { renderDiff } from \"./interactive-diff.ts\";\nimport type { InteractiveState } from \"./interactive-state.ts\";\n\nexport interface InteractiveViewState extends InteractiveState {\n\treadonly model: string;\n\treadonly theme: \"dark\" | \"light\";\n\treadonly locale?: Locale;\n\treadonly pasteImageShortcut?: string;\n\treadonly planMode?: { readonly active: boolean; readonly pending: boolean };\n\treadonly extensions?: readonly {\n\t\treadonly label: string;\n\t\treadonly tone: \"neutral\" | \"info\" | \"success\" | \"warning\" | \"error\";\n\t}[];\n}\n\ninterface Palette {\n\treadonly accent: string;\n\treadonly assistant: string;\n\treadonly dim: string;\n\treadonly error: string;\n\treadonly success: string;\n\treadonly userBackground: string;\n\treadonly warning: string;\n}\n\nconst RESET = \"\\x1b[0m\";\nconst BOLD = \"\\x1b[1m\";\nconst MAX_VISIBLE_TOOL_ITEMS = 6;\nconst SPINNER_FRAMES = [\"|\", \"/\", \"-\", \"\\\\\"] as const;\n\nfunction paletteFor(theme: InteractiveViewState[\"theme\"]): Palette {\n\treturn theme === \"light\"\n\t\t? {\n\t\t\t\taccent: \"\\x1b[38;5;25m\",\n\t\t\t\tassistant: \"\\x1b[38;5;30m\",\n\t\t\t\tdim: \"\\x1b[38;5;242m\",\n\t\t\t\terror: \"\\x1b[38;5;160m\",\n\t\t\t\tsuccess: \"\\x1b[38;5;28m\",\n\t\t\t\tuserBackground: \"\\x1b[48;2;239;246;255m\",\n\t\t\t\twarning: \"\\x1b[38;5;130m\",\n\t\t\t}\n\t\t: {\n\t\t\t\taccent: \"\\x1b[38;5;45m\",\n\t\t\t\tassistant: \"\\x1b[38;5;80m\",\n\t\t\t\tdim: \"\\x1b[38;5;245m\",\n\t\t\t\terror: \"\\x1b[38;5;210m\",\n\t\t\t\tsuccess: \"\\x1b[38;5;114m\",\n\t\t\t\tuserBackground: \"\\x1b[48;2;31;39;50m\",\n\t\t\t\twarning: \"\\x1b[38;5;222m\",\n\t\t\t};\n}\n\nfunction paint(color: string, text: string, bold = false): string {\n\treturn `${color}${bold ? BOLD : \"\"}${text}${RESET}`;\n}\n\nfunction paintBackground(background: string, text: string): string {\n\treturn `${background}${text}${RESET}`;\n}\n\nfunction markdownThemeFor(colors: Palette): MarkdownTheme {\n\treturn {\n\t\theading: (text) => paint(colors.assistant, text, true),\n\t\tlink: (text) => paint(colors.accent, text),\n\t\tlinkUrl: (text) => paint(colors.dim, text),\n\t\tcode: (text) => paint(colors.warning, text),\n\t\tcodeBlock: (text) => paint(colors.assistant, text),\n\t\tcodeBlockBorder: (text) => paint(colors.dim, text),\n\t\tquote: (text) => paint(colors.dim, text),\n\t\tquoteBorder: (text) => paint(colors.dim, text),\n\t\thr: (text) => paint(colors.dim, text),\n\t\tlistBullet: (text) => paint(colors.accent, text),\n\t\tbold: (text) => paint(colors.assistant, text, true),\n\t\titalic: (text) => `\\x1b[3m${text}${RESET}`,\n\t\tstrikethrough: (text) => `\\x1b[9m${text}${RESET}`,\n\t\tunderline: (text) => `\\x1b[4m${text}${RESET}`,\n\t\thighlightCode: (code, language) =>\n\t\t\t(language ? highlightCode(code, language) : undefined) ??\n\t\t\tcode.split(\"\\n\").map((line) => paint(colors.assistant, line)),\n\t};\n}\n\nfunction renderLine(text: string, width: number): string[] {\n\treturn new Text(truncateToWidth(text, width, \"\")).render(width);\n}\n\nfunction alignEnds(left: string, right: string, width: number): string {\n\tconst gap = 3;\n\tif (visibleWidth(left) + visibleWidth(right) + gap > width) return truncateToWidth(left, width, \"\");\n\treturn `${left}${\" \".repeat(width - visibleWidth(left) - visibleWidth(right))}${right}`;\n}\n\nfunction activityLabel(state: InteractiveViewState): { readonly text: string; readonly color: string } {\n\tconst colors = paletteFor(state.theme);\n\tif (state.error) return { text: translate(state.locale ?? DEFAULT_LOCALE, \"error\"), color: colors.error };\n\tif (state.compacting) return { text: translate(state.locale ?? DEFAULT_LOCALE, \"compacting\"), color: colors.warning };\n\tif (state.retrying) return { text: translate(state.locale ?? DEFAULT_LOCALE, \"retrying\"), color: colors.warning };\n\tif (state.busy) return { text: translate(state.locale ?? DEFAULT_LOCALE, \"working\"), color: colors.accent };\n\treturn { text: translate(state.locale ?? DEFAULT_LOCALE, \"ready\"), color: colors.success };\n}\n\nexport class InteractiveHeader implements Component {\n\tprivate readonly readState: () => InteractiveViewState;\n\n\tconstructor(readState: () => InteractiveViewState) {\n\t\tthis.readState = readState;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst state = this.readState();\n\t\tconst colors = paletteFor(state.theme);\n\t\tconst brand = paint(colors.accent, \"DI-CODE / INTERACTIVE\", true);\n\t\tconst model = paint(colors.dim, `MODEL ${state.model}`);\n\t\tconst title =\n\t\t\twidth >= 56\n\t\t\t\t? alignEnds(brand, model, width)\n\t\t\t\t: `${paint(colors.accent, \"DI-CODE\", true)} ${paint(colors.dim, state.model)}`;\n\t\treturn [...renderLine(title, width), ...renderLine(paint(colors.dim, \"-\".repeat(Math.max(0, width))), width)];\n\t}\n}\n\nexport class InteractiveChat implements Component {\n\tprivate readonly readState: () => InteractiveViewState;\n\n\tconstructor(readState: () => InteractiveViewState) {\n\t\tthis.readState = readState;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst state = this.readState();\n\t\tconst lines: string[] = [];\n\t\tconst colors = paletteFor(state.theme);\n\t\tconst markdownTheme = markdownThemeFor(colors);\n\t\tfor (const extension of state.extensions ?? [])\n\t\t\tlines.push(\n\t\t\t\t...renderLine(\n\t\t\t\t\tpaint(colors.dim, `[${extension.label}]`, extension.tone === \"warning\" || extension.tone === \"error\"),\n\t\t\t\t\twidth,\n\t\t\t\t),\n\t\t\t);\n\t\tfor (const [index, message] of state.messageItems.entries()) {\n\t\t\tif (index > 0) lines.push(\" \");\n\t\t\tif (message.role === \"file_change\") {\n\t\t\t\tlines.push(\n\t\t\t\t\t...renderLine(\n\t\t\t\t\t\tpaint(\n\t\t\t\t\t\t\tcolors.dim,\n\t\t\t\t\t\t\t`${translate(state.locale ?? DEFAULT_LOCALE, message.kind === \"edit\" ? \"edited\" : \"wrote\")} ${message.path}`,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t),\n\t\t\t\t\t\twidth,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tif (message.diff) {\n\t\t\t\t\tfor (const line of renderDiff(message.diff, colors)) lines.push(...renderLine(line, width));\n\t\t\t\t} else {\n\t\t\t\t\tfor (const line of message.removed) lines.push(...renderLine(paint(colors.error, `- ${line}`), width));\n\t\t\t\t\tfor (const line of message.added) lines.push(...renderLine(paint(colors.success, `+ ${line}`), width));\n\t\t\t\t}\n\t\t\t} else if (message.role === \"user\") {\n\t\t\t\tlines.push(\n\t\t\t\t\t...new Text(message.text, 2, 1).render(width).map((line) => paintBackground(colors.userBackground, line)),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlines.push(...new Markdown(message.text, { paddingX: 2, theme: markdownTheme }).render(width));\n\t\t\t}\n\t\t}\n\t\tconst hasProcess = state.processItems.length > 0 || (state.busy && !state.streamingText);\n\t\tif (hasProcess && lines.length > 0) lines.push(\" \");\n\t\tconst toolCount = state.processItems.filter((item) => item.type === \"tool\").length;\n\t\tconst hiddenToolItems = Math.max(0, toolCount - MAX_VISIBLE_TOOL_ITEMS);\n\t\tlet skippedToolItems = 0;\n\t\tfor (const item of state.processItems) {\n\t\t\tif (item.type === \"tool\" && skippedToolItems < hiddenToolItems) {\n\t\t\t\tskippedToolItems += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (item.type === \"tool\" && skippedToolItems === hiddenToolItems && hiddenToolItems > 0) {\n\t\t\t\tlines.push(\n\t\t\t\t\t...renderLine(\n\t\t\t\t\t\t` ${paint(colors.dim, translate(state.locale ?? DEFAULT_LOCALE, \"earlierToolUpdates\", String(hiddenToolItems)))}`,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tskippedToolItems += 1;\n\t\t\t}\n\t\t\tif (item.type === \"thinking\") {\n\t\t\t\tconst frame = SPINNER_FRAMES[state.spinnerFrame % SPINNER_FRAMES.length] ?? SPINNER_FRAMES[0];\n\t\t\t\tlines.push(\n\t\t\t\t\t...renderLine(\n\t\t\t\t\t\t` ${paint(colors.accent, `${frame} ${translate(state.locale ?? DEFAULT_LOCALE, \"thinking\")}`)}`,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst marker = item.status === \"running\" ? \">\" : item.status === \"error\" ? \"!\" : \"+\";\n\t\t\tconst command = truncateToWidth(item.command, Math.max(1, width - 6), \"...\");\n\t\t\tconst color = item.status === \"error\" ? colors.error : item.status === \"done\" ? colors.success : colors.warning;\n\t\t\tlines.push(...renderLine(` ${paint(color, marker)} ${paint(colors.dim, command)}`, width));\n\t\t}\n\t\tif (state.busy && !state.streamingText && !state.processItems.some((item) => item.type === \"thinking\")) {\n\t\t\tconst frame = SPINNER_FRAMES[state.spinnerFrame % SPINNER_FRAMES.length] ?? SPINNER_FRAMES[0];\n\t\t\tlines.push(\n\t\t\t\t...renderLine(\n\t\t\t\t\t` ${paint(colors.accent, `${frame} ${translate(state.locale ?? DEFAULT_LOCALE, \"thinking\")}`)}`,\n\t\t\t\t\twidth,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tif (hasProcess) lines.push(\" \");\n\t\tif (state.streamingText) {\n\t\t\tif (lines.length > 0 && lines.at(-1) !== \" \") lines.push(\" \");\n\t\t\tlines.push(...new Markdown(state.streamingText, { paddingX: 2, theme: markdownTheme }).render(width));\n\t\t}\n\t\tconst hasActivity = state.status || state.queue.length > 0 || state.error;\n\t\tif (hasActivity) {\n\t\t\tif (lines.length > 0) lines.push(\" \");\n\t\t\tlines.push(...renderLine(paint(colors.dim, translate(state.locale ?? DEFAULT_LOCALE, \"activity\"), true), width));\n\t\t\tif (state.status) lines.push(...renderLine(` ${paint(colors.dim, state.status)}`, width));\n\t\t\tif (state.queue.length > 0) {\n\t\t\t\tlines.push(\n\t\t\t\t\t...renderLine(\n\t\t\t\t\t\t` ${paint(colors.dim, translate(state.locale ?? DEFAULT_LOCALE, \"queue\", String(state.queue.length)))}`,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tfor (const prompt of state.queue) lines.push(...new Text(` ${prompt}`).render(width));\n\t\t\t}\n\t\t\tif (state.error)\n\t\t\t\tlines.push(\n\t\t\t\t\t...new Text(\n\t\t\t\t\t\t` ${paint(colors.error, `${translate(state.locale ?? DEFAULT_LOCALE, \"errorPrefix\")}: ${state.error}`, true)}`,\n\t\t\t\t\t).render(width),\n\t\t\t\t);\n\t\t}\n\t\tconst rendered = lines.flatMap((line) => new Text(line).render(width));\n\t\treturn rendered.length > 0 ? rendered : [\"\"];\n\t}\n}\n\nexport class InteractiveComposer implements Component {\n\tprivate readonly readState: () => InteractiveViewState;\n\n\tconstructor(readState: () => InteractiveViewState) {\n\t\tthis.readState = readState;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst state = this.readState();\n\t\tconst colors = paletteFor(state.theme);\n\t\tconst locale = state.locale ?? DEFAULT_LOCALE;\n\t\tconst copy =\n\t\t\twidth >= 56\n\t\t\t\t? `/ ${translate(locale, \"commands\")} Tab ${translate(locale, \"complete\")}`\n\t\t\t\t: `/ ${translate(locale, \"commands\")}`;\n\t\treturn renderLine(paint(colors.dim, copy), width);\n\t}\n}\n\nexport class InteractiveFooter implements Component {\n\tprivate readonly readState: () => InteractiveViewState;\n\n\tconstructor(readState: () => InteractiveViewState) {\n\t\tthis.readState = readState;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst state = this.readState();\n\t\tconst colors = paletteFor(state.theme);\n\t\tconst activity = activityLabel(state);\n\t\tconst left = paint(activity.color, `* ${activity.text}`, true);\n\t\tconst context = paint(\n\t\t\tcolors.dim,\n\t\t\t`${translate(state.locale ?? DEFAULT_LOCALE, \"messages\", String(state.messageItems.length))} ${translate(state.locale ?? DEFAULT_LOCALE, \"context\")} ${formatTokenCount(state.usage.estimatedContextTokens)}/${formatTokenCount(state.usage.contextWindow)} ${translate(state.locale ?? DEFAULT_LOCALE, \"total\")} ${formatTokenCount(state.usage.totalTokens)} ${translate(state.locale ?? DEFAULT_LOCALE, \"tokens\")}`,\n\t\t);\n\t\tconst plan = state.planMode;\n\t\tconst planLabel = plan?.pending ? \"plan: pending\" : plan?.active ? \"plan: ON\" : \"plan: off\";\n\t\tconst model = paint(colors.dim, `${state.model} ${state.theme}`);\n\t\tconst right = plan ? `${paint(plan.active ? colors.accent : colors.dim, planLabel)} ${model}` : model;\n\t\tconst status = width >= 60 ? alignEnds(`${left} ${context}`, right, width) : `${left} ${right}`;\n\t\tconst pasteImageShortcut = state.pasteImageShortcut ?? (process.platform === \"win32\" ? \"Alt+V\" : \"Ctrl+V\");\n\t\tconst hints =\n\t\t\twidth >= 60\n\t\t\t\t? `Enter ${translate(state.locale ?? DEFAULT_LOCALE, \"send\")} ${pasteImageShortcut} ${translate(state.locale ?? DEFAULT_LOCALE, \"pasteImage\")} Alt+P Plan Shift+Tab ${translate(state.locale ?? DEFAULT_LOCALE, \"thinkingShortcut\")} Esc ${translate(state.locale ?? DEFAULT_LOCALE, \"cancel\")} Ctrl+O ${translate(state.locale ?? DEFAULT_LOCALE, \"model\")}`\n\t\t\t\t: `Enter ${translate(state.locale ?? DEFAULT_LOCALE, \"send\")} ${pasteImageShortcut} ${translate(state.locale ?? DEFAULT_LOCALE, \"imageShortcut\")}`;\n\t\treturn [...renderLine(status, width), ...renderLine(paint(colors.dim, hints), width)];\n\t}\n}\n\nfunction formatTokenCount(value: number): string {\n\tif (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}m`;\n\tif (value >= 1_000) return `${(value / 1_000).toFixed(1)}k`;\n\treturn String(value);\n}\n\nexport interface AutocompleteMenuState {\n\treadonly items: readonly AutocompleteItem[];\n\treadonly index: number;\n}\n\nexport class AutocompleteMenu implements Component {\n\tprivate readonly readState: () => AutocompleteMenuState;\n\n\tconstructor(readState: () => AutocompleteMenuState) {\n\t\tthis.readState = readState;\n\t}\n\n\tinvalidate(): void {}\n\n\trender(width: number): string[] {\n\t\tconst state = this.readState();\n\t\tconst maxVisible = 6;\n\t\tconst start = Math.min(\n\t\t\tMath.max(0, state.index - Math.floor(maxVisible / 2)),\n\t\t\tMath.max(0, state.items.length - maxVisible),\n\t\t);\n\t\tconst items = state.items.slice(start, start + maxVisible);\n\t\treturn new SelectionPanel({\n\t\t\ttitle: \"Suggestions\",\n\t\t\trows: items.map((item) => `${item.label}${item.description ? ` - ${item.description}` : \"\"}`),\n\t\t\tselectedIndex: state.index - start,\n\t\t\tposition: state.index + 1,\n\t\t\ttotal: state.items.length,\n\t\t}).render(width);\n\t}\n}\n"]}
|