@wirecat/drive-cli 0.14.1 → 0.15.1
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 +8 -4
- package/dist/{catalog-commands.d.ts → commands/catalog.d.ts} +2 -2
- package/dist/commands/catalog.d.ts.map +1 -0
- package/dist/{catalog-commands.js → commands/catalog.js} +19 -22
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/config.d.ts +5 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +81 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/context.d.ts +38 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +14 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/discovery.d.ts +5 -0
- package/dist/commands/discovery.d.ts.map +1 -0
- package/dist/commands/discovery.js +27 -0
- package/dist/commands/discovery.js.map +1 -0
- package/dist/commands/documents.d.ts +10 -0
- package/dist/commands/documents.d.ts.map +1 -0
- package/dist/commands/documents.js +89 -0
- package/dist/commands/documents.js.map +1 -0
- package/dist/commands/folders.d.ts +4 -0
- package/dist/commands/folders.d.ts.map +1 -0
- package/dist/commands/folders.js +44 -0
- package/dist/commands/folders.js.map +1 -0
- package/dist/{knowledge-commands.d.ts → commands/knowledge.d.ts} +4 -4
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/{knowledge-commands.js → commands/knowledge.js} +36 -54
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/mcp.d.ts +4 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +18 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/{remote-commands.d.ts → commands/remote.d.ts} +1 -1
- package/dist/commands/remote.d.ts.map +1 -0
- package/dist/{remote-commands.js → commands/remote.js} +42 -61
- package/dist/commands/remote.js.map +1 -0
- package/dist/commands/search.d.ts +4 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +20 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/session.d.ts +4 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +59 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/sync.d.ts +4 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +50 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/config-upgrade.d.ts.map +1 -1
- package/dist/config-upgrade.js +10 -7
- package/dist/config-upgrade.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +48 -11
- package/dist/config.js.map +1 -1
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +12 -1
- package/dist/failure.js.map +1 -1
- package/dist/google.js +4 -3
- package/dist/google.js.map +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +8 -6
- package/dist/mcp.js.map +1 -1
- package/dist/model.d.ts +10 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/program.d.ts +2 -19
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +66 -437
- package/dist/program.js.map +1 -1
- package/dist/registry.d.ts +4 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +3 -0
- package/dist/registry.js.map +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +4 -1
- package/dist/state.js.map +1 -1
- package/dist/store-transition.d.ts +3 -0
- package/dist/store-transition.d.ts.map +1 -0
- package/dist/store-transition.js +99 -0
- package/dist/store-transition.js.map +1 -0
- package/dist/store.d.ts +1 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +21 -6
- package/dist/store.js.map +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +25 -2
- package/dist/sync.js.map +1 -1
- package/package.json +2 -2
- package/dist/catalog-commands.d.ts.map +0 -1
- package/dist/catalog-commands.js.map +0 -1
- package/dist/knowledge-commands.d.ts.map +0 -1
- package/dist/knowledge-commands.js.map +0 -1
- package/dist/remote-commands.d.ts.map +0 -1
- package/dist/remote-commands.js.map +0 -1
package/README.md
CHANGED
|
@@ -104,10 +104,14 @@ The shared path helper chooses platform-appropriate config, data and cache direc
|
|
|
104
104
|
drive-cli. Override with `DRIVE_CONFIG_DIR`, `DRIVE_STATE_DIR` and `DRIVE_CACHE_DIR`. Snapshots are
|
|
105
105
|
`profiles/<profile>/documents/<file-id>.md` plus private JSON metadata and raw Docs responses.
|
|
106
106
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
Documents use the same local WireCat database as Memo, Telegram and MAX. Imports become searchable
|
|
108
|
+
across those tools, alongside messages and notes. `MESSAGING_STORE` selects another database;
|
|
109
|
+
`WIRECAT_STATE_DIR` moves the default WireCat directory. Google sign-ins remain separate.
|
|
110
|
+
|
|
111
|
+
On first use after an upgrade, Drive rebuilds old document references from its managed snapshots,
|
|
112
|
+
without fetching Google. It retains the old database. If that database contains tags, notes,
|
|
113
|
+
memories, facts or relationships, Drive refuses to strand them: keep using that file through
|
|
114
|
+
`MESSAGING_STORE` until those annotations are transferred.
|
|
111
115
|
|
|
112
116
|
Search covers body text, nested tables and footnotes from all tabs. Images, headers, footers,
|
|
113
117
|
comments and suggested edits are excluded. Image assets are not downloaded. Search text and Google’s native Markdown export are separate representations; inspect the export
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Body } from "@wirecat/cli-core/cli";
|
|
2
2
|
import type { Command } from "commander";
|
|
3
|
-
import type { DocumentIndex } from "
|
|
3
|
+
import type { DocumentIndex } from "../model.js";
|
|
4
4
|
interface Helpers {
|
|
5
5
|
env: NodeJS.ProcessEnv;
|
|
6
6
|
selected(): string;
|
|
@@ -11,4 +11,4 @@ interface Helpers {
|
|
|
11
11
|
}
|
|
12
12
|
export declare const installCatalogCommands: (program: Command, helpers: Helpers) => void;
|
|
13
13
|
export {};
|
|
14
|
-
//# sourceMappingURL=catalog
|
|
14
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,IAAI,EAA2C,MAAM,uBAAuB,CAAA;AAE1F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMhD,UAAU,OAAO;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;IACtB,QAAQ,IAAI,MAAM,CAAA;IAClB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IAC/B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACnE;AAED,eAAO,MAAM,sBAAsB,YAAa,OAAO,WAAW,OAAO,SAmJxE,CAAA"}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { CliError } from "@wirecat/cli-base";
|
|
2
2
|
import { annotate } from "@wirecat/cli-base/commands";
|
|
3
3
|
import { parseLucene, validateQuery } from "@wirecat/cli-base/query";
|
|
4
|
-
import { itemOf, listOf } from "@wirecat/cli-core/cli";
|
|
4
|
+
import { itemOf, LOCAL_READ, LOCAL_WRITE, listOf } from "@wirecat/cli-core/cli";
|
|
5
5
|
import { CATALOG_QUERY } from "@wirecat/cli-core/store";
|
|
6
|
-
import { catalogFiles, catalogOutput, catalogTree } from "
|
|
7
|
-
import { activeProfile, fileId } from "
|
|
8
|
-
import { allOf } from "
|
|
9
|
-
import { lockProfile } from "
|
|
10
|
-
import { examples } from "
|
|
11
|
-
import { readState } from "
|
|
6
|
+
import { catalogFiles, catalogOutput, catalogTree } from "../catalog.js";
|
|
7
|
+
import { activeProfile, fileId } from "../config.js";
|
|
8
|
+
import { allOf } from "../output.js";
|
|
9
|
+
import { lockProfile } from "../profile-lock.js";
|
|
10
|
+
import { examples } from "../registry.js";
|
|
11
|
+
import { readState } from "../state.js";
|
|
12
|
+
const local = (command, mutates = false) => annotate(command, { effects: mutates ? LOCAL_WRITE : LOCAL_READ });
|
|
12
13
|
export const installCatalogCommands = (program, helpers) => {
|
|
13
14
|
const { env, selected, output, positive, offset, withIndex } = helpers;
|
|
14
|
-
const catalog = program.command("catalog").description("browse stored Drive files and folders offline");
|
|
15
|
+
const catalog = local(program.command("catalog")).description("browse stored Drive files and folders offline");
|
|
15
16
|
const run = async (fn, write = false) => {
|
|
16
17
|
const profile = activeProfile(env, selected());
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
return withIndex(async (index) => {
|
|
19
|
+
const lock = write ? await lockProfile(env, selected()) : undefined;
|
|
20
|
+
try {
|
|
20
21
|
if (!index.catalog)
|
|
21
22
|
throw new CliError("configuration_error", "index has no shared catalog adapter", {
|
|
22
23
|
reason: "catalog.unavailable",
|
|
@@ -25,11 +26,11 @@ export const installCatalogCommands = (program, helpers) => {
|
|
|
25
26
|
const value = await fn({ ...index, catalog: index.catalog }, profile.principal);
|
|
26
27
|
lock?.assertHeld();
|
|
27
28
|
return value;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
await lock?.release();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
33
34
|
};
|
|
34
35
|
const entry = async (index, principal, id) => {
|
|
35
36
|
const found = await index.catalog?.get(principal, fileId(id));
|
|
@@ -39,10 +40,6 @@ export const installCatalogCommands = (program, helpers) => {
|
|
|
39
40
|
});
|
|
40
41
|
return found;
|
|
41
42
|
};
|
|
42
|
-
const local = (command, mutates = false) => {
|
|
43
|
-
annotate(command, { effects: { remote: "none", local: mutates ? "write" : "read" } });
|
|
44
|
-
return command;
|
|
45
|
-
};
|
|
46
43
|
examples(local(catalog.command("import").description("put cached file and folder metadata into the shared database"), true), ["drive personal catalog import --offline"]).action(async () => output(itemOf(await run(async (index, principal) => {
|
|
47
44
|
const state = readState(env, selected(), principal);
|
|
48
45
|
return index.catalog.import(principal, catalogFiles(state, activeProfile(env, selected()).roots));
|
|
@@ -96,7 +93,7 @@ export const installCatalogCommands = (program, helpers) => {
|
|
|
96
93
|
const roots = id ? [fileId(id)] : activeProfile(env, selected()).roots;
|
|
97
94
|
return allOf(catalogTree(items, roots.map((root) => `${root}.md`), args.depth));
|
|
98
95
|
})));
|
|
99
|
-
const tags = catalog.command("tags").description("add owner tags to cached files or folders");
|
|
96
|
+
const tags = local(catalog.command("tags")).description("add owner tags to cached files or folders");
|
|
100
97
|
for (const action of ["list", "add", "remove"]) {
|
|
101
98
|
const command = examples(local(tags.command(action).description(`${action} local tags on a cached file or folder`), action !== "list"), [`drive personal catalog tags ${action} FOLDER_ID${action === "list" ? "" : " project"} --offline`]).argument("<file>", "Google file or folder id, or its Drive URL");
|
|
102
99
|
if (action !== "list")
|
|
@@ -109,4 +106,4 @@ export const installCatalogCommands = (program, helpers) => {
|
|
|
109
106
|
}, action !== "list"))));
|
|
110
107
|
}
|
|
111
108
|
};
|
|
112
|
-
//# sourceMappingURL=catalog
|
|
109
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Command } from "commander";
|
|
2
|
+
import type { CommandContext } from "./context.js";
|
|
3
|
+
export declare const installConfigCommands: (program: Command, { env, selected, output }: CommandContext) => void;
|
|
4
|
+
export declare const installModelCommands: (program: Command, { env, output }: CommandContext) => void;
|
|
5
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAA;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,eAAO,MAAM,qBAAqB,YAAa,OAAO,6BAA6B,cAAc,SA2DhG,CAAA;AAED,eAAO,MAAM,oBAAoB,YAAa,OAAO,mBAAmB,cAAc,SA4BrF,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { annotate } from "@wirecat/cli-base/commands";
|
|
3
|
+
import { itemOf, LOCAL_READ, LOCAL_WRITE } from "@wirecat/cli-core/cli";
|
|
4
|
+
import { Option } from "commander";
|
|
5
|
+
import { activeProfile, checkTextLimit, configKey, readConfig, SETTING_NAMES, writeConfig } from "../config.js";
|
|
6
|
+
import { examples } from "../registry.js";
|
|
7
|
+
export const installConfigCommands = (program, { env, selected, output }) => {
|
|
8
|
+
const config = annotate(program.command("config"), { effects: LOCAL_READ }).description("read and change settings; credentials are kept apart");
|
|
9
|
+
examples(annotate(config.command("show"), { effects: LOCAL_READ }).description("show the defaults and every profile's settings"), ["drive personal config show"]).action(() => output(itemOf(readConfig(env))));
|
|
10
|
+
examples(annotate(config.command("set"), { effects: LOCAL_WRITE }).description("set one setting of this profile, or of the defaults"), ["drive personal config set read_only true", `drive personal config set permissions.files '"readonly"' --defaults`])
|
|
11
|
+
.argument("<key>", "read_only, max_text_chars, picture_search, shared AI settings, permissions.<key> or models.<purpose>.<field>")
|
|
12
|
+
.argument("<json-value>", "the new value, as JSON")
|
|
13
|
+
.option("--defaults", "change the defaults instead of this profile")
|
|
14
|
+
.action((rawKey, raw, args) => {
|
|
15
|
+
const key = configKey(rawKey);
|
|
16
|
+
const value = readConfig(env);
|
|
17
|
+
if (args.defaults)
|
|
18
|
+
value.defaults ??= {};
|
|
19
|
+
const target = args.defaults
|
|
20
|
+
? value.defaults
|
|
21
|
+
: activeProfile(env, selected());
|
|
22
|
+
if (!args.defaults)
|
|
23
|
+
value.profiles[selected()] = target;
|
|
24
|
+
const [head, ...parts] = key.split(".");
|
|
25
|
+
if (!SETTING_NAMES.has(head ?? "") ||
|
|
26
|
+
parts.some((part) => ["__proto__", "prototype", "constructor"].includes(part)))
|
|
27
|
+
throw new CliError("validation_error", "config set accepts profile settings and shared AI settings");
|
|
28
|
+
let parsed;
|
|
29
|
+
try {
|
|
30
|
+
parsed = JSON.parse(raw);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
throw new CliError("validation_error", "setting value must be JSON");
|
|
34
|
+
}
|
|
35
|
+
if (head === "picture_search") {
|
|
36
|
+
if (args.defaults || parts.length || typeof parsed !== "boolean")
|
|
37
|
+
throw new CliError("validation_error", "picture_search is true or false, set per profile");
|
|
38
|
+
target.picture_search = parsed;
|
|
39
|
+
}
|
|
40
|
+
else if (head === "max_text_chars" && !parts.length)
|
|
41
|
+
target.max_text_chars = checkTextLimit(parsed);
|
|
42
|
+
else if (!parts.length)
|
|
43
|
+
Object.assign(target, { [key]: parsed });
|
|
44
|
+
else if (head === "permissions") {
|
|
45
|
+
target.permissions ??= {};
|
|
46
|
+
Object.assign(target.permissions, { [parts.join(".")]: parsed });
|
|
47
|
+
}
|
|
48
|
+
else if (head === "models" && parts.length === 2 && parts[0] && parts[1]) {
|
|
49
|
+
target.models ??= {};
|
|
50
|
+
target.models[parts[0]] ??= {};
|
|
51
|
+
Object.assign(target.models[parts[0]], { [parts[1]]: parsed });
|
|
52
|
+
}
|
|
53
|
+
else
|
|
54
|
+
throw new CliError("validation_error", "unknown setting path");
|
|
55
|
+
writeConfig(env, value);
|
|
56
|
+
output(itemOf({ key, updated: true, scope: args.defaults ? "defaults" : selected() }));
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
export const installModelCommands = (program, { env, output }) => {
|
|
60
|
+
const models = annotate(program.command("models"), { effects: LOCAL_READ }).description("choose the model that proposes memories; keys stay out of config");
|
|
61
|
+
examples(annotate(models.command("set"), { effects: LOCAL_WRITE }).description("set the provider and model for one use"), ["drive personal models set --provider openai --model MODEL_ID", "drive personal models set --provider off"])
|
|
62
|
+
.option("--purpose <purpose>", "what the model is used for", "memories")
|
|
63
|
+
.addOption(new Option("--provider <provider>", "who runs the model, or off to use none")
|
|
64
|
+
.choices(["openai", "anthropic", "off"])
|
|
65
|
+
.makeOptionMandatory())
|
|
66
|
+
.option("--model <model>", "model id at the provider")
|
|
67
|
+
.option("--base-url <url>", "HTTP or HTTPS address of the model API, without credentials in it")
|
|
68
|
+
.action((args) => {
|
|
69
|
+
const config = readConfig(env);
|
|
70
|
+
config.defaults ??= {};
|
|
71
|
+
config.defaults.models ??= {};
|
|
72
|
+
config.defaults.models[args.purpose] = {
|
|
73
|
+
provider: args.provider,
|
|
74
|
+
...(args.model ? { model: args.model } : {}),
|
|
75
|
+
...(args.baseUrl ? { base_url: args.baseUrl } : {}),
|
|
76
|
+
};
|
|
77
|
+
writeConfig(env, config);
|
|
78
|
+
output(itemOf({ purpose: args.purpose, configured: true }));
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { KeyringStore, Renderer, RenderFormat, Streams } from "@wirecat/cli-base";
|
|
2
|
+
import type { Body } from "@wirecat/cli-core/cli";
|
|
3
|
+
import type { Complete } from "../extraction.js";
|
|
4
|
+
import type { GoogleApi } from "../google-api.js";
|
|
5
|
+
import type { DocumentIndex, GoogleSource } from "../model.js";
|
|
6
|
+
import type { PolicyFlags } from "../policy.js";
|
|
7
|
+
import type { UploadRequest } from "../upload.js";
|
|
8
|
+
export interface ProgramOptions {
|
|
9
|
+
env?: NodeJS.ProcessEnv;
|
|
10
|
+
streams?: Streams;
|
|
11
|
+
keyring?: KeyringStore;
|
|
12
|
+
openBrowser?: (url: string) => Promise<void>;
|
|
13
|
+
source?: (profile: string) => Promise<GoogleSource>;
|
|
14
|
+
index?: () => Promise<DocumentIndex>;
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
api?: GoogleApi;
|
|
17
|
+
complete?: Complete;
|
|
18
|
+
ask?: (key: string) => Promise<boolean>;
|
|
19
|
+
readBody?: (path: string | number) => string;
|
|
20
|
+
uploadRequest?: UploadRequest;
|
|
21
|
+
}
|
|
22
|
+
export interface CommandContext {
|
|
23
|
+
env: NodeJS.ProcessEnv;
|
|
24
|
+
streams: Streams;
|
|
25
|
+
options: ProgramOptions;
|
|
26
|
+
selected(): string;
|
|
27
|
+
signal(): AbortSignal | undefined;
|
|
28
|
+
output(body: Body): void;
|
|
29
|
+
print(render: (renderer: Renderer, format: RenderFormat, streams: Streams) => void): void;
|
|
30
|
+
source(): Promise<GoogleSource>;
|
|
31
|
+
withIndex<T>(fn: (index: DocumentIndex) => Promise<T>): Promise<T>;
|
|
32
|
+
policyFlags(): PolicyFlags & {
|
|
33
|
+
offline?: boolean;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export declare const positive: (input: string) => number;
|
|
37
|
+
export declare const offset: (input: string) => number;
|
|
38
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACtF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAEjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IACnD,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;IACpC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,GAAG,CAAC,EAAE,SAAS,CAAA;IACf,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACvC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAA;IAC5C,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,QAAQ,IAAI,MAAM,CAAA;IAClB,MAAM,IAAI,WAAW,GAAG,SAAS,CAAA;IACjC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACxB,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAA;IACzF,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,CAAA;IAC/B,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAClE,WAAW,IAAI,WAAW,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CACnD;AAED,eAAO,MAAM,QAAQ,UAAW,MAAM,WAIrC,CAAA;AACD,eAAO,MAAM,MAAM,UAAW,MAAM,WAInC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { InvalidArgumentError } from "commander";
|
|
2
|
+
export const positive = (input) => {
|
|
3
|
+
const n = Number(input);
|
|
4
|
+
if (!Number.isSafeInteger(n) || n < 1)
|
|
5
|
+
throw new InvalidArgumentError("use a positive integer");
|
|
6
|
+
return n;
|
|
7
|
+
};
|
|
8
|
+
export const offset = (input) => {
|
|
9
|
+
const n = Number(input);
|
|
10
|
+
if (!Number.isSafeInteger(n) || n < 0)
|
|
11
|
+
throw new InvalidArgumentError("use a nonnegative integer");
|
|
12
|
+
return n;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAmChD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;IACxC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACvB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,oBAAoB,CAAC,wBAAwB,CAAC,CAAA;IAC/F,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACvB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,oBAAoB,CAAC,2BAA2B,CAAC,CAAA;IAClG,OAAO,CAAC,CAAA;AACV,CAAC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { CommandContext } from "./context.js";
|
|
3
|
+
export declare const installCompleteCommand: (program: Command, { streams }: CommandContext) => void;
|
|
4
|
+
export declare const installCommandsCommand: (program: Command, { print }: CommandContext) => void;
|
|
5
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/commands/discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,eAAO,MAAM,sBAAsB,YAAa,OAAO,eAAe,cAAc,SAuBnF,CAAA;AAED,eAAO,MAAM,sBAAsB,YAAa,OAAO,aAAa,cAAc,SASjF,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { annotate, describeOptions } from "@wirecat/cli-base/commands";
|
|
3
|
+
import { formatSuggestions, suggest } from "@wirecat/cli-base/completion";
|
|
4
|
+
import { NO_EFFECTS } from "@wirecat/cli-core/cli";
|
|
5
|
+
import { commandsDocument, describeDriveProgram, examples } from "../registry.js";
|
|
6
|
+
export const installCompleteCommand = (program, { streams }) => {
|
|
7
|
+
examples(annotate(program.command("complete"), { effects: NO_EFFECTS }).description("print a shell completion script, or complete words"), ["drive complete zsh"])
|
|
8
|
+
.argument("[words...]", "a shell name, or after -- the words typed so far")
|
|
9
|
+
.allowUnknownOption()
|
|
10
|
+
.helpOption(false)
|
|
11
|
+
.action(async (words) => {
|
|
12
|
+
if (!program.rawArgs.includes("--")) {
|
|
13
|
+
if (!["bash", "zsh", "fish", "powershell"].includes(words[0] ?? ""))
|
|
14
|
+
throw new CliError("validation_error", "choose a supported shell");
|
|
15
|
+
const { script } = await import("@bomb.sh/tab");
|
|
16
|
+
script(words[0], "drive", "drive");
|
|
17
|
+
}
|
|
18
|
+
else
|
|
19
|
+
streams.data(formatSuggestions(suggest({ commands: describeDriveProgram(program), globalOptions: describeOptions(program), words })));
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
export const installCommandsCommand = (program, { print }) => {
|
|
23
|
+
examples(annotate(program.command("commands"), { effects: NO_EFFECTS }).description("print the command tree and its options as data"), ["drive commands --json", "drive commands files copy --json"])
|
|
24
|
+
.argument("[path...]", "only this command or group, as words")
|
|
25
|
+
.action((path) => print((renderer) => renderer.result(commandsDocument(program, path))));
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/commands/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAE,EAAE,OAAO,EAAkB,EAAE,EAAE;IACtF,QAAQ,CACN,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW,CACxE,oDAAoD,CACrD,EACD,CAAC,oBAAoB,CAAC,CACvB;SACE,QAAQ,CAAC,YAAY,EAAE,kDAAkD,CAAC;SAC1E,kBAAkB,EAAE;SACpB,UAAU,CAAC,KAAK,CAAC;SACjB,MAAM,CAAC,KAAK,EAAE,KAAe,EAAE,EAAE;QAChC,IAAI,CAAE,OAA2C,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,CAAA;YACpE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;YAC/C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QAC7C,CAAC;;YACC,OAAO,CAAC,IAAI,CACV,iBAAiB,CACf,OAAO,CAAC,EAAE,QAAQ,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CACrG,CACF,CAAA;IACL,CAAC,CAAC,CAAA;AACN,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAE,EAAE,KAAK,EAAkB,EAAE,EAAE;IACpF,QAAQ,CACN,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW,CACxE,gDAAgD,CACjD,EACD,CAAC,uBAAuB,EAAE,kCAAkC,CAAC,CAC9D;SACE,QAAQ,CAAC,WAAW,EAAE,sCAAsC,CAAC;SAC7D,MAAM,CAAC,CAAC,IAAc,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AACtG,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import { type CommandContext } from "./context.js";
|
|
3
|
+
export declare const importedDocument: ({ env, selected }: Pick<CommandContext, "env" | "selected">) => (input: string) => {
|
|
4
|
+
id: string;
|
|
5
|
+
ref: string;
|
|
6
|
+
hash: string;
|
|
7
|
+
snapshot: import("../model.js").DocumentContent;
|
|
8
|
+
};
|
|
9
|
+
export declare const installDocumentCommands: (program: Command, context: CommandContext) => void;
|
|
10
|
+
//# sourceMappingURL=documents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/commands/documents.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,OAAO,EAAE,KAAK,cAAc,EAAY,MAAM,cAAc,CAAA;AAE5D,eAAO,MAAM,gBAAgB,sBACP,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,UAAU,CAAC,aACpD,MAAM;;;;;CAUb,CAAA;AAEH,eAAO,MAAM,uBAAuB,YAAa,OAAO,WAAW,cAAc,SAuFhF,CAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { writeFileSync } from "node:fs";
|
|
2
|
+
import { CliError } from "@wirecat/cli-base";
|
|
3
|
+
import { annotate } from "@wirecat/cli-base/commands";
|
|
4
|
+
import { itemOf, LOCAL_READ, LOCAL_WRITE, listOf, listQuery, typedQuery, withQuery } from "@wirecat/cli-core/cli";
|
|
5
|
+
import { IMPORTED_DOCUMENT_QUERY } from "@wirecat/cli-core/store";
|
|
6
|
+
import { activeProfile, fileId } from "../config.js";
|
|
7
|
+
import { metadataJson } from "../model.js";
|
|
8
|
+
import { examples } from "../registry.js";
|
|
9
|
+
import { readSnapshot, readState } from "../state.js";
|
|
10
|
+
import { positive } from "./context.js";
|
|
11
|
+
export const importedDocument = ({ env, selected }) => (input) => {
|
|
12
|
+
const id = fileId(input);
|
|
13
|
+
const profile = activeProfile(env, selected());
|
|
14
|
+
const state = readState(env, selected(), profile.principal);
|
|
15
|
+
if (!state.documents[id])
|
|
16
|
+
throw new CliError("not_found", "this source is not imported in the selected profile", {
|
|
17
|
+
reason: "document.not-imported",
|
|
18
|
+
});
|
|
19
|
+
const doc = state.documents[id];
|
|
20
|
+
return { id, ref: doc.reference, hash: doc.hash, snapshot: readSnapshot(env, selected(), id) };
|
|
21
|
+
};
|
|
22
|
+
export const installDocumentCommands = (program, context) => {
|
|
23
|
+
const { env, selected, output, withIndex } = context;
|
|
24
|
+
const imported = importedDocument(context);
|
|
25
|
+
const documents = annotate(program.command("documents"), { effects: LOCAL_READ }).description("read imported documents and Google Docs");
|
|
26
|
+
const documentArgument = "document id or Google Docs URL";
|
|
27
|
+
annotate(withQuery(examples(annotate(documents.command("list"), { effects: LOCAL_READ }).description("list imported documents with their Google URLs"), [
|
|
28
|
+
"drive personal documents list",
|
|
29
|
+
"drive personal documents list tag:budget",
|
|
30
|
+
"drive personal documents list person:PERSON_UID --limit 10",
|
|
31
|
+
]), IMPORTED_DOCUMENT_QUERY), { output: { entity: "drive_document" } })
|
|
32
|
+
.option("--limit <n>", "how many documents to return", positive, 50)
|
|
33
|
+
.option("--page <n>", "which page to return", positive, 1)
|
|
34
|
+
.action(async (words, { limit, page }) => {
|
|
35
|
+
const profile = activeProfile(env, selected());
|
|
36
|
+
const query = typedQuery(words);
|
|
37
|
+
const ast = listQuery(query, IMPORTED_DOCUMENT_QUERY, "documents list");
|
|
38
|
+
const found = await withIndex(async (index) => {
|
|
39
|
+
if (!index.knowledge)
|
|
40
|
+
throw new CliError("configuration_error", "index has no shared knowledge adapter");
|
|
41
|
+
return index.knowledge.documents(profile.principal, ast, { limit, offset: (page - 1) * limit });
|
|
42
|
+
});
|
|
43
|
+
const state = readState(env, selected(), profile.principal);
|
|
44
|
+
output(listOf("documents list", {
|
|
45
|
+
items: found.items.map((note) => {
|
|
46
|
+
const id = (note.path ?? "").replace(/\.md$/, "");
|
|
47
|
+
const doc = state.documents[id];
|
|
48
|
+
return doc
|
|
49
|
+
? { ...metadataJson(doc.metadata), reference: doc.reference, tabs: doc.tabs }
|
|
50
|
+
: { id, name: note.title, reference: note.ref, tabs: 0 };
|
|
51
|
+
}),
|
|
52
|
+
limit,
|
|
53
|
+
has_more: found.hasMore,
|
|
54
|
+
page,
|
|
55
|
+
args: { query: query || undefined },
|
|
56
|
+
}));
|
|
57
|
+
});
|
|
58
|
+
examples(annotate(documents.command("show"), { effects: LOCAL_READ })
|
|
59
|
+
.argument("<document>", documentArgument)
|
|
60
|
+
.description("show an imported document's text, tabs and metadata"), ["drive personal documents show DOC_ID"]).action((input) => {
|
|
61
|
+
const { snapshot } = imported(input);
|
|
62
|
+
output(itemOf({
|
|
63
|
+
metadata: metadataJson(snapshot.metadata),
|
|
64
|
+
text: snapshot.text,
|
|
65
|
+
tabs: snapshot.tabs,
|
|
66
|
+
...(snapshot.notRead ? { not_read: snapshot.notRead } : {}),
|
|
67
|
+
}));
|
|
68
|
+
});
|
|
69
|
+
examples(annotate(documents.command("export"), { effects: LOCAL_WRITE })
|
|
70
|
+
.argument("<document>", documentArgument)
|
|
71
|
+
.description("write an imported document to a new Markdown file"), ["drive personal documents export DOC_ID --output notes.md"])
|
|
72
|
+
.requiredOption("--output <file>", "path of the Markdown file to write; an existing file is refused")
|
|
73
|
+
.action((input, args) => {
|
|
74
|
+
const { id, snapshot } = imported(input);
|
|
75
|
+
try {
|
|
76
|
+
writeFileSync(args.output, snapshot.markdown, { flag: "wx", mode: 0o600 });
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error.code === "EEXIST")
|
|
80
|
+
throw new CliError("validation_error", "the output file already exists; choose another --output", {
|
|
81
|
+
reason: "export.exists",
|
|
82
|
+
param: "--output",
|
|
83
|
+
});
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
output(itemOf({ id, path: args.output, format: "markdown" }));
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/commands/documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folders.d.ts","sourceRoot":"","sources":["../../src/commands/folders.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,eAAO,MAAM,qBAAqB,YAAa,OAAO,WAAW,cAAc,SA0C9E,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { annotate } from "@wirecat/cli-base/commands";
|
|
3
|
+
import { FETCH, itemOf, LOCAL_READ, LOCAL_WRITE } from "@wirecat/cli-core/cli";
|
|
4
|
+
import { activeProfile, fileId, readConfig, writeConfig } from "../config.js";
|
|
5
|
+
import { FOLDER } from "../model.js";
|
|
6
|
+
import { allOf } from "../output.js";
|
|
7
|
+
import { examples } from "../registry.js";
|
|
8
|
+
export const installFolderCommands = (program, context) => {
|
|
9
|
+
const { env, selected, output, source } = context;
|
|
10
|
+
const folders = annotate(program.command("folders"), { effects: LOCAL_READ }).description("choose the Google Drive folders that sync imports");
|
|
11
|
+
const folderArgument = "folder id or Google Drive URL";
|
|
12
|
+
examples(annotate(folders.command("add"), { effects: FETCH })
|
|
13
|
+
.argument("<folder>", folderArgument)
|
|
14
|
+
.description("import a folder and everything under it on the next sync"), ["drive personal folders add FOLDER_ID"]).action(async (input) => {
|
|
15
|
+
const id = fileId(input);
|
|
16
|
+
const config = readConfig(env);
|
|
17
|
+
const name = selected();
|
|
18
|
+
const profile = activeProfile(env, name);
|
|
19
|
+
const metadata = await (await source()).metadata(id);
|
|
20
|
+
if (metadata.mime !== FOLDER || metadata.trashed)
|
|
21
|
+
throw new CliError("validation_error", "source is not an accessible Google folder");
|
|
22
|
+
if (!profile.roots.includes(metadata.id))
|
|
23
|
+
profile.roots.push(metadata.id);
|
|
24
|
+
config.profiles[name] = profile;
|
|
25
|
+
writeConfig(env, config);
|
|
26
|
+
output(itemOf({ id: metadata.id, name: metadata.name, added: true }));
|
|
27
|
+
});
|
|
28
|
+
examples(annotate(folders.command("list"), { effects: LOCAL_READ }).description("list the folder ids sync imports"), [
|
|
29
|
+
"drive personal folders list",
|
|
30
|
+
]).action(() => output(allOf(activeProfile(env, selected()).roots.map((id) => ({ id })))));
|
|
31
|
+
examples(annotate(folders.command("remove"), { effects: LOCAL_WRITE })
|
|
32
|
+
.argument("<folder>", folderArgument)
|
|
33
|
+
.description("stop importing a folder; the next sync drops its documents"), ["drive personal folders remove FOLDER_ID"]).action((input) => {
|
|
34
|
+
const id = fileId(input);
|
|
35
|
+
const config = readConfig(env);
|
|
36
|
+
const name = selected();
|
|
37
|
+
const profile = activeProfile(env, name);
|
|
38
|
+
profile.roots = profile.roots.filter((root) => root !== id);
|
|
39
|
+
config.profiles[name] = profile;
|
|
40
|
+
writeConfig(env, config);
|
|
41
|
+
output(itemOf({ id, removed: true }));
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=folders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folders.js","sourceRoot":"","sources":["../../src/commands/folders.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type Body } from "@wirecat/cli-core/cli";
|
|
2
2
|
import { type Command } from "commander";
|
|
3
|
-
import type { Complete } from "
|
|
4
|
-
import type { DocumentKnowledge } from "
|
|
5
|
-
import type { DocumentContent } from "
|
|
3
|
+
import type { Complete } from "../extraction.js";
|
|
4
|
+
import type { DocumentKnowledge } from "../knowledge.js";
|
|
5
|
+
import type { DocumentContent } from "../model.js";
|
|
6
6
|
export interface KnowledgeCommands {
|
|
7
7
|
document(input: string): {
|
|
8
8
|
id: string;
|
|
@@ -16,4 +16,4 @@ export interface KnowledgeCommands {
|
|
|
16
16
|
complete(): Complete;
|
|
17
17
|
}
|
|
18
18
|
export declare const installKnowledgeCommands: (program: Command, helpers: KnowledgeCommands) => void;
|
|
19
|
-
//# sourceMappingURL=knowledge
|
|
19
|
+
//# sourceMappingURL=knowledge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/commands/knowledge.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,IAAI,EASV,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AASxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,eAAe,CAAA;KAAE,CAAA;IAC7F,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACnH,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IAC/B,QAAQ,IAAI,QAAQ,CAAA;CACrB;AACD,eAAO,MAAM,wBAAwB,YAAa,OAAO,WAAW,iBAAiB,SAuUpF,CAAA"}
|