@fleetagent/pi-coding-agent 0.0.10 → 0.0.11

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 (87) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/core/agent-session.d.ts +1 -0
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +16 -3
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/bash-executor.d.ts +2 -0
  7. package/dist/core/bash-executor.d.ts.map +1 -1
  8. package/dist/core/bash-executor.js +1 -0
  9. package/dist/core/bash-executor.js.map +1 -1
  10. package/dist/core/extensions/index.d.ts +1 -1
  11. package/dist/core/extensions/index.d.ts.map +1 -1
  12. package/dist/core/extensions/index.js.map +1 -1
  13. package/dist/core/extensions/loader.d.ts.map +1 -1
  14. package/dist/core/extensions/loader.js +86 -0
  15. package/dist/core/extensions/loader.js.map +1 -1
  16. package/dist/core/extensions/runner.d.ts +3 -0
  17. package/dist/core/extensions/runner.d.ts.map +1 -1
  18. package/dist/core/extensions/runner.js +27 -0
  19. package/dist/core/extensions/runner.js.map +1 -1
  20. package/dist/core/extensions/types.d.ts +55 -2
  21. package/dist/core/extensions/types.d.ts.map +1 -1
  22. package/dist/core/extensions/types.js.map +1 -1
  23. package/dist/core/pi-agent.d.ts.map +1 -1
  24. package/dist/core/pi-agent.js +1 -0
  25. package/dist/core/pi-agent.js.map +1 -1
  26. package/dist/core/prompt-templates.d.ts +5 -0
  27. package/dist/core/prompt-templates.d.ts.map +1 -1
  28. package/dist/core/prompt-templates.js +115 -0
  29. package/dist/core/prompt-templates.js.map +1 -1
  30. package/dist/core/resource-loader.d.ts +15 -0
  31. package/dist/core/resource-loader.d.ts.map +1 -1
  32. package/dist/core/resource-loader.js +332 -40
  33. package/dist/core/resource-loader.js.map +1 -1
  34. package/dist/core/rules.d.ts +6 -0
  35. package/dist/core/rules.d.ts.map +1 -1
  36. package/dist/core/rules.js +216 -0
  37. package/dist/core/rules.js.map +1 -1
  38. package/dist/core/skills.d.ts +6 -0
  39. package/dist/core/skills.d.ts.map +1 -1
  40. package/dist/core/skills.js +216 -0
  41. package/dist/core/skills.js.map +1 -1
  42. package/dist/core/source-info.d.ts +2 -0
  43. package/dist/core/source-info.d.ts.map +1 -1
  44. package/dist/core/source-info.js +6 -0
  45. package/dist/core/source-info.js.map +1 -1
  46. package/dist/core/tools/bash.d.ts.map +1 -1
  47. package/dist/core/tools/bash.js +5 -5
  48. package/dist/core/tools/bash.js.map +1 -1
  49. package/dist/core/tools/edit.d.ts.map +1 -1
  50. package/dist/core/tools/edit.js +5 -5
  51. package/dist/core/tools/edit.js.map +1 -1
  52. package/dist/core/tools/find.d.ts.map +1 -1
  53. package/dist/core/tools/find.js +2 -2
  54. package/dist/core/tools/find.js.map +1 -1
  55. package/dist/core/tools/grep.d.ts.map +1 -1
  56. package/dist/core/tools/grep.js +2 -2
  57. package/dist/core/tools/grep.js.map +1 -1
  58. package/dist/core/tools/ls.d.ts.map +1 -1
  59. package/dist/core/tools/ls.js +2 -2
  60. package/dist/core/tools/ls.js.map +1 -1
  61. package/dist/core/tools/read.d.ts.map +1 -1
  62. package/dist/core/tools/read.js +3 -2
  63. package/dist/core/tools/read.js.map +1 -1
  64. package/dist/core/tools/render-utils.d.ts +9 -0
  65. package/dist/core/tools/render-utils.d.ts.map +1 -1
  66. package/dist/core/tools/render-utils.js +14 -0
  67. package/dist/core/tools/render-utils.js.map +1 -1
  68. package/dist/core/tools/write.d.ts.map +1 -1
  69. package/dist/core/tools/write.js +3 -2
  70. package/dist/core/tools/write.js.map +1 -1
  71. package/dist/index.d.ts +1 -1
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js.map +1 -1
  74. package/dist/main.d.ts.map +1 -1
  75. package/dist/main.js +7 -5
  76. package/dist/main.js.map +1 -1
  77. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  78. package/dist/modes/interactive/interactive-mode.js +21 -9
  79. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  80. package/docs/extensions.md +82 -3
  81. package/docs/usage.md +2 -0
  82. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  83. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  84. package/examples/extensions/sandbox/package.json +1 -1
  85. package/examples/extensions/with-deps/package.json +1 -1
  86. package/npm-shrinkwrap.json +12 -12
  87. package/package.json +4 -4
