@agenticprimitives/service-host 0.0.0-alpha.2 → 0.0.0-alpha.3

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 (45) hide show
  1. package/dist/host.d.ts +50 -0
  2. package/dist/host.d.ts.map +1 -0
  3. package/dist/host.js +36 -0
  4. package/dist/host.js.map +1 -0
  5. package/dist/index.d.ts +18 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +10 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/provenance-sink.d.ts +44 -0
  10. package/dist/provenance-sink.d.ts.map +1 -0
  11. package/dist/provenance-sink.js +89 -0
  12. package/dist/provenance-sink.js.map +1 -0
  13. package/dist/routes.d.ts +64 -0
  14. package/dist/routes.d.ts.map +1 -0
  15. package/dist/routes.js +173 -0
  16. package/dist/routes.js.map +1 -0
  17. package/dist/run.d.ts +110 -0
  18. package/dist/run.d.ts.map +1 -0
  19. package/dist/run.js +135 -0
  20. package/dist/run.js.map +1 -0
  21. package/dist/surface.d.ts +27 -0
  22. package/dist/surface.d.ts.map +1 -0
  23. package/dist/surface.js +76 -0
  24. package/dist/surface.js.map +1 -0
  25. package/dist/tools/external.d.ts +28 -0
  26. package/dist/tools/external.d.ts.map +1 -0
  27. package/dist/tools/external.js +75 -0
  28. package/dist/tools/external.js.map +1 -0
  29. package/dist/tools/find.d.ts +39 -0
  30. package/dist/tools/find.d.ts.map +1 -0
  31. package/dist/tools/find.js +95 -0
  32. package/dist/tools/find.js.map +1 -0
  33. package/dist/tools/index.d.ts +8 -0
  34. package/dist/tools/index.d.ts.map +1 -0
  35. package/dist/tools/index.js +5 -0
  36. package/dist/tools/index.js.map +1 -0
  37. package/dist/tools/inspect.d.ts +6 -0
  38. package/dist/tools/inspect.d.ts.map +1 -0
  39. package/dist/tools/inspect.js +43 -0
  40. package/dist/tools/inspect.js.map +1 -0
  41. package/dist/tools/invoke.d.ts +59 -0
  42. package/dist/tools/invoke.d.ts.map +1 -0
  43. package/dist/tools/invoke.js +92 -0
  44. package/dist/tools/invoke.js.map +1 -0
  45. package/package.json +4 -1
package/dist/host.d.ts ADDED
@@ -0,0 +1,50 @@
1
+ import type { Address } from '@agenticprimitives/types';
2
+ import type { ToolSpec, ToolInvoker, Planner, OrchestrationPorts } from '@agenticprimitives/orchestration';
3
+ import type { PlaybookView } from '@agenticprimitives/harness';
4
+ import type { Principal, StandardTaskStore } from '@agenticprimitives/a2a/standard';
5
+ import type { RunStore } from './run-store.js';
6
+ import { type AdmissionPorts, type AdmittedPrincipal } from './routes.js';
7
+ import { standardSurface } from './surface.js';
8
+ import type { TurnDeps } from './run.js';
9
+ import type { ProvenanceSinkDeps } from './provenance-sink.js';
10
+ export interface ServiceHostConfig {
11
+ /** The agent this host IS — read from the name's records by the app, never configured by hand twice. */
12
+ agent: Address;
13
+ /** The origin the surface is served at. */
14
+ origin: string;
15
+ /** The live card facts (name, description, skills from the definition, provider). */
16
+ card: Record<string, unknown>;
17
+ /** The playbook pinned by digest, loaded per request by the app (`loadPlaybook` through its record port), or fixed. */
18
+ playbook: (ctx: {
19
+ asker: AdmittedPrincipal;
20
+ }) => Promise<PlaybookView | null> | PlaybookView | null;
21
+ /** The tools this host offers before the playbook narrows them. */
22
+ tools: ReadonlyArray<ToolSpec>;
23
+ /** One invoker per tool id — the app's work; may depend on the asker (an engagement signs as them). */
24
+ invokers: (ctx: {
25
+ asker: AdmittedPrincipal;
26
+ }) => Readonly<Record<string, ToolInvoker>>;
27
+ /** The planner port; a deterministic service that only takes supplied plans may omit it. */
28
+ planner?: Planner;
29
+ /** Spec 350 — verifier · ladder · approvals · receipts · effects. */
30
+ ports?: Omit<OrchestrationPorts, 'events'>;
31
+ runStore: RunStore;
32
+ admission: AdmissionPorts;
33
+ /** The door's principal for `/api/a2a` (a wire-signed agent, a Home bearer). */
34
+ principal?: (request: Request) => Promise<Principal | null>;
35
+ /** A routed profile's forwarded credential, verified here as the receiver. */
36
+ verifyForwarded?: Parameters<typeof standardSurface>[0]['verifyForwarded'];
37
+ tasks?: StandardTaskStore;
38
+ provenance?: ProvenanceSinkDeps;
39
+ mayOversee?: (who: Address) => Promise<boolean>;
40
+ waitUntil?: (p: Promise<unknown>) => void;
41
+ /** The turn's words, composer, limits and clock. */
42
+ turn?: Pick<TurnDeps, 'say' | 'words' | 'maxSteps' | 'maxReplans' | 'now' | 'mandateRef' | 'newRunRef'>;
43
+ log?: (line: string) => void;
44
+ }
45
+ export interface ServiceHost {
46
+ /** The handler: `/health`, `/.well-known/agent-card.json`, `/api/a2a`, `/harness/*`; `null` for any other path. */
47
+ fetch(request: Request): Promise<Response | null>;
48
+ }
49
+ export declare function createServiceHost(config: ServiceHostConfig): ServiceHost;
50
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAiB,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,wGAAwG;IACxG,KAAK,EAAE,OAAO,CAAC;IACf,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,uHAAuH;IACvH,QAAQ,EAAE,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE,iBAAiB,CAAA;KAAE,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC;IACpG,mEAAmE;IACnE,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/B,uGAAuG;IACvG,QAAQ,EAAE,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE,iBAAiB,CAAA;KAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACvF,4FAA4F;IAC5F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IAC3C,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IAC1B,gFAAgF;IAChF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC5D,8EAA8E;IAC9E,eAAe,CAAC,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC3E,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC1C,oDAAoD;IACpD,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC;IACxG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,mHAAmH;IACnH,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CACnD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CA6BxE"}
package/dist/host.js ADDED
@@ -0,0 +1,36 @@
1
+ import { harnessRoutes } from './routes.js';
2
+ import { standardSurface } from './surface.js';
3
+ export function createServiceHost(config) {
4
+ const turnDeps = async (ctx) => ({
5
+ playbook: await config.playbook(ctx),
6
+ tools: config.tools,
7
+ invokers: config.invokers(ctx),
8
+ ...(config.planner ? { planner: config.planner } : {}),
9
+ ...(config.ports ? { ports: config.ports } : {}),
10
+ ...(config.log ? { log: config.log } : {}),
11
+ ...(config.turn ?? {}),
12
+ });
13
+ const surface = standardSurface({
14
+ agent: config.agent, card: config.card, origin: config.origin, runStore: config.runStore, turnDeps,
15
+ ...(config.principal ? { principal: config.principal } : {}), ...(config.admission.public ? { public: true } : {}),
16
+ ...(config.tasks ? { tasks: config.tasks } : {}), ...(config.verifyForwarded ? { verifyForwarded: config.verifyForwarded } : {}), ...(config.log ? { log: config.log } : {}),
17
+ });
18
+ const routes = {
19
+ agent: config.agent, admission: config.admission, runStore: config.runStore, turnDeps,
20
+ ...(config.provenance ? { provenance: config.provenance } : {}), ...(config.mayOversee ? { mayOversee: config.mayOversee } : {}),
21
+ ...(config.waitUntil ? { waitUntil: config.waitUntil } : {}), ...(config.log ? { log: config.log } : {}),
22
+ };
23
+ return {
24
+ async fetch(request) {
25
+ const path = new URL(request.url).pathname;
26
+ if (path === '/health')
27
+ return Response.json({ ok: true, agent: config.agent });
28
+ if (path === '/.well-known/agent-card.json')
29
+ return Response.json(surface.card());
30
+ if (path === '/api/a2a' || path.startsWith('/api/a2a/'))
31
+ return surface.handle(request);
32
+ return harnessRoutes(request, routes);
33
+ },
34
+ };
35
+ }
36
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_NAME: "@agenticprimitives/service-host";
2
- export declare const PACKAGE_STATUS: "w1-run-do";
2
+ export declare const PACKAGE_STATUS: "w1-host";
3
3
  export declare const SPEC_REF: "specs/433-service-apps-run-the-harness-service-host.md";
