@mnmal-ai/substrate-nl 1.0.0-alpha.1 → 1.0.0-alpha.11

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/bootstrap.js CHANGED
@@ -1,3 +1,3 @@
1
- import { n as bootstrap, t as NlBootstrapConfigSchema } from "./bootstrap-BpKUloR3.js";
1
+ import { n as bootstrap, t as NlBootstrapConfigSchema } from "./bootstrap-CLYwjrrl.js";
2
2
 
3
3
  export { NlBootstrapConfigSchema, bootstrap, bootstrap as default };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as askHandler, c as profileNamespace, d as mergeRulings, f as readRulings, g as parseQuestion, h as parseWithJudge, i as createNlPlugin, l as buildNamespacePack, m as runAsk, n as bootstrap, o as packHandler, p as OllamaJudge, r as CONTRACT_VERSION, s as PackService, t as NlBootstrapConfigSchema, u as NamespaceRulingsSchema } from "./bootstrap-BpKUloR3.js";
1
+ import { a as askHandler, c as profileNamespace, d as runAsk, f as parseWithJudge, g as readRulings, h as mergeRulings, i as createNlPlugin, l as buildNamespacePack, m as NamespaceRulingsSchema, n as bootstrap, o as packHandler, p as parseQuestion, r as CONTRACT_VERSION, s as PackService, t as NlBootstrapConfigSchema, u as OllamaJudge } from "./bootstrap-CLYwjrrl.js";
2
2
  import { complete } from "./complete.js";
3
3
 
4
4
  export { CONTRACT_VERSION, NamespaceRulingsSchema, NlBootstrapConfigSchema, OllamaJudge, PackService, askHandler, bootstrap, buildNamespacePack, complete, createNlPlugin, mergeRulings, packHandler, parseQuestion, parseWithJudge, profileNamespace, readRulings, runAsk };
