@hasna/todos 0.15.52 → 0.16.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.
Files changed (183) hide show
  1. package/CHANGELOG.md +1884 -0
  2. package/README.md +314 -37
  3. package/dist/ai-tools.d.ts.map +1 -1
  4. package/dist/ai.d.ts.map +1 -1
  5. package/dist/cli/cloud-router.d.ts +99 -51
  6. package/dist/cli/cloud-router.d.ts.map +1 -1
  7. package/dist/cli/commands/agent-commands.d.ts.map +1 -1
  8. package/dist/cli/commands/config-serve-commands.d.ts.map +1 -1
  9. package/dist/cli/commands/delegate.d.ts.map +1 -1
  10. package/dist/cli/commands/environment-snapshots.d.ts.map +1 -1
  11. package/dist/cli/commands/machines-api.d.ts +4 -0
  12. package/dist/cli/commands/machines-api.d.ts.map +1 -0
  13. package/dist/cli/commands/machines.d.ts.map +1 -1
  14. package/dist/cli/commands/mcp-hooks-commands.d.ts.map +1 -1
  15. package/dist/cli/commands/plan-commands.d.ts +3 -0
  16. package/dist/cli/commands/plan-commands.d.ts.map +1 -0
  17. package/dist/cli/commands/plan-template-commands.d.ts.map +1 -1
  18. package/dist/cli/commands/pr-group-commands.d.ts.map +1 -1
  19. package/dist/cli/commands/project-commands.d.ts.map +1 -1
  20. package/dist/cli/commands/query-commands.d.ts.map +1 -1
  21. package/dist/cli/commands/storage-commands.d.ts.map +1 -1
  22. package/dist/cli/commands/task-list-commands.d.ts +3 -0
  23. package/dist/cli/commands/task-list-commands.d.ts.map +1 -0
  24. package/dist/cli/commands/template-commands.d.ts +3 -0
  25. package/dist/cli/commands/template-commands.d.ts.map +1 -0
  26. package/dist/cli/helpers.d.ts.map +1 -1
  27. package/dist/cli/index.js +15128 -11093
  28. package/dist/cli/machine-api.d.ts +7 -0
  29. package/dist/cli/machine-api.d.ts.map +1 -0
  30. package/dist/cli/plan-read-api.d.ts +6 -0
  31. package/dist/cli/plan-read-api.d.ts.map +1 -0
  32. package/dist/cli/project-api.d.ts +119 -0
  33. package/dist/cli/project-api.d.ts.map +1 -0
  34. package/dist/cli/stage-a.d.ts +34 -4
  35. package/dist/cli/stage-a.d.ts.map +1 -1
  36. package/dist/cli/task-query-api.d.ts +21 -0
  37. package/dist/cli/task-query-api.d.ts.map +1 -0
  38. package/dist/cli/template-api.d.ts +7 -0
  39. package/dist/cli/template-api.d.ts.map +1 -0
  40. package/dist/contracts.js +835 -265
  41. package/dist/db/builtin-templates.d.ts +2 -33
  42. package/dist/db/builtin-templates.d.ts.map +1 -1
  43. package/dist/db/database.d.ts.map +1 -1
  44. package/dist/db/handoffs.d.ts.map +1 -1
  45. package/dist/db/machines.d.ts.map +1 -1
  46. package/dist/db/migrations.d.ts.map +1 -1
  47. package/dist/db/plans.d.ts.map +1 -1
  48. package/dist/db/retrospectives.d.ts.map +1 -1
  49. package/dist/db/schema.d.ts.map +1 -1
  50. package/dist/db/task-lists.d.ts.map +1 -1
  51. package/dist/db/task-runs.d.ts +2 -0
  52. package/dist/db/task-runs.d.ts.map +1 -1
  53. package/dist/index.d.ts +2 -2
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +3862 -1715
  56. package/dist/lib/assignee-validation.d.ts.map +1 -1
  57. package/dist/lib/builtin-template-library.d.ts +32 -0
  58. package/dist/lib/builtin-template-library.d.ts.map +1 -0
  59. package/dist/lib/cli-reference.d.ts.map +1 -1
  60. package/dist/lib/config.d.ts +10 -13
  61. package/dist/lib/config.d.ts.map +1 -1
  62. package/dist/lib/db-backup.d.ts +1 -1
  63. package/dist/lib/db-backup.d.ts.map +1 -1
  64. package/dist/lib/env.d.ts +18 -0
  65. package/dist/lib/env.d.ts.map +1 -0
  66. package/dist/lib/environment-snapshots.d.ts.map +1 -1
  67. package/dist/lib/gatherer.d.ts.map +1 -1
  68. package/dist/lib/headless-boundaries.d.ts +4 -3
  69. package/dist/lib/headless-boundaries.d.ts.map +1 -1
  70. package/dist/lib/local-encryption.d.ts +12 -0
  71. package/dist/lib/local-encryption.d.ts.map +1 -1
  72. package/dist/lib/local-opt-in.d.ts +90 -0
  73. package/dist/lib/local-opt-in.d.ts.map +1 -0
  74. package/dist/lib/paths.d.ts +9 -0
  75. package/dist/lib/paths.d.ts.map +1 -1
  76. package/dist/lib/plan-artifacts.d.ts +1 -0
  77. package/dist/lib/plan-artifacts.d.ts.map +1 -1
  78. package/dist/lib/plan-client-boundary.d.ts +2 -0
  79. package/dist/lib/plan-client-boundary.d.ts.map +1 -0
  80. package/dist/lib/plan-schedule.d.ts +6 -0
  81. package/dist/lib/plan-schedule.d.ts.map +1 -0
  82. package/dist/lib/project-panel.d.ts +6 -0
  83. package/dist/lib/project-panel.d.ts.map +1 -1
  84. package/dist/lib/project-receipt.d.ts +3 -0
  85. package/dist/lib/project-receipt.d.ts.map +1 -0
  86. package/dist/lib/sandbox-profiles.d.ts.map +1 -1
  87. package/dist/lib/shared-plan-artifacts.d.ts +14 -0
  88. package/dist/lib/shared-plan-artifacts.d.ts.map +1 -0
  89. package/dist/lib/sync.d.ts.map +1 -1
  90. package/dist/lib/task-list-client-boundary.d.ts +3 -0
  91. package/dist/lib/task-list-client-boundary.d.ts.map +1 -0
  92. package/dist/lib/task-routing.d.ts.map +1 -1
  93. package/dist/lib/template-client-boundary.d.ts +2 -0
  94. package/dist/lib/template-client-boundary.d.ts.map +1 -0
  95. package/dist/mcp/index.d.ts +1 -0
  96. package/dist/mcp/index.d.ts.map +1 -1
  97. package/dist/mcp/index.js +45271 -40452
  98. package/dist/mcp/plan-api.d.ts +6 -0
  99. package/dist/mcp/plan-api.d.ts.map +1 -0
  100. package/dist/mcp/remote-authority.d.ts +49 -0
  101. package/dist/mcp/remote-authority.d.ts.map +1 -0
  102. package/dist/mcp/task-coordination-api.d.ts +15 -0
  103. package/dist/mcp/task-coordination-api.d.ts.map +1 -0
  104. package/dist/mcp/task-list-api.d.ts +8 -0
  105. package/dist/mcp/task-list-api.d.ts.map +1 -0
  106. package/dist/mcp/token-utils.d.ts.map +1 -1
  107. package/dist/mcp/tools/environment-snapshots.d.ts.map +1 -1
  108. package/dist/mcp/tools/machines.d.ts.map +1 -1
  109. package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
  110. package/dist/mcp/tools/task-resources.d.ts.map +1 -1
  111. package/dist/mcp.d.ts +2 -2
  112. package/dist/mcp.d.ts.map +1 -1
  113. package/dist/mcp.js +44 -18
  114. package/dist/project-registration.js +2829 -556
  115. package/dist/registry.js +836 -266
  116. package/dist/release-provenance.json +6 -6
  117. package/dist/sdk/client.d.ts +51 -4
  118. package/dist/sdk/client.d.ts.map +1 -1
  119. package/dist/sdk/index.d.ts +2 -0
  120. package/dist/sdk/index.d.ts.map +1 -1
  121. package/dist/sdk/index.js +1209 -1080
  122. package/dist/sdk/resolve.d.ts +91 -0
  123. package/dist/sdk/resolve.d.ts.map +1 -0
  124. package/dist/sdk/v1.generated.d.ts +219 -3
  125. package/dist/sdk/v1.generated.d.ts.map +1 -1
  126. package/dist/server/auth-posture.d.ts +66 -7
  127. package/dist/server/auth-posture.d.ts.map +1 -1
  128. package/dist/server/client-ip.d.ts +39 -0
  129. package/dist/server/client-ip.d.ts.map +1 -0
  130. package/dist/server/cloud.d.ts +2 -1
  131. package/dist/server/cloud.d.ts.map +1 -1
  132. package/dist/server/index.d.ts +1 -1
  133. package/dist/server/index.js +20556 -15541
  134. package/dist/server/openapi.d.ts +1341 -83
  135. package/dist/server/openapi.d.ts.map +1 -1
  136. package/dist/server/port.d.ts +2 -2
  137. package/dist/server/port.d.ts.map +1 -1
  138. package/dist/server/routes.d.ts +3 -6
  139. package/dist/server/routes.d.ts.map +1 -1
  140. package/dist/server/serve.d.ts +2 -6
  141. package/dist/server/serve.d.ts.map +1 -1
  142. package/dist/server/v1.d.ts +3 -1
  143. package/dist/server/v1.d.ts.map +1 -1
  144. package/dist/storage/atomic-project-migration.d.ts +53 -0
  145. package/dist/storage/atomic-project-migration.d.ts.map +1 -0
  146. package/dist/storage/index.d.ts +3 -1
  147. package/dist/storage/index.d.ts.map +1 -1
  148. package/dist/storage/interfaces.d.ts +61 -0
  149. package/dist/storage/interfaces.d.ts.map +1 -1
  150. package/dist/storage/machine-registry.d.ts +36 -0
  151. package/dist/storage/machine-registry.d.ts.map +1 -0
  152. package/dist/storage/postgres-adapter.d.ts.map +1 -1
  153. package/dist/storage/postgres-sync.d.ts +2 -2
  154. package/dist/storage/postgres-sync.d.ts.map +1 -1
  155. package/dist/storage/run-artifact-creation-upload.d.ts +50 -0
  156. package/dist/storage/run-artifact-creation-upload.d.ts.map +1 -0
  157. package/dist/storage/s3-artifact-sync.d.ts +18 -0
  158. package/dist/storage/s3-artifact-sync.d.ts.map +1 -1
  159. package/dist/storage/sqlite-snapshot.d.ts +2 -0
  160. package/dist/storage/sqlite-snapshot.d.ts.map +1 -1
  161. package/dist/storage.d.ts +2 -2
  162. package/dist/storage.d.ts.map +1 -1
  163. package/dist/storage.js +2695 -322
  164. package/dist/task-manifest/postgres.d.ts +1 -1
  165. package/dist/task-manifest/sqlite.d.ts +1 -1
  166. package/dist/task-manifest.js +244 -73
  167. package/dist/task-subtree-transfer.js +198 -4
  168. package/dist/testing.d.ts +90 -29
  169. package/dist/testing.d.ts.map +1 -1
  170. package/dist/testing.js +34 -10
  171. package/dist/types/index.d.ts +40 -4
  172. package/dist/types/index.d.ts.map +1 -1
  173. package/docs/PLAN_API.md +93 -0
  174. package/docs/TASK_LIST_API.md +58 -0
  175. package/docs/TASK_QUERY_API.md +14 -0
  176. package/docs/TEMPLATE_API.md +18 -0
  177. package/docs/native-storage.md +405 -0
  178. package/package.json +18 -15
  179. package/postinstall.js +52 -1
  180. package/dashboard/dist/assets/index-BNQ4gJua.js +0 -342
  181. package/dashboard/dist/assets/index-DjzvHUWt.css +0 -1
  182. package/dashboard/dist/index.html +0 -13
  183. package/dashboard/dist/logo.jpg +0 -0
