systemoneprompts 0.1.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 (147) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +214 -0
  4. package/dist/answers.d.ts +21 -0
  5. package/dist/answers.d.ts.map +1 -0
  6. package/dist/answers.js +104 -0
  7. package/dist/answers.js.map +1 -0
  8. package/dist/cli/cache.d.ts +2 -0
  9. package/dist/cli/cache.d.ts.map +1 -0
  10. package/dist/cli/cache.js +26 -0
  11. package/dist/cli/cache.js.map +1 -0
  12. package/dist/cli/check.d.ts +2 -0
  13. package/dist/cli/check.d.ts.map +1 -0
  14. package/dist/cli/check.js +28 -0
  15. package/dist/cli/check.js.map +1 -0
  16. package/dist/cli/env.d.ts +2 -0
  17. package/dist/cli/env.d.ts.map +1 -0
  18. package/dist/cli/env.js +29 -0
  19. package/dist/cli/env.js.map +1 -0
  20. package/dist/cli/eval.d.ts +18 -0
  21. package/dist/cli/eval.d.ts.map +1 -0
  22. package/dist/cli/eval.js +314 -0
  23. package/dist/cli/eval.js.map +1 -0
  24. package/dist/cli/generate.d.ts +5 -0
  25. package/dist/cli/generate.d.ts.map +1 -0
  26. package/dist/cli/generate.js +93 -0
  27. package/dist/cli/generate.js.map +1 -0
  28. package/dist/cli/index.d.ts +3 -0
  29. package/dist/cli/index.d.ts.map +1 -0
  30. package/dist/cli/index.js +76 -0
  31. package/dist/cli/index.js.map +1 -0
  32. package/dist/cli/io.d.ts +28 -0
  33. package/dist/cli/io.d.ts.map +1 -0
  34. package/dist/cli/io.js +88 -0
  35. package/dist/cli/io.js.map +1 -0
  36. package/dist/cli/run.d.ts +7 -0
  37. package/dist/cli/run.d.ts.map +1 -0
  38. package/dist/cli/run.js +63 -0
  39. package/dist/cli/run.js.map +1 -0
  40. package/dist/client.d.ts +65 -0
  41. package/dist/client.d.ts.map +1 -0
  42. package/dist/client.js +301 -0
  43. package/dist/client.js.map +1 -0
  44. package/dist/cloudflare.d.ts +29 -0
  45. package/dist/cloudflare.d.ts.map +1 -0
  46. package/dist/cloudflare.js +159 -0
  47. package/dist/cloudflare.js.map +1 -0
  48. package/dist/definition/check.d.ts +9 -0
  49. package/dist/definition/check.d.ts.map +1 -0
  50. package/dist/definition/check.js +26 -0
  51. package/dist/definition/check.js.map +1 -0
  52. package/dist/definition/diagnostics.d.ts +29 -0
  53. package/dist/definition/diagnostics.d.ts.map +1 -0
  54. package/dist/definition/diagnostics.js +74 -0
  55. package/dist/definition/diagnostics.js.map +1 -0
  56. package/dist/definition/locate.d.ts +23 -0
  57. package/dist/definition/locate.d.ts.map +1 -0
  58. package/dist/definition/locate.js +211 -0
  59. package/dist/definition/locate.js.map +1 -0
  60. package/dist/definition/parse.d.ts +15 -0
  61. package/dist/definition/parse.d.ts.map +1 -0
  62. package/dist/definition/parse.js +170 -0
  63. package/dist/definition/parse.js.map +1 -0
  64. package/dist/definition/schema.d.ts +39 -0
  65. package/dist/definition/schema.d.ts.map +1 -0
  66. package/dist/definition/schema.js +11 -0
  67. package/dist/definition/schema.js.map +1 -0
  68. package/dist/dev/cache.d.ts +58 -0
  69. package/dist/dev/cache.d.ts.map +1 -0
  70. package/dist/dev/cache.js +287 -0
  71. package/dist/dev/cache.js.map +1 -0
  72. package/dist/dev/index.d.ts +2 -0
  73. package/dist/dev/index.d.ts.map +1 -0
  74. package/dist/dev/index.js +3 -0
  75. package/dist/dev/index.js.map +1 -0
  76. package/dist/factors/evaluate.d.ts +21 -0
  77. package/dist/factors/evaluate.d.ts.map +1 -0
  78. package/dist/factors/evaluate.js +199 -0
  79. package/dist/factors/evaluate.js.map +1 -0
  80. package/dist/factors/graph.d.ts +7 -0
  81. package/dist/factors/graph.d.ts.map +1 -0
  82. package/dist/factors/graph.js +39 -0
  83. package/dist/factors/graph.js.map +1 -0
  84. package/dist/factors/schema.d.ts +54 -0
  85. package/dist/factors/schema.d.ts.map +1 -0
  86. package/dist/factors/schema.js +235 -0
  87. package/dist/factors/schema.js.map +1 -0
  88. package/dist/generate/generate.d.ts +16 -0
  89. package/dist/generate/generate.d.ts.map +1 -0
  90. package/dist/generate/generate.js +100 -0
  91. package/dist/generate/generate.js.map +1 -0
  92. package/dist/generate/types.d.ts +10 -0
  93. package/dist/generate/types.d.ts.map +1 -0
  94. package/dist/generate/types.js +126 -0
  95. package/dist/generate/types.js.map +1 -0
  96. package/dist/index.d.ts +15 -0
  97. package/dist/index.d.ts.map +1 -0
  98. package/dist/index.js +13 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/json.d.ts +6 -0
  101. package/dist/json.d.ts.map +1 -0
  102. package/dist/json.js +52 -0
  103. package/dist/json.js.map +1 -0
  104. package/dist/model.d.ts +9 -0
  105. package/dist/model.d.ts.map +1 -0
  106. package/dist/model.js +22 -0
  107. package/dist/model.js.map +1 -0
  108. package/dist/native.d.ts +97 -0
  109. package/dist/native.d.ts.map +1 -0
  110. package/dist/native.js +2 -0
  111. package/dist/native.js.map +1 -0
  112. package/dist/patterns/index.d.ts +3 -0
  113. package/dist/patterns/index.d.ts.map +1 -0
  114. package/dist/patterns/index.js +3 -0
  115. package/dist/patterns/index.js.map +1 -0
  116. package/dist/patterns/options.d.ts +2 -0
  117. package/dist/patterns/options.d.ts.map +1 -0
  118. package/dist/patterns/options.js +7 -0
  119. package/dist/patterns/options.js.map +1 -0
  120. package/dist/patterns/run-many.d.ts +41 -0
  121. package/dist/patterns/run-many.d.ts.map +1 -0
  122. package/dist/patterns/run-many.js +51 -0
  123. package/dist/patterns/run-many.js.map +1 -0
  124. package/dist/patterns/walk-taxonomy.d.ts +37 -0
  125. package/dist/patterns/walk-taxonomy.d.ts.map +1 -0
  126. package/dist/patterns/walk-taxonomy.js +81 -0
  127. package/dist/patterns/walk-taxonomy.js.map +1 -0
  128. package/dist/questions/references.d.ts +12 -0
  129. package/dist/questions/references.d.ts.map +1 -0
  130. package/dist/questions/references.js +76 -0
  131. package/dist/questions/references.js.map +1 -0
  132. package/dist/questions/schema.d.ts +18 -0
  133. package/dist/questions/schema.d.ts.map +1 -0
  134. package/dist/questions/schema.js +169 -0
  135. package/dist/questions/schema.js.map +1 -0
  136. package/dist/state/paths.d.ts +13 -0
  137. package/dist/state/paths.d.ts.map +1 -0
  138. package/dist/state/paths.js +70 -0
  139. package/dist/state/paths.js.map +1 -0
  140. package/dist/state/requirements.d.ts +25 -0
  141. package/dist/state/requirements.d.ts.map +1 -0
  142. package/dist/state/requirements.js +189 -0
  143. package/dist/state/requirements.js.map +1 -0
  144. package/docs/SPEC.html +57 -0
  145. package/docs/skills/systemoneprompts/SKILL.md +239 -0
  146. package/docs/skills/systemoneprompts/references/application-data.md +79 -0
  147. package/package.json +94 -0
