gws-axi 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/src/cli.js CHANGED
@@ -8,7 +8,7 @@ import { doctorCommand, DOCTOR_HELP } from "./commands/doctor.js";
8
8
  import { calendarCommand } from "./commands/calendar.js";
9
9
  import { gmailCommand } from "./commands/gmail.js";
10
10
  import { docsCommand } from "./commands/docs.js";
11
- import { driveCommand, DRIVE_HELP } from "./commands/drive.js";
11
+ import { driveCommand } from "./commands/drive.js";
12
12
  import { slidesCommand, SLIDES_HELP } from "./commands/slides.js";
13
13
  const DESCRIPTION = "Agent ergonomic CLI for Google Workspace. Unified interface for Gmail, Calendar, Docs, Drive, and Slides with agent-guided OAuth setup.";
14
14
  const VERSION = readPackageVersion();
@@ -29,7 +29,6 @@ examples:
29
29
  const COMMAND_HELP = {
30
30
  auth: AUTH_HELP,
31
31
  doctor: DOCTOR_HELP,
32
- drive: DRIVE_HELP,
33
32
  slides: SLIDES_HELP,
34
33
  };
35
34
  export async function main() {
@@ -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,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,WAAW,GACf,yIAAyI,CAAC;AAE5I,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;AAErC,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;CAUvB,CAAC;AAEF,0EAA0E;AAC1E,0EAA0E;AAC1E,iEAAiE;AACjE,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,SAAS,CAAC;QACd,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,QAAQ;QACtB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,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;SACtB;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"}
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,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,WAAW,GACf,yIAAyI,CAAC;AAE5I,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;AAErC,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;CAUvB,CAAC;AAEF,0EAA0E;AAC1E,0EAA0E;AAC1E,iEAAiE;AACjE,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,SAAS,CAAC;QACd,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,QAAQ;QACtB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,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;SACtB;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"}
@@ -1,2 +1,2 @@
1
- export declare const EVENTS_HELP = "usage: gws-axi calendar events [flags]\nflags[8]:\n --calendar <id> Calendar to query (default: \"primary\")\n --from <iso> Earliest event start (default: now)\n --to <iso> Latest event start (default: 7 days from now)\n --limit <n> Max events to return (default: 25, max: 2500)\n --query <text> Full-text search across summary/description/location/attendees\n --single-events Expand recurring events into individual instances (default: true)\n --fields <list> Extra columns: status, organizer, location, attendees, description, htmlLink, hangoutLink\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi calendar events\n gws-axi calendar events --from 2026-04-20T00:00 --to 2026-04-21T00:00\n gws-axi calendar events --calendar team@jarv.us --limit 50\n gws-axi calendar events --query standup\n gws-axi calendar events --fields status,attendees,location\ntime formats:\n Timed events: ISO 8601 with offset \u2014 2026-04-20T14:00:00-04:00\n Local time: 2026-04-20T14:00 (interpreted as local tz)\n Date-only: 2026-04-20 (midnight local)\noutput note:\n The start/end columns use datetime (with offset) for timed events\n and date-only strings for all-day events. Agents parsing these\n columns must handle both formats.\ndefault columns:\n id, summary, start, end, my_response (your responseStatus if you're\n an attendee; blank for self-organized events with no attendee list),\n attachments (compact count; \"(N Docs)\" suffix when meeting notes /\n Gemini Notes Docs are attached \u2014 chase any with `calendar get <id>`\n to see file_ids and hand off to `docs read`).\n status column suppressed by default (most events are \"confirmed\" \u2014\n add --fields status to see cancelled/tentative).\n";
1
+ export declare const EVENTS_HELP = "usage: gws-axi calendar events [flags]\nflags[8]:\n --calendar <id> Calendar to query (default: \"primary\")\n --from <iso> Earliest event start (default: now)\n --to <iso> Latest event start (default: 7 days from now)\n --limit <n> Max events to return (default: 100, max: 2500)\n --query <text> Full-text search across summary/description/location/attendees\n --single-events Expand recurring events into individual instances (default: true)\n --fields <list> Extra columns: status, organizer, location, attendees, description, htmlLink, hangoutLink\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi calendar events\n gws-axi calendar events --from 2026-04-20T00:00 --to 2026-04-21T00:00\n gws-axi calendar events --calendar team@jarv.us --limit 50\n gws-axi calendar events --query standup\n gws-axi calendar events --fields status,attendees,location\ntime formats:\n Timed events: ISO 8601 with offset \u2014 2026-04-20T14:00:00-04:00\n Local time: 2026-04-20T14:00 (interpreted as local tz)\n Date-only: 2026-04-20 (midnight local)\noutput note:\n The start/end columns use datetime (with offset) for timed events\n and date-only strings for all-day events. Agents parsing these\n columns must handle both formats.\ndefault columns:\n id, summary, start, end, my_response (your responseStatus if you're\n an attendee; blank for self-organized events with no attendee list),\n attachments (compact count; \"(N Docs)\" suffix when meeting notes /\n Gemini Notes Docs are attached \u2014 chase any with `calendar get <id>`\n to see file_ids and hand off to `docs read`).\n status column suppressed by default (most events are \"confirmed\" \u2014\n add --fields status to see cancelled/tentative).\n";
2
2
  export declare function calendarEventsCommand(account: string, args: string[]): Promise<string>;
@@ -7,7 +7,7 @@ flags[8]:
7
7
  --calendar <id> Calendar to query (default: "primary")
8
8
  --from <iso> Earliest event start (default: now)
9
9
  --to <iso> Latest event start (default: 7 days from now)
10
- --limit <n> Max events to return (default: 25, max: 2500)
10
+ --limit <n> Max events to return (default: 100, max: 2500)
11
11
  --query <text> Full-text search across summary/description/location/attendees
12
12
  --single-events Expand recurring events into individual instances (default: true)
13
13
  --fields <list> Extra columns: status, organizer, location, attendees, description, htmlLink, hangoutLink
@@ -40,7 +40,7 @@ function parseEventsFlags(args) {
40
40
  calendar: "primary",
41
41
  from: new Date().toISOString(),
42
42
  to: new Date(Date.now() + 7 * 24 * 3600 * 1000).toISOString(),
43
- limit: 25,
43
+ limit: 100,
44
44
  query: undefined,
45
45
  singleEvents: true,
46
46
  extraFields: [],
@@ -62,7 +62,7 @@ function parseEventsFlags(args) {
62
62
  i++;
63
63
  break;
64
64
  case "--limit":
65
- flags.limit = Math.min(2500, Math.max(1, parseInt(next, 10) || 25));
65
+ flags.limit = Math.min(2500, Math.max(1, parseInt(next, 10) || 100));
66
66
  i++;
67
67
  break;
68
68
  case "--query":
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/commands/calendar/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/commands/calendar/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACL,kBAAkB,EAClB,SAAS,GAEV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC1B,CAAC;AAYF,SAAS,gBAAgB,CAAC,IAAc;IACtC,MAAM,KAAK,GAAgB;QACzB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC9B,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;QAC7D,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,EAAE;KAChB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,YAAY;gBACf,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACtB,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,QAAQ;gBACX,KAAK,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,MAAM;gBACT,KAAK,CAAC,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,SAAS;gBACZ,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBACrE,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,SAAS;gBACZ,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBACnB,CAAC,EAAE,CAAC;gBACJ,MAAM;YACR,KAAK,iBAAiB;gBACpB,KAAK,CAAC,YAAY,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM;oBAAE,CAAC,EAAE,CAAC;gBAC7C,MAAM;YACR,KAAK,UAAU;gBACb,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACzE,CAAC,EAAE,CAAC;gBACJ,MAAM;QACV,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;QACL,KAAK,CAAC,IAAI,CAAC;QACX,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC;QACxB,yEAAyE;QACzE;YACE,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,MAAM,CAAC,GAAG,IAAI,CAAC,KAEF,CAAC;gBACd,OAAO,CAAC,EAAE,QAAQ,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YACtC,CAAC;SACF;QACD;YACE,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,MAAM,CAAC,GAAG,IAAI,CAAC,GAEF,CAAC;gBACd,OAAO,CAAC,EAAE,QAAQ,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YACtC,CAAC;SACF;QACD,oEAAoE;QACpE,mEAAmE;QACnE,qEAAqE;QACrE;YACE,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,MAAM,SAAS,GAAG,IAAI,CAAC,SAEV,CAAC;gBACd,IAAI,CAAC,SAAS,EAAE,MAAM;oBAAE,OAAO,EAAE,CAAC;gBAClC,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACzC,OAAO,EAAE,EAAE,cAAc,IAAI,EAAE,CAAC;YAClC,CAAC;SACF;QACD,mEAAmE;QACnE,mEAAmE;QACnE,mEAAmE;QACnE,8DAA8D;QAC9D;YACE,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,MAAM,CAAC,GAAG,IAAI,CAAC,WAEF,CAAC;gBACd,IAAI,CAAC,CAAC,EAAE,MAAM;oBAAE,OAAO,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CACnB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,sCAAsC,CAC7D,CAAC,MAAM,CAAC;gBACT,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM;oBAChC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;oBACrD,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACpB,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAgB;IACxC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,QAAQ;gBACX,IAAI,CAAC,IAAI,CACP,OAAO,CACL,QAAQ,EACR,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,EACnE,SAAS,CACV,CACF,CAAC;gBACF,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;gBACpD,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;gBACrC,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;wBAChB,MAAM,CAAC,GAAG,IAAI,CAAC,SAEF,CAAC;wBACd,IAAI,CAAC,CAAC,EAAE,MAAM;4BAAE,OAAO,EAAE,CAAC;wBAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CACrB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;4BACT,MAAM,GAAG,GAAG,CAAC,CAAC,cAAc,IAAI,OAAO,CAAC;4BACxC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;4BAC/B,OAAO,GAAG,CAAC;wBACb,CAAC,EACD,EAA4B,CAC7B,CAAC;wBACF,OAAO,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC3F,CAAC;iBACF,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,aAAa;gBAChB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;gBACzC,MAAM;YACR,KAAK,aAAa;gBAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;gBAChC,MAAM;YACR;gBACE,kEAAkE;gBAClE,yDAAyD;gBACzD,MAAM;QACV,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,IAAc;IAEd,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,aAAa,GAA4C;QAC7D,UAAU,EAAE,KAAK,CAAC,QAAQ;QAC1B,OAAO,EAAE,KAAK,CAAC,IAAI;QACnB,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,UAAU,EAAE,KAAK,CAAC,KAAK;QACvB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QACrD,CAAC,EAAE,KAAK,CAAC,KAAK;KACf,CAAC;IAEF,IAAI,IAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,EAAE;YAC3C,OAAO;YACP,SAAS,EAAE,sBAAsB;SAClC,CAAC,CAAC;QACH,sEAAsE;QACtE,kEAAkE;QAClE,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,MAAM,IAAI,QAAQ,CAChB,aAAa,KAAK,CAAC,QAAQ,cAAc,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,OAAO,uBAAuB,EAAE,EACrH,oBAAoB,EACpB;gBACE,8CAA8C,OAAO,iCAAiC;gBACtF,mCAAmC,OAAO,qBAAqB;aAChE,CACF,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAmC,CAAC;IACnE,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEnD,MAAM,MAAM,GAA4B,EAAE,OAAO,EAAE,CAAC;IACpD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,MAAM,OAAO,GAA4B;QACvC,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,EAAE;KACrC,CAAC;IACF,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,WAAW,CAAC,IAAI,CACd,mFAAmF,CACpF,CAAC;QACF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,WAAW,CAAC,IAAI,CACd,kFAAkF,KAAK,CAAC,KAAK,GAAG,CACjG,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,WAAW,CAAC,IAAI,CACd,iEAAiE,CAClE,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,WAAW,CAAC,IAAI,CACd,qGAAqG,CACtG,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,sEAAsE;QACtE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,WAAW,CAAC,IAAI,CACd,8EAA8E,CAC/E,CAAC;QACJ,CAAC;QACD,WAAW,CAAC,IAAI,CACd,uDAAuD,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,GAAG,CACnF,CAAC;QACF,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,WAAW,CAAC,IAAI,CACd,mGAAmG,CACpG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,kBAAkB,CAAC;QACxB,MAAM;QACN,OAAO;QACP,IAAI,EAAE,QAAQ;QACd,KAAK;QACL,MAAM;QACN,WAAW;QACX,YAAY,EAAE,KAAK,CAAC,KAAK;YACvB,CAAC,CAAC,sBAAsB,KAAK,CAAC,KAAK,2BAA2B;YAC9D,CAAC,CAAC,yCAAyC;KAC9C,CAAC,CAAC;AACL,CAAC"}
@@ -140,9 +140,10 @@ export async function docsCommentsCommand(account, args) {
140
140
  const blocks = [];
141
141
  blocks.push(renderObject({ account, document: flags.documentId }));
142
142
  if (commentRows.length === 0) {
143
- blocks.push(renderObject({ comments: [] }));
143
+ // AXI canonical empty-list: collapse to a scalar message under the
144
+ // same field name (rather than `comments[0]:` + `message:` sibling).
144
145
  blocks.push(renderObject({
145
- message: flags.includeResolved
146
+ comments: flags.includeResolved
146
147
  ? "no comments on this document"
147
148
  : "no open comments (pass --include-resolved to include resolved)",
148
149
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../../../src/commands/docs/comments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../../../src/commands/docs/comments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const GET_HELP = "usage: gws-axi drive get <file-id> [flags]\nargs[1]:\n <file-id> The Drive file ID (from the URL or `drive search` / ls output)\nflags[1]:\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi drive get 1AbC...\noutput:\n A `file{...}` object with name, mime_type, size, owners, parents,\n modified/created times, and view-link. For native Google files\n (Docs, Sheets, Slides) we include hints pointing at `docs read` /\n `docs download`; for other types, `drive download`.\n";
2
+ export declare function driveGetCommand(account: string, args: string[]): Promise<string>;
@@ -0,0 +1,112 @@
1
+ import { AxiError } from "axi-sdk-js";
2
+ import { driveClient, translateGoogleError } from "../../google/client.js";
3
+ import { joinBlocks, renderHelp, renderObject } from "../../output/index.js";
4
+ export const GET_HELP = `usage: gws-axi drive get <file-id> [flags]
5
+ args[1]:
6
+ <file-id> The Drive file ID (from the URL or \`drive search\` / ls output)
7
+ flags[1]:
8
+ --account <email> Account override when 2+ are configured
9
+ examples:
10
+ gws-axi drive get 1AbC...
11
+ output:
12
+ A \`file{...}\` object with name, mime_type, size, owners, parents,
13
+ modified/created times, and view-link. For native Google files
14
+ (Docs, Sheets, Slides) we include hints pointing at \`docs read\` /
15
+ \`docs download\`; for other types, \`drive download\`.
16
+ `;
17
+ function parseFlags(args) {
18
+ let fileId;
19
+ for (const arg of args) {
20
+ if (!arg.startsWith("--") && fileId === undefined) {
21
+ fileId = arg;
22
+ }
23
+ }
24
+ if (!fileId) {
25
+ throw new AxiError("Missing file ID argument", "VALIDATION_ERROR", ["Usage: gws-axi drive get <file-id>"]);
26
+ }
27
+ return { fileId };
28
+ }
29
+ const GET_FIELDS = "id,name,mimeType,size,createdTime,modifiedTime,owners(emailAddress,displayName),parents,description,trashed,starred,shared,webViewLink,iconLink,sha256Checksum,fileExtension";
30
+ export async function driveGetCommand(account, args) {
31
+ const flags = parseFlags(args);
32
+ const api = await driveClient(account);
33
+ let file;
34
+ try {
35
+ const res = await api.files.get({
36
+ fileId: flags.fileId,
37
+ fields: GET_FIELDS,
38
+ supportsAllDrives: true,
39
+ });
40
+ file = res.data;
41
+ }
42
+ catch (err) {
43
+ const translated = translateGoogleError(err, {
44
+ account,
45
+ operation: "drive.files.get",
46
+ });
47
+ if (translated.code === "NOT_FOUND") {
48
+ throw new AxiError(`File '${flags.fileId}' not found (or ${account} doesn't have access)`, "FILE_NOT_FOUND", [
49
+ `Verify the file ID is correct (from a Drive URL or \`drive search\`)`,
50
+ `Confirm ${account} has at least view access`,
51
+ ]);
52
+ }
53
+ throw translated;
54
+ }
55
+ const isNative = (file.mimeType ?? "").startsWith("application/vnd.google-apps.");
56
+ const isFolder = file.mimeType === "application/vnd.google-apps.folder";
57
+ const details = {
58
+ id: file.id ?? flags.fileId,
59
+ name: file.name ?? "",
60
+ mime_type: file.mimeType ?? "",
61
+ };
62
+ if (file.size)
63
+ details.size_bytes = parseInt(file.size, 10);
64
+ if (file.createdTime)
65
+ details.created = file.createdTime;
66
+ if (file.modifiedTime)
67
+ details.modified = file.modifiedTime;
68
+ if (file.owners?.length) {
69
+ details.owners = file.owners
70
+ .map((o) => o.emailAddress ?? o.displayName ?? "")
71
+ .filter(Boolean)
72
+ .join(", ");
73
+ }
74
+ if (file.parents?.length)
75
+ details.parents = file.parents.join(", ");
76
+ if (file.description)
77
+ details.description = file.description;
78
+ if (file.shared !== undefined)
79
+ details.shared = file.shared;
80
+ if (file.starred)
81
+ details.starred = true;
82
+ if (file.trashed)
83
+ details.trashed = true;
84
+ if (file.webViewLink)
85
+ details.web_view_link = file.webViewLink;
86
+ if (file.fileExtension)
87
+ details.file_extension = file.fileExtension;
88
+ const blocks = [];
89
+ blocks.push(renderObject({ account }));
90
+ blocks.push(renderObject({ file: details }));
91
+ const suggestions = [];
92
+ if (isFolder) {
93
+ suggestions.push(`Run \`gws-axi drive ls ${file.id} --recursive\` to walk this folder's contents`);
94
+ }
95
+ else if (file.mimeType === "application/vnd.google-apps.document") {
96
+ suggestions.push(`Run \`gws-axi docs read ${file.id}\` to read this Doc as markdown`);
97
+ suggestions.push(`Run \`gws-axi docs comments ${file.id}\` to see review comments`);
98
+ }
99
+ else if (isNative) {
100
+ suggestions.push(`Native Google file — run \`gws-axi docs download ${file.id} --as <mime>\` to export (e.g. application/pdf, text/csv)`);
101
+ }
102
+ else {
103
+ suggestions.push(`Run \`gws-axi docs download ${file.id} --out <path>\` to fetch the raw file`);
104
+ }
105
+ suggestions.push(`Run \`gws-axi drive permissions ${file.id}\` to see who has access`);
106
+ if (file.webViewLink) {
107
+ suggestions.push(`Open in browser: ${file.webViewLink}`);
108
+ }
109
+ blocks.push(renderHelp(suggestions));
110
+ return joinBlocks(...blocks);
111
+ }
112
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/drive/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const LS_HELP = "usage: gws-axi drive ls [<folder-id>] [flags]\nargs[1]:\n <folder-id> Folder ID to list (default: \"root\", aka My Drive).\n Pass \"shared-with-me\" to list files shared with you\n but not in any of your folders.\nflags[6]:\n --recursive, -r Walk the tree and emit a flat list with full paths\n relative to the queried folder. Off by default; for\n a quality overview of an entire client/project\n folder, pass --recursive.\n --depth <n> Cap recursion depth (default: unlimited \u2014 the\n --limit safety bound stops runaway walks). Only\n meaningful with --recursive; useful for \"give me\n a 2-level overview without diving into every\n subfolder.\"\n --limit <n> Max items to return (default: 500, max: 5000).\n For --recursive, this is the total file count\n across the walk; for non-recursive, it's the page\n size against the API.\n --page <token> Fetch next page (non-recursive only \u2014 recursive\n walks paginate internally).\n --include-trashed Include trashed files (default: trashed excluded)\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi drive ls # root contents\n gws-axi drive ls 1AbC...folder-id # one folder\n gws-axi drive ls 1AbC...folder-id --recursive # whole tree\n gws-axi drive ls 1AbC... --recursive --depth 3 --limit 1000 # constrained walk\noutput:\n A `files[N]{path,id,mime_type,size_bytes,modified}` table. `path` is\n the name for non-recursive listings; the relative path within the walk\n for recursive ones (`Subfolder/file.pdf`). Folders have an empty\n size_bytes. `mime_type` is the raw Google MIME (`application/vnd.google-apps.folder`,\n `application/vnd.google-apps.document`, etc.) \u2014 use it to filter.\nnotes:\n Recursive walks make one API call per folder (Drive doesn't support\n recursive list natively). A folder with 10 subfolders \u00D7 3 levels deep\n \u2248 1+10+100+1000 calls \u2014 bounded by --depth and --limit. Trashed and\n shortcut items are skipped unless --include-trashed.\n";
2
+ export declare function driveLsCommand(account: string, args: string[]): Promise<string>;
@@ -0,0 +1,268 @@
1
+ import { AxiError } from "axi-sdk-js";
2
+ import { driveClient, translateGoogleError } from "../../google/client.js";
3
+ import { field, renderListResponse, } from "../../output/index.js";
4
+ export const LS_HELP = `usage: gws-axi drive ls [<folder-id>] [flags]
5
+ args[1]:
6
+ <folder-id> Folder ID to list (default: "root", aka My Drive).
7
+ Pass "shared-with-me" to list files shared with you
8
+ but not in any of your folders.
9
+ flags[6]:
10
+ --recursive, -r Walk the tree and emit a flat list with full paths
11
+ relative to the queried folder. Off by default; for
12
+ a quality overview of an entire client/project
13
+ folder, pass --recursive.
14
+ --depth <n> Cap recursion depth (default: unlimited — the
15
+ --limit safety bound stops runaway walks). Only
16
+ meaningful with --recursive; useful for "give me
17
+ a 2-level overview without diving into every
18
+ subfolder."
19
+ --limit <n> Max items to return (default: 500, max: 5000).
20
+ For --recursive, this is the total file count
21
+ across the walk; for non-recursive, it's the page
22
+ size against the API.
23
+ --page <token> Fetch next page (non-recursive only — recursive
24
+ walks paginate internally).
25
+ --include-trashed Include trashed files (default: trashed excluded)
26
+ --account <email> Account override when 2+ are configured
27
+ examples:
28
+ gws-axi drive ls # root contents
29
+ gws-axi drive ls 1AbC...folder-id # one folder
30
+ gws-axi drive ls 1AbC...folder-id --recursive # whole tree
31
+ gws-axi drive ls 1AbC... --recursive --depth 3 --limit 1000 # constrained walk
32
+ output:
33
+ A \`files[N]{path,id,mime_type,size_bytes,modified}\` table. \`path\` is
34
+ the name for non-recursive listings; the relative path within the walk
35
+ for recursive ones (\`Subfolder/file.pdf\`). Folders have an empty
36
+ size_bytes. \`mime_type\` is the raw Google MIME (\`application/vnd.google-apps.folder\`,
37
+ \`application/vnd.google-apps.document\`, etc.) — use it to filter.
38
+ notes:
39
+ Recursive walks make one API call per folder (Drive doesn't support
40
+ recursive list natively). A folder with 10 subfolders × 3 levels deep
41
+ ≈ 1+10+100+1000 calls — bounded by --depth and --limit. Trashed and
42
+ shortcut items are skipped unless --include-trashed.
43
+ `;
44
+ const DEFAULT_LIMIT = 500;
45
+ const MAX_LIMIT = 5000;
46
+ // Recursion defaults to unlimited depth; --limit (total file count)
47
+ // is the practical safety bound. Most folder trees aren't deeper
48
+ // than 5-6 levels anyway, so a depth cap rarely fires before --limit
49
+ // does. Callers who want a "shallow overview" pass --depth explicitly.
50
+ const DEFAULT_DEPTH = Number.POSITIVE_INFINITY;
51
+ const FOLDER_MIME = "application/vnd.google-apps.folder";
52
+ function parseFlags(args) {
53
+ let folderId;
54
+ let recursive = false;
55
+ let depth = DEFAULT_DEPTH;
56
+ let limit = DEFAULT_LIMIT;
57
+ let page;
58
+ let includeTrashed = false;
59
+ for (let i = 0; i < args.length; i++) {
60
+ const arg = args[i];
61
+ const next = args[i + 1];
62
+ switch (arg) {
63
+ case "--recursive":
64
+ case "-r":
65
+ recursive = true;
66
+ break;
67
+ case "--depth": {
68
+ const parsed = parseInt(next, 10);
69
+ depth = Number.isFinite(parsed) && parsed >= 0 ? parsed : DEFAULT_DEPTH;
70
+ i++;
71
+ break;
72
+ }
73
+ case "--limit":
74
+ limit = Math.max(1, Math.min(MAX_LIMIT, parseInt(next, 10) || DEFAULT_LIMIT));
75
+ i++;
76
+ break;
77
+ case "--page":
78
+ page = next;
79
+ i++;
80
+ break;
81
+ case "--include-trashed":
82
+ includeTrashed = true;
83
+ break;
84
+ default:
85
+ if (!arg.startsWith("--") && folderId === undefined) {
86
+ folderId = arg;
87
+ }
88
+ }
89
+ }
90
+ return {
91
+ folderId: folderId ?? "root",
92
+ recursive,
93
+ depth,
94
+ limit,
95
+ page,
96
+ includeTrashed,
97
+ };
98
+ }
99
+ const FILES_FIELDS = "id,name,mimeType,size,modifiedTime,trashed";
100
+ async function listOneFolder(api, folderId, pageToken, pageSize, includeTrashed) {
101
+ const q = includeTrashed
102
+ ? `'${folderId}' in parents`
103
+ : `'${folderId}' in parents and trashed = false`;
104
+ const res = await api.files.list({
105
+ q,
106
+ fields: `nextPageToken, files(${FILES_FIELDS})`,
107
+ pageSize,
108
+ pageToken,
109
+ supportsAllDrives: true,
110
+ includeItemsFromAllDrives: true,
111
+ orderBy: "folder, name",
112
+ });
113
+ return {
114
+ files: res.data.files ?? [],
115
+ nextPageToken: res.data.nextPageToken ?? undefined,
116
+ };
117
+ }
118
+ function toRow(file, path) {
119
+ return {
120
+ path,
121
+ id: file.id ?? "",
122
+ mime_type: file.mimeType ?? "",
123
+ size_bytes: file.size ? parseInt(file.size, 10) : "",
124
+ modified: file.modifiedTime ?? "",
125
+ };
126
+ }
127
+ async function recursiveWalk(api, folderId, flags) {
128
+ const rows = [];
129
+ let foldersWalked = 0;
130
+ // BFS keyed by (folderId, prefixPath, depthFromRoot). Stable
131
+ // ordering means a folder's own row is emitted before its children's,
132
+ // which matches what humans expect from `ls -R`.
133
+ const queue = [
134
+ { id: folderId, prefix: "", depth: 0 },
135
+ ];
136
+ while (queue.length > 0 && rows.length < flags.limit) {
137
+ const { id, prefix, depth } = queue.shift();
138
+ foldersWalked += 1;
139
+ let pageToken;
140
+ do {
141
+ // 1000 is Drive's max pageSize and lets us drain a folder quickly.
142
+ const { files, nextPageToken } = await listOneFolder(api, id, pageToken, 1000, flags.includeTrashed);
143
+ for (const file of files) {
144
+ if (rows.length >= flags.limit)
145
+ break;
146
+ const path = prefix + (file.name ?? "");
147
+ rows.push(toRow(file, path));
148
+ if (file.mimeType === FOLDER_MIME && depth < flags.depth) {
149
+ queue.push({
150
+ id: file.id ?? "",
151
+ prefix: `${path}/`,
152
+ depth: depth + 1,
153
+ });
154
+ }
155
+ }
156
+ pageToken = nextPageToken;
157
+ } while (pageToken && rows.length < flags.limit);
158
+ }
159
+ return {
160
+ rows,
161
+ truncated: rows.length >= flags.limit && queue.length > 0,
162
+ foldersWalked,
163
+ };
164
+ }
165
+ function fileSchema() {
166
+ return [
167
+ field("path"),
168
+ field("id"),
169
+ field("mime_type"),
170
+ field("size_bytes"),
171
+ field("modified"),
172
+ ];
173
+ }
174
+ export async function driveLsCommand(account, args) {
175
+ const flags = parseFlags(args);
176
+ const api = await driveClient(account);
177
+ let rows;
178
+ let nextPage;
179
+ let truncated = false;
180
+ let foldersWalked = 0;
181
+ if (flags.recursive) {
182
+ try {
183
+ const result = await recursiveWalk(api, flags.folderId, flags);
184
+ rows = result.rows;
185
+ truncated = result.truncated;
186
+ foldersWalked = result.foldersWalked;
187
+ }
188
+ catch (err) {
189
+ const translated = translateGoogleError(err, {
190
+ account,
191
+ operation: "drive.files.list",
192
+ });
193
+ if (translated.code === "NOT_FOUND") {
194
+ throw new AxiError(`Folder '${flags.folderId}' not found (or ${account} doesn't have access)`, "FOLDER_NOT_FOUND", [
195
+ `Pass "root" or omit the argument to list My Drive root`,
196
+ `Verify the folder ID is correct (from a Drive URL or \`drive search\`)`,
197
+ ]);
198
+ }
199
+ throw translated;
200
+ }
201
+ }
202
+ else {
203
+ try {
204
+ const result = await listOneFolder(api, flags.folderId, flags.page, flags.limit, flags.includeTrashed);
205
+ rows = result.files.map((f) => toRow(f, f.name ?? ""));
206
+ nextPage = result.nextPageToken;
207
+ }
208
+ catch (err) {
209
+ const translated = translateGoogleError(err, {
210
+ account,
211
+ operation: "drive.files.list",
212
+ });
213
+ if (translated.code === "NOT_FOUND") {
214
+ throw new AxiError(`Folder '${flags.folderId}' not found (or ${account} doesn't have access)`, "FOLDER_NOT_FOUND", [
215
+ `Pass "root" or omit the argument to list My Drive root`,
216
+ `Verify the folder ID is correct (from a Drive URL or \`drive search\`)`,
217
+ ]);
218
+ }
219
+ throw translated;
220
+ }
221
+ }
222
+ const header = {
223
+ account,
224
+ folder: flags.folderId,
225
+ mode: flags.recursive ? "recursive" : "shallow",
226
+ };
227
+ if (flags.recursive && foldersWalked > 0) {
228
+ header.folders_walked = foldersWalked;
229
+ }
230
+ if (nextPage)
231
+ header.next_page = nextPage;
232
+ const summary = { count: rows.length };
233
+ if (truncated) {
234
+ summary.truncated = true;
235
+ summary.note = `Hit --limit ${flags.limit} before walk completed — increase --limit or narrow --depth`;
236
+ }
237
+ const suggestions = [];
238
+ if (rows.length > 0) {
239
+ if (!flags.recursive) {
240
+ const folderCount = rows.filter((r) => r.mime_type === FOLDER_MIME).length;
241
+ if (folderCount > 0) {
242
+ suggestions.push(`${folderCount} folder${folderCount === 1 ? "" : "s"} in this listing — run \`gws-axi drive ls ${flags.folderId} --recursive\` for the full tree (or \`drive ls <subfolder-id>\` to dive into one)`);
243
+ }
244
+ else {
245
+ // Even with no folders to descend into, mention recursion exists for
246
+ // the case where this is a flat folder of files.
247
+ suggestions.push(`Run with --recursive for a deep listing (if subfolders exist this would expand them; this folder appears flat)`);
248
+ }
249
+ }
250
+ suggestions.push(`Run \`gws-axi drive get <id>\` for full file metadata (sharing, owners, descriptions)`);
251
+ suggestions.push(`Run \`gws-axi docs read <id>\` or \`drive download <id>\` to read file contents`);
252
+ if (nextPage) {
253
+ suggestions.push(`More items available — paginate with \`drive ls ${flags.folderId} --page ${nextPage}\``);
254
+ }
255
+ }
256
+ return renderListResponse({
257
+ header,
258
+ summary,
259
+ name: "files",
260
+ items: rows,
261
+ schema: fileSchema(),
262
+ suggestions,
263
+ emptyMessage: flags.recursive
264
+ ? `no files in or under \`${flags.folderId}\``
265
+ : `no files in \`${flags.folderId}\` (try --recursive if you want subfolder contents, or --include-trashed)`,
266
+ });
267
+ }
268
+ //# sourceMappingURL=ls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../../src/commands/drive/ls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const PERMISSIONS_HELP = "usage: gws-axi drive permissions <file-id> [flags]\nargs[1]:\n <file-id> The Drive file ID (from URL or `drive get` / `drive ls`)\nflags[1]:\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi drive permissions 1AbC...\noutput:\n A `file{id,name,shared}` header plus a `permissions[N]{role,type,\n email_or_domain,display_name,deleted}` table. `role` is owner/\n organizer/fileOrganizer/writer/commenter/reader; `type` is user/\n group/domain/anyone.\nnotes:\n Permissions only enumerate explicit grants \u2014 inherited folder\n permissions and shared-drive memberships aren't surfaced. Pass\n `supportsAllDrives: true` is automatic; shared-drive ACLs may\n include a longer chain than what shows here.\n";
2
+ export declare function drivePermissionsCommand(account: string, args: string[]): Promise<string>;
@@ -0,0 +1,117 @@
1
+ import { AxiError } from "axi-sdk-js";
2
+ import { driveClient, translateGoogleError } from "../../google/client.js";
3
+ import { field, renderList, renderObject, joinBlocks, renderHelp, } from "../../output/index.js";
4
+ export const PERMISSIONS_HELP = `usage: gws-axi drive permissions <file-id> [flags]
5
+ args[1]:
6
+ <file-id> The Drive file ID (from URL or \`drive get\` / \`drive ls\`)
7
+ flags[1]:
8
+ --account <email> Account override when 2+ are configured
9
+ examples:
10
+ gws-axi drive permissions 1AbC...
11
+ output:
12
+ A \`file{id,name,shared}\` header plus a \`permissions[N]{role,type,
13
+ email_or_domain,display_name,deleted}\` table. \`role\` is owner/
14
+ organizer/fileOrganizer/writer/commenter/reader; \`type\` is user/
15
+ group/domain/anyone.
16
+ notes:
17
+ Permissions only enumerate explicit grants — inherited folder
18
+ permissions and shared-drive memberships aren't surfaced. Pass
19
+ \`supportsAllDrives: true\` is automatic; shared-drive ACLs may
20
+ include a longer chain than what shows here.
21
+ `;
22
+ function parseFlags(args) {
23
+ let fileId;
24
+ for (const arg of args) {
25
+ if (!arg.startsWith("--") && fileId === undefined)
26
+ fileId = arg;
27
+ }
28
+ if (!fileId) {
29
+ throw new AxiError("Missing file ID argument", "VALIDATION_ERROR", ["Usage: gws-axi drive permissions <file-id>"]);
30
+ }
31
+ return { fileId };
32
+ }
33
+ function permissionSchema() {
34
+ return [
35
+ field("role"),
36
+ field("type"),
37
+ field("email_or_domain"),
38
+ field("display_name"),
39
+ field("deleted"),
40
+ ];
41
+ }
42
+ export async function drivePermissionsCommand(account, args) {
43
+ const flags = parseFlags(args);
44
+ const api = await driveClient(account);
45
+ // File metadata first so we can show name + shared flag alongside.
46
+ let file;
47
+ try {
48
+ const res = await api.files.get({
49
+ fileId: flags.fileId,
50
+ fields: "id,name,shared,owners(emailAddress)",
51
+ supportsAllDrives: true,
52
+ });
53
+ file = res.data;
54
+ }
55
+ catch (err) {
56
+ const translated = translateGoogleError(err, {
57
+ account,
58
+ operation: "drive.files.get",
59
+ });
60
+ if (translated.code === "NOT_FOUND") {
61
+ throw new AxiError(`File '${flags.fileId}' not found (or ${account} doesn't have access)`, "FILE_NOT_FOUND", [`Verify the file ID is correct (from a Drive URL or \`drive search\`)`]);
62
+ }
63
+ throw translated;
64
+ }
65
+ let perms = [];
66
+ try {
67
+ const res = await api.permissions.list({
68
+ fileId: flags.fileId,
69
+ fields: "permissions(id,type,role,emailAddress,domain,displayName,deleted,pendingOwner)",
70
+ supportsAllDrives: true,
71
+ });
72
+ perms = res.data.permissions ?? [];
73
+ }
74
+ catch (err) {
75
+ throw translateGoogleError(err, {
76
+ account,
77
+ operation: "drive.permissions.list",
78
+ });
79
+ }
80
+ const rows = perms.map((p) => ({
81
+ role: p.role ?? "",
82
+ type: p.type ?? "",
83
+ email_or_domain: p.emailAddress ?? p.domain ?? (p.type === "anyone" ? "anyone with link" : ""),
84
+ display_name: p.displayName ?? "",
85
+ deleted: p.deleted ? "✓" : "",
86
+ }));
87
+ const blocks = [];
88
+ blocks.push(renderObject({ account }));
89
+ blocks.push(renderObject({
90
+ file: {
91
+ id: file.id ?? flags.fileId,
92
+ name: file.name ?? "",
93
+ shared: file.shared ?? false,
94
+ },
95
+ }));
96
+ if (rows.length === 0) {
97
+ blocks.push(renderObject({ permissions: "no explicit permissions" }));
98
+ }
99
+ else {
100
+ blocks.push(renderList("permissions", rows, permissionSchema()));
101
+ }
102
+ const suggestions = [];
103
+ const anyone = perms.find((p) => p.type === "anyone");
104
+ if (anyone) {
105
+ suggestions.push(`"anyone with link" (role: ${anyone.role}) — this file is accessible without sign-in`);
106
+ }
107
+ const externalUsers = perms.filter((p) => p.type === "user" &&
108
+ p.emailAddress &&
109
+ !p.emailAddress.endsWith(`@${account.split("@")[1] ?? ""}`));
110
+ if (externalUsers.length > 0) {
111
+ suggestions.push(`${externalUsers.length} external user${externalUsers.length === 1 ? "" : "s"} have access (not on ${account.split("@")[1] ?? "your"} domain)`);
112
+ }
113
+ if (suggestions.length > 0)
114
+ blocks.push(renderHelp(suggestions));
115
+ return joinBlocks(...blocks);
116
+ }
117
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../../src/commands/drive/permissions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const SEARCH_HELP = "usage: gws-axi drive search [flags]\nflags[5]:\n --query <text> Full-text search across file names AND content\n (Drive's fullText index). Quote multi-word\n phrases. Default when omitted: all files\n modified in the last 30 days.\n --mime <type> Filter by mime type (e.g.,\n \"application/vnd.google-apps.document\" for\n only Google Docs; \"application/pdf\" for PDFs).\n --limit <n> Max files to return (default: 100, max: 1000).\n --page <token> Fetch the next page (from prior `next_page`).\n --account <email> Account override when 2+ are configured.\nexamples:\n gws-axi drive search --query \"smart data hub\"\n gws-axi drive search --query \"tides\" --mime application/vnd.google-apps.document\n gws-axi drive search --query \"invoice\" --mime application/pdf --limit 25\noutput:\n A `files[N]{id,name,mime_type,size_bytes,modified,owners}` table.\n Pass any `id` to `drive get` for full metadata, `docs read` (for\n Docs), or `docs download` (any file). The `mime_type` lets agents\n filter for the file type they care about.\nnotes:\n fullText matching uses Drive's index, which lags edits by minutes.\n Recently-modified docs may not be indexed yet \u2014 for those, use\n `drive ls` on the parent folder instead.\n";
2
+ export declare function driveSearchCommand(account: string, args: string[]): Promise<string>;
@@ -0,0 +1,169 @@
1
+ import { driveClient, translateGoogleError } from "../../google/client.js";
2
+ import { field, renderListResponse, truncated, } from "../../output/index.js";
3
+ export const SEARCH_HELP = `usage: gws-axi drive search [flags]
4
+ flags[5]:
5
+ --query <text> Full-text search across file names AND content
6
+ (Drive's fullText index). Quote multi-word
7
+ phrases. Default when omitted: all files
8
+ modified in the last 30 days.
9
+ --mime <type> Filter by mime type (e.g.,
10
+ "application/vnd.google-apps.document" for
11
+ only Google Docs; "application/pdf" for PDFs).
12
+ --limit <n> Max files to return (default: 100, max: 1000).
13
+ --page <token> Fetch the next page (from prior \`next_page\`).
14
+ --account <email> Account override when 2+ are configured.
15
+ examples:
16
+ gws-axi drive search --query "smart data hub"
17
+ gws-axi drive search --query "tides" --mime application/vnd.google-apps.document
18
+ gws-axi drive search --query "invoice" --mime application/pdf --limit 25
19
+ output:
20
+ A \`files[N]{id,name,mime_type,size_bytes,modified,owners}\` table.
21
+ Pass any \`id\` to \`drive get\` for full metadata, \`docs read\` (for
22
+ Docs), or \`docs download\` (any file). The \`mime_type\` lets agents
23
+ filter for the file type they care about.
24
+ notes:
25
+ fullText matching uses Drive's index, which lags edits by minutes.
26
+ Recently-modified docs may not be indexed yet — for those, use
27
+ \`drive ls\` on the parent folder instead.
28
+ `;
29
+ const DEFAULT_LIMIT = 100;
30
+ const MAX_LIMIT = 1000;
31
+ function parseFlags(args) {
32
+ let query;
33
+ let mime;
34
+ let limit = DEFAULT_LIMIT;
35
+ let page;
36
+ for (let i = 0; i < args.length; i++) {
37
+ const arg = args[i];
38
+ const next = args[i + 1];
39
+ switch (arg) {
40
+ case "--query":
41
+ query = next;
42
+ i++;
43
+ break;
44
+ case "--mime":
45
+ mime = next;
46
+ i++;
47
+ break;
48
+ case "--limit":
49
+ limit = Math.max(1, Math.min(MAX_LIMIT, parseInt(next, 10) || DEFAULT_LIMIT));
50
+ i++;
51
+ break;
52
+ case "--page":
53
+ page = next;
54
+ i++;
55
+ break;
56
+ }
57
+ }
58
+ return { query, mime, limit, page };
59
+ }
60
+ function buildQuery(flags) {
61
+ const parts = ["trashed = false"];
62
+ if (flags.query) {
63
+ // Escape any embedded quotes; Drive accepts double-quoted phrases.
64
+ const safe = flags.query.replace(/"/g, '\\"');
65
+ parts.push(`fullText contains "${safe}"`);
66
+ }
67
+ else {
68
+ // Sensible default — no --query specified, show recently-modified.
69
+ const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 3600 * 1000)
70
+ .toISOString();
71
+ parts.push(`modifiedTime > '${thirtyDaysAgo}'`);
72
+ }
73
+ if (flags.mime) {
74
+ parts.push(`mimeType = '${flags.mime}'`);
75
+ }
76
+ return parts.join(" and ");
77
+ }
78
+ function schema() {
79
+ return [
80
+ field("id"),
81
+ truncated("name", 60),
82
+ field("mime_type"),
83
+ field("size_bytes"),
84
+ field("modified"),
85
+ truncated("owners", 40),
86
+ ];
87
+ }
88
+ export async function driveSearchCommand(account, args) {
89
+ const flags = parseFlags(args);
90
+ const api = await driveClient(account);
91
+ const q = buildQuery(flags);
92
+ let data;
93
+ try {
94
+ const res = await api.files.list({
95
+ q,
96
+ pageSize: flags.limit,
97
+ pageToken: flags.page,
98
+ fields: "nextPageToken, files(id,name,mimeType,size,modifiedTime,owners(emailAddress))",
99
+ orderBy: "modifiedTime desc",
100
+ supportsAllDrives: true,
101
+ includeItemsFromAllDrives: true,
102
+ });
103
+ data = res.data;
104
+ }
105
+ catch (err) {
106
+ throw translateGoogleError(err, {
107
+ account,
108
+ operation: "drive.files.list",
109
+ });
110
+ }
111
+ const items = (data.files ?? []).map((f) => ({
112
+ id: f.id ?? "",
113
+ name: f.name ?? "",
114
+ mime_type: f.mimeType ?? "",
115
+ size_bytes: f.size ? parseInt(f.size, 10) : "",
116
+ modified: f.modifiedTime ?? "",
117
+ owners: (f.owners ?? [])
118
+ .map((o) => o.emailAddress ?? "")
119
+ .filter(Boolean)
120
+ .join(", "),
121
+ }));
122
+ const header = {
123
+ account,
124
+ effective_query: q,
125
+ };
126
+ if (data.nextPageToken)
127
+ header.next_page = data.nextPageToken;
128
+ const summary = { count: items.length };
129
+ const suggestions = [];
130
+ if (items.length > 0) {
131
+ suggestions.push(`Run \`gws-axi drive get <id>\` on any file for full metadata`);
132
+ suggestions.push(`Run \`gws-axi docs read <id>\` (for Docs) or \`docs download <id>\` (for other files) to read contents`);
133
+ if (data.nextPageToken) {
134
+ const next = rebuildInvocation(flags, data.nextPageToken);
135
+ suggestions.push(`More results — paginate with \`${next}\``);
136
+ }
137
+ }
138
+ else if (flags.query) {
139
+ suggestions.push(`No matches — fullText index lags by minutes; for very recent files try \`drive ls\` on the parent folder`);
140
+ }
141
+ return renderListResponse({
142
+ header,
143
+ summary,
144
+ name: "files",
145
+ items: items,
146
+ schema: schema(),
147
+ suggestions,
148
+ emptyMessage: flags.query
149
+ ? `no files matched "${flags.query}"`
150
+ : `no files modified in the last 30 days`,
151
+ });
152
+ }
153
+ function rebuildInvocation(flags, pageToken) {
154
+ const parts = ["gws-axi drive search"];
155
+ if (flags.query)
156
+ parts.push(`--query ${shellQuote(flags.query)}`);
157
+ if (flags.mime)
158
+ parts.push(`--mime ${flags.mime}`);
159
+ if (flags.limit !== DEFAULT_LIMIT)
160
+ parts.push(`--limit ${flags.limit}`);
161
+ parts.push(`--page ${pageToken}`);
162
+ return parts.join(" ");
163
+ }
164
+ function shellQuote(v) {
165
+ if (!/[\s"'$`\\]/.test(v))
166
+ return v;
167
+ return `"${v.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
168
+ }
169
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../src/commands/drive/search.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  export declare const DRIVE_HELP: string;
2
- export declare const driveCommand: (args: string[]) => Promise<Record<string, unknown>>;
2
+ export declare function driveCommand(args: string[]): Promise<string>;
@@ -1,17 +1,135 @@
1
- import { buildServiceStub } from "./service-stub.js";
2
- const stub = buildServiceStub("drive", [
3
- { name: "search", mutation: false },
4
- { name: "get", mutation: false },
5
- { name: "ls", mutation: false },
6
- { name: "permissions", mutation: false },
7
- { name: "download", mutation: false },
8
- { name: "create", mutation: true },
9
- { name: "copy", mutation: true },
10
- { name: "move", mutation: true },
11
- { name: "rename", mutation: true },
12
- { name: "delete", mutation: true },
13
- { name: "mkdir", mutation: true },
14
- ]);
15
- export const DRIVE_HELP = stub.help;
16
- export const driveCommand = stub.command;
1
+ import { AxiError } from "axi-sdk-js";
2
+ import { resolveAccount } from "../google/account.js";
3
+ import { docsDownloadCommand } from "./docs/download.js";
4
+ import { driveGetCommand, GET_HELP } from "./drive/get.js";
5
+ import { driveLsCommand, LS_HELP } from "./drive/ls.js";
6
+ import { drivePermissionsCommand, PERMISSIONS_HELP, } from "./drive/permissions.js";
7
+ import { driveSearchCommand, SEARCH_HELP } from "./drive/search.js";
8
+ // Drive `download` shares the docs/download.ts implementation — same code
9
+ // path handles native Google file export + uploaded-file media fetch.
10
+ const DOWNLOAD_HELP = `usage: gws-axi drive download <file-id> [flags]
11
+ args[1]:
12
+ <file-id> The Drive file ID
13
+ flags[3]:
14
+ --out <path> Where to save (default: ./<sanitized file name>)
15
+ --as <mime> Export format for native Google files (only valid
16
+ for Docs/Sheets/Slides/Drawings). Defaults: .docx
17
+ / .xlsx / .pptx / .png.
18
+ --account <email> Account override when 2+ are configured
19
+ examples:
20
+ gws-axi drive download 1AbC...
21
+ gws-axi drive download 1AbC... --out ./report.pdf --as application/pdf
22
+ notes:
23
+ This is an alias for \`gws-axi docs download\` — same implementation,
24
+ same behavior. Either spelling works.
25
+ `;
26
+ // Write subcommands are still stubbed but each carries its planned --help.
27
+ const CREATE_HELP = `usage: gws-axi drive create --name <name> --parent <folder-id> [--mime <type>] [flags]
28
+ status: planned for v1 writes — not yet implemented
29
+ `;
30
+ const COPY_HELP = `usage: gws-axi drive copy <file-id> --parent <folder-id> [--name <name>] [flags]
31
+ status: planned for v1 writes — not yet implemented
32
+ `;
33
+ const MOVE_HELP = `usage: gws-axi drive move <file-id> --parent <folder-id> [flags]
34
+ status: planned for v1 writes — not yet implemented
35
+ `;
36
+ const RENAME_HELP = `usage: gws-axi drive rename <file-id> --name <new-name> [flags]
37
+ status: planned for v1 writes — not yet implemented
38
+ `;
39
+ const DELETE_HELP = `usage: gws-axi drive delete <file-id> [flags]
40
+ status: planned for v1 writes — not yet implemented
41
+ `;
42
+ const MKDIR_HELP = `usage: gws-axi drive mkdir --name <name> --parent <folder-id> [flags]
43
+ status: planned for v1 writes — not yet implemented
44
+ `;
45
+ const SUBCOMMANDS = [
46
+ { name: "search", mutation: false, help: SEARCH_HELP, handler: driveSearchCommand },
47
+ { name: "get", mutation: false, help: GET_HELP, handler: driveGetCommand },
48
+ { name: "ls", mutation: false, help: LS_HELP, handler: driveLsCommand },
49
+ {
50
+ name: "permissions",
51
+ mutation: false,
52
+ help: PERMISSIONS_HELP,
53
+ handler: drivePermissionsCommand,
54
+ },
55
+ {
56
+ name: "download",
57
+ mutation: false,
58
+ help: DOWNLOAD_HELP,
59
+ // Delegates to docs/download.ts — same impl handles any Drive file.
60
+ handler: docsDownloadCommand,
61
+ },
62
+ { name: "create", mutation: true, help: CREATE_HELP },
63
+ { name: "copy", mutation: true, help: COPY_HELP },
64
+ { name: "move", mutation: true, help: MOVE_HELP },
65
+ { name: "rename", mutation: true, help: RENAME_HELP },
66
+ { name: "delete", mutation: true, help: DELETE_HELP },
67
+ { name: "mkdir", mutation: true, help: MKDIR_HELP },
68
+ ];
69
+ const SUB_BY_NAME = Object.fromEntries(SUBCOMMANDS.map((s) => [s.name, s]));
70
+ function parseAccountFlag(args) {
71
+ const rest = [];
72
+ let account;
73
+ for (let i = 0; i < args.length; i++) {
74
+ const arg = args[i];
75
+ if (arg === "--account" && args[i + 1]) {
76
+ account = args[i + 1];
77
+ i++;
78
+ continue;
79
+ }
80
+ rest.push(arg);
81
+ }
82
+ return { account, rest };
83
+ }
84
+ const reads = SUBCOMMANDS.filter((s) => !s.mutation).map((s) => s.name);
85
+ const writes = SUBCOMMANDS.filter((s) => s.mutation).map((s) => s.name);
86
+ export const DRIVE_HELP = `usage: gws-axi drive <subcommand> [args] [--account <email>] [flags]
87
+ reads[${reads.length}]:
88
+ ${reads.join(", ")}
89
+ writes[${writes.length}]:
90
+ ${writes.join(", ")}
91
+ notes:
92
+ Writes require --account <email> when 2+ accounts are authenticated.
93
+ Reads use the default account when --account is not provided.
94
+ Write subcommands are scaffolded for the next slice; they throw
95
+ NOT_IMPLEMENTED after account resolution runs.
96
+ subcommand help:
97
+ gws-axi drive ls --help for folder listing (incl. --recursive)
98
+ gws-axi drive get --help for full file metadata
99
+ gws-axi drive search --help for full-text search
100
+ gws-axi drive permissions --help for access / sharing
101
+ gws-axi drive download --help for fetching bytes (alias of docs download)
102
+ examples:
103
+ gws-axi drive ls
104
+ gws-axi drive ls <folder-id> --recursive
105
+ gws-axi drive search --query "project plan"
106
+ gws-axi drive get <file-id>
107
+ gws-axi drive permissions <file-id>
108
+ `;
109
+ export async function driveCommand(args) {
110
+ if (args.length === 0 || (args.length === 1 && args[0] === "--help")) {
111
+ return DRIVE_HELP;
112
+ }
113
+ const sub = args[0];
114
+ const def = SUB_BY_NAME[sub];
115
+ if (!def) {
116
+ throw new AxiError(`Unknown drive subcommand: ${sub}`, "VALIDATION_ERROR", [`Run \`gws-axi drive --help\` to see available subcommands`]);
117
+ }
118
+ const rest = args.slice(1);
119
+ if (rest.includes("--help")) {
120
+ return def.help;
121
+ }
122
+ const { account: accountFlag, rest: remaining } = parseAccountFlag(rest);
123
+ const resolution = resolveAccount(accountFlag, {
124
+ mutation: def.mutation,
125
+ commandName: `drive ${sub}`,
126
+ });
127
+ if (!def.handler) {
128
+ throw new AxiError(`gws-axi drive ${sub} is not yet implemented`, "NOT_IMPLEMENTED", [
129
+ `Account resolution succeeded: would run as ${resolution.account}`,
130
+ `See \`gws-axi drive ${sub} --help\` for the planned surface`,
131
+ ]);
132
+ }
133
+ return def.handler(resolution.account, remaining);
134
+ }
17
135
  //# sourceMappingURL=drive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"drive.js","sourceRoot":"","sources":["../../../src/commands/drive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE;IACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;IACnC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;IAChC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC/B,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;IACxC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAChC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC"}
1
+ {"version":3,"file":"drive.js","sourceRoot":"","sources":["../../../src/commands/drive.ts"],"names":[],"mappings":"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"}
@@ -45,14 +45,16 @@ export function renderListResponse(options) {
45
45
  if (options.summary)
46
46
  blocks.push(renderObject(options.summary));
47
47
  if (options.items.length === 0) {
48
- // Emit an empty array so `<name>` stays polymorphically-stable as a
49
- // list type (strict parsers don't need to handle string-valued
50
- // variants of the same field). Put the human-readable reason in a
51
- // separate `message` sibling when provided.
52
- blocks.push(renderObject({ [options.name]: [] }));
53
- if (options.emptyMessage) {
54
- blocks.push(renderObject({ message: options.emptyMessage }));
55
- }
48
+ // Empty result: collapse to a scalar message under the same field
49
+ // name, matching AXI's canonical empty-list shape. We previously
50
+ // emitted `<name>[0]:` + a separate `message:` sibling for parser
51
+ // stability, but the AXI convention prefers a single field whose
52
+ // value is the human-readable reason — agents read one field instead
53
+ // of two, and the type-polymorphism (array vs string) is resolved by
54
+ // checking which form arrived.
55
+ blocks.push(renderObject({
56
+ [options.name]: options.emptyMessage ?? `0 ${options.name} found`,
57
+ }));
56
58
  }
57
59
  else {
58
60
  blocks.push(renderList(options.name, options.items, options.schema));
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/output/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,KAAqC,EACrC,MAAkB;IAElB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACnC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CACvE,CAAC;IACF,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAA8B;IACzD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,WAAqB;IAC9C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAG,MAAgB;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAUlC;IACC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,oEAAoE;QACpE,+DAA+D;QAC/D,kEAAkE;QAClE,4CAA4C;QAC5C,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/output/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,KAAqC,EACrC,MAAkB;IAElB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACnC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CACvE,CAAC;IACF,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAA8B;IACzD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,WAAqB;IAC9C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAG,MAAgB;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAUlC;IACC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,kEAAkE;QAClE,iEAAiE;QACjE,kEAAkE;QAClE,iEAAiE;QACjE,qEAAqE;QACrE,qEAAqE;QACrE,+BAA+B;QAC/B,MAAM,CAAC,IAAI,CACT,YAAY,CAAC;YACX,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK,OAAO,CAAC,IAAI,QAAQ;SAClE,CAAC,CACH,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC;AAC/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gws-axi",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "description": "AXI-compliant Google Workspace CLI — token-efficient TOON output, agent-guided auth setup, unified interface for Gmail, Calendar, Docs, Drive, Slides",
5
5
  "type": "module",
6
6
  "repository": {