xtrm-tools 0.7.3 → 0.7.7
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/.xtrm/config/hooks.json +3 -0
- package/.xtrm/config/pi/extensions/xtrm-ui/format.ts +189 -0
- package/.xtrm/config/pi/extensions/xtrm-ui/index.ts +76 -17
- package/.xtrm/config/pi/extensions/xtrm-ui/package.json +16 -5
- package/.xtrm/ext-src/custom-footer/.pi/structured-returns/83051fe4-97da-4e2c-bdaa-343b32f4e714.combined.log +7 -0
- package/.xtrm/ext-src/custom-footer/.pi/structured-returns/83051fe4-97da-4e2c-bdaa-343b32f4e714.stderr.log +0 -0
- package/.xtrm/ext-src/custom-footer/.pi/structured-returns/83051fe4-97da-4e2c-bdaa-343b32f4e714.stdout.log +7 -0
- package/.xtrm/ext-src/xtrm-ui/format.ts +282 -0
- package/.xtrm/{extensions → ext-src}/xtrm-ui/index.ts +76 -17
- package/.xtrm/ext-src/xtrm-ui/package.json +21 -0
- package/.xtrm/hooks/specialists/specialists-complete.mjs +70 -0
- package/.xtrm/hooks/specialists/specialists-session-start.mjs +105 -0
- package/.xtrm/registry.json +397 -409
- package/.xtrm/skills/default/README.txt +31 -0
- package/.xtrm/skills/default/clean-code/SKILL.md +201 -0
- package/.xtrm/skills/default/creating-service-skills/SKILL.md +433 -0
- package/.xtrm/skills/default/creating-service-skills/references/script_quality_standards.md +425 -0
- package/.xtrm/skills/default/creating-service-skills/references/service_skill_system_guide.md +278 -0
- package/.xtrm/skills/default/creating-service-skills/scripts/bootstrap.py +326 -0
- package/.xtrm/skills/default/creating-service-skills/scripts/deep_dive.py +304 -0
- package/.xtrm/skills/default/creating-service-skills/scripts/scaffolder.py +482 -0
- package/.xtrm/skills/default/deepwiki/SKILL.md +50 -0
- package/.xtrm/skills/default/delegating/SKILL.md +196 -0
- package/.xtrm/skills/default/delegating/config.yaml +210 -0
- package/.xtrm/skills/default/delegating/references/orchestration-protocols.md +41 -0
- package/.xtrm/skills/default/documenting/CHANGELOG.md +23 -0
- package/.xtrm/skills/default/documenting/README.md +148 -0
- package/.xtrm/skills/default/documenting/SKILL.md +113 -0
- package/.xtrm/skills/default/documenting/examples/example_pattern.md +70 -0
- package/.xtrm/skills/default/documenting/examples/example_reference.md +70 -0
- package/.xtrm/skills/default/documenting/examples/example_ssot_analytics.md +64 -0
- package/.xtrm/skills/default/documenting/examples/example_workflow.md +141 -0
- package/.xtrm/skills/default/documenting/references/changelog-format.md +97 -0
- package/.xtrm/skills/default/documenting/references/metadata-schema.md +136 -0
- package/.xtrm/skills/default/documenting/references/taxonomy.md +81 -0
- package/.xtrm/skills/default/documenting/references/versioning-rules.md +78 -0
- package/.xtrm/skills/default/documenting/scripts/bump_version.sh +60 -0
- package/.xtrm/skills/default/documenting/scripts/changelog/__init__.py +0 -0
- package/.xtrm/skills/default/documenting/scripts/changelog/add_entry.py +216 -0
- package/.xtrm/skills/default/documenting/scripts/changelog/bump_release.py +117 -0
- package/.xtrm/skills/default/documenting/scripts/changelog/init_changelog.py +54 -0
- package/.xtrm/skills/default/documenting/scripts/changelog/validate_changelog.py +128 -0
- package/.xtrm/skills/default/documenting/scripts/drift_detector.py +266 -0
- package/.xtrm/skills/default/documenting/scripts/generate_template.py +311 -0
- package/.xtrm/skills/default/documenting/scripts/list_by_category.sh +84 -0
- package/.xtrm/skills/default/documenting/scripts/orchestrator.py +255 -0
- package/.xtrm/skills/default/documenting/scripts/validate_metadata.py +242 -0
- package/.xtrm/skills/default/documenting/templates/CHANGELOG.md.template +13 -0
- package/.xtrm/skills/default/find-docs/SKILL.md +175 -0
- package/.xtrm/skills/default/find-skills/SKILL.md +133 -0
- package/.xtrm/skills/default/github-search/SKILL.md +49 -0
- package/.xtrm/skills/default/gitnexus-debugging/SKILL.md +89 -0
- package/.xtrm/skills/default/gitnexus-impact-analysis/SKILL.md +97 -0
- package/.xtrm/skills/default/gitnexus-pr-review/SKILL.md +163 -0
- package/.xtrm/skills/default/gitnexus-refactoring/SKILL.md +121 -0
- package/.xtrm/skills/default/hook-development/SKILL.md +797 -0
- package/.xtrm/skills/default/hook-development/examples/load-context.sh +55 -0
- package/.xtrm/skills/default/hook-development/examples/quality-check.js +1168 -0
- package/.xtrm/skills/default/hook-development/examples/validate-bash.sh +43 -0
- package/.xtrm/skills/default/hook-development/examples/validate-write.sh +38 -0
- package/.xtrm/skills/default/hook-development/references/advanced.md +527 -0
- package/.xtrm/skills/default/hook-development/references/migration.md +369 -0
- package/.xtrm/skills/default/hook-development/references/patterns.md +412 -0
- package/.xtrm/skills/default/hook-development/scripts/README.md +164 -0
- package/.xtrm/skills/default/hook-development/scripts/hook-linter.sh +153 -0
- package/.xtrm/skills/default/hook-development/scripts/test-hook.sh +252 -0
- package/.xtrm/skills/default/hook-development/scripts/validate-hook-schema.sh +159 -0
- package/.xtrm/skills/default/init-session/SKILL.md +69 -0
- package/.xtrm/skills/default/last30days/SKILL.md +881 -0
- package/.xtrm/skills/default/last30days/scripts/briefing.py +260 -0
- package/.xtrm/skills/default/last30days/scripts/evaluate-synthesis.py +120 -0
- package/.xtrm/skills/default/last30days/scripts/evaluate_search_quality.py +641 -0
- package/.xtrm/skills/default/last30days/scripts/generate-synthesis-inputs.py +53 -0
- package/.xtrm/skills/default/last30days/scripts/last30days.py +2137 -0
- package/.xtrm/skills/default/last30days/scripts/lib/__init__.py +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/bird_x.py +458 -0
- package/.xtrm/skills/default/last30days/scripts/lib/bluesky.py +225 -0
- package/.xtrm/skills/default/last30days/scripts/lib/brave_search.py +329 -0
- package/.xtrm/skills/default/last30days/scripts/lib/cache.py +165 -0
- package/.xtrm/skills/default/last30days/scripts/lib/chrome_cookies.py +265 -0
- package/.xtrm/skills/default/last30days/scripts/lib/cookie_extract.py +295 -0
- package/.xtrm/skills/default/last30days/scripts/lib/dates.py +124 -0
- package/.xtrm/skills/default/last30days/scripts/lib/dedupe.py +290 -0
- package/.xtrm/skills/default/last30days/scripts/lib/entity_extract.py +127 -0
- package/.xtrm/skills/default/last30days/scripts/lib/env.py +807 -0
- package/.xtrm/skills/default/last30days/scripts/lib/exa_search.py +176 -0
- package/.xtrm/skills/default/last30days/scripts/lib/hackernews.py +266 -0
- package/.xtrm/skills/default/last30days/scripts/lib/http.py +174 -0
- package/.xtrm/skills/default/last30days/scripts/lib/instagram.py +365 -0
- package/.xtrm/skills/default/last30days/scripts/lib/models.py +221 -0
- package/.xtrm/skills/default/last30days/scripts/lib/normalize.py +489 -0
- package/.xtrm/skills/default/last30days/scripts/lib/openai_reddit.py +631 -0
- package/.xtrm/skills/default/last30days/scripts/lib/openrouter_search.py +216 -0
- package/.xtrm/skills/default/last30days/scripts/lib/parallel_search.py +139 -0
- package/.xtrm/skills/default/last30days/scripts/lib/polymarket.py +580 -0
- package/.xtrm/skills/default/last30days/scripts/lib/quality_nudge.py +201 -0
- package/.xtrm/skills/default/last30days/scripts/lib/query.py +117 -0
- package/.xtrm/skills/default/last30days/scripts/lib/query_type.py +111 -0
- package/.xtrm/skills/default/last30days/scripts/lib/reddit.py +617 -0
- package/.xtrm/skills/default/last30days/scripts/lib/reddit_enrich.py +325 -0
- package/.xtrm/skills/default/last30days/scripts/lib/reddit_public.py +259 -0
- package/.xtrm/skills/default/last30days/scripts/lib/relevance.py +148 -0
- package/.xtrm/skills/default/last30days/scripts/lib/render.py +1018 -0
- package/.xtrm/skills/default/last30days/scripts/lib/safari_cookies.py +182 -0
- package/.xtrm/skills/default/last30days/scripts/lib/schema.py +843 -0
- package/.xtrm/skills/default/last30days/scripts/lib/score.py +775 -0
- package/.xtrm/skills/default/last30days/scripts/lib/scrapecreators_x.py +182 -0
- package/.xtrm/skills/default/last30days/scripts/lib/setup_wizard.py +186 -0
- package/.xtrm/skills/default/last30days/scripts/lib/tiktok.py +349 -0
- package/.xtrm/skills/default/last30days/scripts/lib/truthsocial.py +183 -0
- package/.xtrm/skills/default/last30days/scripts/lib/ui.py +620 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/LICENSE +21 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/bird-search.mjs +134 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/cookies.js +191 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/features.json +17 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/paginate-cursor.js +37 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/query-ids.json +20 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/runtime-features.js +151 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/runtime-query-ids.js +264 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-base.js +129 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-constants.js +50 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-features.js +347 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-search.js +157 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-types.js +2 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-utils.js +511 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/LICENSE +22 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/README.md +29 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.d.ts +3 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.js +2 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.d.ts +8 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.js +27 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.d.ts +11 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.js +100 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.d.ts +25 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.js +104 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.d.ts +10 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.js +293 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.d.ts +10 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.js +26 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.d.ts +7 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.js +51 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.d.ts +7 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.js +60 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.d.ts +7 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.js +38 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.d.ts +5 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.js +33 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.d.ts +24 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.js +30 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.d.ts +11 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.js +43 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.d.ts +8 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.js +41 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.d.ts +8 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.js +53 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.d.ts +8 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.js +27 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.d.ts +7 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.js +53 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.d.ts +8 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.js +60 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.d.ts +7 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.js +38 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.d.ts +6 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.js +257 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.d.ts +8 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.js +71 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.d.ts +6 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.js +173 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.d.ts +26 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.js +195 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.d.ts +121 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.js +2 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.d.ts +2 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.js +18 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.d.ts +8 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.js +110 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.d.ts +2 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.js +32 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.d.ts +2 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.js +13 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.d.ts +2 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.js +7 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.d.ts +5 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.js +58 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.d.ts +2 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.js +27 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.d.ts +2 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.d.ts.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.js +8 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.js.map +1 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/package.json +40 -0
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/package.json +13 -0
- package/.xtrm/skills/default/last30days/scripts/lib/websearch.py +401 -0
- package/.xtrm/skills/default/last30days/scripts/lib/xai_x.py +217 -0
- package/.xtrm/skills/default/last30days/scripts/lib/xiaohongshu_api.py +162 -0
- package/.xtrm/skills/default/last30days/scripts/lib/youtube_yt.py +538 -0
- package/.xtrm/skills/default/last30days/scripts/store.py +654 -0
- package/.xtrm/skills/default/last30days/scripts/sync.sh +50 -0
- package/.xtrm/skills/default/last30days/scripts/test-v1-vs-v2.sh +219 -0
- package/.xtrm/skills/default/last30days/scripts/watchlist.py +329 -0
- package/.xtrm/skills/default/planning/SKILL.md +405 -0
- package/.xtrm/skills/default/planning/evals/evals.json +19 -0
- package/.xtrm/skills/default/prompt-improving/README.md +162 -0
- package/.xtrm/skills/default/prompt-improving/SKILL.md +74 -0
- package/.xtrm/skills/default/prompt-improving/references/analysis_commands.md +24 -0
- package/.xtrm/skills/default/prompt-improving/references/chain_of_thought.md +24 -0
- package/.xtrm/skills/default/prompt-improving/references/mcp_definitions.md +20 -0
- package/.xtrm/skills/default/prompt-improving/references/multishot.md +23 -0
- package/.xtrm/skills/default/prompt-improving/references/xml_core.md +60 -0
- package/.xtrm/skills/default/quality-gates/.claude/hooks/hook-config.json +66 -0
- package/.xtrm/skills/default/quality-gates/.claude/hooks/quality-check.cjs +1286 -0
- package/.xtrm/skills/default/quality-gates/.claude/hooks/quality-check.py +334 -0
- package/.xtrm/skills/default/quality-gates/.claude/settings.json +3 -0
- package/.xtrm/skills/default/quality-gates/.claude/skills/using-quality-gates/SKILL.md +254 -0
- package/.xtrm/skills/default/quality-gates/README.md +109 -0
- package/.xtrm/skills/default/quality-gates/evals/evals.json +181 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/FINAL-EVAL-SUMMARY.md +75 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/edge-case-auto-fix-verification/with_skill/outputs/response.md +59 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/edge-case-mixed-language-project/with_skill/outputs/response.md +60 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/eval-summary.md +105 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/partial-install-python-only/with_skill/outputs/response.md +93 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/python-refactor-request/with_skill/outputs/response.md +104 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/quality-gate-error-fix/with_skill/outputs/response.md +74 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/should-not-trigger-general-chat/with_skill/outputs/response.md +18 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/should-not-trigger-math-question/with_skill/outputs/response.md +18 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/should-not-trigger-unrelated-coding/with_skill/outputs/response.md +56 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/tdd-guard-blocking-confusion/with_skill/outputs/response.md +67 -0
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/typescript-feature-with-tests/with_skill/outputs/response.md +97 -0
- package/.xtrm/skills/default/scoping-service-skills/SKILL.md +231 -0
- package/.xtrm/skills/default/scoping-service-skills/scripts/scope.py +74 -0
- package/.xtrm/skills/default/service-skills-set/README.md +93 -0
- package/.xtrm/skills/default/service-skills-set/git-hooks/doc_reminder.py +67 -0
- package/.xtrm/skills/default/service-skills-set/git-hooks/skill_staleness.py +194 -0
- package/.xtrm/skills/default/service-skills-set/install-service-skills.py +193 -0
- package/.xtrm/skills/default/service-skills-set/service-registry.json +4 -0
- package/.xtrm/skills/default/service-skills-set/service-skills-readme.md +236 -0
- package/.xtrm/skills/default/service-skills-set/settings.json +37 -0
- package/.xtrm/skills/default/session-close-report/SKILL.md +131 -0
- package/.xtrm/skills/default/skill-creator/LICENSE.txt +202 -0
- package/.xtrm/skills/default/skill-creator/SKILL.md +479 -0
- package/.xtrm/skills/default/skill-creator/agents/analyzer.md +274 -0
- package/.xtrm/skills/default/skill-creator/agents/comparator.md +202 -0
- package/.xtrm/skills/default/skill-creator/agents/grader.md +223 -0
- package/.xtrm/skills/default/skill-creator/assets/eval_review.html +146 -0
- package/.xtrm/skills/default/skill-creator/eval-viewer/generate_review.py +471 -0
- package/.xtrm/skills/default/skill-creator/eval-viewer/viewer.html +1325 -0
- package/.xtrm/skills/default/skill-creator/references/schemas.md +430 -0
- package/.xtrm/skills/default/skill-creator/scripts/__init__.py +0 -0
- package/.xtrm/skills/default/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/.xtrm/skills/default/skill-creator/scripts/generate_report.py +326 -0
- package/.xtrm/skills/default/skill-creator/scripts/improve_description.py +248 -0
- package/.xtrm/skills/default/skill-creator/scripts/package_skill.py +136 -0
- package/.xtrm/skills/default/skill-creator/scripts/quick_validate.py +103 -0
- package/.xtrm/skills/default/skill-creator/scripts/run_eval.py +310 -0
- package/.xtrm/skills/default/skill-creator/scripts/run_loop.py +332 -0
- package/.xtrm/skills/default/skill-creator/scripts/utils.py +47 -0
- package/.xtrm/skills/default/specialists-creator/SKILL.md +705 -0
- package/.xtrm/skills/default/specialists-creator/scripts/validate-specialist.ts +41 -0
- package/.xtrm/skills/default/sync-docs/SKILL.md +262 -0
- package/.xtrm/skills/default/sync-docs/evals/evals.json +89 -0
- package/.xtrm/skills/default/sync-docs/references/doc-structure.md +99 -0
- package/.xtrm/skills/default/sync-docs/references/schema.md +103 -0
- package/.xtrm/skills/default/sync-docs/scripts/changelog/add_entry.py +216 -0
- package/.xtrm/skills/default/sync-docs/scripts/context_gatherer.py +405 -0
- package/.xtrm/skills/default/sync-docs/scripts/doc_structure_analyzer.py +495 -0
- package/.xtrm/skills/default/sync-docs/scripts/drift_detector.py +563 -0
- package/.xtrm/skills/default/sync-docs/scripts/validate_doc.py +365 -0
- package/.xtrm/skills/default/sync-docs/scripts/validate_metadata.py +185 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/benchmark.json +293 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/benchmark.md +13 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/eval_metadata.json +27 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/outputs/result.md +210 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/run-1/grading.json +28 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/run-1/timing.json +1 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/outputs/result.md +101 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/run-1/grading.json +28 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/run-1/timing.json +5 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/timing.json +5 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/eval_metadata.json +27 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/outputs/result.md +198 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/run-1/grading.json +28 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/run-1/timing.json +1 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/outputs/result.md +94 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/run-1/grading.json +28 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/run-1/timing.json +1 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/eval_metadata.json +27 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/outputs/result.md +237 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/run-1/grading.json +28 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/run-1/timing.json +1 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/outputs/result.md +134 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/run-1/grading.json +28 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/run-1/timing.json +1 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/benchmark.json +297 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/benchmark.md +13 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/eval_metadata.json +27 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/outputs/result.md +137 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/run-1/grading.json +92 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/run-1/timing.json +1 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/outputs/result.md +134 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/run-1/grading.json +86 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/run-1/timing.json +1 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/eval_metadata.json +27 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/outputs/result.md +193 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/run-1/grading.json +72 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/run-1/timing.json +1 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/outputs/result.md +211 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/run-1/grading.json +91 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/run-1/timing.json +5 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/eval_metadata.json +27 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/outputs/result.md +182 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/run-1/grading.json +95 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/run-1/timing.json +1 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/outputs/result.md +222 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/run-1/grading.json +88 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/run-1/timing.json +5 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/benchmark.json +298 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/benchmark.md +13 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/eval_metadata.json +27 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/outputs/result.md +125 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/run-1/grading.json +97 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/run-1/timing.json +5 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/outputs/result.md +144 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/run-1/grading.json +78 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/run-1/timing.json +5 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/eval_metadata.json +27 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/outputs/result.md +104 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/run-1/grading.json +91 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/run-1/timing.json +5 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/outputs/result.md +79 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/run-1/grading.json +82 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/run-1/timing.json +5 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/eval_metadata.json +27 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase1_context.json +302 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase2_drift.txt +33 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase3_analysis.json +114 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase4_fix.txt +118 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase5_validate.txt +38 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/result.md +158 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/run-1/grading.json +95 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/run-1/timing.json +5 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/outputs/result.md +71 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/run-1/grading.json +90 -0
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/run-1/timing.json +5 -0
- package/.xtrm/skills/default/test-planning/SKILL.md +465 -0
- package/.xtrm/skills/default/test-planning/evals/evals.json +23 -0
- package/.xtrm/skills/default/updating-service-skills/SKILL.md +136 -0
- package/.xtrm/skills/default/updating-service-skills/scripts/drift_detector.py +222 -0
- package/.xtrm/skills/default/using-nodes/SKILL.md +333 -0
- package/.xtrm/skills/default/using-quality-gates/SKILL.md +254 -0
- package/.xtrm/skills/default/using-service-skills/SKILL.md +108 -0
- package/.xtrm/skills/default/using-service-skills/scripts/cataloger.py +74 -0
- package/.xtrm/skills/default/using-service-skills/scripts/skill_activator.py +152 -0
- package/.xtrm/skills/default/using-specialists/SKILL.md +848 -0
- package/.xtrm/skills/default/using-specialists/evals/evals.json +68 -0
- package/.xtrm/skills/default/using-tdd/SKILL.md +410 -0
- package/.xtrm/skills/default/using-xtrm/SKILL.md +127 -0
- package/.xtrm/skills/default/xt-debugging/SKILL.md +149 -0
- package/.xtrm/skills/default/xt-end/SKILL.md +297 -0
- package/.xtrm/skills/default/xt-merge/SKILL.md +326 -0
- package/.xtrm/skills/optional/README.txt +2 -0
- package/.xtrm/skills/optional/architecture-design/PACK.json +11 -0
- package/.xtrm/skills/optional/architecture-design/architecture-patterns/SKILL.md +494 -0
- package/.xtrm/skills/optional/architecture-design/architecture-patterns/references/advanced-patterns.md +391 -0
- package/.xtrm/skills/optional/architecture-design/prompt-engineering-patterns/SKILL.md +473 -0
- package/.xtrm/skills/optional/architecture-design/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
- package/.xtrm/skills/optional/architecture-design/prompt-engineering-patterns/assets/prompt-template-library.md +264 -0
- package/.xtrm/skills/optional/architecture-design/prompt-engineering-patterns/references/chain-of-thought.md +412 -0
- package/.xtrm/skills/optional/architecture-design/prompt-engineering-patterns/references/few-shot-learning.md +386 -0
- package/.xtrm/skills/optional/architecture-design/prompt-engineering-patterns/references/prompt-optimization.md +428 -0
- package/.xtrm/skills/optional/architecture-design/prompt-engineering-patterns/references/prompt-templates.md +484 -0
- package/.xtrm/skills/optional/architecture-design/prompt-engineering-patterns/references/system-prompts.md +195 -0
- package/.xtrm/skills/optional/architecture-design/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
- package/.xtrm/skills/optional/architecture-design/subagent-driven-development/SKILL.md +277 -0
- package/.xtrm/skills/optional/architecture-design/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/.xtrm/skills/optional/architecture-design/subagent-driven-development/implementer-prompt.md +113 -0
- package/.xtrm/skills/optional/architecture-design/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/.xtrm/skills/optional/code-quality/PACK.json +12 -0
- package/.xtrm/skills/optional/code-quality/code-review-excellence/SKILL.md +529 -0
- package/.xtrm/skills/optional/code-quality/multi-reviewer-patterns/SKILL.md +127 -0
- package/.xtrm/skills/optional/code-quality/systematic-debugging/SKILL.md +296 -0
- package/.xtrm/skills/optional/code-quality/verification-before-completion/SKILL.md +139 -0
- package/.xtrm/skills/optional/data-engineering/PACK.json +9 -0
- package/.xtrm/skills/optional/data-engineering/data-analyst/SKILL.md +57 -0
- package/.xtrm/skills/optional/research-methods/PACK.json +12 -0
- package/.xtrm/skills/optional/research-methods/academic-researcher/SKILL.md +269 -0
- package/.xtrm/skills/optional/research-methods/brainstorming/SKILL.md +164 -0
- package/.xtrm/skills/optional/research-methods/brainstorming/scripts/frame-template.html +214 -0
- package/.xtrm/skills/optional/research-methods/brainstorming/scripts/helper.js +88 -0
- package/.xtrm/skills/optional/research-methods/brainstorming/scripts/server.cjs +354 -0
- package/.xtrm/skills/optional/research-methods/brainstorming/scripts/start-server.sh +148 -0
- package/.xtrm/skills/optional/research-methods/brainstorming/scripts/stop-server.sh +56 -0
- package/.xtrm/skills/optional/research-methods/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/.xtrm/skills/optional/research-methods/brainstorming/visual-companion.md +287 -0
- package/.xtrm/skills/optional/research-methods/deep-research/SKILL.md +192 -0
- package/.xtrm/skills/optional/research-methods/fact-checker/SKILL.md +182 -0
- package/.xtrm/skills/optional/security-ops/PACK.json +9 -0
- package/.xtrm/skills/optional/security-ops/security-auditor/SKILL.md +165 -0
- package/.xtrm/skills/optional/xt-optional/PACK.json +16 -0
- package/.xtrm/skills/optional/xt-optional/docker-expert/SKILL.md +409 -0
- package/.xtrm/skills/optional/xt-optional/obsidian-cli/SKILL.md +106 -0
- package/.xtrm/skills/optional/xt-optional/python-testing/SKILL.md +815 -0
- package/.xtrm/skills/optional/xt-optional/senior-backend/SKILL.md +209 -0
- package/.xtrm/skills/optional/xt-optional/senior-backend/references/api_design_patterns.md +103 -0
- package/.xtrm/skills/optional/xt-optional/senior-backend/references/backend_security_practices.md +103 -0
- package/.xtrm/skills/optional/xt-optional/senior-backend/references/database_optimization_guide.md +103 -0
- package/.xtrm/skills/optional/xt-optional/senior-backend/scripts/api_load_tester.py +114 -0
- package/.xtrm/skills/optional/xt-optional/senior-backend/scripts/api_scaffolder.py +114 -0
- package/.xtrm/skills/optional/xt-optional/senior-backend/scripts/database_migration_tool.py +114 -0
- package/.xtrm/skills/optional/xt-optional/senior-data-scientist/SKILL.md +226 -0
- package/.xtrm/skills/optional/xt-optional/senior-data-scientist/references/experiment_design_frameworks.md +80 -0
- package/.xtrm/skills/optional/xt-optional/senior-data-scientist/references/feature_engineering_patterns.md +80 -0
- package/.xtrm/skills/optional/xt-optional/senior-data-scientist/references/statistical_methods_advanced.md +80 -0
- package/.xtrm/skills/optional/xt-optional/senior-data-scientist/scripts/experiment_designer.py +100 -0
- package/.xtrm/skills/optional/xt-optional/senior-data-scientist/scripts/feature_engineering_pipeline.py +100 -0
- package/.xtrm/skills/optional/xt-optional/senior-data-scientist/scripts/model_evaluation_suite.py +100 -0
- package/.xtrm/skills/optional/xt-optional/senior-devops/SKILL.md +209 -0
- package/.xtrm/skills/optional/xt-optional/senior-devops/references/cicd_pipeline_guide.md +103 -0
- package/.xtrm/skills/optional/xt-optional/senior-devops/references/deployment_strategies.md +103 -0
- package/.xtrm/skills/optional/xt-optional/senior-devops/references/infrastructure_as_code.md +103 -0
- package/.xtrm/skills/optional/xt-optional/senior-devops/scripts/deployment_manager.py +114 -0
- package/.xtrm/skills/optional/xt-optional/senior-devops/scripts/pipeline_generator.py +114 -0
- package/.xtrm/skills/optional/xt-optional/senior-devops/scripts/terraform_scaffolder.py +114 -0
- package/.xtrm/skills/optional/xt-optional/senior-security/SKILL.md +209 -0
- package/.xtrm/skills/optional/xt-optional/senior-security/references/cryptography_implementation.md +103 -0
- package/.xtrm/skills/optional/xt-optional/senior-security/references/penetration_testing_guide.md +103 -0
- package/.xtrm/skills/optional/xt-optional/senior-security/references/security_architecture_patterns.md +103 -0
- package/.xtrm/skills/optional/xt-optional/senior-security/scripts/pentest_automator.py +114 -0
- package/.xtrm/skills/optional/xt-optional/senior-security/scripts/security_auditor.py +114 -0
- package/.xtrm/skills/optional/xt-optional/senior-security/scripts/threat_modeler.py +114 -0
- package/CHANGELOG.md +16 -0
- package/README.md +5 -0
- package/cli/dist/index.cjs +862 -614
- package/cli/dist/index.cjs.map +1 -1
- package/cli/package.json +1 -1
- package/package.json +4 -1
- package/.xtrm/extensions/xtrm-ui/format.ts +0 -93
- package/.xtrm/extensions/xtrm-ui/package.json +0 -10
- /package/.xtrm/{extensions → ext-src}/auto-session-name/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/auto-session-name/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/auto-update/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/auto-update/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/beads/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/beads/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/compact-header/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/compact-header/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/core/adapter.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/core/guard-rules.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/core/lib.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/core/logger.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/core/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/core/runner.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/core/session-state.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/custom-footer/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/custom-footer/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/custom-provider-qwen-cli/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/custom-provider-qwen-cli/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/git-checkpoint/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/git-checkpoint/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/lsp-bootstrap/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/lsp-bootstrap/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/pi-serena-compact/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/pi-serena-compact/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/quality-gates/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/quality-gates/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/service-skills/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/service-skills/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/session-flow/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/session-flow/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/xtrm-loader/index.ts +0 -0
- /package/.xtrm/{extensions → ext-src}/xtrm-loader/package.json +0 -0
- /package/.xtrm/{extensions → ext-src}/xtrm-ui/themes/pidex-dark.json +0 -0
- /package/.xtrm/{extensions → ext-src}/xtrm-ui/themes/pidex-light.json +0 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
export interface DiffStats {
|
|
2
|
+
additions: number;
|
|
3
|
+
removals: number;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
// pi-diff compatibility adapter:
|
|
7
|
+
// @heyhuynhgiabuu/pi-diff currently exposes extension-first entrypoints
|
|
8
|
+
// (no stable library export surface), so xtrm-ui vendors this renderer to
|
|
9
|
+
// keep write/edit previews deterministic while preserving single-wrapper ownership.
|
|
10
|
+
interface DiffTheme {
|
|
11
|
+
fg(color: string, text: string): string;
|
|
12
|
+
bold?(text: string): string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface HunkCursor {
|
|
16
|
+
oldLine: number;
|
|
17
|
+
newLine: number;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function shortenHome(path: string): string {
|
|
21
|
+
const home = process.env.HOME;
|
|
22
|
+
if (home && path.startsWith(home)) return `~${path.slice(home.length)}`;
|
|
23
|
+
return path;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function shortenPath(path: string, max = 56): string {
|
|
27
|
+
const normalized = shortenHome(path);
|
|
28
|
+
if (normalized.length <= max) return normalized;
|
|
29
|
+
const parts = normalized.split("/").filter(Boolean);
|
|
30
|
+
if (parts.length <= 2) return `…${normalized.slice(-(max - 1))}`;
|
|
31
|
+
const tail = parts.slice(-2).join("/");
|
|
32
|
+
const head = parts[0]?.startsWith("~") ? "~/" : "…/";
|
|
33
|
+
const candidate = `${head}${tail}`;
|
|
34
|
+
if (candidate.length <= max) return candidate;
|
|
35
|
+
return `…${candidate.slice(-(max - 1))}`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function shortenCommand(command: string, max = 72): string {
|
|
39
|
+
const singleLine = command.replace(/\s+/g, " ").trim();
|
|
40
|
+
if (singleLine.length <= max) return singleLine;
|
|
41
|
+
return `${singleLine.slice(0, Math.max(0, max - 1))}…`;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function lineCount(text: string): number {
|
|
45
|
+
if (!text) return 0;
|
|
46
|
+
return text.split("\n").length;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function previewLines(text: string, count: number): string[] {
|
|
50
|
+
return text.split("\n").slice(0, count);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function cleanOutputLines(text: string): string[] {
|
|
54
|
+
return text
|
|
55
|
+
.split("\n")
|
|
56
|
+
.filter((line) => line.trim().length > 0)
|
|
57
|
+
.filter((line) => !/^exit code:\s*-?\d+$/i.test(line.trim()));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function countPrefixedItems(text: string, prefixes: string[]): number {
|
|
61
|
+
return text.split("\n").filter((line) => prefixes.some((prefix) => line.startsWith(prefix))).length;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function diffStats(diff: string): DiffStats {
|
|
65
|
+
let additions = 0;
|
|
66
|
+
let removals = 0;
|
|
67
|
+
for (const line of diff.split("\n")) {
|
|
68
|
+
if (line.startsWith("+") && !line.startsWith("+++")) additions++;
|
|
69
|
+
if (line.startsWith("-") && !line.startsWith("---")) removals++;
|
|
70
|
+
}
|
|
71
|
+
return { additions, removals };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function createUnifiedLineDiff(oldContent: string, newContent: string): string {
|
|
75
|
+
if (oldContent === newContent) return "";
|
|
76
|
+
|
|
77
|
+
const oldLines = oldContent.split("\n");
|
|
78
|
+
const newLines = newContent.split("\n");
|
|
79
|
+
const out: string[] = ["--- a/file", "+++ b/file", `@@ -1,${oldLines.length} +1,${newLines.length} @@`];
|
|
80
|
+
|
|
81
|
+
let oldIndex = 0;
|
|
82
|
+
let newIndex = 0;
|
|
83
|
+
|
|
84
|
+
while (oldIndex < oldLines.length || newIndex < newLines.length) {
|
|
85
|
+
const oldLine = oldLines[oldIndex];
|
|
86
|
+
const newLine = newLines[newIndex];
|
|
87
|
+
|
|
88
|
+
if (oldLine === newLine) {
|
|
89
|
+
out.push(` ${oldLine ?? ""}`);
|
|
90
|
+
oldIndex++;
|
|
91
|
+
newIndex++;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (oldIndex + 1 < oldLines.length && oldLines[oldIndex + 1] === newLine) {
|
|
96
|
+
out.push(`-${oldLine ?? ""}`);
|
|
97
|
+
oldIndex++;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (newIndex + 1 < newLines.length && oldLine === newLines[newIndex + 1]) {
|
|
102
|
+
out.push(`+${newLine ?? ""}`);
|
|
103
|
+
newIndex++;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (oldIndex < oldLines.length) {
|
|
108
|
+
out.push(`-${oldLine ?? ""}`);
|
|
109
|
+
oldIndex++;
|
|
110
|
+
}
|
|
111
|
+
if (newIndex < newLines.length) {
|
|
112
|
+
out.push(`+${newLine ?? ""}`);
|
|
113
|
+
newIndex++;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return out.join("\n");
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function parseHunkHeader(line: string): HunkCursor | undefined {
|
|
121
|
+
const match = line.match(/^@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@/);
|
|
122
|
+
if (!match) return undefined;
|
|
123
|
+
return {
|
|
124
|
+
oldLine: Number.parseInt(match[1] ?? "1", 10),
|
|
125
|
+
newLine: Number.parseInt(match[2] ?? "1", 10),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function renderLineNumbers(theme: DiffTheme, oldLine: number | null, newLine: number | null): string {
|
|
130
|
+
const format = (value: number | null) => (value == null ? " " : String(value).padStart(4, " "));
|
|
131
|
+
return theme.fg("muted", `${format(oldLine)} ${format(newLine)} │`);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function safeBold(theme: DiffTheme, text: string): string {
|
|
135
|
+
return theme.bold ? theme.bold(text) : text;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function splitChangedSegment(before: string, after: string): { before: string; beforeMid: string; beforeTail: string; after: string; afterMid: string; afterTail: string } {
|
|
139
|
+
let prefixLength = 0;
|
|
140
|
+
const minLength = Math.min(before.length, after.length);
|
|
141
|
+
|
|
142
|
+
while (prefixLength < minLength && before[prefixLength] === after[prefixLength]) {
|
|
143
|
+
prefixLength++;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
let suffixLength = 0;
|
|
147
|
+
while (
|
|
148
|
+
suffixLength < minLength - prefixLength &&
|
|
149
|
+
before[before.length - 1 - suffixLength] === after[after.length - 1 - suffixLength]
|
|
150
|
+
) {
|
|
151
|
+
suffixLength++;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return {
|
|
155
|
+
before: before.slice(0, prefixLength),
|
|
156
|
+
beforeMid: before.slice(prefixLength, before.length - suffixLength),
|
|
157
|
+
beforeTail: before.slice(before.length - suffixLength),
|
|
158
|
+
after: after.slice(0, prefixLength),
|
|
159
|
+
afterMid: after.slice(prefixLength, after.length - suffixLength),
|
|
160
|
+
afterTail: after.slice(after.length - suffixLength),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function renderWordHighlightedPair(theme: DiffTheme, removed: string, added: string): { removed: string; added: string } {
|
|
165
|
+
const segments = splitChangedSegment(removed, added);
|
|
166
|
+
const removedContent = `${segments.before}${segments.beforeMid ? safeBold(theme, segments.beforeMid) : ""}${segments.beforeTail}`;
|
|
167
|
+
const addedContent = `${segments.after}${segments.afterMid ? safeBold(theme, segments.afterMid) : ""}${segments.afterTail}`;
|
|
168
|
+
|
|
169
|
+
return {
|
|
170
|
+
removed: theme.fg("toolDiffRemoved", `-${removedContent}`),
|
|
171
|
+
added: theme.fg("toolDiffAdded", `+${addedContent}`),
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export function renderRichDiffPreview(theme: DiffTheme, diff: string, maxLines: number): string {
|
|
176
|
+
const lines = diff.split("\n");
|
|
177
|
+
const rendered: string[] = [];
|
|
178
|
+
let shown = 0;
|
|
179
|
+
let oldLine = 1;
|
|
180
|
+
let newLine = 1;
|
|
181
|
+
|
|
182
|
+
for (let index = 0; index < lines.length && shown < maxLines; index++) {
|
|
183
|
+
const line = lines[index] ?? "";
|
|
184
|
+
|
|
185
|
+
if (line.startsWith("@@")) {
|
|
186
|
+
const cursor = parseHunkHeader(line);
|
|
187
|
+
if (cursor) {
|
|
188
|
+
oldLine = cursor.oldLine;
|
|
189
|
+
newLine = cursor.newLine;
|
|
190
|
+
}
|
|
191
|
+
rendered.push(`${renderLineNumbers(theme, null, null)} ${theme.fg("muted", line)}`);
|
|
192
|
+
shown++;
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (line.startsWith("---") || line.startsWith("+++")) {
|
|
197
|
+
rendered.push(`${renderLineNumbers(theme, null, null)} ${theme.fg("toolDiffContext", line)}`);
|
|
198
|
+
shown++;
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if (line.startsWith("-") && !line.startsWith("---") && shown + 1 <= maxLines) {
|
|
203
|
+
const nextLine = lines[index + 1] ?? "";
|
|
204
|
+
if (nextLine.startsWith("+") && !nextLine.startsWith("+++")) {
|
|
205
|
+
const pair = renderWordHighlightedPair(theme, line.slice(1), nextLine.slice(1));
|
|
206
|
+
rendered.push(`${renderLineNumbers(theme, oldLine, null)} ${pair.removed}`);
|
|
207
|
+
rendered.push(`${renderLineNumbers(theme, null, newLine)} ${pair.added}`);
|
|
208
|
+
oldLine++;
|
|
209
|
+
newLine++;
|
|
210
|
+
index++;
|
|
211
|
+
shown += 2;
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (line.startsWith("-") && !line.startsWith("---")) {
|
|
217
|
+
rendered.push(`${renderLineNumbers(theme, oldLine, null)} ${theme.fg("toolDiffRemoved", line)}`);
|
|
218
|
+
oldLine++;
|
|
219
|
+
shown++;
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if (line.startsWith("+") && !line.startsWith("+++")) {
|
|
224
|
+
rendered.push(`${renderLineNumbers(theme, null, newLine)} ${theme.fg("toolDiffAdded", line)}`);
|
|
225
|
+
newLine++;
|
|
226
|
+
shown++;
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (line.startsWith(" ")) {
|
|
231
|
+
rendered.push(`${renderLineNumbers(theme, oldLine, newLine)} ${theme.fg("toolDiffContext", line)}`);
|
|
232
|
+
oldLine++;
|
|
233
|
+
newLine++;
|
|
234
|
+
shown++;
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
rendered.push(`${renderLineNumbers(theme, null, null)} ${theme.fg("toolDiffContext", line)}`);
|
|
239
|
+
shown++;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (lines.length > shown) {
|
|
243
|
+
rendered.push(theme.fg("muted", ` … +${lines.length - shown} more`));
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return rendered.join("\n");
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export function formatDuration(durationMs: number | undefined): string | undefined {
|
|
250
|
+
if (!durationMs || durationMs < 0) return undefined;
|
|
251
|
+
if (durationMs < 1000) return `${durationMs}ms`;
|
|
252
|
+
const seconds = durationMs / 1000;
|
|
253
|
+
if (seconds < 10) return `${seconds.toFixed(1)}s`;
|
|
254
|
+
return `${Math.round(seconds)}s`;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export function formatLineLabel(count: number, noun: string): string {
|
|
258
|
+
return `${count} ${noun}${count === 1 ? "" : "s"}`;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export function renderToolSummary(
|
|
262
|
+
theme: { fg(color: string, text: string): string; bold(text: string): string },
|
|
263
|
+
status: "pending" | "success" | "error" | "muted",
|
|
264
|
+
label: string,
|
|
265
|
+
subject?: string,
|
|
266
|
+
meta?: string,
|
|
267
|
+
): string {
|
|
268
|
+
const color =
|
|
269
|
+
status === "pending" ? "accent"
|
|
270
|
+
: status === "error" ? "error"
|
|
271
|
+
: status === "success" ? "success"
|
|
272
|
+
: "muted";
|
|
273
|
+
let text = `${theme.fg(color, "•")} ${theme.fg("toolTitle", theme.bold(label))}`;
|
|
274
|
+
if (subject) text += ` ${theme.fg("accent", subject)}`;
|
|
275
|
+
if (meta) text += theme.fg("muted", ` · ${meta}`);
|
|
276
|
+
return text;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
export function joinMeta(parts: Array<string | undefined | false>): string | undefined {
|
|
280
|
+
const filtered = parts.filter((part): part is string => typeof part === "string" && part.length > 0);
|
|
281
|
+
return filtered.length > 0 ? filtered.join(" · ") : undefined;
|
|
282
|
+
}
|
|
@@ -32,16 +32,19 @@ import {
|
|
|
32
32
|
createWriteTool,
|
|
33
33
|
} from "@mariozechner/pi-coding-agent";
|
|
34
34
|
import { Box, Text, truncateToWidth, visibleWidth } from "@mariozechner/pi-tui";
|
|
35
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
35
36
|
import { basename, join } from "node:path";
|
|
36
37
|
import {
|
|
37
38
|
cleanOutputLines,
|
|
38
39
|
countPrefixedItems,
|
|
40
|
+
createUnifiedLineDiff,
|
|
39
41
|
diffStats,
|
|
40
42
|
formatDuration,
|
|
41
43
|
formatLineLabel,
|
|
42
44
|
joinMeta,
|
|
43
45
|
lineCount,
|
|
44
46
|
previewLines,
|
|
47
|
+
renderRichDiffPreview,
|
|
45
48
|
renderToolSummary,
|
|
46
49
|
shortenCommand,
|
|
47
50
|
shortenPath,
|
|
@@ -237,19 +240,6 @@ function renderVerticalPreview(theme: any, lines: string[], maxLines: number): s
|
|
|
237
240
|
return text;
|
|
238
241
|
}
|
|
239
242
|
|
|
240
|
-
function renderDiffPreview(theme: any, diff: string, maxLines: number): string {
|
|
241
|
-
const lines = diff.split("\n").slice(0, maxLines);
|
|
242
|
-
let out = "";
|
|
243
|
-
for (const line of lines) {
|
|
244
|
-
const styled =
|
|
245
|
-
line.startsWith("+") && !line.startsWith("+++") ? theme.fg("toolDiffAdded", ` ${line}`)
|
|
246
|
-
: line.startsWith("-") && !line.startsWith("---") ? theme.fg("toolDiffRemoved", ` ${line}`)
|
|
247
|
-
: theme.fg("toolDiffContext", ` ${line}`);
|
|
248
|
-
out += (out ? "\n" : "") + styled;
|
|
249
|
-
}
|
|
250
|
-
if (diff.split("\n").length > maxLines) out += `\n${theme.fg("muted", ` … +${diff.split("\n").length - maxLines} more`)}`;
|
|
251
|
-
return out;
|
|
252
|
-
}
|
|
253
243
|
|
|
254
244
|
function lineRange(offset?: number, limit?: number): string | undefined {
|
|
255
245
|
if (offset == null && limit == null) return undefined;
|
|
@@ -436,8 +426,14 @@ type XtrmMeta<TArgs = Record<string, unknown>> = {
|
|
|
436
426
|
durationMs: number;
|
|
437
427
|
};
|
|
438
428
|
|
|
429
|
+
type XtrmWritePreview =
|
|
430
|
+
| { kind: "created"; lineCount: number }
|
|
431
|
+
| { kind: "updated"; diff: string; additions: number; removals: number }
|
|
432
|
+
| { kind: "unchanged" };
|
|
433
|
+
|
|
439
434
|
type DetailsWithXtrmMeta<TDetails, TArgs = Record<string, unknown>> = TDetails & {
|
|
440
435
|
xtrmMeta?: XtrmMeta<TArgs>;
|
|
436
|
+
xtrmWritePreview?: XtrmWritePreview;
|
|
441
437
|
};
|
|
442
438
|
|
|
443
439
|
const toolCache = new Map<string, BuiltInTools>();
|
|
@@ -484,6 +480,30 @@ function getTextContent(result: { content: Array<{ type: string; text?: string }
|
|
|
484
480
|
return item?.text ?? "";
|
|
485
481
|
}
|
|
486
482
|
|
|
483
|
+
function createWritePreview(path: string, nextContent: string): XtrmWritePreview {
|
|
484
|
+
if (!path || !existsSync(path)) {
|
|
485
|
+
return { kind: "created", lineCount: lineCount(nextContent) };
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
let currentContent = "";
|
|
489
|
+
try {
|
|
490
|
+
currentContent = readFileSync(path, "utf8");
|
|
491
|
+
} catch {
|
|
492
|
+
return { kind: "created", lineCount: lineCount(nextContent) };
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
if (currentContent === nextContent) return { kind: "unchanged" };
|
|
496
|
+
|
|
497
|
+
const diff = createUnifiedLineDiff(currentContent, nextContent);
|
|
498
|
+
const stats = diffStats(diff);
|
|
499
|
+
return {
|
|
500
|
+
kind: "updated",
|
|
501
|
+
diff,
|
|
502
|
+
additions: stats.additions,
|
|
503
|
+
removals: stats.removals,
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
|
|
487
507
|
function renderPendingCall(toolName: string, args: Record<string, unknown>, theme: any): Text {
|
|
488
508
|
return new Text(renderToolSummary(theme, "pending", toolName, summarizeToolSubject(toolName, args), undefined), 0, 0);
|
|
489
509
|
}
|
|
@@ -859,7 +879,7 @@ function registerXtrmUiTools(pi: ExtensionAPI): void {
|
|
|
859
879
|
}
|
|
860
880
|
const stats = details.diff ? diffStats(details.diff) : { additions: 0, removals: 0 };
|
|
861
881
|
let text = renderToolSummary(theme, "success", "edit", shortenPath(String(meta?.args.path ?? "")), joinMeta([`+${stats.additions}`, `-${stats.removals}`, formatDuration(meta?.durationMs)]));
|
|
862
|
-
if (expanded && details.diff) text += `\n${
|
|
882
|
+
if (expanded && details.diff) text += `\n${renderRichDiffPreview(theme, details.diff, 18)}`;
|
|
863
883
|
return new Text(text, 0, 0);
|
|
864
884
|
},
|
|
865
885
|
});
|
|
@@ -871,11 +891,16 @@ function registerXtrmUiTools(pi: ExtensionAPI): void {
|
|
|
871
891
|
parameters: getTools(process.cwd()).write.parameters,
|
|
872
892
|
async execute(toolCallId, params, signal, onUpdate, ctx) {
|
|
873
893
|
const started = Date.now();
|
|
894
|
+
const args = params as Record<string, unknown>;
|
|
895
|
+
const path = String(args.path ?? "");
|
|
896
|
+
const content = String(args.content ?? "");
|
|
897
|
+
const preview = createWritePreview(path, content);
|
|
874
898
|
const result = await getTools(ctx.cwd).write.execute(toolCallId, params, signal, onUpdate);
|
|
875
|
-
|
|
899
|
+
const details = withXtrmMeta(result.details as Record<string, never> | undefined, "write", args, Date.now() - started);
|
|
900
|
+
return { ...result, details: { ...details, xtrmWritePreview: preview } };
|
|
876
901
|
},
|
|
877
902
|
renderCall: (args, theme) => renderPendingCallIfActive("write", args as Record<string, unknown>, theme),
|
|
878
|
-
renderResult(result, { isPartial }, theme) {
|
|
903
|
+
renderResult(result, { expanded, isPartial }, theme) {
|
|
879
904
|
if (isPartial) return new Text(renderToolSummary(theme, "pending", "write", "writing", undefined), 0, 0);
|
|
880
905
|
const details = (result.details ?? {}) as DetailsWithXtrmMeta<Record<string, never>, Record<string, unknown>>;
|
|
881
906
|
const meta = getXtrmMeta<Record<string, never>, Record<string, unknown>>(details);
|
|
@@ -883,7 +908,41 @@ function registerXtrmUiTools(pi: ExtensionAPI): void {
|
|
|
883
908
|
if (/^error/i.test(textContent.trim())) {
|
|
884
909
|
return new Text(renderToolSummary(theme, "error", "write", shortenPath(String(meta?.args.path ?? "")), textContent.split("\n")[0]), 0, 0);
|
|
885
910
|
}
|
|
886
|
-
|
|
911
|
+
|
|
912
|
+
const subject = shortenPath(String(meta?.args.path ?? ""));
|
|
913
|
+
const preview = details.xtrmWritePreview;
|
|
914
|
+
|
|
915
|
+
if (preview?.kind === "unchanged") {
|
|
916
|
+
return new Text(renderToolSummary(theme, "success", "write", subject, joinMeta(["no changes", formatDuration(meta?.durationMs)])), 0, 0);
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
if (preview?.kind === "updated") {
|
|
920
|
+
let text = renderToolSummary(
|
|
921
|
+
theme,
|
|
922
|
+
"success",
|
|
923
|
+
"write",
|
|
924
|
+
subject,
|
|
925
|
+
joinMeta([`+${preview.additions}`, `-${preview.removals}`, formatDuration(meta?.durationMs)]),
|
|
926
|
+
);
|
|
927
|
+
if (expanded && preview.diff) text += `\n${renderRichDiffPreview(theme, preview.diff, 18)}`;
|
|
928
|
+
return new Text(text, 0, 0);
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
const lines = preview?.kind === "created"
|
|
932
|
+
? preview.lineCount
|
|
933
|
+
: lineCount(String(meta?.args.content ?? ""));
|
|
934
|
+
|
|
935
|
+
return new Text(
|
|
936
|
+
renderToolSummary(
|
|
937
|
+
theme,
|
|
938
|
+
"success",
|
|
939
|
+
"write",
|
|
940
|
+
subject,
|
|
941
|
+
joinMeta([formatLineLabel(lines, "line"), formatDuration(meta?.durationMs)]),
|
|
942
|
+
),
|
|
943
|
+
0,
|
|
944
|
+
0,
|
|
945
|
+
);
|
|
887
946
|
},
|
|
888
947
|
});
|
|
889
948
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xtrm/pi-xtrm-ui",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "XTRM UI: pi-dex chrome + pi-diff style write/edit rendering with custom-footer-safe ownership",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": "./index.ts"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@heyhuynhgiabuu/pi-diff": "^0.2.1"
|
|
12
|
+
},
|
|
13
|
+
"pi": {
|
|
14
|
+
"extensions": [
|
|
15
|
+
"./index.ts"
|
|
16
|
+
],
|
|
17
|
+
"themes": [
|
|
18
|
+
"./themes"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// specialists-complete — Claude Code UserPromptSubmit/PostToolUse hook
|
|
3
|
+
// Checks .specialists/ready/ for completed background job markers and injects
|
|
4
|
+
// completion/failure banners into Claude's context.
|
|
5
|
+
//
|
|
6
|
+
// Installed by: specialists install
|
|
7
|
+
|
|
8
|
+
import { existsSync, readdirSync, readFileSync, unlinkSync } from 'node:fs';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
|
|
11
|
+
const cwd = process.env.CLAUDE_PROJECT_DIR ?? process.cwd();
|
|
12
|
+
const readyDir = join(cwd, '.specialists', 'ready');
|
|
13
|
+
|
|
14
|
+
// Exit silently if no ready dir or nothing to report
|
|
15
|
+
if (!existsSync(readyDir)) process.exit(0);
|
|
16
|
+
|
|
17
|
+
let markers;
|
|
18
|
+
try {
|
|
19
|
+
markers = readdirSync(readyDir).filter(f => !f.startsWith('.'));
|
|
20
|
+
} catch {
|
|
21
|
+
process.exit(0);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (markers.length === 0) process.exit(0);
|
|
25
|
+
|
|
26
|
+
const banners = [];
|
|
27
|
+
|
|
28
|
+
for (const jobId of markers) {
|
|
29
|
+
const markerPath = join(readyDir, jobId);
|
|
30
|
+
const statusPath = join(cwd, '.specialists', 'jobs', jobId, 'status.json');
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
let specialist = jobId;
|
|
34
|
+
let elapsed = '';
|
|
35
|
+
let completionStatus = 'done';
|
|
36
|
+
let errorMessage = '';
|
|
37
|
+
|
|
38
|
+
if (existsSync(statusPath)) {
|
|
39
|
+
const status = JSON.parse(readFileSync(statusPath, 'utf-8'));
|
|
40
|
+
specialist = status.specialist ?? jobId;
|
|
41
|
+
elapsed = status.elapsed_s !== undefined ? `, ${status.elapsed_s}s` : '';
|
|
42
|
+
completionStatus = status.status ?? 'done';
|
|
43
|
+
errorMessage = status.error ? ` — ${status.error}` : '';
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (completionStatus === 'error') {
|
|
47
|
+
banners.push(
|
|
48
|
+
`[Specialist '${specialist}' failed (job ${jobId}${elapsed}${errorMessage}). Run: specialists feed ${jobId} --follow]`
|
|
49
|
+
);
|
|
50
|
+
} else {
|
|
51
|
+
banners.push(
|
|
52
|
+
`[Specialist '${specialist}' completed (job ${jobId}${elapsed}). Run: specialists result ${jobId}]`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Delete marker so it only fires once
|
|
57
|
+
unlinkSync(markerPath);
|
|
58
|
+
} catch {
|
|
59
|
+
// Ignore malformed entries
|
|
60
|
+
try { unlinkSync(markerPath); } catch { /* ignore */ }
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (banners.length === 0) process.exit(0);
|
|
65
|
+
|
|
66
|
+
// UserPromptSubmit/PostToolUse hooks inject content via JSON
|
|
67
|
+
process.stdout.write(JSON.stringify({
|
|
68
|
+
type: 'inject',
|
|
69
|
+
content: banners.join('\n'),
|
|
70
|
+
}) + '\n');
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// specialists-session-start — Claude Code SessionStart hook
|
|
3
|
+
// Injects specialists context at the start of every session:
|
|
4
|
+
// • Active background jobs (if any)
|
|
5
|
+
// • Available specialists list
|
|
6
|
+
// • Key CLI commands reminder
|
|
7
|
+
//
|
|
8
|
+
// Installed by: specialists init
|
|
9
|
+
// Hook type: SessionStart
|
|
10
|
+
|
|
11
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { homedir } from 'node:os';
|
|
14
|
+
|
|
15
|
+
const cwd = process.env.CLAUDE_PROJECT_DIR ?? process.cwd();
|
|
16
|
+
const HOME = homedir();
|
|
17
|
+
const jobsDir = join(cwd, '.specialists', 'jobs');
|
|
18
|
+
const lines = [];
|
|
19
|
+
|
|
20
|
+
// ── 1. Active background jobs ──────────────────────────────────────────────
|
|
21
|
+
if (existsSync(jobsDir)) {
|
|
22
|
+
let entries = [];
|
|
23
|
+
try { entries = readdirSync(jobsDir); } catch { /* ignore */ }
|
|
24
|
+
|
|
25
|
+
const activeJobs = [];
|
|
26
|
+
for (const jobId of entries) {
|
|
27
|
+
const statusPath = join(jobsDir, jobId, 'status.json');
|
|
28
|
+
if (!existsSync(statusPath)) continue;
|
|
29
|
+
try {
|
|
30
|
+
const s = JSON.parse(readFileSync(statusPath, 'utf-8'));
|
|
31
|
+
if (s.status === 'running' || s.status === 'starting') {
|
|
32
|
+
const elapsed = s.elapsed_s !== undefined ? ` (${s.elapsed_s}s)` : '';
|
|
33
|
+
activeJobs.push(
|
|
34
|
+
` • ${s.specialist ?? jobId} [${s.status}]${elapsed} → specialists result ${jobId}`
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
} catch { /* malformed status.json */ }
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (activeJobs.length > 0) {
|
|
41
|
+
lines.push('## Specialists — Active Background Jobs');
|
|
42
|
+
lines.push('');
|
|
43
|
+
lines.push(...activeJobs);
|
|
44
|
+
lines.push('');
|
|
45
|
+
lines.push('Use `specialists feed <job-id> --follow` to stream events, or `specialists result <job-id>` when done.');
|
|
46
|
+
lines.push('');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// ── 2. Available specialists (read YAML dirs directly) ────────────────────
|
|
51
|
+
function readSpecialistNames(dir) {
|
|
52
|
+
if (!existsSync(dir)) return [];
|
|
53
|
+
try {
|
|
54
|
+
return readdirSync(dir)
|
|
55
|
+
.filter(f => f.endsWith('.specialist.yaml'))
|
|
56
|
+
.map(f => f.replace('.specialist.yaml', ''));
|
|
57
|
+
} catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const projectNames = readSpecialistNames(join(cwd, 'specialists'));
|
|
63
|
+
const userNames = readSpecialistNames(join(HOME, '.agents', 'specialists'));
|
|
64
|
+
|
|
65
|
+
// Merge, deduplicate, sort
|
|
66
|
+
const allNames = [...new Set([...projectNames, ...userNames])].sort();
|
|
67
|
+
|
|
68
|
+
if (allNames.length > 0) {
|
|
69
|
+
lines.push('## Specialists — Available');
|
|
70
|
+
lines.push('');
|
|
71
|
+
if (projectNames.length > 0) {
|
|
72
|
+
lines.push(`project (${projectNames.length}): ${projectNames.join(', ')}`);
|
|
73
|
+
}
|
|
74
|
+
if (userNames.length > 0) {
|
|
75
|
+
// Only show user-scope names not already in project
|
|
76
|
+
const extraUser = userNames.filter(n => !projectNames.includes(n));
|
|
77
|
+
if (extraUser.length > 0) {
|
|
78
|
+
lines.push(`user (${extraUser.length}): ${extraUser.join(', ')}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
lines.push('');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// ── 3. Key commands reminder ───────────────────────────────────────────────
|
|
85
|
+
lines.push('## Specialists — Session Quick Reference');
|
|
86
|
+
lines.push('');
|
|
87
|
+
lines.push('```');
|
|
88
|
+
lines.push('specialists list # discover available specialists');
|
|
89
|
+
lines.push('specialists run <name> --prompt "..." # run foreground (streams output)');
|
|
90
|
+
lines.push('specialists run <name> --prompt "..." # run; job ID prints on stderr');
|
|
91
|
+
lines.push('specialists feed <job-id> --follow # tail live events');
|
|
92
|
+
lines.push('specialists result <job-id> # read final output');
|
|
93
|
+
lines.push('specialists status # system health');
|
|
94
|
+
lines.push('specialists doctor # troubleshoot issues');
|
|
95
|
+
lines.push('```');
|
|
96
|
+
lines.push('');
|
|
97
|
+
lines.push('MCP tools: use_specialist (foreground only)');
|
|
98
|
+
|
|
99
|
+
// ── Output ─────────────────────────────────────────────────────────────────
|
|
100
|
+
if (lines.length === 0) process.exit(0);
|
|
101
|
+
|
|
102
|
+
process.stdout.write(JSON.stringify({
|
|
103
|
+
type: 'inject',
|
|
104
|
+
content: lines.join('\n'),
|
|
105
|
+
}) + '\n');
|