@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,420 @@
|
|
|
1
|
+
# Smíðja Enhancement Plan
|
|
2
|
+
|
|
3
|
+
**Date**: September 2026
|
|
4
|
+
**Scope**: Visualizer (frontend) + Smíðja Backend (Python)
|
|
5
|
+
**Purpose**: Comprehensive roadmap for extending the smithy observability and execution capabilities
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Executive Summary
|
|
10
|
+
|
|
11
|
+
The Smíðja is a **Smíðja** — deterministic Python scripts own sequencing/retries/acceptance; coding agents (Pi/opencode) work inside bounded phases; typed JSON envelopes carry context; everything streams into SQLite for the polled visualizer.
|
|
12
|
+
|
|
13
|
+
This plan identifies high-value enhancements across both surfaces, organized by impact and implementation complexity.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Current Architecture Snapshot
|
|
18
|
+
|
|
19
|
+
### Visualizer (`apps/visualizer/`)
|
|
20
|
+
| Layer | Technology | Key Files |
|
|
21
|
+
|-------|------------|-----------|
|
|
22
|
+
| UI Framework | Vue 3 + TypeScript + Vite | `src/App.vue`, `src/components/*.vue` |
|
|
23
|
+
| State | Pinia-style composables | `src/lib/chat-store.ts`, `src/lib/api.ts` |
|
|
24
|
+
| Server | Bun HTTP + SQLite (readonly) | `server/index.ts`, `server/db.ts` |
|
|
25
|
+
| Real-time | 500ms polling + cursor pagination | `SessionTrace.vue` tick loop |
|
|
26
|
+
| Themes | CSS custom properties | `neutral` (default) + `classic` (deep-space) |
|
|
27
|
+
| Desktop | Electron (preload + main) | `desktop/main.js`, `desktop/preload.js` |
|
|
28
|
+
| Memory | Kaia engram bridge (Python) | `/api/memory/*` proxy to `:4602` |
|
|
29
|
+
|
|
30
|
+
**Current Views**: Sessions → Session Trace (lanes + waterfall) → Phase Detail + Envelopes + Gates + Thinking + Tool calls; Memory; Decisions (self-improving surface); Stats (tokens/cost/cache/savings); Orchestrator Chat (Kaia + session launch); Settings
|
|
31
|
+
|
|
32
|
+
### Smíðja Backend (`templates/smidja/`)
|
|
33
|
+
| Layer | Technology | Key Files |
|
|
34
|
+
|-------|------------|-----------|
|
|
35
|
+
| Orchestration | Python 3.11+ (uv scripts) | `smidja_*.py` |
|
|
36
|
+
| Data Contracts | Pydantic v2 | `smidja_modules/data_types.py` |
|
|
37
|
+
| Agent Runtime | `agent_pi.py` (Pi), `agent_opencode.py` (opencode) | |
|
|
38
|
+
| Tracing | SQLite WAL + JSONL events | `smidja_modules/tracer.py` |
|
|
39
|
+
| Quality Gates | Deterministic subprocess runs | `smidja_modules/quality.py` |
|
|
40
|
+
| Permissions | Path-based write enforcement | `smidja_modules/permissions.py` |
|
|
41
|
+
| Context Handoff | File-based `context_handoff/` dir | `smidja_modules/agents.py` |
|
|
42
|
+
| Sub-agents | Task-tool lane materialization (G2) | `smidja_modules/agents.py` |
|
|
43
|
+
|
|
44
|
+
**Current Smithies**: `smidja_scout`, `smidja_simple_sdlc`, `smidja_plan_build`, `smidja_build_test`, `smidja_plan_build_test`, `smidja_plan_build_test_quality`, `smidja_build_review`, `smidja_document`, `smidja_orchestrate`, `smidja_recon_iv`, `smidja_prompt`, `smidja_quality`
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Enhancement Categories
|
|
49
|
+
|
|
50
|
+
### A. Visualizer — Observability & UX
|
|
51
|
+
|
|
52
|
+
#### A.1 Live Collaboration & Multi-User
|
|
53
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
54
|
+
|----|-------------|-------------|--------|----------|
|
|
55
|
+
| A.1.1 | **Presence indicators** | Show other engineers viewing the same session (WebSocket presence) | Medium | High |
|
|
56
|
+
| A.1.2 | **Shared steer annotations** | Steer messages attributed to author, visible to all viewers | Medium | High |
|
|
57
|
+
| A.1.3 | **Session handoff** | "Take over" a paused run from another engineer's steer context | Medium | Medium |
|
|
58
|
+
| A.1.4 | **Comment threads on phases** | Pin discussion to specific phase blocks (like GitHub PR comments) | Medium | Medium |
|
|
59
|
+
|
|
60
|
+
#### A.2 Advanced Trace Analysis
|
|
61
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
62
|
+
|----|-------------|-------------|--------|----------|
|
|
63
|
+
| A.2.1 | **Comparative trace diff** | Side-by-side waterfall of two runs (baseline vs current) | Large | High |
|
|
64
|
+
| A.2.2 | **Token flow Sankey** | Visualize input→cache→output→reasoning token flow per agent/phase | Medium | High |
|
|
65
|
+
| A.2.3 | **Failure pattern miner** | Auto-cluster similar failures across runs with suggested fixes | Medium | High |
|
|
66
|
+
| A.2.4 | **Critical path highlighter** | Auto-detect and highlight the longest dependency chain in waterfall | Small | Medium |
|
|
67
|
+
| A.2.5 | **Phase duration heatmap** | Calendar view of phase durations across runs (CI-style) | Small | Medium |
|
|
68
|
+
|
|
69
|
+
#### A.3 Kaia Memory & Knowledge
|
|
70
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
71
|
+
|----|-------------|-------------|--------|----------|
|
|
72
|
+
| A.3.1 | **Memory graph explorer** | Interactive entity-relationship graph from engram facts/episodes | Large | Medium |
|
|
73
|
+
| A.3.2 | **Cross-project memory search** | Query Kaia memory across all smidja repos from one UI | Medium | Medium |
|
|
74
|
+
| A.3.3 | **Memory decay visualization** | Show salience/confidence decay over time per fact/episode | Small | Low |
|
|
75
|
+
| A.3.4 | **Admission timeline** | Visualize Kaia's admission pipeline: prompt → recall → admit → dispatch | Small | Medium |
|
|
76
|
+
|
|
77
|
+
#### A.4 Orchestrator Chat Enhancements
|
|
78
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
79
|
+
|----|-------------|-------------|--------|----------|
|
|
80
|
+
| A.4.1 | **Inline tool result preview** | Expand tool calls in chat to show args/result without leaving thread | Small | High |
|
|
81
|
+
| A.4.2 | **Chat-to-smidja trace linking** | Click a launched session in chat → jump to its trace (exists) + back-link | Small | High |
|
|
82
|
+
| A.4.3 | **Structured task templates** | Quick-insert templates for common tasks (bug fix, feature, refactor) | Small | Medium |
|
|
83
|
+
| A.4.4 | **Multi-model chat** | Switch Kaia's model mid-conversation; show model badge per message | Small | Medium |
|
|
84
|
+
| A.4.5 | **Chat export / session resume** | Export chat + launched sessions as portable bundle; resume later | Medium | Low |
|
|
85
|
+
|
|
86
|
+
#### A.5 Settings & Configuration UI
|
|
87
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
88
|
+
|----|-------------|-------------|--------|----------|
|
|
89
|
+
| A.5.1 | **Visual roster editor** | Drag-and-drop agent roster builder (replaces YAML editing) | Large | High |
|
|
90
|
+
| A.5.2 | **Model tier picker** | Visual model catalog with tier badges, pricing, local/online toggle | Medium | High |
|
|
91
|
+
| A.5.3 | **Smíðja chain builder** | Visual pipeline editor for creating custom smidja scripts | Large | Medium |
|
|
92
|
+
| A.5.4 | **Theme builder** | Custom CSS variable editor with live preview + export/import | Medium | Low |
|
|
93
|
+
|
|
94
|
+
#### A.6 Mobile & Accessibility
|
|
95
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
96
|
+
|----|-------------|-------------|--------|----------|
|
|
97
|
+
| A.6.1 | **Responsive waterfall** | Horizontal scroll + collapsed lanes for mobile viewport | Medium | Medium |
|
|
98
|
+
| A.6.2 | **Screen reader support** | ARIA labels, live regions for polling updates, keyboard nav | Medium | High |
|
|
99
|
+
| A.6.3 | **High contrast theme** | WCAG AAA compliant theme variant | Small | Medium |
|
|
100
|
+
| A.6.4 | **PWA installability** | Service worker + manifest for offline session browsing | Medium | Low |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### B. Visualizer — Data & API
|
|
105
|
+
|
|
106
|
+
#### B.1 API Extensions
|
|
107
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
108
|
+
|----|-------------|-------------|--------|----------|
|
|
109
|
+
| B.1.1 | **WebSocket event stream** | Replace polling with server-sent events for live updates | Medium | High |
|
|
110
|
+
| B.1.2 | **GraphQL endpoint** | Flexible queries for custom dashboards / external tools | Large | Medium |
|
|
111
|
+
| B.1.3 | **Batch session export** | `/api/sessions/export?ids=...` → NDJSON/CSV/Parquet | Small | Medium |
|
|
112
|
+
| B.1.4 | **Run comparison API** | `/api/compare?a=<id>&b=<id>` → structured diff | Medium | High |
|
|
113
|
+
|
|
114
|
+
#### B.2 Data Enrichment
|
|
115
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
116
|
+
|----|-------------|-------------|--------|----------|
|
|
117
|
+
| B.2.1 | **GitHub PR linking** | Auto-link sessions to PRs via commit messages / branch names | Medium | High |
|
|
118
|
+
| B.2.2 | **Jira/Linear ticket sync** | Bidirectional sync: session ↔ ticket (status, comments, links) | Large | Medium |
|
|
119
|
+
| B.2.3 | **Cost allocation tags** | Tag runs by project/team/feature for cost center reporting | Small | Medium |
|
|
120
|
+
| B.2.4 | **Custom metric ingestion** | POST `/api/metrics` for arbitrary KPI tracking (deployment freq, etc.) | Small | Low |
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### C. Smíðja Backend — Execution & Orchestration
|
|
125
|
+
|
|
126
|
+
#### C.1 New Smíðja Chains (Templates)
|
|
127
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
128
|
+
|----|-------------|-------------|--------|----------|
|
|
129
|
+
| C.1.1 | **`smidja_security_audit`** | Scout → threat model → code review → fix → retest → document | Medium | High |
|
|
130
|
+
| C.1.2 | **`smidja_perf_optimize`** | Benchmark → profile → optimize → benchmark → regression test | Medium | High |
|
|
131
|
+
| C.1.3 | **`smidja_migration`** | Analyze → plan migration → execute → verify → rollback plan | Medium | Medium |
|
|
132
|
+
| C.1.3 | **`smidja_dependency_update`** | Scan → plan updates → test → staged rollout → verify | Small | Medium |
|
|
133
|
+
| C.1.4 | **`smidja_incident_response`** | Triage → diagnose → fix → verify → postmortem → Kaia memory | Medium | High |
|
|
134
|
+
| C.1.5 | **`smidja_feature_flag_rollout`** | Gradual rollout with metric gates + automatic rollback | Medium | Medium |
|
|
135
|
+
|
|
136
|
+
#### C.2 Agent Capability Extensions
|
|
137
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
138
|
+
|----|-------------|-------------|--------|----------|
|
|
139
|
+
| C.2.1 | **Multi-modal agents** | Vision input (screenshots, diagrams) for UI builder / documenter | Large | High |
|
|
140
|
+
| C.2.2 | **Agent skill marketplace** | Pluggable agent capabilities (npm-style packages with prompts + tools) | Large | Medium |
|
|
141
|
+
| C.2.3 | **Agent sandbox profiles** | Per-agent filesystem/network caps (beyond `writes:`) via WASM/deno | Large | Medium |
|
|
142
|
+
| C.2.4 | **Reasoning budget control** | Per-phase token/$$ ceiling; auto-escalate to stronger model if needed | Medium | High |
|
|
143
|
+
| C.2.5 | **Agent spec compliance** | Validate agent output against OpenAPI/AsyncAPI/GraphQL schemas | Medium | Medium |
|
|
144
|
+
|
|
145
|
+
#### C.3 Quality & Gates
|
|
146
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
147
|
+
|----|-------------|-------------|--------|----------|
|
|
148
|
+
| C.3.1 | **Property-based test gate** | Generate + run quickcheck-style tests from type signatures | Medium | High |
|
|
149
|
+
| C.3.2 | **Contract test gate** | Consumer-driven contracts (Pact) for API changes | Medium | Medium |
|
|
150
|
+
| C.3.3 | **Security gate (SAST/DAST)** | Integrate Semgrep/CodeQL/Trivy as deterministic quality blocks | Small | High |
|
|
151
|
+
| C.3.4 | **Performance regression gate** | Compare benchmarks against baseline; fail on >5% regression | Medium | High |
|
|
152
|
+
| C.3.5 | **Accessibility gate** | axe-core / lighthouse CI as quality block | Small | Medium |
|
|
153
|
+
| C.3.6 | **License/compliance gate** | FOSSA / SPDX license check on dependency changes | Small | Low |
|
|
154
|
+
|
|
155
|
+
#### C.4 Context & Handoff
|
|
156
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
157
|
+
|----|-------------|-------------|--------|----------|
|
|
158
|
+
| C.4.1 | **Semantic context compression** | LLM-based summarization of handoff files (not truncation) | Medium | High |
|
|
159
|
+
| C.4.2 | **Cross-repo context sharing** | Shared `context_handoff/` across monorepo smithies | Medium | Medium |
|
|
160
|
+
| C.4.3 | **Context versioning** | Git-like history for handoff files with diff/blame | Small | Medium |
|
|
161
|
+
| C.4.4 | **Structured checkpoint format** | Replace markdown checkpoints with typed `Checkpoint` envelopes | Medium | Medium |
|
|
162
|
+
|
|
163
|
+
#### C.5 Orchestration & Scheduling
|
|
164
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
165
|
+
|----|-------------|-------------|--------|----------|
|
|
166
|
+
| C.5.1 | **Parallel phase execution** | DAG-based phase scheduler (independent phases run concurrently) | Large | High |
|
|
167
|
+
| C.5.2 | **Cron / scheduled smithies** | `smidja schedule "0 2 * * *" smidja_simple_sdlc "nightly refactor"` | Medium | Medium |
|
|
168
|
+
| C.5.3 | **Event-driven smithies** | `process-event-sources` → smidja trigger (GitHub webhook, cron, etc.) | Medium | High |
|
|
169
|
+
| C.5.4 | **Smíðja composition** | `smidja_chain: [smidja_plan, smidja_build_test, smidja_document]` | Medium | Medium |
|
|
170
|
+
| C.5.5 | **Distributed execution** | Offload agent phases to remote workers (Kubernetes, modal, fly.io) | Large | Low |
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### D. Smíðja Backend — Developer Experience
|
|
175
|
+
|
|
176
|
+
#### D.1 Configuration & Onboarding
|
|
177
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
178
|
+
|----|-------------|-------------|--------|----------|
|
|
179
|
+
| D.1.1 | **`smidja init --interactive`** | Guided setup: language, test runner, agents, models, quality blocks | Small | High |
|
|
180
|
+
| D.1.2 | **Config validation CLI** | `smidja doctor` — full preflight (models, tools, prompts, perms) | Small | High |
|
|
181
|
+
| D.1.3 | **Config schema docs generator** | Auto-generate markdown from `smidjaConfig` Pydantic model | Small | Medium |
|
|
182
|
+
| D.1.4 | **Roster inheritance** | `extends: base-roster` in YAML for shared agent definitions | Small | Medium |
|
|
183
|
+
|
|
184
|
+
#### D.2 Debugging & Diagnostics
|
|
185
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
186
|
+
|----|-------------|-------------|--------|----------|
|
|
187
|
+
| D.2.1 | **`smidja replay <session>`** | Re-run a session from any phase with same context (deterministic replay) | Medium | High |
|
|
188
|
+
| D.2.2 | **`smidja diagnose <session>`** | Auto-analyze failure: root cause, suggested fix, similar past failures | Medium | High |
|
|
189
|
+
| D.2.3 | **Live agent REPL** | `smidja shell <session> <agent>` — interactive prompt in agent's context | Large | Medium |
|
|
190
|
+
| D.2.4 | **Phase time-travel** | `smidja phase <session> <phase> --at <timestamp>` — inspect state at point | Medium | Low |
|
|
191
|
+
|
|
192
|
+
#### D.3 Testing & Validation
|
|
193
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
194
|
+
|----|-------------|-------------|--------|----------|
|
|
195
|
+
| D.3.1 | **Smíðja contract tests** | Test smidja scripts against known-good fixtures (golden runs) | Medium | High |
|
|
196
|
+
| D.3.2 | **Agent prompt regression suite** | Test agent prompts against model versions for drift detection | Medium | Medium |
|
|
197
|
+
| D.3.3 | **Chaos testing harness** | Inject faults (network, model errors, OOM) into smidja runs | Large | Low |
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
### E. Infrastructure & Platform
|
|
202
|
+
|
|
203
|
+
#### E.1 Deployment & Operations
|
|
204
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
205
|
+
|----|-------------|-------------|--------|----------|
|
|
206
|
+
| E.1.1 | **Docker/OCI images** | Pre-built images for smidja runner + visualizer + Kaia bridge | Medium | High |
|
|
207
|
+
| E.1.2 | **Kubernetes operator** | `SmidjaRun` CRD for cluster-native execution + visualizer ingress | Large | Medium |
|
|
208
|
+
| E.1.3 | **GitHub App integration** | Installable app: PR checks, status checks, auto-smidja on labels | Large | High |
|
|
209
|
+
| E.1.4 | **Self-hosted telemetry** | OpenTelemetry export (traces/metrics/logs) to Tempo/Prometheus/Loki | Medium | Medium |
|
|
210
|
+
|
|
211
|
+
#### E.2 Multi-Tenancy & Teams
|
|
212
|
+
| ID | Enhancement | Description | Effort | Priority |
|
|
213
|
+
|----|-------------|-------------|--------|----------|
|
|
214
|
+
| E.2.1 | **Team workspaces** | Isolated smidja configs, visualizer instances, Kaia memory per team | Large | Medium |
|
|
215
|
+
| E.2.2 | **RBAC for visualizer** | Viewer/Operator/Admin roles per workspace | Medium | Medium |
|
|
216
|
+
| E.2.3 | **Audit log** | Immutable log of all smidja runs, steers, stops, config changes | Medium | High |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Implementation Roadmap
|
|
221
|
+
|
|
222
|
+
### Phase 1: Quick Wins (Weeks 1-2)
|
|
223
|
+
**Goal**: High-impact, low-effort improvements to daily workflow
|
|
224
|
+
|
|
225
|
+
| Task | Owner | Deliverable |
|
|
226
|
+
|------|-------|-------------|
|
|
227
|
+
| A.2.4 Critical path highlighter | Visualizer | Waterfall shows longest dependency chain |
|
|
228
|
+
| A.4.1 Inline tool result preview | Visualizer | Expandable tool cards in chat |
|
|
229
|
+
| A.4.2 Chat↔trace back-links | Visualizer | Bidirectional navigation |
|
|
230
|
+
| B.1.3 Batch session export | API | `/api/sessions/export` endpoint |
|
|
231
|
+
| B.2.1 GitHub PR linking | Backend | Auto-link via commit message parsing |
|
|
232
|
+
| C.3.3 Security gate (SAST) | Backend | Semgrep integration in `quality.py` |
|
|
233
|
+
| C.3.5 Accessibility gate | Backend | axe-core in `quality.py` |
|
|
234
|
+
| D.1.1 `smidja init --interactive` | Backend | Guided setup wizard |
|
|
235
|
+
| D.1.2 `smidja doctor` | Backend | Full preflight validation |
|
|
236
|
+
|
|
237
|
+
### Phase 2: Core Enhancements (Weeks 3-6)
|
|
238
|
+
**Goal**: Substantial new capabilities for power users
|
|
239
|
+
|
|
240
|
+
| Task | Owner | Deliverable |
|
|
241
|
+
|------|-------|-------------|
|
|
242
|
+
| A.1.1 Presence indicators | Visualizer | WebSocket presence in SessionTrace |
|
|
243
|
+
| A.1.2 Shared steer annotations | Visualizer | Attributed steer messages |
|
|
244
|
+
| A.2.1 Comparative trace diff | Visualizer | Side-by-side waterfall view |
|
|
245
|
+
| A.2.2 Token flow Sankey | Visualizer | Interactive token flow diagram |
|
|
246
|
+
| A.2.3 Failure pattern miner | Visualizer + Backend | Clustered failures with fix suggestions |
|
|
247
|
+
| A.3.1 Memory graph explorer | Visualizer | Kaia engram entity graph |
|
|
248
|
+
| A.5.1 Visual roster editor | Visualizer | Drag-drop agent config UI |
|
|
249
|
+
| A.5.2 Model tier picker | Visualizer | Visual model catalog |
|
|
250
|
+
| B.1.1 WebSocket event stream | Visualizer + API | Replace 500ms polling |
|
|
251
|
+
| B.1.4 Run comparison API | API | Structured diff endpoint |
|
|
252
|
+
| C.1.1 Security audit smidja | Backend | New `smidja_security_audit.py` |
|
|
253
|
+
| C.1.2 Perf optimize smidja | Backend | New `smidja_perf_optimize.py` |
|
|
254
|
+
| C.1.5 Incident response smidja | Backend | New `smidja_incident_response.py` |
|
|
255
|
+
| C.2.4 Reasoning budget control | Backend | Per-phase token/$$ ceilings |
|
|
256
|
+
| C.3.1 Property-based test gate | Backend | Hypothesis/quickcheck integration |
|
|
257
|
+
| C.3.4 Perf regression gate | Backend | Benchmark comparison gate |
|
|
258
|
+
| C.4.1 Semantic context compression | Backend | LLM summarization of handoffs |
|
|
259
|
+
| C.5.3 Event-driven smithies | Backend | `process-event-sources` integration |
|
|
260
|
+
| D.2.1 `smidja replay` | Backend | Deterministic session replay |
|
|
261
|
+
| D.2.2 `smidja diagnose` | Backend | Auto failure analysis |
|
|
262
|
+
| E.1.1 Docker images | Infra | Published OCI images |
|
|
263
|
+
| E.1.3 GitHub App | Infra | Installable PR integration |
|
|
264
|
+
|
|
265
|
+
### Phase 3: Platform Maturity (Weeks 7-12)
|
|
266
|
+
**Goal**: Enterprise readiness, extensibility, scale
|
|
267
|
+
|
|
268
|
+
| Task | Owner | Deliverable |
|
|
269
|
+
|------|-------|-------------|
|
|
270
|
+
| A.1.3 Session handoff | Visualizer | Take over paused runs |
|
|
271
|
+
| A.1.4 Comment threads | Visualizer | Phase-pinned discussions |
|
|
272
|
+
| A.2.5 Phase duration heatmap | Visualizer | Calendar view |
|
|
273
|
+
| A.3.2 Cross-project memory | Visualizer | Multi-repo Kaia query |
|
|
274
|
+
| A.5.3 Smíðja chain builder | Visualizer | Visual pipeline editor |
|
|
275
|
+
| A.6.1-6.3 Mobile + a11y | Visualizer | Responsive, WCAG AAA, PWA |
|
|
276
|
+
| B.1.2 GraphQL endpoint | API | Flexible query layer |
|
|
277
|
+
| B.2.2 Jira/Linear sync | Backend | Bidirectional ticket sync |
|
|
278
|
+
| C.1.3 Migration smidja | Backend | `smidja_migration.py` |
|
|
279
|
+
| C.1.4 Dependency update smidja | Backend | `smidja_dependency_update.py` |
|
|
280
|
+
| C.1.5 Feature flag rollout | Backend | `smidja_feature_flag_rollout.py` |
|
|
281
|
+
| C.2.1 Multi-modal agents | Backend | Vision input support |
|
|
282
|
+
| C.2.2 Agent skill marketplace | Backend | Pluggable capability packages |
|
|
283
|
+
| C.4.2 Cross-repo context | Backend | Shared handoff in monorepo |
|
|
284
|
+
| C.4.3 Context versioning | Backend | Git-like handoff history |
|
|
285
|
+
| C.4.4 Typed checkpoints | Backend | `Checkpoint` envelope type |
|
|
286
|
+
| C.5.1 Parallel phase execution | Backend | DAG scheduler |
|
|
287
|
+
| C.5.2 Cron scheduled smithies | Backend | `smidja schedule` command |
|
|
288
|
+
| C.5.4 Smíðja composition | Backend | Chain smidja scripts |
|
|
289
|
+
| D.1.3 Config docs generator | Backend | Auto-generated schema docs |
|
|
290
|
+
| D.1.4 Roster inheritance | Backend | YAML `extends:` support |
|
|
291
|
+
| D.2.3 Live agent REPL | Backend | Interactive agent shell |
|
|
292
|
+
| D.3.1 Smíðja contract tests | Backend | Golden run test suite |
|
|
293
|
+
| D.3.2 Agent prompt regression | Backend | Model drift detection |
|
|
294
|
+
| E.1.2 K8s operator | Infra | `SmidjaRun` CRD |
|
|
295
|
+
| E.1.4 OTel export | Infra | Tempo/Prometheus/Loki |
|
|
296
|
+
| E.2.1 Team workspaces | Infra | Multi-tenant isolation |
|
|
297
|
+
| E.2.2 RBAC | Infra | Role-based access |
|
|
298
|
+
| E.2.3 Audit log | Infra | Immutable operation log |
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Technical Considerations
|
|
303
|
+
|
|
304
|
+
### Visualizer Tech Debt to Address
|
|
305
|
+
1. **Polling → WebSocket**: Current 500ms polling is simple but scales poorly; SSE/WebSocket for live updates
|
|
306
|
+
2. **State management**: Migrate from composables to Pinia for devtools + persistence
|
|
307
|
+
3. **Bundle size**: Code-split views (Memory, Decisions, Stats, Chat) — lazy load
|
|
308
|
+
4. **Type safety**: Strict TypeScript + `vue-tsc --noEmit` in CI (already configured)
|
|
309
|
+
5. **Test coverage**: Add Vitest unit tests for components + Playwright e2e for critical flows
|
|
310
|
+
|
|
311
|
+
### Backend Tech Debt to Address
|
|
312
|
+
1. **Plugin architecture**: Smíðja modules should be discoverable plugins, not hardcoded imports
|
|
313
|
+
2. **Async execution**: `agent_pi.run` is synchronous; move to `asyncio` for parallel phases
|
|
314
|
+
3. **Config hot-reload**: Watch `smidja.config.yaml` for changes without restart
|
|
315
|
+
4. **Structured logging**: Replace `console.py` Rich output with structured JSON logs + OTel
|
|
316
|
+
5. **Migration system**: Versioned DB migrations for `smidja.db` schema changes
|
|
317
|
+
|
|
318
|
+
### Data Model Extensions Needed
|
|
319
|
+
```python
|
|
320
|
+
# New types for enhancement support
|
|
321
|
+
class Checkpoint(EnvelopeBase): # C.4.4
|
|
322
|
+
phase: str
|
|
323
|
+
summary: str
|
|
324
|
+
artifacts: list[str]
|
|
325
|
+
context_summary: str
|
|
326
|
+
|
|
327
|
+
class MetricPoint(BaseModel): # B.2.4
|
|
328
|
+
name: str
|
|
329
|
+
value: float
|
|
330
|
+
timestamp: str
|
|
331
|
+
tags: dict[str, str]
|
|
332
|
+
|
|
333
|
+
class TeamWorkspace(BaseModel): # E.2.1
|
|
334
|
+
id: str
|
|
335
|
+
name: str
|
|
336
|
+
smidja_config: str
|
|
337
|
+
visualizer_url: str
|
|
338
|
+
kaia_bridge_url: str
|
|
339
|
+
members: list[str]
|
|
340
|
+
rbac: dict[str, list[str]] # role → permissions
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## Risk Assessment
|
|
346
|
+
|
|
347
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
348
|
+
|------|------------|--------|------------|
|
|
349
|
+
| WebSocket complexity breaks polling fallback | Medium | High | Keep polling as fallback; feature flag WebSocket |
|
|
350
|
+
| Multi-modal agents need new harness support | High | Medium | Start with Pi vision extensions; opencode later |
|
|
351
|
+
| Parallel phases break context handoff assumptions | Medium | High | Design DAG with explicit data dependencies |
|
|
352
|
+
| Kaia memory bridge becomes bottleneck | Medium | Medium | Add caching layer; async proxy |
|
|
353
|
+
| Docker images bloat with all model deps | Low | Medium | Multi-stage builds; optional model layers |
|
|
354
|
+
| GitHub App permissions scope creep | Medium | High | Minimal permissions; user-granted per repo |
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## Success Metrics
|
|
359
|
+
|
|
360
|
+
| Metric | Baseline | Target (6mo) | Target (12mo) |
|
|
361
|
+
|--------|----------|--------------|---------------|
|
|
362
|
+
| Mean time to detect failure | ~5 min (polling) | <30 sec (WebSocket) | <10 sec |
|
|
363
|
+
| Smíðja script authoring time | ~2 hours | <30 min (visual builder) | <15 min |
|
|
364
|
+
| Cross-run failure correlation | Manual | Auto-clustered | Auto-fix suggested |
|
|
365
|
+
| Agent context window utilization | Unknown | Tracked + visualized | Optimized via compression |
|
|
366
|
+
| Smíðja adoption (repos stamped) | ~5 | 25 | 100+ |
|
|
367
|
+
| Visualizer daily active users | ~3 | 15 | 50+ |
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## Appendix: Quick Reference — Current Commands
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
# Visualizer
|
|
375
|
+
just ui # Start visualizer (API :4600, UI :4601)
|
|
376
|
+
bun run server/index.ts # API only
|
|
377
|
+
bun run dev # Vite dev server (proxies /api)
|
|
378
|
+
|
|
379
|
+
# Smíðja
|
|
380
|
+
uv run smidja/smidja_simple_sdlc.py "add health endpoint"
|
|
381
|
+
uv run smidja/smidja_orchestrate.py "refactor auth" --smidja-id a1b2c3d4
|
|
382
|
+
smidja doctor # Preflight check
|
|
383
|
+
smidja team list # Show rosters
|
|
384
|
+
smidja mission T1 # Bench missions
|
|
385
|
+
|
|
386
|
+
# Kaia Memory
|
|
387
|
+
just kaia # CLI memory interface
|
|
388
|
+
# UI: http://localhost:4601/#/memory
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
## Appendix: Key Files to Modify per Enhancement
|
|
394
|
+
|
|
395
|
+
| Enhancement Area | Primary Files |
|
|
396
|
+
|------------------|---------------|
|
|
397
|
+
| Visualizer views | `apps/visualizer/src/components/*.vue` |
|
|
398
|
+
| Visualizer API | `apps/visualizer/server/index.ts`, `server/db.ts` |
|
|
399
|
+
| Visualizer types | `apps/visualizer/shared/types.ts`, `src/lib/types.ts` |
|
|
400
|
+
| Smíðja chains | `templates/smidja/smidja_*.py` |
|
|
401
|
+
| Smíðja modules | `templates/smidja/smidja_modules/*.py` |
|
|
402
|
+
| Data contracts | `templates/smidja/smidja_modules/data_types.py` |
|
|
403
|
+
| Agent prompts | `templates/prompt_engineering/<agent>/system.md`, `user.md` |
|
|
404
|
+
| Config schema | `templates/smidja.config.yaml`, `references/config.md` |
|
|
405
|
+
| Observability spec | `references/observability.md` |
|
|
406
|
+
| Handoff protocol | `references/handoff.md` |
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## Next Steps
|
|
411
|
+
|
|
412
|
+
1. **Allfather reviews and prioritizes** — Select Phase 1 items for immediate sprint
|
|
413
|
+
2. **Create implementation tickets** — Use `ticket-create` with measurable goals
|
|
414
|
+
3. **Assign workstreams** — Visualizer vs Backend vs Infra tracks
|
|
415
|
+
4. **Weekly sync** — Track progress against roadmap
|
|
416
|
+
5. **Retrospective at Phase 1 end** — Adjust priorities based on learnings
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
*This plan is a living document. Update as enhancements are completed, new needs emerge, or priorities shift.*
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Config Reference
|
|
2
|
+
|
|
3
|
+
The full `smidja.config.yaml` spec: every field, how defaults merge, and how model / thinking / tools / extensions map onto the coding agent.
|
|
4
|
+
|
|
5
|
+
It lives at **`smidja/smidja_smidja_config/smidja.config.yaml`** — the default path every `smidja_*.py` and the justfile resolve, and where `install.py` / `make_config.py` stamp it. Pass `--config <path>` to any smidja (or set `SMIDJA_CONFIG` for the justfile) to run against a different roster.
|
|
6
|
+
|
|
7
|
+
## Shape
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
defaults:
|
|
11
|
+
coding_agent: pi
|
|
12
|
+
model: google/gemini-3.6-flash # ALWAYS provider/model-id
|
|
13
|
+
thinking: medium
|
|
14
|
+
harness_engineering: []
|
|
15
|
+
tools: [read, bash, edit, write, grep, find, ls]
|
|
16
|
+
data_dir: smidja/smidja_data
|
|
17
|
+
|
|
18
|
+
observability:
|
|
19
|
+
db: smidja/smidja_data/smidja.db
|
|
20
|
+
poll_ms: 500
|
|
21
|
+
|
|
22
|
+
agents:
|
|
23
|
+
- name: planner
|
|
24
|
+
coding_agent: pi
|
|
25
|
+
model: google/gemini-3.6-flash # ALWAYS provider/model-id
|
|
26
|
+
thinking: high
|
|
27
|
+
color: "#a78bfa"
|
|
28
|
+
purpose: Turn a request into a plan the builder can implement without asking questions.
|
|
29
|
+
prompt_engineering:
|
|
30
|
+
system: smidja/smidja_data/prompt_engineering/planner/system.md
|
|
31
|
+
user: smidja/smidja_data/prompt_engineering/planner/user.md
|
|
32
|
+
harness_engineering:
|
|
33
|
+
- json-enforcer
|
|
34
|
+
tools:
|
|
35
|
+
- read
|
|
36
|
+
- bash
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Fields
|
|
40
|
+
|
|
41
|
+
### `defaults`
|
|
42
|
+
|
|
43
|
+
| Field | Type | Meaning |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| `coding_agent` | `pi` \| `claude_code` | Which interface runs the agent. **v1 implements `pi` only**; `claude_code` is specced and stubbed in `agent_cc.py`, landing in v2. |
|
|
46
|
+
| `model` | string | Model id. For Pi, any id registered in `~/.pi/agent/models.json`. Default `gemini-3.6-flash`. |
|
|
47
|
+
| `thinking` | enum | Reasoning effort — see below. Default `medium`. |
|
|
48
|
+
| `color` | hex string | Lane color for every agent that does not set its own. Default empty — the visualizer falls back to its own palette. |
|
|
49
|
+
| `harness_engineering` | list[string] | Coding-agent extensions. Pi: extension names. Claude Code: reserved (MCP, hooks). |
|
|
50
|
+
| `tools` | list[string] | Roster-wide tool allowlist. Every agent that omits its own `tools` inherits this. Unset = all tools usable. |
|
|
51
|
+
| `protected_files` | list[string] | Paths **no** agent may modify unless it names them in its own `writes`. Default: `smidja/smidja_modules/`, `smidja/smidja_smidja_config/`, `smidja/smidja_*.py` — an agent must not be able to edit the machinery that decides whether its work passed. |
|
|
52
|
+
| `data_dir` | path | Runtime home. Sessions land at `{data_dir}/sessions/{smidja_id}/{agent_name}/`. Default `smidja/smidja_data`. |
|
|
53
|
+
|
|
54
|
+
### `observability`
|
|
55
|
+
|
|
56
|
+
| Field | Type | Meaning |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| `db` | path | SQLite trace db. `tracer.py` writes it directly; the visualizer polls it. Default `smidja/smidja_data/smidja.db`. |
|
|
59
|
+
| `poll_ms` | int | Visualizer live-poll cadence in ms. History uses the same queries, lazy-paged. Default `500`. |
|
|
60
|
+
|
|
61
|
+
### `agents[]`
|
|
62
|
+
|
|
63
|
+
| Field | Required | Meaning |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| `name` | yes | The identifier smidja scripts use. **smidja name agents, never models.** |
|
|
66
|
+
| `purpose` | yes | One sentence: what this agent is for. Should match its `system.md` Purpose. |
|
|
67
|
+
| `prompt_engineering.system` | yes | Path to the system prompt — who the agent is, its single purpose, its output contract. |
|
|
68
|
+
| `prompt_engineering.user` | yes | Path to the default user prompt — the task template with `{{prompt}}`, `{{previous_envelope}}`, `{{context_handoff_dir}}`. |
|
|
69
|
+
| `color` | no | Hex swatch (`"#a78bfa"`) for this agent's lane in the visualizer. Travels config → `agent_sessions.color` → `/api/sessions/:smidja_id`, and rides the `agent_start` event so a lane is colored while the agent is still running. Unset = the UI's fallback palette. |
|
|
70
|
+
| `coding_agent`, `model`, `thinking`, `color`, `harness_engineering` | no | Override the corresponding `defaults` key. |
|
|
71
|
+
| `tools` | no | Allowlist. **Omitting the key means all tools usable.** A capability list, not a boundary — see `writes`. |
|
|
72
|
+
| `writes` | no | What this agent may modify **in the repo**, enforced after every call. Omitted = unrestricted (still barred from `protected_files`). `[]` = no repo writes at all. A list = only those paths: a trailing `/` is a directory prefix, `*` matches within one path segment, `**` crosses segments, anything else is an exact path. Naming a `protected_files` path here is what unlocks it. **The session runtime under `data_dir` is always writable** — `writes: []` means read-only with respect to the repo, not unable to write its own report. |
|
|
73
|
+
|
|
74
|
+
Output types are deliberately absent: config defines who an agent *is*; the smidja call site defines how it's *used*. One agent serves many calls — same system prompt, different user prompt + output type per call.
|
|
75
|
+
|
|
76
|
+
## Defaults merging
|
|
77
|
+
|
|
78
|
+
`agents.py` merges each entry **over** `defaults`, key by key. An entry states only what differs; anything unset inherits. `agents.validate(cfg, REQUIRED_AGENTS)` then confirms every name an smidja declares exists, resolves to a usable coding agent + model, and has both prompt files present on disk. Any miss fails the run immediately — **no agent is ever spawned against a half-valid config.**
|
|
79
|
+
|
|
80
|
+
## Thinking levels
|
|
81
|
+
|
|
82
|
+
Pi's reasoning-effort ladder, lowest to highest:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
off | minimal | low | medium | high | xhigh | max
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Mapped to Pi's reasoning effort control and honored when the model is registered with `reasoning: true` in `~/.pi/agent/models.json`. On a non-reasoning model the setting is inert — no error, no effect. Rough guidance: `high`/`xhigh` for planners and reviewers, `medium` for builders, `low` for mechanical read-and-report agents. (For Claude Code in v2, the same field maps to the thinking budget.)
|
|
89
|
+
|
|
90
|
+
## Model resolution
|
|
91
|
+
|
|
92
|
+
**Always write `model` as `provider/model-id`.** `agents.py` hands the string to the Pi interface, which resolves it against pi's merged catalog — `~/.pi/agent/models.json` plus pi's built-in providers. The same model is usually carried by more than one provider (`gemini-3.6-flash` lives under `google` *and* under `openrouter` as `google/gemini-3.6-flash`), and a bare id that matches several **raises at resolution**:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
agent 'scout': model pattern 'gemini-3.6-flash' is ambiguous:
|
|
96
|
+
[('google', 'gemini-3.6-flash'), ('openrouter', 'google/gemini-3.6-flash'), ...]
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
That is `agents.validate()` doing its job — it fails before anything spawns rather than silently billing the wrong provider — but it means every agent in the roster inheriting that default is grounded until the pattern is qualified. Qualifying is the whole fix: `google/gemini-3.6-flash`, `openai/gpt-5.6-terra`, `fireworks/accounts/fireworks/models/kimi-k3`. The leading segment is matched against the provider list first, so the rest of the string can contain slashes.
|
|
100
|
+
|
|
101
|
+
Other consequences worth knowing:
|
|
102
|
+
|
|
103
|
+
- A model must be in the catalog before any agent can name it. An unknown id fails at resolution, before spawn. `pi --list-models` is the catalog the resolver actually reads.
|
|
104
|
+
- **Ambiguity can appear without you touching the config.** Registering a new provider that carries a model you already use turns a formerly-fine bare pattern ambiguous. If a roster stops validating and nobody edited it, that is why.
|
|
105
|
+
- Provider credentials come from the environment, not the config — the key that matches the provider you named (`GEMINI_API_KEY` for `google/...`, `OPENROUTER_API_KEY` for `openrouter/...`).
|
|
106
|
+
- The resolved model is recorded per session in `agent_map.json` and mirrored into the `agent_sessions` table. **Changing an agent's model invalidates its session**: a joined run starts that agent fresh instead of resuming a context window built by a different model.
|
|
107
|
+
|
|
108
|
+
## Tools
|
|
109
|
+
|
|
110
|
+
`tools` maps to `pi --tools`. Pi's seven builtin tool names:
|
|
111
|
+
|
|
112
|
+
| Tool | Purpose | Pi's own default |
|
|
113
|
+
|---|---|---|
|
|
114
|
+
| `read` | read file contents | on |
|
|
115
|
+
| `bash` | execute bash commands | on |
|
|
116
|
+
| `edit` | find/replace edits | on |
|
|
117
|
+
| `write` | create/overwrite files | on |
|
|
118
|
+
| `grep` | search file contents | **off** |
|
|
119
|
+
| `find` | find files by glob | **off** |
|
|
120
|
+
| `ls` | list directory contents | **off** |
|
|
121
|
+
|
|
122
|
+
`grep`, `find`, and `ls` are off in bare Pi, so an agent that does not name them will shell out through `bash` to do the same work. The starter roster therefore sets `defaults.tools` to all seven and lets each agent narrow from there.
|
|
123
|
+
|
|
124
|
+
**Resolution order:** an agent's own `tools` list wins; an agent that omits the key inherits `defaults.tools`; if neither is set, `tools` stays `None` and all tools are usable. An empty list is not "all tools" — it is a tool-less agent, and it will stall.
|
|
125
|
+
|
|
126
|
+
## Write permissions — `writes` and `protected_files`
|
|
127
|
+
|
|
128
|
+
`tools` cannot express a safety boundary, because two of the tools are general
|
|
129
|
+
purpose. `bash` runs anything, including `git checkout`, which discards an
|
|
130
|
+
engineer's uncommitted work; `write` reaches any path, not only the one report
|
|
131
|
+
file an agent was granted it for. So "this agent changes nothing" is a claim a
|
|
132
|
+
tool list can state but never keep.
|
|
133
|
+
|
|
134
|
+
`smidja_modules/permissions.py` keeps it, the same way every other claim in this
|
|
135
|
+
system is kept — after the fact, against the repo. Before an agent's first
|
|
136
|
+
prompt the working tree's change-set is fingerprinted; after its last send
|
|
137
|
+
(including JSON retries and gate corrections) it is fingerprinted again. Any
|
|
138
|
+
path that appeared, vanished, or changed is attributed to that agent.
|
|
139
|
+
|
|
140
|
+
Comparing change-sets rather than watching writes is deliberate: a path that was
|
|
141
|
+
modified before the agent ran and is clean afterwards has been **reverted**, and
|
|
142
|
+
a reversion is a modification. That is what catches `git checkout`.
|
|
143
|
+
|
|
144
|
+
A breach is not a gate violation. Gates are for work an agent can be asked to
|
|
145
|
+
redo; a write has already happened, so re-prompting fixes nothing. Instead:
|
|
146
|
+
|
|
147
|
+
1. every unauthorized change the agent **introduced** is rolled back — tracked
|
|
148
|
+
files with `git checkout --`, untracked files by deletion;
|
|
149
|
+
2. a path that was **already dirty** before the agent ran is left untouched. The
|
|
150
|
+
operator had uncommitted work there, and discarding it to tidy up would be
|
|
151
|
+
the same harm this module exists to prevent;
|
|
152
|
+
3. the phase fails and names every path with what happened to it.
|
|
153
|
+
|
|
154
|
+
```yaml
|
|
155
|
+
defaults:
|
|
156
|
+
protected_files: [smidja/smidja_modules/, smidja/smidja_smidja_config/, "smidja/smidja_*.py"]
|
|
157
|
+
|
|
158
|
+
agents:
|
|
159
|
+
- name: builder # no `writes` key -> unrestricted, minus protected_files
|
|
160
|
+
- name: scout
|
|
161
|
+
writes: [] # no repo writes; its findings still land in context_handoff/
|
|
162
|
+
- name: planner
|
|
163
|
+
writes: [specs/]
|
|
164
|
+
- name: documenter
|
|
165
|
+
writes: [app_docs/, docs/, "**/*.md", "*.md"]
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**The session runtime under `data_dir` is always writable, for every agent.**
|
|
169
|
+
`context_handoff/` is how agents hand work to each other, and each agent's
|
|
170
|
+
prompts, `raw_output.jsonl`, and `envelope.json` sit beside it. That grant comes
|
|
171
|
+
from `data_dir` rather than from `.gitignore`: the runtime is normally ignored,
|
|
172
|
+
so it never even appears in a snapshot, but an agent's ability to record its own
|
|
173
|
+
work must not depend on a gitignore line someone can delete.
|
|
174
|
+
|
|
175
|
+
Narrow by role, not by reflex. Anything that must produce a `context_handoff/` artifact needs `write`, or it will resort to a `bash` heredoc. Withhold `edit`/`write` only where the restriction *is* the guarantee — a reviewer that cannot edit cannot quietly fix what it was asked to report.
|
|
176
|
+
|
|
177
|
+
### Extension tools must be named explicitly
|
|
178
|
+
|
|
179
|
+
`pi --tools` is an allowlist over **built-in, extension, and custom tools alike** — not just builtins. So the moment an agent has a `tools` list at all (its own, or one inherited from `defaults`), any tool registered by its `harness_engineering` extensions is **excluded unless it appears in that list by name**.
|
|
180
|
+
|
|
181
|
+
This fails quietly. The extension still loads, the run still succeeds, and the tool the extension exists to provide is simply never offered to the model — you find out by noticing the agent never called it.
|
|
182
|
+
|
|
183
|
+
```yaml
|
|
184
|
+
- name: reviewer
|
|
185
|
+
harness_engineering:
|
|
186
|
+
- .pi/extensions/ast_query.ts # registers tool: ast_query
|
|
187
|
+
tools:
|
|
188
|
+
- read
|
|
189
|
+
- grep
|
|
190
|
+
- find
|
|
191
|
+
- ls
|
|
192
|
+
- bash
|
|
193
|
+
- ast_query # REQUIRED — the extension's tool, named or lost
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Rule: **every entry in `harness_engineering` that registers a tool must have that tool name added to the agent's `tools` list.** Adding an extension is therefore a two-line change, never one. The alternative is dropping the `tools` key *and* leaving `defaults.tools` unset so the agent resolves to `None` (all tools) — but with a roster-wide `defaults.tools` in place, that escape hatch is closed; naming the tool is the only path.
|
|
197
|
+
|
|
198
|
+
## Harness engineering
|
|
199
|
+
|
|
200
|
+
`harness_engineering` entries are pi extension **file paths**, passed through as `pi -e <path>`, one flag per entry, scoped to that agent only. This is where per-agent harness changes live — e.g. an output-tightening extension for an agent that keeps wrapping its envelope in prose. The starter roster ships with none. On Claude Code the field is reserved for MCP config and hooks in v2.
|
|
201
|
+
|
|
202
|
+
**If the extension registers a tool, name that tool in the agent's `tools` list too** — `--tools` filters extension tools exactly like builtins, so an unnamed extension tool is silently unavailable no matter that the extension loaded fine. See [Extension tools must be named explicitly](#extension-tools-must-be-named-explicitly) above. Extensions that only shape output or add flags (no tool registration) need no `tools` change.
|