@inneranimalmedia/agentsam-sdk 2.6.5 → 2.6.7
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/AGENTSAM.md +29 -0
- package/apps/README.md +5 -0
- package/apps/cad-creator/README.md +4 -4
- package/apps/cad-creator/shared/cad/package.json +1 -1
- package/apps/client-cms-editor/AGENTS.md +12 -7
- package/apps/client-cms-editor/README.md +76 -48
- package/apps/client-cms-editor/agentsam.app.json +26 -9
- package/apps/client-cms-editor/backend/package.json +20 -3
- package/apps/client-cms-editor/backend/src/api/client.ts +134 -101
- package/apps/client-cms-editor/backend/src/index.ts +1 -1
- package/apps/client-cms-editor/backend/src/model.ts +11 -115
- package/apps/client-cms-editor/backend/src/preview/bridge.ts +1 -1
- package/apps/client-cms-editor/backend/tsconfig.json +6 -1
- package/apps/client-cms-editor/bin/agentsam-cms.js +262 -0
- package/apps/client-cms-editor/bin/agentsam-cms.mjs +2 -228
- package/apps/client-cms-editor/frontend/package.json +16 -7
- package/apps/client-cms-editor/frontend/src/AgentSamDrawer.tsx +9 -41
- package/apps/client-cms-editor/frontend/src/CmsAgentSurface.tsx +19 -174
- package/apps/client-cms-editor/frontend/src/adapters/heuristic.ts +29 -0
- package/apps/client-cms-editor/frontend/src/adapters/http.ts +628 -0
- package/apps/client-cms-editor/frontend/src/adapters/memory.ts +510 -0
- package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +213 -0
- package/apps/client-cms-editor/frontend/src/editor/CmsEditorProvider.tsx +20 -0
- package/apps/client-cms-editor/frontend/src/editor/canvas/PreviewCanvas.tsx +53 -0
- package/apps/client-cms-editor/frontend/src/{CmsEditor.tsx → editor/legacy/CmsEditorPrototype.tsx} +52 -23
- package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +218 -0
- package/apps/client-cms-editor/frontend/src/index.ts +19 -5
- package/apps/client-cms-editor/frontend/src/lib/agent-host.ts +24 -0
- package/apps/client-cms-editor/frontend/src/main.tsx +82 -8
- package/apps/client-cms-editor/frontend/src/mount.tsx +92 -30
- package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +1 -1
- package/apps/client-cms-editor/frontend/src/styles/cmsShell.css +8 -8
- package/apps/client-cms-editor/frontend/src/styles/studio.css +55 -3
- package/apps/client-cms-editor/frontend/tsconfig.json +12 -1
- package/apps/client-cms-editor/frontend/vite.config.ts +12 -0
- package/apps/client-cms-editor/package-lock.json +973 -134
- package/apps/client-cms-editor/package.json +118 -6
- package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +201 -0
- package/apps/client-cms-editor/reference/harvest/PROVENANCE_HISTORY.txt +10 -0
- package/apps/client-cms-editor/reference/harvest/README.md +8 -0
- package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +135 -0
- package/apps/client-cms-editor/reference/harvest/plans/CHATGPT-IDENTITY-HARVEST.md +83 -0
- package/apps/client-cms-editor/reference/harvest/plans/CMS-EDITOR-HARVEST.md +166 -0
- package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +196 -0
- package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +137 -0
- package/apps/client-cms-editor/reference/harvest/plans/NO-IMPLICIT-SIDE-EFFECTS.md +87 -0
- package/apps/client-cms-editor/reference/harvest/plans/STOREFRONT-SURFACE-MAP.md +140 -0
- package/apps/client-cms-editor/reference/harvest/plans/THEME-INNERANIMALS-HARVEST.md +137 -0
- package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +63 -0
- package/apps/client-cms-editor/reference/harvest/plans/harvest-manifest.json +97 -0
- package/apps/client-cms-editor/reference/harvest/plans/local-cms-harvest-schema.sql +328 -0
- package/apps/client-cms-editor/shared/cms/package.json +17 -7
- package/apps/client-cms-editor/shared/cms/src/adapter.ts +204 -0
- package/apps/client-cms-editor/shared/cms/src/agent-context.ts +7 -5
- package/apps/client-cms-editor/shared/cms/src/editor-types.ts +32 -0
- package/apps/client-cms-editor/shared/cms/src/host.ts +82 -0
- package/apps/client-cms-editor/shared/cms/src/index.ts +4 -0
- package/apps/client-cms-editor/shared/cms/src/map.ts +115 -0
- package/apps/client-cms-editor/shared/cms/src/starter-pack.ts +158 -0
- package/contracts/source-types.v1.json +353 -0
- package/docs/CMS_CONTEXTUAL_COMPOSER.md +1 -1
- package/docs/PRODUCT_LIFECYCLE.md +566 -0
- package/docs/THEME_REFINERY.md +2 -2
- package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +40 -20
- package/docs/content-studio/REVISION_GATE_2026-09-27.md +1 -1
- package/docs/plans/LOCAL_STUDIO_DESKTOP_RELEASE_2026-09-29.md +150 -0
- package/migrations/d1/0017_identity_native_oauth.sql +21 -0
- package/native/agentsam-machine/Cargo.lock +426 -0
- package/native/agentsam-machine/Cargo.toml +9 -0
- package/native/agentsam-machine/cli/Cargo.toml +14 -0
- package/native/agentsam-machine/cli/src/main.rs +77 -0
- package/native/agentsam-machine/core/Cargo.toml +15 -0
- package/native/agentsam-machine/core/src/assets.rs +790 -0
- package/native/agentsam-machine/core/src/bound.rs +298 -0
- package/native/agentsam-machine/core/src/enrich.rs +706 -0
- package/native/agentsam-machine/core/src/frontend.rs +442 -0
- package/native/agentsam-machine/core/src/lib.rs +1086 -0
- package/native/agentsam-machine/core/src/liquid.rs +528 -0
- package/native/agentsam-machine/core/src/source_types.rs +78 -0
- package/package.json +51 -21
- package/packages/agentsam-brand/README.md +1 -1
- package/packages/agentsam-brand/package.json +4 -4
- package/packages/agentsam-brand/src/index.js +1 -1
- package/packages/agentsam-contracts/package.json +13 -3
- package/packages/agentsam-contracts/src/tools.ts +22 -0
- package/packages/agentsam-errors/package.json +13 -3
- package/packages/agentsam-knowledge/package.json +18 -4
- package/packages/agentsam-knowledge/src/autorag/index.js +10 -3
- package/packages/agentsam-knowledge/src/backends/index.js +33 -1
- package/packages/agentsam-knowledge/test/autorag.test.mjs +60 -1
- package/packages/agentsam-nav/package.json +24 -6
- package/packages/agentsam-queue-control/README.md +1 -1
- package/packages/agentsam-queue-control/package.json +7 -2
- package/packages/agentsam-rapid-rust/src/main.rs +1 -1
- package/packages/agentsam-repository/package.json +13 -3
- package/packages/agentsam-repository/src/source-types.js +8 -0
- package/packages/agentsam-vault/package.json +14 -4
- package/packages/agentsam-workbench/package.json +15 -4
- package/packages/agentsam-workbench/src/agent/ToolPermissionRequest.tsx +94 -0
- package/packages/agentsam-workbench/src/agent/index.ts +2 -0
- package/packages/agentsam-workbench/src/agent/tool-permission.css +134 -0
- package/packages/connectors/cloudflare/package.json +13 -3
- package/packages/connectors/cloudflare/src/api-client.js +3 -2
- package/packages/connectors/cloudflare/src/families/vectorize.js +127 -0
- package/packages/connectors/cloudflare/src/index.js +1 -0
- package/packages/heuristic-theme/README.md +2 -2
- package/packages/heuristic-theme/package.json +8 -3
- package/packages/heuristic-theme/src/registry.js +2 -2
- package/packages/heuristic-theme/src/theme.js +1 -1
- package/packages/heuristic-theme/test/theme.test.mjs +1 -1
- package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
- package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +27 -7
- package/packages/identity/README.md +2 -2
- package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +18 -15
- package/packages/identity/migrations/apply-portable.js +109 -0
- package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +1 -1
- package/packages/identity/migrations/sqlite/005_identity_company_native.sql +52 -0
- package/packages/identity/package.json +27 -6
- package/packages/identity/schema/agentsam.identity/manifest.json +101 -0
- package/packages/identity/scripts/local-identity-bridge.mjs +13 -7
- package/packages/identity/scripts/preview-auth-portal.mjs +6 -6
- package/packages/identity/src/adapters/cloudflare-d1/index.js +8 -401
- package/packages/identity/src/adapters/iam-compat/index.js +540 -0
- package/packages/identity/src/adapters/portable-d1/index.js +18 -0
- package/packages/identity/src/adapters/portable-store.js +479 -0
- package/packages/identity/src/adapters/sqlite/index.js +13 -312
- package/packages/identity/src/contracts/auth-config.js +0 -1
- package/packages/identity/src/contracts/identity-store.js +56 -5
- package/packages/identity/src/contracts/provider.js +1 -0
- package/packages/identity/src/contracts/sign-in-options.js +104 -0
- package/packages/identity/src/core/constants.js +1 -1
- package/packages/identity/src/core/session-policy.js +31 -0
- package/packages/identity/src/frontend/auth-portal/pages/login.html +6 -6
- package/packages/identity/src/frontend/auth-portal/pages/reset.html +5 -5
- package/packages/identity/src/frontend/auth-portal/pages/signup.html +5 -5
- package/packages/identity/src/frontend/auth-portal/shared/company-branding.js +1 -1
- package/packages/identity/src/frontend/auth-portal/shared/desktop-identity-bridge.js +6 -37
- package/packages/identity/src/index.js +28 -1
- package/packages/identity/src/migrations/README.md +23 -23
- package/packages/identity/src/oauth/README.md +1 -1
- package/packages/identity/src/oauth/credentials.js +10 -11
- package/packages/identity/src/oauth/google-desktop-exchange.js +195 -27
- package/packages/identity/src/oauth/iam-platform.js +21 -9
- package/packages/identity/src/oauth/native-handoff.js +136 -0
- package/packages/identity/src/providers/chatgpt/headers.js +65 -0
- package/packages/identity/src/providers/chatgpt/index.js +86 -0
- package/packages/identity/src/providers/chatgpt/mapper.js +43 -0
- package/packages/identity/src/providers/chatgpt/paths.js +45 -0
- package/packages/identity/src/providers/github/oauth.js +1 -2
- package/packages/identity/src/providers/github/profile.js +16 -2
- package/packages/identity/src/providers/index.js +11 -3
- package/packages/identity/src/server/identity-service.js +2 -1
- package/packages/identity/src/server/worker-router.js +71 -18
- package/packages/identity/tests/chatgpt-provider.test.mjs +75 -0
- package/packages/identity/tests/google-desktop-identity-login.test.mjs +210 -0
- package/packages/identity/tests/identity-init-scaffold.test.mjs +15 -4
- package/packages/identity/tests/lane1-identity-store-parity.test.mjs +527 -0
- package/packages/identity/tests/lane1-packed-consumer.test.mjs +175 -0
- package/packages/identity/tests/native-oauth-handoff.test.mjs +292 -0
- package/packages/identity/tests/oauth-credentials.test.mjs +4 -4
- package/packages/identity/tests/preview-auth-portal.test.mjs +4 -2
- package/packages/identity/tests/session-routes-policy.test.mjs +13 -1
- package/packages/identity/tests/worker-runtime-boundary.test.mjs +11 -0
- package/packages/providers/completeful/package.json +7 -2
- package/packages/theme-church-site/package.json +17 -6
- package/packages/theme-church-site/src/harvest.json +4 -2
- package/packages/theme-church-site/src/index.js +7 -3
- package/packages/theme-church-site/test/theme.test.mjs +4 -2
- package/packages/theme-companions-site/package.json +17 -6
- package/packages/theme-companions-site/src/harvest.json +4 -2
- package/packages/theme-companions-site/src/index.js +7 -3
- package/packages/theme-companions-site/test/theme.test.mjs +4 -2
- package/packages/theme-floors-site/package.json +17 -6
- package/packages/theme-floors-site/src/harvest.json +4 -2
- package/packages/theme-floors-site/src/index.js +7 -3
- package/packages/theme-floors-site/test/theme.test.mjs +4 -2
- package/packages/theme-fuelnfree-site/package.json +17 -6
- package/packages/theme-fuelnfree-site/src/harvest.json +4 -2
- package/packages/theme-fuelnfree-site/src/index.js +7 -3
- package/packages/theme-fuelnfree-site/test/theme.test.mjs +4 -2
- package/packages/theme-handyman-site/package.json +17 -6
- package/packages/theme-handyman-site/src/harvest.json +4 -2
- package/packages/theme-handyman-site/src/index.js +7 -3
- package/packages/theme-handyman-site/test/theme.test.mjs +4 -2
- package/packages/theme-insurance-site/package.json +17 -6
- package/packages/theme-insurance-site/src/harvest.json +4 -2
- package/packages/theme-insurance-site/src/index.js +7 -3
- package/packages/theme-insurance-site/test/theme.test.mjs +4 -2
- package/packages/theme-scenes/README.md +1 -1
- package/packages/theme-scenes/package.json +4 -3
- package/packages/theme-scenes/src/registry.js +187 -0
- package/packages/theme-shinshu-site/package.json +17 -6
- package/packages/theme-shinshu-site/src/harvest.json +4 -2
- package/packages/theme-shinshu-site/src/index.js +7 -3
- package/packages/theme-shinshu-site/test/theme.test.mjs +4 -2
- package/packages/work-graph/package.json +14 -4
- package/protocol/FILEMETA_V1.md +2 -2
- package/protocol/capabilities/manifest.json +1 -1
- package/protocol/database/agentsam.schema-pack.v1.schema.json +72 -0
- package/protocol/presets/catalog.json +2 -2
- package/protocol/theme-refinery/lineage-registry.json +105 -0
- package/protocol/theme-refinery/product-metadata.schema.json +21 -1
- package/skills/grok-auth/SKILL.md +110 -0
- package/skills/grok-auth/agentsam.skill.json +25 -0
- package/skills/grok-auth/references/grok-identity.md +64 -0
- package/skills/grok-auth/references/per-user-data.md +49 -0
- package/skills/grok-auth/references/prewired-and-env.md +54 -0
- package/skills/grok-auth/references/session-ui.md +133 -0
- package/skills/grok-auth/references/sign-in-methods.md +55 -0
- package/skills/grok-auth/references/wiring.md +71 -0
- package/skills/grok-building-games/SKILL.md +213 -0
- package/skills/grok-building-games/agentsam.skill.json +25 -0
- package/skills/grok-building-games/references/3d-libs.md +64 -0
- package/skills/grok-building-games/references/ai-pathfinding.md +122 -0
- package/skills/grok-building-games/references/audio.md +129 -0
- package/skills/grok-building-games/references/babylon.md +202 -0
- package/skills/grok-building-games/references/collision-physics.md +122 -0
- package/skills/grok-building-games/references/ecs-architecture.md +111 -0
- package/skills/grok-building-games/references/game-feel-juice.md +110 -0
- package/skills/grok-building-games/references/genres/board-card-chess.md +89 -0
- package/skills/grok-building-games/references/genres/endless-runner.md +83 -0
- package/skills/grok-building-games/references/genres/fps.md +105 -0
- package/skills/grok-building-games/references/genres/platformer-2d.md +97 -0
- package/skills/grok-building-games/references/genres/puzzle-match3-tetris.md +131 -0
- package/skills/grok-building-games/references/genres/racing-kart.md +106 -0
- package/skills/grok-building-games/references/genres/topdown-twin-stick.md +97 -0
- package/skills/grok-building-games/references/genres/tower-defense.md +84 -0
- package/skills/grok-building-games/references/genres/voxel-minecraft.md +89 -0
- package/skills/grok-building-games/references/input.md +139 -0
- package/skills/grok-building-games/references/phaser.md +277 -0
- package/skills/grok-building-games/references/procedural-generation.md +141 -0
- package/skills/grok-building-games/references/save-persistence.md +108 -0
- package/skills/grok-building-games/references/threejs-foundational.md +148 -0
- package/skills/grok-controls/SKILL.md +274 -0
- package/skills/grok-controls/agentsam.skill.json +25 -0
- package/skills/grok-design-ui/SKILL.md +122 -0
- package/skills/grok-design-ui/agentsam.skill.json +25 -0
- package/skills/grok-design-ui/references/animations.md +379 -0
- package/skills/grok-design-ui/references/performance.md +88 -0
- package/skills/grok-design-ui/references/refined-ui.md +384 -0
- package/skills/grok-design-ui/references/surfaces.md +247 -0
- package/skills/grok-design-ui/references/typography.md +123 -0
- package/skills/grok-game-animation-frames/SKILL.md +84 -0
- package/skills/grok-game-animation-frames/agentsam.skill.json +25 -0
- package/skills/grok-game-asset-core/SKILL.md +69 -0
- package/skills/grok-game-asset-core/agentsam.skill.json +25 -0
- package/skills/grok-game-character-consistency/SKILL.md +69 -0
- package/skills/grok-game-character-consistency/agentsam.skill.json +25 -0
- package/skills/grok-game-tilesets/SKILL.md +65 -0
- package/skills/grok-game-tilesets/agentsam.skill.json +25 -0
- package/skills/grok-game-ui-icons/SKILL.md +56 -0
- package/skills/grok-game-ui-icons/agentsam.skill.json +25 -0
- package/skills/grok-generate2dmap/LICENSE +21 -0
- package/skills/grok-generate2dmap/SKILL.md +120 -0
- package/skills/grok-generate2dmap/SOURCE.md +6 -0
- package/skills/grok-generate2dmap/agentsam.skill.json +25 -0
- package/skills/grok-generate2dmap/references/deliverables.md +101 -0
- package/skills/grok-generate2dmap/references/layered-map-contract.md +209 -0
- package/skills/grok-generate2dmap/references/map-strategies.md +341 -0
- package/skills/grok-generate2dmap/references/object-production-gate.md +24 -0
- package/skills/grok-generate2dmap/references/pipeline.md +149 -0
- package/skills/grok-generate2dmap/references/prop-pack-contract.md +174 -0
- package/skills/grok-generate2dmap/references/side-scroll-stages.md +29 -0
- package/skills/grok-generate2dmap/scripts/compose_layered_preview.py +157 -0
- package/skills/grok-generate2dmap/scripts/extract_prop_pack.py +369 -0
- package/skills/grok-generate2dsprite/LICENSE +21 -0
- package/skills/grok-generate2dsprite/SKILL.md +313 -0
- package/skills/grok-generate2dsprite/SOURCE.md +6 -0
- package/skills/grok-generate2dsprite/agentsam.skill.json +25 -0
- package/skills/grok-generate2dsprite/references/modes.md +124 -0
- package/skills/grok-generate2dsprite/references/prompt-rules.md +315 -0
- package/skills/grok-generate2dsprite/scripts/generate2dsprite.py +1031 -0
- package/skills/grok-generate2dsprite/scripts/make_layout_guide.py +109 -0
- package/skills/grok-imagine/SKILL.md +201 -0
- package/skills/grok-imagine/agentsam.skill.json +25 -0
- package/skills/grok-multiplayer-p2p/SKILL.md +111 -0
- package/skills/grok-multiplayer-p2p/agentsam.skill.json +25 -0
- package/skills/grok-multiplayer-p2p/references/react-binding.md +144 -0
- package/skills/grok-multiplayer-p2p/references/signaling-relay.md +269 -0
- package/skills/grok-neon/SKILL.md +157 -0
- package/skills/grok-neon/agentsam.skill.json +25 -0
- package/skills/grok-og/SKILL.md +102 -0
- package/skills/grok-og/agentsam.skill.json +25 -0
- package/skills/grok-og/references/brand-pass.md +53 -0
- package/skills/grok-og/references/custom-card.md +107 -0
- package/skills/grok-og/references/favicon-and-icons.md +48 -0
- package/skills/grok-og/references/og-type-contract.md +18 -0
- package/skills/grok-og/references/placeholder-card.md +21 -0
- package/skills/grok-og/references/x-banner.md +41 -0
- package/skills/grok-threejs/SKILL.md +67 -0
- package/skills/grok-threejs/agentsam.skill.json +25 -0
- package/skills/grok-threejs/references/llms-full.txt +2780 -0
- package/skills/grok-video2dsprite/LICENSE +21 -0
- package/skills/grok-video2dsprite/SKILL.md +236 -0
- package/skills/grok-video2dsprite/SOURCE.md +6 -0
- package/skills/grok-video2dsprite/agentsam.skill.json +25 -0
- package/skills/grok-video2dsprite/references/pipeline.md +90 -0
- package/skills/grok-video2dsprite/references/prompt-rules.md +63 -0
- package/skills/grok-video2dsprite/scripts/video2dsprite.py +490 -0
- package/skills/grok-xai-api/SKILL.md +152 -0
- package/skills/grok-xai-api/agentsam.skill.json +25 -0
- package/src/cli/command-catalog.js +46 -4
- package/src/cli/dispatch.js +1 -0
- package/src/cli.js +10 -0
- package/src/cloudflare/runtime-status.js +2 -1
- package/src/commands/autorag.js +67 -13
- package/src/commands/cheat-sheet.js +29 -4
- package/src/commands/codebaseindex.js +45 -2
- package/src/commands/knowledge.js +59 -2
- package/src/commands/machine-binary.js +103 -0
- package/src/commands/machine.js +137 -0
- package/src/commands/security.js +67 -4
- package/src/commands/setup.js +33 -16
- package/src/commands/status.js +8 -1
- package/src/features/resolve.js +1 -0
- package/src/knowledge/engine.js +21 -2
- package/src/knowledge/runtime-discovery.js +127 -0
- package/src/lib/identity-scaffold.js +53 -13
- package/src/lib/setup/recipes.js +1 -1
- package/src/models/discovery.js +40 -22
- package/src/models/inventory-core.d.ts +105 -0
- package/src/models/inventory-core.js +54 -6
- package/src/security/logs.js +3 -0
- package/src/ui/cli/help.js +41 -0
- package/test/apps-scaffold-contract.test.mjs +3 -2
- package/test/cli/api-key-env-whoami.test.mjs +2 -2
- package/test/cli/catalog-authority.test.mjs +64 -0
- package/test/cli/machine-command.test.mjs +34 -0
- package/test/fixtures/project-authority/customer-app/.agentsam/app.json +5 -0
- package/test/fixtures/project-authority/customer-app/apps/my-product/index.ts +1 -0
- package/test/fixtures/project-authority/customer-app/wrangler.toml +17 -0
- package/test/integration/autorag-project-authority.integration.test.mjs +51 -0
- package/test/integration/autorag-runtime-discovery.test.mjs +107 -0
- package/test/integration/cms-app-scaffold.test.mjs +37 -31
- package/test/integration/cms-site-tenancy-contract.test.mjs +28 -17
- package/test/integration/codebaseindex-ingest.test.mjs +41 -0
- package/test/integration/database-hosted-honesty.test.mjs +49 -0
- package/test/integration/desktop-keychain-boundary.test.mjs +45 -0
- package/test/integration/hosted-work-host-authority.test.mjs +47 -0
- package/test/integration/inventory-eligibility.test.mjs +59 -0
- package/test/integration/local-provider-bridge.test.mjs +65 -0
- package/test/integration/local-studio-settings-production.test.mjs +40 -0
- package/test/integration/lockfile-sync.test.mjs +26 -0
- package/test/integration/provider-env-cli.test.mjs +13 -3
- package/test/integration/runtime-status.integration.test.mjs +16 -1
- package/test/integration/theme-package-registry.test.mjs +31 -0
- package/test/repository-snapshot-view.test.mjs +2 -2
- package/test/security.test.mjs +14 -0
- package/test/terminal-machine-identity.test.mjs +2 -2
- package/apps/client-cms-editor/backend/src/demo-bootstrap.ts +0 -145
- package/packages/agentsam-nav/dist/Nav.d.ts +0 -43
- package/packages/agentsam-nav/dist/NavCollapsible.d.ts +0 -10
- package/packages/agentsam-nav/dist/NavContent.d.ts +0 -2
- package/packages/agentsam-nav/dist/NavFooter.d.ts +0 -2
- package/packages/agentsam-nav/dist/NavGroup.d.ts +0 -3
- package/packages/agentsam-nav/dist/NavHeader.d.ts +0 -2
- package/packages/agentsam-nav/dist/NavMenu.d.ts +0 -22
- package/packages/agentsam-nav/dist/NavProvider.d.ts +0 -35
- package/packages/agentsam-nav/dist/NavTrigger.d.ts +0 -2
- package/packages/agentsam-nav/dist/Surfaces.d.ts +0 -41
- package/packages/agentsam-nav/dist/browser.d.ts +0 -11
- package/packages/agentsam-nav/dist/browser.global.js +0 -132
- package/packages/agentsam-nav/dist/browser.js +0 -613
- package/packages/agentsam-nav/dist/contracts.d.ts +0 -76
- package/packages/agentsam-nav/dist/index.d.ts +0 -11
- package/packages/agentsam-nav/dist/index.js +0 -614
- package/packages/agentsam-nav/dist/legacy.css +0 -83
- package/packages/agentsam-nav/dist/shell.css +0 -113
- package/packages/agentsam-nav/dist/theme.css +0 -113
- package/packages/agentsam-nav/dist/utils.d.ts +0 -1
- package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +0 -670
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* AgentSam CMS CLI — scaffold / import theme / local multipage runtime.
|
|
4
|
+
* Bin entry must remain a plain relative .js path so npm publish keeps it.
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { spawnSync } from 'node:child_process';
|
|
9
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
10
|
+
|
|
11
|
+
const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
12
|
+
const sdkRoot = path.resolve(packageRoot, '../..');
|
|
13
|
+
const manifestPath = path.join(packageRoot, 'agentsam.app.json');
|
|
14
|
+
const PERSISTENCE = new Set(['sqlite', 'd1']);
|
|
15
|
+
const STARTERS = new Set(['heuristic', 'blank', 'iasf', 'import']);
|
|
16
|
+
|
|
17
|
+
function usage() {
|
|
18
|
+
console.log(`
|
|
19
|
+
AgentSam website + CMS kit
|
|
20
|
+
|
|
21
|
+
agentsam-cms --help
|
|
22
|
+
agentsam-cms info
|
|
23
|
+
agentsam-cms doctor
|
|
24
|
+
agentsam-cms create <directory> --starter heuristic|blank|iasf|import [--theme <path>] [--persistence sqlite|d1]
|
|
25
|
+
agentsam-cms import-theme <sourceDirOrZip> --out <theme-pack-dir>
|
|
26
|
+
agentsam-cms dev [--db <sqlitePath>] [--site <siteId>] [--port 4317]
|
|
27
|
+
agentsam-cms scaffold <directory> [--persistence sqlite|d1] (legacy alias of create --starter heuristic)
|
|
28
|
+
agentsam-cms preview
|
|
29
|
+
|
|
30
|
+
Local-first:
|
|
31
|
+
create → SQLite + starter/theme → agentsam-cms dev
|
|
32
|
+
→ http://localhost:4317/ public multipage site
|
|
33
|
+
→ http://localhost:4317/cms protected CMS surface
|
|
34
|
+
`.trim());
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function info() {
|
|
38
|
+
console.log(JSON.stringify(JSON.parse(fs.readFileSync(manifestPath, 'utf8')), null, 2));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function doctor() {
|
|
42
|
+
const required = ['frontend', 'backend', 'shared', 'bin', 'package.json', 'agentsam.app.json', 'dist'];
|
|
43
|
+
const missing = required.filter((rel) => !fs.existsSync(path.join(packageRoot, rel)));
|
|
44
|
+
if (missing.length) {
|
|
45
|
+
console.error('doctor failed; missing:', missing.join(', '));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
for (const rel of ['dist/index.js', 'dist/sqlite-adapter.js', 'dist/import/index.js', 'dist/local/index.js']) {
|
|
49
|
+
if (!fs.existsSync(path.join(packageRoot, rel))) {
|
|
50
|
+
console.error(`doctor failed; run npm run build (missing ${rel})`);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
console.log('✓ client-cms-editor layout ok');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function loadDist(rel) {
|
|
58
|
+
return import(pathToFileURL(path.join(packageRoot, rel)).href);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function parseArgs(args) {
|
|
62
|
+
const out = { _: [] };
|
|
63
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
64
|
+
const a = args[i];
|
|
65
|
+
if (a.startsWith('--')) {
|
|
66
|
+
const key = a.slice(2);
|
|
67
|
+
const val = args[i + 1] && !args[i + 1].startsWith('--') ? args[++i] : true;
|
|
68
|
+
out[key] = val;
|
|
69
|
+
} else {
|
|
70
|
+
out._.push(a);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function importThemeCmd(args) {
|
|
77
|
+
const parsed = parseArgs(args);
|
|
78
|
+
const source = parsed._[0];
|
|
79
|
+
const outDir = parsed.out;
|
|
80
|
+
if (!source || !outDir) throw new Error('usage: agentsam-cms import-theme <source> --out <dir>');
|
|
81
|
+
const { importThemeFromSource } = await loadDist('dist/import/index.js');
|
|
82
|
+
const pack = importThemeFromSource(path.resolve(source), {
|
|
83
|
+
outDir: path.resolve(outDir),
|
|
84
|
+
packId: typeof parsed['pack-id'] === 'string' ? parsed['pack-id'] : undefined,
|
|
85
|
+
});
|
|
86
|
+
console.log(`✓ imported theme → ${path.resolve(outDir)}`);
|
|
87
|
+
console.log(` pages: ${pack.manifest.pages.join(', ')}`);
|
|
88
|
+
console.log(` assets: ${pack.manifest.assetCount} · donor candidates: ${pack.donorCandidates.length}`);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async function createCmd(args) {
|
|
92
|
+
const parsed = parseArgs(args);
|
|
93
|
+
const target = parsed._[0];
|
|
94
|
+
if (!target) throw new Error('create requires a target directory');
|
|
95
|
+
const starter = String(parsed.starter || 'heuristic');
|
|
96
|
+
if (!STARTERS.has(starter)) throw new Error(`unsupported starter "${starter}"; choose heuristic|blank|iasf|import`);
|
|
97
|
+
const persistence = String(parsed.persistence || 'sqlite');
|
|
98
|
+
if (!PERSISTENCE.has(persistence)) {
|
|
99
|
+
throw new Error(`unsupported persistence "${persistence}"; choose sqlite or d1`);
|
|
100
|
+
}
|
|
101
|
+
if (starter === 'import' && !parsed.theme) {
|
|
102
|
+
throw new Error('create --starter import requires --theme <directory-or-zip>');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const targetRoot = path.resolve(process.cwd(), target);
|
|
106
|
+
if (fs.existsSync(targetRoot) && fs.readdirSync(targetRoot).length) {
|
|
107
|
+
throw new Error(`target directory is not empty: ${targetRoot}`);
|
|
108
|
+
}
|
|
109
|
+
fs.mkdirSync(targetRoot, { recursive: true });
|
|
110
|
+
fs.mkdirSync(path.join(targetRoot, '.agentsam', 'assets'), { recursive: true });
|
|
111
|
+
fs.mkdirSync(path.join(targetRoot, 'public'), { recursive: true });
|
|
112
|
+
|
|
113
|
+
const cfg = {
|
|
114
|
+
schema: 'agentsam.cms.project.v1',
|
|
115
|
+
starter,
|
|
116
|
+
persistence,
|
|
117
|
+
siteId: starter === 'import' ? 'imported' : starter,
|
|
118
|
+
dbPath: '.agentsam/cms.sqlite',
|
|
119
|
+
assetsDir: '.agentsam/assets',
|
|
120
|
+
port: 4317,
|
|
121
|
+
cmsBase: '/cms',
|
|
122
|
+
auth: { mode: 'local-dev-principal' },
|
|
123
|
+
};
|
|
124
|
+
fs.writeFileSync(path.join(targetRoot, 'cms.config.json'), `${JSON.stringify(cfg, null, 2)}\n`);
|
|
125
|
+
fs.writeFileSync(
|
|
126
|
+
path.join(targetRoot, 'agentsam.app.json'),
|
|
127
|
+
`${JSON.stringify(
|
|
128
|
+
{
|
|
129
|
+
schema: 'agentsam.app.v1',
|
|
130
|
+
id: path.basename(targetRoot),
|
|
131
|
+
product_id: 'cms',
|
|
132
|
+
name: path.basename(targetRoot),
|
|
133
|
+
kind: 'customer-site',
|
|
134
|
+
package: '@inneranimalmedia/client-cms-editor',
|
|
135
|
+
},
|
|
136
|
+
null,
|
|
137
|
+
2,
|
|
138
|
+
)}\n`,
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
if (persistence !== 'sqlite') {
|
|
142
|
+
console.log(`✓ created project shell at ${targetRoot} (persistence=${persistence})`);
|
|
143
|
+
console.log(' connect a CmsEditorAdapter before dev; local SQLite path skipped');
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const { SqliteCmsAdapter } = await loadDist('dist/sqlite-adapter.js');
|
|
148
|
+
const rootMod = await loadDist('dist/index.js');
|
|
149
|
+
const { installStarterPack } = rootMod;
|
|
150
|
+
const dbPath = path.join(targetRoot, cfg.dbPath);
|
|
151
|
+
const adapter = new SqliteCmsAdapter(dbPath);
|
|
152
|
+
try {
|
|
153
|
+
let pack;
|
|
154
|
+
if (starter === 'heuristic') {
|
|
155
|
+
pack = rootMod.heuristicStarterPack;
|
|
156
|
+
} else if (starter === 'blank') {
|
|
157
|
+
pack = rootMod.blankStarterPack;
|
|
158
|
+
} else if (starter === 'iasf') {
|
|
159
|
+
pack = rootMod.iasfStarterPack;
|
|
160
|
+
if (!pack) throw new Error('iasfStarterPack export missing — rebuild client-cms-editor');
|
|
161
|
+
} else {
|
|
162
|
+
const { importThemeFromSource } = await loadDist('dist/import/index.js');
|
|
163
|
+
const themeOut = path.join(targetRoot, 'starter', 'imported-theme-pack');
|
|
164
|
+
const themePack = importThemeFromSource(path.resolve(String(parsed.theme)), {
|
|
165
|
+
outDir: themeOut,
|
|
166
|
+
packId: 'imported',
|
|
167
|
+
});
|
|
168
|
+
pack = themePack.starterPack;
|
|
169
|
+
cfg.themePack = 'starter/imported-theme-pack';
|
|
170
|
+
fs.writeFileSync(path.join(targetRoot, 'cms.config.json'), `${JSON.stringify(cfg, null, 2)}\n`);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const installed = await installStarterPack(adapter, pack, { siteId: cfg.siteId });
|
|
174
|
+
for (const pageId of installed.pageIds) {
|
|
175
|
+
await adapter.publish(pageId);
|
|
176
|
+
}
|
|
177
|
+
console.log(`✓ created ${starter} project at ${targetRoot}`);
|
|
178
|
+
console.log(` sqlite: ${cfg.dbPath}`);
|
|
179
|
+
console.log(` pages published: ${installed.pageIds.length}`);
|
|
180
|
+
console.log(` next: cd ${target} && npx agentsam-cms dev`);
|
|
181
|
+
} finally {
|
|
182
|
+
adapter.close();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
async function devCmd(args) {
|
|
187
|
+
const parsed = parseArgs(args);
|
|
188
|
+
const cwd = process.cwd();
|
|
189
|
+
const cfgPath = path.join(cwd, 'cms.config.json');
|
|
190
|
+
const cfg = fs.existsSync(cfgPath) ? JSON.parse(fs.readFileSync(cfgPath, 'utf8')) : {};
|
|
191
|
+
const dbPath = path.resolve(cwd, String(parsed.db || cfg.dbPath || '.agentsam/cms.sqlite'));
|
|
192
|
+
const siteId = String(parsed.site || cfg.siteId || 'heuristic');
|
|
193
|
+
const port = Number(parsed.port || cfg.port || 4317);
|
|
194
|
+
|
|
195
|
+
if (!fs.existsSync(dbPath)) {
|
|
196
|
+
throw new Error(`sqlite db missing at ${dbPath} — run agentsam-cms create first`);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const { SqliteCmsAdapter } = await loadDist('dist/sqlite-adapter.js');
|
|
200
|
+
const { startLocalCmsRuntime } = await loadDist('dist/local/index.js');
|
|
201
|
+
const adapter = new SqliteCmsAdapter(dbPath);
|
|
202
|
+
const runtime = await startLocalCmsRuntime({
|
|
203
|
+
adapter,
|
|
204
|
+
siteId,
|
|
205
|
+
port,
|
|
206
|
+
cmsBase: cfg.cmsBase || '/cms',
|
|
207
|
+
});
|
|
208
|
+
console.log(`✓ local CMS runtime`);
|
|
209
|
+
console.log(` public ${runtime.origin}/`);
|
|
210
|
+
console.log(` cms ${runtime.origin}/cms`);
|
|
211
|
+
console.log(` sqlite ${dbPath}`);
|
|
212
|
+
console.log(' Ctrl+C to stop');
|
|
213
|
+
|
|
214
|
+
const shutdown = async () => {
|
|
215
|
+
await runtime.close();
|
|
216
|
+
adapter.close();
|
|
217
|
+
process.exit(0);
|
|
218
|
+
};
|
|
219
|
+
process.on('SIGINT', shutdown);
|
|
220
|
+
process.on('SIGTERM', shutdown);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function preview(args) {
|
|
224
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8'));
|
|
225
|
+
const script = pkg.scripts?.preview ? 'preview' : pkg.scripts?.dev ? 'dev' : null;
|
|
226
|
+
if (!script) {
|
|
227
|
+
console.error('no preview/dev script in package.json');
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
231
|
+
const result = spawnSync(npmCmd, ['run', script, '--', ...args], {
|
|
232
|
+
cwd: packageRoot,
|
|
233
|
+
stdio: 'inherit',
|
|
234
|
+
shell: process.platform === 'win32',
|
|
235
|
+
});
|
|
236
|
+
process.exit(result.status ?? 1);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
function scaffoldLegacy(args) {
|
|
240
|
+
const parsed = parseArgs(args);
|
|
241
|
+
return createCmd([parsed._[0], '--starter', 'heuristic', '--persistence', parsed.persistence || 'sqlite'].filter(Boolean));
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const [cmd = 'help', ...rest] = process.argv.slice(2);
|
|
245
|
+
try {
|
|
246
|
+
if (cmd === '--help' || cmd === '-h' || cmd === 'help') usage();
|
|
247
|
+
else if (cmd === 'info') info();
|
|
248
|
+
else if (cmd === 'doctor') doctor();
|
|
249
|
+
else if (cmd === 'create') await createCmd(rest);
|
|
250
|
+
else if (cmd === 'import-theme') await importThemeCmd(rest);
|
|
251
|
+
else if (cmd === 'dev') await devCmd(rest);
|
|
252
|
+
else if (cmd === 'scaffold') await scaffoldLegacy(rest);
|
|
253
|
+
else if (cmd === 'preview') preview(rest);
|
|
254
|
+
else {
|
|
255
|
+
console.error(`unknown command: ${cmd}`);
|
|
256
|
+
usage();
|
|
257
|
+
process.exit(1);
|
|
258
|
+
}
|
|
259
|
+
} catch (err) {
|
|
260
|
+
console.error(String(err?.message || err));
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
@@ -1,229 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
import { spawnSync } from 'node:child_process';
|
|
5
|
-
import { fileURLToPath } from 'node:url';
|
|
6
|
-
|
|
7
|
-
const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
8
|
-
const sdkRoot = path.resolve(packageRoot, '../..');
|
|
9
|
-
const manifestPath = path.join(packageRoot, 'agentsam.app.json');
|
|
10
|
-
const PERSISTENCE = new Set(['sqlite', 'd1', 'localStorage']);
|
|
11
|
-
|
|
12
|
-
function usage() {
|
|
13
|
-
console.log(`
|
|
14
|
-
AgentSam CMS Editor
|
|
15
|
-
|
|
16
|
-
agentsam-cms [preview]
|
|
17
|
-
agentsam-cms info
|
|
18
|
-
agentsam-cms doctor
|
|
19
|
-
agentsam-cms scaffold <directory> [--persistence sqlite|d1|localStorage]
|
|
20
|
-
|
|
21
|
-
preview
|
|
22
|
-
Run the app preview script when present.
|
|
23
|
-
|
|
24
|
-
info
|
|
25
|
-
Print the AgentSam app manifest.
|
|
26
|
-
|
|
27
|
-
doctor
|
|
28
|
-
Verify frontend/backend/shared layout.
|
|
29
|
-
|
|
30
|
-
scaffold
|
|
31
|
-
Copy editable source into a new directory.
|
|
32
|
-
sqlite local authority for desktop/offline use
|
|
33
|
-
d1 cloud authority through the CMS API
|
|
34
|
-
localStorage browser draft cache only; never authoritative
|
|
35
|
-
`.trim());
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function info() {
|
|
39
|
-
console.log(JSON.stringify(JSON.parse(fs.readFileSync(manifestPath, 'utf8')), null, 2));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function doctor() {
|
|
43
|
-
const required = ['frontend', 'backend', 'shared', 'bin', 'package.json', 'agentsam.app.json'];
|
|
44
|
-
const missing = required.filter((rel) => !fs.existsSync(path.join(packageRoot, rel)));
|
|
45
|
-
if (missing.length) {
|
|
46
|
-
console.error('doctor failed; missing:', missing.join(', '));
|
|
47
|
-
process.exit(1);
|
|
48
|
-
}
|
|
49
|
-
console.log('✓ client-cms-editor layout ok');
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function parseScaffoldArgs(args) {
|
|
53
|
-
const target = args[0];
|
|
54
|
-
let persistence = 'sqlite';
|
|
55
|
-
for (let i = 1; i < args.length; i += 1) {
|
|
56
|
-
if (args[i] === '--persistence') {
|
|
57
|
-
persistence = String(args[i + 1] || '').trim();
|
|
58
|
-
i += 1;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
if (!PERSISTENCE.has(persistence)) {
|
|
62
|
-
throw new Error(`unsupported persistence "${persistence}"; choose sqlite, d1, or localStorage`);
|
|
63
|
-
}
|
|
64
|
-
return { target, persistence };
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const COPY_SKIP = new Set(['node_modules', 'dist', 'coverage', '.git', '.wrangler', '.agentsam']);
|
|
68
|
-
|
|
69
|
-
function copySource(source, target) {
|
|
70
|
-
fs.cpSync(source, target, {
|
|
71
|
-
recursive: true,
|
|
72
|
-
filter(candidate) {
|
|
73
|
-
if (candidate === source) return true;
|
|
74
|
-
return !candidate
|
|
75
|
-
.split(path.sep)
|
|
76
|
-
.some((part) => COPY_SKIP.has(part));
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function readJson(file) {
|
|
82
|
-
return JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function writeJson(file, value) {
|
|
86
|
-
fs.writeFileSync(file, `${JSON.stringify(value, null, 2)}
|
|
87
|
-
`);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function makeStandaloneWorkspace(targetRoot) {
|
|
91
|
-
const rootPackage = path.join(targetRoot, 'package.json');
|
|
92
|
-
const rootPkg = readJson(rootPackage);
|
|
93
|
-
rootPkg.workspaces = [...new Set([...(rootPkg.workspaces || []), 'packages/*'])];
|
|
94
|
-
writeJson(rootPackage, rootPkg);
|
|
95
|
-
|
|
96
|
-
const packageFiles = [
|
|
97
|
-
path.join(targetRoot, 'frontend/package.json'),
|
|
98
|
-
path.join(targetRoot, 'shared/cms/package.json'),
|
|
99
|
-
];
|
|
100
|
-
for (const file of packageFiles) {
|
|
101
|
-
if (!fs.existsSync(file)) continue;
|
|
102
|
-
const pkg = readJson(file);
|
|
103
|
-
for (const section of ['dependencies', 'devDependencies']) {
|
|
104
|
-
if (!pkg[section]) continue;
|
|
105
|
-
for (const name of [
|
|
106
|
-
'@inneranimalmedia/agentsam-contracts',
|
|
107
|
-
'@inneranimalmedia/agentsam-workbench',
|
|
108
|
-
]) {
|
|
109
|
-
if (pkg[section][name]?.startsWith?.('file:')) pkg[section][name] = '0.1.0';
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
writeJson(file, pkg);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
function runtimeConfig(persistence) {
|
|
117
|
-
if (persistence === 'sqlite') {
|
|
118
|
-
return {
|
|
119
|
-
schema: 'agentsam.cms.runtime.v1',
|
|
120
|
-
app_id: 'client-cms-editor',
|
|
121
|
-
run_target: 'local',
|
|
122
|
-
authority: 'sqlite',
|
|
123
|
-
cache: 'localStorage',
|
|
124
|
-
cache_only: false,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
if (persistence === 'd1') {
|
|
128
|
-
return {
|
|
129
|
-
schema: 'agentsam.cms.runtime.v1',
|
|
130
|
-
app_id: 'client-cms-editor',
|
|
131
|
-
run_target: 'cloudflare',
|
|
132
|
-
authority: 'd1',
|
|
133
|
-
cache: 'localStorage',
|
|
134
|
-
cache_only: false,
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
return {
|
|
138
|
-
schema: 'agentsam.cms.runtime.v1',
|
|
139
|
-
app_id: 'client-cms-editor',
|
|
140
|
-
run_target: 'browser',
|
|
141
|
-
authority: null,
|
|
142
|
-
cache: 'localStorage',
|
|
143
|
-
cache_only: true,
|
|
144
|
-
note: 'localStorage is a draft/offline cache only; configure SQLite or D1 before authoritative publish.',
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
function scaffold(targetArg, { persistence = 'sqlite' } = {}) {
|
|
149
|
-
if (!targetArg) throw new Error('scaffold requires a target directory');
|
|
150
|
-
const targetRoot = path.resolve(process.cwd(), targetArg);
|
|
151
|
-
if (fs.existsSync(targetRoot) && fs.readdirSync(targetRoot).length) {
|
|
152
|
-
throw new Error(`target directory is not empty: ${targetRoot}`);
|
|
153
|
-
}
|
|
154
|
-
fs.mkdirSync(targetRoot, { recursive: true });
|
|
155
|
-
|
|
156
|
-
for (const relative of [
|
|
157
|
-
'frontend',
|
|
158
|
-
'backend',
|
|
159
|
-
'shared',
|
|
160
|
-
'bin',
|
|
161
|
-
'.gitignore',
|
|
162
|
-
'package.json',
|
|
163
|
-
'README.md',
|
|
164
|
-
'agentsam.app.json',
|
|
165
|
-
'IMPORT_PROVENANCE.json',
|
|
166
|
-
]) {
|
|
167
|
-
const source = path.join(packageRoot, relative);
|
|
168
|
-
if (!fs.existsSync(source)) continue;
|
|
169
|
-
copySource(source, path.join(targetRoot, relative));
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const portablePackages = [
|
|
173
|
-
'agentsam-contracts',
|
|
174
|
-
'agentsam-workbench',
|
|
175
|
-
];
|
|
176
|
-
for (const name of portablePackages) {
|
|
177
|
-
const source = path.join(sdkRoot, 'packages', name);
|
|
178
|
-
if (!fs.existsSync(source)) {
|
|
179
|
-
throw new Error(`required scaffold package missing: packages/${name}`);
|
|
180
|
-
}
|
|
181
|
-
copySource(source, path.join(targetRoot, 'packages', name));
|
|
182
|
-
}
|
|
183
|
-
makeStandaloneWorkspace(targetRoot);
|
|
184
|
-
|
|
185
|
-
const stateDir = path.join(targetRoot, '.agentsam');
|
|
186
|
-
fs.mkdirSync(stateDir, { recursive: true });
|
|
187
|
-
fs.writeFileSync(
|
|
188
|
-
path.join(stateDir, 'cms-runtime.json'),
|
|
189
|
-
`${JSON.stringify(runtimeConfig(persistence), null, 2)}\n`,
|
|
190
|
-
);
|
|
191
|
-
|
|
192
|
-
console.log(`✓ scaffolded CMS editor into ${targetRoot}`);
|
|
193
|
-
console.log(` persistence: ${persistence}${persistence === 'localStorage' ? ' (cache only)' : ''}`);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
function preview(args) {
|
|
197
|
-
const pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8'));
|
|
198
|
-
const script = pkg.scripts?.preview ? 'preview' : pkg.scripts?.dev ? 'dev' : null;
|
|
199
|
-
if (!script) {
|
|
200
|
-
console.error('no preview/dev script in package.json');
|
|
201
|
-
process.exit(1);
|
|
202
|
-
}
|
|
203
|
-
const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
204
|
-
const result = spawnSync(npmCmd, ['run', script, '--', ...args], {
|
|
205
|
-
cwd: packageRoot,
|
|
206
|
-
stdio: 'inherit',
|
|
207
|
-
shell: process.platform === 'win32',
|
|
208
|
-
});
|
|
209
|
-
process.exit(result.status ?? 1);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
const [cmd = 'preview', ...rest] = process.argv.slice(2);
|
|
213
|
-
try {
|
|
214
|
-
if (cmd === '--help' || cmd === '-h' || cmd === 'help') usage();
|
|
215
|
-
else if (cmd === 'info') info();
|
|
216
|
-
else if (cmd === 'doctor') doctor();
|
|
217
|
-
else if (cmd === 'scaffold') {
|
|
218
|
-
const { target, persistence } = parseScaffoldArgs(rest);
|
|
219
|
-
scaffold(target, { persistence });
|
|
220
|
-
} else if (cmd === 'preview') preview(rest);
|
|
221
|
-
else {
|
|
222
|
-
console.error(`unknown command: ${cmd}`);
|
|
223
|
-
usage();
|
|
224
|
-
process.exit(1);
|
|
225
|
-
}
|
|
226
|
-
} catch (err) {
|
|
227
|
-
console.error(String(err?.message || err));
|
|
228
|
-
process.exit(1);
|
|
229
|
-
}
|
|
2
|
+
/** Re-export shim — canonical CLI entry is agentsam-cms.js (npm-publish safe). */
|
|
3
|
+
import './agentsam-cms.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inneranimalmedia/agentsam-cms-frontend",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
3
|
+
"version": "2.6.7",
|
|
4
|
+
"description": "Internal CMS frontend (bundled into @inneranimalmedia/client-cms-editor — not published separately).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": "./src/index.ts",
|
|
@@ -15,10 +15,8 @@
|
|
|
15
15
|
"test": "vitest run --passWithNoTests"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@inneranimalmedia/agentsam-cms-backend": "
|
|
19
|
-
"@inneranimalmedia/agentsam-cms-shared": "
|
|
20
|
-
"@inneranimalmedia/agentsam-contracts": "file:../../../packages/agentsam-contracts",
|
|
21
|
-
"@inneranimalmedia/agentsam-workbench": "file:../../../packages/agentsam-workbench",
|
|
18
|
+
"@inneranimalmedia/agentsam-cms-backend": "2.6.7",
|
|
19
|
+
"@inneranimalmedia/agentsam-cms-shared": "2.6.7",
|
|
22
20
|
"react": "^19.2.0",
|
|
23
21
|
"react-dom": "^19.2.0"
|
|
24
22
|
},
|
|
@@ -29,5 +27,16 @@
|
|
|
29
27
|
"typescript": "^5.9.3",
|
|
30
28
|
"vite": "^6.4.3",
|
|
31
29
|
"vitest": "^4.1.11"
|
|
32
|
-
}
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://github.com/SamPrimeaux/agentsam-sdk.git",
|
|
37
|
+
"directory": "apps/client-cms-editor/frontend"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"src"
|
|
41
|
+
]
|
|
33
42
|
}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import { useEffect,
|
|
2
|
-
import type { AgentPrincipal, AgentWorkbenchAdapter } from '@inneranimalmedia/agentsam-contracts';
|
|
3
|
-
import { ConnectedAgentPanel } from '@inneranimalmedia/agentsam-workbench/agent';
|
|
4
|
-
import { createCmsAgentContextProvider } from '@inneranimalmedia/agentsam-cms-shared';
|
|
1
|
+
import { useEffect, useRef, useState } from 'react';
|
|
5
2
|
import './styles/agentsam-drawer.css';
|
|
6
3
|
|
|
7
4
|
export type AgentSamDrawerProps = {
|
|
8
5
|
open: boolean;
|
|
9
6
|
onClose: () => void;
|
|
10
|
-
adapter?: AgentWorkbenchAdapter | null;
|
|
11
|
-
principal?: AgentPrincipal | null;
|
|
12
7
|
projectId: string;
|
|
13
8
|
conversationId: string;
|
|
14
9
|
route?: string;
|
|
@@ -18,40 +13,22 @@ export type AgentSamDrawerProps = {
|
|
|
18
13
|
selectionLabel?: string | null;
|
|
19
14
|
pendingPrompt?: string | null;
|
|
20
15
|
onPendingPromptConsumed?: () => void;
|
|
16
|
+
/** Host-provided live AgentSam panel; when omitted, demo shell is shown. */
|
|
17
|
+
children?: React.ReactNode;
|
|
21
18
|
};
|
|
22
19
|
|
|
23
20
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
21
|
+
* CMS side-assistant chrome. Live AgentSam UI is injected by the host via children.
|
|
22
|
+
* Core package never imports agentsam-workbench.
|
|
26
23
|
*/
|
|
27
24
|
export function AgentSamDrawer({
|
|
28
25
|
open,
|
|
29
26
|
onClose,
|
|
30
|
-
adapter,
|
|
31
|
-
principal,
|
|
32
|
-
projectId,
|
|
33
|
-
conversationId,
|
|
34
|
-
route,
|
|
35
|
-
pageId,
|
|
36
|
-
sectionId,
|
|
37
|
-
blockId,
|
|
38
27
|
selectionLabel,
|
|
39
28
|
pendingPrompt,
|
|
40
29
|
onPendingPromptConsumed,
|
|
30
|
+
children,
|
|
41
31
|
}: AgentSamDrawerProps) {
|
|
42
|
-
const contextProvider = useMemo(() => createCmsAgentContextProvider(() => ({
|
|
43
|
-
principal: principal || {
|
|
44
|
-
accountId: 'demo',
|
|
45
|
-
authUserId: 'demo',
|
|
46
|
-
displayName: 'Demo',
|
|
47
|
-
},
|
|
48
|
-
projectId,
|
|
49
|
-
route,
|
|
50
|
-
pageId,
|
|
51
|
-
sectionId,
|
|
52
|
-
blockId,
|
|
53
|
-
})), [principal, projectId, route, pageId, sectionId, blockId]);
|
|
54
|
-
|
|
55
32
|
const status = selectionLabel
|
|
56
33
|
? `Editing “${selectionLabel}”`
|
|
57
34
|
: 'Context-aware admin chat';
|
|
@@ -84,16 +61,7 @@ export function AgentSamDrawer({
|
|
|
84
61
|
</button>
|
|
85
62
|
</header>
|
|
86
63
|
|
|
87
|
-
{
|
|
88
|
-
<ConnectedAgentPanel
|
|
89
|
-
className="agentsam-connected"
|
|
90
|
-
adapter={adapter}
|
|
91
|
-
contextProvider={contextProvider}
|
|
92
|
-
conversationId={conversationId}
|
|
93
|
-
header={null}
|
|
94
|
-
empty={<div className="agentsam-empty">Ask about this page, sections, or publish flow. I’ll use the current CMS selection.</div>}
|
|
95
|
-
/>
|
|
96
|
-
) : (
|
|
64
|
+
{children || (
|
|
97
65
|
<DemoDrawerChat
|
|
98
66
|
selectionLabel={selectionLabel}
|
|
99
67
|
pendingPrompt={pendingPrompt}
|
|
@@ -117,7 +85,7 @@ function DemoDrawerChat({
|
|
|
117
85
|
const [messages, setMessages] = useState<{ role: 'user' | 'assistant'; text: string }[]>([
|
|
118
86
|
{
|
|
119
87
|
role: 'assistant',
|
|
120
|
-
text: 'Ask about this page
|
|
88
|
+
text: 'Ask about this page or content. Bind a host AgentSam panel to run live tools — this shell is chrome only.',
|
|
121
89
|
},
|
|
122
90
|
]);
|
|
123
91
|
const [value, setValue] = useState('');
|
|
@@ -147,7 +115,7 @@ function DemoDrawerChat({
|
|
|
147
115
|
...prev,
|
|
148
116
|
{
|
|
149
117
|
role: 'assistant',
|
|
150
|
-
text: `Got it${scope}.
|
|
118
|
+
text: `Got it${scope}. No AgentSam host is attached — provide CmsAgentHost.renderDrawer from the consumer to enable live tools.`,
|
|
151
119
|
},
|
|
152
120
|
]);
|
|
153
121
|
setBusy(false);
|