@inneranimalmedia/agentsam-sdk 2.6.3 → 2.6.5
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 +17 -0
- package/README.md +31 -10
- package/apps/client-cms-editor/AGENTS.md +12 -0
- package/apps/client-cms-editor/IMPORT_PROVENANCE.json +8 -0
- package/apps/client-cms-editor/README.md +72 -0
- package/apps/client-cms-editor/agentsam.app.json +57 -0
- package/apps/client-cms-editor/backend/README.md +5 -0
- package/apps/client-cms-editor/backend/package.json +22 -0
- package/apps/client-cms-editor/backend/src/api/client.ts +200 -0
- package/apps/client-cms-editor/backend/src/demo-bootstrap.ts +145 -0
- package/apps/client-cms-editor/backend/src/index.ts +6 -0
- package/apps/client-cms-editor/backend/src/model.ts +115 -0
- package/apps/client-cms-editor/backend/src/preview/bridge.ts +79 -0
- package/apps/client-cms-editor/backend/src/preview/urls.ts +55 -0
- package/apps/client-cms-editor/backend/src/routing/cms-route.js +293 -0
- package/apps/client-cms-editor/backend/src/routing/index.js +10 -0
- package/apps/client-cms-editor/backend/src/storefront.ts +52 -0
- package/apps/client-cms-editor/backend/tsconfig.json +15 -0
- package/apps/client-cms-editor/backend/worker/index.js +34 -0
- package/apps/client-cms-editor/backend/wrangler.jsonc +11 -0
- package/apps/client-cms-editor/bin/agentsam-cms.mjs +229 -0
- package/apps/client-cms-editor/frontend/index.html +12 -0
- package/apps/client-cms-editor/frontend/package.json +33 -0
- package/apps/client-cms-editor/frontend/src/AgentSamDrawer.tsx +188 -0
- package/apps/client-cms-editor/frontend/src/CmsAgentSurface.tsx +191 -0
- package/apps/client-cms-editor/frontend/src/CmsEditor.tsx +1345 -0
- package/apps/client-cms-editor/frontend/src/env.d.ts +14 -0
- package/apps/client-cms-editor/frontend/src/index.ts +8 -0
- package/apps/client-cms-editor/frontend/src/lib/content-safety.ts +63 -0
- package/apps/client-cms-editor/frontend/src/main.tsx +17 -0
- package/apps/client-cms-editor/frontend/src/mount.tsx +51 -0
- package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +214 -0
- package/apps/client-cms-editor/frontend/src/styles/cmsShell.css +1739 -0
- package/apps/client-cms-editor/frontend/src/styles/studio.css +106 -0
- package/apps/client-cms-editor/frontend/src/surfaces/CmsDashboard.tsx +313 -0
- package/apps/client-cms-editor/frontend/src/surfaces/CmsGuidedChatHero.tsx +121 -0
- package/apps/client-cms-editor/frontend/src/surfaces/CmsHubPage.tsx +132 -0
- package/apps/client-cms-editor/frontend/src/surfaces/CmsSiteSwitcher.tsx +176 -0
- package/apps/client-cms-editor/frontend/src/surfaces/index.ts +5 -0
- package/apps/client-cms-editor/frontend/src/surfaces/types.ts +48 -0
- package/apps/client-cms-editor/frontend/tsconfig.json +25 -0
- package/apps/client-cms-editor/frontend/vite.config.ts +13 -0
- package/apps/client-cms-editor/package-lock.json +3832 -0
- package/apps/client-cms-editor/package.json +23 -0
- package/apps/client-cms-editor/reference/DONOR_README.md +52 -0
- package/apps/client-cms-editor/reference/DONOR_package-lock.json +1253 -0
- package/apps/client-cms-editor/reference/DONOR_tsconfig.json +15 -0
- package/apps/client-cms-editor/shared/cms/package.json +21 -0
- package/apps/client-cms-editor/shared/cms/src/agent-context.ts +35 -0
- package/apps/client-cms-editor/shared/cms/src/cloudflare-bindings.ts +51 -0
- package/apps/client-cms-editor/shared/cms/src/editor-types.ts +58 -0
- package/apps/client-cms-editor/shared/cms/src/index.ts +5 -0
- package/apps/client-cms-editor/shared/cms/src/publication.ts +24 -0
- package/apps/client-cms-editor/shared/cms/src/routes.ts +11 -0
- package/apps/client-cms-editor/shared/cms/tsconfig.json +12 -0
- package/bin/agentsam +16 -1
- package/bin/agentsam-rapid-rust +36 -0
- package/docs/AUTH_IDENTITY_CONTRACT.md +2 -0
- package/docs/BRAND_INTELLIGENCE.md +1 -1
- package/docs/MACHINE_INTELLIGENCE.md +120 -0
- package/docs/WINDOWS_RUNTIME_INSTALL.md +30 -0
- package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +188 -0
- package/docs/architecture/AGENTSAM_DISTRIBUTION_OWNERSHIP.md +176 -0
- package/docs/architecture/AGENTSAM_GO_RUNTIME.md +282 -0
- package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +151 -0
- package/docs/architecture/CODEBASEINDEX_GUIDED_PATH.md +202 -0
- package/docs/architecture/FS_E2E_CLOSURE_RECEIPT.md +59 -0
- package/docs/architecture/LOCAL_FS_AUTHORITY.md +38 -0
- package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +36 -0
- package/docs/architecture/PLAN_CLI_AND_LOCAL_STUDIO_DESKTOP.md +96 -0
- package/docs/architecture/R2_SLUG_NAMESPACE.md +20 -0
- package/docs/architecture/SAM_ACTIVITY_RECOVERY_RECEIPT.md +39 -0
- package/docs/architecture/SAM_DECISION_WORK_RECEIPT.md +54 -0
- package/docs/architecture/SAM_KERNEL.md +181 -0
- package/docs/architecture/SAM_MACHINE_NORMALIZATION_PRECOMMIT_REPORT.md +208 -0
- package/docs/architecture/SLASH_SKILLS_PORTABLE.md +116 -0
- package/docs/architecture/WORK_PRODUCT_EXTRACTION.md +97 -0
- package/docs/architecture/fs-e2e-receipt.latest.json +42 -0
- package/docs/architecture/previews/codebaseindex-guided-path/CODEBASEINDEX_GUIDED_PATH.md +202 -0
- package/docs/architecture/previews/codebaseindex-guided-path/index.html +321 -0
- package/docs/brand/AGENT_SAM_ICON_GRAMMAR.md +70 -0
- package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +71 -0
- package/docs/content-studio/REVISION_GATE_2026-09-27.md +501 -0
- package/docs/contracts/capability-install-planner.md +67 -0
- package/docs/contracts/environment-vocabulary.md +195 -0
- package/docs/contracts/google-cloud-oauth-setup.md +199 -0
- package/docs/local-studio/WORKMODE_DONOR_NOTES.md +1 -1
- package/docs/plans/LOCAL-STUDIO-GRADUATION-2026-09-26.md +290 -0
- package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +394 -0
- package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +227 -0
- package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +221 -0
- package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +145 -0
- package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +215 -0
- package/docs/plugins.md +2 -2
- package/docs/product/AGENTSAM_PRODUCT_EXPERIENCE_STANDARD.md +280 -0
- package/docs/product/LOCAL_STUDIO_DESKTOP_EXPERIENCE.md +139 -0
- package/docs/product/README.md +8 -0
- package/docs/rapid-rust-wasm.md +35 -0
- package/migrations/d1/0010_portable_tickets_memory.sql +140 -0
- package/migrations/d1/0011_agentsam_skill_v2.sql +185 -0
- package/migrations/d1/0011b_agentsam_skill_v2_cutover.sql +22 -0
- package/migrations/d1/0011c_agentsam_skill_v2_backfill.sql +76 -0
- package/migrations/d1/0011d_agentsam_skill_v2_retrieval_revisions.sql +50 -0
- package/migrations/d1/0012_agentsam_tools_required_seed.sql +67 -0
- package/migrations/d1/0013_identity_oauth_states.sql +15 -0
- package/migrations/d1/0014_auth_event_log.sql +20 -0
- package/migrations/d1/0015_identity_oauth_state_app_id.sql +3 -0
- package/migrations/d1/0016_cloudflare_oauth_user_oauth_tokens_ssot.sql +14 -0
- package/migrations/d1/README_PORTABLE_CONTROL_PLANE.md +16 -0
- package/migrations/sqlite/agentsam_skill_retrieval.portable.sql +42 -0
- package/package.json +88 -14
- package/packages/agentsam-brand/README.md +106 -11
- package/packages/agentsam-brand/bin/agentsam-brand.mjs +9 -0
- package/packages/agentsam-brand/package.json +39 -7
- package/packages/agentsam-brand/src/adapters/cloudflare-images.js +453 -0
- package/packages/agentsam-brand/src/adapters/cloudflare-r2.js +74 -0
- package/packages/agentsam-brand/src/adapters/d1-registry.js +26 -0
- package/packages/agentsam-brand/src/adapters/filesystem.js +59 -0
- package/packages/agentsam-brand/src/adapters/memory.js +31 -0
- package/packages/agentsam-brand/src/cli/controller.js +503 -0
- package/packages/agentsam-brand/src/cli/wizard.js +526 -0
- package/packages/agentsam-brand/src/core/capabilities.js +201 -0
- package/packages/agentsam-brand/src/core/derivatives.js +211 -0
- package/packages/agentsam-brand/src/core/errors.js +12 -0
- package/packages/agentsam-brand/src/core/ingest.js +195 -0
- package/packages/agentsam-brand/src/core/inspect.js +109 -0
- package/packages/agentsam-brand/src/core/keys.js +83 -0
- package/packages/agentsam-brand/src/core/naming.js +142 -0
- package/packages/agentsam-brand/src/core/optimize.js +316 -0
- package/packages/agentsam-brand/src/core/pack.js +305 -0
- package/packages/agentsam-brand/src/core/plan.js +276 -0
- package/packages/agentsam-brand/src/core/preview.js +159 -0
- package/packages/agentsam-brand/src/core/processors/cloudflare.js +68 -0
- package/packages/agentsam-brand/src/core/processors/contract.js +203 -0
- package/packages/agentsam-brand/src/core/processors/index.js +148 -0
- package/packages/agentsam-brand/src/core/processors/native.js +82 -0
- package/packages/agentsam-brand/src/core/processors/sharp.js +113 -0
- package/packages/agentsam-brand/src/core/processors/squoosh-binary.js +195 -0
- package/packages/agentsam-brand/src/core/promote.js +288 -0
- package/packages/agentsam-brand/src/core/receipts.js +155 -0
- package/packages/agentsam-brand/src/core/v2/compile.js +280 -0
- package/packages/agentsam-brand/src/core/v2/derivatives-semantic.js +207 -0
- package/packages/agentsam-brand/src/core/v2/ingest-graph.js +387 -0
- package/packages/agentsam-brand/src/core/v2/roles.js +180 -0
- package/packages/agentsam-brand/src/core/v2/schema.js +209 -0
- package/packages/agentsam-brand/src/core/v2/templates.js +114 -0
- package/packages/agentsam-brand/src/index.js +193 -36
- package/packages/agentsam-brand/src/presets/app-icon.json +16 -0
- package/packages/agentsam-brand/src/presets/favicon.json +17 -0
- package/packages/agentsam-brand/src/presets/hero.json +12 -0
- package/packages/agentsam-brand/src/presets/index.js +40 -0
- package/packages/agentsam-brand/src/presets/logo.json +12 -0
- package/packages/agentsam-brand/src/presets/model.json +8 -0
- package/packages/agentsam-brand/src/presets/og-image.json +10 -0
- package/packages/agentsam-brand/src/presets/product-shot.json +11 -0
- package/packages/agentsam-brand/src/presets/social-image.json +10 -0
- package/packages/agentsam-brand/src/presets/web-image.json +10 -0
- package/packages/agentsam-contracts/src/artifacts.ts +41 -0
- package/packages/agentsam-contracts/src/errors.ts +16 -0
- package/packages/agentsam-errors/src/envelope.js +53 -0
- package/packages/agentsam-errors/src/index.js +1 -0
- package/packages/agentsam-errors/src/recovery.js +301 -0
- package/packages/agentsam-knowledge/src/autorag/index.js +1 -1
- package/packages/agentsam-knowledge/src/providers/index.js +20 -6
- package/packages/agentsam-knowledge/src/providers/ollama-endpoint.js +31 -0
- package/packages/agentsam-knowledge/test/autorag.test.mjs +22 -1
- package/packages/agentsam-nav/package.json +2 -2
- package/packages/agentsam-rapid-rust/Cargo.lock +344 -0
- package/packages/agentsam-rapid-rust/Cargo.toml +18 -0
- package/packages/agentsam-rapid-rust/README.md +5 -0
- package/packages/agentsam-rapid-rust/src/main.rs +718 -0
- package/packages/agentsam-rapid-rust/templates/api/Cargo.toml.tmpl +18 -0
- package/packages/agentsam-rapid-rust/templates/api/src/lib.rs.tmpl +17 -0
- package/packages/agentsam-rapid-rust/templates/common/README.md.tmpl +22 -0
- package/packages/agentsam-rapid-rust/templates/common/package.json.tmpl +12 -0
- package/packages/agentsam-rapid-rust/templates/common/wrangler.toml.tmpl +6 -0
- package/packages/agentsam-rapid-rust/templates/crypto-auth/Cargo.toml.tmpl +21 -0
- package/packages/agentsam-rapid-rust/templates/crypto-auth/src/lib.rs.tmpl +32 -0
- package/packages/agentsam-rapid-rust/templates/data-processor/Cargo.toml.tmpl +18 -0
- package/packages/agentsam-rapid-rust/templates/data-processor/src/lib.rs.tmpl +41 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/Cargo.toml.tmpl +9 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/core/Cargo.toml.tmpl +7 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/core/src/lib.rs.tmpl +23 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/worker/Cargo.toml.tmpl +12 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/worker/src/lib.rs.tmpl +16 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/wrangler.toml.tmpl +6 -0
- package/packages/agentsam-repository/src/index.js +1 -0
- package/packages/agentsam-repository/src/merkle/semantic.js +3 -10
- package/packages/agentsam-repository/src/source-types.js +85 -0
- package/packages/agentsam-vault/README.md +96 -0
- package/packages/agentsam-vault/package.json +32 -0
- package/packages/agentsam-vault/src/contracts/credential.d.ts +78 -0
- package/packages/agentsam-vault/src/contracts/credential.js +132 -0
- package/packages/agentsam-vault/src/crypto/aes-gcm.d.ts +30 -0
- package/packages/agentsam-vault/src/crypto/aes-gcm.js +107 -0
- package/packages/agentsam-vault/src/crypto/oauth-envelope.js +150 -0
- package/packages/agentsam-vault/src/index.d.ts +9 -0
- package/packages/agentsam-vault/src/index.js +27 -0
- package/packages/agentsam-vault/src/providers/registry.js +90 -0
- package/packages/agentsam-vault/src/runtime/resolver.js +77 -0
- package/packages/agentsam-workbench/README.md +24 -0
- package/packages/agentsam-workbench/package.json +38 -0
- package/packages/agentsam-workbench/src/agent/AgentPanel.tsx +41 -0
- package/packages/agentsam-workbench/src/agent/ArtifactCard.tsx +9 -0
- package/packages/agentsam-workbench/src/agent/Composer.tsx +102 -0
- package/packages/agentsam-workbench/src/agent/ConnectedAgentPanel.tsx +194 -0
- package/packages/agentsam-workbench/src/agent/ContextualComposer.tsx +788 -0
- package/packages/agentsam-workbench/src/agent/GoalStatusStrip.tsx +38 -0
- package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +86 -0
- package/packages/agentsam-workbench/src/agent/ModelSelect.tsx +19 -0
- package/packages/agentsam-workbench/src/agent/Thread.tsx +56 -0
- package/packages/agentsam-workbench/src/agent/ToolReceipt.tsx +11 -0
- package/packages/agentsam-workbench/src/agent/contextual-composer.css +611 -0
- package/packages/agentsam-workbench/src/agent/index.ts +10 -0
- package/packages/agentsam-workbench/src/agent/mini-agentsam.css +12 -0
- package/packages/agentsam-workbench/src/browser/BrowserFrame.tsx +37 -0
- package/packages/agentsam-workbench/src/browser/index.ts +1 -0
- package/packages/agentsam-workbench/src/index.ts +6 -0
- package/packages/agentsam-workbench/src/project-control.css +160 -0
- package/packages/agentsam-workbench/src/projects/ProjectsSurface.tsx +131 -0
- package/packages/agentsam-workbench/src/projects/index.ts +1 -0
- package/packages/agentsam-workbench/src/shell/Breadcrumb.tsx +35 -0
- package/packages/agentsam-workbench/src/shell/ResizableStage.tsx +99 -0
- package/packages/agentsam-workbench/src/shell/SidePanel.tsx +5 -0
- package/packages/agentsam-workbench/src/shell/index.ts +4 -0
- package/packages/agentsam-workbench/src/shell/surfaceRegistry.ts +29 -0
- package/packages/agentsam-workbench/src/terminal/TerminalSurface.tsx +5 -0
- package/packages/agentsam-workbench/src/terminal/index.ts +1 -0
- package/packages/agentsam-workbench/src/timeline/GanttBoard.tsx +258 -0
- package/packages/agentsam-workbench/src/timeline/index.ts +1 -0
- package/packages/agentsam-workbench/tsconfig.json +13 -0
- package/packages/connectors/cloudflare/OAUTH_STORAGE_AUDIT.md +53 -0
- package/packages/connectors/cloudflare/package.json +3 -1
- package/packages/connectors/cloudflare/src/api-client.js +279 -0
- package/packages/connectors/cloudflare/src/capabilities.js +585 -0
- package/packages/connectors/cloudflare/src/credential.js +318 -0
- package/packages/connectors/cloudflare/src/families/brand-protection.js +123 -0
- package/packages/connectors/cloudflare/src/families/keyless.js +114 -0
- package/packages/connectors/cloudflare/src/families/pages.js +151 -0
- package/packages/connectors/cloudflare/src/families/scanner.js +123 -0
- package/packages/connectors/cloudflare/src/families/snippets.js +207 -0
- package/packages/connectors/cloudflare/src/families/tag-gateway.js +46 -0
- package/packages/connectors/cloudflare/src/families/tags.js +124 -0
- package/packages/connectors/cloudflare/src/families/token-validation.js +95 -0
- package/packages/connectors/cloudflare/src/families/workflows.js +156 -0
- package/packages/connectors/cloudflare/src/index.js +102 -265
- package/packages/connectors/cloudflare/src/oauth-persist.js +336 -0
- package/packages/connectors/cloudflare/src/owner.js +42 -12
- package/packages/connectors/cloudflare/src/permission-options.js +1064 -0
- package/packages/connectors/cloudflare/src/routes.js +318 -144
- package/packages/connectors/cloudflare/src/scope-catalog.js +345 -0
- package/packages/connectors/cloudflare/src/vault.js +2 -2
- package/packages/connectors/cloudflare/tests/capabilities.test.mjs +276 -0
- package/packages/connectors/cloudflare/tests/connector.test.mjs +51 -30
- package/packages/connectors/cloudflare/tests/oauth-persist.test.mjs +125 -0
- package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
- package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +22 -2
- package/packages/identity/.agentsam/features/oauth-login-portal/resources.json +10 -4
- package/packages/identity/.agentsam/features/oauth-login-portal/routes.json +31 -2
- package/packages/identity/README.md +1 -1
- package/packages/identity/backend/README.md +1 -1
- package/packages/identity/docs/PORTABLE_IDENTITY_ARCHITECTURE.md +50 -0
- package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +32 -0
- package/packages/identity/migrations/sqlite/001_identity_core.sql +99 -0
- package/packages/identity/migrations/sqlite/002_identity_oauth_client.sql +38 -0
- package/packages/identity/migrations/sqlite/003_identity_oauth_server.sql +64 -0
- package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +48 -0
- package/packages/identity/package.json +3 -2
- package/packages/identity/scripts/local-identity-bridge.mjs +184 -0
- package/packages/identity/scripts/preview-auth-portal.mjs +7 -7
- package/packages/identity/src/adapters/cloudflare-d1/index.js +153 -24
- package/packages/identity/src/adapters/sqlite/index.js +322 -0
- package/packages/identity/src/app/verify-app.js +95 -0
- package/packages/identity/src/contracts/auth-config.js +28 -8
- package/packages/identity/src/contracts/external-identity.js +1 -1
- package/packages/identity/src/contracts/identity-store.js +115 -0
- package/packages/identity/src/contracts/provider.js +1 -0
- package/packages/identity/src/contracts/route-ids.js +30 -0
- package/packages/identity/src/contracts/route-projection.js +218 -0
- package/packages/identity/src/contracts/routes.js +11 -0
- package/packages/identity/src/core/browser-paths.js +4 -5
- package/packages/identity/src/core/constants.js +13 -8
- package/packages/identity/src/core/session-policy.js +32 -0
- package/packages/identity/src/frontend/auth-portal/README.md +2 -1
- package/packages/identity/src/frontend/auth-portal/pages/login.html +16 -15
- package/packages/identity/src/frontend/auth-portal/pages/reset.html +9 -8
- package/packages/identity/src/frontend/auth-portal/pages/signup.html +9 -8
- package/packages/identity/src/frontend/auth-portal/preview/dashboard-stub.html +1 -1
- 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 +207 -0
- package/packages/identity/src/index.js +41 -0
- package/packages/identity/src/migrations/0001_identity_core.sql +19 -2
- package/packages/identity/src/migrations/0003_accounts_ssot.sql +20 -0
- package/packages/identity/src/migrations/README.md +5 -2
- package/packages/identity/src/oauth/README.md +19 -8
- package/packages/identity/src/oauth/consent-view.js +388 -0
- package/packages/identity/src/oauth/credentials.js +46 -19
- package/packages/identity/src/oauth/finalize-inbound.js +1 -1
- package/packages/identity/src/oauth/google-desktop-exchange.js +173 -0
- package/packages/identity/src/oauth/iam-platform.js +8 -7
- package/packages/identity/src/oauth/redirect-paths.js +27 -36
- package/packages/identity/src/providers/cloudflare/oauth.js +3 -4
- package/packages/identity/src/providers/cloudflare/profile.js +49 -14
- package/packages/identity/src/providers/iam/index.js +27 -5
- package/packages/identity/src/server/identity-service.js +61 -15
- package/packages/identity/src/server/mount-policy.js +30 -0
- package/packages/identity/src/server/post-auth.js +79 -0
- package/packages/identity/src/server/worker-router.js +208 -146
- package/packages/identity/tests/auth-config.test.mjs +3 -2
- package/packages/identity/tests/finalize-inbound-oauth.test.mjs +6 -6
- package/packages/identity/tests/iam-provider.test.mjs +1 -1
- package/packages/identity/tests/identity-init-scaffold.test.mjs +3 -0
- package/packages/identity/tests/identity-service.test.mjs +52 -5
- package/packages/identity/tests/native-session-worker.test.mjs +64 -0
- package/packages/identity/tests/oauth-consent-view.test.mjs +106 -0
- package/packages/identity/tests/oauth-credentials.test.mjs +20 -5
- package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +58 -0
- package/packages/identity/tests/portable-identity-architecture.test.mjs +157 -0
- package/packages/identity/tests/preview-auth-portal.test.mjs +3 -3
- package/packages/identity/tests/session-routes-policy.test.mjs +21 -0
- package/packages/runtime-protocol/src/index.js +154 -0
- package/packages/theme-church-site/package.json +2 -1
- package/packages/theme-church-site/src/index.js +1 -0
- package/packages/theme-companions-site/package.json +2 -1
- package/packages/theme-companions-site/src/index.js +1 -0
- package/packages/theme-floors-site/package.json +2 -1
- package/packages/theme-floors-site/src/index.js +1 -0
- package/packages/theme-fuelnfree-site/package.json +2 -1
- package/packages/theme-fuelnfree-site/src/index.js +1 -0
- package/packages/theme-handyman-site/package.json +2 -1
- package/packages/theme-handyman-site/src/index.js +1 -0
- package/packages/theme-insurance-site/package.json +2 -1
- package/packages/theme-insurance-site/src/index.js +1 -0
- package/packages/theme-scenes/README.md +164 -0
- package/packages/theme-scenes/package.json +53 -0
- package/packages/theme-scenes/src/blocks/index.js +30 -0
- package/packages/theme-scenes/src/contracts/index.js +286 -0
- package/packages/theme-scenes/src/demos/index.js +65 -0
- package/packages/theme-scenes/src/index.js +75 -0
- package/packages/theme-scenes/src/presets/index.js +263 -0
- package/packages/theme-scenes/src/runtime/compile.js +119 -0
- package/packages/theme-scenes/src/scenes/index.js +146 -0
- package/packages/theme-scenes/src/shell/index.js +47 -0
- package/packages/theme-scenes/src/themes/index.js +129 -0
- package/packages/theme-scenes/src/visuals/index.js +41 -0
- package/packages/theme-scenes/test/theme-scenes.test.mjs +179 -0
- package/packages/theme-shinshu-site/package.json +2 -1
- package/packages/theme-shinshu-site/src/index.js +1 -0
- package/packages/work-graph/src/index.js +34 -1
- package/packages/work-graph/src/renderers/gantt-model.js +24 -0
- package/packages/work-graph/test/work-graph.test.mjs +27 -7
- package/protocol/README.md +15 -7
- package/protocol/apps/agentsam.app.v1.schema.json +133 -0
- package/protocol/apps/agentsam.host-install.v1.schema.json +36 -0
- package/protocol/assets/README.md +9 -0
- package/protocol/assets/asset-record.v1.schema.json +64 -0
- package/protocol/brand/brandpack.v1.schema.json +43 -0
- package/protocol/credentials/issue.v1.schema.json +38 -0
- package/protocol/database/connection.v1.schema.json +41 -0
- package/protocol/embeddings/embedding-profile.v1.schema.json +20 -0
- package/protocol/errors/error-envelope.schema.json +135 -1
- package/protocol/errors/recovery.v1.schema.json +50 -0
- package/protocol/runtime/agentsam.runtime.v1.schema.json +75 -0
- package/protocol/runtime/workspace-fs.v1.schema.json +71 -0
- package/protocol/sam/activity.v1.schema.json +48 -0
- package/protocol/sam/answer.v1.schema.json +35 -0
- package/protocol/sam/calibration.v1.schema.json +21 -0
- package/protocol/sam/decision-receipt.v1.schema.json +29 -0
- package/protocol/sam/evaluation.v1.schema.json +19 -0
- package/protocol/sam/operation.schema.json +66 -0
- package/protocol/sam/outcome.v1.schema.json +36 -0
- package/protocol/sam/question.v1.schema.json +26 -0
- package/protocol/sam/registry.seed.json +153 -0
- package/protocol/sam/result.schema.json +53 -0
- package/protocol/sam/state.v1.schema.json +23 -0
- package/protocol/scoring/README.md +10 -0
- package/protocol/scoring/scorecard.v1.schema.json +65 -0
- package/protocol/skills/agentsam.interaction.v1.schema.json +50 -0
- package/protocol/skills/agentsam.skill.v1.schema.json +57 -0
- package/protocol/ui/icon-registry.mjs +227 -0
- package/protocol/ui/icon.v1.schema.json +51 -0
- package/registry/cms-rust-machine-20260928/installable-products.json +31 -0
- package/registry/cms-rust-machine-20260928/manifest.json +22 -0
- package/registry/cms-rust-machine-20260928/migration.sql +237 -0
- package/registry/cms-rust-machine-20260928/receipt.json +21 -0
- package/registry/cms-rust-machine-20260928/receipt.sql +27 -0
- package/scripts/build_rapid_rust_cli.py +83 -0
- package/skills/README.md +22 -9
- package/skills/agentsam-codebaseindex/SKILL.md +225 -0
- package/skills/catalog.json +14 -0
- package/src/attachments/index.js +6 -0
- package/src/attachments/intake.js +235 -0
- package/src/capabilities/repository-snapshot.js +19 -2
- package/src/cli/command-catalog.js +138 -0
- package/src/cli/dispatch.js +48 -0
- package/src/cli.js +225 -27
- package/src/commands/account-auth.js +94 -8
- package/src/commands/api-key.js +244 -0
- package/src/commands/app.js +365 -29
- package/src/commands/billing.js +127 -0
- package/src/commands/brand.js +86 -74
- package/src/commands/cheat-sheet.js +154 -0
- package/src/commands/cloudflare-login.js +222 -0
- package/src/commands/cloudflare.js +453 -23
- package/src/commands/codebaseindex.js +693 -0
- package/src/commands/compute.js +4 -0
- package/src/commands/connections.js +11 -5
- package/src/commands/credentials.js +116 -0
- package/src/commands/env.js +152 -25
- package/src/commands/gcloud-auth.js +427 -0
- package/src/commands/go.js +366 -53
- package/src/commands/google-cloud.js +375 -0
- package/src/commands/identity-init.js +2 -2
- package/src/commands/interaction-clack.js +115 -0
- package/src/commands/mcp.js +226 -33
- package/src/commands/models.js +1 -1
- package/src/commands/ollama.js +3 -2
- package/src/commands/plugins.js +7 -2
- package/src/commands/product.js +36 -0
- package/src/commands/providers.js +62 -14
- package/src/commands/runtime-status.js +28 -9
- package/src/commands/runtime.js +313 -0
- package/src/commands/rust.js +24 -0
- package/src/commands/setup.js +279 -0
- package/src/commands/shell.js +59 -5
- package/src/commands/skill.js +248 -0
- package/src/commands/skills.js +1 -1
- package/src/commands/start-local.js +6 -2
- package/src/commands/terminal.js +171 -0
- package/src/commands/update.js +140 -0
- package/src/commands/whoami.js +392 -56
- package/src/features/resolve.js +1 -0
- package/src/go/build.js +229 -39
- package/src/go/cloudflare.js +506 -105
- package/src/go/container.js +120 -0
- package/src/go/contract.js +9 -4
- package/src/go/discover.js +149 -33
- package/src/go/index.js +15 -3
- package/src/go/native-probe-runner.mjs +119 -0
- package/src/go/{registry.js → official-registry.js} +64 -7
- package/src/go/official-release.js +10 -0
- package/src/go/receipts.js +77 -10
- package/src/go/verify.js +9 -2
- package/src/index.js +31 -0
- package/src/indexing/ingest/discover-models.js +298 -0
- package/src/indexing/ingest/inventory.js +478 -0
- package/src/indexing/ingest/job-graph.js +181 -0
- package/src/indexing/ingest/materials.js +204 -0
- package/src/indexing/ingest/style-evidence.js +181 -0
- package/src/knowledge/source.js +3 -3
- package/src/lib/account-session.js +11 -4
- package/src/lib/app-authority.js +172 -0
- package/src/lib/auth.js +94 -21
- package/src/lib/core-client.js +5 -6
- package/src/lib/credentials-audit.js +451 -0
- package/src/lib/deploy/health.js +24 -6
- package/src/lib/detect-context.js +7 -1
- package/src/lib/google-cloud-connection.js +270 -0
- package/src/lib/google-cloud-inventory.js +385 -0
- package/src/lib/google-desktop-oauth.js +372 -0
- package/src/lib/google-studio-brokered-oauth.js +158 -0
- package/src/lib/identity-scaffold.js +24 -6
- package/src/lib/init-options.js +192 -0
- package/src/lib/local-scaffold.js +48 -16
- package/src/lib/provider-command-remediation.js +308 -0
- package/src/lib/provider-credentials.js +71 -21
- package/src/lib/scaffold/index.js +8 -2
- package/src/lib/scaffold/mcp-server.js +43 -0
- package/src/lib/scaffold/templates/mcp-server/index.js +397 -0
- package/src/lib/scaffold/templates/mcp-server/presets.js +39 -0
- package/src/lib/scaffold/wizards/cms.js +93 -0
- package/src/lib/scaffold/wizards/mcp-server.js +61 -0
- package/src/lib/setup/contract.js +26 -0
- package/src/lib/setup/discover.js +116 -0
- package/src/lib/setup/execute.js +205 -0
- package/src/lib/setup/planner.js +134 -0
- package/src/lib/setup/recipes.js +235 -0
- package/src/lib/setup/runtime-persist.js +197 -0
- package/src/lib/setup/runtime.js +394 -0
- package/src/lib/slash-commands.js +3 -0
- package/src/lib/terminal/machine-identity.js +95 -0
- package/src/lib/terminal-local.js +164 -0
- package/src/lib/terminal-scopes.js +52 -0
- package/src/lib/whoami-capabilities.js +184 -0
- package/src/local-fs/capability.js +121 -0
- package/src/local-fs/freshness.js +75 -0
- package/src/local-fs/index.js +385 -0
- package/src/local-fs/paths.js +100 -0
- package/src/local-pty/server.js +326 -21
- package/src/mcp/authority.js +58 -108
- package/src/mcp/client-adapters.js +68 -144
- package/src/mcp/client.js +142 -122
- package/src/mcp/cloudflare-bundles.js +225 -0
- package/src/mcp/index.js +12 -0
- package/src/models/ai-access-onboarding.js +112 -0
- package/src/models/discovery.js +10 -2
- package/src/models/inventory-core.js +9 -1
- package/src/plugins/cloudflare.js +1 -1
- package/src/providers/ollama-chat.js +2 -1
- package/src/sam/activity/index.js +183 -0
- package/src/sam/client.js +252 -0
- package/src/sam/decision/calibration.js +109 -0
- package/src/sam/decision/confidence.js +126 -0
- package/src/sam/decision/evaluate.js +157 -0
- package/src/sam/decision/evaluators/deterministic.js +341 -0
- package/src/sam/decision/evaluators/heuristic.js +61 -0
- package/src/sam/decision/evaluators/select.js +50 -0
- package/src/sam/decision/evaluators/semantic.js +149 -0
- package/src/sam/decision/hierarchical.js +61 -0
- package/src/sam/decision/index.js +53 -0
- package/src/sam/decision/policy.js +86 -0
- package/src/sam/decision/questions.js +120 -0
- package/src/sam/decision/receipt.js +148 -0
- package/src/sam/decision/state.js +117 -0
- package/src/sam/decision/types.js +22 -0
- package/src/sam/decision/validate.js +200 -0
- package/src/sam/define.js +51 -0
- package/src/sam/index.js +65 -0
- package/src/sam/operations/brand-scan.js +62 -0
- package/src/sam/operations/cad-blender-inspect.js +36 -0
- package/src/sam/operations/codebaseindex-ingest.js +49 -0
- package/src/sam/operations/decision-evaluate.js +59 -0
- package/src/sam/operations/planning-astar.js +77 -0
- package/src/sam/operations/planning-goap.js +60 -0
- package/src/sam/operations/repository-inspect.js +72 -0
- package/src/sam/operations/security-scan.js +33 -0
- package/src/sam/operations/terminal-exec.js +29 -0
- package/src/sam/planning/astar.js +311 -0
- package/src/sam/planning/goap.js +177 -0
- package/src/sam/planning/index.js +21 -0
- package/src/sam/planning/state.js +84 -0
- package/src/sam/registry.js +48 -0
- package/src/sam/result.js +77 -0
- package/src/sam/seed.js +44 -0
- package/src/sam/types.js +116 -0
- package/src/security/inventory.js +12 -2
- package/src/security/local-vault.js +2 -0
- package/src/security/scan.js +1 -1
- package/src/skills/catalog.js +64 -0
- package/src/skills/content-resolver.js +124 -0
- package/src/skills/hosted-store.js +37 -0
- package/src/skills/index.js +29 -64
- package/src/skills/interaction.js +102 -0
- package/src/skills/local-store.js +228 -0
- package/src/skills/manifest.js +104 -0
- package/src/skills/metrics.js +31 -0
- package/src/skills/registry.js +184 -0
- package/src/skills/runtime.js +287 -0
- package/src/skills/slash.js +44 -0
- package/src/ui/cli/help.js +94 -101
- package/test/account-session.test.mjs +3 -3
- package/test/app-authority-context.test.mjs +32 -0
- package/test/cli/api-key-env-whoami.test.mjs +129 -0
- package/test/cli/codebaseindex-plan-ux.test.mjs +37 -0
- package/test/cli/go.test.mjs +62 -5
- package/test/cli/mcp-client.test.mjs +21 -10
- package/test/cli/runtime-persist.test.mjs +56 -0
- package/test/cli/rust-command.test.mjs +21 -0
- package/test/cli/skill-npm-and-env.test.mjs +52 -0
- package/test/cli/wireframes-go-registry.test.mjs +87 -2
- package/test/credentials-audit.test.mjs +113 -0
- package/test/deploy-health-scan.test.mjs +29 -1
- package/test/gcloud-auth.test.mjs +111 -0
- package/test/go/build-source-identity.test.mjs +31 -0
- package/test/go/cloudflare-probe.test.mjs +274 -10
- package/test/go/distribution.test.mjs +28 -0
- package/test/google-cloud-connection.test.mjs +83 -0
- package/test/google-cloud-inventory.test.mjs +64 -0
- package/test/init-options.test.mjs +35 -0
- package/test/integration/ai-access-onboarding.test.mjs +47 -0
- package/test/integration/app-command.test.mjs +30 -0
- package/test/integration/cad-project.test.mjs +4 -1
- package/test/integration/cli-help.test.mjs +1 -1
- package/test/integration/cms-app-scaffold.test.mjs +71 -0
- package/test/integration/cms-site-tenancy-contract.test.mjs +9 -8
- package/test/integration/codebaseindex-ingest.test.mjs +214 -0
- package/test/integration/features-resolve.test.mjs +30 -11
- package/test/integration/icon-registry.test.mjs +67 -0
- package/test/integration/ingest-discover-models.test.mjs +30 -0
- package/test/integration/inspect-path-cli.test.mjs +46 -0
- package/test/integration/install-script.test.mjs +12 -9
- package/test/integration/inventory-evidence.test.mjs +125 -0
- package/test/integration/local-fs.test.mjs +113 -0
- package/test/integration/provider-env-cli.test.mjs +2 -1
- package/test/integration/runtime-status.integration.test.mjs +2 -1
- package/test/integration/sam-activity-recovery.test.mjs +147 -0
- package/test/integration/sam-decision.test.mjs +584 -0
- package/test/integration/sam-kernel.test.mjs +99 -0
- package/test/integration/sam-planning-astar.test.mjs +279 -0
- package/test/integration/skill-runtime.test.mjs +240 -0
- package/test/integration/studio-fs-pty-e2e.test.mjs +294 -0
- package/test/knowledge.test.mjs +35 -1
- package/test/loopback-oauth.test.mjs +53 -0
- package/test/models.test.mjs +14 -7
- package/test/ollama.test.mjs +22 -0
- package/test/security.test.mjs +23 -0
- package/test/setup-planner.test.mjs +74 -0
- package/test/setup-runtime.test.mjs +51 -0
- package/test/shell.test.mjs +4 -4
- package/test/terminal/local-pty.mock.test.mjs +3 -1
- package/test/terminal-machine-identity.test.mjs +88 -0
- package/test/whoami-resume.test.mjs +27 -6
- package/packages/agentsam-brand/test/brand-scan.test.mjs +0 -106
- package/packages/work-graph/prototype/README.md +0 -32
- package/packages/work-graph/prototype/data/demo-workgraph.js +0 -47
- package/packages/work-graph/prototype/renderers/timeline-model.js +0 -21
- package/packages/work-graph/prototype/renderers/workgraph-runtime.js +0 -38
- package/packages/work-graph/prototype-gnantt.html +0 -655
package/AGENTSAM.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
This file defines stable behavior for AgentSam agents using the portable SDK. It is not account state, project state, a run log, or a replacement for repository-specific `.agentsamrules`.
|
|
4
4
|
|
|
5
|
+
**Naming:** AgentSam is the product. **SAM** means **Systematic Autonomous Machinery** — the typed
|
|
6
|
+
operation/execution spine (`sam.invoke`, modules, receipts). In docs and code, `sam` is the
|
|
7
|
+
conventional client variable for that machinery, never a human identity. Prefer “SAM resolves…” /
|
|
8
|
+
“AgentSam executes through SAM…” over anthropomorphic phrasing. Architecture SSOT:
|
|
9
|
+
`docs/architecture/SAM_KERNEL.md`.
|
|
10
|
+
|
|
5
11
|
## Execution
|
|
6
12
|
|
|
7
13
|
- Infer routine implementation details when repository evidence makes the answer clear; do not block on unnecessary questions.
|
|
@@ -70,6 +76,17 @@ This file defines stable behavior for AgentSam agents using the portable SDK. It
|
|
|
70
76
|
See [Storage architecture](docs/architecture/STORAGE.md) for enforcement and
|
|
71
77
|
the current compatibility boundary.
|
|
72
78
|
|
|
79
|
+
## Application contract (APP identity)
|
|
80
|
+
|
|
81
|
+
Portable product apps follow [`docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md`](docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md).
|
|
82
|
+
|
|
83
|
+
- **APP** = installable product (`agentsam.app.json`, immutable kebab-case `APP.id`).
|
|
84
|
+
- **Not** an APP merely because it is under `apps/`, deployable, or an npm package.
|
|
85
|
+
- Runtime identity: `import APP from "./agentsam.app.json"` — never `const APP = "agentsam-…"`.
|
|
86
|
+
- `.agentsam/app.json` is host/install state (`app_id`), not a second product definition.
|
|
87
|
+
- Package, Worker, route, desktop, and service names are separate namespaces with explicit pointers.
|
|
88
|
+
- Gate: `agentsam app validate` / `npm run guard:apps`.
|
|
89
|
+
|
|
73
90
|
## Model and run policy
|
|
74
91
|
|
|
75
92
|
- Model, reasoning effort, service tier, budget, and permissions are runtime configuration, not hidden prompt instructions.
|
package/README.md
CHANGED
|
@@ -5,6 +5,21 @@ security, identity, scaffolding, and delivery capabilities with optional AgentSa
|
|
|
5
5
|
The interactive CLI can run the same bounded capabilities through an explicitly selected model while
|
|
6
6
|
keeping model choice, reasoning effort, processing tier, credentials, approvals, context, and cost inspectable.
|
|
7
7
|
|
|
8
|
+
**SAM** = **Systematic Autonomous Machinery** — the execution spine under AgentSam (not a person).
|
|
9
|
+
The conventional client variable is `sam`:
|
|
10
|
+
|
|
11
|
+
```js
|
|
12
|
+
import { AgentSamClient } from '@inneranimalmedia/agentsam-sdk';
|
|
13
|
+
|
|
14
|
+
const sam = new AgentSamClient();
|
|
15
|
+
const repo = await sam.invoke('repository.inspect', { root: '.' });
|
|
16
|
+
// or: await sam.repository.inspect({ root: '.' });
|
|
17
|
+
console.log(repo.data.summary, repo.receipt.id);
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
See [SAM Kernel](docs/architecture/SAM_KERNEL.md) for `invoke` / `describe` / `discover`,
|
|
21
|
+
operation IDs, and the universal `SamResult` envelope.
|
|
22
|
+
|
|
8
23
|
**npm:** `@inneranimalmedia/agentsam-sdk` · **Source:** [GitHub](https://github.com/SamPrimeaux/agentsam-sdk)
|
|
9
24
|
|
|
10
25
|
Node 22.5+ is required. Docker is optional for container commands. Python 3.10+ is required
|
|
@@ -25,7 +40,7 @@ an npm-bootstrap script; standalone SEA binaries are planned, not shipped yet):
|
|
|
25
40
|
```sh
|
|
26
41
|
curl -fsSL https://agentsam.inneranimalmedia.com/install | bash
|
|
27
42
|
# a specific version, channel, or bundled app launcher:
|
|
28
|
-
curl -fsSL https://agentsam.inneranimalmedia.com/install | bash -s -- --version 2.6.
|
|
43
|
+
curl -fsSL https://agentsam.inneranimalmedia.com/install | bash -s -- --version 2.6.3
|
|
29
44
|
curl -fsSL https://agentsam.inneranimalmedia.com/install | bash -s -- --channel beta
|
|
30
45
|
curl -fsSL https://agentsam.inneranimalmedia.com/install | bash -s -- --app cad
|
|
31
46
|
```
|
|
@@ -61,19 +76,24 @@ Without a global install, use `npx @inneranimalmedia/agentsam-sdk create my-agen
|
|
|
61
76
|
|
|
62
77
|
## MCP setup
|
|
63
78
|
|
|
64
|
-
|
|
65
|
-
to the agent client you use, then complete its Cloudflare OAuth flow. For Codex:
|
|
79
|
+
Register MCP servers into `~/.agentsam/mcp/` and sync IDE adapters:
|
|
66
80
|
|
|
67
81
|
```sh
|
|
68
|
-
|
|
69
|
-
|
|
82
|
+
agentsam mcp add inneranimalmedia --client cursor
|
|
83
|
+
agentsam mcp add cloudflare-api --client cursor
|
|
84
|
+
agentsam mcp list --bundles # Cloudflare portal bundles + pack scopes
|
|
85
|
+
agentsam mcp scopes cloudflare-bindings
|
|
86
|
+
agentsam mcp doctor cloudflare-api
|
|
70
87
|
```
|
|
71
88
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
89
|
+
Cloudflare MCP portals (bindings, builds, browser, …) are **server bundles**, not
|
|
90
|
+
OAuth clients. AgentSam Cloudflare OAuth stays pack-scoped (`agentsam` pack includes
|
|
91
|
+
`mcp-portals.read` / `mcp-portals.write`). Never request the full ~315-scope catalog
|
|
92
|
+
at connect time — upgrade with `agentsam cloudflare permissions authorize --packs …`.
|
|
93
|
+
|
|
94
|
+
Portal-hosted OAuth (Cloudflare’s own consent on `*.mcp.cloudflare.com`) is separate
|
|
95
|
+
from AgentSam’s CF connection token. Keep tokens in each client’s credential store;
|
|
96
|
+
do not commit them.
|
|
77
97
|
|
|
78
98
|
## Index an existing repository
|
|
79
99
|
|
|
@@ -111,6 +131,7 @@ read-only `repository.snapshot` composition primitive. See [Capabilities and pre
|
|
|
111
131
|
| File integrity | `agentsam merkle`; `/merkle` | [Merkle](docs/MERKLE.md) |
|
|
112
132
|
| Security, trust-boundary scan, and repair | `agentsam security`; `/security` | [Security](docs/SECURITY.md) |
|
|
113
133
|
| Mini prototypes | `agentsam mini`; `/mini` | [Mini](docs/MINI.md) |
|
|
134
|
+
| Machine Intelligence (MINI/APP/WORLD ladder) | world-state / maturity (in progress) | [Machine Intelligence](docs/MACHINE_INTELLIGENCE.md) · [Tomorrow briefing](docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md) |
|
|
114
135
|
| Recon bounded-worker packets | `agentsam recon pack\|validate` | [Recon](docs/RECON.md) |
|
|
115
136
|
| Local containers | `agentsam dockerize`; `/dockerize` | [Dockerize](docs/DOCKERIZE.md) |
|
|
116
137
|
| Background indexing service | Docker `knowledge_service`; `/knowledge-service-client` | [Knowledge service](docs/knowledge-service.md) |
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Client CMS Editor workspace law
|
|
2
|
+
|
|
3
|
+
- This app is an independent workspace root. Keep one active lockfile at `apps/client-cms-editor/package-lock.json`.
|
|
4
|
+
- Do not add its frontend/backend/shared packages to the SDK root workspace list.
|
|
5
|
+
- Product-neutral AgentSam contracts/UI live in `packages/agentsam-contracts` and `packages/agentsam-workbench`.
|
|
6
|
+
- Do not import from `apps/local-studio` or `apps/cad-creator`.
|
|
7
|
+
- `shared/cms` owns pure CMS editor/publication/config contracts only; no React and no vendor runtime SDKs.
|
|
8
|
+
- `backend/` is the portable host API/routing/preview bridge. Do not duplicate the canonical Inner Animal Media CMS server domain here.
|
|
9
|
+
- Public CMS runtime must remain smaller than the authoring app. Do not ship Monaco, terminal, browser automation, auth-admin, or the whole AgentSam workbench to anonymous visitors.
|
|
10
|
+
- `SESSION_CACHE` is never auth/session authority. `MY_CONTAINER` is never identity authority.
|
|
11
|
+
- CMS AgentSam context must be explicit. Never scrape editor/site state silently.
|
|
12
|
+
- Prefer structured/versioned section data for publication. Arbitrary executable editor HTML is not a public-content authority.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"source_repository": "SamPrimeaux/inneranimalmedia",
|
|
3
|
+
"source_path": "packages/client-cms-editor",
|
|
4
|
+
"source_commit": "5957af19dfb67e1551d0174b72141dd65acc4972",
|
|
5
|
+
"source_ref": "origin/main",
|
|
6
|
+
"imported_as": "apps/client-cms-editor",
|
|
7
|
+
"note": "Imported as real files, then normalized into an independent npm workspace root. Canonical platform CMS server/domain code remains in inneranimalmedia src/core/agentsam/cms until a dedicated agentsam-cms package extraction."
|
|
8
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# AgentSam Client CMS Editor
|
|
2
|
+
|
|
3
|
+
Authoring/control application for AgentSam CMS. This directory is a self-contained npm workspace root inside the SDK repository and is intentionally **not** part of the SDK root workspace graph.
|
|
4
|
+
|
|
5
|
+
It was imported from `SamPrimeaux/inneranimalmedia` at the exact revision recorded in `IMPORT_PROVENANCE.json`. The donor browser editor is preserved, then normalized into explicit frontend/backend/shared package boundaries.
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
apps/client-cms-editor/
|
|
9
|
+
├─ package.json
|
|
10
|
+
├─ package-lock.json
|
|
11
|
+
├─ frontend/ CMS authoring UI + shared AgentSam workbench adapter
|
|
12
|
+
│ ├─ package.json
|
|
13
|
+
│ └─ src/
|
|
14
|
+
├─ backend/ host-neutral CMS API/routing/preview client bridge
|
|
15
|
+
│ ├─ package.json
|
|
16
|
+
│ └─ src/
|
|
17
|
+
├─ shared/
|
|
18
|
+
│ └─ cms/ pure CMS editor/publication/binding/context contracts
|
|
19
|
+
│ ├─ package.json
|
|
20
|
+
│ └─ src/
|
|
21
|
+
└─ reference/ immutable donor docs/lock/config for comparison only
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Product boundary
|
|
25
|
+
|
|
26
|
+
CMS Studio is the authenticated authoring/control product. It is **not** the public website runtime.
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
CMS Studio
|
|
30
|
+
├─ pages / sections / themes / assets
|
|
31
|
+
├─ AgentSam through @inneranimalmedia/agentsam-workbench
|
|
32
|
+
├─ preview
|
|
33
|
+
└─ publish
|
|
34
|
+
↓
|
|
35
|
+
publication snapshot
|
|
36
|
+
├─ D1 metadata
|
|
37
|
+
└─ WEBSITE_ASSETS (R2 content/media/theme artifacts)
|
|
38
|
+
↓
|
|
39
|
+
small public CMS runtime
|
|
40
|
+
↓
|
|
41
|
+
<public-host>/*
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The visitor-facing runtime should ship its normal frontend JavaScript through the normal static deployment bundle. R2 is for CMS-managed content/media and generated artifacts, not a replacement for the application bundle.
|
|
45
|
+
|
|
46
|
+
## Shared AgentSam rule
|
|
47
|
+
|
|
48
|
+
CMS must not invent its own chat/browser/terminal/auth stack. `frontend/src/CmsAgentSurface.tsx` is a thin CMS adapter around `@inneranimalmedia/agentsam-workbench`; the host supplies an `AgentWorkbenchAdapter`, authenticated `AgentPrincipal`, and explicit CMS context. No fake AgentSam endpoint is provided by this app.
|
|
49
|
+
|
|
50
|
+
Identity remains outside the workbench. IAM establishes `accountId` / `authUserId`, application authorization resolves CMS access, and only then may optional browser/container execution be created.
|
|
51
|
+
|
|
52
|
+
## Cloud binding contract
|
|
53
|
+
|
|
54
|
+
`shared/cms/src/cloudflare-bindings.ts` defines the capability-driven names. `DB` and `WEBSITE_ASSETS` are the CMS cloud baseline. `SESSION_CACHE` is cache-only and cannot be identity/session authority. `MY_CONTAINER` and `MYBROWSER` are optional execution capabilities and cannot establish identity.
|
|
55
|
+
|
|
56
|
+
## Canonical CMS backend
|
|
57
|
+
|
|
58
|
+
This app's `backend/` is currently the portable API/routing/preview bridge that talks to `/api/cms/*`. The full canonical CMS domain still lives in the Inner Animal Media platform under `src/core/agentsam/cms/` at the donor revision. Do not copy that 166-file domain into this app and create a second authority. Its next extraction target is a product-neutral `packages/agentsam-cms/` family.
|
|
59
|
+
|
|
60
|
+
## Development
|
|
61
|
+
|
|
62
|
+
From this directory:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npm ci
|
|
66
|
+
npm run typecheck
|
|
67
|
+
npm test
|
|
68
|
+
npm run build
|
|
69
|
+
npm run dev
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Standalone dev requires explicit site context, for example `/?site=my-site`. In a real authenticated host, mount `CmsEditor` with the resolved site/project identity.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "agentsam.app.v1",
|
|
3
|
+
"id": "client-cms-editor",
|
|
4
|
+
"product_id": "cms",
|
|
5
|
+
"name": "AgentSam CMS Editor",
|
|
6
|
+
"kind": "app",
|
|
7
|
+
"package": "@inneranimalmedia/client-cms-editor",
|
|
8
|
+
"version": "0.1.0",
|
|
9
|
+
"entrypoints": {
|
|
10
|
+
"frontend": "./frontend",
|
|
11
|
+
"backend": "./backend",
|
|
12
|
+
"cli": "./bin/agentsam-cms.mjs"
|
|
13
|
+
},
|
|
14
|
+
"capabilities": [
|
|
15
|
+
"cms",
|
|
16
|
+
"media",
|
|
17
|
+
"templates",
|
|
18
|
+
"admin_content"
|
|
19
|
+
],
|
|
20
|
+
"provides": [
|
|
21
|
+
"cms.editor",
|
|
22
|
+
"cms.templates",
|
|
23
|
+
"cms.media.library",
|
|
24
|
+
"workspace.panel"
|
|
25
|
+
],
|
|
26
|
+
"surfaces": [
|
|
27
|
+
"store",
|
|
28
|
+
"theme-editor",
|
|
29
|
+
"cms-editor",
|
|
30
|
+
"templates",
|
|
31
|
+
"media-library",
|
|
32
|
+
"agentsam"
|
|
33
|
+
],
|
|
34
|
+
"runtime": {
|
|
35
|
+
"local_preview": "ready",
|
|
36
|
+
"source_scaffold": "ready",
|
|
37
|
+
"cloudflare": "ready",
|
|
38
|
+
"github": "source-ready",
|
|
39
|
+
"browser": true,
|
|
40
|
+
"local": true
|
|
41
|
+
},
|
|
42
|
+
"commands": {
|
|
43
|
+
"preview": "agentsam-cms",
|
|
44
|
+
"doctor": "agentsam-cms doctor",
|
|
45
|
+
"scaffold": "agentsam-cms scaffold <directory>",
|
|
46
|
+
"info": "agentsam-cms info"
|
|
47
|
+
},
|
|
48
|
+
"bin": "bin/agentsam-cms.mjs",
|
|
49
|
+
"install": {
|
|
50
|
+
"command": "agentsam app scaffold client-cms-editor",
|
|
51
|
+
"selector": "client-cms-editor",
|
|
52
|
+
"paths": [
|
|
53
|
+
"/install/cms",
|
|
54
|
+
"/install/client-cms-editor"
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# CMS backend bridge
|
|
2
|
+
|
|
3
|
+
This workspace package is the portable CMS client/backend boundary: HTTP API calls, model mapping, routing, preview messages and storefront URL helpers. It does not own the platform CMS server implementation or identity authority.
|
|
4
|
+
|
|
5
|
+
The current platform implementation remains `inneranimalmedia/src/core/agentsam/cms/` until it is extracted into reusable `agentsam-cms-*` packages.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@inneranimalmedia/agentsam-cms-backend",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": "./src/index.ts",
|
|
8
|
+
"./api": "./src/api/client.ts",
|
|
9
|
+
"./model": "./src/model.ts",
|
|
10
|
+
"./preview": "./src/preview/bridge.ts",
|
|
11
|
+
"./routing": "./src/routing/index.js"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"typecheck": "tsc --noEmit -p tsconfig.json"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@inneranimalmedia/agentsam-cms-shared": "0.1.0"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"typescript": "^5.9.3"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { mapCmsEditorBlock, mapCmsEditorBootstrap, mapCmsEditorPage, mapCmsEditorSection } from '../model';
|
|
2
|
+
import type { CmsEditorBlock, CmsEditorPage, CmsEditorSection } from '@inneranimalmedia/agentsam-cms-shared';
|
|
3
|
+
import { buildDemoCmsBootstrap } from '../demo-bootstrap';
|
|
4
|
+
|
|
5
|
+
type Json = Record<string, any>;
|
|
6
|
+
type ApiInit = Omit<RequestInit, 'body'> & { body?: any };
|
|
7
|
+
|
|
8
|
+
function useDemoBootstrap(projectSlug?: string) {
|
|
9
|
+
const slug = String(projectSlug || '').trim().toLowerCase();
|
|
10
|
+
if (slug === 'demo' || slug === 'scaffold' || slug === 'preview' || slug === '') return true;
|
|
11
|
+
if (typeof window !== 'undefined') {
|
|
12
|
+
const host = window.location.hostname;
|
|
13
|
+
if (host === 'localhost' || host === '127.0.0.1') return true;
|
|
14
|
+
const params = new URLSearchParams(window.location.search);
|
|
15
|
+
if (params.get('demo') === '1' || params.get('preview') === '1') return true;
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Offline first-run: never hit Worker APIs (avoids "Not Found" toasts). */
|
|
21
|
+
function demoOk<T extends Json = Json>(payload: T = {} as T): Promise<T> {
|
|
22
|
+
return Promise.resolve(payload);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async function api<T extends Json = Json>(path: string, init: ApiInit = {}): Promise<T> {
|
|
26
|
+
if (useDemoBootstrap()) {
|
|
27
|
+
return demoOk<T>({} as T);
|
|
28
|
+
}
|
|
29
|
+
const headers = new Headers(init.headers);
|
|
30
|
+
let body = init.body;
|
|
31
|
+
if (body != null && !(body instanceof FormData) && typeof body !== 'string') {
|
|
32
|
+
headers.set('Content-Type', 'application/json');
|
|
33
|
+
body = JSON.stringify(body);
|
|
34
|
+
}
|
|
35
|
+
const response = await fetch(path, { ...init, body, headers, credentials: 'include', cache: 'no-store' });
|
|
36
|
+
const payload = await response.json().catch(() => ({}));
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
const message = payload?.message || payload?.error || response.statusText || 'Request failed';
|
|
39
|
+
throw Object.assign(new Error(String(message)), { status: response.status, payload });
|
|
40
|
+
}
|
|
41
|
+
return payload as T;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export async function getCmsEditorBootstrap(projectSlug: string, focusPageId?: string | null) {
|
|
45
|
+
if (useDemoBootstrap(projectSlug)) {
|
|
46
|
+
return mapCmsEditorBootstrap(buildDemoCmsBootstrap(projectSlug || 'demo'), projectSlug || 'demo');
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const params = new URLSearchParams({ project_slug: projectSlug, site: projectSlug });
|
|
50
|
+
if (focusPageId) params.set('page_id', focusPageId);
|
|
51
|
+
return mapCmsEditorBootstrap(await api<Json>(`/api/cms/bootstrap?${params}`), projectSlug);
|
|
52
|
+
} catch (error) {
|
|
53
|
+
// Local first-run: fall back to the real editor shell with demo content.
|
|
54
|
+
if (typeof window !== 'undefined' && (location.hostname === 'localhost' || location.hostname === '127.0.0.1')) {
|
|
55
|
+
return mapCmsEditorBootstrap(buildDemoCmsBootstrap(projectSlug || 'demo'), projectSlug || 'demo');
|
|
56
|
+
}
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export async function getCmsEditorPagePreview(pageId: string, mode: 'draft' | 'published' = 'draft') {
|
|
62
|
+
if (useDemoBootstrap()) {
|
|
63
|
+
return demoOk({ id: pageId, preview: mode, html: null, _demo: true });
|
|
64
|
+
}
|
|
65
|
+
return api<Json>(`/api/cms/pages/${encodeURIComponent(pageId)}?preview=${encodeURIComponent(mode)}`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export const saveCmsEditorSection = (sectionId: string, fields: Record<string, any>, css?: Record<string, any>) =>
|
|
69
|
+
api(`/api/cms/sections/${encodeURIComponent(sectionId)}`, { method: 'PUT', body: { section_data: { ...fields, ...(css && Object.keys(css).length ? { css_override: css } : {}) } } });
|
|
70
|
+
export const renameCmsEditorSection = (sectionId: string, sectionName: string) => api(`/api/cms/sections/${encodeURIComponent(sectionId)}`, { method: 'PUT', body: { section_name: sectionName } });
|
|
71
|
+
export const reorderCmsEditorSections = (pageId: string, sections: CmsEditorSection[]) => api('/api/cms/sections/reorder', { method: 'POST', body: { page_id: pageId, order: sections.map((section, index) => ({ id: section.id, sort_order: (index + 1) * 10 })) } });
|
|
72
|
+
export const setCmsEditorSectionVisibility = (sectionId: string, visible: boolean) => api(`/api/cms/sections/${encodeURIComponent(sectionId)}/visibility`, { method: 'POST', body: { is_visible: visible ? 1 : 0 } });
|
|
73
|
+
export async function createCmsEditorSection(pageId: string, name: string, fields: Record<string, any>, sortOrder: number) {
|
|
74
|
+
if (useDemoBootstrap()) {
|
|
75
|
+
return mapCmsEditorSection({
|
|
76
|
+
id: `sec_local_${Date.now()}`,
|
|
77
|
+
section_name: name,
|
|
78
|
+
section_type: name.toLowerCase().replace(/\s+/g, '-'),
|
|
79
|
+
section_data: fields,
|
|
80
|
+
is_visible: 1,
|
|
81
|
+
sort_order: sortOrder,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
const result = await api<Json>('/api/cms/sections', { method: 'POST', body: { page_id: pageId, section_type: name.toLowerCase().replace(/\s+/g, '-'), section_name: name, section_data: fields, sort_order: sortOrder } });
|
|
85
|
+
return mapCmsEditorSection(result.section || { id: result.id, section_name: name, section_type: name, section_data: fields, is_visible: 1 });
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export async function listCmsEditorBlocks(sectionId: string) {
|
|
89
|
+
if (useDemoBootstrap()) return [];
|
|
90
|
+
const result = await api<Json>(`/api/cms/blocks?section_id=${encodeURIComponent(sectionId)}`);
|
|
91
|
+
return (result.blocks || result.components || []).map((row: Json) => mapCmsEditorBlock(row, sectionId));
|
|
92
|
+
}
|
|
93
|
+
export async function createCmsEditorBlock(sectionId: string, type: string, data: Record<string, any>, sortOrder = 10) {
|
|
94
|
+
const blockType = String(type || 'text').trim() || 'text';
|
|
95
|
+
if (useDemoBootstrap()) {
|
|
96
|
+
return mapCmsEditorBlock({
|
|
97
|
+
id: `blk_local_${Date.now()}`,
|
|
98
|
+
section_id: sectionId,
|
|
99
|
+
type: blockType,
|
|
100
|
+
block_type: blockType,
|
|
101
|
+
data,
|
|
102
|
+
sort_order: sortOrder,
|
|
103
|
+
is_visible: 1,
|
|
104
|
+
}, sectionId);
|
|
105
|
+
}
|
|
106
|
+
const result = await api<Json>('/api/cms/blocks', {
|
|
107
|
+
method: 'POST',
|
|
108
|
+
body: {
|
|
109
|
+
section_id: sectionId,
|
|
110
|
+
type: blockType,
|
|
111
|
+
block_type: blockType,
|
|
112
|
+
component_type: blockType,
|
|
113
|
+
data,
|
|
114
|
+
sort_order: sortOrder,
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
return mapCmsEditorBlock(result.block || result.component || { id: result.id, section_id: sectionId, type: blockType, data }, sectionId);
|
|
118
|
+
}
|
|
119
|
+
export const saveCmsEditorBlock = (block: CmsEditorBlock) => api(`/api/cms/blocks/${encodeURIComponent(block.id)}`, { method: 'PUT', body: { block_data: block.data, block_type: block.type, type: block.type, component_type: block.type } });
|
|
120
|
+
export const setCmsEditorBlockVisibility = (blockId: string, visible: boolean) => api(`/api/cms/blocks/${encodeURIComponent(blockId)}/visibility`, { method: 'POST', body: { is_visible: visible ? 1 : 0 } });
|
|
121
|
+
export const reorderCmsEditorBlocks = (blocks: CmsEditorBlock[]) => api('/api/cms/blocks/reorder', { method: 'POST', body: { order: blocks.map((block, index) => ({ id: block.id, sort_order: (index + 1) * 10 })) } });
|
|
122
|
+
|
|
123
|
+
export async function createCmsEditorPage(projectSlug: string, input: { title: string; slug: string; type: string }) {
|
|
124
|
+
const slug = input.slug.replace(/^\/+/, '') || 'untitled';
|
|
125
|
+
if (useDemoBootstrap(projectSlug)) {
|
|
126
|
+
return mapCmsEditorPage({
|
|
127
|
+
id: `page_local_${Date.now()}`,
|
|
128
|
+
title: input.title || 'Untitled',
|
|
129
|
+
slug,
|
|
130
|
+
route_path: `/${slug}`,
|
|
131
|
+
page_type: input.type,
|
|
132
|
+
status: 'draft',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
const result = await api<Json>('/api/cms/pages', { method: 'POST', body: { project_id: projectSlug, title: input.title || 'Untitled', slug, route_path: `/${slug}`, page_type: input.type, status: 'draft', content: '' } });
|
|
136
|
+
return mapCmsEditorPage({ ...result, id: result.id, title: input.title, slug, route_path: result.route_path || `/${slug}`, page_type: input.type, status: 'draft' });
|
|
137
|
+
}
|
|
138
|
+
export const saveCmsEditorPageMeta = (page: CmsEditorPage) => {
|
|
139
|
+
if (useDemoBootstrap()) return demoOk({ ok: true, id: page.id });
|
|
140
|
+
const route = page.slug.startsWith('/') ? page.slug : `/${String(page.slug || '').replace(/^\/+/, '')}`;
|
|
141
|
+
const normalizedRoute = route.length > 1 ? route.replace(/\/+$/, '') : route || '/';
|
|
142
|
+
const slug = normalizedRoute === '/' ? 'home' : normalizedRoute.replace(/^\/+/, '') || 'untitled';
|
|
143
|
+
return api(`/api/cms/pages/${encodeURIComponent(page.id)}`, {
|
|
144
|
+
method: 'PUT',
|
|
145
|
+
body: {
|
|
146
|
+
title: page.title,
|
|
147
|
+
route_path: normalizedRoute,
|
|
148
|
+
slug,
|
|
149
|
+
page_type: page.type,
|
|
150
|
+
seo_title: page.metaTitle,
|
|
151
|
+
meta_description: page.metaDescription,
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
export const publishCmsEditorPage = (pageId: string) => api(`/api/cms/pages/${encodeURIComponent(pageId)}/publish`, { method: 'POST', body: {} });
|
|
156
|
+
export const saveCmsEditorThemeVars = (projectSlug: string, vars: Record<string, string>) => api('/api/cms/theme-vars', { method: 'PATCH', body: { project_slug: projectSlug, vars } });
|
|
157
|
+
|
|
158
|
+
export async function getCmsEditorAssets() {
|
|
159
|
+
if (useDemoBootstrap()) return [];
|
|
160
|
+
const result = await api<Json>('/api/cms/assets');
|
|
161
|
+
return (result.assets || []).map((asset: Json, index: number) => ({ id: asset.id || index, name: asset.original_filename || asset.filename || asset.label || 'Asset', type: String(asset.mime_type || '').startsWith('video/') ? 'Video' : String(asset.mime_type || '').includes('font') ? 'Font' : String(asset.mime_type || '').includes('pdf') ? 'Document' : 'Image', size: asset.content_size_bytes ? `${(Number(asset.content_size_bytes) / 1e6).toFixed(1)} MB` : '—', color: ['#5346db', '#d2e9df', '#ebc59d', '#25302b', '#705cf0', '#e6e0d3'][index % 6], previewUrl: asset.thumbnail_url || asset.cdn_url || asset.public_url || null }));
|
|
162
|
+
}
|
|
163
|
+
export async function getCmsEditorTemplates() {
|
|
164
|
+
if (useDemoBootstrap()) {
|
|
165
|
+
return [
|
|
166
|
+
{ id: 'tpl_baseline_landing', name: 'Landing page', type: 'page', category: 'Marketing', slug: 'landing', previewImageUrl: null, hasHtml: false },
|
|
167
|
+
{ id: 'tpl_baseline_hero', name: 'Editorial hero', type: 'section', category: 'Portfolio', slug: 'hero', previewImageUrl: null, hasHtml: false },
|
|
168
|
+
{ id: 'tpl_baseline_footer', name: 'Utility footer', type: 'section', category: 'Agency', slug: 'footer', previewImageUrl: null, hasHtml: false },
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
const result = await api<Json>('/api/cms/templates');
|
|
172
|
+
return (result.templates || []).map((row: Json) => ({
|
|
173
|
+
id: String(row.id || ''),
|
|
174
|
+
name: String(row.template_name || row.iam_label || row.slug || 'Template'),
|
|
175
|
+
type: String(row.template_type || 'section'),
|
|
176
|
+
category: String(row.category || 'General'),
|
|
177
|
+
slug: row.slug ? String(row.slug) : null,
|
|
178
|
+
previewImageUrl: row.preview_image_url ? String(row.preview_image_url) : null,
|
|
179
|
+
hasHtml: Boolean(row.source_html_r2_key),
|
|
180
|
+
})).filter((row: { id: string }) => row.id);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export async function applyCmsEditorTemplate(templateId: string, input: { pageId?: string | null; projectSlug?: string | null } = {}) {
|
|
184
|
+
if (useDemoBootstrap(input.projectSlug || undefined)) {
|
|
185
|
+
return demoOk({ ok: true, template_id: templateId, page_id: input.pageId, _demo: true });
|
|
186
|
+
}
|
|
187
|
+
return api<Json>(`/api/cms/templates/${encodeURIComponent(templateId)}/apply`, {
|
|
188
|
+
method: 'POST',
|
|
189
|
+
body: {
|
|
190
|
+
page_id: input.pageId || undefined,
|
|
191
|
+
project_slug: input.projectSlug || undefined,
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
export async function getCmsEditorContacts() {
|
|
196
|
+
if (useDemoBootstrap()) return [];
|
|
197
|
+
const result = await api<Json>('/api/user/contacts');
|
|
198
|
+
return (result.contacts || []).map((row: Json, index: number) => ({ id:index,name:String(row.name||row.display_name||row.email||'Contact'),email:String(row.email||''),source:String(row.source||'Contact form'),date:String(row.updated_at||row.created_at||'Recently'),tag:Array.isArray(row.tags)?row.tags[0]||'Lead':row.tag||'Lead' }));
|
|
199
|
+
}
|
|
200
|
+
export const activateCmsEditorTheme = (themeSlug: string, accent?: string) => api('/api/cms/themes/activate', { method: 'POST', body: { slug: themeSlug, accent } });
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline first-run CMS site for localhost preview — feeds the real CmsEditor shell.
|
|
3
|
+
* Not a separate “scaffold UI”. Migrations/API stay authoritative in production.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export function buildDemoCmsBootstrap(projectSlug = 'demo') {
|
|
7
|
+
const pageId = 'page_home';
|
|
8
|
+
const heroId = 'sec_hero';
|
|
9
|
+
const gridId = 'sec_products';
|
|
10
|
+
const footerId = 'sec_footer';
|
|
11
|
+
const textBlockId = 'blk_join';
|
|
12
|
+
|
|
13
|
+
return {
|
|
14
|
+
tenant: {
|
|
15
|
+
name: 'Heuristic Theme',
|
|
16
|
+
domain: 'demo.localhost',
|
|
17
|
+
primary_color: '#1e6a6f',
|
|
18
|
+
},
|
|
19
|
+
public_domain: 'demo.localhost',
|
|
20
|
+
workspace_label: 'Heuristic Theme',
|
|
21
|
+
home_page: { id: pageId },
|
|
22
|
+
protocol_version: 1,
|
|
23
|
+
active_theme: {
|
|
24
|
+
css_vars: {
|
|
25
|
+
'--brand-primary': '#1e6a6f',
|
|
26
|
+
'--brand-secondary': '#123f42',
|
|
27
|
+
'--brand-accent': '#cfef5b',
|
|
28
|
+
'--color-bg': '#f5f2ea',
|
|
29
|
+
'--color-surface': '#ffffff',
|
|
30
|
+
'--color-text': '#101014',
|
|
31
|
+
'--color-text-muted': '#73737f',
|
|
32
|
+
'--font-heading': 'Inter',
|
|
33
|
+
'--font-body': 'Inter',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
pages: [
|
|
37
|
+
{
|
|
38
|
+
id: pageId,
|
|
39
|
+
title: 'Home page',
|
|
40
|
+
slug: '/',
|
|
41
|
+
route_path: '/',
|
|
42
|
+
page_type: 'Home',
|
|
43
|
+
status: 'draft',
|
|
44
|
+
seo_title: 'Heuristic Theme',
|
|
45
|
+
meta_description: 'Stock CMS theme preview for AgentSam scaffolding.',
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
sections_by_page: {
|
|
49
|
+
[pageId]: [
|
|
50
|
+
{
|
|
51
|
+
id: heroId,
|
|
52
|
+
section_name: 'Editorial hero',
|
|
53
|
+
section_type: 'hero',
|
|
54
|
+
is_visible: 1,
|
|
55
|
+
sort_order: 10,
|
|
56
|
+
section_data: {
|
|
57
|
+
headline: 'My Store',
|
|
58
|
+
subline: 'Stock heuristic-theme · first-run CMS surface',
|
|
59
|
+
cta_text: 'Shop collection',
|
|
60
|
+
eyebrow: 'Heuristic Theme',
|
|
61
|
+
bg_color: '#101014',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: gridId,
|
|
66
|
+
section_name: 'Product grid',
|
|
67
|
+
section_type: 'product-grid',
|
|
68
|
+
is_visible: 1,
|
|
69
|
+
sort_order: 20,
|
|
70
|
+
section_data: {
|
|
71
|
+
title: 'Featured',
|
|
72
|
+
columns: 2,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: footerId,
|
|
77
|
+
section_name: 'Footer',
|
|
78
|
+
section_type: 'footer',
|
|
79
|
+
is_visible: 1,
|
|
80
|
+
sort_order: 30,
|
|
81
|
+
section_data: {
|
|
82
|
+
zone: 'FOOTER',
|
|
83
|
+
bg_color: '#F3F0E8',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
blocks_by_section: {
|
|
89
|
+
[heroId]: [],
|
|
90
|
+
[gridId]: [
|
|
91
|
+
{
|
|
92
|
+
id: 'blk_card_1',
|
|
93
|
+
section_id: gridId,
|
|
94
|
+
block_type: 'product-card',
|
|
95
|
+
is_visible: 1,
|
|
96
|
+
sort_order: 10,
|
|
97
|
+
block_data: { title: 'Classic tee', price: '$19.99' },
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: 'blk_card_2',
|
|
101
|
+
section_id: gridId,
|
|
102
|
+
block_type: 'product-card',
|
|
103
|
+
is_visible: 1,
|
|
104
|
+
sort_order: 20,
|
|
105
|
+
block_data: { title: 'Soft tee', price: '$19.99' },
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
[footerId]: [
|
|
109
|
+
{
|
|
110
|
+
id: textBlockId,
|
|
111
|
+
section_id: footerId,
|
|
112
|
+
block_type: 'text',
|
|
113
|
+
is_visible: 1,
|
|
114
|
+
sort_order: 10,
|
|
115
|
+
block_data: {
|
|
116
|
+
text: 'Join our email list',
|
|
117
|
+
typography_preset: 'Heading 4',
|
|
118
|
+
width: 'fit',
|
|
119
|
+
max_width: 'normal',
|
|
120
|
+
align: 'left',
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
component_templates: [
|
|
126
|
+
{ id: 'tpl_baseline_landing', template_name: 'Landing page', template_type: 'page', category: 'Marketing' },
|
|
127
|
+
{ id: 'tpl_baseline_hero', template_name: 'Editorial hero', template_type: 'section', category: 'Portfolio' },
|
|
128
|
+
{ id: 'tpl_baseline_footer', template_name: 'Utility footer', template_type: 'section', category: 'Agency' },
|
|
129
|
+
],
|
|
130
|
+
schemas: {
|
|
131
|
+
protocol_version: 1,
|
|
132
|
+
sections: [
|
|
133
|
+
{ key: 'hero', type: 'hero', version: 1, label: 'Editorial hero' },
|
|
134
|
+
{ key: 'product-grid', type: 'product-grid', version: 1, label: 'Product grid' },
|
|
135
|
+
{ key: 'footer', type: 'footer', version: 1, label: 'Footer' },
|
|
136
|
+
],
|
|
137
|
+
blocks: [
|
|
138
|
+
{ key: 'text', type: 'text', version: 1, label: 'Text' },
|
|
139
|
+
{ key: 'product-card', type: 'product-card', version: 1, label: 'Product card' },
|
|
140
|
+
],
|
|
141
|
+
},
|
|
142
|
+
_demo: true,
|
|
143
|
+
_project_slug: projectSlug,
|
|
144
|
+
};
|
|
145
|
+
}
|