@pi-harness/pi-harness 0.1.3 → 0.1.4
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-BoEwZu6r.css → index-CihATCjR.css} +1 -1
- package/apps/web/dist/assets/{index-alZn4u37.js → index-NzapJoGa.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/apps/web/package.json +6 -6
- package/apps/web/src/style.css +14 -0
- package/package.json +6 -6
- package/packages/api-gateway/dist/marketplace-entries/official/agent-teams.json +20 -5
- package/packages/api-gateway/dist/marketplace-entries/official/anchored-standard.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/annotation.json +17 -5
- package/packages/api-gateway/dist/marketplace-entries/official/archify.json +20 -5
- package/packages/api-gateway/dist/marketplace-entries/official/at-file.json +17 -5
- package/packages/api-gateway/dist/marketplace-entries/official/auto-mode.json +10 -3
- package/packages/api-gateway/dist/marketplace-entries/official/better-sidebar.json +21 -5
- package/packages/api-gateway/dist/marketplace-entries/official/browser-fetch.json +17 -5
- package/packages/api-gateway/dist/marketplace-entries/official/browser-session.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/canvas-draw.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/change-verifier.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/cleaner.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/cli-notifier.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/code2skill.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/colleague-skill.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/context-doctor.json +11 -3
- package/packages/api-gateway/dist/marketplace-entries/official/context.json +17 -5
- package/packages/api-gateway/dist/marketplace-entries/official/cost-meter.json +20 -5
- package/packages/api-gateway/dist/marketplace-entries/official/dependency-checker.json +20 -5
- package/packages/api-gateway/dist/marketplace-entries/official/docker-sandbox.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/fail-logger.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/genui.json +17 -5
- package/packages/api-gateway/dist/marketplace-entries/official/git-time-capsule.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/graph-memory.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/history-compressor.json +11 -3
- package/packages/api-gateway/dist/marketplace-entries/official/hol-guard.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/i18n-pair.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/image-compressor.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/llm-verifier.json +21 -5
- package/packages/api-gateway/dist/marketplace-entries/official/mcp-client.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/mcp-panel.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/memory.json +17 -5
- package/packages/api-gateway/dist/marketplace-entries/official/mirage-bridge.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/mock-server.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/modlens.json +17 -5
- package/packages/api-gateway/dist/marketplace-entries/official/module-search.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/obsidian-sync.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/openpets.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/plan-execute.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-check.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-dev.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-finder.json +21 -5
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-radar.json +17 -5
- package/packages/api-gateway/dist/marketplace-entries/official/plugin-stars.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/prompt-guard.json +17 -5
- package/packages/api-gateway/dist/marketplace-entries/official/prompt-library.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/readme-gen.json +20 -5
- package/packages/api-gateway/dist/marketplace-entries/official/recall-unread.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/reverse-skill.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/reviewer-bot.json +10 -3
- package/packages/api-gateway/dist/marketplace-entries/official/runtime-doctor.json +21 -5
- package/packages/api-gateway/dist/marketplace-entries/official/secure-audit.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/session-bookmarks.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/session-bridge.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/session-compare.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/session-export.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/session-insights.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/session-search.json +19 -5
- package/packages/api-gateway/dist/marketplace-entries/official/skill-catalog.json +20 -5
- package/packages/api-gateway/dist/marketplace-entries/official/skill-guard.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/sql-lens.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/synapse.json +17 -5
- package/packages/api-gateway/dist/marketplace-entries/official/tab-manager.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/taskboard.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/telemetry-blocker.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/test-harness.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/theme-studio.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/token-guard.json +21 -5
- package/packages/api-gateway/dist/marketplace-entries/official/turn-rewind.json +10 -3
- package/packages/api-gateway/dist/marketplace-entries/official/undo-savepoint.json +17 -5
- package/packages/api-gateway/dist/marketplace-entries/official/vision-toolkit.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/web-research.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/workspace-navigator.json +21 -5
- package/packages/api-gateway/dist/marketplace-entries/official/workspace-search.json +18 -5
- package/packages/api-gateway/dist/marketplace-entries/official/yaml-validator.json +18 -5
- package/packages/api-gateway/package.json +3 -3
- package/packages/api-gateway/src/marketplace-entries/official/agent-teams.json +20 -5
- package/packages/api-gateway/src/marketplace-entries/official/anchored-standard.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/annotation.json +17 -5
- package/packages/api-gateway/src/marketplace-entries/official/archify.json +20 -5
- package/packages/api-gateway/src/marketplace-entries/official/at-file.json +17 -5
- package/packages/api-gateway/src/marketplace-entries/official/auto-mode.json +10 -3
- package/packages/api-gateway/src/marketplace-entries/official/better-sidebar.json +21 -5
- package/packages/api-gateway/src/marketplace-entries/official/browser-fetch.json +17 -5
- package/packages/api-gateway/src/marketplace-entries/official/browser-session.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/canvas-draw.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/change-verifier.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/cleaner.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/cli-notifier.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/code2skill.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/colleague-skill.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/context-doctor.json +11 -3
- package/packages/api-gateway/src/marketplace-entries/official/context.json +17 -5
- package/packages/api-gateway/src/marketplace-entries/official/cost-meter.json +20 -5
- package/packages/api-gateway/src/marketplace-entries/official/dependency-checker.json +20 -5
- package/packages/api-gateway/src/marketplace-entries/official/docker-sandbox.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/fail-logger.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/genui.json +17 -5
- package/packages/api-gateway/src/marketplace-entries/official/git-time-capsule.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/graph-memory.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/history-compressor.json +11 -3
- package/packages/api-gateway/src/marketplace-entries/official/hol-guard.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/i18n-pair.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/image-compressor.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/llm-verifier.json +21 -5
- package/packages/api-gateway/src/marketplace-entries/official/mcp-client.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/mcp-panel.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/memory.json +17 -5
- package/packages/api-gateway/src/marketplace-entries/official/mirage-bridge.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/mock-server.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/modlens.json +17 -5
- package/packages/api-gateway/src/marketplace-entries/official/module-search.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/obsidian-sync.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/openpets.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/plan-execute.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/plugin-check.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/plugin-dev.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/plugin-finder.json +21 -5
- package/packages/api-gateway/src/marketplace-entries/official/plugin-radar.json +17 -5
- package/packages/api-gateway/src/marketplace-entries/official/plugin-stars.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/prompt-guard.json +17 -5
- package/packages/api-gateway/src/marketplace-entries/official/prompt-library.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/readme-gen.json +20 -5
- package/packages/api-gateway/src/marketplace-entries/official/recall-unread.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/reverse-skill.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/reviewer-bot.json +10 -3
- package/packages/api-gateway/src/marketplace-entries/official/runtime-doctor.json +21 -5
- package/packages/api-gateway/src/marketplace-entries/official/secure-audit.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/session-bookmarks.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/session-bridge.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/session-compare.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/session-export.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/session-insights.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/session-search.json +19 -5
- package/packages/api-gateway/src/marketplace-entries/official/skill-catalog.json +20 -5
- package/packages/api-gateway/src/marketplace-entries/official/skill-guard.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/sql-lens.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/synapse.json +17 -5
- package/packages/api-gateway/src/marketplace-entries/official/tab-manager.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/taskboard.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/telemetry-blocker.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/test-harness.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/theme-studio.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/token-guard.json +21 -5
- package/packages/api-gateway/src/marketplace-entries/official/turn-rewind.json +10 -3
- package/packages/api-gateway/src/marketplace-entries/official/undo-savepoint.json +17 -5
- package/packages/api-gateway/src/marketplace-entries/official/vision-toolkit.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/web-research.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/workspace-navigator.json +21 -5
- package/packages/api-gateway/src/marketplace-entries/official/workspace-search.json +18 -5
- package/packages/api-gateway/src/marketplace-entries/official/yaml-validator.json +18 -5
- package/packages/api-gateway/test/release-version.test.ts +71 -0
- package/packages/bundle-web-app/package.json +2 -2
- package/packages/cli/package.json +2 -2
- package/packages/client-web/dist/react-room.d.ts.map +1 -1
- package/packages/client-web/dist/react-room.js +3 -3
- package/packages/client-web/dist/react-room.js.map +1 -1
- package/packages/client-web/package.json +1 -1
- package/packages/client-web/src/react-room.tsx +5 -3
- package/packages/core/package.json +1 -1
- package/packages/host-webserver/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "theme-studio",
|
|
3
3
|
"packageName": "@pi-harness/core/plugins/theme-studio",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.4",
|
|
5
5
|
"name": "Theme Studio",
|
|
6
6
|
"description": "Apply bounded Light, Midnight, Paper, and High Contrast presets to the Pi Harness web surface.",
|
|
7
7
|
"author": "Pi Harness",
|
|
@@ -9,11 +9,24 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
|
-
"category": {
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
"category": {
|
|
13
|
+
"id": "interface",
|
|
14
|
+
"label": "界面增强"
|
|
15
|
+
},
|
|
16
|
+
"capabilities": [
|
|
17
|
+
"theme presets",
|
|
18
|
+
"contrast modes",
|
|
19
|
+
"session persistence"
|
|
20
|
+
],
|
|
21
|
+
"hooks": [
|
|
22
|
+
"session lifecycle",
|
|
23
|
+
"React root tokens",
|
|
24
|
+
"plugin UI"
|
|
25
|
+
],
|
|
15
26
|
"profile": {
|
|
16
27
|
"name": "@pi-harness/core/plugins/theme-studio",
|
|
17
|
-
"config": {
|
|
28
|
+
"config": {
|
|
29
|
+
"theme": "light"
|
|
30
|
+
}
|
|
18
31
|
}
|
|
19
32
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "token-guard",
|
|
3
3
|
"packageName": "@pi-harness/core/plugins/token-guard",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.4",
|
|
5
5
|
"name": "Token Guard",
|
|
6
6
|
"description": "Monitor context usage and stop runs when the configured token budget threshold is reached.",
|
|
7
7
|
"author": "Pi Harness",
|
|
@@ -9,8 +9,24 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
|
-
"category": {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
"category": {
|
|
13
|
+
"id": "observability",
|
|
14
|
+
"label": "可观测性"
|
|
15
|
+
},
|
|
16
|
+
"capabilities": [
|
|
17
|
+
"token budget",
|
|
18
|
+
"per-run token budget",
|
|
19
|
+
"context monitoring"
|
|
20
|
+
],
|
|
21
|
+
"hooks": [
|
|
22
|
+
"session event",
|
|
23
|
+
"plugin UI"
|
|
24
|
+
],
|
|
25
|
+
"profile": {
|
|
26
|
+
"name": "@pi-harness/core/plugins/token-guard",
|
|
27
|
+
"config": {
|
|
28
|
+
"maxPercent": 90,
|
|
29
|
+
"maxRunTokens": 0
|
|
30
|
+
}
|
|
31
|
+
}
|
|
16
32
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "turn-rewind",
|
|
3
3
|
"packageName": "@pi-harness/core/plugins/turn-rewind",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.4",
|
|
5
5
|
"name": "Turn Rewind",
|
|
6
6
|
"description": "Navigate the native Pi session tree back to a prior user turn while preserving the abandoned branch.",
|
|
7
7
|
"author": "Pi Harness",
|
|
@@ -13,8 +13,15 @@
|
|
|
13
13
|
"id": "workflow",
|
|
14
14
|
"label": "工作流"
|
|
15
15
|
},
|
|
16
|
-
"capabilities": [
|
|
17
|
-
|
|
16
|
+
"capabilities": [
|
|
17
|
+
"session rewind",
|
|
18
|
+
"branching",
|
|
19
|
+
"recovery"
|
|
20
|
+
],
|
|
21
|
+
"hooks": [
|
|
22
|
+
"session tree",
|
|
23
|
+
"plugin UI"
|
|
24
|
+
],
|
|
18
25
|
"profile": {
|
|
19
26
|
"name": "@pi-harness/core/plugins/turn-rewind",
|
|
20
27
|
"config": {}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "undo-savepoint",
|
|
3
3
|
"packageName": "@pi-harness/core/plugins/undo-savepoint",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.4",
|
|
5
5
|
"name": "Undo Savepoints",
|
|
6
6
|
"description": "Create inspectable savepoints before agent changes so the workspace can be restored safely.",
|
|
7
7
|
"author": "Pi Harness",
|
|
@@ -9,8 +9,20 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
|
-
"category": {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
"category": {
|
|
13
|
+
"id": "workflow",
|
|
14
|
+
"label": "工作流"
|
|
15
|
+
},
|
|
16
|
+
"capabilities": [
|
|
17
|
+
"savepoint",
|
|
18
|
+
"recovery"
|
|
19
|
+
],
|
|
20
|
+
"hooks": [
|
|
21
|
+
"tool execution",
|
|
22
|
+
"plugin UI"
|
|
23
|
+
],
|
|
24
|
+
"profile": {
|
|
25
|
+
"name": "@pi-harness/core/plugins/undo-savepoint",
|
|
26
|
+
"config": {}
|
|
27
|
+
}
|
|
16
28
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "vision-toolkit",
|
|
3
3
|
"packageName": "@pi-harness/core/plugins/vision-toolkit",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.4",
|
|
5
5
|
"name": "Vision Toolkit",
|
|
6
6
|
"description": "Catalog workspace images and inspect safe metadata such as MIME type, size, and dimensions.",
|
|
7
7
|
"author": "Pi Harness",
|
|
@@ -9,8 +9,21 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
|
-
"category": {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
"category": {
|
|
13
|
+
"id": "multimodal",
|
|
14
|
+
"label": "视觉与多模态"
|
|
15
|
+
},
|
|
16
|
+
"capabilities": [
|
|
17
|
+
"image catalog",
|
|
18
|
+
"metadata",
|
|
19
|
+
"vision"
|
|
20
|
+
],
|
|
21
|
+
"hooks": [
|
|
22
|
+
"workspace access",
|
|
23
|
+
"plugin UI"
|
|
24
|
+
],
|
|
25
|
+
"profile": {
|
|
26
|
+
"name": "@pi-harness/core/plugins/vision-toolkit",
|
|
27
|
+
"config": {}
|
|
28
|
+
}
|
|
16
29
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "web-research",
|
|
3
3
|
"packageName": "@pi-harness/core/plugins/web-research",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.4",
|
|
5
5
|
"name": "Web Research",
|
|
6
6
|
"description": "Search the public web through a configurable provider and return bounded, cited source evidence.",
|
|
7
7
|
"author": "Pi Harness",
|
|
@@ -9,8 +9,21 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
|
-
"category": {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
"category": {
|
|
13
|
+
"id": "web",
|
|
14
|
+
"label": "网页与研究"
|
|
15
|
+
},
|
|
16
|
+
"capabilities": [
|
|
17
|
+
"web search",
|
|
18
|
+
"citations",
|
|
19
|
+
"research"
|
|
20
|
+
],
|
|
21
|
+
"hooks": [
|
|
22
|
+
"network request",
|
|
23
|
+
"plugin UI"
|
|
24
|
+
],
|
|
25
|
+
"profile": {
|
|
26
|
+
"name": "@pi-harness/core/plugins/web-research",
|
|
27
|
+
"config": {}
|
|
28
|
+
}
|
|
16
29
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "workspace-navigator",
|
|
3
3
|
"packageName": "@pi-harness/core/plugins/workspace-navigator",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.4",
|
|
5
5
|
"name": "Workspace Navigator",
|
|
6
6
|
"description": "Show a bounded workspace tree and read-only Git status for a high-signal coding sidebar.",
|
|
7
7
|
"author": "Pi Harness",
|
|
@@ -9,8 +9,24 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
|
-
"category": {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
"category": {
|
|
13
|
+
"id": "developer",
|
|
14
|
+
"label": "开发工具"
|
|
15
|
+
},
|
|
16
|
+
"capabilities": [
|
|
17
|
+
"workspace navigation",
|
|
18
|
+
"directory tree",
|
|
19
|
+
"Git status",
|
|
20
|
+
"sidebar context"
|
|
21
|
+
],
|
|
22
|
+
"hooks": [
|
|
23
|
+
"workspace files",
|
|
24
|
+
"bounded scan",
|
|
25
|
+
"read-only Git",
|
|
26
|
+
"plugin UI"
|
|
27
|
+
],
|
|
28
|
+
"profile": {
|
|
29
|
+
"name": "@pi-harness/core/plugins/workspace-navigator",
|
|
30
|
+
"config": {}
|
|
31
|
+
}
|
|
16
32
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "workspace-search",
|
|
3
3
|
"packageName": "@pi-harness/core/plugins/workspace-search",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.4",
|
|
5
5
|
"name": "Workspace Search",
|
|
6
6
|
"description": "Search bounded text files in the active workspace with ignored directories and binary content excluded.",
|
|
7
7
|
"author": "Pi Harness",
|
|
@@ -9,8 +9,21 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
|
-
"category": {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
"category": {
|
|
13
|
+
"id": "context",
|
|
14
|
+
"label": "上下文"
|
|
15
|
+
},
|
|
16
|
+
"capabilities": [
|
|
17
|
+
"workspace search",
|
|
18
|
+
"file discovery",
|
|
19
|
+
"context lookup"
|
|
20
|
+
],
|
|
21
|
+
"hooks": [
|
|
22
|
+
"workspace files",
|
|
23
|
+
"plugin UI"
|
|
24
|
+
],
|
|
25
|
+
"profile": {
|
|
26
|
+
"name": "@pi-harness/core/plugins/workspace-search",
|
|
27
|
+
"config": {}
|
|
28
|
+
}
|
|
16
29
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "yaml-validator",
|
|
3
3
|
"packageName": "@pi-harness/core/plugins/yaml-validator",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.4",
|
|
5
5
|
"name": "YAML Validator",
|
|
6
6
|
"description": "Validate bounded YAML configuration files and return precise parse errors without rewriting the source.",
|
|
7
7
|
"author": "Pi Harness",
|
|
@@ -9,8 +9,21 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"source": "official",
|
|
11
11
|
"status": "verified",
|
|
12
|
-
"category": {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
"category": {
|
|
13
|
+
"id": "developer",
|
|
14
|
+
"label": "开发工具"
|
|
15
|
+
},
|
|
16
|
+
"capabilities": [
|
|
17
|
+
"YAML validation",
|
|
18
|
+
"config diagnostics",
|
|
19
|
+
"parse errors"
|
|
20
|
+
],
|
|
21
|
+
"hooks": [
|
|
22
|
+
"workspace files",
|
|
23
|
+
"plugin UI"
|
|
24
|
+
],
|
|
25
|
+
"profile": {
|
|
26
|
+
"name": "@pi-harness/core/plugins/yaml-validator",
|
|
27
|
+
"config": {}
|
|
28
|
+
}
|
|
16
29
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { mkdtemp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { resolve } from "node:path";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
7
|
+
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
const fixtures: string[] = [];
|
|
10
|
+
const repositoryRoot = resolve(import.meta.dirname, "../../..");
|
|
11
|
+
|
|
12
|
+
const writeJson = async (root: string, path: string, value: unknown): Promise<void> => {
|
|
13
|
+
const target = resolve(root, path);
|
|
14
|
+
await mkdir(resolve(target, ".."), { recursive: true });
|
|
15
|
+
await writeFile(target, `${JSON.stringify(value, undefined, 2)}\n`);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
afterEach(async () => {
|
|
19
|
+
await Promise.all(fixtures.splice(0).map((fixture) => rm(fixture, { recursive: true, force: true })));
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
describe("release version preparation", () => {
|
|
23
|
+
it("synchronizes manifests, lock data, and internal marketplace entries without changing external versions", async () => {
|
|
24
|
+
const fixture = await mkdtemp(resolve(tmpdir(), "pi-harness-release-version-"));
|
|
25
|
+
fixtures.push(fixture);
|
|
26
|
+
await Promise.all([mkdir(resolve(fixture, "apps")), mkdir(resolve(fixture, "examples"))]);
|
|
27
|
+
await writeJson(fixture, "package.json", { name: "@pi-harness/pi-harness", version: "0.1.2", dependencies: { "@pi-harness/core": "0.1.2" } });
|
|
28
|
+
await writeJson(fixture, "packages/core/package.json", { name: "@pi-harness/core", version: "0.1.2" });
|
|
29
|
+
await writeJson(fixture, "packages/api-gateway/package.json", { name: "@pi-harness/api-gateway", version: "0.1.2" });
|
|
30
|
+
await writeJson(fixture, "package-lock.json", {
|
|
31
|
+
name: "@pi-harness/pi-harness",
|
|
32
|
+
version: "0.1.2",
|
|
33
|
+
lockfileVersion: 3,
|
|
34
|
+
packages: {
|
|
35
|
+
"": { name: "@pi-harness/pi-harness", version: "0.1.2", dependencies: { "@pi-harness/core": "0.1.2" } },
|
|
36
|
+
"packages/core": { name: "@pi-harness/core", version: "0.1.2" },
|
|
37
|
+
"packages/api-gateway": { name: "@pi-harness/api-gateway", version: "0.1.2" },
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
await writeJson(fixture, "packages/api-gateway/src/marketplace-entries/official/internal.json", {
|
|
41
|
+
packageName: "@pi-harness/core/plugins/example",
|
|
42
|
+
version: "0.1.2",
|
|
43
|
+
});
|
|
44
|
+
await writeJson(fixture, "packages/api-gateway/src/marketplace-entries/official/external.json", { packageName: "external-plugin", version: "4.5.6" });
|
|
45
|
+
|
|
46
|
+
await execFileAsync(process.execPath, [resolve(repositoryRoot, "scripts/set-release-version.mjs"), "0.1.3"], { cwd: fixture });
|
|
47
|
+
|
|
48
|
+
const rootManifest = JSON.parse(await readFile(resolve(fixture, "package.json"), "utf8")) as Record<string, unknown>;
|
|
49
|
+
const packageLock = JSON.parse(await readFile(resolve(fixture, "package-lock.json"), "utf8")) as Record<string, unknown>;
|
|
50
|
+
const internalEntry = JSON.parse(await readFile(resolve(fixture, "packages/api-gateway/src/marketplace-entries/official/internal.json"), "utf8")) as Record<
|
|
51
|
+
string,
|
|
52
|
+
unknown
|
|
53
|
+
>;
|
|
54
|
+
const externalEntry = JSON.parse(await readFile(resolve(fixture, "packages/api-gateway/src/marketplace-entries/official/external.json"), "utf8")) as Record<
|
|
55
|
+
string,
|
|
56
|
+
unknown
|
|
57
|
+
>;
|
|
58
|
+
|
|
59
|
+
expect(rootManifest).toMatchObject({ version: "0.1.3", dependencies: { "@pi-harness/core": "0.1.3" } });
|
|
60
|
+
expect(packageLock).toMatchObject({
|
|
61
|
+
version: "0.1.3",
|
|
62
|
+
packages: {
|
|
63
|
+
"": { version: "0.1.3", dependencies: { "@pi-harness/core": "0.1.3" } },
|
|
64
|
+
"packages/core": { version: "0.1.3" },
|
|
65
|
+
"packages/api-gateway": { version: "0.1.3" },
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
expect(internalEntry.version).toBe("0.1.3");
|
|
69
|
+
expect(externalEntry.version).toBe("4.5.6");
|
|
70
|
+
});
|
|
71
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/web-app",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Patchable Web application bundle for Pi Harness",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@deepseek-ai/cordis": "4.0.1",
|
|
35
|
-
"@pi-harness/host-webserver": "0.1.
|
|
35
|
+
"@pi-harness/host-webserver": "0.1.4"
|
|
36
36
|
},
|
|
37
37
|
"engines": {
|
|
38
38
|
"node": ">=22.19.0"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Plugin-first Pi Harness CLI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"typecheck": "tsc -p tsconfig.json"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@pi-harness/core": "0.1.
|
|
30
|
+
"@pi-harness/core": "0.1.4"
|
|
31
31
|
},
|
|
32
32
|
"engines": {
|
|
33
33
|
"node": ">=22.19.0"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-room.d.ts","sourceRoot":"","sources":["../src/react-room.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,SAAS,EAaf,MAAM,mBAAmB,CAAC;AAa3B,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"react-room.d.ts","sourceRoot":"","sources":["../src/react-room.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,SAAS,EAaf,MAAM,mBAAmB,CAAC;AAa3B,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAgnLnD,wBAAgB,eAAe,CAAC,EAAE,GAAuB,EAAE,UAAU,EAAE,EAAE;IAAE,GAAG,CAAC,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,2CAqlDhH"}
|
|
@@ -1103,7 +1103,7 @@ function Plugins({ plugins, panels, catalog, onMarketplace, onOpenDetail, onToml
|
|
|
1103
1103
|
const categoryLabel = metadata?.category.label ?? plugin.category?.label;
|
|
1104
1104
|
const capabilityLabel = capability(plugin.name);
|
|
1105
1105
|
const pluginTitle = metadata?.name ?? displayPluginName(plugin.name);
|
|
1106
|
-
return (_jsxs("article", { className: "plugin-card", children: [_jsxs("div", { className: "plugin-card-head", children: [_jsx("span", { className: "plugin-icon", children: "\u25C8" }), _jsx("div", { className: "plugin-copy", children: _jsxs("div", { className: "plugin-heading", children: [_jsxs("div", { className: "plugin-title", children: [_jsx("strong", { children: pluginTitle }), _jsx("span", { className: `plugin-state ${plugin.enabled ? "active" : ""}`, children: plugin.enabled ? "运行中" : "已停用" }), categoryLabel && _jsx("span", { className: "capability", children: categoryLabel }), categoryLabel !== capabilityLabel && _jsx("span", { className: "capability", children: capabilityLabel })] }), _jsx("div", { className: "plugin-actions", children: plugin.removable ? (_jsxs(_Fragment, { children: [_jsx("button", { "aria-label": `${plugin.enabled ? "停用" : "启用"} ${pluginTitle}`, "aria-pressed": plugin.enabled, className: "plugin-switch-button", disabled: busyPlugin !== undefined, onClick: () => void runPluginAction(plugin, (item) => onToggle(item)), type: "button", children: _jsx("span", { "aria-hidden": "true", className: `switch ${plugin.enabled ? "on" : ""}`, children: _jsx("i", {}) }) }), _jsx("button", { className: "plugin-uninstall", disabled: busyPlugin !== undefined, onClick: () => {
|
|
1106
|
+
return (_jsxs("article", { className: "catalog-card plugin-card", children: [_jsxs("div", { className: "plugin-card-head", children: [_jsx("span", { className: "plugin-icon", children: "\u25C8" }), _jsx("div", { className: "plugin-copy", children: _jsxs("div", { className: "plugin-heading", children: [_jsxs("div", { className: "plugin-title", children: [_jsx("strong", { children: pluginTitle }), _jsx("span", { className: `plugin-state ${plugin.enabled ? "active" : ""}`, children: plugin.enabled ? "运行中" : "已停用" }), categoryLabel && _jsx("span", { className: "capability", children: categoryLabel }), categoryLabel !== capabilityLabel && _jsx("span", { className: "capability", children: capabilityLabel })] }), _jsx("div", { className: "plugin-actions", children: plugin.removable ? (_jsxs(_Fragment, { children: [_jsx("button", { "aria-label": `${plugin.enabled ? "停用" : "启用"} ${pluginTitle}`, "aria-pressed": plugin.enabled, className: "plugin-switch-button", disabled: busyPlugin !== undefined, onClick: () => void runPluginAction(plugin, (item) => onToggle(item)), type: "button", children: _jsx("span", { "aria-hidden": "true", className: `switch ${plugin.enabled ? "on" : ""}`, children: _jsx("i", {}) }) }), _jsx("button", { className: "plugin-uninstall", disabled: busyPlugin !== undefined, onClick: () => {
|
|
1107
1107
|
setPluginError("");
|
|
1108
1108
|
setPendingUninstall(plugin);
|
|
1109
1109
|
}, type: "button", children: "\u5378\u8F7D" })] })) : (_jsx("span", { className: `switch ${plugin.enabled ? "on" : ""}`, children: _jsx("i", {}) })) })] }) })] }), _jsxs("div", { className: "plugin-card-body", children: [_jsx("code", { className: "plugin-package", children: plugin.name }), _jsx("p", { className: "plugin-description", children: plugin.enabled ? "由当前运行时加载并启用,能力与 hook 已注册。" : "由当前运行时加载但已停用。" }), _jsxs("div", { className: "hook-list", children: [_jsx("span", { children: "loader" }), _jsx("span", { children: plugin.state === "active" ? "active" : `state:${plugin.state}` })] })] }), _jsxs("footer", { className: "plugin-card-footer", children: [_jsx("a", { className: "plugin-detail-link", href: installedPluginDetailPath(plugin.name), onClick: (event) => {
|
|
@@ -1140,7 +1140,7 @@ function InstalledPluginDetail({ plugin, panel, metadata, onBack, onToggle, onUn
|
|
|
1140
1140
|
return (_jsxs("section", { className: "marketplace-page flex min-w-0 flex-1 flex-col", children: [_jsxs("div", { className: "min-h-0 flex-1 overflow-auto", children: [_jsxs("div", { className: "subnav plugin-detail-subnav", children: [_jsx("a", { href: "?page=plugins", onClick: (event) => {
|
|
1141
1141
|
event.preventDefault();
|
|
1142
1142
|
onBack();
|
|
1143
|
-
}, children: "\u2190 \u5DF2\u5B89\u88C5\u63D2\u4EF6" }), _jsx("span", { children: "\u63D2\u4EF6\u8BE6\u60C5" })] }), _jsxs("div", { className: "plugin-detail-content", children: [_jsxs("header", { className: "border-b border-[#e3e7ee] pb-7", children: [_jsxs("div", { className: "mb-4 flex flex-wrap items-center gap-2", children: [_jsx("span", { className: `rounded px-2 py-1 font-mono text-[10px] ${plugin.enabled ? "bg-[#e6faed] text-[#14733f]" : "bg-[#eef0f3] text-[#687381]"}`, children: plugin.enabled ? "运行中" : "已停用" }), _jsx("span", { className: "rounded bg-[#f2edff] px-2 py-1 text-[10px] text-[#6d4bc3]", children: plugin.category?.label ?? "运行时插件" }), _jsx("span", { className: "rounded bg-[#e4edfd] px-2 py-1 font-mono text-[10px] text-[#3565c5]", children: capability(plugin.name) })] }), _jsxs("div", { className: "flex flex-wrap items-end justify-between gap-5", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "mb-2 font-mono text-[11px] uppercase tracking-[0.14em] text-[#687381]", children: "PLUGIN DETAIL" }), _jsx("h1", { className: "text-3xl font-semibold tracking-[-0.03em] text-[#20252b]", children: title }), _jsxs("code", { className: "mt-3 block break-all text-[12px] text-[#687381]", children: [plugin.name, metadata ? ` · v${metadata.version}` : ""] })] }), plugin.removable ? (_jsxs("div", { className: "plugin-detail-actions", children: [_jsx("button", { className: "plugin-detail-action", disabled: busyAction !== undefined, onClick: () => void run("toggle", () => onToggle(plugin)), type: "button", children: busyAction === "toggle" ? "处理中…" : plugin.enabled ? "停用插件" : "启用插件" }), _jsx("button", { className: "plugin-detail-action danger", disabled: busyAction !== undefined, onClick: () => {
|
|
1143
|
+
}, children: "\u2190 \u5DF2\u5B89\u88C5\u63D2\u4EF6" }), _jsx("span", { children: "\u63D2\u4EF6\u8BE6\u60C5" })] }), _jsxs("div", { className: "plugin-detail-content", children: [_jsxs("header", { className: "border-b border-[#e3e7ee] pb-7", children: [_jsxs("div", { className: "mb-4 flex flex-wrap items-center gap-2", children: [_jsx("span", { className: `rounded px-2 py-1 font-mono text-[10px] ${plugin.enabled ? "bg-[#e6faed] text-[#14733f]" : "bg-[#eef0f3] text-[#687381]"}`, children: plugin.enabled ? "运行中" : "已停用" }), _jsx("span", { className: "rounded bg-[#f2edff] px-2 py-1 text-[10px] text-[#6d4bc3]", children: metadata?.category.label ?? plugin.category?.label ?? "运行时插件" }), _jsx("span", { className: "rounded bg-[#e4edfd] px-2 py-1 font-mono text-[10px] text-[#3565c5]", children: capability(plugin.name) })] }), _jsxs("div", { className: "flex flex-wrap items-end justify-between gap-5", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "mb-2 font-mono text-[11px] uppercase tracking-[0.14em] text-[#687381]", children: "PLUGIN DETAIL" }), _jsx("h1", { className: "text-3xl font-semibold tracking-[-0.03em] text-[#20252b]", children: title }), _jsxs("code", { className: "mt-3 block break-all text-[12px] text-[#687381]", children: [plugin.name, metadata ? ` · v${metadata.version}` : ""] })] }), plugin.removable ? (_jsxs("div", { className: "plugin-detail-actions", children: [_jsx("button", { className: "plugin-detail-action", disabled: busyAction !== undefined, onClick: () => void run("toggle", () => onToggle(plugin)), type: "button", children: busyAction === "toggle" ? "处理中…" : plugin.enabled ? "停用插件" : "启用插件" }), _jsx("button", { className: "plugin-detail-action danger", disabled: busyAction !== undefined, onClick: () => {
|
|
1144
1144
|
setError("");
|
|
1145
1145
|
setConfirmUninstall(true);
|
|
1146
1146
|
}, type: "button", children: "\u5378\u8F7D\u63D2\u4EF6" })] })) : (_jsx("span", { className: "rounded-full bg-[#eef0f3] px-3 py-1.5 text-[11px] text-[#687381]", children: "\u5185\u7F6E\u7EC4\u4EF6" }))] }), _jsx("p", { className: "mt-5 max-w-3xl text-[14px] leading-7 text-[#59636e]", children: metadata?.description ?? (plugin.enabled ? "由当前运行时加载并启用,能力与 hook 已注册。" : "插件保留在运行配置中,但当前处于停用状态。") }), error && (_jsxs("p", { className: "mt-3 text-[12px] text-[#b42318]", role: "alert", children: ["\u64CD\u4F5C\u5931\u8D25\uFF1A", error] }))] }), _jsxs("div", { className: "grid gap-4 py-6 lg:grid-cols-[minmax(0,1fr)_280px]", children: [_jsxs("div", { className: "space-y-4", children: [_jsxs("section", { className: "rounded-[10px] border border-[#e3e7ee] bg-white p-5", children: [_jsx("h2", { className: "text-[13px] font-semibold text-[#20252b]", children: "\u63D2\u4EF6\u80FD\u529B" }), _jsx("div", { className: "mt-4 flex flex-wrap gap-2", children: (metadata?.capabilities.length ? metadata.capabilities : [capability(plugin.name)]).map((item) => (_jsx("span", { className: "rounded-md bg-[#f1f4f9] px-2 py-1 font-mono text-[11px] text-[#61666b]", children: item }, item))) })] }), metadata?.hooks.length ? (_jsxs("section", { className: "rounded-[10px] border border-[#e3e7ee] bg-white p-5", children: [_jsx("h2", { className: "text-[13px] font-semibold text-[#20252b]", children: "\u6269\u5C55\u70B9" }), _jsx("div", { className: "mt-4 space-y-2", children: metadata.hooks.map((item) => (_jsx("div", { className: "rounded-md bg-[#f8f9fb] px-3 py-2 font-mono text-[11px] text-[#61666b]", children: item }, item))) })] })) : null, _jsxs("section", { className: "rounded-[10px] border border-[#e3e7ee] bg-white p-5", children: [_jsxs("div", { className: "mb-4 flex items-center justify-between gap-3", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-[13px] font-semibold text-[#20252b]", children: "\u5B9E\u65F6\u8BE6\u60C5" }), _jsx("p", { className: "mt-1 text-[12px] text-[#687381]", children: "\u5F53\u524D\u672C\u673A\u4F1A\u8BDD\u4E2D\u7684\u63D2\u4EF6\u8FD0\u884C\u72B6\u6001\u3002" })] }), _jsx("span", { className: "font-mono text-[10px] uppercase tracking-[0.1em] text-[#687381]", children: "LIVE" })] }), panel ? _jsx(PluginPanelCard, { inline: true, panel: panel }) : _jsx("div", { className: "empty-state", children: "\u8FD9\u4E2A\u63D2\u4EF6\u6682\u672A\u63D0\u4F9B\u5B9E\u65F6\u9762\u677F\u3002" })] })] }), _jsxs("aside", { className: "h-fit rounded-[10px] border border-[#e3e7ee] bg-white p-5", children: [_jsx("h2", { className: "text-[13px] font-semibold text-[#20252b]", children: "\u63D2\u4EF6\u4FE1\u606F" }), _jsxs("dl", { className: "mt-4 divide-y divide-[#eef0f3] text-[12px]", children: [_jsxs("div", { className: "flex justify-between gap-4 py-3", children: [_jsx("dt", { className: "text-[#687381]", children: "\u8FD0\u884C\u72B6\u6001" }), _jsx("dd", { className: "font-mono text-[#3b424b]", children: plugin.state })] }), _jsxs("div", { className: "flex justify-between gap-4 py-3", children: [_jsx("dt", { className: "text-[#687381]", children: "\u914D\u7F6E\u6807\u8BC6" }), _jsx("dd", { className: "max-w-[150px] break-all text-right font-mono text-[#3b424b]", children: plugin.id })] }), _jsxs("div", { className: "flex justify-between gap-4 py-3", children: [_jsx("dt", { className: "text-[#687381]", children: "\u5206\u7C7B" }), _jsx("dd", { className: "text-right text-[#3b424b]", children: plugin.category?.label ?? "运行时插件" })] }), _jsxs("div", { className: "flex justify-between gap-4 py-3", children: [_jsx("dt", { className: "text-[#687381]", children: "\u7BA1\u7406\u65B9\u5F0F" }), _jsx("dd", { className: "text-right text-[#3b424b]", children: plugin.removable ? "可配置" : "随运行时加载" })] }), metadata ? (_jsxs("div", { className: "flex justify-between gap-4 py-3", children: [_jsx("dt", { className: "text-[#687381]", children: "\u7248\u672C" }), _jsx("dd", { className: "font-mono text-[#3b424b]", children: metadata.version })] })) : null] }), metadata ? (_jsx("a", { className: "mt-4 block border-t border-[#eef0f3] pt-4 text-[12px] text-[#3565c5]", href: metadata.repository, rel: "noreferrer", target: "_blank", children: "\u67E5\u770B\u6E90\u7801 \u2197" })) : null] })] })] })] }), confirmUninstall ? (_jsx(PluginUninstallDialog, { busy: busyAction === "uninstall", error: error, onCancel: () => setConfirmUninstall(false), onConfirm: () => void run("uninstall", () => onUninstall(plugin)).then((completed) => {
|
|
@@ -1175,7 +1175,7 @@ function Marketplace({ plugins, capabilities, categories, total, page, hasNext,
|
|
|
1175
1175
|
}, children: "\u67E5\u770B\u8FD0\u884C\u914D\u7F6E" })] }), _jsxs("div", { className: "marketplace-toolbar", children: [_jsx("input", { className: "marketplace-search", "aria-label": "\u641C\u7D22\u63D2\u4EF6", onChange: (event) => onQueryChange(event.target.value), placeholder: "\u641C\u7D22\u540D\u79F0\u3001\u5305\u540D\u3001\u80FD\u529B\u2026", value: query }), _jsxs("select", { className: "marketplace-filter", "aria-label": "\u6309\u80FD\u529B\u7B5B\u9009", onChange: (event) => onCapabilityChange(event.target.value), value: capabilityFilter, children: [_jsx("option", { value: "", children: "\u5168\u90E8\u80FD\u529B" }), capabilities.map((item) => (_jsx("option", { value: item, children: item }, item)))] }), _jsxs("span", { className: "marketplace-count", children: [total, " \u4E2A\u5DF2\u5BA1\u6838\u6761\u76EE \u00B7 \u63A8\u8350\u6392\u5E8F"] })] }), _jsx("nav", { "aria-label": "\u63D2\u4EF6\u5206\u7C7B", className: "marketplace-categories", children: categoryTabs.map((category) => {
|
|
1176
1176
|
const active = categoryFilter === category.id;
|
|
1177
1177
|
return (_jsxs("button", { "aria-pressed": active, className: `marketplace-category ${active ? "active" : ""}`, onClick: () => onCategoryChange(category.id), type: "button", children: [_jsx("span", { children: category.label }), _jsx("span", { className: active ? "font-mono text-[10px] text-[#3565c5]" : "font-mono text-[10px] text-[#687381]", children: category.count })] }, category.id || "all"));
|
|
1178
|
-
}) }), _jsxs("div", { className: "marketplace-scroll", children: [_jsxs("div", { className: "marketplace-grid", children: [plugins.map((plugin) => (_jsxs("article", { className: "marketplace-card", children: [_jsxs("div", { className: "flex items-start gap-2.5", children: [_jsx("div", { className: "marketplace-card-mark", children: "\u25C8" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [_jsx("strong", { className: "marketplace-title", children: plugin.name }), _jsx("span", { className: plugin.status === "verified"
|
|
1178
|
+
}) }), _jsxs("div", { className: "marketplace-scroll", children: [_jsxs("div", { className: "marketplace-grid", children: [plugins.map((plugin) => (_jsxs("article", { className: "catalog-card marketplace-card", children: [_jsxs("div", { className: "flex items-start gap-2.5", children: [_jsx("div", { className: "marketplace-card-mark", children: "\u25C8" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [_jsx("strong", { className: "marketplace-title", children: plugin.name }), _jsx("span", { className: plugin.status === "verified"
|
|
1179
1179
|
? "rounded bg-[#e6faed] px-1.5 py-px font-mono text-[10px] text-[#14733f]"
|
|
1180
1180
|
: "rounded bg-[#fff5e7] px-1.5 py-px font-mono text-[10px] text-[#9a6700]", children: plugin.status === "verified" ? "已验证" : "实验性" }), _jsx("span", { className: plugin.source === "official"
|
|
1181
1181
|
? "rounded bg-[#e4edfd] px-1.5 py-px font-mono text-[10px] text-[#3565c5]"
|