@@ -869,6 +869,53 @@ UI methods for user interaction. See [Custom UI](#custom-ui) for full details.
869
869
 
870
870
  Current working directory.
871
871
 
872
+ ### ctx.toolOperations / ctx.getToolBackendInfo() / ctx.execToolBackend()
873
+
874
+ Backend-aware file and shell operations for extensions. These APIs use the same active backend as Pi's built-in tools: local by default, or SSH/remote when an SSH sandbox is configured.
875
+
876
+ Use these APIs for extension tools and extension-owned automation that reads files, writes files, lists directories, or executes shell commands. This is the only safe way for extension tools to run shell commands because it preserves Pi's active execution boundary. Direct local process APIs (`child_process`, `pi.exec`, shell libraries, etc.) bypass the configured tool backend and will run on the local machine even when Pi tools are remote.
877
+
878
+ ```typescript
879
+ pi.registerTool({
880
+ name: "repo_status",
881
+ label: "Repo status",
882
+ description: "Show git status using the active Pi tool backend",
883
+ parameters: Type.Object({}),
884
+ async execute(_toolCallId, _params, _signal, _onUpdate, ctx) {
885
+ const backend = ctx.getToolBackendInfo();
886
+ const result = await ctx.execToolBackend("git status --short", {
887
+ signal: ctx.signal,
888
+ timeout: 30,
889
+ });
890
+
891
+ return {
892
+ content: [{ type: "text", text: result.output || `(no output from ${backend.type})` }],
893
+ };
894
+ },
895
+ });
896
+ ```
897
+
898
+ `ctx.execToolBackend(command, options)` executes a shell command string through `ctx.toolOperations` and returns `BashResult`:
899
+
900
+ ```typescript
901
+ {
902
+ output: string; // combined stdout/stderr, sanitized and possibly truncated
903
+ exitCode?: number; // undefined when cancelled
904
+ cancelled: boolean;
905
+ truncated: boolean;
906
+ fullOutputPath?: string;
907
+ }
908
+ ```
909
+
910
+ Options:
911
+
912
+ - `cwd` - working directory; defaults to the active backend cwd
913
+ - `signal` - abort signal
914
+ - `timeout` - timeout in seconds
915
+ - `onChunk` - streaming output callback
916
+
917
+ Use `ctx.toolOperations` directly when you need backend-aware file operations such as `readFile`, `writeFile`, `stat`, `readdir`, `glob`, or `grep`.
918
+
872
919
  ### ctx.session
873
920
 
874
921
  Read-only access to active session state. See [Session Format](session-format.md) for the full `Session` API and entry types.
@@ -1408,6 +1455,35 @@ pi.registerCommand("deploy", {
1408
1455
  });
1409
1456
  ```
1410
1457
 
1458
+ ### pi.registerSkill(skill) / pi.registerRule(rule) / pi.registerPrompt(prompt)
1459
+
1460
+ Register local extension-hosted skills, rules, or prompt templates. These stay on the local agent host even when built-in tools use an SSH backend.
1461
+
1462
+ Provide either `filePath` (relative to the extension file directory) or inline `content`. Inline content is available to `/skill:name`, `/rule:name`, and `/prompt-name` expansion.
1463
+
1464
+ ```typescript
1465
+ pi.registerSkill({
1466
+ name: "agent-pod-tools",
1467
+ description: "Use for agent pod maintenance workflows",
1468
+ filePath: "./skills/agent-pod-tools/SKILL.md",
1469
+ });
1470
+
1471
+ pi.registerRule({
1472
+ name: "company-policy",
1473
+ description: "Mandatory policy for release tasks",
1474
+ content: "Only publish after the release checklist is complete.",
1475
+ });
1476
+
1477
+ pi.registerPrompt({
1478
+ name: "release-summary",
1479
+ description: "Draft a release summary",
1480
+ argumentHint: "<version>",
1481
+ content: "Summarize the release changes for $ARGUMENTS.",
1482
+ });
1483
+ ```
1484
+
1485
+ Use `pi.registerPrompts([...])` to register multiple prompt templates at once.
1486
+
1411
1487
  ### pi.getCommands()
1412
1488
 
1413
1489
  Get the slash commands available for invocation via `prompt` in the current session. Includes extension commands, prompt templates, skill commands, and rule commands.
@@ -1477,9 +1553,12 @@ if (pi.getFlag("plan")) {
1477
1553
 
1478
1554
  ### pi.exec(command, args, options?)
1479
1555
 
1480
- Execute a shell command.
1556
+ Execute a local process with argv. This API is local-only and legacy-compatible. It does not use Pi's active tool backend and does not honor SSH/remote sandboxing.
1557
+
1558
+ Do not use `pi.exec` from extension tools or backend-sensitive automation. Use `ctx.execToolBackend()` from handlers/tools that receive `ExtensionContext` so shell commands execute in the same local/remote environment as built-in Pi tools.
1481
1559
 
1482
1560
  ```typescript
1561
+ // Local-only process execution. Avoid for extension tools.
1483
1562
  const result = await pi.exec("git", ["status"], { signal, timeout: 5000 });
1484
1563
  // result.stdout, result.stderr, result.code, result.killed
1485
1564
  ```
@@ -1743,8 +1822,8 @@ pi.registerTool({
1743
1822
  details: { progress: 50 },
1744
1823
  });
1745
1824
 
1746
- // Run commands via pi.exec (captured from extension closure)
1747
- const result = await pi.exec("some-command", [], { signal });
1825
+ // Run commands through the active Pi tool backend (local or SSH/remote)
1826
+ const result = await ctx.execToolBackend("some-command", { signal });
1748
1827
 
1749
1828
  // Return result
1750
1829
  return {
package/docs/usage.md CHANGED
@@ -211,6 +211,8 @@ Combine `--no-*` with explicit flags to load exactly what you need, ignoring set
211
211
  pi --no-extensions -e ./my-extension.ts
212
212
  ```
213
213
 
214
+ With `--ssh`, project instruction resources are loaded from the tool backend cwd: `.pi/skills`, `.pi/rules`, `.pi/prompts`, ancestor `.agents/skills` and `.agents/rules`, and `AGENTS.md`/`CLAUDE.md`. Extension loading, themes, user resources, and package resources remain local.
215
+
214
216
  ### Other Options
215
217
 
216
218
  | Option | Description |
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "0.0.10",
4
+ "version": "0.0.11",
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.0.10",
4
+ "version": "0.0.11",
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-sandbox",
3
3
  "private": true,
4
- "version": "0.0.10",
4
+ "version": "0.0.11",
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-with-deps",
3
3
  "private": true,
4
- "version": "0.0.10",
4
+ "version": "0.0.11",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@fleetagent/pi-coding-agent",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@fleetagent/pi-coding-agent",
9
- "version": "0.0.10",
9
+ "version": "0.0.11",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "@fleetagent/pi-agent-core": "^0.0.10",
13
- "@fleetagent/pi-ai": "^0.0.10",
14
- "@fleetagent/pi-tui": "^0.0.10",
12
+ "@fleetagent/pi-agent-core": "^0.0.11",
13
+ "@fleetagent/pi-ai": "^0.0.11",
14
+ "@fleetagent/pi-tui": "^0.0.11",
15
15
  "@silvia-odwyer/photon-node": "0.3.4",
16
16
  "chalk": "5.6.2",
17
17
  "cross-spawn": "7.0.6",
@@ -473,11 +473,11 @@
473
473
  }
