siduri 1.0.1 → 1.0.2

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 (40) hide show
  1. package/README.md +1 -1
  2. package/dist/configurators/archive.d.ts +0 -4
  3. package/dist/configurators/archive.js +0 -5
  4. package/dist/configurators/index.d.ts +0 -1
  5. package/dist/configurators/index.js +0 -1
  6. package/dist/configurators.test.js +3 -3
  7. package/dist/generator.js +2 -2
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.js +1 -1
  10. package/dist/runtime-parity.test.js +3 -3
  11. package/dist/web-dist/404/index.html +1 -1
  12. package/dist/web-dist/404.html +1 -1
  13. package/dist/web-dist/__next.__PAGE__.txt +1 -1
  14. package/dist/web-dist/__next._full.txt +1 -1
  15. package/dist/web-dist/__next._tree.txt +1 -1
  16. package/dist/web-dist/_next/static/chunks/app/chat/{page-c2c01bacc6562e40.js → page-4d90641844cd9fed.js} +1 -1
  17. package/dist/web-dist/_not-found/__next._full.txt +1 -1
  18. package/dist/web-dist/_not-found/__next._not-found.__PAGE__.txt +1 -1
  19. package/dist/web-dist/_not-found/__next._tree.txt +1 -1
  20. package/dist/web-dist/_not-found/index.html +1 -1
  21. package/dist/web-dist/_not-found/index.txt +1 -1
  22. package/dist/web-dist/chat/__next._full.txt +2 -2
  23. package/dist/web-dist/chat/__next._tree.txt +1 -1
  24. package/dist/web-dist/chat/__next.chat.__PAGE__.txt +2 -2
  25. package/dist/web-dist/chat/index.html +1 -1
  26. package/dist/web-dist/chat/index.txt +2 -2
  27. package/dist/web-dist/index.html +1 -1
  28. package/dist/web-dist/index.txt +1 -1
  29. package/dist/web-dist/operator/__next._full.txt +1 -1
  30. package/dist/web-dist/operator/__next._tree.txt +1 -1
  31. package/dist/web-dist/operator/__next.operator.__PAGE__.txt +1 -1
  32. package/dist/web-dist/operator/index.html +1 -1
  33. package/dist/web-dist/operator/index.txt +1 -1
  34. package/package.json +1 -1
  35. package/dist/clean-machine-e2e.test.d.ts +0 -1
  36. package/dist/clean-machine-e2e.test.js +0 -160
  37. package/dist/configurators/memory.d.ts +0 -5
  38. package/dist/configurators/memory.js +0 -21
  39. /package/dist/web-dist/_next/static/{TAssFHX71jXsDINzGLNGT → 6myq7R-xRemzP7dQD6m1Q}/_buildManifest.js +0 -0
  40. /package/dist/web-dist/_next/static/{TAssFHX71jXsDINzGLNGT → 6myq7R-xRemzP7dQD6m1Q}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -23,7 +23,7 @@ npx siduri create my-companion
23
23
  - **Interactive Configuration Wizard**: Model catalog discovery for OpenRouter, manifest inspection for E Knowledge Hub, and guided organ parameters.
24
24
  - **Zero Monolithic Bundling**: Scaffolds standard Node.js ESM projects with explicit dependency trees.
25
25
  - **Diagnostics (`siduri doctor`)**: Runs environment variable validation, schema conformance checks, storage writeability verification, external service endpoint probing, and organ health probes.
26
- - **Zero-Config Database**: Powered by embedded SQLite (`siduri.sqlite`). Memory and persistent state are initialized automatically at startup without manual SQL migrations.
26
+ - **Zero-Config Database**: Powered by embedded SQLite (`siduri.sqlite`). Directives, Life DB, and Archive are initialized automatically at startup without manual SQL migrations.
27
27
 
28
28
  ## CLI Usage
29
29
 
@@ -1,6 +1,2 @@
1
1
  import { OrganConfiguratorContext, OrganConfigurationResult } from './types';
2
2
  export declare function configureArchive(_context: OrganConfiguratorContext): Promise<OrganConfigurationResult>;
3
- /**
4
- * @deprecated Use configureArchive instead. RFC VX-26-13.
5
- */
6
- export declare const configureMemory: typeof configureArchive;
@@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.configureMemory = void 0;
7
6
  exports.configureArchive = configureArchive;
8
7
  const inquirer_1 = __importDefault(require("inquirer"));
9
8
  async function configureArchive(_context) {
@@ -25,7 +24,3 @@ async function configureArchive(_context) {
25
24
  },
26
25
  };
27
26
  }
28
- /**
29
- * @deprecated Use configureArchive instead. RFC VX-26-13.
30
- */
31
- exports.configureMemory = configureArchive;
@@ -6,7 +6,6 @@ export * from './types';
6
6
  export * from './brain';
7
7
  export * from './knowledge';
8
8
  export * from './archive';
9
- export * from './memory';
10
9
  export * from './voice';
11
10
  export * from './body';
12
11
  export * from './hands';
@@ -30,7 +30,6 @@ __exportStar(require("./types"), exports);
30
30
  __exportStar(require("./brain"), exports);
31
31
  __exportStar(require("./knowledge"), exports);
32
32
  __exportStar(require("./archive"), exports);
33
- __exportStar(require("./memory"), exports);
34
33
  __exportStar(require("./voice"), exports);
35
34
  __exportStar(require("./body"), exports);
36
35
  __exportStar(require("./hands"), exports);
@@ -11,7 +11,7 @@ const openrouter_1 = require("./providers/openrouter");
11
11
  const knowledge_hub_1 = require("./providers/knowledge-hub");
12
12
  const brain_1 = require("./configurators/brain");
13
13
  const knowledge_1 = require("./configurators/knowledge");
14
- const memory_1 = require("./configurators/memory");
14
+ const archive_1 = require("./configurators/archive");
15
15
  const voice_1 = require("./configurators/voice");
16
16
  const body_1 = require("./configurators/body");
17
17
  const hands_1 = require("./configurators/hands");
@@ -216,10 +216,10 @@ describe('Guided Manifest-Driven Configuration UX Specification Tests', () => {
216
216
  });
217
217
  });