@@ -30,6 +30,7 @@ export type JudgedResult = {
30
30
  } | {
31
31
  status: 'recall';
32
32
  query: string;
33
+ type: string;
33
34
  trail: JudgeStep[];
34
35
  } | {
35
36
  status: 'clarify' | 'refuse';
@@ -1 +1 @@
1
- {"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../src/judge/judge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEzF,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,6EAA6E;AAC7E,MAAM,WAAW,KAAK;IACpB,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrE;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC;AAEpC,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GAChE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GACvD;IAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GACpE;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC;AAarE,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,gBAAqB,EAC9B,QAAQ,GAAE,MAAM,EAAO,GACtB,WAAW,CAqFb;AAED,wDAAwD;AACxD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,MAAM,CAkBrF;AAkBD,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5E,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAmCD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,aAAa,EACnB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,YAAY,CAAC,CA+DvB"}
1
+ {"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../src/judge/judge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEzF,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,6EAA6E;AAC7E,MAAM,WAAW,KAAK;IACpB,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrE;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC;AAEpC,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GAChE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GACrE;IAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GACpE;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC;AAarE,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,gBAAqB,EAC9B,QAAQ,GAAE,MAAM,EAAO,GACtB,WAAW,CAsFb;AAED,wDAAwD;AACxD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,MAAM,CAkBrF;AAkBD,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5E,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAmCD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,aAAa,EACnB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,YAAY,CAAC,CAoFvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/judge/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,KAAK;;IAGvC,YAAY,MAAM,EAAE,iBAAiB,EAEpC;IAEK,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBxE;CACF"}
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/judge/ollama.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,KAAK;;IAGvC,YAAY,MAAM,EAAE,iBAAiB,EAEpC;IAEK,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBxE;CACF"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The comparison lexicon (typed edge walks spec §6): a small, closed set of
3
+ * phrases. Anything comparative outside it is dropped by the caller, never
4
+ * approximated.
5
+ *
6
+ * - "N% over / above / more than / slower" -> gte, times (100+N)/100
7
+ * - "N% faster" -> lte, times (100-N)/100
8
+ * - "at least N× / Nx / N times" -> gte, times N
9
+ * - "$N over / more than <field>" -> gte, plus N
10
+ * - "over / more than X" -> gt X; "under / less than X" -> lt X
11
+ * (without a number after them the operand is the field phrase that follows)
12
+ */
13
+ export interface Comparison {
14
+ op: 'gt' | 'gte' | 'lt' | 'lte';
15
+ times?: number;
16
+ plus?: number;
17
+ /** A literal operand read with the phrase ("over $50"). */
18
+ value?: number;
19
+ /** Words the phrase took. */
20
+ length: number;
21
+ /** Read, but not expressible: the caller drops it with this reason. */
22
+ invalid?: string;
23
+ }
24
+ /** The comparison phrase starting at `words[0]`, or null. */
25
+ export declare function parseComparison(words: string[]): Comparison | null;
26
+ //# sourceMappingURL=compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../src/parse/compare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,IAAI,CA6ClE"}
@@ -8,7 +8,7 @@
8
8
  * `resolved` means one candidate and nothing left over that could change it.
9
9
  * Anything else is for the next tier to judge: this parser never guesses.
10
10
  */
11
- import type { NlEvidence, NlParseStatus } from '@mnmal-ai/substrate/sdk';
11
+ import type { Dropped, NlEvidence, NlParseStatus, PlanClause } from '@mnmal-ai/substrate/sdk';
12
12
  import type { NamespaceRulings } from '../pack/rulings.js';
13
13
  import type { NamespacePack } from '../pack/types.js';
14
14
  export interface ParseContext {
@@ -32,6 +32,15 @@ export interface Candidate {
32
32
  evidence: Evidence[];
33
33
  /** Content words this reading leaves unexplained. */
34
34
  residual: string[];
35
+ /** What the frame does, clause by clause: walks, comparisons, windows, rulings' implicit filters. */
36
+ plan: PlanClause[];
37
+ /** Parts of the question this reading could not express. Dropped, never approximated. */
38
+ dropped: Dropped[];
39
+ /**
40
+ * A count, an aggregate, a pick-one (of the seed or a walk) or a `$ref`
41
+ * comparison: a dropped filter would change its answer, so it is `unknown`.
42
+ */
43
+ strict: boolean;
35
44
  }
36
45
  export type ParseStatus = NlParseStatus;
37
46
  export interface ParseResult {
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/parse/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,kBAAkB,CAAC;AAIjE,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC;AAElC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+GD,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,aAAa,EACnB,GAAG,EAAE,YAAY,GAChB,WAAW,CAuSb"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/parse/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE9F,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,kBAAkB,CAAC;AAcjE,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC;AAElC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,qGAAqG;IACrG,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,yFAAyF;IACzF,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiHD,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,aAAa,EACnB,GAAG,EAAE,YAAY,GAChB,WAAW,CA6Vb"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Walk composition (typed edge walks spec §6). A question that names fields
3
+ * of other types through `fieldPhrases` rulings, compares them, windows them
4
+ * in time, picks one neighbour or orders by a declared derive, is read as
5
+ * walks from the seed type over the pack's declared crossRefs.
6
+ *
7
+ * Nothing here guesses. A part with no unique shortest crossRef path, or
8
+ * that the grammar cannot express, is DROPPED with a reason, never
9
+ * approximated; several equally short paths ask for clarification.
10
+ */
11
+ import type { Dropped, NlFieldPhrase, PlanClause } from '@mnmal-ai/substrate/sdk';
12
+ import type { NamespaceRulings } from '../pack/rulings.js';
13
+ import type { NamespacePack } from '../pack/types.js';
14
+ import { type Comparison } from './compare.js';
15
+ import type { DateRange } from './time.js';
16
+ /** The plan note for a type's default exclusion that yielded to the question's own filter on `field`. */
17
+ export declare function defaultYield(type: string, field: string, path?: string[]): PlanClause;
18
+ export interface Hop {
19
+ dir: 'in' | 'out';
20
+ /** The type the hop leaves. */
21
+ from: string;
22
+ /** The type that declares the crossRef. */
23
+ owner: string;
24
+ field: string;
25
+ /** The type the hop reaches. */
26
+ to: string;
27
+ }
28
+ export type Path = Hop[];
29
+ /** All shortest crossRef paths from `from` to `to` (BFS, both directions, no type revisited). */
30
+ export declare function findPaths(pack: NamespacePack, from: string, to: string, maxHops?: number): Path[];
31
+ export declare function pathLabel(ns: string, p: Path): string;
32
+ export interface WalkToken {
33
+ text: string;
34
+ used: boolean;
35
+ }
36
+ type Span = [start: number, end: number];
37
+ export interface PhraseClaim {
38
+ span: string;
39
+ at: Span;
40
+ entry: NlFieldPhrase;
41
+ /** From `entry.field` ('Type.field'). */
42
+ type?: string;
43
+ field?: string;
44
+ }
45
+ export interface CompareClaim {
46
+ span: string;
47
+ at: Span;
48
+ cmp: Comparison;
49
+ subject?: PhraseClaim;
50
+ object?: PhraseClaim;
51
+ }
52
+ export interface PickClaim {
53
+ span: string;
54
+ at: Span;
55
+ phrase: PhraseClaim;
56
+ kind: 'latest' | 'max' | 'min';
57
+ }
58
+ export interface WalkClaims {
59
+ phrases: PhraseClaim[];
60
+ compares: CompareClaim[];
61
+ picks: PickClaim[];
62
+ derives: PhraseClaim[];
63
+ dropped: Dropped[];
64
+ }
65
+ /**
66
+ * Claims field phrases, pick words, "by <derive>" and comparisons. Only a
67
+ * namespace that declares `fieldPhrases` composes walks, so nothing changes
68
+ * for one that does not.
69
+ */
70
+ export declare function claimWalkParts(tokens: WalkToken[], rulings: NamespaceRulings, glue: Set<string>): WalkClaims;
71
+ /** Comparatives the lexicon did not claim: dropped, never approximated. */
72
+ export declare function dropComparatives(tokens: WalkToken[], dropped: Dropped[]): void;
73
+ /** A where clause and its plan clauses, with plan paths relative to the clause. */
74
+ export interface Part {
75
+ clause: Record<string, unknown>;
76
+ plan: PlanClause[];
77
+ }
78
+ export interface ComposeInput {
79
+ pack: NamespacePack;
80
+ rulings: NamespaceRulings;
81
+ seed: string;
82
+ claims: WalkClaims;
83
+ /** Types the question names, with the first token index of each mention. */
84
+ mentions: Array<{
85
+ type: string;
86
+ span: string;
87
+ at: Span;
88
+ }>;
89
+ time: {
90
+ span: string;
91
+ range: DateRange;
92
+ at: Span;
93
+ } | null;
94
+ }
95
+ export interface Composed {
96
+ /** Clauses for the seed's where, after its own. */
97
+ parts: Part[];
98
+ params: Record<string, unknown>;
99
+ /** Plan clauses outside `where` (derive, orderBy). */
100
+ plan: PlanClause[];
101
+ dropped: Dropped[];
102
+ /** The time window was not bound to a walk: the seed takes it as before. */
103
+ timeOnSeed: boolean;
104
+ /** True when anything was composed, so the frame needs the walk grammar. */
105
+ walked: boolean;
106
+ /** A `$ref` comparison or a picked walk: a dropped filter changes its answer. */
107
+ strict: boolean;
108
+ /** The recency word ("latest") claimed by a seed phrase: the seed is ordered by it. */
109
+ seedLatest?: string;
110
+ }
111
+ /** Clauses as one where: the clause itself, or an AND with plan paths re-rooted. */
112
+ export declare function andOf(parts: Part[]): {
113
+ where: Record<string, unknown>;
114
+ plan: PlanClause[];
115
+ } | null;
116
+ export declare function compose(input: ComposeInput): Composed | {
117
+ clarify: string;
118
+ };
119
+ export {};
120
+ //# sourceMappingURL=walks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walks.d.ts","sourceRoot":"","sources":["../../src/parse/walks.ts"],"names":[],"mappings":"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"}
@@ -6,12 +6,14 @@
6
6
  * namespace's typo must not take NL down for every namespace, and must not
7
7
  * pass silently either.
8
8
  */
9
- import type { Schema } from '@mnmal-ai/substrate/sdk';
9
+ import { type Schema } from '@mnmal-ai/substrate/sdk';
10
10
  import { z } from 'zod';
11
11
  import type { NamespaceRulings } from '../pack/rulings.js';
12
12
  export declare const NamespaceRulingsSchema: z.ZodType<NamespaceRulings>;
13
13
  /** Per top-level key: records merge entry-by-entry (override wins), arrays replace. */
14
14
  export declare function mergeRulings(declared: NamespaceRulings, override: NamespaceRulings | undefined): NamespaceRulings;
15
+ /** Field names an `exclude` clause names, walked through AND/OR/NOT. Structural only: operator spellings are the engine's to refuse at query time. */
16
+ export declare function whereFields(w: unknown, out: string[]): void;
15
17
  /** The effective rulings for one namespace's schema, plus anything that was dropped. */
16
18
  export declare function readRulings(schema: Schema, override?: NamespaceRulings): {
17
19
  rulings: NamespaceRulings;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/rulings/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAmB3D,eAAO,MAAM,sBAAsB,EAUT,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAEtD,uFAAuF;AACvF,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACrC,gBAAgB,CAWlB;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,gBAAgB,GAC1B;IAAE,OAAO,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAanD"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/rulings/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAuD3D,eAAO,MAAM,sBAAsB,EAYT,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAEtD,uFAAuF;AACvF,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACrC,gBAAgB,CAWlB;AAID,sJAAsJ;AACtJ,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAM3D;AAuCD,wFAAwF;AACxF,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,gBAAgB,GAC1B;IAAE,OAAO,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAkDnD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnmal-ai/substrate-nl",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.11",
4
4
  "description": "Natural-language questions for Substrate — a deterministic parser with an optional constrained judge, served at POST /substrate/v1/nl and GET /substrate/v1/nl/pack/:ns, plus browser-safe completion.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -36,19 +36,19 @@
36
36
  "zod": "^4.6.5"
37
37
  },
38
38
  "devDependencies": {
39
- "@biomejs/biome": "^2.5.15",
40
- "@mnmal-ai/substrate": "1.0.0-alpha.1",
41
- "@mnmal-ai/substrate-config": "1.0.0-alpha.1",
39
+ "@biomejs/biome": "2.6.4",
40
+ "@mnmal-ai/substrate": "1.0.0-alpha.11",
41
+ "@mnmal-ai/substrate-config": "1.0.0-alpha.11",
42
42
  "@types/node": "^26.6.4",
43
43
  "tsdown": "^0.23.0",
44
44
  "typescript": "^7.0.2",
45
45
  "vitest": "^5.0.3"
46
46
  },
47
47
  "peerDependencies": {
48
- "@mnmal-ai/substrate": ">=1.0.0-alpha.0 <2.0.0"
48
+ "@mnmal-ai/substrate": ">=1.0.0-alpha.11 <2.0.0"
49
49
  },
50
50
  "engines": {
51
- "node": ">=26.2.0"
51
+ "node": ">=26.12.1"
52
52
  },
53
53
  "substrate": {
54
54
  "tier": "kernel",