@hasna/todos 0.15.52 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1993 -0
- package/README.md +356 -42
- package/dist/ai-tools.d.ts.map +1 -1
- package/dist/ai.d.ts.map +1 -1
- package/dist/cli/cloud-router.d.ts +162 -72
- package/dist/cli/cloud-router.d.ts.map +1 -1
- package/dist/cli/commands/agent-commands.d.ts.map +1 -1
- package/dist/cli/commands/config-serve-commands.d.ts.map +1 -1
- package/dist/cli/commands/delegate.d.ts.map +1 -1
- package/dist/cli/commands/environment-snapshots.d.ts.map +1 -1
- package/dist/cli/commands/machines-api.d.ts +4 -0
- package/dist/cli/commands/machines-api.d.ts.map +1 -0
- package/dist/cli/commands/machines.d.ts.map +1 -1
- package/dist/cli/commands/mcp-hooks-commands.d.ts.map +1 -1
- package/dist/cli/commands/plan-commands.d.ts +3 -0
- package/dist/cli/commands/plan-commands.d.ts.map +1 -0
- package/dist/cli/commands/plan-template-commands.d.ts.map +1 -1
- package/dist/cli/commands/pr-group-commands.d.ts.map +1 -1
- package/dist/cli/commands/project-commands.d.ts.map +1 -1
- package/dist/cli/commands/query-commands.d.ts.map +1 -1
- package/dist/cli/commands/storage-commands.d.ts.map +1 -1
- package/dist/cli/commands/task-list-commands.d.ts +3 -0
- package/dist/cli/commands/task-list-commands.d.ts.map +1 -0
- package/dist/cli/commands/template-commands.d.ts +3 -0
- package/dist/cli/commands/template-commands.d.ts.map +1 -0
- package/dist/cli/helpers.d.ts.map +1 -1
- package/dist/cli/index.js +22072 -15949
- package/dist/cli/machine-api.d.ts +7 -0
- package/dist/cli/machine-api.d.ts.map +1 -0
- package/dist/cli/plan-read-api.d.ts +6 -0
- package/dist/cli/plan-read-api.d.ts.map +1 -0
- package/dist/cli/project-api.d.ts +119 -0
- package/dist/cli/project-api.d.ts.map +1 -0
- package/dist/cli/stage-a.d.ts +25 -5
- package/dist/cli/stage-a.d.ts.map +1 -1
- package/dist/cli/task-query-api.d.ts +21 -0
- package/dist/cli/task-query-api.d.ts.map +1 -0
- package/dist/cli/template-api.d.ts +7 -0
- package/dist/cli/template-api.d.ts.map +1 -0
- package/dist/cli/template-remote.d.ts +90 -0
- package/dist/cli/template-remote.d.ts.map +1 -0
- package/dist/cli-mcp-parity.d.ts.map +1 -1
- package/dist/contracts.js +908 -291
- package/dist/db/agents.d.ts +8 -0
- package/dist/db/agents.d.ts.map +1 -1
- package/dist/db/builtin-templates.d.ts +2 -33
- package/dist/db/builtin-templates.d.ts.map +1 -1
- package/dist/db/database.d.ts +6 -0
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/handoffs.d.ts.map +1 -1
- package/dist/db/identity-mapping.d.ts +25 -0
- package/dist/db/identity-mapping.d.ts.map +1 -1
- package/dist/db/machines.d.ts.map +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/plans.d.ts.map +1 -1
- package/dist/db/retrospectives.d.ts.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/task-crud.d.ts.map +1 -1
- package/dist/db/task-lists.d.ts.map +1 -1
- package/dist/db/task-runs.d.ts +2 -0
- package/dist/db/task-runs.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4341 -1756
- package/dist/lib/assignee-validation.d.ts.map +1 -1
- package/dist/lib/builtin-template-library.d.ts +32 -0
- package/dist/lib/builtin-template-library.d.ts.map +1 -0
- package/dist/lib/cli-reference.d.ts.map +1 -1
- package/dist/lib/config.d.ts +10 -13
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/db-backup.d.ts +1 -1
- package/dist/lib/db-backup.d.ts.map +1 -1
- package/dist/lib/env.d.ts +18 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/environment-snapshots.d.ts.map +1 -1
- package/dist/lib/feature-manifest.d.ts.map +1 -1
- package/dist/lib/gatherer.d.ts.map +1 -1
- package/dist/lib/headless-boundaries.d.ts +4 -3
- package/dist/lib/headless-boundaries.d.ts.map +1 -1
- package/dist/lib/local-encryption.d.ts +12 -0
- package/dist/lib/local-encryption.d.ts.map +1 -1
- package/dist/lib/local-opt-in.d.ts +104 -0
- package/dist/lib/local-opt-in.d.ts.map +1 -0
- package/dist/lib/paths.d.ts +20 -1
- package/dist/lib/paths.d.ts.map +1 -1
- package/dist/lib/plan-artifacts.d.ts +1 -0
- package/dist/lib/plan-artifacts.d.ts.map +1 -1
- package/dist/lib/plan-client-boundary.d.ts +2 -0
- package/dist/lib/plan-client-boundary.d.ts.map +1 -0
- package/dist/lib/plan-schedule.d.ts +6 -0
- package/dist/lib/plan-schedule.d.ts.map +1 -0
- package/dist/lib/project-panel.d.ts +6 -0
- package/dist/lib/project-panel.d.ts.map +1 -1
- package/dist/lib/project-receipt.d.ts +3 -0
- package/dist/lib/project-receipt.d.ts.map +1 -0
- package/dist/lib/sandbox-profiles.d.ts.map +1 -1
- package/dist/lib/shared-plan-artifacts.d.ts +14 -0
- package/dist/lib/shared-plan-artifacts.d.ts.map +1 -0
- package/dist/lib/sync.d.ts.map +1 -1
- package/dist/lib/task-list-client-boundary.d.ts +3 -0
- package/dist/lib/task-list-client-boundary.d.ts.map +1 -0
- package/dist/lib/task-routing.d.ts.map +1 -1
- package/dist/lib/template-client-boundary.d.ts +2 -0
- package/dist/lib/template-client-boundary.d.ts.map +1 -0
- package/dist/mcp/index.d.ts +53 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +50124 -60838
- package/dist/mcp/plan-api.d.ts +6 -0
- package/dist/mcp/plan-api.d.ts.map +1 -0
- package/dist/mcp/remote-authority.d.ts +49 -0
- package/dist/mcp/remote-authority.d.ts.map +1 -0
- package/dist/mcp/task-coordination-api.d.ts +15 -0
- package/dist/mcp/task-coordination-api.d.ts.map +1 -0
- package/dist/mcp/task-list-api.d.ts +8 -0
- package/dist/mcp/task-list-api.d.ts.map +1 -0
- package/dist/mcp/token-utils.d.ts.map +1 -1
- package/dist/mcp/tools/agents.d.ts.map +1 -1
- package/dist/mcp/tools/environment-snapshots.d.ts.map +1 -1
- package/dist/mcp/tools/machines.d.ts.map +1 -1
- package/dist/mcp/tools/task-adv-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-auto-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-crud.d.ts.map +1 -1
- package/dist/mcp/tools/task-meta-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-resources.d.ts.map +1 -1
- package/dist/mcp/tools/templates.d.ts.map +1 -1
- package/dist/mcp.d.ts +2 -2
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +45 -19
- package/dist/project-registration.js +3349 -645
- package/dist/registry.js +909 -292
- package/dist/release-provenance.json +6 -6
- package/dist/sdk/client.d.ts +53 -4
- package/dist/sdk/client.d.ts.map +1 -1
- package/dist/sdk/index.d.ts +2 -0
- package/dist/sdk/index.d.ts.map +1 -1
- package/dist/sdk/index.js +1253 -1088
- package/dist/sdk/resolve.d.ts +101 -0
- package/dist/sdk/resolve.d.ts.map +1 -0
- package/dist/sdk/types.d.ts +17 -2
- package/dist/sdk/types.d.ts.map +1 -1
- package/dist/sdk/v1.generated.d.ts +334 -3
- package/dist/sdk/v1.generated.d.ts.map +1 -1
- package/dist/server/auth-posture.d.ts +66 -7
- package/dist/server/auth-posture.d.ts.map +1 -1
- package/dist/server/client-ip.d.ts +39 -0
- package/dist/server/client-ip.d.ts.map +1 -0
- package/dist/server/cloud.d.ts +2 -1
- package/dist/server/cloud.d.ts.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +24758 -16687
- package/dist/server/openapi.d.ts +2514 -469
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/port.d.ts +2 -2
- package/dist/server/port.d.ts.map +1 -1
- package/dist/server/rate-limit-config.d.ts +6 -0
- package/dist/server/rate-limit-config.d.ts.map +1 -0
- package/dist/server/routes.d.ts +3 -6
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/serve.d.ts +2 -6
- package/dist/server/serve.d.ts.map +1 -1
- package/dist/server/v1.d.ts +3 -1
- package/dist/server/v1.d.ts.map +1 -1
- package/dist/storage/atomic-project-migration.d.ts +53 -0
- package/dist/storage/atomic-project-migration.d.ts.map +1 -0
- package/dist/storage/index.d.ts +4 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/interfaces.d.ts +135 -3
- package/dist/storage/interfaces.d.ts.map +1 -1
- package/dist/storage/local-sqlite.d.ts.map +1 -1
- package/dist/storage/machine-registry.d.ts +36 -0
- package/dist/storage/machine-registry.d.ts.map +1 -0
- package/dist/storage/postgres-adapter.d.ts.map +1 -1
- package/dist/storage/postgres-sync.d.ts +2 -2
- package/dist/storage/postgres-sync.d.ts.map +1 -1
- package/dist/storage/run-artifact-creation-upload.d.ts +50 -0
- package/dist/storage/run-artifact-creation-upload.d.ts.map +1 -0
- package/dist/storage/s3-artifact-sync.d.ts +18 -0
- package/dist/storage/s3-artifact-sync.d.ts.map +1 -1
- package/dist/storage/sqlite-snapshot.d.ts +2 -0
- package/dist/storage/sqlite-snapshot.d.ts.map +1 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +3154 -350
- package/dist/task-manifest/postgres.d.ts +1 -1
- package/dist/task-manifest/sqlite.d.ts +1 -1
- package/dist/task-manifest.js +250 -73
- package/dist/task-subtree-transfer.js +198 -4
- package/dist/testing.d.ts +90 -29
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +34 -10
- package/dist/types/index.d.ts +43 -4
- package/dist/types/index.d.ts.map +1 -1
- package/docs/PLAN_API.md +93 -0
- package/docs/TASK_LIST_API.md +58 -0
- package/docs/TASK_QUERY_API.md +14 -0
- package/docs/TEMPLATE_API.md +18 -0
- package/docs/native-storage.md +405 -0
- package/package.json +18 -15
- package/postinstall.js +52 -1
- package/dashboard/dist/assets/index-BNQ4gJua.js +0 -342
- package/dashboard/dist/assets/index-DjzvHUWt.css +0 -1
- package/dashboard/dist/index.html +0 -13
- package/dashboard/dist/logo.jpg +0 -0
- package/dist/mcp/tools/code-tools.d.ts +0 -15
- package/dist/mcp/tools/code-tools.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -11,6 +11,223 @@ Universal task management for AI coding agents - CLI + MCP server + interactive
|
|
|
11
11
|
bun install -g @hasna/todos
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
+
## Upgrading From 0.15.52
|
|
15
|
+
|
|
16
|
+
0.16.0 puts every surface on one credential resolver and moves three command
|
|
17
|
+
families to the shared API. Upgrading from 0.15.52 needs no data migration, but
|
|
18
|
+
four things change:
|
|
19
|
+
|
|
20
|
+
- **Configure a credential.** The `./sdk` client no longer reads
|
|
21
|
+
`~/.todos/config.json`, and the unprefixed `TODOS_URL` / key spellings are
|
|
22
|
+
legacy. Put the key in the macOS Keychain, in
|
|
23
|
+
`~/.hasna/todos/config/credentials` (owner-only `0400`/`0600`), or in
|
|
24
|
+
`HASNA_TODOS_API_KEY`, then confirm with `todos storage status --json`. With no
|
|
25
|
+
credential the CLI exits non-zero (`REMOTE_API_CONFIG_MISSING`) instead of
|
|
26
|
+
quietly serving local rows, and MCP tool calls fail closed rather than falling
|
|
27
|
+
back to the on-box store (see the third bullet below). The
|
|
28
|
+
retired locations — `~/.hasna/fleet-env`, `~/.hasna/cloud`, `~/.config/hasna`,
|
|
29
|
+
`$XDG_CONFIG_HOME` — are not read.
|
|
30
|
+
- **`todos plans`, `todos task-lists` (`lists`, `tl`) and the template commands
|
|
31
|
+
are shared-API only.** They refuse `HASNA_TODOS_DB_PATH`, `TODOS_DB_PATH`,
|
|
32
|
+
`HASNA_TODOS_LOCAL` and `TODOS_LOCAL` before startup — any one of them set is
|
|
33
|
+
enough to refuse the command, and the refusal names the ones that are set.
|
|
34
|
+
`todos template-library` is unchanged and still credential-free. The MCP plan
|
|
35
|
+
tools (`create_plan`, `list_plans`, `get_plan`, `update_plan`, `delete_plan`)
|
|
36
|
+
and task-list tools (`create_task_list`, `list_task_lists`, `get_task_list`,
|
|
37
|
+
`update_task_list`, `delete_task_list`) are shared-API only as well.
|
|
38
|
+
- **Most MCP tools that read the on-box store need `HASNA_TODOS_LOCAL=1`, and
|
|
39
|
+
every refusal is typed.** The MCP server no longer opens the on-box SQLite
|
|
40
|
+
store implicitly, so tools that still read it directly — the template family,
|
|
41
|
+
tags and labels, stale/blocked work, `doctor`, run ledger,
|
|
42
|
+
handoffs, review queues, retrospectives, risks, knowledge records, backups,
|
|
43
|
+
calendar, boards, focus/time reports and dispatches — fail on the default
|
|
44
|
+
posture with the typed `{"code":"API_DATABASE_FALLBACK_FORBIDDEN"}` payload,
|
|
45
|
+
whose `suggestion` names the opt-in; the server also logs the same code.
|
|
46
|
+
Measured at 0.16.0 with `TODOS_PROFILE=full`, that is 68 of the 125
|
|
47
|
+
zero-required-argument tools. A further 18 return the typed
|
|
48
|
+
`REMOTE_API_CONFIG_MISSING` — the 16 shared-API tools that need a credential
|
|
49
|
+
(`list_tasks`, `list_projects`, `list_agents`, `get_next_task`, `get_status`,
|
|
50
|
+
`bootstrap`, `get_context`, `get_my_tasks`, `get_my_workload`, `get_health`,
|
|
51
|
+
`standup`, `list_my_tasks`, `machines_register`, `machines_list`,
|
|
52
|
+
`machines_heartbeat`, `machines_topology`) plus `list_plans` and
|
|
53
|
+
`list_task_lists`. Five more refuse caller input or local state with the typed
|
|
54
|
+
`INVALID_INPUT` / `ENCRYPTION_KEY_UNAVAILABLE` / `ENCRYPTED_PAYLOAD_INVALID`,
|
|
55
|
+
and five answer a readable text refusal ("Provide agent_id, id, or name.").
|
|
56
|
+
No zero-argument tool returns an opaque `UNKNOWN_ERROR` on either posture —
|
|
57
|
+
the default one measured above, or the `HASNA_TODOS_LOCAL=1` opt-in these
|
|
58
|
+
tools are served under. Run the server with
|
|
59
|
+
`HASNA_TODOS_LOCAL=1` to keep using the on-box tools; that opt-in is ignored
|
|
60
|
+
when `HASNA_TODOS_API_KEY` or `HASNA_TODOS_API_URL` is set, because a
|
|
61
|
+
configured environment outranks it.
|
|
62
|
+
- **The advertised command list is route-dependent.** 0.15.52 listed all 166
|
|
63
|
+
commands to every caller because the local fallback was implicit. 0.16.0
|
|
64
|
+
lists only what the resolved route exposes: 76 root commands on the hosted
|
|
65
|
+
route once a credential resolves, 75 with none configured (the extra verb,
|
|
66
|
+
`stale-lock-handoff`, is advertised only when the shared-API authority is),
|
|
67
|
+
and the full 166 only with `HASNA_TODOS_LOCAL=1` set, because the on-box
|
|
68
|
+
families fail closed on the default posture. No command was removed —
|
|
69
|
+
`todos --help`, `todos manual` and
|
|
70
|
+
the generated completions all honour the same rule, and every verb still
|
|
71
|
+
resolves once its posture is configured. `todos storage status` also reports
|
|
72
|
+
credential-source disagreements as a `warnings` array (`--json`) and a yellow
|
|
73
|
+
stderr line (human mode); the entries name sources and env key names, never a
|
|
74
|
+
value.
|
|
75
|
+
|
|
76
|
+
Everything else still runs offline with `HASNA_TODOS_LOCAL=1` (when the
|
|
77
|
+
environment configures no authority or credential of its own). The per-surface
|
|
78
|
+
detail lives under `apps/todos/docs/` (`PLAN_API.md`,
|
|
79
|
+
`TASK_LIST_API.md`, `TEMPLATE_API.md`, `TASK_QUERY_API.md`,
|
|
80
|
+
`native-storage.md`). The npm tarball ships this README, `CHANGELOG.md` and those
|
|
81
|
+
five documents alongside `dist/`, so they are readable from an installed
|
|
82
|
+
package; `docs/cli-help.md` is repo-only.
|
|
83
|
+
|
|
84
|
+
## HTTP request budget
|
|
85
|
+
|
|
86
|
+
`todos-serve` defaults to **12,000 requests per minute per network peer**, per
|
|
87
|
+
server process. Set `HASNA_TODOS_RATE_LIMIT_MAX` to an integer from `1` to
|
|
88
|
+
`1000000` to choose a different finite budget. The legacy `TODOS_RATE_LIMIT_MAX`
|
|
89
|
+
variable still works; the canonical variable takes precedence when both are set.
|
|
90
|
+
An absent or blank value uses the default. Invalid values fail startup before
|
|
91
|
+
the database is opened or the server listens.
|
|
92
|
+
|
|
93
|
+
The fixed one-minute window covers all routes, including health checks and
|
|
94
|
+
unauthenticated requests, except CORS `OPTIONS`. Exceeding the budget returns
|
|
95
|
+
HTTP `429` with `Retry-After` in seconds. Authentication requirements stay the
|
|
96
|
+
same. This setting is a request allowance, not a throughput guarantee; size a
|
|
97
|
+
deployment using observed latency, database load, and its gateway limits.
|
|
98
|
+
|
|
99
|
+
Behind a reverse proxy, callers share the proxy's bucket unless the operator
|
|
100
|
+
has explicitly configured trusted forwarding. Keep proxy trust off for direct
|
|
101
|
+
traffic. Only enable `TODOS_TRUST_PROXY=1` when network rules restrict access to
|
|
102
|
+
proxies that overwrite forwarding headers; `TODOS_TRUSTED_PROXIES` helps resolve
|
|
103
|
+
the forwarded chain and does not itself restrict which sockets may connect.
|
|
104
|
+
|
|
105
|
+
## Credentials and Service Authority
|
|
106
|
+
|
|
107
|
+
The CLI, the MCP server and the `./sdk` client all resolve their credential
|
|
108
|
+
through one resolver — the client chain in `@hasna/contracts` — so there is
|
|
109
|
+
exactly one place to put a key and exactly one precedence to learn. Resolution
|
|
110
|
+
happens **on every call**, never once at process start, so rotating a key heals
|
|
111
|
+
a long-running shell, MCP server or agent without restarting it: a `TodosClient`
|
|
112
|
+
built at startup and held for hours re-reads the Keychain and the credentials
|
|
113
|
+
file on each request and picks up the new key on the next one.
|
|
114
|
+
|
|
115
|
+
Two things are deliberately *not* re-resolved. An explicit `apiKey` argument is
|
|
116
|
+
tier 1 — a pin the caller owns — and the **service authority is fixed for the
|
|
117
|
+
life of a client**, because a credential written for one authority must never be
|
|
118
|
+
sent to another; build a new client to point somewhere else.
|
|
119
|
+
|
|
120
|
+
That second rule binds the credential too. `new TodosClient({ baseUrl })` with
|
|
121
|
+
no `apiKey` pins the authority *and* sends no credential at all: the key in your
|
|
122
|
+
Keychain or `~/.hasna/todos/config/credentials` was written for the fleet, so it
|
|
123
|
+
is never re-resolved onto a URL you named — a local `todos-serve`, a staging
|
|
124
|
+
box, a test double. Pass `apiKey` alongside `baseUrl` when that authority is
|
|
125
|
+
supposed to get a credential. Per-call re-resolution applies to a client that
|
|
126
|
+
resolved its own hosted authority, which is where rotation matters.
|
|
127
|
+
|
|
128
|
+
**Credential, highest to lowest:**
|
|
129
|
+
|
|
130
|
+
| # | Tier | Where |
|
|
131
|
+
| --- | --- | --- |
|
|
132
|
+
| 1 | explicit argument | `apiKey` on `new TodosClient({...})` — the `todos` CLI exposes no hosted-credential flag of its own (`todos ai --profile` is a runtime profile, not a credential tier) |
|
|
133
|
+
| 2 | deliberate env pointer | `HASNA_TODOS_API_KEY_OVERRIDE`, `HASNA_PROFILE`, `HASNA_TODOS_API_KEY_REF` (a secrets-vault item key, never a value) |
|
|
134
|
+
| 3 | macOS Keychain | generic password `hasna.credentials.todos.api-key`, account `HASNA_STATION` → `hostname -s` → `USER` |
|
|
135
|
+
| 4 | disk | `~/.hasna/todos/config/credentials`, owner-only `0400`/`0600` |
|
|
136
|
+
| 5 | environment | `HASNA_TODOS_API_KEY` |
|
|
137
|
+
|
|
138
|
+
Tier 3 is account-scoped, not host-scoped: the item is looked up under the
|
|
139
|
+
station name, so a key stored for one station is invisible on another. Set
|
|
140
|
+
`HASNA_STATION` explicitly (a wrapper, a launchd plist, a CI job) when the
|
|
141
|
+
account name is not the first of `hostname -s` / `USER`; with none of the three
|
|
142
|
+
matching the item's account, the lookup misses and the run fails closed with
|
|
143
|
+
`REMOTE_API_CONFIG_MISSING` rather than silently resolving something else.
|
|
144
|
+
|
|
145
|
+
Tiers 1 and 2 are *deliberate*: if one is set and cannot be honoured, the run
|
|
146
|
+
fails — it never quietly authenticates as a different principal. Tier 5 is a
|
|
147
|
+
first-class tier, not a deprecated one (a wrapper that injects the key per
|
|
148
|
+
process is correct), and it sits **below** disk so a rotated on-disk key beats a
|
|
149
|
+
stale `export` in an old shell. Nothing is read from `~/.hasna/fleet-env`,
|
|
150
|
+
`~/.hasna/cloud`, `~/.config/hasna`, `$XDG_CONFIG_HOME`, or `~/.todos/config.json`.
|
|
151
|
+
|
|
152
|
+
**Service authority**, same shape:
|
|
153
|
+
|
|
154
|
+
`HASNA_TODOS_API_URL` → the Keychain `hasna.credentials.todos.api-url` item →
|
|
155
|
+
`~/.hasna/todos/config/credentials` → the fleet gateway
|
|
156
|
+
`https://api.hasna.com/todos`. Configure the URL only to point somewhere else;
|
|
157
|
+
the client appends `/v1` itself, and sources that disagree are refused rather
|
|
158
|
+
than silently preferred. `HASNA_HOME` and `HASNA_CONFIG_HOME` move the disk
|
|
159
|
+
root; the older unprefixed spellings of these two variables (without the
|
|
160
|
+
`HASNA_` prefix) still work as a silent fallback for one release, but the
|
|
161
|
+
`HASNA_TODOS_*` names are canonical and are what every diagnostic names.
|
|
162
|
+
|
|
163
|
+
The credentials file is a plain env file, and its permissions are enforced — a
|
|
164
|
+
group- or world-readable one is refused rather than read:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
install -m 700 -d ~/.hasna/todos/config
|
|
168
|
+
printf 'HASNA_TODOS_API_KEY=%s\n' "$KEY" > ~/.hasna/todos/config/credentials
|
|
169
|
+
chmod 600 ~/.hasna/todos/config/credentials
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Hosted mode fails closed.** With no credential the CLI exits non-zero
|
|
173
|
+
(`REMOTE_API_CONFIG_MISSING`) and names the tiers it consulted; the stdio MCP
|
|
174
|
+
server exits the same way before answering `initialize`. Once a hosted
|
|
175
|
+
authority resolves, each call fails instead of serving local rows — the
|
|
176
|
+
credential-gated tools with the typed `REMOTE_API_CONFIG_MISSING` and the
|
|
177
|
+
on-box tools with the typed `REMOTE_COMMAND_UNSUPPORTED` (or
|
|
178
|
+
`API_DATABASE_FALLBACK_FORBIDDEN` on surfaces without a startup refusal), both
|
|
179
|
+
described under
|
|
180
|
+
[Upgrading From 0.15.52](#upgrading-from-01552). Neither surface falls back to
|
|
181
|
+
the local SQLite store, because serving local rows while authentication is broken
|
|
182
|
+
prints healthy output for a broken system.
|
|
183
|
+
|
|
184
|
+
The `./sdk` surface fails closed the same way: with nothing resolved,
|
|
185
|
+
`new TodosClient()` and `createTodosV1Client()` both throw
|
|
186
|
+
`TODOS_CREDENTIAL_MISSING` naming every tier they consulted. `TodosClient` can
|
|
187
|
+
speak to the on-box `todos-serve` at `http://localhost:19427` — that is a real
|
|
188
|
+
mode for it — but only under the explicit opt-in below, never as a fallback.
|
|
189
|
+
Every other refusal is a throw on all three surfaces too — aliases that
|
|
190
|
+
disagree, an unreadable credential file, a URL with no key — because those are
|
|
191
|
+
misconfigurations, not an absence of configuration.
|
|
192
|
+
|
|
193
|
+
A **declared-but-blank** authority variable is deliberately *not* one of those
|
|
194
|
+
refusals. At the Todos seam a blank has always meant "unset" — helpers in the
|
|
195
|
+
wild blank rather than delete — so every authority variable that is declared
|
|
196
|
+
but empty is removed before the resolver runs. `HASNA_TODOS_API_KEY=` therefore
|
|
197
|
+
resolves the machine's ambient Keychain item exactly as an unset variable does:
|
|
198
|
+
it neither configures a credential nor withholds one. To force the on-box store
|
|
199
|
+
from a wrapper, set `HASNA_TODOS_LOCAL=1` — a blank authority variable counts as
|
|
200
|
+
absent for the opt-in too, so the opt-in is still honoured when
|
|
201
|
+
`HASNA_TODOS_API_KEY` is present but empty — instead of blanking a credential
|
|
202
|
+
variable.
|
|
203
|
+
|
|
204
|
+
On the hosted route the MCP server never opens the local store either: the
|
|
205
|
+
tools and `todos://` resources that only exist for the on-box SQLite file
|
|
206
|
+
(dispatch, templates, handoffs, boards, runs, `todos://projects`, …) answer
|
|
207
|
+
`REMOTE_COMMAND_UNSUPPORTED` naming the opt-in, instead of reading an empty
|
|
208
|
+
local file and reporting it as the fleet. Machine and task tools are
|
|
209
|
+
shared-API routed on that route and refuse under their own `REMOTE_API_*`
|
|
210
|
+
code when the authority cannot serve them.
|
|
211
|
+
|
|
212
|
+
**Local mode is deliberate, and it says so.** `@hasna/todos` is usable entirely
|
|
213
|
+
offline against an on-box SQLite store — set `HASNA_TODOS_LOCAL=1` (alias
|
|
214
|
+
`TODOS_LOCAL=1`). It is honoured only when the environment configures no
|
|
215
|
+
authority and no credential, it is answered *before* the resolver runs (so no
|
|
216
|
+
Keychain item and no credential file is read), and every local run prints one
|
|
217
|
+
line on stderr saying it is local.
|
|
218
|
+
|
|
219
|
+
Three command families are exempt from local mode and are shared-API only:
|
|
220
|
+
`todos plans`, `todos task-lists` (aliases `lists`, `tl`) and the template
|
|
221
|
+
commands (`templates`, `template-init`, `template-preview`, `template-export`,
|
|
222
|
+
`template-import`, `template-history`). They refuse `HASNA_TODOS_DB_PATH`,
|
|
223
|
+
`TODOS_DB_PATH`, `HASNA_TODOS_LOCAL` and `TODOS_LOCAL` before startup and need a
|
|
224
|
+
credential. `todos template-library` is the exception on the other side: it
|
|
225
|
+
renders the library bundled in the package and stays credential-free.
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
todos storage status --json # which tier supplied the key, and which URL applied
|
|
229
|
+
```
|
|
230
|
+
|
|
14
231
|
## CLI Usage
|
|
15
232
|
|
|
16
233
|
```bash
|
|
@@ -25,6 +242,13 @@ todos completions zsh > ~/.zsh/completions/_todos
|
|
|
25
242
|
todos completions fish > ~/.config/fish/completions/todos.fish
|
|
26
243
|
```
|
|
27
244
|
|
|
245
|
+
`--help`, `manual` and the completions all derive from the same tree, and that
|
|
246
|
+
tree is filtered by the resolved route: the default posture advertises the
|
|
247
|
+
commands that can run against the hosted surface, and `HASNA_TODOS_LOCAL=1`
|
|
248
|
+
advertises the full on-box set. See
|
|
249
|
+
[Upgrading From 0.15.52](#upgrading-from-01552) and
|
|
250
|
+
`apps/todos/docs/cli-help.md`.
|
|
251
|
+
|
|
28
252
|
Print the local CLI manual when you need install/update commands, examples,
|
|
29
253
|
JSON output contracts, error behavior, and the command catalog:
|
|
30
254
|
|
|
@@ -282,8 +506,10 @@ todos extract-watch . --dry-run --max-runs 1 --json
|
|
|
282
506
|
```
|
|
283
507
|
|
|
284
508
|
Created tasks are tagged with `extracted` and linked back to the source file.
|
|
285
|
-
|
|
286
|
-
|
|
509
|
+
The source index is CLI-only: the former `extract_todos` / `watch_source_todos`
|
|
510
|
+
MCP tools were removed (a filesystem watcher is not an MCP tool call, and the
|
|
511
|
+
scan runs against the local checkout, not the hosted fleet). No hosted code
|
|
512
|
+
search, hosted sync, or telemetry is used.
|
|
287
513
|
|
|
288
514
|
## Local Editor Integrations
|
|
289
515
|
|
|
@@ -464,7 +690,7 @@ OpenLoops updates those pointers after admission or evaluator progress:
|
|
|
464
690
|
todos task workflow-pointers <task-id> \
|
|
465
691
|
--invocation <workflow-invocation-id> \
|
|
466
692
|
--run <workflow-run-id> \
|
|
467
|
-
--manifest
|
|
693
|
+
--manifest ~/.hasna/loops/runs/<project>/<subject>/<run>/manifest.json \
|
|
468
694
|
--state working \
|
|
469
695
|
--json
|
|
470
696
|
```
|
|
@@ -700,34 +926,60 @@ MCP clients get the same local coordination through `claim_next_task`,
|
|
|
700
926
|
`claim_next_task` can opt into stale recovery with `steal_stale` and
|
|
701
927
|
`stale_minutes`.
|
|
702
928
|
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
929
|
+
`get_stale_tasks` (and the other MCP tools that read the on-box store) require
|
|
930
|
+
the deliberate local opt-in: start the MCP server with `HASNA_TODOS_LOCAL=1`, or
|
|
931
|
+
the call fails on the default posture with the typed
|
|
932
|
+
`API_DATABASE_FALLBACK_FORBIDDEN` refusal. See
|
|
933
|
+
[Upgrading From 0.15.52](#upgrading-from-01552) for the affected families and
|
|
934
|
+
the one case where the opt-in is ignored.
|
|
935
|
+
|
|
936
|
+
## Plan Templates
|
|
937
|
+
|
|
938
|
+
The package ships a marketplace-free template library for bug fixes, feature
|
|
939
|
+
implementation, security review, releases, migrations, incidents, docs
|
|
940
|
+
refreshes, QA, and open source package bootstraps. Templates can create one
|
|
941
|
+
task or a full ordered plan with dependencies, variables, priorities, tags, and
|
|
942
|
+
descriptions.
|
|
943
|
+
|
|
944
|
+
Two surfaces are involved, and they are not the same store:
|
|
945
|
+
|
|
946
|
+
- `todos template-library` renders the library bundled in the package. It is
|
|
947
|
+
credential-free and never opens a database, so it works offline:
|
|
948
|
+
|
|
949
|
+
```bash
|
|
950
|
+
todos template-library --json
|
|
951
|
+
todos template-library --write .todos/templates
|
|
952
|
+
```
|
|
953
|
+
|
|
954
|
+
- The remaining template commands are served by the authenticated shared API.
|
|
955
|
+
`todos template-init`, `todos template-preview`, `todos templates --use`,
|
|
956
|
+
`todos template-export`, `todos template-import` and `todos template-history`
|
|
957
|
+
require `HASNA_TODOS_API_URL` and `HASNA_TODOS_API_KEY` (or saved account
|
|
958
|
+
credentials) and refuse an on-box database selection before startup:
|
|
959
|
+
|
|
960
|
+
```bash
|
|
961
|
+
todos template-init
|
|
962
|
+
todos template-preview <template-id> --var name=api
|
|
963
|
+
todos templates --use <template-id> --var name=api
|
|
964
|
+
todos template-export <template-id> > plan-template.json
|
|
965
|
+
todos template-import plan-template.json
|
|
966
|
+
```
|
|
720
967
|
|
|
721
968
|
`todos template-library --write` writes editable JSON files that use the same
|
|
722
969
|
shape as `todos template-import`, so teams can fork a built-in workflow without
|
|
723
970
|
contacting any hosted marketplace. `todos templates --use` creates every task in
|
|
724
|
-
a multi-task template and wires its
|
|
725
|
-
immediately run `todos ready`, `todos blocked`, or
|
|
726
|
-
`todos deps <task-id> --graph` against the generated plan.
|
|
727
|
-
|
|
728
|
-
|
|
971
|
+
a multi-task template and wires its dependency graph in the shared account, so
|
|
972
|
+
agents can immediately run `todos ready`, `todos blocked`, or
|
|
973
|
+
`todos deps <task-id> --graph` against the generated plan. MCP clients reach the
|
|
974
|
+
bundled library through `list_template_library` and `write_template_library`,
|
|
975
|
+
which are credential-free and open no store. The remaining MCP template tools —
|
|
976
|
+
`init_templates`, `create_template`, `list_templates`,
|
|
729
977
|
`create_task_from_template`, `preview_template`, `export_template`, and
|
|
730
|
-
`import_template
|
|
978
|
+
`import_template` — read the on-box SQLite store and are not served on the
|
|
979
|
+
default posture: start the MCP server with `HASNA_TODOS_LOCAL=1` to use them.
|
|
980
|
+
That opt-in is ignored when the environment sets `HASNA_TODOS_API_KEY` or
|
|
981
|
+
`HASNA_TODOS_API_URL`, which leaves these tools unreachable (see
|
|
982
|
+
[Upgrading From 0.15.52](#upgrading-from-01552)).
|
|
731
983
|
|
|
732
984
|
## Moving Tasks Between Plans
|
|
733
985
|
|
|
@@ -748,8 +1000,21 @@ todos plans --show <plan-id> # verify the plan's task set
|
|
|
748
1000
|
|
|
749
1001
|
Plan references accept a UUID, a plan slug, a plan name, or a unique id prefix.
|
|
750
1002
|
An unknown or ambiguous reference exits non-zero before any task is modified.
|
|
751
|
-
|
|
752
|
-
SQLite file, or the shared dataset behind a hosted
|
|
1003
|
+
`todos add`, `todos update` and `todos bulk` follow whichever store the CLI is
|
|
1004
|
+
configured for — the local SQLite file, or the shared dataset behind a hosted
|
|
1005
|
+
`/v1` authority. `todos plans` does not: it is served by the authenticated
|
|
1006
|
+
shared API only and refuses `HASNA_TODOS_DB_PATH`, `TODOS_DB_PATH`,
|
|
1007
|
+
`HASNA_TODOS_LOCAL` and `TODOS_LOCAL` before startup.
|
|
1008
|
+
|
|
1009
|
+
`todos plans --artifact <id-or-slug>` and `--write-artifacts` compare local
|
|
1010
|
+
Markdown against the shared plan record and therefore require an explicit
|
|
1011
|
+
`--artifact-root <directory>` — a trusted local project directory the caller
|
|
1012
|
+
chooses. Before 0.16.0 both options defaulted to the project path recorded in
|
|
1013
|
+
local SQLite, so the older form `todos plans --artifact <id-or-slug> --json`
|
|
1014
|
+
still appears in notes from that release; it now exits non-zero with
|
|
1015
|
+
`--artifact-root is required`. The files stay under
|
|
1016
|
+
`<artifact-root>/.hasna/todos/plans/<project-id>/`, and a path returned by the
|
|
1017
|
+
API is never used.
|
|
753
1018
|
|
|
754
1019
|
## Local Git Traceability
|
|
755
1020
|
|
|
@@ -1471,16 +1736,19 @@ todos-mcp
|
|
|
1471
1736
|
|
|
1472
1737
|
## HTTP mode
|
|
1473
1738
|
|
|
1474
|
-
|
|
1739
|
+
The Streamable HTTP transport is served by `todos-serve`, never by `todos-mcp`
|
|
1740
|
+
(stdio only). `todos-mcp --http`, `todos-mcp --port <n>` and `MCP_HTTP=1` are
|
|
1741
|
+
refused with exit code 2 — the listener and its auth posture are server-only
|
|
1742
|
+
code and do not ship in a client binary that MCP clients spawn without a
|
|
1743
|
+
credential. Start the server instead:
|
|
1475
1744
|
|
|
1476
1745
|
```bash
|
|
1477
|
-
todos-mcp
|
|
1478
|
-
todos-mcp --port 8881 # explicit HTTP port (default MCP HTTP port is 8881)
|
|
1746
|
+
todos-serve # mounts POST /mcp next to /api/*; see "REST API" for the auth gate
|
|
1479
1747
|
```
|
|
1480
1748
|
|
|
1481
|
-
- Bind: `127.0.0.1`
|
|
1749
|
+
- Bind: `127.0.0.1` by default
|
|
1482
1750
|
- Health: `GET /health` → `{"status":"ok","name":"todos"}`
|
|
1483
|
-
- MCP: `POST /mcp` on the same server as the
|
|
1751
|
+
- MCP: `POST /mcp` on the same server as the REST API (Streamable HTTP, stateless)
|
|
1484
1752
|
|
|
1485
1753
|
The MCP server defaults to the token-saving `TODOS_PROFILE=minimal` profile.
|
|
1486
1754
|
Use `TODOS_PROFILE=standard` for broader task/project/resource tools, or
|
|
@@ -1502,7 +1770,7 @@ refuses to start unless one of the following is true:
|
|
|
1502
1770
|
|
|
1503
1771
|
| Configuration | Result |
|
|
1504
1772
|
| --- | --- |
|
|
1505
|
-
| `
|
|
1773
|
+
| `HASNA_TODOS_SERVER_API_KEY=<key>` (or `--api-key <key>`) | `/api/*` + `/mcp` require the key |
|
|
1506
1774
|
| at least one `todos api-keys create` key exists | `/api/*` + `/mcp` require a key |
|
|
1507
1775
|
| `--allow-anonymous` **and** a loopback bind | anonymous, loopback peers only (local dev) |
|
|
1508
1776
|
| a cloud `DATABASE_URL` is configured (hosted `/v1` deployment) | `/api/*` + `/mcp` are **not served**; `/v1` stays authenticated |
|
|
@@ -1510,24 +1778,68 @@ refuses to start unless one of the following is true:
|
|
|
1510
1778
|
|
|
1511
1779
|
```bash
|
|
1512
1780
|
todos api-keys create "My app" # then send x-api-key / Authorization: Bearer
|
|
1513
|
-
|
|
1781
|
+
HASNA_TODOS_SERVER_API_KEY=<key> todos-serve --host 0.0.0.0
|
|
1514
1782
|
todos serve --allow-anonymous # local dev only; refused for a non-loopback --host
|
|
1515
1783
|
```
|
|
1516
1784
|
|
|
1517
1785
|
`--allow-anonymous` (or `TODOS_ALLOW_ANONYMOUS=1`) is refused for any non-loopback
|
|
1518
1786
|
bind host, and even when enabled it only serves requests whose transport peer is
|
|
1519
1787
|
itself loopback — so it can never publish an anonymous task read/write plane
|
|
1520
|
-
off-box. `todos-mcp --http`
|
|
1521
|
-
|
|
1788
|
+
off-box. (`todos-mcp --http` used to set it implicitly; that path is gone — the MCP
|
|
1789
|
+
bin is stdio-only and `todos-serve` is the only process that serves `/mcp`.) Set
|
|
1790
|
+
`HASNA_TODOS_SERVER_API_KEY` (and send it from your MCP client) to require a
|
|
1522
1791
|
credential there too.
|
|
1523
1792
|
|
|
1524
|
-
Pass the generated key from your app as `x-api-key` or
|
|
1525
|
-
|
|
1793
|
+
Pass the generated key from your app as `x-api-key` or `Authorization: Bearer`.
|
|
1794
|
+
|
|
1795
|
+
`HASNA_TODOS_SERVER_API_KEY` is the **server's** own variable — the credential
|
|
1796
|
+
`todos-serve` demands from its callers. It is deliberately NOT one of the client
|
|
1797
|
+
credential names: `HASNA_TODOS_API_KEY` is how a client finds a key (the resolver
|
|
1798
|
+
documented under [Credentials and Service Authority](#credentials-and-service-authority)),
|
|
1799
|
+
and a fleet client key exported on a workstation must never silently become the
|
|
1800
|
+
local server's accepted key — one name cannot play both roles on opposite sides
|
|
1801
|
+
of the same trust boundary. `todos serve` prints one line at startup naming which
|
|
1802
|
+
variable supplied its accepted key. For one release the client names
|
|
1803
|
+
(`HASNA_TODOS_API_KEY` / `TODOS_API_KEY`) are still accepted as a documented
|
|
1804
|
+
fallback so an env written before 2026-09-05 keeps working; the startup line
|
|
1805
|
+
flags the deprecated spelling so operators can move the value.
|
|
1526
1806
|
|
|
1527
1807
|
Always-on / hosted deployments should use the versioned `/v1` API, which
|
|
1528
1808
|
authenticates independently against the cloud key store. `/health`, `/ready`,
|
|
1529
1809
|
`/version` and `/openapi.json` are the only routes that are public by design.
|
|
1530
1810
|
|
|
1811
|
+
### Hosted `/v1` writes need a neutral `User-Agent`
|
|
1812
|
+
|
|
1813
|
+
The hosted `/v1` plane is served through a Cloudflare-protected gateway that
|
|
1814
|
+
rejects automation-library default User-Agents. Python's `urllib` sends
|
|
1815
|
+
`Python-urllib/3.x` and `requests` sends `python-requests/x.y`; the gateway
|
|
1816
|
+
answers those with HTTP 403 (Cloudflare error 1010, browser-signature rule)
|
|
1817
|
+
even though the identical request from `curl` succeeds with the same headers
|
|
1818
|
+
and key. The origin is never reached, so no code change on the API server can
|
|
1819
|
+
help — the caller must present a non-python `User-Agent` on every request
|
|
1820
|
+
through the gateway:
|
|
1821
|
+
|
|
1822
|
+
```python
|
|
1823
|
+
import json
|
|
1824
|
+
import urllib.request
|
|
1825
|
+
|
|
1826
|
+
req = urllib.request.Request(
|
|
1827
|
+
"https://api.hasna.com/todos/v1/tasks",
|
|
1828
|
+
data=json.dumps({"title": "ship the parser"}).encode(),
|
|
1829
|
+
method="POST",
|
|
1830
|
+
headers={
|
|
1831
|
+
"x-api-key": "<your-key>", # or Authorization: Bearer <your-key>
|
|
1832
|
+
"content-type": "application/json",
|
|
1833
|
+
"user-agent": "hasna-todos/1.0", # never the urllib default
|
|
1834
|
+
},
|
|
1835
|
+
)
|
|
1836
|
+
urllib.request.urlopen(req) # 201, not 403 Cloudflare 1010
|
|
1837
|
+
```
|
|
1838
|
+
|
|
1839
|
+
The `requests` equivalent sets the same `user-agent` header on the request or
|
|
1840
|
+
session; a fixed neutral product string works for both reads and writes. Do not
|
|
1841
|
+
rely on the library default User-Agent.
|
|
1842
|
+
|
|
1531
1843
|
Agent callers can trim REST responses with field selectors:
|
|
1532
1844
|
|
|
1533
1845
|
```bash
|
|
@@ -1542,9 +1854,11 @@ Data is stored in `~/.hasna/todos/`.
|
|
|
1542
1854
|
|
|
1543
1855
|
## Local-Only Security Boundary
|
|
1544
1856
|
|
|
1545
|
-
`@hasna/todos` is an open source
|
|
1546
|
-
and
|
|
1547
|
-
|
|
1857
|
+
`@hasna/todos` is an open source package with a local-first storage boundary.
|
|
1858
|
+
The CLI, MCP server, and SDK read and write on-box state under the explicit
|
|
1859
|
+
local opt-in (`HASNA_TODOS_LOCAL=1`) and otherwise talk only to the Todos `/v1`
|
|
1860
|
+
authority the operator configured. They never require a billing provider, a
|
|
1861
|
+
SaaS account, or a remote model provider.
|
|
1548
1862
|
|
|
1549
1863
|
Release checks enforce that boundary before publishing:
|
|
1550
1864
|
|
package/dist/ai-tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-tools.d.ts","sourceRoot":"","sources":["../src/ai-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EACV,iBAAiB,EAIjB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAWjB,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAYjB,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAIL,KAAK,IAAI,EACT,KAAK,OAAO,EACZ,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-tools.d.ts","sourceRoot":"","sources":["../src/ai-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/ai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
|