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'],
},
},
},
]