@@ -0,0 +1,159 @@
1
+ export const CLOUDFLARE_MODEL = "typesafe/jev";
2
+ export const CLOUDFLARE_API_ORIGIN = "https://api.cloudflare.com";
3
+ const SYSTEM_ONE_PATH = "/v1/systemone";
4
+ export function cloudflareRunUrl(accountId) {
5
+ return `${CLOUDFLARE_API_ORIGIN}/client/v4/accounts/${encodeURIComponent(accountId)}/ai/run`;
6
+ }
7
+ export function wrapCloudflareRequest(payload) {
8
+ return {
9
+ model: CLOUDFLARE_MODEL,
10
+ input: { state: payload.state, questions: payload.questions },
11
+ };
12
+ }
13
+ /** True when `fetch` is `createCachingFetch()` so Cloudflare wrapping stays innermost. */
14
+ export function isCachingFetch(fetch) {
15
+ return (typeof fetch.stats === "function" &&
16
+ typeof fetch.dir === "string");
17
+ }
18
+ export function markCloudflareFetch(fetch) {
19
+ fetch.systemonepromptsCloudflare = true;
20
+ return fetch;
21
+ }
22
+ export function isCloudflareFetch(fetch) {
23
+ return fetch.systemonepromptsCloudflare === true;
24
+ }
25
+ export function cloudflareErrorMessage(body) {
26
+ if (!body || typeof body !== "object")
27
+ return undefined;
28
+ const errors = body.errors;
29
+ if (!Array.isArray(errors) || errors.length === 0)
30
+ return undefined;
31
+ const first = errors[0];
32
+ if (first &&
33
+ typeof first === "object" &&
34
+ typeof first.message === "string") {
35
+ const message = first.message.trim();
36
+ return message === "" ? undefined : message;
37
+ }
38
+ return undefined;
39
+ }
40
+ export function cloudflareFailureStatus(body, httpStatus) {
41
+ if (!body || typeof body !== "object")
42
+ return undefined;
43
+ const record = body;
44
+ if (record.success === false) {
45
+ if (httpStatus !== undefined && (httpStatus < 200 || httpStatus >= 300))
46
+ return httpStatus;
47
+ const errors = record.errors;
48
+ if (Array.isArray(errors) && errors[0] && typeof errors[0] === "object") {
49
+ const code = errors[0].code;
50
+ if (code === 2021)
51
+ return 402;
52
+ }
53
+ return 400;
54
+ }
55
+ const state = record.result && typeof record.result === "object"
56
+ ? record.result.state
57
+ : undefined;
58
+ if (typeof state === "string" && state !== "Completed")
59
+ return 502;
60
+ return undefined;
61
+ }
62
+ /** Pull `{ model, answers, usage }` out of a Cloudflare Workers AI envelope.
63
+ * Already-native System One objects are returned unchanged.
64
+ */
65
+ export function unwrapCloudflareResult(parsed) {
66
+ if (!isRecord(parsed))
67
+ return undefined;
68
+ if (isRecord(parsed.answers))
69
+ return parsed;
70
+ const outer = parsed.result;
71
+ if (!isRecord(outer))
72
+ return undefined;
73
+ if (isRecord(outer.answers))
74
+ return outer;
75
+ const inner = outer.result;
76
+ if (isRecord(inner) && isRecord(inner.answers))
77
+ return inner;
78
+ return undefined;
79
+ }
80
+ export function createCloudflareFetch(options) {
81
+ const accountId = options.accountId.trim();
82
+ const inner = options.fetch ?? globalThis.fetch.bind(globalThis);
83
+ const fetch = async (input, init) => {
84
+ if (!isSystemOnePost(input, init) || typeof init?.body !== "string") {
85
+ return inner(input, init);
86
+ }
87
+ let payload;
88
+ try {
89
+ payload = JSON.parse(init.body);
90
+ }
91
+ catch {
92
+ return inner(input, init);
93
+ }
94
+ if (payload.questions == null || typeof payload.questions !== "object") {
95
+ return inner(input, init);
96
+ }
97
+ const headers = new Headers(init.headers);
98
+ headers.delete("content-length");
99
+ headers.delete("host");
100
+ headers.delete("content-encoding");
101
+ headers.delete("transfer-encoding");
102
+ headers.set("content-type", "application/json");
103
+ const response = await inner(cloudflareRunUrl(accountId), {
104
+ ...init,
105
+ method: "POST",
106
+ headers,
107
+ body: JSON.stringify(wrapCloudflareRequest({ state: payload.state, questions: payload.questions })),
108
+ });
109
+ const parsed = await parseJsonBody(response);
110
+ const failure = cloudflareFailureStatus(parsed, response.status);
111
+ if (failure !== undefined) {
112
+ return jsonCopy(parsed, failure, response);
113
+ }
114
+ if (!response.ok)
115
+ return jsonCopy(parsed, response.status, response);
116
+ const unwrapped = unwrapCloudflareResult(parsed);
117
+ if (unwrapped === undefined)
118
+ return jsonCopy(parsed, 502, response);
119
+ return jsonCopy(unwrapped, 200, response);
120
+ };
121
+ return markCloudflareFetch(fetch);
122
+ }
123
+ function isSystemOnePost(input, init) {
124
+ if ((init?.method ?? "POST").toUpperCase() !== "POST")
125
+ return false;
126
+ try {
127
+ return new URL(input).pathname.endsWith(SYSTEM_ONE_PATH);
128
+ }
129
+ catch {
130
+ return input.includes(SYSTEM_ONE_PATH);
131
+ }
132
+ }
133
+ async function parseJsonBody(response) {
134
+ const text = await response.text();
135
+ if (text.length === 0)
136
+ return undefined;
137
+ try {
138
+ return JSON.parse(text);
139
+ }
140
+ catch {
141
+ return text;
142
+ }
143
+ }
144
+ function jsonCopy(body, status, source) {
145
+ const headers = new Headers(source.headers);
146
+ headers.delete("content-length");
147
+ headers.delete("content-encoding");
148
+ headers.delete("transfer-encoding");
149
+ headers.set("content-type", "application/json");
150
+ return new Response(body === undefined ? "" : JSON.stringify(body), {
151
+ status,
152
+ statusText: source.statusText,
153
+ headers,
154
+ });
155
+ }
156
+ function isRecord(value) {
157
+ return value != null && typeof value === "object" && !Array.isArray(value);
158
+ }
159
+ //# sourceMappingURL=cloudflare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Diagnostic } from "./diagnostics.js";
2
+ import type { Definition } from "./schema.js";
3
+ /**
4
+ * Every diagnostic for a definition: the structural ones collected while parsing,
5
+ * plus cross-cutting checks — factor references and primitive compatibility,
6
+ * cycles, `[requires]` path conflicts, and the backtick lint.
7
+ */
8
+ export declare function checkDefinition(def: Definition): Diagnostic[];
9
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/definition/check.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,EAAE,CA2B7D"}
@@ -0,0 +1,26 @@
1
+ import { topoSortFactors } from "../factors/graph.js";
2
+ import { validatePrimitiveRefs } from "../factors/schema.js";
3
+ import { lintBackticks } from "../questions/references.js";
4
+ import { questionInfos } from "../questions/schema.js";
5
+ import { checkRequirementConflicts } from "../state/requirements.js";
6
+ import { locate } from "./locate.js";
7
+ /**
8
+ * Every diagnostic for a definition: the structural ones collected while parsing,
9
+ * plus cross-cutting checks — factor references and primitive compatibility,
10
+ * cycles, `[requires]` path conflicts, and the backtick lint.
11
+ */
12
+ export function checkDefinition(def) {
13
+ const index = def.source.index;
14
+ const diagnostics = [...def.diagnostics];
15
+ diagnostics.push(...checkRequirementConflicts(def.requires, index));
16
+ const infos = questionInfos(def.questions);
17
+ const factorIds = new Set(Object.keys(def.factors));
18
+ for (const [id, factor] of Object.entries(def.factors)) {
19
+ diagnostics.push(...validatePrimitiveRefs(id, factor, infos, factorIds, locate(index, { section: "factors", key: id, table: "factors" })));
20
+ }
21
+ const sorted = topoSortFactors(def.factors, (id) => locate(index, { section: "factors", key: id }));
22
+ diagnostics.push(...sorted.diagnostics);
23
+ diagnostics.push(...lintBackticks(def.questions, def.requires, index));
24
+ return diagnostics;
25
+ }
26
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/definition/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAe;IAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IAC/B,MAAM,WAAW,GAAiB,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IAEvD,WAAW,CAAC,IAAI,CAAC,GAAG,yBAAyB,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpE,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,WAAW,CAAC,IAAI,CACd,GAAG,qBAAqB,CACtB,EAAE,EACF,MAAM,EACN,KAAK,EACL,SAAS,EACT,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CACjE,CACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CACjD,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAC/C,CAAC;IACF,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAEvE,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,29 @@
1
+ export type DiagnosticSeverity = "error" | "warning";
2
+ export interface SourceLocation {
3
+ filename?: string;
4
+ line?: number;
5
+ column?: number;
6
+ }
7
+ export interface Diagnostic extends SourceLocation {
8
+ severity: DiagnosticSeverity;
9
+ code: string;
10
+ message: string;
11
+ hint?: string;
12
+ }
13
+ /**
14
+ * Thrown when a definition, state, or answer set is unusable.
15
+ * `diagnostic` is the primary problem; `diagnostics` lists every error that was found.
16
+ */
17
+ export declare class SystemOnePromptsError extends Error {
18
+ readonly diagnostic: Diagnostic;
19
+ readonly diagnostics: readonly Diagnostic[];
20
+ constructor(diagnostics: Diagnostic | readonly Diagnostic[]);
21
+ }
22
+ export declare function formatDiagnostic(d: Diagnostic): string;
23
+ export declare function formatLocation(loc: SourceLocation): string;
24
+ export declare function diagnostic(severity: DiagnosticSeverity, code: string, message: string, loc?: SourceLocation, hint?: string): Diagnostic;
25
+ export declare function hasErrors(diagnostics: readonly Diagnostic[]): boolean;
26
+ export declare function errorsOf(diagnostics: readonly Diagnostic[]): Diagnostic[];
27
+ /** Closest candidate by edit distance, or `undefined` when nothing is plausibly a typo. */
28
+ export declare function nearestMatch(needle: string, candidates: readonly string[]): string | undefined;
29
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/definition/diagnostics.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;gBAEhC,WAAW,EAAE,UAAU,GAAG,SAAS,UAAU,EAAE;CAU5D;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAMtD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAM1D;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,cAAmB,EACxB,IAAI,CAAC,EAAE,MAAM,GACZ,UAAU,CAEZ;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAErE;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE,CAEzE;AAED,2FAA2F;AAC3F,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAa9F"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Thrown when a definition, state, or answer set is unusable.
3
+ * `diagnostic` is the primary problem; `diagnostics` lists every error that was found.
4
+ */
5
+ export class SystemOnePromptsError extends Error {
6
+ diagnostic;
7
+ diagnostics;
8
+ constructor(diagnostics) {
9
+ const list = Array.isArray(diagnostics) ? diagnostics : [diagnostics];
10
+ if (list.length === 0) {
11
+ throw new TypeError("SystemOnePromptsError requires at least one diagnostic");
12
+ }
13
+ super(list.map(formatDiagnostic).join("\n"));
14
+ this.name = "SystemOnePromptsError";
15
+ this.diagnostic = list[0];
16
+ this.diagnostics = list;
17
+ }
18
+ }
19
+ export function formatDiagnostic(d) {
20
+ const where = formatLocation(d);
21
+ const head = where ? `${where} ${d.message}` : d.message;
22
+ if (!d.hint)
23
+ return head;
24
+ const indent = where ? " ".repeat(where.length + 2) : " ";
25
+ return `${head}\n${indent}${d.hint}`;
26
+ }
27
+ export function formatLocation(loc) {
28
+ if (!loc.filename && loc.line == null)
29
+ return "";
30
+ const file = loc.filename ?? "<input>";
31
+ if (loc.line == null)
32
+ return file;
33
+ if (loc.column == null)
34
+ return `${file}:${loc.line}`;
35
+ return `${file}:${loc.line}:${loc.column}`;
36
+ }
37
+ export function diagnostic(severity, code, message, loc = {}, hint) {
38
+ return { severity, code, message, hint, ...loc };
39
+ }
40
+ export function hasErrors(diagnostics) {
41
+ return diagnostics.some((d) => d.severity === "error");
42
+ }
43
+ export function errorsOf(diagnostics) {
44
+ return diagnostics.filter((d) => d.severity === "error");
45
+ }
46
+ /** Closest candidate by edit distance, or `undefined` when nothing is plausibly a typo. */
47
+ export function nearestMatch(needle, candidates) {
48
+ let best;
49
+ let bestScore = Number.POSITIVE_INFINITY;
50
+ for (const candidate of candidates) {
51
+ const score = levenshtein(needle, candidate);
52
+ if (score < bestScore) {
53
+ best = candidate;
54
+ bestScore = score;
55
+ }
56
+ }
57
+ if (best == null)
58
+ return undefined;
59
+ const threshold = Math.max(2, Math.ceil(needle.length * 0.4));
60
+ return bestScore <= threshold ? best : undefined;
61
+ }
62
+ function levenshtein(a, b) {
63
+ let previous = Array.from({ length: b.length + 1 }, (_, j) => j);
64
+ for (let i = 1; i <= a.length; i++) {
65
+ const current = [i];
66
+ for (let j = 1; j <= b.length; j++) {
67
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
68
+ current[j] = Math.min(previous[j] + 1, current[j - 1] + 1, previous[j - 1] + cost);
69
+ }
70
+ previous = current;
71
+ }
72
+ return previous[b.length];
73
+ }
74
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/definition/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { SourceLocation } from "./diagnostics.js";
2
+ export interface SourceIndex {
3
+ filename?: string;
4
+ tables: Map<string, SourceLocation>;
5
+ keys: Map<string, SourceLocation>;
6
+ /** Structural paths preserve dots inside quoted TOML keys. */
7
+ tablePaths?: Map<string, SourceLocation>;
8
+ keyPaths?: Map<string, SourceLocation>;
9
+ }
10
+ export declare function indexSource(text: string, filename?: string): SourceIndex;
11
+ /** An index with no positions; `locate` against it yields empty locations. */
12
+ export declare const EMPTY_INDEX: SourceIndex;
13
+ /**
14
+ * Best-effort source position, most specific first: a `key` inside `section`
15
+ * (`"ticket.message" = …` under `[requires]`), then a `table` header
16
+ * (`[questions.topic]`), then a bare key, then the section header.
17
+ */
18
+ export declare function locate(index: SourceIndex, options: {
19
+ table?: string | readonly string[];
20
+ key?: string;
21
+ section?: string;
22
+ }): SourceLocation;
23
+ //# sourceMappingURL=locate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../src/definition/locate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC;AAOD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAoDxE;AAED,8EAA8E;AAC9E,eAAO,MAAM,WAAW,EAAE,WAKzB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E,cAAc,CAqChB"}
@@ -0,0 +1,211 @@
1
+ // Capture the optional second bracket separately so `[[table]]` keeps `table`.
2
+ // The lazy path also lets quoted keys contain a closing bracket.
3
+ const TABLE_RE = /^(\s*)\[(\[?)(.*?)(\]?)](?:\s*#.*)?$/;
4
+ const KEY_RE = /^(\s*)((?:"(?:[^"\\]|\\.)*"|'[^']*'|[A-Za-z0-9_-]+))\s*=/;
5
+ export function indexSource(text, filename) {
6
+ const tables = new Map();
7
+ const keys = new Map();
8
+ const tablePaths = new Map();
9
+ const keyPaths = new Map();
10
+ const lines = text.split(/\r?\n/);
11
+ let currentTable = "";
12
+ let currentTablePath = [];
13
+ for (let i = 0; i < lines.length; i++) {
14
+ const line = lines[i] ?? "";
15
+ const trimmed = line.trim();
16
+ if (trimmed === "" || trimmed.startsWith("#"))
17
+ continue;
18
+ const tableMatch = TABLE_RE.exec(line);
19
+ if (tableMatch) {
20
+ const rawPath = (tableMatch[3] ?? "").trim();
21
+ const segments = parseTomlPath(rawPath);
22
+ const path = segments ? normalizeTablePath(segments) : rawPath;
23
+ const loc = {
24
+ filename,
25
+ line: i + 1,
26
+ column: (tableMatch[1]?.length ?? 0) + 1,
27
+ };
28
+ if (!tables.has(path))
29
+ tables.set(path, loc);
30
+ if (segments && !tablePaths.has(pathKey(segments))) {
31
+ tablePaths.set(pathKey(segments), loc);
32
+ }
33
+ currentTable = path;
34
+ currentTablePath = segments ?? [];
35
+ continue;
36
+ }
37
+ const keyMatch = KEY_RE.exec(line);
38
+ if (keyMatch) {
39
+ const rawKey = keyMatch[2] ?? "";
40
+ const key = unquoteTomlKey(rawKey);
41
+ const qualified = currentTable ? `${currentTable}.${key}` : key;
42
+ const loc = {
43
+ filename,
44
+ line: i + 1,
45
+ column: (keyMatch[1]?.length ?? 0) + 1,
46
+ };
47
+ if (!keys.has(qualified))
48
+ keys.set(qualified, loc);
49
+ if (!keys.has(key))
50
+ keys.set(key, loc);
51
+ const qualifiedPath = [...currentTablePath, key];
52
+ if (!keyPaths.has(pathKey(qualifiedPath)))
53
+ keyPaths.set(pathKey(qualifiedPath), loc);
54
+ if (!keyPaths.has(pathKey([key])))
55
+ keyPaths.set(pathKey([key]), loc);
56
+ }
57
+ }
58
+ return { filename, tables, keys, tablePaths, keyPaths };
59
+ }
60
+ /** An index with no positions; `locate` against it yields empty locations. */
61
+ export const EMPTY_INDEX = {
62
+ tables: new Map(),
63
+ keys: new Map(),
64
+ tablePaths: new Map(),
65
+ keyPaths: new Map(),
66
+ };
67
+ /**
68
+ * Best-effort source position, most specific first: a `key` inside `section`
69
+ * (`"ticket.message" = …` under `[requires]`), then a `table` header
70
+ * (`[questions.topic]`), then a bare key, then the section header.
71
+ */
72
+ export function locate(index, options) {
73
+ const filename = index.filename;
74
+ if (options.section && options.key) {
75
+ const scopedTable = index.tablePaths?.get(pathKey([options.section, options.key]));
76
+ if (scopedTable)
77
+ return scopedTable;
78
+ const nestedTable = findNestedTable(index.tablePaths, [options.section, options.key]);
79
+ if (nestedTable)
80
+ return nestedTable;
81
+ const scoped = index.keyPaths?.get(pathKey([options.section, options.key]));
82
+ if (scoped)
83
+ return scoped;
84
+ const loc = index.keys.get(`${options.section}.${options.key}`);
85
+ if (loc)
86
+ return loc;
87
+ }
88
+ if (options.table) {
89
+ const table = options.table;
90
+ const segments = typeof table === "string" ? parseTomlPath(table) : table;
91
+ const loc = segments ? index.tablePaths?.get(pathKey(segments)) : undefined;
92
+ if (loc)
93
+ return loc;
94
+ // A nested array-of-tables field can represent a path without its own header.
95
+ const nested = segments ? findNestedTable(index.tablePaths, segments) : undefined;
96
+ if (nested)
97
+ return nested;
98
+ const legacy = typeof table === "string" ? table : table.join(".");
99
+ const fallback = index.tables.get(legacy);
100
+ if (fallback)
101
+ return fallback;
102
+ }
103
+ if (options.key) {
104
+ const loc = index.keyPaths?.get(pathKey([options.key]));
105
+ if (loc)
106
+ return loc;
107
+ const fallback = index.keys.get(options.key);
108
+ if (fallback)
109
+ return fallback;
110
+ }
111
+ if (options.section) {
112
+ const loc = index.tablePaths?.get(pathKey([options.section]));
113
+ if (loc)
114
+ return loc;
115
+ const fallback = index.tables.get(options.section);
116
+ if (fallback)
117
+ return fallback;
118
+ }
119
+ return { filename };
120
+ }
121
+ function normalizeTablePath(segments) {
122
+ return segments.join(".");
123
+ }
124
+ function pathKey(segments) {
125
+ return JSON.stringify(segments);
126
+ }
127
+ function findNestedTable(tablePaths, segments) {
128
+ if (!tablePaths)
129
+ return undefined;
130
+ for (const [serialized, loc] of tablePaths) {
131
+ let candidate;
132
+ try {
133
+ candidate = JSON.parse(serialized);
134
+ }
135
+ catch {
136
+ continue;
137
+ }
138
+ if (Array.isArray(candidate) &&
139
+ candidate.length > segments.length &&
140
+ segments.every((segment, index) => candidate[index] === segment)) {
141
+ return loc;
142
+ }
143
+ }
144
+ return undefined;
145
+ }
146
+ /** Parse a TOML dotted key path without treating dots in quoted keys as separators. */
147
+ function parseTomlPath(raw) {
148
+ const segments = [];
149
+ let cursor = 0;
150
+ while (cursor < raw.length) {
151
+ while (raw[cursor] === " ")
152
+ cursor += 1;
153
+ if (cursor >= raw.length)
154
+ break;
155
+ if (raw[cursor] === '"' || raw[cursor] === "'") {
156
+ const quote = raw[cursor];
157
+ const start = cursor;
158
+ cursor += 1;
159
+ let escaped = false;
160
+ while (cursor < raw.length) {
161
+ const char = raw[cursor];
162
+ cursor += 1;
163
+ if (escaped) {
164
+ escaped = false;
165
+ }
166
+ else if (quote === '"' && char === "\\") {
167
+ escaped = true;
168
+ }
169
+ else if (char === quote) {
170
+ break;
171
+ }
172
+ }
173
+ const token = raw.slice(start, cursor);
174
+ if (!token.endsWith(quote))
175
+ return null;
176
+ segments.push(unquoteTomlKey(token));
177
+ }
178
+ else {
179
+ const start = cursor;
180
+ while (cursor < raw.length && raw[cursor] !== ".")
181
+ cursor += 1;
182
+ const token = raw.slice(start, cursor).trim();
183
+ if (!token)
184
+ return null;
185
+ segments.push(token);
186
+ }
187
+ while (raw[cursor] === " ")
188
+ cursor += 1;
189
+ if (cursor >= raw.length)
190
+ break;
191
+ if (raw[cursor] !== ".")
192
+ return null;
193
+ cursor += 1;
194
+ }
195
+ return segments.length > 0 ? segments : null;
196
+ }
197
+ function unquoteTomlKey(raw) {
198
+ if (raw.startsWith('"') && raw.endsWith('"')) {
199
+ try {
200
+ return JSON.parse(raw);
201
+ }
202
+ catch {
203
+ return raw.slice(1, -1);
204
+ }
205
+ }
206
+ if (raw.startsWith("'") && raw.endsWith("'")) {
207
+ return raw.slice(1, -1);
208
+ }
209
+ return raw;
210
+ }
211
+ //# sourceMappingURL=locate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/definition/locate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type Definition } from "./schema.js";
2
+ export interface ParseOptions {
3
+ filename?: string;
4
+ }
5
+ /**
6
+ * Parse a TOML definition into native TypeSafe objects.
7
+ *
8
+ * Throws `SystemOnePromptsError` only when the TOML itself is invalid. Structural problems
9
+ * (bad field types, malformed questions, unknown factor fields) are collected in
10
+ * `definition.diagnostics`; the offending entries are omitted from the result.
11
+ * Run `checkDefinition` for cross-cutting checks (references, cycles, lint).
12
+ */
13
+ export declare function parseDefinition(source: string, opts?: ParseOptions): Definition;
14
+ export declare function loadDefinition(path: string): Promise<Definition>;
15
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/definition/parse.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,UAAU,EAIhB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,UAAU,CAuFnF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAGtE"}