@agenticprimitives/runtime-member 0.0.0-alpha.10

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 (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/bin/ap-runtime.mjs +4 -0
  4. package/dist/cli.d.ts +8 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +201 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/client.d.ts +48 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +75 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/equip-entry.d.ts +8 -0
  13. package/dist/equip-entry.d.ts.map +1 -0
  14. package/dist/equip-entry.js +7 -0
  15. package/dist/equip-entry.js.map +1 -0
  16. package/dist/equip.d.ts +124 -0
  17. package/dist/equip.d.ts.map +1 -0
  18. package/dist/equip.js +173 -0
  19. package/dist/equip.js.map +1 -0
  20. package/dist/index.d.ts +27 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +22 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/join.d.ts +9 -0
  25. package/dist/join.d.ts.map +1 -0
  26. package/dist/join.js +32 -0
  27. package/dist/join.js.map +1 -0
  28. package/dist/keystore.d.ts +13 -0
  29. package/dist/keystore.d.ts.map +1 -0
  30. package/dist/keystore.js +60 -0
  31. package/dist/keystore.js.map +1 -0
  32. package/dist/loop.d.ts +78 -0
  33. package/dist/loop.d.ts.map +1 -0
  34. package/dist/loop.js +151 -0
  35. package/dist/loop.js.map +1 -0
  36. package/dist/messaging.d.ts +19 -0
  37. package/dist/messaging.d.ts.map +1 -0
  38. package/dist/messaging.js +51 -0
  39. package/dist/messaging.js.map +1 -0
  40. package/dist/pair.d.ts +19 -0
  41. package/dist/pair.d.ts.map +1 -0
  42. package/dist/pair.js +51 -0
  43. package/dist/pair.js.map +1 -0
  44. package/dist/pairing.d.ts +61 -0
  45. package/dist/pairing.d.ts.map +1 -0
  46. package/dist/pairing.js +4 -0
  47. package/dist/pairing.js.map +1 -0
  48. package/dist/record.d.ts +33 -0
  49. package/dist/record.d.ts.map +1 -0
  50. package/dist/record.js +2 -0
  51. package/dist/record.js.map +1 -0
  52. package/dist/run.d.ts +8 -0
  53. package/dist/run.d.ts.map +1 -0
  54. package/dist/run.js +24 -0
  55. package/dist/run.js.map +1 -0
  56. package/dist/serve.d.ts +26 -0
  57. package/dist/serve.d.ts.map +1 -0
  58. package/dist/serve.js +51 -0
  59. package/dist/serve.js.map +1 -0
  60. package/dist/standing.d.ts +58 -0
  61. package/dist/standing.d.ts.map +1 -0
  62. package/dist/standing.js +65 -0
  63. package/dist/standing.js.map +1 -0
  64. package/dist/workspace-mcp.d.ts +88 -0
  65. package/dist/workspace-mcp.d.ts.map +1 -0
  66. package/dist/workspace-mcp.js +129 -0
  67. package/dist/workspace-mcp.js.map +1 -0
  68. package/package.json +79 -0
  69. package/spec.md +10 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equip.d.ts","sourceRoot":"","sources":["../src/equip.ts"],"names":[],"mappings":"AAYA,OAAO,EAA8B,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAK1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG3E,wHAAwH;AACxH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS,GAAG,iBAAiB,CAGjE;AAED,MAAM,WAAW,SAAS;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAC;IAAC,sBAAsB,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAAC,sBAAsB,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAC;IAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,6EAA6E;IAAC,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAE;AAE3Y,6FAA6F;AAC7F,MAAM,WAAW,eAAe;IAC9B,6GAA6G;IAC7G,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;qHAEiH;IACjH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;mEAE+D;IAC/D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC;IACjC;uGACmG;IACnG,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED;+DAC+D;AAC/D,MAAM,MAAM,aAAa,GAAG;IAAE,CAAC,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,CAAC,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7F;gHACgH;AAChH,wBAAsB,cAAc,CAAC,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,eAAe,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAchR;AAED;wGACwG;AACxG,wBAAsB,mBAAmB,CAAC,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,eAAe,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,WAAW,EAAE;YAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAKvT;AAED,yHAAyH;AACzH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/L;AAID,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5D,iFAAiF;IACjF,OAAO,EAAE,OAAO,CAAC;IACjB;sHACkH;IAClH,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC,CAmGrG"}
package/dist/equip.js ADDED
@@ -0,0 +1,173 @@
1
+ // EQUIP a `.svc` member to speak as a runtime key — every step of `ap runtime join` EXCEPT generating the key and
2
+ // keeping the record: browser-safe (no disk, no key), so the Home can run it in the custodian's own browser for a
3
+ // PAIRING CODE (spec 400 W1b) with the connected custodian signing, and hand the finished record to the runtime.
4
+ //
5
+ // In the order the authority model needs:
6
+ // 1. resolves the member's typed name (`<label>.svc`, chartered by its custodian through the Home) and the workspace's;
7
+ // 2. has the member's CUSTODIAN sign the session wire — member SA → the runtime's key, pinned to `harness.ask`,
8
+ // time-bounded (S3c) — through a signer port;
9
+ // 3. makes sure the custodian's Home lists them as the member's steward, binds the member's VAULT KEY (spec 278),
10
+ // assigns the runtime-member playbook by digest, declares the runtime host (W1c), enables the messaging rail and
11
+ // records the open mandate (W2a).
12
+ // It invites nothing: membership in the workspace is the steward's act at the Home.
13
+ import { encodeAbiParameters, toHex } from 'viem';
14
+ import { hashDelegation, buildCaveat, buildVaultKeyUseCaveat, encodeTimestampTerms, encodeValueTerms, encodeAllowedTargetsTerms, ROOT_AUTHORITY } from '@agenticprimitives/delegation';
15
+ import { keccak256, toBytes } from 'viem';
16
+ import { skillSelector } from '@agenticprimitives/a2a';
17
+ import { STANDARD_SURFACE_SKILL } from '@agenticprimitives/a2a/standard';
18
+ import { buildStandingGrant } from './standing.js';
19
+ import { enableMessaging } from './messaging.js';
20
+ /** The enforcer map a standing grant is written against; the digest-binding enforcer is required to derive children. */
21
+ export function standingEnforcers(c) {
22
+ if (!c.digestBindingEnforcer)
23
+ throw new Error('an open mandate needs the digest-binding enforcer (contracts.digestBindingEnforcer) — the child is bound to each intent');
24
+ return { timestamp: c.timestampEnforcer, allowedMethods: c.allowedMethodsEnforcer, value: c.valueEnforcer, allowedTargets: c.allowedTargetsEnforcer, digestBinding: c.digestBindingEnforcer };
25
+ }
26
+ /** The member's playbook, pinned by digest from the registry (the K3 assignment the Playbook page writes). Kept when
27
+ * the same archetype is already assigned unless `force` — a re-pin after the registry's definition changed. */
28
+ export async function assignPlaybook(o) {
29
+ const f = o.fetch ?? fetch;
30
+ const log = o.log ?? (() => undefined);
31
+ const a2a = o.a2a.replace(/\/$/, '');
32
+ const got = await j(await f(`${a2a}/interactions/${o.member}/channels.archetypeAssignment.get`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ session: o.custodian.bearer, stewardship: o.stewardship }) }));
33
+ const want = `skill:archetypes/${o.registry.archetype}`;
34
+ if (got.record?.archetypeId === want && !o.force) {
35
+ log(`playbook ${want} already assigned (${String(got.record.definitionDigest).slice(0, 12)}…)`);
36
+ return String(got.record.definitionDigest ?? '');
37
+ }
38
+ const def = await j(await f(`${o.registry.origin.replace(/\/$/, '')}/context/contexts/${o.registry.context}/archetypes/${o.registry.archetype}/definition`, { headers: { 'user-agent': 'Mozilla/5.0 (ap-runtime-join)' } }));
39
+ if (!def.definition || !def.digest)
40
+ throw new Error(`the ${o.registry.archetype} playbook could not be read from ${o.registry.origin}`);
41
+ if (got.record?.definitionDigest === def.digest) {
42
+ log(`playbook ${want} already at ${def.digest.slice(0, 12)}…`);
43
+ return def.digest;
44
+ }
45
+ const record = { type: 'ap.archetype-assignment.v1', archetypeId: def.definition.archetypeId, archetypeVersion: def.definition.archetypeVersion, definitionDigest: def.digest, definition: def.definition };
46
+ const put = await j(await f(`${a2a}/interactions/${o.member}/channels.archetypeAssignment.put`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ session: o.custodian.bearer, stewardship: o.stewardship, record }) }));
47
+ if (!(put.ok === true || put.record))
48
+ throw new Error(`the playbook was not assigned to ${o.member}: ${JSON.stringify(put).slice(0, 200)}`);
49
+ log(`playbook ${def.definition.archetypeId} v${def.definition.archetypeVersion} assigned (${def.digest.slice(0, 12)}…)`);
50
+ return def.digest;
51
+ }
52
+ /** Spec 400 W2 (B4) — keep the standing grant on the member's own object (like a read grant), so the grants screen
53
+ * lists it and a revocation can expand its digest. The object verifies it was issued by the member. */
54
+ export async function recordStandingGrant(o) {
55
+ const f = o.fetch ?? fetch;
56
+ const put = await j(await f(`${o.a2a.replace(/\/$/, '')}/interactions/${o.member}/runtime.standing.put`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ session: o.custodian.bearer, ...(o.stewardship ? { stewardship: o.stewardship } : {}), wire: o.standing.wire, capabilities: o.standing.requirement.actions, locations: o.standing.requirement.locations ?? [], validUntil: o.standing.requirement.validUntil, ...(o.holderName ? { holderName: o.holderName } : {}) }) }));
57
+ if (put.ok !== true || typeof put.hash !== 'string')
58
+ throw new Error(`the standing grant was not recorded on ${o.member}: ${JSON.stringify(put).slice(0, 200)}`);
59
+ return put.hash;
60
+ }
61
+ /** Declare (or clear, with `null`) where the member's runtime is hosted — the custodian's act on the member's object. */
62
+ export async function declareRuntimeHost(o) {
63
+ const f = o.fetch ?? fetch;
64
+ const put = await j(await f(`${o.a2a.replace(/\/$/, '')}/interactions/${o.member}/runtime.host.put`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ session: o.custodian.bearer, ...(o.stewardship ? { stewardship: o.stewardship } : {}), host: o.host }) }));
65
+ if (put.ok !== true)
66
+ throw new Error(`the runtime host was not declared for ${o.member}: ${JSON.stringify(put).slice(0, 200)}`);
67
+ }
68
+ const j = async (r) => { const t = await r.text(); try {
69
+ return JSON.parse(t);
70
+ }
71
+ catch {
72
+ return { _raw: t.slice(0, 200), _status: r.status };
73
+ } };
74
+ export async function equipRuntimeMember(o) {
75
+ const f = o.fetch ?? fetch;
76
+ const log = o.log ?? (() => undefined);
77
+ const H = { 'content-type': 'application/json', authorization: `Bearer ${o.custodian.bearer}` };
78
+ const homeCall = (o.call?.home ?? o.home).replace(/\/$/, '');
79
+ const nameInfo = async (name) => {
80
+ const r = await j(await f(`${homeCall}/connect/name-info?name=${encodeURIComponent(name)}`));
81
+ if (!r.exists || !r.agent || r.deployed === false)
82
+ throw new Error(`${name} does not resolve at ${o.home} — charter it first (service.create through the Home)`);
83
+ return r.agent.toLowerCase();
84
+ };
85
+ const member = await nameInfo(o.member);
86
+ const workspace = await nameInfo(o.workspace);
87
+ log(`member ${o.member} → ${member} · workspace ${o.workspace} → ${workspace}`);
88
+ // 2–3. the runtime's key and the wire its custodian signs
89
+ const address = o.address;
90
+ const validUntil = Math.floor(Date.now() / 1000) + (o.validForSeconds ?? 30 * 86_400);
91
+ const salt = BigInt(toHex(crypto.getRandomValues(new Uint8Array(16))));
92
+ const wire = {
93
+ delegator: member, delegate: address, authority: ROOT_AUTHORITY,
94
+ caveats: [
95
+ { enforcer: o.contracts.timestampEnforcer, terms: encodeAbiParameters([{ type: 'uint256' }, { type: 'uint256' }], [0n, BigInt(validUntil)]), args: '0x' },
96
+ { enforcer: o.contracts.allowedMethodsEnforcer, terms: encodeAbiParameters([{ type: 'bytes4[]' }], [[skillSelector(STANDARD_SURFACE_SKILL)]]), args: '0x' },
97
+ ],
98
+ salt, signature: '0x',
99
+ };
100
+ const wireRef = hashDelegation(wire, o.contracts.chainId, o.contracts.delegationManager);
101
+ wire.signature = await o.custodian.signDigest(wireRef);
102
+ log(`session wire ${wireRef.slice(0, 18)}… · ${o.member} → ${address} · pinned to ${STANDARD_SURFACE_SKILL} · until ${new Date(validUntil * 1000).toISOString().slice(0, 10)}`);
103
+ // 4a. the custodian's steward link for the member (kept when there)
104
+ const links = ((await j(await f(`${homeCall}/connect/related-orgs?surface=any`, { headers: H }))).orgs ?? []);
105
+ let stewardship = links.find((l) => l.orgAgent.toLowerCase() === member && l.relationship === 'steward')?.stewardshipDelegation;
106
+ if (!stewardship) {
107
+ const salt2 = BigInt(toHex(crypto.getRandomValues(new Uint8Array(16))));
108
+ const d = {
109
+ delegator: member, delegate: o.custodian.agent, authority: ROOT_AUTHORITY,
110
+ caveats: [
111
+ buildCaveat(o.contracts.timestampEnforcer, encodeTimestampTerms(0, Math.floor(Date.now() / 1000) + 3650 * 86_400)),
112
+ buildCaveat(o.contracts.valueEnforcer, encodeValueTerms(0n)),
113
+ buildCaveat(o.contracts.allowedTargetsEnforcer, encodeAllowedTargetsTerms([o.contracts.agentRelationship, o.contracts.agentNameRegistry, o.contracts.permissionlessSubregistry])),
114
+ ],
115
+ salt: salt2, signature: '0x',
116
+ };
117
+ d.signature = await o.custodian.signDigest(hashDelegation(d, o.contracts.chainId, o.contracts.delegationManager));
118
+ stewardship = { ...d, salt: salt2.toString() };
119
+ const r = await j(await f(`${homeCall}/connect/related-orgs`, { method: 'POST', headers: H, body: JSON.stringify({ person: o.custodian.agent, orgAgent: member, orgName: o.member, purpose: 'service', requestedBy: 'ap-runtime-join', kind: 'service', parent: o.custodian.agent, relationship: 'steward', stewardshipDelegation: stewardship }) }));
120
+ if (!(r.ok === true || r.link || r.orgAgent))
121
+ throw new Error(`the steward link for ${o.member} was not recorded: ${JSON.stringify(r).slice(0, 200)}`);
122
+ log(`steward link recorded: ${o.custodian.agent.slice(0, 10)}… stewards ${o.member}`);
123
+ }
124
+ else
125
+ log(`steward link: already there`);
126
+ // 4b. the member's vault key (spec 278) — bound once; kept when there
127
+ const kb = await j(await f(`${homeCall}/mcp-bind/custody/vault-key/is-bound?owner=${member}`));
128
+ if (kb.bound === true && (kb.allowedResources ?? []).includes('vault:*'))
129
+ log('vault key: already bound');
130
+ else {
131
+ const info = await j(await f(`${homeCall}/mcp-bind/custody/vault-key/server-info`));
132
+ const issuedAt = Math.floor(Date.now() / 1000);
133
+ const prov = await j(await f(`${homeCall}/mcp-bind/custody/vault-key/provision`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ owner: member, issuedAt, proof: await o.custodian.signDigest(keccak256(toBytes(['demo-mcp:vault-key-provision:v1', member, String(issuedAt)].join('\n')))) }) }));
134
+ if (!prov.ok || !prov.kmsKeyRef)
135
+ throw new Error(`vault key provision for ${o.member}: ${prov.error_description ?? prov.detail ?? 'refused'}`);
136
+ const params = { vaultId: String(info.serverId ?? '').trim() || 'demo-mcp', kmsKeyRef: prov.kmsKeyRef, serverKey: (info.serverKey ?? '0x0000000000000000000000000000000000000001'), allowedResources: info.defaultResources ?? ['person-pii', 'org-sensitive', 'profile', 'vault:*'], classificationCeiling: info.classificationCeiling ?? 'regulated.high', ops: info.ops ?? ['read', 'write'] };
137
+ const validUntil2 = Math.floor(Date.now() / 1000) + 90 * 86_400;
138
+ const salt3 = BigInt(toHex(crypto.getRandomValues(new Uint8Array(16))));
139
+ const auth = { delegator: member, delegate: params.serverKey, authority: ROOT_AUTHORITY, caveats: [buildVaultKeyUseCaveat({ vaultId: params.vaultId, kmsKeyRef: params.kmsKeyRef, resources: params.allowedResources, classificationCeiling: params.classificationCeiling, ops: params.ops, noSubdelegation: true })], salt: salt3, signature: '0x' };
140
+ auth.signature = await o.custodian.signDigest(hashDelegation(auth, o.contracts.chainId, o.contracts.delegationManager));
141
+ const bound = await j(await f(`${homeCall}/mcp-bind/custody/vault-key/bind`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ owner: member, vaultId: params.vaultId, kmsKeyRef: params.kmsKeyRef, allowedResources: params.allowedResources, classificationCeiling: params.classificationCeiling, ops: params.ops, expiresAt: new Date(validUntil2 * 1000).toISOString(), authorization: { ...auth, salt: salt3.toString() } }) }));
142
+ if (bound.ok !== true)
143
+ throw new Error(`vault key bind for ${o.member}: ${bound.reason ?? bound.error ?? 'refused'}`);
144
+ log(`vault key bound (${params.kmsKeyRef.slice(0, 24)}…)`);
145
+ }
146
+ // 4c. the runtime-member playbook, by digest from the registry
147
+ const a2a = (o.call?.a2a ?? o.a2a).replace(/\/$/, '');
148
+ await assignPlaybook({ a2a, member, custodian: o.custodian, stewardship, registry: o.registry, fetch: f, log });
149
+ // 4d. W1c — where the runtime lives, so the Worker wakes it instead of it polling
150
+ if (o.wake) {
151
+ await declareRuntimeHost({ a2a, member, custodian: o.custodian, host: o.wake, stewardship, fetch: f });
152
+ log(`runtime host declared: ${o.wake.kind}${o.wake.kind === 'url' ? ` ${o.wake.url}` : ''} — the Worker wakes this member on every admitted message`);
153
+ }
154
+ // 4d'. W2a — the messaging rail: the recipients the member may deliver to
155
+ if (o.messagingTo?.length) {
156
+ const rail = await enableMessaging({ a2a, member, recipients: o.messagingTo, contracts: o.contracts, custodian: o.custodian, stewardship, fetch: f });
157
+ log(`messaging rail enabled: ${rail.recipients.length} recipient(s) (${rail.hash.slice(0, 12)}…)`);
158
+ }
159
+ // 4e. W2a — the open mandate, if the custodian grants one
160
+ const standing = o.openMandate?.length ? await buildStandingGrant({ member, runtimeKey: address, capabilities: o.openMandate, ...(o.openMandateLocations?.length ? { locations: o.openMandateLocations } : {}), validForSeconds: o.validForSeconds ?? 30 * 86_400, enforcers: standingEnforcers(o.contracts), chainId: o.contracts.chainId, delegationManager: o.contracts.delegationManager, signDigest: o.custodian.signDigest }) : undefined;
161
+ if (standing) {
162
+ log(`standing grant ${standing.ref.slice(0, 18)}… · ${o.member} → ${address} · ${o.openMandate.join(', ')}${o.openMandateLocations?.length ? ` to ${o.openMandateLocations.length} recipient(s)` : ' to anyone'} · until ${new Date(standing.requirement.validUntil * 1000).toISOString().slice(0, 10)} — replies no longer park; revocable on chain`);
163
+ await recordStandingGrant({ a2a, member, custodian: o.custodian, stewardship, standing, holderName: `${o.member} runtime key`, fetch: f });
164
+ log(' recorded on the member\'s object — listed on its Grants screen, revocable there');
165
+ }
166
+ const record = {
167
+ v: 1, name: o.member, agent: member, workspace: { name: o.workspace, agent: workspace }, address,
168
+ wire: { ...wire, salt: salt.toString() }, wireRef, validUntil, edge: o.edge.replace(/\/$/, ''), audience: new URL(o.edge).origin, a2a: o.a2a.replace(/\/$/, ''), chainId: o.contracts.chainId, home: o.home, joinedAt: new Date().toISOString(),
169
+ ...(standing ? { standing } : {}),
170
+ };
171
+ return record;
172
+ }
173
+ //# sourceMappingURL=equip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equip.js","sourceRoot":"","sources":["../src/equip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export declare const PACKAGE_NAME: "@agenticprimitives/runtime-member";
2
+ export declare const PACKAGE_STATUS: "w1a";
3
+ export declare const SPEC_REF: "specs/400-closing-the-workspace-gap-buzz-and-team-agent-platforms.md";
4
+ export { runtimeJoin, declareRuntimeHost, assignPlaybook, recordStandingGrant, standingEnforcers, equipRuntimeMember } from './join.js';
5
+ export type { JoinOptions, EquipOptions, Contracts, CustodianSigner, RuntimeHostV1 } from './join.js';
6
+ export { runRuntimeMember } from './run.js';
7
+ export type { RunOptions } from './run.js';
8
+ export { RuntimeMemberLoop, promptFor } from './loop.js';
9
+ export type { LoopOptions, TurnReport, InboxMessage } from './loop.js';
10
+ export { serveRuntimeMember } from './serve.js';
11
+ export type { ServeOptions, WakeRequestV1, WakeReplyV1 } from './serve.js';
12
+ export { createWorkspaceMcp, runWorkspaceMcpStdio, describeOutcome, inboxPlan, replyPlan, topicReplyPlan, topicOf, WORKSPACE_MCP_DOCTRINE } from './workspace-mcp.js';
13
+ export type { WorkspaceMcpOptions } from './workspace-mcp.js';
14
+ export { askAs, continueAs, clientFor, endpointFor, recordSigner } from './client.js';
15
+ export { buildStandingGrant, deriveForNeed, parkedNeedOf } from './standing.js';
16
+ export { enableMessaging, MESSAGING_WIRE_SKILLS } from './messaging.js';
17
+ export type { EnableMessagingInput } from './messaging.js';
18
+ export type { StandingGrantV1, StandingEnforcers, ParkedNeed, Derived } from './standing.js';
19
+ export type { AskOutcome, Plan, Signer, ClientOptions } from './client.js';
20
+ export { saveRuntimeMember, loadRuntimeMember, portableRecord, runtimeDir, runtimePath } from './keystore.js';
21
+ export type { RuntimeMemberRecordV1 } from './record.js';
22
+ export { runtimeCli, personaCustodian, RUNTIME_USAGE } from './cli.js';
23
+ export { runtimePair } from './pair.js';
24
+ export type { PairOptions } from './pair.js';
25
+ export { PAIRING_CODE_RE, pairingHandleOf } from './pairing.js';
26
+ export type { PairingStateV1, PairingClaimV1, PairingOptionsV1 } from './pairing.js';
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,EAAG,mCAA4C,CAAC;AACzE,eAAO,MAAM,cAAc,EAAG,KAAc,CAAC;AAC7C,eAAO,MAAM,QAAQ,EAAG,sEAA+E,CAAC;AAExG,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACxI,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACzD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACtK,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACxE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7F,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9G,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ // @agenticprimitives/runtime-member — an outside runtime as a workspace MEMBER (spec 400 W1).
2
+ //
3
+ // `join` equips a `.svc` member to speak as itself (its own key here, the session wire its custodian signed, its
4
+ // steward link, its playbook); `mcp` is the workspace as tools for the ACP agent; `run` is the loop — poll its own
5
+ // inbox, prompt the agent, answer where it came from. Every act in the workspace is one wire-signed A2A request as
6
+ // the runtime itself; a write parks for the steward's mandate. Nothing here holds a person's session or decides an act.
7
+ export const PACKAGE_NAME = '@agenticprimitives/runtime-member';
8
+ export const PACKAGE_STATUS = 'w1a';
9
+ export const SPEC_REF = 'specs/400-closing-the-workspace-gap-buzz-and-team-agent-platforms.md';
10
+ export { runtimeJoin, declareRuntimeHost, assignPlaybook, recordStandingGrant, standingEnforcers, equipRuntimeMember } from './join.js';
11
+ export { runRuntimeMember } from './run.js';
12
+ export { RuntimeMemberLoop, promptFor } from './loop.js';
13
+ export { serveRuntimeMember } from './serve.js';
14
+ export { createWorkspaceMcp, runWorkspaceMcpStdio, describeOutcome, inboxPlan, replyPlan, topicReplyPlan, topicOf, WORKSPACE_MCP_DOCTRINE } from './workspace-mcp.js';
15
+ export { askAs, continueAs, clientFor, endpointFor, recordSigner } from './client.js';
16
+ export { buildStandingGrant, deriveForNeed, parkedNeedOf } from './standing.js';
17
+ export { enableMessaging, MESSAGING_WIRE_SKILLS } from './messaging.js';
18
+ export { saveRuntimeMember, loadRuntimeMember, portableRecord, runtimeDir, runtimePath } from './keystore.js';
19
+ export { runtimeCli, personaCustodian, RUNTIME_USAGE } from './cli.js';
20
+ export { runtimePair } from './pair.js';
21
+ export { PAIRING_CODE_RE, pairingHandleOf } from './pairing.js';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,EAAE;AACF,iHAAiH;AACjH,mHAAmH;AACnH,mHAAmH;AACnH,wHAAwH;AACxH,MAAM,CAAC,MAAM,YAAY,GAAG,mCAA4C,CAAC;AACzE,MAAM,CAAC,MAAM,cAAc,GAAG,KAAc,CAAC;AAC7C,MAAM,CAAC,MAAM,QAAQ,GAAG,sEAA+E,CAAC;AAExG,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAExI,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEtK,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAIxE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9G,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
package/dist/join.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import type { RuntimeMemberRecordV1 } from './record.js';
2
+ import { type JoinOptions } from './equip.js';
3
+ export { standingEnforcers, assignPlaybook, recordStandingGrant, declareRuntimeHost, equipRuntimeMember } from './equip.js';
4
+ export type { Contracts, CustodianSigner, JoinOptions, RuntimeHostV1, EquipOptions } from './equip.js';
5
+ export declare function runtimeJoin(o: JoinOptions): Promise<{
6
+ path: string;
7
+ record: RuntimeMemberRecordV1;
8
+ }>;
9
+ //# sourceMappingURL=join.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../src/join.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC5H,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEvG,wBAAsB,WAAW,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,CAAC,CAS1G"}
package/dist/join.js ADDED
@@ -0,0 +1,32 @@
1
+ // `ap runtime join` — make an outside runtime a MEMBER of a workspace (spec 400 W1 / spec 372 S3).
2
+ //
3
+ // What it does, in the order the authority model needs:
4
+ // 1. resolves the member's typed name (`<label>.svc`, chartered by its custodian through the Home — `service.create`)
5
+ // and the workspace's;
6
+ // 2. generates the runtime's OWN key on this machine;
7
+ // 3. has the member's CUSTODIAN sign the session wire — member SA → that key, pinned to `harness.ask`, time-bounded
8
+ // (S3c) — through a signer port. W1a: a demo persona's custody signer at the Home (`persona-sign`); W1b: a pairing
9
+ // code the steward mints, signed in the browser by the connected custodian (spec 257);
10
+ // 4. makes sure the custodian's Home lists them as the member's steward (the link a scripted charter leaves
11
+ // unwritten — the same artifact `record-service-stewardship` writes), binds the member's VAULT KEY (spec 278 —
12
+ // the ceremony the Home's org-create runs; a charter through the Ask leaves it unbound and every write to the
13
+ // member's vault answers `vault_key_unauthorized`), and assigns the member the runtime-member playbook by digest
14
+ // from the registry (the K3 assignment the Playbook page writes);
15
+ // 5. keeps the record at `~/.ap/runtime/<name>.json`.
16
+ // It invites nothing: membership in the workspace is the steward's act at the Home (`organization.membership.invite`
17
+ // admits a `.svc`, S3b) — this only equips a runtime to speak as a member it already is.
18
+ import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
19
+ import { saveRuntimeMember } from './keystore.js';
20
+ import { equipRuntimeMember } from './equip.js';
21
+ export { standingEnforcers, assignPlaybook, recordStandingGrant, declareRuntimeHost, equipRuntimeMember } from './equip.js';
22
+ export async function runtimeJoin(o) {
23
+ const log = o.log ?? (() => undefined);
24
+ const key = generatePrivateKey();
25
+ const address = privateKeyToAccount(key).address;
26
+ const equipped = await equipRuntimeMember({ ...o, address });
27
+ const record = { ...equipped, key };
28
+ const path = saveRuntimeMember(record);
29
+ log(`kept at ${path} (0600)`);
30
+ return { path, record };
31
+ }
32
+ //# sourceMappingURL=join.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join.js","sourceRoot":"","sources":["../src/join.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,EAAE;AACF,wDAAwD;AACxD,wHAAwH;AACxH,4BAA4B;AAC5B,wDAAwD;AACxD,sHAAsH;AACtH,wHAAwH;AACxH,4FAA4F;AAC5F,8GAA8G;AAC9G,oHAAoH;AACpH,mHAAmH;AACnH,sHAAsH;AACtH,uEAAuE;AACvE,wDAAwD;AACxD,qHAAqH;AACrH,yFAAyF;AACzF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAoB,MAAM,YAAY,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG5H,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,CAAc;IAC9C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,MAAM,MAAM,GAA0B,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC3D,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACvC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;IAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type { RuntimeMemberRecordV1 } from './record.js';
2
+ import type { RuntimeMemberRecordV1 } from './record.js';
3
+ export declare const runtimeDir: () => string;
4
+ export declare const runtimePath: (name: string) => string;
5
+ export declare function saveRuntimeMember(rec: RuntimeMemberRecordV1): string;
6
+ /** The record WITHOUT its key — what travels to a Container as `AP_RUNTIME_RECORD` (the key rides separately as
7
+ * `AP_RUNTIME_KEY`, a secret; or stays in a KMS behind a signer). */
8
+ export declare function portableRecord(rec: RuntimeMemberRecordV1): Omit<RuntimeMemberRecordV1, 'key'>;
9
+ /** The record for `name`: from `AP_RUNTIME_RECORD` (JSON, a Container's env) when set, else the file on this
10
+ * machine. The key: the record's, else `AP_RUNTIME_KEY`; a record with neither loads (a signer port may sign), and
11
+ * the first request says so if none does. */
12
+ export declare function loadRuntimeMember(name: string): RuntimeMemberRecordV1;
13
+ //# sourceMappingURL=keystore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.d.ts","sourceRoot":"","sources":["../src/keystore.ts"],"names":[],"mappings":"AAWA,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,UAAU,QAAO,MAAyE,CAAC;AACxG,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,MAA0E,CAAC;AAEtH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAOpE;AAED;sEACsE;AACtE,wBAAgB,cAAc,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAG7F;AAED;;8CAE8C;AAC9C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAerE"}
@@ -0,0 +1,60 @@
1
+ // THE RUNTIME'S OWN KEY AND WIRE, on its own machine — `~/.ap/runtime/<label>.json`, mode 0600.
2
+ //
3
+ // What is kept: the member's Smart Agent address and typed name, the workspace it belongs to, the runtime's OWN
4
+ // private key (generated here, never sent anywhere — the wire names its public address), the session wire the
5
+ // custodian signed (a delegation from the member's SA to that key, pinned to `harness.ask`, time-bounded), and the
6
+ // endpoints. What is never here: anyone's Home session, anyone else's key, a mandate. Losing this file loses the
7
+ // runtime's ability to speak; it does not lose anyone's authority — the wire is the custodian's to revoke on chain.
8
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
9
+ import { homedir } from 'node:os';
10
+ import { join } from 'node:path';
11
+ export const runtimeDir = () => process.env.AP_RUNTIME_DIR ?? join(homedir(), '.ap', 'runtime');
12
+ export const runtimePath = (name) => join(runtimeDir(), `${name.replace(/[^a-z0-9.-]/gi, '_')}.json`);
13
+ export function saveRuntimeMember(rec) {
14
+ const dir = runtimeDir();
15
+ if (!existsSync(dir))
16
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
17
+ const p = runtimePath(rec.name);
18
+ writeFileSync(p, `${JSON.stringify(rec, null, 2)}\n`, { mode: 0o600 });
19
+ try {
20
+ chmodSync(p, 0o600);
21
+ }
22
+ catch { /* not every filesystem keeps modes */ }
23
+ return p;
24
+ }
25
+ /** The record WITHOUT its key — what travels to a Container as `AP_RUNTIME_RECORD` (the key rides separately as
26
+ * `AP_RUNTIME_KEY`, a secret; or stays in a KMS behind a signer). */
27
+ export function portableRecord(rec) {
28
+ const { key: _key, ...rest } = rec;
29
+ return rest;
30
+ }
31
+ /** The record for `name`: from `AP_RUNTIME_RECORD` (JSON, a Container's env) when set, else the file on this
32
+ * machine. The key: the record's, else `AP_RUNTIME_KEY`; a record with neither loads (a signer port may sign), and
33
+ * the first request says so if none does. */
34
+ export function loadRuntimeMember(name) {
35
+ const fromEnv = process.env.AP_RUNTIME_RECORD;
36
+ let rec;
37
+ if (fromEnv) {
38
+ try {
39
+ rec = JSON.parse(fromEnv);
40
+ }
41
+ catch {
42
+ throw new Error('AP_RUNTIME_RECORD is not JSON');
43
+ }
44
+ if (rec.name !== name)
45
+ throw new Error(`AP_RUNTIME_RECORD is ${rec.name}, not ${name}`);
46
+ }
47
+ else {
48
+ const p = runtimePath(name);
49
+ if (!existsSync(p))
50
+ throw new Error(`no runtime member "${name}" on this machine — run \`ap runtime join\` first (${p})`);
51
+ rec = JSON.parse(readFileSync(p, 'utf8'));
52
+ }
53
+ if (rec.v !== 1 || !rec.wire || !rec.agent)
54
+ throw new Error(`the record for ${name} is not a runtime member record`);
55
+ const envKey = process.env.AP_RUNTIME_KEY;
56
+ if (!rec.key && envKey && /^0x[0-9a-fA-F]{64}$/.test(envKey))
57
+ rec.key = envKey;
58
+ return rec;
59
+ }
60
+ //# sourceMappingURL=keystore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.js","sourceRoot":"","sources":["../src/keystore.ts"],"names":[],"mappings":"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"}
package/dist/loop.d.ts ADDED
@@ -0,0 +1,78 @@
1
+ import { type PermissionPolicy } from '@agenticprimitives/acp';
2
+ import { type Signer } from './client.js';
3
+ import { type RuntimeMemberRecordV1 } from './keystore.js';
4
+ export interface LoopOptions {
5
+ member: string;
6
+ /** The ACP agent's command and args, e.g. `['goose', 'acp']` or `['claude-code-acp']`. */
7
+ agent: string[];
8
+ /** The command that serves the workspace MCP for this member (default: this kit's own `ap runtime mcp`). */
9
+ mcpCommand?: {
10
+ command: string;
11
+ args: string[];
12
+ };
13
+ /** Start from this cursor instead of "now" (default: only what arrives after the loop starts). */
14
+ since?: string;
15
+ permission?: PermissionPolicy;
16
+ cwd?: string;
17
+ fetch?: typeof fetch;
18
+ /** The wire's signer, when the key is not in the record (a KMS port); default: the record's key. */
19
+ signer?: Signer;
20
+ /** W1c — the loop is WOKEN (serve): the first pass takes its cursor from the message that woke it, never from "now"
21
+ * (a cold Container starting BECAUSE a message arrived must not skip that message). Default: from "now" at start. */
22
+ woken?: boolean;
23
+ log?: (line: string) => void;
24
+ onTurn?: (t: TurnReport) => void;
25
+ }
26
+ export interface TurnReport {
27
+ messageId: string;
28
+ from: string;
29
+ fromName: string | null;
30
+ conversationId: string;
31
+ prompt: string;
32
+ answer: string;
33
+ reply: string;
34
+ parkedRunRef?: string;
35
+ /** Spec 400 W2a — the reply went through under the standing grant: the child mandate the runtime derived for it. */
36
+ underStandingGrant?: {
37
+ childRef: string;
38
+ standingRef: string;
39
+ };
40
+ }
41
+ export interface InboxMessage {
42
+ id: string;
43
+ conversationId: string;
44
+ from: string;
45
+ fromName: string | null;
46
+ mine: boolean;
47
+ createdAt: string;
48
+ text: string;
49
+ actor?: string;
50
+ }
51
+ /** The context the agent gets with every prompt — who it is, where it stands, what waits on whom (§5.3). */
52
+ export declare function promptFor(rec: RuntimeMemberRecordV1, m: InboxMessage): string;
53
+ export declare class RuntimeMemberLoop {
54
+ private readonly o;
55
+ readonly rec: RuntimeMemberRecordV1;
56
+ private readonly host;
57
+ private readonly mcp;
58
+ private readonly sessions;
59
+ private readonly log;
60
+ private cursor;
61
+ private busy;
62
+ private started;
63
+ constructor(o: LoopOptions);
64
+ get cursorNow(): string | undefined;
65
+ private ask;
66
+ /** Start the agent; take the cursor from "now" unless one was given — a runtime that joins today does not answer last month. */
67
+ start(): Promise<void>;
68
+ private sessionFor;
69
+ /** One pass: everything since the cursor, each message from someone else answered. Serialized — a wake that lands
70
+ * while a pass runs waits for it (the cursor is the dedupe; two wakes for one message cost one turn). */
71
+ pollOnce(maxTurns?: number, wake?: {
72
+ messageId?: string;
73
+ }): Promise<TurnReport[]>;
74
+ private pass;
75
+ private turn;
76
+ stop(): Promise<void>;
77
+ }
78
+ //# sourceMappingURL=loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"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"}