@agenticprimitives/service-host 0.0.0-alpha.27 → 0.0.0-alpha.29

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 (56) hide show
  1. package/README.md +11 -0
  2. package/dist/host.d.ts +5 -2
  3. package/dist/host.d.ts.map +1 -1
  4. package/dist/host.js +1 -0
  5. package/dist/host.js.map +1 -1
  6. package/dist/index.d.ts +8 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +5 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/keyring.d.ts +16 -0
  11. package/dist/keyring.d.ts.map +1 -0
  12. package/dist/keyring.js +45 -0
  13. package/dist/keyring.js.map +1 -0
  14. package/dist/principal.d.ts +30 -0
  15. package/dist/principal.d.ts.map +1 -0
  16. package/dist/principal.js +41 -0
  17. package/dist/principal.js.map +1 -0
  18. package/dist/routes.d.ts +10 -1
  19. package/dist/routes.d.ts.map +1 -1
  20. package/dist/routes.js +40 -14
  21. package/dist/routes.js.map +1 -1
  22. package/dist/run-store.d.ts +4 -1
  23. package/dist/run-store.d.ts.map +1 -1
  24. package/dist/run-store.js.map +1 -1
  25. package/dist/run.d.ts +26 -8
  26. package/dist/run.d.ts.map +1 -1
  27. package/dist/run.js +112 -22
  28. package/dist/run.js.map +1 -1
  29. package/dist/storage.d.ts +7 -1
  30. package/dist/storage.d.ts.map +1 -1
  31. package/dist/storage.js +38 -3
  32. package/dist/storage.js.map +1 -1
  33. package/dist/surface.d.ts.map +1 -1
  34. package/dist/surface.js +16 -10
  35. package/dist/surface.js.map +1 -1
  36. package/dist/tools/external.d.ts +18 -0
  37. package/dist/tools/external.d.ts.map +1 -1
  38. package/dist/tools/external.js +23 -6
  39. package/dist/tools/external.js.map +1 -1
  40. package/dist/tools/inspect.d.ts +1 -1
  41. package/dist/tools/inspect.d.ts.map +1 -1
  42. package/dist/tools/inspect.js +17 -4
  43. package/dist/tools/inspect.js.map +1 -1
  44. package/dist/tools/invoke.d.ts +11 -3
  45. package/dist/tools/invoke.d.ts.map +1 -1
  46. package/dist/tools/invoke.js +35 -8
  47. package/dist/tools/invoke.js.map +1 -1
  48. package/dist/tools/outbound.d.ts +43 -0
  49. package/dist/tools/outbound.d.ts.map +1 -0
  50. package/dist/tools/outbound.js +93 -0
  51. package/dist/tools/outbound.js.map +1 -0
  52. package/dist/wire-admission.d.ts +7 -1
  53. package/dist/wire-admission.d.ts.map +1 -1
  54. package/dist/wire-admission.js +3 -0
  55. package/dist/wire-admission.js.map +1 -1
  56. package/package.json +7 -7
