@dtmd/temper 0.0.17 → 0.0.19
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/dist/src/assembly.d.ts +40 -0
- package/dist/src/assembly.js +43 -0
- package/dist/src/builtins.d.ts +110 -4
- package/dist/src/builtins.js +64 -3
- package/dist/src/claude-code.d.ts +2 -2
- package/dist/src/claude-code.js +1 -1
- package/dist/src/contract.d.ts +96 -3
- package/dist/src/contract.js +89 -2
- package/dist/src/declarations.d.ts +3 -3
- package/dist/src/declarations.js +228 -24
- package/dist/src/emit.d.ts +28 -6
- package/dist/src/emit.js +102 -29
- package/dist/src/generated/ClauseRow.d.ts +29 -7
- package/dist/src/generated/Declarations.d.ts +8 -0
- package/dist/src/generated/InputRow.d.ts +21 -0
- package/dist/src/generated/InputRow.js +2 -0
- package/dist/src/generated/KindFactRow.d.ts +12 -0
- package/dist/src/generated/index.d.ts +1 -0
- package/dist/src/index.d.ts +8 -7
- package/dist/src/index.js +9 -5
- package/dist/src/kind.d.ts +314 -15
- package/dist/src/kind.js +184 -9
- package/dist/src/member-address.d.ts +102 -0
- package/dist/src/member-address.js +114 -0
- package/dist/src/prose.d.ts +29 -12
- package/dist/src/prose.js +50 -19
- package/package.json +3 -3
package/dist/src/emit.js
CHANGED
|
@@ -13,6 +13,7 @@ import { readFileSync } from "node:fs";
|
|
|
13
13
|
import { checkMentions, isTextSpan, renderText, resolveLeaf } from "./prose.js";
|
|
14
14
|
import { permissionUnion } from "./needs.js";
|
|
15
15
|
import { compareStrings, compileDeclarations, declaredAddresses, declaredAtLocusKinds, declaredRequirements, encodeSeam, placementKey, registrationRows, settingsRows, tapHookRows, uniqueMap, } from "./declarations.js";
|
|
16
|
+
import { bareLookupKey, edgeLookupKey, hostAddress, nestedAddress } from "./member-address.js";
|
|
16
17
|
/** The {@link MentionScope} a set of {@link ResolveOptions} names — its two sets, each defaulting to empty. */
|
|
17
18
|
function scopeOf(options) {
|
|
18
19
|
return {
|
|
@@ -93,7 +94,7 @@ function hostUnit(host, context) {
|
|
|
93
94
|
if (host.facts.locus.kind === "at" && host.facts.unitShape === "directory") {
|
|
94
95
|
return joinSlash(host.facts.locus.root, host.name);
|
|
95
96
|
}
|
|
96
|
-
throw new Error(`${context}: its host \`${host.kind
|
|
97
|
+
throw new Error(`${context}: its host \`${hostAddress(host.kind, host.name)}\` owns no directory unit — a template's ` +
|
|
97
98
|
`path pattern is relative to the host's unit, and a lone file has no interior for a ` +
|
|
98
99
|
`child to sit in (specs/model/representation.md, "locus").`);
|
|
99
100
|
}
|
|
@@ -115,7 +116,7 @@ function nestedFilePath(member) {
|
|
|
115
116
|
}
|
|
116
117
|
const template = (host.facts.templates ?? []).find((layer) => layer.kind.key === member.kind && layer.path !== undefined);
|
|
117
118
|
if (template?.path === undefined) {
|
|
118
|
-
throw new Error(`${context}: its host \`${host.kind
|
|
119
|
+
throw new Error(`${context}: its host \`${hostAddress(host.kind, host.name)}\` templates no file layer for kind ` +
|
|
119
120
|
`\`${member.kind}\` — the path pattern is the host kind's declared fact, and there is ` +
|
|
120
121
|
`none to compose against (specs/model/representation.md, "locus").`);
|
|
121
122
|
}
|
|
@@ -178,9 +179,10 @@ function relativeProjection(from, to) {
|
|
|
178
179
|
* own field schema, which fails in the author's program at compose time.
|
|
179
180
|
*
|
|
180
181
|
* # Throws
|
|
181
|
-
* If a filled leaf names no composed member,
|
|
182
|
-
* point at
|
|
183
|
-
*
|
|
182
|
+
* If a filled leaf names no composed member, names one that owns no projection to
|
|
183
|
+
* point at, or names a bare nested key several hosts carry
|
|
184
|
+
* ({@link resolvedTargetFacts}). An edge target cannot defer to the gate the way a bare
|
|
185
|
+
* mention may: the reference is written now, and there is nothing true to write.
|
|
184
186
|
*/
|
|
185
187
|
function edgeTargetFacts(host, value, leaves, options) {
|
|
186
188
|
const targets = {};
|
|
@@ -189,22 +191,40 @@ function edgeTargetFacts(host, value, leaves, options) {
|
|
|
189
191
|
const address = leaves[edge.field];
|
|
190
192
|
if (address === undefined || address === "")
|
|
191
193
|
continue;
|
|
192
|
-
|
|
193
|
-
// multi-element set reads the kind-qualified `kind:name` the author wrote
|
|
194
|
-
// (`EdgeField.to`). An already-qualified address carries its own colon, so
|
|
195
|
-
// only a bare leaf is lifted to `${edge.to[0]}:${address}` for the lookup.
|
|
196
|
-
const lookup = edge.to.length === 1 && !address.includes(":") ? `${edge.to[0]}:${address}` : address;
|
|
194
|
+
const lookup = edgeLookupKey(address, edge.to);
|
|
197
195
|
const target = options.members?.get(lookup);
|
|
196
|
+
const reference = `${context}: edge field \`${edge.field}\` names \`${address}\``;
|
|
198
197
|
if (target === undefined) {
|
|
199
|
-
throw new Error(`${
|
|
200
|
-
`
|
|
201
|
-
`(specs/model/pipeline.md, "Emit", the "Refusing" bullet).`);
|
|
198
|
+
throw new Error(`${reference}, which resolves to no composed member — an edge target's facts are ` +
|
|
199
|
+
`derived, never fabricated (specs/model/pipeline.md, "Emit", the "Refusing" bullet).`);
|
|
202
200
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
201
|
+
targets[edge.field] = resolvedTargetFacts(host, target, lookup, reference);
|
|
202
|
+
}
|
|
203
|
+
return targets;
|
|
204
|
+
}
|
|
205
|
+
/** Whether an address named the nested index — the embedded values one spelling reaches. */
|
|
206
|
+
function isNested(target) {
|
|
207
|
+
return Array.isArray(target);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* The four derived facts one resolved edge target contributes, read off the target
|
|
211
|
+
* itself and never off the citing instance. A top-level member answers with its own
|
|
212
|
+
* identity and its own projection; an embedded value answers with its own kind and key,
|
|
213
|
+
* its canonical `<host-address>/<kind>/<key>` address (whichever spelling the leaf
|
|
214
|
+
* authored), and its *host's* projection — an embedded member owns no file, so the file
|
|
215
|
+
* its rendering lands in is the host's.
|
|
216
|
+
*
|
|
217
|
+
* # Throws
|
|
218
|
+
* If a bare `kind:key` is carried by more than one host — an ambiguous address names
|
|
219
|
+
* nothing, and the full spelling is what tells the carriers apart — or if the target,
|
|
220
|
+
* or the host carrying it, owns no projection to point at.
|
|
221
|
+
*/
|
|
222
|
+
function resolvedTargetFacts(host, target, lookup, reference) {
|
|
223
|
+
const noProjection = () => new Error(`${reference}, which owns no projection to reference (specs/model/representation.md, "locus").`);
|
|
224
|
+
if (!isNested(target)) {
|
|
225
|
+
if (!isProjected(target))
|
|
226
|
+
throw noProjection();
|
|
227
|
+
return {
|
|
208
228
|
name: target.name,
|
|
209
229
|
address: lookup,
|
|
210
230
|
kind: target.kind,
|
|
@@ -212,7 +232,23 @@ function edgeTargetFacts(host, value, leaves, options) {
|
|
|
212
232
|
repoRootedPath: projectionPath(target),
|
|
213
233
|
};
|
|
214
234
|
}
|
|
215
|
-
|
|
235
|
+
if (target.length > 1) {
|
|
236
|
+
const hosts = target.map((carrier) => `\`${hostAddress(carrier.host.kind, carrier.host.name)}\``).join(", ");
|
|
237
|
+
throw new Error(`${reference}, a bare key ${target.length} hosts carry (${hosts}) — a nested member's address ` +
|
|
238
|
+
`composes through its host, so spell the whole \`<host-address>/<kind>/<key>\` ` +
|
|
239
|
+
`(specs/model/representation.md, "member").`);
|
|
240
|
+
}
|
|
241
|
+
const { host: carrier, value } = target[0];
|
|
242
|
+
if (!isProjected(carrier))
|
|
243
|
+
throw noProjection();
|
|
244
|
+
const carrierPath = projectionPath(carrier);
|
|
245
|
+
return {
|
|
246
|
+
name: value.key,
|
|
247
|
+
address: nestedAddress(hostAddress(carrier.kind, carrier.name), value.kind, value.key),
|
|
248
|
+
kind: value.kind,
|
|
249
|
+
path: relativeProjection(projectionPath(host), carrierPath),
|
|
250
|
+
repoRootedPath: carrierPath,
|
|
251
|
+
};
|
|
216
252
|
}
|
|
217
253
|
/**
|
|
218
254
|
* Resolve one embedded member's value's leaves — top-level and each
|
|
@@ -359,7 +395,7 @@ function edgePlacements(harness, options) {
|
|
|
359
395
|
continue;
|
|
360
396
|
const placed = placedEdges(member, value, options);
|
|
361
397
|
if (placed !== undefined) {
|
|
362
|
-
entries.push([placementKey(
|
|
398
|
+
entries.push([placementKey(hostAddress(member.kind, member.name), value.kind, value.key), placed]);
|
|
363
399
|
}
|
|
364
400
|
}
|
|
365
401
|
}
|
|
@@ -400,7 +436,7 @@ function renderedExtents(harness, options) {
|
|
|
400
436
|
continue;
|
|
401
437
|
const block = renderMemberBlock(member, value, options);
|
|
402
438
|
entries.push([
|
|
403
|
-
placementKey(
|
|
439
|
+
placementKey(hostAddress(member.kind, member.name), value.kind, value.key),
|
|
404
440
|
{
|
|
405
441
|
lines: renderedLineCount(block),
|
|
406
442
|
// Unicode scalar values, matching Rust's `chars().count()` — iterating a string
|
|
@@ -549,9 +585,12 @@ function settingsResidue(harness) {
|
|
|
549
585
|
return settingsRows(harness).map((row) => ({ manifest: row.manifest, key: row.key, value: row.value }));
|
|
550
586
|
}
|
|
551
587
|
/**
|
|
552
|
-
* The harness's composed members by
|
|
553
|
-
*
|
|
554
|
-
* spells a member address, so an edge field and a mention name
|
|
588
|
+
* The harness's composed members by address — the table an embedded value's edge field
|
|
589
|
+
* resolves its target against. A top-level member keys the identical way
|
|
590
|
+
* {@link declaredAddresses} spells a member address, so an edge field and a mention name
|
|
591
|
+
* a member the same way; a nested member keys under both of its own spellings
|
|
592
|
+
* ({@link nestedTargets}), so an embedded edge target resolves at emit as a top-level one
|
|
593
|
+
* does.
|
|
555
594
|
*
|
|
556
595
|
* A projected member's address is its file, so two at one address are a collision and
|
|
557
596
|
* refuse loud. A registration member's address is its *group key* — a `hook` registers on
|
|
@@ -562,14 +601,48 @@ function settingsResidue(harness) {
|
|
|
562
601
|
* `emit` on every harness with two hooks on one event (0.0.16).
|
|
563
602
|
*/
|
|
564
603
|
function memberTable(harness) {
|
|
565
|
-
const table = uniqueMap(
|
|
566
|
-
.
|
|
567
|
-
|
|
604
|
+
const table = uniqueMap([
|
|
605
|
+
...harness.members
|
|
606
|
+
.filter((member) => !isRegistration(member))
|
|
607
|
+
.map((member) => [hostAddress(member.kind, member.name), member]),
|
|
608
|
+
...nestedTargets(harness),
|
|
609
|
+
]);
|
|
568
610
|
for (const member of harness.members.filter(isRegistration)) {
|
|
569
|
-
table.set(
|
|
611
|
+
table.set(hostAddress(member.kind, member.name), member);
|
|
570
612
|
}
|
|
571
613
|
return table;
|
|
572
614
|
}
|
|
615
|
+
/**
|
|
616
|
+
* Every composed embedded value as member-table entries, under both of its spellings: the
|
|
617
|
+
* full `<host-address>/<kind>/<key>` address, whose one carrier is the host whose body
|
|
618
|
+
* composed it — two of those coincident are a malformed lock, refused by the shared
|
|
619
|
+
* {@link uniqueMap} the way two members at one address are — and the bare `kind:key`,
|
|
620
|
+
* whose entry carries *every* host that spells it. A bare key names a nested member only
|
|
621
|
+
* when a single host carries it; several is ambiguous, refused by name at resolution
|
|
622
|
+
* ({@link resolvedTargetFacts}) rather than here, since uniqueness is the resolver's bar
|
|
623
|
+
* and not the corpus's — one key two hosts carry and nothing cites still composes.
|
|
624
|
+
*/
|
|
625
|
+
function nestedTargets(harness) {
|
|
626
|
+
const qualified = [];
|
|
627
|
+
const bare = new Map();
|
|
628
|
+
for (const member of harness.members) {
|
|
629
|
+
if (member.prose?.kind !== "blocks")
|
|
630
|
+
continue;
|
|
631
|
+
for (const value of member.prose.values) {
|
|
632
|
+
if (isTextSpan(value))
|
|
633
|
+
continue;
|
|
634
|
+
const target = { host: member, value };
|
|
635
|
+
qualified.push([nestedAddress(hostAddress(member.kind, member.name), value.kind, value.key), [target]]);
|
|
636
|
+
const key = bareLookupKey(value.kind, value.key);
|
|
637
|
+
const carriers = bare.get(key);
|
|
638
|
+
if (carriers === undefined)
|
|
639
|
+
bare.set(key, [target]);
|
|
640
|
+
else
|
|
641
|
+
carriers.push(target);
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
return [...qualified, ...bare];
|
|
645
|
+
}
|
|
573
646
|
/** The harness's projected members as payload members, deterministically kind-then-name ordered. */
|
|
574
647
|
function orderedMembers(harness, options) {
|
|
575
648
|
return [...harness.members]
|
|
@@ -578,7 +651,7 @@ function orderedMembers(harness, options) {
|
|
|
578
651
|
.map((member) => ({
|
|
579
652
|
kind: member.kind,
|
|
580
653
|
name: member.name,
|
|
581
|
-
host: member.host &&
|
|
654
|
+
host: member.host && hostAddress(member.host.kind, member.host.name),
|
|
582
655
|
// The generated row carries a mutable field list; the member's is read-only,
|
|
583
656
|
// so copy each pair into a fresh tuple — the same values, a shape the row accepts.
|
|
584
657
|
fields: member.fields.map(([name, value]) => [name, value]),
|
|
@@ -38,10 +38,11 @@ export type ClauseRow = {
|
|
|
38
38
|
*/
|
|
39
39
|
label?: string;
|
|
40
40
|
/**
|
|
41
|
-
* The kind whose contract carries the clause. `None`
|
|
42
|
-
* inside a [`RequirementRow`]'s own
|
|
43
|
-
* requirement's set-scope demand
|
|
44
|
-
* whatever kind the requirement's own row already carries
|
|
41
|
+
* The kind whose contract carries the clause. `None` has two homes, distinguished
|
|
42
|
+
* by nesting rather than by a second column: inside a [`RequirementRow`]'s own
|
|
43
|
+
* [`clauses`](RequirementRow::clauses) it is the requirement's set-scope demand,
|
|
44
|
+
* ranging over whatever kind the requirement's own row already carries; at the top
|
|
45
|
+
* level it is the **root member's** clause, ranging over the whole governed forest.
|
|
45
46
|
*/
|
|
46
47
|
kind?: string;
|
|
47
48
|
/**
|
|
@@ -49,7 +50,14 @@ export type ClauseRow = {
|
|
|
49
50
|
*/
|
|
50
51
|
predicate: string;
|
|
51
52
|
/**
|
|
52
|
-
* The
|
|
53
|
+
* The clause's **compiled label** segment ([`crate::contract::clause_label`]) — the
|
|
54
|
+
* field the predicate constrains where it names one, and otherwise the identity the
|
|
55
|
+
* seam synthesizes from the arguments the row already carries (`section_contains`
|
|
56
|
+
* and `require_sections` name no field, so `clauseField` in
|
|
57
|
+
* `sdk/src/declarations.ts` lowers a `<heading>.<marker>` / joined-sections segment
|
|
58
|
+
* here instead). `None` where the predicate needs no segment to label uniquely. A
|
|
59
|
+
* synthesized segment labels only: those two predicates are reconstructed from
|
|
60
|
+
* their own `section`/`sections` columns, never round-tripped through this one.
|
|
53
61
|
*/
|
|
54
62
|
field?: string;
|
|
55
63
|
/**
|
|
@@ -71,14 +79,28 @@ export type ClauseRow = {
|
|
|
71
79
|
*/
|
|
72
80
|
count?: CountBoundRow;
|
|
73
81
|
/**
|
|
74
|
-
* The
|
|
75
|
-
* `membership
|
|
82
|
+
* The **requirement name** whose satisfiers a clause reads its second selection
|
|
83
|
+
* from — two owners, one naming scheme: `membership`'s allowed-set source and
|
|
84
|
+
* `reached-from`'s closure roots. Both ask the same question of the same column
|
|
85
|
+
* ("which requirement's satisfiers?"), so a second column would be the residue
|
|
86
|
+
* class ([`crate::contract::predicate_from_row`] decodes either from here).
|
|
76
87
|
*/
|
|
77
88
|
target?: string;
|
|
78
89
|
/**
|
|
79
90
|
* The `degree` clause's in/out edge-count bound, when the predicate is `degree`.
|
|
80
91
|
*/
|
|
81
92
|
degree?: DegreeBoundRow;
|
|
93
|
+
/**
|
|
94
|
+
* The **field set** a by-incidence clause filters its selection to — `degree`'s
|
|
95
|
+
* bound and `reached-from`'s via set (`specs/decisions/0056-…`). Shared rather
|
|
96
|
+
* than nested inside [`DegreeBoundRow`] because the filter is the *clause's*, not
|
|
97
|
+
* either direction's, and the two consumers name one concept: a lock spelling it
|
|
98
|
+
* twice would be the residue class.
|
|
99
|
+
*
|
|
100
|
+
* Absent ⇒ unfiltered, so no committed lock row moves when a clause declares no
|
|
101
|
+
* filter.
|
|
102
|
+
*/
|
|
103
|
+
fields?: Array<string>;
|
|
82
104
|
/**
|
|
83
105
|
* The `mention-reachable` clause's **target-side gate field**, when the predicate
|
|
84
106
|
* is `mention-reachable`. The one predicate taking two field arguments: its
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AssemblyFactRow } from "./AssemblyFactRow.js";
|
|
2
2
|
import type { ClauseRow } from "./ClauseRow.js";
|
|
3
3
|
import type { IncludeRow } from "./IncludeRow.js";
|
|
4
|
+
import type { InputRow } from "./InputRow.js";
|
|
4
5
|
import type { KindFactRow } from "./KindFactRow.js";
|
|
5
6
|
import type { MentionRow } from "./MentionRow.js";
|
|
6
7
|
import type { NestedMemberRow } from "./NestedMemberRow.js";
|
|
@@ -65,6 +66,13 @@ export type Declarations = {
|
|
|
65
66
|
* declaration table, so a lock round-trip reads it empty).
|
|
66
67
|
*/
|
|
67
68
|
includes: Array<IncludeRow>;
|
|
69
|
+
/**
|
|
70
|
+
* The members' declared inputs — the files their claims rest on. Seam-inbound
|
|
71
|
+
* like `includes`: `emit` resolves and fingerprints each as an `input` source
|
|
72
|
+
* dependency without moving a byte into any projection, so a lock round-trip reads
|
|
73
|
+
* this family empty.
|
|
74
|
+
*/
|
|
75
|
+
inputs: Array<InputRow>;
|
|
68
76
|
/**
|
|
69
77
|
* The host members' declared embedded-member facts — captured as declaration
|
|
70
78
|
* rows rather than a second copy the engine reads back off the rendered fence
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One **declared input** the SDK declares — a file the member's claims rest on, and the
|
|
3
|
+
* member that rests on it. Its own type, not a reuse of [`IncludeRow`]: an include's
|
|
4
|
+
* path pairs positionally with a body slot, an input's moves nothing, and two concepts
|
|
5
|
+
* sharing two columns are still two concepts.
|
|
6
|
+
*
|
|
7
|
+
* A seam-inbound row only, the same posture an include takes: `emit` resolves it against
|
|
8
|
+
* disk ([`resolve_source_dependency`]) and lowers it to a fingerprinted `input` source
|
|
9
|
+
* dependency — this row itself never reaches the lock. Nothing is spliced and no byte
|
|
10
|
+
* moves, so the target is never decoded and a binary input is legal.
|
|
11
|
+
*/
|
|
12
|
+
export type InputRow = {
|
|
13
|
+
/**
|
|
14
|
+
* The declaring member's own `kind:name` address.
|
|
15
|
+
*/
|
|
16
|
+
member: string;
|
|
17
|
+
/**
|
|
18
|
+
* The input's SDK-resolved absolute path.
|
|
19
|
+
*/
|
|
20
|
+
source_path: string;
|
|
21
|
+
};
|
|
@@ -73,6 +73,18 @@ export type KindFactRow = {
|
|
|
73
73
|
* take, so a body-bearing kind's row stays byte-identical.
|
|
74
74
|
*/
|
|
75
75
|
shape?: string;
|
|
76
|
+
/**
|
|
77
|
+
* The kind's **leaf set** — the leaf names a member of it carries, derived at emit
|
|
78
|
+
* from the member value type the SDK knows, never authored twice (decision 0053).
|
|
79
|
+
* Empty for a kind whose declaration carries none, the same tolerant round-trip
|
|
80
|
+
* [`registration`](KindFactRow::registration) takes, so a committed lock written
|
|
81
|
+
* before the column existed re-reads byte-identically.
|
|
82
|
+
*
|
|
83
|
+
* The declaration a read verb renders where the surface holds no member yet: the
|
|
84
|
+
* type is the declaration, so a present set outranks the union of what members
|
|
85
|
+
* carry today.
|
|
86
|
+
*/
|
|
87
|
+
leaves?: Array<string>;
|
|
76
88
|
/**
|
|
77
89
|
* The declared **collection address** — for a registration member surfacing inside a
|
|
78
90
|
* host manifest, which manifest and which key path it keys at. Absent for a
|
|
@@ -15,6 +15,7 @@ export type { FeatureValue } from "./FeatureValue.js";
|
|
|
15
15
|
export type { Features } from "./Features.js";
|
|
16
16
|
export type { FencedBlock } from "./FencedBlock.js";
|
|
17
17
|
export type { IncludeRow } from "./IncludeRow.js";
|
|
18
|
+
export type { InputRow } from "./InputRow.js";
|
|
18
19
|
export type { KindFactRow } from "./KindFactRow.js";
|
|
19
20
|
export type { LayoutRegionRow } from "./LayoutRegionRow.js";
|
|
20
21
|
export type { LayoutRow } from "./LayoutRow.js";
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* temper's authoring face — the six-noun core as a typed module library.
|
|
3
3
|
* A harness author imports plain nouns — `harness()`, the generic `kind`
|
|
4
|
-
* constructor, the clause and requirement constructors, `needs`, and the
|
|
4
|
+
* constructor, the clause and requirement constructors, `needs`, and the four
|
|
5
5
|
* prose constructors — and composes members as typed values. `emit` compiles the
|
|
6
6
|
* whole into the declaration rows and the projected members' erased payload —
|
|
7
7
|
* the JSON pipe printed to stdout; the engine is the sole compiler of every
|
|
@@ -13,16 +13,17 @@
|
|
|
13
13
|
* the `./claude-code` subpath, never here.
|
|
14
14
|
*/
|
|
15
15
|
export type { Blocks, File, Include, Mention, Mentionable, Prose, Reference, Text } from "./prose.js";
|
|
16
|
-
export { blocks, file, include, mentionOf, renderText, text } from "./prose.js";
|
|
16
|
+
export { blocks, file, include, mentionOf, renderText, span, text } from "./prose.js";
|
|
17
17
|
export type { Capability } from "./needs.js";
|
|
18
18
|
export { bash, capability, permissionUnion } from "./needs.js";
|
|
19
19
|
export type { Charset, Clause, ExtentUnit, Predicate, Requirement, Severity, Verifier } from "./contract.js";
|
|
20
|
-
export { allowedChars, clause, closedKeys, count, degree, deny, enumOf, extent, forbiddenKeys, formatPlacesEdges, globValid, maxLen, membership, mentionReachable, minLen, mustDefine, nameMatchesDir, optional, range, required, requireSections, requirement, script, sectionContains, shape, telemetry, type, unique, uniqueName, when, } from "./contract.js";
|
|
21
|
-
export type { CollectionAddress, EdgeField, EdgeTargetFacts, EmbeddedMemberCollectionEntry, EmbeddedMemberValue, Format, KindDefinition, KindFacts, KindOptions, Layout, LayoutRegion, Locus, Member, MemberInit, Registration, ResolvedEmbeddedMemberCollectionEntry, ResolvedEmbeddedMemberValue, Shape, Template, UnitShape, } from "./kind.js";
|
|
22
|
-
export { embeddedMemberValue, kind } from "./kind.js";
|
|
20
|
+
export { allowedChars, clause, closedKeys, count, degree, deny, enumOf, extent, forbiddenKeys, formatPlacesEdges, fresh, globValid, locusDeclared, maxLen, membership, mentionReachable, minLen, mustDefine, nameMatchesDir, optional, range, reachable, reachedFrom, required, requireSections, requirement, script, sectionContains, shape, telemetry, type, unique, uniqueName, when, } from "./contract.js";
|
|
21
|
+
export type { CollectionAddress, EdgeField, EdgeTargetFacts, EmbeddedMemberCollectionEntry, EmbeddedMemberValue, Format, Input, KindDefinition, KindFacts, KindOptions, KindRelocation, Layout, LayoutRegion, LeafSet, Locus, Member, MemberInit, Registration, Residue, ResolvedEmbeddedMemberCollectionEntry, ResolvedEmbeddedMemberValue, Shape, Template, UnitShape, } from "./kind.js";
|
|
22
|
+
export { embeddedMemberValue, kind, relocate } from "./kind.js";
|
|
23
|
+
export { input } from "./kind.js";
|
|
23
24
|
export type { Admission, EnforcementMode, ExpectBinding, Harness } from "./assembly.js";
|
|
24
|
-
export { harness } from "./assembly.js";
|
|
25
|
-
export type { EmitResult, RegistrationFact, ResolveOptions, SettingsResidue } from "./emit.js";
|
|
25
|
+
export { harness, rootDefaultContract } from "./assembly.js";
|
|
26
|
+
export type { EdgeTarget, EmbeddedTarget, EmitResult, RegistrationFact, ResolveOptions, SettingsResidue, } from "./emit.js";
|
|
26
27
|
export { emit } from "./emit.js";
|
|
27
28
|
export type { Dial, DialEntry } from "./dial.js";
|
|
28
29
|
export { dial, dialDefaultContract } from "./dial.js";
|
package/dist/src/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* temper's authoring face — the six-noun core as a typed module library.
|
|
3
3
|
* A harness author imports plain nouns — `harness()`, the generic `kind`
|
|
4
|
-
* constructor, the clause and requirement constructors, `needs`, and the
|
|
4
|
+
* constructor, the clause and requirement constructors, `needs`, and the four
|
|
5
5
|
* prose constructors — and composes members as typed values. `emit` compiles the
|
|
6
6
|
* whole into the declaration rows and the projected members' erased payload —
|
|
7
7
|
* the JSON pipe printed to stdout; the engine is the sole compiler of every
|
|
@@ -12,10 +12,14 @@
|
|
|
12
12
|
* The first-party Claude Code provider face — the built-in kinds — lives at
|
|
13
13
|
* the `./claude-code` subpath, never here.
|
|
14
14
|
*/
|
|
15
|
-
export { blocks, file, include, mentionOf, renderText, text } from "./prose.js";
|
|
15
|
+
export { blocks, file, include, mentionOf, renderText, span, text } from "./prose.js";
|
|
16
16
|
export { bash, capability, permissionUnion } from "./needs.js";
|
|
17
|
-
export { allowedChars, clause, closedKeys, count, degree, deny, enumOf, extent, forbiddenKeys, formatPlacesEdges, globValid, maxLen, membership, mentionReachable, minLen, mustDefine, nameMatchesDir, optional, range, required, requireSections, requirement, script, sectionContains, shape, telemetry, type, unique, uniqueName, when, } from "./contract.js";
|
|
18
|
-
export { embeddedMemberValue, kind } from "./kind.js";
|
|
19
|
-
|
|
17
|
+
export { allowedChars, clause, closedKeys, count, degree, deny, enumOf, extent, forbiddenKeys, formatPlacesEdges, fresh, globValid, locusDeclared, maxLen, membership, mentionReachable, minLen, mustDefine, nameMatchesDir, optional, range, reachable, reachedFrom, required, requireSections, requirement, script, sectionContains, shape, telemetry, type, unique, uniqueName, when, } from "./contract.js";
|
|
18
|
+
export { embeddedMemberValue, kind, relocate } from "./kind.js";
|
|
19
|
+
// Inputs — the files a member's claims rest on, fingerprinted by the lock and moved
|
|
20
|
+
// nowhere. A member-grain declaration, not a word in a body, so it rides here rather
|
|
21
|
+
// than on the prose line.
|
|
22
|
+
export { input } from "./kind.js";
|
|
23
|
+
export { harness, rootDefaultContract } from "./assembly.js";
|
|
20
24
|
export { emit } from "./emit.js";
|
|
21
25
|
export { dial, dialDefaultContract } from "./dial.js";
|