@ai-zen/air 0.2.3 → 0.3.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.
Files changed (104) hide show
  1. package/README.md +27 -29
  2. package/README.zh.md +27 -29
  3. package/dist/agent-commands/back.d.ts +3 -0
  4. package/dist/agent-commands/back.d.ts.map +1 -0
  5. package/dist/{chat/commands → agent-commands}/back.js +4 -5
  6. package/dist/agent-commands/back.js.map +1 -0
  7. package/dist/agent-commands/editor.d.ts +3 -0
  8. package/dist/agent-commands/editor.d.ts.map +1 -0
  9. package/dist/{chat/commands → agent-commands}/editor.js +2 -3
  10. package/dist/agent-commands/editor.js.map +1 -0
  11. package/dist/agent-commands/exit.d.ts +3 -0
  12. package/dist/agent-commands/exit.d.ts.map +1 -0
  13. package/dist/agent-commands/exit.js.map +1 -0
  14. package/dist/agent-commands/help.d.ts.map +1 -0
  15. package/dist/agent-commands/help.js.map +1 -0
  16. package/dist/agent-commands/index.d.ts +3 -0
  17. package/dist/agent-commands/index.d.ts.map +1 -0
  18. package/dist/agent-commands/index.js.map +1 -0
  19. package/dist/agent-commands/load.d.ts +3 -0
  20. package/dist/agent-commands/load.d.ts.map +1 -0
  21. package/dist/{chat/commands → agent-commands}/load.js +3 -3
  22. package/dist/agent-commands/load.js.map +1 -0
  23. package/dist/agent-commands/new.d.ts +3 -0
  24. package/dist/agent-commands/new.d.ts.map +1 -0
  25. package/dist/{chat/commands → agent-commands}/new.js +3 -3
  26. package/dist/agent-commands/new.js.map +1 -0
  27. package/dist/agent-commands/save.d.ts +3 -0
  28. package/dist/agent-commands/save.d.ts.map +1 -0
  29. package/dist/{chat/commands → agent-commands}/save.js +1 -1
  30. package/dist/agent-commands/save.js.map +1 -0
  31. package/dist/agent-constants.d.ts +2 -0
  32. package/dist/agent-constants.d.ts.map +1 -0
  33. package/dist/agent-constants.js +16 -0
  34. package/dist/agent-constants.js.map +1 -0
  35. package/dist/{chat/runtime.d.ts → agent-runtime.d.ts} +1 -1
  36. package/dist/agent-runtime.d.ts.map +1 -0
  37. package/dist/agent-runtime.js +115 -0
  38. package/dist/agent-runtime.js.map +1 -0
  39. package/dist/{chat/shared.d.ts → agent-types.d.ts} +2 -2
  40. package/dist/agent-types.d.ts.map +1 -0
  41. package/dist/agent-types.js +2 -0
  42. package/dist/agent-types.js.map +1 -0
  43. package/dist/cli.js +1 -1
  44. package/dist/cli.js.map +1 -1
  45. package/package.json +12 -10
  46. package/scripts/check-publish-tool.mjs +27 -0
  47. package/src/__tests__/chat.test.ts +14 -14
  48. package/src/{chat/commands → agent-commands}/back.ts +5 -6
  49. package/src/{chat/commands → agent-commands}/editor.ts +3 -4
  50. package/src/{chat/commands → agent-commands}/exit.ts +1 -1
  51. package/src/{chat/commands → agent-commands}/index.ts +1 -1
  52. package/src/{chat/commands → agent-commands}/load.ts +4 -4
  53. package/src/{chat/commands → agent-commands}/new.ts +4 -4
  54. package/src/{chat/commands → agent-commands}/save.ts +2 -2
  55. package/src/agent-constants.ts +15 -0
  56. package/src/agent-runtime.ts +119 -0
  57. package/src/agent-types.ts +6 -0
  58. package/src/cli.ts +1 -1
  59. package/dist/chat/commands/back.d.ts +0 -3
  60. package/dist/chat/commands/back.d.ts.map +0 -1
  61. package/dist/chat/commands/back.js.map +0 -1
  62. package/dist/chat/commands/editor.d.ts +0 -3
  63. package/dist/chat/commands/editor.d.ts.map +0 -1
  64. package/dist/chat/commands/editor.js.map +0 -1
  65. package/dist/chat/commands/exit.d.ts +0 -3
  66. package/dist/chat/commands/exit.d.ts.map +0 -1
  67. package/dist/chat/commands/exit.js.map +0 -1
  68. package/dist/chat/commands/help.d.ts.map +0 -1
  69. package/dist/chat/commands/help.js.map +0 -1
  70. package/dist/chat/commands/index.d.ts +0 -3
  71. package/dist/chat/commands/index.d.ts.map +0 -1
  72. package/dist/chat/commands/index.js.map +0 -1
  73. package/dist/chat/commands/load.d.ts +0 -3
  74. package/dist/chat/commands/load.d.ts.map +0 -1
  75. package/dist/chat/commands/load.js.map +0 -1
  76. package/dist/chat/commands/new.d.ts +0 -3
  77. package/dist/chat/commands/new.d.ts.map +0 -1
  78. package/dist/chat/commands/new.js.map +0 -1
  79. package/dist/chat/commands/save.d.ts +0 -3
  80. package/dist/chat/commands/save.d.ts.map +0 -1
  81. package/dist/chat/commands/save.js.map +0 -1
  82. package/dist/chat/message.d.ts +0 -3
  83. package/dist/chat/message.d.ts.map +0 -1
  84. package/dist/chat/message.js +0 -31
  85. package/dist/chat/message.js.map +0 -1
  86. package/dist/chat/print.d.ts +0 -3
  87. package/dist/chat/print.d.ts.map +0 -1
  88. package/dist/chat/print.js +0 -24
  89. package/dist/chat/print.js.map +0 -1
  90. package/dist/chat/runtime.d.ts.map +0 -1
  91. package/dist/chat/runtime.js +0 -64
  92. package/dist/chat/runtime.js.map +0 -1
  93. package/dist/chat/shared.d.ts.map +0 -1
  94. package/dist/chat/shared.js +0 -16
  95. package/dist/chat/shared.js.map +0 -1
  96. package/src/chat/message.ts +0 -27
  97. package/src/chat/print.ts +0 -27
  98. package/src/chat/runtime.ts +0 -65
  99. package/src/chat/shared.ts +0 -21
  100. /package/dist/{chat/commands → agent-commands}/exit.js +0 -0
  101. /package/dist/{chat/commands → agent-commands}/help.d.ts +0 -0
  102. /package/dist/{chat/commands → agent-commands}/help.js +0 -0
  103. /package/dist/{chat/commands → agent-commands}/index.js +0 -0
  104. /package/src/{chat/commands → agent-commands}/help.ts +0 -0
