@bf-meishijian/aip 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +19 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +34 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/coding-run-manager.d.ts +76 -0
  6. package/dist/coding-run-manager.d.ts.map +1 -0
  7. package/dist/coding-run-manager.js +1090 -0
  8. package/dist/coding-run-manager.js.map +1 -0
  9. package/dist/daemon.d.ts +6 -0
  10. package/dist/daemon.d.ts.map +1 -1
  11. package/dist/daemon.js +58 -7
  12. package/dist/daemon.js.map +1 -1
  13. package/dist/delivery-files.d.ts +32 -0
  14. package/dist/delivery-files.d.ts.map +1 -0
  15. package/dist/delivery-files.js +100 -0
  16. package/dist/delivery-files.js.map +1 -0
  17. package/dist/diagnostics.js +1 -1
  18. package/dist/diagnostics.js.map +1 -1
  19. package/dist/installer.d.ts.map +1 -1
  20. package/dist/installer.js +3 -2
  21. package/dist/installer.js.map +1 -1
  22. package/dist/live-employee.d.ts +21 -0
  23. package/dist/live-employee.d.ts.map +1 -0
  24. package/dist/live-employee.js +184 -0
  25. package/dist/live-employee.js.map +1 -0
  26. package/dist/merge-requests.d.ts +48 -0
  27. package/dist/merge-requests.d.ts.map +1 -0
  28. package/dist/merge-requests.js +172 -0
  29. package/dist/merge-requests.js.map +1 -0
  30. package/dist/paths.d.ts +5 -0
  31. package/dist/paths.d.ts.map +1 -1
  32. package/dist/paths.js +5 -0
  33. package/dist/paths.js.map +1 -1
  34. package/dist/pi-model-service.d.ts +24 -9
  35. package/dist/pi-model-service.d.ts.map +1 -1
  36. package/dist/pi-model-service.js +104 -3
  37. package/dist/pi-model-service.js.map +1 -1
  38. package/dist/platform-client.d.ts +47 -0
  39. package/dist/platform-client.d.ts.map +1 -1
  40. package/dist/platform-client.js +51 -0
  41. package/dist/platform-client.js.map +1 -1
  42. package/dist/state.d.ts +2 -2
  43. package/dist/state.js +2 -2
  44. package/package.json +8 -6
