@zerwiz/ymir 0.1.34 → 0.1.35
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 +56 -0
- package/apps/README.md +4 -0
- package/apps/hlidskjalf/README.md +68 -0
- package/apps/hlidskjalf/android/app/build.gradle +73 -0
- package/apps/hlidskjalf/android/app/capacitor.build.gradle +19 -0
- package/apps/hlidskjalf/android/app/proguard-rules.pro +21 -0
- package/apps/hlidskjalf/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +26 -0
- package/apps/hlidskjalf/android/app/src/main/AndroidManifest.xml +41 -0
- package/apps/hlidskjalf/android/app/src/main/java/org/zerwiz/ymir/MainActivity.java +5 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable/splash.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
- package/apps/hlidskjalf/android/app/src/main/res/layout/activity_main.xml +12 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/apps/hlidskjalf/android/app/src/main/res/values/ic_launcher_background.xml +4 -0
- package/apps/hlidskjalf/android/app/src/main/res/values/strings.xml +7 -0
- package/apps/hlidskjalf/android/app/src/main/res/values/styles.xml +22 -0
- package/apps/hlidskjalf/android/app/src/main/res/xml/file_paths.xml +5 -0
- package/apps/hlidskjalf/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +18 -0
- package/apps/hlidskjalf/android/build.gradle +29 -0
- package/apps/hlidskjalf/android/capacitor.settings.gradle +3 -0
- package/apps/hlidskjalf/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/apps/hlidskjalf/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/apps/hlidskjalf/android/gradle.properties +22 -0
- package/apps/hlidskjalf/android/gradlew +248 -0
- package/apps/hlidskjalf/android/gradlew.bat +92 -0
- package/apps/hlidskjalf/android/settings.gradle +5 -0
- package/apps/hlidskjalf/android/variables.gradle +16 -0
- package/apps/hlidskjalf/capacitor.config.ts +26 -0
- package/apps/hlidskjalf/dist/apple-touch-icon.png +0 -0
- package/apps/hlidskjalf/dist/assets/index-BWmNIyaG.css +1 -0
- package/apps/hlidskjalf/dist/assets/index-k7QEfNto.js +88 -0
- package/apps/hlidskjalf/dist/assets/index-k7QEfNto.js.map +1 -0
- package/apps/hlidskjalf/dist/icon.svg +7 -0
- package/apps/hlidskjalf/dist/index.html +64 -0
- package/apps/hlidskjalf/dist/manifest.webmanifest +31 -0
- package/apps/hlidskjalf/dist/og.jpg +0 -0
- package/apps/hlidskjalf/dist/og.png +0 -0
- package/apps/hlidskjalf/dist/og.svg +64 -0
- package/apps/hlidskjalf/dist/sw.js +39 -0
- package/apps/hlidskjalf/dist/ymir-icon.png +0 -0
- package/apps/hlidskjalf/dist/ymir-mark.svg +62 -0
- package/apps/hlidskjalf/electron/icon.png +0 -0
- package/apps/hlidskjalf/electron/main.cjs +236 -0
- package/apps/hlidskjalf/electron/preload.cjs +8 -0
- package/apps/hlidskjalf/electron/smidja-icon.png +0 -0
- package/apps/hlidskjalf/electron/ymir-hlidskjalf.desktop.in +12 -0
- package/apps/hlidskjalf/electron/ymir-smidja.desktop.in +12 -0
- package/apps/hlidskjalf/index.html +63 -0
- package/apps/hlidskjalf/package-lock.json +5398 -0
- package/apps/hlidskjalf/package.json +55 -0
- package/apps/hlidskjalf/public/apple-touch-icon.png +0 -0
- package/apps/hlidskjalf/public/icon.svg +7 -0
- package/apps/hlidskjalf/public/manifest.webmanifest +31 -0
- package/apps/hlidskjalf/public/og.jpg +0 -0
- package/apps/hlidskjalf/public/og.png +0 -0
- package/apps/hlidskjalf/public/og.svg +64 -0
- package/apps/hlidskjalf/public/sw.js +39 -0
- package/apps/hlidskjalf/public/ymir-icon.png +0 -0
- package/apps/hlidskjalf/public/ymir-mark.svg +62 -0
- package/apps/hlidskjalf/server/accounts.ts +159 -0
- package/apps/hlidskjalf/server/index.ts +2045 -0
- package/apps/hlidskjalf/src/app/App.tsx +116 -0
- package/apps/hlidskjalf/src/app/BottomStream.tsx +128 -0
- package/apps/hlidskjalf/src/app/MobileNav.tsx +87 -0
- package/apps/hlidskjalf/src/app/Rail.tsx +106 -0
- package/apps/hlidskjalf/src/app/Shell.tsx +135 -0
- package/apps/hlidskjalf/src/app/Topbar.tsx +130 -0
- package/apps/hlidskjalf/src/components/AccentPicker.tsx +207 -0
- package/apps/hlidskjalf/src/components/AccountMenu.tsx +115 -0
- package/apps/hlidskjalf/src/components/AgentCard.tsx +75 -0
- package/apps/hlidskjalf/src/components/EmberBackground.tsx +36 -0
- package/apps/hlidskjalf/src/components/Emblem.tsx +48 -0
- package/apps/hlidskjalf/src/components/Halls.tsx +155 -0
- package/apps/hlidskjalf/src/components/LoginModal.tsx +329 -0
- package/apps/hlidskjalf/src/components/Markdown.tsx +10 -0
- package/apps/hlidskjalf/src/components/MetricTile.tsx +40 -0
- package/apps/hlidskjalf/src/components/ModelPicker.tsx +100 -0
- package/apps/hlidskjalf/src/components/Overlay.tsx +134 -0
- package/apps/hlidskjalf/src/components/PRCard.tsx +154 -0
- package/apps/hlidskjalf/src/components/RecallPanel.tsx +116 -0
- package/apps/hlidskjalf/src/components/RuneTag.tsx +23 -0
- package/apps/hlidskjalf/src/components/Status.tsx +35 -0
- package/apps/hlidskjalf/src/components/TaskChip.tsx +23 -0
- package/apps/hlidskjalf/src/components/TraceRow.tsx +28 -0
- package/apps/hlidskjalf/src/data/lore.ts +127 -0
- package/apps/hlidskjalf/src/data/metadata.ts +147 -0
- package/apps/hlidskjalf/src/data/mythology.ts +95 -0
- package/apps/hlidskjalf/src/data/realms.ts +167 -0
- package/apps/hlidskjalf/src/gates/Cron.tsx +77 -0
- package/apps/hlidskjalf/src/gates/Decisions.tsx +67 -0
- package/apps/hlidskjalf/src/gates/Files.tsx +138 -0
- package/apps/hlidskjalf/src/gates/Fleet.tsx +184 -0
- package/apps/hlidskjalf/src/gates/Forge.tsx +486 -0
- package/apps/hlidskjalf/src/gates/OmniChat.tsx +217 -0
- package/apps/hlidskjalf/src/gates/Processes.tsx +162 -0
- package/apps/hlidskjalf/src/gates/Profile.tsx +225 -0
- package/apps/hlidskjalf/src/gates/Reviews.tsx +33 -0
- package/apps/hlidskjalf/src/gates/Runes.tsx +116 -0
- package/apps/hlidskjalf/src/gates/Runtime.tsx +106 -0
- package/apps/hlidskjalf/src/gates/Sessions.tsx +109 -0
- package/apps/hlidskjalf/src/gates/Stats.tsx +268 -0
- package/apps/hlidskjalf/src/gates/Tasks.tsx +173 -0
- package/apps/hlidskjalf/src/gates/Trace.tsx +155 -0
- package/apps/hlidskjalf/src/gates/Well.tsx +154 -0
- package/apps/hlidskjalf/src/gates/Worktrees.tsx +48 -0
- package/apps/hlidskjalf/src/hooks/useTenantDef.ts +13 -0
- package/apps/hlidskjalf/src/main.tsx +31 -0
- package/apps/hlidskjalf/src/services/api.ts +404 -0
- package/apps/hlidskjalf/src/services/auth.ts +107 -0
- package/apps/hlidskjalf/src/services/stream.ts +35 -0
- package/apps/hlidskjalf/src/state/store.ts +648 -0
- package/apps/hlidskjalf/src/state/ui.ts +62 -0
- package/apps/hlidskjalf/src/styles/auth.css +485 -0
- package/apps/hlidskjalf/src/styles/components.css +1259 -0
- package/apps/hlidskjalf/src/styles/forge.css +115 -0
- package/apps/hlidskjalf/src/styles/global.css +167 -0
- package/apps/hlidskjalf/src/styles/menus.css +175 -0
- package/apps/hlidskjalf/src/styles/mobile.css +298 -0
- package/apps/hlidskjalf/src/styles/overlays.css +205 -0
- package/apps/hlidskjalf/src/styles/shell.css +641 -0
- package/apps/hlidskjalf/src/types.ts +251 -0
- package/apps/hlidskjalf/src/vite-env.d.ts +9 -0
- package/apps/hlidskjalf/static/landing.md +6 -0
- package/apps/hlidskjalf/tsconfig.json +25 -0
- package/apps/hlidskjalf/vite.config.ts +49 -0
- package/apps/hlidskjalf-mobile/App.tsx +93 -0
- package/apps/hlidskjalf-mobile/app.json +13 -0
- package/apps/hlidskjalf-mobile/index.ts +4 -0
- package/apps/hlidskjalf-mobile/package.json +35 -0
- package/apps/hlidskjalf-mobile/public/icon.svg +7 -0
- package/apps/hlidskjalf-mobile/tsconfig.json +4 -0
- package/apps/odrerir/.astro/content.d.ts +159 -0
- package/apps/odrerir/.astro/dev.json +24 -0
- package/apps/odrerir/.astro/settings.json +5 -0
- package/apps/odrerir/.astro/types.d.ts +2 -0
- package/apps/odrerir/astro.config.mjs +79 -0
- package/apps/odrerir/dist/apple-touch-icon.png +0 -0
- package/apps/odrerir/dist/favicon-192.png +0 -0
- package/apps/odrerir/dist/favicon-32.png +0 -0
- package/apps/odrerir/dist/favicon-512.png +0 -0
- package/apps/odrerir/dist/favicon.svg +53 -0
- package/apps/odrerir/dist/icon.svg +7 -0
- package/apps/odrerir/dist/index.html +837 -0
- package/apps/odrerir/dist/og-square.png +0 -0
- package/apps/odrerir/dist/og-story.png +0 -0
- package/apps/odrerir/dist/og.png +0 -0
- package/apps/odrerir/dist/safari-pinned-tab.svg +7 -0
- package/apps/odrerir/dist/site.webmanifest +16 -0
- package/apps/odrerir/dist/styles/cloth.css +112 -0
- package/apps/odrerir/dist/styles/livehall.css +278 -0
- package/apps/odrerir/electron/icon.png +0 -0
- package/apps/odrerir/electron/main.cjs +183 -0
- package/apps/odrerir/electron/ymir-odrerir.desktop.in +12 -0
- package/apps/odrerir/package-lock.json +4195 -0
- package/apps/odrerir/package.json +30 -0
- package/apps/odrerir/public/apple-touch-icon.png +0 -0
- package/apps/odrerir/public/favicon-192.png +0 -0
- package/apps/odrerir/public/favicon-32.png +0 -0
- package/apps/odrerir/public/favicon-512.png +0 -0
- package/apps/odrerir/public/favicon.svg +53 -0
- package/apps/odrerir/public/icon.svg +7 -0
- package/apps/odrerir/public/og-square.png +0 -0
- package/apps/odrerir/public/og-story.png +0 -0
- package/apps/odrerir/public/og.png +0 -0
- package/apps/odrerir/public/safari-pinned-tab.svg +7 -0
- package/apps/odrerir/public/site.webmanifest +16 -0
- package/apps/odrerir/scripts/extract-cloth.mjs +101 -0
- package/apps/odrerir/src/index.html +837 -0
- package/apps/odrerir/src/styles/cloth.css +112 -0
- package/apps/odrerir/src/styles/livehall.css +278 -0
- package/apps/sessrumnir/.github/ISSUE_TEMPLATE/bug_report.yml +99 -0
- package/apps/sessrumnir/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/apps/sessrumnir/.github/ISSUE_TEMPLATE/feature_request.yml +46 -0
- package/apps/sessrumnir/.github/PULL_REQUEST_TEMPLATE.md +56 -0
- package/apps/sessrumnir/.github/SUPPORT.md +18 -0
- package/apps/sessrumnir/.github/workflows/build.yml +133 -0
- package/apps/sessrumnir/AGENTS.md +540 -0
- package/apps/sessrumnir/CLA.md +63 -0
- package/apps/sessrumnir/CONTRIBUTING.md +233 -0
- package/apps/sessrumnir/LICENSE +200 -0
- package/apps/sessrumnir/NOTICE +33 -0
- package/apps/sessrumnir/README.md +329 -0
- package/apps/sessrumnir/bin/sessrumnir-web.sh +117 -0
- package/apps/sessrumnir/bin/sessrumnir.js +169 -0
- package/apps/sessrumnir/docs/CNAME +1 -0
- package/apps/sessrumnir/docs/favicon.ico +0 -0
- package/apps/sessrumnir/docs/icon-512.png +0 -0
- package/apps/sessrumnir/docs/index.html +441 -0
- package/apps/sessrumnir/docs/robots.txt +4 -0
- package/apps/sessrumnir/docs/screenshots/Screenshot_20260824_181929.png +0 -0
- package/apps/sessrumnir/docs/screenshots/Screenshot_20260824_182005.png +0 -0
- package/apps/sessrumnir/docs/screenshots/Screenshot_20260824_182020.png +0 -0
- package/apps/sessrumnir/docs/screenshots/Screenshot_20260824_182039.png +0 -0
- package/apps/sessrumnir/docs/screenshots/Screenshot_20260824_182117.png +0 -0
- package/apps/sessrumnir/docs/screenshots/Screenshot_20260824_182225.png +0 -0
- package/apps/sessrumnir/docs/screenshots/Screenshot_20260824_182248.png +0 -0
- package/apps/sessrumnir/docs/screenshots/Screenshot_20260824_182322.png +0 -0
- package/apps/sessrumnir/docs/screenshots/Screenshot_20260824_182340.png +0 -0
- package/apps/sessrumnir/docs/sitemap.xml +9 -0
- package/apps/sessrumnir/electron.vite.config.ts +49 -0
- package/apps/sessrumnir/eslint.config.mjs +75 -0
- package/apps/sessrumnir/i18next.config.ts +33 -0
- package/apps/sessrumnir/install.sh +144 -0
- package/apps/sessrumnir/out/main/index.js +10881 -0
- package/apps/sessrumnir/out/preload/index.js +722 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-400-normal-C8QS47vb.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-400-normal-D3EsxgFc.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-500-normal-B7dJQtg-.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-500-normal-BLlg2W5x.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-600-normal-BcIsDXzC.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-600-normal-CBymlcNF.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-ext-400-normal-Bgrpe4p1.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-ext-400-normal-BlcaxZtM.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-ext-500-normal-CdQuyvtc.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-ext-500-normal-pZw22qtS.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-ext-600-normal-Dr-wLyOm.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-cyrillic-ext-600-normal-dLR2-a_v.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-400-normal-BGH8Vunh.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-400-normal-C3_-2Ua-.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-500-normal-Dj3SQ6fR.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-500-normal-EBdSCOD3.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-600-normal-B254Xisw.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-600-normal-DUW-TI76.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-ext-400-normal-DuQ88yz3.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-ext-400-normal-DuXFa1Dr.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-ext-500-normal-AH9qog1s.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-ext-500-normal-DAuUCO41.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-ext-600-normal-CD-dlDpD.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-latin-ext-600-normal-D3T6BBXG.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-vietnamese-400-normal-C-RiYxEf.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-vietnamese-400-normal-DmUuA7Y2.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-vietnamese-500-normal-DsPuwQHi.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-vietnamese-500-normal-tGBW_mI7.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-vietnamese-600-normal-Dar_cCT6.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/cormorant-vietnamese-600-normal-GIs8CF2x.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-300-normal-Ba-HN6uq.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-300-normal-ByB2hQUF.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-ext-300-normal-B8O3uHbr.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-ext-300-normal-BbtBtHoB.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-300-normal-BPU54Tw3.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-300-normal-BRS-C4KA.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-ext-300-normal-BEtQ2wm2.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-ext-300-normal-CQbCaAQ4.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-vietnamese-300-normal-B6fSpYYV.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-vietnamese-300-normal-CpdbWO_2.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff +0 -0
- package/apps/sessrumnir/out/renderer/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/index-BxqsRq2x.css +4858 -0
- package/apps/sessrumnir/out/renderer/assets/index-TaD69rFk.js +99435 -0
- package/apps/sessrumnir/out/renderer/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/newsreader-latin-ext-wght-italic-DFS986qL.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/newsreader-latin-wght-italic-Bxi8ein9.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/newsreader-vietnamese-wght-italic-xAqemagA.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/openmoji-color-9qo_2DLG.woff2 +0 -0
- package/apps/sessrumnir/out/renderer/assets/pi-logo-B6SVnhuS.svg +7 -0
- package/apps/sessrumnir/out/renderer/index.html +19 -0
- package/apps/sessrumnir/out/renderer/theme-boot.js +30 -0
- package/apps/sessrumnir/package-lock.json +10636 -0
- package/apps/sessrumnir/package.json +183 -0
- package/apps/sessrumnir/public/apple-touch-icon.png +0 -0
- package/apps/sessrumnir/public/icon.svg +7 -0
- package/apps/sessrumnir/resources/icons/generate_icons.py +38 -0
- package/apps/sessrumnir/resources/icons/icon-128.png +0 -0
- package/apps/sessrumnir/resources/icons/icon-16.png +0 -0
- package/apps/sessrumnir/resources/icons/icon-256.png +0 -0
- package/apps/sessrumnir/resources/icons/icon-32.png +0 -0
- package/apps/sessrumnir/resources/icons/icon-48.png +0 -0
- package/apps/sessrumnir/resources/icons/icon-512.png +0 -0
- package/apps/sessrumnir/resources/icons/icon-64.png +0 -0
- package/apps/sessrumnir/resources/icons/icon.icns +0 -0
- package/apps/sessrumnir/resources/icons/icon.ico +0 -0
- package/apps/sessrumnir/resources/icons/icon.png +0 -0
- package/apps/sessrumnir/resources/icons/icon.svg +7 -0
- package/apps/sessrumnir/resources/linux/after-install.sh +23 -0
- package/apps/sessrumnir/resources/linux/after-remove.sh +18 -0
- package/apps/sessrumnir/resources/locales/en/translation.json +1735 -0
- package/apps/sessrumnir/resources/permission-prompt-text.test.ts +111 -0
- package/apps/sessrumnir/resources/permission-prompt-text.ts +84 -0
- package/apps/sessrumnir/resources/permission-rules.test.ts +351 -0
- package/apps/sessrumnir/resources/permission-rules.ts +293 -0
- package/apps/sessrumnir/resources/pi-desktop-permissions.ts +62 -0
- package/apps/sessrumnir/resources/ymir-sessrumnir.desktop.in +12 -0
- package/apps/sessrumnir/scripts/check-semantic-colors.mjs +57 -0
- package/apps/sessrumnir/src/main/activity-stats.test.ts +240 -0
- package/apps/sessrumnir/src/main/activity-stats.ts +596 -0
- package/apps/sessrumnir/src/main/agent-detection.test.ts +25 -0
- package/apps/sessrumnir/src/main/agent-detection.ts +114 -0
- package/apps/sessrumnir/src/main/app-data-paths.test.ts +90 -0
- package/apps/sessrumnir/src/main/app-data-paths.ts +95 -0
- package/apps/sessrumnir/src/main/app-log.test.ts +114 -0
- package/apps/sessrumnir/src/main/app-log.ts +210 -0
- package/apps/sessrumnir/src/main/archived-sessions.test.ts +50 -0
- package/apps/sessrumnir/src/main/archived-sessions.ts +95 -0
- package/apps/sessrumnir/src/main/attachment-reader.test.ts +56 -0
- package/apps/sessrumnir/src/main/attachment-reader.ts +52 -0
- package/apps/sessrumnir/src/main/auto-tag.test.ts +38 -0
- package/apps/sessrumnir/src/main/auto-tag.ts +75 -0
- package/apps/sessrumnir/src/main/autostart-linux.test.ts +56 -0
- package/apps/sessrumnir/src/main/autostart-linux.ts +58 -0
- package/apps/sessrumnir/src/main/cmd-escape.test.ts +424 -0
- package/apps/sessrumnir/src/main/cmd-escape.ts +186 -0
- package/apps/sessrumnir/src/main/council-manager.test.ts +167 -0
- package/apps/sessrumnir/src/main/council-manager.ts +265 -0
- package/apps/sessrumnir/src/main/diagnostics-report.test.ts +140 -0
- package/apps/sessrumnir/src/main/diagnostics-report.ts +91 -0
- package/apps/sessrumnir/src/main/diagnostics.ts +111 -0
- package/apps/sessrumnir/src/main/editor-guard.test.ts +59 -0
- package/apps/sessrumnir/src/main/editor-guard.ts +50 -0
- package/apps/sessrumnir/src/main/extension-ui-ipc.test.ts +299 -0
- package/apps/sessrumnir/src/main/extension-ui-ipc.ts +117 -0
- package/apps/sessrumnir/src/main/file-service.test.ts +279 -0
- package/apps/sessrumnir/src/main/file-service.ts +652 -0
- package/apps/sessrumnir/src/main/fs-errors.ts +42 -0
- package/apps/sessrumnir/src/main/get-messages-trim.test.ts +77 -0
- package/apps/sessrumnir/src/main/get-messages-trim.ts +97 -0
- package/apps/sessrumnir/src/main/git-conveyor.test.ts +305 -0
- package/apps/sessrumnir/src/main/git-conveyor.ts +338 -0
- package/apps/sessrumnir/src/main/git-worktree.test.ts +101 -0
- package/apps/sessrumnir/src/main/git-worktree.ts +201 -0
- package/apps/sessrumnir/src/main/i18n.ts +31 -0
- package/apps/sessrumnir/src/main/index.ts +619 -0
- package/apps/sessrumnir/src/main/ipc/active-engine.ts +15 -0
- package/apps/sessrumnir/src/main/ipc/context.ts +58 -0
- package/apps/sessrumnir/src/main/ipc/council-handlers.ts +126 -0
- package/apps/sessrumnir/src/main/ipc/diagnostics-handlers.ts +8 -0
- package/apps/sessrumnir/src/main/ipc/file-handlers.ts +96 -0
- package/apps/sessrumnir/src/main/ipc/git-conveyor-handlers.ts +55 -0
- package/apps/sessrumnir/src/main/ipc/model-handlers.ts +33 -0
- package/apps/sessrumnir/src/main/ipc/models-config-handlers.ts +80 -0
- package/apps/sessrumnir/src/main/ipc/notes-handlers.ts +65 -0
- package/apps/sessrumnir/src/main/ipc/package-handlers.ts +330 -0
- package/apps/sessrumnir/src/main/ipc/permission-rules-handlers.ts +223 -0
- package/apps/sessrumnir/src/main/ipc/pi-handlers.ts +136 -0
- package/apps/sessrumnir/src/main/ipc/pi-start-options.ts +150 -0
- package/apps/sessrumnir/src/main/ipc/run-pi-cli.ts +53 -0
- package/apps/sessrumnir/src/main/ipc/session-handlers.ts +491 -0
- package/apps/sessrumnir/src/main/ipc/settings.ts +120 -0
- package/apps/sessrumnir/src/main/ipc/skills-mcp-handlers.ts +192 -0
- package/apps/sessrumnir/src/main/ipc/system-handlers.ts +131 -0
- package/apps/sessrumnir/src/main/ipc/tag-handlers.ts +69 -0
- package/apps/sessrumnir/src/main/ipc/terminal-handlers.ts +41 -0
- package/apps/sessrumnir/src/main/ipc/theme-handlers.ts +131 -0
- package/apps/sessrumnir/src/main/ipc/update-handlers.ts +61 -0
- package/apps/sessrumnir/src/main/ipc/validation.ts +45 -0
- package/apps/sessrumnir/src/main/ipc/workflow-handlers.ts +108 -0
- package/apps/sessrumnir/src/main/ipc/workspace-activity-wiring.ts +179 -0
- package/apps/sessrumnir/src/main/ipc/workspace-handlers.ts +133 -0
- package/apps/sessrumnir/src/main/ipc-handlers.ts +98 -0
- package/apps/sessrumnir/src/main/map-concurrent.test.ts +80 -0
- package/apps/sessrumnir/src/main/map-concurrent.ts +30 -0
- package/apps/sessrumnir/src/main/models-file.test.ts +114 -0
- package/apps/sessrumnir/src/main/models-file.ts +89 -0
- package/apps/sessrumnir/src/main/notes-manager.test.ts +64 -0
- package/apps/sessrumnir/src/main/notes-manager.ts +183 -0
- package/apps/sessrumnir/src/main/notify-decision.test.ts +39 -0
- package/apps/sessrumnir/src/main/notify-decision.ts +25 -0
- package/apps/sessrumnir/src/main/omp-fork-points.test.ts +119 -0
- package/apps/sessrumnir/src/main/omp-fork-points.ts +105 -0
- package/apps/sessrumnir/src/main/omp-plugin-list.test.ts +94 -0
- package/apps/sessrumnir/src/main/omp-plugin-list.ts +103 -0
- package/apps/sessrumnir/src/main/package-catalog.test.ts +157 -0
- package/apps/sessrumnir/src/main/package-catalog.ts +166 -0
- package/apps/sessrumnir/src/main/package-updates.test.ts +149 -0
- package/apps/sessrumnir/src/main/package-updates.ts +185 -0
- package/apps/sessrumnir/src/main/path-authorization.test.ts +64 -0
- package/apps/sessrumnir/src/main/path-authorization.ts +31 -0
- package/apps/sessrumnir/src/main/pi-binary-resolution.test.ts +582 -0
- package/apps/sessrumnir/src/main/pi-binary-resolution.ts +649 -0
- package/apps/sessrumnir/src/main/pi-event-router.test.ts +388 -0
- package/apps/sessrumnir/src/main/pi-event-router.ts +290 -0
- package/apps/sessrumnir/src/main/pi-paths.test.ts +134 -0
- package/apps/sessrumnir/src/main/pi-paths.ts +74 -0
- package/apps/sessrumnir/src/main/pi-rpc-manager.test.ts +467 -0
- package/apps/sessrumnir/src/main/pi-rpc-manager.ts +1319 -0
- package/apps/sessrumnir/src/main/process-tree.test.ts +94 -0
- package/apps/sessrumnir/src/main/renderer-origin.test.ts +33 -0
- package/apps/sessrumnir/src/main/renderer-origin.ts +35 -0
- package/apps/sessrumnir/src/main/session-lineage-reader.test.ts +317 -0
- package/apps/sessrumnir/src/main/session-lineage-reader.ts +111 -0
- package/apps/sessrumnir/src/main/session-metadata.test.ts +508 -0
- package/apps/sessrumnir/src/main/session-metadata.ts +526 -0
- package/apps/sessrumnir/src/main/session-name.test.ts +71 -0
- package/apps/sessrumnir/src/main/session-name.ts +69 -0
- package/apps/sessrumnir/src/main/session-paths.test.ts +110 -0
- package/apps/sessrumnir/src/main/session-paths.ts +88 -0
- package/apps/sessrumnir/src/main/session-tags.test.ts +61 -0
- package/apps/sessrumnir/src/main/session-tags.ts +253 -0
- package/apps/sessrumnir/src/main/session-trash.test.ts +66 -0
- package/apps/sessrumnir/src/main/session-trash.ts +65 -0
- package/apps/sessrumnir/src/main/settings-logic.ts +66 -0
- package/apps/sessrumnir/src/main/skills-discovery.test.ts +149 -0
- package/apps/sessrumnir/src/main/skills-discovery.ts +179 -0
- package/apps/sessrumnir/src/main/startup-launch.ts +63 -0
- package/apps/sessrumnir/src/main/terminal-service.ts +96 -0
- package/apps/sessrumnir/src/main/theme-store.test.ts +440 -0
- package/apps/sessrumnir/src/main/theme-store.ts +495 -0
- package/apps/sessrumnir/src/main/tray-decision.test.ts +46 -0
- package/apps/sessrumnir/src/main/tray-decision.ts +49 -0
- package/apps/sessrumnir/src/main/tray-manager.ts +220 -0
- package/apps/sessrumnir/src/main/tsconfig.json +20 -0
- package/apps/sessrumnir/src/main/window-background.test.ts +29 -0
- package/apps/sessrumnir/src/main/window-background.ts +16 -0
- package/apps/sessrumnir/src/main/workflow-discovery.test.ts +252 -0
- package/apps/sessrumnir/src/main/workflow-monitor.test.ts +371 -0
- package/apps/sessrumnir/src/main/workflow-monitor.ts +1020 -0
- package/apps/sessrumnir/src/main/workspace-activity.test.ts +227 -0
- package/apps/sessrumnir/src/main/workspace-activity.ts +215 -0
- package/apps/sessrumnir/src/main/workspace-manager.test.ts +680 -0
- package/apps/sessrumnir/src/main/workspace-manager.ts +1199 -0
- package/apps/sessrumnir/src/main/workspace-trust.test.ts +78 -0
- package/apps/sessrumnir/src/main/workspace-trust.ts +84 -0
- package/apps/sessrumnir/src/preload/index.ts +358 -0
- package/apps/sessrumnir/src/preload/tsconfig.json +20 -0
- package/apps/sessrumnir/src/renderer/index.html +18 -0
- package/apps/sessrumnir/src/renderer/public/theme-boot.js +30 -0
- package/apps/sessrumnir/src/renderer/src/app.tsx +194 -0
- package/apps/sessrumnir/src/renderer/src/assets/openmoji-color.woff2 +0 -0
- package/apps/sessrumnir/src/renderer/src/assets/pi-logo.svg +7 -0
- package/apps/sessrumnir/src/renderer/src/assets/ymir-mark.svg +55 -0
- package/apps/sessrumnir/src/renderer/src/assets.d.ts +7 -0
- package/apps/sessrumnir/src/renderer/src/components/chat-code-highlight.ts +239 -0
- package/apps/sessrumnir/src/renderer/src/components/chat-file-link.ts +140 -0
- package/apps/sessrumnir/src/renderer/src/components/chat-input.tsx +729 -0
- package/apps/sessrumnir/src/renderer/src/components/chat-panel-widths.test.ts +175 -0
- package/apps/sessrumnir/src/renderer/src/components/chat-panel-widths.ts +100 -0
- package/apps/sessrumnir/src/renderer/src/components/chat-panel.tsx +523 -0
- package/apps/sessrumnir/src/renderer/src/components/chat-project-picker.tsx +193 -0
- package/apps/sessrumnir/src/renderer/src/components/chat-search.tsx +251 -0
- package/apps/sessrumnir/src/renderer/src/components/code-editor-highlight.ts +85 -0
- package/apps/sessrumnir/src/renderer/src/components/code-editor-language.test.ts +19 -0
- package/apps/sessrumnir/src/renderer/src/components/code-editor-language.ts +88 -0
- package/apps/sessrumnir/src/renderer/src/components/code-editor.tsx +128 -0
- package/apps/sessrumnir/src/renderer/src/components/command-palette.tsx +315 -0
- package/apps/sessrumnir/src/renderer/src/components/command-results.tsx +80 -0
- package/apps/sessrumnir/src/renderer/src/components/composer-permission-menu.tsx +91 -0
- package/apps/sessrumnir/src/renderer/src/components/context-menu.tsx +457 -0
- package/apps/sessrumnir/src/renderer/src/components/copy-button.tsx +36 -0
- package/apps/sessrumnir/src/renderer/src/components/council-panels.tsx +193 -0
- package/apps/sessrumnir/src/renderer/src/components/custom-models-editor.tsx +330 -0
- package/apps/sessrumnir/src/renderer/src/components/diagnostics-panel.tsx +380 -0
- package/apps/sessrumnir/src/renderer/src/components/diff-viewer.tsx +318 -0
- package/apps/sessrumnir/src/renderer/src/components/ember-background.tsx +113 -0
- package/apps/sessrumnir/src/renderer/src/components/error-boundary.tsx +38 -0
- package/apps/sessrumnir/src/renderer/src/components/extension-ui-dialog-helpers.test.ts +43 -0
- package/apps/sessrumnir/src/renderer/src/components/extension-ui-dialog-helpers.ts +51 -0
- package/apps/sessrumnir/src/renderer/src/components/extension-ui-dialog.tsx +486 -0
- package/apps/sessrumnir/src/renderer/src/components/file-tree.tsx +784 -0
- package/apps/sessrumnir/src/renderer/src/components/git-conveyor-actions.tsx +246 -0
- package/apps/sessrumnir/src/renderer/src/components/home-screen.tsx +396 -0
- package/apps/sessrumnir/src/renderer/src/components/image-viewer.tsx +100 -0
- package/apps/sessrumnir/src/renderer/src/components/line-numbered-code.tsx +58 -0
- package/apps/sessrumnir/src/renderer/src/components/markdown-renderer.tsx +237 -0
- package/apps/sessrumnir/src/renderer/src/components/message-bubble.tsx +1006 -0
- package/apps/sessrumnir/src/renderer/src/components/mission-control.tsx +341 -0
- package/apps/sessrumnir/src/renderer/src/components/model-selector.tsx +219 -0
- package/apps/sessrumnir/src/renderer/src/components/note-picker.tsx +155 -0
- package/apps/sessrumnir/src/renderer/src/components/notes-panel.tsx +437 -0
- package/apps/sessrumnir/src/renderer/src/components/package-browser.tsx +604 -0
- package/apps/sessrumnir/src/renderer/src/components/permission-mode.test.ts +22 -0
- package/apps/sessrumnir/src/renderer/src/components/permission-mode.ts +49 -0
- package/apps/sessrumnir/src/renderer/src/components/permission-rules-editor-helpers.test.ts +44 -0
- package/apps/sessrumnir/src/renderer/src/components/permission-rules-editor-helpers.ts +35 -0
- package/apps/sessrumnir/src/renderer/src/components/permission-rules-editor.tsx +226 -0
- package/apps/sessrumnir/src/renderer/src/components/permission-selector.tsx +104 -0
- package/apps/sessrumnir/src/renderer/src/components/resize-handle.tsx +51 -0
- package/apps/sessrumnir/src/renderer/src/components/review-rail.tsx +194 -0
- package/apps/sessrumnir/src/renderer/src/components/session-menu-position.test.ts +22 -0
- package/apps/sessrumnir/src/renderer/src/components/session-menu-position.ts +34 -0
- package/apps/sessrumnir/src/renderer/src/components/session-panel.tsx +711 -0
- package/apps/sessrumnir/src/renderer/src/components/session-runtime-indicator.tsx +43 -0
- package/apps/sessrumnir/src/renderer/src/components/settings-panel.tsx +1360 -0
- package/apps/sessrumnir/src/renderer/src/components/sidebar-activity.test.ts +47 -0
- package/apps/sessrumnir/src/renderer/src/components/sidebar-activity.ts +76 -0
- package/apps/sessrumnir/src/renderer/src/components/sidebar-session-labels.test.ts +73 -0
- package/apps/sessrumnir/src/renderer/src/components/sidebar-session-labels.ts +47 -0
- package/apps/sessrumnir/src/renderer/src/components/sidebar.tsx +1045 -0
- package/apps/sessrumnir/src/renderer/src/components/skills-panel.tsx +159 -0
- package/apps/sessrumnir/src/renderer/src/components/stats-panel.tsx +368 -0
- package/apps/sessrumnir/src/renderer/src/components/status-bar.tsx +274 -0
- package/apps/sessrumnir/src/renderer/src/components/status-popover.tsx +481 -0
- package/apps/sessrumnir/src/renderer/src/components/streaming-bubble.tsx +128 -0
- package/apps/sessrumnir/src/renderer/src/components/subagent-progress.tsx +254 -0
- package/apps/sessrumnir/src/renderer/src/components/task-launcher.tsx +168 -0
- package/apps/sessrumnir/src/renderer/src/components/terminal.tsx +203 -0
- package/apps/sessrumnir/src/renderer/src/components/theme-editor-helpers.test.ts +35 -0
- package/apps/sessrumnir/src/renderer/src/components/theme-editor-helpers.ts +35 -0
- package/apps/sessrumnir/src/renderer/src/components/theme-editor.tsx +440 -0
- package/apps/sessrumnir/src/renderer/src/components/theme-gallery.tsx +373 -0
- package/apps/sessrumnir/src/renderer/src/components/thinking-level-selector.tsx +85 -0
- package/apps/sessrumnir/src/renderer/src/components/timeline.tsx +289 -0
- package/apps/sessrumnir/src/renderer/src/components/tool-call-icon.ts +32 -0
- package/apps/sessrumnir/src/renderer/src/components/workflow-navigator.tsx +901 -0
- package/apps/sessrumnir/src/renderer/src/components/workspace-tabs.tsx +241 -0
- package/apps/sessrumnir/src/renderer/src/global.d.ts +8 -0
- package/apps/sessrumnir/src/renderer/src/hooks/use-folder-drop.ts +101 -0
- package/apps/sessrumnir/src/renderer/src/hooks.test.ts +88 -0
- package/apps/sessrumnir/src/renderer/src/hooks.ts +574 -0
- package/apps/sessrumnir/src/renderer/src/i18n.test.ts +54 -0
- package/apps/sessrumnir/src/renderer/src/i18n.ts +89 -0
- package/apps/sessrumnir/src/renderer/src/index.css +425 -0
- package/apps/sessrumnir/src/renderer/src/main.tsx +42 -0
- package/apps/sessrumnir/src/renderer/src/message-grouping.test.ts +422 -0
- package/apps/sessrumnir/src/renderer/src/message-grouping.ts +410 -0
- package/apps/sessrumnir/src/renderer/src/message-parsing.test.ts +86 -0
- package/apps/sessrumnir/src/renderer/src/message-parsing.ts +166 -0
- package/apps/sessrumnir/src/renderer/src/store-external-prompts.test.ts +161 -0
- package/apps/sessrumnir/src/renderer/src/store-session-transitions.test.ts +2090 -0
- package/apps/sessrumnir/src/renderer/src/store-timeline.test.ts +52 -0
- package/apps/sessrumnir/src/renderer/src/store-turn-error.test.ts +136 -0
- package/apps/sessrumnir/src/renderer/src/store.ts +3726 -0
- package/apps/sessrumnir/src/renderer/src/subagent-detection.test.ts +55 -0
- package/apps/sessrumnir/src/renderer/src/theme/engine.test.ts +29 -0
- package/apps/sessrumnir/src/renderer/src/theme/engine.ts +20 -0
- package/apps/sessrumnir/src/renderer/src/themes/breeze-claudius.json +69 -0
- package/apps/sessrumnir/src/renderer/src/themes/breeze-dark.json +69 -0
- package/apps/sessrumnir/src/renderer/src/themes/breeze-light.json +69 -0
- package/apps/sessrumnir/src/renderer/src/themes/builtin-themes.test.ts +95 -0
- package/apps/sessrumnir/src/renderer/src/themes/dark.json +46 -0
- package/apps/sessrumnir/src/renderer/src/themes/fensalir.json +82 -0
- package/apps/sessrumnir/src/renderer/src/themes/gruvbox.json +69 -0
- package/apps/sessrumnir/src/renderer/src/themes/index.ts +60 -0
- package/apps/sessrumnir/src/renderer/src/themes/light.json +46 -0
- package/apps/sessrumnir/src/renderer/src/themes/nord.json +69 -0
- package/apps/sessrumnir/src/renderer/src/themes/sessrumnir.json +82 -0
- package/apps/sessrumnir/src/renderer/src/utils/debounced-buffer.test.ts +81 -0
- package/apps/sessrumnir/src/renderer/src/utils/debounced-buffer.ts +57 -0
- package/apps/sessrumnir/src/renderer/src/utils/format-relative-time.test.ts +62 -0
- package/apps/sessrumnir/src/renderer/src/utils/format-relative-time.ts +28 -0
- package/apps/sessrumnir/src/renderer/src/utils/heatmap-grid.test.ts +57 -0
- package/apps/sessrumnir/src/renderer/src/utils/heatmap-grid.ts +41 -0
- package/apps/sessrumnir/src/renderer/src/utils/ipc-error.test.ts +22 -0
- package/apps/sessrumnir/src/renderer/src/utils/ipc-error.ts +12 -0
- package/apps/sessrumnir/src/renderer/src/utils/model-search.test.ts +63 -0
- package/apps/sessrumnir/src/renderer/src/utils/model-search.ts +20 -0
- package/apps/sessrumnir/src/renderer/src/utils/planning-prompt.test.ts +31 -0
- package/apps/sessrumnir/src/renderer/src/utils/planning-prompt.ts +27 -0
- package/apps/sessrumnir/src/renderer/src/utils/preview-load-error.test.ts +15 -0
- package/apps/sessrumnir/src/renderer/src/utils/preview-load-error.ts +22 -0
- package/apps/sessrumnir/src/renderer/src/utils/process-status-label.test.ts +13 -0
- package/apps/sessrumnir/src/renderer/src/utils/process-status-label.ts +19 -0
- package/apps/sessrumnir/src/renderer/src/utils/quick-switcher.test.ts +68 -0
- package/apps/sessrumnir/src/renderer/src/utils/quick-switcher.ts +52 -0
- package/apps/sessrumnir/src/renderer/src/utils/rank-file-results.test.ts +46 -0
- package/apps/sessrumnir/src/renderer/src/utils/rank-file-results.ts +23 -0
- package/apps/sessrumnir/src/renderer/src/utils/relative-time.tsx +25 -0
- package/apps/sessrumnir/src/renderer/src/utils/session-title.test.ts +98 -0
- package/apps/sessrumnir/src/renderer/src/utils/session-title.ts +58 -0
- package/apps/sessrumnir/src/renderer/src/utils/stale-guard.test.ts +29 -0
- package/apps/sessrumnir/src/renderer/src/utils/stale-guard.ts +20 -0
- package/apps/sessrumnir/src/renderer/src/utils/theme.test.ts +174 -0
- package/apps/sessrumnir/src/renderer/src/utils/theme.ts +159 -0
- package/apps/sessrumnir/src/renderer/src/utils/workflow-runs.test.ts +130 -0
- package/apps/sessrumnir/src/renderer/src/utils/workflow-runs.ts +84 -0
- package/apps/sessrumnir/src/renderer/tsconfig.json +24 -0
- package/apps/sessrumnir/src/shared/agent-engine-label.test.ts +45 -0
- package/apps/sessrumnir/src/shared/agent-engine-label.ts +53 -0
- package/apps/sessrumnir/src/shared/app-settings.test.ts +25 -0
- package/apps/sessrumnir/src/shared/app-settings.ts +23 -0
- package/apps/sessrumnir/src/shared/bridge-http.ts +341 -0
- package/apps/sessrumnir/src/shared/bridge.ts +337 -0
- package/apps/sessrumnir/src/shared/council-config.test.ts +300 -0
- package/apps/sessrumnir/src/shared/council-config.ts +356 -0
- package/apps/sessrumnir/src/shared/default-settings.ts +39 -0
- package/apps/sessrumnir/src/shared/folder-drop.test.ts +118 -0
- package/apps/sessrumnir/src/shared/folder-drop.ts +74 -0
- package/apps/sessrumnir/src/shared/fork-point.test.ts +30 -0
- package/apps/sessrumnir/src/shared/fork-point.ts +24 -0
- package/apps/sessrumnir/src/shared/i18n/i18next.d.ts +10 -0
- package/apps/sessrumnir/src/shared/i18n/index.test.ts +51 -0
- package/apps/sessrumnir/src/shared/i18n/index.ts +50 -0
- package/apps/sessrumnir/src/shared/i18n/languages.ts +12 -0
- package/apps/sessrumnir/src/shared/i18n/locale-checks.ts +98 -0
- package/apps/sessrumnir/src/shared/i18n/locales.test.ts +92 -0
- package/apps/sessrumnir/src/shared/i18n/pseudo.test.ts +39 -0
- package/apps/sessrumnir/src/shared/i18n/pseudo.ts +44 -0
- package/apps/sessrumnir/src/shared/i18n/resolve.test.ts +43 -0
- package/apps/sessrumnir/src/shared/i18n/resolve.ts +41 -0
- package/apps/sessrumnir/src/shared/i18n/resources.ts +11 -0
- package/apps/sessrumnir/src/shared/ipc-contracts.ts +1539 -0
- package/apps/sessrumnir/src/shared/models-config.test.ts +124 -0
- package/apps/sessrumnir/src/shared/models-config.ts +167 -0
- package/apps/sessrumnir/src/shared/package-filter.ts +19 -0
- package/apps/sessrumnir/src/shared/package-spec.test.ts +51 -0
- package/apps/sessrumnir/src/shared/package-spec.ts +25 -0
- package/apps/sessrumnir/src/shared/path-compare.test.ts +38 -0
- package/apps/sessrumnir/src/shared/path-compare.ts +76 -0
- package/apps/sessrumnir/src/shared/permission-mode.ts +8 -0
- package/apps/sessrumnir/src/shared/pi-command.test.ts +165 -0
- package/apps/sessrumnir/src/shared/pi-command.ts +139 -0
- package/apps/sessrumnir/src/shared/product-name.ts +7 -0
- package/apps/sessrumnir/src/shared/session-lineage.test.ts +103 -0
- package/apps/sessrumnir/src/shared/session-lineage.ts +50 -0
- package/apps/sessrumnir/src/shared/session-preview.test.ts +93 -0
- package/apps/sessrumnir/src/shared/session-preview.ts +56 -0
- package/apps/sessrumnir/src/shared/sidebar-width.test.ts +58 -0
- package/apps/sessrumnir/src/shared/sidebar-width.ts +37 -0
- package/apps/sessrumnir/src/shared/theme/builtin-ids.ts +16 -0
- package/apps/sessrumnir/src/shared/theme/resolve.test.ts +66 -0
- package/apps/sessrumnir/src/shared/theme/resolve.ts +29 -0
- package/apps/sessrumnir/src/shared/theme/syntax-defaults.ts +24 -0
- package/apps/sessrumnir/src/shared/theme/theme-file.test.ts +88 -0
- package/apps/sessrumnir/src/shared/theme/theme-file.ts +132 -0
- package/apps/sessrumnir/src/shared/theme/tokens.test.ts +35 -0
- package/apps/sessrumnir/src/shared/theme/tokens.ts +86 -0
- package/apps/sessrumnir/src/shared/tsconfig.json +17 -0
- package/apps/sessrumnir/src/shared/untrusted-data.test.ts +32 -0
- package/apps/sessrumnir/src/shared/untrusted-data.ts +22 -0
- package/apps/sessrumnir/src/shared/version-compare.test.ts +33 -0
- package/apps/sessrumnir/src/shared/version-compare.ts +50 -0
- package/apps/sessrumnir/src/shared/workflow-control.ts +33 -0
- package/apps/sessrumnir/src/web-server.ts +315 -0
- package/apps/sessrumnir/tsconfig.json +26 -0
- package/apps/smidja/smidja_build.py +45 -0
- package/apps/smidja/smidja_build_review.py +76 -0
- package/apps/smidja/smidja_build_test.py +79 -0
- package/apps/smidja/smidja_document.py +76 -0
- package/apps/smidja/smidja_modules/agent_cc.py +15 -0
- package/apps/smidja/smidja_modules/agent_opencode.py +194 -0
- package/apps/smidja/smidja_modules/agent_pi.py +392 -0
- package/apps/smidja/smidja_modules/agents.py +993 -0
- package/apps/smidja/smidja_modules/changes.py +103 -0
- package/apps/smidja/smidja_modules/console.py +131 -0
- package/apps/smidja/smidja_modules/data_types.py +447 -0
- package/apps/smidja/smidja_modules/gates.py +108 -0
- package/apps/smidja/smidja_modules/git_helper.py +120 -0
- package/apps/smidja/smidja_modules/lm_local.py +144 -0
- package/apps/smidja/smidja_modules/permissions.py +194 -0
- package/apps/smidja/smidja_modules/prompts.py +21 -0
- package/apps/smidja/smidja_modules/quality.py +240 -0
- package/apps/smidja/smidja_modules/runner.py +155 -0
- package/apps/smidja/smidja_modules/session.py +50 -0
- package/apps/smidja/smidja_modules/stall_watch.py +149 -0
- package/apps/smidja/smidja_modules/tracer.py +271 -0
- package/apps/smidja/smidja_modules/utils.py +77 -0
- package/apps/smidja/smidja_orchestrate.py +162 -0
- package/apps/smidja/smidja_plan.py +45 -0
- package/apps/smidja/smidja_plan_build.py +55 -0
- package/apps/smidja/smidja_plan_build_test.py +86 -0
- package/apps/smidja/smidja_plan_build_test_quality.py +98 -0
- package/apps/smidja/smidja_prompt.py +44 -0
- package/apps/smidja/smidja_quality.py +49 -0
- package/apps/smidja/smidja_recon_iv.py +202 -0
- package/apps/smidja/smidja_scout.py +45 -0
- package/apps/smidja/smidja_simple_sdlc.py +183 -0
- package/apps/smidja/smidja_smidja_config/smidja.config.yaml +143 -0
- package/apps/smidja-factory/AGENTS.md +165 -0
- package/apps/smidja-factory/README.md +3 -0
- package/apps/smidja-factory/SKILL.md +18 -0
- package/apps/smidja-factory/apps/visualizer/.oxlintrc.json +18 -0
- package/apps/smidja-factory/apps/visualizer/bun.lock +269 -0
- package/apps/smidja-factory/apps/visualizer/desktop/icon.png +0 -0
- package/apps/smidja-factory/apps/visualizer/desktop/main.js +140 -0
- package/apps/smidja-factory/apps/visualizer/desktop/package-lock.json +871 -0
- package/apps/smidja-factory/apps/visualizer/desktop/package.json +18 -0
- package/apps/smidja-factory/apps/visualizer/desktop/preload.js +19 -0
- package/apps/smidja-factory/apps/visualizer/index.html +28 -0
- package/apps/smidja-factory/apps/visualizer/package.json +31 -0
- package/apps/smidja-factory/apps/visualizer/public/icon.svg +7 -0
- package/apps/smidja-factory/apps/visualizer/public/models/claude.png +0 -0
- package/apps/smidja-factory/apps/visualizer/public/models/gemini.png +0 -0
- package/apps/smidja-factory/apps/visualizer/public/models/kimi.png +0 -0
- package/apps/smidja-factory/apps/visualizer/public/models/openai.png +0 -0
- package/apps/smidja-factory/apps/visualizer/public/models/zai.png +0 -0
- package/apps/smidja-factory/apps/visualizer/server/chat.ts +425 -0
- package/apps/smidja-factory/apps/visualizer/server/db.ts +1050 -0
- package/apps/smidja-factory/apps/visualizer/server/index.ts +648 -0
- package/apps/smidja-factory/apps/visualizer/server/model-catalog.ts +90 -0
- package/apps/smidja-factory/apps/visualizer/server/roster-api.ts +75 -0
- package/apps/smidja-factory/apps/visualizer/server/roster_resolve.py +170 -0
- package/apps/smidja-factory/apps/visualizer/server/settings.ts +106 -0
- package/apps/smidja-factory/apps/visualizer/shared/types.ts +630 -0
- package/apps/smidja-factory/apps/visualizer/src/App.vue +379 -0
- package/apps/smidja-factory/apps/visualizer/src/components/ChatInput.vue +155 -0
- package/apps/smidja-factory/apps/visualizer/src/components/ChatThread.vue +219 -0
- package/apps/smidja-factory/apps/visualizer/src/components/ChatView.vue +335 -0
- package/apps/smidja-factory/apps/visualizer/src/components/DecisionsView.vue +177 -0
- package/apps/smidja-factory/apps/visualizer/src/components/DetailSection.vue +76 -0
- package/apps/smidja-factory/apps/visualizer/src/components/MemoryView.vue +397 -0
- package/apps/smidja-factory/apps/visualizer/src/components/PhaseDetail.vue +1354 -0
- package/apps/smidja-factory/apps/visualizer/src/components/PhaseDots.vue +55 -0
- package/apps/smidja-factory/apps/visualizer/src/components/SessionCard.vue +583 -0
- package/apps/smidja-factory/apps/visualizer/src/components/SessionMiniCard.vue +58 -0
- package/apps/smidja-factory/apps/visualizer/src/components/SessionPanel.vue +272 -0
- package/apps/smidja-factory/apps/visualizer/src/components/SessionStartForm.vue +152 -0
- package/apps/smidja-factory/apps/visualizer/src/components/SessionTrace.vue +1157 -0
- package/apps/smidja-factory/apps/visualizer/src/components/SessionsList.vue +96 -0
- package/apps/smidja-factory/apps/visualizer/src/components/SettingsView.vue +152 -0
- package/apps/smidja-factory/apps/visualizer/src/components/StatChip.vue +98 -0
- package/apps/smidja-factory/apps/visualizer/src/components/StatsView.vue +382 -0
- package/apps/smidja-factory/apps/visualizer/src/components/StatusChip.vue +73 -0
- package/apps/smidja-factory/apps/visualizer/src/components/ToolCallCard.vue +156 -0
- package/apps/smidja-factory/apps/visualizer/src/lib/api.ts +177 -0
- package/apps/smidja-factory/apps/visualizer/src/lib/chat-api.ts +95 -0
- package/apps/smidja-factory/apps/visualizer/src/lib/chat-store.ts +351 -0
- package/apps/smidja-factory/apps/visualizer/src/lib/events.ts +131 -0
- package/apps/smidja-factory/apps/visualizer/src/lib/format.ts +92 -0
- package/apps/smidja-factory/apps/visualizer/src/lib/highlight.ts +54 -0
- package/apps/smidja-factory/apps/visualizer/src/lib/markdown.ts +120 -0
- package/apps/smidja-factory/apps/visualizer/src/lib/models.ts +42 -0
- package/apps/smidja-factory/apps/visualizer/src/lib/router.ts +67 -0
- package/apps/smidja-factory/apps/visualizer/src/lib/types.ts +61 -0
- package/apps/smidja-factory/apps/visualizer/src/main.ts +13 -0
- package/apps/smidja-factory/apps/visualizer/src/style.css +592 -0
- package/apps/smidja-factory/apps/visualizer/tsconfig.json +30 -0
- package/apps/smidja-factory/apps/visualizer/vite.config.js +32 -0
- package/apps/smidja-factory/apps/visualizer/vite.config.ts +31 -0
- package/apps/smidja-factory/cookbooks/create_config.md +61 -0
- package/apps/smidja-factory/cookbooks/create_smidja.md +120 -0
- package/apps/smidja-factory/cookbooks/how_to_prompt_for_the_eng.md +110 -0
- package/apps/smidja-factory/cookbooks/install.md +56 -0
- package/apps/smidja-factory/cookbooks/run_smidja.md +122 -0
- package/apps/smidja-factory/cookbooks/smidja_overview.md +88 -0
- package/apps/smidja-factory/cookbooks/update_config.md +103 -0
- package/apps/smidja-factory/cookbooks/update_modules.md +100 -0
- package/apps/smidja-factory/cookbooks/update_smidja.md +90 -0
- package/apps/smidja-factory/docs/enhancement-plan.md +420 -0
- package/apps/smidja-factory/references/config.md +202 -0
- package/apps/smidja-factory/references/handoff.md +161 -0
- package/apps/smidja-factory/references/observability.md +166 -0
- package/apps/smidja-factory/scripts/install.py +113 -0
- package/apps/smidja-factory/scripts/make_config.py +35 -0
- package/apps/smidja-factory/scripts/make_smidja.py +119 -0
- package/apps/smidja-factory/skills/add-or-edit-ai-models/SKILL.md +151 -0
- package/apps/smidja-factory/skills/create-new-agent/SKILL.md +125 -0
- package/apps/smidja-factory/skills/create-new-teams/SKILL.md +151 -0
- package/apps/smidja-factory/skills/git-ops/README.md +25 -0
- package/apps/smidja-factory/skills/git-ops/SKILL.md +18 -0
- package/apps/smidja-factory/skills/git-ops/create_branch.sh +79 -0
- package/apps/smidja-factory/skills/git-ops/safe_commit.sh +82 -0
- package/apps/smidja-factory/skills/git-ops/sync_upstream.sh +94 -0
- package/apps/smidja-factory/skills/how-to-run-agent-teams/SKILL.md +117 -0
- package/apps/smidja-factory/skills/smidja-instructions/SKILL.md +168 -0
- package/apps/smidja-factory/skills/smidja-launcher/SKILL.md +155 -0
- package/apps/smidja-factory/skills/smidja-start/SKILL.md +266 -0
- package/apps/smidja-factory/skills/volundr/SKILL.md +232 -0
- package/apps/smidja-factory/skills/volundr/prompt/dispatch-prompt.md +91 -0
- package/apps/smidja-factory/skills/volundr/prompt/volundr-system.md +63 -0
- package/apps/smidja-factory/skills/volundr/scripts/volundr-observe.py +52 -0
- package/apps/smidja-factory/skills/volundr/scripts/volundr-recall.py +54 -0
- package/apps/smidja-factory/skills/volundr/scripts/volundr-status.py +51 -0
- package/apps/smidja-factory/skills/volundr/scripts/volundr-teach.py +47 -0
- package/apps/smidja-factory/templates/env.sample +28 -0
- package/apps/smidja-factory/templates/harness_engineering/subagents.ts +706 -0
- package/apps/smidja-factory/templates/harness_engineering/themeMap.ts +145 -0
- package/apps/smidja-factory/templates/justfile +89 -0
- package/apps/smidja-factory/templates/prompt_engineering/builder/system.md +13 -0
- package/apps/smidja-factory/templates/prompt_engineering/builder/user.md +34 -0
- package/apps/smidja-factory/templates/prompt_engineering/documenter/system.md +17 -0
- package/apps/smidja-factory/templates/prompt_engineering/documenter/user.md +48 -0
- package/apps/smidja-factory/templates/prompt_engineering/orchestrator/system.md +55 -0
- package/apps/smidja-factory/templates/prompt_engineering/orchestrator/user.md +39 -0
- package/apps/smidja-factory/templates/prompt_engineering/planner/system.md +21 -0
- package/apps/smidja-factory/templates/prompt_engineering/planner/user.md +45 -0
- package/apps/smidja-factory/templates/prompt_engineering/recon_orchestrator/system.md +51 -0
- package/apps/smidja-factory/templates/prompt_engineering/recon_orchestrator/user.md +26 -0
- package/apps/smidja-factory/templates/prompt_engineering/reviewer/system.md +16 -0
- package/apps/smidja-factory/templates/prompt_engineering/reviewer/user.md +44 -0
- package/apps/smidja-factory/templates/prompt_engineering/scout/system.md +32 -0
- package/apps/smidja-factory/templates/prompt_engineering/scout/user.md +34 -0
- package/apps/smidja-factory/templates/smidja/smidja_build.py +45 -0
- package/apps/smidja-factory/templates/smidja/smidja_build_review.py +76 -0
- package/apps/smidja-factory/templates/smidja/smidja_build_test.py +79 -0
- package/apps/smidja-factory/templates/smidja/smidja_document.py +76 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/agent_cc.py +15 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/agent_opencode.py +194 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/agent_pi.py +392 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/agents.py +993 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/changes.py +103 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/console.py +131 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/data_types.py +447 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/gates.py +108 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/git_helper.py +120 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/lm_local.py +144 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/permissions.py +194 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/prompts.py +21 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/quality.py +240 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/runner.py +155 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/session.py +50 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/stall_watch.py +149 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/tracer.py +271 -0
- package/apps/smidja-factory/templates/smidja/smidja_modules/utils.py +77 -0
- package/apps/smidja-factory/templates/smidja/smidja_orchestrate.py +162 -0
- package/apps/smidja-factory/templates/smidja/smidja_plan.py +45 -0
- package/apps/smidja-factory/templates/smidja/smidja_plan_build.py +55 -0
- package/apps/smidja-factory/templates/smidja/smidja_plan_build_test.py +86 -0
- package/apps/smidja-factory/templates/smidja/smidja_plan_build_test_quality.py +98 -0
- package/apps/smidja-factory/templates/smidja/smidja_prompt.py +44 -0
- package/apps/smidja-factory/templates/smidja/smidja_quality.py +49 -0
- package/apps/smidja-factory/templates/smidja/smidja_recon_iv.py +202 -0
- package/apps/smidja-factory/templates/smidja/smidja_scout.py +45 -0
- package/apps/smidja-factory/templates/smidja/smidja_simple_sdlc.py +183 -0
- package/apps/smidja-factory/templates/smidja.config.yaml +143 -0
- package/bin/app-build.sh +36 -0
- package/bin/electron-lib.sh +25 -0
- package/bin/sessrumnir.sh +1 -1
- package/bin/ymir-install.sh +7 -0
- package/package.json +15 -7
- package/scripts/electron.sh +6 -2
- package/.agents/bus/messages.json +0 -1
- package/.agents/config/agents.machine.example.yaml +0 -16
- package/.pi/mcp.json +0 -16
- package/assets/reference/state/.branch-eligible-owner +0 -4
- package/assets/reference/state/.branch-mirror-cursor +0 -1
- package/assets/reference/state/.branch-outcomes-cursor +0 -1
- package/assets/reference/state/.branch-session +0 -1
- package/assets/reference/state/.count-default_wF_p5 +0 -1
- package/assets/reference/state/.count-default_wF_p6 +0 -1
- package/assets/reference/state/.count-default_wR_p2 +0 -1
- package/assets/reference/state/.count-default_wS_p2 +0 -1
- package/assets/reference/state/.count-firstmate_fm-server-knowledge +0 -1
- package/assets/reference/state/.hash-default_wF_p5 +0 -1
- package/assets/reference/state/.hash-default_wF_p6 +0 -1
- package/assets/reference/state/.hash-default_wR_p2 +0 -1
- package/assets/reference/state/.hash-default_wS_p2 +0 -1
- package/assets/reference/state/.hash-firstmate_fm-server-knowledge +0 -1
- package/assets/reference/state/.heartbeat-streak +0 -1
- package/assets/reference/state/.inactive-outcome-reconcile +0 -2
- package/assets/reference/state/.lock +0 -1
- package/assets/reference/state/.pi-branch-extension-loaded +0 -1
- package/assets/reference/state/.pi-turnend-extension-loaded +0 -2
- package/assets/reference/state/.pi-watch-extension-loaded +0 -2
- package/assets/reference/state/.seen-server-knowledge_turn-ended +0 -1
- package/assets/reference/state/.session-start-agents-baseline +0 -2
- package/assets/reference/state/.session-start-complete +0 -1
- package/assets/reference/state/.stale-default_wF_p5 +0 -1
- package/assets/reference/state/.stale-default_wR_p2 +0 -1
- package/assets/reference/state/.stale-firstmate_fm-server-knowledge +0 -1
- package/assets/reference/state/.stale-since-default_wF_p5 +0 -1
- package/assets/reference/state/.stale-since-default_wR_p2 +0 -1
- package/assets/reference/state/.stale-since-firstmate_fm-server-knowledge +0 -1
- package/assets/reference/state/.startup-network.delivered +0 -1
- package/assets/reference/state/.startup-network.report +0 -1
- package/assets/reference/state/.startup-network.status +0 -10
- package/assets/reference/state/.startup-network.timings +0 -6
- package/assets/reference/state/.trace-context-effective +0 -1
- package/assets/reference/state/.wake-queue +0 -0
- package/assets/reference/state/.wake-queue.seq +0 -1
- package/assets/reference/state/.wake-rows.consume.BcqXSq +0 -0
- package/assets/reference/state/.wake-rows.consume.NDZZei +0 -0
- package/assets/reference/state/.wake-rows.consume.VGkhYm +0 -0
- package/assets/reference/state/.wake-rows.consume.tR2rTy +0 -0
- package/assets/reference/state/.watch-arm-output.3581p6 +0 -0
- package/assets/reference/state/.watch-arm-output.3ciDNP +0 -0
- package/assets/reference/state/.watch-arm-output.SksR6k +0 -0
- package/assets/reference/state/.watch-cycle-exits.log +0 -22
- package/assets/reference/state/.watch-deliveries.log +0 -19
- package/assets/reference/state/.watch-triage.log +0 -38
- package/assets/reference/state/.watch.lock/fm-home +0 -1
- package/assets/reference/state/.watch.lock/pid +0 -1
- package/assets/reference/state/.watch.lock/pid-identity +0 -1
- package/assets/reference/state/.watch.lock/watcher-path +0 -1
- package/assets/reference/state/.watch.lock.owner.qqbxmS/fm-home +0 -1
- package/assets/reference/state/.watch.lock.owner.qqbxmS/pid +0 -1
- package/assets/reference/state/.watch.lock.owner.qqbxmS/pid-identity +0 -1
- package/assets/reference/state/.watch.lock.owner.qqbxmS/watcher-path +0 -1
- package/assets/reference/state/.watcher-down +0 -1
- package/assets/reference/state/branch-outcomes.jsonl +0 -1
- package/assets/reference/state/branch-session/2026-09-04T16-49-38-671Z_01a06d53-6b6f-7619-930d-e6dfd9a4a29e.jsonl +0 -211
- package/assets/reference/state/home-summary.json +0 -42
- package/assets/reference/state/server-knowledge.busy-gen +0 -1
- package/assets/reference/state/server-knowledge.busy-state +0 -1
- package/assets/reference/state/server-knowledge.herdr-presentation +0 -12
- package/assets/reference/state/server-knowledge.meta +0 -18
- package/assets/reference/state/server-knowledge.pi-ext.ts +0 -26
- package/assets/reference/state/server-knowledge.turn-ended +0 -0
- /package/{assets/reference/state/.last-check → apps/hlidskjalf/src/app/.gitkeep} +0 -0
- /package/{assets/reference/state/.last-heartbeat → apps/hlidskjalf/src/components/.gitkeep} +0 -0
- /package/{assets/reference/state/.last-watcher-beat → apps/hlidskjalf/src/services/.gitkeep} +0 -0
- /package/{assets/reference/state/.main-eligible-rows.tmp.p2HMKo → apps/smidja/smidja_modules/__init__.py} +0 -0
- /package/{assets/reference/state/.main-eligible-rows.tmp.Exxm82 → apps/smidja-factory/templates/smidja/smidja_modules/__init__.py} +0 -0
|
@@ -0,0 +1,1539 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IPC channel constants and typed contracts for secure main↔renderer communication.
|
|
3
|
+
*
|
|
4
|
+
* Every channel has a strictly typed request/response shape.
|
|
5
|
+
* The preload bridge validates payloads against these contracts.
|
|
6
|
+
*/
|
|
7
|
+
import type { PermissionRule } from '../../resources/permission-rules'
|
|
8
|
+
|
|
9
|
+
// ─── IPC Channel Names ──────────────────────────────────────────────────────
|
|
10
|
+
|
|
11
|
+
export const IPC_CHANNELS = {
|
|
12
|
+
/** The live fleet, read from herdr's panes - the same source the control plane uses. */
|
|
13
|
+
FLEET_LIST: 'fleet:list',
|
|
14
|
+
// Pi process lifecycle
|
|
15
|
+
PI_START: 'pi:start',
|
|
16
|
+
PI_STOP: 'pi:stop',
|
|
17
|
+
PI_RESTART: 'pi:restart',
|
|
18
|
+
PI_STATUS: 'pi:status',
|
|
19
|
+
PI_DETECT_INSTALLATIONS: 'pi:detect-installations',
|
|
20
|
+
|
|
21
|
+
// Pi commands
|
|
22
|
+
PI_PROMPT: 'pi:prompt',
|
|
23
|
+
PI_STEER: 'pi:steer',
|
|
24
|
+
PI_FOLLOW_UP: 'pi:follow-up',
|
|
25
|
+
PI_ABORT: 'pi:abort',
|
|
26
|
+
PI_BASH: 'pi:bash',
|
|
27
|
+
PI_ABORT_BASH: 'pi:abort-bash',
|
|
28
|
+
|
|
29
|
+
// Session management
|
|
30
|
+
SESSION_NEW: 'session:new',
|
|
31
|
+
SESSION_LAUNCH_TASK: 'session:launch-task',
|
|
32
|
+
SESSION_CLOSE_RUNTIME: 'session:close-runtime',
|
|
33
|
+
SESSION_SWITCH: 'session:switch',
|
|
34
|
+
SESSION_LIST_RUNTIMES: 'session:list-runtimes',
|
|
35
|
+
SESSION_FORK: 'session:fork',
|
|
36
|
+
SESSION_CLONE: 'session:clone',
|
|
37
|
+
SESSION_LIST: 'session:list',
|
|
38
|
+
SESSION_LIST_ALL: 'session:list-all',
|
|
39
|
+
SESSION_GET_STATE: 'session:get-state',
|
|
40
|
+
SESSION_GET_MESSAGES: 'session:get-messages',
|
|
41
|
+
SESSION_GET_STATS: 'session:get-stats',
|
|
42
|
+
SESSION_SET_NAME: 'session:set-name',
|
|
43
|
+
SESSION_EXPORT_HTML: 'session:export-html',
|
|
44
|
+
SESSION_GET_FORK_MESSAGES: 'session:get-fork-messages',
|
|
45
|
+
SESSION_DELETE: 'session:delete',
|
|
46
|
+
SESSION_ARCHIVE: 'session:archive',
|
|
47
|
+
SESSION_UNARCHIVE: 'session:unarchive',
|
|
48
|
+
SESSION_LIST_ARCHIVED: 'session:list-archived',
|
|
49
|
+
SESSION_GET_LINEAGE: 'session:get-lineage',
|
|
50
|
+
SESSION_COMPACT: 'session:compact',
|
|
51
|
+
|
|
52
|
+
// Model management
|
|
53
|
+
MODEL_SET: 'model:set',
|
|
54
|
+
MODEL_CYCLE: 'model:cycle',
|
|
55
|
+
MODEL_LIST_AVAILABLE: 'model:list-available',
|
|
56
|
+
THINKING_SET_LEVEL: 'thinking:set-level',
|
|
57
|
+
THINKING_CYCLE_LEVEL: 'thinking:cycle-level',
|
|
58
|
+
|
|
59
|
+
// Settings
|
|
60
|
+
SETTINGS_GET_ALL: 'settings:get-all',
|
|
61
|
+
SETTINGS_SAVE: 'settings:save',
|
|
62
|
+
I18N_GET_ENVIRONMENT: 'i18n:get-environment',
|
|
63
|
+
|
|
64
|
+
// Permission rules
|
|
65
|
+
PERMISSION_RULES_GET: 'permission-rules:get',
|
|
66
|
+
PERMISSION_RULES_SET: 'permission-rules:set',
|
|
67
|
+
PERMISSION_RULES_IMPORT: 'permission-rules:import',
|
|
68
|
+
PERMISSION_RULES_EXPORT: 'permission-rules:export',
|
|
69
|
+
PERMISSION_RULES_WORKSPACE_STATUS: 'permission-rules:workspace-status',
|
|
70
|
+
PERMISSION_RULES_REMOVE_WORKSPACE: 'permission-rules:remove-workspace',
|
|
71
|
+
PERMISSION_RULES_SET_WORKSPACE_TRUST: 'permission-rules:set-workspace-trust',
|
|
72
|
+
|
|
73
|
+
// UI
|
|
74
|
+
UI_SELECT_RESPONSE: 'ui:select-response',
|
|
75
|
+
UI_CONFIRM_RESPONSE: 'ui:confirm-response',
|
|
76
|
+
UI_INPUT_RESPONSE: 'ui:input-response',
|
|
77
|
+
UI_EDITOR_RESPONSE: 'ui:editor-response',
|
|
78
|
+
UI_PENDING_FLUSH: 'ui:pending-flush',
|
|
79
|
+
UI_PENDING_GET: 'ui:pending-get',
|
|
80
|
+
UI_EDITOR_DIRTY_SET: 'ui:editor-dirty-set',
|
|
81
|
+
|
|
82
|
+
// System
|
|
83
|
+
SYSTEM_OPEN_DIALOG: 'system:open-dialog',
|
|
84
|
+
SYSTEM_GET_PATH: 'system:get-path',
|
|
85
|
+
SYSTEM_PATH_KIND: 'system:path-kind',
|
|
86
|
+
SYSTEM_OPEN_EXTERNAL: 'system:open-external',
|
|
87
|
+
SYSTEM_HALL_URL: 'system:hall-url',
|
|
88
|
+
SYSTEM_GET_VERSION: 'system:get-version',
|
|
89
|
+
UPDATE_CHECK: 'update:check',
|
|
90
|
+
|
|
91
|
+
// Activity
|
|
92
|
+
ACTIVITY_GET_STATS: 'activity:get-stats',
|
|
93
|
+
|
|
94
|
+
// Workflow run monitoring
|
|
95
|
+
WORKFLOW_LIST: 'workflow:list',
|
|
96
|
+
WORKFLOW_GET_RUN: 'workflow:get-run',
|
|
97
|
+
WORKFLOW_CONTROL: 'workflow:control',
|
|
98
|
+
WORKFLOW_SET_PERSISTENCE: 'workflow:set-persistence',
|
|
99
|
+
|
|
100
|
+
// Diagnostics
|
|
101
|
+
DIAGNOSTICS_GET: 'diagnostics:get',
|
|
102
|
+
|
|
103
|
+
// Workspaces
|
|
104
|
+
WORKSPACE_LIST: 'workspace:list',
|
|
105
|
+
WORKSPACE_CREATE: 'workspace:create',
|
|
106
|
+
WORKSPACE_REMOVE: 'workspace:remove',
|
|
107
|
+
WORKSPACE_RENAME: 'workspace:rename',
|
|
108
|
+
WORKSPACE_SET_ACTIVE: 'workspace:set-active',
|
|
109
|
+
WORKSPACE_GET_ACTIVE: 'workspace:get-active',
|
|
110
|
+
WORKSPACE_CHANGE_PATH: 'workspace:change-path',
|
|
111
|
+
WORKSPACE_PATH_EXISTS: 'workspace:path-exists',
|
|
112
|
+
WORKSPACE_START_PI: 'workspace:start-pi',
|
|
113
|
+
WORKSPACE_STOP_PI: 'workspace:stop-pi',
|
|
114
|
+
WORKSPACE_CREATE_TAB: 'workspace:create-tab',
|
|
115
|
+
WORKSPACE_ACTIVITY_GET: 'workspace:activity',
|
|
116
|
+
WORKSPACE_TAKE_PENDING_ACTIVATION: 'workspace:take-pending-activation',
|
|
117
|
+
|
|
118
|
+
// Packages
|
|
119
|
+
PACKAGE_LIST_INSTALLED: 'package:list-installed',
|
|
120
|
+
PACKAGE_INSTALL: 'package:install',
|
|
121
|
+
PACKAGE_REMOVE: 'package:remove',
|
|
122
|
+
PACKAGE_UPDATE: 'package:update',
|
|
123
|
+
PACKAGE_UPDATE_ALL: 'package:update-all',
|
|
124
|
+
PACKAGE_CHECK_UPDATES: 'package:check-updates',
|
|
125
|
+
PACKAGE_CATALOG_FETCH: 'package:catalog-fetch',
|
|
126
|
+
|
|
127
|
+
// Skills
|
|
128
|
+
SKILLS_LIST: 'skills:list',
|
|
129
|
+
COMMANDS_LIST: 'commands:list',
|
|
130
|
+
MCP_SERVERS_LIST: 'mcp:servers-list',
|
|
131
|
+
|
|
132
|
+
// Models config
|
|
133
|
+
MODELS_READ: 'models:read',
|
|
134
|
+
MODELS_WRITE: 'models:write',
|
|
135
|
+
|
|
136
|
+
// Council planning
|
|
137
|
+
COUNCIL_DETECT: 'council:detect',
|
|
138
|
+
COUNCIL_RUN_CONSULTANTS: 'council:run-consultants',
|
|
139
|
+
COUNCIL_ARBITER: 'council:arbiter',
|
|
140
|
+
|
|
141
|
+
// File operations
|
|
142
|
+
FILE_TREE: 'file:tree',
|
|
143
|
+
FILE_SEARCH: 'file:search',
|
|
144
|
+
FILE_SEARCH_CONTENT: 'file:search-content',
|
|
145
|
+
FILE_READ: 'file:read',
|
|
146
|
+
FILE_READ_ATTACHMENT: 'file:read-attachment',
|
|
147
|
+
FILE_WRITE: 'file:write',
|
|
148
|
+
FILE_DIFF: 'file:diff',
|
|
149
|
+
FILE_STAGED_DIFF: 'file:staged-diff',
|
|
150
|
+
GIT_STATUS: 'git:status',
|
|
151
|
+
GIT_BRANCH: 'git:branch',
|
|
152
|
+
GIT_CONVEYOR_STATUS: 'git:conveyor-status',
|
|
153
|
+
GIT_CONVEYOR_COMMIT: 'git:conveyor-commit',
|
|
154
|
+
GIT_CONVEYOR_PUSH: 'git:conveyor-push',
|
|
155
|
+
GIT_CONVEYOR_CREATE_PR: 'git:conveyor-create-pr',
|
|
156
|
+
|
|
157
|
+
// Terminal
|
|
158
|
+
TERMINAL_START: 'terminal:start',
|
|
159
|
+
TERMINAL_INPUT: 'terminal:input',
|
|
160
|
+
TERMINAL_RESIZE: 'terminal:resize',
|
|
161
|
+
TERMINAL_STOP: 'terminal:stop',
|
|
162
|
+
|
|
163
|
+
// Session tags
|
|
164
|
+
TAG_GET: 'tag:get',
|
|
165
|
+
TAG_SET: 'tag:set',
|
|
166
|
+
TAG_ADD: 'tag:add',
|
|
167
|
+
TAG_REMOVE: 'tag:remove',
|
|
168
|
+
TAG_GET_ALL: 'tag:get-all',
|
|
169
|
+
TAG_GET_ALL_USED: 'tag:get-all-used',
|
|
170
|
+
TAG_AUTO_GET_ALL: 'tag:auto-get-all',
|
|
171
|
+
TAG_AUTO_ENSURE: 'tag:auto-ensure',
|
|
172
|
+
TAG_AUTO_REMOVE: 'tag:auto-remove',
|
|
173
|
+
|
|
174
|
+
// Notes (reusable prompts / commands)
|
|
175
|
+
NOTES_LIST: 'notes:list',
|
|
176
|
+
NOTES_CREATE: 'notes:create',
|
|
177
|
+
NOTES_UPDATE: 'notes:update',
|
|
178
|
+
NOTES_REMOVE: 'notes:remove',
|
|
179
|
+
|
|
180
|
+
// Themes (user-created theme storage)
|
|
181
|
+
THEMES_LIST: 'themes:list',
|
|
182
|
+
THEMES_SAVE: 'themes:save',
|
|
183
|
+
THEMES_DELETE: 'themes:delete',
|
|
184
|
+
THEMES_INSTALL_URL: 'themes:install-from-url',
|
|
185
|
+
THEMES_EXPORT: 'themes:export',
|
|
186
|
+
THEMES_IMPORT: 'themes:import',
|
|
187
|
+
THEMES_GALLERY_LIST: 'themes:gallery-list',
|
|
188
|
+
THEMES_GALLERY_IMAGE: 'themes:gallery-image',
|
|
189
|
+
THEMES_SET_WINDOW_BACKGROUND: 'themes:set-window-background',
|
|
190
|
+
|
|
191
|
+
// Events (main → renderer)
|
|
192
|
+
EVENT_PI: 'event:pi',
|
|
193
|
+
EVENT_PENDING_PROMPTS: 'event:pending-prompts',
|
|
194
|
+
EVENT_WORKSPACE_ACTIVITY: 'event:workspace-activity',
|
|
195
|
+
EVENT_SESSION_RUNTIME: 'event:session-runtime',
|
|
196
|
+
EVENT_ACTIVATE_WORKSPACE: 'event:activate-workspace',
|
|
197
|
+
EVENT_FILE_CHANGE: 'event:file-change',
|
|
198
|
+
EVENT_TERMINAL_DATA: 'event:terminal-data',
|
|
199
|
+
EVENT_TERMINAL_EXIT: 'event:terminal-exit',
|
|
200
|
+
EVENT_COUNCIL_PROGRESS: 'event:council-progress',
|
|
201
|
+
} as const
|
|
202
|
+
|
|
203
|
+
// ─── Pi Process Types ───────────────────────────────────────────────────────
|
|
204
|
+
|
|
205
|
+
export type PiProcessStatus = 'stopped' | 'starting' | 'running' | 'error'
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Where a 'starting' runtime is in its startup: 'spawning' until the first
|
|
209
|
+
* stdout byte proves the process is alive, 'waiting-on-engine' once the
|
|
210
|
+
* silence deadline passed with output flowing but readiness still pending —
|
|
211
|
+
* typically an extension startup hook waiting on a local model server.
|
|
212
|
+
*/
|
|
213
|
+
export type PiStartupPhase = 'spawning' | 'waiting-on-engine'
|
|
214
|
+
|
|
215
|
+
export interface PiStatus {
|
|
216
|
+
status: PiProcessStatus
|
|
217
|
+
pid: number | null
|
|
218
|
+
error: string | null
|
|
219
|
+
/**
|
|
220
|
+
* Engine identity of the live child, so the UI can name what is actually
|
|
221
|
+
* running. Optional because a snapshot may predate the field; consumers
|
|
222
|
+
* fall back to Pi, which is what an unlabelled process has always been.
|
|
223
|
+
*/
|
|
224
|
+
engine?: AgentEngineKind
|
|
225
|
+
/** Present only while status is 'starting'. */
|
|
226
|
+
startupPhase?: PiStartupPhase
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export type SessionRuntimeActivity = 'working' | 'needs-approval' | 'completed' | 'failed'
|
|
230
|
+
|
|
231
|
+
/** Live runtime for one Pi session. Multiple runtimes may share one workspace cwd. */
|
|
232
|
+
export interface SessionRuntimeInfo extends PiStatus {
|
|
233
|
+
runtimeId: string
|
|
234
|
+
workspaceId: string
|
|
235
|
+
sessionPath: string | null
|
|
236
|
+
sessionId: string | null
|
|
237
|
+
activity: SessionRuntimeActivity | null
|
|
238
|
+
active: boolean
|
|
239
|
+
/** Main emitted marker telling the renderer to remove this closed tab. */
|
|
240
|
+
closed?: boolean
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export interface SessionRuntimeCloseResult {
|
|
244
|
+
runtimeId: string
|
|
245
|
+
workspaceId: string
|
|
246
|
+
sessionPath: string | null
|
|
247
|
+
/** Active replacement chosen atomically with the close, if one exists. */
|
|
248
|
+
replacementSessionPath?: string | null
|
|
249
|
+
/** Proven header-only. Necessary for the auto-delete, never sufficient. */
|
|
250
|
+
empty: boolean
|
|
251
|
+
/**
|
|
252
|
+
* True only when this app created the session file during this run: a tab
|
|
253
|
+
* opened with no session that let the agent write a fresh JSONL. A tab that
|
|
254
|
+
* adopted an existing file — opened from the list, forked, or resumed with
|
|
255
|
+
* `--continue` — is false, because that file is the user's conversation and
|
|
256
|
+
* must survive being closed no matter how it reads on disk.
|
|
257
|
+
*/
|
|
258
|
+
appCreated: boolean
|
|
259
|
+
deleted: boolean
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
export interface SessionLaunchTaskOptions {
|
|
263
|
+
workspaceId: string
|
|
264
|
+
prompt: string
|
|
265
|
+
isolated?: boolean
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
export interface GitConveyorStatus {
|
|
269
|
+
branch: string | null
|
|
270
|
+
head: string
|
|
271
|
+
lastCommitMessage: string | null
|
|
272
|
+
dirtyFiles: number
|
|
273
|
+
ahead: number
|
|
274
|
+
behind: number
|
|
275
|
+
hasUpstream: boolean
|
|
276
|
+
/** Remote branch used by the explicit push target, when configured. */
|
|
277
|
+
pushRemote: string | null
|
|
278
|
+
/** Branch configured as this branch's upstream, when one exists. */
|
|
279
|
+
upstreamBranch: string | null
|
|
280
|
+
/** Default base branch discovered from the upstream remote, when available. */
|
|
281
|
+
baseBranch: string | null
|
|
282
|
+
remoteUrl: string | null
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
export interface GitConveyorCommitOptions {
|
|
286
|
+
message: string
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
export interface GitConveyorPullRequestOptions {
|
|
290
|
+
title: string
|
|
291
|
+
body: string
|
|
292
|
+
/** Optional explicit base branch; otherwise the upstream remote HEAD is used. */
|
|
293
|
+
base?: string
|
|
294
|
+
draft?: boolean
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
export interface GitConveyorPullRequestResult {
|
|
298
|
+
url: string | null
|
|
299
|
+
output: string
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
export interface PiStartOptions {
|
|
303
|
+
cwd?: string
|
|
304
|
+
model?: string
|
|
305
|
+
provider?: string
|
|
306
|
+
sessionPath?: string
|
|
307
|
+
noSession?: boolean
|
|
308
|
+
// When true (and neither sessionPath, forkSessionPath nor noSession is set),
|
|
309
|
+
// Pi is launched with --continue so it resumes the most recent session for
|
|
310
|
+
// the cwd instead of creating a fresh one.
|
|
311
|
+
continueSession?: boolean
|
|
312
|
+
// Start a new session by forking this existing Pi session file. The new
|
|
313
|
+
// session is created in the supplied cwd.
|
|
314
|
+
forkSessionPath?: string
|
|
315
|
+
/**
|
|
316
|
+
* Engine this one start must spawn, overriding the configured default. Each
|
|
317
|
+
* engine keeps its sessions in its own store, so a session can only be
|
|
318
|
+
* resumed by the engine that wrote it. Absent means "use the configured
|
|
319
|
+
* engine", which is what a brand-new session does.
|
|
320
|
+
*/
|
|
321
|
+
engine?: AgentEngineKind
|
|
322
|
+
args?: string[]
|
|
323
|
+
env?: Record<string, string>
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// ─── Terminal Types ─────────────────────────────────────────────────────────
|
|
327
|
+
|
|
328
|
+
export interface TerminalStartOptions {
|
|
329
|
+
cwd?: string
|
|
330
|
+
cols?: number
|
|
331
|
+
rows?: number
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
export interface TerminalStartResult {
|
|
335
|
+
pid: number
|
|
336
|
+
shell: string
|
|
337
|
+
cwd: string
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
export interface TerminalExitEvent {
|
|
341
|
+
exitCode: number
|
|
342
|
+
signal?: number
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// ─── Pi RPC Event Types (subset used by renderer) ───────────────────────────
|
|
346
|
+
|
|
347
|
+
export interface PiAgentStartEvent {
|
|
348
|
+
type: 'agent_start'
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
export interface PiAgentEndEvent {
|
|
352
|
+
type: 'agent_end'
|
|
353
|
+
messages: unknown[]
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
export interface PiMessageUpdateEvent {
|
|
357
|
+
type: 'message_update'
|
|
358
|
+
message: Record<string, unknown>
|
|
359
|
+
assistantMessageEvent: {
|
|
360
|
+
type: string
|
|
361
|
+
contentIndex?: number
|
|
362
|
+
delta?: string
|
|
363
|
+
partial?: Record<string, unknown>
|
|
364
|
+
content?: string
|
|
365
|
+
thinking?: string
|
|
366
|
+
toolCall?: Record<string, unknown>
|
|
367
|
+
reason?: string
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
export interface PiToolExecutionStartEvent {
|
|
372
|
+
type: 'tool_execution_start'
|
|
373
|
+
toolCallId: string
|
|
374
|
+
toolName: string
|
|
375
|
+
args: Record<string, unknown>
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
export interface PiToolExecutionUpdateEvent {
|
|
379
|
+
type: 'tool_execution_update'
|
|
380
|
+
toolCallId: string
|
|
381
|
+
toolName: string
|
|
382
|
+
args: Record<string, unknown>
|
|
383
|
+
partialResult: {
|
|
384
|
+
content: Array<{ type: string; text?: string }>
|
|
385
|
+
details: Record<string, unknown>
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
export interface PiToolExecutionEndEvent {
|
|
390
|
+
type: 'tool_execution_end'
|
|
391
|
+
toolCallId: string
|
|
392
|
+
toolName: string
|
|
393
|
+
result: {
|
|
394
|
+
content: Array<{ type: string; text?: string }>
|
|
395
|
+
details: Record<string, unknown>
|
|
396
|
+
}
|
|
397
|
+
isError: boolean
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
export interface PiTurnStartEvent {
|
|
401
|
+
type: 'turn_start'
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
export interface PiTurnEndEvent {
|
|
405
|
+
type: 'turn_end'
|
|
406
|
+
message: Record<string, unknown>
|
|
407
|
+
toolResults: unknown[]
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
export interface PiQueueUpdateEvent {
|
|
411
|
+
type: 'queue_update'
|
|
412
|
+
steering: string[]
|
|
413
|
+
followUp: string[]
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
export interface PiCompactionStartEvent {
|
|
417
|
+
type: 'compaction_start'
|
|
418
|
+
reason: string
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
export interface PiCompactionEndEvent {
|
|
422
|
+
type: 'compaction_end'
|
|
423
|
+
reason: string
|
|
424
|
+
result: unknown
|
|
425
|
+
aborted: boolean
|
|
426
|
+
willRetry: boolean
|
|
427
|
+
errorMessage?: string
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
export interface PiAutoRetryStartEvent {
|
|
431
|
+
type: 'auto_retry_start'
|
|
432
|
+
attempt: number
|
|
433
|
+
maxAttempts: number
|
|
434
|
+
delayMs: number
|
|
435
|
+
errorMessage: string
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
export interface PiAutoRetryEndEvent {
|
|
439
|
+
type: 'auto_retry_end'
|
|
440
|
+
success: boolean
|
|
441
|
+
attempt: number
|
|
442
|
+
finalError?: string
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
export interface PiExtensionErrorEvent {
|
|
446
|
+
type: 'extension_error'
|
|
447
|
+
extensionPath: string
|
|
448
|
+
event: string
|
|
449
|
+
error: string
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
export interface PiResponseEvent {
|
|
453
|
+
type: 'response'
|
|
454
|
+
command: string
|
|
455
|
+
id?: string
|
|
456
|
+
success: boolean
|
|
457
|
+
error?: string
|
|
458
|
+
data?: unknown
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
// Extension UI events
|
|
462
|
+
export interface PiExtensionUiRequest {
|
|
463
|
+
type: 'extension_ui_request'
|
|
464
|
+
id: string
|
|
465
|
+
method: 'select' | 'confirm' | 'input' | 'editor' | 'notify' | 'setStatus' | 'setWidget' | 'setTitle' | 'set_editor_text' | 'open_url' | 'cancel'
|
|
466
|
+
title?: string
|
|
467
|
+
message?: string
|
|
468
|
+
options?: string[]
|
|
469
|
+
placeholder?: string
|
|
470
|
+
prefill?: string
|
|
471
|
+
notifyType?: 'info' | 'warning' | 'error'
|
|
472
|
+
statusKey?: string
|
|
473
|
+
statusText?: string
|
|
474
|
+
widgetKey?: string
|
|
475
|
+
widgetLines?: string[]
|
|
476
|
+
widgetPlacement?: string
|
|
477
|
+
timeout?: number
|
|
478
|
+
url?: string
|
|
479
|
+
launchUrl?: string
|
|
480
|
+
instructions?: string
|
|
481
|
+
targetId?: string
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* Blocking extension-UI prompts held in the main process, keyed by workspace
|
|
486
|
+
* id. Zero entries are omitted, so an empty object means nothing is waiting.
|
|
487
|
+
*/
|
|
488
|
+
export type PendingPromptCounts = Record<string, number>
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* Per-workspace background activity derived in the main process from every
|
|
492
|
+
* workspace's Pi events (the renderer only receives streamed events for the
|
|
493
|
+
* active workspace, so it cannot derive this itself).
|
|
494
|
+
*/
|
|
495
|
+
export type WorkspaceActivityState = 'working' | 'needs-approval' | 'completed' | 'failed'
|
|
496
|
+
|
|
497
|
+
export interface WorkspaceActivity {
|
|
498
|
+
state: WorkspaceActivityState
|
|
499
|
+
/** Epoch ms when the workspace entered this state. */
|
|
500
|
+
since: number
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/** Keyed by workspace id; idle workspaces are omitted. */
|
|
504
|
+
export type WorkspaceActivityMap = Record<string, WorkspaceActivity>
|
|
505
|
+
|
|
506
|
+
/** Target carried by a desktop-notification click. */
|
|
507
|
+
export interface WorkspaceActivationIntent {
|
|
508
|
+
workspaceId: string
|
|
509
|
+
sessionPath?: string
|
|
510
|
+
runtimeId?: string
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
// ─── Workflow monitoring ────────────────────────────────────────────────────
|
|
514
|
+
|
|
515
|
+
export type WorkflowRunStatus = 'pending' | 'running' | 'paused' | 'completed' | 'failed' | 'aborted' | 'unknown'
|
|
516
|
+
export type WorkflowAgentStatus = 'queued' | 'running' | 'done' | 'error' | 'skipped'
|
|
517
|
+
|
|
518
|
+
export interface WorkflowAgentSummary {
|
|
519
|
+
id: number
|
|
520
|
+
callId?: string
|
|
521
|
+
label: string
|
|
522
|
+
phase?: string
|
|
523
|
+
status: WorkflowAgentStatus
|
|
524
|
+
error?: string
|
|
525
|
+
errorCode?: string
|
|
526
|
+
recoverable?: boolean
|
|
527
|
+
hasHistory: boolean
|
|
528
|
+
resultPreview?: string
|
|
529
|
+
tokens?: number
|
|
530
|
+
model?: string
|
|
531
|
+
startedAt?: string
|
|
532
|
+
endedAt?: string
|
|
533
|
+
tokenUsage?: {
|
|
534
|
+
input: number
|
|
535
|
+
output: number
|
|
536
|
+
total: number
|
|
537
|
+
cost?: number
|
|
538
|
+
cacheRead?: number
|
|
539
|
+
cacheWrite?: number
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/**
|
|
544
|
+
* Control action dispatched to the run's owning workspace Pi process. `stop`
|
|
545
|
+
* maps to the extension's `/workflows stop <id>` (marks the run aborted),
|
|
546
|
+
* `resume` to `/workflows resume <id>` (paused/failed/pending only).
|
|
547
|
+
*/
|
|
548
|
+
export type WorkflowControlAction = 'stop' | 'resume'
|
|
549
|
+
|
|
550
|
+
export type WorkflowControlReason =
|
|
551
|
+
| 'no-pi'
|
|
552
|
+
| 'pi-not-running'
|
|
553
|
+
| 'extension-missing'
|
|
554
|
+
| 'status-not-permitted'
|
|
555
|
+
| 'dispatch-failed'
|
|
556
|
+
| 'timeout'
|
|
557
|
+
|
|
558
|
+
/** Result of a workflow control dispatch (never a fake local status change). */
|
|
559
|
+
export interface WorkflowControlResult {
|
|
560
|
+
action: WorkflowControlAction
|
|
561
|
+
runId: string
|
|
562
|
+
ok: boolean
|
|
563
|
+
reason?: WorkflowControlReason
|
|
564
|
+
/** True only when the extension command was actually handed to Pi. */
|
|
565
|
+
dispatched?: boolean
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
/** Safe, renderer-sized projection of a dynamic-workflow persisted run. */
|
|
569
|
+
export interface WorkflowRunSummary {
|
|
570
|
+
workspaceId: string
|
|
571
|
+
workspaceName: string
|
|
572
|
+
cwd: string
|
|
573
|
+
runId: string
|
|
574
|
+
workflowName: string
|
|
575
|
+
sessionId?: string
|
|
576
|
+
status: WorkflowRunStatus
|
|
577
|
+
pauseReason?: string
|
|
578
|
+
resetHint?: string
|
|
579
|
+
phases: string[]
|
|
580
|
+
currentPhase?: string
|
|
581
|
+
agents: WorkflowAgentSummary[]
|
|
582
|
+
startedAt: string
|
|
583
|
+
updatedAt: string
|
|
584
|
+
durationMs?: number
|
|
585
|
+
tokenUsage?: {
|
|
586
|
+
input: number
|
|
587
|
+
output: number
|
|
588
|
+
total: number
|
|
589
|
+
cost?: number
|
|
590
|
+
cacheRead?: number
|
|
591
|
+
cacheWrite?: number
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
export interface WorkflowHistoryEntry {
|
|
596
|
+
id?: string
|
|
597
|
+
timestamp?: string
|
|
598
|
+
role: string
|
|
599
|
+
kind: string
|
|
600
|
+
text: string
|
|
601
|
+
toolName?: string
|
|
602
|
+
path?: string
|
|
603
|
+
diff?: string
|
|
604
|
+
isError?: boolean
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
export interface WorkflowAgentDetail extends WorkflowAgentSummary {
|
|
608
|
+
prompt?: string
|
|
609
|
+
resultText?: string
|
|
610
|
+
history: WorkflowHistoryEntry[]
|
|
611
|
+
transcriptSource: 'persisted-session' | 'run-history' | 'none'
|
|
612
|
+
transcriptComplete: boolean
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
/** Lazy-loaded detail for one run; large fields never travel in list polling. */
|
|
616
|
+
export interface WorkflowRunDetail extends WorkflowRunSummary {
|
|
617
|
+
script?: string
|
|
618
|
+
argsText?: string
|
|
619
|
+
resultText?: string
|
|
620
|
+
logs: string[]
|
|
621
|
+
agents: WorkflowAgentDetail[]
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
export interface PiMessageStartEvent {
|
|
625
|
+
type: 'message_start'
|
|
626
|
+
message: Record<string, unknown>
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
export interface PiMessageEndEvent {
|
|
630
|
+
type: 'message_end'
|
|
631
|
+
message: Record<string, unknown>
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
export interface PiStatusChangeEvent {
|
|
635
|
+
type: 'status_change'
|
|
636
|
+
status: PiProcessStatus
|
|
637
|
+
pid: number | null
|
|
638
|
+
error: string | null
|
|
639
|
+
engine?: AgentEngineKind
|
|
640
|
+
startupPhase?: PiStartupPhase
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
// Emitted by Pi when the session title changes — e.g. an auto-title extension,
|
|
644
|
+
// the `/name` command, or our own rename. `name` is the new title (null/empty
|
|
645
|
+
// when cleared).
|
|
646
|
+
export interface PiSessionInfoChangedEvent {
|
|
647
|
+
type: 'session_info_changed'
|
|
648
|
+
name?: string | null
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/** OMP's RPC spelling for a live session title update. */
|
|
652
|
+
export interface PiSessionInfoUpdateEvent {
|
|
653
|
+
type: 'session_info_update'
|
|
654
|
+
title?: string | null
|
|
655
|
+
sessionId?: string
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
/** OMP emits this when its slash-command catalog changes. */
|
|
659
|
+
export interface PiAvailableCommandsUpdateEvent {
|
|
660
|
+
type: 'available_commands_update'
|
|
661
|
+
commands: unknown[]
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
/** Output from a local-only OMP slash command. */
|
|
665
|
+
export interface PiCommandOutputEvent {
|
|
666
|
+
type: 'command_output'
|
|
667
|
+
text: string
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
/** Completion signal for an accepted prompt that did not invoke the agent. */
|
|
671
|
+
export interface PiPromptResultEvent {
|
|
672
|
+
type: 'prompt_result'
|
|
673
|
+
id?: string
|
|
674
|
+
agentInvoked: boolean
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
/** OMP config changes that should cause the renderer to re-read get_state. */
|
|
678
|
+
export interface PiConfigUpdateEvent {
|
|
679
|
+
type: 'config_update'
|
|
680
|
+
model?: unknown
|
|
681
|
+
thinkingLevel?: string
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
export type PiRpcEvent =
|
|
685
|
+
| PiAgentStartEvent
|
|
686
|
+
| PiAgentEndEvent
|
|
687
|
+
| PiMessageStartEvent
|
|
688
|
+
| PiMessageUpdateEvent
|
|
689
|
+
| PiMessageEndEvent
|
|
690
|
+
| PiToolExecutionStartEvent
|
|
691
|
+
| PiToolExecutionUpdateEvent
|
|
692
|
+
| PiToolExecutionEndEvent
|
|
693
|
+
| PiTurnStartEvent
|
|
694
|
+
| PiTurnEndEvent
|
|
695
|
+
| PiQueueUpdateEvent
|
|
696
|
+
| PiCompactionStartEvent
|
|
697
|
+
| PiCompactionEndEvent
|
|
698
|
+
| PiAutoRetryStartEvent
|
|
699
|
+
| PiAutoRetryEndEvent
|
|
700
|
+
| PiExtensionErrorEvent
|
|
701
|
+
| PiResponseEvent
|
|
702
|
+
| PiExtensionUiRequest
|
|
703
|
+
| PiStatusChangeEvent
|
|
704
|
+
| PiSessionInfoChangedEvent
|
|
705
|
+
| PiSessionInfoUpdateEvent
|
|
706
|
+
| PiAvailableCommandsUpdateEvent
|
|
707
|
+
| PiCommandOutputEvent
|
|
708
|
+
| PiPromptResultEvent
|
|
709
|
+
| PiConfigUpdateEvent
|
|
710
|
+
|
|
711
|
+
// ─── Model Types ────────────────────────────────────────────────────────────
|
|
712
|
+
|
|
713
|
+
export interface ModelInfo {
|
|
714
|
+
id: string
|
|
715
|
+
name: string
|
|
716
|
+
api: string
|
|
717
|
+
provider: string
|
|
718
|
+
baseUrl: string
|
|
719
|
+
reasoning: boolean
|
|
720
|
+
input: string[]
|
|
721
|
+
contextWindow: number
|
|
722
|
+
maxTokens: number
|
|
723
|
+
cost: {
|
|
724
|
+
input: number
|
|
725
|
+
output: number
|
|
726
|
+
cacheRead: number
|
|
727
|
+
cacheWrite: number
|
|
728
|
+
}
|
|
729
|
+
/** OMP exposes the effort values supported by the active model. */
|
|
730
|
+
thinking?: {
|
|
731
|
+
mode?: string
|
|
732
|
+
efforts?: string[]
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
// ─── Session Types ──────────────────────────────────────────────────────────
|
|
737
|
+
|
|
738
|
+
export interface SessionState {
|
|
739
|
+
model: ModelInfo | null
|
|
740
|
+
thinkingLevel: string
|
|
741
|
+
isStreaming: boolean
|
|
742
|
+
isCompacting: boolean
|
|
743
|
+
steeringMode: string
|
|
744
|
+
followUpMode: string
|
|
745
|
+
sessionFile: string | null
|
|
746
|
+
sessionId: string
|
|
747
|
+
sessionName: string | null
|
|
748
|
+
autoCompactionEnabled: boolean
|
|
749
|
+
messageCount: number
|
|
750
|
+
pendingMessageCount: number
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
export interface SessionStats {
|
|
754
|
+
sessionFile: string | null
|
|
755
|
+
sessionId: string
|
|
756
|
+
userMessages: number
|
|
757
|
+
assistantMessages: number
|
|
758
|
+
toolCalls: number
|
|
759
|
+
toolResults: number
|
|
760
|
+
totalMessages: number
|
|
761
|
+
tokens: {
|
|
762
|
+
input: number
|
|
763
|
+
output: number
|
|
764
|
+
cacheRead: number
|
|
765
|
+
cacheWrite: number
|
|
766
|
+
total: number
|
|
767
|
+
}
|
|
768
|
+
cost: number
|
|
769
|
+
contextUsage: {
|
|
770
|
+
tokens: number | null
|
|
771
|
+
contextWindow: number
|
|
772
|
+
percent: number | null
|
|
773
|
+
} | null
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
export interface SessionListItem {
|
|
777
|
+
path: string
|
|
778
|
+
name: string | null
|
|
779
|
+
/** Preview of the session's first user message, or null if it has none. */
|
|
780
|
+
preview: string | null
|
|
781
|
+
/** `empty` is provably header-only; `unknown` must remain recoverable. */
|
|
782
|
+
contentState?: 'empty' | 'non-empty' | 'unknown'
|
|
783
|
+
/** Filename stem used by GUI registries (tags/archive), e.g. timestamp_uuid. */
|
|
784
|
+
sessionId: string
|
|
785
|
+
/** Pi's header UUID, used to correlate workflow runs with this session. */
|
|
786
|
+
piSessionId?: string
|
|
787
|
+
/**
|
|
788
|
+
* Engine that owns this session, taken from the store the file was indexed
|
|
789
|
+
* from. Optional because a row the index could not classify must stay
|
|
790
|
+
* listable; consumers show no engine tag rather than guessing one.
|
|
791
|
+
*/
|
|
792
|
+
engine?: AgentEngineKind
|
|
793
|
+
lastModified: number
|
|
794
|
+
messageCount: number
|
|
795
|
+
projectPath: string
|
|
796
|
+
projectName: string
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
// Used by the heatmap grid helper (buildWeeks / intensityLevel).
|
|
800
|
+
export interface ActivityDay {
|
|
801
|
+
date: string // local calendar day, YYYY-MM-DD
|
|
802
|
+
count: number // activity count on that day
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
// ─── Activity stats (persisted, survives session deletion) ────────────────────
|
|
806
|
+
|
|
807
|
+
export interface ActivityStatsDay {
|
|
808
|
+
date: string // local calendar day, YYYY-MM-DD
|
|
809
|
+
messages: number // all `type === 'message'` records that day
|
|
810
|
+
tokens: number // assistant input + output tokens that day (all models)
|
|
811
|
+
tokensByModel: Record<string, number> // model id -> input + output that day
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
export interface ActivityModelUsage {
|
|
815
|
+
model: string // stable model id (e.g. "claude-opus-4-8", "ornith-1.0-35b@q6_k")
|
|
816
|
+
name: string | null // latest display name from models.json; null → fall back to id
|
|
817
|
+
input: number
|
|
818
|
+
output: number
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
export interface ActivityRangeStats {
|
|
822
|
+
sessions: number // distinct sessions with activity in the range
|
|
823
|
+
messages: number
|
|
824
|
+
totalTokens: number // input + output across all models
|
|
825
|
+
activeDays: number
|
|
826
|
+
currentStreak: number // consecutive active days ending today (capped by range)
|
|
827
|
+
longestStreak: number
|
|
828
|
+
peakHour: number | null // busiest local hour 0..23, or null if no activity
|
|
829
|
+
models: ActivityModelUsage[] // descending by input + output
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
// Range keys are trailing-day counts: 365 ("1y"), 180 ("6mo"), 90 ("3mo"), 30, 7.
|
|
833
|
+
export type ActivityRangeKey = '365' | '180' | '90' | '30' | '7'
|
|
834
|
+
|
|
835
|
+
export interface ActivityStatsResult {
|
|
836
|
+
days: ActivityStatsDay[] // ascending, length === WINDOW_DAYS, zero-filled
|
|
837
|
+
ranges: Record<ActivityRangeKey, ActivityRangeStats>
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
export interface AutoTagSessionRef {
|
|
841
|
+
sessionId: string
|
|
842
|
+
path: string
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
export interface SessionDeleteResult {
|
|
846
|
+
ok: boolean
|
|
847
|
+
method: 'trash' | 'unlink'
|
|
848
|
+
error?: string
|
|
849
|
+
/**
|
|
850
|
+
* Session promoted to active while the deleted session's runtime was closed,
|
|
851
|
+
* if one existed. The renderer opens it instead of creating a new session,
|
|
852
|
+
* which would spawn a third runtime and steal activation from this one.
|
|
853
|
+
*/
|
|
854
|
+
replacementSessionPath?: string | null
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
export type ArchivedSessionsMap = Record<string, number>
|
|
858
|
+
|
|
859
|
+
// File extensions Pi accepts as inline images (matches Pi's RPC image support).
|
|
860
|
+
export const SUPPORTED_IMAGE_EXTENSIONS = ['png', 'jpg', 'jpeg', 'gif', 'webp'] as const
|
|
861
|
+
|
|
862
|
+
/** A single image attachment in the shape Pi's RPC `prompt` command expects. */
|
|
863
|
+
export interface PromptImage {
|
|
864
|
+
type: 'image'
|
|
865
|
+
mimeType: string
|
|
866
|
+
/** Base64-encoded image bytes (no data: URI prefix). */
|
|
867
|
+
data: string
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
/**
|
|
871
|
+
* Result of reading a user-selected attachment. Images are returned as a
|
|
872
|
+
* Pi-ready `PromptImage`; everything else is read as UTF-8 text to inline.
|
|
873
|
+
*/
|
|
874
|
+
export type AttachmentReadResult =
|
|
875
|
+
| { kind: 'image'; name: string; image: PromptImage }
|
|
876
|
+
| { kind: 'text'; name: string; content: string }
|
|
877
|
+
|
|
878
|
+
/** Options for the native open dialog. Defaults to picking a directory. */
|
|
879
|
+
export interface OpenDialogOptions {
|
|
880
|
+
title?: string
|
|
881
|
+
mode?: 'file' | 'directory' | 'either'
|
|
882
|
+
filters?: Array<{ name: string; extensions: string[] }>
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
/** Result of SYSTEM_PATH_KIND (drag-drop folder open). */
|
|
886
|
+
export interface PathKindResult {
|
|
887
|
+
exists: boolean
|
|
888
|
+
isDirectory: boolean
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
export type { SessionLineageRecord } from './session-lineage'
|
|
892
|
+
export type { ModelsConfig, ProviderConfig, CustomModel } from './models-config'
|
|
893
|
+
export type {
|
|
894
|
+
CouncilConfig,
|
|
895
|
+
CouncilAgentId,
|
|
896
|
+
ConsensusMode,
|
|
897
|
+
ConsultantResult,
|
|
898
|
+
ConsultantStatus,
|
|
899
|
+
} from './council-config'
|
|
900
|
+
|
|
901
|
+
import type { CouncilAgentId as CouncilAgentIdType, ConsultantResult as ConsultantResultType } from './council-config'
|
|
902
|
+
|
|
903
|
+
/** Result of COUNCIL_DETECT. */
|
|
904
|
+
export interface CouncilDetectResult {
|
|
905
|
+
agents: Array<{ id: CouncilAgentIdType; found: boolean }>
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
/**
|
|
909
|
+
* Request payload for COUNCIL_RUN_CONSULTANTS. The working directory is NOT
|
|
910
|
+
* part of the payload: the main process resolves it from the active workspace,
|
|
911
|
+
* so consultants always run against the real project tree.
|
|
912
|
+
*/
|
|
913
|
+
export interface CouncilRunRequest {
|
|
914
|
+
request: string
|
|
915
|
+
members: CouncilAgentIdType[]
|
|
916
|
+
timeoutSeconds: number
|
|
917
|
+
consensusMode: 'arbiter' | 'debate'
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
/** Result of COUNCIL_RUN_CONSULTANTS. */
|
|
921
|
+
export interface CouncilRunResult {
|
|
922
|
+
results: ConsultantResultType[]
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
/**
|
|
926
|
+
* Request payload for COUNCIL_ARBITER. Pi merges (`merge`) or revises (`revise`)
|
|
927
|
+
* the consensus plan in an isolated read-only subprocess. As with
|
|
928
|
+
* COUNCIL_RUN_CONSULTANTS, the working directory is resolved from the active
|
|
929
|
+
* workspace in the main process, never from the renderer.
|
|
930
|
+
*/
|
|
931
|
+
export type CouncilArbiterRequest =
|
|
932
|
+
| { kind: 'merge'; request: string; results: ConsultantResultType[]; timeoutSeconds: number }
|
|
933
|
+
| { kind: 'revise'; request: string; plan: string; feedback: string; timeoutSeconds: number }
|
|
934
|
+
|
|
935
|
+
/** Result of COUNCIL_ARBITER: the merged or revised consensus plan text. */
|
|
936
|
+
export interface CouncilArbiterResult {
|
|
937
|
+
plan: string
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
/**
|
|
941
|
+
* Streamed live during a council run (main → renderer on EVENT_COUNCIL_PROGRESS).
|
|
942
|
+
* `chunk` is human-readable text appended to the consultant's live output:
|
|
943
|
+
* raw stdout for Codex, parsed text deltas for Claude.
|
|
944
|
+
*/
|
|
945
|
+
export interface CouncilProgressEvent {
|
|
946
|
+
id: CouncilAgentIdType
|
|
947
|
+
chunk: string
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
import type { ModelsConfig as ModelsConfigType } from './models-config'
|
|
951
|
+
import type { CouncilConfig } from './council-config'
|
|
952
|
+
/** Result of the MODELS_READ IPC call. */
|
|
953
|
+
/**
|
|
954
|
+
* Where the custom-models config was read from. Main resolves the engine and
|
|
955
|
+
* file; the editor shows exactly this so its labels never name a file the save
|
|
956
|
+
* will not touch.
|
|
957
|
+
*/
|
|
958
|
+
export interface ModelsFileInfo {
|
|
959
|
+
engine: AgentEngineKind
|
|
960
|
+
/** Absolute path of the file read (and written on save). */
|
|
961
|
+
file: string
|
|
962
|
+
/** Basename, for labels ("Save models.yml"). */
|
|
963
|
+
name: string
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
/** Why the models file could not be used. Display text is built from this. */
|
|
967
|
+
export type ModelsReadFailure =
|
|
968
|
+
| { kind: 'unreadable'; detail: string }
|
|
969
|
+
| { kind: 'invalid-syntax'; format: 'json' | 'yaml'; detail: string }
|
|
970
|
+
| { kind: 'missing-providers' }
|
|
971
|
+
|
|
972
|
+
export type ModelsReadResult =
|
|
973
|
+
| { config: ModelsConfigType; location: ModelsFileInfo }
|
|
974
|
+
| { error: string; failure: ModelsReadFailure; raw: string; location: ModelsFileInfo }
|
|
975
|
+
|
|
976
|
+
// ─── Agent Message Types ────────────────────────────────────────────────────
|
|
977
|
+
|
|
978
|
+
export interface AgentTextContent {
|
|
979
|
+
type: 'text'
|
|
980
|
+
text: string
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
export interface AgentThinkingContent {
|
|
984
|
+
type: 'thinking'
|
|
985
|
+
thinking: string
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
export interface AgentToolCallContent {
|
|
989
|
+
type: 'toolCall'
|
|
990
|
+
id: string
|
|
991
|
+
name: string
|
|
992
|
+
arguments: Record<string, unknown>
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
export type AgentContentBlock = AgentTextContent | AgentThinkingContent | AgentToolCallContent
|
|
996
|
+
|
|
997
|
+
export interface AgentUserMessage {
|
|
998
|
+
role: 'user'
|
|
999
|
+
content: string | AgentContentBlock[]
|
|
1000
|
+
timestamp: number
|
|
1001
|
+
attachments?: unknown[]
|
|
1002
|
+
id?: string
|
|
1003
|
+
parentId?: string
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
export interface AgentAssistantMessage {
|
|
1007
|
+
role: 'assistant'
|
|
1008
|
+
content: AgentContentBlock[]
|
|
1009
|
+
api: string
|
|
1010
|
+
provider: string
|
|
1011
|
+
model: string
|
|
1012
|
+
usage: {
|
|
1013
|
+
input: number
|
|
1014
|
+
output: number
|
|
1015
|
+
cacheRead: number
|
|
1016
|
+
cacheWrite: number
|
|
1017
|
+
cost: {
|
|
1018
|
+
input: number
|
|
1019
|
+
output: number
|
|
1020
|
+
cacheRead: number
|
|
1021
|
+
cacheWrite: number
|
|
1022
|
+
total: number
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
stopReason: string
|
|
1026
|
+
timestamp: number
|
|
1027
|
+
id?: string
|
|
1028
|
+
parentId?: string
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
export interface AgentToolResultMessage {
|
|
1032
|
+
role: 'toolResult'
|
|
1033
|
+
toolCallId: string
|
|
1034
|
+
toolName: string
|
|
1035
|
+
content: Array<{ type: string; text?: string }>
|
|
1036
|
+
isError: boolean
|
|
1037
|
+
timestamp: number
|
|
1038
|
+
id?: string
|
|
1039
|
+
parentId?: string
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
export type AgentMessage = AgentUserMessage | AgentAssistantMessage | AgentToolResultMessage
|
|
1043
|
+
|
|
1044
|
+
// ─── Settings Types ─────────────────────────────────────────────────────────
|
|
1045
|
+
|
|
1046
|
+
export type PermissionMode = 'plan-readonly' | 'ask-edits' | 'ask-commands' | 'trusted'
|
|
1047
|
+
|
|
1048
|
+
export type { PermissionRule, PermissionRuleAction, PermissionRulesFile } from '../../resources/permission-rules'
|
|
1049
|
+
|
|
1050
|
+
export type PermissionRulesScope = 'global' | 'workspace'
|
|
1051
|
+
|
|
1052
|
+
export type PermissionRulesGetResult =
|
|
1053
|
+
| { ok: true; rules: PermissionRule[]; exists: boolean }
|
|
1054
|
+
| { ok: false; error: string }
|
|
1055
|
+
|
|
1056
|
+
export type PermissionRulesSetResult = { ok: true } | { ok: false; error: string }
|
|
1057
|
+
|
|
1058
|
+
export type PermissionRulesRemoveResult = { ok: true } | { ok: false; error: string }
|
|
1059
|
+
|
|
1060
|
+
export type PermissionRulesImportResult =
|
|
1061
|
+
| { ok: true; rules: PermissionRule[] }
|
|
1062
|
+
| { ok: false; canceled?: boolean; error?: string }
|
|
1063
|
+
|
|
1064
|
+
export type PermissionRulesExportResult =
|
|
1065
|
+
| { ok: true }
|
|
1066
|
+
| { ok: false; canceled?: boolean; error?: string }
|
|
1067
|
+
|
|
1068
|
+
export interface PermissionRulesWorkspaceStatus {
|
|
1069
|
+
hasWorkspaceRules: boolean
|
|
1070
|
+
workspacePath: string | null
|
|
1071
|
+
acknowledged: boolean
|
|
1072
|
+
// Whether the user has trusted this workspace (so its allow rules apply).
|
|
1073
|
+
trusted: boolean
|
|
1074
|
+
// Whether the workspace rules file actually contains any allow rules — the
|
|
1075
|
+
// only case where trust changes behavior.
|
|
1076
|
+
hasAllowRules: boolean
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
/** A concrete engine. `auto` is a preference, never something that is running. */
|
|
1080
|
+
export type AgentEngineKind = 'pi' | 'omp'
|
|
1081
|
+
|
|
1082
|
+
export type AgentEngine = 'auto' | AgentEngineKind
|
|
1083
|
+
|
|
1084
|
+
export interface AgentInstallation {
|
|
1085
|
+
kind: AgentEngineKind
|
|
1086
|
+
path: string
|
|
1087
|
+
source: string
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
export interface AgentInstallationsResult {
|
|
1091
|
+
installations: AgentInstallation[]
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
/**
|
|
1095
|
+
* How a detection request treats the main process's installation cache. Main
|
|
1096
|
+
* caches results, so a user-initiated Rescan has to ask for a fresh disk walk
|
|
1097
|
+
* or it silently returns the same list it already showed.
|
|
1098
|
+
*/
|
|
1099
|
+
export interface AgentDetectionOptions {
|
|
1100
|
+
force?: boolean
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
export interface AppSettings {
|
|
1104
|
+
piExecutablePath: string
|
|
1105
|
+
/** Explicit engine identity; auto preserves legacy Pi/OMP detection. */
|
|
1106
|
+
piEngine: AgentEngine
|
|
1107
|
+
defaultArgs: string[]
|
|
1108
|
+
theme: string // 'system' or a theme id (built-in or user theme)
|
|
1109
|
+
// Themes 'system' switches between when the OS prefers light or dark. Each
|
|
1110
|
+
// must be a theme of the matching kind; otherwise the built-in default for
|
|
1111
|
+
// that slot is used.
|
|
1112
|
+
systemLightTheme: string
|
|
1113
|
+
systemDarkTheme: string
|
|
1114
|
+
defaultModel: string | null
|
|
1115
|
+
defaultProvider: string | null
|
|
1116
|
+
defaultCwd: string | null
|
|
1117
|
+
// UI font size in px (chat, panels, sidebar). Applied to the document root.
|
|
1118
|
+
fontSize: number
|
|
1119
|
+
// Terminal (xterm) font size in px — independent of the UI font size.
|
|
1120
|
+
terminalFontSize: number
|
|
1121
|
+
// Code editor (CodeMirror) font size in px — independent of the UI font size.
|
|
1122
|
+
codeEditorFontSize: number
|
|
1123
|
+
showThinking: boolean
|
|
1124
|
+
autoScroll: boolean
|
|
1125
|
+
permissionMode: PermissionMode
|
|
1126
|
+
// Workspace paths whose "this workspace has its own permission rules"
|
|
1127
|
+
// notice has been acknowledged. Not exposed in the Settings UI.
|
|
1128
|
+
permissionRulesAckWorkspaces: string[]
|
|
1129
|
+
// Resume the most recent session for the workspace on launch (via Pi's
|
|
1130
|
+
// --continue) instead of starting a fresh session.
|
|
1131
|
+
resumeLastSession: boolean
|
|
1132
|
+
// Project paths whose session group is collapsed in the Sessions panel.
|
|
1133
|
+
// Persisted so the collapsed/expanded layout survives navigation and restarts.
|
|
1134
|
+
collapsedSessionGroups: string[]
|
|
1135
|
+
/** Sidebar width in pixels; clamped by `clampSidebarWidth` on read. */
|
|
1136
|
+
sidebarWidth: number
|
|
1137
|
+
// Show the Home/launcher screen on launch (Pi starts lazily on first action)
|
|
1138
|
+
// instead of booting straight into Chat. When false, boot into Chat (empty
|
|
1139
|
+
// chat is the Codex-style center prompt with project picker).
|
|
1140
|
+
openToHomeOnLaunch: boolean
|
|
1141
|
+
// Launch Sessrúmnir automatically when the user logs in to their computer.
|
|
1142
|
+
// Applied at the OS level: login items on macOS/Windows, a freedesktop
|
|
1143
|
+
// autostart entry on Linux. Only effective in packaged builds.
|
|
1144
|
+
runOnStartup: boolean
|
|
1145
|
+
// Hide the window to the system tray when closed instead of quitting, keeping
|
|
1146
|
+
// the app running in the background. Windows/Linux only; on macOS the window
|
|
1147
|
+
// close already keeps the app alive in the Dock (native equivalent).
|
|
1148
|
+
minimizeToTrayOnClose: boolean
|
|
1149
|
+
// Internal: whether the one-time "still running in the tray" hint has been
|
|
1150
|
+
// shown. Not exposed in the Settings UI.
|
|
1151
|
+
hasSeenTrayHint: boolean
|
|
1152
|
+
// Show OS desktop notifications when a turn finishes, fails, or waits for
|
|
1153
|
+
// approval in a workspace the user is not currently looking at.
|
|
1154
|
+
desktopNotifications: boolean
|
|
1155
|
+
// Interface language: 'system' (follow the OS language list) or a bundled
|
|
1156
|
+
// language code. Unknown values reset to 'system' on load.
|
|
1157
|
+
language: string
|
|
1158
|
+
// Multi-agent council planning configuration.
|
|
1159
|
+
council: CouncilConfig
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
/** What the renderer needs to resolve the `language` setting like main does. */
|
|
1163
|
+
export interface I18nEnvironment {
|
|
1164
|
+
systemLanguages: string[]
|
|
1165
|
+
pseudoLanguageEnabled: boolean
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
// ─── Update Check Types ─────────────────────────────────────────────────────
|
|
1169
|
+
|
|
1170
|
+
/** Result of checking GitHub releases for a newer version. */
|
|
1171
|
+
export interface UpdateCheckResult {
|
|
1172
|
+
updateAvailable: boolean
|
|
1173
|
+
currentVersion: string
|
|
1174
|
+
latestVersion: string
|
|
1175
|
+
// Release page URL to open for downloading; empty when the check failed.
|
|
1176
|
+
url: string
|
|
1177
|
+
// Release name/title, when available.
|
|
1178
|
+
name?: string
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
// ─── Workspace Types ────────────────────────────────────────────────────────
|
|
1182
|
+
|
|
1183
|
+
export type WorkspaceKind = 'folder' | 'worktree'
|
|
1184
|
+
|
|
1185
|
+
/** Options for creating an isolated tab from the active Git workspace. */
|
|
1186
|
+
export interface WorkspaceTabOptions {
|
|
1187
|
+
name?: string
|
|
1188
|
+
sourceWorkspaceId?: string
|
|
1189
|
+
/** Optional Pi session to fork into the new worktree. */
|
|
1190
|
+
forkSessionPath?: string
|
|
1191
|
+
/** Original task text used to reuse the same worktree on a later launch. */
|
|
1192
|
+
taskPrompt?: string
|
|
1193
|
+
/** Skip the default runtime when another action will launch a task there. */
|
|
1194
|
+
startPi?: boolean
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
/** Result of closing a workspace tab. Dirty worktrees are preserved. */
|
|
1198
|
+
export interface WorkspaceRemoveResult {
|
|
1199
|
+
worktreeRemoved?: boolean
|
|
1200
|
+
preservedWorktreePath?: string
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
export interface Workspace {
|
|
1204
|
+
id: string
|
|
1205
|
+
name: string
|
|
1206
|
+
path: string
|
|
1207
|
+
createdAt: number
|
|
1208
|
+
lastActiveAt: number
|
|
1209
|
+
color: string
|
|
1210
|
+
/** Optional for backward compatibility with older workspaces.json files. */
|
|
1211
|
+
kind?: WorkspaceKind
|
|
1212
|
+
/** Main repository root for managed worktrees. */
|
|
1213
|
+
repoRoot?: string
|
|
1214
|
+
/** Branch checked out by a managed worktree. */
|
|
1215
|
+
branch?: string
|
|
1216
|
+
/** Commit used as the worktree base. */
|
|
1217
|
+
baseRef?: string
|
|
1218
|
+
/** The source tab had local changes that were intentionally not copied. */
|
|
1219
|
+
sourceWasDirty?: boolean
|
|
1220
|
+
/** False for an existing user worktree adopted by the app; never delete it on close. */
|
|
1221
|
+
managed?: boolean
|
|
1222
|
+
/** Original task text when the app created or adopted this worktree. */
|
|
1223
|
+
taskPrompt?: string
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
// ─── Notes Types ────────────────────────────────────────────────────────────
|
|
1227
|
+
|
|
1228
|
+
/**
|
|
1229
|
+
* Scope of a note. Either the literal `'global'` (available everywhere) or a
|
|
1230
|
+
* workspace id (only surfaced when that workspace is active). Stored as a
|
|
1231
|
+
* single field so all notes live in one store and the UI merges by scope.
|
|
1232
|
+
*/
|
|
1233
|
+
export type NoteScope = 'global' | string
|
|
1234
|
+
|
|
1235
|
+
/** A reusable prompt or agent command the user has saved. */
|
|
1236
|
+
export interface Note {
|
|
1237
|
+
id: string
|
|
1238
|
+
title: string
|
|
1239
|
+
body: string
|
|
1240
|
+
tags: string[]
|
|
1241
|
+
scope: NoteScope
|
|
1242
|
+
createdAt: number
|
|
1243
|
+
updatedAt: number
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
/** Fields supplied when creating a note. */
|
|
1247
|
+
export interface NoteInput {
|
|
1248
|
+
title: string
|
|
1249
|
+
body: string
|
|
1250
|
+
tags: string[]
|
|
1251
|
+
scope: NoteScope
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
/** Mutable fields when updating a note. */
|
|
1255
|
+
export type NoteUpdate = Partial<NoteInput>
|
|
1256
|
+
|
|
1257
|
+
// ─── Theme Types ────────────────────────────────────────────────────────────
|
|
1258
|
+
|
|
1259
|
+
import type { ThemeFile } from './theme/theme-file'
|
|
1260
|
+
|
|
1261
|
+
/** A user-created theme as stored on disk, keyed by its file-derived id. */
|
|
1262
|
+
export interface UserThemeRecord {
|
|
1263
|
+
id: string
|
|
1264
|
+
file: ThemeFile
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
/** Result of listing user themes; `warnings` reports files that failed validation. */
|
|
1268
|
+
export interface ThemesListResult {
|
|
1269
|
+
themes: UserThemeRecord[]
|
|
1270
|
+
warnings: string[]
|
|
1271
|
+
}
|
|
1272
|
+
|
|
1273
|
+
/**
|
|
1274
|
+
* Result of an operation that produces (or fails to produce) a saved theme:
|
|
1275
|
+
* installing from a URL, or importing from a file. `canceled` distinguishes a
|
|
1276
|
+
* user-initiated dialog cancellation from a genuine error.
|
|
1277
|
+
*/
|
|
1278
|
+
export type ThemeImportResult =
|
|
1279
|
+
| { ok: true; theme: UserThemeRecord }
|
|
1280
|
+
| { ok: false; error: string }
|
|
1281
|
+
| { ok: false; canceled: true }
|
|
1282
|
+
|
|
1283
|
+
export type ThemeExportResult =
|
|
1284
|
+
| { ok: true }
|
|
1285
|
+
| { ok: false; error: string }
|
|
1286
|
+
| { ok: false; canceled: true }
|
|
1287
|
+
|
|
1288
|
+
export interface GalleryTheme {
|
|
1289
|
+
name: string
|
|
1290
|
+
kind: 'dark' | 'light'
|
|
1291
|
+
url: string
|
|
1292
|
+
author?: string
|
|
1293
|
+
description?: string
|
|
1294
|
+
// Full validated theme content embedded in the gallery index, used to
|
|
1295
|
+
// render a live preview card without fetching each theme file. Absent when
|
|
1296
|
+
// the index predates embedding; the card then renders without a preview.
|
|
1297
|
+
theme?: ThemeFile
|
|
1298
|
+
// Optional author-provided screenshot URL (pinned to the gallery repo). The
|
|
1299
|
+
// renderer fetches it lazily via THEMES_GALLERY_IMAGE, which returns a data
|
|
1300
|
+
// URI (the renderer CSP forbids remote images).
|
|
1301
|
+
screenshotUrl?: string
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
export type ThemeGalleryResult =
|
|
1305
|
+
| { ok: true; themes: GalleryTheme[] }
|
|
1306
|
+
| { ok: false; error: string }
|
|
1307
|
+
|
|
1308
|
+
export type ThemeGalleryImageResult =
|
|
1309
|
+
| { ok: true; dataUri: string }
|
|
1310
|
+
| { ok: false; error: string }
|
|
1311
|
+
|
|
1312
|
+
// ─── Package Types ──────────────────────────────────────────────────────────
|
|
1313
|
+
|
|
1314
|
+
export interface InstalledPackage {
|
|
1315
|
+
name: string
|
|
1316
|
+
source: string
|
|
1317
|
+
type: 'extension' | 'skill' | 'prompt' | 'theme' | 'package'
|
|
1318
|
+
version: string | null
|
|
1319
|
+
path: string
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
/** An installed package with a newer registry version; `source` matches its InstalledPackage. */
|
|
1323
|
+
export interface PackageUpdate {
|
|
1324
|
+
source: string
|
|
1325
|
+
installedVersion: string
|
|
1326
|
+
latestVersion: string
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
export interface CatalogPackage {
|
|
1330
|
+
name: string
|
|
1331
|
+
description: string
|
|
1332
|
+
author: string
|
|
1333
|
+
type: string
|
|
1334
|
+
downloads: number
|
|
1335
|
+
downloadsDisplay: string
|
|
1336
|
+
updatedAt: string
|
|
1337
|
+
npmUrl: string | null
|
|
1338
|
+
repoUrl: string | null
|
|
1339
|
+
installCommand: string
|
|
1340
|
+
}
|
|
1341
|
+
|
|
1342
|
+
// ─── Skill Types ────────────────────────────────────────────────────────────
|
|
1343
|
+
|
|
1344
|
+
export interface InstalledSkill {
|
|
1345
|
+
name: string
|
|
1346
|
+
description: string
|
|
1347
|
+
path: string
|
|
1348
|
+
source: 'global' | 'project' | 'package' | 'cli'
|
|
1349
|
+
enabled: boolean
|
|
1350
|
+
}
|
|
1351
|
+
|
|
1352
|
+
/**
|
|
1353
|
+
* Path prefix marking a skill known only from the running engine's command
|
|
1354
|
+
* catalog (plugin/marketplace skills without a SKILL.md file the GUI can
|
|
1355
|
+
* read). The skills panel shows the description instead of file content.
|
|
1356
|
+
*/
|
|
1357
|
+
export const RPC_SKILL_PATH_PREFIX = 'rpc:'
|
|
1358
|
+
|
|
1359
|
+
/** True when the skill has no SKILL.md on disk (catalog-only entry). */
|
|
1360
|
+
export function isRpcSkillPath(path: string): boolean {
|
|
1361
|
+
return path.startsWith(RPC_SKILL_PATH_PREFIX)
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
// ─── App Log Types ──────────────────────────────────────────────────────────
|
|
1365
|
+
|
|
1366
|
+
/**
|
|
1367
|
+
* One entry in the main-process application log. Persisted as JSONL in the GUI
|
|
1368
|
+
* data dir and mirrored in a bounded in-memory ring for the diagnostics view.
|
|
1369
|
+
*/
|
|
1370
|
+
export interface AppLogEntry {
|
|
1371
|
+
/** Epoch ms when the entry was recorded. */
|
|
1372
|
+
ts: number
|
|
1373
|
+
level: 'info' | 'warn' | 'error'
|
|
1374
|
+
/** Short subsystem tag, e.g. 'pi', 'git', 'settings'. */
|
|
1375
|
+
scope: string
|
|
1376
|
+
message: string
|
|
1377
|
+
/** Optional stringified error / extra context. */
|
|
1378
|
+
detail?: string
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
// ─── Diagnostics Types ──────────────────────────────────────────────────────
|
|
1382
|
+
|
|
1383
|
+
export interface DiagnosticsWorkspaceInfo {
|
|
1384
|
+
id: string
|
|
1385
|
+
name: string
|
|
1386
|
+
path: string
|
|
1387
|
+
pathExists: boolean
|
|
1388
|
+
trusted: boolean
|
|
1389
|
+
piStatus: PiProcessStatus
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1392
|
+
/**
|
|
1393
|
+
* How a provider's apiKey field resolves: a literal secret, an environment
|
|
1394
|
+
* variable that is present/absent, a shell command (never evaluated here), or
|
|
1395
|
+
* nothing configured.
|
|
1396
|
+
*/
|
|
1397
|
+
export type ProviderKeyState = 'literal' | 'env-set' | 'env-missing' | 'shell' | 'none'
|
|
1398
|
+
|
|
1399
|
+
export interface DiagnosticsProviderInfo {
|
|
1400
|
+
name: string
|
|
1401
|
+
modelCount: number
|
|
1402
|
+
keyState: ProviderKeyState
|
|
1403
|
+
/** The environment variable name when keyState is env-set / env-missing. */
|
|
1404
|
+
envVar?: string
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
/** Where a resolved Pi path came from, for logging and error messaging. */
|
|
1408
|
+
export type PiResolutionSource =
|
|
1409
|
+
| 'override'
|
|
1410
|
+
| 'npm-prefix'
|
|
1411
|
+
| 'path'
|
|
1412
|
+
| 'version-manager'
|
|
1413
|
+
| 'common-location'
|
|
1414
|
+
| 'omp'
|
|
1415
|
+
| 'fallback'
|
|
1416
|
+
|
|
1417
|
+
/** Everything the Diagnostics view shows, assembled in one main-side pass. */
|
|
1418
|
+
export interface DiagnosticsReport {
|
|
1419
|
+
generatedAt: number
|
|
1420
|
+
app: {
|
|
1421
|
+
version: string
|
|
1422
|
+
electron: string
|
|
1423
|
+
chrome: string
|
|
1424
|
+
node: string
|
|
1425
|
+
platform: string
|
|
1426
|
+
}
|
|
1427
|
+
piBinary: {
|
|
1428
|
+
found: boolean
|
|
1429
|
+
script: string
|
|
1430
|
+
source: PiResolutionSource
|
|
1431
|
+
useNode: boolean
|
|
1432
|
+
nodeBinary: string
|
|
1433
|
+
nodeFound: boolean
|
|
1434
|
+
needsShell: boolean
|
|
1435
|
+
rejectedOverride: string | null
|
|
1436
|
+
failureReason: string | null
|
|
1437
|
+
/** Entries on the merged (login-shell-aware) PATH used to find Pi. */
|
|
1438
|
+
pathEntryCount: number
|
|
1439
|
+
}
|
|
1440
|
+
/** `pi --version` output (first line), or null when it could not run. */
|
|
1441
|
+
piVersion: string | null
|
|
1442
|
+
workspaces: DiagnosticsWorkspaceInfo[]
|
|
1443
|
+
/** Null when models.json is missing or unreadable — see providersError. */
|
|
1444
|
+
providers: DiagnosticsProviderInfo[] | null
|
|
1445
|
+
providersError: string | null
|
|
1446
|
+
permissions: {
|
|
1447
|
+
mode: PermissionMode
|
|
1448
|
+
/** Rule count in the global file; null when the file is invalid. */
|
|
1449
|
+
globalRuleCount: number | null
|
|
1450
|
+
globalRulesError: string | null
|
|
1451
|
+
workspace: PermissionRulesWorkspaceStatus
|
|
1452
|
+
}
|
|
1453
|
+
storage: {
|
|
1454
|
+
guiDataDir: string
|
|
1455
|
+
settingsPath: string
|
|
1456
|
+
sessionsRoot: string
|
|
1457
|
+
sessionsRootExists: boolean
|
|
1458
|
+
}
|
|
1459
|
+
recentErrors: AppLogEntry[]
|
|
1460
|
+
}
|
|
1461
|
+
|
|
1462
|
+
// ─── File Types ────────────────────────────────────────────────────────────
|
|
1463
|
+
|
|
1464
|
+
export interface FileTreeNode {
|
|
1465
|
+
name: string
|
|
1466
|
+
path: string
|
|
1467
|
+
relativePath: string
|
|
1468
|
+
type: 'file' | 'directory'
|
|
1469
|
+
children?: FileTreeNode[]
|
|
1470
|
+
gitStatus?: GitFileStatus
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1473
|
+
export interface GitFileStatus {
|
|
1474
|
+
index: string
|
|
1475
|
+
worktree: string
|
|
1476
|
+
isStaged: boolean
|
|
1477
|
+
}
|
|
1478
|
+
|
|
1479
|
+
export interface FileSearchResult {
|
|
1480
|
+
path: string
|
|
1481
|
+
relativePath: string
|
|
1482
|
+
name: string
|
|
1483
|
+
matchType: 'filename' | 'content'
|
|
1484
|
+
line?: number
|
|
1485
|
+
snippet?: string
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
/**
|
|
1489
|
+
* Emitted (main → renderer, debounced) when files change on disk in the
|
|
1490
|
+
* active workspace. The renderer should refresh the file tree and git status
|
|
1491
|
+
* wholesale; `changeType`/`relativePath` describe the most recent change in
|
|
1492
|
+
* the debounce window and are informational, not an exhaustive change list.
|
|
1493
|
+
*/
|
|
1494
|
+
export interface FileChangeEvent {
|
|
1495
|
+
changeType: 'add' | 'change' | 'unlink' | 'addDir' | 'unlinkDir'
|
|
1496
|
+
relativePath: string
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
export interface DiffHunk {
|
|
1500
|
+
oldStart: number
|
|
1501
|
+
oldLines: number
|
|
1502
|
+
newStart: number
|
|
1503
|
+
newLines: number
|
|
1504
|
+
content: string
|
|
1505
|
+
changes: DiffChange[]
|
|
1506
|
+
}
|
|
1507
|
+
|
|
1508
|
+
export interface DiffChange {
|
|
1509
|
+
type: 'add' | 'remove' | 'normal'
|
|
1510
|
+
content: string
|
|
1511
|
+
oldLine?: number
|
|
1512
|
+
newLine?: number
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1515
|
+
export interface DiffFile {
|
|
1516
|
+
oldPath: string
|
|
1517
|
+
newPath: string
|
|
1518
|
+
hunks: DiffHunk[]
|
|
1519
|
+
isBinary: boolean
|
|
1520
|
+
isNew: boolean
|
|
1521
|
+
isDeleted: boolean
|
|
1522
|
+
}
|
|
1523
|
+
|
|
1524
|
+
// ─── Timeline Event Types ───────────────────────────────────────────────────
|
|
1525
|
+
|
|
1526
|
+
export type TimelineEventKind = 'agent-run'
|
|
1527
|
+
|
|
1528
|
+
export interface TimelineEvent {
|
|
1529
|
+
id: string
|
|
1530
|
+
type: 'user_message' | 'assistant_message' | 'tool_start' | 'tool_end' | 'thinking' | 'compaction' | 'retry' | 'queue' | 'system' | 'error'
|
|
1531
|
+
/** Stable identity for events that logic pairs up; `title` is display text. */
|
|
1532
|
+
kind?: TimelineEventKind
|
|
1533
|
+
timestamp: number
|
|
1534
|
+
duration?: number
|
|
1535
|
+
title: string
|
|
1536
|
+
detail?: string
|
|
1537
|
+
status?: 'running' | 'success' | 'error' | 'cancelled'
|
|
1538
|
+
metadata?: Record<string, unknown>
|
|
1539
|
+
}
|