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.
- 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 +278 -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 +2 -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/README.md
CHANGED
|
@@ -47,10 +47,14 @@ every task.
|
|
|
47
47
|
|
|
48
48
|
The screenshots in this walkthrough use illustrative demo data. Open the
|
|
49
49
|
dashboard beside TaskChef master to see both tasks across your projects.
|
|
50
|
-
In Codex,
|
|
51
|
-
|
|
52
|
-
**
|
|
53
|
-
**
|
|
50
|
+
In Codex, call `open_taskchef_board` for the [TaskChef sidebar](docs/mcp-app.md).
|
|
51
|
+
It reads local Codex data and groups chats as **Scheduled**, **Running**,
|
|
52
|
+
**Waiting for input/review**, and **Done**. Interrupted chats stay in Waiting with an **Interrupted** tag. Empty board columns remain visible with a short message. Ambiguous records stay
|
|
53
|
+
**Unverified**. Running follows the latest selected turn
|
|
54
|
+
state; these labels do not prove task outcomes. Mark Done writes only TaskChef's separate local state. A new Codex turn
|
|
55
|
+
resets that mark.
|
|
56
|
+
The main dashboard's **Board** groups reported tasks by **Working**,
|
|
57
|
+
**Needs input**, **Completed**, and **Failed** so you can see their status at a glance.
|
|
54
58
|
|
|
55
59
|

