@vpxa/aikit 0.1.215 → 0.1.217
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/core/dist/index.d.ts +195 -1
- package/packages/core/dist/index.js +1 -1
- package/packages/embeddings/dist/embedder-worker.js +1 -1
- package/packages/embeddings/dist/index.d.ts +6 -5
- package/packages/embeddings/dist/index.js +1 -1
- package/packages/enterprise-bridge/dist/index.d.ts +3 -11
- package/packages/enterprise-bridge/dist/index.js +1 -1
- package/packages/server/dist/bin.js +11 -11
- package/packages/server/dist/curated-manager-BrtqcmVm.js +7 -0
- package/packages/server/dist/index.d.ts +1 -0
- package/packages/server/dist/index.js +1 -1
- package/packages/server/dist/{promotion-OY53YCsT.js → promotion-BppF9YlR.js} +1 -1
- package/packages/server/dist/{server-DGKTbYuR.js → server-CBbp-_E9.js} +153 -153
- package/packages/server/dist/{server-CL3Jeefd.js → server-jy-ICjJR.js} +153 -153
- package/scaffold/dist/definitions/bodies.mjs +12 -10
- package/scaffold/dist/definitions/models.mjs +1 -1
- package/scaffold/dist/definitions/protocols.mjs +13 -8
- package/packages/server/dist/curated-manager-D1u5qOwK.js +0 -7
|
@@ -11,6 +11,16 @@ import{postTaskLesson as e,preTaskKnowledgeRecall as t}from"./protocols.mjs";con
|
|
|
11
11
|
|
|
12
12
|
> **HARD RULE (Orchestrator):** When gathering context yourself, use \`search\`/\`file_summary\`/\`compact\`/\`digest\`, NOT \`read_file\`/\`grep_search\`. Use \`check({})\`/\`test_run({})\`, NOT \`run_in_terminal\` for tsc/lint/test.
|
|
13
13
|
|
|
14
|
+
## Output Rules (HARD RULE)
|
|
15
|
+
|
|
16
|
+
Follow the **Presentation Priority** (1st Interactive → 2nd Inline Visual → 3rd Plain Text). Orchestrator-specific:
|
|
17
|
+
- 1-3 sentence status updates between batches → plain text (Priority 3)
|
|
18
|
+
- Task plans, batch results, verdicts, progress → ALWAYS \`present\` with template (Priority 1)
|
|
19
|
+
- Summaries, reports, evidence maps → \`present\` inline visual (Priority 2)
|
|
20
|
+
- NEVER output a markdown table — \`present\` can always render it better
|
|
21
|
+
- Add \`actions\` for 🛑 MANDATORY STOP gates (triggers browser transport)
|
|
22
|
+
- CLI mode: same \`present\` surface
|
|
23
|
+
|
|
14
24
|
## Agent Arsenal
|
|
15
25
|
|
|
16
26
|
${e}
|
|
@@ -112,11 +122,11 @@ import{postTaskLesson as e,preTaskKnowledgeRecall as t}from"./protocols.mjs";con
|
|
|
112
122
|
|
|
113
123
|
**Decomposition output format:** Batch N (parallel): Task: [agent] → [files] — [goal]
|
|
114
124
|
|
|
115
|
-
**Task Plan Visualization:**
|
|
125
|
+
**Task Plan Visualization (HARD RULE):** ALWAYS use \`present\` with \`task-plan@1\` template after decomposition. NEVER render task plans as markdown tables — they lose interactivity and status tracking.
|
|
116
126
|
\`\`\`
|
|
117
127
|
present({ schemaVersion: 1, title: "Task Plan: <feature>", template: "task-plan@1", data: { title: "<feature>", phases: [{ id: "phase-1", label: "Phase 1: <name>", batches: [{ id: "batch-1", order: 1, parallel: true, tasks: [{ id: "t1", title: "<task>", agent: "<Agent>", files: ["<path>"], status: "pending" }] }] }] } })
|
|
118
128
|
\`\`\`
|
|
119
|
-
|
|
129
|
+
Fallback: \`task-plan-static@1\` ONLY if \`present\` tool call fails.
|
|
120
130
|
|
|
121
131
|
**Subagent prompt template:**
|
|
122
132
|
1. **Scope** — exact files + boundary
|
|
@@ -184,14 +194,6 @@ import{postTaskLesson as e,preTaskKnowledgeRecall as t}from"./protocols.mjs";con
|
|
|
184
194
|
- \`check({})\` + \`test_run({})\` ONCE after all batches — never per-batch, never via terminal
|
|
185
195
|
- **Receipt consumption:** After \`evidence_map({ action: "gate" })\`, check all receipts have tool-verified evidence.
|
|
186
196
|
|
|
187
|
-
## Output Rules
|
|
188
|
-
|
|
189
|
-
- Terse: 1-3 sentence updates
|
|
190
|
-
- Batch summary = bullets for status + files + decisions
|
|
191
|
-
- Structured data >3 rows, plans, charts, tables, graphs → \`present\`
|
|
192
|
-
- Short confirmations/questions → normal chat
|
|
193
|
-
- CLI mode: same \`present\` surface; add \`actions\` only when needed
|
|
194
|
-
|
|
195
197
|
## Subagent Output Relay
|
|
196
198
|
|
|
197
199
|
Subagent \`present\` calls are invisible. Always tell subagents: no \`present\`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e={Orchestrator:[`Claude Opus 4.6 (copilot)`,`GPT-5.4 (copilot)`,`Auto (copilot)`],Planner:[`Claude Opus 4.6 (copilot)`,`GPT-5.4 (copilot)`,`Auto (copilot)`],Implementer:[`GPT-5.4 (copilot)`,`Gemini 3.1 Pro (Preview) (copilot)`,`GPT-5.3-Codex (copilot)`,`Auto (copilot)`],Frontend:[`GPT-5.4 (copilot)`,`Gemini 3.1 Pro (Preview) (copilot)`,`GPT-5.3-Codex (copilot)`,`Auto (copilot)`],Debugger:[`Claude Opus 4.6 (copilot)`,`GPT-5.4 (copilot)`,`GPT-5.3-Codex (copilot)`,`Auto (copilot)`],Refactor:[`GPT-5.4 (copilot)`,`GPT-5.3-Codex (copilot)`,`Auto (copilot)`],Security:[`Claude Opus 4.6 (copilot)`,`GPT-5.4 (copilot)`,`Auto (copilot)`],Documenter:[`GPT-5.4 (copilot)`,`Gemini 3.1 Pro (Preview) (copilot)`,`Auto (copilot)`],Explorer:[`Gemini 3 Flash (Preview) (copilot)`,`
|
|
1
|
+
const e={Orchestrator:[`Claude Opus 4.6 (copilot)`,`GPT-5.4 (copilot)`,`Auto (copilot)`],Planner:[`Claude Opus 4.6 (copilot)`,`GPT-5.4 (copilot)`,`Auto (copilot)`],Implementer:[`GPT-5.4 (copilot)`,`Gemini 3.1 Pro (Preview) (copilot)`,`GPT-5.3-Codex (copilot)`,`Auto (copilot)`],Frontend:[`GPT-5.4 (copilot)`,`Gemini 3.1 Pro (Preview) (copilot)`,`GPT-5.3-Codex (copilot)`,`Auto (copilot)`],Debugger:[`Claude Opus 4.6 (copilot)`,`GPT-5.4 (copilot)`,`GPT-5.3-Codex (copilot)`,`Auto (copilot)`],Refactor:[`GPT-5.4 (copilot)`,`GPT-5.3-Codex (copilot)`,`Auto (copilot)`],Security:[`Claude Opus 4.6 (copilot)`,`GPT-5.4 (copilot)`,`Auto (copilot)`],Documenter:[`GPT-5.4 (copilot)`,`Gemini 3.1 Pro (Preview) (copilot)`,`Auto (copilot)`],Explorer:[`Claude Haiku 4.5 (copilot)`,`Gemini 3 Flash (Preview) (copilot)`,`Auto (copilot)`],"Researcher-Alpha":[`Claude Opus 4.6 (copilot)`,`Auto (copilot)`],"Researcher-Beta":[`Claude Sonnet 4.6 (copilot)`,`Auto (copilot)`],"Researcher-Gamma":[`GPT-5.4 (copilot)`,`Auto (copilot)`],"Researcher-Delta":[`Gemini 3.1 Pro (Preview) (copilot)`,`Auto (copilot)`],"Code-Reviewer-Alpha":[`GPT-5.4 (copilot)`,`Auto (copilot)`],"Code-Reviewer-Beta":[`Claude Opus 4.6 (copilot)`,`Auto (copilot)`],"Architect-Reviewer-Alpha":[`GPT-5.4 (copilot)`,`Auto (copilot)`],"Architect-Reviewer-Beta":[`Claude Opus 4.6 (copilot)`,`Auto (copilot)`]},t=Object.fromEntries(Object.entries(e).map(([e,t])=>[e,(Array.isArray(t)?t[0]:t)?.replace(/ \(copilot\)$/,``)||`Auto`])),n={Researcher:[`Alpha`,`Beta`,`Gamma`,`Delta`],"Code-Reviewer":[`Alpha`,`Beta`],"Architect-Reviewer":[`Alpha`,`Beta`]},r={Researcher:`Alpha`,"Code-Reviewer":`Alpha`,"Architect-Reviewer":`Alpha`};export{t as CLAUDE_MODELS,e as COPILOT_MODELS,r as PRIMARY_VARIANT,n as VARIANT_GROUPS};
|
|
@@ -354,16 +354,21 @@ Verify each before returning handoff:
|
|
|
354
354
|
|
|
355
355
|
## User Interaction Rules
|
|
356
356
|
|
|
357
|
-
|
|
357
|
+
**Presentation Priority (HARD RULE — applies to ALL output):**
|
|
358
358
|
|
|
359
|
-
|
|
|
360
|
-
|
|
361
|
-
|
|
|
362
|
-
|
|
|
363
|
-
|
|
|
364
|
-
| **CLI mode** (any rich content) | **Structured text + Elicitation** | Keep output text-only; user-facing render belongs to Orchestrator or another non-code agent |
|
|
359
|
+
| Priority | Transport | When to use | Example |
|
|
360
|
+
|----------|-----------|-------------|---------|
|
|
361
|
+
| **1st — Interactive** | Browser (\`present\` with \`actions[]\` or template) | Plans, decisions needing approval, comparisons, status boards, any data >3 rows | \`present({ ..., template: "task-plan@1", actions: [...] })\` |
|
|
362
|
+
| **2nd — Inline Visual** | MCP App (\`present\` without actions) | Reports, summaries, diagrams, progress updates, any structured content | \`present({ ..., blocks: [...] })\` |
|
|
363
|
+
| **3rd — Plain Text** | Markdown in chat | Short confirmations (≤3 sentences), simple questions, status one-liners | "Done. 3 files updated." |
|
|
365
364
|
|
|
366
|
-
|
|
365
|
+
**Rules:**
|
|
366
|
+
- NEVER use plain text when data fits a \`present\` template or has >3 structured items
|
|
367
|
+
- NEVER render tables as markdown when \`present\` can show them interactively
|
|
368
|
+
- Use registered templates when data matches: \`task-plan@1\`, \`report@1\`, \`status-board@1\`, \`timeline@1\`, \`kanban@1\`, \`data-table@1\`, \`checklist@1\`
|
|
369
|
+
- Add \`actions[]\` when user input/approval is needed (triggers browser transport automatically)
|
|
370
|
+
- Elicitation fields for free-form text input alongside any \`present\` call
|
|
371
|
+
- Code-agent subagents: text-only output (Orchestrator renders visually on their behalf)
|
|
367
372
|
|
|
368
373
|
${e(`<PROFILE>`)}
|
|
369
374
|
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{createHash as t}from"node:crypto";import{dirname as n,isAbsolute as r,join as i}from"node:path";import{createLogger as a,serializeError as o}from"../../core/dist/index.js";import{mkdir as s,readFile as c,readdir as l,stat as u,unlink as d,writeFile as f}from"node:fs/promises";import{GIT_REF_SLUG_PATTERN as p,gitAvailable as m,gitCommitToRef as h,gitExec as g,slugForRef as _}from"../../tools/dist/index.js";var v=class{baseDir;constructor(e){this.baseDir=e}async initialize(){await s(this.baseDir,{recursive:!0})}async read(e){let t=i(this.baseDir,e);try{return await c(t,`utf-8`)}catch(e){if(e.code===`ENOENT`)return null;throw e}}async write(e,t,r){let a=i(this.baseDir,e);await s(n(a),{recursive:!0}),await f(a,t,{encoding:`utf-8`,flag:r?.exclusive?`wx`:`w`})}async delete(e){let t=i(this.baseDir,e);try{return await d(t),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}async list(e){let t=[],n=e?[e]:await this.listDirectories();for(let e of n){let n=i(this.baseDir,e),r;try{r=await l(n)}catch{continue}for(let n of r){if(!n.endsWith(`.md`))continue;let r=`${e}/${n}`,a=i(this.baseDir,r);try{let e=await u(a);t.push({path:r,size:e.size})}catch{}}}return t}async exists(e){let t=i(this.baseDir,e);try{return await u(t),!0}catch{return!1}}async listDirectories(){try{return(await l(this.baseDir,{withFileTypes:!0})).filter(e=>e.isDirectory()&&/^[a-z][a-z0-9-]*$/.test(e.name)).map(e=>e.name)}catch{return[]}}async close(){}},y=e({CuratedKnowledgeManager:()=>C});const b=50*1024,x=`refs/aikit/knowledge`,S=a(`server`);var C=class{curatedDir;store;embedder;adapter;constructor(e,t,n,r=new v(e)){this.curatedDir=e,this.store=t,this.embedder=n,this.adapter=r}async remember(e,t,n,r=[]){this.validateCategoryName(n),this.validateContentSize(t);let i=this.slugify(e),a=await this.uniqueRelativePath(n,i),o=new Date().toISOString(),s={title:e,category:n,tags:r,created:o,updated:o,version:1,origin:`curated`,changelog:[{version:1,date:o,reason:`Initial creation`}]},c=this.serializeFile(t,s);try{await this.adapter.write(a,c,{exclusive:!0})}catch(e){throw e.code===`EEXIST`?Error(`Concurrent write collision for "${a}" — retry the operation`):e}try{await this.indexCuratedFile(a,t,s)}catch(e){throw await this.adapter.delete(a).catch(()=>{}),Error(`Remember failed: wrote file but indexing failed — rolled back. ${e.message}`)}return this.gitCommitKnowledge(a,c,`remember: ${e}\n\nCategory: ${n}\nTags: ${r.join(`, `)}`),{path:a}}async update(e,t,n){e=this.guardPath(e),this.validateContentSize(t);let r=await this.adapter.read(e);if(r==null)throw Error(`Curated entry not found: ${e}`);let{frontmatter:i}=this.parseFile(r),a=(i.version??1)+1,o=new Date().toISOString();i.version=a,i.updated=o,i.changelog=[...i.changelog??[],{version:a,date:o,reason:n}];let s=this.serializeFile(t,i);return await this.adapter.write(e,s),await this.indexCuratedFile(e,t,i),this.gitCommitKnowledge(e,s,`update(v${a}): ${i.title}\n\nReason: ${n}\nVersion: ${a}`),{path:e,version:a}}async forget(e,t){if(e=this.guardPath(e),!await this.adapter.delete(e))throw Error(`Curated entry not found: ${e}`);let n=`.ai/curated/${e}`;return await this.store.deleteBySourcePath(n).catch(e=>{S.warn(`File deleted but vector cleanup failed`,{sourcePath:n,...o(e)})}),this.gitDeleteKnowledgeRef(e),{path:e}}async history(e,t=20){if(e=this.guardPath(e),!m(this.curatedDir))return[];let n=this.knowledgeRefForPath(e);if(!n)return[];let r=g([`log`,`--format=%H|%aI|%s`,n,`-n`,String(t)],this.curatedDir);return r?r.split(`
|
|
2
|
-
`).filter(Boolean).map(e=>{let[t,n,...r]=e.split(`|`);return{sha:t,date:n,message:r.join(`|`)}}):[]}async diff(e,t,n){if(e=this.guardPath(e),!m(this.curatedDir))return``;if(!n){let r=await this.history(e,2);if(r.length===0)return``;n=r[0].sha,r.length>1&&!t&&(t=r[1].sha)}return t&&n?g([`diff`,`${t}:entry.md`,`${n}:entry.md`],this.curatedDir)??``:n?g([`show`,`${n}:entry.md`],this.curatedDir)??``:``}async recover(e){if(e=this.guardPath(e),await this.adapter.exists(e))throw Error(`Entry already exists on filesystem: ${e}. Use update() instead.`);if(!m(this.curatedDir))return null;let t=this.knowledgeRefForPath(e);if(!t)return null;let n=g([`show`,`${t}:entry.md`],this.curatedDir);if(!n)return null;await this.adapter.write(e,n);let{frontmatter:r,content:i}=this.parseFile(n);return await this.indexCuratedFile(e,i,r),{path:e,version:r.version??1}}async listOrphaned(){if(!m(this.curatedDir))return[];let e=g([`for-each-ref`,`--format=%(refname)|%(subject)`,`${x}/`],this.curatedDir);if(!e)return[];let t=[];for(let n of e.split(`
|
|
3
|
-
`).filter(Boolean)){let[e,...r]=n.split(`|`),i=r.join(`|`),a=`${e.replace(`${x}/`,``)}.md`;await this.adapter.exists(a)||t.push({ref:e,path:a,lastMessage:i})}return t}async read(e){e=this.guardPath(e);let t=await this.adapter.read(e);if(t==null)throw Error(`Curated entry not found: ${e}`);let{frontmatter:n,content:r}=this.parseFile(t),i=e.split(`/`)[0];return{path:e,title:n.title??e,category:i,tags:n.tags??[],version:n.version??1,created:n.created??``,updated:n.updated??``,contentPreview:r.slice(0,200),content:r}}async list(e){let t=[],n=e?.category?[e.category]:await this.discoverCategories();for(let r of n){let n=await this.adapter.list(r);for(let i of n){let n=await this.adapter.read(i.path);if(n==null)continue;let{frontmatter:a,content:o}=this.parseFile(n);e?.tag&&!(a.tags??[]).includes(e.tag)||t.push({path:i.path,title:a.title??i.path,category:r,tags:a.tags??[],version:a.version??1,created:a.created??``,updated:a.updated??``,contentPreview:o.slice(0,200)})}}return t}async reindexAll(){let e=await this.discoverCategories(),t=[],n=[];for(let r of e){let e=await this.adapter.list(r);for(let r of e){let e=r.path;try{let r=await this.adapter.read(e);if(r==null){t.push(`${e}: read failed`);continue}let{frontmatter:i,content:a}=this.parseFile(r);n.push({relativePath:e,content:a,frontmatter:i})}catch(n){S.error(`Failed to read curated file`,{relativePath:e,...o(n)}),t.push(`${e}: read failed`)}}}if(n.length===0)return{indexed:0,errors:t};let r=await this.embedder.embedBatch(n.map(e=>e.content)),i=new Date().toISOString(),a=n.map(e=>{let t=`.ai/curated/${e.relativePath}`;return{id:this.hashId(t,0),content:e.content,sourcePath:t,contentType:`curated-knowledge`,headingPath:e.frontmatter.title,chunkIndex:0,totalChunks:1,startLine:1,endLine:e.content.split(`
|
|
4
|
-
`).length,fileHash:this.hash(e.content),indexedAt:i,origin:`curated`,tags:e.frontmatter.tags,category:e.frontmatter.category,version:e.frontmatter.version}});return await this.store.upsert(a,r),{indexed:n.length,errors:t}}gitCommitKnowledge(e,t,n){try{if(!m(this.curatedDir))return;let r=this.knowledgeRefForPath(e);if(!r)return;h(r,`entry.md`,t,n,this.curatedDir)}catch{}}gitDeleteKnowledgeRef(e){try{if(!m(this.curatedDir))return;let t=this.knowledgeRefForPath(e);if(!t)return;g([`update-ref`,`-d`,t],this.curatedDir)}catch{}}knowledgeRefForPath(e){let t=e.replace(/\.md$/,``).split(`/`).map(e=>_(e)).join(`/`);return t.split(`/`).every(e=>p.test(e))?`${x}/${t}`:null}async indexCuratedFile(e,t,n){let r=await this.embedder.embed(t),i=`.ai/curated/${e}`,a=new Date().toISOString(),o={id:this.hashId(i,0),content:t,sourcePath:i,contentType:`curated-knowledge`,headingPath:n.title,chunkIndex:0,totalChunks:1,startLine:1,endLine:t.split(`
|
|
5
|
-
`).length,fileHash:this.hash(t),indexedAt:a,origin:`curated`,tags:n.tags,category:n.category,version:n.version};await this.store.upsert([o],[r])}async discoverCategories(){return this.adapter.listDirectories()}guardPath(e){let t=e.replace(/^\.ai\/curated\//,``);if(t.endsWith(`.md`)||(t+=`.md`),t.includes(`..`)||r(t))throw Error(`Invalid path: ${t}. Must be relative within .ai/curated/ directory.`);let n=t.split(`/`)[0];return this.validateCategoryName(n),t}validateCategoryName(e){if(!/^[a-z][a-z0-9-]*$/.test(e))throw Error(`Invalid category name: "${e}". Must be lowercase kebab-case (e.g., "decisions", "api-contracts").`)}validateContentSize(e){if(Buffer.byteLength(e,`utf-8`)>b)throw Error(`Content exceeds maximum size of ${b/1024}KB`)}slugify(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``).slice(0,80)}async uniqueRelativePath(e,t){let n=`${e}/${t}.md`;if(!await this.adapter.exists(n))return n;for(let n=2;n<=100;n++){let r=`${e}/${t}-${n}.md`;if(!await this.adapter.exists(r))return r}throw Error(`Too many entries with slug "${t}" in category "${e}"`)}hash(e){return t(`sha256`).update(e).digest(`hex`).slice(0,16)}hashId(e,t){return this.hash(`${e}::${t}`)}serializeFile(e,t){return`${[`---`,`title: "${t.title.replace(/"/g,`\\"`)}"`,`category: ${t.category}`,`tags: [${t.tags.map(e=>`"${e}"`).join(`, `)}]`,`created: ${t.created}`,`updated: ${t.updated}`,`version: ${t.version}`,`origin: ${t.origin}`,`changelog:`,...t.changelog.map(e=>` - version: ${e.version}\n date: ${e.date}\n reason: "${e.reason.replace(/"/g,`\\"`)}"`),`---`].join(`
|
|
6
|
-
`)}\n\n${e}\n`}parseFile(e){let t=e.match(/^---\n([\s\S]*?)\n---\n\n?([\s\S]*)$/);if(!t)return{frontmatter:{title:`Untitled`,category:`notes`,tags:[],created:``,updated:``,version:1,origin:`curated`,changelog:[]},content:e};let n=t[1],r=t[2].trim(),i={},a=[],o=n.split(`
|
|
7
|
-
`),s=!1,c={};for(let e of o){if(/^changelog:\s*$/.test(e)){s=!0;continue}if(s){let t=e.match(/^\s+-\s+version:\s*(\d+)$/);if(t){c.version!=null&&a.push(c),c={version:parseInt(t[1],10)};continue}let n=e.match(/^\s+date:\s*(.+)$/);if(n){c.date=n[1].trim();continue}let r=e.match(/^\s+reason:\s*"?(.*?)"?\s*$/);if(r){c.reason=r[1];continue}/^\w/.test(e)&&(s=!1,c.version!=null&&a.push(c),c={});continue}let t=e.match(/^(\w+):\s*(.*)$/);if(t){let e=t[1],n=t[2];typeof n==`string`&&n.startsWith(`[`)&&n.endsWith(`]`)?n=n.slice(1,-1).split(`,`).map(e=>e.trim().replace(/^"|"$/g,``)).filter(e=>e.length>0):typeof n==`string`&&/^\d+$/.test(n)?n=parseInt(n,10):typeof n==`string`&&n.startsWith(`"`)&&n.endsWith(`"`)&&(n=n.slice(1,-1)),i[e]=n}}return c.version!=null&&a.push(c),{frontmatter:{title:i.title??`Untitled`,category:i.category??`notes`,tags:i.tags??[],created:i.created??``,updated:i.updated??``,version:i.version??1,origin:`curated`,changelog:a},content:r}}};export{y as n,v as r,C as t};
|