openfeelz 0.9.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.
- package/LICENSE +21 -0
- package/README.md +341 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +240 -0
- package/dist/src/analysis/analyzer.d.ts +51 -0
- package/dist/src/analysis/analyzer.js +206 -0
- package/dist/src/classify/classifier.d.ts +56 -0
- package/dist/src/classify/classifier.js +224 -0
- package/dist/src/cli/cli.d.ts +23 -0
- package/dist/src/cli/cli.js +234 -0
- package/dist/src/format/prompt-formatter.d.ts +34 -0
- package/dist/src/format/prompt-formatter.js +158 -0
- package/dist/src/format/status-markdown.d.ts +9 -0
- package/dist/src/format/status-markdown.js +86 -0
- package/dist/src/hook/hooks.d.ts +49 -0
- package/dist/src/hook/hooks.js +132 -0
- package/dist/src/http/dashboard-html.generated.d.ts +2 -0
- package/dist/src/http/dashboard-html.generated.js +2 -0
- package/dist/src/http/dashboard.d.ts +28 -0
- package/dist/src/http/dashboard.js +518 -0
- package/dist/src/mcp/mcp-server.d.ts +37 -0
- package/dist/src/mcp/mcp-server.js +278 -0
- package/dist/src/migration/migrate-v1.d.ts +34 -0
- package/dist/src/migration/migrate-v1.js +63 -0
- package/dist/src/model/custom-taxonomy.d.ts +39 -0
- package/dist/src/model/custom-taxonomy.js +78 -0
- package/dist/src/model/decay.d.ts +32 -0
- package/dist/src/model/decay.js +58 -0
- package/dist/src/model/emotion-model.d.ts +40 -0
- package/dist/src/model/emotion-model.js +121 -0
- package/dist/src/model/goal-modulation.d.ts +43 -0
- package/dist/src/model/goal-modulation.js +105 -0
- package/dist/src/model/mapping.d.ts +32 -0
- package/dist/src/model/mapping.js +212 -0
- package/dist/src/model/personality.d.ts +45 -0
- package/dist/src/model/personality.js +181 -0
- package/dist/src/model/rumination.d.ts +47 -0
- package/dist/src/model/rumination.js +118 -0
- package/dist/src/paths.d.ts +40 -0
- package/dist/src/paths.js +106 -0
- package/dist/src/state/multi-agent.d.ts +32 -0
- package/dist/src/state/multi-agent.js +83 -0
- package/dist/src/state/state-file.d.ts +32 -0
- package/dist/src/state/state-file.js +113 -0
- package/dist/src/state/state-manager.d.ts +50 -0
- package/dist/src/state/state-manager.js +231 -0
- package/dist/src/tool/emotion-tool.d.ts +40 -0
- package/dist/src/tool/emotion-tool.js +221 -0
- package/dist/src/types.d.ts +219 -0
- package/dist/src/types.js +97 -0
- package/openclaw.plugin.json +164 -0
- package/package.json +65 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw hook handlers for OpenFeelz.
|
|
3
|
+
*
|
|
4
|
+
* - before_agent_start: inject emotional context into system prompt
|
|
5
|
+
* - agent_end: classify emotions from conversation messages
|
|
6
|
+
*/
|
|
7
|
+
import { loadOtherAgentStatesFromConfig } from "../state/multi-agent.js";
|
|
8
|
+
import { classifyEmotion } from "../classify/classifier.js";
|
|
9
|
+
import { formatEmotionBlock } from "../format/prompt-formatter.js";
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Bootstrap Hook (before_agent_start)
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
/**
|
|
14
|
+
* Create the before_agent_start hook handler.
|
|
15
|
+
*
|
|
16
|
+
* On every agent bootstrap:
|
|
17
|
+
* 1. Load state from disk
|
|
18
|
+
* 2. Apply time-based decay
|
|
19
|
+
* 3. Advance rumination (if active)
|
|
20
|
+
* 4. Format emotional context
|
|
21
|
+
* 5. Persist updated state
|
|
22
|
+
* 6. Return prependContext for emotional context prepend
|
|
23
|
+
*/
|
|
24
|
+
export function createBootstrapHook(getManager, config, openclawConfig) {
|
|
25
|
+
return async (event) => {
|
|
26
|
+
if (!config.contextEnabled)
|
|
27
|
+
return undefined;
|
|
28
|
+
const agentId = event.agentId ?? "main";
|
|
29
|
+
const manager = getManager(agentId);
|
|
30
|
+
try {
|
|
31
|
+
let state = await manager.getState();
|
|
32
|
+
// Apply time-based decay
|
|
33
|
+
state = manager.applyDecay(state);
|
|
34
|
+
// Advance rumination
|
|
35
|
+
state = manager.advanceRumination(state);
|
|
36
|
+
// Persist
|
|
37
|
+
await manager.saveState(state);
|
|
38
|
+
const userKey = event.userKey ?? "unknown";
|
|
39
|
+
const otherAgents = config.maxOtherAgents > 0 && openclawConfig
|
|
40
|
+
? await loadOtherAgentStatesFromConfig(openclawConfig, agentId, config.maxOtherAgents)
|
|
41
|
+
: [];
|
|
42
|
+
const block = formatEmotionBlock(state, userKey, agentId, {
|
|
43
|
+
maxUserEntries: 3,
|
|
44
|
+
maxAgentEntries: 2,
|
|
45
|
+
halfLifeHours: config.halfLifeHours,
|
|
46
|
+
trendWindowHours: config.trendWindowHours,
|
|
47
|
+
timeZone: config.timezone,
|
|
48
|
+
otherAgents,
|
|
49
|
+
});
|
|
50
|
+
if (!block)
|
|
51
|
+
return undefined;
|
|
52
|
+
return { prependContext: block };
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
console.error("[openfeelz] Bootstrap hook error:", err);
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Agent End Hook
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
/**
|
|
64
|
+
* Create the agent_end hook handler.
|
|
65
|
+
*
|
|
66
|
+
* After each agent turn:
|
|
67
|
+
* 1. Extract the latest user and assistant messages
|
|
68
|
+
* 2. Classify their emotions via LLM
|
|
69
|
+
* 3. Apply emotion mappings to state
|
|
70
|
+
* 4. Record in user/agent buckets
|
|
71
|
+
* 5. Persist
|
|
72
|
+
*/
|
|
73
|
+
export function createAgentEndHook(getManager, config, fetchFn) {
|
|
74
|
+
return async (event) => {
|
|
75
|
+
if (!event.success || !event.messages || event.messages.length === 0) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
// Need either apiKey or classifierUrl to classify
|
|
79
|
+
if (!config.apiKey && !config.classifierUrl) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const agentId = event.agentId ?? "main";
|
|
83
|
+
const manager = getManager(agentId);
|
|
84
|
+
try {
|
|
85
|
+
let state = await manager.getState();
|
|
86
|
+
const userKey = event.userKey ?? "unknown";
|
|
87
|
+
// Find latest user message
|
|
88
|
+
const userMsg = findLast(event.messages, "user");
|
|
89
|
+
// Find latest assistant message
|
|
90
|
+
const assistantMsg = findLast(event.messages, "assistant");
|
|
91
|
+
const classifyOpts = {
|
|
92
|
+
apiKey: config.apiKey,
|
|
93
|
+
baseUrl: config.baseUrl,
|
|
94
|
+
model: config.model,
|
|
95
|
+
provider: config.provider,
|
|
96
|
+
classifierUrl: config.classifierUrl,
|
|
97
|
+
emotionLabels: config.emotionLabels,
|
|
98
|
+
confidenceMin: config.confidenceMin,
|
|
99
|
+
fetchFn,
|
|
100
|
+
};
|
|
101
|
+
if (userMsg) {
|
|
102
|
+
const result = await classifyEmotion(userMsg.content, "user", classifyOpts);
|
|
103
|
+
if (result.label !== "neutral" || result.confidence > 0) {
|
|
104
|
+
state = manager.updateUserEmotion(state, userKey, result);
|
|
105
|
+
// Also apply as stimulus to the dimensional model
|
|
106
|
+
state = manager.applyStimulus(state, result.label, result.intensity, result.reason);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (assistantMsg) {
|
|
110
|
+
const result = await classifyEmotion(assistantMsg.content, "assistant", classifyOpts);
|
|
111
|
+
if (result.label !== "neutral" || result.confidence > 0) {
|
|
112
|
+
state = manager.updateAgentEmotion(state, agentId, result);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
await manager.saveState(state);
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
console.error("[openfeelz] Agent end hook error:", err);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
// Helpers
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
function findLast(messages, role) {
|
|
126
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
127
|
+
if (messages[i].role === role && messages[i].content.trim()) {
|
|
128
|
+
return messages[i];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/** Auto-generated. Do not edit. Run: node scripts/embed-dashboard-html.js */
|
|
2
|
+
export const DASHBOARD_HTML = "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>OpenFeelz Dashboard</title>\n <script type=\"module\" crossorigin>(function(){const t=document.createElement(\"link\").relList;if(t&&t.supports&&t.supports(\"modulepreload\"))return;for(const r of document.querySelectorAll('link[rel=\"modulepreload\"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type===\"childList\")for(const o of i.addedNodes)o.tagName===\"LINK\"&&o.rel===\"modulepreload\"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin===\"use-credentials\"?i.credentials=\"include\":r.crossOrigin===\"anonymous\"?i.credentials=\"omit\":i.credentials=\"same-origin\",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();const Pt=!1;var Wn=Array.isArray,ys=Array.prototype.indexOf,Ge=Array.prototype.includes,bt=Array.from,bs=Object.defineProperty,it=Object.getOwnPropertyDescriptor,Kn=Object.getOwnPropertyDescriptors,ws=Object.prototype,Es=Array.prototype,Gt=Object.getPrototypeOf,On=Object.isExtensible;function qs(e){return e()}function It(e){for(var t=0;t<e.length;t++)e[t]()}function Jn(){var e,t,n=new Promise((s,r)=>{e=s,t=r});return{promise:n,resolve:e,reject:t}}const U=2,Lt=4,ut=8,Xn=1<<24,qe=16,pe=32,Ue=64,Wt=128,se=512,P=1024,V=2048,he=4096,ee=8192,ke=16384,Kt=32768,We=65536,Cn=1<<17,Jt=1<<18,Ze=1<<19,Zn=1<<20,we=1<<25,Le=32768,jt=1<<21,Xt=1<<22,Re=1<<23,at=Symbol(\"$state\"),xs=Symbol(\"\"),Ye=new class extends Error{name=\"StaleReactionError\";message=\"The reaction that called `getAbortSignal()` was re-run or destroyed\"};function Ss(){throw new Error(\"https://svelte.dev/e/async_derived_orphan\")}function As(e,t,n){throw new Error(\"https://svelte.dev/e/each_key_duplicate\")}function Ts(e){throw new Error(\"https://svelte.dev/e/effect_in_teardown\")}function ks(){throw new Error(\"https://svelte.dev/e/effect_in_unowned_derived\")}function Rs(e){throw new Error(\"https://svelte.dev/e/effect_orphan\")}function Ns(){throw new Error(\"https://svelte.dev/e/effect_update_depth_exceeded\")}function Os(){throw new Error(\"https://svelte.dev/e/state_descriptors_fixed\")}function Cs(){throw new Error(\"https://svelte.dev/e/state_prototype_fixed\")}function Fs(){throw new Error(\"https://svelte.dev/e/state_unsafe_mutation\")}function Ds(){throw new Error(\"https://svelte.dev/e/svelte_boundary_reset_onerror\")}const Ms=1,Ps=2,Qn=4,Is=8,Ls=16,js=1,Bs=2,B=Symbol(),Us=\"http://www.w3.org/1999/xhtml\";function Vs(){console.warn(\"https://svelte.dev/e/svelte_boundary_reset_noop\")}function er(e){return e===this.v}function zs(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e==\"object\"||typeof e==\"function\"}function tr(e){return!zs(e,this.v)}let wt=!1,Hs=!1;function $s(){wt=!0}let I=null;function Ke(e){I=e}function nr(e,t=!1,n){I={p:I,i:!1,c:null,e:null,s:e,x:null,l:wt&&!t?{s:null,u:null,$:[]}:null}}function rr(e){var t=I,n=t.e;if(n!==null){t.e=null;for(var s of n)qr(s)}return t.i=!0,I=t.p,{}}function ct(){return!wt||I!==null&&I.l===null}let De=[];function sr(){var e=De;De=[],It(e)}function Ne(e){if(De.length===0&&!lt){var t=De;queueMicrotask(()=>{t===De&&sr()})}De.push(e)}function Ys(){for(;De.length>0;)sr()}function ir(e){var t=k;if(t===null)return x.f|=Re,e;if((t.f&Kt)===0){if((t.f&Wt)===0)throw e;t.b.error(e)}else Je(e,t)}function Je(e,t){for(;t!==null;){if((t.f&Wt)!==0)try{t.b.error(e);return}catch(n){e=n}t=t.parent}throw e}const Gs=-7169;function F(e,t){e.f=e.f&Gs|t}function Zt(e){(e.f&se)!==0||e.deps===null?F(e,P):F(e,he)}function ar(e){if(e!==null)for(const t of e)(t.f&U)===0||(t.f&Le)===0||(t.f^=Le,ar(t.deps))}function lr(e,t,n){(e.f&V)!==0?t.add(e):(e.f&he)!==0&&n.add(e),ar(e.deps),F(e,P)}const _t=new Set;let T=null,Bt=null,ve=null,W=[],Et=null,Ut=!1,lt=!1;class Oe{committed=!1;current=new Map;previous=new Map;#t=new Set;#l=new Set;#e=0;#i=0;#a=null;#r=new Set;#n=new Set;#s=new Map;is_fork=!1;#o=!1;is_deferred(){return this.is_fork||this.#i>0}skip_effect(t){this.#s.has(t)||this.#s.set(t,{d:[],m:[]})}unskip_effect(t){var n=this.#s.get(t);if(n){this.#s.delete(t);for(var s of n.d)F(s,V),de(s);for(s of n.m)F(s,he),de(s)}}process(t){W=[],this.apply();var n=[],s=[];for(const r of t)this.#f(r,n,s);if(this.is_deferred()){this.#u(s),this.#u(n);for(const[r,i]of this.#s)cr(r,i)}else{for(const r of this.#t)r();this.#t.clear(),this.#e===0&&this.#c(),Bt=this,T=null,Fn(s),Fn(n),Bt=null,this.#a?.resolve()}ve=null}#f(t,n,s){t.f^=P;for(var r=t.first,i=null;r!==null;){var o=r.f,l=(o&(pe|Ue))!==0,a=l&&(o&P)!==0,f=a||(o&ee)!==0||this.#s.has(r);if(!f&&r.fn!==null){l?r.f^=P:i!==null&&(o&(Lt|ut|Xn))!==0?i.b.defer_effect(r):(o&Lt)!==0?n.push(r):dt(r)&&((o&qe)!==0&&this.#n.add(r),ft(r));var v=r.first;if(v!==null){r=v;continue}}var d=r.parent;for(r=r.next;r===null&&d!==null;)d===i&&(i=null),r=d.next,d=d.parent}}#u(t){for(var n=0;n<t.length;n+=1)lr(t[n],this.#r,this.#n)}capture(t,n){n!==B&&!this.previous.has(t)&&this.previous.set(t,n),(t.f&Re)===0&&(this.current.set(t,t.v),ve?.set(t,t.v))}activate(){T=this,this.apply()}deactivate(){T===this&&(T=null,ve=null)}flush(){if(this.activate(),W.length>0){if(or(),T!==null&&T!==this)return}else this.#e===0&&this.process([]);this.deactivate()}discard(){for(const t of this.#l)t(this);this.#l.clear()}#c(){if(_t.size>1){this.previous.clear();var t=ve,n=!0;for(const r of _t){if(r===this){n=!1;continue}const i=[];for(const[l,a]of this.current){if(r.current.has(l))if(n&&a!==r.current.get(l))r.current.set(l,a);else continue;i.push(l)}if(i.length===0)continue;const o=[...r.current.keys()].filter(l=>!this.current.has(l));if(o.length>0){var s=W;W=[];const l=new Set,a=new Map;for(const f of i)fr(f,o,l,a);if(W.length>0){T=r,r.apply();for(const f of W)r.#f(f,[],[]);r.deactivate()}W=s}}T=null,ve=t}this.committed=!0,_t.delete(this)}increment(t){this.#e+=1,t&&(this.#i+=1)}decrement(t){this.#e-=1,t&&(this.#i-=1),!this.#o&&(this.#o=!0,Ne(()=>{this.#o=!1,this.is_deferred()?W.length>0&&this.flush():this.revive()}))}revive(){for(const t of this.#r)this.#n.delete(t),F(t,V),de(t);for(const t of this.#n)F(t,he),de(t);this.flush()}oncommit(t){this.#t.add(t)}ondiscard(t){this.#l.add(t)}settled(){return(this.#a??=Jn()).promise}static ensure(){if(T===null){const t=T=new Oe;_t.add(T),lt||Ne(()=>{T===t&&t.flush()})}return T}apply(){}}function Ws(e){var t=lt;lt=!0;try{for(var n;;){if(Ys(),W.length===0&&(T?.flush(),W.length===0))return Et=null,n;or()}}finally{lt=t}}function or(){Ut=!0;var e=null;try{for(var t=0;W.length>0;){var n=Oe.ensure();if(t++>1e3){var s,r;Ks()}n.process(W),Ce.clear()}}finally{W=[],Ut=!1,Et=null}}function Ks(){try{Ns()}catch(e){Je(e,Et)}}let be=null;function Fn(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var s=e[n++];if((s.f&(ke|ee))===0&&dt(s)&&(be=new Set,ft(s),s.deps===null&&s.first===null&&s.nodes===null&&(s.teardown===null&&s.ac===null?Tr(s):s.fn=null),be?.size>0)){Ce.clear();for(const r of be){if((r.f&(ke|ee))!==0)continue;const i=[r];let o=r.parent;for(;o!==null;)be.has(o)&&(be.delete(o),i.push(o)),o=o.parent;for(let l=i.length-1;l>=0;l--){const a=i[l];(a.f&(ke|ee))===0&&ft(a)}}be.clear()}}be=null}}function fr(e,t,n,s){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const r of e.reactions){const i=r.f;(i&U)!==0?fr(r,t,n,s):(i&(Xt|qe))!==0&&(i&V)===0&&ur(r,t,s)&&(F(r,V),de(r))}}function ur(e,t,n){const s=n.get(e);if(s!==void 0)return s;if(e.deps!==null)for(const r of e.deps){if(Ge.call(t,r))return!0;if((r.f&U)!==0&&ur(r,t,n))return n.set(r,!0),!0}return n.set(e,!1),!1}function de(e){for(var t=Et=e;t.parent!==null;){t=t.parent;var n=t.f;if(Ut&&t===k&&(n&qe)!==0&&(n&Jt)===0)return;if((n&(Ue|pe))!==0){if((n&P)===0)return;t.f^=P}}W.push(t)}function cr(e,t){if(!((e.f&pe)!==0&&(e.f&P)!==0)){(e.f&V)!==0?t.d.push(e):(e.f&he)!==0&&t.m.push(e),F(e,P);for(var n=e.first;n!==null;)cr(n,t),n=n.next}}function Js(e){let t=0,n=je(0),s;return()=>{tn()&&(u(n),xr(()=>(t===0&&(s=St(()=>e(()=>ot(n)))),t+=1,()=>{Ne(()=>{t-=1,t===0&&(s?.(),s=void 0,ot(n))})})))}}var Xs=We|Ze|Wt;function Zs(e,t,n){new Qs(e,t,n)}class Qs{parent;is_pending=!1;#t;#l=null;#e;#i;#a;#r=null;#n=null;#s=null;#o=null;#f=null;#u=0;#c=0;#_=!1;#d=!1;#h=new Set;#p=new Set;#v=null;#w=Js(()=>(this.#v=je(this.#u),()=>{this.#v=null}));constructor(t,n,s){this.#t=t,this.#e=n,this.#i=s,this.parent=k.b,this.is_pending=!!this.#e.pending,this.#a=xt(()=>{k.b=this;{var r=this.#y();try{this.#r=re(()=>s(r))}catch(i){this.error(i)}this.#c>0?this.#m():this.is_pending=!1}return()=>{this.#f?.remove()}},Xs)}#E(){try{this.#r=re(()=>this.#i(this.#t))}catch(t){this.error(t)}}#q(){const t=this.#e.pending;t&&(this.#n=re(()=>t(this.#t)),Ne(()=>{var n=this.#y();this.#r=this.#g(()=>(Oe.ensure(),re(()=>this.#i(n)))),this.#c>0?this.#m():(Pe(this.#n,()=>{this.#n=null}),this.is_pending=!1)}))}#y(){var t=this.#t;return this.is_pending&&(this.#f=Ee(),this.#t.before(this.#f),t=this.#f),t}defer_effect(t){lr(t,this.#h,this.#p)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#e.pending}#g(t){var n=k,s=x,r=I;ye(this.#a),ae(this.#a),Ke(this.#a.ctx);try{return t()}catch(i){return ir(i),null}finally{ye(n),ae(s),Ke(r)}}#m(){const t=this.#e.pending;this.#r!==null&&(this.#o=document.createDocumentFragment(),this.#o.append(this.#f),Nr(this.#r,this.#o)),this.#n===null&&(this.#n=re(()=>t(this.#t)))}#b(t){if(!this.has_pending_snippet()){this.parent&&this.parent.#b(t);return}if(this.#c+=t,this.#c===0){this.is_pending=!1;for(const n of this.#h)F(n,V),de(n);for(const n of this.#p)F(n,he),de(n);this.#h.clear(),this.#p.clear(),this.#n&&Pe(this.#n,()=>{this.#n=null}),this.#o&&(this.#t.before(this.#o),this.#o=null)}}update_pending_count(t){this.#b(t),this.#u+=t,!(!this.#v||this.#_)&&(this.#_=!0,Ne(()=>{this.#_=!1,this.#v&&Xe(this.#v,this.#u)}))}get_effect_pending(){return this.#w(),u(this.#v)}error(t){var n=this.#e.onerror;let s=this.#e.failed;if(this.#d||!n&&!s)throw t;this.#r&&(J(this.#r),this.#r=null),this.#n&&(J(this.#n),this.#n=null),this.#s&&(J(this.#s),this.#s=null);var r=!1,i=!1;const o=()=>{if(r){Vs();return}r=!0,i&&Ds(),Oe.ensure(),this.#u=0,this.#s!==null&&Pe(this.#s,()=>{this.#s=null}),this.is_pending=this.has_pending_snippet(),this.#r=this.#g(()=>(this.#d=!1,re(()=>this.#i(this.#t)))),this.#c>0?this.#m():this.is_pending=!1};Ne(()=>{try{i=!0,n?.(t,o),i=!1}catch(l){Je(l,this.#a&&this.#a.parent)}s&&(this.#s=this.#g(()=>{Oe.ensure(),this.#d=!0;try{return re(()=>{s(this.#t,()=>t,()=>o)})}catch(l){return Je(l,this.#a.parent),null}finally{this.#d=!1}}))})}}function ei(e,t,n,s){const r=ct()?Qt:vr;var i=e.filter(c=>!c.settled);if(n.length===0&&i.length===0){s(t.map(r));return}var o=T,l=k,a=ti(),f=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(c=>c.promise)):null;function v(c){a();try{s(c)}catch(h){(l.f&ke)===0&&Je(h,l)}o?.deactivate(),Vt()}if(n.length===0){f.then(()=>v(t.map(r)));return}function d(){a(),Promise.all(n.map(c=>ni(c))).then(c=>v([...t.map(r),...c])).catch(c=>Je(c,l))}f?f.then(d):d()}function ti(){var e=k,t=x,n=I,s=T;return function(i=!0){ye(e),ae(t),Ke(n),i&&s?.activate()}}function Vt(){ye(null),ae(null),Ke(null)}function Qt(e){var t=U|V,n=x!==null&&(x.f&U)!==0?x:null;return k!==null&&(k.f|=Ze),{ctx:I,deps:null,effects:null,equals:er,f:t,fn:e,reactions:null,rv:0,v:B,wv:0,parent:n??k,ac:null}}function ni(e,t,n){let s=k;s===null&&Ss();var r=s.b,i=void 0,o=je(B),l=!x,a=new Map;return vi(()=>{var f=Jn();i=f.promise;try{Promise.resolve(e()).then(f.resolve,f.reject).then(()=>{v===T&&v.committed&&v.deactivate(),Vt()})}catch(h){f.reject(h),Vt()}var v=T;if(l){var d=r.is_rendered();r.update_pending_count(1),v.increment(d),a.get(v)?.reject(Ye),a.delete(v),a.set(v,f)}const c=(h,y=void 0)=>{if(v.activate(),y)y!==Ye&&(o.f|=Re,Xe(o,y));else{(o.f&Re)!==0&&(o.f^=Re),Xe(o,h);for(const[A,_]of a){if(a.delete(A),A===v)break;_.reject(Ye)}}l&&(r.update_pending_count(-1),v.decrement(d))};f.promise.then(c,h=>c(null,h||\"unknown\"))}),Er(()=>{for(const f of a.values())f.reject(Ye)}),new Promise(f=>{function v(d){function c(){d===i?f(o):v(i)}d.then(c,c)}v(i)})}function vr(e){const t=Qt(e);return t.equals=tr,t}function dr(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)J(t[n])}}function ri(e){for(var t=e.parent;t!==null;){if((t.f&U)===0)return(t.f&ke)===0?t:null;t=t.parent}return null}function en(e){var t,n=k;ye(ri(e));try{e.f&=~Le,dr(e),t=Dr(e)}finally{ye(n)}return t}function _r(e){var t=en(e);if(!e.equals(t)&&(e.wv=Cr(),(!T?.is_fork||e.deps===null)&&(e.v=t,e.deps===null))){F(e,P);return}Be||(ve!==null?(tn()||T?.is_fork)&&ve.set(e,t):Zt(e))}let zt=new Set;const Ce=new Map;let hr=!1;function je(e,t){var n={f:0,v:e,reactions:null,equals:er,rv:0,wv:0};return n}function Ae(e,t){const n=je(e);return hi(n),n}function ce(e,t=!1,n=!0){const s=je(e);return t||(s.equals=tr),wt&&n&&I!==null&&I.l!==null&&(I.l.s??=[]).push(s),s}function oe(e,t){return N(e,St(()=>u(e))),t}function N(e,t,n=!1){x!==null&&(!_e||(x.f&Cn)!==0)&&ct()&&(x.f&(U|qe|Xt|Cn))!==0&&(ie===null||!Ge.call(ie,e))&&Fs();let s=n?nt(t):t;return Xe(e,s)}function Xe(e,t){if(!e.equals(t)){var n=e.v;Be?Ce.set(e,t):Ce.set(e,n),e.v=t;var s=Oe.ensure();if(s.capture(e,n),(e.f&U)!==0){const r=e;(e.f&V)!==0&&en(r),Zt(r)}e.wv=Cr(),pr(e,V),ct()&&k!==null&&(k.f&P)!==0&&(k.f&(pe|Ue))===0&&(ne===null?pi([e]):ne.push(e)),!s.is_fork&&zt.size>0&&!hr&&si()}return t}function si(){hr=!1;for(const e of zt)(e.f&P)!==0&&F(e,he),dt(e)&&ft(e);zt.clear()}function ot(e){N(e,e.v+1)}function pr(e,t){var n=e.reactions;if(n!==null)for(var s=ct(),r=n.length,i=0;i<r;i++){var o=n[i],l=o.f;if(!(!s&&o===k)){var a=(l&V)===0;if(a&&F(o,t),(l&U)!==0){var f=o;ve?.delete(f),(l&Le)===0&&(l&se&&(o.f|=Le),pr(f,he))}else a&&((l&qe)!==0&&be!==null&&be.add(o),de(o))}}}function nt(e){if(typeof e!=\"object\"||e===null||at in e)return e;const t=Gt(e);if(t!==ws&&t!==Es)return e;var n=new Map,s=Wn(e),r=Ae(0),i=Ie,o=l=>{if(Ie===i)return l();var a=x,f=Ie;ae(null),jn(i);var v=l();return ae(a),jn(f),v};return s&&n.set(\"length\",Ae(e.length)),new Proxy(e,{defineProperty(l,a,f){(!(\"value\"in f)||f.configurable===!1||f.enumerable===!1||f.writable===!1)&&Os();var v=n.get(a);return v===void 0?v=o(()=>{var d=Ae(f.value);return n.set(a,d),d}):N(v,f.value,!0),!0},deleteProperty(l,a){var f=n.get(a);if(f===void 0){if(a in l){const v=o(()=>Ae(B));n.set(a,v),ot(r)}}else N(f,B),ot(r);return!0},get(l,a,f){if(a===at)return e;var v=n.get(a),d=a in l;if(v===void 0&&(!d||it(l,a)?.writable)&&(v=o(()=>{var h=nt(d?l[a]:B),y=Ae(h);return y}),n.set(a,v)),v!==void 0){var c=u(v);return c===B?void 0:c}return Reflect.get(l,a,f)},getOwnPropertyDescriptor(l,a){var f=Reflect.getOwnPropertyDescriptor(l,a);if(f&&\"value\"in f){var v=n.get(a);v&&(f.value=u(v))}else if(f===void 0){var d=n.get(a),c=d?.v;if(d!==void 0&&c!==B)return{enumerable:!0,configurable:!0,value:c,writable:!0}}return f},has(l,a){if(a===at)return!0;var f=n.get(a),v=f!==void 0&&f.v!==B||Reflect.has(l,a);if(f!==void 0||k!==null&&(!v||it(l,a)?.writable)){f===void 0&&(f=o(()=>{var c=v?nt(l[a]):B,h=Ae(c);return h}),n.set(a,f));var d=u(f);if(d===B)return!1}return v},set(l,a,f,v){var d=n.get(a),c=a in l;if(s&&a===\"length\")for(var h=f;h<d.v;h+=1){var y=n.get(h+\"\");y!==void 0?N(y,B):h in l&&(y=o(()=>Ae(B)),n.set(h+\"\",y))}if(d===void 0)(!c||it(l,a)?.writable)&&(d=o(()=>Ae(void 0)),N(d,nt(f)),n.set(a,d));else{c=d.v!==B;var A=o(()=>nt(f));N(d,A)}var _=Reflect.getOwnPropertyDescriptor(l,a);if(_?.set&&_.set.call(v,f),!c){if(s&&typeof a==\"string\"){var w=n.get(\"length\"),z=Number(a);Number.isInteger(z)&&z>=w.v&&N(w,z+1)}ot(r)}return!0},ownKeys(l){u(r);var a=Reflect.ownKeys(l).filter(d=>{var c=n.get(d);return c===void 0||c.v!==B});for(var[f,v]of n)v.v!==B&&!(f in l)&&a.push(f);return a},setPrototypeOf(){Cs()}})}var Dn,gr,mr,yr;function ii(){if(Dn===void 0){Dn=window,gr=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;mr=it(t,\"firstChild\").get,yr=it(t,\"nextSibling\").get,On(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),On(n)&&(n.__t=void 0)}}function Ee(e=\"\"){return document.createTextNode(e)}function mt(e){return mr.call(e)}function vt(e){return yr.call(e)}function b(e,t){return mt(e)}function Mn(e,t=!1){{var n=mt(e);return n instanceof Comment&&n.data===\"\"?vt(n):n}}function m(e,t=1,n=!1){let s=e;for(;t--;)s=vt(s);return s}function ai(e){e.textContent=\"\"}function br(){return!1}let Pn=!1;function li(){Pn||(Pn=!0,document.addEventListener(\"reset\",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function qt(e){var t=x,n=k;ae(null),ye(null);try{return e()}finally{ae(t),ye(n)}}function oi(e,t,n,s=n){e.addEventListener(t,()=>qt(n));const r=e.__on_r;r?e.__on_r=()=>{r(),s(!0)}:e.__on_r=()=>s(!0),li()}function wr(e){k===null&&(x===null&&Rs(),ks()),Be&&Ts()}function fi(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function xe(e,t,n){var s=k;s!==null&&(s.f&ee)!==0&&(e|=ee);var r={ctx:I,deps:null,nodes:null,f:e|V|se,first:null,fn:t,last:null,next:null,parent:s,b:s&&s.b,prev:null,teardown:null,wv:0,ac:null};if(n)try{ft(r),r.f|=Kt}catch(l){throw J(r),l}else t!==null&&de(r);var i=r;if(n&&i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&(i.f&Ze)===0&&(i=i.first,(e&qe)!==0&&(e&We)!==0&&i!==null&&(i.f|=We)),i!==null&&(i.parent=s,s!==null&&fi(i,s),x!==null&&(x.f&U)!==0&&(e&Ue)===0)){var o=x;(o.effects??=[]).push(i)}return r}function tn(){return x!==null&&!_e}function Er(e){const t=xe(ut,null,!1);return F(t,P),t.teardown=e,t}function In(e){wr();var t=k.f,n=!x&&(t&pe)!==0&&(t&Kt)===0;if(n){var s=I;(s.e??=[]).push(e)}else return qr(e)}function qr(e){return xe(Lt|Zn,e,!1)}function ui(e){return wr(),xe(ut|Zn,e,!0)}function ci(e){Oe.ensure();const t=xe(Ue|Ze,e,!0);return(n={})=>new Promise(s=>{n.outro?Pe(t,()=>{J(t),s(void 0)}):(J(t),s(void 0))})}function vi(e){return xe(Xt|Ze,e,!0)}function xr(e,t=0){return xe(ut|t,e,!0)}function fe(e,t=[],n=[],s=[]){ei(s,t,n,r=>{xe(ut,()=>e(...r.map(u)),!0)})}function xt(e,t=0){var n=xe(qe|t,e,!0);return n}function re(e){return xe(pe|Ze,e,!0)}function Sr(e){var t=e.teardown;if(t!==null){const n=Be,s=x;Ln(!0),ae(null);try{t.call(null)}finally{Ln(n),ae(s)}}}function Ar(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const r=n.ac;r!==null&&qt(()=>{r.abort(Ye)});var s=n.next;(n.f&Ue)!==0?n.parent=null:J(n,t),n=s}}function di(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&pe)===0&&J(t),t=n}}function J(e,t=!0){var n=!1;(t||(e.f&Jt)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(_i(e.nodes.start,e.nodes.end),n=!0),Ar(e,t&&!n),yt(e,0),F(e,ke);var s=e.nodes&&e.nodes.t;if(s!==null)for(const i of s)i.stop();Sr(e);var r=e.parent;r!==null&&r.first!==null&&Tr(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function _i(e,t){for(;e!==null;){var n=e===t?null:vt(e);e.remove(),e=n}}function Tr(e){var t=e.parent,n=e.prev,s=e.next;n!==null&&(n.next=s),s!==null&&(s.prev=n),t!==null&&(t.first===e&&(t.first=s),t.last===e&&(t.last=n))}function Pe(e,t,n=!0){var s=[];kr(e,s,!0);var r=()=>{n&&J(e),t&&t()},i=s.length;if(i>0){var o=()=>--i||r();for(var l of s)l.out(o)}else r()}function kr(e,t,n){if((e.f&ee)===0){e.f^=ee;var s=e.nodes&&e.nodes.t;if(s!==null)for(const l of s)(l.is_global||n)&&t.push(l);for(var r=e.first;r!==null;){var i=r.next,o=(r.f&We)!==0||(r.f&pe)!==0&&(e.f&qe)!==0;kr(r,t,o?n:!1),r=i}}}function nn(e){Rr(e,!0)}function Rr(e,t){if((e.f&ee)!==0){e.f^=ee,(e.f&P)===0&&(F(e,V),de(e));for(var n=e.first;n!==null;){var s=n.next,r=(n.f&We)!==0||(n.f&pe)!==0;Rr(n,r?t:!1),n=s}var i=e.nodes&&e.nodes.t;if(i!==null)for(const o of i)(o.is_global||t)&&o.in()}}function Nr(e,t){if(e.nodes)for(var n=e.nodes.start,s=e.nodes.end;n!==null;){var r=n===s?null:vt(n);t.append(n),n=r}}let gt=!1,Be=!1;function Ln(e){Be=e}let x=null,_e=!1;function ae(e){x=e}let k=null;function ye(e){k=e}let ie=null;function hi(e){x!==null&&(ie===null?ie=[e]:ie.push(e))}let K=null,Q=0,ne=null;function pi(e){ne=e}let Or=1,Me=0,Ie=Me;function jn(e){Ie=e}function Cr(){return++Or}function dt(e){var t=e.f;if((t&V)!==0)return!0;if(t&U&&(e.f&=~Le),(t&he)!==0){for(var n=e.deps,s=n.length,r=0;r<s;r++){var i=n[r];if(dt(i)&&_r(i),i.wv>e.wv)return!0}(t&se)!==0&&ve===null&&F(e,P)}return!1}function Fr(e,t,n=!0){var s=e.reactions;if(s!==null&&!(ie!==null&&Ge.call(ie,e)))for(var r=0;r<s.length;r++){var i=s[r];(i.f&U)!==0?Fr(i,t,!1):t===i&&(n?F(i,V):(i.f&P)!==0&&F(i,he),de(i))}}function Dr(e){var t=K,n=Q,s=ne,r=x,i=ie,o=I,l=_e,a=Ie,f=e.f;K=null,Q=0,ne=null,x=(f&(pe|Ue))===0?e:null,ie=null,Ke(e.ctx),_e=!1,Ie=++Me,e.ac!==null&&(qt(()=>{e.ac.abort(Ye)}),e.ac=null);try{e.f|=jt;var v=e.fn,d=v(),c=e.deps,h=T?.is_fork;if(K!==null){var y;if(h||yt(e,Q),c!==null&&Q>0)for(c.length=Q+K.length,y=0;y<K.length;y++)c[Q+y]=K[y];else e.deps=c=K;if(tn()&&(e.f&se)!==0)for(y=Q;y<c.length;y++)(c[y].reactions??=[]).push(e)}else!h&&c!==null&&Q<c.length&&(yt(e,Q),c.length=Q);if(ct()&&ne!==null&&!_e&&c!==null&&(e.f&(U|he|V))===0)for(y=0;y<ne.length;y++)Fr(ne[y],e);if(r!==null&&r!==e){if(Me++,r.deps!==null)for(let A=0;A<n;A+=1)r.deps[A].rv=Me;if(t!==null)for(const A of t)A.rv=Me;ne!==null&&(s===null?s=ne:s.push(...ne))}return(e.f&Re)!==0&&(e.f^=Re),d}catch(A){return ir(A)}finally{e.f^=jt,K=t,Q=n,ne=s,x=r,ie=i,Ke(o),_e=l,Ie=a}}function gi(e,t){let n=t.reactions;if(n!==null){var s=ys.call(n,e);if(s!==-1){var r=n.length-1;r===0?n=t.reactions=null:(n[s]=n[r],n.pop())}}if(n===null&&(t.f&U)!==0&&(K===null||!Ge.call(K,t))){var i=t;(i.f&se)!==0&&(i.f^=se,i.f&=~Le),Zt(i),dr(i),yt(i,0)}}function yt(e,t){var n=e.deps;if(n!==null)for(var s=t;s<n.length;s++)gi(e,n[s])}function ft(e){var t=e.f;if((t&ke)===0){F(e,P);var n=k,s=gt;k=e,gt=!0;try{(t&(qe|Xn))!==0?di(e):Ar(e),Sr(e);var r=Dr(e);e.teardown=typeof r==\"function\"?r:null,e.wv=Or;var i;Pt&&Hs&&(e.f&V)!==0&&e.deps}finally{gt=s,k=n}}}async function mi(){await Promise.resolve(),Ws()}function u(e){var t=e.f,n=(t&U)!==0;if(x!==null&&!_e){var s=k!==null&&(k.f&ke)!==0;if(!s&&(ie===null||!Ge.call(ie,e))){var r=x.deps;if((x.f&jt)!==0)e.rv<Me&&(e.rv=Me,K===null&&r!==null&&r[Q]===e?Q++:K===null?K=[e]:K.push(e));else{(x.deps??=[]).push(e);var i=e.reactions;i===null?e.reactions=[x]:Ge.call(i,x)||i.push(x)}}}if(Be&&Ce.has(e))return Ce.get(e);if(n){var o=e;if(Be){var l=o.v;return((o.f&P)===0&&o.reactions!==null||Pr(o))&&(l=en(o)),Ce.set(o,l),l}var a=(o.f&se)===0&&!_e&&x!==null&&(gt||(x.f&se)!==0),f=o.deps===null;dt(o)&&(a&&(o.f|=se),_r(o)),a&&!f&&Mr(o)}if(ve?.has(e))return ve.get(e);if((e.f&Re)!==0)throw e.v;return e.v}function Mr(e){if(e.deps!==null){e.f|=se;for(const t of e.deps)(t.reactions??=[]).push(e),(t.f&U)!==0&&(t.f&se)===0&&Mr(t)}}function Pr(e){if(e.v===B)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(Ce.has(t)||(t.f&U)!==0&&Pr(t))return!0;return!1}function St(e){var t=_e;try{return _e=!0,e()}finally{_e=t}}function yi(e){if(!(typeof e!=\"object\"||!e||e instanceof EventTarget)){if(at in e)Ht(e);else if(!Array.isArray(e))for(let t in e){const n=e[t];typeof n==\"object\"&&n&&at in n&&Ht(n)}}}function Ht(e,t=new Set){if(typeof e==\"object\"&&e!==null&&!(e instanceof EventTarget)&&!t.has(e)){t.add(e),e instanceof Date&&e.getTime();for(let s in e)try{Ht(e[s],t)}catch{}const n=Gt(e);if(n!==Object.prototype&&n!==Array.prototype&&n!==Map.prototype&&n!==Set.prototype&&n!==Date.prototype){const s=Kn(n);for(let r in s){const i=s[r].get;if(i)try{i.call(e)}catch{}}}}}const bi=[\"touchstart\",\"touchmove\"];function wi(e){return bi.includes(e)}const Ei=new Set,Bn=new Set;function qi(e,t,n,s={}){function r(i){if(s.capture||rt.call(t,i),!i.cancelBubble)return qt(()=>n?.call(this,i))}return e.startsWith(\"pointer\")||e.startsWith(\"touch\")||e===\"wheel\"?Ne(()=>{t.addEventListener(e,r,s)}):t.addEventListener(e,r,s),r}function j(e,t,n,s,r){var i={capture:s,passive:r},o=qi(e,t,n,i);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&Er(()=>{t.removeEventListener(e,o,i)})}let Un=null;function rt(e){var t=this,n=t.ownerDocument,s=e.type,r=e.composedPath?.()||[],i=r[0]||e.target;Un=e;var o=0,l=Un===e&&e.__root;if(l){var a=r.indexOf(l);if(a!==-1&&(t===document||t===window)){e.__root=t;return}var f=r.indexOf(t);if(f===-1)return;a<=f&&(o=a)}if(i=r[o]||e.target,i!==t){bs(e,\"currentTarget\",{configurable:!0,get(){return i||n}});var v=x,d=k;ae(null),ye(null);try{for(var c,h=[];i!==null;){var y=i.assignedSlot||i.parentNode||i.host||null;try{var A=i[\"__\"+s];A!=null&&(!i.disabled||e.target===i)&&A.call(i,e)}catch(_){c?h.push(_):c=_}if(e.cancelBubble||y===t||y===null)break;i=y}if(c){for(let _ of h)queueMicrotask(()=>{throw _});throw c}}finally{e.__root=t,delete e.currentTarget,ae(v),ye(d)}}}function xi(e){var t=document.createElement(\"template\");return t.innerHTML=e.replaceAll(\"<!>\",\"\\x3C!---->\"),t.content}function $t(e,t){var n=k;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function D(e,t){var n=(t&js)!==0,s=(t&Bs)!==0,r,i=!e.startsWith(\"<!>\");return()=>{r===void 0&&(r=xi(i?e:\"<!>\"+e),n||(r=mt(r)));var o=s||gr?document.importNode(r,!0):r.cloneNode(!0);if(n){var l=mt(o),a=o.lastChild;$t(l,a)}else $t(o,o);return o}}function Vn(){var e=document.createDocumentFragment(),t=document.createComment(\"\"),n=Ee();return e.append(t,n),$t(t,n),e}function O(e,t){e!==null&&e.before(t)}function M(e,t){var n=t==null?\"\":typeof t==\"object\"?t+\"\":t;n!==(e.__t??=e.nodeValue)&&(e.__t=n,e.nodeValue=n+\"\")}function Si(e,t){return Ai(e,t)}const ze=new Map;function Ai(e,{target:t,anchor:n,props:s={},events:r,context:i,intro:o=!0}){ii();var l=new Set,a=d=>{for(var c=0;c<d.length;c++){var h=d[c];if(!l.has(h)){l.add(h);var y=wi(h);t.addEventListener(h,rt,{passive:y});var A=ze.get(h);A===void 0?(document.addEventListener(h,rt,{passive:y}),ze.set(h,1)):ze.set(h,A+1)}}};a(bt(Ei)),Bn.add(a);var f=void 0,v=ci(()=>{var d=n??t.appendChild(Ee());return Zs(d,{pending:()=>{}},c=>{nr({});var h=I;i&&(h.c=i),r&&(s.$$events=r),f=e(c,s)||{},rr()}),()=>{for(var c of l){t.removeEventListener(c,rt);var h=ze.get(c);--h===0?(document.removeEventListener(c,rt),ze.delete(c)):ze.set(c,h)}Bn.delete(a),d!==n&&d.parentNode?.removeChild(d)}});return Ti.set(f,v),f}let Ti=new WeakMap;class ki{anchor;#t=new Map;#l=new Map;#e=new Map;#i=new Set;#a=!0;constructor(t,n=!0){this.anchor=t,this.#a=n}#r=()=>{var t=T;if(this.#t.has(t)){var n=this.#t.get(t),s=this.#l.get(n);if(s)nn(s),this.#i.delete(n);else{var r=this.#e.get(n);r&&(this.#l.set(n,r.effect),this.#e.delete(n),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),s=r.effect)}for(const[i,o]of this.#t){if(this.#t.delete(i),i===t)break;const l=this.#e.get(o);l&&(J(l.effect),this.#e.delete(o))}for(const[i,o]of this.#l){if(i===n||this.#i.has(i))continue;const l=()=>{if(Array.from(this.#t.values()).includes(i)){var f=document.createDocumentFragment();Nr(o,f),f.append(Ee()),this.#e.set(i,{effect:o,fragment:f})}else J(o);this.#i.delete(i),this.#l.delete(i)};this.#a||!s?(this.#i.add(i),Pe(o,l,!1)):l()}}};#n=t=>{this.#t.delete(t);const n=Array.from(this.#t.values());for(const[s,r]of this.#e)n.includes(s)||(J(r.effect),this.#e.delete(s))};ensure(t,n){var s=T,r=br();if(n&&!this.#l.has(t)&&!this.#e.has(t))if(r){var i=document.createDocumentFragment(),o=Ee();i.append(o),this.#e.set(t,{effect:re(()=>n(o)),fragment:i})}else this.#l.set(t,re(()=>n(this.anchor)));if(this.#t.set(s,t),r){for(const[l,a]of this.#l)l===t?s.unskip_effect(a):s.skip_effect(a);for(const[l,a]of this.#e)l===t?s.unskip_effect(a.effect):s.skip_effect(a.effect);s.oncommit(this.#r),s.ondiscard(this.#n)}else this.#r()}}function ue(e,t,n=!1){var s=new ki(e),r=n?We:0;function i(o,l){s.ensure(o,l)}xt(()=>{var o=!1;t((l,a=!0)=>{o=!0,i(a,l)}),o||i(!1,null)},r)}function He(e,t){return t}function Ri(e,t,n){for(var s=[],r=t.length,i,o=t.length,l=0;l<r;l++){let d=t[l];Pe(d,()=>{if(i){if(i.pending.delete(d),i.done.add(d),i.pending.size===0){var c=e.outrogroups;Yt(bt(i.done)),c.delete(i),c.size===0&&(e.outrogroups=null)}}else o-=1},!1)}if(o===0){var a=s.length===0&&n!==null;if(a){var f=n,v=f.parentNode;ai(v),v.append(f),e.items.clear()}Yt(t,!a)}else i={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(i)}function Yt(e,t=!0){for(var n=0;n<e.length;n++)J(e[n],t)}var zn;function $e(e,t,n,s,r,i=null){var o=e,l=new Map,a=(t&Qn)!==0;if(a){var f=e;o=f.appendChild(Ee())}var v=null,d=vr(()=>{var w=n();return Wn(w)?w:w==null?[]:bt(w)}),c,h=!0;function y(){_.fallback=v,Ni(_,c,o,t,s),v!==null&&(c.length===0?(v.f&we)===0?nn(v):(v.f^=we,st(v,null,o)):Pe(v,()=>{v=null}))}var A=xt(()=>{c=u(d);for(var w=c.length,z=new Set,H=T,$=br(),G=0;G<w;G+=1){var te=c[G],X=s(te,G),Y=h?null:l.get(X);Y?(Y.v&&Xe(Y.v,te),Y.i&&Xe(Y.i,G),$&&H.unskip_effect(Y.e)):(Y=Oi(l,h?o:zn??=Ee(),te,X,G,r,t,n),h||(Y.e.f|=we),l.set(X,Y)),z.add(X)}if(w===0&&i&&!v&&(h?v=re(()=>i(o)):(v=re(()=>i(zn??=Ee())),v.f|=we)),w>z.size&&As(),!h)if($){for(const[Qe,ge]of l)z.has(Qe)||H.skip_effect(ge.e);H.oncommit(y),H.ondiscard(()=>{})}else y();u(d)}),_={effect:A,items:l,outrogroups:null,fallback:v};h=!1}function tt(e){for(;e!==null&&(e.f&pe)===0;)e=e.next;return e}function Ni(e,t,n,s,r){var i=(s&Is)!==0,o=t.length,l=e.items,a=tt(e.effect.first),f,v=null,d,c=[],h=[],y,A,_,w;if(i)for(w=0;w<o;w+=1)y=t[w],A=r(y,w),_=l.get(A).e,(_.f&we)===0&&(_.nodes?.a?.measure(),(d??=new Set).add(_));for(w=0;w<o;w+=1){if(y=t[w],A=r(y,w),_=l.get(A).e,e.outrogroups!==null)for(const ge of e.outrogroups)ge.pending.delete(_),ge.done.delete(_);if((_.f&we)!==0)if(_.f^=we,_===a)st(_,null,n);else{var z=v?v.next:a;_===e.effect.last&&(e.effect.last=_.prev),_.prev&&(_.prev.next=_.next),_.next&&(_.next.prev=_.prev),Te(e,v,_),Te(e,_,z),st(_,z,n),v=_,c=[],h=[],a=tt(v.next);continue}if((_.f&ee)!==0&&(nn(_),i&&(_.nodes?.a?.unfix(),(d??=new Set).delete(_))),_!==a){if(f!==void 0&&f.has(_)){if(c.length<h.length){var H=h[0],$;v=H.prev;var G=c[0],te=c[c.length-1];for($=0;$<c.length;$+=1)st(c[$],H,n);for($=0;$<h.length;$+=1)f.delete(h[$]);Te(e,G.prev,te.next),Te(e,v,G),Te(e,te,H),a=H,v=te,w-=1,c=[],h=[]}else f.delete(_),st(_,a,n),Te(e,_.prev,_.next),Te(e,_,v===null?e.effect.first:v.next),Te(e,v,_),v=_;continue}for(c=[],h=[];a!==null&&a!==_;)(f??=new Set).add(a),h.push(a),a=tt(a.next);if(a===null)continue}(_.f&we)===0&&c.push(_),v=_,a=tt(_.next)}if(e.outrogroups!==null){for(const ge of e.outrogroups)ge.pending.size===0&&(Yt(bt(ge.done)),e.outrogroups?.delete(ge));e.outrogroups.size===0&&(e.outrogroups=null)}if(a!==null||f!==void 0){var X=[];if(f!==void 0)for(_ of f)(_.f&ee)===0&&X.push(_);for(;a!==null;)(a.f&ee)===0&&a!==e.fallback&&X.push(a),a=tt(a.next);var Y=X.length;if(Y>0){var Qe=(s&Qn)!==0&&o===0?n:null;if(i){for(w=0;w<Y;w+=1)X[w].nodes?.a?.measure();for(w=0;w<Y;w+=1)X[w].nodes?.a?.fix()}Ri(e,X,Qe)}}i&&Ne(()=>{if(d!==void 0)for(_ of d)_.nodes?.a?.apply()})}function Oi(e,t,n,s,r,i,o,l){var a=(o&Ms)!==0?(o&Ls)===0?ce(n,!1,!1):je(n):null,f=(o&Ps)!==0?je(r):null;return{v:a,i:f,e:re(()=>(i(t,a??n,f??r,l),()=>{e.delete(s)}))}}function st(e,t,n){if(e.nodes)for(var s=e.nodes.start,r=e.nodes.end,i=t&&(t.f&we)===0?t.nodes.start:n;s!==null;){var o=vt(s);if(i.before(s),s===r)return;s=o}}function Te(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function Ci(e,t){var n;n=document.head.appendChild(Ee()),xt(()=>t(n),Jt)}const Hn=[...` \t\n\\r\\f \\v\\uFEFF`];function Fi(e,t,n){var s=\"\"+e;if(n){for(var r in n)if(n[r])s=s?s+\" \"+r:r;else if(s.length)for(var i=r.length,o=0;(o=s.indexOf(r,o))>=0;){var l=o+i;(o===0||Hn.includes(s[o-1]))&&(l===s.length||Hn.includes(s[l]))?s=(o===0?\"\":s.substring(0,o))+s.substring(l+1):o=l}}return s===\"\"?null:s}function ht(e,t,n,s,r,i){var o=e.__className;if(o!==n||o===void 0){var l=Fi(n,s,i);l==null?e.removeAttribute(\"class\"):e.className=l,e.__className=n}else if(i&&r!==i)for(var a in i){var f=!!i[a];(r==null||f!==!!r[a])&&e.classList.toggle(a,f)}return i}const Di=Symbol(\"is custom element\"),Mi=Symbol(\"is html\");function pt(e,t){var n=Ir(e);n.value===(n.value=t??void 0)||e.value===t&&(t!==0||e.nodeName!==\"PROGRESS\")||(e.value=t??\"\")}function $n(e,t,n,s){var r=Ir(e);r[t]!==(r[t]=n)&&(t===\"loading\"&&(e[xs]=n),n==null?e.removeAttribute(t):typeof n!=\"string\"&&Pi(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function Ir(e){return e.__attributes??={[Di]:e.nodeName.includes(\"-\"),[Mi]:e.namespaceURI===Us}}var Yn=new Map;function Pi(e){var t=e.getAttribute(\"is\")||e.nodeName,n=Yn.get(t);if(n)return n;Yn.set(t,n=[]);for(var s,r=e,i=Element.prototype;i!==r;){s=Kn(r);for(var o in s)s[o].set&&n.push(o);r=Gt(r)}return n}function Ft(e,t,n=t){var s=new WeakSet;oi(e,\"input\",async r=>{var i=r?e.defaultValue:e.value;if(i=Dt(e)?Mt(i):i,n(i),T!==null&&s.add(T),await mi(),i!==(i=t())){var o=e.selectionStart,l=e.selectionEnd,a=e.value.length;if(e.value=i??\"\",l!==null){var f=e.value.length;o===l&&l===a&&f>a?(e.selectionStart=f,e.selectionEnd=f):(e.selectionStart=o,e.selectionEnd=Math.min(l,f))}}}),St(t)==null&&e.value&&(n(Dt(e)?Mt(e.value):e.value),T!==null&&s.add(T)),xr(()=>{var r=t();if(e===document.activeElement){var i=Bt??T;if(s.has(i))return}Dt(e)&&r===Mt(e.value)||e.type===\"date\"&&!r&&!e.value||r!==e.value&&(e.value=r??\"\")})}function Dt(e){var t=e.type;return t===\"number\"||t===\"range\"}function Mt(e){return e===\"\"?null:+e}function Ii(e){return function(...t){var n=t[0];return n.preventDefault(),e?.apply(this,t)}}function Li(e=!1){const t=I,n=t.l.u;if(!n)return;let s=()=>yi(t.s);if(e){let r=0,i={};const o=Qt(()=>{let l=!1;const a=t.s;for(const f in a)a[f]!==i[f]&&(i[f]=a[f],l=!0);return l&&r++,r});s=()=>u(o)}n.b.length&&ui(()=>{Gn(t,s),It(n.b)}),In(()=>{const r=St(()=>n.m.map(qs));return()=>{for(const i of r)typeof i==\"function\"&&i()}}),n.a.length&&In(()=>{Gn(t,s),It(n.a)})}function Gn(e,t){if(e.l.s)for(const n of e.l.s)u(n);t()}const ji=\"5\";typeof window<\"u\"&&((window.__svelte??={}).v??=new Set).add(ji);$s();var Bi=D('<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/> <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"anonymous\"/> <link href=\"https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600&display=swap\" rel=\"stylesheet\"/>',1),Ui=D('<div class=\"loading svelte-1n46o8q\">Loading…</div>'),Vi=D('<div class=\"error svelte-1n46o8q\"> </div>'),zi=D('<div class=\"slider-row svelte-1n46o8q\"><span class=\"label svelte-1n46o8q\"> </span> <input type=\"range\" max=\"1\" step=\"0.05\" class=\"svelte-1n46o8q\"/> <span class=\"val svelte-1n46o8q\"> </span></div>'),Hi=D('<div class=\"save-row svelte-1n46o8q\"><button class=\"btn primary svelte-1n46o8q\">Save</button> <button class=\"btn secondary svelte-1n46o8q\">Cancel</button></div>'),$i=D('<div class=\"slider-row svelte-1n46o8q\"><span class=\"label svelte-1n46o8q\"> </span> <input type=\"range\" min=\"0\" max=\"1\" step=\"0.05\" class=\"svelte-1n46o8q\"/> <span class=\"val svelte-1n46o8q\"> </span></div>'),Yi=D('<div class=\"save-row svelte-1n46o8q\"><button class=\"btn primary svelte-1n46o8q\">Save</button> <button class=\"btn secondary svelte-1n46o8q\">Cancel</button></div>'),Gi=D('<div class=\"slider-row svelte-1n46o8q\"><span class=\"label svelte-1n46o8q\"> </span> <input type=\"range\" min=\"0\" max=\"1\" step=\"0.05\" class=\"svelte-1n46o8q\"/> <span class=\"val svelte-1n46o8q\"> </span></div>'),Wi=D('<div class=\"save-row svelte-1n46o8q\"><button class=\"btn primary svelte-1n46o8q\">Save</button> <button class=\"btn secondary svelte-1n46o8q\">Cancel</button></div>'),Ki=D('<div class=\"slider-row svelte-1n46o8q\"><span class=\"label svelte-1n46o8q\"> </span> <input type=\"range\" min=\"0\" max=\"2\" step=\"0.05\" class=\"svelte-1n46o8q\"/> <span class=\"val svelte-1n46o8q\"> </span></div>'),Ji=D('<div class=\"save-row svelte-1n46o8q\"><button class=\"btn primary svelte-1n46o8q\">Save</button> <button class=\"btn secondary svelte-1n46o8q\">Cancel</button></div>'),Xi=D('<p class=\"analysis svelte-1n46o8q\"> </p>'),Zi=D('<p class=\"analysis svelte-1n46o8q\"> </p>'),Qi=D('<li class=\"svelte-1n46o8q\"><span class=\"time svelte-1n46o8q\"> </span> <span class=\"label svelte-1n46o8q\"> </span> </li>'),ea=D('<ul class=\"stimuli svelte-1n46o8q\"></ul>'),ta=D('<p class=\"muted svelte-1n46o8q\">No recent stimuli.</p>'),na=D('<li class=\"svelte-1n46o8q\"> </li>'),ra=D('<ul class=\"rumination svelte-1n46o8q\"></ul>'),sa=D('<p class=\"muted svelte-1n46o8q\">No active rumination.</p>'),ia=D('<div class=\"grid svelte-1n46o8q\"><section class=\"card svelte-1n46o8q\"><h2 class=\"svelte-1n46o8q\">Apply Emotion</h2> <form><div class=\"field svelte-1n46o8q\"><label class=\"svelte-1n46o8q\">Emotion (e.g. happy, sad, angry)</label> <input type=\"text\" placeholder=\"happy\" class=\"svelte-1n46o8q\"/></div> <div class=\"field svelte-1n46o8q\"><label class=\"svelte-1n46o8q\"> </label> <input type=\"range\" min=\"0\" max=\"1\" step=\"0.05\" class=\"svelte-1n46o8q\"/></div> <div class=\"field svelte-1n46o8q\"><label class=\"svelte-1n46o8q\">Trigger</label> <input type=\"text\" placeholder=\"What triggered this\" class=\"svelte-1n46o8q\"/></div> <button type=\"submit\" class=\"btn primary svelte-1n46o8q\"> </button></form></section> <section><h2 class=\"svelte-1n46o8q\">Dimensions (PAD + Extensions)</h2> <!> <!></section> <section><h2 class=\"svelte-1n46o8q\">Basic Emotions (Ekman)</h2> <!> <!></section> <section><h2 class=\"svelte-1n46o8q\">Personality (OCEAN)</h2> <!> <!></section> <section><h2 class=\"svelte-1n46o8q\">Decay Rates</h2> <!> <!></section> <section class=\"card svelte-1n46o8q\"><h2 class=\"svelte-1n46o8q\">Analysis</h2> <button class=\"btn secondary svelte-1n46o8q\">Analyze Personality</button> <!> <button class=\"btn secondary svelte-1n46o8q\">Describe Emotional State</button> <!></section> <section class=\"card svelte-1n46o8q\"><h2 class=\"svelte-1n46o8q\">Reset</h2> <button class=\"btn danger svelte-1n46o8q\">Reset to Baseline</button></section> <section class=\"card svelte-1n46o8q\"><h2 class=\"svelte-1n46o8q\">Recent Stimuli</h2> <!></section> <section class=\"card svelte-1n46o8q\"><h2 class=\"svelte-1n46o8q\">Rumination</h2> <!></section></div>'),aa=D('<div class=\"app svelte-1n46o8q\"><header class=\"svelte-1n46o8q\"><h1 class=\"svelte-1n46o8q\">OpenFeelz</h1> <p class=\"subtitle svelte-1n46o8q\"> </p> <p class=\"meta svelte-1n46o8q\"> </p> <div class=\"actions svelte-1n46o8q\"><button class=\"btn secondary svelte-1n46o8q\">Refresh</button> <a class=\"link svelte-1n46o8q\" target=\"_blank\" rel=\"noopener\">View as JSON</a></div></header> <!></div>');function la(e,t){nr(t,!1);const n=\"/emotion-dashboard\",s=[\"pleasure\",\"arousal\",\"dominance\",\"connection\",\"curiosity\",\"energy\",\"trust\"],r=[\"pleasure\",\"arousal\",\"dominance\"],i=[\"happiness\",\"sadness\",\"anger\",\"fear\",\"disgust\",\"surprise\"],o=[\"openness\",\"conscientiousness\",\"extraversion\",\"agreeableness\",\"neuroticism\"];let l=ce(null),a=ce({}),f=ce({dimensions:!1,emotions:!1,personality:!1,decay:!1}),v=ce(!0),d=ce(\"\"),c=ce({label:\"\",intensity:.5,trigger:\"\"}),h=ce(!1),y=ce(\"\"),A=ce(\"\"),_=ce(\"\");function w(E){return JSON.parse(JSON.stringify(E))}async function z(){N(v,!0),N(d,\"\");try{const E=await fetch(`${n}?format=json`);if(!E.ok)throw new Error(E.statusText);const q=await E.json();N(l,q),N(a,{dimensions:w(q.dimensions),basicEmotions:w(q.basicEmotions),personality:w(q.personality),decayRates:w(q.decayRates||{})}),N(f,{dimensions:!1,emotions:!1,personality:!1,decay:!1}),N(_,q.lastUpdated||q.meta?.createdAt||\"\"),N(y,q.personalityAnalysis||\"\"),N(A,q.emotionalStateDescription||\"\")}catch(E){N(d,E.message)}finally{N(v,!1)}}async function H(E,q={}){const Se=await(await fetch(n,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify({action:E,...q})})).json();if(!Se.ok)throw new Error(Se.error||\"Action failed\");return Se}function $(E,q,Fe){const Se=E===\"decay\"?u(a).decayRates:u(a)[E];Se&&(Se[q]=Fe),oe(f,u(f)[E]=!0)}function G(E){E===\"dimensions\"&&oe(a,u(a).dimensions=w(u(l).dimensions)),E===\"emotions\"&&oe(a,u(a).basicEmotions=w(u(l).basicEmotions)),E===\"personality\"&&oe(a,u(a).personality=w(u(l).personality)),E===\"decay\"&&oe(a,u(a).decayRates=w(u(l).decayRates||u(l).decayRates||{})),oe(f,u(f)[E]=!1)}async function te(E){try{if(E===\"dimensions\")for(const q of s)await H(\"set_dimension\",{dimension:q,value:u(a).dimensions[q]});else if(E===\"emotions\")for(const q of i)await H(\"set_basic_emotion\",{emotion:q,value:u(a).basicEmotions[q]});else if(E===\"personality\")for(const q of o)await H(\"set_personality\",{trait:q,value:u(a).personality[q]});else if(E===\"decay\")for(const q of s){const Fe=u(a).decayRates[q];Fe!==void 0&&await H(\"set_decay\",{dimension:q,rate:Fe})}await z()}catch(q){N(d,q.message)}}async function X(){if(!u(c).label.trim()){N(d,\"Emotion label required\");return}N(h,!0),N(d,\"\");try{await H(\"modify\",{emotion:u(c).label.trim(),intensity:u(c).intensity,trigger:u(c).trigger.trim()||\"Dashboard\"}),await z(),oe(c,u(c).label=\"\"),oe(c,u(c).trigger=\"\")}catch(E){N(d,E.message)}finally{N(h,!1)}}async function Y(){try{await H(\"reset\"),await z()}catch(E){N(d,E.message)}}function Qe(){N(y,u(l)?.personalityAnalysis||\"\")}function ge(){N(A,u(l)?.emotionalStateDescription||\"\")}z(),Li();var rn=aa();Ci(\"1n46o8q\",E=>{var q=Bi();O(E,q)});var sn=b(rn),an=m(b(sn),2),Lr=b(an),ln=m(an,2),jr=b(ln),Br=m(ln,2),on=b(Br),Ur=m(on,2);$n(Ur,\"href\",\"/emotion-dashboard?format=json\");var Vr=m(sn,2);{var zr=E=>{var q=Ui();O(E,q)},Hr=E=>{var q=Vn(),Fe=Mn(q);{var Se=Ve=>{var et=Vi(),At=b(et);fe(()=>M(At,u(d))),O(Ve,et)},$r=Ve=>{var et=Vn(),At=Mn(et);{var Yr=Tt=>{var fn=ia(),un=b(fn),cn=m(b(un),2),vn=b(cn),Gr=m(b(vn),2),dn=m(vn,2),_n=b(dn),Wr=b(_n),Kr=m(_n,2),hn=m(dn,2),Jr=m(b(hn),2),pn=m(hn,2),Xr=b(pn),kt=m(un,2);let gn;var mn=m(b(kt),2);$e(mn,1,()=>s,He,(p,g)=>{var S=zi(),R=b(S),Z=b(R),C=m(R,2),le=m(C,2),me=b(le);fe((L,Ct)=>{M(Z,u(g)),$n(C,\"min\",L),pt(C,u(a).dimensions?.[u(g)]??0),M(me,Ct)},[()=>r.includes(u(g))?-1:0,()=>(u(a).dimensions?.[u(g)]??0).toFixed(2)]),j(\"input\",C,L=>$(\"dimensions\",u(g),parseFloat(L.currentTarget.value))),O(p,S)});var Zr=m(mn,2);{var Qr=p=>{var g=Hi(),S=b(g),R=m(S,2);j(\"click\",S,()=>te(\"dimensions\")),j(\"click\",R,()=>G(\"dimensions\")),O(p,g)};ue(Zr,p=>{u(f).dimensions&&p(Qr)})}var Rt=m(kt,2);let yn;var bn=m(b(Rt),2);$e(bn,1,()=>i,He,(p,g)=>{var S=$i(),R=b(S),Z=b(R),C=m(R,2),le=m(C,2),me=b(le);fe(L=>{M(Z,u(g)),pt(C,u(a).basicEmotions?.[u(g)]??0),M(me,L)},[()=>(u(a).basicEmotions?.[u(g)]??0).toFixed(2)]),j(\"input\",C,L=>$(\"emotions\",u(g),parseFloat(L.currentTarget.value))),O(p,S)});var es=m(bn,2);{var ts=p=>{var g=Yi(),S=b(g),R=m(S,2);j(\"click\",S,()=>te(\"emotions\")),j(\"click\",R,()=>G(\"emotions\")),O(p,g)};ue(es,p=>{u(f).emotions&&p(ts)})}var Nt=m(Rt,2);let wn;var En=m(b(Nt),2);$e(En,1,()=>o,He,(p,g)=>{var S=Gi(),R=b(S),Z=b(R),C=m(R,2),le=m(C,2),me=b(le);fe(L=>{M(Z,u(g)),pt(C,u(a).personality?.[u(g)]??.5),M(me,L)},[()=>(u(a).personality?.[u(g)]??.5).toFixed(2)]),j(\"input\",C,L=>$(\"personality\",u(g),parseFloat(L.currentTarget.value))),O(p,S)});var ns=m(En,2);{var rs=p=>{var g=Wi(),S=b(g),R=m(S,2);j(\"click\",S,()=>te(\"personality\")),j(\"click\",R,()=>G(\"personality\")),O(p,g)};ue(ns,p=>{u(f).personality&&p(rs)})}var Ot=m(Nt,2);let qn;var xn=m(b(Ot),2);$e(xn,1,()=>s,He,(p,g)=>{var S=Ki(),R=b(S),Z=b(R),C=m(R,2),le=m(C,2),me=b(le);fe(L=>{M(Z,u(g)),pt(C,u(a).decayRates?.[u(g)]??u(l).decayRates?.[u(g)]??.1),M(me,`${L??\"\"}/hr`)},[()=>(u(a).decayRates?.[u(g)]??u(l).decayRates?.[u(g)]??.1).toFixed(2)]),j(\"input\",C,L=>$(\"decay\",u(g),parseFloat(L.currentTarget.value))),O(p,S)});var ss=m(xn,2);{var is=p=>{var g=Ji(),S=b(g),R=m(S,2);j(\"click\",S,()=>te(\"decay\")),j(\"click\",R,()=>G(\"decay\")),O(p,g)};ue(ss,p=>{u(f).decay&&p(is)})}var Sn=m(Ot,2),An=m(b(Sn),2),Tn=m(An,2);{var as=p=>{var g=Xi(),S=b(g);fe(()=>M(S,u(y))),O(p,g)};ue(Tn,p=>{u(y)&&p(as)})}var kn=m(Tn,2),ls=m(kn,2);{var os=p=>{var g=Zi(),S=b(g);fe(()=>M(S,u(A))),O(p,g)};ue(ls,p=>{u(A)&&p(os)})}var Rn=m(Sn,2),fs=m(b(Rn),2),Nn=m(Rn,2),us=m(b(Nn),2);{var cs=p=>{var g=ea();$e(g,5,()=>u(l).recentStimuli.slice(0,8),He,(S,R)=>{var Z=Qi(),C=b(Z),le=b(C),me=m(C,2),L=b(me),Ct=m(me);fe((gs,ms)=>{M(le,gs),M(L,u(R).label),M(Ct,` (${ms??\"\"}) — ${u(R).trigger??\"\"}`)},[()=>new Date(u(R).timestamp).toLocaleString(),()=>u(R).intensity.toFixed(2)]),O(S,Z)}),O(p,g)},vs=p=>{var g=ta();O(p,g)};ue(us,p=>{u(l).recentStimuli?.length?p(cs):p(vs,!1)})}var ds=m(Nn,2),_s=m(b(ds),2);{var hs=p=>{var g=ra();$e(g,5,()=>u(l).rumination.active,He,(S,R)=>{var Z=na(),C=b(Z);fe(le=>M(C,`${u(R).label??\"\"} (stage ${u(R).stage??\"\"}, intensity ${le??\"\"})`),[()=>u(R).intensity.toFixed(2)]),O(S,Z)}),O(p,g)},ps=p=>{var g=sa();O(p,g)};ue(_s,p=>{u(l).rumination?.active?.length?p(hs):p(ps,!1)})}fe(p=>{M(Wr,`Intensity: ${p??\"\"}%`),pn.disabled=u(h),M(Xr,u(h)?\"Applying…\":\"Apply\"),gn=ht(kt,1,\"card svelte-1n46o8q\",null,gn,{edited:u(f).dimensions}),yn=ht(Rt,1,\"card svelte-1n46o8q\",null,yn,{edited:u(f).emotions}),wn=ht(Nt,1,\"card svelte-1n46o8q\",null,wn,{edited:u(f).personality}),qn=ht(Ot,1,\"card svelte-1n46o8q\",null,qn,{edited:u(f).decay})},[()=>(u(c).intensity*100).toFixed(0)]),Ft(Gr,()=>u(c).label,p=>oe(c,u(c).label=p)),Ft(Kr,()=>u(c).intensity,p=>oe(c,u(c).intensity=p)),Ft(Jr,()=>u(c).trigger,p=>oe(c,u(c).trigger=p)),j(\"submit\",cn,Ii(X)),j(\"click\",An,Qe),j(\"click\",kn,ge),j(\"click\",fs,Y),O(Tt,fn)};ue(At,Tt=>{u(l)&&Tt(Yr)},!0)}O(Ve,et)};ue(Fe,Ve=>{u(d)?Ve(Se):Ve($r,!1)},!0)}O(E,q)};ue(Vr,E=>{u(v)&&!u(l)?E(zr):E(Hr,!1)})}fe((E,q)=>{M(Lr,`Primary: ${u(l)?.primaryEmotion??\"—\"??\"\"} (intensity: ${E??\"\"})`),M(jr,`Last updated: ${q??\"\"} · Updates: ${u(l)?.meta?.totalUpdates??0??\"\"}`)},[()=>(u(l)?.overallIntensity??0).toFixed(2),()=>u(_)?new Date(u(_)).toLocaleString():\"—\"]),j(\"click\",on,z),O(e,rn),rr()}Si(la,{target:document.getElementById(\"app\")});</script>\n <style rel=\"stylesheet\" crossorigin>:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}.card{padding:2em}#app{max-width:1280px;margin:0 auto;padding:2rem;text-align:center}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media(prefers-color-scheme:light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}body{margin:0;font-family:Geist,-apple-system,BlinkMacSystemFont,sans-serif;background:#0a0a0f;color:#e0e0e8;min-height:100vh}.app.svelte-1n46o8q{max-width:1400px;margin:0 auto;padding:24px}header.svelte-1n46o8q{margin-bottom:24px}h1.svelte-1n46o8q{font-size:1.75rem;font-weight:600;margin:0 0 4px}.subtitle.svelte-1n46o8q{font-size:1rem;color:#8b7cf6;margin:0 0 4px}.meta.svelte-1n46o8q{font-size:.8rem;color:#888;margin:0 0 12px}.actions.svelte-1n46o8q{display:flex;gap:12px;align-items:center}.btn.svelte-1n46o8q{padding:8px 16px;border-radius:8px;border:none;font-size:.9rem;font-weight:500;cursor:pointer;transition:opacity .2s}.btn.svelte-1n46o8q:disabled{opacity:.6;cursor:not-allowed}.btn.primary.svelte-1n46o8q{background:#8b7cf6;color:#fff}.btn.secondary.svelte-1n46o8q{background:#ffffff14;color:#e0e0e8;border:1px solid rgba(255,255,255,.12)}.btn.danger.svelte-1n46o8q{background:#ef535033;color:#ef5350}.link.svelte-1n46o8q{color:#8b7cf6;font-size:.9rem}.loading.svelte-1n46o8q,.error.svelte-1n46o8q{padding:24px;text-align:center}.error.svelte-1n46o8q{color:#ef5350;background:#ef53501a;border-radius:12px}.grid.svelte-1n46o8q{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:16px}.card.svelte-1n46o8q{background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:20px;transition:border-color .2s,box-shadow .2s}.card.edited.svelte-1n46o8q{border-color:#8b7cf6;box-shadow:0 0 0 1px #8b7cf64d}h2.svelte-1n46o8q{font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#8b7cf6;margin:0 0 16px}.field.svelte-1n46o8q{margin-bottom:12px}.field.svelte-1n46o8q label:where(.svelte-1n46o8q){display:block;font-size:.8rem;color:#888;margin-bottom:4px}.field.svelte-1n46o8q input[type=text]:where(.svelte-1n46o8q){width:100%;padding:8px 12px;border-radius:8px;border:1px solid rgba(255,255,255,.12);background:#0003;color:#e0e0e8;font-size:.95rem;box-sizing:border-box}.field.svelte-1n46o8q input[type=range]:where(.svelte-1n46o8q){width:100%}.slider-row.svelte-1n46o8q{display:flex;align-items:center;gap:12px;margin-bottom:8px}.slider-row.svelte-1n46o8q .label:where(.svelte-1n46o8q){width:120px;font-size:.8rem;color:#888;flex-shrink:0}.slider-row.svelte-1n46o8q input[type=range]:where(.svelte-1n46o8q){flex:1;height:6px;-webkit-appearance:none;appearance:none;background:#ffffff1a;border-radius:3px}.slider-row.svelte-1n46o8q input[type=range]:where(.svelte-1n46o8q)::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:#8b7cf6;cursor:pointer}.slider-row.svelte-1n46o8q .val:where(.svelte-1n46o8q){width:48px;font-size:.75rem;font-family:ui-monospace,monospace;flex-shrink:0}.save-row.svelte-1n46o8q{display:flex;gap:8px;margin-top:12px}.analysis.svelte-1n46o8q{font-size:.9rem;margin:12px 0 0;padding:12px;background:#0003;border-radius:8px;color:#b0b0b8}.muted.svelte-1n46o8q{color:#666;font-size:.85rem}.stimuli.svelte-1n46o8q,.rumination.svelte-1n46o8q{list-style:none;margin:0;padding:0;font-size:.85rem}.stimuli.svelte-1n46o8q li:where(.svelte-1n46o8q),.rumination.svelte-1n46o8q li:where(.svelte-1n46o8q){padding:6px 0;border-bottom:1px solid rgba(255,255,255,.06)}.stimuli.svelte-1n46o8q li:where(.svelte-1n46o8q):last-child,.rumination.svelte-1n46o8q li:where(.svelte-1n46o8q):last-child{border-bottom:none}.time.svelte-1n46o8q{color:#666;margin-right:8px}.stimuli.svelte-1n46o8q .label:where(.svelte-1n46o8q){color:#8b7cf6;font-weight:500;margin-right:4px}</style>\n </head>\n <body>\n <div id=\"app\"></div>\n </body>\n</html>\n";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP dashboard for the OpenFeelz.
|
|
3
|
+
*
|
|
4
|
+
* Serves a self-contained HTML page with glassmorphism UI showing:
|
|
5
|
+
* - PAD dimensions as bars
|
|
6
|
+
* - Basic emotions as bars
|
|
7
|
+
* - OCEAN personality profile
|
|
8
|
+
* - Recent stimuli
|
|
9
|
+
* - Rumination status
|
|
10
|
+
*
|
|
11
|
+
* GET ?format=json returns state plus personalityAnalysis and emotionalStateDescription.
|
|
12
|
+
* POST with JSON body { action, ... } performs modify, reset, set_personality, set_dimension, set_decay.
|
|
13
|
+
*
|
|
14
|
+
* Registered via api.registerHttpRoute().
|
|
15
|
+
*/
|
|
16
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
17
|
+
import type { EmotionEngineState } from "../types.js";
|
|
18
|
+
import type { StateManager } from "../state/state-manager.js";
|
|
19
|
+
/**
|
|
20
|
+
* Create the HTTP route handler for the dashboard.
|
|
21
|
+
* Uses ?agent= query param (default "main").
|
|
22
|
+
* LLM analysis is served from cachedAnalysis (written by the background service).
|
|
23
|
+
*/
|
|
24
|
+
export declare function createDashboardHandler(getManager: (agentId: string) => StateManager): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Build the complete dashboard HTML.
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildDashboardHtml(state: EmotionEngineState): string;
|