@zerwiz/ymir 0.1.33 → 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/install.sh +88 -0
- package/package.json +16 -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,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: add-or-edit-ai-models
|
|
3
|
+
description: "Tune the model (and prompt, and injected context) for agents, by interviewing the user first. Ask a lot of questions — which team(s) and role are affected, what they value (reasoning vs speed vs cost vs context), local/cloud/hybrid surface, exact model id, and whether they also want to tune the prompt or what gets injected — then hand-edit the roster file (+ prompt pair), validate in the catalog, and re-run. Use when the user wants to change an agent's model, add a model, fine-tune prompts, or control what context is injected into agents."
|
|
4
|
+
version: "1.0"
|
|
5
|
+
allowed-tools: read, write, edit, bash, grep, glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Add / Edit AI Models — tune model, prompt, and injection, after asking
|
|
9
|
+
|
|
10
|
+
## Sibling skills
|
|
11
|
+
- **`create-new-teams`** / **`create-new-agent`** — creating teams and roles.
|
|
12
|
+
- **`smidja` / `smidja-launcher` / `smidja-start`** — running them.
|
|
13
|
+
- **`smidja`** — conventions when work lands in `~/Ymir`.
|
|
14
|
+
|
|
15
|
+
## When to use
|
|
16
|
+
- User says: "change the builder's model", "that agent is too weak/slow",
|
|
17
|
+
"what can run the planner locally?", "give the team more context",
|
|
18
|
+
"the reviewer needs to see the spec" — model, prompt, or injection tuning.
|
|
19
|
+
|
|
20
|
+
## The three dials (all hand-editable)
|
|
21
|
+
1. **Model** — per (team × agent), in the roster file (`stacks` → per-agent
|
|
22
|
+
`models:` / `tiers:` (the model catalog lives in the same file).
|
|
23
|
+
2. **Prompt** — `smidja/smidja_data/prompt_engineering/<name>/{system,user}.md`.
|
|
24
|
+
Who the agent is, and the task template.
|
|
25
|
+
3. **Injection** — what goes into the agent's context before it works: the
|
|
26
|
+
team's `inject:` list (AGENTS.md, skills, memory, prior spec) and the
|
|
27
|
+
`{{…}}` slots in `user.md`. Tune these to shape what the agent sees.
|
|
28
|
+
|
|
29
|
+
## 0. Interview — ASK THE USER, do not guess
|
|
30
|
+
|
|
31
|
+
| # | Question | Why it matters |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| 1 | **Which scope?** One team, a few teams, or everywhere (a shared preset/tier)? | Decides where the edit lands: one stack's `models:` vs the shared preset. |
|
|
34
|
+
| 2 | **Which role(s)?** orchestrator/planner/builder/scout/reviewer/documenter/… | The per-agent target. |
|
|
35
|
+
| 3 | **What is wrong / what do you value?** Speed? Quality/reasoning? Context length? Cost (free?)? Privacy/local? | The selection criteria — the answer changes the pick. |
|
|
36
|
+
| 4 | **Local, cloud, or hybrid?** And do we have the surface (VRAM / keys)? | Narrows the catalog. |
|
|
37
|
+
| 5 | **Exact model id, or should I pick?** You pick → state candidates + your choice before editing. | The **provider/model-id** to write. |
|
|
38
|
+
| 6 | **Prompt too?** Also tune `system.md` (who it is) or `user.md` (task template / what's injected)? | Branches into prompt editing — the triad rule applies. |
|
|
39
|
+
| 7 | **Injection?** Which context should it see — AGENTS.md, project skills, knowledge/memory, a prior spec, git log? | Fills the `inject:` list / `user.md` slots. |
|
|
40
|
+
| 8 | **Same or different across teams?** Same role, but different model per team? | Per-team assignment semantics. |
|
|
41
|
+
|
|
42
|
+
If the user says "you pick": keep the role's current class, improve one axis
|
|
43
|
+
they named, prefer local where VRAM/keys permit, and say exactly what you chose
|
|
44
|
+
and why.
|
|
45
|
+
|
|
46
|
+
## 0. Fast path — let the scaffold set it
|
|
47
|
+
|
|
48
|
+
`smidja model set` writes the exact change below (and `model pin <stack> <role>
|
|
49
|
+
<model>` is its alias), validates the string against known providers (+ the LM
|
|
50
|
+
Studio catalog for `lmstudio/`), and refuses a small model on
|
|
51
|
+
orchestrator/planner/reviewer:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
smidja model set cloud-free orchestrator openrouter/qwen3.5-235b-a22b:free # shared tier
|
|
55
|
+
smidja model set local-ui builder lmstudio/frontend-design-expert-8b # one team (override)
|
|
56
|
+
smidja model pin local-ui builder lmstudio/frontend-design-expert-8b # alias, stack-forced
|
|
57
|
+
smidja doctor --stack local-ui # green = applied + legal
|
|
58
|
+
```
|
|
59
|
+
The change below is identical — hand-edit only when the export is the point
|
|
60
|
+
(machine-verified either way).
|
|
61
|
+
|
|
62
|
+
## 1. Change the model (per team × agent)
|
|
63
|
+
|
|
64
|
+
In `smidja/smidja_smidja_config/roster.yaml`, target the exact scope:
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
# one team only — override just that agent (the runtime resolver reads overrides.<role>.model)
|
|
68
|
+
stacks:
|
|
69
|
+
my-team:
|
|
70
|
+
agents: [orchestrator, planner, builder, scout, reviewer, documenter]
|
|
71
|
+
overrides:
|
|
72
|
+
orchestrator:
|
|
73
|
+
model: lmstudio/qwen3.6-35b-a3b@q2_k_xl # the big one
|
|
74
|
+
builder:
|
|
75
|
+
model: lmstudio/qwen3.5-9b # cheap + fast
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
# every team that uses a preset — edit the shared preset
|
|
80
|
+
tiers: # the canonical key (was models.yaml tiers:; model_presets: is a resolver alias)
|
|
81
|
+
local:
|
|
82
|
+
builder: lmstudio/qwen3.5-9b # ← change here = every local team
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Selection rules (see `plans/model-team-agent-playbook.md` §1):
|
|
86
|
+
- **orchestrator/planner/reviewer** → strong reasoning + long context; **never
|
|
87
|
+
4B**. Reviewer default: `gemma-4-12b-it@q4_k_m` ("deep but cheap").
|
|
88
|
+
- **builder** → fast/cheap executor (`qwen3.5-9b`, `qwopus3.5-9b-coder`,
|
|
89
|
+
`frontend-design-expert-8b` for UI).
|
|
90
|
+
- **scout** → the only 4B slot is fine; 9b for depth.
|
|
91
|
+
- Always write `provider/model-id` (a bare id that matches several providers
|
|
92
|
+
raises at validation). Changing an agent's model = fresh session (context
|
|
93
|
+
window does not carry across a model change — intended).
|
|
94
|
+
|
|
95
|
+
## 2. Validate against the real catalog before re-running
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
curl -s http://localhost:1234/v1/models | python3 -c "import json,sys;print('\n'.join(m['id'] for m in json.load(sys.stdin)['data']))" # local
|
|
99
|
+
smidja doctor # planned: models resolve, prompts exist, no 4B coordinator
|
|
100
|
+
smidja rosters # show what each stack resolves to today
|
|
101
|
+
```
|
|
102
|
+
A local id missing from `:1234` will fail at spawn — catch it here, in a second,
|
|
103
|
+
not halfway through a run.
|
|
104
|
+
|
|
105
|
+
## 3. Tune the prompt (hand-edit)
|
|
106
|
+
|
|
107
|
+
`system.md` — who the agent is. If the `purpose` changes, edit the role entry
|
|
108
|
+
AND the system `Purpose` in the same edit (they must not drift).
|
|
109
|
+
|
|
110
|
+
`user.md` — the task template. The injection slots you can shape:
|
|
111
|
+
- `{{prompt}}` — the incoming ask (never edit this).
|
|
112
|
+
- `{{previous_envelope}}` — prior agent's typed output (cross-team context).
|
|
113
|
+
- `{{context_handoff_dir}}` — files other agents left for it.
|
|
114
|
+
- Anything else the agent must always see → add to the team's `inject:` list or
|
|
115
|
+
append to the template.
|
|
116
|
+
|
|
117
|
+
**Triad rule:** prompt changes that touch the output contract must stay in sync
|
|
118
|
+
with `data_types.py` and the call site's `output_type=` — one edit, three files.
|
|
119
|
+
|
|
120
|
+
## 4. Tune injection (what the system feeds the agent)
|
|
121
|
+
|
|
122
|
+
The `stacks:` `inject:` list and per-agent `user.md` control what context enters
|
|
123
|
+
the window:
|
|
124
|
+
```yaml
|
|
125
|
+
stacks:
|
|
126
|
+
my-team:
|
|
127
|
+
inject:
|
|
128
|
+
- AGENTS.md # project rules the builder must follow
|
|
129
|
+
- smidja/smidja_data/knowledge/team-notes.md # domain memory
|
|
130
|
+
```
|
|
131
|
+
Keep injection lean — every injected file spends the agent's context window on
|
|
132
|
+
setup instead of work. When in doubt, smaller + focused beats bigger + diffuse.
|
|
133
|
+
|
|
134
|
+
## 5. Re-run and confirm
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
smidja run --roster my-team "<ask>"
|
|
138
|
+
```
|
|
139
|
+
Check the trace (:4601): the changed lane shows the new model, and the
|
|
140
|
+
injected context shows up in the agent's transcript. Report what changed and
|
|
141
|
+
what the run showed.
|
|
142
|
+
|
|
143
|
+
## Golden rules
|
|
144
|
+
1. **Ask before you edit.** Scope (which team/role), the axis (speed/quality/
|
|
145
|
+
context/cost), the surface (local/cloud), and exact id come from the user.
|
|
146
|
+
2. **Per-team model is the default** — same role can differ across teams.
|
|
147
|
+
3. **Never a 4B orchestrator/planner/reviewer** — `doctor` enforces it.
|
|
148
|
+
4. **Validate in the catalog first** — a typo catches you in a second, not in
|
|
149
|
+
a run.
|
|
150
|
+
5. **Prompt + output type + call site are one thing** (triad) — change all three.
|
|
151
|
+
6. **Injection is a budget** — lean and focused, and visible in the transcript.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: create-new-agent
|
|
3
|
+
description: "Create a new agent role by interviewing the user first. Ask a lot of questions — the job/purpose, which existing role to clone from, which model it runs, thinking level, tools and write boundary, lane color, which teams should contain it, and what context/prompt to give it — then hand-edit the roster file and the prompt pair, and validate. Use when the user wants a new agent, a new role, a specialist ('make me a devops agent'), or an agent for a team that doesn't exist yet."
|
|
4
|
+
version: "1.0"
|
|
5
|
+
allowed-tools: read, write, edit, bash, grep, glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Create New Agents — ask first, then make the role real
|
|
9
|
+
|
|
10
|
+
## Sibling skills
|
|
11
|
+
- **`create-new-teams`** — teams (stacks) built from agent roles.
|
|
12
|
+
- **`add-or-edit-ai-models`** — tuning an existing agent's model/prompt/injection.
|
|
13
|
+
- **`smidja` / `smidja-launcher` / `smidja-start`** — running the team.
|
|
14
|
+
- **`smidja`** — conventions when work lands in `~/Ymir`.
|
|
15
|
+
|
|
16
|
+
## The one mental model
|
|
17
|
+
**An agent is a role, defined once; it carries no model of its own.** A role =
|
|
18
|
+
one `role_defaults:` entry (purpose, thinking, tools, writes, color) +
|
|
19
|
+
one prompt pair (`smidja/smidja_data/prompt_engineering/<name>/{system,user}.md`).
|
|
20
|
+
The model is assigned later, per team, in the stack. So creating an agent is
|
|
21
|
+
creating the *role* — and every team that lists it gets a model for it.
|
|
22
|
+
|
|
23
|
+
## When to use
|
|
24
|
+
- User says: "make an agent for…", "we need a spec agent", "add a devops role",
|
|
25
|
+
"create a specialist like the wot-* ones".
|
|
26
|
+
|
|
27
|
+
## 0. Interview — ASK THE USER, do not guess
|
|
28
|
+
|
|
29
|
+
Go one question at a time. Minimum set:
|
|
30
|
+
|
|
31
|
+
| # | Question | Why it matters |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| 1 | **What is this agent FOR?** The job, in one sentence — its `purpose`. | Fills `purpose`; must match the system prompt. |
|
|
34
|
+
| 2 | **A brand-new role or a clone?** Any existing role to start from (planner/builder/scout/reviewer/documenter/orchestrator…)? | `--from <role>` seeds tools/writes/prompt pair. |
|
|
35
|
+
| 3 | **Does it write, or is it read-only?** Changes in the repo vs reports only (`writes: []`). | Sets the `writes` boundary — the enforcement rule. |
|
|
36
|
+
| 4 | **Which tools does it need?** read/bash/edit/write; grep/find/ls for search; `subagent_*` if it spawns subagents. | The `tools` allowlist (and the extension-tools-must-be-named rule). |
|
|
37
|
+
| 5 | **How much thinking?** low (mechanical recon) / medium (executor) / high (judgement: coordinator, planner, reviewer). | Sets `thinking`. |
|
|
38
|
+
| 6 | **Which model should it run?** Across which teams? Remind: this is per-team, decided in the stack — but ask what class of model it needs (big/strong context vs cheap/fast). | Feeds the model assignment. **Never 4B if it's an orchestrator/planner/reviewer.** |
|
|
39
|
+
| 7 | **Which teams should contain it?** List stacks, or "later". | Registers it in stacks now or leaves it available. |
|
|
40
|
+
| 8 | **What context should be injected?** AGENTS.md? domain skills? memory? prior envelope? | The prompt injection plan. |
|
|
41
|
+
| 9 | **Lane color?** (optional — the UI swatch). | `color` hex; default from palette. |
|
|
42
|
+
|
|
43
|
+
The user may answer "you pick": clone `planner` for a specialist, medium
|
|
44
|
+
thinking, read+write as appropriate, cheap model, add to the current team.
|
|
45
|
+
State your choices before writing.
|
|
46
|
+
|
|
47
|
+
## 0. Fast path — let the scaffold write it
|
|
48
|
+
|
|
49
|
+
`smidja agent new` appends the `role_defaults:` entry below, scaffolds the prompt
|
|
50
|
+
pair, assigns a lane color, and refuses a bad name up front:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
smidja agent new my-role --from planner \
|
|
54
|
+
--thinking medium --tools read,edit,write,bash,grep,find,ls \
|
|
55
|
+
--writes specs/ \
|
|
56
|
+
--purpose "<one sentence from the interview>"
|
|
57
|
+
then: smidja doctor # green = roles known, prompts on disk
|
|
58
|
+
```
|
|
59
|
+
Hand-editing below stays valid — the scaffold writes the same block + prompt
|
|
60
|
+
pair, and preserves every comment in the file.
|
|
61
|
+
|
|
62
|
+
## 1. Hand-edit the role (roster file)
|
|
63
|
+
|
|
64
|
+
Add the role to the `role_defaults:` block in `smidja/smidja_smidja_config/roster.yaml`:
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
role_defaults:
|
|
68
|
+
my-role:
|
|
69
|
+
thinking: medium # off|minimal|low|medium|high|xhigh|max
|
|
70
|
+
purpose: <one sentence from the interview>
|
|
71
|
+
tools: [read, bash, edit, write, grep, find, ls] # or the list from Q4
|
|
72
|
+
writes: [specs/] # [] = read-only; omit = any (minus protected)
|
|
73
|
+
color: "#22d3ee" # optional lane swatch
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Rules (origin `references/config.md`):
|
|
77
|
+
- **tools** is an allowlist; omitted = all builtins. `grep/find/ls` are off in
|
|
78
|
+
bare pi — name them. If the role spawns subagents, add `subagent_*` tool names
|
|
79
|
+
**and** `harness_engineering: [smidja/smidja_data/harness_engineering/subagents.ts]`.
|
|
80
|
+
- **writes** is the repo boundary enforced after every call: trailing `/` =
|
|
81
|
+
dir prefix, `*` one segment, `**` crosses, else exact path. `data_dir`
|
|
82
|
+
(reports/sessions) is always writable.
|
|
83
|
+
- **thinking** is inert on non-reasoning models — set it anyway (portable).
|
|
84
|
+
|
|
85
|
+
## 2. Write the prompt pair (hand-editable, tunable — the point)
|
|
86
|
+
|
|
87
|
+
Create `smidja/smidja_data/prompt_engineering/<name>/system.md` and `user.md`:
|
|
88
|
+
|
|
89
|
+
- `system.md` — who the agent is; repeat `purpose` verbatim (they must not
|
|
90
|
+
drift); its output contract.
|
|
91
|
+
- `user.md` — the task template: `{{prompt}}`, `{{previous_envelope}}`,
|
|
92
|
+
`{{context_handoff_dir}}`, ends with a `## Report` JSON example. Anything else
|
|
93
|
+
the agent needs injected (AGENTS.md, skills, examples) can be appended here or
|
|
94
|
+
wired through the team's `inject:` list.
|
|
95
|
+
|
|
96
|
+
**Triad rule:** the output *type* (`smidja/smidja_modules/data_types.py`), the
|
|
97
|
+
`## Report` example (`user.md`), and `output_type=` at the smidja call site are one
|
|
98
|
+
thing — change one, change all three in the same edit.
|
|
99
|
+
|
|
100
|
+
Clone path shortcut: copying `planner`'s pair and editing the Purpose/Report
|
|
101
|
+
sections is the fastest correct start.
|
|
102
|
+
|
|
103
|
+
## 3. Register it
|
|
104
|
+
|
|
105
|
+
- Add the name to the `agents:` list of any stack that should contain it
|
|
106
|
+
(then give it a model there — per team).
|
|
107
|
+
- If an smidja should use it directly, list it in that smidja's `REQUIRED_AGENTS` /
|
|
108
|
+
phase `owner=` (smidja name agents, never models).
|
|
109
|
+
|
|
110
|
+
## 4. Validate
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
smidja doctor # planned: role exists, prompts present, model resolvable, no 4B coordinator
|
|
114
|
+
```
|
|
115
|
+
A role with no prompt pair or an unresolvable model fails before anything
|
|
116
|
+
spawns — that's the design, not a bug.
|
|
117
|
+
|
|
118
|
+
## Golden rules
|
|
119
|
+
1. **Ask before you build.** The interview is the product.
|
|
120
|
+
2. **An agent = role (no model) + prompt pair.** Models are per-team.
|
|
121
|
+
3. **Prompt pair is hand-editable and tunable** — keep system `purpose` and
|
|
122
|
+
`user.md` `## Report` in sync with the output type (triad rule).
|
|
123
|
+
4. **tools = capability, writes = boundary.** State both honestly.
|
|
124
|
+
5. **A 4B role must never be orchestrator/planner/reviewer.**
|
|
125
|
+
6. Validate before you trust it; add it to a team + smoke to see it live.
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: create-new-teams
|
|
3
|
+
description: "Create a new smidja team (roster stack) by interviewing the user first. Ask a lot of questions — purpose, local/cloud/hybrid surface, which agents, which model EACH agent runs (orchestrator gets a big model by default), cost/speed/quality trade-offs, kaia tier, and what context to inject — then hand-edit the roster file and validate. Use when the user wants a new team, a new roster, a new configuration of agents+models, or 'make a team for project X'."
|
|
4
|
+
version: "1.0"
|
|
5
|
+
allowed-tools: read, write, edit, bash, grep, glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Create New Teams — ask first, then make the team real
|
|
9
|
+
|
|
10
|
+
## Sibling skills
|
|
11
|
+
- **`create-new-agent`** — a single new agent role (do this first if the team
|
|
12
|
+
needs a role that doesn't exist yet).
|
|
13
|
+
- **`add-or-edit-ai-models`** — changing models/prompts/injection for an
|
|
14
|
+
existing team or agent.
|
|
15
|
+
- **`smidja` / `smidja-launcher` / `smidja-start`** — running the team once it
|
|
16
|
+
exists.
|
|
17
|
+
- **`smidja`** — conventions when work lands in `~/Ymir`.
|
|
18
|
+
|
|
19
|
+
## The one rule
|
|
20
|
+
**A team is a `stacks:` block in the roster file: which agents, and which model
|
|
21
|
+
each one runs.** The model is a per-(team × agent) assignment — the same agent
|
|
22
|
+
role runs a big model in one team and a cheap one in another. Hand-edit the
|
|
23
|
+
file; never generate a throwaway config. Source of truth:
|
|
24
|
+
`smidja/smidja_smidja_config/roster.yaml` — the ONE file: teams (`stacks:`), agent
|
|
25
|
+
roles (`role_defaults:`), and the model catalog (`tiers:`) all live together
|
|
26
|
+
after `models.yaml` was merged in (Sep 2026).
|
|
27
|
+
|
|
28
|
+
## When to use
|
|
29
|
+
- User says: "make a new team", "new roster for project X", "I want a team for
|
|
30
|
+
…", "how do I set up agents for this?".
|
|
31
|
+
|
|
32
|
+
## 0. Interview — ASK THE USER, do not guess
|
|
33
|
+
|
|
34
|
+
Do not open the file until you have answers. Go one question at a time; write
|
|
35
|
+
down the answers. Ask at least these (adapt order to the conversation):
|
|
36
|
+
|
|
37
|
+
| # | Question | Why it matters |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| 1 | **What is the team FOR?** Project/domain, in one sentence. | Defines purpose; may imply a specialized roster (e.g. WayOfTeams wot-*) vs generic SDLC. |
|
|
40
|
+
| 2 | **Local, cloud, or hybrid?** Offline/private (LM Studio) vs cloud (opencode: bigger context, needs keys) vs mix (cloud plan/review, local build). | Picks the surface per agent; decides keys needed. |
|
|
41
|
+
| 3 | **Full SDLC or specialized?** The 6 (orchestrator, planner, builder, scout, reviewer, documenter) — or a subset/specialists. | Shapes the `agents:` list. |
|
|
42
|
+
| 4 | **Which agents exactly?** Name them (existing roles). If one doesn't exist, branch to `create-new-agent` first. | The stack's `agents:` list. |
|
|
43
|
+
| 5 | **What model should EACH agent run?** Walk the list: orchestrator = big model (biggest context + strongest reasoning available); planner/reviewer = strong; builder/scout = fast + cheap. Ask per agent: "and for the builder?" | The per-agent model assignment — the heart of the stack. **Never a 4B orchestrator/planner/reviewer.** |
|
|
44
|
+
| 6 | **Cost vs speed vs quality?** Cheap & fast (repetition-heavy builders/scouts), or depth (frontier/local-big for the coordinator). | Fine-tunes the picks. |
|
|
45
|
+
| 7 | **Kaia tier?** T0 (none), T1 (admission notes, default), T2 (Kaia synthesizes/coordinates). | `kaia_tier` on the stack. |
|
|
46
|
+
| 8 | **What should be injected into their context?** AGENTS.md? project skills? knowledge/memory? prior spec? | The `inject:` list (context sources per agent/team). |
|
|
47
|
+
| 9 | **Name the team.** | The stack name (`smidja run --roster <name>`). |
|
|
48
|
+
|
|
49
|
+
If the user answers "you pick", default: local surface, full 6, orchestrator on
|
|
50
|
+
the largest local model, planner/reviewer mid-strong, builder/scout cheap, T1.
|
|
51
|
+
State the defaults back before writing.
|
|
52
|
+
|
|
53
|
+
## 0. Fast path — let the scaffold write it
|
|
54
|
+
|
|
55
|
+
`smidja team new` emits the exact `stacks:` block you'd hand-write below, validates
|
|
56
|
+
agents/tier/models immediately, and refuses a team with no models at all:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
smidja team new my-team \
|
|
60
|
+
--agents orchestrator,planner,builder,scout,reviewer,documenter \
|
|
61
|
+
--tier local \
|
|
62
|
+
-m orchestrator=lmstudio/qwen3.6-35b-a3b@q2_k_xl \
|
|
63
|
+
-m builder=lmstudio/qwen3.5-9b \
|
|
64
|
+
--thinking builder=low \
|
|
65
|
+
--inject AGENTS.md \
|
|
66
|
+
--kaia-tier T1
|
|
67
|
+
then:
|
|
68
|
+
smidja team show my-team # expanded view: role → model/thinking/tools/writes
|
|
69
|
+
smidja doctor # green = the team would spawn
|
|
70
|
+
```
|
|
71
|
+
Hand-editing below stays valid and is the same thing — the scaffold just does
|
|
72
|
+
the boilerplate + validation and preserves every comment in the file.
|
|
73
|
+
|
|
74
|
+
## 1. Hand-edit the roster (one file)
|
|
75
|
+
|
|
76
|
+
Open `smidja/smidja_smidja_config/roster.yaml` and add the stack. Two ways to give the
|
|
77
|
+
team its models — pick the one the interview produced:
|
|
78
|
+
|
|
79
|
+
```yaml
|
|
80
|
+
stacks:
|
|
81
|
+
my-team:
|
|
82
|
+
tier: local # a named model set from the tiers: catalog (same file)
|
|
83
|
+
agents: [orchestrator, planner, builder, scout, reviewer, documenter]
|
|
84
|
+
overrides: # per-team per-agent tuning; a model here wins over the tier
|
|
85
|
+
orchestrator:
|
|
86
|
+
model: lmstudio/qwen3.6-35b-a3b@q2_k_xl # big model — the default
|
|
87
|
+
builder:
|
|
88
|
+
model: lmstudio/qwen3.5-9b # cheap + fast
|
|
89
|
+
thinking: low
|
|
90
|
+
inject: # context to inject into these agents
|
|
91
|
+
- AGENTS.md
|
|
92
|
+
kaia_tier: T1
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
```yaml
|
|
96
|
+
# B) fully explicit — one model per agent, no tier
|
|
97
|
+
stacks:
|
|
98
|
+
my-team:
|
|
99
|
+
agents: [orchestrator, planner, builder, scout, reviewer, documenter]
|
|
100
|
+
overrides:
|
|
101
|
+
orchestrator:
|
|
102
|
+
model: lmstudio/qwen3.6-35b-a3b@q2_k_xl
|
|
103
|
+
planner:
|
|
104
|
+
model: lmstudio/qwen3.6-35b-a3b@q2_k_xl
|
|
105
|
+
builder:
|
|
106
|
+
model: lmstudio/qwen3.5-9b
|
|
107
|
+
scout:
|
|
108
|
+
model: lmstudio/qwen3.5-4b
|
|
109
|
+
reviewer:
|
|
110
|
+
model: lmstudio/gemma-4-12b-it@q4_k_m
|
|
111
|
+
documenter:
|
|
112
|
+
model: lmstudio/qwen3.5-9b
|
|
113
|
+
kaia_tier: T1
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Keep the shape honest: **each role may run a different model; the orchestrator
|
|
117
|
+
usually runs a big one.** Never leave a team that silently runs one default
|
|
118
|
+
model for everyone — say it explicitly.
|
|
119
|
+
|
|
120
|
+
## 2. Validate before it runs
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
smidja doctor # planned: prompts exist, models resolve, no 4B coordinator
|
|
124
|
+
smidja rosters # resolves every stack today — shows per-agent models
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
- Every agent on the `agents:` list must exist in `role_defaults:` and
|
|
128
|
+
have its prompt pair in `smidja/smidja_data/prompt_engineering/<name>/`.
|
|
129
|
+
- Every model must resolve (local → present in `:1234/v1/models`; cloud →
|
|
130
|
+
opencode/pi catalog). A bare `provider/model` is mandatory.
|
|
131
|
+
- **`doctor`/validate refuses: orchestrator|planner|reviewer on a 4B model.**
|
|
132
|
+
|
|
133
|
+
## 3. Prove it spawns (the acceptance bar)
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
smidja run --roster my-team "<ask>" # or SMIDJA_ROSTER=my-team …
|
|
137
|
+
smidja team smoke my-team # planned: cheap run, every lane visible in :4601
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
A new team is not real until **every member appears as a lane in the trace UI**
|
|
141
|
+
(:4601) — orchestrator through documenter — and the run reaches green or a
|
|
142
|
+
gate with teeth says why not. Report the `smidja_id` + what the trace showed.
|
|
143
|
+
|
|
144
|
+
## Golden rules
|
|
145
|
+
1. **Ask before you build.** The interview is the product.
|
|
146
|
+
2. **One file is the source of truth** — hand-edit `roster.yaml`; never a
|
|
147
|
+
throwaway config, never a "random tweak".
|
|
148
|
+
3. **The orchestrator runs a big model. Never a 4B.**
|
|
149
|
+
4. **Per-agent models are the norm**, not a special case.
|
|
150
|
+
5. **Validate + smoke before you call it done** — spawning in the UI is the bar.
|
|
151
|
+
6. If the team needs a role that doesn't exist → `create-new-agent` first.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# git-ops/ — WayOf Command
|
|
2
|
+
|
|
3
|
+
Deterministic Git workflow. All source-control operations run through these scripts to protect repo history and enforce conventions.
|
|
4
|
+
|
|
5
|
+
## What Goes Here
|
|
6
|
+
|
|
7
|
+
- `SKILL.md` — Skill guidelines for Git operations.
|
|
8
|
+
- `create_branch.sh` — Branch creation with proper naming & ticket linking.
|
|
9
|
+
- `safe_commit.sh` — Pre-commit gates + commit message formatting.
|
|
10
|
+
- `sync_upstream.sh` — Rebase & conflict checks.
|
|
11
|
+
|
|
12
|
+
## File Pattern
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
git-ops/
|
|
16
|
+
├── SKILL.md
|
|
17
|
+
├── create_branch.sh
|
|
18
|
+
├── safe_commit.sh
|
|
19
|
+
└── sync_upstream.sh
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Rules
|
|
23
|
+
|
|
24
|
+
- Git actions (branching, committing, rebasing) MUST go through these scripts — no bare `git commit -m ...`.
|
|
25
|
+
- Pre-commit gates (lint, tests) run inside `safe_commit.sh` before anything is committed.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-ops
|
|
3
|
+
description: Routing for Git operations — create branches, safe commits with gates, and sync upstream. Use when the user needs to create a feature/fix branch, commit with gate validation, or rebase and push. All git operations go through these scripts; never run bare git commands.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SKILL.md — git-ops
|
|
7
|
+
|
|
8
|
+
Routing for Git operations.
|
|
9
|
+
|
|
10
|
+
## Scripts
|
|
11
|
+
| Command | Script | Usage |
|
|
12
|
+
|---------|--------|-------|
|
|
13
|
+
| create_branch | `create_branch.sh` | Create `feat/<feature>` / `fix/<ticket>` branch |
|
|
14
|
+
| safe_commit | `safe_commit.sh` | Run gates, format message, commit |
|
|
15
|
+
| sync_upstream | `sync_upstream.sh` | Rebase + conflict check + push |
|
|
16
|
+
|
|
17
|
+
## Rules
|
|
18
|
+
- Never run bare git commands outside these scripts.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# create_branch.sh — create a working branch, correctly named (git-ops).
|
|
3
|
+
#
|
|
4
|
+
# The house rule is that all git work goes through these three scripts, so a
|
|
5
|
+
# branch is always named the same way, always based on the default branch, and
|
|
6
|
+
# never created on top of uncommitted work (which is how a change ends up in two
|
|
7
|
+
# branches at once).
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# create_branch.sh <type>/<name> [--from <base>] [--allow-dirty]
|
|
11
|
+
# type feat | fix | chore | docs | refactor | test (what the change is)
|
|
12
|
+
# name kebab-case slug, e.g. "electron-igpu-gpu-crash"
|
|
13
|
+
# --from <base> branch from <base> (default: the repository default)
|
|
14
|
+
# --allow-dirty create anyway with a dirty tree (reported, not hidden)
|
|
15
|
+
#
|
|
16
|
+
# Exit: 0 created, 1 refused, 2 usage.
|
|
17
|
+
set -u
|
|
18
|
+
|
|
19
|
+
VERSION="1.0.0"
|
|
20
|
+
ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || { printf 'error: not a git repository\n' >&2; exit 1; }
|
|
21
|
+
cd "$ROOT" || exit 1
|
|
22
|
+
|
|
23
|
+
case "${1-}" in
|
|
24
|
+
-v|-V|--version) printf '%s\n' "$VERSION"; exit 0 ;;
|
|
25
|
+
-h|--help|"") sed -n '2,17p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;;
|
|
26
|
+
esac
|
|
27
|
+
|
|
28
|
+
BRANCH="${1-}"; shift || true
|
|
29
|
+
FROM=""; ALLOW_DIRTY=0
|
|
30
|
+
while [ $# -gt 0 ]; do
|
|
31
|
+
case "$1" in
|
|
32
|
+
--from) FROM=${2-}; shift 2 ;;
|
|
33
|
+
--allow-dirty) ALLOW_DIRTY=1; shift ;;
|
|
34
|
+
*) printf 'error: unknown flag %s\nhelp: create_branch.sh <type>/<name> [--from <base>]\n' "$1" >&2; exit 2 ;;
|
|
35
|
+
esac
|
|
36
|
+
done
|
|
37
|
+
[ -n "$BRANCH" ] || { printf 'error: no branch name\nhelp: create_branch.sh <type>/<name> [--from <base>]\n' >&2; exit 2; }
|
|
38
|
+
|
|
39
|
+
# ── the name ─────────────────────────────────────────────────────────────────
|
|
40
|
+
case "$BRANCH" in
|
|
41
|
+
*/*) TYPE=${BRANCH%%/*}; SLUG=${BRANCH#*/} ;;
|
|
42
|
+
*) printf 'error: branch must be <type>/<name>, got %s\nhelp: types are feat|fix|chore|docs|refactor|test\n' "$BRANCH" >&2; exit 2 ;;
|
|
43
|
+
esac
|
|
44
|
+
case "$TYPE" in
|
|
45
|
+
feat|fix|chore|docs|refactor|test) : ;;
|
|
46
|
+
*) printf 'error: unknown type %s\nhelp: feat|fix|chore|docs|refactor|test\n' "$TYPE" >&2; exit 2 ;;
|
|
47
|
+
esac
|
|
48
|
+
printf '%s' "$SLUG" | grep -qE '^[a-z0-9]+(-[a-z0-9]+)*$' || {
|
|
49
|
+
printf 'error: name must be kebab-case (a-z, 0-9, single dashes): %s\n' "$SLUG" >&2; exit 2; }
|
|
50
|
+
|
|
51
|
+
# ── the base ─────────────────────────────────────────────────────────────────
|
|
52
|
+
if [ -z "$FROM" ]; then
|
|
53
|
+
FROM="$(git symbolic-ref --quiet --short refs/remotes/origin/HEAD 2>/dev/null | sed 's|^origin/||')"
|
|
54
|
+
[ -n "$FROM" ] || FROM=main
|
|
55
|
+
fi
|
|
56
|
+
git rev-parse --verify --quiet "$FROM" >/dev/null || {
|
|
57
|
+
printf 'error: base branch not found: %s\nhelp: fetch first (git-ops/sync_upstream.sh --check) or pass --from\n' "$FROM" >&2; exit 1; }
|
|
58
|
+
|
|
59
|
+
# ── the tree ─────────────────────────────────────────────────────────────────
|
|
60
|
+
DIRTY=$(git status --porcelain | wc -l | tr -d ' ')
|
|
61
|
+
if [ "$DIRTY" != 0 ] && [ "$ALLOW_DIRTY" = 0 ]; then
|
|
62
|
+
printf 'branch[1]{branch,state,detail}:\n "%s","refused","%s uncommitted path(s) would follow you onto the new branch"\n' \
|
|
63
|
+
"$BRANCH" "$DIRTY"
|
|
64
|
+
printf 'help[1]{do}\n "commit them (git-ops/safe_commit.sh), stash them, or pass --allow-dirty"\n' >&2
|
|
65
|
+
exit 1
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
git rev-parse --verify --quiet "$BRANCH" >/dev/null && {
|
|
69
|
+
printf 'error: branch already exists: %s\nhelp: pick another name, or switch to it with git switch\n' "$BRANCH" >&2; exit 1; }
|
|
70
|
+
|
|
71
|
+
# ── create ───────────────────────────────────────────────────────────────────
|
|
72
|
+
if ! git checkout -q -b "$BRANCH" "$FROM" 2>/dev/null; then
|
|
73
|
+
printf 'error: could not create %s from %s\n' "$BRANCH" "$FROM" >&2; exit 1
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
printf 'branch[1]{branch,from,base_sha,dirty}:\n "%s","%s","%s",%s\n' \
|
|
77
|
+
"$BRANCH" "$FROM" "$(git rev-parse --short HEAD)" "$DIRTY"
|
|
78
|
+
printf 'next[2]{step,command}:\n "work","edit, then git-ops/safe_commit.sh -m ..."\n "land","git-ops/sync_upstream.sh (pushes through the no-mistakes gate)"\n'
|
|
79
|
+
exit 0
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# safe_commit.sh — run the house gates, then commit (git-ops).
|
|
3
|
+
#
|
|
4
|
+
# A commit that has not passed the gates is a commit that will fail later, in CI
|
|
5
|
+
# or in review, where it costs more. The gates are the repo's own, so local and
|
|
6
|
+
# CI cannot diverge. Pushing is NOT done here — that is the gate's job
|
|
7
|
+
# (sync_upstream.sh routes through no-mistakes).
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# safe_commit.sh -m "<type>(<scope>): <subject>" [--all] [--no-gates]
|
|
11
|
+
#
|
|
12
|
+
# Exit: 0 committed, 1 refused by a gate or by git, 2 usage.
|
|
13
|
+
set -u
|
|
14
|
+
|
|
15
|
+
VERSION="1.0.0"
|
|
16
|
+
ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || { printf 'error: not a git repository\n' >&2; exit 1; }
|
|
17
|
+
cd "$ROOT" || exit 1
|
|
18
|
+
|
|
19
|
+
case "${1-}" in -v|-V|--version) printf '%s\n' "$VERSION"; exit 0 ;; -h|--help|"") sed -n '2,14p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;; esac
|
|
20
|
+
|
|
21
|
+
MSG=""; ALL=0; GATES=1
|
|
22
|
+
while [ $# -gt 0 ]; do
|
|
23
|
+
case "$1" in
|
|
24
|
+
-m|--message) MSG=${2-}; shift 2 ;;
|
|
25
|
+
--all) ALL=1; shift ;;
|
|
26
|
+
--no-gates) GATES=0; shift ;;
|
|
27
|
+
*) printf 'error: unknown flag %s\nhelp: safe_commit.sh -m "<message>" [--all] [--no-gates]\n' "$1" >&2; exit 2 ;;
|
|
28
|
+
esac
|
|
29
|
+
done
|
|
30
|
+
[ -n "$MSG" ] || { printf 'error: a commit message is required\nhelp: safe_commit.sh -m "<type>(<scope>): <subject>"\n' >&2; exit 2; }
|
|
31
|
+
|
|
32
|
+
# conventional shape, because the log is read by agents and by humans
|
|
33
|
+
printf '%s' "$MSG" | head -1 | grep -qE '^(feat|fix|chore|docs|refactor|test|perf|build|ci)(\([a-z0-9._/-]+\))?: .+' || {
|
|
34
|
+
printf 'error: message must be conventional: type(scope): subject\nhelp: types are feat|fix|chore|docs|refactor|test|perf|build|ci\n' >&2; exit 2; }
|
|
35
|
+
|
|
36
|
+
# ── stage ────────────────────────────────────────────────────────────────────
|
|
37
|
+
if [ "$ALL" = 1 ]; then git add -A; else git add -u; fi
|
|
38
|
+
STAGED=$(git diff --cached --name-only | wc -l | tr -d ' ')
|
|
39
|
+
[ "$STAGED" != 0 ] || { printf 'commit[1]{state,detail}:\n "nothing","no staged changes (use --all to include new files)"\n'; exit 1; }
|
|
40
|
+
|
|
41
|
+
# ── gates ────────────────────────────────────────────────────────────────────
|
|
42
|
+
declare -a G S
|
|
43
|
+
if [ "$GATES" = 1 ] && [ -d "$ROOT/.compliance/gates" ]; then
|
|
44
|
+
for g in "$ROOT"/.compliance/gates/*.sh; do
|
|
45
|
+
[ -x "$g" ] || continue
|
|
46
|
+
n=$(basename "$g" .sh)
|
|
47
|
+
if bash "$g" >/dev/null 2>&1; then G+=("$n"); S+=("pass"); else G+=("$n"); S+=("FAIL"); fi
|
|
48
|
+
done
|
|
49
|
+
fi
|
|
50
|
+
if [ "$GATES" = 1 ] && [ -x "$ROOT/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh" ]; then
|
|
51
|
+
if bash "$ROOT/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh" >/dev/null 2>&1; then G+=("compliance"); S+=("pass"); else G+=("compliance"); S+=("FAIL"); fi
|
|
52
|
+
fi
|
|
53
|
+
if [ "$GATES" = 1 ] && [ -x "$ROOT/bin/brokk-lint.sh" ]; then
|
|
54
|
+
if bash "$ROOT/bin/brokk-lint.sh" >/dev/null 2>&1; then G+=("lint"); S+=("pass"); else G+=("lint"); S+=("FAIL"); fi
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
bad=0
|
|
58
|
+
for s in "${S[@]:-}"; do [ "$s" = FAIL ] && bad=1; done
|
|
59
|
+
if [ "$bad" = 1 ]; then
|
|
60
|
+
printf 'commit[1]{state,detail}:\n "refused","a gate failed — nothing was committed"\n'
|
|
61
|
+
ng=${#G[@]}
|
|
62
|
+
printf 'gates[%s]{gate,status}:\n' "$ng"
|
|
63
|
+
if [ "$ng" -gt 0 ]; then
|
|
64
|
+
for i in $(seq 0 $((ng - 1))); do printf ' "%s","%s"\n' "${G[$i]}" "${S[$i]}"; done
|
|
65
|
+
fi
|
|
66
|
+
printf 'help[1]{do}\n "fix the failing gate, or pass --no-gates to commit anyway (say why in the message)"\n' >&2
|
|
67
|
+
exit 1
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
# ── commit ───────────────────────────────────────────────────────────────────
|
|
71
|
+
if ! git commit -q -m "$MSG"; then
|
|
72
|
+
printf 'commit[1]{state,detail}:\n "failed","git refused the commit — see the output above"\n' >&2; exit 1
|
|
73
|
+
fi
|
|
74
|
+
printf 'commit[1]{sha,paths,message}:\n "%s",%s,"%s"\n' \
|
|
75
|
+
"$(git rev-parse --short HEAD)" "$STAGED" "$(printf '%s' "$MSG" | head -1 | cut -c1-60)"
|
|
76
|
+
ng=${#G[@]}
|
|
77
|
+
printf 'gates[%s]{gate,status}:\n' "$ng"
|
|
78
|
+
if [ "$ng" -gt 0 ]; then
|
|
79
|
+
for i in $(seq 0 $((ng - 1))); do printf ' "%s","%s"\n' "${G[$i]}" "${S[$i]}"; done
|
|
80
|
+
fi
|
|
81
|
+
printf 'next[1]{step,command}:\n "land","git-ops/sync_upstream.sh — pushes through the no-mistakes gate"\n'
|
|
82
|
+
exit 0
|