taskchef 8.6.2 → 8.7.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 (630) hide show
  1. package/.codex-plugin/plugin.json +1 -1
  2. package/README.md +8 -4
  3. package/assets/README.md +19 -0
  4. package/assets/taskchef-app-rounded.png +0 -0
  5. package/assets/taskchef-avatar-square.png +0 -0
  6. package/assets/taskchef-avatar-square.svg +8 -0
  7. package/assets/taskchef-sidebar-dark.svg +6 -0
  8. package/assets/taskchef-sidebar-light.svg +6 -0
  9. package/assets/taskchef-sidebar.svg +6 -0
  10. package/docs/advanced-guide.md +20 -29
  11. package/docs/dashboard-ui.md +15 -0
  12. package/docs/diagrams/taskchef-next-reply-lookup.drawio +38 -0
  13. package/docs/diagrams/taskchef-next-reply-lookup.drawio.png +0 -0
  14. package/docs/diagrams/taskchef-next-storage.drawio +41 -0
  15. package/docs/diagrams/taskchef-next-storage.drawio.png +0 -0
  16. package/docs/images/taskchef-pr-icon-comparison.jpg +0 -0
  17. package/docs/images/taskchef-unified-status-popup.jpg +0 -0
  18. package/docs/mcp-app.md +278 -6
  19. package/docs/spec.md +24 -69
  20. package/docs/taskchef-next-github.md +206 -0
  21. package/docs/taskchef-next-status-research.md +102 -0
  22. package/docs/taskchef-next-storage.md +167 -0
  23. package/docs/workflows.md +4 -2
  24. package/node_modules/@napi-rs/keyring/LICENSE +21 -0
  25. package/node_modules/@napi-rs/keyring/README.md +45 -0
  26. package/node_modules/@napi-rs/keyring/index.d.ts +232 -0
  27. package/node_modules/@napi-rs/keyring/index.js +706 -0
  28. package/node_modules/@napi-rs/keyring/keytar.d.ts +53 -0
  29. package/node_modules/@napi-rs/keyring/keytar.js +26 -0
  30. package/node_modules/@napi-rs/keyring/package.json +126 -0
  31. package/node_modules/@napi-rs/keyring-darwin-arm64/README.md +3 -0
  32. package/node_modules/@napi-rs/keyring-darwin-arm64/keyring.darwin-arm64.node +0 -0
  33. package/node_modules/@napi-rs/keyring-darwin-arm64/package.json +32 -0
  34. package/node_modules/@napi-rs/keyring-darwin-x64/README.md +3 -0
  35. package/node_modules/@napi-rs/keyring-darwin-x64/keyring.darwin-x64.node +0 -0
  36. package/node_modules/@napi-rs/keyring-darwin-x64/package.json +32 -0
  37. package/node_modules/@napi-rs/keyring-linux-arm64-gnu/README.md +3 -0
  38. package/node_modules/@napi-rs/keyring-linux-arm64-gnu/keyring.linux-arm64-gnu.node +0 -0
  39. package/node_modules/@napi-rs/keyring-linux-arm64-gnu/package.json +35 -0
  40. package/node_modules/@napi-rs/keyring-linux-arm64-musl/README.md +3 -0
  41. package/node_modules/@napi-rs/keyring-linux-arm64-musl/keyring.linux-arm64-musl.node +0 -0
  42. package/node_modules/@napi-rs/keyring-linux-arm64-musl/package.json +35 -0
  43. package/node_modules/@napi-rs/keyring-linux-x64-gnu/README.md +3 -0
  44. package/node_modules/@napi-rs/keyring-linux-x64-gnu/keyring.linux-x64-gnu.node +0 -0
  45. package/node_modules/@napi-rs/keyring-linux-x64-gnu/package.json +35 -0
  46. package/node_modules/@napi-rs/keyring-linux-x64-musl/README.md +3 -0
  47. package/node_modules/@napi-rs/keyring-linux-x64-musl/keyring.linux-x64-musl.node +0 -0
  48. package/node_modules/@napi-rs/keyring-linux-x64-musl/package.json +35 -0
  49. package/node_modules/@napi-rs/keyring-win32-arm64-msvc/README.md +3 -0
  50. package/node_modules/@napi-rs/keyring-win32-arm64-msvc/keyring.win32-arm64-msvc.node +0 -0
  51. package/node_modules/@napi-rs/keyring-win32-arm64-msvc/package.json +32 -0
  52. package/node_modules/@napi-rs/keyring-win32-x64-msvc/README.md +3 -0
  53. package/node_modules/@napi-rs/keyring-win32-x64-msvc/keyring.win32-x64-msvc.node +0 -0
  54. package/node_modules/@napi-rs/keyring-win32-x64-msvc/package.json +32 -0
  55. package/node_modules/@types/debug/LICENSE +21 -0
  56. package/node_modules/@types/debug/README.md +69 -0
  57. package/node_modules/@types/debug/index.d.ts +50 -0
  58. package/node_modules/@types/debug/package.json +58 -0
  59. package/node_modules/@types/mdast/LICENSE +21 -0
  60. package/node_modules/@types/mdast/README.md +15 -0
  61. package/node_modules/@types/mdast/index.d.ts +1123 -0
  62. package/node_modules/@types/mdast/package.json +47 -0
  63. package/node_modules/@types/ms/LICENSE +21 -0
  64. package/node_modules/@types/ms/README.md +82 -0
  65. package/node_modules/@types/ms/index.d.ts +63 -0
  66. package/node_modules/@types/ms/package.json +26 -0
  67. package/node_modules/@types/unist/LICENSE +21 -0
  68. package/node_modules/@types/unist/README.md +15 -0
  69. package/node_modules/@types/unist/index.d.ts +119 -0
  70. package/node_modules/@types/unist/package.json +60 -0
  71. package/node_modules/character-entities/index.d.ts +6 -0
  72. package/node_modules/character-entities/index.js +2132 -0
  73. package/node_modules/character-entities/license +22 -0
  74. package/node_modules/character-entities/package.json +78 -0
  75. package/node_modules/character-entities/readme.md +152 -0
  76. package/node_modules/decode-named-character-reference/index.d.ts +13 -0
  77. package/node_modules/decode-named-character-reference/index.d.ts.map +1 -0
  78. package/node_modules/decode-named-character-reference/index.dom.d.ts +6 -0
  79. package/node_modules/decode-named-character-reference/index.dom.d.ts.map +1 -0
  80. package/node_modules/decode-named-character-reference/index.dom.js +32 -0
  81. package/node_modules/decode-named-character-reference/index.js +19 -0
  82. package/node_modules/decode-named-character-reference/license +22 -0
  83. package/node_modules/decode-named-character-reference/package.json +90 -0
  84. package/node_modules/decode-named-character-reference/readme.md +136 -0
  85. package/node_modules/dequal/dist/index.js +86 -0
  86. package/node_modules/dequal/dist/index.min.js +1 -0
  87. package/node_modules/dequal/dist/index.mjs +84 -0
  88. package/node_modules/dequal/index.d.ts +1 -0
  89. package/node_modules/dequal/license +21 -0
  90. package/node_modules/dequal/lite/index.d.ts +1 -0
  91. package/node_modules/dequal/lite/index.js +31 -0
  92. package/node_modules/dequal/lite/index.min.js +1 -0
  93. package/node_modules/dequal/lite/index.mjs +29 -0
  94. package/node_modules/dequal/package.json +57 -0
  95. package/node_modules/dequal/readme.md +112 -0
  96. package/node_modules/devlop/lib/default.js +9 -0
  97. package/node_modules/devlop/lib/development.d.ts +84 -0
  98. package/node_modules/devlop/lib/development.js +238 -0
  99. package/node_modules/devlop/license +22 -0
  100. package/node_modules/devlop/package.json +80 -0
  101. package/node_modules/devlop/readme.md +360 -0
  102. package/node_modules/mdast-util-from-markdown/dev/index.d.ts +23 -0
  103. package/node_modules/mdast-util-from-markdown/dev/index.js +2 -0
  104. package/node_modules/mdast-util-from-markdown/dev/lib/index.d.ts +53 -0
  105. package/node_modules/mdast-util-from-markdown/dev/lib/index.d.ts.map +1 -0
  106. package/node_modules/mdast-util-from-markdown/dev/lib/index.js +1348 -0
  107. package/node_modules/mdast-util-from-markdown/dev/lib/types.d.ts +295 -0
  108. package/node_modules/mdast-util-from-markdown/dev/lib/types.js +2 -0
  109. package/node_modules/mdast-util-from-markdown/index.d.ts +23 -0
  110. package/node_modules/mdast-util-from-markdown/index.js +2 -0
  111. package/node_modules/mdast-util-from-markdown/lib/index.d.ts +53 -0
  112. package/node_modules/mdast-util-from-markdown/lib/index.js +1177 -0
  113. package/node_modules/mdast-util-from-markdown/lib/types.d.ts +295 -0
  114. package/node_modules/mdast-util-from-markdown/lib/types.js +2 -0
  115. package/node_modules/mdast-util-from-markdown/license +22 -0
  116. package/node_modules/mdast-util-from-markdown/package.json +139 -0
  117. package/node_modules/mdast-util-from-markdown/readme.md +537 -0
  118. package/node_modules/mdast-util-to-string/index.d.ts +2 -0
  119. package/node_modules/mdast-util-to-string/index.js +5 -0
  120. package/node_modules/mdast-util-to-string/lib/index.d.ts +31 -0
  121. package/node_modules/mdast-util-to-string/lib/index.js +108 -0
  122. package/node_modules/mdast-util-to-string/license +22 -0
  123. package/node_modules/mdast-util-to-string/package.json +78 -0
  124. package/node_modules/mdast-util-to-string/readme.md +218 -0
  125. package/node_modules/micromark/dev/index.d.ts +82 -0
  126. package/node_modules/micromark/dev/index.d.ts.map +1 -0
  127. package/node_modules/micromark/dev/index.js +68 -0
  128. package/node_modules/micromark/dev/lib/compile.d.ts +16 -0
  129. package/node_modules/micromark/dev/lib/compile.d.ts.map +1 -0
  130. package/node_modules/micromark/dev/lib/compile.js +1162 -0
  131. package/node_modules/micromark/dev/lib/constructs.d.ts +73 -0
  132. package/node_modules/micromark/dev/lib/constructs.d.ts.map +1 -0
  133. package/node_modules/micromark/dev/lib/constructs.js +101 -0
  134. package/node_modules/micromark/dev/lib/create-tokenizer.d.ts +46 -0
  135. package/node_modules/micromark/dev/lib/create-tokenizer.d.ts.map +1 -0
  136. package/node_modules/micromark/dev/lib/create-tokenizer.js +718 -0
  137. package/node_modules/micromark/dev/lib/initialize/content.d.ts +4 -0
  138. package/node_modules/micromark/dev/lib/initialize/content.d.ts.map +1 -0
  139. package/node_modules/micromark/dev/lib/initialize/content.js +99 -0
  140. package/node_modules/micromark/dev/lib/initialize/document.d.ts +10 -0
  141. package/node_modules/micromark/dev/lib/initialize/document.d.ts.map +1 -0
  142. package/node_modules/micromark/dev/lib/initialize/document.js +449 -0
  143. package/node_modules/micromark/dev/lib/initialize/flow.d.ts +4 -0
  144. package/node_modules/micromark/dev/lib/initialize/flow.d.ts.map +1 -0
  145. package/node_modules/micromark/dev/lib/initialize/flow.js +86 -0
  146. package/node_modules/micromark/dev/lib/initialize/text.d.ts +8 -0
  147. package/node_modules/micromark/dev/lib/initialize/text.d.ts.map +1 -0
  148. package/node_modules/micromark/dev/lib/initialize/text.js +248 -0
  149. package/node_modules/micromark/dev/lib/parse.d.ts +10 -0
  150. package/node_modules/micromark/dev/lib/parse.d.ts.map +1 -0
  151. package/node_modules/micromark/dev/lib/parse.js +58 -0
  152. package/node_modules/micromark/dev/lib/postprocess.d.ts +9 -0
  153. package/node_modules/micromark/dev/lib/postprocess.d.ts.map +1 -0
  154. package/node_modules/micromark/dev/lib/postprocess.js +19 -0
  155. package/node_modules/micromark/dev/lib/preprocess.d.ts +13 -0
  156. package/node_modules/micromark/dev/lib/preprocess.d.ts.map +1 -0
  157. package/node_modules/micromark/dev/lib/preprocess.js +139 -0
  158. package/node_modules/micromark/dev/stream.d.ts +35 -0
  159. package/node_modules/micromark/dev/stream.d.ts.map +1 -0
  160. package/node_modules/micromark/dev/stream.js +270 -0
  161. package/node_modules/micromark/index.d.ts +82 -0
  162. package/node_modules/micromark/index.d.ts.map +1 -0
  163. package/node_modules/micromark/index.js +60 -0
  164. package/node_modules/micromark/lib/compile.d.ts +16 -0
  165. package/node_modules/micromark/lib/compile.d.ts.map +1 -0
  166. package/node_modules/micromark/lib/compile.js +1068 -0
  167. package/node_modules/micromark/lib/constructs.d.ts +73 -0
  168. package/node_modules/micromark/lib/constructs.d.ts.map +1 -0
  169. package/node_modules/micromark/lib/constructs.js +85 -0
  170. package/node_modules/micromark/lib/create-tokenizer.d.ts +46 -0
  171. package/node_modules/micromark/lib/create-tokenizer.d.ts.map +1 -0
  172. package/node_modules/micromark/lib/create-tokenizer.js +613 -0
  173. package/node_modules/micromark/lib/initialize/content.d.ts +4 -0
  174. package/node_modules/micromark/lib/initialize/content.d.ts.map +1 -0
  175. package/node_modules/micromark/lib/initialize/content.js +79 -0
  176. package/node_modules/micromark/lib/initialize/document.d.ts +10 -0
  177. package/node_modules/micromark/lib/initialize/document.d.ts.map +1 -0
  178. package/node_modules/micromark/lib/initialize/document.js +370 -0
  179. package/node_modules/micromark/lib/initialize/flow.d.ts +4 -0
  180. package/node_modules/micromark/lib/initialize/flow.d.ts.map +1 -0
  181. package/node_modules/micromark/lib/initialize/flow.js +58 -0
  182. package/node_modules/micromark/lib/initialize/text.d.ts +8 -0
  183. package/node_modules/micromark/lib/initialize/text.d.ts.map +1 -0
  184. package/node_modules/micromark/lib/initialize/text.js +216 -0
  185. package/node_modules/micromark/lib/parse.d.ts +10 -0
  186. package/node_modules/micromark/lib/parse.d.ts.map +1 -0
  187. package/node_modules/micromark/lib/parse.js +56 -0
  188. package/node_modules/micromark/lib/postprocess.d.ts +9 -0
  189. package/node_modules/micromark/lib/postprocess.d.ts.map +1 -0
  190. package/node_modules/micromark/lib/postprocess.js +18 -0
  191. package/node_modules/micromark/lib/preprocess.d.ts +13 -0
  192. package/node_modules/micromark/lib/preprocess.d.ts.map +1 -0
  193. package/node_modules/micromark/lib/preprocess.js +112 -0
  194. package/node_modules/micromark/license +22 -0
  195. package/node_modules/micromark/package.json +87 -0
  196. package/node_modules/micromark/readme.md +488 -0
  197. package/node_modules/micromark/stream.d.ts +35 -0
  198. package/node_modules/micromark/stream.d.ts.map +1 -0
  199. package/node_modules/micromark/stream.js +256 -0
  200. package/node_modules/micromark-core-commonmark/dev/index.d.ts +23 -0
  201. package/node_modules/micromark-core-commonmark/dev/index.d.ts.map +1 -0
  202. package/node_modules/micromark-core-commonmark/dev/index.js +22 -0
  203. package/node_modules/micromark-core-commonmark/dev/lib/attention.d.ts +4 -0
  204. package/node_modules/micromark-core-commonmark/dev/lib/attention.d.ts.map +1 -0
  205. package/node_modules/micromark-core-commonmark/dev/lib/attention.js +294 -0
  206. package/node_modules/micromark-core-commonmark/dev/lib/autolink.d.ts +4 -0
  207. package/node_modules/micromark-core-commonmark/dev/lib/autolink.d.ts.map +1 -0
  208. package/node_modules/micromark-core-commonmark/dev/lib/autolink.js +269 -0
  209. package/node_modules/micromark-core-commonmark/dev/lib/blank-line.d.ts +4 -0
  210. package/node_modules/micromark-core-commonmark/dev/lib/blank-line.d.ts.map +1 -0
  211. package/node_modules/micromark-core-commonmark/dev/lib/blank-line.js +62 -0
  212. package/node_modules/micromark-core-commonmark/dev/lib/block-quote.d.ts +4 -0
  213. package/node_modules/micromark-core-commonmark/dev/lib/block-quote.d.ts.map +1 -0
  214. package/node_modules/micromark-core-commonmark/dev/lib/block-quote.js +162 -0
  215. package/node_modules/micromark-core-commonmark/dev/lib/character-escape.d.ts +4 -0
  216. package/node_modules/micromark-core-commonmark/dev/lib/character-escape.d.ts.map +1 -0
  217. package/node_modules/micromark-core-commonmark/dev/lib/character-escape.js +69 -0
  218. package/node_modules/micromark-core-commonmark/dev/lib/character-reference.d.ts +4 -0
  219. package/node_modules/micromark-core-commonmark/dev/lib/character-reference.d.ts.map +1 -0
  220. package/node_modules/micromark-core-commonmark/dev/lib/character-reference.js +166 -0
  221. package/node_modules/micromark-core-commonmark/dev/lib/code-fenced.d.ts +4 -0
  222. package/node_modules/micromark-core-commonmark/dev/lib/code-fenced.d.ts.map +1 -0
  223. package/node_modules/micromark-core-commonmark/dev/lib/code-fenced.js +472 -0
  224. package/node_modules/micromark-core-commonmark/dev/lib/code-indented.d.ts +4 -0
  225. package/node_modules/micromark-core-commonmark/dev/lib/code-indented.d.ts.map +1 -0
  226. package/node_modules/micromark-core-commonmark/dev/lib/code-indented.js +178 -0
  227. package/node_modules/micromark-core-commonmark/dev/lib/code-text.d.ts +4 -0
  228. package/node_modules/micromark-core-commonmark/dev/lib/code-text.d.ts.map +1 -0
  229. package/node_modules/micromark-core-commonmark/dev/lib/code-text.js +257 -0
  230. package/node_modules/micromark-core-commonmark/dev/lib/content.d.ts +7 -0
  231. package/node_modules/micromark-core-commonmark/dev/lib/content.d.ts.map +1 -0
  232. package/node_modules/micromark-core-commonmark/dev/lib/content.js +185 -0
  233. package/node_modules/micromark-core-commonmark/dev/lib/definition.d.ts +4 -0
  234. package/node_modules/micromark-core-commonmark/dev/lib/definition.d.ts.map +1 -0
  235. package/node_modules/micromark-core-commonmark/dev/lib/definition.js +295 -0
  236. package/node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.d.ts +4 -0
  237. package/node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.d.ts.map +1 -0
  238. package/node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.js +65 -0
  239. package/node_modules/micromark-core-commonmark/dev/lib/heading-atx.d.ts +4 -0
  240. package/node_modules/micromark-core-commonmark/dev/lib/heading-atx.d.ts.map +1 -0
  241. package/node_modules/micromark-core-commonmark/dev/lib/heading-atx.js +229 -0
  242. package/node_modules/micromark-core-commonmark/dev/lib/html-flow.d.ts +4 -0
  243. package/node_modules/micromark-core-commonmark/dev/lib/html-flow.d.ts.map +1 -0
  244. package/node_modules/micromark-core-commonmark/dev/lib/html-flow.js +938 -0
  245. package/node_modules/micromark-core-commonmark/dev/lib/html-text.d.ts +4 -0
  246. package/node_modules/micromark-core-commonmark/dev/lib/html-text.d.ts.map +1 -0
  247. package/node_modules/micromark-core-commonmark/dev/lib/html-text.js +783 -0
  248. package/node_modules/micromark-core-commonmark/dev/lib/label-end.d.ts +4 -0
  249. package/node_modules/micromark-core-commonmark/dev/lib/label-end.d.ts.map +1 -0
  250. package/node_modules/micromark-core-commonmark/dev/lib/label-end.js +658 -0
  251. package/node_modules/micromark-core-commonmark/dev/lib/label-start-image.d.ts +4 -0
  252. package/node_modules/micromark-core-commonmark/dev/lib/label-start-image.d.ts.map +1 -0
  253. package/node_modules/micromark-core-commonmark/dev/lib/label-start-image.js +119 -0
  254. package/node_modules/micromark-core-commonmark/dev/lib/label-start-link.d.ts +4 -0
  255. package/node_modules/micromark-core-commonmark/dev/lib/label-start-link.d.ts.map +1 -0
  256. package/node_modules/micromark-core-commonmark/dev/lib/label-start-link.js +71 -0
  257. package/node_modules/micromark-core-commonmark/dev/lib/line-ending.d.ts +4 -0
  258. package/node_modules/micromark-core-commonmark/dev/lib/line-ending.d.ts.map +1 -0
  259. package/node_modules/micromark-core-commonmark/dev/lib/line-ending.js +34 -0
  260. package/node_modules/micromark-core-commonmark/dev/lib/list.d.ts +4 -0
  261. package/node_modules/micromark-core-commonmark/dev/lib/list.d.ts.map +1 -0
  262. package/node_modules/micromark-core-commonmark/dev/lib/list.js +306 -0
  263. package/node_modules/micromark-core-commonmark/dev/lib/partial-non-lazy-continuation.d.ts +4 -0
  264. package/node_modules/micromark-core-commonmark/dev/lib/partial-non-lazy-continuation.d.ts.map +1 -0
  265. package/node_modules/micromark-core-commonmark/dev/lib/partial-non-lazy-continuation.js +67 -0
  266. package/node_modules/micromark-core-commonmark/dev/lib/setext-underline.d.ts +4 -0
  267. package/node_modules/micromark-core-commonmark/dev/lib/setext-underline.d.ts.map +1 -0
  268. package/node_modules/micromark-core-commonmark/dev/lib/setext-underline.js +213 -0
  269. package/node_modules/micromark-core-commonmark/dev/lib/thematic-break.d.ts +4 -0
  270. package/node_modules/micromark-core-commonmark/dev/lib/thematic-break.d.ts.map +1 -0
  271. package/node_modules/micromark-core-commonmark/dev/lib/thematic-break.js +120 -0
  272. package/node_modules/micromark-core-commonmark/index.d.ts +23 -0
  273. package/node_modules/micromark-core-commonmark/index.d.ts.map +1 -0
  274. package/node_modules/micromark-core-commonmark/index.js +22 -0
  275. package/node_modules/micromark-core-commonmark/lib/attention.d.ts +4 -0
  276. package/node_modules/micromark-core-commonmark/lib/attention.d.ts.map +1 -0
  277. package/node_modules/micromark-core-commonmark/lib/attention.js +231 -0
  278. package/node_modules/micromark-core-commonmark/lib/autolink.d.ts +4 -0
  279. package/node_modules/micromark-core-commonmark/lib/autolink.d.ts.map +1 -0
  280. package/node_modules/micromark-core-commonmark/lib/autolink.js +233 -0
  281. package/node_modules/micromark-core-commonmark/lib/blank-line.d.ts +4 -0
  282. package/node_modules/micromark-core-commonmark/lib/blank-line.d.ts.map +1 -0
  283. package/node_modules/micromark-core-commonmark/lib/blank-line.js +61 -0
  284. package/node_modules/micromark-core-commonmark/lib/block-quote.d.ts +4 -0
  285. package/node_modules/micromark-core-commonmark/lib/block-quote.d.ts.map +1 -0
  286. package/node_modules/micromark-core-commonmark/lib/block-quote.js +143 -0
  287. package/node_modules/micromark-core-commonmark/lib/character-escape.d.ts +4 -0
  288. package/node_modules/micromark-core-commonmark/lib/character-escape.d.ts.map +1 -0
  289. package/node_modules/micromark-core-commonmark/lib/character-escape.js +64 -0
  290. package/node_modules/micromark-core-commonmark/lib/character-reference.d.ts +4 -0
  291. package/node_modules/micromark-core-commonmark/lib/character-reference.d.ts.map +1 -0
  292. package/node_modules/micromark-core-commonmark/lib/character-reference.js +149 -0
  293. package/node_modules/micromark-core-commonmark/lib/code-fenced.d.ts +4 -0
  294. package/node_modules/micromark-core-commonmark/lib/code-fenced.d.ts.map +1 -0
  295. package/node_modules/micromark-core-commonmark/lib/code-fenced.js +422 -0
  296. package/node_modules/micromark-core-commonmark/lib/code-indented.d.ts +4 -0
  297. package/node_modules/micromark-core-commonmark/lib/code-indented.d.ts.map +1 -0
  298. package/node_modules/micromark-core-commonmark/lib/code-indented.js +159 -0
  299. package/node_modules/micromark-core-commonmark/lib/code-text.d.ts +4 -0
  300. package/node_modules/micromark-core-commonmark/lib/code-text.d.ts.map +1 -0
  301. package/node_modules/micromark-core-commonmark/lib/code-text.js +225 -0
  302. package/node_modules/micromark-core-commonmark/lib/content.d.ts +7 -0
  303. package/node_modules/micromark-core-commonmark/lib/content.d.ts.map +1 -0
  304. package/node_modules/micromark-core-commonmark/lib/content.js +163 -0
  305. package/node_modules/micromark-core-commonmark/lib/definition.d.ts +4 -0
  306. package/node_modules/micromark-core-commonmark/lib/definition.d.ts.map +1 -0
  307. package/node_modules/micromark-core-commonmark/lib/definition.js +254 -0
  308. package/node_modules/micromark-core-commonmark/lib/hard-break-escape.d.ts +4 -0
  309. package/node_modules/micromark-core-commonmark/lib/hard-break-escape.d.ts.map +1 -0
  310. package/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +60 -0
  311. package/node_modules/micromark-core-commonmark/lib/heading-atx.d.ts +4 -0
  312. package/node_modules/micromark-core-commonmark/lib/heading-atx.d.ts.map +1 -0
  313. package/node_modules/micromark-core-commonmark/lib/heading-atx.js +191 -0
  314. package/node_modules/micromark-core-commonmark/lib/html-flow.d.ts +4 -0
  315. package/node_modules/micromark-core-commonmark/lib/html-flow.d.ts.map +1 -0
  316. package/node_modules/micromark-core-commonmark/lib/html-flow.js +827 -0
  317. package/node_modules/micromark-core-commonmark/lib/html-text.d.ts +4 -0
  318. package/node_modules/micromark-core-commonmark/lib/html-text.d.ts.map +1 -0
  319. package/node_modules/micromark-core-commonmark/lib/html-text.js +678 -0
  320. package/node_modules/micromark-core-commonmark/lib/label-end.d.ts +4 -0
  321. package/node_modules/micromark-core-commonmark/lib/label-end.d.ts.map +1 -0
  322. package/node_modules/micromark-core-commonmark/lib/label-end.js +561 -0
  323. package/node_modules/micromark-core-commonmark/lib/label-start-image.d.ts +4 -0
  324. package/node_modules/micromark-core-commonmark/lib/label-start-image.d.ts.map +1 -0
  325. package/node_modules/micromark-core-commonmark/lib/label-start-image.js +110 -0
  326. package/node_modules/micromark-core-commonmark/lib/label-start-link.d.ts +4 -0
  327. package/node_modules/micromark-core-commonmark/lib/label-start-link.d.ts.map +1 -0
  328. package/node_modules/micromark-core-commonmark/lib/label-start-link.js +63 -0
  329. package/node_modules/micromark-core-commonmark/lib/line-ending.d.ts +4 -0
  330. package/node_modules/micromark-core-commonmark/lib/line-ending.d.ts.map +1 -0
  331. package/node_modules/micromark-core-commonmark/lib/line-ending.js +33 -0
  332. package/node_modules/micromark-core-commonmark/lib/list.d.ts +4 -0
  333. package/node_modules/micromark-core-commonmark/lib/list.d.ts.map +1 -0
  334. package/node_modules/micromark-core-commonmark/lib/list.js +213 -0
  335. package/node_modules/micromark-core-commonmark/lib/partial-non-lazy-continuation.d.ts +4 -0
  336. package/node_modules/micromark-core-commonmark/lib/partial-non-lazy-continuation.d.ts.map +1 -0
  337. package/node_modules/micromark-core-commonmark/lib/partial-non-lazy-continuation.js +61 -0
  338. package/node_modules/micromark-core-commonmark/lib/setext-underline.d.ts +4 -0
  339. package/node_modules/micromark-core-commonmark/lib/setext-underline.d.ts.map +1 -0
  340. package/node_modules/micromark-core-commonmark/lib/setext-underline.js +187 -0
  341. package/node_modules/micromark-core-commonmark/lib/thematic-break.d.ts +4 -0
  342. package/node_modules/micromark-core-commonmark/lib/thematic-break.d.ts.map +1 -0
  343. package/node_modules/micromark-core-commonmark/lib/thematic-break.js +102 -0
  344. package/node_modules/micromark-core-commonmark/license +22 -0
  345. package/node_modules/micromark-core-commonmark/package.json +62 -0
  346. package/node_modules/micromark-core-commonmark/readme.md +171 -0
  347. package/node_modules/micromark-factory-destination/dev/index.d.ts +42 -0
  348. package/node_modules/micromark-factory-destination/dev/index.d.ts.map +1 -0
  349. package/node_modules/micromark-factory-destination/dev/index.js +255 -0
  350. package/node_modules/micromark-factory-destination/index.d.ts +42 -0
  351. package/node_modules/micromark-factory-destination/index.d.ts.map +1 -0
  352. package/node_modules/micromark-factory-destination/index.js +206 -0
  353. package/node_modules/micromark-factory-destination/license +22 -0
  354. package/node_modules/micromark-factory-destination/package.json +57 -0
  355. package/node_modules/micromark-factory-destination/readme.md +234 -0
  356. package/node_modules/micromark-factory-label/dev/index.d.ts +37 -0
  357. package/node_modules/micromark-factory-label/dev/index.d.ts.map +1 -0
  358. package/node_modules/micromark-factory-label/dev/index.js +172 -0
  359. package/node_modules/micromark-factory-label/index.d.ts +37 -0
  360. package/node_modules/micromark-factory-label/index.d.ts.map +1 -0
  361. package/node_modules/micromark-factory-label/index.js +148 -0
  362. package/node_modules/micromark-factory-label/license +22 -0
  363. package/node_modules/micromark-factory-label/package.json +60 -0
  364. package/node_modules/micromark-factory-label/readme.md +224 -0
  365. package/node_modules/micromark-factory-space/dev/index.d.ts +60 -0
  366. package/node_modules/micromark-factory-space/dev/index.d.ts.map +1 -0
  367. package/node_modules/micromark-factory-space/dev/index.js +122 -0
  368. package/node_modules/micromark-factory-space/index.d.ts +60 -0
  369. package/node_modules/micromark-factory-space/index.d.ts.map +1 -0
  370. package/node_modules/micromark-factory-space/index.js +116 -0
  371. package/node_modules/micromark-factory-space/license +22 -0
  372. package/node_modules/micromark-factory-space/package.json +46 -0
  373. package/node_modules/micromark-factory-space/readme.md +225 -0
  374. package/node_modules/micromark-factory-title/dev/index.d.ts +36 -0
  375. package/node_modules/micromark-factory-title/dev/index.d.ts.map +1 -0
  376. package/node_modules/micromark-factory-title/dev/index.js +169 -0
  377. package/node_modules/micromark-factory-title/index.d.ts +36 -0
  378. package/node_modules/micromark-factory-title/index.d.ts.map +1 -0
  379. package/node_modules/micromark-factory-title/index.js +158 -0
  380. package/node_modules/micromark-factory-title/license +22 -0
  381. package/node_modules/micromark-factory-title/package.json +58 -0
  382. package/node_modules/micromark-factory-title/readme.md +229 -0
  383. package/node_modules/micromark-factory-whitespace/dev/index.d.ts +22 -0
  384. package/node_modules/micromark-factory-whitespace/dev/index.d.ts.map +1 -0
  385. package/node_modules/micromark-factory-whitespace/dev/index.js +53 -0
  386. package/node_modules/micromark-factory-whitespace/index.d.ts +22 -0
  387. package/node_modules/micromark-factory-whitespace/index.d.ts.map +1 -0
  388. package/node_modules/micromark-factory-whitespace/index.js +44 -0
  389. package/node_modules/micromark-factory-whitespace/license +22 -0
  390. package/node_modules/micromark-factory-whitespace/package.json +57 -0
  391. package/node_modules/micromark-factory-whitespace/readme.md +205 -0
  392. package/node_modules/micromark-util-character/dev/index.d.ts +195 -0
  393. package/node_modules/micromark-util-character/dev/index.d.ts.map +1 -0
  394. package/node_modules/micromark-util-character/dev/index.js +252 -0
  395. package/node_modules/micromark-util-character/index.d.ts +195 -0
  396. package/node_modules/micromark-util-character/index.d.ts.map +1 -0
  397. package/node_modules/micromark-util-character/index.js +246 -0
  398. package/node_modules/micromark-util-character/license +22 -0
  399. package/node_modules/micromark-util-character/package.json +57 -0
  400. package/node_modules/micromark-util-character/readme.md +446 -0
  401. package/node_modules/micromark-util-chunked/dev/index.d.ts +41 -0
  402. package/node_modules/micromark-util-chunked/dev/index.d.ts.map +1 -0
  403. package/node_modules/micromark-util-chunked/dev/index.js +89 -0
  404. package/node_modules/micromark-util-chunked/index.d.ts +41 -0
  405. package/node_modules/micromark-util-chunked/index.d.ts.map +1 -0
  406. package/node_modules/micromark-util-chunked/index.js +81 -0
  407. package/node_modules/micromark-util-chunked/license +22 -0
  408. package/node_modules/micromark-util-chunked/package.json +57 -0
  409. package/node_modules/micromark-util-chunked/readme.md +219 -0
  410. package/node_modules/micromark-util-classify-character/dev/index.d.ts +18 -0
  411. package/node_modules/micromark-util-classify-character/dev/index.d.ts.map +1 -0
  412. package/node_modules/micromark-util-classify-character/dev/index.js +38 -0
  413. package/node_modules/micromark-util-classify-character/index.d.ts +18 -0
  414. package/node_modules/micromark-util-classify-character/index.d.ts.map +1 -0
  415. package/node_modules/micromark-util-classify-character/index.js +27 -0
  416. package/node_modules/micromark-util-classify-character/license +22 -0
  417. package/node_modules/micromark-util-classify-character/package.json +59 -0
  418. package/node_modules/micromark-util-classify-character/readme.md +205 -0
  419. package/node_modules/micromark-util-combine-extensions/index.d.ts +22 -0
  420. package/node_modules/micromark-util-combine-extensions/index.d.ts.map +1 -0
  421. package/node_modules/micromark-util-combine-extensions/index.js +143 -0
  422. package/node_modules/micromark-util-combine-extensions/license +22 -0
  423. package/node_modules/micromark-util-combine-extensions/package.json +52 -0
  424. package/node_modules/micromark-util-combine-extensions/readme.md +201 -0
  425. package/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts +16 -0
  426. package/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map +1 -0
  427. package/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js +42 -0
  428. package/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts +16 -0
  429. package/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map +1 -0
  430. package/node_modules/micromark-util-decode-numeric-character-reference/index.js +32 -0
  431. package/node_modules/micromark-util-decode-numeric-character-reference/license +22 -0
  432. package/node_modules/micromark-util-decode-numeric-character-reference/package.json +59 -0
  433. package/node_modules/micromark-util-decode-numeric-character-reference/readme.md +184 -0
  434. package/node_modules/micromark-util-decode-string/dev/index.d.ts +14 -0
  435. package/node_modules/micromark-util-decode-string/dev/index.d.ts.map +1 -0
  436. package/node_modules/micromark-util-decode-string/dev/index.js +53 -0
  437. package/node_modules/micromark-util-decode-string/index.d.ts +14 -0
  438. package/node_modules/micromark-util-decode-string/index.d.ts.map +1 -0
  439. package/node_modules/micromark-util-decode-string/index.js +45 -0
  440. package/node_modules/micromark-util-decode-string/license +22 -0
  441. package/node_modules/micromark-util-decode-string/package.json +63 -0
  442. package/node_modules/micromark-util-decode-string/readme.md +179 -0
  443. package/node_modules/micromark-util-edit-map/dev/index.d.ts +78 -0
  444. package/node_modules/micromark-util-edit-map/dev/index.d.ts.map +1 -0
  445. package/node_modules/micromark-util-edit-map/dev/index.js +237 -0
  446. package/node_modules/micromark-util-edit-map/index.d.ts +78 -0
  447. package/node_modules/micromark-util-edit-map/index.d.ts.map +1 -0
  448. package/node_modules/micromark-util-edit-map/index.js +225 -0
  449. package/node_modules/micromark-util-edit-map/license +22 -0
  450. package/node_modules/micromark-util-edit-map/package.json +48 -0
  451. package/node_modules/micromark-util-edit-map/readme.md +234 -0
  452. package/node_modules/micromark-util-encode/index.d.ts +14 -0
  453. package/node_modules/micromark-util-encode/index.d.ts.map +1 -0
  454. package/node_modules/micromark-util-encode/index.js +33 -0
  455. package/node_modules/micromark-util-encode/license +22 -0
  456. package/node_modules/micromark-util-encode/package.json +47 -0
  457. package/node_modules/micromark-util-encode/readme.md +176 -0
  458. package/node_modules/micromark-util-html-tag-name/index.d.ts +30 -0
  459. package/node_modules/micromark-util-html-tag-name/index.d.ts.map +1 -0
  460. package/node_modules/micromark-util-html-tag-name/index.js +93 -0
  461. package/node_modules/micromark-util-html-tag-name/license +22 -0
  462. package/node_modules/micromark-util-html-tag-name/package.json +47 -0
  463. package/node_modules/micromark-util-html-tag-name/readme.md +193 -0
  464. package/node_modules/micromark-util-normalize-identifier/dev/index.d.ts +21 -0
  465. package/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map +1 -0
  466. package/node_modules/micromark-util-normalize-identifier/dev/index.js +38 -0
  467. package/node_modules/micromark-util-normalize-identifier/index.d.ts +21 -0
  468. package/node_modules/micromark-util-normalize-identifier/index.d.ts.map +1 -0
  469. package/node_modules/micromark-util-normalize-identifier/index.js +33 -0
  470. package/node_modules/micromark-util-normalize-identifier/license +22 -0
  471. package/node_modules/micromark-util-normalize-identifier/package.json +58 -0
  472. package/node_modules/micromark-util-normalize-identifier/readme.md +187 -0
  473. package/node_modules/micromark-util-resolve-all/index.d.ts +22 -0
  474. package/node_modules/micromark-util-resolve-all/index.d.ts.map +1 -0
  475. package/node_modules/micromark-util-resolve-all/index.js +32 -0
  476. package/node_modules/micromark-util-resolve-all/license +22 -0
  477. package/node_modules/micromark-util-resolve-all/package.json +48 -0
  478. package/node_modules/micromark-util-resolve-all/readme.md +238 -0
  479. package/node_modules/micromark-util-sanitize-uri/dev/index.d.ts +36 -0
  480. package/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map +1 -0
  481. package/node_modules/micromark-util-sanitize-uri/dev/index.js +124 -0
  482. package/node_modules/micromark-util-sanitize-uri/index.d.ts +36 -0
  483. package/node_modules/micromark-util-sanitize-uri/index.d.ts.map +1 -0
  484. package/node_modules/micromark-util-sanitize-uri/index.js +107 -0
  485. package/node_modules/micromark-util-sanitize-uri/license +22 -0
  486. package/node_modules/micromark-util-sanitize-uri/package.json +59 -0
  487. package/node_modules/micromark-util-sanitize-uri/readme.md +214 -0
  488. package/node_modules/micromark-util-subtokenize/dev/index.d.ts +12 -0
  489. package/node_modules/micromark-util-subtokenize/dev/index.d.ts.map +1 -0
  490. package/node_modules/micromark-util-subtokenize/dev/index.js +284 -0
  491. package/node_modules/micromark-util-subtokenize/dev/lib/splice-buffer.d.ts +161 -0
  492. package/node_modules/micromark-util-subtokenize/dev/lib/splice-buffer.d.ts.map +1 -0
  493. package/node_modules/micromark-util-subtokenize/dev/lib/splice-buffer.js +288 -0
  494. package/node_modules/micromark-util-subtokenize/index.d.ts +12 -0
  495. package/node_modules/micromark-util-subtokenize/index.d.ts.map +1 -0
  496. package/node_modules/micromark-util-subtokenize/index.js +228 -0
  497. package/node_modules/micromark-util-subtokenize/lib/splice-buffer.d.ts +161 -0
  498. package/node_modules/micromark-util-subtokenize/lib/splice-buffer.d.ts.map +1 -0
  499. package/node_modules/micromark-util-subtokenize/lib/splice-buffer.js +251 -0
  500. package/node_modules/micromark-util-subtokenize/license +22 -0
  501. package/node_modules/micromark-util-subtokenize/package.json +60 -0
  502. package/node_modules/micromark-util-subtokenize/readme.md +181 -0
  503. package/node_modules/micromark-util-symbol/lib/codes.d.ts +139 -0
  504. package/node_modules/micromark-util-symbol/lib/codes.d.ts.map +1 -0
  505. package/node_modules/micromark-util-symbol/lib/codes.js +158 -0
  506. package/node_modules/micromark-util-symbol/lib/constants.d.ts +37 -0
  507. package/node_modules/micromark-util-symbol/lib/constants.d.ts.map +1 -0
  508. package/node_modules/micromark-util-symbol/lib/constants.js +44 -0
  509. package/node_modules/micromark-util-symbol/lib/default.d.ts +5 -0
  510. package/node_modules/micromark-util-symbol/lib/default.d.ts.map +1 -0
  511. package/node_modules/micromark-util-symbol/lib/default.js +4 -0
  512. package/node_modules/micromark-util-symbol/lib/types.d.ts +106 -0
  513. package/node_modules/micromark-util-symbol/lib/types.d.ts.map +1 -0
  514. package/node_modules/micromark-util-symbol/lib/types.js +453 -0
  515. package/node_modules/micromark-util-symbol/lib/values.d.ts +102 -0
  516. package/node_modules/micromark-util-symbol/lib/values.d.ts.map +1 -0
  517. package/node_modules/micromark-util-symbol/lib/values.js +109 -0
  518. package/node_modules/micromark-util-symbol/license +22 -0
  519. package/node_modules/micromark-util-symbol/package.json +43 -0
  520. package/node_modules/micromark-util-symbol/readme.md +168 -0
  521. package/node_modules/micromark-util-types/index.d.ts +1315 -0
  522. package/node_modules/micromark-util-types/index.js +2 -0
  523. package/node_modules/micromark-util-types/license +22 -0
  524. package/node_modules/micromark-util-types/package.json +37 -0
  525. package/node_modules/micromark-util-types/readme.md +151 -0
  526. package/node_modules/smol-toml/LICENSE +24 -0
  527. package/node_modules/smol-toml/README.md +605 -0
  528. package/node_modules/smol-toml/dist/date.d.ts +41 -0
  529. package/node_modules/smol-toml/dist/date.js +156 -0
  530. package/node_modules/smol-toml/dist/error.d.ts +37 -0
  531. package/node_modules/smol-toml/dist/error.js +67 -0
  532. package/node_modules/smol-toml/dist/extract.js +289 -0
  533. package/node_modules/smol-toml/dist/index.cjs +770 -0
  534. package/node_modules/smol-toml/dist/index.d.ts +44 -0
  535. package/node_modules/smol-toml/dist/index.js +34 -0
  536. package/node_modules/smol-toml/dist/parse.d.ts +73 -0
  537. package/node_modules/smol-toml/dist/parse.js +164 -0
  538. package/node_modules/smol-toml/dist/primitive.js +151 -0
  539. package/node_modules/smol-toml/dist/stringify.d.ts +32 -0
  540. package/node_modules/smol-toml/dist/stringify.js +219 -0
  541. package/node_modules/smol-toml/dist/struct.js +156 -0
  542. package/node_modules/smol-toml/dist/util.d.ts +43 -0
  543. package/node_modules/smol-toml/dist/util.js +57 -0
  544. package/node_modules/smol-toml/package.json +68 -0
  545. package/node_modules/unist-util-stringify-position/index.d.ts +1 -0
  546. package/node_modules/unist-util-stringify-position/index.js +1 -0
  547. package/node_modules/unist-util-stringify-position/lib/index.d.ts +61 -0
  548. package/node_modules/unist-util-stringify-position/lib/index.js +84 -0
  549. package/node_modules/unist-util-stringify-position/license +22 -0
  550. package/node_modules/unist-util-stringify-position/package.json +80 -0
  551. package/node_modules/unist-util-stringify-position/readme.md +206 -0
  552. package/package.json +27 -8
  553. package/scripts/prepare-github-keyring.js +29 -0
  554. package/src/codex-app.js +20 -2
  555. package/src/codex-pricing.js +79 -0
  556. package/src/codex-projects.js +90 -0
  557. package/src/codex-session-scanner.js +748 -0
  558. package/src/codex-session-usage.js +332 -0
  559. package/src/dashboard/app.js +2 -2
  560. package/src/dashboard/dist/app.js +135 -60
  561. package/src/dashboard/dist/app.js.map +1 -1
  562. package/src/dashboard/dist/styles.css +1 -1
  563. package/src/dashboard/react/components/AnimatedUsage.test.tsx +78 -0
  564. package/src/dashboard/react/components/CardStatusIcons.test.tsx +146 -0
  565. package/src/dashboard/react/components/CardStatusIcons.tsx +138 -0
  566. package/src/dashboard/react/components/ImageGallery.tsx +22 -0
  567. package/src/dashboard/react/components/ModelSettings.test.tsx +4 -4
  568. package/src/dashboard/react/components/ModelSettings.tsx +1 -1
  569. package/src/dashboard/react/components/OpenChatButton.test.tsx +19 -0
  570. package/src/dashboard/react/components/OpenChatButton.tsx +2 -1
  571. package/src/dashboard/react/components/PrGlyph.tsx +35 -0
  572. package/src/dashboard/react/components/PullRequestBadges.tsx +18 -0
  573. package/src/dashboard/react/components/QueuedPrompts.test.tsx +42 -0
  574. package/src/dashboard/react/components/QueuedPrompts.tsx +34 -0
  575. package/src/dashboard/react/components/RelativeTime.test.tsx +100 -0
  576. package/src/dashboard/react/components/RelativeTime.tsx +46 -11
  577. package/src/dashboard/react/components/ReplyCover.test.tsx +30 -0
  578. package/src/dashboard/react/components/ReplyCover.tsx +33 -0
  579. package/src/dashboard/react/components/ReplyImagePreview.test.tsx +90 -0
  580. package/src/dashboard/react/components/ReplyImagePreview.tsx +34 -0
  581. package/src/dashboard/react/components/ReplyMarkdown.test.tsx +108 -0
  582. package/src/dashboard/react/components/ReplyMarkdown.tsx +112 -0
  583. package/src/dashboard/react/components/SavedUsageFormat.test.tsx +11 -0
  584. package/src/dashboard/react/components/SavedUsageFormat.tsx +68 -0
  585. package/src/dashboard/react/components/StatusBadge.tsx +2 -2
  586. package/src/dashboard/react/components/TaskBoard.test.tsx +256 -1
  587. package/src/dashboard/react/components/TaskBoard.tsx +136 -28
  588. package/src/dashboard/react/components/TaskCard.tsx +7 -4
  589. package/src/dashboard/react/components/TaskDetail.test.tsx +92 -1
  590. package/src/dashboard/react/components/TaskDetail.tsx +37 -10
  591. package/src/dashboard/react/components/TurnContent.test.tsx +44 -0
  592. package/src/dashboard/react/components/TurnContent.tsx +53 -0
  593. package/src/dashboard/react/components/UsagePanel.tsx +2 -2
  594. package/src/dashboard/react/image-cache.test.ts +23 -0
  595. package/src/dashboard/react/image-cache.ts +33 -0
  596. package/src/dashboard/react/presentation.test.tsx +31 -0
  597. package/src/dashboard/react/styles.css +126 -2
  598. package/src/dashboard/react/types.ts +55 -1
  599. package/src/dashboard/time.js +39 -0
  600. package/src/dashboard.js +4 -3
  601. package/src/data/codex-pricing.json +537 -0
  602. package/src/mcp-app/dist/index.html +216 -112
  603. package/src/mcp-app/react/AppearancePicker.test.tsx +50 -0
  604. package/src/mcp-app/react/AppearancePicker.tsx +56 -0
  605. package/src/mcp-app/react/GitHubConnection.test.tsx +78 -0
  606. package/src/mcp-app/react/GitHubConnection.tsx +78 -0
  607. package/src/mcp-app/react/NextNotificationCenter.test.tsx +121 -0
  608. package/src/mcp-app/react/NextNotificationCenter.tsx +94 -0
  609. package/src/mcp-app/react/NextTaskDetail.test.tsx +124 -0
  610. package/src/mcp-app/react/NextTaskDetail.tsx +147 -0
  611. package/src/mcp-app/react/ProjectPicker.tsx +49 -0
  612. package/src/mcp-app/react/main.test.tsx +499 -49
  613. package/src/mcp-app/react/main.tsx +359 -86
  614. package/src/mcp-app/react/styles.css +186 -9
  615. package/src/mcp-app/react/themes.test.ts +34 -0
  616. package/src/mcp-app/react/themes.ts +112 -0
  617. package/src/mcp-app.js +238 -120
  618. package/src/mcp.js +8 -1
  619. package/src/next-cache.js +16 -0
  620. package/src/next-github.js +273 -0
  621. package/src/next-notifications.js +90 -0
  622. package/src/recorded-usage-tracker.js +92 -0
  623. package/src/reply-image.js +65 -0
  624. package/src/usage-tracker.js +7 -6
  625. package/src/usage.js +7 -355
  626. package/src/user-prompt.js +55 -0
  627. package/src/version.js +2 -1
  628. package/node_modules/proper-lockfile/CHANGELOG.md +0 -108
  629. package/node_modules/which/CHANGELOG.md +0 -166
  630. package/src/resolve-ccusage.js +0 -17
