@evalops/maestro 0.10.42 → 0.10.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/operating-plane.d.ts.map +1 -1
- package/dist/cli/commands/operating-plane.js +3 -2
- package/dist/cli/commands/operating-plane.js.map +1 -1
- package/dist/cli/help.js +8 -6
- package/dist/cli/help.js.map +1 -1
- package/dist/cli.js +201 -96
- package/dist/codex/subagent-dispatch-table.d.ts +1 -1
- package/dist/codex/subagent-dispatch-table.js +1 -1
- package/dist/codex/subagent-dispatch-table.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/platform/a2a-completion-audit.d.ts +12 -6
- package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
- package/dist/platform/a2a-completion-audit.js +28 -20
- package/dist/platform/a2a-completion-audit.js.map +1 -1
- package/dist/platform/a2a-maestro-peer.js +8 -7
- package/dist/platform/a2a-maestro-peer.js.map +1 -1
- package/dist/platform/a2a-telemetry-inspect.d.ts +2 -2
- package/dist/platform/a2a-telemetry-inspect.d.ts.map +1 -1
- package/dist/platform/a2a-telemetry-inspect.js +3 -3
- package/dist/platform/a2a-telemetry-inspect.js.map +1 -1
- package/dist/platform/operating-plane-client.d.ts +2 -2
- package/dist/platform/operating-plane-client.d.ts.map +1 -1
- package/dist/platform/operating-plane-client.js.map +1 -1
- package/dist/platform/operating-plane-summary.d.ts +4 -4
- package/dist/platform/operating-plane-summary.d.ts.map +1 -1
- package/dist/platform/operating-plane-summary.js +39 -27
- package/dist/platform/operating-plane-summary.js.map +1 -1
- package/dist/server/session-timeline.d.ts.map +1 -1
- package/dist/server/session-timeline.js +112 -2
- package/dist/server/session-timeline.js.map +1 -1
- package/dist/tools/background/resource-monitor.d.ts.map +1 -1
- package/dist/tools/background/resource-monitor.js +8 -6
- package/dist/tools/background/resource-monitor.js.map +1 -1
- package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
- package/dist/tools/parallel-ripgrep.js +2 -2
- package/dist/tools/parallel-ripgrep.js.map +1 -1
- package/dist/tools/ripgrep-utils.d.ts +1 -0
- package/dist/tools/ripgrep-utils.d.ts.map +1 -1
- package/dist/tools/ripgrep-utils.js +4 -0
- package/dist/tools/ripgrep-utils.js.map +1 -1
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +2 -2
- package/dist/tools/search.js.map +1 -1
- package/dist/version.json +2 -2
- package/package.json +2 -2
|
@@ -35,7 +35,7 @@ export declare const CODEX_SUBAGENT_DISPATCH_TABLE: {
|
|
|
35
35
|
readonly laneId: "test-runner";
|
|
36
36
|
readonly skillId: "maestro.subagent.test-runner";
|
|
37
37
|
readonly displayName: "Maestro test runner subagent";
|
|
38
|
-
readonly description: "Delegate test execution, failure triage, and
|
|
38
|
+
readonly description: "Delegate test execution, failure triage, and result artifact capture to a target-owned Maestro child agent.";
|
|
39
39
|
readonly tags: readonly ["maestro", "subagent", "test", "ci"];
|
|
40
40
|
readonly typeAliases: readonly ["test", "qa", "ci", "ci-monitor", "test-runner"];
|
|
41
41
|
readonly capabilityAliases: readonly ["code:test", "code-test", "test:run", "test-run", "test-runner"];
|
|
@@ -37,7 +37,7 @@ export const CODEX_SUBAGENT_DISPATCH_TABLE = {
|
|
|
37
37
|
laneId: "test-runner",
|
|
38
38
|
skillId: "maestro.subagent.test-runner",
|
|
39
39
|
displayName: "Maestro test runner subagent",
|
|
40
|
-
description: "Delegate test execution, failure triage, and
|
|
40
|
+
description: "Delegate test execution, failure triage, and result artifact capture to a target-owned Maestro child agent.",
|
|
41
41
|
tags: ["maestro", "subagent", "test", "ci"],
|
|
42
42
|
typeAliases: ["test", "qa", "ci", "ci-monitor", "test-runner"],
|
|
43
43
|
capabilityAliases: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-dispatch-table.js","sourceRoot":"","sources":["../../src/codex/subagent-dispatch-table.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC5C,aAAa,EAAE,kDAAkD;IACjE,iBAAiB,EAAE,YAAY;IAC/B,aAAa,EAAE;QACd;YACC,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,8BAA8B;YACvC,WAAW,EAAE,8BAA8B;YAC3C,WAAW,EACV,oFAAoF;YACrF,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;YAC9C,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC;YAClE,iBAAiB,EAAE;gBAClB,YAAY;gBACZ,YAAY;gBACZ,WAAW;gBACX,WAAW;gBACX,gBAAgB;gBAChB,gBAAgB;aAChB;SACD;QACD;YACC,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,8BAA8B;YACvC,WAAW,EAAE,8BAA8B;YAC3C,WAAW,EACV,sFAAsF;YACvF,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC;YAC/C,WAAW,EAAE;gBACZ,WAAW;gBACX,QAAQ;gBACR,UAAU;gBACV,aAAa;gBACb,eAAe;aACf;YACD,iBAAiB,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;SACjD;QACD;YACC,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,8BAA8B;YACvC,WAAW,EAAE,8BAA8B;YAC3C,WAAW,EACV,
|
|
1
|
+
{"version":3,"file":"subagent-dispatch-table.js","sourceRoot":"","sources":["../../src/codex/subagent-dispatch-table.ts"],"names":[],"mappings":"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","sourcesContent":["export interface CodexSubagentDispatchLane {\n\tlaneId: string;\n\tskillId: string;\n\tdisplayName: string;\n\tdescription: string;\n\ttags: readonly string[];\n\ttypeAliases: readonly string[];\n\tcapabilityAliases: readonly string[];\n}\n\nexport interface CodexSubagentDispatchTable {\n\tschemaVersion: \"evalops.maestro.codex.subagent-dispatch-table.v1\";\n\tdefaultCapability: \"code:write\";\n\ta2aSkillLanes: readonly CodexSubagentDispatchLane[];\n}\n\nexport const CODEX_SUBAGENT_DISPATCH_TABLE = {\n\tschemaVersion: \"evalops.maestro.codex.subagent-dispatch-table.v1\",\n\tdefaultCapability: \"code:write\",\n\ta2aSkillLanes: [\n\t\t{\n\t\t\tlaneId: \"code-writer\",\n\t\t\tskillId: \"maestro.subagent.code-writer\",\n\t\t\tdisplayName: \"Maestro code writer subagent\",\n\t\t\tdescription:\n\t\t\t\t\"Delegate bounded implementation work to a target-owned Maestro coding child agent.\",\n\t\t\ttags: [\"maestro\", \"subagent\", \"code\", \"write\"],\n\t\t\ttypeAliases: [\"worker\", \"coder\", \"code\", \"code-writer\", \"default\"],\n\t\t\tcapabilityAliases: [\n\t\t\t\t\"code:write\",\n\t\t\t\t\"code-write\",\n\t\t\t\t\"code:edit\",\n\t\t\t\t\"code-edit\",\n\t\t\t\t\"code:implement\",\n\t\t\t\t\"code-implement\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tlaneId: \"code-review\",\n\t\t\tskillId: \"maestro.subagent.code-review\",\n\t\t\tdisplayName: \"Maestro code review subagent\",\n\t\t\tdescription:\n\t\t\t\t\"Delegate code review and risk analysis to a target-owned Maestro review child agent.\",\n\t\t\ttags: [\"maestro\", \"subagent\", \"code\", \"review\"],\n\t\t\ttypeAliases: [\n\t\t\t\t\"pr-review\",\n\t\t\t\t\"review\",\n\t\t\t\t\"reviewer\",\n\t\t\t\t\"code-review\",\n\t\t\t\t\"code-reviewer\",\n\t\t\t],\n\t\t\tcapabilityAliases: [\"code:review\", \"code-review\"],\n\t\t},\n\t\t{\n\t\t\tlaneId: \"test-runner\",\n\t\t\tskillId: \"maestro.subagent.test-runner\",\n\t\t\tdisplayName: \"Maestro test runner subagent\",\n\t\t\tdescription:\n\t\t\t\t\"Delegate test execution, failure triage, and result artifact capture to a target-owned Maestro child agent.\",\n\t\t\ttags: [\"maestro\", \"subagent\", \"test\", \"ci\"],\n\t\t\ttypeAliases: [\"test\", \"qa\", \"ci\", \"ci-monitor\", \"test-runner\"],\n\t\t\tcapabilityAliases: [\n\t\t\t\t\"code:test\",\n\t\t\t\t\"code-test\",\n\t\t\t\t\"test:run\",\n\t\t\t\t\"test-run\",\n\t\t\t\t\"test-runner\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tlaneId: \"repo-explorer\",\n\t\t\tskillId: \"maestro.subagent.repo-explorer\",\n\t\t\tdisplayName: \"Maestro repo explorer subagent\",\n\t\t\tdescription:\n\t\t\t\t\"Delegate repository inspection and context gathering to a target-owned Maestro exploration child agent.\",\n\t\t\ttags: [\"maestro\", \"subagent\", \"repo\", \"explore\"],\n\t\t\ttypeAliases: [\n\t\t\t\t\"explore\",\n\t\t\t\t\"explorer\",\n\t\t\t\t\"repo-explorer\",\n\t\t\t\t\"research\",\n\t\t\t\t\"competitive-intel\",\n\t\t\t\t\"people-research\",\n\t\t\t],\n\t\t\tcapabilityAliases: [\n\t\t\t\t\"repo:explore\",\n\t\t\t\t\"repo-explore\",\n\t\t\t\t\"repo-explorer\",\n\t\t\t\t\"code:search\",\n\t\t\t\t\"code-search\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tlaneId: \"release-shepherd\",\n\t\t\tskillId: \"maestro.subagent.release-shepherd\",\n\t\t\tdisplayName: \"Maestro release shepherd subagent\",\n\t\t\tdescription:\n\t\t\t\t\"Delegate release, rollout, and merge-follow-through work to a target-owned Maestro child agent.\",\n\t\t\ttags: [\"maestro\", \"subagent\", \"release\", \"deploy\"],\n\t\t\ttypeAliases: [\"release\", \"release-shepherd\"],\n\t\t\tcapabilityAliases: [\n\t\t\t\t\"release:shepherd\",\n\t\t\t\t\"release-shepherd\",\n\t\t\t\t\"release:manage\",\n\t\t\t\t\"release-manage\",\n\t\t\t],\n\t\t},\n\t],\n} as const satisfies CodexSubagentDispatchTable;\n\nexport const DEFAULT_CODEX_SUBAGENT_DELEGATION_CAPABILITY =\n\tCODEX_SUBAGENT_DISPATCH_TABLE.defaultCapability;\n\nfunction tokenSet(values: readonly string[]): ReadonlySet<string> {\n\treturn new Set(\n\t\tvalues\n\t\t\t.map((value) => codexSubagentSkillToken(value))\n\t\t\t.filter((token): token is string => Boolean(token)),\n\t);\n}\n\nconst lanesByTypeToken = new Map(\n\tCODEX_SUBAGENT_DISPATCH_TABLE.a2aSkillLanes.flatMap((lane) =>\n\t\tArray.from(tokenSet(lane.typeAliases), (token) => [token, lane] as const),\n\t),\n);\n\nconst lanesByCapabilityToken = new Map(\n\tCODEX_SUBAGENT_DISPATCH_TABLE.a2aSkillLanes.flatMap((lane) =>\n\t\tArray.from(\n\t\t\ttokenSet(lane.capabilityAliases),\n\t\t\t(token) => [token, lane] as const,\n\t\t),\n\t),\n);\n\nexport function codexSubagentLaneForType(\n\tvalue: string | undefined,\n): CodexSubagentDispatchLane | undefined {\n\tconst token = codexSubagentSkillToken(value);\n\treturn token ? lanesByTypeToken.get(token) : undefined;\n}\n\nexport function codexSubagentLaneForCapability(\n\tvalue: string | undefined,\n): CodexSubagentDispatchLane | undefined {\n\tconst token = codexSubagentSkillToken(value);\n\treturn token ? lanesByCapabilityToken.get(token) : undefined;\n}\n\nexport function codexSubagentTypeA2ASkillID(\n\tvalue: string | undefined,\n): string | undefined {\n\treturn codexSubagentA2ASkillID(\n\t\tvalue,\n\t\tcodexSubagentLaneForType(value)?.skillId,\n\t);\n}\n\nexport function codexSubagentCapabilityA2ASkillID(\n\tvalue: string | undefined,\n): string | undefined {\n\treturn codexSubagentA2ASkillID(\n\t\tvalue,\n\t\tcodexSubagentLaneForCapability(value)?.skillId,\n\t);\n}\n\nexport function codexSubagentSkillToken(\n\tvalue: string | undefined,\n): string | undefined {\n\tconst token = value\n\t\t?.trim()\n\t\t.toLowerCase()\n\t\t.replace(/[:_/. ]+/g, \"-\")\n\t\t.replace(/-{2,}/g, \"-\")\n\t\t.replace(/^-|-$/g, \"\");\n\treturn token || undefined;\n}\n\nfunction codexSubagentA2ASkillID(\n\tvalue: string | undefined,\n\tmappedSkillId: string | undefined,\n): string | undefined {\n\tconst token = codexSubagentSkillToken(value);\n\tif (!token) {\n\t\treturn undefined;\n\t}\n\treturn mappedSkillId ?? `maestro.subagent.${token}`;\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SwarmState } from "../agent/swarm/types.js";
|
|
2
2
|
import type { A2ATaskLedgerFile } from "./a2a-task-ledger.js";
|
|
3
|
-
export declare const A2A_COMPLETION_AUDIT_SCHEMA = "evalops.maestro.a2a-completion-audit.
|
|
4
|
-
export type
|
|
3
|
+
export declare const A2A_COMPLETION_AUDIT_SCHEMA = "evalops.maestro.a2a-completion-audit.v2";
|
|
4
|
+
export type A2ACompletionSignalKey = "status" | "artifact" | "task" | "workGraph" | "push" | "correlation";
|
|
5
5
|
export interface A2ACompletionAuditLane {
|
|
6
6
|
laneId: string;
|
|
7
7
|
parentTaskId?: string;
|
|
@@ -11,8 +11,8 @@ export interface A2ACompletionAuditLane {
|
|
|
11
11
|
peer: string;
|
|
12
12
|
status?: string;
|
|
13
13
|
terminal: boolean;
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
signals: Record<A2ACompletionSignalKey, boolean>;
|
|
15
|
+
missingSignals: A2ACompletionSignalKey[];
|
|
16
16
|
}
|
|
17
17
|
export interface A2ACompletionAudit {
|
|
18
18
|
schema: typeof A2A_COMPLETION_AUDIT_SCHEMA;
|
|
@@ -28,14 +28,20 @@ export interface A2ACompletionAudit {
|
|
|
28
28
|
};
|
|
29
29
|
lanes: A2ACompletionAuditLane[];
|
|
30
30
|
}
|
|
31
|
+
export interface A2APushCompletionSignals {
|
|
32
|
+
statusUpdateTerminal?: boolean;
|
|
33
|
+
artifactUpdate?: boolean;
|
|
34
|
+
taskTerminal?: boolean;
|
|
35
|
+
}
|
|
31
36
|
export interface BuildA2ACompletionAuditInput {
|
|
32
37
|
swarm: SwarmState;
|
|
33
38
|
ledger: A2ATaskLedgerFile;
|
|
34
|
-
|
|
39
|
+
pushSignals?: ReadonlyMap<string, A2APushCompletionSignals>;
|
|
40
|
+
pushSignalKeys?: ReadonlySet<string>;
|
|
35
41
|
pushTaskIds?: ReadonlySet<string>;
|
|
36
42
|
generatedAt?: string;
|
|
37
43
|
}
|
|
38
44
|
export declare function buildA2ACompletionAudit(input: BuildA2ACompletionAuditInput): A2ACompletionAudit;
|
|
39
|
-
export declare function
|
|
45
|
+
export declare function a2aPushSignalKey(peer: string, taskId: string): string;
|
|
40
46
|
export declare function a2aDelegationLaneId(peer: string, parentTaskId: string): string;
|
|
41
47
|
//# sourceMappingURL=a2a-completion-audit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-completion-audit.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-completion-audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAEX,iBAAiB,EACjB,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,2BAA2B,4CACE,CAAC;AAE3C,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"a2a-completion-audit.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-completion-audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAEX,iBAAiB,EACjB,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,2BAA2B,4CACE,CAAC;AAE3C,MAAM,MAAM,sBAAsB,GAC/B,QAAQ,GACR,UAAU,GACV,MAAM,GACN,WAAW,GACX,MAAM,GACN,aAAa,CAAC;AAEjB,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;IACjD,cAAc,EAAE,sBAAsB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,OAAO,2BAA2B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,qBAAqB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,KAAK,EAAE,sBAAsB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACxC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,4BAA4B;IAC5C,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAC5D,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAqBD,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,4BAA4B,GACjC,kBAAkB,CA2BpB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAClB,MAAM,CAER"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isTerminalA2AState } from "./a2a-task-ledger.js";
|
|
2
|
-
export const A2A_COMPLETION_AUDIT_SCHEMA = "evalops.maestro.a2a-completion-audit.
|
|
3
|
-
const
|
|
2
|
+
export const A2A_COMPLETION_AUDIT_SCHEMA = "evalops.maestro.a2a-completion-audit.v2";
|
|
3
|
+
const SIGNAL_ORDER = [
|
|
4
4
|
"status",
|
|
5
5
|
"artifact",
|
|
6
6
|
"task",
|
|
@@ -12,9 +12,9 @@ export function buildA2ACompletionAudit(input) {
|
|
|
12
12
|
const remoteLanes = buildRemoteLaneSources(input);
|
|
13
13
|
const remoteTaskIdCounts = countRemoteTaskIds(remoteLanes);
|
|
14
14
|
const lanes = remoteLanes.map((lane) => buildLaneAudit(input, lane, remoteTaskIdCounts));
|
|
15
|
-
const completeLanes = lanes.filter((lane) => lane.terminal && lane.
|
|
16
|
-
const pushCoveredLanes = lanes.filter((lane) => lane.
|
|
17
|
-
const workGraphCoveredLanes = lanes.filter((lane) => lane.
|
|
15
|
+
const completeLanes = lanes.filter((lane) => lane.terminal && lane.missingSignals.length === 0).length;
|
|
16
|
+
const pushCoveredLanes = lanes.filter((lane) => lane.signals.push).length;
|
|
17
|
+
const workGraphCoveredLanes = lanes.filter((lane) => lane.signals.workGraph).length;
|
|
18
18
|
return {
|
|
19
19
|
schema: A2A_COMPLETION_AUDIT_SCHEMA,
|
|
20
20
|
swarmId: input.swarm.id,
|
|
@@ -30,7 +30,7 @@ export function buildA2ACompletionAudit(input) {
|
|
|
30
30
|
lanes,
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
export function
|
|
33
|
+
export function a2aPushSignalKey(peer, taskId) {
|
|
34
34
|
return `${peer}\u0000${taskId}`;
|
|
35
35
|
}
|
|
36
36
|
export function a2aDelegationLaneId(peer, parentTaskId) {
|
|
@@ -56,7 +56,7 @@ function buildRemoteLaneSources(input) {
|
|
|
56
56
|
const ledgerOnlyLanes = input.ledger.tasks
|
|
57
57
|
.filter((entry) => entry.kind === "delegation")
|
|
58
58
|
.filter((entry) => stringMetadata(entry, "swarmId") === input.swarm.id)
|
|
59
|
-
.filter((entry) => !seen.has(
|
|
59
|
+
.filter((entry) => !seen.has(a2aPushSignalKey(entry.peer, entry.taskId)))
|
|
60
60
|
.map((entry) => {
|
|
61
61
|
const parentTaskId = parentTaskIdForLedger(entry);
|
|
62
62
|
return {
|
|
@@ -83,7 +83,7 @@ function hasA2ATask(teammate) {
|
|
|
83
83
|
return Boolean(teammate.a2a?.taskId);
|
|
84
84
|
}
|
|
85
85
|
function laneKey(a2a) {
|
|
86
|
-
return
|
|
86
|
+
return a2aPushSignalKey(a2a.peer, a2a.taskId);
|
|
87
87
|
}
|
|
88
88
|
function findLedgerEntry(ledger, a2a) {
|
|
89
89
|
return ledger.tasks.find((entry) => entry.taskId === a2a.taskId && entry.peer === a2a.peer);
|
|
@@ -93,15 +93,15 @@ function buildLaneAudit(input, lane, remoteTaskIdCounts) {
|
|
|
93
93
|
const parentTaskId = lane.parentTaskId ??
|
|
94
94
|
parentTaskIdForLane(lane.completedTasks, ledgerEntry, a2a);
|
|
95
95
|
const status = ledgerEntry?.state;
|
|
96
|
-
const
|
|
96
|
+
const signals = {
|
|
97
97
|
status: Boolean(status),
|
|
98
|
-
artifact:
|
|
98
|
+
artifact: hasArtifactSignal(ledgerEntry),
|
|
99
99
|
task: Boolean(ledgerEntry),
|
|
100
100
|
workGraph: Boolean(ledgerEntry?.workGraph),
|
|
101
|
-
push:
|
|
102
|
-
correlation:
|
|
101
|
+
push: hasPushSignal(input, a2a, remoteTaskIdCounts),
|
|
102
|
+
correlation: hasCorrelationSignal(input.swarm.id, parentTaskId, a2a, ledgerEntry),
|
|
103
103
|
};
|
|
104
|
-
const
|
|
104
|
+
const missingSignals = SIGNAL_ORDER.filter((key) => !signals[key]);
|
|
105
105
|
return {
|
|
106
106
|
laneId: lane.laneId,
|
|
107
107
|
parentTaskId,
|
|
@@ -111,8 +111,8 @@ function buildLaneAudit(input, lane, remoteTaskIdCounts) {
|
|
|
111
111
|
peer: a2a.peer,
|
|
112
112
|
status,
|
|
113
113
|
terminal: Boolean(status && isTerminalA2AState(status)),
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
signals,
|
|
115
|
+
missingSignals,
|
|
116
116
|
};
|
|
117
117
|
}
|
|
118
118
|
function countRemoteTaskIds(lanes) {
|
|
@@ -123,9 +123,12 @@ function countRemoteTaskIds(lanes) {
|
|
|
123
123
|
}
|
|
124
124
|
return counts;
|
|
125
125
|
}
|
|
126
|
-
function
|
|
127
|
-
const exactKey =
|
|
128
|
-
if (input.
|
|
126
|
+
function hasPushSignal(input, a2a, remoteTaskIdCounts) {
|
|
127
|
+
const exactKey = a2aPushSignalKey(a2a.peer, a2a.taskId);
|
|
128
|
+
if (input.pushSignals?.has(exactKey)) {
|
|
129
|
+
return pushCompletionSignalsAreComplete(input.pushSignals.get(exactKey));
|
|
130
|
+
}
|
|
131
|
+
if (input.pushSignalKeys?.has(exactKey)) {
|
|
129
132
|
return true;
|
|
130
133
|
}
|
|
131
134
|
if ((remoteTaskIdCounts.get(a2a.taskId) ?? 0) > 1) {
|
|
@@ -133,6 +136,11 @@ function hasPushEvidence(input, a2a, remoteTaskIdCounts) {
|
|
|
133
136
|
}
|
|
134
137
|
return input.pushTaskIds?.has(a2a.taskId) ?? false;
|
|
135
138
|
}
|
|
139
|
+
function pushCompletionSignalsAreComplete(signals) {
|
|
140
|
+
return Boolean(signals?.statusUpdateTerminal &&
|
|
141
|
+
signals.artifactUpdate &&
|
|
142
|
+
signals.taskTerminal);
|
|
143
|
+
}
|
|
136
144
|
function parentTaskIdForLedger(ledgerEntry) {
|
|
137
145
|
return (stringMetadata(ledgerEntry, "taskId") ??
|
|
138
146
|
stringMetadata(ledgerEntry, "task_id"));
|
|
@@ -154,11 +162,11 @@ function lastValue(values) {
|
|
|
154
162
|
function fallbackRemoteLaneId(peer, taskId) {
|
|
155
163
|
return `a2a:${encodeURIComponent(peer)}:remote:${encodeURIComponent(taskId)}`;
|
|
156
164
|
}
|
|
157
|
-
function
|
|
165
|
+
function hasArtifactSignal(entry) {
|
|
158
166
|
return Boolean(entry?.responseText?.trim() ||
|
|
159
167
|
entry?.transcript.some((item) => item.role === "agent" && item.text.trim().length > 0));
|
|
160
168
|
}
|
|
161
|
-
function
|
|
169
|
+
function hasCorrelationSignal(swarmId, parentTaskId, a2a, entry) {
|
|
162
170
|
if (!entry) {
|
|
163
171
|
return false;
|
|
164
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-completion-audit.js","sourceRoot":"","sources":["../../src/platform/a2a-completion-audit.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,CAAC,MAAM,2BAA2B,GACvC,yCAAyC,CAAC;AA8C3C,MAAM,cAAc,GAA+B;IAClD,QAAQ;IACR,UAAU;IACV,MAAM;IACN,WAAW;IACX,MAAM;IACN,aAAa;CACb,CAAC;AAYF,MAAM,UAAU,uBAAuB,CACtC,KAAmC;IAEnC,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACtC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAC/C,CAAC;IACF,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CACjC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,CAC5D,CAAC,MAAM,CAAC;IACT,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC3E,MAAM,qBAAqB,GAAG,KAAK,CAAC,MAAM,CACzC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CACjC,CAAC,MAAM,CAAC;IACT,OAAO;QACN,MAAM,EAAE,2BAA2B;QACnC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;QACvB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC1D,QAAQ,EAAE,KAAK,CAAC,MAAM,KAAK,aAAa;QACxC,MAAM,EAAE;YACP,WAAW,EAAE,KAAK,CAAC,MAAM;YACzB,aAAa;YACb,eAAe,EAAE,KAAK,CAAC,MAAM,GAAG,aAAa;YAC7C,gBAAgB;YAChB,qBAAqB;SACrB;QACD,KAAK;KACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,MAAc;IAC9D,OAAO,GAAG,IAAI,SAAS,MAAM,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,IAAY,EACZ,YAAoB;IAEpB,OAAO,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,sBAAsB,CAC9B,KAAmC;IAEnC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS;SACzC,MAAM,CAAC,UAAU,CAAC;SAClB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjB,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,YAAY,GAAG,mBAAmB,CACvC,QAAQ,CAAC,cAAc,EACvB,WAAW,EACX,QAAQ,CAAC,GAAG,CACZ,CAAC;QACF,OAAO;YACN,MAAM,EAAE,YAAY;gBACnB,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC;gBACtD,CAAC,CAAC,QAAQ,CAAC,EAAE;YACd,YAAY;YACZ,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,WAAW;SACX,CAAC;IACH,CAAC,CAAC,CAAC;IACJ,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;SACxC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;SAC9C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;SACtE,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;SAC1E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACd,MAAM,YAAY,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO;YACN,MAAM,EAAE,YAAY;gBACnB,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC;gBAC/C,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjD,YAAY;YACZ,cAAc,EAAE,EAAE;YAClB,GAAG,EAAE;gBACJ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,MAAM,EAAE,UAAmB;gBAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;gBAChC,IAAI,EAAE,KAAK,CAAC,IAAI;aAChB;YACD,WAAW,EAAE,KAAK;SAClB,CAAC;IACH,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,eAAe,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU,CAClB,QAAuB;IAEvB,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,OAAO,CAAC,GAAgB;IAChC,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,eAAe,CACvB,MAAyB,EACzB,GAAgB;IAEhB,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CACvB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CACjE,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACtB,KAAmC,EACnC,IAAwB,EACxB,kBAA+C;IAE/C,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,YAAY,GACjB,IAAI,CAAC,YAAY;QACjB,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,WAAW,EAAE,KAAK,CAAC;IAClC,MAAM,QAAQ,GAA8C;QAC3D,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;QACvB,QAAQ,EAAE,mBAAmB,CAAC,WAAW,CAAC;QAC1C,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC;QAC1B,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;QAC1C,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,kBAAkB,CAAC;QACrD,WAAW,EAAE,sBAAsB,CAClC,KAAK,CAAC,KAAK,CAAC,EAAE,EACd,YAAY,EACZ,GAAG,EACH,WAAW,CACX;KACD,CAAC;IACF,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,OAAO;QACN,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,YAAY;QACZ,SAAS,EAAE,GAAG,CAAC,MAAM;QACrB,YAAY,EAAE,GAAG,CAAC,SAAS;QAC3B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,WAAW,EAAE,SAAS;QAClD,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM;QACN,QAAQ,EAAE,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACvD,QAAQ;QACR,eAAe;KACf,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA2B;IACtD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CACvB,KAAmC,EACnC,GAAsC,EACtC,kBAA+C;IAE/C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;AACpD,CAAC;AAED,SAAS,qBAAqB,CAC7B,WAA2C;IAE3C,OAAO,CACN,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC;QACrC,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CACtC,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC3B,cAAwB,EACxB,WAA2C,EAC3C,GAAiB;IAEjB,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,GAAG,EAAE,YAAY,CAAC;IAC1C,IAAI,WAAW,EAAE,KAAK,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACnE,OAAO,kBAAkB,IAAI,eAAe,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,kBAAkB,IAAI,eAAe,CAAC;AAC3E,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACzC,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,SAAS,CAAC,MAAgB;IAClC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,MAAc;IACzD,OAAO,OAAO,kBAAkB,CAAC,IAAI,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAqC;IACjE,OAAO,OAAO,CACb,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE;QAC1B,KAAK,EAAE,UAAU,CAAC,IAAI,CACrB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAC9D,CACF,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC9B,OAAe,EACf,YAAgC,EAChC,GAAsC,EACtC,KAAqC;IAErC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,kBAAkB,GACvB,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACrE,OAAO,OAAO,CACb,GAAG,CAAC,SAAS;QACZ,KAAK,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS;QACjC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QACrE,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,OAAO;QAC5C,YAAY;QACZ,kBAAkB,KAAK,YAAY,CACpC,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACtB,KAAqC,EACrC,GAAW;IAEX,MAAM,KAAK,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC","sourcesContent":["import type { SwarmState, SwarmTeammate } from \"../agent/swarm/types.js\";\nimport type {\n\tA2ATaskLedgerEntry,\n\tA2ATaskLedgerFile,\n} from \"./a2a-task-ledger.js\";\nimport { isTerminalA2AState } from \"./a2a-task-ledger.js\";\n\nexport const A2A_COMPLETION_AUDIT_SCHEMA =\n\t\"evalops.maestro.a2a-completion-audit.v1\";\n\nexport type A2ACompletionEvidenceKey =\n\t| \"status\"\n\t| \"artifact\"\n\t| \"task\"\n\t| \"workGraph\"\n\t| \"push\"\n\t| \"correlation\";\n\nexport interface A2ACompletionAuditLane {\n\tlaneId: string;\n\tparentTaskId?: string;\n\ta2aTaskId: string;\n\ta2aMessageId?: string;\n\tcontextId?: string;\n\tpeer: string;\n\tstatus?: string;\n\tterminal: boolean;\n\tevidence: Record<A2ACompletionEvidenceKey, boolean>;\n\tmissingEvidence: A2ACompletionEvidenceKey[];\n}\n\nexport interface A2ACompletionAudit {\n\tschema: typeof A2A_COMPLETION_AUDIT_SCHEMA;\n\tswarmId: string;\n\tgeneratedAt: string;\n\tcomplete: boolean;\n\tcounts: {\n\t\tremoteLanes: number;\n\t\tcompleteLanes: number;\n\t\tincompleteLanes: number;\n\t\tpushCoveredLanes: number;\n\t\tworkGraphCoveredLanes: number;\n\t};\n\tlanes: A2ACompletionAuditLane[];\n}\n\nexport interface BuildA2ACompletionAuditInput {\n\tswarm: SwarmState;\n\tledger: A2ATaskLedgerFile;\n\tpushEvidenceKeys?: ReadonlySet<string>;\n\tpushTaskIds?: ReadonlySet<string>;\n\tgeneratedAt?: string;\n}\n\nconst EVIDENCE_ORDER: A2ACompletionEvidenceKey[] = [\n\t\"status\",\n\t\"artifact\",\n\t\"task\",\n\t\"workGraph\",\n\t\"push\",\n\t\"correlation\",\n];\n\ntype A2AAuditA2A = NonNullable<SwarmTeammate[\"a2a\"]>;\n\ninterface A2AAuditLaneSource {\n\tlaneId: string;\n\tparentTaskId?: string;\n\tcompletedTasks: string[];\n\ta2a: A2AAuditA2A;\n\tledgerEntry?: A2ATaskLedgerEntry;\n}\n\nexport function buildA2ACompletionAudit(\n\tinput: BuildA2ACompletionAuditInput,\n): A2ACompletionAudit {\n\tconst remoteLanes = buildRemoteLaneSources(input);\n\tconst remoteTaskIdCounts = countRemoteTaskIds(remoteLanes);\n\tconst lanes = remoteLanes.map((lane) =>\n\t\tbuildLaneAudit(input, lane, remoteTaskIdCounts),\n\t);\n\tconst completeLanes = lanes.filter(\n\t\t(lane) => lane.terminal && lane.missingEvidence.length === 0,\n\t).length;\n\tconst pushCoveredLanes = lanes.filter((lane) => lane.evidence.push).length;\n\tconst workGraphCoveredLanes = lanes.filter(\n\t\t(lane) => lane.evidence.workGraph,\n\t).length;\n\treturn {\n\t\tschema: A2A_COMPLETION_AUDIT_SCHEMA,\n\t\tswarmId: input.swarm.id,\n\t\tgeneratedAt: input.generatedAt ?? new Date().toISOString(),\n\t\tcomplete: lanes.length === completeLanes,\n\t\tcounts: {\n\t\t\tremoteLanes: lanes.length,\n\t\t\tcompleteLanes,\n\t\t\tincompleteLanes: lanes.length - completeLanes,\n\t\t\tpushCoveredLanes,\n\t\t\tworkGraphCoveredLanes,\n\t\t},\n\t\tlanes,\n\t};\n}\n\nexport function a2aPushEvidenceKey(peer: string, taskId: string): string {\n\treturn `${peer}\\u0000${taskId}`;\n}\n\nexport function a2aDelegationLaneId(\n\tpeer: string,\n\tparentTaskId: string,\n): string {\n\treturn `a2a:${encodeURIComponent(peer)}:${encodeURIComponent(parentTaskId)}`;\n}\n\nfunction buildRemoteLaneSources(\n\tinput: BuildA2ACompletionAuditInput,\n): A2AAuditLaneSource[] {\n\tconst teammateLanes = input.swarm.teammates\n\t\t.filter(hasA2ATask)\n\t\t.map((teammate) => {\n\t\t\tconst ledgerEntry = findLedgerEntry(input.ledger, teammate.a2a);\n\t\t\tconst parentTaskId = parentTaskIdForLane(\n\t\t\t\tteammate.completedTasks,\n\t\t\t\tledgerEntry,\n\t\t\t\tteammate.a2a,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tlaneId: parentTaskId\n\t\t\t\t\t? a2aDelegationLaneId(teammate.a2a.peer, parentTaskId)\n\t\t\t\t\t: teammate.id,\n\t\t\t\tparentTaskId,\n\t\t\t\tcompletedTasks: teammate.completedTasks,\n\t\t\t\ta2a: teammate.a2a,\n\t\t\t\tledgerEntry,\n\t\t\t};\n\t\t});\n\tconst seen = new Set(teammateLanes.map((lane) => laneKey(lane.a2a)));\n\tconst ledgerOnlyLanes = input.ledger.tasks\n\t\t.filter((entry) => entry.kind === \"delegation\")\n\t\t.filter((entry) => stringMetadata(entry, \"swarmId\") === input.swarm.id)\n\t\t.filter((entry) => !seen.has(a2aPushEvidenceKey(entry.peer, entry.taskId)))\n\t\t.map((entry) => {\n\t\t\tconst parentTaskId = parentTaskIdForLedger(entry);\n\t\t\treturn {\n\t\t\t\tlaneId: parentTaskId\n\t\t\t\t\t? a2aDelegationLaneId(entry.peer, parentTaskId)\n\t\t\t\t\t: fallbackRemoteLaneId(entry.peer, entry.taskId),\n\t\t\t\tparentTaskId,\n\t\t\t\tcompletedTasks: [],\n\t\t\t\ta2a: {\n\t\t\t\t\tpeer: entry.peer,\n\t\t\t\t\tpeerDisplayName: entry.peerDisplayName,\n\t\t\t\t\tsource: \"registry\" as const,\n\t\t\t\t\ttaskId: entry.taskId,\n\t\t\t\t\tcontextId: entry.contextId,\n\t\t\t\t\tmessageId: entry.messageId ?? \"\",\n\t\t\t\t\trole: entry.role,\n\t\t\t\t},\n\t\t\t\tledgerEntry: entry,\n\t\t\t};\n\t\t});\n\treturn [...teammateLanes, ...ledgerOnlyLanes];\n}\n\nfunction hasA2ATask(\n\tteammate: SwarmTeammate,\n): teammate is SwarmTeammate & { a2a: A2AAuditA2A } {\n\treturn Boolean(teammate.a2a?.taskId);\n}\n\nfunction laneKey(a2a: A2AAuditA2A): string {\n\treturn a2aPushEvidenceKey(a2a.peer, a2a.taskId);\n}\n\nfunction findLedgerEntry(\n\tledger: A2ATaskLedgerFile,\n\ta2a: A2AAuditA2A,\n): A2ATaskLedgerEntry | undefined {\n\treturn ledger.tasks.find(\n\t\t(entry) => entry.taskId === a2a.taskId && entry.peer === a2a.peer,\n\t);\n}\n\nfunction buildLaneAudit(\n\tinput: BuildA2ACompletionAuditInput,\n\tlane: A2AAuditLaneSource,\n\tremoteTaskIdCounts: ReadonlyMap<string, number>,\n): A2ACompletionAuditLane {\n\tconst { a2a, ledgerEntry } = lane;\n\tconst parentTaskId =\n\t\tlane.parentTaskId ??\n\t\tparentTaskIdForLane(lane.completedTasks, ledgerEntry, a2a);\n\tconst status = ledgerEntry?.state;\n\tconst evidence: Record<A2ACompletionEvidenceKey, boolean> = {\n\t\tstatus: Boolean(status),\n\t\tartifact: hasArtifactEvidence(ledgerEntry),\n\t\ttask: Boolean(ledgerEntry),\n\t\tworkGraph: Boolean(ledgerEntry?.workGraph),\n\t\tpush: hasPushEvidence(input, a2a, remoteTaskIdCounts),\n\t\tcorrelation: hasCorrelationEvidence(\n\t\t\tinput.swarm.id,\n\t\t\tparentTaskId,\n\t\t\ta2a,\n\t\t\tledgerEntry,\n\t\t),\n\t};\n\tconst missingEvidence = EVIDENCE_ORDER.filter((key) => !evidence[key]);\n\treturn {\n\t\tlaneId: lane.laneId,\n\t\tparentTaskId,\n\t\ta2aTaskId: a2a.taskId,\n\t\ta2aMessageId: a2a.messageId,\n\t\tcontextId: a2a.contextId ?? ledgerEntry?.contextId,\n\t\tpeer: a2a.peer,\n\t\tstatus,\n\t\tterminal: Boolean(status && isTerminalA2AState(status)),\n\t\tevidence,\n\t\tmissingEvidence,\n\t};\n}\n\nfunction countRemoteTaskIds(lanes: A2AAuditLaneSource[]): Map<string, number> {\n\tconst counts = new Map<string, number>();\n\tfor (const lane of lanes) {\n\t\tconst taskId = lane.a2a.taskId;\n\t\tcounts.set(taskId, (counts.get(taskId) ?? 0) + 1);\n\t}\n\treturn counts;\n}\n\nfunction hasPushEvidence(\n\tinput: BuildA2ACompletionAuditInput,\n\ta2a: NonNullable<SwarmTeammate[\"a2a\"]>,\n\tremoteTaskIdCounts: ReadonlyMap<string, number>,\n): boolean {\n\tconst exactKey = a2aPushEvidenceKey(a2a.peer, a2a.taskId);\n\tif (input.pushEvidenceKeys?.has(exactKey)) {\n\t\treturn true;\n\t}\n\tif ((remoteTaskIdCounts.get(a2a.taskId) ?? 0) > 1) {\n\t\treturn false;\n\t}\n\treturn input.pushTaskIds?.has(a2a.taskId) ?? false;\n}\n\nfunction parentTaskIdForLedger(\n\tledgerEntry: A2ATaskLedgerEntry | undefined,\n): string | undefined {\n\treturn (\n\t\tstringMetadata(ledgerEntry, \"taskId\") ??\n\t\tstringMetadata(ledgerEntry, \"task_id\")\n\t);\n}\n\nfunction parentTaskIdForLane(\n\tcompletedTasks: string[],\n\tledgerEntry: A2ATaskLedgerEntry | undefined,\n\ta2a?: A2AAuditA2A,\n): string | undefined {\n\tconst ledgerParentTaskId = parentTaskIdForLedger(ledgerEntry);\n\tconst a2aParentTaskId = a2a?.parentTaskId;\n\tif (ledgerEntry?.state && !isCompletedA2AState(ledgerEntry.state)) {\n\t\treturn ledgerParentTaskId ?? a2aParentTaskId ?? lastValue(completedTasks);\n\t}\n\treturn lastValue(completedTasks) ?? ledgerParentTaskId ?? a2aParentTaskId;\n}\n\nfunction isCompletedA2AState(state: string): boolean {\n\treturn /COMPLETED/u.test(state.toUpperCase().replace(/[\\s-]+/gu, \"_\"));\n}\n\nfunction lastValue(values: string[]): string | undefined {\n\treturn values.length > 0 ? values[values.length - 1] : undefined;\n}\n\nfunction fallbackRemoteLaneId(peer: string, taskId: string): string {\n\treturn `a2a:${encodeURIComponent(peer)}:remote:${encodeURIComponent(taskId)}`;\n}\n\nfunction hasArtifactEvidence(entry: A2ATaskLedgerEntry | undefined): boolean {\n\treturn Boolean(\n\t\tentry?.responseText?.trim() ||\n\t\t\tentry?.transcript.some(\n\t\t\t\t(item) => item.role === \"agent\" && item.text.trim().length > 0,\n\t\t\t),\n\t);\n}\n\nfunction hasCorrelationEvidence(\n\tswarmId: string,\n\tparentTaskId: string | undefined,\n\ta2a: NonNullable<SwarmTeammate[\"a2a\"]>,\n\tentry: A2ATaskLedgerEntry | undefined,\n): boolean {\n\tif (!entry) {\n\t\treturn false;\n\t}\n\tconst ledgerParentTaskId =\n\t\tstringMetadata(entry, \"taskId\") ?? stringMetadata(entry, \"task_id\");\n\treturn Boolean(\n\t\ta2a.messageId &&\n\t\t\tentry.messageId === a2a.messageId &&\n\t\t\t(a2a.contextId ? entry.contextId === a2a.contextId : entry.contextId) &&\n\t\t\tstringMetadata(entry, \"swarmId\") === swarmId &&\n\t\t\tparentTaskId &&\n\t\t\tledgerParentTaskId === parentTaskId,\n\t);\n}\n\nfunction stringMetadata(\n\tentry: A2ATaskLedgerEntry | undefined,\n\tkey: string,\n): string | undefined {\n\tconst value = entry?.metadata?.[key];\n\treturn typeof value === \"string\" ? value : undefined;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"a2a-completion-audit.js","sourceRoot":"","sources":["../../src/platform/a2a-completion-audit.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SwarmState, SwarmTeammate } from \"../agent/swarm/types.js\";\nimport type {\n\tA2ATaskLedgerEntry,\n\tA2ATaskLedgerFile,\n} from \"./a2a-task-ledger.js\";\nimport { isTerminalA2AState } from \"./a2a-task-ledger.js\";\n\nexport const A2A_COMPLETION_AUDIT_SCHEMA =\n\t\"evalops.maestro.a2a-completion-audit.v2\";\n\nexport type A2ACompletionSignalKey =\n\t| \"status\"\n\t| \"artifact\"\n\t| \"task\"\n\t| \"workGraph\"\n\t| \"push\"\n\t| \"correlation\";\n\nexport interface A2ACompletionAuditLane {\n\tlaneId: string;\n\tparentTaskId?: string;\n\ta2aTaskId: string;\n\ta2aMessageId?: string;\n\tcontextId?: string;\n\tpeer: string;\n\tstatus?: string;\n\tterminal: boolean;\n\tsignals: Record<A2ACompletionSignalKey, boolean>;\n\tmissingSignals: A2ACompletionSignalKey[];\n}\n\nexport interface A2ACompletionAudit {\n\tschema: typeof A2A_COMPLETION_AUDIT_SCHEMA;\n\tswarmId: string;\n\tgeneratedAt: string;\n\tcomplete: boolean;\n\tcounts: {\n\t\tremoteLanes: number;\n\t\tcompleteLanes: number;\n\t\tincompleteLanes: number;\n\t\tpushCoveredLanes: number;\n\t\tworkGraphCoveredLanes: number;\n\t};\n\tlanes: A2ACompletionAuditLane[];\n}\n\nexport interface A2APushCompletionSignals {\n\tstatusUpdateTerminal?: boolean;\n\tartifactUpdate?: boolean;\n\ttaskTerminal?: boolean;\n}\n\nexport interface BuildA2ACompletionAuditInput {\n\tswarm: SwarmState;\n\tledger: A2ATaskLedgerFile;\n\tpushSignals?: ReadonlyMap<string, A2APushCompletionSignals>;\n\tpushSignalKeys?: ReadonlySet<string>;\n\tpushTaskIds?: ReadonlySet<string>;\n\tgeneratedAt?: string;\n}\n\nconst SIGNAL_ORDER: A2ACompletionSignalKey[] = [\n\t\"status\",\n\t\"artifact\",\n\t\"task\",\n\t\"workGraph\",\n\t\"push\",\n\t\"correlation\",\n];\n\ntype A2AAuditA2A = NonNullable<SwarmTeammate[\"a2a\"]>;\n\ninterface A2AAuditLaneSource {\n\tlaneId: string;\n\tparentTaskId?: string;\n\tcompletedTasks: string[];\n\ta2a: A2AAuditA2A;\n\tledgerEntry?: A2ATaskLedgerEntry;\n}\n\nexport function buildA2ACompletionAudit(\n\tinput: BuildA2ACompletionAuditInput,\n): A2ACompletionAudit {\n\tconst remoteLanes = buildRemoteLaneSources(input);\n\tconst remoteTaskIdCounts = countRemoteTaskIds(remoteLanes);\n\tconst lanes = remoteLanes.map((lane) =>\n\t\tbuildLaneAudit(input, lane, remoteTaskIdCounts),\n\t);\n\tconst completeLanes = lanes.filter(\n\t\t(lane) => lane.terminal && lane.missingSignals.length === 0,\n\t).length;\n\tconst pushCoveredLanes = lanes.filter((lane) => lane.signals.push).length;\n\tconst workGraphCoveredLanes = lanes.filter(\n\t\t(lane) => lane.signals.workGraph,\n\t).length;\n\treturn {\n\t\tschema: A2A_COMPLETION_AUDIT_SCHEMA,\n\t\tswarmId: input.swarm.id,\n\t\tgeneratedAt: input.generatedAt ?? new Date().toISOString(),\n\t\tcomplete: lanes.length === completeLanes,\n\t\tcounts: {\n\t\t\tremoteLanes: lanes.length,\n\t\t\tcompleteLanes,\n\t\t\tincompleteLanes: lanes.length - completeLanes,\n\t\t\tpushCoveredLanes,\n\t\t\tworkGraphCoveredLanes,\n\t\t},\n\t\tlanes,\n\t};\n}\n\nexport function a2aPushSignalKey(peer: string, taskId: string): string {\n\treturn `${peer}\\u0000${taskId}`;\n}\n\nexport function a2aDelegationLaneId(\n\tpeer: string,\n\tparentTaskId: string,\n): string {\n\treturn `a2a:${encodeURIComponent(peer)}:${encodeURIComponent(parentTaskId)}`;\n}\n\nfunction buildRemoteLaneSources(\n\tinput: BuildA2ACompletionAuditInput,\n): A2AAuditLaneSource[] {\n\tconst teammateLanes = input.swarm.teammates\n\t\t.filter(hasA2ATask)\n\t\t.map((teammate) => {\n\t\t\tconst ledgerEntry = findLedgerEntry(input.ledger, teammate.a2a);\n\t\t\tconst parentTaskId = parentTaskIdForLane(\n\t\t\t\tteammate.completedTasks,\n\t\t\t\tledgerEntry,\n\t\t\t\tteammate.a2a,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tlaneId: parentTaskId\n\t\t\t\t\t? a2aDelegationLaneId(teammate.a2a.peer, parentTaskId)\n\t\t\t\t\t: teammate.id,\n\t\t\t\tparentTaskId,\n\t\t\t\tcompletedTasks: teammate.completedTasks,\n\t\t\t\ta2a: teammate.a2a,\n\t\t\t\tledgerEntry,\n\t\t\t};\n\t\t});\n\tconst seen = new Set(teammateLanes.map((lane) => laneKey(lane.a2a)));\n\tconst ledgerOnlyLanes = input.ledger.tasks\n\t\t.filter((entry) => entry.kind === \"delegation\")\n\t\t.filter((entry) => stringMetadata(entry, \"swarmId\") === input.swarm.id)\n\t\t.filter((entry) => !seen.has(a2aPushSignalKey(entry.peer, entry.taskId)))\n\t\t.map((entry) => {\n\t\t\tconst parentTaskId = parentTaskIdForLedger(entry);\n\t\t\treturn {\n\t\t\t\tlaneId: parentTaskId\n\t\t\t\t\t? a2aDelegationLaneId(entry.peer, parentTaskId)\n\t\t\t\t\t: fallbackRemoteLaneId(entry.peer, entry.taskId),\n\t\t\t\tparentTaskId,\n\t\t\t\tcompletedTasks: [],\n\t\t\t\ta2a: {\n\t\t\t\t\tpeer: entry.peer,\n\t\t\t\t\tpeerDisplayName: entry.peerDisplayName,\n\t\t\t\t\tsource: \"registry\" as const,\n\t\t\t\t\ttaskId: entry.taskId,\n\t\t\t\t\tcontextId: entry.contextId,\n\t\t\t\t\tmessageId: entry.messageId ?? \"\",\n\t\t\t\t\trole: entry.role,\n\t\t\t\t},\n\t\t\t\tledgerEntry: entry,\n\t\t\t};\n\t\t});\n\treturn [...teammateLanes, ...ledgerOnlyLanes];\n}\n\nfunction hasA2ATask(\n\tteammate: SwarmTeammate,\n): teammate is SwarmTeammate & { a2a: A2AAuditA2A } {\n\treturn Boolean(teammate.a2a?.taskId);\n}\n\nfunction laneKey(a2a: A2AAuditA2A): string {\n\treturn a2aPushSignalKey(a2a.peer, a2a.taskId);\n}\n\nfunction findLedgerEntry(\n\tledger: A2ATaskLedgerFile,\n\ta2a: A2AAuditA2A,\n): A2ATaskLedgerEntry | undefined {\n\treturn ledger.tasks.find(\n\t\t(entry) => entry.taskId === a2a.taskId && entry.peer === a2a.peer,\n\t);\n}\n\nfunction buildLaneAudit(\n\tinput: BuildA2ACompletionAuditInput,\n\tlane: A2AAuditLaneSource,\n\tremoteTaskIdCounts: ReadonlyMap<string, number>,\n): A2ACompletionAuditLane {\n\tconst { a2a, ledgerEntry } = lane;\n\tconst parentTaskId =\n\t\tlane.parentTaskId ??\n\t\tparentTaskIdForLane(lane.completedTasks, ledgerEntry, a2a);\n\tconst status = ledgerEntry?.state;\n\tconst signals: Record<A2ACompletionSignalKey, boolean> = {\n\t\tstatus: Boolean(status),\n\t\tartifact: hasArtifactSignal(ledgerEntry),\n\t\ttask: Boolean(ledgerEntry),\n\t\tworkGraph: Boolean(ledgerEntry?.workGraph),\n\t\tpush: hasPushSignal(input, a2a, remoteTaskIdCounts),\n\t\tcorrelation: hasCorrelationSignal(\n\t\t\tinput.swarm.id,\n\t\t\tparentTaskId,\n\t\t\ta2a,\n\t\t\tledgerEntry,\n\t\t),\n\t};\n\tconst missingSignals = SIGNAL_ORDER.filter((key) => !signals[key]);\n\treturn {\n\t\tlaneId: lane.laneId,\n\t\tparentTaskId,\n\t\ta2aTaskId: a2a.taskId,\n\t\ta2aMessageId: a2a.messageId,\n\t\tcontextId: a2a.contextId ?? ledgerEntry?.contextId,\n\t\tpeer: a2a.peer,\n\t\tstatus,\n\t\tterminal: Boolean(status && isTerminalA2AState(status)),\n\t\tsignals,\n\t\tmissingSignals,\n\t};\n}\n\nfunction countRemoteTaskIds(lanes: A2AAuditLaneSource[]): Map<string, number> {\n\tconst counts = new Map<string, number>();\n\tfor (const lane of lanes) {\n\t\tconst taskId = lane.a2a.taskId;\n\t\tcounts.set(taskId, (counts.get(taskId) ?? 0) + 1);\n\t}\n\treturn counts;\n}\n\nfunction hasPushSignal(\n\tinput: BuildA2ACompletionAuditInput,\n\ta2a: NonNullable<SwarmTeammate[\"a2a\"]>,\n\tremoteTaskIdCounts: ReadonlyMap<string, number>,\n): boolean {\n\tconst exactKey = a2aPushSignalKey(a2a.peer, a2a.taskId);\n\tif (input.pushSignals?.has(exactKey)) {\n\t\treturn pushCompletionSignalsAreComplete(input.pushSignals.get(exactKey));\n\t}\n\tif (input.pushSignalKeys?.has(exactKey)) {\n\t\treturn true;\n\t}\n\tif ((remoteTaskIdCounts.get(a2a.taskId) ?? 0) > 1) {\n\t\treturn false;\n\t}\n\treturn input.pushTaskIds?.has(a2a.taskId) ?? false;\n}\n\nfunction pushCompletionSignalsAreComplete(\n\tsignals: A2APushCompletionSignals | undefined,\n): boolean {\n\treturn Boolean(\n\t\tsignals?.statusUpdateTerminal &&\n\t\t\tsignals.artifactUpdate &&\n\t\t\tsignals.taskTerminal,\n\t);\n}\n\nfunction parentTaskIdForLedger(\n\tledgerEntry: A2ATaskLedgerEntry | undefined,\n): string | undefined {\n\treturn (\n\t\tstringMetadata(ledgerEntry, \"taskId\") ??\n\t\tstringMetadata(ledgerEntry, \"task_id\")\n\t);\n}\n\nfunction parentTaskIdForLane(\n\tcompletedTasks: string[],\n\tledgerEntry: A2ATaskLedgerEntry | undefined,\n\ta2a?: A2AAuditA2A,\n): string | undefined {\n\tconst ledgerParentTaskId = parentTaskIdForLedger(ledgerEntry);\n\tconst a2aParentTaskId = a2a?.parentTaskId;\n\tif (ledgerEntry?.state && !isCompletedA2AState(ledgerEntry.state)) {\n\t\treturn ledgerParentTaskId ?? a2aParentTaskId ?? lastValue(completedTasks);\n\t}\n\treturn lastValue(completedTasks) ?? ledgerParentTaskId ?? a2aParentTaskId;\n}\n\nfunction isCompletedA2AState(state: string): boolean {\n\treturn /COMPLETED/u.test(state.toUpperCase().replace(/[\\s-]+/gu, \"_\"));\n}\n\nfunction lastValue(values: string[]): string | undefined {\n\treturn values.length > 0 ? values[values.length - 1] : undefined;\n}\n\nfunction fallbackRemoteLaneId(peer: string, taskId: string): string {\n\treturn `a2a:${encodeURIComponent(peer)}:remote:${encodeURIComponent(taskId)}`;\n}\n\nfunction hasArtifactSignal(entry: A2ATaskLedgerEntry | undefined): boolean {\n\treturn Boolean(\n\t\tentry?.responseText?.trim() ||\n\t\t\tentry?.transcript.some(\n\t\t\t\t(item) => item.role === \"agent\" && item.text.trim().length > 0,\n\t\t\t),\n\t);\n}\n\nfunction hasCorrelationSignal(\n\tswarmId: string,\n\tparentTaskId: string | undefined,\n\ta2a: NonNullable<SwarmTeammate[\"a2a\"]>,\n\tentry: A2ATaskLedgerEntry | undefined,\n): boolean {\n\tif (!entry) {\n\t\treturn false;\n\t}\n\tconst ledgerParentTaskId =\n\t\tstringMetadata(entry, \"taskId\") ?? stringMetadata(entry, \"task_id\");\n\treturn Boolean(\n\t\ta2a.messageId &&\n\t\t\tentry.messageId === a2a.messageId &&\n\t\t\t(a2a.contextId ? entry.contextId === a2a.contextId : entry.contextId) &&\n\t\t\tstringMetadata(entry, \"swarmId\") === swarmId &&\n\t\t\tparentTaskId &&\n\t\t\tledgerParentTaskId === parentTaskId,\n\t);\n}\n\nfunction stringMetadata(\n\tentry: A2ATaskLedgerEntry | undefined,\n\tkey: string,\n): string | undefined {\n\tconst value = entry?.metadata?.[key];\n\treturn typeof value === \"string\" ? value : undefined;\n}\n"]}
|
|
@@ -115,7 +115,7 @@ function laneSkillPolicy(laneId) {
|
|
|
115
115
|
requiredContextGrants: [
|
|
116
116
|
"repo:read",
|
|
117
117
|
"pull-request:read",
|
|
118
|
-
"
|
|
118
|
+
"artifact:read",
|
|
119
119
|
],
|
|
120
120
|
requiredArtifactKinds: ["review.summary"],
|
|
121
121
|
optionalArtifactKinds: ["risk.finding", "test.plan"],
|
|
@@ -126,7 +126,7 @@ function laneSkillPolicy(laneId) {
|
|
|
126
126
|
requiredContextGrants: [
|
|
127
127
|
"repo:read",
|
|
128
128
|
"tool:execute-tests",
|
|
129
|
-
"
|
|
129
|
+
"artifact:write",
|
|
130
130
|
],
|
|
131
131
|
requiredArtifactKinds: ["test.report"],
|
|
132
132
|
optionalArtifactKinds: ["failure.triage", "coverage.summary"],
|
|
@@ -134,9 +134,9 @@ function laneSkillPolicy(laneId) {
|
|
|
134
134
|
};
|
|
135
135
|
case "repo-explorer":
|
|
136
136
|
return {
|
|
137
|
-
requiredContextGrants: ["repo:read", "
|
|
137
|
+
requiredContextGrants: ["repo:read", "context:index:write"],
|
|
138
138
|
requiredArtifactKinds: ["repo.map"],
|
|
139
|
-
optionalArtifactKinds: ["
|
|
139
|
+
optionalArtifactKinds: ["context.index"],
|
|
140
140
|
allowedTaskClasses: ["repo.inspect", "context.gathering"],
|
|
141
141
|
};
|
|
142
142
|
case "release-shepherd":
|
|
@@ -145,9 +145,10 @@ function laneSkillPolicy(laneId) {
|
|
|
145
145
|
"repo:read",
|
|
146
146
|
"pull-request:write",
|
|
147
147
|
"deploy:read",
|
|
148
|
-
"
|
|
148
|
+
"artifact:write",
|
|
149
|
+
"runtime:events:read",
|
|
149
150
|
],
|
|
150
|
-
requiredArtifactKinds: ["release.
|
|
151
|
+
requiredArtifactKinds: ["release.summary"],
|
|
151
152
|
optionalArtifactKinds: ["ci.summary", "deploy.status"],
|
|
152
153
|
allowedTaskClasses: ["release.follow-through", "deployment.smoke"],
|
|
153
154
|
};
|
|
@@ -155,7 +156,7 @@ function laneSkillPolicy(laneId) {
|
|
|
155
156
|
return {
|
|
156
157
|
requiredContextGrants: ["repo:read"],
|
|
157
158
|
requiredArtifactKinds: ["subagent.summary"],
|
|
158
|
-
optionalArtifactKinds: ["
|
|
159
|
+
optionalArtifactKinds: ["context.index"],
|
|
159
160
|
allowedTaskClasses: ["agent.delegation"],
|
|
160
161
|
};
|
|
161
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-maestro-peer.js","sourceRoot":"","sources":["../../src/platform/a2a-maestro-peer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCODEX_SUBAGENT_DISPATCH_TABLE,\n\ttype CodexSubagentDispatchLane,\n} from \"../codex/subagent-dispatch-table.js\";\nimport type {\n\tPlatformAgentA2APeerProjection,\n\tPlatformAgentA2ASkill,\n} from \"./agent-registry-client.js\";\n\nexport const MAESTRO_A2A_PROTOCOL_VERSION = \"1.0\";\nexport const MAESTRO_A2A_PROTOCOL_BINDING = \"HTTP+JSON\";\nexport const MAESTRO_A2A_AGENT_CARD_PATH = \"/.well-known/agent-card.json\";\nexport const EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI =\n\t\"https://evalops.com/a2a/extensions/operating-plane/v1\";\n\nconst MAESTRO_TUI_TURN_SKILL: PlatformAgentA2ASkill = {\n\tid: \"maestro-tui-turn\",\n\tname: \"Maestro TUI turn\",\n\tdescription:\n\t\t\"Run a prompt through the local Maestro native TUI agent runner.\",\n\ttags: [\"maestro\", \"tui\", \"codex\", \"a2a\", \"fleet\"],\n\tinputModes: [\"text/plain\"],\n\toutputModes: [\"text/plain\", \"application/json\"],\n\tattributes: {\n\t\tevalopsSkillKind: \"maestro-turn\",\n\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t},\n};\n\nexport interface BuildMaestroA2APeerProjectionInput {\n\tpublicEndpointUrl: string;\n\tinternalEndpointUrl?: string;\n\tagentCardUrl?: string;\n\tprotocolVersion?: string;\n\tagentCardETag?: string;\n\tagentCardHash?: string;\n\tpushNotifications?: boolean;\n\tsecuritySchemes?: string[];\n\tattributes?: Record<string, string>;\n}\n\nexport function defaultMaestroA2ACapabilities(): string[] {\n\treturn uniqueStrings([\n\t\t\"maestro:a2a\",\n\t\t\"maestro:cli\",\n\t\t\"maestro:subagents\",\n\t\t...CODEX_SUBAGENT_DISPATCH_TABLE.a2aSkillLanes.flatMap((lane) =>\n\t\t\tlane.capabilityAliases.filter((capability) => capability.includes(\":\")),\n\t\t),\n\t]);\n}\n\nexport function buildMaestroA2APeerProjection(\n\tinput: BuildMaestroA2APeerProjectionInput,\n): PlatformAgentA2APeerProjection {\n\tconst publicEndpointUrl = normalizeEndpoint(input.publicEndpointUrl);\n\tconst internalEndpointUrl = input.internalEndpointUrl\n\t\t? normalizeEndpoint(input.internalEndpointUrl)\n\t\t: undefined;\n\tconst agentCardUrl =\n\t\tinput.agentCardUrl?.trim() ||\n\t\t`${publicEndpointUrl}${MAESTRO_A2A_AGENT_CARD_PATH}`;\n\treturn stripUndefinedValues({\n\t\tpublicEndpointUrl,\n\t\tinternalEndpointUrl,\n\t\tagentCardUrl,\n\t\tprotocolBinding: MAESTRO_A2A_PROTOCOL_BINDING,\n\t\tprotocolVersion: input.protocolVersion ?? MAESTRO_A2A_PROTOCOL_VERSION,\n\t\tsupportedExtensions: [EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI],\n\t\tskills: maestroA2AAgentSkills(),\n\t\tsecuritySchemes:\n\t\t\tinput.securitySchemes && input.securitySchemes.length > 0\n\t\t\t\t? uniqueStrings(input.securitySchemes)\n\t\t\t\t: [\"evalops-agent-token\"],\n\t\tagentCardETag: input.agentCardETag,\n\t\tagentCardHash: input.agentCardHash,\n\t\tpushNotifications: input.pushNotifications ?? true,\n\t\tattributes: {\n\t\t\truntime: \"maestro\",\n\t\t\tcontrolPlane: \"rust-control-plane\",\n\t\t\tsubagentDispatchTable: CODEX_SUBAGENT_DISPATCH_TABLE.schemaVersion,\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t\t...(input.attributes ?? {}),\n\t\t},\n\t}) as PlatformAgentA2APeerProjection;\n}\n\nexport function maestroA2AAgentSkills(): PlatformAgentA2ASkill[] {\n\treturn [\n\t\tMAESTRO_TUI_TURN_SKILL,\n\t\t...CODEX_SUBAGENT_DISPATCH_TABLE.a2aSkillLanes.map(\n\t\t\tmaestroSubagentLaneSkill,\n\t\t),\n\t];\n}\n\nfunction maestroSubagentLaneSkill(\n\tlane: CodexSubagentDispatchLane,\n): PlatformAgentA2ASkill {\n\tconst policy = laneSkillPolicy(lane.laneId);\n\treturn {\n\t\tid: lane.skillId,\n\t\tname: lane.displayName,\n\t\tdescription: lane.description,\n\t\ttags: [...lane.tags],\n\t\tinputModes: [\"text/plain\", \"application/json\"],\n\t\toutputModes: [\"text/plain\", \"application/json\"],\n\t\trequiredContextGrants: policy.requiredContextGrants,\n\t\tapprovalPolicyRef: `maestro.subagent.${lane.laneId}.target-policy`,\n\t\tmaxAutonomy: \"bounded\",\n\t\trequiredArtifactKinds: policy.requiredArtifactKinds,\n\t\toptionalArtifactKinds: policy.optionalArtifactKinds,\n\t\tallowedTaskClasses: policy.allowedTaskClasses,\n\t\tdeniedTaskClasses: [\n\t\t\t\"credential.materialization\",\n\t\t\t\"secret.exfiltration\",\n\t\t\t\"unbounded.repository.write\",\n\t\t],\n\t\tattributes: {\n\t\t\tevalopsSkillKind: \"maestro-subagent\",\n\t\t\tsubagentLaneId: lane.laneId,\n\t\t\trequestMetadataPath: \"evalops.subagentRequest\",\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t},\n\t\tmetadata: {\n\t\t\tevalopsSkillKind: \"maestro-subagent\",\n\t\t\tsubagentLaneId: lane.laneId,\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t\trequestMetadataPath: \"evalops.subagentRequest\",\n\t\t\tapprovalPolicy: \"target-maestro-policy\",\n\t\t\tcontextGrantPolicy: \"bounded-policy-grants\",\n\t\t\tresultPolicy: \"summary-and-artifacts\",\n\t\t\tworkGraph: \"target AgentRun child-agent work items\",\n\t\t},\n\t};\n}\n\nfunction laneSkillPolicy(laneId: string): {\n\trequiredContextGrants: string[];\n\trequiredArtifactKinds: string[];\n\toptionalArtifactKinds: string[];\n\tallowedTaskClasses: string[];\n} {\n\tswitch (laneId) {\n\t\tcase \"code-writer\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"repo:write-scoped\",\n\t\t\t\t\t\"tool:execute-tests\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"patch.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"test.report\", \"review.summary\"],\n\t\t\t\tallowedTaskClasses: [\"code.implementation\", \"code.refactor\"],\n\t\t\t};\n\t\tcase \"code-review\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"pull-request:read\",\n\t\t\t\t\t\"evidence:read\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"review.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"risk.finding\", \"test.plan\"],\n\t\t\t\tallowedTaskClasses: [\"code.review\", \"risk.analysis\"],\n\t\t\t};\n\t\tcase \"test-runner\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"tool:execute-tests\",\n\t\t\t\t\t\"evidence:write\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"test.report\"],\n\t\t\t\toptionalArtifactKinds: [\"failure.triage\", \"coverage.summary\"],\n\t\t\t\tallowedTaskClasses: [\"test.execution\", \"ci.triage\"],\n\t\t\t};\n\t\tcase \"repo-explorer\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\"repo:read\", \"evidence:write\"],\n\t\t\t\trequiredArtifactKinds: [\"repo.map\"],\n\t\t\t\toptionalArtifactKinds: [\"evidence.index\"],\n\t\t\t\tallowedTaskClasses: [\"repo.inspect\", \"context.gathering\"],\n\t\t\t};\n\t\tcase \"release-shepherd\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"pull-request:write\",\n\t\t\t\t\t\"deploy:read\",\n\t\t\t\t\t\"evidence:write\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"release.evidence\"],\n\t\t\t\toptionalArtifactKinds: [\"ci.summary\", \"deploy.status\"],\n\t\t\t\tallowedTaskClasses: [\"release.follow-through\", \"deployment.smoke\"],\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\"repo:read\"],\n\t\t\t\trequiredArtifactKinds: [\"subagent.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"evidence.index\"],\n\t\t\t\tallowedTaskClasses: [\"agent.delegation\"],\n\t\t\t};\n\t}\n}\n\nfunction normalizeEndpoint(value: string): string {\n\tconst endpoint = value.trim().replace(/\\/+$/u, \"\");\n\tif (!endpoint) {\n\t\tthrow new Error(\"A2A endpoint URL is required\");\n\t}\n\treturn endpoint;\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n\treturn Array.from(\n\t\tnew Set(values.map((value) => value.trim()).filter(Boolean)),\n\t);\n}\n\nfunction stripUndefinedValues(\n\trecord: Record<string, unknown>,\n): Record<string, unknown> {\n\treturn Object.fromEntries(\n\t\tObject.entries(record).filter(([, value]) => value !== undefined),\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"a2a-maestro-peer.js","sourceRoot":"","sources":["../../src/platform/a2a-maestro-peer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCODEX_SUBAGENT_DISPATCH_TABLE,\n\ttype CodexSubagentDispatchLane,\n} from \"../codex/subagent-dispatch-table.js\";\nimport type {\n\tPlatformAgentA2APeerProjection,\n\tPlatformAgentA2ASkill,\n} from \"./agent-registry-client.js\";\n\nexport const MAESTRO_A2A_PROTOCOL_VERSION = \"1.0\";\nexport const MAESTRO_A2A_PROTOCOL_BINDING = \"HTTP+JSON\";\nexport const MAESTRO_A2A_AGENT_CARD_PATH = \"/.well-known/agent-card.json\";\nexport const EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI =\n\t\"https://evalops.com/a2a/extensions/operating-plane/v1\";\n\nconst MAESTRO_TUI_TURN_SKILL: PlatformAgentA2ASkill = {\n\tid: \"maestro-tui-turn\",\n\tname: \"Maestro TUI turn\",\n\tdescription:\n\t\t\"Run a prompt through the local Maestro native TUI agent runner.\",\n\ttags: [\"maestro\", \"tui\", \"codex\", \"a2a\", \"fleet\"],\n\tinputModes: [\"text/plain\"],\n\toutputModes: [\"text/plain\", \"application/json\"],\n\tattributes: {\n\t\tevalopsSkillKind: \"maestro-turn\",\n\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t},\n};\n\nexport interface BuildMaestroA2APeerProjectionInput {\n\tpublicEndpointUrl: string;\n\tinternalEndpointUrl?: string;\n\tagentCardUrl?: string;\n\tprotocolVersion?: string;\n\tagentCardETag?: string;\n\tagentCardHash?: string;\n\tpushNotifications?: boolean;\n\tsecuritySchemes?: string[];\n\tattributes?: Record<string, string>;\n}\n\nexport function defaultMaestroA2ACapabilities(): string[] {\n\treturn uniqueStrings([\n\t\t\"maestro:a2a\",\n\t\t\"maestro:cli\",\n\t\t\"maestro:subagents\",\n\t\t...CODEX_SUBAGENT_DISPATCH_TABLE.a2aSkillLanes.flatMap((lane) =>\n\t\t\tlane.capabilityAliases.filter((capability) => capability.includes(\":\")),\n\t\t),\n\t]);\n}\n\nexport function buildMaestroA2APeerProjection(\n\tinput: BuildMaestroA2APeerProjectionInput,\n): PlatformAgentA2APeerProjection {\n\tconst publicEndpointUrl = normalizeEndpoint(input.publicEndpointUrl);\n\tconst internalEndpointUrl = input.internalEndpointUrl\n\t\t? normalizeEndpoint(input.internalEndpointUrl)\n\t\t: undefined;\n\tconst agentCardUrl =\n\t\tinput.agentCardUrl?.trim() ||\n\t\t`${publicEndpointUrl}${MAESTRO_A2A_AGENT_CARD_PATH}`;\n\treturn stripUndefinedValues({\n\t\tpublicEndpointUrl,\n\t\tinternalEndpointUrl,\n\t\tagentCardUrl,\n\t\tprotocolBinding: MAESTRO_A2A_PROTOCOL_BINDING,\n\t\tprotocolVersion: input.protocolVersion ?? MAESTRO_A2A_PROTOCOL_VERSION,\n\t\tsupportedExtensions: [EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI],\n\t\tskills: maestroA2AAgentSkills(),\n\t\tsecuritySchemes:\n\t\t\tinput.securitySchemes && input.securitySchemes.length > 0\n\t\t\t\t? uniqueStrings(input.securitySchemes)\n\t\t\t\t: [\"evalops-agent-token\"],\n\t\tagentCardETag: input.agentCardETag,\n\t\tagentCardHash: input.agentCardHash,\n\t\tpushNotifications: input.pushNotifications ?? true,\n\t\tattributes: {\n\t\t\truntime: \"maestro\",\n\t\t\tcontrolPlane: \"rust-control-plane\",\n\t\t\tsubagentDispatchTable: CODEX_SUBAGENT_DISPATCH_TABLE.schemaVersion,\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t\t...(input.attributes ?? {}),\n\t\t},\n\t}) as PlatformAgentA2APeerProjection;\n}\n\nexport function maestroA2AAgentSkills(): PlatformAgentA2ASkill[] {\n\treturn [\n\t\tMAESTRO_TUI_TURN_SKILL,\n\t\t...CODEX_SUBAGENT_DISPATCH_TABLE.a2aSkillLanes.map(\n\t\t\tmaestroSubagentLaneSkill,\n\t\t),\n\t];\n}\n\nfunction maestroSubagentLaneSkill(\n\tlane: CodexSubagentDispatchLane,\n): PlatformAgentA2ASkill {\n\tconst policy = laneSkillPolicy(lane.laneId);\n\treturn {\n\t\tid: lane.skillId,\n\t\tname: lane.displayName,\n\t\tdescription: lane.description,\n\t\ttags: [...lane.tags],\n\t\tinputModes: [\"text/plain\", \"application/json\"],\n\t\toutputModes: [\"text/plain\", \"application/json\"],\n\t\trequiredContextGrants: policy.requiredContextGrants,\n\t\tapprovalPolicyRef: `maestro.subagent.${lane.laneId}.target-policy`,\n\t\tmaxAutonomy: \"bounded\",\n\t\trequiredArtifactKinds: policy.requiredArtifactKinds,\n\t\toptionalArtifactKinds: policy.optionalArtifactKinds,\n\t\tallowedTaskClasses: policy.allowedTaskClasses,\n\t\tdeniedTaskClasses: [\n\t\t\t\"credential.materialization\",\n\t\t\t\"secret.exfiltration\",\n\t\t\t\"unbounded.repository.write\",\n\t\t],\n\t\tattributes: {\n\t\t\tevalopsSkillKind: \"maestro-subagent\",\n\t\t\tsubagentLaneId: lane.laneId,\n\t\t\trequestMetadataPath: \"evalops.subagentRequest\",\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t},\n\t\tmetadata: {\n\t\t\tevalopsSkillKind: \"maestro-subagent\",\n\t\t\tsubagentLaneId: lane.laneId,\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t\trequestMetadataPath: \"evalops.subagentRequest\",\n\t\t\tapprovalPolicy: \"target-maestro-policy\",\n\t\t\tcontextGrantPolicy: \"bounded-policy-grants\",\n\t\t\tresultPolicy: \"summary-and-artifacts\",\n\t\t\tworkGraph: \"target AgentRun child-agent work items\",\n\t\t},\n\t};\n}\n\nfunction laneSkillPolicy(laneId: string): {\n\trequiredContextGrants: string[];\n\trequiredArtifactKinds: string[];\n\toptionalArtifactKinds: string[];\n\tallowedTaskClasses: string[];\n} {\n\tswitch (laneId) {\n\t\tcase \"code-writer\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"repo:write-scoped\",\n\t\t\t\t\t\"tool:execute-tests\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"patch.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"test.report\", \"review.summary\"],\n\t\t\t\tallowedTaskClasses: [\"code.implementation\", \"code.refactor\"],\n\t\t\t};\n\t\tcase \"code-review\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"pull-request:read\",\n\t\t\t\t\t\"artifact:read\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"review.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"risk.finding\", \"test.plan\"],\n\t\t\t\tallowedTaskClasses: [\"code.review\", \"risk.analysis\"],\n\t\t\t};\n\t\tcase \"test-runner\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"tool:execute-tests\",\n\t\t\t\t\t\"artifact:write\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"test.report\"],\n\t\t\t\toptionalArtifactKinds: [\"failure.triage\", \"coverage.summary\"],\n\t\t\t\tallowedTaskClasses: [\"test.execution\", \"ci.triage\"],\n\t\t\t};\n\t\tcase \"repo-explorer\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\"repo:read\", \"context:index:write\"],\n\t\t\t\trequiredArtifactKinds: [\"repo.map\"],\n\t\t\t\toptionalArtifactKinds: [\"context.index\"],\n\t\t\t\tallowedTaskClasses: [\"repo.inspect\", \"context.gathering\"],\n\t\t\t};\n\t\tcase \"release-shepherd\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"pull-request:write\",\n\t\t\t\t\t\"deploy:read\",\n\t\t\t\t\t\"artifact:write\",\n\t\t\t\t\t\"runtime:events:read\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"release.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"ci.summary\", \"deploy.status\"],\n\t\t\t\tallowedTaskClasses: [\"release.follow-through\", \"deployment.smoke\"],\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\"repo:read\"],\n\t\t\t\trequiredArtifactKinds: [\"subagent.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"context.index\"],\n\t\t\t\tallowedTaskClasses: [\"agent.delegation\"],\n\t\t\t};\n\t}\n}\n\nfunction normalizeEndpoint(value: string): string {\n\tconst endpoint = value.trim().replace(/\\/+$/u, \"\");\n\tif (!endpoint) {\n\t\tthrow new Error(\"A2A endpoint URL is required\");\n\t}\n\treturn endpoint;\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n\treturn Array.from(\n\t\tnew Set(values.map((value) => value.trim()).filter(Boolean)),\n\t);\n}\n\nfunction stripUndefinedValues(\n\trecord: Record<string, unknown>,\n): Record<string, unknown> {\n\treturn Object.fromEntries(\n\t\tObject.entries(record).filter(([, value]) => value !== undefined),\n\t);\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { A2ACompletionAudit } from "./a2a-completion-audit.js";
|
|
2
|
-
export declare const A2A_TELEMETRY_INSPECTION_SCHEMA = "evalops.maestro.a2a-telemetry-inspection.
|
|
2
|
+
export declare const A2A_TELEMETRY_INSPECTION_SCHEMA = "evalops.maestro.a2a-telemetry-inspection.v2";
|
|
3
3
|
export interface A2ATelemetryCloudEventLike {
|
|
4
4
|
type: string;
|
|
5
5
|
time?: string;
|
|
@@ -19,7 +19,7 @@ export interface A2ATelemetryInspectionLane {
|
|
|
19
19
|
timing: A2ATelemetryInspectionLaneTiming;
|
|
20
20
|
orderingAnomalies: string[];
|
|
21
21
|
missingEventTypes: string[];
|
|
22
|
-
|
|
22
|
+
missingSignals: string[];
|
|
23
23
|
}
|
|
24
24
|
export interface A2ATelemetryInspectionLaneTiming {
|
|
25
25
|
firstEventAt?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-telemetry-inspect.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-telemetry-inspect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,kBAAkB,EAElB,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,+BAA+B,gDACE,CAAC;AAE/C,MAAM,WAAW,0BAA0B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,0BAA0B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,gCAAgC,CAAC;IACzC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,
|
|
1
|
+
{"version":3,"file":"a2a-telemetry-inspect.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-telemetry-inspect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,kBAAkB,EAElB,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,+BAA+B,gDACE,CAAC;AAE/C,MAAM,WAAW,0BAA0B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,0BAA0B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,gCAAgC,CAAC;IACzC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gCAAgC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,OAAO,+BAA+B,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,oBAAoB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,KAAK,EAAE,0BAA0B,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,wBAAwB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACrC,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC3B;AAcD,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,wBAAwB,GAC7B,sBAAsB,CA0DxB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const A2A_TELEMETRY_INSPECTION_SCHEMA = "evalops.maestro.a2a-telemetry-inspection.
|
|
1
|
+
export const A2A_TELEMETRY_INSPECTION_SCHEMA = "evalops.maestro.a2a-telemetry-inspection.v2";
|
|
2
2
|
const PEER_SELECTED = "maestro.events.a2a.peer.selected";
|
|
3
3
|
const TASK_DISPATCHED = "maestro.events.a2a.task.dispatched";
|
|
4
4
|
const TASK_COMPLETED = "maestro.events.a2a.task.completed";
|
|
@@ -37,7 +37,7 @@ export function inspectA2ATelemetry(input) {
|
|
|
37
37
|
complete: lanes.length > 0 &&
|
|
38
38
|
missingTelemetryLanes === 0 &&
|
|
39
39
|
orderingAnomalyLanes === 0 &&
|
|
40
|
-
lanes.every((lane) => lane.
|
|
40
|
+
lanes.every((lane) => lane.missingSignals.length === 0) &&
|
|
41
41
|
input.audit?.complete !== false,
|
|
42
42
|
counts: {
|
|
43
43
|
events: events.length,
|
|
@@ -69,7 +69,7 @@ function inspectLane(laneId, events, auditLane) {
|
|
|
69
69
|
timing,
|
|
70
70
|
orderingAnomalies: orderingAnomalies(events, timing),
|
|
71
71
|
missingEventTypes: missingEventTypes(events, eventTypes),
|
|
72
|
-
|
|
72
|
+
missingSignals: auditLane?.missingSignals ?? [],
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
75
|
function mergeLaneEventData(events) {
|