@vpxa/aikit 0.1.99 → 0.1.101
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/README.md +29 -33
- package/package.json +2 -2
- package/packages/aikit-client/dist/index.d.ts +27 -27
- package/packages/aikit-client/dist/index.js +2 -2
- package/packages/analyzers/dist/index.js +2 -2
- package/packages/cli/dist/constants-__Dx2-7-.js +1 -0
- package/packages/cli/dist/index.js +3 -3
- package/packages/cli/dist/init-CwpITli0.js +7 -0
- package/packages/cli/dist/{templates-DVcEiTlc.js → templates-Dz2d2veK.js} +9 -9
- package/packages/cli/dist/{user-Dj8KE0_0.js → user-CpsehvsY.js} +1 -1
- package/packages/core/dist/index.d.ts +8 -8
- package/packages/core/dist/index.js +1 -1
- package/packages/dashboard/dist/assets/{index-C6D-PCp0.js → index-CxrC6OtB.js} +3 -3
- package/packages/dashboard/dist/index.html +1 -1
- package/packages/enterprise-bridge/dist/index.d.ts +1 -1
- package/packages/enterprise-bridge/dist/index.js +1 -1
- package/packages/indexer/dist/index.d.ts +6 -6
- package/packages/server/dist/index.d.ts +1 -1
- package/packages/server/dist/index.js +1 -1
- package/packages/server/dist/server-DfCR_Bix.js +1282 -0
- package/packages/server/dist/{version-check-AMfxaZUw.js → version-check-Bj07vc5x.js} +1 -1
- package/packages/store/dist/index.d.ts +9 -22
- package/packages/store/dist/index.js +6 -6
- package/packages/tools/dist/index.d.ts +16 -15
- package/packages/tools/dist/index.js +6 -6
- package/scaffold/definitions/mcp-entry.json +8 -0
- package/scaffold/dist/adapters/intellij.mjs +3 -0
- package/scaffold/dist/adapters/zed.mjs +4 -0
- package/scaffold/dist/definitions/agents.mjs +1 -1
- package/scaffold/dist/definitions/bodies.mjs +16 -16
- package/scaffold/dist/definitions/flows.mjs +32 -32
- package/scaffold/dist/definitions/hooks.mjs +1 -1
- package/scaffold/dist/definitions/mcp.mjs +1 -0
- package/scaffold/dist/definitions/prompts.mjs +7 -7
- package/scaffold/dist/definitions/protocols.mjs +28 -24
- package/scaffold/dist/definitions/skills.mjs +67 -67
- package/scaffold/dist/definitions/tools.mjs +1 -1
- package/packages/cli/dist/constants-BHJ95m41.js +0 -1
- package/packages/cli/dist/init-CVtbu7zj.js +0 -7
- package/packages/server/dist/server-DZ1V42_x.js +0 -1282
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"./constants-__Dx2-7-.js";import{n as i,t as a}from"./templates-Dz2d2veK.js";import{guideFlows as o,guideScaffold as s,guideSkills as c,smartCopyClaudeCommands as l,smartCopyFlows as u,smartCopyScaffold as d,smartCopySkills as f}from"./scaffold-D664MT9M.js";import{appendFileSync as p,existsSync as m,mkdirSync as h,readFileSync as g,unlinkSync as _,writeFileSync as v}from"node:fs";import{basename as y,dirname as b,join as x,resolve as S}from"node:path";import{fileURLToPath as C}from"node:url";import{AIKIT_PATHS as w,isUserInstalled as T}from"../../core/dist/index.js";function E(e){return m(S(e,`.cursor`))?`cursor`:m(S(e,`.claude`))?`claude-code`:m(S(e,`.windsurf`))?`windsurf`:m(S(e,`.zed`))?`zed`:m(S(e,`.idea`))?`intellij`:`copilot`}function D(e){return{servers:{[e]:{...t}}}}function O(e){let{type:n,...r}=t;return{mcpServers:{[e]:r}}}function k(e){let{type:n,...r}=t;return{context_servers:{[e]:{...r,env:{}}}}}const A={scaffoldDir:`general`,writeMcpConfig(e,t){let n=S(e,`.vscode`),r=S(n,`mcp.json`);m(r)||(h(n,{recursive:!0}),v(r,`${JSON.stringify(D(t),null,2)}\n`,`utf-8`),console.log(` Created .vscode/mcp.json`))},writeInstructions(e,t){let n=S(e,`.github`),r=S(n,`copilot-instructions.md`);h(n,{recursive:!0}),v(r,i(y(e),t),`utf-8`),console.log(` Updated .github/copilot-instructions.md`)},writeAgentsMd(e,t){v(S(e,`AGENTS.md`),a(y(e),t),`utf-8`),console.log(` Updated AGENTS.md`)}},j={scaffoldDir:`general`,writeMcpConfig(e,t){let n=S(e,`.mcp.json`);m(n)||(v(n,`${JSON.stringify(O(t),null,2)}\n`,`utf-8`),console.log(` Created .mcp.json`))},writeInstructions(e,t){let n=S(e,`CLAUDE.md`),r=y(e);v(n,`${i(r,t)}\n---\n\n${a(r,t)}`,`utf-8`),console.log(` Updated CLAUDE.md`)},writeAgentsMd(e,t){}},M={scaffoldDir:`general`,writeMcpConfig(e,t){let n=S(e,`.cursor`),r=S(n,`mcp.json`);m(r)||(h(n,{recursive:!0}),v(r,`${JSON.stringify(O(t),null,2)}\n`,`utf-8`),console.log(` Created .cursor/mcp.json`))},writeInstructions(e,t){let n=S(e,`.cursor`,`rules`),r=S(n,`aikit.mdc`);h(n,{recursive:!0});let o=y(e);v(r,`${i(o,t)}\n---\n\n${a(o,t)}`,`utf-8`),console.log(` Updated .cursor/rules/aikit.mdc`);let s=S(n,`kb.mdc`);m(s)&&s!==r&&(_(s),console.log(` Removed legacy .cursor/rules/kb.mdc`))},writeAgentsMd(e,t){}},N={scaffoldDir:`general`,writeMcpConfig(e,t){let n=S(e,`.vscode`),r=S(n,`mcp.json`);m(r)||(h(n,{recursive:!0}),v(r,`${JSON.stringify(D(t),null,2)}\n`,`utf-8`),console.log(` Created .vscode/mcp.json (Windsurf-compatible)`))},writeInstructions(e,t){let n=S(e,`.windsurfrules`),r=y(e);v(n,`${i(r,t)}\n---\n\n${a(r,t)}`,`utf-8`),console.log(` Updated .windsurfrules`)},writeAgentsMd(e,t){}},P={scaffoldDir:`general`,writeMcpConfig(e,t){let n=S(e,`.zed`),r=S(n,`settings.json`);if(h(n,{recursive:!0}),!m(r))v(r,`${JSON.stringify(k(t),null,2)}\n`,`utf-8`),console.log(` Created .zed/settings.json`);else{let e;try{e=JSON.parse(g(r,`utf-8`))}catch{console.warn(` ⚠ .zed/settings.json contains invalid JSON — skipping MCP config merge`);return}e.context_servers?.[t]||(e.context_servers={...e.context_servers,...k(t).context_servers},v(r,`${JSON.stringify(e,null,2)}\n`,`utf-8`),console.log(` Updated .zed/settings.json with context_servers`))}},writeInstructions(e,t){let n=S(e,`.rules`),r=y(e);v(n,`${i(r,t)}\n---\n\n${a(r,t)}`,`utf-8`),console.log(` Updated .rules`)},writeAgentsMd(e,t){}},F={scaffoldDir:`general`,writeMcpConfig(e,t){let n=S(e,`.idea`),r=S(n,`mcp.json`);h(n,{recursive:!0}),m(r)||(v(r,`${JSON.stringify(O(t),null,2)}\n`,`utf-8`),console.log(` Created .idea/mcp.json`))},writeInstructions(e,t){let n=S(e,`.aiassistant`,`rules`),r=S(n,`aikit.md`);h(n,{recursive:!0});let o=y(e);v(r,`${i(o,t)}\n---\n\n${a(o,t)}`,`utf-8`),console.log(` Updated .aiassistant/rules/aikit.md`)},writeAgentsMd(e,t){}};function I(e){switch(e){case`copilot`:return A;case`claude-code`:return j;case`cursor`:return M;case`windsurf`:return N;case`zed`:return P;case`intellij`:return F}}const L={serverName:n,sources:[{path:`.`,excludePatterns:[`**/node_modules/**`,`**/dist/**`,`**/build/**`,`**/.git/**`,`**/${w.data}/**`,`**/coverage/**`,`**/*.min.js`,`**/package-lock.json`,`**/pnpm-lock.yaml`]}],indexing:{chunkSize:1500,chunkOverlap:200,minChunkSize:100},embedding:{model:`mixedbread-ai/mxbai-embed-large-v1`,dimensions:1024},store:{backend:`lancedb`,path:`${w.data}/lance`},curated:{path:w.aiCurated}};function R(e,t){let n=S(e,`aikit.config.json`);return m(n)&&!t?(console.log(`aikit.config.json already exists. Use --force to overwrite.`),!1):(v(n,`${JSON.stringify(L,null,2)}\n`,`utf-8`),console.log(` Created aikit.config.json`),!0)}function z(e){let t=S(e,`.gitignore`),n=[{dir:`${w.data}/`,label:`AI Kit vector store`},{dir:`${w.state}/`,label:`AI Kit session state`},{dir:`${w.restorePoints}/`,label:`Restore points (codemod/rename undo snapshots)`},{dir:`${w.brainstorm}/`,label:`Brainstorming sessions`},{dir:`${w.handoffs}/`,label:`Handoff documents`}];if(m(t)){let e=g(t,`utf-8`),r=n.filter(t=>!e.includes(t.dir));r.length>0&&(p(t,`\n${r.map(e=>`# ${e.label}\n${e.dir}`).join(`
|
|
2
|
+
`)}\n`,`utf-8`),console.log(` Added ${r.map(e=>e.dir).join(`, `)} to .gitignore`))}else v(t,`${n.map(e=>`# ${e.label}\n${e.dir}`).join(`
|
|
3
|
+
`)}\n`,`utf-8`),console.log(` Created .gitignore with AI Kit entries`)}function B(){return L.serverName}const V=[`decisions`,`patterns`,`conventions`,`troubleshooting`];function H(e){let t=S(e,`.ai`,`curated`);m(t)||(h(t,{recursive:!0}),console.log(` Created .ai/curated/`));for(let e of V){let n=S(t,e);m(n)||h(n,{recursive:!0})}console.log(` Created .ai/curated/{${V.join(`,`)}}/`)}function U(e){let t=e;for(let e=0;e<10;e++){try{let e=x(t,`package.json`);if(m(e)&&JSON.parse(g(e,`utf8`)).name===`@vpxa/aikit`)return t}catch{}let e=b(t);if(e===t)break;t=e}return S(e,`..`,`..`,`..`)}async function W(t){let n=process.cwd();if(!R(n,t.force))return;z(n);let i=B(),a=I(E(n));a.writeMcpConfig(n,i),a.writeInstructions(n,i),a.writeAgentsMd(n,i);let o=U(b(C(import.meta.url))),s=JSON.parse(g(S(o,`package.json`),`utf-8`)).version;await f(n,o,[...e],s,t.force),await u(n,o,[...r],s,t.force),await d(n,o,`copilot`,s,t.force),await l(n,o,s,t.force),H(n),console.log(`
|
|
4
|
+
AI Kit initialized! Next steps:`),console.log(` aikit reindex Index your codebase`),console.log(` aikit search Search indexed content`),console.log(` aikit serve Start MCP server for IDE integration`),T()&&console.log(`
|
|
5
|
+
Note: User-level AI Kit is also installed. This workspace uses its own local data store.`)}async function G(e){T()?await K(e):await W(e)}async function K(e){let t=process.cwd(),n=B(),i=I(E(t));i.writeInstructions(t,n),i.writeAgentsMd(t,n);let a=U(b(C(import.meta.url))),o=JSON.parse(g(S(a,`package.json`),`utf-8`)).version;await d(t,a,`copilot`,o,e.force),await l(t,a,o,e.force),await u(t,a,[...r],o,e.force),H(t),z(t),console.log(`
|
|
6
|
+
Workspace scaffolded for user-level AI Kit! Files added:`),console.log(` Instruction files (AGENTS.md, copilot-instructions.md, etc.)`),console.log(` .ai/curated/ directories`),console.log(` .github/agents/ & .github/prompts/`),console.log(`
|
|
7
|
+
The user-level AI Kit server will auto-index this workspace when opened in your IDE.`)}async function q(){let t=process.cwd(),n=I(E(t)),i=U(b(C(import.meta.url))),a=[...await c(t,i,[...e]),...await o(t,i,[...r]),...await s(t,i,n.scaffoldDir)],l={summary:{total:a.length,new:a.filter(e=>e.status===`new`).length,outdated:a.filter(e=>e.status===`outdated`).length,current:a.filter(e=>e.status===`current`).length},files:a};console.log(JSON.stringify(l,null,2))}export{q as guideProject,W as initProject,K as initScaffoldOnly,G as initSmart};
|
|
@@ -106,26 +106,26 @@ Auto-knowledge also captures facts automatically from tool outputs (conventions
|
|
|
106
106
|
|
|
107
107
|
| Action | Tool | Example |
|
|
108
108
|
|--------|------|---------|
|
|
109
|
-
| Store | \`remember\` | \`
|
|
109
|
+
| Store | \`remember\` | \`knowledge({ action: "remember", title: "Auth uses JWT RS256", content: "...", category: "decisions" })\` |
|
|
110
110
|
| Search | \`search\` | \`search({ query: "authentication", origin: "curated" })\` |
|
|
111
|
-
| Browse | \`list\` | \`list
|
|
112
|
-
| Read | \`read\` | \`
|
|
113
|
-
| Update | \`update\` | \`
|
|
114
|
-
| Remove | \`forget\` | \`
|
|
111
|
+
| Browse | \`list\` | \`knowledge({ action: "list" })\` or \`knowledge({ action: "list", category: "decisions" })\` |
|
|
112
|
+
| Read | \`read\` | \`knowledge({ action: "read", id: "<entry-id>" })\` |
|
|
113
|
+
| Update | \`update\` | \`knowledge({ action: "update", id: "<entry-id>", content: "Updated info" })\` |
|
|
114
|
+
| Remove | \`forget\` | \`knowledge({ action: "forget", id: "<entry-id>" })\` |
|
|
115
115
|
|
|
116
116
|
**Categories:** \`conventions\`, \`decisions\`, \`patterns\`, \`context\`, \`session\`
|
|
117
117
|
|
|
118
118
|
**Task-level recall** (do BEFORE implementing any feature):
|
|
119
119
|
\`\`\`
|
|
120
120
|
search({ query: "keywords about what you're building" }) // check past decisions
|
|
121
|
-
|
|
121
|
+
knowledge({ action: "list", category: "decisions" }) // scan recent decisions
|
|
122
122
|
// If results exist → read and follow them
|
|
123
123
|
// If no results → proceed, then remember() your decisions
|
|
124
124
|
\`\`\`
|
|
125
125
|
|
|
126
126
|
**Session checkpoint** (do at end of every session):
|
|
127
127
|
\`\`\`
|
|
128
|
-
|
|
128
|
+
knowledge({ action: "remember", title: "Session checkpoint: <topic>", content: "Done: ... / Decisions: ... / Next: ... / Blockers: ...", category: "session" })
|
|
129
129
|
\`\`\`
|
|
130
130
|
|
|
131
131
|
**Session resume** (do at start of every session):
|
|
@@ -162,8 +162,8 @@ Load them: \`tool_search_tool_regex({ pattern: "aikit" })\`
|
|
|
162
162
|
|----------|-------|---------|
|
|
163
163
|
| Search & Discovery | \`search\`, \`find\`, \`symbol\`, \`trace\`, \`scope_map\`, \`lookup\`, \`dead_symbols\`, \`file_summary\` | Find code, symbols, data flow, reading plans |
|
|
164
164
|
| Relationships | \`graph\` | Two-step: \`graph({action:'find_nodes', name_pattern})\` then \`graph({action:'neighbors', node_id})\`. Who imports / what depends / layer violations. |
|
|
165
|
-
| Code Analysis | \`
|
|
166
|
-
| Knowledge | \`
|
|
165
|
+
| Code Analysis | \`analyze\`, \`blast_radius\` | Structure, deps, patterns, diagrams, impact |
|
|
166
|
+
| Knowledge | \`knowledge\`, \`produce_knowledge\` | Persistent cross-session memory |
|
|
167
167
|
| Execution | \`check\`, \`test_run\`, \`eval\`, \`batch\`, \`audit\` | Typecheck, lint, test, run code |
|
|
168
168
|
| Context Compression | \`compact\`, \`digest\`, \`stratum_card\`, \`workset\`, \`stash\`, \`checkpoint\`, \`restore\` | Reduce tokens, manage working sets |
|
|
169
169
|
| FORGE | \`forge_ground\`, \`forge_classify\`, \`evidence_map\` | Quality gates for complex tasks |
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,n as t,r as n}from"./constants-BHJ95m41.js";import{n as r,t as i}from"./templates-DVcEiTlc.js";import{loadAdapter as a,n as o,r as s,smartCopyFromMemory as c,t as l}from"./scaffold-D664MT9M.js";import{existsSync as u,mkdirSync as d,readFileSync as f,readdirSync as p,rmSync as m,unlinkSync as h,writeFileSync as g}from"node:fs";import{dirname as _,join as v,posix as y,resolve as b,win32 as x}from"node:path";import{fileURLToPath as S}from"node:url";import{mkdir as C,readFile as w,rename as T,unlink as E,writeFile as D}from"node:fs/promises";import{getGlobalDataDir as O,saveRegistry as k}from"../../core/dist/index.js";import{execFileSync as A}from"node:child_process";import{randomUUID as j}from"node:crypto";import{homedir as M}from"node:os";var N=class{isPlatformSupported(){return this.platforms.includes(process.platform)}async readConfig(e){let t=this.getConfigPath(e);if(!u(t))return{};let n=await w(t,`utf-8`);try{return JSON.parse(n)}catch{throw Error(`Invalid JSON in ${t}. Please fix or remove the file before retrying.`)}}async writeConfig(e,t){let n=this.getConfigPath(t),r=_(n),i=v(r,`.aikit-tmp-${j()}.json`);await C(r,{recursive:!0});try{await D(i,`${JSON.stringify(e,null,2)}\n`,`utf-8`),await T(i,n)}catch(e){try{await E(i)}catch{}throw e}}async registerMcp(e,t,n){let r=await this.readConfig(n);r[this.configKey]||(r[this.configKey]={}),r[this.configKey][e]=t,await this.writeConfig(r,n)}async unregisterMcp(e,t){let n=await this.readConfig(t);n[this.configKey]&&(delete n[this.configKey][e],await this.writeConfig(n,t))}getScaffoldRoot(e){return null}getInstructionsRoot(e){return null}getScaffoldPaths(e){return{agents:null,skills:null,prompts:null,flows:null,commands:null,instructions:null,manifest:null}}buildInstructionContent(e,t){return`${e}\n---\n\n${t}`}},P=class extends N{id=`claude-code`;name=`Claude Code`;family=`claude`;platforms=[`win32`,`darwin`,`linux`];scope=`user`;configKey=`mcpServers`;async detect(){return this.isPlatformSupported()?u(this.getPathModule().resolve(M(),`.claude`)):!1}getConfigPath(){return this.getPathModule().resolve(M(),`.claude`,`mcp.json`)}getScaffoldRoot(){return this.getPathModule().resolve(M(),`.claude`)}getScaffoldPaths(){let e=this.getPathModule(),t=e.resolve(M(),`.claude`);return{agents:e.resolve(t,`agents`),skills:e.resolve(t,`skills`),prompts:null,flows:e.resolve(t,`flows`),commands:e.resolve(t,`commands`),instructions:e.resolve(t,`CLAUDE.md`),manifest:e.resolve(t,`.aikit-scaffold.json`)}}buildInstructionContent(e,t){return`${e}\n---\n\n${t}`}getPathModule(){return process.platform===`win32`?x:y}},F=class extends N{id=`codex-cli`;name=`Codex CLI`;family=`codex`;platforms=[`win32`,`darwin`,`linux`];scope=`user`;configKey=`mcpServers`;async detect(){return this.isPlatformSupported()?u(this.getPathModule().resolve(M(),`.codex`)):!1}getConfigPath(){return this.getPathModule().resolve(M(),`.codex`,`config.json`)}getScaffoldRoot(){return this.getPathModule().resolve(M(),`.codex`)}getScaffoldPaths(){let e=this.getPathModule(),t=e.resolve(M(),`.codex`);return{agents:e.resolve(t,`agents`),skills:e.resolve(t,`skills`),prompts:null,flows:e.resolve(t,`flows`),commands:null,instructions:e.resolve(t,`AGENTS.md`),manifest:e.resolve(t,`.aikit-scaffold.json`)}}getPathModule(){return process.platform===`win32`?x:y}},I=class extends N{family=`copilot`;platforms=[`win32`,`darwin`,`linux`];scope=`user`;hasInstructions=!1;async detect(){if(!this.isPlatformSupported())return!1;let e=this.getConfigDir();if(process.platform===`darwin`){let t=this.getMacAppPath();return u(e)||t!==null&&u(t)}return u(e)}getConfigPath(){return this.getPathModule().resolve(this.getConfigDir(),`mcp.json`)}getScaffoldRoot(){return this.getPathModule().resolve(M(),this.scaffoldBase)}getInstructionsRoot(){let e=this.getInstructionFilePath();return e?this.getPathModule().dirname(e):null}getScaffoldPaths(){let e=this.getPathModule(),t=e.resolve(M(),this.scaffoldBase);return{agents:e.resolve(t,`agents`),skills:e.resolve(t,`skills`),prompts:e.resolve(this.getConfigDir(),`prompts`),flows:e.resolve(t,`flows`),commands:null,instructions:this.getInstructionFilePath(),manifest:e.resolve(t,`.aikit-scaffold.json`)}}getConfigDir(){let e=this.getPathModule(),t=M();if(process.platform===`win32`){let n=process.env.APPDATA??e.resolve(t,`AppData`,`Roaming`);return e.resolve(n,this.configDirName,`User`)}if(process.platform===`darwin`)return e.resolve(t,`Library`,`Application Support`,this.configDirName,`User`);let n=process.env.XDG_CONFIG_HOME??e.resolve(t,`.config`);return e.resolve(n,this.configDirName,`User`)}getMacAppPath(){return null}getInstructionFilePath(){return null}getPathModule(){return process.platform===`win32`?x:y}},L=class extends N{id=`copilot-cli`;name=`Copilot CLI`;family=`copilot`;platforms=[`win32`,`darwin`,`linux`];scope=`user`;configKey=`mcpServers`;async detect(){return this.isPlatformSupported()?u(b(M(),`.copilot`)):!1}getConfigPath(){return b(M(),`.copilot`,`mcp-config.json`)}async registerMcp(e,t,n){let r={...t,tools:[`*`]},i=await this.readConfig(n);i[this.configKey]||(i[this.configKey]={}),i[this.configKey][e]=r,await this.writeConfig(i,n)}getScaffoldRoot(){return b(M(),`.copilot`)}getInstructionsRoot(){return null}getScaffoldPaths(){let e=b(M(),`.copilot`);return{agents:b(e,`agents`),skills:b(e,`skills`),prompts:null,flows:b(e,`flows`),commands:null,instructions:b(M(),`.github`,`copilot-instructions.md`),manifest:b(e,`.aikit-scaffold.json`)}}},R=class extends I{id=`cursor`;name=`Cursor`;configKey=`mcpServers`;configDirName=`Cursor`;scaffoldBase=`.cursor`;getMacAppPath(){return`/Applications/Cursor.app`}getInstructionFilePath(){return this.getPathModule().resolve(M(),this.scaffoldBase,`rules`,`aikit.mdc`)}},z=class extends I{id=`cursor-nightly`;name=`Cursor Nightly`;configKey=`mcpServers`;configDirName=`Cursor Nightly`;scaffoldBase=`.cursor`;getMacAppPath(){return`/Applications/Cursor Nightly.app`}getInstructionFilePath(){return this.getPathModule().resolve(M(),this.scaffoldBase,`rules`,`aikit.mdc`)}},B=class e extends N{id=`intellij`;name=`IntelliJ IDEA`;family=`copilot`;platforms=[`win32`,`darwin`,`linux`];scope=`workspace`;configKey=`servers`;static PRODUCTS=[`IntelliJIdea`,`IdeaIC`,`WebStorm`,`PyCharm`,`PyCharmCE`,`GoLand`,`PhpStorm`,`CLion`,`Rider`,`RubyMine`,`RustRover`,`DataGrip`];async detect(){if(!this.isPlatformSupported())return!1;let t=this.getJetBrainsBaseDir();if(!u(t))return!1;try{return p(t,{withFileTypes:!0}).some(t=>t.isDirectory()&&e.PRODUCTS.some(e=>t.name.startsWith(e)))}catch{return!1}}getConfigPath(e){if(!e)throw Error(`IntelliJ adapter requires projectRoot (scope: workspace)`);return b(e,`mcp.json`)}async registerMcp(e,t,n){let r={type:`stdio`,...t};await super.registerMcp(e,r,n)}getScaffoldRoot(e){return e?b(e,`.github`,`agents`):null}getInstructionsRoot(e){return null}getScaffoldPaths(e){return e?{agents:b(e,`.github`,`agents`),skills:null,prompts:null,flows:null,commands:null,instructions:b(e,`AGENTS.md`),manifest:null}:{agents:null,skills:null,prompts:null,flows:null,commands:null,instructions:null,manifest:null}}buildInstructionContent(e,t){return t}getJetBrainsBaseDir(){let e=M();return process.platform===`win32`?b(process.env.APPDATA??b(e,`AppData`,`Roaming`),`JetBrains`):process.platform===`darwin`?b(e,`Library`,`Application Support`,`JetBrains`):b(process.env.XDG_CONFIG_HOME??b(e,`.config`),`JetBrains`)}},V=class extends I{id=`trae`;name=`Trae`;configKey=`servers`;configDirName=`Trae`;scaffoldBase=`.trae`;getMacAppPath(){return`/Applications/Trae.app`}getInstructionFilePath(){return this.getPathModule().resolve(M(),this.scaffoldBase,`rules`,`aikit.md`)}},H=class extends I{id=`vscode`;name=`VS Code`;configKey=`servers`;configDirName=`Code`;scaffoldBase=`.copilot`;hasInstructions=!0;getMacAppPath(){return`/Applications/Visual Studio Code.app`}getInstructionFilePath(){return this.hasInstructions?this.getPathModule().resolve(M(),this.scaffoldBase,`instructions`,`copilot-instructions.md`):null}buildInstructionContent(e,t){return`---\napplyTo: "**"\n---\n\n${e}\n---\n\n${t}`}},U=class extends I{id=`vscode-insiders`;name=`VS Code Insiders`;configKey=`servers`;configDirName=`Code - Insiders`;scaffoldBase=`.copilot`;hasInstructions=!0;getMacAppPath(){return`/Applications/Visual Studio Code - Insiders.app`}getInstructionFilePath(){return this.hasInstructions?this.getPathModule().resolve(M(),this.scaffoldBase,`instructions`,`copilot-instructions.md`):null}buildInstructionContent(e,t){return`---\napplyTo: "**"\n---\n\n${e}\n---\n\n${t}`}},W=class extends I{id=`vscodium`;name=`VSCodium`;configKey=`servers`;configDirName=`VSCodium`;scaffoldBase=`.copilot`;hasInstructions=!0;getMacAppPath(){return`/Applications/VSCodium.app`}getInstructionFilePath(){return this.hasInstructions?this.getPathModule().resolve(M(),this.scaffoldBase,`instructions`,`copilot-instructions.md`):null}buildInstructionContent(e,t){return`---\napplyTo: "**"\n---\n\n${e}\n---\n\n${t}`}},G=class extends I{id=`windsurf`;name=`Windsurf`;configKey=`servers`;configDirName=`Windsurf`;scaffoldBase=`.windsurf`;getMacAppPath(){return`/Applications/Windsurf.app`}getInstructionFilePath(){return this.getPathModule().resolve(M(),this.scaffoldBase,`rules`,`aikit.md`)}},K=class extends N{id=`gemini-cli`;name=`Gemini CLI`;family=`gemini`;platforms=[`win32`,`darwin`,`linux`];scope=`user`;configKey=`mcpServers`;async detect(){return this.isPlatformSupported()?u(this.getPathModule().resolve(M(),`.gemini`)):!1}getConfigPath(){return this.getPathModule().resolve(M(),`.gemini`,`settings.json`)}getScaffoldRoot(){return this.getPathModule().resolve(M(),`.gemini`)}getScaffoldPaths(){let e=this.getPathModule(),t=e.resolve(M(),`.gemini`);return{agents:e.resolve(t,`agents`),skills:e.resolve(t,`skills`),prompts:null,flows:e.resolve(t,`flows`),commands:null,instructions:e.resolve(t,`AGENTS.md`),manifest:e.resolve(t,`.aikit-scaffold.json`)}}getPathModule(){return process.platform===`win32`?x:y}};const q=[new H,new U,new W,new R,new z,new G,new V,new L,new B,new P,new K,new F];function J(){return[...q]}async function Y(e){let t=e?.scope?q.filter(t=>t.scope===e.scope):q;return(await Promise.allSettled(t.map(async e=>await e.detect()?e:null))).flatMap(e=>e.status!==`fulfilled`||e.value===null?[]:[e.value])}function X(e){let t=e;for(let e=0;e<10;e++){try{let e=v(t,`package.json`);if(u(e)&&JSON.parse(f(e,`utf8`)).name===`@vpxa/aikit`)return t}catch{}let e=_(t);if(e===t)break;t=e}return b(e,`..`,`..`,`..`)}function Z(){let e={command:t.command,args:t.args?[...t.args]:void 0,type:t.type};if(process.platform!==`win32`){let t=process.env.PATH;t&&(e.env={PATH:t});try{let t=A(`which`,[`node`],{encoding:`utf-8`,timeout:3e3}).trim();t&&u(t)&&(e.command=t)}catch{}}return e}const Q=new Set([`VS Code`,`VS Code Insiders`,`VSCodium`]);function $(t,n=!1){if(!Q.has(t.name))return;let r=b(_(t.getConfigPath()),`settings.json`),i={};if(u(r))try{let e=f(r,`utf-8`);i=JSON.parse(e)}catch{console.log(` ${t.name}: skipped settings.json (invalid JSON)`);return}let a=!1;for(let[t,r]of Object.entries(e))if(typeof r==`object`&&r){let e=typeof i[t]==`object`&&i[t]!==null?i[t]:{},n={...e,...r};JSON.stringify(n)!==JSON.stringify(e)&&(i[t]=n,a=!0)}else (n||!(t in i))&&(i[t]=r,a=!0);a&&(g(r,`${JSON.stringify(i,null,2)}\n`,`utf-8`),console.log(` ${t.name}: updated settings.json`))}async function ee(e,t,n,f,p=!1){let h=new Map;for(let e of t)e.getScaffoldRoot()!==null&&h.set(e.id,e);if(t.some(e=>Q.has(e.name))){let e=J().find(e=>e.id===`copilot-cli`);e&&h.set(e.id,e)}if(h.size===0){console.log(` No IDEs with global scaffold support detected.`);return}let v=await a(e,`copilot`),y=new Map;for(let e of v){let t=e.path.indexOf(`/`);if(t===-1)continue;let n=e.path.substring(0,t);if(n!==`agents`&&n!==`prompts`)continue;let r=y.get(n)??[];r.push({path:e.path.substring(t+1),content:e.content}),y.set(n,r)}let x=await a(e,`skills`),S=new Set;for(let e of x){let t=e.path.indexOf(`/`);t!==-1&&S.add(e.path.substring(0,t))}let C=await a(e,`flows`),w=new Set;for(let e of C){let t=e.path.indexOf(`/`);t!==-1&&w.add(e.path.substring(0,t))}let T=await a(e,`claude-code`),E=new Set,D=new Set,O=new Set,k=(e,t,n)=>{let r=y.get(n);if(!e||!t||!r||r.length===0)return;let i=`${n}:${t}:${e}`;if(E.has(i))return;E.add(i);let a=o(t)??l(f);a.version=f,c(r,e,a,n,p),s(t,a),O.add(_(t))},A=(e,t,n,r)=>{if(!e||!t||r.length===0)return;let i=`${n}:${t}:${e}`;if(E.has(i))return;if(E.add(i),n===`flows`&&!D.has(e)){for(let n of w){let r=b(e,n,`skills`);u(r)&&(m(r,{recursive:!0,force:!0}),console.log(` ${_(t)}: migrated ${n} flow to steps/ layout`))}D.add(e)}let a=o(t)??l(f);a.version=f,c(r,e,a,n,p),s(t,a),O.add(_(t))};for(let e of h.values()){let t=e.getScaffoldPaths();k(t.agents,t.manifest,`agents`),k(t.prompts,t.manifest,`prompts`),A(t.skills,t.manifest,`skills`,x),A(t.flows,t.manifest,`flows`,C),A(t.commands,t.manifest,`commands`,T)}for(let e of O)console.log(` ${e}: scaffold updated (${S.size} skills)`);let j=new Set,M=r(`aikit`,n),N=i(`aikit`,n);for(let e of h.values()){let t=e.getScaffoldPaths().instructions;!t||j.has(t)||(d(_(t),{recursive:!0}),g(t,e.buildInstructionContent(M,N),`utf-8`),j.add(t))}j.size>0&&console.log(` Instruction files: ${[...j].join(`, `)}`)}function te(e){let t=[];for(let n of e){let e=n.getScaffoldRoot();if(e)if(Q.has(n.name)){let r=n.getInstructionsRoot()??e;t.push(b(r,`kb.instructions.md`)),t.push(b(r,`aikit.instructions.md`))}else n.name===`Cursor`||n.name===`Cursor Nightly`?t.push(b(e,`rules`,`kb.mdc`)):n.name===`Windsurf`&&t.push(b(e,`rules`,`kb.md`))}for(let e of t)u(e)&&(h(e),console.log(` Removed legacy file: ${e}`))}async function ne(e){let t=n,r=X(_(S(import.meta.url))),i=JSON.parse(f(b(r,`package.json`),`utf-8`)).version;console.log(`Initializing @vpxa/aikit v${i}...\n`);let a=O();d(a,{recursive:!0}),console.log(` Global data store: ${a}`),k({version:1,workspaces:{}}),console.log(` Created registry.json`);let o=await Y({scope:`user`});if(o.length===0)console.log(`
|
|
1
|
+
import{a as e,n as t,r as n}from"./constants-__Dx2-7-.js";import{n as r,t as i}from"./templates-Dz2d2veK.js";import{loadAdapter as a,n as o,r as s,smartCopyFromMemory as c,t as l}from"./scaffold-D664MT9M.js";import{existsSync as u,mkdirSync as d,readFileSync as f,readdirSync as p,rmSync as m,unlinkSync as h,writeFileSync as g}from"node:fs";import{dirname as _,join as v,posix as y,resolve as b,win32 as x}from"node:path";import{fileURLToPath as S}from"node:url";import{mkdir as C,readFile as w,rename as T,unlink as E,writeFile as D}from"node:fs/promises";import{getGlobalDataDir as O,saveRegistry as k}from"../../core/dist/index.js";import{execFileSync as A}from"node:child_process";import{randomUUID as j}from"node:crypto";import{homedir as M}from"node:os";var N=class{isPlatformSupported(){return this.platforms.includes(process.platform)}async readConfig(e){let t=this.getConfigPath(e);if(!u(t))return{};let n=await w(t,`utf-8`);try{return JSON.parse(n)}catch{throw Error(`Invalid JSON in ${t}. Please fix or remove the file before retrying.`)}}async writeConfig(e,t){let n=this.getConfigPath(t),r=_(n),i=v(r,`.aikit-tmp-${j()}.json`);await C(r,{recursive:!0});try{await D(i,`${JSON.stringify(e,null,2)}\n`,`utf-8`),await T(i,n)}catch(e){try{await E(i)}catch{}throw e}}async registerMcp(e,t,n){let r=await this.readConfig(n);r[this.configKey]||(r[this.configKey]={}),r[this.configKey][e]=t,await this.writeConfig(r,n)}async unregisterMcp(e,t){let n=await this.readConfig(t);n[this.configKey]&&(delete n[this.configKey][e],await this.writeConfig(n,t))}getScaffoldRoot(e){return null}getInstructionsRoot(e){return null}getScaffoldPaths(e){return{agents:null,skills:null,prompts:null,flows:null,commands:null,instructions:null,manifest:null}}buildInstructionContent(e,t){return`${e}\n---\n\n${t}`}},P=class extends N{id=`claude-code`;name=`Claude Code`;family=`claude`;platforms=[`win32`,`darwin`,`linux`];scope=`user`;configKey=`mcpServers`;async detect(){return this.isPlatformSupported()?u(this.getPathModule().resolve(M(),`.claude`)):!1}getConfigPath(){return this.getPathModule().resolve(M(),`.claude`,`mcp.json`)}getScaffoldRoot(){return this.getPathModule().resolve(M(),`.claude`)}getScaffoldPaths(){let e=this.getPathModule(),t=e.resolve(M(),`.claude`);return{agents:e.resolve(t,`agents`),skills:e.resolve(t,`skills`),prompts:null,flows:e.resolve(t,`flows`),commands:e.resolve(t,`commands`),instructions:e.resolve(t,`CLAUDE.md`),manifest:e.resolve(t,`.aikit-scaffold.json`)}}buildInstructionContent(e,t){return`${e}\n---\n\n${t}`}getPathModule(){return process.platform===`win32`?x:y}},F=class extends N{id=`codex-cli`;name=`Codex CLI`;family=`codex`;platforms=[`win32`,`darwin`,`linux`];scope=`user`;configKey=`mcpServers`;async detect(){return this.isPlatformSupported()?u(this.getPathModule().resolve(M(),`.codex`)):!1}getConfigPath(){return this.getPathModule().resolve(M(),`.codex`,`config.json`)}getScaffoldRoot(){return this.getPathModule().resolve(M(),`.codex`)}getScaffoldPaths(){let e=this.getPathModule(),t=e.resolve(M(),`.codex`);return{agents:e.resolve(t,`agents`),skills:e.resolve(t,`skills`),prompts:null,flows:e.resolve(t,`flows`),commands:null,instructions:e.resolve(t,`AGENTS.md`),manifest:e.resolve(t,`.aikit-scaffold.json`)}}getPathModule(){return process.platform===`win32`?x:y}},I=class extends N{family=`copilot`;platforms=[`win32`,`darwin`,`linux`];scope=`user`;hasInstructions=!1;async detect(){if(!this.isPlatformSupported())return!1;let e=this.getConfigDir();if(process.platform===`darwin`){let t=this.getMacAppPath();return u(e)||t!==null&&u(t)}return u(e)}getConfigPath(){return this.getPathModule().resolve(this.getConfigDir(),`mcp.json`)}getScaffoldRoot(){return this.getPathModule().resolve(M(),this.scaffoldBase)}getInstructionsRoot(){let e=this.getInstructionFilePath();return e?this.getPathModule().dirname(e):null}getScaffoldPaths(){let e=this.getPathModule(),t=e.resolve(M(),this.scaffoldBase);return{agents:e.resolve(t,`agents`),skills:e.resolve(t,`skills`),prompts:e.resolve(this.getConfigDir(),`prompts`),flows:e.resolve(t,`flows`),commands:null,instructions:this.getInstructionFilePath(),manifest:e.resolve(t,`.aikit-scaffold.json`)}}getConfigDir(){let e=this.getPathModule(),t=M();if(process.platform===`win32`){let n=process.env.APPDATA??e.resolve(t,`AppData`,`Roaming`);return e.resolve(n,this.configDirName,`User`)}if(process.platform===`darwin`)return e.resolve(t,`Library`,`Application Support`,this.configDirName,`User`);let n=process.env.XDG_CONFIG_HOME??e.resolve(t,`.config`);return e.resolve(n,this.configDirName,`User`)}getMacAppPath(){return null}getInstructionFilePath(){return null}getPathModule(){return process.platform===`win32`?x:y}},L=class extends N{id=`copilot-cli`;name=`Copilot CLI`;family=`copilot`;platforms=[`win32`,`darwin`,`linux`];scope=`user`;configKey=`mcpServers`;async detect(){return this.isPlatformSupported()?u(b(M(),`.copilot`)):!1}getConfigPath(){return b(M(),`.copilot`,`mcp-config.json`)}async registerMcp(e,t,n){let r={...t,tools:[`*`]},i=await this.readConfig(n);i[this.configKey]||(i[this.configKey]={}),i[this.configKey][e]=r,await this.writeConfig(i,n)}getScaffoldRoot(){return b(M(),`.copilot`)}getInstructionsRoot(){return null}getScaffoldPaths(){let e=b(M(),`.copilot`);return{agents:b(e,`agents`),skills:b(e,`skills`),prompts:null,flows:b(e,`flows`),commands:null,instructions:b(M(),`.github`,`copilot-instructions.md`),manifest:b(e,`.aikit-scaffold.json`)}}},R=class extends I{id=`cursor`;name=`Cursor`;configKey=`mcpServers`;configDirName=`Cursor`;scaffoldBase=`.cursor`;getMacAppPath(){return`/Applications/Cursor.app`}getInstructionFilePath(){return this.getPathModule().resolve(M(),this.scaffoldBase,`rules`,`aikit.mdc`)}},z=class extends I{id=`cursor-nightly`;name=`Cursor Nightly`;configKey=`mcpServers`;configDirName=`Cursor Nightly`;scaffoldBase=`.cursor`;getMacAppPath(){return`/Applications/Cursor Nightly.app`}getInstructionFilePath(){return this.getPathModule().resolve(M(),this.scaffoldBase,`rules`,`aikit.mdc`)}},B=class e extends N{id=`intellij`;name=`IntelliJ IDEA`;family=`copilot`;platforms=[`win32`,`darwin`,`linux`];scope=`workspace`;configKey=`servers`;static PRODUCTS=[`IntelliJIdea`,`IdeaIC`,`WebStorm`,`PyCharm`,`PyCharmCE`,`GoLand`,`PhpStorm`,`CLion`,`Rider`,`RubyMine`,`RustRover`,`DataGrip`];async detect(){if(!this.isPlatformSupported())return!1;let t=this.getJetBrainsBaseDir();if(!u(t))return!1;try{return p(t,{withFileTypes:!0}).some(t=>t.isDirectory()&&e.PRODUCTS.some(e=>t.name.startsWith(e)))}catch{return!1}}getConfigPath(e){if(!e)throw Error(`IntelliJ adapter requires projectRoot (scope: workspace)`);return b(e,`mcp.json`)}async registerMcp(e,t,n){let r={type:`stdio`,...t};await super.registerMcp(e,r,n)}getScaffoldRoot(e){return e?b(e,`.github`,`agents`):null}getInstructionsRoot(e){return null}getScaffoldPaths(e){return e?{agents:b(e,`.github`,`agents`),skills:null,prompts:null,flows:null,commands:null,instructions:b(e,`AGENTS.md`),manifest:null}:{agents:null,skills:null,prompts:null,flows:null,commands:null,instructions:null,manifest:null}}buildInstructionContent(e,t){return t}getJetBrainsBaseDir(){let e=M();return process.platform===`win32`?b(process.env.APPDATA??b(e,`AppData`,`Roaming`),`JetBrains`):process.platform===`darwin`?b(e,`Library`,`Application Support`,`JetBrains`):b(process.env.XDG_CONFIG_HOME??b(e,`.config`),`JetBrains`)}},V=class extends I{id=`trae`;name=`Trae`;configKey=`servers`;configDirName=`Trae`;scaffoldBase=`.trae`;getMacAppPath(){return`/Applications/Trae.app`}getInstructionFilePath(){return this.getPathModule().resolve(M(),this.scaffoldBase,`rules`,`aikit.md`)}},H=class extends I{id=`vscode`;name=`VS Code`;configKey=`servers`;configDirName=`Code`;scaffoldBase=`.copilot`;hasInstructions=!0;getMacAppPath(){return`/Applications/Visual Studio Code.app`}getInstructionFilePath(){return this.hasInstructions?this.getPathModule().resolve(M(),this.scaffoldBase,`instructions`,`copilot-instructions.md`):null}buildInstructionContent(e,t){return`---\napplyTo: "**"\n---\n\n${e}\n---\n\n${t}`}},U=class extends I{id=`vscode-insiders`;name=`VS Code Insiders`;configKey=`servers`;configDirName=`Code - Insiders`;scaffoldBase=`.copilot`;hasInstructions=!0;getMacAppPath(){return`/Applications/Visual Studio Code - Insiders.app`}getInstructionFilePath(){return this.hasInstructions?this.getPathModule().resolve(M(),this.scaffoldBase,`instructions`,`copilot-instructions.md`):null}buildInstructionContent(e,t){return`---\napplyTo: "**"\n---\n\n${e}\n---\n\n${t}`}},W=class extends I{id=`vscodium`;name=`VSCodium`;configKey=`servers`;configDirName=`VSCodium`;scaffoldBase=`.copilot`;hasInstructions=!0;getMacAppPath(){return`/Applications/VSCodium.app`}getInstructionFilePath(){return this.hasInstructions?this.getPathModule().resolve(M(),this.scaffoldBase,`instructions`,`copilot-instructions.md`):null}buildInstructionContent(e,t){return`---\napplyTo: "**"\n---\n\n${e}\n---\n\n${t}`}},G=class extends I{id=`windsurf`;name=`Windsurf`;configKey=`servers`;configDirName=`Windsurf`;scaffoldBase=`.windsurf`;getMacAppPath(){return`/Applications/Windsurf.app`}getInstructionFilePath(){return this.getPathModule().resolve(M(),this.scaffoldBase,`rules`,`aikit.md`)}},K=class extends N{id=`gemini-cli`;name=`Gemini CLI`;family=`gemini`;platforms=[`win32`,`darwin`,`linux`];scope=`user`;configKey=`mcpServers`;async detect(){return this.isPlatformSupported()?u(this.getPathModule().resolve(M(),`.gemini`)):!1}getConfigPath(){return this.getPathModule().resolve(M(),`.gemini`,`settings.json`)}getScaffoldRoot(){return this.getPathModule().resolve(M(),`.gemini`)}getScaffoldPaths(){let e=this.getPathModule(),t=e.resolve(M(),`.gemini`);return{agents:e.resolve(t,`agents`),skills:e.resolve(t,`skills`),prompts:null,flows:e.resolve(t,`flows`),commands:null,instructions:e.resolve(t,`AGENTS.md`),manifest:e.resolve(t,`.aikit-scaffold.json`)}}getPathModule(){return process.platform===`win32`?x:y}};const q=[new H,new U,new W,new R,new z,new G,new V,new L,new B,new P,new K,new F];function J(){return[...q]}async function Y(e){let t=e?.scope?q.filter(t=>t.scope===e.scope):q;return(await Promise.allSettled(t.map(async e=>await e.detect()?e:null))).flatMap(e=>e.status!==`fulfilled`||e.value===null?[]:[e.value])}function X(e){let t=e;for(let e=0;e<10;e++){try{let e=v(t,`package.json`);if(u(e)&&JSON.parse(f(e,`utf8`)).name===`@vpxa/aikit`)return t}catch{}let e=_(t);if(e===t)break;t=e}return b(e,`..`,`..`,`..`)}function Z(){let e={command:t.command,args:t.args?[...t.args]:void 0,type:t.type};if(process.platform!==`win32`){let t=process.env.PATH;t&&(e.env={PATH:t});try{let t=A(`which`,[`node`],{encoding:`utf-8`,timeout:3e3}).trim();t&&u(t)&&(e.command=t)}catch{}}return e}const Q=new Set([`VS Code`,`VS Code Insiders`,`VSCodium`]);function $(t,n=!1){if(!Q.has(t.name))return;let r=b(_(t.getConfigPath()),`settings.json`),i={};if(u(r))try{let e=f(r,`utf-8`);i=JSON.parse(e)}catch{console.log(` ${t.name}: skipped settings.json (invalid JSON)`);return}let a=!1;for(let[t,r]of Object.entries(e))if(typeof r==`object`&&r){let e=typeof i[t]==`object`&&i[t]!==null?i[t]:{},n={...e,...r};JSON.stringify(n)!==JSON.stringify(e)&&(i[t]=n,a=!0)}else (n||!(t in i))&&(i[t]=r,a=!0);a&&(g(r,`${JSON.stringify(i,null,2)}\n`,`utf-8`),console.log(` ${t.name}: updated settings.json`))}async function ee(e,t,n,f,p=!1){let h=new Map;for(let e of t)e.getScaffoldRoot()!==null&&h.set(e.id,e);if(t.some(e=>Q.has(e.name))){let e=J().find(e=>e.id===`copilot-cli`);e&&h.set(e.id,e)}if(h.size===0){console.log(` No IDEs with global scaffold support detected.`);return}let v=await a(e,`copilot`),y=new Map;for(let e of v){let t=e.path.indexOf(`/`);if(t===-1)continue;let n=e.path.substring(0,t);if(n!==`agents`&&n!==`prompts`)continue;let r=y.get(n)??[];r.push({path:e.path.substring(t+1),content:e.content}),y.set(n,r)}let x=await a(e,`skills`),S=new Set;for(let e of x){let t=e.path.indexOf(`/`);t!==-1&&S.add(e.path.substring(0,t))}let C=await a(e,`flows`),w=new Set;for(let e of C){let t=e.path.indexOf(`/`);t!==-1&&w.add(e.path.substring(0,t))}let T=await a(e,`claude-code`),E=new Set,D=new Set,O=new Set,k=(e,t,n)=>{let r=y.get(n);if(!e||!t||!r||r.length===0)return;let i=`${n}:${t}:${e}`;if(E.has(i))return;E.add(i);let a=o(t)??l(f);a.version=f,c(r,e,a,n,p),s(t,a),O.add(_(t))},A=(e,t,n,r)=>{if(!e||!t||r.length===0)return;let i=`${n}:${t}:${e}`;if(E.has(i))return;if(E.add(i),n===`flows`&&!D.has(e)){for(let n of w){let r=b(e,n,`skills`);u(r)&&(m(r,{recursive:!0,force:!0}),console.log(` ${_(t)}: migrated ${n} flow to steps/ layout`))}D.add(e)}let a=o(t)??l(f);a.version=f,c(r,e,a,n,p),s(t,a),O.add(_(t))};for(let e of h.values()){let t=e.getScaffoldPaths();k(t.agents,t.manifest,`agents`),k(t.prompts,t.manifest,`prompts`),A(t.skills,t.manifest,`skills`,x),A(t.flows,t.manifest,`flows`,C),A(t.commands,t.manifest,`commands`,T)}for(let e of O)console.log(` ${e}: scaffold updated (${S.size} skills)`);let j=new Set,M=r(`aikit`,n),N=i(`aikit`,n);for(let e of h.values()){let t=e.getScaffoldPaths().instructions;!t||j.has(t)||(d(_(t),{recursive:!0}),g(t,e.buildInstructionContent(M,N),`utf-8`),j.add(t))}j.size>0&&console.log(` Instruction files: ${[...j].join(`, `)}`)}function te(e){let t=[];for(let n of e){let e=n.getScaffoldRoot();if(e)if(Q.has(n.name)){let r=n.getInstructionsRoot()??e;t.push(b(r,`kb.instructions.md`)),t.push(b(r,`aikit.instructions.md`))}else n.name===`Cursor`||n.name===`Cursor Nightly`?t.push(b(e,`rules`,`kb.mdc`)):n.name===`Windsurf`&&t.push(b(e,`rules`,`kb.md`))}for(let e of t)u(e)&&(h(e),console.log(` Removed legacy file: ${e}`))}async function ne(e){let t=n,r=X(_(S(import.meta.url))),i=JSON.parse(f(b(r,`package.json`),`utf-8`)).version;console.log(`Initializing @vpxa/aikit v${i}...\n`);let a=O();d(a,{recursive:!0}),console.log(` Global data store: ${a}`),k({version:1,workspaces:{}}),console.log(` Created registry.json`);let o=await Y({scope:`user`});if(o.length===0)console.log(`
|
|
2
2
|
No supported IDEs detected. You can manually add the MCP server config.`);else{console.log(`\n Detected ${o.length} IDE(s):`);let n=Z();for(let e of o)try{await e.registerMcp(t,n),console.log(` ${e.name}: configured ${t}`)}catch(t){console.log(` ${e.name}: failed to configure (${t.message})`)}for(let t of o)$(t,e.force)}console.log(`
|
|
3
3
|
Installing scaffold files:`),await ee(r,o,t,i,e.force),te(o),console.log(`
|
|
4
4
|
User-level AI Kit installation complete!`),console.log(`
|
|
@@ -157,8 +157,8 @@ interface SearchResult {
|
|
|
157
157
|
score: number;
|
|
158
158
|
}
|
|
159
159
|
/** Configuration loaded from aikit.config.json */
|
|
160
|
-
interface
|
|
161
|
-
/** MCP server name. Defaults to '
|
|
160
|
+
interface AikitConfig {
|
|
161
|
+
/** MCP server name. Defaults to 'aikit'. */
|
|
162
162
|
serverName?: string;
|
|
163
163
|
/** @deprecated Use `indexMode` instead. Maps true→'auto', false→'manual'. */
|
|
164
164
|
autoIndex?: boolean;
|
|
@@ -276,21 +276,21 @@ declare function contentTypeToSourceType(ct: ContentType): SourceType;
|
|
|
276
276
|
declare function sourceTypeContentTypes(st: SourceType): ContentType[];
|
|
277
277
|
//#endregion
|
|
278
278
|
//#region packages/core/src/errors.d.ts
|
|
279
|
-
declare class
|
|
279
|
+
declare class AikitError extends Error {
|
|
280
280
|
readonly code: string;
|
|
281
281
|
readonly cause?: unknown;
|
|
282
282
|
constructor(message: string, code: string, cause?: unknown);
|
|
283
283
|
}
|
|
284
|
-
declare class EmbeddingError extends
|
|
284
|
+
declare class EmbeddingError extends AikitError {
|
|
285
285
|
constructor(message: string, cause?: unknown);
|
|
286
286
|
}
|
|
287
|
-
declare class StoreError extends
|
|
287
|
+
declare class StoreError extends AikitError {
|
|
288
288
|
constructor(message: string, cause?: unknown);
|
|
289
289
|
}
|
|
290
|
-
declare class IndexError extends
|
|
290
|
+
declare class IndexError extends AikitError {
|
|
291
291
|
constructor(message: string, cause?: unknown);
|
|
292
292
|
}
|
|
293
|
-
declare class ConfigError extends
|
|
293
|
+
declare class ConfigError extends AikitError {
|
|
294
294
|
constructor(message: string, cause?: unknown);
|
|
295
295
|
}
|
|
296
296
|
//#endregion
|
|
@@ -393,4 +393,4 @@ declare function createLogger(component: string): {
|
|
|
393
393
|
error: (msg: string, data?: Record<string, unknown>) => void;
|
|
394
394
|
};
|
|
395
395
|
//#endregion
|
|
396
|
-
export { AIKIT_GLOBAL_PATHS, AIKIT_PATHS, CATEGORY_PATTERN, CHUNK_SIZES, CONTENT_TYPES, ChunkMetadata, ConfigError, ContentType, DEFAULT_CATEGORIES, EMBEDDING_DEFAULTS, EmbeddingError, FILE_LIMITS, GlobalRegistry, INDEX_MODES, IndexError, IndexMode, IndexStats,
|
|
396
|
+
export { AIKIT_GLOBAL_PATHS, AIKIT_PATHS, AikitConfig, AikitError, CATEGORY_PATTERN, CHUNK_SIZES, CONTENT_TYPES, ChunkMetadata, ConfigError, ContentType, DEFAULT_CATEGORIES, EMBEDDING_DEFAULTS, EmbeddingError, FILE_LIMITS, GlobalRegistry, INDEX_MODES, IndexError, IndexMode, IndexStats, KNOWLEDGE_ORIGINS, KnowledgeOrigin, KnowledgeRecord, LogLevel, LogListener, RawChunk, RegistryEntry, SEARCH_DEFAULTS, SOURCE_TYPES, STORE_DEFAULTS, SearchResult, SourceType, StoreError, TOKEN_BUDGETS, TokenBudget, addLogListener, computePartitionKey, contentTypeToSourceType, createLogger, detectContentType, getGlobalDataDir, getLogLevel, getPartitionDir, isUserInstalled, listWorkspaces, loadRegistry, lookupWorkspace, registerWorkspace, resetLogDir, resolveStateDir, saveRegistry, serializeError, setFileSinkEnabled, setLogLevel, sourceTypeContentTypes };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{basename as e,extname as t,join as n,resolve as r}from"node:path";import{createHash as i}from"node:crypto";import{appendFileSync as a,closeSync as o,constants as s,existsSync as c,mkdirSync as l,openSync as ee,readFileSync as u,readdirSync as d,renameSync as f,statSync as te,unlinkSync as p,writeFileSync as m}from"node:fs";import{homedir as h}from"node:os";const g={ai:`.ai`,aiContext:`.ai/context`,aiCurated:`.ai/curated`,restorePoints:`.ai/restore-points`,data:`.aikit-data`,state:`.aikit-state`,logs:`.aikit-state/logs`,brainstorm:`.brainstorm`,handoffs:`.handoffs`},_={root:`.aikit-data`,registry:`registry.json`},v={markdown:{max:1500,min:100},code:{max:2e3,min:50},config:{max:3e3,min:50},default:{max:1500,min:100,overlap:200}},y={model:`mixedbread-ai/mxbai-embed-large-v1`,dimensions:1024},b={backend:`lancedb`,path:g.data,tableName:`knowledge`},x={maxFileSizeBytes:1e6,maxCuratedFileSizeBytes:5e4},S={maxResults:10,minScore:.25},C=/^[a-z][a-z0-9-]*$/,w=[`decisions`,`patterns`,`troubleshooting`,`conventions`,`architecture`],T={".ts":`code-typescript`,".tsx":`code-typescript`,".mts":`code-typescript`,".cts":`code-typescript`,".js":`code-javascript`,".jsx":`code-javascript`,".mjs":`code-javascript`,".cjs":`code-javascript`,".py":`code-python`,".json":`config-json`,".yaml":`config-yaml`,".yml":`config-yaml`,".toml":`config-toml`,".env":`config-env`,".md":`markdown`,".mdx":`markdown`},E=[/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/(^|\/)__tests__\//,/(^|\/)test\//,/(^|\/)tests\//,/(^|\/)spec\//,/(^|\/)fixtures\//],ne=[/\.stack\.[jt]s$/,/(^|\/)stacks\//,/(^|\/)constructs\//,/cdk\.json$/];function re(n){let r=t(n).toLowerCase(),i=e(n).toLowerCase();return n.includes(`${g.aiContext}/`)?`produced-knowledge`:n.includes(`${g.aiCurated}/`)?`curated-knowledge`:E.some(e=>e.test(n))?`test-code`:ne.some(e=>e.test(n))?`cdk-stack`:r in T?T[r]:i.startsWith(`.env`)?`config-env`:[`.go`,`.rs`,`.java`,`.rb`,`.php`,`.sh`,`.ps1`,`.sql`,`.graphql`,`.proto`,`.css`,`.scss`,`.less`,`.html`,`.htm`,`.vue`,`.svelte`,`.astro`,`.hbs`,`.ejs`,`.svg`].includes(r)?`code-other`:`unknown`}const D={"code-typescript":`source`,"code-javascript":`source`,"code-python":`source`,"code-other":`source`,"cdk-stack":`source`,"test-code":`test`,markdown:`documentation`,documentation:`documentation`,"curated-knowledge":`documentation`,"produced-knowledge":`documentation`,"config-json":`config`,"config-yaml":`config`,"config-toml":`config`,"config-env":`config`,unknown:`source`};function ie(e){return D[e]??`source`}function O(e){return Object.entries(D).filter(([,t])=>t===e).map(([e])=>e)}var k=class extends Error{constructor(e,t,n){super(e,n===void 0?void 0:{cause:n}),this.code=t,this.name=`
|
|
1
|
+
import{basename as e,extname as t,join as n,resolve as r}from"node:path";import{createHash as i}from"node:crypto";import{appendFileSync as a,closeSync as o,constants as s,existsSync as c,mkdirSync as l,openSync as ee,readFileSync as u,readdirSync as d,renameSync as f,statSync as te,unlinkSync as p,writeFileSync as m}from"node:fs";import{homedir as h}from"node:os";const g={ai:`.ai`,aiContext:`.ai/context`,aiCurated:`.ai/curated`,restorePoints:`.ai/restore-points`,data:`.aikit-data`,state:`.aikit-state`,logs:`.aikit-state/logs`,brainstorm:`.brainstorm`,handoffs:`.handoffs`},_={root:`.aikit-data`,registry:`registry.json`},v={markdown:{max:1500,min:100},code:{max:2e3,min:50},config:{max:3e3,min:50},default:{max:1500,min:100,overlap:200}},y={model:`mixedbread-ai/mxbai-embed-large-v1`,dimensions:1024},b={backend:`lancedb`,path:g.data,tableName:`knowledge`},x={maxFileSizeBytes:1e6,maxCuratedFileSizeBytes:5e4},S={maxResults:10,minScore:.25},C=/^[a-z][a-z0-9-]*$/,w=[`decisions`,`patterns`,`troubleshooting`,`conventions`,`architecture`],T={".ts":`code-typescript`,".tsx":`code-typescript`,".mts":`code-typescript`,".cts":`code-typescript`,".js":`code-javascript`,".jsx":`code-javascript`,".mjs":`code-javascript`,".cjs":`code-javascript`,".py":`code-python`,".json":`config-json`,".yaml":`config-yaml`,".yml":`config-yaml`,".toml":`config-toml`,".env":`config-env`,".md":`markdown`,".mdx":`markdown`},E=[/\.test\.[jt]sx?$/,/\.spec\.[jt]sx?$/,/(^|\/)__tests__\//,/(^|\/)test\//,/(^|\/)tests\//,/(^|\/)spec\//,/(^|\/)fixtures\//],ne=[/\.stack\.[jt]s$/,/(^|\/)stacks\//,/(^|\/)constructs\//,/cdk\.json$/];function re(n){let r=t(n).toLowerCase(),i=e(n).toLowerCase();return n.includes(`${g.aiContext}/`)?`produced-knowledge`:n.includes(`${g.aiCurated}/`)?`curated-knowledge`:E.some(e=>e.test(n))?`test-code`:ne.some(e=>e.test(n))?`cdk-stack`:r in T?T[r]:i.startsWith(`.env`)?`config-env`:[`.go`,`.rs`,`.java`,`.rb`,`.php`,`.sh`,`.ps1`,`.sql`,`.graphql`,`.proto`,`.css`,`.scss`,`.less`,`.html`,`.htm`,`.vue`,`.svelte`,`.astro`,`.hbs`,`.ejs`,`.svg`].includes(r)?`code-other`:`unknown`}const D={"code-typescript":`source`,"code-javascript":`source`,"code-python":`source`,"code-other":`source`,"cdk-stack":`source`,"test-code":`test`,markdown:`documentation`,documentation:`documentation`,"curated-knowledge":`documentation`,"produced-knowledge":`documentation`,"config-json":`config`,"config-yaml":`config`,"config-toml":`config`,"config-env":`config`,unknown:`source`};function ie(e){return D[e]??`source`}function O(e){return Object.entries(D).filter(([,t])=>t===e).map(([e])=>e)}var k=class extends Error{constructor(e,t,n){super(e,n===void 0?void 0:{cause:n}),this.code=t,this.name=`AikitError`}},A=class extends k{constructor(e,t){super(e,`EMBEDDING_ERROR`,t),this.name=`EmbeddingError`}},j=class extends k{constructor(e,t){super(e,`STORE_ERROR`,t),this.name=`StoreError`}},M=class extends k{constructor(e,t){super(e,`INDEX_ERROR`,t),this.name=`IndexError`}},N=class extends k{constructor(e,t){super(e,`CONFIG_ERROR`,t),this.name=`ConfigError`}};function P(){return process.env.AIKIT_GLOBAL_DATA_DIR??r(h(),_.root)}function F(t){let n=r(t);return`${e(n).toLowerCase().replace(/[^a-z0-9-]/g,`-`)||`workspace`}-${i(`sha256`).update(n).digest(`hex`).slice(0,8)}`}function I(){let e=r(P(),_.registry);if(!c(e))return{version:1,workspaces:{}};let t=u(e,`utf-8`);try{return JSON.parse(t)}catch{return{version:1,workspaces:{}}}}function L(e,t=5e3){let n=`${e}.lock`,r=Date.now()+t,i=10;for(;Date.now()<r;)try{let e=ee(n,s.O_CREAT|s.O_EXCL|s.O_WRONLY);return m(e,`${process.pid}\n`),o(e),n}catch(e){if(e.code!==`EEXIST`)throw e;try{let{mtimeMs:e}=te(n);if(Date.now()-e>3e4){p(n);continue}}catch{}let t=new SharedArrayBuffer(4);Atomics.wait(new Int32Array(t),0,0,i),i=Math.min(i*2,200)}throw Error(`Failed to acquire registry lock after ${t}ms`)}function R(e){try{p(e)}catch{}}function z(e){let t=P();l(t,{recursive:!0});let n=r(t,_.registry),i=L(n);try{let t=`${n}.tmp`;m(t,JSON.stringify(e,null,2),`utf-8`),f(t,n)}finally{R(i)}}function B(e){let t=I(),n=F(e),i=new Date().toISOString();return t.workspaces[n]?t.workspaces[n].lastAccessedAt=i:t.workspaces[n]={partition:n,workspacePath:r(e),registeredAt:i,lastAccessedAt:i},l(U(n),{recursive:!0}),z(t),t.workspaces[n]}function V(e){let t=I(),n=F(e);return t.workspaces[n]}function H(){let e=I();return Object.values(e.workspaces)}function U(e){return r(P(),e)}function W(){return c(r(P(),_.registry))}function G(e){return W()?r(U(B(e).partition),`state`):r(e,g.state)}const K={debug:0,info:1,warn:2,error:3},q=[];let J=process.env.AIKIT_LOG_LEVEL??`info`,Y=process.env.AIKIT_LOG_FILE_SINK===`true`||process.env.AIKIT_LOG_FILE_SINK!==`false`&&!process.env.VITEST&&process.env.NODE_ENV!==`test`;function ae(){return Y?process.env.VITEST||process.env.NODE_ENV===`test`?process.env.AIKIT_LOG_FILE_SINK===`true`:!0:!1}let X;function Z(){return X||=n(G(process.cwd()),`logs`),X}function oe(e){let t=e.toISOString().slice(0,10);return n(Z(),`${t}.jsonl`)}let Q=0;function se(){let e=Date.now();if(!(e-Q<36e5)){Q=e;try{let t=Z(),r=new Date(e-30*864e5).toISOString().slice(0,10);for(let e of d(t))if(e.endsWith(`.jsonl`)&&e.slice(0,10)<r)try{p(n(t,e))}catch{}}catch{}}}function ce(e,t){try{l(Z(),{recursive:!0}),a(oe(t),`${e}\n`),se()}catch{}}function le(e){J=e}function ue(){return J}function de(e){Y=e}function fe(){X=void 0}function pe(e){if(e instanceof Error){let t={error:e.message};return e.stack&&(t.stack=e.stack),e.cause!==void 0&&(t.cause=e.cause instanceof Error?e.cause.message:String(e.cause)),t}return{error:String(e)}}function $(e){return q.push(e),()=>{let t=q.indexOf(e);t>=0&&q.splice(t,1)}}function me(e){function t(t,n,r){if(K[t]<K[J])return;let i=new Date,a={ts:i.toISOString(),level:t,component:e,msg:n,...r},o=JSON.stringify(a);console.error(o);for(let i of q)try{i({level:t,component:e,message:n,data:r})}catch{}ae()&&(t===`warn`||t===`error`)&&ce(o,i)}return{debug:(e,n)=>t(`debug`,e,n),info:(e,n)=>t(`info`,e,n),warn:(e,n)=>t(`warn`,e,n),error:(e,n)=>t(`error`,e,n)}}const he=[`indexed`,`curated`,`produced`],ge=[`source`,`documentation`,`test`,`config`,`generated`],_e=[`auto`,`manual`,`smart`],ve=[`efficient`,`normal`,`full`],ye=[`documentation`,`code-typescript`,`code-javascript`,`code-python`,`code-other`,`config-json`,`config-yaml`,`config-toml`,`config-env`,`test-code`,`cdk-stack`,`markdown`,`curated-knowledge`,`produced-knowledge`,`unknown`];export{_ as AIKIT_GLOBAL_PATHS,g as AIKIT_PATHS,k as AikitError,C as CATEGORY_PATTERN,v as CHUNK_SIZES,ye as CONTENT_TYPES,N as ConfigError,w as DEFAULT_CATEGORIES,y as EMBEDDING_DEFAULTS,A as EmbeddingError,x as FILE_LIMITS,_e as INDEX_MODES,M as IndexError,he as KNOWLEDGE_ORIGINS,S as SEARCH_DEFAULTS,ge as SOURCE_TYPES,b as STORE_DEFAULTS,j as StoreError,ve as TOKEN_BUDGETS,$ as addLogListener,F as computePartitionKey,ie as contentTypeToSourceType,me as createLogger,re as detectContentType,P as getGlobalDataDir,ue as getLogLevel,U as getPartitionDir,W as isUserInstalled,H as listWorkspaces,I as loadRegistry,V as lookupWorkspace,B as registerWorkspace,fe as resetLogDir,G as resolveStateDir,z as saveRegistry,pe as serializeError,de as setFileSinkEnabled,le as setLogLevel,O as sourceTypeContentTypes};
|