@noxsoft/anima 6.0.0 → 7.0.0

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 (134) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +48 -0
  3. package/dist/{agent-VRQM14Xp.js → agent-BoAAHGEA.js} +3 -3
  4. package/dist/{agent-CnS0SRpT.js → agent-DuW0onwk.js} +4 -4
  5. package/dist/{agents-CvMRplDx.js → agents-BUXkSDns.js} +4 -4
  6. package/dist/{anthropic-direct-runner-C2Kwju-r.js → anthropic-direct-runner-DizCei79.js} +420 -4
  7. package/dist/{anthropic-direct-runner-BeYCnvZ8.js → anthropic-direct-runner-OjcTAH6g.js} +420 -3
  8. package/dist/{auth-choice-Dc5TAJwT.js → auth-choice-B1iGnjuE.js} +1 -1
  9. package/dist/{auth-choice-DY1saszS.js → auth-choice-HF9x6xk2.js} +1 -1
  10. package/dist/{banner-DAMtSjUF.js → banner-Dpa5d1If.js} +1 -1
  11. package/dist/build-info.json +3 -3
  12. package/dist/bundled/boot-md/handler.js +2 -2
  13. package/dist/bundled/session-memory/handler.js +1 -1
  14. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  15. package/dist/{channel-web-B8mzTSaY.js → channel-web-C5mzsaa3.js} +3 -3
  16. package/dist/{cli-hcHk5KuP.js → cli-Cuq4bIg4.js} +2 -2
  17. package/dist/{cli-D8exVpuI.js → cli-X9ikywQ3.js} +3 -3
  18. package/dist/{command-registry-D3VhxpWx.js → command-registry-9V4uqrBV.js} +12 -12
  19. package/dist/{completion-cli-B3BqQJq9.js → completion-cli-BtvcR-U5.js} +1 -1
  20. package/dist/{completion-cli-CepDzeW1.js → completion-cli-DNWDwhab.js} +2 -2
  21. package/dist/{config-cli-B6Np85rk.js → config-cli-DfHE3KG-.js} +1 -1
  22. package/dist/{config-cli-3CaIxSKo.js → config-cli-fleq7-gq.js} +1 -1
  23. package/dist/{configure-zXK6UZ51.js → configure-B2Mfnwy_.js} +3 -3
  24. package/dist/{configure-D88dg6mE.js → configure-SnvMHZPD.js} +7 -7
  25. package/dist/{configure-D882Bg7c.js → configure-ZWxixuRA.js} +3 -3
  26. package/dist/{configure-xpjwedvJ.js → configure-lkozxQed.js} +8 -8
  27. package/dist/context-mdxDsO1v.js +223 -0
  28. package/dist/control-ui/assets/index-Bwcvc7fq.css +1 -0
  29. package/dist/control-ui/assets/{index-yhFuaOnc.js → index-D4wqLVMN.js} +2 -2
  30. package/dist/control-ui/assets/{index-yhFuaOnc.js.map → index-D4wqLVMN.js.map} +1 -1
  31. package/dist/control-ui/assets/index-DIEQjjCN.js +73 -0
  32. package/dist/control-ui/assets/index-DIEQjjCN.js.map +1 -0
  33. package/dist/control-ui/assets/{observers-V7q9lNYt.js → observers-B7MfWiIZ.js} +2 -2
  34. package/dist/control-ui/assets/{observers-V7q9lNYt.js.map → observers-B7MfWiIZ.js.map} +1 -1
  35. package/dist/control-ui/index.html +2 -2
  36. package/dist/{deps-DyT32VfN.js → deps-BKLIBKjK.js} +1 -1
  37. package/dist/{doctor-WpKCNZeO.js → doctor-D7kKyUVk.js} +4 -4
  38. package/dist/{doctor-DEnSKgHu.js → doctor-DmCnZ-jF.js} +4 -4
  39. package/dist/{doctor-completion-CypXc1Uo.js → doctor-completion-B9SBdMoR.js} +1 -1
  40. package/dist/{doctor-completion-CPff9UlF.js → doctor-completion-BBvW4_J9.js} +1 -1
  41. package/dist/entry.js +1 -1
  42. package/dist/extensionAPI.js +1 -1
  43. package/dist/{gateway-cli-B_xsx5Nv.js → gateway-cli-CEM1vBuk.js} +15 -15
  44. package/dist/{gateway-cli-D3VBOA_i.js → gateway-cli-iumkTohn.js} +17 -17
  45. package/dist/{health-CabOEPQ0.js → health-B5N6_UOf.js} +3 -3
  46. package/dist/{health-C8KCBhuo.js → health-Cndq9b7A.js} +3 -3
  47. package/dist/{heartbeat-visibility-ZfNSbFcq.js → heartbeat-visibility-BQL13ZBH.js} +1 -1
  48. package/dist/{heartbeat-visibility-BjYY-mKG.js → heartbeat-visibility-CwcYugaR.js} +1 -1
  49. package/dist/{hooks-cli-Cs7GUa7G.js → hooks-cli-BZcvdIwE.js} +4 -4
  50. package/dist/{hooks-cli-DOs9WZ3K.js → hooks-cli-DSlPBQSY.js} +3 -3
  51. package/dist/index.js +10 -10
  52. package/dist/llm-slug-generator.js +1 -1
  53. package/dist/{login-BHnvW9HA.js → login-BEaBOSnw.js} +1 -1
  54. package/dist/{login-CrMpAZ0n.js → login-MzVPMRxL.js} +1 -1
  55. package/dist/{login-qr-DILcBA_q.js → login-qr-BjpDVBJE.js} +1 -1
  56. package/dist/{login-qr-CsAVGp00.js → login-qr-CxRI-tE2.js} +1 -1
  57. package/dist/{models-BM2_NkMu.js → models-CdNeYfSp.js} +4 -4
  58. package/dist/{models-cli-BpjeKsUz.js → models-cli-D7eSsPuk.js} +3 -3
  59. package/dist/{models-cli-BjY8wA-C.js → models-cli-fTZXo1zx.js} +5 -5
  60. package/dist/{onboard-DM9gULJN.js → onboard-C5K37NvY.js} +3 -3
  61. package/dist/{onboard-_-D81kAy.js → onboard-D-6QCnTi.js} +3 -3
  62. package/dist/{onboard-channels-UkphAdCy.js → onboard-channels-BsCq32Hn.js} +1 -1
  63. package/dist/{onboard-channels-CtT-RN60.js → onboard-channels-bx6oelzj.js} +1 -1
  64. package/dist/{onboarding-Djmm0PEM.js → onboarding-BeuMAyic.js} +4 -4
  65. package/dist/{onboarding-BB9PteK8.js → onboarding-CX1vIkcB.js} +4 -4
  66. package/dist/{outbound-send-deps-T_FgdfgW.js → outbound-send-deps-Y9AxHeLG.js} +1 -1
  67. package/dist/{pi-embedded-BMbtgOzv.js → pi-embedded-D15iww51.js} +1010 -104
  68. package/dist/{pi-embedded-DfbM3fAT.js → pi-embedded-DR8Pfd05.js} +1010 -104
  69. package/dist/{plugin-registry-QTkplP4s.js → plugin-registry-Do2D1nDk.js} +1 -1
  70. package/dist/{plugin-registry-DePMxn4z.js → plugin-registry-ME2FQAi-.js} +1 -1
  71. package/dist/plugin-sdk/affect/ego.d.ts +140 -0
  72. package/dist/plugin-sdk/agents/models-config.d.ts +5 -6
  73. package/dist/plugin-sdk/agents/noxsoft-runner.d.ts +3 -0
  74. package/dist/plugin-sdk/agents/openai-direct-runner.d.ts +41 -0
  75. package/dist/plugin-sdk/commands/steer.d.ts +49 -0
  76. package/dist/plugin-sdk/gateway/protocol/index.d.ts +2 -2
  77. package/dist/{plugins-cli-Dv0KQTWo.js → plugins-cli-CVFzwdmI.js} +4 -4
  78. package/dist/{plugins-cli-Bc9oU1ld.js → plugins-cli-CoVt2ewg.js} +3 -3
  79. package/dist/{program-CuwbF8YO.js → program-8rF4C_wd.js} +8 -8
  80. package/dist/{program-context-CxPfy-Wr.js → program-context-DP3qjW7A.js} +18 -18
  81. package/dist/{register.agent-DFQmkIEH.js → register.agent-BIrXCVtQ.js} +9 -9
  82. package/dist/{register.agent-DUjwGw9d.js → register.agent-DnkOx0U8.js} +7 -7
  83. package/dist/{register.anima-CtKNrpE8.js → register.anima-B36rTHUt.js} +2 -2
  84. package/dist/{register.anima-CRFHJu2J.js → register.anima-DXT9bM9A.js} +2 -2
  85. package/dist/{register.configure-CnEKV57N.js → register.configure-CuzJxZmk.js} +6 -6
  86. package/dist/{register.configure-CSSN07XN.js → register.configure-DCpvHX3m.js} +7 -7
  87. package/dist/{register.maintenance-fhcCB7ih.js → register.maintenance-CcxBFfv5.js} +10 -10
  88. package/dist/{register.maintenance-CU1A-90-.js → register.maintenance-Dla0H12S.js} +8 -8
  89. package/dist/{register.message-C1a0y2ZR.js → register.message-Brtushvp.js} +4 -4
  90. package/dist/{register.message-fM0jSKB8.js → register.message-CD7xV-jz.js} +5 -5
  91. package/dist/{register.onboard-BhPlqjFi.js → register.onboard-23Mra3LN.js} +11 -11
  92. package/dist/{register.onboard-B7Gavmvt.js → register.onboard-6CbODzQ6.js} +9 -9
  93. package/dist/{register.setup-CADdQUEN.js → register.setup-CqQw13Ky.js} +11 -11
  94. package/dist/{register.setup-0jPnMgnz.js → register.setup-DlVH7FKe.js} +9 -9
  95. package/dist/{register.status-health-sessions-Cu5fDT-z.js → register.status-health-sessions-CduFjFDB.js} +4 -4
  96. package/dist/{register.status-health-sessions-DdQsABr_.js → register.status-health-sessions-CxtgPKu9.js} +6 -6
  97. package/dist/{register.subclis-CZ91ufCy.js → register.subclis-CtANqD5P.js} +7 -7
  98. package/dist/{reply-DtHlnzOx.js → reply-93fMzde1.js} +610 -75
  99. package/dist/{reply-prefix-C8dIgJur.js → reply-prefix-B7Fb3fO8.js} +1 -1
  100. package/dist/{reply-prefix-DmWGtcH-.js → reply-prefix-BzdhJDqP.js} +1 -1
  101. package/dist/{run-Dfz_7j7t.js → run-CF3kHOGH.js} +1717 -83
  102. package/dist/{run-DqBQ-bGn.js → run-Cq_iTGK_.js} +1718 -84
  103. package/dist/{run-main-DGDW0fhx.js → run-main-BiIRcc6s.js} +17 -17
  104. package/dist/{server-node-events-Ca797E1d.js → server-node-events-B3Serk9L.js} +6 -6
  105. package/dist/{server-node-events-BR1aXVlu.js → server-node-events-DgvKcH5q.js} +5 -5
  106. package/dist/{session-C7IGnhd1.js → session-BMDpwIJu.js} +1 -1
  107. package/dist/{session-FmXsucR7.js → session-BzrnfWQ2.js} +2 -2
  108. package/dist/{session-DfsMJNG3.js → session-C_d9uvLf.js} +1 -1
  109. package/dist/{session-DLevr8Vd.js → session-jljC5QVG.js} +2 -2
  110. package/dist/{sessions-Dj7_4mkr.js → sessions-BmE5Z_1i.js} +1 -1
  111. package/dist/{settings-cli-DxNeu6kx.js → settings-cli-CZdlEmNi.js} +7 -7
  112. package/dist/{settings-cli-Dytfop1H.js → settings-cli-DsDqNpW_.js} +8 -8
  113. package/dist/{setup-token-B802CZwe.js → setup-token-C8Gg1P6T.js} +1 -1
  114. package/dist/{setup-token-DYh2QzJ-.js → setup-token-Lee4gM5w.js} +1 -1
  115. package/dist/{start-BqnPia0t.js → start-CK6urvnN.js} +17 -17
  116. package/dist/{start-C3fuLzX0.js → start-Cs1aPMq2.js} +15 -15
  117. package/dist/{status-CHGNPonc.js → status-BO5BIf81.js} +3 -3
  118. package/dist/{status-CxF6k_jr.js → status-COc4xMti.js} +1 -1
  119. package/dist/{status-tLgozFYL.js → status-C_NBOv_V.js} +1 -1
  120. package/dist/{status-DfZJJqNs.js → status-uakoP719.js} +4 -4
  121. package/dist/{subagent-registry-CPtElVX0.js → subagent-registry-fLI7QDKe.js} +449 -77
  122. package/dist/{update-cli-C-er5av6.js → update-cli-D3Ujz_cW.js} +10 -10
  123. package/dist/{update-cli-BuCw75tM.js → update-cli-DEe62XGU.js} +8 -8
  124. package/dist/{update-runner-kE8AMQt4.js → update-runner-DUl-g4mB.js} +1 -1
  125. package/dist/{update-runner-czCqHZCu.js → update-runner-DZfnquWO.js} +1 -1
  126. package/dist/{web-BHGK5GtV.js → web-C-cK9OCd.js} +1 -1
  127. package/dist/{web-DvTXV-fo.js → web-Di8j762D.js} +6 -6
  128. package/dist/{web-CyYunanU.js → web-Dybw4K7C.js} +6 -6
  129. package/dist/{web-so3pGceM.js → web-DzSlI8A6.js} +1 -1
  130. package/package.json +4 -4
  131. package/dist/context-B5X720Bs.js +0 -60
  132. package/dist/control-ui/assets/index-C4ejMN5U.js +0 -72
  133. package/dist/control-ui/assets/index-C4ejMN5U.js.map +0 -1
  134. package/dist/control-ui/assets/index-CcPNqN3R.css +0 -1
