@clappstore/connect 0.6.1 → 0.7.1

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 (60) hide show
  1. package/clapps/settings/README.md +74 -0
  2. package/clapps/settings/clapp.json +25 -0
  3. package/clapps/settings/components/ProviderEditor.tsx +512 -0
  4. package/clapps/settings/components/ProviderList.tsx +300 -0
  5. package/clapps/settings/components/SessionList.tsx +189 -0
  6. package/clapps/settings/handlers/settings-handler.js +760 -0
  7. package/clapps/settings/views/default.settings.view.md +38 -0
  8. package/clapps/settings/views/settings.app.md +12 -0
  9. package/dist/clapp-handler.d.ts +16 -0
  10. package/dist/clapp-handler.d.ts.map +1 -0
  11. package/dist/clapp-handler.js +2 -0
  12. package/dist/clapp-handler.js.map +1 -0
  13. package/dist/clapp-loader.d.ts +3 -0
  14. package/dist/clapp-loader.d.ts.map +1 -0
  15. package/dist/clapp-loader.js +61 -0
  16. package/dist/clapp-loader.js.map +1 -0
  17. package/dist/defaults.d.ts +9 -5
  18. package/dist/defaults.d.ts.map +1 -1
  19. package/dist/defaults.js +130 -79
  20. package/dist/defaults.js.map +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +57 -89
  24. package/dist/index.js.map +1 -1
  25. package/dist/server.d.ts +14 -0
  26. package/dist/server.d.ts.map +1 -0
  27. package/dist/server.js +204 -0
  28. package/dist/server.js.map +1 -0
  29. package/package.json +13 -5
  30. package/web-app/assets/index-BYIO2GGA.css +1 -0
  31. package/web-app/assets/index-kbnfuSZC.js +128 -0
  32. package/web-app/index.html +13 -0
  33. package/dist/agent-client.d.ts +0 -28
  34. package/dist/agent-client.d.ts.map +0 -1
  35. package/dist/agent-client.js +0 -159
  36. package/dist/agent-client.js.map +0 -1
  37. package/dist/agent-handler.d.ts +0 -18
  38. package/dist/agent-handler.d.ts.map +0 -1
  39. package/dist/agent-handler.js +0 -17
  40. package/dist/agent-handler.js.map +0 -1
  41. package/dist/credentials.d.ts +0 -5
  42. package/dist/credentials.d.ts.map +0 -1
  43. package/dist/credentials.js +0 -32
  44. package/dist/credentials.js.map +0 -1
  45. package/dist/intent-poller.d.ts +0 -22
  46. package/dist/intent-poller.d.ts.map +0 -1
  47. package/dist/intent-poller.js +0 -51
  48. package/dist/intent-poller.js.map +0 -1
  49. package/dist/relay-client.d.ts +0 -16
  50. package/dist/relay-client.d.ts.map +0 -1
  51. package/dist/relay-client.js +0 -121
  52. package/dist/relay-client.js.map +0 -1
  53. package/dist/settings-handler.d.ts +0 -26
  54. package/dist/settings-handler.d.ts.map +0 -1
  55. package/dist/settings-handler.js +0 -149
  56. package/dist/settings-handler.js.map +0 -1
  57. package/dist/state-watcher.d.ts +0 -23
  58. package/dist/state-watcher.d.ts.map +0 -1
  59. package/dist/state-watcher.js +0 -121
  60. package/dist/state-watcher.js.map +0 -1
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: settings
3
+ domain: default
4
+ version: 0.6.0
5
+ ---
6
+
7
+ ## State Bindings
8
+ - `active.isConfigured` -> boolean
9
+ - `active.model` -> string
10
+ - `configuredProviders` -> array
11
+ - `sessions.sessions` -> array
12
+ - `sessions.globalModel` -> string
13
+
14
+ ## Layout
15
+ ```clapp-layout
16
+ Column(gap=5):
17
+ Card(title=AI Providers):
18
+ Column(gap=4):
19
+ Conditional(when=active.isConfigured):
20
+ ProviderList(data=configuredProviders):
21
+ Conditional(when=!active.isConfigured):
22
+ Heading(level=4): "No providers configured"
23
+ SessionList():
24
+ ```
25
+
26
+ ## Intents
27
+ | Name | Payload | Description |
28
+ |------|---------|-------------|
29
+ | settings.setAnthropicKey | `{ apiKey: string, customName?: string }` | Set an Anthropic API key |
30
+ | settings.setClaudeToken | `{ setupToken: string, customName?: string }` | Set a Claude subscription token |
31
+ | settings.setOpenAIKey | `{ apiKey: string, customName?: string }` | Set an OpenAI API key |
32
+ | settings.setKimiCodingKey | `{ apiKey: string, customName?: string }` | Set a Kimi Coding API key |
33
+ | settings.setActiveProvider | `{ provider: string }` | Set the active AI provider |
34
+ | settings.setActiveModel | `{ model: string }` | Set the active AI model |
35
+ | settings.deleteProvider | `{ profileId: string }` | Delete a provider profile |
36
+ | settings.listSessions | `{}` | Refresh the list of active sessions |
37
+ | settings.resetSessionModel | `{ sessionKey: string }` | Reset a session to use the system default |
38
+ | settings.applyDefaultToAll | `{}` | Apply system default to all sessions |
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: Settings
3
+ domain: default
4
+ ---
5
+
6
+ ## Modules
7
+ - default/settings
8
+
9
+ ## Layout
10
+ ```clapp-layout
11
+ Module(ref=default/settings):
12
+ ```
@@ -0,0 +1,16 @@
1
+ export interface ClappHandlerContext {
2
+ stateDir: string;
3
+ setState(clappId: string, state: unknown): void;
4
+ checkAuthStatus(): void;
5
+ }
6
+ export interface ClappHandler {
7
+ handleIntent(intent: {
8
+ intent: string;
9
+ payload: Record<string, unknown>;
10
+ }): boolean;
11
+ onConnect?(): void;
12
+ refresh?(): void;
13
+ init?(): void;
14
+ }
15
+ export type ClappHandlerFactory = (ctx: ClappHandlerContext) => ClappHandler;
16
+ //# sourceMappingURL=clapp-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clapp-handler.d.ts","sourceRoot":"","sources":["../src/clapp-handler.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAChD,eAAe,IAAI,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC;IACpF,SAAS,CAAC,IAAI,IAAI,CAAC;IACnB,OAAO,CAAC,IAAI,IAAI,CAAC;IACjB,IAAI,CAAC,IAAI,IAAI,CAAC;CACf;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,mBAAmB,KAAK,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=clapp-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clapp-handler.js","sourceRoot":"","sources":["../src/clapp-handler.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { ClappHandler, ClappHandlerContext } from "./clapp-handler.js";
2
+ export declare function loadClappHandlers(clappsDir: string, ctx: ClappHandlerContext): Promise<ClappHandler[]>;
3
+ //# sourceMappingURL=clapp-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clapp-loader.d.ts","sourceRoot":"","sources":["../src/clapp-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAuB,MAAM,oBAAoB,CAAC;AAOjG,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,YAAY,EAAE,CAAC,CA6DzB"}
@@ -0,0 +1,61 @@
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ export async function loadClappHandlers(clappsDir, ctx) {
5
+ const handlers = [];
6
+ if (!existsSync(clappsDir)) {
7
+ console.warn(`[clapp-loader] Clapps directory not found: ${clappsDir}`);
8
+ return handlers;
9
+ }
10
+ let entries;
11
+ try {
12
+ entries = readdirSync(clappsDir, { withFileTypes: true })
13
+ .filter((d) => d.isDirectory())
14
+ .map((d) => d.name);
15
+ }
16
+ catch {
17
+ console.warn(`[clapp-loader] Failed to read clapps directory: ${clappsDir}`);
18
+ return handlers;
19
+ }
20
+ for (const entry of entries) {
21
+ const manifestPath = resolve(clappsDir, entry, "clapp.json");
22
+ if (!existsSync(manifestPath))
23
+ continue;
24
+ let manifest;
25
+ try {
26
+ manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
27
+ }
28
+ catch (err) {
29
+ console.warn(`[clapp-loader] Failed to parse ${manifestPath}: ${err}`);
30
+ continue;
31
+ }
32
+ if (!Array.isArray(manifest.handlers) || manifest.handlers.length === 0) {
33
+ continue;
34
+ }
35
+ for (const handlerRef of manifest.handlers) {
36
+ // Manifest references .ts source paths; convert to compiled .js
37
+ const jsPath = handlerRef.replace(/\.ts$/, ".js");
38
+ const fullPath = resolve(clappsDir, entry, jsPath);
39
+ if (!existsSync(fullPath)) {
40
+ console.warn(`[clapp-loader] Handler not found: ${fullPath}`);
41
+ continue;
42
+ }
43
+ try {
44
+ const mod = await import(pathToFileURL(fullPath).href);
45
+ const factory = mod.default;
46
+ if (typeof factory !== "function") {
47
+ console.warn(`[clapp-loader] ${fullPath} does not export a default factory function`);
48
+ continue;
49
+ }
50
+ const handler = factory(ctx);
51
+ handlers.push(handler);
52
+ console.log(`[clapp-loader] Loaded handler: ${manifest.name}`);
53
+ }
54
+ catch (err) {
55
+ console.error(`[clapp-loader] Failed to load handler ${fullPath}: ${err}`);
56
+ }
57
+ }
58
+ }
59
+ return handlers;
60
+ }
61
+ //# sourceMappingURL=clapp-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clapp-loader.js","sourceRoot":"","sources":["../src/clapp-loader.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,11 @@
1
- import type { RelayClient } from "./relay-client.js";
1
+ /** Get the user's clapps directory */
2
+ export declare function getUserClappsDir(): string;
3
+ /** Get the bundled clapps directory (shipped with package) */
4
+ export declare function getBundledClappsDir(): string;
5
+ /** Install default clapps to user directory if not present */
6
+ export declare function installDefaultClapps(): void;
7
+ /** Seed default views and apps registry */
2
8
  export declare function seedDefaults(viewsDir: string, stateDir: string): void;
