@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
@@ -0,0 +1,145 @@
1
+ import { Ajv } from "ajv";
2
+
3
+ export const qaHttpExchangeSchema = {
4
+ type: "object",
5
+ additionalProperties: false,
6
+ properties: {
7
+ step: { type: "string", minLength: 1 },
8
+ id: {
9
+ type: "string",
10
+ },
11
+ sequence: {
12
+ type: "integer",
13
+ minimum: 1,
14
+ },
15
+ startedAt: {
16
+ type: "string",
17
+ },
18
+ durationMs: {
19
+ type: "integer",
20
+ minimum: 0,
21
+ },
22
+ request: {
23
+ type: "object",
24
+ additionalProperties: false,
25
+ properties: {
26
+ method: {
27
+ type: "string",
28
+ },
29
+ url: {
30
+ type: "string",
31
+ },
32
+ headers: {
33
+ type: "object",
34
+ additionalProperties: {
35
+ type: "array",
36
+ items: {
37
+ type: "string",
38
+ },
39
+ },
40
+ },
41
+ body: {
42
+ anyOf: [
43
+ {
44
+ type: "string",
45
+ },
46
+ {
47
+ type: "null",
48
+ },
49
+ ],
50
+ },
51
+ bodyAttachment: {
52
+ type: "string",
53
+ },
54
+ },
55
+ required: ["method", "url", "headers", "body"],
56
+ },
57
+ response: {
58
+ anyOf: [
59
+ {
60
+ type: "object",
61
+ additionalProperties: false,
62
+ properties: {
63
+ status: {
64
+ type: "integer",
65
+ minimum: 100,
66
+ maximum: 599,
67
+ },
68
+ headers: {
69
+ type: "object",
70
+ additionalProperties: {
71
+ type: "array",
72
+ items: {
73
+ type: "string",
74
+ },
75
+ },
76
+ },
77
+ body: {
78
+ anyOf: [
79
+ {
80
+ type: "string",
81
+ },
82
+ {
83
+ type: "null",
84
+ },
85
+ ],
86
+ },
87
+ bodyAttachment: {
88
+ type: "string",
89
+ },
90
+ },
91
+ required: ["status", "headers", "body"],
92
+ },
93
+ {
94
+ type: "null",
95
+ },
96
+ ],
97
+ },
98
+ error: {
99
+ type: "string",
100
+ },
101
+ },
102
+ required: ["id", "sequence", "startedAt", "durationMs", "request", "response"],
103
+ } ;
104
+ const ajv = new Ajv({ allErrors: true, strict: false });
105
+ const validate = ajv.compile(qaHttpExchangeSchema);
106
+ export function parseQaHttpExchange(value ) {
107
+ if (!validate(value))
108
+ throw new Error(`QA_HTTP_EXCHANGE_INVALID: ${ajv.errorsText(validate.errors)}`);
109
+ return value ;
110
+ }
111
+
112
+ export const qaEvidenceReferencesSchema = {
113
+ type: "array",
114
+ items: {
115
+ oneOf: [
116
+ {
117
+ type: "object",
118
+ additionalProperties: false,
119
+ required: ["kind", "exchangeId", "side", "label"],
120
+ properties: {
121
+ kind: { const: "http" },
122
+ exchangeId: { type: "string", minLength: 1 },
123
+ side: { enum: ["request", "response"] },
124
+ label: { type: "string" },
125
+ },
126
+ },
127
+ {
128
+ type: "object",
129
+ additionalProperties: false,
130
+ required: ["kind", "filename", "label"],
131
+ properties: {
132
+ kind: { const: "attachment" },
133
+ filename: { type: "string", minLength: 1 },
134
+ label: { type: "string" },
135
+ },
136
+ },
137
+ ],
138
+ },
139
+ } ;
140
+
141
+ const validateReferences = new Ajv({ strict: false }).compile(qaEvidenceReferencesSchema);
142
+ export function parseQaEvidenceReferences(value ) {
143
+ if (!validateReferences(value)) throw new Error("QA_EVIDENCE_REFERENCES_INVALID");
144
+ return value ;
145
+ }
@@ -0,0 +1,12 @@
1
+ import type { QaHostCommandPayload } from "@ai-platform/api-contracts";
2
+ type Project = Omit<QaHostCommandPayload["project"], "mainBranch">;
3
+ export declare function qaProjectDirectory(project: Project): string;
4
+ export declare function gitQa(args: string[], cwd?: string): Promise<string>;
5
+ /** 同一 Host 的同项目任务排队;文件锁同时保护 CLI 与 daemon。 */
6
+ export declare function withQaProject<T>(project: Project, work: () => Promise<T>): Promise<T>;
7
+ /** 仅更新 Host 专用检出,不接触开发者工作目录。调用期间必须持有项目锁。 */
8
+ export declare function prepareQaCheckout({ project }: {
9
+ project: Project;
10
+ }): Promise<string>;
11
+ export {};
12
+ //# sourceMappingURL=qa-project-checkout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qa-project-checkout.d.ts","sourceRoot":"","sources":["../src/qa-project-checkout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAIvE,KAAK,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC;AAGnE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,UAGlD;AACD,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,mBAIvD;AAED,6CAA6C;AAC7C,wBAAsB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAoB3F;AAED,4CAA4C;AAC5C,wBAAsB,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,mBAqBxE"}
@@ -0,0 +1,68 @@
1
+ import { execFile } from "node:child_process";
2
+ import { access, mkdir } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { promisify } from "node:util";
5
+ import lockfile from "proper-lockfile";
6
+ import { paths } from "./paths.js";
7
+ const exec = promisify(execFile);
8
+ const pending = new Map();
9
+ export function qaProjectDirectory(project) {
10
+ if (!/^[a-zA-Z0-9_-]+$/u.test(project.id))
11
+ throw new Error("QA_PROJECT_ID_INVALID");
12
+ return join(paths().workspaceRoot, "qa-projects", project.id);
13
+ }
14
+ export async function gitQa(args, cwd) {
15
+ return (await exec("git", args, { cwd, encoding: "utf8", maxBuffer: 1024 * 1024, timeout: 60_000 })).stdout.trim();
16
+ }
17
+ /** 同一 Host 的同项目任务排队;文件锁同时保护 CLI 与 daemon。 */
18
+ export async function withQaProject(project, work) {
19
+ const directory = qaProjectDirectory(project);
20
+ const previous = pending.get(directory) ?? Promise.resolve();
21
+ const task = previous
22
+ .catch(() => undefined)
23
+ .then(async () => {
24
+ await mkdir(directory, { recursive: true, mode: 0o700 });
25
+ const release = await lockfile.lock(directory);
26
+ try {
27
+ return await work();
28
+ }
29
+ finally {
30
+ await release();
31
+ }
32
+ });
33
+ pending.set(directory, task);
34
+ try {
35
+ return await task;
36
+ }
37
+ finally {
38
+ if (pending.get(directory) === task)
39
+ pending.delete(directory);
40
+ }
41
+ }
42
+ /** 仅更新 Host 专用检出,不接触开发者工作目录。调用期间必须持有项目锁。 */
43
+ export async function prepareQaCheckout({ project }) {
44
+ if (!project.commitSha || !/^[a-f\d]{40}$/iu.test(project.commitSha))
45
+ throw new Error("QA_COMMIT_REQUIRED");
46
+ if (!project.remoteUrl || project.remoteUrl.startsWith("-"))
47
+ throw new Error("QA_REMOTE_INVALID");
48
+ await gitQa(["check-ref-format", `refs/heads/${project.branch}`]);
49
+ const repository = join(qaProjectDirectory(project), "repository");
50
+ try {
51
+ await access(join(repository, ".git"));
52
+ }
53
+ catch (error) {
54
+ if (error.code !== "ENOENT")
55
+ throw error;
56
+ await gitQa(["init", repository]);
57
+ await gitQa(["remote", "add", "origin", project.remoteUrl], repository);
58
+ }
59
+ await gitQa(["remote", "set-url", "origin", project.remoteUrl], repository);
60
+ await gitQa(["fetch", "--no-tags", "origin", project.commitSha], repository);
61
+ // 上一次报告已独立保存;清理专用仓库内产物,避免将旧结果当成本次结果。
62
+ await gitQa(["clean", "-ffdx"], repository);
63
+ await gitQa(["checkout", "--detach", "--force", project.commitSha], repository);
64
+ if ((await gitQa(["rev-parse", "HEAD"], repository)) !== project.commitSha.toLowerCase())
65
+ throw new Error("QA_CHECKOUT_MISMATCH");
66
+ return repository;
67
+ }
68
+ //# sourceMappingURL=qa-project-checkout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qa-project-checkout.js","sourceRoot":"","sources":["../src/qa-project-checkout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import type { LocalCodingHostClaimedCommand, QaAttachmentView, QaCheckpoint, QaHostCommandPayload, QaPreparedWorkspace } from "@ai-platform/api-contracts";
2
+ import type { ExtensionFactory } from "@earendil-works/pi-coding-agent";
3
+ import type { PiModelService } from "./pi-model-service.js";
4
+ import type { PlatformClient } from "./platform-client.js";
5
+ import { bindHostTool } from "./tool-dispatch.js";
6
+ type QaSessionInput = Omit<QaHostCommandPayload, "employee">;
7
+ type Identity = {
8
+ hostId: string;
9
+ generation: number;
10
+ turnId: string;
11
+ };
12
+ type SessionEvent = {
13
+ id: string;
14
+ kind: string;
15
+ contentMarkdown: string;
16
+ payload?: Record<string, unknown>;
17
+ };
18
+ export interface QaSessionClient {
19
+ qaReadTestPlan: PlatformClient["qaReadTestPlan"];
20
+ qaSubmitTestPlan: PlatformClient["qaSubmitTestPlan"];
21
+ qaReadResults: PlatformClient["qaReadResults"];
22
+ qaReportDefects: PlatformClient["qaReportDefects"];
23
+ qaRequestRework: PlatformClient["qaRequestRework"];
24
+ qaResolveDefect: PlatformClient["qaResolveDefect"];
25
+ qaCompleteReview: PlatformClient["qaCompleteReview"];
26
+ qaReportAssetMerge: PlatformClient["qaReportAssetMerge"];
27
+ qaEmployeeConfig: PlatformClient["employeeConfig"];
28
+ qaEmployeeTool: PlatformClient["employeeTool"];
29
+ qaSessionEvents(id: string, body: Identity & {
30
+ events: SessionEvent[];
31
+ }): Promise<unknown>;
32
+ qaRequestExecution(id: string, body: Identity & {
33
+ branch: string;
34
+ environment: string;
35
+ caseIds?: string[];
36
+ domains?: string[];
37
+ note?: string;
38
+ }): Promise<unknown>;
39
+ qaUploadSessionAttachment(id: string, body: Identity & {
40
+ filename: string;
41
+ mediaType: string;
42
+ contentBase64: string;
43
+ }): Promise<QaAttachmentView>;
44
+ qaSubmitVerification(id: string, body: Identity & {
45
+ toolCallId: string;
46
+ content: string;
47
+ testItemIds: string[];
48
+ expected: string;
49
+ actual: string;
50
+ checkpoints: QaCheckpoint[];
51
+ unverifiableReason?: string;
52
+ steps: string[];
53
+ conclusion: "PASSED" | "FAILED" | "UNVERIFIABLE";
54
+ attachmentIds: string[];
55
+ ac?: string[];
56
+ }): Promise<unknown>;
57
+ qaSubmitConclusion(id: string, body: Identity & {
58
+ toolCallId: string;
59
+ contentMarkdown: string;
60
+ recommendation: "READY" | "NOT_READY";
61
+ unfinishedItems: string[];
62
+ risks: string[];
63
+ evidenceRefs: string[];
64
+ }): Promise<unknown>;
65
+ }
66
+ export declare class QaSessionManager {
67
+ private readonly pi;
68
+ private readonly active;
69
+ private readonly tasks;
70
+ constructor(pi: PiModelService);
71
+ isBusy(): boolean;
72
+ settled(sessionId: string): Promise<void>;
73
+ execute(client: QaSessionClient, { hostId, generation }: {
74
+ hostId: string;
75
+ generation: number;
76
+ }, command: LocalCodingHostClaimedCommand): Promise<void>;
77
+ private run;
78
+ }
79
+ export declare function prepareQaProject(input: QaSessionInput): Promise<string>;
80
+ export declare function prepareQaWorkspace(input: QaSessionInput, cwd: string): Promise<QaPreparedWorkspace>;
81
+ export declare function currentQaBranch(cwd: string): Promise<string>;
82
+ /** 只采集 Git 事实;未知状态直接报错,不替 Agent 合并、推送或重试。 */
83
+ export declare function readQaAssetState(cwd: string, remoteUrl: string, expectedBranch: string, mainBranch: string): Promise<{
84
+ sourceCommitSha: string;
85
+ mainCommitSha: string;
86
+ hasChanges: boolean;
87
+ }>;
88
+ export declare function verifyQaAssetMerge(cwd: string, remoteUrl: string, expectedBranch: string, mainBranch: string): Promise<{
89
+ sourceCommitSha: string;
90
+ mainCommitSha: string;
91
+ }>;
92
+ /** 对照批准内容及实际合入结果;主分支其他文件的并行改动不属于本次 QA。 */
93
+ export declare function qaAssetContentChanged(cwd: string, approvedSource: string, approvedMain: string, source: string, main: string): Promise<boolean>;
94
+ export declare function readQaScreenshot(cwd: string, filename: string): Promise<{
95
+ filename: string;
96
+ mediaType: string;
97
+ contentBase64: string;
98
+ }>;
99
+ export declare function qaTools(client: QaSessionClient, input: QaSessionInput, binding: Identity, cwd: string, definitions: Parameters<typeof bindHostTool>[0]): ExtensionFactory;
100
+ export {};
101
+ //# sourceMappingURL=qa-session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qa-session-manager.d.ts","sourceRoot":"","sources":["../src/qa-session-manager.ts"],"names":[],"mappings":"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"}