@agenticprimitives/ontology 1.0.0-alpha.21 → 1.0.0-alpha.23
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/cbox/card-projection-shapes.shacl.ttl +216 -0
- package/cbox/controlled-vocabularies.ttl +172 -4
- package/cbox/naming-registry-shapes.shacl.ttl +272 -0
- package/cbox/org-team-shapes.shacl.ttl +184 -0
- package/cbox/registry-vocabulary.ttl +86 -0
- package/cbox/run-provenance-shapes.shacl.ttl +172 -0
- package/context.jsonld +7 -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 +4 -2
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +22 -0
- 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/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 +230 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +275 -1
- package/dist/index.js.map +1 -1
- package/dist/party-roles.d.ts +106 -0
- package/dist/party-roles.d.ts.map +1 -0
- package/dist/party-roles.js +305 -0
- package/dist/party-roles.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/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-provenance-context.d.ts +211 -0
- package/dist/run-provenance-context.d.ts.map +1 -0
- package/dist/run-provenance-context.js +219 -0
- package/dist/run-provenance-context.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 +330 -0
- package/dist/vault-records.js.map +1 -0
- package/mappings/agent-discovery-standards.ttl +24 -3
- package/mappings/collaboration-crosswalk-organization.ttl +22 -0
- package/mappings/collaboration-crosswalk-skills.ttl +5 -0
- package/package.json +4 -2
- package/run-provenance.jsonld +106 -0
- package/tbox/actor-context.ttl +11 -0
- package/tbox/agent-resolution.ttl +6 -6
- package/tbox/card-projection.ttl +350 -0
- package/tbox/contact.ttl +61 -0
- package/tbox/context.ttl +114 -0
- package/tbox/coordination.ttl +17 -0
- package/tbox/core.ttl +232 -12
- package/tbox/execution.ttl +168 -0
- package/tbox/household.ttl +142 -0
- package/tbox/interaction.ttl +13 -0
- package/tbox/naming.ttl +114 -0
- package/tbox/org.ttl +188 -4
- package/tbox/profile.ttl +7 -0
- package/tbox/prov-imports.ttl +65 -0
- package/tbox/registry.ttl +159 -4
- package/tbox/skills.ttl +62 -0
- package/tbox/values.ttl +81 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# C-box — SHACL shapes for a harness run's provenance record (spec 389 W2).
|
|
2
|
+
#
|
|
3
|
+
# WHAT THESE ARE AND ARE NOT. A run's vault record (`run.provenance:<runRef>`) is a PROV graph: one
|
|
4
|
+
# ep-plan:ExecutionTraceBundle holding the run (apexec:ServiceExecution), its steps, what they used and
|
|
5
|
+
# what they generated. These shapes say what makes such a graph VALID AS EVIDENCE — a step that ended
|
|
6
|
+
# before it started, a completed capability step with no mandate behind it, a completed step with no
|
|
7
|
+
# receipt, a reference to nothing, a member missing from the bundle, a literal that carries an address —
|
|
8
|
+
# each is a record that reads fine today and cannot be trusted in a year.
|
|
9
|
+
#
|
|
10
|
+
# NEVER PERMISSION. Conformance does not mean the run was authorized, and a REFUSED step is fully
|
|
11
|
+
# shape-valid (R3 targets only COMPLETED capability steps): refusing to record a refusal would delete the
|
|
12
|
+
# evidence an audit most needs (ADR-0058's rule, unchanged). No verifier reads these shapes or the record
|
|
13
|
+
# they validate (spec 354 §1 / ADR-0041). They run in CI over records the projector built, and over the
|
|
14
|
+
# forged / truncated / leaking twins that must fail them.
|
|
15
|
+
#
|
|
16
|
+
# ENGINE NOTES. One sh:sparql per NodeShape (shacl-engine compiles them as one unit). sh:targetClass
|
|
17
|
+
# relies on the rdfs:subClassOf* closure the house harness materializes. R5 and R6 are scoped to the
|
|
18
|
+
# bundle's own members (`ep-plan:hasTraceElement`) so the T-box unioned into the data graph — whose
|
|
19
|
+
# comments legitimately quote addresses — is never in scope.
|
|
20
|
+
|
|
21
|
+
@prefix apexec: <https://agenticprimitives.dev/ns/execution#> .
|
|
22
|
+
@prefix apvr: <https://agenticprimitives.dev/ns/verification-receipt#> .
|
|
23
|
+
@prefix prov: <http://www.w3.org/ns/prov#> .
|
|
24
|
+
@prefix p-plan: <http://purl.org/net/p-plan#> .
|
|
25
|
+
@prefix ep-plan: <https://w3id.org/ep-plan#> .
|
|
26
|
+
@prefix sh: <http://www.w3.org/ns/shacl#> .
|
|
27
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
28
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
29
|
+
|
|
30
|
+
# ─── R1 · temporal order ─────────────────────────────────────────────────────
|
|
31
|
+
|
|
32
|
+
apexec:ActivityTemporalOrderShape a sh:NodeShape ;
|
|
33
|
+
rdfs:label "R1a — an activity ends no earlier than it starts" ;
|
|
34
|
+
sh:targetClass prov:Activity ;
|
|
35
|
+
sh:sparql [
|
|
36
|
+
sh:message "R1: the activity ended before it started — a record with time running backwards is not evidence (spec 389 W2)." ;
|
|
37
|
+
sh:select """
|
|
38
|
+
SELECT $this ?started ?ended WHERE {
|
|
39
|
+
$this <http://www.w3.org/ns/prov#startedAtTime> ?started ;
|
|
40
|
+
<http://www.w3.org/ns/prov#endedAtTime> ?ended .
|
|
41
|
+
FILTER(STR(?ended) < STR(?started))
|
|
42
|
+
}
|
|
43
|
+
""" ;
|
|
44
|
+
] .
|
|
45
|
+
|
|
46
|
+
apexec:RunTemporalOrderShape a sh:NodeShape ;
|
|
47
|
+
rdfs:label "R1b — a step ends no later than its run" ;
|
|
48
|
+
sh:targetClass apexec:ServiceExecution ;
|
|
49
|
+
sh:sparql [
|
|
50
|
+
sh:message "R1: a step of this run ended after the run itself ended (spec 389 W2)." ;
|
|
51
|
+
sh:select """
|
|
52
|
+
SELECT $this ?step ?stepEnd ?runEnd WHERE {
|
|
53
|
+
$this <https://agenticprimitives.dev/ns/execution#hasStep> ?step ;
|
|
54
|
+
<http://www.w3.org/ns/prov#endedAtTime> ?runEnd .
|
|
55
|
+
?step <http://www.w3.org/ns/prov#endedAtTime> ?stepEnd .
|
|
56
|
+
FILTER(STR(?stepEnd) > STR(?runEnd))
|
|
57
|
+
}
|
|
58
|
+
""" ;
|
|
59
|
+
] .
|
|
60
|
+
|
|
61
|
+
# ─── R2 · references resolve; generation is mutual ──────────────────────────
|
|
62
|
+
|
|
63
|
+
apexec:StepUsageResolvableShape a sh:NodeShape ;
|
|
64
|
+
rdfs:label "R2 — what a step used is in the graph; what it generated points back" ;
|
|
65
|
+
sh:targetClass prov:Activity ;
|
|
66
|
+
sh:sparql [
|
|
67
|
+
sh:message "R2: the activity used or generated something the graph does not describe — a reference to nothing, or a generated entity that does not name this activity as its generator (spec 389 W2)." ;
|
|
68
|
+
sh:select """
|
|
69
|
+
SELECT $this ?ref WHERE {
|
|
70
|
+
{
|
|
71
|
+
{ $this <http://www.w3.org/ns/prov#used> ?ref } UNION { $this <https://agenticprimitives.dev/ns/verification-receipt#usedDelegation> ?ref }
|
|
72
|
+
FILTER NOT EXISTS { ?ref a ?anyType }
|
|
73
|
+
}
|
|
74
|
+
UNION
|
|
75
|
+
{
|
|
76
|
+
$this <http://www.w3.org/ns/prov#generated> ?ref .
|
|
77
|
+
FILTER NOT EXISTS { ?ref <http://www.w3.org/ns/prov#wasGeneratedBy> $this }
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
""" ;
|
|
81
|
+
] .
|
|
82
|
+
|
|
83
|
+
# ─── R3 · a completed capability step ran under a mandate that allowed it ────
|
|
84
|
+
|
|
85
|
+
apexec:CapabilityStepMandateShape a sh:NodeShape ;
|
|
86
|
+
rdfs:label "R3 — a completed capability step presented a mandate and the verdict was allow" ;
|
|
87
|
+
sh:target [
|
|
88
|
+
sh:select """
|
|
89
|
+
SELECT ?this WHERE {
|
|
90
|
+
?this <https://agenticprimitives.dev/ns/execution#realizesCapability> ?cap ;
|
|
91
|
+
<https://agenticprimitives.dev/ns/execution#completionState> <https://agenticprimitives.dev/ns/execution#Completed> .
|
|
92
|
+
}
|
|
93
|
+
""" ;
|
|
94
|
+
] ;
|
|
95
|
+
sh:property [
|
|
96
|
+
sh:path apvr:usedDelegation ;
|
|
97
|
+
sh:minCount 1 ; sh:nodeKind sh:IRI ;
|
|
98
|
+
sh:message "R3: a COMPLETED capability step names no mandate (apvr:usedDelegation) — a consequential act with nothing behind it is a forged record, not a run (spec 389 W2; spec 350: every consequential step presents a mandate)." ;
|
|
99
|
+
] ;
|
|
100
|
+
sh:property [
|
|
101
|
+
sh:path apexec:authorityDecision ;
|
|
102
|
+
sh:minCount 1 ; sh:in ( "allow" ) ;
|
|
103
|
+
sh:message "R3: a COMPLETED capability step records a verdict other than allow — a step that completed under a deny is a record that contradicts itself (spec 389 W2)." ;
|
|
104
|
+
] .
|
|
105
|
+
|
|
106
|
+
# ─── R4 · a completed step left its receipt ──────────────────────────────────
|
|
107
|
+
|
|
108
|
+
apexec:CompletedStepReceiptShape a sh:NodeShape ;
|
|
109
|
+
rdfs:label "R4 — a completed step carries its receipt digest and generated its receipt" ;
|
|
110
|
+
sh:target [
|
|
111
|
+
sh:select """
|
|
112
|
+
SELECT ?this WHERE {
|
|
113
|
+
?this <http://purl.org/net/p-plan#correspondsToStep> ?planStep ;
|
|
114
|
+
<https://agenticprimitives.dev/ns/execution#completionState> <https://agenticprimitives.dev/ns/execution#Completed> .
|
|
115
|
+
}
|
|
116
|
+
""" ;
|
|
117
|
+
] ;
|
|
118
|
+
sh:property [
|
|
119
|
+
sh:path apexec:receiptDigest ;
|
|
120
|
+
sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:string ; sh:pattern "^0x[0-9a-f]{64}$" ;
|
|
121
|
+
sh:message "R4: a COMPLETED step carries no receipt digest (or not a sha256) — the receipt is the commitment to what was done; without it the step is a claim (spec 389 W2; spec 381)." ;
|
|
122
|
+
] ;
|
|
123
|
+
sh:sparql [
|
|
124
|
+
sh:message "R4: a COMPLETED step generated no apexec:StepReceipt entity — the digest on the activity and the receipt in the graph must both be there (spec 389 W2)." ;
|
|
125
|
+
sh:select """
|
|
126
|
+
SELECT $this WHERE {
|
|
127
|
+
FILTER NOT EXISTS {
|
|
128
|
+
$this <http://www.w3.org/ns/prov#generated> ?r .
|
|
129
|
+
?r a <https://agenticprimitives.dev/ns/execution#StepReceipt> .
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
""" ;
|
|
133
|
+
] .
|
|
134
|
+
|
|
135
|
+
# ─── R5 · every node of the run is a member of its bundle ────────────────────
|
|
136
|
+
|
|
137
|
+
apexec:ExecutionTraceBundleMembershipShape a sh:NodeShape ;
|
|
138
|
+
rdfs:label "R5 — every activity, agent and entity of the run is a hasTraceElement of the bundle" ;
|
|
139
|
+
sh:targetClass ep-plan:ExecutionTraceBundle ;
|
|
140
|
+
sh:property [
|
|
141
|
+
sh:path prov:wasAttributedTo ;
|
|
142
|
+
sh:minCount 1 ; sh:nodeKind sh:IRI ;
|
|
143
|
+
sh:message "R5: the bundle is attributed to no agent — whose record is this? (spec 389 W2; the vault it lives in is the acting agent's)." ;
|
|
144
|
+
] ;
|
|
145
|
+
sh:sparql [
|
|
146
|
+
sh:message "R5: a node of the run is not a member of its bundle (ep-plan:hasTraceElement) — a graph whose members are not listed cannot be checked for what it omits (spec 389 W2)." ;
|
|
147
|
+
sh:select """
|
|
148
|
+
SELECT $this ?node WHERE {
|
|
149
|
+
{ ?node a <http://www.w3.org/ns/prov#Activity> } UNION { ?node a <http://www.w3.org/ns/prov#Entity> } UNION { ?node a <http://www.w3.org/ns/prov#Agent> }
|
|
150
|
+
FILTER(?node != $this)
|
|
151
|
+
FILTER NOT EXISTS { $this <https://w3id.org/ep-plan#hasTraceElement> ?node }
|
|
152
|
+
FILTER NOT EXISTS { ?node a <http://www.w3.org/2002/07/owl#Class> }
|
|
153
|
+
}
|
|
154
|
+
""" ;
|
|
155
|
+
] .
|
|
156
|
+
|
|
157
|
+
# ─── R6 · no plaintext: no address, no long literal, among the bundle's members ─
|
|
158
|
+
|
|
159
|
+
apexec:NoPlaintextInRunProvenanceShape a sh:NodeShape ;
|
|
160
|
+
rdfs:label "R6 — no literal of the run carries an address or a body" ;
|
|
161
|
+
sh:targetClass ep-plan:ExecutionTraceBundle ;
|
|
162
|
+
sh:sparql [
|
|
163
|
+
sh:message "R6: a literal in the run's provenance carries a Smart Agent address or is long enough to be a body — the record says what was done, never what it was about; a payee is a digest away from a receipt (spec 381 §1 / spec 389 W2)." ;
|
|
164
|
+
sh:select """
|
|
165
|
+
SELECT $this ?node ?p ?v WHERE {
|
|
166
|
+
{ $this <https://w3id.org/ep-plan#hasTraceElement> ?node } UNION { BIND($this AS ?node) }
|
|
167
|
+
?node ?p ?v .
|
|
168
|
+
FILTER(isLiteral(?v))
|
|
169
|
+
FILTER(REGEX(STR(?v), "(^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{40}([^0-9a-fA-F]|$)") || STRLEN(STR(?v)) > 256)
|
|
170
|
+
}
|
|
171
|
+
""" ;
|
|
172
|
+
] .
|
package/context.jsonld
CHANGED
|
@@ -33,7 +33,11 @@
|
|
|
33
33
|
"apsit": "https://agenticprimitives.dev/ns/situation#",
|
|
34
34
|
"apfo": "https://agenticprimitives.dev/ns/familyoffice#",
|
|
35
35
|
"apent": "https://agenticprimitives.dev/ns/entitlement#",
|
|
36
|
-
"
|
|
36
|
+
"apix": "https://agenticprimitives.dev/ns/interaction#",
|
|
37
|
+
"apexec": "https://agenticprimitives.dev/ns/execution#",
|
|
38
|
+
"apactor": "https://agenticprimitives.dev/ns/actor#",
|
|
39
|
+
"apguide": "https://agenticprimitives.dev/ns/guidance#",
|
|
40
|
+
"apcoord": "https://agenticprimitives.dev/ns/coordination#",
|
|
37
41
|
|
|
38
42
|
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
|
|
39
43
|
"rdfs": "http://www.w3.org/2000/01/rdf-schema#",
|
|
@@ -42,6 +46,8 @@
|
|
|
42
46
|
"sh": "http://www.w3.org/ns/shacl#",
|
|
43
47
|
"skos": "http://www.w3.org/2004/02/skos/core#",
|
|
44
48
|
"prov": "http://www.w3.org/ns/prov#",
|
|
49
|
+
"p-plan": "http://purl.org/net/p-plan#",
|
|
50
|
+
"ep-plan": "https://w3id.org/ep-plan#",
|
|
45
51
|
"dul": "http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#",
|
|
46
52
|
"vf": "https://w3id.org/valueflows#",
|
|
47
53
|
"ufo-c": "http://purl.org/nemo/ufo-c#",
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type ClassIri } from './party-roles.js';
|
|
2
|
+
export type ValueTypeName = 'Amount' | 'Asset' | 'EmailAddress' | 'DisplayLabel' | 'Flag' | 'AgentKind';
|
|
3
|
+
/** The T-box term each type names. Checked by `check:ontology-bindings` like every other binding. */
|
|
4
|
+
export declare const VALUE_TYPE_TERM: Readonly<Record<ValueTypeName, ClassIri>>;
|
|
5
|
+
export interface ArgTypeBindingV1 {
|
|
6
|
+
/** The capability whose argument this is (ADR-0051 id). */
|
|
7
|
+
capability: string;
|
|
8
|
+
/** The argument name, as the tool declares it. */
|
|
9
|
+
arg: string;
|
|
10
|
+
type: ValueTypeName;
|
|
11
|
+
/** What to call it when asking a person for it. */
|
|
12
|
+
word: string;
|
|
13
|
+
/** A hint that says how to answer, in the person's terms. */
|
|
14
|
+
hint?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Every non-party argument, and what it is.
|
|
18
|
+
*
|
|
19
|
+
* PARTY ARGUMENTS ARE NOT HERE — they are in `PARTY_ROLES`, which answers a different question (which
|
|
20
|
+
* CLASS of agent may fill it, and which relation to follow to get there). One argument, one table.
|
|
21
|
+
*/
|
|
22
|
+
export declare const ARG_TYPES: readonly ArgTypeBindingV1[];
|
|
23
|
+
/** The type bound to one capability's argument, or undefined — undefined means "not a value we read", and
|
|
24
|
+
* the argument passes through untouched, which is how every unbound argument behaved before this existed. */
|
|
25
|
+
export declare function argType(capability: string, arg: string): ArgTypeBindingV1 | undefined;
|
|
26
|
+
/** The value bindings of one capability — what a normaliser loops over. */
|
|
27
|
+
export declare function argTypesFor(capability: string): readonly ArgTypeBindingV1[];
|
|
28
|
+
export type ValueRead = {
|
|
29
|
+
ok: true;
|
|
30
|
+
value: string;
|
|
31
|
+
}
|
|
32
|
+
/** `said` is what the person or planner wrote, kept VERBATIM so a question can name it back. */
|
|
33
|
+
| {
|
|
34
|
+
ok: false;
|
|
35
|
+
said: string;
|
|
36
|
+
because: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Read one value of a declared type. TOTAL: it never throws and never guesses; an unreadable value comes
|
|
40
|
+
* back with the words that could not be read and a reason a person can act on.
|
|
41
|
+
*/
|
|
42
|
+
export declare function readValue(type: ValueTypeName, raw: unknown, opts?: {
|
|
43
|
+
assets?: readonly string[];
|
|
44
|
+
}): ValueRead;
|
|
45
|
+
/**
|
|
46
|
+
* IS THIS FLAG TRUE — the one reader for a yes/no, wherever it is read.
|
|
47
|
+
*
|
|
48
|
+
* `readValue('Flag', …)` canonicalises to the STRING "true"/"false", because every value a reader
|
|
49
|
+
* returns is a string and an argument that changed type on the way through would be worse. Consumers
|
|
50
|
+
* then have to parse it, and one of them compared to the BOOLEAN instead: `remove: true` arrived as
|
|
51
|
+
* `"true"`, the check failed, and asking to remove somebody from a household silently re-added them.
|
|
52
|
+
* One helper, so that comparison is written once.
|
|
53
|
+
*/
|
|
54
|
+
export declare function isFlagTrue(v: unknown): boolean;
|
|
55
|
+
/** The kinds an `AgentKind` argument may be, for a surface that offers them rather than a box. */
|
|
56
|
+
export declare function agentKindChoices(): Array<{
|
|
57
|
+
value: string;
|
|
58
|
+
label: string;
|
|
59
|
+
}>;
|
|
60
|
+
//# sourceMappingURL=arg-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arg-types.d.ts","sourceRoot":"","sources":["../src/arg-types.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKnE,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,cAAc,GAAG,cAAc,GAAG,MAAM,GAAG,WAAW,CAAC;AAExG,qGAAqG;AACrG,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAOrE,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,aAAa,CAAC;IACpB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,SAAS,gBAAgB,EAiBhD,CAAC;AAEF;8GAC8G;AAC9G,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAErF;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,gBAAgB,EAAE,CAE3E;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAC7B,gGAAgG;GAC9F;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAOjD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAkD7G;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAI9C;AAED,kGAAkG;AAClG,wBAAgB,gBAAgB,IAAI,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAE1E"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// WHAT AN ARGUMENT IS, AND HOW IT IS READ — spec 363 W2.
|
|
2
|
+
//
|
|
3
|
+
// `PARTY_ROLES` says what an argument's PARTY may be. This says what the rest of them ARE, and gives each
|
|
4
|
+
// type exactly ONE reader — so a person's phrasing is understood identically in the normaliser, the
|
|
5
|
+
// invoker and the form, and a refusal always names what it could not read.
|
|
6
|
+
//
|
|
7
|
+
// THE THREE INCIDENTS THIS TABLE EXISTS FOR, all in one week and all the same shape:
|
|
8
|
+
// · `amount: "20"` for "20 USDC" — a planner writing a REPRESENTATION it had no basis to compute.
|
|
9
|
+
// 0.00002 dollars moved, under a mandate every gate approved.
|
|
10
|
+
// · "10 usdc" answered to "how much?" and silently dropped, because one branch wanted bare digits.
|
|
11
|
+
// · `wants ?? 'treasury'` — a kind with no declared value set, defaulting to the only one the code
|
|
12
|
+
// knew, so a team invitation asked somebody for a way to reach their treasury.
|
|
13
|
+
//
|
|
14
|
+
// A READER NEVER GUESSES. It returns the canonical value, or a refusal carrying the words it could not
|
|
15
|
+
// read — which is what lets a question be asked ONCE more with the reason, rather than identically
|
|
16
|
+
// forever.
|
|
17
|
+
import { CLASS_FOR_SUFFIX } from './party-roles.js';
|
|
18
|
+
const AP_VAL_NS = 'https://agenticprimitives.dev/ns/value#';
|
|
19
|
+
const VAL = (local) => `${AP_VAL_NS}${local}`;
|
|
20
|
+
/** The T-box term each type names. Checked by `check:ontology-bindings` like every other binding. */
|
|
21
|
+
export const VALUE_TYPE_TERM = {
|
|
22
|
+
Amount: VAL('Amount'),
|
|
23
|
+
Asset: VAL('Asset'),
|
|
24
|
+
EmailAddress: VAL('EmailAddress'),
|
|
25
|
+
DisplayLabel: VAL('DisplayLabel'),
|
|
26
|
+
Flag: VAL('Flag'),
|
|
27
|
+
AgentKind: VAL('AgentKind'),
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Every non-party argument, and what it is.
|
|
31
|
+
*
|
|
32
|
+
* PARTY ARGUMENTS ARE NOT HERE — they are in `PARTY_ROLES`, which answers a different question (which
|
|
33
|
+
* CLASS of agent may fill it, and which relation to follow to get there). One argument, one table.
|
|
34
|
+
*/
|
|
35
|
+
export const ARG_TYPES = [
|
|
36
|
+
{ capability: 'treasury.payment.execute', arg: 'usdc', type: 'Amount', word: 'how much', hint: 'in whole USDC — "20", "12.50"' },
|
|
37
|
+
{ capability: 'treasury.fund', arg: 'usdc', type: 'Amount', word: 'how much', hint: 'in whole USDC — "20", "12.50"' },
|
|
38
|
+
// `asset` IS NOT BOUND, deliberately. On a single-token deployment it is pinned from configuration and
|
|
39
|
+
// nobody — planner or person — may write it, so reading it would mean validating a value no caller
|
|
40
|
+
// supplies and, worse, ASKING about one: "which token?" is a question with exactly one answer that the
|
|
41
|
+
// system already knows. The `Asset` type stays declared for a deployment with a real choice to offer.
|
|
42
|
+
// THE ONE THAT SENT A TREASURY REQUEST TO SOMEBODY BEING INVITED TO A TEAM. A kind, with a declared
|
|
43
|
+
// value set and no default: not said ⇒ asked.
|
|
44
|
+
{ capability: 'resolution.invitation.request', arg: 'wants', type: 'AgentKind', word: 'what you need', hint: 'a treasury (to send money), an organization, a team, or another agent of theirs' },
|
|
45
|
+
{ capability: 'profile.contact.update', arg: 'email', type: 'EmailAddress', word: 'email', hint: 'in full, like name@example.org' },
|
|
46
|
+
{ capability: 'profile.contact.update', arg: 'firstName', type: 'DisplayLabel', word: 'first name' },
|
|
47
|
+
{ capability: 'profile.contact.update', arg: 'lastName', type: 'DisplayLabel', word: 'last name' },
|
|
48
|
+
{ capability: 'household.member.record', arg: 'label', type: 'DisplayLabel', word: 'what you call them' },
|
|
49
|
+
{ capability: 'household.member.record', arg: 'remove', type: 'Flag', word: 'remove them' },
|
|
50
|
+
{ capability: 'treasury.primary.declare', arg: 'on', type: 'Flag', word: 'set it' },
|
|
51
|
+
];
|
|
52
|
+
/** The type bound to one capability's argument, or undefined — undefined means "not a value we read", and
|
|
53
|
+
* the argument passes through untouched, which is how every unbound argument behaved before this existed. */
|
|
54
|
+
export function argType(capability, arg) {
|
|
55
|
+
return ARG_TYPES.find((b) => b.capability === capability && b.arg === arg);
|
|
56
|
+
}
|
|
57
|
+
/** The value bindings of one capability — what a normaliser loops over. */
|
|
58
|
+
export function argTypesFor(capability) {
|
|
59
|
+
return ARG_TYPES.filter((b) => b.capability === capability);
|
|
60
|
+
}
|
|
61
|
+
/** A placeholder is an omission, not a value — the planner's, and never quoted back at a person. */
|
|
62
|
+
const PLACEHOLDER = /^<.*>$|^(unknown|tbd|n\/a|none|null|undefined|todo|xxx+)$/i;
|
|
63
|
+
/** Control characters, by code point: a label is shown to people, and these are not shown to anyone. */
|
|
64
|
+
const CONTROL_CHARS = new RegExp('[\\u0000-\\u001f\\u007f]', 'g');
|
|
65
|
+
/**
|
|
66
|
+
* Read one value of a declared type. TOTAL: it never throws and never guesses; an unreadable value comes
|
|
67
|
+
* back with the words that could not be read and a reason a person can act on.
|
|
68
|
+
*/
|
|
69
|
+
export function readValue(type, raw, opts) {
|
|
70
|
+
const said = String(raw ?? '').trim();
|
|
71
|
+
if (!said || PLACEHOLDER.test(said))
|
|
72
|
+
return { ok: false, said: PLACEHOLDER.test(said) ? '' : said, because: 'nothing was given' };
|
|
73
|
+
switch (type) {
|
|
74
|
+
case 'Amount': {
|
|
75
|
+
// A currency word or symbol beside a figure adds no information a single-asset deployment does not
|
|
76
|
+
// already have; a thousands comma is punctuation. "10,50" stays unreadable rather than guessed at —
|
|
77
|
+
// a decimal comma and a thousands comma are the same character and only the person knows which.
|
|
78
|
+
const v = said.toLowerCase()
|
|
79
|
+
.replace(/^[$€£]/, '')
|
|
80
|
+
.replace(/\b(usdc|usd|dollars?|bucks?)\b/g, '')
|
|
81
|
+
.replace(/(\d),(?=\d{3}\b)/g, '$1')
|
|
82
|
+
.replace(/\s+/g, '');
|
|
83
|
+
return /^\d+(\.\d+)?$/.test(v)
|
|
84
|
+
? { ok: true, value: v }
|
|
85
|
+
: { ok: false, said, because: 'that is not a figure I can read' };
|
|
86
|
+
}
|
|
87
|
+
case 'Asset': {
|
|
88
|
+
if (/^0x[0-9a-fA-F]{40}$/.test(said))
|
|
89
|
+
return { ok: true, value: said.toLowerCase() };
|
|
90
|
+
const known = (opts?.assets ?? []).map((a) => a.toLowerCase());
|
|
91
|
+
const sym = said.toLowerCase();
|
|
92
|
+
// A SYMBOL IS NOT AN ADDRESS. Only what this deployment configures resolves; a remembered address
|
|
93
|
+
// for another chain is well-formed and wrong, which is the failure that started this.
|
|
94
|
+
return known.includes(sym)
|
|
95
|
+
? { ok: true, value: sym }
|
|
96
|
+
: { ok: false, said, because: 'this deployment does not have a token by that name' };
|
|
97
|
+
}
|
|
98
|
+
case 'EmailAddress':
|
|
99
|
+
return /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(said)
|
|
100
|
+
? { ok: true, value: said }
|
|
101
|
+
: { ok: false, said, because: 'that is not an email address' };
|
|
102
|
+
case 'DisplayLabel': {
|
|
103
|
+
const clean = said.replace(CONTROL_CHARS, '').trim().slice(0, 120);
|
|
104
|
+
return clean ? { ok: true, value: clean } : { ok: false, said, because: 'that is not a name I can show' };
|
|
105
|
+
}
|
|
106
|
+
case 'Flag': {
|
|
107
|
+
const v = said.toLowerCase();
|
|
108
|
+
if (['true', 'yes', 'on', '1'].includes(v))
|
|
109
|
+
return { ok: true, value: 'true' };
|
|
110
|
+
if (['false', 'no', 'off', '0'].includes(v))
|
|
111
|
+
return { ok: true, value: 'false' };
|
|
112
|
+
return { ok: false, said, because: 'that is not a yes or a no' };
|
|
113
|
+
}
|
|
114
|
+
case 'AgentKind': {
|
|
115
|
+
const v = said.toLowerCase().replace(/^(a|an|the)\s+/, '').replace(/^their\s+/, '').trim();
|
|
116
|
+
// The vocabulary is the DERIVED AGENT TYPES (ADR-0061) — the same suffixes the naming service mints
|
|
117
|
+
// and `CLASS_FOR_SUFFIX` binds, never a second list that could disagree with them.
|
|
118
|
+
const suffixes = Object.keys(CLASS_FOR_SUFFIX);
|
|
119
|
+
const hit = suffixes.find((sfx) => sfx === v || `${sfx}s` === v || v.endsWith(` ${sfx}`));
|
|
120
|
+
return hit ? { ok: true, value: hit } : { ok: false, said, because: 'that is not a kind of agent I know' };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* IS THIS FLAG TRUE — the one reader for a yes/no, wherever it is read.
|
|
126
|
+
*
|
|
127
|
+
* `readValue('Flag', …)` canonicalises to the STRING "true"/"false", because every value a reader
|
|
128
|
+
* returns is a string and an argument that changed type on the way through would be worse. Consumers
|
|
129
|
+
* then have to parse it, and one of them compared to the BOOLEAN instead: `remove: true` arrived as
|
|
130
|
+
* `"true"`, the check failed, and asking to remove somebody from a household silently re-added them.
|
|
131
|
+
* One helper, so that comparison is written once.
|
|
132
|
+
*/
|
|
133
|
+
export function isFlagTrue(v) {
|
|
134
|
+
if (v === true)
|
|
135
|
+
return true;
|
|
136
|
+
const read = readValue('Flag', v);
|
|
137
|
+
return read.ok && read.value === 'true';
|
|
138
|
+
}
|
|
139
|
+
/** The kinds an `AgentKind` argument may be, for a surface that offers them rather than a box. */
|
|
140
|
+
export function agentKindChoices() {
|
|
141
|
+
return Object.keys(CLASS_FOR_SUFFIX).map((sfx) => ({ value: sfx, label: sfx }));
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=arg-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arg-types.js","sourceRoot":"","sources":["../src/arg-types.ts"],"names":[],"mappings":"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"}
|
package/dist/artifacts.d.ts
CHANGED
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export declare const ARTIFACTS: {
|
|
7
7
|
readonly context: "context.jsonld";
|
|
8
|
-
|
|
9
|
-
readonly
|
|
8
|
+
/** Spec 389 — the JSON-LD context a run's provenance record (`run.provenance:<runRef>`) is written under. */
|
|
9
|
+
readonly runProvenanceContext: "run-provenance.jsonld";
|
|
10
|
+
readonly tbox: readonly ["tbox/core.ttl", "tbox/identity.ttl", "tbox/contact.ttl", "tbox/naming.ttl", "tbox/intents.ttl", "tbox/constraints.ttl", "tbox/resolution.ttl", "tbox/agreement.ttl", "tbox/payment.ttl", "tbox/fulfillment.ttl", "tbox/attestation.ttl", "tbox/skills.ttl", "tbox/geo.ttl", "tbox/content.ttl", "tbox/registry.ttl", "tbox/discovery.ttl", "tbox/trust.ttl", "tbox/security-exposure.ttl", "tbox/agent-resolution.ttl", "tbox/verification-receipt.ttl", "tbox/scope.ttl", "tbox/situation.ttl", "tbox/org.ttl", "tbox/familyoffice.ttl", "tbox/entitlement.ttl", "tbox/interaction.ttl", "tbox/messaging.ttl", "tbox/guidance.ttl", "tbox/actor-context.ttl", "tbox/context.ttl", "tbox/profile.ttl", "tbox/execution.ttl", "tbox/plan.ttl", "tbox/prov-imports.ttl", "tbox/coordination.ttl", "tbox/engagement.ttl", "tbox/card-projection.ttl"];
|
|
11
|
+
readonly cbox: readonly ["cbox/canonical-agent-id-shape.shacl.ttl", "cbox/controlled-vocabularies.ttl", "cbox/registry-vocabulary.ttl", "cbox/skill-vocabulary.ttl", "cbox/geo-vocabulary.ttl", "cbox/scope-vocabulary.ttl", "cbox/content-vocabulary.ttl", "cbox/discovery-graph-shapes.shacl.ttl", "cbox/interaction-vocabulary.ttl", "cbox/familyoffice-vocabulary.ttl", "cbox/familyoffice-shapes.shacl.ttl", "cbox/consultation-shapes.shacl.ttl", "cbox/interaction-shapes.shacl.ttl", "cbox/skill-grounding-vocabulary.ttl", "cbox/guidance-vocabulary.ttl", "cbox/profile-facet-vocabulary.ttl", "cbox/agent-facet-shapes.shacl.ttl", "cbox/capability-catalog-shapes.shacl.ttl", "cbox/org-team-shapes.shacl.ttl", "cbox/naming-registry-shapes.shacl.ttl", "cbox/run-provenance-shapes.shacl.ttl", "cbox/card-projection-shapes.shacl.ttl"];
|
|
10
12
|
readonly mappings: readonly ["mappings/spine-standards.ttl", "mappings/agent-discovery-standards.ttl", "mappings/collaboration-profile.ttl", "mappings/collaboration-crosswalk-actors.ttl", "mappings/collaboration-crosswalk-organization.ttl", "mappings/collaboration-crosswalk-messaging.ttl", "mappings/collaboration-crosswalk-intent.ttl", "mappings/collaboration-crosswalk-skills.ttl", "mappings/collaboration-crosswalk-authority.ttl", "mappings/collaboration-crosswalk-protocols.ttl", "mappings/collaboration-crosswalk-guidance.ttl", "mappings/actor-context-standards.ttl", "mappings/commerce-engagement-crosswalk.ttl"];
|
|
11
13
|
};
|
|
12
14
|
/**
|
package/dist/artifacts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,eAAO,MAAM,SAAS;;IAEpB,6GAA6G;;;;;CAmIrG,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
package/dist/artifacts.js
CHANGED
|
@@ -12,10 +12,15 @@ import { fileURLToPath } from 'node:url';
|
|
|
12
12
|
*/
|
|
13
13
|
export const ARTIFACTS = {
|
|
14
14
|
context: 'context.jsonld',
|
|
15
|
+
/** Spec 389 — the JSON-LD context a run's provenance record (`run.provenance:<runRef>`) is written under. */
|
|
16
|
+
runProvenanceContext: 'run-provenance.jsonld',
|
|
15
17
|
tbox: [
|
|
16
18
|
// Phase-1 (identity + core)
|
|
17
19
|
'tbox/core.ttl',
|
|
18
20
|
'tbox/identity.ttl',
|
|
21
|
+
'tbox/contact.ttl',
|
|
22
|
+
// Typed agent naming — tld, contextual issuance, contextual reference (spec 346 §3/§11; ADR-0061)
|
|
23
|
+
'tbox/naming.ttl',
|
|
19
24
|
// Phase-1.5 (v2 coordination substrate spine; spec 225 §11.5)
|
|
20
25
|
'tbox/intents.ttl',
|
|
21
26
|
'tbox/constraints.ttl',
|
|
@@ -65,14 +70,21 @@ export const ARTIFACTS = {
|
|
|
65
70
|
'tbox/execution.ttl',
|
|
66
71
|
// P-Plan grounding (spec 332 §4; closes spec-316 W5) — the plan trichotomy
|
|
67
72
|
'tbox/plan.ttl',
|
|
73
|
+
// PROV-O terms the substrate EMITS, declared so shapes, bindings and A-box rows target something real (spec 389)
|
|
74
|
+
'tbox/prov-imports.ttl',
|
|
68
75
|
// Coordination plane (spec 332 core subset; ADR-0054) — Endeavor / shared plan / participation
|
|
69
76
|
'tbox/coordination.ttl',
|
|
70
77
|
// Intent engagement plane (spec 336 W0 subset) — projections / probes / offers / mandates / receipts
|
|
71
78
|
'tbox/engagement.ttl',
|
|
79
|
+
// Canonical profile / A2A Agent Card / projection / publication / external identity binding
|
|
80
|
+
// (spec 347 §11; ADR-0062) — a second module of the ap: core namespace.
|
|
81
|
+
'tbox/card-projection.ttl',
|
|
72
82
|
],
|
|
73
83
|
cbox: [
|
|
74
84
|
'cbox/canonical-agent-id-shape.shacl.ttl',
|
|
75
85
|
'cbox/controlled-vocabularies.ttl',
|
|
86
|
+
// Registry admission checks / lifecycle event kinds / derived entry status (spec 346 §7)
|
|
87
|
+
'cbox/registry-vocabulary.ttl',
|
|
76
88
|
// Generic skills + geo codelists — on-chain-bound kinds (lockstep, ADR-0009)
|
|
77
89
|
'cbox/skill-vocabulary.ttl',
|
|
78
90
|
'cbox/geo-vocabulary.ttl',
|
|
@@ -102,6 +114,16 @@ export const ARTIFACTS = {
|
|
|
102
114
|
'cbox/agent-facet-shapes.shacl.ttl',
|
|
103
115
|
// Capability catalog well-formedness, the anti-pattern axioms, and realization contracts
|
|
104
116
|
'cbox/capability-catalog-shapes.shacl.ttl',
|
|
117
|
+
// Team affiliation / workspace / representation / responsibility shapes (spec 344 §4.6)
|
|
118
|
+
'cbox/org-team-shapes.shacl.ttl',
|
|
119
|
+
// Typed names, contextual issuance, workspace agent + registry agents, receipts, lifecycle log
|
|
120
|
+
// (spec 346 §11). Structure, never permission.
|
|
121
|
+
'cbox/naming-registry-shapes.shacl.ttl',
|
|
122
|
+
// Run provenance validity R1–R6 (spec 389 W2): what makes a run's PROV record evidence
|
|
123
|
+
'cbox/run-provenance-shapes.shacl.ttl',
|
|
124
|
+
// Public card metadata, projection provenance (eight digests), external bindings, the
|
|
125
|
+
// public/private disclosure boundary (spec 347 §11)
|
|
126
|
+
'cbox/card-projection-shapes.shacl.ttl',
|
|
105
127
|
],
|
|
106
128
|
mappings: [
|
|
107
129
|
'mappings/spine-standards.ttl',
|
package/dist/artifacts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;AAC7E,yCAAyC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,gBAAgB;IACzB,IAAI,EAAE;QACJ,4BAA4B;QAC5B,eAAe;QACf,mBAAmB;QACnB,8DAA8D;QAC9D,kBAAkB;QAClB,sBAAsB;QACtB,qBAAqB;QACrB,oBAAoB;QACpB,kBAAkB;QAClB,sBAAsB;QACtB,sBAAsB;QACtB,4CAA4C;QAC5C,iBAAiB;QACjB,cAAc;QACd,kDAAkD;QAClD,kBAAkB;QAClB,oEAAoE;QACpE,mBAAmB;QACnB,oBAAoB;QACpB,gBAAgB;QAChB,4BAA4B;QAC5B,uFAAuF;QACvF,wFAAwF;QACxF,2BAA2B;QAC3B,8DAA8D;QAC9D,+BAA+B;QAC/B,yBAAyB;QACzB,gBAAgB;QAChB,oDAAoD;QACpD,oBAAoB;QACpB,cAAc;QACd,8EAA8E;QAC9E,4EAA4E;QAC5E,uBAAuB;QACvB,sBAAsB;QACtB,sBAAsB;QACtB,oBAAoB;QACpB,oFAAoF;QACpF,mBAAmB;QACnB,gEAAgE;QAChE,wBAAwB;QACxB,uFAAuF;QACvF,kBAAkB;QAClB,2FAA2F;QAC3F,2FAA2F;QAC3F,kBAAkB;QAClB,oFAAoF;QACpF,6FAA6F;QAC7F,iDAAiD;QACjD,oBAAoB;QACpB,2EAA2E;QAC3E,eAAe;QACf,+FAA+F;QAC/F,uBAAuB;QACvB,qGAAqG;QACrG,qBAAqB;
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../src/artifacts.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;AAC7E,yCAAyC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,gBAAgB;IACzB,6GAA6G;IAC7G,oBAAoB,EAAE,uBAAuB;IAC7C,IAAI,EAAE;QACJ,4BAA4B;QAC5B,eAAe;QACf,mBAAmB;QACnB,kBAAkB;QAClB,kGAAkG;QAClG,iBAAiB;QACjB,8DAA8D;QAC9D,kBAAkB;QAClB,sBAAsB;QACtB,qBAAqB;QACrB,oBAAoB;QACpB,kBAAkB;QAClB,sBAAsB;QACtB,sBAAsB;QACtB,4CAA4C;QAC5C,iBAAiB;QACjB,cAAc;QACd,kDAAkD;QAClD,kBAAkB;QAClB,oEAAoE;QACpE,mBAAmB;QACnB,oBAAoB;QACpB,gBAAgB;QAChB,4BAA4B;QAC5B,uFAAuF;QACvF,wFAAwF;QACxF,2BAA2B;QAC3B,8DAA8D;QAC9D,+BAA+B;QAC/B,yBAAyB;QACzB,gBAAgB;QAChB,oDAAoD;QACpD,oBAAoB;QACpB,cAAc;QACd,8EAA8E;QAC9E,4EAA4E;QAC5E,uBAAuB;QACvB,sBAAsB;QACtB,sBAAsB;QACtB,oBAAoB;QACpB,oFAAoF;QACpF,mBAAmB;QACnB,gEAAgE;QAChE,wBAAwB;QACxB,uFAAuF;QACvF,kBAAkB;QAClB,2FAA2F;QAC3F,2FAA2F;QAC3F,kBAAkB;QAClB,oFAAoF;QACpF,6FAA6F;QAC7F,iDAAiD;QACjD,oBAAoB;QACpB,2EAA2E;QAC3E,eAAe;QACf,iHAAiH;QACjH,uBAAuB;QACvB,+FAA+F;QAC/F,uBAAuB;QACvB,qGAAqG;QACrG,qBAAqB;QACrB,4FAA4F;QAC5F,wEAAwE;QACxE,0BAA0B;KAC3B;IACD,IAAI,EAAE;QACJ,yCAAyC;QACzC,kCAAkC;QAClC,yFAAyF;QACzF,8BAA8B;QAC9B,6EAA6E;QAC7E,2BAA2B;QAC3B,yBAAyB;QACzB,0DAA0D;QAC1D,2BAA2B;QAC3B,oEAAoE;QACpE,6BAA6B;QAC7B,kEAAkE;QAClE,uCAAuC;QACvC,kDAAkD;QAClD,iCAAiC;QACjC,gFAAgF;QAChF,kCAAkC;QAClC,gGAAgG;QAChG,2EAA2E;QAC3E,oCAAoC;QACpC,oDAAoD;QACpD,oCAAoC;QACpC,gFAAgF;QAChF,mCAAmC;QACnC,uCAAuC;QACvC,qCAAqC;QACrC,8BAA8B;QAC9B,wFAAwF;QACxF,mCAAmC;QACnC,iDAAiD;QACjD,mCAAmC;QACnC,yFAAyF;QACzF,0CAA0C;QAC1C,wFAAwF;QACxF,gCAAgC;QAChC,+FAA+F;QAC/F,+CAA+C;QAC/C,uCAAuC;QACvC,uFAAuF;QACvF,sCAAsC;QACtC,sFAAsF;QACtF,oDAAoD;QACpD,uCAAuC;KACxC;IACD,QAAQ,EAAE;QACR,8BAA8B;QAC9B,wCAAwC;QACxC,wDAAwD;QACxD,oCAAoC;QACpC,6CAA6C;QAC7C,mDAAmD;QACnD,gDAAgD;QAChD,6CAA6C;QAC7C,6CAA6C;QAC7C,gDAAgD;QAChD,gDAAgD;QAChD,+CAA+C;QAC/C,yFAAyF;QACzF,sCAAsC;QACtC,uGAAuG;QACvG,4CAA4C;KAC7C;CACO,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC/C,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,MAAM,YAAY,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface ContactFieldV1 {
|
|
2
|
+
/** The argument name an Ask, a form or a contract uses. */
|
|
3
|
+
arg: string;
|
|
4
|
+
/** The path inside the record the Home writes (`contact.firstName`, `contact.location.street`). */
|
|
5
|
+
path: string;
|
|
6
|
+
/** The T-box property it means. */
|
|
7
|
+
property: string;
|
|
8
|
+
/** The words for it. */
|
|
9
|
+
label: string;
|
|
10
|
+
/** For the planner and a form: what to put here. */
|
|
11
|
+
hint: string;
|
|
12
|
+
/** Location fields set the record's precision together (see `precisionOf`). */
|
|
13
|
+
location?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare const CONTACT_FIELDS: readonly ContactFieldV1[];
|
|
16
|
+
export declare const CONTACT_FIELD_ARGS: readonly string[];
|
|
17
|
+
export declare function contactField(arg: string): ContactFieldV1 | undefined;
|
|
18
|
+
/** The precision an address implies from what is filled — the Home's own rule, stated once. */
|
|
19
|
+
export declare function precisionOf(loc: {
|
|
20
|
+
street?: string;
|
|
21
|
+
line2?: string;
|
|
22
|
+
postalCode?: string;
|
|
23
|
+
locality?: string;
|
|
24
|
+
region?: string;
|
|
25
|
+
}): 'country' | 'region' | 'locality' | 'address';
|
|
26
|
+
/** The record binding's property map, derived — so the binding and the field list cannot drift. */
|
|
27
|
+
export declare const CONTACT_PROFILE_PROPERTIES: Readonly<Record<string, string>>;
|
|
28
|
+
//# sourceMappingURL=contact-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-fields.d.ts","sourceRoot":"","sources":["../src/contact-fields.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,mGAAmG;IACnG,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,EAAE,SAAS,cAAc,EAanD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAqC,CAAC;AACtF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAsD;AAE3H,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,GAAG,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAK5K;AAED,mGAAmG;AACnG,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAuE,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// THE CONTACT PROFILE'S FIELDS, ONCE — spec 371 §2.2 (a record edit is shaped by the record).
|
|
2
|
+
//
|
|
3
|
+
// "Set street address to 2445 Walters Drive, Erie Colorado 80516" was refused with "I can't help with
|
|
4
|
+
// that here" while "change my phone" worked. The Ask's edit tool, the invoker, the DO's write allow-list
|
|
5
|
+
// and the SKILL.md contract each carried their own hand-kept list of fields, and "street" was in none.
|
|
6
|
+
// This is the one list — each argument the Ask may take, where it lives in the record the Home writes
|
|
7
|
+
// (`vault:impact-profile`: `contact.<field>` and `contact.location.<field>`), and the T-box property it
|
|
8
|
+
// means. Every surface derives from it; a field added here is editable everywhere, described the same.
|
|
9
|
+
const APCON = 'https://agenticprimitives.dev/ns/contact#';
|
|
10
|
+
export const CONTACT_FIELDS = [
|
|
11
|
+
{ arg: 'firstName', path: 'contact.firstName', property: `${APCON}givenName`, label: 'first name', hint: 'given name' },
|
|
12
|
+
{ arg: 'lastName', path: 'contact.lastName', property: `${APCON}familyName`, label: 'last name', hint: 'family name' },
|
|
13
|
+
{ arg: 'email', path: 'contact.email', property: `${APCON}email`, label: 'email', hint: 'an email address' },
|
|
14
|
+
{ arg: 'phone', path: 'contact.phone', property: `${APCON}telephone`, label: 'phone', hint: 'a telephone number' },
|
|
15
|
+
{ arg: 'organizationName', path: 'contact.organizationName', property: `${APCON}organizationName`, label: 'organization', hint: 'the organization they work with' },
|
|
16
|
+
{ arg: 'organizationCountry', path: 'contact.organizationCountry', property: `${APCON}organizationCountry`, label: 'organization country', hint: 'where that organization is' },
|
|
17
|
+
{ arg: 'street', path: 'contact.location.street', property: `${APCON}streetAddress`, label: 'street address', hint: 'street and number, e.g. "2445 Walters Drive"', location: true },
|
|
18
|
+
{ arg: 'line2', path: 'contact.location.line2', property: `${APCON}streetAddressLine2`, label: 'address line 2', hint: 'apartment, suite or unit', location: true },
|
|
19
|
+
{ arg: 'city', path: 'contact.location.locality', property: `${APCON}addressLocality`, label: 'city', hint: 'city or town, e.g. "Erie"', location: true },
|
|
20
|
+
{ arg: 'region', path: 'contact.location.region', property: `${APCON}addressRegion`, label: 'state or province', hint: 'state or province, e.g. "Colorado"', location: true },
|
|
21
|
+
{ arg: 'postalCode', path: 'contact.location.postalCode', property: `${APCON}postalCode`, label: 'postal code', hint: 'postal or ZIP code, e.g. "80516"', location: true },
|
|
22
|
+
{ arg: 'country', path: 'contact.location.country', property: `${APCON}addressCountry`, label: 'country', hint: 'the country, e.g. "United States" — required for any finer address', location: true },
|
|
23
|
+
];
|
|
24
|
+
export const CONTACT_FIELD_ARGS = CONTACT_FIELDS.map((f) => f.arg);
|
|
25
|
+
export function contactField(arg) { return CONTACT_FIELDS.find((f) => f.arg === arg); }
|
|
26
|
+
/** The precision an address implies from what is filled — the Home's own rule, stated once. */
|
|
27
|
+
export function precisionOf(loc) {
|
|
28
|
+
if (loc.street || loc.line2 || loc.postalCode)
|
|
29
|
+
return 'address';
|
|
30
|
+
if (loc.locality)
|
|
31
|
+
return 'locality';
|
|
32
|
+
if (loc.region)
|
|
33
|
+
return 'region';
|
|
34
|
+
return 'country';
|
|
35
|
+
}
|
|
36
|
+
/** The record binding's property map, derived — so the binding and the field list cannot drift. */
|
|
37
|
+
export const CONTACT_PROFILE_PROPERTIES = Object.fromEntries(CONTACT_FIELDS.map((f) => [f.path, f.property]));
|
|
38
|
+
//# sourceMappingURL=contact-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-fields.js","sourceRoot":"","sources":["../src/contact-fields.ts"],"names":[],"mappings":"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"}
|