@ai-zen/air 0.2.2 → 0.3.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/agent-commands/back.d.ts +3 -0
- package/dist/agent-commands/back.d.ts.map +1 -0
- package/dist/{session/commands → agent-commands}/back.js +4 -5
- package/dist/agent-commands/back.js.map +1 -0
- package/dist/agent-commands/editor.d.ts +3 -0
- package/dist/agent-commands/editor.d.ts.map +1 -0
- package/dist/{chat/commands → agent-commands}/editor.js +2 -3
- package/dist/agent-commands/editor.js.map +1 -0
- package/dist/agent-commands/exit.d.ts +3 -0
- package/dist/agent-commands/exit.d.ts.map +1 -0
- package/dist/agent-commands/exit.js.map +1 -0
- package/dist/agent-commands/help.d.ts.map +1 -0
- package/dist/agent-commands/help.js.map +1 -0
- package/dist/agent-commands/index.d.ts +3 -0
- package/dist/agent-commands/index.d.ts.map +1 -0
- package/dist/agent-commands/index.js.map +1 -0
- package/dist/agent-commands/load.d.ts +3 -0
- package/dist/agent-commands/load.d.ts.map +1 -0
- package/dist/{chat/commands → agent-commands}/load.js +3 -3
- package/dist/agent-commands/load.js.map +1 -0
- package/dist/agent-commands/new.d.ts +3 -0
- package/dist/agent-commands/new.d.ts.map +1 -0
- package/dist/{chat/commands → agent-commands}/new.js +3 -3
- package/dist/agent-commands/new.js.map +1 -0
- package/dist/agent-commands/save.d.ts +3 -0
- package/dist/agent-commands/save.d.ts.map +1 -0
- package/dist/{session/commands → agent-commands}/save.js +1 -1
- package/dist/agent-commands/save.js.map +1 -0
- package/dist/agent-constants.d.ts +2 -0
- package/dist/agent-constants.d.ts.map +1 -0
- package/dist/agent-constants.js +16 -0
- package/dist/agent-constants.js.map +1 -0
- package/dist/agent-runtime.d.ts +1 -1
- package/dist/agent-runtime.d.ts.map +1 -1
- package/dist/agent-runtime.js +30 -229
- package/dist/agent-runtime.js.map +1 -1
- package/dist/{chat/shared.d.ts → agent-types.d.ts} +2 -2
- package/dist/agent-types.d.ts.map +1 -0
- package/dist/agent-types.js +2 -0
- package/dist/agent-types.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/package.json +13 -11
- package/scripts/check-publish-tool.mjs +27 -0
- package/src/__tests__/chat.test.ts +14 -14
- package/src/__tests__/e2e.test.ts +1 -1
- package/src/{chat/commands → agent-commands}/back.ts +5 -6
- package/src/{chat/commands → agent-commands}/editor.ts +3 -4
- package/src/{chat/commands → agent-commands}/exit.ts +1 -1
- package/src/{chat/commands → agent-commands}/index.ts +1 -1
- package/src/{chat/commands → agent-commands}/load.ts +4 -4
- package/src/{chat/commands → agent-commands}/new.ts +4 -4
- package/src/{chat/commands → agent-commands}/save.ts +2 -2
- package/src/agent-constants.ts +15 -0
- package/src/agent-runtime.ts +119 -0
- package/src/agent-types.ts +6 -0
- package/src/cli.ts +1 -1
- package/dist/chat/commands/back.d.ts +0 -3
- package/dist/chat/commands/back.d.ts.map +0 -1
- package/dist/chat/commands/back.js +0 -95
- package/dist/chat/commands/back.js.map +0 -1
- package/dist/chat/commands/editor.d.ts +0 -3
- package/dist/chat/commands/editor.d.ts.map +0 -1
- package/dist/chat/commands/editor.js.map +0 -1
- package/dist/chat/commands/exit.d.ts +0 -3
- package/dist/chat/commands/exit.d.ts.map +0 -1
- package/dist/chat/commands/exit.js.map +0 -1
- package/dist/chat/commands/help.d.ts.map +0 -1
- package/dist/chat/commands/help.js.map +0 -1
- package/dist/chat/commands/index.d.ts +0 -3
- package/dist/chat/commands/index.d.ts.map +0 -1
- package/dist/chat/commands/index.js.map +0 -1
- package/dist/chat/commands/load.d.ts +0 -3
- package/dist/chat/commands/load.d.ts.map +0 -1
- package/dist/chat/commands/load.js.map +0 -1
- package/dist/chat/commands/message.d.ts +0 -5
- package/dist/chat/commands/message.d.ts.map +0 -1
- package/dist/chat/commands/message.js +0 -53
- package/dist/chat/commands/message.js.map +0 -1
- package/dist/chat/commands/new.d.ts +0 -3
- package/dist/chat/commands/new.d.ts.map +0 -1
- package/dist/chat/commands/new.js.map +0 -1
- package/dist/chat/commands/save.d.ts +0 -3
- package/dist/chat/commands/save.d.ts.map +0 -1
- package/dist/chat/commands/save.js +0 -5
- package/dist/chat/commands/save.js.map +0 -1
- package/dist/chat/message.d.ts +0 -3
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -31
- package/dist/chat/message.js.map +0 -1
- package/dist/chat/print.d.ts +0 -3
- package/dist/chat/print.d.ts.map +0 -1
- package/dist/chat/print.js +0 -24
- package/dist/chat/print.js.map +0 -1
- package/dist/chat/runtime.d.ts +0 -2
- package/dist/chat/runtime.d.ts.map +0 -1
- package/dist/chat/runtime.js +0 -64
- package/dist/chat/runtime.js.map +0 -1
- package/dist/chat/session.d.ts +0 -8
- package/dist/chat/session.d.ts.map +0 -1
- package/dist/chat/session.js +0 -77
- package/dist/chat/session.js.map +0 -1
- package/dist/chat/shared.d.ts.map +0 -1
- package/dist/chat/shared.js +0 -16
- package/dist/chat/shared.js.map +0 -1
- package/dist/main.d.ts +0 -7
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js +0 -248
- package/dist/main.js.map +0 -1
- package/dist/session/commands/back.d.ts +0 -3
- package/dist/session/commands/back.d.ts.map +0 -1
- package/dist/session/commands/back.js.map +0 -1
- package/dist/session/commands/editor.d.ts +0 -3
- package/dist/session/commands/editor.d.ts.map +0 -1
- package/dist/session/commands/editor.js +0 -20
- package/dist/session/commands/editor.js.map +0 -1
- package/dist/session/commands/exit.d.ts +0 -3
- package/dist/session/commands/exit.d.ts.map +0 -1
- package/dist/session/commands/exit.js +0 -5
- package/dist/session/commands/exit.js.map +0 -1
- package/dist/session/commands/help.d.ts +0 -2
- package/dist/session/commands/help.d.ts.map +0 -1
- package/dist/session/commands/help.js +0 -4
- package/dist/session/commands/help.js.map +0 -1
- package/dist/session/commands/load.d.ts +0 -3
- package/dist/session/commands/load.d.ts.map +0 -1
- package/dist/session/commands/load.js +0 -37
- package/dist/session/commands/load.js.map +0 -1
- package/dist/session/commands/new.d.ts +0 -3
- package/dist/session/commands/new.d.ts.map +0 -1
- package/dist/session/commands/new.js +0 -6
- package/dist/session/commands/new.js.map +0 -1
- package/dist/session/commands/save.d.ts +0 -3
- package/dist/session/commands/save.d.ts.map +0 -1
- package/dist/session/commands/save.js.map +0 -1
- package/dist/session/message.d.ts +0 -3
- package/dist/session/message.d.ts.map +0 -1
- package/dist/session/message.js +0 -31
- package/dist/session/message.js.map +0 -1
- package/dist/session/print.d.ts +0 -3
- package/dist/session/print.d.ts.map +0 -1
- package/dist/session/print.js +0 -24
- package/dist/session/print.js.map +0 -1
- package/dist/session/runtime.d.ts +0 -2
- package/dist/session/runtime.d.ts.map +0 -1
- package/dist/session/runtime.js +0 -46
- package/dist/session/runtime.js.map +0 -1
- package/dist/session/shared.d.ts +0 -8
- package/dist/session/shared.d.ts.map +0 -1
- package/dist/session/shared.js +0 -77
- package/dist/session/shared.js.map +0 -1
- package/src/chat/message.ts +0 -27
- package/src/chat/print.ts +0 -27
- package/src/chat/runtime.ts +0 -65
- package/src/chat/shared.ts +0 -21
- /package/dist/{chat/commands → agent-commands}/exit.js +0 -0
- /package/dist/{chat/commands → agent-commands}/help.d.ts +0 -0
- /package/dist/{chat/commands → agent-commands}/help.js +0 -0
- /package/dist/{chat/commands → agent-commands}/index.js +0 -0
- /package/src/{chat/commands → agent-commands}/help.ts +0 -0
package/package.json
CHANGED
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-zen/air",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Minimalist AI CLI assistant
|
|
3
|
+
"version": "0.3.1",
|
|
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": "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
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 检查发布工具是否为 pnpm
|
|
5
|
+
* 防止误用 npm publish 导致 workspace:* 协议未被替换的问题
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const execPath = process.env.npm_execpath || '';
|
|
9
|
+
const userAgent = process.env.npm_config_user_agent || '';
|
|
10
|
+
|
|
11
|
+
const isPnpm = execPath.includes('pnpm') || userAgent.includes('pnpm');
|
|
12
|
+
|
|
13
|
+
if (!isPnpm) {
|
|
14
|
+
console.error('');
|
|
15
|
+
console.error(' ❌ 发布失败:检测到使用 npm 发布!');
|
|
16
|
+
console.error('');
|
|
17
|
+
console.error(' 本项目的依赖使用了 pnpm workspace 协议 (workspace:*)');
|
|
18
|
+
console.error(' 使用 npm publish 会导致 workspace:* 无法被正确替换为实际版本号');
|
|
19
|
+
console.error(' 从而导致用户安装时找不到依赖包而失败。');
|
|
20
|
+
console.error('');
|
|
21
|
+
console.error(' ✅ 请使用以下命令发布:');
|
|
22
|
+
console.error(' pnpm publish');
|
|
23
|
+
console.error('');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
console.log(' ✅ 发布工具检测通过 (pnpm)');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
-
import type { ChatCtx } from "../
|
|
2
|
+
import type { ChatCtx } from "../agent-types.js";
|
|
3
3
|
|
|
4
4
|
// Mock all external dependencies
|
|
5
5
|
vi.mock("inquirer", () => ({ default: { prompt: vi.fn() } }));
|
|
@@ -16,23 +16,23 @@ vi.mock("../agent-factory.js", () => ({
|
|
|
16
16
|
send: vi.fn(),
|
|
17
17
|
})),
|
|
18
18
|
}));
|
|
19
|
-
vi.mock("../chat/print.js", () => ({
|
|
20
|
-
sendAndPrint: vi.fn(),
|
|
21
|
-
}));
|
|
22
19
|
|
|
23
20
|
const mockPrompt = vi.mocked((await import("inquirer")).default.prompt);
|
|
24
21
|
const { saveMessages, saveSnapshot, listSnapshots, loadSnapshot } = await import("../config.js");
|
|
25
22
|
const { buildAgent } = await import("../agent-factory.js");
|
|
26
23
|
|
|
27
24
|
function makeCtx(msgs: any[] = []): ChatCtx {
|
|
28
|
-
return {
|
|
25
|
+
return {
|
|
26
|
+
agent: { messages: msgs, events: { on: vi.fn(), off: vi.fn() }, send: vi.fn() } as any,
|
|
27
|
+
send: vi.fn(),
|
|
28
|
+
};
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
// ==================== cmdNew ====================
|
|
32
32
|
|
|
33
33
|
describe("cmdNew", () => {
|
|
34
34
|
it("写入 system prompt 并构建 agent", async () => {
|
|
35
|
-
const { cmdNew } = await import("../
|
|
35
|
+
const { cmdNew } = await import("../agent-commands/new.js");
|
|
36
36
|
const ctx = makeCtx();
|
|
37
37
|
|
|
38
38
|
await cmdNew(ctx);
|
|
@@ -54,19 +54,19 @@ describe("dispatchCommand", () => {
|
|
|
54
54
|
|
|
55
55
|
it('"/exit" 调用 cmdExit(process.exit)', async () => {
|
|
56
56
|
// Can't easily test process.exit, just verify it doesn't throw
|
|
57
|
-
const { runChat } = await import("../
|
|
57
|
+
const { runChat } = await import("../agent-runtime.js");
|
|
58
58
|
// dispatchCommand is internal, tested via routing only
|
|
59
59
|
});
|
|
60
60
|
|
|
61
61
|
it('"/save" 调用 cmdSave', async () => {
|
|
62
|
-
const { cmdSave } = await import("../
|
|
62
|
+
const { cmdSave } = await import("../agent-commands/save.js");
|
|
63
63
|
const ctx = makeCtx([{ role: "system", content: "sys" }]);
|
|
64
64
|
await cmdSave(ctx);
|
|
65
65
|
expect(saveSnapshot).toHaveBeenCalledWith(ctx.agent.messages);
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
it('"/new" 调用 cmdNew 并打印提示', async () => {
|
|
69
|
-
const { cmdNew } = await import("../
|
|
69
|
+
const { cmdNew } = await import("../agent-commands/new.js");
|
|
70
70
|
const ctx = makeCtx();
|
|
71
71
|
const spy = vi.spyOn(console, "log").mockImplementation(() => {});
|
|
72
72
|
await cmdNew(ctx);
|
|
@@ -75,7 +75,7 @@ describe("dispatchCommand", () => {
|
|
|
75
75
|
});
|
|
76
76
|
|
|
77
77
|
it('"/help" 打印帮助信息', async () => {
|
|
78
|
-
const { cmdHelp } = await import("../
|
|
78
|
+
const { cmdHelp } = await import("../agent-commands/help.js");
|
|
79
79
|
const spy = vi.spyOn(console, "log").mockImplementation(() => {});
|
|
80
80
|
cmdHelp();
|
|
81
81
|
expect(spy).toHaveBeenCalled();
|
|
@@ -91,7 +91,7 @@ describe("cmdBack", () => {
|
|
|
91
91
|
});
|
|
92
92
|
|
|
93
93
|
it("没有消息时提示无可撤回", async () => {
|
|
94
|
-
const { cmdBack } = await import("../
|
|
94
|
+
const { cmdBack } = await import("../agent-commands/back.js");
|
|
95
95
|
const ctx = makeCtx([{ role: "system", content: "sys" }]);
|
|
96
96
|
const spy = vi.spyOn(console, "log").mockImplementation(() => {});
|
|
97
97
|
await cmdBack(ctx);
|
|
@@ -100,7 +100,7 @@ describe("cmdBack", () => {
|
|
|
100
100
|
});
|
|
101
101
|
|
|
102
102
|
it("取消操作时不修改消息", async () => {
|
|
103
|
-
const { cmdBack } = await import("../
|
|
103
|
+
const { cmdBack } = await import("../agent-commands/back.js");
|
|
104
104
|
const msgs = [
|
|
105
105
|
{ role: "system", content: "sys" },
|
|
106
106
|
{ role: "user", content: "你好" },
|
|
@@ -120,7 +120,7 @@ describe("cmdLoad", () => {
|
|
|
120
120
|
});
|
|
121
121
|
|
|
122
122
|
it("没有快照时提示", async () => {
|
|
123
|
-
const { cmdLoad } = await import("../
|
|
123
|
+
const { cmdLoad } = await import("../agent-commands/load.js");
|
|
124
124
|
const ctx = makeCtx();
|
|
125
125
|
vi.mocked(listSnapshots).mockReturnValueOnce([]);
|
|
126
126
|
const spy = vi.spyOn(console, "log").mockImplementation(() => {});
|
|
@@ -138,7 +138,7 @@ describe("cmdEditor", () => {
|
|
|
138
138
|
});
|
|
139
139
|
|
|
140
140
|
it("取消编辑不报错", async () => {
|
|
141
|
-
const { cmdEditor } = await import("../
|
|
141
|
+
const { cmdEditor } = await import("../agent-commands/editor.js");
|
|
142
142
|
const ctx = makeCtx();
|
|
143
143
|
mockPrompt.mockResolvedValueOnce({ content: "" });
|
|
144
144
|
await cmdEditor(ctx);
|
|
@@ -177,7 +177,7 @@ describe("E2E: 真实 API 对话", () => {
|
|
|
177
177
|
|
|
178
178
|
// Interactive mode: /new then exit
|
|
179
179
|
const result = await runCli([], "/new\n/exit\n", env);
|
|
180
|
-
expect(result.stdout).toContain("🆕
|
|
180
|
+
expect(result.stdout).toContain("🆕 新会话");
|
|
181
181
|
|
|
182
182
|
// Verify context was reset
|
|
183
183
|
msgs = JSON.parse(readFileSync(contextFile, "utf-8"));
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import inquirer from "inquirer";
|
|
2
|
-
import type { ChatCtx } from "../
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { buildAgent } from "../../agent-factory.js";
|
|
2
|
+
import type { ChatCtx } from "../agent-types.js";
|
|
3
|
+
import { saveMessages } from "../config.js";
|
|
4
|
+
import { buildAgent } from "../agent-factory.js";
|
|
6
5
|
|
|
7
6
|
export async function cmdBack(ctx: ChatCtx): Promise<void> {
|
|
8
7
|
const targets: { index: number; role: string; label: string; preview: string }[] = [];
|
|
@@ -75,7 +74,7 @@ export async function cmdBack(ctx: ChatCtx): Promise<void> {
|
|
|
75
74
|
}
|
|
76
75
|
|
|
77
76
|
ctx.agent = await buildAgent(ctx.agent.messages);
|
|
78
|
-
await
|
|
77
|
+
await ctx.send(textToSend);
|
|
79
78
|
saveMessages(ctx.agent.messages);
|
|
80
79
|
} else {
|
|
81
80
|
console.log("\n💡 请输入一条新消息继续对话\n");
|
|
@@ -84,7 +83,7 @@ export async function cmdBack(ctx: ChatCtx): Promise<void> {
|
|
|
84
83
|
]);
|
|
85
84
|
if (!newMessage.trim()) { console.log("\n已取消\n"); return; }
|
|
86
85
|
ctx.agent = await buildAgent(ctx.agent.messages);
|
|
87
|
-
await
|
|
86
|
+
await ctx.send(newMessage.trim());
|
|
88
87
|
saveMessages(ctx.agent.messages);
|
|
89
88
|
}
|
|
90
89
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import inquirer from "inquirer";
|
|
2
|
-
import type { ChatCtx } from "../
|
|
3
|
-
import {
|
|
4
|
-
import { saveMessages } from "../../config.js";
|
|
2
|
+
import type { ChatCtx } from "../agent-types.js";
|
|
3
|
+
import { saveMessages } from "../config.js";
|
|
5
4
|
|
|
6
5
|
export async function cmdEditor(ctx: ChatCtx) {
|
|
7
6
|
const { content } = await inquirer.prompt([
|
|
@@ -12,7 +11,7 @@ export async function cmdEditor(ctx: ChatCtx) {
|
|
|
12
11
|
return;
|
|
13
12
|
}
|
|
14
13
|
try {
|
|
15
|
-
await
|
|
14
|
+
await ctx.send(content.trim());
|
|
16
15
|
saveMessages(ctx.agent.messages);
|
|
17
16
|
} catch (err: any) { console.error(`\n❌ ${err.message}`); }
|
|
18
17
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Message } from "@ai-zen/agents-core";
|
|
2
2
|
import inquirer from "inquirer";
|
|
3
|
-
import type { ChatCtx } from "../
|
|
4
|
-
import { SYSTEM_PROMPT } from "../
|
|
5
|
-
import { listSnapshots, loadSnapshot, saveMessages } from "
|
|
6
|
-
import { buildAgent } from "
|
|
3
|
+
import type { ChatCtx } from "../agent-types.js";
|
|
4
|
+
import { SYSTEM_PROMPT } from "../agent-constants.js";
|
|
5
|
+
import { listSnapshots, loadSnapshot, saveMessages } from "../config.js";
|
|
6
|
+
import { buildAgent } from "../agent-factory.js";
|
|
7
7
|
|
|
8
8
|
export async function cmdLoad(ctx: ChatCtx): Promise<void> {
|
|
9
9
|
const snapshots = listSnapshots();
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { ChatCtx } from "../
|
|
1
|
+
import type { ChatCtx } from "../agent-types.js";
|
|
2
2
|
import { Message } from "@ai-zen/agents-core";
|
|
3
|
-
import { saveMessages } from "
|
|
4
|
-
import { buildAgent } from "
|
|
5
|
-
import { SYSTEM_PROMPT } from "../
|
|
3
|
+
import { saveMessages } from "../config.js";
|
|
4
|
+
import { buildAgent } from "../agent-factory.js";
|
|
5
|
+
import { SYSTEM_PROMPT } from "../agent-constants.js";
|
|
6
6
|
|
|
7
7
|
export async function cmdNew(ctx: ChatCtx): Promise<void> {
|
|
8
8
|
const msgs = [Message.System(SYSTEM_PROMPT)];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ChatCtx } from "../
|
|
2
|
-
import { saveSnapshot } from "
|
|
1
|
+
import type { ChatCtx } from "../agent-types.js";
|
|
2
|
+
import { saveSnapshot } from "../config.js";
|
|
3
3
|
|
|
4
4
|
export async function cmdSave(ctx: ChatCtx) {
|
|
5
5
|
console.log(`\n✅ 快照: ${saveSnapshot(ctx.agent.messages)}\n`);
|
|
@@ -0,0 +1,15 @@
|
|
|
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");
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Agent, Message } from "@ai-zen/agents-core";
|
|
2
|
+
import type { AgentNS } from "@ai-zen/agents-core";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import inquirer from "inquirer";
|
|
5
|
+
import { DeltaRenderer } from "./delta-renderer.js";
|
|
6
|
+
import { readConfig, readMessages, saveMessages, saveSnapshot } from "./config.js";
|
|
7
|
+
import { buildAgent } from "./agent-factory.js";
|
|
8
|
+
import { contextSize, shouldMigrate, generateMigrationDoc, MAX_CONTEXT_CHARS } from "./migration.js";
|
|
9
|
+
import { dispatchCommand } from "./agent-commands/index.js";
|
|
10
|
+
import type { ChatCtx } from "./agent-types.js";
|
|
11
|
+
import { SYSTEM_PROMPT } from "./agent-constants.js";
|
|
12
|
+
|
|
13
|
+
// ==================== print (内部使用) ====================
|
|
14
|
+
|
|
15
|
+
async function send(agent: Agent, text: string): Promise<void> {
|
|
16
|
+
console.log(chalk.green.bold("\n🤖 AI:"));
|
|
17
|
+
const renderer = new DeltaRenderer({
|
|
18
|
+
reasoningHeader: "\n\n💭 思考中...\n",
|
|
19
|
+
contentHeader: "\n\n💭 回答中...\n",
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
function onChunk(chunk: AgentNS.StreamResponseData) {
|
|
23
|
+
const delta = chunk?.choices?.[0]?.delta;
|
|
24
|
+
const fr = chunk?.choices?.[0]?.finish_reason ?? null;
|
|
25
|
+
if (delta) renderer.render(delta, fr);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function onRun() { renderer.reset(); }
|
|
29
|
+
agent.events.on("run", onRun);
|
|
30
|
+
agent.events.on("chunk", onChunk);
|
|
31
|
+
await agent.send(text);
|
|
32
|
+
agent.events.off("run", onRun);
|
|
33
|
+
agent.events.off("chunk", onChunk);
|
|
34
|
+
process.stdout.write("\n\n");
|
|
35
|
+
console.log();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// ==================== message ====================
|
|
39
|
+
|
|
40
|
+
async function handleMessage(ctx: ChatCtx, text: string): Promise<void> {
|
|
41
|
+
try {
|
|
42
|
+
await ctx.send(text);
|
|
43
|
+
saveMessages(ctx.agent.messages);
|
|
44
|
+
|
|
45
|
+
if (shouldMigrate(ctx.agent.messages)) {
|
|
46
|
+
console.log(`🔄 上下文 ${contextSize(ctx.agent.messages)}/${MAX_CONTEXT_CHARS},准备迁移...`);
|
|
47
|
+
try {
|
|
48
|
+
const snap = saveSnapshot(ctx.agent.messages);
|
|
49
|
+
console.log(` 💾 快照: ${snap}`);
|
|
50
|
+
const summary = await generateMigrationDoc(ctx.agent.messages);
|
|
51
|
+
const msgs = [Message.System(SYSTEM_PROMPT), Message.User(summary)];
|
|
52
|
+
saveMessages(msgs);
|
|
53
|
+
console.log("✅ 迁移完成\n");
|
|
54
|
+
ctx.agent = await buildAgent(msgs);
|
|
55
|
+
} catch (err: any) { console.error(`❌ 迁移失败: ${err.message}\n`); }
|
|
56
|
+
}
|
|
57
|
+
} catch (err: any) { console.error(`\n❌ ${err.message}`); }
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// ==================== runtime ====================
|
|
61
|
+
|
|
62
|
+
async function chatLoop(ctx: ChatCtx) {
|
|
63
|
+
while (true) {
|
|
64
|
+
const { input } = await inquirer.prompt([
|
|
65
|
+
{ type: "input", name: "input", message: "你:" },
|
|
66
|
+
]);
|
|
67
|
+
const t = input.trim();
|
|
68
|
+
if (!t) continue;
|
|
69
|
+
if (t.startsWith("/")) {
|
|
70
|
+
await dispatchCommand(ctx, t.toLowerCase());
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
await handleMessage(ctx, t);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export async function runChat(initialMessage?: string): Promise<void> {
|
|
78
|
+
const config = readConfig();
|
|
79
|
+
if (!config.apiKey) {
|
|
80
|
+
console.error("❌ 请先设置 API Key: air key <your-key>");
|
|
81
|
+
console.error(" 获取 Key: https://platform.deepseek.com/api_keys");
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
let msgs = readMessages();
|
|
86
|
+
if (msgs.length === 0) {
|
|
87
|
+
msgs = [Message.System(SYSTEM_PROMPT)];
|
|
88
|
+
saveMessages(msgs);
|
|
89
|
+
}
|
|
90
|
+
const agent: Agent = await buildAgent(msgs);
|
|
91
|
+
const ctx: ChatCtx = {
|
|
92
|
+
agent,
|
|
93
|
+
send(text: string) { return send(this.agent, text); },
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
if (initialMessage) {
|
|
97
|
+
const hasHistory = ctx.agent.messages.some(m => m.role === "user" || m.role === "assistant");
|
|
98
|
+
if (hasHistory) {
|
|
99
|
+
const snap = saveSnapshot(ctx.agent.messages);
|
|
100
|
+
console.log(`💾 已存档旧对话: ${snap}\n`);
|
|
101
|
+
}
|
|
102
|
+
await dispatchCommand(ctx, "/new");
|
|
103
|
+
console.log(`💬 你: ${initialMessage}`);
|
|
104
|
+
try {
|
|
105
|
+
await ctx.send(initialMessage);
|
|
106
|
+
saveMessages(ctx.agent.messages);
|
|
107
|
+
} catch (err: any) { console.error(`\n❌ ${err.message}`); }
|
|
108
|
+
console.log("\n💬 继续对话 (输入 /exit 退出)\n");
|
|
109
|
+
await chatLoop(ctx);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const msgCount = ctx.agent.messages.filter((m) => m.role !== "system").length;
|
|
114
|
+
console.log(msgCount > 0
|
|
115
|
+
? `\n💬 继续上次对话 (${msgCount} 条,/${contextSize(ctx.agent.messages)} 字符,输入 /new 重新开始)\n`
|
|
116
|
+
: "\n💬 air — 极简 AI 助手 (输入 /help 查看命令)\n");
|
|
117
|
+
|
|
118
|
+
await chatLoop(ctx);
|
|
119
|
+
}
|
package/src/cli.ts
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 "./
|
|
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
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"back.d.ts","sourceRoot":"","sources":["../../../src/chat/commands/back.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFzD"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import inquirer from "inquirer";
|
|
2
|
-
import { sendAndPrint } from "../print.js";
|
|
3
|
-
import { saveMessages } from "../../config.js";
|
|
4
|
-
import { buildAgent } from "../../agent-factory.js";
|
|
5
|
-
export async function cmdBack(ctx) {
|
|
6
|
-
const targets = [];
|
|
7
|
-
for (let i = 0; i < ctx.agent.messages.length; i++) {
|
|
8
|
-
const msg = ctx.agent.messages[i];
|
|
9
|
-
if (msg.role === "user") {
|
|
10
|
-
const text = typeof msg.content === "string" ? msg.content : "";
|
|
11
|
-
if (text) {
|
|
12
|
-
targets.push({ index: i, role: "user", label: "\u{1F464} 用户", preview: text.substring(0, 60) + (text.length > 60 ? "..." : "") });
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
else if (msg.role === "tool" || msg.role === "function") {
|
|
16
|
-
const text = typeof msg.content === "string" ? msg.content : "";
|
|
17
|
-
if (text) {
|
|
18
|
-
targets.push({ index: i, role: msg.role, label: "\u{1F527} 工具", preview: text.substring(0, 60) + (text.length > 60 ? "..." : "") });
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
if (targets.length === 0) {
|
|
23
|
-
console.log("\n❌ 还没有消息可以撤回\n");
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
console.log("\n📋 选择要撤回到哪条消息(将删除所选及其之后的所有内容):\n");
|
|
27
|
-
const { selectedIndex } = await inquirer.prompt([
|
|
28
|
-
{
|
|
29
|
-
type: "list",
|
|
30
|
-
name: "selectedIndex",
|
|
31
|
-
message: "撤回到:",
|
|
32
|
-
pageSize: 15,
|
|
33
|
-
choices: [
|
|
34
|
-
{ name: "\u21a9\ufe0f 取消操作", value: -1 },
|
|
35
|
-
...targets.map((t) => ({ name: t.label + " " + t.preview, value: t.index })),
|
|
36
|
-
],
|
|
37
|
-
},
|
|
38
|
-
]);
|
|
39
|
-
if (selectedIndex === -1) {
|
|
40
|
-
console.log("\n已取消\n");
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const selectedMsg = ctx.agent.messages[selectedIndex];
|
|
44
|
-
const isUserMsg = selectedMsg.role === "user";
|
|
45
|
-
const originalText = typeof selectedMsg.content === "string" ? selectedMsg.content : "";
|
|
46
|
-
const sliceEnd = isUserMsg ? selectedIndex : selectedIndex + 1;
|
|
47
|
-
ctx.agent.messages = ctx.agent.messages.slice(0, sliceEnd);
|
|
48
|
-
if (isUserMsg) {
|
|
49
|
-
console.log("\n原内容: " + originalText.substring(0, 200) + (originalText.length > 200 ? "..." : "") + "\n");
|
|
50
|
-
const { editChoice } = await inquirer.prompt([
|
|
51
|
-
{
|
|
52
|
-
type: "list",
|
|
53
|
-
name: "editChoice",
|
|
54
|
-
message: "请选择:",
|
|
55
|
-
choices: [
|
|
56
|
-
{ name: "\u270f\ufe0f 修改后重新发送", value: "edit" },
|
|
57
|
-
{ name: "\u{1F504} 直接重新发送", value: "resend" },
|
|
58
|
-
{ name: "\u21a9\ufe0f 取消操作", value: "cancel" },
|
|
59
|
-
],
|
|
60
|
-
},
|
|
61
|
-
]);
|
|
62
|
-
if (editChoice === "cancel") {
|
|
63
|
-
console.log("\n已取消\n");
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
let textToSend = originalText;
|
|
67
|
-
if (editChoice === "edit") {
|
|
68
|
-
const { editedContent } = await inquirer.prompt([
|
|
69
|
-
{ type: "input", name: "editedContent", message: "修改消息:", default: originalText },
|
|
70
|
-
]);
|
|
71
|
-
if (!editedContent.trim()) {
|
|
72
|
-
console.log("\n❌ 消息不能为空\n");
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
textToSend = editedContent.trim();
|
|
76
|
-
}
|
|
77
|
-
ctx.agent = await buildAgent(ctx.agent.messages);
|
|
78
|
-
await sendAndPrint(ctx.agent, textToSend);
|
|
79
|
-
saveMessages(ctx.agent.messages);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
console.log("\n💡 请输入一条新消息继续对话\n");
|
|
83
|
-
const { newMessage } = await inquirer.prompt([
|
|
84
|
-
{ type: "input", name: "newMessage", message: "新消息:" },
|
|
85
|
-
]);
|
|
86
|
-
if (!newMessage.trim()) {
|
|
87
|
-
console.log("\n已取消\n");
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
ctx.agent = await buildAgent(ctx.agent.messages);
|
|
91
|
-
await sendAndPrint(ctx.agent, newMessage.trim());
|
|
92
|
-
saveMessages(ctx.agent.messages);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
//# sourceMappingURL=back.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"back.js","sourceRoot":"","sources":["../../../src/chat/commands/back.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../src/chat/commands/editor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,iBAY3C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../../src/chat/commands/editor.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,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,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exit.d.ts","sourceRoot":"","sources":["../../../src/chat/commands/exit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exit.js","sourceRoot":"","sources":["../../../src/chat/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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/chat/commands/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,SAEtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/chat/commands/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,GAAG,CAAC,kHAAkH,CAAC,CAAC;AAClI,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chat/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAS5C,wBAAsB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B9E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chat/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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/chat/commands/load.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BzD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/chat/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,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { Agent } from "@ai-zen/agents-core";
|
|
2
|
-
import type { SessionCtx } from "../session.js";
|
|
3
|
-
export declare function sendAndPrint(agent: Agent, text: string): Promise<void>;
|
|
4
|
-
export declare function handleMessage(ctx: SessionCtx, text: string): Promise<void>;
|
|
5
|
-
//# sourceMappingURL=message.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/chat/commands/message.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAW,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,wBAAsB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5E;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhF"}
|