@infinite-room-labs/claudesync-core 0.4.1 → 0.6.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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/sync/__tests__/diff.test.js +44 -0
- package/dist/sync/__tests__/diff.test.js.map +1 -1
- package/dist/sync/__tests__/files-mode.test.d.ts +2 -0
- package/dist/sync/__tests__/files-mode.test.d.ts.map +1 -0
- package/dist/sync/__tests__/files-mode.test.js +219 -0
- package/dist/sync/__tests__/files-mode.test.js.map +1 -0
- package/dist/sync/__tests__/state.test.js +13 -0
- package/dist/sync/__tests__/state.test.js.map +1 -1
- package/dist/sync/diff.d.ts.map +1 -1
- package/dist/sync/diff.js +12 -2
- package/dist/sync/diff.js.map +1 -1
- package/dist/sync/files-mode.d.ts +65 -0
- package/dist/sync/files-mode.d.ts.map +1 -0
- package/dist/sync/files-mode.js +114 -0
- package/dist/sync/files-mode.js.map +1 -0
- package/dist/sync/incremental.d.ts +8 -0
- package/dist/sync/incremental.d.ts.map +1 -1
- package/dist/sync/incremental.js +20 -38
- package/dist/sync/incremental.js.map +1 -1
- package/dist/sync/state.d.ts +3 -0
- package/dist/sync/state.d.ts.map +1 -1
- package/dist/sync/state.js +5 -0
- package/dist/sync/state.js.map +1 -1
- package/dist/util/__tests__/glob.test.d.ts +2 -0
- package/dist/util/__tests__/glob.test.d.ts.map +1 -0
- package/dist/util/__tests__/glob.test.js +57 -0
- package/dist/util/__tests__/glob.test.js.map +1 -0
- package/dist/util/glob.d.ts +24 -0
- package/dist/util/glob.d.ts.map +1 -0
- package/dist/util/glob.js +94 -0
- package/dist/util/glob.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -24,5 +24,8 @@ export type { ExportFormat, SyncConversationOptions, SyncConversationResult, } f
|
|
|
24
24
|
export { syncConversation, isSameByListMetadata, } from "./sync/incremental.js";
|
|
25
25
|
export type { FetchAndBuildOptions, FetchAndBuildResult, } from "./sync/fetch.js";
|
|
26
26
|
export { fetchAndBuild } from "./sync/fetch.js";
|
|
27
|
+
export type { ReplaceWithPreserveOptions } from "./sync/files-mode.js";
|
|
28
|
+
export { replaceWithPreserve, walkRelative, expandPreserveForProject } from "./sync/files-mode.js";
|
|
27
29
|
export { slugify, safeSlug, displayName } from "./util/naming.js";
|
|
30
|
+
export { matchGlob, matchAnyGlob, compileGlob } from "./util/glob.js";
|
|
28
31
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,OAAO,EACP,UAAU,GACX,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpE,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAGxE,YAAY,EACV,SAAS,EACT,aAAa,EACb,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,OAAO,EACP,UAAU,GACX,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpE,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAGxE,YAAY,EACV,SAAS,EACT,aAAa,EACb,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGnG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,9 @@ export { diffConversation } from "./sync/diff.js";
|
|
|
16
16
|
export { CHANGELOG_FILENAME, renderChangelogSection, appendChangelog, } from "./sync/changelog.js";
|
|
17
17
|
export { syncConversation, isSameByListMetadata, } from "./sync/incremental.js";
|
|
18
18
|
export { fetchAndBuild } from "./sync/fetch.js";
|
|
19
|
+
export { replaceWithPreserve, walkRelative, expandPreserveForProject } from "./sync/files-mode.js";
|
|
19
20
|
// Naming helpers
|
|
20
21
|
export { slugify, safeSlug, displayName } from "./util/naming.js";
|
|
22
|
+
// Glob helpers
|
|
23
|
+
export { matchGlob, matchAnyGlob, compileGlob } from "./util/glob.js";
|
|
21
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,SAAS;AACT,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAoB7B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAQxE,OAAO,EACL,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,iBAAiB;AACjB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,SAAS;AACT,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAoB7B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAQxE,OAAO,EACL,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEnG,iBAAiB;AACjB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAElE,eAAe;AACf,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -50,6 +50,7 @@ describe("diffConversation", () => {
|
|
|
50
50
|
schema_version: 1,
|
|
51
51
|
conversation_uuid: "conv-1",
|
|
52
52
|
conversation_name: "c",
|
|
53
|
+
model: null,
|
|
53
54
|
updated_at: c.updated_at,
|
|
54
55
|
current_leaf_message_uuid: "b",
|
|
55
56
|
leaves: [{ uuid: "b", last_message_index: 1 }],
|
|
@@ -67,6 +68,7 @@ describe("diffConversation", () => {
|
|
|
67
68
|
schema_version: 1,
|
|
68
69
|
conversation_uuid: "conv-1",
|
|
69
70
|
conversation_name: "c",
|
|
71
|
+
model: null,
|
|
70
72
|
updated_at: "2026-04-30T13:50:01Z",
|
|
71
73
|
current_leaf_message_uuid: "b",
|
|
72
74
|
leaves: [{ uuid: "b", last_message_index: 1 }],
|
|
@@ -92,6 +94,7 @@ describe("diffConversation", () => {
|
|
|
92
94
|
schema_version: 1,
|
|
93
95
|
conversation_uuid: "conv-1",
|
|
94
96
|
conversation_name: "c",
|
|
97
|
+
model: null,
|
|
95
98
|
updated_at: "2026-04-30T13:50:01Z",
|
|
96
99
|
current_leaf_message_uuid: "b",
|
|
97
100
|
leaves: [{ uuid: "b", last_message_index: 1 }],
|
|
@@ -119,6 +122,7 @@ describe("diffConversation", () => {
|
|
|
119
122
|
schema_version: 1,
|
|
120
123
|
conversation_uuid: "conv-1",
|
|
121
124
|
conversation_name: "c",
|
|
125
|
+
model: null,
|
|
122
126
|
updated_at: "2026-04-30T13:50:00Z",
|
|
123
127
|
current_leaf_message_uuid: "a",
|
|
124
128
|
leaves: [{ uuid: "a", last_message_index: 0 }],
|
|
@@ -134,12 +138,52 @@ describe("diffConversation", () => {
|
|
|
134
138
|
expect(d.artifacts.changed.map((a) => a.path)).toEqual(["/mnt/user-data/outputs/changed.md"]);
|
|
135
139
|
expect(d.artifacts.removed.map((a) => a.path)).toEqual(["/mnt/user-data/outputs/gone.md"]);
|
|
136
140
|
});
|
|
141
|
+
it("detects model change when the previous model was persisted", () => {
|
|
142
|
+
const c = conv([msg("a", "00000000", 0)], "a"); // conv() model = claude-haiku-4-5
|
|
143
|
+
const prev = {
|
|
144
|
+
schema_version: 1,
|
|
145
|
+
conversation_uuid: "conv-1",
|
|
146
|
+
conversation_name: "c",
|
|
147
|
+
model: "claude-opus-4-7",
|
|
148
|
+
updated_at: "2026-04-30T13:50:00Z",
|
|
149
|
+
current_leaf_message_uuid: "a",
|
|
150
|
+
leaves: [{ uuid: "a", last_message_index: 0 }],
|
|
151
|
+
artifacts: [],
|
|
152
|
+
last_sync_at: "2026-04-30T13:55:00Z",
|
|
153
|
+
last_sync_action: "full",
|
|
154
|
+
};
|
|
155
|
+
const d = diffConversation(prev, c, noArtifacts);
|
|
156
|
+
expect(d.metadata.modelChanged).toEqual({
|
|
157
|
+
from: "claude-opus-4-7",
|
|
158
|
+
to: "claude-haiku-4-5",
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
it("does not report a model change when the previous model is absent (first sync post-upgrade)", () => {
|
|
162
|
+
const c = conv([msg("a", "00000000", 0)], "a");
|
|
163
|
+
const prev = {
|
|
164
|
+
schema_version: 1,
|
|
165
|
+
conversation_uuid: "conv-1",
|
|
166
|
+
conversation_name: "c",
|
|
167
|
+
// Legacy state file (no model on disk) reads back as model: null after
|
|
168
|
+
// the schema default is applied.
|
|
169
|
+
model: null,
|
|
170
|
+
updated_at: c.updated_at,
|
|
171
|
+
current_leaf_message_uuid: "a",
|
|
172
|
+
leaves: [{ uuid: "a", last_message_index: 0 }],
|
|
173
|
+
artifacts: [],
|
|
174
|
+
last_sync_at: "2026-04-30T13:55:00Z",
|
|
175
|
+
last_sync_action: "full",
|
|
176
|
+
};
|
|
177
|
+
const d = diffConversation(prev, c, noArtifacts);
|
|
178
|
+
expect(d.metadata.modelChanged).toBeUndefined();
|
|
179
|
+
});
|
|
137
180
|
it("detects rename in metadata", () => {
|
|
138
181
|
const c = conv([msg("a", "00000000", 0)], "a", "new name");
|
|
139
182
|
const prev = {
|
|
140
183
|
schema_version: 1,
|
|
141
184
|
conversation_uuid: "conv-1",
|
|
142
185
|
conversation_name: "old name",
|
|
186
|
+
model: null,
|
|
143
187
|
updated_at: "2026-04-30T13:50:00Z",
|
|
144
188
|
current_leaf_message_uuid: "a",
|
|
145
189
|
leaves: [{ uuid: "a", last_message_index: 0 }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.test.js","sourceRoot":"","sources":["../../../src/sync/__tests__/diff.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diff.test.js","sourceRoot":"","sources":["../../../src/sync/__tests__/diff.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files-mode.test.d.ts","sourceRoot":"","sources":["../../../src/sync/__tests__/files-mode.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { describe, expect, it, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { mkdtempSync, rmSync, writeFileSync, existsSync, readFileSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { replaceWithPreserve, walkRelative, expandPreserveForProject } from "../files-mode.js";
|
|
6
|
+
let workdir;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
workdir = mkdtempSync(join(tmpdir(), "claudesync-files-mode-"));
|
|
9
|
+
});
|
|
10
|
+
afterEach(() => {
|
|
11
|
+
rmSync(workdir, { recursive: true, force: true });
|
|
12
|
+
});
|
|
13
|
+
function writeFile(p, content) {
|
|
14
|
+
mkdirSync(join(workdir, p, ".."), { recursive: true });
|
|
15
|
+
writeFileSync(join(workdir, p), content, "utf-8");
|
|
16
|
+
}
|
|
17
|
+
describe("replaceWithPreserve", () => {
|
|
18
|
+
it("creates outputPath on first run (no stash to merge from)", async () => {
|
|
19
|
+
const outputPath = join(workdir, "convo");
|
|
20
|
+
await replaceWithPreserve({
|
|
21
|
+
outputPath,
|
|
22
|
+
writeFresh: async () => {
|
|
23
|
+
mkdirSync(outputPath, { recursive: true });
|
|
24
|
+
writeFileSync(join(outputPath, "conversation.md"), "fresh body", "utf-8");
|
|
25
|
+
},
|
|
26
|
+
alwaysPreserve: ["CHANGELOG.md"],
|
|
27
|
+
preserveGlobs: ["INDEX.md"],
|
|
28
|
+
});
|
|
29
|
+
expect(readFileSync(join(outputPath, "conversation.md"), "utf-8")).toBe("fresh body");
|
|
30
|
+
});
|
|
31
|
+
it("preserves alwaysPreserve files across re-sync", async () => {
|
|
32
|
+
const outputPath = join(workdir, "convo");
|
|
33
|
+
// Initial state.
|
|
34
|
+
mkdirSync(outputPath, { recursive: true });
|
|
35
|
+
writeFileSync(join(outputPath, "conversation.md"), "v1 body", "utf-8");
|
|
36
|
+
writeFileSync(join(outputPath, "CHANGELOG.md"), "## changelog v1\n", "utf-8");
|
|
37
|
+
// Re-sync rewrites the dir.
|
|
38
|
+
await replaceWithPreserve({
|
|
39
|
+
outputPath,
|
|
40
|
+
writeFresh: async () => {
|
|
41
|
+
mkdirSync(outputPath, { recursive: true });
|
|
42
|
+
writeFileSync(join(outputPath, "conversation.md"), "v2 body", "utf-8");
|
|
43
|
+
},
|
|
44
|
+
alwaysPreserve: ["CHANGELOG.md"],
|
|
45
|
+
});
|
|
46
|
+
expect(readFileSync(join(outputPath, "conversation.md"), "utf-8")).toBe("v2 body");
|
|
47
|
+
expect(readFileSync(join(outputPath, "CHANGELOG.md"), "utf-8")).toBe("## changelog v1\n");
|
|
48
|
+
});
|
|
49
|
+
it("preserves files matching preserveGlobs", async () => {
|
|
50
|
+
const outputPath = join(workdir, "convo");
|
|
51
|
+
mkdirSync(outputPath, { recursive: true });
|
|
52
|
+
writeFileSync(join(outputPath, "INDEX.md"), "indexer output\n", "utf-8");
|
|
53
|
+
writeFileSync(join(outputPath, "conversation.md"), "v1", "utf-8");
|
|
54
|
+
await replaceWithPreserve({
|
|
55
|
+
outputPath,
|
|
56
|
+
writeFresh: async () => {
|
|
57
|
+
mkdirSync(outputPath, { recursive: true });
|
|
58
|
+
writeFileSync(join(outputPath, "conversation.md"), "v2", "utf-8");
|
|
59
|
+
},
|
|
60
|
+
preserveGlobs: ["INDEX.md"],
|
|
61
|
+
});
|
|
62
|
+
expect(readFileSync(join(outputPath, "INDEX.md"), "utf-8")).toBe("indexer output\n");
|
|
63
|
+
expect(readFileSync(join(outputPath, "conversation.md"), "utf-8")).toBe("v2");
|
|
64
|
+
});
|
|
65
|
+
it("drops files matching alwaysDrop even if they match preserveGlobs", async () => {
|
|
66
|
+
const outputPath = join(workdir, "convo");
|
|
67
|
+
mkdirSync(outputPath, { recursive: true });
|
|
68
|
+
writeFileSync(join(outputPath, ".claudesync-state.json"), "{\"old\":true}", "utf-8");
|
|
69
|
+
writeFileSync(join(outputPath, "conversation.md"), "v1", "utf-8");
|
|
70
|
+
await replaceWithPreserve({
|
|
71
|
+
outputPath,
|
|
72
|
+
writeFresh: async () => {
|
|
73
|
+
mkdirSync(outputPath, { recursive: true });
|
|
74
|
+
writeFileSync(join(outputPath, "conversation.md"), "v2", "utf-8");
|
|
75
|
+
},
|
|
76
|
+
alwaysDrop: [".claudesync-state.json"],
|
|
77
|
+
preserveGlobs: ["**"], // even with greedy preserve, alwaysDrop wins
|
|
78
|
+
});
|
|
79
|
+
expect(existsSync(join(outputPath, ".claudesync-state.json"))).toBe(false);
|
|
80
|
+
});
|
|
81
|
+
it("preserves nested files matching ** globs", async () => {
|
|
82
|
+
const outputPath = join(workdir, "project");
|
|
83
|
+
mkdirSync(join(outputPath, "conversations/foo"), { recursive: true });
|
|
84
|
+
writeFileSync(join(outputPath, "conversations/foo/INDEX.md"), "nested index\n", "utf-8");
|
|
85
|
+
writeFileSync(join(outputPath, "README.md"), "v1", "utf-8");
|
|
86
|
+
await replaceWithPreserve({
|
|
87
|
+
outputPath,
|
|
88
|
+
writeFresh: async () => {
|
|
89
|
+
mkdirSync(join(outputPath, "conversations/foo"), { recursive: true });
|
|
90
|
+
writeFileSync(join(outputPath, "README.md"), "v2", "utf-8");
|
|
91
|
+
writeFileSync(join(outputPath, "conversations/foo/conversation.md"), "v2", "utf-8");
|
|
92
|
+
},
|
|
93
|
+
preserveGlobs: ["**/INDEX.md"],
|
|
94
|
+
});
|
|
95
|
+
expect(readFileSync(join(outputPath, "conversations/foo/INDEX.md"), "utf-8")).toBe("nested index\n");
|
|
96
|
+
expect(readFileSync(join(outputPath, "README.md"), "utf-8")).toBe("v2");
|
|
97
|
+
});
|
|
98
|
+
it("does not clobber when the bundle wrote the same relative path", async () => {
|
|
99
|
+
const outputPath = join(workdir, "convo");
|
|
100
|
+
mkdirSync(outputPath, { recursive: true });
|
|
101
|
+
writeFileSync(join(outputPath, "conversation.md"), "stash version", "utf-8");
|
|
102
|
+
await replaceWithPreserve({
|
|
103
|
+
outputPath,
|
|
104
|
+
writeFresh: async () => {
|
|
105
|
+
mkdirSync(outputPath, { recursive: true });
|
|
106
|
+
writeFileSync(join(outputPath, "conversation.md"), "bundle version", "utf-8");
|
|
107
|
+
},
|
|
108
|
+
preserveGlobs: ["conversation.md"], // user mis-glob; bundle should win
|
|
109
|
+
});
|
|
110
|
+
expect(readFileSync(join(outputPath, "conversation.md"), "utf-8")).toBe("bundle version");
|
|
111
|
+
});
|
|
112
|
+
it("restores the stash on writeFresh failure", async () => {
|
|
113
|
+
const outputPath = join(workdir, "convo");
|
|
114
|
+
mkdirSync(outputPath, { recursive: true });
|
|
115
|
+
writeFileSync(join(outputPath, "conversation.md"), "original", "utf-8");
|
|
116
|
+
await expect(replaceWithPreserve({
|
|
117
|
+
outputPath,
|
|
118
|
+
writeFresh: async () => {
|
|
119
|
+
throw new Error("boom");
|
|
120
|
+
},
|
|
121
|
+
})).rejects.toThrow("boom");
|
|
122
|
+
expect(readFileSync(join(outputPath, "conversation.md"), "utf-8")).toBe("original");
|
|
123
|
+
expect(existsSync(outputPath + ".prev")).toBe(false);
|
|
124
|
+
});
|
|
125
|
+
it("removes stale stash directory before renaming", async () => {
|
|
126
|
+
const outputPath = join(workdir, "convo");
|
|
127
|
+
mkdirSync(outputPath, { recursive: true });
|
|
128
|
+
writeFileSync(join(outputPath, "conversation.md"), "v1", "utf-8");
|
|
129
|
+
// Pre-existing stash from a previously-crashed run.
|
|
130
|
+
const staleStash = outputPath + ".prev";
|
|
131
|
+
mkdirSync(staleStash, { recursive: true });
|
|
132
|
+
writeFileSync(join(staleStash, "junk.md"), "leftover", "utf-8");
|
|
133
|
+
await replaceWithPreserve({
|
|
134
|
+
outputPath,
|
|
135
|
+
writeFresh: async () => {
|
|
136
|
+
mkdirSync(outputPath, { recursive: true });
|
|
137
|
+
writeFileSync(join(outputPath, "conversation.md"), "v2", "utf-8");
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
expect(readFileSync(join(outputPath, "conversation.md"), "utf-8")).toBe("v2");
|
|
141
|
+
expect(existsSync(staleStash)).toBe(false);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe("expandPreserveForProject", () => {
|
|
145
|
+
it("adds a nested-depth variant for each user pattern", () => {
|
|
146
|
+
expect(expandPreserveForProject(["INDEX.md"])).toEqual([
|
|
147
|
+
"INDEX.md",
|
|
148
|
+
"**/INDEX.md",
|
|
149
|
+
]);
|
|
150
|
+
});
|
|
151
|
+
it("expands multiple patterns, preserving order", () => {
|
|
152
|
+
expect(expandPreserveForProject(["INDEX.md", "notes/**"])).toEqual([
|
|
153
|
+
"INDEX.md",
|
|
154
|
+
"**/INDEX.md",
|
|
155
|
+
"notes/**",
|
|
156
|
+
"**/notes/**",
|
|
157
|
+
]);
|
|
158
|
+
});
|
|
159
|
+
it("returns empty for empty input", () => {
|
|
160
|
+
expect(expandPreserveForProject([])).toEqual([]);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe("project bundle preserve (regression: nested INDEX.md clobber)", () => {
|
|
164
|
+
// Reproduces the exact failure: a project export rewrites the project dir
|
|
165
|
+
// from scratch; project-nested conversation INDEX.md files must survive a
|
|
166
|
+
// bare `--preserve INDEX.md` because writeProjectBundle expands the globs.
|
|
167
|
+
async function runProjectResync(preserveGlobs) {
|
|
168
|
+
const outputPath = join(workdir, "project");
|
|
169
|
+
// Pre-existing, locally-added files that must survive the re-sync.
|
|
170
|
+
mkdirSync(join(outputPath, "conversations/foo/notes"), { recursive: true });
|
|
171
|
+
writeFileSync(join(outputPath, "INDEX.md"), "project aggregate\n", "utf-8");
|
|
172
|
+
writeFileSync(join(outputPath, "conversations/foo/INDEX.md"), "nested index\n", "utf-8");
|
|
173
|
+
writeFileSync(join(outputPath, "conversations/foo/notes/scratch.md"), "my notes\n", "utf-8");
|
|
174
|
+
writeFileSync(join(outputPath, "conversations/foo/conversation.md"), "v1", "utf-8");
|
|
175
|
+
await replaceWithPreserve({
|
|
176
|
+
outputPath,
|
|
177
|
+
// Fresh bundle: project README + the conversation's fresh files only.
|
|
178
|
+
writeFresh: async () => {
|
|
179
|
+
mkdirSync(join(outputPath, "conversations/foo"), { recursive: true });
|
|
180
|
+
writeFileSync(join(outputPath, "README.md"), "project readme\n", "utf-8");
|
|
181
|
+
writeFileSync(join(outputPath, "conversations/foo/conversation.md"), "v2", "utf-8");
|
|
182
|
+
writeFileSync(join(outputPath, "conversations/foo/README.md"), "conv readme\n", "utf-8");
|
|
183
|
+
},
|
|
184
|
+
alwaysPreserve: ["CHANGELOG.md"],
|
|
185
|
+
preserveGlobs,
|
|
186
|
+
});
|
|
187
|
+
return outputPath;
|
|
188
|
+
}
|
|
189
|
+
it("BUG witness: bare 'INDEX.md' drops the nested INDEX.md", async () => {
|
|
190
|
+
const out = await runProjectResync(["INDEX.md"]);
|
|
191
|
+
// Project-root INDEX.md is preserved (matches relative to output dir)...
|
|
192
|
+
expect(existsSync(join(out, "INDEX.md"))).toBe(true);
|
|
193
|
+
// ...but the nested one is lost without expansion. This is the bug.
|
|
194
|
+
expect(existsSync(join(out, "conversations/foo/INDEX.md"))).toBe(false);
|
|
195
|
+
});
|
|
196
|
+
it("expanded globs preserve nested INDEX.md, root INDEX.md, and notes/**", async () => {
|
|
197
|
+
const out = await runProjectResync(expandPreserveForProject(["INDEX.md", "notes/**"]));
|
|
198
|
+
// Locally-added files survive at every depth.
|
|
199
|
+
expect(readFileSync(join(out, "INDEX.md"), "utf-8")).toBe("project aggregate\n");
|
|
200
|
+
expect(readFileSync(join(out, "conversations/foo/INDEX.md"), "utf-8")).toBe("nested index\n");
|
|
201
|
+
expect(readFileSync(join(out, "conversations/foo/notes/scratch.md"), "utf-8")).toBe("my notes\n");
|
|
202
|
+
// Fresh bundle files win over any stash collision (bundle-wins rule intact).
|
|
203
|
+
expect(readFileSync(join(out, "conversations/foo/conversation.md"), "utf-8")).toBe("v2");
|
|
204
|
+
expect(readFileSync(join(out, "README.md"), "utf-8")).toBe("project readme\n");
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
describe("walkRelative", () => {
|
|
208
|
+
it("yields all file paths with POSIX separators", () => {
|
|
209
|
+
writeFile("a.md", "1");
|
|
210
|
+
writeFile("nested/b.md", "2");
|
|
211
|
+
writeFile("nested/deep/c.md", "3");
|
|
212
|
+
const paths = [...walkRelative(workdir)].sort();
|
|
213
|
+
expect(paths).toEqual(["a.md", "nested/b.md", "nested/deep/c.md"]);
|
|
214
|
+
});
|
|
215
|
+
it("returns empty for nonexistent root", () => {
|
|
216
|
+
expect([...walkRelative(join(workdir, "missing"))]).toEqual([]);
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
//# sourceMappingURL=files-mode.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files-mode.test.js","sourceRoot":"","sources":["../../../src/sync/__tests__/files-mode.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE/F,IAAI,OAAe,CAAC;AAEpB,UAAU,CAAC,GAAG,EAAE;IACd,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,SAAS,SAAS,CAAC,CAAS,EAAE,OAAe;IAC3C,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,mBAAmB,CAAC;YACxB,UAAU;YACV,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;YAC5E,CAAC;YACD,cAAc,EAAE,CAAC,cAAc,CAAC;YAChC,aAAa,EAAE,CAAC,UAAU,CAAC;SAC5B,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,iBAAiB;QACjB,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACvE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAC9E,4BAA4B;QAC5B,MAAM,mBAAmB,CAAC;YACxB,UAAU;YACV,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACzE,CAAC;YACD,cAAc,EAAE,CAAC,cAAc,CAAC;SACjC,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACzE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAElE,MAAM,mBAAmB,CAAC;YACxB,UAAU;YACV,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC;YACD,aAAa,EAAE,CAAC,UAAU,CAAC;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACrF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACrF,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAElE,MAAM,mBAAmB,CAAC;YACxB,UAAU;YACV,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC;YACD,UAAU,EAAE,CAAC,wBAAwB,CAAC;YACtC,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,6CAA6C;SACrE,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC5C,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,4BAA4B,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACzF,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE5D,MAAM,mBAAmB,CAAC;YACxB,UAAU;YACV,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC5D,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,mCAAmC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACtF,CAAC;YACD,aAAa,EAAE,CAAC,aAAa,CAAC;SAC/B,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,4BAA4B,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAChF,gBAAgB,CACjB,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QAE7E,MAAM,mBAAmB,CAAC;YACxB,UAAU;YACV,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAChF,CAAC;YACD,aAAa,EAAE,CAAC,iBAAiB,CAAC,EAAE,mCAAmC;SACxE,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAExE,MAAM,MAAM,CACV,mBAAmB,CAAC;YAClB,UAAU;YACV,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;SACF,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE1B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpF,MAAM,CAAC,UAAU,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAClE,oDAAoD;QACpD,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;QACxC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAEhE,MAAM,mBAAmB,CAAC;YACxB,UAAU;YACV,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,wBAAwB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACrD,UAAU;YACV,aAAa;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,wBAAwB,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACjE,UAAU;YACV,aAAa;YACb,UAAU;YACV,aAAa;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;IAC7E,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,KAAK,UAAU,gBAAgB,CAAC,aAAgC;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC5C,mEAAmE;QACnE,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,yBAAyB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAC5E,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,4BAA4B,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACzF,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,oCAAoC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAC7F,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,mCAAmC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEpF,MAAM,mBAAmB,CAAC;YACxB,UAAU;YACV,sEAAsE;YACtE,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;gBAC1E,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,mCAAmC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBACpF,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,6BAA6B,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YAC3F,CAAC;YACD,cAAc,EAAE,CAAC,cAAc,CAAC;YAChC,aAAa;SACd,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACjD,yEAAyE;QACzE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,oEAAoE;QACpE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAChC,wBAAwB,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CACnD,CAAC;QACF,8CAA8C;QAC9C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACjF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,4BAA4B,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9F,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,oCAAoC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClG,6EAA6E;QAC7E,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,mCAAmC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACvB,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC9B,SAAS,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -9,6 +9,7 @@ function sample() {
|
|
|
9
9
|
schema_version: 1,
|
|
10
10
|
conversation_uuid: "conv-1",
|
|
11
11
|
conversation_name: "test",
|
|
12
|
+
model: "claude-opus-4-7",
|
|
12
13
|
updated_at: "2026-04-30T13:55:03.195890Z",
|
|
13
14
|
current_leaf_message_uuid: "leaf-1",
|
|
14
15
|
leaves: [{ uuid: "leaf-1", last_message_index: 13 }],
|
|
@@ -45,6 +46,18 @@ describe("sync state", () => {
|
|
|
45
46
|
fs.writeFileSync(path.join(dir, STATE_FILENAME), "{not json", "utf-8");
|
|
46
47
|
expect(() => readSyncState(dir)).toThrow();
|
|
47
48
|
});
|
|
49
|
+
it("defaults model to null when reading a pre-model state file", () => {
|
|
50
|
+
// Old state files (written before the model field existed) omit it.
|
|
51
|
+
const { model: _omit, ...legacy } = sample();
|
|
52
|
+
fs.writeFileSync(path.join(dir, STATE_FILENAME), JSON.stringify(legacy), "utf-8");
|
|
53
|
+
const loaded = readSyncState(dir);
|
|
54
|
+
expect(loaded?.model).toBeNull();
|
|
55
|
+
});
|
|
56
|
+
it("round-trips a null model", () => {
|
|
57
|
+
const s = { ...sample(), model: null };
|
|
58
|
+
writeSyncState(dir, s);
|
|
59
|
+
expect(readSyncState(dir)).toEqual(s);
|
|
60
|
+
});
|
|
48
61
|
it("rejects state with wrong schema version", () => {
|
|
49
62
|
fs.writeFileSync(path.join(dir, STATE_FILENAME), JSON.stringify({ ...sample(), schema_version: 99 }), "utf-8");
|
|
50
63
|
expect(() => readSyncState(dir)).toThrow();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.test.js","sourceRoot":"","sources":["../../../src/sync/__tests__/state.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state.test.js","sourceRoot":"","sources":["../../../src/sync/__tests__/state.test.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/sync/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACX,YAAY,EACb,MAAM,oBAAoB,CAAC;AAM5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,MAAM,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;IACf,sEAAsE;IACtE,cAAc,EAAE,OAAO,CAAC;IACxB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1G,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/D;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAC3D;AAED,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,oBAAoB,GAC9B,gBAAgB,
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/sync/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACX,YAAY,EACb,MAAM,oBAAoB,CAAC;AAM5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,MAAM,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;IACf,sEAAsE;IACtE,cAAc,EAAE,OAAO,CAAC;IACxB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1G,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/D;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAC3D;AAED,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,oBAAoB,GAC9B,gBAAgB,CAqIlB"}
|
package/dist/sync/diff.js
CHANGED
|
@@ -110,8 +110,18 @@ export function diffConversation(prevState, conversation, artifacts) {
|
|
|
110
110
|
to: conversation.name,
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
|
-
//
|
|
114
|
-
//
|
|
113
|
+
// Model change: only detectable once the previous model was persisted to
|
|
114
|
+
// state (added alongside this code). Older state files have model === null/
|
|
115
|
+
// undefined; treat a missing prev model as "unknown" and only report a change
|
|
116
|
+
// when both sides are known and differ, so a first sync after the upgrade
|
|
117
|
+
// doesn't spuriously announce a model change.
|
|
118
|
+
if (prevState) {
|
|
119
|
+
const prevModel = prevState.model ?? null;
|
|
120
|
+
const curModel = conversation.model ?? null;
|
|
121
|
+
if (prevModel !== null && prevModel !== curModel) {
|
|
122
|
+
metadata.modelChanged = { from: prevModel, to: curModel };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
115
125
|
const isInitial = prevState === undefined;
|
|
116
126
|
const isUnchanged = !isInitial &&
|
|
117
127
|
branches.every((b) => !b.isNew && !b.hasNewMessages) &&
|
package/dist/sync/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/sync/diff.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/sync/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stash-and-rebuild file-writing primitive shared between conversation and
|
|
3
|
+
* project export paths.
|
|
4
|
+
*
|
|
5
|
+
* Both code paths produce a fresh, claudesync-canonical directory tree on
|
|
6
|
+
* every re-sync. Without explicit rescue, anything the user added locally
|
|
7
|
+
* (INDEX.md from a downstream indexer, hand-written notes, etc.) would be
|
|
8
|
+
* wiped on every run.
|
|
9
|
+
*
|
|
10
|
+
* This helper:
|
|
11
|
+
* 1. Renames the existing outputPath to a `<outputPath>.prev` stash.
|
|
12
|
+
* 2. Runs the caller-supplied `writeFresh` to populate a clean outputPath.
|
|
13
|
+
* 3. Walks the stash and copies back files that either equal an entry in
|
|
14
|
+
* `alwaysPreserve` or match any glob in `preserveGlobs`.
|
|
15
|
+
* 4. Removes the stash on success, restores it on failure.
|
|
16
|
+
*
|
|
17
|
+
* Copies are non-destructive: if writeFresh already produced a file at the
|
|
18
|
+
* same relative path, the bundle wins and the stash copy is skipped. This
|
|
19
|
+
* protects against a user pattern accidentally clobbering conversation.md
|
|
20
|
+
* or README.md.
|
|
21
|
+
*/
|
|
22
|
+
export interface ReplaceWithPreserveOptions {
|
|
23
|
+
/** Final destination directory. May or may not exist. */
|
|
24
|
+
outputPath: string;
|
|
25
|
+
/** Callback that populates `outputPath` from scratch. Must create the dir. */
|
|
26
|
+
writeFresh: () => Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Files preserved by exact relative-path match. CHANGELOG.md is the
|
|
29
|
+
* canonical example; the changelog is appended to by the sync.
|
|
30
|
+
*/
|
|
31
|
+
alwaysPreserve?: readonly string[];
|
|
32
|
+
/**
|
|
33
|
+
* Files dropped by exact relative-path match, even if they would otherwise
|
|
34
|
+
* match `preserveGlobs`. `.claudesync-state.json` is the canonical example;
|
|
35
|
+
* the caller rewrites it after this returns.
|
|
36
|
+
*/
|
|
37
|
+
alwaysDrop?: readonly string[];
|
|
38
|
+
/**
|
|
39
|
+
* Glob patterns (POSIX) of locally-added files to preserve. Matched against
|
|
40
|
+
* paths relative to `outputPath`. See `util/glob.ts` for syntax.
|
|
41
|
+
*/
|
|
42
|
+
preserveGlobs?: readonly string[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Expand user `--preserve` globs for the project-bundle scope.
|
|
46
|
+
*
|
|
47
|
+
* `replaceWithPreserve` matches globs relative to the output dir. For a project
|
|
48
|
+
* export the output dir is the project root, but conversation files are nested
|
|
49
|
+
* under `conversations/<slug>/`, so a bare pattern like `INDEX.md` only matches
|
|
50
|
+
* the project-root file and silently drops every nested conversation's
|
|
51
|
+
* `INDEX.md`. The CLI documents `--preserve` as "relative to each conversation
|
|
52
|
+
* dir", so each pattern must also apply at any nested depth.
|
|
53
|
+
*
|
|
54
|
+
* For every user pattern `p` we add a globstar-prefixed variant. The matcher
|
|
55
|
+
* compiles a leading globstar+slash to an OPTIONAL leading-segments group (see
|
|
56
|
+
* util/glob.ts), so the prefixed form already covers both the project root and
|
|
57
|
+
* any nesting depth; we keep the original `p` too for clarity.
|
|
58
|
+
*
|
|
59
|
+
* Example: ["INDEX.md"] -> ["INDEX.md", "(globstar)/INDEX.md"].
|
|
60
|
+
*/
|
|
61
|
+
export declare function expandPreserveForProject(globs: readonly string[]): string[];
|
|
62
|
+
export declare function replaceWithPreserve(opts: ReplaceWithPreserveOptions): Promise<void>;
|
|
63
|
+
/** Yield every file path under root, as POSIX-separated paths relative to root. */
|
|
64
|
+
export declare function walkRelative(root: string): Generator<string>;
|
|
65
|
+
//# sourceMappingURL=files-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files-mode.d.ts","sourceRoot":"","sources":["../../src/sync/files-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,MAAM,WAAW,0BAA0B;IACzC,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC;;;OAGG;IACH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B;;;OAGG;IACH,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,MAAM,EAAE,CAEV;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,IAAI,CAAC,CAmCf;AAyBD,mFAAmF;AACnF,wBAAiB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAoB7D"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stash-and-rebuild file-writing primitive shared between conversation and
|
|
3
|
+
* project export paths.
|
|
4
|
+
*
|
|
5
|
+
* Both code paths produce a fresh, claudesync-canonical directory tree on
|
|
6
|
+
* every re-sync. Without explicit rescue, anything the user added locally
|
|
7
|
+
* (INDEX.md from a downstream indexer, hand-written notes, etc.) would be
|
|
8
|
+
* wiped on every run.
|
|
9
|
+
*
|
|
10
|
+
* This helper:
|
|
11
|
+
* 1. Renames the existing outputPath to a `<outputPath>.prev` stash.
|
|
12
|
+
* 2. Runs the caller-supplied `writeFresh` to populate a clean outputPath.
|
|
13
|
+
* 3. Walks the stash and copies back files that either equal an entry in
|
|
14
|
+
* `alwaysPreserve` or match any glob in `preserveGlobs`.
|
|
15
|
+
* 4. Removes the stash on success, restores it on failure.
|
|
16
|
+
*
|
|
17
|
+
* Copies are non-destructive: if writeFresh already produced a file at the
|
|
18
|
+
* same relative path, the bundle wins and the stash copy is skipped. This
|
|
19
|
+
* protects against a user pattern accidentally clobbering conversation.md
|
|
20
|
+
* or README.md.
|
|
21
|
+
*/
|
|
22
|
+
import fs from "node:fs";
|
|
23
|
+
import path from "node:path";
|
|
24
|
+
import { matchAnyGlob } from "../util/glob.js";
|
|
25
|
+
/**
|
|
26
|
+
* Expand user `--preserve` globs for the project-bundle scope.
|
|
27
|
+
*
|
|
28
|
+
* `replaceWithPreserve` matches globs relative to the output dir. For a project
|
|
29
|
+
* export the output dir is the project root, but conversation files are nested
|
|
30
|
+
* under `conversations/<slug>/`, so a bare pattern like `INDEX.md` only matches
|
|
31
|
+
* the project-root file and silently drops every nested conversation's
|
|
32
|
+
* `INDEX.md`. The CLI documents `--preserve` as "relative to each conversation
|
|
33
|
+
* dir", so each pattern must also apply at any nested depth.
|
|
34
|
+
*
|
|
35
|
+
* For every user pattern `p` we add a globstar-prefixed variant. The matcher
|
|
36
|
+
* compiles a leading globstar+slash to an OPTIONAL leading-segments group (see
|
|
37
|
+
* util/glob.ts), so the prefixed form already covers both the project root and
|
|
38
|
+
* any nesting depth; we keep the original `p` too for clarity.
|
|
39
|
+
*
|
|
40
|
+
* Example: ["INDEX.md"] -> ["INDEX.md", "(globstar)/INDEX.md"].
|
|
41
|
+
*/
|
|
42
|
+
export function expandPreserveForProject(globs) {
|
|
43
|
+
return globs.flatMap((p) => [p, `**/${p}`]);
|
|
44
|
+
}
|
|
45
|
+
export async function replaceWithPreserve(opts) {
|
|
46
|
+
const { outputPath, writeFresh, alwaysPreserve = [], alwaysDrop = [], preserveGlobs = [], } = opts;
|
|
47
|
+
const stash = outputPath + ".prev";
|
|
48
|
+
const isUpdate = fs.existsSync(outputPath);
|
|
49
|
+
if (isUpdate) {
|
|
50
|
+
if (fs.existsSync(stash)) {
|
|
51
|
+
fs.rmSync(stash, { recursive: true, force: true });
|
|
52
|
+
}
|
|
53
|
+
fs.renameSync(outputPath, stash);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
await writeFresh();
|
|
57
|
+
if (isUpdate) {
|
|
58
|
+
restoreFromStash(stash, outputPath, alwaysPreserve, alwaysDrop, preserveGlobs);
|
|
59
|
+
fs.rmSync(stash, { recursive: true, force: true });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (isUpdate) {
|
|
64
|
+
if (fs.existsSync(outputPath)) {
|
|
65
|
+
fs.rmSync(outputPath, { recursive: true, force: true });
|
|
66
|
+
}
|
|
67
|
+
if (fs.existsSync(stash)) {
|
|
68
|
+
fs.renameSync(stash, outputPath);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function restoreFromStash(stash, outputPath, alwaysPreserve, alwaysDrop, preserveGlobs) {
|
|
75
|
+
const dropSet = new Set(alwaysDrop);
|
|
76
|
+
const preserveSet = new Set(alwaysPreserve);
|
|
77
|
+
for (const rel of walkRelative(stash)) {
|
|
78
|
+
if (dropSet.has(rel))
|
|
79
|
+
continue;
|
|
80
|
+
const shouldPreserve = preserveSet.has(rel) || matchAnyGlob(rel, preserveGlobs);
|
|
81
|
+
if (!shouldPreserve)
|
|
82
|
+
continue;
|
|
83
|
+
const dest = path.join(outputPath, rel);
|
|
84
|
+
if (fs.existsSync(dest))
|
|
85
|
+
continue; // bundle wins
|
|
86
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
87
|
+
fs.copyFileSync(path.join(stash, rel), dest);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/** Yield every file path under root, as POSIX-separated paths relative to root. */
|
|
91
|
+
export function* walkRelative(root) {
|
|
92
|
+
const stack = [""];
|
|
93
|
+
while (stack.length > 0) {
|
|
94
|
+
const rel = stack.pop();
|
|
95
|
+
const abs = rel === "" ? root : path.join(root, rel);
|
|
96
|
+
let entries;
|
|
97
|
+
try {
|
|
98
|
+
entries = fs.readdirSync(abs, { withFileTypes: true });
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
for (const entry of entries) {
|
|
104
|
+
const childRel = rel === "" ? entry.name : `${rel}/${entry.name}`;
|
|
105
|
+
if (entry.isDirectory()) {
|
|
106
|
+
stack.push(childRel);
|
|
107
|
+
}
|
|
108
|
+
else if (entry.isFile() || entry.isSymbolicLink()) {
|
|
109
|
+
yield childRel;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=files-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files-mode.js","sourceRoot":"","sources":["../../src/sync/files-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,14 @@ export interface SyncConversationOptions {
|
|
|
12
12
|
skipExisting?: boolean;
|
|
13
13
|
/** Don't fetch artifacts. */
|
|
14
14
|
skipArtifacts?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Glob patterns (POSIX-style) of locally-added files inside the
|
|
17
|
+
* conversation directory that must survive a re-sync in `files` mode.
|
|
18
|
+
* Matched against paths relative to the conversation directory. The
|
|
19
|
+
* CHANGELOG.md sidecar is always preserved regardless of this list.
|
|
20
|
+
* Examples: ["INDEX.md", "notes/**", "*.local.md"].
|
|
21
|
+
*/
|
|
22
|
+
preserve?: string[];
|
|
15
23
|
}
|
|
16
24
|
export interface SyncConversationResult {
|
|
17
25
|
action: "skipped" | "skipped-existing" | "full" | "incremental";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"incremental.d.ts","sourceRoot":"","sources":["../../src/sync/incremental.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAGV,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"incremental.d.ts","sourceRoot":"","sources":["../../src/sync/incremental.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAGV,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AAMpB,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,SAAS,GAAG,kBAAkB,GAAG,MAAM,GAAG,aAAa,CAAC;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,0FAA0F;IAC1F,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,2BAA2B,CAAC,EAC9E,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,OAAO,CAMT;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,mBAAmB,EAC5B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAmGjC"}
|
package/dist/sync/incremental.js
CHANGED
|
@@ -8,6 +8,7 @@ import { readSyncState, writeSyncState, STATE_FILENAME, } from "./state.js";
|
|
|
8
8
|
import { buildMessageTree, findLeafMessages } from "../tree/message-tree.js";
|
|
9
9
|
import { fetchAndBuild } from "./fetch.js";
|
|
10
10
|
import { displayName as toDisplayName } from "../util/naming.js";
|
|
11
|
+
import { replaceWithPreserve } from "./files-mode.js";
|
|
11
12
|
/**
|
|
12
13
|
* Cheap predicate for --skip-same. Returns true when the list-endpoint summary
|
|
13
14
|
* matches what the sidecar state file recorded on the previous sync. Caller
|
|
@@ -97,7 +98,7 @@ export async function syncConversation(client, orgId, summary, outputPath, optio
|
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
else {
|
|
100
|
-
await writeFilesMode(bundle, outputPath);
|
|
101
|
+
await writeFilesMode(bundle, outputPath, options.preserve ?? []);
|
|
101
102
|
}
|
|
102
103
|
let changelogWritten = false;
|
|
103
104
|
const section = renderChangelogSection(diff, new Date());
|
|
@@ -118,44 +119,24 @@ export async function syncConversation(client, orgId, summary, outputPath, optio
|
|
|
118
119
|
/**
|
|
119
120
|
* Files mode: replay bundle into outputPath via the same tmp+swap pattern as
|
|
120
121
|
* exportToGit, but strip .git at the end.
|
|
122
|
+
*
|
|
123
|
+
* Preservation: every re-sync rebuilds the directory from scratch. Files that
|
|
124
|
+
* the user (or a downstream tool) added locally would be wiped without
|
|
125
|
+
* explicit rescue. We always preserve `CHANGELOG.md` (appended to by the
|
|
126
|
+
* sync), drop the prior `.claudesync-state.json` (rewritten by the caller),
|
|
127
|
+
* and copy back anything else in the stash matching the `preserve` glob list.
|
|
121
128
|
*/
|
|
122
|
-
async function writeFilesMode(bundle, outputPath) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
try {
|
|
134
|
-
await exportToGit(bundle, outputPath);
|
|
135
|
-
rmSync(path.join(outputPath, ".git"), { recursive: true, force: true });
|
|
136
|
-
// Preserve CHANGELOG.md from the previous tree (we'll append to it after).
|
|
137
|
-
if (isUpdate && fs.existsSync(path.join(stash, CHANGELOG_FILENAME))) {
|
|
138
|
-
fs.copyFileSync(path.join(stash, CHANGELOG_FILENAME), path.join(outputPath, CHANGELOG_FILENAME));
|
|
139
|
-
}
|
|
140
|
-
if (isUpdate && fs.existsSync(path.join(stash, STATE_FILENAME))) {
|
|
141
|
-
// State file gets rewritten by caller; nothing to preserve.
|
|
142
|
-
}
|
|
143
|
-
if (isUpdate) {
|
|
144
|
-
fs.rmSync(stash, { recursive: true, force: true });
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
// Restore original on failure.
|
|
149
|
-
if (isUpdate) {
|
|
150
|
-
if (fs.existsSync(outputPath)) {
|
|
151
|
-
fs.rmSync(outputPath, { recursive: true, force: true });
|
|
152
|
-
}
|
|
153
|
-
if (fs.existsSync(stash)) {
|
|
154
|
-
fs.renameSync(stash, outputPath);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
throw error;
|
|
158
|
-
}
|
|
129
|
+
async function writeFilesMode(bundle, outputPath, preserve) {
|
|
130
|
+
await replaceWithPreserve({
|
|
131
|
+
outputPath,
|
|
132
|
+
writeFresh: async () => {
|
|
133
|
+
await exportToGit(bundle, outputPath);
|
|
134
|
+
rmSync(path.join(outputPath, ".git"), { recursive: true, force: true });
|
|
135
|
+
},
|
|
136
|
+
alwaysPreserve: [CHANGELOG_FILENAME],
|
|
137
|
+
alwaysDrop: [STATE_FILENAME],
|
|
138
|
+
preserveGlobs: preserve,
|
|
139
|
+
});
|
|
159
140
|
}
|
|
160
141
|
function ensureGitignore(repoDir) {
|
|
161
142
|
const gitignorePath = path.join(repoDir, ".gitignore");
|
|
@@ -182,6 +163,7 @@ function writeStateFile(dir, summary, conversation, artifacts, action) {
|
|
|
182
163
|
schema_version: 1,
|
|
183
164
|
conversation_uuid: conversation.uuid,
|
|
184
165
|
conversation_name: conversation.name,
|
|
166
|
+
model: conversation.model ?? null,
|
|
185
167
|
updated_at: summary.updated_at,
|
|
186
168
|
current_leaf_message_uuid: conversation.current_leaf_message_uuid ?? null,
|
|
187
169
|
leaves,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"incremental.js","sourceRoot":"","sources":["../../src/sync/incremental.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAOjC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,GAEf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"incremental.js","sourceRoot":"","sources":["../../src/sync/incremental.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/state.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export declare const SyncStateSchema: z.ZodObject<{
|
|
|
27
27
|
schema_version: z.ZodLiteral<1>;
|
|
28
28
|
conversation_uuid: z.ZodString;
|
|
29
29
|
conversation_name: z.ZodString;
|
|
30
|
+
model: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
30
31
|
updated_at: z.ZodString;
|
|
31
32
|
current_leaf_message_uuid: z.ZodNullable<z.ZodString>;
|
|
32
33
|
leaves: z.ZodArray<z.ZodObject<{
|
|
@@ -56,6 +57,7 @@ export declare const SyncStateSchema: z.ZodObject<{
|
|
|
56
57
|
last_sync_action: z.ZodEnum<["full", "incremental", "skipped"]>;
|
|
57
58
|
}, "strip", z.ZodTypeAny, {
|
|
58
59
|
updated_at: string;
|
|
60
|
+
model: string | null;
|
|
59
61
|
current_leaf_message_uuid: string | null;
|
|
60
62
|
conversation_uuid: string;
|
|
61
63
|
schema_version: 1;
|
|
@@ -88,6 +90,7 @@ export declare const SyncStateSchema: z.ZodObject<{
|
|
|
88
90
|
}[];
|
|
89
91
|
last_sync_at: string;
|
|
90
92
|
last_sync_action: "full" | "incremental" | "skipped";
|
|
93
|
+
model?: string | null | undefined;
|
|
91
94
|
}>;
|
|
92
95
|
export type SyncState = z.infer<typeof SyncStateSchema>;
|
|
93
96
|
export type SyncStateLeaf = z.infer<typeof SyncStateLeafSchema>;
|
package/dist/sync/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/sync/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc,2BAA2B,CAAC;AAEvD,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAC;AAEH,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/sync/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc,2BAA2B,CAAC;AAEvD,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAQhE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAMlE"}
|
package/dist/sync/state.js
CHANGED
|
@@ -15,6 +15,11 @@ export const SyncStateSchema = z.object({
|
|
|
15
15
|
schema_version: z.literal(1),
|
|
16
16
|
conversation_uuid: z.string(),
|
|
17
17
|
conversation_name: z.string(),
|
|
18
|
+
// Conversation model (e.g. "claude-opus-4-7"). Nullable+optional+default so
|
|
19
|
+
// state files written before this field existed still parse; enables the
|
|
20
|
+
// "Model changed" changelog diff across syncs. Not a schema_version bump:
|
|
21
|
+
// the addition is backward compatible.
|
|
22
|
+
model: z.string().nullable().optional().default(null),
|
|
18
23
|
updated_at: z.string(),
|
|
19
24
|
current_leaf_message_uuid: z.string().nullable(),
|
|
20
25
|
leaves: z.array(SyncStateLeafSchema),
|
package/dist/sync/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/sync/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAEvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACpC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC3C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;CAC7D,CAAC,CAAC;AAMH;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,KAAgB;IAC1D,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1E,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/sync/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAEvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,uCAAuC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACrD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACpC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC3C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;CAC7D,CAAC,CAAC;AAMH;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,KAAgB;IAC1D,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1E,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.test.d.ts","sourceRoot":"","sources":["../../../src/util/__tests__/glob.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { matchGlob, matchAnyGlob } from "../glob.js";
|
|
3
|
+
describe("matchGlob", () => {
|
|
4
|
+
it("matches literal filenames", () => {
|
|
5
|
+
expect(matchGlob("INDEX.md", "INDEX.md")).toBe(true);
|
|
6
|
+
expect(matchGlob("README.md", "INDEX.md")).toBe(false);
|
|
7
|
+
});
|
|
8
|
+
it("matches single * within a segment", () => {
|
|
9
|
+
expect(matchGlob("foo.md", "*.md")).toBe(true);
|
|
10
|
+
expect(matchGlob("foo.txt", "*.md")).toBe(false);
|
|
11
|
+
expect(matchGlob("notes/foo.md", "*.md")).toBe(false); // * does not cross /
|
|
12
|
+
});
|
|
13
|
+
it("matches ** across path segments", () => {
|
|
14
|
+
expect(matchGlob("notes/foo.md", "notes/**")).toBe(true);
|
|
15
|
+
expect(matchGlob("notes/nested/deep.md", "notes/**")).toBe(true);
|
|
16
|
+
expect(matchGlob("notes/", "notes/**")).toBe(true);
|
|
17
|
+
expect(matchGlob("other/foo.md", "notes/**")).toBe(false);
|
|
18
|
+
});
|
|
19
|
+
it("**/ collapses zero or more path segments", () => {
|
|
20
|
+
expect(matchGlob("INDEX.md", "**/INDEX.md")).toBe(true);
|
|
21
|
+
expect(matchGlob("a/INDEX.md", "**/INDEX.md")).toBe(true);
|
|
22
|
+
expect(matchGlob("a/b/c/INDEX.md", "**/INDEX.md")).toBe(true);
|
|
23
|
+
expect(matchGlob("INDEX.txt", "**/INDEX.md")).toBe(false);
|
|
24
|
+
});
|
|
25
|
+
it("? matches exactly one non-slash char", () => {
|
|
26
|
+
expect(matchGlob("foo.md", "fo?.md")).toBe(true);
|
|
27
|
+
expect(matchGlob("foo.md", "f??.md")).toBe(true);
|
|
28
|
+
expect(matchGlob("fo.md", "fo?.md")).toBe(false);
|
|
29
|
+
expect(matchGlob("fo/o.md", "fo?o.md")).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
it("character classes work", () => {
|
|
32
|
+
expect(matchGlob("a.md", "[ab].md")).toBe(true);
|
|
33
|
+
expect(matchGlob("b.md", "[ab].md")).toBe(true);
|
|
34
|
+
expect(matchGlob("c.md", "[ab].md")).toBe(false);
|
|
35
|
+
});
|
|
36
|
+
it("normalizes leading ./ and backslashes", () => {
|
|
37
|
+
expect(matchGlob("./INDEX.md", "INDEX.md")).toBe(true);
|
|
38
|
+
expect(matchGlob("notes\\foo.md", "notes/foo.md")).toBe(true);
|
|
39
|
+
});
|
|
40
|
+
it("escapes regex metacharacters in literal segments", () => {
|
|
41
|
+
expect(matchGlob("a.b+c.md", "a.b+c.md")).toBe(true);
|
|
42
|
+
expect(matchGlob("axb+c.md", "a.b+c.md")).toBe(false); // . is literal, not regex any-char
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe("matchAnyGlob", () => {
|
|
46
|
+
it("returns true when any pattern matches", () => {
|
|
47
|
+
expect(matchAnyGlob("INDEX.md", ["README.md", "INDEX.md"])).toBe(true);
|
|
48
|
+
expect(matchAnyGlob("notes/x.md", ["INDEX.md", "notes/**"])).toBe(true);
|
|
49
|
+
});
|
|
50
|
+
it("returns false when no pattern matches", () => {
|
|
51
|
+
expect(matchAnyGlob("foo.txt", ["INDEX.md", "*.md"])).toBe(false);
|
|
52
|
+
});
|
|
53
|
+
it("returns false on empty pattern list", () => {
|
|
54
|
+
expect(matchAnyGlob("INDEX.md", [])).toBe(false);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=glob.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.test.js","sourceRoot":"","sources":["../../../src/util/__tests__/glob.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal POSIX-style glob matcher for relative paths.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* * -- any sequence of non-slash chars
|
|
6
|
+
* ** -- any sequence including slashes
|
|
7
|
+
* ? -- single non-slash char
|
|
8
|
+
* [abc] -- character class
|
|
9
|
+
* literal segments
|
|
10
|
+
*
|
|
11
|
+
* Paths are normalized to forward slashes before matching. Patterns must use
|
|
12
|
+
* forward slashes regardless of platform. Leading `./` is stripped.
|
|
13
|
+
*
|
|
14
|
+
* No brace expansion ({a,b}) and no extglob -- if you need those, swap in
|
|
15
|
+
* minimatch. This helper exists so core can ship zero-dep glob matching for
|
|
16
|
+
* the --preserve flag without dragging in a 30KB dependency.
|
|
17
|
+
*/
|
|
18
|
+
/** Compile a pattern once for repeated matching. */
|
|
19
|
+
export declare function compileGlob(pattern: string): (subject: string) => boolean;
|
|
20
|
+
/** Match a relative path against a single pattern. Convenience wrapper. */
|
|
21
|
+
export declare function matchGlob(subject: string, pattern: string): boolean;
|
|
22
|
+
/** True if any pattern matches. Compiles each pattern once per call. */
|
|
23
|
+
export declare function matchAnyGlob(subject: string, patterns: readonly string[]): boolean;
|
|
24
|
+
//# sourceMappingURL=glob.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/util/glob.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA0DH,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAMzE;AAED,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAMlF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal POSIX-style glob matcher for relative paths.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* * -- any sequence of non-slash chars
|
|
6
|
+
* ** -- any sequence including slashes
|
|
7
|
+
* ? -- single non-slash char
|
|
8
|
+
* [abc] -- character class
|
|
9
|
+
* literal segments
|
|
10
|
+
*
|
|
11
|
+
* Paths are normalized to forward slashes before matching. Patterns must use
|
|
12
|
+
* forward slashes regardless of platform. Leading `./` is stripped.
|
|
13
|
+
*
|
|
14
|
+
* No brace expansion ({a,b}) and no extglob -- if you need those, swap in
|
|
15
|
+
* minimatch. This helper exists so core can ship zero-dep glob matching for
|
|
16
|
+
* the --preserve flag without dragging in a 30KB dependency.
|
|
17
|
+
*/
|
|
18
|
+
function globToRegExp(pattern) {
|
|
19
|
+
// Normalize: strip leading ./ and any duplicate slashes.
|
|
20
|
+
const norm = pattern.replace(/^\.\//, "").replace(/\/+/g, "/");
|
|
21
|
+
let re = "^";
|
|
22
|
+
let i = 0;
|
|
23
|
+
while (i < norm.length) {
|
|
24
|
+
const ch = norm[i];
|
|
25
|
+
if (ch === "*") {
|
|
26
|
+
if (norm[i + 1] === "*") {
|
|
27
|
+
// ** -> match anything including /
|
|
28
|
+
// **/ -> match zero or more path segments (consume the trailing /)
|
|
29
|
+
if (norm[i + 2] === "/") {
|
|
30
|
+
re += "(?:.*/)?";
|
|
31
|
+
i += 3;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
re += ".*";
|
|
35
|
+
i += 2;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
// single * -> any sequence of non-/ chars
|
|
39
|
+
re += "[^/]*";
|
|
40
|
+
i += 1;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (ch === "?") {
|
|
44
|
+
re += "[^/]";
|
|
45
|
+
i += 1;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (ch === "[") {
|
|
49
|
+
// copy character class verbatim until matching ]
|
|
50
|
+
const close = norm.indexOf("]", i + 1);
|
|
51
|
+
if (close === -1) {
|
|
52
|
+
// unterminated class -- treat as literal [
|
|
53
|
+
re += "\\[";
|
|
54
|
+
i += 1;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
re += norm.slice(i, close + 1);
|
|
58
|
+
i = close + 1;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Escape regex metachars; keep slashes literal.
|
|
62
|
+
if (/[.+^${}()|\\]/.test(ch)) {
|
|
63
|
+
re += "\\" + ch;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
re += ch;
|
|
67
|
+
}
|
|
68
|
+
i += 1;
|
|
69
|
+
}
|
|
70
|
+
re += "$";
|
|
71
|
+
return new RegExp(re);
|
|
72
|
+
}
|
|
73
|
+
/** Compile a pattern once for repeated matching. */
|
|
74
|
+
export function compileGlob(pattern) {
|
|
75
|
+
const rx = globToRegExp(pattern);
|
|
76
|
+
return (subject) => {
|
|
77
|
+
const norm = subject.replace(/\\/g, "/").replace(/^\.\//, "");
|
|
78
|
+
return rx.test(norm);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** Match a relative path against a single pattern. Convenience wrapper. */
|
|
82
|
+
export function matchGlob(subject, pattern) {
|
|
83
|
+
return compileGlob(pattern)(subject);
|
|
84
|
+
}
|
|
85
|
+
/** True if any pattern matches. Compiles each pattern once per call. */
|
|
86
|
+
export function matchAnyGlob(subject, patterns) {
|
|
87
|
+
const norm = subject.replace(/\\/g, "/").replace(/^\.\//, "");
|
|
88
|
+
for (const p of patterns) {
|
|
89
|
+
if (globToRegExp(p).test(norm))
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=glob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/util/glob.ts"],"names":[],"mappings":"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"}
|