qcanvas-local-agent 0.1.0
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 +36 -0
- package/dist/agents.d.ts +90 -0
- package/dist/agents.js +748 -0
- package/dist/canvas-session.d.ts +16 -0
- package/dist/canvas-session.js +154 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.js +150 -0
- package/dist/generation-flow-compiler.d.ts +67 -0
- package/dist/generation-flow-compiler.js +207 -0
- package/dist/http-server.d.ts +1 -0
- package/dist/http-server.js +275 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +10 -0
- package/dist/mcp-server.d.ts +1 -0
- package/dist/mcp-server.js +49 -0
- package/dist/schemas.d.ts +257 -0
- package/dist/schemas.js +78 -0
- package/dist/types.d.ts +35 -0
- package/dist/types.js +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# qcanvas-local-agent
|
|
2
|
+
|
|
3
|
+
QCanvas 「本机 Agent」:在你自己的电脑上运行一个本地桥接服务,让 QCanvas 网页画布可以调用**本机登录的 Codex / Claude** 来读写画布。
|
|
4
|
+
|
|
5
|
+
## 一条命令启动
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx -y qcanvas-local-agent
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
启动后会打印本地地址(默认 `http://127.0.0.1:17372`)和一个连接令牌(Connect token)。在 QCanvas 网页里切到「本机模式」,把地址和令牌填进去即可连接。
|
|
12
|
+
|
|
13
|
+
> 需要 Node.js(建议 22 或更新版本)。首次运行会自动下载依赖(含 Codex,可选 Claude)。
|
|
14
|
+
|
|
15
|
+
## 登录 AI(每台电脑一次)
|
|
16
|
+
|
|
17
|
+
本机 Agent 驱动的是你本机的 CLI,需各自登录:
|
|
18
|
+
|
|
19
|
+
- **Codex**:`npx -y @openai/codex login --device-auth`
|
|
20
|
+
- **Claude**(可选):随包安装的 Claude Code,`claude auth login`
|
|
21
|
+
|
|
22
|
+
## 可配置的环境变量
|
|
23
|
+
|
|
24
|
+
| 变量 | 说明 | 默认 |
|
|
25
|
+
|------|------|------|
|
|
26
|
+
| `QCANVAS_LOCAL_AGENT_PORT` | 监听端口 | `17372` |
|
|
27
|
+
| `QCANVAS_LOCAL_AGENT_HOST` | 监听地址 | `127.0.0.1` |
|
|
28
|
+
| `QCANVAS_LOCAL_AGENT_TOKEN` | 连接令牌(不设则随机生成) | 随机 |
|
|
29
|
+
| `QCANVAS_CLAUDE_COMMAND` | Claude 可执行文件路径(默认自动定位随包安装的版本,找不到再用 PATH 的 `claude`) | 自动 |
|
|
30
|
+
|
|
31
|
+
配置持久化在 `~/.qcanvas/qcanvas-local-agent.json`。
|
|
32
|
+
|
|
33
|
+
## 说明
|
|
34
|
+
|
|
35
|
+
- 所有对画布的写操作都会由浏览器二次确认后才真正应用。
|
|
36
|
+
- 令牌仅用于本机 `127.0.0.1` 回环连接的鉴权。
|
package/dist/agents.d.ts
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { AgentAttachment, AgentEmit } from "./types.js";
|
|
2
|
+
type Json = Record<string, unknown>;
|
|
3
|
+
type CodexRunOptions = {
|
|
4
|
+
threadId?: string;
|
|
5
|
+
cwd?: string;
|
|
6
|
+
};
|
|
7
|
+
type ClaudeRunOptions = {
|
|
8
|
+
threadId?: string;
|
|
9
|
+
cwd?: string;
|
|
10
|
+
/** claude CLI 命令,默认 "claude";不在 PATH 时可传完整路径。 */
|
|
11
|
+
command?: string;
|
|
12
|
+
/** 保存的会话 id 失效时是否允许自动改开新会话(仅当 threadId 非用户显式指定时开启)。 */
|
|
13
|
+
allowFreshFallback?: boolean;
|
|
14
|
+
/** 每当得知本轮实际使用的 session id 时回调(init/result 事件都会触发)。 */
|
|
15
|
+
onThread?: (threadId: string) => void;
|
|
16
|
+
};
|
|
17
|
+
export type LocalAgentDescriptor = {
|
|
18
|
+
id: string;
|
|
19
|
+
label: string;
|
|
20
|
+
/** 是否支持服务端会话列表管理(列出/恢复/归档)。 */
|
|
21
|
+
threads: boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare const LOCAL_AGENTS: LocalAgentDescriptor[];
|
|
24
|
+
export declare function isLocalAgentId(value: unknown): value is string;
|
|
25
|
+
type AgentHistoryMessage = {
|
|
26
|
+
id: string;
|
|
27
|
+
role: "user" | "assistant" | "tool" | "error";
|
|
28
|
+
title?: string;
|
|
29
|
+
text: string;
|
|
30
|
+
detail?: unknown;
|
|
31
|
+
streamId?: string;
|
|
32
|
+
};
|
|
33
|
+
export declare function withAgentPrompt(prompt: string): string;
|
|
34
|
+
export declare function runCodexTurn(prompt: string, emit: AgentEmit, attachments?: AgentAttachment[], options?: CodexRunOptions): Promise<void>;
|
|
35
|
+
export declare function startCodexThread(emit: AgentEmit, cwd?: string): Promise<Json>;
|
|
36
|
+
export declare function resumeCodexThread(emit: AgentEmit, threadId: string, cwd?: string): Promise<{
|
|
37
|
+
thread: {};
|
|
38
|
+
messages: AgentHistoryMessage[];
|
|
39
|
+
}>;
|
|
40
|
+
export declare function listCodexThreads(emit: AgentEmit, options: {
|
|
41
|
+
cwd: string;
|
|
42
|
+
searchTerm?: string;
|
|
43
|
+
limit?: number;
|
|
44
|
+
}): Promise<{
|
|
45
|
+
data: {
|
|
46
|
+
id: string;
|
|
47
|
+
sessionId: string;
|
|
48
|
+
preview: string;
|
|
49
|
+
name: string | null;
|
|
50
|
+
cwd: string;
|
|
51
|
+
status: string;
|
|
52
|
+
source: unknown;
|
|
53
|
+
threadSource: unknown;
|
|
54
|
+
createdAt: number;
|
|
55
|
+
updatedAt: number;
|
|
56
|
+
}[];
|
|
57
|
+
nextCursor: {} | null;
|
|
58
|
+
backwardsCursor: {} | null;
|
|
59
|
+
}>;
|
|
60
|
+
export declare function readCodexThread(emit: AgentEmit, threadId: string, cwd?: string): Promise<{
|
|
61
|
+
thread: {
|
|
62
|
+
id: string;
|
|
63
|
+
sessionId: string;
|
|
64
|
+
preview: string;
|
|
65
|
+
name: string | null;
|
|
66
|
+
cwd: string;
|
|
67
|
+
status: string;
|
|
68
|
+
source: unknown;
|
|
69
|
+
threadSource: unknown;
|
|
70
|
+
createdAt: number;
|
|
71
|
+
updatedAt: number;
|
|
72
|
+
};
|
|
73
|
+
messages: AgentHistoryMessage[];
|
|
74
|
+
}>;
|
|
75
|
+
export declare function verifyCodexThreadWorkspace(emit: AgentEmit, threadId: string, cwd: string): Promise<void>;
|
|
76
|
+
export declare function archiveCodexThread(emit: AgentEmit, threadId: string, cwd?: string): Promise<void>;
|
|
77
|
+
export declare function runClaudeTurn(prompt: string, emit: AgentEmit, attachments?: AgentAttachment[], options?: ClaudeRunOptions): Promise<void>;
|
|
78
|
+
export declare function summarizeCodexThread(thread: unknown): {
|
|
79
|
+
id: string;
|
|
80
|
+
sessionId: string;
|
|
81
|
+
preview: string;
|
|
82
|
+
name: string | null;
|
|
83
|
+
cwd: string;
|
|
84
|
+
status: string;
|
|
85
|
+
source: unknown;
|
|
86
|
+
threadSource: unknown;
|
|
87
|
+
createdAt: number;
|
|
88
|
+
updatedAt: number;
|
|
89
|
+
};
|
|
90
|
+
export {};
|