@pi-harness/pi-harness 0.1.31 → 0.1.33
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/apps/web/dist/assets/index-CZMbiZj6.css +2 -0
- package/apps/web/dist/assets/index-DLcE8YQ7.js +26 -0
- package/apps/web/dist/index.html +2 -2
- package/apps/web/package.json +1 -1
- package/apps/web/server-dist/bin.js +19 -3
- package/apps/web/server-dist/bin.js.map +1 -1
- package/apps/web/src/server/bin.ts +18 -2
- package/apps/web/src/style.css +51 -1
- package/node_modules/@pi-harness/api-gateway/dist/index.d.ts.map +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/index.js +117 -11
- package/node_modules/@pi-harness/api-gateway/dist/index.js.map +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/agent-teams.json +5 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/annotation.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/archify.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/at-file.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/better-sidebar.json +5 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-fetch.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-session.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/canvas-draw.json +4 -4
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cleaner.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/code2skill.json +5 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context-doctor.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context.json +3 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cordis-group.json +12 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cordis-logger-console.json +16 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cordis-timer.json +11 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/dependency-checker.json +4 -12
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/fail-logger.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/genui.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/graph-memory.json +5 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/history-compressor.json +4 -4
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/hol-guard.json +4 -4
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/i18n-pair.json +3 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/image-compressor.json +4 -4
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/llm-verifier.json +5 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-client.json +5 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-panel.json +5 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/memory.json +5 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +5 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mock-server.json +5 -5
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/modlens.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/module-search.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/openpets.json +4 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-stars.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-guard.json +4 -4
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/readme-gen.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/recall-unread.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reverse-skill.json +4 -4
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bridge.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-export.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-insights.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-search.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-guard.json +4 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/sql-lens.json +5 -12
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/synapse.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/test-harness.json +5 -13
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/token-guard.json +3 -11
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/turn-rewind.json +3 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +3 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/web-research.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -3
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-search.json +4 -4
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/yaml-validator.json +3 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace.d.ts +18 -2
- package/node_modules/@pi-harness/api-gateway/dist/marketplace.d.ts.map +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace.js +93 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace.js.map +1 -1
- package/node_modules/@pi-harness/api-gateway/package.json +1 -1
- package/node_modules/@pi-harness/cli/dist/main.d.ts.map +1 -1
- package/node_modules/@pi-harness/cli/dist/main.js +21 -3
- package/node_modules/@pi-harness/cli/dist/main.js.map +1 -1
- package/node_modules/@pi-harness/cli/package.json +1 -1
- package/node_modules/@pi-harness/host-webserver/package.json +1 -1
- package/node_modules/@pi-harness/web-app/package.json +1 -1
- package/package.json +6 -6
- package/packages/api-gateway/dist/index.d.ts.map +1 -1
- package/packages/api-gateway/dist/index.js +117 -11
- package/packages/api-gateway/dist/index.js.map +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/agent-teams.json +5 -5
- package/packages/api-gateway/dist/marketplace-entries/official/anchored-standard.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/annotation.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/archify.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/at-file.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/auto-mode.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/better-sidebar.json +5 -5
- package/packages/api-gateway/dist/marketplace-entries/official/browser-fetch.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/browser-session.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/canvas-draw.json +4 -4
- package/packages/api-gateway/dist/marketplace-entries/official/change-verifier.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/cleaner.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/cli-notifier.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/code2skill.json +5 -5
- package/packages/api-gateway/dist/marketplace-entries/official/colleague-skill.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/context-doctor.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/context.json +3 -9
- package/packages/api-gateway/dist/marketplace-entries/official/cordis-group.json +12 -5
- package/packages/api-gateway/dist/marketplace-entries/official/cordis-logger-console.json +16 -5
- package/packages/api-gateway/dist/marketplace-entries/official/cordis-timer.json +11 -5
- package/packages/api-gateway/dist/marketplace-entries/official/cost-meter.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/dependency-checker.json +4 -12
- package/packages/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/fail-logger.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/genui.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/graph-memory.json +5 -5
- package/packages/api-gateway/dist/marketplace-entries/official/history-compressor.json +4 -4
- package/packages/api-gateway/dist/marketplace-entries/official/hol-guard.json +4 -4
- package/packages/api-gateway/dist/marketplace-entries/official/i18n-pair.json +3 -9
- package/packages/api-gateway/dist/marketplace-entries/official/image-compressor.json +4 -4
- package/packages/api-gateway/dist/marketplace-entries/official/llm-verifier.json +5 -5
- package/packages/api-gateway/dist/marketplace-entries/official/mcp-client.json +5 -11
- package/packages/api-gateway/dist/marketplace-entries/official/mcp-panel.json +5 -5
- package/packages/api-gateway/dist/marketplace-entries/official/memory.json +5 -5
- package/packages/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +5 -5
- package/packages/api-gateway/dist/marketplace-entries/official/mock-server.json +5 -5
- package/packages/api-gateway/dist/marketplace-entries/official/modlens.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/module-search.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/openpets.json +4 -10
- package/packages/api-gateway/dist/marketplace-entries/official/plan-execute.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-check.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-dev.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-finder.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-radar.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-stars.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/prompt-guard.json +4 -4
- package/packages/api-gateway/dist/marketplace-entries/official/prompt-library.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/readme-gen.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/recall-unread.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/reverse-skill.json +4 -4
- package/packages/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/secure-audit.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/session-bridge.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/session-compare.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/session-export.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/session-insights.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/session-search.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/skill-catalog.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/skill-guard.json +4 -11
- package/packages/api-gateway/dist/marketplace-entries/official/sql-lens.json +5 -12
- package/packages/api-gateway/dist/marketplace-entries/official/synapse.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/tab-manager.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/taskboard.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/test-harness.json +5 -13
- package/packages/api-gateway/dist/marketplace-entries/official/theme-studio.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/token-guard.json +3 -11
- package/packages/api-gateway/dist/marketplace-entries/official/turn-rewind.json +3 -10
- package/packages/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +3 -9
- package/packages/api-gateway/dist/marketplace-entries/official/web-research.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +3 -3
- package/packages/api-gateway/dist/marketplace-entries/official/workspace-search.json +4 -4
- package/packages/api-gateway/dist/marketplace-entries/official/yaml-validator.json +3 -9
- package/packages/api-gateway/dist/marketplace.d.ts +18 -2
- package/packages/api-gateway/dist/marketplace.d.ts.map +1 -1
- package/packages/api-gateway/dist/marketplace.js +93 -10
- package/packages/api-gateway/dist/marketplace.js.map +1 -1
- package/packages/api-gateway/package.json +1 -1
- package/packages/api-gateway/src/index.ts +121 -12
- package/packages/api-gateway/src/marketplace-entries/official/agent-teams.json +5 -5
- package/packages/api-gateway/src/marketplace-entries/official/anchored-standard.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/annotation.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/archify.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/at-file.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/auto-mode.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/better-sidebar.json +5 -5
- package/packages/api-gateway/src/marketplace-entries/official/browser-fetch.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/browser-session.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/canvas-draw.json +4 -4
- package/packages/api-gateway/src/marketplace-entries/official/change-verifier.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/cleaner.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/cli-notifier.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/code2skill.json +5 -5
- package/packages/api-gateway/src/marketplace-entries/official/colleague-skill.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/context-doctor.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/context.json +3 -9
- package/packages/api-gateway/src/marketplace-entries/official/cordis-group.json +12 -5
- package/packages/api-gateway/src/marketplace-entries/official/cordis-logger-console.json +16 -5
- package/packages/api-gateway/src/marketplace-entries/official/cordis-timer.json +11 -5
- package/packages/api-gateway/src/marketplace-entries/official/cost-meter.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/dependency-checker.json +4 -12
- package/packages/api-gateway/src/marketplace-entries/official/docker-sandbox.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/fail-logger.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/genui.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/git-time-capsule.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/graph-memory.json +5 -5
- package/packages/api-gateway/src/marketplace-entries/official/history-compressor.json +4 -4
- package/packages/api-gateway/src/marketplace-entries/official/hol-guard.json +4 -4
- package/packages/api-gateway/src/marketplace-entries/official/i18n-pair.json +3 -9
- package/packages/api-gateway/src/marketplace-entries/official/image-compressor.json +4 -4
- package/packages/api-gateway/src/marketplace-entries/official/llm-verifier.json +5 -5
- package/packages/api-gateway/src/marketplace-entries/official/mcp-client.json +5 -11
- package/packages/api-gateway/src/marketplace-entries/official/mcp-panel.json +5 -5
- package/packages/api-gateway/src/marketplace-entries/official/memory.json +5 -5
- package/packages/api-gateway/src/marketplace-entries/official/mirage-bridge.json +5 -5
- package/packages/api-gateway/src/marketplace-entries/official/mock-server.json +5 -5
- package/packages/api-gateway/src/marketplace-entries/official/modlens.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/module-search.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/obsidian-sync.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/openpets.json +4 -10
- package/packages/api-gateway/src/marketplace-entries/official/plan-execute.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/plugin-check.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/plugin-dev.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/plugin-finder.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/plugin-radar.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/plugin-stars.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/prompt-guard.json +4 -4
- package/packages/api-gateway/src/marketplace-entries/official/prompt-library.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/readme-gen.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/recall-unread.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/reverse-skill.json +4 -4
- package/packages/api-gateway/src/marketplace-entries/official/reviewer-bot.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/runtime-doctor.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/secure-audit.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/session-bookmarks.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/session-bridge.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/session-compare.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/session-export.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/session-insights.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/session-search.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/skill-catalog.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/skill-guard.json +4 -11
- package/packages/api-gateway/src/marketplace-entries/official/sql-lens.json +5 -12
- package/packages/api-gateway/src/marketplace-entries/official/synapse.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/tab-manager.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/taskboard.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/telemetry-blocker.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/test-harness.json +5 -13
- package/packages/api-gateway/src/marketplace-entries/official/theme-studio.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/token-guard.json +3 -11
- package/packages/api-gateway/src/marketplace-entries/official/turn-rewind.json +3 -10
- package/packages/api-gateway/src/marketplace-entries/official/undo-savepoint.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/vision-toolkit.json +3 -9
- package/packages/api-gateway/src/marketplace-entries/official/web-research.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/workspace-navigator.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/workspace-search.json +4 -4
- package/packages/api-gateway/src/marketplace-entries/official/yaml-validator.json +3 -9
- package/packages/api-gateway/src/marketplace.ts +113 -12
- package/packages/api-gateway/test/index.test.ts +148 -6
- package/packages/api-gateway/test/marketplace-schema.test.ts +12 -0
- package/packages/api-gateway/test/marketplace.test.ts +255 -354
- package/packages/bundle-web-app/package.json +1 -1
- package/packages/cli/dist/main.d.ts.map +1 -1
- package/packages/cli/dist/main.js +21 -3
- package/packages/cli/dist/main.js.map +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/cli/src/main.ts +20 -3
- package/packages/cli/test/cli.test.ts +20 -0
- package/packages/host-webserver/package.json +1 -1
- package/apps/web/dist/assets/index-D9ZcvGXi.js +0 -25
- package/apps/web/dist/assets/index-DJsNIiIo.css +0 -2
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
import { readdirSync, readFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
+
/** What a plugin does to the machine it is installed on, ordered from the least invasive to the most, so a reader can decide from the badges alone. This replaced free text, which produced 299 values across 78 entries with 284 of them held by a single plugin: the filter listed nearly one option per plugin and nothing could be compared against anything else. Every value here is derived from the plugin's own imports, including those it inherits from a plugin it depends on. */
|
|
5
|
+
const MARKETPLACE_CAPABILITY_VOCABULARY = [
|
|
6
|
+
{ id: "read-only", label: "只读运行" },
|
|
7
|
+
{ id: "session-data", label: "读取会话内容" },
|
|
8
|
+
{ id: "reads-files", label: "读取本机文件" },
|
|
9
|
+
{ id: "writes-files", label: "写入本机文件" },
|
|
10
|
+
{ id: "runs-commands", label: "执行本机命令" },
|
|
11
|
+
{ id: "local-server", label: "监听本地端口" },
|
|
12
|
+
{ id: "network-access", label: "访问网络" },
|
|
13
|
+
{ id: "model-calls", label: "额外调用模型" },
|
|
14
|
+
];
|
|
15
|
+
/** A badge that says a plugin changes nothing is a claim about trust, so an entry that also carries one of these is rejected rather than shown. */
|
|
16
|
+
const MARKETPLACE_EFFECT_CAPABILITIES = ["writes-files", "runs-commands", "local-server", "network-access", "model-calls"];
|
|
17
|
+
const marketplaceCapabilityLabels = new Map(MARKETPLACE_CAPABILITY_VOCABULARY.map((capability) => [capability.id, capability.label]));
|
|
18
|
+
function isMarketplaceCapabilityList(value) {
|
|
19
|
+
if (!Array.isArray(value) || value.length === 0)
|
|
20
|
+
return false;
|
|
21
|
+
const capabilities = value.filter((entry) => typeof entry === "string" && marketplaceCapabilityLabels.has(entry));
|
|
22
|
+
if (capabilities.length !== value.length || new Set(capabilities).size !== capabilities.length)
|
|
23
|
+
return false;
|
|
24
|
+
return !capabilities.includes("read-only") || !capabilities.some((entry) => MARKETPLACE_EFFECT_CAPABILITIES.includes(entry));
|
|
25
|
+
}
|
|
4
26
|
const npmPackagePattern = /^(?:@[a-z0-9._~-]+\/)?[a-z0-9._~-]+(?:\/[a-z0-9._~-]+)*$/;
|
|
5
27
|
const entryIdPattern = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
6
28
|
const versionPattern = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
|
|
@@ -36,9 +58,7 @@ function isMarketplacePlugin(value) {
|
|
|
36
58
|
categoryIdPattern.test(category.id) &&
|
|
37
59
|
typeof category.label === "string" &&
|
|
38
60
|
category.label.trim() !== "" &&
|
|
39
|
-
|
|
40
|
-
value.capabilities.length > 0 &&
|
|
41
|
-
value.capabilities.every((entry) => typeof entry === "string" && entry.trim() !== "") &&
|
|
61
|
+
isMarketplaceCapabilityList(value.capabilities) &&
|
|
42
62
|
Array.isArray(value.hooks) &&
|
|
43
63
|
value.hooks.length > 0 &&
|
|
44
64
|
value.hooks.every((entry) => typeof entry === "string" && entry.trim() !== "") &&
|
|
@@ -73,13 +93,19 @@ function loadMarketplacePlugins() {
|
|
|
73
93
|
});
|
|
74
94
|
const ids = new Set();
|
|
75
95
|
const packages = new Set();
|
|
96
|
+
// The category tabs are built from whichever entry is read first, so two entries that spell the same category differently would make the label depend on file order.
|
|
97
|
+
const categoryLabels = new Map();
|
|
76
98
|
for (const plugin of plugins) {
|
|
77
99
|
if (ids.has(plugin.id))
|
|
78
100
|
throw new Error(`Duplicate marketplace id: ${plugin.id}`);
|
|
79
101
|
if (packages.has(plugin.packageName))
|
|
80
102
|
throw new Error(`Duplicate marketplace package: ${plugin.packageName}`);
|
|
103
|
+
const categoryLabel = categoryLabels.get(plugin.category.id);
|
|
104
|
+
if (categoryLabel !== undefined && categoryLabel !== plugin.category.label)
|
|
105
|
+
throw new Error(`Conflicting marketplace category label for ${plugin.category.id}: ${categoryLabel} and ${plugin.category.label}`);
|
|
81
106
|
ids.add(plugin.id);
|
|
82
107
|
packages.add(plugin.packageName);
|
|
108
|
+
categoryLabels.set(plugin.category.id, plugin.category.label);
|
|
83
109
|
}
|
|
84
110
|
return plugins;
|
|
85
111
|
}
|
|
@@ -151,11 +177,32 @@ async function fetchNpmPackageStatistics(packageName, fetcher, timeoutMs) {
|
|
|
151
177
|
export function createMarketplaceStatisticsLoader(options = {}) {
|
|
152
178
|
const fetcher = options.fetcher ?? ((url, init) => globalThis.fetch(url, init));
|
|
153
179
|
const failureTtlMs = options.failureTtlMs ?? 60_000;
|
|
180
|
+
// Consecutive failures double the retry window up to this ceiling: an open console polls the catalog every few seconds, so a flat failure window would send one registry lookup per catalogued package every minute for as long as the tab stays open.
|
|
181
|
+
const failureMaxTtlMs = options.failureMaxTtlMs ?? 30 * 60_000;
|
|
154
182
|
const now = options.now ?? Date.now;
|
|
155
183
|
const timeoutMs = options.timeoutMs ?? 3_000;
|
|
156
184
|
const ttlMs = options.ttlMs ?? 6 * 60 * 60 * 1_000;
|
|
185
|
+
// The registry answers an unthrottled fan-out over the whole catalogue with 429s, so lookups queue behind a small number of slots instead of leaving at once.
|
|
186
|
+
const concurrency = Math.max(1, Math.trunc(options.concurrency ?? 4));
|
|
157
187
|
const cache = new Map();
|
|
158
188
|
const inFlight = new Map();
|
|
189
|
+
const waiting = [];
|
|
190
|
+
let active = 0;
|
|
191
|
+
const acquireSlot = async () => {
|
|
192
|
+
if (active < concurrency) {
|
|
193
|
+
active += 1;
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
await new Promise((resolveSlot) => waiting.push(resolveSlot));
|
|
197
|
+
};
|
|
198
|
+
const releaseSlot = () => {
|
|
199
|
+
const next = waiting.shift();
|
|
200
|
+
if (next === undefined)
|
|
201
|
+
active -= 1;
|
|
202
|
+
else
|
|
203
|
+
next();
|
|
204
|
+
};
|
|
205
|
+
const failureTtl = (failures) => Math.min(failureTtlMs * 2 ** Math.min(failures - 1, 20), failureMaxTtlMs);
|
|
159
206
|
const loadPackage = async (packageName) => {
|
|
160
207
|
const timestamp = now();
|
|
161
208
|
const cached = cache.get(packageName);
|
|
@@ -164,11 +211,21 @@ export function createMarketplaceStatisticsLoader(options = {}) {
|
|
|
164
211
|
const pending = inFlight.get(packageName);
|
|
165
212
|
if (pending !== undefined)
|
|
166
213
|
return pending;
|
|
167
|
-
|
|
214
|
+
// The slot is taken inside the promise so the in-flight entry is still registered synchronously and concurrent callers keep sharing one request.
|
|
215
|
+
const request = (async () => {
|
|
216
|
+
await acquireSlot();
|
|
217
|
+
try {
|
|
218
|
+
return await fetchNpmPackageStatistics(packageName, fetcher, timeoutMs);
|
|
219
|
+
}
|
|
220
|
+
finally {
|
|
221
|
+
releaseSlot();
|
|
222
|
+
}
|
|
223
|
+
})();
|
|
168
224
|
inFlight.set(packageName, request);
|
|
169
225
|
try {
|
|
170
226
|
const result = await request;
|
|
171
|
-
|
|
227
|
+
const failures = result.failed ? (cached?.failures ?? 0) + 1 : 0;
|
|
228
|
+
cache.set(packageName, { expiresAt: now() + (result.failed ? failureTtl(failures) : ttlMs), failures, result });
|
|
172
229
|
return result;
|
|
173
230
|
}
|
|
174
231
|
finally {
|
|
@@ -176,11 +233,31 @@ export function createMarketplaceStatisticsLoader(options = {}) {
|
|
|
176
233
|
inFlight.delete(packageName);
|
|
177
234
|
}
|
|
178
235
|
};
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const entries = await Promise.all(packageNames.map(async (packageName) => [packageName, await loadPackage(packageName)]));
|
|
236
|
+
const packageNames = (plugins) => [...new Set(plugins.map((plugin) => marketplaceNpmPackageName(plugin.packageName)))].sort();
|
|
237
|
+
const load = async (plugins) => {
|
|
238
|
+
const entries = await Promise.all(packageNames(plugins).map(async (packageName) => [packageName, await loadPackage(packageName)]));
|
|
182
239
|
return new Map(entries.flatMap(([packageName, result]) => (result.statistics === undefined ? [] : [[packageName, result.statistics]])));
|
|
183
240
|
};
|
|
241
|
+
const readCached = (plugins) => {
|
|
242
|
+
const timestamp = now();
|
|
243
|
+
const statistics = new Map();
|
|
244
|
+
// Readiness tracks whether a package has ever been looked up, not whether its entry is fresh, so an expiring entry refreshes in the background without dropping the catalogue back to an unsorted order.
|
|
245
|
+
let ready = true;
|
|
246
|
+
for (const packageName of packageNames(plugins)) {
|
|
247
|
+
const cached = cache.get(packageName);
|
|
248
|
+
if (cached === undefined)
|
|
249
|
+
ready = false;
|
|
250
|
+
if (cached !== undefined && cached.expiresAt > timestamp) {
|
|
251
|
+
if (cached.result.statistics !== undefined)
|
|
252
|
+
statistics.set(packageName, cached.result.statistics);
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
// A prewarm has nobody to report to, and a catalogue sorted without npm statistics is not worth crashing the process over an unhandled rejection.
|
|
256
|
+
void loadPackage(packageName).catch(() => { });
|
|
257
|
+
}
|
|
258
|
+
return { ready, statistics };
|
|
259
|
+
};
|
|
260
|
+
return Object.assign(load, { readCached });
|
|
184
261
|
}
|
|
185
262
|
export function attachMarketplaceStatistics(plugins, statistics) {
|
|
186
263
|
return plugins.map((plugin) => {
|
|
@@ -205,7 +282,9 @@ export function searchMarketplace(query = "", capability = "", category = "") {
|
|
|
205
282
|
const normalizedCapability = capability.trim().toLowerCase();
|
|
206
283
|
const normalizedCategory = category.trim().toLowerCase();
|
|
207
284
|
return MARKETPLACE_PLUGINS.filter((plugin) => {
|
|
208
|
-
|
|
285
|
+
// The capability labels are searched alongside their ids: the ids are what the filter and the URL carry, and the labels are what the reader sees on the card.
|
|
286
|
+
const capabilities = plugin.capabilities.flatMap((item) => [item, marketplaceCapabilityLabels.get(item) ?? item]);
|
|
287
|
+
const searchable = [plugin.name, plugin.packageName, plugin.description, plugin.author, ...capabilities, ...plugin.hooks].join(" ").toLowerCase();
|
|
209
288
|
return ((normalizedQuery === "" || searchable.includes(normalizedQuery)) &&
|
|
210
289
|
(normalizedCapability === "" || plugin.capabilities.some((item) => item.toLowerCase() === normalizedCapability)) &&
|
|
211
290
|
(normalizedCategory === "" || plugin.category.id.toLowerCase() === normalizedCategory));
|
|
@@ -223,7 +302,11 @@ export function paginateMarketplace(items, page = 0, pageSize = 24) {
|
|
|
223
302
|
hasNext: start + normalizedPageSize < items.length,
|
|
224
303
|
};
|
|
225
304
|
}
|
|
226
|
-
|
|
305
|
+
// Kept in vocabulary order rather than sorted, so the filter reads from the least invasive option to the most, and an unused capability is left out rather than offering a filter that returns nothing.
|
|
306
|
+
export const MARKETPLACE_CAPABILITIES = MARKETPLACE_CAPABILITY_VOCABULARY.map((capability) => ({
|
|
307
|
+
...capability,
|
|
308
|
+
count: MARKETPLACE_PLUGINS.filter((plugin) => plugin.capabilities.includes(capability.id)).length,
|
|
309
|
+
})).filter((capability) => capability.count > 0);
|
|
227
310
|
export const MARKETPLACE_CATEGORIES = [
|
|
228
311
|
...new Map(MARKETPLACE_PLUGINS.map((plugin) => [plugin.category.id, { id: plugin.category.id, label: plugin.category.label, count: 0 }])).values(),
|
|
229
312
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../src/marketplace.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../src/marketplace.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,8 @@ interface ApiServices {
|
|
|
32
32
|
readonly pluginUi: PiPluginUiRegistry | undefined;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
// The first paint waits for every console endpoint to answer, so the catalogue is sorted from whatever npm statistics are already cached and the misses are warmed in the background instead of held on to.
|
|
36
|
+
const { readCached: readCachedMarketplaceStatistics } = createMarketplaceStatisticsLoader();
|
|
36
37
|
|
|
37
38
|
const RUNTIME_ENTRY_NAME = "@pi-harness/core/plugins/runtime";
|
|
38
39
|
|
|
@@ -42,7 +43,13 @@ const IMPORT_CONTENT_LIMIT_BYTES = 10 * 1024 * 1024;
|
|
|
42
43
|
const IMPORT_BODY_LIMIT_BYTES = 16 * 1024 * 1024;
|
|
43
44
|
// Retained trajectory events are replayed to every SSE client and returned by /api/session, so the array must stay bounded.
|
|
44
45
|
const MAX_RETAINED_EVENTS = 2000;
|
|
46
|
+
// Tool calls that opened but never closed. Far above any real concurrency, so the cap only ever trims a run the runtime abandoned.
|
|
47
|
+
const MAX_PENDING_TOOL_CALLS = 256;
|
|
48
|
+
/** A session event with the two fields the gateway owns: when it arrived, and for a tool call how long it took. */
|
|
49
|
+
type StampedSessionEvent = AgentSessionEvent & { readonly receivedAt: number; readonly durationMs?: number };
|
|
45
50
|
const GIT_TIMEOUT_MS = 15_000;
|
|
51
|
+
const PROCESS_FAILURE_TEXT_LIMIT = 400;
|
|
52
|
+
const PROCESS_TIMEOUT_MS = 120_000;
|
|
46
53
|
// Mutating commands run user hooks (pre-commit, lint-staged, test suites) and may stage large trees; killing them part-way leaves index.lock and a half-finished operation behind, so they get a far more generous bound than read-only queries.
|
|
47
54
|
const GIT_MUTATION_TIMEOUT_MS = 120_000;
|
|
48
55
|
|
|
@@ -95,10 +102,14 @@ function jsonSafe(value: unknown, seen = new WeakSet<object>()): unknown {
|
|
|
95
102
|
}
|
|
96
103
|
}
|
|
97
104
|
|
|
105
|
+
// A plugin that contributes tools only joins on the next start, so the console remembers what it installed until then. That memory is about one particular process, and the console cannot tell a restart from a reconnect on its own, so the identity of this process rides along with the status it already polls.
|
|
106
|
+
const PROCESS_STARTED_AT = new Date(Date.now() - Math.round(process.uptime() * 1000)).toISOString();
|
|
107
|
+
|
|
98
108
|
function createStatus(services: ApiServices, events: readonly AgentSessionEvent[]) {
|
|
99
109
|
const activeModel = services.runtime.session.model ?? services.models.model;
|
|
100
110
|
const cwd = activeCwd(services);
|
|
101
111
|
return {
|
|
112
|
+
processStartedAt: PROCESS_STARTED_AT,
|
|
102
113
|
status: services.runtime.session.isStreaming ? "running" : "ready",
|
|
103
114
|
model: activeModel.provider + "/" + activeModel.id,
|
|
104
115
|
messages: services.runtime.session.messages.length,
|
|
@@ -327,6 +338,42 @@ function pluginSummary(entry: LoaderEntrySummary) {
|
|
|
327
338
|
};
|
|
328
339
|
}
|
|
329
340
|
|
|
341
|
+
/** The state a marketplace plugin is in between the install that wrote it and the restart that loads it. It is not a loader state because the loader has no entry for it at all. */
|
|
342
|
+
const RESTART_REQUIRED_STATE = "restart-required";
|
|
343
|
+
|
|
344
|
+
// The install writes the entry as two adjacent lines, so this reads back exactly what `marketplaceProfileEntry` writes rather than parsing the profile as YAML, which the `!!js` tags in it would need a schema for.
|
|
345
|
+
const MARKETPLACE_PROFILE_ENTRY_PATTERN = /^[ \t]*- id: (marketplace-\S+)[ \t]*\r?\n[ \t]*name: "([^"]+)"/gmu;
|
|
346
|
+
|
|
347
|
+
/** The loader holds what is running; the profile file holds what is installed. The two differ for a plugin that contributes tools, which cannot join a harness that is already running: the install leaves its package and its profile entry in place and the plugin arrives on the next start. Reading only the loader makes that plugin indistinguishable from one that was never installed, which is why the console answered an install that had just succeeded with "nothing is installed" and then could not uninstall what it had hidden. */
|
|
348
|
+
async function readMarketplaceProfileEntries(configPath: string): Promise<readonly { readonly id: string; readonly packageName: string }[]> {
|
|
349
|
+
const source = await readFile(configPath, "utf8").catch(() => undefined);
|
|
350
|
+
if (source === undefined) return [];
|
|
351
|
+
const entries: { id: string; packageName: string }[] = [];
|
|
352
|
+
for (const match of source.matchAll(MARKETPLACE_PROFILE_ENTRY_PATTERN)) entries.push({ id: match[1] ?? "", packageName: match[2] ?? "" });
|
|
353
|
+
return entries;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/** The installed plugins the loader does not have, described the same way a loaded one is so the console can list them side by side instead of leaving the user to guess what happened to the install. */
|
|
357
|
+
async function restartPendingSummaries(services: ApiServices): Promise<readonly ReturnType<typeof pluginSummary>[]> {
|
|
358
|
+
const configPath = services.launch.configPath;
|
|
359
|
+
if (configPath === undefined || services.loader === undefined) return [];
|
|
360
|
+
const loaded = new Set([...services.loader.entries()].map((entry) => entry.options.id));
|
|
361
|
+
const entries = await readMarketplaceProfileEntries(configPath);
|
|
362
|
+
return entries
|
|
363
|
+
.filter((entry) => !loaded.has(entry.id))
|
|
364
|
+
.map((entry) => {
|
|
365
|
+
const plugin = MARKETPLACE_PLUGINS.find((item) => item.packageName === entry.packageName);
|
|
366
|
+
return {
|
|
367
|
+
id: entry.id,
|
|
368
|
+
name: entry.packageName,
|
|
369
|
+
enabled: true,
|
|
370
|
+
state: RESTART_REQUIRED_STATE,
|
|
371
|
+
removable: true,
|
|
372
|
+
category: plugin?.category,
|
|
373
|
+
};
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
|
|
330
377
|
function pluginLoaded(services: ApiServices, packageName: string): boolean {
|
|
331
378
|
return services.loader !== undefined && [...services.loader.entries()].some((entry) => entry.options.name === packageName && !entry.disabled);
|
|
332
379
|
}
|
|
@@ -470,11 +517,28 @@ function registerPluginPanels(context: Context, services: ApiServices): () => vo
|
|
|
470
517
|
return () => disposers.reverse().forEach((dispose) => dispose());
|
|
471
518
|
}
|
|
472
519
|
|
|
520
|
+
// npm ends every failure with the path to a debug log inside its own cache, which the reader of this console has no reason to open and no easy way to reach.
|
|
521
|
+
const PROCESS_FAILURE_NOISE = /^npm (error|ERR!) A complete log of this run can be found in:/u;
|
|
522
|
+
|
|
523
|
+
// npm reports a failure over many lines and the whole text is shown to someone who never typed the command, so the lines are joined up to a character budget and the command itself stays on the cause for diagnostics. Node's own message is never used as the fallback: it reads `Command failed: <the whole command line>`, which is exactly what this is removing.
|
|
524
|
+
function processFailureText(executable: string, stderr: string, error: ExecFileException): string {
|
|
525
|
+
const text = stderr
|
|
526
|
+
.split(/\r?\n/u)
|
|
527
|
+
.map((line) => line.trim())
|
|
528
|
+
.filter((line) => line !== "" && !PROCESS_FAILURE_NOISE.test(line))
|
|
529
|
+
.join(" ");
|
|
530
|
+
if (text === "")
|
|
531
|
+
return error.killed === true
|
|
532
|
+
? `${executable} was stopped after ${PROCESS_TIMEOUT_MS / 1000}s`
|
|
533
|
+
: `${executable} exited with code ${error.code ?? "unknown"} and reported nothing`;
|
|
534
|
+
return text.length <= PROCESS_FAILURE_TEXT_LIMIT ? text : text.slice(0, PROCESS_FAILURE_TEXT_LIMIT) + "…";
|
|
535
|
+
}
|
|
536
|
+
|
|
473
537
|
function runProcess(executable: string, args: readonly string[], cwd: string): Promise<{ stdout: string; stderr: string }> {
|
|
474
538
|
return new Promise((resolveProcess, rejectProcess) => {
|
|
475
|
-
execFile(executable, [...args], { cwd, timeout:
|
|
539
|
+
execFile(executable, [...args], { cwd, timeout: PROCESS_TIMEOUT_MS, maxBuffer: 2 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
476
540
|
if (error) {
|
|
477
|
-
rejectProcess(new Error(`${executable} ${args.join(" ")}
|
|
541
|
+
rejectProcess(new Error(processFailureText(executable, stderr, error), { cause: { command: `${executable} ${args.join(" ")}`, error } }));
|
|
478
542
|
return;
|
|
479
543
|
}
|
|
480
544
|
resolveProcess({ stdout, stderr });
|
|
@@ -753,9 +817,31 @@ export default {
|
|
|
753
817
|
};
|
|
754
818
|
const disposePluginPanels = registerPluginPanels(context, services);
|
|
755
819
|
let busy = false;
|
|
756
|
-
const events:
|
|
820
|
+
const events: StampedSessionEvent[] = [];
|
|
757
821
|
const eventClients = new Set<ServerResponse>();
|
|
758
|
-
|
|
822
|
+
// Pi puts a wall-clock on a message payload and nowhere else, so a tool call has no time of its own and nothing downstream can recover when the harness saw it. The gateway is the one place that sees every event as it happens, so it stamps each one on arrival, and pairs a tool call's two events to record how long the call took.
|
|
823
|
+
// The stamp is written onto the event rather than onto a copy: a copy would give every event a new identity, and the serializer's cycle detection reads identity, so a self-referential event would serialize one level deeper on every hop.
|
|
824
|
+
const toolCallStartedAt = new Map<string, number>();
|
|
825
|
+
const stampEvent = (event: AgentSessionEvent): StampedSessionEvent => {
|
|
826
|
+
const receivedAt = Date.now();
|
|
827
|
+
const toolCallId = (event as { readonly toolCallId?: unknown }).toolCallId;
|
|
828
|
+
if (typeof toolCallId === "string" && event.type === "tool_execution_start") {
|
|
829
|
+
// A call whose end never arrives would otherwise keep its entry forever; the oldest is dropped rather than letting a stalled run grow the map without bound.
|
|
830
|
+
if (toolCallStartedAt.size >= MAX_PENDING_TOOL_CALLS) {
|
|
831
|
+
const oldest = toolCallStartedAt.keys().next().value;
|
|
832
|
+
if (oldest !== undefined) toolCallStartedAt.delete(oldest);
|
|
833
|
+
}
|
|
834
|
+
toolCallStartedAt.set(toolCallId, receivedAt);
|
|
835
|
+
}
|
|
836
|
+
if (typeof toolCallId === "string" && event.type === "tool_execution_end") {
|
|
837
|
+
const startedAt = toolCallStartedAt.get(toolCallId);
|
|
838
|
+
toolCallStartedAt.delete(toolCallId);
|
|
839
|
+
if (startedAt !== undefined) return Object.assign(event, { receivedAt, durationMs: receivedAt - startedAt });
|
|
840
|
+
}
|
|
841
|
+
return Object.assign(event, { receivedAt });
|
|
842
|
+
};
|
|
843
|
+
const handleEvent = (rawEvent: AgentSessionEvent) => {
|
|
844
|
+
const event = stampEvent(rawEvent);
|
|
759
845
|
// Streaming deltas reach clients live over SSE and each one carries the whole partial message, so only durable events are retained for snapshots.
|
|
760
846
|
if (event.type !== "message_update") {
|
|
761
847
|
events.push(event);
|
|
@@ -1074,8 +1160,10 @@ export default {
|
|
|
1074
1160
|
});
|
|
1075
1161
|
const disposePlugins = services.webServer.register({
|
|
1076
1162
|
path: "/api/plugins",
|
|
1077
|
-
handler(_request, response) {
|
|
1078
|
-
const
|
|
1163
|
+
async handler(_request, response) {
|
|
1164
|
+
const loaded = services.loader ? [...services.loader.entries()].map(pluginSummary) : [];
|
|
1165
|
+
// The pending entries follow the loaded ones so a list that was stable before an install stays in the same order after it.
|
|
1166
|
+
const items = [...loaded, ...(await restartPendingSummaries(services))];
|
|
1079
1167
|
sendJson(response, 200, jsonSafe({ items }));
|
|
1080
1168
|
},
|
|
1081
1169
|
});
|
|
@@ -1096,7 +1184,7 @@ export default {
|
|
|
1096
1184
|
});
|
|
1097
1185
|
const disposeMarketplace = services.webServer.register({
|
|
1098
1186
|
path: "/api/marketplace",
|
|
1099
|
-
|
|
1187
|
+
handler(request, response) {
|
|
1100
1188
|
if (request.method !== "GET") {
|
|
1101
1189
|
sendJson(response, 405, { error: "Method not allowed" });
|
|
1102
1190
|
return;
|
|
@@ -1123,10 +1211,10 @@ export default {
|
|
|
1123
1211
|
return;
|
|
1124
1212
|
}
|
|
1125
1213
|
const filtered = searchMarketplace(query, capability, category);
|
|
1214
|
+
const cached = readCachedMarketplaceStatistics(MARKETPLACE_PLUGINS);
|
|
1215
|
+
// Recommendation is only applied once the whole catalogue has been looked up. Scoring a half-warm cache would reorder the grid under the reader's cursor on every poll as the background lookups land, which costs more than the few seconds the first sort is delayed.
|
|
1126
1216
|
const items =
|
|
1127
|
-
sort === "recommended"
|
|
1128
|
-
? sortMarketplaceByRecommendation(attachMarketplaceStatistics(filtered, await loadMarketplaceStatistics(MARKETPLACE_PLUGINS)))
|
|
1129
|
-
: filtered;
|
|
1217
|
+
sort === "recommended" && cached.ready ? sortMarketplaceByRecommendation(attachMarketplaceStatistics(filtered, cached.statistics)) : filtered;
|
|
1130
1218
|
sendJson(response, 200, {
|
|
1131
1219
|
...paginateMarketplace(items, page, pageSize),
|
|
1132
1220
|
capabilities: MARKETPLACE_CAPABILITIES,
|
|
@@ -1169,6 +1257,11 @@ export default {
|
|
|
1169
1257
|
sendJson(response, 409, { error: "Plugin is already installed", plugin });
|
|
1170
1258
|
return;
|
|
1171
1259
|
}
|
|
1260
|
+
// A plugin already waiting for a restart is installed even though the loader has no entry for it, so installing it again would re-run npm and report a fresh restart for work that is already done.
|
|
1261
|
+
if ((await readMarketplaceProfileEntries(configPath)).some((entry) => entry.packageName === plugin.packageName)) {
|
|
1262
|
+
sendJson(response, 200, { plugin, installed: true, restartRequired: true });
|
|
1263
|
+
return;
|
|
1264
|
+
}
|
|
1172
1265
|
const installDirectory = await marketplaceInstallDirectory(configPath, services.launch.cwd);
|
|
1173
1266
|
const packageJsonPath = join(installDirectory, "package.json");
|
|
1174
1267
|
const packageLockPath = join(installDirectory, "package-lock.json");
|
|
@@ -1298,7 +1391,23 @@ export default {
|
|
|
1298
1391
|
}
|
|
1299
1392
|
const entry = [...loader.entries()].find((item) => item.id === payload.id || item.options.id === payload.id);
|
|
1300
1393
|
if (entry === undefined) {
|
|
1301
|
-
|
|
1394
|
+
// A plugin waiting for a restart has no loader entry to remove, only the profile entry and the package the install left behind. Refusing here left the user unable to undo an install until they restarted the very process they installed it to avoid restarting.
|
|
1395
|
+
const pending = (await readMarketplaceProfileEntries(configPath)).find((item) => item.id === payload.id);
|
|
1396
|
+
const pendingPlugin = pending === undefined ? undefined : MARKETPLACE_PLUGINS.find((item) => item.packageName === pending.packageName);
|
|
1397
|
+
if (pending === undefined || pendingPlugin === undefined) {
|
|
1398
|
+
sendJson(response, 404, { error: "Installed plugin was not found" });
|
|
1399
|
+
return;
|
|
1400
|
+
}
|
|
1401
|
+
const pendingProfileBefore = await readFile(configPath, "utf8");
|
|
1402
|
+
const pendingInstallDirectory = await marketplaceInstallDirectory(configPath, services.launch.cwd);
|
|
1403
|
+
try {
|
|
1404
|
+
await updateMarketplaceProfile(configPath, pending.id, { remove: true });
|
|
1405
|
+
await runProcess("npm", ["uninstall", "--package-lock=false", marketplaceNpmPackageName(pendingPlugin.packageName)], pendingInstallDirectory);
|
|
1406
|
+
sendJson(response, 200, { uninstalled: true, id: payload.id });
|
|
1407
|
+
} catch (error) {
|
|
1408
|
+
await writeFile(configPath, pendingProfileBefore, "utf8").catch(() => {});
|
|
1409
|
+
sendJson(response, 502, { error: errorText(error) });
|
|
1410
|
+
}
|
|
1302
1411
|
return;
|
|
1303
1412
|
}
|
|
1304
1413
|
const plugin = marketplacePluginForEntry(entry);
|
|
@@ -3,18 +3,18 @@
|
|
|
3
3
|
"packageName": "@pi-harness/plugin-agent-teams",
|
|
4
4
|
"version": "0.1.29",
|
|
5
5
|
"name": "Agent Team Board",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "在当前会话内维护一份角色、任务依赖与留言板,不会额外启动 agent,也不会对外发消息。",
|
|
7
7
|
"author": "Pi Harness",
|
|
8
8
|
"repository": "https://github.com/pi-harness/pi-harness",
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
12
|
"category": {
|
|
13
|
-
"id": "
|
|
14
|
-
"label": "
|
|
13
|
+
"id": "workflow",
|
|
14
|
+
"label": "工作流"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
17
|
-
"hooks": ["
|
|
16
|
+
"capabilities": ["read-only", "session-data"],
|
|
17
|
+
"hooks": ["会话生命周期", "插件面板"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-agent-teams",
|
|
20
20
|
"config": {}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"packageName": "@pi-harness/plugin-anchored-standard",
|
|
4
4
|
"version": "0.1.29",
|
|
5
5
|
"name": "Anchored Standard",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "按显式的工具白名单审计 agent 的执行轨迹,标出越界的调用。",
|
|
7
7
|
"author": "Pi Harness",
|
|
8
8
|
"repository": "https://github.com/pi-harness/pi-harness",
|
|
9
9
|
"license": "MIT",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"id": "security",
|
|
14
14
|
"label": "安全"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
17
|
-
"hooks": ["
|
|
16
|
+
"capabilities": ["read-only"],
|
|
17
|
+
"hooks": ["会话事件", "插件面板"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-anchored-standard",
|
|
20
20
|
"config": {}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"packageName": "@pi-harness/plugin-annotation",
|
|
4
4
|
"version": "0.1.29",
|
|
5
5
|
"name": "Annotations",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "把对话里选中的片段和批注存下来,作为后续对话的上下文。",
|
|
7
7
|
"author": "Pi Harness",
|
|
8
8
|
"repository": "https://github.com/pi-harness/pi-harness",
|
|
9
9
|
"license": "MIT",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"id": "context",
|
|
14
14
|
"label": "上下文管理"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
17
|
-
"hooks": ["
|
|
16
|
+
"capabilities": ["read-only"],
|
|
17
|
+
"hooks": ["插件面板"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-annotation",
|
|
20
20
|
"config": {}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"packageName": "@pi-harness/plugin-archify",
|
|
4
4
|
"version": "0.1.29",
|
|
5
5
|
"name": "Architecture Map",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "从工作区的模块和依赖清单生成一张只读的架构图。",
|
|
7
7
|
"author": "Pi Harness",
|
|
8
8
|
"repository": "https://github.com/pi-harness/pi-harness",
|
|
9
9
|
"license": "MIT",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"id": "developer",
|
|
14
14
|
"label": "开发工具"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
17
|
-
"hooks": ["
|
|
16
|
+
"capabilities": ["reads-files", "runs-commands"],
|
|
17
|
+
"hooks": ["工作区文件", "依赖清单", "插件面板"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-archify",
|
|
20
20
|
"config": {}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"packageName": "@pi-harness/plugin-at-file",
|
|
4
4
|
"version": "0.1.29",
|
|
5
5
|
"name": "@file Context",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "把工作区里的单个文件(上限 256 KiB、严格 UTF-8)作为只读上下文附给模型,路径限定在工作区内且不跟随符号链接。",
|
|
7
7
|
"author": "Pi Harness",
|
|
8
8
|
"repository": "https://github.com/pi-harness/pi-harness",
|
|
9
9
|
"license": "MIT",
|
|
@@ -13,16 +13,8 @@
|
|
|
13
13
|
"id": "context",
|
|
14
14
|
"label": "上下文管理"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
|
|
18
|
-
"canonical workspace path confinement",
|
|
19
|
-
"no-follow regular-file reads",
|
|
20
|
-
"untrusted context framing",
|
|
21
|
-
"closing-tag neutralization",
|
|
22
|
-
"cancellable sequential execution",
|
|
23
|
-
"descriptor-safe normalized panel"
|
|
24
|
-
],
|
|
25
|
-
"hooks": ["file context tool", "workspace file read", "plugin UI"],
|
|
16
|
+
"capabilities": ["read-only", "reads-files"],
|
|
17
|
+
"hooks": ["文件上下文工具", "工作区文件读取", "插件面板"],
|
|
26
18
|
"profile": {
|
|
27
19
|
"name": "@pi-harness/plugin-at-file",
|
|
28
20
|
"config": {}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"packageName": "@pi-harness/plugin-auto-mode",
|
|
4
4
|
"version": "0.1.29",
|
|
5
5
|
"name": "Auto Mode",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "在受控策略下执行 argv 命令:拒绝 shell 包装,危险操作要求确认。",
|
|
7
7
|
"author": "Pi Harness",
|
|
8
8
|
"repository": "https://github.com/pi-harness/pi-harness",
|
|
9
9
|
"license": "MIT",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"id": "security",
|
|
14
14
|
"label": "安全"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
17
|
-
"hooks": ["argv
|
|
16
|
+
"capabilities": ["reads-files", "runs-commands"],
|
|
17
|
+
"hooks": ["argv 执行", "插件面板"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-auto-mode",
|
|
20
20
|
"config": {
|
|
@@ -3,18 +3,18 @@
|
|
|
3
3
|
"packageName": "@pi-harness/plugin-better-sidebar",
|
|
4
4
|
"version": "0.1.29",
|
|
5
5
|
"name": "Better Sidebar",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "在对话旁边显示工作区、Git 与会话概览,只读不改文件。",
|
|
7
7
|
"author": "Pi Harness",
|
|
8
8
|
"repository": "https://github.com/pi-harness/pi-harness",
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
12
|
"category": {
|
|
13
|
-
"id": "
|
|
14
|
-
"label": "
|
|
13
|
+
"id": "interface",
|
|
14
|
+
"label": "界面增强"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
17
|
-
"hooks": ["
|
|
16
|
+
"capabilities": ["session-data", "reads-files", "runs-commands"],
|
|
17
|
+
"hooks": ["工作区扫描", "只读 Git", "会话管理器", "插件面板"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-better-sidebar",
|
|
20
20
|
"config": {}
|