@vpxa/aikit 0.1.9 → 0.1.11
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/package.json +1 -1
- package/packages/indexer/dist/smart-index-scheduler.js +1 -1
- package/packages/server/dist/compression-interceptor.d.ts +12 -0
- package/packages/server/dist/compression-interceptor.js +1 -0
- package/packages/server/dist/server.js +2 -2
- package/packages/server/dist/tools/analyze.tools.js +3 -3
- package/packages/server/dist/tools/flow.tools.js +1 -1
- package/packages/server/dist/tools/onboard.tool.js +1 -1
- package/packages/server/dist/tools/present/templates.js +6 -6
- package/packages/server/dist/tools/present/tool.js +1 -1
- package/packages/server/dist/tools/search.tool.js +2 -2
- package/packages/store/dist/lance-store.js +1 -1
- package/packages/tools/dist/compact.d.ts +6 -0
- package/packages/tools/dist/compact.js +2 -2
- package/packages/tools/dist/compress-output.d.ts +38 -0
- package/packages/tools/dist/compress-output.js +1 -0
- package/packages/tools/dist/compression/delta-cache.d.ts +29 -0
- package/packages/tools/dist/compression/delta-cache.js +1 -0
- package/packages/tools/dist/compression/engine.d.ts +34 -0
- package/packages/tools/dist/compression/engine.js +4 -0
- package/packages/tools/dist/compression/litm.d.ts +20 -0
- package/packages/tools/dist/compression/litm.js +1 -0
- package/packages/tools/dist/compression/mmr.d.ts +24 -0
- package/packages/tools/dist/compression/mmr.js +1 -0
- package/packages/tools/dist/compression/rules/docker.d.ts +11 -0
- package/packages/tools/dist/compression/rules/docker.js +3 -0
- package/packages/tools/dist/compression/rules/generic.d.ts +11 -0
- package/packages/tools/dist/compression/rules/generic.js +3 -0
- package/packages/tools/dist/compression/rules/git.d.ts +11 -0
- package/packages/tools/dist/compression/rules/git.js +3 -0
- package/packages/tools/dist/compression/rules/index.d.ts +14 -0
- package/packages/tools/dist/compression/rules/index.js +1 -0
- package/packages/tools/dist/compression/rules/kubectl.d.ts +11 -0
- package/packages/tools/dist/compression/rules/kubectl.js +3 -0
- package/packages/tools/dist/compression/rules/lint.d.ts +11 -0
- package/packages/tools/dist/compression/rules/lint.js +3 -0
- package/packages/tools/dist/compression/rules/npm.d.ts +11 -0
- package/packages/tools/dist/compression/rules/npm.js +3 -0
- package/packages/tools/dist/compression/rules/test-runner.d.ts +11 -0
- package/packages/tools/dist/compression/rules/test-runner.js +3 -0
- package/packages/tools/dist/compression/scoring.d.ts +26 -0
- package/packages/tools/dist/compression/scoring.js +1 -0
- package/packages/tools/dist/compression/types.d.ts +61 -0
- package/packages/tools/dist/compression/types.js +1 -0
- package/packages/tools/dist/digest.d.ts +5 -0
- package/packages/tools/dist/digest.js +4 -4
- package/packages/tools/dist/index.d.ts +5 -1
- package/packages/tools/dist/index.js +1 -1
- package/packages/tools/dist/parse-output.d.ts +3 -1
- package/packages/tools/dist/parse-output.js +1 -1
- package/packages/tools/dist/truncation.d.ts +34 -1
- package/packages/tools/dist/truncation.js +10 -6
- package/packages/tui/dist/{App-DpjN3iS-.js → App-D8fednPY.js} +1 -1
- package/packages/tui/dist/App.js +1 -1
- package/packages/tui/dist/{CuratedPanel-BIamXLNy.js → CuratedPanel-BwkPKdX4.js} +1 -1
- package/packages/tui/dist/LogPanel-C6KagE0H.js +3320 -0
- package/packages/tui/dist/{SearchPanel-CpJGczAc.js → SearchPanel-BbvCaco0.js} +1 -1
- package/packages/tui/dist/{StatusPanel-BAbUxyqQ.js → StatusPanel-BFshFJU9.js} +1 -1
- package/packages/tui/dist/chunk-BSngPjfM.js +2 -0
- package/packages/tui/dist/{devtools-DMOZMn70.js → devtools-owCrRz12.js} +2 -2
- package/packages/tui/dist/hooks/useKBClient.js +1 -1
- package/packages/tui/dist/hooks/usePolling.js +1 -1
- package/packages/tui/dist/index.js +1 -1
- package/packages/tui/dist/{jsx-runtime-y6Gdq5PZ.js → jsx-runtime-B_2ewjsM.js} +7 -7
- package/packages/tui/dist/panels/CuratedPanel.js +1 -1
- package/packages/tui/dist/panels/LogPanel.js +1 -1
- package/packages/tui/dist/panels/SearchPanel.js +1 -1
- package/packages/tui/dist/panels/StatusPanel.js +1 -1
- package/packages/tui/dist/{react-D__J1GQe.js → react-sYq8CyFO.js} +1 -1
- package/packages/tui/dist/{useKBClient-C35iA4uG.js → useKBClient-BkBffCdd.js} +1 -1
- package/packages/tui/dist/{usePolling-BbjnRWgx.js → usePolling-D3y7u5cZ.js} +1 -1
- package/scaffold/adapters/copilot.mjs +4 -1
- package/scaffold/definitions/agents.mjs +32 -8
- package/scaffold/definitions/bodies.mjs +6 -2
- package/scaffold/definitions/protocols.mjs +12 -0
- package/scaffold/general/agents/Code-Reviewer-Alpha.agent.md +7 -0
- package/scaffold/general/agents/Code-Reviewer-Beta.agent.md +7 -0
- package/scaffold/general/agents/Debugger.agent.md +7 -0
- package/scaffold/general/agents/Documenter.agent.md +1 -0
- package/scaffold/general/agents/Explorer.agent.md +6 -0
- package/scaffold/general/agents/Frontend.agent.md +9 -0
- package/scaffold/general/agents/Implementer.agent.md +7 -0
- package/scaffold/general/agents/Orchestrator.agent.md +35 -51
- package/scaffold/general/agents/README.md +3 -3
- package/scaffold/general/agents/Refactor.agent.md +1 -0
- package/scaffold/general/agents/Researcher-Beta.agent.md +2 -2
- package/scaffold/general/agents/Researcher-Delta.agent.md +2 -2
- package/scaffold/general/agents/Researcher-Gamma.agent.md +2 -2
- package/scaffold/general/agents/Security.agent.md +7 -0
- package/scaffold/general/agents/_shared/code-agent-base.md +38 -18
- package/scaffold/general/skills/aikit/SKILL.md +73 -1
- package/packages/tui/dist/LogPanel-Db-SeZhR.js +0 -3
- package/packages/tui/dist/chunk-D6axbAb-.js +0 -2
|
@@ -202,7 +202,79 @@ Lane actions: `create` (copy files to lane), `list`, `status` (modified/added/de
|
|
|
202
202
|
|------|-----|---------|
|
|
203
203
|
| `brainstorm` | — | Interactive brainstorming and ideation sessions with structured output |
|
|
204
204
|
|
|
205
|
-
##
|
|
205
|
+
## Flow System
|
|
206
|
+
|
|
207
|
+
Flows are multi-step guided workflows that structure complex tasks. Each step has a skill file with detailed instructions, required artifacts, and agent assignments.
|
|
208
|
+
|
|
209
|
+
### Built-in Flows
|
|
210
|
+
|
|
211
|
+
| Flow | Steps | Use When |
|
|
212
|
+
|------|-------|----------|
|
|
213
|
+
| `aikit:basic` | assess → implement → verify | Bug fixes, config changes, small features |
|
|
214
|
+
| `aikit:advanced` | spec → plan → task → execute → verify | New modules, cross-service changes, architectural work |
|
|
215
|
+
|
|
216
|
+
### Flow Lifecycle
|
|
217
|
+
|
|
218
|
+
```text
|
|
219
|
+
flow_list() # See available flows
|
|
220
|
+
flow_info({ flow: "aikit:basic" }) # View steps, skills, agents
|
|
221
|
+
flow_start({ flow: "aikit:basic" }) # Start — sets current step to first
|
|
222
|
+
flow_read_skill({ step: "assess" }) # Read current step's skill instructions
|
|
223
|
+
# ... do the work described in the skill ...
|
|
224
|
+
flow_step({ action: "next" }) # Advance to next step
|
|
225
|
+
flow_step({ action: "skip" }) # Skip current step
|
|
226
|
+
flow_step({ action: "redo" }) # Redo current step
|
|
227
|
+
flow_status() # Check progress
|
|
228
|
+
flow_reset() # Clear state, start over
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Creating Custom Flows
|
|
232
|
+
|
|
233
|
+
1. Create a directory under `.github/flows/<flow-name>/`
|
|
234
|
+
2. Add `manifest.yaml`:
|
|
235
|
+
|
|
236
|
+
```yaml
|
|
237
|
+
name: my-flow
|
|
238
|
+
version: "1.0.0"
|
|
239
|
+
description: "My custom flow"
|
|
240
|
+
artifacts_dir: .spec
|
|
241
|
+
steps:
|
|
242
|
+
- id: design
|
|
243
|
+
name: Design
|
|
244
|
+
skill: skills/design/SKILL.md
|
|
245
|
+
description: "Create the design document"
|
|
246
|
+
produces: [design.md]
|
|
247
|
+
requires: []
|
|
248
|
+
agents: [Planner]
|
|
249
|
+
- id: implement
|
|
250
|
+
name: Implement
|
|
251
|
+
skill: skills/implement/SKILL.md
|
|
252
|
+
description: "Implement the design"
|
|
253
|
+
produces: [code]
|
|
254
|
+
requires: [design]
|
|
255
|
+
agents: [Implementer]
|
|
256
|
+
agents:
|
|
257
|
+
- agents/planner.agent.md
|
|
258
|
+
install: []
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
3. Add skill files under `.github/flows/<flow-name>/skills/<step-id>/SKILL.md`
|
|
262
|
+
4. The flow appears in `flow_list()` automatically
|
|
263
|
+
|
|
264
|
+
### How Flows Are Delivered
|
|
265
|
+
|
|
266
|
+
- **Built-in flows** ship with the AI Kit MCP server in `scaffold/flows/`
|
|
267
|
+
- `aikit init` copies them to `.github/flows/` in your workspace
|
|
268
|
+
- At runtime, flow tools resolve paths to `.github/flows/` (workspace-local copies)
|
|
269
|
+
- Custom flows placed in `.github/flows/` are discovered alongside built-in ones
|
|
270
|
+
|
|
271
|
+
### Agent-Flow Integration
|
|
272
|
+
|
|
273
|
+
- All code agents have a "Flows" section instructing them to check `flow_status()` first
|
|
274
|
+
- If a flow is active, the agent follows the current step's skill via `flow_read_skill()`
|
|
275
|
+
- After completing a step's work, advance with `flow_step({ action: "next" })`
|
|
276
|
+
- The **Orchestrator** selects and starts flows; other agents follow them
|
|
277
|
+
- The **Orchestrator** specifies `aikit` skill loading — all agents should load `aikit` skill to access flow tools
|
|
206
278
|
|
|
207
279
|
## CRITICAL: Use AI Kit Tools Instead of Native IDE Tools
|
|
208
280
|
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
|
|
2
|
-
import{r as e}from"./chunk-D6axbAb-.js";import{t}from"./react-D__J1GQe.js";import{a as n,i as r,t as i}from"./jsx-runtime-y6Gdq5PZ.js";import{homedir as a}from"node:os";import{exec as o,execFile as s}from"node:child_process";import{appendFileSync as c,closeSync as l,constants as u,existsSync as d,mkdirSync as f,openSync as p,readFileSync as m,readdirSync as h,renameSync as g,statSync as _,unlinkSync as v,writeFileSync as y}from"node:fs";import{basename as ee,dirname as b,join as x,resolve as S}from"node:path";import{promisify as C}from"node:util";import{fileURLToPath as w}from"node:url";import{createHash as T}from"node:crypto";import"turndown";C(o),x(b(w(import.meta.url)),`..`,`..`,`wasm`),new Set(Object.keys({".ts":`tree-sitter-typescript.wasm`,".tsx":`tree-sitter-typescript.wasm`,".mts":`tree-sitter-typescript.wasm`,".cts":`tree-sitter-typescript.wasm`,".js":`tree-sitter-javascript.wasm`,".jsx":`tree-sitter-javascript.wasm`,".mjs":`tree-sitter-javascript.wasm`,".cjs":`tree-sitter-javascript.wasm`,".py":`tree-sitter-python.wasm`,".go":`tree-sitter-go.wasm`,".rs":`tree-sitter-rust.wasm`,".java":`tree-sitter-java.wasm`,".kt":`tree-sitter-kotlin.wasm`,".kts":`tree-sitter-kotlin.wasm`,".scala":`tree-sitter-scala.wasm`,".sc":`tree-sitter-scala.wasm`,".c":`tree-sitter-c.wasm`,".h":`tree-sitter-c.wasm`,".cpp":`tree-sitter-cpp.wasm`,".cc":`tree-sitter-cpp.wasm`,".cxx":`tree-sitter-cpp.wasm`,".hpp":`tree-sitter-cpp.wasm`,".hxx":`tree-sitter-cpp.wasm`,".cs":`tree-sitter-c_sharp.wasm`,".swift":`tree-sitter-swift.wasm`,".rb":`tree-sitter-ruby.wasm`,".php":`tree-sitter-php.wasm`}));const E={ai:`.ai`,aiKb:`.ai/kb`,aiCurated:`.ai/curated`,restorePoints:`.ai/restore-points`,data:`.aikit-data`,state:`.aikit-state`,logs:`.aikit-state/logs`,brainstorm:`.brainstorm`,handoffs:`.handoffs`},D={root:`.aikit-data`,registry:`registry.json`};E.data;function O(){return process.env.AIKIT_GLOBAL_DATA_DIR??S(a(),D.root)}function k(e){let t=S(e);return`${ee(t).toLowerCase().replace(/[^a-z0-9-]/g,`-`)||`workspace`}-${T(`sha256`).update(t).digest(`hex`).slice(0,8)}`}function te(){let e=S(O(),D.registry);if(!d(e))return{version:1,workspaces:{}};let t=m(e,`utf-8`);try{return JSON.parse(t)}catch{return{version:1,workspaces:{}}}}function ne(e,t=5e3){let n=`${e}.lock`,r=Date.now()+t,i=10;for(;Date.now()<r;)try{let e=p(n,u.O_CREAT|u.O_EXCL|u.O_WRONLY);return y(e,`${process.pid}\n`),l(e),n}catch(e){if(e.code!==`EEXIST`)throw e;try{let{mtimeMs:e}=_(n);if(Date.now()-e>3e4){v(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 re(e){try{v(e)}catch{}}function ie(e){let t=O();f(t,{recursive:!0});let n=S(t,D.registry),r=ne(n);try{let t=`${n}.tmp`;y(t,JSON.stringify(e,null,2),`utf-8`),g(t,n)}finally{re(r)}}function ae(e){let t=te(),n=k(e),r=new Date().toISOString();return t.workspaces[n]?t.workspaces[n].lastAccessedAt=r:t.workspaces[n]={partition:n,workspacePath:S(e),registeredAt:r,lastAccessedAt:r},f(A(n),{recursive:!0}),ie(t),t.workspaces[n]}function A(e){return S(O(),e)}function j(){return d(S(O(),D.registry))}function M(e){return j()?S(A(ae(e).partition),`state`):S(e,E.state)}const N={debug:0,info:1,warn:2,error:3},P=[];let F=process.env.AIKIT_LOG_LEVEL??`info`,I=process.env.AIKIT_LOG_FILE_SINK===`true`||process.env.AIKIT_LOG_FILE_SINK!==`false`&&!process.env.VITEST&&process.env.NODE_ENV!==`test`;function L(){return I?process.env.VITEST||process.env.NODE_ENV===`test`?process.env.AIKIT_LOG_FILE_SINK===`true`:!0:!1}let R;function z(){return R||=S(process.cwd(),E.logs),R}function B(e){let t=e.toISOString().slice(0,10);return x(z(),`${t}.jsonl`)}let V=0;function H(){let e=Date.now();if(!(e-V<36e5)){V=e;try{let t=z(),n=new Date(e-30*864e5).toISOString().slice(0,10);for(let e of h(t))if(e.endsWith(`.jsonl`)&&e.slice(0,10)<n)try{v(x(t,e))}catch{}}catch{}}}function U(e,t){try{f(z(),{recursive:!0}),c(B(t),`${e}\n`),H()}catch{}}function W(e){function t(t,n,r){if(N[t]<N[F])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 P)try{i({level:t,component:e,message:n,data:r})}catch{}L()&&(t===`warn`||t===`error`)&&U(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 G=W(`query-executor`),K=b(w(import.meta.url));function q(){let e=x(K,`..`,`queries`);if(d(e))return e;let t=x(K,`..`,`..`,`src`,`queries`);return d(t)?t:e}const J=q(),oe={".ts":`typescript`,".tsx":`typescript`,".mts":`typescript`,".cts":`typescript`,".js":`javascript`,".jsx":`javascript`,".mjs":`javascript`,".cjs":`javascript`,".py":`python`,".go":`go`,".rs":`rust`,".java":`java`};var Y=class{queryCache=new Map;scmCache=new Map;execute(e,t,n,r){let i=this.getOrCompile(t,n,r);return i?i.matches(e).map(e=>X(e)):[]}executeCaptures(e,t,n,r){let i=this.getOrCompile(t,n,r);return i?i.captures(e).map(e=>Z(e)):[]}executeRaw(e,t,n){return t.query(n).matches(e).map(e=>X(e))}getOrCompile(e,t,n){let r=oe[t];if(!r)return null;let i=`${r}:${n}`,a=this.queryCache.get(i);if(a)return a;let o=this.loadScm(r,n);if(!o)return null;try{let t=e.query(o);return this.queryCache.set(i,t),t}catch(e){throw G.warn(`Failed to compile query`,{langDir:r,queryType:n,error:String(e)}),Error(`Failed to compile ${r}/${n}.scm: ${String(e)}`)}}loadScm(e,t){let n=`${e}:${t}`,r=this.scmCache.get(n);if(r!==void 0)return r;let i=x(J,e,`${t}.scm`);try{let e=m(i,`utf-8`);return this.scmCache.set(n,e),e}catch{return G.info(`Query file not found (graceful skip)`,{langDir:e,queryType:t}),null}}dispose(){this.queryCache.clear(),this.scmCache.clear()}static resolveQueryDir(e){return x(J,e)}};function X(e){let t=new Map;for(let n of e.captures)t.set(n.name,Z(n));return{pattern:e.pattern,captures:t}}function Z(e){let{node:t}=e;return{name:e.name,text:t.text,nodeType:t.type,startLine:t.startPosition.row,endLine:t.endPosition.row,startColumn:t.startPosition.column,endColumn:t.endPosition.column,node:t}}new Y,new Y,new Y,new Y,new Y,new Set(`.ts,.tsx,.js,.jsx,.mjs,.cjs,.java,.kt,.kts,.scala,.py,.go,.rs,.rb,.php,.swift,.cs,.c,.cpp,.h,.hpp,.sh,.bash,.ps1,.sql,.graphql,.gql,.proto,.json,.yaml,.yml,.toml,.env,.ini,.cfg,.xml,.pom,.gradle,.tf,.hcl,.lock,.mjs`.split(`,`)),E.restorePoints,new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,E.state]),new Set([`.git`,E.data,E.state,`.turbo`,`.yarn`,`build`,`coverage`,`dist`,`node_modules`]),C(s),new Set(`if_statement.for_statement.for_in_statement.while_statement.do_statement.switch_case.catch_clause.ternary_expression.if_statement.for_statement.while_statement.except_clause.list_comprehension.if_statement.for_statement.enhanced_for_statement.while_statement.catch_clause.ternary_expression.if_statement.for_statement.select_statement.if_expression.for_expression.while_expression.match_arm`.split(`.`));function se(){return S(M(process.cwd()),`replay.jsonl`)}function ce(e={}){let t=se(),n;try{n=m(t,`utf-8`)}catch{return[]}let r=n.trim().split(`
|
|
3
|
-
`).filter(Boolean),i=[];for(let e of r)try{i.push(JSON.parse(e))}catch{}if(e.tool&&(i=i.filter(t=>t.tool===e.tool)),e.source&&(i=i.filter(t=>t.source===e.source)),e.since){let t=e.since;i=i.filter(e=>e.ts>=t)}let a=e.last??20;return i.slice(-a)}C(o),E.data,`script,style,noscript,iframe,svg,nav,footer,header,aside,form,button,input,select,textarea,[role="navigation"],[role="banner"],[role="contentinfo"],[aria-hidden="true"],.sidebar,.nav,.menu,.footer,.header,.ad,.advertisement,.cookie-banner,.popup,.modal`.split(`,`);var Q=e(t()),$=i();function le(){let[e,t]=(0,Q.useState)([]);return(0,Q.useEffect)(()=>{let e=()=>{t(ce({last:30}))};e();let n=setInterval(e,2e3);return()=>clearInterval(n)},[]),(0,$.jsxs)(n,{flexDirection:`column`,borderStyle:`round`,paddingX:1,children:[(0,$.jsx)(r,{bold:!0,color:`cyan`,children:`Activity Log`}),(0,$.jsx)(r,{children:` `}),e.length===0&&(0,$.jsx)(r,{color:`gray`,children:`No activity recorded yet`}),e.slice().reverse().map((e,t)=>{let n=e.ts.split(`T`)[1]?.split(`.`)[0]??e.ts,i=e.status===`ok`?`green`:`red`;return(0,$.jsxs)(r,{children:[(0,$.jsx)(r,{color:`gray`,children:n}),` `,(0,$.jsx)(r,{color:i,children:e.status===`ok`?`✓`:`✗`}),` `,(0,$.jsx)(r,{bold:!0,children:e.tool}),` `,(0,$.jsxs)(r,{color:`gray`,children:[`(`,e.durationMs,`ms)`]})]},`${e.ts}-${t}`)}),(0,$.jsx)(r,{children:` `}),(0,$.jsx)(r,{color:`gray`,children:`Refreshes every 2s │ Showing last 30`})]})}export{le as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
|
|
2
|
-
import{createRequire as e}from"node:module";var t=Object.create,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,a=Object.getPrototypeOf,o=Object.prototype.hasOwnProperty,s=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),c=(e,t,a,s)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=i(t),l=0,u=c.length,d;l<u;l++)d=c[l],!o.call(e,d)&&d!==a&&n(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(s=r(t,d))||s.enumerable});return e},l=(e,r,i)=>(i=e==null?{}:t(a(e)),c(r||!e||!e.__esModule?n(i,`default`,{value:e,enumerable:!0}):i,e)),u=e(import.meta.url);export{u as n,l as r,s as t};
|