@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,65 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { executeLocalProviderBridge } from '../../packages/agentsam-desktop-shell/scripts/local-provider-bridge.mjs';
|
|
4
|
+
|
|
5
|
+
const CANARY = 'sk-test-CANARY-123456';
|
|
6
|
+
|
|
7
|
+
function json(body, status = 200) {
|
|
8
|
+
return new Response(JSON.stringify(body), { status, headers: { 'content-type': 'application/json' } });
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function openAiFetch(url, init = {}) {
|
|
12
|
+
assert.equal(init.headers?.authorization, `Bearer ${CANARY}`);
|
|
13
|
+
if (String(url).endsWith('/v1/models')) {
|
|
14
|
+
return Promise.resolve(json({ data: [{ id: 'gpt-5.6-sol', object: 'model' }] }));
|
|
15
|
+
}
|
|
16
|
+
if (String(url).endsWith('/v1/responses')) {
|
|
17
|
+
return Promise.resolve(json({
|
|
18
|
+
id: 'resp_local_fixture',
|
|
19
|
+
status: 'completed',
|
|
20
|
+
output_text: 'offline bridge works',
|
|
21
|
+
output: [],
|
|
22
|
+
usage: { input_tokens: 3, output_tokens: 4 },
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
throw new Error(`unexpected_url:${url}`);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
test('device OpenAI credential discovers live inventory without leaking the key', async () => {
|
|
29
|
+
const result = await executeLocalProviderBridge({
|
|
30
|
+
operation: 'inventory',
|
|
31
|
+
credentials: { openai: CANARY },
|
|
32
|
+
}, { fetchImpl: openAiFetch });
|
|
33
|
+
assert.equal(result.ok, true);
|
|
34
|
+
assert.equal(result.credential_plane, 'device_keychain');
|
|
35
|
+
assert.equal(result.providers.find((row) => row.id === 'openai')?.configured, true);
|
|
36
|
+
assert.equal(result.availableModels.some((row) => row.provider === 'openai' && row.model_id === 'gpt-5.6-sol'), true);
|
|
37
|
+
assert.equal(JSON.stringify(result).includes(CANARY), false);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test('device OpenAI credential chats through canonical Responses adapter without leaking the key', async () => {
|
|
41
|
+
const result = await executeLocalProviderBridge({
|
|
42
|
+
operation: 'chat',
|
|
43
|
+
provider: 'openai',
|
|
44
|
+
model_id: 'gpt-5.6-sol',
|
|
45
|
+
messages: [{ role: 'user', content: 'hello' }],
|
|
46
|
+
credentials: { openai: CANARY },
|
|
47
|
+
}, { fetchImpl: openAiFetch });
|
|
48
|
+
assert.deepEqual(result, {
|
|
49
|
+
ok: true,
|
|
50
|
+
provider: 'openai',
|
|
51
|
+
model_id: 'gpt-5.6-sol',
|
|
52
|
+
text: 'offline bridge works',
|
|
53
|
+
});
|
|
54
|
+
assert.equal(JSON.stringify(result).includes(CANARY), false);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('provider rejection is sanitized and never echoes credential material', async () => {
|
|
58
|
+
const result = await executeLocalProviderBridge({
|
|
59
|
+
operation: 'inventory',
|
|
60
|
+
credentials: { openai: CANARY },
|
|
61
|
+
}, {
|
|
62
|
+
fetchImpl: async () => json({ error: { message: `bad ${CANARY}` } }, 401),
|
|
63
|
+
});
|
|
64
|
+
assert.equal(JSON.stringify(result).includes(CANARY), false);
|
|
65
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
|
|
5
|
+
function read(path) {
|
|
6
|
+
return readFileSync(new URL(`../../${path}`, import.meta.url), 'utf8');
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const settingsPage = read('apps/local-studio/frontend/src/components/settings/LocalStudioSettingsPage.tsx');
|
|
10
|
+
const settingsHost = read('apps/local-studio/frontend/src/components/settings/localStudioSettingsHost.ts');
|
|
11
|
+
const shell = read('apps/local-studio/frontend/agentsam/AgentSamShell.tsx');
|
|
12
|
+
const keysPage = read('apps/local-studio/frontend/src/components/settings/LiveKeysSettingsPage.tsx');
|
|
13
|
+
const apiKeys = read('apps/local-studio/frontend/src/components/settings/ApiKeysTable.tsx');
|
|
14
|
+
const settingsFrontend = read('packages/agentsam-settings/src/frontend/index.tsx');
|
|
15
|
+
|
|
16
|
+
test('production Settings never mounts fixture data', () => {
|
|
17
|
+
assert.doesNotMatch(settingsPage, /createFixtureSettingsHost|getSettingsFixture|SettingsFixtureName/);
|
|
18
|
+
assert.doesNotMatch(settingsHost, /demo-app|Demo Org|health:\s*["']healthy["']/i);
|
|
19
|
+
assert.match(settingsHost, /repositoryLabel:\s*["']Not connected["']/);
|
|
20
|
+
assert.match(settingsHost, /browser:\s*["']Not checked["']/);
|
|
21
|
+
assert.match(settingsHost, /health:\s*["']unknown["']/);
|
|
22
|
+
assert.doesNotMatch(settingsFrontend, /demo-app|Demo Org/);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
test('Settings route suppresses the outer application sidenav', () => {
|
|
26
|
+
assert.match(shell, /const isSettings = pathname === ['"]\/settings['"] \|\| pathname\.startsWith\(['"]\/settings\/['"]\)/);
|
|
27
|
+
assert.match(shell, /!isSettings \? <Nav\.Sidenav \/> : null/);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test('Keys page has a visible explicit AgentSam key trigger', () => {
|
|
31
|
+
assert.match(keysPage, /variant="secondary"/);
|
|
32
|
+
assert.match(keysPage, /Create AgentSam key/);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test('account provider rows show live discovery trust status', () => {
|
|
36
|
+
assert.match(apiKeys, /accountInventoryRequest/);
|
|
37
|
+
assert.match(apiKeys, /Connected · \$\{count\} model/);
|
|
38
|
+
assert.match(apiKeys, /rejected this key/);
|
|
39
|
+
assert.match(apiKeys, /Not selected/);
|
|
40
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { test } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
|
|
7
|
+
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..');
|
|
8
|
+
|
|
9
|
+
test('every workspace and link path in package-lock.json exists on disk', () => {
|
|
10
|
+
const lock = JSON.parse(fs.readFileSync(path.join(root, 'package-lock.json'), 'utf8'));
|
|
11
|
+
const paths = new Set();
|
|
12
|
+
for (const [key, value] of Object.entries(lock.packages)) {
|
|
13
|
+
if (key && !key.includes('node_modules/')) paths.add(key);
|
|
14
|
+
if (value.link && value.resolved) paths.add(value.resolved);
|
|
15
|
+
}
|
|
16
|
+
const missing = [...paths].filter((p) => !fs.existsSync(path.join(root, p)));
|
|
17
|
+
assert.deepEqual(missing, []);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test('package.json bin map matches package-lock packages[""].bin', () => {
|
|
21
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
|
|
22
|
+
const lock = JSON.parse(fs.readFileSync(path.join(root, 'package-lock.json'), 'utf8'));
|
|
23
|
+
const pkgBin = pkg.bin || {};
|
|
24
|
+
const lockBin = (lock.packages && lock.packages[''] && lock.packages[''].bin) || {};
|
|
25
|
+
assert.deepEqual(lockBin, pkgBin);
|
|
26
|
+
});
|
|
@@ -6,11 +6,20 @@ import { spawnSync } from 'node:child_process';
|
|
|
6
6
|
import test from 'node:test';
|
|
7
7
|
|
|
8
8
|
const repoRoot = path.resolve(new URL('../..', import.meta.url).pathname);
|
|
9
|
+
/** Repo bin first — clean CI has no global `agentsam`; loader requires it on PATH. */
|
|
10
|
+
function testEnv(home, extra = {}) {
|
|
11
|
+
return {
|
|
12
|
+
...process.env,
|
|
13
|
+
...extra,
|
|
14
|
+
HOME: home,
|
|
15
|
+
PATH: `${path.join(repoRoot, 'bin')}${path.delimiter}${process.env.PATH || ''}`,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
9
18
|
|
|
10
19
|
test('agentsam env init creates provider profile and reusable source loader', { skip: process.platform === 'win32' }, t => {
|
|
11
20
|
const home = fs.mkdtempSync(path.join(os.tmpdir(), 'agentsam-env-cli-'));
|
|
12
21
|
t.after(() => fs.rmSync(home, { recursive: true, force: true }));
|
|
13
|
-
const env =
|
|
22
|
+
const env = testEnv(home);
|
|
14
23
|
const result = spawnSync(process.execPath, ['src/cli.js', 'env', 'init', 'openai'], { cwd: repoRoot, env, encoding: 'utf8' });
|
|
15
24
|
assert.equal(result.status, 0, result.stderr);
|
|
16
25
|
assert.match(result.stdout, /source ~\/.agentsam\/load-agent-env\.sh(?:\s|$)/);
|
|
@@ -40,11 +49,12 @@ test('Cloudflare env init backfills exactly one Wrangler account without printin
|
|
|
40
49
|
test('generated loader exports the selected provider profile into the caller shell', { skip: process.platform === 'win32' }, t => {
|
|
41
50
|
const home = fs.mkdtempSync(path.join(os.tmpdir(), 'agentsam-env-source-'));
|
|
42
51
|
t.after(() => fs.rmSync(home, { recursive: true, force: true }));
|
|
43
|
-
const env =
|
|
52
|
+
const env = testEnv(home);
|
|
44
53
|
let result = spawnSync(process.execPath, ['src/cli.js', 'env', 'init', 'openai'], { cwd: repoRoot, env, encoding: 'utf8' });
|
|
45
54
|
assert.equal(result.status, 0, result.stderr);
|
|
46
55
|
fs.writeFileSync(path.join(home, '.agentsam', 'env.d', 'openai.env'), 'export OPENAI_API_KEY="sentinel-provider-key"\
|
|
47
56
|
', { mode: 0o600 });
|
|
48
|
-
|
|
57
|
+
// Use bash -c (not -lc): a login shell resets PATH and drops the repo bin/agentsam needed on clean CI.
|
|
58
|
+
result = spawnSync('bash', ['-c', 'source "$HOME/.agentsam/load-agent-env.sh" openai && test "$OPENAI_API_KEY" = "sentinel-provider-key"'], { env, encoding: 'utf8' });
|
|
49
59
|
assert.equal(result.status, 0, result.stderr);
|
|
50
60
|
});
|
|
@@ -14,13 +14,28 @@ import { renderRuntimeStatus } from '../../src/ui/ansi.js';
|
|
|
14
14
|
|
|
15
15
|
const root = path.resolve(new URL('../..', import.meta.url).pathname);
|
|
16
16
|
|
|
17
|
+
test('Wrangler TOML parser preserves Vectorize declarations', () => {
|
|
18
|
+
const parsed = parseWranglerToml([
|
|
19
|
+
'name = "demo"',
|
|
20
|
+
'[ai]',
|
|
21
|
+
'binding = "AGENTSAM_WAI"',
|
|
22
|
+
'',
|
|
23
|
+
'[[vectorize]]',
|
|
24
|
+
'binding = "SEARCH_INDEX"',
|
|
25
|
+
'index_name = "demo-search-1024"',
|
|
26
|
+
].join('\n'));
|
|
27
|
+
assert.deepEqual(parsed.vectorize, [{ binding: 'SEARCH_INDEX', index_name: 'demo-search-1024' }]);
|
|
28
|
+
assert.equal(parsed.ai.binding, 'AGENTSAM_WAI');
|
|
29
|
+
});
|
|
30
|
+
|
|
17
31
|
test('checked-in Cloudflare deployment contract resolves the real Worker and portable bindings', () => {
|
|
18
32
|
const contract = readCloudflareDeploymentContract(root, readProjectConfig(root));
|
|
19
33
|
assert.equal(contract.worker_name, 'agentsam-sdk');
|
|
20
34
|
assert.equal(contract.config, 'apps/local-studio/backend/wrangler.jsonc');
|
|
21
35
|
assert.deepEqual(contract.bindings.map((row) => row.name), [
|
|
22
36
|
'AGENTSAM_WAI', 'ASSETS', 'CLOUDFLARE_ACCOUNT_ID', 'DB', 'EXECOS',
|
|
23
|
-
'
|
|
37
|
+
'GITHUB_APP_ID', 'GITHUB_CLIENT_ID', 'GOOGLE_CLIENT_ID', 'GOOGLE_DESKTOP_CLIENT_ID',
|
|
38
|
+
'HYPERDRIVE', 'IAM_CLIENT_ID',
|
|
24
39
|
'IAM_OAUTH_ISSUER', 'PTY_SERVICE', 'WEBSITE_ASSETS',
|
|
25
40
|
]);
|
|
26
41
|
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
import {
|
|
4
|
+
listThemePackages,
|
|
5
|
+
resolveThemePackage,
|
|
6
|
+
} from "../../packages/theme-scenes/src/registry.js";
|
|
7
|
+
|
|
8
|
+
test("theme registry resolves donor aliases to neutral canonical ids", () => {
|
|
9
|
+
const companions = resolveThemePackage("companions-of-caddo");
|
|
10
|
+
assert.equal(companions?.id, "violet");
|
|
11
|
+
assert.equal(companions?.packageName, "@inneranimalmedia/theme-violet");
|
|
12
|
+
assert.equal(companions?.packageNameLegacy, "@inneranimalmedia/theme-companions-site");
|
|
13
|
+
|
|
14
|
+
const fuel = resolveThemePackage("fuelnfreetime");
|
|
15
|
+
assert.equal(fuel?.id, "ember");
|
|
16
|
+
assert.equal(fuel?.packageName, "@inneranimalmedia/theme-ember");
|
|
17
|
+
|
|
18
|
+
const cypress = resolveThemePackage("cypress");
|
|
19
|
+
assert.equal(cypress?.path, "packages/theme-church-site");
|
|
20
|
+
|
|
21
|
+
const scenes = resolveThemePackage("theme-scenes");
|
|
22
|
+
assert.equal(scenes?.kind, "scenes");
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
test("site themes remain distinct packages (not flattened)", () => {
|
|
26
|
+
const sites = listThemePackages("site-theme");
|
|
27
|
+
assert.ok(sites.length >= 7);
|
|
28
|
+
assert.ok(sites.every((entry) => entry.path.startsWith("packages/theme-")));
|
|
29
|
+
assert.ok(sites.every((entry) => entry.packageName.startsWith("@inneranimalmedia/theme-")));
|
|
30
|
+
assert.ok(sites.every((entry) => !entry.packageName.includes("-site") || entry.id === "docs"));
|
|
31
|
+
});
|
|
@@ -25,13 +25,13 @@ function snapshot() {
|
|
|
25
25
|
files: [
|
|
26
26
|
{
|
|
27
27
|
path: 'packages/identity/src/core/accounts.js', type: 'file', size: 213, mode: 420, hash: `sha256:${'a'.repeat(64)}`,
|
|
28
|
-
package: '@inneranimalmedia/agentsam-
|
|
28
|
+
package: '@inneranimalmedia/agentsam-identity', package_root: 'packages/identity', system: 'identity',
|
|
29
29
|
category: 'accounts', layer: 'core', kind: 'source', language: 'javascript', role: 'business-logic', execution_domain: 'unknown',
|
|
30
30
|
tags: ['account-scoped', 'authentication'], symbols: ['accountLinkingNotConfigured'], imports: [],
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
path: 'packages/identity/src/oauth/login.js', type: 'file', size: 300, mode: 420, hash: `sha256:${'b'.repeat(64)}`,
|
|
34
|
-
package: '@inneranimalmedia/agentsam-
|
|
34
|
+
package: '@inneranimalmedia/agentsam-identity', package_root: 'packages/identity', system: 'identity',
|
|
35
35
|
category: 'login', layer: 'oauth', kind: 'source', language: 'javascript', role: 'business-logic', execution_domain: 'unknown',
|
|
36
36
|
tags: ['authentication'], symbols: ['login'], imports: ['./accounts.js'],
|
|
37
37
|
},
|
package/test/security.test.mjs
CHANGED
|
@@ -250,3 +250,17 @@ test('browser env and server-runtime imports are derived from syntax rather than
|
|
|
250
250
|
assert.ok(kinds.has('browser-public-secret-name'));
|
|
251
251
|
assert.ok(kinds.has('browser-private-env-access'));
|
|
252
252
|
});
|
|
253
|
+
|
|
254
|
+
test('security run never loads heavy scan stack when child command fails', async t => {
|
|
255
|
+
const f = fixture(t);
|
|
256
|
+
const result = spawnSync(process.execPath, [cli, 'run', '--path', f.root, '--json', '--', process.execPath, '-e', 'console.error("install boom"); process.exit(17)'], { encoding: 'utf8' });
|
|
257
|
+
assert.equal(result.status, 1);
|
|
258
|
+
const report = JSON.parse(result.stdout);
|
|
259
|
+
assert.equal(report.status, 'command-failed');
|
|
260
|
+
assert.equal(report.ok, false);
|
|
261
|
+
assert.equal(report.command_exit_code, 17);
|
|
262
|
+
assert.match(report.stderr || report.log || '', /install boom/);
|
|
263
|
+
assert.equal(report.error, undefined);
|
|
264
|
+
assert.ok(!JSON.stringify(report).includes('ERR_MODULE_NOT_FOUND'));
|
|
265
|
+
assert.ok(!JSON.stringify(report).includes('typescript'));
|
|
266
|
+
});
|
|
@@ -9,7 +9,7 @@ test('identity command prints this host vocabulary without calling the network',
|
|
|
9
9
|
const result = await runTerminal(['identity'], {
|
|
10
10
|
write: (line) => lines.push(line),
|
|
11
11
|
collectIdentity: async () => ({
|
|
12
|
-
hostname: '
|
|
12
|
+
hostname: 'dev-machine',
|
|
13
13
|
platform: 'macos',
|
|
14
14
|
arch: 'arm64',
|
|
15
15
|
model: 'Mac16,2',
|
|
@@ -41,7 +41,7 @@ test('enroll posts canonical identity for the instance the caller named', async
|
|
|
41
41
|
const result = await runTerminal(['enroll', '--instance', 'tinst_sams_imac', '--json'], {
|
|
42
42
|
write: () => {},
|
|
43
43
|
collectIdentity: async () => ({
|
|
44
|
-
hostname: '
|
|
44
|
+
hostname: 'dev-machine',
|
|
45
45
|
platform: 'macos',
|
|
46
46
|
arch: 'arm64',
|
|
47
47
|
model: 'Mac16,2',
|
|
@@ -1,145 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { type HTMLAttributes } from 'react';
|
|
2
|
-
import { NavCollapsible, NavCollapsibleContent, NavCollapsibleTrigger } from './NavCollapsible.js';
|
|
3
|
-
import { NavContent } from './NavContent.js';
|
|
4
|
-
import { NavFooter } from './NavFooter.js';
|
|
5
|
-
import { NavGroup, NavGroupLabel } from './NavGroup.js';
|
|
6
|
-
import { NavHeader } from './NavHeader.js';
|
|
7
|
-
import { NavMenu, NavMenuButton, NavMenuChevron, NavMenuItem, NavMenuSub, NavMenuSubButton } from './NavMenu.js';
|
|
8
|
-
import { NavProvider } from './NavProvider.js';
|
|
9
|
-
import { NavTrigger } from './NavTrigger.js';
|
|
10
|
-
import { NavScope, NavSidenav, NavTopbar, NavTopbarLogo, NavTopbarSpacer, NavProjectContext, NavAccountSwitcher, NavFilesResources, NavPinnedSummary, NavConversationActions, NavShareButton, NavOverflowMenu, NavModeSwitcher } from './Surfaces.js';
|
|
11
|
-
declare function NavRoot({ className, children, ...props }: HTMLAttributes<HTMLElement>): import("react").JSX.Element;
|
|
12
|
-
export declare const Nav: typeof NavRoot & {
|
|
13
|
-
Scope: typeof NavScope;
|
|
14
|
-
Sidenav: typeof NavSidenav;
|
|
15
|
-
Topbar: typeof NavTopbar;
|
|
16
|
-
TopbarLogo: typeof NavTopbarLogo;
|
|
17
|
-
TopbarSpacer: typeof NavTopbarSpacer;
|
|
18
|
-
ProjectContext: typeof NavProjectContext;
|
|
19
|
-
AccountSwitcher: typeof NavAccountSwitcher;
|
|
20
|
-
FilesResources: typeof NavFilesResources;
|
|
21
|
-
PinnedSummary: typeof NavPinnedSummary;
|
|
22
|
-
ConversationActions: typeof NavConversationActions;
|
|
23
|
-
ShareButton: typeof NavShareButton;
|
|
24
|
-
OverflowMenu: typeof NavOverflowMenu;
|
|
25
|
-
ModeSwitcher: typeof NavModeSwitcher;
|
|
26
|
-
Provider: typeof NavProvider;
|
|
27
|
-
Header: typeof NavHeader;
|
|
28
|
-
Content: typeof NavContent;
|
|
29
|
-
Footer: typeof NavFooter;
|
|
30
|
-
Group: typeof NavGroup;
|
|
31
|
-
GroupLabel: typeof NavGroupLabel;
|
|
32
|
-
Menu: typeof NavMenu;
|
|
33
|
-
MenuItem: typeof NavMenuItem;
|
|
34
|
-
MenuButton: typeof NavMenuButton;
|
|
35
|
-
MenuSub: typeof NavMenuSub;
|
|
36
|
-
MenuSubButton: typeof NavMenuSubButton;
|
|
37
|
-
MenuChevron: typeof NavMenuChevron;
|
|
38
|
-
Collapsible: typeof NavCollapsible;
|
|
39
|
-
CollapsibleTrigger: typeof NavCollapsibleTrigger;
|
|
40
|
-
CollapsibleContent: typeof NavCollapsibleContent;
|
|
41
|
-
Trigger: typeof NavTrigger;
|
|
42
|
-
};
|
|
43
|
-
export {};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { type ButtonHTMLAttributes, type HTMLAttributes, type ReactElement, type ReactNode } from 'react';
|
|
2
|
-
export declare function NavCollapsible({ children, defaultOpen }: {
|
|
3
|
-
children: ReactNode;
|
|
4
|
-
defaultOpen?: boolean;
|
|
5
|
-
}): import("react").JSX.Element;
|
|
6
|
-
export declare function NavCollapsibleTrigger({ render, children, className, ...props }: ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
7
|
-
render?: ReactElement;
|
|
8
|
-
children?: ReactNode;
|
|
9
|
-
}): import("react").JSX.Element;
|
|
10
|
-
export declare function NavCollapsibleContent({ className, ...props }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import type { HTMLAttributes } from 'react';
|
|
2
|
-
export declare function NavGroup({ className, ...props }: HTMLAttributes<HTMLElement>): import("react").JSX.Element;
|
|
3
|
-
export declare function NavGroupLabel({ className, ...props }: HTMLAttributes<HTMLParagraphElement>): import("react").JSX.Element;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from 'react';
|
|
2
|
-
export declare function NavMenu({ className, ...props }: HTMLAttributes<HTMLUListElement>): import("react").JSX.Element;
|
|
3
|
-
export declare function NavMenuItem({ className, ...props }: HTMLAttributes<HTMLLIElement>): import("react").JSX.Element;
|
|
4
|
-
export type NavMenuButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
5
|
-
icon?: unknown;
|
|
6
|
-
active?: boolean;
|
|
7
|
-
itemId?: string;
|
|
8
|
-
children: ReactNode;
|
|
9
|
-
};
|
|
10
|
-
export declare function NavMenuButton({ icon: Icon, active, itemId, className, children, ...props }: NavMenuButtonProps): import("react").JSX.Element;
|
|
11
|
-
export declare function NavMenuSub({ className, ...props }: HTMLAttributes<HTMLUListElement>): import("react").JSX.Element;
|
|
12
|
-
export type NavMenuSubButtonProps = {
|
|
13
|
-
href?: string;
|
|
14
|
-
active?: boolean;
|
|
15
|
-
className?: string;
|
|
16
|
-
children?: unknown;
|
|
17
|
-
onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;
|
|
18
|
-
};
|
|
19
|
-
export declare function NavMenuSubButton({ active, className, children, ...props }: NavMenuSubButtonProps): import("react").JSX.Element;
|
|
20
|
-
export declare function NavMenuChevron({ className }: {
|
|
21
|
-
className?: string;
|
|
22
|
-
}): import("react").JSX.Element;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { type PropsWithChildren } from 'react';
|
|
2
|
-
import type { NavTheme, NavValue, NavTokens } from './contracts.js';
|
|
3
|
-
export type NavContextValue = {
|
|
4
|
-
data: NavValue;
|
|
5
|
-
tokens: NavTokens;
|
|
6
|
-
theme: NavTheme;
|
|
7
|
-
accentColor: string;
|
|
8
|
-
menu: string | null;
|
|
9
|
-
setMenu: (menu: string | null) => void;
|
|
10
|
-
open: boolean;
|
|
11
|
-
isMobile: boolean;
|
|
12
|
-
isPeeking: boolean;
|
|
13
|
-
peekable: boolean;
|
|
14
|
-
resizable: boolean;
|
|
15
|
-
width: number;
|
|
16
|
-
mobileBreakpoint: number;
|
|
17
|
-
setOpen: (open: boolean) => void;
|
|
18
|
-
toggle: () => void;
|
|
19
|
-
close: () => void;
|
|
20
|
-
setPeeking: (peeking: boolean) => void;
|
|
21
|
-
setWidth: (width: number) => void;
|
|
22
|
-
scrollToItem: (itemId: string) => void;
|
|
23
|
-
};
|
|
24
|
-
export type NavProviderProps = PropsWithChildren<{
|
|
25
|
-
value?: NavValue;
|
|
26
|
-
tokens?: NavTokens;
|
|
27
|
-
theme?: NavTheme;
|
|
28
|
-
accentColor?: string;
|
|
29
|
-
defaultOpen?: boolean;
|
|
30
|
-
mobileBreakpoint?: number;
|
|
31
|
-
peekable?: boolean;
|
|
32
|
-
resizable?: boolean;
|
|
33
|
-
}>;
|
|
34
|
-
export declare function NavProvider({ children, value: data, tokens, theme, accentColor, defaultOpen, mobileBreakpoint, peekable, resizable, }: NavProviderProps): import("react").JSX.Element;
|
|
35
|
-
export declare function useNav(): NavContextValue;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { type CSSProperties, type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
-
import type { NavAccount, NavAction } from './contracts.js';
|
|
3
|
-
export declare function useNavStyle(): CSSProperties;
|
|
4
|
-
export declare function NavScope({ className, style, ...props }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
|
|
5
|
-
/** The portal carries its own theme, so standalone surfaces never depend on body CSS. */
|
|
6
|
-
export declare function NavOverflowMenu({ label, actions, children, id: suppliedId, align }: {
|
|
7
|
-
label?: string;
|
|
8
|
-
actions?: NavAction[];
|
|
9
|
-
children?: ReactNode;
|
|
10
|
-
id?: string;
|
|
11
|
-
align?: 'start' | 'center' | 'end';
|
|
12
|
-
}): import("react").JSX.Element;
|
|
13
|
-
export declare function NavTopbarLogo({ variant, onClick, toggle }: {
|
|
14
|
-
variant?: 'mark' | 'expanded';
|
|
15
|
-
onClick?: () => void;
|
|
16
|
-
toggle?: boolean;
|
|
17
|
-
}): import("react").JSX.Element;
|
|
18
|
-
export declare function NavProjectContext(): import("react").JSX.Element;
|
|
19
|
-
export declare function NavTopbarSpacer(): import("react").JSX.Element;
|
|
20
|
-
export declare function NavFilesResources(): import("react").JSX.Element;
|
|
21
|
-
export declare function NavPinnedSummary(): import("react").JSX.Element | null;
|
|
22
|
-
export declare function NavConversationActions(): import("react").JSX.Element;
|
|
23
|
-
export declare function NavShareButton(): import("react").JSX.Element | null;
|
|
24
|
-
export declare function NavAccountSwitcher({ accounts, activeAccountId, onAccountChange, expanded }: {
|
|
25
|
-
accounts?: NavAccount[];
|
|
26
|
-
activeAccountId?: string;
|
|
27
|
-
onAccountChange?: (id: string) => void;
|
|
28
|
-
expanded?: boolean;
|
|
29
|
-
}): import("react").JSX.Element;
|
|
30
|
-
export declare function NavModeSwitcher(): import("react").JSX.Element;
|
|
31
|
-
export declare function NavTopbar({ children, rightSlot, modeSlot, contextSlot, startup, className, showNavigationTrigger, showAccount, }: {
|
|
32
|
-
children?: ReactNode;
|
|
33
|
-
rightSlot?: ReactNode;
|
|
34
|
-
modeSlot?: ReactNode;
|
|
35
|
-
contextSlot?: ReactNode;
|
|
36
|
-
startup?: boolean;
|
|
37
|
-
className?: string;
|
|
38
|
-
showNavigationTrigger?: boolean;
|
|
39
|
-
showAccount?: boolean;
|
|
40
|
-
}): import("react").JSX.Element;
|
|
41
|
-
export declare function NavSidenav(): import("react").JSX.Element;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { NavProviderProps } from './NavProvider.js';
|
|
2
|
-
export interface MountNavOptions extends Omit<NavProviderProps, 'children'> {
|
|
3
|
-
sidenav?: HTMLElement;
|
|
4
|
-
topbar?: HTMLElement;
|
|
5
|
-
startup?: boolean;
|
|
6
|
-
}
|
|
7
|
-
/** Plain HTML integration. Both portals are descendants of the same provider. */
|
|
8
|
-
export declare function mountNav(options: MountNavOptions): {
|
|
9
|
-
update(next: Partial<MountNavOptions>): void;
|
|
10
|
-
unmount(): void;
|
|
11
|
-
};
|