@sentropic/h2a 0.97.5 → 0.97.7

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "h2a",
3
3
  "description": "H2A coordination with one MCP endpoint (including Track read tools) and the H2A, Track, and Harness operating skills.",
4
- "version": "0.97.5",
4
+ "version": "0.97.7",
5
5
  "author": {
6
6
  "name": "Fabien Antoine"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "h2a",
3
- "version": "0.97.5",
3
+ "version": "0.97.7",
4
4
  "description": "Coordinate Claude, Codex and other CLI agents through the local h2a bus, objective loops and track system of record.",
5
5
  "author": {
6
6
  "name": "Fabien Antoine"
package/dist/index.d.ts CHANGED
@@ -131,6 +131,6 @@ export declare const H2A_CLI_ADAPTER: {
131
131
  readonly corePackageName: "@sentropic/h2a";
132
132
  readonly protocol: "sentropic.h2a";
133
133
  readonly hosts: readonly [import("./hosts/codex.js").H2AConfigurableHostDescriptor, import("./hosts/codex.js").H2AConfigurableHostDescriptor, import("./hosts/codex.js").H2AConfigurableHostDescriptor, import("./hosts/codex.js").H2AConfigurableHostDescriptor, import("./hosts/codex.js").H2AConfigurableHostDescriptor, import("./hosts/codex.js").H2AConfigurableHostDescriptor, import("./hosts/codex.js").H2AConfigurableHostDescriptor];
134
- readonly mcpToolNames: readonly ["h2a_register_instance", "h2a_discover_instances", "h2a_read_payload", "h2a_identity_status", "h2a_open_negotiation", "h2a_offer", "h2a_counteroffer", "h2a_sign", "h2a_stabilize", "h2a_attest_comprehension", "h2a_declare_conflit_interet", "h2a_conflict_posture", "h2a_inbox", "h2a_send", "h2a_append_journal", "h2a_escalate", "h2a_session_open", "h2a_session_close", "h2a_discover_sessions", "h2a_nhi_report", "h2a_nhi_inventory", "h2a_nhi_attest", "h2a_nhi_offboard", "h2a_nhi_export", "h2a_blockage_raise", "h2a_blockage_list", "h2a_blockage_resolve", "h2a_conductor", "h2a_conductor_claim", "h2a_conductor_release", "h2a_conductor_launch_check", "h2a_conductor_launch", "h2a_run", "h2a_loop_create", "h2a_loop_join", "h2a_loop_report", "h2a_loop_done", "h2a_loop_stop", "h2a_loop_list", "h2a_loop_status", "track_report", "track_snapshot", "track_query", "track_validate", "track_audit", "track_branch_provenance", "track_freshness", "track_external_deps", "track_status", "track_verification_runs", "track_scope_validate", "track_cursor", "track_canevas", "track_amendment_trace", "track_workspace_activity"];
134
+ readonly mcpToolNames: readonly ["h2a_register_instance", "h2a_discover_instances", "h2a_read_payload", "h2a_identity_status", "h2a_open_negotiation", "h2a_offer", "h2a_counteroffer", "h2a_sign", "h2a_stabilize", "h2a_attest_comprehension", "h2a_declare_conflit_interet", "h2a_conflict_posture", "h2a_inbox", "h2a_send", "h2a_drive_consent_request", "h2a_drive_consent_respond", "h2a_drive_consent_cosign", "h2a_drive_consent_revoke", "h2a_drive_consent_status", "h2a_append_journal", "h2a_escalate", "h2a_session_open", "h2a_session_close", "h2a_discover_sessions", "h2a_nhi_report", "h2a_nhi_inventory", "h2a_nhi_attest", "h2a_nhi_offboard", "h2a_nhi_export", "h2a_blockage_raise", "h2a_blockage_list", "h2a_blockage_resolve", "h2a_conductor", "h2a_conductor_claim", "h2a_conductor_release", "h2a_conductor_launch_check", "h2a_conductor_launch", "h2a_run", "h2a_loop_create", "h2a_loop_join", "h2a_loop_report", "h2a_loop_done", "h2a_loop_stop", "h2a_loop_list", "h2a_loop_status", "track_report", "track_snapshot", "track_query", "track_validate", "track_audit", "track_branch_provenance", "track_freshness", "track_external_deps", "track_status", "track_verification_runs", "track_scope_validate", "track_cursor", "track_canevas", "track_amendment_trace", "track_workspace_activity"];
135
135
  };
136
136
  //# sourceMappingURL=index.d.ts.map
package/dist/mcp.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const H2A_CLI_MCP_TOOL_NAMES: readonly ["h2a_register_instance", "h2a_discover_instances", "h2a_read_payload", "h2a_identity_status", "h2a_open_negotiation", "h2a_offer", "h2a_counteroffer", "h2a_sign", "h2a_stabilize", "h2a_attest_comprehension", "h2a_declare_conflit_interet", "h2a_conflict_posture", "h2a_inbox", "h2a_send", "h2a_append_journal", "h2a_escalate", "h2a_session_open", "h2a_session_close", "h2a_discover_sessions", "h2a_nhi_report", "h2a_nhi_inventory", "h2a_nhi_attest", "h2a_nhi_offboard", "h2a_nhi_export", "h2a_blockage_raise", "h2a_blockage_list", "h2a_blockage_resolve", "h2a_conductor", "h2a_conductor_claim", "h2a_conductor_release", "h2a_conductor_launch_check", "h2a_conductor_launch", "h2a_run", "h2a_loop_create", "h2a_loop_join", "h2a_loop_report", "h2a_loop_done", "h2a_loop_stop", "h2a_loop_list", "h2a_loop_status", "track_report", "track_snapshot", "track_query", "track_validate", "track_audit", "track_branch_provenance", "track_freshness", "track_external_deps", "track_status", "track_verification_runs", "track_scope_validate", "track_cursor", "track_canevas", "track_amendment_trace", "track_workspace_activity"];
1
+ export declare const H2A_CLI_MCP_TOOL_NAMES: readonly ["h2a_register_instance", "h2a_discover_instances", "h2a_read_payload", "h2a_identity_status", "h2a_open_negotiation", "h2a_offer", "h2a_counteroffer", "h2a_sign", "h2a_stabilize", "h2a_attest_comprehension", "h2a_declare_conflit_interet", "h2a_conflict_posture", "h2a_inbox", "h2a_send", "h2a_drive_consent_request", "h2a_drive_consent_respond", "h2a_drive_consent_cosign", "h2a_drive_consent_revoke", "h2a_drive_consent_status", "h2a_append_journal", "h2a_escalate", "h2a_session_open", "h2a_session_close", "h2a_discover_sessions", "h2a_nhi_report", "h2a_nhi_inventory", "h2a_nhi_attest", "h2a_nhi_offboard", "h2a_nhi_export", "h2a_blockage_raise", "h2a_blockage_list", "h2a_blockage_resolve", "h2a_conductor", "h2a_conductor_claim", "h2a_conductor_release", "h2a_conductor_launch_check", "h2a_conductor_launch", "h2a_run", "h2a_loop_create", "h2a_loop_join", "h2a_loop_report", "h2a_loop_done", "h2a_loop_stop", "h2a_loop_list", "h2a_loop_status", "track_report", "track_snapshot", "track_query", "track_validate", "track_audit", "track_branch_provenance", "track_freshness", "track_external_deps", "track_status", "track_verification_runs", "track_scope_validate", "track_cursor", "track_canevas", "track_amendment_trace", "track_workspace_activity"];
2
2
  //# sourceMappingURL=mcp.d.ts.map
package/dist/mcp.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,omCA0DzB,CAAC"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,kvCA+DzB,CAAC"}
package/dist/mcp.js CHANGED
@@ -13,6 +13,11 @@ export const H2A_CLI_MCP_TOOL_NAMES = [
13
13
  "h2a_conflict_posture",
14
14
  "h2a_inbox",
15
15
  "h2a_send",
16
+ "h2a_drive_consent_request",
17
+ "h2a_drive_consent_respond",
18
+ "h2a_drive_consent_cosign",
19
+ "h2a_drive_consent_revoke",
20
+ "h2a_drive_consent_status",
16
21
  "h2a_append_journal",
17
22
  "h2a_escalate",
18
23
  "h2a_session_open",
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,uBAAuB;IACvB,wBAAwB;IACxB,kBAAkB;IAClB,qBAAqB;IACrB,sBAAsB;IACtB,WAAW;IACX,kBAAkB;IAClB,UAAU;IACV,eAAe;IACf,0BAA0B;IAC1B,6BAA6B;IAC7B,sBAAsB;IACtB,WAAW;IACX,UAAU;IACV,oBAAoB;IACpB,cAAc;IACd,kBAAkB;IAClB,mBAAmB;IACnB,uBAAuB;IACvB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,oBAAoB;IACpB,mBAAmB;IACnB,sBAAsB;IACtB,eAAe;IACf,qBAAqB;IACrB,uBAAuB;IACvB,4BAA4B;IAC5B,sBAAsB;IACtB,SAAS;IACT,iBAAiB;IACjB,eAAe;IACf,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,6EAA6E;IAC7E,uEAAuE;IACvE,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,yBAAyB;IACzB,iBAAiB;IACjB,qBAAqB;IACrB,cAAc;IACd,yBAAyB;IACzB,sBAAsB;IACtB,cAAc;IACd,eAAe;IACf,uBAAuB;IACvB,0BAA0B;CAClB,CAAC"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,uBAAuB;IACvB,wBAAwB;IACxB,kBAAkB;IAClB,qBAAqB;IACrB,sBAAsB;IACtB,WAAW;IACX,kBAAkB;IAClB,UAAU;IACV,eAAe;IACf,0BAA0B;IAC1B,6BAA6B;IAC7B,sBAAsB;IACtB,WAAW;IACX,UAAU;IACV,2BAA2B;IAC3B,2BAA2B;IAC3B,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;IAC1B,oBAAoB;IACpB,cAAc;IACd,kBAAkB;IAClB,mBAAmB;IACnB,uBAAuB;IACvB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,oBAAoB;IACpB,mBAAmB;IACnB,sBAAsB;IACtB,eAAe;IACf,qBAAqB;IACrB,uBAAuB;IACvB,4BAA4B;IAC5B,sBAAsB;IACtB,SAAS;IACT,iBAAiB;IACjB,eAAe;IACf,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,6EAA6E;IAC7E,uEAAuE;IACvE,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,yBAAyB;IACzB,iBAAiB;IACjB,qBAAqB;IACrB,cAAc;IACd,yBAAyB;IACzB,sBAAsB;IACtB,cAAc;IACd,eAAe;IACf,uBAAuB;IACvB,0BAA0B;CAClB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { LocalStore } from '../local-files/store.js';
2
+ import type { H2ASendSigner } from '../send.js';
3
+ export declare const CONSENT_TOOLS: readonly ["h2a_drive_consent_request", "h2a_drive_consent_respond", "h2a_drive_consent_cosign", "h2a_drive_consent_revoke", "h2a_drive_consent_status"];
4
+ /** The signer comes only from the trusted MCP sidecar, never tool arguments. */
5
+ export declare function handleDriveConsent(store: LocalStore, signer: H2ASendSigner | undefined, name: string, args?: Record<string, unknown>): {
6
+ content: {
7
+ type: "text";
8
+ text: string;
9
+ }[];
10
+ } | {
11
+ isError: true;
12
+ content: {
13
+ type: "text";
14
+ text: string;
15
+ }[];
16
+ };
17
+ //# sourceMappingURL=consent-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent-tools.d.ts","sourceRoot":"","sources":["../../../src/runtime/drive/consent-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAG9C,eAAO,MAAM,aAAa,yJAAsJ,CAAC;AAQjL,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,KAAK,EAAC,UAAU,EAAC,MAAM,EAAC,aAAa,GAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,GAAC,MAAM,CAAC,MAAM,EAAC,OAAO,CAAI;;;;;;;;;;;EAuD5H"}
@@ -0,0 +1,102 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { computeHash, signCanonical } from '@sentropic/h2a';
3
+ import { consentPairId, consentScope, evidence, instant, verified, DRIVE_CONSENT_MAX_ANSWER_MS, DRIVE_CONSENT_MAX_GRANT_MS } from './consent.js';
4
+ export const CONSENT_TOOLS = ['h2a_drive_consent_request', 'h2a_drive_consent_respond', 'h2a_drive_consent_cosign', 'h2a_drive_consent_revoke', 'h2a_drive_consent_status'];
5
+ const fields = {
6
+ h2a_drive_consent_request: ['to', 'answerBy', 'requestedNotAfter', 'purpose'],
7
+ h2a_drive_consent_respond: ['from', 'requestId', 'decision', 'notBefore', 'notAfter', 'reason'],
8
+ h2a_drive_consent_cosign: ['from', 'to', 'grantId'],
9
+ h2a_drive_consent_revoke: ['from', 'to', 'requestId', 'reason'],
10
+ h2a_drive_consent_status: ['from', 'to']
11
+ };
12
+ /** The signer comes only from the trusted MCP sidecar, never tool arguments. */
13
+ export function handleDriveConsent(store, signer, name, args = {}) {
14
+ try {
15
+ for (const key of Object.keys(args))
16
+ if (!fields[name]?.includes(key))
17
+ throw Error('unsupported argument: ' + key);
18
+ const text = (key) => { if (typeof args[key] !== 'string' || !args[key])
19
+ throw Error('required argument: ' + key); return args[key]; };
20
+ if (name === 'h2a_drive_consent_status')
21
+ return result(store.findDriveConsent(text('from'), text('to')));
22
+ if (!signer)
23
+ throw Error('consent-principal-unavailable: no bound signing session');
24
+ const identity = store.findInstance(signer.instance);
25
+ if (!identity || identity.id !== signer.instance)
26
+ throw Error('consent-invalid: bound identity not registered');
27
+ const now = Date.now(), at = new Date(now).toISOString();
28
+ let from = name === 'h2a_drive_consent_request' ? signer.instance : text('from');
29
+ let to = name === 'h2a_drive_consent_respond' ? signer.instance : text('to');
30
+ const a = store.findInstance(from), b = store.findInstance(to);
31
+ if (!a || !b)
32
+ throw Error('missing-registration');
33
+ const bindings = { from, to, ...(a.agentUuid ? { fromAgentUuid: a.agentUuid } : {}), ...(b.agentUuid ? { toAgentUuid: b.agentUuid } : {}) };
34
+ let payload, type;
35
+ const entries = store.readDriveConsentChain(from, to);
36
+ if (name === 'h2a_drive_consent_request') {
37
+ const answerBy = text('answerBy'), requestedNotAfter = text('requestedNotAfter');
38
+ if (!(instant(answerBy) > now && instant(answerBy) - now <= DRIVE_CONSENT_MAX_ANSWER_MS && instant(requestedNotAfter) >= instant(answerBy) && instant(requestedNotAfter) - now <= DRIVE_CONSENT_MAX_GRANT_MS + DRIVE_CONSENT_MAX_ANSWER_MS))
39
+ throw Error('consent-invalid: dates');
40
+ payload = { kind: 'h2a.drive.consent.request', v: 1, requestId: randomUUID(), ...bindings, scope: consentScope, createdAt: at, answerBy, requestedNotAfter, ...(args.purpose !== undefined ? { purpose: args.purpose } : {}) };
41
+ type = 'propose';
42
+ }
43
+ else if (name === 'h2a_drive_consent_cosign') {
44
+ if (b.principal === undefined || signer.instance !== b.principal)
45
+ throw Error('consent-principal-unavailable: session is not the registered principal');
46
+ const grant = entries.map(e => e.body).filter(evidence).find(e => e.payload.kind === 'h2a.drive.consent.grant' && computeHash(e.payload) === text('grantId'));
47
+ if (!grant || !verified(store, grant.payload, grant.signature, to))
48
+ throw Error('consent-invalid: target grant');
49
+ const coSignature = signCanonical(grant.payload, { by: signer.instance, privateKeyPem: signer.privateKeyPem });
50
+ if (!verified(store, grant.payload, coSignature, b.principal))
51
+ throw Error('consent-principal-unavailable: no active principal signing key');
52
+ const projection = store.recordDriveConsentEnvelope({ id: randomUUID(), type: 'accept', actor: { instance: to, role: 'AGENTS', scope: 'drive-consent' }, negotiationId: consentPairId(from, to), createdAt: at, body: { ...grant, coSignature } });
53
+ return result(projection);
54
+ }
55
+ else if (name === 'h2a_drive_consent_revoke' && args.requestId === undefined) {
56
+ if (signer.instance !== from && signer.instance !== to)
57
+ throw Error('consent-invalid: parties only');
58
+ const live = entries.map(e => e.body).filter(evidence).filter(e => e.payload.kind === 'h2a.drive.consent.request' && instant(e.payload.requestedNotAfter) > now && verified(store, e.payload, e.signature, from, true));
59
+ const notAfter = Math.max(now, ...live.map(e => instant(e.payload.requestedNotAfter)));
60
+ payload = { kind: 'h2a.drive.consent.revocation', v: 1, ...bindings, pair: true, at, notAfter: new Date(notAfter).toISOString(), ...(args.reason !== undefined ? { reason: args.reason } : {}) };
61
+ type = 'withdraw';
62
+ }
63
+ else {
64
+ const requestId = text('requestId');
65
+ const request = entries.map(e => e.body).filter(evidence).find(e => e.payload.kind === 'h2a.drive.consent.request' && e.payload.requestId === requestId);
66
+ if (!request)
67
+ throw Error('consent-invalid: unknown request');
68
+ const common = { v: 1, requestId, requestHash: computeHash(request.payload), ...bindings };
69
+ if (name === 'h2a_drive_consent_revoke') {
70
+ if (signer.instance !== from && signer.instance !== to)
71
+ throw Error('consent-invalid: parties only');
72
+ payload = { kind: 'h2a.drive.consent.revocation', ...common, at, ...(args.reason !== undefined ? { reason: args.reason } : {}) };
73
+ type = 'withdraw';
74
+ }
75
+ else if (text('decision') === 'refuse') {
76
+ payload = { kind: 'h2a.drive.consent.refusal', ...common, at, ...(args.reason !== undefined ? { reason: args.reason } : {}) };
77
+ type = 'reject';
78
+ }
79
+ else if (text('decision') === 'grant') {
80
+ if (b.principal !== undefined && (!store.findInstance(b.principal) || !store.listInstanceKeys(b.principal).length))
81
+ throw Error('consent-principal-unavailable: no active principal key; no provisioning');
82
+ if (entries.some(e => evidence(e.body) && e.body.payload.requestId === requestId && ['h2a.drive.consent.refusal', 'h2a.drive.consent.revocation', 'h2a.drive.consent.grant'].includes(e.body.payload.kind)))
83
+ throw Error('consent-invalid: already decided');
84
+ const notBefore = text('notBefore'), notAfter = text('notAfter');
85
+ if (now >= instant(request.payload.answerBy) || instant(notBefore) < now || !(instant(notAfter) > instant(notBefore)) || instant(notAfter) - instant(notBefore) > DRIVE_CONSENT_MAX_GRANT_MS || instant(notAfter) > instant(request.payload.requestedNotAfter))
86
+ throw Error('consent-invalid: grant dates');
87
+ payload = { kind: 'h2a.drive.consent.grant', ...common, scope: consentScope, issuedAt: at, notBefore, notAfter, ...(b.principal !== undefined ? { principal: b.principal } : {}) };
88
+ type = 'accept';
89
+ }
90
+ else
91
+ throw Error('consent-invalid: decision');
92
+ }
93
+ const signature = signCanonical(payload, { by: signer.instance, privateKeyPem: signer.privateKeyPem });
94
+ const projection = store.recordDriveConsentEnvelope({ id: randomUUID(), type, actor: { instance: signer.instance, role: identity.roles[0] ?? 'AGENTS', scope: 'drive-consent' }, negotiationId: consentPairId(from, to), createdAt: at, body: { kind: String(payload.kind), payload, signature } });
95
+ return result({ payload, projection });
96
+ }
97
+ catch (error) {
98
+ return { isError: true, content: [{ type: 'text', text: error instanceof Error ? error.message : String(error) }] };
99
+ }
100
+ }
101
+ function result(value) { return { content: [{ type: 'text', text: JSON.stringify(value) }] }; }
102
+ //# sourceMappingURL=consent-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent-tools.js","sourceRoot":"","sources":["../../../src/runtime/drive/consent-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /** Pair/time consent. The journal, not negotiation status or inboxes, is authority. */
2
+ import { type H2AJournalEntry, type H2ASignature } from '@sentropic/h2a';
3
+ import type { LocalStore } from '../local-files/store.js';
4
+ export declare const DRIVE_CONSENT_DEFAULT_ANSWER_MS: number;
5
+ export declare const DRIVE_CONSENT_MAX_ANSWER_MS: number;
6
+ export declare const DRIVE_CONSENT_DEFAULT_GRANT_MS: number;
7
+ export declare const DRIVE_CONSENT_MAX_GRANT_MS: number;
8
+ export declare const DRIVE_CONSENT_LIMIT = "Signatures prove active-key possession, not intent. Source: owner build brief decision 2, 2026-09-24: earlier measurement of 53,904 private-key files under one OS account in /home/antoinefa/h2a-workspace/.h2a/keys, including a direct cross-lane key read. Source: ~/h2a-workspace/.h2a/registry/instances.jsonl, count 2026-09-24: 0 / 26,964 live registrations carry a principal, so conditional co-signing is inert on that fleet. Source: ~/h2a-workspace/.h2a/keys/, measurement 2026-09-24: 26,964 private keys, mode 0600, all owned by the current uid; any same-uid lane can read a principal key, so co-signature is explicit but NOT attributable to human intent. Out-of-band principal custody does not exist; per-agent custody deferred to Track 01M38WH19VE7VGW8QY0P9NHHVX.";
9
+ export type ConsentReason = 'unauthorized' | 'consent-pending' | 'consent-refused' | 'consent-expired' | 'consent-revoked' | 'consent-invalid' | 'consent-unavailable' | 'consent-principal-unavailable';
10
+ export type ConsentDecision = {
11
+ ok: true;
12
+ via: 'consent';
13
+ grantId: string;
14
+ requestId: string;
15
+ notAfter: string;
16
+ principalDecision: 'principal-absent' | 'co-signed';
17
+ } | {
18
+ ok: false;
19
+ reason: ConsentReason;
20
+ };
21
+ export interface ConsentProjection {
22
+ decision: ConsentDecision;
23
+ anomalies: string[];
24
+ requests: number;
25
+ limit: typeof DRIVE_CONSENT_LIMIT;
26
+ }
27
+ export interface ConsentEvidence {
28
+ kind: string;
29
+ payload: Record<string, unknown>;
30
+ signature: H2ASignature;
31
+ coSignature?: H2ASignature;
32
+ }
33
+ export declare const consentPairId: (from: string, to: string) => string;
34
+ export declare const isConsentId: (id: string) => boolean;
35
+ export declare const consentScope: {
36
+ readonly action: "drive.instruction";
37
+ readonly direction: "from->to";
38
+ };
39
+ export declare function instant(value: unknown): number;
40
+ export declare function evidence(x: unknown): x is ConsentEvidence;
41
+ type ConsentReader = Pick<LocalStore, 'findInstance' | 'listInstanceKeys' | 'listKeyEvents'>;
42
+ export declare function verified(store: ConsentReader, payload: unknown, signature: H2ASignature | undefined, by: string, historical?: boolean): boolean;
43
+ /** No authority may depend on writer-supplied policy or cached verified flags. */
44
+ export declare function projectConsent(store: ConsentReader, from: string, to: string, entries: readonly H2AJournalEntry<unknown>[], now: number): ConsentProjection;
45
+ export {};
46
+ //# sourceMappingURL=consent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../../src/runtime/drive/consent.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAgC,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,eAAO,MAAM,+BAA+B,QAAiB,CAAC;AAC9D,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAC1D,eAAO,MAAM,8BAA8B,QAAiB,CAAC;AAC7D,eAAO,MAAM,0BAA0B,QAAsB,CAAC;AAC9D,eAAO,MAAM,mBAAmB,qwBAAqwB,CAAC;AAStyB,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,qBAAqB,GAAG,+BAA+B,CAAC;AACzM,MAAM,MAAM,eAAe,GAAG;IAAC,EAAE,EAAC,IAAI,CAAC;IAAA,GAAG,EAAC,SAAS,CAAC;IAAA,OAAO,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,iBAAiB,EAAC,kBAAkB,GAAC,WAAW,CAAA;CAAC,GAAG;IAAC,EAAE,EAAC,KAAK,CAAC;IAAA,MAAM,EAAC,aAAa,CAAA;CAAC,CAAC;AACzL,MAAM,WAAW,iBAAiB;IAAG,QAAQ,EAAC,eAAe,CAAC;IAAC,SAAS,EAAC,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,OAAO,mBAAmB,CAAC;CAAE;AACvI,MAAM,WAAW,eAAe;IAAE,IAAI,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,MAAM,CAAC,MAAM,EAAC,OAAO,CAAC,CAAC;IAAA,SAAS,EAAC,YAAY,CAAC;IAAA,WAAW,CAAC,EAAC,YAAY,CAAC;CAAC;AAC/H,eAAO,MAAM,aAAa,GAAI,MAAK,MAAM,EAAC,IAAG,MAAM,KAAE,MAAiD,CAAC;AACvG,eAAO,MAAM,WAAW,GAAI,IAAG,MAAM,KAAE,OAA6E,CAAC;AACrH,eAAO,MAAM,YAAY;;;CAA6D,CAAC;AACvF,wBAAgB,OAAO,CAAC,KAAK,EAAC,OAAO,GAAE,MAAM,CAG5C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAC,OAAO,GAAE,CAAC,IAAI,eAAe,CAEvD;AACD,KAAK,aAAa,GAAC,IAAI,CAAC,UAAU,EAAC,cAAc,GAAC,kBAAkB,GAAC,eAAe,CAAC,CAAC;AACtF,wBAAgB,QAAQ,CAAC,KAAK,EAAC,aAAa,EAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,YAAY,GAAC,SAAS,EAAC,EAAE,EAAC,MAAM,EAAC,UAAU,UAAM,GAAE,OAAO,CAIhI;AACD,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,KAAK,EAAC,aAAa,EAAC,IAAI,EAAC,MAAM,EAAC,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,EAAC,GAAG,EAAC,MAAM,GAAE,iBAAiB,CAsEjJ"}
@@ -0,0 +1,150 @@
1
+ /** Pair/time consent. The journal, not negotiation status or inboxes, is authority. */
2
+ import { computeHash, verifyCanonical } from '@sentropic/h2a';
3
+ export const DRIVE_CONSENT_DEFAULT_ANSWER_MS = 15 * 60 * 1000;
4
+ export const DRIVE_CONSENT_MAX_ANSWER_MS = 60 * 60 * 1000;
5
+ export const DRIVE_CONSENT_DEFAULT_GRANT_MS = 60 * 60 * 1000;
6
+ export const DRIVE_CONSENT_MAX_GRANT_MS = 24 * 60 * 60 * 1000;
7
+ export const DRIVE_CONSENT_LIMIT = 'Signatures prove active-key possession, not intent. Source: owner build brief decision 2, 2026-09-24: earlier measurement of 53,904 private-key files under one OS account in /home/antoinefa/h2a-workspace/.h2a/keys, including a direct cross-lane key read. Source: ~/h2a-workspace/.h2a/registry/instances.jsonl, count 2026-09-24: 0 / 26,964 live registrations carry a principal, so conditional co-signing is inert on that fleet. Source: ~/h2a-workspace/.h2a/keys/, measurement 2026-09-24: 26,964 private keys, mode 0600, all owned by the current uid; any same-uid lane can read a principal key, so co-signature is explicit but NOT attributable to human intent. Out-of-band principal custody does not exist; per-agent custody deferred to Track 01M38WH19VE7VGW8QY0P9NHHVX.';
8
+ export const consentPairId = (from, to) => 'drive-consent:' + computeHash({ from, to });
9
+ export const isConsentId = (id) => id.startsWith('drive-consent:') || id.startsWith('drive-consent-');
10
+ export const consentScope = { action: 'drive.instruction', direction: 'from->to' };
11
+ export function instant(value) {
12
+ if (typeof value !== 'string' || !/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$/.test(value))
13
+ return NaN;
14
+ const n = Date.parse(value);
15
+ return Number.isFinite(n) && new Date(n).toISOString() === value ? n : NaN;
16
+ }
17
+ function record(x) { return !!x && typeof x === 'object' && !Array.isArray(x); }
18
+ export function evidence(x) {
19
+ return record(x) && typeof x.kind === 'string' && record(x.payload) && record(x.signature);
20
+ }
21
+ export function verified(store, payload, signature, by, historical = false) {
22
+ if (!signature || signature.by !== by || signature.alg !== 'ed25519')
23
+ return false;
24
+ const keys = historical ? [...(store.findInstance(by)?.publicKeys ?? []), ...store.listKeyEvents().filter(k => k.instance === by && k.type === 'added').map(k => k.publicKey)] : store.listInstanceKeys(by);
25
+ return keys.some(key => { try {
26
+ return verifyCanonical(payload, signature, key);
27
+ }
28
+ catch {
29
+ return false;
30
+ } });
31
+ }
32
+ /** No authority may depend on writer-supplied policy or cached verified flags. */
33
+ export function projectConsent(store, from, to, entries, now) {
34
+ const anomalies = [];
35
+ const done = (decision, requests = 0) => ({ decision, anomalies, requests, limit: DRIVE_CONSENT_LIMIT });
36
+ if (!Number.isFinite(now))
37
+ return done({ ok: false, reason: 'consent-unavailable' });
38
+ const a = store.findInstance(from), b = store.findInstance(to);
39
+ if (!a || !b)
40
+ return done({ ok: false, reason: 'consent-invalid' });
41
+ const events = [];
42
+ for (const entry of entries) {
43
+ if (record(entry.body) && entry.body.kind === 'drive-consent.audit')
44
+ continue;
45
+ if (!evidence(entry.body) || entry.body.kind !== entry.body.payload.kind || entry.negotiationId !== consentPairId(from, to)) {
46
+ anomalies.push(entry.id);
47
+ continue;
48
+ }
49
+ const p = entry.body.payload;
50
+ if (p.v !== 1 || p.from !== from || p.to !== to || !['h2a.drive.consent.request', 'h2a.drive.consent.grant', 'h2a.drive.consent.refusal', 'h2a.drive.consent.revocation'].includes(String(p.kind))) {
51
+ anomalies.push(entry.id);
52
+ continue;
53
+ }
54
+ events.push({ body: entry.body, entry });
55
+ }
56
+ const bound = (p) => p.fromAgentUuid === a.agentUuid && p.toAgentUuid === b.agentUuid;
57
+ const requests = events.filter(({ body, entry }) => {
58
+ const p = body.payload;
59
+ if (p.kind !== 'h2a.drive.consent.request')
60
+ return false;
61
+ const created = instant(p.createdAt), answer = instant(p.answerBy), end = instant(p.requestedNotAfter);
62
+ const valid = bound(p) && typeof p.requestId === 'string' && /^[a-f0-9-]{32,36}$/.test(p.requestId) && record(p.scope) && computeHash(p.scope) === computeHash(consentScope) && answer > created && answer - created <= DRIVE_CONSENT_MAX_ANSWER_MS && end >= answer && end - created <= DRIVE_CONSENT_MAX_GRANT_MS + DRIVE_CONSENT_MAX_ANSWER_MS && (p.purpose === undefined || (typeof p.purpose === 'string' && Buffer.byteLength(p.purpose) <= 1024)) && verified(store, p, body.signature, from, true);
63
+ if (!valid)
64
+ anomalies.push(entry.id);
65
+ return valid;
66
+ });
67
+ if (!requests.length)
68
+ return done({ ok: false, reason: events.length ? 'consent-invalid' : 'unauthorized' });
69
+ // Pair revocation is independent of journal order and overrides every
70
+ // conflicting live grant throughout the revoked requests' remaining window.
71
+ const pairRevoked = events.some(({ body, entry }) => {
72
+ const p = body.payload;
73
+ if (p.kind !== 'h2a.drive.consent.revocation' || p.pair !== true)
74
+ return false;
75
+ const at = instant(p.at), end = instant(p.notAfter), by = body.signature.by;
76
+ const valid = bound(p) && (by === from || by === to) && Number.isFinite(at) && end >= at && end - at <= DRIVE_CONSENT_MAX_GRANT_MS + DRIVE_CONSENT_MAX_ANSWER_MS && verified(store, p, body.signature, by, true);
77
+ if (!valid)
78
+ anomalies.push(entry.id);
79
+ return valid && now < end;
80
+ });
81
+ if (pairRevoked)
82
+ return done({ ok: false, reason: 'consent-revoked' }, requests.length);
83
+ const decisions = [];
84
+ for (const { body: requestBody } of requests) {
85
+ const request = requestBody.payload, hash = computeHash(request);
86
+ const related = events.filter(({ body }) => body.payload.requestId === request.requestId && body.payload.requestHash === hash);
87
+ const terminal = (kind, party) => related.some(({ body, entry }) => {
88
+ if (body.payload.kind !== kind)
89
+ return false;
90
+ const by = body.signature.by;
91
+ const valid = (by === to || (party && by === from)) && verified(store, body.payload, body.signature, by, true) && Number.isFinite(instant(body.payload.at));
92
+ if (!valid)
93
+ anomalies.push(entry.id);
94
+ return valid;
95
+ });
96
+ if (terminal('h2a.drive.consent.revocation', true)) {
97
+ decisions.push({ ok: false, reason: 'consent-revoked' });
98
+ continue;
99
+ }
100
+ if (terminal('h2a.drive.consent.refusal', false)) {
101
+ decisions.push({ ok: false, reason: 'consent-refused' });
102
+ continue;
103
+ }
104
+ const grants = related.filter(({ body, entry }) => {
105
+ const p = body.payload;
106
+ if (p.kind !== 'h2a.drive.consent.grant')
107
+ return false;
108
+ const start = instant(p.notBefore), end = instant(p.notAfter), issued = instant(p.issuedAt), committed = instant(entry.createdAt);
109
+ const valid = bound(p) && p.principal === b.principal && record(p.scope) && computeHash(p.scope) === computeHash(request.scope) && Number.isFinite(start) && end > start && end - start <= DRIVE_CONSENT_MAX_GRANT_MS && end <= instant(request.requestedNotAfter) && start >= issued && issued >= instant(request.createdAt) && issued < instant(request.answerBy) && committed >= issued && committed < instant(request.answerBy) && verified(store, p, body.signature, to);
110
+ if (!valid)
111
+ anomalies.push(entry.id);
112
+ return valid;
113
+ });
114
+ if (new Set(grants.map(g => computeHash(g.body.payload))).size > 1) {
115
+ decisions.push({ ok: false, reason: 'consent-invalid' });
116
+ continue;
117
+ }
118
+ if (!grants.length && b.principal !== undefined && related.some(({ body }) => body.payload.kind === 'h2a.drive.consent.grant' && body.payload.principal === undefined && verified(store, body.payload, body.signature, to))) {
119
+ decisions.push({ ok: false, reason: 'consent-principal-unavailable' });
120
+ continue;
121
+ }
122
+ if (!grants.length) {
123
+ decisions.push({ ok: false, reason: now >= instant(request.answerBy) ? 'consent-expired' : related.some(e => e.body.payload.kind === 'h2a.drive.consent.grant') ? 'consent-invalid' : 'consent-pending' });
124
+ continue;
125
+ }
126
+ const g = grants[0].body.payload;
127
+ if (now >= instant(g.notAfter)) {
128
+ decisions.push({ ok: false, reason: 'consent-expired' });
129
+ continue;
130
+ }
131
+ if (now < instant(g.notBefore)) {
132
+ decisions.push({ ok: false, reason: 'consent-pending' });
133
+ continue;
134
+ }
135
+ // Undefined is a separate successful policy branch, never co-signature-satisfied.
136
+ if (b.principal === undefined) {
137
+ decisions.push({ ok: true, via: 'consent', grantId: computeHash(g), requestId: String(request.requestId), notAfter: String(g.notAfter), principalDecision: 'principal-absent' });
138
+ continue;
139
+ }
140
+ if (!store.findInstance(b.principal) || !store.listInstanceKeys(b.principal).length || !grants.some(({ body }) => verified(store, g, body.coSignature, b.principal))) {
141
+ decisions.push({ ok: false, reason: 'consent-principal-unavailable' });
142
+ continue;
143
+ }
144
+ decisions.push({ ok: true, via: 'consent', grantId: computeHash(g), requestId: String(request.requestId), notAfter: String(g.notAfter), principalDecision: 'co-signed' });
145
+ }
146
+ const success = decisions.find(d => d.ok);
147
+ const priority = ['consent-revoked', 'consent-refused', 'consent-principal-unavailable', 'consent-invalid', 'consent-expired', 'consent-pending', 'unauthorized'];
148
+ return done(success ?? priority.map(reason => decisions.find(d => !d.ok && d.reason === reason)).find(Boolean) ?? { ok: false, reason: 'consent-invalid' }, requests.length);
149
+ }
150
+ //# sourceMappingURL=consent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent.js","sourceRoot":"","sources":["../../../src/runtime/drive/consent.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type Server } from "node:http";
2
2
  import { type H2ALaunchContext, type H2AReplayGuard, type H2ASignature } from "@sentropic/h2a";
3
+ import type { ConsentReason, ConsentDecision } from "./consent.js";
3
4
  import type { LocalStore } from "../local-files/store.js";
4
5
  import { type RelauncherRuntime } from "../drumbeat/relaunchers.js";
5
6
  export interface H2ADriveInstructionPayload {
@@ -35,8 +36,8 @@ export interface VerifySignedDriveInstructionOptions {
35
36
  readonly guard: H2AReplayGuard;
36
37
  readonly now?: number;
37
38
  }
38
- export type H2ADriveAuthorizeReason = "missing-registration" | "unauthorized";
39
- export type H2ADriveAuthorizeResult = {
39
+ export type H2ADriveAuthorizeReason = "missing-registration" | ConsentReason;
40
+ export type H2ADriveAuthorizeResult = ConsentDecision | {
40
41
  readonly ok: true;
41
42
  } | {
42
43
  readonly ok: false;
@@ -51,7 +52,7 @@ export type H2ADriveAcceptResult = {
51
52
  readonly reason: H2ADriveAcceptReason;
52
53
  };
53
54
  export interface AcceptDriveInstructionOptions {
54
- readonly store: Pick<LocalStore, "findInstance" | "listInstanceKeys">;
55
+ readonly store: Pick<LocalStore, "findInstance" | "listInstanceKeys"> & Partial<Pick<LocalStore, "findDriveConsent" | "commitDriveConsentAdmission">>;
55
56
  readonly guard: H2AReplayGuard;
56
57
  readonly expectedTo?: string;
57
58
  readonly now?: number;
@@ -138,11 +139,13 @@ export interface VerifyDriveOnReceiveOptions {
138
139
  readonly guard: H2AReplayGuard;
139
140
  readonly now?: number;
140
141
  }
141
- export declare function authorizeDrive(store: Pick<LocalStore, "findInstance">, request: {
142
+ export declare function authorizeDrive(store: Pick<LocalStore, "findInstance"> & Partial<Pick<LocalStore, "findDriveConsent">>, request: {
142
143
  readonly from: string;
143
144
  readonly to: string;
145
+ }, options?: {
146
+ now?: number;
144
147
  }): H2ADriveAuthorizeResult;
145
- export declare function verifyDriveOnReceive(store: Pick<LocalStore, "findInstance" | "listInstanceKeys">, line: string, options: VerifyDriveOnReceiveOptions): H2ADriveReceiveResult;
148
+ export declare function verifyDriveOnReceive(store: Pick<LocalStore, "findInstance" | "listInstanceKeys"> & Partial<Pick<LocalStore, "findDriveConsent" | "commitDriveConsentAdmission">>, line: string, options: VerifyDriveOnReceiveOptions): H2ADriveReceiveResult;
146
149
  export declare function acceptDriveInstruction(line: string, options: AcceptDriveInstructionOptions): Promise<H2ADriveAcceptResult>;
147
150
  export declare function loggingDriver(log?: (line: string) => void): H2ADriver;
148
151
  export declare function nativeBackchannelDriver(options?: NativeBackchannelDriverOptions): H2ADriver;
@@ -152,7 +155,7 @@ export declare function buildHeadlessDriveCommand(input: BuildHeadlessDriveComma
152
155
  export declare function headlessDriver(options?: DriverRuntimeOptions): H2ADriver;
153
156
  export declare function remoteDriveRejectionStatus(reason: H2ADriveRemoteReason): number;
154
157
  export declare function createRemoteDriveServer(options: RemoteDriveServerOptions): Server;
155
- export declare function remoteDriveServerForStore(store: Pick<LocalStore, "findInstance" | "listInstanceKeys">, options: RemoteDriveServerForStoreOptions): Server;
158
+ export declare function remoteDriveServerForStore(store: Pick<LocalStore, "findInstance" | "listInstanceKeys"> & Partial<Pick<LocalStore, "findDriveConsent" | "commitDriveConsentAdmission">>, options: RemoteDriveServerForStoreOptions): Server;
156
159
  export declare function chainDriver(...drivers: readonly H2ADriver[]): H2ADriver;
157
160
  /**
158
161
  * Return the most-recently-heartbeated launch context recorded for `instance`
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/drive/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAEtD,OAAO,EAQL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;CAClC;AAED,MAAM,MAAM,oBAAoB,GAC5B,WAAW,GACX,eAAe,GACf,eAAe,GACf,mBAAmB,GACnB,SAAS,GACT,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAElE,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;IACpE,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,GAAG,cAAc,CAAC;AAE9E,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GACrB;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAC5B,oBAAoB,GACpB,uBAAuB,GACvB,iBAAiB,GACjB,eAAe,CAAC;AAEpB,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAElE,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,GAAG,kBAAkB,CAAC,CAAC;IACtE,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC;CAC3C;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtF,MAAM,WAAW,8BAA8B;IAC7C,2GAA2G;IAC3G,QAAQ,CAAC,IAAI,CAAC,EAAE,CACd,OAAO,EAAE,eAAe,KACrB,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC;CAC3C;AAED,MAAM,MAAM,oBAAoB,GAC5B,oBAAoB,GACpB,cAAc,GACd,mBAAmB,CAAC;AAExB,MAAM,MAAM,oBAAoB,GAC5B;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,GACD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAElE,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,GAAG,kBAAkB,CAAC,CAAC;IACtE,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,CACf,OAAO,EAAE,0BAA0B,EACnC,IAAI,EAAE,MAAM,KACT,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,oFAAoF;IACpF,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;IAChC,gDAAgD;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,gCAAgC,GAAG,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;AA+DvF,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mCAAmC,GAC3C,MAAM,CAcR;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,GACX,4BAA4B,GAAG,SAAS,CAmB1C;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,mCAAmC,GAC3C,oBAAoB,CActB;AAED,MAAM,MAAM,qBAAqB,GAC7B,oBAAoB,GACpB,uBAAuB,GACvB,iBAAiB,CAAC;AAEtB,MAAM,MAAM,qBAAqB,GAC7B;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,GACD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAEnE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EACvC,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACtD,uBAAuB,CAUzB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,GAAG,kBAAkB,CAAC,EAC5D,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,2BAA2B,GACnC,qBAAqB,CAuBvB;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,oBAAoB,CAAC,CAuB/B;AAED,wBAAgB,aAAa,CAAC,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAsB,GAAG,SAAS,CAOtF;AAED,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,SAAS,CA0BX;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,GAC7B,SAAS,MAAM,EAAE,GAAG,SAAS,CAwC/B;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE,oBAAyB,GAAG,SAAS,CAyB7E;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,8BAA8B,GACpC,YAAY,GAAG,SAAS,CA6B1B;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,oBAAyB,GAAG,SAAS,CAoB5E;AAMD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAyB/E;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,CAoFjF;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,GAAG,kBAAkB,CAAC,EAC5D,OAAO,EAAE,gCAAgC,GACxC,MAAM,CAER;AAED,wBAAgB,WAAW,CAAC,GAAG,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CASvE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAIhG;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,GAAG,GAAE,MAAsB,EAC3B,OAAO,SAAkB,GACxB,gBAAgB,GAAG,SAAS,CAI9B;AAED,8EAA8E;AAC9E,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,GAAG,GAAE,MAAsB,EAC3B,OAAO,SAAkB,GACxB,gBAAgB,GAAG,SAAS,CAI9B;AAED,gFAAgF;AAChF,wBAAgB,wBAAwB,CACtC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,GAAG,GAAE,MAAsB,EAC3B,OAAO,SAAkB,GACxB,gBAAgB,GAAG,SAAS,CAG9B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/drive/index.ts"],"names":[],"mappings":"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"}
@@ -134,7 +134,7 @@ function canIssueMandate(reg) {
134
134
  return reg.roles.some((role) => H2A_AUTHORITY_MATRIX.MANDATE.roles.includes(role) &&
135
135
  canSignArtifactKind(role, "MANDATE"));
136
136
  }
137
- export function authorizeDrive(store, request) {
137
+ export function authorizeDrive(store, request, options) {
138
138
  const from = store.findInstance(request.from);
139
139
  const to = store.findInstance(request.to);
140
140
  if (!from || !to)
@@ -146,6 +146,14 @@ export function authorizeDrive(store, request) {
146
146
  if (hasSharedScope(from, to) && canIssueMandate(from)) {
147
147
  return { ok: true };
148
148
  }
149
+ if (store.findDriveConsent) {
150
+ try {
151
+ return store.findDriveConsent(request.from, request.to, options?.now).decision;
152
+ }
153
+ catch {
154
+ return { ok: false, reason: "consent-unavailable" };
155
+ }
156
+ }
149
157
  return { ok: false, reason: "unauthorized" };
150
158
  }
151
159
  export function verifyDriveOnReceive(store, line, options) {
@@ -165,9 +173,16 @@ export function verifyDriveOnReceive(store, line, options) {
165
173
  const auth = authorizeDrive(store, {
166
174
  from: verified.payload.from,
167
175
  to: verified.payload.to
168
- });
176
+ }, { now: options.now });
169
177
  if (!auth.ok)
170
178
  return auth;
179
+ if ("via" in auth) {
180
+ const admission = store.commitDriveConsentAdmission?.(verified.payload, parsed.signature, options.now);
181
+ if (!admission)
182
+ return { ok: false, reason: "consent-unavailable" };
183
+ if (!admission.ok)
184
+ return admission;
185
+ }
171
186
  return {
172
187
  ok: true,
173
188
  from: verified.payload.from,
@@ -192,9 +207,16 @@ export async function acceptDriveInstruction(line, options) {
192
207
  const authorized = authorizeDrive(options.store, {
193
208
  from: verified.payload.from,
194
209
  to: verified.payload.to
195
- });
210
+ }, { now: options.now });
196
211
  if (!authorized.ok)
197
212
  return authorized;
213
+ if ("via" in authorized) {
214
+ const admission = options.store.commitDriveConsentAdmission?.(verified.payload, parsed.signature, options.now);
215
+ if (!admission)
216
+ return { ok: false, reason: "consent-unavailable" };
217
+ if (!admission.ok)
218
+ return admission;
219
+ }
198
220
  const injected = await options.inject(verified.payload);
199
221
  if (!injected)
200
222
  return { ok: false, reason: "inject-failed" };
@@ -367,6 +389,12 @@ export function remoteDriveRejectionStatus(reason) {
367
389
  return 401;
368
390
  case "missing-registration":
369
391
  case "unauthorized":
392
+ case "consent-pending":
393
+ case "consent-refused":
394
+ case "consent-expired":
395
+ case "consent-revoked":
396
+ case "consent-invalid":
397
+ case "consent-principal-unavailable":
370
398
  case "target-mismatch":
371
399
  return 403;
372
400
  case "replayed":
@@ -374,6 +402,8 @@ export function remoteDriveRejectionStatus(reason) {
374
402
  case "expired":
375
403
  case "future":
376
404
  return 422;
405
+ case "consent-unavailable":
406
+ return 503;
377
407
  case "inject-failed":
378
408
  return 502;
379
409
  case "payload-too-large":