pi-harness-runtime 0.10.27 → 0.10.42
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/.pi/plugins/herdr-clipboard/herdr-plugin.toml +22 -0
- package/.pi/plugins/herdr-clipboard/start-bridge.sh +29 -0
- package/.pi/plugins/herdr-clipboard/tmux-watch.sh +39 -0
- package/CHANGELOG.md +19 -0
- package/README.md +87 -1
- package/config.toml.example +35 -0
- package/package.json +6 -4
- package/packages/architecture-generator/dist/adr.d.ts +1 -1
- package/packages/architecture-generator/dist/adr.d.ts.map +1 -1
- package/packages/architecture-generator/dist/adr.js +2 -2
- package/packages/architecture-generator/dist/adr.js.map +1 -1
- package/packages/architecture-generator/dist/index.d.ts +3 -3
- package/packages/architecture-generator/dist/index.js +3 -3
- package/packages/architecture-generator/dist/mermaid.d.ts +1 -1
- package/packages/architecture-generator/dist/mermaid.d.ts.map +1 -1
- package/packages/architecture-generator/dist/mermaid.js +20 -20
- package/packages/architecture-generator/dist/mermaid.js.map +1 -1
- package/packages/architecture-generator/dist/types.d.ts +2 -2
- package/packages/architecture-generator/dist/types.d.ts.map +1 -1
- package/packages/architecture-generator/src/adr.ts +16 -16
- package/packages/architecture-generator/src/index.ts +3 -3
- package/packages/architecture-generator/src/mermaid.ts +48 -54
- package/packages/architecture-generator/src/types.ts +15 -15
- package/packages/capability-registry/src/types.js +10 -0
- package/packages/clipboard/dist/src/copy-sync.d.ts.map +1 -1
- package/packages/clipboard/dist/src/copy-sync.js +45 -3
- package/packages/clipboard/dist/src/copy-sync.js.map +1 -1
- package/packages/clipboard/dist/src/index.d.ts +1 -0
- package/packages/clipboard/dist/src/index.d.ts.map +1 -1
- package/packages/clipboard/dist/src/index.js +1 -0
- package/packages/clipboard/dist/src/index.js.map +1 -1
- package/packages/clipboard/dist/src/paste-bridge.d.ts +19 -0
- package/packages/clipboard/dist/src/paste-bridge.d.ts.map +1 -0
- package/packages/clipboard/dist/src/paste-bridge.js +78 -0
- package/packages/clipboard/dist/src/paste-bridge.js.map +1 -0
- package/packages/clipboard/src/copy-sync.ts +52 -3
- package/packages/clipboard/src/index.ts +1 -0
- package/packages/clipboard/src/paste-bridge.ts +86 -0
- package/packages/clipboard-plugin/dist/index.d.ts +28 -0
- package/packages/clipboard-plugin/dist/index.d.ts.map +1 -0
- package/packages/clipboard-plugin/dist/index.js +64 -0
- package/packages/clipboard-plugin/dist/index.js.map +1 -0
- package/packages/clipboard-plugin/dist/types.d.ts +30 -0
- package/packages/clipboard-plugin/dist/types.d.ts.map +1 -0
- package/packages/clipboard-plugin/dist/types.js +5 -0
- package/packages/clipboard-plugin/dist/types.js.map +1 -0
- package/packages/clipboard-plugin/src/index.ts +74 -0
- package/packages/clipboard-plugin/src/types.ts +30 -0
- package/packages/file-copy-helper/dist/src/extension.js +84 -25
- package/packages/file-copy-helper/src/extension.debug.ts +226 -0
- package/packages/file-copy-helper/src/extension.ts +89 -59
- package/packages/knowledge-graph/dist/graph-extractor.d.ts +1 -1
- package/packages/knowledge-graph/dist/graph-extractor.d.ts.map +1 -1
- package/packages/knowledge-graph/dist/graph-extractor.js +46 -55
- package/packages/knowledge-graph/dist/graph-extractor.js.map +1 -1
- package/packages/knowledge-graph/dist/index.d.ts +4 -4
- package/packages/knowledge-graph/dist/index.js +4 -4
- package/packages/knowledge-graph/dist/mcp-client.d.ts +2 -2
- package/packages/knowledge-graph/dist/mcp-client.d.ts.map +1 -1
- package/packages/knowledge-graph/dist/mcp-client.js +22 -22
- package/packages/knowledge-graph/dist/mcp-client.js.map +1 -1
- package/packages/knowledge-graph/dist/provenance-linker.d.ts +1 -1
- package/packages/knowledge-graph/dist/provenance-linker.d.ts.map +1 -1
- package/packages/knowledge-graph/dist/provenance-linker.js +14 -15
- package/packages/knowledge-graph/dist/provenance-linker.js.map +1 -1
- package/packages/knowledge-graph/dist/types.d.ts +2 -2
- package/packages/knowledge-graph/dist/types.d.ts.map +1 -1
- package/packages/knowledge-graph/src/graph-extractor.ts +263 -280
- package/packages/knowledge-graph/src/index.ts +4 -4
- package/packages/knowledge-graph/src/mcp-client.ts +188 -197
- package/packages/knowledge-graph/src/provenance-linker.ts +69 -73
- package/packages/knowledge-graph/src/types.ts +46 -46
- package/packages/milestone-manager/dist/engine.d.ts +1 -1
- package/packages/milestone-manager/dist/engine.d.ts.map +1 -1
- package/packages/milestone-manager/dist/engine.js +7 -9
- package/packages/milestone-manager/dist/engine.js.map +1 -1
- package/packages/milestone-manager/dist/index.d.ts +2 -2
- package/packages/milestone-manager/dist/index.js +2 -2
- package/packages/milestone-manager/dist/types.d.ts +2 -2
- package/packages/milestone-manager/dist/types.d.ts.map +1 -1
- package/packages/milestone-manager/src/engine.ts +83 -91
- package/packages/milestone-manager/src/index.ts +2 -2
- package/packages/milestone-manager/src/types.ts +13 -13
- package/packages/notification/dist/adapters/line-adapter.d.ts +17 -0
- package/packages/notification/dist/adapters/line-adapter.d.ts.map +1 -0
- package/packages/notification/dist/adapters/line-adapter.js +99 -0
- package/packages/notification/dist/adapters/line-adapter.js.map +1 -0
- package/packages/notification/dist/index.d.ts +1 -0
- package/packages/notification/dist/index.d.ts.map +1 -1
- package/packages/notification/dist/index.js +1 -0
- package/packages/notification/dist/index.js.map +1 -1
- package/packages/notification/dist/notification-center.d.ts.map +1 -1
- package/packages/notification/dist/notification-center.js +4 -0
- package/packages/notification/dist/notification-center.js.map +1 -1
- package/packages/notification/dist/types.d.ts +6 -2
- package/packages/notification/dist/types.d.ts.map +1 -1
- package/packages/notification/src/adapters/line-adapter.ts +119 -0
- package/packages/notification/src/index.ts +1 -0
- package/packages/notification/src/notification-center.ts +6 -0
- package/packages/notification/src/types.ts +7 -2
- package/packages/project-bootstrap/dist/bootstrap.d.ts +1 -1
- package/packages/project-bootstrap/dist/bootstrap.d.ts.map +1 -1
- package/packages/project-bootstrap/dist/bootstrap.js +37 -45
- package/packages/project-bootstrap/dist/bootstrap.js.map +1 -1
- package/packages/project-bootstrap/dist/frappe.d.ts +1 -1
- package/packages/project-bootstrap/dist/frappe.d.ts.map +1 -1
- package/packages/project-bootstrap/dist/frappe.js +34 -34
- package/packages/project-bootstrap/dist/frappe.js.map +1 -1
- package/packages/project-bootstrap/dist/index.d.ts +5 -5
- package/packages/project-bootstrap/dist/index.js +5 -5
- package/packages/project-bootstrap/dist/minimal.d.ts +1 -1
- package/packages/project-bootstrap/dist/minimal.js +13 -13
- package/packages/project-bootstrap/dist/minimal.js.map +1 -1
- package/packages/project-bootstrap/dist/types.d.ts +1 -1
- package/packages/project-bootstrap/dist/types.d.ts.map +1 -1
- package/packages/project-bootstrap/dist/typescript.d.ts +1 -1
- package/packages/project-bootstrap/dist/typescript.d.ts.map +1 -1
- package/packages/project-bootstrap/dist/typescript.js +38 -38
- package/packages/project-bootstrap/dist/typescript.js.map +1 -1
- package/packages/project-bootstrap/src/bootstrap.ts +121 -136
- package/packages/project-bootstrap/src/frappe.ts +65 -71
- package/packages/project-bootstrap/src/index.ts +5 -5
- package/packages/project-bootstrap/src/minimal.ts +31 -31
- package/packages/project-bootstrap/src/types.ts +38 -38
- package/packages/project-bootstrap/src/typescript.ts +69 -78
- package/packages/provider-router/dist/src/types.js +1 -1
- package/packages/write-review/src/index.ts +47 -0
- package/packages/write-review/src/injection.ts +21 -1
- package/prompts/agents/reviewer.md +57 -0
- package/prompts/agents/writer.md +42 -0
- package/prompts/slash-commands.md +40 -0
- package/prompts/write-review.md +50 -0
- package/scripts/copy-plugins.js +56 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
id = "moocoding.clipboard"
|
|
2
|
+
name = "Clipboard Bridge"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
min_herdr_version = "0.7.0"
|
|
5
|
+
description = "Clipboard bridge via tmux - fixes copy/paste in remote SSH sessions"
|
|
6
|
+
platforms = ["linux"]
|
|
7
|
+
|
|
8
|
+
[config]
|
|
9
|
+
# Disable herdr's broken clipboard toast (shows even when copy fails)
|
|
10
|
+
# User should also set in their herdr config.toml:
|
|
11
|
+
# [ui.toast.clipboard]
|
|
12
|
+
# enabled = false
|
|
13
|
+
|
|
14
|
+
[[startup]]
|
|
15
|
+
# Start tmux clipboard bridge in background pane
|
|
16
|
+
command = ["bash", "start-bridge.sh"]
|
|
17
|
+
detach = true
|
|
18
|
+
|
|
19
|
+
[[actions]]
|
|
20
|
+
name = "paste"
|
|
21
|
+
description = "Paste from local clipboard into focused pane"
|
|
22
|
+
command = ["bash", "paste.sh"]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Start tmux clipboard bridge
|
|
3
|
+
# Bridges herdr's clipboard to local machine via tmux
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
BRIDGE_DIR="${HOME}/.herdr-clipboard"
|
|
9
|
+
MARKER_FILE="${BRIDGE_DIR}/.last-copy"
|
|
10
|
+
PID_FILE="${BRIDGE_DIR}/bridge.pid"
|
|
11
|
+
|
|
12
|
+
mkdir -p "${BRIDGE_DIR}"
|
|
13
|
+
|
|
14
|
+
# Clean up old PID if exists
|
|
15
|
+
if [[ -f "${PID_FILE}" ]]; then
|
|
16
|
+
OLD_PID=$(cat "${PID_FILE}")
|
|
17
|
+
if kill -0 "${OLD_PID}" 2>/dev/null; then
|
|
18
|
+
echo "Clipboard bridge already running (PID ${OLD_PID})"
|
|
19
|
+
exit 0
|
|
20
|
+
fi
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
# Save PID
|
|
24
|
+
echo $$ > "${PID_FILE}"
|
|
25
|
+
|
|
26
|
+
# Start tmux new-session running clipboard watch loop
|
|
27
|
+
tmux new-session -d -s "herdr-clipboard" "bash ${SCRIPT_DIR}/tmux-watch.sh; read"
|
|
28
|
+
|
|
29
|
+
echo "Clipboard bridge started (PID $$)"
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Tmux clipboard watch - bridges herdr clipboard to local machine
|
|
3
|
+
# Runs inside tmux session that stays connected to local machine
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
BRIDGE_DIR="${HOME}/.herdr-clipboard"
|
|
8
|
+
COPY_FILE="${BRIDGE_DIR}/copy-buffer"
|
|
9
|
+
LAST_HASH="${BRIDGE_DIR}/.last-hash"
|
|
10
|
+
|
|
11
|
+
mkdir -p "${BRIDGE_DIR}"
|
|
12
|
+
|
|
13
|
+
echo "Clipboard bridge active - watching ${COPY_FILE}"
|
|
14
|
+
echo "Waiting for clipboard content..."
|
|
15
|
+
|
|
16
|
+
while true; do
|
|
17
|
+
# Check for new content to copy to local clipboard
|
|
18
|
+
if [[ -f "${COPY_FILE}" ]]; then
|
|
19
|
+
CONTENT=$(cat "${COPY_FILE}")
|
|
20
|
+
HASH=$(echo -n "${CONTENT}" | md5sum | cut -d' ' -f1)
|
|
21
|
+
LAST_HASH_VALUE=""
|
|
22
|
+
|
|
23
|
+
if [[ -f "${LAST_HASH}" ]]; then
|
|
24
|
+
LAST_HASH_VALUE=$(cat "${LAST_HASH}")
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# Only copy if content changed
|
|
28
|
+
if [[ "${HASH}" != "${LAST_HASH_VALUE}" ]]; then
|
|
29
|
+
echo -n "${CONTENT}" | tmux load-buffer -
|
|
30
|
+
tmux paste-buffer -b herdr-clipboard
|
|
31
|
+
echo "${HASH}" > "${LAST_HASH}"
|
|
32
|
+
echo "Copied to local clipboard ($(echo -n "${CONTENT}" | wc -c) bytes)"
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
rm -f "${COPY_FILE}"
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
sleep 0.5
|
|
39
|
+
done
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [0.10.30](https://github.com/ManotLuijiu/pi-harness-runtime/compare/v0.10.29...v0.10.30) (2026-08-11)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **file-copy-helper:** require explicit intent for copy rule injection ([ddfece0](https://github.com/ManotLuijiu/pi-harness-runtime/commit/ddfece0bcbf440dfd4edc0d442b078e84e906c68))
|
|
11
|
+
* **release:** add --no-fund --prefer-offline to npm publish ([19adf58](https://github.com/ManotLuijiu/pi-harness-runtime/commit/19adf58c5de3192a2322ec5afe3b8ccb8ecedc3c))
|
|
12
|
+
* **release:** add --no-git-checks to pnpm publish ([74f29aa](https://github.com/ManotLuijiu/pi-harness-runtime/commit/74f29aa2220d02be4ba47b1c0f0e22ddcba1ffc9))
|
|
13
|
+
* **release:** add retry mechanism for npm publish ([0cfc95d](https://github.com/ManotLuijiu/pi-harness-runtime/commit/0cfc95d33a4cd1cfb629fcbba88dd4a5b931ab8c))
|
|
14
|
+
* **release:** allow bun postinstall scripts ([df88c21](https://github.com/ManotLuijiu/pi-harness-runtime/commit/df88c217ffc8c8794ceba49385690901d7673b56))
|
|
15
|
+
* **release:** keep bun install, add pnpm for publish ([ab400fc](https://github.com/ManotLuijiu/pi-harness-runtime/commit/ab400fcc33f41ec1e60db21a1c3afb5cecedd494))
|
|
16
|
+
* **release:** simpler npm publish with retry ([1508480](https://github.com/ManotLuijiu/pi-harness-runtime/commit/1508480363728cab83ccd5084ca2d17275d88e08))
|
|
17
|
+
* **release:** use actions/npm-nodejs-publish action ([d161f3f](https://github.com/ManotLuijiu/pi-harness-runtime/commit/d161f3f986f13926b7865c6d7788a11605d4dfbd))
|
|
18
|
+
* **release:** use JS-DevTools/npm-publish action ([a5efce0](https://github.com/ManotLuijiu/pi-harness-runtime/commit/a5efce0cf3fd2d9c85339998e61e65b05766724e))
|
|
19
|
+
* **release:** use latest npm to fix exit handler issue ([0ad8da9](https://github.com/ManotLuijiu/pi-harness-runtime/commit/0ad8da9ac84d5134783be4f94fd9e112bb298362))
|
|
20
|
+
* **release:** use npm pack + publish pattern ([85efcc1](https://github.com/ManotLuijiu/pi-harness-runtime/commit/85efcc181ca2214dd5a1d01bbeefb46f2a53975f))
|
|
21
|
+
* **release:** use npm/publish action ([43c6a20](https://github.com/ManotLuijiu/pi-harness-runtime/commit/43c6a20752e4c7fdb548a8f3e1134188857ce1ca))
|
|
22
|
+
* **release:** use pnpm for publish to avoid npm exit handler bug ([a038950](https://github.com/ManotLuijiu/pi-harness-runtime/commit/a03895032a57cee039e2ed4b720e46e3d3c13961))
|
|
23
|
+
|
|
5
24
|
### [0.10.27](https://github.com/ManotLuijiu/pi-harness-runtime/compare/v0.10.14...v0.10.27) (2026-08-10)
|
|
6
25
|
|
|
7
26
|
|
package/README.md
CHANGED
|
@@ -36,7 +36,7 @@ If running on a **headless server** via herdr SSH, install the clipboard bridge
|
|
|
36
36
|
cd ~/.config/herdr/plugins
|
|
37
37
|
ln -s ~/.config/herdr/plugins/moocoding.clipboard-bridge moocoding.clipboard-bridge 2>/dev/null || true
|
|
38
38
|
|
|
39
|
-
# 2. Add
|
|
39
|
+
# 2. Add keybindings to ~/.config/herdr/config.toml
|
|
40
40
|
cat >> ~/.config/herdr/config.toml << 'EOF'
|
|
41
41
|
|
|
42
42
|
[[keys.command]]
|
|
@@ -44,6 +44,12 @@ key = "prefix+y"
|
|
|
44
44
|
type = "plugin_action"
|
|
45
45
|
command = "moocoding.clipboard-bridge.copy"
|
|
46
46
|
description = "Copy selected text via bridge"
|
|
47
|
+
|
|
48
|
+
[[keys.command]]
|
|
49
|
+
key = "prefix+p"
|
|
50
|
+
type = "plugin_action"
|
|
51
|
+
command = "moocoding.clipboard-bridge.paste"
|
|
52
|
+
description = "Paste from clipboard bridge"
|
|
47
53
|
EOF
|
|
48
54
|
|
|
49
55
|
# 3. Reload herdr config
|
|
@@ -367,6 +373,85 @@ Your local machine clipboard
|
|
|
367
373
|
| `~/.herdr-clipboard` | Bridge file between herdr and clipboard |
|
|
368
374
|
| `~/.config/herdr/plugins/moocoding.clipboard-bridge/` | herdr plugin |
|
|
369
375
|
|
|
376
|
+
### LINE Notification Setup
|
|
377
|
+
|
|
378
|
+
Get notified on your phone when tasks complete! LINE notifications via the LINE Messaging API.
|
|
379
|
+
|
|
380
|
+
#### Step-by-Step Setup
|
|
381
|
+
|
|
382
|
+
**1. Create a LINE Messaging API channel**
|
|
383
|
+
|
|
384
|
+
1. Go to [LINE Developers Console](https://developers.line.biz/)
|
|
385
|
+
2. Log in with your LINE account
|
|
386
|
+
3. Click **Create a channel** → select **Messaging API**
|
|
387
|
+
4. Fill in the required fields (channel name, description, etc.)
|
|
388
|
+
5. Once created, go to the **Messaging API** tab
|
|
389
|
+
|
|
390
|
+
**2. Get your Channel Access Token**
|
|
391
|
+
|
|
392
|
+
1. In the Messaging API tab, scroll to **Long-term channel access token**
|
|
393
|
+
2. Click **Issue** to generate the token
|
|
394
|
+
3. Copy the token (starts with `eyJ...`)
|
|
395
|
+
|
|
396
|
+
**3. Get your User ID**
|
|
397
|
+
|
|
398
|
+
1. Go to your channel's **Basic settings** tab
|
|
399
|
+
2. Find **Your user ID** (a long alphanumeric string like `U123456...`)
|
|
400
|
+
3. Copy this ID
|
|
401
|
+
|
|
402
|
+
#### Configuration
|
|
403
|
+
|
|
404
|
+
Add to your `config.toml`:
|
|
405
|
+
|
|
406
|
+
```toml
|
|
407
|
+
[notification.line]
|
|
408
|
+
enabled = true
|
|
409
|
+
channelAccessToken = "YOUR_CHANNEL_ACCESS_TOKEN" # from Messaging API tab
|
|
410
|
+
userId = "YOUR_USER_ID" # from Basic settings tab
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
#### How It Works
|
|
414
|
+
|
|
415
|
+
```
|
|
416
|
+
Task event triggered (e.g., TaskCompleted)
|
|
417
|
+
↓
|
|
418
|
+
Notification payload created with event details
|
|
419
|
+
↓
|
|
420
|
+
LineAdapter.send() called
|
|
421
|
+
↓
|
|
422
|
+
POST to https://api.line.me/v2/bot/message/push
|
|
423
|
+
↓
|
|
424
|
+
Push notification sent to your LINE app
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
#### Supported Events
|
|
428
|
+
|
|
429
|
+
| Event | Emoji | Description |
|
|
430
|
+
|-------|-------|-------------|
|
|
431
|
+
| `JobStarted` | 🚀 | Job execution started |
|
|
432
|
+
| `TaskCompleted` | ✅ | Task completed successfully |
|
|
433
|
+
| `TaskFailed` | ❌ | Task failed with error |
|
|
434
|
+
| `QuotaPaused` | ⏸️ | Quota limit reached, paused |
|
|
435
|
+
| `ResumeScheduled` | ▶️ | Resume scheduled |
|
|
436
|
+
| `ContextCompacted` | 📦 | Context window compacted |
|
|
437
|
+
| `OutputLimitContinued` | 🔄 | Output limit exceeded, continued |
|
|
438
|
+
| `E2EFailed` | 🧪 | E2E test failed |
|
|
439
|
+
| `HumanReviewNeeded` | 👤 | Human review required |
|
|
440
|
+
| `ReadyForClient` | 🎉 | All tasks done, ready for new work |
|
|
441
|
+
| `JobCancelled` | 🚫 | Job was cancelled |
|
|
442
|
+
| `Error` | ⚠️ | Runtime error occurred |
|
|
443
|
+
|
|
444
|
+
#### Example Notification
|
|
445
|
+
|
|
446
|
+
```
|
|
447
|
+
✅ Task Completed
|
|
448
|
+
|
|
449
|
+
Implement login flow
|
|
450
|
+
|
|
451
|
+
Task: Implement login flow
|
|
452
|
+
Job: feature-auth
|
|
453
|
+
```
|
|
454
|
+
|
|
370
455
|
### Other Providers
|
|
371
456
|
|
|
372
457
|
No setup needed. The runtime reads TUI messages and captures quota-exhaustion signals.
|
|
@@ -383,6 +468,7 @@ footer updates immediately and the data persists in `mirror.json`.
|
|
|
383
468
|
- [x] Cookie-file drop folder + live sync (`cookie-sanitizer`)
|
|
384
469
|
- [x] Per-provider quota mirror (`mirror.json` keyed by provider)
|
|
385
470
|
- [x] Multi-provider TUI signal capture (OpenAI, GLM, Anthropic, OpenRouter)
|
|
471
|
+
- [x] LINE notification adapter (Thai mobile notifications)
|
|
386
472
|
- [ ] E2E test engine integration
|
|
387
473
|
- [ ] Claude adapter
|
|
388
474
|
- [ ] Production stress testing
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# herdr Configuration for pi-harness-runtime
|
|
2
|
+
# Copy this file to ~/.config/herdr/config.toml
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# cp config.toml.example ~/.config/herdr/config.toml
|
|
6
|
+
# herdr server reload-config
|
|
7
|
+
|
|
8
|
+
onboarding = false
|
|
9
|
+
|
|
10
|
+
[ui]
|
|
11
|
+
# Disable herdr's built-in clipboard (doesn't work on headless servers)
|
|
12
|
+
copy_on_select = false
|
|
13
|
+
|
|
14
|
+
[ui.toast.clipboard]
|
|
15
|
+
enabled = false
|
|
16
|
+
|
|
17
|
+
# ============================================
|
|
18
|
+
# Custom Keybindings for pi-harness-runtime
|
|
19
|
+
# ============================================
|
|
20
|
+
|
|
21
|
+
# Copy selected text via clipboard bridge plugin
|
|
22
|
+
# Usage: Select text with mouse, then press prefix+y
|
|
23
|
+
[[keys.command]]
|
|
24
|
+
key = "prefix+y"
|
|
25
|
+
type = "plugin_action"
|
|
26
|
+
command = "moocoding.clipboard-bridge.copy"
|
|
27
|
+
description = "Copy selected text via bridge"
|
|
28
|
+
|
|
29
|
+
# Paste from clipboard bridge
|
|
30
|
+
# Usage: Press prefix+p to paste content from bridge file
|
|
31
|
+
[[keys.command]]
|
|
32
|
+
key = "prefix+p"
|
|
33
|
+
type = "plugin_action"
|
|
34
|
+
command = "moocoding.clipboard-bridge.paste"
|
|
35
|
+
description = "Paste from clipboard bridge"
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-harness-runtime",
|
|
3
|
-
"version": "0.10.
|
|
4
|
-
"description": "[BETA] Codex-style /usage status + autonomous coding harness for pi. Not production ready
|
|
3
|
+
"version": "0.10.42",
|
|
4
|
+
"description": "[BETA] Codex-style /usage status + autonomous coding harness for pi. Not production ready \u2014 expect breaking changes.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "node --test",
|
|
8
|
-
"postinstall": "mkdir -p ~/.pi-harness-runtime/cookies",
|
|
8
|
+
"postinstall": "mkdir -p ~/.pi-harness-runtime/cookies && node scripts/copy-plugins.js && ([ -f ~/.config/herdr/config.toml ] || mkdir -p ~/.config/herdr && cp config.toml.example ~/.config/herdr/config.toml)",
|
|
9
9
|
"release": "bun scripts/release-all.ts",
|
|
10
10
|
"release:patch": "bun scripts/release-all.ts --release-as patch",
|
|
11
11
|
"release:minor": "bun scripts/release-all.ts --release-as minor",
|
|
@@ -30,10 +30,12 @@
|
|
|
30
30
|
"skills/**/*",
|
|
31
31
|
"prompts/**/*",
|
|
32
32
|
"scripts/**/*",
|
|
33
|
+
".pi/plugins/**/*",
|
|
33
34
|
"package.json",
|
|
34
35
|
"README.md",
|
|
35
36
|
"CHANGELOG.md",
|
|
36
|
-
"LICENSE"
|
|
37
|
+
"LICENSE",
|
|
38
|
+
"config.toml.example"
|
|
37
39
|
],
|
|
38
40
|
"keywords": [
|
|
39
41
|
"pi-package",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adr.d.ts","sourceRoot":"","sources":["../src/adr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAkB5C;AAED;;GAEG;AACH,wBAAgB,SAAS,
|
|
1
|
+
{"version":3,"file":"adr.d.ts","sourceRoot":"","sources":["../src/adr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAkB5C;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,GAAG,CAUL"}
|
|
@@ -32,11 +32,11 @@ export function createADR(id, title, context, decision, consequences) {
|
|
|
32
32
|
return {
|
|
33
33
|
id,
|
|
34
34
|
title,
|
|
35
|
-
status:
|
|
35
|
+
status: 'proposed',
|
|
36
36
|
context,
|
|
37
37
|
decision,
|
|
38
38
|
consequences,
|
|
39
|
-
createdAt: new Date().toISOString().split(
|
|
39
|
+
createdAt: new Date().toISOString().split('T')[0],
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
//# sourceMappingURL=adr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adr.js","sourceRoot":"","sources":["../src/adr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAQ;
|
|
1
|
+
{"version":3,"file":"adr.js","sourceRoot":"","sources":["../src/adr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAQ;IAClC,OAAO,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK;;;EAGhC,GAAG,CAAC,MAAM;;;EAGV,GAAG,CAAC,OAAO;;;EAGX,GAAG,CAAC,QAAQ;;;EAGZ,GAAG,CAAC,YAAY;;;YAGN,GAAG,CAAC,SAAS;CACxB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,EAAU,EACV,KAAa,EACb,OAAe,EACf,QAAgB,EAChB,YAAoB;IAEpB,OAAO;QACL,EAAE;QACF,KAAK;QACL,MAAM,EAAE,UAAU;QAClB,OAAO;QACP,QAAQ;QACR,YAAY;QACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generate ADR and Mermaid diagrams from project analysis.
|
|
5
5
|
*/
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export * from './mermaid.js';
|
|
8
|
+
export * from './adr.js';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generate ADR and Mermaid diagrams from project analysis.
|
|
5
5
|
*/
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export * from './mermaid.js';
|
|
8
|
+
export * from './adr.js';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../src/mermaid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../src/mermaid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAe,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzF;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,mBAAmB,CAkB5F;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GACzD,mBAAmB,CAcrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EACtC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GACpD,mBAAmB,CAerB"}
|
|
@@ -8,20 +8,20 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export function generateComponentDiagram(analysis) {
|
|
10
10
|
const mermaid = [
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
'graph TB',
|
|
12
|
+
' subgraph Layers',
|
|
13
13
|
...analysis.layers.map((layer, i) => {
|
|
14
14
|
const nodes = analysis.components.filter((_, j) => j % analysis.layers.length === i);
|
|
15
|
-
return ` ${nodes.join(
|
|
15
|
+
return ` ${nodes.join(' --> ')}`;
|
|
16
16
|
}),
|
|
17
|
-
|
|
18
|
-
...analysis.dependencies.map(
|
|
19
|
-
].join(
|
|
17
|
+
' end',
|
|
18
|
+
...analysis.dependencies.map(d => ` ${d.from} --> ${d.to}`),
|
|
19
|
+
].join('\n');
|
|
20
20
|
return {
|
|
21
|
-
type:
|
|
22
|
-
title:
|
|
21
|
+
type: 'component',
|
|
22
|
+
title: 'Architecture Components',
|
|
23
23
|
mermaid,
|
|
24
|
-
description:
|
|
24
|
+
description: 'Component diagram showing layers and dependencies',
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
@@ -29,14 +29,14 @@ export function generateComponentDiagram(analysis) {
|
|
|
29
29
|
*/
|
|
30
30
|
export function generateSequenceDiagram(title, steps) {
|
|
31
31
|
const mermaid = [
|
|
32
|
-
|
|
33
|
-
...steps.map(
|
|
34
|
-
].join(
|
|
32
|
+
'sequenceDiagram',
|
|
33
|
+
...steps.map(s => ` ${s.actor}->>+${s.target}: ${s.action}`),
|
|
34
|
+
].join('\n');
|
|
35
35
|
return {
|
|
36
|
-
type:
|
|
36
|
+
type: 'sequence',
|
|
37
37
|
title,
|
|
38
38
|
mermaid,
|
|
39
|
-
description:
|
|
39
|
+
description: 'Sequence diagram showing interaction flow',
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
@@ -44,15 +44,15 @@ export function generateSequenceDiagram(title, steps) {
|
|
|
44
44
|
*/
|
|
45
45
|
export function generateFlowDiagram(title, nodes, edges) {
|
|
46
46
|
const mermaid = [
|
|
47
|
-
|
|
48
|
-
...nodes.map(
|
|
49
|
-
...edges.map(
|
|
50
|
-
].join(
|
|
47
|
+
'flowchart LR',
|
|
48
|
+
...nodes.map(n => ` ${n.id}[${n.label}]`),
|
|
49
|
+
...edges.map(e => ` ${e.from}${e.label ? `-->|"${e.label}"|` : '->>'}${e.to}`),
|
|
50
|
+
].join('\n');
|
|
51
51
|
return {
|
|
52
|
-
type:
|
|
52
|
+
type: 'flow',
|
|
53
53
|
title,
|
|
54
54
|
mermaid,
|
|
55
|
-
description:
|
|
55
|
+
description: 'Flow diagram showing process flow',
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
//# sourceMappingURL=mermaid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../src/mermaid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../src/mermaid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAA8B;IACrE,MAAM,OAAO,GAAG;QACd,UAAU;QACV,qBAAqB;QACrB,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YACrF,OAAO,WAAW,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,CAAC,CAAC;QACF,SAAS;QACT,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;KAC/D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,yBAAyB;QAChC,OAAO;QACP,WAAW,EAAE,mDAAmD;KACjE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAa,EACb,KAA0D;IAE1D,MAAM,OAAO,GAAG;QACd,iBAAiB;QACjB,GAAG,KAAK,CAAC,GAAG,CACV,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAClD;KACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,KAAK;QACL,OAAO;QACP,WAAW,EAAE,2CAA2C;KACzD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,KAAsC,EACtC,KAAqD;IAErD,MAAM,OAAO,GAAG;QACd,cAAc;QACd,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC;QAC5C,GAAG,KAAK,CAAC,GAAG,CACV,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CACpE;KACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK;QACL,OAAO;QACP,WAAW,EAAE,mCAAmC;KACjD,CAAC;AACJ,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generate ADR and Mermaid diagrams from project analysis.
|
|
5
5
|
*/
|
|
6
|
-
export type DiagramType =
|
|
6
|
+
export type DiagramType = 'component' | 'flow' | 'sequence' | 'er' | 'class';
|
|
7
7
|
export interface ArchitectureDiagram {
|
|
8
8
|
type: DiagramType;
|
|
9
9
|
title: string;
|
|
@@ -13,7 +13,7 @@ export interface ArchitectureDiagram {
|
|
|
13
13
|
export interface ADR {
|
|
14
14
|
id: string;
|
|
15
15
|
title: string;
|
|
16
|
-
status:
|
|
16
|
+
status: 'proposed' | 'accepted' | 'deprecated';
|
|
17
17
|
context: string;
|
|
18
18
|
decision: string;
|
|
19
19
|
consequences: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC;AAE7E,MAAM,WAAW,mBAAmB;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB"}
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
* Generate Architecture Decision Records.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import type { ADR } from
|
|
7
|
+
import type { ADR } from './types.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Generate an ADR file
|
|
11
11
|
*/
|
|
12
12
|
export function generateADR(adr: ADR): string {
|
|
13
|
-
|
|
13
|
+
return `# ${adr.id}: ${adr.title}
|
|
14
14
|
|
|
15
15
|
## Status
|
|
16
16
|
${adr.status}
|
|
@@ -33,19 +33,19 @@ ${adr.consequences}
|
|
|
33
33
|
* Create a new ADR
|
|
34
34
|
*/
|
|
35
35
|
export function createADR(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
id: string,
|
|
37
|
+
title: string,
|
|
38
|
+
context: string,
|
|
39
|
+
decision: string,
|
|
40
|
+
consequences: string
|
|
41
41
|
): ADR {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
return {
|
|
43
|
+
id,
|
|
44
|
+
title,
|
|
45
|
+
status: 'proposed',
|
|
46
|
+
context,
|
|
47
|
+
decision,
|
|
48
|
+
consequences,
|
|
49
|
+
createdAt: new Date().toISOString().split('T')[0],
|
|
50
|
+
};
|
|
51
51
|
}
|