@r3b1s/pi-repair-layer 0.2.1 → 0.3.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 (76) hide show
  1. package/README.md +159 -293
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/{index.ts → dist/index.js} +2 -1
  5. package/dist/index.js.map +1 -0
  6. package/dist/src/core.d.ts +8 -0
  7. package/dist/src/core.d.ts.map +1 -0
  8. package/dist/src/core.js +7 -0
  9. package/dist/src/core.js.map +1 -0
  10. package/dist/src/envelope.d.ts +21 -0
  11. package/dist/src/envelope.d.ts.map +1 -0
  12. package/dist/src/envelope.js +158 -0
  13. package/dist/src/envelope.js.map +1 -0
  14. package/dist/src/grammar-recovery.d.ts +105 -0
  15. package/dist/src/grammar-recovery.d.ts.map +1 -0
  16. package/dist/src/grammar-recovery.js +1052 -0
  17. package/dist/src/grammar-recovery.js.map +1 -0
  18. package/dist/src/grammar.d.ts +2 -0
  19. package/dist/src/grammar.d.ts.map +1 -0
  20. package/dist/src/grammar.js +2 -0
  21. package/dist/src/grammar.js.map +1 -0
  22. package/dist/src/index.d.ts +36 -0
  23. package/dist/src/index.d.ts.map +1 -0
  24. package/dist/src/index.js +558 -0
  25. package/dist/src/index.js.map +1 -0
  26. package/dist/src/lifecycle.d.ts +34 -0
  27. package/dist/src/lifecycle.d.ts.map +1 -0
  28. package/dist/src/lifecycle.js +133 -0
  29. package/dist/src/lifecycle.js.map +1 -0
  30. package/dist/src/pi.d.ts +19 -0
  31. package/dist/src/pi.d.ts.map +1 -0
  32. package/dist/src/pi.js +38 -0
  33. package/dist/src/pi.js.map +1 -0
  34. package/dist/src/pipeline.d.ts +10 -0
  35. package/dist/src/pipeline.d.ts.map +1 -0
  36. package/dist/src/pipeline.js +166 -0
  37. package/dist/src/pipeline.js.map +1 -0
  38. package/dist/src/policy.d.ts +16 -0
  39. package/dist/src/policy.d.ts.map +1 -0
  40. package/dist/src/policy.js +31 -0
  41. package/dist/src/policy.js.map +1 -0
  42. package/dist/src/preprocess.d.ts +37 -0
  43. package/dist/src/preprocess.d.ts.map +1 -0
  44. package/dist/src/preprocess.js +216 -0
  45. package/dist/src/preprocess.js.map +1 -0
  46. package/dist/src/repair-engine.d.ts +91 -0
  47. package/dist/src/repair-engine.d.ts.map +1 -0
  48. package/dist/src/repair-engine.js +457 -0
  49. package/dist/src/repair-engine.js.map +1 -0
  50. package/dist/src/settings.d.ts +38 -0
  51. package/dist/src/settings.d.ts.map +1 -0
  52. package/dist/src/settings.js +87 -0
  53. package/dist/src/settings.js.map +1 -0
  54. package/dist/src/tables.d.ts +16 -0
  55. package/dist/src/tables.d.ts.map +1 -0
  56. package/dist/src/tables.js +302 -0
  57. package/dist/src/tables.js.map +1 -0
  58. package/dist/src/types.d.ts +52 -0
  59. package/dist/src/types.d.ts.map +1 -0
  60. package/dist/src/types.js +2 -0
  61. package/dist/src/types.js.map +1 -0
  62. package/dist/src/value-strips.d.ts +52 -0
  63. package/dist/src/value-strips.d.ts.map +1 -0
  64. package/dist/src/value-strips.js +191 -0
  65. package/dist/src/value-strips.js.map +1 -0
  66. package/docs/how-it-works.md +227 -0
  67. package/docs/operations.md +141 -0
  68. package/docs/research.md +247 -0
  69. package/docs/tool-owner-integration.md +327 -0
  70. package/package.json +31 -6
  71. package/src/grammar-recovery.ts +0 -1269
  72. package/src/index.ts +0 -621
  73. package/src/repair-engine.ts +0 -518
  74. package/src/settings.ts +0 -95
  75. package/src/tables.ts +0 -184
  76. package/src/value-strips.ts +0 -218