@@ -0,0 +1,184 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, realpath, rename, rm, writeFile } from "node:fs/promises";
3
+ import { isAbsolute, join, relative, resolve } from "node:path";
4
+ import { createReadToolDefinition, } from "@earendil-works/pi-coding-agent";
5
+ import { Type } from "typebox";
6
+ export const TEAM_AGENTS = {
7
+ developer: "platform-developer",
8
+ reviewer: "platform-reviewer",
9
+ tester: "platform-tester",
10
+ };
11
+ export const TEAM_COLLABORATION_SEQUENCE = "主管根据员工与阶段配置自主安排工作;如实记录完成情况、未覆盖项和遗留问题,不编造通过结论。平台只检查必需产物与安全边界,不指定派发顺序、执行人或 PASS 组合。";
12
+ const SAFETY = "以当前 Run 工作区为工作目录,操作本工单相关代码、依赖与已授权环境资源。正常 Git 命令可通过工作区的 .git 引用访问平台管理的共享仓库元数据,这不授予操作其他工单工作区或扫描主目录、个人目录的权限;无法执行时明确反馈阻塞,不虚构结果。Skill 为工作材料,不授予工具或资源权限。";
13
+ const SKILL_FILE_UNAVAILABLE = "EMPLOYEE_SKILL_FILE_UNAVAILABLE:读取失败,未加载正文。请使用你自己当前 Skill 目录中的完整路径重试,不要沿用主管或其他成员的绝对路径;若文件已移除或未绑定,不得把此错误当作资料正文。";
14
+ export function employeePrompt(config, locations, team = true, phase = "DEVELOPMENT", release = false) {
15
+ return `${config.agent.systemPrompt}\n\n固定职责:${config.member}。${SAFETY}\n${config.member === "supervisor" ? (!team ? `你是本工单唯一执行者,自主完成当前阶段并整理交付产物,不调用 subagent 或 submit_member_result。协作建议:${config.collaborationInstructions}` : `你是团队主管,根据任务选择 subagent 工具列出的实际绑定员工协作,也可以自行完成,自主安排执行顺序。当前阶段完成工具:${release ? "submit_pull_requests" : phase === "DEVELOPMENT" ? "complete_development" : "submit_delivery"}。协作建议:${config.collaborationInstructions}`) : `按主管派发的任务与自身能力工作,如实返回结果、未完成事项及原因;完成后调用 submit_member_result 向主管汇报。成员结论不代替人工验收。`}\n\n当前绑定技能目录(仅元数据,使用前通过 read 读取 SKILL.md,然后按需读取包内引用):\n${config.agent.skills
16
+ .filter((file) => file.path === "SKILL.md")
17
+ .map((file) => `${file.name}:${file.description ?? ""}\nSKILL.md:${locations.get(`${file.id}:${file.path}`)}`)
18
+ .join("\n") || "无"} `;
19
+ }
20
+ export function liveEmployee(client, runId, binding, initial, runRoot, team = true, release = false, phase = "DEVELOPMENT", isClosing = () => false) {
21
+ let current = initial;
22
+ let locations = new Map();
23
+ const required = binding.member === "supervisor"
24
+ ? [
25
+ ...(!release && team ? ["subagent"] : []),
26
+ release
27
+ ? "submit_pull_requests"
28
+ : phase === "DEVELOPMENT"
29
+ ? "complete_development"
30
+ : "submit_delivery",
31
+ ...(release ? ["request_code_changes"] : []),
32
+ "update_question",
33
+ "report_blocker",
34
+ ]
35
+ : ["submit_member_result"];
36
+ let refreshTail = Promise.resolve();
37
+ const read = (purpose = "MODEL", file) => {
38
+ const result = refreshTail.then(async () => {
39
+ current = await client.employeeConfig(runId, { ...binding, purpose, ...file });
40
+ const nextLocations = skillLocations(runRoot, binding.member, current.agent.skills);
41
+ for (const [key, path] of locations)
42
+ if (!nextLocations.has(key))
43
+ await rm(path, { force: true });
44
+ locations = nextLocations;
45
+ if (purpose === "SKILL_READ")
46
+ await materializeSkills(runRoot, binding.member, current.agent.skills);
47
+ return current;
48
+ });
49
+ refreshTail = result.then(() => undefined, () => undefined);
50
+ return result;
51
+ };
52
+ const prompt = () => release
53
+ ? `${employeePrompt(current, locations, team, phase, true)}\n当前是上线准备:读取测试交接和最新分支代码,核实并更新上线清单后调用 submit_pull_requests;不以 commit 或 tree hash 作门禁。用户明确要求应用代码修改时调用 request_code_changes 返回开发,文档更新或讨论无需退回。不执行实际发布、知识整理和关单。`
54
+ : employeePrompt(current, locations, team, phase);
55
+ const extension = (api) => {
56
+ const nativeRead = createReadToolDefinition(runRoot);
57
+ api.registerTool({
58
+ ...nativeRead,
59
+ async execute(id, args, signal, onUpdate, context) {
60
+ await read("TOOL");
61
+ if (!current.agent.enabledTools.includes("read"))
62
+ throw new Error("EMPLOYEE_TOOL_DISABLED");
63
+ const absolute = resolve(context.cwd, args.path);
64
+ const resourceRoot = join(runRoot, ".aip-resources");
65
+ const nested = relative(resourceRoot, absolute);
66
+ const managed = !nested.startsWith("..") && !isAbsolute(nested);
67
+ if (!managed)
68
+ return createReadToolDefinition(context.cwd).execute(id, args, signal, onUpdate, context);
69
+ const metadata = current.agent.skills.find((candidate) => locations.get(`${candidate.id}:${candidate.path}`) === absolute);
70
+ if (!metadata)
71
+ throw new Error(SKILL_FILE_UNAVAILABLE);
72
+ const loaded = await read("SKILL_READ", { skillId: metadata.id, skillPath: metadata.path });
73
+ const file = loaded.agent.skills.find((candidate) => candidate.id === metadata.id && candidate.path === metadata.path);
74
+ if (typeof file?.content !== "string")
75
+ throw new Error(SKILL_FILE_UNAVAILABLE);
76
+ // Managed text reads always return the current complete file, including repeated explicit reads.
77
+ return {
78
+ content: [{ type: "text", text: file.content }],
79
+ details: {
80
+ skillFile: {
81
+ skillId: file.id,
82
+ path: file.path,
83
+ contentHash: contentHash(file.content),
84
+ },
85
+ },
86
+ };
87
+ },
88
+ });
89
+ for (const definition of initial.toolDefinitions)
90
+ api.registerTool({
91
+ name: definition.name,
92
+ label: definition.name,
93
+ description: definition.description,
94
+ parameters: Type.Unsafe(JSON.parse(definition.parametersJson)),
95
+ async execute(_id, args) {
96
+ const result = await client.employeeTool(runId, {
97
+ ...binding,
98
+ toolName: definition.name,
99
+ arguments: args,
100
+ });
101
+ return { content: [{ type: "text", text: result.content }], details: {} };
102
+ },
103
+ });
104
+ api.on("before_agent_start", async () => {
105
+ const config = await read();
106
+ api.setActiveTools([...config.agent.enabledTools, ...required]);
107
+ return { systemPrompt: prompt() };
108
+ });
109
+ api.on("tool_call", async (event) => {
110
+ if (isClosing())
111
+ return { block: true, reason: "本阶段已交付,仅可完成文字回复。" };
112
+ const config = await read("TOOL");
113
+ if (!required.includes(event.toolName) && !config.agent.enabledTools.includes(event.toolName))
114
+ return { block: true, reason: "EMPLOYEE_TOOL_DISABLED:当前员工已禁用此工具" };
115
+ return undefined;
116
+ });
117
+ };
118
+ function attach(session) {
119
+ const original = session.agent.prepareNextTurnWithContext;
120
+ session.agent.prepareNextTurnWithContext = async (turn, signal) => {
121
+ const prior = await original?.(turn, signal);
122
+ if (isClosing()) {
123
+ session.setActiveToolsByName([]);
124
+ return { ...prior, context: { ...(prior?.context ?? turn.context), tools: [] } };
125
+ }
126
+ const config = await read();
127
+ session.setActiveToolsByName([...config.agent.enabledTools, ...required]);
128
+ const systemPrompt = prompt();
129
+ session.sessionManager.appendCustomEntry("employee-skill-model", {
130
+ employeeId: config.agent.id,
131
+ member: binding.member,
132
+ configRevision: config.agent.revision,
133
+ systemPrompt, // Metadata only; explicit read content and hashes stay in ToolResult.details.
134
+ });
135
+ return {
136
+ ...prior,
137
+ context: {
138
+ ...(prior?.context ?? turn.context),
139
+ systemPrompt,
140
+ tools: session.agent.state.tools.slice(),
141
+ },
142
+ };
143
+ };
144
+ }
145
+ return { extension, attach };
146
+ }
147
+ const contentHash = (content) => createHash("sha256").update(content).digest("hex");
148
+ function skillLocations(runRoot, member, files) {
149
+ return new Map(files.map((file) => {
150
+ if (!/^[a-z0-9-]+$/iu.test(file.id) ||
151
+ isAbsolute(file.path) ||
152
+ file.path.split(/[\\/]/u).some((part) => part === ".." || part === "." || part === ""))
153
+ throw Error("SKILL_RESOURCE_PATH_FORBIDDEN");
154
+ return [
155
+ `${file.id}:${file.path}`,
156
+ resolve(runRoot, ".aip-resources", member, "skills", file.id, file.path),
157
+ ];
158
+ }));
159
+ }
160
+ async function materializeSkills(runRoot, member, files) {
161
+ const base = join(runRoot, ".aip-resources", member, "skills");
162
+ await mkdir(base, { recursive: true, mode: 0o700 });
163
+ const realBase = await realpath(base), realRun = await realpath(runRoot);
164
+ if (relative(realRun, realBase).startsWith("..") || isAbsolute(relative(realRun, realBase)))
165
+ throw Error("SKILL_RESOURCE_PATH_FORBIDDEN");
166
+ for (const file of files) {
167
+ if (typeof file.content !== "string")
168
+ continue;
169
+ if (!/^[a-z0-9-]+$/iu.test(file.id) ||
170
+ isAbsolute(file.path) ||
171
+ file.path.split(/[\\/]/u).some((part) => part === ".." || part === "." || part === ""))
172
+ throw Error("SKILL_RESOURCE_PATH_FORBIDDEN");
173
+ const target = resolve(base, file.id, file.path);
174
+ await mkdir(join(target, ".."), { recursive: true, mode: 0o700 });
175
+ const parent = await realpath(join(target, ".."));
176
+ if (relative(realBase, parent).startsWith("..") || isAbsolute(relative(realBase, parent)))
177
+ throw Error("SKILL_RESOURCE_PATH_FORBIDDEN");
178
+ const temporary = `${target}.aip-next`;
179
+ await rm(temporary, { force: true });
180
+ await writeFile(temporary, file.content, { mode: 0o600, flag: "wx" });
181
+ await rename(temporary, target);
182
+ }
183
+ }
184
+ //# sourceMappingURL=live-employee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-employee.js","sourceRoot":"","sources":["../src/live-employee.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { PlatformClient } from "./platform-client.js";
2
+ export interface MergeRequestProject {
3
+ id: string;
4
+ name: string;
5
+ repositoryUrl: string;
6
+ devBranch: string;
7
+ baselineBranch: string;
8
+ }
9
+ export interface MergeRequestContext {
10
+ runId: string;
11
+ turnId: string;
12
+ workItem: {
13
+ id: string;
14
+ key: string;
15
+ title: string;
16
+ };
17
+ projects: MergeRequestProject[];
18
+ primaryProjectId: string;
19
+ }
20
+ export interface MergeRequestRegistration {
21
+ projectId: string;
22
+ sourceBranch: string;
23
+ targetBranch: string;
24
+ mrIid: number | null;
25
+ url: string | null;
26
+ noChanges: boolean;
27
+ }
28
+ export type GitLabApi = <T>(endpoint: string, method?: string, fields?: Record<string, string>) => Promise<T>;
29
+ export declare function gitLabApi(repositoryUrl: string, cwd: string): GitLabApi;
30
+ export declare function prepareMergeRequest(options: {
31
+ project: MergeRequestProject;
32
+ cwd: string;
33
+ title: string;
34
+ description: string;
35
+ pendingFile: string;
36
+ iid?: number | undefined;
37
+ api?: GitLabApi;
38
+ push?: () => Promise<void>;
39
+ }): Promise<MergeRequestRegistration>;
40
+ export declare function registerMergeRequest(client: PlatformClient, context: MergeRequestContext, host: {
41
+ hostId: string;
42
+ generation: number;
43
+ }, project: MergeRequestRegistration, pendingFile: string): Promise<void>;
44
+ export declare function findMergeRequestContext(workItem: string, project: string): Promise<{
45
+ context: MergeRequestContext;
46
+ project: MergeRequestProject;
47
+ }>;
48
+ //# sourceMappingURL=merge-requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-requests.d.ts","sourceRoot":"","sources":["../src/merge-requests.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AACD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AACD,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAUD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC5B,OAAO,CAAC,CAAC,CAAC,CAAC;AAIhB,wBAAgB,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CA6BvE;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IACjD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA2GpC;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAC5C,OAAO,EAAE,wBAAwB,EACjC,WAAW,EAAE,MAAM,iBAkBpB;AAED,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;aAC1C,mBAAmB;aAAW,mBAAmB;GAcrF"}
@@ -0,0 +1,172 @@
1
+ import { execFile } from "node:child_process";
2
+ import { readdir, unlink } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { promisify } from "node:util";
5
+ import { paths } from "./paths.js";
6
+ import { readJson, writeSecureJson } from "./secure-json.js";
7
+ const exec = promisify(execFile);
8
+ // glab owns credential lookup (local auth/keyring or its documented environment variables).
9
+ // Never request the platform's GitLab write token or export credentials to the agent.
10
+ export function gitLabApi(repositoryUrl, cwd) {
11
+ const parsed = new URL(repositoryUrl.replace(/^git@([^:]+):/u, "ssh://git@$1/"));
12
+ const projectPath = parsed.pathname.replace(/^\//u, "").replace(/\.git$/u, "");
13
+ if (!projectPath || !parsed.hostname)
14
+ throw new Error("AIP_MR_REPOSITORY_INVALID");
15
+ return async (endpoint, method = "GET", fields = {}) => {
16
+ const args = [
17
+ "api",
18
+ `projects/${encodeURIComponent(projectPath)}/${endpoint}`,
19
+ "--hostname",
20
+ parsed.host,
21
+ "--method",
22
+ method,
23
+ ];
24
+ for (const [key, value] of Object.entries(fields))
25
+ args.push("--raw-field", `${key}=${value}`);
26
+ try {
27
+ const { stdout } = await exec("glab", args, {
28
+ cwd,
29
+ timeout: 60000,
30
+ maxBuffer: 8 * 1024 * 1024,
31
+ });
32
+ return JSON.parse(stdout);
33
+ }
34
+ catch (error) {
35
+ if (error.code === "ENOENT")
36
+ throw new Error("AIP_MR_GLAB_MISSING:请在 Runtime 安装并登录 GitLab CLI glab");
37
+ throw new Error("AIP_MR_GITLAB_FAILED:Runtime GitLab 请求失败,请检查本机 glab 登录、权限和网络");
38
+ }
39
+ };
40
+ }
41
+ export async function prepareMergeRequest(options) {
42
+ const { project, cwd } = options;
43
+ if (!project.devBranch || !project.baselineBranch || project.devBranch === project.baselineBranch)
44
+ throw new Error("AIP_MR_BRANCHES_INVALID");
45
+ const api = options.api ?? gitLabApi(project.repositoryUrl, cwd);
46
+ const registration = (mr) => {
47
+ if (mr.source_project_id !== mr.target_project_id ||
48
+ mr.source_branch !== project.devBranch ||
49
+ mr.target_branch !== project.baselineBranch)
50
+ throw new Error("AIP_MR_BRANCH_MISMATCH");
51
+ return {
52
+ projectId: project.id,
53
+ sourceBranch: mr.source_branch,
54
+ targetBranch: mr.target_branch,
55
+ mrIid: mr.iid,
56
+ url: mr.web_url.replace(/^http:/u, "https:"),
57
+ noChanges: false,
58
+ };
59
+ };
60
+ // A successful creation survives platform registration failure, even if the MR has
61
+ // subsequently merged or closed. Retrying registration must not create another MR.
62
+ const pending = await readJson(options.pendingFile);
63
+ if (pending) {
64
+ if (pending.projectId !== project.id ||
65
+ pending.sourceBranch !== project.devBranch ||
66
+ pending.targetBranch !== project.baselineBranch)
67
+ throw new Error("AIP_MR_PENDING_CONTEXT_MISMATCH");
68
+ return pending;
69
+ }
70
+ if (options.iid !== undefined) {
71
+ if (!Number.isSafeInteger(options.iid) || options.iid <= 0)
72
+ throw new Error("AIP_MR_IID_INVALID");
73
+ const result = registration(await api(`merge_requests/${options.iid}`));
74
+ await writeSecureJson(options.pendingFile, result);
75
+ return result;
76
+ }
77
+ await (options.push ??
78
+ (async () => {
79
+ const branch = (await exec("git", ["branch", "--show-current"], { cwd })).stdout.trim();
80
+ if (branch !== project.devBranch)
81
+ throw new Error("AIP_MR_SOURCE_BRANCH_MISMATCH");
82
+ await exec("git", [
83
+ "-c",
84
+ "remote.origin.mirror=false",
85
+ "push",
86
+ "origin",
87
+ `refs/heads/${project.devBranch}:refs/heads/${project.devBranch}`,
88
+ ], { cwd, timeout: 60000 });
89
+ }))();
90
+ const query = new URLSearchParams({
91
+ state: "all",
92
+ order_by: "created_at",
93
+ sort: "desc",
94
+ source_branch: project.devBranch,
95
+ target_branch: project.baselineBranch,
96
+ scope: "all",
97
+ });
98
+ const existing = await api(`merge_requests?${query}`);
99
+ let mr = existing.find((item) => item.source_project_id === item.target_project_id &&
100
+ ["opened", "locked"].includes(item.state));
101
+ if (!mr) {
102
+ const comparison = await api(`repository/compare?${new URLSearchParams({ from: project.baselineBranch, to: project.devBranch })}`);
103
+ if (comparison.compare_timeout || !Array.isArray(comparison.diffs))
104
+ throw new Error("AIP_MR_COMPARE_INCOMPLETE");
105
+ if (!comparison.diffs.length) {
106
+ const merged = existing.find((item) => item.state === "merged");
107
+ if (merged) {
108
+ const result = registration(merged);
109
+ await writeSecureJson(options.pendingFile, result);
110
+ return result;
111
+ }
112
+ return {
113
+ projectId: project.id,
114
+ sourceBranch: project.devBranch,
115
+ targetBranch: project.baselineBranch,
116
+ mrIid: null,
117
+ url: null,
118
+ noChanges: true,
119
+ };
120
+ }
121
+ if (!options.description.trim())
122
+ throw new Error("AIP_MR_DESCRIPTION_REQUIRED");
123
+ const previous = existing.find((item) => item.state === "closed");
124
+ mr = await api("merge_requests", "POST", {
125
+ source_branch: project.devBranch,
126
+ target_branch: project.baselineBranch,
127
+ title: options.title,
128
+ description: `${options.description}${previous ? `\n\n此前关闭的 MR:${previous.web_url}` : ""}`,
129
+ remove_source_branch: "false",
130
+ });
131
+ }
132
+ const result = registration(mr);
133
+ await writeSecureJson(options.pendingFile, result);
134
+ return result;
135
+ }
136
+ export async function registerMergeRequest(client, context, host, project, pendingFile) {
137
+ try {
138
+ await client.submitPullRequests(context.runId, {
139
+ hostId: host.hostId,
140
+ generation: host.generation,
141
+ turnId: context.turnId,
142
+ workItemId: context.workItem.id,
143
+ projects: [project],
144
+ });
145
+ }
146
+ catch {
147
+ throw new Error(`AIP_MR_REGISTRATION_PENDING:${project.mrIid ? `MR !${project.mrIid} 已创建或复用` : "无需 MR 结果已核实"},平台登记待重试;重试同一命令,不要再次创建 MR`);
148
+ }
149
+ await unlink(pendingFile).catch((error) => {
150
+ if (error.code !== "ENOENT")
151
+ throw error;
152
+ });
153
+ }
154
+ export async function findMergeRequestContext(workItem, project) {
155
+ const candidates = [];
156
+ for (const name of await readdir(paths().runState).catch(() => [])) {
157
+ if (!name.endsWith(".json"))
158
+ continue;
159
+ const state = await readJson(join(paths().runState, name));
160
+ const context = state?.mrContext;
161
+ if (!context || (context.workItem.key !== workItem && context.workItem.id !== workItem))
162
+ continue;
163
+ for (const item of context.projects)
164
+ if (item.id === project || item.name === project)
165
+ candidates.push({ context, project: item });
166
+ }
167
+ const candidate = candidates[0];
168
+ if (candidates.length !== 1 || !candidate)
169
+ throw new Error("AIP_MR_CONTEXT_NOT_UNIQUE:请使用当前 Runtime 已接收的唯一工单与项目");
170
+ return candidate;
171
+ }
172
+ //# sourceMappingURL=merge-requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-requests.js","sourceRoot":"","sources":["../src/merge-requests.ts"],"names":[],"mappings":"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"}
package/dist/paths.d.ts CHANGED
@@ -9,6 +9,11 @@ export declare function paths(): {
9
9
  hostState: string;
10
10
  daemonState: string;
11
11
  workspaceRoot: string;
12
+ repositoryCache: string;
13
+ runWorktrees: string;
14
+ piAgent: string;
15
+ piSessions: string;
16
+ runState: string;
12
17
  runtime: string;
13
18
  runtimeCurrent: string;
14
19
  log: string;
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,WAEtB;AAED,wBAAgB,KAAK;;;;;;;;;;;;;EAgBpB"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,WAEtB;AAED,wBAAgB,KAAK;;;;;;;;;;;;;;;;;;EAqBpB"}
package/dist/paths.js CHANGED
@@ -15,6 +15,11 @@ export function paths() {
15
15
  hostState: join(root, "state", "host.json"),
16
16
  daemonState: join(root, "state", "daemon.json"),
17
17
  workspaceRoot: join(root, "workspaces"),
18
+ repositoryCache: join(root, "workspaces", "repos"),
19
+ runWorktrees: join(root, "workspaces", "runs"),
20
+ piAgent: join(root, "pi"),
21
+ piSessions: join(root, "pi", "sessions"),
22
+ runState: join(root, "state", "runs"),
18
23
  runtime: join(root, "runtime"),
19
24
  runtimeCurrent: join(root, "runtime", "current"),
20
25
  log: join(root, "logs", "host.log"),
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,OAAO;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,OAAO;QACL,IAAI;QACJ,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9E,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC;QAC1C,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;QAC3C,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC;QAClD,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC;QAC3C,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC;QAC/C,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;QACvC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC9B,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;QAChD,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC;KACpC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,OAAO;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,OAAO;QACL,IAAI;QACJ,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9E,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC;QAC1C,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;QAC3C,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC;QAClD,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC;QAC3C,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC;QAC/C,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;QACvC,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC;QAClD,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC;QAC9C,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;QACzB,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC;QACxC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC;QACrC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC9B,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;QAChD,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC;KACpC,CAAC;AACJ,CAAC"}
@@ -1,9 +1,16 @@
1
- import type { LocalCodingHostDefaultRunConfig, LocalCodingHostModel, LocalCodingHostProviderId, LocalCodingHostProviderStatus, LocalCodingHostThinkingLevel } from "@ai-platform/api-contracts";
1
+ import type { components, LocalCodingHostDefaultRunConfig, LocalCodingHostModel, LocalCodingHostProviderId, LocalCodingHostProviderStatus, LocalCodingHostThinkingLevel } from "@ai-platform/api-contracts";
2
+ import { ModelRuntime } from "@earendil-works/pi-coding-agent";
2
3
  export interface ProviderState {
3
4
  providerId: LocalCodingHostProviderId;
4
5
  status: LocalCodingHostProviderStatus;
5
6
  accountHint: string | null;
6
7
  }
8
+ export interface RuntimeModelBinding {
9
+ runId: string;
10
+ turnId: string;
11
+ hostId: string;
12
+ generation: number;
13
+ }
7
14
  export interface PiModelService {
8
15
  login(providerId: LocalCodingHostProviderId, mode: "local" | "remote"): Promise<{
9
16
  code: string;
@@ -11,6 +18,10 @@ export interface PiModelService {
11
18
  logout(providerId: LocalCodingHostProviderId): Promise<void>;
12
19
  readProviderStates(): Promise<ProviderState[]>;
13
20
  readAvailableModels(): Promise<LocalCodingHostModel[]>;
21
+ resolveRuntimeModel?(providerId: LocalCodingHostProviderId, modelId: string, binding?: RuntimeModelBinding): Promise<{
22
+ runtime: ModelRuntime;
23
+ model: Awaited<ReturnType<ModelRuntime["getAvailable"]>>[number];
24
+ }>;
14
25
  }
15
26
  export declare class ProductionPiModelService implements PiModelService {
16
27
  private runtime;
@@ -18,18 +29,21 @@ export declare class ProductionPiModelService implements PiModelService {
18
29
  code: string;
19
30
  }>;
20
31
  logout(providerId: LocalCodingHostProviderId): Promise<void>;
21
- readProviderStates(): Promise<{
22
- providerId: "openai-codex" | "anthropic";
23
- status: "SIGNED_OUT" | "AUTHENTICATING" | "READY" | "EXPIRED" | "ERROR";
24
- accountHint: string | null;
25
- }[]>;
32
+ private readLocalProviderStates;
33
+ private platformModels;
34
+ readProviderStates(): Promise<ProviderState[]>;
26
35
  readAvailableModels(): Promise<{
27
36
  providerId: LocalCodingHostProviderId;
28
37
  modelId: string;
29
38
  displayName: string;
30
39
  reasoning: boolean;
40
+ supportsImages: boolean;
31
41
  allowedThinkingLevels: LocalCodingHostThinkingLevel[];
32
42
  }[]>;
43
+ resolveRuntimeModel(providerId: LocalCodingHostProviderId, modelId: string, binding?: RuntimeModelBinding): Promise<{
44
+ runtime: ModelRuntime;
45
+ model: import("@earendil-works/pi-ai").Model<import("@earendil-works/pi-ai").Api>;
46
+ }>;
33
47
  }
34
48
  export declare class TestPiModelService implements PiModelService {
35
49
  login(providerId: LocalCodingHostProviderId): Promise<{
@@ -38,15 +52,16 @@ export declare class TestPiModelService implements PiModelService {
38
52
  logout(providerId: LocalCodingHostProviderId): Promise<void>;
39
53
  readProviderStates(): Promise<{
40
54
  providerId: "openai-codex" | "anthropic";
41
- status: "SIGNED_OUT" | "AUTHENTICATING" | "READY" | "EXPIRED" | "ERROR";
55
+ status: "READY" | "SIGNED_OUT" | "AUTHENTICATING" | "EXPIRED" | "ERROR";
42
56
  accountHint: string | null;
43
57
  }[]>;
44
58
  readAvailableModels(): Promise<{
45
- providerId: import("@ai-platform/api-contracts").components["schemas"]["LocalCodingHostProviderId"];
59
+ supportsImages?: boolean;
60
+ providerId: components["schemas"]["LocalCodingHostProviderId"];
46
61
  modelId: string;
47
62
  displayName: string;
48
63
  reasoning: boolean;
49
- allowedThinkingLevels: import("@ai-platform/api-contracts").components["schemas"]["LocalCodingHostThinkingLevel"][];
64
+ allowedThinkingLevels: components["schemas"]["LocalCodingHostThinkingLevel"][];
50
65
  }[]>;
51
66
  }
52
67
  export declare function createPiModelService(): ProductionPiModelService | TestPiModelService;
@@ -1 +1 @@
1
- {"version":3,"file":"pi-model-service.d.ts","sourceRoot":"","sources":["../src/pi-model-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,+BAA+B,EAC/B,oBAAoB,EACpB,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAkBpC,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,yBAAyB,CAAC;IACtC,MAAM,EAAE,6BAA6B,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,UAAU,EAAE,yBAAyB,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClG,MAAM,CAAC,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC/C,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;CACxD;AAED,qBAAa,wBAAyB,YAAW,cAAc;YAC/C,OAAO;IAYf,KAAK,CAAC,UAAU,EAAE,yBAAyB,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ;;;IA6BrE,MAAM,CAAC,UAAU,EAAE,yBAAyB;IAI5C,kBAAkB;;;;;IAwBlB,mBAAmB;oBAeW,yBAAyB;;;;+BAMvC,4BAA4B,EAAE;;CAGrD;AA8BD,qBAAa,kBAAmB,YAAW,cAAc;IACjD,KAAK,CAAC,UAAU,EAAE,yBAAyB;;;IAe3C,MAAM,CAAC,UAAU,EAAE,yBAAyB;IAM5C,kBAAkB;;;;;IAQlB,mBAAmB;oBA8Gmn5D,0DAAsB;;;;+BAA+J,0DAAsB;;CA/Ex15D;AAED,wBAAgB,oBAAoB,kDAInC;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,IAAI,CAAC,+BAA+B,EAAE,OAAO,CAAC,GAAG,IAAI,EAC5D,MAAM,EAAE,oBAAoB,EAAE,WAW/B"}
1
+ {"version":3,"file":"pi-model-service.d.ts","sourceRoot":"","sources":["../src/pi-model-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,+BAA+B,EAC/B,oBAAoB,EACpB,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAOpC,OAAO,EAEL,YAAY,EAEb,MAAM,iCAAiC,CAAC;AASzC,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,yBAAyB,CAAC;IACtC,MAAM,EAAE,6BAA6B,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,UAAU,EAAE,yBAAyB,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClG,MAAM,CAAC,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC/C,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACvD,mBAAmB,CAAC,CAClB,UAAU,EAAE,yBAAyB,EACrC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;QACT,OAAO,EAAE,YAAY,CAAC;QACtB,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;KAClE,CAAC,CAAC;CACJ;AAED,qBAAa,wBAAyB,YAAW,cAAc;YAC/C,OAAO;IAYf,KAAK,CAAC,UAAU,EAAE,yBAAyB,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ;;;IA6BrE,MAAM,CAAC,UAAU,EAAE,yBAAyB;YAIpC,uBAAuB;YAwBvB,cAAc;IAgCtB,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAc9C,mBAAmB;oBAeW,yBAAyB;;;;;+BAOvC,4BAA4B,EAAE;;IAkB9C,mBAAmB,CACvB,UAAU,EAAE,yBAAyB,EACrC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,mBAAmB;;;;CAgDhC;AA8BD,qBAAa,kBAAmB,YAAW,cAAc;IACjD,KAAK,CAAC,UAAU,EAAE,yBAAyB;;;IAe3C,MAAM,CAAC,UAAU,EAAE,yBAAyB;IAM5C,kBAAkB;;;;;IAQlB,mBAAmB;;oBA8G0ktG,qBAAsB;;;;+BAA+J,qBAAsB;;CA/E/ytG;AAED,wBAAgB,oBAAoB,kDAInC;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,IAAI,CAAC,+BAA+B,EAAE,OAAO,CAAC,GAAG,IAAI,EAC5D,MAAM,EAAE,oBAAoB,EAAE,WAW/B"}