@@ -0,0 +1,93 @@
1
+ // OUTBOUND CONTAINMENT — spec 445 W0 (audit 2026-11-10, RUN-4). `external.agent.ask` and `engagement.agent.invoke` send
2
+ // words to ANOTHER PARTY. Both are informational (no capability, no mandate), so once a run has read untrusted content —
3
+ // a tool result, another agent's reply, a message someone else wrote — nothing but prompt wording stopped that content
4
+ // from steering an outbound call that carries private-tier text to a host of its author's choosing. Containment is
5
+ // mechanical here, at the point of use, in three parts:
6
+ // (a) `neutraliseDataDelimiters` — untrusted text can no longer close the `<data>…</data>` frame a continuation
7
+ // prompt puts it in (the frame is built in orchestration's `renderContinuation`; this package builds none, so the
8
+ // text is neutralised where this package PRODUCES and RELAYS it: the two tools' own results and every
9
+ // untrusted-labelled result that passes through `runTurn`'s invoke wrapper);
10
+ // (b) `guardOutbound` — after untrusted content, an outbound cross-party call needs an EXPLICIT decision. The capability
11
+ // contract model has no "disclose to an external party" requirement type (`SkillExecutionContractV1`), so the call
12
+ // PARKS for the person's confirmation through the loop's own parking mechanism (`InputRequired`, kind
13
+ // `confirmation`) and runs only when the resume carries a confirmation BOUND to exactly what would be sent
14
+ // (`disclosureDigest` over the party and the outgoing arguments). A host may bind `OutboundDisclosurePort` to decide
15
+ // otherwise (a derivation rule, a standing policy); the default parks, and parks when the signal is unavailable;
16
+ // (c) what leaves is the step's own arguments — never the conversation, the intent or earlier results.
17
+ // A confirmation is an INPUT from the run's owner, never authority: the tools still spend none.
18
+ import { InputRequired, outboundDigest } from '@agenticprimitives/orchestration';
19
+ /** The safe default: silent only when the run is KNOWN to have read nothing untrusted; otherwise it parks. */
20
+ export const defaultOutboundDisclosure = (request) => (request.untrustedSeen === false ? 'allow' : 'park');
21
+ const canonical = (v) => {
22
+ if (v === null || typeof v !== 'object')
23
+ return JSON.stringify(v) ?? 'null';
24
+ if (Array.isArray(v))
25
+ return `[${v.map(canonical).join(',')}]`;
26
+ return `{${Object.keys(v).sort().map((k) => `${JSON.stringify(k)}:${canonical(v[k])}`).join(',')}}`;
27
+ };
28
+ /** The digest a confirmation is bound to: a `yes` to one disclosure is not a `yes` to another. */
29
+ export async function disclosureDigest(input) {
30
+ const bytes = new TextEncoder().encode(canonical({ party: input.party, sends: input.sends, toolId: input.toolId }));
31
+ const hash = new Uint8Array(await crypto.subtle.digest('SHA-256', bytes));
32
+ return `0x${[...hash].map((b) => b.toString(16).padStart(2, '0')).join('')}`;
33
+ }
34
+ /**
35
+ * The gate every outbound tool passes BEFORE any byte leaves (the card fetch included — a URL can carry data).
36
+ * Returns `null` to proceed, `{ refused }` when the decision or the person said no; THROWS `InputRequired` to park.
37
+ */
38
+ export async function guardOutbound(ctx, toolId, party, sends, decide = defaultOutboundDisclosure,
39
+ /** The step's arguments exactly as the loop resolved them — what the LOOP's outbound gate (orchestration
40
+ * `ToolSpec.outbound`, spec 445 decision 8) bound the person's confirmation to (`outboundDigest`). */
41
+ stepArgs) {
42
+ const stepRef = ctx?.step?.id ?? `s${Number(ctx?.index ?? 0) + 1}`;
43
+ const digest = await disclosureDigest({ toolId, party, sends });
44
+ const untrustedSeen = typeof ctx?.untrustedSeen === 'boolean' ? ctx.untrustedSeen : undefined;
45
+ let decision;
46
+ try {
47
+ decision = await decide({ toolId, stepRef, party, sends, untrustedSeen, goal: String(ctx?.intent?.goal ?? ''), digest });
48
+ }
49
+ catch {
50
+ decision = 'park';
51
+ }
52
+ if (decision === 'allow')
53
+ return null;
54
+ if (decision === 'refuse')
55
+ return { refused: `nothing was sent to ${party}: this run has read content written by others, and sending to an outside party after that is not permitted here` };
56
+ // Spec 445 decision 8 — DEFENCE IN DEPTH BESIDE THE LOOP. The tool is declared `outbound` on its ToolSpec, so the loop
57
+ // parks it first and confirms the person's answer against `outboundDigest(toolId, args)`. That confirmation, recomputed
58
+ // here over these exact arguments, is the same decision — accepted, not asked twice under a second digest.
59
+ if (ctx?.outboundConfirmed && stepArgs && ctx.outboundConfirmed === (await outboundDigest(toolId, stepArgs)))
60
+ return null;
61
+ const answers = (ctx?.supplied ?? []).filter((s) => s.stepRef === stepRef);
62
+ if (answers.some((s) => s.confirmed === false))
63
+ return { refused: `nothing was sent to ${party} — the person declined` };
64
+ if (answers.some((s) => s.confirmed === true && String(s.data?.disclosure ?? '') === digest))
65
+ return null;
66
+ throw new InputRequired({
67
+ kind: 'confirmation', stepRef, toolId,
68
+ prompt: `This run has read content written by others. Send this to ${party}? Nothing leaves until you confirm exactly this.`,
69
+ summary: { party, sends, disclosure: digest, why: untrustedSeen === undefined ? 'untrusted-signal-unavailable' : 'untrusted-content-seen', confirmWith: { confirmed: true, data: { disclosure: digest } } },
70
+ });
71
+ }
72
+ const DELIMITER = /<(\s*\/?\s*data\b[^<>]*)>/gi;
73
+ const neutraliseText = (s) => s.replace(DELIMITER, '&lt;$1&gt;');
74
+ /** (a) No string in an untrusted value keeps a `<data>` / `</data>` tag: the frame a prompt puts it in cannot be closed
75
+ * or re-opened from inside. Keys and values, at any depth; non-strings are untouched. */
76
+ export function neutraliseDataDelimiters(value) {
77
+ if (typeof value === 'string')
78
+ return neutraliseText(value);
79
+ if (Array.isArray(value))
80
+ return value.map((v) => neutraliseDataDelimiters(v));
81
+ if (value && typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype) {
82
+ const out = {};
83
+ for (const [k, v] of Object.entries(value))
84
+ out[neutraliseText(k)] = neutraliseDataDelimiters(v);
85
+ return out;
86
+ }
87
+ return value;
88
+ }
89
+ /** Does a tool result carry untrusted content — the label the loop reads (`untrusted: true` / `x-ap-untrusted`). */
90
+ export function isUntrustedResult(result) {
91
+ return !!result && typeof result === 'object' && (result.untrusted === true || result['x-ap-untrusted'] === true);
92
+ }
93
+ //# sourceMappingURL=outbound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound.js","sourceRoot":"","sources":["../../src/tools/outbound.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { Address, Hex } from '@agenticprimitives/types';
2
2
  import type { Delegation } from '@agenticprimitives/delegation';
