@romandmitri/ai-patch 0.1.0 → 0.2.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.
- package/README.md +6 -6
- package/dist/operation/Operation_Delete.js +1 -1
- package/dist/operation/Operation_Delete.js.map +1 -1
- package/dist/operation/Operation_InsertAfter.d.ts.map +1 -1
- package/dist/operation/Operation_InsertAfter.js +3 -1
- package/dist/operation/Operation_InsertAfter.js.map +1 -1
- package/dist/operation/Operation_InsertBefore.d.ts.map +1 -1
- package/dist/operation/Operation_InsertBefore.js +3 -1
- package/dist/operation/Operation_InsertBefore.js.map +1 -1
- package/dist/operation/Operation_Replace.js +1 -1
- package/dist/operation/Operation_Replace.js.map +1 -1
- package/dist/target/Target.js +1 -1
- package/dist/target/Target.js.map +1 -1
- package/dist/target/test/Target.schema.test.js +2 -1
- package/dist/target/test/Target.schema.test.js.map +1 -1
- package/docs/development.md +3 -1
- package/docs/publish.md +18 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -32,9 +32,9 @@ Text is the currently supported content format. JSON coming... if needed.
|
|
|
32
32
|
object.
|
|
33
33
|
|
|
34
34
|
```ts
|
|
35
|
-
import {ContentFormat, Target} from "@romandmitri/ai-patch";
|
|
36
|
-
import {Output, generateText} from "ai";
|
|
37
|
-
import {z} from "zod";
|
|
35
|
+
import { ContentFormat, Target } from "@romandmitri/ai-patch";
|
|
36
|
+
import { Output, generateText } from "ai";
|
|
37
|
+
import { z } from "zod";
|
|
38
38
|
|
|
39
39
|
const documentTarget = new Target({
|
|
40
40
|
content: "# Guide\n\nOld instructions.\n",
|
|
@@ -45,7 +45,7 @@ const summaryTarget = new Target({
|
|
|
45
45
|
format: ContentFormat.Markdown,
|
|
46
46
|
});
|
|
47
47
|
|
|
48
|
-
const {output} = await generateText({
|
|
48
|
+
const { output } = await generateText({
|
|
49
49
|
model,
|
|
50
50
|
prompt: "Update the guide and its summary.",
|
|
51
51
|
output: Output.object({
|
|
@@ -67,8 +67,8 @@ Each schema describes one immutable target. Operations cannot address another ta
|
|
|
67
67
|
`Target.toVercelTool()` creates a target-bound AI SDK tool. Its strict input is `{ patches: Operation[] }`, and execution returns the updated content string.
|
|
68
68
|
|
|
69
69
|
```ts
|
|
70
|
-
import {ContentFormat, Target} from "@romandmitri/ai-patch";
|
|
71
|
-
import {generateText, isStepCount} from "ai";
|
|
70
|
+
import { ContentFormat, Target } from "@romandmitri/ai-patch";
|
|
71
|
+
import { generateText, isStepCount } from "ai";
|
|
72
72
|
|
|
73
73
|
const target = new Target({
|
|
74
74
|
content: "# Guide\n\nOld instructions.\n",
|
|
@@ -2,7 +2,7 @@ import { OperationType } from "#src/operation/OperationType.js";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
export const PatchOperation_Delete_Schema = z
|
|
4
4
|
.strictObject({
|
|
5
|
-
operation: z.literal(OperationType.Delete).describe("
|
|
5
|
+
operation: z.literal(OperationType.Delete).describe('Must be exactly "delete" (lowercase); delete the exact oldText anchor.'),
|
|
6
6
|
expectedLine: z.number().int().min(1).describe("The exact 1-based line in the original target content where oldText must begin."),
|
|
7
7
|
oldText: z
|
|
8
8
|
.string()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Operation_Delete.js","sourceRoot":"","sources":["../../src/operation/Operation_Delete.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC3C,YAAY,CAAC;IACb,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"Operation_Delete.js","sourceRoot":"","sources":["../../src/operation/Operation_Delete.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC3C,YAAY,CAAC;IACb,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,wEAAwE,CAAC;IAC7H,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iFAAiF,CAAC;IACjI,OAAO,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,4HAA4H,CAAC;CACxI,CAAC;KACD,QAAQ,CAAC,mDAAmD,CAAuC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Operation_InsertAfter.d.ts","sourceRoot":"","sources":["../../src/operation/Operation_InsertAfter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC;IAC9C,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,iCAAiC;;;;;
|
|
1
|
+
{"version":3,"file":"Operation_InsertAfter.d.ts","sourceRoot":"","sources":["../../src/operation/Operation_InsertAfter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC;IAC9C,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,iCAAiC;;;;;kBAW6D,CAAC"}
|
|
@@ -2,7 +2,9 @@ import { OperationType } from "#src/operation/OperationType.js";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
export const PatchOperation_InsertAfter_Schema = z
|
|
4
4
|
.strictObject({
|
|
5
|
-
operation: z
|
|
5
|
+
operation: z
|
|
6
|
+
.literal(OperationType.InsertAfter)
|
|
7
|
+
.describe('Must be exactly "insertAfter" (case-sensitive); insert newText immediately after the exact oldText anchor.'),
|
|
6
8
|
expectedLine: z.number().int().min(1).describe("The exact 1-based line in the original target content where oldText must begin."),
|
|
7
9
|
oldText: z
|
|
8
10
|
.string()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Operation_InsertAfter.js","sourceRoot":"","sources":["../../src/operation/Operation_InsertAfter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC;KAChD,YAAY,CAAC;IACb,SAAS,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"Operation_InsertAfter.js","sourceRoot":"","sources":["../../src/operation/Operation_InsertAfter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC;KAChD,YAAY,CAAC;IACb,SAAS,EAAE,CAAC;SACV,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC;SAClC,QAAQ,CAAC,4GAA4G,CAAC;IACxH,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iFAAiF,CAAC;IACjI,OAAO,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,4HAA4H,CAAC;IACxI,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;CACnF,CAAC;KACD,QAAQ,CAAC,oDAAoD,CAA4C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Operation_InsertBefore.d.ts","sourceRoot":"","sources":["../../src/operation/Operation_InsertBefore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,sBAAsB,GAAG;IACpC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,kCAAkC;;;;;
|
|
1
|
+
{"version":3,"file":"Operation_InsertBefore.d.ts","sourceRoot":"","sources":["../../src/operation/Operation_InsertBefore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,sBAAsB,GAAG;IACpC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,kCAAkC;;;;;kBAW8D,CAAC"}
|
|
@@ -2,7 +2,9 @@ import { OperationType } from "#src/operation/OperationType.js";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
export const PatchOperation_InsertBefore_Schema = z
|
|
4
4
|
.strictObject({
|
|
5
|
-
operation: z
|
|
5
|
+
operation: z
|
|
6
|
+
.literal(OperationType.InsertBefore)
|
|
7
|
+
.describe('Must be exactly "insertBefore" (case-sensitive); insert newText immediately before the exact oldText anchor.'),
|
|
6
8
|
expectedLine: z.number().int().min(1).describe("The exact 1-based line in the original target content where oldText must begin."),
|
|
7
9
|
oldText: z
|
|
8
10
|
.string()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Operation_InsertBefore.js","sourceRoot":"","sources":["../../src/operation/Operation_InsertBefore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC;KACjD,YAAY,CAAC;IACb,SAAS,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"Operation_InsertBefore.js","sourceRoot":"","sources":["../../src/operation/Operation_InsertBefore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC;KACjD,YAAY,CAAC;IACb,SAAS,EAAE,CAAC;SACV,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC;SACnC,QAAQ,CAAC,8GAA8G,CAAC;IAC1H,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iFAAiF,CAAC;IACjI,OAAO,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,4HAA4H,CAAC;IACxI,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;CACpF,CAAC;KACD,QAAQ,CAAC,qDAAqD,CAA6C,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { OperationType } from "#src/operation/OperationType.js";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
export const PatchOperation_Replace_Schema = z
|
|
4
4
|
.strictObject({
|
|
5
|
-
operation: z.literal(OperationType.Replace).describe("
|
|
5
|
+
operation: z.literal(OperationType.Replace).describe('Must be exactly "replace" (lowercase); replace the exact oldText anchor with newText.'),
|
|
6
6
|
expectedLine: z.number().int().min(1).describe("The exact 1-based line in the original target content where oldText must begin."),
|
|
7
7
|
oldText: z
|
|
8
8
|
.string()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Operation_Replace.js","sourceRoot":"","sources":["../../src/operation/Operation_Replace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC;KAC5C,YAAY,CAAC;IACb,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"Operation_Replace.js","sourceRoot":"","sources":["../../src/operation/Operation_Replace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC;KAC5C,YAAY,CAAC;IACb,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,uFAAuF,CAAC;IAC7I,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iFAAiF,CAAC;IACjI,OAAO,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,4HAA4H,CAAC;IACxI,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;CAClF,CAAC;KACD,QAAQ,CAAC,kDAAkD,CAAwC,CAAC"}
|
package/dist/target/Target.js
CHANGED
|
@@ -25,7 +25,7 @@ export class Target {
|
|
|
25
25
|
});
|
|
26
26
|
};
|
|
27
27
|
toSchema() {
|
|
28
|
-
const operationSchema = z.
|
|
28
|
+
const operationSchema = z.union([
|
|
29
29
|
PatchOperation_Replace_Schema,
|
|
30
30
|
PatchOperation_InsertBefore_Schema,
|
|
31
31
|
PatchOperation_InsertAfter_Schema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Target.js","sourceRoot":"","sources":["../../src/target/Target.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAE,iCAAiC,EAAE,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EAAE,kCAAkC,EAAE,MAAM,0CAA0C,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAa,MAAM,IAAI,CAAC;AACrC,OAAO,EAAE,CAAC,EAA+B,MAAM,KAAK,CAAC;AASrD,MAAM,OAAO,MAAM;IACT,OAAO,CAAU;IACjB,MAAM,CAAgB;IAE/B,YAAY,CAAgB;QAC3B,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,WAAW,GAAG,CAAC,OAAgB,EAAE,MAAsB,EAAE,EAAE;QACjE,OAAO,IAAI,MAAM,CAAC;YACjB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,MAAM,IAAI,aAAa,CAAC,IAAI;SACpC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,QAAQ;QACP,MAAM,eAAe,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"Target.js","sourceRoot":"","sources":["../../src/target/Target.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,8 @@ test("schema descriptions document target scope and exact atomic semantics", ()
|
|
|
66
66
|
assert.match(schema.description ?? "", /Atomically update this target only/);
|
|
67
67
|
assert.match(jsonSchema, /1-based line/);
|
|
68
68
|
assert.match(jsonSchema, /exact text anchor/);
|
|
69
|
-
assert.match(jsonSchema, /
|
|
69
|
+
assert.match(jsonSchema, /Must be exactly \\?"replace\\?" \(lowercase\)/);
|
|
70
|
+
assert.match(jsonSchema, /Must be exactly \\?"insertBefore\\?" \(case-sensitive\)/);
|
|
70
71
|
assert.match(jsonSchema, /original content coordinates/);
|
|
71
72
|
});
|
|
72
73
|
test("two target schemas compose as independent object properties", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Target.schema.test.js","sourceRoot":"","sources":["../../../src/target/test/Target.schema.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Target.schema.test.js","sourceRoot":"","sources":["../../../src/target/test/Target.schema.test.ts"],"names":[],"mappings":"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"}
|
package/docs/development.md
CHANGED
|
@@ -12,13 +12,15 @@ npm run build
|
|
|
12
12
|
npm run format:check
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
This repository is a library and has no development server
|
|
15
|
+
This repository is a library and has no development server. During development, run `npm run dev` in a terminal; it performs an initial build and automatically
|
|
16
|
+
rebuilds `dist/` whenever a source file changes. Stop the watcher with Ctrl+C.
|
|
16
17
|
|
|
17
18
|
## Package Scripts
|
|
18
19
|
|
|
19
20
|
- `npm test`: runs `src/target/test/*.test.ts` with Node's test runner and `tsx`.
|
|
20
21
|
- `npm run typecheck`: checks source and test TypeScript configurations without emitting output.
|
|
21
22
|
- `npm run build`: removes `dist/` and compiles JavaScript, declarations, and maps.
|
|
23
|
+
- `npm run dev`: watches source files and rebuilds `dist/` after each change.
|
|
22
24
|
- `npm run clean`: removes generated `dist/` output.
|
|
23
25
|
- `npm run format`: applies Prettier formatting.
|
|
24
26
|
- `npm run format:check`: verifies formatting without modifying files.
|
package/docs/publish.md
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@romandmitri/ai-patch",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"author": "Roman Eidenzon <romandmitri@gmail.com> (https://www.romandmitri.com)",
|
|
5
5
|
"description": "Validated, atomic text patches for precise AI and LLM edits to large text prompts/documents.",
|
|
6
6
|
"repository": {
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"scripts": {
|
|
44
44
|
"clean": "rimraf dist",
|
|
45
45
|
"build": "npm run clean && tsc",
|
|
46
|
+
"dev": "tsc --watch --preserveWatchOutput",
|
|
46
47
|
"format": "prettier --write .",
|
|
47
48
|
"format:check": "prettier --check .",
|
|
48
49
|
"test": "node --import tsx --test src/target/test/*.test.ts",
|