@sentropic/h2a 0.1.0 → 0.1.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.
- package/README.md +11 -0
- package/dist/abc.d.ts +199 -0
- package/dist/abc.d.ts.map +1 -0
- package/dist/abc.js +268 -0
- package/dist/abc.js.map +1 -0
- package/dist/artifacts.d.ts +10 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +147 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/authority.d.ts +21 -0
- package/dist/authority.d.ts.map +1 -0
- package/dist/authority.js +73 -0
- package/dist/authority.js.map +1 -0
- package/dist/canonical.d.ts +3 -0
- package/dist/canonical.d.ts.map +1 -0
- package/dist/canonical.js +38 -0
- package/dist/canonical.js.map +1 -0
- package/dist/contractual.d.ts +52 -0
- package/dist/contractual.d.ts.map +1 -0
- package/dist/contractual.js +126 -0
- package/dist/contractual.js.map +1 -0
- package/dist/escalation.d.ts +40 -0
- package/dist/escalation.d.ts.map +1 -0
- package/dist/escalation.js +114 -0
- package/dist/escalation.js.map +1 -0
- package/dist/fixtures-index.d.ts +16 -0
- package/dist/fixtures-index.d.ts.map +1 -0
- package/dist/fixtures-index.js +11 -0
- package/dist/fixtures-index.js.map +1 -0
- package/dist/governance-boundary.d.ts +118 -0
- package/dist/governance-boundary.d.ts.map +1 -0
- package/dist/governance-boundary.js +143 -0
- package/dist/governance-boundary.js.map +1 -0
- package/dist/index.d.ts +23 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/journal.d.ts +37 -0
- package/dist/journal.d.ts.map +1 -0
- package/dist/journal.js +73 -0
- package/dist/journal.js.map +1 -0
- package/dist/multi-human.d.ts +106 -0
- package/dist/multi-human.d.ts.map +1 -0
- package/dist/multi-human.js +116 -0
- package/dist/multi-human.js.map +1 -0
- package/dist/policy-precedence.d.ts +50 -0
- package/dist/policy-precedence.d.ts.map +1 -0
- package/dist/policy-precedence.js +98 -0
- package/dist/policy-precedence.js.map +1 -0
- package/dist/signature.d.ts +8 -0
- package/dist/signature.d.ts.map +1 -0
- package/dist/signature.js +39 -0
- package/dist/signature.js.map +1 -0
- package/dist/types.d.ts +105 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +12 -1
- package/dist/types.js.map +1 -1
- package/fixtures/authority.json +1 -0
- package/fixtures/contract.json +1 -0
- package/fixtures/enforcement-plan.json +1 -0
- package/fixtures/engagement.json +1 -0
- package/fixtures/mandate.json +1 -0
- package/fixtures/manifest.json +38 -0
- package/fixtures/policy.json +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export const H2A_MULTI_HUMAN_MODE_IDS = [
|
|
2
|
+
"PEER_DIALOGUE",
|
|
3
|
+
"DELEGATED_COORDINATION",
|
|
4
|
+
"SHARED_ENGAGEMENT",
|
|
5
|
+
"FEDERATED_EXECUTIF",
|
|
6
|
+
"CONSORTIUM_QUORUM",
|
|
7
|
+
"PUBLIC_AUTHORITY"
|
|
8
|
+
];
|
|
9
|
+
export const H2A_MULTI_HUMAN_MODES = Object.freeze({
|
|
10
|
+
PEER_DIALOGUE: Object.freeze({
|
|
11
|
+
id: "PEER_DIALOGUE",
|
|
12
|
+
label: "peer dialogue",
|
|
13
|
+
primaryChannel: "principal-principal",
|
|
14
|
+
primaryAuthorityKind: "PRINCIPAL",
|
|
15
|
+
requiresSharedEngagement: false,
|
|
16
|
+
requiresExecutiveScope: false,
|
|
17
|
+
requiresQuorumGovernance: false,
|
|
18
|
+
requiresExternalAuthority: false,
|
|
19
|
+
summary: "Informal PRINCIPAL-to-PRINCIPAL dialogue between mini-organizations; no shared operational charter yet."
|
|
20
|
+
}),
|
|
21
|
+
DELEGATED_COORDINATION: Object.freeze({
|
|
22
|
+
id: "DELEGATED_COORDINATION",
|
|
23
|
+
label: "delegated coordination",
|
|
24
|
+
primaryChannel: "conductor-conductor",
|
|
25
|
+
primaryAuthorityKind: "PRINCIPAL",
|
|
26
|
+
requiresSharedEngagement: false,
|
|
27
|
+
requiresExecutiveScope: false,
|
|
28
|
+
requiresQuorumGovernance: false,
|
|
29
|
+
requiresExternalAuthority: false,
|
|
30
|
+
summary: "Repeated operational coordination delegated to CONDUCTORs while each PRINCIPAL keeps local authority."
|
|
31
|
+
}),
|
|
32
|
+
SHARED_ENGAGEMENT: Object.freeze({
|
|
33
|
+
id: "SHARED_ENGAGEMENT",
|
|
34
|
+
label: "shared engagement",
|
|
35
|
+
primaryChannel: "shared-engagement",
|
|
36
|
+
primaryAuthorityKind: "PRINCIPAL",
|
|
37
|
+
requiresSharedEngagement: true,
|
|
38
|
+
requiresExecutiveScope: false,
|
|
39
|
+
requiresQuorumGovernance: false,
|
|
40
|
+
requiresExternalAuthority: false,
|
|
41
|
+
summary: "Shared charter with role bindings, controls, policies, success criteria, and its own journal."
|
|
42
|
+
}),
|
|
43
|
+
FEDERATED_EXECUTIF: Object.freeze({
|
|
44
|
+
id: "FEDERATED_EXECUTIF",
|
|
45
|
+
label: "federated executif",
|
|
46
|
+
primaryChannel: "executif-scope",
|
|
47
|
+
primaryAuthorityKind: "EXECUTIF",
|
|
48
|
+
requiresSharedEngagement: true,
|
|
49
|
+
requiresExecutiveScope: true,
|
|
50
|
+
requiresQuorumGovernance: false,
|
|
51
|
+
requiresExternalAuthority: false,
|
|
52
|
+
summary: "A higher scope has an EXECUTIF accountable for the activity without erasing local PRINCIPAL authority."
|
|
53
|
+
}),
|
|
54
|
+
CONSORTIUM_QUORUM: Object.freeze({
|
|
55
|
+
id: "CONSORTIUM_QUORUM",
|
|
56
|
+
label: "consortium quorum",
|
|
57
|
+
primaryChannel: "quorum-governance",
|
|
58
|
+
primaryAuthorityKind: "QUORUM",
|
|
59
|
+
requiresSharedEngagement: true,
|
|
60
|
+
requiresExecutiveScope: false,
|
|
61
|
+
requiresQuorumGovernance: true,
|
|
62
|
+
requiresExternalAuthority: false,
|
|
63
|
+
summary: "Peer organizations govern a shared scope through quorum or committee authority instead of one EXECUTIF."
|
|
64
|
+
}),
|
|
65
|
+
PUBLIC_AUTHORITY: Object.freeze({
|
|
66
|
+
id: "PUBLIC_AUTHORITY",
|
|
67
|
+
label: "public authority",
|
|
68
|
+
primaryChannel: "public-authority",
|
|
69
|
+
primaryAuthorityKind: "EXTERNAL_AUTHORITY",
|
|
70
|
+
requiresSharedEngagement: true,
|
|
71
|
+
requiresExecutiveScope: false,
|
|
72
|
+
requiresQuorumGovernance: false,
|
|
73
|
+
requiresExternalAuthority: true,
|
|
74
|
+
summary: "A public/regulatory/external authority can impose policy, receive evidence, or route recourse."
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
export function getMultiHumanMode(modeId) {
|
|
78
|
+
if (!H2A_MULTI_HUMAN_MODE_IDS.includes(modeId)) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
return H2A_MULTI_HUMAN_MODES[modeId];
|
|
82
|
+
}
|
|
83
|
+
function selectionFor(mode) {
|
|
84
|
+
return {
|
|
85
|
+
ok: true,
|
|
86
|
+
modeId: mode.id,
|
|
87
|
+
primaryChannel: mode.primaryChannel,
|
|
88
|
+
primaryAuthorityKind: mode.primaryAuthorityKind,
|
|
89
|
+
issues: []
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export function selectMultiHumanMode(request) {
|
|
93
|
+
if (!Number.isInteger(request.principalCount) || request.principalCount < 2) {
|
|
94
|
+
return {
|
|
95
|
+
ok: false,
|
|
96
|
+
issues: ["multi-human mode requires at least 2 PRINCIPAL scopes"]
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (request.externalAuthority) {
|
|
100
|
+
return selectionFor(H2A_MULTI_HUMAN_MODES.PUBLIC_AUTHORITY);
|
|
101
|
+
}
|
|
102
|
+
if (request.executiveScope) {
|
|
103
|
+
return selectionFor(H2A_MULTI_HUMAN_MODES.FEDERATED_EXECUTIF);
|
|
104
|
+
}
|
|
105
|
+
if (request.quorumGovernance) {
|
|
106
|
+
return selectionFor(H2A_MULTI_HUMAN_MODES.CONSORTIUM_QUORUM);
|
|
107
|
+
}
|
|
108
|
+
if (request.sharedCommitments) {
|
|
109
|
+
return selectionFor(H2A_MULTI_HUMAN_MODES.SHARED_ENGAGEMENT);
|
|
110
|
+
}
|
|
111
|
+
if (request.repeatedOperationalCoordination) {
|
|
112
|
+
return selectionFor(H2A_MULTI_HUMAN_MODES.DELEGATED_COORDINATION);
|
|
113
|
+
}
|
|
114
|
+
return selectionFor(H2A_MULTI_HUMAN_MODES.PEER_DIALOGUE);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=multi-human.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-human.js","sourceRoot":"","sources":["../src/multi-human.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { H2AAbcModelId } from "./abc.js";
|
|
2
|
+
export declare const H2A_POLICY_PRECEDENCE_TIERS: readonly ["public-authority", "contractual", "federated", "local"];
|
|
3
|
+
export declare const H2A_POLICY_PRECEDENCE_CONFLICT_DISPOSITIONS: readonly ["escalate-not-resolve"];
|
|
4
|
+
export type H2APolicyPrecedenceTier = (typeof H2A_POLICY_PRECEDENCE_TIERS)[number];
|
|
5
|
+
export type H2APolicyPrecedenceConflictDisposition = (typeof H2A_POLICY_PRECEDENCE_CONFLICT_DISPOSITIONS)[number];
|
|
6
|
+
export interface H2APolicyPrecedenceProfileDescriptor {
|
|
7
|
+
readonly modelId: H2AAbcModelId;
|
|
8
|
+
readonly label: string;
|
|
9
|
+
readonly orderedTiers: readonly H2APolicyPrecedenceTier[];
|
|
10
|
+
readonly conflictDisposition: H2APolicyPrecedenceConflictDisposition;
|
|
11
|
+
readonly rationale: string;
|
|
12
|
+
readonly references: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
export interface H2APolicyPrecedenceAuditResult {
|
|
15
|
+
readonly ok: boolean;
|
|
16
|
+
readonly profileId?: H2AAbcModelId;
|
|
17
|
+
readonly orderedTiers?: readonly H2APolicyPrecedenceTier[];
|
|
18
|
+
readonly resolvesConflicts: boolean;
|
|
19
|
+
readonly issues: readonly string[];
|
|
20
|
+
readonly unresolved: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
export declare const H2A_POLICY_PRECEDENCE_PROFILES: Readonly<{
|
|
23
|
+
readonly A_ENTERPRISE: Readonly<{
|
|
24
|
+
modelId: "A_ENTERPRISE";
|
|
25
|
+
label: "A - enterprise hierarchy";
|
|
26
|
+
orderedTiers: readonly ["public-authority", "contractual", "local", "federated"];
|
|
27
|
+
conflictDisposition: "escalate-not-resolve";
|
|
28
|
+
rationale: "Enterprise V1 reads public authority and contracts before local operating policies; peer/federated policy remains explicit and escalated when it conflicts.";
|
|
29
|
+
references: readonly ["REQ-041", "DEC-039", "DEC-041"];
|
|
30
|
+
}>;
|
|
31
|
+
readonly B_ECOSYSTEM: Readonly<{
|
|
32
|
+
modelId: "B_ECOSYSTEM";
|
|
33
|
+
label: "B - peer ecosystem";
|
|
34
|
+
orderedTiers: readonly ["public-authority", "contractual", "federated", "local"];
|
|
35
|
+
conflictDisposition: "escalate-not-resolve";
|
|
36
|
+
rationale: "Peer ecosystems read shared/federated policy before local participant policy after public and contractual constraints.";
|
|
37
|
+
references: readonly ["REQ-041", "DEC-039", "DEC-041"];
|
|
38
|
+
}>;
|
|
39
|
+
readonly C_GOVERNMENT_CITIZEN: Readonly<{
|
|
40
|
+
modelId: "C_GOVERNMENT_CITIZEN";
|
|
41
|
+
label: "C - public authority ecosystem";
|
|
42
|
+
orderedTiers: readonly ["public-authority", "contractual", "federated", "local"];
|
|
43
|
+
conflictDisposition: "escalate-not-resolve";
|
|
44
|
+
rationale: "Public-authority contexts read imposed public policy first; contracts and delegated/federated rules remain explicit below that surface.";
|
|
45
|
+
references: readonly ["REQ-041", "DEC-039", "DEC-041"];
|
|
46
|
+
}>;
|
|
47
|
+
}>;
|
|
48
|
+
export declare function getPolicyPrecedenceProfile(modelId: string): H2APolicyPrecedenceProfileDescriptor | undefined;
|
|
49
|
+
export declare function auditPolicyPrecedenceProfile(modelId: string): H2APolicyPrecedenceAuditResult;
|
|
50
|
+
//# sourceMappingURL=policy-precedence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-precedence.d.ts","sourceRoot":"","sources":["../src/policy-precedence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,eAAO,MAAM,2BAA2B,oEAK9B,CAAC;AAEX,eAAO,MAAM,2CAA2C,mCAE9C,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,MAAM,sCAAsC,GAChD,CAAC,OAAO,2CAA2C,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC1D,QAAQ,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;IACrE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC3D,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;EA2CsC,CAAC;AAElF,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GACd,oCAAoC,GAAG,SAAS,CAKlD;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GACd,8BAA8B,CAgDhC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
export const H2A_POLICY_PRECEDENCE_TIERS = [
|
|
2
|
+
"public-authority",
|
|
3
|
+
"contractual",
|
|
4
|
+
"federated",
|
|
5
|
+
"local"
|
|
6
|
+
];
|
|
7
|
+
export const H2A_POLICY_PRECEDENCE_CONFLICT_DISPOSITIONS = [
|
|
8
|
+
"escalate-not-resolve"
|
|
9
|
+
];
|
|
10
|
+
export const H2A_POLICY_PRECEDENCE_PROFILES = Object.freeze({
|
|
11
|
+
A_ENTERPRISE: Object.freeze({
|
|
12
|
+
modelId: "A_ENTERPRISE",
|
|
13
|
+
label: "A - enterprise hierarchy",
|
|
14
|
+
orderedTiers: [
|
|
15
|
+
"public-authority",
|
|
16
|
+
"contractual",
|
|
17
|
+
"local",
|
|
18
|
+
"federated"
|
|
19
|
+
],
|
|
20
|
+
conflictDisposition: "escalate-not-resolve",
|
|
21
|
+
rationale: "Enterprise V1 reads public authority and contracts before local operating policies; peer/federated policy remains explicit and escalated when it conflicts.",
|
|
22
|
+
references: ["REQ-041", "DEC-039", "DEC-041"]
|
|
23
|
+
}),
|
|
24
|
+
B_ECOSYSTEM: Object.freeze({
|
|
25
|
+
modelId: "B_ECOSYSTEM",
|
|
26
|
+
label: "B - peer ecosystem",
|
|
27
|
+
orderedTiers: [
|
|
28
|
+
"public-authority",
|
|
29
|
+
"contractual",
|
|
30
|
+
"federated",
|
|
31
|
+
"local"
|
|
32
|
+
],
|
|
33
|
+
conflictDisposition: "escalate-not-resolve",
|
|
34
|
+
rationale: "Peer ecosystems read shared/federated policy before local participant policy after public and contractual constraints.",
|
|
35
|
+
references: ["REQ-041", "DEC-039", "DEC-041"]
|
|
36
|
+
}),
|
|
37
|
+
C_GOVERNMENT_CITIZEN: Object.freeze({
|
|
38
|
+
modelId: "C_GOVERNMENT_CITIZEN",
|
|
39
|
+
label: "C - public authority ecosystem",
|
|
40
|
+
orderedTiers: [
|
|
41
|
+
"public-authority",
|
|
42
|
+
"contractual",
|
|
43
|
+
"federated",
|
|
44
|
+
"local"
|
|
45
|
+
],
|
|
46
|
+
conflictDisposition: "escalate-not-resolve",
|
|
47
|
+
rationale: "Public-authority contexts read imposed public policy first; contracts and delegated/federated rules remain explicit below that surface.",
|
|
48
|
+
references: ["REQ-041", "DEC-039", "DEC-041"]
|
|
49
|
+
})
|
|
50
|
+
});
|
|
51
|
+
export function getPolicyPrecedenceProfile(modelId) {
|
|
52
|
+
if (!Object.hasOwn(H2A_POLICY_PRECEDENCE_PROFILES, modelId)) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
return H2A_POLICY_PRECEDENCE_PROFILES[modelId];
|
|
56
|
+
}
|
|
57
|
+
export function auditPolicyPrecedenceProfile(modelId) {
|
|
58
|
+
const profile = getPolicyPrecedenceProfile(modelId);
|
|
59
|
+
if (!profile) {
|
|
60
|
+
return {
|
|
61
|
+
ok: false,
|
|
62
|
+
resolvesConflicts: false,
|
|
63
|
+
issues: [`unknown policy precedence profile: ${modelId}`],
|
|
64
|
+
unresolved: []
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const issues = [];
|
|
68
|
+
const orderedTiers = [...profile.orderedTiers];
|
|
69
|
+
const knownTiers = new Set(H2A_POLICY_PRECEDENCE_TIERS);
|
|
70
|
+
const seenTiers = new Set(orderedTiers);
|
|
71
|
+
const unknownTiers = orderedTiers.filter((tier) => !knownTiers.has(tier));
|
|
72
|
+
const missingTiers = H2A_POLICY_PRECEDENCE_TIERS.filter((tier) => !seenTiers.has(tier));
|
|
73
|
+
if (unknownTiers.length > 0) {
|
|
74
|
+
issues.push(`unknown policy precedence tiers: ${unknownTiers.join(", ")}`);
|
|
75
|
+
}
|
|
76
|
+
if (seenTiers.size !== orderedTiers.length) {
|
|
77
|
+
issues.push("policy precedence tiers must not be duplicated");
|
|
78
|
+
}
|
|
79
|
+
if (missingTiers.length > 0) {
|
|
80
|
+
issues.push(`missing policy precedence tiers: ${missingTiers.join(", ")}`);
|
|
81
|
+
}
|
|
82
|
+
if (profile.conflictDisposition !== "escalate-not-resolve") {
|
|
83
|
+
issues.push(`unsupported policy precedence conflict disposition: ${profile.conflictDisposition}`);
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
ok: issues.length === 0,
|
|
87
|
+
profileId: profile.modelId,
|
|
88
|
+
orderedTiers: profile.orderedTiers,
|
|
89
|
+
resolvesConflicts: false,
|
|
90
|
+
issues,
|
|
91
|
+
unresolved: issues.length === 0
|
|
92
|
+
? [
|
|
93
|
+
"The profile declares precedence order, but V1 does not select a winning policy automatically; conflicts must escalate through the declared authority surface."
|
|
94
|
+
]
|
|
95
|
+
: []
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=policy-precedence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-precedence.js","sourceRoot":"","sources":["../src/policy-precedence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { H2ASignature } from "./types.js";
|
|
2
|
+
export interface SignOptions {
|
|
3
|
+
by: string;
|
|
4
|
+
privateKeyPem: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function signCanonical(value: unknown, options: SignOptions): H2ASignature;
|
|
7
|
+
export declare function verifyCanonical(value: unknown, signature: H2ASignature, publicKeyPem: string): boolean;
|
|
8
|
+
//# sourceMappingURL=signature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAG,YAAY,CAShF;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,YAAY,EACvB,YAAY,EAAE,MAAM,GACnB,OAAO,CAsBT"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { createPrivateKey, createPublicKey, sign, verify } from "node:crypto";
|
|
2
|
+
import { canonicalize } from "./canonical.js";
|
|
3
|
+
export function signCanonical(value, options) {
|
|
4
|
+
const key = createPrivateKey({ key: options.privateKeyPem, format: "pem" });
|
|
5
|
+
const message = Buffer.from(canonicalize(value), "utf8");
|
|
6
|
+
const signature = sign(null, message, key);
|
|
7
|
+
return {
|
|
8
|
+
by: options.by,
|
|
9
|
+
alg: "ed25519",
|
|
10
|
+
value: signature.toString("base64")
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function verifyCanonical(value, signature, publicKeyPem) {
|
|
14
|
+
if (signature.alg !== "ed25519") {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
let key;
|
|
18
|
+
try {
|
|
19
|
+
key = createPublicKey({ key: publicKeyPem, format: "pem" });
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const message = Buffer.from(canonicalize(value), "utf8");
|
|
25
|
+
let raw;
|
|
26
|
+
try {
|
|
27
|
+
raw = Buffer.from(signature.value, "base64");
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
return verify(null, message, key, raw);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=signature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQ9C,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,OAAoB;IAChE,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC3C,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAc,EACd,SAAuB,EACvB,YAAoB;IAEpB,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC;IACR,IAAI,CAAC;QACH,GAAG,GAAG,eAAe,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IACzD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
export declare const H2A_PROTOCOL = "sentropic.h2a";
|
|
2
2
|
export declare const H2A_VERSION = "0.1";
|
|
3
3
|
export declare const H2A_ROLES: readonly ["PRINCIPAL", "EXECUTIF", "CONDUCTOR", "AGENTS", "CONTROL", "MANDATAIRE"];
|
|
4
|
-
export declare const H2A_ARTIFACT_KINDS: readonly ["CONTRACT", "POLICY", "ENGAGEMENT", "AMENDMENT"];
|
|
4
|
+
export declare const H2A_ARTIFACT_KINDS: readonly ["CONTRACT", "POLICY", "ENGAGEMENT", "AMENDMENT", "MANDATE", "AUTHORITY", "SIGNATURE", "ENFORCEMENT_PLAN"];
|
|
5
|
+
export declare const H2A_POLICY_ADOPTION_MODES: readonly ["ratified", "contractual", "imposed", "acknowledged"];
|
|
6
|
+
export declare const H2A_AUTHORITY_KINDS: readonly ["instance", "quorum"];
|
|
5
7
|
export declare const H2A_ENVELOPE_TYPES: readonly ["register", "propose", "accept", "reject", "counter", "withdraw", "event", "escalate"];
|
|
6
8
|
export declare const H2A_NEGOTIATION_STATES: readonly ["draft", "proposed", "countered", "accepted", "rejected", "withdrawn", "expired", "stabilized", "abandoned"];
|
|
7
9
|
export type H2ARole = (typeof H2A_ROLES)[number];
|
|
8
10
|
export type H2AArtifactKind = (typeof H2A_ARTIFACT_KINDS)[number];
|
|
11
|
+
export type H2APolicyAdoptionMode = (typeof H2A_POLICY_ADOPTION_MODES)[number];
|
|
12
|
+
export type H2AAuthorityKind = (typeof H2A_AUTHORITY_KINDS)[number];
|
|
9
13
|
export type H2AEnvelopeType = (typeof H2A_ENVELOPE_TYPES)[number];
|
|
10
14
|
export type H2ANegotiationState = (typeof H2A_NEGOTIATION_STATES)[number];
|
|
11
15
|
export interface H2AActorRef {
|
|
@@ -66,4 +70,104 @@ export interface H2ANegotiationRecord {
|
|
|
66
70
|
currentArtifactHash?: string;
|
|
67
71
|
deadline?: string;
|
|
68
72
|
}
|
|
73
|
+
export interface H2AContract {
|
|
74
|
+
kind: "CONTRACT";
|
|
75
|
+
id: string;
|
|
76
|
+
parties: string[];
|
|
77
|
+
scope: string;
|
|
78
|
+
clauses: unknown[];
|
|
79
|
+
policies: string[];
|
|
80
|
+
engagements: string[];
|
|
81
|
+
signatures: H2ASignature[];
|
|
82
|
+
baseArtifactHash?: string;
|
|
83
|
+
obligations?: unknown[];
|
|
84
|
+
rights?: unknown[];
|
|
85
|
+
references?: string[];
|
|
86
|
+
createdAt?: string;
|
|
87
|
+
}
|
|
88
|
+
export interface H2APolicy {
|
|
89
|
+
kind: "POLICY";
|
|
90
|
+
id: string;
|
|
91
|
+
scope: string;
|
|
92
|
+
rule: string;
|
|
93
|
+
sourceAuthority: string;
|
|
94
|
+
adoptionMode: H2APolicyAdoptionMode;
|
|
95
|
+
version?: string;
|
|
96
|
+
parameters?: Record<string, unknown>;
|
|
97
|
+
references?: string[];
|
|
98
|
+
}
|
|
99
|
+
export interface H2AEngagement {
|
|
100
|
+
kind: "ENGAGEMENT";
|
|
101
|
+
id: string;
|
|
102
|
+
scope: string;
|
|
103
|
+
charter: Record<string, unknown>;
|
|
104
|
+
roleBindings: Array<{
|
|
105
|
+
role: H2ARole;
|
|
106
|
+
instance: string;
|
|
107
|
+
binding?: string;
|
|
108
|
+
}>;
|
|
109
|
+
controls: string[];
|
|
110
|
+
policies: string[];
|
|
111
|
+
successCriteria: unknown[];
|
|
112
|
+
contractId?: string;
|
|
113
|
+
amendments?: string[];
|
|
114
|
+
status?: H2ANegotiationState;
|
|
115
|
+
}
|
|
116
|
+
export interface H2AAmendment {
|
|
117
|
+
kind: "AMENDMENT";
|
|
118
|
+
id: string;
|
|
119
|
+
targetKind: H2AArtifactKind;
|
|
120
|
+
targetId: string;
|
|
121
|
+
baseArtifactHash: string;
|
|
122
|
+
changes: Array<{
|
|
123
|
+
op: string;
|
|
124
|
+
path: string;
|
|
125
|
+
value?: unknown;
|
|
126
|
+
}>;
|
|
127
|
+
signatures: H2ASignature[];
|
|
128
|
+
reason?: string;
|
|
129
|
+
createdAt?: string;
|
|
130
|
+
}
|
|
131
|
+
export interface H2AMandate {
|
|
132
|
+
kind: "MANDATE";
|
|
133
|
+
id: string;
|
|
134
|
+
instance: string;
|
|
135
|
+
role: H2ARole;
|
|
136
|
+
scope: string;
|
|
137
|
+
rights: string[];
|
|
138
|
+
authorityId?: string;
|
|
139
|
+
expiresAt?: string;
|
|
140
|
+
conditions?: Record<string, unknown>;
|
|
141
|
+
}
|
|
142
|
+
export interface H2AAuthority {
|
|
143
|
+
kind: "AUTHORITY";
|
|
144
|
+
id: string;
|
|
145
|
+
authorityKind: H2AAuthorityKind;
|
|
146
|
+
members: string[];
|
|
147
|
+
threshold?: number;
|
|
148
|
+
scope?: string;
|
|
149
|
+
}
|
|
150
|
+
export interface H2AEnforcementPlan {
|
|
151
|
+
kind: "ENFORCEMENT_PLAN";
|
|
152
|
+
id: string;
|
|
153
|
+
scope: string;
|
|
154
|
+
controls: Array<{
|
|
155
|
+
domain: string;
|
|
156
|
+
instance: string;
|
|
157
|
+
rights?: string[];
|
|
158
|
+
}>;
|
|
159
|
+
escalations: Array<{
|
|
160
|
+
trigger: string;
|
|
161
|
+
target: string;
|
|
162
|
+
channel?: "advise" | "decide" | "alert";
|
|
163
|
+
scope?: string;
|
|
164
|
+
authorityKind?: "PRINCIPAL" | "EXECUTIF" | "QUORUM" | "CONTROL" | "EXTERNAL_AUTHORITY" | "RECOURSE";
|
|
165
|
+
domain?: string;
|
|
166
|
+
}>;
|
|
167
|
+
triggers: Array<{
|
|
168
|
+
name: string;
|
|
169
|
+
condition: string;
|
|
170
|
+
}>;
|
|
171
|
+
references?: string[];
|
|
172
|
+
}
|
|
69
173
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAC5C,eAAO,MAAM,WAAW,QAAQ,CAAC;AAEjC,eAAO,MAAM,SAAS,oFAOZ,CAAC;AAEX,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -12,8 +12,19 @@ export const H2A_ARTIFACT_KINDS = [
|
|
|
12
12
|
"CONTRACT",
|
|
13
13
|
"POLICY",
|
|
14
14
|
"ENGAGEMENT",
|
|
15
|
-
"AMENDMENT"
|
|
15
|
+
"AMENDMENT",
|
|
16
|
+
"MANDATE",
|
|
17
|
+
"AUTHORITY",
|
|
18
|
+
"SIGNATURE",
|
|
19
|
+
"ENFORCEMENT_PLAN"
|
|
16
20
|
];
|
|
21
|
+
export const H2A_POLICY_ADOPTION_MODES = [
|
|
22
|
+
"ratified",
|
|
23
|
+
"contractual",
|
|
24
|
+
"imposed",
|
|
25
|
+
"acknowledged"
|
|
26
|
+
];
|
|
27
|
+
export const H2A_AUTHORITY_KINDS = ["instance", "quorum"];
|
|
17
28
|
export const H2A_ENVELOPE_TYPES = [
|
|
18
29
|
"register",
|
|
19
30
|
"propose",
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AAEjC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW;IACX,UAAU;IACV,WAAW;IACX,QAAQ;IACR,SAAS;IACT,YAAY;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,WAAW;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AAEjC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW;IACX,UAAU;IACV,WAAW;IACX,QAAQ;IACR,SAAS;IACT,YAAY;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,SAAS;IACT,WAAW;IACX,WAAW;IACX,kBAAkB;CACV,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,UAAU;IACV,aAAa;IACb,SAAS;IACT,cAAc;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAU,CAAC;AAEnE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,UAAU;IACV,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,UAAU;IACV,OAAO;IACP,UAAU;CACF,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,OAAO;IACP,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,SAAS;IACT,YAAY;IACZ,WAAW;CACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"authorityKind":"quorum","id":"authority:canonical-001","kind":"AUTHORITY","members":["conductor:01","conductor:02","conductor:03"],"scope":"scope:engagement/ship-v1","threshold":2}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"clauses":[{"id":"c1","text":"deliver v1 by 2026-06-30"}],"engagements":["engagement:ship-v1"],"id":"contract:canonical-001","kind":"CONTRACT","parties":["human:antoine","conductor:01"],"policies":["policy:no-secrets-in-logs"],"scope":"scope:engagement/ship-v1","signatures":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"controls":[{"domain":"cyber","instance":"control:cyber","rights":["audit"]}],"escalations":[{"channel":"alert","target":"human:antoine","trigger":"breach"}],"id":"enforce:canonical-001","kind":"ENFORCEMENT_PLAN","scope":"scope:org/antoine","triggers":[{"condition":"secrets-in-logs > 0","name":"breach"}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"charter":{"goal":"ship v1"},"controls":[],"id":"engagement:canonical-001","kind":"ENGAGEMENT","policies":[],"roleBindings":[{"instance":"human:antoine","role":"PRINCIPAL"},{"binding":"lead","instance":"conductor:01","role":"CONDUCTOR"}],"scope":"scope:engagement/ship-v1","successCriteria":["green ci","principal sign-off"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"mandate:canonical-001","instance":"conductor:01","kind":"MANDATE","rights":["sign","amend"],"role":"CONDUCTOR","scope":"scope:engagement/ship-v1"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"path": "fixtures/contract.json",
|
|
4
|
+
"kind": "CONTRACT",
|
|
5
|
+
"id": "contract:canonical-001",
|
|
6
|
+
"sha256": "d33707bee89eb7a9b146a37c3846d78ed2b795dd375422fb6172c5aee54d1a7b"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"path": "fixtures/policy.json",
|
|
10
|
+
"kind": "POLICY",
|
|
11
|
+
"id": "policy:canonical-001",
|
|
12
|
+
"sha256": "0f72f1d871f1908588ab458cf43a1cd52e45757a7a686673b284de4593ca6b20"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"path": "fixtures/engagement.json",
|
|
16
|
+
"kind": "ENGAGEMENT",
|
|
17
|
+
"id": "engagement:canonical-001",
|
|
18
|
+
"sha256": "345447100be5c1c058f898cb12d73795fd31c6cafba33c749c7870b416bd3523"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "fixtures/mandate.json",
|
|
22
|
+
"kind": "MANDATE",
|
|
23
|
+
"id": "mandate:canonical-001",
|
|
24
|
+
"sha256": "52b5ed8c11996ab311d0eebe2a0889cc08efd20aef09079695d68857e29c2c75"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"path": "fixtures/authority.json",
|
|
28
|
+
"kind": "AUTHORITY",
|
|
29
|
+
"id": "authority:canonical-001",
|
|
30
|
+
"sha256": "f689cc0d93f6b021894949f7d809cc2c566ac6c5f159f62ea16a914b831ec748"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"path": "fixtures/enforcement-plan.json",
|
|
34
|
+
"kind": "ENFORCEMENT_PLAN",
|
|
35
|
+
"id": "enforce:canonical-001",
|
|
36
|
+
"sha256": "3e21c43e851c569afc4f2b0d5458c317dddd5ba184f430702ceb60b143108e23"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"adoptionMode":"ratified","id":"policy:canonical-001","kind":"POLICY","rule":"no-secrets-in-logs","scope":"scope:org/antoine","sourceAuthority":"authority:cyber"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentropic/h2a",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Core contracts and runtime primitives for human-to-agent coordination.",
|
|
5
|
-
"license": "
|
|
5
|
+
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
@@ -29,7 +29,8 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"files": [
|
|
32
|
-
"dist"
|
|
32
|
+
"dist",
|
|
33
|
+
"fixtures"
|
|
33
34
|
],
|
|
34
35
|
"publishConfig": {
|
|
35
36
|
"access": "public"
|