@pi-harness/pi-harness 0.1.30 → 0.1.32
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 +1 -1
- package/apps/web/dist/assets/index-BqOM0elx.css +2 -0
- package/apps/web/dist/assets/index-x2UhIAWm.js +25 -0
- package/apps/web/dist/index.html +2 -2
- package/apps/web/package.json +1 -1
- package/apps/web/profile/cordis.yml +0 -221
- package/apps/web/server-dist/bin.js +11 -3
- package/apps/web/server-dist/bin.js.map +1 -1
- package/apps/web/src/server/bin.ts +10 -2
- package/apps/web/src/style.css +30 -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 +70 -18
- 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 +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/anchored-standard.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/annotation.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/archify.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/at-file.json +1 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/auto-mode.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/better-sidebar.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-fetch.json +1 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/browser-session.json +1 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/canvas-draw.json +2 -2
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/change-verifier.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cleaner.json +1 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cli-notifier.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/code2skill.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/colleague-skill.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context-doctor.json +1 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/context.json +1 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cordis-group.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cordis-logger-console.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cordis-timer.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/cost-meter.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/dependency-checker.json +2 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +1 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/fail-logger.json +1 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/genui.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +1 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/graph-memory.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/history-compressor.json +2 -2
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/hol-guard.json +2 -2
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/i18n-pair.json +1 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/image-compressor.json +2 -2
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/llm-verifier.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-client.json +2 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mcp-panel.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/memory.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/mock-server.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/modlens.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/module-search.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/openpets.json +2 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plan-execute.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-check.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-dev.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-finder.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-radar.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/plugin-stars.json +1 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-guard.json +2 -2
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/prompt-library.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/readme-gen.json +1 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/recall-unread.json +1 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reverse-skill.json +2 -2
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/secure-audit.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-bridge.json +1 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-compare.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-export.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-insights.json +1 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/session-search.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-catalog.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/skill-guard.json +2 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/sql-lens.json +1 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/synapse.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/tab-manager.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/taskboard.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/test-harness.json +2 -10
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/theme-studio.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/token-guard.json +1 -9
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/turn-rewind.json +1 -8
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +1 -7
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/web-research.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +1 -1
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/workspace-search.json +2 -2
- package/node_modules/@pi-harness/api-gateway/dist/marketplace-entries/official/yaml-validator.json +1 -7
- 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 -27
- package/node_modules/@pi-harness/cli/dist/main.d.ts.map +1 -1
- package/node_modules/@pi-harness/cli/dist/main.js +19 -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/cli/profiles/default/cordis.yml +0 -87
- 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 -79
- package/packages/api-gateway/dist/index.d.ts.map +1 -1
- package/packages/api-gateway/dist/index.js +70 -18
- package/packages/api-gateway/dist/index.js.map +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/agent-teams.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/anchored-standard.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/annotation.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/archify.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/at-file.json +1 -9
- package/packages/api-gateway/dist/marketplace-entries/official/auto-mode.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/better-sidebar.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/browser-fetch.json +1 -8
- package/packages/api-gateway/dist/marketplace-entries/official/browser-session.json +1 -8
- package/packages/api-gateway/dist/marketplace-entries/official/canvas-draw.json +2 -2
- package/packages/api-gateway/dist/marketplace-entries/official/change-verifier.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/cleaner.json +1 -9
- package/packages/api-gateway/dist/marketplace-entries/official/cli-notifier.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/code2skill.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/colleague-skill.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/context-doctor.json +1 -8
- package/packages/api-gateway/dist/marketplace-entries/official/context.json +1 -7
- package/packages/api-gateway/dist/marketplace-entries/official/cordis-group.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/cordis-logger-console.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/cordis-timer.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/cost-meter.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/dependency-checker.json +2 -10
- package/packages/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +1 -9
- package/packages/api-gateway/dist/marketplace-entries/official/fail-logger.json +1 -8
- package/packages/api-gateway/dist/marketplace-entries/official/genui.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +1 -8
- package/packages/api-gateway/dist/marketplace-entries/official/graph-memory.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/history-compressor.json +2 -2
- package/packages/api-gateway/dist/marketplace-entries/official/hol-guard.json +2 -2
- package/packages/api-gateway/dist/marketplace-entries/official/i18n-pair.json +1 -7
- package/packages/api-gateway/dist/marketplace-entries/official/image-compressor.json +2 -2
- package/packages/api-gateway/dist/marketplace-entries/official/llm-verifier.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/mcp-client.json +2 -8
- package/packages/api-gateway/dist/marketplace-entries/official/mcp-panel.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/memory.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/mock-server.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/modlens.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/module-search.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/openpets.json +2 -8
- package/packages/api-gateway/dist/marketplace-entries/official/plan-execute.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-check.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-dev.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-finder.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-radar.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-stars.json +1 -8
- package/packages/api-gateway/dist/marketplace-entries/official/prompt-guard.json +2 -2
- package/packages/api-gateway/dist/marketplace-entries/official/prompt-library.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/readme-gen.json +1 -9
- package/packages/api-gateway/dist/marketplace-entries/official/recall-unread.json +1 -8
- package/packages/api-gateway/dist/marketplace-entries/official/reverse-skill.json +2 -2
- package/packages/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/secure-audit.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/session-bridge.json +1 -9
- package/packages/api-gateway/dist/marketplace-entries/official/session-compare.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/session-export.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/session-insights.json +1 -9
- package/packages/api-gateway/dist/marketplace-entries/official/session-search.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/skill-catalog.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/skill-guard.json +2 -9
- package/packages/api-gateway/dist/marketplace-entries/official/sql-lens.json +1 -8
- package/packages/api-gateway/dist/marketplace-entries/official/synapse.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/tab-manager.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/taskboard.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/test-harness.json +2 -10
- package/packages/api-gateway/dist/marketplace-entries/official/theme-studio.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/token-guard.json +1 -9
- package/packages/api-gateway/dist/marketplace-entries/official/turn-rewind.json +1 -8
- package/packages/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +1 -7
- package/packages/api-gateway/dist/marketplace-entries/official/web-research.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +1 -1
- package/packages/api-gateway/dist/marketplace-entries/official/workspace-search.json +2 -2
- package/packages/api-gateway/dist/marketplace-entries/official/yaml-validator.json +1 -7
- 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 -27
- package/packages/api-gateway/src/index.ts +85 -23
- package/packages/api-gateway/src/marketplace-entries/official/agent-teams.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/anchored-standard.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/annotation.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/archify.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/at-file.json +1 -9
- package/packages/api-gateway/src/marketplace-entries/official/auto-mode.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/better-sidebar.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/browser-fetch.json +1 -8
- package/packages/api-gateway/src/marketplace-entries/official/browser-session.json +1 -8
- package/packages/api-gateway/src/marketplace-entries/official/canvas-draw.json +2 -2
- package/packages/api-gateway/src/marketplace-entries/official/change-verifier.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/cleaner.json +1 -9
- package/packages/api-gateway/src/marketplace-entries/official/cli-notifier.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/code2skill.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/colleague-skill.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/context-doctor.json +1 -8
- package/packages/api-gateway/src/marketplace-entries/official/context.json +1 -7
- package/packages/api-gateway/src/marketplace-entries/official/cordis-group.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/cordis-logger-console.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/cordis-timer.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/cost-meter.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/dependency-checker.json +2 -10
- package/packages/api-gateway/src/marketplace-entries/official/docker-sandbox.json +1 -9
- package/packages/api-gateway/src/marketplace-entries/official/fail-logger.json +1 -8
- package/packages/api-gateway/src/marketplace-entries/official/genui.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/git-time-capsule.json +1 -8
- package/packages/api-gateway/src/marketplace-entries/official/graph-memory.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/history-compressor.json +2 -2
- package/packages/api-gateway/src/marketplace-entries/official/hol-guard.json +2 -2
- package/packages/api-gateway/src/marketplace-entries/official/i18n-pair.json +1 -7
- package/packages/api-gateway/src/marketplace-entries/official/image-compressor.json +2 -2
- package/packages/api-gateway/src/marketplace-entries/official/llm-verifier.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/mcp-client.json +2 -8
- package/packages/api-gateway/src/marketplace-entries/official/mcp-panel.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/memory.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/mirage-bridge.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/mock-server.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/modlens.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/module-search.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/obsidian-sync.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/openpets.json +2 -8
- package/packages/api-gateway/src/marketplace-entries/official/plan-execute.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/plugin-check.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/plugin-dev.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/plugin-finder.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/plugin-radar.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/plugin-stars.json +1 -8
- package/packages/api-gateway/src/marketplace-entries/official/prompt-guard.json +2 -2
- package/packages/api-gateway/src/marketplace-entries/official/prompt-library.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/readme-gen.json +1 -9
- package/packages/api-gateway/src/marketplace-entries/official/recall-unread.json +1 -8
- package/packages/api-gateway/src/marketplace-entries/official/reverse-skill.json +2 -2
- package/packages/api-gateway/src/marketplace-entries/official/reviewer-bot.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/runtime-doctor.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/secure-audit.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/session-bookmarks.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/session-bridge.json +1 -9
- package/packages/api-gateway/src/marketplace-entries/official/session-compare.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/session-export.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/session-insights.json +1 -9
- package/packages/api-gateway/src/marketplace-entries/official/session-search.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/skill-catalog.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/skill-guard.json +2 -9
- package/packages/api-gateway/src/marketplace-entries/official/sql-lens.json +1 -8
- package/packages/api-gateway/src/marketplace-entries/official/synapse.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/tab-manager.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/taskboard.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/telemetry-blocker.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/test-harness.json +2 -10
- package/packages/api-gateway/src/marketplace-entries/official/theme-studio.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/token-guard.json +1 -9
- package/packages/api-gateway/src/marketplace-entries/official/turn-rewind.json +1 -8
- package/packages/api-gateway/src/marketplace-entries/official/undo-savepoint.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/vision-toolkit.json +1 -7
- package/packages/api-gateway/src/marketplace-entries/official/web-research.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/workspace-navigator.json +1 -1
- package/packages/api-gateway/src/marketplace-entries/official/workspace-search.json +2 -2
- package/packages/api-gateway/src/marketplace-entries/official/yaml-validator.json +1 -7
- package/packages/api-gateway/src/marketplace.ts +113 -12
- package/packages/api-gateway/test/index.test.ts +297 -5
- package/packages/api-gateway/test/marketplace-schema.test.ts +12 -0
- package/packages/api-gateway/test/marketplace.test.ts +172 -240
- package/packages/api-gateway/test/packed-package.test.ts +18 -6
- package/packages/api-gateway/test/release-contract.test.ts +8 -4
- 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 +19 -3
- package/packages/cli/dist/main.js.map +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/cli/profiles/default/cordis.yml +0 -87
- package/packages/cli/src/main.ts +18 -3
- package/packages/cli/test/cli.test.ts +20 -0
- package/packages/cli/test/profiles/plugins/cordis.yml +122 -0
- package/packages/cli/test/profiles.integration.test.ts +40 -23
- package/packages/host-webserver/package.json +1 -1
- package/apps/web/dist/assets/index-B7pwZ76Z.js +0 -25
- package/apps/web/dist/assets/index-xF647pQJ.css +0 -2
|
@@ -6,7 +6,7 @@ import { tmpdir } from "node:os";
|
|
|
6
6
|
import type { Context } from "@deepseek-ai/cordis";
|
|
7
7
|
import { SessionManager, type AgentSessionEvent, type ExtensionUIContext } from "@earendil-works/pi-coding-agent";
|
|
8
8
|
import type Loader from "@deepseek-ai/cordis-plugin-loader";
|
|
9
|
-
import { atomicWriteFile } from "@pi-harness/core";
|
|
9
|
+
import { atomicWriteFile, isPiToolRegistryLeasedError } from "@pi-harness/core";
|
|
10
10
|
import type { PiPluginUiRegistry, PiRuntimeService, PiModelsService, PiHarnessLaunch } from "@pi-harness/core";
|
|
11
11
|
import type { WebServer } from "@pi-harness/host-webserver";
|
|
12
12
|
import {
|
|
@@ -32,7 +32,10 @@ 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();
|
|
37
|
+
|
|
38
|
+
const RUNTIME_ENTRY_NAME = "@pi-harness/core/plugins/runtime";
|
|
36
39
|
|
|
37
40
|
const DEFAULT_BODY_LIMIT_BYTES = 64 * 1024;
|
|
38
41
|
const IMPORT_CONTENT_LIMIT_BYTES = 10 * 1024 * 1024;
|
|
@@ -41,6 +44,8 @@ const IMPORT_BODY_LIMIT_BYTES = 16 * 1024 * 1024;
|
|
|
41
44
|
// Retained trajectory events are replayed to every SSE client and returned by /api/session, so the array must stay bounded.
|
|
42
45
|
const MAX_RETAINED_EVENTS = 2000;
|
|
43
46
|
const GIT_TIMEOUT_MS = 15_000;
|
|
47
|
+
const PROCESS_FAILURE_TEXT_LIMIT = 400;
|
|
48
|
+
const PROCESS_TIMEOUT_MS = 120_000;
|
|
44
49
|
// 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.
|
|
45
50
|
const GIT_MUTATION_TIMEOUT_MS = 120_000;
|
|
46
51
|
|
|
@@ -93,10 +98,14 @@ function jsonSafe(value: unknown, seen = new WeakSet<object>()): unknown {
|
|
|
93
98
|
}
|
|
94
99
|
}
|
|
95
100
|
|
|
101
|
+
// 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.
|
|
102
|
+
const PROCESS_STARTED_AT = new Date(Date.now() - Math.round(process.uptime() * 1000)).toISOString();
|
|
103
|
+
|
|
96
104
|
function createStatus(services: ApiServices, events: readonly AgentSessionEvent[]) {
|
|
97
105
|
const activeModel = services.runtime.session.model ?? services.models.model;
|
|
98
106
|
const cwd = activeCwd(services);
|
|
99
107
|
return {
|
|
108
|
+
processStartedAt: PROCESS_STARTED_AT,
|
|
100
109
|
status: services.runtime.session.isStreaming ? "running" : "ready",
|
|
101
110
|
model: activeModel.provider + "/" + activeModel.id,
|
|
102
111
|
messages: services.runtime.session.messages.length,
|
|
@@ -468,11 +477,28 @@ function registerPluginPanels(context: Context, services: ApiServices): () => vo
|
|
|
468
477
|
return () => disposers.reverse().forEach((dispose) => dispose());
|
|
469
478
|
}
|
|
470
479
|
|
|
480
|
+
// 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.
|
|
481
|
+
const PROCESS_FAILURE_NOISE = /^npm (error|ERR!) A complete log of this run can be found in:/u;
|
|
482
|
+
|
|
483
|
+
// 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.
|
|
484
|
+
function processFailureText(executable: string, stderr: string, error: ExecFileException): string {
|
|
485
|
+
const text = stderr
|
|
486
|
+
.split(/\r?\n/u)
|
|
487
|
+
.map((line) => line.trim())
|
|
488
|
+
.filter((line) => line !== "" && !PROCESS_FAILURE_NOISE.test(line))
|
|
489
|
+
.join(" ");
|
|
490
|
+
if (text === "")
|
|
491
|
+
return error.killed === true
|
|
492
|
+
? `${executable} was stopped after ${PROCESS_TIMEOUT_MS / 1000}s`
|
|
493
|
+
: `${executable} exited with code ${error.code ?? "unknown"} and reported nothing`;
|
|
494
|
+
return text.length <= PROCESS_FAILURE_TEXT_LIMIT ? text : text.slice(0, PROCESS_FAILURE_TEXT_LIMIT) + "…";
|
|
495
|
+
}
|
|
496
|
+
|
|
471
497
|
function runProcess(executable: string, args: readonly string[], cwd: string): Promise<{ stdout: string; stderr: string }> {
|
|
472
498
|
return new Promise((resolveProcess, rejectProcess) => {
|
|
473
|
-
execFile(executable, [...args], { cwd, timeout:
|
|
499
|
+
execFile(executable, [...args], { cwd, timeout: PROCESS_TIMEOUT_MS, maxBuffer: 2 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
474
500
|
if (error) {
|
|
475
|
-
rejectProcess(new Error(`${executable} ${args.join(" ")}
|
|
501
|
+
rejectProcess(new Error(processFailureText(executable, stderr, error), { cause: { command: `${executable} ${args.join(" ")}`, error } }));
|
|
476
502
|
return;
|
|
477
503
|
}
|
|
478
504
|
resolveProcess({ stdout, stderr });
|
|
@@ -480,14 +506,24 @@ function runProcess(executable: string, args: readonly string[], cwd: string): P
|
|
|
480
506
|
});
|
|
481
507
|
}
|
|
482
508
|
|
|
483
|
-
|
|
509
|
+
// A plugin registers its tools before pi-runtime acquires the tool registry, so an installed entry has to sit in the runtime's own group ahead of the runtime. Appended at the end of the profile it would load after the runtime and fail on every subsequent start.
|
|
510
|
+
function marketplaceProfileEntry(plugin: MarketplacePlugin, indent: string): string {
|
|
511
|
+
const child = `${indent} `;
|
|
512
|
+
const group = plugin.profile.group === true ? `\n${child}group: true` : "";
|
|
513
|
+
return `${indent}- id: marketplace-${plugin.id}\n${child}name: ${JSON.stringify(plugin.packageName)}${group}\n${child}config: ${JSON.stringify(plugin.profile.config)}\n`;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
async function appendMarketplaceProfile(configPath: string, plugin: MarketplacePlugin, beforeEntryId?: string): Promise<string> {
|
|
484
517
|
const source = await readFile(configPath, "utf8");
|
|
485
518
|
if (source.includes(`name: ${JSON.stringify(plugin.packageName)}`)) return source;
|
|
486
|
-
const
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
519
|
+
const anchor =
|
|
520
|
+
beforeEntryId === undefined ? null : source.match(new RegExp(`^([ \\t]*)- id: ${beforeEntryId.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&")}[ \\t]*$`, "mu"));
|
|
521
|
+
if (anchor === null) {
|
|
522
|
+
await writeFile(configPath, `${source.replace(/\s*$/u, "")}\n${marketplaceProfileEntry(plugin, "")}`, "utf8");
|
|
523
|
+
return source;
|
|
524
|
+
}
|
|
525
|
+
const start = anchor.index ?? 0;
|
|
526
|
+
await writeFile(configPath, source.slice(0, start) + marketplaceProfileEntry(plugin, anchor[1] ?? "") + source.slice(start), "utf8");
|
|
491
527
|
return source;
|
|
492
528
|
}
|
|
493
529
|
|
|
@@ -683,6 +719,17 @@ async function marketplaceInstallDirectory(configPath: string, fallback: string)
|
|
|
683
719
|
return fallback;
|
|
684
720
|
}
|
|
685
721
|
|
|
722
|
+
// Where an installed plugin belongs in the running loader: inside the group that owns pi-runtime, immediately ahead of it. A profile without a runtime entry (the stdio CLI profile does have one, a hand-written profile may not) places the entry at the end of the root instead.
|
|
723
|
+
function runtimePlacement(loader: Loader): { groupEntryId: string | null; position: number; beforeEntryId: string } | undefined {
|
|
724
|
+
const entries = [...loader.entries()];
|
|
725
|
+
const runtime = entries.find((entry) => entry.options.name === RUNTIME_ENTRY_NAME);
|
|
726
|
+
if (runtime === undefined) return undefined;
|
|
727
|
+
const group = entries.find((entry) => entry.subgroup === runtime.parent);
|
|
728
|
+
const position = runtime.parent.data.indexOf(runtime.options);
|
|
729
|
+
// The loader addresses a nested group by its qualified id (`profile:agent`), while the profile file names the entry by its own id.
|
|
730
|
+
return { groupEntryId: group?.id ?? null, position: position < 0 ? Infinity : position, beforeEntryId: runtime.options.id };
|
|
731
|
+
}
|
|
732
|
+
|
|
686
733
|
function pickDirectory(): Promise<string> {
|
|
687
734
|
return new Promise((resolvePath, reject) => {
|
|
688
735
|
execFile(
|
|
@@ -1073,7 +1120,7 @@ export default {
|
|
|
1073
1120
|
});
|
|
1074
1121
|
const disposeMarketplace = services.webServer.register({
|
|
1075
1122
|
path: "/api/marketplace",
|
|
1076
|
-
|
|
1123
|
+
handler(request, response) {
|
|
1077
1124
|
if (request.method !== "GET") {
|
|
1078
1125
|
sendJson(response, 405, { error: "Method not allowed" });
|
|
1079
1126
|
return;
|
|
@@ -1100,10 +1147,10 @@ export default {
|
|
|
1100
1147
|
return;
|
|
1101
1148
|
}
|
|
1102
1149
|
const filtered = searchMarketplace(query, capability, category);
|
|
1150
|
+
const cached = readCachedMarketplaceStatistics(MARKETPLACE_PLUGINS);
|
|
1151
|
+
// 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.
|
|
1103
1152
|
const items =
|
|
1104
|
-
sort === "recommended"
|
|
1105
|
-
? sortMarketplaceByRecommendation(attachMarketplaceStatistics(filtered, await loadMarketplaceStatistics(MARKETPLACE_PLUGINS)))
|
|
1106
|
-
: filtered;
|
|
1153
|
+
sort === "recommended" && cached.ready ? sortMarketplaceByRecommendation(attachMarketplaceStatistics(filtered, cached.statistics)) : filtered;
|
|
1107
1154
|
sendJson(response, 200, {
|
|
1108
1155
|
...paginateMarketplace(items, page, pageSize),
|
|
1109
1156
|
capabilities: MARKETPLACE_CAPABILITIES,
|
|
@@ -1151,24 +1198,34 @@ export default {
|
|
|
1151
1198
|
const packageLockPath = join(installDirectory, "package-lock.json");
|
|
1152
1199
|
const packageJsonBefore = await readFile(packageJsonPath, "utf8").catch(() => undefined);
|
|
1153
1200
|
const packageLockBefore = await readFile(packageLockPath, "utf8").catch(() => undefined);
|
|
1201
|
+
const placement = runtimePlacement(loader);
|
|
1154
1202
|
let profileBefore: string | undefined;
|
|
1155
1203
|
let entryId: string | undefined;
|
|
1156
1204
|
try {
|
|
1157
1205
|
const specifier = `${marketplaceNpmPackageName(plugin.packageName)}@${plugin.version}`;
|
|
1158
1206
|
await runProcess("npm", ["install", "--save-exact", "--package-lock=false", specifier], installDirectory);
|
|
1159
|
-
profileBefore = await appendMarketplaceProfile(configPath, plugin);
|
|
1160
|
-
entryId = await loader.create(
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1207
|
+
profileBefore = await appendMarketplaceProfile(configPath, plugin, placement?.beforeEntryId);
|
|
1208
|
+
entryId = await loader.create(
|
|
1209
|
+
{
|
|
1210
|
+
id: `marketplace-${plugin.id}`,
|
|
1211
|
+
name: plugin.packageName,
|
|
1212
|
+
...(plugin.profile.group === true ? { group: true } : {}),
|
|
1213
|
+
config: plugin.profile.config,
|
|
1214
|
+
} as never,
|
|
1215
|
+
placement?.groupEntryId ?? null,
|
|
1216
|
+
placement?.position ?? Infinity,
|
|
1217
|
+
);
|
|
1166
1218
|
const entry = loader.resolve(entryId);
|
|
1167
1219
|
if (entry.fiber === undefined) throw new Error(`Plugin ${plugin.packageName} did not create a runtime fiber`);
|
|
1168
1220
|
await entry.fiber.await();
|
|
1169
|
-
sendJson(response, 200, { plugin, installed: true });
|
|
1221
|
+
sendJson(response, 200, { plugin, installed: true, restartRequired: false });
|
|
1170
1222
|
} catch (error) {
|
|
1171
1223
|
if (entryId !== undefined) await loader.remove(entryId).catch(() => {});
|
|
1224
|
+
// The runtime holds the tool registry for its whole life and snapshots the tool set when it takes it, so a plugin that contributes tools cannot join a harness that is already running. The package and its profile entry stay in place and the plugin arrives on the next start; rolling the install back would leave the user unable to install it at all.
|
|
1225
|
+
if (isPiToolRegistryLeasedError(error)) {
|
|
1226
|
+
sendJson(response, 200, { plugin, installed: true, restartRequired: true });
|
|
1227
|
+
return;
|
|
1228
|
+
}
|
|
1172
1229
|
if (profileBefore !== undefined) await writeFile(configPath, profileBefore, "utf8").catch(() => {});
|
|
1173
1230
|
// A manifest npm created for this install is removed rather than left behind; restoring is only possible when one existed before.
|
|
1174
1231
|
if (packageJsonBefore === undefined) await unlink(packageJsonPath).catch(() => {});
|
|
@@ -1222,8 +1279,13 @@ export default {
|
|
|
1222
1279
|
const before = await updateMarketplaceProfile(configPath, profileEntryId, { disabled: !payload.enabled });
|
|
1223
1280
|
try {
|
|
1224
1281
|
await entry.update({ disabled: !payload.enabled });
|
|
1225
|
-
sendJson(response, 200, { plugin: pluginSummary(entry) });
|
|
1282
|
+
sendJson(response, 200, { plugin: pluginSummary(entry), restartRequired: false });
|
|
1226
1283
|
} catch (error) {
|
|
1284
|
+
// Re-enabling a plugin that contributes tools cannot take effect in a harness the runtime already leased, so the profile keeps the change and the plugin comes back on the next start. Reverting it would leave a plugin that can be switched off but never on again.
|
|
1285
|
+
if (isPiToolRegistryLeasedError(error)) {
|
|
1286
|
+
sendJson(response, 200, { plugin: pluginSummary(entry), restartRequired: true });
|
|
1287
|
+
return;
|
|
1288
|
+
}
|
|
1227
1289
|
await writeFile(configPath, before, "utf8").catch(() => {});
|
|
1228
1290
|
sendJson(response, 502, { error: errorText(error) });
|
|
1229
1291
|
}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "collaboration",
|
|
14
14
|
"label": "会话协作"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["read-only", "session-data"],
|
|
17
17
|
"hooks": ["session lifecycle", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-agent-teams",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "security",
|
|
14
14
|
"label": "安全"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["read-only"],
|
|
17
17
|
"hooks": ["session events", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-anchored-standard",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "developer",
|
|
14
14
|
"label": "开发工具"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["reads-files", "runs-commands"],
|
|
17
17
|
"hooks": ["workspace files", "package manifest", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-archify",
|
|
@@ -13,15 +13,7 @@
|
|
|
13
13
|
"id": "context",
|
|
14
14
|
"label": "上下文管理"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
"256 KiB strict UTF-8 text attachments",
|
|
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
|
-
],
|
|
16
|
+
"capabilities": ["read-only", "reads-files"],
|
|
25
17
|
"hooks": ["file context tool", "workspace file read", "plugin UI"],
|
|
26
18
|
"profile": {
|
|
27
19
|
"name": "@pi-harness/plugin-at-file",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "security",
|
|
14
14
|
"label": "安全"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["reads-files", "runs-commands"],
|
|
17
17
|
"hooks": ["argv execution", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-auto-mode",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "developer",
|
|
14
14
|
"label": "开发工具"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["session-data", "reads-files", "runs-commands"],
|
|
17
17
|
"hooks": ["workspace scan", "read-only Git", "session manager", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-better-sidebar",
|
|
@@ -13,14 +13,7 @@
|
|
|
13
13
|
"id": "web",
|
|
14
14
|
"label": "网页与研究"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
"bounded textual HTTP fetch",
|
|
18
|
-
"DNS rebinding protection",
|
|
19
|
-
"per-hop SSRF validation",
|
|
20
|
-
"cancellable request lifecycle",
|
|
21
|
-
"bounded browser preview",
|
|
22
|
-
"validated fail-closed panel reporting"
|
|
23
|
-
],
|
|
16
|
+
"capabilities": ["network-access"],
|
|
24
17
|
"hooks": ["network request", "plugin UI"],
|
|
25
18
|
"profile": {
|
|
26
19
|
"name": "@pi-harness/plugin-browser-fetch",
|
|
@@ -13,14 +13,7 @@
|
|
|
13
13
|
"id": "web",
|
|
14
14
|
"label": "网页与研究"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
"loopback-only CDP endpoint",
|
|
18
|
-
"bounded tab discovery",
|
|
19
|
-
"navigation read click and screenshot tools",
|
|
20
|
-
"cancellable request lifecycle",
|
|
21
|
-
"bounded panel previews",
|
|
22
|
-
"validated fail-closed panel reporting"
|
|
23
|
-
],
|
|
16
|
+
"capabilities": ["network-access"],
|
|
24
17
|
"hooks": ["browser session tools", "Chrome DevTools Protocol", "plugin UI"],
|
|
25
18
|
"profile": {
|
|
26
19
|
"name": "@pi-harness/plugin-browser-session",
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"status": "verified",
|
|
12
12
|
"category": {
|
|
13
13
|
"id": "multimodal",
|
|
14
|
-
"label": "
|
|
14
|
+
"label": "视觉与多模态"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["read-only"],
|
|
17
17
|
"hooks": ["plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-canvas-draw",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "workflow",
|
|
14
14
|
"label": "工作流"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["read-only"],
|
|
17
17
|
"hooks": ["project scripts", "Git diff", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-change-verifier",
|
|
@@ -13,15 +13,7 @@
|
|
|
13
13
|
"id": "developer",
|
|
14
14
|
"label": "开发工具"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
"strict configuration and parameters",
|
|
18
|
-
"bounded capsule inventory",
|
|
19
|
-
"display-safe capsule filtering",
|
|
20
|
-
"confirmed retention cleanup",
|
|
21
|
-
"symlink and replacement defenses",
|
|
22
|
-
"cancellable serialized cleanup",
|
|
23
|
-
"fail-closed normalized panel"
|
|
24
|
-
],
|
|
16
|
+
"capabilities": ["reads-files", "writes-files"],
|
|
25
17
|
"hooks": ["capsule cleanup tool", "agent capsule directory", "plugin UI"],
|
|
26
18
|
"profile": {
|
|
27
19
|
"name": "@pi-harness/plugin-cleaner",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "workflow",
|
|
14
14
|
"label": "工作流"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["runs-commands"],
|
|
17
17
|
"hooks": ["agent end", "compaction error", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-cli-notifier",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "tools",
|
|
14
14
|
"label": "工具"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["reads-files", "writes-files"],
|
|
17
17
|
"hooks": ["workspace files", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-code2skill",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "workflow",
|
|
14
14
|
"label": "工作流"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["read-only", "session-data"],
|
|
17
17
|
"hooks": ["session storage", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-colleague-skill",
|
|
@@ -13,14 +13,7 @@
|
|
|
13
13
|
"id": "observability",
|
|
14
14
|
"label": "可观测性"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
"descriptor-safe bounded context audit",
|
|
18
|
-
"pressure oversized uninspectable and tool-error diagnostics",
|
|
19
|
-
"confirmed settled-session compaction",
|
|
20
|
-
"dedicated compaction cancellation",
|
|
21
|
-
"single-flight bounded operation status",
|
|
22
|
-
"cached normalized panel"
|
|
23
|
-
],
|
|
16
|
+
"capabilities": ["read-only", "session-data"],
|
|
24
17
|
"hooks": ["context doctor tool", "session messages and usage", "Pi session lifecycle", "manual compaction", "plugin UI"],
|
|
25
18
|
"profile": {
|
|
26
19
|
"name": "@pi-harness/plugin-context-doctor",
|
|
@@ -13,13 +13,7 @@
|
|
|
13
13
|
"id": "context",
|
|
14
14
|
"label": "上下文管理"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
"descriptor-safe bounded message composition",
|
|
18
|
-
"resilient context usage inspection",
|
|
19
|
-
"active-session lifecycle counters",
|
|
20
|
-
"cached session-aware panel",
|
|
21
|
-
"bounded normalized browser view"
|
|
22
|
-
],
|
|
16
|
+
"capabilities": ["read-only", "session-data"],
|
|
23
17
|
"hooks": ["context inspection tool", "active runtime session", "Pi session lifecycle", "plugin UI"],
|
|
24
18
|
"profile": {
|
|
25
19
|
"name": "@pi-harness/plugin-context",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
12
|
"category": { "id": "composition", "label": "组合编排" },
|
|
13
|
-
"capabilities": ["
|
|
13
|
+
"capabilities": ["read-only"],
|
|
14
14
|
"hooks": ["loader entry tree"],
|
|
15
15
|
"profile": { "name": "@deepseek-ai/cordis-plugin-group", "group": true, "config": [] }
|
|
16
16
|
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
12
|
"category": { "id": "observability", "label": "可观测性" },
|
|
13
|
-
"capabilities": ["
|
|
13
|
+
"capabilities": ["read-only"],
|
|
14
14
|
"hooks": ["Cordis logger exporter", "plugin UI"],
|
|
15
15
|
"profile": { "name": "@deepseek-ai/cordis-plugin-logger-console", "config": { "levels": { "default": 2 }, "maxLength": 8192 } }
|
|
16
16
|
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
12
|
"category": { "id": "runtime", "label": "运行时" },
|
|
13
|
-
"capabilities": ["
|
|
13
|
+
"capabilities": ["read-only"],
|
|
14
14
|
"hooks": ["Cordis timer service", "plugin UI"],
|
|
15
15
|
"profile": { "name": "@deepseek-ai/cordis-plugin-timer", "config": {} }
|
|
16
16
|
}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "observability",
|
|
14
14
|
"label": "可观测性"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["session-data", "reads-files", "writes-files"],
|
|
17
17
|
"hooks": ["agent end", "cost report tool", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-cost-meter",
|
|
@@ -11,17 +11,9 @@
|
|
|
11
11
|
"status": "verified",
|
|
12
12
|
"category": {
|
|
13
13
|
"id": "developer",
|
|
14
|
-
"label": "
|
|
14
|
+
"label": "开发工具"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
"2000-declaration local presence scan",
|
|
18
|
-
"4096-entry workspace-contained virtualenv scan",
|
|
19
|
-
"npm common-intersection conflict detection",
|
|
20
|
-
"bounded Python numeric constraint analysis",
|
|
21
|
-
"unresolved constraint and directive reporting",
|
|
22
|
-
"optional dependency reporting",
|
|
23
|
-
"descriptor-safe normalized panel"
|
|
24
|
-
],
|
|
16
|
+
"capabilities": ["read-only", "reads-files"],
|
|
25
17
|
"hooks": ["dependency check tool", "workspace manifest read", "plugin UI"],
|
|
26
18
|
"profile": {
|
|
27
19
|
"name": "@pi-harness/plugin-dependency-checker",
|
|
@@ -13,15 +13,7 @@
|
|
|
13
13
|
"id": "security",
|
|
14
14
|
"label": "安全"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
"local-only image execution",
|
|
18
|
-
"no-network containers",
|
|
19
|
-
"read-only workspace by default",
|
|
20
|
-
"CPU memory and PID limits",
|
|
21
|
-
"sanitized bounded output",
|
|
22
|
-
"strict panel reporting",
|
|
23
|
-
"cancellation cleanup"
|
|
24
|
-
],
|
|
16
|
+
"capabilities": ["reads-files", "writes-files", "runs-commands"],
|
|
25
17
|
"hooks": ["sandbox execution tool", "Docker CLI", "plugin UI"],
|
|
26
18
|
"profile": {
|
|
27
19
|
"name": "@pi-harness/plugin-docker-sandbox",
|
|
@@ -13,14 +13,7 @@
|
|
|
13
13
|
"id": "observability",
|
|
14
14
|
"label": "可观测性"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
"bounded failure aggregation",
|
|
18
|
-
"descriptor-safe event inspection",
|
|
19
|
-
"abort-aware compaction diagnostics",
|
|
20
|
-
"occurrence counting",
|
|
21
|
-
"safe diagnostic summaries",
|
|
22
|
-
"capacity visibility"
|
|
23
|
-
],
|
|
16
|
+
"capabilities": ["read-only"],
|
|
24
17
|
"hooks": ["extension error", "agent end", "compaction end", "plugin UI"],
|
|
25
18
|
"profile": {
|
|
26
19
|
"name": "@pi-harness/plugin-fail-logger",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "interface",
|
|
14
14
|
"label": "界面增强"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["read-only"],
|
|
17
17
|
"hooks": ["GenUI render tool", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-genui",
|
|
@@ -13,14 +13,7 @@
|
|
|
13
13
|
"id": "workflow",
|
|
14
14
|
"label": "工作流"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
"byte-exact validated unstaged diff capture",
|
|
18
|
-
"exclusive no-clobber capsule publication",
|
|
19
|
-
"confirmed deterministic reverse apply",
|
|
20
|
-
"bounded 256-capsule inventory",
|
|
21
|
-
"cancellable serialized Git operations",
|
|
22
|
-
"descriptor-safe normalized panel"
|
|
23
|
-
],
|
|
16
|
+
"capabilities": ["reads-files", "writes-files", "runs-commands"],
|
|
24
17
|
"hooks": ["Git snapshot tool", "Git restore tool", "plugin UI"],
|
|
25
18
|
"profile": {
|
|
26
19
|
"name": "@pi-harness/plugin-git-time-capsule",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "memory",
|
|
14
14
|
"label": "记忆与上下文"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["reads-files", "writes-files"],
|
|
17
17
|
"hooks": ["graph memory tools", "local graph file", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-graph-memory",
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"status": "verified",
|
|
12
12
|
"category": {
|
|
13
13
|
"id": "context",
|
|
14
|
-
"label": "
|
|
14
|
+
"label": "上下文管理"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["read-only", "session-data"],
|
|
17
17
|
"hooks": ["agent end", "context usage", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-history-compressor",
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"status": "verified",
|
|
12
12
|
"category": {
|
|
13
13
|
"id": "security",
|
|
14
|
-
"label": "
|
|
14
|
+
"label": "安全"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["read-only"],
|
|
17
17
|
"hooks": ["tool execution", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-hol-guard",
|
|
@@ -13,13 +13,7 @@
|
|
|
13
13
|
"id": "workflow",
|
|
14
14
|
"label": "工作流"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
"collision-safe locale key parity",
|
|
18
|
-
"strict bounded workspace-only JSON reads",
|
|
19
|
-
"no-follow symbolic-link safety",
|
|
20
|
-
"stable sequential cancellable inspection",
|
|
21
|
-
"validated bounded panel reporting"
|
|
22
|
-
],
|
|
16
|
+
"capabilities": ["read-only", "reads-files"],
|
|
23
17
|
"hooks": ["i18n check tool", "workspace locale files", "plugin UI"],
|
|
24
18
|
"profile": {
|
|
25
19
|
"name": "@pi-harness/plugin-i18n-pair",
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"status": "verified",
|
|
12
12
|
"category": {
|
|
13
13
|
"id": "multimodal",
|
|
14
|
-
"label": "
|
|
14
|
+
"label": "视觉与多模态"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["
|
|
16
|
+
"capabilities": ["reads-files", "writes-files"],
|
|
17
17
|
"hooks": ["workspace files", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-image-compressor",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"id": "testing",
|
|
14
14
|
"label": "测试与质量"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": ["model
|
|
16
|
+
"capabilities": ["model-calls"],
|
|
17
17
|
"hooks": ["model runtime", "structured verdict", "plugin UI"],
|
|
18
18
|
"profile": {
|
|
19
19
|
"name": "@pi-harness/plugin-llm-verifier",
|