@clossys/butler 0.1.1

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 (54) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/LICENSE +21 -0
  3. package/README.md +260 -0
  4. package/dist/audit-shape.check.d.ts +32 -0
  5. package/dist/audit-shape.check.d.ts.map +1 -0
  6. package/dist/audit-shape.check.js +7 -0
  7. package/dist/audit-shape.check.js.map +1 -0
  8. package/dist/cli.d.ts +54 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +426 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/contract.d.ts +256 -0
  13. package/dist/contract.d.ts.map +1 -0
  14. package/dist/contract.js +377 -0
  15. package/dist/contract.js.map +1 -0
  16. package/dist/inbound/index.d.ts +120 -0
  17. package/dist/inbound/index.d.ts.map +1 -0
  18. package/dist/inbound/index.js +125 -0
  19. package/dist/inbound/index.js.map +1 -0
  20. package/dist/index.d.ts +50 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +47 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/schema.d.ts +374 -0
  25. package/dist/schema.d.ts.map +1 -0
  26. package/dist/schema.js +304 -0
  27. package/dist/schema.js.map +1 -0
  28. package/dist/validation.d.ts +74 -0
  29. package/dist/validation.d.ts.map +1 -0
  30. package/dist/validation.js +140 -0
  31. package/dist/validation.js.map +1 -0
  32. package/dist/web/index.d.ts +5 -0
  33. package/dist/web/index.d.ts.map +1 -0
  34. package/dist/web/index.js +25 -0
  35. package/dist/web/index.js.map +1 -0
  36. package/dist/web/internal/peer-version.d.ts +53 -0
  37. package/dist/web/internal/peer-version.d.ts.map +1 -0
  38. package/dist/web/internal/peer-version.js +136 -0
  39. package/dist/web/internal/peer-version.js.map +1 -0
  40. package/dist/web/useStandingWants.d.ts +75 -0
  41. package/dist/web/useStandingWants.d.ts.map +1 -0
  42. package/dist/web/useStandingWants.js +66 -0
  43. package/dist/web/useStandingWants.js.map +1 -0
  44. package/package.json +93 -0
  45. package/src/audit-shape.check.ts +37 -0
  46. package/src/cli.ts +445 -0
  47. package/src/contract.ts +534 -0
  48. package/src/inbound/index.ts +190 -0
  49. package/src/index.ts +113 -0
  50. package/src/schema.ts +622 -0
  51. package/src/validation.ts +172 -0
  52. package/src/web/index.ts +27 -0
  53. package/src/web/internal/peer-version.ts +159 -0
  54. package/src/web/useStandingWants.ts +139 -0
