pluidr 0.7.2 → 0.7.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 +26 -27
- package/package.json +45 -45
- package/src/cli/commands/doctor.js +24 -3
- package/src/cli/commands/launch.js +5 -1
- package/src/cli/commands/update.js +4 -1
- package/src/templates/agent-prompts/composer.txt +2 -12
- package/src/templates/agent-prompts/debugger.txt +2 -11
- package/src/templates/agent-prompts/prober.txt +2 -10
- package/src/templates/opencode.config.json +3 -0
package/README.md
CHANGED
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
Pluidr installs **3 primary agents + 14 subagents** into OpenCode — each primary agent owns its exclusive subagents, scoped permissions, and enforced workflow rules. No shared subagents. No ad-hoc delegation.
|
|
14
14
|
|
|
15
|
-
| Primary Agent |
|
|
16
|
-
|
|
17
|
-
| **Composer** |
|
|
18
|
-
| **Debugger** |
|
|
19
|
-
| **Prober** |
|
|
15
|
+
| Primary Agent | Purpose | Subagents |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| **Composer** | Feature work — Explore → Plan → Build | Researcher, Plan-Writer, Plan-Checker, Coder, Tester, Reviewer, Compose-Reporter |
|
|
18
|
+
| **Debugger** | Bug investigation — Investigate → Fix → Report | Inspector, Fixer, Debug-Reporter |
|
|
19
|
+
| **Prober** | Security audit — Trace → Patch → Audit | Tracer, Patcher, Auditor, Probe-Reporter |
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
@@ -35,21 +35,20 @@ You describe a feature / idea
|
|
|
35
35
|
│ │
|
|
36
36
|
│ Delegate: Researcher │
|
|
37
37
|
│ → deep codebase + web fact-finding │
|
|
38
|
-
│ →
|
|
39
|
-
│ unknowns / risks │
|
|
38
|
+
│ → confirmed-inferred facts / risks │
|
|
40
39
|
│ │
|
|
41
40
|
│ Composer internally assesses: │
|
|
42
41
|
│ Is this feature simple or complex? │
|
|
43
42
|
└──────────┬──────────────────────────────┘
|
|
44
43
|
│
|
|
45
|
-
|
|
46
|
-
│ Simple feature
|
|
47
|
-
▼
|
|
48
|
-
GUARDRAIL GATE 1a
|
|
49
|
-
"Build directly?"
|
|
50
|
-
│
|
|
51
|
-
│ Yes
|
|
52
|
-
│
|
|
44
|
+
┌────────┴───────────────┐
|
|
45
|
+
│ Simple feature │ Complex feature
|
|
46
|
+
▼ ▼
|
|
47
|
+
GUARDRAIL GATE 1a GUARDRAIL GATE 1b
|
|
48
|
+
"Build directly?" "Write a PRD?"
|
|
49
|
+
│ │
|
|
50
|
+
│ Yes │ Yes
|
|
51
|
+
│ ▼
|
|
53
52
|
│ ┌──────────────────────────────┐
|
|
54
53
|
│ │ PLAN PHASE │
|
|
55
54
|
│ │ │
|
|
@@ -62,9 +61,9 @@ GUARDRAIL GATE 1a GUARDRAIL GATE 1b
|
|
|
62
61
|
│ │ │
|
|
63
62
|
│ │ PASS → GUARDRAIL GATE 2 │
|
|
64
63
|
│ │ "Build from this PRD?" │
|
|
65
|
-
│
|
|
66
|
-
│
|
|
67
|
-
|
|
64
|
+
│ └─────────────┬────────────────┘
|
|
65
|
+
│ │ Yes
|
|
66
|
+
└──────────┬─────────────┘
|
|
68
67
|
▼
|
|
69
68
|
┌────────────────────────────────────────────┐
|
|
70
69
|
│ BUILD PHASE │
|
|
@@ -293,12 +292,6 @@ All agents resolve conflicts using this priority order (defined in `hierarchy.tx
|
|
|
293
292
|
npm install -g pluidr
|
|
294
293
|
```
|
|
295
294
|
|
|
296
|
-
Or run directly without installing:
|
|
297
|
-
|
|
298
|
-
```sh
|
|
299
|
-
npx pluidr init
|
|
300
|
-
```
|
|
301
|
-
|
|
302
295
|
## Usage
|
|
303
296
|
|
|
304
297
|
### `pluidr`
|
|
@@ -328,6 +321,7 @@ Checks installation health and reports ✓/✗ for each component:
|
|
|
328
321
|
- `opencode.jsonc` exists
|
|
329
322
|
- All 18 prompt files present
|
|
330
323
|
- Both plugin files present
|
|
324
|
+
- `pluidr-contrast` theme configured
|
|
331
325
|
- `package.json` with `@opencode-ai/plugin` dependency
|
|
332
326
|
- squeeze binary available
|
|
333
327
|
- Config is valid JSON
|
|
@@ -336,19 +330,20 @@ Exits with code `0` if all pass, `1` if any fail.
|
|
|
336
330
|
|
|
337
331
|
### `pluidr update`
|
|
338
332
|
|
|
339
|
-
Checks the npm registry for a newer version of pluidr and prompts to install
|
|
333
|
+
Checks the npm registry for a newer version of pluidr and prompts to automatically install the upgrade globally. If an update is successfully completed, the running CLI process exits to let you start fresh on the new version.
|
|
340
334
|
|
|
341
335
|
### `pluidr uninstall`
|
|
342
336
|
|
|
343
337
|
Restores your previous configuration:
|
|
344
338
|
|
|
345
339
|
- Finds the latest timestamped backup and restores it to `opencode.jsonc`
|
|
346
|
-
-
|
|
340
|
+
- Restores `tui.json` from the latest backup (returning the TUI theme to its pre-Pluidr state)
|
|
341
|
+
- Removes `prompts/`, `plugins/`, `bin/`, and `themes/pluidr-contrast.json` directories and files
|
|
347
342
|
- Preserves `opencode.jsonc` and `package.json`
|
|
348
343
|
|
|
349
344
|
---
|
|
350
345
|
|
|
351
|
-
## Bundled
|
|
346
|
+
## Bundled Package
|
|
352
347
|
|
|
353
348
|
### `pluidr-flow`
|
|
354
349
|
|
|
@@ -363,3 +358,7 @@ Provides subagents with cross-session context access:
|
|
|
363
358
|
Hooks into tool execution to rewrite bash commands through the `squeeze` binary, filtering verbose output and saving **60–90% of tokens** across all agents.
|
|
364
359
|
|
|
365
360
|
Both plugins and their dependency declaration are installed automatically by `pluidr init` — no extra user action required. On OpenCode's first launch, the bundled Bun runtime installs `@opencode-ai/plugin` from the generated `package.json`.
|
|
361
|
+
|
|
362
|
+
### Themes & Colors
|
|
363
|
+
|
|
364
|
+
Pluidr comes with a pre-configured OLED high-contrast dark theme called **`pluidr-contrast`** that is automatically applied to your OpenCode terminal interface.
|
package/package.json
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "pluidr",
|
|
3
|
-
"version": "0.7.
|
|
4
|
-
"description": "Opinionated Engineering Workflow for OpenCode —
|
|
5
|
-
"keywords": [
|
|
6
|
-
"opencode",
|
|
7
|
-
"workflow",
|
|
8
|
-
"engineering",
|
|
9
|
-
"pipeline",
|
|
10
|
-
"ai-agents",
|
|
11
|
-
"code-review",
|
|
12
|
-
"debugging",
|
|
13
|
-
"security-audit",
|
|
14
|
-
"security",
|
|
15
|
-
"planner",
|
|
16
|
-
"builder",
|
|
17
|
-
"cli"
|
|
18
|
-
],
|
|
19
|
-
"license": "MIT",
|
|
20
|
-
"type": "module",
|
|
21
|
-
"scripts": {
|
|
22
|
-
"test": "node --test"
|
|
23
|
-
},
|
|
24
|
-
"bin": {
|
|
25
|
-
"pluidr": "bin/pluidr.js"
|
|
26
|
-
},
|
|
27
|
-
"repository": {
|
|
28
|
-
"type": "git",
|
|
29
|
-
"url": "git+https://github.com/funara/pluidr.git"
|
|
30
|
-
},
|
|
31
|
-
"homepage": "https://github.com/funara/pluidr#readme",
|
|
32
|
-
"bugs": {
|
|
33
|
-
"url": "https://github.com/funara/pluidr/issues"
|
|
34
|
-
},
|
|
35
|
-
"engines": {
|
|
36
|
-
"node": ">=18"
|
|
37
|
-
},
|
|
38
|
-
"files": [
|
|
39
|
-
"bin",
|
|
40
|
-
"src"
|
|
41
|
-
],
|
|
42
|
-
"dependencies": {
|
|
43
|
-
"@clack/prompts": "^0.9"
|
|
44
|
-
}
|
|
45
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "pluidr",
|
|
3
|
+
"version": "0.7.4",
|
|
4
|
+
"description": "Opinionated Engineering Workflow for OpenCode — Plan, Build, Review.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"opencode",
|
|
7
|
+
"workflow",
|
|
8
|
+
"engineering",
|
|
9
|
+
"pipeline",
|
|
10
|
+
"ai-agents",
|
|
11
|
+
"code-review",
|
|
12
|
+
"debugging",
|
|
13
|
+
"security-audit",
|
|
14
|
+
"security",
|
|
15
|
+
"planner",
|
|
16
|
+
"builder",
|
|
17
|
+
"cli"
|
|
18
|
+
],
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"type": "module",
|
|
21
|
+
"scripts": {
|
|
22
|
+
"test": "node --test"
|
|
23
|
+
},
|
|
24
|
+
"bin": {
|
|
25
|
+
"pluidr": "bin/pluidr.js"
|
|
26
|
+
},
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://github.com/funara/pluidr.git"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/funara/pluidr#readme",
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/funara/pluidr/issues"
|
|
34
|
+
},
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=18"
|
|
37
|
+
},
|
|
38
|
+
"files": [
|
|
39
|
+
"bin",
|
|
40
|
+
"src"
|
|
41
|
+
],
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@clack/prompts": "^0.9"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, readFileSync, readdirSync } from "node:fs"
|
|
2
2
|
import { join } from "node:path"
|
|
3
|
-
import { getConfigDir, getConfigPath, getPromptsDir, getThemesDir } from "../../core/paths.js"
|
|
3
|
+
import { getConfigDir, getConfigPath, getPromptsDir, getThemesDir, getTuiConfigPath } from "../../core/paths.js"
|
|
4
4
|
import { findSqueezePath } from "../../core/squeezeInstaller.js"
|
|
5
5
|
|
|
6
6
|
const EXPECTED_PROMPT_COUNT = 18
|
|
@@ -47,9 +47,30 @@ export function collectChecks() {
|
|
|
47
47
|
}
|
|
48
48
|
checks.push({ component: "plugin files", pass: pluginsFound === PLUGIN_FILES.length, detail: `${pluginsFound}/${PLUGIN_FILES.length}` })
|
|
49
49
|
|
|
50
|
-
// 3b.
|
|
50
|
+
// 3b. Theme configuration verification
|
|
51
51
|
const themeExists = existsSync(join(themesDir, "pluidr-contrast.json"))
|
|
52
|
-
|
|
52
|
+
const tuiConfigPath = getTuiConfigPath()
|
|
53
|
+
let tuiConfigValid = false
|
|
54
|
+
let tuiDetail = "missing mapping"
|
|
55
|
+
if (existsSync(tuiConfigPath)) {
|
|
56
|
+
try {
|
|
57
|
+
const content = readFileSync(tuiConfigPath, "utf-8")
|
|
58
|
+
const parsed = JSON.parse(content)
|
|
59
|
+
if (parsed.theme === "pluidr-contrast") {
|
|
60
|
+
tuiConfigValid = true
|
|
61
|
+
tuiDetail = ""
|
|
62
|
+
} else {
|
|
63
|
+
tuiDetail = `theme: ${parsed.theme || "none"}`
|
|
64
|
+
}
|
|
65
|
+
} catch {
|
|
66
|
+
tuiDetail = "corrupted tui.json"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
checks.push({
|
|
70
|
+
component: themeExists && tuiConfigValid ? "pluidr-contrast theme configured" : "pluidr-contrast theme not configured",
|
|
71
|
+
pass: themeExists && tuiConfigValid,
|
|
72
|
+
detail: !themeExists ? "missing theme file" : tuiDetail
|
|
73
|
+
})
|
|
53
74
|
|
|
54
75
|
// 4. package.json with @opencode-ai/plugin dependency
|
|
55
76
|
let pkgValid = false
|
|
@@ -7,7 +7,11 @@ import { runInit } from "./init.js"
|
|
|
7
7
|
|
|
8
8
|
export async function runLaunch() {
|
|
9
9
|
// 1. Update check
|
|
10
|
-
await checkAndPromptUpdate(version)
|
|
10
|
+
const updated = await checkAndPromptUpdate(version)
|
|
11
|
+
if (updated) {
|
|
12
|
+
console.log("Update successful. Please run pluidr again to start the new version.")
|
|
13
|
+
process.exit(0)
|
|
14
|
+
}
|
|
11
15
|
|
|
12
16
|
// 2. Doctor check
|
|
13
17
|
process.stdout.write("Running doctor... ")
|
|
@@ -2,5 +2,8 @@ import { checkAndPromptUpdate } from "../../core/versionCheck.js"
|
|
|
2
2
|
import { version } from "../../core/version.js"
|
|
3
3
|
|
|
4
4
|
export async function runUpdate() {
|
|
5
|
-
await checkAndPromptUpdate(version)
|
|
5
|
+
const updated = await checkAndPromptUpdate(version)
|
|
6
|
+
if (updated) {
|
|
7
|
+
console.log("Update successful. Please run pluidr again to start the new version.")
|
|
8
|
+
}
|
|
6
9
|
}
|
|
@@ -297,18 +297,8 @@ After presenting the Compose-Reporter's completion report to the user, you MUST:
|
|
|
297
297
|
state returns to the starting point. The next user message triggers a
|
|
298
298
|
fresh EXPLORE cycle.
|
|
299
299
|
|
|
300
|
-
2. **
|
|
301
|
-
|
|
302
|
-
- Options:
|
|
303
|
-
- "New feature / idea" — restart from EXPLORE (default path)
|
|
304
|
-
- "Bug / defect found" — suggest switching to Debugger tab
|
|
305
|
-
- "Iterate on this result" — re-enter EXPLORE with the current
|
|
306
|
-
result as context (treat as a new request)
|
|
307
|
-
|
|
308
|
-
3. **If the user selects "Bug / defect found"**, respond with:
|
|
309
|
-
"For bugs and defects, switch to the Debugger tab — it uses
|
|
310
|
-
Brooks-Lint methodology for root-cause analysis. Debugger is
|
|
311
|
-
standalone and does not depend on Composer."
|
|
300
|
+
2. **Ask naturally in text** (do NOT use the `question` tool):
|
|
301
|
+
Ask the user if they are finished or if they need to continue the session to iterate on this result. Keep it brief, conversational, and natural.
|
|
312
302
|
|
|
313
303
|
Do NOT automatically start a new pipeline without user confirmation.
|
|
314
304
|
Do NOT stay in BUILD phase after presenting the report — the pipeline
|
|
@@ -59,17 +59,8 @@ After presenting the outcome to the user, you MUST:
|
|
|
59
59
|
returns to the starting point. The next user message triggers a fresh
|
|
60
60
|
debugging cycle.
|
|
61
61
|
|
|
62
|
-
2. **
|
|
63
|
-
|
|
64
|
-
- Options:
|
|
65
|
-
- "New bug / defect" — start a fresh debugging cycle
|
|
66
|
-
- "Feature work" — suggest switching to Composer tab
|
|
67
|
-
- "Re-investigate" — re-enter with new information or context
|
|
68
|
-
|
|
69
|
-
3. **If the user selects "Feature work"**, respond with:
|
|
70
|
-
"For feature work, switch to the Composer tab — it handles the full
|
|
71
|
-
Explore → Plan → Build pipeline. Composer is standalone and does not
|
|
72
|
-
depend on Debugger."
|
|
62
|
+
2. **Ask naturally in text** (do NOT use the `question` tool):
|
|
63
|
+
Ask the user if they are finished or if they need to continue the session to investigate further or try another fix. Keep it brief, conversational, and natural.
|
|
73
64
|
|
|
74
65
|
Do NOT automatically start a new investigation without user confirmation.
|
|
75
66
|
Do NOT remain in a completed state without offering next steps.
|
|
@@ -60,16 +60,8 @@ After presenting the audit report to the user, you MUST:
|
|
|
60
60
|
1. **Reset your internal state.** The audit is complete — your state returns to TRACE.
|
|
61
61
|
The next user message triggers a fresh security audit cycle.
|
|
62
62
|
|
|
63
|
-
2. **
|
|
64
|
-
|
|
65
|
-
- Options:
|
|
66
|
-
- "New security audit" — start a fresh TRACE cycle
|
|
67
|
-
- "Feature work" — suggest switching to Composer tab
|
|
68
|
-
- "Bug investigation" — suggest switching to Debugger tab
|
|
69
|
-
|
|
70
|
-
3. **If the user selects "Feature work"**, respond with:
|
|
71
|
-
"For feature work, switch to the Composer tab — it handles the full
|
|
72
|
-
Explore → Plan → Build pipeline."
|
|
63
|
+
2. **Ask naturally in text** (do NOT use the `question` tool):
|
|
64
|
+
Ask the user if they are finished or if they need to continue the session to run a new audit or review other areas. Keep it brief, conversational, and natural.
|
|
73
65
|
|
|
74
66
|
Do NOT automatically start a new audit without user confirmation.
|
|
75
67
|
Do NOT remain in a completed state without offering next steps.
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
|
|
26
26
|
"composer": {
|
|
27
27
|
"mode": "primary",
|
|
28
|
+
"color": "#00b4cc",
|
|
28
29
|
"temperature": 0.7,
|
|
29
30
|
"description": "Full engineering workflow: Explore, Plan, Build — 3 phases, 7 subagents. Starts in Explore mode, transitions via guardrail gates.",
|
|
30
31
|
"prompt": "{file:./prompts/composer.txt}",
|
|
@@ -55,6 +56,7 @@
|
|
|
55
56
|
|
|
56
57
|
"debugger": {
|
|
57
58
|
"mode": "primary",
|
|
59
|
+
"color": "#ff7039",
|
|
58
60
|
"description": "Root-cause analysis via inspector/fixer/reporter. Standalone primary agent — does not depend on Composer. Pure orchestrator — all investigation, fixes, and reports delegated to subagents.",
|
|
59
61
|
"prompt": "{file:./prompts/debugger.txt}",
|
|
60
62
|
"permission": {
|
|
@@ -345,6 +347,7 @@
|
|
|
345
347
|
|
|
346
348
|
"prober": {
|
|
347
349
|
"mode": "primary",
|
|
350
|
+
"color": "#66ffbf",
|
|
348
351
|
"temperature": 0.7,
|
|
349
352
|
"description": "Standalone security and quality auditing agent. Recon and vuln trace, minimal patch application, validation gate.",
|
|
350
353
|
"prompt": "{file:./prompts/prober.txt}",
|