Commit Graph
100 Commits
Author SHA1 Message Date
Mario Zechner ee0befdfe1 Improve custom compaction docs in hooks.md 2025-12-24 12:43:04 +01:00
Mario Zechner d9a542763a Improve before_compact hook: add messagesToKeep, replace apiKey with resolveApiKey 2025-12-24 12:41:22 +01:00
Mario Zechner e4283294c8 Update full-compaction example to use resolveApiKey 2025-12-24 12:30:00 +01:00
Mario Zechner 43a5447a80 Add resolveApiKey to before_compact hook event 2025-12-24 12:28:51 +01:00
Mario Zechner 5aa53ded11 Add full-compaction hook example 2025-12-24 12:25:36 +01:00
Mario Zechner bf313d2713 Release v0.27.5 2025-12-24 12:18:51 +01:00
Mario Zechner 31dc58d43b Add changelog entry for Ghostty tmux fix 2025-12-24 12:17:31 +01:00
Mario Zechner 6fde3f4d93 Remove test output file 2025-12-24 12:15:47 +01:00
Mario Zechner 9851ee3bdb Add syntax highlighting to HTML export using highlight.js 2025-12-24 12:13:56 +01:00
Mario Zechner 20b24cf5a4 Fix symlinked skill directories not being discovered
Release v0.27.4
2025-12-24 03:32:54 +01:00
Mario Zechner f8619c1564 Release v0.27.3 2025-12-24 02:46:23 +01:00
Mario Zechner 81b10f2fa0 List all provider keys in README settings example 2025-12-24 02:42:41 +01:00
Mario Zechner 541758fbe0 Use injected resolveApiKey in AgentSession for settings.json support 2025-12-24 02:35:42 +01:00
Mario Zechner 144d9d93de Update README with settings.json API keys 2025-12-24 02:14:02 +01:00
Mario Zechner bb1da1ec51 Add API keys in settings.json, fixes #295 2025-12-24 02:11:17 +01:00
Mario Zechner e234e8d18f Allow startup without API keys, fixes #288 2025-12-24 01:52:59 +01:00
Mario Zechner fb9c25f51e docs: changelog entry for #287 2025-12-23 13:07:05 +01:00
Mario Zechner c57ed89110 Release v0.27.2 2025-12-23 03:48:52 +01:00
Mario Zechner 4492a3f304 Release v0.27.1 2025-12-22 19:28:26 +01:00
Mario Zechner 093bcecf95 Add [Unreleased] section for next cycle 2025-12-22 18:21:15 +01:00
Mario Zechner b9b44f4cf4 Release v0.27.0 2025-12-22 18:20:10 +01:00
Mario Zechner 42d7d9d9b6 Add before/after session events with cancellation support
- Merge branch event into session with before_branch/branch reasons
- Add before_switch, before_clear, shutdown reasons
- before_* events can be cancelled with { cancel: true }
- Update RPC commands to return cancelled status
- Add shutdown event on process exit
- New example hooks: confirm-destructive, dirty-repo-guard, auto-commit-on-exit

fixes #278
2025-12-22 18:18:38 +01:00
Mario Zechner 99081fce30 Add changelog entry for #280 2025-12-22 17:02:23 +01:00
Mario Zechner 7ad8a8c447 Fix bash tool visual line truncation
Use visual line counting (accounting for line wrapping) instead of logical
line counting for bash tool output in collapsed mode. Now consistent with
bash-execution.ts behavior.

- Add shared truncateToVisualLines utility
- Update tool-execution.ts to use Box for bash with visual truncation
- Update bash-execution.ts to use shared utility
- Pass TUI to ToolExecutionComponent for terminal width access

