Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
e2d4445
feat(backend): add POST /v2/chat/completions endpoint (M1, #6594)
beastoin Apr 14, 2026
19258d1
feat(backend): add chat completions route handler (M1, #6594)
beastoin Apr 14, 2026
686d007
feat(backend): register chat_completions route module (M1, #6594)
beastoin Apr 14, 2026
48ea70f
feat(backend): register chat_completions model module (M1, #6594)
beastoin Apr 14, 2026
1d06b90
feat(backend): wire chat_completions_routes into main router (M1, #6594)
beastoin Apr 14, 2026
11d5592
feat(desktop): add pi-mono extension package manifest (M2, #6594)
beastoin Apr 14, 2026
6b41474
feat(desktop): add omi-provider pi-mono extension (M2, #6594)
beastoin Apr 14, 2026
2fda9f5
feat(bridge): add HarnessAdapter interface (M3, #6592/#6594)
beastoin Apr 14, 2026
54f354d
feat(bridge): add PiMonoAdapter for pi-mono RPC harness (M3, #6594)
beastoin Apr 14, 2026
f53afa8
feat(desktop): add piMono bridge mode to ChatProvider (M4, #6594)
beastoin Apr 14, 2026
11e5bfa
feat(desktop): add Pi-Mono option to Settings AI Provider picker (M4,…
beastoin Apr 14, 2026
d824c1c
docs(desktop): add changelog entry for pi-mono harness (#6594)
beastoin Apr 14, 2026
74b0a55
fix(backend): translate tool_choice from OpenAI to Anthropic format (…
beastoin Apr 14, 2026
ae03f58
fix(bridge): use activeSessionId for turn_end resolution (#6594)
beastoin Apr 14, 2026
c0bc260
fix(desktop): remove image input claim from pi-mono extension (#6594)
beastoin Apr 14, 2026
d9f3e3d
feat(desktop): pass HARNESS_MODE env var to bridge subprocess (#6594)
beastoin Apr 14, 2026
569fd80
fix(desktop): treat piMono as Omi mode for cost tracking (#6594)
beastoin Apr 14, 2026
ff18826
feat(bridge): implement runPiMonoMode() for pi-mono harness dispatch …
beastoin Apr 14, 2026
a0e40df
fix(backend): strip tools when tool_choice is "none" (#6594)
beastoin Apr 14, 2026
000d0a8
fix(desktop): skip client-side usage recording for piMono mode (#6594)
beastoin Apr 14, 2026
f9c8198
fix(desktop): inject Firebase ID token for piMono auth (#6594)
beastoin Apr 14, 2026
0fa3c54
fix(bridge): store and apply system prompts in PiMonoAdapter sessions…
beastoin Apr 14, 2026
fbac8a7
fix(bridge): multi-session support and fix duplicate result in piMono…
beastoin Apr 14, 2026
440fcd9
feat(bridge): add refresh_token message type to bridge protocol (#6594)
beastoin Apr 14, 2026
27f7737
fix(bridge): fix ToolExecutor signature, session prompt restore, toke…
beastoin Apr 14, 2026
800f1f5
feat(bridge): add restoreSystemPrompt method to PiMonoAdapter (#6594)
beastoin Apr 14, 2026
324c6bf
fix(desktop): periodic Firebase token refresh for piMono bridge (#6594)
beastoin Apr 14, 2026
f27a8de
fix(bridge): map claude-* model IDs to omi-* and restart subprocess o…
beastoin Apr 14, 2026
4f2adca
fix(bridge): restart subprocess on token refresh and strip images in …
beastoin Apr 14, 2026
2cc3085
fix(bridge): non-destructive token refresh and complete model mapping…
beastoin Apr 14, 2026
70fc541
fix(bridge): non-destructive token refresh in piMono mode (#6594)
beastoin Apr 14, 2026
c3777cf
fix(bridge): idle-safe subprocess restart for token refresh (#6594)
beastoin Apr 14, 2026
ed490b3
fix(bridge): re-warm sessions after token refresh restart (#6594)
beastoin Apr 14, 2026
4b22422
fix(bridge): deferred token restart with pendingTokenRefresh flag (#6…
beastoin Apr 14, 2026
74ebfea
fix(bridge): execute deferred token restart after prompt completes (#…
beastoin Apr 14, 2026
cb94a44
test(backend): add boundary and edge case tests for chat_completions …
beastoin Apr 14, 2026
08b5f17
fix(backend): reject invalid tool_choice with 400 (#6594)
beastoin Apr 14, 2026
1f42644
fix(desktop): hard-fail pi-mono start without Firebase token (#6594)
beastoin Apr 14, 2026
157db03
fix(bridge): pi-mono per-prompt correlation + auth hardening (#6594)
beastoin Apr 14, 2026
8354ec1
fix(bridge): pi-mono hard session isolation + token hard-fail (#6594)
beastoin Apr 14, 2026
1e13d78
test(backend): boundary coverage for invalid tool_choice (#6594)
beastoin Apr 14, 2026
24c8ddf
test(bridge): pi-mono prompt correlation unit tests (#6594)
beastoin Apr 14, 2026
6647361
fix(bridge): pi-mono passes raw token as OMI_API_KEY to avoid double-…
beastoin Apr 15, 2026
acbba86
test(bridge): regression guards for OMI_API_KEY raw-token invariant (…
beastoin Apr 15, 2026
8c73b30
fix(backend): accept max_completion_tokens field in chat completions …
beastoin Apr 15, 2026
80d0f58
fix(backend): route developer role + max_completion_tokens for pi (#6…
beastoin Apr 15, 2026
5dbfe0e
feat(desktop): import pi-coding-agent ExtensionAPI type for pi-mono (…
beastoin Apr 15, 2026
3d017e8
feat(bridge): add @mariozechner/pi-coding-agent dependency (#6594)
beastoin Apr 15, 2026
28a9f2c
chore(bridge): lockfile for @mariozechner/pi-coding-agent (#6594)
beastoin Apr 15, 2026
a130f04
fix(bridge): bake system prompt before pi restart in piMono session s…
beastoin Apr 15, 2026
ec7a9d6
build(desktop): copy pi-mono-extension into bundle via run.sh (#6594)
beastoin Apr 15, 2026
1a4b55f
feat(desktop): default chat harness to piMono (#6594)
beastoin Apr 15, 2026
2296906
feat(desktop): settings picker offers Omi AI (piMono) or user Claude …
beastoin Apr 15, 2026
9af7134
fix(desktop): ACPBridge piMono points pi at Rust desktop-backend (#6594)
beastoin Apr 15, 2026
5d6c0a5
build(desktop): bundle pi-mono-extension in codemagic release (#6594)
beastoin Apr 15, 2026
c500080
feat(desktop): pi-mono denylist classifier and audit log (#6594)
beastoin Apr 15, 2026
0347e08
test(desktop): pi-mono denylist classifier unit tests (#6594)
beastoin Apr 15, 2026
fc31917
build(desktop): wire pi-mono-extension test script (#6594)
beastoin Apr 15, 2026
03b992f
fix(desktop): clean pi-mono adapter debug noise, handle auto_retry (#…
beastoin Apr 15, 2026
748b898
fix(desktop): close pi-mono denylist bypasses from review round 2 (#6…
beastoin Apr 15, 2026
f9b41f2
test(desktop): pi-mono denylist regression cases for review round 2 (…
beastoin Apr 15, 2026
118fdef
fix(desktop): close quoted-target bypass in pi-mono denylist (#6594)
beastoin Apr 15, 2026
cde86fe
test(desktop): pi-mono denylist regression cases for review round 3 (…
beastoin Apr 15, 2026
460a00c
fix(desktop): close pi-mono denylist shell-expansion bypasses (review…
beastoin Apr 15, 2026
583c2e1
test(desktop): pi-mono round-4 regressions + verbatim reviewer probe pin
beastoin Apr 15, 2026
aab9b09
fix(desktop): export appendAudit for pi-mono audit fail-safe test (#6…
beastoin Apr 15, 2026
a75a4bb
test(desktop): pi-mono round-5 tester coverage gaps + audit fail-safe…
beastoin Apr 15, 2026
90a060b
ci(desktop): wire pi-mono-extension classifier tests into codemagic (…
beastoin Apr 15, 2026
89e6333
fix(desktop): require user's own Anthropic key for ChatLab
beastoin Apr 16, 2026
dfd41cd
fix(desktop): add model aliases to backend allowlist for app compat (…
beastoin Apr 16, 2026
545ac69
fix(desktop): switch OnboardingChatView to piMono harness mode (#6500)
beastoin Apr 16, 2026
ac4b4ae
fix(desktop): switch OnboardingPagedIntroCoordinator to piMono harnes…
beastoin Apr 16, 2026
5027358
fix(desktop): switch OnboardingMemoryLogImportService to piMono harne…
beastoin Apr 16, 2026
1439153
fix(desktop): switch AppleNotesReaderService to piMono harness mode (…
beastoin Apr 16, 2026
8e9ea6b
fix(desktop): switch CalendarReaderService to piMono harness mode (#6…
beastoin Apr 16, 2026
f2248c9
fix(desktop): switch GmailReaderService to piMono harness mode (#6500)
beastoin Apr 16, 2026
4f1cd3d
fix(desktop): switch TaskChatState to piMono harness mode (#6500)
beastoin Apr 16, 2026
2fae891
test(desktop): add resolve_model tests for model aliases (#6500)
beastoin Apr 16, 2026
8f55efb
test(desktop): add piMono wiring tests and source-level assertion (#6…
beastoin Apr 16, 2026
36daa12
fix(desktop): fix FloatingBarVoiceResponseSettingsTests actor isolati…
beastoin Apr 16, 2026
8fe3d81
fix(desktop): fix DateValidationTests actor isolation (#6500)
beastoin Apr 16, 2026
a22e84a
fix(desktop): fix SubscriptionPlanCatalogMergerTests missing throws (…
beastoin Apr 16, 2026
2ed3226
test(desktop): remove ACPBridge construction tests that trigger Fireb…
beastoin Apr 16, 2026
e859a20
fix(desktop): resolve pi-mono CLI directly to avoid ditto symlink bre…
beastoin Apr 16, 2026
d215133
feat(desktop): convert OpenAI image_url to Anthropic image format in …
beastoin Apr 16, 2026
79f5042
fix(desktop): set LSMinimumSystemVersion to 14.0 instead of unexpande…
beastoin Apr 16, 2026
02fb583
feat(desktop): enable screenshot images and omi-tools relay for pi-mo…
beastoin Apr 16, 2026
b5ab3a5
docs(desktop): document OMI_BRIDGE_PIPE forwarding in pi-mono adapter…
beastoin Apr 16, 2026
e5aea9c
feat(desktop): register 13 Omi tools and add yolo mode in pi-mono ext…
beastoin Apr 16, 2026
1587c71
fix(desktop): add pipe timeout and disconnect handling for omi tool c…
beastoin Apr 16, 2026
2339905
fix(desktop): gate OMI_YOLO_MODE with explicit forwarding and audit l…
beastoin Apr 16, 2026
dcdf3e8
fix(desktop): normalize write/edit paths to block relative traversal …
beastoin Apr 16, 2026
09ead0c
test(desktop): add relative path traversal regression tests (#6594)
beastoin Apr 16, 2026
9d9dce1
fix(desktop): export omi tool relay internals for unit testing (#6594)
beastoin Apr 16, 2026
260c7ab
test(desktop): add pipe relay tests for timeout, disconnect, malforme…
beastoin Apr 16, 2026
ed29ef2
fix(desktop): route tool_result messages in piMono mode (#6594)
beastoin Apr 16, 2026
91d0da1
test(desktop): add tool relay integration tests for all 13 Omi tools …
beastoin Apr 16, 2026
f9b2fb8
fix(desktop): update all model routes to Claude 4.6 (#6633)
beastoin Apr 16, 2026
544e30b
fix(desktop): update chat_completions tests for Claude 4.6 models (#6…
beastoin Apr 16, 2026
b883255
fix(desktop): update ChatProvider labRunQuestion model to 4.6 (#6633)
beastoin Apr 16, 2026
53a906d
fix(desktop): update ChatLabView model to 4.6 (#6633)
beastoin Apr 16, 2026
dfa67ca
refactor(desktop): use pi-mono defineTool() + TypeBox for Omi tool re…
beastoin Apr 17, 2026
d6bb888
test(desktop): update Omi tool tests for defineTool() API (#6594)
beastoin Apr 17, 2026
129bcb1
test(desktop): add coverage for TypeBox schemas, AbortSignal, promptG…
beastoin Apr 17, 2026
832394f
fix(desktop): strengthen semantic_search optional field test (#6594)
beastoin Apr 17, 2026
72fabc4
feat(desktop): add capture_screen tool to ChatToolExecutor (#6594)
beastoin Apr 18, 2026
9e3109c
feat(desktop): add capture_screen OMI tool to pi-mono extension (#6594)
beastoin Apr 18, 2026
99c22f0
feat(desktop): enable pi-mono auto-discovery of extensions and MCPs (…
beastoin Apr 18, 2026
97dd636
fix(desktop): prevent double tool execution in pi-mono mode (#6594)
beastoin Apr 18, 2026
aa06f74
test(desktop): update OMI tool count to 14 for capture_screen (#6594)
beastoin Apr 18, 2026
dcb6490
test(desktop): add capture_screen to tool-relay test fixtures (#6594)
beastoin Apr 18, 2026
94a65c3
Add tests for auto-discovery and tool_use filtering invariants
beastoin Apr 18, 2026
ecb1fa9
Upgrade source-level tests to behavioral: mock spawn and exercise fil…
beastoin Apr 18, 2026
f0f01dd
Add security note for auto-discovery trust boundary
beastoin Apr 18, 2026
cde9663
Add source-level guards for tool_use filter alongside behavioral tests
beastoin Apr 18, 2026
726b1b4
Add Swift tests for capture_screen tool dispatch and behavior
beastoin Apr 18, 2026
d529b1a
Fix pi-mono turn_end race: keep prompt alive during tool execution
beastoin Apr 19, 2026
ead1c9b
Fix search_tasks: use try? for individual record lookups
beastoin Apr 19, 2026
bdb466c
Fix embedding service: check HTTP status before JSON parse
beastoin Apr 19, 2026
223612a
Fix turn_end stopReason: use camelCase "toolUse" from pi-ai SDK
beastoin Apr 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions codemagic.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1952,6 +1952,25 @@ workflows:
npm run build
cd ..

- name: Test pi-mono-extension denylist classifier
script: |
# Run the pi-mono-extension unit tests so a `classifyBash()` /
# `classifyFileWrite()` / audit-log fail-safe regression fails the
# Mac app build before the tagged release is cut. The tests live
# in `pi-mono-extension/index.test.ts` and use node:test + the
# `--experimental-strip-types` flag that ships in Node 22+. We
# avoid a hard dependency on the codemagic runner's Node version
# by using `npx tsx` as a version-agnostic TypeScript loader that
# still delegates to node:test.
cd pi-mono-extension
if node --experimental-strip-types --test index.test.ts; then
echo "pi-mono-extension tests passed (native Node --experimental-strip-types)"
else
echo "Falling back to npx tsx for older Node versions..."
npx --yes tsx@4.19.2 --test index.test.ts
fi
cd ..

- name: Prepare universal ffmpeg (arm64 + x86_64)
script: |
FFMPEG_RESOURCE="Desktop/Sources/Resources/ffmpeg"
Expand Down Expand Up @@ -2143,6 +2162,18 @@ workflows:
exit 1
fi

# Copy pi-mono-extension (default harness — registers the Omi provider
# with pi and routes requests to the Rust desktop-backend /v2/chat/completions
# proxy). Without this, piMono mode cannot start and the app is broken.
if [ -d "pi-mono-extension" ]; then
mkdir -p "$APP_BUNDLE/Contents/Resources/pi-mono-extension"
cp -f pi-mono-extension/index.ts "$APP_BUNDLE/Contents/Resources/pi-mono-extension/"
cp -f pi-mono-extension/package.json "$APP_BUNDLE/Contents/Resources/pi-mono-extension/"
else
echo "ERROR: pi-mono-extension directory not found"
exit 1
fi

# Update Info.plist metadata
/usr/libexec/PlistBuddy -c "Set :CFBundleExecutable $BINARY_NAME" "$APP_BUNDLE/Contents/Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $BUNDLE_ID" "$APP_BUNDLE/Contents/Info.plist"
Expand Down
3 changes: 2 additions & 1 deletion desktop/Backend-Rust/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ mod services;

use auth::{firebase_auth_extension, FirebaseAuth};
use config::Config;
use routes::{action_items_routes, advice_routes, agent_routes, apps_routes, auth_routes, chat_routes, chat_sessions_routes, config_routes, conversations_routes, crisp_routes, daily_score_routes, focus_sessions_routes, folder_routes, goals_routes, health_routes, knowledge_graph_routes, llm_usage_routes, memories_routes, messages_routes, people_routes, personas_routes, proxy_routes, screen_activity_routes, staged_tasks_routes, stats_routes, tts_routes, updates_routes, users_routes, webhook_routes};
use routes::{action_items_routes, advice_routes, agent_routes, apps_routes, auth_routes, chat_completions_routes, chat_routes, chat_sessions_routes, config_routes, conversations_routes, crisp_routes, daily_score_routes, focus_sessions_routes, folder_routes, goals_routes, health_routes, knowledge_graph_routes, llm_usage_routes, memories_routes, messages_routes, people_routes, personas_routes, proxy_routes, screen_activity_routes, staged_tasks_routes, stats_routes, tts_routes, updates_routes, users_routes, webhook_routes};
use services::{FirestoreService, IntegrationService, RedisService};

/// Application state shared across handlers
Expand Down Expand Up @@ -227,6 +227,7 @@ async fn main() {
.merge(screen_activity_routes())
.merge(proxy_routes())
.merge(tts_routes())
.merge(chat_completions_routes())
.merge(config_routes())
.with_state(state);

Expand Down
Loading
Loading