@pi-harness/client-web 0.1.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/control-room.d.ts +102 -0
- package/dist/control-room.d.ts.map +1 -0
- package/dist/control-room.js +12 -0
- package/dist/control-room.js.map +1 -0
- package/dist/design-contract.d.ts +85 -0
- package/dist/design-contract.d.ts.map +1 -0
- package/dist/design-contract.js +99 -0
- package/dist/design-contract.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/react-room.d.ts +6 -0
- package/dist/react-room.d.ts.map +1 -0
- package/dist/react-room.js +103 -0
- package/dist/react-room.js.map +1 -0
- package/package.json +29 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
export interface ClientStatus {
|
|
2
|
+
readonly status: string;
|
|
3
|
+
readonly model: string;
|
|
4
|
+
readonly messages: number;
|
|
5
|
+
readonly events: number;
|
|
6
|
+
readonly sessionId: string;
|
|
7
|
+
readonly sessionFile?: string;
|
|
8
|
+
readonly cwd: string;
|
|
9
|
+
readonly agentDir: string;
|
|
10
|
+
readonly plugins: readonly string[];
|
|
11
|
+
}
|
|
12
|
+
export interface ClientSession {
|
|
13
|
+
readonly sessionId: string;
|
|
14
|
+
readonly sessionFile?: string;
|
|
15
|
+
readonly messages: readonly Record<string, unknown>[];
|
|
16
|
+
readonly entries: readonly unknown[];
|
|
17
|
+
readonly events: readonly Record<string, unknown>[];
|
|
18
|
+
}
|
|
19
|
+
export interface ClientModel {
|
|
20
|
+
readonly provider: string;
|
|
21
|
+
readonly id: string;
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly reasoning: boolean;
|
|
24
|
+
readonly contextWindow: number | null;
|
|
25
|
+
readonly active: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface ClientPlugin {
|
|
28
|
+
readonly id: string;
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly enabled: boolean;
|
|
31
|
+
readonly state: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ClientProvider {
|
|
34
|
+
readonly provider: string;
|
|
35
|
+
readonly name: string;
|
|
36
|
+
readonly active: boolean;
|
|
37
|
+
readonly auth?: {
|
|
38
|
+
readonly configured?: boolean;
|
|
39
|
+
readonly source?: string;
|
|
40
|
+
readonly label?: string;
|
|
41
|
+
};
|
|
42
|
+
readonly activeModel?: ClientModel;
|
|
43
|
+
readonly models: readonly ClientModel[];
|
|
44
|
+
}
|
|
45
|
+
export interface ClientCommand {
|
|
46
|
+
readonly name: string;
|
|
47
|
+
readonly invocationName: string;
|
|
48
|
+
readonly description?: string;
|
|
49
|
+
readonly source?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface ClientFile {
|
|
52
|
+
readonly path: string;
|
|
53
|
+
readonly status: string;
|
|
54
|
+
readonly label: string;
|
|
55
|
+
}
|
|
56
|
+
export interface ClientApi {
|
|
57
|
+
getStatus(): Promise<ClientStatus>;
|
|
58
|
+
getSession(): Promise<ClientSession>;
|
|
59
|
+
getFiles(): Promise<readonly ClientFile[]>;
|
|
60
|
+
getFileDiff(path: string): Promise<{
|
|
61
|
+
path: string;
|
|
62
|
+
diff: string;
|
|
63
|
+
}>;
|
|
64
|
+
commitFiles(paths: readonly string[], message: string): Promise<{
|
|
65
|
+
committed: boolean;
|
|
66
|
+
commit?: string;
|
|
67
|
+
message: string;
|
|
68
|
+
}>;
|
|
69
|
+
revertFiles(paths: readonly string[]): Promise<{
|
|
70
|
+
reverted: boolean;
|
|
71
|
+
paths: readonly string[];
|
|
72
|
+
}>;
|
|
73
|
+
prompt(value: string): Promise<{
|
|
74
|
+
reply: string;
|
|
75
|
+
messages: number;
|
|
76
|
+
}>;
|
|
77
|
+
abort(): Promise<{
|
|
78
|
+
aborted: boolean;
|
|
79
|
+
}>;
|
|
80
|
+
createSession(): Promise<ClientSession>;
|
|
81
|
+
openSession(path: string): Promise<ClientSession>;
|
|
82
|
+
listSessions(): Promise<readonly Record<string, unknown>[]>;
|
|
83
|
+
listModels(): Promise<readonly ClientModel[]>;
|
|
84
|
+
listProviders(): Promise<readonly ClientProvider[]>;
|
|
85
|
+
testProvider(provider: string): Promise<{
|
|
86
|
+
provider: string;
|
|
87
|
+
reachable: boolean;
|
|
88
|
+
auth?: unknown;
|
|
89
|
+
}>;
|
|
90
|
+
refreshProvider(provider: string): Promise<{
|
|
91
|
+
provider: string;
|
|
92
|
+
models: readonly ClientModel[];
|
|
93
|
+
}>;
|
|
94
|
+
listPlugins(): Promise<readonly ClientPlugin[]>;
|
|
95
|
+
listCommands(): Promise<readonly ClientCommand[]>;
|
|
96
|
+
selectModel(provider: string, model: string): Promise<{
|
|
97
|
+
model: ClientModel;
|
|
98
|
+
}>;
|
|
99
|
+
subscribeEvents(onEvent: (payload: Record<string, unknown>) => void): () => void;
|
|
100
|
+
}
|
|
101
|
+
export declare function createClientApi(): ClientApi;
|
|
102
|
+
//# sourceMappingURL=control-room.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-room.d.ts","sourceRoot":"","sources":["../src/control-room.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
function requestJson(path, init) { return fetch(path, init).then(async (response) => { const payload = await response.json(); if (!response.ok) {
|
|
2
|
+
const error = payload !== null && typeof payload === "object" && "error" in payload && typeof payload.error === "string" ? payload.error : `Request failed with status ${response.status}`;
|
|
3
|
+
throw new Error(error);
|
|
4
|
+
} return payload; }); }
|
|
5
|
+
export function createClientApi() { return { getStatus: () => requestJson("/api/status"), getSession: () => requestJson("/api/session"), getFiles: async () => (await requestJson("/api/files")).items, getFileDiff: (path) => requestJson(`/api/files/diff?path=${encodeURIComponent(path)}`), commitFiles: (paths, message) => requestJson("/api/files/commit", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ paths, message }) }), revertFiles: (paths) => requestJson("/api/files/revert", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ paths, confirm: true }) }), prompt: (value) => requestJson("/api/prompt", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ prompt: value }) }), abort: () => requestJson("/api/abort", { method: "POST" }), createSession: () => requestJson("/api/session/new", { method: "POST" }), openSession: (path) => requestJson("/api/session/open", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ path }) }), listSessions: async () => (await requestJson("/api/sessions")).items, listModels: async () => (await requestJson("/api/models")).items, listProviders: async () => (await requestJson("/api/providers")).items, testProvider: (provider) => requestJson("/api/providers/test", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ provider }) }), refreshProvider: (provider) => requestJson("/api/providers/refresh", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ provider }) }), listPlugins: async () => (await requestJson("/api/plugins")).items, listCommands: async () => (await requestJson("/api/commands")).items, selectModel: (provider, model) => requestJson("/api/model", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ provider, model }) }), subscribeEvents: (onEvent) => { if (typeof EventSource === "undefined")
|
|
6
|
+
return () => { }; const source = new EventSource("/api/events"); source.onmessage = (event) => { try {
|
|
7
|
+
const raw = event.data;
|
|
8
|
+
if (typeof raw === "string")
|
|
9
|
+
onEvent(JSON.parse(raw));
|
|
10
|
+
}
|
|
11
|
+
catch { /* Ignore malformed frames at the network boundary. */ } }; return () => source.close(); } }; }
|
|
12
|
+
//# sourceMappingURL=control-room.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-room.js","sourceRoot":"","sources":["../src/control-room.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export interface DesignWorkspace {
|
|
2
|
+
readonly path: string;
|
|
3
|
+
readonly sessions: string;
|
|
4
|
+
readonly live: boolean;
|
|
5
|
+
readonly branch: string;
|
|
6
|
+
readonly dirty: string;
|
|
7
|
+
}
|
|
8
|
+
export interface DesignSession {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly title: string;
|
|
11
|
+
readonly meta: string;
|
|
12
|
+
readonly state: "running" | "ok" | "warn" | "error";
|
|
13
|
+
readonly group: "今天" | "昨天" | "更早";
|
|
14
|
+
readonly ws: string;
|
|
15
|
+
}
|
|
16
|
+
export interface DesignTurn {
|
|
17
|
+
readonly kind: "user" | "reasoning" | "plugin" | "tool" | "text" | "approval" | "subagent" | "todo" | "stats";
|
|
18
|
+
readonly text?: string;
|
|
19
|
+
readonly name?: string;
|
|
20
|
+
readonly hook?: string;
|
|
21
|
+
readonly target?: string;
|
|
22
|
+
readonly output?: string;
|
|
23
|
+
readonly dur?: string;
|
|
24
|
+
readonly stat?: string;
|
|
25
|
+
readonly statFg?: string;
|
|
26
|
+
readonly glyph?: string;
|
|
27
|
+
readonly isDiff?: boolean;
|
|
28
|
+
readonly diff?: readonly {
|
|
29
|
+
no: string;
|
|
30
|
+
sign: string;
|
|
31
|
+
text: string;
|
|
32
|
+
}[];
|
|
33
|
+
readonly preset?: string;
|
|
34
|
+
readonly goal?: string;
|
|
35
|
+
readonly lineage?: string;
|
|
36
|
+
readonly steps?: readonly {
|
|
37
|
+
tool: string;
|
|
38
|
+
target: string;
|
|
39
|
+
dur: string;
|
|
40
|
+
}[];
|
|
41
|
+
readonly verdict?: string;
|
|
42
|
+
readonly progress?: string;
|
|
43
|
+
readonly todos?: readonly {
|
|
44
|
+
text: string;
|
|
45
|
+
done: boolean;
|
|
46
|
+
}[];
|
|
47
|
+
readonly stats?: readonly string[];
|
|
48
|
+
}
|
|
49
|
+
export interface DesignEvent {
|
|
50
|
+
readonly ts: string;
|
|
51
|
+
readonly source: string;
|
|
52
|
+
readonly summary: string;
|
|
53
|
+
readonly by: string;
|
|
54
|
+
readonly dur: string;
|
|
55
|
+
}
|
|
56
|
+
export interface DesignPlugin {
|
|
57
|
+
readonly name: string;
|
|
58
|
+
readonly ver: string;
|
|
59
|
+
readonly capability: string;
|
|
60
|
+
readonly on: boolean;
|
|
61
|
+
readonly update: boolean;
|
|
62
|
+
readonly local?: boolean;
|
|
63
|
+
readonly desc: string;
|
|
64
|
+
readonly hooks: readonly string[];
|
|
65
|
+
}
|
|
66
|
+
export interface DesignProvider {
|
|
67
|
+
readonly id: string;
|
|
68
|
+
readonly name: string;
|
|
69
|
+
readonly state: string;
|
|
70
|
+
readonly ok: boolean;
|
|
71
|
+
readonly protocol: "openai" | "anthropic";
|
|
72
|
+
readonly baseUrl: string;
|
|
73
|
+
readonly key: string;
|
|
74
|
+
readonly models: readonly string[];
|
|
75
|
+
readonly latency: string;
|
|
76
|
+
readonly by: string;
|
|
77
|
+
}
|
|
78
|
+
export declare const DESIGN_WORKSPACES: readonly DesignWorkspace[];
|
|
79
|
+
export declare const DESIGN_SESSIONS: readonly DesignSession[];
|
|
80
|
+
export declare const DESIGN_TURNS: readonly DesignTurn[];
|
|
81
|
+
export declare const DESIGN_EVENTS: readonly DesignEvent[];
|
|
82
|
+
export declare const DESIGN_PLUGINS: readonly DesignPlugin[];
|
|
83
|
+
export declare const DESIGN_PROVIDERS: readonly DesignProvider[];
|
|
84
|
+
export declare const DESIGN_TOML = "# ~/.config/pi/pi.toml\n# \u4E00\u5207\u90FD\u662F\u5305\uFF1A\u6A21\u578B\u3001\u5DE5\u5177\u3001\u6C99\u7BB1\u3001\u5B58\u50A8\u3001\u754C\u9762\u90FD\u5728\u8FD9\u91CC\u88C5\u5378\u3002\n\n[agent]\npreset = \"coder\"\nmodel = \"ds-coder-v3\"\nmax_steps = 40\nbudget_usd = 1.50\nask_before = [\"write\", \"shell\", \"network\"]\n\n[sandbox]\nbackend = \"landlock\"\nwritable = [\".\"]\nnetwork = false\n\n[context]\nwindow = 64000\ncompact_at = 0.82\n\n[[packages]]\nname = \"context-repo-map\"\nversion = \"1.4.2\"\n\n[[packages]]\nname = \"guard-secret-scan\"\nversion = \"2.0.1\"\n\n[[packages]]\nname = \"subagent-review\"\nversion = \"0.8.5\"\n\n[[packages]]\npath = \"../pi-pkg-vision-handoff\" # \u672C\u5730\u5F00\u53D1\u4E2D\n\n[keys]\npalette = \"cmd+k\"\nsettings = \"cmd+,\"\ninterrupt = \"ctrl+c\"\n";
|
|
85
|
+
//# sourceMappingURL=design-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-contract.d.ts","sourceRoot":"","sources":["../src/design-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export const DESIGN_WORKSPACES = [
|
|
2
|
+
{ path: "~/work/checkout-svc", sessions: "6", live: true, branch: "fix/3ds-timeout", dirty: "4 处未提交" },
|
|
3
|
+
{ path: "~/work/pi-harness", sessions: "12", live: false, branch: "main", dirty: "干净" },
|
|
4
|
+
{ path: "~/scratch/spike-otel", sessions: "2", live: false, branch: "spike", dirty: "12 处未提交" },
|
|
5
|
+
];
|
|
6
|
+
export const DESIGN_SESSIONS = [
|
|
7
|
+
{ id: "s1", title: "修复 3DS 超时导致的支付失败", meta: "ds-coder-v3 · 14 步 · 4 分钟前", state: "running", group: "今天", ws: "~/work/checkout-svc" },
|
|
8
|
+
{ id: "s2", title: "为 refund 模块补单测", meta: "ds-coder-v3 · 22 步 · 1 小时前", state: "ok", group: "今天", ws: "~/work/checkout-svc" },
|
|
9
|
+
{ id: "s3", title: "梳理仓库结构与主要包", meta: "ds-chat · 6 步 · 3 小时前", state: "ok", group: "今天", ws: "~/work/pi-harness" },
|
|
10
|
+
{ id: "s4", title: "把 webhook 重试改成指数退避", meta: "ds-coder-v3 · 31 步 · 昨天", state: "warn", group: "昨天", ws: "~/work/checkout-svc" },
|
|
11
|
+
{ id: "s5", title: "升级 pnpm 到 10 并修构建", meta: "ds-coder-v3 · 48 步 · 昨天", state: "error", group: "昨天", ws: "~/work/pi-harness" },
|
|
12
|
+
{ id: "s6", title: "给 CI 加 e2e 冒烟任务", meta: "ds-coder-v3 · 19 步 · 本周一", state: "ok", group: "更早", ws: "~/scratch/spike-otel" },
|
|
13
|
+
];
|
|
14
|
+
export const DESIGN_TURNS = [
|
|
15
|
+
{ kind: "user", text: "支付成功率从昨天上线后掉了很多,日志里全是 3DS challenge timeout。定位一下,能改就直接改,改完跑测试。" },
|
|
16
|
+
{ kind: "reasoning", dur: "6s", text: "先找超时配置在哪定义,再看是不是 2.4.0 版本引入的默认值变化。优先只读检索,确认后再动代码。" },
|
|
17
|
+
{ kind: "plugin", name: "context-repo-map", hook: "context_provider", text: "注入仓库地图与最近 3 次提交摘要(1,842 tok)" },
|
|
18
|
+
{ kind: "tool", glyph: "⌕", name: "grep", target: "\"3DS\" src/**/*.ts", dur: "0.4s", stat: "12 命中", statFg: "#61666B", output: "src/payment/threeds.ts:41 const CHALLENGE_TIMEOUT_MS = 8_000\nsrc/payment/threeds.ts:88 if (elapsed > CHALLENGE_TIMEOUT_MS) throw new ChallengeTimeout\nsrc/payment/gateway.ts:114 retries: 0\ntest/payment/threeds.spec.ts:23 vi.advanceTimersByTime(8_100)" },
|
|
19
|
+
{ kind: "tool", glyph: "▤", name: "read", target: "src/payment/threeds.ts:30-96", dur: "0.1s", stat: "66 行", statFg: "#61666B", output: "const CHALLENGE_TIMEOUT_MS = 8_000\n\nexport async function runChallenge(ctx: Ctx) {\n const started = now()\n const res = await sdk.challenge(ctx.token) // sdk 2.4.0\n const elapsed = now() - started\n if (elapsed > CHALLENGE_TIMEOUT_MS) throw new ChallengeTimeout()\n return res\n}" },
|
|
20
|
+
{ kind: "text", text: "原因找到了:sdk 2.4.0 起 iOS 端 challenge 平均耗时从 3.1s 涨到 9.4s,而我们的超时仍是 8s,且 retries 为 0,一次超时就直接失败。\n\n我按两处改:超时放宽到 20s,并加一次带抖动的重试。" },
|
|
21
|
+
{ kind: "tool", glyph: "✎", name: "edit", target: "src/payment/threeds.ts", dur: "0.2s", stat: "+9 −2", statFg: "#22C55E", isDiff: true, diff: [{ no: "41", sign: "-", text: "const CHALLENGE_TIMEOUT_MS = 8_000" }, { no: "41", sign: "+", text: "const CHALLENGE_TIMEOUT_MS = 20_000" }, { no: "42", sign: "+", text: "const CHALLENGE_MAX_ATTEMPTS = 2" }, { no: "86", sign: "-", text: " const res = await sdk.challenge(ctx.token)" }, { no: "86", sign: "+", text: " const res = await withRetry(CHALLENGE_MAX_ATTEMPTS, () =>" }, { no: "87", sign: "+", text: " sdk.challenge(ctx.token), { jitter: true })" }] },
|
|
22
|
+
{ kind: "plugin", name: "guard-secret-scan", hook: "before_write", text: "改动无凭据外泄风险,放行" },
|
|
23
|
+
{ kind: "approval", name: "bash — pnpm vitest run test/payment", text: "cd ~/work/checkout-svc && pnpm vitest run test/payment --reporter=dot" },
|
|
24
|
+
{ kind: "tool", glyph: "$", name: "bash", target: "pnpm vitest run test/payment", dur: "12.4s", stat: "exit 0", statFg: "#22C55E", output: "···········\n Test Files 3 passed (3)\n Tests 27 passed (27)\n Duration 11.8s\n\n✓ threeds.spec.ts (9)\n✓ gateway.spec.ts (12)\n✓ webhook.spec.ts (6)" },
|
|
25
|
+
{ kind: "subagent", name: "reviewer", preset: "read-only", goal: "复核 threeds.ts 的改动是否引入回归", dur: "8.1s", lineage: "session #s1 › turn 6 › subagent reviewer(继承 workspace,权限降级为只读)", steps: [{ tool: "read", target: "src/payment/threeds.ts", dur: "0.1s" }, { tool: "read", target: "src/payment/with-retry.ts", dur: "0.1s" }, { tool: "grep", target: "\"CHALLENGE_TIMEOUT_MS\" test/**", dur: "0.3s" }], verdict: "改动本身正确。两点提醒:test/payment/threeds.spec.ts:23 仍按 8s 断言,会在下次改动时误报通过;withRetry 的抖动上限没设,最坏情况下总耗时可能到 44s,建议加 maxTotalMs。" },
|
|
26
|
+
{ kind: "todo", progress: "3 / 4", todos: [{ text: "定位超时来源", done: true }, { text: "放宽超时并加重试", done: true }, { text: "跑 payment 相关测试", done: true }, { text: "补一条针对 20s 边界的回归用例", done: false }] },
|
|
27
|
+
{ kind: "text", text: "测试全绿。还剩一条回归用例没补:现有 spec 里 `advanceTimersByTime(8_100)` 断言的是旧阈值,需要改成 20s 边界并新增一条「首次超时后重试成功」的用例。要我继续补吗?" },
|
|
28
|
+
{ kind: "stats", stats: ["输入 34.2k tok", "缓存命中 61%", "输出 4.8k tok", "用时 1m 42s", "$0.28"] },
|
|
29
|
+
];
|
|
30
|
+
export const DESIGN_EVENTS = [
|
|
31
|
+
{ ts: "02:14:01", source: "system_prompt", summary: "系统提示词组装(preset: coder)", by: "内置", dur: "12ms" },
|
|
32
|
+
{ ts: "02:14:01", source: "context_injection", summary: "注入仓库地图与最近提交(1,842 tok)", by: "context-repo-map", dur: "88ms" },
|
|
33
|
+
{ ts: "02:14:02", source: "user_message", summary: "支付成功率下降,定位并修复", by: "用户", dur: "—" },
|
|
34
|
+
{ ts: "02:14:03", source: "reasoning", summary: "先只读检索超时配置,再判断是否与 sdk 版本相关", by: "ds-coder-v3", dur: "6.0s" },
|
|
35
|
+
{ ts: "02:14:09", source: "tool_call", summary: "grep \"3DS\" src/**/*.ts", by: "内置", dur: "0.4s" },
|
|
36
|
+
{ ts: "02:14:10", source: "tool_result", summary: "12 命中,定位 threeds.ts:41", by: "内置", dur: "—" },
|
|
37
|
+
{ ts: "02:14:11", source: "tool_call", summary: "read src/payment/threeds.ts:30-96", by: "内置", dur: "0.1s" },
|
|
38
|
+
{ ts: "02:14:14", source: "tool_call", summary: "edit src/payment/threeds.ts (+9 −2)", by: "内置", dur: "0.2s" },
|
|
39
|
+
{ ts: "02:14:14", source: "plugin_hook", summary: "凭据扫描通过,放行写入", by: "guard-secret-scan", dur: "31ms" },
|
|
40
|
+
{ ts: "02:14:15", source: "approval", summary: "用户允许一次:bash pnpm vitest", by: "用户", dur: "4.2s" },
|
|
41
|
+
{ ts: "02:14:19", source: "tool_call", summary: "bash pnpm vitest run test/payment", by: "内置", dur: "12.4s" },
|
|
42
|
+
{ ts: "02:14:32", source: "tool_result", summary: "27 passed,exit 0", by: "内置", dur: "—" },
|
|
43
|
+
{ ts: "02:14:33", source: "subagent", summary: "派生 reviewer 子代理复核 diff", by: "subagent-review", dur: "8.1s" },
|
|
44
|
+
{ ts: "02:14:41", source: "assistant_message", summary: "给出结论与剩余一条回归用例建议", by: "ds-coder-v3", dur: "2.6s" },
|
|
45
|
+
];
|
|
46
|
+
export const DESIGN_PLUGINS = [
|
|
47
|
+
{ name: "context-repo-map", ver: "1.4.2", capability: "上下文", on: true, update: false, desc: "把仓库结构、入口文件与最近提交压缩成上下文,超预算时自动裁剪", hooks: ["context_provider", "before_step"] },
|
|
48
|
+
{ name: "guard-secret-scan", ver: "2.0.1", capability: "策略", on: true, update: true, desc: "写入与提交前扫描凭据、私钥、token,命中即拦截并说明位置", hooks: ["before_write", "before_commit"] },
|
|
49
|
+
{ name: "subagent-review", ver: "0.8.5", capability: "子代理", on: true, update: false, desc: "改动落盘后派生只读 reviewer 子代理复核 diff,产出可执行意见", hooks: ["after_write"] },
|
|
50
|
+
{ name: "sandbox-landlock", ver: "1.1.0", capability: "沙箱", on: true, update: false, desc: "Linux Landlock 限制子进程可写路径与出网,越权直接拒绝", hooks: ["shell_exec"] },
|
|
51
|
+
{ name: "model-deepseek", ver: "3.2.0", capability: "模型", on: true, update: true, desc: "DeepSeek 官方模型路由,支持 prompt 缓存与推理内容透传", hooks: ["model_provider"] },
|
|
52
|
+
{ name: "store-sqlite", ver: "1.0.7", capability: "存储", on: true, update: false, desc: "会话事件流落地到本地 SQLite,支持 resume、fork、replay", hooks: ["session_store"] },
|
|
53
|
+
{ name: "vision-handoff", ver: "path", capability: "上下文", on: true, update: false, local: true, desc: "图片交给独立视觉模型描述后回填上下文,从本地路径加载(../pi-pkg-vision-handoff)", hooks: ["context_provider"] },
|
|
54
|
+
{ name: "notify-webhook", ver: "0.3.1", capability: "通知", on: false, update: false, desc: "任务结束或需要确认时推送到自定义 webhook", hooks: ["after_turn"] },
|
|
55
|
+
];
|
|
56
|
+
export const DESIGN_PROVIDERS = [
|
|
57
|
+
{ id: "deepseek", name: "DeepSeek", state: "已连接", ok: true, protocol: "openai", baseUrl: "https://api.deepseek.com/v1", key: "sk-••••••••••••••••7f3a", models: ["ds-coder-v3", "ds-chat", "ds-reasoner"], latency: "41ms", by: "model-deepseek" },
|
|
58
|
+
{ id: "anthropic", name: "Anthropic", state: "已连接", ok: true, protocol: "anthropic", baseUrl: "https://api.anthropic.com", key: "sk-ant-••••••••••2c91", models: ["claude-sonnet", "claude-haiku"], latency: "128ms", by: "model-anthropic" },
|
|
59
|
+
];
|
|
60
|
+
export const DESIGN_TOML = `# ~/.config/pi/pi.toml
|
|
61
|
+
# 一切都是包:模型、工具、沙箱、存储、界面都在这里装卸。
|
|
62
|
+
|
|
63
|
+
[agent]
|
|
64
|
+
preset = "coder"
|
|
65
|
+
model = "ds-coder-v3"
|
|
66
|
+
max_steps = 40
|
|
67
|
+
budget_usd = 1.50
|
|
68
|
+
ask_before = ["write", "shell", "network"]
|
|
69
|
+
|
|
70
|
+
[sandbox]
|
|
71
|
+
backend = "landlock"
|
|
72
|
+
writable = ["."]
|
|
73
|
+
network = false
|
|
74
|
+
|
|
75
|
+
[context]
|
|
76
|
+
window = 64000
|
|
77
|
+
compact_at = 0.82
|
|
78
|
+
|
|
79
|
+
[[packages]]
|
|
80
|
+
name = "context-repo-map"
|
|
81
|
+
version = "1.4.2"
|
|
82
|
+
|
|
83
|
+
[[packages]]
|
|
84
|
+
name = "guard-secret-scan"
|
|
85
|
+
version = "2.0.1"
|
|
86
|
+
|
|
87
|
+
[[packages]]
|
|
88
|
+
name = "subagent-review"
|
|
89
|
+
version = "0.8.5"
|
|
90
|
+
|
|
91
|
+
[[packages]]
|
|
92
|
+
path = "../pi-pkg-vision-handoff" # 本地开发中
|
|
93
|
+
|
|
94
|
+
[keys]
|
|
95
|
+
palette = "cmd+k"
|
|
96
|
+
settings = "cmd+,"
|
|
97
|
+
interrupt = "ctrl+c"
|
|
98
|
+
`;
|
|
99
|
+
//# sourceMappingURL=design-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-contract.js","sourceRoot":"","sources":["../src/design-contract.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,iBAAiB,GAA+B;IAC3D,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE;IACtG,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IACvF,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;CAChG,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,qBAAqB,EAAE;IACrI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,qBAAqB,EAAE;IAC9H,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,mBAAmB,EAAE;IACnH,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,qBAAqB,EAAE;IACjI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,mBAAmB,EAAE;IAC/H,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,sBAAsB,EAAE;CAC/H,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAA0B;IACjD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gEAAgE,EAAE;IACxF,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,mDAAmD,EAAE;IAC3F,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,8BAA8B,EAAE;IAC5G,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,kQAAkQ,EAAE;IACpY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,oSAAoS,EAAE;IAC9a,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0HAA0H,EAAE;IAClJ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,oCAAoC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,qCAAqC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,kCAAkC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,8CAA8C,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,6DAA6D,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,iDAAiD,EAAE,CAAC,EAAE;IAC9lB,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE;IACzF,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,qCAAqC,EAAE,IAAI,EAAE,uEAAuE,EAAE;IAChJ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iKAAiK,EAAE;IAC9S,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,yBAAyB,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gEAAgE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,kCAAkC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,oHAAoH,EAAE;IAC5gB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;IAClM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uGAAuG,EAAE;IAC/H,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE;CAC5F,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE;IACrG,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,EAAE;IACvH,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;IACxF,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,2BAA2B,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE;IAC7G,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE;IACnG,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;IAChG,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,mCAAmC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE;IAC5G,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,qCAAqC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE;IAC9G,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,EAAE;IACvG,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,yBAAyB,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE;IACjG,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,mCAAmC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE;IAC7G,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;IAC1F,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,EAAE;IAC7G,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE;CAC5G,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,kBAAkB,EAAE,aAAa,CAAC,EAAE;IAC1K,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC,EAAE;IACvK,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,uCAAuC,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE;IAC5J,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,oCAAoC,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE;IACxJ,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,qCAAqC,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC,EAAE;IAC1J,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,yCAAyC,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,EAAE;IAC5J,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,sDAAsD,EAAE,KAAK,EAAE,CAAC,kBAAkB,CAAC,EAAE;IAC3L,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE;CAC9I,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,6BAA6B,EAAE,GAAG,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE;IAClP,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,2BAA2B,EAAE,GAAG,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE;CAC9O,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsC1B,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import { type ClientApi } from "./control-room.js";
|
|
3
|
+
declare module "@deepseek-ai/cordis" {
|
|
4
|
+
interface Context {
|
|
5
|
+
clientRoot: HTMLElement;
|
|
6
|
+
clientApi: ClientApi;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export declare class AppWebEntry {
|
|
10
|
+
#private;
|
|
11
|
+
readonly context: Context;
|
|
12
|
+
readonly root: HTMLElement;
|
|
13
|
+
constructor(root: HTMLElement);
|
|
14
|
+
run(): void;
|
|
15
|
+
dispose(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,QAAQ,qBAAqB,CAAC;IAAE,UAAU,OAAO;QAAG,UAAU,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;KAAE;CAAE;AAE7G,qBAAa,WAAW;;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;gBAEf,IAAI,EAAE,WAAW;IAC7B,GAAG,IAAI,IAAI;IAML,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAC/B"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
import { createRoot } from "react-dom/client";
|
|
3
|
+
import { Context } from "@deepseek-ai/cordis";
|
|
4
|
+
import { ControlRoomView } from "./react-room.js";
|
|
5
|
+
import { createClientApi } from "./control-room.js";
|
|
6
|
+
export class AppWebEntry {
|
|
7
|
+
context;
|
|
8
|
+
root;
|
|
9
|
+
#reactRoot;
|
|
10
|
+
constructor(root) { this.root = root; this.context = new Context(); }
|
|
11
|
+
run() {
|
|
12
|
+
this.context.provide("clientRoot", this.root);
|
|
13
|
+
this.context.provide("clientApi", createClientApi());
|
|
14
|
+
this.#reactRoot = createRoot(this.root);
|
|
15
|
+
this.#reactRoot.render(createElement(ControlRoomView, { api: this.context.clientApi }));
|
|
16
|
+
}
|
|
17
|
+
async dispose() { this.#reactRoot?.unmount(); await this.context.fiber.dispose(); }
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAC;AAIpE,MAAM,OAAO,WAAW;IACb,OAAO,CAAU;IACjB,IAAI,CAAc;IAC3B,UAAU,CAAQ;IAClB,YAAY,IAAiB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;IAClF,GAAG;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,KAAK,CAAC,OAAO,KAAoB,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;CACnG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-room.d.ts","sourceRoot":"","sources":["../src/react-room.tsx"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,SAAS,EAAwI,MAAM,mBAAmB,CAAC;AAE1M,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAoDnD,wBAAgB,eAAe,CAAC,EAAE,GAAuB,EAAE,EAAE;IAAE,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,2CAsB/E"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { createClientApi } from "./control-room.js";
|
|
4
|
+
const value = (input, fallback = "—") => { if (input === undefined || input === null || input === "")
|
|
5
|
+
return fallback; if (typeof input === "string" || typeof input === "number" || typeof input === "boolean" || typeof input === "bigint")
|
|
6
|
+
return String(input); try {
|
|
7
|
+
return JSON.stringify(input);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return fallback;
|
|
11
|
+
} };
|
|
12
|
+
const messageText = (message) => { const content = message.content; if (typeof content === "string")
|
|
13
|
+
return content; if (Array.isArray(content))
|
|
14
|
+
return content.map((part) => typeof part === "string" ? part : typeof part === "object" && part !== null && typeof part.text === "string" ? part.text : "").join(""); return ""; };
|
|
15
|
+
const eventLabel = (event) => value(event.summary ?? event.message ?? event.toolName ?? event.type ?? event.event, "未命名事件");
|
|
16
|
+
const capability = (name) => name.includes("model") ? "模型" : name.includes("tool") ? "工具" : name.includes("session") ? "会话" : name.includes("resource") ? "资源" : name.includes("web") || name.includes("gateway") ? "界面" : "运行时";
|
|
17
|
+
function sessionGroups(sessions) { const now = new Date(); const start = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime(); const yesterday = start - 86_400_000; const groups = new Map(); for (const session of sessions) {
|
|
18
|
+
const raw = session.modified ?? session.created;
|
|
19
|
+
const timestamp = typeof raw === "number" ? raw : typeof raw === "string" ? Date.parse(raw) : Number.NaN;
|
|
20
|
+
const label = Number.isFinite(timestamp) && timestamp >= start ? "今天" : Number.isFinite(timestamp) && timestamp >= yesterday ? "昨天" : "更早";
|
|
21
|
+
groups.set(label, [...(groups.get(label) ?? []), session]);
|
|
22
|
+
} return ["今天", "昨天", "更早"].flatMap((label) => { const items = groups.get(label); return items?.length ? [[label, items]] : []; }); }
|
|
23
|
+
function RuntimeCard({ event }) {
|
|
24
|
+
const type = value(event.type, "event");
|
|
25
|
+
const output = event.output ?? event.result ?? event.message;
|
|
26
|
+
if (type === "tool_execution_start" || type === "tool_execution_end")
|
|
27
|
+
return _jsx("article", { className: "turn runtime-event", children: _jsxs("details", { className: "tool-card", open: type === "tool_execution_end", children: [_jsxs("summary", { className: "tool-head", children: [_jsxs("b", { children: [type === "tool_execution_end" ? "✓" : "▤", " ", value(event.toolName ?? event.name, "tool")] }), _jsx("span", { className: "tool-target", children: value(event.args ?? event.toolCallId ?? event.duration, "运行时工具") })] }), output !== undefined && _jsx("pre", { className: "tool-output", children: typeof output === "string" ? output : JSON.stringify(output, null, 2) })] }) });
|
|
28
|
+
if (type === "message_update" && typeof event.assistantMessageEvent === "object" && event.assistantMessageEvent !== null && event.assistantMessageEvent.type === "thinking_delta")
|
|
29
|
+
return _jsx("article", { className: "turn runtime-event", children: _jsxs("details", { className: "reasoning", children: [_jsx("summary", { className: "reasoning-head", children: "\u601D\u8003" }), _jsx("p", { className: "reasoning-body", children: value(event.assistantMessageEvent.delta, "") })] }) });
|
|
30
|
+
if (["agent_start", "turn_start"].includes(type))
|
|
31
|
+
return _jsx("article", { className: "turn runtime-event", children: _jsxs("div", { className: "plugin-event", children: ["\u25B7 ", type === "agent_start" ? "agent 开始" : "新一轮开始"] }) });
|
|
32
|
+
if (["agent_end", "agent_settled", "turn_end"].includes(type))
|
|
33
|
+
return _jsx("article", { className: "turn runtime-event", children: _jsxs("div", { className: "stats-row", children: ["\u2713 ", type === "agent_settled" ? "agent 已停止" : type === "agent_end" ? "agent 完成" : "本轮完成"] }) });
|
|
34
|
+
if (type === "queue_update")
|
|
35
|
+
return _jsxs("article", { className: "turn runtime-event", children: [_jsx("div", { className: "plugin-event", children: "\u961F\u5217\u66F4\u65B0" }), _jsxs("p", { className: "turn-meta", children: ["steering ", Array.isArray(event.steering) ? event.steering.length : value(event.steering, "0"), " \u00B7 follow-up ", Array.isArray(event.followUp) ? event.followUp.length : value(event.followUp, "0")] })] });
|
|
36
|
+
if (type.startsWith("compaction") || type.startsWith("auto_retry") || type.startsWith("summarization") || type === "bash_execution_update")
|
|
37
|
+
return _jsxs("article", { className: "turn runtime-event", children: [_jsxs("div", { className: "plugin-event", children: ["\u25C8 ", type] }), _jsx("p", { className: "turn-meta", children: typeof output === "string" ? output : JSON.stringify(event) })] });
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
function Workspace({ status, onCreate, onStarter, onToml }) {
|
|
41
|
+
const starters = [["定位问题", "分析当前仓库并给出根因"], ["修复并测试", "实现修复并运行相关测试"], ["审查改动", "只读检查未提交变更"], ["解释代码", "解释当前文件的关键逻辑"]];
|
|
42
|
+
return _jsxs("div", { className: "new-session-screen", children: [_jsx("span", { className: "pi-mark large", children: "\u03C0" }), _jsx("h2", { children: "\u65B0\u4F1A\u8BDD" }), _jsx("p", { children: "\u9009\u62E9\u5F53\u524D\u8FD0\u884C\u65F6\u5DE5\u4F5C\u533A\u540E\u5F00\u59CB\u771F\u5B9E\u4F1A\u8BDD\u3002" }), _jsxs("div", { className: "workspace-picker", children: [_jsxs("button", { className: "workspace-row", onClick: onCreate, type: "button", children: [_jsx("span", { className: "live", children: "\u25CF" }), _jsxs("span", { children: [_jsx("code", { children: status?.cwd ?? "加载工作区…" }), _jsx("small", { children: status ? `${status.sessionId} · ${status.model}` : "由 /api/status 返回" })] }), _jsx("span", { children: "\u203A" })] }), _jsxs("button", { className: "workspace-row", disabled: true, type: "button", children: [_jsx("span", { className: "offline", children: "\uFF0B" }), _jsxs("span", { children: [_jsx("code", { children: "\u6DFB\u52A0\u76EE\u5F55\u2026" }), _jsx("small", { children: "\u5F53\u524D API \u672A\u63D0\u4F9B\u5DE5\u4F5C\u533A\u7BA1\u7406\u63A5\u53E3" })] })] })] }), _jsxs("div", { className: "effective-config", children: [_jsx("code", { children: "pi.toml \u751F\u6548\u503C" }), _jsx("span", { children: status?.model ?? "由运行时提供" }), _jsx("span", { children: status ? `${status.messages} 条消息` : "—" }), _jsx("a", { href: "#", onClick: (event) => { event.preventDefault(); onToml(); }, children: "\u6539\u914D\u7F6E \u2318," })] }), _jsx("div", { className: "starter-grid", children: starters.map(([title, prompt]) => _jsxs("button", { className: "starter-card", onClick: () => onStarter(prompt), type: "button", children: [_jsx("strong", { children: title }), _jsx("small", { children: prompt })] }, title)) })] });
|
|
43
|
+
}
|
|
44
|
+
function Details({ event, onClose, onCopy }) {
|
|
45
|
+
if (!event)
|
|
46
|
+
return _jsxs("aside", { className: "details-panel", children: [_jsxs("header", { children: [_jsx("strong", { children: "\u4E8B\u4EF6\u8BE6\u60C5" }), _jsx("button", { onClick: onClose, type: "button", children: "\u00D7" })] }), _jsx("div", { className: "details-body", children: _jsx("div", { className: "empty-state", children: "\u9009\u62E9\u8F68\u8FF9\u4E2D\u7684\u4E8B\u4EF6\u67E5\u770B\u539F\u59CB\u6570\u636E\u3002" }) })] });
|
|
47
|
+
const output = event.output ?? event.result ?? event.message;
|
|
48
|
+
const stats = [["来源", value(event.type ?? event.source, "event")], ["产生者", value(event.by ?? event.source)], ["耗时", value(event.duration ?? event.dur)], ["时间", value(event.timestamp ?? event.ts ?? event.time)]];
|
|
49
|
+
return _jsxs("aside", { className: "details-panel", children: [_jsxs("header", { children: [_jsx("strong", { children: eventLabel(event) }), _jsx("button", { onClick: onClose, type: "button", children: "\u00D7" })] }), _jsxs("div", { className: "details-body", children: [_jsx("div", { className: "detail-stats", children: stats.map(([key, item]) => _jsxs("div", { children: [_jsx("small", { children: key }), _jsx("b", { children: item })] }, key)) }), output !== undefined && _jsxs("div", { className: "detail-section", children: [_jsx("small", { children: "\u8F93\u51FA" }), _jsx("pre", { className: "tool-output", children: typeof output === "string" ? output : JSON.stringify(output, null, 2) })] }), _jsxs("div", { className: "detail-section", children: [_jsx("small", { children: "\u7ECF\u8FC7\u7684\u63D2\u4EF6" }), _jsx("div", { className: "detail-plugin", children: "Cordis loader \u00B7 runtime event" })] }), _jsxs("div", { className: "detail-actions", children: [_jsx("button", { onClick: onCopy, type: "button", children: "\u590D\u5236 JSON" }), _jsx("button", { disabled: true, title: "\u5F53\u524D API \u672A\u63D0\u4F9B\u91CD\u653E\u63A5\u53E3", type: "button", children: "\u91CD\u653E" })] }), _jsxs("details", { className: "raw-json", children: [_jsx("summary", { children: "\u539F\u59CB JSON" }), _jsx("pre", { className: "raw-json-body", children: JSON.stringify(event, null, 2) })] })] })] });
|
|
50
|
+
}
|
|
51
|
+
function Trajectory({ events, onSelect }) {
|
|
52
|
+
const [filter, setFilter] = useState("all");
|
|
53
|
+
const counts = useMemo(() => { const map = new Map(); events.forEach((event) => { const type = value(event.type, "event"); map.set(type, (map.get(type) ?? 0) + 1); }); return map; }, [events]);
|
|
54
|
+
const visible = events.filter((event) => filter === "all" || value(event.type, "event") === filter);
|
|
55
|
+
return _jsxs("section", { className: "view-panel trajectory-view", children: [_jsxs("div", { className: "trajectory-summary", children: [_jsx("span", { children: "\u6309\u8F6E\u6B21" }), _jsxs("b", { children: [events.length, " \u4E2A\u4E8B\u4EF6"] }), _jsx("div", { className: "timeline", children: events.length ? events.map((event, index) => _jsx("span", { className: "timeline-turn", children: _jsx("i", { className: "timeline-strip", title: eventLabel(event) }) }, index)) : _jsx("span", { className: "timeline-empty", children: "\u7B49\u5F85\u771F\u5B9E\u4E8B\u4EF6\u2026" }) })] }), _jsxs("div", { className: "source-filters", children: [_jsxs("button", { className: `filter ${filter === "all" ? "active" : ""}`, onClick: () => setFilter("all"), type: "button", children: ["\u5168\u90E8 ", events.length] }), [...counts].map(([type, count]) => _jsxs("button", { className: `filter ${filter === type ? "active" : ""}`, onClick: () => setFilter(type), type: "button", children: [type, " ", count] }, type))] }), _jsxs("div", { className: "event-table", children: [_jsxs("div", { className: "event-head", children: [_jsx("span", { children: "\u65F6\u95F4" }), _jsx("span", { children: "\u6765\u6E90" }), _jsx("span", { children: "\u4E8B\u4EF6" }), _jsx("span", { children: "\u4EA7\u751F\u8005" }), _jsx("span", { children: "\u8017\u65F6" })] }), visible.map((event, index) => _jsxs("button", { className: "event-row", onClick: () => onSelect(event), type: "button", children: [_jsx("span", { children: value(event.timestamp ?? event.ts ?? event.time) }), _jsxs("span", { children: [_jsx("i", { className: "event-dot" }), value(event.type, "event")] }), _jsx("strong", { children: eventLabel(event) }), _jsx("span", { children: value(event.by ?? event.source) }), _jsx("span", { children: value(event.duration ?? event.dur) })] }, index)), !visible.length && _jsx("div", { className: "empty-state", children: "\u6682\u65E0\u8F68\u8FF9\u4E8B\u4EF6\u3002" })] })] });
|
|
56
|
+
}
|
|
57
|
+
function Files({ files, api, onDiff, onRefresh }) { const additions = files.filter((file) => file.status.includes("A") || file.status === "??").length; const deletions = files.filter((file) => file.status.includes("D")).length; const [message, setMessage] = useState(""); const [busy, setBusy] = useState(false); const [error, setError] = useState(""); const commit = () => { const text = message.trim(); if (!text || busy)
|
|
58
|
+
return; setBusy(true); setError(""); void api.commitFiles(files.map((file) => file.path), text).then(() => { setMessage(""); onRefresh(); }).catch((cause) => setError(cause instanceof Error ? cause.message : String(cause))).finally(() => setBusy(false)); }; const revert = () => { if (!files.length || busy || !window.confirm("撤销这些未提交改动?此操作不可恢复。"))
|
|
59
|
+
return; setBusy(true); setError(""); void api.revertFiles(files.map((file) => file.path)).then(onRefresh).catch((cause) => setError(cause instanceof Error ? cause.message : String(cause))).finally(() => setBusy(false)); }; return _jsx("section", { className: "view-panel files-view", children: _jsxs("div", { className: "files-content", children: [_jsxs("div", { className: "files-title", children: [_jsx("strong", { children: "\u672C\u6B21\u4F1A\u8BDD\u6539\u52A8" }), _jsx("span", { children: "\u7531 /api/files \u63D0\u4F9B" })] }), _jsxs("div", { className: "file-summary", children: [files.length, " \u4E2A\u6587\u4EF6 \u00B7 ", additions, " \u4E2A\u65B0\u589E \u00B7 ", deletions, " \u4E2A\u5220\u9664"] }), _jsx("div", { className: "file-list", children: files.length ? files.map((file) => _jsxs("div", { className: "file-row", children: [_jsx("b", { className: `file-kind ${file.label === "untracked" ? "new" : ""}`, children: file.label }), _jsx("code", { children: file.path }), _jsx("span", { className: file.status.includes("D") ? "del" : "add", children: file.status }), _jsx("button", { className: "diff-button", onClick: () => onDiff(file.path), type: "button", children: "\u67E5\u770B\u5DEE\u5F02" })] }, file.path)) : _jsx("div", { className: "empty-state", children: "\u5DE5\u4F5C\u533A\u6CA1\u6709\u672A\u63D0\u4EA4\u6539\u52A8\u3002" }) }), files.length > 0 && _jsxs("div", { className: "file-actions", children: [_jsx("input", { "aria-label": "\u63D0\u4EA4\u8BF4\u660E", onChange: (event) => setMessage(event.target.value), placeholder: "\u63D0\u4EA4\u8BF4\u660E", value: message }), _jsx("button", { className: "primary", disabled: busy || !message.trim(), onClick: commit, type: "button", children: busy ? "处理中…" : "提交这些改动" }), _jsx("button", { disabled: busy, onClick: revert, type: "button", children: "\u5168\u90E8\u64A4\u9500" })] }), error && _jsx("p", { className: "action-error", children: error })] }) }); }
|
|
60
|
+
function Plugins({ plugins, tab, onTab, onToml }) { const groups = useMemo(() => { const map = new Map(); plugins.forEach((plugin) => map.set(capability(plugin.name), [...(map.get(capability(plugin.name)) ?? []), plugin.name])); return map; }, [plugins]); return _jsx("section", { className: "view-panel plugins-view", children: _jsxs("div", { className: "plugins-page", children: [_jsxs("div", { className: "subnav", children: [_jsxs("div", { className: "segmented", children: [_jsx("button", { className: tab === "installed" ? "active" : "", onClick: () => onTab("installed"), type: "button", children: "\u5DF2\u5B89\u88C5" }), _jsx("button", { className: tab === "extensions" ? "active" : "", onClick: () => onTab("extensions"), type: "button", children: "\u6269\u5C55\u70B9" })] }), _jsx("span", { children: "\u8FD0\u884C\u65F6\u63D2\u4EF6\u6E05\u5355" }), _jsx("a", { href: "#", onClick: (event) => { event.preventDefault(); onToml(); }, children: "\u5728 pi.toml \u91CC\u770B\u8FD9\u4EFD\u6E05\u5355" })] }), _jsx("div", { className: "plugins-scroll", children: tab === "installed" ? _jsxs(_Fragment, { children: [_jsx("div", { className: "plugins-list", children: plugins.map((plugin) => _jsx("article", { className: "plugin-card", children: _jsxs("div", { className: "plugin-card-head", children: [_jsx("span", { className: "plugin-icon", children: "\u25C8" }), _jsxs("div", { className: "plugin-copy", children: [_jsxs("div", { className: "plugin-title", children: [_jsx("code", { children: plugin.name }), _jsx("small", { children: plugin.state }), _jsx("span", { className: "capability", children: capability(plugin.name) })] }), _jsx("p", { className: "plugin-description", children: plugin.enabled ? "由当前 Cordis loader 加载并启用,能力与 hook 由运行时注册。" : "由当前 Cordis loader 加载但已停用。" }), _jsxs("div", { className: "hook-list", children: [_jsx("span", { children: "loader" }), _jsx("span", { children: plugin.state === "active" ? "active" : `state:${plugin.state}` })] })] }), _jsx("span", { className: `switch ${plugin.enabled ? "on" : ""}`, children: _jsx("i", {}) })] }) }, plugin.id)) }), _jsxs("div", { className: "plugin-add", children: [_jsx("code", { children: "dsh plugin add" }), _jsx("input", { disabled: true, placeholder: "github:owner/repo" }), _jsx("button", { className: "primary", disabled: true, type: "button", children: "\u5B89\u88C5" })] })] }) : _jsxs(_Fragment, { children: [_jsx("p", { className: "extension-note", children: "\u6BCF\u4E2A\u6269\u5C55\u70B9\u7531\u54EA\u4E9B\u5305\u5360\u7528\uFF0C\u6309 Cordis loader \u7684\u6267\u884C\u987A\u5E8F\u6392\u5217\u3002" }), _jsxs("div", { className: "extension-table", children: [_jsxs("div", { className: "extension-row extension-head", children: [_jsx("span", { children: "\u6269\u5C55\u70B9" }), _jsx("span", { children: "\u5360\u7528\u8005\uFF08\u6309\u5E8F\uFF09" }), _jsx("span", { children: "\u6570\u91CF" })] }), [...groups].map(([point, owners]) => _jsxs("div", { className: "extension-row", children: [_jsx("code", { children: point }), _jsx("div", { className: "extension-owners", children: owners.map((owner) => _jsx("span", { children: owner }, owner)) }), _jsx("code", { children: owners.length })] }, point))] })] }) })] }) }); }
|
|
61
|
+
function Settings({ data, api, tab, onTab, onClose }) { const status = data.status; const [providerState, setProviderState] = useState({}); const runProviderAction = (provider, action) => { setProviderState((current) => ({ ...current, [provider]: action === "test" ? "测试中…" : "刷新中…" })); if (action === "test")
|
|
62
|
+
void api.testProvider(provider).then((result) => setProviderState((current) => ({ ...current, [provider]: result.reachable ? "连接正常" : "未检测到认证" }))).catch((cause) => setProviderState((current) => ({ ...current, [provider]: cause instanceof Error ? cause.message : String(cause) })));
|
|
63
|
+
else
|
|
64
|
+
void api.refreshProvider(provider).then((result) => setProviderState((current) => ({ ...current, [provider]: `${result.models.length} 个模型已刷新` }))).catch((cause) => setProviderState((current) => ({ ...current, [provider]: cause instanceof Error ? cause.message : String(cause) }))); }; return _jsx("div", { className: "settings-overlay", children: _jsxs("div", { className: "settings-dialog", children: [_jsxs("aside", { children: [_jsx("strong", { children: "\u8BBE\u7F6E" }), ["general", "plugins", "providers", "toml"].map((item) => _jsx("button", { className: `settings-tab ${tab === item ? "active" : ""}`, onClick: () => onTab(item), type: "button", children: item === "general" ? "通用" : item === "plugins" ? `插件 ${data.plugins.length}` : item === "providers" ? `提供商 ${data.providers.length}` : "pi.toml" }, item))] }), _jsxs("section", { children: [_jsxs("header", { children: [_jsx("strong", { children: tab === "general" ? "通用" : tab === "plugins" ? "插件" : tab === "providers" ? "提供商" : "pi.toml" }), _jsx("small", { children: tab === "toml" ? "配置即代码,改完重载" : "运行时状态与快捷键" }), _jsx("button", { onClick: onClose, type: "button", children: "\u00D7" })] }), _jsxs("div", { className: "settings-body", children: [tab === "general" && _jsxs(_Fragment, { children: [[["工作目录", status?.cwd], ["agent 目录", status?.agentDir], ["会话", status ? `${status.sessionId} · ${status.messages} 条消息` : "—"], ["快捷键", "⌘K 命令 · ⌘, 设置 · ⌃C 中断"], ["权限策略", "当前 API 未提供修改接口"]].map(([key, item]) => _jsx("div", { className: "general-row", children: _jsxs("div", { children: [_jsx("strong", { children: key }), _jsx("small", { children: value(item) })] }) }, key)), _jsxs("div", { className: "general-row", children: [_jsxs("div", { children: [_jsx("strong", { children: "\u4EFB\u52A1\u7ED3\u675F\u63D0\u9192" }), _jsx("small", { children: "\u7531 runtime \u63D2\u4EF6\u63D0\u4F9B" })] }), _jsx("span", { className: "switch", children: _jsx("i", {}) })] }), _jsxs("div", { className: "general-row", children: [_jsxs("div", { children: [_jsx("strong", { children: "\u81EA\u52A8\u538B\u7F29\u4E0A\u4E0B\u6587" }), _jsx("small", { children: "\u4E8B\u4EF6\u901A\u8FC7 SSE \u5B9E\u65F6\u5237\u65B0" })] }), _jsx("span", { className: "switch on", children: _jsx("i", {}) })] })] }), tab === "plugins" && data.plugins.map((plugin) => _jsxs("div", { className: "settings-plugin-row", children: ["\u25C8 ", _jsxs("code", { children: [plugin.name, " \u00B7 ", plugin.id, " \u00B7 ", plugin.state] })] }, plugin.id)), tab === "providers" && _jsxs(_Fragment, { children: [_jsx("small", { children: "\u8FD0\u884C\u65F6\u6CE8\u518C\u63D0\u4F9B\u5546 \u00B7 /api/providers" }), data.providers.length ? data.providers.map((provider) => _jsxs("article", { className: "provider-card", children: [_jsxs("div", { className: "provider-head", children: [_jsx("span", { className: "provider-dot", children: "\u25CF" }), _jsx("strong", { children: provider.name }), _jsx("span", { className: "provider-state", children: provider.active ? "当前会话" : value(provider.auth?.configured, "未配置") })] }), _jsxs("div", { className: "provider-field", children: [_jsx("code", { children: "provider" }), _jsx("input", { disabled: true, value: provider.provider, readOnly: true })] }), _jsxs("div", { className: "provider-field", children: [_jsx("code", { children: "model" }), _jsx("input", { disabled: true, value: provider.activeModel ? `${provider.activeModel.provider}/${provider.activeModel.id}` : provider.models.map((model) => model.id).join(", "), readOnly: true })] }), _jsxs("div", { className: "provider-field", children: [_jsx("code", { children: "api_key" }), _jsx("input", { disabled: true, value: "\u4E0D\u4F1A\u5728\u6D4F\u89C8\u5668\u663E\u793A", readOnly: true })] }), _jsxs("div", { className: "provider-footer", children: [_jsxs("code", { children: [provider.models.length, " \u4E2A\u6A21\u578B"] }), _jsx("button", { onClick: () => runProviderAction(provider.provider, "test"), type: "button", children: "\u6D4B\u8BD5\u8FDE\u63A5" }), _jsx("button", { className: "link-button", onClick: () => runProviderAction(provider.provider, "refresh"), type: "button", children: "\u62C9\u53D6\u6A21\u578B" })] }), providerState[provider.provider] && _jsx("small", { className: "provider-result", children: providerState[provider.provider] })] }, provider.provider)) : _jsx("div", { className: "empty-state", children: "\u8FD0\u884C\u65F6\u6CA1\u6709\u6CE8\u518C\u63D0\u4F9B\u5546\u3002" })] }), tab === "toml" && _jsxs(_Fragment, { children: [_jsxs("div", { className: "toml-toolbar", children: [_jsx("span", { children: "~/.config/pi/pi.toml" }), _jsx("button", { className: "active", type: "button", children: "\u8868\u5355" }), _jsx("button", { disabled: true, type: "button", children: "\u6E90\u7801" }), _jsx("button", { className: "primary", disabled: true, type: "button", children: "\u91CD\u8F7D" })] }), _jsx("div", { className: "toml", children: _jsx("div", { className: "empty-state", children: "pi.toml \u8BFB\u53D6\u4E0E\u5199\u5165 API \u5C1A\u672A\u63D0\u4F9B\u3002" }) })] })] })] })] }) }); }
|
|
65
|
+
function CommandPalette({ commands, onClose, onUse }) { const [query, setQuery] = useState(""); const visible = commands.filter((command) => `${command.invocationName} ${command.description ?? ""}`.toLowerCase().includes(query.toLowerCase())); return _jsx("div", { className: "command-palette", onClick: (event) => { if (event.target === event.currentTarget)
|
|
66
|
+
onClose(); }, children: _jsxs("div", { className: "palette-dialog", children: [_jsx("input", { autoFocus: true, onChange: (event) => setQuery(event.target.value), placeholder: "\u547D\u4EE4\u3001\u5305\u3001\u4F1A\u8BDD\u3001\u6587\u4EF6", value: query }), _jsxs("div", { className: "palette-group", children: [_jsx("small", { children: "COMMANDS \u00B7 RUNTIME REGISTRY" }), visible.length ? visible.map((command) => { const invocation = `/${command.invocationName}`; return _jsxs("button", { onClick: () => { onUse(invocation); onClose(); }, type: "button", children: [_jsx("code", { children: invocation }), _jsx("span", { children: command.description ?? command.source ?? "由当前运行时注册" })] }, `${command.invocationName}:${command.source ?? "runtime"}`); }) : _jsx("div", { className: "empty-state", children: commands.length ? "没有匹配的命令。" : "当前运行时没有可用的命令注册清单。" })] })] }) }); }
|
|
67
|
+
export function ControlRoomView({ api = createClientApi() }) {
|
|
68
|
+
const [data, setData] = useState({ sessions: [], files: [], models: [], providers: [], plugins: [], commands: [] });
|
|
69
|
+
const [view, setView] = useState("chat");
|
|
70
|
+
const [page, setPage] = useState("session");
|
|
71
|
+
const [pluginTab, setPluginTab] = useState("installed");
|
|
72
|
+
const [settings, setSettings] = useState();
|
|
73
|
+
const [details, setDetails] = useState({});
|
|
74
|
+
const [commandOpen, setCommandOpen] = useState(false);
|
|
75
|
+
const [sessionMenuOpen, setSessionMenuOpen] = useState(false);
|
|
76
|
+
const [draft, setDraft] = useState("");
|
|
77
|
+
const [search, setSearch] = useState("");
|
|
78
|
+
const [permission, setPermission] = useState(true);
|
|
79
|
+
const refresh = useCallback(async () => { const [status, session, sessions, files, models, providers, plugins, commands] = await Promise.allSettled([api.getStatus(), api.getSession(), api.listSessions(), api.getFiles(), api.listModels(), api.listProviders(), api.listPlugins(), api.listCommands()]); setData((current) => ({ status: status.status === "fulfilled" ? status.value : current.status, session: session.status === "fulfilled" ? session.value : current.session, sessions: sessions.status === "fulfilled" ? sessions.value : current.sessions, files: files.status === "fulfilled" ? files.value : current.files, models: models.status === "fulfilled" ? models.value : current.models, providers: providers.status === "fulfilled" ? providers.value : current.providers, plugins: plugins.status === "fulfilled" ? plugins.value : current.plugins, commands: commands.status === "fulfilled" ? commands.value : current.commands })); }, [api]);
|
|
80
|
+
useEffect(() => { void refresh(); const unsubscribe = api.subscribeEvents(() => void refresh()); const timer = window.setInterval(() => void refresh(), 5000); return () => { unsubscribe(); window.clearInterval(timer); }; }, [api, refresh]);
|
|
81
|
+
useEffect(() => { const onKeyDown = (event) => { if (event.key === "Escape") {
|
|
82
|
+
setCommandOpen(false);
|
|
83
|
+
setSessionMenuOpen(false);
|
|
84
|
+
setSettings(undefined);
|
|
85
|
+
} if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "k") {
|
|
86
|
+
event.preventDefault();
|
|
87
|
+
setCommandOpen(true);
|
|
88
|
+
} if ((event.metaKey || event.ctrlKey) && event.key === ",") {
|
|
89
|
+
event.preventDefault();
|
|
90
|
+
setSettings("general");
|
|
91
|
+
} }; window.addEventListener("keydown", onKeyDown); return () => window.removeEventListener("keydown", onKeyDown); }, []);
|
|
92
|
+
const events = data.session?.events ?? [];
|
|
93
|
+
const filteredSessions = data.sessions.filter((session) => !search || value(session.name ?? session.firstMessage, "未命名会话").toLowerCase().includes(search.toLowerCase()));
|
|
94
|
+
const submit = (event) => { event.preventDefault(); const prompt = draft.trim(); if (!prompt)
|
|
95
|
+
return; setDraft(""); void api.prompt(prompt).then(() => refresh()); };
|
|
96
|
+
const openSession = (session) => { const path = typeof session.path === "string" ? session.path : ""; if (path)
|
|
97
|
+
void api.openSession(path).then(refresh); };
|
|
98
|
+
const content = page === "plugins" ? _jsx(Plugins, { plugins: data.plugins, tab: pluginTab, onTab: setPluginTab, onToml: () => setSettings("toml") }) : view === "chat" ? _jsxs("section", { className: "view-panel chat-view", children: [_jsxs("div", { className: "chat-scroll", children: [data.session?.messages.length ? data.session.messages.map((message, index) => _jsx("article", { className: `turn ${message.role === "user" ? "user" : "text"}`, children: message.role === "user" ? _jsx("div", { className: "user-bubble", children: messageText(message) }) : _jsx("p", { className: "turn-text", children: messageText(message) }) }, index)) : _jsx(Workspace, { status: data.status, onCreate: () => void api.createSession().then(refresh), onStarter: setDraft, onToml: () => setSettings("toml") }), events.map((event, index) => _jsx(RuntimeCard, { event: event }, `${value(event.type, "event")}-${index}`))] }), _jsxs("div", { className: "composer-wrap", children: [_jsxs("div", { className: "context-line", children: [_jsxs("span", { children: ["\u4E0A\u4E0B\u6587 ", _jsx("b", { children: data.status ? `${data.status.messages} / ${data.status.model}` : "0 / —" })] }), _jsxs("div", { className: `context-bar ${permission ? "" : "expanded"}`, children: [_jsx("i", {}), _jsx("i", {}), _jsx("i", {})] }), _jsx("button", { onClick: () => setPermission((current) => !current), type: "button", children: permission ? "构成" : "收起" })] }), _jsxs("form", { className: "composer", onSubmit: submit, children: [_jsx("textarea", { "aria-label": "Prompt", onChange: (event) => setDraft(event.target.value), placeholder: "\u63CF\u8FF0\u8981\u505A\u7684\u6539\u52A8\uFF0C\u2318\u21B5 \u53D1\u9001\uFF1B@ \u5F15\u7528\u6587\u4EF6\uFF0C/ \u8C03\u7528\u547D\u4EE4", rows: 2, value: draft }), _jsxs("div", { className: "composer-tools", children: [_jsx("select", { "aria-label": "\u6A21\u578B", value: data.status?.model ?? "", onChange: (event) => { const [provider, model] = event.target.value.split("/"); if (provider && model)
|
|
99
|
+
void api.selectModel(provider, model); }, children: data.models.map((model) => _jsx("option", { value: `${model.provider}/${model.id}`, children: model.name === model.id ? `${model.provider}/${model.id}` : `${model.name} (${model.provider})` }, `${model.provider}/${model.id}`)) }), _jsxs("button", { className: "tool-chip", onClick: () => setPermission((current) => !current), type: "button", children: ["\u25CF ", permission ? "改动前询问" : "自动允许"] }), _jsx("button", { className: "tool-chip", onClick: () => setCommandOpen(true), type: "button", children: "\uFF0F \u547D\u4EE4" }), _jsx("span", { className: "composer-hint", children: "\u2318\u21B5 \u53D1\u9001 \u00B7 \u2318K \u547D\u4EE4 \u00B7 \u2303C \u4E2D\u65AD" }), _jsx("button", { className: "send-button", type: "submit", children: "\u2191" })] })] })] })] }) : view === "trajectory" ? _jsx(Trajectory, { events: events, onSelect: setDetails }) : _jsx(Files, { api: api, files: data.files, onDiff: (file) => void api.getFileDiff(file).then((diff) => setDetails({ type: "file_diff", path: diff.path, output: diff.diff })), onRefresh: () => void refresh() });
|
|
100
|
+
const groups = sessionGroups(filteredSessions);
|
|
101
|
+
return _jsxs("div", { className: "app-frame", children: [_jsxs("aside", { className: "sidebar", children: [_jsxs("header", { className: "brand-row", children: [_jsx("span", { className: "pi-mark", children: "\u03C0" }), _jsx("strong", { children: "pi harness" }), _jsx("span", { className: "version", children: "0.9.4" })] }), _jsxs("div", { className: "sidebar-actions", children: [_jsx("button", { className: "new-session", onClick: () => void api.createSession().then(refresh), type: "button", children: "\uFF0B \u65B0\u5EFA\u4F1A\u8BDD" }), _jsx("input", { onChange: (event) => setSearch(event.target.value), placeholder: "\u641C\u7D22\u4F1A\u8BDD\u4E0E\u4E8B\u4EF6", type: "search", value: search })] }), _jsx("div", { className: "sidebar-scroll", children: groups.length ? groups.map(([label, sessions]) => _jsxs("div", { className: "session-group", children: [_jsx("div", { className: "group-label", children: label }), sessions.map((session, index) => _jsxs("button", { className: `session-row ${session.sessionId === data.session?.sessionId ? "active" : ""}`, onClick: () => openSession(session), type: "button", children: [_jsx("span", { className: "session-dot ok" }), _jsxs("span", { className: "session-copy", children: [_jsx("strong", { children: value(session.name ?? session.firstMessage, "未命名会话") }), _jsxs("small", { children: [value(session.messageCount, "0"), " \u6761\u6D88\u606F"] })] })] }, index))] }, label)) : _jsx("div", { className: "empty-state", children: "\u6682\u65E0\u5DF2\u4FDD\u5B58\u4F1A\u8BDD" }) }), _jsxs("footer", { className: "sidebar-footer", children: [_jsxs("div", { className: "runtime-cells", children: [_jsxs("span", { children: ["model ", _jsx("b", { children: value(data.status?.model) })] }), _jsxs("span", { children: ["msgs ", _jsx("b", { children: data.status?.messages ?? 0 })] }), _jsxs("span", { children: ["status ", _jsx("b", { children: value(data.status?.status, "connecting") })] })] }), _jsxs("button", { className: `sidebar-link ${page === "plugins" ? "active" : ""}`, onClick: () => { setPage("plugins"); setSettings(undefined); }, type: "button", children: ["\u25C8 ", _jsx("span", { children: "\u63D2\u4EF6" }), _jsx("b", { children: data.plugins.length })] }), _jsxs("button", { className: "sidebar-link", onClick: () => setSettings("general"), type: "button", children: ["\u2699 ", _jsx("span", { children: "\u8BBE\u7F6E" })] }), _jsxs("button", { className: "sidebar-link", onClick: () => setCommandOpen(true), type: "button", children: [_jsx("span", { className: "link-glyph", children: "\u2318" }), _jsx("span", { children: "\u547D\u4EE4\u9762\u677F" }), _jsx("small", { children: "\u2318K" })] })] })] }), _jsxs("section", { className: "main-pane", children: [_jsxs("header", { className: "main-header", children: [_jsxs("div", { className: "active-heading", children: [_jsx("strong", { children: page === "plugins" ? "插件" : data.session?.messages.length ? data.session.sessionId.slice(0, 12) : "新会话" }), _jsx("small", { children: page === "plugins" ? "Cordis loader 运行时清单" : data.session?.sessionFile ?? "未选择工作区" })] }), _jsx("div", { className: "header-spacer" }), _jsxs("div", { className: "run-indicator", children: ["\u25CF ", data.status?.status === "running" ? "running · Pi agent" : "idle"] }), _jsx("button", { className: "stop-button", disabled: data.status?.status !== "running", onClick: () => void api.abort().then(refresh), type: "button", children: "\u505C\u6B62" }), page === "session" && _jsx("div", { className: "view-tabs", children: ["chat", "trajectory", "files"].map((item) => _jsx("button", { className: `view-tab ${view === item ? "active" : ""}`, onClick: () => setView(item), type: "button", children: item === "chat" ? "对话" : item === "trajectory" ? "轨迹" : "产出" }, item)) }), _jsx("button", { className: "session-menu", onClick: () => setSessionMenuOpen((current) => !current), type: "button", "aria-label": "\u4F1A\u8BDD\u64CD\u4F5C", children: "\u22EF" }), _jsx("button", { className: "details-toggle", onClick: () => setDetails(details ? undefined : {}), type: "button", children: "\u25E8 \u8BE6\u60C5" }), _jsx("span", { className: `status-pill ${data.status?.status === "running" ? "running" : "online"}`, children: value(data.status?.status, "connecting") }), sessionMenuOpen && _jsxs("div", { className: "session-menu-popover", children: [_jsxs("button", { className: "session-action", onClick: () => void api.createSession().then(refresh), type: "button", children: [_jsx("strong", { children: "\u65B0\u5EFA\u4F1A\u8BDD" }), _jsx("small", { children: "\u6E05\u7A7A\u5E76\u5F00\u59CB\u65B0\u7684\u8FD0\u884C\u65F6\u4F1A\u8BDD" })] }), _jsxs("button", { className: "session-action", onClick: () => window.location.reload(), type: "button", children: [_jsx("strong", { children: "\u5237\u65B0\u4F1A\u8BDD" }), _jsx("small", { children: "\u91CD\u65B0\u8BFB\u53D6\u8FD0\u884C\u65F6\u72B6\u6001" })] }), _jsxs("button", { className: "session-action", disabled: true, type: "button", children: [_jsx("strong", { children: "\u5BFC\u51FA\u4E8B\u4EF6" }), _jsx("small", { children: "API \u6682\u672A\u63D0\u4F9B\u5BFC\u51FA\u63A5\u53E3" })] }), _jsxs("button", { className: "session-action", disabled: true, type: "button", children: [_jsx("strong", { children: "\u5220\u9664\u4F1A\u8BDD" }), _jsx("small", { children: "API \u6682\u672A\u63D0\u4F9B\u5220\u9664\u63A5\u53E3" })] })] })] }), _jsx("div", { className: "view-host", children: content })] }), details !== undefined && _jsx(Details, { event: Object.keys(details).length ? details : undefined, onClose: () => setDetails(undefined), onCopy: () => void navigator.clipboard?.writeText(JSON.stringify(details, null, 2)) }), settings && _jsx(Settings, { api: api, data: data, tab: settings, onTab: setSettings, onClose: () => setSettings(undefined) }), commandOpen && _jsx(CommandPalette, { commands: data.commands, onClose: () => setCommandOpen(false), onUse: setDraft })] });
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=react-room.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-room.js","sourceRoot":"","sources":["../src/react-room.tsx"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pi-harness/client-web",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Browser-side Cordis client plugins for the Pi Harness web surface",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=22.19.0"
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc -p tsconfig.build.json",
|
|
22
|
+
"typecheck": "tsc -p tsconfig.json"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@deepseek-ai/cordis": "4.0.1",
|
|
26
|
+
"react": "^19.1.1",
|
|
27
|
+
"react-dom": "^19.1.1"
|
|
28
|
+
}
|
|
29
|
+
}
|