@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,183 @@
|
|
|
1
|
+
#!/usr/bin/env -S uv run
|
|
2
|
+
# /// script
|
|
3
|
+
# dependencies = ["pydantic", "python-dotenv", "pyyaml", "rich"]
|
|
4
|
+
# ///
|
|
5
|
+
"""smidja Simple SDLC — plan, build, test, review, document, committing as it goes.
|
|
6
|
+
|
|
7
|
+
Usage:
|
|
8
|
+
uv run smidja/smidja_simple_sdlc.py "<prompt or path/to/prompt.md>" [--config smidja/smidja_smidja_config/smidja.config.yaml] [--smidja-id a1b2c3d4]
|
|
9
|
+
|
|
10
|
+
Phases: engineer(request) -> planner -> git(commit_plan)
|
|
11
|
+
-> builder -> code(test) [-> builder(fix) -> code(test) ... bounded]
|
|
12
|
+
-> reviewer [-> builder(revise) -> reviewer ... bounded]
|
|
13
|
+
-> code(retest, only if a revision changed code)
|
|
14
|
+
-> git(commit_build) -> code(changes) -> documenter -> git(commit_docs)
|
|
15
|
+
|
|
16
|
+
Three commits, three work products, three authors. The plan, the code, and the
|
|
17
|
+
write-up each land in their own commit, and each commit message is the words of
|
|
18
|
+
the agent that produced it — `commit_message` on PlanOutput describes the spec,
|
|
19
|
+
on BuildOutput the code, on DocumentOutput the write-up. No agent's sentence is
|
|
20
|
+
ever reused for another agent's diff.
|
|
21
|
+
|
|
22
|
+
Testing is CODE, not an agent. `bun test` is a command, not a judgement call:
|
|
23
|
+
an agent rediscovering it every run costs a million tokens to learn what a
|
|
24
|
+
subprocess already knows. Failures travel back to the builder as an envelope,
|
|
25
|
+
so the repair loop is unchanged — only the runner became free and repeatable.
|
|
26
|
+
|
|
27
|
+
Two different questions still get asked, in order. The suite asks "does it
|
|
28
|
+
run"; the reviewer asks "is this what was asked for", against `plan.md` — and
|
|
29
|
+
neither can answer the other's. A revision that closes a review finding
|
|
30
|
+
re-enters the suite, so the tree that gets committed is the tree that was both
|
|
31
|
+
tested and approved.
|
|
32
|
+
|
|
33
|
+
The code commit lands after verification, not straight after the build: fixes
|
|
34
|
+
and revisions are part of the same work product, and red code has no business
|
|
35
|
+
on the branch. A run that fails verification therefore leaves the plan
|
|
36
|
+
committed and the working tree dirty — the spec is a real artifact either way,
|
|
37
|
+
and the unfinished code stays where the engineer can see it.
|
|
38
|
+
|
|
39
|
+
The documenter measures against the commit this run STARTED from, not against
|
|
40
|
+
`main`, because by then the run has moved `main` itself. That baseline is
|
|
41
|
+
pinned before the first commit phase and printed in the request phase.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
import argparse
|
|
45
|
+
import sys
|
|
46
|
+
|
|
47
|
+
from smidja_modules import agents, changes, gates, git_helper, quality, session, utils
|
|
48
|
+
from smidja_modules.data_types import (AgentCall, BuildOutput, ChangeCapture,
|
|
49
|
+
DocumentOutput, PhaseParams, PlanOutput,
|
|
50
|
+
ReviewOutput)
|
|
51
|
+
|
|
52
|
+
REQUIRED_AGENTS = ["planner", "builder", "reviewer", "documenter"]
|
|
53
|
+
MAX_FIX_LOOPS = 3
|
|
54
|
+
MAX_REVISION_LOOPS = 2
|
|
55
|
+
|
|
56
|
+
DOCUMENT_NOTES = ("Read diff_path in full before writing. Document only what the "
|
|
57
|
+
"diff shows, then copy the write-up into app_docs/ as your task "
|
|
58
|
+
"describes.")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def main(prompt: str, config: str = "smidja/smidja_smidja_config/smidja.config.yaml", smidja_id: str | None = None) -> int:
|
|
62
|
+
cfg = agents.load_config(config)
|
|
63
|
+
agents.validate(cfg, REQUIRED_AGENTS)
|
|
64
|
+
run = session.ensure(cfg, smidja_id)
|
|
65
|
+
baseline = git_helper.rev("HEAD") # pinned before this run commits anything
|
|
66
|
+
|
|
67
|
+
def commit(ph, envelope) -> None:
|
|
68
|
+
"""Commit what the preceding phase produced, in that agent's own words."""
|
|
69
|
+
message = envelope.commit_message or f"smidja({run.smidja_id}): {envelope.summary}"
|
|
70
|
+
ph.log(sha=git_helper.commit_all(message), message=message)
|
|
71
|
+
|
|
72
|
+
def record(ph, result) -> None:
|
|
73
|
+
"""Log a deterministic block's verdict — the same shape every smidja uses."""
|
|
74
|
+
passed = sum(1 for check in result.checks if check.passed)
|
|
75
|
+
ph.log(passed=result.passed, checks=f"{passed}/{len(result.checks)}",
|
|
76
|
+
artifacts=", ".join(result.artifacts))
|
|
77
|
+
|
|
78
|
+
with run.phase(PhaseParams(name="request", kind="engineer", owner=run.engineer,
|
|
79
|
+
description="Capture the incoming ask")) as ph:
|
|
80
|
+
ph.log(input=prompt, baseline=git_helper.short_sha(baseline))
|
|
81
|
+
|
|
82
|
+
with run.phase(PhaseParams(name="plan", kind="agent", owner="planner",
|
|
83
|
+
description="Turn the request into an implementable plan")) as ph:
|
|
84
|
+
plan = ph.call(AgentCall(output_type=PlanOutput, prompt=prompt,
|
|
85
|
+
gates=[gates.artifacts_exist, gates.files_non_empty]))
|
|
86
|
+
|
|
87
|
+
with run.phase(PhaseParams(name="commit_plan", kind="code", owner="git",
|
|
88
|
+
description="Put the spec on record before any code exists to blur it")) as ph:
|
|
89
|
+
commit(ph, plan)
|
|
90
|
+
|
|
91
|
+
with run.phase(PhaseParams(name="build", kind="agent", owner="builder",
|
|
92
|
+
description="Implement the plan exactly")) as ph:
|
|
93
|
+
build = ph.call(AgentCall(output_type=BuildOutput, prompt=prompt, previous=plan,
|
|
94
|
+
gates=[gates.diff_matches_claims]))
|
|
95
|
+
|
|
96
|
+
test = None
|
|
97
|
+
for i in range(1, MAX_FIX_LOOPS + 1):
|
|
98
|
+
with run.phase(PhaseParams(name=f"test_{i}", kind="code", owner="quality",
|
|
99
|
+
description="Run the suite — a known command, so code runs "
|
|
100
|
+
"it and no agent has to rediscover it")) as ph:
|
|
101
|
+
test = quality.run_tests(run)
|
|
102
|
+
record(ph, test)
|
|
103
|
+
|
|
104
|
+
if test.passed:
|
|
105
|
+
break
|
|
106
|
+
|
|
107
|
+
with run.phase(PhaseParams(name=f"fix_{i}", kind="agent", owner="builder", retries=1,
|
|
108
|
+
description="Repair what the suite reported, from its "
|
|
109
|
+
"verbatim output")) as ph:
|
|
110
|
+
build = ph.call(AgentCall(output_type=BuildOutput, prompt=prompt,
|
|
111
|
+
previous=quality.as_envelope(test, "tests"),
|
|
112
|
+
gates=[gates.diff_matches_claims]))
|
|
113
|
+
|
|
114
|
+
review = None
|
|
115
|
+
revised = False
|
|
116
|
+
for i in range(1, MAX_REVISION_LOOPS + 1):
|
|
117
|
+
with run.phase(PhaseParams(name=f"review_{i}", kind="agent", owner="reviewer",
|
|
118
|
+
description="Confirm the build matches the plan")) as ph:
|
|
119
|
+
review = ph.call(AgentCall(output_type=ReviewOutput, prompt=prompt, previous=build,
|
|
120
|
+
gates=[gates.artifacts_exist, gates.verdict_consistent]))
|
|
121
|
+
|
|
122
|
+
if review.approved or i == MAX_REVISION_LOOPS:
|
|
123
|
+
break
|
|
124
|
+
|
|
125
|
+
with run.phase(PhaseParams(name=f"revise_{i}", kind="agent", owner="builder", retries=1,
|
|
126
|
+
description="Close the reviewer's blocking findings")) as ph:
|
|
127
|
+
build = ph.call(AgentCall(output_type=BuildOutput, prompt=prompt, previous=review,
|
|
128
|
+
gates=[gates.diff_matches_claims]))
|
|
129
|
+
revised = True
|
|
130
|
+
|
|
131
|
+
# A revision edited code after the suite last ran, so the green light is
|
|
132
|
+
# stale. Re-run it rather than commit on a result that predates the change.
|
|
133
|
+
if revised and review is not None and review.approved:
|
|
134
|
+
with run.phase(PhaseParams(name="retest", kind="code", owner="quality",
|
|
135
|
+
description="Re-run the suite — the revision changed code "
|
|
136
|
+
"after the last green result")) as ph:
|
|
137
|
+
test = quality.run_tests(run)
|
|
138
|
+
record(ph, test)
|
|
139
|
+
|
|
140
|
+
# Red tests or a rejected review stop the chain here: the code stays
|
|
141
|
+
# uncommitted and nothing is documented, because there is nothing worth
|
|
142
|
+
# describing yet. The plan commit stands — it is a record of what was asked.
|
|
143
|
+
verified = (test is not None and test.passed
|
|
144
|
+
and review is not None and review.approved)
|
|
145
|
+
if verified:
|
|
146
|
+
with run.phase(PhaseParams(name="commit_build", kind="code", owner="git",
|
|
147
|
+
description="Land the code only now: green suite, approved review")) as ph:
|
|
148
|
+
commit(ph, build)
|
|
149
|
+
|
|
150
|
+
with run.phase(PhaseParams(name="changes", kind="code", owner="git",
|
|
151
|
+
description="Diff the whole run against its pinned baseline, for the documenter")) as ph:
|
|
152
|
+
changeset = changes.capture(run, ChangeCapture(base=baseline))
|
|
153
|
+
ph.log(base=f"{changeset.base.label} @ {changeset.base.commit[:7]}",
|
|
154
|
+
reason=changeset.base.reason,
|
|
155
|
+
files=len(changeset.files) + len(changeset.untracked),
|
|
156
|
+
lines=f"+{changeset.insertions} -{changeset.deletions}",
|
|
157
|
+
diff=changeset.diff_path)
|
|
158
|
+
if changeset.empty:
|
|
159
|
+
raise RuntimeError(
|
|
160
|
+
f"nothing changed since {changeset.base.label} "
|
|
161
|
+
f"({changeset.base.reason}) — there is nothing to document.")
|
|
162
|
+
|
|
163
|
+
with run.phase(PhaseParams(name="document", kind="agent", owner="documenter", retries=1,
|
|
164
|
+
description="Write up the completed change")) as ph:
|
|
165
|
+
document = ph.call(AgentCall(output_type=DocumentOutput, prompt=prompt,
|
|
166
|
+
previous=changes.as_envelope(changeset, DOCUMENT_NOTES),
|
|
167
|
+
gates=[gates.artifacts_exist, gates.files_non_empty]))
|
|
168
|
+
|
|
169
|
+
with run.phase(PhaseParams(name="commit_docs", kind="code", owner="git",
|
|
170
|
+
description="Ship the write-up in its own commit, beside the code it describes")) as ph:
|
|
171
|
+
commit(ph, document)
|
|
172
|
+
|
|
173
|
+
return run.finish(accepted=verified,
|
|
174
|
+
reason="the suite or the review never came back clean")
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
if __name__ == "__main__":
|
|
178
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
179
|
+
parser.add_argument("prompt", help="inline text or a path to a prompt file")
|
|
180
|
+
parser.add_argument("--config", default="smidja/smidja_smidja_config/smidja.config.yaml")
|
|
181
|
+
parser.add_argument("--smidja-id", default=None, help="join or pin an existing session")
|
|
182
|
+
args = parser.parse_args()
|
|
183
|
+
sys.exit(main(utils.resolve_prompt(args.prompt), args.config, args.smidja_id))
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# smidja.config.yaml — the smidja's agent roster. One agent, one prompt, one purpose.
|
|
2
|
+
# v1 runs the Pi coding agent only; coding_agent: claude_code arrives in v2.
|
|
3
|
+
defaults:
|
|
4
|
+
coding_agent: pi
|
|
5
|
+
model: google/gemini-3.6-flash # provider/id — a bare pattern is ambiguous across providers
|
|
6
|
+
thinking: medium # off | minimal | low | medium | high | xhigh | max
|
|
7
|
+
harness_engineering: [] # pi extensions loaded into the harness (-e)
|
|
8
|
+
# Roster-wide allowlist; any agent may override with its own list.
|
|
9
|
+
# NOTE: --tools filters extension and custom tools too, not just builtins. An agent
|
|
10
|
+
# whose harness_engineering extension registers a tool MUST name that tool in its own
|
|
11
|
+
# tools list — otherwise the extension loads and its tool is silently filtered out.
|
|
12
|
+
tools:
|
|
13
|
+
- read # read file contents
|
|
14
|
+
- bash # execute bash commands
|
|
15
|
+
- edit # find/replace edits
|
|
16
|
+
- write # create/overwrite files
|
|
17
|
+
- grep # search file contents (pi default: OFF)
|
|
18
|
+
- find # find files by glob (pi default: OFF)
|
|
19
|
+
- ls # list directories (pi default: OFF)
|
|
20
|
+
# Off-limits to every agent that does not name them in its own `writes`.
|
|
21
|
+
# `tools` alone cannot protect these: bash runs `git checkout`, and write
|
|
22
|
+
# reaches any path. An agent must not be able to edit the machinery that
|
|
23
|
+
# decides whether its own work passed. Enforced in smidja_modules/permissions.py.
|
|
24
|
+
#
|
|
25
|
+
# `writes:` per agent says what it may change IN THE REPO. It never restricts
|
|
26
|
+
# the session runtime under data_dir — context_handoff/, envelopes, prompts,
|
|
27
|
+
# raw output. Every agent can always write its own report; `writes: []` means
|
|
28
|
+
# read-only with respect to the repo, not mute.
|
|
29
|
+
protected_files:
|
|
30
|
+
- smidja/smidja_modules/
|
|
31
|
+
- smidja/smidja_smidja_config/
|
|
32
|
+
- smidja/smidja_*.py
|
|
33
|
+
data_dir: smidja/smidja_data # runtime home: {data_dir}/sessions/{smidja_id}/{agent_name}/
|
|
34
|
+
|
|
35
|
+
observability:
|
|
36
|
+
db: smidja/smidja_data/smidja.db # tracer writes here directly; the UI polls it
|
|
37
|
+
poll_ms: 500 # visualizer live-poll cadence
|
|
38
|
+
|
|
39
|
+
agents:
|
|
40
|
+
- name: planner
|
|
41
|
+
model: fireworks/accounts/fireworks/models/kimi-k3
|
|
42
|
+
thinking: high
|
|
43
|
+
color: "#a78bfa" # optional hex — the agent's lane color in the visualizer
|
|
44
|
+
purpose: Turn a request into a plan the builder can implement without asking questions.
|
|
45
|
+
prompt_engineering:
|
|
46
|
+
system: smidja/smidja_data/prompt_engineering/planner/system.md
|
|
47
|
+
user: smidja/smidja_data/prompt_engineering/planner/user.md
|
|
48
|
+
harness_engineering:
|
|
49
|
+
- smidja/smidja_data/harness_engineering/subagents.ts # registers the four subagent_* tools below
|
|
50
|
+
writes: # the plan is the only thing it may leave in the repo
|
|
51
|
+
- specs/
|
|
52
|
+
tools: # full recon + write for plan.md; no edit — the planner never touches repo files
|
|
53
|
+
- read
|
|
54
|
+
- grep
|
|
55
|
+
- find
|
|
56
|
+
- ls
|
|
57
|
+
- bash
|
|
58
|
+
- write
|
|
59
|
+
- subagent_create # extension tools MUST be named here or they are filtered out
|
|
60
|
+
- subagent_continue
|
|
61
|
+
- subagent_list
|
|
62
|
+
- subagent_remove
|
|
63
|
+
|
|
64
|
+
- name: builder
|
|
65
|
+
color: "#22d3ee"
|
|
66
|
+
purpose: Implement the plan exactly; report every changed file in the envelope.
|
|
67
|
+
prompt_engineering:
|
|
68
|
+
system: smidja/smidja_data/prompt_engineering/builder/system.md
|
|
69
|
+
user: smidja/smidja_data/prompt_engineering/builder/user.md
|
|
70
|
+
# No `writes` key: unrestricted, and the only agent that is. It still cannot
|
|
71
|
+
# touch defaults.protected_files — the builder does not get to edit its own grader.
|
|
72
|
+
tools: # the only agent that mutates the repo — everything on
|
|
73
|
+
- read
|
|
74
|
+
- grep
|
|
75
|
+
- find
|
|
76
|
+
- ls
|
|
77
|
+
- bash
|
|
78
|
+
- edit
|
|
79
|
+
- write
|
|
80
|
+
|
|
81
|
+
- name: scout
|
|
82
|
+
color: "#fbbf24"
|
|
83
|
+
purpose: Find and report where things live; change nothing.
|
|
84
|
+
prompt_engineering:
|
|
85
|
+
system: smidja/smidja_data/prompt_engineering/scout/system.md
|
|
86
|
+
user: smidja/smidja_data/prompt_engineering/scout/user.md
|
|
87
|
+
harness_engineering:
|
|
88
|
+
- smidja/smidja_data/harness_engineering/subagents.ts # registers the four subagent_* tools below
|
|
89
|
+
writes: [] # read-only, and now actually read-only: its findings
|
|
90
|
+
# go to context_handoff/, which is runtime, not the repo
|
|
91
|
+
tools: # search-heavy recon; write only so scout_findings.md lands without a bash heredoc
|
|
92
|
+
- read
|
|
93
|
+
- grep
|
|
94
|
+
- find
|
|
95
|
+
- ls
|
|
96
|
+
- bash
|
|
97
|
+
- write
|
|
98
|
+
- subagent_create # extension tools MUST be named here or they are filtered out
|
|
99
|
+
- subagent_continue
|
|
100
|
+
- subagent_list
|
|
101
|
+
- subagent_remove
|
|
102
|
+
|
|
103
|
+
# No tester agent: running the suite is a known command, so it is a kind="code"
|
|
104
|
+
# phase over smidja_modules/quality.py. See SKILL.md hard rule 8.
|
|
105
|
+
|
|
106
|
+
- name: reviewer
|
|
107
|
+
model: openai/gpt-5.6-terra
|
|
108
|
+
thinking: high
|
|
109
|
+
color: "#fb7185"
|
|
110
|
+
purpose: Confirm that what was built is what was asked for; change nothing.
|
|
111
|
+
prompt_engineering:
|
|
112
|
+
system: smidja/smidja_data/prompt_engineering/reviewer/system.md
|
|
113
|
+
user: smidja/smidja_data/prompt_engineering/reviewer/user.md
|
|
114
|
+
writes: [] # a reviewer that cannot fix cannot quietly fix — the
|
|
115
|
+
# claim the tool list only implied, now enforced
|
|
116
|
+
tools: # full read surface; write only for review.md, no edit
|
|
117
|
+
- read
|
|
118
|
+
- grep
|
|
119
|
+
- find
|
|
120
|
+
- ls
|
|
121
|
+
- bash
|
|
122
|
+
- write
|
|
123
|
+
|
|
124
|
+
- name: documenter
|
|
125
|
+
model: openai/gpt-5.6-luna
|
|
126
|
+
color: "#e879f9"
|
|
127
|
+
purpose: Write up the change that was just made, from the diff; document only.
|
|
128
|
+
prompt_engineering:
|
|
129
|
+
system: smidja/smidja_data/prompt_engineering/documenter/system.md
|
|
130
|
+
user: smidja/smidja_data/prompt_engineering/documenter/user.md
|
|
131
|
+
writes: # documentation only — "document only" is a rule now,
|
|
132
|
+
- app_docs/ # not a line in a prompt the model may drift from.
|
|
133
|
+
- docs/ # Markdown anywhere, because docs live next to the
|
|
134
|
+
- "**/*.md" # code they describe as often as in a docs folder.
|
|
135
|
+
- "*.md"
|
|
136
|
+
tools: # reads the diff and the code; writes/edits documentation only
|
|
137
|
+
- read
|
|
138
|
+
- grep
|
|
139
|
+
- find
|
|
140
|
+
- ls
|
|
141
|
+
- bash
|
|
142
|
+
- write
|
|
143
|
+
- edit
|
package/bin/app-build.sh
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# app-build — build the in-tree apps (plan 35).
|
|
3
|
+
#
|
|
4
|
+
# apps/ ships as source, so the bundle each surface serves must be built from it
|
|
5
|
+
# before the package is packed. This is the one door that does that, so a build
|
|
6
|
+
# cannot be half-done in one place and forgotten in another (the fault class of
|
|
7
|
+
# 2026-09-18: an artefact published without the file it needed).
|
|
8
|
+
#
|
|
9
|
+
# bin/app-build.sh [surface …] default: every app that carries a build script
|
|
10
|
+
#
|
|
11
|
+
# Skips an app that has no package.json (smidja's engine is Python; the smithy
|
|
12
|
+
# arrives as @zerwiz/smidja-factory) and an app with no build script, naming it.
|
|
13
|
+
set -uo pipefail
|
|
14
|
+
|
|
15
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
16
|
+
want=("$@")
|
|
17
|
+
[ ${#want[@]} -eq 0 ] && want=(hlidskjalf odrerir sessrumnir)
|
|
18
|
+
|
|
19
|
+
built=0 skipped=0 failed=0
|
|
20
|
+
for s in "${want[@]}"; do
|
|
21
|
+
d="$ROOT/apps/$s"
|
|
22
|
+
if [ ! -f "$d/package.json" ]; then
|
|
23
|
+
printf 'app-build[1]{%s}:\n "skipped — no package.json (not an npm app)"\n' "$s"; skipped=$((skipped+1)); continue
|
|
24
|
+
fi
|
|
25
|
+
if ! grep -q '"build"' "$d/package.json"; then
|
|
26
|
+
printf 'app-build[1]{%s}:\n "skipped — no build script"\n' "$s"; skipped=$((skipped+1)); continue
|
|
27
|
+
fi
|
|
28
|
+
printf 'app-build[1]{%s}:\n "building…"\n' "$s"
|
|
29
|
+
if ( cd "$d" && { [ -d node_modules ] || npm install --no-audit --no-fund >/dev/null 2>&1; } && npm run build >/dev/null 2>&1 ); then
|
|
30
|
+
printf 'app-build[1]{%s}:\n "built — dist/"\n' "$s"; built=$((built+1))
|
|
31
|
+
else
|
|
32
|
+
printf 'app-build[1]{%s}:\n "FAILED — see its output above"\n' "$s"; failed=$((failed+1))
|
|
33
|
+
fi
|
|
34
|
+
done
|
|
35
|
+
printf 'app-build[1]{built,skipped,failed}:\n "%d","%d","%d"\n' "$built" "$skipped" "$failed"
|
|
36
|
+
[ "$failed" -eq 0 ] || exit 1
|
package/bin/electron-lib.sh
CHANGED
|
@@ -32,3 +32,28 @@ electron_remedy() {
|
|
|
32
32
|
printf ' npm install-scripts approve electron && npm rebuild electron\n'
|
|
33
33
|
printf 'yonder: bin/ymir-install.sh --no-desktop if the web surfaces are enough'
|
|
34
34
|
}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
electron_fetch_runtime() { # <app-dir> — place the runtime without npm's permission
|
|
38
|
+
# npm gates package install scripts by default, so Electron's postinstall never
|
|
39
|
+
# runs and the desktop windows cannot open — a fresh install of the whole platform
|
|
40
|
+
# with no windows, and no error a user could act on. `npm rebuild` reports success
|
|
41
|
+
# and changes nothing; `npm install-scripts approve` does not exist in every npm.
|
|
42
|
+
# What works, everywhere, is what the postinstall itself does: fetch the release
|
|
43
|
+
# and place it. Version-exact, npm-independent, and proven on this machine.
|
|
44
|
+
local dir="${1-}" app v url tmp
|
|
45
|
+
[ -d "$dir" ] || return 1
|
|
46
|
+
app="$dir/node_modules/electron"
|
|
47
|
+
[ -f "$app/path.txt" ] && [ -x "$app/dist/electron" ] && return 0
|
|
48
|
+
v="$(sed -n 's/.*"electron"[[:space:]]*:[[:space:]]*"[^0-9]*\([0-9][0-9.]*\).*/\1/p' "$dir/package.json" 2>/dev/null | head -1)"
|
|
49
|
+
[ -n "$v" ] || return 1
|
|
50
|
+
command -v curl >/dev/null 2>&1 || return 1
|
|
51
|
+
command -v unzip >/dev/null 2>&1 || return 1
|
|
52
|
+
tmp="$(mktemp -d)" || return 1
|
|
53
|
+
url="https://github.com/electron/electron/releases/download/v${v}/electron-v${v}-linux-x64.zip"
|
|
54
|
+
if curl -fsSL --max-time 300 -o "$tmp/e.zip" "$url"; then
|
|
55
|
+
mkdir -p "$app/dist" && unzip -q -o "$tmp/e.zip" -d "$app/dist" && printf 'electron' >"$app/path.txt"
|
|
56
|
+
fi
|
|
57
|
+
rm -rf "$tmp"
|
|
58
|
+
[ -f "$app/path.txt" ] && [ -x "$app/dist/electron" ] && { "$app/dist/electron" --version >/dev/null 2>&1; }
|
|
59
|
+
}
|
package/bin/sessrumnir.sh
CHANGED
|
@@ -50,7 +50,7 @@ repair_runtime() {
|
|
|
50
50
|
[ -f "$dir/node_modules/electron/path.txt" ] && return 0
|
|
51
51
|
command -v npm >/dev/null 2>&1 || return 1
|
|
52
52
|
echo "Sessrúmnir — its Electron runtime is absent; fetching it (this is the gated postinstall)…" >&2
|
|
53
|
-
( cd "$dir" && npm rebuild electron >/dev/null 2>&1 ) && [ -f "$dir/node_modules/electron/path.txt" ]
|
|
53
|
+
( cd "$dir" && npm rebuild electron >/dev/null 2>&1 ) || { [ -r "$(dirname "$0")/electron-lib.sh" ] && . "$(dirname "$0")/electron-lib.sh"; electron_fetch_runtime "$dir"; } && [ -f "$dir/node_modules/electron/path.txt" ]
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
case "${1-}" in -v|-V|--version) printf '%s\n' "$VERSION"; exit 0 ;; -h|--help|"") sed -n '2,12p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;; esac
|
package/bin/ymir-install.sh
CHANGED
|
@@ -302,6 +302,13 @@ step_apps() {
|
|
|
302
302
|
add apps SKIP "a package install — the surfaces are dependencies (npm i -g @zerwiz/ymir)"
|
|
303
303
|
return 0 ;;
|
|
304
304
|
esac
|
|
305
|
+
# One repo (plan 35): when the surfaces ship IN this tree there is nothing to
|
|
306
|
+
# clone — the resolver's first shape (`<root>/apps/<surface>`) is already true.
|
|
307
|
+
if [ -f "$ROOT/apps/hlidskjalf/package.json" ] && [ -f "$ROOT/apps/odrerir/package.json" ] \
|
|
308
|
+
&& [ -f "$ROOT/apps/sessrumnir/package.json" ]; then
|
|
309
|
+
add apps PASS "in-tree — apps/ ships with the package (plan 35)"
|
|
310
|
+
return 0
|
|
311
|
+
fi
|
|
305
312
|
local reg="$HOARD/identity/projects.yaml"
|
|
306
313
|
if [ ! -r "$reg" ]; then
|
|
307
314
|
# The fork path: no private hoard — fall back to the PUBLIC app map so a
|
package/install.sh
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# install.sh — the one-liner. Ymir into the operator's OWN prefix, with PATH set,
|
|
3
|
+
# so `ymir` works in the shell they are standing in and every shell after it.
|
|
4
|
+
#
|
|
5
|
+
# curl -fsSL https://raw.githubusercontent.com/zerwiz/ymir/main/install.sh | bash
|
|
6
|
+
#
|
|
7
|
+
# Why this exists, and why `npm install -g @zerwiz/ymir` alone is not enough: npm
|
|
8
|
+
# puts a global command in its global prefix's bin directory, and on an ordinary
|
|
9
|
+
# machine that directory is not on PATH. The command is installed and the shell
|
|
10
|
+
# cannot see it — the most common "it does not work" in the whole Node ecosystem.
|
|
11
|
+
# This script removes that class of failure:
|
|
12
|
+
#
|
|
13
|
+
# · a prefix the user owns (no sudo, no EACCES on /usr/lib/node_modules)
|
|
14
|
+
# · the export written into the shell's rc, so it survives the session
|
|
15
|
+
# · and then it proves the door: `ymir --version`
|
|
16
|
+
#
|
|
17
|
+
# Env: YMIR_NPM_PREFIX (default ~/.npm-global), YMIR_PKG (default @zerwiz/ymir).
|
|
18
|
+
set -eu
|
|
19
|
+
|
|
20
|
+
PREFIX="${YMIR_NPM_PREFIX:-$HOME/.npm-global}"
|
|
21
|
+
PKG="${YMIR_PKG:-@zerwiz/ymir}"
|
|
22
|
+
|
|
23
|
+
say() { printf '%s\n' "$*" >&2; }
|
|
24
|
+
|
|
25
|
+
command -v npm >/dev/null 2>&1 || {
|
|
26
|
+
say "error: npm is not installed, and this script does not install Node."
|
|
27
|
+
say "help: install Node 20+ (https://nodejs.org), then run this again."
|
|
28
|
+
exit 1
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# 1. a prefix the user owns — every later install is painless
|
|
32
|
+
mkdir -p "$PREFIX/bin"
|
|
33
|
+
npm config set prefix "$PREFIX" >/dev/null 2>&1 || true
|
|
34
|
+
export PATH="$PREFIX/bin:$PATH"
|
|
35
|
+
|
|
36
|
+
# 2. the PATH FIRST — so a failed install still leaves the command reachable, and
|
|
37
|
+
# the user can simply run it again. (It used to be written after the install,
|
|
38
|
+
# and `"${@:-}"` handed npm an EMPTY argument, so the install failed and the
|
|
39
|
+
# script exited before any shell file was touched: "it never writes to .bashrc".)
|
|
40
|
+
rc_written=""
|
|
41
|
+
for rc in "$HOME/.bashrc" "$HOME/.bash_profile" "$HOME/.zshrc" "$HOME/.profile"; do
|
|
42
|
+
[ -e "$rc" ] || continue
|
|
43
|
+
if ! grep -q "$PREFIX/bin" "$rc" 2>/dev/null; then
|
|
44
|
+
printf '\n# Ymir — the npm global bin, so `ymir` is found\ncase ":$PATH:" in *":%s/bin:"*) ;; *) export PATH="%s/bin:$PATH" ;; esac\n' "$PREFIX" "$PREFIX" >>"$rc"
|
|
45
|
+
rc_written="$rc_written ${rc##*/}"
|
|
46
|
+
fi
|
|
47
|
+
done
|
|
48
|
+
export PATH="$PREFIX/bin:$PATH"
|
|
49
|
+
|
|
50
|
+
# 3. the package
|
|
51
|
+
say "installing $PKG into $PREFIX …"
|
|
52
|
+
# `@latest` AND --prefer-online: a stale cached `latest` is how an install
|
|
53
|
+
# succeeds while changing nothing, and the user is left on an old build.
|
|
54
|
+
install_args=(-g "$PKG@latest" --prefer-online)
|
|
55
|
+
[ "$#" -gt 0 ] && install_args+=("$@")
|
|
56
|
+
if ! npm install "${install_args[@]}"; then
|
|
57
|
+
say "error: the install failed — see npm's output above."
|
|
58
|
+
say "note: your PATH is already set, so a second run picks up where this left off."
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
# 4. the FIRST SETUP — the whole platform, not just a command
|
|
64
|
+
# pi.dev and opencode finish here by running their own onboarding; an installer
|
|
65
|
+
# that stops at a binary leaves the user with a tool that does nothing yet, and
|
|
66
|
+
# with eight things still to go wrong. YMIR_SKIP_SETUP=1 installs the command only.
|
|
67
|
+
if [ "${YMIR_SKIP_SETUP:-0}" != 1 ]; then
|
|
68
|
+
say ""
|
|
69
|
+
say "the first setup — the plan, then the work. This takes a few minutes."
|
|
70
|
+
if ! ymir install --yes; then
|
|
71
|
+
say "warn: the setup did not finish cleanly — nothing is lost; run \`ymir\` again to continue."
|
|
72
|
+
fi
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# 5. prove the doors rather than promise them
|
|
76
|
+
if command -v ymir >/dev/null 2>&1; then
|
|
77
|
+
say ""
|
|
78
|
+
say "ymir $(ymir --version 2>/dev/null || printf '?') — installed."
|
|
79
|
+
say "what stands:"
|
|
80
|
+
ymir validate --quiet 2>/dev/null | grep -E "^ \"" | head -12 | sed 's/^/ /' >&2 || true
|
|
81
|
+
say "next: ymir raise # lift the hall (SPA :3888, the board :8437, the windows)"
|
|
82
|
+
say " ymir --help # every door"
|
|
83
|
+
else
|
|
84
|
+
say "error: the package is installed but \`ymir\` is still not on PATH."
|
|
85
|
+
say "help: export PATH=\"$PREFIX/bin:\$PATH\" (then open a new shell)"
|
|
86
|
+
exit 1
|
|
87
|
+
fi
|
|
88
|
+
[ -n "$rc_written" ] && say "PATH written into:$rc_written — open a new shell for other terminals."
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zerwiz/ymir",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.35",
|
|
4
4
|
"description": "Ymir — the single-tenant agent operating system. One command: curl -fsSL https://raw.githubusercontent.com/zerwiz/ymir/main/install.sh | bash · or: npx @zerwiz/ymir · or: npm i -g @zerwiz/ymir (if `ymir` is not found, the README has the three-line PATH cure)",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/zerwiz/ymir",
|
|
@@ -51,7 +51,13 @@
|
|
|
51
51
|
".cursor/",
|
|
52
52
|
"assets/",
|
|
53
53
|
"data/",
|
|
54
|
-
"deploy/"
|
|
54
|
+
"deploy/",
|
|
55
|
+
"apps/",
|
|
56
|
+
"install.sh",
|
|
57
|
+
"!apps/*/node_modules/",
|
|
58
|
+
"!apps/*/node_modules/**",
|
|
59
|
+
"!apps/*/.git/**",
|
|
60
|
+
"!apps/*/fork/**"
|
|
55
61
|
],
|
|
56
62
|
"engines": {
|
|
57
63
|
"node": ">=20"
|
|
@@ -65,12 +71,15 @@
|
|
|
65
71
|
},
|
|
66
72
|
"scripts": {
|
|
67
73
|
"test": "bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh",
|
|
68
|
-
"compliance": "bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh"
|
|
74
|
+
"compliance": "bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh",
|
|
75
|
+
"prepack": "bin/app-build.sh"
|
|
69
76
|
},
|
|
70
77
|
"dependencies": {
|
|
71
|
-
"@zerwiz/hlidskjalf": "^0.1.1",
|
|
72
|
-
"@zerwiz/odrerir": "^0.1.1",
|
|
73
|
-
"@zerwiz/sessrumnir": "^0.1.10",
|
|
74
78
|
"@zerwiz/smidja-factory": "^0.1.3"
|
|
75
|
-
}
|
|
79
|
+
},
|
|
80
|
+
"workspaces": [
|
|
81
|
+
"apps/hlidskjalf",
|
|
82
|
+
"apps/odrerir",
|
|
83
|
+
"apps/sessrumnir"
|
|
84
|
+
]
|
|
76
85
|
}
|
package/scripts/electron.sh
CHANGED
|
@@ -191,10 +191,14 @@ ensure_electron_binary() {
|
|
|
191
191
|
repair_electron() { # <app-dir>
|
|
192
192
|
local dir="$1"
|
|
193
193
|
command -v npm >/dev/null 2>&1 || return 1
|
|
194
|
-
|
|
195
|
-
|
|
194
|
+
# npm gates the rebuild as well as the postinstall: approve first, or the mend
|
|
195
|
+
# silently changes nothing and the window still never opens.
|
|
196
|
+
( cd "$dir" && { npm install-scripts approve electron >/dev/null 2>&1 || true; npm rebuild electron >/dev/null 2>&1; } )
|
|
196
197
|
}
|
|
197
198
|
if ! ensure_electron_binary; then
|
|
199
|
+
# npm-independent: fetch the release as the postinstall would (bin/electron-lib.sh)
|
|
200
|
+
[ -r "$ROOT/bin/electron-lib.sh" ] && { . "$ROOT/bin/electron-lib.sh"; }
|
|
201
|
+
command -v electron_fetch_runtime >/dev/null 2>&1 && electron_fetch_runtime "$APP" || true
|
|
198
202
|
# Try the mending ourselves before telling the user to do it by hand: npm's
|
|
199
203
|
# gating is the cause, and the cure is one command we can run.
|
|
200
204
|
echo "the Electron runtime is partial — mending it (npm rebuild electron)…" >&2
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[]
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# config/agents.<hostname>.yaml — a per-machine OVERLAY for the personal setup.
|
|
2
|
-
#
|
|
3
|
-
# Copies next to config/agents.yaml and is deep-merged over it when the
|
|
4
|
-
# hostname matches (short form, before the first dot). Override the hostname
|
|
5
|
-
# with YMIR_AGENTS_MACHINE. Use it so each machine runs its own model/harness
|
|
6
|
-
# combination from one repo. Private (gitignored); this .example is the shape.
|
|
7
|
-
|
|
8
|
-
# Example: this machine's hnoss runs a bigger local model, and its default
|
|
9
|
-
# fallback differs.
|
|
10
|
-
# agents:
|
|
11
|
-
# hnoss: { model: "llama.cpp/qwen3.6-35b-q4_k_s" }
|
|
12
|
-
# brokk: { model: opencode-go/deepseek-v4.1-flash }
|
|
13
|
-
# providers:
|
|
14
|
-
# llama.cpp:
|
|
15
|
-
# base_url: "http://127.0.0.1:8080/v1"
|
|
16
|
-
# default_model: opencode-go/deepseek-v4.1-flash
|
package/.pi/mcp.json
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
fm-branch-eligible-owner-v1
|
|
2
|
-
1760629
|
|
3
|
-
linux-starttime=13963152 cmdline-hex=Usage:od[--port<n>][--host<addr>][--no-open]StartthelocaldaemonandopenthewebUI.odtoolslive-artifacts<create|list|update|refresh>[options]Manageliveartifactsthroughdaemonwrappercommands.odtoolsdirections[--id<id>|--label<label>][--json]Listthebuilt-indesigndirections,orprintonedirection'sfullpalette/fontstacks/posturespecforbindinginto:root.odartifactscreate--name<path>--input<file>[--project<id-or-name>]Createanormalprojectartifactthroughthelocaldaemon.odtoolsconnectors<list|execute|github-design-context>[options]Discoverandexecuteconfiguredconnectors.odtoolsdesign-systemsread--path<manifest-declared-path>Readactivedesign-systempull-layerfilesthroughdaemonwrappercommands.odmcplive-artifactsStarttheMCPserverexposinglive-artifactandconnectortools.odresearchsearch--query<text>[--max-sources5][--daemon-url<url>]Runagent-callableTavilyresearchthroughthelocaldaemon.odplugin<list|info|install|uninstall|apply|doctor|replay|trust>[args]Discover,install,andapplypluginsthroughthelocaldaemon.odpluginpublish-repo<folder>Create/updatetheauthor'sGitHubrepoforalocalpluginfolder.odpluginopen-design-pr<folder>Pushacommunity-catalogbranchandopentheOpenDesignPRform.odautomation<list|get|create|update|run|runs|pause|resume|delete>[args]DrivetheAutomationssurfaceheadlessly.SamestoreastheUI'sAutomationstab,soanexternalagent(hermes,openclaw,...)canschedule,trigger,orharvestresultsfromaroutinewithoutopeningthewebUI.odmessage-center<list|read|read-all>[args]Readandacknowledgemessage-centerinboxitemsthroughthesamedaemonendpointsthebellUIuses.odamr<login|status>[args]StartVelabrowsersign-inorinspectthecurrentVelaaccountthroughthelocalOpenDesigndaemon.odmemorytree<list|view|edit|move>[args]Inspectandeditthememorytreethatisinjectedintoagentprompts.odshare<open-design|url>[options]Buildlocalizedsocial-sharetargetsfortheOpenDesignrepooradeployedprojectURL.Use--jsonforscriptedintegrations.odui<list|show|respond|revoke|prefill>[args]ReadandanswerGenUIsurfaces(form/choice/confirmation/oauth-prompt)headlessly.odchatnew--project<id>[--seed-from<cid>][--fork-after<mid>][--title"<t>"][--json]CreateaSideChat:anewconversationthatinheritsanotherconversation'scontextbycopyingitsmessages(--seed-from),optionallystoppingatonemessage(--fork-after).Mirrorsthewebchatforkaction.oddiagnosticsexport[<path>][--json]Bundledaemon/web/desktoplogs,machineinfo,andrecentcrashreportsintoazipforsupporttickets.SameoutputasSettings→About→Exportdiagnostics.odexport<file>--project<id>--format<html|pdf|image|pptx>[--out<path>]ProgrammaticallyexportanHTML/deckartifacttoHTML,PDF,image,orPPTX(nomodel/agentcalls).MirrorsthewebDownloadmenu;rasterizationusesthedesktopruntime'sbundledChromium.odlint<file.html|->[--fail-on<p0|p1|p2|none>][--json]Runthedaemon'santi-slopartifactlinteragainstanHTMLfileorstdin(nomodel/agentcalls;headless-safe).Exits1whenfindingsmeetthe--fail-onthreshold,soitcangatecron/CIrenderpipelines."$OD_NODE_BIN""$OD_BIN"tools...Recommendedagent-runtimeform;avoidsrelyingonuserPATHforodornode.odmediagenerate--surface<image|video|audio>--model<id>[opts]Generateamediaartifactandwriteitintotheactiveproject.Designedtobeinvokedbyacodeagent-picksupOD_DAEMON_URLandOD_PROJECT_IDfromtheenvthatthedaemoninjectedonspawn.odmediascaffold--composition-dir.hyperframes-cache/<id>CreateadeterministicHyperFramescompositionwithoutnpxorglobalskillinstallation,beforedispatchingitthroughmediagenerate.odmcp[--daemon-url<url>]RunastdioMCPserverthatproxiesprojecttoolcallstoarunningOpenDesigndaemon.Wireitintoacodingagent(ClaudeCode,Cursor,VSCode,Zed,Windsurf)inanotherrepotopullfilesfromalocalOpenDesignprojectandcreateproject-scopedartifactswithoutexportingazip.Options:--port<n>Porttolistenon(default:7456,env:OD_PORT).--host<addr>Interfaceaddresstobindto(default:127.0.0.1,env:OD_BIND_HOST).SettoaspecificIP(e.g.aTailscaleaddress)torestrictaccesstothatinterfaceonly.--no-openDonotopenthebrowserafterstart.Whatthedaemondoes:*scansPATHforinstalledcode-agentCLIs(claude,codex,devin,opencode,cursor-agent,...)*servesthechatUIathttp://<host>:<port>*proxiesmessages(text+images)totheselectedagentviachild-processspawn*exposesproject-scopedmediascaffold/generateAPIs—theunifiedpaththattheagentcallsvia`odmediascaffold`and`odmediagenerate`.
|
|
4
|
-
1
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"/home/zerwiz/.pi/agent/sessions/--home-zerwiz-firstmate--/2026-09-04T13-43-14-520Z_01a06ca8-c358-7166-8de7-f2dced4fc993.jsonl","index":428}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/home/zerwiz/firstmate/state/branch-session/2026-09-04T16-49-38-671Z_01a06d53-6b6f-7619-930d-e6dfd9a4a29e.jsonl
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
5
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3
|