@hyperdreamer/pi-webui 1.10.7 → 1.11.0-beta.10
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 +17 -2
- package/dist/cli.js +265 -32
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/{CodeViewer-BIb2Wx8W.js → CodeViewer-CAf_j27u.js} +1 -1
- package/dist/client/assets/{UnifiedDiffViewer-DpWiGlQo.js → UnifiedDiffViewer-wBjEJWa1.js} +1 -1
- package/dist/client/assets/{index-DX583DEv.js → index-5EtDb9nj.js} +1197 -476
- package/dist/client/index.html +1 -1
- package/dist/config.js +52 -11
- package/dist/config.js.map +1 -1
- package/dist/pi-webui-plugins/workspace-memory/pi-webui-plugin.js +3 -2
- package/dist/pi-webui-plugins/workspace-tasks/pi-webui-plugin.js +1 -0
- package/dist/plugin-api.d.ts +30 -0
- package/dist/server/app.js +6 -1
- package/dist/server/app.js.map +1 -1
- package/dist/server/realtime/sessionEventHub.js +40 -5
- package/dist/server/realtime/sessionEventHub.js.map +1 -1
- package/dist/server/realtime/sessionStatusCoalescer.js +137 -0
- package/dist/server/realtime/sessionStatusCoalescer.js.map +1 -0
- package/dist/server/sessiond/sessionProxyRoutes.js +2 -0
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
- package/dist/server/sessiond.js +57 -5
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/modelPolicyCapability.js +88 -0
- package/dist/server/sessions/modelPolicyCapability.js.map +1 -0
- package/dist/server/sessions/modelPolicyTool.js +31 -0
- package/dist/server/sessions/modelPolicyTool.js.map +1 -0
- package/dist/server/sessions/modelTierRegistry.js +14 -0
- package/dist/server/sessions/modelTierRegistry.js.map +1 -1
- package/dist/server/sessions/modelTierSettingsRoutes.js +36 -0
- package/dist/server/sessions/modelTierSettingsRoutes.js.map +1 -0
- package/dist/server/sessions/modelTierSettingsService.js +100 -0
- package/dist/server/sessions/modelTierSettingsService.js.map +1 -0
- package/dist/server/sessions/piSessionService.js +1643 -433
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/sessionDefaultsRoutes.js +39 -0
- package/dist/server/sessions/sessionDefaultsRoutes.js.map +1 -1
- package/dist/server/sessions/sessionDefaultsService.js +36 -6
- package/dist/server/sessions/sessionDefaultsService.js.map +1 -1
- package/dist/server/sessions/sessionMetadataStore.js +107 -13
- package/dist/server/sessions/sessionMetadataStore.js.map +1 -1
- package/dist/server/sessions/sessionModelPolicy.js +118 -0
- package/dist/server/sessions/sessionModelPolicy.js.map +1 -0
- package/dist/server/sessions/sessionReorder.js +117 -0
- package/dist/server/sessions/sessionReorder.js.map +1 -0
- package/dist/server/sessions/sessionRouteFastifyOptions.js +8 -0
- package/dist/server/sessions/sessionRouteFastifyOptions.js.map +1 -0
- package/dist/server/sessions/sessionRoutes.js +208 -3
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/sessions/starterModelPolicyPreferenceStore.js +164 -0
- package/dist/server/sessions/starterModelPolicyPreferenceStore.js.map +1 -0
- package/dist/server/sessions/utilityModelExtension.js +199 -0
- package/dist/server/sessions/utilityModelExtension.js.map +1 -0
- package/dist/server/sessions/utilityModelResolver.js +77 -0
- package/dist/server/sessions/utilityModelResolver.js.map +1 -0
- package/dist/server/sessions/utilityModelSettingsRoutes.js +62 -0
- package/dist/server/sessions/utilityModelSettingsRoutes.js.map +1 -0
- package/dist/server/sessions/utilityModelSettingsService.js +101 -0
- package/dist/server/sessions/utilityModelSettingsService.js.map +1 -0
- package/dist/server/skills/optionalSkillInstall.js +69 -0
- package/dist/server/skills/optionalSkillInstall.js.map +1 -0
- package/dist/server/skills/optionalSkillInstaller.js +148 -0
- package/dist/server/skills/optionalSkillInstaller.js.map +1 -0
- package/dist/shared/apiTypes.d.ts +129 -3
- package/dist/shared/apiTypes.js +10 -0
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/capabilities.js +15 -0
- package/dist/shared/capabilities.js.map +1 -1
- package/dist/shared/federatedRoutes.js +7 -0
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/docs/assets/pi-webui-desktop.png +0 -0
- package/docs/config.md +61 -3
- package/docs/plugins.md +93 -16
- package/optional-skills/deterministic-subagent-driven-development/SKILL.md +224 -0
- package/optional-skills/deterministic-subagent-driven-development/pi-webui-skill.json +28 -0
- package/optional-skills/deterministic-subagent-driven-development/prompts/final-reviewer.md +132 -0
- package/optional-skills/deterministic-subagent-driven-development/prompts/implementer.md +101 -0
- package/optional-skills/deterministic-subagent-driven-development/prompts/re-reviewer.md +60 -0
- package/optional-skills/deterministic-subagent-driven-development/prompts/task-reviewer.md +80 -0
- package/optional-skills/deterministic-subagent-driven-development/references/capability-contract.md +174 -0
- package/optional-skills/deterministic-subagent-driven-development/references/plan-contract.md +268 -0
- package/optional-skills/deterministic-subagent-driven-development/references/state-machine.md +177 -0
- package/optional-skills/deterministic-subagent-driven-development/scripts/lib/manifest.mjs +258 -0
- package/optional-skills/deterministic-subagent-driven-development/scripts/lib/plan-policy.mjs +350 -0
- package/optional-skills/deterministic-subagent-driven-development/scripts/lib/prompt-renderer.mjs +290 -0
- package/optional-skills/deterministic-subagent-driven-development/scripts/lib/state-machine.mjs +1264 -0
- package/optional-skills/deterministic-subagent-driven-development/scripts/lib/state-store.mjs +532 -0
- package/optional-skills/deterministic-subagent-driven-development/scripts/sdd-state +3 -0
- package/optional-skills/deterministic-subagent-driven-development/scripts/sdd-state.mjs +349 -0
- package/optional-skills/deterministic-writing-plans/SKILL.md +232 -0
- package/optional-skills/deterministic-writing-plans/references/grammar.md +84 -0
- package/optional-skills/deterministic-writing-plans/templates/plan-skeleton.md +143 -0
- package/package.json +13 -9
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Example Feature Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use the deterministic
|
|
4
|
+
> deterministic-subagent-driven-development controller to implement this plan task-by-task.
|
|
5
|
+
> Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
6
|
+
|
|
7
|
+
**Goal:** One sentence describing what this builds.
|
|
8
|
+
|
|
9
|
+
**Architecture:** Two or three sentences about the approach.
|
|
10
|
+
|
|
11
|
+
**Tech Stack:** The key technologies and libraries.
|
|
12
|
+
|
|
13
|
+
## Global Constraints
|
|
14
|
+
|
|
15
|
+
- Node 22.19 is the version floor; do not use APIs newer than that.
|
|
16
|
+
- No new runtime dependencies.
|
|
17
|
+
- Every task's requirements implicitly include this section.
|
|
18
|
+
|
|
19
|
+
## Task 1: Parser module
|
|
20
|
+
|
|
21
|
+
**Implementer tier:** Standard
|
|
22
|
+
|
|
23
|
+
**Files:**
|
|
24
|
+
|
|
25
|
+
- Create: `src/parse/tokens.ts`
|
|
26
|
+
- Test: `src/parse/tokens.test.ts`
|
|
27
|
+
|
|
28
|
+
**Interfaces:**
|
|
29
|
+
|
|
30
|
+
- Consumes: nothing; this is the first task.
|
|
31
|
+
- Produces: `tokenize(input: string): Token[]`, where
|
|
32
|
+
`Token = { kind: "word" | "space"; text: string }`.
|
|
33
|
+
|
|
34
|
+
- [ ] **Step 1: Write the failing test**
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import { describe, expect, it } from "vitest";
|
|
38
|
+
import { tokenize } from "./tokens";
|
|
39
|
+
|
|
40
|
+
describe("tokenize", () => {
|
|
41
|
+
it("splits a word from trailing space", () => {
|
|
42
|
+
expect(tokenize("hi ")).toEqual([
|
|
43
|
+
{ kind: "word", text: "hi" },
|
|
44
|
+
{ kind: "space", text: " " },
|
|
45
|
+
]);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
- [ ] **Step 2: Run the test and confirm it fails**
|
|
51
|
+
|
|
52
|
+
Run: `npm test -- --run src/parse/tokens.test.ts`
|
|
53
|
+
Expected: FAIL, `Cannot find module './tokens'`.
|
|
54
|
+
|
|
55
|
+
- [ ] **Step 3: Write the minimal implementation**
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
export type Token = { kind: "word" | "space"; text: string };
|
|
59
|
+
|
|
60
|
+
export function tokenize(input: string): Token[] {
|
|
61
|
+
return [...input.matchAll(/\s+|\S+/gu)].map((m) => ({
|
|
62
|
+
kind: /^\s/u.test(m[0]) ? "space" : "word",
|
|
63
|
+
text: m[0],
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
- [ ] **Step 4: Run the test and confirm it passes**
|
|
69
|
+
|
|
70
|
+
Run: `npm test -- --run src/parse/tokens.test.ts`
|
|
71
|
+
Expected: PASS, 1 test.
|
|
72
|
+
|
|
73
|
+
- [ ] **Step 5: Commit**
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
git add src/parse/tokens.ts src/parse/tokens.test.ts
|
|
77
|
+
git commit -m "feat(parse): tokenize words and spaces"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Task 2: Wire the parser into the CLI
|
|
81
|
+
|
|
82
|
+
**Implementer tier:** Advanced
|
|
83
|
+
|
|
84
|
+
**Files:**
|
|
85
|
+
|
|
86
|
+
- Create: `src/cli/run.ts`
|
|
87
|
+
- Modify: `src/cli/index.ts:1-20`
|
|
88
|
+
- Test: `src/cli/run.test.ts`
|
|
89
|
+
|
|
90
|
+
**Interfaces:**
|
|
91
|
+
|
|
92
|
+
- Consumes: `tokenize(input: string): Token[]` from Task 1, with
|
|
93
|
+
`Token = { kind: "word" | "space"; text: string }`.
|
|
94
|
+
- Produces: `runCli(argv: string[]): Promise<number>`, resolving to the
|
|
95
|
+
process exit code.
|
|
96
|
+
|
|
97
|
+
- [ ] **Step 1: Write the failing test**
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
import { describe, expect, it } from "vitest";
|
|
101
|
+
import { runCli } from "./run";
|
|
102
|
+
|
|
103
|
+
describe("runCli", () => {
|
|
104
|
+
it("returns 0 and counts words", async () => {
|
|
105
|
+
expect(await runCli(["hello world"])).toBe(0);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it("returns 2 when no argument is given", async () => {
|
|
109
|
+
expect(await runCli([])).toBe(2);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
- [ ] **Step 2: Run the test and confirm it fails**
|
|
115
|
+
|
|
116
|
+
Run: `npm test -- --run src/cli/run.test.ts`
|
|
117
|
+
Expected: FAIL, `Cannot find module './run'`.
|
|
118
|
+
|
|
119
|
+
- [ ] **Step 3: Write the minimal implementation**
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
import { tokenize } from "../parse/tokens";
|
|
123
|
+
|
|
124
|
+
export async function runCli(argv: string[]): Promise<number> {
|
|
125
|
+
const [input] = argv;
|
|
126
|
+
if (input === undefined) return 2;
|
|
127
|
+
const words = tokenize(input).filter((t) => t.kind === "word");
|
|
128
|
+
process.stdout.write(`${String(words.length)}\n`);
|
|
129
|
+
return 0;
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
- [ ] **Step 4: Run the test and confirm it passes**
|
|
134
|
+
|
|
135
|
+
Run: `npm test -- --run src/cli/run.test.ts`
|
|
136
|
+
Expected: PASS, 2 tests.
|
|
137
|
+
|
|
138
|
+
- [ ] **Step 5: Commit**
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
git add src/cli/run.ts src/cli/index.ts src/cli/run.test.ts
|
|
142
|
+
git commit -m "feat(cli): count words from the first argument"
|
|
143
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hyperdreamer/pi-webui",
|
|
3
|
-
"version": "1.10
|
|
3
|
+
"version": "1.11.0-beta.10",
|
|
4
4
|
"description": "Web UI for persistent Pi Coding Agent sessions in real workspaces.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Federico Jaramillo Martinez and HyperDreamer",
|
|
@@ -16,11 +16,14 @@
|
|
|
16
16
|
"README.md",
|
|
17
17
|
"LICENSE",
|
|
18
18
|
"extensions",
|
|
19
|
+
"optional-skills",
|
|
19
20
|
"docs/plugins.md",
|
|
20
21
|
"docs/config.md",
|
|
21
22
|
"docs/assets",
|
|
22
23
|
"plugin-api.d.ts",
|
|
23
|
-
"plugin-api/unstable.d.ts"
|
|
24
|
+
"plugin-api/unstable.d.ts",
|
|
25
|
+
"!optional-skills/**/evals",
|
|
26
|
+
"!optional-skills/**/tests"
|
|
24
27
|
],
|
|
25
28
|
"scripts": {
|
|
26
29
|
"dev": "bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'",
|
|
@@ -36,7 +39,7 @@
|
|
|
36
39
|
"typecheck": "tsc --noEmit",
|
|
37
40
|
"typecheck:cached": "tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-webui/typecheck.tsbuildinfo",
|
|
38
41
|
"knip": "knip",
|
|
39
|
-
"lint": "eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-webui-plugins/**/*.ts\" vite.config.ts vitest.config.ts",
|
|
42
|
+
"lint": "eslint --no-error-on-unmatched-pattern \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-webui-plugins/**/*.ts\" \"optional-skills/**/*.mjs\" vite.config.ts vitest.config.ts",
|
|
40
43
|
"test": "vitest run --config vitest.config.ts",
|
|
41
44
|
"verify": "npm run typecheck && npm run lint && npm run knip && npm test",
|
|
42
45
|
"verify:staged": "node scripts/verify-staged.mjs",
|
|
@@ -81,14 +84,15 @@
|
|
|
81
84
|
},
|
|
82
85
|
"devDependencies": {
|
|
83
86
|
"@changesets/cli": "^2.31.0",
|
|
84
|
-
"@earendil-works/pi-agent-core": "^0.
|
|
85
|
-
"@earendil-works/pi-ai": "^0.
|
|
86
|
-
"@earendil-works/pi-coding-agent": "^0.
|
|
87
|
+
"@earendil-works/pi-agent-core": "^0.83.0",
|
|
88
|
+
"@earendil-works/pi-ai": "^0.83.0",
|
|
89
|
+
"@earendil-works/pi-coding-agent": "^0.83.0",
|
|
87
90
|
"@eslint/js": "^10.0.1",
|
|
88
91
|
"@types/node": "^24.13.3",
|
|
89
92
|
"@types/ws": "^8.18.1",
|
|
90
93
|
"eslint": "^10.6.0",
|
|
91
94
|
"globals": "^17.7.0",
|
|
95
|
+
"jsdom": "^27.4.0",
|
|
92
96
|
"knip": "^6.25.0",
|
|
93
97
|
"tsx": "^4.23.0",
|
|
94
98
|
"typescript": "^6.0.3",
|
|
@@ -112,9 +116,9 @@
|
|
|
112
116
|
"homepage": "https://pi-webui.dev/",
|
|
113
117
|
"packageManager": "npm@11.11.0",
|
|
114
118
|
"peerDependencies": {
|
|
115
|
-
"@earendil-works/pi-agent-core": ">=0.
|
|
116
|
-
"@earendil-works/pi-ai": ">=0.
|
|
117
|
-
"@earendil-works/pi-coding-agent": ">=0.
|
|
119
|
+
"@earendil-works/pi-agent-core": ">=0.83.0 <0.84",
|
|
120
|
+
"@earendil-works/pi-ai": ">=0.83.0 <0.84",
|
|
121
|
+
"@earendil-works/pi-coding-agent": ">=0.83.0 <0.84"
|
|
118
122
|
},
|
|
119
123
|
"keywords": [
|
|
120
124
|
"pi-package",
|