@apholdings/jensen-code 0.0.1 → 0.0.2
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 +21 -20
- package/README.md +6 -5
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +2 -2
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +2 -2
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +2 -2
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +2 -2
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +2 -2
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/defaults.d.ts +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/export-html/index.d.ts +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +15 -15
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +5 -5
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/keybindings.d.ts +1 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +1 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/messages.d.ts +3 -3
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +2 -2
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -2
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/sdk.d.ts +3 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +2 -2
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +2 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/tools/bash.d.ts +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/write.d.ts +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +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/bordered-loader.d.ts +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +1 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +1 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +1 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/header.d.ts +1 -1
- package/dist/modes/interactive/components/header.d.ts.map +1 -1
- package/dist/modes/interactive/components/header.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +2 -2
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +2 -2
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +2 -2
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +1 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +2 -2
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +1 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/top-bar.d.ts +1 -1
- package/dist/modes/interactive/components/top-bar.d.ts.map +1 -1
- package/dist/modes/interactive/components/top-bar.js +1 -1
- package/dist/modes/interactive/components/top-bar.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +1 -1
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +2 -2
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +1 -1
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +2 -2
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +2 -2
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/image-resize.d.ts +1 -1
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js.map +1 -1
- package/docs/compaction.md +3 -2
- package/docs/custom-provider.md +4 -3
- package/docs/extensions.md +25 -24
- package/docs/packages.md +2 -1
- package/docs/rpc.md +2 -1
- package/docs/sdk.md +25 -24
- package/docs/session.md +2 -1
- package/docs/termux.md +2 -1
- package/docs/tui.md +21 -20
- package/examples/extensions/README.md +3 -2
- package/examples/extensions/antigravity-image-gen.ts +3 -2
- package/examples/extensions/auto-commit-on-exit.ts +2 -1
- package/examples/extensions/bash-spawn-hook.ts +3 -2
- package/examples/extensions/bookmark.ts +2 -1
- package/examples/extensions/built-in-tool-renderer.ts +4 -3
- package/examples/extensions/claude-rules.ts +2 -1
- package/examples/extensions/commands.ts +2 -1
- package/examples/extensions/confirm-destructive.ts +2 -1
- package/examples/extensions/custom-compaction.ts +4 -3
- package/examples/extensions/custom-footer.ts +4 -3
- package/examples/extensions/custom-header.ts +3 -2
- package/examples/extensions/custom-provider-anthropic/index.ts +3 -2
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +3 -2
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
- package/examples/extensions/custom-provider-qwen-cli/index.ts +3 -2
- package/examples/extensions/dirty-repo-guard.ts +2 -1
- package/examples/extensions/doom-overlay/doom-component.ts +2 -2
- package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
- package/examples/extensions/doom-overlay/index.ts +2 -1
- package/examples/extensions/dynamic-resources/index.ts +2 -1
- package/examples/extensions/dynamic-tools.ts +2 -1
- package/examples/extensions/event-bus.ts +2 -1
- package/examples/extensions/file-trigger.ts +2 -1
- package/examples/extensions/git-checkpoint.ts +2 -1
- package/examples/extensions/handoff.ts +4 -3
- package/examples/extensions/hello.ts +3 -2
- package/examples/extensions/inline-bash.ts +2 -1
- package/examples/extensions/input-transform.ts +2 -1
- package/examples/extensions/interactive-shell.ts +2 -1
- package/examples/extensions/mac-system-theme.ts +2 -1
- package/examples/extensions/message-renderer.ts +3 -2
- package/examples/extensions/minimal-mode.ts +4 -3
- package/examples/extensions/modal-editor.ts +3 -2
- package/examples/extensions/model-status.ts +2 -1
- package/examples/extensions/notify.ts +2 -1
- package/examples/extensions/overlay-qa-tests.ts +4 -3
- package/examples/extensions/overlay-test.ts +3 -2
- package/examples/extensions/permission-gate.ts +2 -1
- package/examples/extensions/pirate.ts +2 -1
- package/examples/extensions/plan-mode/index.ts +5 -4
- package/examples/extensions/preset.ts +4 -3
- package/examples/extensions/protected-paths.ts +2 -1
- package/examples/extensions/provider-payload.ts +2 -1
- package/examples/extensions/qna.ts +4 -3
- package/examples/extensions/question.ts +3 -2
- package/examples/extensions/questionnaire.ts +3 -2
- package/examples/extensions/rainbow-editor.ts +2 -1
- package/examples/extensions/reload-runtime.ts +2 -1
- package/examples/extensions/rpc-demo.ts +2 -1
- package/examples/extensions/sandbox/index.ts +3 -2
- package/examples/extensions/send-user-message.ts +2 -1
- package/examples/extensions/session-name.ts +2 -1
- package/examples/extensions/shutdown-command.ts +2 -1
- package/examples/extensions/snake.ts +3 -2
- package/examples/extensions/space-invaders.ts +3 -2
- package/examples/extensions/ssh.ts +3 -2
- package/examples/extensions/status-line.ts +2 -1
- package/examples/extensions/subagent/agents.ts +2 -1
- package/examples/extensions/subagent/index.ts +6 -5
- package/examples/extensions/summarize.ts +5 -4
- package/examples/extensions/system-prompt-header.ts +2 -1
- package/examples/extensions/timed-confirm.ts +2 -1
- package/examples/extensions/titlebar-spinner.ts +2 -1
- package/examples/extensions/todo.ts +4 -3
- package/examples/extensions/tool-override.ts +3 -2
- package/examples/extensions/tools.ts +4 -3
- package/examples/extensions/trigger-compact.ts +2 -1
- package/examples/extensions/truncated-tool.ts +4 -3
- package/examples/extensions/widget-placement.ts +2 -1
- package/examples/extensions/with-deps/index.ts +2 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/01-minimal.ts +2 -1
- package/examples/sdk/02-custom-model.ts +3 -2
- package/examples/sdk/03-custom-prompt.ts +2 -1
- package/examples/sdk/04-skills.ts +2 -1
- package/examples/sdk/05-tools.ts +2 -1
- package/examples/sdk/06-extensions.ts +3 -2
- package/examples/sdk/07-context-files.ts +2 -1
- package/examples/sdk/08-prompt-templates.ts +2 -1
- package/examples/sdk/09-api-keys-and-oauth.ts +2 -1
- package/examples/sdk/10-settings.ts +2 -1
- package/examples/sdk/11-sessions.ts +2 -1
- package/examples/sdk/12-full-control.ts +3 -2
- package/examples/sdk/README.md +3 -2
- package/package.json +7 -4
package/docs/tui.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Extensions and custom tools can render custom TUI components for interactive user interfaces. This page covers the component system and available building blocks.
|
|
6
6
|
|
|
7
|
-
**Source:** [`@
|
|
7
|
+
**Source:** [`@apholdings/jensen-tui`](https://github.com/badlogic/pi-mono/tree/main/packages/tui)
|
|
8
8
|
|
|
9
9
|
## Component Interface
|
|
10
10
|
|
|
@@ -33,7 +33,7 @@ The TUI appends a full SGR reset and OSC 8 reset at the end of each rendered lin
|
|
|
33
33
|
Components that display a text cursor and need IME (Input Method Editor) support should implement the `Focusable` interface:
|
|
34
34
|
|
|
35
35
|
```typescript
|
|
36
|
-
import { CURSOR_MARKER, type Component, type Focusable } from "@
|
|
36
|
+
import { CURSOR_MARKER, type Component, type Focusable } from "@apholdings/jensen-tui";
|
|
37
37
|
|
|
38
38
|
class MyInput implements Component, Focusable {
|
|
39
39
|
focused: boolean = false; // Set by TUI when focus changes
|
|
@@ -59,7 +59,7 @@ This enables IME candidate windows to appear at the correct position for CJK inp
|
|
|
59
59
|
When a container component (dialog, selector, etc.) contains an `Input` or `Editor` child, the container must implement `Focusable` and propagate the focus state to the child. Otherwise, the hardware cursor won't be positioned correctly for IME input.
|
|
60
60
|
|
|
61
61
|
```typescript
|
|
62
|
-
import { Container, type Focusable, Input } from "@
|
|
62
|
+
import { Container, type Focusable, Input } from "@apholdings/jensen-tui";
|
|
63
63
|
|
|
64
64
|
class SearchDialog extends Container implements Focusable {
|
|
65
65
|
private searchInput: Input;
|
|
@@ -179,10 +179,10 @@ See [overlay-qa-tests.ts](../examples/extensions/overlay-qa-tests.ts) for compre
|
|
|
179
179
|
|
|
180
180
|
## Built-in Components
|
|
181
181
|
|
|
182
|
-
Import from `@
|
|
182
|
+
Import from `@apholdings/jensen-tui`:
|
|
183
183
|
|
|
184
184
|
```typescript
|
|
185
|
-
import { Text, Box, Container, Spacer, Markdown } from "@
|
|
185
|
+
import { Text, Box, Container, Spacer, Markdown } from "@apholdings/jensen-tui";
|
|
186
186
|
```
|
|
187
187
|
|
|
188
188
|
### Text
|
|
@@ -264,7 +264,7 @@ const image = new Image(
|
|
|
264
264
|
Use `matchesKey()` for key detection:
|
|
265
265
|
|
|
266
266
|
```typescript
|
|
267
|
-
import { matchesKey, Key } from "@
|
|
267
|
+
import { matchesKey, Key } from "@apholdings/jensen-tui";
|
|
268
268
|
|
|
269
269
|
handleInput(data: string) {
|
|
270
270
|
if (matchesKey(data, Key.up)) {
|
|
@@ -290,7 +290,7 @@ handleInput(data: string) {
|
|
|
290
290
|
**Critical:** Each line from `render()` must not exceed the `width` parameter.
|
|
291
291
|
|
|
292
292
|
```typescript
|
|
293
|
-
import { visibleWidth, truncateToWidth } from "@
|
|
293
|
+
import { visibleWidth, truncateToWidth } from "@apholdings/jensen-tui";
|
|
294
294
|
|
|
295
295
|
render(width: number): string[] {
|
|
296
296
|
// Truncate long lines
|
|
@@ -311,7 +311,7 @@ Example: Interactive selector
|
|
|
311
311
|
import {
|
|
312
312
|
matchesKey, Key,
|
|
313
313
|
truncateToWidth, visibleWidth
|
|
314
|
-
} from "@
|
|
314
|
+
} from "@apholdings/jensen-tui";
|
|
315
315
|
|
|
316
316
|
class MySelector {
|
|
317
317
|
private items: string[];
|
|
@@ -425,8 +425,8 @@ renderResult(result, options, theme) {
|
|
|
425
425
|
**For Markdown**, use `getMarkdownTheme()`:
|
|
426
426
|
|
|
427
427
|
```typescript
|
|
428
|
-
import { getMarkdownTheme } from "@
|
|
429
|
-
import { Markdown } from "@
|
|
428
|
+
import { getMarkdownTheme } from "@apholdings/jensen-code";
|
|
429
|
+
import { Markdown } from "@apholdings/jensen-tui";
|
|
430
430
|
|
|
431
431
|
renderResult(result, options, theme) {
|
|
432
432
|
const mdTheme = getMarkdownTheme();
|
|
@@ -587,12 +587,12 @@ These patterns cover the most common UI needs in extensions. **Copy these patter
|
|
|
587
587
|
|
|
588
588
|
### Pattern 1: Selection Dialog (SelectList)
|
|
589
589
|
|
|
590
|
-
For letting users pick from a list of options. Use `SelectList` from `@
|
|
590
|
+
For letting users pick from a list of options. Use `SelectList` from `@apholdings/jensen-tui` with `DynamicBorder` for framing.
|
|
591
591
|
|
|
592
592
|
```typescript
|
|
593
|
-
import type { ExtensionAPI } from "@
|
|
594
|
-
import { DynamicBorder } from "@
|
|
595
|
-
import { Container, type SelectItem, SelectList, Text } from "@
|
|
593
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
594
|
+
import { DynamicBorder } from "@apholdings/jensen-code";
|
|
595
|
+
import { Container, type SelectItem, SelectList, Text } from "@apholdings/jensen-tui";
|
|
596
596
|
|
|
597
597
|
pi.registerCommand("pick", {
|
|
598
598
|
handler: async (_args, ctx) => {
|
|
@@ -650,7 +650,7 @@ pi.registerCommand("pick", {
|
|
|
650
650
|
For operations that take time and should be cancellable. `BorderedLoader` shows a spinner and handles escape to cancel.
|
|
651
651
|
|
|
652
652
|
```typescript
|
|
653
|
-
import { BorderedLoader } from "@
|
|
653
|
+
import { BorderedLoader } from "@apholdings/jensen-code";
|
|
654
654
|
|
|
655
655
|
pi.registerCommand("fetch", {
|
|
656
656
|
handler: async (_args, ctx) => {
|
|
@@ -679,11 +679,11 @@ pi.registerCommand("fetch", {
|
|
|
679
679
|
|
|
680
680
|
### Pattern 3: Settings/Toggles (SettingsList)
|
|
681
681
|
|
|
682
|
-
For toggling multiple settings. Use `SettingsList` from `@
|
|
682
|
+
For toggling multiple settings. Use `SettingsList` from `@apholdings/jensen-tui` with `getSettingsListTheme()`.
|
|
683
683
|
|
|
684
684
|
```typescript
|
|
685
|
-
import { getSettingsListTheme } from "@
|
|
686
|
-
import { Container, type SettingItem, SettingsList, Text } from "@
|
|
685
|
+
import { getSettingsListTheme } from "@apholdings/jensen-code";
|
|
686
|
+
import { Container, type SettingItem, SettingsList, Text } from "@apholdings/jensen-tui";
|
|
687
687
|
|
|
688
688
|
pi.registerCommand("settings", {
|
|
689
689
|
handler: async (_args, ctx) => {
|
|
@@ -792,8 +792,8 @@ Token stats available via `ctx.sessionManager.getBranch()` and `ctx.model`.
|
|
|
792
792
|
Replace the main input editor with a custom implementation. Useful for modal editing (vim), different keybindings (emacs), or specialized input handling.
|
|
793
793
|
|
|
794
794
|
```typescript
|
|
795
|
-
import { CustomEditor, type ExtensionAPI } from "@
|
|
796
|
-
import { matchesKey, truncateToWidth } from "@
|
|
795
|
+
import { CustomEditor, type ExtensionAPI } from "@apholdings/jensen-code";
|
|
796
|
+
import { matchesKey, truncateToWidth } from "@apholdings/jensen-tui";
|
|
797
797
|
|
|
798
798
|
type Mode = "normal" | "insert";
|
|
799
799
|
|
|
@@ -885,3 +885,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
885
885
|
- **Custom editor**: [examples/extensions/modal-editor.ts](../examples/extensions/modal-editor.ts) - Vim-like modal editing
|
|
886
886
|
- **Snake game**: [examples/extensions/snake.ts](../examples/extensions/snake.ts) - Full game with keyboard input, game loop
|
|
887
887
|
- **Custom tool rendering**: [examples/extensions/todo.ts](../examples/extensions/todo.ts) - renderCall and renderResult
|
|
888
|
+
|
|
@@ -134,7 +134,7 @@ cp permission-gate.ts ~/.pi/agent/extensions/
|
|
|
134
134
|
See [docs/extensions.md](../../docs/extensions.md) for full documentation.
|
|
135
135
|
|
|
136
136
|
```typescript
|
|
137
|
-
import type { ExtensionAPI } from "@
|
|
137
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
138
138
|
import { Type } from "@sinclair/typebox";
|
|
139
139
|
|
|
140
140
|
export default function (pi: ExtensionAPI) {
|
|
@@ -176,7 +176,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
176
176
|
|
|
177
177
|
**Use StringEnum for string parameters** (required for Google API compatibility):
|
|
178
178
|
```typescript
|
|
179
|
-
import { StringEnum } from "@
|
|
179
|
+
import { StringEnum } from "@apholdings/jensen-ai";
|
|
180
180
|
|
|
181
181
|
// Good
|
|
182
182
|
action: StringEnum(["list", "add"] as const)
|
|
@@ -203,3 +203,4 @@ pi.on("session_start", async (_event, ctx) => {
|
|
|
203
203
|
}
|
|
204
204
|
});
|
|
205
205
|
```
|
|
206
|
+
|
|
@@ -30,8 +30,8 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
30
30
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
31
31
|
import { homedir } from "node:os";
|
|
32
32
|
import { join } from "node:path";
|
|
33
|
-
import { StringEnum } from "@
|
|
34
|
-
import type { ExtensionAPI } from "@
|
|
33
|
+
import { StringEnum } from "@apholdings/jensen-ai";
|
|
34
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
35
35
|
import { type Static, Type } from "@sinclair/typebox";
|
|
36
36
|
|
|
37
37
|
const PROVIDER = "google-antigravity";
|
|
@@ -413,3 +413,4 @@ export default function antigravityImageGen(pi: ExtensionAPI) {
|
|
|
413
413
|
},
|
|
414
414
|
});
|
|
415
415
|
}
|
|
416
|
+
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Uses the last assistant message to generate a commit message.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { ExtensionAPI } from "@
|
|
8
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
9
9
|
|
|
10
10
|
export default function (pi: ExtensionAPI) {
|
|
11
11
|
pi.on("session_shutdown", async (_event, ctx) => {
|
|
@@ -47,3 +47,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
|
+
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* pi -e ./bash-spawn-hook.ts
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { ExtensionAPI } from "@
|
|
11
|
-
import { createBashTool } from "@
|
|
10
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
11
|
+
import { createBashTool } from "@apholdings/jensen-code";
|
|
12
12
|
|
|
13
13
|
export default function (pi: ExtensionAPI) {
|
|
14
14
|
const cwd = process.cwd();
|
|
@@ -28,3 +28,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
28
28
|
},
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
|
+
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Usage: /bookmark [label] - bookmark the last assistant message
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { ExtensionAPI } from "@
|
|
10
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
11
11
|
|
|
12
12
|
export default function (pi: ExtensionAPI) {
|
|
13
13
|
pi.registerCommand("bookmark", {
|
|
@@ -48,3 +48,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
48
48
|
},
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
+
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
* pi -e ./built-in-tool-renderer.ts
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
|
-
import type { BashToolDetails, EditToolDetails, ExtensionAPI, ReadToolDetails } from "@
|
|
27
|
-
import { createBashTool, createEditTool, createReadTool, createWriteTool } from "@
|
|
28
|
-
import { Text } from "@
|
|
26
|
+
import type { BashToolDetails, EditToolDetails, ExtensionAPI, ReadToolDetails } from "@apholdings/jensen-code";
|
|
27
|
+
import { createBashTool, createEditTool, createReadTool, createWriteTool } from "@apholdings/jensen-code";
|
|
28
|
+
import { Text } from "@apholdings/jensen-tui";
|
|
29
29
|
|
|
30
30
|
export default function (pi: ExtensionAPI) {
|
|
31
31
|
const cwd = process.cwd();
|
|
@@ -244,3 +244,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
244
244
|
},
|
|
245
245
|
});
|
|
246
246
|
}
|
|
247
|
+
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
import * as fs from "node:fs";
|
|
21
21
|
import * as path from "node:path";
|
|
22
|
-
import type { ExtensionAPI } from "@
|
|
22
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Recursively find all .md files in a directory
|
|
@@ -84,3 +84,4 @@ When working on tasks related to these rules, use the read tool to load the rele
|
|
|
84
84
|
};
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
|
+
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* 3. Use /commands extensions to filter by source
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import type { ExtensionAPI, SlashCommandInfo } from "@
|
|
13
|
+
import type { ExtensionAPI, SlashCommandInfo } from "@apholdings/jensen-code";
|
|
14
14
|
|
|
15
15
|
export default function commandsExtension(pi: ExtensionAPI) {
|
|
16
16
|
pi.registerCommand("commands", {
|
|
@@ -70,3 +70,4 @@ export default function commandsExtension(pi: ExtensionAPI) {
|
|
|
70
70
|
},
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
|
+
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Demonstrates how to cancel session events using the before_* events.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { ExtensionAPI, SessionBeforeSwitchEvent, SessionMessageEntry } from "@
|
|
8
|
+
import type { ExtensionAPI, SessionBeforeSwitchEvent, SessionMessageEntry } from "@apholdings/jensen-code";
|
|
9
9
|
|
|
10
10
|
export default function (pi: ExtensionAPI) {
|
|
11
11
|
pi.on("session_before_switch", async (event: SessionBeforeSwitchEvent, ctx) => {
|
|
@@ -57,3 +57,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
57
57
|
}
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
|
+
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
* pi --extension examples/extensions/custom-compaction.ts
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import { complete } from "@
|
|
17
|
-
import type { ExtensionAPI } from "@
|
|
18
|
-
import { convertToLlm, serializeConversation } from "@
|
|
16
|
+
import { complete } from "@apholdings/jensen-ai";
|
|
17
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
18
|
+
import { convertToLlm, serializeConversation } from "@apholdings/jensen-code";
|
|
19
19
|
|
|
20
20
|
export default function (pi: ExtensionAPI) {
|
|
21
21
|
pi.on("session_before_compact", async (event, ctx) => {
|
|
@@ -112,3 +112,4 @@ ${conversationText}
|
|
|
112
112
|
}
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
|
+
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
* Token stats come from ctx.sessionManager/ctx.model (already accessible).
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import type { AssistantMessage } from "@
|
|
12
|
-
import type { ExtensionAPI } from "@
|
|
13
|
-
import { truncateToWidth, visibleWidth } from "@
|
|
11
|
+
import type { AssistantMessage } from "@apholdings/jensen-ai";
|
|
12
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
13
|
+
import { truncateToWidth, visibleWidth } from "@apholdings/jensen-tui";
|
|
14
14
|
|
|
15
15
|
export default function (pi: ExtensionAPI) {
|
|
16
16
|
let enabled = false;
|
|
@@ -62,3 +62,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
62
62
|
},
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
|
+
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* (logo + keybinding hints) with a custom component showing the pi mascot.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { ExtensionAPI, Theme } from "@
|
|
9
|
-
import { VERSION } from "@
|
|
8
|
+
import type { ExtensionAPI, Theme } from "@apholdings/jensen-code";
|
|
9
|
+
import { VERSION } from "@apholdings/jensen-code";
|
|
10
10
|
|
|
11
11
|
// --- PI MASCOT ---
|
|
12
12
|
// Based on pi_mascot.ts - the pi agent character
|
|
@@ -71,3 +71,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
71
71
|
},
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
|
+
|
|
@@ -42,8 +42,8 @@ import {
|
|
|
42
42
|
type Tool,
|
|
43
43
|
type ToolCall,
|
|
44
44
|
type ToolResultMessage,
|
|
45
|
-
} from "@
|
|
46
|
-
import type { ExtensionAPI } from "@
|
|
45
|
+
} from "@apholdings/jensen-ai";
|
|
46
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
47
47
|
|
|
48
48
|
// =============================================================================
|
|
49
49
|
// OAuth Implementation (copied from packages/ai/src/utils/oauth/anthropic.ts)
|
|
@@ -602,3 +602,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
602
602
|
streamSimple: streamCustomAnthropic,
|
|
603
603
|
});
|
|
604
604
|
}
|
|
605
|
+
|
|
@@ -20,8 +20,8 @@ import {
|
|
|
20
20
|
type SimpleStreamOptions,
|
|
21
21
|
streamSimpleAnthropic,
|
|
22
22
|
streamSimpleOpenAIResponses,
|
|
23
|
-
} from "@
|
|
24
|
-
import type { ExtensionAPI } from "@
|
|
23
|
+
} from "@apholdings/jensen-ai";
|
|
24
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
25
25
|
|
|
26
26
|
// =============================================================================
|
|
27
27
|
// Constants
|
|
@@ -347,3 +347,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
347
347
|
streamSimple: streamGitLabDuo,
|
|
348
348
|
});
|
|
349
349
|
}
|
|
350
|
+
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* npx tsx test.ts claude-sonnet-4-5-20250929 --thinking
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import { type Api, type Context, type Model, registerApiProvider, streamSimple } from "@
|
|
11
|
+
import { type Api, type Context, type Model, registerApiProvider, streamSimple } from "@apholdings/jensen-ai";
|
|
12
12
|
import { readFileSync } from "fs";
|
|
13
13
|
import { homedir } from "os";
|
|
14
14
|
import { join } from "path";
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* # Then /login qwen-cli, or set QWEN_CLI_API_KEY=...
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import type { OAuthCredentials, OAuthLoginCallbacks } from "@
|
|
13
|
-
import type { ExtensionAPI } from "@
|
|
12
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "@apholdings/jensen-ai";
|
|
13
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
14
14
|
|
|
15
15
|
// =============================================================================
|
|
16
16
|
// Constants
|
|
@@ -343,3 +343,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
343
343
|
},
|
|
344
344
|
});
|
|
345
345
|
}
|
|
346
|
+
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Useful to ensure work is committed before switching context.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { ExtensionAPI, ExtensionContext } from "@
|
|
8
|
+
import type { ExtensionAPI, ExtensionContext } from "@apholdings/jensen-code";
|
|
9
9
|
|
|
10
10
|
async function checkDirtyRepo(
|
|
11
11
|
pi: ExtensionAPI,
|
|
@@ -54,3 +54,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
54
54
|
return checkDirtyRepo(pi, ctx, "fork");
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
|
+
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* Height is calculated from width to maintain DOOM's aspect ratio.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { Component } from "@
|
|
9
|
-
import { isKeyRelease, type TUI } from "@
|
|
8
|
+
import type { Component } from "@apholdings/jensen-tui";
|
|
9
|
+
import { isKeyRelease, type TUI } from "@apholdings/jensen-tui";
|
|
10
10
|
import type { DoomEngine } from "./doom-engine.js";
|
|
11
11
|
import { DoomKeys, mapKeyToDoom } from "./doom-keys.js";
|
|
12
12
|
|
|
@@ -34,7 +34,7 @@ export const DoomKeys = {
|
|
|
34
34
|
KEY_RALT: 0x80 + 0x38,
|
|
35
35
|
} as const;
|
|
36
36
|
|
|
37
|
-
import { Key, matchesKey, parseKey } from "@
|
|
37
|
+
import { Key, matchesKey, parseKey } from "@apholdings/jensen-tui";
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* Map terminal key input to DOOM key codes
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* This demonstrates that overlays can handle real-time game rendering at 35 FPS.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import type { ExtensionAPI } from "@
|
|
12
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
13
13
|
import { DoomOverlayComponent } from "./doom-component.js";
|
|
14
14
|
import { DoomEngine } from "./doom-engine.js";
|
|
15
15
|
import { ensureWadFile } from "./wad-finder.js";
|
|
@@ -72,3 +72,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
72
72
|
},
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { dirname, join } from "node:path";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
import type { ExtensionAPI } from "@
|
|
3
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
4
4
|
|
|
5
5
|
const baseDir = dirname(fileURLToPath(import.meta.url));
|
|
6
6
|
|
|
@@ -13,3 +13,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
13
13
|
};
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
+
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - Registers additional tools at runtime via /add-echo-tool <name>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { ExtensionAPI } from "@
|
|
10
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
11
11
|
import { Type } from "@sinclair/typebox";
|
|
12
12
|
|
|
13
13
|
const ECHO_PARAMS = Type.Object({
|
|
@@ -72,3 +72,4 @@ export default function dynamicToolsExtension(pi: ExtensionAPI) {
|
|
|
72
72
|
},
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
|
+
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Usage: /emit [event-name] [data] - emit an event on the bus
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { ExtensionAPI, ExtensionContext } from "@
|
|
10
|
+
import type { ExtensionAPI, ExtensionContext } from "@apholdings/jensen-code";
|
|
11
11
|
|
|
12
12
|
export default function (pi: ExtensionAPI) {
|
|
13
13
|
// Store ctx for use in event handler
|
|
@@ -41,3 +41,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
41
41
|
});
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
|
+
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import * as fs from "node:fs";
|
|
12
|
-
import type { ExtensionAPI } from "@
|
|
12
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
13
13
|
|
|
14
14
|
export default function (pi: ExtensionAPI) {
|
|
15
15
|
pi.on("session_start", async (_event, ctx) => {
|
|
@@ -39,3 +39,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
|
+
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* When forking, offers to restore code to that point in history.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { ExtensionAPI } from "@
|
|
8
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
9
9
|
|
|
10
10
|
export default function (pi: ExtensionAPI) {
|
|
11
11
|
const checkpoints = new Map<string, string>();
|
|
@@ -51,3 +51,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
51
51
|
checkpoints.clear();
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
|
+
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
* The generated prompt appears as a draft in the editor for review/editing.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import { complete, type Message } from "@
|
|
16
|
-
import type { ExtensionAPI, SessionEntry } from "@
|
|
17
|
-
import { BorderedLoader, convertToLlm, serializeConversation } from "@
|
|
15
|
+
import { complete, type Message } from "@apholdings/jensen-ai";
|
|
16
|
+
import type { ExtensionAPI, SessionEntry } from "@apholdings/jensen-code";
|
|
17
|
+
import { BorderedLoader, convertToLlm, serializeConversation } from "@apholdings/jensen-code";
|
|
18
18
|
|
|
19
19
|
const SYSTEM_PROMPT = `You are a context transfer assistant. Given a conversation history and the user's goal for a new thread, generate a focused prompt that:
|
|
20
20
|
|
|
@@ -148,3 +148,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
148
148
|
},
|
|
149
149
|
});
|
|
150
150
|
}
|
|
151
|
+
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Hello Tool - Minimal custom tool example
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { Type } from "@
|
|
6
|
-
import type { ExtensionAPI } from "@
|
|
5
|
+
import { Type } from "@apholdings/jensen-ai";
|
|
6
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
7
7
|
|
|
8
8
|
export default function (pi: ExtensionAPI) {
|
|
9
9
|
pi.registerTool({
|
|
@@ -23,3 +23,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
23
23
|
},
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
+
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* Note: Regular !command syntax (whole-line bash) is preserved and works as before.
|
|
16
16
|
*/
|
|
17
|
-
import type { ExtensionAPI } from "@
|
|
17
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
18
18
|
|
|
19
19
|
export default function (pi: ExtensionAPI) {
|
|
20
20
|
const PATTERN = /!\{([^}]+)\}/g;
|
|
@@ -92,3 +92,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
92
92
|
return { action: "transform", text: result, images: event.images };
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
|
+
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* ping → "pong" (instant, no LLM)
|
|
10
10
|
* time → current time (instant, no LLM)
|
|
11
11
|
*/
|
|
12
|
-
import type { ExtensionAPI } from "@
|
|
12
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
13
13
|
|
|
14
14
|
export default function (pi: ExtensionAPI) {
|
|
15
15
|
pi.on("input", async (event, ctx) => {
|
|
@@ -41,3 +41,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
41
41
|
return { action: "continue" };
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
|
+
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
import { spawnSync } from "node:child_process";
|
|
24
|
-
import type { ExtensionAPI } from "@
|
|
24
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
25
25
|
|
|
26
26
|
// Default interactive commands - editors, pagers, git ops, TUIs
|
|
27
27
|
const DEFAULT_INTERACTIVE_COMMANDS = [
|
|
@@ -194,3 +194,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
194
194
|
};
|
|
195
195
|
});
|
|
196
196
|
}
|
|
197
|
+
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import { exec } from "node:child_process";
|
|
9
9
|
import { promisify } from "node:util";
|
|
10
|
-
import type { ExtensionAPI } from "@
|
|
10
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
11
11
|
|
|
12
12
|
const execAsync = promisify(exec);
|
|
13
13
|
|
|
@@ -45,3 +45,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
45
45
|
}
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
+
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* Usage: /status [message] - sends a status message with custom rendering
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { ExtensionAPI } from "@
|
|
11
|
-
import { Box, Text } from "@
|
|
10
|
+
import type { ExtensionAPI } from "@apholdings/jensen-code";
|
|
11
|
+
import { Box, Text } from "@apholdings/jensen-tui";
|
|
12
12
|
|
|
13
13
|
export default function (pi: ExtensionAPI) {
|
|
14
14
|
// Register custom renderer for "status-update" messages
|
|
@@ -57,3 +57,4 @@ export default function (pi: ExtensionAPI) {
|
|
|
57
57
|
},
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
|
+
|