gws-axi 0.12.0 → 0.14.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 +10 -2
- package/dist/src/cli.d.ts +1 -1
- package/dist/src/cli.js +6 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/docs/diff.d.ts +23 -0
- package/dist/src/commands/docs/diff.js +212 -0
- package/dist/src/commands/docs/diff.js.map +1 -0
- package/dist/src/commands/docs/diff.test.d.ts +1 -0
- package/dist/src/commands/docs/diff.test.js +84 -0
- package/dist/src/commands/docs/diff.test.js.map +1 -0
- package/dist/src/commands/docs/download.js +35 -60
- package/dist/src/commands/docs/download.js.map +1 -1
- package/dist/src/commands/docs/read.d.ts +1 -1
- package/dist/src/commands/docs/read.js +45 -5
- package/dist/src/commands/docs/read.js.map +1 -1
- package/dist/src/commands/docs/revision-content.d.ts +41 -0
- package/dist/src/commands/docs/revision-content.js +97 -0
- package/dist/src/commands/docs/revision-content.js.map +1 -0
- package/dist/src/commands/docs.js +4 -0
- package/dist/src/commands/docs.js.map +1 -1
- package/dist/src/commands/drive/upload.d.ts +3 -1
- package/dist/src/commands/drive/upload.js +123 -30
- package/dist/src/commands/drive/upload.js.map +1 -1
- package/dist/src/commands/drive/upload.test.js +50 -6
- package/dist/src/commands/drive/upload.test.js.map +1 -1
- package/dist/src/commands/setup.d.ts +2 -0
- package/dist/src/commands/setup.js +25 -0
- package/dist/src/commands/setup.js.map +1 -0
- package/dist/src/commands/setup.test.d.ts +1 -0
- package/dist/src/commands/setup.test.js +27 -0
- package/dist/src/commands/setup.test.js.map +1 -0
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ I want to authenticate the following Google accounts:
|
|
|
37
37
|
- personal@gmail.com
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
The explicit `gws-axi auth setup` in the prompt matters: this is your very first session, so the agent doesn't yet have any ambient context about `gws-axi`. Naming the first command gets the agent into the structured flow, where the CLI's output takes over.
|
|
40
|
+
The explicit `gws-axi auth setup` in the prompt matters: this is your very first session, so the agent doesn't yet have any ambient context about `gws-axi`. Naming the first command gets the agent into the structured flow, where the CLI's output takes over. Once you install the SessionStart hook (see [step 4](#4-make-gws-axi-your-agents-default-for-google-workspace)), every subsequent session auto-loads a compact `gws-axi` status line — so after that, you can skip the command and just say "use gws-axi to ..." and the agent knows.
|
|
41
41
|
|
|
42
42
|
Expect ~10 minutes end-to-end for a fresh Google Cloud project; ~3 minutes if you already have one you want to reuse.
|
|
43
43
|
|
|
@@ -54,7 +54,15 @@ gws-axi calendar events # upcoming 7 days on your primary calen
|
|
|
54
54
|
|
|
55
55
|
### 4. Make gws-axi your agent's default for Google Workspace
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
gws-axi gives agents two complementary ways to pick up ambient context (per [AXI principle 7](https://axi.md) — context is delivered through hooks and installable skills, and installation is always explicit opt-in, never a side effect of ordinary commands):
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
gws-axi setup hooks
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
This installs a **SessionStart hook** into your agent's config — Claude Code (`~/.claude/settings.json`), Codex (`~/.codex/hooks.json`), and OpenCode. From then on, every new agent session sees a compact `gws-axi` status line in ambient context — authenticated accounts, write-protection status, setup health. The command is idempotent and self-repairing: re-run it any time (e.g. after upgrading or moving the install) and it repairs a stale executable path without duplicating entries. There is no auto-install — the hook only appears when you run `setup hooks`.
|
|
64
|
+
|
|
65
|
+
The hook and an installable skill are the two ambient-context paths: the hook injects current state at session start, while a skill can teach the agent the full command surface on demand. Run `gws-axi setup hooks` to get the hook in place.
|
|
58
66
|
|
|
59
67
|
To make sure agents reach for `gws-axi` instead of stale alternatives, also consider:
|
|
60
68
|
|
package/dist/src/cli.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const TOP_HELP = "usage: gws-axi [command] [args] [flags]\ncommands[
|
|
1
|
+
export declare const TOP_HELP = "usage: gws-axi [command] [args] [flags]\ncommands[9]:\n (none)=home, auth, doctor, calendar, gmail, docs, drive, slides, setup\nflags[2]:\n --help, -v/-V/--version\nexamples:\n gws-axi\n gws-axi auth setup\n gws-axi doctor\n gws-axi calendar events\n gws-axi setup hooks\n";
|
|
2
2
|
export declare function main(): Promise<void>;
|
package/dist/src/cli.js
CHANGED
|
@@ -10,11 +10,12 @@ import { gmailCommand } from "./commands/gmail.js";
|
|
|
10
10
|
import { docsCommand } from "./commands/docs.js";
|
|
11
11
|
import { driveCommand } from "./commands/drive.js";
|
|
12
12
|
import { slidesCommand } from "./commands/slides.js";
|
|
13
|
+
import { setupCommand, SETUP_HELP } from "./commands/setup.js";
|
|
13
14
|
const DESCRIPTION = "Agent ergonomic CLI for Google Workspace. Unified interface for Gmail, Calendar, Docs, Drive, and Slides with agent-guided OAuth setup.";
|
|
14
15
|
const VERSION = readPackageVersion();
|
|
15
16
|
export const TOP_HELP = `usage: gws-axi [command] [args] [flags]
|
|
16
|
-
commands[
|
|
17
|
-
(none)=home, auth, doctor, calendar, gmail, docs, drive, slides
|
|
17
|
+
commands[9]:
|
|
18
|
+
(none)=home, auth, doctor, calendar, gmail, docs, drive, slides, setup
|
|
18
19
|
flags[2]:
|
|
19
20
|
--help, -v/-V/--version
|
|
20
21
|
examples:
|
|
@@ -22,6 +23,7 @@ examples:
|
|
|
22
23
|
gws-axi auth setup
|
|
23
24
|
gws-axi doctor
|
|
24
25
|
gws-axi calendar events
|
|
26
|
+
gws-axi setup hooks
|
|
25
27
|
`;
|
|
26
28
|
// Services that have real subcommand dispatchers handle --help themselves
|
|
27
29
|
// (so `<service> <sub> --help` shows subcommand-specific help). For stubs
|
|
@@ -29,13 +31,13 @@ examples:
|
|
|
29
31
|
const COMMAND_HELP = {
|
|
30
32
|
auth: AUTH_HELP,
|
|
31
33
|
doctor: DOCTOR_HELP,
|
|
34
|
+
setup: SETUP_HELP,
|
|
32
35
|
};
|
|
33
36
|
export async function main() {
|
|
34
37
|
await runAxiCli({
|
|
35
38
|
description: DESCRIPTION,
|
|
36
39
|
version: VERSION,
|
|
37
40
|
topLevelHelp: TOP_HELP,
|
|
38
|
-
...(process.env.GWS_AXI_DISABLE_HOOKS === "1" ? { hooks: false } : {}),
|
|
39
41
|
home: async () => homeCommand(),
|
|
40
42
|
commands: {
|
|
41
43
|
auth: authCommand,
|
|
@@ -45,6 +47,7 @@ export async function main() {
|
|
|
45
47
|
docs: docsCommand,
|
|
46
48
|
drive: driveCommand,
|
|
47
49
|
slides: slidesCommand,
|
|
50
|
+
setup: setupCommand,
|
|
48
51
|
},
|
|
49
52
|
getCommandHelp: (command) => COMMAND_HELP[command],
|
|
50
53
|
});
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,WAAW,GACf,yIAAyI,CAAC;AAE5I,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;AAErC,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;CAWvB,CAAC;AAEF,0EAA0E;AAC1E,0EAA0E;AAC1E,iEAAiE;AACjE,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,UAAU;CAClB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,SAAS,CAAC;QACd,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,QAAQ;QACtB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,WAAW,EAAE;QAC/B,QAAQ,EAAE;YACR,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE,eAAe;YACzB,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,YAAY;SACpB;QACD,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;KACnD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAErD,KAAK,MAAM,SAAS,IAAI;QACtB,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC;KACvC,EAAE,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAEzD,CAAC;QACF,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpE,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const DIFF_HELP = "usage: gws-axi docs diff <fileId> <revA> [revB] [flags]\nargs[3]:\n <fileId> The Google Doc / Drive file ID (the portion of the URL after /d/)\n <revA> The \"from\" revision id (from `gws-axi docs revisions <fileId>`)\n <revB> The \"to\" revision id (optional; defaults to the head revision)\nflags[3]:\n --full Don't truncate the diff (default cap: 8000 chars)\n --out <path> Write the full unified diff to a file (implies --full)\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi docs diff 1Kc9mv... 841 865\n gws-axi docs diff 1Kc9mv... 841 # 841 vs head\n gws-axi docs diff 1Kc9mv... 841 865 --out ./change.diff\noutput:\n A `document{id,name,type}` header, `from{revision,modified,author}` and\n `to{revision,modified,author}` provenance blocks, a `summary{lines_added,\n lines_removed,changed}`, and a `diff` block of the unified diff (truncated\n unless --full/--out). The diff shows the changes that transform revA into revB.\nnotes:\n Native Google Docs only. Google exposes no diff API, so this exports BOTH\n revisions to markdown server-side and diffs them locally \u2014 the result is a\n diff of two markdown exports (lossy relevance previews), NOT a faithful\n editorial diff: formatting-only or Google-specific changes may be invisible,\n and native revision history is itself a sparse sample.\n";
|
|
2
|
+
interface ParsedFlags {
|
|
3
|
+
fileId: string;
|
|
4
|
+
revA: string;
|
|
5
|
+
revB: string | undefined;
|
|
6
|
+
full: boolean;
|
|
7
|
+
out: string | undefined;
|
|
8
|
+
}
|
|
9
|
+
export declare function parseFlags(args: string[]): ParsedFlags;
|
|
10
|
+
export interface DiffResult {
|
|
11
|
+
unified: string;
|
|
12
|
+
linesAdded: number;
|
|
13
|
+
linesRemoved: number;
|
|
14
|
+
changed: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Compute a unified diff (and added/removed line counts) of two text blobs.
|
|
18
|
+
* Argument order is respected — the diff transforms `textA` into `textB`.
|
|
19
|
+
* Pure (no I/O) so it's unit-testable.
|
|
20
|
+
*/
|
|
21
|
+
export declare function computeDiff(labelA: string, labelB: string, textA: string, textB: string, headerA?: string, headerB?: string): DiffResult;
|
|
22
|
+
export declare function docsDiffCommand(account: string, args: string[]): Promise<string>;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { AxiError } from "axi-sdk-js";
|
|
4
|
+
import { createTwoFilesPatch, structuredPatch } from "diff";
|
|
5
|
+
import { driveClient, translateGoogleError } from "../../google/client.js";
|
|
6
|
+
import { joinBlocks, renderHelp, renderObject } from "../../output/index.js";
|
|
7
|
+
import { resolveOutputPath } from "../../util/paths.js";
|
|
8
|
+
import { fetchNativeRevisionExport, listRecentRevisions, } from "./revision-content.js";
|
|
9
|
+
export const DIFF_HELP = `usage: gws-axi docs diff <fileId> <revA> [revB] [flags]
|
|
10
|
+
args[3]:
|
|
11
|
+
<fileId> The Google Doc / Drive file ID (the portion of the URL after /d/)
|
|
12
|
+
<revA> The "from" revision id (from \`gws-axi docs revisions <fileId>\`)
|
|
13
|
+
<revB> The "to" revision id (optional; defaults to the head revision)
|
|
14
|
+
flags[3]:
|
|
15
|
+
--full Don't truncate the diff (default cap: 8000 chars)
|
|
16
|
+
--out <path> Write the full unified diff to a file (implies --full)
|
|
17
|
+
--account <email> Account override when 2+ are configured
|
|
18
|
+
examples:
|
|
19
|
+
gws-axi docs diff 1Kc9mv... 841 865
|
|
20
|
+
gws-axi docs diff 1Kc9mv... 841 # 841 vs head
|
|
21
|
+
gws-axi docs diff 1Kc9mv... 841 865 --out ./change.diff
|
|
22
|
+
output:
|
|
23
|
+
A \`document{id,name,type}\` header, \`from{revision,modified,author}\` and
|
|
24
|
+
\`to{revision,modified,author}\` provenance blocks, a \`summary{lines_added,
|
|
25
|
+
lines_removed,changed}\`, and a \`diff\` block of the unified diff (truncated
|
|
26
|
+
unless --full/--out). The diff shows the changes that transform revA into revB.
|
|
27
|
+
notes:
|
|
28
|
+
Native Google Docs only. Google exposes no diff API, so this exports BOTH
|
|
29
|
+
revisions to markdown server-side and diffs them locally — the result is a
|
|
30
|
+
diff of two markdown exports (lossy relevance previews), NOT a faithful
|
|
31
|
+
editorial diff: formatting-only or Google-specific changes may be invisible,
|
|
32
|
+
and native revision history is itself a sparse sample.
|
|
33
|
+
`;
|
|
34
|
+
const DEFAULT_TRUNCATE_CHARS = 8000;
|
|
35
|
+
export function parseFlags(args) {
|
|
36
|
+
const positionals = [];
|
|
37
|
+
let full = false;
|
|
38
|
+
let out;
|
|
39
|
+
for (let i = 0; i < args.length; i++) {
|
|
40
|
+
const arg = args[i];
|
|
41
|
+
const next = args[i + 1];
|
|
42
|
+
switch (arg) {
|
|
43
|
+
case "--full":
|
|
44
|
+
full = true;
|
|
45
|
+
break;
|
|
46
|
+
case "--out":
|
|
47
|
+
out = next;
|
|
48
|
+
i++;
|
|
49
|
+
break;
|
|
50
|
+
default:
|
|
51
|
+
if (!arg.startsWith("--"))
|
|
52
|
+
positionals.push(arg);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const [fileId, revA, revB] = positionals;
|
|
56
|
+
if (!fileId || !revA) {
|
|
57
|
+
throw new AxiError("docs diff needs a fileId and at least one revision", "VALIDATION_ERROR", [
|
|
58
|
+
"Usage: gws-axi docs diff <fileId> <revA> [revB]",
|
|
59
|
+
"List revision ids with `gws-axi docs revisions <fileId>`",
|
|
60
|
+
]);
|
|
61
|
+
}
|
|
62
|
+
// --out writes the full diff; truncation only protects an inline response.
|
|
63
|
+
if (out)
|
|
64
|
+
full = true;
|
|
65
|
+
return { fileId, revA, revB, full, out };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Compute a unified diff (and added/removed line counts) of two text blobs.
|
|
69
|
+
* Argument order is respected — the diff transforms `textA` into `textB`.
|
|
70
|
+
* Pure (no I/O) so it's unit-testable.
|
|
71
|
+
*/
|
|
72
|
+
export function computeDiff(labelA, labelB, textA, textB, headerA = "", headerB = "") {
|
|
73
|
+
const patch = structuredPatch(labelA, labelB, textA, textB, "", "");
|
|
74
|
+
let linesAdded = 0;
|
|
75
|
+
let linesRemoved = 0;
|
|
76
|
+
for (const hunk of patch.hunks) {
|
|
77
|
+
for (const line of hunk.lines) {
|
|
78
|
+
if (line.startsWith("+"))
|
|
79
|
+
linesAdded++;
|
|
80
|
+
else if (line.startsWith("-"))
|
|
81
|
+
linesRemoved++;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
unified: createTwoFilesPatch(labelA, labelB, textA, textB, headerA, headerB),
|
|
86
|
+
linesAdded,
|
|
87
|
+
linesRemoved,
|
|
88
|
+
changed: textA !== textB,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export async function docsDiffCommand(account, args) {
|
|
92
|
+
const flags = parseFlags(args);
|
|
93
|
+
const api = await driveClient(account);
|
|
94
|
+
// Step 1: metadata — name + native classification.
|
|
95
|
+
let meta;
|
|
96
|
+
try {
|
|
97
|
+
const res = await api.files.get({
|
|
98
|
+
fileId: flags.fileId,
|
|
99
|
+
fields: "id,name,mimeType",
|
|
100
|
+
supportsAllDrives: true,
|
|
101
|
+
});
|
|
102
|
+
meta = {
|
|
103
|
+
name: res.data.name ?? "(unnamed)",
|
|
104
|
+
mimeType: res.data.mimeType ?? "application/octet-stream",
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const translated = translateGoogleError(err, {
|
|
109
|
+
account,
|
|
110
|
+
operation: "drive.files.get",
|
|
111
|
+
});
|
|
112
|
+
if (translated.code === "NOT_FOUND") {
|
|
113
|
+
throw new AxiError(`File '${flags.fileId}' not found (or ${account} doesn't have access)`, "FILE_NOT_FOUND", [
|
|
114
|
+
"Verify the file ID is correct (the portion of the URL after /d/)",
|
|
115
|
+
`Confirm ${account} has at least view access to the file`,
|
|
116
|
+
]);
|
|
117
|
+
}
|
|
118
|
+
throw translated;
|
|
119
|
+
}
|
|
120
|
+
if (!meta.mimeType.startsWith("application/vnd.google-apps.")) {
|
|
121
|
+
throw new AxiError(`'${flags.fileId}' is not a native Google Doc — diff compares markdown exports, which binary files don't have`, "NON_NATIVE_DOCUMENT", [
|
|
122
|
+
`Compare size/mime across revisions with \`gws-axi drive revisions ${flags.fileId} --full\``,
|
|
123
|
+
`Or fetch each revision's bytes with \`gws-axi docs download ${flags.fileId} --revision <id>\` and diff locally`,
|
|
124
|
+
]);
|
|
125
|
+
}
|
|
126
|
+
// Step 2: resolve revB → head when omitted.
|
|
127
|
+
let revB = flags.revB;
|
|
128
|
+
if (!revB) {
|
|
129
|
+
const head = await listRecentRevisions(api, flags.fileId, 1);
|
|
130
|
+
if (head.length === 0) {
|
|
131
|
+
throw new AxiError(`No revisions found for '${flags.fileId}'`, "REVISION_NOT_FOUND", [`List revisions with \`gws-axi docs revisions ${flags.fileId}\``]);
|
|
132
|
+
}
|
|
133
|
+
revB = head[0].id;
|
|
134
|
+
}
|
|
135
|
+
// Step 3: export both revisions to markdown (server-side), in parallel.
|
|
136
|
+
// A bad id surfaces as REVISION_NOT_FOUND from the helper.
|
|
137
|
+
const [exportA, exportB] = await Promise.all([
|
|
138
|
+
fetchNativeRevisionExport(api, account, flags.fileId, flags.revA, undefined),
|
|
139
|
+
fetchNativeRevisionExport(api, account, flags.fileId, revB, undefined),
|
|
140
|
+
]);
|
|
141
|
+
const textA = exportA.bytes.toString("utf8");
|
|
142
|
+
const textB = exportB.bytes.toString("utf8");
|
|
143
|
+
// Step 4: compute the diff. Argument order is respected (revA → revB);
|
|
144
|
+
// never reordered chronologically.
|
|
145
|
+
const labelA = `r${flags.revA}`;
|
|
146
|
+
const labelB = `r${revB}`;
|
|
147
|
+
const { unified, linesAdded, linesRemoved, changed, } = computeDiff(labelA, labelB, textA, textB, exportA.modified, exportB.modified);
|
|
148
|
+
const blocks = [];
|
|
149
|
+
blocks.push(renderObject({ account }));
|
|
150
|
+
blocks.push(renderObject({
|
|
151
|
+
document: { id: flags.fileId, name: meta.name, type: "native" },
|
|
152
|
+
}));
|
|
153
|
+
blocks.push(renderObject({
|
|
154
|
+
from: {
|
|
155
|
+
revision: flags.revA,
|
|
156
|
+
modified: exportA.modified,
|
|
157
|
+
author: exportA.author,
|
|
158
|
+
},
|
|
159
|
+
}));
|
|
160
|
+
blocks.push(renderObject({
|
|
161
|
+
to: { revision: revB, modified: exportB.modified, author: exportB.author },
|
|
162
|
+
}));
|
|
163
|
+
blocks.push(renderObject({
|
|
164
|
+
summary: {
|
|
165
|
+
lines_added: linesAdded,
|
|
166
|
+
lines_removed: linesRemoved,
|
|
167
|
+
changed,
|
|
168
|
+
},
|
|
169
|
+
}));
|
|
170
|
+
const suggestions = [];
|
|
171
|
+
if (!changed) {
|
|
172
|
+
// Identical markdown exports — which does NOT prove the source revisions
|
|
173
|
+
// were identical, only their previews.
|
|
174
|
+
blocks.push(renderObject({
|
|
175
|
+
diff: "no differences (the two markdown exports are identical)",
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
const total = unified.length;
|
|
180
|
+
if (flags.out) {
|
|
181
|
+
const defaultName = `${stripExt(meta.name)}.r${flags.revA}-r${revB}.diff`;
|
|
182
|
+
const outPath = await resolveOutputPath(flags.out, defaultName);
|
|
183
|
+
await mkdir(dirname(outPath), { recursive: true });
|
|
184
|
+
await writeFile(outPath, unified);
|
|
185
|
+
blocks.push(renderObject({ saved: outPath, diff_total_chars: total }));
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
const cap = flags.full ? Number.POSITIVE_INFINITY : DEFAULT_TRUNCATE_CHARS;
|
|
189
|
+
const truncated = total > cap;
|
|
190
|
+
blocks.push(renderObject({ diff: truncated ? `${unified.slice(0, cap)}…` : unified }));
|
|
191
|
+
if (truncated) {
|
|
192
|
+
blocks.push(renderObject({ diff_truncated: true, diff_total_chars: total }));
|
|
193
|
+
suggestions.push(`Run \`gws-axi docs diff ${flags.fileId} ${flags.revA} ${revB} --out <path>\` to save the full diff, or --full to expand inline`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
for (const n of [exportA.note, exportB.note]) {
|
|
198
|
+
if (n)
|
|
199
|
+
blocks.push(renderObject({ note: n }));
|
|
200
|
+
}
|
|
201
|
+
suggestions.push(`Fetch a side's full content: \`gws-axi docs download ${flags.fileId} --revision ${flags.revA}\` (or --revision ${revB})`);
|
|
202
|
+
suggestions.push(`List all revisions: \`gws-axi docs revisions ${flags.fileId}\``);
|
|
203
|
+
suggestions.push("Diff compares markdown exports (lossy) — formatting-only changes may be invisible, and native revision history is a sparse sample");
|
|
204
|
+
blocks.push(renderHelp(suggestions));
|
|
205
|
+
return joinBlocks(...blocks);
|
|
206
|
+
}
|
|
207
|
+
/** Strip a trailing extension from a filename, if present. */
|
|
208
|
+
function stripExt(name) {
|
|
209
|
+
const idx = name.lastIndexOf(".");
|
|
210
|
+
return idx > 0 ? name.slice(0, idx) : name;
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../src/commands/docs/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { AxiError } from "axi-sdk-js";
|
|
3
|
+
import { computeDiff, parseFlags } from "./diff.js";
|
|
4
|
+
describe("docs diff parseFlags", () => {
|
|
5
|
+
it("parses fileId + two revisions", () => {
|
|
6
|
+
const f = parseFlags(["1Kc9mv", "841", "865"]);
|
|
7
|
+
expect(f.fileId).toBe("1Kc9mv");
|
|
8
|
+
expect(f.revA).toBe("841");
|
|
9
|
+
expect(f.revB).toBe("865");
|
|
10
|
+
expect(f.full).toBe(false);
|
|
11
|
+
expect(f.out).toBeUndefined();
|
|
12
|
+
});
|
|
13
|
+
it("leaves revB undefined when only one revision is given (defaults to head later)", () => {
|
|
14
|
+
const f = parseFlags(["1Kc9mv", "841"]);
|
|
15
|
+
expect(f.revA).toBe("841");
|
|
16
|
+
expect(f.revB).toBeUndefined();
|
|
17
|
+
});
|
|
18
|
+
it("parses --full and --out (--out implies --full)", () => {
|
|
19
|
+
const f = parseFlags(["1Kc9mv", "841", "865", "--out", "./c.diff"]);
|
|
20
|
+
expect(f.out).toBe("./c.diff");
|
|
21
|
+
expect(f.full).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
it("preserves argument order — does not reorder revisions", () => {
|
|
24
|
+
const f = parseFlags(["1Kc9mv", "865", "841"]);
|
|
25
|
+
expect(f.revA).toBe("865");
|
|
26
|
+
expect(f.revB).toBe("841");
|
|
27
|
+
});
|
|
28
|
+
it("throws VALIDATION_ERROR with no revision", () => {
|
|
29
|
+
try {
|
|
30
|
+
parseFlags(["1Kc9mv"]);
|
|
31
|
+
throw new Error("should have thrown");
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
expect(err).toBeInstanceOf(AxiError);
|
|
35
|
+
expect(err.code).toBe("VALIDATION_ERROR");
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
it("throws VALIDATION_ERROR with no fileId", () => {
|
|
39
|
+
try {
|
|
40
|
+
parseFlags(["--full"]);
|
|
41
|
+
throw new Error("should have thrown");
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
expect(err.code).toBe("VALIDATION_ERROR");
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe("docs diff computeDiff", () => {
|
|
49
|
+
it("counts added and removed lines", () => {
|
|
50
|
+
const a = "one\ntwo\nthree\n";
|
|
51
|
+
const b = "one\ntwo\nthree\nfour\nfive\n";
|
|
52
|
+
const r = computeDiff("rA", "rB", a, b);
|
|
53
|
+
expect(r.changed).toBe(true);
|
|
54
|
+
expect(r.linesAdded).toBe(2);
|
|
55
|
+
expect(r.linesRemoved).toBe(0);
|
|
56
|
+
expect(r.unified).toContain("rA");
|
|
57
|
+
expect(r.unified).toContain("rB");
|
|
58
|
+
});
|
|
59
|
+
it("counts a replacement as both removed and added", () => {
|
|
60
|
+
const a = "alpha\nbeta\ngamma\n";
|
|
61
|
+
const b = "alpha\nBETA\ngamma\n";
|
|
62
|
+
const r = computeDiff("rA", "rB", a, b);
|
|
63
|
+
expect(r.linesAdded).toBe(1);
|
|
64
|
+
expect(r.linesRemoved).toBe(1);
|
|
65
|
+
});
|
|
66
|
+
it("reports changed=false for identical text", () => {
|
|
67
|
+
const same = "no change here\n";
|
|
68
|
+
const r = computeDiff("rA", "rB", same, same);
|
|
69
|
+
expect(r.changed).toBe(false);
|
|
70
|
+
expect(r.linesAdded).toBe(0);
|
|
71
|
+
expect(r.linesRemoved).toBe(0);
|
|
72
|
+
});
|
|
73
|
+
it("respects argument order (reverse is the inverse diff)", () => {
|
|
74
|
+
const a = "one\ntwo\n";
|
|
75
|
+
const b = "one\ntwo\nthree\n";
|
|
76
|
+
const forward = computeDiff("rA", "rB", a, b);
|
|
77
|
+
const reverse = computeDiff("rB", "rA", b, a);
|
|
78
|
+
expect(forward.linesAdded).toBe(1);
|
|
79
|
+
expect(forward.linesRemoved).toBe(0);
|
|
80
|
+
expect(reverse.linesAdded).toBe(0);
|
|
81
|
+
expect(reverse.linesRemoved).toBe(1);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=diff.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.test.js","sourceRoot":"","sources":["../../../../src/commands/docs/diff.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { writeFile, mkdir } from "node:fs/promises";
|
|
2
2
|
import { basename, dirname, extname } from "node:path";
|
|
3
3
|
import { AxiError } from "axi-sdk-js";
|
|
4
|
-
import { driveClient,
|
|
4
|
+
import { driveClient, translateGoogleError } from "../../google/client.js";
|
|
5
5
|
import { joinBlocks, renderHelp, renderObject } from "../../output/index.js";
|
|
6
6
|
import { resolveOutputPath } from "../../util/paths.js";
|
|
7
|
+
import { fetchNativeRevisionExport } from "./revision-content.js";
|
|
7
8
|
export const DOWNLOAD_HELP = `usage: gws-axi docs download <documentId> [flags]
|
|
8
9
|
args[1]:
|
|
9
10
|
<documentId> The Google Doc / Drive file ID (from the URL after /d/)
|
|
@@ -239,69 +240,21 @@ export async function docsDownloadCommand(account, args) {
|
|
|
239
240
|
*/
|
|
240
241
|
async function downloadRevision(api, account, flags, meta, isNative) {
|
|
241
242
|
const revisionId = flags.revision;
|
|
242
|
-
// Fetch the revision metadata: modifiedTime + (native) exportLinks.
|
|
243
|
-
let revision;
|
|
244
|
-
try {
|
|
245
|
-
const res = await api.revisions.get({
|
|
246
|
-
fileId: flags.documentId,
|
|
247
|
-
revisionId,
|
|
248
|
-
fields: "id,modifiedTime,exportLinks",
|
|
249
|
-
});
|
|
250
|
-
revision = res.data;
|
|
251
|
-
}
|
|
252
|
-
catch (err) {
|
|
253
|
-
const translated = translateGoogleError(err, {
|
|
254
|
-
account,
|
|
255
|
-
operation: "drive.revisions.get",
|
|
256
|
-
});
|
|
257
|
-
if (translated.code === "NOT_FOUND") {
|
|
258
|
-
throw new AxiError(`Revision '${revisionId}' not found on file '${flags.documentId}'`, "REVISION_NOT_FOUND", [
|
|
259
|
-
`List valid revisions with \`gws-axi drive revisions ${flags.documentId}\``,
|
|
260
|
-
]);
|
|
261
|
-
}
|
|
262
|
-
throw translated;
|
|
263
|
-
}
|
|
264
243
|
let bytes;
|
|
265
244
|
let effectiveMime;
|
|
266
245
|
let extension;
|
|
246
|
+
let revisionModified = "";
|
|
267
247
|
const notes = [];
|
|
268
248
|
if (isNative) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
if (fallback) {
|
|
279
|
-
chosen = fallbackMime;
|
|
280
|
-
url = fallback;
|
|
281
|
-
notes.push(`text/markdown not available for this revision — exported as ${fallbackMime} instead`);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
if (!url) {
|
|
285
|
-
throw new AxiError(`Export format ${requested} not available for revision ${revisionId}`, "EXPORT_FORMAT_REQUIRED", [
|
|
286
|
-
`Available formats: ${Object.keys(links).join(", ") || "(none)"}`,
|
|
287
|
-
"Pass a supported --as <mime>",
|
|
288
|
-
]);
|
|
289
|
-
}
|
|
290
|
-
effectiveMime = chosen;
|
|
291
|
-
extension = EXTENSION_BY_MIME[chosen] ?? "";
|
|
292
|
-
// exportLinks are arbitrary URLs (not a googleapis method), so fetch
|
|
293
|
-
// directly with the account's bearer token.
|
|
294
|
-
const auth = await oauthClientForAccount(account);
|
|
295
|
-
const { token } = await auth.getAccessToken();
|
|
296
|
-
const resp = await fetch(url, {
|
|
297
|
-
headers: { Authorization: `Bearer ${token}` },
|
|
298
|
-
});
|
|
299
|
-
if (!resp.ok) {
|
|
300
|
-
throw new AxiError(`Failed to export revision ${revisionId} as ${chosen} (HTTP ${resp.status})`, "REVISION_CONTENT_UNAVAILABLE", [
|
|
301
|
-
`List valid revisions with \`gws-axi drive revisions ${flags.documentId}\``,
|
|
302
|
-
]);
|
|
303
|
-
}
|
|
304
|
-
bytes = Buffer.from(await resp.arrayBuffer());
|
|
249
|
+
// Native: export the revision via its exportLinks (markdown default with
|
|
250
|
+
// fallback when --as is omitted). Shared with `docs diff`.
|
|
251
|
+
const exported = await fetchNativeRevisionExport(api, account, flags.documentId, revisionId, flags.as);
|
|
252
|
+
bytes = exported.bytes;
|
|
253
|
+
effectiveMime = exported.mime;
|
|
254
|
+
extension = EXTENSION_BY_MIME[exported.mime] ?? "";
|
|
255
|
+
revisionModified = exported.modified;
|
|
256
|
+
if (exported.note)
|
|
257
|
+
notes.push(exported.note);
|
|
305
258
|
}
|
|
306
259
|
else {
|
|
307
260
|
if (flags.as) {
|
|
@@ -309,6 +262,28 @@ async function downloadRevision(api, account, flags, meta, isNative) {
|
|
|
309
262
|
}
|
|
310
263
|
effectiveMime = meta.mimeType;
|
|
311
264
|
extension = extname(meta.name) || EXTENSION_BY_MIME[effectiveMime] || "";
|
|
265
|
+
// Binary: a metadata get resolves modifiedTime and surfaces a bad id as
|
|
266
|
+
// REVISION_NOT_FOUND before we attempt the media download.
|
|
267
|
+
try {
|
|
268
|
+
const metaRes = await api.revisions.get({
|
|
269
|
+
fileId: flags.documentId,
|
|
270
|
+
revisionId,
|
|
271
|
+
fields: "id,modifiedTime",
|
|
272
|
+
});
|
|
273
|
+
revisionModified = metaRes.data.modifiedTime ?? "";
|
|
274
|
+
}
|
|
275
|
+
catch (err) {
|
|
276
|
+
const translated = translateGoogleError(err, {
|
|
277
|
+
account,
|
|
278
|
+
operation: "drive.revisions.get",
|
|
279
|
+
});
|
|
280
|
+
if (translated.code === "NOT_FOUND") {
|
|
281
|
+
throw new AxiError(`Revision '${revisionId}' not found on file '${flags.documentId}'`, "REVISION_NOT_FOUND", [
|
|
282
|
+
`List valid revisions with \`gws-axi drive revisions ${flags.documentId}\``,
|
|
283
|
+
]);
|
|
284
|
+
}
|
|
285
|
+
throw translated;
|
|
286
|
+
}
|
|
312
287
|
try {
|
|
313
288
|
const res = await api.revisions.get({ fileId: flags.documentId, revisionId, alt: "media" }, { responseType: "arraybuffer" });
|
|
314
289
|
bytes = Buffer.from(res.data);
|
|
@@ -342,7 +317,7 @@ async function downloadRevision(api, account, flags, meta, isNative) {
|
|
|
342
317
|
saved_mime_type: effectiveMime,
|
|
343
318
|
size_bytes: bytes.length,
|
|
344
319
|
revision: revisionId,
|
|
345
|
-
revision_modified:
|
|
320
|
+
revision_modified: revisionModified,
|
|
346
321
|
},
|
|
347
322
|
}));
|
|
348
323
|
blocks.push(renderObject({ saved: outPath }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../src/commands/docs/download.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../src/commands/docs/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const READ_HELP = "usage: gws-axi docs read <documentId> [flags]\nargs[1]:\n <documentId> The Google Doc ID (from the URL after /d/)\nflags[4]:\n --tab <id> Tab ID to render (omit for single-tab docs; required for multi-tab)\n --full Don't truncate the rendered markdown (default cap: 8000 chars)\n --out <path> Write the rendered markdown to a file (implies --full).\n Accepts a file path or directory; directories get\n `<title>.md` appended. When set, the TOON response\n carries a `saved` field instead of the content block.\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi docs read 1BxAbc...\n gws-axi docs read 1BxAbc... --tab t.0\n gws-axi docs read 1BxAbc... --tab t.1.0 --full\n gws-axi docs read 1BxAbc... --out ./notes.md\noutput:\n A `document{id,title,tab,revision_id}` header, a `tabs[N]{id,title,index,parent,active}`\n listing (always shown, with \u2713 on the active tab if any), and \u2014 when a tab is
|
|
1
|
+
export declare const READ_HELP = "usage: gws-axi docs read <documentId> [flags]\nargs[1]:\n <documentId> The Google Doc ID (from the URL after /d/)\nflags[4]:\n --tab <id> Tab ID to render (omit for single-tab docs; required for multi-tab)\n --full Don't truncate the rendered markdown (default cap: 8000 chars)\n --out <path> Write the rendered markdown to a file (implies --full).\n Accepts a file path or directory; directories get\n `<title>.md` appended. When set, the TOON response\n carries a `saved` field instead of the content block.\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi docs read 1BxAbc...\n gws-axi docs read 1BxAbc... --tab t.0\n gws-axi docs read 1BxAbc... --tab t.1.0 --full\n gws-axi docs read 1BxAbc... --out ./notes.md\noutput:\n A `document{id,title,tab,revision_id}` header, a `tabs[N]{id,title,index,parent,active}`\n listing (always shown, with \u2713 on the active tab if any), a `revisions[N]{id,modified,author}`\n block of the 5 most recent revisions (always shown \u2014 provenance travels with the\n content), and \u2014 when a tab is rendered \u2014 either a `content` block of GitHub-flavored\n markdown (inline, truncated unless --full) or a `saved` path (when --out is set).\n Multi-tab docs without --tab return only the tabs listing so the agent can pick one.\n help[] funnels to `docs revisions`, `docs download --revision`, and `docs diff`.\n";
|
|
2
2
|
export declare function docsReadCommand(account: string, args: string[]): Promise<string>;
|