@tekmidian/pai 0.18.6 → 0.20.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.
@@ -139,6 +139,7 @@ Generated man pages for every `pai` command area. Read any page in the terminal
139
139
  | `pai registry lookup` | Find the project slug for a filesystem path (for use in scripts) |
140
140
  | `pai registry migrate` | Import data from ~/.claude/session-registry.json |
141
141
  | `pai registry rebuild` | Erase all registry data and rebuild from the filesystem (destructive) |
142
+ | `pai registry reconnect` | Point projects back at the transcripts they lost. |
142
143
  | `pai registry scan` | Walk ~/.claude/projects/ and configured scan_dirs, upsert all projects |
143
144
  | `pai registry stats` | Show summary statistics for the registry |
144
145
  | `pai restore` | Restore from a backup directory (created by pai backup) |
@@ -167,7 +168,7 @@ Generated man pages for every `pai` command area. Read any page in the terminal
167
168
  | `pai task add <title>` | File a task onto the bus |
168
169
  | `pai task config` | View or change task bus settings without running the full setup wizard |
169
170
  | `pai task dispatch` | Hand open tasks to the PAI sessions that own them |
170
- | `pai task done <id>` | Mark a task complete on the tracker |
171
+ | `pai task done <id>` | Mark a task complete on the tracker, keeping its discussion |
171
172
  | `pai task list` | List open tasks on the bus |
172
173
  | `pai task poll` | One scheduler tick: dispatch what is due, check what is running, report |
173
174
  | `pai task projects` | Show which sessions can be given work from the tracker, and create the missing projects |
@@ -19,6 +19,7 @@ pai registry <subcommand> [options]
19
19
  | [`pai registry stats`](#pai-registry-stats) | Show summary statistics for the registry |
20
20
  | [`pai registry rebuild`](#pai-registry-rebuild) | Erase all registry data and rebuild from the filesystem (destructive) |
21
21
  | [`pai registry dedupe`](#pai-registry-dedupe) | Merge registry rows that describe the same project. |
22
+ | [`pai registry reconnect`](#pai-registry-reconnect) | Point projects back at the transcripts they lost. |
22
23
  | [`pai registry lookup`](#pai-registry-lookup) | Find the project slug for a filesystem path (for use in scripts) |
23
24
 
24
25
  ### pai registry scan
@@ -66,6 +67,23 @@ Dry-run by default; --execute backs up the registry first and merges in one tran
66
67
  | `--execute` | Actually perform the merge (default is dry-run) | |
67
68
 
68
69
 
70
+ ### pai registry reconnect
71
+
72
+ Point projects back at the transcripts they lost.
73
+
74
+ A project's encoded_dir is written once and never updated when the project
75
+ moves, so handovers, session digests and checkpoints silently find nothing.
76
+ Repairs are read from the transcripts themselves — each records the cwd it ran
77
+ in — rather than re-derived from the naming rule that broke.
78
+ Dry-run by default; --execute writes the corrected rows in one transaction.
79
+
80
+ **Options**
81
+
82
+ | Option | Description | Default |
83
+ |--------|-------------|---------|
84
+ | `--execute` | Actually write the corrections (default is dry-run) | |
85
+
86
+
69
87
  ### pai registry lookup
70
88
 
71
89
  Find the project slug for a filesystem path (for use in scripts)
@@ -23,7 +23,7 @@ pai task <subcommand> [options]
23
23
  | [`pai task poll`](#pai-task-poll) | One scheduler tick: dispatch what is due, check what is running, report |
24
24
  | [`pai task schedule`](#pai-task-schedule) | Install, remove or inspect the launchd agent that ticks the scheduler |
25
25
  | [`pai task config`](#pai-task-config) | View or change task bus settings without running the full setup wizard |
26
- | [`pai task done <id>`](#pai-task-done-id) | Mark a task complete on the tracker |
26
+ | [`pai task done <id>`](#pai-task-done-id) | Mark a task complete on the tracker, keeping its discussion |
27
27
 
28
28
  ### pai task projects
29
29
 
@@ -144,7 +144,7 @@ View or change task bus settings without running the full setup wizard
144
144
 
145
145
  ### pai task done <id>
146
146
 
147
- Mark a task complete on the tracker
147
+ Mark a task complete on the tracker, keeping its discussion
148
148
 
149
149
  **Arguments**
150
150
 
@@ -152,6 +152,12 @@ Mark a task complete on the tracker
152
152
  |----------|------|
153
153
  | `<id>` | required |
154
154
 
155
+ **Options**
156
+
157
+ | Option | Description | Default |
158
+ |--------|-------------|---------|
159
+ | `--no-archive` | Complete without saving the comment thread | |
160
+
155
161
 
156
162
  ## See also
157
163
 
package/docs/task-bus.md CHANGED
@@ -158,12 +158,25 @@ account that had genuinely authorised. Trust `aibroker todoist status`.
158
158
  **4. A lapsed grant looks like a healthy channel.** Webhooks are verified with
159
159
  the client *secret*, not the token, so **task delivery keeps working**. What
160
160
  breaks is everything needing the API: comment routing (a comment payload has no
161
- project or labels, so the parent must be fetched) and replying on a task. The
162
- signature is `401` with `error_code 477` and a `retry_after` that climbs —
163
- 3, 7, 65, 129 seconds. That climb is throttling stacked on a dead credential, so
164
- retrying makes it worse. The reliable tell is the consent dialog appearing again
165
- for a URL that used to redirect straight through. Fix: `aibroker todoist auth`
166
- and one click.
161
+ project or labels, so the parent must be fetched) and replying on a task. So the
162
+ signature is the asymmetry itself **tasks arrive, comments do not.**
163
+
164
+ The response is `401` with `error_code 477` and a `retry_after` that climbs:
165
+ 3, 7, 65, 129 seconds.
166
+
167
+ **That climb is not throttling, and this document said it was.** Todoist's
168
+ reference states that `retry_after` is backoff metadata not limited to 429s, and
169
+ that on a 477 you must *not* wait and retry the same token — an invalid token is
170
+ invalid, and waiting changes nothing. The escalating numbers look exactly like
171
+ rate limiting and are not. Corrected 2026-08-02, after the wrong explanation had
172
+ been repeated between two codebases and written down here as fact.
173
+
174
+ **Enable refresh tokens on the Todoist app.** Without them, Todoist issues
175
+ tokens with no `expires_in` and no refresh path: they die and can only be fixed
176
+ by re-authorising by hand, which is what produced two lapses in twenty hours.
177
+ With them, the token refreshes on demand and the daily re-auth disappears.
178
+
179
+ Fix for a grant that has already died: `aibroker todoist auth` and one click.
167
180
 
168
181
  ---
169
182
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tekmidian/pai",
3
- "version": "0.18.6",
3
+ "version": "0.20.0",
4
4
  "description": "PAI Knowledge OS — Personal AI Infrastructure with federated memory and project management",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",