@@ -0,0 +1,133 @@
1
+ function normalizeJson(value) {
2
+ if (Array.isArray(value))
3
+ return value.map(normalizeJson);
4
+ if (value !== null && typeof value === "object") {
5
+ return Object.fromEntries(Object.entries(value)
6
+ .sort(([left], [right]) => left.localeCompare(right))
7
+ .map(([key, item]) => [key, normalizeJson(item)]));
8
+ }
9
+ return value;
10
+ }
11
+ export function stableSerialize(value) {
12
+ try {
13
+ return JSON.stringify(normalizeJson(value)) ?? String(value);
14
+ }
15
+ catch {
16
+ return String(value);
17
+ }
18
+ }
19
+ export class RepairLifecycle {
20
+ #ttlMs;
21
+ #maxPending;
22
+ #maxAssociated;
23
+ #now;
24
+ #pending = [];
25
+ #byCallId = new Map();
26
+ constructor(options = {}) {
27
+ this.#ttlMs = options.ttlMs ?? 5 * 60 * 1000;
28
+ this.#maxPending = options.maxPending ?? 128;
29
+ this.#maxAssociated = options.maxAssociated ?? 256;
30
+ this.#now = options.now ?? Date.now;
31
+ }
32
+ enqueue(toolName, args, feedback) {
33
+ this.cleanup();
34
+ this.#pending.push({
35
+ ...feedback,
36
+ rules: [...feedback.rules],
37
+ notes: [...feedback.notes],
38
+ key: `${toolName}\u0000${stableSerialize(args)}`,
39
+ timestamp: this.#now(),
40
+ });
41
+ while (this.#pending.length > this.#maxPending)
42
+ this.#pending.shift();
43
+ }
44
+ correlate(toolName, args, toolCallId) {
45
+ this.cleanup();
46
+ const key = `${toolName}\u0000${stableSerialize(args)}`;
47
+ const index = this.#pending.findIndex((item) => item.key === key);
48
+ if (index < 0)
49
+ return undefined;
50
+ const [pending] = this.#pending.splice(index, 1);
51
+ if (!pending)
52
+ return undefined;
53
+ const feedback = {
54
+ rules: pending.rules,
55
+ notes: pending.notes,
56
+ stages: pending.stages,
57
+ profile: pending.profile,
58
+ model: pending.model,
59
+ outcome: pending.outcome,
60
+ fingerprint: pending.fingerprint,
61
+ };
62
+ this.#setAssociated(toolCallId, feedback);
63
+ return feedback;
64
+ }
65
+ associate(toolCallId, feedback) {
66
+ this.#setAssociated(toolCallId, {
67
+ ...feedback,
68
+ rules: [...feedback.rules],
69
+ notes: [...feedback.notes],
70
+ });
71
+ }
72
+ peek(toolCallId) {
73
+ this.cleanup();
74
+ return this.#byCallId.get(toolCallId)?.feedback;
75
+ }
76
+ take(toolCallId) {
77
+ this.cleanup();
78
+ const feedback = this.#byCallId.get(toolCallId)?.feedback;
79
+ this.#byCallId.delete(toolCallId);
80
+ return feedback;
81
+ }
82
+ #setAssociated(toolCallId, feedback) {
83
+ this.cleanup();
84
+ this.#byCallId.set(toolCallId, { feedback, timestamp: this.#now() });
85
+ while (this.#byCallId.size > this.#maxAssociated) {
86
+ const oldest = this.#byCallId.keys().next().value;
87
+ if (oldest === undefined)
88
+ break;
89
+ this.#byCallId.delete(oldest);
90
+ }
91
+ }
92
+ cleanup() {
93
+ const cutoff = this.#now() - this.#ttlMs;
94
+ while (this.#pending[0] && this.#pending[0].timestamp < cutoff) {
95
+ this.#pending.shift();
96
+ }
97
+ for (const [toolCallId, item] of this.#byCallId) {
98
+ if (item.timestamp < cutoff)
99
+ this.#byCallId.delete(toolCallId);
100
+ }
101
+ }
102
+ clear() {
103
+ this.#pending.length = 0;
104
+ this.#byCallId.clear();
105
+ }
106
+ get pendingCount() {
107
+ return this.#pending.length;
108
+ }
109
+ }
110
+ export function formatRepairNotes(notes) {
111
+ return notes.map((note) => `<repair_note>${note}</repair_note>`).join("\n");
112
+ }
113
+ export function attachRepairNotes(content, notes) {
114
+ const noteText = formatRepairNotes(notes);
115
+ if (!noteText)
116
+ return [...content];
117
+ const existingText = content
118
+ .filter((item) => item.type === "text")
119
+ .map((item) => item.text ?? "")
120
+ .join("\n");
121
+ const missing = notes.filter((note) => !existingText.includes(`<repair_note>${note}</repair_note>`));
122
+ if (missing.length === 0)
123
+ return [...content];
124
+ const missingText = formatRepairNotes(missing);
125
+ const next = content.map((item) => ({ ...item }));
126
+ const firstText = next.find((item) => item.type === "text");
127
+ if (firstText)
128
+ firstText.text = `${missingText}\n${firstText.text ?? ""}`;
129
+ else
130
+ next.unshift({ type: "text", text: missingText });
131
+ return next;
132
+ }
133
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { ToolDefinition } from "@earendil-works/pi-coding-agent";
2
+ import type { TSchema } from "typebox";
3
+ import type { RepairPipelineConfig, RepairPipelineResult } from "./types.ts";
4
+ export declare class UnrepairableToolInputError extends Error {
5
+ readonly result: RepairPipelineResult;
6
+ constructor(result: RepairPipelineResult);
7
+ }
8
+ export interface PiToolOwnerAdapterOptions extends Omit<RepairPipelineConfig, "toolName" | "schema" | "ownerPrepareArguments"> {
9
+ /** Receive structured outcomes without giving the pure core side effects. */
10
+ onOutcome?: (result: RepairPipelineResult) => void;
11
+ /** Default is fail-closed by throwing a model-readable error. */
12
+ unrepairable?: "throw" | "passthrough";
13
+ }
14
+ /**
15
+ * Wrap a definition explicitly supplied by its owning extension. This adapter
16
+ * never discovers, scans, or replaces tools registered by other extensions.
17
+ */
18
+ export declare function adaptToolDefinition<TParams extends TSchema, TDetails = unknown, TState = unknown>(definition: ToolDefinition<TParams, TDetails, TState>, options?: PiToolOwnerAdapterOptions): ToolDefinition<TParams, TDetails, TState>;
19
+ //# sourceMappingURL=pi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../src/pi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAU,OAAO,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE7E,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;gBAE1B,MAAM,EAAE,oBAAoB;CAKzC;AAED,MAAM,WAAW,yBACf,SAAQ,IAAI,CACV,oBAAoB,EACpB,UAAU,GAAG,QAAQ,GAAG,uBAAuB,CAChD;IACD,6EAA6E;IAC7E,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACnD,iEAAiE;IACjE,YAAY,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;CACxC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,SAAS,OAAO,EACvB,QAAQ,GAAG,OAAO,EAClB,MAAM,GAAG,OAAO,EAEhB,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EACrD,OAAO,GAAE,yBAA8B,GACtC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAuB3C"}
package/dist/src/pi.js ADDED
@@ -0,0 +1,38 @@
1
+ import { runRepairPipeline } from "./pipeline.js";
2
+ export class UnrepairableToolInputError extends Error {
3
+ result;
4
+ constructor(result) {
5
+ super(result.retryMessage ?? "Tool input could not be repaired safely.");
6
+ this.name = "UnrepairableToolInputError";
7
+ this.result = result;
8
+ }
9
+ }
10
+ /**
11
+ * Wrap a definition explicitly supplied by its owning extension. This adapter
12
+ * never discovers, scans, or replaces tools registered by other extensions.
13
+ */
14
+ export function adaptToolDefinition(definition, options = {}) {
15
+ const ownerPrepareArguments = definition.prepareArguments;
16
+ return {
17
+ ...definition,
18
+ prepareArguments(input) {
19
+ const result = runRepairPipeline({
20
+ input,
21
+ config: {
22
+ ...options,
23
+ toolName: definition.name,
24
+ schema: definition.parameters,
25
+ ownerPrepareArguments,
26
+ },
27
+ });
28
+ if (result.outcome === "unrepairable") {
29
+ if (options.unrepairable === "passthrough") {
30
+ return input;
31
+ }
32
+ throw new UnrepairableToolInputError(result);
33
+ }
34
+ return result.args;
35
+ },
36
+ };
37
+ }
38
+ //# sourceMappingURL=pi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.js","sourceRoot":"","sources":["../../src/pi.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAC1C,MAAM,CAAuB;IAEtC,YAAY,MAA4B;QACtC,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,0CAA0C,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAaD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAKjC,UAAqD,EACrD,UAAqC,EAAE;IAEvC,MAAM,qBAAqB,GAAG,UAAU,CAAC,gBAAgB,CAAC;IAC1D,OAAO;QACL,GAAG,UAAU;QACb,gBAAgB,CAAC,KAAc;YAC7B,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,KAAK;gBACL,MAAM,EAAE;oBACN,GAAG,OAAO;oBACV,QAAQ,EAAE,UAAU,CAAC,IAAI;oBACzB,MAAM,EAAE,UAAU,CAAC,UAAU;oBAC7B,qBAAqB;iBACtB;aACF,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;gBACtC,IAAI,OAAO,CAAC,YAAY,KAAK,aAAa,EAAE,CAAC;oBAC3C,OAAO,KAAwB,CAAC;gBAClC,CAAC;gBACD,MAAM,IAAI,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,MAAM,CAAC,IAAuB,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { RepairPipelineConfig, RepairPipelineResult } from "./types.ts";
2
+ /**
3
+ * Run the ordered, pure validate-then-repair pipeline. It performs no event
4
+ * registration, persistence, UI, telemetry, filesystem, or network work.
5
+ */
6
+ export declare function runRepairPipeline(options: {
7
+ input: unknown;
8
+ config: RepairPipelineConfig;
9
+ }): RepairPipelineResult;
10
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AA4IpB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC;CAC9B,GAAG,oBAAoB,CAoCvB"}
@@ -0,0 +1,166 @@
1
+ import { Value } from "typebox/value";
2
+ import { recoverEnvelope, truncatedEnvelopeChange } from "./envelope.js";
3
+ import { stableSerialize } from "./lifecycle.js";
4
+ import { resolveRepairPolicy } from "./policy.js";
5
+ import { preprocessInput } from "./preprocess.js";
6
+ import { repairSchemaInput } from "./repair-engine.js";
7
+ function convertAndValidate(config, value) {
8
+ try {
9
+ const converted = Value.Convert(config.schema, structuredClone(value));
10
+ return { valid: Value.Check(config.schema, converted), value: converted };
11
+ }
12
+ catch {
13
+ return { valid: false, value };
14
+ }
15
+ }
16
+ function emitObservations(config, observations) {
17
+ if (!config.onObservation)
18
+ return;
19
+ for (const observation of observations) {
20
+ try {
21
+ config.onObservation(observation);
22
+ }
23
+ catch {
24
+ // Observation callbacks cannot affect repair safety or validity.
25
+ }
26
+ }
27
+ }
28
+ function applyDownstream(input, config, initialChanges) {
29
+ const policy = resolveRepairPolicy(config.policy, config.policyOverrides);
30
+ const changes = initialChanges.map((change) => change.ruleId === "envelope.decode-json"
31
+ ? {
32
+ ...change,
33
+ note: `Parsed your JSON-stringified arguments for tool "${config.toolName}". Send the arguments as a JSON object next time, not a string.`,
34
+ }
35
+ : change);
36
+ const observations = [];
37
+ let current = input;
38
+ let ownerChanged = false;
39
+ if (config.ownerPrepareArguments) {
40
+ try {
41
+ const before = stableSerialize(current);
42
+ const prepared = config.ownerPrepareArguments(current);
43
+ current = prepared;
44
+ ownerChanged = stableSerialize(current) !== before;
45
+ }
46
+ catch {
47
+ // Compatibility shims are advisory. Preserve the recovered envelope so
48
+ // strict validation can still make the fail-closed decision.
49
+ }
50
+ }
51
+ const preprocessed = preprocessInput({
52
+ input: current,
53
+ toolName: config.toolName,
54
+ preprocessors: config.preprocessors ?? [],
55
+ modelId: config.modelId,
56
+ allowValidValueTransforms: policy.allowValidValueTransforms,
57
+ });
58
+ current = preprocessed.value;
59
+ changes.push(...preprocessed.changes);
60
+ for (const ruleId of preprocessed.observations) {
61
+ observations.push({
62
+ channel: "tool",
63
+ stage: "valid-value",
64
+ ruleId,
65
+ toolName: config.toolName,
66
+ outcome: "detected",
67
+ });
68
+ }
69
+ const schemaResult = repairSchemaInput({
70
+ toolName: config.toolName,
71
+ schema: config.schema,
72
+ input: current,
73
+ config: config.legacyConfig,
74
+ });
75
+ if (schemaResult.outcome === "unrepairable") {
76
+ const result = {
77
+ outcome: "unrepairable",
78
+ args: input,
79
+ policy: policy.profile,
80
+ changes: [],
81
+ observations,
82
+ issueSummary: schemaResult.issueSummary,
83
+ fingerprint: schemaResult.fingerprint,
84
+ retryMessage: schemaResult.retryMessage,
85
+ };
86
+ emitObservations(config, observations);
87
+ return result;
88
+ }
89
+ for (const schemaChange of schemaResult.changes) {
90
+ changes.push({
91
+ ruleId: schemaChange.ruleId,
92
+ stage: "schema-repair",
93
+ note: schemaChange.note,
94
+ });
95
+ }
96
+ const final = convertAndValidate(config, schemaResult.args);
97
+ if (!final.valid) {
98
+ const result = {
99
+ outcome: "unrepairable",
100
+ args: input,
101
+ policy: policy.profile,
102
+ changes: [],
103
+ observations,
104
+ issueSummary: schemaResult.issueSummary,
105
+ fingerprint: schemaResult.fingerprint,
106
+ retryMessage: schemaResult.retryMessage,
107
+ };
108
+ emitObservations(config, observations);
109
+ return result;
110
+ }
111
+ const result = {
112
+ outcome: changes.length > 0 ? "repaired" : "valid",
113
+ args: changes.length > 0
114
+ ? final.value
115
+ : ownerChanged
116
+ ? schemaResult.args
117
+ : input,
118
+ policy: policy.profile,
119
+ changes,
120
+ observations,
121
+ issueSummary: schemaResult.issueSummary,
122
+ fingerprint: schemaResult.fingerprint,
123
+ };
124
+ emitObservations(config, observations);
125
+ return result;
126
+ }
127
+ /**
128
+ * Run the ordered, pure validate-then-repair pipeline. It performs no event
129
+ * registration, persistence, UI, telemetry, filesystem, or network work.
130
+ */
131
+ export function runRepairPipeline(options) {
132
+ const { input, config } = options;
133
+ const finish = (result) => {
134
+ try {
135
+ config.onOutcome?.(result);
136
+ }
137
+ catch {
138
+ // Reporting callbacks cannot affect repair safety or validity.
139
+ }
140
+ return result;
141
+ };
142
+ const policy = resolveRepairPolicy(config.policy, config.policyOverrides);
143
+ const envelope = recoverEnvelope(input, config.limits);
144
+ if (policy.allowTruncatedEnvelopeCompletion) {
145
+ for (const candidate of envelope.candidates) {
146
+ const completed = applyDownstream(candidate, config, [
147
+ truncatedEnvelopeChange(),
148
+ ]);
149
+ if (completed.outcome !== "unrepairable")
150
+ return finish(completed);
151
+ }
152
+ }
153
+ const primary = applyDownstream(envelope.value, config, envelope.changes);
154
+ if (primary.outcome !== "unrepairable") {
155
+ return finish(primary.outcome === "valid" &&
156
+ stableSerialize(primary.args) === stableSerialize(input)
157
+ ? { ...primary, args: input }
158
+ : primary);
159
+ }
160
+ return finish({
161
+ ...primary,
162
+ args: input,
163
+ changes: [],
164
+ });
165
+ }
166
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type RepairPolicyProfile = "conservative" | "adaptive" | "recover";
2
+ export type GrammarPolicyMode = "off" | "observe" | "strip" | "recover";
3
+ export type UnknownGrammarTextPolicy = "preserve" | "strip";
4
+ export interface RepairPolicy {
5
+ profile: RepairPolicyProfile;
6
+ allowTruncatedEnvelopeCompletion: boolean;
7
+ allowValidValueTransforms: boolean;
8
+ grammarMode: GrammarPolicyMode;
9
+ unknownGrammarText: UnknownGrammarTextPolicy;
10
+ }
11
+ export interface RepairPolicyOverrides {
12
+ grammarMode?: GrammarPolicyMode;
13
+ unknownGrammarText?: UnknownGrammarTextPolicy;
14
+ }
15
+ export declare function resolveRepairPolicy(profile?: RepairPolicyProfile, overrides?: RepairPolicyOverrides): RepairPolicy;
16
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/policy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,UAAU,GAAG,SAAS,CAAC;AAE1E,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAExE,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,gCAAgC,EAAE,OAAO,CAAC;IAC1C,yBAAyB,EAAE,OAAO,CAAC;IACnC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,kBAAkB,EAAE,wBAAwB,CAAC;CAC9C;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AA0BD,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,mBAAgC,EACzC,SAAS,GAAE,qBAA0B,GACpC,YAAY,CAMd"}
@@ -0,0 +1,31 @@
1
+ const PROFILE_DEFAULTS = {
2
+ conservative: {
3
+ profile: "conservative",
4
+ allowTruncatedEnvelopeCompletion: false,
5
+ allowValidValueTransforms: false,
6
+ grammarMode: "observe",
7
+ unknownGrammarText: "preserve",
8
+ },
9
+ adaptive: {
10
+ profile: "adaptive",
11
+ allowTruncatedEnvelopeCompletion: true,
12
+ allowValidValueTransforms: true,
13
+ grammarMode: "strip",
14
+ unknownGrammarText: "preserve",
15
+ },
16
+ recover: {
17
+ profile: "recover",
18
+ allowTruncatedEnvelopeCompletion: true,
19
+ allowValidValueTransforms: true,
20
+ grammarMode: "recover",
21
+ unknownGrammarText: "preserve",
22
+ },
23
+ };
24
+ export function resolveRepairPolicy(profile = "adaptive", overrides = {}) {
25
+ return {
26
+ ...PROFILE_DEFAULTS[profile],
27
+ ...overrides,
28
+ profile,
29
+ };
30
+ }
31
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/policy.ts"],"names":[],"mappings":"AAmBA,MAAM,gBAAgB,GAA8C;IAClE,YAAY,EAAE;QACZ,OAAO,EAAE,cAAc;QACvB,gCAAgC,EAAE,KAAK;QACvC,yBAAyB,EAAE,KAAK;QAChC,WAAW,EAAE,SAAS;QACtB,kBAAkB,EAAE,UAAU;KAC/B;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,UAAU;QACnB,gCAAgC,EAAE,IAAI;QACtC,yBAAyB,EAAE,IAAI;QAC/B,WAAW,EAAE,OAAO;QACpB,kBAAkB,EAAE,UAAU;KAC/B;IACD,OAAO,EAAE;QACP,OAAO,EAAE,SAAS;QAClB,gCAAgC,EAAE,IAAI;QACtC,yBAAyB,EAAE,IAAI;QAC/B,WAAW,EAAE,SAAS;QACtB,kBAAkB,EAAE,UAAU;KAC/B;CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB,CACjC,UAA+B,UAAU,EACzC,YAAmC,EAAE;IAErC,OAAO;QACL,GAAG,gBAAgB,CAAC,OAAO,CAAC;QAC5B,GAAG,SAAS;QACZ,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { RepairChange } from "./types.ts";
2
+ export type ObjectLocationSelector = `/${string}` | "";
3
+ export type Preprocessor = AliasPreprocessor | FieldPreprocessor | StructuralPreprocessor;
4
+ export interface AliasPreprocessor {
5
+ kind: "alias";
6
+ selector: ObjectLocationSelector;
7
+ aliases: readonly string[];
8
+ accepts?: "string" | "number" | "boolean" | "array" | "object";
9
+ emptyEquivalentToMissing?: boolean;
10
+ }
11
+ export interface FieldPreprocessor {
12
+ kind: "filesystem-path" | "filesystem-path-array" | "glob" | "string-or-array" | "scalar" | "anchor-bleed" | "grammar-tokens";
13
+ selector: ObjectLocationSelector;
14
+ scalarType?: "string" | "number" | "boolean";
15
+ modelFamilies?: readonly RegExp[];
16
+ }
17
+ export interface StructuralPreprocessor {
18
+ kind: "structural";
19
+ selector: ObjectLocationSelector;
20
+ ruleId: string;
21
+ apply: (value: unknown) => {
22
+ value: unknown;
23
+ note: string;
24
+ } | undefined;
25
+ }
26
+ export declare function preprocessInput(options: {
27
+ input: unknown;
28
+ toolName: string;
29
+ preprocessors: readonly Preprocessor[];
30
+ modelId?: string;
31
+ allowValidValueTransforms: boolean;
32
+ }): {
33
+ value: unknown;
34
+ changes: RepairChange[];
35
+ observations: string[];
36
+ };
37
+ //# sourceMappingURL=preprocess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preprocess.d.ts","sourceRoot":"","sources":["../../src/preprocess.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,sBAAsB,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC;AAEvD,MAAM,MAAM,YAAY,GACpB,iBAAiB,GACjB,iBAAiB,GACjB,sBAAsB,CAAC;AAE3B,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC/D,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EACA,iBAAiB,GACjB,uBAAuB,GACvB,MAAM,GACN,iBAAiB,GACjB,QAAQ,GACR,cAAc,GACd,gBAAgB,CAAC;IACrB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC7C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACzE;AAkGD,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,SAAS,YAAY,EAAE,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB,EAAE,OAAO,CAAC;CACpC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CA2KtE"}