@clappstore/connect 0.6.1 → 0.7.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/dist/agent-handler.d.ts +5 -3
- package/dist/agent-handler.d.ts.map +1 -1
- package/dist/agent-handler.js +54 -3
- package/dist/agent-handler.js.map +1 -1
- package/dist/defaults.d.ts +0 -3
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +0 -8
- package/dist/defaults.js.map +1 -1
- package/dist/index.js +37 -88
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +202 -0
- package/dist/server.js.map +1 -0
- package/dist/settings-handler.d.ts +7 -7
- package/dist/settings-handler.d.ts.map +1 -1
- package/dist/settings-handler.js +16 -21
- package/dist/settings-handler.js.map +1 -1
- package/dist/state-store.d.ts +40 -0
- package/dist/state-store.d.ts.map +1 -0
- package/dist/state-store.js +74 -0
- package/dist/state-store.js.map +1 -0
- package/package.json +7 -3
- package/web-app/assets/index-BYIO2GGA.css +1 -0
- package/web-app/assets/index-kbnfuSZC.js +128 -0
- package/web-app/index.html +13 -0
- package/dist/credentials.d.ts +0 -5
- package/dist/credentials.d.ts.map +0 -1
- package/dist/credentials.js +0 -32
- package/dist/credentials.js.map +0 -1
- package/dist/intent-poller.d.ts +0 -22
- package/dist/intent-poller.d.ts.map +0 -1
- package/dist/intent-poller.js +0 -51
- package/dist/intent-poller.js.map +0 -1
- package/dist/relay-client.d.ts +0 -16
- package/dist/relay-client.d.ts.map +0 -1
- package/dist/relay-client.js +0 -121
- package/dist/relay-client.js.map +0 -1
- package/dist/state-watcher.d.ts +0 -23
- package/dist/state-watcher.d.ts.map +0 -1
- package/dist/state-watcher.js +0 -121
- package/dist/state-watcher.js.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { IntentMessage } from "@clapps/core";
|
|
2
|
-
import type {
|
|
2
|
+
import type { StateStore } from "./state-store.js";
|
|
3
3
|
export interface SettingsHandlerOptions {
|
|
4
4
|
stateDir: string;
|
|
5
|
-
|
|
5
|
+
store: StateStore;
|
|
6
6
|
authPath?: string;
|
|
7
7
|
}
|
|
8
8
|
export declare class SettingsHandler {
|
|
9
9
|
private stateDir;
|
|
10
|
-
private
|
|
10
|
+
private store;
|
|
11
11
|
private authPath;
|
|
12
12
|
constructor(options: SettingsHandlerOptions);
|
|
13
13
|
/** Returns true if the intent was handled locally (should not be forwarded to ACP) */
|
|
@@ -18,9 +18,9 @@ export declare class SettingsHandler {
|
|
|
18
18
|
private setClaudeToken;
|
|
19
19
|
/** Write settings.json state with provider status (masked keys) */
|
|
20
20
|
writeSettingsState(): void;
|
|
21
|
-
/** Push settings
|
|
22
|
-
pushSettingsState
|
|
23
|
-
/** Push _status
|
|
24
|
-
pushStatusState
|
|
21
|
+
/** Push settings state to in-memory store */
|
|
22
|
+
private pushSettingsState;
|
|
23
|
+
/** Push _status state to in-memory store */
|
|
24
|
+
private pushStatusState;
|
|
25
25
|
}
|
|
26
26
|
//# sourceMappingURL=settings-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-handler.d.ts","sourceRoot":"","sources":["../src/settings-handler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"settings-handler.d.ts","sourceRoot":"","sources":["../src/settings-handler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,sBAAsB;IAQ3C,sFAAsF;IACtF,YAAY,GAAI,QAAQ,aAAa,KAAG,OAAO,CA0B7C;IAEF,iDAAiD;IACjD,OAAO,CAAC,eAAe;IAsBvB,qDAAqD;IACrD,OAAO,CAAC,cAAc;IAsBtB,mEAAmE;IACnE,kBAAkB,IAAI,IAAI;IAsD1B,6CAA6C;IAC7C,OAAO,CAAC,iBAAiB;IAMzB,4CAA4C;IAC5C,OAAO,CAAC,eAAe;CAKxB"}
|
package/dist/settings-handler.js
CHANGED
|
@@ -5,11 +5,11 @@ import { homedir } from "node:os";
|
|
|
5
5
|
import { checkAuthStatus } from "./defaults.js";
|
|
6
6
|
export class SettingsHandler {
|
|
7
7
|
stateDir;
|
|
8
|
-
|
|
8
|
+
store;
|
|
9
9
|
authPath;
|
|
10
10
|
constructor(options) {
|
|
11
11
|
this.stateDir = options.stateDir;
|
|
12
|
-
this.
|
|
12
|
+
this.store = options.store;
|
|
13
13
|
this.authPath =
|
|
14
14
|
options.authPath ??
|
|
15
15
|
resolve(homedir(), ".openclaw", "agents", "main", "agent", "auth.json");
|
|
@@ -44,7 +44,6 @@ export class SettingsHandler {
|
|
|
44
44
|
};
|
|
45
45
|
/** Write auth.json with the Anthropic API key */
|
|
46
46
|
setAnthropicKey(apiKey) {
|
|
47
|
-
// Read existing auth or start fresh
|
|
48
47
|
let auth = {};
|
|
49
48
|
try {
|
|
50
49
|
if (existsSync(this.authPath)) {
|
|
@@ -55,16 +54,13 @@ export class SettingsHandler {
|
|
|
55
54
|
// Start fresh if unreadable
|
|
56
55
|
}
|
|
57
56
|
auth.anthropic = { apiKey };
|
|
58
|
-
// Ensure directory exists
|
|
59
57
|
mkdirSync(dirname(this.authPath), { recursive: true });
|
|
60
58
|
writeFileSync(this.authPath, JSON.stringify(auth, null, 2), "utf-8");
|
|
61
59
|
console.log(`✅ Anthropic API key saved to ${this.authPath}`);
|
|
62
|
-
// Update settings state with masked key and push directly
|
|
63
60
|
this.writeSettingsState();
|
|
64
|
-
this.pushSettingsState()
|
|
65
|
-
// Re-check auth status so _status.json reflects the new key, then push
|
|
61
|
+
this.pushSettingsState();
|
|
66
62
|
checkAuthStatus(this.stateDir, this.authPath);
|
|
67
|
-
this.pushStatusState()
|
|
63
|
+
this.pushStatusState();
|
|
68
64
|
}
|
|
69
65
|
/** Set Claude subscription token via openclaw CLI */
|
|
70
66
|
setClaudeToken(token) {
|
|
@@ -75,12 +71,10 @@ export class SettingsHandler {
|
|
|
75
71
|
return;
|
|
76
72
|
}
|
|
77
73
|
console.log("✅ Claude subscription token saved via openclaw");
|
|
78
|
-
// Update settings state and push
|
|
79
74
|
this.writeSettingsState();
|
|
80
|
-
this.pushSettingsState()
|
|
81
|
-
// Re-check auth status so _status.json reflects the new token, then push
|
|
75
|
+
this.pushSettingsState();
|
|
82
76
|
checkAuthStatus(this.stateDir, this.authPath);
|
|
83
|
-
this.pushStatusState()
|
|
77
|
+
this.pushStatusState();
|
|
84
78
|
}
|
|
85
79
|
/** Write settings.json state with provider status (masked keys) */
|
|
86
80
|
writeSettingsState() {
|
|
@@ -115,8 +109,7 @@ export class SettingsHandler {
|
|
|
115
109
|
else if (subscriptionConfigured) {
|
|
116
110
|
description = "**Claude Subscription** — Token configured";
|
|
117
111
|
}
|
|
118
|
-
const
|
|
119
|
-
writeFileSync(statePath, JSON.stringify({
|
|
112
|
+
const state = {
|
|
120
113
|
version: Date.now(),
|
|
121
114
|
timestamp: new Date().toISOString(),
|
|
122
115
|
state: {
|
|
@@ -131,19 +124,21 @@ export class SettingsHandler {
|
|
|
131
124
|
},
|
|
132
125
|
},
|
|
133
126
|
},
|
|
134
|
-
}
|
|
127
|
+
};
|
|
128
|
+
const statePath = resolve(this.stateDir, "settings.json");
|
|
129
|
+
writeFileSync(statePath, JSON.stringify(state, null, 2), "utf-8");
|
|
135
130
|
}
|
|
136
|
-
/** Push settings
|
|
137
|
-
|
|
131
|
+
/** Push settings state to in-memory store */
|
|
132
|
+
pushSettingsState() {
|
|
138
133
|
const statePath = resolve(this.stateDir, "settings.json");
|
|
139
134
|
const content = readFileSync(statePath, "utf-8");
|
|
140
|
-
|
|
135
|
+
this.store.setState("settings", JSON.parse(content));
|
|
141
136
|
}
|
|
142
|
-
/** Push _status
|
|
143
|
-
|
|
137
|
+
/** Push _status state to in-memory store */
|
|
138
|
+
pushStatusState() {
|
|
144
139
|
const statePath = resolve(this.stateDir, "_status.json");
|
|
145
140
|
const content = readFileSync(statePath, "utf-8");
|
|
146
|
-
|
|
141
|
+
this.store.setState("_status", JSON.parse(content));
|
|
147
142
|
}
|
|
148
143
|
}
|
|
149
144
|
//# sourceMappingURL=settings-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-handler.js","sourceRoot":"","sources":["../src/settings-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAShD,MAAM,OAAO,eAAe;IAClB,QAAQ,CAAS;IACjB,KAAK,
|
|
1
|
+
{"version":3,"file":"settings-handler.js","sourceRoot":"","sources":["../src/settings-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { AppEntry, ClappState } from "@clapps/core";
|
|
2
|
+
import type { WebSocket } from "ws";
|
|
3
|
+
export interface WsMessage {
|
|
4
|
+
type: string;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
7
|
+
interface ConnectedClient {
|
|
8
|
+
ws: WebSocket;
|
|
9
|
+
subscriptions: Set<string>;
|
|
10
|
+
context?: ClientContext;
|
|
11
|
+
}
|
|
12
|
+
export interface ClientContext {
|
|
13
|
+
platform?: string;
|
|
14
|
+
user?: Record<string, unknown>;
|
|
15
|
+
capabilities?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* In-memory store for apps, state, and views.
|
|
19
|
+
* Broadcasts changes to connected WebSocket clients.
|
|
20
|
+
*/
|
|
21
|
+
export declare class StateStore {
|
|
22
|
+
private apps;
|
|
23
|
+
private state;
|
|
24
|
+
private views;
|
|
25
|
+
private clients;
|
|
26
|
+
addClient(ws: WebSocket, context?: ClientContext): ConnectedClient;
|
|
27
|
+
removeClient(client: ConnectedClient): void;
|
|
28
|
+
subscribe(client: ConnectedClient, clappIds: string[]): void;
|
|
29
|
+
getApps(): AppEntry[];
|
|
30
|
+
setApps(apps: AppEntry[]): void;
|
|
31
|
+
getState(clappId: string): ClappState | undefined;
|
|
32
|
+
setState(clappId: string, state: ClappState): void;
|
|
33
|
+
getView(viewId: string): string | undefined;
|
|
34
|
+
setView(viewId: string, content: string): void;
|
|
35
|
+
private broadcast;
|
|
36
|
+
private broadcastToSubscribers;
|
|
37
|
+
private safeSend;
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=state-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,SAAS,CAAC;IACd,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,OAAO,CAA8B;IAI7C,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,eAAe;IAMlE,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAI3C,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ5D,OAAO,IAAI,QAAQ,EAAE;IAIrB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI;IAO/B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIjD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAWlD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAO9C,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,QAAQ;CAKjB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory store for apps, state, and views.
|
|
3
|
+
* Broadcasts changes to connected WebSocket clients.
|
|
4
|
+
*/
|
|
5
|
+
export class StateStore {
|
|
6
|
+
apps = [];
|
|
7
|
+
state = new Map();
|
|
8
|
+
views = new Map();
|
|
9
|
+
clients = new Set();
|
|
10
|
+
// --- Client management ---
|
|
11
|
+
addClient(ws, context) {
|
|
12
|
+
const client = { ws, subscriptions: new Set(), context };
|
|
13
|
+
this.clients.add(client);
|
|
14
|
+
return client;
|
|
15
|
+
}
|
|
16
|
+
removeClient(client) {
|
|
17
|
+
this.clients.delete(client);
|
|
18
|
+
}
|
|
19
|
+
subscribe(client, clappIds) {
|
|
20
|
+
for (const id of clappIds) {
|
|
21
|
+
client.subscriptions.add(id);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// --- Apps ---
|
|
25
|
+
getApps() {
|
|
26
|
+
return this.apps;
|
|
27
|
+
}
|
|
28
|
+
setApps(apps) {
|
|
29
|
+
this.apps = apps;
|
|
30
|
+
this.broadcast({ type: "apps", apps });
|
|
31
|
+
}
|
|
32
|
+
// --- State ---
|
|
33
|
+
getState(clappId) {
|
|
34
|
+
return this.state.get(clappId);
|
|
35
|
+
}
|
|
36
|
+
setState(clappId, state) {
|
|
37
|
+
this.state.set(clappId, state);
|
|
38
|
+
this.broadcastToSubscribers(clappId, {
|
|
39
|
+
type: "state",
|
|
40
|
+
clappId,
|
|
41
|
+
state,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// --- Views ---
|
|
45
|
+
getView(viewId) {
|
|
46
|
+
return this.views.get(viewId);
|
|
47
|
+
}
|
|
48
|
+
setView(viewId, content) {
|
|
49
|
+
this.views.set(viewId, content);
|
|
50
|
+
this.broadcast({ type: "view", viewId, content });
|
|
51
|
+
}
|
|
52
|
+
// --- Broadcast ---
|
|
53
|
+
broadcast(msg) {
|
|
54
|
+
const data = JSON.stringify(msg);
|
|
55
|
+
for (const client of this.clients) {
|
|
56
|
+
this.safeSend(client.ws, data);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
broadcastToSubscribers(clappId, msg) {
|
|
60
|
+
const data = JSON.stringify(msg);
|
|
61
|
+
for (const client of this.clients) {
|
|
62
|
+
// Send to clients subscribed to this clappId, or to all if they have no subscriptions (broadcast mode)
|
|
63
|
+
if (client.subscriptions.size === 0 || client.subscriptions.has(clappId)) {
|
|
64
|
+
this.safeSend(client.ws, data);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
safeSend(ws, data) {
|
|
69
|
+
if (ws.readyState === ws.OPEN) {
|
|
70
|
+
ws.send(data);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=state-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-store.js","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clappstore/connect",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"clapps-connect": "./dist/index.js"
|
|
7
7
|
},
|
|
8
|
-
"files": ["dist"],
|
|
8
|
+
"files": ["dist", "web-app"],
|
|
9
9
|
"publishConfig": {
|
|
10
10
|
"access": "public"
|
|
11
11
|
},
|
|
@@ -13,7 +13,11 @@
|
|
|
13
13
|
"build": "tsc",
|
|
14
14
|
"clean": "rm -rf dist"
|
|
15
15
|
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"ws": "^8.18.0"
|
|
18
|
+
},
|
|
16
19
|
"devDependencies": {
|
|
17
|
-
"@clapps/core": "workspace:*"
|
|
20
|
+
"@clapps/core": "workspace:*",
|
|
21
|
+
"@types/ws": "^8.5.13"
|
|
18
22
|
}
|
|
19
23
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--bg: #0a0a0a;--fg: #ededed;--muted: #888;--border: #222;--accent: #3b82f6;--card-bg: #111;--sidebar-bg: #0d0d0d;--hover-bg: #1a1a1a;--active-bg: #1e293b;--skeleton-bg: #1a1a1a;--skeleton-shine: #222;--radius: 8px;--font-mono: "SF Mono", "Fira Code", "Fira Mono", Menlo, monospace;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;background:var(--bg);color:var(--fg);font-family:var(--font-sans);-webkit-font-smoothing:antialiased}#root{height:100%}.clapp-shell{height:100vh;display:flex;flex-direction:column}.clapp-app{flex:1;display:flex;min-height:0;overflow:hidden}.clapp-heading{font-weight:600;letter-spacing:-.02em}h1.clapp-heading{font-size:1.5rem}h2.clapp-heading{font-size:1.25rem}h3.clapp-heading{font-size:1rem}.clapp-btn{display:inline-flex;align-items:center;gap:.375rem;border:1px solid var(--border);border-radius:var(--radius);background:transparent;color:var(--fg);cursor:pointer;font-family:inherit;transition:background .15s}.clapp-btn:hover{background:var(--hover-bg)}.clapp-btn-ghost{border-color:transparent}.clapp-btn-sm{padding:.25rem .5rem;font-size:.8125rem}.clapp-btn-md{padding:.5rem 1rem;font-size:.875rem}.clapp-list{list-style:none;display:flex;flex-direction:column}.clapp-list-item{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-radius:var(--radius);cursor:pointer;font-size:.875rem;color:var(--fg);transition:background .15s}.clapp-list-item:hover{background:var(--hover-bg)}.clapp-list-item.active{background:var(--active-bg);color:var(--accent)}.clapp-icon{font-size:1rem;line-height:1}.clapp-skeleton{display:flex;flex-direction:column;gap:.5rem;padding:.5rem 0}.clapp-skeleton-line{height:1rem;background:linear-gradient(90deg,var(--skeleton-bg) 25%,var(--skeleton-shine) 50%,var(--skeleton-bg) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.5s ease-in-out infinite;border-radius:4px}.clapp-skeleton-line:nth-child(odd){width:80%}.clapp-skeleton-line:nth-child(2n){width:60%}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.clapp-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--card-bg);overflow:hidden}.clapp-card-header{padding:.75rem 1rem;border-bottom:1px solid var(--border);font-weight:600;font-size:.875rem}.clapp-card-body{padding:1rem}.clapp-markdown{font-size:.9375rem;line-height:1.7;max-width:72ch}.clapp-markdown h1{font-size:1.5rem;font-weight:700;margin:1.5rem 0 .75rem}.clapp-markdown h2{font-size:1.25rem;font-weight:600;margin:1.25rem 0 .5rem}.clapp-markdown h3{font-size:1.1rem;font-weight:600;margin:1rem 0 .5rem}.clapp-markdown p{margin:.75rem 0}.clapp-markdown ul,.clapp-markdown ol{margin:.5rem 0;padding-left:1.5rem}.clapp-markdown li{margin:.25rem 0}.clapp-markdown code{font-family:var(--font-mono);background:var(--hover-bg);padding:.15em .35em;border-radius:4px;font-size:.85em}.clapp-markdown pre{background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);padding:1rem;overflow-x:auto;margin:.75rem 0}.clapp-markdown pre code{background:none;padding:0}.clapp-markdown blockquote{border-left:3px solid var(--accent);padding-left:1rem;color:var(--muted);margin:.75rem 0}.clapp-markdown hr{border:none;border-top:1px solid var(--border);margin:1.5rem 0}.clapp-markdown a{color:var(--accent);text-decoration:none}.clapp-markdown a:hover{text-decoration:underline}.clapp-empty{color:var(--muted);font-size:.875rem;padding:2rem;text-align:center}.clapp-error{color:#ef4444;font-size:.875rem;padding:.5rem}.clapp-module{height:100%;overflow-y:auto}.home-shell{position:relative;height:100vh;overflow:hidden}.home-shell-layer{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow-y:auto}.home-screen-layer{transition:transform .3s ease,opacity .3s ease;z-index:1}.home-screen-hidden{transform:translate(-30%);opacity:0;pointer-events:none}.app-layer{z-index:2;transform:translate(100%);opacity:0;transition:transform .3s ease,opacity .3s ease}.app-layer-visible{transform:translate(0);opacity:1}.app-back-btn{position:absolute;top:.75rem;left:.75rem;z-index:10;display:inline-flex;align-items:center;gap:.125rem;background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--accent);font-family:var(--font-sans);font-size:.8125rem;padding:.25rem .625rem .25rem .375rem;cursor:pointer;transition:background .15s}.app-back-btn:hover{background:var(--hover-bg)}
|