@rudderhq/agent-runtime-pi-local 0.1.0-canary.0

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 (58) hide show
  1. package/LICENSE +14 -0
  2. package/dist/cli/format-event.d.ts +2 -0
  3. package/dist/cli/format-event.d.ts.map +1 -0
  4. package/dist/cli/format-event.js +99 -0
  5. package/dist/cli/format-event.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +2 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/index.d.ts +8 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +41 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/server/execute.d.ts +3 -0
  15. package/dist/server/execute.d.ts.map +1 -0
  16. package/dist/server/execute.js +548 -0
  17. package/dist/server/execute.js.map +1 -0
  18. package/dist/server/index.d.ts +8 -0
  19. package/dist/server/index.d.ts.map +1 -0
  20. package/dist/server/index.js +51 -0
  21. package/dist/server/index.js.map +1 -0
  22. package/dist/server/models.d.ts +20 -0
  23. package/dist/server/models.d.ts.map +1 -0
  24. package/dist/server/models.js +161 -0
  25. package/dist/server/models.js.map +1 -0
  26. package/dist/server/models.test.d.ts +2 -0
  27. package/dist/server/models.test.d.ts.map +1 -0
  28. package/dist/server/models.test.js +22 -0
  29. package/dist/server/models.test.js.map +1 -0
  30. package/dist/server/parse.d.ts +23 -0
  31. package/dist/server/parse.d.ts.map +1 -0
  32. package/dist/server/parse.js +180 -0
  33. package/dist/server/parse.js.map +1 -0
  34. package/dist/server/parse.test.d.ts +2 -0
  35. package/dist/server/parse.test.d.ts.map +1 -0
  36. package/dist/server/parse.test.js +206 -0
  37. package/dist/server/parse.test.js.map +1 -0
  38. package/dist/server/skills.d.ts +7 -0
  39. package/dist/server/skills.d.ts.map +1 -0
  40. package/dist/server/skills.js +66 -0
  41. package/dist/server/skills.js.map +1 -0
  42. package/dist/server/test.d.ts +3 -0
  43. package/dist/server/test.d.ts.map +1 -0
  44. package/dist/server/test.js +270 -0
  45. package/dist/server/test.js.map +1 -0
  46. package/dist/ui/build-config.d.ts +3 -0
  47. package/dist/ui/build-config.d.ts.map +1 -0
  48. package/dist/ui/build-config.js +82 -0
  49. package/dist/ui/build-config.js.map +1 -0
  50. package/dist/ui/index.d.ts +3 -0
  51. package/dist/ui/index.d.ts.map +1 -0
  52. package/dist/ui/index.js +3 -0
  53. package/dist/ui/index.js.map +1 -0
  54. package/dist/ui/parse-stdout.d.ts +3 -0
  55. package/dist/ui/parse-stdout.d.ts.map +1 -0
  56. package/dist/ui/parse-stdout.js +163 -0
  57. package/dist/ui/parse-stdout.js.map +1 -0
  58. package/package.json +60 -0