474
474
  },
475
475
  "node_modules/@fleetagent/pi-agent-core": {
476
- "version": "0.0.10",
477
- "resolved": "https://registry.npmjs.org/@fleetagent/pi-agent-core/-/pi-agent-core-0.0.10.tgz",
476
+ "version": "0.0.11",
477
+ "resolved": "https://registry.npmjs.org/@fleetagent/pi-agent-core/-/pi-agent-core-0.0.11.tgz",
478
478
  "license": "MIT",
479
479
  "dependencies": {
480
- "@fleetagent/pi-ai": "^0.0.10",
480
+ "@fleetagent/pi-ai": "^0.0.11",
481
481
  "ignore": "7.0.5",
482
482
  "typebox": "1.1.38",
483
483
  "yaml": "2.9.0"
@@ -487,8 +487,8 @@
487
487
  }
488
488
  },
489
489
  "node_modules/@fleetagent/pi-ai": {
490
- "version": "0.0.10",
491
- "resolved": "https://registry.npmjs.org/@fleetagent/pi-ai/-/pi-ai-0.0.10.tgz",
490
+ "version": "0.0.11",
491
+ "resolved": "https://registry.npmjs.org/@fleetagent/pi-ai/-/pi-ai-0.0.11.tgz",
492
492
  "license": "MIT",
493
493
  "dependencies": {
494
494
  "@anthropic-ai/sdk": "0.91.1",
@@ -510,8 +510,8 @@
510
510
  }
511
511
  },
512
512
  "node_modules/@fleetagent/pi-tui": {
513
- "version": "0.0.10",
514
- "resolved": "https://registry.npmjs.org/@fleetagent/pi-tui/-/pi-tui-0.0.10.tgz",
513
+ "version": "0.0.11",
514
+ "resolved": "https://registry.npmjs.org/@fleetagent/pi-tui/-/pi-tui-0.0.11.tgz",
515
515
  "license": "MIT",
516
516
  "dependencies": {
517
517
  "get-east-asian-width": "1.6.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fleetagent/pi-coding-agent",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -39,9 +39,9 @@
39
39
  "prepublishOnly": "npm run clean && npm run build && npm run shrinkwrap"
40
40
  },
41
41
  "dependencies": {
42
- "@fleetagent/pi-agent-core": "^0.0.10",
43
- "@fleetagent/pi-ai": "^0.0.10",
44
- "@fleetagent/pi-tui": "^0.0.10",
42
+ "@fleetagent/pi-agent-core": "^0.0.11",
43
+ "@fleetagent/pi-ai": "^0.0.11",
44
+ "@fleetagent/pi-tui": "^0.0.11",
45
45
  "@silvia-odwyer/photon-node": "0.3.4",
46
46
  "chalk": "5.6.2",
47
47
  "cross-spawn": "7.0.6",