@docketcloud/init 0.1.0 → 0.2.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/README.md +7 -4
- package/dist/cli.js +16 -2
- package/dist/cli.js.map +1 -1
- package/dist/clients.js +47 -6
- package/dist/clients.js.map +1 -1
- package/dist/configFile.js +32 -23
- package/dist/configFile.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @docketcloud/init
|
|
2
2
|
|
|
3
|
-
Zero-config setup for [Docket Cloud](https://docketcloud.app): detects which of Claude Code, Cursor, Windsurf,
|
|
3
|
+
Zero-config setup for [Docket Cloud](https://docketcloud.app): detects which of Claude Code, Cursor, Windsurf, Claude Desktop, and Codex you have on this machine, and wires up your Docket Cloud workspace as an MCP server in each one -- so your coding agent can read and write the same tasks, specs, and session state your team sees on the dashboard.
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ Run it again any time -- re-running with the same key is a no-op; a new key upda
|
|
|
18
18
|
|
|
19
19
|
## What it touches
|
|
20
20
|
|
|
21
|
-
Only ever a single `
|
|
21
|
+
Only ever a single `docket-cloud` entry in each tool's own config file -- nothing else in the file is read or changed:
|
|
22
22
|
|
|
23
23
|
| Tool | Config file | Scope |
|
|
24
24
|
| :--- | :--- | :--- |
|
|
@@ -26,18 +26,21 @@ Only ever a single `"docket-cloud"` entry under `mcpServers` in each tool's own
|
|
|
26
26
|
| Cursor | `.cursor/mcp.json` in the current project (or `~/.cursor/mcp.json`) | project, falls back to global |
|
|
27
27
|
| Windsurf | `~/.codeium/windsurf/mcp_config.json` | global only |
|
|
28
28
|
| Claude Desktop | the OS-standard `claude_desktop_config.json` | global only |
|
|
29
|
+
| Codex (CLI, IDE extension, and desktop app) | `.codex/config.toml` in the current project (or `~/.codex/config.toml`) | project, falls back to global |
|
|
29
30
|
|
|
30
|
-
A tool is only touched if there's evidence it's actually installed (its own app-data directory already exists) -- `docket-init` never creates a `.cursor
|
|
31
|
+
A tool is only touched if there's evidence it's actually installed (its own app-data directory already exists) -- `docket-init` never creates a `.cursor/`, `.claude/`, or `.codex/` directory for a tool you don't have.
|
|
31
32
|
|
|
32
33
|
Claude Desktop doesn't support remote HTTP MCP servers directly, so its entry uses the standard [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) stdio bridge instead of a bare URL.
|
|
33
34
|
|
|
35
|
+
Codex's `config.toml` is shared by its CLI, IDE extension, and desktop app -- configuring it once covers all three. Unlike every other client here, Codex's config never stores your API key directly: it takes the *name* of an environment variable (`bearer_token_env_var`) and reads the actual token from your shell at connect time. After writing Codex's config, this CLI prints the exact `export DOCKET_API_KEY=...` line to add to your shell profile (`~/.zshrc`, `~/.bashrc`, etc.) -- without that, Codex has nowhere to read the key from.
|
|
36
|
+
|
|
34
37
|
## Options
|
|
35
38
|
|
|
36
39
|
```
|
|
37
40
|
--tenant <slug> Your Docket Cloud tenant slug. Prompted for if omitted.
|
|
38
41
|
--api-key <key> A Docket Cloud API key (dk_...). Prompted for if omitted.
|
|
39
42
|
--root-domain <host> Override the root domain (default: docketcloud.app) -- for self-hosted deployments.
|
|
40
|
-
--only <ids> Comma-separated: claude-code,cursor,windsurf,claude-desktop
|
|
43
|
+
--only <ids> Comma-separated: claude-code,cursor,windsurf,claude-desktop,codex
|
|
41
44
|
--yes, -y Skip the confirmation prompt before writing.
|
|
42
45
|
--dry-run Show what would change without writing anything.
|
|
43
46
|
```
|
package/dist/cli.js
CHANGED
|
@@ -24,7 +24,7 @@ function parseArgs(argv) {
|
|
|
24
24
|
}
|
|
25
25
|
return args;
|
|
26
26
|
}
|
|
27
|
-
const HELP = `docket-init -- wire up Docket Cloud as an MCP server in Claude Code, Cursor, Windsurf,
|
|
27
|
+
const HELP = `docket-init -- wire up Docket Cloud as an MCP server in Claude Code, Cursor, Windsurf, Claude Desktop, and Codex.
|
|
28
28
|
|
|
29
29
|
Usage:
|
|
30
30
|
npx @docketcloud/init [--tenant <slug>] [--api-key <dk_...>] [options]
|
|
@@ -33,10 +33,15 @@ Options:
|
|
|
33
33
|
--tenant <slug> Your Docket Cloud tenant slug (the <slug> in <slug>.docketcloud.app). Prompted for if omitted.
|
|
34
34
|
--api-key <key> A Docket Cloud API key (dk_...). Prompted for if omitted. Get one from https://<slug>.docketcloud.app/app.
|
|
35
35
|
--root-domain <host> Override the root domain (default: docketcloud.app) -- for self-hosted deployments.
|
|
36
|
-
--only <ids> Comma-separated client ids to limit to: claude-code,cursor,windsurf,claude-desktop
|
|
36
|
+
--only <ids> Comma-separated client ids to limit to: claude-code,cursor,windsurf,claude-desktop,codex
|
|
37
37
|
--yes, -y Don't ask for confirmation before writing config files.
|
|
38
38
|
--dry-run Show what would change without writing anything.
|
|
39
39
|
--help, -h Show this help.
|
|
40
|
+
|
|
41
|
+
Note on Codex: its config.toml doesn't store your API key directly -- it
|
|
42
|
+
reads it from an environment variable at connect time. After this command
|
|
43
|
+
writes Codex's config, export DOCKET_API_KEY=<your key> in your shell
|
|
44
|
+
profile (~/.zshrc, ~/.bashrc, etc.) for Codex to actually authenticate.
|
|
40
45
|
`;
|
|
41
46
|
async function prompt(rl, question) {
|
|
42
47
|
const answer = await rl.question(question);
|
|
@@ -131,6 +136,15 @@ async function main() {
|
|
|
131
136
|
if (toWrite.some((p) => p.target.id === "claude-desktop")) {
|
|
132
137
|
stdout.write("\nRestart Claude Desktop for the change to take effect.\n");
|
|
133
138
|
}
|
|
139
|
+
// Codex's config.toml only stores the *name* of an env var
|
|
140
|
+
// (bearer_token_env_var), never the key itself -- writing the file
|
|
141
|
+
// alone isn't enough for Codex to actually authenticate.
|
|
142
|
+
const envVarTarget = toWrite.find((p) => p.target.requiresManualEnvVar);
|
|
143
|
+
if (envVarTarget?.target.requiresManualEnvVar) {
|
|
144
|
+
stdout.write(`\n${envVarTarget.target.name} reads its API key from an environment variable, not the config file --\n` +
|
|
145
|
+
`add this to your shell profile (~/.zshrc, ~/.bashrc, etc.) and restart your shell:\n\n` +
|
|
146
|
+
` export ${envVarTarget.target.requiresManualEnvVar}=${apiKey}\n`);
|
|
147
|
+
}
|
|
134
148
|
stdout.write("\nDone. Docket Cloud is now available as an MCP server in the tools configured above.\n");
|
|
135
149
|
}
|
|
136
150
|
finally {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAkB,MAAM,iBAAiB,CAAC;AAYzF,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,UAAU;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aACzC,IAAI,CAAC,KAAK,WAAW;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aAC/C,IAAI,CAAC,KAAK,eAAe;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;aAC1E,IAAI,CAAC,KAAK,QAAQ;YAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aAClG,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI;YAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;aACjD,IAAI,CAAC,KAAK,WAAW;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;aAC1C,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/clients.js
CHANGED
|
@@ -9,20 +9,32 @@ function homeConfigDir(home, mac, windowsEnvVar, windowsFallback, linux) {
|
|
|
9
9
|
return path.join(home, linux);
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* The
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
12
|
+
* The clients Phase 1 of the Vibe Coder Transformation spec calls out,
|
|
13
|
+
* plus Codex (added later, on request). `cwd` is the directory the CLI
|
|
14
|
+
* was invoked from -- Claude Code, Cursor, and Codex all support a
|
|
15
|
+
* project-local config that's the more natural fit for "run this inside
|
|
16
|
+
* your project," so those three prefer a project path when there's
|
|
17
|
+
* already evidence (a .claude/, .cursor/, or .codex/ dir) this project
|
|
17
18
|
* uses that tool, falling back to the global path otherwise. Windsurf and
|
|
18
19
|
* Claude Desktop have no project-level config concept, so they're always
|
|
19
20
|
* global.
|
|
21
|
+
*
|
|
22
|
+
* Codex is one logical client, not two, despite being asked for as
|
|
23
|
+
* "Codex CLI and Codex Desktop": OpenAI's own docs are explicit that the
|
|
24
|
+
* CLI, the IDE extension, and the desktop app all read the exact same
|
|
25
|
+
* config.toml -- configuring it once covers all three, the same way
|
|
26
|
+
* configuring Claude Desktop doesn't need a separate "Claude Desktop
|
|
27
|
+
* (Sonnet)" entry.
|
|
20
28
|
*/
|
|
21
29
|
export function buildClientTargets(cwd, home = os.homedir()) {
|
|
22
30
|
const projectClaudeDir = path.join(cwd, ".claude");
|
|
23
31
|
const globalClaudeCodeConfig = path.join(home, ".claude.json");
|
|
24
32
|
const projectCursorDir = path.join(cwd, ".cursor");
|
|
25
33
|
const globalCursorDir = path.join(home, ".cursor");
|
|
34
|
+
const projectCodexDir = path.join(cwd, ".codex");
|
|
35
|
+
const globalCodexDir = path.join(home, ".codex");
|
|
36
|
+
const DOCKET_API_KEY_ENV_VAR = "DOCKET_API_KEY";
|
|
37
|
+
const codexEntry = (mcpUrl) => ({ url: mcpUrl, bearer_token_env_var: DOCKET_API_KEY_ENV_VAR });
|
|
26
38
|
return [
|
|
27
39
|
{
|
|
28
40
|
id: "claude-code",
|
|
@@ -99,6 +111,34 @@ export function buildClientTargets(cwd, home = os.homedir()) {
|
|
|
99
111
|
env: { DOCKET_API_KEY: apiKey }
|
|
100
112
|
};
|
|
101
113
|
}
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: "codex",
|
|
117
|
+
name: "Codex (CLI, IDE extension, and desktop app)",
|
|
118
|
+
installedMarkerDir: projectCodexDir,
|
|
119
|
+
configPath: path.join(projectCodexDir, "config.toml"),
|
|
120
|
+
installed: false,
|
|
121
|
+
format: "toml",
|
|
122
|
+
serverContainerKey: "mcp_servers",
|
|
123
|
+
// Codex's config.toml is TOML, not JSON, and its remote-server shape
|
|
124
|
+
// is also different from every other client here: rather than
|
|
125
|
+
// embedding the key directly (headers: {Authorization: ...}), it
|
|
126
|
+
// takes the *name* of an environment variable and reads the actual
|
|
127
|
+
// token from that at connect time -- see cli.ts's post-write notice,
|
|
128
|
+
// which is the only reason this ever actually authenticates.
|
|
129
|
+
requiresManualEnvVar: DOCKET_API_KEY_ENV_VAR,
|
|
130
|
+
buildEntry: codexEntry
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
id: "codex-global",
|
|
134
|
+
name: "Codex (CLI, IDE extension, and desktop app, global)",
|
|
135
|
+
installedMarkerDir: globalCodexDir,
|
|
136
|
+
configPath: path.join(globalCodexDir, "config.toml"),
|
|
137
|
+
installed: false,
|
|
138
|
+
format: "toml",
|
|
139
|
+
serverContainerKey: "mcp_servers",
|
|
140
|
+
requiresManualEnvVar: DOCKET_API_KEY_ENV_VAR,
|
|
141
|
+
buildEntry: codexEntry
|
|
102
142
|
}
|
|
103
143
|
];
|
|
104
144
|
}
|
|
@@ -120,7 +160,8 @@ export function resolveScopedTargets(targets) {
|
|
|
120
160
|
// pointing at the path that would have been used.
|
|
121
161
|
for (const [projectId, globalId] of [
|
|
122
162
|
["claude-code", "claude-code-global"],
|
|
123
|
-
["cursor", "cursor-global"]
|
|
163
|
+
["cursor", "cursor-global"],
|
|
164
|
+
["codex", "codex-global"]
|
|
124
165
|
]) {
|
|
125
166
|
const project = byId.get(projectId);
|
|
126
167
|
const global = byId.get(globalId);
|
package/dist/clients.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../src/clients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../src/clients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AA4C7B,MAAM,UAAU,GAAG,cAAc,CAAC;AAElC,SAAS,aAAa,CAAC,IAAY,EAAE,GAAW,EAAE,aAAqB,EAAE,eAAuB,EAAE,KAAa;IAC7G,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;IACvH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,OAAe,EAAE,CAAC,OAAO,EAAE;IACzE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC/D,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;IAChD,MAAM,UAAU,GAAG,CAAC,MAAc,EAAkB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAEvH,OAAO;QACL;YACE,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,aAAa;YACnB,kBAAkB,EAAE,gBAAgB,EAAE,mFAAmF;YACzH,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;YACvC,SAAS,EAAE,KAAK;YAChB,UAAU,CAAC,MAAM,EAAE,MAAM;gBACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,EAAE,CAAC;YACvF,CAAC;SACF;QACD;YACE,EAAE,EAAE,oBAAoB;YACxB,IAAI,EAAE,sBAAsB;YAC5B,iEAAiE;YACjE,+DAA+D;YAC/D,2BAA2B;YAC3B,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;YAC9C,UAAU,EAAE,sBAAsB;YAClC,SAAS,EAAE,KAAK;YAChB,UAAU,CAAC,MAAM,EAAE,MAAM;gBACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,EAAE,CAAC;YACvF,CAAC;SACF;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,kBAAkB,EAAE,gBAAgB;YACpC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;YACnD,SAAS,EAAE,KAAK;YAChB,UAAU,CAAC,MAAM,EAAE,MAAM;gBACvB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,EAAE,CAAC;YACzE,CAAC;SACF;QACD;YACE,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,iBAAiB;YACvB,kBAAkB,EAAE,eAAe;YACnC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;YAClD,SAAS,EAAE,KAAK;YAChB,UAAU,CAAC,MAAM,EAAE,MAAM;gBACvB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,EAAE,CAAC;YACzE,CAAC;SACF;QACD;YACE,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,UAAU;YAChB,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC;YAC3D,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,CAAC;YACtE,SAAS,EAAE,KAAK;YAChB,UAAU,CAAC,MAAM,EAAE,MAAM;gBACvB,iEAAiE;gBACjE,iEAAiE;gBACjE,0DAA0D;gBAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,EAAE,CAAC;YAC/E,CAAC;SACF;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,gBAAgB;YACtB,kBAAkB,EAAE,aAAa,CAC/B,IAAI,EACJ,oCAAoC,EACpC,SAAS,EACT,wBAAwB,EACxB,gBAAgB,CACjB;YACD,UAAU,EAAE,IAAI,CAAC,IAAI,CACnB,aAAa,CAAC,IAAI,EAAE,oCAAoC,EAAE,SAAS,EAAE,wBAAwB,EAAE,gBAAgB,CAAC,EAChH,4BAA4B,CAC7B;YACD,SAAS,EAAE,KAAK;YAChB,UAAU,CAAC,MAAM,EAAE,MAAM;gBACvB,kEAAkE;gBAClE,kEAAkE;gBAClE,kEAAkE;gBAClE,+DAA+D;gBAC/D,mEAAmE;gBACnE,uCAAuC;gBACvC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,yCAAyC,CAAC;oBACzF,GAAG,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE;iBAChC,CAAC;YACJ,CAAC;SACF;QACD;YACE,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,6CAA6C;YACnD,kBAAkB,EAAE,eAAe;YACnC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC;YACrD,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,MAAM;YACd,kBAAkB,EAAE,aAAa;YACjC,qEAAqE;YACrE,8DAA8D;YAC9D,iEAAiE;YACjE,mEAAmE;YACnE,qEAAqE;YACrE,6DAA6D;YAC7D,oBAAoB,EAAE,sBAAsB;YAC5C,UAAU,EAAE,UAAU;SACvB;QACD;YACE,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,qDAAqD;YAC3D,kBAAkB,EAAE,cAAc;YAClC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;YACpD,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,MAAM;YACd,kBAAkB,EAAE,aAAa;YACjC,oBAAoB,EAAE,sBAAsB;YAC5C,UAAU,EAAE,UAAU;SACvB;KACF,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAuB;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,kEAAkE;IAClE,sEAAsE;IACtE,sEAAsE;IACtE,yEAAyE;IACzE,kDAAkD;IAClD,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI;QAClC,CAAC,aAAa,EAAE,oBAAoB,CAAC;QACrC,CAAC,QAAQ,EAAE,eAAe,CAAC;QAC3B,CAAC,OAAO,EAAE,cAAc,CAAC;KACjB,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/configFile.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import * as toml from "smol-toml";
|
|
3
4
|
import { SERVER_KEY } from "./clients.js";
|
|
4
5
|
async function exists(p) {
|
|
5
6
|
try {
|
|
@@ -14,39 +15,47 @@ async function exists(p) {
|
|
|
14
15
|
export async function detectInstalled(targets) {
|
|
15
16
|
return Promise.all(targets.map(async (t) => ({ ...t, installed: await exists(t.installedMarkerDir) })));
|
|
16
17
|
}
|
|
18
|
+
function parseExisting(target, raw) {
|
|
19
|
+
if (raw.trim() === "")
|
|
20
|
+
return { ok: true, data: {} };
|
|
21
|
+
try {
|
|
22
|
+
const parsed = target.format === "toml" ? toml.parse(raw) : JSON.parse(raw);
|
|
23
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
24
|
+
return { ok: false, parseError: `${target.configPath} does not contain a ${target.format === "toml" ? "TOML table" : "JSON object"} at its root` };
|
|
25
|
+
}
|
|
26
|
+
return { ok: true, data: parsed };
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
const kind = target.format === "toml" ? "TOML" : "JSON";
|
|
30
|
+
return { ok: false, parseError: `${target.configPath} is not valid ${kind} (${err.message}) -- left untouched` };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
17
33
|
/**
|
|
18
34
|
* Reads the target's existing config (if any), merges in the docket-cloud
|
|
19
|
-
* server entry under
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
35
|
+
* server entry under its server-container key (mcpServers for every JSON
|
|
36
|
+
* client, mcp_servers for Codex's TOML), and returns the plan without
|
|
37
|
+
* writing -- callers decide whether to apply it (supports --dry-run and a
|
|
38
|
+
* confirmation prompt before any file on disk actually changes). Never
|
|
39
|
+
* touches any other key in the file, or any other entry under the
|
|
40
|
+
* container key -- only "docket-cloud" is added or replaced.
|
|
24
41
|
*/
|
|
25
42
|
export async function planMerge(target, mcpUrl, apiKey) {
|
|
26
43
|
let existing = {};
|
|
27
44
|
if (await exists(target.configPath)) {
|
|
28
45
|
const raw = await fs.readFile(target.configPath, "utf-8");
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return { target, nextContent: raw, unchanged: false, parseError: `${target.configPath} does not contain a JSON object` };
|
|
33
|
-
}
|
|
34
|
-
existing = parsed;
|
|
35
|
-
}
|
|
36
|
-
catch (err) {
|
|
37
|
-
return {
|
|
38
|
-
target,
|
|
39
|
-
nextContent: raw,
|
|
40
|
-
unchanged: false,
|
|
41
|
-
parseError: `${target.configPath} is not valid JSON (${err.message}) -- left untouched`
|
|
42
|
-
};
|
|
46
|
+
const result = parseExisting(target, raw);
|
|
47
|
+
if (!result.ok) {
|
|
48
|
+
return { target, nextContent: raw, unchanged: false, parseError: result.parseError };
|
|
43
49
|
}
|
|
50
|
+
existing = result.data;
|
|
44
51
|
}
|
|
45
|
-
const
|
|
52
|
+
const containerKey = target.serverContainerKey ?? "mcpServers";
|
|
53
|
+
const servers = (existing[containerKey] && typeof existing[containerKey] === "object" ? existing[containerKey] : {});
|
|
46
54
|
const newEntry = target.buildEntry(mcpUrl, apiKey);
|
|
47
|
-
const unchanged = JSON.stringify(
|
|
48
|
-
const next = { ...existing,
|
|
49
|
-
|
|
55
|
+
const unchanged = JSON.stringify(servers[SERVER_KEY] ?? null) === JSON.stringify(newEntry);
|
|
56
|
+
const next = { ...existing, [containerKey]: { ...servers, [SERVER_KEY]: newEntry } };
|
|
57
|
+
const nextContent = target.format === "toml" ? toml.stringify(next) : JSON.stringify(next, null, 2) + "\n";
|
|
58
|
+
return { target, nextContent, unchanged };
|
|
50
59
|
}
|
|
51
60
|
export async function applyMerge(plan) {
|
|
52
61
|
await fs.mkdir(path.dirname(plan.target.configPath), { recursive: true });
|
package/dist/configFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configFile.js","sourceRoot":"","sources":["../src/configFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"configFile.js","sourceRoot":"","sources":["../src/configFile.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@docketcloud/init",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Zero-config setup for Docket Cloud: detects Claude Code, Cursor, Windsurf,
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Zero-config setup for Docket Cloud: detects Claude Code, Cursor, Windsurf, Claude Desktop, and Codex on this machine and wires up Docket Cloud as an MCP server in each.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"engines": {
|
|
@@ -23,5 +23,8 @@
|
|
|
23
23
|
"@types/node": "^22.10.5",
|
|
24
24
|
"typescript": "^5.7.3",
|
|
25
25
|
"vitest": "^4.1.10"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"smol-toml": "^1.8.0"
|
|
26
29
|
}
|
|
27
30
|
}
|