3
3
  import { type DelegationWireV1 } from '@agenticprimitives/a2a/standard';
4
+ import type { SessionWireCaveatCheck } from '@agenticprimitives/a2a';
4
5
  import type { AdmissionPorts } from './routes.js';
5
6
  import type { RunStore } from './run-store.js';
6
7
  /** The skill a READ wire pins: `/harness/runs|records|progress|provenance` under it, never `/harness/ask`. */
@@ -10,10 +11,12 @@ export declare function skillForMethod(method: string): string | null;
10
11
  export interface WireAdmissionDeps {
11
12
  /** This agent — the only delegator a wire presented here may name. */
12
13
  agent: Address;
13
- /** The deployment's enforcer addresses the wire's caveats must carry. */
14
+ /** The deployment's enforcer addresses the wire's caveats must carry. All three: the wire's allowedTargets caveat must
15
+ * name THIS agent (RUN-9 — a wire minted for another host, or for none, is not a credential here). */
14
16
  enforcers: {
15
17
  timestamp: string;
16
18
  allowedMethods: string;
19
+ allowedTargets: string;
17
20
  };
18
21
  /** ERC-1271 / ECDSA verification of the wire against its delegator — the app's chain read (a validator contract). */
19
22
  verifyDelegationSig: (d: Delegation) => Promise<boolean>;
@@ -23,6 +26,9 @@ export interface WireAdmissionDeps {
23
26
  runStore: Pick<RunStore, 'claimAssertion'>;
24
27
  /** Which skill each method requires; default `skillForMethod`. */
25
28
  skillFor?: (method: string) => string | null;
29
+ /** RUNB-17 (spec 445 §9 decision 8) — caveats beyond the three that this host ENFORCES, each with its check. A wire
30
+ * carrying any other caveat is refused (a2a `checkSessionWireShape`). */
31
+ recognisedCaveats?: readonly SessionWireCaveatCheck[];
26
32
  maxAgeSec?: number;
27
33
  skewSec?: number;
28
34
  now?: () => number;
@@ -1 +1 @@
1
- {"version":3,"file":"wire-admission.d.ts","sourceRoot":"","sources":["../src/wire-admission.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAmE,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACzI,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,8GAA8G;AAC9G,eAAO,MAAM,kBAAkB,EAAG,cAAuB,CAAC;AAE1D,oHAAoH;AACpH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI5D;AAED,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,KAAK,EAAE,OAAO,CAAC;IACf,yEAAyE;IACzE,SAAS,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,qHAAqH;IACrH,mBAAmB,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,uFAAuF;IACvF,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,6EAA6E;IAC7E,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC3C,kEAAkE;IAClE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED;uGACuG;AACvG,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAoB1F;AAED;;kIAEkI;AAClI,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,kHAAkH;IAClH,IAAI,EAAE,gBAAgB,CAAC;IACvB,sGAAsG;IACtG,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAM5D"}
1
+ {"version":3,"file":"wire-admission.d.ts","sourceRoot":"","sources":["../src/wire-admission.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAmE,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACzI,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,8GAA8G;AAC9G,eAAO,MAAM,kBAAkB,EAAG,cAAuB,CAAC;AAE1D,oHAAoH;AACpH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI5D;AAED,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,KAAK,EAAE,OAAO,CAAC;IACf;2GACuG;IACvG,SAAS,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACjF,qHAAqH;IACrH,mBAAmB,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,uFAAuF;IACvF,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,6EAA6E;IAC7E,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC3C,kEAAkE;IAClE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC7C;8EAC0E;IAC1E,iBAAiB,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED;uGACuG;AACvG,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAuB1F;AAED;;kIAEkI;AAClI,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,kHAAkH;IAClH,IAAI,EAAE,gBAAgB,CAAC;IACvB,sGAAsG;IACtG,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAM5D"}
@@ -15,10 +15,13 @@ export function wireAdmission(deps) {
15
15
  const self = deps.agent.toLowerCase();
16
16
  const principal = sessionWirePrincipal({
17
17
  enforcers: deps.enforcers,
18
+ // The host's OWN identity, never anything the request says: the wire must have been minted for this agent.
19
+ target: deps.agent,
18
20
  verifyDelegationSig: deps.verifyDelegationSig,
19
21
  isRevoked: deps.isRevoked,
20
22
  skill: deps.skillFor ?? skillForMethod,
21
23
  claim: async (digest, expiresAt) => (await deps.runStore.claimAssertion(deps.agent, digest, expiresAt)).claimed,
24
+ ...(deps.recognisedCaveats ? { recognisedCaveats: deps.recognisedCaveats } : {}),
22
25
  ...(deps.maxAgeSec !== undefined ? { maxAgeSec: deps.maxAgeSec } : {}),
23
26
  ...(deps.skewSec !== undefined ? { skewSec: deps.skewSec } : {}),
24
27
  ...(deps.now ? { now: deps.now } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"wire-admission.js","sourceRoot":"","sources":["../src/wire-admission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wire-admission.js","sourceRoot":"","sources":["../src/wire-admission.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenticprimitives/service-host",
3
- "version": "0.0.0-alpha.27",
3
+ "version": "0.0.0-alpha.29",
4
4
  "description": "The Service Host (spec 433): the harness run pipeline a service agent embeds — run store, progress, routes, tools, provenance sink — so a service built as an app runs the same harness the runtime hosts. W1 step 1: the run store behind a port.",
5
5
  "homepage": "https://agenticprimitives.dev",
6
6
  "bugs": {
@@ -28,12 +28,12 @@
28
28
  "README.md"
29
29
  ],
30
30
  "dependencies": {
31
- "@agenticprimitives/a2a": "0.0.0-alpha.48",
32
- "@agenticprimitives/delegation": "1.0.0-alpha.46",
33
- "@agenticprimitives/orchestration": "0.0.0-alpha.27",
34
- "@agenticprimitives/provenance": "0.0.0-alpha.6",
35
- "@agenticprimitives/types": "1.0.0-alpha.46",
36
- "@agenticprimitives/harness": "0.0.0-alpha.30"
31
+ "@agenticprimitives/a2a": "0.0.0-alpha.50",
32
+ "@agenticprimitives/delegation": "1.0.0-alpha.48",
33
+ "@agenticprimitives/harness": "0.0.0-alpha.32",
34
+ "@agenticprimitives/orchestration": "0.0.0-alpha.29",
35
+ "@agenticprimitives/provenance": "0.0.0-alpha.7",
36
+ "@agenticprimitives/types": "1.0.0-alpha.48"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@cloudflare/workers-types": "^4.20240117.0",