package/docs/spec.md CHANGED
@@ -159,75 +159,30 @@ without backup payload contents.
159
159
 
160
160
  ## Optional usage projection
161
161
 
162
- TaskChef MUST pin one tested `ccusage` version as an optional dependency. It
163
- MUST prefer that package-local executable and MAY use an exact-version,
164
- cache-friendly `npx` invocation when a plugin-only installation has no local
165
- dependency. The `npx` invocation MUST only resolve the pinned native executable
166
- and MUST NOT launch the analyzer against Codex data. TaskChef MUST execute that
167
- native binary directly. The adapter MUST first request structured Codex output
168
- with live-capable online pricing and retry with ccusage's bundled offline
169
- pricing after a bounded failure. TaskChef MUST NOT parse, store, or serve raw
170
- Codex rollout files, prompts, responses, transcripts, or reasoning. Analyzer,
171
- npm, network, timeout, malformed output, unknown pricing, or an unresolved
172
- thread MUST NOT block lifecycle tools or dashboard loading.
173
-
174
- Dashboard-manual turns are administrative events, not Codex executions. They
175
- MUST immediately report per-turn usage as unavailable, MUST NOT schedule or
176
- store a cumulative usage boundary, and MUST NOT receive a token or cost delta.
177
- A later executor turn MUST use the nearest preceding reliable executor
178
- boundary, skipping any intervening dashboard-manual turns.
179
-
180
- The mode-0600 `.taskchef-usage.json` schema 2 cache stores only normalized cumulative
181
- token boundaries, per-turn deltas, model names, estimated cost, source version,
182
- and freshness. It is independent of task-log schema versions so legacy logs remain
183
- readable. Schema 1 usage caches MUST migrate in memory by discarding their
184
- TaskChef-specific cost-coverage classification while preserving valid ccusage
185
- cumulative estimates. Writes MUST use the workspace lock and atomic replacement. Symlinked
186
- or unsupported cache files MUST be rejected. Writes MUST compact the derived
187
- cache to recent task projections, recent per-turn results, and the latest
188
- cumulative boundary. An oversized legacy cache MUST be treated as rebuildable
189
- derived data so it cannot permanently disable usage reporting.
190
-
191
- A linked Codex thread MAY map to multiple ccusage session segments. TaskChef
192
- MUST aggregate only records whose primary durable thread UUID is that exact
193
- identity; a UUID appearing only as a nested suffix MUST NOT be attributed to
194
- the parent or child TaskChef task. It MUST retain input, cached-input, output,
195
- reasoning-output, and total fields without adding cached or reasoning subsets
196
- into totals a second time.
197
-
198
- After a terminal report, TaskChef MUST mark the turn `calculating` and perform
199
- bounded deferred reconciliation without delaying the lifecycle response.
200
- The dashboard MUST also preload eligible derived usage in its existing service
201
- lifecycle without requiring a task-detail request. Startup, task-log changes,
202
- and periodic recovery passes MUST consider missing, interrupted, and
203
- cooldown-expired records; successful current-generation records MUST remain
204
- cached. Background work MUST be deduplicated, MUST enforce a small global
205
- concurrency limit, MUST use bounded delayed retries, and MUST stop when the
206
- dashboard closes.
207
- Per-turn usage MUST be a non-negative delta between adjacent reliable cumulative
208
- boundaries. A first recorded turn MAY use zero as its baseline. Historical
209
- turns without boundaries and decreasing or ambiguous snapshots MUST be labeled
210
- `unavailable`, never zero or estimated. A historical task MAY still show its
211
- resolvable cumulative total. A boundary is reliable only after two consecutive
212
- samples agree. Exhausted unstable sampling and a newer turn beginning before
213
- stabilization MUST leave that turn unavailable and MUST NOT establish a delta
214
- baseline. Zero is valid for the first turn only when TaskChef observed that turn
215
- in progress before its terminal report; a first historical terminal turn MUST
216
- remain unavailable even when its cumulative task total is resolvable.
217
-
218
- Every available projection MUST identify ccusage, its version when available,
219
- the requested online or fallback offline pricing mode, and usage freshness.
220
- The online mode records TaskChef's request, not a claim about ccusage's internal
221
- cache. Dollar values MUST be labeled API-equivalent estimates. Positive token
222
- usage with a zero or missing analyzer cost MUST display cost unavailable, not
223
- `$0.00`. A per-turn dollar delta MUST be unavailable when its adjacent
224
- cumulative boundaries use different analyzer versions or requested pricing
225
- modes. When ccusage supplies a valid cumulative estimate, TaskChef MUST display
226
- it without applying its own model-family or cache-write coverage policy. A model
227
- family change between otherwise compatible boundaries MUST NOT prevent TaskChef
228
- from deriving the per-turn estimate.
229
- The dashboard Settings response MUST report the provider version returned by
230
- the executable resolved for runtime use, not merely copy the dependency pin.
162
+ TaskChef MUST use its own saved-record accounting engine for the board and web
163
+ dashboard. Usage requires Node.js 22.18+ and readable local Codex records.
164
+ Unavailable usage MUST NOT block lifecycle tools or dashboard loading.
165
+
166
+ Per-turn usage MUST match the native Codex turn ID. A dispatcher turn without
167
+ that match MUST show unavailable turn usage, while its chat total MAY remain
168
+ available. Administrative dashboard turns MUST NOT receive execution usage.
169
+ Historical tasks MUST remain lazy; opening Details reads their usage. Requests
170
+ MUST be deduplicated and bounded, and queued work MUST stop on dashboard close.
171
+
172
+ The engine MUST include descendant usage once, preserve input, cached input,
173
+ output, reasoning, and total categories, and avoid counting cached input or
174
+ reasoning subsets twice. Missing logs or parent-turn links MUST mark known
175
+ subtotals incomplete. Dollar values MUST be API-equivalent estimates using
176
+ known model prices. Unknown model prices MUST NOT imply a zero-dollar cost.
177
+
178
+ Board accounting caches MUST live under the TaskChef state directory's `cache/`
179
+ folder. The web dashboard MUST retain normalized usage in the mode-0600
180
+ `.taskchef-usage.json` cache. Writes MUST use the workspace lock and atomic
181
+ replacement. Existing schema-2 projections from the previous provider MUST
182
+ remain readable. Cache files MUST contain accounting data and source metadata,
183
+ not prompts, replies, or reasoning text. Source changes MUST invalidate derived
184
+ accounting results. Cache errors MUST allow source accounting to continue.
185
+ The dashboard Settings response MUST identify TaskChef and its package version.
231
186
 
