@inneranimalmedia/agentsam-sdk 2.6.4 → 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.
Files changed (699) hide show
  1. package/AGENTSAM.md +40 -0
  2. package/README.md +15 -9
  3. package/apps/README.md +5 -0
  4. package/apps/cad-creator/README.md +4 -4
  5. package/apps/cad-creator/shared/cad/package.json +1 -1
  6. package/apps/client-cms-editor/AGENTS.md +17 -0
  7. package/apps/client-cms-editor/IMPORT_PROVENANCE.json +8 -0
  8. package/apps/client-cms-editor/README.md +100 -0
  9. package/apps/client-cms-editor/agentsam.app.json +74 -0
  10. package/apps/client-cms-editor/backend/README.md +5 -0
  11. package/apps/client-cms-editor/backend/package.json +39 -0
  12. package/apps/client-cms-editor/backend/src/api/client.ts +233 -0
  13. package/apps/client-cms-editor/backend/src/index.ts +6 -0
  14. package/apps/client-cms-editor/backend/src/model.ts +11 -0
  15. package/apps/client-cms-editor/backend/src/preview/bridge.ts +79 -0
  16. package/apps/client-cms-editor/backend/src/preview/urls.ts +55 -0
  17. package/apps/client-cms-editor/backend/src/routing/cms-route.js +293 -0
  18. package/apps/client-cms-editor/backend/src/routing/index.js +10 -0
  19. package/apps/client-cms-editor/backend/src/storefront.ts +52 -0
  20. package/apps/client-cms-editor/backend/tsconfig.json +20 -0
  21. package/apps/client-cms-editor/backend/worker/index.js +34 -0
  22. package/apps/client-cms-editor/backend/wrangler.jsonc +11 -0
  23. package/apps/client-cms-editor/bin/agentsam-cms.js +262 -0
  24. package/apps/client-cms-editor/bin/agentsam-cms.mjs +3 -0
  25. package/apps/client-cms-editor/frontend/index.html +12 -0
  26. package/apps/client-cms-editor/frontend/package.json +42 -0
  27. package/apps/client-cms-editor/frontend/src/AgentSamDrawer.tsx +156 -0
  28. package/apps/client-cms-editor/frontend/src/CmsAgentSurface.tsx +36 -0
  29. package/apps/client-cms-editor/frontend/src/adapters/heuristic.ts +29 -0
  30. package/apps/client-cms-editor/frontend/src/adapters/http.ts +628 -0
  31. package/apps/client-cms-editor/frontend/src/adapters/memory.ts +510 -0
  32. package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +213 -0
  33. package/apps/client-cms-editor/frontend/src/editor/CmsEditorProvider.tsx +20 -0
  34. package/apps/client-cms-editor/frontend/src/editor/canvas/PreviewCanvas.tsx +53 -0
  35. package/apps/client-cms-editor/frontend/src/editor/legacy/CmsEditorPrototype.tsx +1374 -0
  36. package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +218 -0
  37. package/apps/client-cms-editor/frontend/src/env.d.ts +14 -0
  38. package/apps/client-cms-editor/frontend/src/index.ts +22 -0
  39. package/apps/client-cms-editor/frontend/src/lib/agent-host.ts +24 -0
  40. package/apps/client-cms-editor/frontend/src/lib/content-safety.ts +63 -0
  41. package/apps/client-cms-editor/frontend/src/main.tsx +91 -0
  42. package/apps/client-cms-editor/frontend/src/mount.tsx +113 -0
  43. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +214 -0
  44. package/apps/client-cms-editor/frontend/src/styles/cmsShell.css +1739 -0
  45. package/apps/client-cms-editor/frontend/src/styles/studio.css +158 -0
  46. package/apps/client-cms-editor/frontend/src/surfaces/CmsDashboard.tsx +313 -0
  47. package/apps/client-cms-editor/frontend/src/surfaces/CmsGuidedChatHero.tsx +121 -0
  48. package/apps/client-cms-editor/frontend/src/surfaces/CmsHubPage.tsx +132 -0
  49. package/apps/client-cms-editor/frontend/src/surfaces/CmsSiteSwitcher.tsx +176 -0
  50. package/apps/client-cms-editor/frontend/src/surfaces/index.ts +5 -0
  51. package/apps/client-cms-editor/frontend/src/surfaces/types.ts +48 -0
  52. package/apps/client-cms-editor/frontend/tsconfig.json +36 -0
  53. package/apps/client-cms-editor/frontend/vite.config.ts +25 -0
  54. package/apps/client-cms-editor/package-lock.json +4671 -0
  55. package/apps/client-cms-editor/package.json +135 -0
  56. package/apps/client-cms-editor/reference/DONOR_README.md +52 -0
  57. package/apps/client-cms-editor/reference/DONOR_package-lock.json +1253 -0
  58. package/apps/client-cms-editor/reference/DONOR_tsconfig.json +15 -0
  59. package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +201 -0
  60. package/apps/client-cms-editor/reference/harvest/PROVENANCE_HISTORY.txt +10 -0
  61. package/apps/client-cms-editor/reference/harvest/README.md +8 -0
  62. package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +135 -0
  63. package/apps/client-cms-editor/reference/harvest/plans/CHATGPT-IDENTITY-HARVEST.md +83 -0
  64. package/apps/client-cms-editor/reference/harvest/plans/CMS-EDITOR-HARVEST.md +166 -0
  65. package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +196 -0
  66. package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +137 -0
  67. package/apps/client-cms-editor/reference/harvest/plans/NO-IMPLICIT-SIDE-EFFECTS.md +87 -0
  68. package/apps/client-cms-editor/reference/harvest/plans/STOREFRONT-SURFACE-MAP.md +140 -0
  69. package/apps/client-cms-editor/reference/harvest/plans/THEME-INNERANIMALS-HARVEST.md +137 -0
  70. package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +63 -0
  71. package/apps/client-cms-editor/reference/harvest/plans/harvest-manifest.json +97 -0
  72. package/apps/client-cms-editor/reference/harvest/plans/local-cms-harvest-schema.sql +328 -0
  73. package/apps/client-cms-editor/shared/cms/package.json +31 -0
  74. package/apps/client-cms-editor/shared/cms/src/adapter.ts +204 -0
  75. package/apps/client-cms-editor/shared/cms/src/agent-context.ts +37 -0
  76. package/apps/client-cms-editor/shared/cms/src/cloudflare-bindings.ts +51 -0
  77. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +90 -0
  78. package/apps/client-cms-editor/shared/cms/src/host.ts +82 -0
  79. package/apps/client-cms-editor/shared/cms/src/index.ts +9 -0
  80. package/apps/client-cms-editor/shared/cms/src/map.ts +115 -0
  81. package/apps/client-cms-editor/shared/cms/src/publication.ts +24 -0
  82. package/apps/client-cms-editor/shared/cms/src/routes.ts +11 -0
  83. package/apps/client-cms-editor/shared/cms/src/starter-pack.ts +158 -0
  84. package/apps/client-cms-editor/shared/cms/tsconfig.json +12 -0
  85. package/bin/agentsam-rapid-rust +36 -0
  86. package/contracts/source-types.v1.json +353 -0
  87. package/docs/AUTH_IDENTITY_CONTRACT.md +2 -0
  88. package/docs/CMS_CONTEXTUAL_COMPOSER.md +1 -1
  89. package/docs/MACHINE_INTELLIGENCE.md +120 -0
  90. package/docs/PRODUCT_LIFECYCLE.md +566 -0
  91. package/docs/THEME_REFINERY.md +2 -2
  92. package/docs/WINDOWS_RUNTIME_INSTALL.md +30 -0
  93. package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +188 -0
  94. package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +171 -0
  95. package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +12 -4
  96. package/docs/architecture/R2_SLUG_NAMESPACE.md +20 -0
  97. package/docs/architecture/WORK_PRODUCT_EXTRACTION.md +97 -0
  98. package/docs/brand/AGENT_SAM_ICON_GRAMMAR.md +70 -0
  99. package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +71 -0
  100. package/docs/content-studio/REVISION_GATE_2026-09-27.md +501 -0
  101. package/docs/contracts/capability-install-planner.md +67 -0
  102. package/docs/contracts/environment-vocabulary.md +195 -0
  103. package/docs/contracts/google-cloud-oauth-setup.md +199 -0
  104. package/docs/local-studio/WORKMODE_DONOR_NOTES.md +1 -1
  105. package/docs/plans/LOCAL-STUDIO-GRADUATION-2026-09-26.md +290 -0
  106. package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +394 -0
  107. package/docs/plans/LOCAL_STUDIO_DESKTOP_RELEASE_2026-09-29.md +150 -0
  108. package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +227 -0
  109. package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +221 -0
  110. package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +145 -0
  111. package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +215 -0
  112. package/docs/plugins.md +2 -2
  113. package/docs/product/AGENTSAM_PRODUCT_EXPERIENCE_STANDARD.md +280 -0
  114. package/docs/product/LOCAL_STUDIO_DESKTOP_EXPERIENCE.md +139 -0
  115. package/docs/product/README.md +8 -0
  116. package/docs/rapid-rust-wasm.md +35 -0
  117. package/migrations/d1/0016_cloudflare_oauth_user_oauth_tokens_ssot.sql +14 -0
  118. package/migrations/d1/0017_identity_native_oauth.sql +21 -0
  119. package/native/agentsam-machine/Cargo.lock +426 -0
  120. package/native/agentsam-machine/Cargo.toml +9 -0
  121. package/native/agentsam-machine/cli/Cargo.toml +14 -0
  122. package/native/agentsam-machine/cli/src/main.rs +77 -0
  123. package/native/agentsam-machine/core/Cargo.toml +15 -0
  124. package/native/agentsam-machine/core/src/assets.rs +790 -0
  125. package/native/agentsam-machine/core/src/bound.rs +298 -0
  126. package/native/agentsam-machine/core/src/enrich.rs +706 -0
  127. package/native/agentsam-machine/core/src/frontend.rs +442 -0
  128. package/native/agentsam-machine/core/src/lib.rs +1086 -0
  129. package/native/agentsam-machine/core/src/liquid.rs +528 -0
  130. package/native/agentsam-machine/core/src/source_types.rs +78 -0
  131. package/package.json +110 -21
  132. package/packages/agentsam-brand/README.md +107 -12
  133. package/packages/agentsam-brand/bin/agentsam-brand.mjs +9 -0
  134. package/packages/agentsam-brand/package.json +41 -9
  135. package/packages/agentsam-brand/src/adapters/cloudflare-images.js +453 -0
  136. package/packages/agentsam-brand/src/adapters/cloudflare-r2.js +74 -0
  137. package/packages/agentsam-brand/src/adapters/d1-registry.js +26 -0
  138. package/packages/agentsam-brand/src/adapters/filesystem.js +59 -0
  139. package/packages/agentsam-brand/src/adapters/memory.js +31 -0
  140. package/packages/agentsam-brand/src/cli/controller.js +503 -0
  141. package/packages/agentsam-brand/src/cli/wizard.js +526 -0
  142. package/packages/agentsam-brand/src/core/capabilities.js +201 -0
  143. package/packages/agentsam-brand/src/core/derivatives.js +211 -0
  144. package/packages/agentsam-brand/src/core/errors.js +12 -0
  145. package/packages/agentsam-brand/src/core/ingest.js +195 -0
  146. package/packages/agentsam-brand/src/core/inspect.js +109 -0
  147. package/packages/agentsam-brand/src/core/keys.js +83 -0
  148. package/packages/agentsam-brand/src/core/naming.js +142 -0
  149. package/packages/agentsam-brand/src/core/optimize.js +316 -0
  150. package/packages/agentsam-brand/src/core/pack.js +305 -0
  151. package/packages/agentsam-brand/src/core/plan.js +276 -0
  152. package/packages/agentsam-brand/src/core/preview.js +159 -0
  153. package/packages/agentsam-brand/src/core/processors/cloudflare.js +68 -0
  154. package/packages/agentsam-brand/src/core/processors/contract.js +203 -0
  155. package/packages/agentsam-brand/src/core/processors/index.js +148 -0
  156. package/packages/agentsam-brand/src/core/processors/native.js +82 -0
  157. package/packages/agentsam-brand/src/core/processors/sharp.js +113 -0
  158. package/packages/agentsam-brand/src/core/processors/squoosh-binary.js +195 -0
  159. package/packages/agentsam-brand/src/core/promote.js +288 -0
  160. package/packages/agentsam-brand/src/core/receipts.js +155 -0
  161. package/packages/agentsam-brand/src/core/v2/compile.js +280 -0
  162. package/packages/agentsam-brand/src/core/v2/derivatives-semantic.js +207 -0
  163. package/packages/agentsam-brand/src/core/v2/ingest-graph.js +387 -0
  164. package/packages/agentsam-brand/src/core/v2/roles.js +180 -0
  165. package/packages/agentsam-brand/src/core/v2/schema.js +209 -0
  166. package/packages/agentsam-brand/src/core/v2/templates.js +114 -0
  167. package/packages/agentsam-brand/src/index.js +193 -36
  168. package/packages/agentsam-brand/src/presets/app-icon.json +16 -0
  169. package/packages/agentsam-brand/src/presets/favicon.json +17 -0
  170. package/packages/agentsam-brand/src/presets/hero.json +12 -0
  171. package/packages/agentsam-brand/src/presets/index.js +40 -0
  172. package/packages/agentsam-brand/src/presets/logo.json +12 -0
  173. package/packages/agentsam-brand/src/presets/model.json +8 -0
  174. package/packages/agentsam-brand/src/presets/og-image.json +10 -0
  175. package/packages/agentsam-brand/src/presets/product-shot.json +11 -0
  176. package/packages/agentsam-brand/src/presets/social-image.json +10 -0
  177. package/packages/agentsam-brand/src/presets/web-image.json +10 -0
  178. package/packages/agentsam-contracts/package.json +13 -3
  179. package/packages/agentsam-contracts/src/artifacts.ts +41 -0
  180. package/packages/agentsam-contracts/src/tools.ts +22 -0
  181. package/packages/agentsam-errors/package.json +13 -3
  182. package/packages/agentsam-knowledge/package.json +18 -4
  183. package/packages/agentsam-knowledge/src/autorag/index.js +11 -4
  184. package/packages/agentsam-knowledge/src/backends/index.js +33 -1
  185. package/packages/agentsam-knowledge/src/providers/index.js +6 -4
  186. package/packages/agentsam-knowledge/src/providers/ollama-endpoint.js +31 -0
  187. package/packages/agentsam-knowledge/test/autorag.test.mjs +81 -1
  188. package/packages/agentsam-nav/package.json +26 -8
  189. package/packages/agentsam-queue-control/README.md +1 -1
  190. package/packages/agentsam-queue-control/package.json +7 -2
  191. package/packages/agentsam-rapid-rust/Cargo.lock +344 -0
  192. package/packages/agentsam-rapid-rust/Cargo.toml +18 -0
  193. package/packages/agentsam-rapid-rust/README.md +5 -0
  194. package/packages/agentsam-rapid-rust/src/main.rs +718 -0
  195. package/packages/agentsam-rapid-rust/templates/api/Cargo.toml.tmpl +18 -0
  196. package/packages/agentsam-rapid-rust/templates/api/src/lib.rs.tmpl +17 -0
  197. package/packages/agentsam-rapid-rust/templates/common/README.md.tmpl +22 -0
  198. package/packages/agentsam-rapid-rust/templates/common/package.json.tmpl +12 -0
  199. package/packages/agentsam-rapid-rust/templates/common/wrangler.toml.tmpl +6 -0
  200. package/packages/agentsam-rapid-rust/templates/crypto-auth/Cargo.toml.tmpl +21 -0
  201. package/packages/agentsam-rapid-rust/templates/crypto-auth/src/lib.rs.tmpl +32 -0
  202. package/packages/agentsam-rapid-rust/templates/data-processor/Cargo.toml.tmpl +18 -0
  203. package/packages/agentsam-rapid-rust/templates/data-processor/src/lib.rs.tmpl +41 -0
  204. package/packages/agentsam-rapid-rust/templates/shared-core/Cargo.toml.tmpl +9 -0
  205. package/packages/agentsam-rapid-rust/templates/shared-core/core/Cargo.toml.tmpl +7 -0
  206. package/packages/agentsam-rapid-rust/templates/shared-core/core/src/lib.rs.tmpl +23 -0
  207. package/packages/agentsam-rapid-rust/templates/shared-core/worker/Cargo.toml.tmpl +12 -0
  208. package/packages/agentsam-rapid-rust/templates/shared-core/worker/src/lib.rs.tmpl +16 -0
  209. package/packages/agentsam-rapid-rust/templates/shared-core/wrangler.toml.tmpl +6 -0
  210. package/packages/agentsam-repository/package.json +13 -3
  211. package/packages/agentsam-repository/src/index.js +1 -0
  212. package/packages/agentsam-repository/src/merkle/semantic.js +3 -10
  213. package/packages/agentsam-repository/src/source-types.js +93 -0
  214. package/packages/agentsam-vault/README.md +96 -0
  215. package/packages/agentsam-vault/package.json +42 -0
  216. package/packages/agentsam-vault/src/contracts/credential.d.ts +78 -0
  217. package/packages/agentsam-vault/src/contracts/credential.js +132 -0
  218. package/packages/agentsam-vault/src/crypto/aes-gcm.d.ts +30 -0
  219. package/packages/agentsam-vault/src/crypto/aes-gcm.js +107 -0
  220. package/packages/agentsam-vault/src/crypto/oauth-envelope.js +150 -0
  221. package/packages/agentsam-vault/src/index.d.ts +9 -0
  222. package/packages/agentsam-vault/src/index.js +27 -0
  223. package/packages/agentsam-vault/src/providers/registry.js +90 -0
  224. package/packages/agentsam-vault/src/runtime/resolver.js +77 -0
  225. package/packages/agentsam-workbench/README.md +24 -0
  226. package/packages/agentsam-workbench/package.json +49 -0
  227. package/packages/agentsam-workbench/src/agent/AgentPanel.tsx +41 -0
  228. package/packages/agentsam-workbench/src/agent/ArtifactCard.tsx +9 -0
  229. package/packages/agentsam-workbench/src/agent/Composer.tsx +102 -0
  230. package/packages/agentsam-workbench/src/agent/ConnectedAgentPanel.tsx +194 -0
  231. package/packages/agentsam-workbench/src/agent/ContextualComposer.tsx +788 -0
  232. package/packages/agentsam-workbench/src/agent/GoalStatusStrip.tsx +38 -0
  233. package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +86 -0
  234. package/packages/agentsam-workbench/src/agent/ModelSelect.tsx +19 -0
  235. package/packages/agentsam-workbench/src/agent/Thread.tsx +56 -0
  236. package/packages/agentsam-workbench/src/agent/ToolPermissionRequest.tsx +94 -0
  237. package/packages/agentsam-workbench/src/agent/ToolReceipt.tsx +11 -0
  238. package/packages/agentsam-workbench/src/agent/contextual-composer.css +611 -0
  239. package/packages/agentsam-workbench/src/agent/index.ts +12 -0
  240. package/packages/agentsam-workbench/src/agent/mini-agentsam.css +12 -0
  241. package/packages/agentsam-workbench/src/agent/tool-permission.css +134 -0
  242. package/packages/agentsam-workbench/src/browser/BrowserFrame.tsx +37 -0
  243. package/packages/agentsam-workbench/src/browser/index.ts +1 -0
  244. package/packages/agentsam-workbench/src/index.ts +6 -0
  245. package/packages/agentsam-workbench/src/project-control.css +160 -0
  246. package/packages/agentsam-workbench/src/projects/ProjectsSurface.tsx +131 -0
  247. package/packages/agentsam-workbench/src/projects/index.ts +1 -0
  248. package/packages/agentsam-workbench/src/shell/Breadcrumb.tsx +35 -0
  249. package/packages/agentsam-workbench/src/shell/ResizableStage.tsx +99 -0
  250. package/packages/agentsam-workbench/src/shell/SidePanel.tsx +5 -0
  251. package/packages/agentsam-workbench/src/shell/index.ts +4 -0
  252. package/packages/agentsam-workbench/src/shell/surfaceRegistry.ts +29 -0
  253. package/packages/agentsam-workbench/src/terminal/TerminalSurface.tsx +5 -0
  254. package/packages/agentsam-workbench/src/terminal/index.ts +1 -0
  255. package/packages/agentsam-workbench/src/timeline/GanttBoard.tsx +258 -0
  256. package/packages/agentsam-workbench/src/timeline/index.ts +1 -0
  257. package/packages/agentsam-workbench/tsconfig.json +13 -0
  258. package/packages/connectors/cloudflare/OAUTH_STORAGE_AUDIT.md +53 -0
  259. package/packages/connectors/cloudflare/package.json +16 -4
  260. package/packages/connectors/cloudflare/src/api-client.js +280 -0
  261. package/packages/connectors/cloudflare/src/capabilities.js +585 -0
  262. package/packages/connectors/cloudflare/src/credential.js +318 -0
  263. package/packages/connectors/cloudflare/src/families/brand-protection.js +123 -0
  264. package/packages/connectors/cloudflare/src/families/keyless.js +114 -0
  265. package/packages/connectors/cloudflare/src/families/pages.js +151 -0
  266. package/packages/connectors/cloudflare/src/families/scanner.js +123 -0
  267. package/packages/connectors/cloudflare/src/families/snippets.js +207 -0
  268. package/packages/connectors/cloudflare/src/families/tag-gateway.js +46 -0
  269. package/packages/connectors/cloudflare/src/families/tags.js +124 -0
  270. package/packages/connectors/cloudflare/src/families/token-validation.js +95 -0
  271. package/packages/connectors/cloudflare/src/families/vectorize.js +127 -0
  272. package/packages/connectors/cloudflare/src/families/workflows.js +156 -0
  273. package/packages/connectors/cloudflare/src/index.js +103 -265
  274. package/packages/connectors/cloudflare/src/oauth-persist.js +336 -0
  275. package/packages/connectors/cloudflare/src/owner.js +42 -12
  276. package/packages/connectors/cloudflare/src/permission-options.js +1064 -0
  277. package/packages/connectors/cloudflare/src/routes.js +309 -144
  278. package/packages/connectors/cloudflare/src/scope-catalog.js +345 -0
  279. package/packages/connectors/cloudflare/src/vault.js +2 -2
  280. package/packages/connectors/cloudflare/tests/capabilities.test.mjs +276 -0
  281. package/packages/connectors/cloudflare/tests/connector.test.mjs +26 -30
  282. package/packages/connectors/cloudflare/tests/oauth-persist.test.mjs +125 -0
  283. package/packages/heuristic-theme/README.md +2 -2
  284. package/packages/heuristic-theme/package.json +8 -3
  285. package/packages/heuristic-theme/src/registry.js +2 -2
  286. package/packages/heuristic-theme/src/theme.js +1 -1
  287. package/packages/heuristic-theme/test/theme.test.mjs +1 -1
  288. package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
  289. package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +44 -4
  290. package/packages/identity/.agentsam/features/oauth-login-portal/resources.json +10 -4
  291. package/packages/identity/.agentsam/features/oauth-login-portal/routes.json +20 -0
  292. package/packages/identity/README.md +2 -2
  293. package/packages/identity/backend/README.md +1 -1
  294. package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +18 -14
  295. package/packages/identity/migrations/apply-portable.js +109 -0
  296. package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +48 -0
  297. package/packages/identity/migrations/sqlite/005_identity_company_native.sql +52 -0
  298. package/packages/identity/package.json +27 -5
  299. package/packages/identity/schema/agentsam.identity/manifest.json +101 -0
  300. package/packages/identity/scripts/local-identity-bridge.mjs +190 -0
  301. package/packages/identity/scripts/preview-auth-portal.mjs +8 -8
  302. package/packages/identity/src/adapters/cloudflare-d1/index.js +8 -372
  303. package/packages/identity/src/adapters/iam-compat/index.js +540 -0
  304. package/packages/identity/src/adapters/portable-d1/index.js +18 -0
  305. package/packages/identity/src/adapters/portable-store.js +479 -0
  306. package/packages/identity/src/adapters/sqlite/index.js +13 -309
  307. package/packages/identity/src/contracts/auth-config.js +27 -8
  308. package/packages/identity/src/contracts/external-identity.js +1 -1
  309. package/packages/identity/src/contracts/identity-store.js +56 -5
  310. package/packages/identity/src/contracts/provider.js +2 -0
  311. package/packages/identity/src/contracts/sign-in-options.js +104 -0
  312. package/packages/identity/src/core/constants.js +1 -1
  313. package/packages/identity/src/core/session-policy.js +31 -0
  314. package/packages/identity/src/frontend/auth-portal/README.md +2 -1
  315. package/packages/identity/src/frontend/auth-portal/pages/login.html +7 -6
  316. package/packages/identity/src/frontend/auth-portal/pages/reset.html +6 -5
  317. package/packages/identity/src/frontend/auth-portal/pages/signup.html +6 -5
  318. package/packages/identity/src/frontend/auth-portal/shared/company-branding.js +1 -1
  319. package/packages/identity/src/frontend/auth-portal/shared/desktop-identity-bridge.js +176 -0
  320. package/packages/identity/src/index.js +44 -1
  321. package/packages/identity/src/migrations/0001_identity_core.sql +19 -2
  322. package/packages/identity/src/migrations/0003_accounts_ssot.sql +20 -0
  323. package/packages/identity/src/migrations/README.md +23 -20
  324. package/packages/identity/src/oauth/README.md +10 -5
  325. package/packages/identity/src/oauth/consent-view.js +388 -0
  326. package/packages/identity/src/oauth/credentials.js +39 -20
  327. package/packages/identity/src/oauth/google-desktop-exchange.js +341 -0
  328. package/packages/identity/src/oauth/iam-platform.js +21 -9
  329. package/packages/identity/src/oauth/native-handoff.js +136 -0
  330. package/packages/identity/src/providers/chatgpt/headers.js +65 -0
  331. package/packages/identity/src/providers/chatgpt/index.js +86 -0
  332. package/packages/identity/src/providers/chatgpt/mapper.js +43 -0
  333. package/packages/identity/src/providers/chatgpt/paths.js +45 -0
  334. package/packages/identity/src/providers/cloudflare/oauth.js +3 -4
  335. package/packages/identity/src/providers/cloudflare/profile.js +49 -14
  336. package/packages/identity/src/providers/github/oauth.js +1 -2
  337. package/packages/identity/src/providers/github/profile.js +16 -2
  338. package/packages/identity/src/providers/iam/index.js +27 -5
  339. package/packages/identity/src/providers/index.js +11 -3
  340. package/packages/identity/src/server/identity-service.js +33 -3
  341. package/packages/identity/src/server/worker-router.js +171 -88
  342. package/packages/identity/tests/auth-config.test.mjs +3 -2
  343. package/packages/identity/tests/chatgpt-provider.test.mjs +75 -0
  344. package/packages/identity/tests/google-desktop-identity-login.test.mjs +210 -0
  345. package/packages/identity/tests/identity-init-scaffold.test.mjs +17 -3
  346. package/packages/identity/tests/identity-service.test.mjs +16 -0
  347. package/packages/identity/tests/lane1-identity-store-parity.test.mjs +527 -0
  348. package/packages/identity/tests/lane1-packed-consumer.test.mjs +175 -0
  349. package/packages/identity/tests/native-oauth-handoff.test.mjs +292 -0
  350. package/packages/identity/tests/native-session-worker.test.mjs +64 -0
  351. package/packages/identity/tests/oauth-consent-view.test.mjs +106 -0
  352. package/packages/identity/tests/oauth-credentials.test.mjs +21 -8
  353. package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +58 -0
  354. package/packages/identity/tests/preview-auth-portal.test.mjs +5 -3
  355. package/packages/identity/tests/session-routes-policy.test.mjs +13 -1
  356. package/packages/identity/tests/worker-runtime-boundary.test.mjs +11 -0
  357. package/packages/providers/completeful/package.json +7 -2
  358. package/packages/runtime-protocol/src/index.js +154 -0
  359. package/packages/theme-church-site/package.json +17 -6
  360. package/packages/theme-church-site/src/harvest.json +4 -2
  361. package/packages/theme-church-site/src/index.js +7 -3
  362. package/packages/theme-church-site/test/theme.test.mjs +4 -2
  363. package/packages/theme-companions-site/package.json +17 -6
  364. package/packages/theme-companions-site/src/harvest.json +4 -2
  365. package/packages/theme-companions-site/src/index.js +7 -3
  366. package/packages/theme-companions-site/test/theme.test.mjs +4 -2
  367. package/packages/theme-floors-site/package.json +17 -6
  368. package/packages/theme-floors-site/src/harvest.json +4 -2
  369. package/packages/theme-floors-site/src/index.js +7 -3
  370. package/packages/theme-floors-site/test/theme.test.mjs +4 -2
  371. package/packages/theme-fuelnfree-site/package.json +17 -6
  372. package/packages/theme-fuelnfree-site/src/harvest.json +4 -2
  373. package/packages/theme-fuelnfree-site/src/index.js +7 -3
  374. package/packages/theme-fuelnfree-site/test/theme.test.mjs +4 -2
  375. package/packages/theme-handyman-site/package.json +17 -6
  376. package/packages/theme-handyman-site/src/harvest.json +4 -2
  377. package/packages/theme-handyman-site/src/index.js +7 -3
  378. package/packages/theme-handyman-site/test/theme.test.mjs +4 -2
  379. package/packages/theme-insurance-site/package.json +17 -6
  380. package/packages/theme-insurance-site/src/harvest.json +4 -2
  381. package/packages/theme-insurance-site/src/index.js +7 -3
  382. package/packages/theme-insurance-site/test/theme.test.mjs +4 -2
  383. package/packages/theme-scenes/README.md +164 -0
  384. package/packages/theme-scenes/package.json +54 -0
  385. package/packages/theme-scenes/src/blocks/index.js +30 -0
  386. package/packages/theme-scenes/src/contracts/index.js +286 -0
  387. package/packages/theme-scenes/src/demos/index.js +65 -0
  388. package/packages/theme-scenes/src/index.js +75 -0
  389. package/packages/theme-scenes/src/presets/index.js +263 -0
  390. package/packages/theme-scenes/src/registry.js +187 -0
  391. package/packages/theme-scenes/src/runtime/compile.js +119 -0
  392. package/packages/theme-scenes/src/scenes/index.js +146 -0
  393. package/packages/theme-scenes/src/shell/index.js +47 -0
  394. package/packages/theme-scenes/src/themes/index.js +129 -0
  395. package/packages/theme-scenes/src/visuals/index.js +41 -0
  396. package/packages/theme-scenes/test/theme-scenes.test.mjs +179 -0
  397. package/packages/theme-shinshu-site/package.json +17 -6
  398. package/packages/theme-shinshu-site/src/harvest.json +4 -2
  399. package/packages/theme-shinshu-site/src/index.js +7 -3
  400. package/packages/theme-shinshu-site/test/theme.test.mjs +4 -2
  401. package/packages/work-graph/package.json +14 -4
  402. package/packages/work-graph/src/index.js +34 -1
  403. package/packages/work-graph/src/renderers/gantt-model.js +24 -0
  404. package/packages/work-graph/test/work-graph.test.mjs +27 -7
  405. package/protocol/FILEMETA_V1.md +2 -2
  406. package/protocol/README.md +15 -7
  407. package/protocol/apps/agentsam.app.v1.schema.json +89 -7
  408. package/protocol/apps/agentsam.host-install.v1.schema.json +36 -0
  409. package/protocol/assets/README.md +9 -0
  410. package/protocol/assets/asset-record.v1.schema.json +64 -0
  411. package/protocol/capabilities/manifest.json +1 -1
  412. package/protocol/database/agentsam.schema-pack.v1.schema.json +72 -0
  413. package/protocol/presets/catalog.json +2 -2
  414. package/protocol/runtime/agentsam.runtime.v1.schema.json +75 -0
  415. package/protocol/scoring/README.md +10 -0
  416. package/protocol/scoring/scorecard.v1.schema.json +65 -0
  417. package/protocol/theme-refinery/lineage-registry.json +105 -0
  418. package/protocol/theme-refinery/product-metadata.schema.json +21 -1
  419. package/protocol/ui/icon-registry.mjs +1 -0
  420. package/registry/cms-rust-machine-20260928/installable-products.json +31 -0
  421. package/registry/cms-rust-machine-20260928/manifest.json +22 -0
  422. package/registry/cms-rust-machine-20260928/migration.sql +237 -0
  423. package/registry/cms-rust-machine-20260928/receipt.json +21 -0
  424. package/registry/cms-rust-machine-20260928/receipt.sql +27 -0
  425. package/scripts/build_rapid_rust_cli.py +83 -0
  426. package/skills/grok-auth/SKILL.md +110 -0
  427. package/skills/grok-auth/agentsam.skill.json +25 -0
  428. package/skills/grok-auth/references/grok-identity.md +64 -0
  429. package/skills/grok-auth/references/per-user-data.md +49 -0
  430. package/skills/grok-auth/references/prewired-and-env.md +54 -0
  431. package/skills/grok-auth/references/session-ui.md +133 -0
  432. package/skills/grok-auth/references/sign-in-methods.md +55 -0
  433. package/skills/grok-auth/references/wiring.md +71 -0
  434. package/skills/grok-building-games/SKILL.md +213 -0
  435. package/skills/grok-building-games/agentsam.skill.json +25 -0
  436. package/skills/grok-building-games/references/3d-libs.md +64 -0
  437. package/skills/grok-building-games/references/ai-pathfinding.md +122 -0
  438. package/skills/grok-building-games/references/audio.md +129 -0
  439. package/skills/grok-building-games/references/babylon.md +202 -0
  440. package/skills/grok-building-games/references/collision-physics.md +122 -0
  441. package/skills/grok-building-games/references/ecs-architecture.md +111 -0
  442. package/skills/grok-building-games/references/game-feel-juice.md +110 -0
  443. package/skills/grok-building-games/references/genres/board-card-chess.md +89 -0
  444. package/skills/grok-building-games/references/genres/endless-runner.md +83 -0
  445. package/skills/grok-building-games/references/genres/fps.md +105 -0
  446. package/skills/grok-building-games/references/genres/platformer-2d.md +97 -0
  447. package/skills/grok-building-games/references/genres/puzzle-match3-tetris.md +131 -0
  448. package/skills/grok-building-games/references/genres/racing-kart.md +106 -0
  449. package/skills/grok-building-games/references/genres/topdown-twin-stick.md +97 -0
  450. package/skills/grok-building-games/references/genres/tower-defense.md +84 -0
  451. package/skills/grok-building-games/references/genres/voxel-minecraft.md +89 -0
  452. package/skills/grok-building-games/references/input.md +139 -0
  453. package/skills/grok-building-games/references/phaser.md +277 -0
  454. package/skills/grok-building-games/references/procedural-generation.md +141 -0
  455. package/skills/grok-building-games/references/save-persistence.md +108 -0
  456. package/skills/grok-building-games/references/threejs-foundational.md +148 -0
  457. package/skills/grok-controls/SKILL.md +274 -0
  458. package/skills/grok-controls/agentsam.skill.json +25 -0
  459. package/skills/grok-design-ui/SKILL.md +122 -0
  460. package/skills/grok-design-ui/agentsam.skill.json +25 -0
  461. package/skills/grok-design-ui/references/animations.md +379 -0
  462. package/skills/grok-design-ui/references/performance.md +88 -0
  463. package/skills/grok-design-ui/references/refined-ui.md +384 -0
  464. package/skills/grok-design-ui/references/surfaces.md +247 -0
  465. package/skills/grok-design-ui/references/typography.md +123 -0
  466. package/skills/grok-game-animation-frames/SKILL.md +84 -0
  467. package/skills/grok-game-animation-frames/agentsam.skill.json +25 -0
  468. package/skills/grok-game-asset-core/SKILL.md +69 -0
  469. package/skills/grok-game-asset-core/agentsam.skill.json +25 -0
  470. package/skills/grok-game-character-consistency/SKILL.md +69 -0
  471. package/skills/grok-game-character-consistency/agentsam.skill.json +25 -0
  472. package/skills/grok-game-tilesets/SKILL.md +65 -0
  473. package/skills/grok-game-tilesets/agentsam.skill.json +25 -0
  474. package/skills/grok-game-ui-icons/SKILL.md +56 -0
  475. package/skills/grok-game-ui-icons/agentsam.skill.json +25 -0
  476. package/skills/grok-generate2dmap/LICENSE +21 -0
  477. package/skills/grok-generate2dmap/SKILL.md +120 -0
  478. package/skills/grok-generate2dmap/SOURCE.md +6 -0
  479. package/skills/grok-generate2dmap/agentsam.skill.json +25 -0
  480. package/skills/grok-generate2dmap/references/deliverables.md +101 -0
  481. package/skills/grok-generate2dmap/references/layered-map-contract.md +209 -0
  482. package/skills/grok-generate2dmap/references/map-strategies.md +341 -0
  483. package/skills/grok-generate2dmap/references/object-production-gate.md +24 -0
  484. package/skills/grok-generate2dmap/references/pipeline.md +149 -0
  485. package/skills/grok-generate2dmap/references/prop-pack-contract.md +174 -0
  486. package/skills/grok-generate2dmap/references/side-scroll-stages.md +29 -0
  487. package/skills/grok-generate2dmap/scripts/compose_layered_preview.py +157 -0
  488. package/skills/grok-generate2dmap/scripts/extract_prop_pack.py +369 -0
  489. package/skills/grok-generate2dsprite/LICENSE +21 -0
  490. package/skills/grok-generate2dsprite/SKILL.md +313 -0
  491. package/skills/grok-generate2dsprite/SOURCE.md +6 -0
  492. package/skills/grok-generate2dsprite/agentsam.skill.json +25 -0
  493. package/skills/grok-generate2dsprite/references/modes.md +124 -0
  494. package/skills/grok-generate2dsprite/references/prompt-rules.md +315 -0
  495. package/skills/grok-generate2dsprite/scripts/generate2dsprite.py +1031 -0
  496. package/skills/grok-generate2dsprite/scripts/make_layout_guide.py +109 -0
  497. package/skills/grok-imagine/SKILL.md +201 -0
  498. package/skills/grok-imagine/agentsam.skill.json +25 -0
  499. package/skills/grok-multiplayer-p2p/SKILL.md +111 -0
  500. package/skills/grok-multiplayer-p2p/agentsam.skill.json +25 -0
  501. package/skills/grok-multiplayer-p2p/references/react-binding.md +144 -0
  502. package/skills/grok-multiplayer-p2p/references/signaling-relay.md +269 -0
  503. package/skills/grok-neon/SKILL.md +157 -0
  504. package/skills/grok-neon/agentsam.skill.json +25 -0
  505. package/skills/grok-og/SKILL.md +102 -0
  506. package/skills/grok-og/agentsam.skill.json +25 -0
  507. package/skills/grok-og/references/brand-pass.md +53 -0
  508. package/skills/grok-og/references/custom-card.md +107 -0
  509. package/skills/grok-og/references/favicon-and-icons.md +48 -0
  510. package/skills/grok-og/references/og-type-contract.md +18 -0
  511. package/skills/grok-og/references/placeholder-card.md +21 -0
  512. package/skills/grok-og/references/x-banner.md +41 -0
  513. package/skills/grok-threejs/SKILL.md +67 -0
  514. package/skills/grok-threejs/agentsam.skill.json +25 -0
  515. package/skills/grok-threejs/references/llms-full.txt +2780 -0
  516. package/skills/grok-video2dsprite/LICENSE +21 -0
  517. package/skills/grok-video2dsprite/SKILL.md +236 -0
  518. package/skills/grok-video2dsprite/SOURCE.md +6 -0
  519. package/skills/grok-video2dsprite/agentsam.skill.json +25 -0
  520. package/skills/grok-video2dsprite/references/pipeline.md +90 -0
  521. package/skills/grok-video2dsprite/references/prompt-rules.md +63 -0
  522. package/skills/grok-video2dsprite/scripts/video2dsprite.py +490 -0
  523. package/skills/grok-xai-api/SKILL.md +152 -0
  524. package/skills/grok-xai-api/agentsam.skill.json +25 -0
  525. package/src/attachments/index.js +6 -0
  526. package/src/attachments/intake.js +235 -0
  527. package/src/capabilities/repository-snapshot.js +19 -2
  528. package/src/cli/command-catalog.js +53 -3
  529. package/src/cli/dispatch.js +1 -0
  530. package/src/cli.js +192 -26
  531. package/src/cloudflare/runtime-status.js +2 -1
  532. package/src/commands/account-auth.js +94 -8
  533. package/src/commands/app.js +307 -3
  534. package/src/commands/autorag.js +67 -13
  535. package/src/commands/billing.js +127 -0
  536. package/src/commands/brand.js +74 -60
  537. package/src/commands/cheat-sheet.js +179 -0
  538. package/src/commands/cloudflare-login.js +222 -0
  539. package/src/commands/cloudflare.js +453 -23
  540. package/src/commands/codebaseindex.js +51 -3
  541. package/src/commands/compute.js +4 -0
  542. package/src/commands/connections.js +11 -5
  543. package/src/commands/credentials.js +116 -0
  544. package/src/commands/gcloud-auth.js +427 -0
  545. package/src/commands/google-cloud.js +375 -0
  546. package/src/commands/identity-init.js +2 -2
  547. package/src/commands/knowledge.js +59 -2
  548. package/src/commands/machine-binary.js +103 -0
  549. package/src/commands/machine.js +137 -0
  550. package/src/commands/mcp.js +226 -33
  551. package/src/commands/ollama.js +3 -2
  552. package/src/commands/plugins.js +7 -2
  553. package/src/commands/product.js +36 -0
  554. package/src/commands/runtime-status.js +28 -9
  555. package/src/commands/runtime.js +313 -0
  556. package/src/commands/rust.js +24 -0
  557. package/src/commands/security.js +67 -4
  558. package/src/commands/setup.js +296 -0
  559. package/src/commands/shell.js +16 -3
  560. package/src/commands/start-local.js +2 -2
  561. package/src/commands/status.js +8 -1
  562. package/src/commands/terminal.js +171 -0
  563. package/src/commands/update.js +140 -0
  564. package/src/commands/whoami.js +329 -65
  565. package/src/features/resolve.js +2 -0
  566. package/src/index.js +4 -0
  567. package/src/indexing/ingest/inventory.js +254 -19
  568. package/src/indexing/ingest/materials.js +3 -9
  569. package/src/indexing/ingest/style-evidence.js +181 -0
  570. package/src/knowledge/engine.js +21 -2
  571. package/src/knowledge/runtime-discovery.js +127 -0
  572. package/src/knowledge/source.js +3 -3
  573. package/src/lib/account-session.js +11 -4
  574. package/src/lib/app-authority.js +172 -0
  575. package/src/lib/auth.js +94 -21
  576. package/src/lib/core-client.js +5 -6
  577. package/src/lib/credentials-audit.js +451 -0
  578. package/src/lib/deploy/health.js +24 -6
  579. package/src/lib/detect-context.js +7 -1
  580. package/src/lib/google-cloud-connection.js +270 -0
  581. package/src/lib/google-cloud-inventory.js +385 -0
  582. package/src/lib/google-desktop-oauth.js +372 -0
  583. package/src/lib/google-studio-brokered-oauth.js +158 -0
  584. package/src/lib/identity-scaffold.js +76 -18
  585. package/src/lib/init-options.js +192 -0
  586. package/src/lib/local-scaffold.js +48 -16
  587. package/src/lib/provider-command-remediation.js +308 -0
  588. package/src/lib/provider-credentials.js +8 -0
  589. package/src/lib/scaffold/index.js +8 -2
  590. package/src/lib/scaffold/mcp-server.js +43 -0
  591. package/src/lib/scaffold/templates/mcp-server/index.js +397 -0
  592. package/src/lib/scaffold/templates/mcp-server/presets.js +39 -0
  593. package/src/lib/scaffold/wizards/cms.js +93 -0
  594. package/src/lib/scaffold/wizards/mcp-server.js +61 -0
  595. package/src/lib/setup/contract.js +26 -0
  596. package/src/lib/setup/discover.js +116 -0
  597. package/src/lib/setup/execute.js +205 -0
  598. package/src/lib/setup/planner.js +134 -0
  599. package/src/lib/setup/recipes.js +235 -0
  600. package/src/lib/setup/runtime-persist.js +197 -0
  601. package/src/lib/setup/runtime.js +394 -0
  602. package/src/lib/slash-commands.js +2 -0
  603. package/src/lib/terminal/machine-identity.js +95 -0
  604. package/src/lib/terminal-local.js +164 -0
  605. package/src/lib/terminal-scopes.js +52 -0
  606. package/src/lib/whoami-capabilities.js +184 -0
  607. package/src/local-pty/server.js +34 -5
  608. package/src/mcp/authority.js +58 -108
  609. package/src/mcp/client-adapters.js +68 -144
  610. package/src/mcp/client.js +142 -122
  611. package/src/mcp/cloudflare-bundles.js +225 -0
  612. package/src/mcp/index.js +12 -0
  613. package/src/models/discovery.js +40 -22
  614. package/src/models/inventory-core.d.ts +105 -0
  615. package/src/models/inventory-core.js +54 -6
  616. package/src/plugins/cloudflare.js +1 -1
  617. package/src/providers/ollama-chat.js +2 -1
  618. package/src/sam/types.js +27 -2
  619. package/src/security/inventory.js +12 -2
  620. package/src/security/local-vault.js +2 -0
  621. package/src/security/logs.js +3 -0
  622. package/src/security/scan.js +1 -1
  623. package/src/ui/cli/help.js +41 -0
  624. package/test/account-session.test.mjs +3 -3
  625. package/test/app-authority-context.test.mjs +32 -0
  626. package/test/apps-scaffold-contract.test.mjs +3 -2
  627. package/test/cli/api-key-env-whoami.test.mjs +2 -2
  628. package/test/cli/catalog-authority.test.mjs +64 -0
  629. package/test/cli/codebaseindex-plan-ux.test.mjs +1 -1
  630. package/test/cli/machine-command.test.mjs +34 -0
  631. package/test/cli/mcp-client.test.mjs +21 -10
  632. package/test/cli/runtime-persist.test.mjs +56 -0
  633. package/test/cli/rust-command.test.mjs +21 -0
  634. package/test/credentials-audit.test.mjs +113 -0
  635. package/test/deploy-health-scan.test.mjs +29 -1
  636. package/test/fixtures/project-authority/customer-app/.agentsam/app.json +5 -0
  637. package/test/fixtures/project-authority/customer-app/apps/my-product/index.ts +1 -0
  638. package/test/fixtures/project-authority/customer-app/wrangler.toml +17 -0
  639. package/test/gcloud-auth.test.mjs +111 -0
  640. package/test/google-cloud-connection.test.mjs +83 -0
  641. package/test/google-cloud-inventory.test.mjs +64 -0
  642. package/test/init-options.test.mjs +35 -0
  643. package/test/integration/app-command.test.mjs +30 -0
  644. package/test/integration/autorag-project-authority.integration.test.mjs +51 -0
  645. package/test/integration/autorag-runtime-discovery.test.mjs +107 -0
  646. package/test/integration/cad-project.test.mjs +4 -1
  647. package/test/integration/cms-app-scaffold.test.mjs +77 -0
  648. package/test/integration/cms-site-tenancy-contract.test.mjs +31 -19
  649. package/test/integration/codebaseindex-ingest.test.mjs +89 -0
  650. package/test/integration/database-hosted-honesty.test.mjs +49 -0
  651. package/test/integration/desktop-keychain-boundary.test.mjs +45 -0
  652. package/test/integration/features-resolve.test.mjs +30 -11
  653. package/test/integration/hosted-work-host-authority.test.mjs +47 -0
  654. package/test/integration/inspect-path-cli.test.mjs +46 -0
  655. package/test/integration/inventory-eligibility.test.mjs +59 -0
  656. package/test/integration/inventory-evidence.test.mjs +125 -0
  657. package/test/integration/local-provider-bridge.test.mjs +65 -0
  658. package/test/integration/local-studio-settings-production.test.mjs +40 -0
  659. package/test/integration/lockfile-sync.test.mjs +26 -0
  660. package/test/integration/provider-env-cli.test.mjs +13 -3
  661. package/test/integration/runtime-status.integration.test.mjs +17 -1
  662. package/test/integration/theme-package-registry.test.mjs +31 -0
  663. package/test/knowledge.test.mjs +35 -1
  664. package/test/loopback-oauth.test.mjs +53 -0
  665. package/test/ollama.test.mjs +22 -0
  666. package/test/repository-snapshot-view.test.mjs +2 -2
  667. package/test/security.test.mjs +37 -0
  668. package/test/setup-planner.test.mjs +74 -0
  669. package/test/setup-runtime.test.mjs +51 -0
  670. package/test/terminal/local-pty.mock.test.mjs +3 -1
  671. package/test/terminal-machine-identity.test.mjs +88 -0
  672. package/test/whoami-resume.test.mjs +27 -6
  673. package/packages/agentsam-brand/test/brand-scan.test.mjs +0 -106
  674. package/packages/agentsam-nav/dist/Nav.d.ts +0 -43
  675. package/packages/agentsam-nav/dist/NavCollapsible.d.ts +0 -10
  676. package/packages/agentsam-nav/dist/NavContent.d.ts +0 -2
  677. package/packages/agentsam-nav/dist/NavFooter.d.ts +0 -2
  678. package/packages/agentsam-nav/dist/NavGroup.d.ts +0 -3
  679. package/packages/agentsam-nav/dist/NavHeader.d.ts +0 -2
  680. package/packages/agentsam-nav/dist/NavMenu.d.ts +0 -22
  681. package/packages/agentsam-nav/dist/NavProvider.d.ts +0 -35
  682. package/packages/agentsam-nav/dist/NavTrigger.d.ts +0 -2
  683. package/packages/agentsam-nav/dist/Surfaces.d.ts +0 -41
  684. package/packages/agentsam-nav/dist/browser.d.ts +0 -11
  685. package/packages/agentsam-nav/dist/browser.global.js +0 -132
  686. package/packages/agentsam-nav/dist/browser.js +0 -613
  687. package/packages/agentsam-nav/dist/contracts.d.ts +0 -76
  688. package/packages/agentsam-nav/dist/index.d.ts +0 -11
  689. package/packages/agentsam-nav/dist/index.js +0 -614
  690. package/packages/agentsam-nav/dist/legacy.css +0 -83
  691. package/packages/agentsam-nav/dist/shell.css +0 -113
  692. package/packages/agentsam-nav/dist/theme.css +0 -113
  693. package/packages/agentsam-nav/dist/utils.d.ts +0 -1
  694. package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +0 -670
  695. package/packages/work-graph/prototype/README.md +0 -32
  696. package/packages/work-graph/prototype/data/demo-workgraph.js +0 -47
  697. package/packages/work-graph/prototype/renderers/timeline-model.js +0 -21
  698. package/packages/work-graph/prototype/renderers/workgraph-runtime.js +0 -38
  699. package/packages/work-graph/prototype-gnantt.html +0 -655
