@inneranimalmedia/agentsam-sdk 2.6.5 → 2.6.8
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/README.md +37 -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/REPO_FILE_MAP.txt +132 -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/migrations/d1/0018_goap_control_plane_remaster.sql +40 -0
- package/migrations/d1/0019_agentsam_agent_run_plan_todo.sql +14 -0
- package/migrations/d1/README_PORTABLE_CONTROL_PLANE.md +20 -9
- package/migrations/runtime/0002_goap_blackboard_v1.sql +15 -0
- package/migrations/runtime/0004_agent_run_plan_linkage.sql +8 -0
- package/native/agentsam-machine/Cargo.lock +426 -0
- package/native/agentsam-machine/Cargo.toml +9 -0
- package/native/agentsam-machine/cli/Cargo.toml +21 -0
- package/native/agentsam-machine/cli/README.md +21 -0
- package/native/agentsam-machine/cli/src/main.rs +77 -0
- package/native/agentsam-machine/core/Cargo.toml +22 -0
- package/native/agentsam-machine/core/README.md +14 -0
- package/native/agentsam-machine/core/build.rs +33 -0
- package/native/agentsam-machine/core/contracts/source-types.v1.json +353 -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 +1092 -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 +64 -24
- 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-errors/src/index.js +1 -0
- package/packages/agentsam-errors/src/tool.js +56 -0
- package/packages/agentsam-errors/test/tool.test.mjs +58 -0
- package/packages/agentsam-goap/README.md +52 -0
- package/packages/agentsam-goap/package.json +37 -0
- package/packages/agentsam-goap/src/adapters/d1-sqlite.js +570 -0
- package/packages/agentsam-goap/src/adapters/memory.js +199 -0
- package/packages/agentsam-goap/src/contracts.js +226 -0
- package/packages/agentsam-goap/src/control-plane.js +112 -0
- package/packages/agentsam-goap/src/errors.js +157 -0
- package/packages/agentsam-goap/src/index.js +5 -0
- package/packages/agentsam-goap/src/world.js +202 -0
- package/packages/agentsam-goap/test/goap-control-plane.test.mjs +245 -0
- package/packages/agentsam-goap/test/world.test.mjs +79 -0
- 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/dist/browser.global.js +21 -18
- package/packages/agentsam-nav/dist/browser.js +6807 -130
- package/packages/agentsam-nav/dist/index.js +6799 -122
- 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/goap.js +13 -14
- package/packages/agentsam-repository/src/source-types.js +8 -0
- package/packages/agentsam-repository/src/tickets.js +15 -22
- package/packages/agentsam-repository/test/goap-tickets-workspace-state.test.mjs +19 -8
- 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 +15 -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/python/agentsam_sdk/repository/intelligence/discovery.py +27 -2
- package/python/agentsam_sdk/repository/intelligence/git.py +4 -0
- package/python/tests/test_repository_intelligence.py +30 -0
- package/src/cli/command-catalog.js +48 -5
- package/src/cli/dispatch.js +1 -0
- package/src/cli.js +20 -1
- 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/goap-world.js +134 -0
- package/src/commands/goap.js +11 -4
- package/src/commands/knowledge.js +59 -2
- package/src/commands/machine-binary.js +109 -0
- package/src/commands/machine-runtime.js +266 -0
- package/src/commands/machine.js +208 -0
- package/src/commands/package.js +530 -0
- package/src/commands/plan-ledger.js +370 -0
- package/src/commands/plan.js +183 -0
- package/src/commands/security.js +67 -4
- package/src/commands/setup.js +33 -16
- package/src/commands/skill.js +78 -17
- 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/knowledge/source.js +1 -1
- package/src/lib/identity-scaffold.js +53 -13
- package/src/lib/setup/recipes.js +1 -1
- package/src/lib/slash-commands.js +1 -1
- package/src/local/runtime-store.js +24 -2
- package/src/local/sqlite.js +17 -0
- 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/sam/operations/package-audit.js +41 -0
- package/src/sam/seed.js +2 -0
- package/src/security/logs.js +3 -0
- package/src/ui/cli/help.js +41 -0
- package/apps/client-cms-editor/backend/src/demo-bootstrap.ts +0 -145
- package/test/account-session.test.mjs +0 -101
- package/test/agent-capabilities.test.mjs +0 -67
- package/test/app-authority-context.test.mjs +0 -32
- package/test/app-building-skills.test.mjs +0 -61
- package/test/apps-scaffold-contract.test.mjs +0 -114
- package/test/blender-cad.test.mjs +0 -146
- package/test/cad-docker.test.mjs +0 -96
- package/test/capabilities.test.mjs +0 -133
- package/test/cli/api-key-env-whoami.test.mjs +0 -129
- package/test/cli/codebaseindex-plan-ux.test.mjs +0 -37
- package/test/cli/eval-live.test.mjs +0 -219
- package/test/cli/go.test.mjs +0 -128
- package/test/cli/local-vault-and-provider-setup.test.mjs +0 -268
- package/test/cli/mcp-client.test.mjs +0 -256
- package/test/cli/preferences-runtime.test.mjs +0 -11
- package/test/cli/runtime-persist.test.mjs +0 -56
- package/test/cli/runtime-ui.test.mjs +0 -141
- package/test/cli/rust-command.test.mjs +0 -21
- package/test/cli/skill-npm-and-env.test.mjs +0 -52
- package/test/cli/status-actions.test.mjs +0 -88
- package/test/cli/wireframes-go-registry.test.mjs +0 -139
- package/test/cli-preferences.test.mjs +0 -46
- package/test/cloudflare-connector.test.mjs +0 -93
- package/test/cloudflare-runtime.test.mjs +0 -82
- package/test/context.test.mjs +0 -159
- package/test/credentials-audit.test.mjs +0 -113
- package/test/deploy-health-scan.test.mjs +0 -95
- package/test/deploy-receipt.test.mjs +0 -91
- package/test/dockerize.test.mjs +0 -93
- package/test/error-diagnostics.test.mjs +0 -124
- package/test/eval-context.test.mjs +0 -37
- package/test/execution-approvals.test.mjs +0 -27
- package/test/fixtures/cad/courtyard-house.json +0 -208
- package/test/fixtures/knowledge-rpc-worker.mjs +0 -16
- package/test/gcloud-auth.test.mjs +0 -111
- package/test/go/build-source-identity.test.mjs +0 -31
- package/test/go/cloudflare-probe.test.mjs +0 -317
- package/test/go/distribution.test.mjs +0 -28
- package/test/google-cloud-connection.test.mjs +0 -83
- package/test/google-cloud-inventory.test.mjs +0 -64
- package/test/indexing-provider.test.mjs +0 -29
- package/test/init-options.test.mjs +0 -35
- package/test/integration/ai-access-onboarding.test.mjs +0 -47
- package/test/integration/app-command.test.mjs +0 -85
- package/test/integration/cad-discovery.test.mjs +0 -158
- package/test/integration/cad-docker-executor.test.mjs +0 -249
- package/test/integration/cad-execution.test.mjs +0 -184
- package/test/integration/cad-project-app.test.mjs +0 -31
- package/test/integration/cad-project-d1.test.mjs +0 -25
- package/test/integration/cad-project-native.test.mjs +0 -24
- package/test/integration/cad-project-workflow.test.mjs +0 -9
- package/test/integration/cad-project.test.mjs +0 -85
- package/test/integration/cli-help.test.mjs +0 -41
- package/test/integration/cms-app-scaffold.test.mjs +0 -71
- package/test/integration/cms-site-tenancy-contract.test.mjs +0 -257
- package/test/integration/codebaseindex-ingest.test.mjs +0 -214
- package/test/integration/core-client.integration.test.mjs +0 -55
- package/test/integration/error-runtime-rpc.test.mjs +0 -71
- package/test/integration/features-resolve.test.mjs +0 -147
- package/test/integration/icon-registry.test.mjs +0 -67
- package/test/integration/ingest-discover-models.test.mjs +0 -30
- package/test/integration/inspect-path-cli.test.mjs +0 -46
- package/test/integration/install-script.test.mjs +0 -110
- package/test/integration/inventory-core.test.mjs +0 -53
- package/test/integration/inventory-evidence.test.mjs +0 -125
- package/test/integration/knowledge-rpc.test.mjs +0 -112
- package/test/integration/local-fs.test.mjs +0 -113
- package/test/integration/merkle-cli.test.mjs +0 -61
- package/test/integration/merkle-persistence-identity.test.mjs +0 -48
- package/test/integration/plugins-cloudflare.integration.test.mjs +0 -28
- package/test/integration/provider-env-cli.test.mjs +0 -50
- package/test/integration/provider-factory.test.mjs +0 -197
- package/test/integration/repository-company-graph.test.mjs +0 -90
- package/test/integration/runtime-migrations.test.mjs +0 -87
- package/test/integration/runtime-status.integration.test.mjs +0 -212
- package/test/integration/sam-activity-recovery.test.mjs +0 -147
- package/test/integration/sam-decision.test.mjs +0 -584
- package/test/integration/sam-kernel.test.mjs +0 -99
- package/test/integration/sam-planning-astar.test.mjs +0 -279
- package/test/integration/scaffold-cloudflare.test.mjs +0 -46
- package/test/integration/skill-runtime.test.mjs +0 -240
- package/test/integration/storage-architecture.test.mjs +0 -154
- package/test/integration/store-discovery.test.mjs +0 -44
- package/test/integration/studio-fs-pty-e2e.test.mjs +0 -294
- package/test/integration/terminal-exec.integration.test.mjs +0 -86
- package/test/integration/tool-runtime.test.mjs +0 -124
- package/test/integration/tool-schema.test.mjs +0 -59
- package/test/jr-dev-skill.test.mjs +0 -26
- package/test/knowledge-context-pack.test.mjs +0 -19
- package/test/knowledge-postgres.test.mjs +0 -40
- package/test/knowledge-service.test.mjs +0 -110
- package/test/knowledge.test.mjs +0 -206
- package/test/live/terminal-transport.live.test.mjs +0 -24
- package/test/local-sessions.test.mjs +0 -57
- package/test/local-studio-deploy.test.mjs +0 -83
- package/test/loopback-oauth.test.mjs +0 -53
- package/test/merkle-render.test.mjs +0 -31
- package/test/mini.test.mjs +0 -140
- package/test/model-catalog.test.mjs +0 -70
- package/test/models.test.mjs +0 -309
- package/test/npm10-lock.test.mjs +0 -29
- package/test/ollama.test.mjs +0 -137
- package/test/open-url.test.mjs +0 -64
- package/test/openai-responses.test.mjs +0 -155
- package/test/portable-context.test.mjs +0 -94
- package/test/project-config.test.mjs +0 -81
- package/test/project-rules.test.mjs +0 -44
- package/test/provider-credentials.test.mjs +0 -106
- package/test/rehydrate.test.mjs +0 -25
- package/test/release-hygiene.test.mjs +0 -42
- package/test/repository-snapshot-view.test.mjs +0 -112
- package/test/responses-runner.test.mjs +0 -465
- package/test/runtime-activity.test.mjs +0 -98
- package/test/sdk-worker-contract.test.mjs +0 -72
- package/test/security.test.mjs +0 -252
- package/test/setup-planner.test.mjs +0 -74
- package/test/setup-runtime.test.mjs +0 -51
- package/test/shell.test.mjs +0 -281
- package/test/skills.test.mjs +0 -22
- package/test/smoke.mjs +0 -122
- package/test/telemetry.test.mjs +0 -79
- package/test/terminal/local-pty.mock.test.mjs +0 -153
- package/test/terminal-machine-identity.test.mjs +0 -88
- package/test/theme-portability.test.mjs +0 -14
- package/test/tools-search.test.mjs +0 -73
- package/test/unit/website-assets-bindings.test.mjs +0 -60
- package/test/whoami-resume.test.mjs +0 -157
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
.agentsam-tool-permission-overlay {
|
|
2
|
+
position: fixed;
|
|
3
|
+
inset: 0;
|
|
4
|
+
z-index: 120;
|
|
5
|
+
display: grid;
|
|
6
|
+
place-items: center;
|
|
7
|
+
padding: 24px;
|
|
8
|
+
background: color-mix(in srgb, var(--background, #09090b) 68%, transparent);
|
|
9
|
+
backdrop-filter: blur(10px);
|
|
10
|
+
}
|
|
11
|
+
.agentsam-tool-permission-card {
|
|
12
|
+
width: min(640px, calc(100vw - 32px));
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
border: 1px solid color-mix(in srgb, var(--border, #3f3f46) 82%, transparent);
|
|
15
|
+
border-radius: 22px;
|
|
16
|
+
background: color-mix(in srgb, var(--card, #18181b) 97%, black);
|
|
17
|
+
color: var(--card-foreground, #fafafa);
|
|
18
|
+
box-shadow: 0 28px 90px rgba(0, 0, 0, .45);
|
|
19
|
+
}
|
|
20
|
+
.agentsam-tool-permission-header {
|
|
21
|
+
display: flex;
|
|
22
|
+
gap: 14px;
|
|
23
|
+
align-items: flex-start;
|
|
24
|
+
padding: 22px 22px 18px;
|
|
25
|
+
border-bottom: 1px solid var(--border, #3f3f46);
|
|
26
|
+
}
|
|
27
|
+
.agentsam-tool-permission-mark {
|
|
28
|
+
display: grid;
|
|
29
|
+
place-items: center;
|
|
30
|
+
width: 38px;
|
|
31
|
+
height: 38px;
|
|
32
|
+
flex: 0 0 auto;
|
|
33
|
+
border: 1px solid var(--border, #3f3f46);
|
|
34
|
+
border-radius: 11px;
|
|
35
|
+
background: var(--background, #09090b);
|
|
36
|
+
font-size: 11px;
|
|
37
|
+
font-weight: 700;
|
|
38
|
+
letter-spacing: .08em;
|
|
39
|
+
}
|
|
40
|
+
.agentsam-tool-permission-header h2 {
|
|
41
|
+
margin: 0;
|
|
42
|
+
font-size: 16px;
|
|
43
|
+
font-weight: 650;
|
|
44
|
+
}
|
|
45
|
+
.agentsam-tool-permission-header p {
|
|
46
|
+
margin: 6px 0 0;
|
|
47
|
+
color: var(--muted-foreground, #a1a1aa);
|
|
48
|
+
font-size: 13px;
|
|
49
|
+
line-height: 1.45;
|
|
50
|
+
}
|
|
51
|
+
.agentsam-tool-permission-body {
|
|
52
|
+
display: grid;
|
|
53
|
+
gap: 16px;
|
|
54
|
+
padding: 18px 22px;
|
|
55
|
+
}
|
|
56
|
+
.agentsam-tool-permission-facts,
|
|
57
|
+
.agentsam-tool-permission-shared dl {
|
|
58
|
+
display: grid;
|
|
59
|
+
gap: 8px;
|
|
60
|
+
margin: 0;
|
|
61
|
+
}
|
|
62
|
+
.agentsam-tool-permission-facts > div,
|
|
63
|
+
.agentsam-tool-permission-shared dl > div {
|
|
64
|
+
display: grid;
|
|
65
|
+
grid-template-columns: minmax(90px, 140px) 1fr;
|
|
66
|
+
gap: 14px;
|
|
67
|
+
align-items: baseline;
|
|
68
|
+
}
|
|
69
|
+
.agentsam-tool-permission-facts dt,
|
|
70
|
+
.agentsam-tool-permission-shared dt {
|
|
71
|
+
color: var(--muted-foreground, #a1a1aa);
|
|
72
|
+
font-size: 12px;
|
|
73
|
+
}
|
|
74
|
+
.agentsam-tool-permission-facts dd,
|
|
75
|
+
.agentsam-tool-permission-shared dd {
|
|
76
|
+
min-width: 0;
|
|
77
|
+
margin: 0;
|
|
78
|
+
overflow-wrap: anywhere;
|
|
79
|
+
font-size: 13px;
|
|
80
|
+
}
|
|
81
|
+
.agentsam-tool-permission-shared { padding-top: 2px; }
|
|
82
|
+
.agentsam-tool-permission-shared h3 {
|
|
83
|
+
margin: 0 0 10px;
|
|
84
|
+
font-size: 12px;
|
|
85
|
+
font-weight: 600;
|
|
86
|
+
}
|
|
87
|
+
.agentsam-tool-permission-warning {
|
|
88
|
+
margin: 0;
|
|
89
|
+
border: 1px solid color-mix(in srgb, #f59e0b 45%, var(--border, #3f3f46));
|
|
90
|
+
border-radius: 12px;
|
|
91
|
+
padding: 10px 12px;
|
|
92
|
+
color: color-mix(in srgb, #fbbf24 72%, var(--card-foreground, #fafafa));
|
|
93
|
+
font-size: 12px;
|
|
94
|
+
line-height: 1.45;
|
|
95
|
+
}
|
|
96
|
+
.agentsam-tool-permission-actions {
|
|
97
|
+
display: flex;
|
|
98
|
+
gap: 8px;
|
|
99
|
+
align-items: center;
|
|
100
|
+
padding: 14px 16px;
|
|
101
|
+
border-top: 1px solid var(--border, #3f3f46);
|
|
102
|
+
background: color-mix(in srgb, var(--muted, #27272a) 42%, transparent);
|
|
103
|
+
}
|
|
104
|
+
.agentsam-tool-permission-actions button {
|
|
105
|
+
min-height: 36px;
|
|
106
|
+
border: 1px solid var(--border, #3f3f46);
|
|
107
|
+
border-radius: 10px;
|
|
108
|
+
padding: 0 13px;
|
|
109
|
+
background: var(--card, #18181b);
|
|
110
|
+
color: inherit;
|
|
111
|
+
font: inherit;
|
|
112
|
+
font-size: 12px;
|
|
113
|
+
cursor: pointer;
|
|
114
|
+
}
|
|
115
|
+
.agentsam-tool-permission-actions button:disabled {
|
|
116
|
+
cursor: wait;
|
|
117
|
+
opacity: .55;
|
|
118
|
+
}
|
|
119
|
+
.agentsam-tool-permission-actions button:hover:not(:disabled) {
|
|
120
|
+
background: var(--muted, #27272a);
|
|
121
|
+
}
|
|
122
|
+
.agentsam-tool-permission-actions .agentsam-tool-permission-primary {
|
|
123
|
+
border-color: color-mix(in srgb, var(--primary, #fafafa) 48%, var(--border, #3f3f46));
|
|
124
|
+
background: var(--primary, #fafafa);
|
|
125
|
+
color: var(--primary-foreground, #18181b);
|
|
126
|
+
}
|
|
127
|
+
.agentsam-tool-permission-spacer { flex: 1; }
|
|
128
|
+
@media (max-width: 640px) {
|
|
129
|
+
.agentsam-tool-permission-overlay { padding: 12px; align-items: end; }
|
|
130
|
+
.agentsam-tool-permission-card { width: 100%; border-radius: 18px; }
|
|
131
|
+
.agentsam-tool-permission-actions { flex-wrap: wrap; }
|
|
132
|
+
.agentsam-tool-permission-spacer { display: none; }
|
|
133
|
+
.agentsam-tool-permission-actions button { flex: 1 1 auto; }
|
|
134
|
+
}
|
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inneranimalmedia/agentsam-connector-cloudflare",
|
|
3
|
-
"version": "
|
|
4
|
-
"private": true,
|
|
3
|
+
"version": "2.6.7",
|
|
5
4
|
"type": "module",
|
|
6
5
|
"main": "./src/index.js",
|
|
7
6
|
"exports": {
|
|
8
7
|
".": "./src/index.js",
|
|
9
8
|
"./capabilities": "./src/capabilities.js",
|
|
10
9
|
"./api-client": "./src/api-client.js"
|
|
11
|
-
}
|
|
10
|
+
},
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/SamPrimeaux/agentsam-sdk.git",
|
|
17
|
+
"directory": "packages/connectors/cloudflare"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"src"
|
|
21
|
+
],
|
|
22
|
+
"description": "Portable Cloudflare capability connector for AgentSam applications and SDK consumers.",
|
|
23
|
+
"license": "MIT"
|
|
12
24
|
}
|
|
@@ -135,15 +135,16 @@ export class CloudflareApiClient {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
const headers = {
|
|
138
|
-
Authorization: `Bearer ${this.apiToken}`,
|
|
139
138
|
Accept: 'application/json',
|
|
139
|
+
...(opts.headers || {}),
|
|
140
|
+
Authorization: `Bearer ${this.apiToken}`,
|
|
140
141
|
};
|
|
141
142
|
let body;
|
|
142
143
|
if (opts.body != null && method !== 'GET' && method !== 'HEAD') {
|
|
143
144
|
if (opts.body instanceof FormData || typeof opts.body === 'string' || Buffer.isBuffer(opts.body)) {
|
|
144
145
|
body = opts.body;
|
|
145
146
|
} else {
|
|
146
|
-
headers['Content-Type'] = 'application/json';
|
|
147
|
+
if (!headers['Content-Type'] && !headers['content-type']) headers['Content-Type'] = 'application/json';
|
|
147
148
|
body = JSON.stringify(opts.body);
|
|
148
149
|
}
|
|
149
150
|
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { createCloudflareApiClient } from '../api-client.js';
|
|
2
|
+
|
|
3
|
+
export const VECTORIZE_CAPABILITY_ID = 'cloudflare.vectorize';
|
|
4
|
+
|
|
5
|
+
const clean = value => String(value || '').trim();
|
|
6
|
+
|
|
7
|
+
function assertIndex(index) {
|
|
8
|
+
const value = clean(index);
|
|
9
|
+
if (!value) throw new Error('cloudflare_vectorize_index_required');
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function normalizeVector(record = {}) {
|
|
14
|
+
const id = clean(record.id);
|
|
15
|
+
const values = Array.isArray(record.values) ? record.values : record.vector;
|
|
16
|
+
if (!id) throw new Error('cloudflare_vectorize_vector_id_required');
|
|
17
|
+
if (!Array.isArray(values) || !values.length || values.some(value => typeof value !== 'number' || !Number.isFinite(value))) {
|
|
18
|
+
throw new Error('cloudflare_vectorize_vector_values_required');
|
|
19
|
+
}
|
|
20
|
+
const vector = { id, values };
|
|
21
|
+
if (record.namespace != null) vector.namespace = record.namespace;
|
|
22
|
+
if (record.metadata != null) vector.metadata = record.metadata;
|
|
23
|
+
return vector;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function workerBinding(binding, context = {}) {
|
|
27
|
+
if (context.backend && typeof context.backend.query === 'function' && typeof context.backend.upsert === 'function') return context.backend;
|
|
28
|
+
if (context.workerBinding && typeof context.workerBinding.query === 'function' && typeof context.workerBinding.upsert === 'function') return context.workerBinding;
|
|
29
|
+
return context.env?.[binding] || null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async function apiClient(context = {}) {
|
|
33
|
+
if (context.apiClient) return context.apiClient;
|
|
34
|
+
return createCloudflareApiClient({
|
|
35
|
+
capabilityId: VECTORIZE_CAPABILITY_ID,
|
|
36
|
+
env: context.env || process.env,
|
|
37
|
+
ownerId: context.ownerId || context.owner_id || '',
|
|
38
|
+
explicitAccountId: context.accountId || context.account_id || '',
|
|
39
|
+
apiToken: context.apiToken || '',
|
|
40
|
+
authMode: context.authMode,
|
|
41
|
+
fetchImpl: context.fetchImpl,
|
|
42
|
+
decryptUserOauthToken: context.decryptUserOauthToken,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function indexPath(client, index, operation = '') {
|
|
47
|
+
const suffix = `/vectorize/v2/indexes/${encodeURIComponent(assertIndex(index))}${operation ? `/${operation}` : ''}`;
|
|
48
|
+
return client.accountPath(suffix);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export async function vectorizeUpsert({ binding, index, records, context = {} } = {}) {
|
|
52
|
+
const vectors = (records || []).map(normalizeVector);
|
|
53
|
+
const worker = workerBinding(binding, context);
|
|
54
|
+
if (worker) return { transport: 'worker_binding', result: await worker.upsert(vectors) };
|
|
55
|
+
const client = await apiClient(context);
|
|
56
|
+
const ndjson = vectors.map(row => JSON.stringify(row)).join('\n') + (vectors.length ? '\n' : '');
|
|
57
|
+
const result = await client.request('POST', indexPath(client, index, 'upsert'), {
|
|
58
|
+
capabilityId: VECTORIZE_CAPABILITY_ID,
|
|
59
|
+
operation: 'vectorize.upsert',
|
|
60
|
+
headers: { 'Content-Type': 'application/x-ndjson' },
|
|
61
|
+
body: ndjson,
|
|
62
|
+
});
|
|
63
|
+
return { transport: 'cloudflare_api', result: result.result, auth: result.auth };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export async function vectorizeQuery({ binding, index, vector, options = {}, context = {} } = {}) {
|
|
67
|
+
if (!Array.isArray(vector) || !vector.length) throw new Error('cloudflare_vectorize_query_vector_required');
|
|
68
|
+
const worker = workerBinding(binding, context);
|
|
69
|
+
if (worker) return { transport: 'worker_binding', result: await worker.query(vector, options) };
|
|
70
|
+
const client = await apiClient(context);
|
|
71
|
+
const result = await client.request('POST', indexPath(client, index, 'query'), {
|
|
72
|
+
capabilityId: VECTORIZE_CAPABILITY_ID,
|
|
73
|
+
operation: 'vectorize.query',
|
|
74
|
+
body: { vector, ...options },
|
|
75
|
+
});
|
|
76
|
+
return { transport: 'cloudflare_api', result: result.result, auth: result.auth };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export async function vectorizeDelete({ binding, index, ids, context = {} } = {}) {
|
|
80
|
+
const normalizedIds = (ids || []).map(clean).filter(Boolean);
|
|
81
|
+
const worker = workerBinding(binding, context);
|
|
82
|
+
if (worker) {
|
|
83
|
+
if (typeof worker.deleteByIds !== 'function') throw new Error('cloudflare_vectorize_worker_delete_unavailable');
|
|
84
|
+
return { transport: 'worker_binding', result: await worker.deleteByIds(normalizedIds) };
|
|
85
|
+
}
|
|
86
|
+
const client = await apiClient(context);
|
|
87
|
+
const result = await client.request('POST', indexPath(client, index, 'delete_by_ids'), {
|
|
88
|
+
capabilityId: VECTORIZE_CAPABILITY_ID,
|
|
89
|
+
operation: 'vectorize.delete_by_ids',
|
|
90
|
+
body: { ids: normalizedIds },
|
|
91
|
+
});
|
|
92
|
+
return { transport: 'cloudflare_api', result: result.result, auth: result.auth };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export async function vectorizeGetByIds({ binding, index, ids, context = {} } = {}) {
|
|
96
|
+
const normalizedIds = (ids || []).map(clean).filter(Boolean);
|
|
97
|
+
const worker = workerBinding(binding, context);
|
|
98
|
+
if (worker) {
|
|
99
|
+
if (typeof worker.getByIds !== 'function') throw new Error('cloudflare_vectorize_worker_get_by_ids_unavailable');
|
|
100
|
+
return { transport: 'worker_binding', result: await worker.getByIds(normalizedIds) };
|
|
101
|
+
}
|
|
102
|
+
const client = await apiClient(context);
|
|
103
|
+
const result = await client.request('POST', indexPath(client, index, 'get_by_ids'), {
|
|
104
|
+
capabilityId: VECTORIZE_CAPABILITY_ID,
|
|
105
|
+
operation: 'vectorize.get_by_ids',
|
|
106
|
+
body: { ids: normalizedIds },
|
|
107
|
+
});
|
|
108
|
+
return { transport: 'cloudflare_api', result: result.result, auth: result.auth };
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export async function vectorizeHealth({ binding, index, context = {} } = {}) {
|
|
112
|
+
const worker = workerBinding(binding, context);
|
|
113
|
+
if (worker) {
|
|
114
|
+
if (typeof worker.describe !== 'function') return { operational: true, transport: 'worker_binding', detail: null };
|
|
115
|
+
return { operational: true, transport: 'worker_binding', detail: await worker.describe() };
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
const client = await apiClient(context);
|
|
119
|
+
const result = await client.request('GET', indexPath(client, index, 'info'), {
|
|
120
|
+
capabilityId: VECTORIZE_CAPABILITY_ID,
|
|
121
|
+
operation: 'vectorize.info',
|
|
122
|
+
});
|
|
123
|
+
return { operational: true, transport: 'cloudflare_api', detail: result.result, auth: result.auth };
|
|
124
|
+
} catch (error) {
|
|
125
|
+
return { operational: false, transport: 'cloudflare_api', error: error?.code || error?.message || String(error) };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -64,6 +64,7 @@ export * as keyless from './families/keyless.js';
|
|
|
64
64
|
export * as tokenValidation from './families/token-validation.js';
|
|
65
65
|
export * as pages from './families/pages.js';
|
|
66
66
|
export * as snippets from './families/snippets.js';
|
|
67
|
+
export * as vectorize from './families/vectorize.js';
|
|
67
68
|
|
|
68
69
|
import { scopesForCapabilities as _scopesForCapabilities, scopesForFeaturePacks as _scopesForFeaturePacks } from './capabilities.js';
|
|
69
70
|
import { CLOUDFLARE_ALL_SCOPES as _CLOUDFLARE_ALL_SCOPES, isKnownCloudflareScope } from './scope-catalog.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# @inneranimalmedia/heuristic
|
|
1
|
+
# @inneranimalmedia/theme-heuristic
|
|
2
2
|
|
|
3
3
|
Stock AgentSam CMS storefront shell theme. Exports a deterministic theme contract consumed by CMS presets and `theme.storefront.shell`.
|
|
4
4
|
|
|
5
5
|
```js
|
|
6
|
-
import { createStorefrontShellTheme } from "@inneranimalmedia/heuristic
|
|
6
|
+
import { createStorefrontShellTheme } from "@inneranimalmedia/theme-heuristic";
|
|
7
7
|
|
|
8
8
|
const theme = createStorefrontShellTheme();
|
|
9
9
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@inneranimalmedia/heuristic
|
|
3
|
-
"version": "
|
|
2
|
+
"name": "@inneranimalmedia/theme-heuristic",
|
|
3
|
+
"version": "2.6.7",
|
|
4
4
|
"description": "Stock AgentSam CMS storefront shell theme contract (heuristic-theme).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.js",
|
|
@@ -21,5 +21,10 @@
|
|
|
21
21
|
"publishConfig": {
|
|
22
22
|
"access": "public"
|
|
23
23
|
},
|
|
24
|
-
"license": "MIT"
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/SamPrimeaux/agentsam-sdk.git",
|
|
28
|
+
"directory": "packages/heuristic-theme"
|
|
29
|
+
}
|
|
25
30
|
}
|
|
@@ -14,11 +14,11 @@ export function createHeuristicThemeProductRow({ accountId, repositoryId = null
|
|
|
14
14
|
status: "wired",
|
|
15
15
|
repository_id: repositoryId,
|
|
16
16
|
canonical_path: "packages/heuristic-theme",
|
|
17
|
-
package_name: "@inneranimalmedia/heuristic
|
|
17
|
+
package_name: "@inneranimalmedia/theme-heuristic",
|
|
18
18
|
metadata: {
|
|
19
19
|
origin: "gallery_mount",
|
|
20
20
|
normalization_state: "wired",
|
|
21
|
-
package: "@inneranimalmedia/heuristic
|
|
21
|
+
package: "@inneranimalmedia/theme-heuristic",
|
|
22
22
|
preview_kind: "live",
|
|
23
23
|
capabilities: ["theme.storefront.shell"],
|
|
24
24
|
app_manifest: null,
|
|
@@ -32,7 +32,7 @@ export function createStorefrontShellTheme() {
|
|
|
32
32
|
{ type: "footer", label: "Footer" },
|
|
33
33
|
],
|
|
34
34
|
metadata: {
|
|
35
|
-
package: "@inneranimalmedia/heuristic
|
|
35
|
+
package: "@inneranimalmedia/theme-heuristic",
|
|
36
36
|
capability: "theme.storefront.shell",
|
|
37
37
|
deterministic: true,
|
|
38
38
|
demoSite: "demo",
|
|
@@ -10,7 +10,7 @@ test("createStorefrontShellTheme returns stable stock contract", () => {
|
|
|
10
10
|
assert.ok(theme.surfaces.includes("cms.editor"));
|
|
11
11
|
assert.ok(theme.slots.shell.includes("header"));
|
|
12
12
|
assert.equal(theme.tokens["--color-accent"], "#1e6a6f");
|
|
13
|
-
assert.equal(theme.metadata.package, "@inneranimalmedia/heuristic
|
|
13
|
+
assert.equal(theme.metadata.package, "@inneranimalmedia/theme-heuristic");
|
|
14
14
|
assert.deepEqual(createStorefrontShellTheme(), theme);
|
|
15
15
|
});
|
|
16
16
|
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
"providers": [
|
|
6
6
|
{
|
|
7
7
|
"id": "inneranimalmedia",
|
|
8
|
-
"aliases": [
|
|
8
|
+
"aliases": [
|
|
9
|
+
"iam"
|
|
10
|
+
],
|
|
9
11
|
"oauth_provider_key": "iam",
|
|
10
12
|
"kind": "oidc",
|
|
11
13
|
"status": "ready",
|
|
@@ -40,7 +42,9 @@
|
|
|
40
42
|
},
|
|
41
43
|
{
|
|
42
44
|
"id": "google_desktop",
|
|
43
|
-
"aliases": [
|
|
45
|
+
"aliases": [
|
|
46
|
+
"google-desktop"
|
|
47
|
+
],
|
|
44
48
|
"kind": "oauth",
|
|
45
49
|
"status": "ready",
|
|
46
50
|
"implementation": "src/providers/google",
|
|
@@ -52,10 +56,8 @@
|
|
|
52
56
|
"required_configuration": [
|
|
53
57
|
"GOOGLE_DESKTOP_CLIENT_ID"
|
|
54
58
|
],
|
|
55
|
-
"optional_configuration": [
|
|
56
|
-
|
|
57
|
-
],
|
|
58
|
-
"notes": "Desktop/public PKCE client (Console type Desktop app — no secret). Worker brokers POST /api/oauth/google/desktop-exchange for loopback redirects. Optional GOOGLE_DESKTOP_CLIENT_SECRET only if the client id was mis-typed as Web."
|
|
59
|
+
"optional_configuration": [],
|
|
60
|
+
"notes": "Desktop/public PKCE client (Console type Desktop app). Uses system browser + loopback redirect and no embedded client secret."
|
|
59
61
|
},
|
|
60
62
|
{
|
|
61
63
|
"id": "github",
|
|
@@ -81,7 +83,7 @@
|
|
|
81
83
|
"identity.oauth.authorize",
|
|
82
84
|
"identity.profile.resolve"
|
|
83
85
|
],
|
|
84
|
-
"notes": "Contract + authorize URL only
|
|
86
|
+
"notes": "Contract + authorize URL only \u2014 exchange not implemented."
|
|
85
87
|
},
|
|
86
88
|
{
|
|
87
89
|
"id": "email",
|
|
@@ -111,6 +113,24 @@
|
|
|
111
113
|
"CLOUDFLARE_OAUTH_CLIENT_SECRET"
|
|
112
114
|
],
|
|
113
115
|
"notes": "Cloudflare sign-in (same Worker secrets as the Cloudflare resource connector). Client secret optional for PKCE-only clients (Token Authentication Method = None)."
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "chatgpt",
|
|
119
|
+
"aliases": [
|
|
120
|
+
"openai",
|
|
121
|
+
"chatgpt-hosted"
|
|
122
|
+
],
|
|
123
|
+
"kind": "hosted_headers",
|
|
124
|
+
"status": "ready",
|
|
125
|
+
"registered": true,
|
|
126
|
+
"implementation": "src/providers/chatgpt",
|
|
127
|
+
"capabilities": [
|
|
128
|
+
"identity.hosted.headers",
|
|
129
|
+
"identity.profile.resolve",
|
|
130
|
+
"cms.auth_host"
|
|
131
|
+
],
|
|
132
|
+
"required_configuration": [],
|
|
133
|
+
"notes": "ChatGPT / OpenAI Apps SDK hosted identity. Reads oai-authenticated-* request headers and normalizes to NormalizedExternalIdentity (provider=chatgpt). Not classic OAuth client credentials — use createChatGptCmsAuthHost for /cms protection."
|
|
114
134
|
}
|
|
115
135
|
]
|
|
116
136
|
}
|
|
@@ -20,14 +20,14 @@ identity.login(request); // alpha: throws until Identity Service adapter is wi
|
|
|
20
20
|
identity.session.fromRequest(request); // alpha: throws until adapter is wired
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
**Alpha scope:** contracts, D1 adapter, Worker router, `agentsam identity init` scaffold (`app/frontend` + `backend` + migrations), and `agentsam identity preview`. Default OAuth: minted `IAM_CLIENT_ID` + `IAM_CLIENT_SECRET`. BYOK options: Google web, Google Desktop (`GOOGLE_DESKTOP_CLIENT_ID`), GitHub, Cloudflare (`CLOUDFLARE_OAUTH_CLIENT_*`). **Account SSOT:** `accounts` (not `account_identities` — that table is IdP linkage only).
|
|
23
|
+
**Alpha scope:** contracts, D1 adapter, Worker router, `agentsam identity init` scaffold (`app/frontend` + `backend` + migrations), and `agentsam identity preview`. Default OAuth: minted `IAM_CLIENT_ID` + `IAM_CLIENT_SECRET`. BYOK options: Google web, Google Desktop (`GOOGLE_DESKTOP_CLIENT_ID`), GitHub, Cloudflare (`CLOUDFLARE_OAUTH_CLIENT_*`). **Stock CMS sign-in picker:** Cloudflare · Google · Inner Animal Media · ChatGPT (`hosted_headers` via Apps SDK). **Account SSOT:** `accounts` (not `account_identities` — that table is IdP linkage only).
|
|
24
24
|
|
|
25
25
|
## Layout
|
|
26
26
|
|
|
27
27
|
```
|
|
28
28
|
src/
|
|
29
29
|
core/ identity · sessions · accounts · recovery
|
|
30
|
-
providers/ google · github · gcp · email
|
|
30
|
+
providers/ google · github · gcp · email · iam · cloudflare · chatgpt
|
|
31
31
|
oauth/ authorize/callback (extract from IAM — next sprint)
|
|
32
32
|
adapters/ inneranimalmedia · cloudflare-d1
|
|
33
33
|
contracts/
|
|
@@ -1,32 +1,35 @@
|
|
|
1
|
-
# Identity schema mapping — portable ↔ Cloudflare D1
|
|
1
|
+
# Identity schema mapping — portable ↔ Cloudflare D1 (IAM compat)
|
|
2
2
|
|
|
3
3
|
Portable SQLite (`packages/identity/migrations/sqlite/`) is the product schema.
|
|
4
|
-
The
|
|
4
|
+
The IAM-compat adapter maps existing hosted table names without requiring a big-bang rename.
|
|
5
5
|
|
|
6
|
-
| Portable (SQLite) | Hosted D1 (
|
|
6
|
+
| Portable (SQLite / portable D1) | Hosted D1 (IAM compat) | Notes |
|
|
7
7
|
|---|---|---|
|
|
8
|
-
| `identity_users` / account plane | **`accounts`** | **Account SSOT** — row of record |
|
|
9
|
-
|
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
12
|
-
| `
|
|
13
|
-
| `
|
|
14
|
-
| `
|
|
8
|
+
| `identity_users` / account plane | **`accounts`** + `auth_users` | **Account SSOT** — row of record |
|
|
9
|
+
| `identity_external_accounts` | `account_identities` | IdP linkage only |
|
|
10
|
+
| `identity_sessions` (+ `type`) | `auth_sessions` (+ `type`) | browser / desktop |
|
|
11
|
+
| `identity_auth_events` | `auth_event_log` | Same semantics |
|
|
12
|
+
| `identity_oauth_transactions` (+ native cols) | `identity_oauth_states` | Requires `app_id NOT NULL`; native cols optional |
|
|
13
|
+
| `identity_native_handoffs` | `identity_native_handoffs` | Single-use desktop pickup |
|
|
14
|
+
| `identity_companies` | `company` | Branding / host resolution |
|
|
15
|
+
| `identity_provider_connections` | `identity_provider_connections` (or connector tables) | `credential_ref` only — never raw secrets |
|
|
15
16
|
| `identity_app_registry` | cache of `agentsam.app.json` | Disk manifests remain SSOT |
|
|
16
17
|
| `identity_route_registry` | projection cache | Disk manifests remain SSOT |
|
|
17
18
|
| `identity_oauth_clients` … | optional `identity.oauth-server` pack | Only if product is an AS |
|
|
18
19
|
|
|
20
|
+
Password recovery is **not** a portable core table. It uses `createPasswordResetService` with an injected `{get,put,delete}` store. Optional `identity.recovery` pack may exist later.
|
|
21
|
+
|
|
19
22
|
## Schema version
|
|
20
23
|
|
|
21
|
-
|
|
22
|
-
`PRAGMA`/meta row. Missing `app_id` on OAuth transactions is an
|
|
23
|
-
`IdentitySchemaError('IDENTITY_SCHEMA_MIGRATION_REQUIRED')`, not a soft
|
|
24
|
-
downgrade.
|
|
24
|
+
Portable adapters read `identity_schema_meta.schema_version`. Lane 1 requires version **2** (after `005_identity_company_native.sql`). Missing `app_id` on OAuth transactions is an `IdentitySchemaError`, not a soft downgrade.
|
|
25
25
|
|
|
26
26
|
## Packs
|
|
27
27
|
|
|
28
28
|
| Pack | Apply when |
|
|
29
29
|
|---|---|
|
|
30
|
-
| `identity.core` | Always (local + hosted) |
|
|
30
|
+
| `identity.core` | Always (local + hosted portable) |
|
|
31
31
|
| `identity.oauth-client` | Signing into external IdPs |
|
|
32
32
|
| `identity.oauth-server` | Product issues its own codes/tokens |
|
|
33
|
+
|
|
34
|
+
Family manifest: `packages/identity/schema/agentsam.identity/manifest.json`
|
|
35
|
+
Generic contract: `protocol/database/agentsam.schema-pack.v1.schema.json`
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
|
|
5
|
+
const HERE = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
|
|
7
|
+
/** Package-owned portable SQL SSOT (resolves inside installed npm package). */
|
|
8
|
+
export const PORTABLE_IDENTITY_MIGRATIONS_DIR = path.resolve(HERE, 'sqlite');
|
|
9
|
+
|
|
10
|
+
/** @deprecated Prefer PORTABLE_IDENTITY_MIGRATIONS_DIR */
|
|
11
|
+
export const SQLITE_MIGRATIONS_DIR = PORTABLE_IDENTITY_MIGRATIONS_DIR;
|
|
12
|
+
|
|
13
|
+
export const IDENTITY_SCHEMA_PACK_MANIFEST_PATH = path.resolve(
|
|
14
|
+
HERE,
|
|
15
|
+
'../schema/agentsam.identity/manifest.json',
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Resolve the agentsam.identity pack-family manifest from the installed package.
|
|
20
|
+
* @returns {{ manifest: object, manifestPath: string, sqlDir: string }}
|
|
21
|
+
*/
|
|
22
|
+
export function resolveIdentitySchemaPack() {
|
|
23
|
+
const manifestPath = IDENTITY_SCHEMA_PACK_MANIFEST_PATH;
|
|
24
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
|
|
25
|
+
return {
|
|
26
|
+
manifest,
|
|
27
|
+
manifestPath,
|
|
28
|
+
sqlDir: PORTABLE_IDENTITY_MIGRATIONS_DIR,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function listPortableMigrationFiles(opts = {}) {
|
|
33
|
+
const files = [
|
|
34
|
+
'001_identity_core.sql',
|
|
35
|
+
'002_identity_oauth_client.sql',
|
|
36
|
+
'005_identity_company_native.sql',
|
|
37
|
+
];
|
|
38
|
+
if (opts.includeOAuthServer) {
|
|
39
|
+
files.push('003_identity_oauth_server.sql');
|
|
40
|
+
files.push('004_identity_oauth_consent_catalog.sql');
|
|
41
|
+
}
|
|
42
|
+
return files;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function isIgnorableMigrationError(err) {
|
|
46
|
+
const msg = String(err?.message || err || '').toLowerCase();
|
|
47
|
+
return (
|
|
48
|
+
msg.includes('duplicate column')
|
|
49
|
+
|| msg.includes('already exists')
|
|
50
|
+
|| msg.includes('duplicate column name')
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async function runSql(db, sql) {
|
|
55
|
+
if (typeof db.exec === 'function') {
|
|
56
|
+
try {
|
|
57
|
+
db.exec(sql);
|
|
58
|
+
return;
|
|
59
|
+
} catch (err) {
|
|
60
|
+
// Multi-statement exec may fail mid-file on duplicate ALTER; fall through to statements.
|
|
61
|
+
if (!isIgnorableMigrationError(err) && !/alter table/i.test(sql)) throw err;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const stripped = sql.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
65
|
+
const statements = stripped
|
|
66
|
+
.split(';')
|
|
67
|
+
.map((s) => s.replace(/--[^\n]*/g, '').trim())
|
|
68
|
+
.filter(Boolean);
|
|
69
|
+
for (const statement of statements) {
|
|
70
|
+
try {
|
|
71
|
+
if (typeof db.exec === 'function' && !db.prepare) {
|
|
72
|
+
db.exec(statement);
|
|
73
|
+
} else {
|
|
74
|
+
await db.prepare(statement).run();
|
|
75
|
+
}
|
|
76
|
+
} catch (err) {
|
|
77
|
+
if (isIgnorableMigrationError(err)) continue;
|
|
78
|
+
throw err;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Apply portable agentsam.identity SQL pack to a SQLite or D1-shaped target.
|
|
85
|
+
* Same SQL sources for both; executor differs by driver API.
|
|
86
|
+
*
|
|
87
|
+
* @param {{ prepare?: Function, exec?: Function }} target
|
|
88
|
+
* @param {{ includeOAuthServer?: boolean }} [opts]
|
|
89
|
+
*/
|
|
90
|
+
export async function applyPortableIdentityMigrations(target, opts = {}) {
|
|
91
|
+
if (!target || (typeof target.exec !== 'function' && typeof target.prepare !== 'function')) {
|
|
92
|
+
throw new Error('applyPortableIdentityMigrations_requires_db_target');
|
|
93
|
+
}
|
|
94
|
+
const files = listPortableMigrationFiles(opts);
|
|
95
|
+
for (const file of files) {
|
|
96
|
+
const sqlPath = path.join(PORTABLE_IDENTITY_MIGRATIONS_DIR, file);
|
|
97
|
+
const sql = fs.readFileSync(sqlPath, 'utf8');
|
|
98
|
+
await runSql(target, sql);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Stable compatibility alias — same portable pack, same sources.
|
|
104
|
+
* @param {{ prepare?: Function, exec?: Function }} db
|
|
105
|
+
* @param {{ includeOAuthServer?: boolean }} [opts]
|
|
106
|
+
*/
|
|
107
|
+
export async function applySqliteIdentityMigrations(db, opts = {}) {
|
|
108
|
+
return applyPortableIdentityMigrations(db, opts);
|
|
109
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
-- identity.oauth-server consent catalog.
|
|
2
|
-
-- Issuer branding remains owned by
|
|
2
|
+
-- Issuer branding remains owned by portable identity_companies (identity.core).
|
|
3
3
|
|
|
4
4
|
INSERT OR IGNORE INTO identity_schema_meta (key, value)
|
|
5
5
|
VALUES ('pack_oauth_consent_catalog', '1');
|