@inneranimalmedia/agentsam-sdk 2.6.11 → 2.6.12

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 (411) hide show
  1. package/apps/cad-creator/shared/cad/package.json +1 -1
  2. package/apps/client-cms-editor/backend/package.json +2 -2
  3. package/apps/client-cms-editor/frontend/package.json +3 -3
  4. package/apps/client-cms-editor/frontend/src/adapters/http-authoring.test.ts +161 -0
  5. package/apps/client-cms-editor/frontend/src/adapters/http.ts +296 -65
  6. package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +47 -16
  7. package/apps/client-cms-editor/frontend/src/editor/composition-groups.test.ts +40 -0
  8. package/apps/client-cms-editor/frontend/src/editor/legacy/CmsEditorPrototype.tsx +28 -28
  9. package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +3 -3
  10. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +5 -4
  11. package/apps/client-cms-editor/frontend/src/styles/studio.css +150 -149
  12. package/apps/client-cms-editor/package.json +1 -1
  13. package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +1 -1
  14. package/apps/client-cms-editor/shared/cms/package.json +1 -1
  15. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +42 -1
  16. package/docs/CMS_CONTEXTUAL_COMPOSER.md +4 -4
  17. package/docs/PRODUCT_LIFECYCLE.md +38 -38
  18. package/docs/REPO_FILE_MAP.txt +2 -2
  19. package/docs/THEME_REFINERY.md +6 -6
  20. package/docs/WINDOWS_RUNTIME_INSTALL.md +1 -1
  21. package/docs/adr/ADR-0002-brand-campaign-plugin-boundaries.md +603 -0
  22. package/docs/adr/ADR-0003-copro-clean-room-product-architecture.md +34 -0
  23. package/docs/adr/ADR-0003-product-portfolio-and-package-taxonomy.md +146 -0
  24. package/docs/adr/ADR-0004-product-composition-and-provider-neutrality.md +56 -0
  25. package/docs/adr/ADR-0005-offer-graduation-standard.md +66 -0
  26. package/docs/adr/README.md +25 -0
  27. package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +1 -1
  28. package/docs/architecture/DUAL_ANALYTICS_PRODUCT.md +1 -1
  29. package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +1 -1
  30. package/docs/content-studio/REVISION_GATE_2026-09-27.md +3 -3
  31. package/docs/contracts/google-cloud-oauth-setup.md +1 -1
  32. package/docs/local-studio/WORKMODE_DONOR_NOTES.md +3 -3
  33. package/docs/plans/ASTRA-BRIEF-2026-09-18.md +1 -1
  34. package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +2 -2
  35. package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +1 -1
  36. package/docs/plans/NEXT-AGENT-HANDOFF.md +2 -2
  37. package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +68 -68
  38. package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +1 -1
  39. package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +1 -1
  40. package/docs/prd/PRD-agentsam-analytics.md +174 -0
  41. package/docs/prd/PRD-agentsam-brand.md +181 -0
  42. package/docs/prd/PRD-agentsam-browser.md +177 -0
  43. package/docs/prd/PRD-agentsam-cad-studio.md +177 -0
  44. package/docs/prd/PRD-agentsam-campaign.md +1178 -0
  45. package/docs/prd/PRD-agentsam-commerce-studio.md +180 -0
  46. package/docs/prd/PRD-agentsam-content-studio.md +179 -0
  47. package/docs/prd/PRD-agentsam-copro.md +39 -0
  48. package/docs/prd/PRD-agentsam-database-studio.md +175 -0
  49. package/docs/prd/PRD-agentsam-developer-studio.md +175 -0
  50. package/docs/prd/PRD-agentsam-hosted-runtime.md +180 -0
  51. package/docs/prd/PRD-agentsam-knowledge.md +174 -0
  52. package/docs/prd/PRD-agentsam-local-studio.md +180 -0
  53. package/docs/prd/PRD-agentsam-merch.md +177 -0
  54. package/docs/prd/PRD-agentsam-platform.md +179 -0
  55. package/docs/prd/PRD-agentsam-site-studio.md +180 -0
  56. package/docs/prd/PRD-agentsam-work.md +180 -0
  57. package/docs/prd/README.md +39 -0
  58. package/docs/product/COPRO-DONOR-AUDIT.md +9 -0
  59. package/docs/product/COPRO-EXECUTION-PLAN.md +81 -0
  60. package/docs/product/COPRO-UI-QUALITY-GATE.md +119 -0
  61. package/docs/product/OFFER-PORTFOLIO.md +158 -0
  62. package/docs/product/PACKAGE-TAXONOMY.md +78 -0
  63. package/examples/hyperspace-demo/dist/assets/index-SZ2LfOpJ.js +242 -0
  64. package/examples/hyperspace-demo/dist/index.html +13 -0
  65. package/native/agentsam-machine/core/src/lib.rs +2 -2
  66. package/package.json +55 -35
  67. package/packages/agentsam-brand/package.json +3 -2
  68. package/packages/agentsam-brand/src/public.js +192 -0
  69. package/packages/agentsam-contracts/README.md +1 -1
  70. package/packages/agentsam-contracts/package.json +1 -1
  71. package/packages/agentsam-errors/package.json +1 -1
  72. package/packages/agentsam-goap/package.json +2 -2
  73. package/packages/agentsam-hooks/package.json +1 -1
  74. package/packages/agentsam-knowledge/package.json +1 -1
  75. package/packages/agentsam-merch/package.json +1 -1
  76. package/packages/agentsam-merch/test/merch.test.mjs +1 -1
  77. package/packages/agentsam-nav/dist/browser.global.js +34 -71
  78. package/packages/agentsam-nav/dist/browser.js +759 -3157
  79. package/packages/agentsam-nav/dist/index.js +751 -3149
  80. package/packages/agentsam-nav/package.json +1 -1
  81. package/packages/agentsam-queue-control/package.json +1 -1
  82. package/packages/agentsam-repository/package.json +1 -1
  83. package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +670 -0
  84. package/packages/agentsam-vault/package.json +1 -1
  85. package/packages/agentsam-workbench/package.json +5 -4
  86. package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +28 -4
  87. package/packages/agentsam-workbench/src/agent/contextual-composer.css +72 -70
  88. package/packages/agentsam-workbench/src/agent/mini-agentsam.css +228 -10
  89. package/packages/connectors/cfoa/package.json +1 -1
  90. package/packages/heuristic-theme/package.json +1 -1
  91. package/packages/identity/package.json +1 -1
  92. package/packages/identity/src/frontend/auth-portal/pages/login.html +1 -1
  93. package/packages/identity/src/frontend/auth-portal/pages/reset.html +1 -1
  94. package/packages/identity/src/frontend/auth-portal/pages/signup.html +1 -1
  95. package/packages/identity/tests/chatgpt-provider.test.mjs +3 -3
  96. package/packages/identity/tests/oauth-consent-view.test.mjs +11 -11
  97. package/packages/providers/completeful/README.md +3 -3
  98. package/packages/providers/completeful/package.json +1 -1
  99. package/packages/theme-cypress/README.md +11 -0
  100. package/packages/{theme-church-site → theme-cypress}/package.json +14 -11
  101. package/packages/theme-cypress/prebuild.json +23 -0
  102. package/packages/theme-cypress/site/assets/generated/favicon.svg +7 -0
  103. package/packages/theme-cypress/site/assets/generated/media-044ba16613.webp +0 -0
  104. package/packages/theme-cypress/site/assets/generated/media-0a1ea6f6d9.webp +0 -0
  105. package/packages/theme-cypress/site/assets/generated/media-0c06778307.webp +0 -0
  106. package/packages/theme-cypress/site/assets/generated/media-1539ed373a.webp +0 -0
  107. package/packages/theme-cypress/site/assets/generated/media-2df479fd2d.webp +0 -0
  108. package/packages/theme-cypress/site/assets/generated/media-2e8bd0d9bc.webp +0 -0
  109. package/packages/theme-cypress/site/assets/generated/media-41d4e2643c.webp +0 -0
  110. package/packages/theme-cypress/site/assets/generated/media-46205bfde8.webp +0 -0
  111. package/packages/theme-cypress/site/assets/generated/media-50c5f3e279.webp +0 -0
  112. package/packages/theme-cypress/site/assets/generated/media-5f1467778c.webp +0 -0
  113. package/packages/theme-cypress/site/assets/generated/media-6703642b22.webp +0 -0
  114. package/packages/theme-cypress/site/assets/generated/media-87a490bc8e.webp +0 -0
  115. package/packages/theme-cypress/site/assets/generated/media-997c10ef39.webp +0 -0
  116. package/packages/theme-cypress/site/assets/generated/media-a423735c21.webp +0 -0
  117. package/packages/theme-cypress/site/assets/generated/media-c9cea5245b.webp +0 -0
  118. package/packages/theme-cypress/site/assets/generated/media-cab3c84c60.webp +0 -0
  119. package/packages/theme-cypress/site/assets/generated/media-ce06595d59.webp +0 -0
  120. package/packages/theme-cypress/site/assets/generated/media-d268905e7e.webp +0 -0
  121. package/packages/theme-cypress/site/assets/generated/media-f6711b5053.webp +0 -0
  122. package/packages/theme-cypress/site/assets/generated/media-manifest.json +226 -0
  123. package/packages/theme-cypress/site/assets/generated/social-card.webp +0 -0
  124. package/packages/theme-cypress/site/assets/generated/theme-mark-192.png +0 -0
  125. package/packages/theme-cypress/site/assets/generated/theme-mark-512.png +0 -0
  126. package/packages/theme-cypress/site/assets/generated/theme-mark.svg +7 -0
  127. package/packages/theme-cypress/site/beliefs.html +175 -0
  128. package/packages/theme-cypress/site/community.html +175 -0
  129. package/packages/theme-cypress/site/connect.html +319 -0
  130. package/packages/theme-cypress/site/donate.html +106 -0
  131. package/packages/theme-cypress/site/groups.html +1352 -0
  132. package/packages/theme-cypress/site/help.html +1 -0
  133. package/packages/theme-cypress/site/icons/clock.svg +4 -0
  134. package/packages/theme-cypress/site/icons/email.svg +4 -0
  135. package/packages/theme-cypress/site/icons/giving.svg +4 -0
  136. package/packages/theme-cypress/site/icons/home.svg +4 -0
  137. package/packages/theme-cypress/site/icons/location.svg +4 -0
  138. package/packages/theme-cypress/site/icons/media.svg +4 -0
  139. package/packages/theme-cypress/site/icons/ministries.svg +6 -0
  140. package/packages/theme-cypress/site/icons/prayer.svg +5 -0
  141. package/packages/theme-cypress/site/icons/visit.svg +6 -0
  142. package/packages/theme-cypress/site/index.html +1013 -0
  143. package/packages/theme-cypress/site/mensgroup.html +477 -0
  144. package/packages/theme-cypress/site/mission.html +512 -0
  145. package/packages/theme-cypress/site/unified-footer.css +172 -0
  146. package/packages/theme-cypress/site/unified-footer.js +175 -0
  147. package/packages/theme-cypress/site/unified-header.css +226 -0
  148. package/packages/theme-cypress/site/unified-header.js +111 -0
  149. package/packages/theme-cypress/site/womansgroup.html +452 -0
  150. package/packages/{theme-church-site → theme-cypress}/src/index.js +22 -35
  151. package/packages/theme-cypress/src/node.js +69 -0
  152. package/packages/theme-cypress/test/theme.test.mjs +47 -0
  153. package/packages/theme-ember/README.md +11 -0
  154. package/packages/{theme-fuelnfree-site → theme-ember}/package.json +14 -11
  155. package/packages/theme-ember/prebuild.json +23 -0
  156. package/packages/theme-ember/site/about.html +1840 -0
  157. package/packages/theme-ember/site/assets/generated/favicon.svg +7 -0
  158. package/packages/theme-ember/site/assets/generated/media-1e0b1e6ee6.webp +0 -0
  159. package/packages/theme-ember/site/assets/generated/media-2371dcb426.webp +0 -0
  160. package/packages/theme-ember/site/assets/generated/media-2db4f5ff9e.webp +0 -0
  161. package/packages/theme-ember/site/assets/generated/media-4ed07a756e.webp +0 -0
  162. package/packages/theme-ember/site/assets/generated/media-58182cf167.webp +0 -0
  163. package/packages/theme-ember/site/assets/generated/media-5b8b8472ae.webp +0 -0
  164. package/packages/theme-ember/site/assets/generated/media-71f4bd16a1.webp +0 -0
  165. package/packages/theme-ember/site/assets/generated/media-7c1c8120bc.webp +0 -0
  166. package/packages/theme-ember/site/assets/generated/media-832b176433.webp +0 -0
  167. package/packages/theme-ember/site/assets/generated/media-931439701c.webp +0 -0
  168. package/packages/theme-ember/site/assets/generated/media-c2860d40d1.webp +0 -0
  169. package/packages/theme-ember/site/assets/generated/media-c56974d198.webp +0 -0
  170. package/packages/theme-ember/site/assets/generated/media-cb83a44ff4.webp +0 -0
  171. package/packages/theme-ember/site/assets/generated/media-df02ccdfcf.webp +0 -0
  172. package/packages/theme-ember/site/assets/generated/media-fab72cd344.webp +0 -0
  173. package/packages/theme-ember/site/assets/generated/media-manifest.json +190 -0
  174. package/packages/theme-ember/site/assets/generated/social-card.webp +0 -0
  175. package/packages/theme-ember/site/assets/generated/theme-mark-192.png +0 -0
  176. package/packages/theme-ember/site/assets/generated/theme-mark-512.png +0 -0
  177. package/packages/theme-ember/site/assets/generated/theme-mark.svg +7 -0
  178. package/packages/theme-ember/site/community.html +1664 -0
  179. package/packages/theme-ember/site/index.html +2044 -0
  180. package/packages/theme-ember/site/shop.html +2104 -0
  181. package/packages/{theme-fuelnfree-site → theme-ember}/src/index.js +23 -33
  182. package/packages/theme-ember/src/node.js +69 -0
  183. package/packages/theme-ember/test/theme.test.mjs +47 -0
  184. package/packages/theme-forge/README.md +11 -0
  185. package/packages/theme-forge/package.json +44 -0
  186. package/packages/theme-forge/prebuild.json +23 -0
  187. package/packages/theme-forge/site/apple-touch-icon.png +0 -0
  188. package/packages/theme-forge/site/assets/generated/favicon.svg +7 -0
  189. package/packages/theme-forge/site/assets/generated/media-manifest.json +17 -0
  190. package/packages/theme-forge/site/assets/generated/social-card.webp +0 -0
  191. package/packages/theme-forge/site/assets/generated/theme-mark-192.png +0 -0
  192. package/packages/theme-forge/site/assets/generated/theme-mark-512.png +0 -0
  193. package/packages/theme-forge/site/assets/generated/theme-mark.svg +7 -0
  194. package/packages/theme-forge/site/assets/index-DBOqQVsA.css +1 -0
  195. package/packages/theme-forge/site/assets/index-pXC0o9jp.js +241 -0
  196. package/packages/theme-forge/site/assets/workbox-window.prod.es5-Bd17z0YL.js +2 -0
  197. package/packages/theme-forge/site/index.html +5 -0
  198. package/packages/theme-forge/site/manifest.webmanifest +1 -0
  199. package/packages/theme-forge/site/pwa-192x192.png +0 -0
  200. package/packages/theme-forge/site/pwa-512x512.png +0 -0
  201. package/packages/theme-forge/site/sw.js +107 -0
  202. package/packages/theme-forge/site/workbox-7e5eb42b.js +3395 -0
  203. package/packages/theme-forge/src/index.js +76 -0
  204. package/packages/theme-forge/src/node.js +69 -0
  205. package/packages/theme-forge/test/theme.test.mjs +47 -0
  206. package/packages/theme-grove/README.md +11 -0
  207. package/packages/{theme-floors-site → theme-grove}/package.json +14 -11
  208. package/packages/theme-grove/prebuild.json +23 -0
  209. package/packages/theme-grove/site/assets/generated/favicon.svg +7 -0
  210. package/packages/theme-grove/site/assets/generated/media-098b13d75a.webp +0 -0
  211. package/packages/theme-grove/site/assets/generated/media-0c064db1aa.webp +0 -0
  212. package/packages/theme-grove/site/assets/generated/media-0fbfef655e.webp +0 -0
  213. package/packages/theme-grove/site/assets/generated/media-14759c7460.webp +0 -0
  214. package/packages/theme-grove/site/assets/generated/media-19b23d2a8f.webp +0 -0
  215. package/packages/theme-grove/site/assets/generated/media-2012f04243.webp +0 -0
  216. package/packages/theme-grove/site/assets/generated/media-23b8c5e2bb.webp +0 -0
  217. package/packages/theme-grove/site/assets/generated/media-2bffb1a6ef.webp +0 -0
  218. package/packages/theme-grove/site/assets/generated/media-2e1523a5b0.webp +0 -0
  219. package/packages/theme-grove/site/assets/generated/media-31107c21f2.webp +0 -0
  220. package/packages/theme-grove/site/assets/generated/media-31373ec865.webp +0 -0
  221. package/packages/theme-grove/site/assets/generated/media-45e8e27542.webp +0 -0
  222. package/packages/theme-grove/site/assets/generated/media-4aa9846fe7.webp +0 -0
  223. package/packages/theme-grove/site/assets/generated/media-5476b24219.webp +0 -0
  224. package/packages/theme-grove/site/assets/generated/media-7a227d3e4b.webp +0 -0
  225. package/packages/theme-grove/site/assets/generated/media-b183eed550.webp +0 -0
  226. package/packages/theme-grove/site/assets/generated/media-b2c650f9ab.webp +0 -0
  227. package/packages/theme-grove/site/assets/generated/media-b5d7471694.webp +0 -0
  228. package/packages/theme-grove/site/assets/generated/media-c86498fdb4.webp +0 -0
  229. package/packages/theme-grove/site/assets/generated/media-ce2cfff9a1.webp +0 -0
  230. package/packages/theme-grove/site/assets/generated/media-cf41a5f324.webp +0 -0
  231. package/packages/theme-grove/site/assets/generated/media-ec6c01bf8d.webp +0 -0
  232. package/packages/theme-grove/site/assets/generated/media-manifest.json +267 -0
  233. package/packages/theme-grove/site/assets/generated/social-card.webp +0 -0
  234. package/packages/theme-grove/site/assets/generated/theme-mark-192.png +0 -0
  235. package/packages/theme-grove/site/assets/generated/theme-mark-512.png +0 -0
  236. package/packages/theme-grove/site/assets/generated/theme-mark.svg +7 -0
  237. package/packages/theme-grove/site/index.html +1429 -0
  238. package/packages/theme-grove/site/pages/contact.html +664 -0
  239. package/packages/theme-grove/site/pages/gallery.html +216 -0
  240. package/packages/theme-grove/site/pages/privacy.html +180 -0
  241. package/packages/theme-grove/site/pages/process.html +592 -0
  242. package/packages/theme-grove/site/pages/services.html +567 -0
  243. package/packages/theme-grove/site/pages/terms.html +189 -0
  244. package/packages/theme-grove/site/shared/footer.css +140 -0
  245. package/packages/theme-grove/site/shared/footer.html +41 -0
  246. package/packages/{theme-floors-site → theme-grove}/src/index.js +24 -35
  247. package/packages/theme-grove/src/node.js +69 -0
  248. package/packages/theme-grove/test/theme.test.mjs +47 -0
  249. package/packages/theme-harbor/README.md +11 -0
  250. package/packages/{theme-insurance-site → theme-harbor}/package.json +14 -11
  251. package/packages/theme-harbor/prebuild.json +23 -0
  252. package/packages/theme-harbor/site/assets/generated/favicon.svg +7 -0
  253. package/packages/theme-harbor/site/assets/generated/media-manifest.json +17 -0
  254. package/packages/theme-harbor/site/assets/generated/social-card.webp +0 -0
  255. package/packages/theme-harbor/site/assets/generated/theme-mark-192.png +0 -0
  256. package/packages/theme-harbor/site/assets/generated/theme-mark-512.png +0 -0
  257. package/packages/theme-harbor/site/assets/generated/theme-mark.svg +7 -0
  258. package/packages/theme-harbor/site/assets/index-D58RKkr-.js +239 -0
  259. package/packages/theme-harbor/site/assets/index-Dd3YN9Mf.css +1 -0
  260. package/packages/theme-harbor/site/index.html +15 -0
  261. package/packages/theme-harbor/src/index.js +76 -0
  262. package/packages/theme-harbor/src/node.js +69 -0
  263. package/packages/theme-harbor/test/theme.test.mjs +47 -0
  264. package/packages/theme-resolve/README.md +11 -0
  265. package/packages/theme-resolve/package.json +44 -0
  266. package/packages/theme-resolve/prebuild.json +23 -0
  267. package/packages/theme-resolve/site/assets/generated/favicon.svg +7 -0
  268. package/packages/theme-resolve/site/assets/generated/media-216610d365.webp +0 -0
  269. package/packages/theme-resolve/site/assets/generated/media-2a9e0f623f.webp +0 -0
  270. package/packages/theme-resolve/site/assets/generated/media-a70660bfa9.webp +0 -0
  271. package/packages/theme-resolve/site/assets/generated/media-bc1322e813.webp +0 -0
  272. package/packages/theme-resolve/site/assets/generated/media-ced60fcecc.webp +0 -0
  273. package/packages/theme-resolve/site/assets/generated/media-manifest.json +72 -0
  274. package/packages/theme-resolve/site/assets/generated/social-card.webp +0 -0
  275. package/packages/theme-resolve/site/assets/generated/theme-mark-192.png +0 -0
  276. package/packages/theme-resolve/site/assets/generated/theme-mark-512.png +0 -0
  277. package/packages/theme-resolve/site/assets/generated/theme-mark.svg +7 -0
  278. package/packages/theme-resolve/site/assets/index-BSaLpPG1.css +2 -0
  279. package/packages/theme-resolve/site/assets/index-D8au46Z5.js +17 -0
  280. package/packages/theme-resolve/site/index.html +22 -0
  281. package/packages/theme-resolve/src/index.js +69 -0
  282. package/packages/theme-resolve/src/node.js +69 -0
  283. package/packages/theme-resolve/test/theme.test.mjs +47 -0
  284. package/packages/theme-scenes/package.json +1 -1
  285. package/packages/theme-scenes/src/registry.js +32 -49
  286. package/packages/theme-summit/README.md +11 -0
  287. package/packages/{theme-shinshu-site → theme-summit}/package.json +14 -11
  288. package/packages/theme-summit/prebuild.json +23 -0
  289. package/packages/theme-summit/site/adventures.html +450 -0
  290. package/packages/theme-summit/site/assets/generated/favicon.svg +7 -0
  291. package/packages/theme-summit/site/assets/generated/media-1e958ea679.webp +0 -0
  292. package/packages/theme-summit/site/assets/generated/media-9d4521abba.webp +0 -0
  293. package/packages/theme-summit/site/assets/generated/media-manifest.json +39 -0
  294. package/packages/theme-summit/site/assets/generated/social-card.webp +0 -0
  295. package/packages/theme-summit/site/assets/generated/theme-mark-192.png +0 -0
  296. package/packages/theme-summit/site/assets/generated/theme-mark-512.png +0 -0
  297. package/packages/theme-summit/site/assets/generated/theme-mark.svg +7 -0
  298. package/packages/theme-summit/site/business-card.html +315 -0
  299. package/packages/theme-summit/site/chatbot.js +312 -0
  300. package/packages/theme-summit/site/gallery.html +524 -0
  301. package/packages/theme-summit/site/i18n.js +947 -0
  302. package/packages/theme-summit/site/icons.svg +87 -0
  303. package/packages/theme-summit/site/index.html +2415 -0
  304. package/packages/theme-summit/site/pages/about.html +100 -0
  305. package/packages/theme-summit/site/pages/contact.html +117 -0
  306. package/packages/theme-summit/site/pages/dashboard.html +111 -0
  307. package/packages/theme-summit/site/pages/index.html +129 -0
  308. package/packages/theme-summit/site/pages/services.html +125 -0
  309. package/packages/theme-summit/site/shared/footer.html +41 -0
  310. package/packages/theme-summit/site/shared/layout.js +315 -0
  311. package/packages/theme-summit/site/shared/nav.html +19 -0
  312. package/packages/theme-summit/site/shared/styles.css +696 -0
  313. package/packages/theme-summit/site/theme-styles.css +131 -0
  314. package/packages/theme-summit/site/themes.js +442 -0
  315. package/packages/{theme-shinshu-site → theme-summit}/src/index.js +23 -35
  316. package/packages/theme-summit/src/node.js +69 -0
  317. package/packages/theme-summit/test/theme.test.mjs +47 -0
  318. package/packages/theme-violet/README.md +11 -0
  319. package/packages/{theme-companions-site → theme-violet}/package.json +14 -11
  320. package/packages/theme-violet/prebuild.json +23 -0
  321. package/packages/theme-violet/site/assets/generated/favicon.svg +7 -0
  322. package/packages/theme-violet/site/assets/generated/media-07b46d6457.webp +0 -0
  323. package/packages/theme-violet/site/assets/generated/media-09d38ddffc.webp +0 -0
  324. package/packages/theme-violet/site/assets/generated/media-254b0e2ad3.webp +0 -0
  325. package/packages/theme-violet/site/assets/generated/media-3a1b5c0a8d.webp +0 -0
  326. package/packages/theme-violet/site/assets/generated/media-3a78eb7d9d.webp +0 -0
  327. package/packages/theme-violet/site/assets/generated/media-49076977d8.webp +0 -0
  328. package/packages/theme-violet/site/assets/generated/media-6342d50dbd.webp +0 -0
  329. package/packages/theme-violet/site/assets/generated/media-646c65381e.webp +0 -0
  330. package/packages/theme-violet/site/assets/generated/media-7a5fb7c91a.webp +0 -0
  331. package/packages/theme-violet/site/assets/generated/media-9bbd133220.webp +0 -0
  332. package/packages/theme-violet/site/assets/generated/media-9e73307c2a.webp +0 -0
  333. package/packages/theme-violet/site/assets/generated/media-af382146a0.webp +0 -0
  334. package/packages/theme-violet/site/assets/generated/media-b2ae348b43.webp +0 -0
  335. package/packages/theme-violet/site/assets/generated/media-b8f43a3887.webp +0 -0
  336. package/packages/theme-violet/site/assets/generated/media-c96a3e1979.webp +0 -0
  337. package/packages/theme-violet/site/assets/generated/media-cd07daa54a.webp +0 -0
  338. package/packages/theme-violet/site/assets/generated/media-e03ab6b5fe.webp +0 -0
  339. package/packages/theme-violet/site/assets/generated/media-eae4917d25.webp +0 -0
  340. package/packages/theme-violet/site/assets/generated/media-f227ec5690.webp +0 -0
  341. package/packages/theme-violet/site/assets/generated/media-fb57ffd474.webp +0 -0
  342. package/packages/theme-violet/site/assets/generated/media-manifest.json +245 -0
  343. package/packages/theme-violet/site/assets/generated/social-card.webp +0 -0
  344. package/packages/theme-violet/site/assets/generated/theme-mark-192.png +0 -0
  345. package/packages/theme-violet/site/assets/generated/theme-mark-512.png +0 -0
  346. package/packages/theme-violet/site/assets/generated/theme-mark.svg +7 -0
  347. package/packages/theme-violet/site/global/cpas-contact.css +405 -0
  348. package/packages/theme-violet/site/global/cpas-donate-v2.css +931 -0
  349. package/packages/theme-violet/site/global/cpas-drawer-override.css +1 -0
  350. package/packages/theme-violet/site/global/cpas-footer.html +38 -0
  351. package/packages/theme-violet/site/global/cpas-header.html +30 -0
  352. package/packages/theme-violet/site/global/cpas-hero-watercolor.css +275 -0
  353. package/packages/theme-violet/site/global/cpas-modals.js +802 -0
  354. package/packages/theme-violet/site/global/cpas-public-surface.css +982 -0
  355. package/packages/theme-violet/site/global/cpas-shell.css +3980 -0
  356. package/packages/theme-violet/site/global/cpas-shell.js +107 -0
  357. package/packages/theme-violet/site/global/cpas-shelter-hub.css +326 -0
  358. package/packages/theme-violet/site/index.html +141 -0
  359. package/packages/theme-violet/site/pages/about/campaigns.html +28 -0
  360. package/packages/theme-violet/site/pages/about/cta.html +25 -0
  361. package/packages/theme-violet/site/pages/about/hero.html +46 -0
  362. package/packages/theme-violet/site/pages/about/paths.html +24 -0
  363. package/packages/theme-violet/site/pages/about/why_we_exist.html +28 -0
  364. package/packages/theme-violet/site/pages/home/campaigns.html +67 -0
  365. package/packages/theme-violet/site/pages/home/hero.html +42 -0
  366. package/packages/theme-violet/site/pages/home/how-it-helps.html +32 -0
  367. package/packages/theme-violet/site/pages/home/impact-stats.html +31 -0
  368. package/packages/theme-violet/site/pages/home/mission.html +36 -0
  369. package/packages/theme-violet/site/pages/home/newsletter.html +29 -0
  370. package/packages/theme-violet/site/pages/home/transport-win.html +22 -0
  371. package/packages/theme-violet/site/pages/index.html +141 -0
  372. package/packages/theme-violet/src/index.js +76 -0
  373. package/packages/theme-violet/src/node.js +69 -0
  374. package/packages/theme-violet/test/theme.test.mjs +47 -0
  375. package/packages/work-graph/package.json +1 -1
  376. package/protocol/features/README.md +1 -1
  377. package/protocol/features/catalog.json +12 -12
  378. package/protocol/features/examples/provider-resend.feature.json +2 -2
  379. package/protocol/presets/catalog.json +1 -1
  380. package/protocol/theme-refinery/prebuild-registry.json +45 -0
  381. package/protocol/theme-refinery/product-metadata.schema.json +63 -26
  382. package/protocol/theme-refinery/receipts/prebuild-remaster-20261004.json +21 -0
  383. package/src/plugins/completeful.js +2 -2
  384. package/packages/theme-church-site/README.md +0 -10
  385. package/packages/theme-church-site/src/harvest.json +0 -16
  386. package/packages/theme-church-site/test/theme.test.mjs +0 -21
  387. package/packages/theme-companions-site/README.md +0 -10
  388. package/packages/theme-companions-site/src/harvest.json +0 -14
  389. package/packages/theme-companions-site/src/index.js +0 -87
  390. package/packages/theme-companions-site/test/theme.test.mjs +0 -21
  391. package/packages/theme-floors-site/README.md +0 -10
  392. package/packages/theme-floors-site/src/harvest.json +0 -16
  393. package/packages/theme-floors-site/test/theme.test.mjs +0 -21
  394. package/packages/theme-fuelnfree-site/README.md +0 -10
  395. package/packages/theme-fuelnfree-site/src/harvest.json +0 -15
  396. package/packages/theme-fuelnfree-site/test/theme.test.mjs +0 -21
  397. package/packages/theme-handyman-site/README.md +0 -10
  398. package/packages/theme-handyman-site/package.json +0 -41
  399. package/packages/theme-handyman-site/src/harvest.json +0 -12
  400. package/packages/theme-handyman-site/src/index.js +0 -88
  401. package/packages/theme-handyman-site/test/theme.test.mjs +0 -21
  402. package/packages/theme-insurance-site/README.md +0 -10
  403. package/packages/theme-insurance-site/src/harvest.json +0 -12
  404. package/packages/theme-insurance-site/src/index.js +0 -88
  405. package/packages/theme-insurance-site/test/theme.test.mjs +0 -21
  406. package/packages/theme-shinshu-site/README.md +0 -10
  407. package/packages/theme-shinshu-site/src/harvest.json +0 -14
  408. package/packages/theme-shinshu-site/test/theme.test.mjs +0 -21
  409. package/protocol/theme-refinery/lineage-registry.json +0 -105
  410. package/protocol/theme-refinery/receipts/products-registry-batch-20260924.json +0 -318
  411. package/protocol/theme-refinery/receipts/theme-harvest-20260924.json +0 -472
