@bf-meishijian/aip 0.0.5 → 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 +114 -3
  2. package/dist/cli.d.ts +1 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +57 -23
  5. package/dist/cli.js.map +1 -1
  6. package/dist/coding-run-manager.d.ts +83 -17
  7. package/dist/coding-run-manager.d.ts.map +1 -1
  8. package/dist/coding-run-manager.js +861 -644
  9. package/dist/coding-run-manager.js.map +1 -1
  10. package/dist/coding-subagent-child.d.ts +22 -0
  11. package/dist/coding-subagent-child.d.ts.map +1 -0
  12. package/dist/coding-subagent-child.js +83 -0
  13. package/dist/coding-subagent-child.js.map +1 -0
  14. package/dist/coding-subagents.d.ts +65 -0
  15. package/dist/coding-subagents.d.ts.map +1 -0
  16. package/dist/coding-subagents.js +521 -0
  17. package/dist/coding-subagents.js.map +1 -0
  18. package/dist/command-wakeup.d.ts +19 -0
  19. package/dist/command-wakeup.d.ts.map +1 -0
  20. package/dist/command-wakeup.js +109 -0
  21. package/dist/command-wakeup.js.map +1 -0
  22. package/dist/daemon.d.ts +4 -1
  23. package/dist/daemon.d.ts.map +1 -1
  24. package/dist/daemon.js +189 -79
  25. package/dist/daemon.js.map +1 -1
  26. package/dist/delivery-files.d.ts +24 -9
  27. package/dist/delivery-files.d.ts.map +1 -1
  28. package/dist/delivery-files.js +171 -45
  29. package/dist/delivery-files.js.map +1 -1
  30. package/dist/delivery-tools.d.ts +28 -0
  31. package/dist/delivery-tools.d.ts.map +1 -0
  32. package/dist/delivery-tools.js +167 -0
  33. package/dist/delivery-tools.js.map +1 -0
  34. package/dist/diagnostics.d.ts +1 -0
  35. package/dist/diagnostics.d.ts.map +1 -1
  36. package/dist/diagnostics.js +48 -14
  37. package/dist/diagnostics.js.map +1 -1
  38. package/dist/installer.d.ts +5 -8
  39. package/dist/installer.d.ts.map +1 -1
  40. package/dist/installer.js +155 -65
  41. package/dist/installer.js.map +1 -1
  42. package/dist/linux-service.d.ts +14 -0
  43. package/dist/linux-service.d.ts.map +1 -0
  44. package/dist/linux-service.js +63 -0
  45. package/dist/linux-service.js.map +1 -0
  46. package/dist/live-employee.d.ts +6 -3
  47. package/dist/live-employee.d.ts.map +1 -1
  48. package/dist/live-employee.js +245 -49
  49. package/dist/live-employee.js.map +1 -1
  50. package/dist/local-handoff-workspace.d.ts +20 -0
  51. package/dist/local-handoff-workspace.d.ts.map +1 -0
  52. package/dist/local-handoff-workspace.js +80 -0
  53. package/dist/local-handoff-workspace.js.map +1 -0
  54. package/dist/local-model-usage.d.ts +6 -0
  55. package/dist/local-model-usage.d.ts.map +1 -0
  56. package/dist/local-model-usage.js +40 -0
  57. package/dist/local-model-usage.js.map +1 -0
  58. package/dist/login-url.d.ts +3 -0
  59. package/dist/login-url.d.ts.map +1 -0
  60. package/dist/login-url.js +30 -0
  61. package/dist/login-url.js.map +1 -0
  62. package/dist/paths.d.ts +9 -0
  63. package/dist/paths.d.ts.map +1 -1
  64. package/dist/paths.js +27 -3
  65. package/dist/paths.js.map +1 -1
  66. package/dist/pi-message-queue.d.ts +15 -0
  67. package/dist/pi-message-queue.d.ts.map +1 -0
  68. package/dist/pi-message-queue.js +57 -0
  69. package/dist/pi-message-queue.js.map +1 -0
  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 +230 -6
  75. package/dist/platform-client.d.ts.map +1 -1
  76. package/dist/platform-client.js +87 -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 +9 -0
  104. package/dist/review-report.d.ts.map +1 -0
  105. package/dist/review-report.js +61 -0
  106. package/dist/review-report.js.map +1 -0
  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 +43 -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 -6