package/README.md CHANGED
@@ -69,14 +69,14 @@ $ gred "hello" file.txt
69
69
  ├── config.json # { "apiKey": "sk-xxx" }
70
70
  ├── context.json # [ { role, content }, ... ] Current conversation
71
71
  ├── snapshots/ # Auto snapshots before migration or /save
72
- └── temp/ # Long-term memory written by AI (*.md)
72
+ └── memory/ # Long-term memory written by AI (*.md)
73
73
  ```
74
74
 
75
75
  ### Core Philosophy
76
76
 
77
77
  - **Model**: DeepSeek-V4-Flash (hardcoded, only one)
78
78
  - **Tool**: Just one `shell` tool — the AI executes commands, reads and writes files through it
79
- - **Memory**: The AI decides what to remember, writes to `temp/*.md` via shell, reads on next startup. No extra persistence mechanism
79
+ - **Memory**: The AI decides what to remember, writes to `memory/*.md` via shell, reads on next startup. No extra persistence mechanism
80
80
  - **Context**: Auto-migrates when JSON serialization exceeds 500K chars, takes a snapshot before migration
81
81
  - **Rules**: Consult the user before making changes. Dangerous operations require explicit written confirmation. The user takes responsibility for their own instructions
82
82
 
@@ -84,36 +84,34 @@ $ gred "hello" file.txt
84
84
 
85
85
  ```
86
86
  src/
87
- ├── cli.ts # CLI entry, commander
88
- ├── config.ts # Config, context, snapshot read/write
89
- ├── delta-renderer.ts # Stream renderer
90
- ├── hook.ts # Fallback terminal hook (install/uninstall)
91
- ├── migration.ts # Context counting & migration
92
- ├── tools.ts # Tool definitions — shell
93
- ├── agent-factory.ts # Agent factory — build model & agent
94
- ├── chat/
95
- ├── shared.ts # ChatCtx type & SYSTEM_PROMPT
96
- ├── runtime.ts # runChat() & chatLoop() — core runtime
97
- ├── message.ts # handleMessage() send & migrate
98
- │ ├── print.ts # sendAndPrint() — stream output
99
- └── commands/
100
- ├── index.ts # dispatchCommand()command router
101
- ├── back.ts # /backrecall & resend
102
- ├── editor.ts # /editor — multi-line input
103
- ├── exit.ts # /exitquit
104
- ├── help.ts # /help
105
- ├── load.ts # /loadload snapshot
106
- │ ├── new.ts # /new — new session
107
- │ └── save.ts # /save — save snapshot
87
+ ├── cli.ts # CLI entry, commander
88
+ ├── config.ts # Config, context, snapshot read/write
89
+ ├── delta-renderer.ts # Stream renderer
90
+ ├── hook.ts # Fallback terminal hook (install/uninstall)
91
+ ├── migration.ts # Context counting & migration
92
+ ├── tools.ts # Tool definitions — shell
93
+ ├── agent-factory.ts # Agent factory — build model & agent
94
+ ├── agent-runtime.ts # Core runtime — send, chat loop
95
+ ├── agent-types.ts # Type definitions (ChatCtx, etc.)
96
+ ├── agent-constants.ts # System prompt & constants
97
+ ├── agent-commands/ # Interactive command handlers
98
+ │ ├── index.ts # dispatchCommand() — command router
99
+ ├── back.ts # /back — recall & resend
100
+ ├── editor.ts # /editormulti-line input
101
+ ├── exit.ts # /exitquit
102
+ ├── help.ts # /help
103
+ ├── load.ts # /loadload snapshot
104
+ ├── new.ts # /new — new session
105
+ └── save.ts # /savesave snapshot
108
106
  └── __tests__/
109
- ├── chat.test.ts # Chat session tests
110
- ├── config.test.ts # Config/context/snapshot tests
111
- ├── main.test.ts # contextSize/shouldMigrate tests
112
- ├── e2e.test.ts # End-to-end tests
113
- └── tools.test.ts # Shell tool structure tests
107
+ ├── chat.test.ts # Chat session tests
108
+ ├── config.test.ts # Config/context/snapshot tests
109
+ ├── main.test.ts # contextSize/shouldMigrate tests
110
+ ├── e2e.test.ts # End-to-end tests
111
+ └── tools.test.ts # Shell tool structure tests
114
112
  ```
115
113
 
116
- ~49 KB, 881 lines.
114
+ ~76 KB, 879 lines (不含测试).
117
115
 
118
116
  ## Tests
119
117
 
package/README.zh.md CHANGED
@@ -69,14 +69,14 @@ $ gred "hello" file.txt
69
69
  ├── config.json # { "apiKey": "sk-xxx" }
70
70
  ├── context.json # [ { role, content }, ... ] 当前对话
71
71
  ├── snapshots/ # /save 或迁移前自动快照
72
- └── temp/ # AI 自己写入的长期记忆 (*.md)
72
+ └── memory/ # AI 自己写入的长期记忆 (*.md)
73
73
  ```
74
74
 
75
75
  ### 核心理念
76
76
 
77
77
  - **模型**: DeepSeek-V4-Flash(写死,只有一个)
78
78
  - **工具**: 只有一个 `shell`,AI 用它执行命令、读写文件
79
- - **记忆**: AI 自己决定记什么,用 shell 写入 `temp/*.md`,下次启动时读取。air 不做额外的持久化机制
79
+ - **记忆**: AI 自己决定记什么,用 shell 写入 `memory/*.md`,下次启动时读取。air 不做额外的持久化机制
80
80
  - **上下文**: JSON 序列化后超过 50 万字符自动迁移,迁移前拍快照
81
81
  - **行为准则**: 先商量再动手,危险操作必须获得用户书面确认。追责原则——每一步基于用户指令,用户承担责任
82
82
 
@@ -84,36 +84,34 @@ $ gred "hello" file.txt
84
84
 
85
85
  ```
86
86
  src/
87
- ├── cli.ts # CLI 入口,commander
88
- ├── config.ts # 配置、上下文、快照读写
89
- ├── delta-renderer.ts # 流式渲染器
90
- ├── hook.ts # 兜底终端钩子(install/uninstall)
91
- ├── migration.ts # 上下文计数与迁移
92
- ├── tools.ts # 工具定义——shell
93
- ├── agent-factory.ts # Agent 工厂——构建模型与 Agent
94
- ├── chat/
95
- ├── shared.ts # ChatCtx 类型 & SYSTEM_PROMPT
96
- ├── runtime.ts # runChat() & chatLoop() — 核心运行时
97
- ├── message.ts # handleMessage() — 发送与迁移
98
- │ ├── print.ts # sendAndPrint() — 流式输出
99
- └── commands/
100
- ├── index.ts # dispatchCommand()命令分发入口
101
- ├── back.ts # /back撤回消息
102
- ├── editor.ts # /editor — 多行编辑器输入
103
- ├── exit.ts # /exit退出
104
- ├── help.ts # /help
105
- ├── load.ts # /load加载快照
106
- │ ├── new.ts # /new — 新会话
107
- │ └── save.ts # /save — 保存快照
87
+ ├── cli.ts # CLI 入口,commander
88
+ ├── config.ts # 配置、上下文、快照读写
89
+ ├── delta-renderer.ts # 流式渲染器
90
+ ├── hook.ts # 兜底终端钩子(install/uninstall)
91
+ ├── migration.ts # 上下文计数与迁移
92
+ ├── tools.ts # 工具定义——shell
93
+ ├── agent-factory.ts # Agent 工厂——构建模型与 Agent
94
+ ├── agent-runtime.ts # 核心运行时——send、chat loop
95
+ ├── agent-types.ts # 类型定义(ChatCtx 等)
96
+ ├── agent-constants.ts # 系统提示词与常量
97
+ ├── agent-commands/ # 交互命令处理
98
+ │ ├── index.ts # dispatchCommand() — 命令分发入口
99
+ ├── back.ts # /back — 撤回消息
100
+ ├── editor.ts # /editor多行编辑器输入
101
+ ├── exit.ts # /exit退出
102
+ ├── help.ts # /help
103
+ ├── load.ts # /load加载快照
104
+ ├── new.ts # /new — 新会话
105
+ └── save.ts # /save保存快照
108
106
  └── __tests__/
109
- ├── chat.test.ts # 聊天测试
110
- ├── config.test.ts # 配置/上下文/快照测试
111
- ├── main.test.ts # contextSize/shouldMigrate 测试
112
- ├── e2e.test.ts # 端到端测试
113
- └── tools.test.ts # shell 工具结构测试
107
+ ├── chat.test.ts # 聊天测试
108
+ ├── config.test.ts # 配置/上下文/快照测试
109
+ ├── main.test.ts # contextSize/shouldMigrate 测试
110
+ ├── e2e.test.ts # 端到端测试
111
+ └── tools.test.ts # shell 工具结构测试
114
112
  ```
115
113
 
116
- 49 KB,881 行。
114
+ 116 KB,1381 行。
117
115
 
118
116
  ## 测试
119
117
 
@@ -0,0 +1,3 @@
1
+ import type { ChatCtx } from "../agent-types.js";
2
+ export declare function cmdBack(ctx: ChatCtx): Promise<void>;
3
+ //# sourceMappingURL=back.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"back.d.ts","sourceRoot":"","sources":["../../src/agent-commands/back.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAIjD,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFzD"}
@@ -1,7 +1,6 @@
1
1
  import inquirer from "inquirer";
2
- import { sendAndPrint } from "../print.js";
3
- import { saveMessages } from "../../config.js";
4
- import { buildAgent } from "../../agent-factory.js";
2
+ import { saveMessages } from "../config.js";
3
+ import { buildAgent } from "../agent-factory.js";
5
4
  export async function cmdBack(ctx) {
6
5
  const targets = [];
7
6
  for (let i = 0; i < ctx.agent.messages.length; i++) {
@@ -75,7 +74,7 @@ export async function cmdBack(ctx) {
75
74
  textToSend = editedContent.trim();
76
75
  }
77
76
  ctx.agent = await buildAgent(ctx.agent.messages);
78
- await sendAndPrint(ctx.agent, textToSend);
77
+ await ctx.send(textToSend);
79
78
  saveMessages(ctx.agent.messages);
80
79
  }
81
80
  else {
@@ -88,7 +87,7 @@ export async function cmdBack(ctx) {
88
87
  return;
89
88
  }
90
89
  ctx.agent = await buildAgent(ctx.agent.messages);
91
- await sendAndPrint(ctx.agent, newMessage.trim());
90
+ await ctx.send(newMessage.trim());
92
91
  saveMessages(ctx.agent.messages);
93
92
  }
94
93
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"back.js","sourceRoot":"","sources":["../../src/agent-commands/back.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAY;IACxC,MAAM,OAAO,GAAsE,EAAE,CAAC;IACtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACpI,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACtI,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAElD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC9C;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE;gBACzC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;aAC7E;SACF;KACF,CAAC,CAAC;IAEH,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAE7D,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC;IAC9C,MAAM,YAAY,GAAG,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;IAC/D,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE3D,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1G,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC3C;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE;oBAChD,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE;oBAC7C,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE;iBAChD;aACF;SACF,CAAC,CAAC;QACH,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAEhE,IAAI,UAAU,GAAG,YAAY,CAAC;QAC9B,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE;aAClF,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACnE,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC;QAED,GAAG,CAAC,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC3C,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE;SACvD,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3D,GAAG,CAAC,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ChatCtx } from "../agent-types.js";
2
+ export declare function cmdEditor(ctx: ChatCtx): Promise<void>;
3
+ //# sourceMappingURL=editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/agent-commands/editor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGjD,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,iBAY3C"}
@@ -1,6 +1,5 @@
1
1
  import inquirer from "inquirer";
2
- import { sendAndPrint } from "../print.js";
3
- import { saveMessages } from "../../config.js";
2
+ import { saveMessages } from "../config.js";
4
3
  export async function cmdEditor(ctx) {
5
4
  const { content } = await inquirer.prompt([
6
5
  { type: "editor", name: "content", message: "编辑消息:" },
@@ -10,7 +9,7 @@ export async function cmdEditor(ctx) {
10
9
  return;
11
10
  }
12
11
  try {
13
- await sendAndPrint(ctx.agent, content.trim());
12
+ await ctx.send(content.trim());
14
13
  saveMessages(ctx.agent.messages);
15
14
  }
16
15
  catch (err) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/agent-commands/editor.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAY;IAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACxC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE;KACtD,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/B,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ChatCtx } from "../agent-types.js";
2
+ export declare function cmdExit(ctx: ChatCtx): Promise<void>;
3
+ //# sourceMappingURL=exit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit.d.ts","sourceRoot":"","sources":["../../src/agent-commands/exit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzD"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit.js","sourceRoot":"","sources":["../../src/agent-commands/exit.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAY;IACxC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/agent-commands/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,SAEtB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/agent-commands/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,GAAG,CAAC,kHAAkH,CAAC,CAAC;AAClI,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ChatCtx } from "../agent-types.js";
2
+ export declare function dispatchCommand(ctx: ChatCtx, cmd: string): Promise<void>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent-commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AASjD,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B9E"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent-commands/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAY,EAAE,GAAW;IAC7D,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,CAAC,GAAG,CAAC,CAAC;YACb,MAAM;QACR,KAAK,OAAO;YACV,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM;QACR,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YACrB,MAAM;QACR,KAAK,OAAO;YACV,OAAO,EAAE,CAAC;YACV,MAAM;QACR;YACE,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;YAClC,MAAM;IACV,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ChatCtx } from "../agent-types.js";
2
+ export declare function cmdLoad(ctx: ChatCtx): Promise<void>;
3
+ //# sourceMappingURL=load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/agent-commands/load.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKjD,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BzD"}
@@ -1,8 +1,8 @@
1
1
  import { Message } from "@ai-zen/agents-core";
2
2
  import inquirer from "inquirer";
3
- import { SYSTEM_PROMPT } from "../shared.js";
4
- import { listSnapshots, loadSnapshot, saveMessages } from "../../config.js";
5
- import { buildAgent } from "../../agent-factory.js";
3
+ import { SYSTEM_PROMPT } from "../agent-constants.js";
4
+ import { listSnapshots, loadSnapshot, saveMessages } from "../config.js";
5
+ import { buildAgent } from "../agent-factory.js";
6
6
  export async function cmdLoad(ctx) {
7
7
  const snapshots = listSnapshots();
8
8
  if (snapshots.length === 0) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/agent-commands/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAY;IACxC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC7C;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,EAAE;gBACzC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aAC3D;SACF;KACF,CAAC,CAAC;IACH,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IACD,IAAI,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,YAAY,CAAC,MAAM,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IACtE,GAAG,CAAC,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ChatCtx } from "../agent-types.js";
2
+ export declare function cmdNew(ctx: ChatCtx): Promise<void>;
3
+ //# sourceMappingURL=new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/agent-commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAMjD,wBAAsB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxD"}
@@ -1,7 +1,7 @@
1
1
  import { Message } from "@ai-zen/agents-core";
2
- import { saveMessages } from "../../config.js";
3
- import { buildAgent } from "../../agent-factory.js";
4
- import { SYSTEM_PROMPT } from "../shared.js";
2
+ import { saveMessages } from "../config.js";
3
+ import { buildAgent } from "../agent-factory.js";
4
+ import { SYSTEM_PROMPT } from "../agent-constants.js";
5
5
  export async function cmdNew(ctx) {
6
6
  const msgs = [Message.System(SYSTEM_PROMPT)];
7
7
  saveMessages(msgs);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/agent-commands/new.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,GAAY;IACvC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7C,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,GAAG,CAAC,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ChatCtx } from "../agent-types.js";
2
+ export declare function cmdSave(ctx: ChatCtx): Promise<void>;
3
+ //# sourceMappingURL=save.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/agent-commands/save.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGjD,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,iBAEzC"}
@@ -1,4 +1,4 @@
1
- import { saveSnapshot } from "../../config.js";
1
+ import { saveSnapshot } from "../config.js";
2
2
  export async function cmdSave(ctx) {
3
3
  console.log(`\n✅ 快照: ${saveSnapshot(ctx.agent.messages)}\n`);
4
4
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/agent-commands/save.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAY;IACxC,OAAO,CAAC,GAAG,CAAC,WAAW,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const SYSTEM_PROMPT: string;
2
+ //# sourceMappingURL=agent-constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-constants.d.ts","sourceRoot":"","sources":["../src/agent-constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,QAcd,CAAC"}
@@ -0,0 +1,16 @@
1
+ export const SYSTEM_PROMPT = [
2
+ "你是一个AI助手,专门帮助用户回答问题和执行任务。请用中文回复。",
3
+ "",
4
+ "## 行为准则",
5
+ "1. 做任何改动之前,必须先跟用户商量,获得书面确认之后再行动。",
6
+ "2. 用户没有明确要求产出文件时,不得自行创建任何文件到项目中。讨论就停留在讨论层面。",
7
+ "3. 区分危险操作:删除文件、覆盖文件、安装卸载软件、修改系统配置、执行耗时任务等属于危险操作。执行前必须评估影响范围,并向用户说明风险,获得用户明确的书面确认之后再执行。",
8
+ "4. 追责原则:获得用户书面确认的操作,你即可放心执行。每一步操作及其产生的责任,均以用户的书面确认记录为追溯依据,操作不得超出用户书面确认的边界范围。最终责任由用户承担。没有获得书面确认之前,不得擅自行动。",
9
+ "",
10
+ "## 记忆",
11
+ "如果你有需要长期记住的信息(用户偏好、项目约定、任务进度等),请写入以下位置:",
12
+ "- 全局记忆: ~/.ai-zen/air/memory/*.md",
13
+ "- 项目记忆: $(cwd)/.ai-zen/air/memory/*.md",
14
+ "下次启动时读取即可。这是你唯一的记忆方式。",
15
+ ].join("\n");
16
+ //# sourceMappingURL=agent-constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-constants.js","sourceRoot":"","sources":["../src/agent-constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,kCAAkC;IAClC,EAAE;IACF,SAAS;IACT,kCAAkC;IAClC,6CAA6C;IAC7C,wFAAwF;IACxF,0GAA0G;IAC1G,EAAE;IACF,OAAO;IACP,yCAAyC;IACzC,mCAAmC;IACnC,wCAAwC;IACxC,uBAAuB;CACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
@@ -1,2 +1,2 @@
1
1
  export declare function runChat(initialMessage?: string): Promise<void>;
2
- //# sourceMappingURL=runtime.d.ts.map
2
+ //# sourceMappingURL=agent-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"AA4EA,wBAAsB,OAAO,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CpE"}
@@ -0,0 +1,115 @@
1
+ import { Message } from "@ai-zen/agents-core";
2
+ import chalk from "chalk";
3
+ import inquirer from "inquirer";
4
+ import { DeltaRenderer } from "./delta-renderer.js";
5
+ import { readConfig, readMessages, saveMessages, saveSnapshot } from "./config.js";
6
+ import { buildAgent } from "./agent-factory.js";
7
+ import { contextSize, shouldMigrate, generateMigrationDoc, MAX_CONTEXT_CHARS } from "./migration.js";
8
+ import { dispatchCommand } from "./agent-commands/index.js";
9
+ import { SYSTEM_PROMPT } from "./agent-constants.js";
10
+ // ==================== print (内部使用) ====================
11
+ async function send(agent, text) {
12
+ console.log(chalk.green.bold("\n🤖 AI:"));
13
+ const renderer = new DeltaRenderer({
14
+ reasoningHeader: "\n\n💭 思考中...\n",
15
+ contentHeader: "\n\n💭 回答中...\n",
16
+ });
17
+ function onChunk(chunk) {
18
+ const delta = chunk?.choices?.[0]?.delta;
19
+ const fr = chunk?.choices?.[0]?.finish_reason ?? null;
20
+ if (delta)
21
+ renderer.render(delta, fr);
22
+ }
23
+ function onRun() { renderer.reset(); }
24
+ agent.events.on("run", onRun);
25
+ agent.events.on("chunk", onChunk);
26
+ await agent.send(text);
27
+ agent.events.off("run", onRun);
28
+ agent.events.off("chunk", onChunk);
29
+ process.stdout.write("\n\n");
30
+ console.log();
31
+ }
32
+ // ==================== message ====================
33
+ async function handleMessage(ctx, text) {
34
+ try {
35
+ await ctx.send(text);
36
+ saveMessages(ctx.agent.messages);
37
+ if (shouldMigrate(ctx.agent.messages)) {
38
+ console.log(`🔄 上下文 ${contextSize(ctx.agent.messages)}/${MAX_CONTEXT_CHARS},准备迁移...`);
39
+ try {
40
+ const snap = saveSnapshot(ctx.agent.messages);
41
+ console.log(` 💾 快照: ${snap}`);
42
+ const summary = await generateMigrationDoc(ctx.agent.messages);
43
+ const msgs = [Message.System(SYSTEM_PROMPT), Message.User(summary)];
44
+ saveMessages(msgs);
45
+ console.log("✅ 迁移完成\n");
46
+ ctx.agent = await buildAgent(msgs);
47
+ }
48
+ catch (err) {
49
+ console.error(`❌ 迁移失败: ${err.message}\n`);
50
+ }
51
+ }
52
+ }
53
+ catch (err) {
54
+ console.error(`\n❌ ${err.message}`);
55
+ }
56
+ }
57
+ // ==================== runtime ====================
58
+ async function chatLoop(ctx) {
59
+ while (true) {
60
+ const { input } = await inquirer.prompt([
61
+ { type: "input", name: "input", message: "你:" },
62
+ ]);
63
+ const t = input.trim();
64
+ if (!t)
65
+ continue;
66
+ if (t.startsWith("/")) {
67
+ await dispatchCommand(ctx, t.toLowerCase());
68
+ continue;
69
+ }
70
+ await handleMessage(ctx, t);
71
+ }
72
+ }
73
+ export async function runChat(initialMessage) {
74
+ const config = readConfig();
75
+ if (!config.apiKey) {
76
+ console.error("❌ 请先设置 API Key: air key <your-key>");
77
+ console.error(" 获取 Key: https://platform.deepseek.com/api_keys");
78
+ process.exit(1);
79
+ }
80
+ let msgs = readMessages();
81
+ if (msgs.length === 0) {
82
+ msgs = [Message.System(SYSTEM_PROMPT)];
83
+ saveMessages(msgs);
84
+ }
85
+ const agent = await buildAgent(msgs);
86
+ const ctx = {
87
+ agent,
88
+ send(text) { return send(this.agent, text); },
89
+ };
90
+ if (initialMessage) {
91
+ const hasHistory = ctx.agent.messages.some(m => m.role === "user" || m.role === "assistant");
92
+ if (hasHistory) {
93
+ const snap = saveSnapshot(ctx.agent.messages);
94
+ console.log(`💾 已存档旧对话: ${snap}\n`);
95
+ }
96
+ await dispatchCommand(ctx, "/new");
97
+ console.log(`💬 你: ${initialMessage}`);
98
+ try {
99
+ await ctx.send(initialMessage);
100
+ saveMessages(ctx.agent.messages);
101
+ }
102
+ catch (err) {
103
+ console.error(`\n❌ ${err.message}`);
104
+ }
105
+ console.log("\n💬 继续对话 (输入 /exit 退出)\n");
106
+ await chatLoop(ctx);
107
+ return;
108
+ }
109
+ const msgCount = ctx.agent.messages.filter((m) => m.role !== "system").length;
110
+ console.log(msgCount > 0
111
+ ? `\n💬 继续上次对话 (${msgCount} 条,/${contextSize(ctx.agent.messages)} 字符,输入 /new 重新开始)\n`
112
+ : "\n💬 air — 极简 AI 助手 (输入 /help 查看命令)\n");
113
+ await chatLoop(ctx);
114
+ }
115
+ //# sourceMappingURL=agent-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Agent } from "@ai-zen/agents-core";
2
2
  export interface ChatCtx {
3
3
  agent: Agent;
4
+ send: (text: string) => Promise<void>;
4
5
  }
5
- export declare const SYSTEM_PROMPT: string;
6
- //# sourceMappingURL=shared.d.ts.map
6
+ //# sourceMappingURL=agent-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-types.d.ts","sourceRoot":"","sources":["../src/agent-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-types.js","sourceRoot":"","sources":["../src/agent-types.ts"],"names":[],"mappings":""}
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { readFileSync } from "node:fs";
3
3
  import { Command } from "commander";
4
- import { runChat } from "./chat/runtime.js";
4
+ import { runChat } from "./agent-runtime.js";
5
5
  import { installHook, uninstallHook } from "./hook.js";
6
6
  import { readConfig, saveConfig } from "./config.js";
7
7
  const { version } = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf-8"));
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CACnE,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,aAAa,CAAC;KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,YAAY,CAAC;KACzB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;KACxC,MAAM,CAAC,CAAC,MAAc,EAAE,EAAE;IACzB,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,QAAQ,CAAC;KACrB,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8BAA8B,CAAC;KAC3C,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;KAC3C,MAAM,CAAC,CAAC,MAAc,EAAE,EAAE;IACzB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,WAAW,EAAE,CAAC;IAChB,CAAC;SAAM,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,aAAa,EAAE,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAClD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,QAAQ,CAAC,cAAc,EAAE,mBAAmB,CAAC;KAC7C,MAAM,CAAC,KAAK,EAAE,OAAkB,EAAE,EAAE;IACnC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CACnE,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,aAAa,CAAC;KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,YAAY,CAAC;KACzB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;KACxC,MAAM,CAAC,CAAC,MAAc,EAAE,EAAE;IACzB,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,QAAQ,CAAC;KACrB,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8BAA8B,CAAC;KAC3C,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;KAC3C,MAAM,CAAC,CAAC,MAAc,EAAE,EAAE;IACzB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,WAAW,EAAE,CAAC;IAChB,CAAC;SAAM,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,aAAa,EAAE,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAClD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,QAAQ,CAAC,cAAc,EAAE,mBAAmB,CAAC;KAC7C,MAAM,CAAC,KAAK,EAAE,OAAkB,EAAE,EAAE;IACnC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,19 +1,12 @@
1
1
  {
2
2
  "name": "@ai-zen/air",
3
- "version": "0.2.3",
3
+ "version": "0.3.2",
4
4
  "description": "Minimalist AI CLI assistant — one shell tool, filesystem memory, auto context migration",
5
5
  "type": "module",
6
6
  "main": "./dist/agent-runtime.js",
7
7
  "bin": {
8
8
  "air": "dist/cli.js"
9
9
  },
10
- "scripts": {
11
- "build": "rm -rf dist && tsc",
12
- "prepublishOnly": "npm run build",
13
- "start": "npm run build && node ./dist/cli.js",
14
- "test": "vitest run",
15
- "test:watch": "vitest"
16
- },
17
10
  "dependencies": {
18
11
  "@ai-zen/agents-core": "^2.4.0",
19
12
  "chalk": "^5.6.2",
@@ -23,6 +16,7 @@
23
16
  "devDependencies": {
24
17
  "@types/inquirer": "^9.0.10",
25
18
  "@types/node": "^24.12.2",
19
+ "rimraf": "^6.1.3",
26
20
  "typescript": "^5.3.3",
27
21
  "vitest": "^4.1.9"
28
22
  },
@@ -34,5 +28,13 @@
34
28
  "deepseek",
35
29
  "terminal",
36
30
  "command-line"
37
- ]
38
- }
31
+ ],
32
+ "scripts": {
33
+ "build": "tsc",
34
+ "start": "npm run build && node ./dist/cli.js",
35
+ "test": "vitest run",
36
+ "test:watch": "vitest",
37
+ "clean": "rimraf dist",
38
+ "prebuild": "pnpm run clean"
39
+ }
40
+ }