218
218
  describe('Other Organ Configurators & Generic Router', () => {
219
- test('Memory configurator configures SQLite with WAL and FTS5', async () => {
219
+ test('Archive configurator configures SQLite with WAL and FTS5', async () => {
220
220
  inquirer_1.default.prompt
221
221
  .mockResolvedValueOnce({ provider: 'sqlite' });
222
- const result = await (0, memory_1.configureMemory)({ companionName: 'Sparkle', manifest: archiveManifest });
222
+ const result = await (0, archive_1.configureArchive)({ companionName: 'Sparkle', manifest: archiveManifest });
223
223
  expect(result.config.provider).toBe('sqlite');
224
224
  expect(result.summary?.Database).toBe('SQLite (WAL + FTS5)');
225
225
  expect(result.summary?.Storage).toBe('siduri.sqlite');
package/dist/generator.js CHANGED
@@ -74,8 +74,8 @@ function getDefaultConfigForManifest(manifest) {
74
74
  function generateInstanceFiles(options) {
75
75
  const instanceName = options.name || 'my-siduri';
76
76
  const instanceId = options.id || 'default';
77
- const coreVersion = options.coreVersion || '^1.0.1';
78
- const cliVersion = options.cliVersion || '^1.0.1';
77
+ const coreVersion = options.coreVersion || '^1.0.2';
78
+ const cliVersion = options.cliVersion || '^1.0.2';
79
79
  const canonicalOrder = ['brain', 'archive', 'knowledge', 'behavior', 'voice', 'body', 'mouth', 'hands', 'vision', 'ear', 'observation'];
80
80
  const manifests = [...options.selectedManifests].sort((a, b) => {
81
81
  const idxA = canonicalOrder.indexOf(a.organType);
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { OrganManifest } from './manifest';
3
- export declare const CLI_VERSION = "1.0.1";
3
+ export declare const CLI_VERSION = "1.0.2";
4
4
  import { colors } from './colors';
5
5
  export { colors };
6
6
  export declare function printHeader(): void;
package/dist/index.js CHANGED
@@ -61,7 +61,7 @@ const doctor_1 = require("./doctor");
61
61
  const db_1 = require("./db");
62
62
  const configurators_1 = require("./configurators");
63
63
  const execFile = (0, node_util_1.promisify)(node_child_process_1.execFile);
64
- exports.CLI_VERSION = '1.0.1';
64
+ exports.CLI_VERSION = '1.0.2';
65
65
  const colors_1 = require("./colors");
66
66
  Object.defineProperty(exports, "colors", { enumerable: true, get: function () { return colors_1.colors; } });
67
67
  function printHeader() {
@@ -61,7 +61,7 @@ describe('Localweb and CLI Standalone 1:1 Runtime & Chat Parity', () => {
61
61
  metadata: {
62
62
  language: 'ja',
63
63
  internal_monologue: 'Monologue test',
64
- memory_proposals: [
64
+ claim_proposals: [
65
65
  {
66
66
  proposal_id: 'prop-1',
67
67
  subject: 'user',
@@ -105,8 +105,8 @@ describe('Localweb and CLI Standalone 1:1 Runtime & Chat Parity', () => {
105
105
  expect(result.response.audio_url).toBe('/voice/stream?id=speech-789');
106
106
  expect(result.response.evidence_ids).toEqual([]);
107
107
  // 3. Metadata proposals & events
108
- expect(result.metadata?.memory_proposals).toHaveLength(1);
109
- expect(result.metadata?.memory_proposals?.[0].proposal_id).toBe('prop-1');
108
+ expect(result.metadata?.claim_proposals).toHaveLength(1);
109
+ expect(result.metadata?.claim_proposals?.[0].proposal_id).toBe('prop-1');
110
110
  expect(result.metadata?.events).toHaveLength(1);
111
111
  expect(result.metadata?.events?.[0].expression).toBe('happy');
112
112
  // 4. Convenience backward-compatibility fields (no runtimeResult envelope nesting)
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="h-full antialiased dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content"/><link rel="stylesheet" href="/_next/static/css/ceeb8e5596664b11.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9073f434bc17ce16.js"/><script src="/_next/static/chunks/563b947f-8e2871a2ab7cd91e.js" async=""></script><script src="/_next/static/chunks/136-1d10af93b770a1c8.js" async=""></script><script src="/_next/static/chunks/main-app-9e6a144626e5a5b9.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&amp;family=Noto+Sans+JP:wght@400;500;700&amp;family=Noto+Serif+JP:wght@400;500;700&amp;display=swap" as="style"/><meta name="robots" content="noindex"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>404: This page could not be found.</title><meta name="theme-color" content="#0b0b0e"/><title>Siduri — Local-First Companion</title><meta name="description" content="Siduri — a local-first companion with explicit memory, grounded knowledge, and optional presence."/><link rel="icon" href="/favicon.ico?7715e5163ea8ac02" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.ico"/><link rel="icon" href="/favicon.svg" type="image/svg+xml"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&amp;family=Noto+Sans+JP:wght@400;500;700&amp;family=Noto+Serif+JP:wght@400;500;700&amp;display=swap" rel="stylesheet"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-9073f434bc17ce16.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8766,[],\"\"]\n3:I[356,[],\"\"]\n4:I[5127,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[5127,[],\"ViewportBoundary\"]\na:I[5127,[],\"MetadataBoundary\"]\nc:I[6886,[],\"default\",1]\n:HL[\"/_next/static/css/ceeb8e5596664b11.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500\u0026family=Noto+Sans+JP:wght@400;500;700\u0026family=Noto+Serif+JP:wght@400;500;700\u0026display=swap\",\"style\"]\n7:X\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ceeb8e5596664b11.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full antialiased dark\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500\u0026family=Noto+Sans+JP:wght@400;500;700\u0026family=Noto+Serif+JP:wght@400;500;700\u0026display=swap\",\"rel\":\"stylesheet\"}]]}],[\"$\",\"body\",null,{\"className\":\"min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"TAssFHX71jXsDINzGLNGT\"}\n"])</script><script>self.__next_f.push([1,"7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#0b0b0e\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[3366,[],\"IconMark\"]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Siduri — Local-First Companion\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Siduri — a local-first companion with explicit memory, grounded knowledge, and optional presence.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?7715e5163ea8ac02\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"5\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$Ld\",\"6\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="h-full antialiased dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content"/><link rel="stylesheet" href="/_next/static/css/ceeb8e5596664b11.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9073f434bc17ce16.js"/><script src="/_next/static/chunks/563b947f-8e2871a2ab7cd91e.js" async=""></script><script src="/_next/static/chunks/136-1d10af93b770a1c8.js" async=""></script><script src="/_next/static/chunks/main-app-9e6a144626e5a5b9.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&amp;family=Noto+Sans+JP:wght@400;500;700&amp;family=Noto+Serif+JP:wght@400;500;700&amp;display=swap" as="style"/><meta name="robots" content="noindex"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>404: This page could not be found.</title><meta name="theme-color" content="#0b0b0e"/><title>Siduri — Local-First Companion</title><meta name="description" content="Siduri — a local-first companion with explicit memory, grounded knowledge, and optional presence."/><link rel="icon" href="/favicon.ico?7715e5163ea8ac02" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.ico"/><link rel="icon" href="/favicon.svg" type="image/svg+xml"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&amp;family=Noto+Sans+JP:wght@400;500;700&amp;family=Noto+Serif+JP:wght@400;500;700&amp;display=swap" rel="stylesheet"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-9073f434bc17ce16.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8766,[],\"\"]\n3:I[356,[],\"\"]\n4:I[5127,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[5127,[],\"ViewportBoundary\"]\na:I[5127,[],\"MetadataBoundary\"]\nc:I[6886,[],\"default\",1]\n:HL[\"/_next/static/css/ceeb8e5596664b11.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500\u0026family=Noto+Sans+JP:wght@400;500;700\u0026family=Noto+Serif+JP:wght@400;500;700\u0026display=swap\",\"style\"]\n7:X\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ceeb8e5596664b11.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full antialiased dark\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500\u0026family=Noto+Sans+JP:wght@400;500;700\u0026family=Noto+Serif+JP:wght@400;500;700\u0026display=swap\",\"rel\":\"stylesheet\"}]]}],[\"$\",\"body\",null,{\"className\":\"min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"6myq7R-xRemzP7dQD6m1Q\"}\n"])</script><script>self.__next_f.push([1,"7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#0b0b0e\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[3366,[],\"IconMark\"]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Siduri — Local-First Companion\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Siduri — a local-first companion with explicit memory, grounded knowledge, and optional presence.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?7715e5163ea8ac02\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"5\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$Ld\",\"6\",{}]]\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="h-full antialiased dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content"/><link rel="stylesheet" href="/_next/static/css/ceeb8e5596664b11.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9073f434bc17ce16.js"/><script src="/_next/static/chunks/563b947f-8e2871a2ab7cd91e.js" async=""></script><script src="/_next/static/chunks/136-1d10af93b770a1c8.js" async=""></script><script src="/_next/static/chunks/main-app-9e6a144626e5a5b9.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&amp;family=Noto+Sans+JP:wght@400;500;700&amp;family=Noto+Serif+JP:wght@400;500;700&amp;display=swap" as="style"/><meta name="robots" content="noindex"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>404: This page could not be found.</title><meta name="theme-color" content="#0b0b0e"/><title>Siduri — Local-First Companion</title><meta name="description" content="Siduri — a local-first companion with explicit memory, grounded knowledge, and optional presence."/><link rel="icon" href="/favicon.ico?7715e5163ea8ac02" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.ico"/><link rel="icon" href="/favicon.svg" type="image/svg+xml"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&amp;family=Noto+Sans+JP:wght@400;500;700&amp;family=Noto+Serif+JP:wght@400;500;700&amp;display=swap" rel="stylesheet"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-9073f434bc17ce16.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8766,[],\"\"]\n3:I[356,[],\"\"]\n4:I[5127,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[5127,[],\"ViewportBoundary\"]\na:I[5127,[],\"MetadataBoundary\"]\nc:I[6886,[],\"default\",1]\n:HL[\"/_next/static/css/ceeb8e5596664b11.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500\u0026family=Noto+Sans+JP:wght@400;500;700\u0026family=Noto+Serif+JP:wght@400;500;700\u0026display=swap\",\"style\"]\n7:X\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ceeb8e5596664b11.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full antialiased dark\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500\u0026family=Noto+Sans+JP:wght@400;500;700\u0026family=Noto+Serif+JP:wght@400;500;700\u0026display=swap\",\"rel\":\"stylesheet\"}]]}],[\"$\",\"body\",null,{\"className\":\"min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"TAssFHX71jXsDINzGLNGT\"}\n"])</script><script>self.__next_f.push([1,"7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#0b0b0e\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[3366,[],\"IconMark\"]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Siduri — Local-First Companion\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Siduri — a local-first companion with explicit memory, grounded knowledge, and optional presence.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?7715e5163ea8ac02\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"5\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$Ld\",\"6\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="h-full antialiased dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content"/><link rel="stylesheet" href="/_next/static/css/ceeb8e5596664b11.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-9073f434bc17ce16.js"/><script src="/_next/static/chunks/563b947f-8e2871a2ab7cd91e.js" async=""></script><script src="/_next/static/chunks/136-1d10af93b770a1c8.js" async=""></script><script src="/_next/static/chunks/main-app-9e6a144626e5a5b9.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&amp;family=Noto+Sans+JP:wght@400;500;700&amp;family=Noto+Serif+JP:wght@400;500;700&amp;display=swap" as="style"/><meta name="robots" content="noindex"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>404: This page could not be found.</title><meta name="theme-color" content="#0b0b0e"/><title>Siduri — Local-First Companion</title><meta name="description" content="Siduri — a local-first companion with explicit memory, grounded knowledge, and optional presence."/><link rel="icon" href="/favicon.ico?7715e5163ea8ac02" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.ico"/><link rel="icon" href="/favicon.svg" type="image/svg+xml"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&amp;family=Noto+Sans+JP:wght@400;500;700&amp;family=Noto+Serif+JP:wght@400;500;700&amp;display=swap" rel="stylesheet"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-9073f434bc17ce16.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[8766,[],\"\"]\n3:I[356,[],\"\"]\n4:I[5127,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[5127,[],\"ViewportBoundary\"]\na:I[5127,[],\"MetadataBoundary\"]\nc:I[6886,[],\"default\",1]\n:HL[\"/_next/static/css/ceeb8e5596664b11.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500\u0026family=Noto+Sans+JP:wght@400;500;700\u0026family=Noto+Serif+JP:wght@400;500;700\u0026display=swap\",\"style\"]\n7:X\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ceeb8e5596664b11.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full antialiased dark\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500\u0026family=Noto+Sans+JP:wght@400;500;700\u0026family=Noto+Serif+JP:wght@400;500;700\u0026display=swap\",\"rel\":\"stylesheet\"}]]}],[\"$\",\"body\",null,{\"className\":\"min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"6myq7R-xRemzP7dQD6m1Q\"}\n"])</script><script>self.__next_f.push([1,"7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#0b0b0e\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[3366,[],\"IconMark\"]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Siduri — Local-First Companion\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Siduri — a local-first companion with explicit memory, grounded knowledge, and optional presence.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?7715e5163ea8ac02\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"5\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$Ld\",\"6\",{}]]\n"])</script></body></html>
@@ -2,7 +2,7 @@
2
2
  2:I[7443,["974","static/chunks/app/page-fc4bf56cf33ae27b.js"],""]
3
3
  :HL["/logo-circle.svg","image"]
4
4
  b:X
5
- 0:{"buildId":"TAssFHX71jXsDINzGLNGT","data":[{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"home-page bg-[#09090c] min-h-screen text-[var(--siduri-text-primary)] font-sans","children":[["$","header",null,{"className":"home-nav","children":["$","div",null,{"className":"home-container home-nav-inner flex items-center justify-between py-3 sm:py-4","children":[["$","$L2",null,{"href":"/","className":"brand-link flex items-center gap-2","aria-label":"Siduri Home","children":[["$","img",null,{"src":"/logo-circle.svg","alt":"Siduri-X Logo","className":"w-6 h-6 rounded-full shrink-0","width":24,"height":24}],["$","span",null,{"className":"font-bold tracking-widest text-sm","children":"SIDURI-X"}]]}],["$","nav",null,{"className":"nav-links hidden sm:flex gap-6 text-sm text-[var(--siduri-text-muted)]","aria-label":"Main Navigation","children":[["$","$L2",null,{"href":"/chat","className":"hover:text-[var(--siduri-text-primary)] transition-colors","children":"Chat"}],["$","$L2",null,{"href":"/operator","className":"hover:text-[var(--siduri-text-primary)] transition-colors","children":"Operator Console"}]]}],["$","div",null,{"className":"flex items-center gap-3","children":["$","$L2",null,{"href":"/chat","className":"nav-cta inline-flex items-center gap-1.5 text-xs font-mono border border-[var(--siduri-border-subtle)] px-3 sm:px-4 py-2 rounded-full hover:bg-[var(--siduri-surface)] transition-all","children":[["$","span",null,{"children":"Chat"}]," ",["$","svg",null,{"width":12,"height":12,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]}]]}]}],["$","main",null,{"children":[["$","section",null,{"className":"py-16 sm:py-24 md:py-32 border-b border-[var(--siduri-border-subtle)] relative overflow-hidden","children":["$","div",null,{"className":"home-container relative z-10 text-center flex flex-col items-center","children":[["$","div",null,{"className":"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-[var(--siduri-border-ember)] bg-[var(--siduri-tint-low)] text-[var(--siduri-ember-light)] text-[10px] font-mono tracking-widest uppercase mb-6 sm:mb-8 text-center max-w-full","children":[["$","span",null,{"className":"w-1.5 h-1.5 rounded-full bg-[var(--siduri-online)] shadow-[0_0_8px_rgba(127,199,154,0.6)] shrink-0"}],["$","span",null,{"className":"truncate","children":"Standalone Companion · Version 1.0"}]]}],["$","h1",null,{"className":"text-3xl sm:text-5xl md:text-6xl font-normal font-serif text-[var(--siduri-text-primary)] tracking-tight leading-[1.2] sm:leading-[1.15] mb-6 max-w-4xl px-2","children":"A companion grown through interaction, powered by sovereign primitives."}],["$","p",null,{"className":"text-sm sm:text-lg text-[var(--siduri-text-secondary)] font-sans leading-relaxed mb-8 sm:mb-10 max-w-2xl font-light px-2","children":"Siduri-X is an intelligent companion designed with sovereign life state, self-governing directives, and a modular organ architecture. She starts as a blank slate and forms her identity entirely through your interactions."}],["$","div",null,{"className":"flex flex-col sm:flex-row justify-center items-stretch sm:items-center gap-3 sm:gap-4 w-full max-w-md sm:max-w-none px-4","children":[["$","$L2",null,{"href":"/chat","className":"inline-flex justify-center items-center gap-3 px-6 py-3.5 rounded-xl bg-[var(--siduri-ember)] text-[#1b1619] font-sans font-semibold text-sm tracking-wide transition-all hover:brightness-110 shadow-[0_4px_20px_rgba(217,154,104,0.2)]","children":["Launch Companion",["$","svg",null,{"width":16,"height":16,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],"$L3"]}]]}],"$L4"]}]]}]}],"$L5","$L6","$L7"]}],"$L8"]}],null,"$L9"]}],"isPartial":"$@a","staleTime":"$b","varyParams":null},{"rsc":"$Lc","isPartial":"$@d","staleTime":"$b","varyParams":null},{"rsc":"$Le","isPartial":"$@f","staleTime":"$b","varyParams":null}],"isUpgradeableISRFallback":false,"a":"$@10","rootVaryParams":null,"needsRuntimeRequest":"$@11"}
5
+ 0:{"buildId":"6myq7R-xRemzP7dQD6m1Q","data":[{"rsc":["$","$1","c",{"children":[["$","div",null,{"className":"home-page bg-[#09090c] min-h-screen text-[var(--siduri-text-primary)] font-sans","children":[["$","header",null,{"className":"home-nav","children":["$","div",null,{"className":"home-container home-nav-inner flex items-center justify-between py-3 sm:py-4","children":[["$","$L2",null,{"href":"/","className":"brand-link flex items-center gap-2","aria-label":"Siduri Home","children":[["$","img",null,{"src":"/logo-circle.svg","alt":"Siduri-X Logo","className":"w-6 h-6 rounded-full shrink-0","width":24,"height":24}],["$","span",null,{"className":"font-bold tracking-widest text-sm","children":"SIDURI-X"}]]}],["$","nav",null,{"className":"nav-links hidden sm:flex gap-6 text-sm text-[var(--siduri-text-muted)]","aria-label":"Main Navigation","children":[["$","$L2",null,{"href":"/chat","className":"hover:text-[var(--siduri-text-primary)] transition-colors","children":"Chat"}],["$","$L2",null,{"href":"/operator","className":"hover:text-[var(--siduri-text-primary)] transition-colors","children":"Operator Console"}]]}],["$","div",null,{"className":"flex items-center gap-3","children":["$","$L2",null,{"href":"/chat","className":"nav-cta inline-flex items-center gap-1.5 text-xs font-mono border border-[var(--siduri-border-subtle)] px-3 sm:px-4 py-2 rounded-full hover:bg-[var(--siduri-surface)] transition-all","children":[["$","span",null,{"children":"Chat"}]," ",["$","svg",null,{"width":12,"height":12,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]}]]}]}],["$","main",null,{"children":[["$","section",null,{"className":"py-16 sm:py-24 md:py-32 border-b border-[var(--siduri-border-subtle)] relative overflow-hidden","children":["$","div",null,{"className":"home-container relative z-10 text-center flex flex-col items-center","children":[["$","div",null,{"className":"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-[var(--siduri-border-ember)] bg-[var(--siduri-tint-low)] text-[var(--siduri-ember-light)] text-[10px] font-mono tracking-widest uppercase mb-6 sm:mb-8 text-center max-w-full","children":[["$","span",null,{"className":"w-1.5 h-1.5 rounded-full bg-[var(--siduri-online)] shadow-[0_0_8px_rgba(127,199,154,0.6)] shrink-0"}],["$","span",null,{"className":"truncate","children":"Standalone Companion · Version 1.0"}]]}],["$","h1",null,{"className":"text-3xl sm:text-5xl md:text-6xl font-normal font-serif text-[var(--siduri-text-primary)] tracking-tight leading-[1.2] sm:leading-[1.15] mb-6 max-w-4xl px-2","children":"A companion grown through interaction, powered by sovereign primitives."}],["$","p",null,{"className":"text-sm sm:text-lg text-[var(--siduri-text-secondary)] font-sans leading-relaxed mb-8 sm:mb-10 max-w-2xl font-light px-2","children":"Siduri-X is an intelligent companion designed with sovereign life state, self-governing directives, and a modular organ architecture. She starts as a blank slate and forms her identity entirely through your interactions."}],["$","div",null,{"className":"flex flex-col sm:flex-row justify-center items-stretch sm:items-center gap-3 sm:gap-4 w-full max-w-md sm:max-w-none px-4","children":[["$","$L2",null,{"href":"/chat","className":"inline-flex justify-center items-center gap-3 px-6 py-3.5 rounded-xl bg-[var(--siduri-ember)] text-[#1b1619] font-sans font-semibold text-sm tracking-wide transition-all hover:brightness-110 shadow-[0_4px_20px_rgba(217,154,104,0.2)]","children":["Launch Companion",["$","svg",null,{"width":16,"height":16,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],"$L3"]}]]}],"$L4"]}]]}]}],"$L5","$L6","$L7"]}],"$L8"]}],null,"$L9"]}],"isPartial":"$@a","staleTime":"$b","varyParams":null},{"rsc":"$Lc","isPartial":"$@d","staleTime":"$b","varyParams":null},{"rsc":"$Le","isPartial":"$@f","staleTime":"$b","varyParams":null}],"isUpgradeableISRFallback":false,"a":"$@10","rootVaryParams":null,"needsRuntimeRequest":"$@11"}
6
6
  17:I[5127,[],"OutletBoundary"]
7
7
  18:"$Sreact.suspense"
8
8
  1a:I[5127,[],"ViewportBoundary"]
@@ -6,7 +6,7 @@
6
6
  :HL["/_next/static/css/ceeb8e5596664b11.css","style"]
7
7
  :HL["https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Noto+Sans+JP:wght@400;500;700&family=Noto+Serif+JP:wght@400;500;700&display=swap","style"]
8
8
  :HL["/logo-circle.svg","image"]
9
- 0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ceeb8e5596664b11.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"h-full antialiased dark","children":[["$","head",null,{"children":[["$","link",null,{"rel":"preconnect","href":"https://fonts.googleapis.com"}],["$","link",null,{"rel":"preconnect","href":"https://fonts.gstatic.com","crossOrigin":"anonymous"}],["$","link",null,{"href":"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Noto+Sans+JP:wght@400;500;700&family=Noto+Serif+JP:wght@400;500;700&display=swap","rel":"stylesheet"}]]}],["$","body",null,{"className":"min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"className":"home-page bg-[#09090c] min-h-screen text-[var(--siduri-text-primary)] font-sans","children":[["$","header",null,{"className":"home-nav","children":["$","div",null,{"className":"home-container home-nav-inner flex items-center justify-between py-3 sm:py-4","children":[["$","$L4",null,{"href":"/","className":"brand-link flex items-center gap-2","aria-label":"Siduri Home","children":[["$","img",null,{"src":"/logo-circle.svg","alt":"Siduri-X Logo","className":"w-6 h-6 rounded-full shrink-0","width":24,"height":24}],["$","span",null,{"className":"font-bold tracking-widest text-sm","children":"SIDURI-X"}]]}],["$","nav",null,{"className":"nav-links hidden sm:flex gap-6 text-sm text-[var(--siduri-text-muted)]","aria-label":"Main Navigation","children":[["$","$L4",null,{"href":"/chat","className":"hover:text-[var(--siduri-text-primary)] transition-colors","children":"Chat"}],["$","$L4",null,{"href":"/operator","className":"hover:text-[var(--siduri-text-primary)] transition-colors","children":"Operator Console"}]]}],["$","div",null,{"className":"flex items-center gap-3","children":["$","$L4",null,{"href":"/chat","className":"nav-cta inline-flex items-center gap-1.5 text-xs font-mono border border-[var(--siduri-border-subtle)] px-3 sm:px-4 py-2 rounded-full hover:bg-[var(--siduri-surface)] transition-all","children":[["$","span",null,{"children":"Chat"}]," ",["$","svg",null,{"width":12,"height":12,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","className":"$undefined","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]}]]}]}],["$","main",null,{"children":[["$","section",null,{"className":"py-16 sm:py-24 md:py-32 border-b border-[var(--siduri-border-subtle)] relative overflow-hidden","children":["$","div",null,{"className":"home-container relative z-10 text-center flex flex-col items-center","children":[["$","div",null,{"className":"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-[var(--siduri-border-ember)] bg-[var(--siduri-tint-low)] text-[var(--siduri-ember-light)] text-[10px] font-mono tracking-widest uppercase mb-6 sm:mb-8 text-center max-w-full","children":["$L5","$L6"]}],"$L7","$L8","$L9"]}]}],"$La","$Lb","$Lc"]}],"$Ld"]}],null,"$Le"]}],{},null,false,null]},null,false,null],"$Lf",false]],"m":"$undefined","G":["$10",[]],"S":true,"h":null,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"TAssFHX71jXsDINzGLNGT"}
9
+ 0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ceeb8e5596664b11.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"h-full antialiased dark","children":[["$","head",null,{"children":[["$","link",null,{"rel":"preconnect","href":"https://fonts.googleapis.com"}],["$","link",null,{"rel":"preconnect","href":"https://fonts.gstatic.com","crossOrigin":"anonymous"}],["$","link",null,{"href":"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Noto+Sans+JP:wght@400;500;700&family=Noto+Serif+JP:wght@400;500;700&display=swap","rel":"stylesheet"}]]}],["$","body",null,{"className":"min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","div",null,{"className":"home-page bg-[#09090c] min-h-screen text-[var(--siduri-text-primary)] font-sans","children":[["$","header",null,{"className":"home-nav","children":["$","div",null,{"className":"home-container home-nav-inner flex items-center justify-between py-3 sm:py-4","children":[["$","$L4",null,{"href":"/","className":"brand-link flex items-center gap-2","aria-label":"Siduri Home","children":[["$","img",null,{"src":"/logo-circle.svg","alt":"Siduri-X Logo","className":"w-6 h-6 rounded-full shrink-0","width":24,"height":24}],["$","span",null,{"className":"font-bold tracking-widest text-sm","children":"SIDURI-X"}]]}],["$","nav",null,{"className":"nav-links hidden sm:flex gap-6 text-sm text-[var(--siduri-text-muted)]","aria-label":"Main Navigation","children":[["$","$L4",null,{"href":"/chat","className":"hover:text-[var(--siduri-text-primary)] transition-colors","children":"Chat"}],["$","$L4",null,{"href":"/operator","className":"hover:text-[var(--siduri-text-primary)] transition-colors","children":"Operator Console"}]]}],["$","div",null,{"className":"flex items-center gap-3","children":["$","$L4",null,{"href":"/chat","className":"nav-cta inline-flex items-center gap-1.5 text-xs font-mono border border-[var(--siduri-border-subtle)] px-3 sm:px-4 py-2 rounded-full hover:bg-[var(--siduri-surface)] transition-all","children":[["$","span",null,{"children":"Chat"}]," ",["$","svg",null,{"width":12,"height":12,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round","className":"$undefined","aria-hidden":"true","children":[["$","line",null,{"x1":"5","y1":"12","x2":"19","y2":"12"}],["$","polyline",null,{"points":"12 5 19 12 12 19"}]]}]]}]}]]}]}],["$","main",null,{"children":[["$","section",null,{"className":"py-16 sm:py-24 md:py-32 border-b border-[var(--siduri-border-subtle)] relative overflow-hidden","children":["$","div",null,{"className":"home-container relative z-10 text-center flex flex-col items-center","children":[["$","div",null,{"className":"inline-flex items-center gap-2 px-3 py-1 rounded-full border border-[var(--siduri-border-ember)] bg-[var(--siduri-tint-low)] text-[var(--siduri-ember-light)] text-[10px] font-mono tracking-widest uppercase mb-6 sm:mb-8 text-center max-w-full","children":["$L5","$L6"]}],"$L7","$L8","$L9"]}]}],"$La","$Lb","$Lc"]}],"$Ld"]}],null,"$Le"]}],{},null,false,null]},null,false,null],"$Lf",false]],"m":"$undefined","G":["$10",[]],"S":true,"h":null,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"6myq7R-xRemzP7dQD6m1Q"}
10
10
  16:I[5127,[],"OutletBoundary"]
11
11
  17:"$Sreact.suspense"
12
12
  19:I[5127,[],"ViewportBoundary"]
@@ -1,4 +1,4 @@
1
1
  :HL["/_next/static/css/ceeb8e5596664b11.css","style"]
2
2
  :HL["https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Noto+Sans+JP:wght@400;500;700&family=Noto+Serif+JP:wght@400;500;700&display=swap","style"]
3
3
  :HL["/logo-circle.svg","image"]
4
- 0:{"tree":{"name":"","param":null,"prefetchHints":4176,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}},"staleTime":300,"buildId":"TAssFHX71jXsDINzGLNGT"}
4
+ 0:{"tree":{"name":"","param":null,"prefetchHints":4176,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":4256,"slots":null}}},"staleTime":300,"buildId":"6myq7R-xRemzP7dQD6m1Q"}
@@ -27,7 +27,7 @@ void main() {
27
27
  }
28
28
  gl_FragColor = vec4(1.0);
29
29
  }
30
- `;function p(e,t,s){let a=e.createShader(t);if(!a)throw Error("Failed to create shader");if(e.shaderSource(a,s),e.compileShader(a),!e.getShaderParameter(a,e.COMPILE_STATUS)){let t=e.getShaderInfoLog(a);throw e.deleteShader(a),Error(`Shader compilation error: ${t}`)}return a}class x{constructor(e){this.gl=null,this.program=null,this.maskProgram=null,this.vertexBuffer=null,this.uvBuffer=null,this.indexBuffer=null,this.aPositionLocation=-1,this.aTexCoordLocation=-1,this.uMatrixLocation=null,this.uTextureLocation=null,this.uOpacityLocation=null,this.maskAPositionLocation=-1,this.maskATexCoordLocation=-1,this.maskUMatrixLocation=null,this.maskUTextureLocation=null,this.textures=[],this.moc=null,this.model=null,this.core=null,this.paramIndices=new Map,this.isDisposed=!1,this.modelBounds={minX:-.39,maxX:.4,minY:-.98,maxY:.18,width:.79,height:1.16,centerX:.006,centerY:-.4},this.canvas=e}initialize(e,t){this.core=e;let s={alpha:!0,premultipliedAlpha:!0,preserveDrawingBuffer:!1,antialias:!0,stencil:!0},a=this.canvas.getContext("webgl",s)||this.canvas.getContext("experimental-webgl",s)||this.canvas.getContext("webgl2",s);if(!a)throw Error("WebGL is not supported in this browser environment");this.gl=a;let i=p(a,a.VERTEX_SHADER,m),r=p(a,a.FRAGMENT_SHADER,u),n=a.createProgram();if(!n)throw Error("Failed to create WebGL program");if(a.attachShader(n,i),a.attachShader(n,r),a.linkProgram(n),!a.getProgramParameter(n,a.LINK_STATUS))throw Error(`Program link error: ${a.getProgramInfoLog(n)}`);this.program=n,this.aPositionLocation=a.getAttribLocation(n,"a_position"),this.aTexCoordLocation=a.getAttribLocation(n,"a_texCoord"),this.uMatrixLocation=a.getUniformLocation(n,"u_matrix"),this.uTextureLocation=a.getUniformLocation(n,"u_texture"),this.uOpacityLocation=a.getUniformLocation(n,"u_opacity");let o=p(a,a.FRAGMENT_SHADER,h),l=a.createProgram();if(!l)throw Error("Failed to create Mask WebGL program");if(a.attachShader(l,i),a.attachShader(l,o),a.linkProgram(l),!a.getProgramParameter(l,a.LINK_STATUS))throw Error(`Mask Program link error: ${a.getProgramInfoLog(l)}`);if(this.maskProgram=l,this.maskAPositionLocation=a.getAttribLocation(l,"a_position"),this.maskATexCoordLocation=a.getAttribLocation(l,"a_texCoord"),this.maskUMatrixLocation=a.getUniformLocation(l,"u_matrix"),this.maskUTextureLocation=a.getUniformLocation(l,"u_texture"),this.vertexBuffer=a.createBuffer(),this.uvBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,1),this.textures=t.textures.map(e=>{let t=a.createTexture();if(!t)throw Error("Failed to create WebGL texture");return a.bindTexture(a.TEXTURE_2D,t),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR_MIPMAP_NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,e),a.generateMipmap(a.TEXTURE_2D),t}),this.moc=e.Moc.fromArrayBuffer(t.mocBuffer),!this.moc)throw Error("Failed to create Live2D Moc from ArrayBuffer");if(this.model=e.Model.fromMoc(this.moc),!this.model)throw Error("Failed to create Live2D Model from Moc");let c=this.model.parameters.ids;for(let e=0;e<c.length;e++)this.paramIndices.set(c[e],e);this.initializeNeutralMouth(),this.model.update(),this.calculateModelBounds()}initializeNeutralMouth(){this.model&&(this.setParamDirect("ParamMouthOpenY",0),this.setParamDirect("ParamMouthForm",0))}setParamDirect(e,t){let s=this.paramIndices.get(e);if(void 0!==s&&this.model){let e=this.model.parameters.minimumValues[s],a=this.model.parameters.maximumValues[s];this.model.parameters.values[s]=Math.max(e,Math.min(a,t))}}calculateModelBounds(){if(!this.model)return;let e=this.model.drawables,t=e.count,s=1/0,a=-1/0,i=1/0,r=-1/0;for(let n=0;n<t;n++){let t=e.vertexPositions[n];if(t&&0!==t.length)for(let e=0;e<t.length;e+=2){let n=t[e],o=t[e+1];n<s&&(s=n),n>a&&(a=n),o<i&&(i=o),o>r&&(r=o)}}s!==1/0&&a!==-1/0&&i!==1/0&&r!==-1/0&&(this.modelBounds={minX:s,maxX:a,minY:i,maxY:r,width:a-s,height:r-i,centerX:(s+a)/2,centerY:(i+r)/2})}getModelBounds(){return{...this.modelBounds}}setParam(e,t,s=1){let a=this.paramIndices.get(e);if(void 0!==a&&this.model){let e=this.model.parameters.values[a],i=Math.max(this.model.parameters.minimumValues[a],Math.min(this.model.parameters.maximumValues[a],t));this.model.parameters.values[a]=e+(i-e)*s}}render(e,t=Date.now()){let s;if(this.isDisposed||!this.gl||!this.model||!this.program)return;let a=this.gl,i=this.canvas.width,r=this.canvas.height;if(0===i||0===r)return;let n=e.calculateFrameParameters(t);this.setParam("ParamAngleX",n.angleX,.2),this.setParam("ParamAngleY",n.angleY,.2),this.setParam("ParamAngleZ",n.angleZ,.2),this.setParam("ParamBodyAngleX",n.bodyAngleX,.15),this.setParam("ParamBreath",n.breath,.3),this.setParam("ParamEyeLOpen",n.eyeOpenL,.4),this.setParam("ParamEyeROpen",n.eyeOpenR,.4),this.setParam("ParamMouthOpenY",n.mouthOpenY,.35);let o=function(e){if(!e)return"neutral";switch(e.toLowerCase().trim()){case"surprised":return"face_aozame.exp3.json";case"concerned":case"thinking":return"eyes_zetubou.exp3.json";case"happy":return"hair_open.exp3.json";default:return"neutral"}}(e.expression);"face_aozame.exp3.json"===o?(this.setParam("Param10",1,.2),this.setParam("Param9",0,.15),this.setParam("Param11",0,.15),this.setParam("Param12",0,.15)):"eyes_zetubou.exp3.json"===o?(this.setParam("Param9",1,.2),this.setParam("Param10",0,.15),this.setParam("Param11",0,.15),this.setParam("Param12",0,.15)):"hair_open.exp3.json"===o?(this.setParam("Param11",1,.2),this.setParam("Param10",0,.15),this.setParam("Param9",0,.15),this.setParam("Param12",0,.15)):"eye_color.exp3.json"===o?(this.setParam("Param12",1,.2),this.setParam("Param10",0,.15),this.setParam("Param9",0,.15),this.setParam("Param11",0,.15)):(this.setParam("Param10",0,.15),this.setParam("Param9",0,.15),this.setParam("Param11",0,.15),this.setParam("Param12",0,.15)),this.model.update(),a.viewport(0,0,i,r),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT|a.STENCIL_BUFFER_BIT),a.enable(a.BLEND),a.blendFunc(a.ONE,a.ONE_MINUS_SRC_ALPHA),a.useProgram(this.program);let l=i/r,c=this.modelBounds.width,d=this.modelBounds.height,m=this.modelBounds.centerX,u=this.modelBounds.centerY,h=(s=l>=c/d?1.84/d:1.84/c*l)/l,p=new Float32Array([h,0,0,0,0,s,0,0,0,0,1,0,-m*h,-u*s,0,1]);a.uniformMatrix4fv(this.uMatrixLocation,!1,p),a.uniform1i(this.uTextureLocation,0);let x=this.model.drawables,f=x.count,v=x.renderOrders,b=[];for(let e=0;e<f;e++)b.push(e);b.sort((e,t)=>v[e]-v[t]),a.enableVertexAttribArray(this.aPositionLocation),a.enableVertexAttribArray(this.aTexCoordLocation);let g=(e,t)=>{let s=void 0!==t?t:x.opacities[e];if(s<=.001)return;let i=x.textureIndices[e],r=this.textures[i];if(!r)return;a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,r),a.uniform1f(this.uOpacityLocation,s);let n=x.vertexPositions[e];a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,n,a.DYNAMIC_DRAW),a.vertexAttribPointer(this.aPositionLocation,2,a.FLOAT,!1,0,0);let o=x.vertexUvs[e];a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),a.bufferData(a.ARRAY_BUFFER,o,a.DYNAMIC_DRAW),a.vertexAttribPointer(this.aTexCoordLocation,2,a.FLOAT,!1,0,0);let l=x.indices[e];a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,l,a.DYNAMIC_DRAW),a.drawElements(a.TRIANGLES,l.length,a.UNSIGNED_SHORT,0)},j=e=>{if(!this.maskProgram)return;a.useProgram(this.maskProgram),a.uniformMatrix4fv(this.maskUMatrixLocation,!1,p),a.uniform1i(this.maskUTextureLocation,0),a.enableVertexAttribArray(this.maskAPositionLocation),a.enableVertexAttribArray(this.maskATexCoordLocation);let t=x.textureIndices[e],s=this.textures[t];if(!s)return;a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,s);let i=x.vertexPositions[e];a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,i,a.DYNAMIC_DRAW),a.vertexAttribPointer(this.maskAPositionLocation,2,a.FLOAT,!1,0,0);let r=x.vertexUvs[e];a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),a.bufferData(a.ARRAY_BUFFER,r,a.DYNAMIC_DRAW),a.vertexAttribPointer(this.maskATexCoordLocation,2,a.FLOAT,!1,0,0);let n=x.indices[e];a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,n,a.DYNAMIC_DRAW),a.drawElements(a.TRIANGLES,n.length,a.UNSIGNED_SHORT,0),a.useProgram(this.program),a.enableVertexAttribArray(this.aPositionLocation),a.enableVertexAttribArray(this.aTexCoordLocation)},y=-1;for(let e of b)if(!(x.opacities[e]<=.001))if(x.maskCounts[e]>0){let t=x.masks[e][0];t!==y&&(y=t,a.enable(a.STENCIL_TEST),a.stencilMask(255),a.clear(a.STENCIL_BUFFER_BIT),a.stencilFunc(a.ALWAYS,1,255),a.stencilOp(a.KEEP,a.KEEP,a.REPLACE),a.colorMask(!1,!1,!1,!1),j(t),a.colorMask(!0,!0,!0,!0)),a.stencilFunc(a.EQUAL,1,255),a.stencilOp(a.KEEP,a.KEEP,a.KEEP),g(e)}else -1!==y&&(a.disable(a.STENCIL_TEST),y=-1),g(e);-1!==y&&a.disable(a.STENCIL_TEST)}dispose(){if(this.isDisposed=!0,this.gl){for(let e of this.textures)this.gl.deleteTexture(e);this.textures=[],this.vertexBuffer&&this.gl.deleteBuffer(this.vertexBuffer),this.uvBuffer&&this.gl.deleteBuffer(this.uvBuffer),this.indexBuffer&&this.gl.deleteBuffer(this.indexBuffer),this.program&&this.gl.deleteProgram(this.program)}this.model&&"function"==typeof this.model.release&&this.model.release(),this.moc&&"function"==typeof this.moc.release&&this.moc.release(),this.model=null,this.moc=null,this.gl=null}}function f({modelUrl:e,expression:t="neutral",action:s="idle",state:r="idle",speechId:n,lipSyncValue:o,durationMs:m,className:u="",onStatusChange:h}){let p=(0,i.useRef)(null),v=(0,i.useRef)(null),b=(0,i.useRef)(new l({expression:t,action:s,state:r,speechId:n,lipSyncValue:o,durationMs:m})),g=(0,i.useRef)(null),j=(0,i.useRef)(null),[y,N]=(0,i.useState)("loading"),[w,C]=(0,i.useState)(null),[k,P]=(0,i.useState)(0);return(0,i.useEffect)(()=>{if(!window.matchMedia)return;let e=window.matchMedia("(prefers-reduced-motion: reduce)"),t=()=>{b.current.setReducedMotion(e.matches)};return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]),(0,i.useEffect)(()=>{b.current.updateConfig({expression:t,action:s,state:r,speechId:n,lipSyncValue:o,durationMs:m})},[t,s,r,n,o,m]),(0,i.useEffect)(()=>{let t=!1,s=null;async function a(){if(v.current&&p.current){if(!e){N("error"),C("No Live2D model configured. Place model in assets/body/<name>/"),h?.("error","No Live2D model URL specified");return}N("loading"),h?.("loading"),C(null);try{let a=await c();if(t)return;let i=await d(e);if(t)return;let r=v.current;if(!r)return;let n=new x(r);n.initialize(a,i),g.current=n;let o=()=>{if(!p.current||!v.current)return;let e=p.current.getBoundingClientRect();if(e.width<=0||e.height<=0)return;let t=Math.min(window.devicePixelRatio||1,2),s=Math.max(1,Math.floor(e.width*t)),a=Math.max(1,Math.floor(e.height*t));(v.current.width!==s||v.current.height!==a)&&(v.current.width=s,v.current.height=a)};o(),(s=new ResizeObserver(o)).observe(p.current);let l=()=>{t||(g.current&&g.current.render(b.current,performance.now()),j.current=requestAnimationFrame(l))};j.current=requestAnimationFrame(l),N("ready"),h?.("ready")}catch(s){if(t)return;let e=s?.message||"Failed to initialize Live2D avatar";console.warn("[AvatarCanvas] Initialization error:",s),N("error"),C("Avatar model unavailable or failed to load."),h?.("error",e)}}}a();let i=v.current,r=e=>{e.preventDefault(),console.warn("[AvatarCanvas] WebGL context lost"),j.current&&cancelAnimationFrame(j.current),N("error"),C("WebGL context lost.")},n=()=>{console.log("[AvatarCanvas] WebGL context restored, re-initializing..."),a()};return i&&(i.addEventListener("webglcontextlost",r,!1),i.addEventListener("webglcontextrestored",n,!1)),()=>{t=!0,j.current&&(cancelAnimationFrame(j.current),j.current=null),s&&s.disconnect(),i&&(i.removeEventListener("webglcontextlost",r),i.removeEventListener("webglcontextrestored",n)),g.current&&(g.current.dispose(),g.current=null)}},[e,k,h]),(0,a.jsxs)("div",{ref:p,"data-testid":"avatar-canvas-container",className:`relative w-full h-full min-h-0 flex items-center justify-center overflow-hidden bg-transparent ${u}`,"aria-label":"Live2D Companion Presence",children:[(0,a.jsx)("canvas",{ref:v,role:"img","data-testid":"avatar-webgl-canvas","aria-label":"Live2D companion presence",style:{width:"100%",height:"100%",display:"block"},className:`absolute inset-0 w-full h-full block transition-opacity duration-500 ${"ready"===y?"opacity-100":"opacity-0"}`}),"loading"===y&&(0,a.jsxs)("div",{role:"status","aria-live":"polite",className:"absolute inset-0 flex flex-col items-center justify-center gap-3 bg-[#0b0b0e]/90 text-[var(--siduri-text-muted)]",children:[(0,a.jsx)("div",{className:"siduri-glyph w-10 h-10 text-base animate-pulse motion-reduce:animate-none",children:"✦"}),(0,a.jsx)("span",{className:"text-[11px] font-mono tracking-widest uppercase text-[var(--siduri-ember-light)]",children:"Initializing Presence..."})]}),"error"===y&&(0,a.jsxs)("div",{role:"alert","aria-live":"polite",className:"absolute inset-0 flex flex-col items-center justify-center p-6 text-center bg-[#0b0b0e]/95 text-[var(--siduri-text-muted)]",children:[(0,a.jsx)("div",{className:"w-8 h-8 rounded-full border border-[var(--siduri-border-subtle)] grid place-items-center text-xs text-[var(--siduri-text-dim)] mb-2 font-mono",children:"!"}),(0,a.jsx)("p",{className:"text-xs font-sans text-[var(--siduri-text-secondary)] mb-1",children:w||"Avatar unavailable in this browser."}),(0,a.jsx)("span",{className:"text-[10px] font-mono text-[var(--siduri-text-dim)] mb-3",children:"Conversational text mode remains active"}),(0,a.jsx)("button",{type:"button",onClick:()=>P(e=>e+1),className:"px-3 py-1 text-[11px] font-mono tracking-wider uppercase rounded border border-[var(--siduri-border-subtle)] hover:border-[var(--siduri-border-ember)] text-[var(--siduri-text-secondary)] hover:text-[var(--siduri-text-primary)] transition-colors focus-visible:ring-1 focus-visible:ring-[var(--siduri-border-ember)] outline-none","aria-label":"Retry avatar initialization",children:"Retry"})]})]})}var v=s(2914);function b({modelUrl:e,expression:t="neutral",action:r="idle",state:n="idle",speechId:o,lipSyncValue:l,durationMs:c,className:d="",vrmConfig:m,onStatusChange:u}){let h=(0,i.useRef)(null),p=(0,i.useRef)(null),x=(0,i.useRef)(null),[f,v]=(0,i.useState)("loading"),[g,j]=(0,i.useState)(null);return(0,i.useEffect)(()=>{x.current&&x.current.updateState({expression:t,action:r,state:n,speechId:o,lipSyncValue:l,lookAtMode:m?.lookAtMode||"camera"})},[t,r,n,o,l,m]),(0,i.useEffect)(()=>{let t=!1,a=null;return async function(){if(p.current&&h.current){if(!e){v("error");let e="No VRM model URL specified. Place model (.vrm) in assets/body/<name>/";j(e),u?.("error",e);return}v("loading"),u?.("loading"),j(null);try{let i=p.current,{VRMController:r}=await Promise.all([s.e(389),s.e(368),s.e(672),s.e(411),s.e(202)]).then(s.bind(s,7202));if(t)return;let n=new r(i,m);if(x.current=n,await n.loadModel(e),t)return void n.dispose();let o=()=>{if(!h.current||!p.current)return;let e=h.current.getBoundingClientRect();e.width<=0||e.height<=0||n.resize(e.width,e.height)};o(),(a=new ResizeObserver(o)).observe(h.current),n.startLoop(),v("ready"),u?.("ready")}catch(s){if(t)return;let e=s?.message||"Failed to initialize 3D VRM avatar canvas";console.error("[VRM] Initialization error:",s),v("error"),j(e),u?.("error",e)}}}(),()=>{t=!0,a&&a.disconnect(),x.current&&(x.current.dispose(),x.current=null)}},[e]),(0,a.jsxs)("div",{ref:h,className:`relative w-full h-full flex items-center justify-center overflow-hidden select-none bg-transparent ${d}`,"data-testid":"vrm-canvas-container",children:[(0,a.jsx)("canvas",{ref:p,className:"w-full h-full block touch-none","data-testid":"vrm-canvas-element"}),"loading"===f&&(0,a.jsxs)("div",{className:"absolute inset-0 flex flex-col items-center justify-center bg-black/40 backdrop-blur-xs text-xs font-mono text-[var(--siduri-text-secondary)] pointer-events-none transition-opacity",children:[(0,a.jsx)("div",{className:"w-6 h-6 rounded-full border-2 border-[var(--siduri-ember)] border-t-transparent animate-spin mb-2"}),(0,a.jsx)("span",{children:"Loading 3D VRM avatar..."})]}),"error"===f&&(0,a.jsxs)("div",{className:"absolute inset-0 flex flex-col items-center justify-center p-6 text-center bg-black/60 text-xs font-mono text-red-400",children:[(0,a.jsx)("span",{className:"font-semibold mb-1",children:"Avatar Error"}),(0,a.jsx)("span",{className:"opacity-80 max-w-sm",children:g})]})]})}var g=s(8839);let j="siduri.chat.conversations.v1";function y(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function N(e){return new Intl.DateTimeFormat(void 0,{hour:"numeric",minute:"2-digit"}).format(e)}function w(e){if("[interrupted]"===e.content)return{...e,content:"",interrupted:!0,interruptionReason:"interrupted"};if(e.content&&e.content.endsWith(" [interrupted]"))return{...e,content:e.content.slice(0,-14).trim(),interrupted:!0,interruptionReason:"interrupted"};if(e.content&&e.content.startsWith("I couldn’t reach the orchestrator. ")){let t=e.content.slice(35);return{...e,content:"",error:t}}return e}function C(e){switch(e){case"client_disconnect":return{label:"Disconnected",text:"Response stopped due to connection close.",hint:"The connection to the companion service closed prematurely."};case"user_stop":return{label:"Stopped",text:"Response stopped by user.",hint:"Generation was manually cancelled via the stop control."};case"user_barge_in":return{label:"Interrupted",text:"Response interrupted by new message.",hint:"Generation was cancelled because a new prompt was submitted."};case"timeout":return{label:"Timed Out",text:"Response timed out.",hint:"The request exceeded the allotted time limit before finishing."};default:return{label:"Interrupted",text:"Response was interrupted.",hint:e&&"interrupted"!==e?`Reason: ${e}`:void 0}}}function k(){let e,t,s,o,l,c,d,m,[u,h]=(0,i.useState)([]),[p,x]=(0,i.useState)(null),[k,P]=(0,i.useState)(""),[A,E]=(0,i.useState)("connecting"),[L,R]=(0,i.useState)(!1),[S,_]=(0,i.useState)(!1),[T,I]=(0,i.useState)(!1),[D,M]=(0,i.useState)(!1),[B,F]=(0,i.useState)(!1),[U,$]=(0,i.useState)(!1),[z,O]=(0,i.useState)(null),[X,Y]=(0,i.useState)(void 0),[W,V]=(0,i.useState)("unknown"),[q,G]=(0,i.useState)(void 0),[Z,H]=(0,i.useState)("hybrid"),[K,J]=(0,i.useState)("hybrid"),[Q,ee]=(0,i.useState)("off"),[et,es]=(0,i.useState)("Siduri"),[ea,ei]=(0,i.useState)(null),[er,en]=(0,i.useState)(!1),[eo,el]=(0,i.useState)(null),[ec,ed]=(0,i.useState)({}),[em,eu]=(0,i.useState)(null),eh=(0,i.useRef)(null),[ep,ex]=(0,i.useState)({}),[ef,ev]=(0,i.useState)({}),[eb,eg]=(0,i.useState)(null),ej=(0,i.useRef)(null),ey=(0,i.useRef)(null),eN=(0,i.useRef)(null),ew=(0,i.useMemo)(()=>u.find(e=>e.id===p)??null,[p,u]);function eC(){return{id:y(),title:"New conversation",messages:[],updatedAt:Date.now()}}function ek(e,t){h(s=>s.map(s=>s.id===e?t(s):s))}async function eP(e){e.preventDefault();let t=k.trim();if(!t)return;if(/\[[^\]]+\]/.test(t))return void E("replace the blanks first");L&&eN.current&&(eN.current.abort("user_barge_in"),eN.current=null,(0,g.Uo)("default","user_barge_in"));let s=ew;s||(s=eC(),h(e=>[s,...e]),x(s.id));let a=s.messages.filter(e=>!("assistant"===e.role&&!e.content.trim()&&!e.error&&!e.interrupted)),i={id:y(),role:"user",content:t,createdAt:Date.now()},r=y(),n=[...a,i,{id:r,role:"assistant",content:"",createdAt:Date.now()}],o=0===s.messages.length?t.slice(0,42):s.title;ek(s.id,e=>({...e,title:o,messages:n,updatedAt:Date.now()})),P(""),R(!0),E("streaming");let l=new AbortController;eN.current=l;try{await (0,g.ZB)("/chat/stream",{id:"default",message:t,medium:"web",mode:Z,subtitleLanguage:"off"!==Q?Q:void 0,history:s.messages.slice(-20).map(e=>({role:e.role,content:e.content}))},{onStaged:e=>{e?.mode&&("casual"===e.mode||"teach"===e.mode||"hybrid"===e.mode)&&J(e.mode)},onAvatar:e=>{let t=e.speech_id;ey.current&&clearTimeout(ey.current),O({eventId:e.event_id,expression:e.expression||"neutral",action:e.action||"talk",state:"speaking",speechId:t,durationMs:e.durationMs});let s=e.durationMs||4500;ey.current=setTimeout(()=>{O(e=>e?{...e,state:"idle",action:"idle"}:null)},s)},onChunk:e=>{e.deltaText&&ek(s.id,t=>({...t,messages:t.messages.map(t=>t.id===r?{...t,content:t.content+e.deltaText}:t)})),(e.expression||e.action)&&O(t=>t?{...t,expression:e.expression||t.expression,action:e.action||t.action}:null)},onDone:e=>{e?.metadata?.mode&&("casual"===e.metadata.mode||"teach"===e.metadata.mode||"hybrid"===e.metadata.mode)&&J(e.metadata.mode);let t=e.response||{},a=e.metadata?.memory_proposals,i=e.metadata?.behavioral_proposals,n=t.citations||e.metadata?.citations||[],o=t.gate||e.metadata?.gate;ek(s.id,e=>({...e,messages:e.messages.map(e=>e.id===r?{...e,content:e.content||t.subtitle_en||t.subtitle_ja||"",subtitle:t.subtitle,subtitleLanguage:t.subtitle_language||("off"!==Q?Q:void 0),subtitles:t.subtitles,spokenJa:t.spoken_ja,evidenceIds:t.evidence_ids||(n.length>0?n.map(e=>e.evidence_id||e.evidenceId).filter(Boolean):void 0),citations:n.length>0?n:void 0,gate:o,memoryProposals:a,behavioralProposals:i}:e),updatedAt:Date.now()})),E("online")},onInterrupted:e=>{let t=e?.reason||l.signal.reason||"interrupted";ek(s.id,e=>{let s=e.messages.find(e=>e.id===r);return"user_barge_in"!==t||s&&s.content.trim()?{...e,messages:e.messages.map(e=>e.id===r?{...e,interrupted:!0,interruptionReason:"string"==typeof t?t:"interrupted"}:e),updatedAt:Date.now()}:{...e,messages:e.messages.filter(e=>e.id!==r),updatedAt:Date.now()}}),E("online")},onError:e=>{let t=e?.message||String(e)||"Unknown error";ek(s.id,e=>({...e,messages:e.messages.map(e=>e.id===r?{...e,error:t}:e),updatedAt:Date.now()})),E("offline")}},l.signal)}catch(e){if(!l.signal.aborted){let t=e?.message||String(e)||"Connection error";ek(s.id,e=>({...e,messages:e.messages.map(e=>e.id===r?{...e,error:t}:e),updatedAt:Date.now()})),E("offline")}}finally{eN.current===l&&(eN.current=null),R(!1)}}(0,i.useEffect)(()=>()=>{ey.current&&clearTimeout(ey.current),eN.current&&eN.current.abort("unmounted")},[]),(0,i.useEffect)(()=>{let e=function(){try{let e=JSON.parse(window.localStorage.getItem(j)??"[]");if(!Array.isArray(e))return[];return e.map(e=>({...e,messages:(e.messages||[]).map(w)}))}catch{return[]}}();h(e),x(e[0]?.id??null);try{let e=localStorage.getItem("siduri.chat.subtitleLanguage");e&&ee(e)}catch{}_(!0),(0,g.Zq)("/health").then(async e=>{if(e.ok){let t=await e.json().catch(()=>({}));E("online"),t.organs?.body?.modelUrl&&(Y(t.organs.body.modelUrl),t.organs.body.modelUrl.toLowerCase().endsWith(".vrm")?V("vrm"):V("live2d")),(0,g.Zq)("/body/snapshot").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t?.snapshot&&(t.snapshot.modelUrl&&Y(t.snapshot.modelUrl),t.snapshot.format&&V(t.snapshot.format),t.snapshot.vrmOptions&&G(t.snapshot.vrmOptions))}else t.organs?.body?.modelUrl||(0,g.Zq)("/api/models/body").then(async e=>{if(e.ok){let t=(await e.json().catch(()=>({}))).models||[],s=t.find(e=>"default"!==e);s?(Y(`/assets/body/${s}/model.model3.json`),V("live2d")):t.length>0&&"default"!==t[0]&&(Y(`/assets/body/${t[0]}/model.model3.json`),V("live2d"))}}).catch(()=>{})}).catch(()=>{})}else E("online")}).catch(()=>E("offline")),(0,g.Zq)("/teach/identity").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t&&t.name&&es(t.name)}else(0,g.Zq)("/me").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t&&t.name&&es(t.name)}}).catch(()=>{})}).catch(()=>{}),(0,g.Zq)("/teach/detected-self").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t&&t.detected&&(sessionStorage.getItem(`siduri.dismissedSelf:${t.filename}`)||ei(t))}}).catch(()=>{})},[]),(0,i.useEffect)(()=>{S&&window.localStorage.setItem(j,JSON.stringify(u))},[u,S]),(0,i.useEffect)(()=>{ej.current?.scrollTo({top:ej.current.scrollHeight,behavior:"smooth"})},[p,ew?.messages.length,L]);let eA=ew?.messages??[],eE=eA.at(-1)?.evidenceIds?.length??0;async function eL(e,t,s){if(ew)try{let a=await (0,g.B2)(`/self/directives/${s}`,{id:t,companionId:"default"}).catch(()=>(0,g.B2)(`/memory/proposals/${s}`,{id:t,companionId:"default"})),i=a?.status||("approve"===s?"approved":"rejected");if("approve"===s){a?.name&&es(a.name);let s=ew.messages.find(t=>t.id===e),i=s?.memoryProposals?.find(e=>(e.proposal_id||e.id)===t),r=s?.memoryProposals?.find(e=>"name"===(e.predicate||"").toLowerCase()&&!(e.subject||"").toLowerCase().startsWith("actor:")&&"user"!==(e.subject||"").toLowerCase()&&"primary_user"!==(e.subject||"").toLowerCase()),n=(i?.subject||"").toLowerCase(),o=(i?.predicate||"").toLowerCase(),l=!n.startsWith("actor:")&&"user"!==n&&"primary_user"!==n&&"owner"!==n&&"creator"!==n;"name"===o&&l&&i?.value?es(i.value):r?.value&&es(r.value),(0,g.Zq)("/teach/identity").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t?.name&&es(t.name)}}).catch(()=>{})}ek(ew.id,s=>({...s,messages:s.messages.map(s=>s.id===e&&s.memoryProposals?{...s,memoryProposals:s.memoryProposals.map(e=>(e.proposal_id||e.id)===t?{...e,status:i}:e)}:s)}))}catch(e){console.error("Failed to update memory proposal:",e)}}async function eR(e,t,s){if(ew)try{let a=await (0,g.B2)(`/self/directives/${s}`,{id:t,companionId:"default"}).catch(()=>(0,g.B2)(`/memory/behavioral/${s}`,{id:t,companionId:"default"})),i=a?.status||("approve"===s?"active":"rejected");if("approve"===s){a?.name&&es(a.name);let s=ew.messages.find(t=>t.id===e),i=s?.behavioralProposals?.find(e=>(e.directive_id||e.id)===t),r=i?.directive||i?.value||i?.behavior?.instruction||"";if(r){let e=r.match(/^(?:address\s+companion\s+as|your\s+name\s+is|call\s+yourself|acknowledge\s+name\s+as|companion\s+name\s+is)\s+["“']?([^"”'.]+)["”']?/i);e?.[1]?.trim()&&es(e[1].trim())}(0,g.Zq)("/teach/identity").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t?.name&&es(t.name)}}).catch(()=>{})}ek(ew.id,s=>({...s,messages:s.messages.map(s=>s.id===e&&s.behavioralProposals?{...s,behavioralProposals:s.behavioralProposals.map(e=>(e.directive_id||e.id)===t?{...e,status:i}:e)}:s)}))}catch(e){console.error("Failed to update behavioral proposal:",e)}}function eS(e){if(!e?.manifest)return;let t=e.scannedDirectives||e.manifest?.directives||[];return{manifest:e.manifest,scannedDirectives:t,compiledBy:e.compiledBy||"parser",status:"pending"}}function e_(e,t){let s={};t.scannedDirectives.forEach(e=>{s[e.id]=e.approvedByDefault??e.scanResult?.safe??!0}),ed(t=>({...t,[e]:s}))}async function eT(e){let t=e.target.files?.[0];if(!t)return;e.target&&(e.target.value="");let s=await t.text(),a=t.name,i=ew;i||(i=eC(),h(e=>[i,...e]),x(i.id));let r={id:y(),role:"user",content:"Teach Siduri from this persona file.",selfAttachment:{filename:a},createdAt:Date.now()},n=y(),o={id:n,role:"assistant",content:"",createdAt:Date.now()};ek(i.id,e=>({...e,title:0===e.messages.length?`Persona: ${a}`:e.title,messages:[...e.messages,r,o],updatedAt:Date.now()})),R(!0),E("streaming");try{let e=await (0,g.B2)("/teach/upload-self",{content:s,companionId:"default"});if(e&&e.isValid&&e.manifest){let t=eS(e),s=t?.manifest?.identity?.name||t?.manifest?.name||"persona",r=t?.scannedDirectives?.length??0,o="brain"===e.compiledBy?"AI Cognitive Compiler":"Manifest Parser",l=`I've reviewed **${a}** and compiled the persona **"${s}"** using the ${o}.
30
+ `;function p(e,t,s){let a=e.createShader(t);if(!a)throw Error("Failed to create shader");if(e.shaderSource(a,s),e.compileShader(a),!e.getShaderParameter(a,e.COMPILE_STATUS)){let t=e.getShaderInfoLog(a);throw e.deleteShader(a),Error(`Shader compilation error: ${t}`)}return a}class x{constructor(e){this.gl=null,this.program=null,this.maskProgram=null,this.vertexBuffer=null,this.uvBuffer=null,this.indexBuffer=null,this.aPositionLocation=-1,this.aTexCoordLocation=-1,this.uMatrixLocation=null,this.uTextureLocation=null,this.uOpacityLocation=null,this.maskAPositionLocation=-1,this.maskATexCoordLocation=-1,this.maskUMatrixLocation=null,this.maskUTextureLocation=null,this.textures=[],this.moc=null,this.model=null,this.core=null,this.paramIndices=new Map,this.isDisposed=!1,this.modelBounds={minX:-.39,maxX:.4,minY:-.98,maxY:.18,width:.79,height:1.16,centerX:.006,centerY:-.4},this.canvas=e}initialize(e,t){this.core=e;let s={alpha:!0,premultipliedAlpha:!0,preserveDrawingBuffer:!1,antialias:!0,stencil:!0},a=this.canvas.getContext("webgl",s)||this.canvas.getContext("experimental-webgl",s)||this.canvas.getContext("webgl2",s);if(!a)throw Error("WebGL is not supported in this browser environment");this.gl=a;let i=p(a,a.VERTEX_SHADER,m),r=p(a,a.FRAGMENT_SHADER,u),n=a.createProgram();if(!n)throw Error("Failed to create WebGL program");if(a.attachShader(n,i),a.attachShader(n,r),a.linkProgram(n),!a.getProgramParameter(n,a.LINK_STATUS))throw Error(`Program link error: ${a.getProgramInfoLog(n)}`);this.program=n,this.aPositionLocation=a.getAttribLocation(n,"a_position"),this.aTexCoordLocation=a.getAttribLocation(n,"a_texCoord"),this.uMatrixLocation=a.getUniformLocation(n,"u_matrix"),this.uTextureLocation=a.getUniformLocation(n,"u_texture"),this.uOpacityLocation=a.getUniformLocation(n,"u_opacity");let o=p(a,a.FRAGMENT_SHADER,h),l=a.createProgram();if(!l)throw Error("Failed to create Mask WebGL program");if(a.attachShader(l,i),a.attachShader(l,o),a.linkProgram(l),!a.getProgramParameter(l,a.LINK_STATUS))throw Error(`Mask Program link error: ${a.getProgramInfoLog(l)}`);if(this.maskProgram=l,this.maskAPositionLocation=a.getAttribLocation(l,"a_position"),this.maskATexCoordLocation=a.getAttribLocation(l,"a_texCoord"),this.maskUMatrixLocation=a.getUniformLocation(l,"u_matrix"),this.maskUTextureLocation=a.getUniformLocation(l,"u_texture"),this.vertexBuffer=a.createBuffer(),this.uvBuffer=a.createBuffer(),this.indexBuffer=a.createBuffer(),a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,1),this.textures=t.textures.map(e=>{let t=a.createTexture();if(!t)throw Error("Failed to create WebGL texture");return a.bindTexture(a.TEXTURE_2D,t),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR_MIPMAP_NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,e),a.generateMipmap(a.TEXTURE_2D),t}),this.moc=e.Moc.fromArrayBuffer(t.mocBuffer),!this.moc)throw Error("Failed to create Live2D Moc from ArrayBuffer");if(this.model=e.Model.fromMoc(this.moc),!this.model)throw Error("Failed to create Live2D Model from Moc");let c=this.model.parameters.ids;for(let e=0;e<c.length;e++)this.paramIndices.set(c[e],e);this.initializeNeutralMouth(),this.model.update(),this.calculateModelBounds()}initializeNeutralMouth(){this.model&&(this.setParamDirect("ParamMouthOpenY",0),this.setParamDirect("ParamMouthForm",0))}setParamDirect(e,t){let s=this.paramIndices.get(e);if(void 0!==s&&this.model){let e=this.model.parameters.minimumValues[s],a=this.model.parameters.maximumValues[s];this.model.parameters.values[s]=Math.max(e,Math.min(a,t))}}calculateModelBounds(){if(!this.model)return;let e=this.model.drawables,t=e.count,s=1/0,a=-1/0,i=1/0,r=-1/0;for(let n=0;n<t;n++){let t=e.vertexPositions[n];if(t&&0!==t.length)for(let e=0;e<t.length;e+=2){let n=t[e],o=t[e+1];n<s&&(s=n),n>a&&(a=n),o<i&&(i=o),o>r&&(r=o)}}s!==1/0&&a!==-1/0&&i!==1/0&&r!==-1/0&&(this.modelBounds={minX:s,maxX:a,minY:i,maxY:r,width:a-s,height:r-i,centerX:(s+a)/2,centerY:(i+r)/2})}getModelBounds(){return{...this.modelBounds}}setParam(e,t,s=1){let a=this.paramIndices.get(e);if(void 0!==a&&this.model){let e=this.model.parameters.values[a],i=Math.max(this.model.parameters.minimumValues[a],Math.min(this.model.parameters.maximumValues[a],t));this.model.parameters.values[a]=e+(i-e)*s}}render(e,t=Date.now()){let s;if(this.isDisposed||!this.gl||!this.model||!this.program)return;let a=this.gl,i=this.canvas.width,r=this.canvas.height;if(0===i||0===r)return;let n=e.calculateFrameParameters(t);this.setParam("ParamAngleX",n.angleX,.2),this.setParam("ParamAngleY",n.angleY,.2),this.setParam("ParamAngleZ",n.angleZ,.2),this.setParam("ParamBodyAngleX",n.bodyAngleX,.15),this.setParam("ParamBreath",n.breath,.3),this.setParam("ParamEyeLOpen",n.eyeOpenL,.4),this.setParam("ParamEyeROpen",n.eyeOpenR,.4),this.setParam("ParamMouthOpenY",n.mouthOpenY,.35);let o=function(e){if(!e)return"neutral";switch(e.toLowerCase().trim()){case"surprised":return"face_aozame.exp3.json";case"concerned":case"thinking":return"eyes_zetubou.exp3.json";case"happy":return"hair_open.exp3.json";default:return"neutral"}}(e.expression);"face_aozame.exp3.json"===o?(this.setParam("Param10",1,.2),this.setParam("Param9",0,.15),this.setParam("Param11",0,.15),this.setParam("Param12",0,.15)):"eyes_zetubou.exp3.json"===o?(this.setParam("Param9",1,.2),this.setParam("Param10",0,.15),this.setParam("Param11",0,.15),this.setParam("Param12",0,.15)):"hair_open.exp3.json"===o?(this.setParam("Param11",1,.2),this.setParam("Param10",0,.15),this.setParam("Param9",0,.15),this.setParam("Param12",0,.15)):"eye_color.exp3.json"===o?(this.setParam("Param12",1,.2),this.setParam("Param10",0,.15),this.setParam("Param9",0,.15),this.setParam("Param11",0,.15)):(this.setParam("Param10",0,.15),this.setParam("Param9",0,.15),this.setParam("Param11",0,.15),this.setParam("Param12",0,.15)),this.model.update(),a.viewport(0,0,i,r),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT|a.STENCIL_BUFFER_BIT),a.enable(a.BLEND),a.blendFunc(a.ONE,a.ONE_MINUS_SRC_ALPHA),a.useProgram(this.program);let l=i/r,c=this.modelBounds.width,d=this.modelBounds.height,m=this.modelBounds.centerX,u=this.modelBounds.centerY,h=(s=l>=c/d?1.84/d:1.84/c*l)/l,p=new Float32Array([h,0,0,0,0,s,0,0,0,0,1,0,-m*h,-u*s,0,1]);a.uniformMatrix4fv(this.uMatrixLocation,!1,p),a.uniform1i(this.uTextureLocation,0);let x=this.model.drawables,f=x.count,v=x.renderOrders,b=[];for(let e=0;e<f;e++)b.push(e);b.sort((e,t)=>v[e]-v[t]),a.enableVertexAttribArray(this.aPositionLocation),a.enableVertexAttribArray(this.aTexCoordLocation);let g=(e,t)=>{let s=void 0!==t?t:x.opacities[e];if(s<=.001)return;let i=x.textureIndices[e],r=this.textures[i];if(!r)return;a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,r),a.uniform1f(this.uOpacityLocation,s);let n=x.vertexPositions[e];a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,n,a.DYNAMIC_DRAW),a.vertexAttribPointer(this.aPositionLocation,2,a.FLOAT,!1,0,0);let o=x.vertexUvs[e];a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),a.bufferData(a.ARRAY_BUFFER,o,a.DYNAMIC_DRAW),a.vertexAttribPointer(this.aTexCoordLocation,2,a.FLOAT,!1,0,0);let l=x.indices[e];a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,l,a.DYNAMIC_DRAW),a.drawElements(a.TRIANGLES,l.length,a.UNSIGNED_SHORT,0)},j=e=>{if(!this.maskProgram)return;a.useProgram(this.maskProgram),a.uniformMatrix4fv(this.maskUMatrixLocation,!1,p),a.uniform1i(this.maskUTextureLocation,0),a.enableVertexAttribArray(this.maskAPositionLocation),a.enableVertexAttribArray(this.maskATexCoordLocation);let t=x.textureIndices[e],s=this.textures[t];if(!s)return;a.activeTexture(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,s);let i=x.vertexPositions[e];a.bindBuffer(a.ARRAY_BUFFER,this.vertexBuffer),a.bufferData(a.ARRAY_BUFFER,i,a.DYNAMIC_DRAW),a.vertexAttribPointer(this.maskAPositionLocation,2,a.FLOAT,!1,0,0);let r=x.vertexUvs[e];a.bindBuffer(a.ARRAY_BUFFER,this.uvBuffer),a.bufferData(a.ARRAY_BUFFER,r,a.DYNAMIC_DRAW),a.vertexAttribPointer(this.maskATexCoordLocation,2,a.FLOAT,!1,0,0);let n=x.indices[e];a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,this.indexBuffer),a.bufferData(a.ELEMENT_ARRAY_BUFFER,n,a.DYNAMIC_DRAW),a.drawElements(a.TRIANGLES,n.length,a.UNSIGNED_SHORT,0),a.useProgram(this.program),a.enableVertexAttribArray(this.aPositionLocation),a.enableVertexAttribArray(this.aTexCoordLocation)},y=-1;for(let e of b)if(!(x.opacities[e]<=.001))if(x.maskCounts[e]>0){let t=x.masks[e][0];t!==y&&(y=t,a.enable(a.STENCIL_TEST),a.stencilMask(255),a.clear(a.STENCIL_BUFFER_BIT),a.stencilFunc(a.ALWAYS,1,255),a.stencilOp(a.KEEP,a.KEEP,a.REPLACE),a.colorMask(!1,!1,!1,!1),j(t),a.colorMask(!0,!0,!0,!0)),a.stencilFunc(a.EQUAL,1,255),a.stencilOp(a.KEEP,a.KEEP,a.KEEP),g(e)}else -1!==y&&(a.disable(a.STENCIL_TEST),y=-1),g(e);-1!==y&&a.disable(a.STENCIL_TEST)}dispose(){if(this.isDisposed=!0,this.gl){for(let e of this.textures)this.gl.deleteTexture(e);this.textures=[],this.vertexBuffer&&this.gl.deleteBuffer(this.vertexBuffer),this.uvBuffer&&this.gl.deleteBuffer(this.uvBuffer),this.indexBuffer&&this.gl.deleteBuffer(this.indexBuffer),this.program&&this.gl.deleteProgram(this.program)}this.model&&"function"==typeof this.model.release&&this.model.release(),this.moc&&"function"==typeof this.moc.release&&this.moc.release(),this.model=null,this.moc=null,this.gl=null}}function f({modelUrl:e,expression:t="neutral",action:s="idle",state:r="idle",speechId:n,lipSyncValue:o,durationMs:m,className:u="",onStatusChange:h}){let p=(0,i.useRef)(null),v=(0,i.useRef)(null),b=(0,i.useRef)(new l({expression:t,action:s,state:r,speechId:n,lipSyncValue:o,durationMs:m})),g=(0,i.useRef)(null),j=(0,i.useRef)(null),[y,N]=(0,i.useState)("loading"),[w,C]=(0,i.useState)(null),[k,P]=(0,i.useState)(0);return(0,i.useEffect)(()=>{if(!window.matchMedia)return;let e=window.matchMedia("(prefers-reduced-motion: reduce)"),t=()=>{b.current.setReducedMotion(e.matches)};return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]),(0,i.useEffect)(()=>{b.current.updateConfig({expression:t,action:s,state:r,speechId:n,lipSyncValue:o,durationMs:m})},[t,s,r,n,o,m]),(0,i.useEffect)(()=>{let t=!1,s=null;async function a(){if(v.current&&p.current){if(!e){N("error"),C("No Live2D model configured. Place model in assets/body/<name>/"),h?.("error","No Live2D model URL specified");return}N("loading"),h?.("loading"),C(null);try{let a=await c();if(t)return;let i=await d(e);if(t)return;let r=v.current;if(!r)return;let n=new x(r);n.initialize(a,i),g.current=n;let o=()=>{if(!p.current||!v.current)return;let e=p.current.getBoundingClientRect();if(e.width<=0||e.height<=0)return;let t=Math.min(window.devicePixelRatio||1,2),s=Math.max(1,Math.floor(e.width*t)),a=Math.max(1,Math.floor(e.height*t));(v.current.width!==s||v.current.height!==a)&&(v.current.width=s,v.current.height=a)};o(),(s=new ResizeObserver(o)).observe(p.current);let l=()=>{t||(g.current&&g.current.render(b.current,performance.now()),j.current=requestAnimationFrame(l))};j.current=requestAnimationFrame(l),N("ready"),h?.("ready")}catch(s){if(t)return;let e=s?.message||"Failed to initialize Live2D avatar";console.warn("[AvatarCanvas] Initialization error:",s),N("error"),C("Avatar model unavailable or failed to load."),h?.("error",e)}}}a();let i=v.current,r=e=>{e.preventDefault(),console.warn("[AvatarCanvas] WebGL context lost"),j.current&&cancelAnimationFrame(j.current),N("error"),C("WebGL context lost.")},n=()=>{console.log("[AvatarCanvas] WebGL context restored, re-initializing..."),a()};return i&&(i.addEventListener("webglcontextlost",r,!1),i.addEventListener("webglcontextrestored",n,!1)),()=>{t=!0,j.current&&(cancelAnimationFrame(j.current),j.current=null),s&&s.disconnect(),i&&(i.removeEventListener("webglcontextlost",r),i.removeEventListener("webglcontextrestored",n)),g.current&&(g.current.dispose(),g.current=null)}},[e,k,h]),(0,a.jsxs)("div",{ref:p,"data-testid":"avatar-canvas-container",className:`relative w-full h-full min-h-0 flex items-center justify-center overflow-hidden bg-transparent ${u}`,"aria-label":"Live2D Companion Presence",children:[(0,a.jsx)("canvas",{ref:v,role:"img","data-testid":"avatar-webgl-canvas","aria-label":"Live2D companion presence",style:{width:"100%",height:"100%",display:"block"},className:`absolute inset-0 w-full h-full block transition-opacity duration-500 ${"ready"===y?"opacity-100":"opacity-0"}`}),"loading"===y&&(0,a.jsxs)("div",{role:"status","aria-live":"polite",className:"absolute inset-0 flex flex-col items-center justify-center gap-3 bg-[#0b0b0e]/90 text-[var(--siduri-text-muted)]",children:[(0,a.jsx)("div",{className:"siduri-glyph w-10 h-10 text-base animate-pulse motion-reduce:animate-none",children:"✦"}),(0,a.jsx)("span",{className:"text-[11px] font-mono tracking-widest uppercase text-[var(--siduri-ember-light)]",children:"Initializing Presence..."})]}),"error"===y&&(0,a.jsxs)("div",{role:"alert","aria-live":"polite",className:"absolute inset-0 flex flex-col items-center justify-center p-6 text-center bg-[#0b0b0e]/95 text-[var(--siduri-text-muted)]",children:[(0,a.jsx)("div",{className:"w-8 h-8 rounded-full border border-[var(--siduri-border-subtle)] grid place-items-center text-xs text-[var(--siduri-text-dim)] mb-2 font-mono",children:"!"}),(0,a.jsx)("p",{className:"text-xs font-sans text-[var(--siduri-text-secondary)] mb-1",children:w||"Avatar unavailable in this browser."}),(0,a.jsx)("span",{className:"text-[10px] font-mono text-[var(--siduri-text-dim)] mb-3",children:"Conversational text mode remains active"}),(0,a.jsx)("button",{type:"button",onClick:()=>P(e=>e+1),className:"px-3 py-1 text-[11px] font-mono tracking-wider uppercase rounded border border-[var(--siduri-border-subtle)] hover:border-[var(--siduri-border-ember)] text-[var(--siduri-text-secondary)] hover:text-[var(--siduri-text-primary)] transition-colors focus-visible:ring-1 focus-visible:ring-[var(--siduri-border-ember)] outline-none","aria-label":"Retry avatar initialization",children:"Retry"})]})]})}var v=s(2914);function b({modelUrl:e,expression:t="neutral",action:r="idle",state:n="idle",speechId:o,lipSyncValue:l,durationMs:c,className:d="",vrmConfig:m,onStatusChange:u}){let h=(0,i.useRef)(null),p=(0,i.useRef)(null),x=(0,i.useRef)(null),[f,v]=(0,i.useState)("loading"),[g,j]=(0,i.useState)(null);return(0,i.useEffect)(()=>{x.current&&x.current.updateState({expression:t,action:r,state:n,speechId:o,lipSyncValue:l,lookAtMode:m?.lookAtMode||"camera"})},[t,r,n,o,l,m]),(0,i.useEffect)(()=>{let t=!1,a=null;return async function(){if(p.current&&h.current){if(!e){v("error");let e="No VRM model URL specified. Place model (.vrm) in assets/body/<name>/";j(e),u?.("error",e);return}v("loading"),u?.("loading"),j(null);try{let i=p.current,{VRMController:r}=await Promise.all([s.e(389),s.e(368),s.e(672),s.e(411),s.e(202)]).then(s.bind(s,7202));if(t)return;let n=new r(i,m);if(x.current=n,await n.loadModel(e),t)return void n.dispose();let o=()=>{if(!h.current||!p.current)return;let e=h.current.getBoundingClientRect();e.width<=0||e.height<=0||n.resize(e.width,e.height)};o(),(a=new ResizeObserver(o)).observe(h.current),n.startLoop(),v("ready"),u?.("ready")}catch(s){if(t)return;let e=s?.message||"Failed to initialize 3D VRM avatar canvas";console.error("[VRM] Initialization error:",s),v("error"),j(e),u?.("error",e)}}}(),()=>{t=!0,a&&a.disconnect(),x.current&&(x.current.dispose(),x.current=null)}},[e]),(0,a.jsxs)("div",{ref:h,className:`relative w-full h-full flex items-center justify-center overflow-hidden select-none bg-transparent ${d}`,"data-testid":"vrm-canvas-container",children:[(0,a.jsx)("canvas",{ref:p,className:"w-full h-full block touch-none","data-testid":"vrm-canvas-element"}),"loading"===f&&(0,a.jsxs)("div",{className:"absolute inset-0 flex flex-col items-center justify-center bg-black/40 backdrop-blur-xs text-xs font-mono text-[var(--siduri-text-secondary)] pointer-events-none transition-opacity",children:[(0,a.jsx)("div",{className:"w-6 h-6 rounded-full border-2 border-[var(--siduri-ember)] border-t-transparent animate-spin mb-2"}),(0,a.jsx)("span",{children:"Loading 3D VRM avatar..."})]}),"error"===f&&(0,a.jsxs)("div",{className:"absolute inset-0 flex flex-col items-center justify-center p-6 text-center bg-black/60 text-xs font-mono text-red-400",children:[(0,a.jsx)("span",{className:"font-semibold mb-1",children:"Avatar Error"}),(0,a.jsx)("span",{className:"opacity-80 max-w-sm",children:g})]})]})}var g=s(8839);let j="siduri.chat.conversations.v1";function y(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function N(e){return new Intl.DateTimeFormat(void 0,{hour:"numeric",minute:"2-digit"}).format(e)}function w(e){if("[interrupted]"===e.content)return{...e,content:"",interrupted:!0,interruptionReason:"interrupted"};if(e.content&&e.content.endsWith(" [interrupted]"))return{...e,content:e.content.slice(0,-14).trim(),interrupted:!0,interruptionReason:"interrupted"};if(e.content&&e.content.startsWith("I couldn’t reach the orchestrator. ")){let t=e.content.slice(35);return{...e,content:"",error:t}}return e}function C(e){switch(e){case"client_disconnect":return{label:"Disconnected",text:"Response stopped due to connection close.",hint:"The connection to the companion service closed prematurely."};case"user_stop":return{label:"Stopped",text:"Response stopped by user.",hint:"Generation was manually cancelled via the stop control."};case"user_barge_in":return{label:"Interrupted",text:"Response interrupted by new message.",hint:"Generation was cancelled because a new prompt was submitted."};case"timeout":return{label:"Timed Out",text:"Response timed out.",hint:"The request exceeded the allotted time limit before finishing."};default:return{label:"Interrupted",text:"Response was interrupted.",hint:e&&"interrupted"!==e?`Reason: ${e}`:void 0}}}function k(){let e,t,s,o,l,c,d,m,[u,h]=(0,i.useState)([]),[p,x]=(0,i.useState)(null),[k,P]=(0,i.useState)(""),[A,E]=(0,i.useState)("connecting"),[L,R]=(0,i.useState)(!1),[S,_]=(0,i.useState)(!1),[T,I]=(0,i.useState)(!1),[D,M]=(0,i.useState)(!1),[B,F]=(0,i.useState)(!1),[U,$]=(0,i.useState)(!1),[z,O]=(0,i.useState)(null),[X,Y]=(0,i.useState)(void 0),[W,V]=(0,i.useState)("unknown"),[q,G]=(0,i.useState)(void 0),[Z,H]=(0,i.useState)("hybrid"),[K,J]=(0,i.useState)("hybrid"),[Q,ee]=(0,i.useState)("off"),[et,es]=(0,i.useState)("Siduri"),[ea,ei]=(0,i.useState)(null),[er,en]=(0,i.useState)(!1),[eo,el]=(0,i.useState)(null),[ec,ed]=(0,i.useState)({}),[em,eu]=(0,i.useState)(null),eh=(0,i.useRef)(null),[ep,ex]=(0,i.useState)({}),[ef,ev]=(0,i.useState)({}),[eb,eg]=(0,i.useState)(null),ej=(0,i.useRef)(null),ey=(0,i.useRef)(null),eN=(0,i.useRef)(null),ew=(0,i.useMemo)(()=>u.find(e=>e.id===p)??null,[p,u]);function eC(){return{id:y(),title:"New conversation",messages:[],updatedAt:Date.now()}}function ek(e,t){h(s=>s.map(s=>s.id===e?t(s):s))}async function eP(e){e.preventDefault();let t=k.trim();if(!t)return;if(/\[[^\]]+\]/.test(t))return void E("replace the blanks first");L&&eN.current&&(eN.current.abort("user_barge_in"),eN.current=null,(0,g.Uo)("default","user_barge_in"));let s=ew;s||(s=eC(),h(e=>[s,...e]),x(s.id));let a=s.messages.filter(e=>!("assistant"===e.role&&!e.content.trim()&&!e.error&&!e.interrupted)),i={id:y(),role:"user",content:t,createdAt:Date.now()},r=y(),n=[...a,i,{id:r,role:"assistant",content:"",createdAt:Date.now()}],o=0===s.messages.length?t.slice(0,42):s.title;ek(s.id,e=>({...e,title:o,messages:n,updatedAt:Date.now()})),P(""),R(!0),E("streaming");let l=new AbortController;eN.current=l;try{await (0,g.ZB)("/chat/stream",{id:"default",message:t,medium:"web",mode:Z,subtitleLanguage:"off"!==Q?Q:void 0,history:s.messages.slice(-20).map(e=>({role:e.role,content:e.content}))},{onStaged:e=>{e?.mode&&("casual"===e.mode||"teach"===e.mode||"hybrid"===e.mode)&&J(e.mode)},onAvatar:e=>{let t=e.speech_id;ey.current&&clearTimeout(ey.current),O({eventId:e.event_id,expression:e.expression||"neutral",action:e.action||"talk",state:"speaking",speechId:t,durationMs:e.durationMs});let s=e.durationMs||4500;ey.current=setTimeout(()=>{O(e=>e?{...e,state:"idle",action:"idle"}:null)},s)},onChunk:e=>{e.deltaText&&ek(s.id,t=>({...t,messages:t.messages.map(t=>t.id===r?{...t,content:t.content+e.deltaText}:t)})),(e.expression||e.action)&&O(t=>t?{...t,expression:e.expression||t.expression,action:e.action||t.action}:null)},onDone:e=>{e?.metadata?.mode&&("casual"===e.metadata.mode||"teach"===e.metadata.mode||"hybrid"===e.metadata.mode)&&J(e.metadata.mode);let t=e.response||{},a=e.metadata?.claim_proposals||e.metadata?.memory_proposals,i=e.metadata?.behavioral_proposals,n=t.citations||e.metadata?.citations||[],o=t.gate||e.metadata?.gate;ek(s.id,e=>({...e,messages:e.messages.map(e=>e.id===r?{...e,content:e.content||t.subtitle_en||t.subtitle_ja||"",subtitle:t.subtitle,subtitleLanguage:t.subtitle_language||("off"!==Q?Q:void 0),subtitles:t.subtitles,spokenJa:t.spoken_ja,evidenceIds:t.evidence_ids||(n.length>0?n.map(e=>e.evidence_id||e.evidenceId).filter(Boolean):void 0),citations:n.length>0?n:void 0,gate:o,memoryProposals:a,behavioralProposals:i}:e),updatedAt:Date.now()})),E("online")},onInterrupted:e=>{let t=e?.reason||l.signal.reason||"interrupted";ek(s.id,e=>{let s=e.messages.find(e=>e.id===r);return"user_barge_in"!==t||s&&s.content.trim()?{...e,messages:e.messages.map(e=>e.id===r?{...e,interrupted:!0,interruptionReason:"string"==typeof t?t:"interrupted"}:e),updatedAt:Date.now()}:{...e,messages:e.messages.filter(e=>e.id!==r),updatedAt:Date.now()}}),E("online")},onError:e=>{let t=e?.message||String(e)||"Unknown error";ek(s.id,e=>({...e,messages:e.messages.map(e=>e.id===r?{...e,error:t}:e),updatedAt:Date.now()})),E("offline")}},l.signal)}catch(e){if(!l.signal.aborted){let t=e?.message||String(e)||"Connection error";ek(s.id,e=>({...e,messages:e.messages.map(e=>e.id===r?{...e,error:t}:e),updatedAt:Date.now()})),E("offline")}}finally{eN.current===l&&(eN.current=null),R(!1)}}(0,i.useEffect)(()=>()=>{ey.current&&clearTimeout(ey.current),eN.current&&eN.current.abort("unmounted")},[]),(0,i.useEffect)(()=>{let e=function(){try{let e=JSON.parse(window.localStorage.getItem(j)??"[]");if(!Array.isArray(e))return[];return e.map(e=>({...e,messages:(e.messages||[]).map(w)}))}catch{return[]}}();h(e),x(e[0]?.id??null);try{let e=localStorage.getItem("siduri.chat.subtitleLanguage");e&&ee(e)}catch{}_(!0),(0,g.Zq)("/health").then(async e=>{if(e.ok){let t=await e.json().catch(()=>({}));E("online"),t.organs?.body?.modelUrl&&(Y(t.organs.body.modelUrl),t.organs.body.modelUrl.toLowerCase().endsWith(".vrm")?V("vrm"):V("live2d")),(0,g.Zq)("/body/snapshot").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t?.snapshot&&(t.snapshot.modelUrl&&Y(t.snapshot.modelUrl),t.snapshot.format&&V(t.snapshot.format),t.snapshot.vrmOptions&&G(t.snapshot.vrmOptions))}else t.organs?.body?.modelUrl||(0,g.Zq)("/api/models/body").then(async e=>{if(e.ok){let t=(await e.json().catch(()=>({}))).models||[],s=t.find(e=>"default"!==e);s?(Y(`/assets/body/${s}/model.model3.json`),V("live2d")):t.length>0&&"default"!==t[0]&&(Y(`/assets/body/${t[0]}/model.model3.json`),V("live2d"))}}).catch(()=>{})}).catch(()=>{})}else E("online")}).catch(()=>E("offline")),(0,g.Zq)("/teach/identity").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t&&t.name&&es(t.name)}else(0,g.Zq)("/me").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t&&t.name&&es(t.name)}}).catch(()=>{})}).catch(()=>{}),(0,g.Zq)("/teach/detected-self").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t&&t.detected&&(sessionStorage.getItem(`siduri.dismissedSelf:${t.filename}`)||ei(t))}}).catch(()=>{})},[]),(0,i.useEffect)(()=>{S&&window.localStorage.setItem(j,JSON.stringify(u))},[u,S]),(0,i.useEffect)(()=>{ej.current?.scrollTo({top:ej.current.scrollHeight,behavior:"smooth"})},[p,ew?.messages.length,L]);let eA=ew?.messages??[],eE=eA.at(-1)?.evidenceIds?.length??0;async function eL(e,t,s){if(ew)try{let a=await (0,g.B2)(`/self/directives/${s}`,{id:t,companionId:"default"}).catch(()=>(0,g.B2)(`/memory/proposals/${s}`,{id:t,companionId:"default"})),i=a?.status||("approve"===s?"approved":"rejected");if("approve"===s){a?.name&&es(a.name);let s=ew.messages.find(t=>t.id===e),i=s?.memoryProposals?.find(e=>(e.proposal_id||e.id)===t),r=s?.memoryProposals?.find(e=>"name"===(e.predicate||"").toLowerCase()&&!(e.subject||"").toLowerCase().startsWith("actor:")&&"user"!==(e.subject||"").toLowerCase()&&"primary_user"!==(e.subject||"").toLowerCase()),n=(i?.subject||"").toLowerCase(),o=(i?.predicate||"").toLowerCase(),l=!n.startsWith("actor:")&&"user"!==n&&"primary_user"!==n&&"owner"!==n&&"creator"!==n;"name"===o&&l&&i?.value?es(i.value):r?.value&&es(r.value),(0,g.Zq)("/teach/identity").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t?.name&&es(t.name)}}).catch(()=>{})}ek(ew.id,s=>({...s,messages:s.messages.map(s=>s.id===e&&s.memoryProposals?{...s,memoryProposals:s.memoryProposals.map(e=>(e.proposal_id||e.id)===t?{...e,status:i}:e)}:s)}))}catch(e){console.error("Failed to update memory proposal:",e)}}async function eR(e,t,s){if(ew)try{let a=await (0,g.B2)(`/self/directives/${s}`,{id:t,companionId:"default"}).catch(()=>(0,g.B2)(`/memory/behavioral/${s}`,{id:t,companionId:"default"})),i=a?.status||("approve"===s?"active":"rejected");if("approve"===s){a?.name&&es(a.name);let s=ew.messages.find(t=>t.id===e),i=s?.behavioralProposals?.find(e=>(e.directive_id||e.id)===t),r=i?.directive||i?.value||i?.behavior?.instruction||"";if(r){let e=r.match(/^(?:address\s+companion\s+as|your\s+name\s+is|call\s+yourself|acknowledge\s+name\s+as|companion\s+name\s+is)\s+["“']?([^"”'.]+)["”']?/i);e?.[1]?.trim()&&es(e[1].trim())}(0,g.Zq)("/teach/identity").then(async e=>{if(e.ok){let t=await e.json().catch(()=>null);t?.name&&es(t.name)}}).catch(()=>{})}ek(ew.id,s=>({...s,messages:s.messages.map(s=>s.id===e&&s.behavioralProposals?{...s,behavioralProposals:s.behavioralProposals.map(e=>(e.directive_id||e.id)===t?{...e,status:i}:e)}:s)}))}catch(e){console.error("Failed to update behavioral proposal:",e)}}function eS(e){if(!e?.manifest)return;let t=e.scannedDirectives||e.manifest?.directives||[];return{manifest:e.manifest,scannedDirectives:t,compiledBy:e.compiledBy||"parser",status:"pending"}}function e_(e,t){let s={};t.scannedDirectives.forEach(e=>{s[e.id]=e.approvedByDefault??e.scanResult?.safe??!0}),ed(t=>({...t,[e]:s}))}async function eT(e){let t=e.target.files?.[0];if(!t)return;e.target&&(e.target.value="");let s=await t.text(),a=t.name,i=ew;i||(i=eC(),h(e=>[i,...e]),x(i.id));let r={id:y(),role:"user",content:"Teach Siduri from this persona file.",selfAttachment:{filename:a},createdAt:Date.now()},n=y(),o={id:n,role:"assistant",content:"",createdAt:Date.now()};ek(i.id,e=>({...e,title:0===e.messages.length?`Persona: ${a}`:e.title,messages:[...e.messages,r,o],updatedAt:Date.now()})),R(!0),E("streaming");try{let e=await (0,g.B2)("/teach/upload-self",{content:s,companionId:"default"});if(e&&e.isValid&&e.manifest){let t=eS(e),s=t?.manifest?.identity?.name||t?.manifest?.name||"persona",r=t?.scannedDirectives?.length??0,o="brain"===e.compiledBy?"AI Cognitive Compiler":"Manifest Parser",l=`I've reviewed **${a}** and compiled the persona **"${s}"** using the ${o}.
31
31
 
32
32
  Found **${r} behavioral directive${1!==r?"s":""}**. Review and approve the directives below.`;ek(i.id,e=>({...e,messages:e.messages.map(e=>e.id===n?{...e,content:l,selfProposal:t}:e),updatedAt:Date.now()})),t&&e_(n,t),"teach"!==Z&&(H("teach"),J("teach"))}else{let t=e?.errors?.join("\n")||"Invalid persona or .self package format";ek(i.id,e=>({...e,messages:e.messages.map(e=>e.id===n?{...e,error:t,content:"Could not compile this persona file."}:e),updatedAt:Date.now()}))}}catch(t){let e=`Failed to parse persona file: ${t.message}`;ek(i.id,t=>({...t,messages:t.messages.map(t=>t.id===n?{...t,error:e,content:"Could not compile this persona file."}:t),updatedAt:Date.now()}))}finally{R(!1),E("online")}}async function eI(e,t){let s=Object.entries(ec[e]||{}).filter(([,e])=>e).map(([e])=>e);eu(e);try{let a=await (0,g.B2)("/teach/install-self",{companionId:"default",manifest:t.manifest,approvedDirectiveIds:s});if(a&&a.success){let a=t.manifest?.identity?.name||t.manifest?.name;a&&es(a),ew&&ek(ew.id,t=>({...t,messages:t.messages.map(t=>t.id===e?{...t,selfProposal:{...t.selfProposal,status:"installed"}}:t)})),el(`Installed '${t.manifest.name}' ethos (${s.length} directives active).`),setTimeout(()=>el(null),6e3),en(!0),ea?.filename&&sessionStorage.setItem(`siduri.dismissedSelf:${ea.filename}`,"true")}else alert(a?.error||"Failed to install .self package")}catch(e){alert(`Install error: ${e.message}`)}finally{eu(null)}}return(0,a.jsxs)("div",{className:`chat-app ${T?"sidebar-collapsed":""} ${D?"mobile-drawer-open":""}`,children:[D&&(0,a.jsx)("div",{className:"chat-backdrop",onClick:()=>M(!1),"aria-hidden":"true"}),(0,a.jsxs)("aside",{className:"chat-sidebar","aria-label":"Conversation history",children:[(0,a.jsxs)("div",{className:"chat-sidebar-top",children:[(0,a.jsxs)("a",{className:"chat-brand",href:"/chat",children:[(0,a.jsx)("span",{className:"chat-brand-mark",children:"S"}),(0,a.jsx)("span",{children:"SIDURI"})]}),(0,a.jsx)("button",{className:"sidebar-collapse",type:"button",onClick:()=>I(e=>!e),"aria-label":T?"Expand sidebar":"Collapse sidebar",children:T?(0,a.jsx)(v.fl,{size:14}):(0,a.jsx)(v.A6,{size:14})}),(0,a.jsx)("button",{className:"mobile-drawer-close flex items-center justify-center",type:"button",onClick:()=>M(!1),"aria-label":"Close conversation drawer",children:(0,a.jsx)(v.US,{size:14})})]}),(0,a.jsxs)("button",{className:"new-chat-button flex items-center gap-1.5",type:"button",onClick:()=>{let e;e=eC(),h(t=>[e,...t]),x(e.id),P(""),E("online"),M(!1)},children:[(0,a.jsx)(v.c1,{size:13,className:"shrink-0"}),(0,a.jsx)("span",{children:"New conversation"})]}),(0,a.jsxs)("div",{className:"history-heading",children:[(0,a.jsx)("span",{children:"Recent conversations"}),(0,a.jsx)("span",{children:u.length})]}),(0,a.jsx)("div",{className:"conversation-list",children:S?0===u.length?(0,a.jsx)("p",{className:"history-empty",children:"Your private conversations will appear here."}):u.slice().sort((e,t)=>t.updatedAt-e.updatedAt).map(e=>(0,a.jsxs)("div",{className:`conversation-row ${e.id===p?"selected":""}`,children:[(0,a.jsxs)("button",{type:"button",className:"conversation-select",onClick:()=>{x(e.id),M(!1)},children:[(0,a.jsx)("span",{className:"conversation-title",children:e.title}),(0,a.jsx)("span",{className:"conversation-date",children:N(e.updatedAt)})]}),(0,a.jsx)("button",{type:"button",className:"conversation-delete flex items-center justify-center",onClick:t=>{t.stopPropagation();var s=e.id;if(h(e=>e.filter(e=>e.id!==s)),p===s){let e=u.find(e=>e.id!==s);x(e?.id??null)}},"aria-label":`Delete ${e.title}`,children:(0,a.jsx)(v.US,{size:12})})]},e.id)):(0,a.jsx)("p",{className:"history-empty",children:"Loading history…"})}),(0,a.jsxs)("div",{className:"sidebar-footer",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>{M(!1),F(!0)},className:"sidebar-settings-btn md:hidden flex items-center gap-1.5",children:[(0,a.jsx)(v.Ze,{size:14,className:"shrink-0"}),(0,a.jsxs)("span",{className:"truncate",children:["Preferences (",Z,"off"!==Q?` \xb7 ${Q.toUpperCase()}`:"",")"]})]}),(0,a.jsxs)("a",{className:"sidebar-console",href:"/operator",children:[(0,a.jsx)(v.t$,{size:13,className:"shrink-0"}),(0,a.jsx)("span",{children:"Operator console"}),(0,a.jsx)("b",{children:(0,a.jsx)(v.pT,{size:12})})]})]})]}),(0,a.jsxs)("main",{className:"chat-workspace",children:[(0,a.jsxs)("header",{className:"chat-header",children:[(0,a.jsxs)("div",{className:"chat-header-brand-group",children:[(0,a.jsx)("button",{type:"button",className:"mobile-menu-toggle flex items-center justify-center",onClick:()=>M(!0),"aria-label":"Open conversation menu",children:(0,a.jsx)(v.ZB,{size:16})}),(0,a.jsxs)("a",{href:"/chat",className:"chat-header-title",children:[(0,a.jsx)("span",{className:"chat-brand-mark",children:"S"}),(0,a.jsx)("span",{className:"font-bold tracking-widest text-xs hidden xs:inline",children:"SIDURI"})]})]}),(0,a.jsxs)("div",{className:"chat-header-actions flex items-center gap-1.5 sm:gap-2.5",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>$(e=>!e),className:`connection-pill cursor-pointer transition-all focus-visible:ring-1 focus-visible:ring-[var(--siduri-border-ember)] outline-none ${U?"border-[var(--siduri-border-ember)] bg-[var(--siduri-tint-med)] text-[var(--siduri-ember-highlight)]":"hover:border-[var(--siduri-border-ember)] text-[var(--siduri-text-secondary)]"}`,"aria-label":"Toggle avatar presence","aria-expanded":U,title:U?"Disable Avatar Presence":"Enable Avatar Presence",children:[(0,a.jsx)("span",{className:`status-light ${U?"online":""}`}),(0,a.jsx)("span",{className:"text-xs",children:"Presence"})]}),(0,a.jsxs)("button",{type:"button",onClick:()=>F(!0),className:`connection-pill cursor-pointer transition-all md:hidden flex items-center gap-1.5 ${"off"!==Q||"hybrid"!==Z?"border-[var(--siduri-border-ember)] bg-[var(--siduri-tint-med)] text-[var(--siduri-ember-highlight)]":"hover:border-[var(--siduri-border-ember)] text-[var(--siduri-text-secondary)]"}`,"aria-label":"Open chat preferences",title:"Preferences & Subtitles",children:[(0,a.jsx)(v.Ze,{size:12,className:"shrink-0"}),(0,a.jsx)("span",{className:"text-xs font-mono font-medium tracking-wide",children:"hybrid"!==Z&&"off"!==Q?`${Z.slice(0,4)}\xb7${Q.slice(0,2).toUpperCase()}`:"hybrid"!==Z?Z:"off"!==Q?`CC:${Q.slice(0,2).toUpperCase()}`:"Options"})]}),(0,a.jsxs)("div",{className:`connection-pill hidden md:flex items-center gap-1 sm:gap-1.5 transition-all focus-within:ring-1 focus-within:ring-[var(--siduri-border-ember)] ${"off"!==Q?"border-[var(--siduri-border-ember)] bg-[var(--siduri-tint-med)] text-[var(--siduri-ember-highlight)]":"hover:border-[var(--siduri-border-ember)] text-[var(--siduri-text-secondary)]"}`,title:"Subtitle translation language",children:[(0,a.jsx)("span",{className:`status-light ${"off"!==Q?"online":""}`}),(0,a.jsx)("span",{className:"text-[10px] uppercase font-mono tracking-wider opacity-60",children:"Subtitles:"}),(0,a.jsxs)("select",{value:["off","en","ja","id","es","zh","ko","fr","de"].includes(Q)?Q:"custom-selected",onChange:e=>{let t=e.target.value;if("custom"===t){let e=prompt("Enter subtitle language code or name (e.g. it, ru, de, pt, vi):");if(e&&e.trim()){let t=e.trim().toLowerCase();ee(t);try{localStorage.setItem("siduri.chat.subtitleLanguage",t)}catch{}}}else if("custom-selected"!==t){ee(t);try{localStorage.setItem("siduri.chat.subtitleLanguage",t)}catch{}}},className:"bg-transparent text-xs text-[var(--siduri-text-primary)] font-medium outline-none cursor-pointer border-none p-0","aria-label":"Select subtitle language",children:[(0,a.jsx)("option",{value:"off",className:"bg-[#121214] text-white",children:"Subtitles: Off"}),(0,a.jsx)("option",{value:"en",className:"bg-[#121214] text-white",children:"English (EN)"}),(0,a.jsx)("option",{value:"ja",className:"bg-[#121214] text-white",children:"Japanese (JA)"}),(0,a.jsx)("option",{value:"id",className:"bg-[#121214] text-white",children:"Indonesian (ID)"}),(0,a.jsx)("option",{value:"es",className:"bg-[#121214] text-white",children:"Spanish (ES)"}),(0,a.jsx)("option",{value:"zh",className:"bg-[#121214] text-white",children:"Chinese (ZH)"}),(0,a.jsx)("option",{value:"ko",className:"bg-[#121214] text-white",children:"Korean (KO)"}),(0,a.jsx)("option",{value:"fr",className:"bg-[#121214] text-white",children:"French (FR)"}),(0,a.jsx)("option",{value:"de",className:"bg-[#121214] text-white",children:"German (DE)"}),!["off","en","ja","id","es","zh","ko","fr","de"].includes(Q)&&(0,a.jsx)("option",{value:"custom-selected",className:"bg-[#121214] text-white",children:Q.toUpperCase()}),(0,a.jsx)("option",{value:"custom",className:"bg-[#121214] text-white",children:"Other..."})]})]}),(0,a.jsxs)("span",{className:"connection-pill hidden lg:inline-flex",title:`Status: ${A}`,children:[(0,a.jsx)("span",{className:`status-light ${"online"===A?"online":""}`}),(0,a.jsx)("span",{className:"text-xs",children:A})]}),(0,a.jsxs)("div",{className:"connection-pill hidden md:flex items-center gap-1 sm:gap-1.5",title:"Operating interaction mode",children:[(0,a.jsx)("span",{className:"text-[10px] uppercase font-mono tracking-wider opacity-60",children:"Mode:"}),(0,a.jsxs)("select",{value:Z,onChange:e=>H(e.target.value),className:"bg-transparent text-xs text-[var(--siduri-text-primary)] font-medium outline-none cursor-pointer border-none p-0","aria-label":"Select interaction mode",children:[(0,a.jsx)("option",{value:"hybrid",className:"bg-[#121214] text-white",children:"Hybrid (Default)"}),(0,a.jsx)("option",{value:"teach",className:"bg-[#121214] text-white",children:"Teach"}),(0,a.jsx)("option",{value:"casual",className:"bg-[#121214] text-white",children:"Casual"})]})]})]})]}),ea&&!er&&(0,a.jsxs)("div",{"data-testid":"detected-self-banner",className:"bg-[#1c1814] border-b border-[var(--siduri-border-ember)] px-4 py-2.5 flex flex-wrap items-center justify-between gap-3 text-xs text-[#f1e6d0] z-20 shadow-md animate-fade-in",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,a.jsx)(v.qD,{size:18,className:"text-[var(--siduri-ember-highlight)] shrink-0"}),(0,a.jsxs)("span",{children:[(0,a.jsx)("strong",{children:".self file detected on path:"})," ",(0,a.jsx)("code",{className:"px-1.5 py-0.5 rounded bg-black/50 text-[var(--siduri-ember-highlight)] font-mono font-medium border border-[var(--siduri-border-subtle)]",children:ea.filename}),ea.alreadyInstalled?(0,a.jsx)("span",{className:"ml-1.5 text-[var(--siduri-text-muted)] text-[11px]",children:"(already imported)"}):null," — Import to companion ethos & directives?"]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2 ml-auto",children:[(0,a.jsx)("button",{type:"button",onClick:()=>{en(!0),ea.filename&&sessionStorage.setItem(`siduri.dismissedSelf:${ea.filename}`,"true")},className:"px-2.5 py-1 rounded text-[var(--siduri-text-muted)] hover:text-white hover:bg-white/5 transition-colors cursor-pointer",children:"Dismiss"}),(0,a.jsx)("button",{type:"button",onClick:function(){if(!ea?.parsed)return;"teach"!==Z&&(H("teach"),J("teach"));let e=ew;e||(e=eC(),h(t=>[e,...t]),x(e.id));let t=eS(ea.parsed);if(!t)return;let s=t.manifest?.identity?.name||t.manifest?.name||"persona",a=y(),i=y(),r=`I've reviewed **${ea.filename}** detected on your companion path and compiled the persona **"${s}"**.
33
33
 
@@ -9,7 +9,7 @@ c:I[6886,[],"default",1]
9
9
  :HL["/_next/static/css/ceeb8e5596664b11.css","style"]
10
10
  :HL["https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Noto+Sans+JP:wght@400;500;700&family=Noto+Serif+JP:wght@400;500;700&display=swap","style"]
11
11
  7:X
12
- 0:{"P":null,"c":["","_not-found",""],"q":"","i":false,"f":[[["",{"children":["_not-found",{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ceeb8e5596664b11.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"h-full antialiased dark","children":[["$","head",null,{"children":[["$","link",null,{"rel":"preconnect","href":"https://fonts.googleapis.com"}],["$","link",null,{"rel":"preconnect","href":"https://fonts.gstatic.com","crossOrigin":"anonymous"}],["$","link",null,{"href":"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Noto+Sans+JP:wght@400;500;700&family=Noto+Serif+JP:wght@400;500;700&display=swap","rel":"stylesheet"}]]}],["$","body",null,{"className":"min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$7"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],null]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"TAssFHX71jXsDINzGLNGT"}
12
+ 0:{"P":null,"c":["","_not-found",""],"q":"","i":false,"f":[[["",{"children":["_not-found",{"children":["__PAGE__",{},"$undefined","$undefined",4608]},"$undefined","$undefined",4608]},"$undefined","$undefined",4624],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ceeb8e5596664b11.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"h-full antialiased dark","children":[["$","head",null,{"children":[["$","link",null,{"rel":"preconnect","href":"https://fonts.googleapis.com"}],["$","link",null,{"rel":"preconnect","href":"https://fonts.gstatic.com","crossOrigin":"anonymous"}],["$","link",null,{"href":"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&family=Noto+Sans+JP:wght@400;500;700&family=Noto+Serif+JP:wght@400;500;700&display=swap","rel":"stylesheet"}]]}],["$","body",null,{"className":"min-h-full flex flex-col bg-[#0b0b0e] text-[#eee8df] selection:bg-[#d99a68]/30 selection:text-[#f4c28d]","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$7"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],null]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"6myq7R-xRemzP7dQD6m1Q"}
13
13
  7:C
14
14
  9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content"}],["$","meta","2",{"name":"theme-color","content":"#0b0b0e"}]]
15
15
  d:I[3366,[],"IconMark"]