232
187
  Task IDs and non-null thread identities MUST be unique. The immutable intent
233
188
  fields MUST NOT change after recording.
@@ -0,0 +1,206 @@
1
+ # GitHub PR status in TaskChef
2
+
3
+ TaskChef reads PR attachments from `state_5.sqlite:thread_attachments`.
4
+ Only records with `attachment_type = pull_request` count. The `payload.url`
5
+ identifies the PR. A transcript link alone does not establish PR ownership. The card uses only registered PRs referenced in the latest prompt/reply or successfully attached by a saved `codex_app.attach_artifact` call in that turn. Older chat attachments do not decide the latest turn's state.
6
+ Older Codex databases without this table show no PR attachments.
7
+
8
+ ## Connect GitHub
9
+
10
+ 1. In plugin settings, select **GitHub → Connect GitHub**, then **Sign in with GitHub**. The Done column also links to these connection controls when signed out.
11
+ 2. Enter the displayed code on GitHub and approve access.
12
+ 3. Install the GitHub App on the accounts and repositories you want to read.
13
+ **Repository access** opens GitHub's installation settings.
14
+
15
+ TaskChef includes its registered GitHub App client ID. Once connected, the native settings action becomes **Manage GitHub**. Existing local client-ID overrides remain internal; the public settings page has no client-ID field. The device code, access token, and refresh
16
+ token stay in the local MCP server's system credential store. They never go to
17
+ the sidebar, ordinary JSON files, shell arguments, or a TaskChef hosted server.
18
+ On macOS this is Keychain; Windows uses Credential Manager; Linux requires
19
+ Secret Service. Release packaging includes credential-store bindings for macOS and Windows on
20
+ ARM64/x64, and Linux on ARM64/x64 with glibc or musl. There is no plaintext fallback. A locked or unavailable store
21
+ shows an error. GitHub's own approval and repository-selection pages control
22
+ access. Organizations may require administrator approval.
23
+
24
+ **Disconnect this computer** removes the local credential and clears the
25
+ process's PR cache. It does not revoke the GitHub grant. Revoke that separately
26
+ in GitHub's authorized-app settings if desired.
27
+
28
+ ## Register the app
29
+
30
+ Register a GitHub App, enable **Device flow**, and keep expiring user access
31
+ tokens enabled. Disable webhooks. Request these repository permissions:
32
+
33
+ | Permission | Access | Purpose |
34
+ | --- | --- | --- |
35
+ | Pull requests | Read-only | Open, draft, closed, and merged PRs |
36
+ | Checks | Read-only | CI check results |
37
+ | Commit statuses | Read-only | Older CI status results |
38
+ | Metadata | Read-only | Required by GitHub |
39
+
40
+ Use the project repository as the homepage. Device flow needs no callback
41
+ server, private key, or client secret. GitHub requires the app to be installed
42
+ for private repository access. Choose **Any account** if distributing it to
43
+ other users. Registration does not itself give the app access to repositories.
44
+
45
+ The preview supports GitHub.com only. Enterprise hosts show an unavailable
46
+ status. Do not enter an OAuth App ID or a personal access token in the setting.
47
+
48
+ ## Board rules
49
+
50
+ Archived chats go to the optional Archived column before these rules apply.
51
+ Chats with no saved turn are hidden. Running always takes priority over Done marks.
52
+
53
+ ### With an active schedule
54
+
55
+ | Latest turn | Result | Column |
56
+ | --- | --- | --- |
57
+ | Either input source | In progress | Running |
58
+ | Either input source | Failed or interrupted | Waiting, with Interrupted tag |
59
+ | Scheduled prompt | Completed, with any PR state or no PR | Scheduled |
60
+ | Human prompt | Completed; all latest-turn PRs merged | Scheduled |
61
+ | Human prompt | Completed; unmerged/unknown PR or no PR | Waiting for input/review |
62
+
63
+ A saved heartbeat marker identifies a scheduled prompt. If input source cannot
64
+ be verified, use the human-input rules. Any active schedule keeps the chat
65
+ scheduled, even when the schedule that started the latest turn is now paused.
66
+ Manual Done is disabled until all schedules are paused.
67
+
68
+ ### Without an active schedule
69
+
70
+ | Latest turn / user action | Column |
71
+ | --- | --- |
72
+ | In progress | Running |
73
+ | Marked Done for this turn, with no latest-turn PR | Done |
74
+ | Failed or interrupted, without a Done mark | Waiting, with Interrupted tag |
75
+ | Completed; all latest-turn PRs merged | Done |
76
+ | Completed; any unmerged or unknown latest-turn PR | Waiting for input/review |
77
+ | Completed; no latest-turn PR and no Done mark | Waiting for input/review |
78
+ | Unrecognized saved turn status | Unverified, within Waiting |
79
+
80
+ A new turn resets a manual Done mark. Passing CI does not guarantee merge
81
+ approval or that every branch-protection requirement is met. A closed PR
82
+ without merge remains Waiting for a human.
83
+
84
+ Cards show compact PR icons beside their time. Local SVG drawings match the
85
+ Codex branch layout: a curved merged branch, a plus on the plain open icon,
86
+ and colored status dots in place of the lower-right node. Cards and popup
87
+ rows use the same glyphs. The whole status line shares
88
+ one popup on hover or focus. It shows work duration, each linked PR title with
89
+ its number first, turn usage, and the next scheduled run, each on a separate
90
+ line with an icon. PR titles stay on one line and use an ellipsis. CI state is
91
+ represented by the PR icon; the popup has no separate CI row. Subagent count
92
+ appears only in Details. Missing information is omitted. Mergeability and check
93
+ time are not shown.
94
+ Unknown PR status uses a neutral icon without an Unavailable label on the card.
95
+ Repository access failures add a warning icon and a Grant access link to the
96
+ TaskChef GitHub App installation page. Confirmed permission errors say Access
97
+ denied; GitHub NOT_FOUND responses say Cannot access because they can also
98
+ mean the repository or PR was removed. Network and rate-limit errors do not
99
+ claim a permission failure. Valid PR state remains visible if CI access fails.
100
+ Tab moves from the status line to its PR link; Escape closes the popup.
101
+
102
+ ![Shared card status popup](images/taskchef-unified-status-popup.jpg)
103
+
104
+ ![PR icon shape comparison](images/taskchef-pr-icon-comparison.jpg)
105
+
106
+ ## Codex sidebar icon research
107
+
108
+ OpenAI's changelog confirms draft, open, merged, and closed PR badges. It does
109
+ not publish a color legend. The table below comes from read-only inspection of
110
+ the installed desktop application's compiled `webview/assets/app-initial` bundle
111
+ on 10 October 2026. It is an implementation observation, not a documented API.
112
+
113
+ | Appearance | Installed Codex rule |
114
+ | --- | --- |
115
+ | Dashed PR icon | Draft |
116
+ | Purple merge icon | Merged |
117
+ | Red closed icon | Closed without merge |
118
+ | PR with red dot | Merge conflicts or failing CI |
119
+ | PR with green dot | Passing CI or `canMerge = true` |
120
+ | PR with yellow dot | Other open PR state (`in_progress`) |
121
+
122
+ The implementation selects `successful` when CI passes but `canMerge` is false,
123
+ and `ready` when `canMerge` is true. Both use the same green dot. Yellow does
124
+ not specifically mean no CI, and green alone does not prove merge readiness.
125
+ TaskChef reads PR state, title, draft state, head revision, merge conflicts,
126
+ merge state, and the latest commit's combined check status. It treats CLEAN or
127
+ HAS_HOOKS with MERGEABLE as ready to merge. The icon distinguishes Checks
128
+ passed from Ready to merge; the shared popup uses the same state icon. GitHub can report an unknown merge state briefly;
129
+ TaskChef checks that state again while the card is visible.
130
+
131
+ ## Refresh and failure behavior
132
+
133
+ The board still polls its local MCP server every five seconds while visible.
134
+ GitHub checks use the board's project and time filters. The default time filter is
135
+ All time. Only rendered cards that intersect the visible viewport start requests.
136
+ Opening the board first reads local records without GitHub requests. Card visibility
137
+ then schedules a check after a 250 ms debounce. Scrolling, searching, filtering,
138
+ and loading more cards update this set. Offscreen cards do not start requests.
139
+ Opening one chat's Details checks that chat on demand. New chats follow the same
140
+ rule when their latest turn has an owned PR.
141
+
142
+ PR results are saved in `cache/github-prs.json` beside TaskChef settings,
143
+ with restricted file permissions. This file contains no tokens. A shared local
144
+ lock protects reads and writes across MCP processes. Results are tied to the
145
+ GitHub account and client ID; disconnect and sign-in clear them.
146
+
147
+ Settled results have no short expiry. A new turn, a changed turn state, a new
148
+ PR, or manual Refresh triggers a board check. Details fetches only PRs with no saved result. Pending or unknown CI, an unknown
149
+ merge state on an open or draft PR, and failed checks of GitHub availability retry after 60 seconds
150
+ while the card is visible. Offscreen cards do not trigger these retries.
151
+ Passing or failed CI stays cached until another trigger. A merge made on GitHub
152
+ after a settled result is saved needs Refresh to be detected.
153
+
154
+ Queries combine up to 25 PRs per request. Hidden CLI/exec chats and archived
155
+ history do not start requests. Opening, reopening, and automatic Details polling do not force a check. Historical results have no expiry; explicit Refresh also updates the open detail’s PRs.
156
+ Rate limits still apply to explicit refreshes. A malformed or unwritable cache
157
+ reports an error instead of silently fetching the entire board.
158
+
159
+ Without GitHub sign-in, automatic Done from PR merge cannot be verified. Manual
160
+ Done for chats with no latest-turn PR still works. The Done column shows a
161
+ Connect GitHub link until sign-in succeeds.
162
+
163
+ GitHub receives repository names and PR numbers only, plus its authentication
164
+ token. Task titles, prompts, replies, and local paths are not included.
165
+
166
+ Unavailable status never counts as merged. A failed refresh replaces the cached
167
+ status with Unavailable. Codex database failures remain fatal to the board;
168
+ GitHub failures are shown in the connection dialog and PR badges.
169
+
170
+ Device sign-in polls only while its dialog is open and visible. It follows
171
+ GitHub's polling interval and slows down when requested. Pending sign-in is
172
+ stored in the credential store so another local MCP process can continue it.
173
+ Refresh tokens are rotated under a local lock shared by MCP processes.
174
+
175
+ ## References
176
+
177
+ - [GitHub App device flow](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app)
178
+ - [Refresh user tokens without a device-flow client secret](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/refreshing-user-access-tokens)
179
+ - [GitHub App permissions](https://docs.github.com/en/rest/authentication/permissions-required-for-github-apps)
180
+
181
+ - [OpenAI changelog: PR status badges](https://learn.chatgpt.com/docs/changelog)
182
+
183
+ ## Schedule clock
184
+
185
+ An active schedule appears as a clock before the PR icons, rather than text.
186
+ The shared status popup uses the desktop scheduler's `automations` table in
187
+ `sqlite/codex-dev.db`. When `next_run_at` is set, TaskChef shows
188
+ `next_run_nominal_at` if present, otherwise `next_run_at`. It uses the earliest
189
+ known time across active schedules for that chat. Reads are short and read-only.
190
+ Missing next-run metadata does not change the schedule flag or guess a time;
191
+ the popup omits the next-run line.
192
+
193
+ ## Private repository CI reads
194
+
195
+ PR state and merge metadata use GraphQL. CI uses the head revision with the
196
+ REST check-runs and combined commit-status endpoints. These endpoints use the
197
+ app's existing read-only Checks and Commit statuses permissions. Reading a
198
+ GraphQL commit object can require Contents access on private repositories;
199
+ TaskChef does not request Contents access. A CI error keeps the independently
200
+ returned PR state. Empty legacy status lists do not count as pending CI.
201
+ If more than 100 latest check runs are returned, TaskChef keeps CI unknown
202
+ instead of claiming success from an incomplete page.
203
+
204
+ ### Earlier-turn PR on cards
205
+
206
+ Card placement uses only the latest turn’s owned PRs. When that turn has no PR, a visible card can display the most recently mentioned owned PR from an earlier turn in the selected rollout. The status popup labels it **Earlier turn PR**. This display fallback never moves a chat to Done or restricts manual Done. History lookup is lazy and cached until the database records change; GitHub status uses the existing scoped cache. Details retains its full PR list.
@@ -0,0 +1,102 @@
1
+ # TaskChef Next status research
2
+
3
+ > Research note, not a product contract. See [the specification](spec.md) for
4
+ > current TaskChef behavior and [the sidebar guide](mcp-app.md) for the current
5
+ > TaskChef Next implementation.
6
+
7
+ ## Local data and proposed labels
8
+
9
+ TaskChef Next can read chat metadata from `state_5.sqlite:threads` and the
10
+ latest turn from `thread_history_1.sqlite:thread_turns`. A turn's `completed`
11
+ status means Codex ended that turn. It does not say whether the user's larger
12
+ task is finished or whether the assistant asked for input. The sidebar now applies the workflow rules described in [the sidebar guide](mcp-app.md).
13
+
14
+ The proposed board labels are workflow rules, not semantic judgments:
15
+
16
+ | Label | Proposed rule |
17
+ | --- | --- |
18
+ | Running | Open chat; latest selected turn is `inProgress`, regardless of timestamp age. |
19
+ | Waiting for input/review | Open chat; latest turn is `completed`. This includes ordinary idle chats, even when no question or review was requested. |
20
+ | Done | User marks a chat without PRs done, or its latest turn completed and all attached PRs are confirmed merged. Both require no active schedule. A new turn clears a manual Done mark. |
21
+ | Archived | Chat is archived. Hidden by default and shown in a separate column when enabled. |
22
+ | Interrupted | Open chat; latest turn is `interrupted` or `failed`. Show the recorded error when available. |
23
+
24
+ These labels describe the **board queue**, not verified task outcomes. Waiting
25
+ means the chat is open and Codex is idle; it does not prove that Codex requested
26
+ input or review. Done means a manual mark for a chat without PRs, or confirmed merged status for all attached PRs.
27
+ Archived is separate; archiving does not prove that the underlying work succeeded.
28
+ The GitHub integration uses merged PRs for Scheduled when a schedule is active, otherwise Done, and unmerged or unavailable PRs
29
+ for Waiting after a completed turn. Real sign-in needs a registered GitHub App.
30
+
31
+ The archive flag takes precedence over an old turn status. The earlier proposal
32
+ used a two-minute activity cutoff for Running. That proposal is superseded:
33
+ the sidebar follows the latest selected turn status and does not infer a stop
34
+ from timestamp age. Unrecognized turn states remain Unverified. Chats with no
35
+ turn row are omitted. The sidebar excludes JSON subagent sources in
36
+ `threads.source` and includes all eligible chats with a current-rollout turn.
37
+
38
+ Counts from all unarchived database rows are not counts of current work. The
39
+ optional Updated filter narrows the view; it does not change queue labels.
40
+
41
+ ## Scheduled work
42
+
43
+ An active schedule is a flag on a chat, alongside its current workflow label.
44
+ The board has a Scheduled column for idle scheduled turns. Running and
45
+ Interrupted take precedence; ordinary completed input returns to Waiting while
46
+ the schedule badge remains.
47
+
48
+ Local heartbeat configurations have `target_thread_id` and `status`. The latest
49
+ turn points through `first_user_item_id` to `thread_items.item_json`. Observed
50
+ heartbeat inputs contain a `<heartbeat>` wrapper with an `automation_id` and
51
+ have no `clientId`; ordinary desktop inputs have a `clientId`. The sidebar
52
+ matches the wrapper to a known automation on that chat rather than matching
53
+ execution time. This is an observed internal format, not a supported stable API.
54
+ It does not infer scheduled origin from a missing `clientId` alone. Paused
55
+ schedules do not place idle chats in Scheduled. Cron runs are distinct from
56
+ heartbeat chats and are not linked by this rule.
57
+
58
+ ## Optional model judgment
59
+
60
+ A local Codex app-server client can reuse the desktop user's saved Codex login.
61
+ The experiment used `gpt-6-luna` with reasoning effort `none`: it started an
62
+ ephemeral, read-only app-server thread and sent a `turn/start` request with an
63
+ `outputSchema` requiring `state`, `confidence`, `evidence`, and `reason`. The
64
+ `state` values were `done`, `needs_input`, and `unknown`. The request included
65
+ real chat messages selected from `thread_history_1.sqlite:thread_items` and
66
+ received a schema-conforming JSON decision without an `OPENAI_API_KEY`. This
67
+ proves the route is possible, not that its judgments are accurate. The
68
+ app-server adds substantial context and latency, and the experiment did not
69
+ establish accuracy
70
+ across different chat types. Keep this as an optional enrichment route; it is
71
+ not needed to compute the proposed workflow labels. A separate Jev experiment
72
+ also returned a typed decision, but it needs separate TypeSafe credentials.
73
+
74
+ If semantic judgment is later added, compare it with independent human labels
75
+ and retain the evidence used for each decision. Do not silently convert a
76
+ model's guess into a database fact.
77
+
78
+ ## Cloud and GitHub prerequisites
79
+
80
+ The local scanner does not contain durable-host cloud chats. A read-only test
81
+ of `codex cloud list --json --limit 20` returned an empty task list, while the
82
+ desktop thread tools had returned five durable-host chats. This does not prove
83
+ that all cloud accounts behave the same way. It does show that this command
84
+ cannot supply the missing chats in the tested account. Do not replace the
85
+ missing cloud list with an empty list presented as complete. A supported
86
+ code-driven source for these desktop cloud chats is still needed.
87
+
88
+ The current Codex database has `state_5.sqlite:thread_attachments`. Records with
89
+ `attachment_type=pull_request` provide the attached PR URL in `payload.url`.
90
+ This corrects the earlier schema scan. Transcript links are not attachments.
91
+
92
+ TaskChef includes its registered GitHub App public client ID with device flow
93
+ enabled. Users connect through the native GitHub settings action.
94
+ TaskChef uses read-only Pull requests, Checks, and Commit statuses permissions.
95
+ Access and refresh tokens stay in the local OS credential store; the sidebar
96
+ receives no tokens. There is no client secret, private key, or developer CLI
97
+ credential in the product flow.
98
+
99
+ After a completed turn, a nonempty attachment list with every PR confirmed merged
100
+ means Done. Open, draft, closed without merge, and unavailable PRs stay Waiting.
101
+ Running, Interrupted, and Archived retain their rules. Manual Done applies only
102
+ without PR attachments. See [setup, polling and validation limits](taskchef-next-github.md).
@@ -0,0 +1,167 @@
1
+ # TaskChef: Codex storage
2
+
3
+ [Edit the storage diagram](diagrams/taskchef-next-storage.drawio) · [Storage PNG](diagrams/taskchef-next-storage.drawio.png)
4
+
5
+ [Edit the reply lookup example](diagrams/taskchef-next-reply-lookup.drawio) · [Lookup PNG](diagrams/taskchef-next-reply-lookup.drawio.png)
6
+
7
+ ![Files and their tables](diagrams/taskchef-next-storage.drawio.png)
8
+
9
+ The storage diagram groups tables inside their database files. The separate example below shows current-reply lookup. Selected fields only; these internal schemas can change.
10
+
11
+ ![Current reply lookup after a revert](diagrams/taskchef-next-reply-lookup.drawio.png)
12
+
13
+ ## One chat, two possible IDs
14
+
15
+ Suppose chat **C** has a turn **T**:
16
+
17
+ | Store | Ordinary history | After Codex selects a new rollout R |
18
+ | --- | --- | --- |
19
+ | `state_5.sqlite` → `threads.id` | C | C: the chat ID stays the same |
20
+ | `threads.rollout_path` | `rollout-<timestamp>-C.jsonl` | `rollout-<timestamp>-C_R.jsonl` |
21
+ | `thread_history_1.sqlite` → `thread_turns.thread_id` | C | R: use the ID after the underscore |
22
+ | `thread_turns.turn_id` | T | The latest turn in R |
23
+ | `thread_items.thread_id` | C | R |
24
+ | JSONL → `session_meta.payload.id` | C | C: this is still the chat ID |
25
+
26
+ The filename examples use C and R as short labels. Real filenames contain UUIDs. `.jsonl.zst` uses the same ID rule. Codex's [rollout filename resolver](https://github.com/openai/codex/blob/main/codex-rs/rollout/src/metadata.rs) describes the separate ID after a revert. For paginated history, an unrecognized selected filename is an error. Legacy history supports noncanonical filenames with a stable chat-ID lookup. Old turn rows may remain under C. They belong to earlier history and must not replace the selected rollout's current turn.
27
+
28
+ TaskChef reads the filename from SQLite. It does not open the log to determine this lookup ID. Schedules, subagent links, navigation, and local Done marks continue to use the stable chat ID.
29
+
30
+ ## Main tables and records
31
+
32
+ | File | Table or record | Example and use |
33
+ | --- | --- | --- |
34
+ | `state_5.sqlite` | `threads` | Chat C, name “Fix login”, project, archived flag, selected rollout path. Also holds model, reasoning effort, token total, pin and project metadata. |
35
+ | `state_5.sqlite` | `thread_spawn_edges` | Parent C → child D. Exclude D from the board; count it on C. |
36
+ | `thread_history_1.sqlite` | `thread_turns` | Rollout R, turn T, `status = completed`, duration and start/end times. This means the turn ended; the task may still need input or review. |
37
+ | `thread_history_1.sqlite` | `thread_items` | `(R, T, item I)` with `item_type = userMessage`, `agentMessage`, `commandExecution`, `mcpToolCall`, or `fileChange`. `item_json` contains the saved item body. The board reads the latest turn's first input to identify a heartbeat. It also reads the linked final reply, or the latest saved agent message in that turn when no final reply is linked. It never uses a previous turn as the current reply. Card excerpts contain at most 2,000 characters; the UI displays two lines. |
38
+ | `thread_history_1.sqlite` | `thread_history_projection_state` | R with the next byte offset and record ordinal. Tracks how far the saved history has been projected into SQLite. The board does not use it. |
39
+ | Rollout `.jsonl` | One JSON record per line | `type = session_meta`, `event_msg`, `response_item`, etc. The inner `payload.type` gives the event or response kind, such as `task_started` or `task_complete`. There are no SQL tables in this file. |
40
+
41
+ The optional log reader adds bounded message counts for one selected chat. It never supplies board status when SQLite fails.
42
+
43
+ ## Other observed tables
44
+
45
+ The board does not query these tables. This list records table names seen during the local schema check; it is not a supported schema contract.
46
+
47
+ | Database | Other tables |
48
+ | --- | --- |
49
+ | `state_5.sqlite` | `_sqlx_migrations`, `thread_dynamic_tools`, `backfill_state`, `remote_control_enrollments`, `external_agent_config_imports`, `thread_sections`, `rollout_migration_state`, `rollout_migration_skipped_rollouts`, `projects`, `project_roots`, `project_idempotency_keys`, `thread_attachments` |
50
+ | `thread_history_1.sqlite` | `_sqlx_migrations`, `thread_realtime_items` |
51
+
52
+ TaskChef also reads heartbeat links from `automations/*/automation.toml`. Manual Done marks are saved in TaskChef's separate state file. Neither source modifies Codex's databases.
53
+
54
+ ## Project picker sorting
55
+
56
+ The button beside Search projects cycles Most recent → A–Z → Z–A. Most recent is the default each time the view mounts. It uses the latest chat update time per project among chats allowed by the source and archive settings. Projects without matching chats follow those with activity, ordered by name. All projects stays first and No project stays last. Sorting preserves the search and selected project.
57
+
58
+
59
+ ## Detail timing and PR cache
60
+
61
+ Details shows the latest turn’s duration and the sum of saved finished-turn
62
+ `duration_ms` values for the selected history ID. For a running turn, the UI adds
63
+ its elapsed time once. Idle time and child chats are excluded. The tooltip reports
64
+ finished turns whose duration is missing. Earlier rollout histories are not added;
65
+ after a rewind, this is recorded time for the selected history, not a lifetime total.
66
+ The aggregate is cached until either database changes.
67
+
68
+ Historical PR results use the existing disk cache. Opening Details fetches only
69
+ URLs with no saved result; it does not expire those results or invalidate them when
70
+ a different turn starts. Refresh explicitly checks the open detail’s PRs again.
71
+ The board still checks newly referenced PRs and retries pending or unknown current
72
+ PR states while their cards are visible. Disconnecting or changing the GitHub
73
+ account clears its cached results. Local history links are cached per database
74
+ snapshot and rebuilt when the database changes.
75
+
76
+ ## Saved work time and usage
77
+
78
+ Visible board cards and Details read accounting events from the chat's saved rollouts and all
79
+ nested subagent chats found through `thread_spawn_edges`. Board inventory and
80
+ turn state still come from the databases. A database query failure remains fatal.
81
+ Optional accounting errors are shown as partial data.
82
+
83
+ The reader discovers older rollouts under `sessions` and `archived_sessions`.
84
+ It includes plain JSONL and zstd-compressed JSONL files. It checks this file
85
+ inventory at most once per minute while usage is requested.
86
+ It caches compact accounting records in the MCP process. Unchanged files are
87
+ not read again. Appended files are read from the last complete line; replaced
88
+ or truncated files are read again. Changed compressed files are decoded again;
89
+ unchanged compressed files use the same cache. A runtime without zstd support
90
+ marks compressed histories partial. Concurrent views share this reader.
91
+
92
+ Computed accounting results are saved under TaskChef's state directory in
93
+ `cache/usage/`, with one hashed file per chat and duration-view variant. Files
94
+ contain accounting totals and source metadata, not prompts or replies. Private
95
+ file permissions and atomic writes protect the local cache. Before reusing it,
96
+ the reader checks the latest turn ID, linked descendants, rollout metadata,
97
+ duration fallbacks, and pricing table. A new turn invalidates the old result;
98
+ appended logs also invalidate it while a turn runs. An unchanged result survives
99
+ an MCP restart without parsing the logs again. Damaged caches are rebuilt, and
100
+ cache write failures do not prevent source accounting. Compact parsed records
101
+ remain in memory for incremental updates. Saved source coverage also detects
102
+ an older rollout that disappears from the inventory. Missing sources keep
103
+ known historical totals as incomplete; corrections within the same logical
104
+ rollout can still recalculate them. Moving a rollout into archived storage
105
+ preserves its source identity.
106
+
107
+ Work time sums finished turns across the parent's saved rollouts, deduplicated
108
+ by turn ID, and joins known durations from the selected SQLite history. It adds
109
+ current running time in the view. Idle time and subagent time are excluded.
110
+ Missing or unreadable histories make this total partial.
111
+
112
+ Usage reads `token_count` events. Chat totals use cumulative counter changes;
113
+ latest-turn usage uses individual call counters and the surrounding turn ID.
114
+ Copied events and repeated unchanged counters are counted once. A missing
115
+ boundary or counter correction does not prevent later turns from reporting.
116
+ Subagent usage is included once per descendant chat. `root_turn_id` assigns
117
+ child calls to the latest parent turn. Missing parent links leave that turn
118
+ partial. Deleted logs, missing calls, and counter resets can prevent an exact
119
+ historical result; the UI never claims that the displayed subtotal is a bill.
120
+
121
+ Cost uses each saved call's model and input/cache-read/cache-write/output
122
+ counts. Reasoning tokens are already included in output tokens. Unknown models
123
+ remain unpriced. Missing calls can leave tokens known but cost partial. An
124
+ incomplete token or cost column has a superscript 2 on its label and a `≥`
125
+ prefix on each known incomplete value. Cost also has
126
+ superscript 1 for the API-price estimate note. The footnote explains why the
127
+ estimate is incomplete.
128
+
129
+ The package ships a dated table of standard USD API prices from
130
+ <https://developers.openai.com/api/docs/pricing>. While Details is used, the
131
+ server checks the public Markdown version in the background at most weekly.
132
+ A failed update is retried after an hour. The last valid update is saved beside
133
+ TaskChef's own Done state; the bundled table works offline. No API key, chat
134
+ content, or GitHub token is sent for this public request. If the published table
135
+ format changes, the last valid prices remain in use.
136
+
137
+ Estimates apply current standard API prices, including the published long
138
+ context rates above 272K input tokens. They do not reproduce subscription
139
+ charges, historic prices, fast-mode surcharges, regional fees, or tool fees.
140
+
141
+
142
+ ### Unread chats
143
+
144
+ The board reads `electron-thread-read-state-v1` from Codex's
145
+ `.codex-global-state.json`. It uses the live unread IDs for the single account
146
+ and the local execution-host key recorded in `legacyMigration.adoptedHostIds`.
147
+ Legacy unread lists are migration snapshots and are not used. Missing,
148
+ unsupported, cleared, or ambiguous account/host mappings show no dot.
149
+ The existing metadata file stamp detects changes during board polling even
150
+ when the SQLite databases do not change. Opening TaskChef Details does not
151
+ modify Codex read state; opening the chat in Codex lets Codex manage it.
152
+
153
+ ## Cache locations
154
+
155
+ Board disk caches share the state directory's `cache/` folder:
156
+
157
+ - `cache/usage/`: derived accounting results.
158
+ - `cache/pricing.json`: cached official model pricing.
159
+ - `cache/github-prs.json`: PR status results.
160
+
161
+ The reader moves older caches into these locations on first use. It preserves
162
+ an existing destination. Settings, Done marks, and authentication data remain
163
+ outside `cache/` because they are persistent state, not rebuildable caches.
164
+ The web dispatcher keeps its workspace-specific `.taskchef-usage.json` projection
165
+ file for compatibility with existing task records.
166
+
167
+ Usage caches retain normalized token counters for known rollout sources, without message content. If an older source disappears, those counters are reconciled with live counters so new usage continues to increase the known subtotal.
package/docs/workflows.md CHANGED
@@ -27,8 +27,10 @@ start, upgrade, shutdown, and security rationale.
27
27
  | `src/dashboard-manager.js` | Concurrent session ensure, exact health reuse, bounded version replacement, and safe conflicts. |
28
28
  | `src/dashboard-session-process.js` | Independent loopback server, signals, and in-memory Codex-session lease. |
29
29
  | `src/dashboard-session.js` | Exact registered-PID liveness checks and grace-period expiry. |
30
- | `src/usage.js` | Optional bounded ccusage execution, exact primary-thread mapping, normalized aggregation, and the private usage cache. |
31
- | `src/usage-tracker.js` | Deferred sampling, cumulative boundaries, historical availability, and per-turn deltas. |
30
+ | `src/usage.js` | Normalized private usage projections and historical cache compatibility. |
31
+ | `src/usage-tracker.js` | Usage-provider factory and compatibility with injected cumulative readers. |
32
+ | `src/recorded-usage-tracker.js` | Lazy native-turn projections, descendant totals, bounded requests, and persistent web usage. |
33
+ | `src/codex-session-usage.js` | Saved Codex accounting, incremental file reads, derived disk caches, and shared pricing. |
32
34
 
33
35
  The MCP process resolves `TASKCHEF_WORKSPACE` once and never accepts a model
34
36
  supplied path. The CLI resolves `--workspace`, then the environment, then the
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 N-API for Rust
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.