3
- /** Push all seeded files to the relay in one shot */
4
- export declare function pushDefaults(relay: RelayClient, viewsDir: string, stateDir: string): Promise<void>;
5
- /** Check if the agent has an AI provider API key configured and write _status.json */
6
- export declare function checkAuthStatus(stateDir: string, authPath?: string): void;
9
+ /** Check if the agent has an AI provider configured and write _status.json */
10
+ export declare function checkAuthStatus(stateDir: string, authProfilesPath?: string): void;
7
11
  //# sourceMappingURL=defaults.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAsJrD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAqCrE;AAED,qDAAqD;AACrD,wBAAsB,YAAY,CAChC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAmDzE"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAyJA,sCAAsC;AACtC,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AA6BD,8DAA8D;AAC9D,wBAAgB,oBAAoB,IAAI,IAAI,CAwB3C;AAED,2CAA2C;AAC3C,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CA2CrE;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAyDjF"}
package/dist/defaults.js CHANGED
@@ -1,6 +1,8 @@
1
- import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
- import { resolve } from "node:path";
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, cpSync } from "node:fs";
2
+ import { resolve, dirname } from "node:path";
3
3
  import { homedir } from "node:os";
4
+ import { fileURLToPath } from "node:url";
5
+ // === Bundled defaults (fallback if user hasn't customized) ===
4
6
  const DEFAULT_CHAT_APP_MD = `---
5
7
  name: Chat
6
8
  domain: default
@@ -39,13 +41,6 @@ Column(gap=4):
39
41
  |------|---------|-------------|
40
42
  | chat.send | \`{ text: string }\` | Send a chat message |
41
43
  `;