package/LICENSE ADDED
@@ -0,0 +1,14 @@
1
+ This package is part of the Rudder project.
2
+
3
+ Rudder began as a fork of an early version of Paperclip.
4
+
5
+ Licensing for this package follows the repository-level transition:
6
+ - new Rudder contributions are made under the Apache License, Version 2.0
7
+ - upstream-derived Paperclip portions preserve the original MIT notice where applicable
8
+
9
+ Canonical project-level license and attribution texts live in the source repository:
10
+ - `LICENSE`
11
+ - `NOTICE`
12
+ - `LICENSES/MIT-PAPERCLIP`
13
+
14
+ Source repository: https://github.com/Undertone0809/rudder
@@ -0,0 +1,2 @@
1
+ export declare function printPiStreamEvent(raw: string, _debug: boolean): void;
2
+ //# sourceMappingURL=format-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-event.d.ts","sourceRoot":"","sources":["../../src/cli/format-event.ts"],"names":[],"mappings":"AA4BA,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CA8ErE"}
@@ -0,0 +1,99 @@
1
+ import pc from "picocolors";
2
+ function safeJsonParse(text) {
3
+ try {
4
+ return JSON.parse(text);
5
+ }
6
+ catch {
7
+ return null;
8
+ }
9
+ }
10
+ function asRecord(value) {
11
+ if (typeof value !== "object" || value === null || Array.isArray(value))
12
+ return null;
13
+ return value;
14
+ }
15
+ function asString(value, fallback = "") {
16
+ return typeof value === "string" ? value : fallback;
17
+ }
18
+ function extractTextContent(content) {
19
+ if (typeof content === "string")
20
+ return content;
21
+ if (!Array.isArray(content))
22
+ return "";
23
+ return content
24
+ .filter((c) => c.type === "text" && c.text)
25
+ .map((c) => c.text)
26
+ .join("");
27
+ }
28
+ export function printPiStreamEvent(raw, _debug) {
29
+ const line = raw.trim();
30
+ if (!line)
31
+ return;
32
+ const parsed = asRecord(safeJsonParse(line));
33
+ if (!parsed) {
34
+ console.log(line);
35
+ return;
36
+ }
37
+ const type = asString(parsed.type);
38
+ if (type === "agent_start") {
39
+ console.log(pc.blue("Pi agent started"));
40
+ return;
41
+ }
42
+ if (type === "agent_end") {
43
+ console.log(pc.blue("Pi agent finished"));
44
+ return;
45
+ }
46
+ if (type === "turn_start") {
47
+ console.log(pc.blue("Turn started"));
48
+ return;
49
+ }
50
+ if (type === "turn_end") {
51
+ const message = asRecord(parsed.message);
52
+ if (message) {
53
+ const content = message.content;
54
+ const text = extractTextContent(content);
55
+ if (text) {
56
+ console.log(pc.green(`assistant: ${text}`));
57
+ }
58
+ }
59
+ return;
60
+ }
61
+ if (type === "message_update") {
62
+ const assistantEvent = asRecord(parsed.assistantMessageEvent);
63
+ if (assistantEvent) {
64
+ const msgType = asString(assistantEvent.type);
65
+ if (msgType === "text_delta") {
66
+ const delta = asString(assistantEvent.delta);
67
+ if (delta) {
68
+ console.log(pc.green(delta));
69
+ }
70
+ }
71
+ }
72
+ return;
73
+ }
74
+ if (type === "tool_execution_start") {
75
+ const toolName = asString(parsed.toolName);
76
+ const args = parsed.args;
77
+ console.log(pc.yellow(`tool_start: ${toolName}`));
78
+ if (args !== undefined) {
79
+ try {
80
+ console.log(pc.gray(JSON.stringify(args, null, 2)));
81
+ }
82
+ catch {
83
+ console.log(pc.gray(String(args)));
84
+ }
85
+ }
86
+ return;
87
+ }
88
+ if (type === "tool_execution_end") {
89
+ const result = parsed.result;
90
+ const isError = parsed.isError === true;
91
+ const output = typeof result === "string" ? result : JSON.stringify(result);
92
+ if (output) {
93
+ console.log((isError ? pc.red : pc.gray)(output));
94
+ }
95
+ return;
96
+ }
97
+ console.log(line);
98
+ }
99
+ //# sourceMappingURL=format-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-event.js","sourceRoot":"","sources":["../../src/cli/format-event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { printPiStreamEvent } from "./format-event.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { printPiStreamEvent } from "./format-event.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const type = "pi_local";
2
+ export declare const label = "Pi (local)";
3
+ export declare const models: Array<{
4
+ id: string;
5
+ label: string;
6
+ }>;
7
+ export declare const agentConfigurationDoc = "# pi_local agent configuration\n\nAdapter: pi_local\n\nUse when:\n- You want Rudder to run Pi (the AI coding agent) locally as the agent runtime\n- You want provider/model routing in Pi format (--provider <name> --model <id>)\n- You want Pi session resume across heartbeats via --session\n- You need Pi's tool set (read, bash, edit, write, grep, find, ls)\n\nDon't use when:\n- You need webhook-style external invocation (use openclaw_gateway or http)\n- You only need one-shot shell commands (use process)\n- Pi CLI is not installed on the machine\n\nCore fields:\n- cwd (string, optional): default absolute working directory fallback for the agent process (created if missing when possible)\n- instructionsFilePath (string, optional): absolute path to a markdown instructions file appended to system prompt via --append-system-prompt\n- promptTemplate (string, optional): user prompt template passed via -p flag\n- model (string, required): Pi model id in provider/model format (for example xai/grok-4)\n- thinking (string, optional): thinking level (off, minimal, low, medium, high, xhigh)\n- command (string, optional): defaults to \"pi\"\n- env (object, optional): KEY=VALUE environment variables\n\nOperational fields:\n- timeoutSec (number, optional): run timeout in seconds\n- graceSec (number, optional): SIGTERM grace period in seconds\n\nNotes:\n- Pi supports multiple providers and models. Use `pi --list-models` to list available options.\n- Rudder requires an explicit `model` value for `pi_local` agents.\n- Sessions are stored in ~/.pi/paperclips/ and resumed with --session.\n- Rudder realizes only the bundled Rudder skills plus the skills explicitly enabled on the agent's Skills page.\n- Selected skills are linked into a Rudder-managed Pi home for the run; unselected skills already present in the real user home do not load.\n- All tools (read, bash, edit, write, grep, find, ls) are enabled by default.\n- Agent instructions are appended to Pi's system prompt via --append-system-prompt, while the user task is sent via -p.\n";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,aAAa,CAAC;AAC/B,eAAO,MAAM,KAAK,eAAe,CAAC;AAElC,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAM,CAAC;AAE/D,eAAO,MAAM,qBAAqB,qgEAoCjC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,41 @@
1
+ export const type = "pi_local";
2
+ export const label = "Pi (local)";
3
+ export const models = [];
4
+ export const agentConfigurationDoc = `# pi_local agent configuration
5
+
6
+ Adapter: pi_local
7
+
8
+ Use when:
9
+ - You want Rudder to run Pi (the AI coding agent) locally as the agent runtime
10
+ - You want provider/model routing in Pi format (--provider <name> --model <id>)
11
+ - You want Pi session resume across heartbeats via --session
12
+ - You need Pi's tool set (read, bash, edit, write, grep, find, ls)
13
+
14
+ Don't use when:
15
+ - You need webhook-style external invocation (use openclaw_gateway or http)
16
+ - You only need one-shot shell commands (use process)
17
+ - Pi CLI is not installed on the machine
18
+
19
+ Core fields:
20
+ - cwd (string, optional): default absolute working directory fallback for the agent process (created if missing when possible)
21
+ - instructionsFilePath (string, optional): absolute path to a markdown instructions file appended to system prompt via --append-system-prompt
22
+ - promptTemplate (string, optional): user prompt template passed via -p flag
23
+ - model (string, required): Pi model id in provider/model format (for example xai/grok-4)
24
+ - thinking (string, optional): thinking level (off, minimal, low, medium, high, xhigh)
25
+ - command (string, optional): defaults to "pi"
26
+ - env (object, optional): KEY=VALUE environment variables
27
+
28
+ Operational fields:
29
+ - timeoutSec (number, optional): run timeout in seconds
30
+ - graceSec (number, optional): SIGTERM grace period in seconds
31
+
32
+ Notes:
33
+ - Pi supports multiple providers and models. Use \`pi --list-models\` to list available options.
34
+ - Rudder requires an explicit \`model\` value for \`pi_local\` agents.
35
+ - Sessions are stored in ~/.pi/paperclips/ and resumed with --session.
36
+ - Rudder realizes only the bundled Rudder skills plus the skills explicitly enabled on the agent's Skills page.
37
+ - Selected skills are linked into a Rudder-managed Pi home for the run; unselected skills already present in the real user home do not load.
38
+ - All tools (read, bash, edit, write, grep, find, ls) are enabled by default.
39
+ - Agent instructions are appended to Pi's system prompt via --append-system-prompt, while the user task is sent via -p.
40
+ `;
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAC/B,MAAM,CAAC,MAAM,KAAK,GAAG,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,MAAM,GAAyC,EAAE,CAAC;AAE/D,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCpC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type AgentRuntimeExecutionContext, type AgentRuntimeExecutionResult } from "@rudderhq/agent-runtime-utils";
2
+ export declare function execute(ctx: AgentRuntimeExecutionContext): Promise<AgentRuntimeExecutionResult>;
3
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/server/execute.ts"],"names":[],"mappings":"AAIA,OAAO,EAA+B,KAAK,4BAA4B,EAAE,KAAK,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AA4MjJ,wBAAsB,OAAO,CAAC,GAAG,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CA8crG"}