@bf-meishijian/aip 0.0.6 → 0.0.7

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 (143) hide show
  1. package/README.md +112 -1
  2. package/dist/agent-harness/index.d.ts +4 -0
  3. package/dist/agent-harness/index.d.ts.map +1 -0
  4. package/dist/agent-harness/index.js +4 -0
  5. package/dist/agent-harness/index.js.map +1 -0
  6. package/dist/agent-harness/pi-chat-model.d.ts +35 -0
  7. package/dist/agent-harness/pi-chat-model.d.ts.map +1 -0
  8. package/dist/agent-harness/pi-chat-model.js +285 -0
  9. package/dist/agent-harness/pi-chat-model.js.map +1 -0
  10. package/dist/cli.d.ts +1 -1
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +57 -23
  13. package/dist/cli.js.map +1 -1
  14. package/dist/coding-run-manager.d.ts +76 -16
  15. package/dist/coding-run-manager.d.ts.map +1 -1
  16. package/dist/coding-run-manager.js +550 -439
  17. package/dist/coding-run-manager.js.map +1 -1
  18. package/dist/coding-subagent-child.d.ts +1 -1
  19. package/dist/coding-subagent-child.d.ts.map +1 -1
  20. package/dist/coding-subagent-child.js +14 -21
  21. package/dist/coding-subagent-child.js.map +1 -1
  22. package/dist/coding-subagents.d.ts +2 -0
  23. package/dist/coding-subagents.d.ts.map +1 -1
  24. package/dist/coding-subagents.js +103 -119
  25. package/dist/coding-subagents.js.map +1 -1
  26. package/dist/daemon.d.ts +4 -1
  27. package/dist/daemon.d.ts.map +1 -1
  28. package/dist/daemon.js +127 -42
  29. package/dist/daemon.js.map +1 -1
  30. package/dist/delivery-files.d.ts +15 -12
  31. package/dist/delivery-files.d.ts.map +1 -1
  32. package/dist/delivery-files.js +124 -78
  33. package/dist/delivery-files.js.map +1 -1
  34. package/dist/delivery-tools.d.ts +28 -0
  35. package/dist/delivery-tools.d.ts.map +1 -0
  36. package/dist/delivery-tools.js +167 -0
  37. package/dist/delivery-tools.js.map +1 -0
  38. package/dist/diagnostics.d.ts +1 -0
  39. package/dist/diagnostics.d.ts.map +1 -1
  40. package/dist/diagnostics.js +48 -14
  41. package/dist/diagnostics.js.map +1 -1
  42. package/dist/installer.d.ts +5 -8
  43. package/dist/installer.d.ts.map +1 -1
  44. package/dist/installer.js +155 -65
  45. package/dist/installer.js.map +1 -1
  46. package/dist/linux-service.d.ts +14 -0
  47. package/dist/linux-service.d.ts.map +1 -0
  48. package/dist/linux-service.js +63 -0
  49. package/dist/linux-service.js.map +1 -0
  50. package/dist/live-employee.d.ts +4 -3
  51. package/dist/live-employee.d.ts.map +1 -1
  52. package/dist/live-employee.js +222 -60
  53. package/dist/live-employee.js.map +1 -1
  54. package/dist/local-handoff-workspace.d.ts +20 -0
  55. package/dist/local-handoff-workspace.d.ts.map +1 -0
  56. package/dist/local-handoff-workspace.js +80 -0
  57. package/dist/local-handoff-workspace.js.map +1 -0
  58. package/dist/local-model-usage.d.ts +6 -0
  59. package/dist/local-model-usage.d.ts.map +1 -0
  60. package/dist/local-model-usage.js +40 -0
  61. package/dist/local-model-usage.js.map +1 -0
  62. package/dist/login-url.d.ts +3 -0
  63. package/dist/login-url.d.ts.map +1 -0
  64. package/dist/login-url.js +30 -0
  65. package/dist/login-url.js.map +1 -0
  66. package/dist/paths.d.ts +9 -0
  67. package/dist/paths.d.ts.map +1 -1
  68. package/dist/paths.js +27 -3
  69. package/dist/paths.js.map +1 -1
  70. package/dist/pi-model-service.d.ts +11 -0
  71. package/dist/pi-model-service.d.ts.map +1 -1
  72. package/dist/pi-model-service.js +28 -11
  73. package/dist/pi-model-service.js.map +1 -1
  74. package/dist/platform-client.d.ts +214 -6
  75. package/dist/platform-client.d.ts.map +1 -1
  76. package/dist/platform-client.js +66 -0
  77. package/dist/platform-client.js.map +1 -1
  78. package/dist/profile.d.ts +9 -0
  79. package/dist/profile.d.ts.map +1 -0
  80. package/dist/profile.js +43 -0
  81. package/dist/profile.js.map +1 -0
  82. package/dist/project-facts.d.ts +19 -0
  83. package/dist/project-facts.d.ts.map +1 -0
  84. package/dist/project-facts.js +91 -0
  85. package/dist/project-facts.js.map +1 -0
  86. package/dist/provider-auth-error.d.ts +3 -0
  87. package/dist/provider-auth-error.d.ts.map +1 -0
  88. package/dist/provider-auth-error.js +12 -0
  89. package/dist/provider-auth-error.js.map +1 -0
  90. package/dist/qa-contract.d.ts +2 -0
  91. package/dist/qa-contract.d.ts.map +1 -0
  92. package/dist/qa-contract.js +165 -0
  93. package/dist/qa-contract.js.map +1 -0
  94. package/dist/qa-http-validation.js +145 -0
  95. package/dist/qa-project-checkout.d.ts +12 -0
  96. package/dist/qa-project-checkout.d.ts.map +1 -0
  97. package/dist/qa-project-checkout.js +68 -0
  98. package/dist/qa-project-checkout.js.map +1 -0
  99. package/dist/qa-session-manager.d.ts +101 -0
  100. package/dist/qa-session-manager.d.ts.map +1 -0
  101. package/dist/qa-session-manager.js +581 -0
  102. package/dist/qa-session-manager.js.map +1 -0
  103. package/dist/review-report.d.ts +3 -4
  104. package/dist/review-report.d.ts.map +1 -1
  105. package/dist/review-report.js +14 -12
  106. package/dist/review-report.js.map +1 -1
  107. package/dist/secure-json.d.ts.map +1 -1
  108. package/dist/secure-json.js +64 -2
  109. package/dist/secure-json.js.map +1 -1
  110. package/dist/stage-delivery.js +42 -25
  111. package/dist/state.d.ts +2 -2
  112. package/dist/state.d.ts.map +1 -1
  113. package/dist/state.js +6 -4
  114. package/dist/state.js.map +1 -1
  115. package/dist/test-cli.d.ts +2 -0
  116. package/dist/test-cli.d.ts.map +1 -0
  117. package/dist/test-cli.js +50 -0
  118. package/dist/test-cli.js.map +1 -0
  119. package/dist/test-executor.d.ts +44 -0
  120. package/dist/test-executor.d.ts.map +1 -0
  121. package/dist/test-executor.js +474 -0
  122. package/dist/test-executor.js.map +1 -0
  123. package/dist/test-reports.d.ts +13 -0
  124. package/dist/test-reports.d.ts.map +1 -0
  125. package/dist/test-reports.js +129 -0
  126. package/dist/test-reports.js.map +1 -0
  127. package/dist/test-run-manager.d.ts +24 -0
  128. package/dist/test-run-manager.d.ts.map +1 -0
  129. package/dist/test-run-manager.js +121 -0
  130. package/dist/test-run-manager.js.map +1 -0
  131. package/dist/tool-dispatch.d.ts +14 -0
  132. package/dist/tool-dispatch.d.ts.map +1 -0
  133. package/dist/tool-dispatch.js +56 -0
  134. package/dist/tool-dispatch.js.map +1 -0
  135. package/dist/windows-runtime.d.ts +9 -0
  136. package/dist/windows-runtime.d.ts.map +1 -0
  137. package/dist/windows-runtime.js +64 -0
  138. package/dist/windows-runtime.js.map +1 -0
  139. package/dist/windows-service.d.ts +20 -0
  140. package/dist/windows-service.d.ts.map +1 -0
  141. package/dist/windows-service.js +96 -0
  142. package/dist/windows-service.js.map +1 -0
  143. package/package.json +17 -10