42
- const DEFAULT_CHAT_APP_ENTRY = {
43
- id: "chat",
44
- name: "Chat",
45
- emoji: "\u{1F4AC}",
46
- description: "Chat with the agent",
47
- pinned: true,
48
- };
49
44
  const DEFAULT_SETTINGS_APP_MD = `---
50
45
  name: Settings
51
46
  domain: default
@@ -62,87 +57,146 @@ Module(ref=default/settings):
62
57
  const DEFAULT_SETTINGS_VIEW = `---
63
58
  name: settings
64
59
  domain: default
65
- version: 0.3.0
60
+ version: 0.6.0
66
61
  ---
67
62
 
68
63
  ## State Bindings
69
64
  - \`active.isConfigured\` -> boolean
70
- - \`active.description\` -> string
71
- - \`providers.anthropic.apiKey.configured\` -> boolean
72
- - \`providers.anthropic.apiKey.maskedKey\` -> string
73
- - \`providers.anthropic.subscription.configured\` -> boolean
74
- - \`providers.anthropic.subscription.instructions\` -> string
65
+ - \`active.model\` -> string
66
+ - \`configuredProviders\` -> array
67
+ - \`sessions.sessions\` -> array
68
+ - \`sessions.globalModel\` -> string
75
69
 
76
70
  ## Layout
77
71
  \`\`\`clapp-layout
78
- Column(gap=4):
79
- Heading(level=2): "Settings"
80
- Card(title=Authentication Status):
81
- Column(gap=2):
72
+ Column(gap=5):
73
+ Card(title=AI Providers):
74
+ Column(gap=4):
82
75
  Conditional(when=active.isConfigured):
83
- MarkdownContent(source=active.description):
76
+ ProviderList(data=configuredProviders):
84
77
  Conditional(when=!active.isConfigured):
85
- Heading(level=4): "No authentication configured"
86
- Card(title=Anthropic API Key):
87
- Column(gap=3):
88
- Conditional(when=providers.anthropic.apiKey.configured):
89
- Heading(level=4): "Configured"
90
- Conditional(when=!providers.anthropic.apiKey.configured):
91
- Heading(level=4): "Not configured"
92
- IntentForm(intent=settings.setAnthropicKey, submitLabel=Save Key):
93
- TextInput(name=apiKey, type=password, placeholder=sk-ant-...):
94
- Card(title=Claude Subscription):
95
- Column(gap=3):
96
- Conditional(when=providers.anthropic.subscription.configured):
97
- Heading(level=4): "Configured"
98
- Conditional(when=!providers.anthropic.subscription.configured):
99
- Heading(level=4): "Not configured"
100
- MarkdownContent(source=providers.anthropic.subscription.instructions):
101
- IntentForm(intent=settings.setClaudeToken, submitLabel=Save Token):
102
- TextInput(name=token, type=password, placeholder=Paste setup-token here...):
78
+ Heading(level=4): "No providers configured"
79
+ SessionList():
103
80
  \`\`\`
104
81
 
105
82
  ## Intents
106
83
  | Name | Payload | Description |
107
84
  |------|---------|-------------|
108
- | settings.setAnthropicKey | \`{ apiKey: string }\` | Set the Anthropic API key |
109
- | settings.setClaudeToken | \`{ token: string }\` | Set Claude subscription setup-token |
85
+ | settings.setAnthropicKey | \`{ apiKey: string, customName?: string }\` | Set an Anthropic API key |
86
+ | settings.setClaudeToken | \`{ setupToken: string, customName?: string }\` | Set a Claude subscription token |
87
+ | settings.setOpenAIKey | \`{ apiKey: string, customName?: string }\` | Set an OpenAI API key |
88
+ | settings.setKimiCodingKey | \`{ apiKey: string, customName?: string }\` | Set a Kimi Coding API key |
89
+ | settings.setActiveProvider | \`{ provider: string }\` | Set the active AI provider |
90
+ | settings.setActiveModel | \`{ model: string }\` | Set the active AI model |
91
+ | settings.deleteProvider | \`{ profileId: string }\` | Delete a provider profile |
92
+ | settings.listSessions | \`{}\` | Refresh the list of active sessions |
93
+ | settings.resetSessionModel | \`{ sessionKey: string }\` | Reset a session to use the system default |
94
+ | settings.applyDefaultToAll | \`{}\` | Apply system default to all sessions |
110
95
  `;
