@evalops/maestro 0.10.41 → 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.
Files changed (49) hide show
  1. package/dist/cli/commands/operating-plane.d.ts.map +1 -1
  2. package/dist/cli/commands/operating-plane.js +3 -2
  3. package/dist/cli/commands/operating-plane.js.map +1 -1
  4. package/dist/cli/help.js +8 -6
  5. package/dist/cli/help.js.map +1 -1
  6. package/dist/cli.js +209 -97
  7. package/dist/codex/subagent-dispatch-table.d.ts +1 -1
  8. package/dist/codex/subagent-dispatch-table.js +1 -1
  9. package/dist/codex/subagent-dispatch-table.js.map +1 -1
  10. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  11. package/dist/node_modules/@evalops/tui/package.json +1 -1
  12. package/dist/platform/a2a-completion-audit.d.ts +12 -6
  13. package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
  14. package/dist/platform/a2a-completion-audit.js +28 -20
  15. package/dist/platform/a2a-completion-audit.js.map +1 -1
  16. package/dist/platform/a2a-maestro-peer.js +8 -7
  17. package/dist/platform/a2a-maestro-peer.js.map +1 -1
  18. package/dist/platform/a2a-telemetry-inspect.d.ts +2 -2
  19. package/dist/platform/a2a-telemetry-inspect.d.ts.map +1 -1
  20. package/dist/platform/a2a-telemetry-inspect.js +3 -3
  21. package/dist/platform/a2a-telemetry-inspect.js.map +1 -1
  22. package/dist/platform/operating-plane-client.d.ts +2 -2
  23. package/dist/platform/operating-plane-client.d.ts.map +1 -1
  24. package/dist/platform/operating-plane-client.js.map +1 -1
  25. package/dist/platform/operating-plane-summary.d.ts +4 -4
  26. package/dist/platform/operating-plane-summary.d.ts.map +1 -1
  27. package/dist/platform/operating-plane-summary.js +39 -27
  28. package/dist/platform/operating-plane-summary.js.map +1 -1
  29. package/dist/server/session-timeline.d.ts.map +1 -1
  30. package/dist/server/session-timeline.js +112 -2
  31. package/dist/server/session-timeline.js.map +1 -1
  32. package/dist/tools/background/resource-monitor.d.ts.map +1 -1
  33. package/dist/tools/background/resource-monitor.js +8 -6
  34. package/dist/tools/background/resource-monitor.js.map +1 -1
  35. package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
  36. package/dist/tools/parallel-ripgrep.js +2 -2
  37. package/dist/tools/parallel-ripgrep.js.map +1 -1
  38. package/dist/tools/ripgrep-utils.d.ts +1 -0
  39. package/dist/tools/ripgrep-utils.d.ts.map +1 -1
  40. package/dist/tools/ripgrep-utils.js +4 -0
  41. package/dist/tools/ripgrep-utils.js.map +1 -1
  42. package/dist/tools/search.d.ts.map +1 -1
  43. package/dist/tools/search.js +2 -2
  44. package/dist/tools/search.js.map +1 -1
  45. package/dist/utils/document-extractor.d.ts.map +1 -1
  46. package/dist/utils/document-extractor.js +8 -1
  47. package/dist/utils/document-extractor.js.map +1 -1
  48. package/dist/version.json +2 -2
  49. 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 verification evidence capture to a target-owned Maestro child agent.";
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 verification evidence capture to a target-owned Maestro child agent.",
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":"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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 verification evidence 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
+ {"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,6 +1,6 @@
1
1
  {
2
2
  "name": "@evalops/contracts",
3
- "version": "0.10.41",
3
+ "version": "0.10.43",
4
4
  "description": "Shared Maestro contracts for frontend/backend integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evalops/tui",
3
- "version": "0.10.41",
3
+ "version": "0.10.43",
4
4
  "description": "Terminal UI library with differential rendering for Maestro",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -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.v1";
4
- export type A2ACompletionEvidenceKey = "status" | "artifact" | "task" | "workGraph" | "push" | "correlation";
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
- evidence: Record<A2ACompletionEvidenceKey, boolean>;
15
- missingEvidence: A2ACompletionEvidenceKey[];
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
- pushEvidenceKeys?: ReadonlySet<string>;
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 a2aPushEvidenceKey(peer: string, taskId: string): string;
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,wBAAwB,GACjC,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,QAAQ,EAAE,MAAM,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;IACpD,eAAe,EAAE,wBAAwB,EAAE,CAAC;CAC5C;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,4BAA4B;IAC5C,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,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,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAClB,MAAM,CAER"}
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.v1";
3
- const EVIDENCE_ORDER = [
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.missingEvidence.length === 0).length;
16
- const pushCoveredLanes = lanes.filter((lane) => lane.evidence.push).length;
17
- const workGraphCoveredLanes = lanes.filter((lane) => lane.evidence.workGraph).length;
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 a2aPushEvidenceKey(peer, taskId) {
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(a2aPushEvidenceKey(entry.peer, entry.taskId)))
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 a2aPushEvidenceKey(a2a.peer, a2a.taskId);
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 evidence = {
96
+ const signals = {
97
97
  status: Boolean(status),
98
- artifact: hasArtifactEvidence(ledgerEntry),
98
+ artifact: hasArtifactSignal(ledgerEntry),
99
99
  task: Boolean(ledgerEntry),
100
100
  workGraph: Boolean(ledgerEntry?.workGraph),
101
- push: hasPushEvidence(input, a2a, remoteTaskIdCounts),
102
- correlation: hasCorrelationEvidence(input.swarm.id, parentTaskId, a2a, ledgerEntry),
101
+ push: hasPushSignal(input, a2a, remoteTaskIdCounts),
102
+ correlation: hasCorrelationSignal(input.swarm.id, parentTaskId, a2a, ledgerEntry),
103
103
  };
104
- const missingEvidence = EVIDENCE_ORDER.filter((key) => !evidence[key]);
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
- evidence,
115
- missingEvidence,
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 hasPushEvidence(input, a2a, remoteTaskIdCounts) {
127
- const exactKey = a2aPushEvidenceKey(a2a.peer, a2a.taskId);
128
- if (input.pushEvidenceKeys?.has(exactKey)) {
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 hasArtifactEvidence(entry) {
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 hasCorrelationEvidence(swarmId, parentTaskId, a2a, entry) {
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":"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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.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
- "evidence:read",
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
- "evidence:write",
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", "evidence:write"],
137
+ requiredContextGrants: ["repo:read", "context:index:write"],
138
138
  requiredArtifactKinds: ["repo.map"],
139
- optionalArtifactKinds: ["evidence.index"],
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
- "evidence:write",
148
+ "artifact:write",
149
+ "runtime:events:read",
149
150
  ],
150
- requiredArtifactKinds: ["release.evidence"],
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: ["evidence.index"],
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.v1";
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
- missingEvidence: string[];
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,eAAe,EAAE,MAAM,EAAE,CAAC;CAC1B;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
+ {"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.v1";
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.missingEvidence.length === 0) &&
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
- missingEvidence: auditLane?.missingEvidence ?? [],
72
+ missingSignals: auditLane?.missingSignals ?? [],
73
73
  };
74
74
  }
75
75
  function mergeLaneEventData(events) {