@linhnguyen96114/agentkit-engineer 1.4.2 → 1.4.3

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.
Files changed (71) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/bin/agentkit.js +1 -1
  3. package/package.json +2 -2
  4. package/scripts-dist/cli/agentkit-clear.js +18 -0
  5. package/scripts-dist/{agentkit-config.js → cli/agentkit-config.js} +3 -3
  6. package/scripts-dist/cli/agentkit-dashboard.js +19 -0
  7. package/scripts-dist/{agentkit-decide.js → cli/agentkit-decide.js} +1 -1
  8. package/scripts-dist/cli/agentkit-doctor.js +20 -0
  9. package/scripts-dist/cli/agentkit-hooks.js +36 -0
  10. package/scripts-dist/cli/agentkit-init.js +39 -0
  11. package/scripts-dist/{agentkit-login.js → cli/agentkit-login.js} +2 -2
  12. package/scripts-dist/{agentkit-logout.js → cli/agentkit-logout.js} +2 -2
  13. package/scripts-dist/cli/agentkit-profile.js +4 -0
  14. package/scripts-dist/cli/agentkit-skills.js +25 -0
  15. package/scripts-dist/cli/agentkit-status.js +22 -0
  16. package/scripts-dist/cli/agentkit-uninstall.js +18 -0
  17. package/scripts-dist/cli/agentkit-update.js +17 -0
  18. package/scripts-dist/{agentkit-whoami.js → cli/agentkit-whoami.js} +2 -2
  19. package/scripts-dist/{check-upstream.js → gen/check-upstream.js} +1 -1
  20. package/scripts-dist/gen/generate-agentkit-configs.js +2 -0
  21. package/scripts-dist/gen/generate-catalogs.js +10 -0
  22. package/scripts-dist/{run-skill-tests.js → gen/run-skill-tests.js} +1 -1
  23. package/scripts-dist/gen/update-check-worker.js +2 -0
  24. package/scripts-dist/{validate-agents-registry.js → gen/validate-agents-registry.js} +1 -1
  25. package/scripts-dist/lib/clear/cli.js +4 -0
  26. package/scripts-dist/lib/cli.js +3 -0
  27. package/scripts-dist/lib/doctor/checks-hooks.js +2 -2
  28. package/scripts-dist/lib/doctor/checks-rules.js +1 -1
  29. package/scripts-dist/lib/doctor/checks-skills.js +1 -1
  30. package/scripts-dist/lib/doctor/checks-soul.js +1 -1
  31. package/scripts-dist/lib/doctor/profile-resolution.js +1 -1
  32. package/scripts-dist/lib/file-operations.js +2 -2
  33. package/scripts-dist/lib/frontmatter.js +2 -0
  34. package/scripts-dist/lib/gitignore.js +5 -5
  35. package/scripts-dist/lib/global-clear-targets.js +1 -1
  36. package/scripts-dist/lib/hook-toggle-registry.js +1 -1
  37. package/scripts-dist/lib/hooks/cli.js +1 -0
  38. package/scripts-dist/lib/init/cli.js +1 -0
  39. package/scripts-dist/lib/install-profile-config.js +1 -1
  40. package/scripts-dist/lib/kit-install-dispatch.js +1 -1
  41. package/scripts-dist/lib/kit-remover.js +1 -1
  42. package/scripts-dist/lib/kit-scan.js +1 -1
  43. package/scripts-dist/lib/kits.js +1 -1
  44. package/scripts-dist/lib/payload/extract.js +1 -1
  45. package/scripts-dist/lib/payload-roots.js +1 -0
  46. package/scripts-dist/lib/profile-block.js +2 -2
  47. package/scripts-dist/lib/profile-remove.js +1 -1
  48. package/scripts-dist/lib/profile-rules.js +1 -1
  49. package/scripts-dist/lib/profile-switch-confirm.js +1 -1
  50. package/scripts-dist/lib/publish/payload-manifest.js +1 -1
  51. package/scripts-dist/lib/publish/public-client-manifest.js +1 -1
  52. package/scripts-dist/lib/server/kit-actions.js +1 -1
  53. package/scripts-dist/lib/skill-profiles.js +1 -1
  54. package/scripts-dist/lib/skill-tests.js +1 -1
  55. package/scripts-dist/lib/skills/cli.js +1 -0
  56. package/scripts-dist/lib/update/cli.js +4 -0
  57. package/scripts-dist/lib/update-notifier.js +1 -1
  58. package/scripts-dist/{build-hermes-distribution.js → ops/build-hermes-distribution.js} +1 -1
  59. package/scripts-dist/agentkit-clear.js +0 -21
  60. package/scripts-dist/agentkit-dashboard.js +0 -19
  61. package/scripts-dist/agentkit-doctor.js +0 -20
  62. package/scripts-dist/agentkit-hooks.js +0 -36
  63. package/scripts-dist/agentkit-init.js +0 -39
  64. package/scripts-dist/agentkit-profile.js +0 -4
  65. package/scripts-dist/agentkit-skills.js +0 -25
  66. package/scripts-dist/agentkit-status.js +0 -22
  67. package/scripts-dist/agentkit-uninstall.js +0 -18
  68. package/scripts-dist/agentkit-update.js +0 -20
  69. package/scripts-dist/generate-agentkit-configs.js +0 -2
  70. package/scripts-dist/generate-catalogs.js +0 -10
  71. package/scripts-dist/update-check-worker.js +0 -2
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const version_check_1=require("../lib/version-check"),HARD_EXIT_MS=2e4;async function main(){const e=Date.now();(0,version_check_1.writeUpdateCache)({lastUpdateCheck:e});try{const t=await(0,version_check_1.fetchLatestRelease)();(0,version_check_1.writeUpdateCache)({lastUpdateCheck:e,latestVersion:(0,version_check_1.normalizeVersion)(t.tag_name)})}catch{}}const guard=setTimeout(()=>process.exit(0),HARD_EXIT_MS);guard.unref(),main().catch(()=>{}).finally(()=>clearTimeout(guard));
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(a,e,i,t){t===void 0&&(t=i);var r=Object.getOwnPropertyDescriptor(e,i);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(a,t,r)}):(function(a,e,i,t){t===void 0&&(t=i),a[t]=e[i]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(a,e){Object.defineProperty(a,"default",{enumerable:!0,value:e})}):function(a,e){a.default=e}),__importStar=this&&this.__importStar||(function(){var a=function(e){return a=Object.getOwnPropertyNames||function(i){var t=[];for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&(t[t.length]=r);return t},a(e)};return function(e){if(e&&e.__esModule)return e;var i={};if(e!=null)for(var t=a(e),r=0;r<t.length;r++)t[r]!=="default"&&__createBinding(i,e,t[r]);return __setModuleDefault(i,e),i}})();Object.defineProperty(exports,"__esModule",{value:!0});const fs=__importStar(require("fs")),path=__importStar(require("path")),REGISTRY_PATH=path.join(__dirname,"../.opencode/agents-registry.json"),AGENTS_DIR=path.join(__dirname,"../.opencode/agent");class RegistryValidator{constructor(){this.errors=[],this.warnings=[],this.registry=null}validate(){return console.log(`\u{1F50D} Validating OpenCode Agents Registry...
2
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(a,e,i,t){t===void 0&&(t=i);var r=Object.getOwnPropertyDescriptor(e,i);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(a,t,r)}):(function(a,e,i,t){t===void 0&&(t=i),a[t]=e[i]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(a,e){Object.defineProperty(a,"default",{enumerable:!0,value:e})}):function(a,e){a.default=e}),__importStar=this&&this.__importStar||(function(){var a=function(e){return a=Object.getOwnPropertyNames||function(i){var t=[];for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&(t[t.length]=r);return t},a(e)};return function(e){if(e&&e.__esModule)return e;var i={};if(e!=null)for(var t=a(e),r=0;r<t.length;r++)t[r]!=="default"&&__createBinding(i,e,t[r]);return __setModuleDefault(i,e),i}})();Object.defineProperty(exports,"__esModule",{value:!0});const fs=__importStar(require("fs")),path=__importStar(require("path")),REGISTRY_PATH=path.join(__dirname,"../../.opencode/agents-registry.json"),AGENTS_DIR=path.join(__dirname,"../../.opencode/agent");class RegistryValidator{constructor(){this.errors=[],this.warnings=[],this.registry=null}validate(){return console.log(`\u{1F50D} Validating OpenCode Agents Registry...
3
3
  `),!this.validateJSON()||!this.validateAgentFiles()||!this.validateCapabilities()||!this.validateRelationships()||!this.validateRequiredFields()?!1:this.reportResults()}validateJSON(){try{const e=fs.readFileSync(REGISTRY_PATH,"utf-8");return this.registry=JSON.parse(e),console.log("\u2705 Registry JSON is valid"),!0}catch(e){return this.errors.push(`Failed to parse registry JSON: ${e.message}`),!1}}validateAgentFiles(){if(!this.registry)return!1;const{agents:e}=this.registry;let i=!0;for(const[t,r]of Object.entries(e)){const s=path.join(AGENTS_DIR,`${t}.md`);if(!fs.existsSync(s))this.errors.push(`Agent file missing: ${t}.md`),i=!1;else try{const n=fs.readFileSync(s,"utf-8");n.startsWith("---")||(this.errors.push(`Agent file missing frontmatter: ${t}.md`),i=!1),n.includes("capabilities:")||this.warnings.push(`Agent missing capabilities metadata: ${t}.md`)}catch(n){this.errors.push(`Failed to read agent file: ${t}.md (${n.message})`),i=!1}}return i&&console.log(`\u2705 All ${Object.keys(e).length} agent files exist and are readable`),i}validateCapabilities(){if(!this.registry)return!1;const{agents:e,capabilities:i}=this.registry;let t=!0;for(const[r,s]of Object.entries(e)){if(!s.primaryCapability){this.errors.push(`Agent missing primaryCapability: ${r}`),t=!1;continue}if(i[s.primaryCapability]||(this.errors.push(`Agent references undefined capability: ${r} -> ${s.primaryCapability}`),t=!1),s.secondaryCapabilities&&Array.isArray(s.secondaryCapabilities))for(const n of s.secondaryCapabilities)i[n]||(this.errors.push(`Agent references undefined secondary capability: ${r} -> ${n}`),t=!1)}for(const[r,s]of Object.entries(i))for(const n of s.agents)e[n]||(this.errors.push(`Capability references undefined agent: ${r} -> ${n}`),t=!1);return t&&console.log(`\u2705 All capability references are valid (${Object.keys(i).length} capabilities)`),t}validateRelationships(){if(!this.registry)return!1;const{agents:e}=this.registry;let i=!0;for(const[t,r]of Object.entries(e)){if(r.invokesAgents&&Array.isArray(r.invokesAgents))for(const s of r.invokesAgents)e[s]||(this.errors.push(`Agent invokes undefined agent: ${t} -> ${s}`),i=!1);if(r.invokedBy&&Array.isArray(r.invokedBy))for(const s of r.invokedBy)e[s]||(this.errors.push(`Agent is invoked by undefined agent: ${t} <- ${s}`),i=!1)}return i&&console.log("\u2705 All agent relationships are valid"),i}validateRequiredFields(){if(!this.registry)return!1;const{agents:e}=this.registry,i=["name","description","primaryCapability","file"];let t=!0;for(const[r,s]of Object.entries(e))for(const n of i)s[n]||(this.errors.push(`Agent missing required field '${n}': ${r}`),t=!1);return t&&console.log("\u2705 All agents have required fields"),t}reportResults(){return console.log(`
4
4
  `+"=".repeat(60)),this.errors.length===0&&this.warnings.length===0?(console.log(`\u2705 Registry validation PASSED!
5
5
  `),console.log("Summary:"),console.log(` \u2022 Agents: ${Object.keys(this.registry.agents).length}`),console.log(` \u2022 Capabilities: ${Object.keys(this.registry.capabilities).length}`),console.log(` \u2022 Categories: ${Object.keys(this.registry.categories).length}`),console.log("=".repeat(60)),!0):(this.errors.length>0&&(console.log("\u274C ERRORS:"),this.errors.forEach(e=>console.log(` \u2022 ${e}`))),this.warnings.length>0&&(console.log(`
@@ -0,0 +1,4 @@
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,i,n,r){r===void 0&&(r=n);var o=Object.getOwnPropertyDescriptor(i,n);(!o||("get"in o?!i.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return i[n]}}),Object.defineProperty(e,r,o)}):(function(e,i,n,r){r===void 0&&(r=n),e[r]=i[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,i){Object.defineProperty(e,"default",{enumerable:!0,value:i})}):function(e,i){e.default=i}),__importStar=this&&this.__importStar||(function(){var e=function(i){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(r[r.length]=o);return r},e(i)};return function(i){if(i&&i.__esModule)return i;var n={};if(i!=null)for(var r=e(i),o=0;o<r.length;o++)r[o]!=="default"&&__createBinding(n,i,r[o]);return __setModuleDefault(n,i),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.runClear=runClear;const fs=__importStar(require("fs")),path=__importStar(require("path")),readline=__importStar(require("readline")),os=__importStar(require("os")),install_registry_1=require("../install-registry"),logger_1=require("../logger"),ui_1=require("../ui"),codex_agents_1=require("../codex-agents"),kimi_hooks_toml_1=require("../kit-installers/kimi-hooks-toml"),kimi_1=require("../kit-installers/kimi"),grok_config_toml_1=require("../kit-installers/grok-config-toml"),grok_session_toml_1=require("../kit-installers/grok-session-toml"),hermes_hooks_yaml_1=require("../kit-installers/hermes-hooks-yaml"),openclaw_config_json_1=require("../kit-installers/openclaw-config-json"),omp_config_yml_1=require("../kit-installers/omp-config-yml"),omp_home_1=require("../omp-home"),pi_home_1=require("../pi-home"),devin_hooks_1=require("../kit-installers/devin-hooks"),devin_home_1=require("../kit-installers/devin-home"),dropped_mcp_servers_1=require("../dropped-mcp-servers"),retired_skills_1=require("../retired-skills"),devin_rules_1=require("../kit-installers/devin-rules"),devin_agents_1=require("../kit-installers/devin-agents"),devin_hooks_2=require("../kit-installers/devin-hooks"),commands_to_skills_1=require("../kit-installers/commands-to-skills"),file_operations_1=require("../file-operations"),package_root_1=require("../package-root"),install_manifest_1=require("../install-manifest"),kit_remover_1=require("../kit-remover"),openclaw_home_1=require("../openclaw-home"),hermes_clear_targets_1=require("../hermes-clear-targets"),global_clear_targets_1=require("../global-clear-targets"),hermes_home_context_1=require("../kit-installers/hermes-home-context"),payload_roots_1=require("../payload-roots"),colors={reset:"\x1B[0m",yellow:"\x1B[33m",cyan:"\x1B[36m"};function projectPlatformDefs(e){return[{key:"claude",name:"Claude Code",dirPath:path.join(e,".claude"),filePaths:[path.join(e,"CLAUDE.md")]},{key:"cursor",name:"Cursor AI",dirPath:path.join(e,".cursor"),filePaths:[path.join(e,"AGENTS.md"),path.join(e,".cursorrules"),path.join(e,"CLAUDE.md")]},{key:"augment",name:"Augment Code",dirPath:path.join(e,".claude"),filePaths:[path.join(e,"CLAUDE.md")]},{key:"antigravity",name:"Antigravity",dirPath:path.join(e,".agents"),filePaths:[path.join(e,"GEMINI.md")]},{key:"opencode",name:"OpenCode",dirPath:path.join(e,".opencode"),filePaths:[]},{key:"codex",name:"OpenAI Codex",dirPath:path.join(e,".codex"),filePaths:[]},{key:"kimi",name:"Kimi Code",dirPath:path.join(e,".kimi-code"),filePaths:[]},{key:"hermes",name:"Hermes Agent",dirPath:path.join(e,".hermes-kit"),filePaths:[],group:(0,ui_1.kitGroup)("hermes")},{key:"openclaw",name:"OpenClaw",dirPath:path.join(e,".openclaw-kit"),filePaths:[],group:(0,ui_1.kitGroup)("openclaw")},{key:"grok",name:"Grok Build",dirPath:path.join(e,".grok"),filePaths:[]},{key:"pi",name:"Pi",dirPath:path.join(e,".pi","agentkit"),filePaths:[]},{key:"devin",name:"Devin CLI",dirPath:path.join(e,".devin"),filePaths:[],requiresMarker:path.join(e,".devin",".agentkit.json"),ownedPaths:[...(0,devin_rules_1.devinOwnedRuleNames)(path.join(e,".devin","rules")).map(i=>path.join(e,".devin","rules",i)),...(0,devin_agents_1.devinOwnedAgentNames)(path.join(e,".devin","agents")).map(i=>path.join(e,".devin","agents",i)),...(0,file_operations_1.shippedSkillEntries)((0,package_root_1.packageRoot)()).map(i=>path.join(e,".devin","skills",i.name)),...(0,commands_to_skills_1.commandSkillNames)(path.join((0,package_root_1.packageRoot)(),payload_roots_1.COMMAND_SOURCE_DIR)).map(i=>path.join(e,".devin","skills",i)),...(0,retired_skills_1.retiredSkillNames)().map(i=>path.join(e,".devin","skills",i)),path.join(e,".devin","scripts"),...(0,devin_hooks_2.devinHookFileNames)().map(i=>path.join(e,".devin",i)),path.join(e,".devin","schemas"),path.join(e,".devin",".agentkit.json"),path.join(e,".devin",".agentkitignore"),path.join(e,".devin",install_manifest_1.MANIFEST_FILENAME)]}]}function globalPlatformDefs(){return[...(0,global_clear_targets_1.globalClearTargets)().map(e=>({...e,filePaths:[]})),...(0,hermes_clear_targets_1.hermesProfileClearTargets)().map(e=>({...e,filePaths:[],group:(0,ui_1.kitGroup)("hermes")}))]}const sharedDirs=["docs","plans"],MAX_LISTED_PATHS=6;function print(e,i="reset"){console.log(`${colors[i]}${e}${colors.reset}`)}function isProjectDir(e){const i=fs.existsSync(path.join(e,"package.json")),n=fs.existsSync(path.join(e,".git"));return i||n}function parseScopeFromArgs(e){return e.includes("--global")||e.includes("-g")?"global":e.includes("--project")||e.includes("-p")?"project":null}function askQuestion(e){const i=readline.createInterface({input:process.stdin,output:process.stdout});return new Promise(n=>{i.question(e,r=>{i.close(),n(r)})})}async function askScope(e){return console.log(""),(0,logger_1.printSection)("Clear Scope"),console.log(" 1) Current project"),console.log(" 2) Global (user machine)"),console.log(""),(await e("Select scope [1-2] (default: 1): ")).trim()==="2"?"global":"project"}function detectInstalledPlatforms(e){return e.map(i=>{const n=!i.requiresMarker||fs.existsSync(i.requiresMarker),r=i.ownedPaths?n&&i.ownedPaths.some(g=>fs.existsSync(g)):fs.existsSync(i.dirPath),o=i.filePaths.some(g=>fs.existsSync(g));return{...i,hasDir:r,hasFiles:o}}).filter(i=>i.hasDir||i.hasFiles)}function detectSharedDirs(e){return sharedDirs.filter(i=>fs.existsSync(path.join(e,i)))}function cleanupGitignore(e,i){const n=path.join(i,".gitignore");if(!fs.existsSync(n))return!1;const r=fs.readFileSync(n,"utf-8").split(`
2
+ `),o=new Set;e.forEach(h=>{const d=h.trim();o.add(d),o.add(d.endsWith("/")?d.slice(0,-1):`${d}/`)});let g=0;const a=r.filter(h=>{const d=h.trim();if(d===""||d.startsWith("#"))return!0;const f=d.endsWith("/")?d.slice(0,-1):d;for(const p of o){const v=p.endsWith("/")?p.slice(0,-1):p;if(f===v)return g++,!1}return!0});return fs.writeFileSync(n,`${a.join(`
3
+ `).replace(/\n+$/,"")}
4
+ `),g>0}async function askConfirmation(e,i){const r=(await e(i)).trim().toLowerCase();return r==="y"||r==="yes"}function removeAgentkitAgentsBlock(e,i="AGENTS.md"){const n=path.join(e,i);if(!fs.existsSync(n))return!1;const r=fs.readFileSync(n,"utf-8");if(!(0,codex_agents_1.hasAikitCodexBlock)(r))return!1;const o=(0,codex_agents_1.stripAikitCodexBlock)(r);return o.removedWholeFile?(0,file_operations_1.removeFile)(n)?((0,logger_1.printSuccess)(`Removed ${n} \u2014 it held nothing but the Agentkit block`),!0):!1:o.removed?(fs.writeFileSync(n,o.content),(0,logger_1.printSuccess)(`Removed the Agentkit block from ${n}`),!0):!1}function displayItems(e,i,n){const r=[];if(e.hasDir&&e.ownedPaths){const o=e.ownedPaths.filter(a=>fs.existsSync(a)),g=o.slice(0,MAX_LISTED_PATHS).map(a=>path.relative(e.dirPath,a));o.length>g.length&&g.push(`+${o.length-g.length} more`),r.push(`${e.dirPath}/{${g.join(", ")}}`)}else e.hasDir&&r.push(i==="global"?e.dirPath:`${path.basename(e.dirPath)}/`);if(e.hasFiles&&r.push(...e.filePaths.map(o=>path.basename(o))),i==="project"&&e.key==="codex"&&fs.existsSync(path.join(n,".agents"))&&r.push(".agents/"),i==="project"&&(e.key==="codex"||e.key==="kimi"||e.key==="grok"||e.key==="devin")&&fs.existsSync(path.join(n,"AGENTS.md"))){const o=fs.readFileSync(path.join(n,"AGENTS.md"),"utf-8");(0,codex_agents_1.hasAikitCodexBlock)(o)&&r.push("AGENTS.md")}if(e.key==="pi"||e.key==="pi-global"){const o=e.key==="pi"?path.join(n,"AGENTS.md"):path.join(e.dirPath,"AGENTS.md");if(fs.existsSync(o))try{(0,codex_agents_1.hasAikitCodexBlock)(fs.readFileSync(o,"utf-8"))&&r.push(path.relative(n,o))}catch{}}return r.join(", ")}async function runClear(e,i={}){const n=i.cwd??process.cwd(),r=i.home??os.homedir(),o=i.question??askQuestion,g=i.selectTargets??ui_1.selectTargetsToRemove;(0,logger_1.printSection)("Agentkit Clear - Remove Installations");let a=parseScopeFromArgs(e);a||(!isProjectDir(n)&&n===r?a="global":a=await askScope(o)),(0,logger_1.printInfo)(`Scanning for Agentkit installations (${a})...`);const h=detectInstalledPlatforms(a==="global"?globalPlatformDefs():projectPlatformDefs(n)),d=a==="project"?detectSharedDirs(n):[];if(h.length===0&&d.length===0)return console.log(""),(0,logger_1.printInfo)(`No Agentkit installations found in ${a==="global"?"global scope":"this project"}.`),console.log(""),0;if(console.log(""),(0,logger_1.printWarning)("Found the following Agentkit installations:"),console.log(""),a==="project"&&d.length>0){print("Shared Directories:","yellow");for(const t of d)print(` \u2022 ${t}/`,"cyan");console.log("")}(0,logger_1.printWarning)("WARNING: This action cannot be undone!"),console.log("");let f=[];if(h.length>0){const t=await g(h.map(s=>({value:s.key,label:s.name,group:s.group??"coding"})));if(t===null)return console.log(""),(0,logger_1.printInfo)("Operation cancelled. No files were removed."),console.log(""),0;f=h.filter(s=>t.includes(s.key))}if(f.length===0&&d.length===0)return console.log(""),(0,logger_1.printInfo)("Nothing selected \u2014 no files were removed."),console.log(""),0;if(f.length>0){console.log("");for(const s of f)print(` \u2022 ${s.name}: ${displayItems(s,a,n)}`,"cyan");if(console.log(""),!await askConfirmation(o,`Remove ${f.length} selected installation${f.length===1?"":"s"}? (y/n): `))return console.log(""),(0,logger_1.printInfo)("Operation cancelled. No files were removed."),console.log(""),0}const p=t=>(0,hermes_clear_targets_1.isHermesProfileKey)(t.key),v=f.filter(p).length,S=v>0&&v===h.filter(p).length;console.log(""),(0,logger_1.printSection)("Removing Agentkit Installations");const k=[];let y=0;for(const t of f){let s=!1;if(t.ownedPaths)for(const l of t.ownedPaths)fs.existsSync(l)&&(0,file_operations_1.removeDir)(l)&&((0,logger_1.printSuccess)(`Removed ${l}`),s=!0);else t.hasDir&&(0,file_operations_1.removeDir)(t.dirPath)&&((0,logger_1.printSuccess)(`Removed ${a==="global"?t.dirPath:`${path.basename(t.dirPath)}/`}`),s=!0,a==="project"&&k.push(`${path.basename(t.dirPath)}/`));if(a==="project"&&t.key==="codex"){const l=path.join(n,".agents");fs.existsSync(l)&&(0,file_operations_1.removeDir)(l)&&((0,logger_1.printSuccess)("Removed .agents/"),s=!0,k.push(".agents/"));const c=path.join(n,"AGENTS.md");if(fs.existsSync(c)){const u=fs.readFileSync(c,"utf-8");if((0,codex_agents_1.hasAikitCodexBlock)(u)){const m=(0,codex_agents_1.stripAikitCodexBlock)(u);m.removedWholeFile?(0,file_operations_1.removeFile)(c)&&((0,logger_1.printSuccess)("Removed AGENTS.md"),s=!0):m.removed&&(fs.writeFileSync(c,m.content),(0,logger_1.printSuccess)("Removed Agentkit Codex block from AGENTS.md"),s=!0)}}}if(t.key==="grok"||t.key==="grok-global"){a==="project"&&removeAgentkitAgentsBlock(n)&&(s=!0);const l=path.join(a==="global"?t.dirPath:path.join(n,".grok"),"config.toml");(0,grok_config_toml_1.removeGrokMcpServers)(l)&&((0,logger_1.printSuccess)(`Removed the Agentkit MCP block from ${l}`),s=!0),(0,grok_session_toml_1.removeGrokSessionDefaults)(l)&&((0,logger_1.printSuccess)(`Removed the Agentkit session block from ${l}`),s=!0)}if((t.key==="kimi"||t.key==="kimi-global")&&(a==="project"&&removeAgentkitAgentsBlock(n)&&(s=!0),(0,kimi_hooks_toml_1.removeKimiHooks)((0,kimi_1.resolveKimiHomeConfig)())&&((0,logger_1.printSuccess)("Removed Agentkit hooks from the Kimi user config"),s=!0)),t.key==="devin"||t.key==="devin-global"){a==="project"&&removeAgentkitAgentsBlock(n)&&(s=!0);const l=path.join(a==="global"?t.dirPath:path.join(n,".devin"),a==="global"?"config.json":"hooks.v1.json");if((0,devin_hooks_1.removeDevinHooks)(l,a==="global"?"hooksKey":"whole")&&((0,logger_1.printSuccess)(`Removed Agentkit hook handlers from ${l}`),s=!0),a==="global"){const u=path.join((0,devin_home_1.resolveDevinHomeDir)(),"rules");let m=0;for(const _ of(0,devin_rules_1.devinOwnedRuleNames)(u))(0,file_operations_1.removeFile)(path.join(u,_))&&(m+=1);m>0&&((0,logger_1.printSuccess)(`Removed ${m} rule(s) from ~/.devin/rules`),s=!0)}const c=path.join(a==="global"?t.dirPath:path.join(n,".devin"),"mcp_config.json");if(fs.existsSync(c)){const{remaining:u}=(0,dropped_mcp_servers_1.removeAgentkitMcpServers)(c);u===0?((0,file_operations_1.removeFile)(c),(0,logger_1.printSuccess)(`Removed ${c}`)):u===null?(0,logger_1.printWarning)(`Kept ${c} \u2014 it could not be read as an mcpServers map`):(0,logger_1.printWarning)(`Kept ${c} \u2014 it still holds ${u} of your own server(s)`),s=!0}}if(t.key==="hermes"&&removeAgentkitAgentsBlock(n)&&(s=!0),t.key==="openclaw-global"){const l=(0,openclaw_home_1.openClawWorkspaceDir)(t.dirPath);removeAgentkitAgentsBlock(l)&&(s=!0);const c=(0,openclaw_config_json_1.unregisterOpenClawKit)((0,openclaw_home_1.openClawConfigPath)(t.dirPath),{skills:path.join(t.dirPath,openclaw_home_1.OPENCLAW_SKILLS_SUBDIR),plugin:path.join(t.dirPath,openclaw_home_1.OPENCLAW_PLUGIN_SUBDIR),legacyHooks:path.join(t.dirPath,openclaw_home_1.OPENCLAW_HOOKS_SUBDIR)});for(const u of c.warnings)(0,logger_1.printWarning)(u);c.removed.length>0&&c.written?((0,logger_1.printSuccess)(`Unregistered ${c.removed.length} directories from openclaw.json`),s=!0):c.removed.length>0&&(0,logger_1.printWarning)(`Could not update ${(0,openclaw_home_1.openClawConfigPath)(t.dirPath)} \u2014 it still registers ${c.removed.length} directories this removal deleted. Edit it by hand, or OpenClaw will scan paths that are no longer there.`)}if(t.key==="omp-global"){removeAgentkitAgentsBlock(t.dirPath)&&(s=!0),removeAgentkitAgentsBlock(t.dirPath,"RULES.md")&&(s=!0);const l=(0,omp_config_yml_1.resolveOmpConfigFile)(t.dirPath),c=(0,omp_config_yml_1.removeOmpSkillsDir)(l,path.join(t.dirPath,omp_home_1.OMP_SKILLS_SUBDIR));for(const u of c.warnings)(0,logger_1.printWarning)(u);c.added.length>0&&c.written?((0,logger_1.printSuccess)(`Unregistered the Agentkit skills directory from ${l}`),s=!0):!c.written&&fs.existsSync(l)&&(0,logger_1.printWarning)(`Could not update ${l} \u2014 it may still register the skills directory this removal deleted. Edit it by hand, or omp will scan a path that is no longer there.`);try{const u=path.join(t.dirPath,omp_home_1.OMP_KIT_SUBDIR);fs.readdirSync(u).length===0&&fs.rmdirSync(u)}catch{}}if((0,hermes_clear_targets_1.isHermesProfileKey)(t.key)){const l=path.join(t.dirPath,"config.yaml");fs.existsSync(l)&&(0,hermes_hooks_yaml_1.removeHermesHooks)(l)&&((0,logger_1.printSuccess)(`Removed Agentkit hooks from ${t.name}'s config`),s=!0),fs.existsSync(l)&&(0,hermes_hooks_yaml_1.removeHermesPlugins)(l)&&((0,logger_1.printSuccess)(`Removed Agentkit plugin registration from ${t.name}'s config`),s=!0),S&&(0,hermes_home_context_1.removeHermesHomeContext)(r)&&((0,logger_1.printSuccess)(`Removed ${hermes_home_context_1.HERMES_HOME_CONTEXT_FILE} from ${r}`),s=!0)}if(t.key==="pi"||t.key==="pi-global"){const l=t.key==="pi-global",c=l?t.dirPath:path.dirname(t.dirPath),u=l?path.join(c,"AGENTS.md"):path.join(n,"AGENTS.md");if((0,kit_remover_1.removePiExtras)(c,u)&&(s=!0),l)try{const m=path.join(c,pi_home_1.PI_KIT_SUBDIR);fs.readdirSync(m).length===0&&fs.rmdirSync(m)}catch{}}for(const l of t.filePaths)(0,file_operations_1.removeFile)(l)&&((0,logger_1.printSuccess)(`Removed ${path.basename(l)}`),s=!0,a==="project"&&k.push(path.basename(l)));s&&y++}if(a==="project"&&d.length>0)if(console.log(""),(0,logger_1.printWarning)("Shared directories (docs/, plans/) may contain your content."),await askConfirmation(o,"Do you want to remove shared directories too? (y/n): "))for(const s of d){const l=path.join(n,s);(0,file_operations_1.removeDir)(l)&&((0,logger_1.printSuccess)(`Removed ${s}/`),k.push(`${s}/`))}else(0,logger_1.printInfo)("Shared directories preserved.");a==="project"&&(console.log(""),(0,logger_1.printInfo)("Cleaning up .gitignore..."),cleanupGitignore(k,n)?(0,logger_1.printSuccess)(".gitignore cleaned"):(0,logger_1.printInfo)(".gitignore already clean"));try{(0,install_registry_1.pruneRegistry)()}catch{}return console.log(""),(0,logger_1.printSection)("Removal Complete"),(0,logger_1.printSuccess)(`Removed ${y} Agentkit platform(s)`),console.log(""),(0,logger_1.printInfo)(`Agentkit ${a} scope is now clean.`),console.log(""),0}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.helpFlagsOnly=exports.helpAnywhere=void 0,exports.runCli=runCli;const helpAnywhere=e=>e.includes("help")||e.includes("--help")||e.includes("-h");exports.helpAnywhere=helpAnywhere;const helpFlagsOnly=e=>e.includes("--help")||e.includes("-h");exports.helpFlagsOnly=helpFlagsOnly;const wantsHelpDefault=e=>e[0]==="help"||e.includes("--help")||e.includes("-h");function runCli(e){if(process.env.JEST_WORKER_ID&&(process.argv[1]??"").includes("jest-worker"))return;const n=process.argv.slice(2),l=n[0]===e.command?n.slice(1):n;if((e.helpArgs??wantsHelpDefault)(l)){e.printHelp();return}new Promise(s=>s(e.handler(l))).then(s=>{typeof s=="number"&&process.exit(s)},s=>{const r=s instanceof Error?s.message:String(s);process.stderr.write(`Error: ${r}
3
+ `),process.exit(1)})}
@@ -1,6 +1,6 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,t,n,o){o===void 0&&(o=n);var s=Object.getOwnPropertyDescriptor(t,n);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,o,s)}):(function(e,t,n,o){o===void 0&&(o=n),e[o]=t[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),__importStar=this&&this.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var o=[];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[o.length]=s);return o},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var o=e(t),s=0;s<o.length;s++)o[s]!=="default"&&__createBinding(n,t,o[s]);return __setModuleDefault(n,t),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkHooks=checkHooks;const fs=__importStar(require("fs")),path=__importStar(require("path")),agentkit_config_file_1=require("../agentkit-config-file"),hook_toggle_registry_1=require("../hook-toggle-registry"),antigravity_1=require("../kit-installers/antigravity"),hermes_home_1=require("../hermes-home"),home_dir_1=require("../home-dir"),hermes_hooks_yaml_1=require("../kit-installers/hermes-hooks-yaml"),kimi_1=require("../kit-installers/kimi"),kimi_hooks_toml_1=require("../kit-installers/kimi-hooks-toml"),hook_manifest_1=require("./hook-manifest"),GROUP="Hooks",MANIFEST_FILE={claude:"settings.json",augment:"settings.json",cursor:"hooks.json",codex:"hooks.json",antigravity:"hooks.json",grok:path.join("hooks","hooks.json"),kimi:"hooks.json",hermes:"hooks.json",devin:"hooks.v1.json"};function checkKimiRegistration(e){const t=e.scope==="global"?path.join(e.kitRoot,"config.toml"):(0,kimi_1.resolveKimiHomeConfig)();if(!fs.existsSync(t))return[{group:GROUP,name:"hooks:kimi-registration",status:"fail",summary:"the Kimi user config does not exist, so no hook can run",detail:t,remedy:"agentkit init"}];if(!fs.readFileSync(t,"utf-8").includes(kimi_hooks_toml_1.AGENTKIT_HOOKS_BEGIN))return[{group:GROUP,name:"hooks:kimi-registration",status:"fail",summary:"no Agentkit hook block in the Kimi user config \u2014 hooks are installed but inert",detail:`${t} has no "${kimi_hooks_toml_1.AGENTKIT_HOOKS_BEGIN}" marker`,remedy:"agentkit init"}];const o=(0,kimi_hooks_toml_1.readRegisteredKimiCommands)(t),s=[{group:GROUP,name:"hooks:kimi-registration",status:"pass",summary:`${o.length} hooks registered in ${t}`}],i=o.filter(u=>{const r=(0,kimi_hooks_toml_1.kimiHookScript)(u);return r!==null&&!fs.existsSync(r)});i.length>0&&s.push({group:GROUP,name:"hooks:kimi-executable",status:"fail",summary:`${i.length} registered hook command(s) name a file that is gone \u2014 they fail open, silently`,detail:i.join(`
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,t,n,o){o===void 0&&(o=n);var s=Object.getOwnPropertyDescriptor(t,n);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,o,s)}):(function(e,t,n,o){o===void 0&&(o=n),e[o]=t[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),__importStar=this&&this.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var o=[];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[o.length]=s);return o},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var o=e(t),s=0;s<o.length;s++)o[s]!=="default"&&__createBinding(n,t,o[s]);return __setModuleDefault(n,t),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkHooks=checkHooks;const fs=__importStar(require("fs")),path=__importStar(require("path")),agentkit_config_file_1=require("../agentkit-config-file"),hook_toggle_registry_1=require("../hook-toggle-registry"),antigravity_1=require("../kit-installers/antigravity"),hermes_home_1=require("../hermes-home"),home_dir_1=require("../home-dir"),hermes_hooks_yaml_1=require("../kit-installers/hermes-hooks-yaml"),kimi_1=require("../kit-installers/kimi"),kimi_hooks_toml_1=require("../kit-installers/kimi-hooks-toml"),hook_manifest_1=require("./hook-manifest"),payload_roots_1=require("../payload-roots"),GROUP="Hooks",MANIFEST_FILE={claude:"settings.json",augment:"settings.json",cursor:"hooks.json",codex:"hooks.json",antigravity:"hooks.json",grok:path.join("hooks","hooks.json"),kimi:"hooks.json",hermes:"hooks.json",devin:"hooks.v1.json"};function checkKimiRegistration(e){const t=e.scope==="global"?path.join(e.kitRoot,"config.toml"):(0,kimi_1.resolveKimiHomeConfig)();if(!fs.existsSync(t))return[{group:GROUP,name:"hooks:kimi-registration",status:"fail",summary:"the Kimi user config does not exist, so no hook can run",detail:t,remedy:"agentkit init"}];if(!fs.readFileSync(t,"utf-8").includes(kimi_hooks_toml_1.AGENTKIT_HOOKS_BEGIN))return[{group:GROUP,name:"hooks:kimi-registration",status:"fail",summary:"no Agentkit hook block in the Kimi user config \u2014 hooks are installed but inert",detail:`${t} has no "${kimi_hooks_toml_1.AGENTKIT_HOOKS_BEGIN}" marker`,remedy:"agentkit init"}];const o=(0,kimi_hooks_toml_1.readRegisteredKimiCommands)(t),s=[{group:GROUP,name:"hooks:kimi-registration",status:"pass",summary:`${o.length} hooks registered in ${t}`}],i=o.filter(u=>{const r=(0,kimi_hooks_toml_1.kimiHookScript)(u);return r!==null&&!fs.existsSync(r)});i.length>0&&s.push({group:GROUP,name:"hooks:kimi-executable",status:"fail",summary:`${i.length} registered hook command(s) name a file that is gone \u2014 they fail open, silently`,detail:i.join(`
2
2
  `),remedy:"agentkit init"});const a=path.join(e.kitRoot,"hooks")+path.sep,l=o.filter(u=>{const r=(0,kimi_hooks_toml_1.kimiHookScript)(u);return r!==null&&fs.existsSync(r)&&!r.startsWith(a)});return l.length>0&&s.push({group:GROUP,name:"hooks:kimi-owner",status:"fail",summary:`${l.length} registered hook command(s) belong to a different install \u2014 this kit's hooks never run`,detail:`${l.join(`
3
3
  `)}
4
4
 
5
5
  expected under ${a}`,remedy:"agentkit init"}),s}function checkHermesRegistration(e){const t=path.join((0,hermes_home_1.resolveHermesProfileRoot)(),"config.yaml"),n=[],o=(0,hermes_hooks_yaml_1.readRegisteredHermesCommands)(t);if(o.length===0)n.push({group:GROUP,name:"hooks:hermes-registration",status:e.scope==="global"?"fail":"warn",summary:e.scope==="global"?"no Agentkit hook block in the Hermes profile config \u2014 hooks are installed but inert":"no hooks registered; this payload registers none until the profile is installed",detail:t,remedy:e.scope==="global"?"agentkit init":`hermes profile install ./${path.basename(e.kitRoot)} --name ${hermes_home_1.HERMES_DISTRIBUTION_PROFILE}`});else{n.push({group:GROUP,name:"hooks:hermes-registration",status:"pass",summary:`${o.length} hooks registered in ${t}`});const s=o.filter(i=>{const a=(0,hermes_hooks_yaml_1.hermesHookExecutable)(i,(0,home_dir_1.homeDir)());try{return!(fs.statSync(a).mode&73)}catch{return!0}});s.length>0&&n.push({group:GROUP,name:"hooks:hermes-executable",status:"fail",summary:`${s.length} registered hook command(s) cannot be executed \u2014 they fail open, silently`,detail:s.join(`
6
- `),remedy:"agentkit init"})}if(e.scope==="project")for(const s of[".hermes.md","HERMES.md"]){const i=path.join(path.dirname(e.kitRoot),s);if(fs.existsSync(i)){n.push({group:GROUP,name:"hooks:hermes-agents-shadow",status:"warn",summary:`${s} outranks AGENTS.md \u2014 the Agentkit block is not being read`,detail:i,remedy:`merge ${s} into AGENTS.md, or remove it`});break}}return n}function hooksBaseDir(e){return e.kit==="antigravity"&&e.scope==="global"?path.join(e.kitRoot,antigravity_1.ANTIGRAVITY_PLUGIN_REL):e.kitRoot}const LOAD_CHECKER_CALL=/loadChecker\(\s*['"]([\w.-]+)['"]/g;function checkOpenCodePlugins(e,t){const n=path.join(e.kitRoot,"plugins"),o=path.join(t,"agent-kit","opencode","plugins"),s=fs.existsSync(o)?fs.readdirSync(o,{withFileTypes:!0}).filter(r=>r.isFile()&&r.name.endsWith(".js")).map(r=>r.name):[];if(s.length===0)return[{group:GROUP,name:"hooks:manifest",status:"skip",summary:"opencode ships no hook manifest \u2014 it loads a plugin instead"}];const i=[],a=s.filter(r=>!fs.existsSync(path.join(n,r)));i.push(a.length===0?{group:GROUP,name:"hooks:plugins",status:"pass",summary:`${s.length} plugin(s) present (opencode auto-loads plugins/, no manifest)`}:{group:GROUP,name:"hooks:plugins",status:"fail",summary:`${a.length} plugin(s) missing \u2014 opencode has no hooks without them`,detail:a.join(", "),remedy:"agentkit init"});const l=new Set;for(const r of s){const h=path.join(n,r);if(!fs.existsSync(h))continue;const c=fs.readFileSync(h,"utf-8");for(const m of c.matchAll(LOAD_CHECKER_CALL))fs.existsSync(path.join(n,"lib",m[1]))||l.add(m[1])}const u=[...l];return u.length>0?i.push({group:GROUP,name:"hooks:plugin-checkers",status:"fail",summary:`${u.length} security checker(s) missing \u2014 the plugin fails OPEN without them`,detail:`${[...new Set(u)].join(", ")} \u2014 guarded tools stop being guarded, and the warning only reaches the server log`,remedy:"agentkit init"}):i.push({group:GROUP,name:"hooks:plugin-checkers",status:"pass",summary:"every checker the plugin loads is present"}),i}function guardSiblingSources(e){let t;try{t=fs.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isFile()&&n.name.endsWith(".js")&&n.name!=="index.js").map(n=>n.name)}catch{return[]}return t.flatMap(n=>{try{return[fs.readFileSync(path.join(e,n),"utf-8")]}catch{return[]}})}const EXTENSION_GUARDS={omp:{rowLabel:"omp",loaderRel:path.join("extensions","agentkit-guard.js"),discovery:"omp auto-loads extensions/, no manifest"}};function checkExtensionGuard(e,t){const n=path.dirname(e.kitRoot),o=path.join(n,t.loaderRel),s=path.join(e.kitRoot,"guard","index.js"),i=`hooks:${t.rowLabel}`;if(!fs.existsSync(o))return[{group:GROUP,name:`${i}-loader`,status:"fail",summary:`no guard extension in the ${t.rowLabel} extensions directory \u2014 the session is unguarded`,detail:o,remedy:"agentkit init"}];const a=[{group:GROUP,name:`${i}-loader`,status:"pass",summary:`guard extension registered (${t.discovery})`}];if(!fs.existsSync(s))return a.push({group:GROUP,name:`${i}-guard`,status:"fail",summary:"the guard the extension loads is missing \u2014 the host will fail to import it",detail:s,remedy:"agentkit init"}),a;let l;try{l=fs.readFileSync(s,"utf-8")}catch(h){return a.push({group:GROUP,name:`${i}-guard`,status:"fail",summary:"the guard the extension loads cannot be read \u2014 the host will fail to import it",detail:`${s}: ${h.message}`,remedy:"agentkit init"}),a}const u=path.join(e.kitRoot,"guard"),r=[...new Set([l,...guardSiblingSources(u)].flatMap(h=>[...h.matchAll(LOAD_CHECKER_CALL)].map(c=>c[1])))].filter(h=>!fs.existsSync(path.join(u,"lib",h)));return a.push(r.length>0?{group:GROUP,name:`${i}-checkers`,status:"fail",summary:`${r.length} security checker(s) missing \u2014 the guard loses them silently`,detail:`${[...new Set(r)].join(", ")} \u2014 the warning only reaches the ${t.rowLabel} log`,remedy:"agentkit init"}:{group:GROUP,name:`${i}-checkers`,status:"pass",summary:"every checker the guard loads is present"}),a}function manifestFileFor(e){return e.kit==="devin"?e.scope==="global"?"config.json":"hooks.v1.json":MANIFEST_FILE[e.kit]}function checkManifest(e,t){if(e.kit==="opencode")return checkOpenCodePlugins(e,t);const n=EXTENSION_GUARDS[e.kit];if(n)return checkExtensionGuard(e,n);const o=manifestFileFor(e);if(!o)return[{group:GROUP,name:"hooks:manifest",status:"skip",summary:`${e.kit} ships no hook manifest`}];const s=hooksBaseDir(e),i=path.join(s,o),a=e.kit==="hermes"?path.join(s,"hooks","agentkit"):path.join(s,"hooks");if(!fs.existsSync(i)||!fs.existsSync(a))return[{group:GROUP,name:"hooks:manifest",status:"skip",summary:`no hook manifest in this install (${e.scope} scope)`,detail:i},...e.kit==="hermes"?checkHermesRegistration(e):[]];let l;try{l=(0,hook_manifest_1.registeredHookFiles)(i)}catch(m){return[{group:GROUP,name:"hooks:manifest",status:"fail",summary:`${o} could not be parsed`,detail:m.message,remedy:"agentkit init"}]}const u=[],r=l.filter(m=>!fs.existsSync(path.join(a,m)));u.push(r.length===0?{group:GROUP,name:"hooks:registered-files",status:"pass",summary:`${l.length} registered hook(s), all present`}:{group:GROUP,name:"hooks:registered-files",status:"fail",summary:`${r.length} registered hook(s) name a missing file`,detail:r.join(", "),remedy:"agentkit init"});const h=(0,hook_manifest_1.reachableFrom)(a,l),c=(0,hook_manifest_1.topLevelHookFiles)(a).filter(m=>!h.has(m));return c.length>0&&u.push({group:GROUP,name:"hooks:unregistered-files",status:"warn",summary:`${c.length} hook file(s) are registered by nothing and required by nothing`,detail:c.join(", "),remedy:"agentkit init"}),e.kit==="kimi"&&u.push(...checkKimiRegistration(e)),e.kit==="hermes"&&u.push(...checkHermesRegistration(e)),u}function checkToggleConfig(e,t){const n=(0,agentkit_config_file_1.readSection)((0,agentkit_config_file_1.readKitConfig)(e.configPath),"hooks"),o=Object.keys(n);if(o.length===0)return[{group:GROUP,name:"hooks:config",status:"pass",summary:"no hook overrides set"}];const s=(0,hook_toggle_registry_1.hookRegistry)(t),i=new Map(s.map(r=>[r.name,r])),a=[],l=o.filter(r=>!i.has(r));l.length>0&&a.push({group:GROUP,name:"hooks:unknown-keys",status:"fail",summary:`${l.length} hook key(s) are not real toggles`,detail:l.join(", "),remedy:"agentkit hooks list"});const u=o.filter(r=>i.has(r)&&!i.get(r).readBy.has(e.kit));return u.length>0&&a.push({group:GROUP,name:"hooks:unread-keys",status:"warn",summary:`${u.length} hook toggle(s) set here are not read by ${e.kit}`,detail:`${u.join(", ")} \u2014 kept, and effective if you switch kits`}),a.length===0&&a.push({group:GROUP,name:"hooks:config",status:"pass",summary:`${o.length} hook override(s), all read by ${e.kit}`}),a}function checkGrokCompatDuplication(e){if(e.kit!=="grok"||e.scope!=="project")return[];const t=path.dirname(e.kitRoot),o=[["claude",path.join(t,".claude","rules")],["cursor",path.join(t,".cursor","rules")]].filter(([,i])=>fs.existsSync(i));if(o.length===0)return[{group:GROUP,name:"hooks:grok-compat-duplication",status:"pass",summary:"no other kit\u2019s rules directory shares this project"}];const s=o.map(([i])=>i);return[{group:GROUP,name:"hooks:grok-compat-duplication",status:"warn",summary:`Grok also loads ${s.join(" and ")} rules from this project, so the same guidance arrives twice`,detail:o.map(([,i])=>i).join(", "),remedy:s.map(i=>`set [compat.${i}] rules = false in ~/.grok/config.toml`).join("; ")}]}function checkHooks(e,t){return[...checkManifest(e,t),...checkToggleConfig(e,t),...checkGrokCompatDuplication(e)]}
6
+ `),remedy:"agentkit init"})}if(e.scope==="project")for(const s of[".hermes.md","HERMES.md"]){const i=path.join(path.dirname(e.kitRoot),s);if(fs.existsSync(i)){n.push({group:GROUP,name:"hooks:hermes-agents-shadow",status:"warn",summary:`${s} outranks AGENTS.md \u2014 the Agentkit block is not being read`,detail:i,remedy:`merge ${s} into AGENTS.md, or remove it`});break}}return n}function hooksBaseDir(e){return e.kit==="antigravity"&&e.scope==="global"?path.join(e.kitRoot,antigravity_1.ANTIGRAVITY_PLUGIN_REL):e.kitRoot}const LOAD_CHECKER_CALL=/loadChecker\(\s*['"]([\w.-]+)['"]/g;function checkOpenCodePlugins(e,t){const n=path.join(e.kitRoot,"plugins"),o=path.join(t,payload_roots_1.AGENT_KIT_DIR,"opencode","plugins"),s=fs.existsSync(o)?fs.readdirSync(o,{withFileTypes:!0}).filter(r=>r.isFile()&&r.name.endsWith(".js")).map(r=>r.name):[];if(s.length===0)return[{group:GROUP,name:"hooks:manifest",status:"skip",summary:"opencode ships no hook manifest \u2014 it loads a plugin instead"}];const i=[],a=s.filter(r=>!fs.existsSync(path.join(n,r)));i.push(a.length===0?{group:GROUP,name:"hooks:plugins",status:"pass",summary:`${s.length} plugin(s) present (opencode auto-loads plugins/, no manifest)`}:{group:GROUP,name:"hooks:plugins",status:"fail",summary:`${a.length} plugin(s) missing \u2014 opencode has no hooks without them`,detail:a.join(", "),remedy:"agentkit init"});const l=new Set;for(const r of s){const h=path.join(n,r);if(!fs.existsSync(h))continue;const c=fs.readFileSync(h,"utf-8");for(const m of c.matchAll(LOAD_CHECKER_CALL))fs.existsSync(path.join(n,"lib",m[1]))||l.add(m[1])}const u=[...l];return u.length>0?i.push({group:GROUP,name:"hooks:plugin-checkers",status:"fail",summary:`${u.length} security checker(s) missing \u2014 the plugin fails OPEN without them`,detail:`${[...new Set(u)].join(", ")} \u2014 guarded tools stop being guarded, and the warning only reaches the server log`,remedy:"agentkit init"}):i.push({group:GROUP,name:"hooks:plugin-checkers",status:"pass",summary:"every checker the plugin loads is present"}),i}function guardSiblingSources(e){let t;try{t=fs.readdirSync(e,{withFileTypes:!0}).filter(n=>n.isFile()&&n.name.endsWith(".js")&&n.name!=="index.js").map(n=>n.name)}catch{return[]}return t.flatMap(n=>{try{return[fs.readFileSync(path.join(e,n),"utf-8")]}catch{return[]}})}const EXTENSION_GUARDS={omp:{rowLabel:"omp",loaderRel:path.join("extensions","agentkit-guard.js"),discovery:"omp auto-loads extensions/, no manifest"}};function checkExtensionGuard(e,t){const n=path.dirname(e.kitRoot),o=path.join(n,t.loaderRel),s=path.join(e.kitRoot,"guard","index.js"),i=`hooks:${t.rowLabel}`;if(!fs.existsSync(o))return[{group:GROUP,name:`${i}-loader`,status:"fail",summary:`no guard extension in the ${t.rowLabel} extensions directory \u2014 the session is unguarded`,detail:o,remedy:"agentkit init"}];const a=[{group:GROUP,name:`${i}-loader`,status:"pass",summary:`guard extension registered (${t.discovery})`}];if(!fs.existsSync(s))return a.push({group:GROUP,name:`${i}-guard`,status:"fail",summary:"the guard the extension loads is missing \u2014 the host will fail to import it",detail:s,remedy:"agentkit init"}),a;let l;try{l=fs.readFileSync(s,"utf-8")}catch(h){return a.push({group:GROUP,name:`${i}-guard`,status:"fail",summary:"the guard the extension loads cannot be read \u2014 the host will fail to import it",detail:`${s}: ${h.message}`,remedy:"agentkit init"}),a}const u=path.join(e.kitRoot,"guard"),r=[...new Set([l,...guardSiblingSources(u)].flatMap(h=>[...h.matchAll(LOAD_CHECKER_CALL)].map(c=>c[1])))].filter(h=>!fs.existsSync(path.join(u,"lib",h)));return a.push(r.length>0?{group:GROUP,name:`${i}-checkers`,status:"fail",summary:`${r.length} security checker(s) missing \u2014 the guard loses them silently`,detail:`${[...new Set(r)].join(", ")} \u2014 the warning only reaches the ${t.rowLabel} log`,remedy:"agentkit init"}:{group:GROUP,name:`${i}-checkers`,status:"pass",summary:"every checker the guard loads is present"}),a}function manifestFileFor(e){return e.kit==="devin"?e.scope==="global"?"config.json":"hooks.v1.json":MANIFEST_FILE[e.kit]}function checkManifest(e,t){if(e.kit==="opencode")return checkOpenCodePlugins(e,t);const n=EXTENSION_GUARDS[e.kit];if(n)return checkExtensionGuard(e,n);const o=manifestFileFor(e);if(!o)return[{group:GROUP,name:"hooks:manifest",status:"skip",summary:`${e.kit} ships no hook manifest`}];const s=hooksBaseDir(e),i=path.join(s,o),a=e.kit==="hermes"?path.join(s,"hooks","agentkit"):path.join(s,"hooks");if(!fs.existsSync(i)||!fs.existsSync(a))return[{group:GROUP,name:"hooks:manifest",status:"skip",summary:`no hook manifest in this install (${e.scope} scope)`,detail:i},...e.kit==="hermes"?checkHermesRegistration(e):[]];let l;try{l=(0,hook_manifest_1.registeredHookFiles)(i)}catch(m){return[{group:GROUP,name:"hooks:manifest",status:"fail",summary:`${o} could not be parsed`,detail:m.message,remedy:"agentkit init"}]}const u=[],r=l.filter(m=>!fs.existsSync(path.join(a,m)));u.push(r.length===0?{group:GROUP,name:"hooks:registered-files",status:"pass",summary:`${l.length} registered hook(s), all present`}:{group:GROUP,name:"hooks:registered-files",status:"fail",summary:`${r.length} registered hook(s) name a missing file`,detail:r.join(", "),remedy:"agentkit init"});const h=(0,hook_manifest_1.reachableFrom)(a,l),c=(0,hook_manifest_1.topLevelHookFiles)(a).filter(m=>!h.has(m));return c.length>0&&u.push({group:GROUP,name:"hooks:unregistered-files",status:"warn",summary:`${c.length} hook file(s) are registered by nothing and required by nothing`,detail:c.join(", "),remedy:"agentkit init"}),e.kit==="kimi"&&u.push(...checkKimiRegistration(e)),e.kit==="hermes"&&u.push(...checkHermesRegistration(e)),u}function checkToggleConfig(e,t){const n=(0,agentkit_config_file_1.readSection)((0,agentkit_config_file_1.readKitConfig)(e.configPath),"hooks"),o=Object.keys(n);if(o.length===0)return[{group:GROUP,name:"hooks:config",status:"pass",summary:"no hook overrides set"}];const s=(0,hook_toggle_registry_1.hookRegistry)(t),i=new Map(s.map(r=>[r.name,r])),a=[],l=o.filter(r=>!i.has(r));l.length>0&&a.push({group:GROUP,name:"hooks:unknown-keys",status:"fail",summary:`${l.length} hook key(s) are not real toggles`,detail:l.join(", "),remedy:"agentkit hooks list"});const u=o.filter(r=>i.has(r)&&!i.get(r).readBy.has(e.kit));return u.length>0&&a.push({group:GROUP,name:"hooks:unread-keys",status:"warn",summary:`${u.length} hook toggle(s) set here are not read by ${e.kit}`,detail:`${u.join(", ")} \u2014 kept, and effective if you switch kits`}),a.length===0&&a.push({group:GROUP,name:"hooks:config",status:"pass",summary:`${o.length} hook override(s), all read by ${e.kit}`}),a}function checkGrokCompatDuplication(e){if(e.kit!=="grok"||e.scope!=="project")return[];const t=path.dirname(e.kitRoot),o=[["claude",path.join(t,".claude","rules")],["cursor",path.join(t,".cursor","rules")]].filter(([,i])=>fs.existsSync(i));if(o.length===0)return[{group:GROUP,name:"hooks:grok-compat-duplication",status:"pass",summary:"no other kit\u2019s rules directory shares this project"}];const s=o.map(([i])=>i);return[{group:GROUP,name:"hooks:grok-compat-duplication",status:"warn",summary:`Grok also loads ${s.join(" and ")} rules from this project, so the same guidance arrives twice`,detail:o.map(([,i])=>i).join(", "),remedy:s.map(i=>`set [compat.${i}] rules = false in ~/.grok/config.toml`).join("; ")}]}function checkHooks(e,t){return[...checkManifest(e,t),...checkToggleConfig(e,t),...checkGrokCompatDuplication(e)]}
@@ -1 +1 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,t,r,i){i===void 0&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}):(function(e,t,r,i){i===void 0&&(i=r),e[i]=t[r]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),__importStar=this&&this.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var i=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(i[i.length]=s);return i},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var i=e(t),s=0;s<i.length;s++)i[s]!=="default"&&__createBinding(r,t,i[s]);return __setModuleDefault(r,t),r}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.rulesDirFor=rulesDirFor,exports.checkRules=checkRules;const fs=__importStar(require("fs")),path=__importStar(require("path")),antigravity_1=require("../kit-installers/antigravity"),hermes_distribution_1=require("../kit-installers/hermes-distribution"),rules_digest_1=require("../kit-installers/rules-digest"),omp_home_1=require("../omp-home"),devin_home_1=require("../kit-installers/devin-home"),profile_resolution_1=require("./profile-resolution"),profile_rules_1=require("../profile-rules"),kit_layout_1=require("./kit-layout"),GROUP="Rules";function rulesDirFor(e){return e.kit==="antigravity"?path.join(e.kitRoot,antigravity_1.ANTIGRAVITY_PLUGIN_REL,"rules"):e.kit==="omp"?path.join(path.dirname(e.kitRoot),omp_home_1.OMP_RULES_DIR):e.kit==="devin"&&e.scope==="global"?path.join((0,devin_home_1.resolveDevinHomeDir)(),"rules"):path.join(e.kitRoot,"rules")}const NON_RULE_FILES=new Set(rules_digest_1.DIGEST_SLOTS.map(e=>e.replace(/\.mdc?$/,"")));function ruleNames(e){return fs.existsSync(e)?fs.readdirSync(e).filter(t=>t.endsWith(".md")||t.endsWith(".mdc")).map(t=>t.replace(/\.mdc?$/,"")).filter(t=>!NON_RULE_FILES.has(t)).sort():[]}function excludedFor(e){const t=e==="hermes"?hermes_distribution_1.EXCLUDED_RULES:[];return new Set(t.map(r=>r.replace(/\.mdc?$/,"")))}function checkGrokRulesReachable(e){if(e.kit!=="grok"||e.scope!=="project")return[];const t=path.join(path.dirname(e.kitRoot),"AGENTS.md");return[fs.existsSync(t)&&fs.readFileSync(t,"utf8").includes(rules_digest_1.DIGEST_HEADING)?{group:GROUP,name:"rules:grok-index",status:"pass",summary:"AGENTS.md carries the rules digest, which is how the rules reach Grok here",detail:t}:{group:GROUP,name:"rules:grok-index",status:"fail",summary:"AGENTS.md carries no rules digest \u2014 the installer keeps .grok/ gitignored, and Grok skips a gitignored project rules directory, so nothing in .grok/rules reaches the model",detail:t,remedy:"agentkit init"}]}function checkRules(e,t){if(kit_layout_1.KIT_LAYOUTS[e.kit].hasAgentkitSkills===!1)return[{group:GROUP,name:"rules:expected-set",status:"skip",summary:"this kit ships no Agentkit rules \u2014 its snapshot replaces that surface"}];const r=path.join(t,"rules"),i=excludedFor(e.kit),{profile:s}=(0,profile_resolution_1.resolveCheckProfile)(e,t),h=s?new Set((0,profile_rules_1.ruleSkipFor)(s)):new Set,o=ruleNames(r).filter(n=>!i.has(n)&&!h.has(n));if(o.length===0)return[{group:GROUP,name:"rules:expected-set",status:"skip",summary:"cannot verify \u2014 this CLI ships no rules directory to compare against",detail:r}];const a=rulesDirFor(e),d=new Set(ruleNames(a)),l=o.filter(n=>!d.has(n)),u=[];u.push(l.length===0?{group:GROUP,name:"rules:expected-set",status:"pass",summary:`${o.length} rule(s) installed`,detail:a}:{group:GROUP,name:"rules:expected-set",status:"fail",summary:`${l.length} of ${o.length} rule(s) missing \u2014 the agent never sees them`,detail:`${l.join(", ")} (expected in ${a})`,remedy:"agentkit init"});const p=new Set([...o,...i]),c=[...d].filter(n=>!p.has(n));return c.length>0&&u.push({group:GROUP,name:"rules:orphaned",status:"warn",summary:`${c.length} installed rule(s) are no longer in the kit`,detail:`${c.join(", ")} \u2014 a rule this CLI dropped is still loading`,remedy:"agentkit init"}),u.push(...checkGrokRulesReachable(e)),u}
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,t,r,i){i===void 0&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}):(function(e,t,r,i){i===void 0&&(i=r),e[i]=t[r]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),__importStar=this&&this.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var i=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(i[i.length]=s);return i},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var i=e(t),s=0;s<i.length;s++)i[s]!=="default"&&__createBinding(r,t,i[s]);return __setModuleDefault(r,t),r}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.rulesDirFor=rulesDirFor,exports.checkRules=checkRules;const fs=__importStar(require("fs")),path=__importStar(require("path")),antigravity_1=require("../kit-installers/antigravity"),hermes_distribution_1=require("../kit-installers/hermes-distribution"),rules_digest_1=require("../kit-installers/rules-digest"),omp_home_1=require("../omp-home"),devin_home_1=require("../kit-installers/devin-home"),profile_resolution_1=require("./profile-resolution"),profile_rules_1=require("../profile-rules"),kit_layout_1=require("./kit-layout"),payload_roots_1=require("../payload-roots"),GROUP="Rules";function rulesDirFor(e){return e.kit==="antigravity"?path.join(e.kitRoot,antigravity_1.ANTIGRAVITY_PLUGIN_REL,"rules"):e.kit==="omp"?path.join(path.dirname(e.kitRoot),omp_home_1.OMP_RULES_DIR):e.kit==="devin"&&e.scope==="global"?path.join((0,devin_home_1.resolveDevinHomeDir)(),"rules"):path.join(e.kitRoot,"rules")}const NON_RULE_FILES=new Set(rules_digest_1.DIGEST_SLOTS.map(e=>e.replace(/\.mdc?$/,"")));function ruleNames(e){return fs.existsSync(e)?fs.readdirSync(e).filter(t=>t.endsWith(".md")||t.endsWith(".mdc")).map(t=>t.replace(/\.mdc?$/,"")).filter(t=>!NON_RULE_FILES.has(t)).sort():[]}function excludedFor(e){const t=e==="hermes"?hermes_distribution_1.EXCLUDED_RULES:[];return new Set(t.map(r=>r.replace(/\.mdc?$/,"")))}function checkGrokRulesReachable(e){if(e.kit!=="grok"||e.scope!=="project")return[];const t=path.join(path.dirname(e.kitRoot),"AGENTS.md");return[fs.existsSync(t)&&fs.readFileSync(t,"utf8").includes(rules_digest_1.DIGEST_HEADING)?{group:GROUP,name:"rules:grok-index",status:"pass",summary:"AGENTS.md carries the rules digest, which is how the rules reach Grok here",detail:t}:{group:GROUP,name:"rules:grok-index",status:"fail",summary:"AGENTS.md carries no rules digest \u2014 the installer keeps .grok/ gitignored, and Grok skips a gitignored project rules directory, so nothing in .grok/rules reaches the model",detail:t,remedy:"agentkit init"}]}function checkRules(e,t){if(kit_layout_1.KIT_LAYOUTS[e.kit].hasAgentkitSkills===!1)return[{group:GROUP,name:"rules:expected-set",status:"skip",summary:"this kit ships no Agentkit rules \u2014 its snapshot replaces that surface"}];const r=path.join(t,payload_roots_1.RULES_SOURCE_DIR),i=excludedFor(e.kit),{profile:s}=(0,profile_resolution_1.resolveCheckProfile)(e,t),p=s?new Set((0,profile_rules_1.ruleSkipFor)(s)):new Set,o=ruleNames(r).filter(n=>!i.has(n)&&!p.has(n));if(o.length===0)return[{group:GROUP,name:"rules:expected-set",status:"skip",summary:"cannot verify \u2014 this CLI ships no rules directory to compare against",detail:r}];const a=rulesDirFor(e),d=new Set(ruleNames(a)),l=o.filter(n=>!d.has(n)),u=[];u.push(l.length===0?{group:GROUP,name:"rules:expected-set",status:"pass",summary:`${o.length} rule(s) installed`,detail:a}:{group:GROUP,name:"rules:expected-set",status:"fail",summary:`${l.length} of ${o.length} rule(s) missing \u2014 the agent never sees them`,detail:`${l.join(", ")} (expected in ${a})`,remedy:"agentkit init"});const h=new Set([...o,...i]),c=[...d].filter(n=>!h.has(n));return c.length>0&&u.push({group:GROUP,name:"rules:orphaned",status:"warn",summary:`${c.length} installed rule(s) are no longer in the kit`,detail:`${c.join(", ")} \u2014 a rule this CLI dropped is still loading`,remedy:"agentkit init"}),u.push(...checkGrokRulesReachable(e)),u}
@@ -1 +1 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(s,e,i,t){t===void 0&&(t=i);var l=Object.getOwnPropertyDescriptor(e,i);(!l||("get"in l?!e.__esModule:l.writable||l.configurable))&&(l={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(s,t,l)}):(function(s,e,i,t){t===void 0&&(t=i),s[t]=e[i]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(s,e){Object.defineProperty(s,"default",{enumerable:!0,value:e})}):function(s,e){s.default=e}),__importStar=this&&this.__importStar||(function(){var s=function(e){return s=Object.getOwnPropertyNames||function(i){var t=[];for(var l in i)Object.prototype.hasOwnProperty.call(i,l)&&(t[t.length]=l);return t},s(e)};return function(e){if(e&&e.__esModule)return e;var i={};if(e!=null)for(var t=s(e),l=0;l<t.length;l++)t[l]!=="default"&&__createBinding(i,e,t[l]);return __setModuleDefault(i,e),i}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkSkills=checkSkills;const fs=__importStar(require("fs")),path=__importStar(require("path")),generate_catalogs_1=require("../../generate-catalogs"),install_profile_config_1=require("../install-profile-config"),skill_profiles_1=require("../skill-profiles"),profile_resolution_1=require("./profile-resolution"),kit_layout_1=require("./kit-layout"),GROUP="Skills";function isCommandSkill(s){try{const i=fs.readFileSync(path.join(s,"SKILL.md"),"utf8").match(/^---\r?\n([\s\S]*?)\r?\n---/)?.[1]??"";return/^agentkit_command\s*:\s*true\s*$/m.test(i)}catch{return!1}}function checkSkills(s,e){if(kit_layout_1.KIT_LAYOUTS[s.kit].hasAgentkitSkills===!1)return[{group:GROUP,name:"skills:expected-set",status:"skip",summary:"this kit ships no Agentkit skills \u2014 its snapshot replaces that surface"}];const i=(0,install_profile_config_1.readInstallSettings)(s.configPath),{profile:t,inferred:l}=(0,profile_resolution_1.resolveCheckProfile)(s,e);if(!t)return[{group:GROUP,name:"skills:expected-set",status:"skip",summary:"cannot verify \u2014 this global install recorded no profile",detail:"Re-run `agentkit init` in your home directory to record one.",remedy:"agentkit init"}];const u=(0,generate_catalogs_1.collectSkills)(e).map(n=>n.name),p=new Set((0,skill_profiles_1.resolveSkipDirs)(e,t,i.extraSkills)),g=u.filter(n=>!p.has(n)),c=(0,profile_resolution_1.installedSkillNames)(s.destSkillsDir),h=new Set(c),r=[],f=g.filter(n=>!h.has(n));r.push(f.length===0?{group:GROUP,name:"skills:expected-set",status:"pass",summary:`${g.length} skill(s) present for the ${t} profile${l?" (inferred)":""}`}:{group:GROUP,name:"skills:expected-set",status:"fail",summary:`${f.length} skill(s) missing for the ${t} profile`,detail:f.join(", "),remedy:"agentkit init"});const m=new Set(u),d=c.filter(n=>m.has(n)&&!fs.existsSync(path.join(s.destSkillsDir,n,"SKILL.md")));d.length>0?r.push({group:GROUP,name:"skills:skill-md",status:"fail",summary:`${d.length} installed skill(s) have no SKILL.md`,detail:d.join(", "),remedy:"agentkit init"}):r.push({group:GROUP,name:"skills:skill-md",status:"pass",summary:"every installed skill has a SKILL.md"});const a=i.extraSkills.filter(n=>!u.includes(n));a.length>0&&r.push({group:GROUP,name:"skills:stale-extras",status:"warn",summary:`install.extraSkills names ${a.length} skill(s) the catalog does not have`,detail:a.join(", "),remedy:`agentkit skills remove ${a.join(" ")}`});const o=c.filter(n=>p.has(n)&&!isCommandSkill(path.join(s.destSkillsDir,n)));return o.length>0&&r.push({group:GROUP,name:"skills:profile-excluded",status:"warn",summary:`${o.length} installed skill(s) are excluded by the ${t} profile`,detail:`${o.join(", ")} \u2014 a re-install will purge these`,remedy:`agentkit skills add ${o.join(" ")}`}),r}
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(s,e,i,t){t===void 0&&(t=i);var l=Object.getOwnPropertyDescriptor(e,i);(!l||("get"in l?!e.__esModule:l.writable||l.configurable))&&(l={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(s,t,l)}):(function(s,e,i,t){t===void 0&&(t=i),s[t]=e[i]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(s,e){Object.defineProperty(s,"default",{enumerable:!0,value:e})}):function(s,e){s.default=e}),__importStar=this&&this.__importStar||(function(){var s=function(e){return s=Object.getOwnPropertyNames||function(i){var t=[];for(var l in i)Object.prototype.hasOwnProperty.call(i,l)&&(t[t.length]=l);return t},s(e)};return function(e){if(e&&e.__esModule)return e;var i={};if(e!=null)for(var t=s(e),l=0;l<t.length;l++)t[l]!=="default"&&__createBinding(i,e,t[l]);return __setModuleDefault(i,e),i}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkSkills=checkSkills;const fs=__importStar(require("fs")),path=__importStar(require("path")),generate_catalogs_1=require("../../gen/generate-catalogs"),install_profile_config_1=require("../install-profile-config"),skill_profiles_1=require("../skill-profiles"),profile_resolution_1=require("./profile-resolution"),kit_layout_1=require("./kit-layout"),GROUP="Skills";function isCommandSkill(s){try{const i=fs.readFileSync(path.join(s,"SKILL.md"),"utf8").match(/^---\r?\n([\s\S]*?)\r?\n---/)?.[1]??"";return/^agentkit_command\s*:\s*true\s*$/m.test(i)}catch{return!1}}function checkSkills(s,e){if(kit_layout_1.KIT_LAYOUTS[s.kit].hasAgentkitSkills===!1)return[{group:GROUP,name:"skills:expected-set",status:"skip",summary:"this kit ships no Agentkit skills \u2014 its snapshot replaces that surface"}];const i=(0,install_profile_config_1.readInstallSettings)(s.configPath),{profile:t,inferred:l}=(0,profile_resolution_1.resolveCheckProfile)(s,e);if(!t)return[{group:GROUP,name:"skills:expected-set",status:"skip",summary:"cannot verify \u2014 this global install recorded no profile",detail:"Re-run `agentkit init` in your home directory to record one.",remedy:"agentkit init"}];const u=(0,generate_catalogs_1.collectSkills)(e).map(n=>n.name),p=new Set((0,skill_profiles_1.resolveSkipDirs)(e,t,i.extraSkills)),g=u.filter(n=>!p.has(n)),c=(0,profile_resolution_1.installedSkillNames)(s.destSkillsDir),h=new Set(c),r=[],f=g.filter(n=>!h.has(n));r.push(f.length===0?{group:GROUP,name:"skills:expected-set",status:"pass",summary:`${g.length} skill(s) present for the ${t} profile${l?" (inferred)":""}`}:{group:GROUP,name:"skills:expected-set",status:"fail",summary:`${f.length} skill(s) missing for the ${t} profile`,detail:f.join(", "),remedy:"agentkit init"});const m=new Set(u),d=c.filter(n=>m.has(n)&&!fs.existsSync(path.join(s.destSkillsDir,n,"SKILL.md")));d.length>0?r.push({group:GROUP,name:"skills:skill-md",status:"fail",summary:`${d.length} installed skill(s) have no SKILL.md`,detail:d.join(", "),remedy:"agentkit init"}):r.push({group:GROUP,name:"skills:skill-md",status:"pass",summary:"every installed skill has a SKILL.md"});const a=i.extraSkills.filter(n=>!u.includes(n));a.length>0&&r.push({group:GROUP,name:"skills:stale-extras",status:"warn",summary:`install.extraSkills names ${a.length} skill(s) the catalog does not have`,detail:a.join(", "),remedy:`agentkit skills remove ${a.join(" ")}`});const o=c.filter(n=>p.has(n)&&!isCommandSkill(path.join(s.destSkillsDir,n)));return o.length>0&&r.push({group:GROUP,name:"skills:profile-excluded",status:"warn",summary:`${o.length} installed skill(s) are excluded by the ${t} profile`,detail:`${o.join(", ")} \u2014 a re-install will purge these`,remedy:`agentkit skills add ${o.join(" ")}`}),r}
@@ -1 +1 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,e,n,t){t===void 0&&(t=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(r,t,i)}):(function(r,e,n,t){t===void 0&&(t=n),r[t]=e[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),__importStar=this&&this.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(n){var t=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[t.length]=i);return t},r(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var t=r(e),i=0;i<t.length;i++)t[i]!=="default"&&__createBinding(n,e,t[i]);return __setModuleDefault(n,e),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkSoul=checkSoul;const fs=__importStar(require("fs")),path=__importStar(require("path")),GROUP="Structure",SOUL="SOUL.md";function normalize(r){return r.replace(/\s+$/,"")}function checkSoul(r,e){if(r.kit!=="hermes")return[];const n=path.join(e,"agent-kit","hermes",SOUL),t=path.join(r.kitRoot,SOUL);return!fs.existsSync(n)||!fs.existsSync(t)?[]:normalize(fs.readFileSync(n,"utf-8"))===normalize(fs.readFileSync(t,"utf-8"))?[{group:GROUP,name:"soul:current",status:"pass",summary:`${SOUL} matches the one this CLI ships`,detail:t}]:[{group:GROUP,name:"soul:current",status:"warn",summary:`${SOUL} differs from the one this CLI ships`,detail:`${t} \u2014 either an older CLI installed it, or you edited it. This kit rewrites ${SOUL} on every install, so keep any edit of your own somewhere else first.`,remedy:"agentkit init"}]}
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,e,n,t){t===void 0&&(t=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(r,t,i)}):(function(r,e,n,t){t===void 0&&(t=n),r[t]=e[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),__importStar=this&&this.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(n){var t=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[t.length]=i);return t},r(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var t=r(e),i=0;i<t.length;i++)t[i]!=="default"&&__createBinding(n,e,t[i]);return __setModuleDefault(n,e),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkSoul=checkSoul;const fs=__importStar(require("fs")),path=__importStar(require("path")),payload_roots_1=require("../payload-roots"),GROUP="Structure",SOUL="SOUL.md";function normalize(r){return r.replace(/\s+$/,"")}function checkSoul(r,e){if(r.kit!=="hermes")return[];const n=path.join(e,payload_roots_1.AGENT_KIT_DIR,"hermes",SOUL),t=path.join(r.kitRoot,SOUL);return!fs.existsSync(n)||!fs.existsSync(t)?[]:normalize(fs.readFileSync(n,"utf-8"))===normalize(fs.readFileSync(t,"utf-8"))?[{group:GROUP,name:"soul:current",status:"pass",summary:`${SOUL} matches the one this CLI ships`,detail:t}]:[{group:GROUP,name:"soul:current",status:"warn",summary:`${SOUL} differs from the one this CLI ships`,detail:`${t} \u2014 either an older CLI installed it, or you edited it. This kit rewrites ${SOUL} on every install, so keep any edit of your own somewhere else first.`,remedy:"agentkit init"}]}
@@ -1 +1 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,e,i,t){t===void 0&&(t=i);var n=Object.getOwnPropertyDescriptor(e,i);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(r,t,n)}):(function(r,e,i,t){t===void 0&&(t=i),r[t]=e[i]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),__importStar=this&&this.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(i){var t=[];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[t.length]=n);return t},r(e)};return function(e){if(e&&e.__esModule)return e;var i={};if(e!=null)for(var t=r(e),n=0;n<t.length;n++)t[n]!=="default"&&__createBinding(i,e,t[n]);return __setModuleDefault(i,e),i}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.installedSkillNames=installedSkillNames,exports.resolveCheckProfile=resolveCheckProfile;const fs=__importStar(require("fs")),generate_catalogs_1=require("../../generate-catalogs"),install_profile_config_1=require("../install-profile-config");function installedSkillNames(r){return fs.existsSync(r)?fs.readdirSync(r,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name):[]}function resolveCheckProfile(r,e){if(r.scope==="project"||(0,install_profile_config_1.hasPersistedProfile)(r.configPath))return{profile:(0,install_profile_config_1.readInstallSettings)(r.configPath).profile,inferred:!1};const i=new Set(installedSkillNames(r.destSkillsDir));return(0,generate_catalogs_1.collectSkills)(e).every(n=>i.has(n.name))?{profile:"full",inferred:!0}:{profile:null,inferred:!1}}
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,e,i,t){t===void 0&&(t=i);var n=Object.getOwnPropertyDescriptor(e,i);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(r,t,n)}):(function(r,e,i,t){t===void 0&&(t=i),r[t]=e[i]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),__importStar=this&&this.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(i){var t=[];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[t.length]=n);return t},r(e)};return function(e){if(e&&e.__esModule)return e;var i={};if(e!=null)for(var t=r(e),n=0;n<t.length;n++)t[n]!=="default"&&__createBinding(i,e,t[n]);return __setModuleDefault(i,e),i}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.installedSkillNames=installedSkillNames,exports.resolveCheckProfile=resolveCheckProfile;const fs=__importStar(require("fs")),generate_catalogs_1=require("../../gen/generate-catalogs"),install_profile_config_1=require("../install-profile-config");function installedSkillNames(r){return fs.existsSync(r)?fs.readdirSync(r,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name):[]}function resolveCheckProfile(r,e){if(r.scope==="project"||(0,install_profile_config_1.hasPersistedProfile)(r.configPath))return{profile:(0,install_profile_config_1.readInstallSettings)(r.configPath).profile??"full",inferred:!1};const i=new Set(installedSkillNames(r.destSkillsDir));return(0,generate_catalogs_1.collectSkills)(e).every(n=>i.has(n.name))?{profile:"full",inferred:!0}:{profile:null,inferred:!1}}
@@ -1,4 +1,4 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var s=Object.getOwnPropertyDescriptor(t,n);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,s)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),__importStar=this&&this.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(r[r.length]=s);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),s=0;s<r.length;s++)r[s]!=="default"&&__createBinding(n,t,r[s]);return __setModuleDefault(n,t),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.CLAUDE_ONLY_SKILL_DIRS=void 0,exports.isJunkEntry=isJunkEntry,exports.containsAnyFile=containsAnyFile,exports.copyDir=copyDir,exports.copyFile=copyFile,exports.removeDir=removeDir,exports.removeFile=removeFile,exports.shippedSkillEntries=shippedSkillEntries,exports.copySkillsToKit=copySkillsToKit,exports.transformCommandToWorkflow=transformCommandToWorkflow,exports.copyCommandsToKit=copyCommandsToKit;const fs=__importStar(require("fs")),path=__importStar(require("path")),logger_1=require("./logger");exports.CLAUDE_ONLY_SKILL_DIRS=[];const JUNK_ENTRIES=new Set([".DS_Store","__pycache__",".pytest_cache","Thumbs.db",".venv","venv","node_modules"]);function isJunkEntry(e){return JUNK_ENTRIES.has(e)||e.endsWith(".pyc")}function containsAnyFile(e){let t;try{t=fs.readdirSync(e,{withFileTypes:!0})}catch{return!1}for(const n of t)if(!isJunkEntry(n.name)&&(n.isFile()||n.isDirectory()&&containsAnyFile(path.join(e,n.name))))return!0;return!1}function copyDir(e,t,n={}){const{suppressSymlinkWarnings:r=!1}=n;let s=[];if(path.resolve(e)===path.resolve(t)||!fs.existsSync(e))return s;if(fs.existsSync(t))try{fs.lstatSync(t).isDirectory()&&fs.rmSync(t,{recursive:!0,force:!0})}catch{}fs.mkdirSync(t,{recursive:!0});const S=fs.readdirSync(e,{withFileTypes:!0});for(const l of S){if(isJunkEntry(l.name))continue;const a=path.join(e,l.name),o=path.join(t,l.name);if(l.isSymbolicLink())try{const c=fs.readlinkSync(a),f=path.isAbsolute(c)?c:path.resolve(path.dirname(a),c);if(fs.existsSync(f)&&f.startsWith(e)){const y=f.replace(e,t),i=path.relative(path.dirname(o),y);fs.symlinkSync(i,o)}else s.push(l.name),r||(0,logger_1.printWarning)(`Skipping symlink ${l.name}: target outside copied directory`)}catch(c){s.push(l.name),r||(0,logger_1.printWarning)(`Skipping symlink ${l.name}: ${c.message}`)}else if(l.isDirectory()){if(fs.existsSync(o))try{fs.lstatSync(o).isDirectory()||fs.unlinkSync(o)}catch{}const c=copyDir(a,o,n);s=s.concat(c)}else{if(fs.existsSync(o))try{fs.lstatSync(o).isDirectory()&&fs.rmSync(o,{recursive:!0,force:!0})}catch{}fs.copyFileSync(a,o)}}return s}function copyFile(e,t){fs.copyFileSync(e,t)}function removeDir(e){if(!fs.existsSync(e))return!1;try{if(fs.rmSync)return fs.rmSync(e,{recursive:!0,force:!0}),!0;const t=fs.readdirSync(e,{withFileTypes:!0});for(const n of t){const r=path.join(e,n.name);n.isDirectory()?removeDir(r):fs.unlinkSync(r)}return fs.rmdirSync(e),!0}catch(t){return(0,logger_1.printError)(`Failed to remove ${e}: ${t.message}`),!1}}function removeFile(e){if(!fs.existsSync(e))return!1;try{return fs.unlinkSync(e),!0}catch(t){return(0,logger_1.printError)(`Failed to remove ${e}: ${t.message}`),!1}}function shippedSkillEntries(e){const t=path.join(e,"skills");let n;try{n=fs.readdirSync(t,{withFileTypes:!0})}catch{return[]}return n.filter(r=>!r.isSymbolicLink()&&!isJunkEntry(r.name)).filter(r=>!r.isDirectory()||containsAnyFile(path.join(t,r.name))).map(r=>({name:r.name,isDirectory:r.isDirectory(),isFile:r.isFile()}))}function copySkillsToKit(e,t,n,r={}){const{skillDirName:s="skills",skipDirsFilter:S,profileSkipDirs:l}=r,a=path.join(e,"skills"),o=path.join(n,t,s);if(!fs.existsSync(a))return(0,logger_1.printWarning)(`Root skills directory not found at ${a}`),!1;if(fs.existsSync(o))try{fs.lstatSync(o).isDirectory()||fs.unlinkSync(o)}catch{}fs.existsSync(o)||fs.mkdirSync(o,{recursive:!0});try{const c=shippedSkillEntries(e);let f=0;const y=new Set([...S??[],...l??[]]);for(const i of c){const p=path.join(a,i.name),u=path.join(o,i.name);if(i.isDirectory){if(y.has(i.name))continue;if(fs.existsSync(u))try{const m=fs.lstatSync(u);m.isSymbolicLink()?fs.unlinkSync(u):m.isDirectory()?fs.rmSync(u,{recursive:!0}):fs.unlinkSync(u)}catch{continue}copyDir(p,u,{suppressSymlinkWarnings:!0}),f++}else if(i.isFile)try{fs.copyFileSync(p,u),f++}catch{}}if(l&&l.length>0){const i=[];for(const p of l){const u=path.join(o,p);fs.existsSync(u)&&(fs.rmSync(u,{recursive:!0,force:!0}),i.push(p))}i.length>0&&(0,logger_1.printInfo)(`Removed ${i.length} skill(s) no longer in this install: ${i.join(", ")}`)}return f>0}catch(c){return(0,logger_1.printError)(`Failed to copy skills: ${c.message}`),!1}}function transformCommandToWorkflow(e){const t=e.match(/^---\n([\s\S]*?)\n---\n/);if(!t)return e;const n=t[1],r=e.slice(t[0].length),s=n.match(/description:\s*(.+)/),S=s?s[1].replace(/⚡+/g,"").trim():"Workflow description",l=n.match(/argument-hint:\s*(.+)/),a=l?l[1]:null;let o=`---
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var s=Object.getOwnPropertyDescriptor(t,n);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,s)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),__importStar=this&&this.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(r[r.length]=s);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),s=0;s<r.length;s++)r[s]!=="default"&&__createBinding(n,t,r[s]);return __setModuleDefault(n,t),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.CLAUDE_ONLY_SKILL_DIRS=void 0,exports.isJunkEntry=isJunkEntry,exports.containsAnyFile=containsAnyFile,exports.copyDir=copyDir,exports.copyFile=copyFile,exports.removeDir=removeDir,exports.removeFile=removeFile,exports.shippedSkillEntries=shippedSkillEntries,exports.copySkillsToKit=copySkillsToKit,exports.transformCommandToWorkflow=transformCommandToWorkflow,exports.copyCommandsToKit=copyCommandsToKit;const fs=__importStar(require("fs")),path=__importStar(require("path")),logger_1=require("./logger"),payload_roots_1=require("./payload-roots");exports.CLAUDE_ONLY_SKILL_DIRS=[];const JUNK_ENTRIES=new Set([".DS_Store","__pycache__",".pytest_cache","Thumbs.db",".venv","venv","node_modules"]);function isJunkEntry(e){return JUNK_ENTRIES.has(e)||e.endsWith(".pyc")}function containsAnyFile(e){let t;try{t=fs.readdirSync(e,{withFileTypes:!0})}catch{return!1}for(const n of t)if(!isJunkEntry(n.name)&&(n.isFile()||n.isDirectory()&&containsAnyFile(path.join(e,n.name))))return!0;return!1}function copyDir(e,t,n={}){const{suppressSymlinkWarnings:r=!1}=n;let s=[];if(path.resolve(e)===path.resolve(t)||!fs.existsSync(e))return s;if(fs.existsSync(t))try{fs.lstatSync(t).isDirectory()&&fs.rmSync(t,{recursive:!0,force:!0})}catch{}fs.mkdirSync(t,{recursive:!0});const S=fs.readdirSync(e,{withFileTypes:!0});for(const l of S){if(isJunkEntry(l.name))continue;const a=path.join(e,l.name),o=path.join(t,l.name);if(l.isSymbolicLink())try{const c=fs.readlinkSync(a),f=path.isAbsolute(c)?c:path.resolve(path.dirname(a),c);if(fs.existsSync(f)&&f.startsWith(e)){const y=f.replace(e,t),i=path.relative(path.dirname(o),y);fs.symlinkSync(i,o)}else s.push(l.name),r||(0,logger_1.printWarning)(`Skipping symlink ${l.name}: target outside copied directory`)}catch(c){s.push(l.name),r||(0,logger_1.printWarning)(`Skipping symlink ${l.name}: ${c.message}`)}else if(l.isDirectory()){if(fs.existsSync(o))try{fs.lstatSync(o).isDirectory()||fs.unlinkSync(o)}catch{}const c=copyDir(a,o,n);s=s.concat(c)}else{if(fs.existsSync(o))try{fs.lstatSync(o).isDirectory()&&fs.rmSync(o,{recursive:!0,force:!0})}catch{}fs.copyFileSync(a,o)}}return s}function copyFile(e,t){fs.copyFileSync(e,t)}function removeDir(e){if(!fs.existsSync(e))return!1;try{if(fs.rmSync)return fs.rmSync(e,{recursive:!0,force:!0}),!0;const t=fs.readdirSync(e,{withFileTypes:!0});for(const n of t){const r=path.join(e,n.name);n.isDirectory()?removeDir(r):fs.unlinkSync(r)}return fs.rmdirSync(e),!0}catch(t){return(0,logger_1.printError)(`Failed to remove ${e}: ${t.message}`),!1}}function removeFile(e){if(!fs.existsSync(e))return!1;try{return fs.unlinkSync(e),!0}catch(t){return(0,logger_1.printError)(`Failed to remove ${e}: ${t.message}`),!1}}function shippedSkillEntries(e){const t=path.join(e,payload_roots_1.SKILL_SOURCE_DIR);let n;try{n=fs.readdirSync(t,{withFileTypes:!0})}catch{return[]}return n.filter(r=>!r.isSymbolicLink()&&!isJunkEntry(r.name)).filter(r=>!r.isDirectory()||containsAnyFile(path.join(t,r.name))).map(r=>({name:r.name,isDirectory:r.isDirectory(),isFile:r.isFile()}))}function copySkillsToKit(e,t,n,r={}){const{skillDirName:s="skills",skipDirsFilter:S,profileSkipDirs:l}=r,a=path.join(e,payload_roots_1.SKILL_SOURCE_DIR),o=path.join(n,t,s);if(!fs.existsSync(a))return(0,logger_1.printWarning)(`Root skills directory not found at ${a}`),!1;if(fs.existsSync(o))try{fs.lstatSync(o).isDirectory()||fs.unlinkSync(o)}catch{}fs.existsSync(o)||fs.mkdirSync(o,{recursive:!0});try{const c=shippedSkillEntries(e);let f=0;const y=new Set([...S??[],...l??[]]);for(const i of c){const p=path.join(a,i.name),u=path.join(o,i.name);if(i.isDirectory){if(y.has(i.name))continue;if(fs.existsSync(u))try{const m=fs.lstatSync(u);m.isSymbolicLink()?fs.unlinkSync(u):m.isDirectory()?fs.rmSync(u,{recursive:!0}):fs.unlinkSync(u)}catch{continue}copyDir(p,u,{suppressSymlinkWarnings:!0}),f++}else if(i.isFile)try{fs.copyFileSync(p,u),f++}catch{}}if(l&&l.length>0){const i=[];for(const p of l){const u=path.join(o,p);fs.existsSync(u)&&(fs.rmSync(u,{recursive:!0,force:!0}),i.push(p))}i.length>0&&(0,logger_1.printInfo)(`Removed ${i.length} skill(s) no longer in this install: ${i.join(", ")}`)}return f>0}catch(c){return(0,logger_1.printError)(`Failed to copy skills: ${c.message}`),!1}}function transformCommandToWorkflow(e){const t=e.match(/^---\n([\s\S]*?)\n---\n/);if(!t)return e;const n=t[1],r=e.slice(t[0].length),s=n.match(/description:\s*(.+)/),S=s?s[1].replace(/⚡+/g,"").trim():"Workflow description",l=n.match(/argument-hint:\s*(.+)/),a=l?l[1]:null;let o=`---
2
2
  description: ${S}
3
3
  ---`;a&&(o=`---
4
4
  description: ${S}
@@ -11,4 +11,4 @@ argument-hint: ${a}
11
11
  `;const i=r.match(/##\s+Workflow\s*\n([\s\S]*?)(?=\n##\s+[^W]|$)/);if(i)y+=`## Workflow
12
12
 
13
13
  `+i[1];else{const p=r.replace(/##\s+Role Responsibilities[\s\S]*?---\n/g,"").replace(/##\s+Your Approach[\s\S]*?---\n/g,"");y+=p}return o+`
14
- `+y}function copyCommandsToKit(e,t,n,r={}){const{commandDirName:s="commands",transformFormat:S=!1,flattenStructure:l=!1}=r;if(!s)return!1;let a=path.join(e,"command");fs.existsSync(a)||(a=path.join(e,"commands"));const o=path.join(n,t,s);if(!fs.existsSync(a))return(0,logger_1.printWarning)(`Root command(s) directory not found at ${e}`),!1;if(fs.existsSync(o))try{fs.rmSync(o,{recursive:!0,force:!0})}catch(c){(0,logger_1.printWarning)(`Could not remove existing ${o}: ${c.message}`)}fs.mkdirSync(o,{recursive:!0});try{if(l){let y=function(i,p){const u=path.join(p,i.name);if(i.isDirectory()){const m=fs.readdirSync(u,{withFileTypes:!0});for(const d of m)y(d,u)}else if(i.isFile()&&i.name.endsWith(".md")){const m=path.join(o,i.name);if(S){const d=fs.readFileSync(u,"utf8"),h=transformCommandToWorkflow(d);fs.writeFileSync(m,h,"utf8")}else fs.copyFileSync(u,m);f++}};const c=fs.readdirSync(a,{withFileTypes:!0});let f=0;for(const i of c)y(i,a);return f>0}else if(S){let y=function(i,p,u){const m=path.join(p,i.name),d=path.join(u,i.name);if(i.isDirectory()){fs.mkdirSync(d,{recursive:!0});const h=fs.readdirSync(m,{withFileTypes:!0});for(const k of h)y(k,m,d)}else if(i.isFile()&&i.name.endsWith(".md")){const h=fs.readFileSync(m,"utf8"),k=transformCommandToWorkflow(h);fs.writeFileSync(d,k,"utf8"),f++}else fs.copyFileSync(m,d)};const c=fs.readdirSync(a,{withFileTypes:!0});let f=0;for(const i of c)y(i,a,o);return f>0}else return copyDir(a,o,{suppressSymlinkWarnings:!0}),!0}catch(c){return(0,logger_1.printError)(`Failed to copy commands: ${c.message}`),!1}}
14
+ `+y}function copyCommandsToKit(e,t,n,r={}){const{commandDirName:s="commands",transformFormat:S=!1,flattenStructure:l=!1}=r;if(!s)return!1;let a=path.join(e,payload_roots_1.COMMAND_SOURCE_DIR);fs.existsSync(a)||(a=path.join(e,"commands"));const o=path.join(n,t,s);if(!fs.existsSync(a))return(0,logger_1.printWarning)(`Root command(s) directory not found at ${e}`),!1;if(fs.existsSync(o))try{fs.rmSync(o,{recursive:!0,force:!0})}catch(c){(0,logger_1.printWarning)(`Could not remove existing ${o}: ${c.message}`)}fs.mkdirSync(o,{recursive:!0});try{if(l){let y=function(i,p){const u=path.join(p,i.name);if(i.isDirectory()){const m=fs.readdirSync(u,{withFileTypes:!0});for(const d of m)y(d,u)}else if(i.isFile()&&i.name.endsWith(".md")){const m=path.join(o,i.name);if(S){const d=fs.readFileSync(u,"utf8"),h=transformCommandToWorkflow(d);fs.writeFileSync(m,h,"utf8")}else fs.copyFileSync(u,m);f++}};const c=fs.readdirSync(a,{withFileTypes:!0});let f=0;for(const i of c)y(i,a);return f>0}else if(S){let y=function(i,p,u){const m=path.join(p,i.name),d=path.join(u,i.name);if(i.isDirectory()){fs.mkdirSync(d,{recursive:!0});const h=fs.readdirSync(m,{withFileTypes:!0});for(const k of h)y(k,m,d)}else if(i.isFile()&&i.name.endsWith(".md")){const h=fs.readFileSync(m,"utf8"),k=transformCommandToWorkflow(h);fs.writeFileSync(d,k,"utf8"),f++}else fs.copyFileSync(m,d)};const c=fs.readdirSync(a,{withFileTypes:!0});let f=0;for(const i of c)y(i,a,o);return f>0}else return copyDir(a,o,{suppressSymlinkWarnings:!0}),!0}catch(c){return(0,logger_1.printError)(`Failed to copy commands: ${c.message}`),!1}}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseFrontmatterBlock=parseFrontmatterBlock,exports.flattenFrontmatter=flattenFrontmatter,exports.foldAgentEntries=foldAgentEntries,exports.parseFrontmatter=parseFrontmatter,exports.cleanFrontmatterValue=cleanFrontmatterValue;const BLOCK_SCALARS=[">",">-",">+","|","|-","|+"];function parseFrontmatterBlock(t){const n=t.match(/^---\r?\n([\s\S]*?)\r?\n---/);return n?{entries:n[1].split(/\r?\n/).map(e=>{const o=e.indexOf(":");return o!==-1&&/^[^\s-]/.test(e)?{kind:"key",text:e,name:e.slice(0,o),raw:e.slice(o+1)}:{kind:"line",text:e}}),body:t.slice(n[0].length)}:null}function flattenFrontmatter(t){const n={};let r=null;for(const e of t)e.kind==="key"&&/^[A-Za-z_][\w-]*$/.test(e.name??"")?(r=e.name??"",n[r]=(e.raw??"").trim()):r&&/^\s+\S/.test(e.text)&&(n[r]=`${n[r]} ${e.text.trim()}`.trim());return n}function foldAgentEntries(t){const n={};for(let r=0;r<t.length;r++){const e=t[r];if(e.kind!=="key")continue;const o=(e.name??"").trim();let s=(e.raw??"").trim();if(BLOCK_SCALARS.includes(s)){const a=[];for(;r+1<t.length&&t[r+1].kind==="line"&&(/^[ \t]/.test(t[r+1].text)||!t[r+1].text.trim());)a.push(t[++r].text.trim());const i=s.startsWith("|")?`
2
+ `:" ";s=a.filter(Boolean).join(i).trim()}n[o]=s.replace(/^["']|["']$/g,"")}return n}function parseFrontmatter(t){const n=parseFrontmatterBlock(t);return n?flattenFrontmatter(n.entries):{}}function cleanFrontmatterValue(t){return t?t.replace(/^[>|][-+]?\s*/,"").replace(/^"(.*)"$/s,"$1").replace(/^'(.*)'$/s,"$1").replace(/\s+/g," ").trim():""}
@@ -1,7 +1,7 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,e,n,t){t===void 0&&(t=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(r,t,i)}):(function(r,e,n,t){t===void 0&&(t=n),r[t]=e[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),__importStar=this&&this.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(n){var t=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[t.length]=i);return t},r(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var t=r(e),i=0;i<t.length;i++)t[i]!=="default"&&__createBinding(n,e,t[i]);return __setModuleDefault(n,e),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.cleanupGitignore=cleanupGitignore,exports.updateGitignore=updateGitignore;const fs=__importStar(require("fs")),path=__importStar(require("path"));function cleanupGitignore(r,e){const n=path.join(e,".gitignore");if(!fs.existsSync(n))return!1;const i=fs.readFileSync(n,"utf-8").split(`
2
- `),s=[];let a=0;const f=new Set;r.forEach(c=>{const o=c.trim();f.add(o),o.endsWith("/")?f.add(o.slice(0,-1)):f.add(o+"/")});for(const c of i){const o=c.trim();if(o===""||o.startsWith("#")){s.push(c);continue}let l=!1;const h=o.endsWith("/")?o.slice(0,-1):o;for(const u of f){const g=u.endsWith("/")?u.slice(0,-1):u;if(h===g){l=!0;break}}if(l){a++;continue}s.push(c)}if(a===0)return!1;for(;s.length>0&&s[s.length-1].trim()==="";)s.pop();const d=[];for(let c=0;c<s.length;c++){const o=s[c];o.trim().startsWith("# Agentkit")&&!s.slice(c+1).some(u=>u.trim()!==""&&!u.trim().startsWith("#"))||d.push(o)}return fs.writeFileSync(n,d.join(`
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,i)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),__importStar=this&&this.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[n.length]=i);return n},r(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),i=0;i<n.length;i++)n[i]!=="default"&&__createBinding(t,e,n[i]);return __setModuleDefault(t,e),t}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.otherKitGitignoreEntries=otherKitGitignoreEntries,exports.cleanupGitignore=cleanupGitignore,exports.updateGitignore=updateGitignore;const fs=__importStar(require("fs")),path=__importStar(require("path")),kits_1=require("./kits");function otherKitGitignoreEntries(r){const e=kits_1.kitDefinitions[r],t=[];for(const n of kits_1.PROJECT_KITS){const i=kits_1.kitDefinitions[n];i.dir!==e.dir&&t.push(i.dir+"/");for(const s of i.files)e.files.includes(s)||t.push(s)}return t}function cleanupGitignore(r,e){const t=path.join(e,".gitignore");if(!fs.existsSync(t))return!1;const i=fs.readFileSync(t,"utf-8").split(`
2
+ `),s=[];let a=0;const u=new Set;r.forEach(c=>{const o=c.trim();u.add(o),o.endsWith("/")?u.add(o.slice(0,-1)):u.add(o+"/")});for(const c of i){const o=c.trim();if(o===""||o.startsWith("#")){s.push(c);continue}let l=!1;const h=o.endsWith("/")?o.slice(0,-1):o;for(const f of u){const g=f.endsWith("/")?f.slice(0,-1):f;if(h===g){l=!0;break}}if(l){a++;continue}s.push(c)}if(a===0)return!1;for(;s.length>0&&s[s.length-1].trim()==="";)s.pop();const d=[];for(let c=0;c<s.length;c++){const o=s[c];o.trim().startsWith("# Agentkit")&&!s.slice(c+1).some(f=>f.trim()!==""&&!f.trim().startsWith("#"))||d.push(o)}return fs.writeFileSync(t,d.join(`
3
3
  `)+`
4
- `),!0}function updateGitignore(r,e){const n=path.join(e,".gitignore");let t="";fs.existsSync(n)&&(t=fs.readFileSync(n,"utf-8"));const i=r.filter(s=>!t.includes(s));return i.length===0?!1:(t.includes("# Agentkit")||(t+=`
4
+ `),!0}function updateGitignore(r,e){const t=path.join(e,".gitignore");let n="";fs.existsSync(t)&&(n=fs.readFileSync(t,"utf-8"));const i=r.filter(s=>!n.includes(s));return i.length===0?!1:(n.includes("# Agentkit")||(n+=`
5
5
  # Agentkit - AI Development Kits
6
- `),i.forEach(s=>{t+=`${s}
7
- `}),fs.writeFileSync(n,t),!0)}
6
+ `),i.forEach(s=>{n+=`${s}
7
+ `}),fs.writeFileSync(t,n),!0)}
@@ -1 +1 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(s,e,t,o){o===void 0&&(o=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(s,o,n)}):(function(s,e,t,o){o===void 0&&(o=t),s[o]=e[t]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(s,e){Object.defineProperty(s,"default",{enumerable:!0,value:e})}):function(s,e){s.default=e}),__importStar=this&&this.__importStar||(function(){var s=function(e){return s=Object.getOwnPropertyNames||function(t){var o=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(o[o.length]=n);return o},s(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var o=s(e),n=0;n<o.length;n++)o[n]!=="default"&&__createBinding(t,e,o[n]);return __setModuleDefault(t,e),t}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.unclaimedGlobalLayoutRows=unclaimedGlobalLayoutRows,exports.staleGlobalPolicyRows=staleGlobalPolicyRows,exports.globalClearTarget=globalClearTarget,exports.globalClearTargets=globalClearTargets;const path=__importStar(require("path")),kit_layout_1=require("./doctor/kit-layout"),kit_context_1=require("./kit-context"),home_dir_1=require("./home-dir"),init_install_scope_1=require("./init-install-scope"),install_manifest_1=require("./install-manifest"),package_root_1=require("./package-root"),file_operations_1=require("./file-operations"),retired_skills_1=require("./retired-skills"),ui_1=require("./ui"),cursor_agents_1=require("./kit-installers/cursor-agents"),omp_home_1=require("./omp-home"),omp_managed_1=require("./kit-installers/omp-managed"),pi_home_1=require("./pi-home"),devin_home_1=require("./kit-installers/devin-home"),devin_rules_1=require("./kit-installers/devin-rules"),devin_agents_1=require("./kit-installers/devin-agents"),devin_hooks_1=require("./kit-installers/devin-hooks"),cursor_rules_1=require("./kit-installers/cursor-rules"),antigravity_1=require("./kit-installers/antigravity"),POLICIES={claude:{name:"Claude Code (Global)",whole:["rules","commands","agents","hooks","scripts","settings.json","schemas","session-state"],neverDelete:{},narrow:{},perFile:{},extra:["CLAUDE.md","coding-level.json",".agentkitignore",".env.example",".mcp.json.example","statusline.cjs","statusline.ps1","statusline.sh"]},codex:{name:"OpenAI Codex (Global)",whole:["rules","agents","hooks","scripts","hooks.json","session-state","schemas"],perFile:{},neverDelete:{"config.toml":"the installer preserves and merges into it \u2014 it is Codex\u2019s own config"},narrow:{},extra:["AGENTS.md","README.md","coding-level.json",".agentkitignore",".mcp.json"]},opencode:{name:"OpenCode (Global)",whole:["rules","commands","agents","scripts","plugins","opencode.json","schemas"],neverDelete:{},narrow:{},perFile:{},extra:["AGENTS.md","README.md","MCP.md","agents-contracts-reference.md","agents-registry.json","antigravity.json","bun.lock","coding-level.json"]},cursor:{name:"Cursor AI (Global)",whole:["hooks","scripts","hooks.json","schemas"],neverDelete:{"mcp.json":"the installer merges into it, so it also holds the user\u2019s MCP servers"},narrow:{},perFile:{rules:(s,e)=>[...(0,cursor_rules_1.cursorRuleFiles)(path.join(s,"rules")).map(t=>t.fileName),...(0,cursor_rules_1.kitOwnedRuleFileNames)(e)],agents:s=>(0,cursor_agents_1.cursorAgentFiles)(path.join(s,"agents")).map(e=>e.fileName),commands:s=>(0,cursor_rules_1.cursorCommandFiles)(path.join(s,"command")).map(e=>e.fileName)},extra:["coding-level.json"]},kimi:{name:"Kimi Code (Global)",whole:["rules","agents","hooks","scripts","hooks.json","session-state","schemas"],perFile:{},neverDelete:{"config.toml":"the installer preserves it \u2014 it holds the user\u2019s providers and API keys","mcp.json":"the installer merges into it, so it also holds the user\u2019s MCP servers"},narrow:{},extra:["AGENTS.md","README.md","coding-level.json",".agentkitignore"]},grok:{name:"Grok Build (Global)",whole:["hooks","scripts","schemas"],perFile:{rules:s=>(0,cursor_agents_1.cursorAgentFiles)(path.join(s,"rules")).map(e=>e.fileName),agents:s=>(0,cursor_agents_1.cursorAgentFiles)(path.join(s,"agents")).map(e=>e.fileName),commands:s=>(0,cursor_rules_1.cursorCommandFiles)(path.join(s,"command")).map(e=>e.fileName)},neverDelete:{"auth.json":"it holds the user\u2019s xAI credentials",sessions:"it holds the user\u2019s session history",bundled:"it ships with Grok itself \u2014 skills, agents and personas the CLI needs","marketplace-cache":"it is Grok\u2019s own plugin cache",memory:"it holds the user\u2019s cross-session memory","config.toml":"the installer merges into it \u2014 it holds the user\u2019s own configuration"},narrow:{},extra:["AGENTS.md","coding-level.json"]},hermes:{name:"Hermes Agent",whole:["rules","skills/agentkit","scripts/agentkit","SOUL.md","distribution.yaml","hooks/agentkit","plugins/agentkit-privacy","hooks.json","schemas"],perFile:{},skillsDirIsExclusive:!0,neverDelete:{"config.yaml":"it holds the user\u2019s providers \u2014 only agentkit\u2019s hook block is stripped"},narrow:{},extra:["AGENTS.md","README.md","coding-level.json",".agentkitignore"]},openclaw:{name:"OpenClaw (Global)",whole:["rules","skills","scripts","plugin","schemas"],perFile:{},skillsDirIsExclusive:!0,neverDelete:{},narrow:{},extra:["README.md","coding-level.json",".agentkitignore","hooks"]},omp:{name:"Oh My Pi (Global)",whole:["skills","scripts","guard","schemas"],perFile:{},neverDelete:{"mcp.json":"the installer merges into it, so it also holds the user\u2019s MCP servers"},narrow:{},skillsDirIsExclusive:!0,extra:["README.md","coding-level.json",".agentkitignore"],extraOutsideKitRoot:(s,e)=>[...new Set([omp_home_1.OMP_RULES_DIR,omp_home_1.OMP_AGENTS_DIR,omp_home_1.OMP_COMMANDS_DIR].flatMap(t=>(0,omp_managed_1.ompManagedFileNames)(path.join(e,t)).map(o=>path.join(t,o)))),omp_home_1.OMP_EXTENSION_FILE]},pi:{name:"Pi (Global)",whole:[".agentkit.json"],perFile:{},neverDelete:{},narrow:{},skillsDirIsExclusive:!1,extra:[],extraOutsideKitRoot:(s,e)=>[pi_home_1.PI_EXTENSION_FILE,pi_home_1.PI_SUBAGENT_EXTENSION_FILE,...(0,omp_managed_1.ompManagedFileNames)(path.join(e,pi_home_1.PI_PROMPTS_DIR)).map(t=>path.join(pi_home_1.PI_PROMPTS_DIR,t)),...(0,omp_managed_1.ompManagedFileNames)(path.join(e,pi_home_1.PI_AGENTS_DIR)).map(t=>path.join(pi_home_1.PI_AGENTS_DIR,t))]},antigravity:{name:"Antigravity (Global)",whole:["scripts","schemas"],perFile:{},neverDelete:{"mcp_config.json":"the installer merges into it, so it also holds the user\u2019s MCP servers"},narrow:{plugins:[antigravity_1.ANTIGRAVITY_PLUGIN_REL,...antigravity_1.LEGACY_ANTIGRAVITY_PLUGIN_NAMES.map(s=>path.join("plugins",s))]},extra:[],extraOutsideKitRoot:["GEMINI.md","AGENTS.md"]},devin:{name:"Devin CLI (Global)",whole:["scripts","schemas"],perFile:{agents:(s,e)=>(0,devin_agents_1.devinOwnedAgentNames)(e),hooks:()=>(0,devin_hooks_1.devinHookFileNames)()},neverDelete:{"config.json":"the installer merges into its `hooks` key \u2014 the rest is the user\u2019s config","mcp_config.json":"the installer merges into it, so it also holds the user\u2019s MCP servers"},narrow:{},extra:[".agentkitignore"],extraOutsideKitRoot:()=>(0,devin_rules_1.devinOwnedRuleNames)(path.join((0,devin_home_1.resolveDevinHomeDir)(),"rules")).map(s=>path.join((0,devin_home_1.resolveDevinHomeDir)(),"rules",s))}};function claimedLayoutRows(s,e,t){const o=POLICIES[s],n=new Set(o.whole);return(0,kit_layout_1.layoutFor)(s,"global").flatMap(i=>{const r=i.path;if(r in o.neverDelete)return[];if(o.narrow[r])return o.narrow[r];const a=o.perFile[r];return a?[...new Set(a(e,path.join(t,r)))].map(c=>path.join(r,c)):n.has(r)?[r]:[]})}function unclaimedGlobalLayoutRows(s){const e=POLICIES[s],t=new Set([...e.whole,...Object.keys(e.neverDelete),...Object.keys(e.narrow),...Object.keys(e.perFile)]),o=[...e.whole,...Object.values(e.narrow).flat()],n=i=>o.some(r=>i.startsWith(`${r}/`));return(0,kit_layout_1.layoutFor)(s,"global").map(i=>i.path).filter(i=>!t.has(i)&&!n(i))}function staleGlobalPolicyRows(s){const e=POLICIES[s],t=new Set((0,kit_layout_1.layoutFor)(s,"global").map(o=>o.path));return[...e.whole,...Object.keys(e.neverDelete),...Object.keys(e.narrow),...Object.keys(e.perFile)].filter(o=>!t.has(o)&&o!=="mcp.json")}function ownedSkillsPaths(s,e,t){if(kit_layout_1.KIT_LAYOUTS[s]?.hasAgentkitSkills===!1)return[];const n=path.join(t,kit_context_1.KIT_GLOBAL_SKILLS_DIR[s]);return POLICIES[s].skillsDirIsExclusive?[n]:[...(0,file_operations_1.shippedSkillEntries)(e).map(r=>r.name),...(0,retired_skills_1.retiredSkillNames)()].map(r=>path.join(n,r))}function resolveOutsideKitRoot(s,e,t){const o=s.extraOutsideKitRoot;return o?(typeof o=="function"?o(e,t):o).map(i=>path.isAbsolute(i)?i:path.join(t,i)):[]}function globalClearTarget(s,e={}){const t=POLICIES[s],o=e.rootOverride??(0,init_install_scope_1.resolveGlobalRoot)(s,""),n=e.rootOverride?e.rootOverride:(0,kit_context_1.globalBaseDir)(s),i=path.join(n,".agentkit.json"),r=e.payloadRoot??(0,package_root_1.packageRoot)(),a=[...claimedLayoutRows(s,r,n).map(l=>path.join(n,l)),...ownedSkillsPaths(s,r,n),...t.extra.map(l=>path.join(n,l)),...resolveOutsideKitRoot(t,r,o),i,path.join(n,install_manifest_1.MANIFEST_FILENAME)];return{key:e.key??`${s}-global`,name:e.name??t.name,dirPath:o,requiresMarker:i,ownedPaths:[...new Set(a)],group:(0,ui_1.kitGroup)(s)}}function globalClearTargets(){return[globalClearTarget("claude"),globalClearTarget("codex"),globalClearTarget("opencode"),globalClearTarget("opencode",{key:"opencode-legacy",name:"OpenCode (Legacy Global)",rootOverride:path.join((0,home_dir_1.homeDir)(),".opencode")}),globalClearTarget("cursor"),globalClearTarget("antigravity"),globalClearTarget("kimi"),globalClearTarget("openclaw"),globalClearTarget("omp"),globalClearTarget("grok"),globalClearTarget("pi"),globalClearTarget("devin")]}
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(s,e,t,o){o===void 0&&(o=t);var n=Object.getOwnPropertyDescriptor(e,t);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(s,o,n)}):(function(s,e,t,o){o===void 0&&(o=t),s[o]=e[t]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(s,e){Object.defineProperty(s,"default",{enumerable:!0,value:e})}):function(s,e){s.default=e}),__importStar=this&&this.__importStar||(function(){var s=function(e){return s=Object.getOwnPropertyNames||function(t){var o=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(o[o.length]=n);return o},s(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var o=s(e),n=0;n<o.length;n++)o[n]!=="default"&&__createBinding(t,e,o[n]);return __setModuleDefault(t,e),t}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.unclaimedGlobalLayoutRows=unclaimedGlobalLayoutRows,exports.staleGlobalPolicyRows=staleGlobalPolicyRows,exports.globalClearTarget=globalClearTarget,exports.globalClearTargets=globalClearTargets;const path=__importStar(require("path")),kit_layout_1=require("./doctor/kit-layout"),kit_context_1=require("./kit-context"),home_dir_1=require("./home-dir"),init_install_scope_1=require("./init-install-scope"),install_manifest_1=require("./install-manifest"),package_root_1=require("./package-root"),file_operations_1=require("./file-operations"),retired_skills_1=require("./retired-skills"),ui_1=require("./ui"),cursor_agents_1=require("./kit-installers/cursor-agents"),omp_home_1=require("./omp-home"),omp_managed_1=require("./kit-installers/omp-managed"),pi_home_1=require("./pi-home"),devin_home_1=require("./kit-installers/devin-home"),devin_rules_1=require("./kit-installers/devin-rules"),devin_agents_1=require("./kit-installers/devin-agents"),devin_hooks_1=require("./kit-installers/devin-hooks"),payload_roots_1=require("./payload-roots"),cursor_rules_1=require("./kit-installers/cursor-rules"),antigravity_1=require("./kit-installers/antigravity"),POLICIES={claude:{name:"Claude Code (Global)",whole:["rules","commands","agents","hooks","scripts","settings.json","schemas","session-state"],neverDelete:{},narrow:{},perFile:{},extra:["CLAUDE.md","coding-level.json",".agentkitignore",".env.example",".mcp.json.example","statusline.cjs","statusline.ps1","statusline.sh"]},codex:{name:"OpenAI Codex (Global)",whole:["rules","agents","hooks","scripts","hooks.json","session-state","schemas"],perFile:{},neverDelete:{"config.toml":"the installer preserves and merges into it \u2014 it is Codex\u2019s own config"},narrow:{},extra:["AGENTS.md","README.md","coding-level.json",".agentkitignore",".mcp.json"]},opencode:{name:"OpenCode (Global)",whole:["rules","commands","agents","scripts","plugins","opencode.json","schemas"],neverDelete:{},narrow:{},perFile:{},extra:["AGENTS.md","README.md","MCP.md","agents-contracts-reference.md","agents-registry.json","antigravity.json","bun.lock","coding-level.json"]},cursor:{name:"Cursor AI (Global)",whole:["hooks","scripts","hooks.json","schemas"],neverDelete:{"mcp.json":"the installer merges into it, so it also holds the user\u2019s MCP servers"},narrow:{},perFile:{rules:(s,e)=>[...(0,cursor_rules_1.cursorRuleFiles)(path.join(s,payload_roots_1.RULES_SOURCE_DIR)).map(t=>t.fileName),...(0,cursor_rules_1.kitOwnedRuleFileNames)(e)],agents:s=>(0,cursor_agents_1.cursorAgentFiles)(path.join(s,payload_roots_1.AGENTS_SOURCE_DIR)).map(e=>e.fileName),commands:s=>(0,cursor_rules_1.cursorCommandFiles)(path.join(s,payload_roots_1.COMMAND_SOURCE_DIR)).map(e=>e.fileName)},extra:["coding-level.json"]},kimi:{name:"Kimi Code (Global)",whole:["rules","agents","hooks","scripts","hooks.json","session-state","schemas"],perFile:{},neverDelete:{"config.toml":"the installer preserves it \u2014 it holds the user\u2019s providers and API keys","mcp.json":"the installer merges into it, so it also holds the user\u2019s MCP servers"},narrow:{},extra:["AGENTS.md","README.md","coding-level.json",".agentkitignore"]},grok:{name:"Grok Build (Global)",whole:["hooks","scripts","schemas"],perFile:{rules:s=>(0,cursor_agents_1.cursorAgentFiles)(path.join(s,payload_roots_1.RULES_SOURCE_DIR)).map(e=>e.fileName),agents:s=>(0,cursor_agents_1.cursorAgentFiles)(path.join(s,payload_roots_1.AGENTS_SOURCE_DIR)).map(e=>e.fileName),commands:s=>(0,cursor_rules_1.cursorCommandFiles)(path.join(s,payload_roots_1.COMMAND_SOURCE_DIR)).map(e=>e.fileName)},neverDelete:{"auth.json":"it holds the user\u2019s xAI credentials",sessions:"it holds the user\u2019s session history",bundled:"it ships with Grok itself \u2014 skills, agents and personas the CLI needs","marketplace-cache":"it is Grok\u2019s own plugin cache",memory:"it holds the user\u2019s cross-session memory","config.toml":"the installer merges into it \u2014 it holds the user\u2019s own configuration"},narrow:{},extra:["AGENTS.md","coding-level.json"]},hermes:{name:"Hermes Agent",whole:["rules","skills/agentkit","scripts/agentkit","SOUL.md","distribution.yaml","hooks/agentkit","plugins/agentkit-privacy","hooks.json","schemas"],perFile:{},skillsDirIsExclusive:!0,neverDelete:{"config.yaml":"it holds the user\u2019s providers \u2014 only agentkit\u2019s hook block is stripped"},narrow:{},extra:["AGENTS.md","README.md","coding-level.json",".agentkitignore"]},openclaw:{name:"OpenClaw (Global)",whole:["rules","skills","scripts","plugin","schemas"],perFile:{},skillsDirIsExclusive:!0,neverDelete:{},narrow:{},extra:["README.md","coding-level.json",".agentkitignore","hooks"]},omp:{name:"Oh My Pi (Global)",whole:["skills","scripts","guard","schemas"],perFile:{},neverDelete:{"mcp.json":"the installer merges into it, so it also holds the user\u2019s MCP servers"},narrow:{},skillsDirIsExclusive:!0,extra:["README.md","coding-level.json",".agentkitignore"],extraOutsideKitRoot:(s,e)=>[...new Set([omp_home_1.OMP_RULES_DIR,omp_home_1.OMP_AGENTS_DIR,omp_home_1.OMP_COMMANDS_DIR].flatMap(t=>(0,omp_managed_1.ompManagedFileNames)(path.join(e,t)).map(o=>path.join(t,o)))),omp_home_1.OMP_EXTENSION_FILE]},pi:{name:"Pi (Global)",whole:[".agentkit.json"],perFile:{},neverDelete:{},narrow:{},skillsDirIsExclusive:!1,extra:[],extraOutsideKitRoot:(s,e)=>[pi_home_1.PI_EXTENSION_FILE,pi_home_1.PI_SUBAGENT_EXTENSION_FILE,...(0,omp_managed_1.ompManagedFileNames)(path.join(e,pi_home_1.PI_PROMPTS_DIR)).map(t=>path.join(pi_home_1.PI_PROMPTS_DIR,t)),...(0,omp_managed_1.ompManagedFileNames)(path.join(e,pi_home_1.PI_AGENTS_DIR)).map(t=>path.join(pi_home_1.PI_AGENTS_DIR,t))]},antigravity:{name:"Antigravity (Global)",whole:["scripts","schemas"],perFile:{},neverDelete:{"mcp_config.json":"the installer merges into it, so it also holds the user\u2019s MCP servers"},narrow:{plugins:[antigravity_1.ANTIGRAVITY_PLUGIN_REL,...antigravity_1.LEGACY_ANTIGRAVITY_PLUGIN_NAMES.map(s=>path.join("plugins",s))]},extra:[],extraOutsideKitRoot:["GEMINI.md","AGENTS.md"]},devin:{name:"Devin CLI (Global)",whole:["scripts","schemas"],perFile:{agents:(s,e)=>(0,devin_agents_1.devinOwnedAgentNames)(e),hooks:()=>(0,devin_hooks_1.devinHookFileNames)()},neverDelete:{"config.json":"the installer merges into its `hooks` key \u2014 the rest is the user\u2019s config","mcp_config.json":"the installer merges into it, so it also holds the user\u2019s MCP servers"},narrow:{},extra:[".agentkitignore"],extraOutsideKitRoot:()=>(0,devin_rules_1.devinOwnedRuleNames)(path.join((0,devin_home_1.resolveDevinHomeDir)(),"rules")).map(s=>path.join((0,devin_home_1.resolveDevinHomeDir)(),"rules",s))}};function claimedLayoutRows(s,e,t){const o=POLICIES[s],n=new Set(o.whole);return(0,kit_layout_1.layoutFor)(s,"global").flatMap(i=>{const r=i.path;if(r in o.neverDelete)return[];if(o.narrow[r])return o.narrow[r];const a=o.perFile[r];return a?[...new Set(a(e,path.join(t,r)))].map(c=>path.join(r,c)):n.has(r)?[r]:[]})}function unclaimedGlobalLayoutRows(s){const e=POLICIES[s],t=new Set([...e.whole,...Object.keys(e.neverDelete),...Object.keys(e.narrow),...Object.keys(e.perFile)]),o=[...e.whole,...Object.values(e.narrow).flat()],n=i=>o.some(r=>i.startsWith(`${r}/`));return(0,kit_layout_1.layoutFor)(s,"global").map(i=>i.path).filter(i=>!t.has(i)&&!n(i))}function staleGlobalPolicyRows(s){const e=POLICIES[s],t=new Set((0,kit_layout_1.layoutFor)(s,"global").map(o=>o.path));return[...e.whole,...Object.keys(e.neverDelete),...Object.keys(e.narrow),...Object.keys(e.perFile)].filter(o=>!t.has(o)&&o!=="mcp.json")}function ownedSkillsPaths(s,e,t){if(kit_layout_1.KIT_LAYOUTS[s]?.hasAgentkitSkills===!1)return[];const n=path.join(t,kit_context_1.KIT_GLOBAL_SKILLS_DIR[s]);return POLICIES[s].skillsDirIsExclusive?[n]:[...(0,file_operations_1.shippedSkillEntries)(e).map(r=>r.name),...(0,retired_skills_1.retiredSkillNames)()].map(r=>path.join(n,r))}function resolveOutsideKitRoot(s,e,t){const o=s.extraOutsideKitRoot;return o?(typeof o=="function"?o(e,t):o).map(i=>path.isAbsolute(i)?i:path.join(t,i)):[]}function globalClearTarget(s,e={}){const t=POLICIES[s],o=e.rootOverride??(0,init_install_scope_1.resolveGlobalRoot)(s,""),n=e.rootOverride?e.rootOverride:(0,kit_context_1.globalBaseDir)(s),i=path.join(n,".agentkit.json"),r=e.payloadRoot??(0,package_root_1.packageRoot)(),a=[...claimedLayoutRows(s,r,n).map(l=>path.join(n,l)),...ownedSkillsPaths(s,r,n),...t.extra.map(l=>path.join(n,l)),...resolveOutsideKitRoot(t,r,o),i,path.join(n,install_manifest_1.MANIFEST_FILENAME)];return{key:e.key??`${s}-global`,name:e.name??t.name,dirPath:o,requiresMarker:i,ownedPaths:[...new Set(a)],group:(0,ui_1.kitGroup)(s)}}function globalClearTargets(){return[globalClearTarget("claude"),globalClearTarget("codex"),globalClearTarget("opencode"),globalClearTarget("opencode",{key:"opencode-legacy",name:"OpenCode (Legacy Global)",rootOverride:path.join((0,home_dir_1.homeDir)(),".opencode")}),globalClearTarget("cursor"),globalClearTarget("antigravity"),globalClearTarget("kimi"),globalClearTarget("openclaw"),globalClearTarget("omp"),globalClearTarget("grok"),globalClearTarget("pi"),globalClearTarget("devin")]}
@@ -1 +1 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,o,t,e){e===void 0&&(e=t);var n=Object.getOwnPropertyDescriptor(o,t);(!n||("get"in n?!o.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return o[t]}}),Object.defineProperty(i,e,n)}):(function(i,o,t,e){e===void 0&&(e=t),i[e]=o[t]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}):function(i,o){i.default=o}),__importStar=this&&this.__importStar||(function(){var i=function(o){return i=Object.getOwnPropertyNames||function(t){var e=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[e.length]=n);return e},i(o)};return function(o){if(o&&o.__esModule)return o;var t={};if(o!=null)for(var e=i(o),n=0;n<e.length;n++)e[n]!=="default"&&__createBinding(t,o,e[n]);return __setModuleDefault(t,o),t}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.MANUAL_KIT_READERS=exports.SHARED_FILE_KITS=exports.KIT_SOURCE_DIRS=void 0,exports.hooksGatedByCode=hooksGatedByCode,exports.regexTogglePairs=regexTogglePairs,exports.kitsReadingEachHook=kitsReadingEachHook,exports.hookDefaults=hookDefaults,exports.hookRegistry=hookRegistry;const fs=__importStar(require("fs")),path=__importStar(require("path")),TOGGLE_CALL=/(?:is)?[Hh]ookEnabled\(\s*['"]([a-z][a-z0-9-]*)['"]/g,SCANNED_EXTENSIONS=/\.(cjs|js|mjs|ts|py)$/,WALK_ROOTS=["agent-kit","scripts-agentkit"];exports.KIT_SOURCE_DIRS={claude:["claude","augment"],shared:["claude","augment"],cursor:["cursor"],codex:["codex"],gemini:["antigravity"],opencode:["opencode"],kimi:["kimi"],hermes:["hermes"],openclaw:["openclaw"],omp:["omp"],grok:["grok"],pi:["pi"],devin:["devin"]},exports.SHARED_FILE_KITS={"hooks/lib/agentkit-context-core.cjs":["codex","kimi"],"hooks/lib/cook-evidence-claude-protocol.cjs":["codex","kimi"],"hooks/team-context-inject.cjs":["claude","augment","codex","kimi"],"hooks/check-secrets.cjs":["claude","augment","codex","kimi","devin","hermes"],"hooks/block-risky-commands.cjs":["claude","augment","codex","kimi","devin","hermes"],"hooks/language-guard.cjs":["claude","augment","codex","kimi","devin","hermes"]},exports.MANUAL_KIT_READERS=[{kit:"codex",hook:"cook-evidence-gate",file:"agent-kit/codex/hooks/cook-evidence-gate.cjs",note:"local isHookEnabled(codexDir) reads config?.hooks?.['cook-evidence-gate']"},{kit:"kimi",hook:"cook-evidence-gate",file:"agent-kit/kimi/hooks/cook-evidence-gate.cjs",note:"local isHookEnabled(kimiDir) reads config?.hooks?.['cook-evidence-gate']"},{kit:"hermes",hook:"cook-evidence-gate",file:"agent-kit/hermes/hooks/cook-evidence-gate.cjs",note:"local isHookEnabled(root/KIT_DIR) reads config?.hooks?.['cook-evidence-gate']"},{kit:"hermes",hook:"privacy-block",file:"agent-kit/hermes/plugins/agentkit-privacy/detect.py",note:"is_disabled() reads .agentkit.json hooks['privacy-block'] and privacyBlock"}];function walk(i,o){if(fs.existsSync(i))for(const t of fs.readdirSync(i,{withFileTypes:!0})){if(t.isSymbolicLink())continue;const e=path.join(i,t.name);if(t.isDirectory()){if(t.name==="__tests__")continue;walk(e,o)}else SCANNED_EXTENSIONS.test(t.name)&&o(e)}}function hooksGatedByCode(i){const o=new Set;for(const t of WALK_ROOTS)walk(path.join(i,t),e=>{for(const n of fs.readFileSync(e,"utf-8").matchAll(TOGGLE_CALL))o.add(n[1])});return o}function regexTogglePairs(i){const o=[],t=path.join(i,"agent-kit");return walk(t,e=>{const n=path.relative(t,e),s=n.split(path.sep)[0],d=n.split(path.sep).slice(1).join("/"),r=(s==="shared"?exports.SHARED_FILE_KITS[d]:void 0)??exports.KIT_SOURCE_DIRS[s],c=path.relative(i,e);for(const a of fs.readFileSync(e,"utf-8").matchAll(TOGGLE_CALL)){if(!r)throw new Error(`hook-toggle-registry: no kit mapping for agent-kit/${s} (found '${a[1]}' in ${c})`);for(const u of r)o.push({kit:u,hook:a[1],source:c})}}),o}function kitsReadingEachHook(i){const o=new Map,t=(e,n)=>{const s=o.get(e)??new Set;s.add(n),o.set(e,s)};for(const e of regexTogglePairs(i))t(e.hook,e.kit);for(const e of exports.MANUAL_KIT_READERS)t(e.hook,e.kit);return o}function hookDefaults(i){return require(path.join(i,"agent-kit/shared/hooks/lib/agentkit-config-utils.cjs")).loadConfig().hooks}function hookRegistry(i){const o=hookDefaults(i),t=kitsReadingEachHook(i);return Object.keys(o).sort().map(e=>({name:e,defaultEnabled:o[e]!==!1,readBy:t.get(e)??new Set}))}
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,o,t,e){e===void 0&&(e=t);var n=Object.getOwnPropertyDescriptor(o,t);(!n||("get"in n?!o.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return o[t]}}),Object.defineProperty(i,e,n)}):(function(i,o,t,e){e===void 0&&(e=t),i[e]=o[t]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}):function(i,o){i.default=o}),__importStar=this&&this.__importStar||(function(){var i=function(o){return i=Object.getOwnPropertyNames||function(t){var e=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[e.length]=n);return e},i(o)};return function(o){if(o&&o.__esModule)return o;var t={};if(o!=null)for(var e=i(o),n=0;n<e.length;n++)e[n]!=="default"&&__createBinding(t,o,e[n]);return __setModuleDefault(t,o),t}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.MANUAL_KIT_READERS=exports.SHARED_FILE_KITS=exports.KIT_SOURCE_DIRS=void 0,exports.hooksGatedByCode=hooksGatedByCode,exports.regexTogglePairs=regexTogglePairs,exports.kitsReadingEachHook=kitsReadingEachHook,exports.hookDefaults=hookDefaults,exports.hookRegistry=hookRegistry;const fs=__importStar(require("fs")),path=__importStar(require("path")),payload_roots_1=require("./payload-roots"),TOGGLE_CALL=/(?:is)?[Hh]ookEnabled\(\s*['"]([a-z][a-z0-9-]*)['"]/g,SCANNED_EXTENSIONS=/\.(cjs|js|mjs|ts|py)$/,WALK_ROOTS=["agent-kit","agent-scripts"];exports.KIT_SOURCE_DIRS={claude:["claude","augment"],shared:["claude","augment"],cursor:["cursor"],codex:["codex"],gemini:["antigravity"],opencode:["opencode"],kimi:["kimi"],hermes:["hermes"],openclaw:["openclaw"],omp:["omp"],grok:["grok"],pi:["pi"],devin:["devin"]},exports.SHARED_FILE_KITS={"hooks/lib/agentkit-context-core.cjs":["codex","kimi"],"hooks/lib/cook-evidence-claude-protocol.cjs":["codex","kimi"],"hooks/team-context-inject.cjs":["claude","augment","codex","kimi"],"hooks/check-secrets.cjs":["claude","augment","codex","kimi","devin","hermes"],"hooks/block-risky-commands.cjs":["claude","augment","codex","kimi","devin","hermes"],"hooks/language-guard.cjs":["claude","augment","codex","kimi","devin","hermes"]},exports.MANUAL_KIT_READERS=[{kit:"codex",hook:"cook-evidence-gate",file:"agent-kit/codex/hooks/cook-evidence-gate.cjs",note:"local isHookEnabled(codexDir) reads config?.hooks?.['cook-evidence-gate']"},{kit:"kimi",hook:"cook-evidence-gate",file:"agent-kit/kimi/hooks/cook-evidence-gate.cjs",note:"local isHookEnabled(kimiDir) reads config?.hooks?.['cook-evidence-gate']"},{kit:"hermes",hook:"cook-evidence-gate",file:"agent-kit/hermes/hooks/cook-evidence-gate.cjs",note:"local isHookEnabled(root/KIT_DIR) reads config?.hooks?.['cook-evidence-gate']"},{kit:"hermes",hook:"privacy-block",file:"agent-kit/hermes/plugins/agentkit-privacy/detect.py",note:"is_disabled() reads .agentkit.json hooks['privacy-block'] and privacyBlock"}];function walk(i,o){if(fs.existsSync(i))for(const t of fs.readdirSync(i,{withFileTypes:!0})){if(t.isSymbolicLink())continue;const e=path.join(i,t.name);if(t.isDirectory()){if(t.name==="__tests__")continue;walk(e,o)}else SCANNED_EXTENSIONS.test(t.name)&&o(e)}}function hooksGatedByCode(i){const o=new Set;for(const t of WALK_ROOTS)walk(path.join(i,t),e=>{for(const n of fs.readFileSync(e,"utf-8").matchAll(TOGGLE_CALL))o.add(n[1])});return o}function regexTogglePairs(i){const o=[],t=path.join(i,payload_roots_1.AGENT_KIT_DIR);return walk(t,e=>{const n=path.relative(t,e),s=n.split(path.sep)[0],d=n.split(path.sep).slice(1).join("/"),r=(s==="shared"?exports.SHARED_FILE_KITS[d]:void 0)??exports.KIT_SOURCE_DIRS[s],c=path.relative(i,e);for(const a of fs.readFileSync(e,"utf-8").matchAll(TOGGLE_CALL)){if(!r)throw new Error(`hook-toggle-registry: no kit mapping for agent-kit/${s} (found '${a[1]}' in ${c})`);for(const u of r)o.push({kit:u,hook:a[1],source:c})}}),o}function kitsReadingEachHook(i){const o=new Map,t=(e,n)=>{const s=o.get(e)??new Set;s.add(n),o.set(e,s)};for(const e of regexTogglePairs(i))t(e.hook,e.kit);for(const e of exports.MANUAL_KIT_READERS)t(e.hook,e.kit);return o}function hookDefaults(i){return require(path.join(i,"agent-kit/shared/hooks/lib/agentkit-config-utils.cjs")).loadConfig().hooks}function hookRegistry(i){const o=hookDefaults(i),t=kitsReadingEachHook(i);return Object.keys(o).sort().map(e=>({name:e,defaultEnabled:o[e]!==!1,readBy:t.get(e)??new Set}))}
@@ -0,0 +1 @@
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,t,n,e){e===void 0&&(e=n);var o=Object.getOwnPropertyDescriptor(t,n);(!o||("get"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(i,e,o)}):(function(i,t,n,e){e===void 0&&(e=n),i[e]=t[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(i,t){Object.defineProperty(i,"default",{enumerable:!0,value:t})}):function(i,t){i.default=t}),__importStar=this&&this.__importStar||(function(){var i=function(t){return i=Object.getOwnPropertyNames||function(n){var e=[];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[e.length]=o);return e},i(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var e=i(t),o=0;o<e.length;o++)e[o]!=="default"&&__createBinding(n,t,e[o]);return __setModuleDefault(n,t),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.runHooks=runHooks;const path=__importStar(require("path")),p=__importStar(require("@clack/prompts")),agentkit_config_file_1=require("../agentkit-config-file"),hook_toggle_registry_1=require("../hook-toggle-registry"),home_dir_1=require("../home-dir"),hooks_write_policy_1=require("../hooks-write-policy"),kit_context_1=require("../kit-context"),init_install_scope_1=require("../init-install-scope"),kits_1=require("../kits"),logger_1=require("../logger");function effectiveValue(i,t){const n=t[i.name];return n===!1?!1:n===!0?!0:n&&typeof n=="object"&&n.enabled===!1?!1:i.defaultEnabled}function closeMatches(i,t){const n=i.toLowerCase();return t.filter(e=>e.includes(n)||n.includes(e)||e.slice(0,3)===n.slice(0,3)).slice(0,5)}function usage(){(0,logger_1.printInfo)("Usage:"),(0,logger_1.printInfo)(" agentkit hooks pick toggles interactively"),(0,logger_1.printInfo)(" agentkit hooks list one kit \u2014 picks it when it has to"),(0,logger_1.printInfo)(" agentkit hooks list --kit <name> one named kit, no prompt"),(0,logger_1.printInfo)(" agentkit hooks list --global every global install"),(0,logger_1.printInfo)(" agentkit hooks enable <name\u2026> turn one or more hooks on"),(0,logger_1.printInfo)(" agentkit hooks disable <name\u2026> turn one or more hooks off"),(0,logger_1.printInfo)(" agentkit hooks enable --all master switch: every hook on"),(0,logger_1.printInfo)(" agentkit hooks disable --all master switch: every hook off"),(0,logger_1.printInfo)(" agentkit hooks help show full help message"),(0,logger_1.printInfo)(""),(0,logger_1.printInfo)("Options:"),(0,logger_1.printInfo)(" --kit <name> target one kit by name, whatever the cwd"),(0,logger_1.printInfo)(" --global global installs only"),(0,logger_1.printInfo)(" --all the master switch, not named hooks")}function contextLabel(i,t){const n=`${kits_1.kitDefinitions[i.kit].name} (${i.scope})`;return t?`${n} \u2014 ${logger_1.chalk.dim(i.configPath)}`:n}function printToggleTable(i,t){const n=(0,agentkit_config_file_1.readSection)((0,agentkit_config_file_1.readKitConfig)(t.configPath),"hooks");(0,agentkit_config_file_1.readHooksEnabled)(t.configPath)||console.log(` ${logger_1.chalk.red("DISABLED")} ${logger_1.chalk.bold("all hooks")} ${logger_1.chalk.dim("(hooksEnabled: false \u2014 every row below is off)")}`);let o=!1;for(const s of i){const c=effectiveValue(s,n)?logger_1.chalk.green("enabled "):logger_1.chalk.red("disabled"),l=s.name in n?"":logger_1.chalk.dim(" (default)"),h=s.readBy.has(t.kit)?"":logger_1.chalk.yellow(` \u2014 not read by ${t.kit}`);h&&(o=!0),console.log(` ${c} ${s.name}${l}${h}`)}return o}function printLists(i,t,n={}){const{note:e}=n,o=t.length>1;let s=!1;for(const r of t)(0,logger_1.printSection)(`Hook toggles \u2014 ${contextLabel(r,o)}`),console.log(""),printToggleTable(i,r)&&(s=!0),console.log("");s&&((0,logger_1.printInfo)(logger_1.chalk.dim("A toggle this kit does not read is still written. Re-installing the same kit keeps it; switching this project to another kit deletes it with the old kit.")),console.log("")),e&&((0,logger_1.printInfo)(logger_1.chalk.dim(e)),console.log(""))}const SHOW_ALL="__all__";async function pickKitsToList(i,t,n){if(!t||i.length<=1)return null;const e=r=>`${r.kit}:${r.scope}`,o=await n.select({message:"Which kit?",options:[...i.map(r=>({value:e(r),label:contextLabel(r,!0)})),{value:SHOW_ALL,label:`Show every kit (${i.length})`}]});if(n.isCancel(o)||o===SHOW_ALL)return null;const s=i.find(r=>e(r)===o);return s?[s]:null}function listNote(i,t,n,e){const o=[],s=i!==null&&i.length===1?i[0]:null,r=n.length===1?n[0]:null,c=l=>s!==null&&s.kit===l.kit&&s.scope===l.scope;if(i===null&&t.length>1&&o.push(e?`Every installed kit (${t.length}) is shown.`:`Every installed kit (${t.length}) is shown: no terminal here to ask which one.`),r!==null&&!c(r)){const l=`${kits_1.kitDefinitions[r.kit].name} (${r.scope})`;o.push(s!==null?`A bare enable/disable here writes ${l} instead. Use \`--kit ${s.kit}\` to write the kit on screen.`:`A bare enable/disable here writes ${l}.`)}else r===null&&s!==null?o.push(`Use \`--kit ${s.kit}\` to enable or disable what is on screen.`):r===null&&n.length>1&&o.push(e?"A bare enable/disable would ask which kit; --kit <name> answers it instead.":"A bare enable/disable cannot choose between them without a terminal, and refuses; --kit <name> names one instead.");return o.length>0?o.join(" "):void 0}function contextFor(i,t,n=[]){const e=i.trim().toLowerCase(),o=t.filter(s=>s.kit===e);if(o.length===0){const s=[...new Set(t.map(c=>c.kit))].sort();(0,logger_1.printError)(`No install of \`${e}\` found.`),(0,logger_1.printInfo)(`Installed here: ${s.length>0?s.join(", "):"(none)"}`);const r=[...new Set(n.filter(c=>c.kit===e).map(c=>c.scope))].sort();return r.length>0&&(0,logger_1.printInfo)(`\`${e}\` is installed at ${r.join(" and ")} scope \u2014 drop the scope flag to reach it.`),null}if(o.length>1){(0,logger_1.printError)(`\`${e}\` is installed at both scopes \u2014 say which with --global.`);for(const s of o)(0,logger_1.printInfo)(` ${s.scope}: ${s.configPath}`);return null}return o[0]}function allContexts(i){const n=(0,home_dir_1.isHomeDir)(i)?[]:kit_context_1.GLOBAL_KITS.filter(o=>(0,init_install_scope_1.isKitInstalledInProject)(o,i)).map(o=>(0,kit_context_1.projectContext)(o,i)),e=kit_context_1.GLOBAL_KITS.filter(o=>(0,init_install_scope_1.isKitInstalledGlobally)(o)).map(kit_context_1.globalContext);return[...n,...e]}function applyToggle(i,t,n,e){const o=n.map(l=>l.name),s=i.filter(l=>!o.includes(l));if(s.length>0){(0,logger_1.printError)(`Unknown hook(s): ${s.join(", ")}`);for(const l of s){const h=closeMatches(l,o);h.length>0&&(0,logger_1.printInfo)(`Did you mean (for ${l}): ${h.join(", ")}?`)}return(0,logger_1.printInfo)("Run `agentkit hooks list` to see every toggle."),1}const r=kits_1.kitDefinitions[e.kit].name,c=[];for(const l of i){const h=n.find(g=>g.name===l),u=(0,hooks_write_policy_1.decideWrite)(e.kit,e.scope,l,h.readBy,r);if(!u.allowed)return(0,logger_1.printError)(u.reason),(0,logger_1.printInfo)(`Run instead: ${u.hint}`),1;u.warning&&c.push(u.warning)}(0,agentkit_config_file_1.updateSection)(e.configPath,"hooks",l=>{for(const h of i){const u=l[h];u&&typeof u=="object"?u.enabled=t:l[h]=t}});for(const l of c)(0,logger_1.printWarning)(l);for(const l of i)(0,logger_1.printSuccess)(`${t?"Enabled":"Disabled"} ${l} for ${r} (${e.scope}).`);return(0,logger_1.printInfo)(logger_1.chalk.dim(e.configPath)),t&&!(0,agentkit_config_file_1.readHooksEnabled)(e.configPath)&&(0,logger_1.printWarning)(`The master switch is off for ${r}, so ${i.length===1?"this hook stays":"these hooks stay"} off until you run \`agentkit hooks enable --all\`.`),0}function applyMasterSwitch(i,t,n,e){if(i.length>0)return(0,logger_1.printError)("`--all` writes every hook of a kit, so it cannot be combined with a name."),(0,logger_1.printInfo)(`Drop either the flag or \`${i[0]}\`: \`agentkit hooks ${t?"enable":"disable"} --all\``),1;const o=kits_1.kitDefinitions[e.kit].name;return n.some(s=>s.readBy.has(e.kit))||(0,logger_1.printWarning)(`${o} ships no code that reads a hook toggle \u2014 setting the master switch here has no effect on this kit today.`),(0,agentkit_config_file_1.writeHooksEnabled)(e.configPath,t),(0,logger_1.printSuccess)(t?`Every hook enabled for ${o} (${e.scope}).`:`Every hook disabled for ${o} (${e.scope}).`),(0,logger_1.printInfo)(logger_1.chalk.dim(e.configPath)),t||(0,logger_1.printInfo)(logger_1.chalk.dim("Per-hook values are untouched, so `agentkit hooks enable --all` restores them.")),0}async function pickToggles(i,t,n,e){const o=(0,agentkit_config_file_1.readSection)((0,agentkit_config_file_1.readKitConfig)(t.configPath),"hooks"),s="__master__",r=await e.multiselect({message:`Hooks for ${contextLabel(t,!1)}`,options:[{value:s,label:n?"All hooks \u2014 enabled":"All hooks \u2014 DISABLED",hint:"master switch"},...i.map(f=>{const b=effectiveValue(f,o),a=f.readBy.has(t.kit)?"":` (not read by ${t.kit})`;return{value:f.name,label:`${f.name}${a}`,hint:b?"enabled":"disabled"}})],initialValues:[...n?[s]:[],...i.filter(f=>effectiveValue(f,o)).map(f=>f.name)],required:!1});if(e.isCancel(r))return(0,logger_1.printInfo)("Cancelled \u2014 nothing written."),0;const c=r,l=c.includes(s),h=new Set(c.filter(f=>f!==s));let u=0;l!==n&&((0,agentkit_config_file_1.writeHooksEnabled)(t.configPath,l),u+=1);const g=i.filter(f=>effectiveValue(f,o)!==h.has(f.name));g.length>0&&((0,agentkit_config_file_1.updateSection)(t.configPath,"hooks",f=>{for(const b of g){const a=f[b.name];a&&typeof a=="object"?a.enabled=h.has(b.name):f[b.name]=h.has(b.name)}}),u+=g.length);const d=kits_1.kitDefinitions[t.kit].name;return u===0?((0,logger_1.printInfo)(`No change \u2014 ${d} (${t.scope}) is already in that state.`),0):((0,logger_1.printSuccess)(`Updated ${u} setting${u===1?"":"s"} for ${d} (${t.scope}).`),(0,logger_1.printInfo)(logger_1.chalk.dim(t.configPath)),0)}async function runHooks(i,t={}){const n=t.repoRoot??path.resolve(__dirname,"..","..",".."),e=t.targetDir??process.cwd(),o=t.isTTY??process.stdout.isTTY,s=t.prompts??p,[r,...c]=i;if(!r){if(!o)return usage(),0;const a=await(0,kit_context_1.resolveContext)(e,{promptMessage:"Which kit to configure?",nonTtyHint:"Pick one with `agentkit hooks list`, or cd into a project."});if(!a)return 1;const k=(0,hook_toggle_registry_1.hookRegistry)(n);return pickToggles(k,a,(0,agentkit_config_file_1.readHooksEnabled)(a.configPath),s)}if(!["list","enable","disable"].includes(r))return(0,logger_1.printError)(`Unknown subcommand: ${r}`),usage(),1;const l=c.findIndex(a=>a==="--kit"||a.startsWith("--kit=")),h=c.includes("--global"),u=c.includes("--all");let g=null;if(l!==-1){const a=c[l];if(g=a.includes("=")?a.slice(a.indexOf("=")+1):c[l+1]??"",!g)return(0,logger_1.printError)("--kit needs a kit name, e.g. `--kit omp`."),1}const d=c.filter((a,k)=>!a.startsWith("--kit")&&a!=="--global"&&a!=="--all"&&!(l!==-1&&!c[l].includes("=")&&k===l+1));if(g!==null||h){const a=allContexts(e),k=a.filter(w=>h?w.scope==="global":!0);if(k.length===0)return h&&a.length>0?((0,logger_1.printError)("No global AgentKit install detected."),(0,logger_1.printInfo)("This machine has a project install only. Run `agentkit init --global` first.")):(0,logger_1.printError)("No AgentKit install detected. Run `agentkit init` first."),1;const m=g!==null?contextFor(g,k,a):null;if(g!==null&&m===null)return 1;const y=m??(k.length===1?k[0]:null);if(y!==null){const w=(0,hook_toggle_registry_1.hookRegistry)(n);return r==="list"?(printLists(w,[y],{note:m!==null?listNote([m],[m],(0,kit_context_1.candidateContexts)(e),o):void 0}),0):u?applyMasterSwitch(d,r==="enable",w,y):d.length===0?((0,logger_1.printError)(`\`agentkit hooks ${r}\` needs at least one hook name.`),usage(),1):applyToggle(d,r==="enable",w,y)}const $=(0,hook_toggle_registry_1.hookRegistry)(n);return r==="list"?(printLists($,k,{note:`Every global kit (${k.length}); --kit <name> narrows it to one.`}),0):((0,logger_1.printError)(`--global names ${k.length} kits, so it cannot choose which to write.`),(0,logger_1.printInfo)(`Add --kit <name>: ${[...new Set(k.map(w=>w.kit))].sort().join(", ")}`),1)}if(r==="list"){const a=(0,hook_toggle_registry_1.hookRegistry)(n),k=allContexts(e);if(k.length===0)return(0,logger_1.printError)("No AgentKit install detected. Run `agentkit init` first."),1;const m=await pickKitsToList(k,o,s),y=(0,kit_context_1.candidateContexts)(e);return printLists(a,m??k,{note:listNote(m,k,y,o)}),0}const f=await(0,kit_context_1.resolveContext)(e,{promptMessage:"Which kit to configure?",nonTtyHint:"Pick one with `agentkit hooks list`, or cd into a project."});if(!f)return 1;const b=(0,hook_toggle_registry_1.hookRegistry)(n);return u?applyMasterSwitch(d,r==="enable",b,f):d.length===0?((0,logger_1.printError)(`\`agentkit hooks ${r}\` needs at least one hook name.`),usage(),1):applyToggle(d,r==="enable",b,f)}
@@ -0,0 +1 @@
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(n,t,o,i){i===void 0&&(i=o);var e=Object.getOwnPropertyDescriptor(t,o);(!e||("get"in e?!t.__esModule:e.writable||e.configurable))&&(e={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(n,i,e)}):(function(n,t,o,i){i===void 0&&(i=o),n[i]=t[o]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(n,t){Object.defineProperty(n,"default",{enumerable:!0,value:t})}):function(n,t){n.default=t}),__importStar=this&&this.__importStar||(function(){var n=function(t){return n=Object.getOwnPropertyNames||function(o){var i=[];for(var e in o)Object.prototype.hasOwnProperty.call(o,e)&&(i[i.length]=e);return i},n(t)};return function(t){if(t&&t.__esModule)return t;var o={};if(t!=null)for(var i=n(t),e=0;e<i.length;e++)i[e]!=="default"&&__createBinding(o,t,i[e]);return __setModuleDefault(o,t),o}})(),__importDefault=this&&this.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.runInit=runInit;const chalk_1=__importDefault(require("chalk")),fs=__importStar(require("fs")),path=__importStar(require("path")),codegraph_installer_1=require("../codegraph-installer"),home_dir_1=require("../home-dir"),gitignore_1=require("../gitignore"),init_install_scope_1=require("../init-install-scope"),kit_install_dispatch_1=require("../kit-install-dispatch"),profile_context_1=require("../kit-installers/profile-context"),install_manifest_1=require("../install-manifest"),install_registry_1=require("../install-registry"),kit_context_1=require("../kit-context"),kits_1=require("../kits"),kit_remover_1=require("../kit-remover"),kit_switch_confirm_1=require("../kit-switch-confirm"),kits_2=require("../kits"),install_profile_config_1=require("../install-profile-config"),skill_profiles_1=require("../skill-profiles"),profile_switch_confirm_1=require("../profile-switch-confirm"),logger_1=require("../logger"),ui_1=require("../ui"),init_global_plan_1=require("../init-global-plan"),claude_agents_1=require("../kit-installers/claude-agents"),init_args_1=require("../init-args");function resolveSourceRoot(){const n=process.env.AGENTKIT_SOURCE_ROOT;return n&&fs.existsSync(path.join(n,"package.json"))?n:path.resolve(__dirname,"..","..","..")}function recordInstall(n,t,o,i,e){try{(0,install_registry_1.upsertInstall)({path:o,kit:n,scope:t,kitRoot:i,...e?{version:e}:{}})}catch{}}const globalConfigDir=init_install_scope_1.kitDirWithinGlobalRoot;function stampKit(n,t){t&&(0,install_profile_config_1.stampInstallVersion)(n,t)}function planInstallProfile(n,t,o,i,e){const f=t||(0,init_install_scope_1.destHasSkillDirs)(o),u=(0,skill_profiles_1.resolveEffectiveProfile)(n,f,i.profile,e),c=f&&i.profile!==u;return{effectiveProfile:u,profileChanged:c,needsConfirm:n===null&&c}}function retainedExtraSkills(n,t,o){return n&&(!t||o.profile===null)?o.extraSkills:[]}async function runGlobalInstall(n,t,o,i,e=!1){const{repoRoot:f,targetDir:u,cliVersion:c}=o;let p;if(i){if(!(0,kits_2.supportsGlobalInstall)(i))return(0,logger_1.printError)(`${kits_2.kitDefinitions[i].name} does not support global install \u2014 it installs into a project checkout.`),1;p=[i]}else{const r=await(0,ui_1.selectKitsGlobal)();if(r===null)return(0,logger_1.printInfo)("Installation cancelled."),0;if(p=r.filter(kits_2.supportsGlobalInstall),p.length===0)return(0,logger_1.printInfo)("No kits selected \u2014 nothing to install."),0}const{plans:h,skipped:I}=await(0,init_global_plan_1.planGlobalInstalls)(p,u,{agentModelsFlag:t,skipRootPrompt:i!==void 0});if(h.length===0)return console.log(""),(0,logger_1.printInfo)("Nothing left to install."),0;const S=[],D=h.map(({kit:r,hermesProfile:a,agentModels:m,globalRoot:b})=>{const w=b??(0,init_install_scope_1.resolveGlobalRoot)(r,u,a),l=path.join(globalConfigDir(r,w),".agentkit.json"),g=fs.existsSync(l),k=(0,install_profile_config_1.readInstallSettings)(l),d=path.join(globalConfigDir(r,w),kit_context_1.KIT_GLOBAL_SKILLS_DIR[r]);return{kit:r,hermesProfile:a,agentModels:m,globalRoot:w,kitConfigPath:l,isUpdate:g,persisted:k,...planInstallProfile(n,g,d,k,r)}});for(const r of D){if(!r.needsConfirm)continue;const a=await(0,profile_switch_confirm_1.confirmProfileSwitch)({existingProfile:r.persisted.profile,newProfile:r.effectiveProfile,kitConfigPath:r.kitConfigPath,kitName:kits_2.kitDefinitions[r.kit].name,targetDir:r.globalRoot});if(!a.proceed)return(0,logger_1.printInfo)("Profile switch cancelled. Nothing was changed."),a.reason==="non-tty"?1:0}for(const{kit:r,agentModels:a,globalRoot:m,kitConfigPath:b,isUpdate:w,persisted:l,effectiveProfile:g,profileChanged:k}of D){const d=retainedExtraSkills(w,k,l),_=(0,kit_install_dispatch_1.installGlobalKit)(r,f,m,(0,skill_profiles_1.resolveSkipDirs)(f,g,d),{...r==="claude"?{agentModels:a}:{},...e?{allowSharedRoot:!0}:{},profileContext:(0,profile_context_1.buildProfileInstallContext)(f,g)});if(!_.ok)return(0,logger_1.printError)(_.reason),1;stampKit(b,c),(0,install_profile_config_1.writeInstallSettings)(b,{profile:g,extraSkills:d,...a?{agentModels:a}:{}}),recordInstall(r,"global",globalConfigDir(r,m),globalConfigDir(r,m),c),(0,logger_1.printInfo)(chalk_1.default.dim(`Install profile: ${g}`)),a&&(0,logger_1.printInfo)(chalk_1.default.dim(`Agent models: ${a}`)),await(0,codegraph_installer_1.maybeInstallCodegraph)(r,"global",u),(0,install_manifest_1.writeManifest)((0,kit_context_1.globalContext)(r),c),S.push(kits_2.kitDefinitions[r].name)}return console.log(""),S.length>0&&((0,logger_1.printSection)("Installation Complete"),(0,logger_1.printSuccess)(chalk_1.default.bold("\u2713")+" Installed globally: "+chalk_1.default.green(S.join(", "))),I.length>0&&(0,logger_1.printWarning)(`Skipped: ${I.join(", ")}`),console.log(""),(0,logger_1.printInfo)(chalk_1.default.dim("\u{1F4A1} Tip:")+" Read "+chalk_1.default.cyan.bold("README.md")+" for more information"),console.log("")),0}async function runInit(n,t={}){const o=t.sourceRoot??resolveSourceRoot(),i={repoRoot:o,targetDir:t.targetDir??process.cwd(),cliVersion:(0,install_profile_config_1.readCliVersion)(o),tty:t.isTTY??process.stdout.isTTY},{targetDir:e,cliVersion:f,tty:u}=i,c=n;(0,logger_1.printBanner)();const p=(0,init_args_1.parseKitFlag)(c);if(p.invalid)return(0,logger_1.printError)(`Unknown kit: "${p.invalid}".`),(0,logger_1.printInfo)(`Supported kits: ${kits_2.ALL_KIT_NAMES.join(", ")}.`),1;const h=p.kit,I=(0,init_args_1.parseProfileFlag)(c);if(I==="invalid")return(0,logger_1.printError)(`Unknown --profile value. Choose one of: ${skill_profiles_1.PROFILES.join(", ")}.`),1;const S=I==="prompt"?u?await(0,ui_1.selectProfile)():null:I,D=(0,init_args_1.parseAgentModelsFlag)(c);if(D==="invalid")return(0,logger_1.printError)(`Unknown --agent-models value. Choose one of: ${claude_agents_1.CLAUDE_AGENT_MODELS.join(", ")}.`),1;const r=D,a=(0,init_args_1.parseGlobalFlag)(c),m=(0,init_args_1.parseForceSharedRootFlag)(c);(0,ui_1.showMenu)(e);const b=(0,home_dir_1.isHomeDir)(e);if(a||b||h!==null&&kits_2.GLOBAL_ONLY_INSTALL_KITS.includes(h))return runGlobalInstall(S,r,i,h??void 0,m);const l=h??await(0,ui_1.selectKit)(e);if(!l||!(0,kits_2.isHostInstalled)(l)&&!await(0,ui_1.confirmUndetectedHost)(kits_2.kitDefinitions[l].name))return(0,logger_1.printInfo)("Installation cancelled."),0;if(!await(0,init_install_scope_1.confirmProjectInstallIfNeeded)(e))return(0,logger_1.printError)("Installation cancelled."),0;const k=kits_1.PROJECT_KITS.filter(s=>(0,init_install_scope_1.isKitInstalledInProject)(s,e)),d=k.includes(l),_=k.filter(s=>s!==l);if(d&&(console.log(""),(0,logger_1.printSection)("Update Mode"),(0,logger_1.printInfo)(chalk_1.default.bold("Updating")+" "+chalk_1.default.yellow.bold(kits_2.kitDefinitions[l].name)+" kit..."),console.log("")),_.length>0){console.log(""),(0,logger_1.printSection)("Switch Mode"),(0,logger_1.printWarning)(chalk_1.default.bold("Switching")+" from "+chalk_1.default.yellow(_.map(O=>kits_2.kitDefinitions[O].name).join(", "))+" to "+chalk_1.default.green.bold(kits_2.kitDefinitions[l].name)+"..."),(0,logger_1.printProgress)("A project holds one kit \u2014 removing the other(s) first..."),console.log("");const s=await(0,kit_switch_confirm_1.confirmKitSwitch)(_,l,e);if(!s.proceed)return s.reason==="declined"?((0,logger_1.printInfo)("Installation cancelled. Nothing was removed."),0):1}const P=path.join(e,kits_2.kitDefinitions[l].dir,".agentkit.json"),j=(0,install_profile_config_1.readInstallSettings)(P),{effectiveProfile:C,profileChanged:x,needsConfirm:M}=planInstallProfile(S,d,(0,kit_context_1.projectContext)(l,e).destSkillsDir,j,l);if(M){const s=await(0,profile_switch_confirm_1.confirmProfileSwitch)({existingProfile:j.profile,newProfile:C,kitConfigPath:P,kitName:kits_2.kitDefinitions[l].name,targetDir:e});if(!s.proceed)return(0,logger_1.printInfo)("Profile switch cancelled. Nothing was changed."),s.reason==="non-tty"?1:0}const y=retainedExtraSkills(d,x,j),E=(0,skill_profiles_1.resolveSkipDirs)(o,C,y),R=(0,gitignore_1.otherKitGitignoreEntries)(l);R.length>0&&((0,logger_1.printProgress)("Cleaning up .gitignore entries from other kits..."),(0,gitignore_1.cleanupGitignore)(R,e));for(const s of _)(0,logger_1.printProgress)(`Removing ${kits_2.kitDefinitions[s].name}...`),(0,kit_remover_1.removeKit)(s,e)?(0,logger_1.printSuccess)(`${kits_2.kitDefinitions[s].name} removed`):(0,logger_1.printWarning)(`Some files from ${kits_2.kitDefinitions[s].name} may not have been removed`);_.length>0&&console.log("");const v=l==="claude"?await(0,claude_agents_1.resolveClaudeAgentModelsForInstall)(r,j.agentModels,ui_1.selectClaudeAgentModels,u):void 0,q=(0,kit_install_dispatch_1.installProjectKit)(l,o,e,E,{...v?{agentModels:v}:{},profileContext:(0,profile_context_1.buildProfileInstallContext)(o,C)});return q.ok?(stampKit(P,f),recordInstall(l,"project",e,path.dirname(P),f),(0,install_profile_config_1.writeInstallSettings)(P,{profile:C,extraSkills:y,...v?{agentModels:v}:{}}),(0,logger_1.printInfo)(chalk_1.default.dim(`Install profile: ${C}`)),v&&(0,logger_1.printInfo)(chalk_1.default.dim(`Agent models: ${v}`)),(0,install_manifest_1.writeManifest)((0,kit_context_1.projectContext)(l,e),f),console.log(""),d?((0,logger_1.printSection)("Update Complete"),(0,logger_1.printSuccess)(chalk_1.default.bold("\u2713")+" "+kits_2.kitDefinitions[l].name+" updated successfully!")):((0,logger_1.printSection)("Installation Complete"),(0,logger_1.printSuccess)(chalk_1.default.bold("\u2713")+" "+kits_2.kitDefinitions[l].name+" installed successfully!")),await(0,codegraph_installer_1.maybeInstallCodegraph)(l,"project",e),console.log(""),(0,logger_1.printInfo)(chalk_1.default.dim("\u{1F4A1} Tip:")+" Read "+chalk_1.default.cyan.bold("README.md")+" for more information"),console.log(""),0):((0,logger_1.printError)(q.reason),1)}
@@ -1 +1 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,i)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),__importStar=this&&this.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[n.length]=i);return n},r(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),i=0;i<n.length;i++)n[i]!=="default"&&__createBinding(t,e,n[i]);return __setModuleDefault(t,e),t}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.readCliVersion=readCliVersion,exports.hasPersistedProfile=hasPersistedProfile,exports.readInstallSettings=readInstallSettings,exports.writeInstallSettings=writeInstallSettings,exports.stampInstallVersion=stampInstallVersion;const fs=__importStar(require("fs")),path=__importStar(require("path")),agentkit_config_file_1=require("./agentkit-config-file"),claude_agents_1=require("./kit-installers/claude-agents"),skill_profiles_1=require("./skill-profiles");function readCliVersion(r){try{const e=JSON.parse(fs.readFileSync(path.join(r,"package.json"),"utf8"));return typeof e.version=="string"?e.version:null}catch{return null}}function hasPersistedProfile(r){return typeof(0,agentkit_config_file_1.readSection)((0,agentkit_config_file_1.readKitConfig)(r),"install").profile=="string"}function readInstallSettings(r){const e=(0,agentkit_config_file_1.readSection)((0,agentkit_config_file_1.readKitConfig)(r),"install"),t=typeof e.profile=="string"&&(0,skill_profiles_1.isValidProfile)(e.profile)?e.profile:skill_profiles_1.UNRECORDED_PROFILE,n=Array.isArray(e.extraSkills)?e.extraSkills.filter(o=>typeof o=="string"):[],i=typeof e.version=="string"?e.version:void 0,l=typeof e.agentModels=="string"&&(0,claude_agents_1.isValidClaudeAgentModels)(e.agentModels)?e.agentModels:void 0;return{profile:t,extraSkills:n,...i?{version:i}:{},...l?{agentModels:l}:{}}}function writeInstallSettings(r,e){(0,agentkit_config_file_1.updateSection)(r,"install",t=>{t.profile=e.profile,e.extraSkills.length>0?t.extraSkills=[...new Set(e.extraSkills)].sort():delete t.extraSkills,e.version&&(t.version=e.version),e.agentModels&&(t.agentModels=e.agentModels)})}function stampInstallVersion(r,e){(0,agentkit_config_file_1.updateSection)(r,"install",t=>{t.version=e})}
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,i)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),__importStar=this&&this.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[n.length]=i);return n},r(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),i=0;i<n.length;i++)n[i]!=="default"&&__createBinding(t,e,n[i]);return __setModuleDefault(t,e),t}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.readCliVersion=readCliVersion,exports.hasPersistedProfile=hasPersistedProfile,exports.readInstallSettings=readInstallSettings,exports.writeInstallSettings=writeInstallSettings,exports.stampInstallVersion=stampInstallVersion;const fs=__importStar(require("fs")),path=__importStar(require("path")),agentkit_config_file_1=require("./agentkit-config-file"),claude_agents_1=require("./kit-installers/claude-agents"),skill_profiles_1=require("./skill-profiles");function readCliVersion(r){try{const e=JSON.parse(fs.readFileSync(path.join(r,"package.json"),"utf8"));return typeof e.version=="string"?e.version:null}catch{return null}}function hasPersistedProfile(r){return typeof(0,agentkit_config_file_1.readSection)((0,agentkit_config_file_1.readKitConfig)(r),"install").profile=="string"}function readInstallSettings(r){const e=(0,agentkit_config_file_1.readSection)((0,agentkit_config_file_1.readKitConfig)(r),"install"),t=typeof e.profile=="string"&&(0,skill_profiles_1.isValidProfile)(e.profile)?e.profile:null,n=Array.isArray(e.extraSkills)?e.extraSkills.filter(o=>typeof o=="string"):[],i=typeof e.version=="string"?e.version:void 0,l=typeof e.agentModels=="string"&&(0,claude_agents_1.isValidClaudeAgentModels)(e.agentModels)?e.agentModels:void 0;return{profile:t,extraSkills:n,...i?{version:i}:{},...l?{agentModels:l}:{}}}function writeInstallSettings(r,e){(0,agentkit_config_file_1.updateSection)(r,"install",t=>{e.profile!==void 0&&(t.profile=e.profile),e.extraSkills.length>0?t.extraSkills=[...new Set(e.extraSkills)].sort():delete t.extraSkills,e.version&&(t.version=e.version),e.agentModels&&(t.agentModels=e.agentModels)})}function stampInstallVersion(r,e){(0,agentkit_config_file_1.updateSection)(r,"install",t=>{t.version=e})}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PROJECT_ONLY_INSTALL_KITS=void 0,exports.installProjectKit=installProjectKit,exports.installGlobalKit=installGlobalKit;const kit_installers_1=require("./kit-installers"),claude_agents_1=require("./kit-installers/claude-agents"),init_install_scope_1=require("./init-install-scope"),profile_context_1=require("./kit-installers/profile-context");var kits_1=require("./kits");Object.defineProperty(exports,"PROJECT_ONLY_INSTALL_KITS",{enumerable:!0,get:function(){return kits_1.PROJECT_ONLY_INSTALL_KITS}});function installProjectKit(s,e,t,n,r={}){const a=r.profileContext??profile_context_1.EMPTY_PROFILE_CONTEXT;switch(s){case"claude":return(0,kit_installers_1.installClaude)(e,t,n,r.agentModels??claude_agents_1.DEFAULT_CLAUDE_AGENT_MODELS,a),{ok:!0};case"opencode":return(0,kit_installers_1.installOpenCode)(e,t,n,a),{ok:!0};case"cursor":return(0,kit_installers_1.installCursor)(e,t,n,a),{ok:!0};case"antigravity":return(0,kit_installers_1.installAntigravity)(e,t,n,a),{ok:!0};case"codex":return(0,kit_installers_1.installCodex)(e,t,n,a),{ok:!0};case"kimi":return(0,kit_installers_1.installKimi)(e,t,n,a),{ok:!0};case"grok":return(0,kit_installers_1.installGrok)(e,t,n,a),{ok:!0};case"hermes":return{ok:!1,reason:"Hermes Agent installs into a profile under ~/.hermes, not into a project. Run `agentkit init` from your home directory."};case"openclaw":return{ok:!1,reason:"OpenClaw installs into its state root at ~/.openclaw, not into a project. Run `agentkit init` from your home directory."};case"omp":return{ok:!1,reason:"Oh My Pi installs into its agent directory at ~/.omp/agent, not into a project. Run `agentkit init` from your home directory."};case"augment":return(0,kit_installers_1.installAugment)(e,t,n,a),{ok:!0};case"pi":return(0,kit_installers_1.installPi)(e,t,n,a),{ok:!0};case"devin":return(0,kit_installers_1.installDevin)(e,t,n,a),{ok:!0};default:return{ok:!1,reason:`No project installer for ${s}.`}}}function installGlobalKit(s,e,t,n,r={}){const a=r.profileContext??profile_context_1.EMPTY_PROFILE_CONTEXT,l=(0,init_install_scope_1.sharedRootConflict)(s);if(l&&!r.allowSharedRoot)return{ok:!1,reason:`${l.dir} already holds an ${l.other} install. Pi and ${l.other} both read ${l.envVar}, so they resolve to this same root and would overwrite each other's payload and marker. Unset ${l.envVar} to install into the default directory, or re-run with --force-shared-root to install here anyway.`};switch(s){case"claude":return(0,kit_installers_1.installClaudeGlobal)(e,t,n,r.agentModels??claude_agents_1.DEFAULT_CLAUDE_AGENT_MODELS,a),{ok:!0};case"opencode":return(0,kit_installers_1.installOpenCodeGlobal)(e,t,n,a),{ok:!0};case"antigravity":return(0,kit_installers_1.installAntigravityGlobal)(e,t,n,a),{ok:!0};case"codex":return(0,kit_installers_1.installCodexGlobal)(e,t,n,a),{ok:!0};case"cursor":return(0,kit_installers_1.installCursorGlobal)(e,t,n,a),{ok:!0};case"kimi":return(0,kit_installers_1.installKimiGlobal)(e,t,n,a),{ok:!0};case"hermes":return(0,kit_installers_1.installHermesGlobal)(e,t,n,a),{ok:!0};case"openclaw":return(0,kit_installers_1.installOpenClawGlobal)(e,t,n,a),{ok:!0};case"omp":return(0,kit_installers_1.installOmpGlobal)(e,t,n,a),{ok:!0};case"grok":return(0,kit_installers_1.installGrokGlobal)(e,t,n,a),{ok:!0};case"pi":return(0,kit_installers_1.installPiGlobal)(e,t,n,a),{ok:!0};case"devin":return(0,kit_installers_1.installDevinGlobal)(e,t,n,a),{ok:!0};default:return{ok:!1,reason:"Global install is only supported for Claude, OpenCode, Antigravity, Codex, Cursor, Kimi Code, Hermes, OpenClaw, Oh My Pi, Grok Build, Pi and Devin CLI."}}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PROJECT_ONLY_INSTALL_KITS=void 0,exports.installProjectKit=installProjectKit,exports.installGlobalKit=installGlobalKit;const kit_installers_1=require("./kit-installers"),claude_agents_1=require("./kit-installers/claude-agents"),init_install_scope_1=require("./init-install-scope"),profile_context_1=require("./kit-installers/profile-context");var kits_1=require("./kits");Object.defineProperty(exports,"PROJECT_ONLY_INSTALL_KITS",{enumerable:!0,get:function(){return kits_1.PROJECT_ONLY_INSTALL_KITS}});const KIT_DESCRIPTORS={claude:{project:o=>(0,kit_installers_1.installClaude)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.agentModels,o.profile),global:o=>(0,kit_installers_1.installClaudeGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.agentModels,o.profile)},opencode:{project:o=>(0,kit_installers_1.installOpenCode)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile),global:o=>(0,kit_installers_1.installOpenCodeGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)},cursor:{project:o=>(0,kit_installers_1.installCursor)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile),global:o=>(0,kit_installers_1.installCursorGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)},antigravity:{project:o=>(0,kit_installers_1.installAntigravity)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile),global:o=>(0,kit_installers_1.installAntigravityGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)},codex:{project:o=>(0,kit_installers_1.installCodex)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile),global:o=>(0,kit_installers_1.installCodexGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)},kimi:{project:o=>(0,kit_installers_1.installKimi)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile),global:o=>(0,kit_installers_1.installKimiGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)},grok:{project:o=>(0,kit_installers_1.installGrok)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile),global:o=>(0,kit_installers_1.installGrokGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)},hermes:{projectRefusal:"Hermes Agent installs into a profile under ~/.hermes, not into a project. Run `agentkit init` from your home directory.",global:o=>(0,kit_installers_1.installHermesGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)},openclaw:{projectRefusal:"OpenClaw installs into its state root at ~/.openclaw, not into a project. Run `agentkit init` from your home directory.",global:o=>(0,kit_installers_1.installOpenClawGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)},omp:{projectRefusal:"Oh My Pi installs into its agent directory at ~/.omp/agent, not into a project. Run `agentkit init` from your home directory.",global:o=>(0,kit_installers_1.installOmpGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)},augment:{project:o=>(0,kit_installers_1.installAugment)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)},pi:{project:o=>(0,kit_installers_1.installPi)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile),global:o=>(0,kit_installers_1.installPiGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)},devin:{project:o=>(0,kit_installers_1.installDevin)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile),global:o=>(0,kit_installers_1.installDevinGlobal)(o.repoRoot,o.targetDir,o.profileSkipDirs,o.profile)}};function buildContext(o,i,l,e){return{repoRoot:o,targetDir:i,profileSkipDirs:l,profile:e.profileContext??profile_context_1.EMPTY_PROFILE_CONTEXT,agentModels:e.agentModels??claude_agents_1.DEFAULT_CLAUDE_AGENT_MODELS}}function installProjectKit(o,i,l,e,a={}){const r=KIT_DESCRIPTORS[o],t=r.project;return t?(t(buildContext(i,l,e,a)),{ok:!0}):{ok:!1,reason:r.projectRefusal??`No project installer for ${o}.`}}function installGlobalKit(o,i,l,e,a={}){const r=(0,init_install_scope_1.sharedRootConflict)(o);if(r&&!a.allowSharedRoot)return{ok:!1,reason:`${r.dir} already holds an ${r.other} install. Pi and ${r.other} both read ${r.envVar}, so they resolve to this same root and would overwrite each other's payload and marker. Unset ${r.envVar} to install into the default directory, or re-run with --force-shared-root to install here anyway.`};const t=KIT_DESCRIPTORS[o].global;return t?(t(buildContext(i,l,e,a)),{ok:!0}):{ok:!1,reason:"Global install is only supported for Claude, OpenCode, Antigravity, Codex, Cursor, Kimi Code, Hermes, OpenClaw, Oh My Pi, Grok Build, Pi and Devin CLI."}}