111
- const DEFAULT_SETTINGS_APP_ENTRY = {
112
- id: "settings",
113
- name: "Settings",
114
- emoji: "\u2699\uFE0F",
115
- description: "Configure your agent",
116
- pinned: true,
117
- };
118
96
  const DEFAULT_APP_ENTRIES = [
119
- DEFAULT_CHAT_APP_ENTRY,
120
- DEFAULT_SETTINGS_APP_ENTRY,
97
+ {
98
+ id: "chat",
99
+ name: "Chat",
100
+ emoji: "\u{1F4AC}",
101
+ description: "Chat with the agent",
102
+ pinned: true,
103
+ },
104
+ {
105
+ id: "settings",
106
+ name: "Settings",
107
+ emoji: "\u2699\uFE0F",
108
+ description: "Configure your agent",
109
+ pinned: true,
110
+ },
121
111
  ];
122
- const DEFAULT_APPS = [
112
+ const BUNDLED_CLAPPS = [
123
113
  {
114
+ id: "chat",
124
115
  appPath: "chat.app.md",
125
116
  viewPath: "default.chat.view.md",
126
117
  appMd: DEFAULT_CHAT_APP_MD,
127
118
  viewMd: DEFAULT_CHAT_VIEW,
128
119
  },
129
120
  {
121
+ id: "settings",
130
122
  appPath: "settings.app.md",
131
123
  viewPath: "default.settings.view.md",
132
124
  appMd: DEFAULT_SETTINGS_APP_MD,
133
125
  viewMd: DEFAULT_SETTINGS_VIEW,
134
126
  },
135
127
  ];
128
+ // === Clapp loading ===
129
+ /** Get the user's clapps directory */
130
+ export function getUserClappsDir() {
131
+ return resolve(homedir(), ".openclaw", "clapps");
132
+ }
133
+ /** Get the bundled clapps directory (shipped with package) */
134
+ export function getBundledClappsDir() {
135
+ const __dirname = dirname(fileURLToPath(import.meta.url));
136
+ return resolve(__dirname, "..", "clapps");
137
+ }
138
+ /** Load a view file, checking user dir first, then bundled, then fallback to embedded */
139
+ function loadView(clappId, viewFile, fallback) {
140
+ const userPath = resolve(getUserClappsDir(), clappId, "views", viewFile);
141
+ if (existsSync(userPath)) {
142
+ try {
143
+ return readFileSync(userPath, "utf-8");
144
+ }
145
+ catch {
146
+ // Fall through
147
+ }
148
+ }
149
+ const bundledPath = resolve(getBundledClappsDir(), clappId, "views", viewFile);
150
+ if (existsSync(bundledPath)) {
151
+ try {
152
+ return readFileSync(bundledPath, "utf-8");
153
+ }
154
+ catch {
155
+ // Fall through
156
+ }
157
+ }
158
+ return fallback;
159
+ }
160
+ /** Install default clapps to user directory if not present */
161
+ export function installDefaultClapps() {
162
+ const userClappsDir = getUserClappsDir();
163
+ const bundledClappsDir = getBundledClappsDir();
164
+ for (const clapp of BUNDLED_CLAPPS) {
165
+ const userClappDir = resolve(userClappsDir, clapp.id);
166
+ const bundledClappDir = resolve(bundledClappsDir, clapp.id);
167
+ // Skip if user already has this clapp
168
+ if (existsSync(userClappDir)) {
169
+ continue;
170
+ }
171
+ // Copy from bundled if available
172
+ if (existsSync(bundledClappDir)) {
173
+ try {
174
+ mkdirSync(userClappDir, { recursive: true });
175
+ cpSync(bundledClappDir, userClappDir, { recursive: true });
176
+ console.log(`📦 Installed clapp: ${clapp.id} -> ${userClappDir}`);
177
+ }
178
+ catch (err) {
179
+ console.warn(`⚠️ Failed to install clapp ${clapp.id}: ${err}`);
180
+ }
181
+ }
182
+ }
183
+ }
184
+ /** Seed default views and apps registry */
136
185
  export function seedDefaults(viewsDir, stateDir) {
137
- // Seed app definitions and always overwrite default view modules
138
- for (const { appPath, viewPath, appMd, viewMd } of DEFAULT_APPS) {
139
- const fullAppPath = resolve(viewsDir, appPath);
186
+ // Install clapps to user directory first
187
+ installDefaultClapps();
188
+ // Seed app definitions and view modules
189
+ for (const clapp of BUNDLED_CLAPPS) {
190
+ const fullAppPath = resolve(viewsDir, clapp.appPath);
191
+ const appContent = loadView(clapp.id, clapp.appPath.replace(".app.md", ".app.md"), clapp.appMd);
140
192
  if (!existsSync(fullAppPath)) {
141
- writeFileSync(fullAppPath, appMd, "utf-8");
142
- console.log(`📝 Created default app: ${fullAppPath}`);
193
+ writeFileSync(fullAppPath, appContent, "utf-8");
194
+ console.log(`📝 Created app: ${fullAppPath}`);
143
195
  }
144
- const fullViewPath = resolve(viewsDir, viewPath);
145
- writeFileSync(fullViewPath, viewMd, "utf-8");
196
+ const fullViewPath = resolve(viewsDir, clapp.viewPath);
197
+ const viewFile = clapp.viewPath.replace("default.", "").replace(".view.md", ".view.md");
198
+ const viewContent = loadView(clapp.id, `default.${clapp.id}.view.md`, clapp.viewMd);
199
+ writeFileSync(fullViewPath, viewContent, "utf-8");
146
200
  }
147
201
  // Seed or merge _apps.json
148
202
  const appsPath = resolve(stateDir, "_apps.json");
@@ -166,43 +220,40 @@ export function seedDefaults(viewsDir, stateDir) {
166
220
  }
167
221
  }
168
222
  catch {
169
- // If _apps.json is malformed, don't overwrite — let the user fix it
170
223
  console.warn(`⚠️ Could not parse ${appsPath}, skipping app seeding`);
171
224
  }
172
225
  }
173
226
  }
