@wirecat/drive-cli 0.2.0 → 0.4.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 +9 -8
- package/dist/api-contract.d.ts.map +1 -1
- package/dist/api-contract.js +4 -2
- package/dist/api-contract.js.map +1 -1
- package/dist/bin/drive.js +16 -20
- package/dist/bin/drive.js.map +1 -1
- package/dist/catalog-commands.d.ts +13 -0
- package/dist/catalog-commands.d.ts.map +1 -0
- package/dist/catalog-commands.js +111 -0
- package/dist/catalog-commands.js.map +1 -0
- package/dist/catalog.d.ts +43 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +107 -0
- package/dist/catalog.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -3
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +13 -5
- package/dist/errors.js.map +1 -1
- package/dist/extraction.d.ts +1 -1
- package/dist/extraction.d.ts.map +1 -1
- package/dist/extraction.js +9 -5
- package/dist/extraction.js.map +1 -1
- package/dist/failure.d.ts +65 -0
- package/dist/failure.d.ts.map +1 -0
- package/dist/failure.js +86 -0
- package/dist/failure.js.map +1 -0
- package/dist/google-api.d.ts.map +1 -1
- package/dist/google-api.js +3 -1
- package/dist/google-api.js.map +1 -1
- package/dist/google.d.ts +5 -0
- package/dist/google.d.ts.map +1 -1
- package/dist/google.js +80 -12
- package/dist/google.js.map +1 -1
- package/dist/knowledge-commands.d.ts.map +1 -1
- package/dist/knowledge-commands.js +150 -113
- package/dist/knowledge-commands.js.map +1 -1
- package/dist/knowledge.d.ts +2 -2
- package/dist/knowledge.d.ts.map +1 -1
- package/dist/knowledge.js +11 -5
- package/dist/knowledge.js.map +1 -1
- package/dist/login.d.ts +1 -1
- package/dist/login.d.ts.map +1 -1
- package/dist/login.js +11 -5
- package/dist/login.js.map +1 -1
- package/dist/mcp.d.ts +22 -4
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +7 -15
- package/dist/mcp.js.map +1 -1
- package/dist/model.d.ts +67 -11
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +17 -0
- package/dist/model.js.map +1 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +11 -4
- package/dist/policy.js.map +1 -1
- package/dist/profile-lock.d.ts.map +1 -1
- package/dist/profile-lock.js +4 -2
- package/dist/profile-lock.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +191 -152
- package/dist/program.js.map +1 -1
- package/dist/registry.d.ts +7 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +28 -2
- package/dist/registry.js.map +1 -1
- package/dist/remote-commands.d.ts.map +1 -1
- package/dist/remote-commands.js +95 -76
- package/dist/remote-commands.js.map +1 -1
- package/dist/scope.d.ts +3 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +15 -0
- package/dist/scope.js.map +1 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +27 -6
- package/dist/state.js.map +1 -1
- package/dist/store.d.ts +4 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +90 -10
- package/dist/store.js.map +1 -1
- package/dist/sync.d.ts +6 -2
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +121 -52
- package/dist/sync.js.map +1 -1
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +8 -4
- package/dist/tokens.js.map +1 -1
- package/package.json +7 -4
package/dist/state.js
CHANGED
|
@@ -15,11 +15,20 @@ const File = v.object({
|
|
|
15
15
|
url: v.string(),
|
|
16
16
|
trashed: v.boolean(),
|
|
17
17
|
canDownload: v.boolean(),
|
|
18
|
+
size: v.optional(v.number()),
|
|
18
19
|
createdAt: v.optional(v.string()),
|
|
19
20
|
description: v.optional(v.string()),
|
|
20
21
|
driveId: v.optional(v.string()),
|
|
21
22
|
owners: v.optional(v.array(User)),
|
|
22
23
|
lastModifiedBy: v.optional(User),
|
|
24
|
+
providerMetadata: v.optional(v.unknown()),
|
|
25
|
+
});
|
|
26
|
+
const Skip = v.object({
|
|
27
|
+
id: ID,
|
|
28
|
+
reason: v.string(),
|
|
29
|
+
file: v.optional(File),
|
|
30
|
+
textLimit: v.optional(v.number()),
|
|
31
|
+
storeRefusedIn: v.optional(v.string()),
|
|
23
32
|
});
|
|
24
33
|
const State = v.object({
|
|
25
34
|
version: v.literal(1),
|
|
@@ -27,15 +36,21 @@ const State = v.object({
|
|
|
27
36
|
scope: v.string(),
|
|
28
37
|
cursor: v.optional(v.string()),
|
|
29
38
|
folders: v.record(ID, File),
|
|
30
|
-
documents: v.record(ID, v.object({
|
|
31
|
-
|
|
39
|
+
documents: v.record(ID, v.object({
|
|
40
|
+
metadata: File,
|
|
41
|
+
hash: v.string(),
|
|
42
|
+
reference: v.string(),
|
|
43
|
+
tabs: v.number(),
|
|
44
|
+
notRead: v.optional(v.string()),
|
|
45
|
+
})),
|
|
46
|
+
skipped: v.array(Skip),
|
|
32
47
|
lastSync: v.optional(v.string()),
|
|
33
48
|
pending: v.optional(v.object({
|
|
34
49
|
cursor: v.string(),
|
|
35
50
|
scope: v.string(),
|
|
36
51
|
folders: v.record(ID, File),
|
|
37
52
|
jobs: v.array(v.object({ id: ID, kind: v.picklist(["save", "remove"]), file: v.optional(File) })),
|
|
38
|
-
skipped: v.array(
|
|
53
|
+
skipped: v.array(Skip),
|
|
39
54
|
})),
|
|
40
55
|
});
|
|
41
56
|
export const profileDir = (env, name) => join(paths(env).state, "profiles", profileName(name));
|
|
@@ -48,11 +63,15 @@ export const readState = (env, name, principal) => {
|
|
|
48
63
|
catch (error) {
|
|
49
64
|
if (error.code === "ENOENT")
|
|
50
65
|
return { version: 1, principal, scope: "", folders: {}, documents: {}, skipped: [] };
|
|
51
|
-
throw new CliError("configuration_error", "sync state is unreadable; refusing to reset its checkpoint"
|
|
66
|
+
throw new CliError("configuration_error", "sync state is unreadable; refusing to reset its checkpoint", {
|
|
67
|
+
reason: "state.invalid",
|
|
68
|
+
});
|
|
52
69
|
}
|
|
53
70
|
const parsed = v.safeParse(State, value);
|
|
54
71
|
if (!parsed.success || parsed.output.principal !== principal)
|
|
55
|
-
throw new CliError("configuration_error", "sync state is invalid or belongs to another Google account"
|
|
72
|
+
throw new CliError("configuration_error", "sync state is invalid or belongs to another Google account", {
|
|
73
|
+
reason: "state.invalid",
|
|
74
|
+
});
|
|
56
75
|
return parsed.output;
|
|
57
76
|
};
|
|
58
77
|
export const saveState = (env, name, state) => {
|
|
@@ -84,7 +103,9 @@ export const readSnapshot = (env, name, id) => {
|
|
|
84
103
|
return JSON.parse(readFileSync(snapshotPath(env, name, id), "utf8"));
|
|
85
104
|
}
|
|
86
105
|
catch {
|
|
87
|
-
throw new CliError("not_found", "source snapshot is unavailable — run drive sync"
|
|
106
|
+
throw new CliError("not_found", "source snapshot is unavailable — run drive sync", {
|
|
107
|
+
reason: "state.snapshot-missing",
|
|
108
|
+
});
|
|
88
109
|
}
|
|
89
110
|
};
|
|
90
111
|
//# sourceMappingURL=state.js.map
|
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGxD,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAA;AAChE,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;AAClH,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;IACpB,EAAE,EAAE,EAAE;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;IACpB,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;IACxB,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import type { MessageStore } from "@wirecat/cli-
|
|
1
|
+
import type { MessageStore } from "@wirecat/cli-core/store";
|
|
2
2
|
import type { DocumentIndex } from "./model.js";
|
|
3
3
|
export declare const openIndex: (env: NodeJS.ProcessEnv) => Promise<DocumentIndex>;
|
|
4
|
-
|
|
4
|
+
type PictureEmbedder = Awaited<ReturnType<typeof import("@wirecat/cli-core/services")["openPictureEmbedderFor"]>>;
|
|
5
|
+
export declare const indexOver: (store: MessageStore, env: NodeJS.ProcessEnv, pictureEmbedder?: PictureEmbedder) => DocumentIndex;
|
|
6
|
+
export {};
|
|
5
7
|
//# sourceMappingURL=store.d.ts.map
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAQ,MAAM,yBAAyB,CAAA;AAIjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,eAAO,MAAM,SAAS,QAAe,MAAM,CAAC,UAAU,KAAG,OAAO,CAAC,aAAa,CAM7E,CAAA;AACD,KAAK,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,4BAA4B,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAA;AACjH,eAAO,MAAM,SAAS,UACb,YAAY,OACd,MAAM,CAAC,UAAU,oBACJ,eAAe,KAChC,aAgMF,CAAA"}
|
package/dist/store.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { CliError } from "@wirecat/cli-base";
|
|
3
|
+
import { walkQuery } from "@wirecat/cli-base/query";
|
|
4
|
+
import { catalogInput } from "./catalog.js";
|
|
3
5
|
import { paths } from "./config.js";
|
|
4
6
|
import { documentKnowledge, saveContributors } from "./knowledge.js";
|
|
5
7
|
export const openIndex = async (env) => {
|
|
6
|
-
const { ensureSqlite } = await import("@wirecat/cli-
|
|
8
|
+
const { ensureSqlite } = await import("@wirecat/cli-core/sqlite-runtime");
|
|
7
9
|
await ensureSqlite();
|
|
8
|
-
const { openStore } = await import("@wirecat/cli-
|
|
9
|
-
const store = await openStore({ path: env.DRIVE_STORE ?? join(paths(env).state, "drive.db"), env, command: "
|
|
10
|
+
const { openStore } = await import("@wirecat/cli-core/store");
|
|
11
|
+
const store = await openStore({ path: env.DRIVE_STORE ?? join(paths(env).state, "drive.db"), env, command: "tg" });
|
|
10
12
|
return indexOver(store, env);
|
|
11
13
|
};
|
|
12
|
-
export const indexOver = (store, env) => {
|
|
14
|
+
export const indexOver = (store, env, pictureEmbedder) => {
|
|
13
15
|
const folder = async (principal, create) => {
|
|
14
16
|
const name = `google-drive:${principal}`;
|
|
15
17
|
const found = (await store.notes.folders()).find((item) => item.name === name);
|
|
@@ -51,6 +53,47 @@ export const indexOver = (store, env) => {
|
|
|
51
53
|
}
|
|
52
54
|
};
|
|
53
55
|
return {
|
|
56
|
+
catalog: {
|
|
57
|
+
import: async (principal, files) => {
|
|
58
|
+
if (files.length > 10000)
|
|
59
|
+
throw new CliError("validation_error", "catalog scope exceeds 10000 entries", {
|
|
60
|
+
reason: "catalog.scope-limit",
|
|
61
|
+
});
|
|
62
|
+
const selected = await folder(principal, true);
|
|
63
|
+
if (!selected)
|
|
64
|
+
throw new CliError("configuration_error", "catalog collection could not be registered");
|
|
65
|
+
for (let start = 0; start < files.length; start += 200) {
|
|
66
|
+
await store.catalog.upsert(selected.id, files.slice(start, start + 200).map(catalogInput));
|
|
67
|
+
}
|
|
68
|
+
for (const file of files) {
|
|
69
|
+
const entry = await store.catalog.get(selected.id, `${file.id}.md`);
|
|
70
|
+
if (entry)
|
|
71
|
+
await saveContributors(store, principal, file, entry.ref.slice("document:".length));
|
|
72
|
+
}
|
|
73
|
+
const retired = await store.catalog.reconcile(selected.id, files.map((file) => `${file.id}.md`));
|
|
74
|
+
documents.delete(principal);
|
|
75
|
+
return { entries: files.length, retired };
|
|
76
|
+
},
|
|
77
|
+
get: async (principal, id) => {
|
|
78
|
+
const selected = await folder(principal, false);
|
|
79
|
+
return selected ? store.catalog.get(selected.id, `${id}.md`) : undefined;
|
|
80
|
+
},
|
|
81
|
+
list: async (principal, query = {}) => {
|
|
82
|
+
const selected = await folder(principal, false);
|
|
83
|
+
const ast = query.ast ? structuredClone(query.ast) : undefined;
|
|
84
|
+
if (ast)
|
|
85
|
+
for (const node of walkQuery(ast.root))
|
|
86
|
+
if (node.field === "parent")
|
|
87
|
+
node.value = `${node.value}.md`;
|
|
88
|
+
return selected
|
|
89
|
+
? store.catalog.list(selected.id, {
|
|
90
|
+
...query,
|
|
91
|
+
...(ast ? { ast } : {}),
|
|
92
|
+
...(query.parent === undefined ? {} : { parent: `${query.parent}.md` }),
|
|
93
|
+
})
|
|
94
|
+
: { items: [], hasMore: false };
|
|
95
|
+
},
|
|
96
|
+
},
|
|
54
97
|
knowledge: documentKnowledge(store, async (principal) => (await folder(principal, false))?.id),
|
|
55
98
|
save: async (principal, content, hash) => {
|
|
56
99
|
const selected = await folder(principal, true);
|
|
@@ -71,13 +114,17 @@ export const indexOver = (store, env) => {
|
|
|
71
114
|
source: "google-drive",
|
|
72
115
|
sourceUrl: content.metadata.url,
|
|
73
116
|
fileId: content.metadata.id,
|
|
117
|
+
mime: content.metadata.mime,
|
|
118
|
+
size: content.metadata.size ?? null,
|
|
74
119
|
owners: content.metadata.owners ?? [],
|
|
75
120
|
lastModifiedBy: content.metadata.lastModifiedBy ?? null,
|
|
76
121
|
modifiedAt: content.metadata.modifiedAt ?? null,
|
|
77
122
|
sourceVersion: content.metadata.version ?? null,
|
|
78
123
|
tabs: content.tabs.map(({ id, title }) => ({ id, title })),
|
|
124
|
+
...(content.notRead ? { notRead: content.notRead } : {}),
|
|
79
125
|
},
|
|
80
126
|
});
|
|
127
|
+
await store.catalog.upsert(selected.id, [catalogInput(content.metadata)]);
|
|
81
128
|
await saveContributors(store, principal, content.metadata, note.id);
|
|
82
129
|
notes.set(path, note);
|
|
83
130
|
return note.ref;
|
|
@@ -88,12 +135,22 @@ export const indexOver = (store, env) => {
|
|
|
88
135
|
const notes = await cached(principal);
|
|
89
136
|
const path = `${id}.md`;
|
|
90
137
|
const note = notes.get(path);
|
|
91
|
-
|
|
92
|
-
|
|
138
|
+
const retired = note ? undefined : await store.catalog.get(selected.id, path, true);
|
|
139
|
+
const ref = note?.ref ?? retired?.ref;
|
|
140
|
+
if (ref)
|
|
141
|
+
await stale(ref);
|
|
93
142
|
await store.notes.deleteFileNotes(selected.id, [path]);
|
|
94
143
|
notes.delete(path);
|
|
95
144
|
}
|
|
96
145
|
},
|
|
146
|
+
openPictures: async () => {
|
|
147
|
+
const { openPictureEmbedderFor, savePicture } = await import("@wirecat/cli-core/services");
|
|
148
|
+
const embedder = pictureEmbedder ?? (await openPictureEmbedderFor({ env, command: "tg" }));
|
|
149
|
+
return {
|
|
150
|
+
save: (reference, bytes) => savePicture(store, { ref: reference }, bytes, { embedder }),
|
|
151
|
+
close: () => (pictureEmbedder ? Promise.resolve() : embedder.close()),
|
|
152
|
+
};
|
|
153
|
+
},
|
|
97
154
|
search: async (principal, query, options) => {
|
|
98
155
|
const selected = await folder(principal, false);
|
|
99
156
|
if (!selected)
|
|
@@ -105,28 +162,51 @@ export const indexOver = (store, env) => {
|
|
|
105
162
|
hasMore: false,
|
|
106
163
|
meaningSkipped: "this Google account has no imported sources",
|
|
107
164
|
};
|
|
108
|
-
const { searchNotes } = await import("@wirecat/cli-
|
|
165
|
+
const { searchNotes } = await import("@wirecat/cli-core/services");
|
|
109
166
|
const result = await searchNotes(store, query, {
|
|
110
167
|
...options,
|
|
111
168
|
folderIds: selected ? [selected.id] : [],
|
|
112
169
|
env,
|
|
113
170
|
command: "tg",
|
|
171
|
+
...(pictureEmbedder ? { pictureEmbedder } : {}),
|
|
114
172
|
});
|
|
173
|
+
const pictures = await Promise.all((result.pictures ?? []).map(async (picture) => {
|
|
174
|
+
const note = await store.notes.note(picture.ref);
|
|
175
|
+
const metadata = note.frontMatter;
|
|
176
|
+
return {
|
|
177
|
+
...picture,
|
|
178
|
+
title: note.title,
|
|
179
|
+
source_url: typeof metadata?.sourceUrl === "string" ? metadata.sourceUrl : null,
|
|
180
|
+
};
|
|
181
|
+
}));
|
|
182
|
+
const { pictures: _, picturesSkipped, ...rest } = result;
|
|
115
183
|
return {
|
|
116
|
-
...
|
|
184
|
+
...rest,
|
|
185
|
+
...(result.pictures ? { pictures } : {}),
|
|
186
|
+
...(picturesSkipped ? { pictures_skipped: picturesSkipped } : {}),
|
|
117
187
|
hits: await Promise.all(result.hits.map(async (hit) => {
|
|
118
188
|
const note = await store.notes.note(hit.ref);
|
|
119
189
|
const metadata = note.frontMatter;
|
|
190
|
+
const entry = note.path ? await store.catalog.get(selected.id, note.path) : undefined;
|
|
120
191
|
return {
|
|
121
192
|
...hit,
|
|
122
|
-
|
|
193
|
+
source_url: typeof metadata?.sourceUrl === "string" ? metadata.sourceUrl : null,
|
|
123
194
|
tabs: Array.isArray(metadata?.tabs) ? metadata.tabs : [],
|
|
195
|
+
kind: entry?.kind ?? "file",
|
|
196
|
+
content: entry?.content ?? "indexed",
|
|
197
|
+
not_read: typeof metadata?.notRead === "string"
|
|
198
|
+
? metadata.notRead
|
|
199
|
+
: entry?.content === "metadata"
|
|
200
|
+
? entry.kind === "folder"
|
|
201
|
+
? "folder metadata only"
|
|
202
|
+
: "content is not indexed yet"
|
|
203
|
+
: null,
|
|
124
204
|
};
|
|
125
205
|
})),
|
|
126
206
|
};
|
|
127
207
|
},
|
|
128
208
|
embed: async (max) => {
|
|
129
|
-
const { embedNotes } = await import("@wirecat/cli-
|
|
209
|
+
const { embedNotes } = await import("@wirecat/cli-core/services");
|
|
130
210
|
return embedNotes(store, { maxChunks: max, env, command: "tg" });
|
|
131
211
|
},
|
|
132
212
|
close: () => store.close(),
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/sync.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { type DocumentIndex, type
|
|
2
|
-
export
|
|
1
|
+
import { type DocumentIndex, type GoogleSource } from "./model.js";
|
|
2
|
+
export { within } from "./scope.js";
|
|
3
3
|
export interface SyncResult {
|
|
4
4
|
saved: number;
|
|
5
|
+
names_only: number;
|
|
5
6
|
removed: number;
|
|
6
7
|
unchanged: number;
|
|
8
|
+
pictures?: number;
|
|
9
|
+
pictures_too_large?: number;
|
|
10
|
+
pictures_skipped?: string;
|
|
7
11
|
pending: number;
|
|
8
12
|
skipped: {
|
|
9
13
|
id: string;
|
package/dist/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,aAAa,EAGlB,KAAK,YAAY,EAMlB,MAAM,YAAY,CAAA;AA+BnB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AA+HnC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACvD,QAAQ,EAAE,MAAM,CAAA;CACjB;AACD,eAAO,MAAM,IAAI,WACP,YAAY,GAAG,SAAS,SACzB,aAAa,OACf,MAAM,CAAC,UAAU,QAChB,MAAM,OACP,MAAM,WACF,WAAW,uBAEnB,OAAO,CAAC,UAAU,CA4JpB,CAAA"}
|
package/dist/sync.js
CHANGED
|
@@ -1,29 +1,36 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { CliError } from "@wirecat/cli-base";
|
|
3
|
-
import {
|
|
2
|
+
import { CliError, isCliError } from "@wirecat/cli-base";
|
|
3
|
+
import { catalogFiles } from "./catalog.js";
|
|
4
|
+
import { activeProfile, textLimit } from "./config.js";
|
|
4
5
|
import { googleError } from "./errors.js";
|
|
5
|
-
import { supported } from "./google.js";
|
|
6
|
+
import { MAX_ENTRIES, supported, tooManyEntries } from "./google.js";
|
|
6
7
|
import { FOLDER, } from "./model.js";
|
|
7
8
|
import { lockProfile } from "./profile-lock.js";
|
|
9
|
+
import { within } from "./scope.js";
|
|
8
10
|
import { readState, removeSnapshot, saveSnapshot, saveState } from "./state.js";
|
|
11
|
+
import { VERSION } from "./version.js";
|
|
9
12
|
const scopeHash = (roots) => createHash("sha256")
|
|
10
13
|
.update(JSON.stringify([...roots].sort()))
|
|
11
14
|
.digest("hex");
|
|
15
|
+
const skipReason = (file) => !file.canDownload ? "downloads restricted" : supported(file) ? undefined : `unsupported type: ${file.mime}`;
|
|
16
|
+
// Skips decided by type are retried once a newer version reads the type; length skips once the limit is raised.
|
|
17
|
+
const retryable = (skip, limit) => skip.reason === "downloads restricted" ||
|
|
18
|
+
skip.reason.startsWith("unsupported type: ") ||
|
|
19
|
+
(skip.textLimit !== undefined && skip.textLimit < limit) ||
|
|
20
|
+
// The store's own bounds change only with the shared package drive pins.
|
|
21
|
+
(skip.storeRefusedIn !== undefined && skip.storeRefusedIn !== VERSION) ||
|
|
22
|
+
// 0.2.0 and earlier skipped text over 200 000 characters with this reason and no recorded limit.
|
|
23
|
+
(skip.reason.startsWith("document exceeds the ingestion bound") && limit > 200000);
|
|
24
|
+
const changedSince = (previous, file) => previous.version !== file.version ||
|
|
25
|
+
previous.modifiedAt !== file.modifiedAt ||
|
|
26
|
+
previous.name !== file.name ||
|
|
27
|
+
previous.canDownload !== file.canDownload ||
|
|
28
|
+
JSON.stringify(previous.parents) !== JSON.stringify(file.parents);
|
|
29
|
+
const MAX_PICTURE_BYTES = 25 * 1024 * 1024;
|
|
30
|
+
const isPicture = (file) => file.mime.startsWith("image/") && file.canDownload;
|
|
12
31
|
const hashText = (text) => createHash("sha256").update(text).digest("hex");
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
return false;
|
|
16
|
-
if (roots.includes(file.id))
|
|
17
|
-
return true;
|
|
18
|
-
if (seen.has(file.id))
|
|
19
|
-
throw new CliError("invalid_response", "folder ancestry contains a cycle");
|
|
20
|
-
const next = new Set([...seen, file.id]);
|
|
21
|
-
return file.parents.some((id) => {
|
|
22
|
-
const folder = folders[id];
|
|
23
|
-
return folder ? within(folder, roots, folders, next) : roots.includes(id);
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
const plan = async (source, state, roots, abandoned = []) => {
|
|
32
|
+
export { within } from "./scope.js";
|
|
33
|
+
const plan = async (source, state, roots, limit, pictures, abandoned = []) => {
|
|
27
34
|
const scope = scopeHash(roots);
|
|
28
35
|
if (!roots.length)
|
|
29
36
|
return {
|
|
@@ -53,8 +60,8 @@ const plan = async (source, state, roots, abandoned = []) => {
|
|
|
53
60
|
visited.add(folder.id);
|
|
54
61
|
folders[folder.id] = folder;
|
|
55
62
|
for (const file of await source.children(folder.id)) {
|
|
56
|
-
if (++discovered >
|
|
57
|
-
throw
|
|
63
|
+
if (++discovered > MAX_ENTRIES)
|
|
64
|
+
throw tooManyEntries();
|
|
58
65
|
if (file.mime === FOLDER)
|
|
59
66
|
await crawl(file, new Set([...ancestry, folder.id]));
|
|
60
67
|
else {
|
|
@@ -129,29 +136,28 @@ const plan = async (source, state, roots, abandoned = []) => {
|
|
|
129
136
|
if (!within(file, roots, folders))
|
|
130
137
|
continue;
|
|
131
138
|
const previousSkip = state.skipped.find((item) => item.id === id);
|
|
132
|
-
|
|
139
|
+
const reason = skipReason(file);
|
|
140
|
+
const retry = previousSkip && !reason && retryable(previousSkip, limit);
|
|
141
|
+
const known = state.documents[id];
|
|
142
|
+
const pictureDue = pictures && isPicture(file) && known !== undefined && !known.picture;
|
|
143
|
+
if (previousSkip && !changed.has(id) && !initial && !retry && !pictureDue && !(reason && !state.documents[id])) {
|
|
133
144
|
skipped.push({ ...previousSkip, file });
|
|
134
145
|
continue;
|
|
135
146
|
}
|
|
136
|
-
if (
|
|
137
|
-
skipped.push({ id, reason
|
|
147
|
+
if (reason) {
|
|
148
|
+
skipped.push({ id, reason, file });
|
|
149
|
+
if (initial || !known || known.notRead !== reason || changedSince(known.metadata, file) || pictureDue)
|
|
150
|
+
jobs.push({ id, kind: "save", file });
|
|
138
151
|
continue;
|
|
139
152
|
}
|
|
140
|
-
if (changed.has(id)) {
|
|
141
|
-
|
|
142
|
-
if (!previous ||
|
|
143
|
-
previous.version !== file.version ||
|
|
144
|
-
previous.modifiedAt !== file.modifiedAt ||
|
|
145
|
-
previous.name !== file.name ||
|
|
146
|
-
previous.canDownload !== file.canDownload ||
|
|
147
|
-
JSON.stringify(previous.parents) !== JSON.stringify(file.parents) ||
|
|
148
|
-
initial)
|
|
153
|
+
if (changed.has(id) || retry || known?.notRead) {
|
|
154
|
+
if (!known || known.notRead || changedSince(known.metadata, file) || initial)
|
|
149
155
|
jobs.push({ id, kind: "save", file });
|
|
150
156
|
}
|
|
151
157
|
}
|
|
152
158
|
for (const id of new Set([...Object.keys(state.documents), ...abandoned])) {
|
|
153
159
|
const file = files.get(id);
|
|
154
|
-
if (!file || !within(file, roots, folders)
|
|
160
|
+
if (!file || !within(file, roots, folders))
|
|
155
161
|
jobs.push({ id, kind: "remove" });
|
|
156
162
|
}
|
|
157
163
|
// Only retain metadata for selected ancestry; the account-wide feed includes unrelated folders.
|
|
@@ -165,17 +171,23 @@ export const sync = async (source, index, env, name, max, signal, rescan = false
|
|
|
165
171
|
const lock = await lockProfile(env, name);
|
|
166
172
|
const result = {
|
|
167
173
|
saved: 0,
|
|
174
|
+
names_only: 0,
|
|
168
175
|
removed: 0,
|
|
169
176
|
unchanged: 0,
|
|
170
177
|
pending: 0,
|
|
171
178
|
skipped: [],
|
|
172
179
|
errors: [],
|
|
173
180
|
coverage: "selected folders only; unsupported files are reported",
|
|
181
|
+
...(profile.pictureSearch ? { pictures: 0 } : {}),
|
|
174
182
|
};
|
|
183
|
+
let writer;
|
|
175
184
|
try {
|
|
176
185
|
if (profile.roots.length && (!source || (await source.identity()) !== profile.principal))
|
|
177
|
-
throw new CliError("authentication_error", "signed-in Google account does not match this profile"
|
|
186
|
+
throw new CliError("authentication_error", "signed-in Google account does not match this profile", {
|
|
187
|
+
reason: "profile.wrong-account",
|
|
188
|
+
});
|
|
178
189
|
const state = readState(env, name, profile.principal);
|
|
190
|
+
const limit = textLimit(env, name);
|
|
179
191
|
const currentScope = scopeHash(profile.roots);
|
|
180
192
|
const abandoned = state.pending && (state.pending.scope !== currentScope || rescan) ? state.pending.jobs.map((job) => job.id) : [];
|
|
181
193
|
if (state.pending?.scope !== currentScope || rescan)
|
|
@@ -183,14 +195,62 @@ export const sync = async (source, index, env, name, max, signal, rescan = false
|
|
|
183
195
|
if (rescan)
|
|
184
196
|
delete state.cursor;
|
|
185
197
|
if (!state.pending) {
|
|
186
|
-
state.pending = await plan(source, state, profile.roots, abandoned);
|
|
198
|
+
state.pending = await plan(source, state, profile.roots, limit, profile.pictureSearch ?? false, abandoned);
|
|
187
199
|
state.skipped = state.pending.skipped;
|
|
188
200
|
saveState(env, name, state);
|
|
189
201
|
}
|
|
190
202
|
const pending = state.pending;
|
|
191
203
|
if (!pending)
|
|
192
204
|
throw new CliError("invalid_response", "could not prepare a sync batch");
|
|
205
|
+
if (index.catalog)
|
|
206
|
+
await index.catalog.import(profile.principal, catalogFiles(state, profile.roots));
|
|
193
207
|
result.skipped = state.skipped.map(({ id, reason }) => ({ id, reason }));
|
|
208
|
+
const saveNamesOnly = async (file, reason) => {
|
|
209
|
+
const doc = { metadata: file, markdown: "", text: "", tabs: [], notRead: reason };
|
|
210
|
+
const hash = hashText("");
|
|
211
|
+
const previous = state.documents[file.id];
|
|
212
|
+
const reference = await index.save(profile.principal, doc, hash);
|
|
213
|
+
saveSnapshot(env, name, doc);
|
|
214
|
+
state.documents[file.id] = { metadata: file, hash, reference, tabs: 0, notRead: reason };
|
|
215
|
+
if (previous?.notRead === reason && !changedSince(previous.metadata, file))
|
|
216
|
+
result.unchanged++;
|
|
217
|
+
else
|
|
218
|
+
result.names_only++;
|
|
219
|
+
};
|
|
220
|
+
let modelMissing = false;
|
|
221
|
+
const savePictureOf = async (file) => {
|
|
222
|
+
const entry = state.documents[file.id];
|
|
223
|
+
if (!profile.pictureSearch || !isPicture(file) || modelMissing)
|
|
224
|
+
return;
|
|
225
|
+
if ((file.size ?? 0) > MAX_PICTURE_BYTES) {
|
|
226
|
+
entry.picture = "too-large";
|
|
227
|
+
result.pictures_too_large = (result.pictures_too_large ?? 0) + 1;
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
if (!source)
|
|
231
|
+
throw new CliError("configuration_error", "a pending picture requires Google sign-in");
|
|
232
|
+
if (!writer) {
|
|
233
|
+
try {
|
|
234
|
+
writer = await index.openPictures();
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
if (!isCliError(error) || error.code !== "not_found")
|
|
238
|
+
throw error;
|
|
239
|
+
modelMissing = true;
|
|
240
|
+
result.pictures_skipped = error.message;
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
const bytes = await source.bytes(file.id);
|
|
245
|
+
if (bytes.length > MAX_PICTURE_BYTES) {
|
|
246
|
+
entry.picture = "too-large";
|
|
247
|
+
result.pictures_too_large = (result.pictures_too_large ?? 0) + 1;
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if ((await writer.save(entry.reference, bytes)) === "saved")
|
|
251
|
+
result.pictures = (result.pictures ?? 0) + 1;
|
|
252
|
+
entry.picture = "saved";
|
|
253
|
+
};
|
|
194
254
|
const jobs = [...pending.jobs].slice(0, max);
|
|
195
255
|
for (const job of jobs) {
|
|
196
256
|
if (signal?.aborted)
|
|
@@ -203,23 +263,14 @@ export const sync = async (source, index, env, name, max, signal, rescan = false
|
|
|
203
263
|
delete state.documents[job.id];
|
|
204
264
|
result.removed++;
|
|
205
265
|
}
|
|
206
|
-
else if (job.file && (
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
reason: !job.file.canDownload ? "downloads restricted" : `unsupported type: ${job.file.mime}`,
|
|
210
|
-
};
|
|
211
|
-
if (state.documents[job.id]) {
|
|
212
|
-
await index.remove(profile.principal, job.id);
|
|
213
|
-
removeSnapshot(env, name, job.id);
|
|
214
|
-
delete state.documents[job.id];
|
|
215
|
-
}
|
|
216
|
-
state.skipped.push(skipped);
|
|
217
|
-
result.skipped.push(skipped);
|
|
266
|
+
else if (job.file && skipReason(job.file)) {
|
|
267
|
+
await saveNamesOnly(job.file, skipReason(job.file));
|
|
268
|
+
await savePictureOf(job.file);
|
|
218
269
|
}
|
|
219
270
|
else {
|
|
220
271
|
if (!source)
|
|
221
272
|
throw new CliError("configuration_error", "a pending save requires Google sign-in");
|
|
222
|
-
const content = await source.content(job.id);
|
|
273
|
+
const content = await source.content(job.id, limit);
|
|
223
274
|
if (!within(content.metadata, profile.roots, pending.folders)) {
|
|
224
275
|
await index.remove(profile.principal, job.id);
|
|
225
276
|
removeSnapshot(env, name, job.id);
|
|
@@ -229,7 +280,14 @@ export const sync = async (source, index, env, name, max, signal, rescan = false
|
|
|
229
280
|
else {
|
|
230
281
|
const hash = hashText(content.text);
|
|
231
282
|
const previous = state.documents[job.id];
|
|
232
|
-
const reference = await index.save(profile.principal, content, hash)
|
|
283
|
+
const reference = await index.save(profile.principal, content, hash).catch((error) => {
|
|
284
|
+
if (!isCliError(error) || error.code !== "validation_error")
|
|
285
|
+
throw error;
|
|
286
|
+
throw new CliError("validation_error", `the local store refused this text: ${error.message}`, {
|
|
287
|
+
reason: "store.refused",
|
|
288
|
+
store_refused_in: VERSION,
|
|
289
|
+
});
|
|
290
|
+
});
|
|
233
291
|
saveSnapshot(env, name, content);
|
|
234
292
|
state.documents[job.id] = { metadata: content.metadata, hash, reference, tabs: content.tabs.length };
|
|
235
293
|
if (previous?.hash === hash)
|
|
@@ -246,10 +304,20 @@ export const sync = async (source, index, env, name, max, signal, rescan = false
|
|
|
246
304
|
if (safe.code === "cancelled")
|
|
247
305
|
throw safe;
|
|
248
306
|
if (job.kind === "save" && (safe.code === "not_found" || safe.code === "validation_error")) {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
307
|
+
const skipped = {
|
|
308
|
+
id: job.id,
|
|
309
|
+
reason: safe.message,
|
|
310
|
+
...(job.file ? { file: job.file } : {}),
|
|
311
|
+
...(safe.details.text_limit ? { textLimit: limit } : {}),
|
|
312
|
+
...(safe.details.store_refused_in ? { storeRefusedIn: VERSION } : {}),
|
|
313
|
+
};
|
|
314
|
+
if (job.file && safe.code === "validation_error")
|
|
315
|
+
await saveNamesOnly(job.file, skipped.reason);
|
|
316
|
+
else {
|
|
317
|
+
await index.remove(profile.principal, job.id);
|
|
318
|
+
removeSnapshot(env, name, job.id);
|
|
319
|
+
delete state.documents[job.id];
|
|
320
|
+
}
|
|
253
321
|
state.skipped = state.skipped.filter((item) => item.id !== job.id);
|
|
254
322
|
state.skipped.push(skipped);
|
|
255
323
|
result.skipped.push({ id: skipped.id, reason: skipped.reason });
|
|
@@ -272,6 +340,7 @@ export const sync = async (source, index, env, name, max, signal, rescan = false
|
|
|
272
340
|
return result;
|
|
273
341
|
}
|
|
274
342
|
finally {
|
|
343
|
+
await writer?.close();
|
|
275
344
|
await lock.release();
|
|
276
345
|
}
|
|
277
346
|
};
|