@selesai/code 0.9.6 → 0.9.9
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 +18 -0
- package/dist/cli/credential-print.js +4 -4
- package/dist/cli.js +0 -0
- package/dist/core/agent-session-runtime.js +1 -4
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.js +26 -0
- package/dist/core/compaction/branch-summarization.js +30 -30
- package/dist/core/compaction/compaction.js +81 -81
- package/dist/core/compaction/utils.js +2 -2
- package/dist/core/export-html/template.css +1066 -1066
- package/dist/core/export-html/template.html +55 -55
- package/dist/core/export-html/template.js +1864 -1864
- package/dist/core/export-html/vendor/highlight.min.js +1212 -1212
- package/dist/core/export-html/vendor/marked.min.js +78 -78
- package/dist/core/handoff.d.ts +11 -0
- package/dist/core/handoff.js +49 -0
- package/dist/core/messages.js +7 -7
- package/dist/extensions/context-compaction-reminder.test.ts +82 -82
- package/dist/extensions/context-compaction-reminder.ts +28 -28
- package/dist/extensions/handoff-new.ts +14 -75
- package/dist/extensions/pi-intercom/LICENSE +21 -21
- package/dist/extensions/pi-intercom/broker/client.test.ts +83 -83
- package/dist/extensions/pi-intercom/broker/extension.test.ts +387 -387
- package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -114
- package/dist/extensions/pi-intercom/broker/paths.test.ts +153 -153
- package/dist/extensions/pi-intercom/broker/paths.ts +134 -134
- package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -34
- package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -21
- package/dist/extensions/pi-intercom/cwd.test.ts +40 -40
- package/dist/extensions/pi-intercom/cwd.ts +31 -31
- package/dist/extensions/pi-intercom/extension-api.ts +44 -44
- package/dist/extensions/pi-intercom/format-context.test.ts +31 -31
- package/dist/extensions/pi-intercom/format-context.ts +32 -32
- package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -66
- package/dist/extensions/pi-intercom/ui/compose.ts +143 -143
- package/dist/extensions/pi-intercom/ui/session-list.ts +166 -166
- package/dist/extensions/pi-powerline-footer/bash-mode/shell-session.ts +286 -286
- package/dist/extensions/pi-powerline-footer/bash-mode/transcript.ts +108 -108
- package/dist/extensions/pi-powerline-footer/separators.ts +57 -57
- package/dist/extensions/pi-powerline-footer/tests/session-usage.test.ts +47 -47
- package/dist/extensions/pi-powerline-footer/tests/tps.test.ts +39 -39
- package/dist/extensions/pi-powerline-footer/theme.example.json +24 -24
- package/dist/extensions/pi-powerline-footer/theme.json +12 -12
- package/dist/extensions/pi-powerline-footer/tps.ts +345 -345
- package/dist/extensions/pi-rewind-hook/README.md +245 -245
- package/dist/extensions/pi-rewind-hook/index.ts +1445 -1445
- package/dist/extensions/pi-rewind-hook/package.json +29 -29
- package/dist/extensions/pi-subagents/install.mjs +0 -0
- package/dist/extensions/pi-web-agent/package.json +31 -31
- package/dist/extensions/pi-web-agent/src/backends/config.ts +205 -205
- package/dist/extensions/pi-web-agent/src/backends/doctor.ts +136 -136
- package/dist/extensions/pi-web-agent/src/backends/factory.ts +152 -152
- package/dist/extensions/pi-web-agent/src/backends/settings-reader.ts +25 -25
- package/dist/extensions/pi-web-agent/src/cache/ttl-cache.ts +28 -28
- package/dist/extensions/pi-web-agent/src/changelog-notice.ts +136 -136
- package/dist/extensions/pi-web-agent/src/commands/web-agent-config.ts +946 -946
- package/dist/extensions/pi-web-agent/src/extension.ts +126 -126
- package/dist/extensions/pi-web-agent/src/extract/readability.ts +118 -118
- package/dist/extensions/pi-web-agent/src/fetch/browser-resolution.ts +199 -199
- package/dist/extensions/pi-web-agent/src/fetch/firecrawl-fetch.ts +100 -100
- package/dist/extensions/pi-web-agent/src/fetch/headless-fetch.ts +117 -117
- package/dist/extensions/pi-web-agent/src/fetch/http-fetch.ts +67 -67
- package/dist/extensions/pi-web-agent/src/orchestration/answer-synthesizer.ts +60 -60
- package/dist/extensions/pi-web-agent/src/orchestration/candidate-selector.ts +50 -50
- package/dist/extensions/pi-web-agent/src/orchestration/direct-url.ts +52 -52
- package/dist/extensions/pi-web-agent/src/orchestration/evidence-quality.ts +105 -105
- package/dist/extensions/pi-web-agent/src/orchestration/evidence-ranker.ts +45 -45
- package/dist/extensions/pi-web-agent/src/orchestration/index.ts +28 -28
- package/dist/extensions/pi-web-agent/src/orchestration/query-planner.ts +47 -47
- package/dist/extensions/pi-web-agent/src/orchestration/research-orchestrator.ts +376 -376
- package/dist/extensions/pi-web-agent/src/orchestration/research-types.ts +64 -64
- package/dist/extensions/pi-web-agent/src/orchestration/research-worker.ts +181 -181
- package/dist/extensions/pi-web-agent/src/orchestration/source-profile.ts +101 -101
- package/dist/extensions/pi-web-agent/src/orchestration/stop-decider.ts +81 -81
- package/dist/extensions/pi-web-agent/src/presentation/config-store.ts +210 -210
- package/dist/extensions/pi-web-agent/src/presentation/config.ts +75 -75
- package/dist/extensions/pi-web-agent/src/presentation/explore-presentation.ts +61 -61
- package/dist/extensions/pi-web-agent/src/presentation/fetch-presentation.ts +54 -54
- package/dist/extensions/pi-web-agent/src/presentation/search-presentation.ts +41 -41
- package/dist/extensions/pi-web-agent/src/presentation/select-view.ts +20 -20
- package/dist/extensions/pi-web-agent/src/presentation/types.ts +63 -63
- package/dist/extensions/pi-web-agent/src/search/brave.ts +114 -114
- package/dist/extensions/pi-web-agent/src/search/duckduckgo.ts +72 -72
- package/dist/extensions/pi-web-agent/src/search/searxng.ts +96 -96
- package/dist/extensions/pi-web-agent/src/tools/web-explore.ts +71 -71
- package/dist/extensions/pi-web-agent/src/tools/web-fetch-headless.ts +31 -31
- package/dist/extensions/pi-web-agent/src/tools/web-fetch.ts +31 -31
- package/dist/extensions/pi-web-agent/src/tools/web-search.ts +157 -157
- package/dist/extensions/pi-web-agent/src/types.ts +88 -88
- package/dist/extensions/ponytail/package.json +8 -8
- package/dist/extensions/question/batch.ts +103 -103
- package/dist/extensions/question/constants.ts +30 -30
- package/dist/extensions/question/helpers.ts +58 -58
- package/dist/extensions/question/navigation.ts +14 -14
- package/dist/extensions/question/package.json +19 -19
- package/dist/extensions/question/schemas.ts +43 -43
- package/dist/extensions/question/selection-mode.ts +46 -46
- package/dist/extensions/question/shortcuts.ts +44 -44
- package/dist/extensions/question/types.ts +132 -132
- package/dist/extensions/test-resolve-hook-impl.mjs +6 -6
- package/dist/extensions/test-resolve-hook.mjs +6 -6
- package/dist/extensions/web-agent-onboarding.ts +222 -222
- package/dist/extensions/workflow/package.json +17 -17
- package/dist/modes/rpc/rpc-mode.js +24 -0
- package/dist/modes/rpc/rpc-types.d.ts +19 -0
- package/dist/package-manager-cli.js +71 -71
- package/dist/rpc-entry.js +0 -0
- package/dist/skills/agent-browser/SKILL.md +52 -52
- package/dist/skills/batch-grill-me/SKILL.md +19 -19
- package/dist/skills/grill-me/SKILL.md +10 -10
- package/dist/skills/handoff/SKILL.md +16 -16
- package/dist/skills/handoff-text/SKILL.md +14 -14
- package/dist/skills/implanger/SKILL.md +69 -69
- package/dist/skills/improve-codebase/REFERENCE.md +78 -78
- package/dist/skills/improve-codebase/SKILL.md +178 -178
- package/dist/skills/planger/SKILL.md +166 -166
- package/dist/skills/ponytail/SKILL.md +116 -116
- package/dist/skills/ponytail-audit/SKILL.md +42 -42
- package/dist/skills/ponytail-debt/SKILL.md +45 -45
- package/dist/skills/ponytail-gain/SKILL.md +51 -51
- package/dist/skills/ponytail-help/SKILL.md +70 -70
- package/dist/skills/ponytail-review/SKILL.md +58 -58
- package/dist/skills/selesai-handoff/SKILL.md +20 -20
- package/dist/skills/workflow-creation/SKILL.md +73 -73
- package/dist/themes/powerline-footer/theme.json +33 -33
- package/docs/compaction.md +396 -396
- package/docs/containerization.md +111 -111
- package/docs/development.md +71 -71
- package/docs/docs.json +164 -164
- package/docs/environment-variables.md +86 -86
- package/docs/index.md +83 -83
- package/docs/json.md +82 -82
- package/docs/models.md +502 -502
- package/docs/packages.md +227 -227
- package/docs/plans/subagent-delegation/phase-0-correctness.md +264 -264
- package/docs/plans/subagent-delegation/phase-1-behavioral-contract.md +485 -485
- package/docs/plans/subagent-delegation/phase-2-context-controls.md +281 -281
- package/docs/plans/subagent-delegation/phase-3-advisory-routing.md +361 -361
- package/docs/plans/subagent-delegation/phase-4-optional-enforcement.md +380 -380
- package/docs/prompt-templates.md +95 -95
- package/docs/providers.md +293 -293
- package/docs/sdk.md +1143 -1143
- package/docs/security.md +59 -59
- package/docs/session-format.md +414 -414
- package/docs/sessions.md +145 -145
- package/docs/shared-host-extensions.md +109 -109
- package/docs/shell-aliases.md +13 -13
- package/docs/skills.md +231 -231
- package/docs/terminal-setup.md +142 -142
- package/docs/termux.md +127 -127
- package/docs/themes.md +295 -295
- package/docs/tmux.md +63 -63
- package/docs/tui.md +927 -927
- package/docs/windows.md +17 -17
- package/examples/README.md +25 -25
- package/examples/extensions/README.md +211 -211
- package/examples/extensions/auto-commit-on-exit.ts +49 -49
- package/examples/extensions/bash-spawn-hook.ts +30 -30
- package/examples/extensions/bookmark.ts +50 -50
- package/examples/extensions/border-status-editor.ts +150 -150
- package/examples/extensions/built-in-tool-renderer.ts +249 -249
- package/examples/extensions/claude-rules.ts +86 -86
- package/examples/extensions/commands.ts +72 -72
- package/examples/extensions/confirm-destructive.ts +59 -59
- package/examples/extensions/custom-compaction.ts +130 -130
- package/examples/extensions/custom-footer.ts +64 -64
- package/examples/extensions/custom-header.ts +73 -73
- package/examples/extensions/custom-provider-anthropic/index.ts +610 -610
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -24
- package/examples/extensions/custom-provider-anthropic/package.json +19 -19
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -404
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -16
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -82
- package/examples/extensions/dirty-repo-guard.ts +56 -56
- package/examples/extensions/doom-overlay/README.md +46 -46
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -21
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -152
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -72
- package/examples/extensions/doom-overlay/doom-component.ts +132 -132
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -173
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -104
- package/examples/extensions/doom-overlay/index.ts +74 -74
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -51
- package/examples/extensions/dynamic-resources/SKILL.md +8 -8
- package/examples/extensions/dynamic-resources/dynamic.json +79 -79
- package/examples/extensions/dynamic-resources/dynamic.md +5 -5
- package/examples/extensions/dynamic-resources/index.ts +15 -15
- package/examples/extensions/dynamic-tools.ts +74 -74
- package/examples/extensions/event-bus.ts +43 -43
- package/examples/extensions/file-trigger.ts +41 -41
- package/examples/extensions/git-checkpoint.ts +53 -53
- package/examples/extensions/git-merge-and-resolve.ts +115 -115
- package/examples/extensions/github-issue-autocomplete.ts +185 -185
- package/examples/extensions/gondolin/index.ts +531 -531
- package/examples/extensions/gondolin/package-lock.json +185 -185
- package/examples/extensions/gondolin/package.json +19 -19
- package/examples/extensions/handoff.ts +199 -199
- package/examples/extensions/hello.ts +26 -26
- package/examples/extensions/hidden-thinking-label.ts +53 -53
- package/examples/extensions/inline-bash.ts +94 -94
- package/examples/extensions/input-transform-streaming.ts +39 -39
- package/examples/extensions/input-transform.ts +43 -43
- package/examples/extensions/interactive-shell.ts +196 -196
- package/examples/extensions/mac-system-theme.ts +47 -47
- package/examples/extensions/message-renderer.ts +59 -59
- package/examples/extensions/minimal-mode.ts +426 -426
- package/examples/extensions/modal-editor.ts +85 -85
- package/examples/extensions/model-status.ts +31 -31
- package/examples/extensions/notify.ts +55 -55
- package/examples/extensions/overlay-qa-tests.ts +1450 -1450
- package/examples/extensions/overlay-test.ts +153 -153
- package/examples/extensions/permission-gate.ts +34 -34
- package/examples/extensions/pirate.ts +47 -47
- package/examples/extensions/plan-mode/README.md +66 -66
- package/examples/extensions/plan-mode/index.ts +390 -390
- package/examples/extensions/plan-mode/utils.ts +168 -168
- package/examples/extensions/preset.ts +436 -436
- package/examples/extensions/project-trust.ts +64 -64
- package/examples/extensions/prompt-customizer.ts +97 -97
- package/examples/extensions/protected-paths.ts +30 -30
- package/examples/extensions/provider-payload.ts +18 -18
- package/examples/extensions/qna.ts +122 -122
- package/examples/extensions/question.ts +285 -285
- package/examples/extensions/questionnaire.ts +448 -448
- package/examples/extensions/rainbow-editor.ts +88 -88
- package/examples/extensions/reload-runtime.ts +37 -37
- package/examples/extensions/rpc-demo.ts +118 -118
- package/examples/extensions/sandbox/index.ts +321 -321
- package/examples/extensions/sandbox/package-lock.json +92 -92
- package/examples/extensions/sandbox/package.json +19 -19
- package/examples/extensions/send-user-message.ts +97 -97
- package/examples/extensions/session-name.ts +27 -27
- package/examples/extensions/shutdown-command.ts +63 -63
- package/examples/extensions/snake.ts +343 -343
- package/examples/extensions/space-invaders.ts +560 -560
- package/examples/extensions/ssh.ts +220 -220
- package/examples/extensions/status-line.ts +32 -32
- package/examples/extensions/structured-output.ts +65 -65
- package/examples/extensions/subagent/README.md +175 -175
- package/examples/extensions/subagent/agents/planner.md +37 -37
- package/examples/extensions/subagent/agents/reviewer.md +35 -35
- package/examples/extensions/subagent/agents/scout.md +50 -50
- package/examples/extensions/subagent/agents/worker.md +24 -24
- package/examples/extensions/subagent/agents.ts +126 -126
- package/examples/extensions/subagent/index.ts +1015 -1015
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -10
- package/examples/extensions/subagent/prompts/implement.md +10 -10
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -9
- package/examples/extensions/summarize.ts +209 -209
- package/examples/extensions/system-prompt-header.ts +17 -17
- package/examples/extensions/tic-tac-toe.ts +1008 -1008
- package/examples/extensions/timed-confirm.ts +70 -70
- package/examples/extensions/titlebar-spinner.ts +58 -58
- package/examples/extensions/todo.ts +297 -297
- package/examples/extensions/tool-override.ts +144 -144
- package/examples/extensions/tools.ts +146 -146
- package/examples/extensions/trigger-compact.ts +50 -50
- package/examples/extensions/truncated-tool.ts +195 -195
- package/examples/extensions/widget-placement.ts +9 -9
- package/examples/extensions/with-deps/index.ts +32 -32
- package/examples/extensions/with-deps/package-lock.json +31 -31
- package/examples/extensions/with-deps/package.json +22 -22
- package/examples/extensions/working-indicator.ts +123 -123
- package/examples/extensions/working-message-test.ts +25 -25
- package/examples/rpc-extension-ui.ts +632 -632
- package/examples/sdk/01-minimal.ts +26 -26
- package/examples/sdk/02-custom-model.ts +53 -53
- package/examples/sdk/03-custom-prompt.ts +75 -75
- package/examples/sdk/04-skills.ts +55 -55
- package/examples/sdk/05-tools.ts +48 -48
- package/examples/sdk/06-extensions.ts +99 -99
- package/examples/sdk/07-context-files.ts +47 -47
- package/examples/sdk/08-prompt-templates.ts +51 -51
- package/examples/sdk/09-api-keys-and-oauth.ts +52 -52
- package/examples/sdk/10-settings.ts +53 -53
- package/examples/sdk/11-sessions.ts +52 -52
- package/examples/sdk/12-full-control.ts +79 -79
- package/examples/sdk/13-session-runtime.ts +67 -67
- package/examples/sdk/README.md +144 -144
- package/package.json +1 -1
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Management
|
|
3
|
-
*
|
|
4
|
-
* Control session persistence: in-memory, new file, continue, or open specific.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { createAgentSession, SessionManager } from "@earendil-works/pi-coding-agent";
|
|
8
|
-
|
|
9
|
-
// In-memory (no persistence)
|
|
10
|
-
const { session: inMemory } = await createAgentSession({
|
|
11
|
-
sessionManager: SessionManager.inMemory(),
|
|
12
|
-
});
|
|
13
|
-
console.log("In-memory session:", inMemory.sessionFile ?? "(none)");
|
|
14
|
-
inMemory.dispose();
|
|
15
|
-
|
|
16
|
-
// New persistent session
|
|
17
|
-
const { session: newSession } = await createAgentSession({
|
|
18
|
-
sessionManager: SessionManager.create(process.cwd()),
|
|
19
|
-
});
|
|
20
|
-
console.log("New session file:", newSession.sessionFile);
|
|
21
|
-
newSession.dispose();
|
|
22
|
-
|
|
23
|
-
// Continue most recent session (or create new if none)
|
|
24
|
-
const { session: continued, modelFallbackMessage } = await createAgentSession({
|
|
25
|
-
sessionManager: SessionManager.continueRecent(process.cwd()),
|
|
26
|
-
});
|
|
27
|
-
if (modelFallbackMessage) console.log("Note:", modelFallbackMessage);
|
|
28
|
-
console.log("Continued session:", continued.sessionFile);
|
|
29
|
-
continued.dispose();
|
|
30
|
-
|
|
31
|
-
// List and open specific session
|
|
32
|
-
const sessions = await SessionManager.list(process.cwd());
|
|
33
|
-
console.log(`\nFound ${sessions.length} sessions:`);
|
|
34
|
-
for (const info of sessions.slice(0, 3)) {
|
|
35
|
-
console.log(` ${info.id.slice(0, 8)}... - "${info.firstMessage.slice(0, 30)}..."`);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
if (sessions.length > 0) {
|
|
39
|
-
const { session: opened } = await createAgentSession({
|
|
40
|
-
sessionManager: SessionManager.open(sessions[0].path),
|
|
41
|
-
});
|
|
42
|
-
console.log(`\nOpened: ${opened.sessionId}`);
|
|
43
|
-
opened.dispose();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Custom session directory (no cwd encoding)
|
|
47
|
-
// const customDir = "/path/to/my-sessions";
|
|
48
|
-
// const { session } = await createAgentSession({
|
|
49
|
-
// sessionManager: SessionManager.create(process.cwd(), customDir),
|
|
50
|
-
// });
|
|
51
|
-
// SessionManager.list(process.cwd(), customDir);
|
|
52
|
-
// SessionManager.continueRecent(process.cwd(), customDir);
|
|
1
|
+
/**
|
|
2
|
+
* Session Management
|
|
3
|
+
*
|
|
4
|
+
* Control session persistence: in-memory, new file, continue, or open specific.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createAgentSession, SessionManager } from "@earendil-works/pi-coding-agent";
|
|
8
|
+
|
|
9
|
+
// In-memory (no persistence)
|
|
10
|
+
const { session: inMemory } = await createAgentSession({
|
|
11
|
+
sessionManager: SessionManager.inMemory(),
|
|
12
|
+
});
|
|
13
|
+
console.log("In-memory session:", inMemory.sessionFile ?? "(none)");
|
|
14
|
+
inMemory.dispose();
|
|
15
|
+
|
|
16
|
+
// New persistent session
|
|
17
|
+
const { session: newSession } = await createAgentSession({
|
|
18
|
+
sessionManager: SessionManager.create(process.cwd()),
|
|
19
|
+
});
|
|
20
|
+
console.log("New session file:", newSession.sessionFile);
|
|
21
|
+
newSession.dispose();
|
|
22
|
+
|
|
23
|
+
// Continue most recent session (or create new if none)
|
|
24
|
+
const { session: continued, modelFallbackMessage } = await createAgentSession({
|
|
25
|
+
sessionManager: SessionManager.continueRecent(process.cwd()),
|
|
26
|
+
});
|
|
27
|
+
if (modelFallbackMessage) console.log("Note:", modelFallbackMessage);
|
|
28
|
+
console.log("Continued session:", continued.sessionFile);
|
|
29
|
+
continued.dispose();
|
|
30
|
+
|
|
31
|
+
// List and open specific session
|
|
32
|
+
const sessions = await SessionManager.list(process.cwd());
|
|
33
|
+
console.log(`\nFound ${sessions.length} sessions:`);
|
|
34
|
+
for (const info of sessions.slice(0, 3)) {
|
|
35
|
+
console.log(` ${info.id.slice(0, 8)}... - "${info.firstMessage.slice(0, 30)}..."`);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (sessions.length > 0) {
|
|
39
|
+
const { session: opened } = await createAgentSession({
|
|
40
|
+
sessionManager: SessionManager.open(sessions[0].path),
|
|
41
|
+
});
|
|
42
|
+
console.log(`\nOpened: ${opened.sessionId}`);
|
|
43
|
+
opened.dispose();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Custom session directory (no cwd encoding)
|
|
47
|
+
// const customDir = "/path/to/my-sessions";
|
|
48
|
+
// const { session } = await createAgentSession({
|
|
49
|
+
// sessionManager: SessionManager.create(process.cwd(), customDir),
|
|
50
|
+
// });
|
|
51
|
+
// SessionManager.list(process.cwd(), customDir);
|
|
52
|
+
// SessionManager.continueRecent(process.cwd(), customDir);
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Full Control
|
|
3
|
-
*
|
|
4
|
-
* Replace everything - no discovery, explicit configuration.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { getModel } from "@earendil-works/pi-ai/compat";
|
|
8
|
-
import {
|
|
9
|
-
AuthStorage,
|
|
10
|
-
createAgentSession,
|
|
11
|
-
createExtensionRuntime,
|
|
12
|
-
ModelRegistry,
|
|
13
|
-
type ResourceLoader,
|
|
14
|
-
SessionManager,
|
|
15
|
-
SettingsManager,
|
|
16
|
-
} from "@selesai/code";
|
|
17
|
-
|
|
18
|
-
// Custom auth storage location
|
|
19
|
-
const authStorage = AuthStorage.create("/tmp/my-agent/auth.json");
|
|
20
|
-
|
|
21
|
-
// Runtime API key override (not persisted)
|
|
22
|
-
if (process.env.MY_ANTHROPIC_KEY) {
|
|
23
|
-
authStorage.setRuntimeApiKey("anthropic", process.env.MY_ANTHROPIC_KEY);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// Model registry with no custom models.json
|
|
27
|
-
const modelRegistry = ModelRegistry.inMemory(authStorage);
|
|
28
|
-
|
|
29
|
-
const model = getModel("anthropic", "claude-sonnet-4-20250514");
|
|
30
|
-
if (!model) throw new Error("Model not found");
|
|
31
|
-
|
|
32
|
-
// In-memory settings with overrides
|
|
33
|
-
const settingsManager = SettingsManager.inMemory({
|
|
34
|
-
compaction: { enabled: false },
|
|
35
|
-
retry: { enabled: true, maxRetries: 2 },
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
const cwd = process.cwd();
|
|
39
|
-
|
|
40
|
-
const resourceLoader: ResourceLoader = {
|
|
41
|
-
getExtensions: () => ({ extensions: [], errors: [], runtime: createExtensionRuntime() }),
|
|
42
|
-
getSkills: () => ({ skills: [], diagnostics: [] }),
|
|
43
|
-
getPrompts: () => ({ prompts: [], diagnostics: [] }),
|
|
44
|
-
getThemes: () => ({ themes: [], diagnostics: [] }),
|
|
45
|
-
getAgentsFiles: () => ({ agentsFiles: [] }),
|
|
46
|
-
getSystemPrompt: () => `You are a minimal assistant.
|
|
47
|
-
Available: read, bash. Be concise.`,
|
|
48
|
-
getSystemPromptSource: () => undefined,
|
|
49
|
-
getAppendSystemPrompt: () => [],
|
|
50
|
-
getAppendSystemPromptSources: () => [],
|
|
51
|
-
extendResources: () => {},
|
|
52
|
-
reload: async () => {},
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
const { session } = await createAgentSession({
|
|
56
|
-
cwd,
|
|
57
|
-
agentDir: "/tmp/my-agent",
|
|
58
|
-
model,
|
|
59
|
-
thinkingLevel: "off",
|
|
60
|
-
authStorage,
|
|
61
|
-
modelRegistry,
|
|
62
|
-
resourceLoader,
|
|
63
|
-
tools: ["read", "bash"],
|
|
64
|
-
sessionManager: SessionManager.inMemory(cwd),
|
|
65
|
-
settingsManager,
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
session.subscribe((event) => {
|
|
70
|
-
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
71
|
-
process.stdout.write(event.assistantMessageEvent.delta);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
await session.prompt("List files in the current directory.");
|
|
76
|
-
console.log();
|
|
77
|
-
} finally {
|
|
78
|
-
session.dispose();
|
|
79
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Full Control
|
|
3
|
+
*
|
|
4
|
+
* Replace everything - no discovery, explicit configuration.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { getModel } from "@earendil-works/pi-ai/compat";
|
|
8
|
+
import {
|
|
9
|
+
AuthStorage,
|
|
10
|
+
createAgentSession,
|
|
11
|
+
createExtensionRuntime,
|
|
12
|
+
ModelRegistry,
|
|
13
|
+
type ResourceLoader,
|
|
14
|
+
SessionManager,
|
|
15
|
+
SettingsManager,
|
|
16
|
+
} from "@selesai/code";
|
|
17
|
+
|
|
18
|
+
// Custom auth storage location
|
|
19
|
+
const authStorage = AuthStorage.create("/tmp/my-agent/auth.json");
|
|
20
|
+
|
|
21
|
+
// Runtime API key override (not persisted)
|
|
22
|
+
if (process.env.MY_ANTHROPIC_KEY) {
|
|
23
|
+
authStorage.setRuntimeApiKey("anthropic", process.env.MY_ANTHROPIC_KEY);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Model registry with no custom models.json
|
|
27
|
+
const modelRegistry = ModelRegistry.inMemory(authStorage);
|
|
28
|
+
|
|
29
|
+
const model = getModel("anthropic", "claude-sonnet-4-20250514");
|
|
30
|
+
if (!model) throw new Error("Model not found");
|
|
31
|
+
|
|
32
|
+
// In-memory settings with overrides
|
|
33
|
+
const settingsManager = SettingsManager.inMemory({
|
|
34
|
+
compaction: { enabled: false },
|
|
35
|
+
retry: { enabled: true, maxRetries: 2 },
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const cwd = process.cwd();
|
|
39
|
+
|
|
40
|
+
const resourceLoader: ResourceLoader = {
|
|
41
|
+
getExtensions: () => ({ extensions: [], errors: [], runtime: createExtensionRuntime() }),
|
|
42
|
+
getSkills: () => ({ skills: [], diagnostics: [] }),
|
|
43
|
+
getPrompts: () => ({ prompts: [], diagnostics: [] }),
|
|
44
|
+
getThemes: () => ({ themes: [], diagnostics: [] }),
|
|
45
|
+
getAgentsFiles: () => ({ agentsFiles: [] }),
|
|
46
|
+
getSystemPrompt: () => `You are a minimal assistant.
|
|
47
|
+
Available: read, bash. Be concise.`,
|
|
48
|
+
getSystemPromptSource: () => undefined,
|
|
49
|
+
getAppendSystemPrompt: () => [],
|
|
50
|
+
getAppendSystemPromptSources: () => [],
|
|
51
|
+
extendResources: () => {},
|
|
52
|
+
reload: async () => {},
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const { session } = await createAgentSession({
|
|
56
|
+
cwd,
|
|
57
|
+
agentDir: "/tmp/my-agent",
|
|
58
|
+
model,
|
|
59
|
+
thinkingLevel: "off",
|
|
60
|
+
authStorage,
|
|
61
|
+
modelRegistry,
|
|
62
|
+
resourceLoader,
|
|
63
|
+
tools: ["read", "bash"],
|
|
64
|
+
sessionManager: SessionManager.inMemory(cwd),
|
|
65
|
+
settingsManager,
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
session.subscribe((event) => {
|
|
70
|
+
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
71
|
+
process.stdout.write(event.assistantMessageEvent.delta);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
await session.prompt("List files in the current directory.");
|
|
76
|
+
console.log();
|
|
77
|
+
} finally {
|
|
78
|
+
session.dispose();
|
|
79
|
+
}
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session runtime
|
|
3
|
-
*
|
|
4
|
-
* Use AgentSessionRuntime when you need to replace the active AgentSession,
|
|
5
|
-
* for example for new-session, resume, fork, or import flows.
|
|
6
|
-
*
|
|
7
|
-
* The important pattern is: after the runtime replaces the active session,
|
|
8
|
-
* rebind any session-local subscriptions and extension bindings to `runtime.session`.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import {
|
|
12
|
-
type CreateAgentSessionRuntimeFactory,
|
|
13
|
-
createAgentSessionFromServices,
|
|
14
|
-
createAgentSessionRuntime,
|
|
15
|
-
createAgentSessionServices,
|
|
16
|
-
getAgentDir,
|
|
17
|
-
SessionManager,
|
|
18
|
-
} from "@earendil-works/pi-coding-agent";
|
|
19
|
-
|
|
20
|
-
const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
|
|
21
|
-
const services = await createAgentSessionServices({ cwd });
|
|
22
|
-
return {
|
|
23
|
-
...(await createAgentSessionFromServices({
|
|
24
|
-
services,
|
|
25
|
-
sessionManager,
|
|
26
|
-
sessionStartEvent,
|
|
27
|
-
})),
|
|
28
|
-
services,
|
|
29
|
-
diagnostics: services.diagnostics,
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
const runtime = await createAgentSessionRuntime(createRuntime, {
|
|
33
|
-
cwd: process.cwd(),
|
|
34
|
-
agentDir: getAgentDir(),
|
|
35
|
-
sessionManager: SessionManager.create(process.cwd()),
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
let unsubscribe: (() => void) | undefined;
|
|
39
|
-
|
|
40
|
-
async function bindSession() {
|
|
41
|
-
unsubscribe?.();
|
|
42
|
-
const session = runtime.session;
|
|
43
|
-
await session.bindExtensions({});
|
|
44
|
-
unsubscribe = session.subscribe((event) => {
|
|
45
|
-
if (event.type === "queue_update") {
|
|
46
|
-
console.log("Queued:", event.steering.length + event.followUp.length);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
return session;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
let session = await bindSession();
|
|
53
|
-
const originalSessionFile = session.sessionFile;
|
|
54
|
-
console.log("Initial session:", originalSessionFile);
|
|
55
|
-
|
|
56
|
-
await runtime.newSession();
|
|
57
|
-
session = await bindSession();
|
|
58
|
-
console.log("After newSession():", session.sessionFile);
|
|
59
|
-
|
|
60
|
-
if (originalSessionFile) {
|
|
61
|
-
await runtime.switchSession(originalSessionFile);
|
|
62
|
-
session = await bindSession();
|
|
63
|
-
console.log("After switchSession():", session.sessionFile);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
unsubscribe?.();
|
|
67
|
-
await runtime.dispose();
|
|
1
|
+
/**
|
|
2
|
+
* Session runtime
|
|
3
|
+
*
|
|
4
|
+
* Use AgentSessionRuntime when you need to replace the active AgentSession,
|
|
5
|
+
* for example for new-session, resume, fork, or import flows.
|
|
6
|
+
*
|
|
7
|
+
* The important pattern is: after the runtime replaces the active session,
|
|
8
|
+
* rebind any session-local subscriptions and extension bindings to `runtime.session`.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
type CreateAgentSessionRuntimeFactory,
|
|
13
|
+
createAgentSessionFromServices,
|
|
14
|
+
createAgentSessionRuntime,
|
|
15
|
+
createAgentSessionServices,
|
|
16
|
+
getAgentDir,
|
|
17
|
+
SessionManager,
|
|
18
|
+
} from "@earendil-works/pi-coding-agent";
|
|
19
|
+
|
|
20
|
+
const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
|
|
21
|
+
const services = await createAgentSessionServices({ cwd });
|
|
22
|
+
return {
|
|
23
|
+
...(await createAgentSessionFromServices({
|
|
24
|
+
services,
|
|
25
|
+
sessionManager,
|
|
26
|
+
sessionStartEvent,
|
|
27
|
+
})),
|
|
28
|
+
services,
|
|
29
|
+
diagnostics: services.diagnostics,
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
const runtime = await createAgentSessionRuntime(createRuntime, {
|
|
33
|
+
cwd: process.cwd(),
|
|
34
|
+
agentDir: getAgentDir(),
|
|
35
|
+
sessionManager: SessionManager.create(process.cwd()),
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
let unsubscribe: (() => void) | undefined;
|
|
39
|
+
|
|
40
|
+
async function bindSession() {
|
|
41
|
+
unsubscribe?.();
|
|
42
|
+
const session = runtime.session;
|
|
43
|
+
await session.bindExtensions({});
|
|
44
|
+
unsubscribe = session.subscribe((event) => {
|
|
45
|
+
if (event.type === "queue_update") {
|
|
46
|
+
console.log("Queued:", event.steering.length + event.followUp.length);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
return session;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
let session = await bindSession();
|
|
53
|
+
const originalSessionFile = session.sessionFile;
|
|
54
|
+
console.log("Initial session:", originalSessionFile);
|
|
55
|
+
|
|
56
|
+
await runtime.newSession();
|
|
57
|
+
session = await bindSession();
|
|
58
|
+
console.log("After newSession():", session.sessionFile);
|
|
59
|
+
|
|
60
|
+
if (originalSessionFile) {
|
|
61
|
+
await runtime.switchSession(originalSessionFile);
|
|
62
|
+
session = await bindSession();
|
|
63
|
+
console.log("After switchSession():", session.sessionFile);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
unsubscribe?.();
|
|
67
|
+
await runtime.dispose();
|