@earendil-works/pi-coding-agent 0.74.0 → 0.75.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.
- package/CHANGELOG.md +57 -0
- package/README.md +9 -7
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -16
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +32 -17
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +3 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +25 -15
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +1 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -0
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager.d.ts +5 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +81 -26
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +6 -4
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +1 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +39 -9
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +2 -5
- package/dist/core/skills.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +3 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +2 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +0 -10
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +23 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +2 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +6 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts +5 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +19 -5
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +3 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +2 -1
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +12 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +67 -27
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/dark.json +1 -1
- package/dist/modes/interactive/theme/light.json +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +3 -1
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/utils/ansi.d.ts +2 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +52 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/html.d.ts +7 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +40 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/mime.d.ts +1 -0
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js +59 -16
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/paths.d.ts +2 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +16 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts +12 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/utils/syntax-highlight.js +118 -0
- package/dist/utils/syntax-highlight.js.map +1 -0
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +80 -8
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/custom-provider.md +58 -3
- package/docs/extensions.md +1 -1
- package/docs/index.md +7 -1
- package/docs/models.md +2 -2
- package/docs/packages.md +2 -2
- package/docs/providers.md +2 -0
- package/docs/sdk.md +24 -44
- package/docs/settings.md +1 -3
- package/docs/skills.md +3 -4
- package/docs/termux.md +3 -3
- package/docs/themes.md +2 -2
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/dynamic-resources/dynamic.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/sdk/01-minimal.ts +14 -10
- package/examples/sdk/02-custom-model.ts +12 -8
- package/examples/sdk/03-custom-prompt.ts +24 -16
- package/examples/sdk/04-skills.ts +2 -2
- package/examples/sdk/05-tools.ts +8 -4
- package/examples/sdk/06-extensions.ts +11 -7
- package/examples/sdk/07-context-files.ts +2 -2
- package/examples/sdk/08-prompt-templates.ts +2 -2
- package/examples/sdk/09-api-keys-and-oauth.ts +8 -4
- package/examples/sdk/10-settings.ts +4 -4
- package/examples/sdk/11-sessions.ts +4 -0
- package/examples/sdk/12-full-control.ts +11 -7
- package/examples/sdk/README.md +5 -8
- package/package.json +8 -13
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-custom-provider",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.75.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-custom-provider",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.75.0",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@anthropic-ai/sdk": "^0.52.0"
|
|
12
12
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://raw.githubusercontent.com/earendil-works/pi
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
|
3
3
|
"name": "dynamic-resources",
|
|
4
4
|
"vars": {
|
|
5
5
|
"cyan": "#00d7ff",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-sandbox",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-sandbox",
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.5.0",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@anthropic-ai/sandbox-runtime": "^0.0.26"
|
|
12
12
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-with-deps",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.75.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-with-deps",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.75.0",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"ms": "^2.1.3"
|
|
12
12
|
},
|
|
@@ -9,14 +9,18 @@ import { createAgentSession } from "@earendil-works/pi-coding-agent";
|
|
|
9
9
|
|
|
10
10
|
const { session } = await createAgentSession();
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
12
|
+
try {
|
|
13
|
+
session.subscribe((event) => {
|
|
14
|
+
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
15
|
+
process.stdout.write(event.assistantMessageEvent.delta);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
17
18
|
|
|
18
|
-
await session.prompt("What files are in the current directory?");
|
|
19
|
-
session.state.messages.forEach((msg) => {
|
|
20
|
-
|
|
21
|
-
});
|
|
22
|
-
console.log();
|
|
19
|
+
await session.prompt("What files are in the current directory?");
|
|
20
|
+
session.state.messages.forEach((msg) => {
|
|
21
|
+
console.log(msg);
|
|
22
|
+
});
|
|
23
|
+
console.log();
|
|
24
|
+
} finally {
|
|
25
|
+
session.dispose();
|
|
26
|
+
}
|
|
@@ -38,12 +38,16 @@ if (available.length > 0) {
|
|
|
38
38
|
modelRegistry,
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
try {
|
|
42
|
+
session.subscribe((event) => {
|
|
43
|
+
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
44
|
+
process.stdout.write(event.assistantMessageEvent.delta);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
await session.prompt("Say hello in one sentence.");
|
|
49
|
+
console.log();
|
|
50
|
+
} finally {
|
|
51
|
+
session.dispose();
|
|
52
|
+
}
|
|
49
53
|
}
|
|
@@ -30,15 +30,19 @@ const { session: session1 } = await createAgentSession({
|
|
|
30
30
|
sessionManager: SessionManager.inMemory(),
|
|
31
31
|
});
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
33
|
+
try {
|
|
34
|
+
session1.subscribe((event) => {
|
|
35
|
+
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
36
|
+
process.stdout.write(event.assistantMessageEvent.delta);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
38
39
|
|
|
39
|
-
console.log("=== Replace prompt ===");
|
|
40
|
-
await session1.prompt("What is 2 + 2?");
|
|
41
|
-
console.log("\n");
|
|
40
|
+
console.log("=== Replace prompt ===");
|
|
41
|
+
await session1.prompt("What is 2 + 2?");
|
|
42
|
+
console.log("\n");
|
|
43
|
+
} finally {
|
|
44
|
+
session1.dispose();
|
|
45
|
+
}
|
|
42
46
|
|
|
43
47
|
// Option 2: Append instructions to the default prompt
|
|
44
48
|
const loader2 = new DefaultResourceLoader({
|
|
@@ -56,12 +60,16 @@ const { session: session2 } = await createAgentSession({
|
|
|
56
60
|
sessionManager: SessionManager.inMemory(),
|
|
57
61
|
});
|
|
58
62
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
63
|
+
try {
|
|
64
|
+
session2.subscribe((event) => {
|
|
65
|
+
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
66
|
+
process.stdout.write(event.assistantMessageEvent.delta);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
64
69
|
|
|
65
|
-
console.log("=== Modify prompt ===");
|
|
66
|
-
await session2.prompt("List 3 benefits of TypeScript.");
|
|
67
|
-
console.log();
|
|
70
|
+
console.log("=== Modify prompt ===");
|
|
71
|
+
await session2.prompt("List 3 benefits of TypeScript.");
|
|
72
|
+
console.log();
|
|
73
|
+
} finally {
|
|
74
|
+
session2.dispose();
|
|
75
|
+
}
|
|
@@ -47,9 +47,9 @@ if (diagnostics.length > 0) {
|
|
|
47
47
|
console.log("Warnings:", diagnostics);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
await createAgentSession({
|
|
50
|
+
const { session } = await createAgentSession({
|
|
51
51
|
resourceLoader: loader,
|
|
52
52
|
sessionManager: SessionManager.inMemory(),
|
|
53
53
|
});
|
|
54
|
-
|
|
55
54
|
console.log("Session created with filtered skills");
|
|
55
|
+
session.dispose();
|
package/examples/sdk/05-tools.ts
CHANGED
|
@@ -13,32 +13,36 @@
|
|
|
13
13
|
import { createAgentSession, SessionManager } from "@earendil-works/pi-coding-agent";
|
|
14
14
|
|
|
15
15
|
// Read-only mode (no edit/write)
|
|
16
|
-
await createAgentSession({
|
|
16
|
+
const { session: readOnlySession } = await createAgentSession({
|
|
17
17
|
tools: ["read", "grep", "find", "ls"],
|
|
18
18
|
sessionManager: SessionManager.inMemory(),
|
|
19
19
|
});
|
|
20
20
|
console.log("Read-only session created");
|
|
21
|
+
readOnlySession.dispose();
|
|
21
22
|
|
|
22
23
|
// Custom tool selection
|
|
23
|
-
await createAgentSession({
|
|
24
|
+
const { session: customToolsSession } = await createAgentSession({
|
|
24
25
|
tools: ["read", "bash", "grep"],
|
|
25
26
|
sessionManager: SessionManager.inMemory(),
|
|
26
27
|
});
|
|
27
28
|
console.log("Custom tools session created");
|
|
29
|
+
customToolsSession.dispose();
|
|
28
30
|
|
|
29
31
|
// With custom cwd
|
|
30
32
|
const customCwd = "/path/to/project";
|
|
31
|
-
await createAgentSession({
|
|
33
|
+
const { session: customCwdSession } = await createAgentSession({
|
|
32
34
|
cwd: customCwd,
|
|
33
35
|
tools: ["read", "bash", "edit", "write"],
|
|
34
36
|
sessionManager: SessionManager.inMemory(customCwd),
|
|
35
37
|
});
|
|
36
38
|
console.log("Custom cwd session created");
|
|
39
|
+
customCwdSession.dispose();
|
|
37
40
|
|
|
38
41
|
// Or pick specific tools for custom cwd
|
|
39
|
-
await createAgentSession({
|
|
42
|
+
const { session: specificToolsSession } = await createAgentSession({
|
|
40
43
|
cwd: customCwd,
|
|
41
44
|
tools: ["read", "bash", "grep"],
|
|
42
45
|
sessionManager: SessionManager.inMemory(customCwd),
|
|
43
46
|
});
|
|
44
47
|
console.log("Specific tools with custom cwd session created");
|
|
48
|
+
specificToolsSession.dispose();
|
|
@@ -42,14 +42,18 @@ const { session } = await createAgentSession({
|
|
|
42
42
|
sessionManager: SessionManager.inMemory(),
|
|
43
43
|
});
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
45
|
+
try {
|
|
46
|
+
session.subscribe((event) => {
|
|
47
|
+
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
48
|
+
process.stdout.write(event.assistantMessageEvent.delta);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
50
51
|
|
|
51
|
-
await session.prompt("List files in the current directory.");
|
|
52
|
-
console.log();
|
|
52
|
+
await session.prompt("List files in the current directory.");
|
|
53
|
+
console.log();
|
|
54
|
+
} finally {
|
|
55
|
+
session.dispose();
|
|
56
|
+
}
|
|
53
57
|
|
|
54
58
|
// Example extension file (./my-logging-extension.ts):
|
|
55
59
|
/*
|
|
@@ -39,9 +39,9 @@ for (const file of discovered) {
|
|
|
39
39
|
console.log(` - ${file.path} (${file.content.length} chars)`);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
await createAgentSession({
|
|
42
|
+
const { session } = await createAgentSession({
|
|
43
43
|
resourceLoader: loader,
|
|
44
44
|
sessionManager: SessionManager.inMemory(),
|
|
45
45
|
});
|
|
46
|
-
|
|
47
46
|
console.log(`Session created with ${discovered.length + 1} context files`);
|
|
47
|
+
session.dispose();
|
|
@@ -43,9 +43,9 @@ for (const template of discovered) {
|
|
|
43
43
|
console.log(` /${template.name}: ${template.description}`);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
await createAgentSession({
|
|
46
|
+
const { session } = await createAgentSession({
|
|
47
47
|
resourceLoader: loader,
|
|
48
48
|
sessionManager: SessionManager.inMemory(),
|
|
49
49
|
});
|
|
50
|
-
|
|
51
50
|
console.log(`Session created with ${discovered.length + 1} prompt templates`);
|
|
51
|
+
session.dispose();
|
|
@@ -11,38 +11,42 @@ import { AuthStorage, createAgentSession, ModelRegistry, SessionManager } from "
|
|
|
11
11
|
const authStorage = AuthStorage.create();
|
|
12
12
|
const modelRegistry = ModelRegistry.create(authStorage);
|
|
13
13
|
|
|
14
|
-
await createAgentSession({
|
|
14
|
+
const { session: defaultAuthSession } = await createAgentSession({
|
|
15
15
|
sessionManager: SessionManager.inMemory(),
|
|
16
16
|
authStorage,
|
|
17
17
|
modelRegistry,
|
|
18
18
|
});
|
|
19
19
|
console.log("Session with default auth storage and model registry");
|
|
20
|
+
defaultAuthSession.dispose();
|
|
20
21
|
|
|
21
22
|
// Custom auth storage location
|
|
22
23
|
const customAuthStorage = AuthStorage.create("/tmp/my-app/auth.json");
|
|
23
24
|
const customModelRegistry = ModelRegistry.create(customAuthStorage, "/tmp/my-app/models.json");
|
|
24
25
|
|
|
25
|
-
await createAgentSession({
|
|
26
|
+
const { session: customAuthSession } = await createAgentSession({
|
|
26
27
|
sessionManager: SessionManager.inMemory(),
|
|
27
28
|
authStorage: customAuthStorage,
|
|
28
29
|
modelRegistry: customModelRegistry,
|
|
29
30
|
});
|
|
30
31
|
console.log("Session with custom auth storage location");
|
|
32
|
+
customAuthSession.dispose();
|
|
31
33
|
|
|
32
34
|
// Runtime API key override (not persisted to disk)
|
|
33
35
|
authStorage.setRuntimeApiKey("anthropic", "sk-my-temp-key");
|
|
34
|
-
await createAgentSession({
|
|
36
|
+
const { session: runtimeKeySession } = await createAgentSession({
|
|
35
37
|
sessionManager: SessionManager.inMemory(),
|
|
36
38
|
authStorage,
|
|
37
39
|
modelRegistry,
|
|
38
40
|
});
|
|
39
41
|
console.log("Session with runtime API key override");
|
|
42
|
+
runtimeKeySession.dispose();
|
|
40
43
|
|
|
41
44
|
// No models.json - only built-in models
|
|
42
45
|
const simpleRegistry = ModelRegistry.inMemory(authStorage);
|
|
43
|
-
await createAgentSession({
|
|
46
|
+
const { session: builtInModelsSession } = await createAgentSession({
|
|
44
47
|
sessionManager: SessionManager.inMemory(),
|
|
45
48
|
authStorage,
|
|
46
49
|
modelRegistry: simpleRegistry,
|
|
47
50
|
});
|
|
48
51
|
console.log("Session with only built-in models");
|
|
52
|
+
builtInModelsSession.dispose();
|
|
@@ -19,12 +19,12 @@ settingsManager.applyOverrides({
|
|
|
19
19
|
retry: { enabled: true, maxRetries: 5, baseDelayMs: 1000 },
|
|
20
20
|
});
|
|
21
21
|
|
|
22
|
-
await createAgentSession({
|
|
22
|
+
const { session: customSettingsSession } = await createAgentSession({
|
|
23
23
|
settingsManager,
|
|
24
24
|
sessionManager: SessionManager.inMemory(),
|
|
25
25
|
});
|
|
26
|
-
|
|
27
26
|
console.log("Session created with custom settings");
|
|
27
|
+
customSettingsSession.dispose();
|
|
28
28
|
|
|
29
29
|
// Setters update memory immediately and queue persistence writes.
|
|
30
30
|
// Call flush() when you need a durability boundary.
|
|
@@ -45,9 +45,9 @@ const inMemorySettings = SettingsManager.inMemory({
|
|
|
45
45
|
retry: { enabled: false },
|
|
46
46
|
});
|
|
47
47
|
|
|
48
|
-
await createAgentSession({
|
|
48
|
+
const { session: testSession } = await createAgentSession({
|
|
49
49
|
settingsManager: inMemorySettings,
|
|
50
50
|
sessionManager: SessionManager.inMemory(),
|
|
51
51
|
});
|
|
52
|
-
|
|
53
52
|
console.log("Test session created with in-memory settings");
|
|
53
|
+
testSession.dispose();
|
|
@@ -11,12 +11,14 @@ const { session: inMemory } = await createAgentSession({
|
|
|
11
11
|
sessionManager: SessionManager.inMemory(),
|
|
12
12
|
});
|
|
13
13
|
console.log("In-memory session:", inMemory.sessionFile ?? "(none)");
|
|
14
|
+
inMemory.dispose();
|
|
14
15
|
|
|
15
16
|
// New persistent session
|
|
16
17
|
const { session: newSession } = await createAgentSession({
|
|
17
18
|
sessionManager: SessionManager.create(process.cwd()),
|
|
18
19
|
});
|
|
19
20
|
console.log("New session file:", newSession.sessionFile);
|
|
21
|
+
newSession.dispose();
|
|
20
22
|
|
|
21
23
|
// Continue most recent session (or create new if none)
|
|
22
24
|
const { session: continued, modelFallbackMessage } = await createAgentSession({
|
|
@@ -24,6 +26,7 @@ const { session: continued, modelFallbackMessage } = await createAgentSession({
|
|
|
24
26
|
});
|
|
25
27
|
if (modelFallbackMessage) console.log("Note:", modelFallbackMessage);
|
|
26
28
|
console.log("Continued session:", continued.sessionFile);
|
|
29
|
+
continued.dispose();
|
|
27
30
|
|
|
28
31
|
// List and open specific session
|
|
29
32
|
const sessions = await SessionManager.list(process.cwd());
|
|
@@ -37,6 +40,7 @@ if (sessions.length > 0) {
|
|
|
37
40
|
sessionManager: SessionManager.open(sessions[0].path),
|
|
38
41
|
});
|
|
39
42
|
console.log(`\nOpened: ${opened.sessionId}`);
|
|
43
|
+
opened.dispose();
|
|
40
44
|
}
|
|
41
45
|
|
|
42
46
|
// Custom session directory (no cwd encoding)
|
|
@@ -63,11 +63,15 @@ const { session } = await createAgentSession({
|
|
|
63
63
|
settingsManager,
|
|
64
64
|
});
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
66
|
+
try {
|
|
67
|
+
session.subscribe((event) => {
|
|
68
|
+
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
69
|
+
process.stdout.write(event.assistantMessageEvent.delta);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
71
72
|
|
|
72
|
-
await session.prompt("List files in the current directory.");
|
|
73
|
-
console.log();
|
|
73
|
+
await session.prompt("List files in the current directory.");
|
|
74
|
+
console.log();
|
|
75
|
+
} finally {
|
|
76
|
+
session.dispose();
|
|
77
|
+
}
|
package/examples/sdk/README.md
CHANGED
|
@@ -12,7 +12,7 @@ The runtime example shows how to build a recreate function that closes over proc
|
|
|
12
12
|
| `02-custom-model.ts` | Select model and thinking level |
|
|
13
13
|
| `03-custom-prompt.ts` | Replace or modify system prompt |
|
|
14
14
|
| `04-skills.ts` | Discover, filter, or replace skills |
|
|
15
|
-
| `05-tools.ts` | Built-in
|
|
15
|
+
| `05-tools.ts` | Built-in tool allowlists |
|
|
16
16
|
| `06-extensions.ts` | Logging, blocking, result modification |
|
|
17
17
|
| `07-context-files.ts` | AGENTS.md context files |
|
|
18
18
|
| `08-slash-commands.ts` | File-based slash commands |
|
|
@@ -40,9 +40,6 @@ import {
|
|
|
40
40
|
ModelRegistry,
|
|
41
41
|
SessionManager,
|
|
42
42
|
SettingsManager,
|
|
43
|
-
codingTools,
|
|
44
|
-
readOnlyTools,
|
|
45
|
-
readTool, bashTool, editTool, writeTool,
|
|
46
43
|
} from "@earendil-works/pi-coding-agent";
|
|
47
44
|
|
|
48
45
|
// Auth and models setup
|
|
@@ -64,7 +61,7 @@ await loader.reload();
|
|
|
64
61
|
const { session } = await createAgentSession({ resourceLoader: loader, authStorage, modelRegistry });
|
|
65
62
|
|
|
66
63
|
// Read-only
|
|
67
|
-
const { session } = await createAgentSession({ tools:
|
|
64
|
+
const { session } = await createAgentSession({ tools: ["read", "grep", "find", "ls"], authStorage, modelRegistry });
|
|
68
65
|
|
|
69
66
|
// In-memory
|
|
70
67
|
const { session } = await createAgentSession({
|
|
@@ -92,8 +89,8 @@ const { session } = await createAgentSession({
|
|
|
92
89
|
authStorage: customAuth,
|
|
93
90
|
modelRegistry: customRegistry,
|
|
94
91
|
resourceLoader,
|
|
95
|
-
tools: [
|
|
96
|
-
customTools: [
|
|
92
|
+
tools: ["read", "bash", "my_tool"],
|
|
93
|
+
customTools: [myTool],
|
|
97
94
|
sessionManager: SessionManager.inMemory(),
|
|
98
95
|
settingsManager: SettingsManager.inMemory(),
|
|
99
96
|
});
|
|
@@ -117,7 +114,7 @@ await session.prompt("Hello");
|
|
|
117
114
|
| `agentDir` | `~/.pi/agent` | Config directory |
|
|
118
115
|
| `model` | From settings/first available | Model to use |
|
|
119
116
|
| `thinkingLevel` | From settings/"off" | off, low, medium, high |
|
|
120
|
-
| `tools` | `
|
|
117
|
+
| `tools` | `["read", "bash", "edit", "write"]` built-ins | Allowlist tool names across built-in, extension, and custom tools |
|
|
121
118
|
| `customTools` | `[]` | Additional tool definitions |
|
|
122
119
|
| `resourceLoader` | DefaultResourceLoader | Resource loader for extensions, skills, prompts, themes |
|
|
123
120
|
| `sessionManager` | `SessionManager.create(cwd)` | Persistence |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@earendil-works/pi-coding-agent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.75.0",
|
|
4
4
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"piConfig": {
|
|
@@ -38,26 +38,21 @@
|
|
|
38
38
|
"prepublishOnly": "npm run clean && npm run build"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@earendil-works/pi-agent-core": "^0.
|
|
42
|
-
"@earendil-works/pi-ai": "^0.
|
|
43
|
-
"@earendil-works/pi-tui": "^0.
|
|
41
|
+
"@earendil-works/pi-agent-core": "^0.75.0",
|
|
42
|
+
"@earendil-works/pi-ai": "^0.75.0",
|
|
43
|
+
"@earendil-works/pi-tui": "^0.75.0",
|
|
44
44
|
"@silvia-odwyer/photon-node": "^0.3.4",
|
|
45
45
|
"chalk": "^5.5.0",
|
|
46
|
-
"cli-highlight": "^2.1.11",
|
|
47
46
|
"diff": "^8.0.2",
|
|
48
|
-
"extract-zip": "^2.0.1",
|
|
49
|
-
"file-type": "^21.1.1",
|
|
50
47
|
"glob": "^13.0.1",
|
|
48
|
+
"highlight.js": "^10.7.3",
|
|
51
49
|
"hosted-git-info": "^9.0.2",
|
|
52
50
|
"ignore": "^7.0.5",
|
|
53
51
|
"jiti": "^2.7.0",
|
|
54
|
-
"marked": "^15.0.12",
|
|
55
52
|
"minimatch": "^10.2.3",
|
|
56
53
|
"proper-lockfile": "^4.1.2",
|
|
57
|
-
"strip-ansi": "^7.1.0",
|
|
58
54
|
"typebox": "^1.1.24",
|
|
59
|
-
"undici": "^
|
|
60
|
-
"uuid": "^14.0.0",
|
|
55
|
+
"undici": "^8.3.0",
|
|
61
56
|
"yaml": "^2.8.2"
|
|
62
57
|
},
|
|
63
58
|
"overrides": {
|
|
@@ -67,7 +62,7 @@
|
|
|
67
62
|
}
|
|
68
63
|
},
|
|
69
64
|
"optionalDependencies": {
|
|
70
|
-
"@mariozechner/clipboard": "^0.3.
|
|
65
|
+
"@mariozechner/clipboard": "^0.3.6"
|
|
71
66
|
},
|
|
72
67
|
"devDependencies": {
|
|
73
68
|
"@types/diff": "^7.0.2",
|
|
@@ -95,6 +90,6 @@
|
|
|
95
90
|
"directory": "packages/coding-agent"
|
|
96
91
|
},
|
|
97
92
|
"engines": {
|
|
98
|
-
"node": ">=
|
|
93
|
+
"node": ">=22.19.0"
|
|
99
94
|
}
|
|
100
95
|
}
|