package/README.md CHANGED
@@ -11,6 +11,192 @@ 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
+ ## Credentials and Service Authority
85
+
86
+ The CLI, the MCP server and the `./sdk` client all resolve their credential
87
+ through one resolver — the client chain in `@hasna/contracts` — so there is
88
+ exactly one place to put a key and exactly one precedence to learn. Resolution
89
+ happens **on every call**, never once at process start, so rotating a key heals
90
+ a long-running shell, MCP server or agent without restarting it: a `TodosClient`
91
+ built at startup and held for hours re-reads the Keychain and the credentials
92
+ file on each request and picks up the new key on the next one.
93
+
94
+ Two things are deliberately *not* re-resolved. An explicit `apiKey` argument is
95
+ tier 1 — a pin the caller owns — and the **service authority is fixed for the
96
+ life of a client**, because a credential written for one authority must never be
97
+ sent to another; build a new client to point somewhere else.
98
+
99
+ That second rule binds the credential too. `new TodosClient({ baseUrl })` with
100
+ no `apiKey` pins the authority *and* sends no credential at all: the key in your
101
+ Keychain or `~/.hasna/todos/config/credentials` was written for the fleet, so it
102
+ is never re-resolved onto a URL you named — a local `todos-serve`, a staging
103
+ box, a test double. Pass `apiKey` alongside `baseUrl` when that authority is
104
+ supposed to get a credential. Per-call re-resolution applies to a client that
105
+ resolved its own hosted authority, which is where rotation matters.
106
+
107
+ **Credential, highest to lowest:**
108
+
109
+ | # | Tier | Where |
110
+ | --- | --- | --- |
111
+ | 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) |
112
+ | 2 | deliberate env pointer | `HASNA_TODOS_API_KEY_OVERRIDE`, `HASNA_PROFILE`, `HASNA_TODOS_API_KEY_REF` (a secrets-vault item key, never a value) |
113
+ | 3 | macOS Keychain | generic password `hasna.credentials.todos.api-key`, account `HASNA_STATION` → `hostname -s` → `USER` |
114
+ | 4 | disk | `~/.hasna/todos/config/credentials`, owner-only `0400`/`0600` |
115
+ | 5 | environment | `HASNA_TODOS_API_KEY` |
116
+
117
+ Tier 3 is account-scoped, not host-scoped: the item is looked up under the
118
+ station name, so a key stored for one station is invisible on another. Set
119
+ `HASNA_STATION` explicitly (a wrapper, a launchd plist, a CI job) when the
120
+ account name is not the first of `hostname -s` / `USER`; with none of the three
121
+ matching the item's account, the lookup misses and the run fails closed with
122
+ `REMOTE_API_CONFIG_MISSING` rather than silently resolving something else.
123
+
124
+ Tiers 1 and 2 are *deliberate*: if one is set and cannot be honoured, the run
125
+ fails — it never quietly authenticates as a different principal. Tier 5 is a
126
+ first-class tier, not a deprecated one (a wrapper that injects the key per
127
+ process is correct), and it sits **below** disk so a rotated on-disk key beats a
128
+ stale `export` in an old shell. Nothing is read from `~/.hasna/fleet-env`,
129
+ `~/.hasna/cloud`, `~/.config/hasna`, `$XDG_CONFIG_HOME`, or `~/.todos/config.json`.
130
+
131
+ **Service authority**, same shape:
132
+
133
+ `HASNA_TODOS_API_URL` → the Keychain `hasna.credentials.todos.api-url` item →
134
+ `~/.hasna/todos/config/credentials` → the fleet gateway
135
+ `https://api.hasna.com/todos`. Configure the URL only to point somewhere else;
136
+ the client appends `/v1` itself, and sources that disagree are refused rather
137
+ than silently preferred. `HASNA_HOME` and `HASNA_CONFIG_HOME` move the disk
138
+ root; the older unprefixed spellings of these two variables (without the
139
+ `HASNA_` prefix) still work as a silent fallback for one release, but the
140
+ `HASNA_TODOS_*` names are canonical and are what every diagnostic names.
141
+
142
+ The credentials file is a plain env file, and its permissions are enforced — a
143
+ group- or world-readable one is refused rather than read:
144
+
145
+ ```bash
146
+ install -m 700 -d ~/.hasna/todos/config
147
+ printf 'HASNA_TODOS_API_KEY=%s\n' "$KEY" > ~/.hasna/todos/config/credentials
148
+ chmod 600 ~/.hasna/todos/config/credentials
149
+ ```
150
+
151
+ **Hosted mode fails closed.** With no credential the CLI exits non-zero
152
+ (`REMOTE_API_CONFIG_MISSING`) and names the tiers it consulted. The MCP server
153
+ stays up so a client can read the refusal, and each call fails instead of serving
154
+ local rows — the credential-gated tools with the typed
155
+ `REMOTE_API_CONFIG_MISSING` and the on-box tools with the typed
156
+ `API_DATABASE_FALLBACK_FORBIDDEN`, both described under
157
+ [Upgrading From 0.15.52](#upgrading-from-01552). Neither surface falls back to
158
+ the local SQLite store, because serving local rows while authentication is broken
159
+ prints healthy output for a broken system.
160
+
161
+ The `./sdk` surface answers "nothing is configured" differently *on purpose*,
162
+ and only for that one case: `new TodosClient()` targets the on-box
163
+ `todos-serve` at `http://localhost:19427` and prints the local-mode line, since
164
+ that client speaks the same `/api/*` plane a workstation serve exposes and local
165
+ is a real mode for it. `createTodosV1Client()` is hosted-only and throws
166
+ (`TODOS_CREDENTIAL_MISSING`). Every *other* refusal is a throw on all three
167
+ surfaces — aliases that disagree, an unreadable credential file, a URL with no
168
+ key — because those are misconfigurations, not an absence of configuration.
169
+
170
+ A **declared-but-blank** authority variable is deliberately *not* one of those
171
+ refusals. At the Todos seam a blank has always meant "unset" — helpers in the
172
+ wild blank rather than delete — so every authority variable that is declared
173
+ but empty is removed before the resolver runs. `HASNA_TODOS_API_KEY=` therefore
174
+ resolves the machine's ambient Keychain item exactly as an unset variable does:
175
+ it neither configures a credential nor withholds one. To force the on-box store
176
+ from a wrapper, set `HASNA_TODOS_LOCAL=1` — a blank authority variable counts as
177
+ absent for the opt-in too, so the opt-in is still honoured when
178
+ `HASNA_TODOS_API_KEY` is present but empty — instead of blanking a credential
179
+ variable.
180
+
181
+ **Local mode is deliberate, and it says so.** `@hasna/todos` is usable entirely
182
+ offline against an on-box SQLite store — set `HASNA_TODOS_LOCAL=1` (alias
183
+ `TODOS_LOCAL=1`). It is honoured only when the environment configures no
184
+ authority and no credential, it is answered *before* the resolver runs (so no
185
+ Keychain item and no credential file is read), and every local run prints one
186
+ line on stderr saying it is local.
187
+
188
+ Three command families are exempt from local mode and are shared-API only:
189
+ `todos plans`, `todos task-lists` (aliases `lists`, `tl`) and the template
190
+ commands (`templates`, `template-init`, `template-preview`, `template-export`,
191
+ `template-import`, `template-history`). They refuse `HASNA_TODOS_DB_PATH`,
192
+ `TODOS_DB_PATH`, `HASNA_TODOS_LOCAL` and `TODOS_LOCAL` before startup and need a
193
+ credential. `todos template-library` is the exception on the other side: it
194
+ renders the library bundled in the package and stays credential-free.
195
+
196
+ ```bash
197
+ todos storage status --json # which tier supplied the key, and which URL applied
198
+ ```
199
+
14
200
  ## CLI Usage
15
201
 
16
202
  ```bash
@@ -25,6 +211,13 @@ todos completions zsh > ~/.zsh/completions/_todos
25
211
  todos completions fish > ~/.config/fish/completions/todos.fish
26
212
  ```
27
213
 
214
+ `--help`, `manual` and the completions all derive from the same tree, and that
215
+ tree is filtered by the resolved route: the default posture advertises the
216
+ commands that can run against the hosted surface, and `HASNA_TODOS_LOCAL=1`
217
+ advertises the full on-box set. See
218
+ [Upgrading From 0.15.52](#upgrading-from-01552) and
219
+ `apps/todos/docs/cli-help.md`.
220
+
28
221
  Print the local CLI manual when you need install/update commands, examples,
29
222
  JSON output contracts, error behavior, and the command catalog:
30
223
 
@@ -464,7 +657,7 @@ OpenLoops updates those pointers after admission or evaluator progress:
464
657
  todos task workflow-pointers <task-id> \
465
658
  --invocation <workflow-invocation-id> \
466
659
  --run <workflow-run-id> \
467
- --manifest /home/hasna/.hasna/loops/runs/<project>/<subject>/<run>/manifest.json \
660
+ --manifest ~/.hasna/loops/runs/<project>/<subject>/<run>/manifest.json \
468
661
  --state working \
469
662
  --json
470
663
  ```
@@ -700,34 +893,60 @@ MCP clients get the same local coordination through `claim_next_task`,
700
893
  `claim_next_task` can opt into stale recovery with `steal_stale` and
701
894
  `stale_minutes`.
702
895
 
703
- ## Local Plan Templates
704
-
705
- Reusable plan templates live in the local SQLite database. The package also
706
- ships a marketplace-free local library for bug fixes, feature implementation,
707
- security review, releases, migrations, incidents, docs refreshes, QA, and open
708
- source package bootstraps. Templates can create one task or a full ordered plan
709
- with dependencies, variables, priorities, tags, and descriptions:
710
-
711
- ```bash
712
- todos template-library --json
713
- todos template-library --write .todos/templates
714
- todos template-init
715
- todos template-preview <template-id> --var name=api
716
- todos templates --use <template-id> --var name=api
717
- todos template-export <template-id> > plan-template.json
718
- todos template-import plan-template.json
719
- ```
896
+ `get_stale_tasks` (and the other MCP tools that read the on-box store) require
897
+ the deliberate local opt-in: start the MCP server with `HASNA_TODOS_LOCAL=1`, or
898
+ the call fails on the default posture with the typed
899
+ `API_DATABASE_FALLBACK_FORBIDDEN` refusal. See
900
+ [Upgrading From 0.15.52](#upgrading-from-01552) for the affected families and
901
+ the one case where the opt-in is ignored.
902
+
903
+ ## Plan Templates
904
+
905
+ The package ships a marketplace-free template library for bug fixes, feature
906
+ implementation, security review, releases, migrations, incidents, docs
907
+ refreshes, QA, and open source package bootstraps. Templates can create one
908
+ task or a full ordered plan with dependencies, variables, priorities, tags, and
909
+ descriptions.
910
+
911
+ Two surfaces are involved, and they are not the same store:
912
+
913
+ - `todos template-library` renders the library bundled in the package. It is
914
+ credential-free and never opens a database, so it works offline:
915
+
916
+ ```bash
917
+ todos template-library --json
918
+ todos template-library --write .todos/templates
919
+ ```
920
+
921
+ - The remaining template commands are served by the authenticated shared API.
922
+ `todos template-init`, `todos template-preview`, `todos templates --use`,
923
+ `todos template-export`, `todos template-import` and `todos template-history`
924
+ require `HASNA_TODOS_API_URL` and `HASNA_TODOS_API_KEY` (or saved account
925
+ credentials) and refuse an on-box database selection before startup:
926
+
927
+ ```bash
928
+ todos template-init
929
+ todos template-preview <template-id> --var name=api
930
+ todos templates --use <template-id> --var name=api
931
+ todos template-export <template-id> > plan-template.json
932
+ todos template-import plan-template.json
933
+ ```
720
934
 
721
935
  `todos template-library --write` writes editable JSON files that use the same
722
936
  shape as `todos template-import`, so teams can fork a built-in workflow without
723
937
  contacting any hosted marketplace. `todos templates --use` creates every task in
724
- a multi-task template and wires its local dependency graph, so agents can
725
- immediately run `todos ready`, `todos blocked`, or
726
- `todos deps <task-id> --graph` against the generated plan. The same local-only
727
- workflow is available to MCP clients through `list_template_library`,
728
- `write_template_library`, `init_templates`, `create_template`, `list_templates`,
938
+ a multi-task template and wires its dependency graph in the shared account, so
939
+ agents can immediately run `todos ready`, `todos blocked`, or
940
+ `todos deps <task-id> --graph` against the generated plan. MCP clients reach the
941
+ bundled library through `list_template_library` and `write_template_library`,
942
+ which are credential-free and open no store. The remaining MCP template tools —
943
+ `init_templates`, `create_template`, `list_templates`,
729
944
  `create_task_from_template`, `preview_template`, `export_template`, and
730
- `import_template`.
945
+ `import_template` — read the on-box SQLite store and are not served on the
946
+ default posture: start the MCP server with `HASNA_TODOS_LOCAL=1` to use them.
947
+ That opt-in is ignored when the environment sets `HASNA_TODOS_API_KEY` or
948
+ `HASNA_TODOS_API_URL`, which leaves these tools unreachable (see
949
+ [Upgrading From 0.15.52](#upgrading-from-01552)).
731
950
 
732
951
  ## Moving Tasks Between Plans
733
952
 
@@ -748,8 +967,21 @@ todos plans --show <plan-id> # verify the plan's task set
748
967
 
749
968
  Plan references accept a UUID, a plan slug, a plan name, or a unique id prefix.
750
969
  An unknown or ambiguous reference exits non-zero before any task is modified.
751
- All of these run against whichever store the CLI is configured for: the local
752
- SQLite file, or the shared dataset behind a hosted `/v1` authority.
970
+ `todos add`, `todos update` and `todos bulk` follow whichever store the CLI is
971
+ configured for — the local SQLite file, or the shared dataset behind a hosted
972
+ `/v1` authority. `todos plans` does not: it is served by the authenticated
973
+ shared API only and refuses `HASNA_TODOS_DB_PATH`, `TODOS_DB_PATH`,
974
+ `HASNA_TODOS_LOCAL` and `TODOS_LOCAL` before startup.
975
+
976
+ `todos plans --artifact <id-or-slug>` and `--write-artifacts` compare local
977
+ Markdown against the shared plan record and therefore require an explicit
978
+ `--artifact-root <directory>` — a trusted local project directory the caller
979
+ chooses. Before 0.16.0 both options defaulted to the project path recorded in
980
+ local SQLite, so the older form `todos plans --artifact <id-or-slug> --json`
981
+ still appears in notes from that release; it now exits non-zero with
982
+ `--artifact-root is required`. The files stay under
983
+ `<artifact-root>/.hasna/todos/plans/<project-id>/`, and a path returned by the
984
+ API is never used.
753
985
 
754
986
  ## Local Git Traceability
755
987
 
@@ -1480,7 +1712,7 @@ todos-mcp --port 8881 # explicit HTTP port (default MCP HTTP port is 888
1480
1712
 
1481
1713
  - Bind: `127.0.0.1` only
1482
1714
  - Health: `GET /health` → `{"status":"ok","name":"todos"}`
1483
- - MCP: `POST /mcp` on the same server as the dashboard/API (Streamable HTTP, stateless)
1715
+ - MCP: `POST /mcp` on the same server as the REST API (Streamable HTTP, stateless)
1484
1716
 
1485
1717
  The MCP server defaults to the token-saving `TODOS_PROFILE=minimal` profile.
1486
1718
  Use `TODOS_PROFILE=standard` for broader task/project/resource tools, or
@@ -1502,7 +1734,7 @@ refuses to start unless one of the following is true:
1502
1734
 
1503
1735
  | Configuration | Result |
1504
1736
  | --- | --- |
1505
- | `TODOS_API_KEY=<key>` (or `--api-key <key>`) | `/api/*` + `/mcp` require the key |
1737
+ | `HASNA_TODOS_SERVER_API_KEY=<key>` (or `--api-key <key>`) | `/api/*` + `/mcp` require the key |
1506
1738
  | at least one `todos api-keys create` key exists | `/api/*` + `/mcp` require a key |
1507
1739
  | `--allow-anonymous` **and** a loopback bind | anonymous, loopback peers only (local dev) |
1508
1740
  | a cloud `DATABASE_URL` is configured (hosted `/v1` deployment) | `/api/*` + `/mcp` are **not served**; `/v1` stays authenticated |
@@ -1510,7 +1742,7 @@ refuses to start unless one of the following is true:
1510
1742
 
1511
1743
  ```bash
1512
1744
  todos api-keys create "My app" # then send x-api-key / Authorization: Bearer
1513
- TODOS_API_KEY=<key> todos-serve --host 0.0.0.0
1745
+ HASNA_TODOS_SERVER_API_KEY=<key> todos-serve --host 0.0.0.0
1514
1746
  todos serve --allow-anonymous # local dev only; refused for a non-loopback --host
1515
1747
  ```
1516
1748
 
@@ -1518,16 +1750,59 @@ todos serve --allow-anonymous # local dev only; refused for a non-loop
1518
1750
  bind host, and even when enabled it only serves requests whose transport peer is
1519
1751
  itself loopback — so it can never publish an anonymous task read/write plane
1520
1752
  off-box. `todos-mcp --http` sets it implicitly because that transport is pinned to
1521
- `127.0.0.1`; set `TODOS_API_KEY` (and send it from your MCP client) to require a
1522
- credential there too.
1523
-
1524
- Pass the generated key from your app as `x-api-key` or set `TODOS_API_KEY` for
1525
- the SDK client.
1753
+ `127.0.0.1`; set `HASNA_TODOS_SERVER_API_KEY` (and send it from your MCP client)
1754
+ to require a credential there too.
1755
+
1756
+ Pass the generated key from your app as `x-api-key` or `Authorization: Bearer`.
1757
+
1758
+ `HASNA_TODOS_SERVER_API_KEY` is the **server's** own variable — the credential
1759
+ `todos-serve` demands from its callers. It is deliberately NOT one of the client
1760
+ credential names: `HASNA_TODOS_API_KEY` is how a client finds a key (the resolver
1761
+ documented under [Credentials and Service Authority](#credentials-and-service-authority)),
1762
+ and a fleet client key exported on a workstation must never silently become the
1763
+ local server's accepted key — one name cannot play both roles on opposite sides
1764
+ of the same trust boundary. `todos serve` prints one line at startup naming which
1765
+ variable supplied its accepted key. For one release the client names
1766
+ (`HASNA_TODOS_API_KEY` / `TODOS_API_KEY`) are still accepted as a documented
1767
+ fallback so an env written before 2026-09-05 keeps working; the startup line
1768
+ flags the deprecated spelling so operators can move the value.
1526
1769
 
1527
1770
  Always-on / hosted deployments should use the versioned `/v1` API, which
1528
1771
  authenticates independently against the cloud key store. `/health`, `/ready`,
1529
1772
  `/version` and `/openapi.json` are the only routes that are public by design.
1530
1773
 
1774
+ ### Hosted `/v1` writes need a neutral `User-Agent`
1775
+
1776
+ The hosted `/v1` plane is served through a Cloudflare-protected gateway that
1777
+ rejects automation-library default User-Agents. Python's `urllib` sends
1778
+ `Python-urllib/3.x` and `requests` sends `python-requests/x.y`; the gateway
1779
+ answers those with HTTP 403 (Cloudflare error 1010, browser-signature rule)
1780
+ even though the identical request from `curl` succeeds with the same headers
1781
+ and key. The origin is never reached, so no code change on the API server can
1782
+ help — the caller must present a non-python `User-Agent` on every request
1783
+ through the gateway:
1784
+
1785
+ ```python
1786
+ import json
1787
+ import urllib.request
1788
+
1789
+ req = urllib.request.Request(
1790
+ "https://api.hasna.com/todos/v1/tasks",
1791
+ data=json.dumps({"title": "ship the parser"}).encode(),
1792
+ method="POST",
1793
+ headers={
1794
+ "x-api-key": "<your-key>", # or Authorization: Bearer <your-key>
1795
+ "content-type": "application/json",
1796
+ "user-agent": "hasna-todos/1.0", # never the urllib default
1797
+ },
1798
+ )
1799
+ urllib.request.urlopen(req) # 201, not 403 Cloudflare 1010
1800
+ ```
1801
+
1802
+ The `requests` equivalent sets the same `user-agent` header on the request or
1803
+ session; a fixed neutral product string works for both reads and writes. Do not
1804
+ rely on the library default User-Agent.
1805
+
1531
1806
  Agent callers can trim REST responses with field selectors:
1532
1807
 
1533
1808
  ```bash
@@ -1542,9 +1817,11 @@ Data is stored in `~/.hasna/todos/`.
1542
1817
 
1543
1818
  ## Local-Only Security Boundary
1544
1819
 
1545
- `@hasna/todos` is an open source, local-first package. The CLI, MCP server, SDK,
1546
- and local dashboard read and write local state by default and do not require a
1547
- hosted API, cloud account, billing provider, or remote model provider.
1820
+ `@hasna/todos` is an open source package with a local-first storage boundary.
1821
+ The CLI, MCP server, and SDK read and write on-box state under the explicit
1822
+ local opt-in (`HASNA_TODOS_LOCAL=1`) and otherwise talk only to the Todos `/v1`
1823
+ authority the operator configured. They never require a billing provider, a
1824
+ SaaS account, or a remote model provider.
1548
1825
 
1549
1826
  Release checks enforce that boundary before publishing:
1550
1827
 
@@ -1 +1 @@
1
- {"version":3,"file":"ai-tools.d.ts","sourceRoot":"","sources":["../src/ai-tools.ts"],"names":[],"mappings":"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"}
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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"}