taskchef 8.6.2 → 8.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +8 -4
- package/assets/README.md +19 -0
- package/assets/taskchef-app-rounded.png +0 -0
- package/assets/taskchef-avatar-square.png +0 -0
- package/assets/taskchef-avatar-square.svg +8 -0
- package/assets/taskchef-sidebar-dark.svg +6 -0
- package/assets/taskchef-sidebar-light.svg +6 -0
- package/assets/taskchef-sidebar.svg +6 -0
- package/docs/advanced-guide.md +20 -29
- package/docs/dashboard-ui.md +15 -0
- package/docs/diagrams/taskchef-next-reply-lookup.drawio +38 -0
- package/docs/diagrams/taskchef-next-reply-lookup.drawio.png +0 -0
- package/docs/diagrams/taskchef-next-storage.drawio +41 -0
- package/docs/diagrams/taskchef-next-storage.drawio.png +0 -0
- package/docs/images/taskchef-pr-icon-comparison.jpg +0 -0
- package/docs/images/taskchef-unified-status-popup.jpg +0 -0
- package/docs/mcp-app.md +261 -6
- package/docs/spec.md +24 -69
- package/docs/taskchef-next-github.md +206 -0
- package/docs/taskchef-next-status-research.md +102 -0
- package/docs/taskchef-next-storage.md +167 -0
- package/docs/workflows.md +4 -2
- package/node_modules/@napi-rs/keyring/LICENSE +21 -0
- package/node_modules/@napi-rs/keyring/README.md +45 -0
- package/node_modules/@napi-rs/keyring/index.d.ts +232 -0
- package/node_modules/@napi-rs/keyring/index.js +706 -0
- package/node_modules/@napi-rs/keyring/keytar.d.ts +53 -0
- package/node_modules/@napi-rs/keyring/keytar.js +26 -0
- package/node_modules/@napi-rs/keyring/package.json +126 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/README.md +3 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/keyring.darwin-arm64.node +0 -0
- package/node_modules/@napi-rs/keyring-darwin-arm64/package.json +32 -0
- package/node_modules/@napi-rs/keyring-darwin-x64/README.md +3 -0
- package/node_modules/@napi-rs/keyring-darwin-x64/keyring.darwin-x64.node +0 -0
- package/node_modules/@napi-rs/keyring-darwin-x64/package.json +32 -0
- package/node_modules/@napi-rs/keyring-linux-arm64-gnu/README.md +3 -0
- package/node_modules/@napi-rs/keyring-linux-arm64-gnu/keyring.linux-arm64-gnu.node +0 -0
- package/node_modules/@napi-rs/keyring-linux-arm64-gnu/package.json +35 -0
- package/node_modules/@napi-rs/keyring-linux-arm64-musl/README.md +3 -0
- package/node_modules/@napi-rs/keyring-linux-arm64-musl/keyring.linux-arm64-musl.node +0 -0
- package/node_modules/@napi-rs/keyring-linux-arm64-musl/package.json +35 -0
- package/node_modules/@napi-rs/keyring-linux-x64-gnu/README.md +3 -0
- package/node_modules/@napi-rs/keyring-linux-x64-gnu/keyring.linux-x64-gnu.node +0 -0
- package/node_modules/@napi-rs/keyring-linux-x64-gnu/package.json +35 -0
- package/node_modules/@napi-rs/keyring-linux-x64-musl/README.md +3 -0
- package/node_modules/@napi-rs/keyring-linux-x64-musl/keyring.linux-x64-musl.node +0 -0
- package/node_modules/@napi-rs/keyring-linux-x64-musl/package.json +35 -0
- package/node_modules/@napi-rs/keyring-win32-arm64-msvc/README.md +3 -0
- package/node_modules/@napi-rs/keyring-win32-arm64-msvc/keyring.win32-arm64-msvc.node +0 -0
- package/node_modules/@napi-rs/keyring-win32-arm64-msvc/package.json +32 -0
- package/node_modules/@napi-rs/keyring-win32-x64-msvc/README.md +3 -0
- package/node_modules/@napi-rs/keyring-win32-x64-msvc/keyring.win32-x64-msvc.node +0 -0
- package/node_modules/@napi-rs/keyring-win32-x64-msvc/package.json +32 -0
- package/node_modules/@types/debug/LICENSE +21 -0
- package/node_modules/@types/debug/README.md +69 -0
- package/node_modules/@types/debug/index.d.ts +50 -0
- package/node_modules/@types/debug/package.json +58 -0
- package/node_modules/@types/mdast/LICENSE +21 -0
- package/node_modules/@types/mdast/README.md +15 -0
- package/node_modules/@types/mdast/index.d.ts +1123 -0
- package/node_modules/@types/mdast/package.json +47 -0
- package/node_modules/@types/ms/LICENSE +21 -0
- package/node_modules/@types/ms/README.md +82 -0
- package/node_modules/@types/ms/index.d.ts +63 -0
- package/node_modules/@types/ms/package.json +26 -0
- package/node_modules/@types/unist/LICENSE +21 -0
- package/node_modules/@types/unist/README.md +15 -0
- package/node_modules/@types/unist/index.d.ts +119 -0
- package/node_modules/@types/unist/package.json +60 -0
- package/node_modules/character-entities/index.d.ts +6 -0
- package/node_modules/character-entities/index.js +2132 -0
- package/node_modules/character-entities/license +22 -0
- package/node_modules/character-entities/package.json +78 -0
- package/node_modules/character-entities/readme.md +152 -0
- package/node_modules/decode-named-character-reference/index.d.ts +13 -0
- package/node_modules/decode-named-character-reference/index.d.ts.map +1 -0
- package/node_modules/decode-named-character-reference/index.dom.d.ts +6 -0
- package/node_modules/decode-named-character-reference/index.dom.d.ts.map +1 -0
- package/node_modules/decode-named-character-reference/index.dom.js +32 -0
- package/node_modules/decode-named-character-reference/index.js +19 -0
- package/node_modules/decode-named-character-reference/license +22 -0
- package/node_modules/decode-named-character-reference/package.json +90 -0
- package/node_modules/decode-named-character-reference/readme.md +136 -0
- package/node_modules/dequal/dist/index.js +86 -0
- package/node_modules/dequal/dist/index.min.js +1 -0
- package/node_modules/dequal/dist/index.mjs +84 -0
- package/node_modules/dequal/index.d.ts +1 -0
- package/node_modules/dequal/license +21 -0
- package/node_modules/dequal/lite/index.d.ts +1 -0
- package/node_modules/dequal/lite/index.js +31 -0
- package/node_modules/dequal/lite/index.min.js +1 -0
- package/node_modules/dequal/lite/index.mjs +29 -0
- package/node_modules/dequal/package.json +57 -0
- package/node_modules/dequal/readme.md +112 -0
- package/node_modules/devlop/lib/default.js +9 -0
- package/node_modules/devlop/lib/development.d.ts +84 -0
- package/node_modules/devlop/lib/development.js +238 -0
- package/node_modules/devlop/license +22 -0
- package/node_modules/devlop/package.json +80 -0
- package/node_modules/devlop/readme.md +360 -0
- package/node_modules/mdast-util-from-markdown/dev/index.d.ts +23 -0
- package/node_modules/mdast-util-from-markdown/dev/index.js +2 -0
- package/node_modules/mdast-util-from-markdown/dev/lib/index.d.ts +53 -0
- package/node_modules/mdast-util-from-markdown/dev/lib/index.d.ts.map +1 -0
- package/node_modules/mdast-util-from-markdown/dev/lib/index.js +1348 -0
- package/node_modules/mdast-util-from-markdown/dev/lib/types.d.ts +295 -0
- package/node_modules/mdast-util-from-markdown/dev/lib/types.js +2 -0
- package/node_modules/mdast-util-from-markdown/index.d.ts +23 -0
- package/node_modules/mdast-util-from-markdown/index.js +2 -0
- package/node_modules/mdast-util-from-markdown/lib/index.d.ts +53 -0
- package/node_modules/mdast-util-from-markdown/lib/index.js +1177 -0
- package/node_modules/mdast-util-from-markdown/lib/types.d.ts +295 -0
- package/node_modules/mdast-util-from-markdown/lib/types.js +2 -0
- package/node_modules/mdast-util-from-markdown/license +22 -0
- package/node_modules/mdast-util-from-markdown/package.json +139 -0
- package/node_modules/mdast-util-from-markdown/readme.md +537 -0
- package/node_modules/mdast-util-to-string/index.d.ts +2 -0
- package/node_modules/mdast-util-to-string/index.js +5 -0
- package/node_modules/mdast-util-to-string/lib/index.d.ts +31 -0
- package/node_modules/mdast-util-to-string/lib/index.js +108 -0
- package/node_modules/mdast-util-to-string/license +22 -0
- package/node_modules/mdast-util-to-string/package.json +78 -0
- package/node_modules/mdast-util-to-string/readme.md +218 -0
- package/node_modules/micromark/dev/index.d.ts +82 -0
- package/node_modules/micromark/dev/index.d.ts.map +1 -0
- package/node_modules/micromark/dev/index.js +68 -0
- package/node_modules/micromark/dev/lib/compile.d.ts +16 -0
- package/node_modules/micromark/dev/lib/compile.d.ts.map +1 -0
- package/node_modules/micromark/dev/lib/compile.js +1162 -0
- package/node_modules/micromark/dev/lib/constructs.d.ts +73 -0
- package/node_modules/micromark/dev/lib/constructs.d.ts.map +1 -0
- package/node_modules/micromark/dev/lib/constructs.js +101 -0
- package/node_modules/micromark/dev/lib/create-tokenizer.d.ts +46 -0
- package/node_modules/micromark/dev/lib/create-tokenizer.d.ts.map +1 -0
- package/node_modules/micromark/dev/lib/create-tokenizer.js +718 -0
- package/node_modules/micromark/dev/lib/initialize/content.d.ts +4 -0
- package/node_modules/micromark/dev/lib/initialize/content.d.ts.map +1 -0
- package/node_modules/micromark/dev/lib/initialize/content.js +99 -0
- package/node_modules/micromark/dev/lib/initialize/document.d.ts +10 -0
- package/node_modules/micromark/dev/lib/initialize/document.d.ts.map +1 -0
- package/node_modules/micromark/dev/lib/initialize/document.js +449 -0
- package/node_modules/micromark/dev/lib/initialize/flow.d.ts +4 -0
- package/node_modules/micromark/dev/lib/initialize/flow.d.ts.map +1 -0
- package/node_modules/micromark/dev/lib/initialize/flow.js +86 -0
- package/node_modules/micromark/dev/lib/initialize/text.d.ts +8 -0
- package/node_modules/micromark/dev/lib/initialize/text.d.ts.map +1 -0
- package/node_modules/micromark/dev/lib/initialize/text.js +248 -0
- package/node_modules/micromark/dev/lib/parse.d.ts +10 -0
- package/node_modules/micromark/dev/lib/parse.d.ts.map +1 -0
- package/node_modules/micromark/dev/lib/parse.js +58 -0
- package/node_modules/micromark/dev/lib/postprocess.d.ts +9 -0
- package/node_modules/micromark/dev/lib/postprocess.d.ts.map +1 -0
- package/node_modules/micromark/dev/lib/postprocess.js +19 -0
- package/node_modules/micromark/dev/lib/preprocess.d.ts +13 -0
- package/node_modules/micromark/dev/lib/preprocess.d.ts.map +1 -0
- package/node_modules/micromark/dev/lib/preprocess.js +139 -0
- package/node_modules/micromark/dev/stream.d.ts +35 -0
- package/node_modules/micromark/dev/stream.d.ts.map +1 -0
- package/node_modules/micromark/dev/stream.js +270 -0
- package/node_modules/micromark/index.d.ts +82 -0
- package/node_modules/micromark/index.d.ts.map +1 -0
- package/node_modules/micromark/index.js +60 -0
- package/node_modules/micromark/lib/compile.d.ts +16 -0
- package/node_modules/micromark/lib/compile.d.ts.map +1 -0
- package/node_modules/micromark/lib/compile.js +1068 -0
- package/node_modules/micromark/lib/constructs.d.ts +73 -0
- package/node_modules/micromark/lib/constructs.d.ts.map +1 -0
- package/node_modules/micromark/lib/constructs.js +85 -0
- package/node_modules/micromark/lib/create-tokenizer.d.ts +46 -0
- package/node_modules/micromark/lib/create-tokenizer.d.ts.map +1 -0
- package/node_modules/micromark/lib/create-tokenizer.js +613 -0
- package/node_modules/micromark/lib/initialize/content.d.ts +4 -0
- package/node_modules/micromark/lib/initialize/content.d.ts.map +1 -0
- package/node_modules/micromark/lib/initialize/content.js +79 -0
- package/node_modules/micromark/lib/initialize/document.d.ts +10 -0
- package/node_modules/micromark/lib/initialize/document.d.ts.map +1 -0
- package/node_modules/micromark/lib/initialize/document.js +370 -0
- package/node_modules/micromark/lib/initialize/flow.d.ts +4 -0
- package/node_modules/micromark/lib/initialize/flow.d.ts.map +1 -0
- package/node_modules/micromark/lib/initialize/flow.js +58 -0
- package/node_modules/micromark/lib/initialize/text.d.ts +8 -0
- package/node_modules/micromark/lib/initialize/text.d.ts.map +1 -0
- package/node_modules/micromark/lib/initialize/text.js +216 -0
- package/node_modules/micromark/lib/parse.d.ts +10 -0
- package/node_modules/micromark/lib/parse.d.ts.map +1 -0
- package/node_modules/micromark/lib/parse.js +56 -0
- package/node_modules/micromark/lib/postprocess.d.ts +9 -0
- package/node_modules/micromark/lib/postprocess.d.ts.map +1 -0
- package/node_modules/micromark/lib/postprocess.js +18 -0
- package/node_modules/micromark/lib/preprocess.d.ts +13 -0
- package/node_modules/micromark/lib/preprocess.d.ts.map +1 -0
- package/node_modules/micromark/lib/preprocess.js +112 -0
- package/node_modules/micromark/license +22 -0
- package/node_modules/micromark/package.json +87 -0
- package/node_modules/micromark/readme.md +488 -0
- package/node_modules/micromark/stream.d.ts +35 -0
- package/node_modules/micromark/stream.d.ts.map +1 -0
- package/node_modules/micromark/stream.js +256 -0
- package/node_modules/micromark-core-commonmark/dev/index.d.ts +23 -0
- package/node_modules/micromark-core-commonmark/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/index.js +22 -0
- package/node_modules/micromark-core-commonmark/dev/lib/attention.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/attention.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/attention.js +294 -0
- package/node_modules/micromark-core-commonmark/dev/lib/autolink.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/autolink.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/autolink.js +269 -0
- package/node_modules/micromark-core-commonmark/dev/lib/blank-line.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/blank-line.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/blank-line.js +62 -0
- package/node_modules/micromark-core-commonmark/dev/lib/block-quote.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/block-quote.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/block-quote.js +162 -0
- package/node_modules/micromark-core-commonmark/dev/lib/character-escape.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/character-escape.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/character-escape.js +69 -0
- package/node_modules/micromark-core-commonmark/dev/lib/character-reference.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/character-reference.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/character-reference.js +166 -0
- package/node_modules/micromark-core-commonmark/dev/lib/code-fenced.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/code-fenced.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/code-fenced.js +472 -0
- package/node_modules/micromark-core-commonmark/dev/lib/code-indented.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/code-indented.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/code-indented.js +178 -0
- package/node_modules/micromark-core-commonmark/dev/lib/code-text.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/code-text.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/code-text.js +257 -0
- package/node_modules/micromark-core-commonmark/dev/lib/content.d.ts +7 -0
- package/node_modules/micromark-core-commonmark/dev/lib/content.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/content.js +185 -0
- package/node_modules/micromark-core-commonmark/dev/lib/definition.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/definition.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/definition.js +295 -0
- package/node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/hard-break-escape.js +65 -0
- package/node_modules/micromark-core-commonmark/dev/lib/heading-atx.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/heading-atx.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/heading-atx.js +229 -0
- package/node_modules/micromark-core-commonmark/dev/lib/html-flow.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/html-flow.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/html-flow.js +938 -0
- package/node_modules/micromark-core-commonmark/dev/lib/html-text.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/html-text.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/html-text.js +783 -0
- package/node_modules/micromark-core-commonmark/dev/lib/label-end.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/label-end.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/label-end.js +658 -0
- package/node_modules/micromark-core-commonmark/dev/lib/label-start-image.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/label-start-image.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/label-start-image.js +119 -0
- package/node_modules/micromark-core-commonmark/dev/lib/label-start-link.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/label-start-link.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/label-start-link.js +71 -0
- package/node_modules/micromark-core-commonmark/dev/lib/line-ending.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/line-ending.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/line-ending.js +34 -0
- package/node_modules/micromark-core-commonmark/dev/lib/list.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/list.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/list.js +306 -0
- package/node_modules/micromark-core-commonmark/dev/lib/partial-non-lazy-continuation.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/partial-non-lazy-continuation.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/partial-non-lazy-continuation.js +67 -0
- package/node_modules/micromark-core-commonmark/dev/lib/setext-underline.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/setext-underline.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/setext-underline.js +213 -0
- package/node_modules/micromark-core-commonmark/dev/lib/thematic-break.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/dev/lib/thematic-break.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/dev/lib/thematic-break.js +120 -0
- package/node_modules/micromark-core-commonmark/index.d.ts +23 -0
- package/node_modules/micromark-core-commonmark/index.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/index.js +22 -0
- package/node_modules/micromark-core-commonmark/lib/attention.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/attention.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/attention.js +231 -0
- package/node_modules/micromark-core-commonmark/lib/autolink.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/autolink.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/autolink.js +233 -0
- package/node_modules/micromark-core-commonmark/lib/blank-line.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/blank-line.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/blank-line.js +61 -0
- package/node_modules/micromark-core-commonmark/lib/block-quote.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/block-quote.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/block-quote.js +143 -0
- package/node_modules/micromark-core-commonmark/lib/character-escape.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/character-escape.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/character-escape.js +64 -0
- package/node_modules/micromark-core-commonmark/lib/character-reference.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/character-reference.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/character-reference.js +149 -0
- package/node_modules/micromark-core-commonmark/lib/code-fenced.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/code-fenced.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/code-fenced.js +422 -0
- package/node_modules/micromark-core-commonmark/lib/code-indented.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/code-indented.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/code-indented.js +159 -0
- package/node_modules/micromark-core-commonmark/lib/code-text.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/code-text.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/code-text.js +225 -0
- package/node_modules/micromark-core-commonmark/lib/content.d.ts +7 -0
- package/node_modules/micromark-core-commonmark/lib/content.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/content.js +163 -0
- package/node_modules/micromark-core-commonmark/lib/definition.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/definition.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/definition.js +254 -0
- package/node_modules/micromark-core-commonmark/lib/hard-break-escape.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/hard-break-escape.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/hard-break-escape.js +60 -0
- package/node_modules/micromark-core-commonmark/lib/heading-atx.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/heading-atx.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/heading-atx.js +191 -0
- package/node_modules/micromark-core-commonmark/lib/html-flow.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/html-flow.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/html-flow.js +827 -0
- package/node_modules/micromark-core-commonmark/lib/html-text.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/html-text.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/html-text.js +678 -0
- package/node_modules/micromark-core-commonmark/lib/label-end.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/label-end.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/label-end.js +561 -0
- package/node_modules/micromark-core-commonmark/lib/label-start-image.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/label-start-image.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/label-start-image.js +110 -0
- package/node_modules/micromark-core-commonmark/lib/label-start-link.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/label-start-link.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/label-start-link.js +63 -0
- package/node_modules/micromark-core-commonmark/lib/line-ending.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/line-ending.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/line-ending.js +33 -0
- package/node_modules/micromark-core-commonmark/lib/list.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/list.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/list.js +213 -0
- package/node_modules/micromark-core-commonmark/lib/partial-non-lazy-continuation.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/partial-non-lazy-continuation.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/partial-non-lazy-continuation.js +61 -0
- package/node_modules/micromark-core-commonmark/lib/setext-underline.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/setext-underline.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/setext-underline.js +187 -0
- package/node_modules/micromark-core-commonmark/lib/thematic-break.d.ts +4 -0
- package/node_modules/micromark-core-commonmark/lib/thematic-break.d.ts.map +1 -0
- package/node_modules/micromark-core-commonmark/lib/thematic-break.js +102 -0
- package/node_modules/micromark-core-commonmark/license +22 -0
- package/node_modules/micromark-core-commonmark/package.json +62 -0
- package/node_modules/micromark-core-commonmark/readme.md +171 -0
- package/node_modules/micromark-factory-destination/dev/index.d.ts +42 -0
- package/node_modules/micromark-factory-destination/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-factory-destination/dev/index.js +255 -0
- package/node_modules/micromark-factory-destination/index.d.ts +42 -0
- package/node_modules/micromark-factory-destination/index.d.ts.map +1 -0
- package/node_modules/micromark-factory-destination/index.js +206 -0
- package/node_modules/micromark-factory-destination/license +22 -0
- package/node_modules/micromark-factory-destination/package.json +57 -0
- package/node_modules/micromark-factory-destination/readme.md +234 -0
- package/node_modules/micromark-factory-label/dev/index.d.ts +37 -0
- package/node_modules/micromark-factory-label/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-factory-label/dev/index.js +172 -0
- package/node_modules/micromark-factory-label/index.d.ts +37 -0
- package/node_modules/micromark-factory-label/index.d.ts.map +1 -0
- package/node_modules/micromark-factory-label/index.js +148 -0
- package/node_modules/micromark-factory-label/license +22 -0
- package/node_modules/micromark-factory-label/package.json +60 -0
- package/node_modules/micromark-factory-label/readme.md +224 -0
- package/node_modules/micromark-factory-space/dev/index.d.ts +60 -0
- package/node_modules/micromark-factory-space/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-factory-space/dev/index.js +122 -0
- package/node_modules/micromark-factory-space/index.d.ts +60 -0
- package/node_modules/micromark-factory-space/index.d.ts.map +1 -0
- package/node_modules/micromark-factory-space/index.js +116 -0
- package/node_modules/micromark-factory-space/license +22 -0
- package/node_modules/micromark-factory-space/package.json +46 -0
- package/node_modules/micromark-factory-space/readme.md +225 -0
- package/node_modules/micromark-factory-title/dev/index.d.ts +36 -0
- package/node_modules/micromark-factory-title/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-factory-title/dev/index.js +169 -0
- package/node_modules/micromark-factory-title/index.d.ts +36 -0
- package/node_modules/micromark-factory-title/index.d.ts.map +1 -0
- package/node_modules/micromark-factory-title/index.js +158 -0
- package/node_modules/micromark-factory-title/license +22 -0
- package/node_modules/micromark-factory-title/package.json +58 -0
- package/node_modules/micromark-factory-title/readme.md +229 -0
- package/node_modules/micromark-factory-whitespace/dev/index.d.ts +22 -0
- package/node_modules/micromark-factory-whitespace/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-factory-whitespace/dev/index.js +53 -0
- package/node_modules/micromark-factory-whitespace/index.d.ts +22 -0
- package/node_modules/micromark-factory-whitespace/index.d.ts.map +1 -0
- package/node_modules/micromark-factory-whitespace/index.js +44 -0
- package/node_modules/micromark-factory-whitespace/license +22 -0
- package/node_modules/micromark-factory-whitespace/package.json +57 -0
- package/node_modules/micromark-factory-whitespace/readme.md +205 -0
- package/node_modules/micromark-util-character/dev/index.d.ts +195 -0
- package/node_modules/micromark-util-character/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-util-character/dev/index.js +252 -0
- package/node_modules/micromark-util-character/index.d.ts +195 -0
- package/node_modules/micromark-util-character/index.d.ts.map +1 -0
- package/node_modules/micromark-util-character/index.js +246 -0
- package/node_modules/micromark-util-character/license +22 -0
- package/node_modules/micromark-util-character/package.json +57 -0
- package/node_modules/micromark-util-character/readme.md +446 -0
- package/node_modules/micromark-util-chunked/dev/index.d.ts +41 -0
- package/node_modules/micromark-util-chunked/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-util-chunked/dev/index.js +89 -0
- package/node_modules/micromark-util-chunked/index.d.ts +41 -0
- package/node_modules/micromark-util-chunked/index.d.ts.map +1 -0
- package/node_modules/micromark-util-chunked/index.js +81 -0
- package/node_modules/micromark-util-chunked/license +22 -0
- package/node_modules/micromark-util-chunked/package.json +57 -0
- package/node_modules/micromark-util-chunked/readme.md +219 -0
- package/node_modules/micromark-util-classify-character/dev/index.d.ts +18 -0
- package/node_modules/micromark-util-classify-character/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-util-classify-character/dev/index.js +38 -0
- package/node_modules/micromark-util-classify-character/index.d.ts +18 -0
- package/node_modules/micromark-util-classify-character/index.d.ts.map +1 -0
- package/node_modules/micromark-util-classify-character/index.js +27 -0
- package/node_modules/micromark-util-classify-character/license +22 -0
- package/node_modules/micromark-util-classify-character/package.json +59 -0
- package/node_modules/micromark-util-classify-character/readme.md +205 -0
- package/node_modules/micromark-util-combine-extensions/index.d.ts +22 -0
- package/node_modules/micromark-util-combine-extensions/index.d.ts.map +1 -0
- package/node_modules/micromark-util-combine-extensions/index.js +143 -0
- package/node_modules/micromark-util-combine-extensions/license +22 -0
- package/node_modules/micromark-util-combine-extensions/package.json +52 -0
- package/node_modules/micromark-util-combine-extensions/readme.md +201 -0
- package/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts +16 -0
- package/node_modules/micromark-util-decode-numeric-character-reference/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-util-decode-numeric-character-reference/dev/index.js +42 -0
- package/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts +16 -0
- package/node_modules/micromark-util-decode-numeric-character-reference/index.d.ts.map +1 -0
- package/node_modules/micromark-util-decode-numeric-character-reference/index.js +32 -0
- package/node_modules/micromark-util-decode-numeric-character-reference/license +22 -0
- package/node_modules/micromark-util-decode-numeric-character-reference/package.json +59 -0
- package/node_modules/micromark-util-decode-numeric-character-reference/readme.md +184 -0
- package/node_modules/micromark-util-decode-string/dev/index.d.ts +14 -0
- package/node_modules/micromark-util-decode-string/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-util-decode-string/dev/index.js +53 -0
- package/node_modules/micromark-util-decode-string/index.d.ts +14 -0
- package/node_modules/micromark-util-decode-string/index.d.ts.map +1 -0
- package/node_modules/micromark-util-decode-string/index.js +45 -0
- package/node_modules/micromark-util-decode-string/license +22 -0
- package/node_modules/micromark-util-decode-string/package.json +63 -0
- package/node_modules/micromark-util-decode-string/readme.md +179 -0
- package/node_modules/micromark-util-edit-map/dev/index.d.ts +78 -0
- package/node_modules/micromark-util-edit-map/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-util-edit-map/dev/index.js +237 -0
- package/node_modules/micromark-util-edit-map/index.d.ts +78 -0
- package/node_modules/micromark-util-edit-map/index.d.ts.map +1 -0
- package/node_modules/micromark-util-edit-map/index.js +225 -0
- package/node_modules/micromark-util-edit-map/license +22 -0
- package/node_modules/micromark-util-edit-map/package.json +48 -0
- package/node_modules/micromark-util-edit-map/readme.md +234 -0
- package/node_modules/micromark-util-encode/index.d.ts +14 -0
- package/node_modules/micromark-util-encode/index.d.ts.map +1 -0
- package/node_modules/micromark-util-encode/index.js +33 -0
- package/node_modules/micromark-util-encode/license +22 -0
- package/node_modules/micromark-util-encode/package.json +47 -0
- package/node_modules/micromark-util-encode/readme.md +176 -0
- package/node_modules/micromark-util-html-tag-name/index.d.ts +30 -0
- package/node_modules/micromark-util-html-tag-name/index.d.ts.map +1 -0
- package/node_modules/micromark-util-html-tag-name/index.js +93 -0
- package/node_modules/micromark-util-html-tag-name/license +22 -0
- package/node_modules/micromark-util-html-tag-name/package.json +47 -0
- package/node_modules/micromark-util-html-tag-name/readme.md +193 -0
- package/node_modules/micromark-util-normalize-identifier/dev/index.d.ts +21 -0
- package/node_modules/micromark-util-normalize-identifier/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-util-normalize-identifier/dev/index.js +38 -0
- package/node_modules/micromark-util-normalize-identifier/index.d.ts +21 -0
- package/node_modules/micromark-util-normalize-identifier/index.d.ts.map +1 -0
- package/node_modules/micromark-util-normalize-identifier/index.js +33 -0
- package/node_modules/micromark-util-normalize-identifier/license +22 -0
- package/node_modules/micromark-util-normalize-identifier/package.json +58 -0
- package/node_modules/micromark-util-normalize-identifier/readme.md +187 -0
- package/node_modules/micromark-util-resolve-all/index.d.ts +22 -0
- package/node_modules/micromark-util-resolve-all/index.d.ts.map +1 -0
- package/node_modules/micromark-util-resolve-all/index.js +32 -0
- package/node_modules/micromark-util-resolve-all/license +22 -0
- package/node_modules/micromark-util-resolve-all/package.json +48 -0
- package/node_modules/micromark-util-resolve-all/readme.md +238 -0
- package/node_modules/micromark-util-sanitize-uri/dev/index.d.ts +36 -0
- package/node_modules/micromark-util-sanitize-uri/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-util-sanitize-uri/dev/index.js +124 -0
- package/node_modules/micromark-util-sanitize-uri/index.d.ts +36 -0
- package/node_modules/micromark-util-sanitize-uri/index.d.ts.map +1 -0
- package/node_modules/micromark-util-sanitize-uri/index.js +107 -0
- package/node_modules/micromark-util-sanitize-uri/license +22 -0
- package/node_modules/micromark-util-sanitize-uri/package.json +59 -0
- package/node_modules/micromark-util-sanitize-uri/readme.md +214 -0
- package/node_modules/micromark-util-subtokenize/dev/index.d.ts +12 -0
- package/node_modules/micromark-util-subtokenize/dev/index.d.ts.map +1 -0
- package/node_modules/micromark-util-subtokenize/dev/index.js +284 -0
- package/node_modules/micromark-util-subtokenize/dev/lib/splice-buffer.d.ts +161 -0
- package/node_modules/micromark-util-subtokenize/dev/lib/splice-buffer.d.ts.map +1 -0
- package/node_modules/micromark-util-subtokenize/dev/lib/splice-buffer.js +288 -0
- package/node_modules/micromark-util-subtokenize/index.d.ts +12 -0
- package/node_modules/micromark-util-subtokenize/index.d.ts.map +1 -0
- package/node_modules/micromark-util-subtokenize/index.js +228 -0
- package/node_modules/micromark-util-subtokenize/lib/splice-buffer.d.ts +161 -0
- package/node_modules/micromark-util-subtokenize/lib/splice-buffer.d.ts.map +1 -0
- package/node_modules/micromark-util-subtokenize/lib/splice-buffer.js +251 -0
- package/node_modules/micromark-util-subtokenize/license +22 -0
- package/node_modules/micromark-util-subtokenize/package.json +60 -0
- package/node_modules/micromark-util-subtokenize/readme.md +181 -0
- package/node_modules/micromark-util-symbol/lib/codes.d.ts +139 -0
- package/node_modules/micromark-util-symbol/lib/codes.d.ts.map +1 -0
- package/node_modules/micromark-util-symbol/lib/codes.js +158 -0
- package/node_modules/micromark-util-symbol/lib/constants.d.ts +37 -0
- package/node_modules/micromark-util-symbol/lib/constants.d.ts.map +1 -0
- package/node_modules/micromark-util-symbol/lib/constants.js +44 -0
- package/node_modules/micromark-util-symbol/lib/default.d.ts +5 -0
- package/node_modules/micromark-util-symbol/lib/default.d.ts.map +1 -0
- package/node_modules/micromark-util-symbol/lib/default.js +4 -0
- package/node_modules/micromark-util-symbol/lib/types.d.ts +106 -0
- package/node_modules/micromark-util-symbol/lib/types.d.ts.map +1 -0
- package/node_modules/micromark-util-symbol/lib/types.js +453 -0
- package/node_modules/micromark-util-symbol/lib/values.d.ts +102 -0
- package/node_modules/micromark-util-symbol/lib/values.d.ts.map +1 -0
- package/node_modules/micromark-util-symbol/lib/values.js +109 -0
- package/node_modules/micromark-util-symbol/license +22 -0
- package/node_modules/micromark-util-symbol/package.json +43 -0
- package/node_modules/micromark-util-symbol/readme.md +168 -0
- package/node_modules/micromark-util-types/index.d.ts +1315 -0
- package/node_modules/micromark-util-types/index.js +2 -0
- package/node_modules/micromark-util-types/license +22 -0
- package/node_modules/micromark-util-types/package.json +37 -0
- package/node_modules/micromark-util-types/readme.md +151 -0
- package/node_modules/smol-toml/LICENSE +24 -0
- package/node_modules/smol-toml/README.md +605 -0
- package/node_modules/smol-toml/dist/date.d.ts +41 -0
- package/node_modules/smol-toml/dist/date.js +156 -0
- package/node_modules/smol-toml/dist/error.d.ts +37 -0
- package/node_modules/smol-toml/dist/error.js +67 -0
- package/node_modules/smol-toml/dist/extract.js +289 -0
- package/node_modules/smol-toml/dist/index.cjs +770 -0
- package/node_modules/smol-toml/dist/index.d.ts +44 -0
- package/node_modules/smol-toml/dist/index.js +34 -0
- package/node_modules/smol-toml/dist/parse.d.ts +73 -0
- package/node_modules/smol-toml/dist/parse.js +164 -0
- package/node_modules/smol-toml/dist/primitive.js +151 -0
- package/node_modules/smol-toml/dist/stringify.d.ts +32 -0
- package/node_modules/smol-toml/dist/stringify.js +219 -0
- package/node_modules/smol-toml/dist/struct.js +156 -0
- package/node_modules/smol-toml/dist/util.d.ts +43 -0
- package/node_modules/smol-toml/dist/util.js +57 -0
- package/node_modules/smol-toml/package.json +68 -0
- package/node_modules/unist-util-stringify-position/index.d.ts +1 -0
- package/node_modules/unist-util-stringify-position/index.js +1 -0
- package/node_modules/unist-util-stringify-position/lib/index.d.ts +61 -0
- package/node_modules/unist-util-stringify-position/lib/index.js +84 -0
- package/node_modules/unist-util-stringify-position/license +22 -0
- package/node_modules/unist-util-stringify-position/package.json +80 -0
- package/node_modules/unist-util-stringify-position/readme.md +206 -0
- package/package.json +27 -8
- package/scripts/prepare-github-keyring.js +29 -0
- package/src/codex-app.js +20 -2
- package/src/codex-pricing.js +79 -0
- package/src/codex-projects.js +90 -0
- package/src/codex-session-scanner.js +748 -0
- package/src/codex-session-usage.js +332 -0
- package/src/dashboard/app.js +2 -2
- package/src/dashboard/dist/app.js +135 -60
- package/src/dashboard/dist/app.js.map +1 -1
- package/src/dashboard/dist/styles.css +1 -1
- package/src/dashboard/react/components/AnimatedUsage.test.tsx +78 -0
- package/src/dashboard/react/components/CardStatusIcons.test.tsx +146 -0
- package/src/dashboard/react/components/CardStatusIcons.tsx +138 -0
- package/src/dashboard/react/components/ImageGallery.tsx +22 -0
- package/src/dashboard/react/components/ModelSettings.test.tsx +4 -4
- package/src/dashboard/react/components/ModelSettings.tsx +1 -1
- package/src/dashboard/react/components/OpenChatButton.test.tsx +19 -0
- package/src/dashboard/react/components/OpenChatButton.tsx +2 -1
- package/src/dashboard/react/components/PrGlyph.tsx +35 -0
- package/src/dashboard/react/components/PullRequestBadges.tsx +18 -0
- package/src/dashboard/react/components/QueuedPrompts.test.tsx +42 -0
- package/src/dashboard/react/components/QueuedPrompts.tsx +34 -0
- package/src/dashboard/react/components/RelativeTime.test.tsx +100 -0
- package/src/dashboard/react/components/RelativeTime.tsx +46 -11
- package/src/dashboard/react/components/ReplyCover.test.tsx +30 -0
- package/src/dashboard/react/components/ReplyCover.tsx +33 -0
- package/src/dashboard/react/components/ReplyImagePreview.test.tsx +90 -0
- package/src/dashboard/react/components/ReplyImagePreview.tsx +34 -0
- package/src/dashboard/react/components/ReplyMarkdown.test.tsx +108 -0
- package/src/dashboard/react/components/ReplyMarkdown.tsx +112 -0
- package/src/dashboard/react/components/SavedUsageFormat.test.tsx +11 -0
- package/src/dashboard/react/components/SavedUsageFormat.tsx +68 -0
- package/src/dashboard/react/components/StatusBadge.tsx +2 -2
- package/src/dashboard/react/components/TaskBoard.test.tsx +256 -1
- package/src/dashboard/react/components/TaskBoard.tsx +136 -28
- package/src/dashboard/react/components/TaskCard.tsx +7 -4
- package/src/dashboard/react/components/TaskDetail.test.tsx +92 -1
- package/src/dashboard/react/components/TaskDetail.tsx +37 -10
- package/src/dashboard/react/components/TurnContent.test.tsx +44 -0
- package/src/dashboard/react/components/TurnContent.tsx +53 -0
- package/src/dashboard/react/components/UsagePanel.tsx +2 -2
- package/src/dashboard/react/image-cache.test.ts +23 -0
- package/src/dashboard/react/image-cache.ts +33 -0
- package/src/dashboard/react/presentation.test.tsx +31 -0
- package/src/dashboard/react/styles.css +126 -2
- package/src/dashboard/react/types.ts +55 -1
- package/src/dashboard/time.js +39 -0
- package/src/dashboard.js +4 -3
- package/src/data/codex-pricing.json +537 -0
- package/src/mcp-app/dist/index.html +216 -112
- package/src/mcp-app/react/AppearancePicker.test.tsx +50 -0
- package/src/mcp-app/react/AppearancePicker.tsx +56 -0
- package/src/mcp-app/react/GitHubConnection.test.tsx +78 -0
- package/src/mcp-app/react/GitHubConnection.tsx +78 -0
- package/src/mcp-app/react/NextNotificationCenter.test.tsx +121 -0
- package/src/mcp-app/react/NextNotificationCenter.tsx +94 -0
- package/src/mcp-app/react/NextTaskDetail.test.tsx +124 -0
- package/src/mcp-app/react/NextTaskDetail.tsx +147 -0
- package/src/mcp-app/react/ProjectPicker.tsx +49 -0
- package/src/mcp-app/react/main.test.tsx +499 -49
- package/src/mcp-app/react/main.tsx +359 -86
- package/src/mcp-app/react/styles.css +186 -9
- package/src/mcp-app/react/themes.test.ts +34 -0
- package/src/mcp-app/react/themes.ts +112 -0
- package/src/mcp-app.js +238 -120
- package/src/mcp.js +8 -1
- package/src/next-cache.js +16 -0
- package/src/next-github.js +273 -0
- package/src/next-notifications.js +90 -0
- package/src/recorded-usage-tracker.js +92 -0
- package/src/reply-image.js +65 -0
- package/src/usage-tracker.js +7 -6
- package/src/usage.js +7 -355
- package/src/user-prompt.js +55 -0
- package/src/version.js +0 -1
- package/node_modules/proper-lockfile/CHANGELOG.md +0 -108
- package/node_modules/which/CHANGELOG.md +0 -166
- 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
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
+

|
|
103
|
+
|
|
104
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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` |
|
|
31
|
-
| `src/usage-tracker.js` |
|
|
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.
|