@evalops/maestro 0.10.30 → 0.10.32

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 (80) hide show
  1. package/dist/agent/compaction/cut-points.d.ts +157 -0
  2. package/dist/agent/compaction/cut-points.d.ts.map +1 -0
  3. package/dist/agent/compaction/cut-points.js +341 -0
  4. package/dist/agent/compaction/cut-points.js.map +1 -0
  5. package/dist/agent/compaction.d.ts +4 -144
  6. package/dist/agent/compaction.d.ts.map +1 -1
  7. package/dist/agent/compaction.js +5 -340
  8. package/dist/agent/compaction.js.map +1 -1
  9. package/dist/agent/transport/tool-execution.d.ts +1 -0
  10. package/dist/agent/transport/tool-execution.d.ts.map +1 -1
  11. package/dist/agent/transport/tool-execution.js +23 -3
  12. package/dist/agent/transport/tool-execution.js.map +1 -1
  13. package/dist/agent/transport/tool-phase-summary.d.ts +6 -0
  14. package/dist/agent/transport/tool-phase-summary.d.ts.map +1 -0
  15. package/dist/agent/transport/tool-phase-summary.js +99 -0
  16. package/dist/agent/transport/tool-phase-summary.js.map +1 -0
  17. package/dist/agent/transport/tool-safety-pipeline.d.ts +1 -0
  18. package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
  19. package/dist/agent/transport/tool-safety-pipeline.js +9 -4
  20. package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
  21. package/dist/agent/transport.d.ts.map +1 -1
  22. package/dist/agent/transport.js +4 -99
  23. package/dist/agent/transport.js.map +1 -1
  24. package/dist/cli/commands/a2a/args.d.ts +13 -0
  25. package/dist/cli/commands/a2a/args.d.ts.map +1 -0
  26. package/dist/cli/commands/a2a/args.js +327 -0
  27. package/dist/cli/commands/a2a/args.js.map +1 -0
  28. package/dist/cli/commands/a2a/discovery.d.ts +40 -0
  29. package/dist/cli/commands/a2a/discovery.d.ts.map +1 -0
  30. package/dist/cli/commands/a2a/discovery.js +150 -0
  31. package/dist/cli/commands/a2a/discovery.js.map +1 -0
  32. package/dist/cli/commands/a2a.d.ts +2 -5
  33. package/dist/cli/commands/a2a.d.ts.map +1 -1
  34. package/dist/cli/commands/a2a.js +4 -474
  35. package/dist/cli/commands/a2a.js.map +1 -1
  36. package/dist/cli.js +1868 -1591
  37. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  38. package/dist/node_modules/@evalops/tui/package.json +1 -1
  39. package/dist/server/app-context.d.ts +7 -0
  40. package/dist/server/app-context.d.ts.map +1 -1
  41. package/dist/server/app-context.js.map +1 -1
  42. package/dist/server/handlers/chat-ws.d.ts.map +1 -1
  43. package/dist/server/handlers/chat-ws.js +42 -24
  44. package/dist/server/handlers/chat-ws.js.map +1 -1
  45. package/dist/server/handlers/chat.d.ts.map +1 -1
  46. package/dist/server/handlers/chat.js +54 -35
  47. package/dist/server/handlers/chat.js.map +1 -1
  48. package/dist/server/handlers/hosted-runner-identity.d.ts +17 -0
  49. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  50. package/dist/server/handlers/hosted-runner-identity.js +7 -0
  51. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  52. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  53. package/dist/server/handlers/platform-a2a-push.js +134 -15
  54. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  55. package/dist/server/server-utils.d.ts.map +1 -1
  56. package/dist/server/server-utils.js +12 -0
  57. package/dist/server/server-utils.js.map +1 -1
  58. package/dist/server/session-timeline.d.ts.map +1 -1
  59. package/dist/server/session-timeline.js +13 -0
  60. package/dist/server/session-timeline.js.map +1 -1
  61. package/dist/telemetry/maestro-event-catalog.d.ts +30 -0
  62. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  63. package/dist/telemetry/maestro-event-catalog.js +96 -5
  64. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  65. package/dist/tools/find.d.ts +2 -0
  66. package/dist/tools/find.d.ts.map +1 -1
  67. package/dist/tools/find.js +25 -12
  68. package/dist/tools/find.js.map +1 -1
  69. package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
  70. package/dist/tools/parallel-ripgrep.js +1 -10
  71. package/dist/tools/parallel-ripgrep.js.map +1 -1
  72. package/dist/tools/ripgrep-utils.d.ts +1 -0
  73. package/dist/tools/ripgrep-utils.d.ts.map +1 -1
  74. package/dist/tools/ripgrep-utils.js +9 -0
  75. package/dist/tools/ripgrep-utils.js.map +1 -1
  76. package/dist/tools/search.d.ts.map +1 -1
  77. package/dist/tools/search.js +4 -4
  78. package/dist/tools/search.js.map +1 -1
  79. package/dist/version.json +2 -2
  80. package/package.json +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"platform-a2a-push.js","sourceRoot":"","sources":["../../../src/server/handlers/platform-a2a-push.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { HostedRunnerContext, WebServerContext } from \"../app-context.js\";\nimport {\n\tApiError,\n\tgetRequestHeader,\n\treadJsonBody,\n\tsecureCompare,\n\tsendJson,\n} from \"../server-utils.js\";\n\nexport const PLATFORM_A2A_PUSH_CALLBACK_PATH = \"/api/platform/a2a/push\";\n\nconst CALLBACK_TOKEN_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_CALLBACK_TOKEN\",\n\t\"MAESTRO_A2A_CALLBACK_TOKEN\",\n] as const;\n\nexport function platformA2APushAuthBoundaryExemptPaths(): readonly string[] {\n\treturn callbackToken() ? [PLATFORM_A2A_PUSH_CALLBACK_PATH] : [];\n}\n\ntype JsonObject = Record<string, unknown>;\n\ninterface PlatformA2APushSnapshot {\n\tkind: \"statusUpdate\" | \"artifactUpdate\" | \"task\" | \"message\";\n\ttaskId?: string;\n\tcontextId?: string;\n\tstate?: string;\n\tfinal?: boolean;\n\treceivedAt: string;\n\truntimeEventId?: string;\n\truntimeEventType?: string;\n}\n\nexport async function handlePlatformA2APushCallback(\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tcontext: WebServerContext,\n): Promise<void> {\n\tif (req.method !== \"POST\") {\n\t\tthrow new ApiError(405, \"Method not allowed\");\n\t}\n\tassertCallbackToken(req);\n\tconst body = await readJsonBody<unknown>(req);\n\tconst snapshot = platformA2APushSnapshot(body);\n\tif (!snapshot) {\n\t\tthrow new ApiError(400, \"Invalid A2A push notification payload\");\n\t}\n\tconst hostedRunner = context.hostedRunner;\n\tif (\n\t\thostedRunner?.a2aTaskId &&\n\t\tsnapshot.taskId &&\n\t\thostedRunner.a2aTaskId !== snapshot.taskId\n\t) {\n\t\tthrow new ApiError(404, \"A2A task not found\");\n\t}\n\tif (hostedRunner) {\n\t\trecordHostedRunnerA2APush(hostedRunner, snapshot);\n\t}\n\tsendJson(res, 202, { accepted: true, ...snapshot }, context.corsHeaders, req);\n}\n\nfunction assertCallbackToken(req: IncomingMessage): void {\n\tconst expected = callbackToken();\n\tif (!expected) {\n\t\treturn;\n\t}\n\tconst provided = getRequestHeader(req, \"x-a2a-notification-token\");\n\tif (!provided || !secureCompare(provided, expected)) {\n\t\tthrow new ApiError(401, \"Invalid A2A notification token\");\n\t}\n}\n\nfunction platformA2APushSnapshot(\n\tpayload: unknown,\n): PlatformA2APushSnapshot | null {\n\tif (!isJsonObject(payload)) {\n\t\treturn null;\n\t}\n\tif (isJsonObject(payload.statusUpdate)) {\n\t\tconst taskId = stringField(payload.statusUpdate, \"taskId\");\n\t\tif (!taskId) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tkind: \"statusUpdate\",\n\t\t\ttaskId,\n\t\t\tcontextId: stringField(payload.statusUpdate, \"contextId\"),\n\t\t\tstate: statusState(payload.statusUpdate),\n\t\t\tfinal: booleanField(payload.statusUpdate, \"final\"),\n\t\t\treceivedAt: new Date().toISOString(),\n\t\t\truntimeEventId: metadataString(payload.statusUpdate, \"runtimeEventId\"),\n\t\t\truntimeEventType: metadataString(\n\t\t\t\tpayload.statusUpdate,\n\t\t\t\t\"runtimeEventType\",\n\t\t\t),\n\t\t};\n\t}\n\tif (isJsonObject(payload.task)) {\n\t\tconst taskId = stringField(payload.task, \"id\");\n\t\tif (!taskId) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tkind: \"task\",\n\t\t\ttaskId,\n\t\t\tcontextId: stringField(payload.task, \"contextId\"),\n\t\t\tstate: statusState(payload.task),\n\t\t\treceivedAt: new Date().toISOString(),\n\t\t};\n\t}\n\tif (isJsonObject(payload.artifactUpdate)) {\n\t\tconst taskId = stringField(payload.artifactUpdate, \"taskId\");\n\t\tif (!taskId) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tkind: \"artifactUpdate\",\n\t\t\ttaskId,\n\t\t\tcontextId: stringField(payload.artifactUpdate, \"contextId\"),\n\t\t\treceivedAt: new Date().toISOString(),\n\t\t};\n\t}\n\tif (isJsonObject(payload.message)) {\n\t\tconst taskId = stringField(payload.message, \"taskId\");\n\t\tif (!taskId) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tkind: \"message\",\n\t\t\ttaskId,\n\t\t\tcontextId: stringField(payload.message, \"contextId\"),\n\t\t\treceivedAt: new Date().toISOString(),\n\t\t};\n\t}\n\treturn null;\n}\n\nfunction recordHostedRunnerA2APush(\n\thostedRunner: HostedRunnerContext,\n\tsnapshot: PlatformA2APushSnapshot,\n): void {\n\thostedRunner.lastPlatformA2APush = snapshot;\n\tif (snapshot.taskId && !hostedRunner.a2aTaskId) {\n\t\thostedRunner.a2aTaskId = snapshot.taskId;\n\t}\n}\n\nfunction statusState(value: JsonObject): string | undefined {\n\tconst status = isJsonObject(value.status) ? value.status : undefined;\n\treturn status ? stringField(status, \"state\") : undefined;\n}\n\nfunction metadataString(value: JsonObject, key: string): string | undefined {\n\tconst metadata = isJsonObject(value.metadata) ? value.metadata : undefined;\n\treturn metadata ? stringField(metadata, key) : undefined;\n}\n\nfunction stringField(value: JsonObject, key: string): string | undefined {\n\tconst field = value[key];\n\treturn typeof field === \"string\" && field.trim().length > 0\n\t\t? field.trim()\n\t\t: undefined;\n}\n\nfunction booleanField(value: JsonObject, key: string): boolean | undefined {\n\tconst field = value[key];\n\treturn typeof field === \"boolean\" ? field : undefined;\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction callbackToken(): string | undefined {\n\tfor (const name of CALLBACK_TOKEN_ENV_VARS) {\n\t\tconst value = process.env[name]?.trim();\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n"]}
