taskchef 8.7.0 → 9.0.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 +7 -10
- package/.mcp.json +3 -2
- package/README.md +31 -158
- package/docs/mcp-app.md +21 -4
- package/docs/spec.md +38 -746
- package/docs/taskchef-next-storage.md +2 -2
- package/index.js +2 -99
- package/package.json +12 -49
- package/skills/delegate/SKILL.md +44 -0
- package/skills/delegate/agents/openai.yaml +4 -0
- package/src/codex-app.js +3 -152
- package/src/codex-session-scanner.js +2 -2
- package/src/file-lock.js +25 -0
- package/src/mcp-app/react/NextTaskDetail.test.tsx +1 -1
- package/src/mcp-app/react/NextTaskDetail.tsx +8 -8
- package/src/mcp-app/react/main.test.tsx +3 -3
- package/src/mcp-app/react/main.tsx +7 -7
- package/src/mcp-app.js +4 -4
- package/src/mcp.js +4 -542
- package/src/next-cache.js +2 -2
- package/src/next-github.js +3 -3
- package/src/next-notifications.js +2 -2
- package/src/{dashboard/react → ui}/components/CardStatusIcons.tsx +1 -1
- package/src/{dashboard/react → ui}/components/GitHubLinks.tsx +1 -1
- package/src/{dashboard/react → ui}/components/LinkedText.tsx +1 -1
- package/src/{dashboard/react → ui}/components/RelativeTime.test.tsx +1 -1
- package/src/{dashboard/react → ui}/components/RelativeTime.tsx +1 -1
- package/src/{dashboard/react → ui}/components/ReplyImagePreview.test.tsx +1 -1
- package/src/{dashboard/react → ui}/components/TaskBoard.tsx +1 -1
- package/src/{dashboard/react → ui}/components/TaskCard.tsx +1 -1
- package/src/{dashboard/react → ui}/components/TurnContent.tsx +1 -1
- package/src/{dashboard/react → ui}/presentation.ts +1 -1
- package/src/version.js +2 -1
- package/BACKLOG.md +0 -48
- package/assets/e2e-benchmark-example.json +0 -50
- package/assets/taskchef-dispatcher-instructions.md +0 -44
- package/bin/taskchef.js +0 -20
- package/docs/advanced-guide.md +0 -497
- package/docs/dashboard-lifecycle.md +0 -149
- package/docs/dashboard-ui.md +0 -40
- package/docs/firstmate-taskchef-comparison.md +0 -283
- package/docs/images/ccusage-token-consumption.png +0 -0
- package/docs/images/dashboard-identity.jpg +0 -0
- package/docs/images/dashboard-token-pending.jpg +0 -0
- package/docs/images/interrupted-turn-recovery.jpg +0 -0
- package/docs/images/notification-event-snapshots.jpg +0 -0
- package/docs/images/readme-board.png +0 -0
- package/docs/images/readme-completed.png +0 -0
- package/docs/images/readme-list.png +0 -0
- package/docs/images/readme-needs-input.png +0 -0
- package/docs/images/readme-roles.png +0 -0
- package/docs/images/reported-work-duration-desktop.jpg +0 -0
- package/docs/images/reported-work-duration-mobile.jpg +0 -0
- package/docs/images/result-history-dashboard.jpg +0 -0
- package/docs/images/taskchef-pr-icon-comparison.jpg +0 -0
- package/docs/images/taskchef-unified-status-popup.jpg +0 -0
- package/docs/workflows.md +0 -476
- package/mcp/dashboard-session.js +0 -51
- package/scripts/benchmark-dispatch-prepare.js +0 -90
- package/scripts/e2e-benchmark.js +0 -206
- package/scripts/roles/resolve_roles.py +0 -293
- package/skills/taskchef-bootstrap/SKILL.md +0 -96
- package/skills/taskchef-bootstrap/agents/openai.yaml +0 -4
- package/skills/taskchef-bootstrap/references/project-index.md +0 -154
- package/skills/taskchef-copilot/SKILL.md +0 -75
- package/skills/taskchef-copilot/agents/openai.yaml +0 -4
- package/skills/taskchef-dashboard/SKILL.md +0 -24
- package/skills/taskchef-dashboard/agents/openai.yaml +0 -4
- package/skills/taskchef-delegate/SKILL.md +0 -102
- package/skills/taskchef-delegate/agents/openai.yaml +0 -4
- package/skills/taskchef-delegate/references/model-roles.md +0 -29
- package/skills/taskchef-executor/SKILL.md +0 -154
- package/skills/taskchef-executor/agents/openai.yaml +0 -4
- package/skills/taskchef-executor/references/compatibility.md +0 -22
- package/skills/taskchef-executor/references/ending-actions.md +0 -26
- package/src/backups.js +0 -359
- package/src/cli.js +0 -733
- package/src/config-audit.js +0 -99
- package/src/config-mutations.js +0 -106
- package/src/dashboard/actions.js +0 -136
- package/src/dashboard/app.js +0 -1172
- package/src/dashboard/dist/app.js +0 -269
- package/src/dashboard/dist/app.js.map +0 -1
- package/src/dashboard/dist/index.html +0 -16
- package/src/dashboard/dist/styles.css +0 -1
- package/src/dashboard/index.html +0 -148
- package/src/dashboard/react/App.test.tsx +0 -346
- package/src/dashboard/react/App.tsx +0 -515
- package/src/dashboard/react/api.test.ts +0 -40
- package/src/dashboard/react/api.ts +0 -103
- package/src/dashboard/react/components/ActivityTimeline.tsx +0 -118
- package/src/dashboard/react/components/ModelSettings.test.tsx +0 -180
- package/src/dashboard/react/components/ModelSettings.tsx +0 -106
- package/src/dashboard/react/components/NotificationCenter.test.tsx +0 -76
- package/src/dashboard/react/components/NotificationCenter.tsx +0 -111
- package/src/dashboard/react/components/PullRequestBadges.tsx +0 -18
- package/src/dashboard/react/components/TaskDetail.test.tsx +0 -255
- package/src/dashboard/react/components/TaskDetail.tsx +0 -271
- package/src/dashboard/react/components/UsagePanel.tsx +0 -96
- package/src/dashboard/react/index.html +0 -15
- package/src/dashboard/react/main.tsx +0 -12
- package/src/dashboard/react/overlay-state.test.ts +0 -110
- package/src/dashboard/react/overlay-state.ts +0 -60
- package/src/dashboard/react/presentation.test.tsx +0 -571
- package/src/dashboard/styles.css +0 -261
- package/src/dashboard-control.js +0 -34
- package/src/dashboard-manager.js +0 -339
- package/src/dashboard-session-process.js +0 -88
- package/src/dashboard-session.js +0 -86
- package/src/dashboard.js +0 -1303
- package/src/delegation.js +0 -277
- package/src/github.js +0 -107
- package/src/model-roles.js +0 -70
- package/src/recorded-usage-tracker.js +0 -92
- package/src/usage-tracker.js +0 -650
- package/src/usage.js +0 -367
- package/src/workspace-path.js +0 -48
- package/src/workspace.js +0 -3629
- /package/src/{dashboard/react → ui}/components/AnimatedUsage.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/CardStatusIcons.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ImageGallery.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/OpenChatButton.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/OpenChatButton.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/PrGlyph.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/QueuedPrompts.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/QueuedPrompts.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ReplyCover.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ReplyCover.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ReplyImagePreview.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ReplyMarkdown.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ReplyMarkdown.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/SavedUsageFormat.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/SavedUsageFormat.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/ShimmerText.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/StatsGrid.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/StatusBadge.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/TaskBoard.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/TaskCardStats.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/TaskCardStats.tsx +0 -0
- /package/src/{dashboard/react → ui}/components/TurnContent.test.tsx +0 -0
- /package/src/{dashboard/react → ui}/fixtures.ts +0 -0
- /package/src/{dashboard → ui}/github-links.js +0 -0
- /package/src/{dashboard/react → ui}/image-cache.test.ts +0 -0
- /package/src/{dashboard/react → ui}/image-cache.ts +0 -0
- /package/src/{dashboard → ui}/state.js +0 -0
- /package/src/{dashboard/react → ui}/styles.css +0 -0
- /package/src/{dashboard/react → ui}/test-setup.ts +0 -0
- /package/src/{dashboard → ui}/time.js +0 -0
- /package/src/{dashboard/react → ui}/types.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Box, Paper, Stack, Text, Title } from "@mantine/core";
|
|
2
2
|
import { IconArrowUpRight } from "@tabler/icons-react";
|
|
3
|
-
import { latestTurnPresentation } from "
|
|
3
|
+
import { latestTurnPresentation } from "../state.js";
|
|
4
4
|
import type { Task } from "../types";
|
|
5
5
|
import { GitHubLinks } from "./GitHubLinks";
|
|
6
6
|
import { LinkedText } from "./LinkedText";
|
|
@@ -3,7 +3,7 @@ import { useCallback, useLayoutEffect, useRef, useState } from "react";
|
|
|
3
3
|
import type { Task } from "../types";
|
|
4
4
|
import { ImageGallery } from "./ImageGallery";
|
|
5
5
|
import { ReplyImagePreview } from "./ReplyImagePreview";
|
|
6
|
-
import { formatWorkedDuration } from "
|
|
6
|
+
import { formatWorkedDuration } from "../time.js";
|
|
7
7
|
import { ReplyMarkdown } from "./ReplyMarkdown";
|
|
8
8
|
|
|
9
9
|
const hidePromptImage = () => null;
|
package/src/version.js
CHANGED
|
@@ -3,5 +3,6 @@ import { createRequire } from "node:module";
|
|
|
3
3
|
const require = createRequire(import.meta.url);
|
|
4
4
|
const packageMetadata = require("../package.json");
|
|
5
5
|
|
|
6
|
+
export const TASKCHEF_APP_NAME = require("../.codex-plugin/plugin.json").interface.displayName;
|
|
7
|
+
|
|
6
8
|
export const TASKCHEF_VERSION = packageMetadata.version;
|
|
7
|
-
export const DASHBOARD_SERVER_VERSION = "4";
|
package/BACKLOG.md
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# TaskChef backlog
|
|
2
|
-
|
|
3
|
-
[`docs/spec.md`](docs/spec.md) is the current contract. These ideas need a concrete user case and a
|
|
4
|
-
clear data model before implementation.
|
|
5
|
-
|
|
6
|
-
## Task history views
|
|
7
|
-
|
|
8
|
-
- Add date ranges and title search if the task log becomes difficult to
|
|
9
|
-
browse.
|
|
10
|
-
- Consider export formats for personal activity reports.
|
|
11
|
-
- Define archival or retention only when real logs become large enough to need
|
|
12
|
-
it.
|
|
13
|
-
- Consider grouping entries created from one broad request without storing the
|
|
14
|
-
full original prompt.
|
|
15
|
-
|
|
16
|
-
## Optional reports
|
|
17
|
-
|
|
18
|
-
- Consider user-scheduled, read-only digests that query recorded Codex tasks
|
|
19
|
-
and publish a report without writing status or results to the TaskChef
|
|
20
|
-
workspace.
|
|
21
|
-
- Define batching and partial-read behavior for large task histories.
|
|
22
|
-
- Decide whether inaccessible or deleted Codex tasks need a separate report
|
|
23
|
-
category.
|
|
24
|
-
|
|
25
|
-
## Remote projects
|
|
26
|
-
|
|
27
|
-
- Import remote connection projects returned by native project discovery.
|
|
28
|
-
- Persist the native project and host identity needed to distinguish identical
|
|
29
|
-
paths on different hosts.
|
|
30
|
-
- Re-resolve remote identities before dispatch.
|
|
31
|
-
- Define unavailable-host, renamed-project, moved-path, and stale-identity
|
|
32
|
-
behavior.
|
|
33
|
-
- Evaluate isolated worktrees and conflict handling for concurrent tasks in one
|
|
34
|
-
project.
|
|
35
|
-
|
|
36
|
-
## Integrations
|
|
37
|
-
|
|
38
|
-
- Add GitHub automation only when task history alone is insufficient.
|
|
39
|
-
- Evaluate automatic project discovery rules and exclusions.
|
|
40
|
-
- Consider multiple executor threads for one logical assignment if a real
|
|
41
|
-
workflow requires it.
|
|
42
|
-
|
|
43
|
-
## Transport-authenticated executor identity
|
|
44
|
-
|
|
45
|
-
- If custom MCP later receives authenticated calling-task metadata, compare it
|
|
46
|
-
with the executor's `link_task` assertion.
|
|
47
|
-
- Keep the current local cooperative trust model until such metadata exists;
|
|
48
|
-
do not reintroduce parent/session identity, hooks, task search, or polling.
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"schemaVersion": 2,
|
|
3
|
-
"benchmark": "taskchef-executor-self-link-e2e",
|
|
4
|
-
"taskchefVersion": "0.0.0",
|
|
5
|
-
"runId": "replace-with-run-id",
|
|
6
|
-
"startedAt": "2026-08-24T10:00:00.000Z",
|
|
7
|
-
"completedAt": "2026-08-24T10:01:00.000Z",
|
|
8
|
-
"workload": {
|
|
9
|
-
"project": "example-project",
|
|
10
|
-
"title": "Provisional self-link example",
|
|
11
|
-
"prompt": "Pause for approval, then complete the requested work."
|
|
12
|
-
},
|
|
13
|
-
"task": {
|
|
14
|
-
"taskId": "00000000-0000-4000-8000-000000000000",
|
|
15
|
-
"threadId": "00000000-0000-7000-8000-000000000000",
|
|
16
|
-
"clientThreadId": "local:replace-with-provisional-id",
|
|
17
|
-
"recorded": true,
|
|
18
|
-
"linked": true
|
|
19
|
-
},
|
|
20
|
-
"turns": {
|
|
21
|
-
"needsInput": "00000000-0001-7000-8000-000000000000",
|
|
22
|
-
"completion": "00000000-0002-7000-8000-000000000000"
|
|
23
|
-
},
|
|
24
|
-
"events": {
|
|
25
|
-
"preparedAt": "2026-08-24T10:00:00.000Z",
|
|
26
|
-
"recordedAt": "2026-08-24T10:00:01.000Z",
|
|
27
|
-
"createdAt": "2026-08-24T10:00:02.000Z",
|
|
28
|
-
"linkedAt": "2026-08-24T10:00:05.000Z",
|
|
29
|
-
"needsInputAt": "2026-08-24T10:00:20.000Z",
|
|
30
|
-
"followedUpAt": "2026-08-24T10:00:40.000Z",
|
|
31
|
-
"completedAt": "2026-08-24T10:01:00.000Z"
|
|
32
|
-
},
|
|
33
|
-
"validation": {
|
|
34
|
-
"exactMarkerCorrelated": true,
|
|
35
|
-
"noDispatcherPostCreateReads": true,
|
|
36
|
-
"childIdentityVerified": true,
|
|
37
|
-
"parentIdentityRejected": true,
|
|
38
|
-
"linkRetryVerified": true,
|
|
39
|
-
"needsInputVerified": true,
|
|
40
|
-
"followUpTurnFresh": true,
|
|
41
|
-
"dashboardDeepLinkVerified": true,
|
|
42
|
-
"outputVerified": true
|
|
43
|
-
},
|
|
44
|
-
"summary": {
|
|
45
|
-
"totalWallMs": 60000,
|
|
46
|
-
"provisionalPath": true,
|
|
47
|
-
"linked": true,
|
|
48
|
-
"freshFollowUp": true
|
|
49
|
-
}
|
|
50
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
<!-- taskchef:dispatcher-instructions:start -->
|
|
2
|
-
# TaskChef Dispatcher Instructions
|
|
3
|
-
|
|
4
|
-
This folder is the canonical per-user TaskChef dispatcher workspace.
|
|
5
|
-
|
|
6
|
-
- Early in every dispatcher turn, best-effort call the TaskChef
|
|
7
|
-
`ensure_dashboard` MCP tool. Dashboard startup failure must not block direct
|
|
8
|
-
TaskChef answers, reporting, or delegation.
|
|
9
|
-
- A request to start, recover, or open the TaskChef dashboard is TaskChef
|
|
10
|
-
maintenance, not delegated project work. Use `$taskchef-dashboard`.
|
|
11
|
-
- Use `$taskchef-bootstrap` when initializing or refreshing this workspace,
|
|
12
|
-
changing or listing its configured projects, running TaskChef doctor,
|
|
13
|
-
or repairing its managed instructions.
|
|
14
|
-
- When the user asks to answer, follow up, resume, or continue the same
|
|
15
|
-
recorded assignment in its existing executor task, use `$taskchef-copilot`
|
|
16
|
-
before the general delegation rule. A direct imperative that names the exact
|
|
17
|
-
existing task is explicit send authorization, but copilot must immediately
|
|
18
|
-
re-read that exact task and apply its state and identity guardrails.
|
|
19
|
-
- For every other actionable request that asks for an independent new outcome,
|
|
20
|
-
use `$taskchef-delegate` automatically, even when the user does not explicitly
|
|
21
|
-
say "delegate" or mention TaskChef.
|
|
22
|
-
- Delegation lists native projects once per batch, reconciles that exact
|
|
23
|
-
snapshot once, and routes only to one eligible exact native target.
|
|
24
|
-
- GitHub issue and pull-request URLs may identify any repository advertised by
|
|
25
|
-
a configured project, including child repositories of managed workspaces.
|
|
26
|
-
- Do not perform delegated work directly in the dispatcher thread.
|
|
27
|
-
- Return immediately after dispatch, as required by `$taskchef-delegate`.
|
|
28
|
-
- Answer directly only when the user explicitly asks about TaskChef itself or
|
|
29
|
-
explicitly says not to delegate.
|
|
30
|
-
- Use `$taskchef-copilot` when the user asks what delegated work finished,
|
|
31
|
-
what needs attention, why it failed or needs input, or what should happen
|
|
32
|
-
next, including same-assignment continuation in an exact existing executor.
|
|
33
|
-
Copilot uses the cached TaskChef brief by default; the dashboard is the
|
|
34
|
-
primary monitoring and browsing UI. Live verification is explicit or
|
|
35
|
-
contradiction-driven, focused, and never polled.
|
|
36
|
-
- Explicit invocations of TaskChef skills from other Codex projects use this
|
|
37
|
-
same workspace and task history through TaskChef's global resolution rules.
|
|
38
|
-
- Every final response in this dispatcher workspace must end with this exact
|
|
39
|
-
clickable link on its final non-empty line:
|
|
40
|
-
`[TaskChef Dashboard](http://127.0.0.1:3210/)`. Keep any
|
|
41
|
-
`::created-thread{...}` directive required by delegation on its own line
|
|
42
|
-
immediately before the dashboard link so the immediate-return contract still
|
|
43
|
-
holds. Include the link even when `ensure_dashboard` failed.
|
|
44
|
-
<!-- taskchef:dispatcher-instructions:end -->
|
package/bin/taskchef.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { runCli } from "../src/cli.js";
|
|
4
|
-
|
|
5
|
-
try {
|
|
6
|
-
process.exitCode = await runCli(process.argv.slice(2));
|
|
7
|
-
} catch (error) {
|
|
8
|
-
if (process.argv.includes("--json")) {
|
|
9
|
-
process.stdout.write(`${JSON.stringify({
|
|
10
|
-
error: {
|
|
11
|
-
code: error.code ?? "ERROR",
|
|
12
|
-
message: error.message,
|
|
13
|
-
...(error.details ? { details: error.details } : {}),
|
|
14
|
-
},
|
|
15
|
-
})}\n`);
|
|
16
|
-
} else {
|
|
17
|
-
process.stderr.write(`taskchef: ${error.message}\n`);
|
|
18
|
-
}
|
|
19
|
-
process.exitCode = 1;
|
|
20
|
-
}
|