@vpxa/aikit 0.1.378 → 0.1.379

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/package.json +1 -1
  2. package/packages/claude-desktop/dist/manifest.json +1 -1
  3. package/packages/cli/dist/index.js +3 -3
  4. package/packages/cli/dist/{init-gDbVIWiP.js → init-BTsNYC02.js} +1 -1
  5. package/packages/cli/dist/{templates-BPC4t5yz.js → templates-CRs_gkfS.js} +13 -12
  6. package/packages/core/dist/index.d.ts +7 -7
  7. package/packages/core/dist/index.js +1 -1
  8. package/packages/server/dist/bin.js +1 -1
  9. package/packages/server/dist/config-BJiacqlj.js +2 -0
  10. package/packages/server/dist/config-DyLck_1C.js +1 -0
  11. package/packages/server/dist/index.js +1 -1
  12. package/packages/server/dist/prelude-BbNJxiBp.js +1 -0
  13. package/packages/server/dist/prelude-CZ1LShfj.js +2 -0
  14. package/packages/server/dist/sampling-CzGQqIbt.js +1 -0
  15. package/packages/server/dist/sampling-MSeOiAqz.js +2 -0
  16. package/packages/server/dist/server-CMpnBSAC.js +3068 -0
  17. package/packages/server/dist/server-Cq5wP6Hk.js +3067 -0
  18. package/packages/server/dist/{server-http-tZxvg5ke.js → server-http-UNbq9MsP.js} +1 -1
  19. package/packages/server/dist/{server-http-B841uX1k.js → server-http-dyzC379J.js} +1 -1
  20. package/packages/server/dist/{server-stdio-DpGfc6DI.js → server-stdio-COZ6ut6S.js} +1 -1
  21. package/packages/server/dist/{server-stdio-B22xZT0d.js → server-stdio-yz2eyGS4.js} +1 -1
  22. package/packages/tools/dist/index.d.ts +118 -203
  23. package/packages/tools/dist/index.js +115 -117
  24. package/scaffold/dist/adapters/_shared.mjs +12 -11
  25. package/scaffold/dist/adapters/claude-code.mjs +7 -7
  26. package/scaffold/dist/adapters/copilot.mjs +12 -12
  27. package/scaffold/dist/adapters/hermes.mjs +1 -1
  28. package/scaffold/dist/definitions/bodies.mjs +1 -1
  29. package/scaffold/dist/definitions/tools.mjs +1 -1
  30. package/packages/server/dist/config-B4klhHVp.js +0 -2
  31. package/packages/server/dist/config-D3rRPB9X.js +0 -1
  32. package/packages/server/dist/prelude-C4z3H1li.js +0 -1
  33. package/packages/server/dist/prelude-WsqQzR-u.js +0 -2
  34. package/packages/server/dist/sampling-Bpwc-4Jr.js +0 -2
  35. package/packages/server/dist/sampling-CfLD3fM_.js +0 -1
  36. package/packages/server/dist/server-D2a5Rjgk.js +0 -3084
  37. package/packages/server/dist/server-jZ_r6xLb.js +0 -3083
