supipowers 0.2.3 → 0.2.5
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 +46 -38
- package/package.json +1 -1
- package/src/commands/config.ts +4 -3
- package/src/commands/status.ts +4 -3
- package/src/commands/supi.ts +4 -3
- package/src/commands/update.ts +4 -3
package/README.md
CHANGED
|
@@ -10,30 +10,33 @@ Agentic workflows for [OMP](https://github.com/can1357/oh-my-pi). Plan features,
|
|
|
10
10
|
bunx supipowers@latest
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
The installer checks for OMP, helps you install it if needed,
|
|
13
|
+
The installer checks for OMP, helps you install it if needed, copies supipowers into `~/.omp/agent/`, and optionally installs LSP servers for better code intelligence.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Re-running the installer updates supipowers if a newer version is available. Already up-to-date installs are detected and skipped.
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
# Global (all projects)
|
|
19
|
-
omp install npm:supipowers
|
|
17
|
+
### Update from inside OMP
|
|
20
18
|
|
|
21
|
-
# Project-local
|
|
22
|
-
omp install npm:supipowers -l
|
|
23
19
|
```
|
|
20
|
+
/supi:update
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Checks npm for the latest version, downloads and installs it — no prompts, no restart needed.
|
|
24
24
|
|
|
25
25
|
## Commands
|
|
26
26
|
|
|
27
|
-
| Command
|
|
28
|
-
|
|
|
29
|
-
| `/supi`
|
|
30
|
-
| `/supi:plan`
|
|
31
|
-
| `/supi:run`
|
|
32
|
-
| `/supi:review`
|
|
33
|
-
| `/supi:qa`
|
|
34
|
-
| `/supi:release`
|
|
35
|
-
| `/supi:config`
|
|
36
|
-
| `/supi:status`
|
|
27
|
+
| Command | What it does |
|
|
28
|
+
| ---------------- | ------------------------------------------------ |
|
|
29
|
+
| `/supi` | Interactive menu — commands and project status |
|
|
30
|
+
| `/supi:plan` | Collaborative planning with task breakdown |
|
|
31
|
+
| `/supi:run` | Execute a plan with parallel sub-agents |
|
|
32
|
+
| `/supi:review` | Quality gates at chosen depth |
|
|
33
|
+
| `/supi:qa` | Run test suite and E2E pipeline |
|
|
34
|
+
| `/supi:release` | Version bump, release notes, publish |
|
|
35
|
+
| `/supi:config` | Interactive settings (TUI) |
|
|
36
|
+
| `/supi:status` | Check running sub-agents and progress |
|
|
37
|
+
| `/supi:update` | Update supipowers to latest version |
|
|
38
|
+
|
|
39
|
+
Commands like `/supi`, `/supi:config`, `/supi:status`, and `/supi:update` open native OMP TUI dialogs — they don't send chat messages or trigger the AI.
|
|
37
40
|
|
|
38
41
|
### Planning
|
|
39
42
|
|
|
@@ -62,21 +65,23 @@ The orchestration loop: dispatch batch → collect results → detect conflicts
|
|
|
62
65
|
### Quality review
|
|
63
66
|
|
|
64
67
|
```
|
|
65
|
-
/supi:review #
|
|
68
|
+
/supi:review # opens profile picker
|
|
66
69
|
/supi:review --quick # fast: LSP diagnostics + AI scan
|
|
67
70
|
/supi:review --thorough # deep: full AI review + code quality
|
|
68
71
|
/supi:review --full # everything: tests + E2E + all gates
|
|
69
72
|
```
|
|
70
73
|
|
|
74
|
+
When no flag is provided, a TUI picker lets you choose the review profile interactively.
|
|
75
|
+
|
|
71
76
|
### QA
|
|
72
77
|
|
|
73
78
|
```
|
|
74
|
-
/supi:qa #
|
|
79
|
+
/supi:qa # opens scope picker
|
|
75
80
|
/supi:qa --changed # tests for changed files only
|
|
76
81
|
/supi:qa --e2e # Playwright / E2E only
|
|
77
82
|
```
|
|
78
83
|
|
|
79
|
-
Detects your test framework on first run (vitest, jest, pytest, cargo test, go test) and caches it.
|
|
84
|
+
Detects your test framework on first run (vitest, jest, pytest, cargo test, go test) and caches it. When no flag is provided, a TUI picker lets you choose the scope.
|
|
80
85
|
|
|
81
86
|
### Release
|
|
82
87
|
|
|
@@ -84,18 +89,16 @@ Detects your test framework on first run (vitest, jest, pytest, cargo test, go t
|
|
|
84
89
|
/supi:release
|
|
85
90
|
```
|
|
86
91
|
|
|
87
|
-
Analyzes commits since last tag, suggests a version bump, generates release notes, and publishes (npm, GitHub release, or manual
|
|
92
|
+
Analyzes commits since last tag, suggests a version bump, generates release notes, and publishes. On first run, a TUI picker lets you choose your pipeline (npm, GitHub release, or manual).
|
|
88
93
|
|
|
89
94
|
## Configuration
|
|
90
95
|
|
|
91
|
-
Layered config: project (`.omp/supipowers/config.json`) overrides global (`~/.omp/supipowers/config.json`).
|
|
92
|
-
|
|
93
96
|
```
|
|
94
|
-
/supi:config
|
|
95
|
-
/supi:config set orchestration.maxParallelAgents 5
|
|
96
|
-
/supi:config set defaultProfile thorough
|
|
97
|
+
/supi:config
|
|
97
98
|
```
|
|
98
99
|
|
|
100
|
+
Opens an interactive settings screen with all configuration options. Select a setting to change its value — toggles flip instantly, selects open a picker, text fields open an input dialog.
|
|
101
|
+
|
|
99
102
|
### Profiles
|
|
100
103
|
|
|
101
104
|
Three built-in profiles control quality gate depth:
|
|
@@ -115,21 +118,22 @@ Create custom profiles in `.omp/supipowers/profiles/`.
|
|
|
115
118
|
"defaultProfile": "thorough",
|
|
116
119
|
"orchestration": {
|
|
117
120
|
"maxParallelAgents": 3, // concurrent sub-agents per batch
|
|
118
|
-
"maxFixRetries": 2,
|
|
119
|
-
"maxNestingDepth": 2,
|
|
120
|
-
"modelPreference": "auto"
|
|
121
|
+
"maxFixRetries": 2, // retry failed tasks
|
|
122
|
+
"maxNestingDepth": 2, // sub-agent nesting limit
|
|
123
|
+
"modelPreference": "auto"
|
|
121
124
|
},
|
|
122
125
|
"lsp": {
|
|
123
|
-
"
|
|
124
|
-
"setupGuide": true,
|
|
126
|
+
"setupGuide": true
|
|
125
127
|
},
|
|
126
128
|
"qa": {
|
|
127
129
|
"framework": null, // auto-detected and cached
|
|
128
|
-
"command": null
|
|
129
|
-
}
|
|
130
|
+
"command": null
|
|
131
|
+
}
|
|
130
132
|
}
|
|
131
133
|
```
|
|
132
134
|
|
|
135
|
+
Config is stored in `~/.omp/agent/extensions/supipowers/` and managed entirely through `/supi:config`.
|
|
136
|
+
|
|
133
137
|
## How it works
|
|
134
138
|
|
|
135
139
|
Supipowers is built on OMP's extension API. Every command is an immediate action — no state machine, no workflow phases.
|
|
@@ -138,17 +142,21 @@ Supipowers is built on OMP's extension API. Every command is an immediate action
|
|
|
138
142
|
|
|
139
143
|
**Quality gates**: Composable checks selected by profile. LSP diagnostics feed real type errors. AI review catches logic issues. Test gates run your actual test suite. Gates report issues with severity levels (error/warning/info).
|
|
140
144
|
|
|
141
|
-
**LSP integration**: Sub-agents query LSP before making changes (find references, check diagnostics). If no LSP is active, everything still works — just better with it.
|
|
145
|
+
**LSP integration**: Sub-agents query LSP before making changes (find references, check diagnostics). If no LSP is active, everything still works — just better with it. The installer offers to set up LSP servers during installation.
|
|
146
|
+
|
|
147
|
+
**Update checking**: On session start, supipowers checks npm for a newer version in the background. If one is available, a notification tells you to run `/supi:update`.
|
|
142
148
|
|
|
143
149
|
## Project structure
|
|
144
150
|
|
|
145
151
|
```
|
|
146
152
|
src/
|
|
147
|
-
index.ts # extension entry point
|
|
153
|
+
index.ts # extension entry point + update checker
|
|
148
154
|
commands/ # slash command handlers
|
|
149
|
-
supi.ts, plan.ts, run.ts, review.ts, qa.ts, release.ts,
|
|
155
|
+
supi.ts, plan.ts, run.ts, review.ts, qa.ts, release.ts,
|
|
156
|
+
config.ts, status.ts, update.ts
|
|
150
157
|
orchestrator/ # sub-agent dispatch & coordination
|
|
151
|
-
batch-scheduler.ts, dispatcher.ts, result-collector.ts,
|
|
158
|
+
batch-scheduler.ts, dispatcher.ts, result-collector.ts,
|
|
159
|
+
conflict-resolver.ts, prompts.ts
|
|
152
160
|
quality/ # composable quality gates
|
|
153
161
|
gate-runner.ts, lsp-gate.ts, ai-review-gate.ts, test-gate.ts
|
|
154
162
|
qa/ # QA pipeline
|
|
@@ -176,7 +184,7 @@ bin/
|
|
|
176
184
|
## Development
|
|
177
185
|
|
|
178
186
|
```bash
|
|
179
|
-
git clone https://github.com/
|
|
187
|
+
git clone https://github.com/ogrodev/supipowers.git
|
|
180
188
|
cd supipowers
|
|
181
189
|
bun install
|
|
182
190
|
bun run test # run tests
|
package/package.json
CHANGED
package/src/commands/config.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
|
|
1
|
+
import type { ExtensionAPI, ExtensionCommandContext } from "@oh-my-pi/pi-coding-agent";
|
|
2
2
|
import { loadConfig, updateConfig } from "../config/loader.js";
|
|
3
3
|
import { listProfiles } from "../config/profiles.js";
|
|
4
4
|
import type { SupipowersConfig } from "../types.js";
|
|
@@ -96,7 +96,8 @@ function buildSettings(cwd: string): SettingDef[] {
|
|
|
96
96
|
export function registerConfigCommand(pi: ExtensionAPI): void {
|
|
97
97
|
pi.registerCommand("supi:config", {
|
|
98
98
|
description: "View and manage Supipowers configuration",
|
|
99
|
-
|
|
99
|
+
// Synchronous handler — returning void (not a Promise) prevents OMP's "Working..." indicator
|
|
100
|
+
handler: ((_args: string, ctx: ExtensionCommandContext) => {
|
|
100
101
|
if (!ctx.hasUI) {
|
|
101
102
|
ctx.ui.notify("Config UI requires interactive mode", "warning");
|
|
102
103
|
return;
|
|
@@ -153,6 +154,6 @@ export function registerConfigCommand(pi: ExtensionAPI): void {
|
|
|
153
154
|
}
|
|
154
155
|
}
|
|
155
156
|
})();
|
|
156
|
-
},
|
|
157
|
+
}) as any,
|
|
157
158
|
});
|
|
158
159
|
}
|
package/src/commands/status.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
|
|
1
|
+
import type { ExtensionAPI, ExtensionCommandContext } from "@oh-my-pi/pi-coding-agent";
|
|
2
2
|
import { findActiveRun, loadAllAgentResults } from "../storage/runs.js";
|
|
3
3
|
|
|
4
4
|
export function registerStatusCommand(pi: ExtensionAPI): void {
|
|
5
5
|
pi.registerCommand("supi:status", {
|
|
6
6
|
description: "Check on running sub-agents and task progress",
|
|
7
|
-
|
|
7
|
+
// Synchronous handler — returning void (not a Promise) prevents OMP's "Working..." indicator
|
|
8
|
+
handler: ((_args: string, ctx: ExtensionCommandContext) => {
|
|
8
9
|
ctx.ui.setEditorText("");
|
|
9
10
|
|
|
10
11
|
const activeRun = findActiveRun(ctx.cwd);
|
|
@@ -41,6 +42,6 @@ export function registerStatusCommand(pi: ExtensionAPI): void {
|
|
|
41
42
|
helpText: "Esc to close",
|
|
42
43
|
});
|
|
43
44
|
})();
|
|
44
|
-
},
|
|
45
|
+
}) as any,
|
|
45
46
|
});
|
|
46
47
|
}
|
package/src/commands/supi.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
|
|
1
|
+
import type { ExtensionAPI, ExtensionCommandContext } from "@oh-my-pi/pi-coding-agent";
|
|
2
2
|
import { loadConfig } from "../config/loader.js";
|
|
3
3
|
import { findActiveRun } from "../storage/runs.js";
|
|
4
4
|
import { loadLatestReport } from "../storage/reports.js";
|
|
@@ -7,7 +7,8 @@ import { listPlans } from "../storage/plans.js";
|
|
|
7
7
|
export function registerSupiCommand(pi: ExtensionAPI): void {
|
|
8
8
|
pi.registerCommand("supi", {
|
|
9
9
|
description: "Supipowers overview — show available commands and project status",
|
|
10
|
-
|
|
10
|
+
// Synchronous handler — returning void (not a Promise) prevents OMP's "Working..." indicator
|
|
11
|
+
handler: ((_args: string, ctx: ExtensionCommandContext) => {
|
|
11
12
|
ctx.ui.setEditorText("");
|
|
12
13
|
void (async () => {
|
|
13
14
|
const config = loadConfig(ctx.cwd);
|
|
@@ -47,6 +48,6 @@ export function registerSupiCommand(pi: ExtensionAPI): void {
|
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
})();
|
|
50
|
-
},
|
|
51
|
+
}) as any,
|
|
51
52
|
});
|
|
52
53
|
}
|
package/src/commands/update.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
|
|
1
|
+
import type { ExtensionAPI, ExtensionCommandContext } from "@oh-my-pi/pi-coding-agent";
|
|
2
2
|
import { readFileSync, existsSync, mkdirSync, cpSync, rmSync, readdirSync } from "node:fs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { homedir, tmpdir } from "node:os";
|
|
@@ -6,7 +6,8 @@ import { homedir, tmpdir } from "node:os";
|
|
|
6
6
|
export function registerUpdateCommand(pi: ExtensionAPI): void {
|
|
7
7
|
pi.registerCommand("supi:update", {
|
|
8
8
|
description: "Update supipowers to the latest version",
|
|
9
|
-
|
|
9
|
+
// Synchronous handler — returning void (not a Promise) prevents OMP's "Working..." indicator
|
|
10
|
+
handler: ((_args: string, ctx: ExtensionCommandContext) => {
|
|
10
11
|
ctx.ui.setEditorText("");
|
|
11
12
|
void (async () => {
|
|
12
13
|
const ompAgent = join(homedir(), ".omp", "agent");
|
|
@@ -95,6 +96,6 @@ export function registerUpdateCommand(pi: ExtensionAPI): void {
|
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
98
|
})();
|
|
98
|
-
},
|
|
99
|
+
}) as any,
|
|
99
100
|
});
|
|
100
101
|
}
|