iosm-cli 0.1.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 +55 -0
- package/LICENSE +21 -0
- package/README.md +650 -0
- package/dist/cli/args.d.ts +54 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +331 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +79 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +92 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +34 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +88 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +262 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-profiles.d.ts +29 -0
- package/dist/core/agent-profiles.d.ts.map +1 -0
- package/dist/core/agent-profiles.js +86 -0
- package/dist/core/agent-profiles.js.map +1 -0
- package/dist/core/agent-session.d.ts +688 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +3112 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/agent-teams.d.ts +41 -0
- package/dist/core/agent-teams.d.ts.map +1 -0
- package/dist/core/agent-teams.js +90 -0
- package/dist/core/agent-teams.js.map +1 -0
- package/dist/core/ask-user-tool.d.ts +22 -0
- package/dist/core/ask-user-tool.d.ts.map +1 -0
- package/dist/core/ask-user-tool.js +115 -0
- package/dist/core/ask-user-tool.js.map +1 -0
- package/dist/core/auth-storage.d.ts +133 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +391 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +49 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +213 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +86 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +242 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +121 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +610 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +7 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +35 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +138 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +15 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +71 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +249 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +34 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +222 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +971 -0
- package/dist/core/export-html/template.html +54 -0
- package/dist/core/export-html/template.js +1590 -0
- package/dist/core/export-html/tool-renderer.d.ts +35 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +63 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +6 -0
- package/dist/core/extensions/index.d.ts +11 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +25 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +447 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +146 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +652 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1074 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +35 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +27 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +102 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +32 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +134 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/hooks.d.ts +53 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +332 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/keybindings.d.ts +55 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +157 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/mcp/cli.d.ts +27 -0
- package/dist/core/mcp/cli.d.ts.map +1 -0
- package/dist/core/mcp/cli.js +275 -0
- package/dist/core/mcp/cli.js.map +1 -0
- package/dist/core/mcp/config.d.ts +11 -0
- package/dist/core/mcp/config.d.ts.map +1 -0
- package/dist/core/mcp/config.js +310 -0
- package/dist/core/mcp/config.js.map +1 -0
- package/dist/core/mcp/index.d.ts +5 -0
- package/dist/core/mcp/index.d.ts.map +1 -0
- package/dist/core/mcp/index.js +4 -0
- package/dist/core/mcp/index.js.map +1 -0
- package/dist/core/mcp/runtime.d.ts +42 -0
- package/dist/core/mcp/runtime.d.ts.map +1 -0
- package/dist/core/mcp/runtime.js +387 -0
- package/dist/core/mcp/runtime.js.map +1 -0
- package/dist/core/mcp/types.d.ts +76 -0
- package/dist/core/mcp/types.d.ts.map +1 -0
- package/dist/core/mcp/types.js +2 -0
- package/dist/core/mcp/types.js.map +1 -0
- package/dist/core/memory.d.ts +27 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +203 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/messages.d.ts +84 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +141 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-registry.d.ts +115 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +549 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +104 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +448 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/package-manager.d.ts +156 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +1465 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/parallel-task-agent.d.ts +19 -0
- package/dist/core/parallel-task-agent.d.ts.map +1 -0
- package/dist/core/parallel-task-agent.js +482 -0
- package/dist/core/parallel-task-agent.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +50 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +251 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/qwen-cli-provider.d.ts +10 -0
- package/dist/core/qwen-cli-provider.d.ts.map +1 -0
- package/dist/core/qwen-cli-provider.js +271 -0
- package/dist/core/qwen-cli-provider.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +17 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +60 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +195 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +820 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/sdk.d.ts +106 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +460 -0
- package/dist/core/sdk.js.map +1 -0
- package/dist/core/session-manager.d.ts +323 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1094 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +243 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +691 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +58 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +364 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +15 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +64 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/subagent-runs.d.ts +16 -0
- package/dist/core/subagent-runs.d.ts.map +1 -0
- package/dist/core/subagent-runs.js +70 -0
- package/dist/core/subagent-runs.js.map +1 -0
- package/dist/core/subagents.d.ts +45 -0
- package/dist/core/subagents.d.ts.map +1 -0
- package/dist/core/subagents.js +467 -0
- package/dist/core/subagents.js.map +1 -0
- package/dist/core/system-prompt.d.ts +28 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +196 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/task-plan.d.ts +32 -0
- package/dist/core/task-plan.d.ts.map +1 -0
- package/dist/core/task-plan.js +155 -0
- package/dist/core/task-plan.js.map +1 -0
- package/dist/core/timings.d.ts +7 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +26 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +58 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +275 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +63 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +243 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +42 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +158 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/find.d.ts +39 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +219 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +45 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +254 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/ignore-filter.d.ts +5 -0
- package/dist/core/tools/ignore-filter.d.ts.map +1 -0
- package/dist/core/tools/ignore-filter.js +97 -0
- package/dist/core/tools/ignore-filter.js.map +1 -0
- package/dist/core/tools/index.d.ts +97 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +78 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +46 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +136 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +8 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +81 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/permissions.d.ts +8 -0
- package/dist/core/tools/permissions.d.ts.map +1 -0
- package/dist/core/tools/permissions.js +2 -0
- package/dist/core/tools/permissions.js.map +1 -0
- package/dist/core/tools/read.d.ts +39 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +166 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/task.d.ts +109 -0
- package/dist/core/tools/task.d.ts.map +1 -0
- package/dist/core/tools/task.js +1065 -0
- package/dist/core/tools/task.js.map +1 -0
- package/dist/core/tools/todo.d.ts +42 -0
- package/dist/core/tools/todo.d.ts.map +1 -0
- package/dist/core/tools/todo.js +159 -0
- package/dist/core/tools/todo.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +70 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +205 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/write.d.ts +32 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +90 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/iosm/agent-verification.d.ts +16 -0
- package/dist/iosm/agent-verification.d.ts.map +1 -0
- package/dist/iosm/agent-verification.js +138 -0
- package/dist/iosm/agent-verification.js.map +1 -0
- package/dist/iosm/automation.d.ts +40 -0
- package/dist/iosm/automation.d.ts.map +1 -0
- package/dist/iosm/automation.js +76 -0
- package/dist/iosm/automation.js.map +1 -0
- package/dist/iosm/config.d.ts +151 -0
- package/dist/iosm/config.d.ts.map +1 -0
- package/dist/iosm/config.js +323 -0
- package/dist/iosm/config.js.map +1 -0
- package/dist/iosm/context-loader.d.ts +12 -0
- package/dist/iosm/context-loader.d.ts.map +1 -0
- package/dist/iosm/context-loader.js +50 -0
- package/dist/iosm/context-loader.js.map +1 -0
- package/dist/iosm/cycle.d.ts +51 -0
- package/dist/iosm/cycle.d.ts.map +1 -0
- package/dist/iosm/cycle.js +861 -0
- package/dist/iosm/cycle.js.map +1 -0
- package/dist/iosm/guide.d.ts +31 -0
- package/dist/iosm/guide.d.ts.map +1 -0
- package/dist/iosm/guide.js +101 -0
- package/dist/iosm/guide.js.map +1 -0
- package/dist/iosm/index.d.ts +12 -0
- package/dist/iosm/index.d.ts.map +1 -0
- package/dist/iosm/index.js +11 -0
- package/dist/iosm/index.js.map +1 -0
- package/dist/iosm/init.d.ts +58 -0
- package/dist/iosm/init.d.ts.map +1 -0
- package/dist/iosm/init.js +1221 -0
- package/dist/iosm/init.js.map +1 -0
- package/dist/iosm/metrics.d.ts +23 -0
- package/dist/iosm/metrics.d.ts.map +1 -0
- package/dist/iosm/metrics.js +336 -0
- package/dist/iosm/metrics.js.map +1 -0
- package/dist/iosm/paths.d.ts +24 -0
- package/dist/iosm/paths.d.ts.map +1 -0
- package/dist/iosm/paths.js +77 -0
- package/dist/iosm/paths.js.map +1 -0
- package/dist/iosm/runtime-context.d.ts +20 -0
- package/dist/iosm/runtime-context.d.ts.map +1 -0
- package/dist/iosm/runtime-context.js +170 -0
- package/dist/iosm/runtime-context.js.map +1 -0
- package/dist/iosm/types.d.ts +151 -0
- package/dist/iosm/types.d.ts.map +1 -0
- package/dist/iosm/types.js +3 -0
- package/dist/iosm/types.js.map +1 -0
- package/dist/main.d.ts +8 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +1478 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations.d.ts +33 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +261 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/index.d.ts +9 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +8 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/interactive/components/armin.d.ts +34 -0
- package/dist/modes/interactive/components/armin.d.ts.map +1 -0
- package/dist/modes/interactive/components/armin.js +329 -0
- package/dist/modes/interactive/components/armin.js.map +1 -0
- package/dist/modes/interactive/components/ascii-logo.d.ts +11 -0
- package/dist/modes/interactive/components/ascii-logo.d.ts.map +1 -0
- package/dist/modes/interactive/components/ascii-logo.js +25 -0
- package/dist/modes/interactive/components/ascii-logo.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +16 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +92 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +36 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +170 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +48 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +42 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +43 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +71 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +470 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +28 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +63 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +74 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
- package/dist/modes/interactive/components/daxnuts.js +138 -0
- package/dist/modes/interactive/components/daxnuts.js.map +1 -0
- package/dist/modes/interactive/components/decrypt-loader.d.ts +25 -0
- package/dist/modes/interactive/components/decrypt-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/decrypt-loader.js +102 -0
- package/dist/modes/interactive/components/decrypt-loader.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +133 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +20 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +105 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +55 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +71 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +39 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +285 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +33 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +34 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +50 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +85 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +139 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/mcp-selector.d.ts +31 -0
- package/dist/modes/interactive/components/mcp-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/mcp-selector.js +171 -0
- package/dist/modes/interactive/components/mcp-selector.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +51 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +292 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +134 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +271 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +95 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +839 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +60 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +311 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +34 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +45 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/subagent-message.d.ts +91 -0
- package/dist/modes/interactive/components/subagent-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/subagent-message.js +306 -0
- package/dist/modes/interactive/components/subagent-message.js.map +1 -0
- package/dist/modes/interactive/components/task-plan-message.d.ts +12 -0
- package/dist/modes/interactive/components/task-plan-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/task-plan-message.js +61 -0
- package/dist/modes/interactive/components/task-plan-message.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +44 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +46 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +78 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +880 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +70 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +921 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +110 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +9 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +27 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +453 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +8669 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +85 -0
- package/dist/modes/interactive/theme/light.json +84 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.d.ts +78 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +944 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/print-mode.d.ts +28 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +101 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +217 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +404 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +580 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +409 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +8 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/utils/changelog.d.ts +21 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +87 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +162 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard-native.d.ts +7 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -0
- package/dist/utils/clipboard-native.js +14 -0
- package/dist/utils/clipboard-native.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +67 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/git.d.ts +26 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +163 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/image-convert.d.ts +9 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +35 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-resize.d.ts +36 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +181 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/mime.d.ts +2 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +26 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/photon.d.ts +21 -0
- package/dist/utils/photon.d.ts.map +1 -0
- package/dist/utils/photon.js +121 -0
- package/dist/utils/photon.js.map +1 -0
- package/dist/utils/shell.d.ts +26 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +186 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +3 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +251 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/docs/README.md +32 -0
- package/docs/cli-reference.md +342 -0
- package/docs/configuration.md +301 -0
- package/docs/development-and-testing.md +295 -0
- package/docs/extensions-packages-themes.md +415 -0
- package/docs/getting-started.md +246 -0
- package/docs/interactive-mode.md +272 -0
- package/docs/iosm-init-and-cycles.md +355 -0
- package/docs/orchestration-and-subagents.md +273 -0
- package/docs/rpc-json-sdk.md +353 -0
- package/docs/sessions-traces-export.md +260 -0
- package/examples/README.md +120 -0
- package/examples/extensions/README.md +306 -0
- package/examples/extensions/antigravity-image-gen.ts +415 -0
- package/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/built-in-tool-renderer.ts +246 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +72 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +114 -0
- package/examples/extensions/custom-footer.ts +64 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
- package/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -0
- package/examples/extensions/doom-overlay/README.md +46 -0
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +132 -0
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/examples/extensions/doom-overlay/index.ts +74 -0
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/dynamic-tools.ts +74 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/handoff.ts +150 -0
- package/examples/extensions/hello.ts +25 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +426 -0
- package/examples/extensions/modal-editor.ts +85 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +881 -0
- package/examples/extensions/overlay-test.ts +150 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +340 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +398 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/qna.ts +119 -0
- package/examples/extensions/question.ts +264 -0
- package/examples/extensions/questionnaire.ts +427 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/rpc-demo.ts +124 -0
- package/examples/extensions/sandbox/index.ts +318 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +343 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +40 -0
- package/examples/extensions/subagent/README.md +172 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +126 -0
- package/examples/extensions/subagent/index.ts +964 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +195 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +299 -0
- package/examples/extensions/tool-override.ts +143 -0
- package/examples/extensions/tools.ts +146 -0
- package/examples/extensions/trigger-compact.ts +40 -0
- package/examples/extensions/truncated-tool.ts +192 -0
- package/examples/extensions/widget-placement.ts +17 -0
- package/examples/extensions/with-deps/index.ts +36 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/rpc-extension-ui.ts +632 -0
- package/examples/sdk/01-minimal.ts +22 -0
- package/examples/sdk/02-custom-model.ts +49 -0
- package/examples/sdk/03-custom-prompt.ts +55 -0
- package/examples/sdk/04-skills.ts +46 -0
- package/examples/sdk/05-tools.ts +56 -0
- package/examples/sdk/06-extensions.ts +88 -0
- package/examples/sdk/07-context-files.ts +40 -0
- package/examples/sdk/08-prompt-templates.ts +47 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
- package/examples/sdk/10-settings.ts +51 -0
- package/examples/sdk/11-sessions.ts +48 -0
- package/examples/sdk/12-full-control.ts +82 -0
- package/examples/sdk/README.md +337 -0
- package/examples/tsconfig.json +3 -0
- package/package.json +107 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
# Sessions, Traces, Export
|
|
2
|
+
|
|
3
|
+
`iosm-cli` provides comprehensive session management with persistence, branching, tracing, HTML export, and sharing capabilities.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Session Persistence
|
|
8
|
+
|
|
9
|
+
By default, interactive sessions are automatically persisted to:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
~/.iosm/agent/sessions/
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Each session is stored as a JSONL (JSON Lines) file containing the complete conversation history, tool calls, and metadata.
|
|
16
|
+
|
|
17
|
+
### CLI Session Controls
|
|
18
|
+
|
|
19
|
+
| Flag | Description | Example |
|
|
20
|
+
|------|-------------|---------|
|
|
21
|
+
| `--continue`, `-c` | Continue the most recent session | `iosm -c` |
|
|
22
|
+
| `--resume`, `-r` | Open interactive session picker | `iosm -r` |
|
|
23
|
+
| `--session <path>` | Open a specific session file | `iosm --session ~/sessions/my.jsonl` |
|
|
24
|
+
| `--session-dir <dir>` | Override session storage directory | `iosm --session-dir ./local-sessions` |
|
|
25
|
+
| `--no-session` | Disable persistence (ephemeral run) | `iosm --no-session` |
|
|
26
|
+
|
|
27
|
+
### Examples
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Continue where you left off
|
|
31
|
+
iosm --continue
|
|
32
|
+
|
|
33
|
+
# Pick from a list of recent sessions
|
|
34
|
+
iosm --resume
|
|
35
|
+
|
|
36
|
+
# Use a specific session file
|
|
37
|
+
iosm --session ~/my-project-sessions/refactor-auth.jsonl
|
|
38
|
+
|
|
39
|
+
# Custom session directory
|
|
40
|
+
iosm --session-dir /tmp/my-sessions
|
|
41
|
+
|
|
42
|
+
# One-off ephemeral session (not saved)
|
|
43
|
+
iosm --no-session -p "Quick question about TypeScript generics"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Session Tree & Branching
|
|
49
|
+
|
|
50
|
+
Sessions support tree-based branching, allowing you to explore different paths from any point in the conversation.
|
|
51
|
+
|
|
52
|
+
### Slash Commands
|
|
53
|
+
|
|
54
|
+
| Command | Description |
|
|
55
|
+
|---------|-------------|
|
|
56
|
+
| `/tree` | Navigate the session tree visually |
|
|
57
|
+
| `/fork` | Create a branch from a previous message |
|
|
58
|
+
| `/name` | Set a display name for the current session |
|
|
59
|
+
|
|
60
|
+
### Branching Workflow
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
iosm
|
|
64
|
+
|
|
65
|
+
# Have a conversation...
|
|
66
|
+
# You: "Analyze the auth module"
|
|
67
|
+
# Agent: [analysis]
|
|
68
|
+
# You: "Propose two approaches: rewrite vs refactor"
|
|
69
|
+
# Agent: [proposals]
|
|
70
|
+
|
|
71
|
+
# Fork to explore Approach A
|
|
72
|
+
/fork
|
|
73
|
+
# "Let's go with the rewrite approach and implement it"
|
|
74
|
+
|
|
75
|
+
# Later, go back and fork to explore Approach B
|
|
76
|
+
/tree
|
|
77
|
+
# Navigate to the branching point
|
|
78
|
+
/fork
|
|
79
|
+
# "Let's try the refactor approach instead"
|
|
80
|
+
|
|
81
|
+
# Name this session for easy finding later
|
|
82
|
+
/name "auth-module-exploration"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Tree Navigation
|
|
86
|
+
|
|
87
|
+
The `/tree` command shows a visual tree of your conversation branches:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
📝 auth-module-exploration
|
|
91
|
+
├── [1] You: Analyze the auth module
|
|
92
|
+
├── [2] Agent: [analysis]
|
|
93
|
+
├── [3] You: Propose two approaches
|
|
94
|
+
├── [4] Agent: [proposals]
|
|
95
|
+
├── Branch A (current)
|
|
96
|
+
│ └── [5] You: Rewrite approach
|
|
97
|
+
│ └── [6] Agent: [implementation]
|
|
98
|
+
└── Branch B
|
|
99
|
+
└── [5] You: Refactor approach
|
|
100
|
+
└── [6] Agent: [implementation]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Session Trace Logging
|
|
106
|
+
|
|
107
|
+
Enable full JSONL trace logging for debugging, auditing, or analysis:
|
|
108
|
+
|
|
109
|
+
### Enable Tracing
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Via CLI flag
|
|
113
|
+
iosm --session-trace
|
|
114
|
+
|
|
115
|
+
# Via environment variable
|
|
116
|
+
IOSM_SESSION_TRACE=1 iosm
|
|
117
|
+
|
|
118
|
+
# Custom trace directory
|
|
119
|
+
iosm --session-trace --session-trace-dir /path/to/traces
|
|
120
|
+
|
|
121
|
+
# Via environment variable
|
|
122
|
+
IOSM_SESSION_TRACE_DIR="/path/to/traces" IOSM_SESSION_TRACE=1 iosm
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Trace File Format
|
|
126
|
+
|
|
127
|
+
Traces are stored as `<session-id>.jsonl` files. Each line is a JSON event:
|
|
128
|
+
|
|
129
|
+
```jsonl
|
|
130
|
+
{"type":"session_start","timestamp":"2026-03-09T15:42:00Z","sessionId":"abc123"}
|
|
131
|
+
{"type":"user_message","timestamp":"2026-03-09T15:42:05Z","content":"Analyze the project"}
|
|
132
|
+
{"type":"tool_call","timestamp":"2026-03-09T15:42:06Z","tool":"ls","input":{"path":"."}}
|
|
133
|
+
{"type":"tool_result","timestamp":"2026-03-09T15:42:06Z","tool":"ls","output":"..."}
|
|
134
|
+
{"type":"assistant_message","timestamp":"2026-03-09T15:42:10Z","content":"Here's my analysis..."}
|
|
135
|
+
{"type":"turn_end","timestamp":"2026-03-09T15:42:10Z","usage":{"totalTokens":1500}}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Analyzing Traces
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# View all events
|
|
142
|
+
cat ~/.iosm/agent/session-traces/<session-id>.jsonl | jq .
|
|
143
|
+
|
|
144
|
+
# Filter tool calls
|
|
145
|
+
cat trace.jsonl | jq 'select(.type=="tool_call")'
|
|
146
|
+
|
|
147
|
+
# Count token usage per turn
|
|
148
|
+
cat trace.jsonl | jq 'select(.type=="turn_end") | .usage.totalTokens'
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Export to HTML
|
|
154
|
+
|
|
155
|
+
Export sessions to beautifully formatted, self-contained HTML files.
|
|
156
|
+
|
|
157
|
+
### Interactive Export
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
iosm
|
|
161
|
+
# ... have a conversation ...
|
|
162
|
+
/export
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### CLI Export
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
iosm --export /path/to/session.jsonl
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Export Features
|
|
172
|
+
|
|
173
|
+
- **Self-contained** — Single HTML file with all assets embedded
|
|
174
|
+
- **Themed** — Uses the current TUI theme for styling
|
|
175
|
+
- **Tool rendering** — Tool calls and results are pre-rendered with syntax highlighting
|
|
176
|
+
- **Navigable** — Conversation structure is preserved with collapsible sections
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Share via GitHub Gist
|
|
181
|
+
|
|
182
|
+
Share a session publicly (or privately) via GitHub Gist:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
/share
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
This will:
|
|
189
|
+
1. Serialize the current session
|
|
190
|
+
2. Upload as a secret GitHub Gist
|
|
191
|
+
3. Return a shareable URL
|
|
192
|
+
|
|
193
|
+
> **Note**: Requires GitHub authentication. Use `/login` to set up GitHub credentials.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Copy to Clipboard
|
|
198
|
+
|
|
199
|
+
Copy the latest assistant response to your clipboard:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
/copy
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Useful for quickly grabbing generated code, explanations, or summaries.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Session Management Workflows
|
|
210
|
+
|
|
211
|
+
### Daily Development
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# Morning — continue yesterday's session
|
|
215
|
+
iosm -c
|
|
216
|
+
|
|
217
|
+
# Or pick a specific past session
|
|
218
|
+
iosm -r
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Code Review Sessions
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Start a named review session
|
|
225
|
+
iosm --profile plan
|
|
226
|
+
/name "Q1 security review"
|
|
227
|
+
# ... review code ...
|
|
228
|
+
/export # Export for team sharing
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### CI/Automation (Ephemeral)
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
# No persistence needed
|
|
235
|
+
iosm --no-session -p "Check for deprecated APIs in src/"
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Branching Exploration
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
iosm
|
|
242
|
+
# Analyze an issue
|
|
243
|
+
# Fork to try different solutions
|
|
244
|
+
/fork
|
|
245
|
+
# Try solution A
|
|
246
|
+
# ...
|
|
247
|
+
/tree
|
|
248
|
+
# Go back, fork again
|
|
249
|
+
/fork
|
|
250
|
+
# Try solution B
|
|
251
|
+
# Compare and decide
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Further Reading
|
|
257
|
+
|
|
258
|
+
- [Interactive Mode](./interactive-mode.md) — All slash commands
|
|
259
|
+
- [Configuration](./configuration.md) — Session directory settings
|
|
260
|
+
- [JSON/RPC/SDK](./rpc-json-sdk.md) — Programmatic session management
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Examples
|
|
2
|
+
|
|
3
|
+
Complete example library for `iosm-cli` SDK and extension development. These examples demonstrate how to use `iosm-cli` programmatically and extend it with custom functionality.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Run any example with tsx
|
|
9
|
+
npx tsx examples/sdk/01-minimal.ts
|
|
10
|
+
npx tsx examples/extensions/hello.ts
|
|
11
|
+
|
|
12
|
+
# Or load an extension directly
|
|
13
|
+
iosm -e examples/extensions/permission-gate.ts
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 📁 Directory Structure
|
|
19
|
+
|
|
20
|
+
### [sdk/](sdk/)
|
|
21
|
+
|
|
22
|
+
**12 progressive examples** showing how to use `iosm-cli` as a library via `createAgentSession()`.
|
|
23
|
+
|
|
24
|
+
| # | Example | What You Learn |
|
|
25
|
+
|---|---------|---------------|
|
|
26
|
+
| 01 | [Minimal](sdk/01-minimal.ts) | Simplest usage — auto-discovers everything |
|
|
27
|
+
| 02 | [Custom Model](sdk/02-custom-model.ts) | Select provider, model, and thinking level |
|
|
28
|
+
| 03 | [Custom Prompt](sdk/03-custom-prompt.ts) | Replace or append to the system prompt |
|
|
29
|
+
| 04 | [Skills](sdk/04-skills.ts) | Discover, filter, and inject custom skills |
|
|
30
|
+
| 05 | [Tools](sdk/05-tools.ts) | Built-in tools, read-only mode, custom cwd |
|
|
31
|
+
| 06 | [Extensions](sdk/06-extensions.ts) | Inline extensions, lifecycle hooks, custom tools |
|
|
32
|
+
| 07 | [Context Files](sdk/07-context-files.ts) | AGENTS.md project-specific instructions |
|
|
33
|
+
| 08 | [Prompt Templates](sdk/08-prompt-templates.ts) | File-based reusable prompts as slash commands |
|
|
34
|
+
| 09 | [API Keys & OAuth](sdk/09-api-keys-and-oauth.ts) | Auth storage, model registry, runtime key override |
|
|
35
|
+
| 10 | [Settings](sdk/10-settings.ts) | Override compaction, retry, terminal settings |
|
|
36
|
+
| 11 | [Sessions](sdk/11-sessions.ts) | In-memory, persistent, continue, list, open sessions |
|
|
37
|
+
| 12 | [Full Control](sdk/12-full-control.ts) | Zero discovery — explicit configuration for everything |
|
|
38
|
+
|
|
39
|
+
→ Full SDK guide at [sdk/README.md](sdk/README.md)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
### [extensions/](extensions/)
|
|
44
|
+
|
|
45
|
+
**66 extension examples** organized by category, demonstrating the full extension API.
|
|
46
|
+
|
|
47
|
+
| Category | Count | Highlights |
|
|
48
|
+
|----------|-------|-----------|
|
|
49
|
+
| **Safety & Lifecycle** | 5 | Permission gates, protected paths, destructive action confirmation |
|
|
50
|
+
| **Custom Tools** | 12 | Todo list, hello world, SSH delegation, image gen, subagents |
|
|
51
|
+
| **Commands & UI** | 22 | Presets, overlays, editors, footers, headers, notifications, games |
|
|
52
|
+
| **Git Integration** | 2 | Checkpoint stashing, auto-commit on exit |
|
|
53
|
+
| **System Prompt** | 4 | Dynamic prompt modification, custom compaction |
|
|
54
|
+
| **System Integration** | 1 | macOS theme sync |
|
|
55
|
+
| **Custom Providers** | 3 | Anthropic, GitLab Duo, Qwen CLI |
|
|
56
|
+
| **Session & Messages** | 4 | Named sessions, bookmarks, event bus, message rendering |
|
|
57
|
+
| **Resources** | 1 | Dynamic skill/prompt/theme loading |
|
|
58
|
+
| **Dependencies** | 2 | Extension with own package.json, file watcher |
|
|
59
|
+
|
|
60
|
+
→ Full extension guide at [extensions/README.md](extensions/README.md)
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### [rpc-extension-ui.ts](rpc-extension-ui.ts)
|
|
65
|
+
|
|
66
|
+
Standalone RPC client that exercises all extension UI methods over the RPC protocol. Demonstrates how to use `confirm`, `select`, `notify`, and custom UI from an external process.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Key Concepts
|
|
71
|
+
|
|
72
|
+
### Extension Pattern
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
import type { ExtensionAPI } from "iosm-cli";
|
|
76
|
+
|
|
77
|
+
export default function (pi: ExtensionAPI) {
|
|
78
|
+
// Register tools, commands, hooks, UI
|
|
79
|
+
pi.registerTool({ ... });
|
|
80
|
+
pi.registerCommand("name", { ... });
|
|
81
|
+
pi.on("tool_call", async (event, ctx) => { ... });
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### SDK Pattern
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { createAgentSession } from "iosm-cli";
|
|
89
|
+
|
|
90
|
+
const { session } = await createAgentSession({ /* options */ });
|
|
91
|
+
session.subscribe((event) => { /* handle events */ });
|
|
92
|
+
await session.prompt("Your message");
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### State Persistence
|
|
96
|
+
|
|
97
|
+
Store extension state in tool result `details` for proper session branching:
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
return {
|
|
101
|
+
content: [{ type: "text", text: "Done" }],
|
|
102
|
+
details: { myState: [...data] }, // Persisted with session
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// Reconstruct on fork/resume
|
|
106
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
107
|
+
for (const entry of ctx.sessionManager.getBranch()) {
|
|
108
|
+
// Rebuild state from details
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Documentation
|
|
116
|
+
|
|
117
|
+
- [SDK Reference](sdk/README.md) — Complete SDK guide with all options
|
|
118
|
+
- [Extension Guide](extensions/README.md) — Full extension API documentation
|
|
119
|
+
- [Extension API Docs](../docs/extensions-packages-themes.md) — Official extension reference
|
|
120
|
+
- [SDK Integration Docs](../docs/rpc-json-sdk.md) — JSON/RPC/SDK integration guide
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# Extension Examples
|
|
2
|
+
|
|
3
|
+
66 example extensions for `iosm-cli` demonstrating the full extension API: custom tools, lifecycle hooks, commands, UI components, and provider integrations.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Load an extension via CLI flag
|
|
9
|
+
iosm -e examples/extensions/permission-gate.ts
|
|
10
|
+
|
|
11
|
+
# Or copy to extensions directory for auto-discovery
|
|
12
|
+
cp permission-gate.ts ~/.iosm/agent/extensions/
|
|
13
|
+
|
|
14
|
+
# Reload at runtime
|
|
15
|
+
/reload
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Extension Template
|
|
21
|
+
|
|
22
|
+
Every extension exports a default function receiving the `ExtensionAPI`:
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import type { ExtensionAPI } from "iosm-cli";
|
|
26
|
+
|
|
27
|
+
export default function (pi: ExtensionAPI) {
|
|
28
|
+
// Register tools, commands, hooks, UI — all goes here
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Examples by Category
|
|
35
|
+
|
|
36
|
+
### 🛡️ Lifecycle & Safety
|
|
37
|
+
|
|
38
|
+
| Extension | Description | Key APIs |
|
|
39
|
+
|-----------|-------------|----------|
|
|
40
|
+
| [permission-gate.ts](permission-gate.ts) | Prompts for confirmation before dangerous bash commands (rm -rf, sudo, chmod 777) | `pi.on("tool_call")`, `ctx.ui.select()` |
|
|
41
|
+
| [protected-paths.ts](protected-paths.ts) | Blocks writes to protected paths (.env, .git/, node_modules/) | `pi.on("tool_call")`, `return { block: true }` |
|
|
42
|
+
| [confirm-destructive.ts](confirm-destructive.ts) | Confirms before destructive session actions (clear, switch, fork) | `pi.on("tool_call")`, `ctx.ui.confirm()` |
|
|
43
|
+
| [dirty-repo-guard.ts](dirty-repo-guard.ts) | Prevents session changes with uncommitted git changes | `pi.on("session_switch")`, `pi.exec()` |
|
|
44
|
+
| [sandbox/](sandbox/) | OS-level sandboxing using `@anthropic-ai/sandbox-runtime` | External sandbox integration |
|
|
45
|
+
|
|
46
|
+
### 🔧 Custom Tools
|
|
47
|
+
|
|
48
|
+
| Extension | Description | Key APIs |
|
|
49
|
+
|-----------|-------------|----------|
|
|
50
|
+
| [hello.ts](hello.ts) | **Minimal example** — simplest custom tool | `pi.registerTool()` |
|
|
51
|
+
| [todo.ts](todo.ts) | Todo list with `/todos` command, custom rendering, and state persistence | `pi.registerTool()`, `renderCall()`, `renderResult()` |
|
|
52
|
+
| [question.ts](question.ts) | Demonstrates `ctx.ui.select()` for asking user questions | `ctx.ui.select()`, custom UI |
|
|
53
|
+
| [questionnaire.ts](questionnaire.ts) | Multi-question input with tab bar navigation | `ctx.ui.custom()`, tab bar |
|
|
54
|
+
| [tool-override.ts](tool-override.ts) | Override built-in tools (e.g., add logging to `read`) | `wrapRegisteredTool()` |
|
|
55
|
+
| [dynamic-tools.ts](dynamic-tools.ts) | Register tools after startup and at runtime via command | `session_start` hook, prompt snippets |
|
|
56
|
+
| [built-in-tool-renderer.ts](built-in-tool-renderer.ts) | Custom compact rendering for built-in tools | `renderCall()`, `renderResult()` |
|
|
57
|
+
| [minimal-mode.ts](minimal-mode.ts) | Override built-in tool rendering for minimal display | Tool render override |
|
|
58
|
+
| [truncated-tool.ts](truncated-tool.ts) | Wraps ripgrep with proper output truncation (50KB/2000 lines) | Output truncation, `pi.exec()` |
|
|
59
|
+
| [antigravity-image-gen.ts](antigravity-image-gen.ts) | Generate images via Google Antigravity | External API, file save |
|
|
60
|
+
| [ssh.ts](ssh.ts) | Delegate all tools to a remote machine via SSH | SSH operations, tool delegation |
|
|
61
|
+
| [subagent/](subagent/) | Delegate tasks to subagents with isolated context | Subagent orchestration |
|
|
62
|
+
|
|
63
|
+
### 🎨 Commands & UI
|
|
64
|
+
|
|
65
|
+
| Extension | Description | Key APIs |
|
|
66
|
+
|-----------|-------------|----------|
|
|
67
|
+
| [commands.ts](commands.ts) | Register custom slash commands | `pi.registerCommand()` |
|
|
68
|
+
| [preset.ts](preset.ts) | Named presets for model, thinking, tools, instructions | `--preset` flag, `/preset` command |
|
|
69
|
+
| [plan-mode/](plan-mode/) | Claude Code-style plan mode with step tracking | `/plan` command, read-only mode |
|
|
70
|
+
| [tools.ts](tools.ts) | Interactive `/tools` to enable/disable tools with persistence | `pi.registerCommand()`, tool management |
|
|
71
|
+
| [handoff.ts](handoff.ts) | Transfer context to new focused session via `/handoff` | Session creation, context transfer |
|
|
72
|
+
| [qna.ts](qna.ts) | Extracts questions from response into editor | `ctx.ui.setEditorText()` |
|
|
73
|
+
| [status-line.ts](status-line.ts) | Shows turn progress in footer | `ctx.ui.setStatus()` |
|
|
74
|
+
| [widget-placement.ts](widget-placement.ts) | Shows widgets above/below the editor | `ctx.ui.setWidget()` |
|
|
75
|
+
| [model-status.ts](model-status.ts) | Shows model changes in status bar | `model_select` hook |
|
|
76
|
+
| [custom-footer.ts](custom-footer.ts) | Git branch and token stats in footer | `ctx.ui.setFooter()` |
|
|
77
|
+
| [custom-header.ts](custom-header.ts) | Custom header | `ctx.ui.setHeader()` |
|
|
78
|
+
| [modal-editor.ts](modal-editor.ts) | Vim-like modal editor | `ctx.ui.setEditorComponent()` |
|
|
79
|
+
| [rainbow-editor.ts](rainbow-editor.ts) | Animated rainbow text effect | Custom editor component |
|
|
80
|
+
| [notify.ts](notify.ts) | Desktop notifications via OSC 777 (Ghostty, iTerm2, WezTerm) | Terminal escape sequences |
|
|
81
|
+
| [titlebar-spinner.ts](titlebar-spinner.ts) | Braille spinner in terminal title while agent works | `turn_start`/`turn_end` hooks |
|
|
82
|
+
| [summarize.ts](summarize.ts) | Summarize conversation and show in transient UI | External model call, UI |
|
|
83
|
+
| [snake.ts](snake.ts) | Snake game with custom UI and keyboard handling | `ctx.ui.custom()`, game loop |
|
|
84
|
+
| [space-invaders.ts](space-invaders.ts) | Space Invaders game | Full game rendering |
|
|
85
|
+
| [doom-overlay/](doom-overlay/) | DOOM game running as overlay at 35 FPS | Real-time game rendering |
|
|
86
|
+
| [overlay-test.ts](overlay-test.ts) | Test overlay compositing with edge cases | Overlay system |
|
|
87
|
+
| [overlay-qa-tests.ts](overlay-qa-tests.ts) | Comprehensive overlay QA: anchors, margins, stacking | Overlay QA |
|
|
88
|
+
| [shutdown-command.ts](shutdown-command.ts) | `/quit` command demonstrating `ctx.shutdown()` | `ctx.shutdown()` |
|
|
89
|
+
| [reload-runtime.ts](reload-runtime.ts) | `/reload-runtime` with safe reload flow | Runtime reload |
|
|
90
|
+
| [interactive-shell.ts](interactive-shell.ts) | Run interactive commands (vim, htop) with full terminal | `user_bash` hook |
|
|
91
|
+
| [inline-bash.ts](inline-bash.ts) | Expands `!{command}` patterns in prompts | `input` event transformation |
|
|
92
|
+
| [send-user-message.ts](send-user-message.ts) | Send user messages from extensions | `pi.sendUserMessage()` |
|
|
93
|
+
| [timed-confirm.ts](timed-confirm.ts) | Auto-dismissing confirm/select with AbortSignal | `AbortSignal`, `ctx.ui.confirm()` |
|
|
94
|
+
| [rpc-demo.ts](rpc-demo.ts) | Exercises all RPC extension UI methods | RPC UI methods |
|
|
95
|
+
|
|
96
|
+
### 🔀 Git Integration
|
|
97
|
+
|
|
98
|
+
| Extension | Description | Key APIs |
|
|
99
|
+
|-----------|-------------|----------|
|
|
100
|
+
| [git-checkpoint.ts](git-checkpoint.ts) | Creates git stash checkpoints at each turn for fork restoration | `pi.exec("git")`, `session_before_fork` |
|
|
101
|
+
| [auto-commit-on-exit.ts](auto-commit-on-exit.ts) | Auto-commits on exit using last assistant message | `agent_end` hook |
|
|
102
|
+
|
|
103
|
+
### 📝 System Prompt & Compaction
|
|
104
|
+
|
|
105
|
+
| Extension | Description | Key APIs |
|
|
106
|
+
|-----------|-------------|----------|
|
|
107
|
+
| [pirate.ts](pirate.ts) | Dynamically modify system prompt via hook | `before_agent_start` + `systemPromptAppend` |
|
|
108
|
+
| [claude-rules.ts](claude-rules.ts) | Scans `.claude/rules/` and lists rules in system prompt | System prompt injection |
|
|
109
|
+
| [system-prompt-header.ts](system-prompt-header.ts) | Add header to system prompt | `systemPromptAppend` |
|
|
110
|
+
| [custom-compaction.ts](custom-compaction.ts) | Custom compaction that summarizes entire conversation | Custom compaction strategy |
|
|
111
|
+
| [trigger-compact.ts](trigger-compact.ts) | Auto-triggers compaction at 100k tokens | Context monitoring, compaction |
|
|
112
|
+
|
|
113
|
+
### 💻 System Integration
|
|
114
|
+
|
|
115
|
+
| Extension | Description |
|
|
116
|
+
|-----------|-------------|
|
|
117
|
+
| [mac-system-theme.ts](mac-system-theme.ts) | Syncs iosm theme with macOS dark/light mode |
|
|
118
|
+
|
|
119
|
+
### 📦 Resources
|
|
120
|
+
|
|
121
|
+
| Extension | Description |
|
|
122
|
+
|-----------|-------------|
|
|
123
|
+
| [dynamic-resources/](dynamic-resources/) | Loads skills, prompts, themes using `resources_discover` |
|
|
124
|
+
|
|
125
|
+
### 💬 Messages & Communication
|
|
126
|
+
|
|
127
|
+
| Extension | Description | Key APIs |
|
|
128
|
+
|-----------|-------------|----------|
|
|
129
|
+
| [message-renderer.ts](message-renderer.ts) | Custom message rendering with colors and expandable details | `registerMessageRenderer` |
|
|
130
|
+
| [event-bus.ts](event-bus.ts) | Inter-extension communication | `pi.events` |
|
|
131
|
+
| [input-transform.ts](input-transform.ts) | Transform user input before processing | `input` hook |
|
|
132
|
+
|
|
133
|
+
### 📌 Session Metadata
|
|
134
|
+
|
|
135
|
+
| Extension | Description | Key APIs |
|
|
136
|
+
|-----------|-------------|----------|
|
|
137
|
+
| [session-name.ts](session-name.ts) | Name sessions for the session selector | `setSessionName` |
|
|
138
|
+
| [bookmark.ts](bookmark.ts) | Bookmark entries for `/tree` navigation | `setLabel` |
|
|
139
|
+
|
|
140
|
+
### 🔌 Custom Providers
|
|
141
|
+
|
|
142
|
+
| Extension | Description |
|
|
143
|
+
|-----------|-------------|
|
|
144
|
+
| [custom-provider-anthropic/](custom-provider-anthropic/) | Custom Anthropic provider with OAuth and custom streaming |
|
|
145
|
+
| [custom-provider-gitlab-duo/](custom-provider-gitlab-duo/) | GitLab Duo provider using built-in streaming via proxy |
|
|
146
|
+
| [custom-provider-qwen-cli/](custom-provider-qwen-cli/) | Qwen CLI with OAuth device flow and OpenAI-compatible models |
|
|
147
|
+
|
|
148
|
+
### 📎 External Dependencies
|
|
149
|
+
|
|
150
|
+
| Extension | Description |
|
|
151
|
+
|-----------|-------------|
|
|
152
|
+
| [with-deps/](with-deps/) | Extension with its own package.json and dependencies (jiti module resolution) |
|
|
153
|
+
| [file-trigger.ts](file-trigger.ts) | Watches a trigger file and injects contents into conversation |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Key Patterns
|
|
158
|
+
|
|
159
|
+
### Pattern 1: Tool with Safety Gate
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
pi.on("tool_call", async (event, ctx) => {
|
|
163
|
+
if (event.toolName === "bash" && event.input.command?.includes("rm -rf")) {
|
|
164
|
+
const ok = await ctx.ui.confirm("Warning", "Allow rm -rf?");
|
|
165
|
+
if (!ok) return { block: true, reason: "Blocked by user" };
|
|
166
|
+
}
|
|
167
|
+
return undefined; // Allow execution
|
|
168
|
+
});
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Pattern 2: Custom Tool with Rendering
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
pi.registerTool({
|
|
175
|
+
name: "my_tool",
|
|
176
|
+
label: "My Tool",
|
|
177
|
+
description: "Does something useful",
|
|
178
|
+
parameters: Type.Object({
|
|
179
|
+
input: Type.String({ description: "Input value" }),
|
|
180
|
+
}),
|
|
181
|
+
async execute(toolCallId, params, signal, onUpdate, ctx) {
|
|
182
|
+
return {
|
|
183
|
+
content: [{ type: "text", text: `Result: ${params.input}` }],
|
|
184
|
+
details: { raw: params.input },
|
|
185
|
+
};
|
|
186
|
+
},
|
|
187
|
+
// Custom rendering in TUI
|
|
188
|
+
renderCall(args, theme) {
|
|
189
|
+
return new Text(theme.fg("toolTitle", "my_tool ") + args.input, 0, 0);
|
|
190
|
+
},
|
|
191
|
+
renderResult(result, { expanded }, theme) {
|
|
192
|
+
return new Text(result.content[0]?.text || "", 0, 0);
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Pattern 3: State Persistence via Details
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
let state: MyState = {};
|
|
201
|
+
|
|
202
|
+
pi.registerTool({
|
|
203
|
+
name: "stateful",
|
|
204
|
+
// ...
|
|
205
|
+
async execute(toolCallId, params) {
|
|
206
|
+
// Modify state
|
|
207
|
+
state = { ...state, ...newData };
|
|
208
|
+
return {
|
|
209
|
+
content: [{ type: "text", text: "Done" }],
|
|
210
|
+
details: { state: { ...state } }, // ← Persisted in session
|
|
211
|
+
};
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// Reconstruct on session events
|
|
216
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
217
|
+
state = {};
|
|
218
|
+
for (const entry of ctx.sessionManager.getBranch()) {
|
|
219
|
+
if (entry.type === "message" && entry.message.toolName === "stateful") {
|
|
220
|
+
state = entry.message.details?.state || {};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Pattern 4: Dynamic System Prompt
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
pi.on("before_agent_start", async (event) => {
|
|
230
|
+
return {
|
|
231
|
+
systemPrompt: event.systemPrompt + "\n\nAdditional instructions here.",
|
|
232
|
+
};
|
|
233
|
+
});
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Pattern 5: StringEnum for Google Compatibility
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
import { StringEnum } from "@mariozechner/pi-ai";
|
|
240
|
+
|
|
241
|
+
// ✅ Works everywhere
|
|
242
|
+
action: StringEnum(["list", "add", "remove"] as const)
|
|
243
|
+
|
|
244
|
+
// ❌ Breaks with Google API
|
|
245
|
+
action: Type.Union([Type.Literal("list"), Type.Literal("add")])
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Extension API Reference
|
|
251
|
+
|
|
252
|
+
### Registration
|
|
253
|
+
|
|
254
|
+
| Method | Description |
|
|
255
|
+
|--------|-------------|
|
|
256
|
+
| `pi.registerTool(def)` | Register a custom tool |
|
|
257
|
+
| `pi.registerCommand(name, handler)` | Register a slash command |
|
|
258
|
+
| `pi.on(event, handler)` | Subscribe to lifecycle event |
|
|
259
|
+
| `pi.exec(cmd, args)` | Execute a shell command |
|
|
260
|
+
| `pi.sendUserMessage(text)` | Send a user message programmatically |
|
|
261
|
+
|
|
262
|
+
### Lifecycle Hooks
|
|
263
|
+
|
|
264
|
+
| Hook | When | Can Block |
|
|
265
|
+
|------|------|-----------|
|
|
266
|
+
| `session_start` | Session begins or is resumed | No |
|
|
267
|
+
| `session_switch` | Active session changes | No |
|
|
268
|
+
| `session_fork` | Session is forked | No |
|
|
269
|
+
| `session_tree` | Tree navigation occurs | No |
|
|
270
|
+
| `session_before_fork` | Before fork is executed | No |
|
|
271
|
+
| `before_agent_start` | Before model is called | No (can modify prompt) |
|
|
272
|
+
| `tool_call` | Before tool executes | **Yes** (`{ block: true }`) |
|
|
273
|
+
| `tool_result` | After tool returns | No |
|
|
274
|
+
| `turn_start` | Conversation turn begins | No |
|
|
275
|
+
| `turn_end` | Conversation turn ends | No |
|
|
276
|
+
| `agent_start` | Agent begins processing | No |
|
|
277
|
+
| `agent_end` | Agent finishes | No |
|
|
278
|
+
| `model_select` | Model is changed | No |
|
|
279
|
+
| `input` | User input received | No (can transform) |
|
|
280
|
+
|
|
281
|
+
### UI Context Methods
|
|
282
|
+
|
|
283
|
+
| Method | Description |
|
|
284
|
+
|--------|-------------|
|
|
285
|
+
| `ctx.ui.confirm(title, message)` | Show yes/no dialog |
|
|
286
|
+
| `ctx.ui.select(title, options)` | Show selection dialog |
|
|
287
|
+
| `ctx.ui.notify(message, level)` | Show notification |
|
|
288
|
+
| `ctx.ui.setStatus(text, level)` | Set status bar text |
|
|
289
|
+
| `ctx.ui.setFooter(factory)` | Custom footer renderer |
|
|
290
|
+
| `ctx.ui.setHeader(factory)` | Custom header renderer |
|
|
291
|
+
| `ctx.ui.setWidget(placement, component)` | Show widget above/below editor |
|
|
292
|
+
| `ctx.ui.setEditorText(text)` | Set editor content |
|
|
293
|
+
| `ctx.ui.setEditorComponent(factory)` | Replace editor with custom component |
|
|
294
|
+
| `ctx.ui.custom(factory)` | Show full-screen custom UI |
|
|
295
|
+
| `ctx.hasUI` | Check if interactive mode (for non-interactive safety) |
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Writing Your Own Extension
|
|
300
|
+
|
|
301
|
+
1. Create a `.ts` file with the extension template
|
|
302
|
+
2. Place it in `~/.iosm/agent/extensions/` (global) or `.iosm/extensions/` (project)
|
|
303
|
+
3. Or load explicitly: `iosm -e ./my-extension.ts`
|
|
304
|
+
4. Use `/reload` to hot-reload during development
|
|
305
|
+
|
|
306
|
+
For full documentation, see [Extensions & Packages](../../docs/extensions-packages-themes.md).
|