allyhub 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/cli-version.js +2 -0
  2. package/dist/commands/add.js +5 -5
  3. package/dist/commands/dev.js +2 -2
  4. package/dist/commands/mcp.js +1 -1
  5. package/dist/commands/model.js +1 -1
  6. package/dist/commands/render.js +1 -1
  7. package/dist/commands/skills.js +3 -3
  8. package/dist/main.js +7 -7
  9. package/dist/works.js +1 -1
  10. package/editor-app/view.html +3 -3
  11. package/editor-web/assets/chevron-left-W6sP7nB1.js +1 -0
  12. package/editor-web/assets/{chevron-up-BMNXDEBs.js → chevron-up-566GQpAm.js} +1 -1
  13. package/editor-web/assets/{dist-B4VKfY-H.js → dist-BKDr73BR.js} +4 -4
  14. package/editor-web/assets/dist-CPCNTYVu.js +8 -0
  15. package/editor-web/assets/{dist-Coblfc3T.js → dist-C_NajYp0.js} +1 -1
  16. package/editor-web/assets/{dist-BcInw4os.js → dist-mA6NrAKh.js} +34 -34
  17. package/editor-web/assets/{floating-ui.react-dom-DSyn5TRd.js → floating-ui.react-dom-BUxFRF6t.js} +1 -1
  18. package/editor-web/assets/index-CFZhjTQW.js +56 -0
  19. package/editor-web/assets/index-DgU-lyX6.css +2 -0
  20. package/editor-web/assets/{react-Bo429Bov.js → react-Ff_buMj8.js} +1 -1
  21. package/editor-web/assets/{undo-2-CWgOKQ3L.js → undo-2-BKFItM3X.js} +1 -1
  22. package/editor-web/index.html +4 -4
  23. package/node_modules/@allyhub-next/audio/package.json +1 -1
  24. package/node_modules/@allyhub-next/browser/package.json +1 -1
  25. package/node_modules/@allyhub-next/build/dist/scan.js +1 -1
  26. package/node_modules/@allyhub-next/build/package.json +1 -1
  27. package/node_modules/@allyhub-next/check/dist/check.js +3 -3
  28. package/node_modules/@allyhub-next/check/package.json +1 -1
  29. package/node_modules/@allyhub-next/cloud/dist/index.js +1 -1
  30. package/node_modules/@allyhub-next/cloud/dist/token.js +1 -1
  31. package/node_modules/@allyhub-next/cloud/package.json +1 -1
  32. package/node_modules/@allyhub-next/components/package.json +1 -1
  33. package/node_modules/@allyhub-next/dev-server/dist/live.js +1 -1
  34. package/node_modules/@allyhub-next/dev-server/dist/tools.js +1 -1
  35. package/node_modules/@allyhub-next/dev-server/package.json +1 -1
  36. package/node_modules/@allyhub-next/doc/package.json +1 -1
  37. package/node_modules/@allyhub-next/export/dist/export.d.ts +5 -2
  38. package/node_modules/@allyhub-next/export/dist/export.js +2 -2
  39. package/node_modules/@allyhub-next/export/package.json +1 -1
  40. package/node_modules/@allyhub-next/formats/dist/items.d.ts +5 -0
  41. package/node_modules/@allyhub-next/formats/dist/items.js +1 -1
  42. package/node_modules/@allyhub-next/formats/dist/layout.d.ts +2 -0
  43. package/node_modules/@allyhub-next/formats/dist/layout.js +1 -1
  44. package/node_modules/@allyhub-next/formats/package.json +1 -1
  45. package/node_modules/@allyhub-next/measure/package.json +1 -1
  46. package/node_modules/@allyhub-next/media/package.json +1 -1
  47. package/node_modules/@allyhub-next/model/dist/report.d.ts +1 -1
  48. package/node_modules/@allyhub-next/model/package.json +1 -1
  49. package/node_modules/@allyhub-next/project/package.json +1 -1
  50. package/node_modules/@allyhub-next/protocol/dist/app.d.ts +3 -0
  51. package/node_modules/@allyhub-next/protocol/dist/auth.d.ts +17 -0
  52. package/node_modules/@allyhub-next/protocol/dist/auth.js +1 -1
  53. package/node_modules/@allyhub-next/protocol/dist/cli.d.ts +1 -1
  54. package/node_modules/@allyhub-next/protocol/dist/cli.js +1 -1
  55. package/node_modules/@allyhub-next/protocol/dist/editor.d.ts +4 -0
  56. package/node_modules/@allyhub-next/protocol/dist/registry.d.ts +3 -1
  57. package/node_modules/@allyhub-next/protocol/dist/registry.js +1 -1
  58. package/node_modules/@allyhub-next/protocol/dist/routes.js +1 -1
  59. package/node_modules/@allyhub-next/protocol/dist/tools.d.ts +1 -0
  60. package/node_modules/@allyhub-next/protocol/package.json +1 -1
  61. package/node_modules/@allyhub-next/registry/package.json +1 -1
  62. package/node_modules/@allyhub-next/render/package.json +1 -1
  63. package/node_modules/@allyhub-next/runtime/dist/page.js +1 -1
  64. package/node_modules/@allyhub-next/runtime/package.json +1 -1
  65. package/node_modules/@allyhub-next/runtimes/package.json +1 -1
  66. package/node_modules/@allyhub-next/scaffold/dist/index.js +5 -5
  67. package/node_modules/@allyhub-next/scaffold/package.json +1 -1
  68. package/node_modules/@allyhub-next/scenery/package.json +1 -1
  69. package/node_modules/@allyhub-next/scenery-host/dist/bundle.d.ts +1 -0
  70. package/node_modules/@allyhub-next/scenery-host/dist/bundle.js +3 -3
  71. package/node_modules/@allyhub-next/scenery-host/dist/model-stage.d.ts +32 -0
  72. package/node_modules/@allyhub-next/scenery-host/dist/model-stage.js +3 -0
  73. package/node_modules/@allyhub-next/scenery-host/package.json +1 -1
  74. package/node_modules/@allyhub-next/sheet/package.json +1 -1
  75. package/node_modules/@allyhub-next/site/package.json +1 -1
  76. package/node_modules/@allyhub-next/stage/package.json +1 -1
  77. package/node_modules/@allyhub-next/video-core/dist/problem.d.ts +4 -0
  78. package/node_modules/@allyhub-next/video-core/dist/problem.js +1 -1
  79. package/node_modules/@allyhub-next/video-core/package.json +1 -1
  80. package/package.json +28 -28
  81. package/editor-web/assets/chevron-left-D1vfOP5S.js +0 -1
  82. package/editor-web/assets/dist-BIEloJVS.js +0 -8
  83. package/editor-web/assets/index-BSFR4plz.css +0 -2
  84. package/editor-web/assets/index-Dc8FX_sp.js +0 -56
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/runtime",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/runtimes",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,16 +1,16 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{mkdir as d,readFile as h,writeFile as p}from"node:fs/promises";import{basename as f,join as a,resolve as u}from"node:path";export const PROJECT_PACKAGES={cli:"allyhub",sdk:"@allyhub/sdk"},PROJECT_TYPESCRIPT="~5.9.3",PROJECT_GITIGNORE=`node_modules/
2
+ import{mkdir as d,readFile as h,writeFile as p}from"node:fs/promises";import{basename as f,join as a,resolve as m}from"node:path";export const PROJECT_PACKAGES={cli:"allyhub",sdk:"@allyhub/sdk"},PROJECT_TYPESCRIPT="~5.9.3",PROJECT_GITIGNORE=`node_modules/
3
3
  .allyhub/
