@affiant/core 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +354 -0
  3. package/dist/context.d.ts +136 -0
  4. package/dist/context.d.ts.map +1 -0
  5. package/dist/context.js +30 -0
  6. package/dist/context.js.map +1 -0
  7. package/dist/docket/entry.d.ts +421 -0
  8. package/dist/docket/entry.d.ts.map +1 -0
  9. package/dist/docket/entry.js +155 -0
  10. package/dist/docket/entry.js.map +1 -0
  11. package/dist/docket/expiry.d.ts +82 -0
  12. package/dist/docket/expiry.d.ts.map +1 -0
  13. package/dist/docket/expiry.js +106 -0
  14. package/dist/docket/expiry.js.map +1 -0
  15. package/dist/docket/memory.d.ts +163 -0
  16. package/dist/docket/memory.d.ts.map +1 -0
  17. package/dist/docket/memory.js +528 -0
  18. package/dist/docket/memory.js.map +1 -0
  19. package/dist/docket/store.d.ts +387 -0
  20. package/dist/docket/store.d.ts.map +1 -0
  21. package/dist/docket/store.js +51 -0
  22. package/dist/docket/store.js.map +1 -0
  23. package/dist/errors.d.ts +153 -0
  24. package/dist/errors.d.ts.map +1 -0
  25. package/dist/errors.js +164 -0
  26. package/dist/errors.js.map +1 -0
  27. package/dist/gate/coverage.d.ts +152 -0
  28. package/dist/gate/coverage.d.ts.map +1 -0
  29. package/dist/gate/coverage.js +114 -0
  30. package/dist/gate/coverage.js.map +1 -0
  31. package/dist/gate/decide.d.ts +207 -0
  32. package/dist/gate/decide.d.ts.map +1 -0
  33. package/dist/gate/decide.js +559 -0
  34. package/dist/gate/decide.js.map +1 -0
  35. package/dist/gate/gate.d.ts +212 -0
  36. package/dist/gate/gate.d.ts.map +1 -0
  37. package/dist/gate/gate.js +175 -0
  38. package/dist/gate/gate.js.map +1 -0
  39. package/dist/gate/pipeline.d.ts +285 -0
  40. package/dist/gate/pipeline.d.ts.map +1 -0
  41. package/dist/gate/pipeline.js +515 -0
  42. package/dist/gate/pipeline.js.map +1 -0
  43. package/dist/gate/policy.d.ts +272 -0
  44. package/dist/gate/policy.d.ts.map +1 -0
  45. package/dist/gate/policy.js +396 -0
  46. package/dist/gate/policy.js.map +1 -0
  47. package/dist/gate/wrap.d.ts +107 -0
  48. package/dist/gate/wrap.d.ts.map +1 -0
  49. package/dist/gate/wrap.js +164 -0
  50. package/dist/gate/wrap.js.map +1 -0
  51. package/dist/index.d.ts +95 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +111 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/model/affidavit.d.ts +354 -0
  56. package/dist/model/affidavit.d.ts.map +1 -0
  57. package/dist/model/affidavit.js +417 -0
  58. package/dist/model/affidavit.js.map +1 -0
  59. package/dist/model/amendments.d.ts +160 -0
  60. package/dist/model/amendments.d.ts.map +1 -0
  61. package/dist/model/amendments.js +183 -0
  62. package/dist/model/amendments.js.map +1 -0
  63. package/dist/model/canonical.d.ts +311 -0
  64. package/dist/model/canonical.d.ts.map +1 -0
  65. package/dist/model/canonical.js +665 -0
  66. package/dist/model/canonical.js.map +1 -0
  67. package/dist/model/money.d.ts +127 -0
  68. package/dist/model/money.d.ts.map +1 -0
  69. package/dist/model/money.js +177 -0
  70. package/dist/model/money.js.map +1 -0
  71. package/dist/model/provenance.d.ts +315 -0
  72. package/dist/model/provenance.d.ts.map +1 -0
  73. package/dist/model/provenance.js +223 -0
  74. package/dist/model/provenance.js.map +1 -0
  75. package/dist/ports.d.ts +269 -0
  76. package/dist/ports.d.ts.map +1 -0
  77. package/dist/ports.js +34 -0
  78. package/dist/ports.js.map +1 -0
  79. package/dist/store-memory.d.ts +21 -0
  80. package/dist/store-memory.d.ts.map +1 -0
  81. package/dist/store-memory.js +20 -0
  82. package/dist/store-memory.js.map +1 -0
  83. package/dist/telemetry-keys.d.ts +65 -0
  84. package/dist/telemetry-keys.d.ts.map +1 -0
  85. package/dist/telemetry-keys.js +72 -0
  86. package/dist/telemetry-keys.js.map +1 -0
  87. package/dist/telemetry.d.ts +77 -0
  88. package/dist/telemetry.d.ts.map +1 -0
  89. package/dist/telemetry.js +43 -0
  90. package/dist/telemetry.js.map +1 -0
  91. package/dist/testing.d.ts +574 -0
  92. package/dist/testing.d.ts.map +1 -0
  93. package/dist/testing.js +1291 -0
  94. package/dist/testing.js.map +1 -0
  95. package/package.json +75 -0
  96. package/telemetry-keys.json +92 -0