4
4
  export { mergeTurn, isExpired, expiryFor, liveRuns, completedStepsOf, canceledRecord, openRunOnThread, runStoreOver, AWAIT_WINDOW_MS, RUN_TTL_MS, } from './run-store.js';
5
5
  export type { HarnessRunCheckpointV1, SuspendedRunV1, SelectedOfferBindingV1, AwaitingKind, RunStore, RunStoreOp, RunStoreCall } from './run-store.js';
@@ -7,4 +7,21 @@ export { toolWords, progressLine, PROGRESS_TTL_MS, PROGRESS_MAX_LINES } from './
7
7
  export type { ProgressLineV1 } from './progress.js';
8
8
  export { runStorage, memoryRunKv, memoryRunStoreCall, RUN_KEY_PREFIX, PROGRESS_KEY_PREFIX, RECORD_KEY_PREFIX, BUDGET_KEY_PREFIX, ASSERTION_KEY_PREFIX, DEFAULT_RECORD_RETENTION_DAYS } from './storage.js';
9
9
  export type { RunKv, RunStorage, RunStorageResult, RunStorageOptions, DayCountersV1, RunRecordListingV1 } from './storage.js';
10
+ export { runTurn, suppliedPlanner, defaultSay } from './run.js';
11
+ export type { AskReplyEnvelopeV1, TurnInput, TurnDeps, TurnOutcome, TurnCredentialV1 } from './run.js';
12
+ export { exportRunProvenance, provenanceGraphOf, provenanceJsonLdOf, provenanceProvNOf, hasProvenanceRef, runAnchorRecordKey, runMeasuresRecordKey } from './provenance-sink.js';
13
+ export type { ProvenanceSinkDeps } from './provenance-sink.js';
14
+ export { admit, askRoute, runsRoute, recordsRoute, progressRoute, provenanceRoute, harnessRoutes } from './routes.js';
15
+ export type { AdmissionPorts, AdmittedPrincipal, HarnessRoutesDeps } from './routes.js';
16
+ export { standardSurface } from './surface.js';
17
+ export type { SurfaceDeps } from './surface.js';
18
+ export { createServiceHost } from './host.js';
19
+ export type { ServiceHostConfig, ServiceHost } from './host.js';
20
+ export { DISCOVERY_FIND_CAPABILITY, DISCOVERY_FIND_TOOL, planFind, discoveryFindInvoker } from './tools/find.js';
21
+ export type { ArdSearchBody, FoundAgent, FindDeps } from './tools/find.js';
22
+ export { DISCOVERY_INSPECT_CAPABILITY, DISCOVERY_INSPECT_TOOL, discoveryInspectInvoker } from './tools/inspect.js';
23
+ export { EXTERNAL_AGENT_CAPABILITY, EXTERNAL_AGENT_TOOL, TYPED_NAME, cardOfName, externalAgentInvoker } from './tools/external.js';
24
+ export type { ExternalAgentDeps, NameRecordsPort } from './tools/external.js';
25
+ export { ENGAGEMENT_INVOKE_CAPABILITY, ENGAGEMENT_INVOKE_TOOL, engagementInvokeInvoker, readSubjectReply } from './tools/invoke.js';
26
+ export type { InvokeDeps } from './tools/invoke.js';
10
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,EAAG,iCAA0C,CAAC;AACvE,eAAO,MAAM,cAAc,EAAG,WAAoB,CAAC;AACnD,eAAO,MAAM,QAAQ,EAAG,wDAAiE,CAAC;AAE1F,OAAO,EACL,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAC1G,eAAe,EAAE,UAAU,GAC5B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,sBAAsB,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEvJ,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7F,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC3M,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,EAAG,iCAA0C,CAAC;AACvE,eAAO,MAAM,cAAc,EAAG,SAAkB,CAAC;AACjD,eAAO,MAAM,QAAQ,EAAG,wDAAiE,CAAC;AAE1F,OAAO,EACL,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAC1G,eAAe,EAAE,UAAU,GAC5B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,sBAAsB,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEvJ,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7F,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC3M,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE9H,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAChE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACvG,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjL,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACtH,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACjH,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACnH,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACnI,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACpI,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,18 @@
1
1
  // @agenticprimitives/service-host — spec 433. The harness run pipeline a service agent embeds, promoted out of the