@@ -0,0 +1,374 @@
1
+ /**
2
+ * The want contract: what a person asked for right now, and what they told
3
+ * us to keep doing.
4
+ *
5
+ * Two record families live here and they are deliberately not merged. An
6
+ * INTENT is a single request, interpreted, carrying a confidence, and true
7
+ * only until it has been acted on. A STANDING INSTRUCTION is a durable
8
+ * answer that keeps speaking for the person until it expires or the policy
9
+ * it answered is superseded. Both are consumer-authored data; nothing in
10
+ * this package ships a value, a topic vocabulary, a jurisdiction rule, or
11
+ * an obligation of its own.
12
+ *
13
+ * THE THREE-STATE MODEL, PRESERVED
14
+ * ---------------------------------
15
+ * `StandingState` is three states, not two. `"absent"` (never asked) is a
16
+ * distinct value from `"denied"` (asked, refused), and neither is a
17
+ * boolean. Collapsing them would make "never asked" indistinguishable from
18
+ * a passing signal — the same absence-of-signal-looks-like-a-passing-signal
19
+ * failure this repository already writes down for gate exit codes (see
20
+ * this repository's own contribution guide, "Gate CLIs exit `0` clean,
21
+ * `1` findings, `2` could not run"). `"granted"` and `"denied"` each carry
22
+ * the policy version they answered and when; a bare boolean can carry
23
+ * neither, which is exactly what turns a stored answer into an unauditable
24
+ * guess instead of a record.
25
+ *
26
+ * A fourth value, `"stale"`, exists only as an EVALUATION status
27
+ * (`StandingEvaluation`), never as a stored state — staleness is computed
28
+ * by comparing a stored record against the policy in force and the clock,
29
+ * so writing it down would be storing a derivation that starts rotting the
30
+ * moment it is written.
31
+ *
32
+ * IDENTIFIERS
33
+ * ------------
34
+ * `subjectId` is the person the want belongs to; `actorId` is whoever or
35
+ * whatever is acting. They are separate fields in every signature in this
36
+ * package and are never unified, because "the system acted on its own
37
+ * reading" and "the person asked for this" are the two things this whole
38
+ * package exists to keep apart. Both are opaque host-owned references —
39
+ * never an email address, a name, a phone number, or an IP. See
40
+ * `audit-shape.check.ts` for the compile-time proof that the audit event
41
+ * carries nothing else.
42
+ *
43
+ * Validation here is hand-rolled over `unknown`, with no schema library,
44
+ * matching every other package in this workspace (see the root
45
+ * `AGENTS.md`). These validators exist for the boundary where records
46
+ * arrive as untyped JSON — a preference-centre route body, a file the CLI
47
+ * reads, a value read back out of a host's own store — before anything
48
+ * downstream is allowed to trust them.
49
+ */
50
+ import { type ValidationResult } from "./validation.js";
51
+ /**
52
+ * Identifies which version of a policy document a record answers. A
53
+ * standing instruction that cannot name what it answered cannot be shown
54
+ * to have gone stale.
55
+ */
56
+ export interface PolicyVersion {
57
+ policyId: string;
58
+ version: string;
59
+ }
60
+ /**
61
+ * Consumer-defined; this package does not enumerate topics. A topic is
62
+ * whatever a consumer's own policy defines ("marketing-email",
63
+ * "contact-window", "language", ...) — nothing here needs it to be more
64
+ * than a stable string used to key one subject's standing instructions.
65
+ */
66
+ export type StandingTopic = string;
67
+ /**
68
+ * Where a standing instruction came from. `"stated"` is the person's own
69
+ * words. `"inferred"` is a reading of their behaviour, and an inferred
70
+ * instruction is NEVER binding until they confirm it — see
71
+ * `evaluateStandingInstruction` (`contract.ts`), which reports an
72
+ * unconfirmed inference as `absent`, because an unconfirmed guess is not a
73
+ * want we have.
74
+ */
75
+ export type StandingProvenance = "stated" | "inferred";
76
+ /** Every provenance value, for a caller validating untyped input. */
77
+ export declare const STANDING_PROVENANCES: readonly StandingProvenance[];
78
+ /**
79
+ * How long a stored answer keeps speaking for the person. Consumer-declared
80
+ * per instruction, with NO default anywhere in this package: a window this
81
+ * package invented would be this package authoring one of the consumer's
82
+ * values, and a missing window silently read as "forever" is precisely the
83
+ * open loop the currency gate exists to close.
84
+ */
85
+ export interface CurrencyWindow {
86
+ /** Whole days after `decidedAt` during which the answer is still current. */
87
+ days: number;
88
+ }
89
+ /**
90
+ * Three states, not two. See this file's header for why `"absent"` is a
91
+ * value rather than the absence of one, and why neither `"granted"` nor
92
+ * `"denied"` is a boolean.
93
+ */
94
+ export type StandingState = {
95
+ kind: "absent";
96
+ } | {
97
+ kind: "denied";
98
+ policyVersion: PolicyVersion;
99
+ decidedAt: string;
100
+ } | {
101
+ kind: "granted";
102
+ policyVersion: PolicyVersion;
103
+ decidedAt: string;
104
+ };
105
+ /** One durable answer, for one subject, on one topic. */
106
+ export interface StandingInstruction {
107
+ /** Stable, host-owned id for this instruction. The currency gate joins usages to instructions on it. */
108
+ instructionId: string;
109
+ /** Host-owned identity reference — an opaque id, never raw personal data. */
110
+ subjectId: string;
111
+ topic: StandingTopic;
112
+ state: StandingState;
113
+ provenance: StandingProvenance;
114
+ currency: CurrencyWindow;
115
+ /** When the subject confirmed an INFERRED instruction. Absent on an unconfirmed inference; meaningless (and ignored) on a `"stated"` one. */
116
+ confirmedAt?: string;
117
+ }
118
+ /**
119
+ * The result of comparing a stored instruction against the policy in force
120
+ * and the clock. `"stale"` means a stored answer no longer speaks for the
121
+ * subject and they should be asked again; it carries WHY, because "the
122
+ * policy moved" and "the window ran out" are different facts about the
123
+ * same record and a consumer's re-ask copy will differ between them.
124
+ *
125
+ * `"absent"` likewise carries a reason. An unconfirmed inference and a
126
+ * subject who was genuinely never asked are both "we do not have a want
127
+ * here" — the same status, correctly — but they are not the same event,
128
+ * and flattening them would hide the more interesting of the two.
129
+ * `previousPolicyVersion` on a `"stale"` result is the version the stale
130
+ * answer actually answered, not the current one; `"granted"`/`"denied"`
131
+ * likewise report the version actually answered rather than echoing the
132
+ * caller's current version back.
133
+ */
134
+ export type StandingEvaluation = {
135
+ status: "absent";
136
+ reason: "no-record" | "unconfirmed-inference";
137
+ } | {
138
+ status: "stale";
139
+ reason: "policy-superseded" | "window-elapsed";
140
+ previousPolicyVersion: PolicyVersion;
141
+ decidedAt: string;
142
+ } | {
143
+ status: "granted";
144
+ policyVersion: PolicyVersion;
145
+ } | {
146
+ status: "denied";
147
+ policyVersion: PolicyVersion;
148
+ };
149
+ /**
150
+ * Governs whether a policy-version bump also invalidates a stored `denied`
151
+ * record. Left as a caller-supplied value with **no default** in either
152
+ * direction: whether a policy bump invalidates a prior refusal is a
153
+ * jurisdiction judgment, and this package answers no jurisdiction
154
+ * questions. A `granted` record always goes stale on a version bump
155
+ * regardless of this flag; only the `denied` case is caller-decided.
156
+ */
157
+ export interface StandingEvaluationPolicy {
158
+ invalidateDenialOnPolicyBump: boolean;
159
+ }
160
+ /**
161
+ * The three things a subject can do to their own standing instruction.
162
+ * Every variant carries the `policyVersion` in force at the moment of the
163
+ * action — including `withdraw`, so an audit event never has to guess one
164
+ * or leave the field empty. There is no fourth, harder variant for
165
+ * withdrawing, and no variant an actor can use to decide FOR a subject.
166
+ */
167
+ export type StandingAction = {
168
+ kind: "grant";
169
+ topic: StandingTopic;
170
+ policyVersion: PolicyVersion;
171
+ currency: CurrencyWindow;
172
+ } | {
173
+ kind: "deny";
174
+ topic: StandingTopic;
175
+ policyVersion: PolicyVersion;
176
+ currency: CurrencyWindow;
177
+ } | {
178
+ kind: "withdraw";
179
+ topic: StandingTopic;
180
+ policyVersion: PolicyVersion;
181
+ currency: CurrencyWindow;
182
+ };
183
+ /**
184
+ * `"reopened"` records that a subject reopened their preference surface —
185
+ * audit-worthy on its own, independent of whether they changed anything.
186
+ * `"policy-superseded"` and `"window-elapsed"` record that a stored answer
187
+ * was found stale, by a policy bump and by the clock respectively.
188
+ * `"confirmed"` and `"misread"` record the outcome of an intent read-back.
189
+ * None of the last four is emitted by `decideStandingChange`, which only
190
+ * ever emits `"granted"` / `"denied"` / `"withdrawn"`.
191
+ */
192
+ export type StandingAuditEventType = "granted" | "denied" | "withdrawn" | "reopened" | "policy-superseded" | "window-elapsed" | "confirmed" | "misread";
193
+ /** Every audit event type, for a caller validating untyped input. */
194
+ export declare const STANDING_AUDIT_EVENT_TYPES: readonly StandingAuditEventType[];
195
+ /**
196
+ * An audit trail entry. Deliberately carries no raw personal-data field —
197
+ * no email, no name, no phone, no address, no IP — only the opaque
198
+ * `subjectId` and the separately-opaque `actorId`. `topic` is a
199
+ * consumer-defined label, never itself personal data.
200
+ * `src/audit-shape.check.ts` is a compile-time contract test that fails the
201
+ * build if a personal-data-shaped key is ever added to this type.
202
+ *
203
+ * `previousPolicyVersion` is present only on a `"policy-superseded"` event;
204
+ * every other type's `policyVersion` fully describes which version the
205
+ * event pertains to on its own.
206
+ */
207
+ export interface StandingAuditEvent {
208
+ /** The subject the want belongs to. */
209
+ subjectId: string;
210
+ /** Whoever or whatever performed the action. Separate from `subjectId`, always. */
211
+ actorId: string;
212
+ topic: StandingTopic;
213
+ type: StandingAuditEventType;
214
+ policyVersion: PolicyVersion;
215
+ occurredAt: string;
216
+ previousPolicyVersion?: PolicyVersion;
217
+ }
218
+ /**
219
+ * Host-implemented audit ledger. This package decides what an audit event
220
+ * contains; the host decides where it is durably recorded. No
221
+ * implementation of this interface ships here, and no person-attributable
222
+ * record is ever written into this repository.
223
+ */
224
+ export interface StandingAuditLedger {
225
+ record(event: StandingAuditEvent): Promise<void>;
226
+ }
227
+ /**
228
+ * Host-implemented storage port. This package does not choose a database,
229
+ * a cookie, a session, or a file — that choice, and its durability
230
+ * guarantees, belongs entirely to the host, and no concrete implementation
231
+ * of this interface ships here.
232
+ */
233
+ export interface StandingInstructionStore {
234
+ read(subjectId: string, topic: StandingTopic): Promise<StandingInstruction | undefined>;
235
+ write(instruction: StandingInstruction): Promise<void>;
236
+ readAll(subjectId: string): Promise<readonly StandingInstruction[]>;
237
+ }
238
+ /**
239
+ * What happened to an interpreted intent. `"acted"` means something was
240
+ * done in the world on the strength of this reading. `"handed-off"` means
241
+ * it was explicitly given to a person instead — the only legitimate exit
242
+ * for a reading the machine was not confident enough to act on.
243
+ * `"awaiting-confirmation"` means it is still waiting on the subject's own
244
+ * read-back and nothing has acted yet.
245
+ */
246
+ export type IntentDisposition = "acted" | "handed-off" | "awaiting-confirmation";
247
+ /** Every disposition, for a caller validating untyped input. */
248
+ export declare const INTENT_DISPOSITIONS: readonly IntentDisposition[];
249
+ /**
250
+ * One request, admitted on some channel and interpreted into a structured
251
+ * reading.
252
+ *
253
+ * `confidence` is a first-class value on the record, not an
254
+ * implementation detail left inside whichever model produced the reading:
255
+ * a number in `[0, 1]` that a gate can read months later and compare
256
+ * against the floor that was in force. `interpretation` is a
257
+ * consumer-defined label for what the reading concluded — this package
258
+ * never enumerates interpretations and never inspects the request text,
259
+ * which is why no field here holds it.
260
+ */
261
+ export interface IntentRecord {
262
+ intentId: string;
263
+ /** The person whose want this is. */
264
+ subjectId: string;
265
+ /** Whoever or whatever produced and dispositioned this reading. Separate from `subjectId`, always. */
266
+ actorId: string;
267
+ /** Consumer-defined label for what the reading concluded. */
268
+ interpretation: string;
269
+ /** `0`–`1` inclusive. Read against a declared floor; never against a floor this package invented. */
270
+ confidence: number;
271
+ observedAt: string;
272
+ disposition: IntentDisposition;
273
+ }
274
+ /**
275
+ * The subject's own answer to a read-back. Three outcomes, not two:
276
+ * `"unclear"` is the person saying they cannot tell, which is a real,
277
+ * distinct answer and must never be rounded up into `"confirmed"`.
278
+ */
279
+ export type ConfirmationVerdict = "confirmed" | "misread" | "unclear";
280
+ /** Every verdict, for a caller validating untyped input. */
281
+ export declare const CONFIRMATION_VERDICTS: readonly ConfirmationVerdict[];
282
+ /** One read-back answered by the subject, naming the intent it answers. */
283
+ export interface ConfirmationRecord {
284
+ intentId: string;
285
+ subjectId: string;
286
+ verdict: ConfirmationVerdict;
287
+ confirmedAt: string;
288
+ }
289
+ /**
290
+ * The declared confidence floor. Consumer-authored, with no default: this
291
+ * package will not invent the number below which a reading is too weak to
292
+ * act on, and a run that cannot find one refuses to run at all rather than
293
+ * assume one.
294
+ */
295
+ export interface ConfidenceFloor {
296
+ /** `0`–`1` inclusive. A reading strictly below this may not be acted on silently. */
297
+ minimumConfidence: number;
298
+ }
299
+ /**
300
+ * One occasion on which a standing instruction was actually relied on.
301
+ * This is the observation half of the loop: an instruction that is written
302
+ * and never re-checked is an open loop, and a usage record is what closes
303
+ * it — the currency gate reads these, not the instructions alone.
304
+ *
305
+ * `currentPolicyVersion` is the version in force AT THE MOMENT OF USE, not
306
+ * today's; that is what makes this record replayable rather than a
307
+ * derivation that changes every time it is read.
308
+ */
309
+ export interface InstructionUsage {
310
+ instructionId: string;
311
+ actorId: string;
312
+ usedAt: string;
313
+ currentPolicyVersion: PolicyVersion;
314
+ }
315
+ /**
316
+ * What one route through a consumer's own interface costs the person.
317
+ * Deliberately three coarse, countable facts rather than a score: a
318
+ * comparison that produces a number nobody can trace back to a step is not
319
+ * evidence of anything.
320
+ */
321
+ export interface PathCost {
322
+ /** How many discrete actions the person takes, counted the same way on both sides of the comparison. */
323
+ steps: number;
324
+ /** Whether the route requires contacting a human (writing in, calling) rather than completing it themselves. */
325
+ requiresContact: boolean;
326
+ /** Whether the route requires an authenticated account. */
327
+ requiresAccount: boolean;
328
+ }
329
+ /**
330
+ * The grant route and the withdraw route for one topic on one surface,
331
+ * measured the same way, so "withdrawing is no harder than granting" stops
332
+ * being an assurance and becomes a comparison. `withdraw` is optional
333
+ * precisely so its ABSENCE is representable and reportable — a surface
334
+ * that offers no way out at all is the worst version of this defect, and a
335
+ * required field would have made it unsayable.
336
+ */
337
+ export interface PreferencePath {
338
+ surfaceId: string;
339
+ topic: StandingTopic;
340
+ grant: PathCost;
341
+ withdraw?: PathCost;
342
+ }
343
+ /** Validates one untyped `StandingInstruction`. Never throws. */
344
+ export declare function validateStandingInstruction(value: unknown): ValidationResult<StandingInstruction>;
345
+ /** Validates an untyped array of `StandingInstruction`s. Never throws. */
346
+ export declare function validateStandingInstructions(value: unknown): ValidationResult<StandingInstruction[]>;
347
+ /** Validates one untyped `IntentRecord`. Never throws. */
348
+ export declare function validateIntentRecord(value: unknown): ValidationResult<IntentRecord>;
349
+ /** Validates an untyped array of `IntentRecord`s. Never throws. */
350
+ export declare function validateIntentRecords(value: unknown): ValidationResult<IntentRecord[]>;
351
+ /** Validates one untyped `ConfirmationRecord`. Never throws. */
352
+ export declare function validateConfirmationRecord(value: unknown): ValidationResult<ConfirmationRecord>;
353
+ /** Validates an untyped array of `ConfirmationRecord`s. Never throws. */
354
+ export declare function validateConfirmationRecords(value: unknown): ValidationResult<ConfirmationRecord[]>;
355
+ /** Validates an untyped array of `InstructionUsage`s. Never throws. */
356
+ export declare function validateInstructionUsages(value: unknown): ValidationResult<InstructionUsage[]>;
357
+ /** Validates an untyped array of `PreferencePath`s. Never throws. */
358
+ export declare function validatePreferencePaths(value: unknown): ValidationResult<PreferencePath[]>;
359
+ /**
360
+ * Validates an untyped `ConfidenceFloor`. Separate from the record
361
+ * validators because the floor is not a record: it is the one declared
362
+ * value the confirmation gate reads, and a run that cannot validate it
363
+ * must decline rather than substitute one.
364
+ */
365
+ export declare function validateConfidenceFloor(value: unknown): ValidationResult<ConfidenceFloor>;
366
+ /** Validates an untyped `PolicyVersion`. Never throws. */
367
+ export declare function validatePolicyVersion(value: unknown): ValidationResult<PolicyVersion>;
368
+ /** Convenience guard over `validateStandingInstruction`, for callers that only need the boolean answer at a type boundary. */
369
+ export declare function isStandingInstruction(value: unknown): value is StandingInstruction;
370
+ /** Convenience guard over `validateIntentRecord`. */
371
+ export declare function isIntentRecord(value: unknown): value is IntentRecord;
372
+ /** Convenience guard over `validateConfirmationRecord`. */
373
+ export declare function isConfirmationRecord(value: unknown): value is ConfirmationRecord;
374
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}