agentdev 0.1.10 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BasicAgent-7TNMYC3X.js +13 -0
- package/dist/ExplorerAgent-L3ZTVQGM.js +13 -0
- package/dist/{chunk-72H6A6NB.js → chunk-35LBACUK.js} +8 -8
- package/dist/{chunk-72H6A6NB.js.map → chunk-35LBACUK.js.map} +1 -1
- package/dist/{chunk-NORTAQIL.js → chunk-4WK7UENZ.js} +1011 -11
- package/dist/chunk-4WK7UENZ.js.map +1 -0
- package/dist/{chunk-BAP2GCYH.js → chunk-7GTVQ55R.js} +1 -1
- package/dist/chunk-7GTVQ55R.js.map +1 -0
- package/dist/{chunk-G5ECPY4K.js → chunk-EK6KGS2M.js} +87 -8
- package/dist/{chunk-G5ECPY4K.js.map → chunk-EK6KGS2M.js.map} +1 -1
- package/dist/{chunk-REOJZCSZ.js → chunk-KE3KYZVJ.js} +21 -8
- package/dist/chunk-KE3KYZVJ.js.map +1 -0
- package/dist/{chunk-EECW6PYP.js → chunk-UL2ZBPBL.js} +60 -4
- package/dist/chunk-UL2ZBPBL.js.map +1 -0
- package/dist/{chunk-3AR3JBW6.js → chunk-XRB6MD2J.js} +5436 -883
- package/dist/chunk-XRB6MD2J.js.map +1 -0
- package/dist/cli/server.js +2 -2
- package/dist/cli/viewer.js +2 -2
- package/dist/features/mcp/templates/mcp-tool.render.js +14 -1
- package/dist/features/mcp/templates/mcp-tool.render.js.map +1 -1
- package/dist/features/shell/templates/bash.render.d.ts +1 -1
- package/dist/features/websearch/templates/web-fetch.render.d.ts +1 -1
- package/dist/index.d.ts +752 -20
- package/dist/index.js +17 -7
- package/dist/index.js.map +1 -1
- package/dist/{notification-NWVOS2WR.js → notification-QPH37BHW.js} +29 -6
- package/dist/notification-QPH37BHW.js.map +1 -0
- package/dist/{tools-LDR3LIJP.js → tools-OKH7SPMP.js} +2 -2
- package/dist/{types-CF5UsxD9.d.ts → types-NVwNUVFR.d.ts} +180 -14
- package/package.json +6 -13
- package/dist/BasicAgent-R7DYGTHF.js +0 -13
- package/dist/ExplorerAgent-DXY3OQ5U.js +0 -13
- package/dist/chunk-3AR3JBW6.js.map +0 -1
- package/dist/chunk-BAP2GCYH.js.map +0 -1
- package/dist/chunk-EECW6PYP.js.map +0 -1
- package/dist/chunk-NORTAQIL.js.map +0 -1
- package/dist/chunk-REOJZCSZ.js.map +0 -1
- package/dist/notification-NWVOS2WR.js.map +0 -1
- /package/dist/{BasicAgent-R7DYGTHF.js.map → BasicAgent-7TNMYC3X.js.map} +0 -0
- /package/dist/{ExplorerAgent-DXY3OQ5U.js.map → ExplorerAgent-L3ZTVQGM.js.map} +0 -0
- /package/dist/{tools-LDR3LIJP.js.map → tools-OKH7SPMP.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/agents/system/BasicAgent.ts"],"sourcesContent":["/**\r\n * BasicAgent - 基础 Agent 类\r\n *\r\n * 集成了常用 Feature 和系统环境信息\r\n * 适用于大多数 Agent 场景\r\n *\r\n * 默认自动加载配置文件,开箱即用\r\n */\r\n\r\nimport { Agent } from '../../core/agent.js';\r\nimport { MCPFeature, SkillFeature, SubAgentFeature, OpencodeBasicFeature } from '../../features/index.js';\r\nimport type { AgentConfig, LLMClient, Tool } from '../../core/types.js';\r\nimport type { AgentConfigFile } from '../../core/config.js';\r\nimport { loadConfigSync } from '../../core/config.js';\r\nimport { createLLM } from '../../llm/index.js';\r\nimport { existsSync } from 'fs';\r\nimport { cwd, platform } from 'process';\r\nimport { getDefaultMCPConfigDir } from '../../mcp/config.js';\r\n\r\n/**\r\n * 系统环境信息上下文\r\n */\r\nexport interface SystemContext {\r\n /** 当前工作目录 */\r\n SYSTEM_WORKING_DIR: string;\r\n /** 是否是 Git 仓库 */\r\n SYSTEM_IS_GIT_REPOSITORY: boolean;\r\n /** 操作系统平台 */\r\n SYSTEM_PLATFORM: NodeJS.Platform;\r\n /** 当前日期 (YYYY-MM-DD) */\r\n SYSTEM_DATE: string;\r\n /** 当前使用的模型名称 */\r\n SYSTEM_CURRENT_MODEL: string;\r\n /** 索引签名,允许作为 PlaceholderContext 使用 */\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * BasicAgent 配置选项\r\n *\r\n * 所有参数都是可选的,默认会自动同步加载配置文件\r\n */\r\nexport interface BasicAgentConfig {\n /** LLM 客户端(可选,不传则自动同步加载配置创建) */\r\n llm?: LLMClient;\r\n /** 配置文件名(可选,默认 'default') */\r\n configName?: string;\r\n /** Agent 显示名称(可选) */\r\n name?: string;\r\n /** 系统提示词(可选,后续可通过 setPrompt() 设置) */\r\n systemMessage?: string;\r\n /** MCP 配置:传字符串时加载指定配置;传 false 时禁用自动加载;不传时若 .agentdev/mcps 存在则自动加载全部 */\r\n mcpServer?: string | false;\r\n /** MCP 运行时上下文(可选,如 GitHub Token) */\r\n mcpContext?: Record<string, unknown>;\r\n /** 自动扫描 MCP 时排除的 serverId 列表 */\r\n excludeMcpServers?: string[];\r\n /** 自定义工具集(可选,默认使用 Feature 提供的工具) */\r\n tools?: Tool[];\r\n /** Skills 目录(可选,默认使用 .agentdev/skills) */\n skillsDir?: string;\n /** 调试器和模板解析使用的项目根目录 */\n projectRoot?: string;\n /** 工具默认操作的工作目录 */\n workspaceDir?: string;\n}\n\r\n/**\r\n * 基础 Agent 类\r\n *\r\n * 集成常用 Feature 和系统环境信息,开箱即用\r\n * 构造函数不传任何参数时,会自动同步加载配置文件创建 LLM\r\n */\r\nexport class BasicAgent extends Agent {\r\n protected _systemContext: SystemContext;\r\n protected _mcpServer?: string | false;\r\n protected _mcpContext?: Record<string, unknown>;\r\n protected _config?: AgentConfigFile;\r\n protected _skillsDir?: string;\r\n protected _mcpFeature?: MCPFeature;\r\n\r\n /**\r\n * 构造函数\r\n *\r\n * @param config 基础配置(全部可选,不传则使用默认配置)\r\n */\r\n constructor(config: BasicAgentConfig = {}) {\n const workspaceDir = config.workspaceDir ?? cwd();\n // 建立系统环境信息\n const systemContext: SystemContext = {\n SYSTEM_WORKING_DIR: workspaceDir,\n SYSTEM_IS_GIT_REPOSITORY: existsSync(workspaceDir + '/.git'),\n SYSTEM_PLATFORM: platform,\n SYSTEM_DATE: new Date().toISOString().split('T')[0], // YYYY-MM-DD\r\n SYSTEM_CURRENT_MODEL: 'unknown', // 稍后更新\r\n };\r\n\r\n // 准备 LLM:如果没传入,同步加载配置\r\n let llm = config.llm;\r\n let fileConfig: AgentConfigFile | undefined;\r\n if (!llm) {\r\n const configName = config.configName ?? 'default';\r\n fileConfig = loadConfigSync(configName);\r\n llm = createLLM(fileConfig);\r\n systemContext.SYSTEM_CURRENT_MODEL = fileConfig.defaultModel.model;\r\n console.log(`[BasicAgent] 已加载配置: ${configName}, 模型: ${fileConfig.defaultModel.model}`);\r\n }\r\n\r\n // 构建完整的 Agent 配置\r\n const agentConfig: AgentConfig = {\r\n llm: llm!,\r\n tools: config.tools ?? [],\r\n maxTurns: Infinity,\n systemMessage: config.systemMessage,\n name: config.name,\n projectRoot: config.projectRoot,\n workspaceDir,\n };\n\r\n super(agentConfig);\r\n\r\n // 保存配置(必须在 super() 之后)\r\n this._systemContext = systemContext;\r\n this._config = fileConfig;\r\n this._mcpServer = config.mcpServer;\r\n this._mcpContext = config.mcpContext;\r\n this._skillsDir = config.skillsDir;\r\n this.setSystemContext(systemContext);\r\n\r\n const hasDefaultMCPConfigs = existsSync(getDefaultMCPConfigDir());\r\n const shouldEnableMCP = config.mcpServer !== false && (typeof config.mcpServer === 'string' || hasDefaultMCPConfigs);\r\n if (shouldEnableMCP) {\r\n this._mcpFeature = typeof config.mcpServer === 'string'\r\n ? new MCPFeature(config.mcpServer)\r\n : new MCPFeature(undefined, { excludeServers: config.excludeMcpServers });\r\n if (config.mcpContext) {\r\n this._mcpFeature.setMCPContext(config.mcpContext);\r\n }\r\n this.use(this._mcpFeature);\r\n }\r\n\r\n // 注册 OpencodeBasicFeature(文件操作工具集)\r\n this.use(new OpencodeBasicFeature({ workspaceDir }));\n\r\n // 注册 SkillFeature(invokeSkill 工具和 skills 上下文注入)\r\n this.use(new SkillFeature(config.skillsDir));\r\n\r\n // 注册 SubAgentFeature(子代理工具和消息处理)\r\n this.use(new SubAgentFeature());\r\n\r\n // 预禁用不需要的子代理工具,确保首次快照与运行时一致\r\n this.getTools().disable('list_agents');\r\n this.getTools().disable('close_agent');\r\n\r\n // 注册可创建的子代理类型\r\n this.registerAgentType('BasicAgent', () => new BasicAgent({ llm: this.llm }));\r\n this.registerAgentType('ExplorerAgent', () => import('./ExplorerAgent.js').then(m => new m.ExplorerAgent({ llm: this.llm })));\r\n }\r\n\r\n /**\r\n * 获取系统环境信息\r\n */\r\n getSystemContext(): SystemContext {\r\n return this._systemContext;\r\n }\r\n\r\n /**\r\n * 获取 MCP 服务器配置\r\n */\r\n getMcpServer(): string | false | undefined {\r\n return this._mcpServer;\r\n }\r\n\r\n /**\r\n * 获取 MCP 上下文\r\n */\r\n getMcpContext(): Record<string, unknown> | undefined {\r\n return this._mcpContext;\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;AAeA,SAAS,kBAAkB;AAC3B,SAAS,KAAK,gBAAgB;AAyDvB,IAAM,aAAN,MAAM,oBAAmB,UAAM;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOV,YAAY,SAA2B,CAAC,GAAG;AACzC,UAAM,eAAe,OAAO,gBAAgB,IAAI;AAEhD,UAAM,gBAA+B;AAAA,MACnC,oBAAoB;AAAA,MACpB,0BAA0B,WAAW,eAAe,OAAO;AAAA,MAC3D,iBAAiB;AAAA,MACjB,cAAa,oBAAI,KAAK,GAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA;AAAA,MAClD,sBAAsB;AAAA;AAAA,IACxB;AAGA,QAAI,MAAM,OAAO;AACjB,QAAI;AACJ,QAAI,CAAC,KAAK;AACR,YAAM,aAAa,OAAO,cAAc;AACxC,mBAAa,eAAe,UAAU;AACtC,YAAM,UAAU,UAAU;AAC1B,oBAAc,uBAAuB,WAAW,aAAa;AAC7D,cAAQ,IAAI,gDAAuB,UAAU,mBAAS,WAAW,aAAa,KAAK,EAAE;AAAA,IACvF;AAGA,UAAM,cAA2B;AAAA,MAC/B;AAAA,MACA,OAAO,OAAO,SAAS,CAAC;AAAA,MACxB,UAAU;AAAA,MACV,eAAe,OAAO;AAAA,MACtB,MAAM,OAAO;AAAA,MACb,aAAa,OAAO;AAAA,MACpB;AAAA,IACF;AAEA,UAAM,WAAW;AAGjB,SAAK,iBAAiB;AACtB,SAAK,UAAU;AACf,SAAK,aAAa,OAAO;AACzB,SAAK,cAAc,OAAO;AAC1B,SAAK,aAAa,OAAO;AACzB,SAAK,iBAAiB,aAAa;AAEnC,UAAM,uBAAuB,WAAW,uBAAuB,CAAC;AAChE,UAAM,kBAAkB,OAAO,cAAc,UAAU,OAAO,OAAO,cAAc,YAAY;AAC/F,QAAI,iBAAiB;AACnB,WAAK,cAAc,OAAO,OAAO,cAAc,WAC3C,IAAI,WAAW,OAAO,SAAS,IAC/B,IAAI,WAAW,QAAW,EAAE,gBAAgB,OAAO,kBAAkB,CAAC;AAC1E,UAAI,OAAO,YAAY;AACrB,aAAK,YAAY,cAAc,OAAO,UAAU;AAAA,MAClD;AACA,WAAK,IAAI,KAAK,WAAW;AAAA,IAC3B;AAGA,SAAK,IAAI,IAAI,qBAAqB,EAAE,aAAa,CAAC,CAAC;AAGnD,SAAK,IAAI,IAAI,aAAa,OAAO,SAAS,CAAC;AAG3C,SAAK,IAAI,IAAI,gBAAgB,CAAC;AAG9B,SAAK,SAAS,EAAE,QAAQ,aAAa;AACrC,SAAK,SAAS,EAAE,QAAQ,aAAa;AAGrC,SAAK,kBAAkB,cAAc,MAAM,IAAI,YAAW,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC;AAC5E,SAAK,kBAAkB,iBAAiB,MAAM,OAAO,6BAAoB,EAAE,KAAK,OAAK,IAAI,EAAE,cAAc,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC;AAAA,EAC9H;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAkC;AAChC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,eAA2C;AACzC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAqD;AACnD,WAAO,KAAK;AAAA,EACd;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/notification.ts"],"sourcesContent":["/**\n * Notification System - 核心通知系统\n *\n * 职责:\n * - 定义通知类型和分类\n * - 提供通知发送接口\n * - 管理通知上下文(当前 Agent ID)\n * - 节流高频通知\n */\n\nimport type { Notification, NotificationCategory, LLMPhase } from './types.js';\nimport { DebugHub } from './debug-hub.js';\n\n// ========== 模块级状态 ==========\n\n/**\n * 当前通知上下文的 Agent ID\n */\nlet currentAgentId: string | null = null;\n\n/**\n * 节流控制:上次发送通知的时间戳\n */\nlet lastNotificationTime: number = 0;\n\n/**\n * 节流间隔(毫秒)\n */\nconst THROTTLE_INTERVAL = 100;\n\n// ========== 公开 API ==========\n\n/**\n * 设置通知上下文\n * @param agentId Agent ID\n */\nexport function _setNotificationAgent(agentId: string): void {\n currentAgentId = agentId;\n}\n\n/**\n * 清除通知上下文\n */\nexport function _clearNotificationAgent(): void {\n currentAgentId = null;\n // 重置节流状态\n lastNotificationTime = 0;\n}\n\n/**\n * 获取当前通知上下文的 Agent ID\n */\nexport function _getCurrentNotificationAgent(): string | null {\n return currentAgentId;\n}\n\n/**\n * 发送通知到 DebugHub\n * @param notification 通知对象\n */\nexport function emitNotification(notification: Notification): void {\n if (!currentAgentId) {\n // 没有通知上下文,静默忽略\n return;\n }\n\n const now = Date.now();\n\n // 节流:状态类通知需要节流,事件类通知不需要\n if (notification.category === 'state') {\n const timeSinceLast = now - lastNotificationTime;\n if (timeSinceLast < THROTTLE_INTERVAL) {\n // 跳过此次通知\n return;\n }\n lastNotificationTime = now;\n }\n\n // 推送到 DebugHub\n const debugHub = DebugHub.getInstance();\n debugHub.pushNotification(currentAgentId, notification);\n}\n\n// ========== 通知构造函数 ==========\n\n/**\n * 创建 LLM 字符计数通知\n * @param charCount 当前累积字符数\n * @param phase LLM 生成阶段\n */\nexport function createLLMCharCount(\n charCount: number,\n phase: LLMPhase\n): Notification {\n return {\n type: 'llm.char_count',\n category: 'state',\n timestamp: Date.now(),\n data: {\n charCount,\n phase,\n },\n };\n}\n\n/**\n * 创建 LLM 完成通知\n * @param totalChars 总字符数\n */\nexport function createLLMComplete(totalChars: number): Notification {\n return {\n type: 'llm.complete',\n category: 'state',\n timestamp: Date.now(),\n data: {\n totalChars,\n },\n };\n}\n\n/**\n * 创建工具开始通知\n * @param toolName 工具名称\n */\nexport function createToolStart(toolName: string): Notification {\n return {\n type: 'tool.start',\n category: 'event',\n timestamp: Date.now(),\n data: {\n toolName,\n },\n };\n}\n\n/**\n * 创建工具完成通知\n * @param toolName 工具名称\n * @param success 是否成功\n * @param duration 耗时(毫秒)\n */\nexport function createToolComplete(\n toolName: string,\n success: boolean,\n duration: number\n): Notification {\n return {\n type: 'tool.complete',\n category: 'event',\n timestamp: Date.now(),\n data: {\n toolName,\n success,\n duration,\n },\n };\n}\n"],"mappings":";;;;;;;AAkBA,IAAI,iBAAgC;AAKpC,IAAI,uBAA+B;AAKnC,IAAM,oBAAoB;AAQnB,SAAS,sBAAsB,SAAuB;AAC3D,mBAAiB;AACnB;AAKO,SAAS,0BAAgC;AAC9C,mBAAiB;AAEjB,yBAAuB;AACzB;AAKO,SAAS,+BAA8C;AAC5D,SAAO;AACT;AAMO,SAAS,iBAAiB,cAAkC;AACjE,MAAI,CAAC,gBAAgB;AAEnB;AAAA,EACF;AAEA,QAAM,MAAM,KAAK,IAAI;AAGrB,MAAI,aAAa,aAAa,SAAS;AACrC,UAAM,gBAAgB,MAAM;AAC5B,QAAI,gBAAgB,mBAAmB;AAErC;AAAA,IACF;AACA,2BAAuB;AAAA,EACzB;AAGA,QAAM,WAAW,SAAS,YAAY;AACtC,WAAS,iBAAiB,gBAAgB,YAAY;AACxD;AASO,SAAS,mBACd,WACA,OACc;AACd,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW,KAAK,IAAI;AAAA,IACpB,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAMO,SAAS,kBAAkB,YAAkC;AAClE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW,KAAK,IAAI;AAAA,IACpB,MAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACF;AAMO,SAAS,gBAAgB,UAAgC;AAC9D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW,KAAK,IAAI;AAAA,IACpB,MAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACF;AAQO,SAAS,mBACd,UACA,SACA,UACc;AACd,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW,KAAK,IAAI;AAAA,IACpB,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|