taskchef 8.7.1 → 9.0.1

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 (150) hide show
  1. package/.codex-plugin/plugin.json +7 -10
  2. package/.mcp.json +3 -2
  3. package/README.md +35 -158
  4. package/docs/mcp-app.md +23 -6
  5. package/docs/spec.md +38 -746
  6. package/docs/taskchef-next-storage.md +2 -2
  7. package/index.js +2 -99
  8. package/package.json +12 -49
  9. package/skills/delegate/SKILL.md +44 -0
  10. package/skills/delegate/agents/openai.yaml +4 -0
  11. package/src/codex-app.js +3 -152
  12. package/src/codex-session-scanner.js +2 -2
  13. package/src/file-lock.js +25 -0
  14. package/src/mcp-app/react/NextTaskDetail.test.tsx +1 -1
  15. package/src/mcp-app/react/NextTaskDetail.tsx +8 -8
  16. package/src/mcp-app/react/main.test.tsx +3 -3
  17. package/src/mcp-app/react/main.tsx +7 -7
  18. package/src/mcp-app.js +2 -2
  19. package/src/mcp.js +4 -542
  20. package/src/next-cache.js +2 -2
  21. package/src/next-github.js +3 -3
  22. package/src/next-notifications.js +2 -2
  23. package/src/{dashboard/react → ui}/components/CardStatusIcons.tsx +1 -1
  24. package/src/{dashboard/react → ui}/components/GitHubLinks.tsx +1 -1
  25. package/src/{dashboard/react → ui}/components/LinkedText.tsx +1 -1
  26. package/src/{dashboard/react → ui}/components/RelativeTime.test.tsx +1 -1
  27. package/src/{dashboard/react → ui}/components/RelativeTime.tsx +1 -1
  28. package/src/{dashboard/react → ui}/components/ReplyImagePreview.test.tsx +1 -1
  29. package/src/{dashboard/react → ui}/components/TaskBoard.tsx +1 -1
  30. package/src/{dashboard/react → ui}/components/TaskCard.tsx +1 -1
  31. package/src/{dashboard/react → ui}/components/TurnContent.tsx +1 -1
  32. package/src/{dashboard/react → ui}/presentation.ts +1 -1
  33. package/src/user-prompt.js +11 -0
  34. package/src/version.js +0 -1
  35. package/BACKLOG.md +0 -48
  36. package/assets/e2e-benchmark-example.json +0 -50
  37. package/assets/taskchef-dispatcher-instructions.md +0 -44
  38. package/bin/taskchef.js +0 -20
  39. package/docs/advanced-guide.md +0 -497
  40. package/docs/dashboard-lifecycle.md +0 -149
  41. package/docs/dashboard-ui.md +0 -40
  42. package/docs/firstmate-taskchef-comparison.md +0 -283
  43. package/docs/images/ccusage-token-consumption.png +0 -0
  44. package/docs/images/dashboard-identity.jpg +0 -0
  45. package/docs/images/dashboard-token-pending.jpg +0 -0
  46. package/docs/images/interrupted-turn-recovery.jpg +0 -0
  47. package/docs/images/notification-event-snapshots.jpg +0 -0
  48. package/docs/images/readme-board.png +0 -0
  49. package/docs/images/readme-completed.png +0 -0
  50. package/docs/images/readme-list.png +0 -0
  51. package/docs/images/readme-needs-input.png +0 -0
  52. package/docs/images/readme-roles.png +0 -0
  53. package/docs/images/reported-work-duration-desktop.jpg +0 -0
  54. package/docs/images/reported-work-duration-mobile.jpg +0 -0
  55. package/docs/images/result-history-dashboard.jpg +0 -0
  56. package/docs/images/taskchef-pr-icon-comparison.jpg +0 -0
  57. package/docs/images/taskchef-unified-status-popup.jpg +0 -0
  58. package/docs/workflows.md +0 -476
  59. package/mcp/dashboard-session.js +0 -51
  60. package/scripts/benchmark-dispatch-prepare.js +0 -90
  61. package/scripts/e2e-benchmark.js +0 -206
  62. package/scripts/roles/resolve_roles.py +0 -293
  63. package/skills/taskchef-bootstrap/SKILL.md +0 -96
  64. package/skills/taskchef-bootstrap/agents/openai.yaml +0 -4
  65. package/skills/taskchef-bootstrap/references/project-index.md +0 -154
  66. package/skills/taskchef-copilot/SKILL.md +0 -75
  67. package/skills/taskchef-copilot/agents/openai.yaml +0 -4
  68. package/skills/taskchef-dashboard/SKILL.md +0 -24
  69. package/skills/taskchef-dashboard/agents/openai.yaml +0 -4
  70. package/skills/taskchef-delegate/SKILL.md +0 -102
  71. package/skills/taskchef-delegate/agents/openai.yaml +0 -4
  72. package/skills/taskchef-delegate/references/model-roles.md +0 -29
  73. package/skills/taskchef-executor/SKILL.md +0 -154
  74. package/skills/taskchef-executor/agents/openai.yaml +0 -4
  75. package/skills/taskchef-executor/references/compatibility.md +0 -22
  76. package/skills/taskchef-executor/references/ending-actions.md +0 -26
  77. package/src/backups.js +0 -359
  78. package/src/cli.js +0 -733
  79. package/src/config-audit.js +0 -99
  80. package/src/config-mutations.js +0 -106
  81. package/src/dashboard/actions.js +0 -136
  82. package/src/dashboard/app.js +0 -1172
  83. package/src/dashboard/dist/app.js +0 -269
  84. package/src/dashboard/dist/app.js.map +0 -1
  85. package/src/dashboard/dist/index.html +0 -16
  86. package/src/dashboard/dist/styles.css +0 -1
  87. package/src/dashboard/index.html +0 -148
  88. package/src/dashboard/react/App.test.tsx +0 -346
  89. package/src/dashboard/react/App.tsx +0 -515
  90. package/src/dashboard/react/api.test.ts +0 -40
  91. package/src/dashboard/react/api.ts +0 -103
  92. package/src/dashboard/react/components/ActivityTimeline.tsx +0 -118
  93. package/src/dashboard/react/components/ModelSettings.test.tsx +0 -180
  94. package/src/dashboard/react/components/ModelSettings.tsx +0 -106
  95. package/src/dashboard/react/components/NotificationCenter.test.tsx +0 -76
  96. package/src/dashboard/react/components/NotificationCenter.tsx +0 -111
  97. package/src/dashboard/react/components/PullRequestBadges.tsx +0 -18
  98. package/src/dashboard/react/components/TaskDetail.test.tsx +0 -255
  99. package/src/dashboard/react/components/TaskDetail.tsx +0 -271
  100. package/src/dashboard/react/components/UsagePanel.tsx +0 -96
  101. package/src/dashboard/react/index.html +0 -15
  102. package/src/dashboard/react/main.tsx +0 -12
  103. package/src/dashboard/react/overlay-state.test.ts +0 -110
  104. package/src/dashboard/react/overlay-state.ts +0 -60
  105. package/src/dashboard/react/presentation.test.tsx +0 -571
  106. package/src/dashboard/styles.css +0 -261
  107. package/src/dashboard-control.js +0 -34
  108. package/src/dashboard-manager.js +0 -339
  109. package/src/dashboard-session-process.js +0 -88
  110. package/src/dashboard-session.js +0 -86
  111. package/src/dashboard.js +0 -1303
  112. package/src/delegation.js +0 -277
  113. package/src/github.js +0 -107
  114. package/src/model-roles.js +0 -70
  115. package/src/recorded-usage-tracker.js +0 -92
  116. package/src/usage-tracker.js +0 -650
  117. package/src/usage.js +0 -367
  118. package/src/workspace-path.js +0 -48
  119. package/src/workspace.js +0 -3629
  120. /package/src/{dashboard/react → ui}/components/AnimatedUsage.test.tsx +0 -0
  121. /package/src/{dashboard/react → ui}/components/CardStatusIcons.test.tsx +0 -0
  122. /package/src/{dashboard/react → ui}/components/ImageGallery.tsx +0 -0
  123. /package/src/{dashboard/react → ui}/components/OpenChatButton.test.tsx +0 -0
  124. /package/src/{dashboard/react → ui}/components/OpenChatButton.tsx +0 -0
  125. /package/src/{dashboard/react → ui}/components/PrGlyph.tsx +0 -0
  126. /package/src/{dashboard/react → ui}/components/QueuedPrompts.test.tsx +0 -0
  127. /package/src/{dashboard/react → ui}/components/QueuedPrompts.tsx +0 -0
  128. /package/src/{dashboard/react → ui}/components/ReplyCover.test.tsx +0 -0
  129. /package/src/{dashboard/react → ui}/components/ReplyCover.tsx +0 -0
  130. /package/src/{dashboard/react → ui}/components/ReplyImagePreview.tsx +0 -0
  131. /package/src/{dashboard/react → ui}/components/ReplyMarkdown.test.tsx +0 -0
  132. /package/src/{dashboard/react → ui}/components/ReplyMarkdown.tsx +0 -0
  133. /package/src/{dashboard/react → ui}/components/SavedUsageFormat.test.tsx +0 -0
  134. /package/src/{dashboard/react → ui}/components/SavedUsageFormat.tsx +0 -0
  135. /package/src/{dashboard/react → ui}/components/ShimmerText.tsx +0 -0
  136. /package/src/{dashboard/react → ui}/components/StatsGrid.tsx +0 -0
  137. /package/src/{dashboard/react → ui}/components/StatusBadge.tsx +0 -0
  138. /package/src/{dashboard/react → ui}/components/TaskBoard.test.tsx +0 -0
  139. /package/src/{dashboard/react → ui}/components/TaskCardStats.test.tsx +0 -0
  140. /package/src/{dashboard/react → ui}/components/TaskCardStats.tsx +0 -0
  141. /package/src/{dashboard/react → ui}/components/TurnContent.test.tsx +0 -0
  142. /package/src/{dashboard/react → ui}/fixtures.ts +0 -0
  143. /package/src/{dashboard → ui}/github-links.js +0 -0
  144. /package/src/{dashboard/react → ui}/image-cache.test.ts +0 -0
  145. /package/src/{dashboard/react → ui}/image-cache.ts +0 -0
  146. /package/src/{dashboard → ui}/state.js +0 -0
  147. /package/src/{dashboard/react → ui}/styles.css +0 -0
  148. /package/src/{dashboard/react → ui}/test-setup.ts +0 -0
  149. /package/src/{dashboard → ui}/time.js +0 -0
  150. /package/src/{dashboard/react → ui}/types.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "taskchef",