@@ -1,17 +1,44 @@
1
1
  import { execFile } from "node:child_process";
2
2
  import { createHash } from "node:crypto";
3
- import { mkdir, readFile, realpath, rename, writeFile } from "node:fs/promises";
3
+ import { lstat, mkdir, readFile, realpath, rename, writeFile } from "node:fs/promises";
4
4
  import { basename, isAbsolute, join, relative, resolve } from "node:path";
5
5
  import { promisify } from "node:util";
6
- import { DELIVERY_FILES } from "./stage-delivery.js";
6
+ export function commandMaterialReader(fetch) {
7
+ const contents = new Map();
8
+ return (source) => {
9
+ let content = contents.get(source.contentHash);
10
+ if (!content) {
11
+ content = fetch(source).then((result) => {
12
+ if (result.encoding !== "utf8" && result.encoding !== "base64")
13
+ throw new Error("AIP_MATERIAL_CONTENT_INVALID");
14
+ const body = Buffer.from(result.content, result.encoding);
15
+ if (result.contentHash !== source.contentHash ||
16
+ createHash("sha256").update(body).digest("hex") !== source.contentHash)
17
+ throw new Error("AIP_MATERIAL_CONTENT_INVALID");
18
+ return body;
19
+ });
20
+ contents.set(source.contentHash, content);
21
+ }
22
+ return content;
23
+ };
24
+ }
7
25
  export { DELIVERY_FILES } from "./stage-delivery.js";