@@ -0,0 +1,63 @@
1
+ import { spawn } from "node:child_process";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { join as joinPosix } from "node:path/posix";
6
+ import { activeProfile, linuxServiceUnit } from "./paths.js";
7
+ const systemdValue = (value) => `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
8
+ export function linuxServiceDefinition(runtime, root, directory = process.env.AIP_SYSTEMD_USER_DIR ?? join(homedir(), ".config", "systemd", "user")) {
9
+ const node = joinPosix(runtime, "bin", "node");
10
+ const daemon = joinPosix(runtime, "app", "dist", "daemon.js");
11
+ return {
12
+ unit: linuxServiceUnit(),
13
+ path: join(directory, linuxServiceUnit()),
14
+ directory,
15
+ contents: [
16
+ "[Unit]",
17
+ "Description=AI Platform Local Coding Host",
18
+ "After=network-online.target",
19
+ "Wants=network-online.target",
20
+ "",
21
+ "[Service]",
22
+ "Type=simple",
23
+ `Environment=${systemdValue(`AIP_HOME=${root}`)}`,
24
+ `Environment=${systemdValue(`AIP_PROFILE=${activeProfile()}`)}`,
25
+ `ExecStart=${systemdValue(node)} ${systemdValue(daemon)}`,
26
+ "Restart=always",
27
+ "RestartSec=3",
28
+ "NoNewPrivileges=true",
29
+ "",
30
+ "[Install]",
31
+ "WantedBy=default.target",
32
+ "",
33
+ ].join("\n"),
34
+ };
35
+ }
36
+ export async function installLinuxService(runtime, root) {
37
+ const service = linuxServiceDefinition(runtime, root);
38
+ await mkdir(service.directory, { recursive: true, mode: 0o700 });
39
+ await writeFile(service.path, service.contents, { mode: 0o600 });
40
+ if (process.env.AIP_SKIP_SERVICE === "1")
41
+ return service;
42
+ await runSystemctl(["daemon-reload"]);
43
+ await runSystemctl(["enable", service.unit]);
44
+ await runSystemctl(["restart", service.unit]);
45
+ return service;
46
+ }
47
+ export async function linuxServiceAction(action, ignoreFailure = false) {
48
+ return runSystemctl([action, linuxServiceUnit()], ignoreFailure);
49
+ }
50
+ async function runSystemctl(args, ignoreFailure = false) {
51
+ const code = await new Promise((resolve, reject) => {
52
+ const child = spawn("systemctl", ["--user", ...args], {
53
+ stdio: "ignore",
54
+ env: process.env,
55
+ });
56
+ child.once("error", reject);
57
+ child.once("exit", (value) => resolve(value ?? 1));
58
+ });
59
+ if (code !== 0 && !ignoreFailure)
60
+ throw new Error(`systemd 用户服务操作失败 (${code}):systemctl --user ${args.join(" ")}`);
61
+ return code;
62
+ }
63
+ //# sourceMappingURL=linux-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux-service.js","sourceRoot":"","sources":["../src/linux-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE,CACrC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;AAE/D,MAAM,UAAU,sBAAsB,CACpC,OAAe,EACf,IAAY,EACZ,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;IAE7F,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9D,OAAO;QACL,IAAI,EAAE,gBAAgB,EAAE;QACxB,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,gBAAgB,EAAE,CAAC;QACzC,SAAS;QACT,QAAQ,EAAE;YACR,QAAQ;YACR,2CAA2C;YAC3C,6BAA6B;YAC7B,6BAA6B;YAC7B,EAAE;YACF,WAAW;YACX,aAAa;YACb,eAAe,YAAY,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE;YACjD,eAAe,YAAY,CAAC,eAAe,aAAa,EAAE,EAAE,CAAC,EAAE;YAC/D,aAAa,YAAY,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;YACzD,gBAAgB;YAChB,cAAc;YACd,sBAAsB;YACtB,EAAE;YACF,WAAW;YACX,yBAAyB;YACzB,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAe,EAAE,IAAY;IACrE,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC;IACzD,MAAM,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IACtC,MAAM,YAAY,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,MAAM,YAAY,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAwB,EAAE,aAAa,GAAG,KAAK;IACtF,OAAO,YAAY,CAAC,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,aAAa,GAAG,KAAK;IAC/D,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE;YACpD,KAAK,EAAE,QAAQ;YACf,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa;QAC9B,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,sBAAsB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnF,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -2,13 +2,16 @@ import { type AgentSession, type ExtensionFactory } from "@earendil-works/pi-cod
2
2
  import type { PlatformClient } from "./platform-client.js";
3
3
  export type TeamMember = string;
4
4
  export type EmployeeConfig = Awaited<ReturnType<PlatformClient["employeeConfig"]>>;
5
- export declare function employeePrompt(config: EmployeeConfig, locations: Map<string, string>, team?: boolean, phase?: "PREPARATION" | "DEVELOPMENT" | "INTEGRATION", release?: boolean): string;
6
- export declare function liveEmployee(client: PlatformClient, runId: string, binding: {
5
+ export declare function employeePrompt(config: EmployeeConfig, locations: Map<string, string>, team?: boolean, _phase?: "PREPARATION" | "DEVELOPMENT" | "DEPLOYMENT", _release?: boolean, child?: boolean): string;
6
+ export declare function liveEmployee(client: Pick<PlatformClient, "employeeConfig" | "employeeTool">, runId: string, binding: {
7
7
  hostId: string;
8
8
  generation: number;
9
9
  turnId: string;
10
10
  member: TeamMember;
11
- }, initial: EmployeeConfig, runRoot: string, team?: boolean, release?: boolean, phase?: "PREPARATION" | "DEVELOPMENT" | "INTEGRATION", isClosing?: () => boolean): {
11
+ child?: boolean;
12
+ }, initial: EmployeeConfig, runRoot: string, team?: boolean, release?: boolean, phase?: "PREPARATION" | "DEVELOPMENT" | "DEPLOYMENT", isClosing?: () => boolean, executionContext?: () => string, onTerminalClose?: () => void, options?: {
13
+ child?: boolean;
14
+ }): {
12
15
  extension: ExtensionFactory;
13
16
  attach: (session: AgentSession) => void;
14
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"live-employee.d.ts","sourceRoot":"","sources":["../src/live-employee.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EAEtB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAChC,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAGnF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,UAAO,EACX,KAAK,GAAE,aAAa,GAAG,aAAa,GAAG,aAA6B,EACpE,OAAO,UAAQ,UAWhB;AACD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,EACnF,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,EACf,IAAI,UAAO,EACX,OAAO,UAAQ,EACf,KAAK,GAAE,aAAa,GAAG,aAAa,GAAG,aAA6B,EACpE,SAAS,GAAE,MAAM,OAAqB;;sBA6Gb,YAAY;EA6BtC"}
1
+ {"version":3,"file":"live-employee.d.ts","sourceRoot":"","sources":["../src/live-employee.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,YAAY,EAQjB,KAAK,gBAAgB,EAGtB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAChC,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAGnF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,UAAO,EACX,MAAM,GAAE,aAAa,GAAG,aAAa,GAAG,YAA4B,EACpE,QAAQ,UAAQ,EAChB,KAAK,UAAQ,UAgCd;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,gBAAgB,GAAG,cAAc,CAAC,EAC/D,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,EACD,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,EACf,IAAI,UAAO,EACX,OAAO,UAAQ,EACf,KAAK,GAAE,aAAa,GAAG,aAAa,GAAG,YAA4B,EACnE,SAAS,GAAE,MAAM,OAAqB,EACtC,gBAAgB,GAAE,MAAM,MAAiB,EACzC,eAAe,GAAE,MAAM,IAAe,EACtC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO;;sBA+RR,YAAY;EA+CtC"}
@@ -1,36 +1,58 @@
1
- import { createHash } from "node:crypto";
2
- import { mkdir, realpath, rename, rm, writeFile } from "node:fs/promises";
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { mkdir, readFile, realpath, rename, rm, writeFile } from "node:fs/promises";
3
3
  import { isAbsolute, join, relative, resolve } from "node:path";
4
- import { createReadToolDefinition, } from "@earendil-works/pi-coding-agent";
4
+ import { createInitialSystemMessage } from "@earendil-works/pi-ai";
5
+ import { createBashToolDefinition, createEditToolDefinition, createFindToolDefinition, createGrepToolDefinition, createLsToolDefinition, createReadToolDefinition, createWriteToolDefinition, } from "@earendil-works/pi-coding-agent";
5
6
  import { Type } from "typebox";
6
- import { EMPLOYEE_EXECUTION_PROTOCOL } from "./stage-delivery.js";
7
+ import { activeProfile, aipBaseHome } from "./paths.js";
8
+ import { EMPLOYEE_EXECUTION_PROTOCOL, STAGE_DELIVERY_PROTOCOLS } from "./stage-delivery.js";
9
+ import { applyDispatchedTools, rememberTool } from "./tool-dispatch.js";
7
10
  const SKILL_FILE_UNAVAILABLE = "EMPLOYEE_SKILL_FILE_UNAVAILABLE:读取失败,未加载正文。请使用你自己当前 Skill 目录中的完整路径重试,不要沿用主管或其他成员的绝对路径;若文件已移除或未绑定,不得把此错误当作资料正文。";
8
- export function employeePrompt(config, locations, team = true, phase = "DEVELOPMENT", release = false) {
9
- return `${config.agent.systemPrompt}\n\n当前成员:${config.agent.name}(${config.member})。${EMPLOYEE_EXECUTION_PROTOCOL}\n${config.member === "supervisor" ? (!team ? `当前是主会话,没有可调用的子成员;阶段结果由本会话提交,不调用 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
10
- .filter((file) => file.path === "SKILL.md")
11
- .map((file) => `${file.name}:${file.description ?? ""}\nSKILL.md:${locations.get(`${file.id}:${file.path}`)}`)
12
- .join("\n") || "无"} `;
11
+ export function employeePrompt(config, locations, team = true, _phase = "DEVELOPMENT", _release = false, child = false) {
12
+ if (!config.nodeRules || typeof config.nodeRules.prompt !== "string")
13
+ throw new Error("STAGE_DELIVERY_CONFIGURATION_MISSING");
14
+ const rules = config.nodeRules;
15
+ const protocol = rules.node ? STAGE_DELIVERY_PROTOCOLS[rules.node] : null;
16
+ const responsible = config.member === "supervisor" && !child;
17
+ return [
18
+ config.agent.systemPrompt,
19
+ EMPLOYEE_EXECUTION_PROTOCOL,
20
+ `当前成员:${config.agent.name}(${config.member})。当前节点:${rules.node ?? "阶段外交流"}。`,
21
+ responsible
22
+ ? `当前是${team ? "团队" : "个人"}主会话。阶段结果由本会话提交,不调用 submit_member_result。${protocol ? `当前阶段完成工具:${protocol.tool}。` : "当前为阶段外交流,仅允许读取与解释;不授权修改业务代码、提交或推送、部署、执行交付或改变验收候选。需要修改时须通过工单显式返回研发。"}`
23
+ : "当前是子成员会话,完成分派任务后调用 submit_member_result 向主负责人汇报;不负责全套阶段交付,不调用主负责人完成工具。",
24
+ `团队协作要求:${config.collaborationInstructions}`,
25
+ ...(rules.node
26
+ ? [
27
+ `节点规则(${rules.node} · ${rules.source} ${rules.sourceId} · 版本 ${rules.revision}):\n${rules.prompt}`,
28
+ `只读工具协议:\n${protocol.instructions}`,
29
+ ]
30
+ : []),
31
+ `平台执行事实:\n${JSON.stringify(config.executionFacts)}`,
32
+ `当前绑定技能目录(元数据,正文通过 read 读取):\n${config.agent.skills
33
+ .filter((file) => file.path === "SKILL.md")
34
+ .map((file) => `${file.name}:${file.description ?? ""}\nSKILL.md:${locations.get(`${file.id}:${file.path}`)}`)
35
+ .join("\n") || "无"}`,
36
+ ].join("\n\n");
13
37
  }
14
- export function liveEmployee(client, runId, binding, initial, runRoot, team = true, release = false, phase = "DEVELOPMENT", isClosing = () => false) {
38
+ export function liveEmployee(client, runId, binding, initial, runRoot, team = true, release = false, phase = "DEVELOPMENT", isClosing = () => false, executionContext = () => "", onTerminalClose = () => { }, options = {}) {
15
39
  let current = initial;
40
+ let round = initial;
41
+ let roundInput;
42
+ let roundFailure;
43
+ let roundId = randomUUID();
44
+ let roundRecorded = false;
45
+ let roundLocations = skillLocations(runRoot, binding.member, initial.agent.skills);
16
46
  let locations = new Map();
17
- const required = binding.member === "supervisor"
18
- ? [
19
- ...(!release && team ? ["subagent"] : []),
20
- release
21
- ? "submit_pull_requests"
22
- : phase === "DEVELOPMENT"
23
- ? "complete_development"
24
- : "submit_delivery",
25
- ...(release ? ["request_code_changes"] : []),
26
- "update_question",
27
- "report_blocker",
28
- ]
29
- : ["submit_member_result"];
30
47
  let refreshTail = Promise.resolve();
31
48
  const read = (purpose = "MODEL", file) => {
32
49
  const result = refreshTail.then(async () => {
33
- current = await client.employeeConfig(runId, { ...binding, purpose, ...file });
50
+ current = await client.employeeConfig(runId, {
51
+ ...binding,
52
+ ...(options.child ? { child: true } : {}),
53
+ purpose,
54
+ ...file,
55
+ });
34
56
  const nextLocations = skillLocations(runRoot, binding.member, current.agent.skills);
35
57
  for (const [key, path] of locations)
36
58
  if (!nextLocations.has(key))
@@ -43,16 +65,120 @@ export function liveEmployee(client, runId, binding, initial, runRoot, team = tr
43
65
  refreshTail = result.then(() => undefined, () => undefined);
44
66
  return result;
45
67
  };
46
- const prompt = () => release
47
- ? `${employeePrompt(current, locations, team, phase, true)}\n当前是上线准备:读取测试交接和最新分支代码,核实并更新上线清单后调用 submit_pull_requests;不以 commit 或 tree hash 作门禁。用户明确要求应用代码修改时调用 request_code_changes 返回开发,文档更新或讨论无需退回。不执行实际发布、知识整理和关单。`
48
- : employeePrompt(current, locations, team, phase);
68
+ const refreshRound = async () => {
69
+ try {
70
+ const config = await read();
71
+ if (!config.nodeRules || typeof config.nodeRules.prompt !== "string")
72
+ throw new Error("STAGE_DELIVERY_CONFIGURATION_MISSING");
73
+ round = config;
74
+ roundId = randomUUID();
75
+ roundRecorded = false;
76
+ roundLocations = new Map(locations);
77
+ roundFailure = undefined;
78
+ }
79
+ catch (error) {
80
+ roundFailure = error;
81
+ throw error;
82
+ }
83
+ };
84
+ const refreshInput = async (messages) => {
85
+ if (roundFailure)
86
+ throw roundFailure;
87
+ const input = messages.findLast((message) => message.role === "user");
88
+ const inputKey = input ? JSON.stringify(input) : undefined;
89
+ if (roundInput !== undefined && inputKey !== undefined && inputKey !== roundInput)
90
+ await refreshRound();
91
+ if (inputKey !== undefined)
92
+ roundInput = inputKey;
93
+ };
94
+ const prompt = () => `${employeePrompt(round, roundLocations, team, phase, release, options.child)}\n\n${executionContext()}`;
49
95
  const extension = (api) => {
96
+ // 开发验收专用:只保存实际请求的系统指令与工具定义,不记录对话/凭证。
97
+ if (process.env.AIP_INSTRUCTION_EVIDENCE_DIR)
98
+ api.on("before_provider_request", async (event, context) => {
99
+ const payload = event.payload;
100
+ const messages = Array.isArray(payload.messages) ? payload.messages : [];
101
+ const input = Array.isArray(payload.input) ? payload.input : [];
102
+ const request = {
103
+ system: payload.system ??
104
+ payload.instructions ??
105
+ [...messages, ...input].filter((message) => message &&
106
+ typeof message === "object" &&
107
+ ["system", "developer"].includes(String(message.role))),
108
+ tools: payload.tools ?? [],
109
+ };
110
+ const secrets = Object.values(current.environmentVariables ?? {}).filter((v) => v.length >= 4);
111
+ const redact = (value) => {
112
+ if (typeof value === "string")
113
+ return secrets.reduce((text, secret) => text.split(secret).join("[REDACTED]"), value);
114
+ if (Array.isArray(value))
115
+ return value.map(redact);
116
+ if (value && typeof value === "object")
117
+ return Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, redact(nested)]));
118
+ return value;
119
+ };
120
+ const safeRequest = redact(request);
121
+ const captureId = randomUUID();
122
+ const directory = process.env.AIP_INSTRUCTION_EVIDENCE_DIR;
123
+ await mkdir(directory, { recursive: true, mode: 0o700 });
124
+ await writeFile(resolve(directory, `${captureId}.json`), JSON.stringify({
125
+ captureId,
126
+ capturedAt: new Date().toISOString(),
127
+ runId,
128
+ turnId: binding.turnId,
129
+ member: binding.member,
130
+ sessionId: context.sessionManager.getSessionId(),
131
+ child: Boolean(options.child),
132
+ nodeRules: redact(round.nodeRules),
133
+ collaborationSource: round.collaborationSource,
134
+ employee: { id: round.agent.id, revision: round.agent.revision },
135
+ configHash: round.configHash,
136
+ dispatchedTools: {
137
+ activeToolNames: round.activeToolNames,
138
+ toolDefinitions: round.toolDefinitions,
139
+ },
140
+ runtimeSourceHash: contentHash(await readFile(new URL(import.meta.url), "utf8")),
141
+ systemPrompt: redact(prompt()),
142
+ request: safeRequest,
143
+ requestHash: contentHash(JSON.stringify(safeRequest)),
144
+ }, null, 2), { mode: 0o600, flag: "wx" });
145
+ });
146
+ const registerImplementation = (tool) => {
147
+ rememberTool(initial.toolDefinitions, tool.name, tool, api);
148
+ api.registerTool(tool);
149
+ };
150
+ registerImplementation(createWriteToolDefinition(runRoot));
151
+ registerImplementation(createEditToolDefinition(runRoot));
152
+ registerImplementation(createGrepToolDefinition(runRoot));
153
+ registerImplementation(createFindToolDefinition(runRoot));
154
+ registerImplementation(createLsToolDefinition(runRoot));
155
+ const bash = createBashToolDefinition(runRoot);
156
+ registerImplementation({
157
+ ...bash,
158
+ async execute(id, args, signal, onUpdate, context) {
159
+ const config = await read("TOOL");
160
+ if (!config.activeToolNames.includes("bash"))
161
+ throw new Error("EMPLOYEE_TOOL_DISABLED");
162
+ // Keep credentials in this invocation's child environment, never in process.env or prompts.
163
+ return createBashToolDefinition(context.cwd, {
164
+ spawnHook: (spawn) => ({
165
+ ...spawn,
166
+ env: {
167
+ ...spawn.env,
168
+ ...config.environmentVariables,
169
+ AIP_HOME: aipBaseHome(),
170
+ AIP_PROFILE: activeProfile(),
171
+ },
172
+ }),
173
+ }).execute(id, args, signal, onUpdate, context);
174
+ },
175
+ });
50
176
  const nativeRead = createReadToolDefinition(runRoot);
51
- api.registerTool({
177
+ registerImplementation({
52
178
  ...nativeRead,
53
179
  async execute(id, args, signal, onUpdate, context) {
54
180
  await read("TOOL");
55
- if (!current.agent.enabledTools.includes("read"))
181
+ if (!current.activeToolNames.includes("read"))
56
182
  throw new Error("EMPLOYEE_TOOL_DISABLED");
57
183
  const absolute = resolve(context.cwd, args.path);
58
184
  const resourceRoot = join(runRoot, ".aip-resources");
@@ -79,10 +205,10 @@ export function liveEmployee(client, runId, binding, initial, runRoot, team = tr
79
205
  };
80
206
  },
81
207
  });
82
- for (const definition of initial.toolDefinitions)
83
- api.registerTool({
208
+ for (const definition of initial.toolDefinitions.filter((tool) => tool.execution === "PLATFORM"))
209
+ registerImplementation({
84
210
  name: definition.name,
85
- label: definition.name,
211
+ label: definition.label,
86
212
  description: definition.description,
87
213
  parameters: Type.Unsafe(JSON.parse(definition.parametersJson)),
88
214
  async execute(_id, args) {
@@ -94,44 +220,114 @@ export function liveEmployee(client, runId, binding, initial, runRoot, team = tr
94
220
  return { content: [{ type: "text", text: result.content }], details: {} };
95
221
  },
96
222
  });
97
- api.on("before_agent_start", async () => {
98
- const config = await read();
99
- api.setActiveTools([...config.agent.enabledTools, ...required]);
100
- return { systemPrompt: prompt() };
223
+ api.on("before_agent_start", async (event, context) => {
224
+ // Pi-subagents 先投影通用子会话头;清除其 forced override,保留本扩展的系统投影。
225
+ if (event?.systemPromptOptions)
226
+ delete event.systemPromptOptions.forceSystemPrompt;
227
+ try {
228
+ await refreshRound();
229
+ roundInput = undefined;
230
+ applyDispatchedTools(api, initial.toolDefinitions, round.toolDefinitions, round.activeToolNames);
231
+ }
232
+ catch (error) {
233
+ context?.abort();
234
+ throw error;
235
+ }
236
+ // 投影统一由 context_with_system 提供,避免 SDK 的 forced prompt 覆盖新消息规则。
237
+ });
238
+ api.on("context_with_system", async (event, context) => {
239
+ // 主会话已在 prepareRequest 读取;子进程只提供扩展入口,失败时取消真实请求。
240
+ try {
241
+ await refreshInput(event.messages);
242
+ }
243
+ catch (error) {
244
+ context?.abort();
245
+ throw error;
246
+ }
247
+ const config = current;
248
+ const active = config.activeToolNames;
249
+ applyDispatchedTools(api, initial.toolDefinitions, config.toolDefinitions, active);
250
+ const systemPrompt = prompt();
251
+ if (!roundRecorded) {
252
+ const systemPromptHash = createHash("sha256").update(systemPrompt).digest("hex");
253
+ const previous = context.sessionManager
254
+ .getBranch()
255
+ .findLast((entry) => entry.type === "custom" && entry.customType === "employee-skill-model");
256
+ const data = previous?.type === "custom"
257
+ ? previous.data
258
+ : undefined;
259
+ const previousHash = data?.systemPromptHash ??
260
+ (typeof data?.systemPrompt === "string"
261
+ ? createHash("sha256").update(data.systemPrompt).digest("hex")
262
+ : undefined);
263
+ api.appendEntry("employee-skill-model", {
264
+ employeeId: round.agent.id,
265
+ member: binding.member,
266
+ turnId: binding.turnId,
267
+ roundId,
268
+ configRevision: round.agent.revision,
269
+ systemPromptHash,
270
+ ...(systemPromptHash !== previousHash ? { systemPrompt } : {}),
271
+ });
272
+ roundRecorded = true;
273
+ }
274
+ const system = createInitialSystemMessage(systemPrompt, api.getAllTools().filter((tool) => active.includes(tool.name)));
275
+ return {
276
+ messages: [
277
+ ...(system ? [system] : []),
278
+ ...event.messages.filter((message) => message.role !== "system"),
279
+ ],
280
+ };
101
281
  });
102
282
  api.on("tool_call", async (event) => {
103
283
  if (isClosing())
104
- return { block: true, reason: "本阶段已交付,仅可完成文字回复。" };
284
+ return { block: true, reason: "本轮自动执行已结束,请等待用户操作,仅可完成文字回复。" };
105
285
  const config = await read("TOOL");
106
- if (!required.includes(event.toolName) && !config.agent.enabledTools.includes(event.toolName))
286
+ if (!config.activeToolNames.includes(event.toolName))
107
287
  return { block: true, reason: "EMPLOYEE_TOOL_DISABLED:当前员工已禁用此工具" };
108
288
  return undefined;
109
289
  });
110
290
  };
111
291
  function attach(session) {
292
+ const prepareRequest = session.agent.prepareRequest;
293
+ session.agent.prepareRequest = async (request, signal) => {
294
+ const prior = await prepareRequest?.(request, signal);
295
+ // 该 SDK 边界不会吞掉配置错误;排队消息已消费,工具续轮没有新的 user。
296
+ await refreshInput((prior?.context ?? request.context).messages);
297
+ return prior ?? undefined;
298
+ };
112
299
  const original = session.agent.prepareNextTurnWithContext;
113
300
  session.agent.prepareNextTurnWithContext = async (turn, signal) => {
114
301
  const prior = await original?.(turn, signal);
115
302
  if (isClosing()) {
303
+ onTerminalClose();
116
304
  session.agent.abort();
117
305
  session.setActiveToolsByName([]);
118
- return { ...prior, context: { ...(prior?.context ?? turn.context), tools: [] } };
306
+ const context = prior?.context ?? turn.context;
307
+ const system = createInitialSystemMessage(prompt(), []);
308
+ return {
309
+ ...prior,
310
+ context: {
311
+ ...context,
312
+ messages: [
313
+ ...(system ? [system] : []),
314
+ ...context.messages.filter((message) => message.role !== "system"),
315
+ ],
316
+ },
317
+ };
119
318
  }
120
- const config = await read();
121
- session.setActiveToolsByName([...config.agent.enabledTools, ...required]);
319
+ const config = current;
320
+ session.setActiveToolsByName(config.activeToolNames);
122
321
  const systemPrompt = prompt();
123
- session.sessionManager.appendCustomEntry("employee-skill-model", {
124
- employeeId: config.agent.id,
125
- member: binding.member,
126
- configRevision: config.agent.revision,
127
- systemPrompt,
128
- });
322
+ const system = createInitialSystemMessage(systemPrompt, session.agent.state.tools.slice());
129
323
  return {
130
324
  ...prior,
131
325
  context: {
132
326
  ...(prior?.context ?? turn.context),
133
- systemPrompt,
134
- tools: session.agent.state.tools.slice(),
327
+ messages: [
328
+ ...(system ? [system] : []),
329
+ ...(prior?.context ?? turn.context).messages.filter((message) => message.role !== "system"),
330
+ ],
135
331
  },
136
332
  };
137
333
  };
@@ -1 +1 @@
1
- {"version":3,"file":"live-employee.js","sourceRoot":"","sources":["../src/live-employee.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"live-employee.js","sourceRoot":"","sources":["../src/live-employee.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export declare function inspectHandoffWorkspace(cwd: string): Promise<{
2
+ status: "CHECKED";
3
+ uncommitted: boolean;
4
+ unpushedCommits: number;
5
+ reason?: never;
6
+ } | {
7
+ status: "UNKNOWN";
8
+ reason: string;
9
+ uncommitted?: never;
10
+ unpushedCommits?: never;
11
+ }>;
12
+ export declare function synchronizeLocalIntake(cwd: string, commitSha: string): Promise<void>;
13
+ /** 仅回传已知冲突的固定说明,Git stderr 可能包含凭证,不作为平台文案。 */
14
+ export declare function localIntakeFailure(error: unknown): {
15
+ code: string;
16
+ message: string;
17
+ } | undefined;
18
+ /** Reconcile a retained execution with the current remote branch without discarding its work. */
19
+ export declare function synchronizeRemoteWorkspace(cwd: string, branch: string): Promise<void>;
20
+ //# sourceMappingURL=local-handoff-workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-handoff-workspace.d.ts","sourceRoot":"","sources":["../src/local-handoff-workspace.ts"],"names":[],"mappings":"AAKA,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM;;;;;;;;;;GAqBxD;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAgB1E;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO;;;cAWhD;AAED,iGAAiG;AACjG,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBA4B3E"}
@@ -0,0 +1,80 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ const exec = promisify(execFile);
4
+ export async function inspectHandoffWorkspace(cwd) {
5
+ try {
6
+ const branch = (await exec("git", ["branch", "--show-current"], { cwd })).stdout.trim();
7
+ if (!branch)
8
+ throw new Error("WORKTREE_DETACHED");
9
+ // The baseline upstream and stale remote-tracking refs cannot prove a delivery was pushed.
10
+ await exec("git", ["fetch", "origin", `+refs/heads/${branch}:refs/remotes/origin/${branch}`], {
11
+ cwd,
12
+ timeout: 15_000,
13
+ });
14
+ const [status, ahead] = await Promise.all([
15
+ exec("git", ["status", "--porcelain"], { cwd }),
16
+ exec("git", ["rev-list", "--count", `refs/remotes/origin/${branch}..HEAD`], { cwd }),
17
+ ]);
18
+ return {
19
+ status: "CHECKED",
20
+ uncommitted: Boolean(status.stdout.trim()),
21
+ unpushedCommits: Number(ahead.stdout.trim()),
22
+ };
23
+ }
24
+ catch {
25
+ return { status: "UNKNOWN", reason: "无法核对工作区修改或上游分支,请在原 Host 检查" };
26
+ }
27
+ }
28
+ export async function synchronizeLocalIntake(cwd, commitSha) {
29
+ if (!/^[a-f0-9]{40,64}$/u.test(commitSha))
30
+ throw new Error("LOCAL_INTAKE_COMMIT_INVALID");
31
+ const status = await exec("git", ["status", "--porcelain"], { cwd });
32
+ if (status.stdout.trim())
33
+ throw new Error("LOCAL_INTAKE_WORKTREE_DIRTY:原工作区有未提交修改,请先处理后再继续。");
34
+ await exec("git", ["fetch", "origin", commitSha], { cwd });
35
+ const head = (await exec("git", ["rev-parse", "HEAD"], { cwd })).stdout.trim();
36
+ if (head === commitSha)
37
+ return;
38
+ try {
39
+ await exec("git", ["merge-base", "--is-ancestor", head, commitSha], { cwd });
40
+ }
41
+ catch {
42
+ throw new Error("LOCAL_INTAKE_WORKTREE_DIVERGED:原工作区与接回提交不一致,请先处理,不自动覆盖。");
43
+ }
44
+ await exec("git", ["merge", "--ff-only", commitSha], { cwd });
45
+ }
46
+ /** 仅回传已知冲突的固定说明,Git stderr 可能包含凭证,不作为平台文案。 */
47
+ export function localIntakeFailure(error) {
48
+ const descriptions = {
49
+ LOCAL_INTAKE_WORKTREE_DIRTY: "原 Host 工作区有未提交修改,请先提交或自行处理修改,再重新读取分支并接回。平台没有覆盖这些修改。",
50
+ LOCAL_INTAKE_WORKTREE_DIVERGED: "原 Host 工作区与接回提交已分叉,请先核对并处理分支,再重新读取分支并接回。平台没有覆盖原工作区。",
51
+ LOCAL_INTAKE_COMMIT_INVALID: "接回提交标识无效,请重新读取分支并接回。",
52
+ LOCAL_INTAKE_PROJECT_MISMATCH: "接回项目或分支与原工作区不匹配,请核对项目分支后重新接回。",
53
+ };
54
+ const code = error instanceof Error ? error.message.split(/[::]/u, 1)[0] : undefined;
55
+ return code && descriptions[code] ? { code, message: descriptions[code] } : undefined;
56
+ }
57
+ /** Reconcile a retained execution with the current remote branch without discarding its work. */
58
+ export async function synchronizeRemoteWorkspace(cwd, branch) {
59
+ await exec("git", ["fetch", "--prune", "origin"], { cwd }).catch(() => {
60
+ throw new Error("CODING_REPOSITORY_ACCESS_FAILED");
61
+ });
62
+ const remote = `refs/remotes/origin/${branch}`;
63
+ const exists = await exec("git", ["show-ref", "--verify", "--quiet", remote], { cwd }).then(() => true, () => false);
64
+ if (!exists)
65
+ throw new Error("CODING_BRANCH_NOT_PUBLISHED:远端尚无工单分支,请先推送后再继续。");
66
+ await exec("git", ["branch", "--set-upstream-to", `origin/${branch}`, branch], { cwd });
67
+ const counts = (await exec("git", ["rev-list", "--left-right", "--count", `HEAD...${remote}`], { cwd })).stdout
68
+ .trim()
69
+ .split(/\s+/u)
70
+ .map(Number);
71
+ if (!counts[1])
72
+ return; // Equal, or only unpublished local commits: retain the local work.
73
+ if (counts[0])
74
+ throw new Error("CODING_WORKTREE_DIVERGED:本地与远端工单分支已分叉,请先处理分支差异,未覆盖任何修改。");
75
+ const status = await exec("git", ["status", "--porcelain"], { cwd });
76
+ if (status.stdout.trim())
77
+ throw new Error("CODING_WORKTREE_REMOTE_AHEAD_DIRTY:远端已有新提交且本地存在未提交修改,请先处理后继续。");
78
+ await exec("git", ["merge", "--ff-only", remote], { cwd });
79
+ }
80
+ //# sourceMappingURL=local-handoff-workspace.js.map