4
4
  .playwright-cli/
5
- `,SDK_DOCS=[["project.md","folders, items and entry files, imports, scripts and shared text, allyhub.config.ts, fonts"],["contract.md","a frame drawn from its time alone, drawn offline, problems and their rules"],["video.md","video(), formats, part(), layers and stacking, transitions, the look, capture, post"],["layers.md","defineComponent(), custom(), the layer's ctx, DOM, animation, path, noise and input helpers, starter components"],["speech.md","take(), say(), word references, anchors, shown and said, captions, edits files"],["sound.md","music, sound effects, the mix, the master, mic"],["footage.md","footage(): placing, cropping, reframing, faces and mattes, a video item inside another"],["slides.md","slides(), pages, speaker notes"],["batches.md","the matrix: dimensions, slots, pools, rules, combos"],["scenery.md","3D sceneries: defineScenery(), cameras and moves, the scenery() layer, screens"],["modeling.md","props modelled in code with @allyhub-next/model"],["docs.md","a doc (doc.mdx): its title, the Markdown and tags it reads, pictures and links, comments"],["sheets.md","a sheet (sheet.csv, sheet.yaml): column types and formats, comments, check, import, render"],["defaults.md","every default of the piece API and the option that changes it"]],REGISTRY="https://allyhub.com/r",MASTER_SKILL="allyhub";export function workSkills(e){return e.filter(t=>t.type==="allyhub:skill"&&t.name!==MASTER_SKILL).map(t=>({name:t.name,description:t.description.replaceAll(/\s+/gu," ").trim()}))}export const REGISTRY_WAIT_MS=5e3;const g=e=>{const t=e?.items;return Array.isArray(t)&&t.every(s=>{const n=s;return typeof n?.name=="string"&&typeof n.type=="string"&&typeof n.description=="string"})};export async function readWorkSkills(e=REGISTRY,t=REGISTRY_WAIT_MS){try{const s=/^https?:\/\//u.test(e)?await fetch(new URL("registry.json",e.endsWith("/")?e:`${e}/`),{signal:AbortSignal.timeout(t)}).then(n=>n.ok?n.json():void 0):JSON.parse(await h(a(e,"registry.json"),"utf8"));return g(s)?workSkills(s.items):void 0}catch{return}}export const AGENT_RULES_BEGIN="<!-- BEGIN:allyhub-agent-rules -->",AGENT_RULES_END="<!-- END:allyhub-agent-rules -->";function k(e){return e===void 0||e.length===0?["`allyhub skills` lists AllyHub's work skills, each how to make one kind of work; `allyhub skills show <name>` prints one, `allyhub add <name>` adds it to this project."]:["AllyHub's work skills, each how to make one kind of work, as the registry had them when this project was made (`allyhub skills` lists them now, `allyhub skills show <name>` prints one):","",...e.map(t=>`- \`${t.name}\` (\`allyhub add ${t.name}\`): ${t.description}`)]}export function agentRules(e){return[AGENT_RULES_BEGIN,"",`Before writing or changing a video, a deck, a doc, a sheet or a 3D scenery, read the files it needs in the SDK's docs, for the version this project builds with: \`node_modules/${PROJECT_PACKAGES.sdk}/docs/\` once the project has installed it; without it, \`allyhub help\` says where they are (the SDK the CLI lends). The API has changed from what you may know; the docs and the SDK's types are right.`,"",...SDK_DOCS.map(([t,s])=>`- ${t}: ${s}`),"","`allyhub help` lists AllyHub's commands (`npx allyhub help` once the project has installed it); `allyhub help <command>` says what one does.","",...k(e),"",AGENT_RULES_END].join(`
5
+ `,SDK_DOCS=[["project.md","folders, items and entry files, imports, scripts and shared text, allyhub.config.ts, fonts"],["contract.md","a frame drawn from its time alone, drawn offline, problems and their rules"],["video.md","video(), formats, part(), layers and stacking, transitions, the look, capture, post"],["layers.md","defineComponent(), custom(), the layer's ctx, DOM, animation, path, noise and input helpers, starter components"],["speech.md","take(), say(), word references, anchors, shown and said, captions, edits files"],["sound.md","music, sound effects, the mix, the master, mic"],["footage.md","footage(): placing, cropping, reframing, faces and mattes, a video item inside another"],["slides.md","slides(), pages, speaker notes"],["batches.md","the matrix: dimensions, slots, pools, rules, combos"],["scenery.md","3D sceneries: defineScenery(), cameras and moves, the scenery() layer, screens"],["modeling.md","props modelled in code with @allyhub-next/model"],["docs.md","a doc (doc.mdx): its title, the Markdown and tags it reads, pictures and links, comments"],["sheets.md","a sheet (sheet.csv, sheet.yaml): column types and formats, comments, check, import, render"],["defaults.md","every default of the piece API and the option that changes it"]],REGISTRY="https://allyhub.com/r",MASTER_SKILL="allyhub";export function workSkills(e){return e.filter(t=>t.type==="allyhub:skill"&&t.name!==MASTER_SKILL).map(t=>({name:t.name,description:t.description.replaceAll(/\s+/gu," ").trim()}))}export const REGISTRY_WAIT_MS=5e3;const g=e=>{const t=e?.items;return Array.isArray(t)&&t.every(s=>{const n=s;return typeof n?.name=="string"&&typeof n.type=="string"&&typeof n.description=="string"})};export async function readWorkSkills(e=REGISTRY,t=REGISTRY_WAIT_MS){try{const s=/^https?:\/\//u.test(e)?await fetch(new URL("registry.json",e.endsWith("/")?e:`${e}/`),{signal:AbortSignal.timeout(t)}).then(n=>n.ok?n.json():void 0):JSON.parse(await h(a(e,"registry.json"),"utf8"));return g(s)?workSkills(s.items):void 0}catch{return}}export const AGENT_RULES_BEGIN="<!-- BEGIN:allyhub-agent-rules -->",AGENT_RULES_END="<!-- END:allyhub-agent-rules -->";function k(e){return e===void 0||e.length===0?["`allyhub skills` lists AllyHub's work skills, each how to make one kind of work; `allyhub skills show <name>` prints one, `allyhub add skill/<name>` adds it to this project."]:["AllyHub's work skills, each how to make one kind of work, as the registry had them when this project was made (`allyhub skills` lists them now, `allyhub skills show <name>` prints one):","",...e.map(t=>`- \`${t.name}\` (\`allyhub add skill/${t.name}\`): ${t.description}`)]}export function agentRules(e){return[AGENT_RULES_BEGIN,"",`Before writing or changing a video, a deck, a doc, a sheet, a 3D scenery or a 3D model, read the files it needs in the SDK's docs, for the version this project builds with: \`node_modules/${PROJECT_PACKAGES.sdk}/docs/\` once the project has installed it; without it, \`allyhub help\` says where they are (the SDK the CLI lends). The API has changed from what you may know; the docs and the SDK's types are right.`,"",...SDK_DOCS.map(([t,s])=>`- ${t}: ${s}`),"","`allyhub help` lists AllyHub's commands (`npx allyhub help` once the project has installed it); `allyhub help <command>` says what one does.","",...k(e),"",AGENT_RULES_END].join(`
6
6
  `)}export function projectAgents(e){return`# AllyHub project
7
7
 
8
- This folder is an AllyHub project. Videos and 3D sceneries are TypeScript, docs MDX, sheets CSV: each is a folder with its entry file (\`video.ts\`, \`scenery.ts\`, \`doc.mdx\`, \`sheet.csv\`), wherever it suits the project.
8
+ This folder is an AllyHub project. Videos, 3D sceneries and 3D models are TypeScript, docs MDX, sheets CSV: each is a folder with its entry file (\`video.ts\`, \`scenery.ts\`, \`model.ts\`, \`doc.mdx\`, \`sheet.csv\`), wherever it suits the project; a model is made once and put in any scenery that imports it.
9
9
 
10
10
  - A video or a scenery is code: where the project has no package.json yet, \`npm create allyhub@latest .\` then \`npm install\`.
11
11
 
12
12
  ${agentRules(e)}
13
13
  `}export const PROJECT_CLAUDE=`@AGENTS.md
14
14
  `,PROJECT_TSCONFIG=`${JSON.stringify({compilerOptions:{target:"ES2022",module:"ESNext",moduleResolution:"Bundler",lib:["ES2022","DOM","DOM.Iterable"],types:[`${PROJECT_PACKAGES.sdk}/client`,`${PROJECT_PACKAGES.cli}/client`],strict:!0,noEmit:!0,skipLibCheck:!0,verbatimModuleSyntax:!0,allowImportingTsExtensions:!0},include:["**/*.ts",".allyhub/cache/types"],exclude:["node_modules"]},null,2)}
15
- `;export function packageName(e){const t=e.toLowerCase().normalize("NFKD").replace(/\p{M}/gu,"").replace(/[^\w.-]+/gu,"-").replace(/^[-._]+|[-._]+$/gu,"").slice(0,214);return t===""?"allyhub-project":t}const c=e=>h(e).then(()=>!0,()=>!1);export async function writeAgentFiles(e,t){const s=u(e);await d(s,{recursive:!0});const n=[];for(const[o,i]of[["AGENTS.md",projectAgents(t)],["CLAUDE.md",PROJECT_CLAUDE]])await c(a(s,o))||(await p(a(s,o),i,{flag:"wx"}),n.push(o));return n}export async function startProject(e,t){const s=u(e);if(await c(a(s,"package.json")))throw new Error(`${s} already has a package.json: add AllyHub to it with npm install ${PROJECT_PACKAGES.cli} ${PROJECT_PACKAGES.sdk}.`);const n=packageName(f(s)),o=r=>t.packages?.[r]??t.version,i={name:n,version:"0.0.0",private:!0,type:"module",scripts:{dev:"allyhub dev",check:"allyhub check",render:"allyhub render",typecheck:"tsc --noEmit"},dependencies:{[PROJECT_PACKAGES.cli]:o(PROJECT_PACKAGES.cli),[PROJECT_PACKAGES.sdk]:o(PROJECT_PACKAGES.sdk)},devDependencies:{typescript:PROJECT_TYPESCRIPT}},m=[["package.json",`${JSON.stringify(i,null,2)}
16
- `],["tsconfig.json",PROJECT_TSCONFIG],[".gitignore",PROJECT_GITIGNORE]];await d(s,{recursive:!0});const l=[];for(const[r,y]of m)await c(a(s,r))||(await p(a(s,r),y,{flag:"wx"}),l.push(r));return l.push(...await writeAgentFiles(s,t.skills)),{folder:s,name:n,files:l}}
15
+ `;export function packageName(e){const t=e.toLowerCase().normalize("NFKD").replace(/\p{M}/gu,"").replace(/[^\w.-]+/gu,"-").replace(/^[-._]+|[-._]+$/gu,"").slice(0,214);return t===""?"allyhub-project":t}const c=e=>h(e).then(()=>!0,()=>!1);export async function writeAgentFiles(e,t){const s=m(e);await d(s,{recursive:!0});const n=[];for(const[o,i]of[["AGENTS.md",projectAgents(t)],["CLAUDE.md",PROJECT_CLAUDE]])await c(a(s,o))||(await p(a(s,o),i,{flag:"wx"}),n.push(o));return n}export async function startProject(e,t){const s=m(e);if(await c(a(s,"package.json")))throw new Error(`${s} already has a package.json: add AllyHub to it with npm install ${PROJECT_PACKAGES.cli} ${PROJECT_PACKAGES.sdk}.`);const n=packageName(f(s)),o=r=>t.packages?.[r]??t.version,i={name:n,version:"0.0.0",private:!0,type:"module",scripts:{dev:"allyhub dev",check:"allyhub check",render:"allyhub render",typecheck:"tsc --noEmit"},dependencies:{[PROJECT_PACKAGES.cli]:o(PROJECT_PACKAGES.cli),[PROJECT_PACKAGES.sdk]:o(PROJECT_PACKAGES.sdk)},devDependencies:{typescript:PROJECT_TYPESCRIPT}},u=[["package.json",`${JSON.stringify(i,null,2)}
16
+ `],["tsconfig.json",PROJECT_TSCONFIG],[".gitignore",PROJECT_GITIGNORE]];await d(s,{recursive:!0});const l=[];for(const[r,y]of u)await c(a(s,r))||(await p(a(s,r),y,{flag:"wx"}),l.push(r));return l.push(...await writeAgentFiles(s,t.skills)),{folder:s,name:n,files:l}}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/scaffold",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/scenery",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,5 +1,6 @@
1
1
  import { type Plugin, type UserVite } from "@allyhub-next/build";
2
2
  /** Where a stage serves three.js's decoders (draco/, basis/): this folder beside its pieces/ and chunks/. */
3
+ export { stageCameras, writeModelStage } from "./model-stage.js";
3
4
  export declare const THREE_LIBS = "three-libs";
4
5
  /** Where a stage serves the wasm files a scenery page loads. */
5
6
  export declare const WASM_DIR = "wasm";
@@ -1,6 +1,6 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{realpathSync as _}from"node:fs";import{cp as S,copyFile as d,mkdir as y,writeFile as v}from"node:fs/promises";import{createRequire as W}from"node:module";import{dirname as l,join as o,relative as j,sep as p}from"node:path";import{fileURLToPath as c}from"node:url";import{bundleForStage as k}from"@allyhub-next/build";import{entryKind as D}from"@allyhub-next/formats";export const THREE_LIBS="three-libs",WASM_DIR="wasm";const i="@allyhub-next/scenery-host",E=new Set(["three"]),h=W(import.meta.url);export function threeLibsDir(){return l(l(c(import.meta.resolve("three/addons/libs/draco/draco_decoder.wasm"))))}export function manifoldWasmFile(){return h.resolve("manifold-3d/manifold.wasm")}export function xatlasWasmFile(){return h.resolve("xatlas-web/dist/xatlas-web.wasm")}export async function copyDecoders(e){const r=threeLibsDir();for(const t of["draco","basis"])await S(o(r,t),o(e,THREE_LIBS,t),{recursive:!0})}function O(e){const r=e.split("/");return e.startsWith("@")?r.slice(0,2).join("/"):r[0]??e}export function lendThree(e){return{name:"allyhub-scenery-three",enforce:"pre",resolveId(r){const t=O(r);if(!E.has(t)||e.dependencies.has(t))return null;try{return c(import.meta.resolve(r))}catch{return null}}}}export function hostResolve(){return{name:"allyhub-scenery-host",enforce:"pre",resolveId(e){return e!==i&&!e.startsWith(`${i}/`)?null:c(import.meta.resolve(e))}}}const b=/(^|\n)export default\s+/;function w(e){let r=e;try{r=_(e)}catch{}return t=>{for(const s of[r,e]){const n=j(s,t).split(p).join("/");if(!n.startsWith("..")&&!n.startsWith("/"))return n}}}export function sceneryModules(e){const r=w(e.root);return{name:"allyhub-scenery-modules",enforce:"post",transform(t,s){const n=r(s.replace(/[?#].*$/,""));return n===void 0||D(n)!=="scenery"||!b.test(t)?null:{code:`${t.replace(b,"$1const __allyhubScenery = ")}
2
+ import{realpathSync as _}from"node:fs";import{cp as S,copyFile as d,mkdir as p,writeFile as v}from"node:fs/promises";import{createRequire as W}from"node:module";import{dirname as l,join as o,relative as j,sep as y}from"node:path";import{fileURLToPath as c}from"node:url";import{bundleForStage as k}from"@allyhub-next/build";import{entryKind as D}from"@allyhub-next/formats";export{stageCameras,writeModelStage}from"./model-stage.js";export const THREE_LIBS="three-libs",WASM_DIR="wasm";const i="@allyhub-next/scenery-host",E=new Set(["three"]),h=W(import.meta.url);export function threeLibsDir(){return l(l(c(import.meta.resolve("three/addons/libs/draco/draco_decoder.wasm"))))}export function manifoldWasmFile(){return h.resolve("manifold-3d/manifold.wasm")}export function xatlasWasmFile(){return h.resolve("xatlas-web/dist/xatlas-web.wasm")}export async function copyDecoders(e){const r=threeLibsDir();for(const t of["draco","basis"])await S(o(r,t),o(e,THREE_LIBS,t),{recursive:!0})}function O(e){const r=e.split("/");return e.startsWith("@")?r.slice(0,2).join("/"):r[0]??e}export function lendThree(e){return{name:"allyhub-scenery-three",enforce:"pre",resolveId(r){const t=O(r);if(!E.has(t)||e.dependencies.has(t))return null;try{return c(import.meta.resolve(r))}catch{return null}}}}export function hostResolve(){return{name:"allyhub-scenery-host",enforce:"pre",resolveId(e){return e!==i&&!e.startsWith(`${i}/`)?null:c(import.meta.resolve(e))}}}const b=/(^|\n)export default\s+/;function w(e){let r=e;try{r=_(e)}catch{}return t=>{for(const a of[r,e]){const n=j(a,t).split(y).join("/");if(!n.startsWith("..")&&!n.startsWith("/"))return n}}}export function sceneryModules(e){const r=w(e.root);return{name:"allyhub-scenery-modules",enforce:"post",transform(t,a){const n=r(a.replace(/[?#].*$/,""));return n===void 0||D(n)!=="scenery"||!b.test(t)?null:{code:`${t.replace(b,"$1const __allyhubScenery = ")}
3
3
  import { markScenery as __allyhubMark } from ${JSON.stringify(`${i}/module`)};
4
4
  export default __allyhubMark(__allyhubScenery, ${JSON.stringify(n)});
5
- `,map:null}}}}const T=e=>e.replace(/\.[^.]+$/,"").replace(/[^A-Za-z0-9]+/g,"_").replace(/^_+|_+$/g,"");export async function bundleScenery(e){const r=`scenery__${T(e.file)}`,t=o(e.outDir,"sceneries",`${r}.entry.js`);await y(l(t),{recursive:!0});const s=o(e.root,e.file).split(p).join("/");await v(t,["// Written by allyhub for a scenery page: the scenery and its host, one bundle.",`export { default as scenery } from ${JSON.stringify(s)};`,`export * from ${JSON.stringify(i)};`,""].join(`
6
- `));const n=o(e.outDir,"stage"),u=await k({root:e.root,entries:{[r]:t},outDir:n,plugins:[hostResolve(),lendThree({dependencies:e.dependencies}),sceneryModules({root:e.root}),...e.plugins],...e.user?{user:e.user}:{}}),f=u.entries[r];if(!f)throw new Error(`The scenery ${e.file} did not bundle.`);const x=w(e.root),m=new Set;for(const g of Object.values(u.chunks))for(const $ of g.modules){const a=x($.replace(/[?#].*$/,""));a!==void 0&&!a.includes("node_modules")&&!a.startsWith(".allyhub/")&&m.add(a)}return await y(o(n,WASM_DIR),{recursive:!0}),await d(manifoldWasmFile(),o(n,WASM_DIR,"manifold.wasm")),await d(xatlasWasmFile(),o(n,WASM_DIR,"xatlas.wasm")),await copyDecoders(n),{module:`stage/${f.file}`,decoders:`stage/${THREE_LIBS}/`,manifoldWasm:`stage/${WASM_DIR}/manifold.wasm`,xatlasWasm:`stage/${WASM_DIR}/xatlas.wasm`,files:[...m].sort()}}
5
+ `,map:null}}}}const T=e=>e.replace(/\.[^.]+$/,"").replace(/[^A-Za-z0-9]+/g,"_").replace(/^_+|_+$/g,"");export async function bundleScenery(e){const r=`scenery__${T(e.file)}`,t=o(e.outDir,"sceneries",`${r}.entry.js`);await p(l(t),{recursive:!0});const a=o(e.root,e.file).split(y).join("/");await v(t,["// Written by allyhub for a scenery page: the scenery and its host, one bundle.",`export { default as scenery } from ${JSON.stringify(a)};`,`export * from ${JSON.stringify(i)};`,""].join(`
6
+ `));const n=o(e.outDir,"stage"),u=await k({root:e.root,entries:{[r]:t},outDir:n,plugins:[hostResolve(),lendThree({dependencies:e.dependencies}),sceneryModules({root:e.root}),...e.plugins],...e.user?{user:e.user}:{}}),f=u.entries[r];if(!f)throw new Error(`The scenery ${e.file} did not bundle.`);const x=w(e.root),m=new Set;for(const g of Object.values(u.chunks))for(const $ of g.modules){const s=x($.replace(/[?#].*$/,""));s!==void 0&&!s.includes("node_modules")&&!s.startsWith(".allyhub/")&&m.add(s)}return await p(o(n,WASM_DIR),{recursive:!0}),await d(manifoldWasmFile(),o(n,WASM_DIR,"manifold.wasm")),await d(xatlasWasmFile(),o(n,WASM_DIR,"xatlas.wasm")),await copyDecoders(n),{module:`stage/${f.file}`,decoders:`stage/${THREE_LIBS}/`,manifoldWasm:`stage/${WASM_DIR}/manifold.wasm`,xatlasWasm:`stage/${WASM_DIR}/xatlas.wasm`,files:[...m].sort()}}
@@ -0,0 +1,32 @@
1
+ type Vec3 = [number, number, number];
2
+ /** A stage camera: where it is, what it looks at, its lens. */
3
+ export interface StageCamera {
4
+ position: Vec3;
5
+ target: Vec3;
6
+ lens: number;
7
+ up?: Vec3;
8
+ }
9
+ /** The stage's cameras: the model whole from the front, three quarters, the side and above. */
10
+ export declare function stageCameras(box: {
11
+ min: Vec3;
12
+ max: Vec3;
13
+ }): {
14
+ front: StageCamera;
15
+ threeQuarter: StageCamera;
16
+ side: StageCamera;
17
+ top: StageCamera;
18
+ };
19
+ /**
20
+ * Writes the scenery that shows a model alone into `outDir` (a folder in
21
+ * the project), as `model-stage/<model's folder>/scenery.ts`, and returns
22
+ * its project path, for `bundleScenery` as any scenery's.
23
+ */
24
+ export declare function writeModelStage(opts: {
25
+ root: string;
26
+ /** The model module, a project path. */
27
+ model: string;
28
+ /** A folder of the project's, for files written for it. */
29
+ outDir: string;
30
+ }): Promise<string>;
31
+ export {};
32
+ //# sourceMappingURL=model-stage.d.ts.map
@@ -0,0 +1,3 @@
1
+ /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
+ import{mkdir as S,writeFile as H}from"node:fs/promises";import{dirname as h,join as u,relative as y,sep as p}from"node:path";import{CACHE_DIR as $}from"@allyhub-next/formats";import{buildModule as I}from"@allyhub-next/model/build";const m=35;async function R(n,t){const{report:c}=await I(u(n,t),{root:n,cache:u(n,$,"model")}),i=[1/0,1/0,1/0],e=[-1/0,-1/0,-1/0];for(const o of c.objects){if(!o.bounds)continue;const[l,f,d]=o.bounds.min,[s,g,E]=o.bounds.max,M=[l,d,-g],x=[s,E,-f];for(let r=0;r<3;r++)i[r]=Math.min(i[r]??0,M[r]??0),e[r]=Math.max(e[r]??0,x[r]??0)}return Number.isFinite(i[0])?{min:i,max:e}:{min:[-.5,0,-.5],max:[.5,1,.5]}}const a=n=>Math.round(n*1e4)/1e4,w=n=>[a(n[0]),a(n[1]),a(n[2])];export function stageCameras(n){const t=[(n.min[0]+n.max[0])/2,(n.min[1]+n.max[1])/2,(n.min[2]+n.max[2])/2],i=Math.max(.01,Math.hypot(n.max[0]-n.min[0],n.max[1]-n.min[1],n.max[2]-n.min[2])/2)/Math.sin(Math.atan(12/m))*1.08,e=(l,f,d)=>{const s=Math.hypot(l,f,d);return w([t[0]+l/s*i,t[1]+f/s*i,t[2]+d/s*i])},o=w(t);return{front:{position:e(0,.18,1),target:o,lens:m},threeQuarter:{position:e(1,.5,1),target:o,lens:m},side:{position:e(1,.18,0),target:o,lens:m},top:{position:e(0,1,0),target:o,up:[0,0,-1],lens:m}}}export async function writeModelStage(n){const t=await R(n.root,n.model),c=stageCameras(t),i=Math.max(4,6*Math.max(t.max[0]-t.min[0],t.max[2]-t.min[2],.1)),e=u(n.outDir,"model-stage",h(n.model).replace(/[^A-Za-z0-9]+/g,"_")||"root","scenery.ts"),o=y(h(e),u(n.root,n.model)).split(p).join("/");return await S(h(e),{recursive:!0}),await H(e,[`// Written by allyhub: the model ${n.model} alone, on a floor in soft light, framed on its size.`,'import * as THREE from "three";','import { defineScenery } from "@allyhub-next/scenery-host/layer";','import { modelObject } from "@allyhub-next/model/three";',`import model from ${JSON.stringify(o.startsWith(".")?o:`./${o}`)};`,"","export default defineScenery({"," renderer: { antialias: true },"," async build(w) {",' w.scene.background = new THREE.Color("#e4e2dd");'," const floor = new THREE.Mesh(",` new THREE.PlaneGeometry(${String(a(i))}, ${String(a(i))}),`,' new THREE.MeshStandardMaterial({ color: "#d6d3cc", roughness: 0.95 }),'," );",' floor.name = "floor";'," floor.rotation.x = -Math.PI / 2;",` floor.position.set(${String(a((t.min[0]+t.max[0])/2))}, ${String(a(t.min[1]-5e-4))}, ${String(a((t.min[2]+t.max[2])/2))});`," w.scene.add(floor);"," w.scene.add(await modelObject(w, model));",' w.scene.add(new THREE.HemisphereLight("#ffffff", "#8a8580", 1.6));',' const sun = new THREE.DirectionalLight("#fff6ea", 2.4);',' sun.name = "sun";'," sun.position.set(1.5, 3, 2.5);"," w.scene.add(sun);"," return {};"," },",` cameras: ${JSON.stringify(c)},`,"});",""].join(`
3
+ `)),y(n.root,e).split(p).join("/")}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/scenery-host",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/sheet",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/site",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./assets": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/stage",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -93,6 +93,10 @@ export declare const RULES: {
93
93
  readonly level: "error";
94
94
  readonly rule: "The project's package.json declares AllyHub, but its packages are not installed";
95
95
  };
96
+ readonly "AK-B010": {
97
+ readonly level: "error";
98
+ readonly rule: "A 3D model does not build";
99
+ };
96
100
  readonly "AK-K001": {
97
101
  readonly level: "error";
98
102
  readonly rule: "Two parts have the same key";
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- export const RULES={"AK-M001":{level:"error",rule:"The fields of video(), slides() or defineComponent do not match the format"},"AK-M002":{level:"error",rule:"A piece is not the entry file of an item folder"},"AK-M003":{level:"error",rule:"An item's entry file does not match its folder or its kind"},"AK-M004":{level:"error",rule:"The project has no pieces"},"AK-M006":{level:"error",rule:"A messages file does not match the format"},"AK-M007":{level:"error",rule:"A script file does not match the format"},"AK-M008":{level:"error",rule:"A doc's file is not MDX, holds what a doc does not draw, or is not an item of its own"},"AK-M009":{level:"error",rule:"A sheet cannot be read as it says: its file is not CSV a sheet can read, a value is not its column's type, or its spec does not match the format"},"AK-M010":{level:"error",rule:"A video item reaches itself through the videos it shows (a screen, a video take, a footage of a video item)"},"AK-B001":{level:"error",rule:"Two pieces have the same id"},"AK-B003":{level:"error",rule:"The build made a network request"},"AK-B004":{level:"error",rule:"The build timed out, or its result is over the size limit"},"AK-B005":{level:"error",rule:"An import of a file outside the project, or of a package not declared in package.json"},"AK-B006":{level:"error",rule:"An import of an @allyhub/sdk entry point that does not exist"},"AK-B008":{level:"error",rule:"The project's @allyhub/sdk is another version than the allyhub that builds it"},"AK-B009":{level:"error",rule:"The project's package.json declares AllyHub, but its packages are not installed"},"AK-K001":{level:"error",rule:"Two parts have the same key"},"AK-K003":{level:"error",rule:"The output has no parts"},"AK-D002":{level:"error",rule:"The same frame has different pixels when drawn in order and out of order"},"AK-N003":{level:"error",rule:"The sandbox blocked a request at run time"},"AK-S001":{level:"error",rule:"The code reads a key that is missing in the default language too"},"AK-T001":{level:"error",rule:"A take has no word times beside it (<name>.words.json)"},"AK-T002":{level:"error",rule:"A say part has no generated file for its text, voice and tool"},"AK-T003":{level:"error",rule:"A take's range phrase, or the line a part is saying, is not found in the take"},"AK-T004":{level:"error",rule:"A word reference is not in its part's words, or an anchor is not in its line"},"AK-T005":{level:"error",rule:"A take's edits file is missing or does not match the format, or an edit's words are no longer in the take"},"AK-T006":{level:"error",rule:"A take's range phrase, or the line a part is saying, is said in words the take's edits remove"},"AK-T007":{level:"error",rule:"A part says a line its generated voice was not made from"},"AK-F001":{level:"error",rule:"The video is longer than its platform profile takes"},"AK-A001":{level:"error",rule:"A referenced media or data file does not exist"},"AK-A003":{level:"error",rule:"Wrong media type"},"AK-A005":{level:"error",rule:"A layer draws a picture that does not load: its source is not a file the stage serves, or not a picture"},"AK-P002":{level:"error",rule:"Loading took longer than the piece's loadLimit (default 10 seconds)"},"AK-P003":{level:"error",rule:"A moment did not finish drawing within the piece's seekLimit (default 30 seconds): work a layer waits for (ctx.wait) or a picture it shows never settled"},"AK-R001":{level:"error",rule:"An unhandled exception was thrown at run time"},"AK-R003":{level:"error",rule:"The page was changed outside the stage"},"AK-R004":{level:"error",rule:"The code sets a style value the browser does not accept, so the style does not apply"},"AK-G001":{level:"error",rule:"Unknown format: not one of the four presets or WIDTHxHEIGHT (a4 and letter for paged outputs only, and even sides for video)"},"AK-X001":{level:"error",rule:"The matrix's slots, structures, rules or combos name something that does not exist, or a combo lacks a slot of its structure"},"AK-X002":{level:"error",rule:"The matrix's rules leave no combination to make, or rule out a combo matrix.combos names"},"AK-X004":{level:"error",rule:"Two chosen combos are the same, or more alike than the matrix's differ allows"},"AK-X005":{level:"error",rule:"A part reads another slot's pick, so one render of it cannot serve every combo"},"AK-X006":{level:"error",rule:"A combo is longer than its output's maxDuration"},"AK-W001":{level:"error",rule:"A scenery does not build: its module's export is not a scenery, its build throws or does not finish, or its update throws"},"AK-W002":{level:"error",rule:"WebGL cannot be made or is lost, or draws on something other than SwiftShader where the CPU was asked for (--cpu, ALLYHUB_GPU=0, or the default off macOS)"},"AK-W003":{level:"error",rule:"A model, texture, environment or splat file does not load, names a file that is not there, or needs a decoder AllyHub does not lend"},"AK-W004":{level:"error",rule:"A camera cannot be drawn: a number that is not finite, a target at its position, a view along its up, a field of view outside (0°, 180°), or near and far planes out of order"},"AK-W005":{level:"error",rule:"A name a camera, a move or a measurement refers to names no object in the scenery, or names two"},"AK-W006":{level:"error",rule:"A material's shader does not compile or link on this renderer, or needs more texture units than the renderer has, so what uses it draws nothing (warn: more than the 16 a GPU may have)"},"AK-W008":{level:"error",rule:"A screen drawn in the scenery cannot show its element as it is: an element of it is in the browser's top layer (a modal dialog, a popover), planes of a preserve-3d context overlap, its element is larger than the largest texture, or its picture could not be copied"},"AK-S002":{level:"warn",rule:"Missing translation"},"AK-L002":{level:"warn",rule:"Text overflows the frame or is clipped"},"AK-L003":{level:"warn",rule:"Missing glyphs"},"AK-L006":{level:"warn",rule:"Text is drawn in a fallback font, or in a bold or italic the font does not have"},"AK-W007":{level:"warn",rule:"A screen asked to be drawn in the scenery is drawn over it, unlit and untoned: this browser cannot draw an element into a canvas (Chrome's HTML-in-Canvas), or ALLYHUB_HTML_IN_CANVAS=0"}};export function problem(e,r,o={}){const{level:t,...l}=o;return{code:e,level:t??RULES[e].level,message:r,...l}}export function countLevels(e){let r=0,o=0;for(const t of e)t.level==="error"?r++:o++;return{errors:r,warnings:o}}
2
+ export const RULES={"AK-M001":{level:"error",rule:"The fields of video(), slides() or defineComponent do not match the format"},"AK-M002":{level:"error",rule:"A piece is not the entry file of an item folder"},"AK-M003":{level:"error",rule:"An item's entry file does not match its folder or its kind"},"AK-M004":{level:"error",rule:"The project has no pieces"},"AK-M006":{level:"error",rule:"A messages file does not match the format"},"AK-M007":{level:"error",rule:"A script file does not match the format"},"AK-M008":{level:"error",rule:"A doc's file is not MDX, holds what a doc does not draw, or is not an item of its own"},"AK-M009":{level:"error",rule:"A sheet cannot be read as it says: its file is not CSV a sheet can read, a value is not its column's type, or its spec does not match the format"},"AK-M010":{level:"error",rule:"A video item reaches itself through the videos it shows (a screen, a video take, a footage of a video item)"},"AK-B001":{level:"error",rule:"Two pieces have the same id"},"AK-B003":{level:"error",rule:"The build made a network request"},"AK-B004":{level:"error",rule:"The build timed out, or its result is over the size limit"},"AK-B005":{level:"error",rule:"An import of a file outside the project, or of a package not declared in package.json"},"AK-B006":{level:"error",rule:"An import of an @allyhub/sdk entry point that does not exist"},"AK-B008":{level:"error",rule:"The project's @allyhub/sdk is another version than the allyhub that builds it"},"AK-B009":{level:"error",rule:"The project's package.json declares AllyHub, but its packages are not installed"},"AK-B010":{level:"error",rule:"A 3D model does not build"},"AK-K001":{level:"error",rule:"Two parts have the same key"},"AK-K003":{level:"error",rule:"The output has no parts"},"AK-D002":{level:"error",rule:"The same frame has different pixels when drawn in order and out of order"},"AK-N003":{level:"error",rule:"The sandbox blocked a request at run time"},"AK-S001":{level:"error",rule:"The code reads a key that is missing in the default language too"},"AK-T001":{level:"error",rule:"A take has no word times beside it (<name>.words.json)"},"AK-T002":{level:"error",rule:"A say part has no generated file for its text, voice and tool"},"AK-T003":{level:"error",rule:"A take's range phrase, or the line a part is saying, is not found in the take"},"AK-T004":{level:"error",rule:"A word reference is not in its part's words, or an anchor is not in its line"},"AK-T005":{level:"error",rule:"A take's edits file is missing or does not match the format, or an edit's words are no longer in the take"},"AK-T006":{level:"error",rule:"A take's range phrase, or the line a part is saying, is said in words the take's edits remove"},"AK-T007":{level:"error",rule:"A part says a line its generated voice was not made from"},"AK-F001":{level:"error",rule:"The video is longer than its platform profile takes"},"AK-A001":{level:"error",rule:"A referenced media or data file does not exist"},"AK-A003":{level:"error",rule:"Wrong media type"},"AK-A005":{level:"error",rule:"A layer draws a picture that does not load: its source is not a file the stage serves, or not a picture"},"AK-P002":{level:"error",rule:"Loading took longer than the piece's loadLimit (default 10 seconds)"},"AK-P003":{level:"error",rule:"A moment did not finish drawing within the piece's seekLimit (default 30 seconds): work a layer waits for (ctx.wait) or a picture it shows never settled"},"AK-R001":{level:"error",rule:"An unhandled exception was thrown at run time"},"AK-R003":{level:"error",rule:"The page was changed outside the stage"},"AK-R004":{level:"error",rule:"The code sets a style value the browser does not accept, so the style does not apply"},"AK-G001":{level:"error",rule:"Unknown format: not one of the four presets or WIDTHxHEIGHT (a4 and letter for paged outputs only, and even sides for video)"},"AK-X001":{level:"error",rule:"The matrix's slots, structures, rules or combos name something that does not exist, or a combo lacks a slot of its structure"},"AK-X002":{level:"error",rule:"The matrix's rules leave no combination to make, or rule out a combo matrix.combos names"},"AK-X004":{level:"error",rule:"Two chosen combos are the same, or more alike than the matrix's differ allows"},"AK-X005":{level:"error",rule:"A part reads another slot's pick, so one render of it cannot serve every combo"},"AK-X006":{level:"error",rule:"A combo is longer than its output's maxDuration"},"AK-W001":{level:"error",rule:"A scenery does not build: its module's export is not a scenery, its build throws or does not finish, or its update throws"},"AK-W002":{level:"error",rule:"WebGL cannot be made or is lost, or draws on something other than SwiftShader where the CPU was asked for (--cpu, ALLYHUB_GPU=0, or the default off macOS)"},"AK-W003":{level:"error",rule:"A model, texture, environment or splat file does not load, names a file that is not there, or needs a decoder AllyHub does not lend"},"AK-W004":{level:"error",rule:"A camera cannot be drawn: a number that is not finite, a target at its position, a view along its up, a field of view outside (0°, 180°), or near and far planes out of order"},"AK-W005":{level:"error",rule:"A name a camera, a move or a measurement refers to names no object in the scenery, or names two"},"AK-W006":{level:"error",rule:"A material's shader does not compile or link on this renderer, or needs more texture units than the renderer has, so what uses it draws nothing (warn: more than the 16 a GPU may have)"},"AK-W008":{level:"error",rule:"A screen drawn in the scenery cannot show its element as it is: an element of it is in the browser's top layer (a modal dialog, a popover), planes of a preserve-3d context overlap, its element is larger than the largest texture, or its picture could not be copied"},"AK-S002":{level:"warn",rule:"Missing translation"},"AK-L002":{level:"warn",rule:"Text overflows the frame or is clipped"},"AK-L003":{level:"warn",rule:"Missing glyphs"},"AK-L006":{level:"warn",rule:"Text is drawn in a fallback font, or in a bold or italic the font does not have"},"AK-W007":{level:"warn",rule:"A screen asked to be drawn in the scenery is drawn over it, unlit and untoned: this browser cannot draw an element into a canvas (Chrome's HTML-in-Canvas), or ALLYHUB_HTML_IN_CANVAS=0"}};export function problem(e,r,o={}){const{level:t,...l}=o;return{code:e,level:t??RULES[e].level,message:r,...l}}export function countLevels(e){let r=0,o=0;for(const t of e)t.level==="error"?r++:o++;return{errors:r,warnings:o}}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/video-core",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allyhub",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "allyhub: what an agent runs to check, render, measure and look at a project's content, in any agent app.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "homepage": "https://allyhub.com",
@@ -49,33 +49,33 @@
49
49
  "node": ">=22.19"
50
50
  },
51
51
  "dependencies": {
52
- "@allyhub-next/audio": "0.2.0",
53
- "@allyhub-next/browser": "0.2.0",
54
- "@allyhub-next/build": "0.2.0",
55
- "@allyhub-next/check": "0.2.0",
56
- "@allyhub-next/cloud": "0.2.0",
57
- "@allyhub-next/components": "0.2.0",
58
- "@allyhub-next/dev-server": "0.2.0",
59
- "@allyhub-next/doc": "0.2.0",
60
- "@allyhub-next/export": "0.2.0",
61
- "@allyhub-next/formats": "0.2.0",
62
- "@allyhub-next/measure": "0.2.0",
63
- "@allyhub-next/media": "0.2.0",
64
- "@allyhub-next/model": "0.2.0",
65
- "@allyhub-next/project": "0.2.0",
66
- "@allyhub-next/protocol": "0.2.0",
67
- "@allyhub-next/registry": "0.2.0",
68
- "@allyhub-next/render": "0.2.0",
69
- "@allyhub-next/runtime": "0.2.0",
70
- "@allyhub-next/runtimes": "0.2.0",
71
- "@allyhub-next/scaffold": "0.2.0",
72
- "@allyhub-next/scenery": "0.2.0",
73
- "@allyhub-next/scenery-host": "0.2.0",
74
- "@allyhub-next/sheet": "0.2.0",
75
- "@allyhub-next/site": "0.2.0",
76
- "@allyhub-next/stage": "0.2.0",
77
- "@allyhub-next/video-core": "0.2.0",
78
- "@allyhub/sdk": "0.2.0",
52
+ "@allyhub-next/audio": "0.3.0",
53
+ "@allyhub-next/browser": "0.3.0",
54
+ "@allyhub-next/build": "0.3.0",
55
+ "@allyhub-next/check": "0.3.0",
56
+ "@allyhub-next/cloud": "0.3.0",
57
+ "@allyhub-next/components": "0.3.0",
58
+ "@allyhub-next/dev-server": "0.3.0",
59
+ "@allyhub-next/doc": "0.3.0",
60
+ "@allyhub-next/export": "0.3.0",
61
+ "@allyhub-next/formats": "0.3.0",
62
+ "@allyhub-next/measure": "0.3.0",
63
+ "@allyhub-next/media": "0.3.0",
64
+ "@allyhub-next/model": "0.3.0",
65
+ "@allyhub-next/project": "0.3.0",
66
+ "@allyhub-next/protocol": "0.3.0",
67
+ "@allyhub-next/registry": "0.3.0",
68
+ "@allyhub-next/render": "0.3.0",
69
+ "@allyhub-next/runtime": "0.3.0",
70
+ "@allyhub-next/runtimes": "0.3.0",
71
+ "@allyhub-next/scaffold": "0.3.0",
72
+ "@allyhub-next/scenery": "0.3.0",
73
+ "@allyhub-next/scenery-host": "0.3.0",
74
+ "@allyhub-next/sheet": "0.3.0",
75
+ "@allyhub-next/site": "0.3.0",
76
+ "@allyhub-next/stage": "0.3.0",
77
+ "@allyhub-next/video-core": "0.3.0",
78
+ "@allyhub/sdk": "0.3.0",
79
79
  "@fontsource-variable/commissioner": "^5.3.0",
80
80
  "@fontsource-variable/inter": "^5.3.0",
81
81
  "@fontsource-variable/jetbrains-mono": "^5.3.0",
@@ -1 +0,0 @@
1
- import{c as e}from"./react-Bo429Bov.js";var t=e(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]);export{t};