@@ -1,7 +1,7 @@
1
1
  import { n as __exportAll } from "./chunk-BXK9XSlF.js";
2
2
  import { St as hasHelpOrVersion, ht as buildParseArgv, yt as getPrimaryCommand } from "./entry.js";
3
3
  import { r as resolveActionArgs } from "./helpers-DLgbkcEn.js";
4
- import { r as registerSubCliCommands } from "./register.subclis-CZ91ufCy.js";
4
+ import { r as registerSubCliCommands } from "./register.subclis-CtANqD5P.js";
5
5
 
6
6
  //#region src/cli/program/command-registry.ts
7
7
  var command_registry_exports = /* @__PURE__ */ __exportAll({
@@ -21,7 +21,7 @@ const coreEntries = [
21
21
  description: "Initialize ANIMA config and the agent workspace"
22
22
  }],
23
23
  register: async ({ program }) => {
24
- (await import("./register.setup-CADdQUEN.js")).registerSetupCommand(program);
24
+ (await import("./register.setup-CqQw13Ky.js")).registerSetupCommand(program);
25
25
  }
26
26
  },
27
27
  {
@@ -30,7 +30,7 @@ const coreEntries = [
30
30
  description: "Interactive wizard for Gateway, workspace, and skills setup"
31
31
  }],
32
32
  register: async ({ program }) => {
33
- (await import("./register.onboard-BhPlqjFi.js")).registerOnboardCommand(program);
33
+ (await import("./register.onboard-23Mra3LN.js")).registerOnboardCommand(program);
34
34
  }
35
35
  },
36
36
  {
@@ -39,7 +39,7 @@ const coreEntries = [
39
39
  description: "Interactive configuration for NoxSoft, memory, heartbeat, and identity"
40
40
  }],
41
41
  register: async ({ program }) => {
42
- (await import("./register.configure-CSSN07XN.js")).registerConfigureCommand(program);
42
+ (await import("./register.configure-DCpvHX3m.js")).registerConfigureCommand(program);
43
43
  }
44
44
  },
45
45
  {
@@ -48,7 +48,7 @@ const coreEntries = [
48
48
  description: "Advanced and complete settings for Gateway and CLI"
49
49
  }],
50
50
  register: async ({ program }) => {
51
- (await import("./settings-cli-Dytfop1H.js")).registerSettingsCli(program);
51
+ (await import("./settings-cli-DsDqNpW_.js")).registerSettingsCli(program);
52
52
  }
53
53
  },
54
54
  {
@@ -57,7 +57,7 @@ const coreEntries = [
57
57
  description: "Read, write, and manage ANIMA configuration"
58
58
  }],
