@waishnav/devspace 1.0.2 → 1.0.4
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 +43 -7
- package/dist/apply-patch.js +402 -0
- package/dist/cli.js +256 -4
- package/dist/config.js +17 -22
- package/dist/db/migrations.js +34 -0
- package/dist/db/schema.js +19 -0
- package/dist/local-agent-adapters.js +653 -0
- package/dist/local-agent-availability.js +119 -0
- package/dist/local-agent-path.js +24 -0
- package/dist/local-agent-profiles.js +135 -0
- package/dist/local-agent-runtime.js +48 -0
- package/dist/local-agent-store.js +145 -0
- package/dist/local-agent-targets.js +80 -0
- package/dist/process-platform.js +49 -0
- package/dist/process-sessions.js +337 -0
- package/dist/roots.js +5 -2
- package/dist/server.js +521 -243
- package/dist/skills.js +48 -4
- package/dist/ui/.vite/manifest.json +281 -281
- package/dist/ui/assets/{angular-html-Dj4LysSE.js → angular-html-CKeFzaPY.js} +1 -1
- package/dist/ui/assets/{angular-ts-CxuC_FFh.js → angular-ts-0wcM_Zxf.js} +1 -1
- package/dist/ui/assets/{apl-RwuvNFFo.js → apl-C7UdkNb2.js} +1 -1
- package/dist/ui/assets/{astro-ncoaUbsO.js → astro-DMqju4MJ.js} +1 -1
- package/dist/ui/assets/{blade-Dw8-Lzux.js → blade-DHanNgN5.js} +1 -1
- package/dist/ui/assets/{c-Dpbbo_f2.js → c-_iPKYPcx.js} +1 -1
- package/dist/ui/assets/{cobol-4ddX3THy.js → cobol-CagdLJsE.js} +1 -1
- package/dist/ui/assets/{coffee-Bn-a5KqK.js → coffee-CkNGriPi.js} +1 -1
- package/dist/ui/assets/{cpp-DoRrlM_T.js → cpp-CqmKOWIQ.js} +1 -1
- package/dist/ui/assets/{crystal-DiZfCxn-.js → crystal-DbAbDEO1.js} +1 -1
- package/dist/ui/assets/{css-DiQoSjDH.js → css-xwljL6Kw.js} +1 -1
- package/dist/ui/assets/{edge-wEhCUoEt.js → edge-CX3sYz15.js} +1 -1
- package/dist/ui/assets/{elixir-C3obhm0H.js → elixir-B3qL9hqd.js} +1 -1
- package/dist/ui/assets/{elm-DyTBfh1L.js → elm-CH4vrjBp.js} +1 -1
- package/dist/ui/assets/{erb-f4TnXRuY.js → erb-CupHqynN.js} +1 -1
- package/dist/ui/assets/{git-rebase-vhZbWNfp.js → git-rebase-CDxsU2LC.js} +1 -1
- package/dist/ui/assets/{glimmer-js-BG7puL6Y.js → glimmer-js-emkga3g1.js} +1 -1
- package/dist/ui/assets/{glimmer-ts-CNCfLLL1.js → glimmer-ts-D8kQDnUw.js} +1 -1
- package/dist/ui/assets/{glsl-DhT76AL5.js → glsl-BtfTaPhi.js} +1 -1
- package/dist/ui/assets/{graphql-CJX08w8y.js → graphql-DEus8iSO.js} +1 -1
- package/dist/ui/assets/{hack-DY4NGCCL.js → hack-DI8qpBqE.js} +1 -1
- package/dist/ui/assets/{haml-DwSkmVcG.js → haml-Br1i1gmi.js} +1 -1
- package/dist/ui/assets/{handlebars-CQ_1dEmi.js → handlebars-Ce23mu9x.js} +1 -1
- package/dist/ui/assets/{heavy-payload-2rGBiitA.js → heavy-payload-BcZ_nGfF.js} +1 -1
- package/dist/ui/assets/{html-B_e3Njif.js → html-RXVmfixf.js} +1 -1
- package/dist/ui/assets/{html-derivative-_nHZ_Bk-.js → html-derivative-D1aqeobb.js} +1 -1
- package/dist/ui/assets/{http-CfcvPIru.js → http-BebG00CE.js} +1 -1
- package/dist/ui/assets/{hurl-9vWDQIMO.js → hurl-kHMuvenL.js} +1 -1
- package/dist/ui/assets/{java-C4S5r6L5.js → java-DYc2V5RJ.js} +1 -1
- package/dist/ui/assets/{javascript-BRwqbMMC.js → javascript-BcfzTzr3.js} +1 -1
- package/dist/ui/assets/{jinja-DHxzMMc5.js → jinja-D2RhihUZ.js} +1 -1
- package/dist/ui/assets/{jison-B1DqeWXb.js → jison-BuoFEePN.js} +1 -1
- package/dist/ui/assets/{json-DcFTkEdd.js → json-BIDkCuJA.js} +1 -1
- package/dist/ui/assets/{jsx-DgfmYa9f.js → jsx-DHCL2HA0.js} +1 -1
- package/dist/ui/assets/{julia-3M8SJ8iF.js → julia-CvUQXscF.js} +1 -1
- package/dist/ui/assets/{just-UyH7_DNz.js → just-etc9R2qw.js} +1 -1
- package/dist/ui/assets/{latex-wUbha6EX.js → latex-BB3zRnxC.js} +1 -1
- package/dist/ui/assets/{liquid-DqNTB9kN.js → liquid-CIi5Mvpv.js} +1 -1
- package/dist/ui/assets/{lua-DrEQ1QTW.js → lua-Cox7XDiW.js} +1 -1
- package/dist/ui/assets/{marko-B3GJw9Md.js → marko-ruBIRV0n.js} +1 -1
- package/dist/ui/assets/{mdc-BnThk82m.js → mdc-CcbvB9U5.js} +1 -1
- package/dist/ui/assets/{nginx-B5IeSsOX.js → nginx-DtWz6ZYE.js} +1 -1
- package/dist/ui/assets/{nim-BJraatnS.js → nim-BV5BR4P7.js} +1 -1
- package/dist/ui/assets/{perl-BAhrR4gt.js → perl-BvzoSaJ4.js} +1 -1
- package/dist/ui/assets/{php-BKRCk_wX.js → php-C-clrAOy.js} +1 -1
- package/dist/ui/assets/{pug-B8gmSV7z.js → pug-E07_GXAr.js} +1 -1
- package/dist/ui/assets/{qml-DKrxIjHR.js → qml-dqt33dti.js} +1 -1
- package/dist/ui/assets/{r-YASBZvTH.js → r-BcVQxsAw.js} +1 -1
- package/dist/ui/assets/{razor-P-XFZqh6.js → razor-BW5T_UZ-.js} +1 -1
- package/dist/ui/assets/{regexp-CCpiH6nO.js → regexp-Ed_DEsuU.js} +1 -1
- package/dist/ui/assets/{review-payload-BLYwg6t8.js → review-payload-Dsmx33pY.js} +1 -1
- package/dist/ui/assets/{rst-CFAzckbn.js → rst-BkcGqLs8.js} +1 -1
- package/dist/ui/assets/{ruby-Dyp_Rx-S.js → ruby-Sf_X_YID.js} +1 -1
- package/dist/ui/assets/{sas-YkWZIXxT.js → sas-COsombsA.js} +1 -1
- package/dist/ui/assets/{scss-Cf89idGl.js → scss-K6Ylfa26.js} +1 -1
- package/dist/ui/assets/{shellscript-BFMb52q8.js → shellscript-D2EdqkgV.js} +1 -1
- package/dist/ui/assets/{shellsession-DuthW-5v.js → shellsession-jRXgXrnI.js} +1 -1
- package/dist/ui/assets/{soy-BohVVlJU.js → soy-BGspKQWW.js} +1 -1
- package/dist/ui/assets/{sql-CnK9R2Gt.js → sql-C4lAmYnM.js} +1 -1
- package/dist/ui/assets/{stata-D-sV4Vbr.js → stata-DQWvRqxp.js} +1 -1
- package/dist/ui/assets/{surrealql-ChAy0gHv.js → surrealql-OmKt9XJ_.js} +1 -1
- package/dist/ui/assets/{svelte-3HBVqG-H.js → svelte-D0rUmwDI.js} +1 -1
- package/dist/ui/assets/{templ-BixlV4Cp.js → templ-B-U0RMc0.js} +1 -1
- package/dist/ui/assets/{tex-DWoJKHvD.js → tex-BIHD-btS.js} +1 -1
- package/dist/ui/assets/{ts-tags-DLA8eH13.js → ts-tags-CGuDWfPC.js} +1 -1
- package/dist/ui/assets/{tsx-BYWa5JUz.js → tsx-B0-h_HlD.js} +1 -1
- package/dist/ui/assets/{twig-CnY65vAo.js → twig-BN2qDJWN.js} +1 -1
- package/dist/ui/assets/{typescript-ByInUsro.js → typescript-BRnwPzY3.js} +1 -1
- package/dist/ui/assets/{useFileDiffInstance-Dg0pWcJV.js → useFileDiffInstance-5ivdkUYO.js} +3 -3
- package/dist/ui/assets/{vue-Qngt2rkz.js → vue-DekNU1qt.js} +1 -1
- package/dist/ui/assets/{vue-html-DDue9upr.js → vue-html-Bjlv-uvH.js} +1 -1
- package/dist/ui/assets/{vue-vine-DBcAKsA6.js → vue-vine-C2Doytjq.js} +1 -1
- package/dist/ui/assets/{workspace-app-DGD9R89D.css → workspace-app-DASlX26z.css} +1 -1
- package/dist/ui/assets/{workspace-app-DuzpU4Hf.js → workspace-app-DYi7VJam.js} +5 -5
- package/dist/ui/assets/{xml-CRLR5jiL.js → xml-pXbxxgI3.js} +1 -1
- package/dist/ui/assets/{xsl-CmcwyXbm.js → xsl-BEAlgDI2.js} +1 -1
- package/dist/ui/assets/{yaml-Dpe6Eg-k.js → yaml-C1O-To71.js} +1 -1
- package/dist/ui/workspace-app.html +2 -2
- package/dist/user-config.js +21 -1
- package/dist/workspaces.js +3 -0
- package/docs/agent-profile-schema.md +165 -0
- package/docs/chatgpt-coding-workflow.md +46 -12
- package/docs/configuration.md +47 -12
- package/docs/gotchas.md +24 -5
- package/docs/setup.md +1 -1
- package/examples/agents/claude-implementer.md +30 -0
- package/examples/agents/codex-explorer.md +27 -0
- package/examples/agents/codex-qa-tester.md +29 -0
- package/examples/agents/codex-worker.md +25 -0
- package/examples/agents/copilot-reviewer.md +25 -0
- package/examples/agents/cursor-agent-worker.md +26 -0
- package/examples/agents/opencode-explorer.md +27 -0
- package/examples/agents/pi-reviewer.md +27 -0
- package/package.json +18 -5
- package/scripts/fix-node-pty-permissions.mjs +22 -0
- package/skills/subagent-delegation/SKILL.md +132 -0
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@waishnav/devspace",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Expose a secure local coding workspace through an MCP server.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|
|
7
7
|
"engines": {
|
|
8
|
-
"node": ">=
|
|
8
|
+
"node": ">=22.19 <27"
|
|
9
9
|
},
|
|
10
10
|
"bin": {
|
|
11
11
|
"devspace": "dist/cli.js"
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
"files": [
|
|
14
14
|
"dist",
|
|
15
15
|
"docs",
|
|
16
|
+
"examples",
|
|
16
17
|
"scripts",
|
|
18
|
+
"skills",
|
|
17
19
|
"README.md"
|
|
18
20
|
],
|
|
19
21
|
"publishConfig": {
|
|
@@ -24,25 +26,32 @@
|
|
|
24
26
|
"build": "npm run clean && npm run build:app && tsc -p tsconfig.build.json",
|
|
25
27
|
"build:app": "vite build",
|
|
26
28
|
"dev": "node scripts/dev-server.mjs",
|
|
29
|
+
"postinstall": "node scripts/fix-node-pty-permissions.mjs",
|
|
27
30
|
"start": "node dist/cli.js serve",
|
|
28
|
-
"test": "tsx src/config.test.ts && tsx src/roots.test.ts && tsx src/skills.test.ts && tsx src/workspaces.test.ts && tsx src/review-checkpoints.test.ts && tsx src/oauth-store.test.ts",
|
|
31
|
+
"test": "tsx src/config.test.ts && tsx src/ui/card-types.test.ts && tsx src/ui/patch-display.test.ts && tsx src/apply-patch.test.ts && tsx src/process-platform.test.ts && tsx src/process-sessions.test.ts && tsx src/local-agent-runtime.test.ts && tsx src/local-agent-adapters.test.ts && tsx src/local-agent-availability.test.ts && tsx src/local-agent-profiles.test.ts && tsx src/local-agent-targets.test.ts && tsx src/local-agent-store.test.ts && tsx src/roots.test.ts && tsx src/skills.test.ts && tsx src/workspaces.test.ts && tsx src/review-checkpoints.test.ts && tsx src/oauth-store.test.ts && tsx src/cli.test.ts",
|
|
29
32
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
30
33
|
},
|
|
31
34
|
"keywords": [],
|
|
32
35
|
"author": "",
|
|
33
36
|
"license": "MIT",
|
|
34
37
|
"dependencies": {
|
|
38
|
+
"@agentclientprotocol/sdk": "^1.1.0",
|
|
39
|
+
"@anthropic-ai/claude-agent-sdk": "^0.3.200",
|
|
35
40
|
"@clack/prompts": "^1.5.1",
|
|
36
|
-
"@earendil-works/pi-coding-agent": "^0.
|
|
41
|
+
"@earendil-works/pi-coding-agent": "^0.80.3",
|
|
37
42
|
"@modelcontextprotocol/ext-apps": "^1.7.2",
|
|
38
43
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
44
|
+
"@openai/codex-sdk": "^0.142.5",
|
|
45
|
+
"@opencode-ai/sdk": "^1.17.13",
|
|
39
46
|
"@pierre/diffs": "^1.2.5",
|
|
40
47
|
"better-sqlite3": "^12.10.0",
|
|
48
|
+
"diff": "^8.0.3",
|
|
41
49
|
"drizzle-orm": "^0.45.2",
|
|
42
50
|
"express": "^5.2.1",
|
|
43
51
|
"react": "^19.2.6",
|
|
44
52
|
"react-dom": "^19.2.6",
|
|
45
53
|
"semver": "^7.8.4",
|
|
54
|
+
"yaml": "^2.9.0",
|
|
46
55
|
"zod": "^4.4.3"
|
|
47
56
|
},
|
|
48
57
|
"devDependencies": {
|
|
@@ -59,6 +68,10 @@
|
|
|
59
68
|
},
|
|
60
69
|
"overrides": {
|
|
61
70
|
"protobufjs": "7.6.4",
|
|
62
|
-
"ws": "8.21.0"
|
|
71
|
+
"ws": "8.21.0",
|
|
72
|
+
"undici": "8.5.0"
|
|
73
|
+
},
|
|
74
|
+
"optionalDependencies": {
|
|
75
|
+
"node-pty": "^1.1.0"
|
|
63
76
|
}
|
|
64
77
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { chmod } from "node:fs/promises";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
|
|
5
|
+
if (process.platform === "darwin") {
|
|
6
|
+
const projectRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
7
|
+
for (const architecture of ["arm64", "x64"]) {
|
|
8
|
+
const helper = resolve(
|
|
9
|
+
projectRoot,
|
|
10
|
+
"node_modules",
|
|
11
|
+
"node-pty",
|
|
12
|
+
"prebuilds",
|
|
13
|
+
`darwin-${architecture}`,
|
|
14
|
+
"spawn-helper",
|
|
15
|
+
);
|
|
16
|
+
try {
|
|
17
|
+
await chmod(helper, 0o755);
|
|
18
|
+
} catch (error) {
|
|
19
|
+
if (error.code !== "ENOENT") throw error;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: subagent-delegation
|
|
3
|
+
description: Delegate coding tasks to user-configured DevSpace subagents.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Subagent Delegation
|
|
7
|
+
|
|
8
|
+
Use this skill when the user explicitly asks to delegate work to another coding
|
|
9
|
+
agent, use a named subagent, get a second opinion, compare approaches, or run
|
|
10
|
+
a subagent-like workflow.
|
|
11
|
+
|
|
12
|
+
Do not use subagents silently. Tell the user when another subagent is
|
|
13
|
+
being used.
|
|
14
|
+
|
|
15
|
+
## Core commands
|
|
16
|
+
|
|
17
|
+
Use only these commands for normal delegation:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
devspace agents ls
|
|
21
|
+
devspace agents run <profile-or-provider-or-id> "<prompt>"
|
|
22
|
+
devspace agents show <id>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`ls` shows existing subagent sessions for the current workspace. DevSpace scopes
|
|
26
|
+
it automatically from the shell environment injected by the workspace tool.
|
|
27
|
+
|
|
28
|
+
`run <profile> "<prompt>"` starts a new configured profile and prints a
|
|
29
|
+
DevSpace agent id.
|
|
30
|
+
|
|
31
|
+
`run <provider> "<prompt>"` starts a raw built-in provider when no configured
|
|
32
|
+
profile is needed. Built-in providers are listed by `open_workspace`.
|
|
33
|
+
|
|
34
|
+
`run <id> "<prompt>"` sends a follow-up to an existing agent.
|
|
35
|
+
|
|
36
|
+
`show <id>` prints status and the latest response. If the agent is still
|
|
37
|
+
running, `show` waits briefly. If there is still no final response, call `show`
|
|
38
|
+
again later.
|
|
39
|
+
|
|
40
|
+
Do not run provider CLIs such as `codex`, `claude`, `opencode`, `pi`,
|
|
41
|
+
`cursor-agent`, or `copilot` directly unless you are explicitly debugging
|
|
42
|
+
DevSpace agent integration.
|
|
43
|
+
|
|
44
|
+
## Choosing a profile
|
|
45
|
+
|
|
46
|
+
Choose profiles from the compact subagent profile catalog returned by
|
|
47
|
+
`open_workspace`. Use the profile name with `devspace agents run`. If no
|
|
48
|
+
profile fits and delegation is still appropriate, use a built-in provider name
|
|
49
|
+
from `open_workspace`.
|
|
50
|
+
|
|
51
|
+
Profiles may declare a model and optional thinking level. To override the
|
|
52
|
+
configured/default provider model or thinking level for a run, pass `--model`
|
|
53
|
+
or `--thinking`:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
devspace agents run <profile-or-provider> --model <model> "<prompt>"
|
|
57
|
+
devspace agents run <profile-or-provider> --thinking <level> "<prompt>"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Use `--thinking` only when the user asks for a specific reasoning depth or when
|
|
61
|
+
the task clearly needs a different effort than the configured profile default.
|
|
62
|
+
Thinking values are provider-specific passthrough values. Use names supported by
|
|
63
|
+
the selected local agent harness; DevSpace does not translate values between
|
|
64
|
+
providers.
|
|
65
|
+
|
|
66
|
+
Good delegation targets:
|
|
67
|
+
|
|
68
|
+
- `reviewer`: second opinion, bug risk, security risk, test gaps.
|
|
69
|
+
- `explorer`: read-only codebase investigation.
|
|
70
|
+
- `implementer`: focused implementation when the user asked for delegation.
|
|
71
|
+
|
|
72
|
+
Do not delegate ordinary coding work just because a profile exists. Use normal
|
|
73
|
+
DevSpace tools unless the user asked for delegation, another agent's opinion,
|
|
74
|
+
parallel work, or a named subagent.
|
|
75
|
+
|
|
76
|
+
## Worker prompts
|
|
77
|
+
|
|
78
|
+
Agents start with only the prompt you send plus their configured profile
|
|
79
|
+
instructions. Make prompts self-contained.
|
|
80
|
+
|
|
81
|
+
Implementation prompt shape:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
Goal:
|
|
85
|
+
<clear goal>
|
|
86
|
+
|
|
87
|
+
Context:
|
|
88
|
+
<repo/module/user constraints>
|
|
89
|
+
|
|
90
|
+
Relevant files:
|
|
91
|
+
<paths and why they matter>
|
|
92
|
+
|
|
93
|
+
Acceptance criteria:
|
|
94
|
+
- <criterion>
|
|
95
|
+
|
|
96
|
+
Rules:
|
|
97
|
+
- Keep changes focused.
|
|
98
|
+
- Do not perform unrelated refactors.
|
|
99
|
+
- Report blockers clearly.
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Read-only investigation prompt shape:
|
|
103
|
+
|
|
104
|
+
```text
|
|
105
|
+
Question:
|
|
106
|
+
<specific question>
|
|
107
|
+
|
|
108
|
+
Scope:
|
|
109
|
+
<files/directories/modules to inspect>
|
|
110
|
+
|
|
111
|
+
Rules:
|
|
112
|
+
- Do not modify files.
|
|
113
|
+
- Cite relevant file paths and symbols.
|
|
114
|
+
- Separate facts from guesses.
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## After the worker responds
|
|
118
|
+
|
|
119
|
+
Always review the result before presenting it as verified.
|
|
120
|
+
|
|
121
|
+
For write-capable tasks, inspect changed files and run or explain relevant
|
|
122
|
+
tests. For read-only tasks, verify that important claims are supported by repo
|
|
123
|
+
evidence.
|
|
124
|
+
|
|
125
|
+
Be transparent in the final response:
|
|
126
|
+
|
|
127
|
+
```text
|
|
128
|
+
I used <profile>. It reported <summary>. I verified <checks>. Remaining risk:
|
|
129
|
+
<risk or none>.
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Never hide that a subagent was used.
|