{"_id":"@91life/gwsx","_rev":"8-37e993c420e92196e651e1153865da60","name":"@91life/gwsx","dist-tags":{"latest":"0.4.1"},"versions":{"0.1.0":{"name":"@91life/gwsx","version":"0.1.0","keywords":["google","google-workspace","gmail","calendar","docs","drive","slides","cli","agent","axi","toon"],"author":{"name":"91Life"},"license":"MIT","_id":"@91life/gwsx@0.1.0","maintainers":[{"name":"erdisyla91life","email":"erdi@91.life"}],"contributors":[{"url":"original author of gws-axi, MIT","name":"Jarvus Innovations","email":"hello@jarv.us"}],"homepage":"https://github.com/91Life/googleworkspace-cli#readme","bugs":{"url":"https://github.com/91Life/googleworkspace-cli/issues"},"bin":{"gwsx":"dist/bin/gwsx.js"},"dist":{"shasum":"911a3d6810ec751586927365eb7d9ec63373b0c7","tarball":"https://registry.npmjs.org/@91life/gwsx/-/gwsx-0.1.0.tgz","fileCount":185,"integrity":"sha512-Xl2vAtSMFdWR0OwGJ8YhuFcmZ6HaJb6GHwEHNLP3A2wl2x2MOdSQXNYBNmCkr1zzGRNmcHn0n0uXF7A6HQfstQ==","signatures":[{"sig":"MEQCICJGNp+Fm1EbjpvjKH1ORazp6068HRHePBZB3rjk1hrxAiAmZr9XDF91wrboaUlNGbr2txkXbQS1l4b9XLgEIvQqtw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":834009},"type":"module","engines":{"node":">=20"},"gitHead":"134d793840446e64046ebc0a6d6ef72a6b7319a4","scripts":{"dev":"bun bin/gwsx.ts","lint":"oxlint src bin","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json && chmod +x dist/bin/gwsx.js","format":"oxfmt src bin","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"oxfmt --check src bin","prepublishOnly":"bun run build"},"_npmUser":{"name":"erdisyla91life","email":"erdi@91.life"},"overrides":{"google-auth-library":"$google-auth-library"},"repository":{"url":"git+https://github.com/91Life/googleworkspace-cli.git","type":"git"},"_npmVersion":"11.16.0","description":"AXI-compliant Google Workspace CLI — token-efficient TOON output, agent-guided auth setup, unified interface for Gmail, Calendar, Docs, Drive, Slides","directories":{},"_nodeVersion":"24.18.0","dependencies":{"diff":"^9.0.0","turndown":"^7.2.4","axi-sdk-js":"^0.1.4","googleapis":"^173.0.0","addressparser":"^1.0.1","@toon-format/toon":"^2.1.0","google-auth-library":"^10.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"oxfmt":"^0.56.0","oxlint":"^1.71.0","vitest":"^4.1.4","typescript":"^6.0.3","@types/diff":"^8.0.0","@types/node":"^25.6.0","@types/turndown":"^5.0.6","@types/addressparser":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gwsx_0.1.0_1784282247348_0.5117984306847756","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@91life/gwsx","version":"0.2.0","keywords":["google","google-workspace","gmail","calendar","docs","drive","slides","cli","agent","axi","toon"],"author":{"name":"91Life"},"license":"MIT","_id":"@91life/gwsx@0.2.0","maintainers":[{"name":"erdisyla91life","email":"erdi@91.life"}],"contributors":[{"url":"original author of gws-axi, MIT","name":"Jarvus Innovations","email":"hello@jarv.us"}],"homepage":"https://github.com/91Life/googleworkspace-cli#readme","bugs":{"url":"https://github.com/91Life/googleworkspace-cli/issues"},"bin":{"gwsx":"dist/bin/gwsx.js"},"dist":{"shasum":"6cc3bf83733853a60f912d3cb223b83621b887c6","tarball":"https://registry.npmjs.org/@91life/gwsx/-/gwsx-0.2.0.tgz","fileCount":187,"integrity":"sha512-WxCsxhpk8iwfp8cper1zCMx1GAI/5xBFRI7vJjClhjmo+Uny5MTXzy01lipo8BZ12tTFJ3HPxyUz/h1x7/q/Eg==","signatures":[{"sig":"MEYCIQDV1854lEAcKv3Nf2MKbbvoJJaz/oz9Dwb/pZvj2395yAIhAIMxItDPPDPJmaGmlxqVn7WklCfu4nIawTHqL3Hy8twM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":838786},"type":"module","engines":{"node":">=20"},"gitHead":"075f02e51f7564cbfbc9940ced8aa8e11e4ea7c5","scripts":{"dev":"bun bin/gwsx.ts","lint":"oxlint src bin","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json && chmod +x dist/bin/gwsx.js","format":"oxfmt src bin","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"oxfmt --check src bin","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c35f4131-80d1-41f2-9498-873623fb6000"}},"overrides":{"google-auth-library":"$google-auth-library"},"repository":{"url":"git+https://github.com/91Life/googleworkspace-cli.git","type":"git"},"_npmVersion":"11.16.0","description":"AXI-compliant Google Workspace CLI — token-efficient TOON output, agent-guided auth setup, unified interface for Gmail, Calendar, Docs, Drive, Slides","directories":{},"_nodeVersion":"24.18.0","dependencies":{"diff":"^9.0.0","turndown":"^7.2.4","axi-sdk-js":"^0.1.4","googleapis":"^173.0.0","addressparser":"^1.0.1","@toon-format/toon":"^2.1.0","google-auth-library":"^10.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"oxfmt":"^0.56.0","oxlint":"^1.71.0","vitest":"^4.1.4","typescript":"^6.0.3","@types/diff":"^8.0.0","@types/node":"^25.6.0","@types/turndown":"^5.0.6","@types/addressparser":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gwsx_0.2.0_1784730804648_0.6143060208917943","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@91life/gwsx","version":"0.2.1","keywords":["google","google-workspace","gmail","calendar","docs","drive","slides","cli","agent","axi","toon"],"author":{"name":"91Life"},"license":"MIT","_id":"@91life/gwsx@0.2.1","maintainers":[{"name":"erdisyla91life","email":"erdi@91.life"}],"contributors":[{"url":"original author of gws-axi, MIT","name":"Jarvus Innovations","email":"hello@jarv.us"}],"homepage":"https://github.com/91Life/googleworkspace-cli#readme","bugs":{"url":"https://github.com/91Life/googleworkspace-cli/issues"},"bin":{"gwsx":"dist/bin/gwsx.js"},"dist":{"shasum":"b70b1212dafb0b67997478d72f78fe12401674b4","tarball":"https://registry.npmjs.org/@91life/gwsx/-/gwsx-0.2.1.tgz","fileCount":187,"integrity":"sha512-A6to9cUavkWn5LKc8cPDgyfBR2nYsLhgHtOyP5iNxq9Eyolw8ZdjeAhjQ54g1pg8wY5Kgik3oFA5w107NvkhSw==","signatures":[{"sig":"MEUCIQChD3vCnZJUZv7iaLTfmq+CqhRFXxJZ5yf6BanVvlwlmwIgaF29vqUADJMl3afFB0dr0nPJcW/56/2WHXe0wcEZ0hw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":838819},"type":"module","engines":{"node":">=20"},"gitHead":"736578e0a1b3a2f82da15b8b0824832360b31d9a","scripts":{"dev":"bun bin/gwsx.ts","lint":"oxlint src bin","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json && chmod +x dist/bin/gwsx.js","format":"oxfmt src bin","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"oxfmt --check src bin","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c35f4131-80d1-41f2-9498-873623fb6000"}},"overrides":{"google-auth-library":"$google-auth-library"},"repository":{"url":"git+https://github.com/91Life/googleworkspace-cli.git","type":"git"},"_npmVersion":"11.16.0","description":"AXI-compliant Google Workspace CLI — token-efficient TOON output, agent-guided auth setup, unified interface for Gmail, Calendar, Docs, Drive, Slides","directories":{},"_nodeVersion":"24.18.0","dependencies":{"diff":"^9.0.0","turndown":"^7.2.4","axi-sdk-js":"^0.1.4","googleapis":"^173.0.0","addressparser":"^1.0.1","@toon-format/toon":"^2.1.0","google-auth-library":"^10.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.16.0","devDependencies":{"oxfmt":"^0.60.0","oxlint":"^1.71.0","vitest":"^4.1.4","typescript":"^7.0.2","@types/diff":"^8.0.0","@types/node":"^26.1.1","@types/turndown":"^5.0.6","@types/addressparser":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gwsx_0.2.1_1784808793185_0.45778275024498316","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@91life/gwsx","version":"0.2.2","keywords":["google","google-workspace","gmail","calendar","docs","drive","slides","cli","agent","axi","toon"],"author":{"name":"91Life"},"license":"MIT","_id":"@91life/gwsx@0.2.2","maintainers":[{"name":"erdisyla91life","email":"erdi@91.life"}],"contributors":[{"url":"original author of gws-axi, MIT","name":"Jarvus Innovations","email":"hello@jarv.us"}],"homepage":"https://github.com/91Life/googleworkspace-cli#readme","bugs":{"url":"https://github.com/91Life/googleworkspace-cli/issues"},"bin":{"gwsx":"dist/bin/gwsx.js"},"dist":{"shasum":"d5835caf4b6271db1bbbce0a8306d0bbed540ba3","tarball":"https://registry.npmjs.org/@91life/gwsx/-/gwsx-0.2.2.tgz","fileCount":187,"integrity":"sha512-cCU8XI/S1rzuohEkPKoh/c1sOnOfFCD5txYfVTtyAtIOmprGN8UpvHdCxLdexEctuRE6yiKBAxUM32rK/0Bbtw==","signatures":[{"sig":"MEQCICz/VVcTGiVvlkGCb830e9B2OgUdQc0/ZU8h1xk4Lw2vAiBkT9YlXMIyNCmALP5S+QA1sEAOnlyDsqCQsesz6FOekQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":838819},"type":"module","engines":{"node":">=20"},"gitHead":"4f7ea5ccc95ba6c55101bda8ce3b8d5312d1f2b2","scripts":{"dev":"bun bin/gwsx.ts","lint":"oxlint src bin","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json && chmod +x dist/bin/gwsx.js","format":"oxfmt src bin","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"oxfmt --check src bin","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c35f4131-80d1-41f2-9498-873623fb6000"}},"overrides":{"google-auth-library":"$google-auth-library"},"repository":{"url":"git+https://github.com/91Life/googleworkspace-cli.git","type":"git"},"_npmVersion":"11.16.0","description":"AXI-compliant Google Workspace CLI — token-efficient TOON output, agent-guided auth setup, unified interface for Gmail, Calendar, Docs, Drive, Slides","directories":{},"_nodeVersion":"24.18.0","dependencies":{"diff":"^9.0.0","turndown":"^7.2.4","axi-sdk-js":"^0.1.4","googleapis":"^173.0.0","addressparser":"^1.0.1","@toon-format/toon":"^4.0.0","google-auth-library":"^10.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.16.0","devDependencies":{"oxfmt":"^0.61.0","oxlint":"^1.71.0","vitest":"^4.1.4","typescript":"^7.0.2","@types/diff":"^8.0.0","@types/node":"^26.1.1","@types/turndown":"^5.0.6","@types/addressparser":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gwsx_0.2.2_1785917017242_0.3147090239308119","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@91life/gwsx","version":"0.3.0","keywords":["google","google-workspace","gmail","calendar","docs","drive","slides","cli","agent","axi","toon"],"author":{"name":"91Life"},"license":"MIT","_id":"@91life/gwsx@0.3.0","maintainers":[{"name":"erdisyla91life","email":"erdi@91.life"}],"contributors":[{"url":"original author of gws-axi, MIT","name":"Jarvus Innovations","email":"hello@jarv.us"}],"homepage":"https://github.com/91Life/googleworkspace-cli#readme","bugs":{"url":"https://github.com/91Life/googleworkspace-cli/issues"},"bin":{"gwsx":"dist/bin/gwsx.js"},"dist":{"shasum":"303d3720a547befc4a87152064e037f4612ee951","tarball":"https://registry.npmjs.org/@91life/gwsx/-/gwsx-0.3.0.tgz","fileCount":187,"integrity":"sha512-+J7t7p5fAXzkejYbA+MTtvFO9UAnZQENI7yozN7uIQRyNrZ/pUq/iGHuLSqhEsOcSEPWpHg1IPSqsfG2egOhhQ==","signatures":[{"sig":"MEUCIQDlZjrygcXoVhJk8A4a4Gc9PIXHiCHYLcQKLGYc+rHmfwIgPloxudsrAIlvnW+s9HRb686blngI/NW2YKCqV5zRx7Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":843151},"type":"module","engines":{"node":">=20"},"gitHead":"54f16d3de2bea2703806a8ad8035196d11e2af91","scripts":{"dev":"bun bin/gwsx.ts","lint":"oxlint src bin","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json && chmod +x dist/bin/gwsx.js","format":"oxfmt src bin","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"oxfmt --check src bin","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c35f4131-80d1-41f2-9498-873623fb6000"}},"//version":"Deliberate placeholder — DO NOT set this to a real release number. Releases are tag-driven: release.yml rewrites `version` from the pushed vX.Y.Z tag at publish time, so this value is never what ships. The `-dev` sentinel keeps a source build's `gwsx --version` obviously-unreleased instead of plausibly-wrong. See specs/ci-release.md.","overrides":{"google-auth-library":"$google-auth-library"},"repository":{"url":"git+https://github.com/91Life/googleworkspace-cli.git","type":"git"},"_npmVersion":"11.16.0","description":"AXI-compliant Google Workspace CLI — token-efficient TOON output, agent-guided auth setup, unified interface for Gmail, Calendar, Docs, Drive, Slides","directories":{},"_nodeVersion":"24.18.0","dependencies":{"diff":"^9.0.0","turndown":"^7.2.4","axi-sdk-js":"^0.1.4","googleapis":"^173.0.0","addressparser":"^1.0.1","@toon-format/toon":"^4.0.0","google-auth-library":"^10.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.16.0","devDependencies":{"oxfmt":"^0.61.0","oxlint":"^1.71.0","vitest":"^4.1.4","typescript":"^7.0.2","@types/diff":"^8.0.0","@types/node":"^26.1.1","@types/turndown":"^5.0.6","@types/addressparser":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gwsx_0.3.0_1786373774268_0.8089537619916909","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@91life/gwsx","version":"0.3.1","keywords":["google","google-workspace","gmail","calendar","docs","drive","slides","cli","agent","axi","toon"],"author":{"name":"91Life"},"license":"MIT","_id":"@91life/gwsx@0.3.1","maintainers":[{"name":"erdisyla91life","email":"erdi@91.life"}],"contributors":[{"url":"original author of gws-axi, MIT","name":"Jarvus Innovations","email":"hello@jarv.us"}],"homepage":"https://github.com/91Life/googleworkspace-cli#readme","bugs":{"url":"https://github.com/91Life/googleworkspace-cli/issues"},"bin":{"gwsx":"dist/bin/gwsx.js"},"dist":{"shasum":"cbd887ea8b1d6e1eaed4ec9ab21126ee4715f068","tarball":"https://registry.npmjs.org/@91life/gwsx/-/gwsx-0.3.1.tgz","fileCount":187,"integrity":"sha512-RgA2GszuxFQb+XTO8kvE5KVkKg6rEpLRZuYpio0HtT8KRWTBsjjuF2tRwths4VJSL4AppfxxWGx4FnzSFntPeQ==","signatures":[{"sig":"MEUCIF57lcS8Ru28DlmLMXxob5rH/9hOatmbnwRS9VRxpl+6AiEA9UmqIIBAAmPGm/wC4457sFuaOERAxISDW2jPAt1m1a8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":843151},"type":"module","engines":{"node":">=20"},"gitHead":"8d5563541c52508fdbf7ba32ebc602cc3081c7a6","scripts":{"dev":"bun bin/gwsx.ts","lint":"oxlint src bin","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json && chmod +x dist/bin/gwsx.js","format":"oxfmt src bin","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"oxfmt --check src bin","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c35f4131-80d1-41f2-9498-873623fb6000"}},"//version":"Deliberate placeholder — DO NOT set this to a real release number. Releases are tag-driven: release.yml rewrites `version` from the pushed vX.Y.Z tag at publish time, so this value is never what ships. The `-dev` sentinel keeps a source build's `gwsx --version` obviously-unreleased instead of plausibly-wrong. See specs/ci-release.md.","overrides":{"google-auth-library":"$google-auth-library"},"repository":{"url":"git+https://github.com/91Life/googleworkspace-cli.git","type":"git"},"_npmVersion":"11.17.0","description":"AXI-compliant Google Workspace CLI — token-efficient TOON output, agent-guided auth setup, unified interface for Gmail, Calendar, Docs, Drive, Slides","directories":{},"_nodeVersion":"24.19.0","dependencies":{"diff":"^9.0.0","turndown":"^7.2.4","axi-sdk-js":"^0.1.4","googleapis":"^173.0.0","addressparser":"^1.0.1","@toon-format/toon":"^4.0.0","google-auth-library":"^10.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.16.0","devDependencies":{"oxfmt":"^0.62.0","oxlint":"^1.71.0","vitest":"^4.1.4","typescript":"^7.0.2","@types/diff":"^8.0.0","@types/node":"^26.1.1","@types/turndown":"^5.0.6","@types/addressparser":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gwsx_0.3.1_1786611422097_0.49242297901502186","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@91life/gwsx","version":"0.4.0","keywords":["google","google-workspace","gmail","calendar","docs","drive","slides","cli","agent","axi","toon"],"author":{"name":"91Life"},"license":"MIT","_id":"@91life/gwsx@0.4.0","maintainers":[{"name":"erdisyla91life","email":"erdi@91.life"}],"contributors":[{"url":"original author of gws-axi, MIT","name":"Jarvus Innovations","email":"hello@jarv.us"}],"homepage":"https://github.com/91Life/googleworkspace-cli#readme","bugs":{"url":"https://github.com/91Life/googleworkspace-cli/issues"},"bin":{"gwsx":"dist/bin/gwsx.js"},"dist":{"shasum":"905d11afcb0887f24b264b183c286b3a12d88799","tarball":"https://registry.npmjs.org/@91life/gwsx/-/gwsx-0.4.0.tgz","fileCount":187,"integrity":"sha512-ZQaGuFx0/9wy4FCYaqDyVl8bZYI+5pUM4wtw5DhHnxmhsd+zTrfvhAn8sUVv+HaY2TW8LQiqltiG4atISlzmZg==","signatures":[{"sig":"MEYCIQD7e0k6j85fdkgjsG/V+B1fcf3nsTiQTfWGppSJrB/JPQIhAJjYkaAcpgIdMrEGMHdHZ6PlsPVC9P9ivz+xKJ09gdc1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":843278},"type":"module","engines":{"node":">=22"},"gitHead":"f44399e6541b38d4cdb141103b97e71006a09453","scripts":{"dev":"bun bin/gwsx.ts","lint":"oxlint src bin","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.build.json && chmod +x dist/bin/gwsx.js","format":"oxfmt src bin","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"oxfmt --check src bin","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c35f4131-80d1-41f2-9498-873623fb6000"}},"//version":"Deliberate placeholder — DO NOT set this to a real release number. Releases are tag-driven: release.yml rewrites `version` from the pushed vX.Y.Z tag at publish time, so this value is never what ships. The `-dev` sentinel keeps a source build's `gwsx --version` obviously-unreleased instead of plausibly-wrong. See specs/ci-release.md.","overrides":{"google-auth-library":"$google-auth-library"},"repository":{"url":"git+https://github.com/91Life/googleworkspace-cli.git","type":"git"},"_npmVersion":"11.17.0","description":"AXI-compliant Google Workspace CLI — token-efficient TOON output, agent-guided auth setup, unified interface for Gmail, Calendar, Docs, Drive, Slides","directories":{},"_nodeVersion":"24.19.0","dependencies":{"diff":"^9.0.0","turndown":"^7.2.4","axi-sdk-js":"^0.1.4","googleapis":"^174.0.0","addressparser":"^1.0.1","@toon-format/toon":"^4.0.0","google-auth-library":"^11.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.16.0","devDependencies":{"oxfmt":"^0.63.0","oxlint":"^1.71.0","vitest":"^4.1.4","typescript":"^7.0.2","@types/diff":"^8.0.0","@types/node":"^26.1.1","@types/turndown":"^5.0.6","@types/addressparser":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/gwsx_0.4.0_1787227786838_0.7640088540757677","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@91life/gwsx","//version":"Deliberate placeholder — DO NOT set this to a real release number. Releases are tag-driven: release.yml rewrites `version` from the pushed vX.Y.Z tag at publish time, so this value is never what ships. The `-dev` sentinel keeps a source build's `gwsx --version` obviously-unreleased instead of plausibly-wrong. See specs/ci-release.md.","version":"0.4.1","description":"AXI-compliant Google Workspace CLI — token-efficient TOON output, agent-guided auth setup, unified interface for Gmail, Calendar, Docs, Drive, Slides","type":"module","keywords":["google","google-workspace","gmail","calendar","docs","drive","slides","cli","agent","axi","toon"],"bin":{"gwsx":"dist/bin/gwsx.js"},"scripts":{"build":"tsc -p tsconfig.build.json && chmod +x dist/bin/gwsx.js","dev":"bun bin/gwsx.ts","lint":"oxlint src bin","format":"oxfmt src bin","format:check":"oxfmt --check src bin","typecheck":"tsc --noEmit","test":"vitest run --passWithNoTests","test:watch":"vitest","prepublishOnly":"pnpm build"},"packageManager":"pnpm@11.16.0","license":"MIT","repository":{"type":"git","url":"git+https://github.com/91Life/googleworkspace-cli.git"},"homepage":"https://github.com/91Life/googleworkspace-cli#readme","bugs":{"url":"https://github.com/91Life/googleworkspace-cli/issues"},"publishConfig":{"access":"public"},"engines":{"node":">=22"},"dependencies":{"@toon-format/toon":"^4.0.0","addressparser":"^1.0.1","axi-sdk-js":"^0.1.4","diff":"^9.0.0","google-auth-library":"^11.0.0","googleapis":"^174.0.0","turndown":"^7.2.4"},"overrides":{"google-auth-library":"$google-auth-library"},"devDependencies":{"@types/addressparser":"^1.0.3","@types/diff":"^8.0.0","@types/node":"^26.1.1","@types/turndown":"^5.0.6","oxfmt":"^0.63.0","oxlint":"^1.71.0","typescript":"^7.0.2","vitest":"^4.1.4"},"author":{"name":"91Life"},"contributors":[{"name":"Jarvus Innovations","email":"hello@jarv.us","url":"original author of gws-axi, MIT"}],"gitHead":"f4b6b4a7ce0efb2a9e974f8bdfcbbca1cee590a6","_id":"@91life/gwsx@0.4.1","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-pFly/vU61iaFN8AIXQ3n8wM/nYjHBdhwBO/v2Ft4byU130uO+DLr3Tv39Natb8hX7NK3OR0Ld0cxW+RkAJKpPA==","shasum":"72cf6cd41b740c086efab2a13cc55d15dede0ac5","tarball":"https://registry.npmjs.org/@91life/gwsx/-/gwsx-0.4.1.tgz","fileCount":187,"unpackedSize":843278,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDgCCpzeSVos3scd0dIPnaw8WDOaRLuxA2mqoOzx8b8+wIgR1JTxoBBY2EsldSHsro5+Rwl09UjqbF07oAMrku9QkA="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c35f4131-80d1-41f2-9498-873623fb6000"}},"directories":{},"maintainers":[{"name":"erdisyla91life","email":"erdi@91.life"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gwsx_0.4.1_1787732399640_0.7935104636749062"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-17T09:57:27.170Z","modified":"2026-08-26T08:20:00.050Z","0.1.0":"2026-07-17T09:57:27.526Z","0.2.0":"2026-07-22T14:33:24.845Z","0.2.1":"2026-07-23T12:13:13.364Z","0.2.2":"2026-08-05T08:03:37.408Z","0.3.0":"2026-08-10T14:56:14.476Z","0.3.1":"2026-08-13T08:57:02.230Z","0.4.0":"2026-08-20T12:09:47.004Z","0.4.1":"2026-08-26T08:19:59.883Z"},"bugs":{"url":"https://github.com/91Life/googleworkspace-cli/issues"},"author":{"name":"91Life"},"license":"MIT","homepage":"https://github.com/91Life/googleworkspace-cli#readme","keywords":["google","google-workspace","gmail","calendar","docs","drive","slides","cli","agent","axi","toon"],"repository":{"type":"git","url":"git+https://github.com/91Life/googleworkspace-cli.git"},"description":"AXI-compliant Google Workspace CLI — token-efficient TOON output, agent-guided auth setup, unified interface for Gmail, Calendar, Docs, Drive, Slides","contributors":[{"name":"Jarvus Innovations","email":"hello@jarv.us","url":"original author of gws-axi, MIT"}],"maintainers":[{"name":"erdisyla91life","email":"erdi@91.life"}],"readme":"# gwsx\n\nAgent-ergonomic CLI for Google Workspace — Gmail, Calendar, Docs, Drive, Slides, Sheets, and Chat behind a single command, built to the [AXI standard](https://axi.md): [TOON](https://toonformat.dev/)-formatted output, contextual next-step suggestions, idempotent mutations, and multi-account safety by default.\n\nDesigned for use by AI agents. Every response is structured, every error names a specific fix, and write operations lock to the explicit account when multiple are authenticated — so two agents in parallel sessions can't silently touch the wrong mailbox.\n\n## Status\n\nRead coverage is complete across all seven services; write coverage is rolling out service by service.\n\n| Service | Reads | Writes |\n| --- | --- | --- |\n| **Calendar** | ✅ events · get · calendars · search · freebusy | ✅ create · update · delete · respond |\n| **Gmail** | ✅ search · read · labels · download | ✅ triage · draft · labels · filters &nbsp;·&nbsp; ✋ `send` out of scope |\n| **Docs** | ✅ read · find · comments · download · revisions · diff | 🚧 append · insert-text · delete-range |\n| **Drive** | ✅ ls · get · search · permissions · download · revisions · activity | 🟡 upload · mkdir &nbsp;·&nbsp; 🚧 create · copy · move · rename · delete |\n| **Slides** | ✅ get · page · summarize · comments | 🚧 create · update |\n| **Sheets** | ✅ read · comments | 🚧 update · append · clear · create · add-tab |\n| **Chat** | ✅ spaces · messages · members · find · find-dm · whois · unread · catchup | ✅ send |\n\n<sub>✅ shipped · 🟡 partial · 🚧 planned · ✋ out of scope by design</sub>\n\nAuth (including the single-developer `auth publish` walkthrough that retires the 7-day Testing-token expiry), `doctor` with live per-account API probes, and multi-account write-protection are stable. Gmail **`send` is intentionally out of scope** — gwsx drafts mail for human review but never sends it.\n\n## Requirements\n\n- Node.js ≥ 22\n- A Google account (personal or Workspace)\n- `gcloud` CLI (optional — speeds up initial setup, not required)\n\n## Getting started\n\n### 1. Install\n\n```bash\nnpm install -g @91life/gwsx\n```\n\nThe published package is scoped (`@91life/gwsx`); the installed command is still `gwsx`.\n\n### 2. Let an agent walk you through setup\n\n`gwsx` is designed to be driven by an AI coding agent (Claude Code, Cursor, anything that can run shell commands). The setup flow is progressive — the CLI emits structured TOON output telling the agent what to do next, and the agent coordinates with you through the handful of Google Cloud Console steps that can't be automated.\n\nStart a fresh agent session and paste a prompt like:\n\n```\nRun `gwsx auth setup` and walk me through the progressive setup\nflow it describes. The CLI's output will tell you exactly what to do\nat each step — relay the instructions to me, and run follow-up\ncommands as you go.\n\nI want to authenticate the following Google accounts:\n  - you@example.com\n  - personal@gmail.com\n```\n\nThe explicit `gwsx auth setup` in the prompt matters: this is your very first session, so the agent doesn't yet have any ambient context about `gwsx`. 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-gwsx-your-agents-default-for-google-workspace)), every subsequent session auto-loads a compact `gwsx` status line — so after that, you can skip the command and just say \"use gwsx to ...\" and the agent knows.\n\nExpect ~10 minutes end-to-end for a fresh Google Cloud project; ~3 minutes if you already have one you want to reuse.\n\n**What happens during setup:** you create your own Google Cloud project with OAuth credentials, enable the Workspace APIs, configure the consent screen, and add your Google accounts as test users. This is the [**bring-your-own OAuth client**](docs/shared-client-future.md) model — avoids public-app verification overhead and keeps the blast radius of any token revocation scoped to you. Tokens live locally at `~/.config/gwsx/`.\n\nThe CLI generates an auto-refreshing HTML helper page (`~/.config/gwsx/setup.html`) with clickable Console deep-links — so you never copy long URLs from terminal to browser and you stay in the right browser profile throughout.\n\n### 3. Check it works\n\n```bash\ngwsx doctor                           # setup + live API health\ngwsx calendar events                  # upcoming 7 days on your primary calendar\n```\n\n### 4. Make gwsx your agent's default for Google Workspace\n\ngwsx 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):\n\n```bash\ngwsx setup hooks\n```\n\nThis 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 `gwsx` 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`.\n\nThe 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 `gwsx setup hooks` to get the hook in place.\n\nTo make sure agents reach for `gwsx` instead of stale alternatives, also consider:\n\n- **Remove existing Google Workspace MCP servers and skills.** If you already have Gmail / Calendar / Drive / Docs / Slides integrations installed (community MCP servers, bespoke skills, etc.), disable them. Keeping both creates ambiguity — agents may pick whichever they noticed first, and the tools have different auth models, flag names, and output shapes. Typical candidates to disable: `google-calendar-mcp`, `gmail-mcp`, `google-docs-mcp`, any `@modelcontextprotocol/server-google-*`, and skills with similar names.\n\n- **Add a directive to your `CLAUDE.md`.** A short note in your project-level (`.claude/CLAUDE.md`) or user-level (`~/.claude/CLAUDE.md`) file nudges agents to consistently use `gwsx`. Example:\n\n  ```markdown\n  ## Google Workspace\n\n  Use `gwsx` for ALL Google Calendar, Gmail, Docs, Drive, Slides, and Sheets\n  interactions. Check the SessionStart `gwsx` line for current auth\n  state; run `gwsx --help` for the command surface. Prefer this over\n  any other Google integrations.\n  ```\n\n### Prefer to drive it manually?\n\nThe CLI works fine without an agent — each `gwsx auth setup` invocation prints its own instructions and updates `setup.html`. Run it repeatedly as you complete each step; no state is lost between invocations.\n\n## Usage\n\nEvery subcommand supports `--help`. The bare `gwsx` command prints current state, authenticated accounts, and top suggestions.\n\n### Home / auth / health\n\n```bash\ngwsx                                  # home view — current state + suggestions\ngwsx auth accounts                    # list authenticated Google accounts\ngwsx auth login --account <email>     # add another account (blocks on callback)\ngwsx auth login --account <email> --no-wait  # agent-friendly split: prepare now, run --wait separately\ngwsx auth publish                     # walk Testing → Production to retire 7-day token expiry\ngwsx auth use <email>                 # set the default account\ngwsx doctor                           # prerequisites + setup + live API probes\n```\n\n### Calendar reads\n\n```bash\ngwsx calendar events                  # upcoming 7 days on primary\ngwsx calendar events --from 2026-04-20T00:00 --to 2026-04-27T00:00\ngwsx calendar events --fields attendees,location,status\ngwsx calendar get <event-id>          # full detail + attendees\ngwsx calendar get <event-id> --full   # don't truncate description\ngwsx calendar calendars               # list calendars accessible to this account\ngwsx calendar search --query \"standup\"  # primary calendar by default\ngwsx calendar search --query \"chris\" --include-shared  # include delegated + subscribed\ngwsx calendar freebusy --calendars primary,team@jarv.us  # cross-calendar availability\n```\n\n### Calendar writes\n\n```bash\ngwsx calendar create \\\n  --summary \"Team sync\" --start 2026-04-22T14:00 --duration 30m\n\ngwsx calendar update <event-id> \\\n  --summary \"Team sync (rescheduled)\" --start 2026-04-22T15:00\n\ngwsx calendar delete <event-id>       # idempotent (404/410 → noop)\n\ngwsx calendar respond <event-id> --response accepted\n```\n\nWrites default `--send-updates` to `none` so agent-created events don't spam attendees. Pass `--send-updates all` for production-style invite behavior.\n\n### Gmail\n\n**Reads:**\n\n```bash\ngwsx gmail search                              # in:inbox by default\ngwsx gmail search --query \"from:alice has:attachment\"\ngwsx gmail search --page <token>               # paginate\ngwsx gmail read <thread-or-message-id>         # whole thread, text/plain preferred\ngwsx gmail read <id> --message-only            # just one message\ngwsx gmail read <id> --out ./thread.md         # write the full thread to a markdown file\ngwsx gmail labels                              # list labels with IDs\ngwsx gmail download <message-id> <attachment-id>  # fetch attachment bytes\n```\n\n**Writes** (triage, drafting, labels, filters — but never *send*):\n\n```bash\n# Triage — Gmail state IS labels, so archive/read/star are label edits:\ngwsx gmail modify <message-id> --remove-label INBOX        # archive\ngwsx gmail modify <message-id> --remove-label UNREAD       # mark read\ngwsx gmail modify <message-id> --add-label STARRED         # star\ngwsx gmail modify <message-id> --add-label \"Work/Clients\" --remove-label INBOX\ngwsx gmail modify <thread-id> --thread --remove-label UNREAD  # whole thread\n\n# Bulk triage by query:\ngwsx gmail batch-modify --query \"from:news@x.com\" --remove-label INBOX\ngwsx gmail batch-modify --query \"is:unread older_than:30d\" --remove-label UNREAD\n\n# Drafts (composed for you; you send from Gmail):\ngwsx gmail draft --to alice@x.com --subject \"Re: budget\" --body \"Approved.\"\ngwsx gmail draft --to a@x.com,b@x.com --subject Hi --body-file ./note.txt --thread <id>\n\n# Label management:\ngwsx gmail label-create --name \"Work/Clients\"\ngwsx gmail label-update <label-id|name> --name \"Archive\"\ngwsx gmail label-delete <label-id|name>\n\n# Server-side auto-sort filters:\ngwsx gmail filter-list\ngwsx gmail filter-create --from news@x.com --remove-label INBOX --add-label News\ngwsx gmail filter-delete <filter-id>\n```\n\nBodies are decoded per declared `Content-Type` charset (UTF-8, latin-1, ascii, utf-16). HTML-only messages convert to markdown via turndown. Address headers parse with `addressparser` so display names with commas don't get split.\n\n**On `send`:** gwsx has no `send` command by design — an agent can triage, label, and draft replies, but a human reviews and sends from Gmail. This is a guardrail against *accidental* sends, not a hard security boundary (the OAuth token is send-capable; there is no Gmail scope that grants drafting + label edits while withholding send). `gwsx gmail send` returns a `NOT_SUPPORTED` error pointing at `draft`.\n\n**Scope note:** the filter commands need the `gmail.settings.basic` scope, which `gmail.modify` does not include. Accounts authenticated before this release will get a `SCOPE_MISSING` (403) on filter commands until you re-run `gwsx auth login --account <email>` once to re-consent.\n\n### Docs\n\n```bash\ngwsx docs read <documentId>                    # full Doc as markdown (+ recent revisions inline)\ngwsx docs read <documentId> --out ./doc.md     # write to a file\ngwsx docs find <documentId> --query \"deadline\" # search inside one Doc\ngwsx docs comments <documentId>                # threaded comments + suggestions\ngwsx docs revisions <documentId>               # version history (id, modified, author)\ngwsx docs diff <documentId> <revA> [revB]      # unified diff between two revisions (revB defaults to head)\ngwsx docs download <documentId> --as application/pdf   # native export (pdf, docx, odt, txt, html, epub, rtf)\ngwsx docs download <documentId> --revision <id>        # fetch a past revision's content (markdown by default)\n```\n\nEvery `docs read` carries the document's recent revisions and points at `docs revisions` / `docs download --revision` / `docs diff` — so an agent always knows which version it read. Non-native files (uploaded `.docx`, `.pdf`, etc.) get pointed at `docs download` automatically rather than failing with a cryptic Google API error.\n\n### Drive\n\n**Reads:**\n\n```bash\ngwsx drive ls                                  # top of My Drive\ngwsx drive ls <folder-id> --recursive          # depth-unbounded; bounded by --limit instead\ngwsx drive get <fileId>                        # metadata for one file\ngwsx drive search --query \"name contains 'budget'\"\ngwsx drive permissions <fileId>                # who has access\ngwsx drive revisions <fileId>                  # version history (any file type)\ngwsx drive activity <itemId>                   # attributed change timeline (Drive Activity API)\ngwsx drive download <fileId> --out ./file      # fetch bytes / export a native file\n```\n\n**Writes:**\n\n```bash\ngwsx drive mkdir \"Reports\" --account you@example.com         # create a folder\ngwsx drive upload ./report.pdf --account you@example.com     # upload a local file\necho '# Notes' | gwsx drive upload - --name notes.md --convert --account you@example.com   # stdin → native Doc\ngwsx drive upload --content '# Notes' --name notes.md --convert --account you@example.com   # inline content → native Doc\ngwsx drive upload ./edited.md --convert --update <docId> --account you@example.com          # replace a Doc's content (new revision)\n```\n\n`drive upload` takes content from a local path, `-` (stdin), or `--content`; `--convert` imports it into the matching native Google format. With `--update` it replaces an existing file's content — and when that file is already the matching native type, `--convert --update` writes edited markdown back into the same Doc as a new revision.\n\n### Slides\n\n```bash\ngwsx slides get <presentationId>               # deck metadata + slide list\ngwsx slides page <presentationId> <slideId>    # one slide's content\ngwsx slides summarize <presentationId>         # all slides condensed to text per slide\ngwsx slides comments <presentationId>          # review comments (Drive comments)\n```\n\n<sub>Embedded hyperlinks in slide text resolve inline as markdown `[text](url)` (with `links_resolved: N` in the header); images/videos are counted, not inlined.</sub>\n\n### Sheets\n\nA spreadsheet's tabs are its sheets, so `sheets read` mirrors `docs read`: it lists the tabs, and renders one tab's grid into context. Embedded links resolve inline as markdown `[text](url)`; cell notes come back in a `notes[]` block.\n\n```bash\ngwsx sheets read <spreadsheetId>                       # single tab renders; multi-tab lists tabs to pick\ngwsx sheets read <spreadsheetId> --tab Costs           # by tab title (or numeric gid)\ngwsx sheets read <spreadsheetId> --tab Costs --range A1:D50   # scope to an A1 range\ngwsx sheets read <spreadsheetId> --header-row          # promote row 1 to column names (auto for a frozen top row; --raw to force letters)\ngwsx sheets read <spreadsheetId> --tab Costs --full    # don't cap at 50 rows\ngwsx sheets comments <spreadsheetId>                   # review comments (Drive comments)\n```\n\n<sub>Cell values are the displayed strings (not formulas). The new `spreadsheets` scope means existing accounts must `gwsx auth login` once.</sub>\n\n### Chat\n\nAuthenticates as the user's own Workspace account (never a bot/service account) and lists only spaces that account belongs to. Raw `users/{id}` handles resolve to human names via the People directory (cached 7 days; `--no-cache` to refresh); resolution is best-effort and degrades to raw ids with a fidelity note when unavailable.\n\n**Reads:**\n\n```bash\ngwsx chat spaces                               # spaces you belong to (+ --type space|group|dm)\ngwsx chat messages <space>                     # a space's messages, newest-first\ngwsx chat messages <space> --thread <msgId>    # just one thread\ngwsx chat members <space>                       # who's in a space (+ --check <email|name>)\ngwsx chat find <query>                          # search your spaces by name / member / email\ngwsx chat find-dm <person>                      # resolve the 1:1 DM with a person\ngwsx chat whois <userId>                        # resolve a users/{id} to a name + email\ngwsx chat unread                                # spaces with unread top-level messages\ngwsx chat catchup --limit 20                    # the unread messages across spaces, oldest-first\n```\n\n**Writes:**\n\n```bash\ngwsx chat send <space> --text \"Deploy is green ✅\"          # post a message\ngwsx chat send <space> --reply-to <msgId> --text \"on it\"   # reply into a thread\ngwsx chat send <space> --text \"...\" --request-id <id>      # idempotent send\n```\n\nFan-out reads (`spaces` / `find` / `find-dm` / `unread` / `catchup`) enforce a per-command ceiling on how many spaces they'll touch; raise it with `--max-spaces <n>`. `unread` / `catchup` are a **read-only** digest — they never mark anything read, and read-state covers top-level messages only (thread replies aren't tracked).\n\n<sub>Chat scopes (`chat.spaces`, `chat.messages`, `chat.memberships`) plus `chat.users.readstate.readonly` (for `unread` / `catchup`) and `directory.readonly` (for name resolution) must each be registered on the Console Data-access page or Google silently drops them. Accounts authenticated before a scope was added must `gwsx auth login` once to re-consent.</sub>\n\n### Multi-account with write protection\n\ngwsx supports multiple Google accounts under one OAuth client. When two or more are authenticated, write operations require `--account <email>` explicitly — silent wrong-account mutations are impossible:\n\n```bash\ngwsx calendar events                         # read: uses default account\ngwsx calendar create --summary \"...\"         # write: ACCOUNT_REQUIRED error\ngwsx calendar create --account chris@jarv.us --summary \"...\"  # OK\n```\n\n### Example output\n\n```\naccount: chris@jarv.us\ncount: 3\nrange: 2026-04-20T14:00:00.000Z → 2026-04-27T14:00:00.000Z\nevents[3]{id,summary,start,end,my_response}:\n  abc123,Team standup,2026-04-21T14:00:00-04:00,2026-04-21T14:15:00-04:00,accepted\n  def456,1:1 with Ari,2026-04-22T15:30:00-04:00,2026-04-22T16:00:00-04:00,accepted\n  ghi789,Board meeting,2026-04-25,2026-04-26,needsAction\nhelp[2]:\n  Run `gwsx calendar get <id>` for full event details\n  Add `--fields attendees,location,status` to show more columns\n```\n\n## Design docs\n\n- [`docs/design.md`](https://github.com/91Life/googleworkspace-cli/blob/main/docs/design.md) — architecture, auth model, doctor tiers, command surface\n- [`docs/shared-client-future.md`](https://github.com/91Life/googleworkspace-cli/blob/main/docs/shared-client-future.md) — why BYO-only for v1, what a shared-client public distribution would involve\n\n## Known issues & roadmap\n\n- **Gmail `send`**: intentionally unsupported — gwsx drafts mail but leaves sending to a human in the Gmail UI. See the Gmail section above.\n- **Docs writes** (`append`, `insert-text`, `delete-range`, etc.): scaffolded as `NOT_IMPLEMENTED`. The next frontier.\n- **Drive writes**: `upload` and `mkdir` are shipped; `create` / `copy` / `move` / `rename` / `delete` are still scaffolded as `NOT_IMPLEMENTED`.\n- **Slides writes**: still scaffolded as `NOT_IMPLEMENTED` (reads are complete).\n- **Sheets writes** (`update`, `append`, `clear`, `create`, `add-tab`): scaffolded as `NOT_IMPLEMENTED`; `read` (with inline-markdown links + cell notes) and `comments` are shipped.\n- **Testing-mode tokens** still expire every 7 days *if* you haven't published your OAuth app yet. Run `gwsx auth publish` for the walkthrough — it covers the single-developer Production flow and removes the expiry once you've re-auth'd each account.\n\n## Contributing\n\nIssues and PRs welcome at [github.com/91Life/googleworkspace-cli](https://github.com/91Life/googleworkspace-cli).\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","readmeFilename":"README.md"}