@linhnguyen96114/agentkit-engineer 1.4.2 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +69 -0
- package/README.md +2 -2
- package/bin/agentkit.js +1 -1
- package/package.json +2 -2
- package/scripts-dist/cli/agentkit-clear.js +18 -0
- package/scripts-dist/{agentkit-config.js → cli/agentkit-config.js} +3 -3
- package/scripts-dist/cli/agentkit-dashboard.js +19 -0
- package/scripts-dist/{agentkit-decide.js → cli/agentkit-decide.js} +1 -1
- package/scripts-dist/cli/agentkit-doctor.js +20 -0
- package/scripts-dist/cli/agentkit-hooks.js +36 -0
- package/scripts-dist/cli/agentkit-init.js +39 -0
- package/scripts-dist/{agentkit-login.js → cli/agentkit-login.js} +2 -2
- package/scripts-dist/cli/agentkit-logout.js +12 -0
- package/scripts-dist/cli/agentkit-profile.js +4 -0
- package/scripts-dist/cli/agentkit-skills.js +30 -0
- package/scripts-dist/cli/agentkit-status.js +22 -0
- package/scripts-dist/cli/agentkit-uninstall.js +18 -0
- package/scripts-dist/cli/agentkit-update.js +17 -0
- package/scripts-dist/{agentkit-whoami.js → cli/agentkit-whoami.js} +2 -2
- package/scripts-dist/gen/check-upstream.js +6 -0
- package/scripts-dist/gen/frontend-cli.js +4 -3
- package/scripts-dist/gen/generate-agentkit-configs.js +2 -0
- package/scripts-dist/gen/generate-catalogs.js +10 -0
- package/scripts-dist/{run-skill-tests.js → gen/run-skill-tests.js} +1 -1
- package/scripts-dist/gen/sync-gamedev-upstream.js +22 -0
- package/scripts-dist/gen/sync-upstream.js +1 -0
- package/scripts-dist/gen/update-check-worker.js +2 -0
- package/scripts-dist/gen/upstream-skill-syncers.js +5 -0
- package/scripts-dist/gen/upstream-suite-syncers.js +12 -0
- package/scripts-dist/{validate-agents-registry.js → gen/validate-agents-registry.js} +1 -1
- package/scripts-dist/lib/agentkit-config-file.js +2 -2
- package/scripts-dist/lib/auth/cli.js +1 -1
- package/scripts-dist/lib/clear/cli.js +4 -0
- package/scripts-dist/lib/cli.js +3 -0
- package/scripts-dist/lib/codegraph-installer/mcp-sync.js +1 -1
- package/scripts-dist/lib/doctor/checks-hooks.js +2 -2
- package/scripts-dist/lib/doctor/checks-rules.js +1 -1
- package/scripts-dist/lib/doctor/checks-skills.js +1 -1
- package/scripts-dist/lib/doctor/checks-soul.js +1 -1
- package/scripts-dist/lib/doctor/profile-resolution.js +1 -1
- package/scripts-dist/lib/dropped-mcp-servers.js +1 -1
- package/scripts-dist/lib/file-operations.js +2 -2
- package/scripts-dist/lib/frontmatter.js +2 -0
- package/scripts-dist/lib/gitignore.js +5 -5
- package/scripts-dist/lib/global-clear-targets.js +1 -1
- package/scripts-dist/lib/hook-toggle-registry.js +1 -1
- package/scripts-dist/lib/hooks/cli.js +1 -0
- package/scripts-dist/lib/init/cli.js +1 -0
- package/scripts-dist/lib/install-profile-config.js +1 -1
- package/scripts-dist/lib/kit-install-dispatch.js +1 -1
- package/scripts-dist/lib/kit-remover.js +1 -1
- package/scripts-dist/lib/kit-scan.js +1 -1
- package/scripts-dist/lib/kits.js +1 -1
- package/scripts-dist/lib/payload/extract.js +1 -1
- package/scripts-dist/lib/payload/retention.js +1 -1
- package/scripts-dist/lib/payload-roots.js +1 -0
- package/scripts-dist/lib/profile-block.js +2 -2
- package/scripts-dist/lib/profile-remove.js +1 -1
- package/scripts-dist/lib/profile-rules.js +1 -1
- package/scripts-dist/lib/profile-switch-confirm.js +1 -1
- package/scripts-dist/lib/publish/payload-manifest.js +1 -1
- package/scripts-dist/lib/publish/public-client-manifest.js +1 -1
- package/scripts-dist/lib/server/kit-actions.js +1 -1
- package/scripts-dist/lib/skill-profiles.js +1 -1
- package/scripts-dist/lib/skill-tests.js +1 -1
- package/scripts-dist/lib/skills/cli.js +1 -0
- package/scripts-dist/lib/skills/skill-companion-assets.js +6 -0
- package/scripts-dist/lib/skills/skills-context-options.js +1 -0
- package/scripts-dist/lib/ui.js +1 -1
- package/scripts-dist/lib/update/cli.js +4 -0
- package/scripts-dist/lib/update-notifier.js +1 -1
- package/scripts-dist/{build-hermes-distribution.js → ops/build-hermes-distribution.js} +1 -1
- package/scripts-dist/agentkit-clear.js +0 -21
- package/scripts-dist/agentkit-dashboard.js +0 -19
- package/scripts-dist/agentkit-doctor.js +0 -20
- package/scripts-dist/agentkit-hooks.js +0 -36
- package/scripts-dist/agentkit-init.js +0 -39
- package/scripts-dist/agentkit-logout.js +0 -12
- package/scripts-dist/agentkit-profile.js +0 -4
- package/scripts-dist/agentkit-skills.js +0 -25
- package/scripts-dist/agentkit-status.js +0 -22
- package/scripts-dist/agentkit-uninstall.js +0 -18
- package/scripts-dist/agentkit-update.js +0 -20
- package/scripts-dist/check-upstream.js +0 -6
- package/scripts-dist/generate-agentkit-configs.js +0 -2
- package/scripts-dist/generate-catalogs.js +0 -10
- package/scripts-dist/update-check-worker.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,e,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n)}):(function(t,e,r,i){i===void 0&&(i=r),t[i]=e[r]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),__importStar=this&&this.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var i=[];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(i[i.length]=n);return i},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var i=t(e),n=0;n<i.length;n++)i[n]!=="default"&&__createBinding(r,e,i[n]);return __setModuleDefault(r,e),r}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.DELTAS=exports.BASE=exports.KEY_ORDER=exports.KITS=void 0,exports.renderConfig=renderConfig,exports.generateConfigs=generateConfigs;const fs=__importStar(require("fs")),path=__importStar(require("path")),payload_roots_1=require("../lib/payload-roots"),{deepMerge}=require(path.join(__dirname,"..","..","agent-kit","shared","hooks","lib","agentkit-config-utils.cjs"));exports.KITS=["claude","codex","devin","hermes","kimi","omp","openclaw","opencode"],exports.KEY_ORDER=["$schema","statusline","privacyBlock","docs","plan","paths","locale","trust","project","antigravity","skills","hooks","assertions"],exports.BASE={$schema:"./schemas/agentkit-config.schema.json",privacyBlock:!0,docs:{maxLoc:800},plan:{namingFormat:"{date}-{issue}-{slug}",dateFormat:"YYMMDD-HHmm",issuePrefix:"GH-",reportsDir:"reports",resolution:{order:["session","branch"],branchPattern:"(?:feat|fix|chore|refactor|docs)/(?:[^/]+/)?(.+)"},validation:{mode:"prompt",minQuestions:3,maxQuestions:8,focusAreas:["assumptions","risks","tradeoffs","architecture"]}},paths:{docs:"docs",plans:"plans"},locale:{thinkingLanguage:null,responseLanguage:null},trust:{passphrase:null,enabled:!1},project:{type:"auto",packageManager:"auto",framework:"auto"},hooks:{},assertions:[]},exports.DELTAS={claude:{statusline:"minimal",antigravity:{model:"gemini-3.8-flash-high"},skills:{research:{useAntigravity:!0}}},codex:{statusline:"minimal",antigravity:{model:"gemini-3.8-flash-high"},skills:{research:{useAntigravity:!0}}},devin:{statusline:"minimal",antigravity:{model:"gemini-3.8-flash-high"},skills:{research:{useAntigravity:!0}}},hermes:{statusline:"minimal",skills:{research:{useAntigravity:!1}}},kimi:{statusline:"minimal",antigravity:{model:"gemini-3.8-flash-high"},skills:{research:{useAntigravity:!0}}},omp:{statusline:"minimal",antigravity:{model:"gemini-3.8-flash-high"},skills:{research:{useAntigravity:!0}}},openclaw:{statusline:"minimal",antigravity:{model:"gemini-3.8-flash-high"},skills:{research:{useAntigravity:!0}}},opencode:{statusline:"minimal",antigravity:{model:"gemini-3.8-flash-high"},skills:{research:{useAntigravity:!0}}}};function renderConfig(t){const e=exports.DELTAS[t];if(e===void 0)throw new Error(`no delta defined for kit "${t}"`);const r=deepMerge({...exports.BASE},e),i={};for(const s of exports.KEY_ORDER)s in r&&(i[s]=r[s]);const n=new Set(Object.keys(i));for(const s of Object.keys(r))if(!n.has(s))throw new Error(`kit "${t}": key "${s}" is not in KEY_ORDER and would be dropped`);return`${JSON.stringify(i,null,2)}
|
|
2
|
+
`}function generateConfigs(t){for(const e of exports.KITS){const r=path.join(t,payload_roots_1.AGENT_KIT_DIR,e,".agentkit.json");fs.writeFileSync(r,renderConfig(e))}return[...exports.KITS]}if(require.main===module){const t=path.resolve(__dirname,"..",".."),e=generateConfigs(t);console.log(`agent-kit/*/.agentkit.json \u2014 ${e.length} kits: ${e.join(", ")}`)}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,r,e,n){n===void 0&&(n=e);var a=Object.getOwnPropertyDescriptor(r,e);(!a||("get"in a?!r.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return r[e]}}),Object.defineProperty(t,n,a)}):(function(t,r,e,n){n===void 0&&(n=e),t[n]=r[e]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(t,r){Object.defineProperty(t,"default",{enumerable:!0,value:r})}):function(t,r){t.default=r}),__importStar=this&&this.__importStar||(function(){var t=function(r){return t=Object.getOwnPropertyNames||function(e){var n=[];for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(n[n.length]=a);return n},t(r)};return function(r){if(r&&r.__esModule)return r;var e={};if(r!=null)for(var n=t(r),a=0;a<n.length;a++)n[a]!=="default"&&__createBinding(e,r,n[a]);return __setModuleDefault(e,r),e}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.GUIDE_COMMANDS_END=exports.GUIDE_COMMANDS_START=exports.SKILL_STATUSES=exports.CATEGORY_TITLES=void 0,exports.collectSkills=collectSkills,exports.collectAgents=collectAgents,exports.collectCommands=collectCommands,exports.renderSkillsYaml=renderSkillsYaml,exports.renderAgentsYaml=renderAgentsYaml,exports.renderCommandsYaml=renderCommandsYaml,exports.renderSkillsReadme=renderSkillsReadme,exports.slashInvocation=slashInvocation,exports.renderGuideCommandSection=renderGuideCommandSection,exports.syncGuideCommandSections=syncGuideCommandSections,exports.generateCatalogs=generateCatalogs;const fs=__importStar(require("fs")),path=__importStar(require("path")),frontmatter_1=require("../lib/frontmatter"),agent_metadata_1=require("../lib/kit-installers/agent-metadata"),payload_roots_1=require("../lib/payload-roots"),SKILL_GROUPS=[],NOT_SKILLS=new Set(["common",...SKILL_GROUPS]);exports.CATEGORY_TITLES={"ai-ml":"AI & Machine Learning",frontend:"Frontend & Design",backend:"Backend Development",infrastructure:"Infrastructure & DevOps",database:"Database & Storage","dev-tools":"Development Tools",multimedia:"Multimedia & Processing",frameworks:"Frameworks & Platforms",security:"Security",design:"Design",documents:"Document Processing",gamedev:"Game Development",marketing:"Marketing & Growth",seo:"SEO & Search",utilities:"Utilities & Helpers",other:"Other"},exports.SKILL_STATUSES=new Set(["experimental","stable","deprecated"]);function yamlString(t){return`"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function readSkill(t,r,e){const n=path.join(t,e),a=path.join(n,"SKILL.md");if(!fs.existsSync(a))return null;const s=(0,frontmatter_1.parseFrontmatter)(fs.readFileSync(a,"utf8")),i=(0,frontmatter_1.cleanFrontmatterValue)(s.category)||"other",o=(0,frontmatter_1.cleanFrontmatterValue)(s.status)||"stable";return{name:r,path:`${e}/SKILL.md`,description:(0,frontmatter_1.cleanFrontmatterValue)(s.description),category:i in exports.CATEGORY_TITLES?i:"other",status:exports.SKILL_STATUSES.has(o)?o:"stable",user_invocable:(0,frontmatter_1.cleanFrontmatterValue)(s["user-invocable"])==="true",has_scripts:fs.existsSync(path.join(n,"scripts")),has_references:fs.existsSync(path.join(n,"references")),...(0,frontmatter_1.cleanFrontmatterValue)(s.upstream)?{upstream:(0,frontmatter_1.cleanFrontmatterValue)(s.upstream)}:{},...(0,frontmatter_1.cleanFrontmatterValue)(s.upstream_commit)?{upstream_commit:(0,frontmatter_1.cleanFrontmatterValue)(s.upstream_commit)}:{},...(0,frontmatter_1.cleanFrontmatterValue)(s.upstream_version)?{upstream_version:(0,frontmatter_1.cleanFrontmatterValue)(s.upstream_version)}:{},...(0,frontmatter_1.cleanFrontmatterValue)(s.synced)?{synced:(0,frontmatter_1.cleanFrontmatterValue)(s.synced)}:{}}}function collectSkills(t){const r=path.join(t,payload_roots_1.SKILL_SOURCE_DIR),e=[];for(const n of fs.readdirSync(r,{withFileTypes:!0})){if(!n.isDirectory()||n.name.startsWith("."))continue;if(SKILL_GROUPS.includes(n.name)){const s=path.join(r,n.name);for(const i of fs.readdirSync(s,{withFileTypes:!0})){if(!i.isDirectory())continue;const o=readSkill(r,i.name,`${n.name}/${i.name}`);o&&e.push({...o,category:"documents"})}continue}if(NOT_SKILLS.has(n.name))continue;const a=readSkill(r,n.name,n.name);a&&e.push(a)}return e.sort((n,a)=>n.name.localeCompare(a.name))}function collectAgents(t){const{agents:r}=(0,agent_metadata_1.readAgentsDir)(path.join(t,payload_roots_1.AGENTS_SOURCE_DIR));return r.map(e=>({name:e.name,path:`${e.name}.md`,description:(0,agent_metadata_1.trimmedDescription)(e.description),model:e.model??"inherit",read_only:e.readOnly,memory:e.memory??"none"}))}function collectCommands(t){const r=path.join(t,payload_roots_1.COMMAND_SOURCE_DIR),e=[],n=a=>{for(const s of fs.readdirSync(a,{withFileTypes:!0})){const i=path.join(a,s.name);if(s.isDirectory())n(i);else if(s.name.endsWith(".md")){const o=path.relative(r,i),l=(0,frontmatter_1.parseFrontmatter)(fs.readFileSync(i,"utf8"));e.push({name:o.replace(/\.md$/,""),path:o,description:(0,frontmatter_1.cleanFrontmatterValue)(l.description)})}}};return n(r),e.sort((a,s)=>a.name.localeCompare(s.name))}function renderSkillsYaml(t){const r=[...new Set(t.map(n=>n.category))].sort(),e=["# Generated by scripts/gen/generate-catalogs.ts -- do not edit by hand.","# Run `npm run catalog:sync` after adding or removing a skill.","metadata:"," title: Skills Catalog"," description: Catalog of every skill in AgentKit Engineer, generated from skills/.",` total_skills: ${t.length}`,` user_invocable: ${t.filter(n=>n.user_invocable).length}`,"categories:",...r.map(n=>` ${n}: ${yamlString(exports.CATEGORY_TITLES[n])}`),"legend:"," user_invocable: Callable directly as /<name>"," has_scripts: Ships executable scripts"," has_references: Ships reference documentation"," status: Lifecycle label (experimental | stable | deprecated); deprecated still installs","skills:"];for(const n of r){e.push(` ${n}:`);for(const a of t.filter(s=>s.category===n))e.push(` - name: ${a.name}`,` path: ${a.path}`,` description: ${yamlString(a.description)}`,` status: ${a.status}`,` user_invocable: ${a.user_invocable}`,` has_scripts: ${a.has_scripts}`,` has_references: ${a.has_references}`),a.upstream&&(e.push(` upstream: ${yamlString(a.upstream)}`),a.upstream_version&&e.push(` upstream_version: ${yamlString(a.upstream_version)}`),a.upstream_commit&&e.push(` upstream_commit: ${yamlString(a.upstream_commit)}`),a.synced&&e.push(` synced: ${yamlString(a.synced)}`))}return`${e.join(`
|
|
2
|
+
`)}
|
|
3
|
+
`}function renderAgentsYaml(t){const r=["# Generated by scripts/gen/generate-catalogs.ts -- do not edit by hand.","# Run `npm run catalog:sync` after adding or removing an agent.","metadata:"," title: Agents Catalog"," description: Catalog of every subagent in AgentKit Engineer, generated from agents/.",` total_agents: ${t.length}`,"legend:"," model: Pinned model, or `inherit` when the host decides"," read_only: Cannot edit files or shell out (derived from its tools)"," memory: Persistent-memory scope (project | user | none)","agents:"];for(const e of t)r.push(` - name: ${e.name}`,` path: ${e.path}`,` description: ${yamlString(e.description)}`,` model: ${e.model}`,` read_only: ${e.read_only}`,` memory: ${e.memory}`);return`${r.join(`
|
|
4
|
+
`)}
|
|
5
|
+
`}function renderCommandsYaml(t){const r=["# Generated by scripts/gen/generate-catalogs.ts -- do not edit by hand.","# Run `npm run catalog:sync` after adding or removing a command.","metadata:"," title: Commands Catalog"," description: Catalog of every slash command in AgentKit Engineer, generated from command/.",` total_commands: ${t.length}`," note: Most workflows are skills, not commands. See SKILLS.yaml for the full set.","commands:"];for(const e of t)r.push(` - name: ${e.name}`,` path: ${e.path}`,` description: ${yamlString(e.description)}`);return`${r.join(`
|
|
6
|
+
`)}
|
|
7
|
+
`}function firstSentence(t){const r=t.trim(),e=r.match(/^(.*?[.!?])(\s|$)/),n=e?e[1]:r;return n.length>160?`${n.slice(0,157).trimEnd()}...`:n}function cell(t){return t.replace(/\|/g,"\\|")}function renderSkillsReadme(t,r){const e=[...new Set(t.map(s=>s.category))].sort(),n=t.filter(s=>s.user_invocable).length,a=["<!-- Generated by scripts/gen/generate-catalogs.ts -- do not edit by hand. -->","<!-- Run `npm run catalog:sync` after adding or removing a skill. -->","","# Skills Library","",`**${t.length} skills.** ${n} are invocable directly as \`/<name>\`; the rest`,"activate when the model judges them relevant. Machine-readable catalog:","[`guide/SKILLS.yaml`](../guide/SKILLS.yaml).","","Generated from each skill's own frontmatter, so it cannot drift from what ships.","Run `npm run catalog:sync` after adding or removing one.","","---","","## How to Use Skills","","### Name one directly","","```bash",'/ak-plan "add OAuth login" # research and write a phased plan',"/cook plans/<dir>/plan.md # execute that plan",'/ak-fix "TypeError in auth.ts" # diagnose the root cause, then fix it','/scout "where is payment handled"',"```","","### Or just describe the task","","The model routes to the right skill from the description alone. Naming one is an","override, not a requirement.","","```text",'"Investigate why the dashboard crashes after login" -> ak-debug','"Build a pricing page that does not look AI-generated" -> frontend-design','"Set up the memory MCP server" -> use-mcp',"```","",`Workflows that are not skills ship as ${r} slash ${r===1?"command":"commands"} --`,"see [`guide/COMMANDS.md`](../guide/COMMANDS.md).","","---","","## Catalog",""];for(const s of e){const i=t.filter(o=>o.category===s);a.push(`### ${exports.CATEGORY_TITLES[s]} (${i.length})`,"","| Skill | Invoke | What it does |","|-------|--------|--------------|",...i.map(o=>{const l=o.user_invocable?`\`/${o.name}\``:"_auto_",c=o.status==="stable"?"":o.status==="deprecated"?" \u26D4 _deprecated_":" \u26A0\uFE0F _experimental_";return`| **${o.name}**${c} | ${l} | ${cell(firstSentence(o.description))} |`}),"")}return a.push("---","","## Creating a Skill","","Use [`skill-creator`](./skill-creator/) -- it scaffolds the directory, writes the","frontmatter, and validates the result. After adding one, run `npm run catalog:sync`","so this page and the YAML catalogs pick it up.",""),a.join(`
|
|
8
|
+
`)}exports.GUIDE_COMMANDS_START="<!-- AGENTKIT:COMMANDS start - generated, do not edit -->",exports.GUIDE_COMMANDS_END="<!-- AGENTKIT:COMMANDS end -->";function slashInvocation(t){return`/${t.split(path.sep).join(":").split("/").join(":")}`}function renderGuideCommandSection(t){const r=t.map(n=>`| \`${slashInvocation(n.name)}\` | ${cell(firstSentence(n.description))} |`).join(`
|
|
9
|
+
`),e=t.length===1?"slash command is":"slash commands are";return[exports.GUIDE_COMMANDS_START,"",`These ${t.length} ${e} the complete set. Anything else you have`,"seen written as a slash command in older docs is a **skill**, invoked by name","(`ak-plan`, `cook`, `ak-fix`, `ak-debug`, `docs`, `ship`, `scout`, `git`, `design`).","Run `/ak-help <keyword>` to find the right one.","","| Command | Purpose |","| --- | --- |",r,"",exports.GUIDE_COMMANDS_END].join(`
|
|
10
|
+
`)}function syncGuideCommandSections(t,r){const e=path.join(t,payload_roots_1.GUIDE_DIR);if(!fs.existsSync(e))return[];const n=renderGuideCommandSection(r),a=[];for(const s of fs.readdirSync(e)){if(!s.startsWith("SETUP-")||!s.endsWith(".md"))continue;const i=path.join(e,s),o=fs.readFileSync(i,"utf8"),l=o.indexOf(exports.GUIDE_COMMANDS_START),c=o.indexOf(exports.GUIDE_COMMANDS_END);if(l===-1||c===-1)continue;const d=o.slice(0,l)+n+o.slice(c+exports.GUIDE_COMMANDS_END.length);d!==o&&(fs.writeFileSync(i,d),a.push(s))}return a}function generateCatalogs(t){const r=collectSkills(t),e=collectCommands(t),n=collectAgents(t);return fs.writeFileSync(path.join(t,payload_roots_1.GUIDE_DIR,"SKILLS.yaml"),renderSkillsYaml(r)),fs.writeFileSync(path.join(t,payload_roots_1.GUIDE_DIR,"COMMANDS.yaml"),renderCommandsYaml(e)),fs.writeFileSync(path.join(t,payload_roots_1.GUIDE_DIR,"AGENTS.yaml"),renderAgentsYaml(n)),fs.writeFileSync(path.join(t,payload_roots_1.SKILL_SOURCE_DIR,"README.md"),renderSkillsReadme(r,e.length)),syncGuideCommandSections(t,e),{skills:r.length,commands:e.length,agents:n.length}}if(require.main===module){const t=path.resolve(__dirname,"..",".."),{skills:r,commands:e,agents:n}=generateCatalogs(t);console.log(`guide/SKILLS.yaml \u2014 ${r} skills`),console.log(`guide/COMMANDS.yaml \u2014 ${e} commands`),console.log(`guide/AGENTS.yaml \u2014 ${n} agents`),console.log(`skills/README.md \u2014 ${r} skills`)}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(n,e,s,o){o===void 0&&(o=s);var r=Object.getOwnPropertyDescriptor(e,s);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[s]}}),Object.defineProperty(n,o,r)}):(function(n,e,s,o){o===void 0&&(o=s),n[o]=e[s]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),__importStar=this&&this.__importStar||(function(){var n=function(e){return n=Object.getOwnPropertyNames||function(s){var o=[];for(var r in s)Object.prototype.hasOwnProperty.call(s,r)&&(o[o.length]=r);return o},n(e)};return function(e){if(e&&e.__esModule)return e;var s={};if(e!=null)for(var o=n(e),r=0;r<o.length;r++)o[r]!=="default"&&__createBinding(s,e,o[r]);return __setModuleDefault(s,e),s}})();Object.defineProperty(exports,"__esModule",{value:!0});const child_process_1=require("child_process"),fs=__importStar(require("fs")),path=__importStar(require("path")),skill_tests_1=require("
|
|
2
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(n,e,s,o){o===void 0&&(o=s);var r=Object.getOwnPropertyDescriptor(e,s);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[s]}}),Object.defineProperty(n,o,r)}):(function(n,e,s,o){o===void 0&&(o=s),n[o]=e[s]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),__importStar=this&&this.__importStar||(function(){var n=function(e){return n=Object.getOwnPropertyNames||function(s){var o=[];for(var r in s)Object.prototype.hasOwnProperty.call(s,r)&&(o[o.length]=r);return o},n(e)};return function(e){if(e&&e.__esModule)return e;var s={};if(e!=null)for(var o=n(e),r=0;r<o.length;r++)o[r]!=="default"&&__createBinding(s,e,o[r]);return __setModuleDefault(s,e),s}})();Object.defineProperty(exports,"__esModule",{value:!0});const child_process_1=require("child_process"),fs=__importStar(require("fs")),path=__importStar(require("path")),skill_tests_1=require("../lib/skill-tests"),LOCAL_PY_DEPS=path.join(skill_tests_1.REPO_ROOT,".python-deps"),PYTEST_PIN="pytest==8.3.5",PYTEST_INSTALL_HINT=`python3 -m pip install --target .python-deps --break-system-packages "${PYTEST_PIN}"`;function pythonEnv(){if(!fs.existsSync(LOCAL_PY_DEPS))return process.env;const n=process.env.PYTHONPATH;return{...process.env,PYTHONPATH:n?`${LOCAL_PY_DEPS}${path.delimiter}${n}`:LOCAL_PY_DEPS}}const FILE_TIMEOUT_MS=12e4;function exec(n,e,s,o=process.env,{quiet:r=!1}={}){r||console.log(`
|
|
3
3
|
$ ${n} ${e.join(" ")} (cwd: ${path.relative(skill_tests_1.REPO_ROOT,s)||"."})`);const i=(0,child_process_1.spawnSync)(n,e,{cwd:s,env:o,stdio:r?"ignore":"inherit",timeout:FILE_TIMEOUT_MS,killSignal:"SIGKILL"});if(i.error){const l=i.error.code==="ETIMEDOUT";return console.error(l?` timed out after ${FILE_TIMEOUT_MS/1e3}s: ${e[e.length-1]}`:` failed to spawn: ${i.error.message}`),1}return i.status??1}let pytestChecked=null;function pytestAvailable(){if(pytestChecked!==null)return pytestChecked;const n=(0,child_process_1.spawnSync)("python3",["-m","pytest","--version"],{env:pythonEnv(),encoding:"utf8"});if(pytestChecked=(n.status??1)===0,pytestChecked){const e=(0,child_process_1.spawnSync)("python3",["-V"],{encoding:"utf8"}).stdout.trim();console.log(`${e} | ${n.stdout.trim()}`)}else console.error(`
|
|
4
4
|
pytest is not importable. This runner does not skip \u2014 install it:`),console.error(` ${PYTEST_INSTALL_HINT}`);return pytestChecked}function pytestRoot(n){let e=path.dirname(n);for(;e.startsWith(skill_tests_1.REPO_ROOT)&&e!==skill_tests_1.REPO_ROOT;){if(path.basename(e)==="scripts")return e;e=path.dirname(e)}return path.dirname(n)}function runFile(n,e={}){const s=path.join(skill_tests_1.REPO_ROOT,n.file);if(skill_tests_1.PYTHON_RUNNERS.includes(n.runner)){if(!pytestAvailable())return 1;const o=pytestRoot(s);return exec("python3",["-m","pytest","-q",path.relative(o,s)],o,pythonEnv(),e)}switch(n.runner){case"node:test":return exec("node",["--test",s],skill_tests_1.REPO_ROOT,process.env,e);case"node:bespoke":return exec("node",[s],skill_tests_1.REPO_ROOT,process.env,e);case"shell":return exec("bash",[s],skill_tests_1.REPO_ROOT,process.env,e);default:return console.error(`no invocation defined for runner "${n.runner}"`),1}}function verifyUnwired(n){const e=new Map(n.map(r=>[r.file,r])),s=[...skill_tests_1.KNOWN_UNWIRED].filter(r=>(0,skill_tests_1.allowlistReason)(r)==="fails"),o=[];for(const r of s){const i=e.get((0,skill_tests_1.allowlistPath)(r));if(!i||!skill_tests_1.WIRED_RUNNERS.includes(i.runner))continue;process.stdout.write(` checking ${i.file} \u2026 `);const l=runFile(i,{quiet:!0});console.log(l===0?"PASSES \u2014 remove its allowlist entry":"still fails"),l===0&&o.push(i.file)}if(o.length>0){console.error(`
|
|
5
5
|
these allowlist entries are stale \u2014 the suite passes now:`);for(const r of o)console.error(` ${r}`);return 1}return console.log(`
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(n,e,t,r){r===void 0&&(r=t);var s=Object.getOwnPropertyDescriptor(e,t);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(n,r,s)}):(function(n,e,t,r){r===void 0&&(r=t),n[r]=e[t]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),__importStar=this&&this.__importStar||(function(){var n=function(e){return n=Object.getOwnPropertyNames||function(t){var r=[];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(r[r.length]=s);return r},n(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=n(e),s=0;s<r.length;s++)r[s]!=="default"&&__createBinding(t,e,r[s]);return __setModuleDefault(t,e),t}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.AGENT_MAP=exports.SKILL_RENAME_MAP=exports.GAMEDEV_AGENTS=exports.SKIPPED_UPSTREAM_AGENTS=exports.SKIPPED_UPSTREAM_SKILLS=exports.GAMEDEV_UPSTREAM_URL=void 0,exports.stampSkillProvenance=stampSkillProvenance,exports.sanitizeUpstreamBody=sanitizeUpstreamBody,exports.transformUpstreamSkill=transformUpstreamSkill,exports.transformUpstreamAgent=transformUpstreamAgent,exports.syncGamedevFromDir=syncGamedevFromDir;const child_process_1=require("child_process"),fs=__importStar(require("fs")),os=__importStar(require("os")),path=__importStar(require("path")),generate_catalogs_1=require("./generate-catalogs"),check_upstream_1=require("./check-upstream");exports.GAMEDEV_UPSTREAM_URL="https://github.com/donchitos/claude-code-game-studios",exports.SKIPPED_UPSTREAM_SKILLS=new Set(["adopt","brainstorm","changelog","code-review","help","onboard","retrospective","security-audit","settings","skill-improve","skill-test","start","tech-debt","architecture-decision","architecture-review","bug-report","bug-triage","create-architecture","create-epics","create-stories","dev-story","estimate","milestone-review","perf-profile","qa-plan","regression-suite","reverse-document","scope-check","smoke-check","sprint-plan","sprint-status","story-done","story-readiness","test-evidence-review","test-flakiness","test-helpers","test-setup","ux-design","ux-review"]),exports.SKIPPED_UPSTREAM_AGENTS=new Set(["analytics-engineer","devops-engineer","lead-programmer","performance-analyst","producer","qa-lead","qa-tester","release-manager","security-engineer","technical-director","ux-designer"]),exports.GAMEDEV_AGENTS=new Set(["accessibility-specialist","ai-programmer","art-director","audio-director","community-manager","creative-director","economy-designer","engine-programmer","game-designer","gameplay-programmer","godot-csharp-specialist","godot-gdextension-specialist","godot-gdscript-specialist","godot-shader-specialist","godot-specialist","level-designer","live-ops-designer","localization-lead","narrative-director","network-programmer","prototyper","sound-designer","systems-designer","technical-artist","tools-programmer","ue-blueprint-specialist","ue-gas-specialist","ue-replication-specialist","ue-umg-specialist","ui-programmer","unity-addressables-specialist","unity-dots-specialist","unity-shader-specialist","unity-specialist","unity-ui-specialist","unreal-specialist","world-builder","writer"]),exports.SKILL_RENAME_MAP={"design-system":"game-design-system"},exports.AGENT_MAP={producer:"project-manager","technical-director":"planner","lead-programmer":"fullstack-developer","devops-engineer":"fullstack-developer","security-engineer":"code-reviewer","performance-analyst":"debugger","analytics-engineer":"researcher","analytics-specialist":"researcher","qa-lead":"tester","qa-tester":"tester","release-manager":"git-manager","ux-designer":"ui-ux-designer","ui-designer":"ui-programmer","narrative-designer":"narrative-director","localization-specialist":"localization-lead"};const COMPLETION_CONTRACT=["## Completion Report","","End every run with this block (`rules/orchestration-protocol.md`, `rules/verification-before-completion.md`):","","```","Status: DONE | DONE_WITH_CONCERNS | BLOCKED | NEEDS_CONTEXT","Summary: <1-2 sentences \u2014 what changed, or what was found>","Concerns/Blockers: <required unless the status is DONE>","```"].join(`
|
|
2
|
+
`);function stampSkillProvenance(n,e){const t=n.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n/);if(!t)return n;const r=t[1].split(/\r?\n/).filter(s=>!/^(upstream|upstream_version|upstream_commit|synced):/.test(s.trim()));return r.push(`upstream: ${e.upstreamUrl}`),e.version&&r.push(`upstream_version: "${e.version}"`),e.commit&&r.push(`upstream_commit: "${e.commit}"`),r.push(`synced: "${e.synced}"`),`---
|
|
3
|
+
${r.join(`
|
|
4
|
+
`)}
|
|
5
|
+
---
|
|
6
|
+
${n.slice(t[0].length)}`}function sanitizeUpstreamBody(n){let e=n.replace(/\r\n/g,`
|
|
7
|
+
`);return e=e.replace(/```bash\n[^`]*yaml-helper\.sh[\s\S]*?```\n?/g,""),e=e.replace(/^!`bash [^`\n]*yaml-helper\.sh[^`\n]*`\n?/gm,""),e=e.replace(/`\.claude\/rules\/scene-files\.md`/g,"the `.tscn`/`.tres` scene-file conventions"),e=e.replace(/\.claude\/(skills|scripts|agents|commands|templates|hooks|rules|plans|tasks|docs)\//g,"$1/"),e=e.replace(/subagent_type\s*([=:])\s*"?([A-Za-z][A-Za-z0-9_-]*)"?/g,(t,r,s)=>`subagent_type${r}"${exports.AGENT_MAP[s]??(exports.GAMEDEV_AGENTS.has(s)?s:"fullstack-developer")}"`),e=e.replace(/`([A-Za-z][A-Za-z0-9-]*)`(\s+(?:sub)?agents?\b)/g,(t,r,s)=>`\`${exports.AGENT_MAP[r]??(exports.GAMEDEV_AGENTS.has(r)?r:"fullstack-developer")}\`${s}`),e=e.replace(/`\.\.\/[\w./-]+\.md`/g,t=>t.replace(/^`\.\.\//,"`")),e=e.replace(/(?<![\w/.~<-])\/code-review(?![a-z0-9:/-])/g,"/ak-code-review"),e=e.replace(/(?<![\w/.~<-])\/(architecture-decision|art-bible|asset-audit|asset-spec|balance-check|consistency-check|content-audit|create-architecture|create-control-manifest|day-one-patch|design-review|game-design-system|gate-check|launch-checklist|localize|map-systems|milestone-review|patch-notes|perf-profile|playtest-report|project-stage-detect|propagate-design-change|prototype|quick-design|release-checklist|reverse-document|review-all-gdds|scope-check|setup-engine|soak-test|vertical-slice)(?![a-z0-9:/-])/g,"/gamedev $1"),e=e.replace(/\[%\/weight\/count\]/g,"[percent/weight/count]"),e=e.replace(/docs\/engine-reference\/\[engine\]\/deprecated-apis\.md/g,"docs/engine-reference/engine/deprecated-apis.md"),e.trim()+`
|
|
8
|
+
`}function parseMarkdownParts(n,e){const t=n.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/),r=t?t[1]:"",s=r.match(/^description:\s*(.+)$/m),i=s?s[1].trim().replace(/^["']|["']$/g,""):e;return{fm:r,desc:i.replace(/"/g,'\\"'),body:sanitizeUpstreamBody(t?t[2]:n)}}function transformUpstreamSkill(n,e,t){const{desc:r,body:s}=parseMarkdownParts(n,`Game studio ${e} workflow`),i=`---
|
|
9
|
+
name: ${e}
|
|
10
|
+
description: "${r}"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
${s}`;return t?stampSkillProvenance(i,t):i}function transformUpstreamAgent(n,e){const{fm:t,desc:r,body:s}=parseMarkdownParts(n,`Game studio ${e} specialist`),i=t.match(/^tools:\s*(.+)$/m)?.[1]?.trim()??"Read, Glob, Grep, Write, Edit, Bash";return`---
|
|
14
|
+
name: ${e}
|
|
15
|
+
description: "${r}"
|
|
16
|
+
model: sonnet
|
|
17
|
+
tools: ${i}
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
${s}
|
|
21
|
+
${COMPLETION_CONTRACT}
|
|
22
|
+
`}function shouldSync(n,e,t,r,s,i){if(i||!fs.existsSync(s))return!0;if(!e||e===t)return!1;try{return(0,child_process_1.execFileSync)("git",["-C",n,"diff","--quiet",e,t,"--",r]),!1}catch{return!0}}function syncGamedevFromDir(n,e,t,r=!1){const s=path.join(n,".claude","skills");if(!fs.existsSync(s))throw new Error(`Missing .claude/skills in upstream source: ${n}`);const i=path.join(e,"skills","gamedev");fs.mkdirSync(i,{recursive:!0});const d=path.join(i,"SKILL.md"),f=fs.existsSync(d)?fs.readFileSync(d,"utf8"):"",o=f.match(/^upstream_commit:\s*["']?([0-9a-f]{7,40})["']?/m)?.[1]??null,_=f.match(/^upstream_version:\s*["']?([^"'\r\n]+)["']?/m)?.[1]??null;let p=0;const v=[];for(const a of fs.readdirSync(s,{withFileTypes:!0}).filter(c=>c.isDirectory())){if(exports.SKIPPED_UPSTREAM_SKILLS.has(a.name))continue;const c=path.join(s,a.name),l=path.join(c,"SKILL.md");if(!fs.existsSync(l))continue;const u=exports.SKILL_RENAME_MAP[a.name]??a.name,y=path.join(i,u),m=path.join(y,"SKILL.md"),A=!fs.existsSync(m);if(shouldSync(n,o,t.commit,`.claude/skills/${a.name}/SKILL.md`,m,r)){fs.mkdirSync(y,{recursive:!0});const S=transformUpstreamSkill(fs.readFileSync(l,"utf8"),u);(A||S!==fs.readFileSync(m,"utf8"))&&(fs.writeFileSync(m,S,"utf8"),A&&v.push(u),p++)}for(const S of["CONTRACT.md","references"]){const x=path.join(c,S);if(!fs.existsSync(x))continue;const $=fs.statSync(x).isDirectory()?fs.readdirSync(x).filter(g=>g.endsWith(".md")).map(g=>path.join("references",g)):[S];for(const g of $){const h=path.join(y,g);if(shouldSync(n,o,t.commit,`.claude/skills/${a.name}/${g}`,h,r)){fs.mkdirSync(path.dirname(h),{recursive:!0});const w=sanitizeUpstreamBody(fs.readFileSync(path.join(c,g),"utf8"));(!fs.existsSync(h)||w!==fs.readFileSync(h,"utf8"))&&(fs.writeFileSync(h,w,"utf8"),p++)}}}}const E=path.join(n,".claude","agents");if(fs.existsSync(E)){const a=path.join(e,"agent-kit","shared","gamedev","agents");fs.mkdirSync(a,{recursive:!0});for(const c of fs.readdirSync(E).filter(l=>l.endsWith(".md"))){const l=c.replace(/\.md$/,"");if(exports.SKIPPED_UPSTREAM_AGENTS.has(l))continue;const u=path.join(a,c),y=!fs.existsSync(u);if(shouldSync(n,o,t.commit,`.claude/agents/${c}`,u,r)){const m=transformUpstreamAgent(fs.readFileSync(path.join(E,c),"utf8"),l);(y||m!==fs.readFileSync(u,"utf8"))&&(fs.writeFileSync(u,m,"utf8"),y&&v.push(`agents/${l}`),p++)}}}return f&&(o!==t.commit||_!==t.version)&&(fs.writeFileSync(d,stampSkillProvenance(f,t),"utf8"),p++),{updated:p,created:v}}function main(){const n=path.resolve(__dirname,"..",".."),e=process.argv.indexOf("--source");let t=e!==-1?path.resolve(process.argv[e+1]):"",r="";try{t||(r=fs.mkdtempSync(path.join(os.tmpdir(),"gamedev-upstream-")),(0,child_process_1.execFileSync)("git",["clone","--depth","50","--tags",`${exports.GAMEDEV_UPSTREAM_URL}.git`,r],{stdio:"inherit"}),t=r);const s=(0,child_process_1.execFileSync)("git",["-C",t,"rev-parse","HEAD"],{encoding:"utf8"}).trim(),i=(0,child_process_1.execFileSync)("git",["-C",t,"tag","--sort=-v:refname"],{encoding:"utf8"}).trim().split(/\r?\n/)[0]??"",d=new Date,f=`${String(d.getUTCFullYear()).slice(-2)}${String(d.getUTCMonth()+1).padStart(2,"0")}${String(d.getUTCDate()).padStart(2,"0")}`,o={upstreamUrl:exports.GAMEDEV_UPSTREAM_URL,version:(0,check_upstream_1.normalizeVersion)(i),commit:s,synced:f},{updated:_,created:p}=syncGamedevFromDir(t,n,o,process.argv.includes("--force"));(0,generate_catalogs_1.generateCatalogs)(n),console.log(`Synced gamedev upstream (${o.version} @ ${o.commit.slice(0,12)}): ${_} updated, ${p.length} created.`)}finally{r&&fs.rmSync(r,{recursive:!0,force:!0})}}require.main===module&&main();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,r,i,s){s===void 0&&(s=i);var t=Object.getOwnPropertyDescriptor(r,i);(!t||("get"in t?!r.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return r[i]}}),Object.defineProperty(e,s,t)}):(function(e,r,i,s){s===void 0&&(s=i),e[s]=r[i]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}):function(e,r){e.default=r}),__importStar=this&&this.__importStar||(function(){var e=function(r){return e=Object.getOwnPropertyNames||function(i){var s=[];for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&(s[s.length]=t);return s},e(r)};return function(r){if(r&&r.__esModule)return r;var i={};if(r!=null)for(var s=e(r),t=0;t<s.length;t++)s[t]!=="default"&&__createBinding(i,r,s[t]);return __setModuleDefault(i,r),i}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.UPSTREAM_SYNC_TARGETS=void 0,exports.resolveUpstreamTargets=resolveUpstreamTargets,exports.formatSyncDate=formatSyncDate,exports.probeRemoteHead=probeRemoteHead,exports.syncUpstreamTarget=syncUpstreamTarget;const child_process_1=require("child_process"),fs=__importStar(require("fs")),os=__importStar(require("os")),path=__importStar(require("path")),check_upstream_1=require("./check-upstream"),generate_catalogs_1=require("./generate-catalogs"),sync_gamedev_upstream_1=require("./sync-gamedev-upstream"),upstream_skill_syncers_1=require("./upstream-skill-syncers"),upstream_suite_syncers_1=require("./upstream-suite-syncers");exports.UPSTREAM_SYNC_TARGETS=[{id:"gamedev",upstreamUrl:sync_gamedev_upstream_1.GAMEDEV_UPSTREAM_URL,skills:["gamedev"],routerSkill:"gamedev",pinBySemverTag:!0,syncFromDir:sync_gamedev_upstream_1.syncGamedevFromDir},{id:"seo",upstreamUrl:"https://github.com/AgriciDaniel/claude-seo",skills:["seo"],routerSkill:"seo",pinBySemverTag:!0,syncFromDir:upstream_suite_syncers_1.syncSeoFromDir},{id:"expo",upstreamUrl:"https://github.com/expo/skills",skills:["expo"],routerSkill:"expo",pinBySemverTag:!1,syncFromDir:upstream_suite_syncers_1.syncExpoFromDir},{id:"stripe",upstreamUrl:"https://github.com/stripe/ai",skills:["stripe"],routerSkill:"stripe",pinBySemverTag:!1,syncFromDir:upstream_suite_syncers_1.syncStripeFromDir},{id:"twilio",upstreamUrl:"https://github.com/twilio/ai",skills:["twilio"],routerSkill:"twilio",pinBySemverTag:!1,syncFromDir:upstream_suite_syncers_1.syncTwilioFromDir},{id:"cti-expert",upstreamUrl:"https://github.com/7onez/cti-expert",skills:["cti-expert"],routerSkill:"cti-expert",pinBySemverTag:!0,syncFromDir:upstream_suite_syncers_1.syncCtiExpertFromDir},{id:"typesafe-ai",upstreamUrl:"https://github.com/typesafe-ai/skills",skills:["typesafe-ai"],routerSkill:"typesafe-ai",pinBySemverTag:!0,syncFromDir:upstream_skill_syncers_1.syncTypesafeAiFromDir},{id:"fomo-cc",upstreamUrl:"https://github.com/zack-the-worker/fomo-cc",skills:["fomo-cc"],routerSkill:"fomo-cc",pinBySemverTag:!1,syncFromDir:upstream_skill_syncers_1.syncFomoCcFromDir},{id:"ui-ux-pro-max",upstreamUrl:"https://github.com/nextlevelbuilder/ui-ux-pro-max-skill",skills:["ui-ux-pro-max"],routerSkill:"ui-ux-pro-max",pinBySemverTag:!0,syncFromDir:upstream_suite_syncers_1.syncUiUxProMaxFromDir},{id:"tech-graph",upstreamUrl:"https://github.com/yizhiyanhua-ai/fireworks-tech-graph",skills:["tech-graph"],routerSkill:"tech-graph",pinBySemverTag:!0,syncFromDir:upstream_suite_syncers_1.syncTechGraphFromDir},{id:"anthropics",upstreamUrl:"https://github.com/anthropics/skills",skills:["document-skills","mcp-builder","skill-creator"],routerSkill:"document-skills",pinBySemverTag:!1,syncFromDir:upstream_suite_syncers_1.syncAnthropicsFromDir},{id:"automation-recommender",upstreamUrl:"https://github.com/anthropics/claude-plugins-official",skills:["automation-recommender"],routerSkill:"automation-recommender",pinBySemverTag:!1,syncFromDir:upstream_skill_syncers_1.syncAutomationRecommenderFromDir}];function resolveUpstreamTargets(e="all"){const r=e.trim();if(!r||r==="all")return[...exports.UPSTREAM_SYNC_TARGETS];const i=r.split(",").map(t=>t.trim()).filter(Boolean),s=new Map;for(const t of i){const a=exports.UPSTREAM_SYNC_TARGETS.find(o=>o.id===t||o.skills.includes(t));if(!a){const o=exports.UPSTREAM_SYNC_TARGETS.map(c=>c.id).join(", ");throw new Error(`Unknown upstream target "${t}". Valid targets: all, ${o}`)}s.set(a.id,a)}return[...s.values()]}function formatSyncDate(e=new Date){return`${String(e.getUTCFullYear()).slice(-2)}${String(e.getUTCMonth()+1).padStart(2,"0")}${String(e.getUTCDate()).padStart(2,"0")}`}function probeRemoteHead(e){try{return(0,child_process_1.execFileSync)("git",["ls-remote",`${e}.git`,"HEAD"],{encoding:"utf8",timeout:15e3,stdio:["ignore","pipe","ignore"]}).trim().split(/\s+/)[0]||null}catch{return null}}function syncUpstreamTarget(e,r,i={}){const s=path.join(r,"skills",e.routerSkill,"SKILL.md"),t=(0,upstream_skill_syncers_1.readSkillProvenance)(s),a=!!i.force;if(!i.sourceDir&&!a&&t.commit){const l=probeRemoteHead(e.upstreamUrl);if(l&&l===t.commit)return{id:e.id,commit:l,version:t.version??"",updated:0,created:[],skippedUpToDate:!0}}let o=i.sourceDir?path.resolve(i.sourceDir):"",c="";try{o||(c=fs.mkdtempSync(path.join(os.tmpdir(),`${e.id}-upstream-`)),(0,child_process_1.execFileSync)("git",["clone","--depth","50","--tags",`${e.upstreamUrl}.git`,c],{stdio:"inherit"}),o=c);const l=(0,child_process_1.execFileSync)("git",["-C",o,"rev-parse","HEAD"],{encoding:"utf8"}).trim();let n="";e.pinBySemverTag&&(n=(0,child_process_1.execFileSync)("git",["-C",o,"tag","--sort=-v:refname"],{encoding:"utf8"}).trim().split(/\r?\n/).map(p=>(0,check_upstream_1.normalizeVersion)(p)).filter(p=>/^\d+\.\d+(?:\.\d+)?$/.test(p))[0]??t.version??"");const u=i.synced??formatSyncDate(),m={upstreamUrl:e.upstreamUrl,version:n,commit:l,synced:u},{updated:d,created:f}=e.syncFromDir(o,r,m,a);return{id:e.id,commit:l,version:n,updated:d,created:f,skippedUpToDate:!1}}finally{c&&fs.rmSync(c,{recursive:!0,force:!0})}}function main(){const e=path.resolve(__dirname,"..",".."),r=process.argv.indexOf("--target"),i=r!==-1?process.argv[r+1]??"all":"all",s=process.argv.indexOf("--source"),t=s!==-1?process.argv[s+1]:void 0,a=process.argv.includes("--force"),o=resolveUpstreamTargets(i);if(t&&o.length>1)throw new Error("--source can only be used when syncing a single --target.");let c=0;for(const l of o){const n=syncUpstreamTarget(l,e,{sourceDir:t,force:a});c+=n.updated;const u=n.version?`${n.version} @ ${n.commit.slice(0,12)}`:n.commit.slice(0,12),m=n.skippedUpToDate?"already at HEAD":`${n.updated} updated, ${n.created.length} created`;console.log(`[${n.id}] (${u}): ${m}`)}c>0&&(0,generate_catalogs_1.generateCatalogs)(e)}require.main===module&&main();
|
|
@@ -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));
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(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 i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&__createBinding(n,t,r[i]);return __setModuleDefault(n,t),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.readSkillProvenance=readSkillProvenance,exports.shouldSyncPath=shouldSyncPath,exports.syncDirectoryTree=syncDirectoryTree,exports.replaceBodyFromMarker=replaceBodyFromMarker,exports.stampRouterIfChanged=stampRouterIfChanged,exports.syncSkillBodyFromMarker=syncSkillBodyFromMarker,exports.syncTypesafeAiFromDir=syncTypesafeAiFromDir,exports.syncFomoCcFromDir=syncFomoCcFromDir,exports.syncAutomationRecommenderFromDir=syncAutomationRecommenderFromDir;const child_process_1=require("child_process"),fs=__importStar(require("fs")),path=__importStar(require("path")),sync_gamedev_upstream_1=require("./sync-gamedev-upstream"),IGNORED_NAMES=new Set([".git","__pycache__",".pytest_cache",".DS_Store"]),TEXT_EXTS=new Set([".md",".yaml",".yml",".json",".py",".sh",".ps1",".js",".ts",".txt",".html",".css",".csv",".xml",".xsd",".tex",".lock",".svg"]);function readSkillProvenance(e){if(!fs.existsSync(e))return{commit:null,version:null};const t=fs.readFileSync(e,"utf8"),n=t.match(/^upstream_commit:\s*["']?([0-9a-f]{7,40})["']?/m)?.[1]??null,r=t.match(/^upstream_version:\s*["']?([^"'\r\n]+)["']?/m)?.[1]??null;return{commit:n,version:r}}function shouldSyncPath(e,t,n,r,i,s){if(s||!fs.existsSync(i)||!t)return!0;if(t===n)return!1;try{return(0,child_process_1.execFileSync)("git",["-C",e,"diff","--quiet",t,n,"--",r]),!1}catch{return!0}}function isTextFile(e){const t=path.basename(e);return t==="LICENSE"||t==="NOTICE"?!0:TEXT_EXTS.has(path.extname(e).toLowerCase())}function syncDirectoryTree(e){const t=e.srcSubdir?path.join(e.sourceDir,e.srcSubdir):e.sourceDir;if(!fs.existsSync(t))return{updated:0,created:[]};let n=0;const r=[],i=(s,l)=>{for(const o of fs.readdirSync(s,{withFileTypes:!0})){if(IGNORED_NAMES.has(o.name)||o.name.endsWith(".pyc"))continue;const c=[...l,o.name],u=c.join("/");if(e.skipRel?.(u,o.isDirectory()))continue;const d=path.join(s,o.name);if(o.isDirectory()){i(d,c);continue}const f=path.join(e.destDir,...c),p=e.srcSubdir?`${e.srcSubdir.replace(/\\/g,"/")}/${u}`:u;if(!shouldSyncPath(e.sourceDir,e.oldCommit,e.newCommit,p,f,e.force))continue;const a=!fs.existsSync(f);if(fs.mkdirSync(path.dirname(f),{recursive:!0}),e.transformText&&isTextFile(d)){const m=e.transformText(fs.readFileSync(d,"utf8"),u);(a||m!==fs.readFileSync(f,"utf8"))&&(fs.writeFileSync(f,m,"utf8"),a&&r.push(u),n++)}else{const m=fs.readFileSync(d);(a||Buffer.compare(m,fs.readFileSync(f))!==0)&&(fs.copyFileSync(d,f),a&&r.push(u),n++)}}};return i(t,[]),{updated:n,created:r}}function replaceBodyFromMarker(e,t,n,r){const i=t.replace(/\r\n/g,`
|
|
2
|
+
`),s=e.indexOf(n),l=i.indexOf(n);if(s!==-1&&l!==-1)return(0,sync_gamedev_upstream_1.stampSkillProvenance)(e.slice(0,s)+i.slice(l),r);const o=e.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/),c=i.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/),u=o?o[0]:"",d=c?i.slice(c[0].length):i;return(0,sync_gamedev_upstream_1.stampSkillProvenance)(`${u}${d}`,r)}function stampRouterIfChanged(e,t,n){if(!fs.existsSync(e))return!1;const r=fs.readFileSync(e,"utf8"),i=n?n(r):r,s=(0,sync_gamedev_upstream_1.stampSkillProvenance)(i,t);return s===r?!1:(fs.writeFileSync(e,s,"utf8"),!0)}function syncSkillBodyFromMarker(e,t,n,r,i,s,l,o){const c=path.join(e,t,"SKILL.md"),u=t?`${t}/SKILL.md`:"SKILL.md";if(fs.existsSync(c)&&fs.existsSync(n)&&shouldSyncPath(e,r,i.commit,u,n,l)){const d=fs.readFileSync(c,"utf8"),f=replaceBodyFromMarker(fs.readFileSync(n,"utf8"),o?o(d):d,s,i);return f!==fs.readFileSync(n,"utf8")?(fs.writeFileSync(n,f,"utf8"),!0):!1}return stampRouterIfChanged(n,i)}function syncTypesafeAiFromDir(e,t,n,r=!1){const i=path.join(t,"skills","typesafe-ai"),s=path.join(i,"SKILL.md"),{commit:l}=readSkillProvenance(s),o=fs.existsSync(path.join(e,"skills","typesafe-ai"))?"skills/typesafe-ai":"",c=syncDirectoryTree({sourceDir:e,srcSubdir:o,destDir:i,oldCommit:l,newCommit:n.commit,force:r,skipRel:u=>u==="SKILL.md"});return syncSkillBodyFromMarker(e,o,s,l,n,`
|
|
3
|
+
# Build with TypeSafe`,r)&&c.updated++,c}function syncFomoCcFromDir(e,t,n,r=!1){const i=path.join(t,"skills","fomo-cc"),s=path.join(i,"SKILL.md"),{commit:l}=readSkillProvenance(s),o={...n,version:""},c=syncDirectoryTree({sourceDir:e,srcSubdir:"",destDir:i,oldCommit:l,newCommit:n.commit,force:r,skipRel:u=>u!=="README.md"&&u!=="references"&&!u.startsWith("references/")});return syncSkillBodyFromMarker(e,"",s,l,o,`
|
|
4
|
+
# FOMO-CC:`,r)&&c.updated++,c}function syncAutomationRecommenderFromDir(e,t,n,r=!1){const i=path.join(t,"skills","automation-recommender"),s=path.join(i,"SKILL.md"),{commit:l,version:o}=readSkillProvenance(s),c=fs.existsSync(path.join(e,"plugins","claude-code-setup"))?"plugins/claude-code-setup":"",u=c?`${c}/skills/claude-automation-recommender`:"",d=path.join(e,c,".claude-plugin","plugin.json"),f=fs.existsSync(d)?JSON.parse(fs.readFileSync(d,"utf8")).version:void 0,p={...n,version:n.version||f||o||""},a=syncDirectoryTree({sourceDir:e,srcSubdir:u,destDir:i,oldCommit:l,newCommit:n.commit,force:r,skipRel:y=>y==="SKILL.md"||y==="references/multi-kit-targets.md"}),m=syncDirectoryTree({sourceDir:e,srcSubdir:c,destDir:i,oldCommit:l,newCommit:n.commit,force:r,skipRel:y=>y!=="LICENSE"});return a.updated+=m.updated,a.created.push(...m.created),syncSkillBodyFromMarker(e,u,s,l,p,`
|
|
5
|
+
# Claude Automation Recommender`,r)&&a.updated++,a}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(s,n,e,i){i===void 0&&(i=e);var t=Object.getOwnPropertyDescriptor(n,e);(!t||("get"in t?!n.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return n[e]}}),Object.defineProperty(s,i,t)}):(function(s,n,e,i){i===void 0&&(i=e),s[i]=n[e]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(s,n){Object.defineProperty(s,"default",{enumerable:!0,value:n})}):function(s,n){s.default=n}),__importStar=this&&this.__importStar||(function(){var s=function(n){return s=Object.getOwnPropertyNames||function(e){var i=[];for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(i[i.length]=t);return i},s(n)};return function(n){if(n&&n.__esModule)return n;var e={};if(n!=null)for(var i=s(n),t=0;t<i.length;t++)i[t]!=="default"&&__createBinding(e,n,i[t]);return __setModuleDefault(e,n),e}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.SKIPPED_EXPO_SKILLS=void 0,exports.sanitizeExpoSkillMarkdown=sanitizeExpoSkillMarkdown,exports.syncExpoFromDir=syncExpoFromDir,exports.syncStripeFromDir=syncStripeFromDir,exports.syncTwilioFromDir=syncTwilioFromDir,exports.syncCtiExpertFromDir=syncCtiExpertFromDir,exports.syncUiUxProMaxFromDir=syncUiUxProMaxFromDir,exports.syncTechGraphFromDir=syncTechGraphFromDir,exports.syncSeoFromDir=syncSeoFromDir,exports.syncAnthropicsFromDir=syncAnthropicsFromDir;const fs=__importStar(require("fs")),path=__importStar(require("path")),upstream_skill_syncers_1=require("./upstream-skill-syncers");exports.SKIPPED_EXPO_SKILLS=new Set(["expo-skill-feedback","expo-tailwind-setup"]);const CTI_EXPERT_PATHS=new Set(["AGENTS.md","LICENSE","README.md","requirements.txt","analysis","connectors","engine","experience","guides","handbook","intel_engine","output","scripts","techniques","validation","workflows"]);function sanitizeExpoSkillMarkdown(s,n){let e=s.replace(/\r\n/g,`
|
|
2
|
+
`).replace(/(?:\n+---\n+)?\n+## Submitting Feedback[\s\S]*$/,`
|
|
3
|
+
`);return n==="expo-overview/SKILL.md"&&(e=e.split(`
|
|
4
|
+
`).filter(i=>!i.includes("expo-tailwind-setup")&&!i.includes("expo-skill-feedback")).join(`
|
|
5
|
+
`)),e.endsWith(`
|
|
6
|
+
`)?e:`${e}
|
|
7
|
+
`}function syncExpoFromDir(s,n,e,i=!1){const t=path.join(n,"skills","expo"),l=path.join(t,"SKILL.md"),{commit:d}=(0,upstream_skill_syncers_1.readSkillProvenance)(l),o=fs.existsSync(path.join(s,"plugins","expo","skills"))?"plugins/expo/skills":"skills",a=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:o,destDir:t,oldCommit:d,newCommit:e.commit,force:i,skipRel:(r,c)=>!c&&!r.includes("/")||exports.SKIPPED_EXPO_SKILLS.has(r.split("/")[0]),transformText:(r,c)=>c.endsWith("/SKILL.md")?sanitizeExpoSkillMarkdown(r,c):r});return(0,upstream_skill_syncers_1.stampRouterIfChanged)(l,{...e,version:""})&&a.updated++,a}function syncStripeFromDir(s,n,e,i=!1){const t=path.join(n,"skills","stripe"),l=path.join(t,"SKILL.md"),{commit:d}=(0,upstream_skill_syncers_1.readSkillProvenance)(l),o=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:"skills",destDir:t,oldCommit:d,newCommit:e.commit,force:i,skipRel:(c,m)=>!m&&!c.includes("/")}),a=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:"",destDir:t,oldCommit:d,newCommit:e.commit,force:i,skipRel:c=>c!=="LICENSE"});return o.updated+=a.updated,(0,upstream_skill_syncers_1.stampRouterIfChanged)(l,{...e,version:""},c=>c.replace(/Provenance is pinned to commit `[0-9a-f]+`/,`Provenance is pinned to commit \`${e.commit}\``))&&o.updated++,o}function syncTwilioFromDir(s,n,e,i=!1){const t=path.join(n,"skills","twilio"),l=path.join(t,"SKILL.md"),{commit:d}=(0,upstream_skill_syncers_1.readSkillProvenance)(l),o={updated:0,created:[]};for(const r of["skills/twilio","skills/sendgrid"]){const c=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:r,destDir:t,oldCommit:d,newCommit:e.commit,force:i,skipRel:m=>m.split("/").includes("assets"),transformText:(m,u)=>u.endsWith("/agents/openai.yaml")?m.replace(/^[ \t]*icon_(?:small|large):.*(?:\r?\n)?/gm,""):m});o.updated+=c.updated,o.created.push(...c.created)}const a=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:"",destDir:t,oldCommit:d,newCommit:e.commit,force:i,skipRel:r=>r!=="LICENSE"});return o.updated+=a.updated,(0,upstream_skill_syncers_1.stampRouterIfChanged)(l,{...e,version:""})&&o.updated++,o}function syncCtiExpertFromDir(s,n,e,i=!1){const t=path.join(n,"skills","cti-expert"),l=path.join(t,"SKILL.md"),{commit:d}=(0,upstream_skill_syncers_1.readSkillProvenance)(l),o=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:"",destDir:t,oldCommit:d,newCommit:e.commit,force:i,skipRel:r=>!CTI_EXPERT_PATHS.has(r.split("/")[0]),transformText:(r,c)=>c==="handbook/operator-queries.md"?r.replace(/\.\/quiak-report\.md/g,"./quick-report.md"):r}),a=path.join(s,"SKILL.md");if(fs.existsSync(a)&&fs.existsSync(l)){const r=fs.readFileSync(a,"utf8"),c=r.match(/^version:\s*["']?([^"'\r\n]+)["']?/m)?.[1]??e.version,m={...e,version:c};if((0,upstream_skill_syncers_1.shouldSyncPath)(s,d,e.commit,"SKILL.md",l,i)||d!==e.commit){const u=(0,upstream_skill_syncers_1.replaceBodyFromMarker)(fs.readFileSync(l,"utf8"),r,`
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Quick Start`,m);u!==fs.readFileSync(l,"utf8")&&(fs.writeFileSync(l,u,"utf8"),o.updated++)}}return o}function syncUiUxProMaxFromDir(s,n,e,i=!1){const t=path.join(n,"skills","ui-ux-pro-max"),l=path.join(t,"SKILL.md"),{commit:d}=(0,upstream_skill_syncers_1.readSkillProvenance)(l),o=fs.existsSync(path.join(s,".claude","skills","ui-ux-pro-max"))?".claude/skills/ui-ux-pro-max":"",a=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:o,destDir:t,oldCommit:d,newCommit:e.commit,force:i,skipRel:r=>r==="SKILL.md"||r==="scripts/tests/test_catalog_refresh.py"||r==="scripts/tests/test_relevance_evaluator.py"||r==="scripts/tests/fixtures"||r.startsWith("scripts/tests/fixtures/")});return(0,upstream_skill_syncers_1.syncSkillBodyFromMarker)(s,o,l,d,e,`
|
|
11
|
+
# UI/UX Pro Max`,i,r=>r.replace(/\$\{CLAUDE_PLUGIN_ROOT\}\/(?=\.claude\/skills\/ui-ux-pro-max\/)/g,""))&&a.updated++,a}function syncTechGraphFromDir(s,n,e,i=!1){const t=path.join(n,"skills","tech-graph"),l=path.join(t,"SKILL.md"),{commit:d}=(0,upstream_skill_syncers_1.readSkillProvenance)(l),o=fs.existsSync(path.join(s,"skills","fireworks-tech-graph"))?"skills/fireworks-tech-graph":"",a=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:o,destDir:t,oldCommit:d,newCommit:e.commit,force:i,skipRel:r=>r==="SKILL.md"||r==="README.md"||r==="README.zh.md"||r==="tests/test_skill_compatibility.py"||r==="assets/samples"||r.startsWith("assets/samples/")});return(0,upstream_skill_syncers_1.syncSkillBodyFromMarker)(s,o,l,d,e,`
|
|
12
|
+
# Fireworks Tech Graph`,i)&&a.updated++,a}function syncSeoFromDir(s,n,e,i=!1){const t=path.join(n,"skills","seo"),l=path.join(t,"SKILL.md"),{commit:d}=(0,upstream_skill_syncers_1.readSkillProvenance)(l),o=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:"skills/seo/references",destDir:path.join(t,"references"),oldCommit:d,newCommit:e.commit,force:i}),a=path.join(s,"skills");if(fs.existsSync(a)){const r=fs.readdirSync(a,{withFileTypes:!0}).filter(c=>c.isDirectory()&&c.name.startsWith("seo-")&&fs.existsSync(path.join(t,c.name)));for(const c of r)for(const m of["references","assets","templates"]){const u=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:`skills/${c.name}/${m}`,destDir:path.join(t,c.name,m),oldCommit:d,newCommit:e.commit,force:i});o.updated+=u.updated,o.created.push(...u.created.map(p=>`${c.name}/${m}/${p}`))}}return(0,upstream_skill_syncers_1.stampRouterIfChanged)(l,e)&&o.updated++,o}function syncAnthropicsFromDir(s,n,e,i=!1){const t={...e,version:""},l=path.join(n,"skills","document-skills","SKILL.md"),{commit:d}=(0,upstream_skill_syncers_1.readSkillProvenance)(l),o={updated:0,created:[]};for(const a of["docx","pdf","pptx","xlsx"]){const r=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:`skills/${a}`,destDir:path.join(n,"skills","document-skills",a),oldCommit:d,newCommit:e.commit,force:i});o.updated+=r.updated,o.created.push(...r.created.map(c=>`document-skills/${a}/${c}`))}for(const a of["mcp-builder","skill-creator"]){const r=(0,upstream_skill_syncers_1.syncDirectoryTree)({sourceDir:s,srcSubdir:`skills/${a}`,destDir:path.join(n,"skills",a),oldCommit:d,newCommit:e.commit,force:i,skipRel:c=>c==="SKILL.md"});o.updated+=r.updated,o.created.push(...r.created.map(c=>`${a}/${c}`)),(0,upstream_skill_syncers_1.stampRouterIfChanged)(path.join(n,"skills",a,"SKILL.md"),t)&&o.updated++}return(0,upstream_skill_syncers_1.stampRouterIfChanged)(l,t)&&o.updated++,o}
|
|
@@ -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,"
|
|
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(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,
|
|
2
|
-
`)}function readSection(t
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,t,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}):(function(e,t,r,n){n===void 0&&(n=r),e[n]=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 n=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[n.length]=i);return n},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var n=e(t),i=0;i<n.length;i++)n[i]!=="default"&&__createBinding(r,t,n[i]);return __setModuleDefault(r,t),r}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.readKitConfig=readKitConfig,exports.writeKitConfig=writeKitConfig,exports.readSection=readSection,exports.readHooksEnabled=readHooksEnabled,exports.writeHooksEnabled=writeHooksEnabled,exports.isPlainObject=isPlainObject,exports.mergePreserved=mergePreserved,exports.mergePreservedKitConfig=mergePreservedKitConfig,exports.updateSection=updateSection;const fs=__importStar(require("fs")),path=__importStar(require("path"));function readKitConfig(e){if(!fs.existsSync(e))return{};try{const t=JSON.parse(fs.readFileSync(e,"utf8"));return isPlainObject(t)?t:{}}catch{return{}}}function writeKitConfig(e,t){fs.mkdirSync(path.dirname(e),{recursive:!0}),fs.writeFileSync(e,`${JSON.stringify(t,null,2)}
|
|
2
|
+
`)}function readSection(e,t){const r=e[t];return typeof r=="object"&&r!==null?{...r}:{}}function readHooksEnabled(e){return readKitConfig(e).hooksEnabled!==!1}function writeHooksEnabled(e,t){const r=readKitConfig(e);r.hooksEnabled=t,writeKitConfig(e,r)}function isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function mergePreserved(e,t){if(Array.isArray(e)&&Array.isArray(t)){const r=new Set(e.map(i=>JSON.stringify(i))),n=[...e];for(const i of t)r.has(JSON.stringify(i))||n.push(i);return n}if(isPlainObject(e)&&isPlainObject(t)){const r={...t};for(const[n,i]of Object.entries(e))r[n]=n in r?mergePreserved(i,r[n]):i;return r}return e}function mergePreservedKitConfig(e,t){if(Object.keys(t).length===0)return;const r=mergePreserved(t,readKitConfig(e));isPlainObject(r)&&writeKitConfig(e,r)}function updateSection(e,t,r){const n=readKitConfig(e),i=readSection(n,t);r(i),n[t]=i,writeKitConfig(e,n)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,r,o,n){n===void 0&&(n=o);var t=Object.getOwnPropertyDescriptor(r,o);(!t||("get"in t?!r.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return r[o]}}),Object.defineProperty(e,n,t)}):(function(e,r,o,n){n===void 0&&(n=o),e[n]=r[o]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}):function(e,r){e.default=r}),__importStar=this&&this.__importStar||(function(){var e=function(r){return e=Object.getOwnPropertyNames||function(o){var n=[];for(var t in o)Object.prototype.hasOwnProperty.call(o,t)&&(n[n.length]=t);return n},e(r)};return function(r){if(r&&r.__esModule)return r;var o={};if(r!=null)for(var n=e(r),t=0;t<n.length;t++)n[t]!=="default"&&__createBinding(o,r,n[t]);return __setModuleDefault(o,r),o}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.runLogin=runLogin,exports.runLogout=runLogout,exports.runWhoami=runWhoami;const p=__importStar(require("@clack/prompts")),path=__importStar(require("path")),agentkit_home_1=require("../agentkit-home"),cache_1=require("../entitlement/cache"),config_1=require("../entitlement/config"),check_1=require("../entitlement/check"),
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,r,o,n){n===void 0&&(n=o);var t=Object.getOwnPropertyDescriptor(r,o);(!t||("get"in t?!r.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return r[o]}}),Object.defineProperty(e,n,t)}):(function(e,r,o,n){n===void 0&&(n=o),e[n]=r[o]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}):function(e,r){e.default=r}),__importStar=this&&this.__importStar||(function(){var e=function(r){return e=Object.getOwnPropertyNames||function(o){var n=[];for(var t in o)Object.prototype.hasOwnProperty.call(o,t)&&(n[n.length]=t);return n},e(r)};return function(r){if(r&&r.__esModule)return r;var o={};if(r!=null)for(var n=e(r),t=0;t<n.length;t++)n[t]!=="default"&&__createBinding(o,r,n[t]);return __setModuleDefault(o,r),o}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.runLogin=runLogin,exports.runLogout=runLogout,exports.runWhoami=runWhoami;const p=__importStar(require("@clack/prompts")),path=__importStar(require("path")),agentkit_home_1=require("../agentkit-home"),cache_1=require("../entitlement/cache"),config_1=require("../entitlement/config"),check_1=require("../entitlement/check"),open_browser_1=require("../open-browser"),version_check_1=require("../version-check"),source_1=require("../payload/source"),logger_1=require("../logger"),auth_file_1=require("./auth-file"),device_flow_1=require("./device-flow"),resolve_1=require("./resolve"),token_store_1=require("./token-store");async function fetchUserLogin(e,r){const t=await(await(r.fetchImpl??fetch)(`${(0,config_1.githubApiBase)(r.env)}/user`,{headers:{Authorization:`Bearer ${e}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(version_check_1.REQUEST_TIMEOUT_MS)})).json(),l=t&&typeof t=="object"?t.login:null;return typeof l=="string"?l:"unknown"}async function runLogin(e={},r={}){const o=e.env??process.env,n=e.home??(0,agentkit_home_1.loadAgentkitHomeCore)(),t=(0,config_1.githubAppClientId)(o);if(!t)return(0,logger_1.printError)("No GitHub App client id is configured for this build."),(0,logger_1.printInfo)("Set AGENTKIT_GITHUB_CLIENT_ID, or update the CLI once the App exists."),1;const l=(0,config_1.githubOauthBase)(o),d=e.fetchImpl?{fetchImpl:e.fetchImpl}:{};let c;try{c=await(0,device_flow_1.requestDeviceCode)({clientId:t,oauthBase:l,...d})}catch(u){return(0,logger_1.printError)(`Could not start the device flow: ${u.message}`),1}(0,logger_1.printInfo)(`Open ${c.verificationUri} and enter ${c.userCode}`),r.openBrowser!==!1&&(0,open_browser_1.openBrowser)(c.verificationUri);const i=await(0,device_flow_1.pollForToken)({clientId:t,deviceCode:c.deviceCode,interval:c.interval,expiresIn:c.expiresIn,oauthBase:l,...e.sleepImpl?{sleepImpl:e.sleepImpl}:{},...d});if(!i.ok)return(0,logger_1.printError)(`Login failed: ${i.message}`),1;const h=await fetchUserLogin(i.token.accessToken,e).catch(()=>"unknown");let{store:a,warning:f}=e.store?{store:e.store,warning:null}:(0,token_store_1.getStore)({home:n});const s=p.progress({max:5});s.start("Setting up kit access");const m={accessToken:i.token.accessToken,...i.token.refreshToken?{refreshToken:i.token.refreshToken}:{},...i.token.expiresAt?{expiresAt:i.token.expiresAt}:{},...i.token.refreshExpiresAt?{refreshExpiresAt:i.token.refreshExpiresAt}:{},login:h};try{await a.set("github",JSON.stringify(m))}catch(u){if(a.kind==="keychain"&&!e.store){a=(0,token_store_1.getPlaintextStore)({home:n}),f=`\u2605 keychain write failed \u2014 stored in ${n.toDisplayPath(n.getCredentialsPath())} (0600)`;try{await a.set("github",JSON.stringify(m))}catch(v){return s.stop("Setup failed"),(0,logger_1.printError)(`Could not store the credential: ${v.message}`),1}}else return s.stop("Setup failed"),(0,logger_1.printError)(`Could not store the credential: ${u.message}`),1}s.advance(1,"Credential stored"),(0,auth_file_1.mergeAuth)({login:h,storedIn:a.kind,createdAt:Date.now(),...i.token.expiresAt?{expiresAt:i.token.expiresAt}:{},...i.token.refreshExpiresAt?{refreshExpiresAt:i.token.refreshExpiresAt}:{}},n)||(0,logger_1.printWarning)("Credential stored, but the auth metadata file could not be written."),(0,cache_1.deleteRecord)(n),s.advance(1,"Auth metadata written"),f&&(0,logger_1.printWarning)(f),(0,logger_1.printSuccess)(`Logged in as ${h} (credential: ${a.kind==="keychain"?"store":a.kind})`);const g=await(0,check_1.checkEntitlement)({interactive:!0,home:n,deps:{env:o,store:a,...d}});if(s.advance(1,"Access verified"),g.status==="active"){s.advance(1,"Fetching kit payload");try{const u=path.resolve(__dirname,"..","..",".."),v=await(0,source_1.resolveInstallSource)({version:(0,version_check_1.getPayloadVersion)(u)??"0.0.0",interactive:!0,cliRoot:u,home:n,deps:{env:o,store:a,...d}});s.advance(1,`Kit payload ready \u2014 v${v.version}`)}catch(u){s.advance(1,"Kit payload pending"),(0,logger_1.printWarning)(`Payload prefetch failed: ${u.message} \u2014 the first use will download it.`)}s.stop("Kit access ready \u2014 100%"),(0,logger_1.printSuccess)("Access to the kit repository confirmed.")}else s.stop("Verification finished"),(0,logger_1.printWarning)(`No access \u2014 ${h} cannot reach the kit repository (credential: ${g.credentialSource}).`),(0,logger_1.printInfo)("Ask the maintainer to add you as a collaborator, then run `agentkit login` again.");return g.status==="active"?0:1}async function runLogout(e={}){const r=e.home??(0,agentkit_home_1.loadAgentkitHomeCore)();return await(e.store??(0,token_store_1.getStore)({home:r}).store).clear("github").catch(()=>{}),(0,auth_file_1.clearAuth)(r),(0,cache_1.deleteRecord)(r),(0,logger_1.printSuccess)("Logged out \u2014 the stored credential, auth metadata and entitlement cache were removed."),(0,logger_1.printInfo)("Fetched payloads are kept \u2014 remove them with `agentkit uninstall`."),0}async function runWhoami(e={}){const r=e.env??process.env,o=e.home??(0,agentkit_home_1.loadAgentkitHomeCore)(),n={env:r,home:o,...e.store?{store:e.store}:{},...e.fetchImpl?{fetchImpl:e.fetchImpl}:{}},t=await(0,resolve_1.resolveCredential)("github",n);if(!t.ok)return t.reason==="unusable"?(0,logger_1.printError)(`A credential exists but could not be used${t.detail?` \u2014 ${t.detail}`:""}.`):(0,logger_1.printError)("Not logged in."),(0,logger_1.printInfo)("Run `agentkit login` to authorize."),1;const l=t.source==="store"?(0,auth_file_1.readAuth)(o):null,d=t.stored?.login??l?.login??"",c=t.source==="store"?l?.storedIn??"store":t.source;(0,logger_1.printInfo)(`Login: ${d||"unknown"}`),(0,logger_1.printInfo)(`Credential: ${c}`),t.stored?.expiresAt&&(0,logger_1.printInfo)(`Token expires: ${new Date(t.stored.expiresAt).toISOString()}`);const i=await(0,check_1.checkEntitlement)({interactive:!1,home:o,deps:n});if(i.status==="active"){const h=i.via==="cache"?"via cache":i.via==="grace"?`in grace until ${new Date(i.checkedAt+cache_1.GRACE_MS).toISOString()}`:"verified live";(0,logger_1.printInfo)(`Entitlement: active (${h}, credential: ${i.credentialSource})`);const a=(0,cache_1.readRecord)(o);if(a?.deniedAt&&!a.confirmed){const f=Math.max(0,Math.ceil((a.deniedAt+cache_1.DENIAL_TTL_MS-Date.now())/6e4));(0,logger_1.printWarning)(`A recent probe suggested access was lost \u2014 confirming in ~${f}m.`)}return 0}return(0,logger_1.printInfo)(`Entitlement: revoked \u2014 credential ${i.credentialSource} has no access.`),1}
|
|
@@ -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 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,t,n,o){o===void 0&&(o=n);var e=Object.getOwnPropertyDescriptor(t,n);(!e||("get"in e?!t.__esModule:e.writable||e.configurable))&&(e={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(r,o,e)}):(function(r,t,n,o){o===void 0&&(o=n),r[o]=t[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,t){Object.defineProperty(r,"default",{enumerable:!0,value:t})}):function(r,t){r.default=t}),__importStar=this&&this.__importStar||(function(){var r=function(t){return r=Object.getOwnPropertyNames||function(n){var o=[];for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(o[o.length]=e);return o},r(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var o=r(t),e=0;e<o.length;e++)o[e]!=="default"&&__createBinding(n,t,o[e]);return __setModuleDefault(n,t),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.syncCodexMcpConfig=syncCodexMcpConfig,exports.syncKimiMcpConfig=syncKimiMcpConfig,exports.syncOmpMcpConfig=syncOmpMcpConfig,exports.removePiCodegraphMcpConfig=removePiCodegraphMcpConfig,exports.isKitWrittenCodegraphEntry=isKitWrittenCodegraphEntry,exports.syncGrokMcpConfig=syncGrokMcpConfig,exports.syncDevinMcpConfig=syncDevinMcpConfig,exports.syncAugmentMcpConfig=syncAugmentMcpConfig,exports.syncCursorMcpConfig=syncCursorMcpConfig;const fs=__importStar(require("fs")),path=__importStar(require("path")),context_mode_remover_1=require("../context-mode-remover"),omp_home_1=require("../omp-home"),pi_home_1=require("../pi-home"),pi_config_json_1=require("../kit-installers/pi-config-json"),pi_packages_1=require("../kit-installers/pi-packages"),devin_home_1=require("../kit-installers/devin-home"),grok_payload_1=require("../kit-installers/grok-payload"),grok_1=require("../kit-installers/grok"),grok_config_toml_1=require("../kit-installers/grok-config-toml"),shared_1=require("../kit-installers/shared"),logger_1=require("../logger");function syncCodexMcpConfig(r,t,n){if(t==="codex"){const o=n==="global"?path.join(process.env.HOME||process.env.USERPROFILE||"",".codex","config.toml"):path.join(r,".codex","config.toml");try{(0,context_mode_remover_1.removeContextMode)({scope:n,platform:"codex",rootDir:path.dirname(o)}),(0,shared_1.ensureMcpServersInCodexConfig)(o),(0,logger_1.printSuccess)("Successfully verified MCP configuration in config.toml")}catch(e){(0,logger_1.printWarning)(`Could not ensure MCP servers in Codex config.toml: ${e.message}`)}}}function syncKimiMcpConfig(r,t,n){if(t!=="kimi")return;const o=process.env.KIMI_CODE_HOME||path.join(process.env.HOME||process.env.USERPROFILE||"",".kimi-code"),e=n==="global"?path.join(o,"mcp.json"):path.join(r,".kimi-code","mcp.json"),c={command:"codegraph",args:n==="project"?["serve","--mcp","--path",r]:["serve","--mcp"]};try{const s=(0,shared_1.readJsonObject)(e);s.mcpServers={...s.mcpServers??{},codegraph:c},(0,shared_1.writeJsonObject)(e,s),(0,logger_1.printSuccess)(`CodeGraph MCP server written to ${e}`)}catch(s){(0,logger_1.printWarning)(`Could not write CodeGraph into Kimi's mcp.json: ${s.message}`)}}function syncOmpMcpConfig(r,t){if(r!=="omp"||t!=="global")return;const n=path.join((0,omp_home_1.resolveOmpAgentDir)(),"mcp.json"),o={command:"codegraph",args:["serve","--mcp"]};try{const e=(0,shared_1.readJsonObject)(n);e.mcpServers={...e.mcpServers??{},codegraph:o},(0,shared_1.writeJsonObject)(n,e),(0,logger_1.printSuccess)(`CodeGraph MCP server written to ${n}`)}catch(e){(0,logger_1.printWarning)(`Could not write CodeGraph into omp's mcp.json: ${e.message}`)}}function removePiCodegraphMcpConfig(r,t,n){if(t!=="pi")return;const o=(0,pi_home_1.resolvePiBaseDir)(n,r),e=path.join(o,"mcp.json");try{const c=(0,shared_1.readJsonObject)(e),s=c.mcpServers;if(s===null||typeof s!="object"||Array.isArray(s))return;const
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,t,n,o){o===void 0&&(o=n);var e=Object.getOwnPropertyDescriptor(t,n);(!e||("get"in e?!t.__esModule:e.writable||e.configurable))&&(e={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(r,o,e)}):(function(r,t,n,o){o===void 0&&(o=n),r[o]=t[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,t){Object.defineProperty(r,"default",{enumerable:!0,value:t})}):function(r,t){r.default=t}),__importStar=this&&this.__importStar||(function(){var r=function(t){return r=Object.getOwnPropertyNames||function(n){var o=[];for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(o[o.length]=e);return o},r(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var o=r(t),e=0;e<o.length;e++)o[e]!=="default"&&__createBinding(n,t,o[e]);return __setModuleDefault(n,t),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.syncCodexMcpConfig=syncCodexMcpConfig,exports.syncKimiMcpConfig=syncKimiMcpConfig,exports.syncOmpMcpConfig=syncOmpMcpConfig,exports.removePiCodegraphMcpConfig=removePiCodegraphMcpConfig,exports.isKitWrittenCodegraphEntry=isKitWrittenCodegraphEntry,exports.syncGrokMcpConfig=syncGrokMcpConfig,exports.syncDevinMcpConfig=syncDevinMcpConfig,exports.syncAugmentMcpConfig=syncAugmentMcpConfig,exports.syncCursorMcpConfig=syncCursorMcpConfig;const fs=__importStar(require("fs")),path=__importStar(require("path")),context_mode_remover_1=require("../context-mode-remover"),omp_home_1=require("../omp-home"),pi_home_1=require("../pi-home"),pi_config_json_1=require("../kit-installers/pi-config-json"),pi_packages_1=require("../kit-installers/pi-packages"),devin_home_1=require("../kit-installers/devin-home"),grok_payload_1=require("../kit-installers/grok-payload"),grok_1=require("../kit-installers/grok"),grok_config_toml_1=require("../kit-installers/grok-config-toml"),shared_1=require("../kit-installers/shared"),logger_1=require("../logger");function syncCodexMcpConfig(r,t,n){if(t==="codex"){const o=n==="global"?path.join(process.env.HOME||process.env.USERPROFILE||"",".codex","config.toml"):path.join(r,".codex","config.toml");try{(0,context_mode_remover_1.removeContextMode)({scope:n,platform:"codex",rootDir:path.dirname(o)}),(0,shared_1.ensureMcpServersInCodexConfig)(o),(0,logger_1.printSuccess)("Successfully verified MCP configuration in config.toml")}catch(e){(0,logger_1.printWarning)(`Could not ensure MCP servers in Codex config.toml: ${e.message}`)}}}function syncKimiMcpConfig(r,t,n){if(t!=="kimi")return;const o=process.env.KIMI_CODE_HOME||path.join(process.env.HOME||process.env.USERPROFILE||"",".kimi-code"),e=n==="global"?path.join(o,"mcp.json"):path.join(r,".kimi-code","mcp.json"),c={command:"codegraph",args:n==="project"?["serve","--mcp","--path",r]:["serve","--mcp"]};try{const s=(0,shared_1.readJsonObject)(e);s.mcpServers={...s.mcpServers??{},codegraph:c},(0,shared_1.writeJsonObject)(e,s),(0,logger_1.printSuccess)(`CodeGraph MCP server written to ${e}`)}catch(s){(0,logger_1.printWarning)(`Could not write CodeGraph into Kimi's mcp.json: ${s.message}`)}}function syncOmpMcpConfig(r,t){if(r!=="omp"||t!=="global")return;const n=path.join((0,omp_home_1.resolveOmpAgentDir)(),"mcp.json"),o={command:"codegraph",args:["serve","--mcp"]};try{const e=(0,shared_1.readJsonObject)(n);e.mcpServers={...e.mcpServers??{},codegraph:o},(0,shared_1.writeJsonObject)(n,e),(0,logger_1.printSuccess)(`CodeGraph MCP server written to ${n}`)}catch(e){(0,logger_1.printWarning)(`Could not write CodeGraph into omp's mcp.json: ${e.message}`)}}function removePiCodegraphMcpConfig(r,t,n){if(t!=="pi")return;const o=(0,pi_home_1.resolvePiBaseDir)(n,r),e=path.join(o,"mcp.json");try{const c=(0,shared_1.readJsonObject)(e),s=c.mcpServers;if(s===null||typeof s!="object"||Array.isArray(s))return;const p=s.codegraph;if(p===void 0)return;if(!isKitWrittenCodegraphEntry(p,r,n)){(0,logger_1.printWarning)(`Left the codegraph server in ${e} alone \u2014 it is not the entry this kit writes for ${n} scope here, so it is yours, a newer CodeGraph's, or a leftover aimed at another directory. Pi reaches CodeGraph through the pi-codegraph extension now; remove it by hand if it is a leftover.`);return}const i=(0,pi_home_1.piConfigPath)(o);if(!(0,pi_config_json_1.declaresPiPackage)(i,pi_packages_1.PI_CODEGRAPH_SPEC)){(0,logger_1.printWarning)(`Left the codegraph server in ${e} alone \u2014 ${i} does not declare ${pi_packages_1.PI_CODEGRAPH_SPEC}, so removing this entry would leave Pi with no route to CodeGraph. Fix that file, then re-run the installer to finish the switch.`);return}delete s.codegraph,(0,shared_1.writeJsonObject)(e,c),(0,logger_1.printSuccess)(`Removed this kit's codegraph MCP entry from ${e} \u2014 Pi reaches CodeGraph through the pi-codegraph extension now.`)}catch(c){(0,logger_1.printWarning)(`Could not clean up CodeGraph in Pi's mcp.json: ${c.message}`)}}function isKitWrittenCodegraphEntry(r,t,n){if(r===null||typeof r!="object"||Array.isArray(r))return!1;const{command:o,args:e}=r;if(o!=="codegraph"||!Array.isArray(e))return!1;const c=Object.keys(r).sort();if(c.length!==2||c[0]!=="args"||c[1]!=="command")return!1;const s=n==="project"?["serve","--mcp","--path",t]:["serve","--mcp"];if(e.length!==s.length)return!1;const p=s.indexOf("--path");return e.every((i,a)=>{if(typeof i!="string")return!1;if(a!==p+1)return i===s[a];const f=process.platform==="darwin"||process.platform==="win32",g=l=>{const u=path.resolve(l);return f?u.toLowerCase():u};return g(i)===g(s[a])})}function syncGrokMcpConfig(r,t,n){if(t!=="grok")return;const o=n==="global"?(0,grok_1.resolveGrokHome)():path.join(r,grok_payload_1.GROK_DIR),e=path.join(o,"config.toml"),c=n==="project"?["serve","--mcp","--path",r]:["serve","--mcp"];try{(0,grok_config_toml_1.mergeGrokMcpServer)(e,"codegraph",c)&&(0,logger_1.printSuccess)(`CodeGraph MCP server written to ${e}`)}catch(s){(0,logger_1.printWarning)(`Could not write CodeGraph into Grok's config.toml: ${s.message}`)}}function syncDevinMcpConfig(r,t,n){if(t!=="devin")return;const o=n==="global"?(0,devin_home_1.resolveDevinConfigRoot)():path.join(r,devin_home_1.DEVIN_DIR),e=path.join(o,"mcp_config.json"),c={command:"codegraph",args:n==="project"?["serve","--mcp","--path",r]:["serve","--mcp"]};try{const s=(0,shared_1.readJsonObject)(e);s.mcpServers={...s.mcpServers??{},codegraph:c},(0,shared_1.writeJsonObject)(e,s),(0,logger_1.printSuccess)(`CodeGraph MCP server written to ${e}`)}catch(s){(0,logger_1.printWarning)(`Could not write CodeGraph into Devin's mcp_config.json: ${s.message}`)}}function syncAugmentMcpConfig(r,t,n){if(t!=="augment")return;const o=path.join(r,".augment","settings.json"),e={type:"stdio",command:"codegraph",args:n==="project"?["serve","--mcp","--path",r]:["serve","--mcp"],env:{}};try{const c=(0,shared_1.readJsonObject)(o);c.mcpServers={...c.mcpServers??{},codegraph:e},(0,shared_1.writeJsonObject)(o,c),(0,logger_1.printSuccess)(`CodeGraph MCP server written to ${o}`)}catch(c){(0,logger_1.printWarning)(`Could not write CodeGraph into Augment's settings.json: ${c.message}`)}}function syncCursorMcpConfig(r,t,n){if(t==="cursor"){const o=path.join(process.env.HOME||process.env.USERPROFILE||"",".cursor"),e=(c,s,p=!0)=>{if(fs.existsSync(c))try{const i=JSON.parse(fs.readFileSync(c,"utf8"));let a={mcpServers:{}};if(fs.existsSync(s))try{a=JSON.parse(fs.readFileSync(s,"utf8"))}catch{}a.mcpServers||(a.mcpServers={}),i.mcpServers&&(a.mcpServers={...a.mcpServers,...i.mcpServers});const f=path.dirname(s);fs.existsSync(f)||fs.mkdirSync(f,{recursive:!0}),(0,shared_1.writeJsonObject)(s,a),p&&fs.unlinkSync(c),(0,logger_1.printSuccess)(`Successfully synced and cleaned up CodeGraph MCP config from ${path.basename(c)} into ${path.basename(s)}`)}catch(i){(0,logger_1.printWarning)(`Could not sync CodeGraph MCP config: ${i.message}`)}};if(n==="global"){const c=path.join(o,".mcp.json"),s=path.join(o,"mcp.json");e(c,s)}else{const c=path.join(r,".mcp.json"),s=path.join(r,"mcp.json"),p=path.join(r,".cursor",".mcp.json"),i=path.join(r,".cursor","mcp.json"),a=fs.existsSync(path.join(r,".claude"));e(c,i,!a),e(s,i),e(p,i)}}}
|
|
@@ -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,
|
|
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,
|
|
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"),install_profile_config_1=require("../install-profile-config"),profile_rules_1=require("../profile-rules"),skill_profiles_1=require("../skill-profiles"),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,h=s==="gamedev"||(0,skill_profiles_1.withDependencies)((0,install_profile_config_1.readInstallSettings)(e.configPath).extraSkills).has("gamedev")?profile_rules_1.GAMEDEV_RULES:[],o=[...ruleNames(r),...h].filter(n=>!i.has(n)&&!p.has(n)).sort();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 l=rulesDirFor(e),d=new Set(ruleNames(l)),u=o.filter(n=>!d.has(n)),a=[];a.push(u.length===0?{group:GROUP,name:"rules:expected-set",status:"pass",summary:`${o.length} rule(s) installed`,detail:l}:{group:GROUP,name:"rules:expected-set",status:"fail",summary:`${u.length} of ${o.length} rule(s) missing \u2014 the agent never sees them`,detail:`${u.join(", ")} (expected in ${l})`,remedy:"agentkit init"});const f=new Set([...o,...i]),c=[...d].filter(n=>!f.has(n));return c.length>0&&a.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"}),a.push(...checkGrokRulesReachable(e)),a}
|
|
@@ -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,
|
|
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(t,e,r,n){n===void 0&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);(!o||("get"in o?!e.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),__importStar=this&&this.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[n.length]=o);return n},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),o=0;o<n.length;o++)n[o]!=="default"&&__createBinding(r,e,n[o]);return __setModuleDefault(r,e),r}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.AGENTKIT_MCP_SERVERS=exports.DROPPED_MCP_SERVERS=void 0,exports.removeAgentkitMcpServers=removeAgentkitMcpServers,exports.stripDroppedMcpServers=stripDroppedMcpServers,exports.stripDroppedMcpServersFromToml=stripDroppedMcpServersFromToml;const fs=__importStar(require("fs"));exports.DROPPED_MCP_SERVERS=[{name:"git",marker:"mcp-server-git"},{name:"sequential-thinking",marker:"@modelcontextprotocol/server-sequential-thinking"}],exports.AGENTKIT_MCP_SERVERS=[{name:"playwright",marker:"@playwright/mcp"},{name:"chrome-devtools",marker:"chrome-devtools-mcp"},{name:"mobile-mcp",marker:"@mobilenext/mobile-mcp"}];function removeAgentkitMcpServers(t){let e;try{e=JSON.parse(fs.readFileSync(t,"utf-8"))}catch{return{removed:[],remaining:null}}const r=e?.mcpServers;if(!r||typeof r!="object"||Array.isArray(r))return{removed:[],remaining:null};const n=[];for(const{name:i,marker:c}of exports.AGENTKIT_MCP_SERVERS)Object.prototype.hasOwnProperty.call(r,i)&&JSON.stringify(r[i]??"").includes(c)&&(delete r[i],n.push(i));const o=Object.keys(r).length;if(n.length===0)return{removed:n,remaining:o};try{if(o===0)return{removed:n,remaining:0};const i=`${t}.${process.pid}.tmp`;try{fs.writeFileSync(i,`${JSON.stringify(e,null,2)}
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);(!o||("get"in o?!e.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),__importStar=this&&this.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[n.length]=o);return n},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),o=0;o<n.length;o++)n[o]!=="default"&&__createBinding(r,e,n[o]);return __setModuleDefault(r,e),r}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.AGENTKIT_MCP_SERVERS=exports.DROPPED_MCP_SERVERS=void 0,exports.removeAgentkitMcpServers=removeAgentkitMcpServers,exports.stripDroppedMcpServers=stripDroppedMcpServers,exports.stripDroppedMcpServersFromToml=stripDroppedMcpServersFromToml;const fs=__importStar(require("fs"));exports.DROPPED_MCP_SERVERS=[{name:"git",marker:"mcp-server-git"},{name:"sequential-thinking",marker:"@modelcontextprotocol/server-sequential-thinking"}],exports.AGENTKIT_MCP_SERVERS=[{name:"playwright",marker:"@playwright/mcp"},{name:"chrome-devtools",marker:"chrome-devtools-mcp"},{name:"mobile-mcp",marker:"@mobilenext/mobile-mcp"},{name:"unityMCP",marker:"mcpforunityserver"}];function removeAgentkitMcpServers(t){let e;try{e=JSON.parse(fs.readFileSync(t,"utf-8"))}catch{return{removed:[],remaining:null}}const r=e?.mcpServers;if(!r||typeof r!="object"||Array.isArray(r))return{removed:[],remaining:null};const n=[];for(const{name:i,marker:c}of exports.AGENTKIT_MCP_SERVERS)Object.prototype.hasOwnProperty.call(r,i)&&JSON.stringify(r[i]??"").includes(c)&&(delete r[i],n.push(i));const o=Object.keys(r).length;if(n.length===0)return{removed:n,remaining:o};try{if(o===0)return{removed:n,remaining:0};const i=`${t}.${process.pid}.tmp`;try{fs.writeFileSync(i,`${JSON.stringify(e,null,2)}
|
|
2
2
|
`,"utf8"),fs.renameSync(i,t)}catch(c){throw fs.rmSync(i,{force:!0}),c}}catch{}return{removed:n,remaining:o}}function stripDroppedMcpServers(t){if(!t||typeof t!="object")return[];const e=[];for(const{name:r,marker:n}of exports.DROPPED_MCP_SERVERS)Object.prototype.hasOwnProperty.call(t,r)&&JSON.stringify(t[r]??"").includes(n)&&(delete t[r],e.push(r));return e}function stripDroppedMcpServersFromToml(t){let e=t;for(const{name:r,marker:n}of exports.DROPPED_MCP_SERVERS)e=e.replace(new RegExp(`^\\[mcp_servers\\.${escapeRegExp(r)}\\][^\\n]*(?:\\n(?!\\[).*)*\\n?`,"gm"),o=>o.includes(n)?"":o);return e===t?t:e.replace(/\n{3,}/g,`
|
|
3
3
|
|
|
4
4
|
`).trimStart()}function escapeRegExp(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}
|