mapples 0.2.0-beta.1 → 0.2.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +133 -22
- package/dist/adopt/scan.d.ts +8 -2
- package/dist/adopt/scan.js +31 -13
- package/dist/adopt/scan.js.map +1 -1
- package/dist/api/agent.d.ts +85 -0
- package/dist/api/agent.js +92 -0
- package/dist/api/agent.js.map +1 -0
- package/dist/api/client.d.ts +12 -1
- package/dist/api/client.js +23 -2
- package/dist/api/client.js.map +1 -1
- package/dist/api/commit.d.ts +9 -0
- package/dist/api/commit.js +33 -2
- package/dist/api/commit.js.map +1 -1
- package/dist/api/errors.js +12 -2
- package/dist/api/errors.js.map +1 -1
- package/dist/api/objects.d.ts +36 -5
- package/dist/api/objects.js +176 -10
- package/dist/api/objects.js.map +1 -1
- package/dist/api/poll.d.ts +5 -3
- package/dist/api/poll.js +17 -6
- package/dist/api/poll.js.map +1 -1
- package/dist/api/txPlan.d.ts +15 -0
- package/dist/api/txPlan.js +196 -0
- package/dist/api/txPlan.js.map +1 -0
- package/dist/assets/assets.d.ts +9 -0
- package/dist/assets/assets.js +33 -4
- package/dist/assets/assets.js.map +1 -1
- package/dist/codegen/emit.d.ts +4 -7
- package/dist/codegen/emit.js +10 -29
- package/dist/codegen/emit.js.map +1 -1
- package/dist/codegen/imports.d.ts +8 -15
- package/dist/codegen/imports.js +27 -72
- package/dist/codegen/imports.js.map +1 -1
- package/dist/codegen/instances.d.ts +5 -0
- package/dist/codegen/instances.js +30 -0
- package/dist/codegen/instances.js.map +1 -0
- package/dist/codegen/styles.d.ts +1 -0
- package/dist/codegen/styles.js +3 -0
- package/dist/codegen/styles.js.map +1 -0
- package/dist/commands/agent.d.ts +2 -0
- package/dist/commands/agent.js +87 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/create.js +1 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/impl/adoptImpl.js +3 -0
- package/dist/commands/impl/adoptImpl.js.map +1 -1
- package/dist/commands/impl/agentImpl.d.ts +23 -0
- package/dist/commands/impl/agentImpl.js +426 -0
- package/dist/commands/impl/agentImpl.js.map +1 -0
- package/dist/commands/impl/createImpl.js +31 -4
- package/dist/commands/impl/createImpl.js.map +1 -1
- package/dist/commands/impl/initImpl.js +28 -4
- package/dist/commands/impl/initImpl.js.map +1 -1
- package/dist/commands/impl/syncImpl.js +30 -5
- package/dist/commands/impl/syncImpl.js.map +1 -1
- package/dist/commands/init.js +1 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/merge/applyOps.d.ts +5 -2
- package/dist/merge/applyOps.js +75 -32
- package/dist/merge/applyOps.js.map +1 -1
- package/dist/merge/childrenOrder.d.ts +13 -0
- package/dist/merge/childrenOrder.js +51 -0
- package/dist/merge/childrenOrder.js.map +1 -0
- package/dist/merge/diff.d.ts +20 -1
- package/dist/merge/diff.js +77 -17
- package/dist/merge/diff.js.map +1 -1
- package/dist/merge/threeWay.d.ts +2 -2
- package/dist/merge/threeWay.js +74 -10
- package/dist/merge/threeWay.js.map +1 -1
- package/dist/merge/toEdits.d.ts +1 -3
- package/dist/merge/toEdits.js +3 -91
- package/dist/merge/toEdits.js.map +1 -1
- package/dist/nav/navigatorTree.d.ts +78 -0
- package/dist/nav/navigatorTree.js +410 -0
- package/dist/nav/navigatorTree.js.map +1 -0
- package/dist/nav/placement.d.ts +53 -0
- package/dist/nav/placement.js +260 -0
- package/dist/nav/placement.js.map +1 -0
- package/dist/nav/routeTree.d.ts +8 -2
- package/dist/nav/routeTree.js +79 -151
- package/dist/nav/routeTree.js.map +1 -1
- package/dist/nav/screenOptions.d.ts +15 -0
- package/dist/nav/screenOptions.js +213 -0
- package/dist/nav/screenOptions.js.map +1 -0
- package/dist/project/agentState.d.ts +30 -0
- package/dist/project/agentState.js +42 -0
- package/dist/project/agentState.js.map +1 -0
- package/dist/project/baseStore.d.ts +19 -1
- package/dist/project/baseStore.js +28 -0
- package/dist/project/baseStore.js.map +1 -1
- package/dist/project/componentsMap.d.ts +7 -0
- package/dist/project/componentsMap.js +21 -0
- package/dist/project/componentsMap.js.map +1 -0
- package/dist/project/config.d.ts +12 -3
- package/dist/project/config.js +11 -2
- package/dist/project/config.js.map +1 -1
- package/dist/project/env.d.ts +10 -3
- package/dist/project/env.js +23 -5
- package/dist/project/env.js.map +1 -1
- package/dist/project/pagesMap.d.ts +2 -0
- package/dist/project/pagesMap.js.map +1 -1
- package/dist/project/secret.d.ts +6 -2
- package/dist/project/secret.js +11 -5
- package/dist/project/secret.js.map +1 -1
- package/dist/services/adoptService.d.ts +3 -0
- package/dist/services/adoptService.js +357 -38
- package/dist/services/adoptService.js.map +1 -1
- package/dist/services/agentInstall.d.ts +80 -0
- package/dist/services/agentInstall.js +309 -0
- package/dist/services/agentInstall.js.map +1 -0
- package/dist/services/agentLease.d.ts +2 -0
- package/dist/services/agentLease.js +32 -0
- package/dist/services/agentLease.js.map +1 -0
- package/dist/services/clientFactory.d.ts +2 -0
- package/dist/services/clientFactory.js +20 -3
- package/dist/services/clientFactory.js.map +1 -1
- package/dist/services/doctorService.js +77 -66
- package/dist/services/doctorService.js.map +1 -1
- package/dist/services/scaffold.js +4 -0
- package/dist/services/scaffold.js.map +1 -1
- package/dist/services/syncEngine.d.ts +7 -0
- package/dist/services/syncEngine.js +719 -306
- package/dist/services/syncEngine.js.map +1 -1
- package/dist/style/theme.js +17 -1
- package/dist/style/theme.js.map +1 -1
- package/dist/types.d.ts +51 -2
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -1
- package/dist/ui/report.d.ts +15 -0
- package/dist/ui/report.js +30 -0
- package/dist/ui/report.js.map +1 -1
- package/package.json +3 -2
- package/templates/agent/agents-md/AGENTS.md +8 -0
- package/templates/agent/claude/CLAUDE.md +7 -0
- package/templates/agent/claude/mcp.json +11 -0
- package/templates/agent/claude/settings.json +26 -0
- package/templates/agent/codex/config.toml +6 -0
- package/templates/agent/codex/hooks.json +26 -0
- package/templates/agent/cursor/hooks.json +9 -0
- package/templates/agent/cursor/mcp.json +10 -0
- package/templates/agent/mapples.md +124 -0
- package/templates/agent/skills/mapples-conventions/SKILL.md +137 -0
- package/templates/agent/skills/mapples-design/SKILL.md +235 -0
- package/templates/agent/skills/mapples-design/reference/component-library.md +128 -0
- package/templates/agent/skills/mapples-design/reference/design-tokens.md +132 -0
- package/templates/agent/skills/mapples-design/reference/layout-contract.md +227 -0
- package/templates/agent/skills/mapples-design/reference/lint-checklist.md +51 -0
- package/templates/agent/skills/mapples-design/reference/plan.md +95 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/empty-states.md +14 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/forms-and-auth.md +22 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/home-dashboard.md +14 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/list-and-detail.md +18 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/microcopy.md +20 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/navigation-chrome.md +21 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/onboarding-flow.md +15 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/screen-flow-wiring.md +37 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/settings-profile.md +16 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/stats-and-progress.md +17 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/visual-hierarchy.md +18 -0
- package/templates/agent/skills/mapples-design/reference/style-guides.md +92 -0
- package/templates/agent/skills/mapples-sync/SKILL.md +93 -0
- package/templates/app/_layout.tsx +3 -0
- package/templates/app.json +0 -1
- package/templates/gitignore +2 -0
- package/templates/mapples/sid.d.ts +6 -0
- package/templates/package.json +12 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txPlan.js","sourceRoot":"","sources":["../../src/api/txPlan.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,4DAA4D;AAC5D,qEAAqE;AACrE,8DAA8D;AAC9D,yEAAyE;AACzE,2DAA2D;AAC3D,gEAAgE;AAChE,2EAA2E;AAI3E,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,sFAAsF;AACtF,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAEpC;IACA;IACA;IAHX,YACW,IAAY,EACZ,KAAa,EACb,MAAkB;QAE3B,KAAK,CACH,0DAA0D,IAAI,kBAAkB,KAAK,8CAA8C;YACjI,qFAAqF,CACxF,CAAC;QAPO,SAAI,GAAJ,IAAI,CAAQ;QACZ,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAY;IAM7B,CAAC;CACF;AAED,SAAS,MAAM,CAAC,KAAc,EAAE,GAAgB;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;SAAM,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,SAAS,UAAU,CAAC,EAAY;IAC9B,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,WAAW,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;QAC3B,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;IACD,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,2DAA2D;AAC3D,SAAS,QAAQ,CAAC,EAAY;IAC5B,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;QAC/B,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAe,EAAE,KAAK,GAAG,cAAc;IACtE,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAErB,yEAAyE;IACzE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE;QACjC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAE,CAAC;YAC7B,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAS,EAAQ,EAAE;QAC3C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,IAAI,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,SAAS;gBAAE,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;gBAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,CAAC,MAAM,KAAK,YAAY,IAAI,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ;gBAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,mEAAmE;IACnE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAsB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAE,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,IAAI,KAAK,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,aAAa,GAAG,CAAC,CAAS,EAAQ,EAAE;QACxC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,aAAa,CAAC,CAAC,CAAC,CAAC;gBACjB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC;gBACR,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;gBACvB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClB,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC;oBAAE,MAAM;YACrB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAsB,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3F,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QAChC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CACvB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACrE,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAe,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,sBAAsB,CAC9B,OAAO,CAAC,MAAM,EACd,KAAK,EACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CACxC,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/assets/assets.d.ts
CHANGED
|
@@ -4,6 +4,15 @@ import type { JpatchOp } from '../types.js';
|
|
|
4
4
|
import type { SyncReport } from '../ui/report.js';
|
|
5
5
|
export declare const ASSETS_DIR: string;
|
|
6
6
|
export declare const ASSET_MAP_FILE: string;
|
|
7
|
+
/** A filesystem-safe local name for an asset record (real records may carry
|
|
8
|
+
* display names like "placeholder: Onboarding hero — teamwork"). */
|
|
9
|
+
export declare function assetFileName(id: string, meta: {
|
|
10
|
+
name?: string;
|
|
11
|
+
file_name?: string;
|
|
12
|
+
extension?: string;
|
|
13
|
+
mime?: string;
|
|
14
|
+
type?: string;
|
|
15
|
+
}): string;
|
|
7
16
|
export interface AssetSyncResult {
|
|
8
17
|
pushOps: JpatchOp[];
|
|
9
18
|
mergedAssets: AssetIndex;
|
package/dist/assets/assets.js
CHANGED
|
@@ -21,19 +21,48 @@ const MIME_BY_EXT = {
|
|
|
21
21
|
'.json': 'application/json',
|
|
22
22
|
};
|
|
23
23
|
const EXT_BY_MIME = Object.fromEntries(Object.entries(MIME_BY_EXT).map(([ext, mime]) => [mime, ext]));
|
|
24
|
+
/** A filesystem-safe local name for an asset record (real records may carry
|
|
25
|
+
* display names like "placeholder: Onboarding hero — teamwork"). */
|
|
26
|
+
export function assetFileName(id, meta) {
|
|
27
|
+
const rawBase = meta.file_name || meta.name || id;
|
|
28
|
+
const base = rawBase
|
|
29
|
+
.replace(/[/\\:*?"<>|]/g, '-')
|
|
30
|
+
.replace(/\s+/g, ' ')
|
|
31
|
+
.trim()
|
|
32
|
+
.slice(0, 120);
|
|
33
|
+
const hasExt = /\.[A-Za-z0-9]{1,5}$/.test(base);
|
|
34
|
+
if (hasExt)
|
|
35
|
+
return base;
|
|
36
|
+
const ext = (meta.extension ? `.${meta.extension.replace(/^\./, '')}` : '') ||
|
|
37
|
+
(meta.mime ? (EXT_BY_MIME[meta.mime] ?? '') : '') ||
|
|
38
|
+
(meta.type === 'image' ? '.png' : '');
|
|
39
|
+
return `${base}${ext}`;
|
|
40
|
+
}
|
|
24
41
|
export async function syncAssets(root, client, remote, report) {
|
|
25
42
|
const dir = join(root, ASSETS_DIR);
|
|
26
43
|
const index = structuredClone(remote ?? {});
|
|
27
44
|
const pushOps = [];
|
|
28
45
|
const knownShas = new Set(Object.values(index).map((a) => a.sha256));
|
|
29
46
|
const namesInIndex = new Map(Object.entries(index).map(([id, a]) => [a.name ?? id, id]));
|
|
30
|
-
// 1. Pull: remote assets not on disk get downloaded.
|
|
47
|
+
// 1. Pull: remote assets not on disk get downloaded. Real records (dev
|
|
48
|
+
// backend) carry a server-relative `link`; the mock's carry sha256+mime
|
|
49
|
+
// served via canvas objects.
|
|
31
50
|
for (const [id, meta] of Object.entries(index)) {
|
|
32
|
-
const fileName =
|
|
51
|
+
const fileName = assetFileName(id, meta);
|
|
33
52
|
const filePath = join(dir, fileName);
|
|
34
53
|
if (existsSync(filePath))
|
|
35
54
|
continue;
|
|
36
|
-
|
|
55
|
+
let bytes;
|
|
56
|
+
if (typeof meta.link === 'string' && meta.link.length > 0) {
|
|
57
|
+
bytes = await client.getBytesAtPath(meta.link);
|
|
58
|
+
}
|
|
59
|
+
else if (meta.sha256) {
|
|
60
|
+
bytes = await client.getObjectBytes(`sha256:${meta.sha256}`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
report.notes.push(`asset ${id} has neither link nor sha256 — skipped`);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
37
66
|
mkdirSync(dir, { recursive: true });
|
|
38
67
|
writeFileSync(filePath, bytes);
|
|
39
68
|
report.files.push({ file: join(ASSETS_DIR, fileName), action: 'created' });
|
|
@@ -82,7 +111,7 @@ export function writeAssetMap(root, index, report) {
|
|
|
82
111
|
return;
|
|
83
112
|
const lines = Object.entries(index)
|
|
84
113
|
.sort(([a], [b]) => (a < b ? -1 : 1))
|
|
85
|
-
.map(([id, meta]) => ` '${id}': require('./assets/${meta
|
|
114
|
+
.map(([id, meta]) => ` '${id}': require('./assets/${assetFileName(id, meta)}'),`);
|
|
86
115
|
const content = [
|
|
87
116
|
'// GENERATED by Mapples — DO NOT EDIT. Regenerated on every `mapples sync`.',
|
|
88
117
|
'/* eslint-disable @typescript-eslint/no-require-imports */',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/assets/assets.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,8EAA8E;AAC9E,gDAAgD;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAI3C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAE7D,MAAM,WAAW,GAA2B;IAC1C,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,kBAAkB;CAC5B,CAAC;AAEF,MAAM,WAAW,GAA2B,MAAM,CAAC,WAAW,CAC5D,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAC9D,CAAC;
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/assets/assets.ts"],"names":[],"mappings":"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"}
|
package/dist/codegen/emit.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export
|
|
3
|
-
export declare function mappletName(pageName: string): string;
|
|
4
|
-
export interface EmitPageInput {
|
|
5
|
-
name: string;
|
|
6
|
-
root: RenderDomNode;
|
|
7
|
-
}
|
|
1
|
+
import { type EmitComponentInput, type EmitPageInput } from '@mapples/codegen';
|
|
2
|
+
export { COMPONENT_HEADER, GENERATED_HEADER, pageComponentName, readRouteMarker, ROUTE_MARKER, routeMarkerLine, withoutRouteMarker, withRouteMarker, type EmitComponentInput, type EmitPageInput, } from '@mapples/codegen';
|
|
8
3
|
export declare function emitPage(page: EmitPageInput, filePath?: string): Promise<string>;
|
|
4
|
+
/** A Creator component as a file: same shape as a page, no route. */
|
|
5
|
+
export declare function emitComponent(component: EmitComponentInput, filePath?: string): Promise<string>;
|
package/dist/codegen/emit.js
CHANGED
|
@@ -1,33 +1,14 @@
|
|
|
1
|
-
// RenderDom page -> complete
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
import {
|
|
1
|
+
// RenderDom page -> complete page file, Prettier-formatted with the target
|
|
2
|
+
// project's config. The generation itself lives in @mapples/codegen (pure),
|
|
3
|
+
// shared with the Creator's code editor; this module adds the formatting.
|
|
4
|
+
import { emitComponent as emitComponentText, emitPage as emitPageText, } from '@mapples/codegen';
|
|
5
5
|
import { formatTsx } from './format.js';
|
|
6
|
-
export
|
|
7
|
-
'// Two-way sync: `mapples sync` reconciles this file with Mapples Creator.';
|
|
8
|
-
export function mappletName(pageName) {
|
|
9
|
-
const pascal = pageName
|
|
10
|
-
.split(/[^A-Za-z0-9]+/)
|
|
11
|
-
.filter(Boolean)
|
|
12
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
13
|
-
.join('');
|
|
14
|
-
return `${pascal || 'Page'}Mapplet`;
|
|
15
|
-
}
|
|
6
|
+
export { COMPONENT_HEADER, GENERATED_HEADER, pageComponentName, readRouteMarker, ROUTE_MARKER, routeMarkerLine, withoutRouteMarker, withRouteMarker, } from '@mapples/codegen';
|
|
16
7
|
export async function emitPage(page, filePath) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
printImports(imports),
|
|
23
|
-
'',
|
|
24
|
-
`export default function ${mappletName(page.name)}() {`,
|
|
25
|
-
' return (',
|
|
26
|
-
jsx,
|
|
27
|
-
' );',
|
|
28
|
-
'}',
|
|
29
|
-
'',
|
|
30
|
-
].join('\n');
|
|
31
|
-
return formatTsx(code, filePath);
|
|
8
|
+
return formatTsx(emitPageText(page), filePath);
|
|
9
|
+
}
|
|
10
|
+
/** A Creator component as a file: same shape as a page, no route. */
|
|
11
|
+
export async function emitComponent(component, filePath) {
|
|
12
|
+
return formatTsx(emitComponentText(component), filePath);
|
|
32
13
|
}
|
|
33
14
|
//# sourceMappingURL=emit.js.map
|
package/dist/codegen/emit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/codegen/emit.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/codegen/emit.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAE1E,OAAO,EACL,aAAa,IAAI,iBAAiB,EAClC,QAAQ,IAAI,YAAY,GAGzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,eAAe,GAGhB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAmB,EAAE,QAAiB;IACnE,OAAO,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAA6B,EAC7B,QAAiB;IAEjB,OAAO,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export declare const UI_MODULE = "@mapples/ui";
|
|
10
|
-
export declare function parseImportRef(ref: string): {
|
|
11
|
-
module: string;
|
|
12
|
-
exportName: string;
|
|
13
|
-
};
|
|
14
|
-
export declare function collectImports(root: RenderDomNode): ResolvedImports;
|
|
15
|
-
export declare function printImports(resolved: ResolvedImports): string;
|
|
1
|
+
import { type ImportNeed } from '@mapples/sid-ast';
|
|
2
|
+
export { collectImports, importNeedsFor, parseImportRef, printImports, UI_MODULE, type ResolvedImports, } from '@mapples/codegen';
|
|
3
|
+
/**
|
|
4
|
+
* The needs a file still has a use for: those whose name one of its `$sid`
|
|
5
|
+
* elements carries. A tree the file no longer matches (the base, after the
|
|
6
|
+
* developer deleted an element) would otherwise bring the import back.
|
|
7
|
+
*/
|
|
8
|
+
export declare function importNeedsUsedIn(source: string, needs: ImportNeed[]): ImportNeed[];
|
package/dist/codegen/imports.js
CHANGED
|
@@ -1,79 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
1
|
+
// The import block of a generated file — lives in @mapples/codegen (pure).
|
|
2
|
+
import { extract } from '@mapples/sid-ast';
|
|
3
|
+
export { collectImports, importNeedsFor, parseImportRef, printImports, UI_MODULE, } from '@mapples/codegen';
|
|
4
|
+
/**
|
|
5
|
+
* The needs a file still has a use for: those whose name one of its `$sid`
|
|
6
|
+
* elements carries. A tree the file no longer matches (the base, after the
|
|
7
|
+
* developer deleted an element) would otherwise bring the import back.
|
|
8
|
+
*/
|
|
9
|
+
export function importNeedsUsedIn(source, needs) {
|
|
10
|
+
const used = new Set();
|
|
11
11
|
const walk = (node) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const importRef = node.props.importRef;
|
|
15
|
-
if (typeof name !== 'string' || typeof importRef !== 'string') {
|
|
16
|
-
throw new Error(`Custom node ${node.sid} is missing name/importRef`);
|
|
17
|
-
}
|
|
18
|
-
const origin = parseImportRef(importRef);
|
|
19
|
-
if (origin.module === '') {
|
|
20
|
-
throw new Error(`Custom node ${node.sid} (${name}) has a local importRef (${importRef}); cannot emit an import for it`);
|
|
21
|
-
}
|
|
22
|
-
const existing = customs.get(name);
|
|
23
|
-
if (existing &&
|
|
24
|
-
(existing.module !== origin.module || existing.exportName !== origin.exportName)) {
|
|
25
|
-
throw new Error(`Custom name collision: ${name} maps to both ${existing.module} and ${origin.module}`);
|
|
26
|
-
}
|
|
27
|
-
customs.set(name, origin);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
uiNames.add(node.type);
|
|
31
|
-
}
|
|
12
|
+
// An element whose import is missing reads as a Custom named after its tag.
|
|
13
|
+
used.add(node.type === 'Custom' ? String(node.props.name) : node.type);
|
|
32
14
|
for (const child of node.children)
|
|
33
15
|
walk(child);
|
|
34
16
|
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
for (const [local, origin] of resolved.customs) {
|
|
50
|
-
let entry = byModule.get(origin.module);
|
|
51
|
-
if (!entry) {
|
|
52
|
-
entry = { defaults: [], named: [] };
|
|
53
|
-
byModule.set(origin.module, entry);
|
|
54
|
-
}
|
|
55
|
-
if (origin.exportName === 'default')
|
|
56
|
-
entry.defaults.push(local);
|
|
57
|
-
else
|
|
58
|
-
entry.named.push([origin.exportName, local]);
|
|
59
|
-
}
|
|
60
|
-
for (const module of [...byModule.keys()].sort()) {
|
|
61
|
-
const entry = byModule.get(module);
|
|
62
|
-
const pieces = [];
|
|
63
|
-
if (entry.defaults.length > 1) {
|
|
64
|
-
throw new Error(`two default imports from ${module}: ${entry.defaults.join(', ')}`);
|
|
65
|
-
}
|
|
66
|
-
if (entry.defaults.length === 1)
|
|
67
|
-
pieces.push(entry.defaults[0]);
|
|
68
|
-
if (entry.named.length > 0) {
|
|
69
|
-
const named = entry.named
|
|
70
|
-
.sort(([a], [b]) => (a < b ? -1 : 1))
|
|
71
|
-
.map(([exp, local]) => (exp === local ? exp : `${exp} as ${local}`))
|
|
72
|
-
.join(', ');
|
|
73
|
-
pieces.push(`{ ${named} }`);
|
|
74
|
-
}
|
|
75
|
-
lines.push(`import ${pieces.join(', ')} from '${module}';`);
|
|
17
|
+
const { dom } = extract(source);
|
|
18
|
+
if (dom)
|
|
19
|
+
walk(dom);
|
|
20
|
+
const kept = [];
|
|
21
|
+
for (const need of needs) {
|
|
22
|
+
const named = (need.named ?? []).filter((name) => used.has(name));
|
|
23
|
+
const defaultName = need.defaultName !== undefined && used.has(need.defaultName) ? need.defaultName : undefined;
|
|
24
|
+
if (named.length === 0 && defaultName === undefined)
|
|
25
|
+
continue;
|
|
26
|
+
kept.push({
|
|
27
|
+
module: need.module,
|
|
28
|
+
...(named.length > 0 ? { named } : {}),
|
|
29
|
+
...(defaultName !== undefined ? { defaultName } : {}),
|
|
30
|
+
});
|
|
76
31
|
}
|
|
77
|
-
return
|
|
32
|
+
return kept;
|
|
78
33
|
}
|
|
79
34
|
//# sourceMappingURL=imports.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/codegen/imports.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/codegen/imports.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,EAAE,OAAO,EAAuC,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,SAAS,GAEV,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,KAAmB;IACnE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,IAAmB,EAAQ,EAAE;QACzC,4EAA4E;QAC5E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,GAAG;QAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnB,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,KAAK,SAAS;YAAE,SAAS;QAC9D,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type InstanceLinker } from '@mapples/codegen';
|
|
2
|
+
import type { ComponentEntity } from '../api/objects.js';
|
|
3
|
+
import type { ComponentsMap } from '../project/componentsMap.js';
|
|
4
|
+
export type { InstanceLinker } from '@mapples/codegen';
|
|
5
|
+
export declare function instanceLinker(componentsMap: ComponentsMap, components: Map<string, ComponentEntity>): InstanceLinker;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Linked component instances (file language <-> canvas language) — the
|
|
2
|
+
// conversion lives in @mapples/codegen; this binds it to the CLI's
|
|
3
|
+
// components map and to `node:path`, so OS-native paths in the map resolve
|
|
4
|
+
// the way they always did.
|
|
5
|
+
import { dirname, posix, relative, sep } from 'node:path';
|
|
6
|
+
import { instanceLinker as linker, } from '@mapples/codegen';
|
|
7
|
+
const toPosix = (p) => p.split(sep).join(posix.sep);
|
|
8
|
+
/** `node:path`-backed resolver over the project's OS paths. */
|
|
9
|
+
const nodeResolver = {
|
|
10
|
+
fileFor(fromFile, module) {
|
|
11
|
+
if (!module.startsWith('.'))
|
|
12
|
+
return null;
|
|
13
|
+
const resolved = posix.normalize(posix.join(toPosix(dirname(fromFile)), module));
|
|
14
|
+
return resolved.endsWith('.tsx') ? resolved : `${resolved}.tsx`;
|
|
15
|
+
},
|
|
16
|
+
moduleFor(fromFile, targetFile) {
|
|
17
|
+
let rel = toPosix(relative(dirname(fromFile), targetFile)).replace(/\.tsx$/, '');
|
|
18
|
+
if (!rel.startsWith('.'))
|
|
19
|
+
rel = `./${rel}`;
|
|
20
|
+
return rel;
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
export function instanceLinker(componentsMap, components) {
|
|
24
|
+
const posixMap = {};
|
|
25
|
+
for (const [id, mapping] of Object.entries(componentsMap)) {
|
|
26
|
+
posixMap[id] = { file: toPosix(mapping.file), name: mapping.name };
|
|
27
|
+
}
|
|
28
|
+
return linker(posixMap, components, nodeResolver);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=instances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instances.js","sourceRoot":"","sources":["../../src/codegen/instances.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,mEAAmE;AACnE,2EAA2E;AAC3E,2BAA2B;AAE3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE1D,OAAO,EACL,cAAc,IAAI,MAAM,GAGzB,MAAM,kBAAkB,CAAC;AAO1B,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEpE,+DAA+D;AAC/D,MAAM,YAAY,GAAmB;IACnC,OAAO,CAAC,QAAQ,EAAE,MAAM;QACtB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACjF,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,MAAM,CAAC;IAClE,CAAC;IACD,SAAS,CAAC,QAAQ,EAAE,UAAU;QAC5B,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;QAC3C,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAC5B,aAA4B,EAC5B,UAAwC;IAExC,MAAM,QAAQ,GAAmD,EAAE,CAAC;IACpE,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { hoistStyles, STYLE_MODULE, type HoistedStyles } from '@mapples/codegen';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/codegen/styles.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAsB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Option } from 'commander';
|
|
2
|
+
const denv = () => new Option('--denv <env>').hideHelp(); // internal: dev|staging|prod
|
|
3
|
+
export function registerAgent(program) {
|
|
4
|
+
const agent = program
|
|
5
|
+
.command('agent')
|
|
6
|
+
.description('Agent-session lease: tell Creator an AI agent is working on this project');
|
|
7
|
+
agent
|
|
8
|
+
.command('install')
|
|
9
|
+
.description('Write the agent skills bundle (skills, conventions, instructions pointer, MCP entry) into a linked app')
|
|
10
|
+
.option('--agent <name>', 'agent to set up: claude | cursor | codex (chatgpt)', 'claude')
|
|
11
|
+
.option('--force', 'regenerate files you edited (your version is kept as _depr_…old)')
|
|
12
|
+
.addOption(denv())
|
|
13
|
+
.option('--json', 'machine-readable output')
|
|
14
|
+
.action(async (opts) => {
|
|
15
|
+
const { runAgentInstall } = await import('./impl/agentImpl.js');
|
|
16
|
+
await runAgentInstall(opts);
|
|
17
|
+
});
|
|
18
|
+
agent
|
|
19
|
+
.command('start')
|
|
20
|
+
.description('Take the project lease (exit 4 when another agent session is live)')
|
|
21
|
+
.option('--agent <agent>', 'claude-code | cursor | codex — Creator names the session after it')
|
|
22
|
+
.option('--label <label>', 'session label shown in Creator (default: the agent name)')
|
|
23
|
+
.option('--steps <titles>', 'comma-separated step titles to pre-declare')
|
|
24
|
+
.option('--takeover', 'disconnect a live session and take the lease')
|
|
25
|
+
.option('--no-daemon', 'do not spawn the heartbeat daemon')
|
|
26
|
+
.addOption(denv())
|
|
27
|
+
.option('--json', 'machine-readable output')
|
|
28
|
+
.action(async (opts) => {
|
|
29
|
+
const { runAgentStart } = await import('./impl/agentImpl.js');
|
|
30
|
+
await runAgentStart(opts);
|
|
31
|
+
});
|
|
32
|
+
agent
|
|
33
|
+
.command('step')
|
|
34
|
+
.description('Report a step (exit 3 when the lease is gone)')
|
|
35
|
+
.requiredOption('--index <n>', 'step index (0-based)')
|
|
36
|
+
.option('--title <title>', 'step title (required for a new index)')
|
|
37
|
+
.requiredOption('--status <status>', 'running | done | failed | skipped | pending')
|
|
38
|
+
.option('--detail <text>', 'one line of detail')
|
|
39
|
+
.addOption(denv())
|
|
40
|
+
.option('--json', 'machine-readable output')
|
|
41
|
+
.action(async (opts) => {
|
|
42
|
+
const { runAgentStep } = await import('./impl/agentImpl.js');
|
|
43
|
+
await runAgentStep(opts);
|
|
44
|
+
});
|
|
45
|
+
agent
|
|
46
|
+
.command('heartbeat')
|
|
47
|
+
.description('Keep the lease alive once (exit 3 when the lease is gone)')
|
|
48
|
+
.addOption(new Option('--loop').hideHelp()) // the daemon
|
|
49
|
+
.addOption(new Option('--max-minutes <n>').hideHelp().default('180'))
|
|
50
|
+
.addOption(denv())
|
|
51
|
+
.option('--json', 'machine-readable output')
|
|
52
|
+
.action(async (opts) => {
|
|
53
|
+
const { runAgentHeartbeat } = await import('./impl/agentImpl.js');
|
|
54
|
+
await runAgentHeartbeat(opts);
|
|
55
|
+
});
|
|
56
|
+
agent
|
|
57
|
+
.command('stop')
|
|
58
|
+
.description('Release the lease and stop the heartbeat daemon')
|
|
59
|
+
.option('--status <status>', 'done | failed', 'done')
|
|
60
|
+
.option('--error <text>', 'why the run failed')
|
|
61
|
+
.addOption(denv())
|
|
62
|
+
.option('--json', 'machine-readable output')
|
|
63
|
+
.action(async (opts) => {
|
|
64
|
+
const { runAgentStop } = await import('./impl/agentImpl.js');
|
|
65
|
+
await runAgentStop(opts);
|
|
66
|
+
});
|
|
67
|
+
agent
|
|
68
|
+
.command('hook <event>')
|
|
69
|
+
.description('Agent hook entry point (prompt | stop): hold the lease while the agent works on a request')
|
|
70
|
+
.option('--agent <name>', 'the agent whose hook calls this: claude | cursor | codex', 'claude')
|
|
71
|
+
.addOption(new Option('--no-daemon').hideHelp())
|
|
72
|
+
.addOption(denv())
|
|
73
|
+
.action(async (event, opts) => {
|
|
74
|
+
const { runAgentHook } = await import('./impl/agentImpl.js');
|
|
75
|
+
await runAgentHook(event, opts);
|
|
76
|
+
});
|
|
77
|
+
agent
|
|
78
|
+
.command('status')
|
|
79
|
+
.description("Show the project's live agent session and this checkout's local state")
|
|
80
|
+
.addOption(denv())
|
|
81
|
+
.option('--json', 'machine-readable output')
|
|
82
|
+
.action(async (opts) => {
|
|
83
|
+
const { runAgentStatus } = await import('./impl/agentImpl.js');
|
|
84
|
+
await runAgentStatus(opts);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/create.js
CHANGED
|
@@ -5,6 +5,7 @@ export function registerCreate(program) {
|
|
|
5
5
|
.description('Scaffold a new Mapples-connected Expo app')
|
|
6
6
|
.option('--secret <secret>', 'project API secret (Creator: Project → Settings)')
|
|
7
7
|
.option('--api-url <url>', 'Mapples API base URL')
|
|
8
|
+
.option('--agent <name>', 'also set up an AI agent: claude (Claude Code) | cursor | codex (ChatGPT) — skills, instructions, MCP entry')
|
|
8
9
|
.addOption(new Option('--denv <env>').hideHelp()) // internal: dev|staging|prod
|
|
9
10
|
.option('--json', 'machine-readable output')
|
|
10
11
|
.action(async (app, opts) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SAC/E,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;SACjD,SAAS,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,6BAA6B;SAC9E,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,IAA6B,EAAE,EAAE;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC3D,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SAC/E,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;SACjD,MAAM,CACL,gBAAgB,EAChB,4GAA4G,CAC7G;SACA,SAAS,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,6BAA6B;SAC9E,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,IAA6B,EAAE,EAAE;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC3D,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { proposeAdoptions } from '../../services/adoptService.js';
|
|
3
|
+
import { touchAgentLease } from '../../services/agentLease.js';
|
|
3
4
|
import { clientForApp } from '../../services/clientFactory.js';
|
|
4
5
|
import { emptyReport, renderReport } from '../../ui/report.js';
|
|
5
6
|
export async function runAdopt(file, opts) {
|
|
6
7
|
const root = process.cwd();
|
|
7
8
|
const client = clientForApp(root, opts);
|
|
8
9
|
const report = emptyReport();
|
|
10
|
+
await touchAgentLease(root, report, opts);
|
|
9
11
|
await proposeAdoptions({ root, client, report, yes: true, file });
|
|
12
|
+
await touchAgentLease(root, report, opts);
|
|
10
13
|
if (opts.json === true) {
|
|
11
14
|
console.log(JSON.stringify(report, null, 2));
|
|
12
15
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adoptImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/adoptImpl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,IAA6B;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"adoptImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/adoptImpl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,IAA6B;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAE1C,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type InstallOutcome } from '../../services/agentInstall.js';
|
|
2
|
+
export declare const EXIT_LEASE_GONE = 3;
|
|
3
|
+
export declare const EXIT_BUSY = 4;
|
|
4
|
+
export declare function runAgentInstall(opts: Record<string, unknown>): Promise<void>;
|
|
5
|
+
export declare function renderInstallOutcomes(outcomes: InstallOutcome[]): string[];
|
|
6
|
+
export declare function runAgentStart(opts: Record<string, unknown>): Promise<void>;
|
|
7
|
+
export declare function runAgentStep(opts: Record<string, unknown>): Promise<void>;
|
|
8
|
+
export declare function runAgentHeartbeat(opts: Record<string, unknown>): Promise<void>;
|
|
9
|
+
export declare function runAgentStop(opts: Record<string, unknown>): Promise<void>;
|
|
10
|
+
export declare const HOOK_EVENTS: readonly ["prompt", "stop"];
|
|
11
|
+
export type HookEvent = (typeof HOOK_EVENTS)[number];
|
|
12
|
+
/** What the agent is told when another session already holds the project. */
|
|
13
|
+
export declare const BUSY_HOOK_MESSAGE = "Another agent session holds this Mapples project (see `mapples agent status`). Do not sync or edit Mapples files until it is released \u2014 ask the user whether to take over with `mapples agent start --takeover`.";
|
|
14
|
+
/**
|
|
15
|
+
* `mapples agent hook prompt|stop --agent <name>` — wired into the agent's
|
|
16
|
+
* hook file by `agent install`. A prompt takes the lease for the request
|
|
17
|
+
* (Creator shows the agent working even when it changes nothing); the end of
|
|
18
|
+
* the request releases a lease the hook took, never one a skill pinned.
|
|
19
|
+
* Stdout follows each agent's hook protocol: Claude Code reads plain text as
|
|
20
|
+
* context, Cursor and Codex expect JSON.
|
|
21
|
+
*/
|
|
22
|
+
export declare function runAgentHook(event: unknown, opts: Record<string, unknown>): Promise<void>;
|
|
23
|
+
export declare function runAgentStatus(opts: Record<string, unknown>): Promise<void>;
|