1
+ {"version":3,"file":"platform-a2a-push.js","sourceRoot":"","sources":["../../../src/server/handlers/platform-a2a-push.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,QAAQ,GACR,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,+BAA+B,GAAG,wBAAwB,CAAC;AAExE,MAAM,uBAAuB,GAAG;IAC/B,qCAAqC;IACrC,4BAA4B;CACnB,CAAC;AAEX,MAAM,UAAU,sCAAsC;IACrD,OAAO,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AAgCD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAClD,GAAoB,EACpB,GAAmB,EACnB,OAAyB;IAEzB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC/C,CAAC;IACD,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAU,GAAG,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,uCAAuC,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1C,iCAAiC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC1D,IAAI,YAAY,EAAE,CAAC;QAClB,yBAAyB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAoB;IAChD,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;IACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO;IACR,CAAC;IACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;IACnE,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;IAC3D,CAAC;AACF,CAAC;AAED,SAAS,uBAAuB,CAC/B,OAAgB,EAChB,GAAoB;IAEpB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,cAAc,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,0BAA0B,CAChC;YACC,IAAI,EAAE,cAAc;YACpB,MAAM;YACN,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC;YACzD,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC;YACjD,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC;YACxC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;YAClD,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC;YACtE,gBAAgB,EAAE,cAAc,CAC/B,OAAO,CAAC,YAAY,EACpB,kBAAkB,CAClB;SACD,EACD,OAAO,CAAC,YAAY,EACpB,cAAc,CACd,CAAC;IACH,CAAC;IACD,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,0BAA0B,CAChC;YACC,IAAI,EAAE,MAAM;YACZ,MAAM;YACN,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;YACjD,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;YACzC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;YAChC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,EACD,OAAO,CAAC,IAAI,EACZ,cAAc,CACd,CAAC;IACH,CAAC;IACD,IAAI,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,0BAA0B,CAChC;YACC,IAAI,EAAE,gBAAgB;YACtB,MAAM;YACN,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC;YAC3D,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC;YACnD,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,EACD,OAAO,CAAC,cAAc,EACtB,cAAc,CACd,CAAC;IACH,CAAC;IACD,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,0BAA0B,CAChC;YACC,IAAI,EAAE,SAAS;YACf,MAAM;YACN,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;YACpD,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;YAC5C,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,EACD,OAAO,CAAC,OAAO,EACf,cAAc,CACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,0BAA0B,CAClC,QAAiC,EACjC,OAAmB,EACnB,cAAsC;IAEtC,MAAM,eAAe,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;IAChE,OAAO;QACN,GAAG,QAAQ;QACX,GAAG,eAAe;QAClB,GAAG,cAAc;QACjB,cAAc,EACb,QAAQ,CAAC,cAAc;YACvB,eAAe,CAAC,cAAc;YAC9B,cAAc,CAAC,cAAc;QAC9B,WAAW,EACV,QAAQ,CAAC,WAAW;YACpB,eAAe,CAAC,WAAW;YAC3B,cAAc,CAAC,WAAW;KAC3B,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CACrC,GAAoB;IAEpB,OAAO,6BAA6B,CAAC;QACpC,WAAW,EAAE,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,SAAS;QAC9D,UAAU,EAAE,gBAAgB,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,SAAS;QAC5D,cAAc,EACb,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,EAAE,2BAA2B,CAAC;YACvE,SAAS;QACV,WAAW,EACV,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,EAAE,wBAAwB,CAAC;YACjE,SAAS;QACV,OAAO,EACN,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,EAAE,oBAAoB,CAAC;YACjE,SAAS;QACV,OAAO,EACN,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;YAChE,SAAS;KACV,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CACtC,KAAiB;IAEjB,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,6BAA6B,CAAC;QACpC,WAAW,EACV,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC;YACpC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC;YACpC,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC;QACtC,UAAU,EACT,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC;YACnC,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC;YACnC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC;QACrC,cAAc,EACb,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC;YACvC,WAAW,CAAC,QAAQ,EAAE,iBAAiB,CAAC;QACzC,WAAW,EACV,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC;YACpC,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC;QACtC,OAAO,EACN,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC;QACtE,OAAO,EACN,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC;KACtE,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CACrC,OAA+B;IAE/B,OAAO,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAC5D,CACyB,CAAC;AAC7B,CAAC;AAED,SAAS,iCAAiC,CACzC,YAA6C,EAC7C,QAAiC;IAEjC,IACC,YAAY,EAAE,SAAS;QACvB,QAAQ,CAAC,MAAM;QACf,YAAY,CAAC,SAAS,KAAK,QAAQ,CAAC,MAAM,EACzC,CAAC;QACF,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;QAChC,OAAO;IACR,CAAC;IAED,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC;IAC7C,IAAI,eAAe,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC;QACrE,CAAC;QACD,OAAO;IACR,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,QAAQ,CACjB,GAAG,EACH,qDAAqD,CACrD,CAAC;IACH,CAAC;AACF,CAAC;AAED,SAAS,yBAAyB,CACjC,YAAiC,EACjC,QAAiC;IAEjC,YAAY,CAAC,mBAAmB,GAAG,QAAQ,CAAC;IAC5C,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QAChD,YAAY,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC1C,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB;IACrC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,OAAO,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,SAAS,cAAc,CAAC,KAAiB,EAAE,GAAW;IACrD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,OAAO,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,SAAS,eAAe,CACvB,OAAmB,EACnB,KAAiB;IAKjB,OAAO;QACN,GAAG,aAAa,CACf,aAAa,EACb,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAChE;QACD,GAAG,aAAa,CACf,gBAAgB,EAChB,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE;YAC/B,gBAAgB;YAChB,iBAAiB;YACjB,OAAO;YACP,QAAQ;SACR,CAAC,CACF;QACD,GAAG,aAAa,CACf,UAAU,EACV,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CACpE;KACD,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACvB,OAAmB,EACnB,KAAiB,EACjB,IAAuB;IAEvB,KAAK,MAAM,MAAM,IAAI,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,MAAM,CAAC;YACf,CAAC;YACD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,QAAQ,EAAE,CAAC;gBACd,OAAO,QAAQ,CAAC;YACjB,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CACxB,OAAmB,EACnB,KAAiB;IAEjB,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC;IACD,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CACrB,GAAM,EACN,KAAyB;IAEzB,OAAO,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,KAAa;IAClD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB,EAAE,GAAW;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAC1D,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;QACd,CAAC,CAAC,SAAS,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB,EAAE,GAAW;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,aAAa;IACrB,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC","sourcesContent":["import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { HostedRunnerContext, WebServerContext } from \"../app-context.js\";\nimport {\n\tApiError,\n\tgetRequestHeader,\n\treadJsonBody,\n\tsecureCompare,\n\tsendJson,\n} from \"../server-utils.js\";\n\nexport const PLATFORM_A2A_PUSH_CALLBACK_PATH = \"/api/platform/a2a/push\";\n\nconst CALLBACK_TOKEN_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_CALLBACK_TOKEN\",\n\t\"MAESTRO_A2A_CALLBACK_TOKEN\",\n] as const;\n\nexport function platformA2APushAuthBoundaryExemptPaths(): readonly string[] {\n\treturn callbackToken() ? [PLATFORM_A2A_PUSH_CALLBACK_PATH] : [];\n}\n\ntype JsonObject = Record<string, unknown>;\n\ninterface PlatformA2APushSnapshot {\n\tkind: \"statusUpdate\" | \"artifactUpdate\" | \"task\" | \"message\";\n\ttaskId?: string;\n\tcontextId?: string;\n\tworkspaceId?: string;\n\torganizationId?: string;\n\ttenantId?: string;\n\tstate?: string;\n\tfinal?: boolean;\n\treceivedAt: string;\n\truntimeEventId?: string;\n\truntimeEventType?: string;\n\ttraceparent?: string;\n\ttracestate?: string;\n\tagentId?: string;\n\tactorId?: string;\n}\n\ntype PlatformA2APushContext = Pick<\n\tPlatformA2APushSnapshot,\n\t| \"traceparent\"\n\t| \"tracestate\"\n\t| \"organizationId\"\n\t| \"workspaceId\"\n\t| \"agentId\"\n\t| \"actorId\"\n>;\n\nexport async function handlePlatformA2APushCallback(\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tcontext: WebServerContext,\n): Promise<void> {\n\tif (req.method !== \"POST\") {\n\t\tthrow new ApiError(405, \"Method not allowed\");\n\t}\n\tassertCallbackToken(req);\n\tconst body = await readJsonBody<unknown>(req);\n\tconst snapshot = platformA2APushSnapshot(body, req);\n\tif (!snapshot) {\n\t\tthrow new ApiError(400, \"Invalid A2A push notification payload\");\n\t}\n\tconst hostedRunner = context.hostedRunner;\n\tassertHostedRunnerA2APushBoundary(hostedRunner, snapshot);\n\tif (hostedRunner) {\n\t\trecordHostedRunnerA2APush(hostedRunner, snapshot);\n\t}\n\tsendJson(res, 202, { accepted: true, ...snapshot }, context.corsHeaders, req);\n}\n\nfunction assertCallbackToken(req: IncomingMessage): void {\n\tconst expected = callbackToken();\n\tif (!expected) {\n\t\treturn;\n\t}\n\tconst provided = getRequestHeader(req, \"x-a2a-notification-token\");\n\tif (!provided || !secureCompare(provided, expected)) {\n\t\tthrow new ApiError(401, \"Invalid A2A notification token\");\n\t}\n}\n\nfunction platformA2APushSnapshot(\n\tpayload: unknown,\n\treq: IncomingMessage,\n): PlatformA2APushSnapshot | null {\n\tif (!isJsonObject(payload)) {\n\t\treturn null;\n\t}\n\tconst requestContext = platformA2APushRequestContext(req);\n\tif (isJsonObject(payload.statusUpdate)) {\n\t\tconst taskId = stringField(payload.statusUpdate, \"taskId\");\n\t\tif (!taskId) {\n\t\t\treturn null;\n\t\t}\n\t\treturn withPlatformA2APushContext(\n\t\t\t{\n\t\t\t\tkind: \"statusUpdate\",\n\t\t\t\ttaskId,\n\t\t\t\tcontextId: stringField(payload.statusUpdate, \"contextId\"),\n\t\t\t\t...ownershipFields(payload, payload.statusUpdate),\n\t\t\t\tstate: statusState(payload.statusUpdate),\n\t\t\t\tfinal: booleanField(payload.statusUpdate, \"final\"),\n\t\t\t\treceivedAt: new Date().toISOString(),\n\t\t\t\truntimeEventId: metadataString(payload.statusUpdate, \"runtimeEventId\"),\n\t\t\t\truntimeEventType: metadataString(\n\t\t\t\t\tpayload.statusUpdate,\n\t\t\t\t\t\"runtimeEventType\",\n\t\t\t\t),\n\t\t\t},\n\t\t\tpayload.statusUpdate,\n\t\t\trequestContext,\n\t\t);\n\t}\n\tif (isJsonObject(payload.task)) {\n\t\tconst taskId = stringField(payload.task, \"id\");\n\t\tif (!taskId) {\n\t\t\treturn null;\n\t\t}\n\t\treturn withPlatformA2APushContext(\n\t\t\t{\n\t\t\t\tkind: \"task\",\n\t\t\t\ttaskId,\n\t\t\t\tcontextId: stringField(payload.task, \"contextId\"),\n\t\t\t\t...ownershipFields(payload, payload.task),\n\t\t\t\tstate: statusState(payload.task),\n\t\t\t\treceivedAt: new Date().toISOString(),\n\t\t\t},\n\t\t\tpayload.task,\n\t\t\trequestContext,\n\t\t);\n\t}\n\tif (isJsonObject(payload.artifactUpdate)) {\n\t\tconst taskId = stringField(payload.artifactUpdate, \"taskId\");\n\t\tif (!taskId) {\n\t\t\treturn null;\n\t\t}\n\t\treturn withPlatformA2APushContext(\n\t\t\t{\n\t\t\t\tkind: \"artifactUpdate\",\n\t\t\t\ttaskId,\n\t\t\t\tcontextId: stringField(payload.artifactUpdate, \"contextId\"),\n\t\t\t\t...ownershipFields(payload, payload.artifactUpdate),\n\t\t\t\treceivedAt: new Date().toISOString(),\n\t\t\t},\n\t\t\tpayload.artifactUpdate,\n\t\t\trequestContext,\n\t\t);\n\t}\n\tif (isJsonObject(payload.message)) {\n\t\tconst taskId = stringField(payload.message, \"taskId\");\n\t\tif (!taskId) {\n\t\t\treturn null;\n\t\t}\n\t\treturn withPlatformA2APushContext(\n\t\t\t{\n\t\t\t\tkind: \"message\",\n\t\t\t\ttaskId,\n\t\t\t\tcontextId: stringField(payload.message, \"contextId\"),\n\t\t\t\t...ownershipFields(payload, payload.message),\n\t\t\t\treceivedAt: new Date().toISOString(),\n\t\t\t},\n\t\t\tpayload.message,\n\t\t\trequestContext,\n\t\t);\n\t}\n\treturn null;\n}\n\nfunction withPlatformA2APushContext(\n\tsnapshot: PlatformA2APushSnapshot,\n\tpayload: JsonObject,\n\trequestContext: PlatformA2APushContext,\n): PlatformA2APushSnapshot {\n\tconst metadataContext = platformA2APushMetadataContext(payload);\n\treturn {\n\t\t...snapshot,\n\t\t...metadataContext,\n\t\t...requestContext,\n\t\torganizationId:\n\t\t\tsnapshot.organizationId ??\n\t\t\tmetadataContext.organizationId ??\n\t\t\trequestContext.organizationId,\n\t\tworkspaceId:\n\t\t\tsnapshot.workspaceId ??\n\t\t\tmetadataContext.workspaceId ??\n\t\t\trequestContext.workspaceId,\n\t};\n}\n\nfunction platformA2APushRequestContext(\n\treq: IncomingMessage,\n): PlatformA2APushContext {\n\treturn compactPlatformA2APushContext({\n\t\ttraceparent: getRequestHeader(req, \"traceparent\") ?? undefined,\n\t\ttracestate: getRequestHeader(req, \"tracestate\") ?? undefined,\n\t\torganizationId:\n\t\t\tgetRequestHeader(req, \"x-organization-id\", \"x-evalops-organization-id\") ??\n\t\t\tundefined,\n\t\tworkspaceId:\n\t\t\tgetRequestHeader(req, \"x-workspace-id\", \"x-evalops-workspace-id\") ??\n\t\t\tundefined,\n\t\tagentId:\n\t\t\tgetRequestHeader(req, \"x-evalops-agent-id\", \"x-maestro-agent-id\") ??\n\t\t\tundefined,\n\t\tactorId:\n\t\t\tgetRequestHeader(req, \"x-evalops-actor-id\", \"x-evalops-user-id\") ??\n\t\t\tundefined,\n\t});\n}\n\nfunction platformA2APushMetadataContext(\n\tvalue: JsonObject,\n): PlatformA2APushContext {\n\tconst metadata = isJsonObject(value.metadata) ? value.metadata : undefined;\n\tif (!metadata) {\n\t\treturn {};\n\t}\n\treturn compactPlatformA2APushContext({\n\t\ttraceparent:\n\t\t\tstringField(metadata, \"traceparent\") ??\n\t\t\tstringField(metadata, \"traceParent\") ??\n\t\t\tstringField(metadata, \"trace_parent\"),\n\t\ttracestate:\n\t\t\tstringField(metadata, \"tracestate\") ??\n\t\t\tstringField(metadata, \"traceState\") ??\n\t\t\tstringField(metadata, \"trace_state\"),\n\t\torganizationId:\n\t\t\tstringField(metadata, \"organizationId\") ??\n\t\t\tstringField(metadata, \"organization_id\"),\n\t\tworkspaceId:\n\t\t\tstringField(metadata, \"workspaceId\") ??\n\t\t\tstringField(metadata, \"workspace_id\"),\n\t\tagentId:\n\t\t\tstringField(metadata, \"agentId\") ?? stringField(metadata, \"agent_id\"),\n\t\tactorId:\n\t\t\tstringField(metadata, \"actorId\") ?? stringField(metadata, \"actor_id\"),\n\t});\n}\n\nfunction compactPlatformA2APushContext(\n\tcontext: PlatformA2APushContext,\n): PlatformA2APushContext {\n\treturn Object.fromEntries(\n\t\tObject.entries(context).filter(\n\t\t\t([, value]) => typeof value === \"string\" && value.length > 0,\n\t\t),\n\t) as PlatformA2APushContext;\n}\n\nfunction assertHostedRunnerA2APushBoundary(\n\thostedRunner: HostedRunnerContext | undefined,\n\tsnapshot: PlatformA2APushSnapshot,\n): void {\n\tif (\n\t\thostedRunner?.a2aTaskId &&\n\t\tsnapshot.taskId &&\n\t\thostedRunner.a2aTaskId !== snapshot.taskId\n\t) {\n\t\tthrow new ApiError(404, \"A2A task not found\");\n\t}\n\tif (!hostedRunner?.workspaceId) {\n\t\treturn;\n\t}\n\n\tconst workspaceMarker = snapshot.workspaceId;\n\tif (workspaceMarker) {\n\t\tif (!sameIdentifier(workspaceMarker, hostedRunner.workspaceId)) {\n\t\t\tthrow new ApiError(403, \"A2A push notification workspace mismatch\");\n\t\t}\n\t\treturn;\n\t}\n\n\tif (!hostedRunner.a2aTaskId) {\n\t\tthrow new ApiError(\n\t\t\t403,\n\t\t\t\"A2A push notification is missing workspace metadata\",\n\t\t);\n\t}\n}\n\nfunction recordHostedRunnerA2APush(\n\thostedRunner: HostedRunnerContext,\n\tsnapshot: PlatformA2APushSnapshot,\n): void {\n\thostedRunner.lastPlatformA2APush = snapshot;\n\tif (snapshot.taskId && !hostedRunner.a2aTaskId) {\n\t\thostedRunner.a2aTaskId = snapshot.taskId;\n\t}\n}\n\nfunction statusState(value: JsonObject): string | undefined {\n\tconst status = isJsonObject(value.status) ? value.status : undefined;\n\treturn status ? stringField(status, \"state\") : undefined;\n}\n\nfunction metadataString(value: JsonObject, key: string): string | undefined {\n\tconst metadata = isJsonObject(value.metadata) ? value.metadata : undefined;\n\treturn metadata ? stringField(metadata, key) : undefined;\n}\n\nfunction ownershipFields(\n\tpayload: JsonObject,\n\tvalue: JsonObject,\n): Pick<\n\tPlatformA2APushSnapshot,\n\t\"workspaceId\" | \"organizationId\" | \"tenantId\"\n> {\n\treturn {\n\t\t...optionalField(\n\t\t\t\"workspaceId\",\n\t\t\townershipString(payload, value, [\"workspaceId\", \"workspace_id\"]),\n\t\t),\n\t\t...optionalField(\n\t\t\t\"organizationId\",\n\t\t\townershipString(payload, value, [\n\t\t\t\t\"organizationId\",\n\t\t\t\t\"organization_id\",\n\t\t\t\t\"orgId\",\n\t\t\t\t\"org_id\",\n\t\t\t]),\n\t\t),\n\t\t...optionalField(\n\t\t\t\"tenantId\",\n\t\t\townershipString(payload, value, [\"tenantId\", \"tenant_id\", \"tenant\"]),\n\t\t),\n\t};\n}\n\nfunction ownershipString(\n\tpayload: JsonObject,\n\tvalue: JsonObject,\n\tkeys: readonly string[],\n): string | undefined {\n\tfor (const source of ownershipSources(payload, value)) {\n\t\tfor (const key of keys) {\n\t\t\tconst direct = stringField(source, key);\n\t\t\tif (direct) {\n\t\t\t\treturn direct;\n\t\t\t}\n\t\t\tconst metadata = metadataString(source, key);\n\t\t\tif (metadata) {\n\t\t\t\treturn metadata;\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction ownershipSources(\n\tpayload: JsonObject,\n\tvalue: JsonObject,\n): JsonObject[] {\n\tconst sources = [value, payload];\n\tconst status = isJsonObject(value.status) ? value.status : undefined;\n\tif (status) {\n\t\tsources.push(status);\n\t\tif (isJsonObject(status.message)) {\n\t\t\tsources.push(status.message);\n\t\t}\n\t}\n\tif (isJsonObject(value.artifact)) {\n\t\tsources.push(value.artifact);\n\t}\n\treturn sources;\n}\n\nfunction optionalField<K extends string>(\n\tkey: K,\n\tvalue: string | undefined,\n): Partial<Record<K, string>> {\n\treturn value ? ({ [key]: value } as Partial<Record<K, string>>) : {};\n}\n\nfunction sameIdentifier(left: string, right: string): boolean {\n\treturn left.trim().toLowerCase() === right.trim().toLowerCase();\n}\n\nfunction stringField(value: JsonObject, key: string): string | undefined {\n\tconst field = value[key];\n\treturn typeof field === \"string\" && field.trim().length > 0\n\t\t? field.trim()\n\t\t: undefined;\n}\n\nfunction booleanField(value: JsonObject, key: string): boolean | undefined {\n\tconst field = value[key];\n\treturn typeof field === \"boolean\" ? field : undefined;\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction callbackToken(): string | undefined {\n\tfor (const name of CALLBACK_TOKEN_ENV_VARS) {\n\t\tconst value = process.env[name]?.trim();\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"server-utils.d.ts","sourceRoot":"","sources":["../../src/server/server-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKjE,OAAO,EAAgB,WAAW,EAAE,MAAM,aAAa,CAAC;AAIxD,qBAAa,QAAS,SAAQ,WAAW;IAEhC,UAAU,EAAE,MAAM;IAGlB,SAAS,CAAC,EAAE,MAAM;gBAHlB,UAAU,EAAE,MAAM,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAO,EAChC,SAAS,CAAC,EAAE,MAAM,YAAA;CA8C1B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsCxE;AAED,wBAAsB,eAAe,CACpC,GAAG,EAAE,eAAe,EACpB,KAAK,SAAY,GACf,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,wBAAsB,YAAY,CAAC,CAAC,EACnC,GAAG,EAAE,eAAe,EACpB,KAAK,SAAY,GACf,OAAO,CAAC,CAAC,CAAC,CAUZ;AAED,wBAAgB,QAAQ,CACvB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,GAAG,CAAC,EAAE,eAAe,GACnB,IAAI,CAsEN;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAIpE;AAED,wBAAgB,gBAAgB,CAC/B,GAAG,EAAE,eAAe,EACpB,GAAG,KAAK,EAAE,MAAM,EAAE,GAChB,MAAM,GAAG,IAAI,CAcf;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAMnE;AAED,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,SAAS,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAUT;AAED,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,OAAO,EACd,cAAc,SAAM,EACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,GAAG,CAAC,EAAE,eAAe,GACnB,OAAO,CAgDT"}
1
+ {"version":3,"file":"server-utils.d.ts","sourceRoot":"","sources":["../../src/server/server-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKjE,OAAO,EAAgB,WAAW,EAAE,MAAM,aAAa,CAAC;AAIxD,qBAAa,QAAS,SAAQ,WAAW;IAEhC,UAAU,EAAE,MAAM;IAGlB,SAAS,CAAC,EAAE,MAAM;gBAHlB,UAAU,EAAE,MAAM,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAO,EAChC,SAAS,CAAC,EAAE,MAAM,YAAA;CA8C1B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkDxE;AAED,wBAAsB,eAAe,CACpC,GAAG,EAAE,eAAe,EACpB,KAAK,SAAY,GACf,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,wBAAsB,YAAY,CAAC,CAAC,EACnC,GAAG,EAAE,eAAe,EACpB,KAAK,SAAY,GACf,OAAO,CAAC,CAAC,CAAC,CAUZ;AAED,wBAAgB,QAAQ,CACvB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,GAAG,CAAC,EAAE,eAAe,GACnB,IAAI,CAsEN;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAIpE;AAED,wBAAgB,gBAAgB,CAC/B,GAAG,EAAE,eAAe,EACpB,GAAG,KAAK,EAAE,MAAM,EAAE,GAChB,MAAM,GAAG,IAAI,CAcf;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAMnE;AAED,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,SAAS,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAUT;AAED,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,OAAO,EACd,cAAc,SAAM,EACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,GAAG,CAAC,EAAE,eAAe,GACnB,OAAO,CAgDT"}
@@ -54,6 +54,18 @@ export function createCorsHeaders(origin) {
54
54
  const allowHeaders = [
55
55
  "Content-Type",
56
56
  "Authorization",
57
+ "A2A-Version",
58
+ "A2A-Extensions",
59
+ "traceparent",
60
+ "tracestate",
61
+ "X-A2A-Notification-Token",
62
+ "X-Organization-ID",
63
+ "X-Workspace-ID",
64
+ "X-EvalOps-Organization-ID",
65
+ "X-EvalOps-Workspace-ID",
66
+ "X-EvalOps-Agent-ID",
67
+ "X-EvalOps-Actor-ID",
68
+ "X-EvalOps-User-ID",
57
69
  "X-Composer-Artifact-Access",
58
70
  "X-Composer-Api-Key",
59
71
  "X-Composer-Approval-Mode",
@@ -1 +1 @@
1
- {"version":3,"file":"server-utils.js","sourceRoot":"","sources":["../../src/server/server-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, timingSafeEqual } from \"node:crypto\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { pipeline } from \"node:stream\";\nimport { promisify } from \"node:util\";\nimport { createDeflate, createGzip } from \"node:zlib\";\nimport { isComposerError } from \"../errors/index.js\";\nimport { Code, Status, StatusError } from \"./status.js\";\n\nconst pipe = promisify(pipeline);\n\nexport class ApiError extends StatusError {\n\tconstructor(\n\t\tpublic statusCode: number,\n\t\tmessage: string,\n\t\tdetails: Record<string, unknown>[] = [],\n\t\tpublic errorType?: string,\n\t) {\n\t\tlet code = Code.UNKNOWN;\n\t\tswitch (statusCode) {\n\t\t\tcase 400:\n\t\t\t\tcode = Code.INVALID_ARGUMENT;\n\t\t\t\tbreak;\n\t\t\tcase 401:\n\t\t\t\tcode = Code.UNAUTHENTICATED;\n\t\t\t\tbreak;\n\t\t\tcase 403:\n\t\t\t\tcode = Code.PERMISSION_DENIED;\n\t\t\t\tbreak;\n\t\t\tcase 404:\n\t\t\t\tcode = Code.NOT_FOUND;\n\t\t\t\tbreak;\n\t\t\tcase 409:\n\t\t\t\tcode = Code.ALREADY_EXISTS;\n\t\t\t\tbreak;\n\t\t\tcase 429:\n\t\t\t\tcode = Code.RESOURCE_EXHAUSTED;\n\t\t\t\tbreak;\n\t\t\tcase 500:\n\t\t\t\tcode = Code.INTERNAL;\n\t\t\t\tbreak;\n\t\t\tcase 501:\n\t\t\t\tcode = Code.UNIMPLEMENTED;\n\t\t\t\tbreak;\n\t\t\tcase 503:\n\t\t\t\tcode = Code.UNAVAILABLE;\n\t\t\t\tbreak;\n\t\t\tcase 504:\n\t\t\t\tcode = Code.DEADLINE_EXCEEDED;\n\t\t\t\tbreak;\n\t\t}\n\t\tconst status = new Status(\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\tdetails.map((d) => ({\n\t\t\t\t\"@type\": \"type.googleapis.com/google.rpc.ErrorInfo\",\n\t\t\t\t...d,\n\t\t\t})),\n\t\t);\n\t\tsuper(status);\n\t\tthis.statusCode = statusCode;\n\t}\n}\n\nexport function createCorsHeaders(origin: string): Record<string, string> {\n\tconst allowHeaders = [\n\t\t\"Content-Type\",\n\t\t\"Authorization\",\n\t\t\"X-Composer-Artifact-Access\",\n\t\t\"X-Composer-Api-Key\",\n\t\t\"X-Composer-Approval-Mode\",\n\t\t\"X-Composer-Client\",\n\t\t\"X-Composer-Client-Tools\",\n\t\t\"X-Composer-Csrf\",\n\t\t\"X-Composer-Agent-Id\",\n\t\t\"X-Composer-Slim-Events\",\n\t\t\"X-Composer-Workspace\",\n\t\t\"X-Composer-Workspace-Id\",\n\t\t\"X-Maestro-Artifact-Access\",\n\t\t\"X-Maestro-Api-Key\",\n\t\t\"X-Maestro-Approval-Mode\",\n\t\t\"X-Maestro-Agent-Id\",\n\t\t\"X-Maestro-Client\",\n\t\t\"X-Maestro-Client-Tools\",\n\t\t\"X-Maestro-Csrf\",\n\t\t\"X-Maestro-Slim-Events\",\n\t\t\"X-Maestro-Workspace\",\n\t\t\"X-Maestro-Workspace-Id\",\n\t\t\"X-Csrf-Token\",\n\t\t\"X-Xsrf-Token\",\n\t];\n\n\tconst headers: Record<string, string> = {\n\t\t\"Access-Control-Allow-Origin\": origin,\n\t\t\"Access-Control-Allow-Methods\": \"GET, POST, PATCH, DELETE, OPTIONS\",\n\t\t\"Access-Control-Allow-Headers\": allowHeaders.join(\", \"),\n\t\t\"Access-Control-Max-Age\": \"86400\",\n\t};\n\tif (origin !== \"*\") {\n\t\theaders[\"Access-Control-Allow-Credentials\"] = \"true\";\n\t}\n\treturn headers;\n}\n\nexport async function readRequestBody(\n\treq: IncomingMessage,\n\tlimit = 1_000_000,\n): Promise<Buffer> {\n\treturn new Promise((resolve, reject) => {\n\t\tlet total = 0;\n\t\tconst chunks: Buffer[] = [];\n\t\treq.on(\"data\", (chunk: Buffer) => {\n\t\t\tconst nextTotal = total + chunk.length;\n\t\t\tif (nextTotal > limit) {\n\t\t\t\treq.removeAllListeners(\"data\");\n\t\t\t\treq.removeAllListeners(\"end\");\n\t\t\t\treq.destroy();\n\t\t\t\treject(new ApiError(413, \"Payload too large\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttotal = nextTotal;\n\t\t\tchunks.push(chunk);\n\t\t});\n\t\treq.on(\"end\", () => {\n\t\t\tresolve(Buffer.concat(chunks));\n\t\t});\n\t\treq.on(\"error\", (error) => {\n\t\t\treject(error);\n\t\t});\n\t});\n}\n\nexport async function readJsonBody<T>(\n\treq: IncomingMessage,\n\tlimit = 1_000_000,\n): Promise<T> {\n\tconst raw = await readRequestBody(req, limit);\n\tif (!raw.length) {\n\t\treturn {} as T;\n\t}\n\ttry {\n\t\treturn JSON.parse(raw.toString()) as T;\n\t} catch {\n\t\tthrow new ApiError(400, \"Invalid JSON payload\");\n\t}\n}\n\nexport function sendJson(\n\tres: ServerResponse,\n\tstatus: number,\n\tpayload: unknown,\n\tcorsHeaders?: Record<string, string>,\n\treq?: IncomingMessage,\n): void {\n\tif (res.writableEnded || res.headersSent) return;\n\n\tconst body = JSON.stringify(payload);\n\tconst headers: Record<string, string | number> = {\n\t\t\"Content-Type\": \"application/json\",\n\t\t...(corsHeaders || {}),\n\t};\n\n\t// Prefer explicit request; fall back to ServerResponse.req when available.\n\tconst responseWithReq = res as ServerResponse & { req?: IncomingMessage };\n\tconst request = req ?? responseWithReq.req;\n\tconst acceptEncoding =\n\t\trequest?.headers[\"accept-encoding\"]?.toLowerCase() || \"\";\n\n\t// If we cannot inspect the request, respond uncompressed explicitly.\n\tif (!request) {\n\t\theaders[\"Content-Encoding\"] = \"identity\";\n\t\tres.writeHead(status, headers);\n\t\tres.end(body);\n\t\treturn;\n\t}\n\n\t// Only compress if larger than 1KB\n\tif (body.length > 1024) {\n\t\tif (acceptEncoding.includes(\"gzip\") || acceptEncoding.includes(\"*\")) {\n\t\t\theaders[\"Content-Encoding\"] = \"gzip\";\n\t\t\tres.writeHead(status, headers);\n\t\t\tconst gzip = createGzip();\n\t\t\t// Handle compression stream errors to prevent process crash\n\t\t\tgzip.on(\"error\", (err) => {\n\t\t\t\t// Stream error during compression - destroy streams cleanly\n\t\t\t\tgzip.destroy();\n\t\t\t\tif (!res.writableEnded) {\n\t\t\t\t\tres.destroy(err);\n\t\t\t\t}\n\t\t\t});\n\t\t\tres.on(\"error\", () => {\n\t\t\t\t// Client disconnect - destroy compression stream\n\t\t\t\tgzip.destroy();\n\t\t\t});\n\t\t\tgzip.pipe(res);\n\t\t\tgzip.end(body);\n\t\t\treturn;\n\t\t}\n\n\t\tif (acceptEncoding.includes(\"deflate\")) {\n\t\t\theaders[\"Content-Encoding\"] = \"deflate\";\n\t\t\tres.writeHead(status, headers);\n\t\t\tconst deflate = createDeflate();\n\t\t\t// Handle compression stream errors to prevent process crash\n\t\t\tdeflate.on(\"error\", (err) => {\n\t\t\t\t// Stream error during compression - destroy streams cleanly\n\t\t\t\tdeflate.destroy();\n\t\t\t\tif (!res.writableEnded) {\n\t\t\t\t\tres.destroy(err);\n\t\t\t\t}\n\t\t\t});\n\t\t\tres.on(\"error\", () => {\n\t\t\t\t// Client disconnect - destroy compression stream\n\t\t\t\tdeflate.destroy();\n\t\t\t});\n\t\t\tdeflate.pipe(res);\n\t\t\tdeflate.end(body);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tres.writeHead(status, headers);\n\tres.end(body);\n}\n\nexport function buildContentDisposition(filename: string): string {\n\t// Avoid header injection via CRLF, and keep the value ASCII-safe.\n\tconst trimmed = (filename || \"\")\n\t\t.replaceAll(\"\\r\", \"\")\n\t\t.replaceAll(\"\\n\", \"\")\n\t\t.trim();\n\tconst safe = trimmed.length > 0 ? trimmed : \"attachment\";\n\treturn `attachment; filename*=UTF-8''${encodeURIComponent(safe)}`;\n}\n\nexport function secureCompare(value: string, secret: string): boolean {\n\tconst hashProvided = createHash(\"sha256\").update(value).digest();\n\tconst hashSecret = createHash(\"sha256\").update(secret).digest();\n\treturn timingSafeEqual(hashProvided, hashSecret);\n}\n\nexport function getRequestHeader(\n\treq: IncomingMessage,\n\t...names: string[]\n): string | null {\n\tconst headers = req.headers ?? {};\n\tfor (const name of names) {\n\t\tconst value = headers[name.toLowerCase()];\n\t\tif (Array.isArray(value)) {\n\t\t\tconst first = value[0]?.trim();\n\t\t\tif (first) return first;\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"string\" && value.trim()) {\n\t\t\treturn value.trim();\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function getRequestToken(req: IncomingMessage): string | null {\n\tconst authHeader = req.headers.authorization;\n\tif (authHeader?.startsWith(\"Bearer \")) {\n\t\treturn authHeader.slice(7).trim() || null;\n\t}\n\treturn getRequestHeader(req, \"x-composer-api-key\", \"x-maestro-api-key\");\n}\n\nexport function authenticateRequest(\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tcorsHeaders: Record<string, string>,\n\twebApiKey: string | null,\n): boolean {\n\tif (!webApiKey) {\n\t\treturn true;\n\t}\n\tconst provided = getRequestToken(req);\n\tif (!provided || !secureCompare(provided, webApiKey)) {\n\t\tsendJson(res, 401, { error: \"Unauthorized\" }, corsHeaders, req);\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport function respondWithApiError(\n\tres: ServerResponse,\n\terror: unknown,\n\tfallbackStatus = 500,\n\tcorsHeaders?: Record<string, string>,\n\treq?: IncomingMessage,\n): boolean {\n\tconst originalStatus = Status.fromError(error);\n\t// Clone to avoid mutation of original error status\n\tconst status = new Status(\n\t\toriginalStatus.code,\n\t\toriginalStatus.message,\n\t\toriginalStatus.details,\n\t);\n\tlet statusCode = status.toHttpCode();\n\n\t// Preserve explicit status codes from ApiError\n\tif (error instanceof ApiError) {\n\t\tstatusCode = error.statusCode;\n\t} else if (status.code === Code.UNKNOWN && fallbackStatus) {\n\t\t// If generic unknown, use fallback if provided\n\t\tstatusCode = fallbackStatus;\n\t\t// Map HTTP fallback back to Status Code if possible for consistency\n\t\tif (statusCode === 500) status.code = Code.INTERNAL;\n\t\telse if (statusCode === 400) status.code = Code.INVALID_ARGUMENT;\n\t\telse if (statusCode === 404) status.code = Code.NOT_FOUND;\n\t}\n\n\tsendJson(\n\t\tres,\n\t\tstatusCode,\n\t\t{\n\t\t\terror: status.message,\n\t\t\tcode: Code[status.code],\n\t\t\terror_type:\n\t\t\t\terror instanceof ApiError && error.errorType\n\t\t\t\t\t? error.errorType\n\t\t\t\t\t: undefined,\n\t\t\tdetails: status.details.length ? status.details : undefined,\n\t\t\tmaestro: isComposerError(error)\n\t\t\t\t? {\n\t\t\t\t\t\tcode: error.code,\n\t\t\t\t\t\tcategory: error.category,\n\t\t\t\t\t\tseverity: error.severity,\n\t\t\t\t\t\tretriable: error.retriable,\n\t\t\t\t\t\tcontext:\n\t\t\t\t\t\t\tObject.keys(error.context).length > 0 ? error.context : undefined,\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t},\n\t\tcorsHeaders,\n\t\treq,\n\t);\n\treturn true;\n}\n"]}
1
+ {"version":3,"file":"server-utils.js","sourceRoot":"","sources":["../../src/server/server-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEjC,MAAM,OAAO,QAAS,SAAQ,WAAW;IACxC,YACQ,UAAkB,EACzB,OAAe,EACf,UAAqC,EAAE,EAChC,SAAkB;QAEzB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;QACxB,QAAQ,UAAU,EAAE,CAAC;YACpB,KAAK,GAAG;gBACP,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAC7B,MAAM;YACP,KAAK,GAAG;gBACP,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC5B,MAAM;YACP,KAAK,GAAG;gBACP,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBAC9B,MAAM;YACP,KAAK,GAAG;gBACP,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBACtB,MAAM;YACP,KAAK,GAAG;gBACP,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC3B,MAAM;YACP,KAAK,GAAG;gBACP,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC/B,MAAM;YACP,KAAK,GAAG;gBACP,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACrB,MAAM;YACP,KAAK,GAAG;gBACP,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;gBAC1B,MAAM;YACP,KAAK,GAAG;gBACP,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;gBACxB,MAAM;YACP,KAAK,GAAG;gBACP,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBAC9B,MAAM;QACR,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,MAAM,CACxB,IAAI,EACJ,OAAO,EACP,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,OAAO,EAAE,0CAA0C;YACnD,GAAG,CAAC;SACJ,CAAC,CAAC,CACH,CAAC;QACF,KAAK,CAAC,MAAM,CAAC,CAAC;QA9CP,eAAU,GAAV,UAAU,CAAQ;QAGlB,cAAS,GAAT,SAAS,CAAS;QA4CzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;CACD;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC/C,MAAM,YAAY,GAAG;QACpB,cAAc;QACd,eAAe;QACf,aAAa;QACb,gBAAgB;QAChB,aAAa;QACb,YAAY;QACZ,0BAA0B;QAC1B,mBAAmB;QACnB,gBAAgB;QAChB,2BAA2B;QAC3B,wBAAwB;QACxB,oBAAoB;QACpB,oBAAoB;QACpB,mBAAmB;QACnB,4BAA4B;QAC5B,oBAAoB;QACpB,0BAA0B;QAC1B,mBAAmB;QACnB,yBAAyB;QACzB,iBAAiB;QACjB,qBAAqB;QACrB,wBAAwB;QACxB,sBAAsB;QACtB,yBAAyB;QACzB,2BAA2B;QAC3B,mBAAmB;QACnB,yBAAyB;QACzB,oBAAoB;QACpB,kBAAkB;QAClB,wBAAwB;QACxB,gBAAgB;QAChB,uBAAuB;QACvB,qBAAqB;QACrB,wBAAwB;QACxB,cAAc;QACd,cAAc;KACd,CAAC;IAEF,MAAM,OAAO,GAA2B;QACvC,6BAA6B,EAAE,MAAM;QACrC,8BAA8B,EAAE,mCAAmC;QACnE,8BAA8B,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QACvD,wBAAwB,EAAE,OAAO;KACjC,CAAC;IACF,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,CAAC,kCAAkC,CAAC,GAAG,MAAM,CAAC;IACtD,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,GAAoB,EACpB,KAAK,GAAG,SAAS;IAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAChC,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;YACvC,IAAI,SAAS,GAAG,KAAK,EAAE,CAAC;gBACvB,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAC/B,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC9B,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC;gBAC/C,OAAO;YACR,CAAC;YACD,KAAK,GAAG,SAAS,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAClB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,GAAoB,EACpB,KAAK,GAAG,SAAS;IAEjB,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,EAAO,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAM,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACjD,CAAC;AACF,CAAC;AAED,MAAM,UAAU,QAAQ,CACvB,GAAmB,EACnB,MAAc,EACd,OAAgB,EAChB,WAAoC,EACpC,GAAqB;IAErB,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,WAAW;QAAE,OAAO;IAEjD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAAoC;QAChD,cAAc,EAAE,kBAAkB;QAClC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;KACtB,CAAC;IAEF,2EAA2E;IAC3E,MAAM,eAAe,GAAG,GAAiD,CAAC;IAC1E,MAAM,OAAO,GAAG,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC;IAC3C,MAAM,cAAc,GACnB,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAE1D,qEAAqE;IACrE,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,CAAC,kBAAkB,CAAC,GAAG,UAAU,CAAC;QACzC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACd,OAAO;IACR,CAAC;IAED,mCAAmC;IACnC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QACxB,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACrE,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC;YACrC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;YAC1B,4DAA4D;YAC5D,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,4DAA4D;gBAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;oBACxB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClB,CAAC;YACF,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,iDAAiD;gBACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,OAAO;QACR,CAAC;QAED,IAAI,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;YACxC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAChC,4DAA4D;YAC5D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC3B,4DAA4D;gBAC5D,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;oBACxB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClB,CAAC;YACF,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,iDAAiD;gBACjD,OAAO,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACR,CAAC;IACF,CAAC;IAED,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACvD,kEAAkE;IAClE,MAAM,OAAO,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;SAC9B,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;SACpB,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;SACpB,IAAI,EAAE,CAAC;IACT,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;IACzD,OAAO,gCAAgC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,MAAc;IAC1D,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;IACjE,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IAChE,OAAO,eAAe,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC/B,GAAoB,EACpB,GAAG,KAAe;IAElB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YAC/B,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;YACxB,SAAS;QACV,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAoB;IACnD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IAC7C,IAAI,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IAC3C,CAAC;IACD,OAAO,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,GAAoB,EACpB,GAAmB,EACnB,WAAmC,EACnC,SAAwB;IAExB,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;QACtD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;QAChE,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,GAAmB,EACnB,KAAc,EACd,cAAc,GAAG,GAAG,EACpB,WAAoC,EACpC,GAAqB;IAErB,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/C,mDAAmD;IACnD,MAAM,MAAM,GAAG,IAAI,MAAM,CACxB,cAAc,CAAC,IAAI,EACnB,cAAc,CAAC,OAAO,EACtB,cAAc,CAAC,OAAO,CACtB,CAAC;IACF,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAErC,+CAA+C;IAC/C,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC/B,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IAC/B,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;QAC3D,+CAA+C;QAC/C,UAAU,GAAG,cAAc,CAAC;QAC5B,oEAAoE;QACpE,IAAI,UAAU,KAAK,GAAG;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;aAC/C,IAAI,UAAU,KAAK,GAAG;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;aAC5D,IAAI,UAAU,KAAK,GAAG;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;IAC3D,CAAC;IAED,QAAQ,CACP,GAAG,EACH,UAAU,EACV;QACC,KAAK,EAAE,MAAM,CAAC,OAAO;QACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACvB,UAAU,EACT,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,SAAS;YAC3C,CAAC,CAAC,KAAK,CAAC,SAAS;YACjB,CAAC,CAAC,SAAS;QACb,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC3D,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;YAC9B,CAAC,CAAC;gBACA,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO,EACN,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;aAClE;YACF,CAAC,CAAC,SAAS;KACZ,EACD,WAAW,EACX,GAAG,CACH,CAAC;IACF,OAAO,IAAI,CAAC;AACb,CAAC","sourcesContent":["import { createHash, timingSafeEqual } from \"node:crypto\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { pipeline } from \"node:stream\";\nimport { promisify } from \"node:util\";\nimport { createDeflate, createGzip } from \"node:zlib\";\nimport { isComposerError } from \"../errors/index.js\";\nimport { Code, Status, StatusError } from \"./status.js\";\n\nconst pipe = promisify(pipeline);\n\nexport class ApiError extends StatusError {\n\tconstructor(\n\t\tpublic statusCode: number,\n\t\tmessage: string,\n\t\tdetails: Record<string, unknown>[] = [],\n\t\tpublic errorType?: string,\n\t) {\n\t\tlet code = Code.UNKNOWN;\n\t\tswitch (statusCode) {\n\t\t\tcase 400:\n\t\t\t\tcode = Code.INVALID_ARGUMENT;\n\t\t\t\tbreak;\n\t\t\tcase 401:\n\t\t\t\tcode = Code.UNAUTHENTICATED;\n\t\t\t\tbreak;\n\t\t\tcase 403:\n\t\t\t\tcode = Code.PERMISSION_DENIED;\n\t\t\t\tbreak;\n\t\t\tcase 404:\n\t\t\t\tcode = Code.NOT_FOUND;\n\t\t\t\tbreak;\n\t\t\tcase 409:\n\t\t\t\tcode = Code.ALREADY_EXISTS;\n\t\t\t\tbreak;\n\t\t\tcase 429:\n\t\t\t\tcode = Code.RESOURCE_EXHAUSTED;\n\t\t\t\tbreak;\n\t\t\tcase 500:\n\t\t\t\tcode = Code.INTERNAL;\n\t\t\t\tbreak;\n\t\t\tcase 501:\n\t\t\t\tcode = Code.UNIMPLEMENTED;\n\t\t\t\tbreak;\n\t\t\tcase 503:\n\t\t\t\tcode = Code.UNAVAILABLE;\n\t\t\t\tbreak;\n\t\t\tcase 504:\n\t\t\t\tcode = Code.DEADLINE_EXCEEDED;\n\t\t\t\tbreak;\n\t\t}\n\t\tconst status = new Status(\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\tdetails.map((d) => ({\n\t\t\t\t\"@type\": \"type.googleapis.com/google.rpc.ErrorInfo\",\n\t\t\t\t...d,\n\t\t\t})),\n\t\t);\n\t\tsuper(status);\n\t\tthis.statusCode = statusCode;\n\t}\n}\n\nexport function createCorsHeaders(origin: string): Record<string, string> {\n\tconst allowHeaders = [\n\t\t\"Content-Type\",\n\t\t\"Authorization\",\n\t\t\"A2A-Version\",\n\t\t\"A2A-Extensions\",\n\t\t\"traceparent\",\n\t\t\"tracestate\",\n\t\t\"X-A2A-Notification-Token\",\n\t\t\"X-Organization-ID\",\n\t\t\"X-Workspace-ID\",\n\t\t\"X-EvalOps-Organization-ID\",\n\t\t\"X-EvalOps-Workspace-ID\",\n\t\t\"X-EvalOps-Agent-ID\",\n\t\t\"X-EvalOps-Actor-ID\",\n\t\t\"X-EvalOps-User-ID\",\n\t\t\"X-Composer-Artifact-Access\",\n\t\t\"X-Composer-Api-Key\",\n\t\t\"X-Composer-Approval-Mode\",\n\t\t\"X-Composer-Client\",\n\t\t\"X-Composer-Client-Tools\",\n\t\t\"X-Composer-Csrf\",\n\t\t\"X-Composer-Agent-Id\",\n\t\t\"X-Composer-Slim-Events\",\n\t\t\"X-Composer-Workspace\",\n\t\t\"X-Composer-Workspace-Id\",\n\t\t\"X-Maestro-Artifact-Access\",\n\t\t\"X-Maestro-Api-Key\",\n\t\t\"X-Maestro-Approval-Mode\",\n\t\t\"X-Maestro-Agent-Id\",\n\t\t\"X-Maestro-Client\",\n\t\t\"X-Maestro-Client-Tools\",\n\t\t\"X-Maestro-Csrf\",\n\t\t\"X-Maestro-Slim-Events\",\n\t\t\"X-Maestro-Workspace\",\n\t\t\"X-Maestro-Workspace-Id\",\n\t\t\"X-Csrf-Token\",\n\t\t\"X-Xsrf-Token\",\n\t];\n\n\tconst headers: Record<string, string> = {\n\t\t\"Access-Control-Allow-Origin\": origin,\n\t\t\"Access-Control-Allow-Methods\": \"GET, POST, PATCH, DELETE, OPTIONS\",\n\t\t\"Access-Control-Allow-Headers\": allowHeaders.join(\", \"),\n\t\t\"Access-Control-Max-Age\": \"86400\",\n\t};\n\tif (origin !== \"*\") {\n\t\theaders[\"Access-Control-Allow-Credentials\"] = \"true\";\n\t}\n\treturn headers;\n}\n\nexport async function readRequestBody(\n\treq: IncomingMessage,\n\tlimit = 1_000_000,\n): Promise<Buffer> {\n\treturn new Promise((resolve, reject) => {\n\t\tlet total = 0;\n\t\tconst chunks: Buffer[] = [];\n\t\treq.on(\"data\", (chunk: Buffer) => {\n\t\t\tconst nextTotal = total + chunk.length;\n\t\t\tif (nextTotal > limit) {\n\t\t\t\treq.removeAllListeners(\"data\");\n\t\t\t\treq.removeAllListeners(\"end\");\n\t\t\t\treq.destroy();\n\t\t\t\treject(new ApiError(413, \"Payload too large\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttotal = nextTotal;\n\t\t\tchunks.push(chunk);\n\t\t});\n\t\treq.on(\"end\", () => {\n\t\t\tresolve(Buffer.concat(chunks));\n\t\t});\n\t\treq.on(\"error\", (error) => {\n\t\t\treject(error);\n\t\t});\n\t});\n}\n\nexport async function readJsonBody<T>(\n\treq: IncomingMessage,\n\tlimit = 1_000_000,\n): Promise<T> {\n\tconst raw = await readRequestBody(req, limit);\n\tif (!raw.length) {\n\t\treturn {} as T;\n\t}\n\ttry {\n\t\treturn JSON.parse(raw.toString()) as T;\n\t} catch {\n\t\tthrow new ApiError(400, \"Invalid JSON payload\");\n\t}\n}\n\nexport function sendJson(\n\tres: ServerResponse,\n\tstatus: number,\n\tpayload: unknown,\n\tcorsHeaders?: Record<string, string>,\n\treq?: IncomingMessage,\n): void {\n\tif (res.writableEnded || res.headersSent) return;\n\n\tconst body = JSON.stringify(payload);\n\tconst headers: Record<string, string | number> = {\n\t\t\"Content-Type\": \"application/json\",\n\t\t...(corsHeaders || {}),\n\t};\n\n\t// Prefer explicit request; fall back to ServerResponse.req when available.\n\tconst responseWithReq = res as ServerResponse & { req?: IncomingMessage };\n\tconst request = req ?? responseWithReq.req;\n\tconst acceptEncoding =\n\t\trequest?.headers[\"accept-encoding\"]?.toLowerCase() || \"\";\n\n\t// If we cannot inspect the request, respond uncompressed explicitly.\n\tif (!request) {\n\t\theaders[\"Content-Encoding\"] = \"identity\";\n\t\tres.writeHead(status, headers);\n\t\tres.end(body);\n\t\treturn;\n\t}\n\n\t// Only compress if larger than 1KB\n\tif (body.length > 1024) {\n\t\tif (acceptEncoding.includes(\"gzip\") || acceptEncoding.includes(\"*\")) {\n\t\t\theaders[\"Content-Encoding\"] = \"gzip\";\n\t\t\tres.writeHead(status, headers);\n\t\t\tconst gzip = createGzip();\n\t\t\t// Handle compression stream errors to prevent process crash\n\t\t\tgzip.on(\"error\", (err) => {\n\t\t\t\t// Stream error during compression - destroy streams cleanly\n\t\t\t\tgzip.destroy();\n\t\t\t\tif (!res.writableEnded) {\n\t\t\t\t\tres.destroy(err);\n\t\t\t\t}\n\t\t\t});\n\t\t\tres.on(\"error\", () => {\n\t\t\t\t// Client disconnect - destroy compression stream\n\t\t\t\tgzip.destroy();\n\t\t\t});\n\t\t\tgzip.pipe(res);\n\t\t\tgzip.end(body);\n\t\t\treturn;\n\t\t}\n\n\t\tif (acceptEncoding.includes(\"deflate\")) {\n\t\t\theaders[\"Content-Encoding\"] = \"deflate\";\n\t\t\tres.writeHead(status, headers);\n\t\t\tconst deflate = createDeflate();\n\t\t\t// Handle compression stream errors to prevent process crash\n\t\t\tdeflate.on(\"error\", (err) => {\n\t\t\t\t// Stream error during compression - destroy streams cleanly\n\t\t\t\tdeflate.destroy();\n\t\t\t\tif (!res.writableEnded) {\n\t\t\t\t\tres.destroy(err);\n\t\t\t\t}\n\t\t\t});\n\t\t\tres.on(\"error\", () => {\n\t\t\t\t// Client disconnect - destroy compression stream\n\t\t\t\tdeflate.destroy();\n\t\t\t});\n\t\t\tdeflate.pipe(res);\n\t\t\tdeflate.end(body);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tres.writeHead(status, headers);\n\tres.end(body);\n}\n\nexport function buildContentDisposition(filename: string): string {\n\t// Avoid header injection via CRLF, and keep the value ASCII-safe.\n\tconst trimmed = (filename || \"\")\n\t\t.replaceAll(\"\\r\", \"\")\n\t\t.replaceAll(\"\\n\", \"\")\n\t\t.trim();\n\tconst safe = trimmed.length > 0 ? trimmed : \"attachment\";\n\treturn `attachment; filename*=UTF-8''${encodeURIComponent(safe)}`;\n}\n\nexport function secureCompare(value: string, secret: string): boolean {\n\tconst hashProvided = createHash(\"sha256\").update(value).digest();\n\tconst hashSecret = createHash(\"sha256\").update(secret).digest();\n\treturn timingSafeEqual(hashProvided, hashSecret);\n}\n\nexport function getRequestHeader(\n\treq: IncomingMessage,\n\t...names: string[]\n): string | null {\n\tconst headers = req.headers ?? {};\n\tfor (const name of names) {\n\t\tconst value = headers[name.toLowerCase()];\n\t\tif (Array.isArray(value)) {\n\t\t\tconst first = value[0]?.trim();\n\t\t\tif (first) return first;\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"string\" && value.trim()) {\n\t\t\treturn value.trim();\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function getRequestToken(req: IncomingMessage): string | null {\n\tconst authHeader = req.headers.authorization;\n\tif (authHeader?.startsWith(\"Bearer \")) {\n\t\treturn authHeader.slice(7).trim() || null;\n\t}\n\treturn getRequestHeader(req, \"x-composer-api-key\", \"x-maestro-api-key\");\n}\n\nexport function authenticateRequest(\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tcorsHeaders: Record<string, string>,\n\twebApiKey: string | null,\n): boolean {\n\tif (!webApiKey) {\n\t\treturn true;\n\t}\n\tconst provided = getRequestToken(req);\n\tif (!provided || !secureCompare(provided, webApiKey)) {\n\t\tsendJson(res, 401, { error: \"Unauthorized\" }, corsHeaders, req);\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport function respondWithApiError(\n\tres: ServerResponse,\n\terror: unknown,\n\tfallbackStatus = 500,\n\tcorsHeaders?: Record<string, string>,\n\treq?: IncomingMessage,\n): boolean {\n\tconst originalStatus = Status.fromError(error);\n\t// Clone to avoid mutation of original error status\n\tconst status = new Status(\n\t\toriginalStatus.code,\n\t\toriginalStatus.message,\n\t\toriginalStatus.details,\n\t);\n\tlet statusCode = status.toHttpCode();\n\n\t// Preserve explicit status codes from ApiError\n\tif (error instanceof ApiError) {\n\t\tstatusCode = error.statusCode;\n\t} else if (status.code === Code.UNKNOWN && fallbackStatus) {\n\t\t// If generic unknown, use fallback if provided\n\t\tstatusCode = fallbackStatus;\n\t\t// Map HTTP fallback back to Status Code if possible for consistency\n\t\tif (statusCode === 500) status.code = Code.INTERNAL;\n\t\telse if (statusCode === 400) status.code = Code.INVALID_ARGUMENT;\n\t\telse if (statusCode === 404) status.code = Code.NOT_FOUND;\n\t}\n\n\tsendJson(\n\t\tres,\n\t\tstatusCode,\n\t\t{\n\t\t\terror: status.message,\n\t\t\tcode: Code[status.code],\n\t\t\terror_type:\n\t\t\t\terror instanceof ApiError && error.errorType\n\t\t\t\t\t? error.errorType\n\t\t\t\t\t: undefined,\n\t\t\tdetails: status.details.length ? status.details : undefined,\n\t\t\tmaestro: isComposerError(error)\n\t\t\t\t? {\n\t\t\t\t\t\tcode: error.code,\n\t\t\t\t\t\tcategory: error.category,\n\t\t\t\t\t\tseverity: error.severity,\n\t\t\t\t\t\tretriable: error.retriable,\n\t\t\t\t\t\tcontext:\n\t\t\t\t\t\t\tObject.keys(error.context).length > 0 ? error.context : undefined,\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t},\n\t\tcorsHeaders,\n\t\treq,\n\t);\n\treturn true;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"session-timeline.d.ts","sourceRoot":"","sources":["../../src/server/session-timeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,sBAAsB,EAGtB,2BAA2B,EAE3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACX,UAAU,EAIV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,UAAU,+BAA+B;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAioBD,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,+BAA+B,GACtC,2BAA2B,CA+C7B"}
1
+ {"version":3,"file":"session-timeline.d.ts","sourceRoot":"","sources":["../../src/server/session-timeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,sBAAsB,EAGtB,2BAA2B,EAE3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACX,UAAU,EAIV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,UAAU,+BAA+B;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAipBD,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,+BAA+B,GACtC,2BAA2B,CA+C7B"}
@@ -53,6 +53,15 @@ function getToolPath(request) {
53
53
  const args = request?.args;
54
54
  return redactedString(args?.path) ?? redactedString(args?.file_path);
55
55
  }
56
+ function fileArtifactIdForToolResult(toolResult, request) {
57
+ if (toolResult.isError)
58
+ return undefined;
59
+ const normalizedToolName = toolResult.toolName.toLowerCase();
60
+ if (normalizedToolName !== "write" && normalizedToolName !== "edit") {
61
+ return undefined;
62
+ }
63
+ return `file:${getToolPath(request) ?? toolResult.toolCallId}`;
64
+ }
56
65
  function governedToolMetadata(details) {
57
66
  const record = detailsRecord(details);
58
67
  const outcome = detailsRecord(record?.governedOutcome);
@@ -84,6 +93,7 @@ function addDerivedToolResultItems(items, sessionId, toolResult, options) {
84
93
  if (!toolResult.isError &&
85
94
  (normalizedToolName === "write" || normalizedToolName === "edit")) {
86
95
  const displayPath = getToolPath(options.request);
96
+ const artifactId = fileArtifactIdForToolResult(toolResult, options.request);
87
97
  const previousExists = booleanValue(details?.previousExists);
88
98
  const editsApplied = finiteNumber(details?.editsApplied);
89
99
  const bytesWritten = finiteNumber(details?.bytesWritten);
@@ -119,6 +129,7 @@ function addDerivedToolResultItems(items, sessionId, toolResult, options) {
119
129
  status: "completed",
120
130
  toolCallId: toolResult.toolCallId,
121
131
  toolName: toolResult.toolName,
132
+ ...(artifactId ? { artifactId } : {}),
122
133
  ...(summary ? { summary } : {}),
123
134
  ...(metadata ? { metadata } : {}),
124
135
  });
@@ -288,6 +299,7 @@ function addMessageItems(items, sessionId, message, options) {
288
299
  const request = options.context?.toolRequests.get(toolResult.toolCallId);
289
300
  const approvalRequestId = governed.approvalRequestId ?? redactedString(details?.approvalRequestId);
290
301
  const toolExecutionId = redactedString(details?.toolExecutionId);
302
+ const artifactId = fileArtifactIdForToolResult(toolResult, request);
291
303
  const metadata = compactTimelineMetadata({
292
304
  governedOutcome: governed.governedOutcome,
293
305
  errorCode: governed.errorCode,
@@ -306,6 +318,7 @@ function addMessageItems(items, sessionId, message, options) {
306
318
  toolName: toolResult.toolName,
307
319
  ...(approvalRequestId ? { approvalRequestId } : {}),
308
320
  ...(toolExecutionId ? { toolExecutionId } : {}),
321
+ ...(artifactId ? { artifactId } : {}),
309
322
  ...(metadata ? { metadata } : {}),
310
323
  });
311
324
  addDerivedToolResultItems(items, sessionId, toolResult, {
@@ -1 +1 @@
1
- {"version":3,"file":"session-timeline.js","sourceRoot":"","sources":["../../src/server/session-timeline.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tComposerPendingRequest,\n\tComposerPendingRequestPlatformOperation,\n\tComposerRunTimelineItem,\n\tComposerRunTimelineResponse,\n\tComposerRunTimelineStatus,\n} from \"@evalops/contracts\";\nimport type {\n\tAppMessage,\n\tAssistantMessage,\n\tToolResultMessage,\n\tUserMessage,\n} from \"../agent/types.js\";\nimport { getDiagnosticDeltaFromToolResult } from \"../lsp/diagnostic-repair.js\";\nimport type { SessionEntry } from \"../session/types.js\";\nimport { getSkillArtifactMetadataFromDetails } from \"../skills/artifact-metadata.js\";\nimport {\n\tcompactTimelineMetadata,\n\tcompactTimelineSummary,\n\tredactTimelineSecrets,\n} from \"../timeline/redaction.js\";\n\ninterface BuildComposerRunTimelineOptions {\n\tsessionId: string;\n\tentries?: SessionEntry[];\n\tmessages?: AppMessage[];\n\tpendingRequests?: ComposerPendingRequest[];\n\tgeneratedAt?: string;\n}\n\ninterface TimelineToolRequest {\n\tname: string;\n\targs: Record<string, unknown>;\n}\n\ninterface TimelineBuildContext {\n\ttoolRequests: Map<string, TimelineToolRequest>;\n}\n\nfunction normalizeTimestamp(value: unknown, fallback: string): string {\n\tif (typeof value === \"string\" || typeof value === \"number\") {\n\t\tconst date = new Date(value);\n\t\tif (!Number.isNaN(date.getTime())) {\n\t\t\treturn date.toISOString();\n\t\t}\n\t}\n\treturn fallback;\n}\n\nfunction detailsRecord(value: unknown): Record<string, unknown> | undefined {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction redactedString(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst trimmed = value.trim();\n\treturn trimmed ? redactTimelineSecrets(trimmed) : undefined;\n}\n\nfunction finiteNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value)\n\t\t? value\n\t\t: undefined;\n}\n\nfunction booleanValue(value: unknown): boolean | undefined {\n\treturn typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction textFromContent(content: unknown): string | undefined {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return undefined;\n\tconst text = content\n\t\t.map((block) => {\n\t\t\tif (!block || typeof block !== \"object\") return \"\";\n\t\t\tconst typed = block as { type?: unknown; text?: unknown };\n\t\t\tif (typed.type === \"text\" && typeof typed.text === \"string\") {\n\t\t\t\treturn typed.text;\n\t\t\t}\n\t\t\treturn \"\";\n\t\t})\n\t\t.filter(Boolean)\n\t\t.join(\" \");\n\treturn text || undefined;\n}\n\nfunction getToolPath(\n\trequest: TimelineToolRequest | undefined,\n): string | undefined {\n\tconst args = request?.args;\n\treturn redactedString(args?.path) ?? redactedString(args?.file_path);\n}\n\nfunction governedToolMetadata(details: unknown): {\n\terrorCode?: string;\n\tapprovalRequestId?: string;\n\tgovernedOutcome?: string;\n} {\n\tconst record = detailsRecord(details);\n\tconst outcome = detailsRecord(record?.governedOutcome);\n\tif (!outcome) return {};\n\tconst classification = redactedString(outcome.classification);\n\treturn {\n\t\terrorCode: redactedString(outcome.code) ?? classification,\n\t\tapprovalRequestId: redactedString(outcome.approvalRequestId),\n\t\tgovernedOutcome: classification,\n\t};\n}\n\nfunction timelineStatusForGovernedOutcome(\n\toutcome: string | undefined,\n): ComposerRunTimelineStatus {\n\tswitch (outcome) {\n\t\tcase \"denied\":\n\t\t\treturn \"denied\";\n\t\tcase \"approval_required\":\n\t\tcase \"approval_pending\":\n\t\tcase \"authentication_required\":\n\t\tcase \"rate_limited\":\n\t\t\treturn \"pending\";\n\t\tdefault:\n\t\t\treturn \"info\";\n\t}\n}\n\nfunction addDerivedToolResultItems(\n\titems: ComposerRunTimelineItem[],\n\tsessionId: string,\n\ttoolResult: ToolResultMessage,\n\toptions: {\n\t\tbaseId: string;\n\t\ttimestamp: string;\n\t\tsource: \"local\" | \"platform\";\n\t\trequest?: TimelineToolRequest;\n\t},\n): void {\n\tconst details = detailsRecord(toolResult.details);\n\tconst normalizedToolName = toolResult.toolName.toLowerCase();\n\n\tif (\n\t\t!toolResult.isError &&\n\t\t(normalizedToolName === \"write\" || normalizedToolName === \"edit\")\n\t) {\n\t\tconst displayPath = getToolPath(options.request);\n\t\tconst previousExists = booleanValue(details?.previousExists);\n\t\tconst editsApplied = finiteNumber(details?.editsApplied);\n\t\tconst bytesWritten = finiteNumber(details?.bytesWritten);\n\t\tconst action =\n\t\t\tnormalizedToolName === \"write\"\n\t\t\t\t? previousExists === false\n\t\t\t\t\t? \"created\"\n\t\t\t\t\t: \"wrote\"\n\t\t\t\t: \"edited\";\n\t\tconst summary = compactTimelineSummary(\n\t\t\t[\n\t\t\t\tdisplayPath,\n\t\t\t\tbytesWritten !== undefined ? `${bytesWritten} bytes` : undefined,\n\t\t\t\teditsApplied !== undefined ? `${editsApplied} edits` : undefined,\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" | \"),\n\t\t);\n\t\tconst hasDiff =\n\t\t\ttypeof details?.diff === \"string\" && details.diff.length > 0;\n\t\tconst metadata = compactTimelineMetadata({\n\t\t\tpath: displayPath,\n\t\t\taction,\n\t\t\tpreviousExists,\n\t\t\tbytesWritten,\n\t\t\teditsApplied,\n\t\t\thasDiff,\n\t\t});\n\n\t\tappendItem(items, {\n\t\t\tid: `file-change:${options.baseId}:${toolResult.toolCallId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"file.changed\",\n\t\t\ttitle: `File ${action}`,\n\t\t\tvisibility: \"user\",\n\t\t\tsource: options.source,\n\t\t\tstatus: \"completed\",\n\t\t\ttoolCallId: toolResult.toolCallId,\n\t\t\ttoolName: toolResult.toolName,\n\t\t\t...(summary ? { summary } : {}),\n\t\t\t...(metadata ? { metadata } : {}),\n\t\t});\n\t}\n\n\tconst diagnosticDelta = getDiagnosticDeltaFromToolResult(toolResult);\n\tif (diagnosticDelta) {\n\t\tconst summary = compactTimelineSummary(\n\t\t\t`Diagnostic delta: ${diagnosticDelta.introducedCount} introduced, ${diagnosticDelta.repairedCount} repaired, ${diagnosticDelta.remainingCount} remaining.`,\n\t\t);\n\t\tappendItem(items, {\n\t\t\tid: `diagnostic-delta:${options.baseId}:${toolResult.toolCallId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"diagnostic.delta\",\n\t\t\ttitle: `Diagnostics for ${diagnosticDelta.displayPath}`,\n\t\t\tvisibility: \"user\",\n\t\t\tsource: options.source,\n\t\t\tstatus: diagnosticDelta.introducedCount > 0 ? \"failed\" : \"completed\",\n\t\t\ttoolCallId: toolResult.toolCallId,\n\t\t\ttoolName: toolResult.toolName,\n\t\t\t...(summary ? { summary } : {}),\n\t\t\tmetadata: {\n\t\t\t\tdisplayPath: diagnosticDelta.displayPath,\n\t\t\t\tusedDelta: diagnosticDelta.usedDelta,\n\t\t\t\tintroducedCount: diagnosticDelta.introducedCount,\n\t\t\t\trepairedCount: diagnosticDelta.repairedCount,\n\t\t\t\tremainingCount: diagnosticDelta.remainingCount,\n\t\t\t\tfingerprint: diagnosticDelta.fingerprint,\n\t\t\t\tshouldFollowUp: diagnosticDelta.repair.shouldFollowUp,\n\t\t\t\tmaxAttempts: diagnosticDelta.repair.maxAttempts,\n\t\t\t},\n\t\t});\n\t}\n\n\tconst skillMetadata = getSkillArtifactMetadataFromDetails(toolResult.details);\n\tif (skillMetadata) {\n\t\tconst summary = compactTimelineSummary(\n\t\t\t[\n\t\t\t\tskillMetadata.name,\n\t\t\t\tskillMetadata.version ? `v${skillMetadata.version}` : undefined,\n\t\t\t\tskillMetadata.source,\n\t\t\t\tskillMetadata.scope,\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" | \"),\n\t\t);\n\t\tconst metadata = compactTimelineMetadata({\n\t\t\tname: skillMetadata.name,\n\t\t\tversion: skillMetadata.version,\n\t\t\tsource: skillMetadata.source,\n\t\t\tscope: skillMetadata.scope,\n\t\t\tworkspaceId: skillMetadata.workspaceId,\n\t\t\townerId: skillMetadata.ownerId,\n\t\t\thash: skillMetadata.hash,\n\t\t});\n\t\tappendItem(items, {\n\t\t\tid: `artifact-linked:${options.baseId}:${toolResult.toolCallId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"artifact.linked\",\n\t\t\ttitle: `Skill artifact loaded: ${skillMetadata.name}`,\n\t\t\tvisibility: \"admin\",\n\t\t\tsource: options.source,\n\t\t\tstatus: \"completed\",\n\t\t\ttoolCallId: toolResult.toolCallId,\n\t\t\ttoolName: toolResult.toolName,\n\t\t\t...(skillMetadata.artifactId\n\t\t\t\t? { artifactId: skillMetadata.artifactId }\n\t\t\t\t: {}),\n\t\t\t...(summary ? { summary } : {}),\n\t\t\t...(metadata ? { metadata } : {}),\n\t\t});\n\t}\n\n\tconst governed = governedToolMetadata(toolResult.details);\n\tif (governed.governedOutcome || governed.errorCode) {\n\t\tconst summary = compactTimelineSummary(\n\t\t\t[\n\t\t\t\tgoverned.governedOutcome\n\t\t\t\t\t? `Outcome: ${governed.governedOutcome}`\n\t\t\t\t\t: undefined,\n\t\t\t\tgoverned.errorCode ? `Code: ${governed.errorCode}` : undefined,\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" | \"),\n\t\t);\n\t\tconst metadata = compactTimelineMetadata({\n\t\t\tgovernedOutcome: governed.governedOutcome,\n\t\t\terrorCode: governed.errorCode,\n\t\t});\n\t\tappendItem(items, {\n\t\t\tid: `policy-decision:${options.baseId}:${toolResult.toolCallId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"policy.decision\",\n\t\t\ttitle: `Policy decision for ${toolResult.toolName}`,\n\t\t\tvisibility: governed.governedOutcome === \"denied\" ? \"user\" : \"admin\",\n\t\t\tsource: options.source,\n\t\t\tstatus: timelineStatusForGovernedOutcome(governed.governedOutcome),\n\t\t\ttoolCallId: toolResult.toolCallId,\n\t\t\ttoolName: toolResult.toolName,\n\t\t\t...(governed.approvalRequestId\n\t\t\t\t? { approvalRequestId: governed.approvalRequestId }\n\t\t\t\t: {}),\n\t\t\t...(summary ? { summary } : {}),\n\t\t\t...(metadata ? { metadata } : {}),\n\t\t});\n\t}\n}\n\nfunction appendItem(\n\titems: ComposerRunTimelineItem[],\n\titem: ComposerRunTimelineItem,\n): void {\n\titems.push(item);\n}\n\nfunction addMessageItems(\n\titems: ComposerRunTimelineItem[],\n\tsessionId: string,\n\tmessage: AppMessage,\n\toptions: {\n\t\tbaseId: string;\n\t\ttimestamp: string;\n\t\tsource: \"local\" | \"platform\";\n\t\tcontext?: TimelineBuildContext;\n\t},\n): void {\n\tif (message.role === \"user\") {\n\t\tconst userMessage = message as UserMessage;\n\t\tconst summary = compactTimelineSummary(\n\t\t\ttextFromContent(userMessage.content),\n\t\t);\n\t\tappendItem(items, {\n\t\t\tid: `message:${options.baseId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"message.user\",\n\t\t\ttitle: \"User message\",\n\t\t\tvisibility: \"user\",\n\t\t\tsource: options.source,\n\t\t\trole: \"user\",\n\t\t\tstatus: \"completed\",\n\t\t\t...(summary ? { summary } : {}),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (message.role === \"assistant\") {\n\t\tconst assistantMessage = message as AssistantMessage;\n\t\tconst summary = compactTimelineSummary(\n\t\t\ttextFromContent(assistantMessage.content),\n\t\t);\n\t\tappendItem(items, {\n\t\t\tid: `message:${options.baseId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"message.assistant\",\n\t\t\ttitle: \"Assistant response\",\n\t\t\tvisibility: \"user\",\n\t\t\tsource: options.source,\n\t\t\trole: \"assistant\",\n\t\t\tstatus: assistantMessage.stopReason === \"error\" ? \"failed\" : \"completed\",\n\t\t\t...(summary ? { summary } : {}),\n\t\t\t...(assistantMessage.model\n\t\t\t\t? { metadata: { model: assistantMessage.model } }\n\t\t\t\t: {}),\n\t\t});\n\n\t\tfor (const block of assistantMessage.content) {\n\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\toptions.context?.toolRequests.set(block.id, {\n\t\t\t\tname: block.name,\n\t\t\t\targs: block.arguments,\n\t\t\t});\n\t\t\tappendItem(items, {\n\t\t\t\tid: `tool-requested:${options.baseId}:${block.id}`,\n\t\t\t\tsessionId,\n\t\t\t\ttimestamp: options.timestamp,\n\t\t\t\ttype: \"tool.requested\",\n\t\t\t\ttitle: `Requested ${block.name}`,\n\t\t\t\tvisibility: \"user\",\n\t\t\t\tsource: options.source,\n\t\t\t\tstatus: \"running\",\n\t\t\t\ttoolCallId: block.id,\n\t\t\t\ttoolName: block.name,\n\t\t\t});\n\t\t}\n\t\treturn;\n\t}\n\n\tif (message.role === \"toolResult\") {\n\t\tconst toolResult = message as ToolResultMessage;\n\t\tconst details = detailsRecord(toolResult.details);\n\t\tconst governed = governedToolMetadata(toolResult.details);\n\t\tconst request = options.context?.toolRequests.get(toolResult.toolCallId);\n\t\tconst approvalRequestId =\n\t\t\tgoverned.approvalRequestId ?? redactedString(details?.approvalRequestId);\n\t\tconst toolExecutionId = redactedString(details?.toolExecutionId);\n\t\tconst metadata = compactTimelineMetadata({\n\t\t\tgovernedOutcome: governed.governedOutcome,\n\t\t\terrorCode: governed.errorCode,\n\t\t});\n\t\tappendItem(items, {\n\t\t\tid: `tool-result:${options.baseId}:${toolResult.toolCallId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: toolResult.isError ? \"tool.failed\" : \"tool.completed\",\n\t\t\ttitle: `${toolResult.toolName} ${\n\t\t\t\ttoolResult.isError ? \"failed\" : \"completed\"\n\t\t\t}`,\n\t\t\tvisibility: \"user\",\n\t\t\tsource: options.source,\n\t\t\trole: \"tool\",\n\t\t\tstatus: toolResult.isError ? \"failed\" : \"completed\",\n\t\t\ttoolCallId: toolResult.toolCallId,\n\t\t\ttoolName: toolResult.toolName,\n\t\t\t...(approvalRequestId ? { approvalRequestId } : {}),\n\t\t\t...(toolExecutionId ? { toolExecutionId } : {}),\n\t\t\t...(metadata ? { metadata } : {}),\n\t\t});\n\t\taddDerivedToolResultItems(items, sessionId, toolResult, {\n\t\t\tbaseId: options.baseId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\tsource: options.source,\n\t\t\trequest,\n\t\t});\n\t}\n}\n\nfunction statusForPendingRequest(\n\trequest: ComposerPendingRequest,\n): ComposerRunTimelineStatus {\n\treturn request.status === \"pending\" ? \"pending\" : \"info\";\n}\n\nfunction platformOperationForPending(\n\trequest: ComposerPendingRequest,\n): ComposerPendingRequestPlatformOperation | undefined {\n\tif (!request.platform) return undefined;\n\tif (request.kind === \"approval\") {\n\t\treturn request.platform.source === \"tool_execution\"\n\t\t\t? \"ResumeToolExecution\"\n\t\t\t: \"ResolveApproval\";\n\t}\n\tif (\n\t\trequest.kind === \"client_tool\" ||\n\t\trequest.kind === \"mcp_elicitation\" ||\n\t\trequest.kind === \"user_input\"\n\t) {\n\t\treturn \"ResumeRun\";\n\t}\n\treturn undefined;\n}\n\nfunction pendingRequestTitle(request: ComposerPendingRequest): string {\n\tconst label =\n\t\trequest.displayName ||\n\t\trequest.summaryLabel ||\n\t\trequest.toolName ||\n\t\t\"request\";\n\tswitch (request.kind) {\n\t\tcase \"approval\":\n\t\t\treturn `Waiting for approval: ${label}`;\n\t\tcase \"tool_retry\":\n\t\t\treturn `Waiting for retry decision: ${label}`;\n\t\tcase \"client_tool\":\n\t\t\treturn `Waiting for client tool: ${label}`;\n\t\tcase \"mcp_elicitation\":\n\t\t\treturn \"Waiting for MCP input\";\n\t\tcase \"user_input\":\n\t\t\treturn \"Waiting for user input\";\n\t}\n}\n\nfunction addPendingRequestItems(\n\titems: ComposerRunTimelineItem[],\n\tsessionId: string,\n\tpendingRequests: ComposerPendingRequest[],\n\tgeneratedAt: string,\n): void {\n\tfor (const request of pendingRequests) {\n\t\tconst summary = compactTimelineSummary(\n\t\t\trequest.actionDescription || request.summaryLabel || request.reason,\n\t\t);\n\t\tconst platformOperation = platformOperationForPending(request);\n\t\tappendItem(items, {\n\t\t\tid: `pending:${request.id}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: normalizeTimestamp(request.createdAt, generatedAt),\n\t\t\ttype: \"wait.pending\",\n\t\t\ttitle: pendingRequestTitle(request),\n\t\t\tvisibility: \"user\",\n\t\t\tsource: request.source,\n\t\t\tstatus: statusForPendingRequest(request),\n\t\t\ttoolCallId: request.toolCallId,\n\t\t\ttoolName: request.toolName,\n\t\t\tpendingRequestId: request.id,\n\t\t\tpendingRequestKind: request.kind,\n\t\t\t...(summary ? { summary } : {}),\n\t\t\t...(request.platform?.approvalRequestId\n\t\t\t\t? { approvalRequestId: request.platform.approvalRequestId }\n\t\t\t\t: {}),\n\t\t\t...(request.platform?.toolExecutionId\n\t\t\t\t? { toolExecutionId: request.platform.toolExecutionId }\n\t\t\t\t: {}),\n\t\t\t...(request.platform ? { platform: request.platform } : {}),\n\t\t\t...(platformOperation ? { platformOperation } : {}),\n\t\t});\n\t}\n}\n\nfunction addEntryItems(\n\titems: ComposerRunTimelineItem[],\n\tsessionId: string,\n\tentries: SessionEntry[],\n\tgeneratedAt: string,\n\tcontext: TimelineBuildContext,\n): number {\n\tlet messageEntryCount = 0;\n\n\tfor (const [index, entry] of entries.entries()) {\n\t\tconst timestamp = normalizeTimestamp(\n\t\t\t(entry as { timestamp?: unknown }).timestamp,\n\t\t\tgeneratedAt,\n\t\t);\n\n\t\tswitch (entry.type) {\n\t\t\tcase \"session\": {\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `session-started:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"session.started\",\n\t\t\t\t\ttitle: \"Session started\",\n\t\t\t\t\tvisibility: \"user\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(entry.cwd ? { metadata: { cwd: entry.cwd } } : {}),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"session_meta\": {\n\t\t\t\tconst summary = compactTimelineSummary(\n\t\t\t\t\tentry.title || entry.resumeSummary || entry.summary,\n\t\t\t\t);\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `session-updated:${index}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"session.updated\",\n\t\t\t\t\ttitle: \"Session metadata updated\",\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"message\": {\n\t\t\t\tmessageEntryCount += 1;\n\t\t\t\taddMessageItems(items, sessionId, entry.message, {\n\t\t\t\t\tbaseId: entry.id,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tcontext,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"compaction\": {\n\t\t\t\tconst summary = compactTimelineSummary(entry.summary);\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `compaction:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"compaction.created\",\n\t\t\t\t\ttitle: \"Context compacted\",\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\ttokensBefore: entry.tokensBefore,\n\t\t\t\t\t\tauto: entry.auto === true,\n\t\t\t\t\t\tfromHook: entry.fromHook === true,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branch_summary\": {\n\t\t\t\tconst summary = compactTimelineSummary(entry.summary);\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `branch:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"branch.created\",\n\t\t\t\t\ttitle: \"Branch summary created\",\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t\tmetadata: { fromId: entry.fromId },\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"model_change\": {\n\t\t\t\tconst summary = compactTimelineSummary(entry.model);\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `model-change:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"model.changed\",\n\t\t\t\t\ttitle: \"Model changed\",\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"thinking_level_change\": {\n\t\t\t\tconst summary = compactTimelineSummary(entry.thinkingLevel);\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `thinking-change:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"thinking.changed\",\n\t\t\t\t\ttitle: \"Thinking level changed\",\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"custom_message\": {\n\t\t\t\tif (!entry.display) break;\n\t\t\t\tconst summary = compactTimelineSummary(textFromContent(entry.content));\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `custom-message:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"custom.event\",\n\t\t\t\t\ttitle: entry.customType,\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"custom\": {\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `custom:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"custom.event\",\n\t\t\t\t\ttitle: entry.customType,\n\t\t\t\t\tvisibility: \"audit\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn messageEntryCount;\n}\n\nfunction sortItems(\n\titems: ComposerRunTimelineItem[],\n): ComposerRunTimelineItem[] {\n\treturn [...items].sort((a, b) => {\n\t\tconst timestampDelta =\n\t\t\tnew Date(a.timestamp).getTime() - new Date(b.timestamp).getTime();\n\t\tif (timestampDelta !== 0) return timestampDelta;\n\t\treturn a.id.localeCompare(b.id);\n\t});\n}\n\nexport function buildComposerRunTimeline(\n\toptions: BuildComposerRunTimelineOptions,\n): ComposerRunTimelineResponse {\n\tconst generatedAt = options.generatedAt ?? new Date().toISOString();\n\tconst items: ComposerRunTimelineItem[] = [];\n\tconst entries = options.entries ?? [];\n\tconst messages = options.messages ?? [];\n\tconst pendingRequests = options.pendingRequests ?? [];\n\tconst context: TimelineBuildContext = {\n\t\ttoolRequests: new Map<string, TimelineToolRequest>(),\n\t};\n\n\tconst messageEntryCount = addEntryItems(\n\t\titems,\n\t\toptions.sessionId,\n\t\tentries,\n\t\tgeneratedAt,\n\t\tcontext,\n\t);\n\n\tif (messageEntryCount === 0) {\n\t\tfor (const [index, message] of messages.entries()) {\n\t\t\taddMessageItems(items, options.sessionId, message, {\n\t\t\t\tbaseId: `fallback-${index}`,\n\t\t\t\ttimestamp: normalizeTimestamp(\n\t\t\t\t\t(message as { timestamp?: unknown }).timestamp,\n\t\t\t\t\tgeneratedAt,\n\t\t\t\t),\n\t\t\t\tsource: \"local\",\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n\n\taddPendingRequestItems(\n\t\titems,\n\t\toptions.sessionId,\n\t\tpendingRequests,\n\t\tgeneratedAt,\n\t);\n\n\treturn {\n\t\tsessionId: options.sessionId,\n\t\tsource: \"local\",\n\t\tgeneratedAt,\n\t\tplatformBacked: false,\n\t\tpendingRequestCount: pendingRequests.length,\n\t\titems: sortItems(items),\n\t};\n}\n"]}
1
+ {"version":3,"file":"session-timeline.js","sourceRoot":"","sources":["../../src/server/session-timeline.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tComposerPendingRequest,\n\tComposerPendingRequestPlatformOperation,\n\tComposerRunTimelineItem,\n\tComposerRunTimelineResponse,\n\tComposerRunTimelineStatus,\n} from \"@evalops/contracts\";\nimport type {\n\tAppMessage,\n\tAssistantMessage,\n\tToolResultMessage,\n\tUserMessage,\n} from \"../agent/types.js\";\nimport { getDiagnosticDeltaFromToolResult } from \"../lsp/diagnostic-repair.js\";\nimport type { SessionEntry } from \"../session/types.js\";\nimport { getSkillArtifactMetadataFromDetails } from \"../skills/artifact-metadata.js\";\nimport {\n\tcompactTimelineMetadata,\n\tcompactTimelineSummary,\n\tredactTimelineSecrets,\n} from \"../timeline/redaction.js\";\n\ninterface BuildComposerRunTimelineOptions {\n\tsessionId: string;\n\tentries?: SessionEntry[];\n\tmessages?: AppMessage[];\n\tpendingRequests?: ComposerPendingRequest[];\n\tgeneratedAt?: string;\n}\n\ninterface TimelineToolRequest {\n\tname: string;\n\targs: Record<string, unknown>;\n}\n\ninterface TimelineBuildContext {\n\ttoolRequests: Map<string, TimelineToolRequest>;\n}\n\nfunction normalizeTimestamp(value: unknown, fallback: string): string {\n\tif (typeof value === \"string\" || typeof value === \"number\") {\n\t\tconst date = new Date(value);\n\t\tif (!Number.isNaN(date.getTime())) {\n\t\t\treturn date.toISOString();\n\t\t}\n\t}\n\treturn fallback;\n}\n\nfunction detailsRecord(value: unknown): Record<string, unknown> | undefined {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction redactedString(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst trimmed = value.trim();\n\treturn trimmed ? redactTimelineSecrets(trimmed) : undefined;\n}\n\nfunction finiteNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value)\n\t\t? value\n\t\t: undefined;\n}\n\nfunction booleanValue(value: unknown): boolean | undefined {\n\treturn typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction textFromContent(content: unknown): string | undefined {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return undefined;\n\tconst text = content\n\t\t.map((block) => {\n\t\t\tif (!block || typeof block !== \"object\") return \"\";\n\t\t\tconst typed = block as { type?: unknown; text?: unknown };\n\t\t\tif (typed.type === \"text\" && typeof typed.text === \"string\") {\n\t\t\t\treturn typed.text;\n\t\t\t}\n\t\t\treturn \"\";\n\t\t})\n\t\t.filter(Boolean)\n\t\t.join(\" \");\n\treturn text || undefined;\n}\n\nfunction getToolPath(\n\trequest: TimelineToolRequest | undefined,\n): string | undefined {\n\tconst args = request?.args;\n\treturn redactedString(args?.path) ?? redactedString(args?.file_path);\n}\n\nfunction fileArtifactIdForToolResult(\n\ttoolResult: ToolResultMessage,\n\trequest: TimelineToolRequest | undefined,\n): string | undefined {\n\tif (toolResult.isError) return undefined;\n\tconst normalizedToolName = toolResult.toolName.toLowerCase();\n\tif (normalizedToolName !== \"write\" && normalizedToolName !== \"edit\") {\n\t\treturn undefined;\n\t}\n\treturn `file:${getToolPath(request) ?? toolResult.toolCallId}`;\n}\n\nfunction governedToolMetadata(details: unknown): {\n\terrorCode?: string;\n\tapprovalRequestId?: string;\n\tgovernedOutcome?: string;\n} {\n\tconst record = detailsRecord(details);\n\tconst outcome = detailsRecord(record?.governedOutcome);\n\tif (!outcome) return {};\n\tconst classification = redactedString(outcome.classification);\n\treturn {\n\t\terrorCode: redactedString(outcome.code) ?? classification,\n\t\tapprovalRequestId: redactedString(outcome.approvalRequestId),\n\t\tgovernedOutcome: classification,\n\t};\n}\n\nfunction timelineStatusForGovernedOutcome(\n\toutcome: string | undefined,\n): ComposerRunTimelineStatus {\n\tswitch (outcome) {\n\t\tcase \"denied\":\n\t\t\treturn \"denied\";\n\t\tcase \"approval_required\":\n\t\tcase \"approval_pending\":\n\t\tcase \"authentication_required\":\n\t\tcase \"rate_limited\":\n\t\t\treturn \"pending\";\n\t\tdefault:\n\t\t\treturn \"info\";\n\t}\n}\n\nfunction addDerivedToolResultItems(\n\titems: ComposerRunTimelineItem[],\n\tsessionId: string,\n\ttoolResult: ToolResultMessage,\n\toptions: {\n\t\tbaseId: string;\n\t\ttimestamp: string;\n\t\tsource: \"local\" | \"platform\";\n\t\trequest?: TimelineToolRequest;\n\t},\n): void {\n\tconst details = detailsRecord(toolResult.details);\n\tconst normalizedToolName = toolResult.toolName.toLowerCase();\n\n\tif (\n\t\t!toolResult.isError &&\n\t\t(normalizedToolName === \"write\" || normalizedToolName === \"edit\")\n\t) {\n\t\tconst displayPath = getToolPath(options.request);\n\t\tconst artifactId = fileArtifactIdForToolResult(toolResult, options.request);\n\t\tconst previousExists = booleanValue(details?.previousExists);\n\t\tconst editsApplied = finiteNumber(details?.editsApplied);\n\t\tconst bytesWritten = finiteNumber(details?.bytesWritten);\n\t\tconst action =\n\t\t\tnormalizedToolName === \"write\"\n\t\t\t\t? previousExists === false\n\t\t\t\t\t? \"created\"\n\t\t\t\t\t: \"wrote\"\n\t\t\t\t: \"edited\";\n\t\tconst summary = compactTimelineSummary(\n\t\t\t[\n\t\t\t\tdisplayPath,\n\t\t\t\tbytesWritten !== undefined ? `${bytesWritten} bytes` : undefined,\n\t\t\t\teditsApplied !== undefined ? `${editsApplied} edits` : undefined,\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" | \"),\n\t\t);\n\t\tconst hasDiff =\n\t\t\ttypeof details?.diff === \"string\" && details.diff.length > 0;\n\t\tconst metadata = compactTimelineMetadata({\n\t\t\tpath: displayPath,\n\t\t\taction,\n\t\t\tpreviousExists,\n\t\t\tbytesWritten,\n\t\t\teditsApplied,\n\t\t\thasDiff,\n\t\t});\n\n\t\tappendItem(items, {\n\t\t\tid: `file-change:${options.baseId}:${toolResult.toolCallId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"file.changed\",\n\t\t\ttitle: `File ${action}`,\n\t\t\tvisibility: \"user\",\n\t\t\tsource: options.source,\n\t\t\tstatus: \"completed\",\n\t\t\ttoolCallId: toolResult.toolCallId,\n\t\t\ttoolName: toolResult.toolName,\n\t\t\t...(artifactId ? { artifactId } : {}),\n\t\t\t...(summary ? { summary } : {}),\n\t\t\t...(metadata ? { metadata } : {}),\n\t\t});\n\t}\n\n\tconst diagnosticDelta = getDiagnosticDeltaFromToolResult(toolResult);\n\tif (diagnosticDelta) {\n\t\tconst summary = compactTimelineSummary(\n\t\t\t`Diagnostic delta: ${diagnosticDelta.introducedCount} introduced, ${diagnosticDelta.repairedCount} repaired, ${diagnosticDelta.remainingCount} remaining.`,\n\t\t);\n\t\tappendItem(items, {\n\t\t\tid: `diagnostic-delta:${options.baseId}:${toolResult.toolCallId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"diagnostic.delta\",\n\t\t\ttitle: `Diagnostics for ${diagnosticDelta.displayPath}`,\n\t\t\tvisibility: \"user\",\n\t\t\tsource: options.source,\n\t\t\tstatus: diagnosticDelta.introducedCount > 0 ? \"failed\" : \"completed\",\n\t\t\ttoolCallId: toolResult.toolCallId,\n\t\t\ttoolName: toolResult.toolName,\n\t\t\t...(summary ? { summary } : {}),\n\t\t\tmetadata: {\n\t\t\t\tdisplayPath: diagnosticDelta.displayPath,\n\t\t\t\tusedDelta: diagnosticDelta.usedDelta,\n\t\t\t\tintroducedCount: diagnosticDelta.introducedCount,\n\t\t\t\trepairedCount: diagnosticDelta.repairedCount,\n\t\t\t\tremainingCount: diagnosticDelta.remainingCount,\n\t\t\t\tfingerprint: diagnosticDelta.fingerprint,\n\t\t\t\tshouldFollowUp: diagnosticDelta.repair.shouldFollowUp,\n\t\t\t\tmaxAttempts: diagnosticDelta.repair.maxAttempts,\n\t\t\t},\n\t\t});\n\t}\n\n\tconst skillMetadata = getSkillArtifactMetadataFromDetails(toolResult.details);\n\tif (skillMetadata) {\n\t\tconst summary = compactTimelineSummary(\n\t\t\t[\n\t\t\t\tskillMetadata.name,\n\t\t\t\tskillMetadata.version ? `v${skillMetadata.version}` : undefined,\n\t\t\t\tskillMetadata.source,\n\t\t\t\tskillMetadata.scope,\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" | \"),\n\t\t);\n\t\tconst metadata = compactTimelineMetadata({\n\t\t\tname: skillMetadata.name,\n\t\t\tversion: skillMetadata.version,\n\t\t\tsource: skillMetadata.source,\n\t\t\tscope: skillMetadata.scope,\n\t\t\tworkspaceId: skillMetadata.workspaceId,\n\t\t\townerId: skillMetadata.ownerId,\n\t\t\thash: skillMetadata.hash,\n\t\t});\n\t\tappendItem(items, {\n\t\t\tid: `artifact-linked:${options.baseId}:${toolResult.toolCallId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"artifact.linked\",\n\t\t\ttitle: `Skill artifact loaded: ${skillMetadata.name}`,\n\t\t\tvisibility: \"admin\",\n\t\t\tsource: options.source,\n\t\t\tstatus: \"completed\",\n\t\t\ttoolCallId: toolResult.toolCallId,\n\t\t\ttoolName: toolResult.toolName,\n\t\t\t...(skillMetadata.artifactId\n\t\t\t\t? { artifactId: skillMetadata.artifactId }\n\t\t\t\t: {}),\n\t\t\t...(summary ? { summary } : {}),\n\t\t\t...(metadata ? { metadata } : {}),\n\t\t});\n\t}\n\n\tconst governed = governedToolMetadata(toolResult.details);\n\tif (governed.governedOutcome || governed.errorCode) {\n\t\tconst summary = compactTimelineSummary(\n\t\t\t[\n\t\t\t\tgoverned.governedOutcome\n\t\t\t\t\t? `Outcome: ${governed.governedOutcome}`\n\t\t\t\t\t: undefined,\n\t\t\t\tgoverned.errorCode ? `Code: ${governed.errorCode}` : undefined,\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" | \"),\n\t\t);\n\t\tconst metadata = compactTimelineMetadata({\n\t\t\tgovernedOutcome: governed.governedOutcome,\n\t\t\terrorCode: governed.errorCode,\n\t\t});\n\t\tappendItem(items, {\n\t\t\tid: `policy-decision:${options.baseId}:${toolResult.toolCallId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"policy.decision\",\n\t\t\ttitle: `Policy decision for ${toolResult.toolName}`,\n\t\t\tvisibility: governed.governedOutcome === \"denied\" ? \"user\" : \"admin\",\n\t\t\tsource: options.source,\n\t\t\tstatus: timelineStatusForGovernedOutcome(governed.governedOutcome),\n\t\t\ttoolCallId: toolResult.toolCallId,\n\t\t\ttoolName: toolResult.toolName,\n\t\t\t...(governed.approvalRequestId\n\t\t\t\t? { approvalRequestId: governed.approvalRequestId }\n\t\t\t\t: {}),\n\t\t\t...(summary ? { summary } : {}),\n\t\t\t...(metadata ? { metadata } : {}),\n\t\t});\n\t}\n}\n\nfunction appendItem(\n\titems: ComposerRunTimelineItem[],\n\titem: ComposerRunTimelineItem,\n): void {\n\titems.push(item);\n}\n\nfunction addMessageItems(\n\titems: ComposerRunTimelineItem[],\n\tsessionId: string,\n\tmessage: AppMessage,\n\toptions: {\n\t\tbaseId: string;\n\t\ttimestamp: string;\n\t\tsource: \"local\" | \"platform\";\n\t\tcontext?: TimelineBuildContext;\n\t},\n): void {\n\tif (message.role === \"user\") {\n\t\tconst userMessage = message as UserMessage;\n\t\tconst summary = compactTimelineSummary(\n\t\t\ttextFromContent(userMessage.content),\n\t\t);\n\t\tappendItem(items, {\n\t\t\tid: `message:${options.baseId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"message.user\",\n\t\t\ttitle: \"User message\",\n\t\t\tvisibility: \"user\",\n\t\t\tsource: options.source,\n\t\t\trole: \"user\",\n\t\t\tstatus: \"completed\",\n\t\t\t...(summary ? { summary } : {}),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (message.role === \"assistant\") {\n\t\tconst assistantMessage = message as AssistantMessage;\n\t\tconst summary = compactTimelineSummary(\n\t\t\ttextFromContent(assistantMessage.content),\n\t\t);\n\t\tappendItem(items, {\n\t\t\tid: `message:${options.baseId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: \"message.assistant\",\n\t\t\ttitle: \"Assistant response\",\n\t\t\tvisibility: \"user\",\n\t\t\tsource: options.source,\n\t\t\trole: \"assistant\",\n\t\t\tstatus: assistantMessage.stopReason === \"error\" ? \"failed\" : \"completed\",\n\t\t\t...(summary ? { summary } : {}),\n\t\t\t...(assistantMessage.model\n\t\t\t\t? { metadata: { model: assistantMessage.model } }\n\t\t\t\t: {}),\n\t\t});\n\n\t\tfor (const block of assistantMessage.content) {\n\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\toptions.context?.toolRequests.set(block.id, {\n\t\t\t\tname: block.name,\n\t\t\t\targs: block.arguments,\n\t\t\t});\n\t\t\tappendItem(items, {\n\t\t\t\tid: `tool-requested:${options.baseId}:${block.id}`,\n\t\t\t\tsessionId,\n\t\t\t\ttimestamp: options.timestamp,\n\t\t\t\ttype: \"tool.requested\",\n\t\t\t\ttitle: `Requested ${block.name}`,\n\t\t\t\tvisibility: \"user\",\n\t\t\t\tsource: options.source,\n\t\t\t\tstatus: \"running\",\n\t\t\t\ttoolCallId: block.id,\n\t\t\t\ttoolName: block.name,\n\t\t\t});\n\t\t}\n\t\treturn;\n\t}\n\n\tif (message.role === \"toolResult\") {\n\t\tconst toolResult = message as ToolResultMessage;\n\t\tconst details = detailsRecord(toolResult.details);\n\t\tconst governed = governedToolMetadata(toolResult.details);\n\t\tconst request = options.context?.toolRequests.get(toolResult.toolCallId);\n\t\tconst approvalRequestId =\n\t\t\tgoverned.approvalRequestId ?? redactedString(details?.approvalRequestId);\n\t\tconst toolExecutionId = redactedString(details?.toolExecutionId);\n\t\tconst artifactId = fileArtifactIdForToolResult(toolResult, request);\n\t\tconst metadata = compactTimelineMetadata({\n\t\t\tgovernedOutcome: governed.governedOutcome,\n\t\t\terrorCode: governed.errorCode,\n\t\t});\n\t\tappendItem(items, {\n\t\t\tid: `tool-result:${options.baseId}:${toolResult.toolCallId}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\ttype: toolResult.isError ? \"tool.failed\" : \"tool.completed\",\n\t\t\ttitle: `${toolResult.toolName} ${\n\t\t\t\ttoolResult.isError ? \"failed\" : \"completed\"\n\t\t\t}`,\n\t\t\tvisibility: \"user\",\n\t\t\tsource: options.source,\n\t\t\trole: \"tool\",\n\t\t\tstatus: toolResult.isError ? \"failed\" : \"completed\",\n\t\t\ttoolCallId: toolResult.toolCallId,\n\t\t\ttoolName: toolResult.toolName,\n\t\t\t...(approvalRequestId ? { approvalRequestId } : {}),\n\t\t\t...(toolExecutionId ? { toolExecutionId } : {}),\n\t\t\t...(artifactId ? { artifactId } : {}),\n\t\t\t...(metadata ? { metadata } : {}),\n\t\t});\n\t\taddDerivedToolResultItems(items, sessionId, toolResult, {\n\t\t\tbaseId: options.baseId,\n\t\t\ttimestamp: options.timestamp,\n\t\t\tsource: options.source,\n\t\t\trequest,\n\t\t});\n\t}\n}\n\nfunction statusForPendingRequest(\n\trequest: ComposerPendingRequest,\n): ComposerRunTimelineStatus {\n\treturn request.status === \"pending\" ? \"pending\" : \"info\";\n}\n\nfunction platformOperationForPending(\n\trequest: ComposerPendingRequest,\n): ComposerPendingRequestPlatformOperation | undefined {\n\tif (!request.platform) return undefined;\n\tif (request.kind === \"approval\") {\n\t\treturn request.platform.source === \"tool_execution\"\n\t\t\t? \"ResumeToolExecution\"\n\t\t\t: \"ResolveApproval\";\n\t}\n\tif (\n\t\trequest.kind === \"client_tool\" ||\n\t\trequest.kind === \"mcp_elicitation\" ||\n\t\trequest.kind === \"user_input\"\n\t) {\n\t\treturn \"ResumeRun\";\n\t}\n\treturn undefined;\n}\n\nfunction pendingRequestTitle(request: ComposerPendingRequest): string {\n\tconst label =\n\t\trequest.displayName ||\n\t\trequest.summaryLabel ||\n\t\trequest.toolName ||\n\t\t\"request\";\n\tswitch (request.kind) {\n\t\tcase \"approval\":\n\t\t\treturn `Waiting for approval: ${label}`;\n\t\tcase \"tool_retry\":\n\t\t\treturn `Waiting for retry decision: ${label}`;\n\t\tcase \"client_tool\":\n\t\t\treturn `Waiting for client tool: ${label}`;\n\t\tcase \"mcp_elicitation\":\n\t\t\treturn \"Waiting for MCP input\";\n\t\tcase \"user_input\":\n\t\t\treturn \"Waiting for user input\";\n\t}\n}\n\nfunction addPendingRequestItems(\n\titems: ComposerRunTimelineItem[],\n\tsessionId: string,\n\tpendingRequests: ComposerPendingRequest[],\n\tgeneratedAt: string,\n): void {\n\tfor (const request of pendingRequests) {\n\t\tconst summary = compactTimelineSummary(\n\t\t\trequest.actionDescription || request.summaryLabel || request.reason,\n\t\t);\n\t\tconst platformOperation = platformOperationForPending(request);\n\t\tappendItem(items, {\n\t\t\tid: `pending:${request.id}`,\n\t\t\tsessionId,\n\t\t\ttimestamp: normalizeTimestamp(request.createdAt, generatedAt),\n\t\t\ttype: \"wait.pending\",\n\t\t\ttitle: pendingRequestTitle(request),\n\t\t\tvisibility: \"user\",\n\t\t\tsource: request.source,\n\t\t\tstatus: statusForPendingRequest(request),\n\t\t\ttoolCallId: request.toolCallId,\n\t\t\ttoolName: request.toolName,\n\t\t\tpendingRequestId: request.id,\n\t\t\tpendingRequestKind: request.kind,\n\t\t\t...(summary ? { summary } : {}),\n\t\t\t...(request.platform?.approvalRequestId\n\t\t\t\t? { approvalRequestId: request.platform.approvalRequestId }\n\t\t\t\t: {}),\n\t\t\t...(request.platform?.toolExecutionId\n\t\t\t\t? { toolExecutionId: request.platform.toolExecutionId }\n\t\t\t\t: {}),\n\t\t\t...(request.platform ? { platform: request.platform } : {}),\n\t\t\t...(platformOperation ? { platformOperation } : {}),\n\t\t});\n\t}\n}\n\nfunction addEntryItems(\n\titems: ComposerRunTimelineItem[],\n\tsessionId: string,\n\tentries: SessionEntry[],\n\tgeneratedAt: string,\n\tcontext: TimelineBuildContext,\n): number {\n\tlet messageEntryCount = 0;\n\n\tfor (const [index, entry] of entries.entries()) {\n\t\tconst timestamp = normalizeTimestamp(\n\t\t\t(entry as { timestamp?: unknown }).timestamp,\n\t\t\tgeneratedAt,\n\t\t);\n\n\t\tswitch (entry.type) {\n\t\t\tcase \"session\": {\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `session-started:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"session.started\",\n\t\t\t\t\ttitle: \"Session started\",\n\t\t\t\t\tvisibility: \"user\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(entry.cwd ? { metadata: { cwd: entry.cwd } } : {}),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"session_meta\": {\n\t\t\t\tconst summary = compactTimelineSummary(\n\t\t\t\t\tentry.title || entry.resumeSummary || entry.summary,\n\t\t\t\t);\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `session-updated:${index}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"session.updated\",\n\t\t\t\t\ttitle: \"Session metadata updated\",\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"message\": {\n\t\t\t\tmessageEntryCount += 1;\n\t\t\t\taddMessageItems(items, sessionId, entry.message, {\n\t\t\t\t\tbaseId: entry.id,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tcontext,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"compaction\": {\n\t\t\t\tconst summary = compactTimelineSummary(entry.summary);\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `compaction:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"compaction.created\",\n\t\t\t\t\ttitle: \"Context compacted\",\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\ttokensBefore: entry.tokensBefore,\n\t\t\t\t\t\tauto: entry.auto === true,\n\t\t\t\t\t\tfromHook: entry.fromHook === true,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branch_summary\": {\n\t\t\t\tconst summary = compactTimelineSummary(entry.summary);\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `branch:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"branch.created\",\n\t\t\t\t\ttitle: \"Branch summary created\",\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t\tmetadata: { fromId: entry.fromId },\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"model_change\": {\n\t\t\t\tconst summary = compactTimelineSummary(entry.model);\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `model-change:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"model.changed\",\n\t\t\t\t\ttitle: \"Model changed\",\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"thinking_level_change\": {\n\t\t\t\tconst summary = compactTimelineSummary(entry.thinkingLevel);\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `thinking-change:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"thinking.changed\",\n\t\t\t\t\ttitle: \"Thinking level changed\",\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"custom_message\": {\n\t\t\t\tif (!entry.display) break;\n\t\t\t\tconst summary = compactTimelineSummary(textFromContent(entry.content));\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `custom-message:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"custom.event\",\n\t\t\t\t\ttitle: entry.customType,\n\t\t\t\t\tvisibility: \"admin\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t\t...(summary ? { summary } : {}),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"custom\": {\n\t\t\t\tappendItem(items, {\n\t\t\t\t\tid: `custom:${entry.id}`,\n\t\t\t\t\tsessionId,\n\t\t\t\t\ttimestamp,\n\t\t\t\t\ttype: \"custom.event\",\n\t\t\t\t\ttitle: entry.customType,\n\t\t\t\t\tvisibility: \"audit\",\n\t\t\t\t\tsource: \"local\",\n\t\t\t\t\tstatus: \"info\",\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn messageEntryCount;\n}\n\nfunction sortItems(\n\titems: ComposerRunTimelineItem[],\n): ComposerRunTimelineItem[] {\n\treturn [...items].sort((a, b) => {\n\t\tconst timestampDelta =\n\t\t\tnew Date(a.timestamp).getTime() - new Date(b.timestamp).getTime();\n\t\tif (timestampDelta !== 0) return timestampDelta;\n\t\treturn a.id.localeCompare(b.id);\n\t});\n}\n\nexport function buildComposerRunTimeline(\n\toptions: BuildComposerRunTimelineOptions,\n): ComposerRunTimelineResponse {\n\tconst generatedAt = options.generatedAt ?? new Date().toISOString();\n\tconst items: ComposerRunTimelineItem[] = [];\n\tconst entries = options.entries ?? [];\n\tconst messages = options.messages ?? [];\n\tconst pendingRequests = options.pendingRequests ?? [];\n\tconst context: TimelineBuildContext = {\n\t\ttoolRequests: new Map<string, TimelineToolRequest>(),\n\t};\n\n\tconst messageEntryCount = addEntryItems(\n\t\titems,\n\t\toptions.sessionId,\n\t\tentries,\n\t\tgeneratedAt,\n\t\tcontext,\n\t);\n\n\tif (messageEntryCount === 0) {\n\t\tfor (const [index, message] of messages.entries()) {\n\t\t\taddMessageItems(items, options.sessionId, message, {\n\t\t\t\tbaseId: `fallback-${index}`,\n\t\t\t\ttimestamp: normalizeTimestamp(\n\t\t\t\t\t(message as { timestamp?: unknown }).timestamp,\n\t\t\t\t\tgeneratedAt,\n\t\t\t\t),\n\t\t\t\tsource: \"local\",\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n\n\taddPendingRequestItems(\n\t\titems,\n\t\toptions.sessionId,\n\t\tpendingRequests,\n\t\tgeneratedAt,\n\t);\n\n\treturn {\n\t\tsessionId: options.sessionId,\n\t\tsource: \"local\",\n\t\tgeneratedAt,\n\t\tplatformBacked: false,\n\t\tpendingRequestCount: pendingRequests.length,\n\t\titems: sortItems(items),\n\t};\n}\n"]}
@@ -72,9 +72,39 @@ export declare const MAESTRO_BUS_EVENT_CATALOG: {
72
72
  export declare const MAESTRO_BUS_EVENT_TYPES: MaestroBusEventType[];
73
73
  export declare const MAESTRO_RELEASE_GATE_EVENT_CATEGORIES: readonly ["install", "session", "tool", "approval", "error", "artifact", "final-status"];
74
74
  export type MaestroReleaseGateEventCategory = (typeof MAESTRO_RELEASE_GATE_EVENT_CATEGORIES)[number];
75
+ export declare const MAESTRO_RELEASE_GATE_EVENT_SUBJECTS_BY_CATEGORY: {
76
+ readonly install: readonly [MaestroBusEventType.InstallCheckCompleted];
77
+ readonly session: readonly [MaestroBusEventType.SessionClosed];
78
+ readonly tool: readonly [MaestroBusEventType.ToolCallCompleted, MaestroBusEventType.ToolCallFailed];
79
+ readonly approval: readonly [MaestroBusEventType.ApprovalHit];
80
+ readonly error: readonly [MaestroBusEventType.ErrorCaptured];
81
+ readonly artifact: readonly [MaestroBusEventType.ArtifactCreated];
82
+ readonly "final-status": readonly [MaestroBusEventType.FinalStatusReported];
83
+ };
84
+ export declare const MAESTRO_RELEASE_GATE_EVENT_SUBJECTS: readonly MaestroBusEventType[];
85
+ export interface MaestroReleaseGateEventQuery {
86
+ categories: readonly MaestroReleaseGateEventCategory[];
87
+ dataSchemas: readonly string[];
88
+ platformConsumers: readonly string[];
89
+ protoAnyTypes: readonly string[];
90
+ subjects: readonly MaestroBusEventType[];
91
+ subjectsByCategory: Readonly<Record<MaestroReleaseGateEventCategory, readonly MaestroBusEventType[]>>;
92
+ }
93
+ export interface MaestroReleaseGateEventSubjectCategoryMismatch {
94
+ actualSubjects: readonly MaestroBusEventType[];
95
+ category: MaestroReleaseGateEventCategory;
96
+ expectedSubjects: readonly MaestroBusEventType[];
97
+ missingSubjects: readonly MaestroBusEventType[];
98
+ unexpectedSubjects: readonly MaestroBusEventType[];
99
+ }
75
100
  export declare function isMaestroBusEventType(value: string): value is MaestroBusEventType;
76
101
  export declare function getMaestroBusEventCatalogEntry(type: MaestroBusEventType): MaestroBusEventCatalogEntry;
77
102
  export declare function listMaestroBusEventCatalog(): readonly MaestroBusEventCatalogEntry[];
78
103
  export declare function listMaestroBusEventCatalogByCategory(category: MaestroBusEventCategory): readonly MaestroBusEventCatalogEntry[];
104
+ export declare function listMaestroReleaseGateEventCatalog(catalog?: readonly MaestroBusEventCatalogEntry[]): readonly MaestroBusEventCatalogEntry[];
79
105
  export declare function getMissingMaestroReleaseGateEventCategories(catalog?: readonly MaestroBusEventCatalogEntry[]): readonly MaestroReleaseGateEventCategory[];
106
+ export declare function getMissingMaestroReleaseGateConsumerCategories(catalog?: readonly MaestroBusEventCatalogEntry[]): readonly MaestroReleaseGateEventCategory[];
107
+ export declare function getUnexpectedMaestroReleaseGateEventSubjects(catalog?: readonly MaestroBusEventCatalogEntry[]): readonly MaestroBusEventType[];
108
+ export declare function getMismatchedMaestroReleaseGateEventSubjectCategories(catalog?: readonly MaestroBusEventCatalogEntry[]): readonly MaestroReleaseGateEventSubjectCategoryMismatch[];
109
+ export declare function buildMaestroReleaseGateEventQuery(catalog?: readonly MaestroBusEventCatalogEntry[]): MaestroReleaseGateEventQuery;
80
110
  //# sourceMappingURL=maestro-event-catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"maestro-event-catalog.d.ts","sourceRoot":"","sources":["../../src/telemetry/maestro-event-catalog.ts"],"names":[],"mappings":"AAAA,oBAAY,mBAAmB;IAC9B,cAAc,qCAAqC;IACnD,gBAAgB,uCAAuC;IACvD,cAAc,qCAAqC;IACnD,aAAa,oCAAoC;IACjD,qBAAqB,2CAA2C;IAChE,WAAW,gCAAgC;IAC3C,gBAAgB,qCAAqC;IACrD,aAAa,kCAAkC;IAC/C,iBAAiB,uCAAuC;IACxD,iBAAiB,uCAAuC;IACxD,cAAc,oCAAoC;IAClD,aAAa,kCAAkC;IAC/C,eAAe,oCAAoC;IACnD,mBAAmB,yCAAyC;IAC5D,qBAAqB,2CAA2C;IAChE,cAAc,mCAAmC;IACjD,YAAY,iCAAiC;IAC7C,cAAc,mCAAmC;IACjD,WAAW,gCAAgC;IAC3C,kBAAkB,uCAAuC;IACzD,eAAe,qCAAqC;IACpD,iBAAiB,uCAAuC;IACxD,eAAe,qCAAqC;IACpD,gBAAgB,sCAAsC;IACtD,aAAa,mCAAmC;IAChD,gBAAgB,sCAAsC;IACtD,eAAe,qCAAqC;IACpD,oBAAoB,0CAA0C;IAC9D,UAAU,+BAA+B;CACzC;AAED,MAAM,MAAM,uBAAuB,GAChC,SAAS,GACT,SAAS,GACT,OAAO,GACP,UAAU,GACV,QAAQ,GACR,MAAM,GACN,OAAO,GACP,UAAU,GACV,cAAc,GACd,QAAQ,GACR,WAAW,GACX,OAAO,GACP,KAAK,GACL,MAAM,CAAC;AAEV,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,EAAE,uBAAuB,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,IAAI,EAAE,mBAAmB,CAAC;CAC1B;AAoBD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuMuC,CAAC;AAE9E,eAAO,MAAM,uBAAuB,uBAAqC,CAAC;AAE1E,eAAO,MAAM,qCAAqC,0FAQK,CAAC;AAExD,MAAM,MAAM,+BAA+B,GAC1C,CAAC,OAAO,qCAAqC,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,MAAM,GACX,KAAK,IAAI,mBAAmB,CAE9B;AAED,wBAAgB,8BAA8B,CAC7C,IAAI,EAAE,mBAAmB,GACvB,2BAA2B,CAE7B;AAED,wBAAgB,0BAA0B,IAAI,SAAS,2BAA2B,EAAE,CAEnF;AAED,wBAAgB,oCAAoC,CACnD,QAAQ,EAAE,uBAAuB,GAC/B,SAAS,2BAA2B,EAAE,CAIxC;AAED,wBAAgB,2CAA2C,CAC1D,OAAO,GAAE,SAAS,2BAA2B,EAAiC,GAC5E,SAAS,+BAA+B,EAAE,CAK5C"}
1
+ {"version":3,"file":"maestro-event-catalog.d.ts","sourceRoot":"","sources":["../../src/telemetry/maestro-event-catalog.ts"],"names":[],"mappings":"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"}