174
- /** Push all seeded files to the relay in one shot */
175
- export async function pushDefaults(relay, viewsDir, stateDir) {
176
- console.log("Pushing defaults to relay...");
177
- await relay.syncDir(stateDir, viewsDir);
178
- console.log("Initial sync complete");
179
- }
180
- /** Check if the agent has an AI provider API key configured and write _status.json */
181
- export function checkAuthStatus(stateDir, authPath) {
182
- const defaultAuthPath = resolve(homedir(), ".openclaw", "agents", "main", "agent", "auth.json");
183
- const targetPath = authPath ?? defaultAuthPath;
227
+ /** Check if the agent has an AI provider configured and write _status.json */
228
+ export function checkAuthStatus(stateDir, authProfilesPath) {
229
+ const defaultAuthProfilesPath = resolve(homedir(), ".openclaw", "agents", "main", "agent", "auth-profiles.json");
230
+ const targetPath = authProfilesPath ?? defaultAuthProfilesPath;
184
231
  let setupRequired = true;
185
- let message = "Your agent needs an AI provider key to respond to messages. SSH into your server and run:\n" +
186
- 'openclaw config set agents.main.auth.anthropic.apiKey "sk-ant-..."';
232
+ let message = "Your agent needs an AI provider key to respond to messages. Run:\n" +
233
+ "`openclaw models auth` to configure authentication.";
187
234
  try {
188
235
  if (existsSync(targetPath)) {
189
236
  const raw = readFileSync(targetPath, "utf-8");
190
- const auth = JSON.parse(raw);
191
- // Check if there's any non-empty key value in the auth config
192
- const hasKey = Object.values(auth).some((provider) => {
193
- if (typeof provider === "object" && provider !== null) {
194
- return Object.values(provider).some((v) => typeof v === "string" && v.length > 0);
237
+ const data = JSON.parse(raw);
238
+ // Check if any profile has actual credentials
239
+ const profiles = data.profiles ?? data;
240
+ const hasCredentials = Object.values(profiles).some((profile) => {
241
+ if (typeof profile === "object" && profile !== null) {
242
+ const p = profile;
243
+ return ((typeof p.token === "string" && p.token.length > 0) ||
244
+ (typeof p.key === "string" && p.key.length > 0) ||
245
+ (typeof p.access === "string" && p.access.length > 0));
195
246
  }
196
- return typeof provider === "string" && provider.length > 0;
247
+ return false;
197
248
  });
198
- if (hasKey) {
249
+ if (hasCredentials) {
199
250
  setupRequired = false;
200
251
  message = "";
201
252
  }
202
253
  }
203
254
  }
204
255
  catch {
205
- // If we can't read auth.json, assume setup is required
256
+ // If we can't read auth-profiles.json, assume setup is required
206
257
  }
207
258
  const statusPath = resolve(stateDir, "_status.json");
208
259
  writeFileSync(statusPath, JSON.stringify({
@@ -211,7 +262,7 @@ export function checkAuthStatus(stateDir, authPath) {
211
262
  state: { setupRequired, message },
212
263
  }, null, 2), "utf-8");
213
264
  if (setupRequired) {
214
- console.warn("⚠️ No AI provider key configured — _status.json written with setupRequired: true");
265
+ console.warn("⚠️ No AI provider configured — _status.json written with setupRequired: true");
215
266
  }
216
267
  }
217
268
  //# sourceMappingURL=defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ export type { ClappHandler, ClappHandlerContext, ClappHandlerFactory } from "./clapp-handler.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAeA,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}