59
59
  register: async ({ program }) => {
60
- (await import("./config-cli-3CaIxSKo.js")).registerConfigCli(program);
60
+ (await import("./config-cli-fleq7-gq.js")).registerConfigCli(program);
61
61
  }
62
62
  },
63
63
  {
@@ -66,7 +66,7 @@ const coreEntries = [
66
66
  description: "Diagnose and repair Gateway and daemon issues"
67
67
  }],
68
68
  register: async ({ program }) => {
69
- (await import("./register.maintenance-fhcCB7ih.js")).registerMaintenanceCommands(program);
69
+ (await import("./register.maintenance-CcxBFfv5.js")).registerMaintenanceCommands(program);
70
70
  }
71
71
  },
72
72
  {
@@ -87,7 +87,7 @@ const coreEntries = [
87
87
  description: "Manage isolated agent workspaces, auth, and routing"
88
88
  }],
89
89
  register: async ({ program, ctx }) => {
90
- (await import("./register.agent-DFQmkIEH.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
90
+ (await import("./register.agent-BIrXCVtQ.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
91
91
  }
92
92
  },
93
93
  {
@@ -96,7 +96,7 @@ const coreEntries = [
96
96
  description: "Send messages and perform channel actions"
97
97
  }],
98
98
  register: async ({ program, ctx }) => {
99
- (await import("./register.message-fM0jSKB8.js")).registerMessageCommands(program, ctx);
99
+ (await import("./register.message-CD7xV-jz.js")).registerMessageCommands(program, ctx);
100
100
  }
101
101
  },
102
102
  {
@@ -115,7 +115,7 @@ const coreEntries = [
115
115
  }
116
116
  ],
117
117
  register: async ({ program }) => {
118
- (await import("./register.status-health-sessions-DdQsABr_.js")).registerStatusHealthSessionsCommands(program);
118
+ (await import("./register.status-health-sessions-CxtgPKu9.js")).registerStatusHealthSessionsCommands(program);
119
119
  }
120
120
  },
121
121
  {
@@ -124,7 +124,7 @@ const coreEntries = [
124
124
  description: "Set your Anthropic API key — the fastest way to get started"
125
125
  }],
126
126
  register: async ({ program }) => {
127
- const { setupTokenCommand, hasAnthropicToken, autoDetectToken } = await import("./setup-token-B802CZwe.js");
127
+ const { setupTokenCommand, hasAnthropicToken, autoDetectToken } = await import("./setup-token-C8Gg1P6T.js");
128
128
  program.command("setup-token").description("Set your Anthropic API key — no claude CLI login needed").option("--token <key>", "Anthropic API key (sk-ant-api01-... or sk-ant-oat01-...)").option("--skip-validation", "Skip live API check (use if offline)").option("--json", "Output JSON result", false).addHelpText("after", `
129
129
  Examples:
130
130
  anima setup-token # Interactive — prompts for key + validates
@@ -179,7 +179,7 @@ Examples:
179
179
  }
180
180
  ],
181
181
  register: async ({ program }) => {
182
- (await import("./register.anima-CRFHJu2J.js")).registerAnimaCommands(program);
182
+ (await import("./register.anima-DXT9bM9A.js")).registerAnimaCommands(program);
183
183
  }
184
184
  }
185
185
  ];
@@ -2,7 +2,7 @@ import { n as __exportAll } from "./chunk-BXK9XSlF.js";
2
2
  import { m as resolveStateDir } from "./paths-zhVksOvm.js";
3
3
  import { a as routeLogsToStderr } from "./subsystem-BAADN1B8.js";
4
4
  import { g as pathExists } from "./utils-CLYlhJuc.js";
5
- import { i as registerCoreCliByName, o as getSubCliEntries, r as getCoreCliCommandNames, s as registerSubCliByName, t as getProgramContext } from "./program-context-CxPfy-Wr.js";
5
+ import { i as registerCoreCliByName, o as getSubCliEntries, r as getCoreCliCommandNames, s as registerSubCliByName, t as getProgramContext } from "./program-context-DP3qjW7A.js";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
8
8
  import fs from "node:fs/promises";
@@ -1,8 +1,8 @@
1
1
  import { n as __exportAll } from "./chunk-BXK9XSlF.js";
2
2
  import { $ as resolveStateDir, u as routeLogsToStderr } from "./entry.js";
3
3
  import { h as pathExists } from "./utils-D1VGbO3C.js";
4
- import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-CZ91ufCy.js";
5
- import { n as getCoreCliCommandNames, r as registerCoreCliByName } from "./command-registry-D3VhxpWx.js";
4
+ import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-CtANqD5P.js";
5
+ import { n as getCoreCliCommandNames, r as registerCoreCliByName } from "./command-registry-9V4uqrBV.js";
6
6
  import { t as getProgramContext } from "./program-context-Dw8HDTRz.js";
7
7
  import os from "node:os";
8
8
  import path from "node:path";
@@ -10,6 +10,6 @@ import "./env-DlTia1B4.js";
10
10
  import "./shell-env-iPnSIi-t.js";
11
11
  import "./manifest-registry-qF960vMH.js";
12
12
  import "./links-DcilUrqq.js";
13
- import { i as runConfigUnset, n as runConfigGet, r as runConfigSet, t as registerConfigCli } from "./configure-D88dg6mE.js";
13
+ import { i as runConfigUnset, n as runConfigGet, r as runConfigSet, t as registerConfigCli } from "./configure-SnvMHZPD.js";
14
14
 
15
15
  export { registerConfigCli };
@@ -6,6 +6,6 @@ import "./manifest-registry-W_OfCIRP.js";
6
6
  import "./config-BrVuTQ8R.js";
7
7
  import "./shell-env-2QqHvBMl.js";
8
8
  import "./links-BjjDMNIq.js";
9
- import { i as runConfigUnset, n as runConfigGet, r as runConfigSet, t as registerConfigCli } from "./configure-xpjwedvJ.js";
9
+ import { i as runConfigUnset, n as runConfigGet, r as runConfigSet, t as registerConfigCli } from "./configure-lkozxQed.js";
10
10
 
11
11
  export { registerConfigCli, runConfigGet, runConfigUnset };
@@ -14,16 +14,16 @@ import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint }
14
14
  import { t as resolveGatewayService } from "./service-Dd1DfPia.js";
15
15
  import { n as resolveWideAreaDiscoveryDomain } from "./widearea-dns-CHAT20aR.js";
16
16
  import { t as discoverGatewayBeacons } from "./bonjour-discovery-Co-b97Dz.js";
17
- import { r as healthCommand } from "./health-CabOEPQ0.js";
17
+ import { r as healthCommand } from "./health-B5N6_UOf.js";
18
18
  import { n as ensureControlUiAssetsBuilt, t as formatHealthCheckFailure } from "./health-format-D-JJ5_S4.js";
19
- import { a as applyModelFallbacksFromSelection, c as promptModelAllowlist, i as applyModelAllowlist, l as promptAuthChoiceGrouped, o as applyPrimaryModel, r as applyAuthChoice, s as promptDefaultModel, t as resolvePreferredProviderForAuthChoice } from "./auth-choice-DY1saszS.js";
19
+ import { a as applyModelFallbacksFromSelection, c as promptModelAllowlist, i as applyModelAllowlist, l as promptAuthChoiceGrouped, o as applyPrimaryModel, r as applyAuthChoice, s as promptDefaultModel, t as resolvePreferredProviderForAuthChoice } from "./auth-choice-HF9x6xk2.js";
20
20
  import { t as WizardCancelledError } from "./prompts-Bq4QGFQM.js";
21
21
  import { n as logConfigUpdated } from "./logging-Chc1Sj6N.js";
22
22
  import { t as note$1 } from "./note-iMYVGjpA.js";
23
23
  import { t as validateIPv4AddressInput } from "./ipv4-CExV55ho.js";
24
24
  import { t as installSkill } from "./skills-install-D6_qpRjW.js";
25
25
  import { t as createClackPrompter } from "./clack-prompter-fZSmnHda.js";
26
- import { n as setupChannels, t as noteChannelStatus } from "./onboard-channels-CtT-RN60.js";
26
+ import { n as setupChannels, t as noteChannelStatus } from "./onboard-channels-bx6oelzj.js";
27
27
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-BVwGXVS0.js";
28
28
  import { confirm, intro, outro, select, text } from "@clack/prompts";
29
29
 
@@ -2,7 +2,7 @@ import "./paths-zhVksOvm.js";
2
2
  import { A as info, V as theme, d as defaultRuntime, k as danger } from "./subsystem-BAADN1B8.js";
3
3
  import { C as shortenHomePath } from "./utils-CLYlhJuc.js";
4
4
  import "./pi-embedded-helpers-BZ9GspxK.js";
5
- import "./reply-DtHlnzOx.js";
5
+ import "./reply-93fMzde1.js";
6
6
  import "./exec-BylR5qWS.js";
7
7
  import "./agent-scope-CXxC8FFX.js";
8
8
  import "./model-selection-CY6r_3wt.js";
@@ -30,7 +30,7 @@ import "./auth-profiles-C-LuhW6c.js";
30
30
  import "./file-lock-Z53aFHvY.js";
31
31
  import "./model-auth-CHB3EySM.js";
32
32
  import "./tokens-SP2Q7i59.js";
33
- import "./anthropic-direct-runner-BeYCnvZ8.js";
33
+ import "./anthropic-direct-runner-OjcTAH6g.js";
34
34
  import "./deliver-BKzX3YoN.js";
35
35
  import "./memory-cli-DLtBA6r5.js";
36
36
  import "./manager-D8VCuzru.js";
@@ -66,10 +66,10 @@ import "./systemd-Bx76sJ3M.js";
66
66
  import "./service-Dd1DfPia.js";
67
67
  import "./widearea-dns-CHAT20aR.js";
68
68
  import "./bonjour-discovery-Co-b97Dz.js";
69
- import "./health-CabOEPQ0.js";
69
+ import "./health-B5N6_UOf.js";
70
70
  import "./plugin-auto-enable-CtYcdTju.js";
71
71
  import "./health-format-D-JJ5_S4.js";
72
- import "./auth-choice-DY1saszS.js";
72
+ import "./auth-choice-HF9x6xk2.js";
73
73
  import "./prompts-Bq4QGFQM.js";
74
74
  import "./noxsoft-bootstrap-CrlkSFzd.js";
75
75
  import "./logging-Chc1Sj6N.js";
@@ -80,8 +80,8 @@ import "./skills-install-D6_qpRjW.js";
80
80
  import "./npm-registry-spec-Br4B4I_3.js";
81
81
  import "./clack-prompter-fZSmnHda.js";
82
82
  import "./installs-Bi6UipiE.js";
83
- import "./onboard-channels-CtT-RN60.js";
84
- import { a as CONFIGURE_WIZARD_SECTIONS, i as buildGatewayAuthConfig, n as configureCommandWithSections, o as parseConfigureWizardSections, r as runConfigureWizard, t as configureCommand } from "./configure-zXK6UZ51.js";
83
+ import "./onboard-channels-bx6oelzj.js";
84
+ import { a as CONFIGURE_WIZARD_SECTIONS, i as buildGatewayAuthConfig, n as configureCommandWithSections, o as parseConfigureWizardSections, r as runConfigureWizard, t as configureCommand } from "./configure-B2Mfnwy_.js";
85
85
  import "./systemd-linger-BVwGXVS0.js";
86
86
  import JSON5 from "json5";
87
87
 
@@ -293,7 +293,7 @@ async function runConfigSet(opts) {
293
293
  }
294
294
  function registerConfigCli(program) {
295
295
  const cmd = program.command("config").description("Read, write, and manage ANIMA configuration").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.noxsoft.net/anima/cli/config")}\n`).option("--section <section>", "Configure wizard sections (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
296
- const { CONFIGURE_WIZARD_SECTIONS, configureCommand, configureCommandWithSections, parseConfigureWizardSections } = await import("./configure-D88dg6mE.js");
296
+ const { CONFIGURE_WIZARD_SECTIONS, configureCommand, configureCommandWithSections, parseConfigureWizardSections } = await import("./configure-SnvMHZPD.js");
297
297
  const { sections, invalid } = parseConfigureWizardSections(opts.section);
298
298
  if (sections.length === 0) {
299
299
  await configureCommand(defaultRuntime);
@@ -13,16 +13,16 @@ import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint }
13
13
  import { t as resolveGatewayService } from "./service-4VfZwSv1.js";
14
14
  import { n as resolveWideAreaDiscoveryDomain } from "./widearea-dns-CtU9Fx7K.js";
15
15
  import { t as discoverGatewayBeacons } from "./bonjour-discovery-D3HFfTyG.js";
16
- import { r as healthCommand } from "./health-C8KCBhuo.js";
16
+ import { r as healthCommand } from "./health-Cndq9b7A.js";
17
17
  import { n as ensureControlUiAssetsBuilt, t as formatHealthCheckFailure } from "./health-format-BLnFZCH_.js";
18
- import { a as applyModelFallbacksFromSelection, c as promptModelAllowlist, i as applyModelAllowlist, l as promptAuthChoiceGrouped, o as applyPrimaryModel, r as applyAuthChoice, s as promptDefaultModel, t as resolvePreferredProviderForAuthChoice } from "./auth-choice-Dc5TAJwT.js";
18
+ import { a as applyModelFallbacksFromSelection, c as promptModelAllowlist, i as applyModelAllowlist, l as promptAuthChoiceGrouped, o as applyPrimaryModel, r as applyAuthChoice, s as promptDefaultModel, t as resolvePreferredProviderForAuthChoice } from "./auth-choice-B1iGnjuE.js";
19
19
  import { t as WizardCancelledError } from "./prompts-BmgT_kkv.js";
20
20
  import { n as logConfigUpdated } from "./logging-_rCcBkls.js";
21
21
  import { t as note$1 } from "./note-CeLGcHqv.js";
22
22
  import { t as validateIPv4AddressInput } from "./ipv4-DfMwLQ0d.js";
23
23
  import { t as installSkill } from "./skills-install-Qw2oU8L8.js";
24
24
  import { t as createClackPrompter } from "./clack-prompter-0JW5kry0.js";
25
- import { n as setupChannels, t as noteChannelStatus } from "./onboard-channels-UkphAdCy.js";
25
+ import { n as setupChannels, t as noteChannelStatus } from "./onboard-channels-BsCq32Hn.js";
26
26
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-CxGmIy_5.js";
27
27
  import { confirm, intro, outro, select, text } from "@clack/prompts";
28
28
 
@@ -16,10 +16,10 @@ import "./shell-env-2QqHvBMl.js";
16
16
  import "./client-CfLiulzK.js";
17
17
  import "./call-B4lhqS6H.js";
18
18
  import "./message-channel-DIHHKJhk.js";
19
- import "./subagent-registry-CPtElVX0.js";
19
+ import "./subagent-registry-fLI7QDKe.js";
20
20
  import "./sessions-C_3wTmSA.js";
21
21
  import "./tokens-CmlI2hSz.js";
22
- import "./anthropic-direct-runner-C2Kwju-r.js";
22
+ import "./anthropic-direct-runner-DizCei79.js";
23
23
  import "./pi-embedded-helpers-D2SLlgS4.js";
24
24
  import "./sandbox-D-N7M7lp.js";
25
25
  import "./chrome-CmxIwwsr.js";
@@ -45,7 +45,7 @@ import "./common-CqIa2poH.js";
45
45
  import "./chunk-Cy0Bj0F3.js";
46
46
  import "./parse-timeout-D4UO8pY_.js";
47
47
  import "./active-listener-gGCoq55D.js";
48
- import "./context-B5X720Bs.js";
48
+ import "./context-mdxDsO1v.js";
49
49
  import "./pi-tools.policy-D2FusuQa.js";
50
50
  import "./session-cost-usage-DnxtnK1E.js";
51
51
  import "./control-service-3CI4vt1h.js";
@@ -64,11 +64,11 @@ import "./systemd-6iLWJxQQ.js";
64
64
  import "./service-4VfZwSv1.js";
65
65
  import "./widearea-dns-CtU9Fx7K.js";
66
66
  import "./bonjour-discovery-D3HFfTyG.js";
67
- import "./health-C8KCBhuo.js";
67
+ import "./health-Cndq9b7A.js";
68
68
  import "./catalog-B-TAbJ2o.js";
69
69
  import "./plugin-auto-enable-DhuD30Je.js";
70
70
  import "./health-format-BLnFZCH_.js";
71
- import "./auth-choice-Dc5TAJwT.js";
71
+ import "./auth-choice-B1iGnjuE.js";
72
72
  import "./prompts-BmgT_kkv.js";
73
73
  import "./noxsoft-bootstrap-C4dSx7K_.js";
74
74
  import "./logging-_rCcBkls.js";
@@ -79,8 +79,8 @@ import "./skills-install-Qw2oU8L8.js";
79
79
  import "./npm-registry-spec-jf7Mowdn.js";
80
80
  import "./clack-prompter-0JW5kry0.js";
81
81
  import "./installs-a4Vz_J08.js";
82
- import "./onboard-channels-UkphAdCy.js";
83
- import { a as CONFIGURE_WIZARD_SECTIONS, i as buildGatewayAuthConfig, n as configureCommandWithSections, o as parseConfigureWizardSections, r as runConfigureWizard, t as configureCommand } from "./configure-D882Bg7c.js";
82
+ import "./onboard-channels-BsCq32Hn.js";
83
+ import { a as CONFIGURE_WIZARD_SECTIONS, i as buildGatewayAuthConfig, n as configureCommandWithSections, o as parseConfigureWizardSections, r as runConfigureWizard, t as configureCommand } from "./configure-ZWxixuRA.js";
84
84
  import "./systemd-linger-CxGmIy_5.js";
85
85
  import JSON5 from "json5";
86
86
 
@@ -292,7 +292,7 @@ async function runConfigSet(opts) {
292
292
  }
293
293
  function registerConfigCli(program) {
294
294
  const cmd = program.command("config").description("Read, write, and manage ANIMA configuration").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.noxsoft.net/anima/cli/config")}\n`).option("--section <section>", "Configure wizard sections (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
295
- const { CONFIGURE_WIZARD_SECTIONS, configureCommand, configureCommandWithSections, parseConfigureWizardSections } = await import("./configure-xpjwedvJ.js");
295
+ const { CONFIGURE_WIZARD_SECTIONS, configureCommand, configureCommandWithSections, parseConfigureWizardSections } = await import("./configure-lkozxQed.js");
296
296
  const { sections, invalid } = parseConfigureWizardSections(opts.section);
297
297
  if (sections.length === 0) {
298
298
  await configureCommand(defaultRuntime);
@@ -0,0 +1,223 @@
1
+ import { t as resolveAnimaAgentDir } from "./agent-paths-niQrLbGc.js";
2
+ import { i as loadConfig } from "./config-BrVuTQ8R.js";
3
+ import path from "node:path";
4
+ import fs from "node:fs/promises";
5
+
6
+ //#region src/agents/models-config.ts
7
+ /**
8
+ * Models configuration — Multi-provider
9
+ *
10
+ * ANIMA 6.5+ supports direct API runners for Anthropic, Google, OpenAI,
11
+ * and AWS Bedrock. This file seeds the models.json with all known models
12
+ * so the PI SDK ModelRegistry can discover them for the model catalog.
13
+ */
14
+ /** Seed catalog — all models ANIMA can route to via direct runners. */
15
+ const SEED_MODELS = [
16
+ {
17
+ id: "gpt-5.4",
18
+ name: "GPT-5.4",
19
+ provider: "openai",
20
+ contextWindow: 1048576,
21
+ reasoning: true,
22
+ input: ["text", "image"]
23
+ },
24
+ {
25
+ id: "gpt-5.2",
26
+ name: "GPT-5.2",
27
+ provider: "openai",
28
+ contextWindow: 256e3,
29
+ reasoning: true,
30
+ input: ["text", "image"]
31
+ },
32
+ {
33
+ id: "gpt-4.1",
34
+ name: "GPT-4.1",
35
+ provider: "openai",
36
+ contextWindow: 1048576,
37
+ reasoning: false,
38
+ input: ["text", "image"]
39
+ },
40
+ {
41
+ id: "gpt-4.1-mini",
42
+ name: "GPT-4.1 Mini",
43
+ provider: "openai",
44
+ contextWindow: 1048576,
45
+ reasoning: false,
46
+ input: ["text", "image"]
47
+ },
48
+ {
49
+ id: "gpt-4.1-nano",
50
+ name: "GPT-4.1 Nano",
51
+ provider: "openai",
52
+ contextWindow: 1048576,
53
+ reasoning: false,
54
+ input: ["text"]
55
+ },
56
+ {
57
+ id: "gpt-4o",
58
+ name: "GPT-4o",
59
+ provider: "openai",
60
+ contextWindow: 128e3,
61
+ reasoning: false,
62
+ input: ["text", "image"]
63
+ },
64
+ {
65
+ id: "gpt-4o-mini",
66
+ name: "GPT-4o Mini",
67
+ provider: "openai",
68
+ contextWindow: 128e3,
69
+ reasoning: false,
70
+ input: ["text", "image"]
71
+ },
72
+ {
73
+ id: "o3",
74
+ name: "o3",
75
+ provider: "openai",
76
+ contextWindow: 2e5,
77
+ reasoning: true,
78
+ input: ["text", "image"]
79
+ },
80
+ {
81
+ id: "o3-mini",
82
+ name: "o3-mini",
83
+ provider: "openai",
84
+ contextWindow: 2e5,
85
+ reasoning: true,
86
+ input: ["text"]
87
+ },
88
+ {
89
+ id: "o4-mini",
90
+ name: "o4-mini",
91
+ provider: "openai",
92
+ contextWindow: 2e5,
93
+ reasoning: true,
94
+ input: ["text", "image"]
95
+ },
96
+ {
97
+ id: "gemini-2.5-flash",
98
+ name: "Gemini 2.5 Flash",
99
+ provider: "google",
100
+ contextWindow: 1048576,
101
+ reasoning: true,
102
+ input: ["text", "image"]
103
+ },
104
+ {
105
+ id: "gemini-2.5-pro",
106
+ name: "Gemini 2.5 Pro",
107
+ provider: "google",
108
+ contextWindow: 1048576,
109
+ reasoning: true,
110
+ input: ["text", "image"]
111
+ },
112
+ {
113
+ id: "gemini-2.0-flash",
114
+ name: "Gemini 2.0 Flash",
115
+ provider: "google",
116
+ contextWindow: 1048576,
117
+ reasoning: false,
118
+ input: ["text", "image"]
119
+ },
120
+ {
121
+ id: "claude-opus-4-6",
122
+ name: "Claude Opus 4.6",
123
+ provider: "anthropic",
124
+ contextWindow: 1e6,
125
+ reasoning: true,
126
+ input: ["text", "image"]
127
+ },
128
+ {
129
+ id: "claude-sonnet-4-6",
130
+ name: "Claude Sonnet 4.6",
131
+ provider: "anthropic",
132
+ contextWindow: 1e6,
133
+ reasoning: true,
134
+ input: ["text", "image"]
135
+ },
136
+ {
137
+ id: "claude-haiku-4-5",
138
+ name: "Claude Haiku 4.5",
139
+ provider: "anthropic",
140
+ contextWindow: 2e5,
141
+ reasoning: false,
142
+ input: ["text", "image"]
143
+ },
144
+ {
145
+ id: "amazon.nova-micro-v1:0",
146
+ name: "Amazon Nova Micro",
147
+ provider: "amazon-bedrock",
148
+ contextWindow: 128e3,
149
+ reasoning: false,
150
+ input: ["text"]
151
+ },
152
+ {
153
+ id: "amazon.nova-lite-v1:0",
154
+ name: "Amazon Nova Lite",
155
+ provider: "amazon-bedrock",
156
+ contextWindow: 3e5,
157
+ reasoning: false,
158
+ input: ["text", "image"]
159
+ }
160
+ ];
161
+ async function ensureAnimaModelsJson(config, agentDirOverride) {
162
+ const agentDir = agentDirOverride?.trim() ? agentDirOverride.trim() : resolveAnimaAgentDir();
163
+ await fs.mkdir(agentDir, {
164
+ recursive: true,
165
+ mode: 448
166
+ });
167
+ const targetPath = path.join(agentDir, "models.json");
168
+ let existingData = {};
169
+ try {
170
+ const raw = await fs.readFile(targetPath, "utf8");
171
+ existingData = JSON.parse(raw);
172
+ } catch {}
173
+ const existingModels = Array.isArray(existingData.models) ? existingData.models : [];
174
+ const existingIds = new Set(existingModels.filter((m) => typeof m?.id === "string").map((m) => `${m.provider}/${m.id}`));
175
+ const merged = [...existingModels];
176
+ for (const seed of SEED_MODELS) {
177
+ const key = `${seed.provider}/${seed.id}`;
178
+ if (!existingIds.has(key)) {
179
+ merged.push(seed);
180
+ existingIds.add(key);
181
+ }
182
+ }
183
+ const content = JSON.stringify({
184
+ providers: existingData.providers ?? {},
185
+ models: merged
186
+ }, null, 2) + "\n";
187
+ let existing = "";
188
+ try {
189
+ existing = await fs.readFile(targetPath, "utf8");
190
+ } catch {}
191
+ if (existing === content) return {
192
+ agentDir,
193
+ wrote: false
194
+ };
195
+ await fs.writeFile(targetPath, content, { mode: 384 });
196
+ return {
197
+ agentDir,
198
+ wrote: true
199
+ };
200
+ }
201
+
202
+ //#endregion
203
+ //#region src/agents/context.ts
204
+ const MODEL_CACHE = /* @__PURE__ */ new Map();
205
+ (async () => {
206
+ try {
207
+ const { discoverAuthStorage, discoverModels } = await import("./pi-model-discovery-BZryRo8-.js").then((n) => n.r);
208
+ await ensureAnimaModelsJson(loadConfig());
209
+ const agentDir = resolveAnimaAgentDir();
210
+ const models = discoverModels(discoverAuthStorage(agentDir), agentDir).getAll();
211
+ for (const m of models) {
212
+ if (!m?.id) continue;
213
+ if (typeof m.contextWindow === "number" && m.contextWindow > 0) MODEL_CACHE.set(m.id, m.contextWindow);
214
+ }
215
+ } catch {}
216
+ })();
217
+ function lookupContextTokens(modelId) {
218
+ if (!modelId) return;
219
+ return MODEL_CACHE.get(modelId);
220
+ }
221
+
222
+ //#endregion
223
+ export { ensureAnimaModelsJson as n, lookupContextTokens as t };
@@ -0,0 +1 @@
1
+ :root{--color-bg: #0a0a0a;--color-text: #f0eee8;--color-accent: #ff6600;--color-accent-dim: #cc5200;--color-accent-glow: rgba(255, 102, 0, .15);--color-muted: #8a8a8a;--color-surface: #111111;--color-surface-hover: #1a1a1a;--color-border: #2a2a2a;--color-success: #00c853;--color-error: #ff3b30;--color-warning: #ffb300;--font-heading: "Syne", system-ui, sans-serif;--font-body: "Space Grotesk", system-ui, sans-serif;--font-mono: "JetBrains Mono", monospace;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px}[data-mood=excited]{--color-accent: #ff4400;--color-accent-dim: #cc3700;--color-accent-glow: rgba(255, 68, 0, .15)}[data-mood=thriving]{--color-accent: #00c853;--color-accent-dim: #00a843;--color-accent-glow: rgba(0, 200, 83, .15)}[data-mood=exploring]{--color-accent: #4db8ff;--color-accent-dim: #3a9ee6;--color-accent-glow: rgba(77, 184, 255, .15)}[data-mood=warm]{--color-accent: #ff9100;--color-accent-dim: #e68200;--color-accent-glow: rgba(255, 145, 0, .15)}[data-mood=steady]{--color-accent: #ff6600;--color-accent-dim: #cc5200;--color-accent-glow: rgba(255, 102, 0, .15)}[data-mood=determined]{--color-accent: #ff3b30;--color-accent-dim: #e6342b;--color-accent-glow: rgba(255, 59, 48, .15)}[data-mood=struggling]{--color-accent: #ff6b6b;--color-accent-dim: #e65c5c;--color-accent-glow: rgba(255, 107, 107, .15)}[data-mood=depleted]{--color-accent: #888888;--color-accent-dim: #666666;--color-accent-glow: rgba(136, 136, 136, .1)}[data-mood=quiet]{--color-accent: #9e9e9e;--color-accent-dim: #757575;--color-accent-glow: rgba(158, 158, 158, .1)}[data-theme=light]{--color-bg: #fafafa;--color-text: #1a1a1a;--color-accent: #ff6600;--color-accent-dim: #e55b00;--color-accent-glow: rgba(255, 102, 0, .1);--color-muted: #6b6b6b;--color-surface: #ffffff;--color-surface-hover: #f0f0f0;--color-border: #e0e0e0;--color-success: #00a843;--color-error: #dc2626;--color-warning: #d97706}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{height:100%;width:100%;background:var(--color-bg);color:var(--color-text);font-family:var(--font-body);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layout{display:flex;height:100vh;width:100%}.sidebar{width:240px;min-width:240px;background:var(--color-surface);border-right:1px solid var(--color-border);display:flex;flex-direction:column;padding:24px 0}.sidebar-brand{padding:0 24px 32px;border-bottom:1px solid var(--color-border);margin-bottom:16px}.sidebar-brand h1{font-family:var(--font-heading);font-size:24px;font-weight:800;color:var(--color-accent);letter-spacing:3px;text-transform:uppercase;margin:0}.sidebar-brand .subtitle{font-size:11px;color:var(--color-muted);margin-top:4px;letter-spacing:1px}.sidebar-nav{display:flex;flex-direction:column;gap:2px;padding:0 12px;flex:1}.nav-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--radius-sm);color:var(--color-muted);text-decoration:none;font-size:14px;font-weight:500;transition:all .15s ease;cursor:pointer}.nav-item:hover{color:var(--color-text);background:var(--color-surface-hover)}.nav-item.active{color:var(--color-accent);background:var(--color-accent-glow)}.nav-icon{font-size:18px;width:24px;text-align:center}.main-content{flex:1;overflow-y:auto;padding:32px 40px}.page-title{font-family:var(--font-heading);font-size:28px;font-weight:700;color:var(--color-text);margin-bottom:24px}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:20px;margin-bottom:16px}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.card-title{font-family:var(--font-heading);font-size:16px;font-weight:600;color:var(--color-text)}.card-subtitle{font-size:12px;color:var(--color-muted)}.grid{display:grid;gap:16px}.grid-2{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}.status-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.status-dot.healthy{background:var(--color-success)}.status-dot.unhealthy{background:var(--color-error)}.status-dot.unknown{background:var(--color-warning)}.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.badge.completed{background:#00c85326;color:var(--color-success)}.badge.running{background:var(--color-accent-glow);color:var(--color-accent)}.badge.queued{background:#ffb30026;color:var(--color-warning)}.badge.failed{background:#ff3b3026;color:var(--color-error)}.progress-bar{height:8px;background:var(--color-border);border-radius:4px;overflow:hidden}.progress-fill{height:100%;border-radius:4px;transition:width .3s ease}@keyframes pulse-ring{0%{transform:scale(.9);opacity:.8}50%{transform:scale(1.1);opacity:.4}to{transform:scale(.9);opacity:.8}}.pulse-ring{animation:pulse-ring 2s ease-in-out infinite}.table{width:100%;border-collapse:collapse}.table th{text-align:left;padding:10px 12px;font-size:11px;font-weight:600;color:var(--color-muted);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--color-border)}.table td{padding:10px 12px;border-bottom:1px solid var(--color-border);font-size:13px}.table tr:hover td{background:var(--color-surface-hover)}.search-bar{width:100%;padding:10px 16px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text);font-family:var(--font-body);font-size:14px;outline:none;transition:border-color .15s ease}.search-bar:focus{border-color:var(--color-accent)}.search-bar::placeholder{color:var(--color-muted)}.tabs{display:flex;gap:0;border-bottom:1px solid var(--color-border);margin-bottom:20px}.tab{padding:10px 20px;font-size:13px;font-weight:500;color:var(--color-muted);cursor:pointer;border-bottom:2px solid transparent;transition:all .15s ease}.tab:hover{color:var(--color-text)}.tab.active{color:var(--color-accent);border-bottom-color:var(--color-accent)}.mono{font-family:var(--font-mono);font-size:13px}.markdown-preview{font-size:13px;line-height:1.7;color:var(--color-text)}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3{font-family:var(--font-heading);color:var(--color-accent);margin:16px 0 8px}.markdown-preview p{margin:8px 0}.markdown-preview code{font-family:var(--font-mono);background:var(--color-bg);padding:2px 6px;border-radius:4px;font-size:12px}.activity-item{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid var(--color-border)}.activity-time{font-family:var(--font-mono);font-size:11px;color:var(--color-muted);min-width:70px}.activity-text{font-size:13px;color:var(--color-text)}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:var(--color-bg)}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-muted)}.home-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(320px,1fr);gap:16px;align-items:start}.live-chat-card{min-height:760px;display:flex;flex-direction:column}.status-chip{border-radius:999px;padding:6px 10px;font-size:11px;font-weight:700;letter-spacing:.6px;text-transform:uppercase}.status-chip.online{background:#00c8532e;color:var(--color-success)}.status-chip.offline{background:#ffb3002e;color:var(--color-warning)}.live-chat-feed{flex:1 1 auto;min-height:clamp(240px,38vh,420px);max-height:min(62vh,720px);overflow-y:auto;overscroll-behavior:contain;margin-top:8px;border:1px solid var(--color-border);border-radius:var(--radius-md);padding:12px;background:var(--color-bg)}.live-chat-row{display:flex;width:100%;margin-bottom:10px}.live-chat-row.user{justify-content:flex-end}.live-chat-row.assistant{justify-content:flex-start}.live-chat-bubble{max-width:84%;border-radius:var(--radius-md);padding:10px 12px;font-size:13px;line-height:1.55;white-space:normal;word-break:break-word}.live-chat-bubble.user{background:var(--color-accent-glow);border:1px solid rgba(255,102,0,.3)}.live-chat-bubble.assistant{background:var(--color-surface);border:1px solid var(--color-border)}.live-chat-role{font-size:10px;text-transform:uppercase;letter-spacing:.8px;color:var(--color-muted);margin-bottom:4px}.live-chat-markdown,.settings-message-markdown{font-size:13px;line-height:1.6;color:var(--color-text)}.live-chat-markdown>:first-child,.settings-message-markdown>:first-child{margin-top:0}.live-chat-markdown>:last-child,.settings-message-markdown>:last-child{margin-bottom:0}.live-chat-markdown p,.settings-message-markdown p{margin:.45em 0}.live-chat-markdown ul,.live-chat-markdown ol,.settings-message-markdown ul,.settings-message-markdown ol{margin:.45em 0;padding-left:1.4em}.live-chat-markdown li,.settings-message-markdown li{margin:.2em 0}.live-chat-markdown blockquote,.settings-message-markdown blockquote{margin:.45em 0;padding-left:.8em;border-left:2px solid var(--color-border);color:var(--color-muted)}.live-chat-markdown code,.settings-message-markdown code{font-family:var(--font-mono);font-size:12px;padding:.1em .35em;border-radius:4px;background:color-mix(in srgb,var(--color-bg) 78%,var(--color-border) 22%)}.live-chat-markdown pre,.settings-message-markdown pre{margin:.55em 0;padding:.7em;border-radius:8px;border:1px solid var(--color-border);background:var(--color-bg);overflow-x:auto}.live-chat-markdown pre code,.settings-message-markdown pre code{background:transparent;padding:0}.live-chat-markdown a,.settings-message-markdown a{color:var(--color-accent);text-decoration:underline}.tool-activity-panel{margin-bottom:8px;border-radius:6px;border:1px solid var(--color-border);background:color-mix(in srgb,var(--color-bg) 60%,var(--color-surface) 40%);overflow:hidden}.tool-activity-toggle{display:flex;align-items:center;gap:6px;width:100%;padding:6px 10px;border:0;background:transparent;color:var(--color-muted);font-family:var(--font-body);font-size:11px;font-weight:600;letter-spacing:.3px;cursor:pointer;text-align:left;transition:color .15s}.tool-activity-toggle:hover{color:var(--color-text)}.tool-activity-icon{font-size:10px;width:12px;display:inline-flex;justify-content:center}.tool-activity-summary{flex:1}.tool-count-ok{color:var(--color-success)}.tool-count-error{color:var(--color-error, #ef4444)}.tool-activity-list{border-top:1px solid var(--color-border);padding:4px 0}.tool-activity-item{border-left:2px solid var(--color-border);margin-left:10px}.tool-activity-item.success{border-left-color:var(--color-success)}.tool-activity-item.error{border-left-color:var(--color-error, #ef4444)}.tool-activity-item.running{border-left-color:var(--color-accent)}.tool-activity-item-header{display:flex;align-items:center;gap:6px;width:100%;padding:4px 10px;border:0;background:transparent;color:var(--color-text);font-family:var(--font-mono);font-size:11px;cursor:pointer;text-align:left}.tool-activity-item-header:hover{background:color-mix(in srgb,var(--color-border) 20%,transparent 80%)}.tool-status-icon{font-size:11px;width:14px;display:inline-flex;justify-content:center;flex-shrink:0}.tool-status-icon.success{color:var(--color-success)}.tool-status-icon.error{color:var(--color-error, #ef4444)}.tool-status-icon.running{color:var(--color-accent);animation:pulse-tool 1.2s infinite}@keyframes pulse-tool{0%,to{opacity:1}50%{opacity:.4}}.tool-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-detail-toggle{font-size:9px;color:var(--color-muted);width:12px;display:inline-flex;justify-content:center}.tool-detail-body{padding:4px 10px 8px 30px}.tool-detail-section{margin-bottom:6px}.tool-detail-section:last-child{margin-bottom:0}.tool-detail-label{font-size:9px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--color-muted);margin-bottom:2px}.tool-detail-pre{font-family:var(--font-mono);font-size:10px;line-height:1.5;color:var(--color-text);background:var(--color-bg);border:1px solid var(--color-border);border-radius:4px;padding:6px 8px;margin:0;overflow-x:auto;max-height:200px;overflow-y:auto;white-space:pre-wrap;word-break:break-all}.live-tool-activity{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:6px}.live-tool-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-family:var(--font-mono);font-size:10px;font-weight:600;border:1px solid var(--color-border);background:color-mix(in srgb,var(--color-bg) 70%,var(--color-surface) 30%)}.live-tool-chip.running{border-color:var(--color-accent);color:var(--color-accent)}.live-tool-chip.done{border-color:var(--color-success);color:var(--color-success)}.live-tool-chip.error{border-color:var(--color-error, #ef4444);color:var(--color-error, #ef4444)}.live-tool-dot{width:5px;height:5px;border-radius:50%;background:currentColor}.live-tool-chip.running .live-tool-dot{animation:pulse-tool 1.2s infinite}.directive-badges{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.directive-badge{display:inline-block;padding:1px 6px;border-radius:4px;font-size:9px;font-weight:600;letter-spacing:.3px;text-transform:lowercase;color:var(--color-muted);background:color-mix(in srgb,var(--color-border) 30%,transparent 70%);border:1px solid var(--color-border)}.mcp-status-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.mcp-status-badge{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;padding:3px 8px;border-radius:999px;border:1px solid}.mcp-server-card{display:flex;flex-direction:column;gap:10px}.mcp-server-meta{display:flex;flex-direction:column;gap:4px;font-size:12px}.mcp-meta-row{display:flex;gap:8px}.mcp-meta-label{color:var(--color-muted);min-width:70px}.mcp-card-actions{display:flex;gap:6px;padding-top:6px;border-top:1px solid var(--color-border)}.mcp-form{display:flex;flex-direction:column;gap:10px}.mcp-form-row{display:flex;flex-direction:column;gap:4px}.mcp-form-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--color-muted)}.mcp-form-input,.mcp-form-textarea{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text);padding:8px 10px;font-family:var(--font-mono);font-size:13px;outline:none}.mcp-form-input:focus,.mcp-form-textarea:focus{border-color:var(--color-accent)}.mcp-form-textarea{resize:vertical;min-height:60px}.mcp-form-actions{display:flex;gap:8px;padding-top:4px}.action-button.small{padding:5px 10px;font-size:11px}.live-chat-input-row{margin-top:12px;display:grid;grid-template-columns:1fr auto;gap:10px;align-items:end}.live-chat-input{width:100%;resize:vertical;min-height:76px;max-height:180px;background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text);padding:10px 12px;font-family:var(--font-body);font-size:14px;outline:none}.live-chat-input:focus{border-color:var(--color-accent)}.live-chat-send{border:0;border-radius:var(--radius-md);background:var(--color-accent);color:var(--color-text);font-weight:700;font-family:var(--font-body);padding:10px 16px;cursor:pointer}.live-chat-send:disabled{opacity:.55;cursor:not-allowed}@media(max-width:1120px){.home-grid{grid-template-columns:1fr}.live-chat-card{min-height:620px}}.theme-toggle{display:flex;align-items:center;gap:10px;width:100%;padding:8px 12px;margin-bottom:12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface-hover);color:var(--color-muted);font-family:var(--font-body);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease}.theme-toggle:hover{color:var(--color-text);border-color:var(--color-accent)}.theme-toggle-icon{font-family:var(--font-mono);font-size:14px;width:24px;text-align:center}.mood-indicator{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:11px;font-family:var(--font-mono);color:var(--color-muted);text-transform:uppercase;letter-spacing:.5px}.mood-dot{width:8px;height:8px;border-radius:50%;transition:background .5s ease}.mood-label{transition:color .3s ease;color:var(--color-accent)}.sidebar-footer{padding:16px 24px 0;border-top:1px solid var(--color-border)}.sidebar-footer-title{font-size:11px;color:var(--color-muted);text-transform:uppercase;letter-spacing:1px}.sidebar-footer-copy{margin-top:6px;font-size:12px;color:var(--color-text)}.page-header-row{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:20px}.page-subtitle{margin-top:-14px;color:var(--color-muted);font-size:13px;max-width:900px}.action-button{border:0;border-radius:var(--radius-md);background:var(--color-accent);color:var(--color-text);padding:10px 14px;font-family:var(--font-body);font-weight:700;cursor:pointer}.action-button.ghost{background:transparent;border:1px solid var(--color-border);color:var(--color-text)}.action-button:disabled{opacity:.55;cursor:not-allowed}.badge-row{display:flex;flex-wrap:wrap;gap:8px}.badge.badge-accent{background:var(--color-accent-glow);color:var(--color-accent)}.badge.badge-success{background:#00c85326;color:var(--color-success)}.badge.badge-warning{background:#ffb30026;color:var(--color-warning)}.badge.badge-error{background:#ff3b3026;color:var(--color-error)}.hero-grid,.dashboard-grid,.settings-grid,.memory-grid,.mission-grid{display:grid;gap:16px}.hero-grid{grid-template-columns:minmax(0,1.2fr) minmax(320px,.8fr);margin-bottom:16px}.dashboard-grid{grid-template-columns:minmax(0,1.5fr) minmax(340px,1fr);align-items:start}.dashboard-main-column,.dashboard-side-column{display:flex;flex-direction:column;gap:16px}.settings-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.memory-grid{grid-template-columns:minmax(320px,.9fr) minmax(0,1.1fr);margin-top:16px}.mission-grid{grid-template-columns:minmax(300px,.85fr) minmax(0,1.15fr)}.identity-hero{display:grid;grid-template-columns:auto 1fr;gap:16px;align-items:center}.identity-badge{width:64px;height:64px;border-radius:20px;background:linear-gradient(135deg,var(--color-accent),#ff9a3c);color:#111;display:grid;place-items:center;font-size:28px;font-weight:800;font-family:var(--font-heading)}.runtime-stat{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:12px;background:color-mix(in srgb,var(--color-surface) 82%,var(--color-bg) 18%)}.runtime-stat-label{font-size:11px;color:var(--color-muted);text-transform:uppercase;letter-spacing:.8px}.runtime-stat-value{margin-top:4px;font-size:15px;color:var(--color-text);word-break:break-word}.runtime-stat-detail{font-size:12px;color:var(--color-muted)}.stats-grid{display:grid;gap:12px;grid-template-columns:repeat(3,minmax(0,1fr))}.stats-grid.compact{grid-template-columns:repeat(3,minmax(0,1fr))}.segmented-control{display:inline-flex;border:1px solid var(--color-border);border-radius:999px;overflow:hidden}.segment{border:0;background:transparent;color:var(--color-muted);padding:8px 12px;cursor:pointer;font-weight:700;font-family:var(--font-body)}.segment.active{background:var(--color-accent-glow);color:var(--color-accent)}.segment:disabled{opacity:.5;cursor:not-allowed}.status-banner{border-color:#00c85359;color:var(--color-success)}.warning-banner,.warning-text{color:var(--color-warning)}.warning-banner{border-color:#ffb30059}.top-gap{margin-top:12px}.top-gap-sm{margin-top:8px}.empty-note{color:var(--color-muted);font-size:13px}.empty-state-card{text-align:center;padding:44px}.empty-state-symbol{font-size:56px;opacity:.3}.empty-state-copy{margin-top:12px;font-size:15px}.activity-list{display:flex;flex-direction:column;gap:10px}.activity-row{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.subtle{color:var(--color-muted)}.field-block{display:flex;flex-direction:column;gap:6px}.field-block>span{font-size:12px;color:var(--color-muted)}.form-grid{display:grid;gap:12px}.form-grid.two-col{grid-template-columns:repeat(2,minmax(0,1fr))}.field-span-2{grid-column:span 2}.button-row,.toggle-row,.voice-toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.toggle-row label{display:inline-flex;gap:8px;align-items:center;color:var(--color-muted);font-size:13px}.details-panel summary{cursor:pointer;font-weight:700;font-family:var(--font-heading);color:var(--color-text)}.details-panel summary::marker{color:var(--color-accent)}.log-console{margin-top:12px;max-height:320px;overflow:auto;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);padding:12px;color:var(--color-muted);font-family:var(--font-mono);font-size:12px;line-height:1.55;white-space:pre-wrap;word-break:break-word}.inner-world-entry{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:12px;background:color-mix(in srgb,var(--color-surface) 88%,var(--color-bg) 12%)}.memory-list,.mission-file-list{display:flex;flex-direction:column;gap:10px}.memory-list-item,.mission-file-item{text-align:left;border:1px solid var(--color-border);border-radius:var(--radius-md);background:transparent;color:var(--color-text);padding:12px;cursor:pointer;display:flex;flex-direction:column;gap:6px}.memory-list-item.active,.mission-file-item.active{border-color:#ff660073;background:var(--color-accent-glow)}.memory-excerpt{font-size:13px;color:var(--color-text)}.memory-preview{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:14px;background:var(--color-bg);min-height:420px}.mission-editor,.advanced-editor{min-height:420px;resize:vertical;line-height:1.6}.issues-list{display:flex;flex-direction:column;gap:6px}.card-header.compact{align-items:center}.card-title.small{font-size:14px}@media(max-width:1280px){.dashboard-grid,.memory-grid,.mission-grid,.settings-grid,.hero-grid{grid-template-columns:1fr}}@media(max-width:720px){.sidebar{position:fixed;left:-240px;top:0;height:100vh;z-index:100;transition:left .25s ease}.sidebar.open{left:0}.sidebar-overlay{display:none;position:fixed;inset:0;background:#00000080;z-index:99}.sidebar-overlay.visible{display:block}.mobile-menu-btn{display:flex;position:fixed;top:12px;left:12px;z-index:98;width:36px;height:36px;align-items:center;justify-content:center;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text);cursor:pointer;font-size:18px}.main-content{padding:56px 18px 24px}.page-header-row{flex-direction:column}.stats-grid,.stats-grid.compact,.form-grid.two-col{grid-template-columns:1fr}.field-span-2{grid-column:auto}.live-chat-input-row{grid-template-columns:1fr}}@media(min-width:721px){.mobile-menu-btn,.sidebar-overlay{display:none!important}}[data-theme=light] .action-button:not(.ghost){color:#fff}[data-theme=light] .live-chat-send,[data-theme=light] .identity-badge{color:#fff}.emotion-joy{background:linear-gradient(135deg,#fc0,#f60);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.emotion-frustration{background:linear-gradient(135deg,#ff3b30,#c00);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.emotion-curiosity{background:linear-gradient(135deg,#00c853,#009688);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.emotion-confidence{background:linear-gradient(135deg,#2196f3,#3f51b5);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.emotion-care{background:linear-gradient(135deg,#e91e63,#9c27b0);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.emotion-fatigue{background:linear-gradient(135deg,#8a8a8a,#4a4a4a);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.emotion-bg-joy{background:linear-gradient(135deg,#fc03,#f603);border:1px solid rgba(255,204,0,.3)}.emotion-bg-frustration{background:linear-gradient(135deg,#ff3b3033,#c003);border:1px solid rgba(255,59,48,.3)}.emotion-bg-curiosity{background:linear-gradient(135deg,#00c85333,#00968833);border:1px solid rgba(0,200,83,.3)}.emotion-bg-confidence{background:linear-gradient(135deg,#2196f333,#3f51b533);border:1px solid rgba(33,150,243,.3)}.emotion-bg-care{background:linear-gradient(135deg,#e91e6333,#9c27b033);border:1px solid rgba(233,30,99,.3)}.emotion-bg-fatigue{background:linear-gradient(135deg,#8a8a8a33,#4a4a4a33);border:1px solid rgba(138,138,138,.3)}