taskchef 9.2.0 → 9.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +32 -3
- package/docs/mcp-app.md +28 -0
- package/package.json +1 -1
- package/src/mcp-app.js +7 -3
package/README.md
CHANGED
|
@@ -6,9 +6,33 @@ Chats appear regardless of how they were started.
|
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
TaskChef's marketplace lives in this repository. In Codex, open **Settings →
|
|
10
|
+
Plugins → Add → Add a marketplace** and use
|
|
11
|
+
`https://github.com/favoyang/taskchef.git`. Leave the Git ref as `main` and Sparse
|
|
12
|
+
paths empty. Open **Plugins → Personal**, find **TaskChef** under **TaskChef**,
|
|
13
|
+
and install it.
|
|
14
|
+
|
|
15
|
+
Alternatively, use the Codex CLI:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
codex plugin marketplace add favoyang/taskchef
|
|
19
|
+
codex plugin add taskchef@taskchef
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Restart Codex. Open **…** below Plugins in the left dock, find **TaskChef**, and
|
|
23
|
+
pin it to keep the board in the sidebar. TaskChef uses a local Node.js MCP
|
|
24
|
+
server and npm. Supported Node.js versions are 22.18+ in the 22 series, or
|
|
25
|
+
23.2 and newer. Node.js 24 is recommended for a new installation. Server
|
|
26
|
+
dependencies are included in the published package.
|
|
27
|
+
|
|
28
|
+
### Move from the shared marketplace
|
|
29
|
+
|
|
30
|
+
If you installed `taskchef@favoyang-plugins`, add the new marketplace and install
|
|
31
|
+
`taskchef@taskchef` with the commands above. After it installs successfully,
|
|
32
|
+
remove the old plugin with `codex plugin remove taskchef@favoyang-plugins`, then
|
|
33
|
+
restart Codex. Keep only one released TaskChef installation enabled. Local
|
|
34
|
+
settings, GitHub credentials, and Codex chat history are independent of the
|
|
35
|
+
marketplace cache and do not need to be reset. TaskChef Dev stays separate.
|
|
12
36
|
|
|
13
37
|
Codex databases and logs stay on your computer and remain the source of truth.
|
|
14
38
|
TaskChef keeps its own settings, manual Done marks, notification state, and
|
|
@@ -48,3 +72,8 @@ name; apply that identity only to its local staging package. See
|
|
|
48
72
|
[development packaging](docs/mcp-app.md#development-plugin-identity).
|
|
49
73
|
|
|
50
74
|
[Native app guide](docs/mcp-app.md) · [GitHub setup](docs/taskchef-next-github.md)
|
|
75
|
+
|
|
76
|
+
## Feedback
|
|
77
|
+
|
|
78
|
+
[Report a bug](https://github.com/favoyang/taskchef/issues/new?template=bug_report.yml)
|
|
79
|
+
or [request a feature](https://github.com/favoyang/taskchef/issues/new?template=feature_request.yml).
|
package/docs/mcp-app.md
CHANGED
|
@@ -337,3 +337,31 @@ message does not cause polling to replay it. Other features continue working. Th
|
|
|
337
337
|
second, and missing chat snapshots wait at most 250 ms for all subscriptions
|
|
338
338
|
combined. Hidden views do not initiate refreshes; an existing subscription can
|
|
339
339
|
still receive live updates while the MCP process remains running.
|
|
340
|
+
|
|
341
|
+
## Marketplace and release ownership
|
|
342
|
+
|
|
343
|
+
The public catalog is `.agents/plugins/marketplace.json` in this repository.
|
|
344
|
+
Its marketplace name is `taskchef`; the released install is `taskchef@taskchef`.
|
|
345
|
+
The catalog pins a published npm package containing the built UI and production
|
|
346
|
+
server dependencies. A raw Git checkout is not a packaged release.
|
|
347
|
+
|
|
348
|
+
After semantic-release publishes, the marketplace job checks the expected npm
|
|
349
|
+
version and archive, then commits only the catalog pin on the latest `main`.
|
|
350
|
+
A failed check leaves the prior pin in place and fails the workflow. The job
|
|
351
|
+
uses this repository's GitHub token; no shared-marketplace deploy key is needed.
|
|
352
|
+
If the push loses a race with another main update, rerun the Release workflow
|
|
353
|
+
on main to retry after checking the current published version. Do not force push.
|
|
354
|
+
|
|
355
|
+
Keep TaskChef Dev in a separate local marketplace named `taskchef-next-preview`,
|
|
356
|
+
with plugin ID `taskchef-next` and display name **TaskChef Dev**. Store that
|
|
357
|
+
marketplace and its staging packages in a persistent local folder, outside
|
|
358
|
+
this public checkout. Its catalog uses `source.source: local` with a path to
|
|
359
|
+
the prepared staging package. Add that folder with
|
|
360
|
+
`codex plugin marketplace add /path/to/local-dev-marketplace`, then install
|
|
361
|
+
`codex plugin add taskchef-next@taskchef-next-preview`. This can coexist with
|
|
362
|
+
`taskchef@taskchef`. Never rename the source release manifest for Dev.
|
|
363
|
+
|
|
364
|
+
Retire the old shared catalog entry only after this repository's catalog is
|
|
365
|
+
live, the release workflow has completed, and a clean installation from the
|
|
366
|
+
new marketplace succeeds. Existing users must migrate explicitly; changing
|
|
367
|
+
a marketplace does not automatically move their installed plugin identity.
|
package/package.json
CHANGED
package/src/mcp-app.js
CHANGED
|
@@ -43,9 +43,13 @@ export async function pluginSettingsUrl({ pluginRoot = fileURLToPath(new URL("..
|
|
|
43
43
|
const marketplace = basename(dirname(dirname(pluginRoot)));
|
|
44
44
|
try {
|
|
45
45
|
const config = parseToml(await readFile(join(codexHome, "config.toml"), "utf8"));
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
const entry = config.marketplaces?.[marketplace];
|
|
47
|
+
const source = entry?.source;
|
|
48
|
+
const root = entry?.source_type === "git"
|
|
49
|
+
? join(codexHome, ".tmp", "marketplaces", marketplace)
|
|
50
|
+
: source;
|
|
51
|
+
if (typeof source === "string" && typeof root === "string" && isAbsolute(root)) {
|
|
52
|
+
const marketplacePath = join(root, ".agents", "plugins", "marketplace.json");
|
|
49
53
|
const catalog = JSON.parse(await readFile(marketplacePath, "utf8"));
|
|
50
54
|
if (catalog.name !== marketplace || !catalog.plugins?.some((entry) => entry.name === plugin)) return null;
|
|
51
55
|
return `codex://plugins/${encodeURIComponent(plugin)}?${new URLSearchParams({ marketplacePath })}`;
|