3
- "version": "8.7.1",
4
- "description": "Dispatch work from a data-only workspace to visible Codex project tasks.",
3
+ "version": "9.0.1",
4
+ "description": "Native Codex dashboard with lightweight project delegation.",
5
5
  "author": {
6
6
  "name": "Favo Yang",
7
7
  "url": "https://github.com/favoyang"
@@ -11,16 +11,16 @@
11
11
  "license": "Apache-2.0",
12
12
  "keywords": [
13
13
  "codex",
14
- "delegation",
15
- "dispatcher",
14
+ "dashboard",
15
+ "usage",
16
16
  "tasks"
17
17
  ],
18
18
  "skills": "./skills/",
19
19
  "mcpServers": "./.mcp.json",
20
20
  "interface": {
21
21
  "displayName": "TaskChef",
22
- "shortDescription": "Dispatch work to the right Codex project task.",
23
- "longDescription": "Route work to visible Codex project tasks, monitor them in the dashboard, and get concise cached-first coordination briefs.",
22
+ "shortDescription": "See your Codex chats, usage, and pull requests.",
23
+ "longDescription": "A native dashboard for local Codex chats with usage estimates, pull request status, queued prompts, and schedules. Delegate work through native Codex project tools.",
24
24
  "developerName": "Favo Yang",
25
25
  "category": "Productivity",
26
26
  "capabilities": [
@@ -29,10 +29,7 @@
29
29
  ],
30
30
  "websiteURL": "https://github.com/favoyang/taskchef",
31
31
  "defaultPrompt": [
32
- "$taskchef-bootstrap Set up TaskChef and index my local Codex projects.",
33
- "$taskchef-delegate Do X in Y project.",
34
- "$taskchef-dashboard Ensure and open the TaskChef dashboard.",
35
- "$taskchef-copilot Summarize recent delegated work and tell me what needs attention."
32
+ "$taskchef:delegate Do X in Y project."
36
33
  ],
37
34
  "brandColor": "#D97706",
38
35
  "composerIcon": "./assets/taskchef.svg",
package/.mcp.json CHANGED
@@ -2,9 +2,10 @@
2
2
  "mcpServers": {
3
3
  "taskchef": {
4
4
  "command": "node",
5
- "args": ["./mcp/server.js"],
5
+ "args": [
6
+ "./mcp/server.js"
7
+ ],
6
8
  "cwd": ".",
7
- "env_vars": ["TASKCHEF_WORKSPACE"],
8
9
  "tool_timeout_sec": 30
9
10
  }
10
11
  }
package/README.md CHANGED
@@ -1,173 +1,50 @@
1
1
  # TaskChef
2
2
 
3
- **Less time managing tasks. More time moving them forward.**
3
+ A native dashboard for your Codex chats. See running work, questions that need
4
+ answers, queued prompts, usage estimates, schedules, and pull request status.
5
+ Chats appear regardless of how they were started.
4
6
 
5
- When work spans several Codex projects, you have to choose the right project,
6
- find each conversation again, and check which tasks are waiting for you.
7
- TaskChef gives you one dispatcher conversation as a central place to talk to
8
- agents and delegate work across projects, plus a dashboard for seeing what
9
- needs your attention.
7
+ ## Install
10
8
 
11
- Give TaskChef a GitHub issue or a rough idea. It uses an explicit project name,
12
- the conversation's context, or saved repository mappings to choose a Codex
13
- project; if the destination is unclear, it asks you to choose. TaskChef creates
14
- separate, ordinary Codex tasks in those projects. Each has its own conversation
15
- and native tools, and tasks can run in parallel.
9
+ Install **TaskChef** from the `favoyang-plugins` Codex marketplace. TaskChef uses
10
+ a local Node.js MCP server; Node.js 22.18+, 23.2+, or 24+ is required. Open **TaskChef**
11
+ from the Codex sidebar. No dispatcher workspace or project indexing is needed.
16
12
 
17
- You can keep using Codex as you do today. Start by delegating work where the
18
- project choice or follow-up is cumbersome, then bring more work into TaskChef
19
- as you go.
13
+ Codex databases and logs stay on your computer and remain the source of truth.
14
+ TaskChef keeps its own settings, manual Done marks, notification state, and
15
+ rebuildable caches. Optional GitHub authentication provides live PR status;
16
+ usage prices are API-equivalent estimates, not subscription billing.
20
17
 
21
- ## What working with TaskChef looks like
18
+ ## Delegate
22
19
 
23
- Suppose you have indexed two Codex projects, **payments** and **recipe-book**,
24
- and saved a GitHub repository mapping for payments. In your TaskChef dispatcher
25
- conversation, paste a payments issue link and ask:
20
+ From Codex's floating chat, use `$taskchef:delegate Do X in Y project.` The skill finds
21
+ native projects and creates an ordinary Codex chat. It asks when the destination
22
+ is unclear and returns the chat link. There is no executor skill or separate
23
+ task database. Confirmed project aliases can be retained as small routing notes.
26
24
 
27
- ```text
28
- Investigate this issue, fix the cause, and run the relevant tests: https://github.com/example/payments/issues/42
29
- ```
30
-
31
- TaskChef uses the issue URL's repository to identify the mapped payments
32
- project. It then opens a separate Codex task there and returns its link. The
33
- task investigates the issue in its own conversation while other delegated
34
- tasks can work in recipe-book or other projects.
35
-
36
- In the same dispatcher conversation, start another task from a rough idea:
37
-
38
- ```text
39
- In recipe-book, explore an idea for weekly meal planning. Discuss the approach with me before coding.
40
- ```
41
-
42
- TaskChef selects recipe-book by name and opens a separate task there. Discuss
43
- the options in that task. If a written plan would help, ask it to save a
44
- Markdown plan, then ask it to implement the agreed approach in the same task.
45
- A plan file is created when you request one; it is not a required step for
46
- every task.
47
-
48
- The screenshots in this walkthrough use illustrative demo data. Open the
49
- dashboard beside TaskChef master to see both tasks across your projects.
50
- In Codex, call `open_taskchef_board` for the [TaskChef sidebar](docs/mcp-app.md).
51
- It reads local Codex data and groups chats as **Scheduled**, **Running**,
52
- **Waiting for input/review**, and **Done**. Interrupted chats stay in Waiting with an **Interrupted** tag. Empty board columns remain visible with a short message. Ambiguous records stay
53
- **Unverified**. Running follows the latest selected turn
54
- state; these labels do not prove task outcomes. Mark Done writes only TaskChef's separate local state. A new Codex turn
55
- resets that mark.
56
- The main dashboard's **Board** groups reported tasks by **Working**,
57
- **Needs input**, **Completed**, and **Failed** so you can see their status at a glance.
58
-
59
- ![TaskChef master beside the dashboard board with recipe-book working and payments needing input](docs/images/readme-board.png)
60
-
61
- *Board gives an overview of task status across projects.*
62
-
63
- If the payments task needs a decision, it might ask, for example, whether to
64
- show a failed refund beside the original payment or in a separate list. Switch
65
- to **List** to see each task's request, latest result, and status in rows. Filter
66
- by **Needs input** to focus on the payments task's question.
67
-
68
- ![TaskChef master beside the dashboard list filtered to Needs input, showing the payments request and result](docs/images/readme-list.png)
69
-
70
- *List shows the payments request and result in the Needs input queue.*
71
-
72
- Select the payments task and choose **Open chat** to answer in its original
73
- Codex conversation.
74
-
75
- ![Payments task detail showing Open chat and the question in its activity timeline](docs/images/readme-needs-input.png)
76
-
77
- *Payments task details show the question and the Open chat action.*
78
-
79
- In that conversation, answer the question and ask the task to finish:
80
-
81
- ```text
82
- Show failed refunds beside the original payment. Implement it and run the tests.
83
- ```
84
-
85
- When the work finishes, its result appears on the dashboard; TaskChef does
86
- not post each result back into the dispatcher chat.
25
+ ## Upgrade from the dispatcher
87
26
 
88
- ![Completed payments task detail showing the latest result and earlier question](docs/images/readme-completed.png)
27
+ The dispatcher CLI, five old skills, task tracking tools, and web server are
28
+ retired. Existing dispatcher workspaces and task logs are left untouched on
29
+ disk; they are no longer live state. Native settings remain in their existing
30
+ location. See the [native contract](docs/spec.md) and
31
+ [storage notes](docs/taskchef-next-storage.md).
89
32
 
90
- *The completed task shows its latest result above the earlier question.*
91
-
92
- Keep the dashboard beside your conversation in Codex's built-in browser. It
93
- shows each task's latest request and result. Open a task to see its total
94
- reported work duration, token usage, and estimated cost, with the same figures
95
- for each turn in its activity timeline. Duration is reported wall-clock time
96
- spent on turns; cost is an API-equivalent estimate, not a bill. Token and cost
97
- figures can be unavailable when usage cannot be mapped to the Codex task.
98
- Task states normally come from the task's own reports; TaskChef does not
99
- automatically supervise execution.
100
-
101
- ## Install and delegate your first task
102
-
103
- You need Node.js 18 or newer, Git, Codex desktop, and local access to the
104
- projects that will receive work. Install the plugin:
33
+ ## Development
105
34
 
106
35
  ```sh
107
- codex plugin marketplace add favoyang/codex-plugins
108
- codex plugin add taskchef@favoyang-plugins
109
- ```
110
-
111
- For the first run, set up the TaskChef dispatcher and import your saved local
112
- Codex projects:
113
-
114
- ```text
115
- $taskchef-bootstrap Set up TaskChef and index my local Codex projects.
116
- ```
117
-
118
- After bootstrap, choose **New chat** in Codex and select the TaskChef dispatcher
119
- project at `~/.agents/taskchef`. We suggest renaming the new conversation
120
- **TaskChef master**, then pinning it for easy return. Bootstrap registers and
121
- opens the project; you create, rename, and pin the conversation yourself.
122
- Replace `<your-project>` with one of your indexed
123
- Codex project names and try a read-only first request:
124
-
125
- ```text
126
- In <your-project>, explain how to run the app and tests. Do not change files.
36
+ npm ci
37
+ npm test
38
+ npm run check:mcp-app
39
+ npm run build:mcp-app
127
40
  ```
128
41
 
129
- TaskChef returns a link to the new Codex task. From then on, the dispatcher
130
- checks your saved Codex projects when you delegate, so you do not need to
131
- reindex after adding one. The local dashboard normally starts when the TaskChef
132
- plugin activates. Open the [dashboard link](http://127.0.0.1:3210/) from the
133
- end of each dispatcher response in Codex's side browser, beside your
134
- conversation. If the dashboard is unavailable, ask `$taskchef-dashboard` to
135
- ensure and open it. Use `$taskchef-bootstrap` to add repository mappings or
136
- refine project descriptions when routing needs more context. If the installed
137
- skills do not appear, activate or reload the TaskChef plugin in Codex and try
138
- again.
139
-
140
- ## Choose models for each role
141
-
142
- In the dashboard's **Settings** page, choose a model and reasoning effort for
143
- the **Orchestrator**, **Planner**, **Implementer**, and **Reviewer** roles.
144
- TaskChef saves these preferences in native Codex agent files under
145
- `~/.codex/agents/` and applies them when it dispatches the corresponding work.
146
- Set them once for future tasks; a model choice you make explicitly for a task
147
- takes precedence over its role preference.
148
-
149
- ![TaskChef Settings page with model and reasoning effort for four roles](docs/images/readme-roles.png)
150
-
151
- *Settings shows the model and reasoning effort selected for each role.*
152
-
153
- ## More detail
154
-
155
- Read the [frequently asked questions](https://favoyang.com/taskchef/#faq) for
156
- answers about delegation, the dashboard, model roles, and local data.
157
-
158
- The [advanced guide](docs/advanced-guide.md) covers project indexing, routing,
159
- task reporting, dashboard behavior, recovery, updates, and development. The
160
- [specification](docs/spec.md) and [workflows](docs/workflows.md) describe the
161
- implementation contracts. TaskChef was inspired by
162
- [FirstMate](https://github.com/kunchenguid/firstmate); the
163
- [comparison](docs/firstmate-taskchef-comparison.md) explains their different
164
- approaches.
165
-
166
- ## License
167
-
168
- Copyright 2026 Favo Yang. TaskChef is licensed under the
169
- [Apache License 2.0](LICENSE).
42
+ Develop on a topic branch and update **TaskChef Dev** first. Keep **TaskChef**
43
+ on the published release. After validation, independent review, merge, and a
44
+ successful release workflow, update TaskChef from the released package when
45
+ the merge publishes a release. Otherwise keep its existing published version.
46
+ The Dev copy uses the separate `taskchef-next` plugin ID and **TaskChef Dev**
47
+ name; apply that identity only to its local staging package. See
48
+ [development packaging](docs/mcp-app.md#development-plugin-identity).
170
49
 
171
- Third-party dependencies retain their own licenses. The OpenAI Codex icons
172
- are excluded from TaskChef's license; see the
173
- [Codex asset notice](assets/CODEX_ASSET_NOTICE.md).
50
+ [Native app guide](docs/mcp-app.md) · [GitHub setup](docs/taskchef-next-github.md)
package/docs/mcp-app.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  The public app name is **TaskChef**. “TaskChef Next” remains the internal project name.
4
4
 
5
- TaskChef requires Node.js 22.18+, 23.2+, or 24+ for read-only SQLite connections. The rest of TaskChef continues to support the package's Node.js 18 minimum. An unsupported Node runtime produces a fatal version error before TaskChef opens a database.
5
+ The native dashboard requires Node.js 22.18+, 23.2+, or 24+ for local Codex SQLite access.
6
6
 
7
- Call `open_taskchef_board` in Codex to open **TaskChef**. In a sidebar or fullscreen host view, it shows the read-only board, filters, and chat details. In an inline chat view, it shows a short recent-chat list with direct **Open chat** actions. The app uses local Codex metadata and does not modify the TaskChef dispatcher workspace.
7
+ Call `open_taskchef_board` in Codex to open **TaskChef**. In a sidebar or fullscreen host view, it shows the read-only board, filters, and chat details. In an inline chat view, it shows a short recent-chat list with direct **Open chat** actions. The app uses local Codex metadata and does not require a dispatcher workspace.
8
8
 
9
9
  The server reads all eligible top-level chats from `~/.codex/state_5.sqlite` and their latest turn from `~/.codex/thread_history_1.sqlite`. Both SQLite connections are read-only. It excludes typed subagents and Guardian reviews, JSON subagent sources, known `thread_spawn_edges` children, chats with no turn record. Standalone `source=exec` and regular `source=cli` chats remain eligible in the collector, but the view hides them by default. The plugin details page has native switches for Show exec sessions, Show CLI sessions, and Show archived chats. The MCP server stores these choices in `~/.agents/taskchef-next/settings.json`, shared by all TaskChef views. Each visible poll reads the current settings, even when the database snapshot is unchanged. These choices apply to the board, counts, project choices, Details eligibility, and the compact inline view. Archived chats are hidden by default and use their own Archived column when shown. Details shows the recorded lifetime direct child count. Names and titles can contain user text; the app prefers name, then title, then a chat ID fallback.
10
10
 
@@ -49,7 +49,7 @@ Cards show the chat title, project, a plain two-line preview, activity time, and
49
49
 
50
50
  Details pairs the full recorded latest-turn request and response, each initially capped at three lines with independent Show more/Show less controls. Selected quotes render as Markdown quotes and file/image references as named attachments. Generated request headings and context metadata are hidden in the display. Recorded input remains unchanged. Raw HTML is ignored and relative file links appear as text.
51
51
 
52
- Time labels use compact relative dates by default, with calendar dates available in settings. Schedule and PR icons appear in the status line. Queue reasons and lifetime subagent counts remain in Details. See [dashboard UI](dashboard-ui.md) for the presentation contract.
52
+ Time labels use compact relative dates by default, with calendar dates available in settings. Schedule and PR icons appear in the status line. Queue reasons and lifetime subagent counts remain in Details. See [the native contract](spec.md) for the product boundary.
53
53
 
54
54
 
55
55
 
@@ -181,8 +181,25 @@ visibly and is preserved for repair.
181
181
  ## Development plugin identity
182
182
 
183
183
  Keep the released **TaskChef** plugin and a separate **TaskChef Dev** plugin.
184
- The development copy must already use the plugin ID `taskchef-next`.
185
- Before installing it through a local marketplace, run:
184
+ Use this order for every development change:
185
+
186
+ 1. Work in a topic branch/worktree. Build and validate the current source.
187
+ 2. Copy the current runtime, built UI, skill, and production dependencies into
188
+ a separate local staging package. Update **TaskChef Dev** from that package
189
+ and test it before merging. Never copy development changes into TaskChef's
190
+ released installation.
191
+ 3. Pass independent review and the pull request checks, then merge when authorized.
192
+ 4. If the merge publishes a release, wait for the complete release workflow,
193
+ including its marketplace update. Update **TaskChef** from the published
194
+ package and verify its version. If no release is published, leave TaskChef
195
+ on its existing published version.
196
+
197
+ For a full Dev update, give the staging package a unique development version
198
+ in both `package.json` and `.codex-plugin/plugin.json` (and package-lock metadata
199
+ if present), such as `9.0.0-dev.1`. Set only the staging manifest's plugin name
200
+ to `taskchef-next`; keep the source release manifest named `taskchef`.
201
+ Before installing the staging package through the local development marketplace,
202
+ run:
186
203
 
187
204
  ```sh
188
205
  node scripts/prepare-mcp-app-preview.js /path/to/staging/plugin
@@ -209,7 +226,7 @@ From the source checkout, run:
209
226
  npm run update:mcp-app-preview -- /path/to/the/running/taskchef-next/version
210
227
  ```
211
228
 
212
- The helper builds the UI, checks the target is TaskChef, and replaces only
229
+ The helper builds the UI, checks the development plugin ID is `taskchef-next`, and replaces only
213
230
  `src/mcp-app/dist/index.html` atomically. It preserves the plugin version, server
214
231
  code, dependencies, and local data. It refuses missing or redirected HTML paths.
215
232
  Then right-click **TaskChef Dev** in the Codex sidebar and choose **Refresh**.