@agenticprimitives/ontology 1.0.0-alpha.4 → 1.0.0-alpha.40
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 +59 -21
- package/cbox/agent-facet-shapes.shacl.ttl +130 -0
- package/cbox/capability-catalog-shapes.shacl.ttl +284 -0
- package/cbox/card-projection-shapes.shacl.ttl +216 -0
- package/cbox/consultation-shapes.shacl.ttl +85 -0
- package/cbox/content-vocabulary.ttl +52 -0
- package/cbox/controlled-vocabularies.ttl +224 -4
- package/cbox/discovery-graph-shapes.shacl.ttl +284 -0
- package/cbox/familyoffice-shapes.shacl.ttl +92 -0
- package/cbox/familyoffice-vocabulary.ttl +48 -0
- package/cbox/geo-vocabulary.ttl +36 -0
- package/cbox/guidance-vocabulary.ttl +22 -0
- package/cbox/interaction-shapes.shacl.ttl +218 -0
- package/cbox/interaction-vocabulary.ttl +159 -0
- package/cbox/judgment-shapes.shacl.ttl +83 -0
- package/cbox/naming-registry-shapes.shacl.ttl +272 -0
- package/cbox/org-team-shapes.shacl.ttl +184 -0
- package/cbox/privacy-credential-shapes.shacl.ttl +187 -0
- package/cbox/profile-facet-vocabulary.ttl +50 -0
- package/cbox/registry-vocabulary.ttl +86 -0
- package/cbox/run-measures-shapes.shacl.ttl +59 -0
- package/cbox/run-provenance-shapes.shacl.ttl +264 -0
- package/cbox/scope-vocabulary.ttl +112 -0
- package/cbox/skill-grounding-vocabulary.ttl +18 -0
- package/cbox/skill-vocabulary.ttl +50 -0
- package/context.jsonld +37 -1
- package/dist/arg-types.d.ts +60 -0
- package/dist/arg-types.d.ts.map +1 -0
- package/dist/arg-types.js +143 -0
- package/dist/arg-types.js.map +1 -0
- package/dist/artifacts.d.ts +9 -2
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +153 -2
- package/dist/artifacts.js.map +1 -1
- package/dist/contact-fields.d.ts +28 -0
- package/dist/contact-fields.d.ts.map +1 -0
- package/dist/contact-fields.js +38 -0
- package/dist/contact-fields.js.map +1 -0
- package/dist/decisions.d.ts +69 -0
- package/dist/decisions.d.ts.map +1 -0
- package/dist/decisions.js +98 -0
- package/dist/decisions.js.map +1 -0
- package/dist/evaluation-context.d.ts +134 -0
- package/dist/evaluation-context.d.ts.map +1 -0
- package/dist/evaluation-context.js +136 -0
- package/dist/evaluation-context.js.map +1 -0
- package/dist/governance.d.ts +84 -0
- package/dist/governance.d.ts.map +1 -0
- package/dist/governance.js +88 -0
- package/dist/governance.js.map +1 -0
- package/dist/grounded-vocabulary.d.ts +29 -0
- package/dist/grounded-vocabulary.d.ts.map +1 -0
- package/dist/grounded-vocabulary.js +110 -0
- package/dist/grounded-vocabulary.js.map +1 -0
- package/dist/household.d.ts +19 -0
- package/dist/household.d.ts.map +1 -0
- package/dist/household.js +41 -0
- package/dist/household.js.map +1 -0
- package/dist/index.d.ts +1091 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1323 -5
- package/dist/index.js.map +1 -1
- package/dist/outcomes.d.ts +47 -0
- package/dist/outcomes.d.ts.map +1 -0
- package/dist/outcomes.js +40 -0
- package/dist/outcomes.js.map +1 -0
- package/dist/participant-vocabulary.d.ts +57 -0
- package/dist/participant-vocabulary.d.ts.map +1 -0
- package/dist/participant-vocabulary.js +66 -0
- package/dist/participant-vocabulary.js.map +1 -0
- package/dist/party-roles.d.ts +115 -0
- package/dist/party-roles.d.ts.map +1 -0
- package/dist/party-roles.js +343 -0
- package/dist/party-roles.js.map +1 -0
- package/dist/payload-classes.d.ts +22 -0
- package/dist/payload-classes.d.ts.map +1 -0
- package/dist/payload-classes.js +30 -0
- package/dist/payload-classes.js.map +1 -0
- package/dist/plan-shapes.d.ts +18 -0
- package/dist/plan-shapes.d.ts.map +1 -0
- package/dist/plan-shapes.js +38 -0
- package/dist/plan-shapes.js.map +1 -0
- package/dist/principles.generated.d.ts +11 -0
- package/dist/principles.generated.d.ts.map +1 -0
- package/dist/principles.generated.js +293 -0
- package/dist/principles.generated.js.map +1 -0
- package/dist/published-works.d.ts +13 -0
- package/dist/published-works.d.ts.map +1 -0
- package/dist/published-works.js +18 -0
- package/dist/published-works.js.map +1 -0
- package/dist/relations.d.ts +44 -0
- package/dist/relations.d.ts.map +1 -0
- package/dist/relations.js +104 -0
- package/dist/relations.js.map +1 -0
- package/dist/run-measures-context.d.ts +74 -0
- package/dist/run-measures-context.d.ts.map +1 -0
- package/dist/run-measures-context.js +77 -0
- package/dist/run-measures-context.js.map +1 -0
- package/dist/run-provenance-context.d.ts +315 -0
- package/dist/run-provenance-context.d.ts.map +1 -0
- package/dist/run-provenance-context.js +323 -0
- package/dist/run-provenance-context.js.map +1 -0
- package/dist/transitions.d.ts +42 -0
- package/dist/transitions.d.ts.map +1 -0
- package/dist/transitions.js +100 -0
- package/dist/transitions.js.map +1 -0
- package/dist/vault-records.d.ts +74 -0
- package/dist/vault-records.d.ts.map +1 -0
- package/dist/vault-records.js +777 -0
- package/dist/vault-records.js.map +1 -0
- package/dist/versions.generated.d.ts +262 -0
- package/dist/versions.generated.d.ts.map +1 -0
- package/dist/versions.generated.js +318 -0
- package/dist/versions.generated.js.map +1 -0
- package/evaluation.jsonld +133 -0
- package/mappings/actor-context-standards.ttl +89 -0
- package/mappings/agent-discovery-standards.ttl +127 -0
- package/mappings/collaboration-crosswalk-actors.ttl +30 -0
- package/mappings/collaboration-crosswalk-authority.ttl +31 -0
- package/mappings/collaboration-crosswalk-guidance.ttl +29 -0
- package/mappings/collaboration-crosswalk-intent.ttl +29 -0
- package/mappings/collaboration-crosswalk-messaging.ttl +37 -0
- package/mappings/collaboration-crosswalk-organization.ttl +66 -0
- package/mappings/collaboration-crosswalk-protocols.ttl +49 -0
- package/mappings/collaboration-crosswalk-skills.ttl +50 -0
- package/mappings/collaboration-profile.ttl +82 -0
- package/mappings/commerce-engagement-crosswalk.ttl +83 -0
- package/mappings/spine-standards.ttl +83 -0
- package/package.json +31 -9
- package/run-measures.jsonld +34 -0
- package/run-provenance.jsonld +314 -0
- package/tbox/actor-context.ttl +145 -0
- package/tbox/agent-resolution.ttl +308 -0
- package/tbox/agreement.ttl +77 -0
- package/tbox/attestation.ttl +156 -0
- package/tbox/card-projection.ttl +350 -0
- package/tbox/constraints.ttl +150 -0
- package/tbox/contact.ttl +61 -0
- package/tbox/content.ttl +76 -0
- package/tbox/context.ttl +508 -0
- package/tbox/coordination.ttl +263 -0
- package/tbox/core.ttl +325 -7
- package/tbox/dcat-imports.ttl +19 -0
- package/tbox/discovery.ttl +273 -0
- package/tbox/dqv-imports.ttl +29 -0
- package/tbox/earl-imports.ttl +32 -0
- package/tbox/engagement.ttl +349 -0
- package/tbox/entitlement.ttl +41 -0
- package/tbox/estate.ttl +78 -0
- package/tbox/evaluation.ttl +330 -0
- package/tbox/execution.ttl +720 -0
- package/tbox/familyoffice.ttl +87 -0
- package/tbox/fulfillment.ttl +140 -0
- package/tbox/geo.ttl +28 -0
- package/tbox/governance.ttl +67 -0
- package/tbox/guidance.ttl +40 -0
- package/tbox/household.ttl +142 -0
- package/tbox/identity.ttl +133 -6
- package/tbox/inference.ttl +177 -0
- package/tbox/intents.ttl +241 -0
- package/tbox/interaction.ttl +297 -0
- package/tbox/messaging.ttl +244 -0
- package/tbox/naming.ttl +114 -0
- package/tbox/org.ttl +410 -0
- package/tbox/payload.ttl +94 -0
- package/tbox/payment.ttl +124 -0
- package/tbox/plan.ttl +169 -0
- package/tbox/principles.ttl +212 -0
- package/tbox/privacy-credential.ttl +436 -0
- package/tbox/profile.ttl +107 -0
- package/tbox/prov-imports.ttl +73 -0
- package/tbox/registry.ttl +382 -0
- package/tbox/resolution.ttl +108 -0
- package/tbox/scope.ttl +59 -0
- package/tbox/security-exposure.ttl +102 -0
- package/tbox/situation.ttl +56 -0
- package/tbox/skills.ttl +316 -0
- package/tbox/skos-imports.ttl +54 -0
- package/tbox/transition.ttl +63 -0
- package/tbox/trust.ttl +210 -0
- package/tbox/values.ttl +81 -0
- package/tbox/verification-receipt.ttl +134 -0
- package/versions.adoption.json +173 -0
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
// Namespace base INLINED, not imported from ./index — index.ts re-exports this file, so importing NS back
|
|
2
|
+
// reads it in TDZ and every IRI here becomes `undefined#Treasury` at module-eval. Identical to `NS.ap`,
|
|
3
|
+
// and identical to the reason `grounded-vocabulary.ts` inlines the same constant.
|
|
4
|
+
const AP_NS = 'https://agenticprimitives.dev/ns/core#';
|
|
5
|
+
const AP = (local) => `${AP_NS}${local}`;
|
|
6
|
+
/** The T-box classes a party role may require. Names mirror `tbox/core.ttl` exactly. */
|
|
7
|
+
export const AGENT_CLASS = {
|
|
8
|
+
Agent: AP('Agent'),
|
|
9
|
+
PersonAgent: AP('PersonAgent'),
|
|
10
|
+
OrganizationAgent: AP('OrganizationAgent'),
|
|
11
|
+
TeamAgent: AP('TeamAgent'),
|
|
12
|
+
WorkspaceAgent: AP('WorkspaceAgent'),
|
|
13
|
+
ServiceAgent: AP('ServiceAgent'),
|
|
14
|
+
Treasury: AP('Treasury'),
|
|
15
|
+
RegistryAgent: AP('RegistryAgent'),
|
|
16
|
+
ChurchAgent: AP('ChurchAgent'),
|
|
17
|
+
CircleAgent: AP('CircleAgent'),
|
|
18
|
+
/** Spec 368 — the family's own agent: an organization-class agent chartered under a person. */
|
|
19
|
+
HouseholdAgent: AP('HouseholdAgent'),
|
|
20
|
+
};
|
|
21
|
+
/** The relationship a resolver may traverse to get from one agent to another. */
|
|
22
|
+
/**
|
|
23
|
+
* THE VALUE RAIL — the classes that can be an end of a value move (spec 373).
|
|
24
|
+
*
|
|
25
|
+
* Money moves between ACCOUNTS, and the only accounts are TREASURIES. A person is who it is for; a treasury is where
|
|
26
|
+
* it goes; an organization pays from and is paid into the treasury it charters. An organization or a person agent never
|
|
27
|
+
* holds assets: a balance found on one is ignored, never reported, and never paid from or into (user mandate, 2026-09-28). This is the whole rule, said once, and
|
|
28
|
+
* `check:ontology-bindings` holds every `movesValue: true` role to it — so widening one back is a build
|
|
29
|
+
* failure rather than a payment that lands on somebody's person agent.
|
|
30
|
+
*
|
|
31
|
+
* It is a DECLARATION, and a declaration authorizes nothing. The gate that cannot be bypassed reads the
|
|
32
|
+
* payee's on-chain `atl:agentType` at the moment of acting (ADR-0061: the record is the authority, the
|
|
33
|
+
* typed name is a claim) and refuses when it is not a treasury.
|
|
34
|
+
*/
|
|
35
|
+
export const VALUE_HOLDING_CLASSES = [AGENT_CLASS.Treasury];
|
|
36
|
+
/** May this class hold value — that is, be an end of a transfer? */
|
|
37
|
+
export const holdsValue = (iri) => VALUE_HOLDING_CLASSES.includes(iri);
|
|
38
|
+
export const AGENT_RELATION = {
|
|
39
|
+
/** Child → the agent it was created under and belongs to. NEVER authority. */
|
|
40
|
+
charteredUnder: AP('charteredUnder'),
|
|
41
|
+
/** Parent → the agents created under it. The direction "what does alice hold" traverses. */
|
|
42
|
+
charters: AP('charters'),
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* The typed name suffix that names each class (ADR-0061). A suffix is a CLAIM about the derived type; the
|
|
46
|
+
* on-chain `ap:agentType` record is the authority and a mismatch fails closed. This map exists so a
|
|
47
|
+
* resolver can read a name's suffix as a class rather than as a magic string.
|
|
48
|
+
*/
|
|
49
|
+
export const CLASS_FOR_SUFFIX = {
|
|
50
|
+
me: AGENT_CLASS.PersonAgent,
|
|
51
|
+
org: AGENT_CLASS.OrganizationAgent,
|
|
52
|
+
team: AGENT_CLASS.TeamAgent,
|
|
53
|
+
workspace: AGENT_CLASS.WorkspaceAgent,
|
|
54
|
+
treasury: AGENT_CLASS.Treasury,
|
|
55
|
+
svc: AGENT_CLASS.ServiceAgent,
|
|
56
|
+
registry: AGENT_CLASS.RegistryAgent,
|
|
57
|
+
church: AGENT_CLASS.ChurchAgent,
|
|
58
|
+
circle: AGENT_CLASS.CircleAgent,
|
|
59
|
+
household: AGENT_CLASS.HouseholdAgent,
|
|
60
|
+
};
|
|
61
|
+
export const SUFFIX_FOR_CLASS = Object.fromEntries(Object.entries(CLASS_FOR_SUFFIX).map(([suffix, iri]) => [iri, suffix]));
|
|
62
|
+
/** The typed-name suffixes the rail admits (`treasury`), derived from the classes so the two cannot drift. */
|
|
63
|
+
export const VALUE_HOLDING_SUFFIXES = VALUE_HOLDING_CLASSES
|
|
64
|
+
.map((c) => SUFFIX_FOR_CLASS[c])
|
|
65
|
+
.filter((s) => typeof s === 'string');
|
|
66
|
+
/**
|
|
67
|
+
* Every capability's parties. The Ask reads this to resolve names; the harness reads `side: 'acting'` to
|
|
68
|
+
* know whose authority a step spends.
|
|
69
|
+
*/
|
|
70
|
+
export const PARTY_ROLES = [
|
|
71
|
+
{
|
|
72
|
+
capability: 'treasury.payment.execute', arg: 'payer', word: 'paying from', side: 'acting',
|
|
73
|
+
// THE VALUE RAIL (spec 373): an account pays. An organization is no exception — it pays from the
|
|
74
|
+
// treasury it charters, which `traverse` finds, and that is one hop, not a different kind of payer.
|
|
75
|
+
requires: VALUE_HOLDING_CLASSES,
|
|
76
|
+
traverse: AGENT_RELATION.charters,
|
|
77
|
+
movesValue: true,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
capability: 'treasury.payment.execute', arg: 'payee', word: 'being paid', side: 'counterparty',
|
|
81
|
+
// AND AN ACCOUNT IS PAID. This read `[Treasury, OrganizationAgent, PersonAgent]` with the comment
|
|
82
|
+
// "paying a person directly is ordinary", and on 2026-09-08 it paid `carol.me` — a person, not an
|
|
83
|
+
// account — because the `aphh:householdPayee` chain landed on nothing and the resolver fell through to
|
|
84
|
+
// her. A person is who money is FOR; a treasury is where it GOES. "Send alice 20 USDC" means her
|
|
85
|
+
// treasury, and when she has marked none that is a question, never a payment to her.
|
|
86
|
+
requires: VALUE_HOLDING_CLASSES,
|
|
87
|
+
traverse: AGENT_RELATION.charters,
|
|
88
|
+
movesValue: true,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
// CREDITED, NOT ACTING. The authority a funding spends is the FUNDER's (the next entry); the treasury
|
|
92
|
+
// is the account the act is about, inside the person's own tree. It read `acting` until
|
|
93
|
+
// `treasury.primary.declare` declared the same word `context` and the one-word-one-side gate made the
|
|
94
|
+
// disagreement visible — two honest local readings of one word is exactly the drift this table ends.
|
|
95
|
+
capability: 'treasury.fund', arg: 'treasury', word: 'the treasury', side: 'context',
|
|
96
|
+
requires: [AGENT_CLASS.Treasury],
|
|
97
|
+
traverse: AGENT_RELATION.charters,
|
|
98
|
+
movesValue: true,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
// WHOSE AUTHORITY A FUNDING SPENDS. The tool declares `authorityArg: 'funder'`, and the word for it
|
|
102
|
+
// lived in a hand-kept map in the app — which is precisely the duplication this table exists to end.
|
|
103
|
+
// A faucet mint debits nobody, so this moves no value; it is still the party the mandate is read from.
|
|
104
|
+
capability: 'treasury.fund', arg: 'funder', word: 'funding it', side: 'acting',
|
|
105
|
+
requires: [AGENT_CLASS.Agent],
|
|
106
|
+
movesValue: false,
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
// "WHEN SOMEONE PAYS ME, IT GOES HERE" — the `ap:primaryPayee` role on the public charteredUnder
|
|
110
|
+
// edge (spec 355). The treasury is the party being MARKED, not one spending anything: declaring a
|
|
111
|
+
// preference moves no value and lets nobody spend. It must still be one of the owner's treasuries,
|
|
112
|
+
// which is what `requires` says and what a wrong answer is refused against.
|
|
113
|
+
// The treasury is the agent this statement is ABOUT and the one it is made WITHIN — your own tree,
|
|
114
|
+
// never someone else's. Not `counterparty`: a counterparty is somebody else, and "mark my treasury"
|
|
115
|
+
// is not an exchange with anyone.
|
|
116
|
+
capability: 'treasury.primary.declare', arg: 'treasury', word: 'to receive payments', side: 'context',
|
|
117
|
+
requires: [AGENT_CLASS.Treasury],
|
|
118
|
+
traverse: AGENT_RELATION.charters,
|
|
119
|
+
movesValue: false,
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
// WHOSE PREFERENCE IT IS. The holder is the object side of the edge, which is the only party the
|
|
123
|
+
// contract lets set a role on it — saying where your money should go is your say and nobody else's.
|
|
124
|
+
//
|
|
125
|
+
// NOT `owner`: that argument is already declared a COUNTERPARTY by `resolution.invitation.request`
|
|
126
|
+
// ("the person to ask"), and the derived sets are keyed by argument NAME across capabilities — so
|
|
127
|
+
// reusing it would have made this step's acting party one the resolver refuses to let be the asker.
|
|
128
|
+
// One word, one side, estate-wide; `check:ontology-bindings` now fails when that is broken.
|
|
129
|
+
capability: 'treasury.primary.declare', arg: 'holder', word: 'whose preference this is', side: 'acting',
|
|
130
|
+
requires: [AGENT_CLASS.Agent],
|
|
131
|
+
movesValue: false,
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
// WHO IS BEING RECORDED as living with you. Their own agent — a household member is a person, and a
|
|
135
|
+
// record naming an address nobody holds is a note to nobody.
|
|
136
|
+
capability: 'household.member.record', arg: 'member', word: 'in your household', side: 'context',
|
|
137
|
+
requires: [AGENT_CLASS.PersonAgent],
|
|
138
|
+
movesValue: false,
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
capability: 'messaging.direct.send', arg: 'sender', word: 'sending it', side: 'acting',
|
|
142
|
+
// Sending as you is acting as you. No traversal: a person's inbox is their own.
|
|
143
|
+
requires: [AGENT_CLASS.Agent],
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
capability: 'messaging.direct.send', arg: 'recipient', word: 'the person to message', side: 'counterparty',
|
|
147
|
+
// An inbox belongs to a person first. Someone who means the organization says so.
|
|
148
|
+
requires: [
|
|
149
|
+
AGENT_CLASS.PersonAgent, AGENT_CLASS.OrganizationAgent, AGENT_CLASS.TeamAgent,
|
|
150
|
+
AGENT_CLASS.CircleAgent, AGENT_CLASS.ChurchAgent, AGENT_CLASS.HouseholdAgent, AGENT_CLASS.ServiceAgent,
|
|
151
|
+
],
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
// A STANDING INSTRUCTION IS THE OWNER'S OWN NOTE (spec 394): who declares it is the person asking — the
|
|
155
|
+
// record is theirs and nobody else's to write. Self-acting like the household record.
|
|
156
|
+
capability: 'context.instruction.declare', arg: 'holder', word: 'whose instruction this is', side: 'acting',
|
|
157
|
+
requires: [AGENT_CLASS.Agent],
|
|
158
|
+
movesValue: false,
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
// WHAT THE DEFAULT IS — an agent of theirs (a treasury to pay from, an organization to act as). Any agent:
|
|
162
|
+
// the role's kind is the CAPABILITY's to say, and the resolver revalidates at every use.
|
|
163
|
+
capability: 'context.instruction.declare', arg: 'value', word: 'the default', side: 'context',
|
|
164
|
+
requires: [AGENT_CLASS.Agent],
|
|
165
|
+
movesValue: false,
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
// A REQUEST IS THE REQUESTER'S OWN ACT (spec 393 W2 tail). Any agent may ask an organization to take on a
|
|
169
|
+
// goal; the organization is the CONTEXT (`org`, the resource) — "asking as you is an act of yours".
|
|
170
|
+
capability: 'coordination.endeavor.request', arg: 'requester', word: 'asking', side: 'acting',
|
|
171
|
+
requires: [AGENT_CLASS.Agent],
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
// AN OFFER IS THE OFFERER'S OWN ACT (spec 393 W2). Any agent may offer; the organization is the CONTEXT
|
|
175
|
+
// (`org`, the resource), never the party spending authority — a steward asked "I'll take the flyer step"
|
|
176
|
+
// at their organization offers as themselves, not as it.
|
|
177
|
+
capability: 'coordination.contribution.propose', arg: 'proposer', word: 'offering', side: 'acting',
|
|
178
|
+
requires: [AGENT_CLASS.Agent], ownAct: true,
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
capability: 'resolution.invitation.request', arg: 'requester', word: 'asking', side: 'acting',
|
|
182
|
+
// Asking is an act of yours, bounded like any other. Any agent may ask.
|
|
183
|
+
requires: [AGENT_CLASS.Agent],
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
capability: 'resolution.invitation.request', arg: 'owner', word: 'the person to ask', side: 'counterparty',
|
|
187
|
+
// You ask the AGENT THAT HOLDS the thing you cannot reach — a person, or the organization whose
|
|
188
|
+
// treasury it is. Not the unlisted agent itself: if you could name that, you would not be asking.
|
|
189
|
+
requires: [AGENT_CLASS.PersonAgent, AGENT_CLASS.OrganizationAgent, AGENT_CLASS.TeamAgent],
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
capability: 'organization.membership.invite', arg: 'org', word: 'the organization', side: 'acting',
|
|
193
|
+
requires: [
|
|
194
|
+
AGENT_CLASS.OrganizationAgent, AGENT_CLASS.TeamAgent, AGENT_CLASS.WorkspaceAgent,
|
|
195
|
+
AGENT_CLASS.CircleAgent, AGENT_CLASS.ChurchAgent, AGENT_CLASS.HouseholdAgent,
|
|
196
|
+
],
|
|
197
|
+
},
|
|
198
|
+
// Spec 421 — ACCEPTING an invitation: the organization joined is the OTHER party (the acting party is the invitee
|
|
199
|
+
// herself — her own consent, no authorityArg). Organization-like kinds only: one joins an organization, not a person.
|
|
200
|
+
{
|
|
201
|
+
capability: 'organization.membership.accept', arg: 'invitedTo', word: 'the organization you were invited to', side: 'counterparty',
|
|
202
|
+
requires: [
|
|
203
|
+
AGENT_CLASS.OrganizationAgent, AGENT_CLASS.TeamAgent, AGENT_CLASS.WorkspaceAgent,
|
|
204
|
+
AGENT_CLASS.CircleAgent, AGENT_CLASS.ChurchAgent, AGENT_CLASS.HouseholdAgent,
|
|
205
|
+
],
|
|
206
|
+
},
|
|
207
|
+
// Spec 401 — CONTACTS: membership on the person agent. The counterparty is a person or a service (a coach,
|
|
208
|
+
// an outside runtime); never an organization (one belongs to an organization, it is not a contact). The acting
|
|
209
|
+
// party is the person themselves (no authorityArg: their own mandate, self).
|
|
210
|
+
{
|
|
211
|
+
capability: 'person.contact.invite', arg: 'contact', word: 'being added as a contact', side: 'counterparty',
|
|
212
|
+
requires: [AGENT_CLASS.PersonAgent, AGENT_CLASS.ServiceAgent],
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
capability: 'person.contact.invite', arg: 'person', word: 'whose contacts', side: 'acting',
|
|
216
|
+
// Their own list, their own mandate: the person asking, never the room they stand in.
|
|
217
|
+
requires: [AGENT_CLASS.PersonAgent],
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
capability: 'person.contact.remove', arg: 'person', word: 'whose contacts', side: 'acting',
|
|
221
|
+
requires: [AGENT_CLASS.PersonAgent],
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
capability: 'person.contact.remove', arg: 'contact', word: 'being removed from your contacts', side: 'counterparty',
|
|
225
|
+
requires: [AGENT_CLASS.PersonAgent, AGENT_CLASS.ServiceAgent],
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
capability: 'organization.membership.invite', arg: 'invitee', word: 'being invited', side: 'counterparty',
|
|
229
|
+
// A member is ordinarily a person — and, spec 372 S3, may be a SERVICE agent: the identity an outside
|
|
230
|
+
// runtime acts as joins an organization the way anyone does, by invitation its steward signs, and what
|
|
231
|
+
// it may then do is the scoped grant that invitation carries. Order is semantics: inviting a person is
|
|
232
|
+
// the ordinary reading of a name, and a runtime is named by its typed `.svc` name.
|
|
233
|
+
requires: [AGENT_CLASS.PersonAgent, AGENT_CLASS.ServiceAgent],
|
|
234
|
+
// An invitation may go to someone with no agent yet: their email names the person, and the agent
|
|
235
|
+
// their Home will deploy for it is bound in its place (spec 315/321 email invite, now one flow).
|
|
236
|
+
alsoAccepts: ['email'],
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
// WHOSE ROSTER IS BEING READ. A read spends no authority, but it names a subject, and the subject is
|
|
240
|
+
// resolved like every other party: in the asker's PRIVATE tier ("Missio Nexus" is a name in their own
|
|
241
|
+
// links), or asked. Before this row the tool resolved its own argument — a naming-service lookup with
|
|
242
|
+
// the ADDRESSEE as the fallback — so a display name the naming service does not know silently became
|
|
243
|
+
// "the agent being asked", and a person asking about an organization was answered with their own
|
|
244
|
+
// (empty) roster. `acting`, not `context`: the arg NAME `org` is declared `acting` by the invite
|
|
245
|
+
// capability, and one word carries one side estate-wide (`check:ontology-bindings`).
|
|
246
|
+
capability: 'organization.membership.list', arg: 'org', word: 'the organization', side: 'acting',
|
|
247
|
+
requires: [
|
|
248
|
+
AGENT_CLASS.OrganizationAgent, AGENT_CLASS.TeamAgent, AGENT_CLASS.WorkspaceAgent,
|
|
249
|
+
AGENT_CLASS.CircleAgent, AGENT_CLASS.ChurchAgent, AGENT_CLASS.HouseholdAgent,
|
|
250
|
+
],
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
// Spec 380 — WHOSE MEMBERS ARE CONSULTED. The organization is the acting side (its own roster, its own
|
|
254
|
+
// consult wire); resolved in the asker's private tier like the roster read above.
|
|
255
|
+
capability: 'organization.member.consult', arg: 'org', word: 'the organization', side: 'acting',
|
|
256
|
+
requires: [
|
|
257
|
+
AGENT_CLASS.OrganizationAgent, AGENT_CLASS.TeamAgent, AGENT_CLASS.WorkspaceAgent,
|
|
258
|
+
AGENT_CLASS.CircleAgent, AGENT_CLASS.ChurchAgent, AGENT_CLASS.HouseholdAgent,
|
|
259
|
+
],
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
// Spec 380 — THE MEMBER ASKED. A person, answering through their own agent under their own opt-in;
|
|
263
|
+
// it arrives as an address from the roster's fan-out, never as a name to resolve.
|
|
264
|
+
capability: 'organization.member.consult', arg: 'respondent', word: 'the member being asked', side: 'counterparty',
|
|
265
|
+
requires: [AGENT_CLASS.PersonAgent],
|
|
266
|
+
},
|
|
267
|
+
// ── Spec 370 P4 — Work & Planning (specs 332–334) bound thinly onto the Endeavor substrate. ────────
|
|
268
|
+
// WHOSE WORK. Every coordination capability names the organization whose endeavors these are — the same
|
|
269
|
+
// word, the same side and the same classes as the roster read, so a display name resolves in the
|
|
270
|
+
// asker's private tier or is asked, never guessed from the addressee. The realm you stand in fills it
|
|
271
|
+
// (spec 367 §7) because these roles admit the organization classes.
|
|
272
|
+
...['coordination.endeavor.list', 'coordination.endeavor.get', 'coordination.endeavor.request', 'coordination.contribution.propose', 'coordination.contribution.allocate', 'coordination.endeavor.satisfy'].map((capability) => ({
|
|
273
|
+
capability, arg: 'org', word: 'the organization', side: 'acting',
|
|
274
|
+
requires: [
|
|
275
|
+
AGENT_CLASS.OrganizationAgent, AGENT_CLASS.TeamAgent, AGENT_CLASS.WorkspaceAgent,
|
|
276
|
+
AGENT_CLASS.CircleAgent, AGENT_CLASS.ChurchAgent, AGENT_CLASS.HouseholdAgent,
|
|
277
|
+
],
|
|
278
|
+
})),
|
|
279
|
+
{
|
|
280
|
+
// Spec 419 — WHOSE HOLDINGS. Any agent that can hold chartered agents (a person, an organization and its derived kinds);
|
|
281
|
+
// unnamed ⇒ the agent being asked. A CONTEXT party: the holdings are read about it, nothing is done to or by it.
|
|
282
|
+
capability: 'agent.holdings.list', arg: 'whose', word: 'whose holdings', side: 'context',
|
|
283
|
+
requires: [AGENT_CLASS.OrganizationAgent, AGENT_CLASS.TeamAgent, AGENT_CLASS.WorkspaceAgent, AGENT_CLASS.ChurchAgent, AGENT_CLASS.CircleAgent, AGENT_CLASS.HouseholdAgent, AGENT_CLASS.PersonAgent],
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
// Spec 371 — WHOSE BALANCE. ASSETS LIVE ONLY IN TREASURIES (user mandate 2026-09-28): an organization or a person never
|
|
287
|
+
// holds value, and a balance found on one is ignored — named, it means the treasuries it charters (`traverse`).
|
|
288
|
+
// Unnamed ⇒ the realm's treasuries, decided by the read.
|
|
289
|
+
capability: 'treasury.balance.read', arg: 'account', word: 'the account', side: 'acting',
|
|
290
|
+
requires: VALUE_HOLDING_CLASSES,
|
|
291
|
+
traverse: AGENT_RELATION.charters,
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
// WHO IS ALLOCATED. A person — resolved among the asker's own links or the organization's roster.
|
|
295
|
+
capability: 'coordination.contribution.allocate', arg: 'participant', word: 'being allocated', side: 'counterparty',
|
|
296
|
+
requires: [AGENT_CLASS.PersonAgent],
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
// Spec 368 — a household is chartered under a PERSON, never inside an organization: it is the family's
|
|
300
|
+
// own agent, and the person who charters it is its first steward.
|
|
301
|
+
capability: 'household.create', arg: 'parent', word: 'the parent', side: 'context',
|
|
302
|
+
requires: [AGENT_CLASS.PersonAgent],
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
capability: 'organization.team.create', arg: 'parent', word: 'the parent', side: 'context',
|
|
306
|
+
requires: [AGENT_CLASS.WorkspaceAgent, AGENT_CLASS.OrganizationAgent],
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
capability: 'organization.create', arg: 'parent', word: 'the parent', side: 'context',
|
|
310
|
+
requires: [AGENT_CLASS.WorkspaceAgent, AGENT_CLASS.OrganizationAgent, AGENT_CLASS.PersonAgent],
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
capability: 'treasury.create', arg: 'parent', word: 'the parent', side: 'context',
|
|
314
|
+
requires: [AGENT_CLASS.PersonAgent, AGENT_CLASS.OrganizationAgent, AGENT_CLASS.TeamAgent, AGENT_CLASS.HouseholdAgent],
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
// Spec 372 S3 — a service agent (the identity an outside runtime acts as) belongs to the person or the
|
|
318
|
+
// organization that chartered it; a team or household charters none (their parent does).
|
|
319
|
+
capability: 'service.create', arg: 'parent', word: 'the parent', side: 'context',
|
|
320
|
+
requires: [AGENT_CLASS.PersonAgent, AGENT_CLASS.OrganizationAgent],
|
|
321
|
+
},
|
|
322
|
+
];
|
|
323
|
+
/** The role for one capability argument, or undefined when the capability declares none. */
|
|
324
|
+
export function partyRole(capability, arg) {
|
|
325
|
+
return PARTY_ROLES.find((r) => r.capability === capability && r.arg === arg);
|
|
326
|
+
}
|
|
327
|
+
/** The typed-name suffixes a party may be, in order — what a name-based resolver filters on. */
|
|
328
|
+
export function suffixesFor(role) {
|
|
329
|
+
if (!role)
|
|
330
|
+
return [];
|
|
331
|
+
// `ap:Agent` means "any agent", which narrows nothing — an empty list, not every suffix, because a
|
|
332
|
+
// resolver reads empty as "no constraint" and a full list as "these nine and no others".
|
|
333
|
+
if (role.requires.includes(AGENT_CLASS.Agent))
|
|
334
|
+
return [];
|
|
335
|
+
return role.requires.map((iri) => SUFFIX_FOR_CLASS[iri]).filter((s) => !!s);
|
|
336
|
+
}
|
|
337
|
+
/** Every argument whose party is the one acting — the authority a step spends. */
|
|
338
|
+
export const ACTING_ARGS = new Set(PARTY_ROLES.filter((r) => r.side === 'acting').map((r) => r.arg));
|
|
339
|
+
/** Arguments that are never the asker: you do not pay, message or invite yourself by saying someone's name. */
|
|
340
|
+
export const COUNTERPARTY_ARGS = new Set(PARTY_ROLES.filter((r) => r.side === 'counterparty').map((r) => r.arg));
|
|
341
|
+
/** Arguments where a wrong answer cannot be undone. */
|
|
342
|
+
export const VALUE_ARGS = new Set(PARTY_ROLES.filter((r) => r.movesValue).map((r) => r.arg));
|
|
343
|
+
//# sourceMappingURL=party-roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"party-roles.js","sourceRoot":"","sources":["../src/party-roles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const PAYLOAD_CLASS: {
|
|
2
|
+
readonly FreeText: "appay:FreeText";
|
|
3
|
+
readonly ContactEmail: "appay:ContactEmail";
|
|
4
|
+
readonly ContactPhone: "appay:ContactPhone";
|
|
5
|
+
readonly PostalAddress: "appay:PostalAddress";
|
|
6
|
+
readonly EventDetails: "appay:EventDetails";
|
|
7
|
+
readonly GivingHistory: "appay:GivingHistory";
|
|
8
|
+
readonly Money: "appay:Money";
|
|
9
|
+
readonly File: "appay:File";
|
|
10
|
+
readonly MembershipTerms: "appay:MembershipTerms";
|
|
11
|
+
readonly PersonalPreference: "appay:PersonalPreference";
|
|
12
|
+
readonly Instruction: "appay:Instruction";
|
|
13
|
+
readonly CodeChange: "appay:CodeChange";
|
|
14
|
+
};
|
|
15
|
+
export type PayloadClassId = (typeof PAYLOAD_CLASS)[keyof typeof PAYLOAD_CLASS];
|
|
16
|
+
/** The full IRI of a compact payload class (`appay:FreeText` → `https://…/payload#FreeText`); a full IRI passes through. */
|
|
17
|
+
export declare function payloadClassIri(compact: string): string;
|
|
18
|
+
/** The root every payload class descends from — never named by a caveat (naming it would permit everything). */
|
|
19
|
+
export declare const PAYLOAD_CLASS_ROOT = "https://agenticprimitives.dev/ns/payload#PayloadClass";
|
|
20
|
+
/** Every compact id this module publishes, for a gate or a validator that refuses an unknown class by name. */
|
|
21
|
+
export declare const PAYLOAD_CLASS_IDS: readonly string[];
|
|
22
|
+
//# sourceMappingURL=payload-classes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-classes.d.ts","sourceRoot":"","sources":["../src/payload-classes.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa;;;;;;;;;;;;;CAahB,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAEhF,4HAA4H;AAC5H,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AACD,gHAAgH;AAChH,eAAO,MAAM,kBAAkB,0DAAyB,CAAC;AACzD,+GAA+G;AAC/G,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAiC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// PAYLOAD CLASSES — spec 410 §7. What a write CARRIES, bound by IRI to `tbox/payload.ttl` and checked by
|
|
2
|
+
// `check:ontology-bindings`. A tool's adapter declares them per argument (`ToolSpec.carries`); a mandate's
|
|
3
|
+
// payload-classes caveat permits a set; the verifier compares. Classes of disclosure, never of value syntax.
|
|
4
|
+
//
|
|
5
|
+
// The compact form (`appay:FreeText`) is what a contract, a tool table and a caveat carry; `PAYLOAD_CLASS_IRI`
|
|
6
|
+
// expands it for the gate and for anything that compares against the T-box.
|
|
7
|
+
const APPAY = 'https://agenticprimitives.dev/ns/payload#';
|
|
8
|
+
export const PAYLOAD_CLASS = {
|
|
9
|
+
FreeText: 'appay:FreeText',
|
|
10
|
+
ContactEmail: 'appay:ContactEmail',
|
|
11
|
+
ContactPhone: 'appay:ContactPhone',
|
|
12
|
+
PostalAddress: 'appay:PostalAddress',
|
|
13
|
+
EventDetails: 'appay:EventDetails',
|
|
14
|
+
GivingHistory: 'appay:GivingHistory',
|
|
15
|
+
Money: 'appay:Money',
|
|
16
|
+
File: 'appay:File',
|
|
17
|
+
MembershipTerms: 'appay:MembershipTerms',
|
|
18
|
+
PersonalPreference: 'appay:PersonalPreference',
|
|
19
|
+
Instruction: 'appay:Instruction',
|
|
20
|
+
CodeChange: 'appay:CodeChange',
|
|
21
|
+
};
|
|
22
|
+
/** The full IRI of a compact payload class (`appay:FreeText` → `https://…/payload#FreeText`); a full IRI passes through. */
|
|
23
|
+
export function payloadClassIri(compact) {
|
|
24
|
+
return compact.startsWith('appay:') ? `${APPAY}${compact.slice('appay:'.length)}` : compact;
|
|
25
|
+
}
|
|
26
|
+
/** The root every payload class descends from — never named by a caveat (naming it would permit everything). */
|
|
27
|
+
export const PAYLOAD_CLASS_ROOT = `${APPAY}PayloadClass`;
|
|
28
|
+
/** Every compact id this module publishes, for a gate or a validator that refuses an unknown class by name. */
|
|
29
|
+
export const PAYLOAD_CLASS_IDS = Object.values(PAYLOAD_CLASS);
|
|
30
|
+
//# sourceMappingURL=payload-classes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-classes.js","sourceRoot":"","sources":["../src/payload-classes.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,2GAA2G;AAC3G,6GAA6G;AAC7G,EAAE;AACF,+GAA+G;AAC/G,4EAA4E;AAC5E,MAAM,KAAK,GAAG,2CAA2C,CAAC;AAE1D,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,QAAQ,EAAE,gBAAgB;IAC1B,YAAY,EAAE,oBAAoB;IAClC,YAAY,EAAE,oBAAoB;IAClC,aAAa,EAAE,qBAAqB;IACpC,YAAY,EAAE,oBAAoB;IAClC,aAAa,EAAE,qBAAqB;IACpC,KAAK,EAAE,aAAa;IACpB,IAAI,EAAE,YAAY;IAClB,eAAe,EAAE,uBAAuB;IACxC,kBAAkB,EAAE,0BAA0B;IAC9C,WAAW,EAAE,mBAAmB;IAChC,UAAU,EAAE,kBAAkB;CACtB,CAAC;AAGX,4HAA4H;AAC5H,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9F,CAAC;AACD,gHAAgH;AAChH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,KAAK,cAAc,CAAC;AACzD,+GAA+G;AAC/G,MAAM,CAAC,MAAM,iBAAiB,GAAsB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface FanOutRelation {
|
|
2
|
+
/** The relation whose object set may be enumerated — an ObjectProperty the T-box declares. */
|
|
3
|
+
relation: string;
|
|
4
|
+
/** Why this one is safe to fan out over, in a sentence a refusal can quote. */
|
|
5
|
+
because: string;
|
|
6
|
+
/** The most items one sentence may become. A cap is part of the meaning: "every member" of a
|
|
7
|
+
* 25-person org is a plan; of a 10,000-row search result it is an incident. */
|
|
8
|
+
maxItems: number;
|
|
9
|
+
}
|
|
10
|
+
/** Relations a plan step may fan out over. Everything else is refused BY NAME — absence is a decision
|
|
11
|
+
* here, not an oversight, because an unlisted relation fails closed in the loop. */
|
|
12
|
+
export declare const FAN_OUT_RELATIONS: readonly FanOutRelation[];
|
|
13
|
+
/** Relations that resolve to ONE object by their meaning. A plan that fans out over one of these has
|
|
14
|
+
* misread the domain — `primaryPayee` is "the one they want paid", and iterating it is a bug. */
|
|
15
|
+
export declare const RESOLVE_TO_ONE_RELATIONS: readonly string[];
|
|
16
|
+
/** The binding for a relation, or null — and null must FAIL CLOSED in the consumer. */
|
|
17
|
+
export declare function fanOutBindingFor(relation: string): FanOutRelation | null;
|
|
18
|
+
//# sourceMappingURL=plan-shapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-shapes.d.ts","sourceRoot":"","sources":["../src/plan-shapes.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,cAAc;IAC7B,8FAA8F;IAC9F,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB;oFACgF;IAChF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;qFACqF;AACrF,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAWtD,CAAC;AAEF;kGACkG;AAClG,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAA0B,CAAC;AAEjF,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAExE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// WHAT A PLAN MAY FAN OUT OVER — spec 358 W4, in spec 355's discipline: the shape of the domain lives
|
|
2
|
+
// here, bound by IRI, and the code that composes plans binds to it rather than knowing it.
|
|
3
|
+
//
|
|
4
|
+
// "Pay every member of the team 5 USDC" is one sentence and N acts. Whether the N is even ENUMERABLE is
|
|
5
|
+
// a fact about the relation, not about the planner: a membership names a bounded, owner-recorded set an
|
|
6
|
+
// organization can answer for; a public search result is an unbounded list of strangers and is not a
|
|
7
|
+
// payee list, however array-shaped it arrives. Before this binding existed the difference lived nowhere,
|
|
8
|
+
// and a planner that improvised a fan-out had nothing to refuse it.
|
|
9
|
+
//
|
|
10
|
+
// THE INVARIANT THIS SERVES (spec 351 §2.4.7): each fanned-out item re-enters the verifier as its own
|
|
11
|
+
// step — a mandate per payment, judged alone. The binding never grants: it says which relations a plan
|
|
12
|
+
// may ENUMERATE, and caps how many items one sentence may become. What each item may DO stays with the
|
|
13
|
+
// mandate, exactly as if the person had asked N times.
|
|
14
|
+
// Namespaces inlined for the same TDZ reason as every sibling binding in this package.
|
|
15
|
+
const APORG = 'https://agenticprimitives.dev/ns/org#';
|
|
16
|
+
const AP = 'https://agenticprimitives.dev/ns/core#';
|
|
17
|
+
/** Relations a plan step may fan out over. Everything else is refused BY NAME — absence is a decision
|
|
18
|
+
* here, not an oversight, because an unlisted relation fails closed in the loop. */
|
|
19
|
+
export const FAN_OUT_RELATIONS = [
|
|
20
|
+
{
|
|
21
|
+
relation: `${APORG}memberAgent`,
|
|
22
|
+
because: 'a membership names a bounded, owner-recorded set the organization itself can answer for',
|
|
23
|
+
maxItems: 25,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
relation: `${AP}charters`,
|
|
27
|
+
because: "the agents chartered under an owner are that owner's own bounded estate, recorded at genesis",
|
|
28
|
+
maxItems: 12,
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
/** Relations that resolve to ONE object by their meaning. A plan that fans out over one of these has
|
|
32
|
+
* misread the domain — `primaryPayee` is "the one they want paid", and iterating it is a bug. */
|
|
33
|
+
export const RESOLVE_TO_ONE_RELATIONS = [`${AP}primaryPayee`];
|
|
34
|
+
/** The binding for a relation, or null — and null must FAIL CLOSED in the consumer. */
|
|
35
|
+
export function fanOutBindingFor(relation) {
|
|
36
|
+
return FAN_OUT_RELATIONS.find((r) => r.relation === relation) ?? null;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=plan-shapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-shapes.js","sourceRoot":"","sources":["../src/plan-shapes.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,2FAA2F;AAC3F,EAAE;AACF,wGAAwG;AACxG,wGAAwG;AACxG,qGAAqG;AACrG,yGAAyG;AACzG,oEAAoE;AACpE,EAAE;AACF,sGAAsG;AACtG,uGAAuG;AACvG,uGAAuG;AACvG,uDAAuD;AAEvD,uFAAuF;AACvF,MAAM,KAAK,GAAG,uCAAuC,CAAC;AACtD,MAAM,EAAE,GAAG,wCAAwC,CAAC;AAYpD;qFACqF;AACrF,MAAM,CAAC,MAAM,iBAAiB,GAA8B;IAC1D;QACE,QAAQ,EAAE,GAAG,KAAK,aAAa;QAC/B,OAAO,EAAE,yFAAyF;QAClG,QAAQ,EAAE,EAAE;KACb;IACD;QACE,QAAQ,EAAE,GAAG,EAAE,UAAU;QACzB,OAAO,EAAE,8FAA8F;QACvG,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF;kGACkG;AAClG,MAAM,CAAC,MAAM,wBAAwB,GAAsB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAEjF,uFAAuF;AACvF,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface DomainPrincipleV1 {
|
|
2
|
+
iri: string;
|
|
3
|
+
id: string;
|
|
4
|
+
area: string;
|
|
5
|
+
statement: string;
|
|
6
|
+
governs: readonly string[];
|
|
7
|
+
enforcedBy: readonly string[];
|
|
8
|
+
violation: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const DOMAIN_PRINCIPLES: readonly DomainPrincipleV1[];
|
|
11
|
+
//# sourceMappingURL=principles.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"principles.generated.d.ts","sourceRoot":"","sources":["../src/principles.generated.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAC7K,eAAO,MAAM,iBAAiB,EAAE,SAAS,iBAAiB,EAmSzD,CAAC"}
|