@@ -0,0 +1,315 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="utf-8"/>
6
+ <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
7
+ <title>Alex Rowan — Summit</title>
8
+ <!-- Prevent indexing -->
9
+ <meta content="index,follow,max-image-preview:large" name="robots"/>
10
+ <meta content="noindex, nofollow" name="googlebot"/>
11
+ <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&amp;family=Roboto+Mono:wght@400;500;700&amp;display=swap" rel="stylesheet"/>
12
+ <script src="https://cdn.jsdelivr.net/npm/qrcode@1.5.3/build/qrcode.min.js"></script>
13
+ <style>
14
+ * {
15
+ margin: 0;
16
+ padding: 0;
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ body {
21
+ font-family: 'Roboto', sans-serif;
22
+ background: linear-gradient(135deg, #FFF8F0 0%, #F5E6D3 100%);
23
+ min-height: 100vh;
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ padding: 20px;
28
+ }
29
+
30
+ .business-card {
31
+ background: white;
32
+ border-radius: 24px;
33
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);
34
+ max-width: 500px;
35
+ width: 100%;
36
+ padding: 3rem;
37
+ text-align: center;
38
+ }
39
+
40
+ .profile-image {
41
+ width: 150px;
42
+ height: 150px;
43
+ border-radius: 50%;
44
+ margin: 0 auto 2rem;
45
+ background: linear-gradient(135deg, #FF8C42 0%, #E67635 100%);
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ font-size: 4rem;
50
+ color: white;
51
+ font-weight: 700;
52
+ border: 6px solid #FFF8F0;
53
+ box-shadow: 0 8px 24px rgba(255, 140, 66, 0.2);
54
+ }
55
+
56
+ .profile-image img {
57
+ width: 100%;
58
+ height: 100%;
59
+ border-radius: 50%;
60
+ object-fit: cover;
61
+ }
62
+
63
+ h1 {
64
+ font-family: 'Roboto Mono', monospace;
65
+ font-size: 2rem;
66
+ font-weight: 700;
67
+ color: #1A1A1A;
68
+ margin-bottom: 0.5rem;
69
+ }
70
+
71
+ .title {
72
+ font-family: 'Roboto', sans-serif;
73
+ font-size: 1.1rem;
74
+ color: #FF8C42;
75
+ font-weight: 500;
76
+ margin-bottom: 1.5rem;
77
+ text-transform: uppercase;
78
+ letter-spacing: 1px;
79
+ }
80
+
81
+ .company {
82
+ font-family: 'Roboto Mono', monospace;
83
+ font-size: 1.3rem;
84
+ font-weight: 700;
85
+ color: #1A1A1A;
86
+ margin-bottom: 2rem;
87
+ }
88
+
89
+ .contact-info {
90
+ margin: 2rem 0;
91
+ text-align: left;
92
+ }
93
+
94
+ .contact-item {
95
+ display: flex;
96
+ align-items: center;
97
+ gap: 1rem;
98
+ padding: 1rem;
99
+ margin-bottom: 0.75rem;
100
+ background: #FFF8F0;
101
+ border-radius: 12px;
102
+ transition: all 0.3s;
103
+ }
104
+
105
+ .contact-item:hover {
106
+ background: #F5E6D3;
107
+ transform: translateX(5px);
108
+ }
109
+
110
+ .contact-item svg {
111
+ width: 24px;
112
+ height: 24px;
113
+ stroke: #FF8C42;
114
+ flex-shrink: 0;
115
+ }
116
+
117
+ .contact-item a {
118
+ font-family: 'Roboto', sans-serif;
119
+ color: #1A1A1A;
120
+ text-decoration: none;
121
+ font-size: 1rem;
122
+ flex: 1;
123
+ }
124
+
125
+ .contact-item a:hover {
126
+ color: #FF8C42;
127
+ }
128
+
129
+ .qr-section {
130
+ margin: 2.5rem 0;
131
+ padding: 2rem;
132
+ background: #FFF8F0;
133
+ border-radius: 16px;
134
+ }
135
+
136
+ .qr-code {
137
+ width: 250px;
138
+ height: 250px;
139
+ margin: 0 auto 1.5rem;
140
+ background: white;
141
+ padding: 1rem;
142
+ border-radius: 12px;
143
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
144
+ }
145
+
146
+ .qr-code canvas {
147
+ width: 100% !important;
148
+ height: 100% !important;
149
+ }
150
+
151
+ .save-button {
152
+ display: inline-block;
153
+ background: linear-gradient(135deg, #FF8C42 0%, #E67635 100%);
154
+ color: white;
155
+ padding: 1rem 2.5rem;
156
+ border-radius: 12px;
157
+ text-decoration: none;
158
+ font-family: 'Roboto', sans-serif;
159
+ font-weight: 600;
160
+ font-size: 1rem;
161
+ transition: all 0.3s;
162
+ box-shadow: 0 4px 12px rgba(255, 140, 66, 0.3);
163
+ border: none;
164
+ cursor: pointer;
165
+ }
166
+
167
+ .save-button:hover {
168
+ transform: translateY(-2px);
169
+ box-shadow: 0 6px 20px rgba(255, 140, 66, 0.4);
170
+ }
171
+
172
+ .instructions {
173
+ font-family: 'Roboto', sans-serif;
174
+ font-size: 0.9rem;
175
+ color: #4A4A4A;
176
+ margin-top: 1rem;
177
+ line-height: 1.6;
178
+ }
179
+
180
+ @media (max-width: 600px) {
181
+ .business-card {
182
+ padding: 2rem 1.5rem;
183
+ }
184
+
185
+ h1 {
186
+ font-size: 1.5rem;
187
+ }
188
+
189
+ .qr-code {
190
+ width: 200px;
191
+ height: 200px;
192
+ }
193
+ }
194
+ </style>
195
+ <link href="https://example.com/business-card.html" rel="canonical"/><meta content="Summit is a restrained consulting portfolio prebuild with editorial service pages, case studies, media, multilingual-ready structure, and room to think." name="description"/><meta content="#0e1111" name="theme-color"/><meta content="website" property="og:type"/><meta content="Alex Rowan — Summit" property="og:title"/><meta content="Summit is a restrained consulting portfolio prebuild with editorial service pages, case studies, media, multilingual-ready structure, and room to think." property="og:description"/><meta content="https://example.com/business-card.html" property="og:url"/><meta content="https://example.com/assets/generated/social-card.webp" property="og:image"/><meta content="summary_large_image" name="twitter:card"/><meta content="Alex Rowan — Summit" name="twitter:title"/><meta content="Summit is a restrained consulting portfolio prebuild with editorial service pages, case studies, media, multilingual-ready structure, and room to think." name="twitter:description"/><meta content="https://example.com/assets/generated/social-card.webp" name="twitter:image"/><script data-agentsam-seo="theme-remaster" type="application/ld+json">{"@context": "https://schema.org", "@type": "WebSite", "name": "Summit Practice", "description": "Summit is a restrained consulting portfolio prebuild with editorial service pages, case studies, media, multilingual-ready structure, and room to think.", "url": "https://example.com/business-card.html", "isPartOf": {"@type": "CreativeWork", "name": "Summit AgentSam Prebuild"}}</script></head>
196
+ <body>
197
+ <div class="business-card">
198
+ <div class="profile-image" id="profileImage">
199
+ JW
200
+ </div>
201
+ <h1>Alex Rowan</h1>
202
+ <div class="title">Bilingual Real Estate Consultant</div>
203
+ <div class="company">Summit Practice</div>
204
+ <div class="contact-info">
205
+ <div class="contact-item">
206
+ <svg fill="none" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
207
+ <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path>
208
+ <polyline points="22,6 12,13 2,6"></polyline>
209
+ </svg>
210
+ <a href="mailto:hello@summit.example">hello@summit.example</a>
211
+ </div>
212
+ <div class="contact-item">
213
+ <svg fill="none" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
214
+ <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path>
215
+ </svg>
216
+ <a href="tel:+8107074765362">+81 070-7476-5362</a>
217
+ </div>
218
+ <div class="contact-item">
219
+ <svg fill="none" stroke="currentColor" stroke-width="2" viewbox="0 0 24 24">
220
+ <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path>
221
+ <circle cx="12" cy="10" r="3"></circle>
222
+ </svg>
223
+ <a href="https://maps.google.com/?q=Alpine Region,Japan" target="_blank">Alpine Region Prefecture,
224
+ Japan</a>
225
+ </div>
226
+ </div>
227
+ <div class="qr-section">
228
+ <div class="qr-code" id="qrCode"></div>
229
+ <button class="save-button" id="saveContact">Save to Contacts</button>
230
+ <div class="instructions">
231
+ Scan the QR code or click "Save to Contacts" to add Summit team's information to your phone
232
+ </div>
233
+ </div>
234
+ </div>
235
+ <script>
236
+ // Generate vCard data
237
+ function generateVCard() {
238
+ const vcard = [
239
+ 'BEGIN:VCARD',
240
+ 'VERSION:3.0',
241
+ 'FN:Alex Rowan',
242
+ 'N:Team;Summit;;;',
243
+ 'ORG:Summit Practice',
244
+ 'TITLE:Bilingual Real Estate Consultant',
245
+ 'EMAIL;TYPE=WORK,INTERNET:hello@summit.example',
246
+ 'TEL;TYPE=WORK,CELL:+8107074765362',
247
+ 'ADR;TYPE=WORK:;;Komoro;Alpine Region;;;Japan',
248
+ 'URL:https://Summit-solutions.meauxbility.workers.dev',
249
+ 'NOTE:Expert bilingual support for foreign real estate investors in Alpine Region, Japan',
250
+ 'END:VCARD'
251
+ ].join('\n');
252
+ return vcard;
253
+ }
254
+
255
+ // Generate QR Code
256
+ function generateQRCode() {
257
+ const vcard = generateVCard();
258
+ const qrContainer = document.getElementById('qrCode');
259
+
260
+ QRCode.toCanvas(qrContainer, vcard, {
261
+ width: 250,
262
+ margin: 2,
263
+ color: {
264
+ dark: '#1A1A1A',
265
+ light: '#FFFFFF'
266
+ }
267
+ }, function (error) {
268
+ if (error) {
269
+ console.error('QR Code generation error:', error);
270
+ qrContainer.innerHTML = '<p style="color: #FF8C42; font-family: Roboto, sans-serif;">QR Code Error</p>';
271
+ }
272
+ });
273
+ }
274
+
275
+ // Save to Contacts
276
+ function saveToContacts() {
277
+ const vcard = generateVCard();
278
+ const blob = new Blob([vcard], { type: 'text/vcard' });
279
+ const url = window.URL.createObjectURL(blob);
280
+ const link = document.createElement('a');
281
+ link.href = url;
282
+ link.download = 'summit-team.vcf';
283
+ document.body.appendChild(link);
284
+ link.click();
285
+ document.body.removeChild(link);
286
+ window.URL.revokeObjectURL(url);
287
+ }
288
+
289
+ // Initialize
290
+ document.addEventListener('DOMContentLoaded', () => {
291
+ generateQRCode();
292
+ document.getElementById('saveContact').addEventListener('click', saveToContacts);
293
+ });
294
+
295
+ // Allow profile image upload (if needed later)
296
+ const profileImage = document.getElementById('profileImage');
297
+ profileImage.addEventListener('click', function () {
298
+ const input = document.createElement('input');
299
+ input.type = 'file';
300
+ input.accept = 'image/*';
301
+ input.onchange = function (e) {
302
+ const file = e.target.files[0];
303
+ if (file) {
304
+ const reader = new FileReader();
305
+ reader.onload = function (e) {
306
+ profileImage.innerHTML = `<img src="${e.target.result}" alt="Alex Rowan">`;
307
+ };
308
+ reader.readAsDataURL(file);
309
+ }
310
+ };
311
+ input.click();
312
+ });
313
+ </script>
314
+ </body>
315
+ </html>
@@ -0,0 +1,312 @@
1
+ // Multilingual Chatbot for Summit Practice
2
+ class SummitChatbot {
3
+ constructor(apiUrl) {
4
+ this.apiUrl = apiUrl || 'https://Summit-solutions.meauxbility.workers.dev';
5
+ this.sessionId = this.generateSessionId();
6
+ this.isOpen = false;
7
+ this.conversationHistory = [];
8
+ this.currentLanguage = 'en';
9
+
10
+ this.init();
11
+ }
12
+
13
+ generateSessionId() {
14
+ return `chat_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
15
+ }
16
+
17
+ init() {
18
+ this.createChatbotUI();
19
+ this.loadHistory();
20
+ }
21
+
22
+ createChatbotUI() {
23
+ const chatbot = document.createElement('div');
24
+ chatbot.id = 'Summit-chatbot';
25
+ chatbot.className = 'chatbot-container';
26
+ chatbot.innerHTML = `
27
+ <div class="chatbot-toggle" onclick="window.SummitChatbot.toggle()">
28
+ <svg class="icon"><use href="#icon-chat"></use></svg>
29
+ </div>
30
+ <div class="chatbot-window" id="chatbot-window">
31
+ <div class="chatbot-header">
32
+ <div class="chatbot-title">
33
+ <svg class="icon"><use href="#icon-chat"></use></svg>
34
+ <span data-i18n="chatbot.title">How can I help?</span>
35
+ </div>
36
+ <button class="chatbot-close" onclick="window.SummitChatbot.toggle()">
37
+ <svg class="icon"><use href="#icon-close"></use></svg>
38
+ </button>
39
+ </div>
40
+ <div class="chatbot-messages" id="chatbot-messages"></div>
41
+ <div class="chatbot-suggestions" id="chatbot-suggestions"></div>
42
+ <div class="chatbot-input-container">
43
+ <input
44
+ type="text"
45
+ id="chatbot-input"
46
+ class="chatbot-input"
47
+ data-i18n="chatbot.placeholder"
48
+ placeholder="Ask about our services, properties, or get assistance..."
49
+ onkeypress="if(event.key==='Enter') window.SummitChatbot.sendMessage()"
50
+ />
51
+ <button class="chatbot-send" onclick="window.SummitChatbot.sendMessage()">
52
+ <svg class="icon"><use href="#icon-send"></use></svg>
53
+ </button>
54
+ </div>
55
+ </div>
56
+ `;
57
+ document.body.appendChild(chatbot);
58
+ this.updatePlaceholder();
59
+ }
60
+
61
+ updatePlaceholder() {
62
+ const input = document.getElementById('chatbot-input');
63
+ if (input && window.i18n) {
64
+ input.placeholder = window.i18n.t('chatbot.placeholder');
65
+ }
66
+ }
67
+
68
+ toggle() {
69
+ this.isOpen = !this.isOpen;
70
+ const window = document.getElementById('chatbot-window');
71
+ const toggle = document.querySelector('.chatbot-toggle');
72
+
73
+ if (this.isOpen) {
74
+ window.classList.add('open');
75
+ toggle.classList.add('active');
76
+ document.getElementById('chatbot-input').focus();
77
+ this.showSuggestions();
78
+ } else {
79
+ window.classList.remove('open');
80
+ toggle.classList.remove('active');
81
+ }
82
+ }
83
+
84
+ showSuggestions() {
85
+ const suggestionsEl = document.getElementById('chatbot-suggestions');
86
+ if (!suggestionsEl || this.conversationHistory.length > 0) {
87
+ if (suggestionsEl) suggestionsEl.style.display = 'none';
88
+ return;
89
+ }
90
+
91
+ suggestionsEl.style.display = 'flex';
92
+ const suggestions = window.i18n ? window.i18n.t('chatbot.suggestions', {}, true) : [];
93
+
94
+ if (Array.isArray(suggestions)) {
95
+ suggestionsEl.innerHTML = suggestions.map(s =>
96
+ `<button class="suggestion-btn" onclick="window.SummitChatbot.sendSuggestion('${s}')">${s}</button>`
97
+ ).join('');
98
+ }
99
+ }
100
+
101
+ sendSuggestion(text) {
102
+ document.getElementById('chatbot-input').value = text;
103
+ this.sendMessage();
104
+ }
105
+
106
+ async sendMessage() {
107
+ const input = document.getElementById('chatbot-input');
108
+ const message = input.value.trim();
109
+ if (!message) return;
110
+
111
+ input.value = '';
112
+ this.addMessage('user', message);
113
+ this.hideSuggestions();
114
+ this.showTyping();
115
+
116
+ try {
117
+ const response = await this.getBotResponse(message);
118
+ this.hideTyping();
119
+ this.addMessage('bot', response);
120
+ this.saveToHistory(message, response);
121
+ } catch (error) {
122
+ this.hideTyping();
123
+ const errorMsg = window.i18n ? window.i18n.t('chatbot.error') : 'Sorry, I encountered an error.';
124
+ this.addMessage('bot', errorMsg);
125
+ console.error('Chatbot error:', error);
126
+ }
127
+ }
128
+
129
+ async getBotResponse(message) {
130
+ // Use AI-powered chatbot API
131
+ const lang = this.currentLanguage || window.i18n?.currentLanguage || 'en';
132
+
133
+ try {
134
+ const response = await fetch(`${this.apiUrl}/api/chatbot`, {
135
+ method: 'POST',
136
+ headers: {
137
+ 'Content-Type': 'application/json',
138
+ },
139
+ body: JSON.stringify({
140
+ message: message,
141
+ sessionId: this.sessionId,
142
+ language: lang,
143
+ }),
144
+ });
145
+
146
+ if (response.ok) {
147
+ const data = await response.json();
148
+ if (data.success && data.response) {
149
+ return data.response;
150
+ }
151
+ }
152
+ } catch (error) {
153
+ console.error('Chatbot API error:', error);
154
+ }
155
+
156
+ // Fallback to rule-based responses
157
+ const lowerMsg = message.toLowerCase();
158
+
159
+ // Service inquiries
160
+ if (lowerMsg.includes('service') || lowerMsg.includes('サービス') || lowerMsg.includes('服务')) {
161
+ return this.getServiceInfo(lang);
162
+ }
163
+
164
+ // Contact information
165
+ if (lowerMsg.includes('contact') || lowerMsg.includes('連絡') || lowerMsg.includes('联系') ||
166
+ lowerMsg.includes('email') || lowerMsg.includes('電話') || lowerMsg.includes('电话')) {
167
+ return this.getContactInfo(lang);
168
+ }
169
+
170
+ // Area/region inquiries
171
+ if (lowerMsg.includes('area') || lowerMsg.includes('region') || lowerMsg.includes('地域') ||
172
+ lowerMsg.includes('地区') || lowerMsg.includes('serve') || lowerMsg.includes('カバー')) {
173
+ return this.getAreaInfo(lang);
174
+ }
175
+
176
+ // General help
177
+ if (lowerMsg.includes('help') || lowerMsg.includes('助け') || lowerMsg.includes('帮助') ||
178
+ lowerMsg.includes('start') || lowerMsg.includes('始め') || lowerMsg.includes('开始')) {
179
+ return this.getGeneralHelp(lang);
180
+ }
181
+
182
+ // Default response
183
+ return this.getDefaultResponse(lang, message);
184
+ }
185
+
186
+ getServiceInfo(lang) {
187
+ const responses = {
188
+ en: "We offer comprehensive bilingual services including translation & interpretation, client liaison, project coordination, property management, and cultural consulting. Our services are designed to bridge language and cultural gaps for foreign investors in Alpine Region. Would you like more details on any specific service?",
189
+ ja: "翻訳・通訳、クライアント連絡、プロジェクト調整、不動産管理、文化的コンサルティングなど、包括的なバイリンガルサービスを提供しています。特定のサービスについて詳しく知りたいですか?",
190
+ zh: "我们提供全面的双语服务,包括翻译和口译、客户联络、项目协调、物业管理和文化咨询。我们的服务旨在为长野的外国投资者弥合语言和文化差距。您想了解任何特定服务的更多详细信息吗?",
191
+ ko: "번역 및 통역, 고객 연락, 프로젝트 조정, 부동산 관리 및 문화 컨설팅을 포함한 포괄적인 이중 언어 서비스를 제공합니다. 특정 서비스에 대한 자세한 내용을 원하시나요?"
192
+ };
193
+ return responses[lang] || responses.en;
194
+ }
195
+
196
+ getContactInfo(lang) {
197
+ const responses = {
198
+ en: "You can reach us at [email protected] or call +81 070-7476-5362. We're located in Alpine Region Prefecture, Japan. Our service areas include Nozawa Onsen, Iiyama, Shinano, Myoko, and Karuizawa.",
199
+ ja: "メールアドレス: [email protected]、電話: +81 070-7476-5362 までお問い合わせください。長野県小諸市に所在しています。サービスエリアは野沢温泉、飯山、信濃、妙高、軽井沢です。",
200
+ zh: "您可以通过 [email protected] 或致电 +81 070-7476-5362 联系我们。我们位于日本长野县小诸市。我们的服务区域包括野泽温泉、饭山、信浓、妙高和轻井泽。",
201
+ ko: "[email protected]로 연락하거나 +81 070-7476-5362로 전화하실 수 있습니다. 일본 나가노현 고모로시에 위치해 있습니다. 서비스 지역은 노자와 온천, 이이야마, 시나노, 묘코, 가루이자와입니다."
202
+ };
203
+ return responses[lang] || responses.en;
204
+ }
205
+
206
+ getAreaInfo(lang) {
207
+ const responses = {
208
+ en: "We primarily serve the Nozawa Onsen area, which was featured on Condé Nast Traveler as one of the world's top 9 ski resorts. We also work in Iiyama, Shinano, Myoko, Karuizawa, and the Komoro region.",
209
+ ja: "主に野沢温泉エリアを中心にサービスを提供しています。野沢温泉はコンデナストトラベラーで世界トップ9のスキーリゾートの一つとして紹介されました。飯山、信濃、妙高、軽井沢、小諸地域でも活動しています。",
210
+ zh: "我们主要服务于野泽温泉地区,该地区被《康泰纳仕旅行者》评为世界前9大滑雪胜地之一。我们还在饭山、信浓、妙高、轻井泽和小诸地区工作。",
211
+ ko: "주로 노자와 온천 지역을 중심으로 서비스를 제공하며, 이 지역은 콘데 나스트 트래블러에서 세계 상위 9개 스키 리조트 중 하나로 선정되었습니다. 이이야마, 시나노, 묘코, 가루이자와, 고모로 지역에서도 활동합니다."
212
+ };
213
+ return responses[lang] || responses.en;
214
+ }
215
+
216
+ getGeneralHelp(lang) {
217
+ const responses = {
218
+ en: "I'm here to help you with information about Summit Practice. I can answer questions about our services, contact information, service areas, or help you get started. What would you like to know?",
219
+ ja: "信州ソリューションズに関する情報をお手伝いします。サービス、連絡先、サービスエリアについて質問に答えたり、始めるお手伝いをしたりできます。何を知りたいですか?",
220
+ zh: "我在这里帮助您了解信州解决方案的信息。我可以回答有关我们的服务、联系信息、服务区域的问题,或帮助您开始。您想了解什么?",
221
+ ko: "신슈 솔루션에 대한 정보를 도와드리기 위해 여기 있습니다. 서비스, 연락처 정보, 서비스 지역에 대한 질문에 답하거나 시작하는 데 도움을 드릴 수 있습니다. 무엇을 알고 싶으신가요?"
222
+ };
223
+ return responses[lang] || responses.en;
224
+ }
225
+
226
+ getDefaultResponse(lang, message) {
227
+ const responses = {
228
+ en: "Thank you for your message. I'm a virtual assistant for Summit Practice. I can help you with information about our services, contact details, or service areas. Feel free to ask me anything!",
229
+ ja: "メッセージありがとうございます。信州ソリューションズのバーチャルアシスタントです。サービス、連絡先、サービスエリアに関する情報をお手伝いできます。何でもお聞きください!",
230
+ zh: "感谢您的留言。我是信州解决方案的虚拟助手。我可以帮助您了解我们的服务、联系方式或服务区域。请随时问我任何问题!",
231
+ ko: "메시지를 보내주셔서 감사합니다. 신슈 솔루션의 가상 어시스턴트입니다. 서비스, 연락처 정보 또는 서비스 지역에 대한 정보를 도와드릴 수 있습니다. 무엇이든 물어보세요!"
232
+ };
233
+ return responses[lang] || responses.en;
234
+ }
235
+
236
+ addMessage(type, text) {
237
+ const messagesEl = document.getElementById('chatbot-messages');
238
+ const messageDiv = document.createElement('div');
239
+ messageDiv.className = `chatbot-message ${type}`;
240
+ messageDiv.innerHTML = `<div class="message-content">${this.escapeHtml(text)}</div>`;
241
+ messagesEl.appendChild(messageDiv);
242
+ messagesEl.scrollTop = messagesEl.scrollHeight;
243
+
244
+ this.conversationHistory.push({ type, text, timestamp: Date.now() });
245
+ }
246
+
247
+ showTyping() {
248
+ const messagesEl = document.getElementById('chatbot-messages');
249
+ const typingDiv = document.createElement('div');
250
+ typingDiv.id = 'chatbot-typing';
251
+ typingDiv.className = 'chatbot-message bot typing';
252
+ typingDiv.innerHTML = `
253
+ <div class="message-content">
254
+ <span class="typing-indicator">
255
+ <span></span><span></span><span></span>
256
+ </span>
257
+ ${window.i18n ? window.i18n.t('chatbot.typing') : 'Typing...'}
258
+ </div>
259
+ `;
260
+ messagesEl.appendChild(typingDiv);
261
+ messagesEl.scrollTop = messagesEl.scrollHeight;
262
+ }
263
+
264
+ hideTyping() {
265
+ const typing = document.getElementById('chatbot-typing');
266
+ if (typing) typing.remove();
267
+ }
268
+
269
+ hideSuggestions() {
270
+ const suggestions = document.getElementById('chatbot-suggestions');
271
+ if (suggestions) suggestions.style.display = 'none';
272
+ }
273
+
274
+ escapeHtml(text) {
275
+ const div = document.createElement('div');
276
+ div.textContent = text;
277
+ return div.innerHTML;
278
+ }
279
+
280
+ saveToHistory(userMsg, botMsg) {
281
+ const history = JSON.parse(localStorage.getItem('Summit_chat_history') || '[]');
282
+ history.push({
283
+ sessionId: this.sessionId,
284
+ userMessage: userMsg,
285
+ botResponse: botMsg,
286
+ language: this.currentLanguage,
287
+ timestamp: Date.now()
288
+ });
289
+ // Keep last 50 messages
290
+ if (history.length > 50) history.shift();
291
+ localStorage.setItem('Summit_chat_history', JSON.stringify(history));
292
+ }
293
+
294
+ loadHistory() {
295
+ const history = JSON.parse(localStorage.getItem('Summit_chat_history') || '[]');
296
+ // Could load recent history if needed
297
+ }
298
+
299
+ setLanguage(lang) {
300
+ this.currentLanguage = lang;
301
+ this.updatePlaceholder();
302
+ }
303
+ }
304
+
305
+ // Initialize chatbot when DOM is ready
306
+ if (typeof window !== 'undefined') {
307
+ window.addEventListener('DOMContentLoaded', () => {
308
+ if (!window.SummitChatbot) {
309
+ window.SummitChatbot = new SummitChatbot();
310
+ }
311
+ });
312
+ }