@@ -0,0 +1,269 @@
1
+ # Signaling relay and API route (create once)
2
+
3
+ The relay is **yours**, not part of the kit: copy it as-is or serve the same
4
+ `RtcPollResponse` shape from any store. Only rendezvous traffic (roster +
5
+ SDP/ICE) passes through it; game data flows peer-to-peer.
6
+
7
+ ## Schema — nothing to do by default
8
+
9
+ The relay below creates its two tables on first use
10
+ (`CREATE TABLE IF NOT EXISTS`, once per process) — nothing ships in
11
+ `migrations/` and the template itself never touches your database. If you'd
12
+ rather own or extend the schema (extra columns, your own migration ordering),
13
+ copy this into one of your app migrations; `IF NOT EXISTS` makes the runtime
14
+ ensure and your migration coexist safely:
15
+
16
+ ```sql
17
+ -- CREATE TABLE IF NOT EXISTS webrtc_peers (
18
+ -- room TEXT NOT NULL,
19
+ -- peer_id TEXT NOT NULL,
20
+ -- name TEXT NOT NULL DEFAULT '',
21
+ -- last_seen TIMESTAMPTZ NOT NULL DEFAULT now(),
22
+ -- PRIMARY KEY (room, peer_id)
23
+ -- );
24
+ -- CREATE TABLE IF NOT EXISTS webrtc_signals (
25
+ -- id BIGSERIAL PRIMARY KEY,
26
+ -- room TEXT NOT NULL,
27
+ -- to_peer TEXT NOT NULL,
28
+ -- from_peer TEXT NOT NULL,
29
+ -- kind TEXT NOT NULL,
30
+ -- payload JSONB NOT NULL,
31
+ -- created_at TIMESTAMPTZ NOT NULL DEFAULT now()
32
+ -- );
33
+ -- CREATE INDEX IF NOT EXISTS webrtc_signals_inbox
34
+ -- ON webrtc_signals (room, to_peer, id);
35
+ ```
36
+
37
+ ## `src/lib/multiplayer/signaling.server.ts`
38
+
39
+ Copy this file as-is (or adapt it — it is yours, not part of the kit):
40
+
41
+ ```ts
42
+ // src/lib/multiplayer/signaling.server.ts
43
+ /**
44
+ * WebRTC signaling over the app database (Neon deployed, PGLite in preview).
45
+ * Only rendezvous traffic passes through here — roster + SDP/ICE relay while a
46
+ * mesh forms; game data then flows peer-to-peer. DB-backed so any serverless
47
+ * instance can serve any poll. Mount at /api/rtc (see the multiplayer-p2p
48
+ * skill); the client side lives in `@/lib/multiplayer`.
49
+ *
50
+ * The GET poll is the whole peer lifecycle: the first poll (since=0) IS the
51
+ * join — it registers the peer, returns the roster, and prunes stale rows.
52
+ * Peer ids are random per mount, so a fresh inbox never has old signals to
53
+ * skip and no join/cursor handshake is needed.
54
+ */
55
+ import { z } from "zod";
56
+ import { getSql, type Sql } from "@/lib/db";
57
+ import type { PeerRow, RtcPollResponse, SignalRow } from "./p2p";
58
+
59
+ const ID = z.string().regex(/^[a-zA-Z0-9_-]{1,64}$/);
60
+ const signalSchema = z.object({
61
+ op: z.literal("signal"),
62
+ room: ID,
63
+ from: ID,
64
+ to: ID,
65
+ kind: z.enum(["offer", "answer", "ice"]),
66
+ // SDP offers are typically 3–10KB; the cap only blocks abuse (payload is
67
+ // re-serialized at insert — cheap at this size). An absent
68
+ // payload is rejected here (JSON.stringify(undefined) has no .length).
69
+ payload: z.unknown().refine((v) => v !== undefined && JSON.stringify(v).length <= 32_768, {
70
+ message: "payload too large",
71
+ }),
72
+ });
73
+ const leaveSchema = z.object({ op: z.literal("leave"), room: ID, peer: ID });
74
+ const postSchema = z.discriminatedUnion("op", [signalSchema, leaveSchema]);
75
+
76
+
77
+ const PEER_TTL_SECONDS = 30;
78
+ const SIGNAL_TTL_SECONDS = 60;
79
+
80
+ /**
81
+ * The kit ships no migration: tables are created on first use (IF NOT EXISTS)
82
+ * so the app's migrations/ namespace stays fully in the agent's hands. Agents
83
+ * who want to own/extend the schema can copy the DDL from the multiplayer-p2p
84
+ * skill into their own migration — both coexist safely. Memoized on globalThis
85
+ * (the db.ts pattern) so dev HMR never runs two ensures concurrently; a failed
86
+ * ensure clears the slot so the next request retries.
87
+ */
88
+ const globalRef = globalThis as typeof globalThis & {
89
+ __rtcSchemaPromise__?: Promise<void>;
90
+ };
91
+
92
+ function ensureSchema(sql: Sql): Promise<void> {
93
+ globalRef.__rtcSchemaPromise__ ??= (async () => {
94
+ await sql.query(
95
+ `CREATE TABLE IF NOT EXISTS webrtc_peers (
96
+ room TEXT NOT NULL,
97
+ peer_id TEXT NOT NULL,
98
+ name TEXT NOT NULL DEFAULT '',
99
+ last_seen TIMESTAMPTZ NOT NULL DEFAULT now(),
100
+ PRIMARY KEY (room, peer_id)
101
+ )`,
102
+ );
103
+ await sql.query(
104
+ `CREATE TABLE IF NOT EXISTS webrtc_signals (
105
+ id BIGSERIAL PRIMARY KEY,
106
+ room TEXT NOT NULL,
107
+ to_peer TEXT NOT NULL,
108
+ from_peer TEXT NOT NULL,
109
+ kind TEXT NOT NULL,
110
+ payload JSONB NOT NULL,
111
+ created_at TIMESTAMPTZ NOT NULL DEFAULT now()
112
+ )`,
113
+ );
114
+ await sql.query(
115
+ `CREATE INDEX IF NOT EXISTS webrtc_signals_inbox
116
+ ON webrtc_signals (room, to_peer, id)`,
117
+ );
118
+ })().catch((err) => {
119
+ globalRef.__rtcSchemaPromise__ = undefined;
120
+ throw err;
121
+ });
122
+ return globalRef.__rtcSchemaPromise__;
123
+ }
124
+
125
+ async function roster(sql: Sql, room: string): Promise<PeerRow[]> {
126
+ // LIMIT bounds the blast radius of room-stuffing; the mesh caps out ~8.
127
+ const rows = await sql.query<{ peer_id: string; name: string }>(
128
+ `SELECT peer_id, name FROM webrtc_peers
129
+ WHERE room = $1 AND last_seen > now() - make_interval(secs => $2)
130
+ ORDER BY peer_id LIMIT 32`,
131
+ [room, PEER_TTL_SECONDS],
132
+ );
133
+ return rows.map((r) => ({ id: r.peer_id, name: r.name }));
134
+ }
135
+
136
+ async function touchPeer(sql: Sql, room: string, peer: string, name: string) {
137
+ await sql.query(
138
+ `INSERT INTO webrtc_peers (room, peer_id, name, last_seen)
139
+ VALUES ($1, $2, $3, now())
140
+ ON CONFLICT (room, peer_id)
141
+ DO UPDATE SET last_seen = now(), name = EXCLUDED.name`,
142
+ [room, peer, name],
143
+ );
144
+ }
145
+
146
+ /**
147
+ * Rows are ephemeral; GC rides the polls instead of a cron: joins (since=0)
148
+ * always prune, and ~2% of all other polls do too — so a busy room whose
149
+ * cursors always advance still gets swept, without every heartbeat paying
150
+ * the two DELETEs.
151
+ */
152
+ async function prune(sql: Sql) {
153
+ await Promise.all([
154
+ sql.query(`DELETE FROM webrtc_signals WHERE created_at < now() - make_interval(secs => $1)`, [
155
+ SIGNAL_TTL_SECONDS,
156
+ ]),
157
+ sql.query(`DELETE FROM webrtc_peers WHERE last_seen < now() - make_interval(secs => $1)`, [
158
+ PEER_TTL_SECONDS,
159
+ ]),
160
+ ]);
161
+ }
162
+
163
+ function json(body: unknown, status = 200): Response {
164
+ return new Response(JSON.stringify(body), {
165
+ status,
166
+ headers: { "content-type": "application/json", "cache-control": "no-store" },
167
+ });
168
+ }
169
+
170
+ /** GET /api/rtc?room&peer&name&since — join (since=0), heartbeat, and inbox. */
171
+ async function handleGet(url: URL): Promise<Response> {
172
+ const parsed = z
173
+ .object({
174
+ room: ID,
175
+ peer: ID,
176
+ name: z.string().max(64).default(""),
177
+ since: z.coerce.number().int().min(0).default(0),
178
+ })
179
+ .safeParse({
180
+ room: url.searchParams.get("room"),
181
+ peer: url.searchParams.get("peer"),
182
+ name: url.searchParams.get("name") ?? "",
183
+ since: url.searchParams.get("since") ?? 0,
184
+ });
185
+ if (!parsed.success) return json({ error: "invalid query" }, 400);
186
+ const { room, peer, name, since } = parsed.data;
187
+
188
+ const sql = await getSql();
189
+ await ensureSchema(sql);
190
+ if (since === 0 || Math.random() < 0.02) await prune(sql);
191
+ await touchPeer(sql, room, peer, name);
192
+ const rows = await sql.query<{
193
+ id: number;
194
+ from_peer: string;
195
+ kind: SignalRow["kind"];
196
+ payload: unknown;
197
+ }>(
198
+ `SELECT id, from_peer, kind, payload FROM webrtc_signals
199
+ WHERE room = $1 AND to_peer = $2 AND id > $3
200
+ ORDER BY id LIMIT 200`,
201
+ [room, peer, since],
202
+ );
203
+ const body: RtcPollResponse = {
204
+ peers: await roster(sql, room),
205
+ signals: rows.map((r) => ({
206
+ id: r.id,
207
+ from: r.from_peer,
208
+ kind: r.kind,
209
+ payload: r.payload,
210
+ })),
211
+ };
212
+ return json(body);
213
+ }
214
+
215
+ async function handlePost(request: Request): Promise<Response> {
216
+ let body: unknown;
217
+ try {
218
+ body = await request.json();
219
+ } catch {
220
+ return json({ error: "invalid JSON" }, 400);
221
+ }
222
+ const parsed = postSchema.safeParse(body);
223
+ if (!parsed.success) return json({ error: "invalid request" }, 400);
224
+ const msg = parsed.data;
225
+ const sql = await getSql();
226
+ await ensureSchema(sql);
227
+
228
+ if (msg.op === "signal") {
229
+ await sql.query(
230
+ `INSERT INTO webrtc_signals (room, to_peer, from_peer, kind, payload)
231
+ VALUES ($1, $2, $3, $4, $5)`,
232
+ [msg.room, msg.to, msg.from, msg.kind, JSON.stringify(msg.payload)],
233
+ );
234
+ } else {
235
+ await sql.query(`DELETE FROM webrtc_peers WHERE room = $1 AND peer_id = $2`, [
236
+ msg.room,
237
+ msg.peer,
238
+ ]);
239
+ }
240
+ return json({ ok: true });
241
+ }
242
+
243
+ /** Request entrypoint for the /api/rtc route (GET poll, POST signal/leave). */
244
+ export async function handleSignaling(request: Request): Promise<Response> {
245
+ try {
246
+ if (request.method === "GET") return await handleGet(new URL(request.url));
247
+ if (request.method === "POST") return await handlePost(request);
248
+ return json({ error: "method not allowed" }, 405);
249
+ } catch (error) {
250
+ console.error("[rtc] signaling error:", error);
251
+ return json({ error: "signaling failed" }, 500);
252
+ }
253
+ }
254
+ ```
255
+
256
+ ## Mount the API route
257
+
258
+
259
+ ```ts
260
+ // src/routes/api/rtc.ts
261
+ import { createFileRoute } from "@tanstack/react-router";
262
+ import { handleSignaling } from "@/lib/multiplayer/signaling.server";
263
+
264
+ const handle = ({ request }: { request: Request }) => handleSignaling(request);
265
+
266
+ export const Route = createFileRoute("/api/rtc")({
267
+ server: { handlers: { GET: handle, POST: handle } },
268
+ });
269
+ ```
@@ -0,0 +1,157 @@
1
+ ---
2
+ name: neon
3
+ description: >
4
+ Use Neon Postgres (the database) in this TanStack Start app. Use when the app
5
+ needs to store or query data, persist state, or keep per-user data. Triggers on
6
+ "database", "Postgres", "Neon", "save data", "store data", "persist", "tables",
7
+ "SQL", "query", "migrations".
8
+ metadata:
9
+ short-description: "Neon Postgres (with a local PGLite fallback) for this template"
10
+ user-invocable: false
11
+ ---
12
+
13
+ # Neon Postgres
14
+
15
+ **The database is opt-in** (AGENTS.md §0.5): use it only when the app needs data
16
+ that outlives a browser session or is shared across devices. Otherwise ship no
17
+ migrations, don't import `@/lib/db`, and keep state in `localStorage` / zustand.
18
+
19
+ This template ships a ready-made, **dual-mode** database integration:
20
+
21
+ - **Configured** (env var set, e.g. deployed): real **Neon Postgres**.
22
+ - **Not configured** (sandbox live preview): the DB falls back to a local
23
+ **PGLite** (embedded WASM Postgres), so the preview always renders. Build
24
+ against the `@/lib/db` helper; both modes work with the same API.
25
+
26
+ Packages are **preinstalled** — do not `npm install` them: `pg` (node-postgres,
27
+ the regular Postgres driver) and `@electric-sql/pglite` (local DB fallback).
28
+
29
+ For **user accounts, sign-in, and reading the current user**, see the separate
30
+ **`auth` skill** — this skill is just the database.
31
+
32
+ ## Turning the database on
33
+
34
+ Set `deploy.database` to `true` in `.grok/app-env.json`:
35
+
36
+ ```json
37
+ { "VITE_AUTH_ENABLED": "false", "deploy": { "database": true } }
38
+ ```
39
+
40
+ That is what tells the platform to provision Neon for the deployed app; leave it
41
+ `false` and the deploy gets no `DATABASE_URL`, so the app silently runs on a
42
+ throwaway PGLite that loses its rows. Shipping `migrations/*.sql`, or sign-in,
43
+ provisions one regardless — this flag is for an app that queries `@/lib/db`
44
+ without either. It is not a `VITE_` key and never reaches the browser.
45
+
46
+ ## Env vars — do **not** create a `.env` file
47
+
48
+ **Never write a `.env` / `.env.local` / `.env.example` for the database.** In
49
+ the sandbox live preview, leave `DATABASE_URL` unset — `@/lib/db` automatically
50
+ uses embedded PGLite. When the app is deployed, the platform injects
51
+ `DATABASE_URL` (Neon); you do not provision or write it yourself.
52
+
53
+ | Var | Where | Purpose |
54
+ |---|---|---|
55
+ | `DATABASE_URL` | server | Neon connection string when deployed (optional — PGLite fallback if unset) |
56
+
57
+ Never hardcode it; never expose non-`VITE_` vars to the client.
58
+
59
+ ## Database (server-only)
60
+
61
+ `@/lib/db` exports `getSql()` and `dbSource`: a **regular Postgres driver**
62
+ (node-postgres, `pg`) against `DATABASE_URL`, or a local **PGLite** fallback when
63
+ unset. Same API either way — a tagged template (and `.query()`) resolving to
64
+ `rows[]`. Call ONLY from a `createServerFn` handler / server loader, never a
65
+ client component. Define schema in `migrations/`, not inline.
66
+
67
+ ```ts
68
+ import { createServerFn } from "@tanstack/react-start";
69
+ import { getSql } from "@/lib/db";
70
+
71
+ export const listPosts = createServerFn({ method: "GET" }).handler(async () => {
72
+ const sql = await getSql();
73
+ // Type the row shape — a server fn's return must be provably serializable.
74
+ return sql<{ id: number; title: string }>`select id, title from posts order by id desc`;
75
+ // or: return sql.query<{ id: number; title: string }>("select id, title from posts where id = $1", [id]);
76
+ });
77
+ ```
78
+
79
+ **Per-user data (only once the app has sign-in).** A regular driver has full DB
80
+ access, so scope **every** query to the authenticated user server-side — never
81
+ trust a client-sent id. Use the prewired **`authMiddleware`** to get a verified
82
+ `context.userId`, then filter by it. Full pattern (middleware, calling from
83
+ client code, fail-closed semantics) is in the **`auth` skill**:
84
+
85
+ ```ts
86
+ import { authMiddleware } from "@/lib/auth/middleware";
87
+
88
+ export const listTodos = createServerFn({ method: "GET" })
89
+ .middleware([authMiddleware])
90
+ .handler(async ({ context }) => {
91
+ const sql = await getSql();
92
+ return sql<{ id: number; title: string }>`select id, title from todos where user_id = ${context.userId} order by id desc`;
93
+ });
94
+ // mutations must scope writes too: `... where id = ${id} and user_id = ${context.userId}`
95
+ ```
96
+
97
+ **Without sign-in (the default), do NOT use `authMiddleware` / `requireUserId`.**
98
+ The dev user they fall back to is a preview-only convenience. A deployed app's
99
+ `VITE_AUTH_ENABLED` is set by the platform, not by this workspace (today the
100
+ deployer always sets it to `"true"`), so deployed, both reject every visitor —
101
+ and an auth-off app ships no sign-in route for them to recover with. A
102
+ database-only app keeps its rows unowned: no `user_id` column, or one literal
103
+ constant. Add the middleware as part of turning sign-in on (the `auth` skill's
104
+ upgrade steps), and re-scope or drop those rows then.
105
+
106
+ Unowned rows are world-readable and world-writable through your public server
107
+ functions: never persist personal or sensitive data (names, emails, free text
108
+ about a person) in this mode, and leave out destructive bulk mutations
109
+ (delete-all, overwrite-all) — if the app needs them, propose sign-in instead.
110
+
111
+ ## Migrations
112
+
113
+ `migrations/*.sql` are the single schema source. They apply to **Neon on deploy**
114
+ (`npm run build` runs `db:migrate` against `DATABASE_URL`, so Vercel ships with
115
+ the schema ready) and to the **PGLite** preview **automatically on startup**, so
116
+ dev matches prod.
117
+
118
+ Neither applier descends into subdirectories, so the Better Auth schema at
119
+ `migrations/auth/0001_auth.sql` is **not** applied unless the app turns sign-in
120
+ on and copies it up (**do not edit** it — see the `auth` skill). Put your app's
121
+ schema in NEW ordered files starting at `0002`:
122
+
123
+ ```sql
124
+ -- migrations/0002_schema.sql — example for a todos app; use YOUR app's tables
125
+ create table if not exists todos (
126
+ id serial primary key,
127
+ user_id text not null,
128
+ title text not null,
129
+ done boolean not null default false,
130
+ created_at timestamptz not null default now()
131
+ );
132
+ create index if not exists todos_user_id_idx on todos (user_id);
133
+ ```
134
+
135
+ Never edit an applied file — it is tracked by name in `_migrations` and will not
136
+ re-run (add a new file instead; new files apply to the running preview on the
137
+ next request). Prefer idempotent statements (`… if not exists`). Tables with
138
+ per-user data should carry a `user_id text not null` column (TEXT, not UUID — the
139
+ preview dev user id is the string `'dev-user'`).
140
+
141
+ ## Preview ↔ production parity
142
+
143
+ `getSql()` normalizes result types so both backends return identical, JSON-safe
144
+ shapes: `bigint`/`count(*)` → `number`, `date` → `'YYYY-MM-DD'` string,
145
+ `interval` → text, `numeric` → string. Remaining differences to respect:
146
+
147
+ - **`bigint` past 2^53 loses precision** as a number — cast `::text` if you
148
+ ever need huge integers (row counts are fine).
149
+ - **Preview DB is in-memory**: wiped on dev-server restart, single-connection
150
+ (no lock contention or concurrent-write conflicts), and loads **no
151
+ extensions** — do not `create extension`; stick to core Postgres.
152
+ - **Neon's pooled endpoint keeps no session state** — don't rely on `SET`,
153
+ `LISTEN/NOTIFY`, or session advisory locks.
154
+ - **Keep `user_id` columns `text`** — preview uses `'dev-user'`, production uses
155
+ Better Auth's text ids; a `uuid` column breaks preview inserts.
156
+ - Deployed Neon queries traverse the network (and may cold-resume) — avoid
157
+ N+1 query patterns that feel free against the in-process preview DB.
@@ -0,0 +1,25 @@
1
+ {
2
+ "schema": "agentsam.skill.v1",
3
+ "id": "grok-neon",
4
+ "name": "Grok \u00b7 neon",
5
+ "description": "Neon Postgres (with a local PGLite fallback) for this template",
6
+ "icon": "skill",
7
+ "slash": {
8
+ "suggested": "/grok-neon"
9
+ },
10
+ "instructions": {
11
+ "source": "local_file",
12
+ "ref": "SKILL.md"
13
+ },
14
+ "execution": {
15
+ "mode": "turn",
16
+ "tools": [],
17
+ "operations": [],
18
+ "capabilities": []
19
+ },
20
+ "provenance": {
21
+ "source": "apps/local-studio/.grok/skills",
22
+ "vendor": "grok",
23
+ "status": "imported"
24
+ }
25
+ }
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: og
3
+ description: >
4
+ Share-link previews and app identity for apps on *.grok.me: the injector-owned
5
+ og:image card, the SVG favicon, and PWA icons for installable apps.
6
+ Use when scaffolding, renaming, or restyling the app — and for share /
7
+ unfurl / OG / Twitter card questions. A custom 1200×630 card from the app's
8
+ own art is the default — games of every kind (DOM board/word games
9
+ included), whimsical apps, creative tools, and brand-forward pages; only
10
+ plain utilities keep the placeholder. Always run the brand-asset pass as a
11
+ `task` subagent and never wait for it.
12
+ Triggers on "share", "rename", "app name", "OG", "Open Graph",
13
+ "twitter card", "unfurl", "og:image", "og:type", "x:game:image",
14
+ "x-banner", "link preview", "social card", "thumbnail", "preview image",
15
+ "favicon", "app icon", "PWA", "manifest", "installable", "home screen",
16
+ "SEO", "meta description".
17
+ metadata:
18
+ short-description: "Brand assets: og.jpg card, X feed banner, SVG favicon, PWA icons — always a non-blocking `task` subagent"
19
+ user-invocable: false
20
+ ---
21
+
22
+ # Share cards, favicon, and app icons
23
+
24
+ A deployed app (`https://{name}.grok.me`) unfurls with a 1200×630 card; every app (preview included) shows a
25
+ favicon in the tab. **Share-card `<meta>` tags are not authored in `__root.tsx`** — the injector
26
+ (`scripts/grok-pwa-shared.mjs`) overwrites `og:*` and `twitter:card` on every HTML response. Identity data is
27
+ the only thing anyone writes, and the pass writes all of it — dispatching, you seed none of it:
28
+
29
+ - `src/lib/og/site.json` — not pre-seeded, created only if needed: `{ "title", "type"?: "x:game", "card"?: "custom", "color"?: "RRGGBB" }`; title defaults to the host slug.
30
+ - `public/og.jpg` — custom 1200×630 card (optional; placeholder otherwise)
31
+ - `public/x-banner.jpg` — games only: 50:11 (1200×264) X feed card
32
+ - `public/favicon.svg` — linked from root `head()`; until the pass lands the tab just shows the browser default, which fails nothing
33
+
34
+ **Extend `__root.tsx`; never replace it wholesale** (auth SSR, redesigns, skill excerpts): dropping the
35
+ favicon link ships a blank tab icon no local check catches.
36
+
37
+ ## Decide: which card this app gets
38
+
39
+ **Default: a custom card** from the app's own art — games of every kind and rendering tech (Canvas/WebGL *and*
40
+ DOM board, card, word, puzzle, quiz: a tic-tac-toe grid of divs is still a game), whimsical apps, creative
41
+ tools, content- and brand-forward pages. **When in doubt, make the custom card.**
42
+
43
+ **Plain utility apps only** (converters, CRUD trackers, dashboards, notes/admin — apps whose face is the data)
44
+ keep the default `og.grok.me` placeholder: no `public/og.jpg`. Its URL, the `"color"` knob and the rename
45
+ rule: `references/placeholder-card.md`.
46
+
47
+ ## `og:type` for games
48
+
49
+ **A game of any kind** carries `"type": "x:game"` in `src/lib/og/site.json` — the pass writes it, owning that
50
+ file. No hostname, never gated on a custom card, never "corrected" to `website`, bare `game`, `twitter:card`
51
+ or an invented `x:type`: X's pipeline keys off that exact value. Non-games omit it. Your check, not your
52
+ edit — missing it, or missing `public/x-banner.jpg` once a custom card exists, is a **BRAND WARNING**.
53
+
54
+ ## Brand-asset pass: always a subagent, never waited for
55
+
56
+ **Have the `task` tool? Dispatch this pass as a subagent and never generate card art yourself** — inline it
57
+ puts minutes of generation latency in front of the user. As soon as name and palette settle (AGENTS.md §
58
+ "Parallel work"), dispatch this prompt verbatim. It is complete — do not open the references below to
59
+ enrich it; the pass reads them itself:
60
+
61
+ > You are the brand-asset pass. Follow the `og` skill, which tells you where to start. App `<NAME>`,
62
+ > `og:type` `<TYPE>`, palette `<PALETTE>`. You solely own `public/` brand assets and `src/lib/og/site.json`.
63
+
64
+ Keep building. Stay sequential only if the user is art-directing or the art to reuse doesn't exist yet.
65
+
66
+ **Never wait for it.** No `wait_tasks`, and **never `get_task_output` on the brand task**: reading a task's
67
+ output consumes it, and a consumed task sends no completion notification, so the card's result — a failure
68
+ included — would reach nobody. Answer as soon as the app renders; the pass wakes you later, and that turn is
69
+ **one short sentence at most** — one that asks for a republish, since `public/og.jpg` ships in the build
70
+ and a card that lands after a publish never reaches the live app on its own:
71
+ "Added the share card — publish again if you already did." / "The card failed; the default one stands."
72
+
73
+ While the pass keeps `/workspace/.grok/og-pending` fresh, brand checks say nothing about the card: in flight
74
+ is not a finding. The marker goes stale after 10 minutes, so a very long pass lets the warning through — but
75
+ a brand warning while it runs is never a cue to redo its work.
76
+
77
+ **No `task` tool? Then you are the pass** — build the assets now; nothing else will. Whoever runs it claims
78
+ that marker, stages files under `/workspace/.grok/` — never inside `public/`, which `vite build` copies
79
+ verbatim into the deployed app — hands it over with `scripts/write-atomic.mjs` so no build reads half a JPEG,
80
+ and self-checks with `node scripts/brand-check.mjs --game`.
81
+
82
+ ## Build the assets — the pass reads these, the parent does not
83
+
84
+ **Dispatching? Do not open them** — the prompt above is complete. One read carries this procedure in your
85
+ context every later turn while the subagent does the work anyway.
86
+
87
+ **You are the pass?** Start at `references/brand-pass.md`, then read
88
+ per asset you owe: `references/custom-card.md` for `public/og.jpg`, `references/x-banner.md` for the
89
+ games-only `public/x-banner.jpg`, `references/favicon-and-icons.md` for `public/favicon.svg` plus the PWA
90
+ raster icons — those only when the user asked for installable/PWA, never invent a manifest. **Hand-author
91
+ that SVG, never `imagine_text_to_image`**: it must stay crisp at 16px. Writing `site.json` for a game?
92
+ `references/og-type-contract.md` argues the spellings X rejects.
93
+
94
+ Regenerate on rename or a material identity change — `APP_NAME`, the `site.json` `title` and the baked-in card
95
+ title move together. Without `imagine_text_to_image` or the xAI Images API, keep the `og.grok.me` card; never
96
+ ship a broken `og:image` URL.
97
+
98
+ ## Not supported
99
+
100
+ No `/api/og` route, no runtime image renderer, no per-route cards — the card is one static site-wide image
101
+ (`public/og.jpg` or the placeholder service). If you add `robots.txt`, never blanket `Disallow: /`: crawlers
102
+ must fetch `/` to read the tags.
@@ -0,0 +1,25 @@
1
+ {
2
+ "schema": "agentsam.skill.v1",
3
+ "id": "grok-og",
4
+ "name": "Grok \u00b7 og",
5
+ "description": "Brand assets: og.jpg card, X feed banner, SVG favicon, PWA icons \u2014 always a non-blocking `task` subagent",
6
+ "icon": "skill",
7
+ "slash": {
8
+ "suggested": "/grok-og"
9
+ },
10
+ "instructions": {
11
+ "source": "local_file",
12
+ "ref": "SKILL.md"
13
+ },
14
+ "execution": {
15
+ "mode": "turn",
16
+ "tools": [],
17
+ "operations": [],
18
+ "capabilities": []
19
+ },
20
+ "provenance": {
21
+ "source": "apps/local-studio/.grok/skills",
22
+ "vendor": "grok",
23
+ "status": "imported"
24
+ }
25
+ }
@@ -0,0 +1,53 @@
1
+ # Running the brand-asset pass (the pass's own contract)
2
+
3
+ Read this when you *are* the pass — dispatched as the brand subagent, or
4
+ building the assets inline because no `task` tool exists. The parent keeps
5
+ building and never waits, so everything below is yours to get right unobserved.
6
+
7
+ ## 1. Claim the marker, keep it fresh, always release it
8
+
9
+ `touch /workspace/.grok/og-pending` before generating and again before each
10
+ `imagine_*` call — while that marker is fresh `brand-check.mjs` suppresses the
11
+ missing-card warnings the parent would otherwise act on, and it goes stale after
12
+ 10 minutes so a killed pass cannot silence the check forever.
13
+ `rm -f /workspace/.grok/og-pending` on every exit path, success or not.
14
+
15
+ ## 2. Hand every file over atomically
16
+
17
+ `public/og.jpg`, `public/x-banner.jpg` and `src/lib/og/site.json` alike. The
18
+ parent may be mid-`npm run build` and would then read a half-written JPEG. Write
19
+ to a staged path under `/workspace/.grok/` — never inside `public/`, which
20
+ `vite build` copies verbatim into the deployed app, and never on another
21
+ filesystem such as `/tmp`, where the hand-over cannot be a rename — then:
22
+
23
+ ```sh
24
+ node scripts/write-atomic.mjs /workspace/.grok/og.jpg.tmp public/og.jpg
25
+ ```
26
+
27
+ `src/lib/og/site.json` is the only file this pass writes under `src/`. Hand it
28
+ over **once**, with the finished card — never a field at a time: its
29
+ `"card": "custom"` flag has to land *with* the card and not before, because the
30
+ bake trusts the flag on its own and would emit an `og:image` URL for a file that
31
+ does not exist.
32
+
33
+ ## 3. Verify your own work, because nobody waits for it
34
+
35
+ Run the card checks in `custom-card.md`, then `node scripts/brand-check.mjs --game`
36
+ (drop `--game` for non-games), which prints a JSON verdict and exits non-zero
37
+ on any `BRAND WARNING`. That run judges the files on disk and reports
38
+ `"pending": true` — the marker only demotes the parent's gates — and it treats a
39
+ missing `public/og.jpg` as a failure whatever kind of app this is, because
40
+ producing one is what this pass is normally for.
41
+
42
+ **The one exception**: a pass launched for a plain utility that keeps the
43
+ `og.grok.me` card (favicon, PWA icons, and title only — SKILL.md § "Decide:
44
+ which card this app gets") is not there to produce a card, so it adds
45
+ `--placeholder-ok` and the missing card is then the expected verdict rather than
46
+ a failure:
47
+
48
+ ```sh
49
+ node scripts/brand-check.mjs --placeholder-ok
50
+ ```
51
+
52
+ Use it only for that launch — passing it on a custom-card app hides the one
53
+ thing that pass owes. Report pass or fail in your answer text.