Commit Graph
100 Commits
Author SHA1 Message Date
Mario Zechner 61cd977926 Add empty Unreleased section 2025-12-24 21:26:15 +01:00
Mario Zechner 8fdd77b652 Release v0.27.9 2025-12-24 21:25:20 +01:00
Mario Zechner ac5f4a77cc Fix model selector not showing models with settings.json API keys
Fixes #295
2025-12-24 21:23:44 +01:00
Mario Zechner a96b9201f9 Add empty Unreleased section 2025-12-24 20:53:23 +01:00
Mario Zechner a965b6f160 Release v0.27.8 - OAuth takes priority over settings.json API keys 2025-12-24 20:52:22 +01:00
Mario Zechner 60768b90f3 Add [Unreleased] section for next cycle 2025-12-24 18:31:13 +01:00
Mario Zechner 89630b0d44 Release v0.27.7 2025-12-24 18:30:53 +01:00
Mario Zechner 29379ea0a6 Fix thinking tag leakage by converting unsigned blocks to plain text
Closes #302
2025-12-24 18:15:19 +01:00
Mario Zechner 2b22c3ce75 Add [Unreleased] section to changelog 2025-12-24 14:00:04 +01:00
Mario Zechner 3eb460ee50 Release v0.27.6 2025-12-24 13:59:09 +01:00
Mario Zechner 43add86ebf Remove duplicate Custom Compaction example, reference main docs 2025-12-24 13:56:00 +01:00
Mario Zechner 705ba5d4f2 Improve compaction hooks: add signal, no timeout, SessionManager cleanup, docs 2025-12-24 13:54:05 +01:00
Mario Zechner a2664ba38a Use clearer abbreviations in compaction diagrams 2025-12-24 12:59:45 +01:00
Mario Zechner 3c5f4920c0 Improve compaction diagrams with legend and realistic message types 2025-12-24 12:58:00 +01:00
Mario Zechner 27250c860b Add reference to compaction.ts source file 2025-12-24 12:55:47 +01:00
Mario Zechner 35a40b2197 Clarify that cut point is always user/assistant/bash, never tool result 2025-12-24 12:55:15 +01:00
Mario Zechner 5f41a384cc Add split turn diagram to compaction docs 2025-12-24 12:53:23 +01:00
Mario Zechner 699702e366 Clarify keepRecentTokens is configurable 2025-12-24 12:51:41 +01:00
Mario Zechner 51aa1339ef Add LLM context diagram to compaction docs 2025-12-24 12:49:45 +01:00
Mario Zechner ea3ab718ea Fix compaction ASCII diagram to show append-only behavior 2025-12-24 12:49:09 +01:00
Mario Zechner ea16af8b72 Add ASCII diagram to compaction docs 2025-12-24 12:48:16 +01:00
Mario Zechner 403faafdbe Add previousSummary to before_compact hook event 2025-12-24 12:47:12 +01:00
Mario Zechner 97bbd7a642 Clarify messagesToSummarize starts after last compaction 2025-12-24 12:44:05 +01:00
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