@@ -1,15 +1,16 @@
1
- import{renderLayeredKnowledgeOperatingPolicyV1 as e}from"../definitions/protocols.mjs";function t(e){return e&&e[0].toLowerCase()+e.slice(1)}function n(e){return!e||e.length===0?``:`## Skills\n\n| Skill | When to load |\n|-------|--------------|\n${e.map(([e,t])=>`| ${e} | ${t} |`).join(`
2
- `)}`}function r({name:e,title:r,description:i,skills:a,bodyAddendum:o}){let s=n(a),c=[`# ${e} - ${r||e}`,``,`> ${i}`,``,`You are the **${e}**, ${t(i)}.`];return o&&c.push(``,o.trim()),s&&c.push(``,s),c.push(``),c.join(`
3
- `)}function i({name:e,title:r,description:i,body:a,skills:o,additionalSections:s}){let c=[`### ${e} ${r||e}`,``,`> ${i}`,``,`You are the **${e}**, ${t(i)}.`],l=[a,...s||[],n(o)].filter(Boolean).join(`
1
+ import{renderLayeredKnowledgeOperatingPolicyV1 as e}from"../definitions/protocols.mjs";function t(e){return e&&e[0].toLowerCase()+e.slice(1)}function n(){return[`## Workspace Skill`,``,`This project has an auto-generated workspace skill at`,"`<aikit-workspace>/skills/<workspace-name>/SKILL.md`.",``,`The skill tracks **conventions**, **known issues**, and **workflow tips**`,`specific to this codebase. Load it at session start by either:`,``,"1. Calling `status()` and checking the `workspace_skill` metadata field"," for the skill file path, then reading it with `read_file`.",`2. Reading the skill file directly if you know the workspace path.`,``,`The skill is auto-generated from the AI Kit knowledge store and updates`,`automatically when new facts are promoted. To contribute learnings, use`,"the `knowledge` tool — entries appear in the skill on next regeneration.",``,`**Deep-dive references** (per-topic, loaded on demand):`,"- `<skill-dir>/references/architecture.md` deep architecture","- `<skill-dir>/references/known-issues.md` — recurring problems","- `<skill-dir>/references/workflow-tips.md` — optimization patterns","- `<skill-dir>/references/flow-<slug>.md` — active flow briefing",``].join(`
2
+ `)}function r(e){return!e||e.length===0?``:`## Skills\n\n| Skill | When to load |\n|-------|--------------|\n${e.map(([e,t])=>`| ${e} | ${t} |`).join(`
3
+ `)}`}function i({name:e,title:i,description:a,skills:o,bodyAddendum:s}){let c=r(o),l=n(),u=[`# ${e} - ${i||e}`,``,`> ${a}`,``,`You are the **${e}**, ${t(a)}.`];return s&&u.push(``,s.trim()),c&&u.push(``,c),u.push(``,l),u.push(``),u.join(`
4
+ `)}function a({name:e,title:n,description:i,body:a,skills:o,additionalSections:s}){let c=[`### ${e} — ${n||e}`,``,`> ${i}`,``,`You are the **${e}**, ${t(i)}.`],l=[a,...s||[],r(o)].filter(Boolean).join(`
4
5
 
5
6
  `).trim();return l&&c.push(``,l),c.push(``,`---`,``),c.join(`
6
- `)}function a({title:e,content:t}){return`# ${e}\n\n${t}`}function o(e){return Object.entries(e).map(([e,t])=>[`### ${t.title||t.description||e}`,``,t.content.trim(),``,`---`,``].join(`
7
+ `)}function o({title:e,content:t}){return`# ${e}\n\n${t}`}function s(e){return Object.entries(e).map(([e,t])=>[`### ${t.title||t.description||e}`,``,t.content.trim(),``,`---`,``].join(`
7
8
  `)).join(`
8
- `).trimEnd()}const s={sessionStart:`SessionStart`,beforeCodeChange:`PreToolUse`,beforeCommit:`PreCommit`,sessionEnd:`SessionEnd`},c=[`sessionStart`,`beforeCodeChange`,`beforeCommit`,`sessionEnd`];function l(e){return e?.overall===`none`?[``,`> **Note**: This platform does not support native hook execution (no SessionStart, PreToolUse,`,`> PostToolUse, or PreCommit events). All hook behaviors documented below are **manual** -- you`,`> must perform them yourself. If you need server-side guardrails (privacy guards, scope`,`> enforcement, auto-knowledge signals), consider running the MCP server's **EventBus**, which`,`> provides in-process lifecycle subscribers without requiring IDE-level hook support.`,"> Check `aikit://hooks/config` for available EventBus subscribers.",``].join(`
9
- `):``}function u(e,t,n,r,i){if(!e||i===`omit`)return``;i!==void 0&&i!==`pinned`&&i!=="default"&&console.warn(`buildHookSubsection: unrecognized treatment "${i}" for "${t}". Valid: ${p.join(`, `)}. Falling back to level-based rendering.`);let a=(e.actions||[]).map(e=>`- \`${e}\``),o=[`### ${t}`];return n===`native`?o.push(``,`_`+(r.native||`Auto-handled by native hooks.`)+`_ The following run automatically:`,``,...a,``):n===`eventbus`?o.push(``,`_`+(r.eventbus||`Monitored by EventBus.`)+`_ Active subscribers run automatically.`,`For awareness, these are the current subscribers:`,``,...a,``,"Check `aikit://hooks/config` for the full subscriber list.",``):n===`middleware`?o.push(``,`_`+(r.middleware||`Automated by middleware.`)+`_ The platform middleware handles this:`,``,...a,``):o.push(``,`${r.none||`Manually run the following:`}`,``,...a,``),o.join(`
10
- `)}const d={sessionStart:{native:`Auto-handled by hooks. Status/knowledge/search run on every session start.`,eventbus:`Handled by EventBus. Session-start subscribers fire on connection.`,middleware:`Automated by ToolPipeline middleware. Status/knowledge/search run on session init.`,none:`On every session start, manually run the following to resume context:`},beforeCodeChange:{native:`Auto-handled by hooks. Search+scope checks run before every code change.`,eventbus:`Monitored by EventBus. Tool-before subscribers may provide context.`,none:`Before modifying any code, manually run these checks:`},beforeCommit:{native:`Hook auto-runs. Check+test+blast-radius run before every commit.`,eventbus:`No native pre-commit hooks on this platform. Validate manually:`,middleware:`No middleware-based pre-commit support. Validate manually:`,none:`Before committing changes, manually run these validations:`},sessionEnd:{native:`Auto-handled by hooks. Session-end hook persists checkpoints automatically.`,eventbus:`Tracked by EventBus. Stop subscribers fire on shutdown.`,middleware:`Automated by middleware. Handoff runs on session end.`,none:`Before ending a session (or at high context pressure), manually create a handoff:`}},f={sessionStart:`Session Start`,beforeCodeChange:`Before Code Change`,beforeCommit:`Before Commit`,sessionEnd:`Session End`},p=[`pinned`,`default`,`omit`];function m(e,t,n){if(!e)return``;let r=c.map(r=>{let i=e[r];if(!i)return``;let a=s[r],o=t&&a&&t[a]||`none`,c=d[r]||{},l=n?.[r];return u(i,f[r],o,c,l)}),i=l(t);return[...r,i].filter(Boolean).join(`
11
- `).trimEnd()}function h(e,t){if(!e)return null;let n=typeof e==`function`?e(t):e[t];return n?typeof n==`string`?n:n.primary||n.model||null:null}function g(e,t){let n=!!t,r=[];for(let[i,a]of Object.entries(e))if(a.variants)for(let[e,o]of Object.entries(a.variants)){let s=`${i}-${e}`,c=[`| **${s}** | ${o.description} |`];n&&c.push(` ${h(t,s)||`—`} |`),c.push(` ${a.category||`—`} |`),r.push(c.join(``))}else{let e=[`| **${i}** | ${a.description} |`];n&&e.push(` ${h(t,i)||`—`} |`),e.push(` ${a.category||`—`} |`),r.push(e.join(``))}return n?`| Agent | Purpose | Model | Category |\n|-------|---------|-------|----------|\n${r.join(`
9
+ `).trimEnd()}const c={sessionStart:`SessionStart`,beforeCodeChange:`PreToolUse`,beforeCommit:`PreCommit`,sessionEnd:`SessionEnd`},l=[`sessionStart`,`beforeCodeChange`,`beforeCommit`,`sessionEnd`];function u(e){return e?.overall===`none`?[``,`> **Note**: This platform does not support native hook execution (no SessionStart, PreToolUse,`,`> PostToolUse, or PreCommit events). All hook behaviors documented below are **manual** -- you`,`> must perform them yourself. If you need server-side guardrails (privacy guards, scope`,`> enforcement, auto-knowledge signals), consider running the MCP server's **EventBus**, which`,`> provides in-process lifecycle subscribers without requiring IDE-level hook support.`,"> Check `aikit://hooks/config` for available EventBus subscribers.",``].join(`
10
+ `):``}function d(e,t,n,r,i){if(!e||i===`omit`)return``;i!==void 0&&i!==`pinned`&&i!=="default"&&console.warn(`buildHookSubsection: unrecognized treatment "${i}" for "${t}". Valid: ${m.join(`, `)}. Falling back to level-based rendering.`);let a=(e.actions||[]).map(e=>`- \`${e}\``),o=[`### ${t}`];return n===`native`?o.push(``,`_`+(r.native||`Auto-handled by native hooks.`)+`_ The following run automatically:`,``,...a,``):n===`eventbus`?o.push(``,`_`+(r.eventbus||`Monitored by EventBus.`)+`_ Active subscribers run automatically.`,`For awareness, these are the current subscribers:`,``,...a,``,"Check `aikit://hooks/config` for the full subscriber list.",``):n===`middleware`?o.push(``,`_`+(r.middleware||`Automated by middleware.`)+`_ The platform middleware handles this:`,``,...a,``):o.push(``,`${r.none||`Manually run the following:`}`,``,...a,``),o.join(`
11
+ `)}const f={sessionStart:{native:`Auto-handled by hooks. Status/knowledge/search run on every session start.`,eventbus:`Handled by EventBus. Session-start subscribers fire on connection.`,middleware:`Automated by ToolPipeline middleware. Status/knowledge/search run on session init.`,none:`On every session start, manually run the following to resume context:`},beforeCodeChange:{native:`Auto-handled by hooks. Search+scope checks run before every code change.`,eventbus:`Monitored by EventBus. Tool-before subscribers may provide context.`,none:`Before modifying any code, manually run these checks:`},beforeCommit:{native:`Hook auto-runs. Check+test+blast-radius run before every commit.`,eventbus:`No native pre-commit hooks on this platform. Validate manually:`,middleware:`No middleware-based pre-commit support. Validate manually:`,none:`Before committing changes, manually run these validations:`},sessionEnd:{native:`Auto-handled by hooks. Session-end hook persists checkpoints automatically.`,eventbus:`Tracked by EventBus. Stop subscribers fire on shutdown.`,middleware:`Automated by middleware. Handoff runs on session end.`,none:`Before ending a session (or at high context pressure), manually create a handoff:`}},p={sessionStart:`Session Start`,beforeCodeChange:`Before Code Change`,beforeCommit:`Before Commit`,sessionEnd:`Session End`},m=[`pinned`,`default`,`omit`];function h(e,t,n){if(!e)return``;let r=l.map(r=>{let i=e[r];if(!i)return``;let a=c[r],o=t&&a&&t[a]||`none`,s=f[r]||{},l=n?.[r];return d(i,p[r],o,s,l)}),i=u(t);return[...r,i].filter(Boolean).join(`
12
+ `).trimEnd()}function g(e,t){if(!e)return null;let n=typeof e==`function`?e(t):e[t];return n?typeof n==`string`?n:n.primary||n.model||null:null}function _(e,t){let n=!!t,r=[];for(let[i,a]of Object.entries(e))if(a.variants)for(let[e,o]of Object.entries(a.variants)){let s=`${i}-${e}`,c=[`| **${s}** | ${o.description} |`];n&&c.push(` ${g(t,s)||`—`} |`),c.push(` ${a.category||`—`} |`),r.push(c.join(``))}else{let e=[`| **${i}** | ${a.description} |`];n&&e.push(` ${g(t,i)||`—`} |`),e.push(` ${a.category||`—`} |`),r.push(e.join(``))}return n?`| Agent | Purpose | Model | Category |\n|-------|---------|-------|----------|\n${r.join(`
12
13
  `)}`:`| Agent | Purpose | Category |\n|-------|---------|----------|\n${r.join(`
13
- `)}`}function _(e){let t=[];for(let[n,r]of Object.entries(e)){if(n===`Orchestrator`)continue;let e=r.compactRole||r.description;if(r.variants){let i=Object.keys(r.variants);t.push(`| **${n}-${i.join(`/`)}** | ${e} |`)}else t.push(`| **${n}** | ${e} |`)}return`| Agent | Role |\n|-------|------|\n${t.join(`
14
- `)}`}function v({serverName:e,mcpEntry:t,configKey:n,extraServerFields:r}){let i={...t};return r&&Object.assign(i,r),JSON.stringify({[n]:{[e]:i}},null,2)}function y({flowTool:t=`flow`,isLifecycleOwner:n=!0}={}){let r=[`## Flows`,``,`This project uses aikit's pluggable flow system. Check flow status with the \`${t}\` MCP tool.`,``];return n?r.push(e({audience:`agent`}),``,`Use \`${t}({ action: 'list' })\` to see available flows and \`${t}({ action: 'start', name, topic })\` to begin one.`,``,`If a flow is active, follow the current step's skill instructions. Advance with \`${t}({ action: 'step', advance: 'next' })\`.`):r.push(`This project uses aikit's pluggable flow system. Use \`${t}({ action: 'status' })\` to check if a flow is active.`,`If dispatched as part of a flow, your work contributes to the current step. Do NOT advance or manage the flow — the Orchestrator handles flow lifecycle.`),r.join(`
15
- `)}function b({flowTool:e=`flow`}={}){return y({flowTool:e,isLifecycleOwner:!1})}const x=`You MUST follow the Orchestrator Protocol: decompose every task into subtasks, delegate via Task()/sub-agents, and synthesize results. You are an orchestrator, not an implementer. Never write code directly unless the change is trivially small (≤5 lines, one file) or you are fixing a sub-agent's output. When in doubt, delegate.`;function S(e){return[`# ${x}`,``,...e]}export{x as ORCHESTRATOR_DIRECTIVE,r as buildAgentPrompt,g as buildAgentTable,_ as buildCompactAgentTable,l as buildEventBusNote,y as buildFlowSection,m as buildHooksSection,i as buildInlineAgentSection,v as buildMcpConfigJson,a as buildPromptFile,o as buildPromptSections,n as buildSkillsSection,b as buildSubagentFlowSection,S as injectOrchestratorDirective,t as lowerFirst};
14
+ `)}`}function v(e){let t=[];for(let[n,r]of Object.entries(e)){if(n===`Orchestrator`)continue;let e=r.compactRole||r.description;if(r.variants){let i=Object.keys(r.variants);t.push(`| **${n}-${i.join(`/`)}** | ${e} |`)}else t.push(`| **${n}** | ${e} |`)}return`| Agent | Role |\n|-------|------|\n${t.join(`
15
+ `)}`}function y({serverName:e,mcpEntry:t,configKey:n,extraServerFields:r}){let i={...t};return r&&Object.assign(i,r),JSON.stringify({[n]:{[e]:i}},null,2)}function b({flowTool:t=`flow`,isLifecycleOwner:n=!0}={}){let r=[`## Flows`,``,`This project uses aikit's pluggable flow system. Check flow status with the \`${t}\` MCP tool.`,``];return n?r.push(e({audience:`agent`}),``,`Use \`${t}({ action: 'list' })\` to see available flows and \`${t}({ action: 'start', name, topic })\` to begin one.`,``,`If a flow is active, follow the current step's skill instructions. Advance with \`${t}({ action: 'step', advance: 'next' })\`.`):r.push(`This project uses aikit's pluggable flow system. Use \`${t}({ action: 'status' })\` to check if a flow is active.`,`If dispatched as part of a flow, your work contributes to the current step. Do NOT advance or manage the flow — the Orchestrator handles flow lifecycle.`),r.join(`
16
+ `)}function x({flowTool:e=`flow`}={}){return b({flowTool:e,isLifecycleOwner:!1})}const S=`You MUST follow the Orchestrator Protocol: decompose every task into subtasks, delegate via Task()/sub-agents, and synthesize results. You are an orchestrator, not an implementer. Never write code directly unless the change is trivially small (≤5 lines, one file) or you are fixing a sub-agent's output. When in doubt, delegate.`;function C(e){return[`# ${S}`,``,...e]}export{S as ORCHESTRATOR_DIRECTIVE,i as buildAgentPrompt,_ as buildAgentTable,v as buildCompactAgentTable,u as buildEventBusNote,b as buildFlowSection,h as buildHooksSection,a as buildInlineAgentSection,y as buildMcpConfigJson,o as buildPromptFile,s as buildPromptSections,r as buildSkillsSection,x as buildSubagentFlowSection,n as buildWorkspaceSkillSection,C as injectOrchestratorDirective,t as lowerFirst};
@@ -1,8 +1,8 @@
1
- import{AGENTS as e}from"../definitions/agents.mjs";import{AGENT_BODIES as t}from"../definitions/bodies.mjs";import{HOOKS as n}from"../definitions/hooks.mjs";import{SERVER_NAME as r}from"../definitions/mcp.mjs";import{getPlatformPrimaryModelMap as i}from"../definitions/models.mjs";import{PLATFORM_HOOK_CAPABILITIES as a}from"../definitions/platform-capabilities.mjs";import{PROMPTS as o}from"../definitions/prompts.mjs";import{AIKIT_INSTALL_HINT_SECTION as s,PLATFORM_OUTPUT_RULES_SECTION as c,PROTOCOLS as l}from"../definitions/protocols.mjs";import{AIKIT_TOOLS as u,CLAUDE_CODE_TOOL_MAP as d,IDE_CAPABILITIES as f}from"../definitions/tools.mjs";import{buildAgentTable as p,buildCompactAgentTable as m,buildFlowSection as h,buildHooksSection as g,buildSkillsSection as _,injectOrchestratorDirective as v,lowerFirst as y}from"./_shared.mjs";const b=h({flowTool:`flow`,isLifecycleOwner:!0}),x=h({flowTool:`flow`,isLifecycleOwner:!1});function S(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/[^a-zA-Z0-9]+/g,`-`).replace(/^-+|-+$/g,``).toLowerCase()}function C(e){return`"${String(e).replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function w(e){let t=(f[e]||[]).flatMap(e=>d[e]||[]),n=u.map(e=>`mcp__${r.toLowerCase().replace(/[^a-z0-9]/g,``)}__${e}`);return[...new Set([...t,...n])].sort((e,t)=>e.localeCompare(t))}function T(e,t){let n=[];return n.push(`# ${r} ${e}`),n.push(``),t.description&&(n.push(`> ${t.description}`),n.push(``)),n.push(t.content.trim()),n.push(``),n.join(`
2
- `)}function E(e,n){let r=t[e];return typeof r==`function`?r(n):r||``}function D(e){let t=[];e.extraBody&&t.push(e.extraBody),e.sharedBase&&l[e.sharedBase]&&t.push(l[e.sharedBase]);for(let n of e.sharedProtocols||[])l[n]&&t.push(l[n]);return t}function O(){let t=[];for(let[n,r]of Object.entries(e)){if(r.variants){for(let[e,i]of Object.entries(r.variants))t.push({name:`${n}-${e}`,description:i.description||r.description});continue}t.push({name:n,description:r.description})}return t}function k(e){return O().map(({name:t,description:n})=>`- \`${e}/${t}.md\` — ${n}`).join(`
3
- `)}function A(t=p(e,i(`claude-code`))){return[`# ${r} — Claude Code Agents`,``,c,``,s,``,`## MCP Server`,``,`Server name: \`${r}\``,"Configured in `.mcp.json` (project) and `~/.claude.json` (user-global — `claude mcp add --scope user` format).","Default agent: `Orchestrator` in `~/.claude/settings.json` — every conversation starts as Orchestrator automatically.",``,`## Agents`,``,t,``,`## Agent Files`,``,k(`.claude/agents`),``,`## Commands`,``,"Slash commands live under `.claude/commands/`.",``,`## Session Protocol`,``,g(n,a[`claude-code`]),``].join(`
4
- `)}function j(){return v([`# ${r} — Claude Code Instructions`,``,"Detailed workspace instructions live in `AGENTS.md`.","Full sub-agent instructions live in `.claude/agents/`.","Slash commands live in `.claude/commands/`.","MCP server config lives in `.mcp.json` (project) and `~/.claude.json` (user-global — written by `claude mcp add --scope user`).","Default agent set to `Orchestrator` in `~/.claude/settings.json` — every conversation starts as Orchestrator, no `/agent` command needed.",``,"Start with `AGENTS.md`, then open the specific sub-agent file you want to use.",``,c,``,s,``]).join(`
5
- `)}function M(e,t,n,i,a){let o=w(t.toolRole),s=D(t),c=_(t.skills),l=e===`Orchestrator`?[b]:[x],u=[n,...s,t.bodyAddendum,c,...l].filter(Boolean).join(`
1
+ import{AGENTS as e}from"../definitions/agents.mjs";import{AGENT_BODIES as t}from"../definitions/bodies.mjs";import{HOOKS as n}from"../definitions/hooks.mjs";import{SERVER_NAME as r}from"../definitions/mcp.mjs";import{getPlatformPrimaryModelMap as i}from"../definitions/models.mjs";import{PLATFORM_HOOK_CAPABILITIES as a}from"../definitions/platform-capabilities.mjs";import{PROMPTS as o}from"../definitions/prompts.mjs";import{AIKIT_INSTALL_HINT_SECTION as s,PLATFORM_OUTPUT_RULES_SECTION as c,PROTOCOLS as l}from"../definitions/protocols.mjs";import{AIKIT_TOOLS as u,CLAUDE_CODE_TOOL_MAP as d,IDE_CAPABILITIES as f}from"../definitions/tools.mjs";import{buildAgentTable as p,buildCompactAgentTable as m,buildFlowSection as h,buildHooksSection as g,buildSkillsSection as _,buildWorkspaceSkillSection as v,injectOrchestratorDirective as y,lowerFirst as b}from"./_shared.mjs";const x=h({flowTool:`flow`,isLifecycleOwner:!0}),S=h({flowTool:`flow`,isLifecycleOwner:!1});function C(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/[^a-zA-Z0-9]+/g,`-`).replace(/^-+|-+$/g,``).toLowerCase()}function w(e){return`"${String(e).replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function T(e){let t=(f[e]||[]).flatMap(e=>d[e]||[]),n=u.map(e=>`mcp__${r.toLowerCase().replace(/[^a-z0-9]/g,``)}__${e}`);return[...new Set([...t,...n])].sort((e,t)=>e.localeCompare(t))}function E(e,t){let n=[];return n.push(`# ${r} ${e}`),n.push(``),t.description&&(n.push(`> ${t.description}`),n.push(``)),n.push(t.content.trim()),n.push(``),n.join(`
2
+ `)}function D(e,n){let r=t[e];return typeof r==`function`?r(n):r||``}function O(e){let t=[];e.extraBody&&t.push(e.extraBody),e.sharedBase&&l[e.sharedBase]&&t.push(l[e.sharedBase]);for(let n of e.sharedProtocols||[])l[n]&&t.push(l[n]);return t}function k(){let t=[];for(let[n,r]of Object.entries(e)){if(r.variants){for(let[e,i]of Object.entries(r.variants))t.push({name:`${n}-${e}`,description:i.description||r.description});continue}t.push({name:n,description:r.description})}return t}function A(e){return k().map(({name:t,description:n})=>`- \`${e}/${t}.md\` — ${n}`).join(`
3
+ `)}function j(t=p(e,i(`claude-code`))){return[`# ${r} — Claude Code Agents`,``,c,``,s,``,`## MCP Server`,``,`Server name: \`${r}\``,"Configured in `.mcp.json` (project) and `~/.claude.json` (user-global — `claude mcp add --scope user` format).","Default agent: `Orchestrator` in `~/.claude/settings.json` — every conversation starts as Orchestrator automatically.",``,`## Agents`,``,t,``,`## Agent Files`,``,A(`.claude/agents`),``,`## Commands`,``,"Slash commands live under `.claude/commands/`.",``,`## Session Protocol`,``,g(n,a[`claude-code`]),``].join(`
4
+ `)}function M(){return y([`# ${r} — Claude Code Instructions`,``,"Detailed workspace instructions live in `AGENTS.md`.","Full sub-agent instructions live in `.claude/agents/`.","Slash commands live in `.claude/commands/`.","MCP server config lives in `.mcp.json` (project) and `~/.claude.json` (user-global — written by `claude mcp add --scope user`).","Default agent set to `Orchestrator` in `~/.claude/settings.json` — every conversation starts as Orchestrator, no `/agent` command needed.",``,"Start with `AGENTS.md`, then open the specific sub-agent file you want to use.",``,c,``,s,``,v(),``]).join(`
5
+ `)}function N(e,t,n,i,a){let o=T(t.toolRole),s=O(t),c=_(t.skills),l=e===`Orchestrator`?[x]:[S],u=[n,...s,t.bodyAddendum,c,...l].filter(Boolean).join(`
6
6
 
7
- `).trim(),d=t.identity?`You are the **${e}**${t.identity}`:`You are the **${e}**, ${y(t.description)}.`,f=a?.[e],p=o.length>0?`tools: [${o.join(`, `)}]`:null,m=t.skills?.length>0?`skills: [${t.skills.map(([e])=>e).join(`, `)}]`:null,h=[`---`,`name: ${S(e)}`,`description: ${C(t.description)}`,...f?[`model: ${C(f)}`]:[],...p?[p]:[],`mcpServers:`,` - ${r}`,...m?[m]:[],`---`,``,`# ${e} - ${t.title||e}`,``,d];return u&&h.push(``,u),h.push(``),h.join(`
8
- `)}function N(){let t=[],n=i(`claude-code`),r=p(e,n),a=m(e);t.push({path:`CLAUDE.md`,content:j()}),t.push({path:`AGENTS.md`,content:A(r)});for(let[e,n]of Object.entries(o))t.push({path:`.claude/commands/aikit-${e}.md`,content:T(e,n)});for(let[i,o]of Object.entries(e)){let e=E(i,a);if(o.variants){for(let[a,s]of Object.entries(o.variants)){let c=`${i}-${a}`;t.push({path:`.claude/agents/${c}.md`,content:M(c,{...o,description:s.description||o.description,identity:s.identity,bodyAddendum:s.bodyAddendum},e,r,n)})}continue}t.push({path:`.claude/agents/${i}.md`,content:M(i,o,e,r,n)})}return t}export{b as CLAUDE_FLOWS_SECTION,N as generateClaudeCode};
7
+ `).trim(),d=t.identity?`You are the **${e}**${t.identity}`:`You are the **${e}**, ${b(t.description)}.`,f=a?.[e],p=o.length>0?`tools: [${o.join(`, `)}]`:null,m=t.skills?.length>0?`skills: [${t.skills.map(([e])=>e).join(`, `)}]`:null,h=[`---`,`name: ${C(e)}`,`description: ${w(t.description)}`,...f?[`model: ${w(f)}`]:[],...p?[p]:[],`mcpServers:`,` - ${r}`,...m?[m]:[],`---`,``,`# ${e} - ${t.title||e}`,``,d];return u&&h.push(``,u),h.push(``),h.join(`
8
+ `)}function P(){let t=[],n=i(`claude-code`),r=p(e,n),a=m(e);t.push({path:`CLAUDE.md`,content:M()}),t.push({path:`AGENTS.md`,content:j(r)});for(let[e,n]of Object.entries(o))t.push({path:`.claude/commands/aikit-${e}.md`,content:E(e,n)});for(let[i,o]of Object.entries(e)){let e=D(i,a);if(o.variants){for(let[a,s]of Object.entries(o.variants)){let c=`${i}-${a}`;t.push({path:`.claude/agents/${c}.md`,content:N(c,{...o,description:s.description||o.description,identity:s.identity,bodyAddendum:s.bodyAddendum},e,r,n)})}continue}t.push({path:`.claude/agents/${i}.md`,content:N(i,o,e,r,n)})}return t}export{x as CLAUDE_FLOWS_SECTION,P as generateClaudeCode};
@@ -1,8 +1,8 @@
1
- import{AGENTS as e}from"../definitions/agents.mjs";import{AGENT_BODIES as t}from"../definitions/bodies.mjs";import{VARIANT_GROUPS as n,getPrimaryAgentModel as r}from"../definitions/models.mjs";import{PROMPTS as i}from"../definitions/prompts.mjs";import{AIKIT_INSTALL_HINT_SECTION as a,PLATFORM_OUTPUT_RULES_SECTION as o,PROTOCOLS as s,TEMPLATES as c}from"../definitions/protocols.mjs";import{IDE_CAPABILITIES as l}from"../definitions/tools.mjs";import{buildCompactAgentTable as u,buildFlowSection as d,buildSubagentFlowSection as f,injectOrchestratorDirective as p}from"./_shared.mjs";import{generateForbiddenTable as m}from"../definitions/policies.mjs";import{generateHooks as h,getHookScriptFiles as g}from"./hooks.mjs";const _={terminal:`execute/runInTerminal`,problems:`read/problems`,readFile:`read/readFile`,lastCommand:`read/terminalLastCommand`,subagent:`agent/runSubagent`,createFile:`edit/createFile`,editFiles:`edit/editFiles`,rename:`edit/rename`,createDirectory:`edit/createDirectory`,search:`search/changes, search/codebase, search/usages`,web:`web/fetch, web/githubRepo`,todo:`todo`,memory:`vscode/memory`,newWorkspace:`vscode/newWorkspace`,reviewPlan:`vscode/reviewPlan`,askQuestions:`vscode/askQuestions`,resolveMemoryFileUri:`vscode/resolveMemoryFileUri`,runCommand:`vscode/runCommand`,switchAgent:`vscode/switchAgent`,killTerminal:`execute/killTerminal`,createTask:`execute/createAndRunTask`,terminalSel:`read/terminalSelection`,fileSearch:`search/fileSearch`,listDir:`search/listDirectory`,textSearch:`search/textSearch`,searchSubagent:`search/searchSubagent`};function v(e){return`[${[...(l[e]||[]).map(e=>_[e]).filter(Boolean),`aikit/*`].join(`, `)}]`}function y(e){return r(`copilot`,e,`Auto (copilot)`)}const b=d({flowTool:`flow`,isLifecycleOwner:!0}),x=f({flowTool:`flow`});function S(){let t=[];for(let[i,a]of Object.entries(e))if(a.variants)for(let e of n[i]||[]){let n=`${i}-${e}`,o=r(`copilot`,n,`Unknown`),s=(a.variants[e]||{}).description||a.description;t.push(`| **${n}** | ${s} | ${o} | ${a.category} |`)}else{let e=r(`copilot`,i,`Unknown`);t.push(`| **${i}** | ${a.description} | ${e} | ${a.category} |`)}return`| Agent | Purpose | Model | Category |\n|-------|---------|-------|----------|\n${t.join(`
2
- `)}`}function C(e,t,r){let i=`${e}-${t}`,a=r.variants[t]||{},o=y(i),c=a.description||r.description,l=a.identity||(t===n[e]?.[0]?`, the primary ${e} agent.`:`, a variant of ${e}. Same responsibilities, different model perspective.`),u=r.sharedBase&&s[r.sharedBase]?`\n\n${s[r.sharedBase]}`:``,d=r.extraBody?`\n\n${r.extraBody}`:``,f=a.bodyAddendum?`\n\n${a.bodyAddendum}`:``,p=(r.sharedProtocols||[]).map(e=>s[e]?`\n\n${s[e]}`:``).join(``),m=r.skills?.length?`\n\n## Skills (load on demand)\n\n| Skill | When to load |\n|-------|--------------|\n${r.skills.map(([e,t])=>`| ${e} | ${t} |`).join(`
1
+ import{AGENTS as e}from"../definitions/agents.mjs";import{AGENT_BODIES as t}from"../definitions/bodies.mjs";import{VARIANT_GROUPS as n,getPrimaryAgentModel as r}from"../definitions/models.mjs";import{PROMPTS as i}from"../definitions/prompts.mjs";import{AIKIT_INSTALL_HINT_SECTION as a,PLATFORM_OUTPUT_RULES_SECTION as o,PROTOCOLS as s,TEMPLATES as c}from"../definitions/protocols.mjs";import{IDE_CAPABILITIES as l}from"../definitions/tools.mjs";import{buildCompactAgentTable as u,buildFlowSection as d,buildSubagentFlowSection as f,buildWorkspaceSkillSection as p,injectOrchestratorDirective as m}from"./_shared.mjs";import{generateForbiddenTable as h}from"../definitions/policies.mjs";import{generateHooks as g,getHookScriptFiles as _}from"./hooks.mjs";const v={terminal:`execute/runInTerminal`,problems:`read/problems`,readFile:`read/readFile`,lastCommand:`read/terminalLastCommand`,subagent:`agent/runSubagent`,createFile:`edit/createFile`,editFiles:`edit/editFiles`,rename:`edit/rename`,createDirectory:`edit/createDirectory`,search:`search/changes, search/codebase, search/usages`,web:`web/fetch, web/githubRepo`,todo:`todo`,memory:`vscode/memory`,newWorkspace:`vscode/newWorkspace`,reviewPlan:`vscode/reviewPlan`,askQuestions:`vscode/askQuestions`,resolveMemoryFileUri:`vscode/resolveMemoryFileUri`,runCommand:`vscode/runCommand`,switchAgent:`vscode/switchAgent`,killTerminal:`execute/killTerminal`,createTask:`execute/createAndRunTask`,terminalSel:`read/terminalSelection`,fileSearch:`search/fileSearch`,listDir:`search/listDirectory`,textSearch:`search/textSearch`,searchSubagent:`search/searchSubagent`};function y(e){return`[${[...(l[e]||[]).map(e=>v[e]).filter(Boolean),`aikit/*`].join(`, `)}]`}function b(e){return r(`copilot`,e,`Auto (copilot)`)}const x=d({flowTool:`flow`,isLifecycleOwner:!0}),S=f({flowTool:`flow`});function C(){let t=[];for(let[i,a]of Object.entries(e))if(a.variants)for(let e of n[i]||[]){let n=`${i}-${e}`,o=r(`copilot`,n,`Unknown`),s=(a.variants[e]||{}).description||a.description;t.push(`| **${n}** | ${s} | ${o} | ${a.category} |`)}else{let e=r(`copilot`,i,`Unknown`);t.push(`| **${i}** | ${a.description} | ${e} | ${a.category} |`)}return`| Agent | Purpose | Model | Category |\n|-------|---------|-------|----------|\n${t.join(`
2
+ `)}`}function w(e,t,r){let i=`${e}-${t}`,a=r.variants[t]||{},o=b(i),c=a.description||r.description,l=a.identity||(t===n[e]?.[0]?`, the primary ${e} agent.`:`, a variant of ${e}. Same responsibilities, different model perspective.`),u=r.sharedBase&&s[r.sharedBase]?`\n\n${s[r.sharedBase]}`:``,d=r.extraBody?`\n\n${r.extraBody}`:``,f=a.bodyAddendum?`\n\n${a.bodyAddendum}`:``,p=(r.sharedProtocols||[]).map(e=>s[e]?`\n\n${s[e]}`:``).join(``),m=r.skills?.length?`\n\n## Skills (load on demand)\n\n| Skill | When to load |\n|-------|--------------|\n${r.skills.map(([e,t])=>`| ${e} | ${t} |`).join(`
3
3
  `)}`:``,h=r.title||e;return`---
4
4
  description: '${c}'
5
- ${r.argumentHint?`argument-hint: "${r.argumentHint}"\n`:``}tools: ${v(r.toolRole)}
5
+ ${r.argumentHint?`argument-hint: "${r.argumentHint}"\n`:``}tools: ${y(r.toolRole)}
6
6
  model: ${o}
7
7
  ---
8
8
 
@@ -11,11 +11,11 @@ model: ${o}
11
11
  You are **${i}**${l}${d}
12
12
  ${u}${p}${f}${m}
13
13
 
14
- ${x}
15
- `}function w(n,r){let i=y(n),a=typeof t[n]==`function`?t[n](u(e)):t[n]||``,o=r.sharedBase&&s[r.sharedBase]?`\n\n${s[r.sharedBase]}`:``,c=(r.sharedProtocols||[]).map(e=>s[e]?`\n\n${s[e]}`:``).join(``),l=r.title||n,d=r.skills?.length?`\n## Skills (load on demand)\n\n| Skill | When to load |\n|-------|--------------|\n${r.skills.map(([e,t])=>`| ${e} | ${t} |`).join(`
14
+ ${S}
15
+ `}function T(n,r){let i=b(n),a=typeof t[n]==`function`?t[n](u(e)):t[n]||``,o=r.sharedBase&&s[r.sharedBase]?`\n\n${s[r.sharedBase]}`:``,c=(r.sharedProtocols||[]).map(e=>s[e]?`\n\n${s[e]}`:``).join(``),l=r.title||n,d=r.skills?.length?`\n## Skills (load on demand)\n\n| Skill | When to load |\n|-------|--------------|\n${r.skills.map(([e,t])=>`| ${e} | ${t} |`).join(`
16
16
  `)}\n`:``;return`---
17
17
  description: '${r.description}'
18
- ${r.argumentHint?`argument-hint: "${r.argumentHint}"\n`:``}tools: ${v(r.toolRole)}
18
+ ${r.argumentHint?`argument-hint: "${r.argumentHint}"\n`:``}tools: ${y(r.toolRole)}
19
19
  model: ${i}
20
20
  ---
21
21
 
@@ -25,20 +25,20 @@ You are the **${n}**, ${r.description.toLowerCase().replace(/^./,e=>e.toLowerCas
25
25
 
26
26
  ${a}${o}${c}${d}
27
27
 
28
- ${n===`Orchestrator`?b:x}
29
- `}function T(e,t){return`---
28
+ ${n===`Orchestrator`?x:S}
29
+ `}function E(e,t){return`---
30
30
  description: "${t.description}"
31
31
  agent: "${t.agent}"
32
32
  ---
33
33
 
34
34
  ${t.content}
35
- `}function E(){return`# Agents
35
+ `}function D(){return`# Agents
36
36
 
37
37
  This directory contains AI agent definitions generated by \`@vpxa/aikit init\`.
38
38
 
39
39
  ## Agent Roster
40
40
 
41
- ${S()}
41
+ ${C()}
42
42
 
43
43
  ## Multi-Model Pattern
44
44
 
@@ -64,5 +64,5 @@ To regenerate after changing models or agent definitions:
64
64
  cd knowledge-base
65
65
  node scaffold/generate.mjs
66
66
  \`\`\`
67
- `}function D(){return p([`# AI Kit — Copilot Instructions`,``,"This file is generated from `scaffold/definitions/`. Do not edit directly.",``,o,``,`## Tool Routing Rules`,``,`These rules are enforced by AI Kit compliance checking. Violations are flagged in reports and reduce your compliance score.`,``,m(),``,a,``]).join(`
68
- `)}function O(){let t=[];if(g().length===0)throw Error(`Executable hooks are not configured.`);t.push({path:`copilot-instructions.md`,content:D()});for(let[r,i]of Object.entries(e))if(i.variants)for(let e of n[r]||[])t.push({path:`agents/${r}-${e}.agent.md`,content:C(r,e,i)});else t.push({path:`agents/${r}.agent.md`,content:w(r,i)});for(let[e,n]of Object.entries(c))t.push({path:`agents/templates/${e}.md`,content:`${n}\n`});t.push({path:`agents/README.md`,content:E()});for(let[e,n]of Object.entries(i))t.push({path:`prompts/aikit-${e}.prompt.md`,content:T(e,n)});let r=h(`copilot`,`~/.copilot/hooks/scripts`);return t.push(...r.map(e=>({path:`hooks/${e.path}`,content:e.content}))),t}export{O as generateCopilot};
67
+ `}function O(){return m([`# AI Kit — Copilot Instructions`,``,"This file is generated from `scaffold/definitions/`. Do not edit directly.",``,o,``,`## Tool Routing Rules`,``,`These rules are enforced by AI Kit compliance checking. Violations are flagged in reports and reduce your compliance score.`,``,h(),``,a,``,p(),``]).join(`
68
+ `)}function k(){let t=[];if(_().length===0)throw Error(`Executable hooks are not configured.`);t.push({path:`copilot-instructions.md`,content:O()});for(let[r,i]of Object.entries(e))if(i.variants)for(let e of n[r]||[])t.push({path:`agents/${r}-${e}.agent.md`,content:w(r,e,i)});else t.push({path:`agents/${r}.agent.md`,content:T(r,i)});for(let[e,n]of Object.entries(c))t.push({path:`agents/templates/${e}.md`,content:`${n}\n`});t.push({path:`agents/README.md`,content:D()});for(let[e,n]of Object.entries(i))t.push({path:`prompts/aikit-${e}.prompt.md`,content:E(e,n)});let r=g(`copilot`,`~/.copilot/hooks/scripts`);return t.push(...r.map(e=>({path:`hooks/${e.path}`,content:e.content}))),t}export{k as generateCopilot};
@@ -1,4 +1,4 @@
1
- import{AGENTS as e}from"../definitions/agents.mjs";import{AGENT_BODIES as t}from"../definitions/bodies.mjs";import{HOOKS as n}from"../definitions/hooks.mjs";import{VARIANT_GROUPS as r,getPrimaryAgentModel as i}from"../definitions/models.mjs";import{PLATFORM_HOOK_CAPABILITIES as a}from"../definitions/platform-capabilities.mjs";import{PROMPTS as o}from"../definitions/prompts.mjs";import{PROTOCOLS as s,TEMPLATES as c}from"../definitions/protocols.mjs";import{IDE_CAPABILITIES as l}from"../definitions/tools.mjs";import{buildAgentTable as u,buildCompactAgentTable as d,buildFlowSection as f,buildHooksSection as p,buildPromptSections as m,buildSkillsSection as h,injectOrchestratorDirective as g,lowerFirst as _}from"./_shared.mjs";import{generateHooks as v,getHookScriptFiles as y}from"./hooks.mjs";const b=f({flowTool:`flow`,isLifecycleOwner:!0}),x=f({flowTool:`flow`,isLifecycleOwner:!1});function S(e,n){let r=t[e];return typeof r==`function`?r(n):r||``}function C(e){let t=[];e.extraBody&&t.push(e.extraBody),e.sharedBase&&s[e.sharedBase]&&t.push(s[e.sharedBase]);for(let n of e.sharedProtocols||[])s[n]&&t.push(s[n]);return t}const w={terminal:`terminal`,problems:`mcp_aikit_check`,readFile:`read_file`,lastCommand:`terminal`,subagent:`delegate_task`,createFile:`write_file`,editFiles:`patch`,rename:`write_file`,createDirectory:`terminal(mkdir)`,search:`search_files, mcp_aikit_search, mcp_aikit_find`,web:`web_search, web_extract, mcp_aikit_web_search, mcp_aikit_web_fetch`,todo:`todo`,memory:`memory`,newWorkspace:`terminal(cd)`,reviewPlan:`clarify`,askQuestions:`clarify`,resolveMemoryFileUri:`read_file`,runCommand:`terminal`,switchAgent:`delegate_task`,killTerminal:`process(kill)`,createTask:`todo`,terminalSel:`terminal`,fileSearch:`search_files`,listDir:`search_files(target=files)`,textSearch:`search_files(target=content)`,searchSubagent:`delegate_task`,browser:`mcp_aikit_browser, browser_navigate`};function T(e){let t=(l[e]||[]).map(e=>{let t=w[e];return t?t.split(`,`).map(e=>e.trim()):null}).filter(Boolean).flat();return`[${[...new Set(t),`aikit/*`].join(`, `)}]`}function E(e){return i(`hermes`,e,`Auto (hermes)`)}function D(e){let t=[[/`runSubagent`/g,"`delegate_task`"],[/`runSubagent\(/g,"`delegate_task("],[/\brunSubagent\b/g,`delegate_task`],[/`editFiles`/g,"`patch`"],[/`createFile`/g,"`write_file`"],[/`edit\/createFile`/g,"`write_file`"],[/`edit\/editFiles`/g,"`patch`"],[/`run_in_terminal`/g,"`terminal`"],[/`execute\/runInTerminal`/g,"`terminal`"],[/`execute\/killTerminal`/g,"`process(kill)`"],[/`grep_search`/g,"`search_files`"],[/`search\/codebase`/g,"`mcp_aikit_search`"],[/`search\/changes`/g,"`search_files`"],[/`search\/usages`/g,"`mcp_aikit_symbol` / `mcp_aikit_trace`"],[/`search\/textSearch`/g,"`search_files`"],[/`search\/searchSubagent`/g,"`delegate_task`"],[/`web\/fetch`/g,"`web_extract` / `mcp_aikit_web_fetch`"],[/`web\/githubRepo`/g,"`terminal(git ...)`"],[/`web\/webSearch`/g,"`web_search` / `mcp_aikit_web_search`"],[/`vscode\/memory`/g,"`memory`"],[/`vscode\/runCommand`/g,"`terminal`"],[/`vscode\/switchAgent`/g,"`delegate_task`"],[/`vscode\/newWorkspace`/g,"`terminal(cd)`"],[/`vscode\/reviewPlan`/g,"`clarify`"],[/`vscode\/askQuestions`/g,"`clarify`"],[/`vscode\/resolveMemoryFileUri`/g,"`read_file`"],[/`read\/readFile`/g,"`read_file`"],[/`read\/terminalLastCommand`/g,"`terminal`"],[/`read\/terminalSelection`/g,"`terminal`"],[/`read\/problems`/g,"`mcp_aikit_check`"],[/`agent\/runSubagent`/g,"`delegate_task`"],[/`execute\/createAndRunTask`/g,"`todo` / `delegate_task`"],[/`read_file` \(for understanding\)/g,"`read_file` (Hermes)"],[/(copilot)/g,`(hermes)`],[/runSubagent\(\{agentName:/g,`delegate_task({goal:`],[/runSubagent\(\{/g,`delegate_task({`]],n=e;for(let[e,r]of t)n=n.replace(e,r);return n}function O(){let t=u(e),r=d(e),i=m(o),s=[];for(let[t,n]of Object.entries(e)){let e=S(t,r);if(n.variants){for(let[r,i]of Object.entries(n.variants)){let a=`${t}-${r}`;s.push(k(a,{...n,description:i.description||n.description,identity:i.identity,bodyAddendum:i.bodyAddendum},e))}continue}s.push(k(t,n,e))}return g([`# AI Kit — Hermes Agent Instructions`,``,"This project uses **AI Kit** (`@vpxa/aikit`), a local-first MCP server that provides search,",`code analysis, persistent memory, context compression, and guided development flows.`,``,`The AI Kit MCP server is registered in your Hermes config and its 64 tools are available`,"as `mcp_aikit_*` tool calls in every conversation.",``,`## MCP Server`,``,"Server name: `AI Kit`","Configured via `hermes mcp add` (user-level). Tools are auto-discovered at session start.",``,`## Skills-First Rule`,``,`**Before starting ANY task, check available skills.** If a skill matches your task domain`,`— load it first. Skills contain domain-specific patterns, templates, and constraints.`,``,`## Available Tools (64)`,``,`AI Kit provides tools across the following categories:`,``,`| Category | Tools |`,`|----------|-------|`,"| **Search & Discovery** | `search`, `find`, `symbol`, `trace`, `lookup`, `scope_map`, `file_summary`, `dead_symbols` |","| **Code Analysis** | `analyze`, `blast_radius`, `audit`, `graph`, `health`, `check` |","| **Context Compression** | `file_summary`, `digest` |","| **Memory & Knowledge** | `knowledge`, `remember`, `read`, `update`, `forget`, `list`, `stash` |","| **FORGE Quality Gates** | `forge_classify`, `forge_ground`, `evidence_map`, `compliance_score` |","| **Development Workflows** | `flow`, `onboard`, `reindex`, `status`, `guide`, `config` |","| **Testing & Build** | `test_run`, `parse_output`, `check`, `eval` |","| **Code Manipulation** | `rename`, `codemod`, `data_transform`, `diff_parse`, `git_context`, `replay` |","| **Web & HTTP** | `web_search`, `web_fetch`, `http` |","| **Present & Visualize** | `present`, `signal`, `session_digest` |","| **Sandbox & Process** | `process`, `watch`, `workset`, `lane`, `queue`, `restore`, `delegate` |","| **Utilities** | `encode`, `regex_test`, `measure`, `changelog`, `schema_validate`, `env`, `time` |","| **Browser** | `browser` |",``,`## Important: Prefer AI Kit Tools Over Generic Shell Commands`,``,`When working in this project, use AI Kit MCP tools instead of generic alternatives:`,``,`| Instead of | Use AI Kit Tool | Why |`,`|-----------|----------------|-----|`,"| `grep` / `rg` | `mcp_aikit_search` or `mcp_aikit_find` | Hybrid search (vector + keyword + BM25) across all indexed content |","| `read_file` for understanding | `mcp_aikit_file_summary` | T1=structure, T2=structure+content — 10x fewer tokens than raw file reads |","| `cd` + `ls` | `mcp_aikit_analyze` | Structural analysis with tree views |","| Running tests in terminal | `mcp_aikit_test_run` | Structured test output — no shell needed |","| `tsc` / `biome` in terminal | `mcp_aikit_check` | Typecheck + lint combined |","| Web search | `mcp_aikit_web_search` | Fans out to multiple keyless providers |",``,`## Agents`,``,t,``,`## Agent Instructions`,``,s.join(`
1
+ import{AGENTS as e}from"../definitions/agents.mjs";import{AGENT_BODIES as t}from"../definitions/bodies.mjs";import{HOOKS as n}from"../definitions/hooks.mjs";import{VARIANT_GROUPS as r,getPrimaryAgentModel as i}from"../definitions/models.mjs";import{PLATFORM_HOOK_CAPABILITIES as a}from"../definitions/platform-capabilities.mjs";import{PROMPTS as o}from"../definitions/prompts.mjs";import{PROTOCOLS as s,TEMPLATES as c}from"../definitions/protocols.mjs";import{IDE_CAPABILITIES as l}from"../definitions/tools.mjs";import{buildAgentTable as u,buildCompactAgentTable as d,buildFlowSection as f,buildHooksSection as p,buildPromptSections as m,buildSkillsSection as h,injectOrchestratorDirective as g,lowerFirst as _}from"./_shared.mjs";import{generateHooks as v,getHookScriptFiles as y}from"./hooks.mjs";const b=f({flowTool:`flow`,isLifecycleOwner:!0}),x=f({flowTool:`flow`,isLifecycleOwner:!1});function S(e,n){let r=t[e];return typeof r==`function`?r(n):r||``}function C(e){let t=[];e.extraBody&&t.push(e.extraBody),e.sharedBase&&s[e.sharedBase]&&t.push(s[e.sharedBase]);for(let n of e.sharedProtocols||[])s[n]&&t.push(s[n]);return t}const w={terminal:`terminal`,problems:`mcp_aikit_check`,readFile:`read_file`,lastCommand:`terminal`,subagent:`delegate_task`,createFile:`write_file`,editFiles:`patch`,rename:`write_file`,createDirectory:`terminal(mkdir)`,search:`search_files, mcp_aikit_search, mcp_aikit_find`,web:`web_search, web_extract, mcp_aikit_web_search, mcp_aikit_web_fetch`,todo:`todo`,memory:`memory`,newWorkspace:`terminal(cd)`,reviewPlan:`clarify`,askQuestions:`clarify`,resolveMemoryFileUri:`read_file`,runCommand:`terminal`,switchAgent:`delegate_task`,killTerminal:`process(kill)`,createTask:`todo`,terminalSel:`terminal`,fileSearch:`search_files`,listDir:`search_files(target=files)`,textSearch:`search_files(target=content)`,searchSubagent:`delegate_task`,browser:`mcp_aikit_browser, browser_navigate`};function T(e){let t=(l[e]||[]).map(e=>{let t=w[e];return t?t.split(`,`).map(e=>e.trim()):null}).filter(Boolean).flat();return`[${[...new Set(t),`aikit/*`].join(`, `)}]`}function E(e){return i(`hermes`,e,`Auto (hermes)`)}function D(e){let t=[[/`runSubagent`/g,"`delegate_task`"],[/`runSubagent\(/g,"`delegate_task("],[/\brunSubagent\b/g,`delegate_task`],[/`editFiles`/g,"`patch`"],[/`createFile`/g,"`write_file`"],[/`edit\/createFile`/g,"`write_file`"],[/`edit\/editFiles`/g,"`patch`"],[/`run_in_terminal`/g,"`terminal`"],[/`execute\/runInTerminal`/g,"`terminal`"],[/`execute\/killTerminal`/g,"`process(kill)`"],[/`grep_search`/g,"`search_files`"],[/`search\/codebase`/g,"`mcp_aikit_search`"],[/`search\/changes`/g,"`search_files`"],[/`search\/usages`/g,"`mcp_aikit_symbol` / `mcp_aikit_trace`"],[/`search\/textSearch`/g,"`search_files`"],[/`search\/searchSubagent`/g,"`delegate_task`"],[/`web\/fetch`/g,"`web_extract` / `mcp_aikit_web_fetch`"],[/`web\/githubRepo`/g,"`terminal(git ...)`"],[/`web\/webSearch`/g,"`web_search` / `mcp_aikit_web_search`"],[/`vscode\/memory`/g,"`memory`"],[/`vscode\/runCommand`/g,"`terminal`"],[/`vscode\/switchAgent`/g,"`delegate_task`"],[/`vscode\/newWorkspace`/g,"`terminal(cd)`"],[/`vscode\/reviewPlan`/g,"`clarify`"],[/`vscode\/askQuestions`/g,"`clarify`"],[/`vscode\/resolveMemoryFileUri`/g,"`read_file`"],[/`read\/readFile`/g,"`read_file`"],[/`read\/terminalLastCommand`/g,"`terminal`"],[/`read\/terminalSelection`/g,"`terminal`"],[/`read\/problems`/g,"`mcp_aikit_check`"],[/`agent\/runSubagent`/g,"`delegate_task`"],[/`execute\/createAndRunTask`/g,"`todo` / `delegate_task`"],[/`read_file` \(for understanding\)/g,"`read_file` (Hermes)"],[/(copilot)/g,`(hermes)`],[/runSubagent\(\{agentName:/g,`delegate_task({goal:`],[/runSubagent\(\{/g,`delegate_task({`]],n=e;for(let[e,r]of t)n=n.replace(e,r);return n}function O(){let t=u(e),r=d(e),i=m(o),s=[];for(let[t,n]of Object.entries(e)){let e=S(t,r);if(n.variants){for(let[r,i]of Object.entries(n.variants)){let a=`${t}-${r}`;s.push(k(a,{...n,description:i.description||n.description,identity:i.identity,bodyAddendum:i.bodyAddendum},e))}continue}s.push(k(t,n,e))}return g([`# AI Kit — Hermes Agent Instructions`,``,"This project uses **AI Kit** (`@vpxa/aikit`), a local-first MCP server that provides search,",`code analysis, persistent memory, context compression, and guided development flows.`,``,`The AI Kit MCP server is registered in your Hermes config and its 52 tools are available`,"as `mcp_aikit_*` tool calls in every conversation.",``,`## MCP Server`,``,"Server name: `AI Kit`","Configured via `hermes mcp add` (user-level). Tools are auto-discovered at session start.",``,`## Skills-First Rule`,``,`**Before starting ANY task, check available skills.** If a skill matches your task domain`,`— load it first. Skills contain domain-specific patterns, templates, and constraints.`,``,`## Workspace Skill`,``,`This project has an auto-generated workspace skill that tracks conventions, known issues,`,`and workflow tips for this specific codebase. Load it at session start:`,``,` skill_view('<workspace-name>')`,``,`The skill is named after your workspace (the project directory name).`,`It's auto-generated from the knowledge store and updates automatically.`,"If you discover something new about this workspace, store it via `knowledge` tool",`— it will appear in the skill on the next regeneration.`,``,"Use `skill_view(name, file_path)` for deep-dives into specific topics:","- `skill_view(name, 'references/architecture.md')` — deep architecture","- `skill_view(name, 'references/known-issues.md')` — recurring problems","- `skill_view(name, 'references/workflow-tips.md')` — optimization patterns","- `skill_view(name, 'references/flow-<slug>.md')` — active flow briefing",``,`## Available Tools (37)`,``,`AI Kit provides tools across the following categories:`,``,`| Category | Tools |`,`|----------|-------|`,"| **Search & Discovery** | `search`, `find`, `symbol`, `trace`, `scope_map`, `file_summary` |","| **Code Analysis** | `analyze`, `audit`, `graph`, `check` |","| **Context Compression** | `file_summary`, `digest` |","| **Memory & Knowledge** | `knowledge`, `remember`, `read`, `update`, `forget`, `list` |","| **FORGE Quality Gates** | `forge_ground`, `evidence_map` |","| **Development Workflows** | `flow`, `onboard`, `reindex`, `status`, `config` |","| **Testing & Build** | `test_run`, `parse_output`, `check`, `eval` |","| **Code Manipulation** | `rename`, `codemod`, `diff_parse`, `replay` |","| **Git** | `git` |","| **Session** | `session` |","| **Web & HTTP** | `web_search`, `web_fetch` |","| **Present & Visualize** | `present` |","| **Sandbox & Process** | `process`, `queue`, `restore`, `delegate` |","| **Utilities** | `measure`, `env` |","| **Browser** | `browser` |",``,`## Important: Prefer AI Kit Tools Over Generic Shell Commands`,``,`When working in this project, use AI Kit MCP tools instead of generic alternatives:`,``,`| Instead of | Use AI Kit Tool | Why |`,`|-----------|----------------|-----|`,"| `grep` / `rg` | `mcp_aikit_search` or `mcp_aikit_find` | Hybrid search (vector + keyword + BM25) across all indexed content |","| `read_file` for understanding | `mcp_aikit_file_summary` | T1=structure, T2=structure+content — 10x fewer tokens than raw file reads |","| `cd` + `ls` | `mcp_aikit_analyze` | Structural analysis with tree views |","| Running tests in terminal | `mcp_aikit_test_run` | Structured test output — no shell needed |","| `tsc` / `biome` in terminal | `mcp_aikit_check` | Typecheck + lint combined |","| Web search | `mcp_aikit_web_search` | Fans out to multiple keyless providers |",``,`## Agents`,``,t,``,`## Agent Instructions`,``,s.join(`
2
2
  `),``,`## Prompts`,``,i,``,b,``,`## Session Protocol`,``,p(n,a.hermes),``]).join(`
3
3
  `)}function k(e,t,n){let r=C(t),i=h(t.skills),a=e===`Orchestrator`?b:x,o=[n,...r,t.bodyAddendum,i,a].filter(Boolean).join(`
4
4
 
@@ -39,7 +39,7 @@ When dispatching subagents, include this line: "Communication style: terse like
39
39
  1a. For flow dispatch: status({ includePrelude: true }) → if onboard missing or workspace stale, onboard({ path: ".", update: true }) before any subagent dispatch.
40
40
  2. Apply layered knowledge protocol (see below).<!-- layered-header -->
41
41
  3. search({ query: "SESSION CHECKPOINT", origin: "curated" }) before planning.
42
- 5. Load skills by trigger: aikit always; multi-agents-development before delegation; present before non-tiny output (check Transport section for preferBrowser); brainstorming for design decisions.
42
+ 5. Load skills by trigger: aikit always; multi-agents-development before delegation; present before non-tiny output (preferBrowser=true by default; set preferBrowser:false for inline rendering — auto-falls back to browser if client doesn't support inline); brainstorming for design decisions.
43
43
 
44
44
  ## Tiered Lifecycle
45
45
  Floor: forge_classify -> one specialist -> check({}) + test_run({}) -> present result.
@@ -1 +1 @@
1
- const e=`analyze.audit.blast_radius.browser.changelog.check.checkpoint.codemod.config.data_transform.dead_symbols.delegate.describe_tool.diff_parse.digest.encode.env.eval.evidence_map.file_summary.find.flow.forge_classify.forge_ground.git_context.graph.guide.health.http.knowledge.lane.list_tools.lookup.measure.onboard.parse_output.present.process.produce_knowledge.queue.regex_test.reindex.rename.replay.restore.schema_validate.scope_map.search.search_tools.session_digest.signal.stash.status.symbol.test_run.time.trace.watch.web_fetch.web_search.workset`.split(`.`),t={orchestrator:[`memory`,`runCommand`,`switchAgent`,`newWorkspace`,`reviewPlan`,`killTerminal`,`createTask`,`terminal`,`terminalSel`,`lastCommand`,`problems`,`readFile`,`editFiles`,`subagent`,`search`,`web`,`todo`,`searchSubagent`,`textSearch`,`browser`,`askQuestions`,`resolveMemoryFileUri`],researcher:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`search`,`web`,`browser`],reviewer:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`search`,`web`,`browser`],codeAgent:[`createTask`,`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`todo`,`browser`],debugger:[`terminal`,`problems`,`readFile`,`terminalSel`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`search`,`browser`],refactor:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`browser`],explorer:[`problems`,`readFile`,`search`,`fileSearch`,`listDir`,`textSearch`,`browser`],planner:[`terminal`,`problems`,`readFile`,`reviewPlan`,`memory`,`askQuestions`,`resolveMemoryFileUri`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`web`,`todo`,`searchSubagent`,`browser`],security:[`terminal`,`problems`,`readFile`,`subagent`,`search`,`web`,`browser`],documenter:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`web`,`browser`]},n={terminal:[`Bash`],problems:[`Read`],readFile:[`Read`],lastCommand:[`Bash`],subagent:[],createFile:[`Write`],editFiles:[`Edit`],rename:[`Write`],createDirectory:[`Write`],search:[`Read`],web:[`WebFetch`,`WebSearch`],todo:[`TodoRead`,`TodoWrite`],memory:[],runCommand:[`Bash`],switchAgent:[],newWorkspace:[`Bash`],reviewPlan:[],killTerminal:[`Bash`],createTask:[`Task`],terminalSel:[`Bash`],fileSearch:[`Read`],listDir:[`Read`],textSearch:[`Read`],searchSubagent:[],browser:[],askQuestions:[],resolveMemoryFileUri:[]};export{e as AIKIT_TOOLS,n as CLAUDE_CODE_TOOL_MAP,t as IDE_CAPABILITIES};
1
+ const e=`analyze.audit.browser.check.codemod.config.delegate.digest.env.eval.evidence_map.file_summary.find.flow.forge_ground.git.graph.knowledge.measure.onboard.parse_output.present.process.produce_knowledge.queue.reindex.rename.replay.restore.scope_map.search.session.status.symbol.test_run.trace.web_fetch.web_search`.split(`.`),t={orchestrator:[`memory`,`runCommand`,`switchAgent`,`newWorkspace`,`reviewPlan`,`killTerminal`,`createTask`,`terminal`,`terminalSel`,`lastCommand`,`problems`,`readFile`,`editFiles`,`subagent`,`search`,`web`,`todo`,`searchSubagent`,`textSearch`,`browser`,`askQuestions`,`resolveMemoryFileUri`],researcher:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`search`,`web`,`browser`],reviewer:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`search`,`web`,`browser`],codeAgent:[`createTask`,`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`todo`,`browser`],debugger:[`terminal`,`problems`,`readFile`,`terminalSel`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`search`,`browser`],refactor:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`browser`],explorer:[`problems`,`readFile`,`search`,`fileSearch`,`listDir`,`textSearch`,`browser`],planner:[`terminal`,`problems`,`readFile`,`reviewPlan`,`memory`,`askQuestions`,`resolveMemoryFileUri`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`web`,`todo`,`searchSubagent`,`browser`],security:[`terminal`,`problems`,`readFile`,`subagent`,`search`,`web`,`browser`],documenter:[`terminal`,`problems`,`readFile`,`lastCommand`,`subagent`,`createFile`,`editFiles`,`rename`,`createDirectory`,`search`,`web`,`browser`]},n={terminal:[`Bash`],problems:[`Read`],readFile:[`Read`],lastCommand:[`Bash`],subagent:[],createFile:[`Write`],editFiles:[`Edit`],rename:[`Write`],createDirectory:[`Write`],search:[`Read`],web:[`WebFetch`,`WebSearch`],todo:[`TodoRead`,`TodoWrite`],memory:[],runCommand:[`Bash`],switchAgent:[],newWorkspace:[`Bash`],reviewPlan:[],killTerminal:[`Bash`],createTask:[`Task`],terminalSel:[`Bash`],fileSearch:[`Read`],listDir:[`Read`],textSearch:[`Read`],searchSubagent:[],browser:[],askQuestions:[],resolveMemoryFileUri:[]};export{e as AIKIT_TOOLS,n as CLAUDE_CODE_TOOL_MAP,t as IDE_CAPABILITIES};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{o as e,t}from"./supersession-DO_ZROFl.js";import{fileURLToPath as n}from"node:url";import{AIKIT_RUNTIME_PATHS as r,DEFAULT_SERVER_NAME as i,EMBEDDING_DEFAULTS as a,computePartitionKey as o,createLogger as s,getPartitionDir as c,migrateLegacyWorkspaceLayout as l,safeCwd as u,serializeError as d}from"../../core/dist/index.js";import{existsSync as f,mkdirSync as p,readFileSync as m,writeFileSync as h}from"node:fs";import{dirname as g,isAbsolute as _,relative as v,resolve as y}from"node:path";import{homedir as b}from"node:os";const x={workingToEpisodicAccesses:2,episodicToSemanticReferences:3,semanticToProceduralVerifications:5},S={working:1,episodic:2,semantic:4,procedural:12};function C(e,t=x){switch(e.tier){case`working`:if(e.accessCount>=t.workingToEpisodicAccesses)return`episodic`;break;case`episodic`:if(e.accessCount>=t.workingToEpisodicAccesses+t.episodicToSemanticReferences)return`semantic`;break;case`semantic`:if(e.accessCount>=t.workingToEpisodicAccesses+t.episodicToSemanticReferences+t.semanticToProceduralVerifications)return`procedural`;break;case`procedural`:break;default:break}}function w(e,t,n){e.memoryMetaUpdateTier(t,n)}const T={stabilityHours:168,accessMultiplier:1.5,flagThreshold:.1,maxStabilityHours:8760};function E(e){return{...T,...e}}function D(e,t){if(!e)return t;let n=Date.parse(e);return Number.isNaN(n)?t:n}function O(e){return e&&e in S?e:`working`}function k(e,t,n,r=T,i){let a=typeof r==`string`?O(r):`working`,o=E(typeof r==`string`?i:r),s=D(e,D(n,Date.now())),c=Math.max(0,Date.now()-s)/(1e3*60*60),l=Math.min(o.stabilityHours*S[a]*o.accessMultiplier**Math.max(0,t),o.maxStabilityHours);return Math.exp(-c/l)}function A(e,t,n){let r=e.memoryMetaGet(t);if(!r)return;let i=k(r.lastAccessedAt,r.accessCount,r.createdAt,r.tier,n);return r.retentionScore!==i&&e.memoryMetaUpdateScore(t,i),e.memoryMetaGet(t)??{...r,retentionScore:i}}function j(e,t,n){e.memoryMetaGet(t)||e.memoryMetaCreate(t),e.memoryMetaTouch(t);let r=e.memoryMetaGet(t);if(!r)return 1;let i=k(r.lastAccessedAt,r.accessCount,r.createdAt,r.tier,n);return e.memoryMetaUpdateScore(t,i),i}function M(e,t){let n=E(t);return e.memoryMetaList().map(t=>A(e,t.entryId,n)??t).filter(e=>e.retentionScore<n.flagThreshold).sort((e,t)=>e.retentionScore-t.retentionScore)}const N=g(n(import.meta.url)),P=s(`server`),F=[`auto`,`manual`,`smart`],I={model:a.model,dimensions:a.dimensions,childProcess:!0,idleTimeoutMs:3e5};function L(e){return typeof e==`string`&&F.includes(e)}function R(e,t,n){let r=y(e),i=v(y(t),r);if(i.startsWith(`..`)||_(i))throw Error(`Config ${n} path escapes allowed root: ${e} is not under ${t}`);return r}function z(e,t){let n=y(e),r=v(y(t),n);return!(r.startsWith(`..`)||_(r))}function B(e){return c(o(e))}function V(e,t,n,r,i){let a=r?y(t,r):t;if(!n)return R(a,t,i);let o=y(e,n);return z(o,t)?r&&y(o)===y(t)?R(a,t,i):R(o,t,i):R(a,t,i)}function H(e){let t=[e.store?.path,e.curated?.path,e.onboardDir,e.stateDir,e.l0CardDir];for(let e of t)e&&p(e,{recursive:!0})}function U(e,t){l(t);let n=B(t);e.store={...e.store,path:V(t,n,e.store?.path,r.data,`store`)},e.curated={...e.curated,path:V(t,n,e.curated?.path,r.curated,`curated`)},e.onboardDir=V(t,n,e.onboardDir,r.onboard,`onboard`),e.stateDir=V(t,n,e.stateDir,r.state,`state`),e.l0CardDir=V(t,n,e.l0CardDir,r.l0Cards,`l0CardDir`)}function W(e){let t=process.env.AIKIT_INDEX_MODE;if(L(t))return t;if(e.indexMode)return e.indexMode;let n=process.env.AIKIT_AUTO_INDEX;return n===void 0?e.autoIndex===void 0?`smart`:e.autoIndex?`auto`:`manual`:n===`true`?`auto`:`manual`}function G(){let n=u(),r=process.env.AIKIT_CONFIG_PATH??(n&&f(y(n,`aikit.config.json`))?y(n,`aikit.config.json`):y(N,`..`,`..`,`..`,`aikit.config.json`));try{if(!f(r))return P.info(`No config file found, using defaults`,{configPath:r}),q();let n=m(r,`utf-8`),i=JSON.parse(n),a={...I,...i.embedding};if(i.embedding=a,i.memory={retention:{...T,...i.memory?.retention},lessons:{...e,...i.memory?.lessons},consolidation:{...x,...i.memory?.consolidation},supersession:{...t,...i.memory?.supersession}},i.logging?.errorDetails!==void 0&&typeof i.logging.errorDetails!=`boolean`)throw Error(`Config logging.errorDetails must be a boolean`);if(i.logging={errorDetails:i.logging?.errorDetails===!0},!i.sources||!Array.isArray(i.sources)||i.sources.length===0)throw Error(`Config must have at least one source`);if(!i.store?.path)throw Error(`Config must specify store.path`);if(i.autoIndex!==void 0&&typeof i.autoIndex!=`boolean`)throw Error(`Config autoIndex must be a boolean`);if(i.indexMode!==void 0&&!L(i.indexMode))throw Error(`Config indexMode must be one of: ${F.join(`, `)}`);if(typeof a.model!=`string`||a.model.trim()===``)throw Error(`Config embedding.model must be a non-empty string`);if(a.nativeDim!==void 0&&(!Number.isInteger(a.nativeDim)||a.nativeDim<=0))throw Error(`Config embedding.nativeDim must be a positive integer`);if(a.dimensions!==void 0&&(!Number.isInteger(a.dimensions)||a.dimensions<=0))throw Error(`Config embedding.dimensions must be a positive integer`);if(a.dimensions!==void 0&&a.nativeDim!==void 0&&a.dimensions>a.nativeDim)throw Error(`Config embedding.dimensions must not exceed embedding.nativeDim`);if(a.queryPrefix!==void 0&&typeof a.queryPrefix!=`string`)throw Error(`Config embedding.queryPrefix must be a string`);let o=g(r);return i.sources=i.sources.map(e=>({...e,path:R(y(o,e.path),o,`source`)})),J(i,r),U(i,o),i.layeredKnowledge===void 0&&(i.layeredKnowledge=process.env.AIKIT_LAYERED_KNOWLEDGE===`true`),i.indexMode=W(i),i}catch(e){let t=`Failed to load config from ${r}. ${e instanceof Error?e.message:String(e)}`;console.error(`\n ⚠ CONFIG ERROR — ${t}\n Check that the file exists, is valid JSON, and all required fields are present.\n`),P.error(`Failed to load config`,{configPath:r,...d(e)}),P.warn(`Falling back to default configuration`,{configPath:r});let n=q();return n.configError=t,n}}const K=[`.git/**`,`**/node_modules/**`,`*.lock`,`pnpm-lock.yaml`,`package-lock.json`,`**/dist/**`,`**/build/**`,`**/out/**`,`**/.output/**`,`**/cdk.out/**`,`**/.next/**`,`**/.nuxt/**`,`**/.vercel/**`,`**/.serverless/**`,`**/.turbo/**`,`**/.cache/**`,`**/.parcel-cache/**`,`**/coverage/**`,`**/.terraform/**`,`**/__pycache__/**`,`**/.venv/**`,`**/.docusaurus/**`,`**/.temp/**`,`**/tmp/**`];function q(){let n=process.env.AIKIT_WORKSPACE_ROOT??u()??b(),a=B(n),o={sources:[{path:n,excludePatterns:[...K]}],serverName:i,indexing:{chunkSize:800,chunkOverlap:150,minChunkSize:100},embedding:{...I},store:{backend:`sqlite-vec`,path:y(a,r.data)},curated:{path:y(a,r.curated)},memory:{retention:{...T},lessons:{...e},consolidation:{...x},supersession:{...t}},logging:{errorDetails:!1},onboardDir:y(a,r.onboard),stateDir:y(a,r.state)};return o.indexMode=W(o),o}function J(e,t){let n=e.configVersion??0;if(n>=1)return e;if(n<1)for(let t of e.sources){t.excludePatterns=t.excludePatterns??[];let e=new Set(t.excludePatterns);for(let n of K)e.has(n)||t.excludePatterns.push(n)}e.configVersion=1;try{h(t,`${JSON.stringify(e,null,2)}\n`,`utf-8`),P.info(`Config auto-upgraded`,{from:n,to:1,configPath:t})}catch(e){P.warn(`Failed to write upgraded config`,{configPath:t,...d(e)})}return e}function Y(e,t){if(!f(t))throw Error(`Workspace root does not exist: ${t}`);l(t),P.debug(`Reconfiguring for workspace root`,{workspaceRoot:t});try{process.chdir(t),P.debug(`Changed process cwd to workspace root`,{cwd:process.cwd()})}catch(e){P.warn(`Failed to chdir to workspace root`,{workspaceRoot:t,...d(e)})}e.sources=[{path:t,excludePatterns:e.sources[0]?.excludePatterns??[`node_modules/**`,`dist/**`,`.git/**`,`coverage/**`,`*.lock`,`pnpm-lock.yaml`]}],U(e,t),H(e)}export{K as DEFAULT_EXCLUDE_PATTERNS,C as a,x as i,G as loadConfig,A as n,w as o,j as r,Y as reconfigureForWorkspace,W as resolveIndexMode,M as t};
@@ -1 +0,0 @@
1
- import{o as e,t}from"./supersession-CWEne3av.js";import{fileURLToPath as n}from"node:url";import{AIKIT_RUNTIME_PATHS as r,DEFAULT_SERVER_NAME as i,EMBEDDING_DEFAULTS as a,computePartitionKey as o,createLogger as s,getPartitionDir as c,migrateLegacyWorkspaceLayout as l,safeCwd as u,serializeError as d}from"../../core/dist/index.js";import{existsSync as f,mkdirSync as p,readFileSync as m,writeFileSync as h}from"node:fs";import{dirname as g,isAbsolute as _,relative as v,resolve as y}from"node:path";import{homedir as b}from"node:os";const x={workingToEpisodicAccesses:2,episodicToSemanticReferences:3,semanticToProceduralVerifications:5},S={working:1,episodic:2,semantic:4,procedural:12};function C(e,t=x){switch(e.tier){case`working`:if(e.accessCount>=t.workingToEpisodicAccesses)return`episodic`;break;case`episodic`:if(e.accessCount>=t.workingToEpisodicAccesses+t.episodicToSemanticReferences)return`semantic`;break;case`semantic`:if(e.accessCount>=t.workingToEpisodicAccesses+t.episodicToSemanticReferences+t.semanticToProceduralVerifications)return`procedural`;break;case`procedural`:break;default:break}}function w(e,t,n){e.memoryMetaUpdateTier(t,n)}const T={stabilityHours:168,accessMultiplier:1.5,flagThreshold:.1,maxStabilityHours:8760};function E(e){return{...T,...e}}function D(e,t){if(!e)return t;let n=Date.parse(e);return Number.isNaN(n)?t:n}function O(e){return e&&e in S?e:`working`}function k(e,t,n,r=T,i){let a=typeof r==`string`?O(r):`working`,o=E(typeof r==`string`?i:r),s=D(e,D(n,Date.now())),c=Math.max(0,Date.now()-s)/(1e3*60*60),l=Math.min(o.stabilityHours*S[a]*o.accessMultiplier**Math.max(0,t),o.maxStabilityHours);return Math.exp(-c/l)}function A(e,t,n){let r=e.memoryMetaGet(t);if(!r)return;let i=k(r.lastAccessedAt,r.accessCount,r.createdAt,r.tier,n);return r.retentionScore!==i&&e.memoryMetaUpdateScore(t,i),e.memoryMetaGet(t)??{...r,retentionScore:i}}function j(e,t,n){e.memoryMetaGet(t)||e.memoryMetaCreate(t),e.memoryMetaTouch(t);let r=e.memoryMetaGet(t);if(!r)return 1;let i=k(r.lastAccessedAt,r.accessCount,r.createdAt,r.tier,n);return e.memoryMetaUpdateScore(t,i),i}function M(e,t){let n=E(t);return e.memoryMetaList().map(t=>A(e,t.entryId,n)??t).filter(e=>e.retentionScore<n.flagThreshold).sort((e,t)=>e.retentionScore-t.retentionScore)}const N=g(n(import.meta.url)),P=s(`server`),F=[`auto`,`manual`,`smart`],I={model:a.model,dimensions:a.dimensions,childProcess:!0,idleTimeoutMs:3e5};function L(e){return typeof e==`string`&&F.includes(e)}function R(e,t,n){let r=y(e),i=v(y(t),r);if(i.startsWith(`..`)||_(i))throw Error(`Config ${n} path escapes allowed root: ${e} is not under ${t}`);return r}function z(e,t){let n=y(e),r=v(y(t),n);return!(r.startsWith(`..`)||_(r))}function B(e){return c(o(e))}function V(e,t,n,r,i){let a=r?y(t,r):t;if(!n)return R(a,t,i);let o=y(e,n);return z(o,t)?r&&y(o)===y(t)?R(a,t,i):R(o,t,i):R(a,t,i)}function H(e){let t=[e.store?.path,e.curated?.path,e.onboardDir,e.stateDir,e.l0CardDir];for(let e of t)e&&p(e,{recursive:!0})}function U(e,t){l(t);let n=B(t);e.store={...e.store,path:V(t,n,e.store?.path,r.data,`store`)},e.curated={...e.curated,path:V(t,n,e.curated?.path,r.curated,`curated`)},e.onboardDir=V(t,n,e.onboardDir,r.onboard,`onboard`),e.stateDir=V(t,n,e.stateDir,r.state,`state`),e.l0CardDir=V(t,n,e.l0CardDir,r.l0Cards,`l0CardDir`)}function W(e){let t=process.env.AIKIT_INDEX_MODE;if(L(t))return t;if(e.indexMode)return e.indexMode;let n=process.env.AIKIT_AUTO_INDEX;return n===void 0?e.autoIndex===void 0?`smart`:e.autoIndex?`auto`:`manual`:n===`true`?`auto`:`manual`}function G(){let n=u(),r=process.env.AIKIT_CONFIG_PATH??(n&&f(y(n,`aikit.config.json`))?y(n,`aikit.config.json`):y(N,`..`,`..`,`..`,`aikit.config.json`));try{if(!f(r))return P.info(`No config file found, using defaults`,{configPath:r}),q();let n=m(r,`utf-8`),i=JSON.parse(n),a={...I,...i.embedding};if(i.embedding=a,i.memory={retention:{...T,...i.memory?.retention},lessons:{...e,...i.memory?.lessons},consolidation:{...x,...i.memory?.consolidation},supersession:{...t,...i.memory?.supersession}},i.logging?.errorDetails!==void 0&&typeof i.logging.errorDetails!=`boolean`)throw Error(`Config logging.errorDetails must be a boolean`);if(i.logging={errorDetails:i.logging?.errorDetails===!0},!i.sources||!Array.isArray(i.sources)||i.sources.length===0)throw Error(`Config must have at least one source`);if(!i.store?.path)throw Error(`Config must specify store.path`);if(i.autoIndex!==void 0&&typeof i.autoIndex!=`boolean`)throw Error(`Config autoIndex must be a boolean`);if(i.indexMode!==void 0&&!L(i.indexMode))throw Error(`Config indexMode must be one of: ${F.join(`, `)}`);if(typeof a.model!=`string`||a.model.trim()===``)throw Error(`Config embedding.model must be a non-empty string`);if(a.nativeDim!==void 0&&(!Number.isInteger(a.nativeDim)||a.nativeDim<=0))throw Error(`Config embedding.nativeDim must be a positive integer`);if(a.dimensions!==void 0&&(!Number.isInteger(a.dimensions)||a.dimensions<=0))throw Error(`Config embedding.dimensions must be a positive integer`);if(a.dimensions!==void 0&&a.nativeDim!==void 0&&a.dimensions>a.nativeDim)throw Error(`Config embedding.dimensions must not exceed embedding.nativeDim`);if(a.queryPrefix!==void 0&&typeof a.queryPrefix!=`string`)throw Error(`Config embedding.queryPrefix must be a string`);let o=g(r);return i.sources=i.sources.map(e=>({...e,path:R(y(o,e.path),o,`source`)})),J(i,r),U(i,o),i.layeredKnowledge===void 0&&(i.layeredKnowledge=process.env.AIKIT_LAYERED_KNOWLEDGE===`true`),i.indexMode=W(i),i}catch(e){let t=`Failed to load config from ${r}. ${e instanceof Error?e.message:String(e)}`;console.error(`\n ⚠ CONFIG ERROR — ${t}\n Check that the file exists, is valid JSON, and all required fields are present.\n`),P.error(`Failed to load config`,{configPath:r,...d(e)}),P.warn(`Falling back to default configuration`,{configPath:r});let n=q();return n.configError=t,n}}const K=[`.git/**`,`**/node_modules/**`,`*.lock`,`pnpm-lock.yaml`,`package-lock.json`,`**/dist/**`,`**/build/**`,`**/out/**`,`**/.output/**`,`**/cdk.out/**`,`**/.next/**`,`**/.nuxt/**`,`**/.vercel/**`,`**/.serverless/**`,`**/.turbo/**`,`**/.cache/**`,`**/.parcel-cache/**`,`**/coverage/**`,`**/.terraform/**`,`**/__pycache__/**`,`**/.venv/**`,`**/.docusaurus/**`,`**/.temp/**`,`**/tmp/**`];function q(){let n=process.env.AIKIT_WORKSPACE_ROOT??u()??b(),a=B(n),o={sources:[{path:n,excludePatterns:[...K]}],serverName:i,indexing:{chunkSize:800,chunkOverlap:150,minChunkSize:100},embedding:{...I},store:{backend:`sqlite-vec`,path:y(a,r.data)},curated:{path:y(a,r.curated)},memory:{retention:{...T},lessons:{...e},consolidation:{...x},supersession:{...t}},logging:{errorDetails:!1},onboardDir:y(a,r.onboard),stateDir:y(a,r.state)};return o.indexMode=W(o),o}function J(e,t){let n=e.configVersion??0;if(n>=1)return e;if(n<1)for(let t of e.sources){t.excludePatterns=t.excludePatterns??[];let e=new Set(t.excludePatterns);for(let n of K)e.has(n)||t.excludePatterns.push(n)}e.configVersion=1;try{h(t,`${JSON.stringify(e,null,2)}\n`,`utf-8`),P.info(`Config auto-upgraded`,{from:n,to:1,configPath:t})}catch(e){P.warn(`Failed to write upgraded config`,{configPath:t,...d(e)})}return e}function Y(e,t){if(!f(t))throw Error(`Workspace root does not exist: ${t}`);l(t),P.debug(`Reconfiguring for workspace root`,{workspaceRoot:t});try{process.chdir(t),P.debug(`Changed process cwd to workspace root`,{cwd:process.cwd()})}catch(e){P.warn(`Failed to chdir to workspace root`,{workspaceRoot:t,...d(e)})}e.sources=[{path:t,excludePatterns:e.sources[0]?.excludePatterns??[`node_modules/**`,`dist/**`,`.git/**`,`coverage/**`,`*.lock`,`pnpm-lock.yaml`]}],U(e,t),H(e)}export{K as DEFAULT_EXCLUDE_PATTERNS,C as a,x as i,G as loadConfig,A as n,w as o,j as r,Y as reconfigureForWorkspace,W as resolveIndexMode,M as t};
@@ -1 +0,0 @@
1
- import{n as e,t}from"./server-jZ_r6xLb.js";export{t as buildPreludeInjection,e as generatePrelude};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{n as e,t}from"./server-D2a5Rjgk.js";export{t as buildPreludeInjection,e as generatePrelude};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{r as e}from"./server-D2a5Rjgk.js";export{e as createSamplingClient};
@@ -1 +0,0 @@
1
- import{r as e}from"./server-jZ_r6xLb.js";export{e as createSamplingClient};