diff --git a/.agents/checks/architecture.md b/.agents/checks/architecture.md index 1c295d3..7dc3c7e 100644 --- a/.agents/checks/architecture.md +++ b/.agents/checks/architecture.md @@ -10,7 +10,7 @@ Rules lint and types can't express. Most are written in `AGENTS.md` and `CODEBAS - Reference parsing (ids, URLs, fuzzy names) written again instead of using `src/lib/refs.ts`. - A positional `[workspace-ref]` without the `--workspace` alias, or one that accepts both without an error. - A new top-level command not wired into the lazy registry in `src/index.ts`. -- A barrel file, or a helper that duplicates one in `src/lib/` or `@doist/cli-core`. Where cli-core has a convention, the CLI follows it. +- A barrel file, or a helper that duplicates one in `src/lib/` or `@todoist/cli-core`. Where cli-core has a convention, the CLI follows it. ## Fine diff --git a/.agents/checks/evidence.md b/.agents/checks/evidence.md index 9b84975..2bad877 100644 --- a/.agents/checks/evidence.md +++ b/.agents/checks/evidence.md @@ -6,7 +6,7 @@ Apply to the PR description and any report from an agent. - A behaviour claim ("fixed", "works", "safe", "no regressions") with no test or command that ran it. - A "Not verified" section missing when something could not be checked: the real Comms API, output in a real terminal, the other Node version CI tests on. -- A change to shared code (`src/lib/`, command registration or global flags in `src/index.ts`, an `@doist/cli-core` or `@doist/comms-sdk` upgrade) without the one fact that makes it safe. +- A change to shared code (`src/lib/`, command registration or global flags in `src/index.ts`, an `@todoist/cli-core` or `@doist/comms-sdk` upgrade) without the one fact that makes it safe. - A PR title whose type doesn't match the change: behaviour changes need `feat:`, `fix:` or `perf:` to release (`!` for breaking); tooling and docs use `chore:`, `ci:`, `docs:` or `test:` so they don't. ## Fine diff --git a/.agents/scripts/instructions.test.ts b/.agents/scripts/instructions.test.ts index 2f66fe6..557458d 100644 --- a/.agents/scripts/instructions.test.ts +++ b/.agents/scripts/instructions.test.ts @@ -145,7 +145,7 @@ it('lists every skill in AGENTS.md, and only those', () => { expect(listedUnder(text, '## Skills').toSorted()).toEqual(skills.toSorted()) }) -it('names only test helpers that the fixtures, global-args or @doist/cli-core/testing export', async () => { +it('names only test helpers that the fixtures, global-args or @todoist/cli-core/testing export', async () => { const skill = readFileSync(join(SKILLS_DIR, 'write-tests/SKILL.md'), 'utf8') const section = skill.split('## Helpers')[1]?.split('\n## ')[0] ?? '' const named = [...section.matchAll(/`(\w+)`/g)].map((match) => match[1] ?? '') @@ -161,7 +161,7 @@ it('names only test helpers that the fixtures, global-args or @doist/cli-core/te ), ].map((match) => match[1]), ) - const shared = Object.keys(await import('@doist/cli-core/testing')) + const shared = Object.keys(await import('@todoist/cli-core/testing')) expect(named.length).toBeGreaterThan(5) expect(named.filter((name) => !local.includes(name) && !shared.includes(name))).toEqual([]) }) diff --git a/.agents/skills/review-changes/SKILL.md b/.agents/skills/review-changes/SKILL.md index 4053a55..f872b03 100644 --- a/.agents/skills/review-changes/SKILL.md +++ b/.agents/skills/review-changes/SKILL.md @@ -18,7 +18,7 @@ Done when the brief is written and the tree holds only the change, with no secre ## 2. Run the reviews in parallel - **Task review**, always: a fresh subagent with the brief and the diff. It looks for missing pieces, unrequested changes, unhandled cases, tests that would pass with the feature broken, and, in a refactor, any changed test input or assertion. Doistbot can't do this: it never sees the task. -- **Blast-radius review**, when the change alters code others rely on: `src/lib/` (the client and caches in `src/lib/api.ts` above all), command registration, global flags or argv handling in `src/index.ts`, the `@doist/cli-core` or `@doist/comms-sdk` version, other `package.json` dependencies, build or CI config. It names the one fact that makes the change safe and proves it by running code. It looks where text search stops: library versions in `package-lock.json`, the shape of API responses, scripts and installed skills reading `--json` output. +- **Blast-radius review**, when the change alters code others rely on: `src/lib/` (the client and caches in `src/lib/api.ts` above all), command registration, global flags or argv handling in `src/index.ts`, the `@todoist/cli-core` or `@doist/comms-sdk` version, other `package.json` dependencies, build or CI config. It names the one fact that makes the change safe and proves it by running code. It looks where text search stops: library versions in `package-lock.json`, the shape of API responses, scripts and installed skills reading `--json` output. - **Code review**: Doistbot if it is set up (below). Otherwise one subagent per relevant check in `.agents/checks/`, each with the brief and that check. Every brief says: **the shared working tree is read-only.** A reviewer that needs to run or break code makes its own copy with `npm run review:worktree -- `, then `npm ci` in it, and removes it after. diff --git a/.agents/skills/verify/SKILL.md b/.agents/skills/verify/SKILL.md index 31c3b0f..a0ac32e 100644 --- a/.agents/skills/verify/SKILL.md +++ b/.agents/skills/verify/SKILL.md @@ -43,7 +43,7 @@ Rate every claim on this ladder: Claims about behaviour ("fixed", "works", "safe", "no regressions") need **ran** or higher. A fact the code shows needs **cited**. Anything lower goes under **Not verified**, with why. -For a change to code others rely on (shared helpers in `src/lib/`, command registration and global flags in `src/index.ts`, an `@doist/cli-core` or `@doist/comms-sdk` upgrade), name the one fact that makes it safe, and how you proved it. +For a change to code others rely on (shared helpers in `src/lib/`, command registration and global flags in `src/index.ts`, an `@todoist/cli-core` or `@doist/comms-sdk` upgrade), name the one fact that makes it safe, and how you proved it. Report format: diff --git a/.agents/skills/write-tests/SKILL.md b/.agents/skills/write-tests/SKILL.md index 8a6c1e5..8562b61 100644 --- a/.agents/skills/write-tests/SKILL.md +++ b/.agents/skills/write-tests/SKILL.md @@ -15,7 +15,7 @@ description: Writes or changes tests in this repository to its quality bar, with ## Helpers -From `src/lib/__fixtures__/accounts.ts`: `STORED_ALAN`, `STORED_ELLIE`, `ACCOUNT_ALAN`, `ACCOUNT_ELLIE`. From `@doist/cli-core/testing`: `createTestProgram`, `captureConsole`, `captureStream`, `describeEmptyMachineOutput` (the shared check that `--json` and `--ndjson` print nothing extra for an empty result). Reset global flag state between tests with `resetGlobalArgs` from `src/lib/global-args.ts`. +From `src/lib/__fixtures__/accounts.ts`: `STORED_ALAN`, `STORED_ELLIE`, `ACCOUNT_ALAN`, `ACCOUNT_ELLIE`. From `@todoist/cli-core/testing`: `createTestProgram`, `captureConsole`, `captureStream`, `describeEmptyMachineOutput` (the shared check that `--json` and `--ndjson` print nothing extra for an empty result). Reset global flag state between tests with `resetGlobalArgs` from `src/lib/global-args.ts`. ## The quality bar diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5bc847a..07d081d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -62,7 +62,7 @@ jobs: with: node-version: '24' cache: npm - scope: '@doist' + scope: '@todoist' registry-url: 'https://registry.npmjs.org/' - name: Install dependencies diff --git a/AGENTS.md b/AGENTS.md index d995af9..c888e16 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -50,7 +50,7 @@ The project uses two tsconfig files: `tsconfig.json` includes test files for typ Tests are colocated next to the module they cover (for example `src/commands/thread/thread.test.ts` or `src/lib/refs.test.ts`). Shared Vitest manual mocks for npm packages live in `src/__mocks__/` (e.g. `chalk.ts`). -`vitest.config.ts` lists `@doist/cli-core` in `server.deps.inline` so `vi.mock('@doist/cli-core', …)` and `vi.doMock('node:fs/promises', …)` reach cli-core's compiled imports. Without it, vitest treats the package as external and Node's native resolver bypasses the mock substitution, breaking the `auth` / `config` / spinner suites. +`vitest.config.ts` lists `@todoist/cli-core` in `server.deps.inline` so `vi.mock('@todoist/cli-core', …)` and `vi.doMock('node:fs/promises', …)` reach cli-core's compiled imports. Without it, vitest treats the package as external and Node's native resolver bypasses the mock substitution, breaking the `auth` / `config` / spinner suites. Run a single test file: @@ -95,7 +95,7 @@ This is a TypeScript CLI (`tdc`) for Comms messaging, built with Commander.js. ## Error Handling -- **Always use `CliError` from `src/lib/errors.ts`** instead of bare `throw new Error(...)`, `console.error() + process.exit(1)`, or `console.error() + process.exitCode = 1`. This ensures structured error output in `--json` mode and consistent formatting in text mode. The global error handler in `src/index.ts` catches all errors, formats them appropriately, and sets the exit code. The same handler also matches `BaseCliError` (re-exported from `src/lib/errors.ts`) so errors thrown by `@doist/cli-core` helpers route through the same formatter. +- **Always use `CliError` from `src/lib/errors.ts`** instead of bare `throw new Error(...)`, `console.error() + process.exit(1)`, or `console.error() + process.exitCode = 1`. This ensures structured error output in `--json` mode and consistent formatting in text mode. The global error handler in `src/index.ts` catches all errors, formats them appropriately, and sets the exit code. The same handler also matches `BaseCliError` (re-exported from `src/lib/errors.ts`) so errors thrown by `@todoist/cli-core` helpers route through the same formatter. ```typescript import { CliError } from '../../lib/errors.js' diff --git a/CODEBASE.md b/CODEBASE.md index d2d886c..1264c8f 100644 --- a/CODEBASE.md +++ b/CODEBASE.md @@ -6,14 +6,14 @@ ## What this project is -`@doist/comms-cli` is a **TypeScript CLI** for Comms messaging. Binary name: +`@todoist/comms-cli` is a **TypeScript CLI** for Comms messaging. Binary name: `tdc`. It wraps `@doist/comms-sdk` and publishes a single executable (`dist/index.js`). ESM-only · Node `^20.19 || >=22.12` · Commander 14 · vitest · oxlint + oxfmt (no eslint/prettier) · semantic-release on merge to `main`. Shared building blocks (config I/O, output formatters, spinner, OAuth/keyring auth, command attachers) -come from `@doist/cli-core`. +come from `@todoist/cli-core`. ## Top-level layout @@ -46,7 +46,7 @@ come from `@doist/cli-core`. ├─ README.md / CONTRIBUTING.md ├─ tsconfig.json # Includes src + tests (type-check, IDE) ├─ tsconfig.build.json # Excludes *.test.ts/.spec.ts, __mocks__, __fixtures__ -├─ vitest.config.ts # { globals, root: 'src', inlines @doist/cli-core } +├─ vitest.config.ts # { globals, root: 'src', inlines @todoist/cli-core } ├─ .oxlintrc.json / .oxfmtrc.json ├─ lefthook.yml # Git hooks: branch guard; pre-commit lint, format, types; │ # pre-push tests @@ -217,7 +217,7 @@ is tried as an id vs a name. ## Auth & token storage -`@doist/cli-core/auth` owns the keyring, multi-user `TokenStore`, OAuth flow, +`@todoist/cli-core/auth` owns the keyring, multi-user `TokenStore`, OAuth flow, and the `login` / `logout` / `status` / `token view` and `account list/use/current/remove` attachers. comms supplies (a) a `UserRecordStore` adapter (`user-records.ts`) over its config file @@ -259,8 +259,8 @@ see a per-command `--user`). - **Fixtures:** `src/lib/__fixtures__/accounts.ts` (`ACCOUNT_ALAN` / `ACCOUNT_ELLIE`) — don't hand-build account objects. Manual npm-package mocks in `src/__mocks__/` (`chalk.ts`). -- **`@doist/cli-core` inlining:** `vitest.config.ts` lists it in - `server.deps.inline` so `vi.mock('@doist/cli-core', …)` / +- **`@todoist/cli-core` inlining:** `vitest.config.ts` lists it in + `server.deps.inline` so `vi.mock('@todoist/cli-core', …)` / `vi.doMock('node:fs/promises', …)` reach its compiled imports — without it the auth/config/spinner suites break. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2115275..eab768a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -92,7 +92,7 @@ To test features before publishing a stable release: ### Installing a pre-release ```sh -npm install @doist/comms-cli@next +npm install @todoist/comms-cli@next ``` ## License diff --git a/README.md b/README.md index 63da21a..d446728 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,11 @@ A command-line interface for Comms. ## Installation > ```bash -> npm install -g @doist/comms-cli +> npm install -g @todoist/comms-cli > ``` +Previously published as `@doist/comms-cli`. Both packages install the `tdc` binary, so uninstall the old one first: `npm uninstall -g @doist/comms-cli`. + ### Agent Skills Install skills for your coding agent: @@ -43,7 +45,7 @@ tdc skill uninstall Then uninstall the CLI: ```bash -npm uninstall -g @doist/comms-cli +npm uninstall -g @todoist/comms-cli ``` ## Local Setup diff --git a/docs/SPEC.md b/docs/SPEC.md index c6fffc1..93c8cdb 100644 --- a/docs/SPEC.md +++ b/docs/SPEC.md @@ -42,7 +42,7 @@ __tests__/ # Test suite ## Package & Binary -- **Package name**: `@doist/comms-cli` +- **Package name**: `@todoist/comms-cli` - **Binary**: `tdc` ## Authentication diff --git a/package-lock.json b/package-lock.json index df4942a..29dc2cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { - "name": "@doist/comms-cli", + "name": "@todoist/comms-cli", "version": "4.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@doist/comms-cli", + "name": "@todoist/comms-cli", "version": "4.1.3", "hasInstallScript": true, "license": "MIT", "dependencies": { - "@doist/cli-core": "1.10.0", "@doist/comms-sdk": "3.11.0", "@pnpm/tabtab": "0.5.4", + "@todoist/cli-core": "2.0.0", "chalk": "5.6.2", "commander": "14.0.3", "marked": "18.0.3", @@ -135,302 +135,6 @@ "node": ">=0.1.90" } }, - "node_modules/@doist/cli-core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@doist/cli-core/-/cli-core-1.10.0.tgz", - "integrity": "sha512-z+SqZ3Na5uuDaAP3QZFzpK9vyO+lgQCLs2Lc5uPXOzd96535cS9u+6qcZgMB3qtlM6J/RW0WJN2D1SjMIJMpMg==", - "license": "MIT", - "dependencies": { - "chalk": "6.0.1", - "yocto-spinner": "1.2.2" - }, - "engines": { - "node": ">=24", - "npm": ">=11" - }, - "optionalDependencies": { - "@napi-rs/keyring": "2.1.2" - }, - "peerDependencies": { - "commander": ">=14", - "marked": ">=18", - "marked-terminal-renderer": ">=2", - "oauth4webapi": ">=3", - "open": ">=10", - "vitest": ">=4.1", - "zod": ">=4" - }, - "peerDependenciesMeta": { - "commander": { - "optional": true - }, - "marked": { - "optional": true - }, - "marked-terminal-renderer": { - "optional": true - }, - "oauth4webapi": { - "optional": true - }, - "open": { - "optional": true - }, - "vitest": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-2.1.2.tgz", - "integrity": "sha512-9i1SR6tYeQ3o1beLeVMxhN6Fq513m9TZlTs+46+4JgvSNkaFoW9S4WrpV5MjzE+0CzVoC+dZ4RfZDIgW6+afnQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "optionalDependencies": { - "@napi-rs/keyring-darwin-arm64": "2.1.2", - "@napi-rs/keyring-darwin-x64": "2.1.2", - "@napi-rs/keyring-freebsd-x64": "2.1.2", - "@napi-rs/keyring-linux-arm-gnueabihf": "2.1.2", - "@napi-rs/keyring-linux-arm64-gnu": "2.1.2", - "@napi-rs/keyring-linux-arm64-musl": "2.1.2", - "@napi-rs/keyring-linux-riscv64-gnu": "2.1.2", - "@napi-rs/keyring-linux-x64-gnu": "2.1.2", - "@napi-rs/keyring-linux-x64-musl": "2.1.2", - "@napi-rs/keyring-win32-arm64-msvc": "2.1.2", - "@napi-rs/keyring-win32-ia32-msvc": "2.1.2", - "@napi-rs/keyring-win32-x64-msvc": "2.1.2" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-darwin-arm64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-2.1.2.tgz", - "integrity": "sha512-vsInUWUzWS6/WzR/TFNwmdtmwKWjnnR8TOpvZ/pjjxDAkJB/waz37PWzp2b8AFcw1aCcq2aQ7k2vvbLQy8pTrw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-darwin-x64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-2.1.2.tgz", - "integrity": "sha512-wQihYroaQ3r++R6u5c9Gj0TCw1l1F53LCb5aLOXfVvT4DsnDnpe7p7VGYo4/33bLe0iqVevtAj+ET3yKCtOlJQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-freebsd-x64": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-2.1.2.tgz", - "integrity": "sha512-Ve5ha7MbJsq+4TYyXYiTy4IeZOnYxkBB05uH2+nIrEKBkHmyfHttF814EfWAfoJa63KqBhYRXdYJo0o1WVL2sg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-linux-arm-gnueabihf": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-2.1.2.tgz", - "integrity": "sha512-zxijTnVnTApEyJMjgnLdVQL1g1DAudku/5brrWNDRWj4J0q0nFhUZEtzUA+nY2FvgDjl4s+2YCZYXSTH4TFMUg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-linux-arm64-gnu": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-2.1.2.tgz", - "integrity": "sha512-PM+SAcl/yGzgGbeeCsKrnlG4T5DBIDjmDqtKm5an1bJz0o0gwSzR3BMiXf04JenkcqascZpdcIReoEvLj0cvCw==", - "cpu": [ - "arm64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-linux-arm64-musl": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-2.1.2.tgz", - "integrity": "sha512-+ERS9oyInPCALN957cViBDbYJc724/Q+rZ8ZAz4rOHj4B4v0VR4OAWThdYZgZqD54sZVV0MdyX24qva97hYoAQ==", - "cpu": [ - "arm64" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-linux-riscv64-gnu": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-2.1.2.tgz", - "integrity": "sha512-pGADtqeT3U1SaFZGjkVsmZVjeNOQx0fr77S+NWszXjZboyaUOLlGKgqG6ssAWzcwxv8uPhKc9Ij17ujNZhSqLw==", - "cpu": [ - "riscv64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-linux-x64-gnu": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-2.1.2.tgz", - "integrity": "sha512-Fj5TmTnl2oriuCT5DDEYlhgxYes20uGfgOg10LK9PyPVsI8/PQ1m8I4rq/4A5hkrMtY7wvFb70YmX/yPHDYWvQ==", - "cpu": [ - "x64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-linux-x64-musl": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-2.1.2.tgz", - "integrity": "sha512-C+KhAeU6x2A43FV3dOmMvUraJb8zsC9VZfsunjZ1cgtuAb208TALaUuAY0jThOphXqhyhBJOs2xTCQhOrRkJIw==", - "cpu": [ - "x64" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-win32-arm64-msvc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-2.1.2.tgz", - "integrity": "sha512-kBq80ZZfjXoa5wHG9kgAVhYYjaPOLgHh5ngt7r1ftwFXPXDPXKH7oM2r2j2Q64cs0pVtmodVtn5Q9e6xCwzQUQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-win32-ia32-msvc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-2.1.2.tgz", - "integrity": "sha512-bhgKvVbWlZ6iR/tmvb2ht6/o0OzarUX9W7hjg+G+eVdGjR1prwtQ9lYo5ZESdn/+zyF1MIFvHkOCGja9YqDcww==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/@napi-rs/keyring-win32-x64-msvc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-2.1.2.tgz", - "integrity": "sha512-yQtFdfuwqM0ezKlYO6r2n44in2LGzd4MC679Ddhvojip3t1hn+q/4I+gJU+cIJQVd5FAZSKNrK4tGfew3UTpAQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@doist/cli-core/node_modules/chalk": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-6.0.1.tgz", - "integrity": "sha512-/Ce6KNm3vIbWdMlNna6RVIZ/ICQxnJxCicet5LBKK9ZffBkqzDw0xh9EiKSljdRtiIQ1S1z4YgcscUUGzNCWrA==", - "license": "MIT", - "engines": { - "node": ">=22" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@doist/comms-sdk": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/@doist/comms-sdk/-/comms-sdk-3.11.0.tgz", @@ -940,123 +644,358 @@ "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-1.6.1.tgz", "integrity": "sha512-CLkrtJoIz2HdWnpYiN6p8KYcPc00rCH/SUu6o+lfZL05Q4uhecJlnvXuj9x+U6mDn3ldPmJj6aZqMHuUJzdVqg==", "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/types": "1.6.1", - "zod": "^3.23.8" - }, + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/types": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-resize/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-rotate": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-1.6.1.tgz", + "integrity": "sha512-nOjVjbbj705B02ksysKnh0POAwEBXZtJ9zQ5qC+X7Tavl3JNn+P3BzQovbBxLPSbUSld6XID9z5ijin4PtOAUg==", + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/plugin-crop": "1.6.1", + "@jimp/plugin-resize": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-rotate/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-1.6.1.tgz", + "integrity": "sha512-JOKv9F8s6tnVLf4sB/2fF0F339EFnHvgEdFYugO6VhowKLsap0pEZmLyE/DlRnYtIj2RddHZVxVMp/eKJ04l2Q==", + "license": "MIT", + "dependencies": { + "@jimp/core": "1.6.1", + "@jimp/plugin-color": "1.6.1", + "@jimp/plugin-hash": "1.6.1", + "@jimp/types": "1.6.1", + "@jimp/utils": "1.6.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/plugin-threshold/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/types": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-1.6.1.tgz", + "integrity": "sha512-leI7YbveTNi565m910XgIOwXyuu074H5qazAD1357HImJSv2hqxnWXpwxQbadGWZ7goZRYBDZy5lpqud0p7q5w==", + "license": "MIT", + "dependencies": { + "zod": "^3.23.8" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jimp/types/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@jimp/utils": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-1.6.1.tgz", + "integrity": "sha512-veFPRd93FCnS7AgmCkPgARVGoDRrJ9cm1ujuNyA+UfQ5VKbED2002sm5XfFLFwTsKC8j04heTrwe+tU1dluXOw==", + "license": "MIT", + "dependencies": { + "@jimp/types": "1.6.1", + "tinycolor2": "^1.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "license": "MIT" + }, + "node_modules/@napi-rs/keyring": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-2.1.2.tgz", + "integrity": "sha512-9i1SR6tYeQ3o1beLeVMxhN6Fq513m9TZlTs+46+4JgvSNkaFoW9S4WrpV5MjzE+0CzVoC+dZ4RfZDIgW6+afnQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/keyring-darwin-arm64": "2.1.2", + "@napi-rs/keyring-darwin-x64": "2.1.2", + "@napi-rs/keyring-freebsd-x64": "2.1.2", + "@napi-rs/keyring-linux-arm-gnueabihf": "2.1.2", + "@napi-rs/keyring-linux-arm64-gnu": "2.1.2", + "@napi-rs/keyring-linux-arm64-musl": "2.1.2", + "@napi-rs/keyring-linux-riscv64-gnu": "2.1.2", + "@napi-rs/keyring-linux-x64-gnu": "2.1.2", + "@napi-rs/keyring-linux-x64-musl": "2.1.2", + "@napi-rs/keyring-win32-arm64-msvc": "2.1.2", + "@napi-rs/keyring-win32-ia32-msvc": "2.1.2", + "@napi-rs/keyring-win32-x64-msvc": "2.1.2" + } + }, + "node_modules/@napi-rs/keyring-darwin-arm64": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-2.1.2.tgz", + "integrity": "sha512-vsInUWUzWS6/WzR/TFNwmdtmwKWjnnR8TOpvZ/pjjxDAkJB/waz37PWzp2b8AFcw1aCcq2aQ7k2vvbLQy8pTrw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-darwin-x64": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-2.1.2.tgz", + "integrity": "sha512-wQihYroaQ3r++R6u5c9Gj0TCw1l1F53LCb5aLOXfVvT4DsnDnpe7p7VGYo4/33bLe0iqVevtAj+ET3yKCtOlJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-freebsd-x64": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-2.1.2.tgz", + "integrity": "sha512-Ve5ha7MbJsq+4TYyXYiTy4IeZOnYxkBB05uH2+nIrEKBkHmyfHttF814EfWAfoJa63KqBhYRXdYJo0o1WVL2sg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm-gnueabihf": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-2.1.2.tgz", + "integrity": "sha512-zxijTnVnTApEyJMjgnLdVQL1g1DAudku/5brrWNDRWj4J0q0nFhUZEtzUA+nY2FvgDjl4s+2YCZYXSTH4TFMUg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" + "node": ">= 10" } }, - "node_modules/@jimp/plugin-resize/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "node_modules/@napi-rs/keyring-linux-arm64-gnu": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-2.1.2.tgz", + "integrity": "sha512-PM+SAcl/yGzgGbeeCsKrnlG4T5DBIDjmDqtKm5an1bJz0o0gwSzR3BMiXf04JenkcqascZpdcIReoEvLj0cvCw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@jimp/plugin-rotate": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-1.6.1.tgz", - "integrity": "sha512-nOjVjbbj705B02ksysKnh0POAwEBXZtJ9zQ5qC+X7Tavl3JNn+P3BzQovbBxLPSbUSld6XID9z5ijin4PtOAUg==", + "node_modules/@napi-rs/keyring-linux-arm64-musl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-2.1.2.tgz", + "integrity": "sha512-+ERS9oyInPCALN957cViBDbYJc724/Q+rZ8ZAz4rOHj4B4v0VR4OAWThdYZgZqD54sZVV0MdyX24qva97hYoAQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/plugin-crop": "1.6.1", - "@jimp/plugin-resize": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "zod": "^3.23.8" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" + "node": ">= 10" } }, - "node_modules/@jimp/plugin-rotate/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "node_modules/@napi-rs/keyring-linux-riscv64-gnu": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-2.1.2.tgz", + "integrity": "sha512-pGADtqeT3U1SaFZGjkVsmZVjeNOQx0fr77S+NWszXjZboyaUOLlGKgqG6ssAWzcwxv8uPhKc9Ij17ujNZhSqLw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@jimp/plugin-threshold": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-1.6.1.tgz", - "integrity": "sha512-JOKv9F8s6tnVLf4sB/2fF0F339EFnHvgEdFYugO6VhowKLsap0pEZmLyE/DlRnYtIj2RddHZVxVMp/eKJ04l2Q==", + "node_modules/@napi-rs/keyring-linux-x64-gnu": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-2.1.2.tgz", + "integrity": "sha512-Fj5TmTnl2oriuCT5DDEYlhgxYes20uGfgOg10LK9PyPVsI8/PQ1m8I4rq/4A5hkrMtY7wvFb70YmX/yPHDYWvQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@jimp/core": "1.6.1", - "@jimp/plugin-color": "1.6.1", - "@jimp/plugin-hash": "1.6.1", - "@jimp/types": "1.6.1", - "@jimp/utils": "1.6.1", - "zod": "^3.23.8" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" + "node": ">= 10" } }, - "node_modules/@jimp/plugin-threshold/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "node_modules/@napi-rs/keyring-linux-x64-musl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-2.1.2.tgz", + "integrity": "sha512-C+KhAeU6x2A43FV3dOmMvUraJb8zsC9VZfsunjZ1cgtuAb208TALaUuAY0jThOphXqhyhBJOs2xTCQhOrRkJIw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@jimp/types": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-1.6.1.tgz", - "integrity": "sha512-leI7YbveTNi565m910XgIOwXyuu074H5qazAD1357HImJSv2hqxnWXpwxQbadGWZ7goZRYBDZy5lpqud0p7q5w==", + "node_modules/@napi-rs/keyring-win32-arm64-msvc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-2.1.2.tgz", + "integrity": "sha512-kBq80ZZfjXoa5wHG9kgAVhYYjaPOLgHh5ngt7r1ftwFXPXDPXKH7oM2r2j2Q64cs0pVtmodVtn5Q9e6xCwzQUQ==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "zod": "^3.23.8" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=18" + "node": ">= 10" } }, - "node_modules/@jimp/types/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "node_modules/@napi-rs/keyring-win32-ia32-msvc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-2.1.2.tgz", + "integrity": "sha512-bhgKvVbWlZ6iR/tmvb2ht6/o0OzarUX9W7hjg+G+eVdGjR1prwtQ9lYo5ZESdn/+zyF1MIFvHkOCGja9YqDcww==", + "cpu": [ + "ia32" + ], "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@jimp/utils": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-1.6.1.tgz", - "integrity": "sha512-veFPRd93FCnS7AgmCkPgARVGoDRrJ9cm1ujuNyA+UfQ5VKbED2002sm5XfFLFwTsKC8j04heTrwe+tU1dluXOw==", + "node_modules/@napi-rs/keyring-win32-x64-msvc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-2.1.2.tgz", + "integrity": "sha512-yQtFdfuwqM0ezKlYO6r2n44in2LGzd4MC679Ddhvojip3t1hn+q/4I+gJU+cIJQVd5FAZSKNrK4tGfew3UTpAQ==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@jimp/types": "1.6.1", - "tinycolor2": "^1.6.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=18" + "node": ">= 10" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", - "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@keyv/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", - "license": "MIT" - }, "node_modules/@octokit/auth-token": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", @@ -2755,6 +2694,67 @@ "devOptional": true, "license": "MIT" }, + "node_modules/@todoist/cli-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@todoist/cli-core/-/cli-core-2.0.0.tgz", + "integrity": "sha512-F0qGsYin9dj8HsLnEHR/IPXFqMN40srsHRR2SCHtycqCWhmJyg6+2KUTF4pg1Q7bC73f0AhMtvmj2iEopwnKyQ==", + "license": "MIT", + "dependencies": { + "chalk": "6.0.1", + "yocto-spinner": "1.2.2" + }, + "engines": { + "node": ">=24", + "npm": ">=11" + }, + "optionalDependencies": { + "@napi-rs/keyring": "2.1.2" + }, + "peerDependencies": { + "commander": ">=14", + "marked": ">=18", + "marked-terminal-renderer": ">=2", + "oauth4webapi": ">=3", + "open": ">=10", + "vitest": ">=4.1", + "zod": ">=4" + }, + "peerDependenciesMeta": { + "commander": { + "optional": true + }, + "marked": { + "optional": true + }, + "marked-terminal-renderer": { + "optional": true + }, + "oauth4webapi": { + "optional": true + }, + "open": { + "optional": true + }, + "vitest": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@todoist/cli-core/node_modules/chalk": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-6.0.1.tgz", + "integrity": "sha512-/Ce6KNm3vIbWdMlNna6RVIZ/ICQxnJxCicet5LBKK9ZffBkqzDw0xh9EiKSljdRtiIQ1S1z4YgcscUUGzNCWrA==", + "license": "MIT", + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/@tokenizer/inflate": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", diff --git a/package.json b/package.json index 2345771..3925339 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@doist/comms-cli", + "name": "@todoist/comms-cli", "version": "4.1.3", "description": "TypeScript CLI for Comms", "type": "module", @@ -54,9 +54,9 @@ "CHANGELOG.md" ], "dependencies": { - "@doist/cli-core": "1.10.0", "@doist/comms-sdk": "3.11.0", "@pnpm/tabtab": "0.5.4", + "@todoist/cli-core": "2.0.0", "chalk": "5.6.2", "commander": "14.0.3", "marked": "18.0.3", diff --git a/src/commands/account/account.test.ts b/src/commands/account/account.test.ts index 34165d4..969d7a1 100644 --- a/src/commands/account/account.test.ts +++ b/src/commands/account/account.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' const storeMocks = vi.hoisted(() => ({ diff --git a/src/commands/account/index.ts b/src/commands/account/index.ts index 5ba6f08..d55e03f 100644 --- a/src/commands/account/index.ts +++ b/src/commands/account/index.ts @@ -1,10 +1,10 @@ -import { emitView } from '@doist/cli-core' +import { emitView } from '@todoist/cli-core' import { attachAccountCurrentCommand, attachAccountListCommand, attachAccountRemoveCommand, attachAccountUseCommand, -} from '@doist/cli-core/auth' +} from '@todoist/cli-core/auth' import chalk from 'chalk' import { Command } from 'commander' import { diff --git a/src/commands/auth/auth.test.ts b/src/commands/auth/auth.test.ts index ef84ea8..52bd1fe 100644 --- a/src/commands/auth/auth.test.ts +++ b/src/commands/auth/auth.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { Command } from 'commander' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' @@ -74,8 +74,8 @@ vi.mock('../../lib/config.js', async (importOriginal) => { // src/lib/auth-provider.test.ts. attachLogoutCommand + attachStatusCommand // fall through to the real cli-core implementations so the integration is // exercised end-to-end. -vi.mock('@doist/cli-core/auth', async (importOriginal) => { - const actual = await importOriginal() +vi.mock('@todoist/cli-core/auth', async (importOriginal) => { + const actual = await importOriginal() return { ...actual, attachLoginCommand: vi.fn((parent, _options) => { @@ -104,8 +104,8 @@ import { mkdtemp, rm } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { createInterface, type Interface } from 'node:readline' -import { attachLoginCommand, type AuthProvider } from '@doist/cli-core/auth' import { CommsRequestError, type User } from '@doist/comms-sdk' +import { attachLoginCommand, type AuthProvider } from '@todoist/cli-core/auth' import { createWrappedCommsClient } from '../../lib/api.js' import { type CommsAccount, type CommsTokenStore } from '../../lib/auth-provider.js' import { getTokenRefreshOptions, TOKEN_ENV_VAR } from '../../lib/auth.js' diff --git a/src/commands/auth/helpers.ts b/src/commands/auth/helpers.ts index 5c8a3ad..ea6bfd6 100644 --- a/src/commands/auth/helpers.ts +++ b/src/commands/auth/helpers.ts @@ -1,4 +1,4 @@ -import type { TokenStorageResult } from '@doist/cli-core/auth' +import type { TokenStorageResult } from '@todoist/cli-core/auth' import chalk from 'chalk' import { createWrappedCommsClient } from '../../lib/api.js' import type { CommsAccount, CommsTokenStore } from '../../lib/auth-provider.js' diff --git a/src/commands/auth/index.ts b/src/commands/auth/index.ts index fb249f2..dd5d752 100644 --- a/src/commands/auth/index.ts +++ b/src/commands/auth/index.ts @@ -1,4 +1,4 @@ -import { attachRefreshTokenViewCommand, attachTokenViewCommand } from '@doist/cli-core/auth' +import { attachRefreshTokenViewCommand, attachTokenViewCommand } from '@todoist/cli-core/auth' import { Command, Option } from 'commander' import { CREDENTIAL_STORES, diff --git a/src/commands/auth/login.ts b/src/commands/auth/login.ts index f80d47d..ee63ac2 100644 --- a/src/commands/auth/login.ts +++ b/src/commands/auth/login.ts @@ -1,4 +1,4 @@ -import { attachLoginCommand } from '@doist/cli-core/auth' +import { attachLoginCommand } from '@todoist/cli-core/auth' import chalk from 'chalk' import { type Command, Option } from 'commander' import { renderError, renderSuccess } from '../../lib/auth-pages.js' diff --git a/src/commands/auth/logout.ts b/src/commands/auth/logout.ts index 5c72edb..19224e4 100644 --- a/src/commands/auth/logout.ts +++ b/src/commands/auth/logout.ts @@ -1,4 +1,4 @@ -import { attachLogoutCommand } from '@doist/cli-core/auth' +import { attachLogoutCommand } from '@todoist/cli-core/auth' import type { Command } from 'commander' import type { CommsAccount, CommsTokenStore } from '../../lib/auth-provider.js' import { logStoredTokenRemoval } from './helpers.js' diff --git a/src/commands/auth/status.ts b/src/commands/auth/status.ts index ebc2f1a..e819995 100644 --- a/src/commands/auth/status.ts +++ b/src/commands/auth/status.ts @@ -1,5 +1,5 @@ -import { attachStatusCommand } from '@doist/cli-core/auth' import { CommsRequestError, type User } from '@doist/comms-sdk' +import { attachStatusCommand } from '@todoist/cli-core/auth' import chalk from 'chalk' import type { Command } from 'commander' import { createWrappedCommsClient } from '../../lib/api.js' diff --git a/src/commands/auth/store-wrap.ts b/src/commands/auth/store-wrap.ts index 4c8bf36..3b00c7b 100644 --- a/src/commands/auth/store-wrap.ts +++ b/src/commands/auth/store-wrap.ts @@ -1,4 +1,4 @@ -import type { AccountRef } from '@doist/cli-core/auth' +import type { AccountRef } from '@todoist/cli-core/auth' import { findAccountInStore, type CommsTokenStore } from '../../lib/auth-provider.js' // Bridge the global `tdc --user ` (stripped by `src/index.ts`) into diff --git a/src/commands/changelog.test.ts b/src/commands/changelog.test.ts index 8673401..17ef2b9 100644 --- a/src/commands/changelog.test.ts +++ b/src/commands/changelog.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' vi.mock('node:fs/promises') @@ -24,7 +24,7 @@ const SAMPLE_CHANGELOG = `# Changelog # [9.8.5](https://example.com) (2026-05-08) ### Bug Fixes -* **deps:** bump @doist/cli-core from 0.8.0 to 0.9.0 +* **deps:** bump @todoist/cli-core from 0.8.0 to 0.9.0 ## [9.8.0](https://example.com) (2026-05-07) @@ -88,7 +88,7 @@ describe('changelog wrapper', () => { const all = logSpy.mock.calls.map((c: unknown[]) => c[0]).join('\n') expect(all).not.toContain('9.8.5') - expect(all).not.toContain('@doist/cli-core from 0.8.0 to 0.9.0') + expect(all).not.toContain('@todoist/cli-core from 0.8.0 to 0.9.0') }) it('indents continuation lines under bullets (continuationIndent: true)', async () => { diff --git a/src/commands/changelog.ts b/src/commands/changelog.ts index 8d7aa65..50cb083 100644 --- a/src/commands/changelog.ts +++ b/src/commands/changelog.ts @@ -1,6 +1,6 @@ import { dirname, join } from 'node:path' import { fileURLToPath } from 'node:url' -import { registerChangelogCommand as registerCoreChangelogCommand } from '@doist/cli-core/commands' +import { registerChangelogCommand as registerCoreChangelogCommand } from '@todoist/cli-core/commands' import type { Command } from 'commander' import packageJson from '../../package.json' with { type: 'json' } diff --git a/src/commands/channel/channel.test.ts b/src/commands/channel/channel.test.ts index 5a277ea..aa64fc1 100644 --- a/src/commands/channel/channel.test.ts +++ b/src/commands/channel/channel.test.ts @@ -2,7 +2,7 @@ import { captureConsole, createTestProgram, describeEmptyMachineOutput, -} from '@doist/cli-core/testing' +} from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' const apiMocks = vi.hoisted(() => ({ diff --git a/src/commands/channel/list.ts b/src/commands/channel/list.ts index 7d4e112..d788c91 100644 --- a/src/commands/channel/list.ts +++ b/src/commands/channel/list.ts @@ -1,5 +1,5 @@ -import { outputIds, printEmpty, resolveOutputMode } from '@doist/cli-core' import type { Channel } from '@doist/comms-sdk' +import { outputIds, printEmpty, resolveOutputMode } from '@todoist/cli-core' import { getCommsClient } from '../../lib/api.js' import { CliError } from '../../lib/errors.js' import { includePrivateChannels } from '../../lib/global-args.js' diff --git a/src/commands/channel/members.test.ts b/src/commands/channel/members.test.ts index 8a22606..c656bb9 100644 --- a/src/commands/channel/members.test.ts +++ b/src/commands/channel/members.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' const apiMocks = vi.hoisted(() => ({ diff --git a/src/commands/channel/members.ts b/src/commands/channel/members.ts index cd60b85..ea24279 100644 --- a/src/commands/channel/members.ts +++ b/src/commands/channel/members.ts @@ -1,5 +1,5 @@ -import { outputIds, resolveOutputMode } from '@doist/cli-core' import { isRestrictedWorkspaceUser } from '@doist/comms-sdk' +import { outputIds, resolveOutputMode } from '@todoist/cli-core' import { getCurrentWorkspaceId, getWorkspaceGroups } from '../../lib/api.js' import type { ViewOptions } from '../../lib/options.js' import { colors, formatJson, formatNdjson, pluralize } from '../../lib/output.js' diff --git a/src/commands/channel/threads.test.ts b/src/commands/channel/threads.test.ts index 758810f..217bbe5 100644 --- a/src/commands/channel/threads.test.ts +++ b/src/commands/channel/threads.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' const apiMocks = vi.hoisted(() => ({ diff --git a/src/commands/channel/threads.ts b/src/commands/channel/threads.ts index 8557389..3c0bddf 100644 --- a/src/commands/channel/threads.ts +++ b/src/commands/channel/threads.ts @@ -1,6 +1,6 @@ import { createHash } from 'node:crypto' -import { outputIds, resolveOutputMode } from '@doist/cli-core' import type { ArchiveFilter, CommsApi, GetThreadsArgs, Thread } from '@doist/comms-sdk' +import { outputIds, resolveOutputMode } from '@todoist/cli-core' import chalk from 'chalk' import { getCommsClient, getCurrentWorkspaceId } from '../../lib/api.js' import { formatRelativeDate } from '../../lib/dates.js' diff --git a/src/commands/comment/comment.test.ts b/src/commands/comment/comment.test.ts index 70e7819..10a9956 100644 --- a/src/commands/comment/comment.test.ts +++ b/src/commands/comment/comment.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram, mockStdin } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram, mockStdin } from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' const apiMocks = vi.hoisted(() => ({ diff --git a/src/commands/config/config.test.ts b/src/commands/config/config.test.ts index 1f9bd0a..9c5b247 100644 --- a/src/commands/config/config.test.ts +++ b/src/commands/config/config.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' vi.mock('chalk') @@ -21,7 +21,7 @@ vi.mock('../../lib/auth.js', async (importOriginal) => { } }) -import { SecureStoreUnavailableError } from '@doist/cli-core/auth' +import { SecureStoreUnavailableError } from '@todoist/cli-core/auth' import { STORED_ALAN, STORED_ELLIE } from '../../lib/__fixtures__/accounts.js' import { NoTokenError, probeApiToken } from '../../lib/auth.js' import { type Config, readConfigStrict, setConfig } from '../../lib/config.js' diff --git a/src/commands/config/view.ts b/src/commands/config/view.ts index 2498ca9..54ef817 100644 --- a/src/commands/config/view.ts +++ b/src/commands/config/view.ts @@ -1,4 +1,4 @@ -import { SecureStoreUnavailableError } from '@doist/cli-core/auth' +import { SecureStoreUnavailableError } from '@todoist/cli-core/auth' import chalk from 'chalk' import { type AuthProbeMetadata, diff --git a/src/commands/conversation/conversation.test.ts b/src/commands/conversation/conversation.test.ts index 1577165..f27f5b1 100644 --- a/src/commands/conversation/conversation.test.ts +++ b/src/commands/conversation/conversation.test.ts @@ -6,7 +6,7 @@ import { createTestProgram, describeEmptyMachineOutput, mockStdin, -} from '@doist/cli-core/testing' +} from '@todoist/cli-core/testing' import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' import { clearWorkspaceUserCache } from '../../lib/api.js' import { CliError } from '../../lib/errors.js' diff --git a/src/commands/conversation/helpers.ts b/src/commands/conversation/helpers.ts index 2ee4df5..c10297a 100644 --- a/src/commands/conversation/helpers.ts +++ b/src/commands/conversation/helpers.ts @@ -1,5 +1,5 @@ -import { outputIds, printEmpty, resolveOutputMode } from '@doist/cli-core' import type { Conversation } from '@doist/comms-sdk' +import { outputIds, printEmpty, resolveOutputMode } from '@todoist/cli-core' import chalk from 'chalk' import { buildUserNameMap, getCommsClient } from '../../lib/api.js' import { formatRelativeDate } from '../../lib/dates.js' diff --git a/src/commands/conversation/list.ts b/src/commands/conversation/list.ts index 723f134..3aca18b 100644 --- a/src/commands/conversation/list.ts +++ b/src/commands/conversation/list.ts @@ -1,4 +1,4 @@ -import { resolveOutputMode } from '@doist/cli-core' +import { resolveOutputMode } from '@todoist/cli-core' import { getCurrentWorkspaceId } from '../../lib/api.js' import { CliError } from '../../lib/errors.js' import { resolveUserRefs, resolveWorkspaceRef } from '../../lib/refs.js' diff --git a/src/commands/conversation/unread.ts b/src/commands/conversation/unread.ts index 2322e8b..f3821c5 100644 --- a/src/commands/conversation/unread.ts +++ b/src/commands/conversation/unread.ts @@ -1,4 +1,4 @@ -import { outputIds, printEmpty, resolveOutputMode } from '@doist/cli-core' +import { outputIds, printEmpty, resolveOutputMode } from '@todoist/cli-core' import chalk from 'chalk' import { buildUserNameMap, getCommsClient, getCurrentWorkspaceId } from '../../lib/api.js' import { CliError } from '../../lib/errors.js' diff --git a/src/commands/conversation/with.ts b/src/commands/conversation/with.ts index a305caa..e6dc3cb 100644 --- a/src/commands/conversation/with.ts +++ b/src/commands/conversation/with.ts @@ -1,4 +1,4 @@ -import { resolveOutputMode } from '@doist/cli-core' +import { resolveOutputMode } from '@todoist/cli-core' import { getCurrentWorkspaceId, getSessionUser, getCommsClient } from '../../lib/api.js' import { CliError } from '../../lib/errors.js' import { resolveUserRefs, resolveWorkspaceRef } from '../../lib/refs.js' diff --git a/src/commands/doctor.test.ts b/src/commands/doctor.test.ts index a4f7622..279dbbe 100644 --- a/src/commands/doctor.test.ts +++ b/src/commands/doctor.test.ts @@ -1,5 +1,5 @@ import { readFile } from 'node:fs/promises' -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' vi.mock('chalk') diff --git a/src/commands/groups/groups.test.ts b/src/commands/groups/groups.test.ts index f934036..08f7b04 100644 --- a/src/commands/groups/groups.test.ts +++ b/src/commands/groups/groups.test.ts @@ -2,7 +2,7 @@ import { captureConsole, createTestProgram, describeEmptyMachineOutput, -} from '@doist/cli-core/testing' +} from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' const apiMocks = vi.hoisted(() => ({ diff --git a/src/commands/groups/list.ts b/src/commands/groups/list.ts index 05fab8b..33a3f89 100644 --- a/src/commands/groups/list.ts +++ b/src/commands/groups/list.ts @@ -1,4 +1,4 @@ -import { outputIds, printEmpty, resolveOutputMode } from '@doist/cli-core' +import { outputIds, printEmpty, resolveOutputMode } from '@todoist/cli-core' import { getCurrentWorkspaceId, getWorkspaceGroups } from '../../lib/api.js' import { CliError } from '../../lib/errors.js' import type { ViewOptions } from '../../lib/options.js' diff --git a/src/commands/inbox.test.ts b/src/commands/inbox.test.ts index c8b811f..51c6705 100644 --- a/src/commands/inbox.test.ts +++ b/src/commands/inbox.test.ts @@ -2,7 +2,7 @@ import { captureConsole, createTestProgram, describeEmptyMachineOutput, -} from '@doist/cli-core/testing' +} from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' const apiMocks = vi.hoisted(() => ({ diff --git a/src/commands/inbox.ts b/src/commands/inbox.ts index f738270..451eaa2 100644 --- a/src/commands/inbox.ts +++ b/src/commands/inbox.ts @@ -1,5 +1,5 @@ -import { outputIds, printEmpty, resolveOutputMode } from '@doist/cli-core' import type { ArchiveFilter } from '@doist/comms-sdk' +import { outputIds, printEmpty, resolveOutputMode } from '@todoist/cli-core' import chalk from 'chalk' import { Command, Option } from 'commander' import { getCommsClient, getCurrentWorkspaceId } from '../lib/api.js' diff --git a/src/commands/mentions.test.ts b/src/commands/mentions.test.ts index 6de7fee..d25252a 100644 --- a/src/commands/mentions.test.ts +++ b/src/commands/mentions.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' const refsMocks = vi.hoisted(() => ({ diff --git a/src/commands/migrate/migrate.test.ts b/src/commands/migrate/migrate.test.ts index d2d6961..209c7db 100644 --- a/src/commands/migrate/migrate.test.ts +++ b/src/commands/migrate/migrate.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram, mockStdin } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram, mockStdin } from '@todoist/cli-core/testing' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' const sdkMocks = vi.hoisted(() => ({ diff --git a/src/commands/msg/msg.test.ts b/src/commands/msg/msg.test.ts index 8bba256..6fddfc5 100644 --- a/src/commands/msg/msg.test.ts +++ b/src/commands/msg/msg.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram, mockStdin } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram, mockStdin } from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' const apiMocks = vi.hoisted(() => ({ diff --git a/src/commands/react.test.ts b/src/commands/react.test.ts index 2165b28..e1deaa8 100644 --- a/src/commands/react.test.ts +++ b/src/commands/react.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' const apiMocks = vi.hoisted(() => ({ diff --git a/src/commands/search.test.ts b/src/commands/search.test.ts index 005685f..39c942f 100644 --- a/src/commands/search.test.ts +++ b/src/commands/search.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' const refsMocks = vi.hoisted(() => ({ diff --git a/src/commands/skill/skill.test.ts b/src/commands/skill/skill.test.ts index b9cfecb..fc528a6 100644 --- a/src/commands/skill/skill.test.ts +++ b/src/commands/skill/skill.test.ts @@ -1,7 +1,7 @@ import { mkdir, readFile, rm, stat } from 'node:fs/promises' import { homedir, tmpdir } from 'node:os' import { join } from 'node:path' -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' vi.mock('chalk') diff --git a/src/commands/status/status.test.ts b/src/commands/status/status.test.ts index cccae04..5701ebc 100644 --- a/src/commands/status/status.test.ts +++ b/src/commands/status/status.test.ts @@ -1,4 +1,4 @@ -import { captureConsole, createTestProgram } from '@doist/cli-core/testing' +import { captureConsole, createTestProgram } from '@todoist/cli-core/testing' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' const apiMocks = vi.hoisted(() => ({ diff --git a/src/commands/thread/thread.test.ts b/src/commands/thread/thread.test.ts index ad43b08..cbca100 100644 --- a/src/commands/thread/thread.test.ts +++ b/src/commands/thread/thread.test.ts @@ -1,13 +1,13 @@ import { mkdtemp, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' +import { CommsApi, type CustomFetch, generateId } from '@doist/comms-sdk' import { captureConsole, captureStream, createTestProgram, mockStdin, -} from '@doist/cli-core/testing' -import { CommsApi, type CustomFetch, generateId } from '@doist/comms-sdk' +} from '@todoist/cli-core/testing' import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' const apiMocks = vi.hoisted(() => ({ diff --git a/src/commands/update/index.ts b/src/commands/update/index.ts index 0367a34..8224fed 100644 --- a/src/commands/update/index.ts +++ b/src/commands/update/index.ts @@ -1,4 +1,4 @@ -import { registerUpdateCommand as registerCoreUpdateCommand } from '@doist/cli-core/commands' +import { registerUpdateCommand as registerCoreUpdateCommand } from '@todoist/cli-core/commands' import type { Command } from 'commander' import packageJson from '../../../package.json' with { type: 'json' } import { getConfigPath } from '../../lib/config.js' diff --git a/src/commands/update/update.test.ts b/src/commands/update/update.test.ts index 569256a..b53f5e8 100644 --- a/src/commands/update/update.test.ts +++ b/src/commands/update/update.test.ts @@ -17,7 +17,7 @@ describe('update wrapper', () => { }) afterEach(() => { - vi.doUnmock('@doist/cli-core/commands') + vi.doUnmock('@todoist/cli-core/commands') vi.doUnmock('../../lib/config.js') vi.resetModules() vi.restoreAllMocks() @@ -26,7 +26,7 @@ describe('update wrapper', () => { it('forwards comms-cli wiring (packageName, version, configPath, changelog hint, spinner) to cli-core', async () => { const registerCoreSpy = vi.fn() - vi.doMock('@doist/cli-core/commands', () => ({ + vi.doMock('@todoist/cli-core/commands', () => ({ registerUpdateCommand: registerCoreSpy, // Re-exported by src/lib/update.ts — must still resolve when the // mocked module is loaded transitively via the wrapper. diff --git a/src/commands/user.test.ts b/src/commands/user.test.ts index 4bf05f9..506fd1a 100644 --- a/src/commands/user.test.ts +++ b/src/commands/user.test.ts @@ -2,7 +2,7 @@ import { captureConsole, createTestProgram, describeEmptyMachineOutput, -} from '@doist/cli-core/testing' +} from '@todoist/cli-core/testing' import { beforeEach, describe, expect, it, vi } from 'vitest' const apiMocks = vi.hoisted(() => ({ diff --git a/src/commands/user.ts b/src/commands/user.ts index 771d9ea..85f4d9d 100644 --- a/src/commands/user.ts +++ b/src/commands/user.ts @@ -1,4 +1,4 @@ -import { outputIds, printEmpty, resolveOutputMode } from '@doist/cli-core' +import { outputIds, printEmpty, resolveOutputMode } from '@todoist/cli-core' import chalk from 'chalk' import { Command } from 'commander' import { diff --git a/src/commands/view.test.ts b/src/commands/view.test.ts index 1b78f80..d3924e4 100644 --- a/src/commands/view.test.ts +++ b/src/commands/view.test.ts @@ -1,4 +1,4 @@ -import { createTestProgram } from '@doist/cli-core/testing' +import { createTestProgram } from '@todoist/cli-core/testing' import { Command } from 'commander' import { beforeEach, describe, expect, it, vi } from 'vitest' diff --git a/src/commands/workspace.ts b/src/commands/workspace.ts index 161e3a0..9669a47 100644 --- a/src/commands/workspace.ts +++ b/src/commands/workspace.ts @@ -1,4 +1,4 @@ -import { outputIds, printEmpty, resolveOutputMode } from '@doist/cli-core' +import { outputIds, printEmpty, resolveOutputMode } from '@todoist/cli-core' import chalk from 'chalk' import { Command } from 'commander' import { fetchWorkspaces, getCurrentWorkspaceId } from '../lib/api.js' diff --git a/src/index.ts b/src/index.ts index 3372702..0fb43d7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import { stripUserFlag } from '@doist/cli-core' +import { stripUserFlag } from '@todoist/cli-core' import { CommanderError, type Command, program } from 'commander' import pkg from '../package.json' with { type: 'json' } import { configureCommandOutput } from './lib/command-output.js' diff --git a/src/lib/auth-provider.test.ts b/src/lib/auth-provider.test.ts index 3dd1300..2b90b92 100644 --- a/src/lib/auth-provider.test.ts +++ b/src/lib/auth-provider.test.ts @@ -19,8 +19,8 @@ const keyringMocks = vi.hoisted(() => ({ }, })) -vi.mock('@doist/cli-core/auth', async (importOriginal) => { - const actual = await importOriginal() +vi.mock('@todoist/cli-core/auth', async (importOriginal) => { + const actual = await importOriginal() keyringMocks.createKeyringTokenStore.mockImplementation(() => keyringMocks.inner) return { ...actual, diff --git a/src/lib/auth-provider.ts b/src/lib/auth-provider.ts index e1758df..766aaf9 100644 --- a/src/lib/auth-provider.ts +++ b/src/lib/auth-provider.ts @@ -11,7 +11,7 @@ import { type RefreshInput, type TokenBundle, type ValidateInput, -} from '@doist/cli-core/auth' +} from '@todoist/cli-core/auth' import { createWrappedCommsClient } from './api.js' import { OAUTH_CLIENT_ID, SECURE_STORE_SERVICE } from './auth-constants.js' import { makeCommsAccount, toCommsAccount } from './comms-account.js' diff --git a/src/lib/auth.test.ts b/src/lib/auth.test.ts index 0d7c3c3..9b6774b 100644 --- a/src/lib/auth.test.ts +++ b/src/lib/auth.test.ts @@ -1,4 +1,4 @@ -import type { TokenStore } from '@doist/cli-core/auth' +import type { TokenStore } from '@todoist/cli-core/auth' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { Config } from './config.js' @@ -10,8 +10,8 @@ const mocks = vi.hoisted(() => ({ refreshAccessTokenMock: vi.fn(), })) -vi.mock('@doist/cli-core/auth', async (importOriginal) => { - const actual = await importOriginal() +vi.mock('@todoist/cli-core/auth', async (importOriginal) => { + const actual = await importOriginal() return { ...actual, refreshAccessToken: mocks.refreshAccessTokenMock, diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 3dc5e9d..d9f63a0 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -2,7 +2,7 @@ import { refreshAccessToken, SecureStoreUnavailableError, type TokenRefreshOptions, -} from '@doist/cli-core/auth' +} from '@todoist/cli-core/auth' import type { CommsAccount } from './auth-provider.js' import { createCommsAuthProvider, diff --git a/src/lib/config.test.ts b/src/lib/config.test.ts index a654bec..beb0218 100644 --- a/src/lib/config.test.ts +++ b/src/lib/config.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi } from 'vitest' -vi.mock('@doist/cli-core', async () => { - const actual = await vi.importActual('@doist/cli-core') +vi.mock('@todoist/cli-core', async () => { + const actual = await vi.importActual('@todoist/cli-core') return { ...actual, getConfigPath: vi.fn((appName: string) => `/tmp/cli-core-test/${appName}/config.json`), @@ -18,7 +18,7 @@ import { readConfigStrict as readConfigStrictCore, updateConfig as updateConfigCore, writeConfig as writeConfigCore, -} from '@doist/cli-core' +} from '@todoist/cli-core' import { getConfig, getConfigPath, diff --git a/src/lib/config.ts b/src/lib/config.ts index c672646..d7e8643 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -4,7 +4,7 @@ import { readConfigStrict as readConfigStrictCore, updateConfig as updateConfigCore, writeConfig as writeConfigCore, -} from '@doist/cli-core' +} from '@todoist/cli-core' import { CliError } from './errors.js' const APP_NAME = 'comms-cli' diff --git a/src/lib/errors.ts b/src/lib/errors.ts index 73dc254..264bb38 100644 --- a/src/lib/errors.ts +++ b/src/lib/errors.ts @@ -1,8 +1,8 @@ -import { CliError as BaseCliError, type CliErrorCode, type ErrorType } from '@doist/cli-core' import { CommsRequestError, getCommsErrorString } from '@doist/comms-sdk' +import { CliError as BaseCliError, type CliErrorCode, type ErrorType } from '@todoist/cli-core' export { BaseCliError } -export type { ErrorType } from '@doist/cli-core' +export type { ErrorType } from '@todoist/cli-core' /** * Known error codes used across the CLI. diff --git a/src/lib/global-args.ts b/src/lib/global-args.ts index e871474..249c8a7 100644 --- a/src/lib/global-args.ts +++ b/src/lib/global-args.ts @@ -1,5 +1,5 @@ /** - * Per-CLI extension of `@doist/cli-core`'s global-args parser. + * Per-CLI extension of `@todoist/cli-core`'s global-args parser. * * Layers comms's `--include-private-channels`, `--non-interactive`, * `--interactive`, and the `--progress-jsonl ` space form on top of @@ -19,7 +19,7 @@ import { createSpinnerGate, type GlobalArgs as CoreGlobalArgs, parseGlobalArgs as parseCoreGlobalArgs, -} from '@doist/cli-core' +} from '@todoist/cli-core' type CommsSpecificFlags = { /** Bare/string/false — see `CommsLocalFlags.progressJsonl` for semantics. */ diff --git a/src/lib/input.ts b/src/lib/input.ts index b957657..ebb5a62 100644 --- a/src/lib/input.ts +++ b/src/lib/input.ts @@ -2,7 +2,7 @@ import { spawn } from 'node:child_process' import { readFile, unlink, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { readStdin } from '@doist/cli-core' +import { readStdin } from '@todoist/cli-core' import { CliError } from './errors.js' import { isNonInteractive } from './global-args.js' import type { StdinOptions } from './options.js' diff --git a/src/lib/markdown.ts b/src/lib/markdown.ts index e588254..da848c4 100644 --- a/src/lib/markdown.ts +++ b/src/lib/markdown.ts @@ -1,7 +1,7 @@ import { preloadMarkdown as corePreloadMarkdown, renderMarkdown as coreRenderMarkdown, -} from '@doist/cli-core/markdown' +} from '@todoist/cli-core/markdown' let preloadPromise: Promise | null = null diff --git a/src/lib/options.ts b/src/lib/options.ts index 8cb58b4..178bcf0 100644 --- a/src/lib/options.ts +++ b/src/lib/options.ts @@ -1,4 +1,4 @@ -import type { ListViewOptions as CoreListViewOptions } from '@doist/cli-core' +import type { ListViewOptions as CoreListViewOptions } from '@todoist/cli-core' export type ViewOptions = CoreListViewOptions & { full?: boolean diff --git a/src/lib/output.test.ts b/src/lib/output.test.ts index b3dec57..2c8ba8a 100644 --- a/src/lib/output.test.ts +++ b/src/lib/output.test.ts @@ -1,4 +1,4 @@ -import { captureConsole } from '@doist/cli-core/testing' +import { captureConsole } from '@todoist/cli-core/testing' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { BaseCliError } from './errors.js' import { isAccessible, resetGlobalArgs } from './global-args.js' diff --git a/src/lib/output.ts b/src/lib/output.ts index 047fdc8..f3d417c 100644 --- a/src/lib/output.ts +++ b/src/lib/output.ts @@ -1,4 +1,4 @@ -import { formatJson as formatJsonCore, formatNdjson as formatNdjsonCore } from '@doist/cli-core' +import { formatJson as formatJsonCore, formatNdjson as formatNdjsonCore } from '@todoist/cli-core' import chalk from 'chalk' import type { BaseCliError } from './errors.js' diff --git a/src/lib/progress.test.ts b/src/lib/progress.test.ts index c8e0c31..abb9177 100644 --- a/src/lib/progress.test.ts +++ b/src/lib/progress.test.ts @@ -1,5 +1,5 @@ import fs from 'node:fs' -import { captureConsole } from '@doist/cli-core/testing' +import { captureConsole } from '@todoist/cli-core/testing' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { resetGlobalArgs } from './global-args.js' import type { ProgressEvent } from './progress.js' diff --git a/src/lib/spinner.test.ts b/src/lib/spinner.test.ts index 4249057..80a3dbe 100644 --- a/src/lib/spinner.test.ts +++ b/src/lib/spinner.test.ts @@ -14,8 +14,8 @@ const createSpinnerMock = vi.fn(() => ({ resetEarlySpinner: vi.fn(), })) -vi.mock('@doist/cli-core', async () => { - const actual = await vi.importActual('@doist/cli-core') +vi.mock('@todoist/cli-core', async () => { + const actual = await vi.importActual('@todoist/cli-core') return { ...actual, createSpinner: createSpinnerMock, diff --git a/src/lib/spinner.ts b/src/lib/spinner.ts index 5b3adda..70403b7 100644 --- a/src/lib/spinner.ts +++ b/src/lib/spinner.ts @@ -1,7 +1,7 @@ -import { createSpinner } from '@doist/cli-core' +import { createSpinner } from '@todoist/cli-core' import { shouldDisableSpinner } from './global-args.js' -export type { SpinnerOptions } from '@doist/cli-core' +export type { SpinnerOptions } from '@todoist/cli-core' /** * Comms spinner kit. The CLI-specific bit is `shouldDisableSpinner` — diff --git a/src/lib/update.ts b/src/lib/update.ts index 26f8f0a..3cbb4ef 100644 --- a/src/lib/update.ts +++ b/src/lib/update.ts @@ -1,8 +1,8 @@ -import { fetchLatestVersion as fetchLatestVersionCore } from '@doist/cli-core/commands' +import { fetchLatestVersion as fetchLatestVersionCore } from '@todoist/cli-core/commands' import packageJson from '../../package.json' with { type: 'json' } import { getConfig, type UpdateChannel, UPDATE_CHANNELS } from './config.js' -export { compareVersions, getInstallTag, isNewer, parseVersion } from '@doist/cli-core/commands' +export { compareVersions, getInstallTag, isNewer, parseVersion } from '@todoist/cli-core/commands' export async function fetchLatestVersion(channel: UpdateChannel): Promise { return fetchLatestVersionCore({ packageName: packageJson.name, channel }) diff --git a/src/lib/usage-tracking.test.ts b/src/lib/usage-tracking.test.ts index b774b93..8274a19 100644 --- a/src/lib/usage-tracking.test.ts +++ b/src/lib/usage-tracking.test.ts @@ -1,4 +1,4 @@ -import { createTestProgram } from '@doist/cli-core/testing' +import { createTestProgram } from '@todoist/cli-core/testing' import type { Command } from 'commander' import { beforeEach, describe, expect, it, vi } from 'vitest' import packageJson from '../../package.json' with { type: 'json' } diff --git a/src/lib/usage-tracking.ts b/src/lib/usage-tracking.ts index ae7a5b8..e00fa07 100644 --- a/src/lib/usage-tracking.ts +++ b/src/lib/usage-tracking.ts @@ -1,4 +1,4 @@ -import { createUsageTracking } from '@doist/cli-core' +import { createUsageTracking } from '@todoist/cli-core' import type { Command } from 'commander' import packageJson from '../../package.json' with { type: 'json' } diff --git a/src/lib/user-records.ts b/src/lib/user-records.ts index 070c866..eca50ff 100644 --- a/src/lib/user-records.ts +++ b/src/lib/user-records.ts @@ -1,4 +1,4 @@ -import type { UserRecord, UserRecordStore } from '@doist/cli-core/auth' +import type { UserRecord, UserRecordStore } from '@todoist/cli-core/auth' import type { CommsAccount } from './auth-provider.js' import { makeCommsAccount } from './comms-account.js' import { type Config, type StoredUser, getConfig, updateConfig } from './config.js' diff --git a/vitest.config.ts b/vitest.config.ts index 21c3235..8fff175 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -7,13 +7,13 @@ export default defineConfig({ // The agent tooling's tests live outside `root`, next to the tooling. include: ['**/*.{test,spec}.{js,ts}', '../.agents/scripts/**/*.test.ts'], exclude: ['dist/**/*', 'node_modules/**/*'], - // Inline @doist/cli-core so vitest's module mocks (e.g. vi.doMock for - // 'node:fs/promises' or vi.mock('@doist/cli-core', …)) reach its + // Inline @todoist/cli-core so vitest's module mocks (e.g. vi.doMock for + // 'node:fs/promises' or vi.mock('@todoist/cli-core', …)) reach its // compiled imports. Without this, vitest treats it as external and // Node's native resolver bypasses the mock substitution. server: { deps: { - inline: ['@doist/cli-core'], + inline: ['@todoist/cli-core'], }, }, },