Fixes #275
2025-12-22 17:01:04 +01:00
Mario Zechner 31f4a588fd TUI: Improve file completion display (fixes #280) 2025-12-22 16:36:42 +01:00
Mario Zechner 7e1b632596 Release v0.26.1 2025-12-22 16:19:19 +01:00
Mario Zechner face745f3d Fix SDK tools to respect cwd option
Core tools now properly use the cwd passed to createAgentSession().
Added tool factory functions for SDK users who specify custom cwd with explicit tools.

Fixes #279
2025-12-22 16:17:55 +01:00
Mario Zechner 42bc368e70 Release v0.26.0 2025-12-22 12:53:58 +01:00
Mario Zechner 207c2cd566 Merge sdk-272: Add SDK for programmatic usage
- createAgentSession() factory with full control
- SessionManager/SettingsManager static factories
- Project-specific settings support
- 12 examples and comprehensive docs

Fixes #272
2025-12-22 12:46:32 +01:00
Mario Zechner 9473659bda Add CHANGELOG entries for SDK and settings changes 2025-12-22 12:45:49 +01:00
Mario Zechner f835f031eb SDK docs: add links to specific examples in each section 2025-12-22 12:44:41 +01:00
Mario Zechner 519688cb35 README: clarify TUI settings save to global preferences only 2025-12-22 12:40:42 +01:00
Mario Zechner e5f74a1ad9 Update README: document project-specific settings, add SettingsManager to SDK list 2025-12-22 12:34:08 +01:00
Mario Zechner 5d290f048e Fix SDK docs: AgentSession interface, findModel usage, settings example 2025-12-22 12:32:25 +01:00
Mario Zechner 1e6a23ab3d Update SDK docs for SettingsManager changes 2025-12-22 12:24:58 +01:00
Mario Zechner 62c64a286b Add project-specific settings and SettingsManager factories
- SettingsManager now loads .pi/settings.json from cwd (project settings)
- Project settings merge with global settings (deep merge for objects)
- Setters only modify global settings, project settings are read-only
- Add static factories: SettingsManager.create(cwd?, agentDir?), SettingsManager.inMemory(settings?)
- Add applyOverrides() for programmatic overrides
- Replace 'settings' option with 'settingsManager' in CreateAgentSessionOptions
- Update examples to use new pattern

Incorporates PR #276 approach
2025-12-22 12:23:02 +01:00
Mario Zechner 05e1f31feb Add SDK documentation
- docs/sdk.md: comprehensive SDK reference
  - Core concepts (createAgentSession, AgentSession, Agent, events)
  - All options with examples
  - Discovery functions
  - Complete example

- README.md: add SDK section with brief overview and links
2025-12-22 03:20:09 +01:00
Mario Zechner 56121dcac1 Add SDK usage examples
12 examples showing increasing levels of customization:
- 01-minimal: all defaults
- 02-custom-model: model and thinking level
- 03-custom-prompt: replace or modify prompt
- 04-skills: discover, filter, merge skills
- 05-tools: built-in tools, custom tools
- 06-hooks: logging, blocking, result modification
- 07-context-files: AGENTS.md files
- 08-slash-commands: file-based commands
- 09-api-keys-and-oauth: API key resolution, OAuth config
- 10-settings: compaction, retry, terminal settings
- 11-sessions: persistence options
- 12-full-control: replace everything

Also exports FileSlashCommand type from index.ts
2025-12-22 03:14:30 +01:00
Mario Zechner 86cfe6a436 Remove unused SessionHeader import from mom/context.ts 2025-12-22 02:52:18 +01:00
Mario Zechner 184c648334 Fix session persistence: flush all buffered entries on first assistant message
- SessionManager: add flushed flag, _persist() flushes all entries when first assistant seen
- SessionManager: reset() now creates session header
- MomSessionManager: same pattern, remove pendingEntries/sessionInitialized/startSession/shouldInitializeSession
2025-12-22 02:51:56 +01:00
Mario Zechner 974c8f57e5 Remove unused AgentState import from session-manager.ts 2025-12-22 02:43:56 +01:00
Mario Zechner 0faadfcd00 Fix session-manager simplification issues
- Remove unused inspector import from session-manager.ts
- Remove dead code in _persist()
- Update tests for simplified SessionHeader
- Update mom context.ts: remove unused AgentState import, fix startSession(), rename isEnabled to isPersisted
2025-12-22 02:43:38 +01:00
Mario Zechner f7a12c478c Clean up agentDir handling and remove redundant code
- Use default params instead of resolvedAgentDir pattern in loaders
- Remove unused DiscoverAndLoadHooksOptions interface
- Remove redundant github-copilot special casing in getAvailableModels
2025-12-22 01:52:58 +01:00
Mario Zechner 1236ab8007 Add default agentDir to loadCustomModels for consistency 2025-12-22 01:44:54 +01:00
Mario Zechner d67559a5e4 Remove unused fs import from main.ts 2025-12-22 01:42:52 +01:00
Mario Zechner b168a6cae3 Add agentDir parameter to model config functions and OAuth storage
- loadAndMergeModels(agentDir) - loads models.json from agentDir
- getAvailableModels(agentDir) - uses agentDir for model discovery
- findModel(provider, id, agentDir) - uses agentDir for model lookup
- configureOAuthStorage(agentDir) - configures OAuth to use agentDir/oauth.json
- createAgentSession calls configureOAuthStorage with options.agentDir
- Export configureOAuthStorage from SDK
2025-12-22 01:42:27 +01:00
Mario Zechner 6d4ff74430 Add agentDir parameter to SessionManager factory methods 2025-12-22 01:31:20 +01:00
Mario Zechner ace8ea3d5b Refactor SessionManager to use static factory methods
- Add factory methods: create(cwd), open(path), continueRecent(cwd), inMemory()
- Add static list(cwd) for session listing
- Make constructor private, pass cwd explicitly
- Update SDK to take sessionManager instead of sessionFile options
- Update main.ts to create SessionManager based on CLI flags
- Update SessionSelectorComponent to take sessions[] instead of SessionManager
- Update tests to use factory methods
2025-12-22 01:29:54 +01:00
Mario Zechner 7bf4c8ff24 Remove unnecessary section divider comments 2025-12-22 01:02:42 +01:00
Mario Zechner 6201bae805 Fix lint warnings in main.ts 2025-12-22 00:58:53 +01:00
Mario Zechner 67a5fbde15 Remove inline imports from main.ts 2025-12-22 00:58:36 +01:00
Mario Zechner 4398596d41 Refactor main.ts to use SDK createAgentSession
- Add continueSession, restoreFromSession, additionalHookPaths,
  additionalCustomToolPaths, scopedModels to CreateAgentSessionOptions
- Return CreateAgentSessionResult with session, customToolsResult,
  and modelFallbackMessage
- main.ts now focuses on CLI arg parsing and mode routing
- Reduced main.ts from ~490 to ~340 lines
2025-12-22 00:55:42 +01:00
Mario Zechner bfc1c44791 Use SDK's discoverSlashCommands in main.ts 2025-12-22 00:48:47 +01:00
Mario Zechner 5482bf3e14 Add SDK for programmatic AgentSession usage
- Add src/core/sdk.ts with createAgentSession() factory and discovery functions
- Update loaders to accept cwd/agentDir parameters (skills, hooks, custom-tools, slash-commands, system-prompt)
- Export SDK from package index

Addresses #272
2025-12-22 00:47:16 +01:00
Mario Zechner 11e743373d Fix syntax highlighting stderr spam with malformed markdown, fixes #274 2025-12-22 00:23:01 +01:00
Mario Zechner d5fd685901 Enable more biome lints and fix things 2025-12-21 22:56:20 +01:00
Mario Zechner 9c18439c4d Release v0.25.3 2025-12-21 21:01:27 +01:00
Mario Zechner d95a5c4186 feat(coding-agent): add --skills CLI flag for filtering skills
Adds glob pattern support for skill filtering:
- --skills <patterns> CLI flag (comma-separated glob patterns)
- includeSkills setting in settings.json
- ignoredSkills now supports glob patterns
- ignoredSkills takes precedence over includeSkills and --skills

Closes #268
2025-12-21 20:58:54 +01:00
Mario Zechner ace3563f0e Add tests for Gemini 3 models with thinkingLevel 2025-12-21 20:34:39 +01:00
Mario Zechner 329b3a0a36 Merge PR #264: Add Gemini 3 preview models to google-gemini-cli provider 2025-12-21 20:31:19 +01:00
Mario Zechner 6683e06376 Clarify Ctrl+Z docs to mention fg for resume 2025-12-21 20:22:29 +01:00
Mario Zechner 55ca650a40 Update README to include github-copilot, google-gemini-cli, google-antigravity providers 2025-12-21 20:17:12 +01:00
Mario Zechner 6e1bd08a9d Merge pull request #266 from aliou/feat/allow-editor-edition
feat(coding-agent): add Ctrl+G to open external editor
2025-12-21 19:29:14 +01:00
Mario Zechner 299986f06b Release v0.25.2 2025-12-21 02:59:03 +01:00
Mario Zechner d07d784ed3 docs(mom): multi-platform redesign with channel isolation
- Event-based architecture: agent forwards AgentSessionEvent to adapters
- Multi-adapter support via single config.json
- Access control: admins, DM permissions per adapter
- Channel namespacing by adapter name
- Channel isolation via bubblewrap in Linux/Docker environments
- Simplified directory structure and interfaces
2025-12-21 02:52:49 +01:00
Mario Zechner c97702cf91 Release v0.25.1 2025-12-21 02:43:47 +01:00
Mario Zechner 918750eb9e Fix tab completion for absolute paths
- Fix //tmp issue: distinguish slash commands from file paths by checking if anything precedes the /
- Fix symlinks to directories (like /tmp) not getting trailing slash
2025-12-21 02:41:38 +01:00
Mario Zechner bf51dd4126 Fix Gemini multimodal tool results causing flaky responses
For Gemini 3, images are now nested inside functionResponse.parts per the docs.
For older models, images are sent in a separate user message.

See: https://ai.google.dev/gemini-api/docs/function-calling#multimodal
2025-12-21 02:41:27 +01:00
Mario Zechner ce950ae96e Clean-up 2025-12-20 22:15:30 +01:00
Mario Zechner 62e23e2164 Add [Unreleased] section for next release cycle 2025-12-20 22:03:55 +01:00
Mario Zechner df07a74ad5 Release v0.25.0 2025-12-20 22:02:47 +01:00
Mario Zechner a81dc5eaca Add configurable OAuth storage backend and respect --models in model selector
- Add setOAuthStorage() and resetOAuthStorage() to pi-ai for custom storage backends
- Configure coding-agent to use its own configurable OAuth path via getOAuthPath()
- Model selector (/model command) now only shows models from --models scope when set
- Rewrite OAuth documentation in pi-ai README with examples

Fixes #255
2025-12-20 22:00:53 +01:00
Mario Zechner 0d13dbb2ee docs(coding-agent): add changelog entry for interruptible tool execution 2025-12-20 21:37:06 +01:00
Mario Zechner 6a319f9c3c Add OAuth providers to test suite and improve test coverage
Tests updated:
- abort.test.ts: Add Google Gemini CLI, add retries
- agent.test.ts: Add OAuth providers (Anthropic, GitHub Copilot, Gemini CLI, Antigravity), add retries, remove timeouts
- context-overflow.test.ts: Handle Cerebras 429 status code
- image-tool-result.test.ts: Add OAuth providers
- overflow.ts: Detect 429 as overflow for Cerebras

Removed obsolete debug/one-off tests:
- copilot-initiator.test.ts
- gemini-3-flash-tool-calling.test.ts
- google-thought-signature.test.ts
- mistral-debug.test.ts
- mistral-empty-assistant.test.ts
- mistral-sdk.test.ts
2025-12-20 21:34:19 +01:00
Mario Zechner fb1fdb6006 Fix orphaned tool calls by inserting synthetic empty results
When a user interrupts a tool call flow (sends a message without providing
tool results), APIs like OpenAI Responses and Anthropic fail because:
- OpenAI requires tool outputs for function calls
- OpenAI requires reasoning items to have their following items
- Anthropic requires non-empty content for error tool results

Instead of filtering out orphaned tool calls (which breaks thinking signatures),
we now insert synthetic empty tool results with isError: true and content
'No result provided'. This preserves the conversation structure and satisfies
all API requirements.
2025-12-20 21:34:19 +01:00
Mario Zechner 95fcda5887 Broader testing, more providers. 2025-12-20 21:34:19 +01:00
Mario Zechner 2a0283ecfd Fix token counts in google-gemini-cli.ts for anthropic models. 2025-12-20 21:34:18 +01:00
Mario Zechner 24f89cf070 Add out.jsonl to gitignore 2025-12-20 21:34:18 +01:00
Mario Zechner c359023c3f Add Google Gemini CLI and Antigravity OAuth providers
- Add google-gemini-cli provider: free Gemini 2.0/2.5 via Cloud Code Assist
- Add google-antigravity provider: free Gemini 3, Claude, GPT-OSS via sandbox
- Move OAuth infrastructure from coding-agent to ai package
- Fix thinking signature handling for cross-model handoff
- Fix OpenAI message ID length limit (max 64 chars)
- Add GitHub Copilot overflow pattern detection
- Add OAuth provider tests for context overflow and streaming
2025-12-20 21:34:18 +01:00
Mario Zechner 3266cac0f1 Fix coloring in footer when context usage is colored 2025-12-20 21:34:18 +01:00
Mario Zechner 14945df738 Merge pull request #261 from nicobailon/fix/mom-inline-image-attachments
fix: send Slack image attachments inline to LLM
2025-12-20 21:14:05 +01:00
Mario Zechner 1294239a7a fix(coding-agent): fix Google Cloud project discovery
Use correct API response format (cloudaicompanionProject) and proper
onboarding flow with tierId and metadata. Add retry logic for project
provisioning which may take time.
2025-12-20 10:29:09 +01:00
Mario Zechner b6fe07b618 feat(coding-agent): add Google Cloud Code Assist OAuth flow
- Add OAuth handler with PKCE flow and local callback server
- Automatic project discovery via loadCodeAssist/onboardUser endpoints
- Store credentials with projectId for API calls
- Encode token+projectId as JSON for provider to decode
- Register as 'google-cloud-code-assist' OAuth provider
2025-12-20 10:27:07 +01:00
Mario Zechner 36e17933d5 feat(ai): add Google Cloud Code Assist provider
- Add new API type 'google-cloud-code-assist' for Gemini CLI / Antigravity auth
- Extract shared Google utilities to google-shared.ts
- Implement streaming provider for Cloud Code Assist endpoint
- Add 7 models: gemini-3-pro-high/low, gemini-3-flash, claude-sonnet/opus, gpt-oss

Models use OAuth authentication and have sh cost (uses Google account quota).
OAuth flow will be implemented in coding-agent in a follow-up.
2025-12-20 10:20:30 +01:00
Mario Zechner 04dcdebbc6 docs: add changelog entry for Anthropic SDK retries 2025-12-20 09:57:03 +01:00
Mario Zechner 0fc6689dfb fix(ai): re-enable SDK retries for Anthropic provider
The SDK default of 2 retries handles transient HTTP failures quickly,
while coding-agent retries handle persistent errors with user feedback.
2025-12-20 09:56:11 +01:00
Mario Zechner c1382818cc fix(coding-agent): add connection error to retryable errors
Fixes #252
2025-12-20 09:55:03 +01:00
Mario Zechner 3f307f8786 docs: add changelog entries for #251 and #253 2025-12-20 09:52:57 +01:00
Mario Zechner b7c3cf9436 fix(coding-agent): clamp thinking level to model capabilities
- setThinkingLevel() now clamps xhigh to high when model doesn't support it
- Model changes automatically re-clamp the current thinking level
- Fixed /model command to use session.setModel() instead of agent.setModel()
- Footer and editor border color update after model/thinking changes

Closes #253
2025-12-20 09:52:57 +01:00
Mario Zechner 085294b764 Release v0.24.5 2025-12-19 22:09:35 +01:00
Mario Zechner d2276ab654 fix(tui): fix input buffering in iTerm2 causing delayed keypresses
The cell size query response parser was incorrectly holding back Kitty
keyboard protocol sequences, thinking they might be incomplete cell size
responses. This caused Ctrl+C/Ctrl+D to require multiple presses in iTerm2.

Fixed by only waiting for more data if the buffer doesn't end with a
terminal escape sequence terminator character.
2025-12-19 22:08:36 +01:00
Mario Zechner f377c3c9c3 Release v0.24.4 2025-12-19 21:54:36 +01:00
Mario Zechner 8d1229b5ec fix(coding-agent): use key helpers for arrow keys and Enter
Fixed arrow key and Enter detection in selector components to work
with Kitty protocol when Caps Lock or Num Lock is enabled.

Updated: oauth-selector, user-message-selector, hook-selector,
hook-input, model-selector, session-selector
2025-12-19 21:53:04 +01:00
Mario Zechner 65c292b7dd Fix outdated editor tests for grapheme-aware cursor movement 2025-12-19 21:41:28 +01:00
Mario Zechner ad4eb3afa6 Release v0.24.3 2025-12-19 21:36:16 +01:00
Mario Zechner ad9d68e488 Fix footer overflow on narrow terminals, add /arminsayshi easter egg 2025-12-19 21:35:09 +01:00
Mario Zechner 5095b4eb02 Release v0.24.2 2025-12-19 21:12:53 +01:00
Mario Zechner 84eaad8029 fix(tui): use isBackspace and isEnter helpers in Editor
Fixes Backspace and Enter not working with Caps Lock enabled.
The Kitty protocol sends lock key bits in modifiers which broke
the raw byte detection.
2025-12-19 21:08:24 +01:00
Mario Zechner cbd20b58a6 fix(tui): add isHome, isEnd, isDelete helpers for Kitty protocol
Extended the Kitty protocol parser to handle functional keys with
~ terminator (Delete, Insert, PageUp, PageDown) and Home/End keys.
Updated editor.ts and input.ts to use the new helpers.
2025-12-19 21:00:20 +01:00
Mario Zechner 716516d61e fix(tui): use isEnter and isBackspace helpers in Input component
Fixes Kitty protocol handling for Enter and Backspace in the Input
component, matching the Editor component fix.
2025-12-19 20:57:03 +01:00