|
|
56
60
|
|
package/assets/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# TaskChef icons
|
|
2
|
+
|
|
3
|
+
All icons use the same chef hat and T artwork. The SVG files are the editable sources.
|
|
4
|
+
|
|
5
|
+
| Use | File | Background |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| App and navbar, light theme | `taskchef.svg` | Rounded orange square; transparent outside |
|
|
8
|
+
| App and navbar, dark theme | `taskchef-dark.svg` | Rounded orange square; transparent outside |
|
|
9
|
+
| App icon PNG export, dark theme | `taskchef-app-rounded.png` | Rounded orange square; transparent outside |
|
|
10
|
+
| Sidebar preview, light theme | `taskchef-sidebar-light.svg` | Dark strokes; transparent |
|
|
11
|
+
| Sidebar preview, dark theme | `taskchef-sidebar-dark.svg` | Light strokes; transparent |
|
|
12
|
+
| Codex sidebar | `taskchef-sidebar.svg` | Monochrome `currentColor`; transparent |
|
|
13
|
+
| GitHub and other services that apply a circle crop | `taskchef-avatar-square.svg`, `taskchef-avatar-square.png` | Solid orange to all four edges |
|
|
14
|
+
|
|
15
|
+
The app and sidebar SVGs are unchanged. The square avatar uses the current dark-theme navbar artwork and colors. Its hat is enlarged by 30% and centered for circle crops. The two sidebar preview files show the same light/dark colors that the MCP server already provides; the runtime continues to use the theme-neutral template. Both PNG exports are 512 × 512 pixels.
|
|
16
|
+
|
|
17
|
+
For GitHub, upload `taskchef-avatar-square.png` and set the badge background color to `#F59E0B`. Keep the full image when GitHub asks for a crop.
|
|
18
|
+
|
|
19
|
+
Export PNGs directly from the SVG sources. Do not use an image generator: these are flat vector icons, with no gradients, shadows, or texture.
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 48 48" fill="none">
|
|
2
|
+
<rect width="48" height="48" fill="#F59E0B"/>
|
|
3
|
+
<g transform="translate(24 24) scale(1.3) translate(-24 -23.5)">
|
|
4
|
+
<path d="M15 37V27.5C11.9 26.3 10 23.6 10 20.5C10 16.4 13.4 13 17.5 13C19 10 21.2 8.5 24 8.5C26.8 8.5 29 10 30.5 13C34.6 13 38 16.4 38 20.5C38 23.6 36.1 26.3 33 27.5V37H15Z" fill="#FFFBEB"/>
|
|
5
|
+
<path d="M18.5 20H29.5M24 20V31" stroke="#78350F" stroke-width="3.5" stroke-linecap="round"/>
|
|
6
|
+
<path d="M15 37H33" stroke="#78350F" stroke-width="3" stroke-linecap="round"/>
|
|
7
|
+
</g>
|
|
8
|
+
</svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg style="color:#dddddd" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
|
|
2
|
+
<g transform="scale(.625) translate(-8 -7)" stroke="currentColor" stroke-width="2.128" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
+
<path d="M15 37V27.5C11.9 26.3 10 23.6 10 20.5C10 16.4 13.4 13 17.5 13C19 10 21.2 8.5 24 8.5C26.8 8.5 29 10 30.5 13C34.6 13 38 16.4 38 20.5C38 23.6 36.1 26.3 33 27.5V37H15Z"/>
|
|
4
|
+
<path d="M18.5 20H29.5M24 20V31M15 33H33"/>
|
|
5
|
+
</g>
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg style="color:#333333" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
|
|
2
|
+
<g transform="scale(.625) translate(-8 -7)" stroke="currentColor" stroke-width="2.128" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
+
<path d="M15 37V27.5C11.9 26.3 10 23.6 10 20.5C10 16.4 13.4 13 17.5 13C19 10 21.2 8.5 24 8.5C26.8 8.5 29 10 30.5 13C34.6 13 38 16.4 38 20.5C38 23.6 36.1 26.3 33 27.5V37H15Z"/>
|
|
4
|
+
<path d="M18.5 20H29.5M24 20V31M15 33H33"/>
|
|
5
|
+
</g>
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
|
|
2
|
+
<g transform="scale(.625) translate(-8 -7)" stroke="currentColor" stroke-width="2.128" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
+
<path d="M15 37V27.5C11.9 26.3 10 23.6 10 20.5C10 16.4 13.4 13 17.5 13C19 10 21.2 8.5 24 8.5C26.8 8.5 29 10 30.5 13C34.6 13 38 16.4 38 20.5C38 23.6 36.1 26.3 33 27.5V37H15Z"/>
|
|
4
|
+
<path d="M18.5 20H29.5M24 20V31M15 33H33"/>
|
|
5
|
+
</g>
|
|
6
|
+
</svg>
|
package/docs/advanced-guide.md
CHANGED
|
@@ -7,15 +7,10 @@ Detailed setup, operation, recovery, and development reference for TaskChef.
|
|
|
7
7
|
TaskChef requires Node.js 18 or newer, Git, Codex desktop, and local access to
|
|
8
8
|
the projects that will receive work.
|
|
9
9
|
|
|
10
|
-
TaskChef
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
executable. `npx` never launches the analyzer against Codex data. TaskChef then
|
|
15
|
-
requests ccusage's live-capable online pricing and falls back to its bundled
|
|
16
|
-
offline snapshot, while never parsing Codex rollout files itself. Lifecycle
|
|
17
|
-
reporting and the dashboard continue to work when ccusage, npm, or pricing is
|
|
18
|
-
unavailable.
|
|
10
|
+
TaskChef uses its own accounting engine for token usage and API-equivalent cost
|
|
11
|
+
estimates. Usage requires Node.js 22.18+ and readable local Codex records.
|
|
12
|
+
It includes linked subagents and uses the same pricing data as the board.
|
|
13
|
+
Lifecycle reporting and the dashboard continue to work when usage is unavailable.
|
|
19
14
|
|
|
20
15
|
```sh
|
|
21
16
|
codex plugin marketplace add favoyang/codex-plugins
|
|
@@ -49,7 +44,7 @@ The canonical workspace is `~/.agents/taskchef`. TaskChef owns only:
|
|
|
49
44
|
AGENTS.md managed dispatcher instructions plus user additions
|
|
50
45
|
taskchef.json schema-2 Codex project index, dashboard preference, and delegation metadata
|
|
51
46
|
tasks.jsonl one task snapshot per line (schema 10; schema 4-9 migration supported)
|
|
52
|
-
.taskchef-usage.json optional mode-0600
|
|
47
|
+
.taskchef-usage.json optional mode-0600 normalized usage cache
|
|
53
48
|
```
|
|
54
49
|
|
|
55
50
|
To inspect or manually adjust the project index later, use the bootstrap skill:
|
|
@@ -356,24 +351,21 @@ will keep the feature disabled until Codex exposes a reliable supported
|
|
|
356
351
|
app-callable archive interface or guarantees CLI compatibility. The dormant
|
|
357
352
|
server path also rejects requests before discovering or invoking the CLI.
|
|
358
353
|
|
|
359
|
-
Task details
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
unavailable when its cumulative boundaries used different ccusage versions or
|
|
373
|
-
pricing modes. TaskChef displays the cumulative estimate supplied by ccusage
|
|
374
|
-
without applying a separate model-family or cache-write coverage policy.
|
|
354
|
+
Task details show chat totals and native per-turn usage from saved Codex records.
|
|
355
|
+
Historical tasks are read when needed, rather than scanned at startup. A turn
|
|
356
|
+
without a matching native Codex turn ID shows usage unavailable; its chat total
|
|
357
|
+
can still be shown. Missing logs and parent links make the known subtotal
|
|
358
|
+
incomplete. Input, cached input, output, reasoning, and total counts use Codex's
|
|
359
|
+
categories. Cached input and reasoning are subsets, not additional tokens.
|
|
360
|
+
Dollar figures are API-equivalent estimates, using the board's pricing table.
|
|
361
|
+
Unknown prices show cost unavailable or a known priced subtotal. Existing saved
|
|
362
|
+
usage projections remain readable. A partial scan cannot replace a larger known
|
|
363
|
+
historical subtotal; missing model prices cannot erase a saved priced subtotal.
|
|
364
|
+
`.taskchef-usage.json` holds the web view's
|
|
365
|
+
normalized projections; the underlying engine reuses the board disk caches.
|
|
366
|
+
|
|
375
367
|
The same detail view reports lifecycle wall-clock elapsed time independently of
|
|
376
|
-
|
|
368
|
+
token accounting. Each terminal turn shows **Elapsed** from `startedAt` to
|
|
377
369
|
`result.updatedAt`; **Total reported work** sums only valid terminal-turn
|
|
378
370
|
durations, excluding idle gaps and unfinished work. A working turn shows live
|
|
379
371
|
**Elapsed so far** without contributing to the total. This is reported
|
|
@@ -381,8 +373,7 @@ wall-clock elapsed time, not model compute time, and malformed or reversed
|
|
|
381
373
|
timestamp ranges are shown as unavailable.
|
|
382
374
|
The header shows the running TaskChef package version reported by the same
|
|
383
375
|
bounded health identity used for compatible-listener checks.
|
|
384
|
-
The Settings page
|
|
385
|
-
TaskChef resolves at runtime.
|
|
376
|
+
The Settings page identifies TaskChef as the usage provider.
|
|
386
377
|
The canonical port is normally owned by a dashboard session process initialized
|
|
387
378
|
by the TaskChef MCP before its tool transport connects. MCP recovery reuses an
|
|
388
379
|
exact-compatible same-workspace dashboard and reports its actual launcher;
|
package/docs/dashboard-ui.md
CHANGED
|
@@ -23,3 +23,18 @@ rules.
|
|
|
23
23
|
|
|
24
24
|
Check a dashboard page at desktop and narrow widths. Confirm keyboard focus,
|
|
25
25
|
control operation, reachable overflow, and a clean browser console.
|
|
26
|
+
|
|
27
|
+
### Latest-turn request and response
|
|
28
|
+
|
|
29
|
+
Running local Codex cards show the current request. Other cards show the latest
|
|
30
|
+
turn's response. Cards use a plain two-line preview without request bubbles.
|
|
31
|
+
Details pairs the same turn's request and response, each initially capped at
|
|
32
|
+
three lines with a Show more control. The request uses a right-aligned bubble.
|
|
33
|
+
Actual scheduled requests show their recorded instructions with a clock;
|
|
34
|
+
human follow-ups in scheduled chats use the normal request bubble.
|
|
35
|
+
Quoted selections render as Markdown quotes. File and image references show
|
|
36
|
+
attachment names, while generated request headings and context metadata are
|
|
37
|
+
removed from the display. Recorded input remains unchanged.
|
|
38
|
+
|
|
39
|
+
Earlier-turn PR fallbacks remain separate from this content: the status popup
|
|
40
|
+
shows `(Earlier turn PR)` below the PR link, aligned with the other row text.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<?xml version='1.0' encoding='utf-8'?>
|
|
2
|
+
<mxfile host="Electron">
|
|
3
|
+
<diagram id="main" name="Current reply lookup">
|
|
4
|
+
<mxGraphModel page="0" background="#ffffff">
|
|
5
|
+
<root>
|
|
6
|
+
<mxCell id="0" />
|
|
7
|
+
<mxCell id="1" parent="0" />
|
|
8
|
+
<mxCell id="title" value="<b>Example: find the current reply after reverting a chat</b>" vertex="1" parent="1" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;fillColor=none;strokeColor=none;fontSize=23;spacing=0;">
|
|
9
|
+
<mxGeometry as="geometry" x="40" y="20" width="1100" height="50" />
|
|
10
|
+
</mxCell>
|
|
11
|
+
<mxCell id="chat" value="<b>1. Chat C</b><hr>state_5.sqlite<br>threads.id = C<br><br>rollout_path names<br>…-C_R.jsonl" vertex="1" parent="1" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;fillColor=#edf4ff;">
|
|
12
|
+
<mxGeometry as="geometry" x="40" y="110" width="235" height="205" />
|
|
13
|
+
</mxCell>
|
|
14
|
+
<mxCell id="rollout" value="<b>2. Rollout R</b><hr>Take R from the<br>selected filename.<br><br>This is a lookup step,<br>not a database table." vertex="1" parent="1" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;fillColor=#fff8df;">
|
|
15
|
+
<mxGeometry as="geometry" x="340" y="110" width="235" height="205" />
|
|
16
|
+
</mxCell>
|
|
17
|
+
<mxCell id="turn" value="<b>3. Latest turn T</b><hr>thread_turns<br>thread_id = R<br><br>Latest rollout_ordinal<br>gives turn_id = T." vertex="1" parent="1" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;fillColor=#edf9f4;">
|
|
18
|
+
<mxGeometry as="geometry" x="640" y="110" width="235" height="205" />
|
|
19
|
+
</mxCell>
|
|
20
|
+
<mxCell id="reply" value="<b>4. Saved reply I</b><hr>thread_items<br>thread_id = R<br>turn_id = T<br>item_id = final_agent_item_id<br><br>Read item_json.text." vertex="1" parent="1" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;fillColor=#edf9f4;">
|
|
21
|
+
<mxGeometry as="geometry" x="940" y="110" width="255" height="205" />
|
|
22
|
+
</mxCell>
|
|
23
|
+
<mxCell id="edge0" parent="1" source="chat" target="rollout" edge="1" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;strokeWidth=2;">
|
|
24
|
+
<mxGeometry as="geometry" relative="1" />
|
|
25
|
+
</mxCell>
|
|
26
|
+
<mxCell id="edge1" parent="1" source="rollout" target="turn" edge="1" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;strokeWidth=2;">
|
|
27
|
+
<mxGeometry as="geometry" relative="1" />
|
|
28
|
+
</mxCell>
|
|
29
|
+
<mxCell id="edge2" parent="1" source="turn" target="reply" edge="1" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;strokeWidth=2;">
|
|
30
|
+
<mxGeometry as="geometry" relative="1" />
|
|
31
|
+
</mxCell>
|
|
32
|
+
<mxCell id="note" value="<b>The chat ID stays C. The selected history may change to R.</b><br><br>Ordinary filename: …-C.jsonl → history lookup uses C.<br>After revert: …-C_R.jsonl → history lookup uses R. Old rows under C may remain.<br>Real IDs are UUIDs; compressed .jsonl.zst files use the same rule.<br>If no final reply is linked yet, TaskChef reads the latest saved agent message in turn T.<br>These arrows show lookup steps, not SQL foreign-key constraints." vertex="1" parent="1" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;fillColor=#f7f9fc;">
|
|
33
|
+
<mxGeometry as="geometry" x="40" y="365" width="1155" height="205" />
|
|
34
|
+
</mxCell>
|
|
35
|
+
</root>
|
|
36
|
+
</mxGraphModel>
|
|
37
|
+
</diagram>
|
|
38
|
+
</mxfile>
|
|
Binary file
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<?xml version='1.0' encoding='utf-8'?>
|
|
2
|
+
<mxfile host="Electron">
|
|
3
|
+
<diagram id="main" name="Files and tables">
|
|
4
|
+
<mxGraphModel page="0" background="#ffffff">
|
|
5
|
+
<root>
|
|
6
|
+
<mxCell id="0" />
|
|
7
|
+
<mxCell id="1" parent="0" />
|
|
8
|
+
<mxCell id="title" value="<b>Codex storage: which table belongs where</b>" vertex="1" parent="1" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;fillColor=none;strokeColor=none;fontSize=24;spacing=0;">
|
|
9
|
+
<mxGeometry as="geometry" x="40" y="20" width="1030" height="45" />
|
|
10
|
+
</mxCell>
|
|
11
|
+
<mxCell id="state" value="<b>state_5.sqlite — chat inventory</b>" vertex="1" parent="1" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;swimlane;container=1;startSize=48;fillColor=#edf4ff;swimlaneFillColor=#edf4ff;">
|
|
12
|
+
<mxGeometry as="geometry" x="40" y="90" width="470" height="500" />
|
|
13
|
+
</mxCell>
|
|
14
|
+
<mxCell id="threads" value="<b>threads</b><hr>id: stable chat ID<br>name / title, project folder, archived<br>rollout_path: selected history file<br>model, tokens, timestamps" vertex="1" parent="state" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;">
|
|
15
|
+
<mxGeometry as="geometry" x="20" y="65" width="430" height="170" />
|
|
16
|
+
</mxCell>
|
|
17
|
+
<mxCell id="children" value="<b>thread_spawn_edges</b><hr>parent_thread_id → child_thread_id<br>Chat IDs; used to hide subagents<br>and count direct children" vertex="1" parent="state" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;">
|
|
18
|
+
<mxGeometry as="geometry" x="20" y="265" width="430" height="140" />
|
|
19
|
+
</mxCell>
|
|
20
|
+
<mxCell id="history" value="<b>thread_history_1.sqlite — turns and messages</b>" vertex="1" parent="1" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;swimlane;container=1;startSize=48;fillColor=#edf9f4;swimlaneFillColor=#edf9f4;">
|
|
21
|
+
<mxGeometry as="geometry" x="550" y="90" width="520" height="500" />
|
|
22
|
+
</mxCell>
|
|
23
|
+
<mxCell id="turns" value="<b>thread_turns</b><hr>thread_id: selected rollout ID<br>turn_id, status, start / end time<br>first_user_item_id, final_agent_item_id" vertex="1" parent="history" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;">
|
|
24
|
+
<mxGeometry as="geometry" x="20" y="60" width="480" height="140" />
|
|
25
|
+
</mxCell>
|
|
26
|
+
<mxCell id="items" value="<b>thread_items</b><hr>thread_id + turn_id + item_id<br>item_type, item_json: saved message or tool data" vertex="1" parent="history" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;">
|
|
27
|
+
<mxGeometry as="geometry" x="20" y="225" width="480" height="120" />
|
|
28
|
+
</mxCell>
|
|
29
|
+
<mxCell id="projection" value="<b>thread_history_projection_state</b><hr>Rollout ID, next byte offset and ordinal<br>Tracks history import; not queried by the board" vertex="1" parent="history" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;">
|
|
30
|
+
<mxGeometry as="geometry" x="20" y="365" width="480" height="110" />
|
|
31
|
+
</mxCell>
|
|
32
|
+
<mxCell id="jsonl" value="<b>Selected rollout .jsonl / .jsonl.zst file</b><hr>Ordered records: type, timestamp, payload<br>Examples: session_meta, event_msg, response_item<br>Saved history used to build the history database.<br>TaskChef reads logs only for optional selected-chat details." vertex="1" parent="1" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;fillColor=#f4effa;">
|
|
33
|
+
<mxGeometry as="geometry" x="40" y="620" width="680" height="155" />
|
|
34
|
+
</mxCell>
|
|
35
|
+
<mxCell id="scope" value="<b>Reading this diagram</b><br><br>Boxes inside a database are tables.<br>The log is a separate file.<br>Selected fields only; full notes are in the storage guide." vertex="1" parent="1" style="whiteSpace=wrap;html=1;fontSize=16;fontColor=#172b4d;align=left;verticalAlign=top;spacing=14;fillColor=#ffffff;strokeColor=#9caec2;fillColor=none;strokeColor=none;">
|
|
36
|
+
<mxGeometry as="geometry" x="750" y="620" width="320" height="155" />
|
|
37
|
+
</mxCell>
|
|
38
|
+
</root>
|
|
39
|
+
</mxGraphModel>
|
|
40
|
+
</diagram>
|
|
41
|
+
</mxfile>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/docs/mcp-app.md
CHANGED
|
@@ -1,11 +1,283 @@
|
|
|
1
|
-
# TaskChef sidebar
|
|
1
|
+
# TaskChef sidebar
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The public app name is **TaskChef**. “TaskChef Next” remains the internal project name.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
TaskChef requires Node.js 22.18+, 23.2+, or 24+ for read-only SQLite connections. The rest of TaskChef continues to support the package's Node.js 18 minimum. An unsupported Node runtime produces a fatal version error before TaskChef opens a database.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Call `open_taskchef_board` in Codex to open **TaskChef**. In a sidebar or fullscreen host view, it shows the read-only board, filters, and chat details. In an inline chat view, it shows a short recent-chat list with direct **Open chat** actions. The app uses local Codex metadata and does not modify the TaskChef dispatcher workspace.
|
|
8
8
|
|
|
9
|
-
The
|
|
9
|
+
The server reads all eligible top-level chats from `~/.codex/state_5.sqlite` and their latest turn from `~/.codex/thread_history_1.sqlite`. Both SQLite connections are read-only. It excludes typed subagents and Guardian reviews, JSON subagent sources, known `thread_spawn_edges` children, chats with no turn record. Standalone `source=exec` and regular `source=cli` chats remain eligible in the collector, but the view hides them by default. The plugin details page has native switches for Show exec sessions, Show CLI sessions, and Show archived chats. The MCP server stores these choices in `~/.agents/taskchef-next/settings.json`, shared by all TaskChef views. Each visible poll reads the current settings, even when the database snapshot is unchanged. These choices apply to the board, counts, project choices, Details eligibility, and the compact inline view. Archived chats are hidden by default and use their own Archived column when shown. Details shows the recorded lifetime direct child count. Names and titles can contain user text; the app prefers name, then title, then a chat ID fallback.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
The board uses these queue labels:
|
|
12
|
+
|
|
13
|
+
| Column | Rule |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| Scheduled | Active schedule with a normally completed scheduled prompt, a completed human turn whose PRs are all merged, or a human turn acknowledged by a drop into Scheduled. |
|
|
16
|
+
| Running | Latest selected turn is `inProgress`. There is no age cutoff. |
|
|
17
|
+
| Waiting for input/review | Latest turn completed, interrupted, or failed and the chat remains open. Interrupted or failed turns have an Interrupted tag. This does not prove Codex asked a question. |
|
|
18
|
+
| Done | A chat is marked Done in TaskChef, or its latest turn completed and all attached PRs are confirmed merged. Manual marks require any attached PRs to be confirmed merged. Both require no active schedule. This does not prove the larger task succeeded. |
|
|
19
|
+
| Archived | Chat is archived in Codex. Hidden by default; separate from Done. |
|
|
20
|
+
| Unverified | An unrecognized turn state. |
|
|
21
|
+
|
|
22
|
+
Archived takes precedence. Manual Done marks apply only without active schedules; every attached PR must be confirmed merged. A normally completed scheduled prompt returns to Scheduled regardless of PR status. After a completed human turn, attached PRs determine Done or Waiting for ordinary chats, and Scheduled or Waiting for actively scheduled chats. A manual acknowledgement returns an idle scheduled human turn to Scheduled. Active schedules remain visible as a badge even when the chat is Running or Waiting. After ordinary input, a completed scheduled chat goes to Waiting. The app reads active heartbeat links from `automations/*/automation.toml` and the latest first input from `thread_items`. It checks the observed `<heartbeat><automation_id>` wrapper; this internal format can change. Missing or unrecognized input markers use Waiting rather than guessing Scheduled. Schedule read errors appear as a warning. Paused schedules do not give an active schedule badge. Cron run history is not treated as an active heartbeat chat.
|
|
23
|
+
|
|
24
|
+
**Mark Done** changes only `~/.agents/taskchef-next/done.json`, using a lock and atomic write. The mark is bound to the current turn ID, so a new turn resets it. There is no Reopen button; send a new prompt in Codex to start another turn. Archived, in-progress, and actively scheduled chats cannot be marked Done from this app. PR-linked chats require confirmed merge status before a Done drop is allowed. Codex databases, rollout files, and dispatcher task reports are never modified. An unreadable or invalid Done state file produces a separate local-state error and blocks Done changes; the app preserves the file and does not call it a Codex database failure. The inferred input source and display-formatted request are returned to the app; original recorded input is not modified. See [the research note](taskchef-next-status-research.md) for the optional Luna judgment route.
|
|
25
|
+
|
|
26
|
+
Both databases and the expected tables must be available. Missing or incompatible databases, or failed queries, produce a fatal app error and clear the visible inventory. Rollout files never replace database inventory or status. The selected-chat detail may optionally read a bounded head and tail of the JSONL file at its database `rollout_path` for message counts and byte coverage. The path stays server-side. This detail never changes the database-derived status. If the path or file is absent or cannot be parsed, database metadata remains available. The board returns bounded latest-turn request and response excerpts for cards. Details returns the full recorded request and response for that turn, not the whole conversation. All reads are local and read-only.
|
|
27
|
+
|
|
28
|
+
In sidebar or fullscreen mode, the mounted app requests a fresh snapshot every five seconds while `document.visibilityState` is `visible`. It pauses polling when the document becomes hidden and refreshes immediately when visible again. If Codex only hides a mounted iframe with CSS, the document may remain visible and polling may continue. Inline mode loads once and does not poll; manual **Refresh** remains available. Switching from inline to a full view starts polling and requests a fresh snapshot. Whether the host hides or unmounts the app is host-dependent. Mount, React unmount, document `visibilitychange`, window `pagehide`, display-mode, and host-teardown events are logged as single-string browser console warnings with the `[TaskChef] TaskChef lifecycle:` prefix, followed by JSON with only `visibility` and `displayMode`. For browser debugging, right-click the sidebar app and select **Dev Tools** in Codex. The console shows these lifecycle events. Repeated events are logged individually. `pagehide` can indicate iframe navigation or disposal even when React cleanup does not run. It does not prove that a sidebar switch disposed the iframe: the host may keep the iframe mounted, and a destroyed iframe may not deliver a final event.
|
|
29
|
+
|
|
30
|
+
The UI is bundled as the `ui://taskchef/task-board/v3/<package-version>` MCP resource. The GitHub settings resource also includes the package version. Resource registration and tool metadata share these release-specific URIs, so a new release advertises a different host UI cache key. This does not live-reload an already-open sidebar. Same-version preview edits keep their URI and use explicit sidebar Refresh. Build the UI with `npm run build:mcp-app`; run `npm run check:mcp-app` and the relevant tests before release. Use Codex’s sidebar context-menu **Refresh** to reload its HTML and restart the widget. The app’s own Refresh button updates board data only.
|
|
31
|
+
|
|
32
|
+
The selected rollout filename determines the history lookup ID. Ordinary chats use the chat ID. After a revert, Codex keeps the chat ID but selects a filename ending in `<chat-id>_<rollout-id>.jsonl`. `thread_history_1.sqlite.thread_turns.thread_id` and `thread_items.thread_id` then use the rollout ID. The scanner follows `state_5.sqlite.threads.rollout_path` to select that ID; it does not open logs to get board status. For paginated history, a missing or unrecognized selected filename or invalid timestamp produces an explicit metadata error; old chat-ID rows are never substituted. A canonical filename must also identify the same stable chat. Legacy histories may use noncanonical filenames and retain Codex's stable-ID lookup rule.
|
|
33
|
+
|
|
34
|
+
Old history rows can remain under the original chat ID. Reading those rows instead of the selected rollout can show an old interrupted turn. This was a TaskChef lookup bug, not evidence that Codex's database was stale.
|
|
35
|
+
|
|
36
|
+
## Query and refresh rules
|
|
37
|
+
|
|
38
|
+
Every visible-document poll checks for database changes, at five-second intervals. Unchanged database records are cached; there is no timestamp cursor or changed-row query. Concurrent requests share an in-flight refresh. Showing the document again or clicking Refresh requests an immediate refresh.
|
|
39
|
+
|
|
40
|
+
Each database reload reads the eligible chat metadata, then runs `WHERE thread_id = ? ORDER BY rollout_ordinal DESC LIMIT 1` for each selected rollout ID. Codex's existing `idx_thread_turns_page` index supports this lookup. It no longer ranks every turn in the history table. The latest first input and linked final reply are read by their full primary keys: rollout ID, turn ID, and item ID; it never scans all message bodies. This server creates no indexes and writes nothing to Codex.
|
|
41
|
+
|
|
42
|
+
There is no 300-chat cap. All eligible chats with a current-rollout turn are included. Done cards still expand in small groups in Board view. This reduces the initial rendered board while keeping complete counts. List view includes all matching chats. If larger installations become slow, measure database time and rendering separately before adding pagination.
|
|
43
|
+
|
|
44
|
+
See the [storage schema](taskchef-next-storage.md), including the editable diagram and PNG.
|
|
45
|
+
|
|
46
|
+
### TaskChef card content
|
|
47
|
+
|
|
48
|
+
Cards show the chat title, project, a plain two-line preview, activity time, and Open chat. Running cards show the current request; other cards show the latest response. Excerpts are capped at 2,000 characters. Actual scheduled inputs display the recorded heartbeat instructions, even after the schedule is removed. No model summarizes or judges the text.
|
|
49
|
+
|
|
50
|
+
Details pairs the full recorded latest-turn request and response, each initially capped at three lines with independent Show more/Show less controls. Selected quotes render as Markdown quotes and file/image references as named attachments. Generated request headings and context metadata are hidden in the display. Recorded input remains unchanged. Raw HTML is ignored and relative file links appear as text.
|
|
51
|
+
|
|
52
|
+
Time labels use compact relative dates by default, with calendar dates available in settings. Schedule and PR icons appear in the status line. Queue reasons and lifetime subagent counts remain in Details. See [dashboard UI](dashboard-ui.md) for the presentation contract.
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
### Database change checks
|
|
58
|
+
|
|
59
|
+
Every visible five-second poll reads `PRAGMA data_version` on the same two read-only connections. The first poll, manual Refresh, or a changed counter runs the indexed database queries and replaces the cached records. An unchanged poll reuses those records; it does not query chat, turn, or item tables. Counters are captured before queries so commits during a read cause another read on the next poll. Neither connection holds a transaction between polls.
|
|
60
|
+
|
|
61
|
+
Every poll separately reads and parses `automations/*/automation.toml`. For the Done file, each poll checks file identity, modification/change timestamps, and size; it reads and parses contents only when those metadata change. Manual Refresh also rereads the contents. A missing file means no manual marks. Added, removed, paused, or changed schedules and Done marks therefore apply on the next poll, including when the databases are unchanged. Queue labels are rebuilt from cached records and current schedules/Done marks. An open chat whose latest selected turn is `inProgress` remains Running regardless of timestamp age. Time passing alone never changes its queue label.
|
|
62
|
+
|
|
63
|
+
Each poll checks both database file identities. Replacement reconnects and reloads; missing files or database/query errors discard the cache and clear the board with a fatal error. A later poll retries. Server shutdown closes the connections. The scan readout reports whether database records were queried or reused. This skips unchanged snapshots; it does not fetch only changed rows.
|
|
64
|
+
|
|
65
|
+
PR-based Done labels use saved Codex attachments and authenticated GitHub status. After a completed turn, all attached PRs confirmed merged means Scheduled while a schedule is active, otherwise Done. An unmerged or unavailable PR means Waiting for review. See [GitHub setup](taskchef-next-github.md); registration and real sign-in remain required.
|
|
66
|
+
|
|
67
|
+
### Native plugin settings
|
|
68
|
+
|
|
69
|
+
TaskChef advertises `openai/settings` with `taskchef_settings_read` and
|
|
70
|
+
`taskchef_settings_update`. The read tool returns the schema, current values,
|
|
71
|
+
and Chat visibility, Card display, and GitHub groups. The update tool accepts
|
|
72
|
+
changed Boolean preferences and preserves other values. **Show usage on cards** defaults to on; the other switches default
|
|
73
|
+
to off. Disable it to hide token counts and estimated cost from cards and their
|
|
74
|
+
status popups. Chat details always keeps its Usage section. Card timestamps default to compact ages: `<1m`, `1m`, `2h`, `5d`,
|
|
75
|
+
and `1mo` (30-day months). Enable **Show calendar dates** to use the previous
|
|
76
|
+
local format: `2:30PM` today, `Yesterday`, or `Oct 3rd`. Running cards keep
|
|
77
|
+
their hourglass and elapsed work duration in either mode.
|
|
78
|
+
Updates use the existing local workspace lock and atomic file writer. Codex
|
|
79
|
+
SQLite files remain read-only. Invalid settings fail visibly rather than
|
|
80
|
+
silently resetting preferences.
|
|
81
|
+
|
|
82
|
+
Open the installed TaskChef plugin details page to edit its native
|
|
83
|
+
settings. The sidebar receives them at its next visible refresh, or immediately
|
|
84
|
+
when Refresh is clicked. Settings persist across sidebar and embedded views.
|
|
85
|
+
The old browser-local visibility keys are no longer used; configure the native
|
|
86
|
+
switches once after upgrading. The Board/List choice stays browser-local.
|
|
87
|
+
See the [OpenAI structured settings specification](https://github.com/openai/mcp-extensions/blob/main/docs/spec.md#structured-settings).
|
|
88
|
+
|
|
89
|
+
### Board presentation
|
|
90
|
+
|
|
91
|
+
TaskChef exposes only Board. The List implementation remains in the
|
|
92
|
+
source, but the Board/List selector is hidden and saved List choices are
|
|
93
|
+
ignored. Interrupted chats appear in Waiting for input/review with an
|
|
94
|
+
Interrupted tag; their recorded status remains available in Details.
|
|
95
|
+
Scheduled, Running, Waiting, and Done remain visible when empty, with a short
|
|
96
|
+
message specific to each column. This keeps their positions steady when chats
|
|
97
|
+
change state or filters change. Archived remains an optional column.
|
|
98
|
+
|
|
99
|
+
The header Settings icon calls the app-only `taskchef_app_open_settings` tool.
|
|
100
|
+
The server resolves this installed plugin's marketplace catalog file and requests its
|
|
101
|
+
native details page through the operating system's Codex URL handler, using the
|
|
102
|
+
same method as Open chat. It does not depend on the MCP view's link handler.
|
|
103
|
+
An unresolved plugin location or failed desktop opener produces a notification.
|
|
104
|
+
The deep link is based on the installed desktop parser, not the published MCP
|
|
105
|
+
settings specification. A successful opener only confirms that navigation was
|
|
106
|
+
requested; the native page still needs a manual check where host automation is
|
|
107
|
+
unavailable.
|
|
108
|
+
|
|
109
|
+
### Project picker
|
|
110
|
+
|
|
111
|
+
The searchable picker uses `projects` and `project_roots` from `state_5.sqlite`,
|
|
112
|
+
including saved projects that have no visible chats. Project names and order
|
|
113
|
+
come from the saved registry. Chats use `threads.project_id` first. Older
|
|
114
|
+
assignments use the desktop's project ID migration map and project root hints
|
|
115
|
+
from `.codex-global-state.json`. Git's `.git` pointer and `commondir` identify a
|
|
116
|
+
worktree's original checkout when no assignment is saved. Nested folders match
|
|
117
|
+
the most specific saved project root. Working folders remain in chat details.
|
|
118
|
+
|
|
119
|
+
Projectless chat IDs, folders under `~/Documents/Codex`, and folders that do not
|
|
120
|
+
match a saved project share the **No project** entry. **All projects** clears the
|
|
121
|
+
filter. The dropdown has folder icons, a check for the selection, search by name
|
|
122
|
+
or path, and keyboard navigation. It does not create projects.
|
|
123
|
+
|
|
124
|
+
Project settings changes are checked on the next visible poll. The desktop
|
|
125
|
+
settings file is parsed only when its file stamp changes. Its unrelated fields
|
|
126
|
+
are never returned to the view. Invalid project metadata produces a visible
|
|
127
|
+
error; it does not silently replace the saved inventory.
|
|
128
|
+
|
|
129
|
+
### Reply image covers
|
|
130
|
+
|
|
131
|
+
TaskChef board cards feature the first supported Markdown image in the latest
|
|
132
|
+
selected assistant reply, above the title. The full saved reply is inspected,
|
|
133
|
+
even when the image occurs after the 2,000-character text excerpt. Code examples
|
|
134
|
+
and raw HTML do not count as images. No image is borrowed from an older turn.
|
|
135
|
+
|
|
136
|
+
Local covers load when near the visible area. Remote images remain caption
|
|
137
|
+
links in the reply; the sidebar does not load them automatically. Local absolute
|
|
138
|
+
paths load through an app-only MCP
|
|
139
|
+
tool tied to the chat, turn and saved image URL. Local PNG, JPEG, GIF and WebP
|
|
140
|
+
files up to 4 MiB are supported; no remote URL is fetched by the MCP server.
|
|
141
|
+
Missing, oversized, unsupported or failed image covers are hidden.
|
|
142
|
+
Click a cover to open chat Details. Text and navigation remain available.
|
|
143
|
+
The Markdown text renderer still shows image captions rather than inline images.
|
|
144
|
+
|
|
145
|
+
This follows Trello’s image-above-title cover option:
|
|
146
|
+
[Add a card cover](https://support.atlassian.com/trello/docs/what-is-a-card-cover).
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
### TaskChef notifications
|
|
150
|
+
|
|
151
|
+
The bell beside Settings opens the notification center. It has All and Unread
|
|
152
|
+
filters, Mark all read, and Clear all. Click a chat message to open Details and
|
|
153
|
+
mark it read. New messages appear in a five-second overlay toast; the board does
|
|
154
|
+
not move. At most three toasts are shown at once. Saved messages do not replay
|
|
155
|
+
as toasts when a view opens.
|
|
156
|
+
|
|
157
|
+
- A new completed turn with a verified ordinary input creates an unread “ready for input or review” message.
|
|
158
|
+
- An interrupted or failed turn creates an unread interruption message, including scheduled failures.
|
|
159
|
+
- Routine scheduled completions stay quiet.
|
|
160
|
+
- Mark Done creates a confirmation that is already read. It does not increase the unread badge.
|
|
161
|
+
- Opening a chat, copying an ID, and refreshing have no success message. Action failures use the same center.
|
|
162
|
+
- Database read errors remain visible on the board until recovery.
|
|
163
|
+
|
|
164
|
+
The MCP process stores the newest 100 messages, read status, and per-chat turn
|
|
165
|
+
watermarks in `notifications.json` beside its settings file. Views share this
|
|
166
|
+
file through the existing lock and atomic writer; no daemon is added. Clear all
|
|
167
|
+
removes messages but keeps watermarks, so polling cannot replay cleared events.
|
|
168
|
+
The first successful scan establishes a quiet baseline. Subsequent visible
|
|
169
|
+
five-second refreshes reconcile changes, including cached database snapshots.
|
|
170
|
+
Exec and CLI visibility settings also suppress notifications from hidden sources;
|
|
171
|
+
project and date filters only change the board. Archived chats stay quiet. Saved notifications can still open Details for a chat
|
|
172
|
+
that is now hidden by Settings.
|
|
173
|
+
|
|
174
|
+
When views are closed or hidden, no background scan runs. A later refresh can
|
|
175
|
+
notice the latest saved turn change. It cannot reconstruct intermediate turns
|
|
176
|
+
that finished while no view was checking. Notifications are local app messages;
|
|
177
|
+
this feature does not send OS notifications. A damaged notification file fails
|
|
178
|
+
visibly and is preserved for repair.
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
## Development plugin identity
|
|
182
|
+
|
|
183
|
+
Keep the released **TaskChef** plugin and a separate **TaskChef Dev** plugin.
|
|
184
|
+
The development copy must already use the plugin ID `taskchef-next`.
|
|
185
|
+
Before installing it through a local marketplace, run:
|
|
186
|
+
|
|
187
|
+
```sh
|
|
188
|
+
node scripts/prepare-mcp-app-preview.js /path/to/staging/plugin
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
The script sets the copied plugin’s display name to **TaskChef Dev** and
|
|
192
|
+
normalizes its MCP server key to `taskchef-next`. It refuses release manifests. The sidebar tool reads its
|
|
193
|
+
name from that manifest. The release checkout and release package keep
|
|
194
|
+
**TaskChef**. Run this step again whenever rebuilding the development package.
|
|
195
|
+
Do not register a standalone preview MCP server alongside these two plugins.
|
|
196
|
+
Restart Codex after changes to plugin identity or backend code.
|
|
197
|
+
|
|
198
|
+
## Local UI review without restarting Codex
|
|
199
|
+
|
|
200
|
+
For UI-only changes, update the HTML in the installation that the running MCP
|
|
201
|
+
server uses. Do not install a new preview version for each style change. Codex
|
|
202
|
+
can keep the old MCP process running while a plugin update removes its old
|
|
203
|
+
folder. Its next resource read then fails with `ENOENT`, and the sidebar shows
|
|
204
|
+
“Couldn't refresh app”.
|
|
205
|
+
|
|
206
|
+
From the source checkout, run:
|
|
207
|
+
|
|
208
|
+
```sh
|
|
209
|
+
npm run update:mcp-app-preview -- /path/to/the/running/taskchef-next/version
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
The helper builds the UI, checks the target is TaskChef, and replaces only
|
|
213
|
+
`src/mcp-app/dist/index.html` atomically. It preserves the plugin version, server
|
|
214
|
+
code, dependencies, and local data. It refuses missing or redirected HTML paths.
|
|
215
|
+
Then right-click **TaskChef Dev** in the Codex sidebar and choose **Refresh**.
|
|
216
|
+
Switching sidebar apps only hides the loaded view; it does not reload its HTML.
|
|
217
|
+
|
|
218
|
+
Use the current installation’s version folder. If Refresh reports a missing
|
|
219
|
+
older version in the desktop logs, the MCP process still uses that old folder;
|
|
220
|
+
updating a different folder will not repair it. A full plugin/runtime update is
|
|
221
|
+
still needed for server code or dependency changes. This helper is for local
|
|
222
|
+
preview review, not production plugin distribution.
|
|
223
|
+
|
|
224
|
+
## GitHub PR status
|
|
225
|
+
|
|
226
|
+
TaskChef reads saved PR attachments and can connect to GitHub with device
|
|
227
|
+
sign-in. See [GitHub setup and board rules](taskchef-next-github.md).
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
### Chat search
|
|
231
|
+
|
|
232
|
+
**Search chats** matches chat titles, saved reply excerpts, project names,
|
|
233
|
+
known project repositories, and latest-turn PR titles and repository names.
|
|
234
|
+
Matching ignores letter case; every word must match somewhere in those fields.
|
|
235
|
+
Project and time filters still apply.
|
|
236
|
+
|
|
237
|
+
Search uses the current snapshot. PR titles become searchable after GitHub
|
|
238
|
+
loads them; repository names from saved PR URLs are searchable before status
|
|
239
|
+
loads. Search does not add a separate GitHub lookup or scan local Git remotes.
|
|
240
|
+
The existing visible-card refresh still runs when the displayed cards change.
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
## Dragging chats between queues
|
|
244
|
+
|
|
245
|
+
Every card can drag. Valid destination columns are highlighted during dragging, with padding between
|
|
246
|
+
the rounded column border and its cards.
|
|
247
|
+
Done and Scheduled moves require a Waiting card (including Interrupted cards).
|
|
248
|
+
Cards from any column can drop into Archived to show the archive instructions. Dropping a chat
|
|
249
|
+
without an active schedule into Done uses the existing local Done mark.
|
|
250
|
+
Attached PRs must all be confirmed merged by the server. The mark also records
|
|
251
|
+
the confirmed URLs; a newly attached PR invalidates that acknowledgement.
|
|
252
|
+
Blocked drops leave the card in place and explain the rule through TaskChef
|
|
253
|
+
notifications. An active scheduled chat with a human turn can return to
|
|
254
|
+
Scheduled. This acknowledgement is stored under `scheduled:<chat-id>` in the
|
|
255
|
+
local mark file and is bound to the selected turn ID. It expires when a new
|
|
256
|
+
turn starts and does not change or pause the automation.
|
|
257
|
+
|
|
258
|
+
Dropping into the visible Archived column opens instructions and an Open chat
|
|
259
|
+
button. The user archives the chat through Codex's top-right **… → Archive**
|
|
260
|
+
menu. This sidebar does not invoke CLI archiving, and it does not show an
|
|
261
|
+
Archive drop target when the Archived column is hidden.
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
The first board fetch shows Loading… in empty columns. Later empty columns use
|
|
265
|
+
their normal queue messages. Cards slide between positions when the board updates;
|
|
266
|
+
reduced-motion preferences disable the slide. Opening the notification center
|
|
267
|
+
marks notifications read as they become visible in its scrollable panel.
|
|
268
|
+
|
|
269
|
+
The Waiting column is titled Waiting for review. Hovering the notification bell
|
|
270
|
+
opens the center; moving into its panel keeps it open, and leaving closes it after
|
|
271
|
+
a short delay. The button remains usable with a keyboard or touch.
|
|
272
|
+
|
|
273
|
+
The palette icon after Refresh opens Appearance settings on hover, keyboard activation, or tap. DAY, NIGHT (default), and SYSTEM control light/dark appearance; the separate Theme list offers ChatGPT and 29 Codex presets. Only presets with a native variant for the current appearance are listed. Theme selections are remembered separately for Light and Dark in `taskchef.app.visualTheme.light` and `taskchef.app.visualTheme.dark`; appearance uses `taskchef.app.theme`. The previous Default selection maps to ChatGPT. Existing light/dark/system choices are preserved. System follows operating-system appearance.
|
|
274
|
+
|
|
275
|
+
TaskChef's selected appearance takes priority over a host-applied inline `color-scheme`. Verify Light inside a dark host as well as in a standalone browser: the page, cards, and controls must change together.
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
The palette seeds live in `src/mcp-app/react/themes.ts`. They mirror the desktop
|
|
279
|
+
registry's surface, ink, accent, contrast, semantic colors, and font families. TaskChef derives
|
|
280
|
+
its cards, controls, borders, and elevated surfaces from those seeds. Links and
|
|
281
|
+
small muted text are adjusted when needed to meet a 4.5:1 contrast ratio on the
|
|
282
|
+
UI surfaces. Native font families use locally available fonts with system fallbacks. Font assets are not copied from the desktop application. Palette definitions ship with TaskChef; opening the board does not
|
|
283
|
+
read the installed desktop application or fetch theme files from the network.
|