@kingingwang/pi-linux-arm64 0.84.1 → 0.84.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.
Files changed (49) hide show
  1. package/bin/CHANGELOG.md +168 -2
  2. package/bin/README.md +9 -4
  3. package/bin/docs/compaction.md +21 -6
  4. package/bin/docs/custom-provider.md +6 -3
  5. package/bin/docs/environment-variables.md +16 -10
  6. package/bin/docs/extensions.md +24 -9
  7. package/bin/docs/json.md +12 -5
  8. package/bin/docs/keybindings.md +22 -12
  9. package/bin/docs/llama-cpp.md +2 -0
  10. package/bin/docs/models.md +8 -2
  11. package/bin/docs/packages.md +2 -2
  12. package/bin/docs/providers.md +8 -1
  13. package/bin/docs/rpc.md +24 -7
  14. package/bin/docs/sdk.md +16 -2
  15. package/bin/docs/settings.md +41 -2
  16. package/bin/docs/skills.md +4 -3
  17. package/bin/docs/terminal-setup.md +34 -11
  18. package/bin/docs/themes.md +24 -3
  19. package/bin/docs/tui.md +2 -2
  20. package/bin/docs/usage.md +9 -4
  21. package/bin/docs/windows.md +24 -2
  22. package/bin/examples/extensions/border-status-editor.ts +1 -1
  23. package/bin/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  24. package/bin/examples/extensions/custom-provider-anthropic/package.json +1 -1
  25. package/bin/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  26. package/bin/examples/extensions/git-checkpoint.ts +2 -2
  27. package/bin/examples/extensions/gondolin/package-lock.json +2 -2
  28. package/bin/examples/extensions/gondolin/package.json +1 -1
  29. package/bin/examples/extensions/notify.ts +3 -1
  30. package/bin/examples/extensions/sandbox/package-lock.json +2 -2
  31. package/bin/examples/extensions/sandbox/package.json +1 -1
  32. package/bin/examples/extensions/subagent/README.md +3 -1
  33. package/bin/examples/extensions/subagent/agents.ts +40 -9
  34. package/bin/examples/extensions/subagent/index.ts +27 -4
  35. package/bin/examples/extensions/titlebar-spinner.ts +1 -1
  36. package/bin/examples/extensions/with-deps/package-lock.json +2 -2
  37. package/bin/examples/extensions/with-deps/package.json +1 -1
  38. package/bin/examples/rpc-extension-ui.ts +1 -1
  39. package/bin/examples/sdk/06-extensions.ts +1 -1
  40. package/bin/examples/sdk/README.md +1 -1
  41. package/bin/package.json +12 -14
  42. package/bin/pi +0 -0
  43. package/bin/theme/dark.json +2 -0
  44. package/bin/theme/light.json +2 -0
  45. package/bin/theme/theme-schema.json +9 -1
  46. package/package.json +1 -1
  47. package/bin/node_modules/@mariozechner/clipboard-linux-arm64-gnu/README.md +0 -3
  48. package/bin/node_modules/@mariozechner/clipboard-linux-arm64-gnu/clipboard.linux-arm64-gnu.node +0 -0
  49. package/bin/node_modules/@mariozechner/clipboard-linux-arm64-gnu/package.json +0 -25
@@ -1,6 +1,6 @@
1
1
  # Windows Setup
2
2
 
3
- Pi requires a bash shell on Windows. Checked locations (in order):
3
+ Pi uses Git Bash by default on Windows. Checked locations (in order):
4
4
 
5
5
  1. Custom path from `~/.pi/agent/settings.json`
6
6
  2. Git Bash (`C:\Program Files\Git\bin\bash.exe`)
@@ -8,7 +8,29 @@ Pi requires a bash shell on Windows. Checked locations (in order):
8
8
 