@@ -0,0 +1,285 @@
1
+ /**
2
+ * The gate pipeline: everything between a tool call and a Docket row, in the order
3
+ * the protocol fixes.
4
+ *
5
+ * **Rules served: GT-1** (the order itself), **GT-3** (runtime substance refusal),
6
+ * **GT-4** (TTL stamped from the policy result, after the chain; a re-file keeps the
7
+ * existing deadline), **PV-1** (confidence clamped, merge by confidence then
8
+ * determinism), **PV-3** (the inference step cannot mint `UserStated`), **AF-1**
9
+ * (every proposed field present, unknown provenance recorded as `Empty`), **AF-3**
10
+ * (create carries no previous values; update carries the key on every field),
11
+ * **AZ-1** (a Standing Order writes its attestation in the same operation as the
12
+ * filing), **AZ-4** (a requirement this version does not run is filed blocked),
13
+ * **CV-4** (a declared-uncovered tool's proposal is filed blocked), **SR-4** (the
14
+ * card names the protocol version it conforms to), **TL-1** (the events).
15
+ *
16
+ * ## The order, and why it is this order (GT-1)
17
+ *
18
+ * 1. **Turn context** arrives as a parameter. Nothing here reads a global, and the
19
+ * accumulators below are function-local, so two conversations interleaved in one
20
+ * isolate cannot see each other's fields (GT-2).
21
+ * 2. **Deterministic interceptors** first, because a value a host can look up is
22
+ * better evidence than a value a model can guess, and running them first means the
23
+ * merge in step 4 is comparing against something rather than filling a blank.
24
+ * 3. **One tool-free structured inference** against the *unmodified* turn. One,
25
+ * because a second pass over a turn a previous pass has already been told about is
26
+ * a model agreeing with itself. Tool-free, because a model that can call tools
27
+ * while being asked what a person said can go and find out.
28
+ * 4. **Merge** (PV-1): higher confidence wins, ties toward the more deterministic
29
+ * source, the loser kept in the chain so a card can show a reviewer that the model
30
+ * and the system of record disagreed.
31
+ * 5. **Projection**, then the Affidavit is built (AF-1, AF-3, AF-2).
32
+ * 6. **Substance refusal** (GT-3) — *before* the policy chain. A proposal that swears
33
+ * to nothing must not reach a policy that might approve it, and must not be filed,
34
+ * counted or broadcast.
35
+ * 7. **Policy** (AZ-4, PV-4, GT-5).
36
+ * 8. **TTL** (GT-4) — *after* the policy, because the deadline is part of what the
37
+ * policy decided, and a global default stamped before the chain is the
38
+ * non-conformant shape the rule names.
39
+ * 9. **File** (DK-1), idempotent by entry id.
40
+ *
41
+ * ## Entry ids are derived, not minted
42
+ *
43
+ * The id is a SHA-256 over the tenant, the conversation, the tool name and the
44
+ * canonical form of the operation and its arguments, laid out as a UUID. So a retry
45
+ * of the same call in the same conversation is the *same* entry: `store.file` returns
46
+ * the row that is already there, with its **existing** `expiresAt` (GT-4), and the
47
+ * card the model gets back is the card a reviewer is already looking at. A random id
48
+ * would file a second row for a retried call and start a second clock, which is the
49
+ * shape GT-4 names as wrong.
50
+ *
51
+ * A resubmission adds the id of the entry it supersedes to that material, so it is a
52
+ * different entry from the one it replaces (DK-1) and resubmitting the same expired
53
+ * entry twice is still one row.
54
+ *
55
+ * @packageDocumentation
56
+ */
57
+ import type { Affidavit as WireAffidavit, FieldPresentation } from "@affiant/contract";
58
+ import type { TurnContext } from "../context.js";
59
+ import type { BlockedMarker, DocketEntry } from "../docket/entry.js";
60
+ import type { DocketStore } from "../docket/store.js";
61
+ import type { AffidavitFieldKind, JsonValue } from "../model/affidavit.js";
62
+ import type { AmendmentMap } from "../model/amendments.js";
63
+ import type { ProvenanceChain } from "../model/provenance.js";
64
+ import type { Clock, FieldInterceptor, FieldSchema, InferencePort, Operation, ProjectionPort, RiskScorer, TelemetryPort } from "../ports.js";
65
+ import type { CoverageRegistry } from "./coverage.js";
66
+ import type { ApprovalPolicy } from "./policy.js";
67
+ /**
68
+ * The Evidence Card envelope: the entry a proposal was filed under, the sworn
69
+ * record, the deadline, and the presentation the core does not swear to.
70
+ *
71
+ * The split is the whole point. The canonical form a host's execution grant binds
72
+ * to is defined over the Affidavit and its accepted amendments and nothing else
73
+ * (SR-1), so anything that is a **rendering decision** — the sentences a reviewer
74
+ * reads, whether a person must confirm, the closed set an input offers, the mask
75
+ * an input applies, the host's own name for the operation — travels here, on the
76
+ * envelope, where changing it cannot invalidate a grant minted over evidence that
77
+ * did not change. This type stays
78
+ * assignable to `@affiant/contract`'s `EvidenceCardRequest`;
79
+ * `test/gate-types.test-d.ts` asserts that it does.
80
+ *
81
+ * The two confidence companions AF-2 requires a card to show are on the Affidavit
82
+ * itself and repeated here for one version, which is where the superseded
83
+ * `0.0.1-seed` wire carried them — so a consumer written against either shape
84
+ * finds them.
85
+ */
86
+ export interface EvidenceCardRequest {
87
+ /** The protocol version this envelope conforms to (SR-4). */
88
+ readonly protocolVersion: string;
89
+ /** The Docket entry this card is filed under. */
90
+ readonly docketId: string;
91
+ /** The Affidavit awaiting a decision, in the wire shape. */
92
+ readonly affidavit: WireAffidavit;
93
+ /** When the review window closes — the entry's `expiresAt` (GT-4). */
94
+ readonly requiredBy: string;
95
+ /** The amendments already made on a superseded entry, or `null` for a first filing. */
96
+ readonly priorAmendments: AmendmentMap | null;
97
+ /**
98
+ * Minimum confidence over the non-`Empty` proposed fields; `null` when there are
99
+ * none (AF-2). The same number the Affidavit carries.
100
+ */
101
+ readonly populatedConfidence: number | null;
102
+ /**
103
+ * How many proposed fields are tagged `Empty` (AF-2). The same number the
104
+ * Affidavit carries. Without it a person approving a card sees an aggregate of
105
+ * `0` and cannot tell how many fields are empty or how good the populated ones
106
+ * are.
107
+ */
108
+ readonly emptyFieldCount: number;
109
+ /**
110
+ * Why no decision on this entry will be accepted, or `null` when it can be
111
+ * decided (AZ-4, CV-4). On the envelope so a reviewer surface can render it
112
+ * rather than inferring it from a warning string.
113
+ */
114
+ readonly blocked: BlockedMarker | null;
115
+ /**
116
+ * How a reviewer surface should render each field's input: one entry per field
117
+ * the host declared a hint for, naming a field the Affidavit carries. **Absent**
118
+ * when the host declared none — nothing swears to a hint, so a producer with
119
+ * nothing to say says nothing.
120
+ *
121
+ * The gate carries a hint and validates nothing against it: a proposed or
122
+ * amended value outside `allowedValues`, or not matching `pattern`, is still
123
+ * recorded, and a host that wants such a value refused enforces that in its own
124
+ * policy.
125
+ */
126
+ readonly presentation?: readonly FieldPresentation[];
127
+ /**
128
+ * Sentences a reviewer should see beside the record — the reason a policy gave,
129
+ * and the sentence a blocked entry shows. **Absent** when there are none.
130
+ *
131
+ * The machine-readable half of a blocked entry is
132
+ * {@link EvidenceCardRequest.blocked}, which a surface renders rather than
133
+ * parsing a string out of this array. A consumer never switches on the text of a
134
+ * warning.
135
+ */
136
+ readonly warnings?: readonly string[];
137
+ /**
138
+ * The host's own verb for the operation — `"WriteUpdate"`, `"Reprice"`,
139
+ * `"Onboard"`. **Absent** when the host named none.
140
+ *
141
+ * `affidavit.operationType` is the protocol's two-valued **shape**, so that a rule
142
+ * about shape stays a predicate a policy can test without knowing any host's
143
+ * vocabulary. The host's word for the same act travels here, beside it and never
144
+ * instead of it, so a reviewer surface can head the card with the term a person
145
+ * recognises. Presentation like the slots above it: nothing swears to it and it is
146
+ * no part of the canonical form (SR-1).
147
+ */
148
+ readonly hostOperation?: string;
149
+ /**
150
+ * Whether a person must confirm this write before it commits — the policy
151
+ * chain's verdict, not a property of the evidence.
152
+ *
153
+ * `false` on a blocked entry: a card carrying a marker that says no decision will
154
+ * be accepted must not also offer a reviewer surface an approve button that
155
+ * cannot work (AZ-4, CV-4).
156
+ */
157
+ readonly requiresConfirmation: boolean;
158
+ }
159
+ /** What the pipeline returns: the row as the store holds it, and the card for a reviewer. */
160
+ export interface FiledEntry {
161
+ /** The Docket entry, as it reads now. */
162
+ readonly entry: DocketEntry;
163
+ /** `false` when this was a re-file of an id already on the Docket (GT-4, DK-1). */
164
+ readonly created: boolean;
165
+ /** The Evidence Card the host delivers. Built from the **stored** entry, so a re-file re-broadcasts the original deadline. */
166
+ readonly card: EvidenceCardRequest;
167
+ }
168
+ /**
169
+ * A field the host has already tagged, for the Sequence C path where a capture
170
+ * arrives with its provenance settled and there is nothing to infer.
171
+ *
172
+ * `provenance` absent means the host is saying "proposed, provenance unknown", which
173
+ * AF-1 records as an `Empty` tag at confidence `0` — and which the substance gate
174
+ * then refuses if it is the *only* thing the proposal carries (GT-3).
175
+ */
176
+ export interface PreparedField {
177
+ /** The field's name. Must be one the operation proposes (AF-1). */
178
+ readonly name: string;
179
+ /** Rendering hint for the reviewer surface. */
180
+ readonly kind: AffidavitFieldKind;
181
+ /** The proposed value. */
182
+ readonly value: JsonValue;
183
+ /** Where the value came from, with its binding. */
184
+ readonly provenance?: ProvenanceChain;
185
+ /** Whether the target entity requires the field. Defaults to the schema, else `false`. */
186
+ readonly isMandatory?: boolean;
187
+ }
188
+ /**
189
+ * One proposal, in the shape both entry points produce: `wrap`'s gated `execute`
190
+ * builds one from a tool and its arguments, and `Gate.file` builds one from a host's
191
+ * {@link PreparedField} list.
192
+ *
193
+ * Every property is required and explicitly nullable rather than optional. The two
194
+ * that matter are exclusive in practice: `schema` non-null runs steps 2 to 4,
195
+ * `preparedFields` non-null skips them, and `gate.ts` refuses a proposal that supplies
196
+ * neither.
197
+ */
198
+ export interface PipelineProposal {
199
+ /** The write being proposed. */
200
+ readonly operation: Operation;
201
+ /** The tool the proposal came from — the name a coverage declaration is keyed by (CV-4). */
202
+ readonly toolName: string;
203
+ /** The field schema the inference step works against, or `null` to skip inference. */
204
+ readonly schema: FieldSchema | null;
205
+ /**
206
+ * The call's arguments, part of the entry id's derivation, or `null` when the
207
+ * capture came from no call.
208
+ *
209
+ * A {@link JsonValue}: {@link deriveEntryId} canonicalises this, and a value with
210
+ * no canonical form is a caller bug a typed host should hear about from the
211
+ * compiler rather than from a `TypeError` on the first filing.
212
+ */
213
+ readonly args: JsonValue | null;
214
+ /** Host-tagged fields, or `null` to run interceptors and inference. */
215
+ readonly preparedFields: readonly PreparedField[] | null;
216
+ /** The host's own verb for the operation, carried onto the card. */
217
+ readonly operationLabel: string | null;
218
+ /**
219
+ * The entry this filing supersedes, or `null` for a first filing (DK-1).
220
+ *
221
+ * Set only by `resubmit`. It goes onto the new row's `lineage.supersedes` **and**
222
+ * into the entry id's derivation, which is what makes a resubmission a different
223
+ * entry from the one it replaces while keeping the id deterministic: resubmitting
224
+ * the same superseded entry twice derives the same id, so the second call is an
225
+ * idempotent replay rather than a second row.
226
+ */
227
+ readonly supersedes: string | null;
228
+ /**
229
+ * The amendments already made on the superseded entry, carried onto the card so a
230
+ * reviewer sees the corrections they are being asked to confirm (DK-2). `null` for
231
+ * a first filing.
232
+ */
233
+ readonly priorAmendments: AmendmentMap | null;
234
+ }
235
+ /** Everything the pipeline needs from the host, assembled once by `createGate`. */
236
+ export interface PipelineDeps {
237
+ /** The Docket (DK-1). */
238
+ readonly store: DocketStore;
239
+ /** The host's structured inference (GT-1 step 3). */
240
+ readonly inference: InferencePort;
241
+ /** The host's previous-value lookup (AF-3). */
242
+ readonly projection: ProjectionPort;
243
+ /** The approval chain, in order (AZ-4). */
244
+ readonly policies: readonly ApprovalPolicy[];
245
+ /** Deterministic resolvers, in order (GT-1 step 2, PV-2). */
246
+ readonly interceptors: readonly FieldInterceptor[];
247
+ /** The host's risk function (GT-5). */
248
+ readonly riskScorer?: RiskScorer | undefined;
249
+ /** Where every instant on the record comes from. */
250
+ readonly clock: Clock;
251
+ /** Where the TL-1 events go. */
252
+ readonly telemetry: TelemetryPort;
253
+ /** The deadline applied when neither the verdict nor the policy names one (GT-4). */
254
+ readonly defaultTtlMs: number;
255
+ /** The tools the host declared it cannot cover (CV-4). */
256
+ readonly coverage: CoverageRegistry;
257
+ }
258
+ /**
259
+ * Run steps 2 through 9 for `proposal` in `ctx` and return the filed entry with its
260
+ * card.
261
+ *
262
+ * @throws AffiantError `"substance-refused"` when the proposal swears to nothing
263
+ * (GT-3). Nothing is filed, nothing is broadcast, and the refusal is on the
264
+ * telemetry port before the throw.
265
+ * @throws RangeError when a port hands back something that is not a JSON value, or
266
+ * an interceptor claims a field the operation does not propose. Neither is a
267
+ * refusal the gate hands back to a model: they are host programming errors,
268
+ * and an `AffiantError` code would invite a host to catch and continue.
269
+ */
270
+ export declare function runPipeline(proposal: PipelineProposal, ctx: TurnContext, deps: PipelineDeps): Promise<FiledEntry>;
271
+ /**
272
+ * The entry id for this proposal: a SHA-256 over the tenant, the conversation, the
273
+ * tool and the canonical form of the operation and its arguments, laid out as a UUID.
274
+ *
275
+ * The layout sets the version nibble to `8` and the variant bits to `10`, which RFC
276
+ * 9562 reserves for exactly this — a UUID whose bits are a hash an application chose.
277
+ * The shape matters because `docketId` is a UUID string on the wire; the determinism
278
+ * matters because it is what makes a retried tool call a replay rather than a second
279
+ * review (GT-4, DK-1).
280
+ *
281
+ * @throws TypeError if `args` contains something with no canonical form — a function,
282
+ * a symbol, a cycle. Tool arguments are JSON; anything else is a caller bug.
283
+ */
284
+ export declare function deriveEntryId(ctx: TurnContext, proposal: Pick<PipelineProposal, "toolName" | "operation" | "args" | "supersedes">): Promise<string>;
285
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/gate/pipeline.ts"],"names":[],"mappings":"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"}