8
- export function deliveryDirectory(runRoot, input) {
9
- const project = input.projects.find((p) => p.id === input.primaryProjectId);
26
+ export function materialProjectRoot(runRoot, input, projectId = input.primaryProjectId) {
27
+ const project = input.projects.find((p) => p.id === projectId);
10
28
  if (!project)
11
29
  throw new Error("AIP_PRIMARY_PROJECT_REQUIRED");
12
- if (!/^[a-zA-Z0-9_-]+$/u.test(input.workItem.key))
13
- throw new Error("AIP_WORK_ITEM_KEY_INVALID");
14
- return join(runRoot, basename(project.name).replace(/[^a-zA-Z0-9._-]/gu, "-") || "project", "docs", "aip", input.workItem.key);
30
+ return join(runRoot, basename(project.name).replace(/[^a-zA-Z0-9._-]/gu, "-") || "project");
31
+ }
32
+ function validateMaterialPath(path) {
33
+ if (!path ||
34
+ path.includes("\\") ||
35
+ [...path].some((c) => c.charCodeAt(0) < 32 || c.charCodeAt(0) === 127) ||
36
+ path.split("/").some((part) => !part || part === "." || part === ".." || part.includes(":")))
37
+ throw new Error("AIP_MATERIAL_PATH_INVALID");
38
+ }
39
+ export function deliveryDirectory(runRoot, input) {
40
+ validateMaterialPath(input.materialPreparation.directory);
41
+ return join(materialProjectRoot(runRoot, input), input.materialPreparation.directory);
15
42
  }
16
43
  async function boundedPath(root, path) {
17
44
  const realRoot = await realpath(root);
@@ -21,60 +48,77 @@ async function boundedPath(root, path) {
21
48
  throw new Error(`AIP_DELIVERY_PATH_OUTSIDE_PROJECT:${path}`);
22
49
  return real;
23
50
  }
24
- export async function initializeDeliveryFiles(runRoot, input, resume = false) {
25
- const directory = deliveryDirectory(runRoot, input);
26
- const projectRoot = resolve(directory, "../../..");
27
- for (const target of [join(projectRoot, "docs"), join(projectRoot, "docs/aip"), directory]) {
28
- await mkdir(target, { recursive: true });
29
- await boundedPath(projectRoot, target);
30
- }
31
- for (const [slot, name] of Object.entries(DELIVERY_FILES)) {
32
- if (slot === "TEST_PLAN" ||
33
- slot === "SYSTEM_REVIEW" ||
34
- (slot === "DESIGN" && !input.technicalDesign) ||
35
- (resume && ["PRD", "DESIGN"].includes(slot)))
36
- continue;
37
- const content = slot === "PRD"
38
- ? input.requirement.body_markdown
39
- : slot === "DESIGN"
40
- ? input.technicalDesign.content
41
- : "";
42
- await writeFile(join(directory, name), content, { flag: "wx", mode: 0o600 }).catch((error) => {
51
+ async function materialTarget(projectRoot, directory, path, replace = false) {
52
+ validateMaterialPath(directory);
53
+ validateMaterialPath(path);
54
+ let parent = projectRoot;
55
+ await boundedPath(projectRoot, parent);
56
+ for (const part of [...directory.split("/"), ...path.split("/").slice(0, -1)]) {
57
+ parent = join(parent, part);
58
+ await mkdir(parent).catch((error) => {
43
59
  if (error.code !== "EEXIST")
44
60
  throw error;
45
61
  });
62
+ if ((await lstat(parent)).isSymbolicLink())
63
+ throw new Error("AIP_MATERIAL_PATH_INVALID");
64
+ await boundedPath(projectRoot, parent);
46
65
  }
47
- if (input.inputConflict) {
48
- for (const [name, content] of [
49
- ["prd.platform.md", input.requirement.body_markdown],
50
- ...(input.technicalDesign ? [["design.platform.md", input.technicalDesign.content]] : []),
51
- ]) {
52
- const temporary = join(directory, `.input-${crypto.randomUUID()}`);
53
- await writeFile(temporary, content, { mode: 0o600, flag: "wx" });
54
- await rename(temporary, join(directory, name));
66
+ const target = join(parent, basename(path));
67
+ try {
68
+ if ((await lstat(target)).isSymbolicLink()) {
69
+ if (replace)
70
+ return target;
71
+ throw new Error("AIP_MATERIAL_PATH_INVALID");
55
72
  }
73
+ await boundedPath(projectRoot, target);
74
+ }
75
+ catch (error) {
76
+ if (error.code !== "ENOENT")
77
+ throw error;
56
78
  }
57
- return directory;
79
+ return target;
80
+ }
81
+ async function writeMaterial(target, file, body) {
82
+ if (file.mode === "replace") {
83
+ const temporary = join(resolve(target, ".."), `.input-${crypto.randomUUID()}`);
84
+ await writeFile(temporary, body, { mode: 0o600, flag: "wx" });
85
+ await rename(temporary, target);
86
+ return;
87
+ }
88
+ try {
89
+ await writeFile(target, body, { flag: "wx", mode: 0o600 });
90
+ }
91
+ catch (error) {
92
+ if (error.code !== "EEXIST")
93
+ throw error;
94
+ if (file.mode === "verify" && !(await readFile(target)).equals(body))
95
+ throw new Error(`AIP_MATERIAL_CONTENT_CONFLICT:${file.path}`);
96
+ }
97
+ }
98
+ export async function initializeDeliveryFiles(runRoot, input, resume = false, readMaterial) {
99
+ const preparation = input.materialPreparation;
100
+ for (const file of resume ? preparation.resumeFiles : preparation.initialFiles) {
101
+ const projectRoot = materialProjectRoot(runRoot, input, file.projectId);
102
+ const target = await materialTarget(projectRoot, preparation.directory, file.path, file.mode === "replace");
103
+ await writeMaterial(target, file, file.source ? await readMaterial(file.source) : Buffer.alloc(0));
104
+ }
105
+ return deliveryDirectory(runRoot, input);
58
106
  }
59
107
  // Commit only the confirmed review inputs; delivery drafts remain local until the Agent submits them.
60
- export async function publishReviewMaterials(runRoot, input) {
108
+ export async function publishReviewMaterials(runRoot, input, readMaterial) {
61
109
  const exec = promisify(execFile);
62
- for (const project of input.projects) {
63
- const directory = deliveryDirectory(runRoot, { ...input, primaryProjectId: project.id });
64
- const cwd = resolve(directory, "../../..");
110
+ for (const publication of input.materialPreparation.reviewPublications) {
111
+ const project = input.projects.find((p) => p.id === publication.projectId);
112
+ if (!project)
113
+ throw new Error("AIP_PRIMARY_PROJECT_REQUIRED");
114
+ const cwd = materialProjectRoot(runRoot, input, project.id);
65
115
  const git = async (...args) => (await exec("git", args, { cwd })).stdout.trim();
66
116
  if (!project.devBranch ||
67
117
  [project.baselineBranch, project.testBranch, "main", "master"].includes(project.devBranch))
68
118
  throw new Error("AIP_MATERIALS_BRANCH_INVALID");
69
119
  if ((await git("branch", "--show-current")) !== project.devBranch)
70
120
  throw new Error("AIP_MATERIALS_BRANCH_MISMATCH");
71
- for (const target of [join(cwd, "docs"), join(cwd, "docs/aip"), directory]) {
72
- await mkdir(target, { recursive: true });
73
- await boundedPath(cwd, target);
74
- }
75
- const files = [["prd.md", input.requirement.body_markdown]];
76
- if (input.technicalDesign)
77
- files.push(["design.md", input.technicalDesign.content]);
121
+ await materialTarget(cwd, input.materialPreparation.directory, ".aip-ignore-probe");
78
122
  const paths = [];
79
123
  const ignored = async (path) => {
80
124
  try {
@@ -87,7 +131,10 @@ export async function publishReviewMaterials(runRoot, input) {
87
131
  throw error;
88
132
  }
89
133
  };
90
- if (await ignored("docs/aip/.aip-ignore-probe")) {
134
+ validateMaterialPath(input.materialPreparation.directory);
135
+ const materialPath = input.materialPreparation.directory.split("/").slice(0, -1).join("/") ||
136
+ input.materialPreparation.directory;
137
+ if (await ignored(`${materialPath}/.aip-ignore-probe`)) {
91
138
  if (await git("status", "--porcelain", "--", ".gitignore"))
92
139
  throw new Error("AIP_GITIGNORE_LOCAL_CHANGES");
93
140
  const ignorePath = join(cwd, ".gitignore");
@@ -101,27 +148,30 @@ export async function publishReviewMaterials(runRoot, input) {
101
148
  return "";
102
149
  throw error;
103
150
  });
104
- const rules = [
105
- ...((await ignored("docs")) ? ["!/docs/", "/docs/*"] : []),
106
- "!/docs/aip/",
107
- "!/docs/aip/**",
108
- ];
151
+ const rules = [];
152
+ const parts = materialPath.split("/");
153
+ for (let i = 1; i < parts.length; i++) {
154
+ const ancestor = parts.slice(0, i).join("/");
155
+ if (await ignored(ancestor))
156
+ rules.push(`!/${ancestor}/`, `/${ancestor}/*`);
157
+ }
158
+ rules.push(`!/${materialPath}/`, `!/${materialPath}/**`);
109
159
  await writeFile(ignorePath, `${existing}${existing.endsWith("\n") || !existing ? "" : "\n"}\n# AI Platform delivery materials\n${rules.join("\n")}\n`);
110
160
  paths.push(".gitignore");
111
161
  }
112
- for (const [name, content] of files) {
113
- const path = join(directory, name);
114
- await writeFile(path, content, { flag: "wx", mode: 0o600 }).catch((error) => {
115
- if (error.code !== "EEXIST")
116
- throw error;
117
- });
118
- await boundedPath(cwd, path);
119
- if ((await readFile(path, "utf8")) !== content) {
120
- if (await git("status", "--porcelain", "--", relative(cwd, path)))
121
- throw new Error(`AIP_MATERIALS_CONTENT_CONFLICT:${project.name}/${name}`);
122
- const temporary = join(directory, `.input-${crypto.randomUUID()}`);
123
- await writeFile(temporary, content, { flag: "wx", mode: 0o600 });
124
- await rename(temporary, path);
162
+ for (const file of publication.files) {
163
+ const path = await materialTarget(cwd, input.materialPreparation.directory, file.path);
164
+ const body = file.source ? await readMaterial(file.source) : Buffer.alloc(0);
165
+ if (file.mode === "verify") {
166
+ await writeMaterial(path, { ...file, mode: "verify" }, body);
167
+ }
168
+ else {
169
+ await writeMaterial(path, { ...file, mode: "create" }, body);
170
+ if (!(await readFile(path)).equals(body)) {
171
+ if (await git("status", "--porcelain", "--", relative(cwd, path)))
172
+ throw new Error(`AIP_MATERIALS_CONTENT_CONFLICT:${project.name}/${file.path}`);
173
+ await writeMaterial(path, { ...file, mode: "replace" }, body);
174
+ }
125
175
  }
126
176
  paths.push(relative(cwd, path));
127
177
  }
@@ -131,36 +181,32 @@ export async function publishReviewMaterials(runRoot, input) {
131
181
  await git("-c", "remote.origin.mirror=false", "push", "origin", `HEAD:refs/heads/${project.devBranch}`);
132
182
  }
133
183
  }
134
- export async function collectDeliveryFiles(runRoot, input, slots) {
184
+ export async function collectDeliveryFiles(runRoot, input, requirements) {
135
185
  const directory = deliveryDirectory(runRoot, input);
136
- await boundedPath(resolve(directory, "../../.."), directory);
186
+ await boundedPath(materialProjectRoot(runRoot, input), directory);
137
187
  const files = [];
138
188
  const errors = [];
139
- for (const [slot, name] of Object.entries(DELIVERY_FILES)) {
140
- if (slots && !slots.includes(slot))
141
- continue;
142
- if (slot === "DESIGN" && !input.technicalDesign)
143
- continue;
144
- if (slot === "SYSTEM_REVIEW" && !input.qualityReview?.enabled)
145
- continue;
189
+ for (const { slot, path: name, required } of requirements) {
190
+ validateMaterialPath(name);
191
+ const optional = !required;
146
192
  const path = join(directory, name);
147
193
  try {
148
194
  await boundedPath(directory, path);
149
195
  const content = await readFile(path, "utf8");
150
196
  if (!content.trim()) {
151
- if (slot !== "TEST_PLAN")
197
+ if (!optional)
152
198
  errors.push(`${slot}: ${path} 内容为空`);
153
199
  continue;
154
200
  }
155
201
  files.push({
156
- slot: slot,
157
- path: `docs/aip/${input.workItem.key}/${name}`,
202
+ slot,
203
+ path: `${input.materialPreparation.directory}/${name}`,
158
204
  content,
159
205
  contentHash: createHash("sha256").update(content).digest("hex"),
160
206
  });
161
207
  }
162
208
  catch (error) {
163
- if (slot === "TEST_PLAN" && error.code === "ENOENT")
209
+ if (optional && error.code === "ENOENT")
164
210
  continue;
165
211
  errors.push(`${slot}: ${path} ${error.code === "ENOENT" ? "文件不存在" : "无法读取或路径越界"}`);
166
212
  }
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-files.js","sourceRoot":"","sources":["../src/delivery-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery-files.js","sourceRoot":"","sources":["../src/delivery-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { CodingDeliveryRequirements } from "@ai-platform/api-contracts";
2
+ import type { ExtensionFactory } from "@earendil-works/pi-coding-agent";
3
+ import { type DeliveryInput } from "./delivery-files.js";
4
+ import { type PlatformClient } from "./platform-client.js";
5
+ import { type DeliveryProject } from "./project-facts.js";
6
+ import { bindHostTool } from "./tool-dispatch.js";
7
+ type HostIdentity = {
8
+ hostId: string;
9
+ generation: number;
10
+ };
11
+ type DeliveryExecutionInput = DeliveryInput & {
12
+ workItem: {
13
+ id: string;
14
+ key: string;
15
+ title: string;
16
+ };
17
+ projects: DeliveryProject[];
18
+ deliveryRequirements: CodingDeliveryRequirements;
19
+ };
20
+ export interface DeliveryObservation {
21
+ activeTasks: Map<string, string>;
22
+ terminalReached: boolean;
23
+ deploymentCheckPaused?: boolean;
24
+ lastDeliveryError?: string;
25
+ }
26
+ export declare function deliveryTools(client: PlatformClient, host: HostIdentity, runId: string, turnId: string, runRoot: string, input: DeliveryExecutionInput, observed: DeliveryObservation, persistBatch: (batch: Parameters<PlatformClient["reportCodingTerminal"]>[1] | undefined) => Promise<void>, pendingBatch: () => Parameters<PlatformClient["reportCodingTerminal"]>[1] | undefined, flushEvents: () => Promise<void>, toolDefinitions: Parameters<typeof bindHostTool>[0]): ExtensionFactory;
27
+ export {};
28
+ //# sourceMappingURL=delivery-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-tools.d.ts","sourceRoot":"","sources":["../src/delivery-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAE3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,KAAK,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,KAAK,sBAAsB,GAAG,aAAa,GAAG;IAC5C,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,oBAAoB,EAAE,0BAA0B,CAAC;CAClD,CAAC;AACF,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAKD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,sBAAsB,EAC7B,QAAQ,EAAE,mBAAmB,EAC7B,YAAY,EAAE,CACZ,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,KACrE,OAAO,CAAC,IAAI,CAAC,EAClB,YAAY,EAAE,MAAM,UAAU,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,EACrF,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAChC,eAAe,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,GAClD,gBAAgB,CAqJlB"}
@@ -0,0 +1,167 @@
1
+ import { basename, join } from "node:path";
2
+ import { collectDeliveryFiles } from "./delivery-files.js";
3
+ import { prepareMergeRequest, registerMergeRequest } from "./merge-requests.js";
4
+ import { PlatformClientError } from "./platform-client.js";
5
+ import { collectProjectFacts, verifyReviewBranches, } from "./project-facts.js";
6
+ import { bindHostTool } from "./tool-dispatch.js";
7
+ function safeName(value) {
8
+ return basename(value).replace(/[^a-zA-Z0-9._-]/gu, "-") || "project";
9
+ }
10
+ export function deliveryTools(client, host, runId, turnId, runRoot, input, observed, persistBatch, pendingBatch, flushEvents, toolDefinitions) {
11
+ return (api) => {
12
+ const definitions = [
13
+ bindHostTool(toolDefinitions, "terminal", async (_toolCallId, rawParams, signal) => {
14
+ signal?.throwIfAborted();
15
+ try {
16
+ if (observed.activeTasks.size > 0)
17
+ throw new Error("SUBAGENT_TASKS_RUNNING:子任务尚未结束,请等待结果后再提交阶段交付。");
18
+ const requirements = input.deliveryRequirements;
19
+ if (requirements.operation === "submit_pull_requests") {
20
+ const params = rawParams;
21
+ if (!params?.checklistSummary?.trim())
22
+ throw new Error("AIP_RELEASE_CHECKLIST_SUMMARY_REQUIRED");
23
+ const files = await collectDeliveryFiles(runRoot, input, requirements.files);
24
+ const checklist = {
25
+ status: "VERIFIED",
26
+ summary: params.checklistSummary,
27
+ markdown: files[0].content,
28
+ };
29
+ await client.submitPullRequests(runId, {
30
+ hostId: host.hostId,
31
+ generation: host.generation,
32
+ turnId,
33
+ workItemId: input.workItem.id,
34
+ projects: [],
35
+ checklist,
36
+ });
37
+ const context = {
38
+ runId,
39
+ turnId,
40
+ workItem: input.workItem,
41
+ projects: input.projects,
42
+ primaryProjectId: input.primaryProjectId,
43
+ };
44
+ for (const project of input.projects) {
45
+ const explanation = params.projects?.find((item) => item.project === project.name);
46
+ if (!explanation)
47
+ throw new Error(`AIP_MR_DESCRIPTION_REQUIRED:${project.name}`);
48
+ const pendingFile = join(runRoot, `mr-pending-${safeName(project.id)}.json`);
49
+ const result = await prepareMergeRequest({
50
+ project,
51
+ cwd: join(runRoot, safeName(project.name)),
52
+ title: explanation.title,
53
+ description: explanation.description,
54
+ pendingFile,
55
+ });
56
+ await registerMergeRequest(client, context, host, result, pendingFile);
57
+ }
58
+ await client.submitPullRequests(runId, {
59
+ hostId: host.hostId,
60
+ generation: host.generation,
61
+ turnId,
62
+ workItemId: input.workItem.id,
63
+ projects: [],
64
+ completeRelease: true,
65
+ });
66
+ observed.terminalReached = true;
67
+ return toolResult(requirements.successMessage);
68
+ }
69
+ const existing = pendingBatch();
70
+ if (existing && existing.turnId === turnId) {
71
+ await flushEvents();
72
+ const outcome = await uploadBatch(client, runId, existing);
73
+ await persistBatch(undefined);
74
+ if (outcome?.accepted === false)
75
+ return deploymentCheckFeedback(outcome, observed);
76
+ observed.terminalReached = true;
77
+ return toolResult(requirements.successMessage);
78
+ }
79
+ const summary = rawParams.summary?.trim();
80
+ if (!summary)
81
+ throw new Error("AIP_DELIVERY_SUMMARY_REQUIRED");
82
+ const files = await collectDeliveryFiles(runRoot, input, requirements.files);
83
+ const projectFacts = await collectProjectFacts(runRoot, input.projects, input.workItem.key, input.primaryProjectId);
84
+ if (requirements.verifyReviewBranches)
85
+ await verifyReviewBranches(runRoot, input.projects, projectFacts);
86
+ const batch = {
87
+ hostId: host.hostId,
88
+ generation: host.generation,
89
+ turnId,
90
+ kind: requirements.kind,
91
+ submissionId: crypto.randomUUID(),
92
+ files,
93
+ summary,
94
+ knownIssues: "",
95
+ projectFacts,
96
+ testFacts: [],
97
+ ...(requirements.includePipelineExecutions
98
+ ? {
99
+ pipelineExecutions: rawParams.pipelineExecutions,
100
+ }
101
+ : {}),
102
+ };
103
+ await persistBatch(batch);
104
+ await flushEvents();
105
+ const outcome = await uploadBatch(client, runId, batch);
106
+ await persistBatch(undefined);
107
+ if (outcome?.accepted === false)
108
+ return deploymentCheckFeedback(outcome, observed);
109
+ observed.terminalReached = true;
110
+ return toolResult(requirements.successMessage);
111
+ }
112
+ catch (error) {
113
+ observed.lastDeliveryError =
114
+ error instanceof Error ? error.message : "AIP_DELIVERY_FAILED";
115
+ if (error instanceof PlatformClientError && error.status < 500 && error.status !== 429)
116
+ await persistBatch(undefined);
117
+ throw error;
118
+ }
119
+ }, api),
120
+ ];
121
+ if (toolDefinitions.some((definition) => definition.handler === "request_code_changes"))
122
+ definitions.push(bindHostTool(toolDefinitions, "request_code_changes", async (_id, params, signal) => {
123
+ signal?.throwIfAborted();
124
+ await client.request(`/api/v1/coding-runs/${runId}/return-to-development`, {
125
+ method: "POST",
126
+ body: JSON.stringify({
127
+ hostId: host.hostId,
128
+ generation: host.generation,
129
+ turnId,
130
+ reason: params.reason,
131
+ }),
132
+ });
133
+ observed.terminalReached = true;
134
+ return toolResult("代码修改请求已由平台处理;平台按当前授权和返工预算推进或暂停,请查看工单状态,本会话结束。");
135
+ }, api));
136
+ for (const definition of definitions)
137
+ api.registerTool(definition);
138
+ };
139
+ }
140
+ async function uploadBatch(client, runId, batch) {
141
+ for (let attempt = 0;; attempt++) {
142
+ try {
143
+ return await client.reportCodingTerminal(runId, batch);
144
+ }
145
+ catch (error) {
146
+ if (error instanceof PlatformClientError && error.status < 500 && error.status !== 429)
147
+ throw error;
148
+ if (attempt >= 2)
149
+ throw new Error(`AIP_DELIVERY_UPLOAD_FAILED:同批材料尚未提交成功,可恢复重试;${error instanceof Error ? error.message : "网络错误"}`);
150
+ await new Promise((resolve) => setTimeout(resolve, 300 * (attempt + 1)));
151
+ }
152
+ }
153
+ }
154
+ function deploymentCheckFeedback(result, observed) {
155
+ const check = result.deploymentCheck;
156
+ if (!check?.canContinue) {
157
+ observed.terminalReached = true;
158
+ observed.deploymentCheckPaused = true;
159
+ }
160
+ return toolResult(`${check?.summary ?? "部署结果尚未通过复核。"}\n${check?.canContinue
161
+ ? "平台允许继续处理并重新提交。"
162
+ : "自动处理已停止,等待用户继续排障、重新检查或返回开发。不要继续调用工具。"}`);
163
+ }
164
+ function toolResult(text) {
165
+ return { content: [{ type: "text", text }], details: {} };
166
+ }
167
+ //# sourceMappingURL=delivery-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-tools.js","sourceRoot":"","sources":["../src/delivery-tools.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export declare function runDiagnostics(options: {
5
5
  generationValid: boolean;
6
6
  defaultModelValid: boolean;
7
7
  providerReady: boolean;
8
+ runtimeVerification?: "full" | "installed-package";
8
9
  }, dependencies?: {
9
10
  captureCommand?: typeof captureCommand;
10
11
  }): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAWjF,wBAAsB,cAAc,CAClC,OAAO,EAAE;IACP,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;CACxB,EACD,YAAY,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,cAAc,CAAA;CAAO;;;;;KAiC9D;AA0FD,iBAAS,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;UAC1B,MAAM;YAAU,MAAM;GAUlD;AACD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAmB1F"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAYjF,wBAAsB,cAAc,CAClC,OAAO,EAAE;IACP,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;CACpD,EACD,YAAY,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,cAAc,CAAA;CAAO;;;;;KAiC9D;AAoID,iBAAS,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;UAC1B,MAAM;YAAU,MAAM;GAUlD;AACD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAmB1F"}