9
9
  For most users, [Git for Windows](https://git-scm.com/download/win) is sufficient.
10
10
 
11
- ## Custom Shell Path
11
+ ## PowerShell Tool
12
+
13
+ The optional `powershell` tool runs commands through `pwsh.exe` when available, otherwise Windows PowerShell. It starts PowerShell with `-NoProfile -NonInteractive -ExecutionPolicy Bypass`. Administrator-enforced execution policies can still take precedence.
14
+
15
+ Use `defaultTools` to replace the model-facing `bash` tool:
16
+
17
+ ```json
18
+ {
19
+ "defaultTools": ["read", "powershell", "edit", "write"]
20
+ }
21
+ ```
22
+
23
+ Or enable both while comparing behavior:
24
+
25
+ ```json
26
+ {
27
+ "defaultTools": ["read", "bash", "powershell", "edit", "write"]
28
+ }
29
+ ```
30
+
31
+ The `!` and `!!` editor commands still use Bash.
32
+
33
+ ## Custom Bash Path
12
34
 
13
35
  ```json
14
36
  {
@@ -92,7 +92,7 @@ export default function (pi: ExtensionAPI) {
92
92
  activeTui?.requestRender();
93
93
  });
94
94
 
95
- pi.on("agent_end", () => {
95
+ pi.on("agent_settled", () => {
96
96
  isWorking = false;
97
97
  stopSpinner();
98
98
  activeTui?.requestRender();
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider",
3
- "version": "0.84.1",
3
+ "version": "0.84.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-custom-provider",
9
- "version": "0.84.1",
9
+ "version": "0.84.3",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "^0.52.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "0.84.1",
4
+ "version": "0.84.3",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-gitlab-duo",
3
3
  "private": true,
4
- "version": "0.84.1",
4
+ "version": "0.84.3",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -46,8 +46,8 @@ export default function (pi: ExtensionAPI) {
46
46
  }
47
47
  });
48
48
 
49
- pi.on("agent_end", async () => {
50
- // Clear checkpoints after agent completes
49
+ pi.on("agent_settled", async () => {
50
+ // Clear checkpoints after the full agent run completes
51
51
  checkpoints.clear();
52
52
  });
53
53
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-gondolin",
3
- "version": "0.84.1",
3
+ "version": "0.84.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-gondolin",
9
- "version": "0.84.1",
9
+ "version": "0.84.3",
10
10
  "dependencies": {
11
11
  "@earendil-works/gondolin": "0.12.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-gondolin",
3
3
  "private": true,
4
- "version": "0.84.1",
4
+ "version": "0.84.3",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -49,7 +49,9 @@ function notify(title: string, body: string): void {
49
49
  }
50
50
 
51
51
  export default function (pi: ExtensionAPI) {
52
- pi.on("agent_end", async () => {
52
+ // `agent_end` fires after each low-level run; Pi may still retry, compact,
53
+ // or continue with queued follow-ups. Notify only after the full run settles.
54
+ pi.on("agent_settled", async () => {
53
55
  notify("Pi", "Ready for input");
54
56
  });
55
57
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
- "version": "1.14.1",
3
+ "version": "1.14.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-sandbox",
9
- "version": "1.14.1",
9
+ "version": "1.14.3",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sandbox-runtime": "^0.0.26"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
3
  "private": true,
4
- "version": "1.14.1",
4
+ "version": "1.14.3",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -62,7 +62,7 @@ This tool executes a separate `pi` subprocess with a delegated system prompt and
62
62
 
63
63
  To enable project-local agents, pass `agentScope: "both"` (or `"project"`). Only do this for repositories you trust.
64
64
 
65
- When running interactively, the tool prompts for confirmation before running project-local agents. Set `confirmProjectAgents: false` to disable.
65
+ When running interactively, the tool prompts for confirmation before running project-local agents in untrusted projects. Trusted projects skip the additional prompt. Set `confirmProjectAgents: false` to disable confirmation.
66
66
 
67
67
  ## Usage
68
68
 
@@ -137,6 +137,8 @@ model: claude-haiku-4-5
137
137
  System prompt for the agent goes here.
138
138
  ```
139
139
 
140
+ When `model` is omitted, the subagent inherits the dispatching session's active model and thinking level.
141
+
140
142
  **Locations:**
141
143
  - `~/.pi/agent/agents/*.md` - User-level (always loaded)
142
144
  - `.pi/agents/*.md` - Project-level (only with `agentScope: "project"` or `"both"`)
@@ -23,6 +23,42 @@ export interface AgentDiscoveryResult {
23
23
  projectAgentsDir: string | null;
24
24
  }
25
25
 
26
+ /**
27
+ * Raw agent frontmatter. Values are `unknown` because `parseFrontmatter` runs a
28
+ * real YAML parser, so any scalar or collection can appear here.
29
+ *
30
+ * A type alias rather than an interface: `parseFrontmatter` constrains its
31
+ * parameter to `Record<string, unknown>`, and only an alias picks up the
32
+ * implicit index signature that satisfies it.
33
+ */
34
+ type AgentFrontmatter = {
35
+ name?: unknown;
36
+ description?: unknown;
37
+ tools?: unknown;
38
+ model?: unknown;
39
+ };
40
+
41
+ /**
42
+ * Normalize a frontmatter `tools` value to a list of tool names.
43
+ *
44
+ * Both spellings are valid YAML and both are in use:
45
+ *
46
+ * tools: read, bash # string
47
+ * tools: [read, bash] # array
48
+ *
49
+ * so accept either. Anything else (a number, a map, a nested list) yields no
50
+ * tools rather than throwing: this runs inside agent discovery, where a single
51
+ * bad file must not take down every other agent in the same directory.
52
+ */
53
+ function parseToolList(value: unknown): string[] | undefined {
54
+ const raw = Array.isArray(value) ? value : typeof value === "string" ? value.split(",") : [];
55
+ const tools = raw
56
+ .filter((t): t is string => typeof t === "string")
57
+ .map((t) => t.trim())
58
+ .filter(Boolean);
59
+ return tools.length > 0 ? tools : undefined;
60
+ }
61
+
26
62
  function loadAgentsFromDir(dir: string, source: "user" | "project"): AgentConfig[] {
27
63
  const agents: AgentConfig[] = [];
28
64
 
@@ -49,22 +85,17 @@ function loadAgentsFromDir(dir: string, source: "user" | "project"): AgentConfig
49
85
  continue;
50
86
  }
51
87
 
52
- const { frontmatter, body } = parseFrontmatter<Record<string, string>>(content);
88
+ const { frontmatter, body } = parseFrontmatter<AgentFrontmatter>(content);
53
89
 
54
- if (!frontmatter.name || !frontmatter.description) {
90
+ if (typeof frontmatter.name !== "string" || typeof frontmatter.description !== "string") {
55
91
  continue;
56
92
  }
57
93
 
58
- const tools = frontmatter.tools
59
- ?.split(",")
60
- .map((t: string) => t.trim())
61
- .filter(Boolean);
62
-
63
94
  agents.push({
64
95
  name: frontmatter.name,
65
96
  description: frontmatter.description,
66
- tools: tools && tools.length > 0 ? tools : undefined,
67
- model: frontmatter.model,
97
+ tools: parseToolList(frontmatter.tools),
98
+ model: typeof frontmatter.model === "string" ? frontmatter.model : undefined,
68
99
  systemPrompt: body,
69
100
  source,
70
101
  filePath,
@@ -16,7 +16,7 @@ import { spawn } from "node:child_process";
16
16
  import * as fs from "node:fs";
17
17
  import * as os from "node:os";
18
18
  import * as path from "node:path";
19
- import type { AgentToolResult } from "@earendil-works/pi-agent-core";
19
+ import type { AgentToolResult, ThinkingLevel } from "@earendil-works/pi-agent-core";
20
20
  import type { Message } from "@earendil-works/pi-ai";
21
21
  import { StringEnum } from "@earendil-works/pi-ai";
22
22
  import {
@@ -264,8 +264,14 @@ function getPiInvocation(args: string[]): { command: string; args: string[] } {
264
264
 
265
265
  type OnUpdateCallback = (partial: AgentToolResult<SubagentDetails>) => void;
266
266
 
267
+ interface DispatchDefaults {
268
+ model?: string;
269
+ thinkingLevel?: ThinkingLevel;
270
+ }
271
+
267
272
  async function runSingleAgent(
268
273
  defaultCwd: string,
274
+ dispatchDefaults: DispatchDefaults,
269
275
  agents: AgentConfig[],
270
276
  agentName: string,
271
277
  task: string,
@@ -292,7 +298,12 @@ async function runSingleAgent(
292
298
  }
293
299
 
294
300
  const args: string[] = ["--mode", "json", "-p", "--no-session"];
295
- if (agent.model) args.push("--model", agent.model);
301
+ const inheritsDispatchConfig = !agent.model;
302
+ const model = agent.model ?? dispatchDefaults.model;
303
+ if (model) args.push("--model", model);
304
+ if (inheritsDispatchConfig && dispatchDefaults.thinkingLevel) {
305
+ args.push("--thinking", dispatchDefaults.thinkingLevel);
306
+ }
296
307
  if (agent.tools && agent.tools.length > 0) args.push("--tools", agent.tools.join(","));
297
308
 
298
309
  let tmpPromptDir: string | null = null;
@@ -306,7 +317,7 @@ async function runSingleAgent(
306
317
  messages: [],
307
318
  stderr: "",
308
319
  usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },
309
- model: agent.model,
320
+ model,
310
321
  step,
311
322
  };
312
323
 
@@ -471,6 +482,10 @@ export default function (pi: ExtensionAPI) {
471
482
 
472
483
  async execute(_toolCallId, params, signal, onUpdate, ctx) {
473
484
  const agentScope: AgentScope = params.agentScope ?? "user";
485
+ const dispatchDefaults: DispatchDefaults = {
486
+ model: ctx.model ? `${ctx.model.provider}/${ctx.model.id}` : undefined,
487
+ thinkingLevel: ctx.thinkingLevel,
488
+ };
474
489
  const discovery = discoverAgents(ctx.cwd, agentScope);
475
490
  const agents = discovery.agents;
476
491
  const confirmProjectAgents = params.confirmProjectAgents ?? true;
@@ -502,7 +517,12 @@ export default function (pi: ExtensionAPI) {
502
517
  };
503
518
  }
504
519
 
505
- if ((agentScope === "project" || agentScope === "both") && confirmProjectAgents && ctx.hasUI) {
520
+ if (
521
+ (agentScope === "project" || agentScope === "both") &&
522
+ confirmProjectAgents &&
523
+ ctx.hasUI &&
524
+ !ctx.isProjectTrusted()
525
+ ) {
506
526
  const requestedAgentNames = new Set<string>();
507
527
  if (params.chain) for (const step of params.chain) requestedAgentNames.add(step.agent);
508
528
  if (params.tasks) for (const t of params.tasks) requestedAgentNames.add(t.agent);
@@ -552,6 +572,7 @@ export default function (pi: ExtensionAPI) {
552
572
 
553
573
  const result = await runSingleAgent(
554
574
  ctx.cwd,
575
+ dispatchDefaults,
555
576
  agents,
556
577
  step.agent,
557
578
  taskWithContext,
@@ -624,6 +645,7 @@ export default function (pi: ExtensionAPI) {
624
645
  const results = await mapWithConcurrencyLimit(params.tasks, MAX_CONCURRENCY, async (t, index) => {
625
646
  const result = await runSingleAgent(
626
647
  ctx.cwd,
648
+ dispatchDefaults,
627
649
  agents,
628
650
  t.agent,
629
651
  t.task,
@@ -666,6 +688,7 @@ export default function (pi: ExtensionAPI) {
666
688
  if (params.agent && params.task) {
667
689
  const result = await runSingleAgent(
668
690
  ctx.cwd,
691
+ dispatchDefaults,
669
692
  agents,
670
693
  params.agent,
671
694
  params.task,
@@ -48,7 +48,7 @@ export default function (pi: ExtensionAPI) {
48
48
  startAnimation(ctx);
49
49
  });
50
50
 
51
- pi.on("agent_end", async (_event, ctx) => {
51
+ pi.on("agent_settled", async (_event, ctx) => {
52
52
  stopAnimation(ctx);
53
53
  });
54
54
 
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
- "version": "0.84.1",
3
+ "version": "0.84.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-with-deps",
9
- "version": "0.84.1",
9
+ "version": "0.84.3",
10
10
  "dependencies": {
11
11
  "ms": "^2.1.3"
12
12
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
3
  "private": true,
4
- "version": "0.84.1",
4
+ "version": "0.84.3",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -576,7 +576,7 @@ async function main() {
576
576
  return;
577
577
  }
578
578
 
579
- if (data.type === "agent_end") {
579
+ if (data.type === "agent_settled") {
580
580
  isStreaming = false;
581
581
  hideLoading();
582
582
  outputLog.append("");
@@ -71,7 +71,7 @@ export default function (pi: ExtensionAPI) {
71
71
  });
72
72
 
73
73
  pi.on("agent_end", async (event) => {
74
- console.log(\`[Extension] Done, \${event.messages.length} messages\`);
74
+ console.log(\`[Extension] Low-level run ended, \${event.messages.length} messages\`);
75
75
  });
76
76
 
77
77
  // Register a custom tool
@@ -132,7 +132,7 @@ session.subscribe((event) => {
132
132
  case "tool_execution_end":
133
133
  console.log(`Result: ${event.result}`);
134
134
  break;
135
- case "agent_end":
135
+ case "agent_settled":
136
136
  console.log("Done");
137
137
  break;
138
138
  }
package/bin/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@earendil-works/pi-coding-agent",
3
- "version": "0.84.1",
3
+ "version": "0.84.3",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "piConfig": {
7
7
  "configDir": ".pi"
8
8
  },
9
9
  "bin": {
10
- "pi": "dist/cli.js"
10
+ "pi": "dist/bundle/cli.js"
11
11
  },
12
12
  "main": "./dist/index.js",
13
13
  "types": "./dist/index.d.ts",
@@ -17,7 +17,7 @@
17
17
  "import": "./dist/index.js"
18
18
  },
19
19
  "./rpc-entry": {
20
- "import": "./dist/rpc-entry.js"
20
+ "import": "./dist/bundle/rpc-entry.js"
21
21
  },
22
22
  "./client": {
23
23
  "types": "./dist/client/index.d.ts",
@@ -34,8 +34,9 @@
34
34
  ],
35
35
  "scripts": {
36
36
  "clean": "shx rm -rf dist",
37
- "build": "tsgo -p tsconfig.build.json && shx chmod +x dist/cli.js dist/rpc-entry.js && npm run copy-assets",
38
- "build:binary": "npm --prefix ../tui run build && npm --prefix ../telemetry run build && npm --prefix ../ai run build && npm --prefix ../agent run build && npm --prefix ../protocol run build && npm --prefix ../client run build && npm run build && bun build --compile ./dist/bun/cli.js ./src/utils/image-resize-worker.ts --outfile dist/pi && npm run copy-binary-assets",
37
+ "build": "npm run build:unbundled && node ../../scripts/build-coding-agent-bundle.mjs",
38
+ "build:unbundled": "tsgo -p tsconfig.build.json && shx chmod +x dist/cli.js dist/rpc-entry.js && npm run copy-assets",
39
+ "build:binary": "npm --prefix ../tui run build && npm --prefix ../telemetry run build && npm --prefix ../ai run build && npm --prefix ../agent run build && npm --prefix ../protocol run build && npm --prefix ../client run build && npm run build && bun build --compile --no-compile-autoload-bunfig ./src/bun/cli.ts ./src/utils/image-resize-worker.ts --outfile dist/pi && npm run copy-binary-assets",
39
40
  "copy-assets": "shx mkdir -p dist/modes/interactive/theme && shx cp src/modes/interactive/theme/*.json dist/modes/interactive/theme/ && shx mkdir -p dist/modes/interactive/assets && shx cp src/modes/interactive/assets/*.png dist/modes/interactive/assets/ && shx mkdir -p dist/core/export-html/vendor && shx cp src/core/export-html/template.html src/core/export-html/template.css src/core/export-html/template.js dist/core/export-html/ && shx cp src/core/export-html/vendor/*.js dist/core/export-html/vendor/",
40
41
  "copy-binary-assets": "shx cp package.json dist/ && shx cp README.md dist/ && shx cp CHANGELOG.md dist/ && shx mkdir -p dist/theme && shx cp src/modes/interactive/theme/*.json dist/theme/ && shx mkdir -p dist/assets && shx cp src/modes/interactive/assets/*.png dist/assets/ && shx mkdir -p dist/export-html/vendor && shx cp src/core/export-html/template.html dist/export-html/ && shx cp src/core/export-html/vendor/*.js dist/export-html/vendor/ && shx cp -r docs dist/ && shx cp -r examples dist/ && shx cp ../../node_modules/@silvia-odwyer/photon-node/photon_rs_bg.wasm dist/",
41
42
  "test": "vitest --run",
@@ -43,16 +44,15 @@
43
44
  "prepublishOnly": "npm run clean && npm run build && npm run shrinkwrap"
44
45
  },
45
46
  "dependencies": {
46
- "@earendil-works/pi-agent-core": "^0.84.1",
47
- "@earendil-works/pi-ai": "^0.84.1",
48
- "@earendil-works/pi-client": "^0.84.1",
49
- "@earendil-works/pi-protocol": "^0.84.1",
50
- "@earendil-works/pi-tui": "^0.84.1",
47
+ "@earendil-works/pi-agent-core": "^0.84.3",
48
+ "@earendil-works/pi-ai": "^0.84.3",
49
+ "@earendil-works/pi-client": "^0.84.3",
50
+ "@earendil-works/pi-protocol": "^0.84.3",
51
+ "@earendil-works/pi-tui": "^0.84.3",
51
52
  "@silvia-odwyer/photon-node": "0.3.4",
52
53
  "chalk": "5.6.2",
53
54
  "cross-spawn": "7.0.6",
54
55
  "diff": "8.0.4",
55
- "glob": "13.0.6",
56
56
  "grok-mermaid": "0.2.2",
57
57
  "highlight.js": "10.7.3",
58
58
  "hosted-git-info": "9.0.3",
@@ -77,10 +77,8 @@
77
77
  },
78
78
  "devDependencies": {
79
79
  "@types/cross-spawn": "6.0.6",
80
- "@types/diff": "7.0.2",
81
80
  "@types/hosted-git-info": "3.0.5",
82
- "@types/ms": "2.1.0",
83
- "@types/node": "24.12.4",
81
+ "@types/node": "22.19.19",
84
82
  "@types/proper-lockfile": "4.1.4",
85
83
  "@types/semver": "7.7.1",
86
84
  "shx": "0.4.0",
package/bin/pi CHANGED
Binary file
@@ -34,6 +34,8 @@
34
34
 
35
35
  "selectedBg": "selectedBg",
36
36
  "scrollbarThumb": "selectedBg",
37
+ "searchMatchBg": "selectedBg",
38
+ "searchMatchText": "text",
37
39
  "userMessageBg": "userMsgBg",
38
40
  "userMessageText": "text",
39
41
  "customMessageBg": "customMsgBg",
@@ -33,6 +33,8 @@
33
33
 
34
34
  "selectedBg": "selectedBg",
35
35
  "scrollbarThumb": "selectedBg",
36
+ "searchMatchBg": "selectedBg",
37
+ "searchMatchText": "text",
36
38
  "userMessageBg": "userMsgBg",
37
39
  "userMessageText": "text",
38
40
  "customMessageBg": "customMsgBg",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "colors": {
36
36
  "type": "object",
37
- "description": "Theme color definitions (thinkingMax and scrollbarThumb are optional and use compatible fallbacks)",
37
+ "description": "Theme color definitions (thinkingMax, scrollbarThumb, and search highlight colors are optional and use compatible fallbacks)",
38
38
  "required": [
39
39
  "accent",
40
40
  "border",
@@ -141,6 +141,14 @@
141
141
  "$ref": "#/$defs/colorValue",
142
142
  "description": "Fullscreen scrollbar thumb background (falls back to selectedBg when omitted)"
143
143
  },
144
+ "searchMatchBg": {
145
+ "$ref": "#/$defs/colorValue",
146
+ "description": "Transcript search match background and current-match text (falls back to selectedBg when omitted)"
147
+ },
148
+ "searchMatchText": {
149
+ "$ref": "#/$defs/colorValue",
150
+ "description": "Transcript search match text and current-match background (falls back to text when omitted)"
151
+ },
144
152
  "userMessageBg": {
145
153
  "$ref": "#/$defs/colorValue",
146
154
  "description": "User message background"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kingingwang/pi-linux-arm64",
3
- "version": "0.84.1",
3
+ "version": "0.84.3",
4
4
  "description": "Pi standalone binary for linux-arm64 (fork distribution)",
5
5
  "license": "MIT",
6
6
  "os": [
@@ -1,3 +0,0 @@
1
- # `@mariozechner/clipboard-linux-arm64-gnu`
2
-
3
- This is the **aarch64-unknown-linux-gnu** binary for `@mariozechner/clipboard`
@@ -1,25 +0,0 @@
1
- {
2
- "name": "@mariozechner/clipboard-linux-arm64-gnu",
3
- "version": "0.3.9",
4
- "os": [
5
- "linux"
6
- ],
7
- "cpu": [
8
- "arm64"
9
- ],
10
- "main": "clipboard.linux-arm64-gnu.node",
11
- "files": [
12
- "clipboard.linux-arm64-gnu.node"
13
- ],
14
- "license": "MIT",
15
- "engines": {
16
- "node": ">= 10"
17
- },
18
- "libc": [
19
- "glibc"
20
- ],
21
- "repository": {
22
- "type": "git",
23
- "url": "https://github.com/badlogic/clipboard.git"
24
- }
25
- }