2
2
  // ap-home runtime in the census order (docs/architecture/service-host-census.md §8). W1 step 1: the run store.
3
3
  export const PACKAGE_NAME = '@agenticprimitives/service-host';
4
- export const PACKAGE_STATUS = 'w1-run-do';
4
+ export const PACKAGE_STATUS = 'w1-host';
5
5
  export const SPEC_REF = 'specs/433-service-apps-run-the-harness-service-host.md';
6
6
  export { mergeTurn, isExpired, expiryFor, liveRuns, completedStepsOf, canceledRecord, openRunOnThread, runStoreOver, AWAIT_WINDOW_MS, RUN_TTL_MS, } from './run-store.js';
7
7
  export { toolWords, progressLine, PROGRESS_TTL_MS, PROGRESS_MAX_LINES } from './progress.js';
8
8
  export { runStorage, memoryRunKv, memoryRunStoreCall, RUN_KEY_PREFIX, PROGRESS_KEY_PREFIX, RECORD_KEY_PREFIX, BUDGET_KEY_PREFIX, ASSERTION_KEY_PREFIX, DEFAULT_RECORD_RETENTION_DAYS } from './storage.js';
9
+ export { runTurn, suppliedPlanner, defaultSay } from './run.js';
10
+ export { exportRunProvenance, provenanceGraphOf, provenanceJsonLdOf, provenanceProvNOf, hasProvenanceRef, runAnchorRecordKey, runMeasuresRecordKey } from './provenance-sink.js';
11
+ export { admit, askRoute, runsRoute, recordsRoute, progressRoute, provenanceRoute, harnessRoutes } from './routes.js';
12
+ export { standardSurface } from './surface.js';
13
+ export { createServiceHost } from './host.js';
14
+ export { DISCOVERY_FIND_CAPABILITY, DISCOVERY_FIND_TOOL, planFind, discoveryFindInvoker } from './tools/find.js';
15
+ export { DISCOVERY_INSPECT_CAPABILITY, DISCOVERY_INSPECT_TOOL, discoveryInspectInvoker } from './tools/inspect.js';
16
+ export { EXTERNAL_AGENT_CAPABILITY, EXTERNAL_AGENT_TOOL, TYPED_NAME, cardOfName, externalAgentInvoker } from './tools/external.js';
17
+ export { ENGAGEMENT_INVOKE_CAPABILITY, ENGAGEMENT_INVOKE_TOOL, engagementInvokeInvoker, readSubjectReply } from './tools/invoke.js';
9
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,+GAA+G;AAC/G,MAAM,CAAC,MAAM,YAAY,GAAG,iCAA0C,CAAC;AACvE,MAAM,CAAC,MAAM,cAAc,GAAG,WAAoB,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,wDAAiE,CAAC;AAE1F,OAAO,EACL,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAC1G,eAAe,EAAE,UAAU,GAC5B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAG7F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,+GAA+G;AAC/G,MAAM,CAAC,MAAM,YAAY,GAAG,iCAA0C,CAAC;AACvE,MAAM,CAAC,MAAM,cAAc,GAAG,SAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,QAAQ,GAAG,wDAAiE,CAAC;AAE1F,OAAO,EACL,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAC1G,eAAe,EAAE,UAAU,GAC5B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAG7F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAG3M,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjL,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEtH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEjH,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACnH,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEnI,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { type RunRecordV1, type RunExportReportV1 } from '@agenticprimitives/orchestration';
2
+ import { type ProvenanceRecordV1, type ProvenanceStorePort } from '@agenticprimitives/provenance';
3
+ import type { Address, Hex } from '@agenticprimitives/types';
4
+ export declare const runAnchorRecordKey: (runRef: string) => string;
5
+ export declare const runMeasuresRecordKey: (runRef: string) => string;
6
+ export interface ProvenanceSinkDeps {
7
+ /** Where the record is KEPT — the agent's vault through its own door. Absent ⇒ not kept, and the report says so. */
8
+ store?: ProvenanceStorePort;
9
+ /** The published JSON-LD `@context` for a run's provenance (the ontology's `RUN_PROVENANCE_CONTEXT['@context']`). */
10
+ context: Record<string, unknown>;
11
+ /** The chain the agents live on, so the record names them the way the public KB does. */
12
+ chainId?: number;
13
+ /** Spec 410 §4.4 — the estate this host belongs to. */
14
+ estate?: string;
15
+ /** Spec 406 W2 — anchor the bundle's digest on chain; absent ⇒ not anchored, said. */
16
+ anchor?: (digest: Hex, intentDigest: Hex, mandateRef: Hex) => Promise<{
17
+ txHash: Hex;
18
+ registry: Address;
19
+ anchoredBy: Address;
20
+ chainId?: number;
21
+ }>;
22
+ /** Spec 414 A2 — the measurements beside the provenance (the evaluation package's `measureRun`); absent ⇒ none, said. */
23
+ measures?: (record: RunRecordV1, agent: string) => Promise<{
24
+ count: number;
25
+ doc: Record<string, unknown>;
26
+ }>;
27
+ /** The bundle's digest, for the anchor (a deployment's `bundleDigest`: keccak over the canonical bytes). */
28
+ bundleDigest?: (bundle: Record<string, unknown>) => Hex;
29
+ now?: () => number;
30
+ }
31
+ /** The PROV-O graph of a run record, as the projector makes it from the firewalled view. */
32
+ export declare function provenanceGraphOf(record: RunRecordV1, agent: string, opts?: Pick<ProvenanceSinkDeps, 'chainId' | 'estate'>): Promise<ProvenanceRecordV1>;
33
+ /** The JSON-LD document that lands in the vault — a stock PROV tool loads it unchanged. */
34
+ export declare function provenanceJsonLdOf(record: RunRecordV1, agent: string, deps: Pick<ProvenanceSinkDeps, 'chainId' | 'estate' | 'context'>): Promise<Record<string, unknown>>;
35
+ /** The same record as PROV-N, for a reader that wants text. */
36
+ export declare function provenanceProvNOf(record: RunRecordV1, agent: string, opts?: Pick<ProvenanceSinkDeps, 'chainId' | 'estate'>): Promise<string>;
37
+ /** A REFERENCE to a run's provenance, never the record: resolving it takes that agent's grant (ADR-0055). */
38
+ export declare function hasProvenanceRef(agent: string, runRef: string): {
39
+ agent: string;
40
+ recordType: string;
41
+ };
42
+ /** Export one finished run: the provenance to the vault, the anchor citation beside it, the measurements. */
43
+ export declare function exportRunProvenance(record: RunRecordV1, agent: string, deps: ProvenanceSinkDeps): Promise<RunExportReportV1>;
44
+ //# sourceMappingURL=provenance-sink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance-sink.d.ts","sourceRoot":"","sources":["../src/provenance-sink.ts"],"names":[],"mappings":"AASA,OAAO,EAAwC,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAClI,OAAO,EAAkD,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAElJ,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE7D,eAAO,MAAM,kBAAkB,WAAY,MAAM,KAAG,MAAgC,CAAC;AACrF,eAAO,MAAM,oBAAoB,WAAY,MAAM,KAAG,MAAkC,CAAC;AAEzF,MAAM,WAAW,kBAAkB;IACjC,oHAAoH;IACpH,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,qHAAqH;IACrH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjJ,yHAAyH;IACzH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC5G,4GAA4G;IAC5G,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;IACxD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAID,4FAA4F;AAC5F,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,QAAQ,CAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAGlK;AAED,2FAA2F;AAC3F,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAG/K;AAED,+DAA+D;AAC/D,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,QAAQ,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEtJ;AAED,6GAA6G;AAC7G,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAErG;AAED,6GAA6G;AAC7G,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoClI"}
@@ -0,0 +1,89 @@
1
+ // THE RECORD — spec 433 W1 step 4 (census §3), promoted from the ap-home runtime's `run-export.ts`. A finished run's
2
+ // durable half goes into the vault of the agent whose authority was spent, through ITS door, under ITS grant (ADR-0055):
3
+ // `run.provenance:<runRef>` as the JSON-LD PROV-O / P-Plan bundle the Ring-0 projector makes (spec 389), the digest's
4
+ // anchor citation beside it when a chain anchor is bound (spec 406 W2), and the run's measurements when a measurer is
5
+ // bound (spec 414 A2). Off the run's path: a failed export is said on the report, never a failed ask.
6
+ //
7
+ // Every projection here is a package's already — orchestration's `provenanceOf` (the structural view: digests,
8
+ // verdicts, the chain by reference; never arguments, results or words), provenance's `projectHarnessRunProvenance` +
9
+ // `toJsonLd`. This module is the glue: the view, the record keys, the ports, the report.
10
+ import { provenanceOf, runProvenanceRecordKey } from '@agenticprimitives/orchestration';
11
+ import { projectHarnessRunProvenance, toJsonLd, toProvN } from '@agenticprimitives/provenance';
12
+ import { intentDigest } from '@agenticprimitives/delegation';
13
+ export const runAnchorRecordKey = (runRef) => `run.anchor:${runRef}`;
14
+ export const runMeasuresRecordKey = (runRef) => `run.measures:${runRef}`;
15
+ const ZERO32 = `0x${'0'.repeat(64)}`;
16
+ /** The PROV-O graph of a run record, as the projector makes it from the firewalled view. */
17
+ export async function provenanceGraphOf(record, agent, opts = {}) {
18
+ const view = await provenanceOf(record, agent);
19
+ return projectHarnessRunProvenance({ ...view, ...(opts.chainId ? { chainId: opts.chainId } : {}), ...(opts.estate ? { estate: opts.estate } : {}) });
20
+ }
21
+ /** The JSON-LD document that lands in the vault — a stock PROV tool loads it unchanged. */
22
+ export async function provenanceJsonLdOf(record, agent, deps) {
23
+ const graph = await provenanceGraphOf(record, agent, deps);
24
+ return toJsonLd(graph, { context: deps.context, ...(deps.chainId ? { chainId: deps.chainId } : {}) });
25
+ }
26
+ /** The same record as PROV-N, for a reader that wants text. */
27
+ export async function provenanceProvNOf(record, agent, opts = {}) {
28
+ return toProvN(await provenanceGraphOf(record, agent, opts), opts.chainId ? { chainId: opts.chainId } : {});
29
+ }
30
+ /** A REFERENCE to a run's provenance, never the record: resolving it takes that agent's grant (ADR-0055). */
31
+ export function hasProvenanceRef(agent, runRef) {
32
+ return { agent: agent.toLowerCase(), recordType: runProvenanceRecordKey(runRef) };
33
+ }
34
+ /** Export one finished run: the provenance to the vault, the anchor citation beside it, the measurements. */
35
+ export async function exportRunProvenance(record, agent, deps) {
36
+ const now = deps.now ?? Date.now;
37
+ const recordType = runProvenanceRecordKey(record.runRef);
38
+ const report = { at: now(), provenance: { written: false, recordType }, spans: { count: 0, sent: false } };
39
+ let doc = null;
40
+ if (deps.store) {
41
+ try {
42
+ doc = await provenanceJsonLdOf(record, agent, deps);
43
+ const out = await deps.store.put({ agent, key: recordType }, doc);
44
+ report.provenance.written = out.ok;
45
+ if (!out.ok)
46
+ report.provenance.error = out.error;
47
+ }
48
+ catch (e) {
49
+ report.provenance.error = e instanceof Error ? e.message : String(e);
50
+ }
51
+ }
52
+ else
53
+ report.provenance.error = 'no vault write door';
54
+ if (deps.anchor && deps.bundleDigest) {
55
+ try {
56
+ const digest = deps.bundleDigest(doc ?? (await provenanceJsonLdOf(record, agent, deps)));
57
+ const mandateRef = record.presented?.[0]?.ref ?? ZERO32;
58
+ const out = await deps.anchor(digest, intentDigest(record.intent), /^0x[0-9a-f]{64}$/i.test(mandateRef) ? mandateRef : ZERO32);
59
+ report.anchor = { digest, registry: out.registry, anchoredBy: out.anchoredBy, txHash: out.txHash, ...(out.chainId ? { chainId: out.chainId } : {}) };
60
+ if (deps.store) {
61
+ const key = runAnchorRecordKey(record.runRef);
62
+ const cite = { runRef: record.runRef, digest, registry: out.chainId ? `eip155:${out.chainId}:${out.registry}` : out.registry, anchoredBy: out.anchoredBy, txHash: out.txHash, ...(deps.estate ? { estate: deps.estate } : {}) };
63
+ try {
64
+ const w = await deps.store.put({ agent, key }, cite);
65
+ report.anchorRecord = { written: w.ok, recordType: key, ...(!w.ok ? { error: w.error } : {}) };
66
+ }
67
+ catch (e) {
68
+ report.anchorRecord = { written: false, recordType: key, error: e instanceof Error ? e.message : String(e) };
69
+ }
70
+ }
71
+ }
72
+ catch (e) {
73
+ report.anchor = { error: e instanceof Error ? e.message : String(e) };
74
+ }
75
+ }
76
+ if (deps.store && deps.measures) {
77
+ const key = runMeasuresRecordKey(record.runRef);
78
+ try {
79
+ const { count, doc: m } = await deps.measures(record, agent);
80
+ const w = await deps.store.put({ agent, key }, m);
81
+ report.measures = { written: w.ok, recordType: key, count, ...(!w.ok ? { error: w.error } : {}) };
82
+ }
83
+ catch (e) {
84
+ report.measures = { written: false, recordType: key, count: 0, error: e instanceof Error ? e.message : String(e) };
85
+ }
86
+ }
87
+ return report;
88
+ }
89
+ //# sourceMappingURL=provenance-sink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance-sink.js","sourceRoot":"","sources":["../src/provenance-sink.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import type { Address } from '@agenticprimitives/types';
2
+ import type { RunStore } from './run-store.js';
3
+ import { type TurnDeps, type TurnCredentialV1 } from './run.js';
4
+ import { type ProvenanceSinkDeps } from './provenance-sink.js';
5
+ export interface AdmittedPrincipal {
6
+ agent: Address;
7
+ credential: TurnCredentialV1;
8
+ }
9
+ export interface AdmissionPorts {
10
+ /** A Home session bearer → the person, or null. */
11
+ bearer?: (token: string) => Promise<{
12
+ agent: Address;
13
+ } | null>;
14
+ /** An `A2A-Session` request (the raw body is what the assertion hashed) → the person it acts for, or null. */
15
+ wire?: (request: Request, raw: string) => Promise<{
16
+ agent: Address;
17
+ } | null>;
18
+ /** The surface answers strangers (reads only; every act still parks). Default false — fail closed. */
19
+ public?: boolean;
20
+ }
21
+ export interface HarnessRoutesDeps {
22
+ /** The agent this host IS. */
23
+ agent: Address;
24
+ admission: AdmissionPorts;
25
+ runStore: RunStore;
26
+ /** Everything the turn needs but the input (playbook, tools, invokers, planner, ports, …). May depend on the asker. */
27
+ turnDeps: (ctx: {
28
+ asker: AdmittedPrincipal;
29
+ raw: string;
30
+ }) => Promise<Omit<TurnDeps, 'runStore'>> | Omit<TurnDeps, 'runStore'>;
31
+ /** Where a finished run's provenance goes (absent ⇒ runs are recorded on the object only, and the reply says so). */
32
+ provenance?: ProvenanceSinkDeps;
33
+ /** Who may see a run beside its asker — the agent's steward(s). Default: only the asker. */
34
+ mayOversee?: (who: Address) => Promise<boolean>;
35
+ /** Fire-and-forget work the platform should keep alive (Cloudflare `waitUntil`). */
36
+ waitUntil?: (p: Promise<unknown>) => void;
37
+ log?: (line: string) => void;
38
+ }
39
+ /** WHO IS ASKING — the one order, no fallback between mechanisms (ADR-0013): an `A2A-Session` header is judged as a wire
40
+ * and never as a session; a `session` in the body is judged as a session; neither ⇒ public or refused. */
41
+ export declare function admit(request: Request, raw: string, body: {
42
+ session?: string;
43
+ } | null, ports: AdmissionPorts, self: Address): Promise<{
44
+ ok: true;
45
+ who: AdmittedPrincipal;
46
+ } | {
47
+ ok: false;
48
+ status: number;
49
+ error: string;
50
+ }>;
51
+ /** `/harness/ask` — one turn. Also `/harness/run` (POST: the same, kept for callers that name it so). */
52
+ export declare function askRoute(request: Request, deps: HarnessRoutesDeps): Promise<Response>;
53
+ /** `/harness/runs` — the unfinished runs this person may pick up: their own; every run when they oversee the agent. */
54
+ export declare function runsRoute(request: Request, deps: HarnessRoutesDeps): Promise<Response>;
55
+ /** `/harness/records` — what this agent did (a week), listed without mandates; `/harness/run` GET-shaped read of one. */
56
+ export declare function recordsRoute(request: Request, deps: HarnessRoutesDeps): Promise<Response>;
57
+ /** `/harness/progress` — the run's lines after `after`, for the asker only (the store gates it). */
58
+ export declare function progressRoute(request: Request, deps: HarnessRoutesDeps): Promise<Response>;
59
+ /** `/harness/provenance` — the run's PROV-O record, projected from the record this object holds (the vault copy is the
60
+ * document of record; this is the same projection, served to whoever may see the run). */
61
+ export declare function provenanceRoute(request: Request, deps: HarnessRoutesDeps): Promise<Response>;
62
+ /** The whole `/harness/*` surface as one handler; `null` for any other path so the host's router continues. */
63
+ export declare function harnessRoutes(request: Request, deps: HarnessRoutesDeps): Promise<Response | null>;
64
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
package/dist/routes.js ADDED
@@ -0,0 +1,173 @@
1
+ import { traceContextOf } from '@agenticprimitives/orchestration';
2
+ import { runTurn } from './run.js';
3
+ import { exportRunProvenance, provenanceJsonLdOf, hasProvenanceRef } from './provenance-sink.js';
4
+ import { isExpired } from './run-store.js';
5
+ import { projectRunState } from '@agenticprimitives/harness';
6
+ const json = (b, status = 200) => Response.json(b, { status });
7
+ const lower = (a) => (typeof a === 'string' && /^0x[0-9a-fA-F]{40}$/.test(a) ? a.toLowerCase() : null);
8
+ /** WHO IS ASKING — the one order, no fallback between mechanisms (ADR-0013): an `A2A-Session` header is judged as a wire
9
+ * and never as a session; a `session` in the body is judged as a session; neither ⇒ public or refused. */
10
+ export async function admit(request, raw, body, ports, self) {
11
+ const auth = request.headers.get('authorization') ?? '';
12
+ if (/^A2A-Session\s/i.test(auth)) {
13
+ if (!ports.wire)
14
+ return { ok: false, status: 401, error: 'this host admits no app delegation' };
15
+ const p = await ports.wire(request, raw).catch(() => null);
16
+ return p ? { ok: true, who: { agent: p.agent.toLowerCase(), credential: { kind: 'app-delegation', authorization: auth, body: raw } } } : { ok: false, status: 401, error: 'the app delegation did not verify' };
17
+ }
18
+ if (body?.session) {
19
+ if (!ports.bearer)
20
+ return { ok: false, status: 401, error: 'this host admits no Home session' };
21
+ const p = await ports.bearer(String(body.session)).catch(() => null);
22
+ return p ? { ok: true, who: { agent: p.agent.toLowerCase(), credential: { kind: 'home-session' } } } : { ok: false, status: 401, error: 'the session did not verify' };
23
+ }
24
+ if (ports.public)
25
+ return { ok: true, who: { agent: self, credential: { kind: 'public' } } };
26
+ return { ok: false, status: 400, error: 'session (or an A2A-Session app delegation) is required' };
27
+ }
28
+ /** `/harness/ask` — one turn. Also `/harness/run` (POST: the same, kept for callers that name it so). */
29
+ export async function askRoute(request, deps) {
30
+ const receivedAt = Date.now();
31
+ const raw = await request.text();
32
+ const body = (() => { try {
33
+ return JSON.parse(raw);
34
+ }
35
+ catch {
36
+ return null;
37
+ } })();
38
+ if (!body)
39
+ return json({ ok: false, error: 'a JSON body is required' }, 400);
40
+ const addressee = lower(body.addressee) ?? deps.agent;
41
+ if (addressee !== deps.agent)
42
+ return json({ ok: false, error: `this host answers for ${deps.agent}, not ${String(body.addressee)}` }, 404);
43
+ const message = String(body.message ?? '').trim();
44
+ const runRef = typeof body.runRef === 'string' && body.runRef ? body.runRef : undefined;
45
+ if (!message && !runRef)
46
+ return json({ ok: false, error: 'message is required' }, 400);
47
+ const a = await admit(request, raw, body, deps.admission, deps.agent);
48
+ if (!a.ok)
49
+ return json({ ok: false, error: a.error }, a.status);
50
+ const input = {
51
+ agent: deps.agent, asker: a.who.agent, credential: a.who.credential, message,
52
+ ...(body.intent && typeof body.intent === 'object' ? { intent: body.intent } : {}),
53
+ ...(body.plan && typeof body.plan === 'object' ? { plan: body.plan } : {}),
54
+ ...(body.presented !== undefined ? { presented: body.presented } : {}),
55
+ ...(Array.isArray(body.supplied) ? { supplied: body.supplied } : {}),
56
+ ...(runRef ? { runRef } : {}),
57
+ traceContext: traceContextOf(request.headers) ?? null, receivedAt,
58
+ };
59
+ const turnDeps = await deps.turnDeps({ asker: a.who, raw });
60
+ const out = await runTurn(input, { ...turnDeps, runStore: deps.runStore });
61
+ // The durable half, off the run's path: provenance into the agent's vault; the report back onto the record.
62
+ if (out.record && deps.provenance) {
63
+ const rec = out.record;
64
+ const exported = exportRunProvenance(rec, deps.agent, deps.provenance)
65
+ .then((report) => deps.runStore.putRecord(deps.agent, { ...rec, export: report }))
66
+ .catch((e) => deps.log?.(`[harness/ask] export failed: ${e instanceof Error ? e.message : String(e)}`));
67
+ if (deps.waitUntil)
68
+ deps.waitUntil(exported);
69
+ else
70
+ await exported;
71
+ }
72
+ const envelope = { ...out.envelope, ...(out.record && deps.provenance?.store ? { hasProvenance: hasProvenanceRef(deps.agent, out.runRef) } : {}) };
73
+ return json(envelope, out.envelope.ok ? 200 : 200);
74
+ }
75
+ /** The read routes share one admission: the asker, or a steward of the agent, sees the agent's runs. */
76
+ async function reader(request, deps) {
77
+ const raw = await request.text();
78
+ const body = (() => { try {
79
+ return JSON.parse(raw);
80
+ }
81
+ catch {
82
+ return null;
83
+ } })();
84
+ const a = await admit(request, raw, (body ?? {}), { ...deps.admission, public: false }, deps.agent);
85
+ if (!a.ok)
86
+ return a;
87
+ return { ok: true, who: a.who.agent, raw, body: body ?? {} };
88
+ }
89
+ /** `/harness/runs` — the unfinished runs this person may pick up: their own; every run when they oversee the agent. */
90
+ export async function runsRoute(request, deps) {
91
+ const r = await reader(request, deps);
92
+ if (!r.ok)
93
+ return json({ ok: false, error: r.error }, r.status);
94
+ const oversees = r.who === deps.agent || (await deps.mayOversee?.(r.who).catch(() => false)) === true;
95
+ const now = Date.now();
96
+ const runs = (await deps.runStore.list(deps.agent)).filter((x) => oversees || x.asker.toLowerCase() === r.who)
97
+ .map((x) => ({ ...x, expired: isExpired(x, now), state: projectRunState({ kind: 'suspended', awaiting: x.awaiting?.kind, expired: isExpired(x, now) }).state }));
98
+ return json({ ok: true, runs });
99
+ }
100
+ /** `/harness/records` — what this agent did (a week), listed without mandates; `/harness/run` GET-shaped read of one. */
101
+ export async function recordsRoute(request, deps) {
102
+ const r = await reader(request, deps);
103
+ if (!r.ok)
104
+ return json({ ok: false, error: r.error }, r.status);
105
+ const oversees = r.who === deps.agent || (await deps.mayOversee?.(r.who).catch(() => false)) === true;
106
+ if (typeof r.body.runRef === 'string' && r.body.runRef) {
107
+ const rec = await deps.runStore.getRecord(deps.agent, r.body.runRef);
108
+ if (!rec)
109
+ return json({ ok: false, error: 'no such run here' }, 404);
110
+ const asker = String(rec.asker ?? rec.intent?.context?.asker ?? '').toLowerCase();
111
+ if (!oversees && asker && asker !== r.who)
112
+ return json({ ok: false, error: 'no such run here' }, 404);
113
+ const { presented: _p, ...safe } = rec;
114
+ return json({ ok: true, record: safe });
115
+ }
116
+ const { records, retention } = await deps.runStore.listRecords(deps.agent, { full: r.body.full === true });
117
+ return json({ ok: true, records: oversees ? records : records.filter((x) => String(x.asker ?? '').toLowerCase() === r.who), retention });
118
+ }
119
+ /** `/harness/progress` — the run's lines after `after`, for the asker only (the store gates it). */
120
+ export async function progressRoute(request, deps) {
121
+ const r = await reader(request, deps);
122
+ if (!r.ok)
123
+ return json({ ok: false, error: r.error }, r.status);
124
+ const runRef = String(r.body.runRef ?? '');
125
+ if (!runRef)
126
+ return json({ ok: false, error: 'runRef is required' }, 400);
127
+ try {
128
+ const out = await deps.runStore.readProgress(deps.agent, runRef, r.who, Number(r.body.after ?? 0));
129
+ return json({ ok: true, ...out });
130
+ }
131
+ catch (e) {
132
+ return json({ ok: false, error: e instanceof Error ? e.message : String(e) }, 403);
133
+ }
134
+ }
135
+ /** `/harness/provenance` — the run's PROV-O record, projected from the record this object holds (the vault copy is the
136
+ * document of record; this is the same projection, served to whoever may see the run). */
137
+ export async function provenanceRoute(request, deps) {
138
+ const r = await reader(request, deps);
139
+ if (!r.ok)
140
+ return json({ ok: false, error: r.error }, r.status);
141
+ const runRef = String(r.body.runRef ?? '');
142
+ if (!runRef)
143
+ return json({ ok: false, error: 'runRef is required' }, 400);
144
+ const rec = await deps.runStore.getRecord(deps.agent, runRef);
145
+ if (!rec)
146
+ return json({ ok: false, error: 'no such run here' }, 404);
147
+ const oversees = r.who === deps.agent || (await deps.mayOversee?.(r.who).catch(() => false)) === true;
148
+ const asker = String(rec.asker ?? '').toLowerCase();
149
+ if (!oversees && asker && asker !== r.who)
150
+ return json({ ok: false, error: 'no such run here' }, 404);
151
+ if (!deps.provenance)
152
+ return json({ ok: false, error: 'this host projects no provenance' }, 503);
153
+ const doc = await provenanceJsonLdOf(rec, deps.agent, deps.provenance);
154
+ return json({ ok: true, hasProvenance: hasProvenanceRef(deps.agent, runRef), provenance: doc, export: rec.export ?? null });
155
+ }
156
+ /** The whole `/harness/*` surface as one handler; `null` for any other path so the host's router continues. */
157
+ export async function harnessRoutes(request, deps) {
158
+ const path = new URL(request.url).pathname;
159
+ if (!path.startsWith('/harness/'))
160
+ return null;
161
+ if (request.method !== 'POST')
162
+ return json({ ok: false, error: 'POST' }, 405);
163
+ switch (path) {
164
+ case '/harness/ask':
165
+ case '/harness/run': return askRoute(request, deps);
166
+ case '/harness/runs': return runsRoute(request, deps);
167
+ case '/harness/records': return recordsRoute(request, deps);
168
+ case '/harness/progress': return progressRoute(request, deps);
169
+ case '/harness/provenance': return provenanceRoute(request, deps);
170
+ default: return json({ ok: false, error: `no such route: ${path}` }, 404);
171
+ }
172
+ }
173
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,OAAO,EAAE,OAAO,EAAiF,MAAM,UAAU,CAAC;AAClH,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,gBAAgB,EAA2B,MAAM,sBAAsB,CAAC;AAC1H,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AA6B7D,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,MAAM,GAAG,GAAG,EAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAClF,MAAM,KAAK,GAAG,CAAC,CAAU,EAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,WAAW,EAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAE7I;2GAC2G;AAC3G,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAgB,EAAE,GAAW,EAAE,IAAiC,EAAE,KAAqB,EAAE,IAAa;IAChI,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IACxD,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;QAChG,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAa,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;IAC7N,CAAC;IACD,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;QAChG,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAa,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IACpL,CAAC;IACD,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC5F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,wDAAwD,EAAE,CAAC;AACrG,CAAC;AAED,yGAAyG;AACzG,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAgB,EAAE,IAAuB;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,CAAC,GAAmC,EAAE,GAAG,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClH,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;IACtD,IAAI,SAAS,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,IAAI,CAAC,KAAK,SAAS,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3I,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,GAAG,CAAC,CAAC;IACvF,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,IAA4B,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9F,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,KAAK,GAAc;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO;QAC5E,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAyD,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtH,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAA6B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,YAAY,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,UAAU;KAClE,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3E,4GAA4G;IAC5G,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;QACvB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;aACnE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;aACjF,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,gCAAgC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1G,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;;YAAM,MAAM,QAAQ,CAAC;IACpE,CAAC;IACD,MAAM,QAAQ,GAAiF,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACjO,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,wGAAwG;AACxG,KAAK,UAAU,MAAM,CAAC,OAAgB,EAAE,IAAuB;IAC7D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,CAAC,GAAmC,EAAE,GAAG,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClH,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAyB,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5H,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC;IACpB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;AAC/D,CAAC;AAED,uHAAuH;AACvH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAgB,EAAE,IAAuB;IACvE,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC;IACtG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC;SAC3G,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnK,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,yHAAyH;AACzH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAgB,EAAE,IAAuB;IAC1E,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC;IACtG,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,MAAM,CAAE,GAA0B,CAAC,KAAK,IAAK,GAAG,CAAC,MAA2C,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAChJ,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC;QACtG,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;QACvC,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;IAC3G,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAE,CAAwB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AACnK,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAgB,EAAE,IAAuB;IAC3E,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;IAC1E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;QACnG,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAAC,CAAC;AACrG,CAAC;AAED;2FAC2F;AAC3F,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAgB,EAAE,IAAuB;IAC7E,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC;IACtG,MAAM,KAAK,GAAG,MAAM,CAAE,GAA0B,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5E,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC;IACtG,IAAI,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,EAAE,GAAG,CAAC,CAAC;IACjG,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAG,GAA4B,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;AACxJ,CAAC;AAED,+GAA+G;AAC/G,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAgB,EAAE,IAAuB;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9E,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,cAAc,CAAC;QAAC,KAAK,cAAc,CAAC,CAAC,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzE,KAAK,eAAe,CAAC,CAAC,OAAO,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtD,KAAK,kBAAkB,CAAC,CAAC,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5D,KAAK,mBAAmB,CAAC,CAAC,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9D,KAAK,qBAAqB,CAAC,CAAC,OAAO,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC"}