@pi-harness/client-web 0.1.2 → 0.1.3
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/LICENSE +9 -0
- package/dist/annotation-ui.d.ts +11 -0
- package/dist/annotation-ui.d.ts.map +1 -0
- package/dist/annotation-ui.js +24 -0
- package/dist/annotation-ui.js.map +1 -0
- package/dist/browser-session-view.d.ts +7 -0
- package/dist/browser-session-view.d.ts.map +1 -0
- package/dist/browser-session-view.js +8 -0
- package/dist/browser-session-view.js.map +1 -0
- package/dist/control-room.d.ts +151 -6
- package/dist/control-room.d.ts.map +1 -1
- package/dist/control-room.js +156 -11
- package/dist/control-room.js.map +1 -1
- package/dist/design-contract.d.ts.map +1 -1
- package/dist/design-contract.js +178 -19
- package/dist/design-contract.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/markdown.d.ts +5 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +20 -0
- package/dist/markdown.js.map +1 -0
- package/dist/marketplace-catalog.d.ts +3 -0
- package/dist/marketplace-catalog.d.ts.map +1 -0
- package/dist/marketplace-catalog.js +10 -0
- package/dist/marketplace-catalog.js.map +1 -0
- package/dist/marketplace-navigation.d.ts +19 -0
- package/dist/marketplace-navigation.d.ts.map +1 -0
- package/dist/marketplace-navigation.js +31 -0
- package/dist/marketplace-navigation.js.map +1 -0
- package/dist/message-content.d.ts +9 -0
- package/dist/message-content.d.ts.map +1 -0
- package/dist/message-content.js +54 -0
- package/dist/message-content.js.map +1 -0
- package/dist/plugin-navigation.d.ts +3 -0
- package/dist/plugin-navigation.d.ts.map +1 -0
- package/dist/plugin-navigation.js +10 -0
- package/dist/plugin-navigation.js.map +1 -0
- package/dist/plugin-search.d.ts +2 -0
- package/dist/plugin-search.d.ts.map +1 -0
- package/dist/plugin-search.js +7 -0
- package/dist/plugin-search.js.map +1 -0
- package/dist/plugin-stars-view.d.ts +12 -0
- package/dist/plugin-stars-view.d.ts.map +1 -0
- package/dist/plugin-stars-view.js +8 -0
- package/dist/plugin-stars-view.js.map +1 -0
- package/dist/prompt-completion.d.ts +13 -0
- package/dist/prompt-completion.d.ts.map +1 -0
- package/dist/prompt-completion.js +17 -0
- package/dist/prompt-completion.js.map +1 -0
- package/dist/react-room.d.ts +2 -1
- package/dist/react-room.d.ts.map +1 -1
- package/dist/react-room.js +2347 -93
- package/dist/react-room.js.map +1 -1
- package/dist/runtime-events.d.ts +4 -0
- package/dist/runtime-events.d.ts.map +1 -0
- package/dist/runtime-events.js +29 -0
- package/dist/runtime-events.js.map +1 -0
- package/package.json +19 -7
package/dist/design-contract.js
CHANGED
|
@@ -15,16 +15,88 @@ export const DESIGN_TURNS = [
|
|
|
15
15
|
{ kind: "user", text: "支付成功率从昨天上线后掉了很多,日志里全是 3DS challenge timeout。定位一下,能改就直接改,改完跑测试。" },
|
|
16
16
|
{ kind: "reasoning", dur: "6s", text: "先找超时配置在哪定义,再看是不是 2.4.0 版本引入的默认值变化。优先只读检索,确认后再动代码。" },
|
|
17
17
|
{ kind: "plugin", name: "context-repo-map", hook: "context_provider", text: "注入仓库地图与最近 3 次提交摘要(1,842 tok)" },
|
|
18
|
-
{
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
{
|
|
19
|
+
kind: "tool",
|
|
20
|
+
glyph: "⌕",
|
|
21
|
+
name: "grep",
|
|
22
|
+
target: '"3DS" src/**/*.ts',
|
|
23
|
+
dur: "0.4s",
|
|
24
|
+
stat: "12 命中",
|
|
25
|
+
statFg: "#61666B",
|
|
26
|
+
output: "src/payment/threeds.ts:41 const CHALLENGE_TIMEOUT_MS = 8_000\nsrc/payment/threeds.ts:88 if (elapsed > CHALLENGE_TIMEOUT_MS) throw new ChallengeTimeout\nsrc/payment/gateway.ts:114 retries: 0\ntest/payment/threeds.spec.ts:23 vi.advanceTimersByTime(8_100)",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
kind: "tool",
|
|
30
|
+
glyph: "▤",
|
|
31
|
+
name: "read",
|
|
32
|
+
target: "src/payment/threeds.ts:30-96",
|
|
33
|
+
dur: "0.1s",
|
|
34
|
+
stat: "66 行",
|
|
35
|
+
statFg: "#61666B",
|
|
36
|
+
output: "const CHALLENGE_TIMEOUT_MS = 8_000\n\nexport async function runChallenge(ctx: Ctx) {\n const started = now()\n const res = await sdk.challenge(ctx.token) // sdk 2.4.0\n const elapsed = now() - started\n if (elapsed > CHALLENGE_TIMEOUT_MS) throw new ChallengeTimeout()\n return res\n}",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
kind: "text",
|
|
40
|
+
text: "原因找到了:sdk 2.4.0 起 iOS 端 challenge 平均耗时从 3.1s 涨到 9.4s,而我们的超时仍是 8s,且 retries 为 0,一次超时就直接失败。\n\n我按两处改:超时放宽到 20s,并加一次带抖动的重试。",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
kind: "tool",
|
|
44
|
+
glyph: "✎",
|
|
45
|
+
name: "edit",
|
|
46
|
+
target: "src/payment/threeds.ts",
|
|
47
|
+
dur: "0.2s",
|
|
48
|
+
stat: "+9 −2",
|
|
49
|
+
statFg: "#22C55E",
|
|
50
|
+
isDiff: true,
|
|
51
|
+
diff: [
|
|
52
|
+
{ no: "41", sign: "-", text: "const CHALLENGE_TIMEOUT_MS = 8_000" },
|
|
53
|
+
{ no: "41", sign: "+", text: "const CHALLENGE_TIMEOUT_MS = 20_000" },
|
|
54
|
+
{ no: "42", sign: "+", text: "const CHALLENGE_MAX_ATTEMPTS = 2" },
|
|
55
|
+
{ no: "86", sign: "-", text: " const res = await sdk.challenge(ctx.token)" },
|
|
56
|
+
{ no: "86", sign: "+", text: " const res = await withRetry(CHALLENGE_MAX_ATTEMPTS, () =>" },
|
|
57
|
+
{ no: "87", sign: "+", text: " sdk.challenge(ctx.token), { jitter: true })" },
|
|
58
|
+
],
|
|
59
|
+
},
|
|
22
60
|
{ kind: "plugin", name: "guard-secret-scan", hook: "before_write", text: "改动无凭据外泄风险,放行" },
|
|
23
61
|
{ kind: "approval", name: "bash — pnpm vitest run test/payment", text: "cd ~/work/checkout-svc && pnpm vitest run test/payment --reporter=dot" },
|
|
24
|
-
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
62
|
+
{
|
|
63
|
+
kind: "tool",
|
|
64
|
+
glyph: "$",
|
|
65
|
+
name: "bash",
|
|
66
|
+
target: "pnpm vitest run test/payment",
|
|
67
|
+
dur: "12.4s",
|
|
68
|
+
stat: "exit 0",
|
|
69
|
+
statFg: "#22C55E",
|
|
70
|
+
output: "···········\n Test Files 3 passed (3)\n Tests 27 passed (27)\n Duration 11.8s\n\n✓ threeds.spec.ts (9)\n✓ gateway.spec.ts (12)\n✓ webhook.spec.ts (6)",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
kind: "subagent",
|
|
74
|
+
name: "reviewer",
|
|
75
|
+
preset: "read-only",
|
|
76
|
+
goal: "复核 threeds.ts 的改动是否引入回归",
|
|
77
|
+
dur: "8.1s",
|
|
78
|
+
lineage: "session #s1 › turn 6 › subagent reviewer(继承 workspace,权限降级为只读)",
|
|
79
|
+
steps: [
|
|
80
|
+
{ tool: "read", target: "src/payment/threeds.ts", dur: "0.1s" },
|
|
81
|
+
{ tool: "read", target: "src/payment/with-retry.ts", dur: "0.1s" },
|
|
82
|
+
{ tool: "grep", target: '"CHALLENGE_TIMEOUT_MS" test/**', dur: "0.3s" },
|
|
83
|
+
],
|
|
84
|
+
verdict: "改动本身正确。两点提醒:test/payment/threeds.spec.ts:23 仍按 8s 断言,会在下次改动时误报通过;withRetry 的抖动上限没设,最坏情况下总耗时可能到 44s,建议加 maxTotalMs。",
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
kind: "todo",
|
|
88
|
+
progress: "3 / 4",
|
|
89
|
+
todos: [
|
|
90
|
+
{ text: "定位超时来源", done: true },
|
|
91
|
+
{ text: "放宽超时并加重试", done: true },
|
|
92
|
+
{ text: "跑 payment 相关测试", done: true },
|
|
93
|
+
{ text: "补一条针对 20s 边界的回归用例", done: false },
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
kind: "text",
|
|
98
|
+
text: "测试全绿。还剩一条回归用例没补:现有 spec 里 `advanceTimersByTime(8_100)` 断言的是旧阈值,需要改成 20s 边界并新增一条「首次超时后重试成功」的用例。要我继续补吗?",
|
|
99
|
+
},
|
|
28
100
|
{ kind: "stats", stats: ["输入 34.2k tok", "缓存命中 61%", "输出 4.8k tok", "用时 1m 42s", "$0.28"] },
|
|
29
101
|
];
|
|
30
102
|
export const DESIGN_EVENTS = [
|
|
@@ -32,7 +104,7 @@ export const DESIGN_EVENTS = [
|
|
|
32
104
|
{ ts: "02:14:01", source: "context_injection", summary: "注入仓库地图与最近提交(1,842 tok)", by: "context-repo-map", dur: "88ms" },
|
|
33
105
|
{ ts: "02:14:02", source: "user_message", summary: "支付成功率下降,定位并修复", by: "用户", dur: "—" },
|
|
34
106
|
{ ts: "02:14:03", source: "reasoning", summary: "先只读检索超时配置,再判断是否与 sdk 版本相关", by: "ds-coder-v3", dur: "6.0s" },
|
|
35
|
-
{ ts: "02:14:09", source: "tool_call", summary:
|
|
107
|
+
{ ts: "02:14:09", source: "tool_call", summary: 'grep "3DS" src/**/*.ts', by: "内置", dur: "0.4s" },
|
|
36
108
|
{ ts: "02:14:10", source: "tool_result", summary: "12 命中,定位 threeds.ts:41", by: "内置", dur: "—" },
|
|
37
109
|
{ ts: "02:14:11", source: "tool_call", summary: "read src/payment/threeds.ts:30-96", by: "内置", dur: "0.1s" },
|
|
38
110
|
{ ts: "02:14:14", source: "tool_call", summary: "edit src/payment/threeds.ts (+9 −2)", by: "内置", dur: "0.2s" },
|
|
@@ -44,18 +116,105 @@ export const DESIGN_EVENTS = [
|
|
|
44
116
|
{ ts: "02:14:41", source: "assistant_message", summary: "给出结论与剩余一条回归用例建议", by: "ds-coder-v3", dur: "2.6s" },
|
|
45
117
|
];
|
|
46
118
|
export const DESIGN_PLUGINS = [
|
|
47
|
-
{
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
119
|
+
{
|
|
120
|
+
name: "context-repo-map",
|
|
121
|
+
ver: "1.4.2",
|
|
122
|
+
capability: "上下文",
|
|
123
|
+
on: true,
|
|
124
|
+
update: false,
|
|
125
|
+
desc: "把仓库结构、入口文件与最近提交压缩成上下文,超预算时自动裁剪",
|
|
126
|
+
hooks: ["context_provider", "before_step"],
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: "guard-secret-scan",
|
|
130
|
+
ver: "2.0.1",
|
|
131
|
+
capability: "策略",
|
|
132
|
+
on: true,
|
|
133
|
+
update: true,
|
|
134
|
+
desc: "写入与提交前扫描凭据、私钥、token,命中即拦截并说明位置",
|
|
135
|
+
hooks: ["before_write", "before_commit"],
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: "subagent-review",
|
|
139
|
+
ver: "0.8.5",
|
|
140
|
+
capability: "子代理",
|
|
141
|
+
on: true,
|
|
142
|
+
update: false,
|
|
143
|
+
desc: "改动落盘后派生只读 reviewer 子代理复核 diff,产出可执行意见",
|
|
144
|
+
hooks: ["after_write"],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: "sandbox-landlock",
|
|
148
|
+
ver: "1.1.0",
|
|
149
|
+
capability: "沙箱",
|
|
150
|
+
on: true,
|
|
151
|
+
update: false,
|
|
152
|
+
desc: "Linux Landlock 限制子进程可写路径与出网,越权直接拒绝",
|
|
153
|
+
hooks: ["shell_exec"],
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: "model-deepseek",
|
|
157
|
+
ver: "3.2.0",
|
|
158
|
+
capability: "模型",
|
|
159
|
+
on: true,
|
|
160
|
+
update: true,
|
|
161
|
+
desc: "DeepSeek 官方模型路由,支持 prompt 缓存与推理内容透传",
|
|
162
|
+
hooks: ["model_provider"],
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: "store-sqlite",
|
|
166
|
+
ver: "1.0.7",
|
|
167
|
+
capability: "存储",
|
|
168
|
+
on: true,
|
|
169
|
+
update: false,
|
|
170
|
+
desc: "会话事件流落地到本地 SQLite,支持 resume、fork、replay",
|
|
171
|
+
hooks: ["session_store"],
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
name: "vision-handoff",
|
|
175
|
+
ver: "path",
|
|
176
|
+
capability: "上下文",
|
|
177
|
+
on: true,
|
|
178
|
+
update: false,
|
|
179
|
+
local: true,
|
|
180
|
+
desc: "图片交给独立视觉模型描述后回填上下文,从本地路径加载(../pi-pkg-vision-handoff)",
|
|
181
|
+
hooks: ["context_provider"],
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: "notify-webhook",
|
|
185
|
+
ver: "0.3.1",
|
|
186
|
+
capability: "通知",
|
|
187
|
+
on: false,
|
|
188
|
+
update: false,
|
|
189
|
+
desc: "任务结束或需要确认时推送到自定义 webhook",
|
|
190
|
+
hooks: ["after_turn"],
|
|
191
|
+
},
|
|
55
192
|
];
|
|
56
193
|
export const DESIGN_PROVIDERS = [
|
|
57
|
-
{
|
|
58
|
-
|
|
194
|
+
{
|
|
195
|
+
id: "deepseek",
|
|
196
|
+
name: "DeepSeek",
|
|
197
|
+
state: "已连接",
|
|
198
|
+
ok: true,
|
|
199
|
+
protocol: "openai",
|
|
200
|
+
baseUrl: "https://api.deepseek.com/v1",
|
|
201
|
+
key: "sk-••••••••••••••••7f3a",
|
|
202
|
+
models: ["ds-coder-v3", "ds-chat", "ds-reasoner"],
|
|
203
|
+
latency: "41ms",
|
|
204
|
+
by: "model-deepseek",
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
id: "anthropic",
|
|
208
|
+
name: "Anthropic",
|
|
209
|
+
state: "已连接",
|
|
210
|
+
ok: true,
|
|
211
|
+
protocol: "anthropic",
|
|
212
|
+
baseUrl: "https://api.anthropic.com",
|
|
213
|
+
key: "sk-ant-••••••••••2c91",
|
|
214
|
+
models: ["claude-sonnet", "claude-haiku"],
|
|
215
|
+
latency: "128ms",
|
|
216
|
+
by: "model-anthropic",
|
|
217
|
+
},
|
|
59
218
|
];
|
|
60
219
|
export const DESIGN_TOML = `# ~/.config/pi/pi.toml
|
|
61
220
|
# 一切都是包:模型、工具、沙箱、存储、界面都在这里装卸。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-contract.js","sourceRoot":"","sources":["../src/design-contract.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"design-contract.js","sourceRoot":"","sources":["../src/design-contract.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,10 @@ export declare class AppWebEntry {
|
|
|
10
10
|
#private;
|
|
11
11
|
readonly context: Context;
|
|
12
12
|
readonly root: HTMLElement;
|
|
13
|
-
|
|
13
|
+
readonly version?: string;
|
|
14
|
+
constructor(root: HTMLElement, options?: {
|
|
15
|
+
readonly version?: string;
|
|
16
|
+
});
|
|
14
17
|
run(): void;
|
|
15
18
|
dispose(): Promise<void>;
|
|
16
19
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,QAAQ,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,UAAU,EAAE,WAAW,CAAC;QACxB,SAAS,EAAE,SAAS,CAAC;KACtB;CACF;AAED,qBAAa,WAAW;;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEd,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;IAK1E,GAAG,IAAI,IAAI;IAML,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}
|
package/dist/index.js
CHANGED
|
@@ -6,14 +6,22 @@ import { createClientApi } from "./control-room.js";
|
|
|
6
6
|
export class AppWebEntry {
|
|
7
7
|
context;
|
|
8
8
|
root;
|
|
9
|
+
version;
|
|
9
10
|
#reactRoot;
|
|
10
|
-
constructor(root
|
|
11
|
+
constructor(root, options = {}) {
|
|
12
|
+
this.root = root;
|
|
13
|
+
this.version = options.version;
|
|
14
|
+
this.context = new Context();
|
|
15
|
+
}
|
|
11
16
|
run() {
|
|
12
17
|
this.context.provide("clientRoot", this.root);
|
|
13
18
|
this.context.provide("clientApi", createClientApi());
|
|
14
19
|
this.#reactRoot = createRoot(this.root);
|
|
15
|
-
this.#reactRoot.render(createElement(ControlRoomView, { api: this.context.clientApi }));
|
|
20
|
+
this.#reactRoot.render(createElement(ControlRoomView, { api: this.context.clientApi, appVersion: this.version }));
|
|
21
|
+
}
|
|
22
|
+
async dispose() {
|
|
23
|
+
this.#reactRoot?.unmount();
|
|
24
|
+
await this.context.fiber.dispose();
|
|
16
25
|
}
|
|
17
|
-
async dispose() { this.#reactRoot?.unmount(); await this.context.fiber.dispose(); }
|
|
18
26
|
}
|
|
19
27
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAC;AASpE,MAAM,OAAO,WAAW;IACb,OAAO,CAAU;IACjB,IAAI,CAAc;IAClB,OAAO,CAAU;IAC1B,UAAU,CAAQ;IAClB,YAAY,IAAiB,EAAE,UAAyC,EAAE;QACxE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC/B,CAAC;IACD,GAAG;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpH,CAAC;IACD,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.tsx"],"names":[],"mappings":"AAmBA,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,2CAE5F"}
|
package/dist/markdown.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import createDOMPurify from "dompurify";
|
|
3
|
+
import { marked } from "marked";
|
|
4
|
+
const markdownOptions = { gfm: true, breaks: true };
|
|
5
|
+
const purifier = typeof window === "undefined" ? undefined : createDOMPurify(window);
|
|
6
|
+
function renderMarkdown(source) {
|
|
7
|
+
const html = marked.parse(source, markdownOptions);
|
|
8
|
+
if (typeof html !== "string")
|
|
9
|
+
return "";
|
|
10
|
+
return (purifier?.sanitize(html, {
|
|
11
|
+
USE_PROFILES: { html: true },
|
|
12
|
+
ALLOWED_TAGS: ["a", "blockquote", "br", "code", "del", "em", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "li", "ol", "p", "pre", "strong", "ul"],
|
|
13
|
+
ALLOWED_ATTR: ["href", "rel", "target"],
|
|
14
|
+
FORBID_ATTR: ["style", "class", "id"],
|
|
15
|
+
}) ?? "");
|
|
16
|
+
}
|
|
17
|
+
export function MarkdownMessage({ text, onMouseUp }) {
|
|
18
|
+
return _jsx("div", { className: "turn-markdown", dangerouslySetInnerHTML: { __html: renderMarkdown(text) }, onMouseUp: onMouseUp });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.tsx"],"names":[],"mappings":";AAAA,OAAO,eAAe,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAW,CAAC;AAC7D,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AAErF,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACnD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACxC,OAAO,CACL,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;QACvB,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;QAC5B,YAAY,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC;QAC9I,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC;QACvC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;KACtC,CAAC,IAAI,EAAE,CACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAA4C;IAC3F,OAAO,cAAK,SAAS,EAAC,eAAe,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,GAAI,CAAC;AAC5H,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace-catalog.d.ts","sourceRoot":"","sources":["../src/marketplace-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,eAAO,MAAM,sBAAsB,GAAU,KAAK,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,KAAG,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAOhI,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const loadMarketplaceCatalog = async (api) => {
|
|
2
|
+
const items = [];
|
|
3
|
+
for (let page = 0;; page += 1) {
|
|
4
|
+
const result = await api.listMarketplace("", "", page, 100);
|
|
5
|
+
items.push(...result.items);
|
|
6
|
+
if (!result.hasNext || result.items.length === 0 || items.length >= result.total)
|
|
7
|
+
return items;
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=marketplace-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace-catalog.js","sourceRoot":"","sources":["../src/marketplace-catalog.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,GAAuC,EAA+C,EAAE;IACnI,MAAM,KAAK,GAA8B,EAAE,CAAC;IAC5C,KAAK,IAAI,IAAI,GAAG,CAAC,GAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;IACjG,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare function marketplaceDetailPath(id: string): string;
|
|
2
|
+
export declare function readMarketplaceDetailId(params: URLSearchParams): string | undefined;
|
|
3
|
+
export interface MarketplaceCategoryTab {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly label: string;
|
|
6
|
+
readonly count: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function marketplaceCategoryTabs(categories: readonly MarketplaceCategoryTab[]): readonly MarketplaceCategoryTab[];
|
|
9
|
+
export interface MarketplaceStatisticsInput {
|
|
10
|
+
readonly downloads30d?: number;
|
|
11
|
+
readonly quality?: number;
|
|
12
|
+
readonly updatedAt?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface MarketplaceStatisticItem {
|
|
15
|
+
readonly label: string;
|
|
16
|
+
readonly value: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function marketplaceStatisticItems(statistics: MarketplaceStatisticsInput | undefined): readonly MarketplaceStatisticItem[];
|
|
19
|
+
//# sourceMappingURL=marketplace-navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace-navigation.d.ts","sourceRoot":"","sources":["../src/marketplace-navigation.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAInF;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,SAAS,sBAAsB,EAAE,GAAG,SAAS,sBAAsB,EAAE,CAGxH;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAOD,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,0BAA0B,GAAG,SAAS,GAAG,SAAS,wBAAwB,EAAE,CAQjI"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function marketplaceDetailPath(id) {
|
|
2
|
+
return `?page=marketplace&plugin=${encodeURIComponent(id)}`;
|
|
3
|
+
}
|
|
4
|
+
export function readMarketplaceDetailId(params) {
|
|
5
|
+
if (params.get("page") !== "marketplace")
|
|
6
|
+
return undefined;
|
|
7
|
+
const id = params.get("plugin")?.trim();
|
|
8
|
+
return id || undefined;
|
|
9
|
+
}
|
|
10
|
+
export function marketplaceCategoryTabs(categories) {
|
|
11
|
+
const total = categories.reduce((sum, category) => sum + category.count, 0);
|
|
12
|
+
return [{ id: "", label: "全部", count: total }, ...categories];
|
|
13
|
+
}
|
|
14
|
+
function compactDownloadCount(value) {
|
|
15
|
+
if (value >= 10_000)
|
|
16
|
+
return `${(value / 10_000).toFixed(1).replace(/\.0$/, "")} 万`;
|
|
17
|
+
return new Intl.NumberFormat("zh-CN").format(value);
|
|
18
|
+
}
|
|
19
|
+
export function marketplaceStatisticItems(statistics) {
|
|
20
|
+
if (statistics === undefined)
|
|
21
|
+
return [];
|
|
22
|
+
const items = [];
|
|
23
|
+
if (statistics.downloads30d !== undefined)
|
|
24
|
+
items.push({ label: "近 30 天下载量", value: compactDownloadCount(statistics.downloads30d) });
|
|
25
|
+
if (statistics.quality !== undefined)
|
|
26
|
+
items.push({ label: "npm 质量分", value: String(Math.round(statistics.quality * 100)) });
|
|
27
|
+
if (statistics.updatedAt !== undefined && Number.isFinite(Date.parse(statistics.updatedAt)))
|
|
28
|
+
items.push({ label: "npm 更新时间", value: statistics.updatedAt.slice(0, 10) });
|
|
29
|
+
return items;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=marketplace-navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace-navigation.js","sourceRoot":"","sources":["../src/marketplace-navigation.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CAAC,EAAU;IAC9C,OAAO,4BAA4B,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAuB;IAC7D,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,aAAa;QAAE,OAAO,SAAS,CAAC;IAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IACxC,OAAO,EAAE,IAAI,SAAS,CAAC;AACzB,CAAC;AAQD,MAAM,UAAU,uBAAuB,CAAC,UAA6C;IACnF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC;AAChE,CAAC;AAaD,SAAS,oBAAoB,CAAC,KAAa;IACzC,IAAI,KAAK,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC;IACnF,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAAkD;IAC1F,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,KAAK,GAA+B,EAAE,CAAC;IAC7C,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACpI,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5H,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACzF,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function messageText(message: Record<string, unknown>): string;
|
|
2
|
+
export declare function messageThinking(message: Record<string, unknown>): string;
|
|
3
|
+
export interface ChatTurn {
|
|
4
|
+
readonly role: "user" | "assistant";
|
|
5
|
+
readonly text: string;
|
|
6
|
+
readonly thinking: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function projectChatTurns(messages: readonly Record<string, unknown>[]): readonly ChatTurn[];
|
|
9
|
+
//# sourceMappingURL=message-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-content.d.ts","sourceRoot":"","sources":["../src/message-content.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAYpE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAWxE;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,QAAQ,EAAE,CAiBlG"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export function messageText(message) {
|
|
2
|
+
const content = message.content;
|
|
3
|
+
if (typeof content === "string")
|
|
4
|
+
return content;
|
|
5
|
+
if (!Array.isArray(content))
|
|
6
|
+
return "";
|
|
7
|
+
return content
|
|
8
|
+
.map((part) => {
|
|
9
|
+
if (typeof part === "string")
|
|
10
|
+
return part;
|
|
11
|
+
if (typeof part !== "object" || part === null)
|
|
12
|
+
return "";
|
|
13
|
+
const typedPart = part;
|
|
14
|
+
return (typedPart.type === undefined || typedPart.type === "text") && typeof typedPart.text === "string" ? typedPart.text : "";
|
|
15
|
+
})
|
|
16
|
+
.join("");
|
|
17
|
+
}
|
|
18
|
+
export function messageThinking(message) {
|
|
19
|
+
const content = message.content;
|
|
20
|
+
if (!Array.isArray(content))
|
|
21
|
+
return "";
|
|
22
|
+
return content
|
|
23
|
+
.map((part) => {
|
|
24
|
+
if (typeof part !== "object" || part === null)
|
|
25
|
+
return "";
|
|
26
|
+
const typedPart = part;
|
|
27
|
+
return typedPart.type === "thinking" && typeof typedPart.thinking === "string" ? typedPart.thinking : "";
|
|
28
|
+
})
|
|
29
|
+
.filter(Boolean)
|
|
30
|
+
.join("\n\n");
|
|
31
|
+
}
|
|
32
|
+
export function projectChatTurns(messages) {
|
|
33
|
+
const turns = [];
|
|
34
|
+
for (const message of messages) {
|
|
35
|
+
if (message.role === "toolResult")
|
|
36
|
+
continue;
|
|
37
|
+
const role = message.role === "user" ? "user" : message.role === "assistant" ? "assistant" : undefined;
|
|
38
|
+
if (!role)
|
|
39
|
+
continue;
|
|
40
|
+
const text = messageText(message);
|
|
41
|
+
const thinking = role === "assistant" ? messageThinking(message) : "";
|
|
42
|
+
if (!text && !thinking)
|
|
43
|
+
continue;
|
|
44
|
+
const previous = turns.at(-1);
|
|
45
|
+
if (role === "assistant" && previous?.role === "assistant") {
|
|
46
|
+
turns[turns.length - 1] = { role, text: previous.text + text, thinking: previous.thinking + thinking };
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
turns.push({ role, text, thinking });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return turns;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=message-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-content.js","sourceRoot":"","sources":["../src/message-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-navigation.d.ts","sourceRoot":"","sources":["../src/plugin-navigation.ts"],"names":[],"mappings":"AAAA,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAIvF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function installedPluginDetailPath(packageName) {
|
|
2
|
+
return `?page=plugins&plugin=${encodeURIComponent(packageName)}`;
|
|
3
|
+
}
|
|
4
|
+
export function readInstalledPluginDetailId(params) {
|
|
5
|
+
if (params.get("page") !== "plugins")
|
|
6
|
+
return undefined;
|
|
7
|
+
const id = params.get("plugin")?.trim();
|
|
8
|
+
return id || undefined;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=plugin-navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-navigation.js","sourceRoot":"","sources":["../src/plugin-navigation.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB,CAAC,WAAmB;IAC3D,OAAO,wBAAwB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAuB;IACjE,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACvD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IACxC,OAAO,EAAE,IAAI,SAAS,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-search.d.ts","sourceRoot":"","sources":["../src/plugin-search.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,EAAE,QAAQ,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,KAAG,OAI3F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-search.js","sourceRoot":"","sources":["../src/plugin-search.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,MAAuC,EAAW,EAAE;IACpG,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3E,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface PluginStarsRowInput {
|
|
2
|
+
readonly fullName: string;
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly stars: number;
|
|
5
|
+
readonly htmlUrl: string;
|
|
6
|
+
readonly updatedAt: string;
|
|
7
|
+
}
|
|
8
|
+
export interface PluginStarsRow extends PluginStarsRowInput {
|
|
9
|
+
readonly rank: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function pluginStarsRows(entries: readonly PluginStarsRowInput[], limit: number): readonly PluginStarsRow[];
|
|
12
|
+
//# sourceMappingURL=plugin-stars-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-stars-view.d.ts","sourceRoot":"","sources":["../src/plugin-stars-view.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAMjH"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export function pluginStarsRows(entries, limit) {
|
|
2
|
+
const normalizedLimit = Math.max(0, Math.min(50, Math.trunc(limit)));
|
|
3
|
+
return [...entries]
|
|
4
|
+
.sort((left, right) => right.stars - left.stars || left.fullName.localeCompare(right.fullName))
|
|
5
|
+
.slice(0, normalizedLimit)
|
|
6
|
+
.map((entry, index) => ({ ...entry, rank: index + 1 }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=plugin-stars-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-stars-view.js","sourceRoot":"","sources":["../src/plugin-stars-view.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,eAAe,CAAC,OAAuC,EAAE,KAAa;IACpF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,OAAO,CAAC;SAChB,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SAC9F,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC;SACzB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC"}
|