@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
@@ -1,149 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
- import { spawnSync } from "node:child_process";
3
- import { dirname, resolve } from "node:path";
4
- import { homedir } from "node:os";
5
- import { checkAuthStatus } from "./defaults.js";
6
- export class SettingsHandler {
7
- stateDir;
8
- relay;
9
- authPath;
10
- constructor(options) {
11
- this.stateDir = options.stateDir;
12
- this.relay = options.relay;
13
- this.authPath =
14
- options.authPath ??
15
- resolve(homedir(), ".openclaw", "agents", "main", "agent", "auth.json");
16
- }
17
- /** Returns true if the intent was handled locally (should not be forwarded to ACP) */
18
- handleIntent = (intent) => {
19
- if (!intent.intent.startsWith("settings."))
20
- return false;
21
- switch (intent.intent) {
22
- case "settings.setAnthropicKey": {
23
- const apiKey = intent.payload.apiKey;
24
- if (typeof apiKey !== "string" || apiKey.trim().length === 0) {
25
- console.warn("[settings] Invalid apiKey payload, ignoring");
26
- return true;
27
- }
28
- this.setAnthropicKey(apiKey.trim());
29
- return true;
30
- }
31
- case "settings.setClaudeToken": {
32
- const token = intent.payload.token;
33
- if (typeof token !== "string" || token.trim().length === 0) {
34
- console.warn("[settings] Invalid token payload, ignoring");
35
- return true;
36
- }
37
- this.setClaudeToken(token.trim());
38
- return true;
39
- }
40
- default:
41
- console.warn(`[settings] Unknown settings intent: ${intent.intent}`);
42
- return true;
43
- }
44
- };
45
- /** Write auth.json with the Anthropic API key */
46
- setAnthropicKey(apiKey) {
47
- // Read existing auth or start fresh
48
- let auth = {};
49
- try {
50
- if (existsSync(this.authPath)) {
51
- auth = JSON.parse(readFileSync(this.authPath, "utf-8"));
52
- }
53
- }
54
- catch {
55
- // Start fresh if unreadable
56
- }
57
- auth.anthropic = { apiKey };
58
- // Ensure directory exists
59
- mkdirSync(dirname(this.authPath), { recursive: true });
60
- writeFileSync(this.authPath, JSON.stringify(auth, null, 2), "utf-8");
61
- console.log(`✅ Anthropic API key saved to ${this.authPath}`);
62
- // Update settings state with masked key and push directly
63
- this.writeSettingsState();
64
- this.pushSettingsState().catch((err) => console.error(`[settings] Failed to push settings: ${err.message}`));
65
- // Re-check auth status so _status.json reflects the new key, then push
66
- checkAuthStatus(this.stateDir, this.authPath);
67
- this.pushStatusState().catch((err) => console.error(`[settings] Failed to push status: ${err.message}`));
68
- }
69
- /** Set Claude subscription token via openclaw CLI */
70
- setClaudeToken(token) {
71
- const result = spawnSync("openclaw", ["models", "auth", "paste-token", "--provider", "anthropic"], { input: token, encoding: "utf-8", timeout: 15_000 });
72
- if (result.status !== 0) {
73
- const msg = (result.stderr || result.error?.message || "unknown error").toString().trim();
74
- console.error(`[settings] openclaw paste-token failed: ${msg}`);
75
- return;
76
- }
77
- console.log("✅ Claude subscription token saved via openclaw");
78
- // Update settings state and push
79
- this.writeSettingsState();
80
- this.pushSettingsState().catch((err) => console.error(`[settings] Failed to push settings: ${err.message}`));
81
- // Re-check auth status so _status.json reflects the new token, then push
82
- checkAuthStatus(this.stateDir, this.authPath);
83
- this.pushStatusState().catch((err) => console.error(`[settings] Failed to push status: ${err.message}`));
84
- }
85
- /** Write settings.json state with provider status (masked keys) */
86
- writeSettingsState() {
87
- let apiKeyConfigured = false;
88
- let maskedKey = "";
89
- let subscriptionConfigured = false;
90
- try {
91
- if (existsSync(this.authPath)) {
92
- const auth = JSON.parse(readFileSync(this.authPath, "utf-8"));
93
- const key = auth?.anthropic?.apiKey;
94
- if (typeof key === "string" && key.length > 0) {
95
- apiKeyConfigured = true;
96
- maskedKey =
97
- key.length > 8
98
- ? key.slice(0, 7) + "..." + key.slice(-4)
99
- : "***";
100
- }
101
- const oauthToken = auth?.anthropic?.oauthToken;
102
- if (typeof oauthToken === "string" && oauthToken.length > 0) {
103
- subscriptionConfigured = true;
104
- }
105
- }
106
- }
107
- catch {
108
- // Leave as unconfigured
109
- }
110
- const isConfigured = apiKeyConfigured || subscriptionConfigured;
111
- let description = "";
112
- if (apiKeyConfigured) {
113
- description = `**Anthropic API Key** — ${maskedKey}`;
114
- }
115
- else if (subscriptionConfigured) {
116
- description = "**Claude Subscription** — Token configured";
117
- }
118
- const statePath = resolve(this.stateDir, "settings.json");
119
- writeFileSync(statePath, JSON.stringify({
120
- version: Date.now(),
121
- timestamp: new Date().toISOString(),
122
- state: {
123
- active: { isConfigured, description },
124
- providers: {
125
- anthropic: {
126
- apiKey: { configured: apiKeyConfigured, maskedKey },
127
- subscription: {
128
- configured: subscriptionConfigured,
129
- instructions: "Run `claude setup-token` on your server, then paste the output here.",
130
- },
131
- },
132
- },
133
- },
134
- }, null, 2), "utf-8");
135
- }
136
- /** Push settings.json state to relay */
137
- async pushSettingsState() {
138
- const statePath = resolve(this.stateDir, "settings.json");
139
- const content = readFileSync(statePath, "utf-8");
140
- await this.relay.pushState("settings", JSON.parse(content));
141
- }
142
- /** Push _status.json state to relay */
143
- async pushStatusState() {
144
- const statePath = resolve(this.stateDir, "_status.json");
145
- const content = readFileSync(statePath, "utf-8");
146
- await this.relay.pushState("_status", JSON.parse(content));
147
- }
148
- }
149
- //# sourceMappingURL=settings-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings-handler.js","sourceRoot":"","sources":["../src/settings-handler.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- export interface StateWatcherOptions {
2
- stateDir: string;
3
- viewsDir?: string;
4
- relayUrl: string;
5
- token: string;
6
- agentId: string;
7
- onError?: (error: Error) => void;
8
- }
9
- /** Watch the agent's ui/state/ directory for changes and push to relay */
10
- export declare class StateWatcher {
11
- private options;
12
- private stateWatcher;
13
- private viewsWatcher;
14
- constructor(options: StateWatcherOptions);
15
- start(): void;
16
- /** Resolves when chokidar has finished its initial scan and filesystem watchers are active */
17
- waitReady(): Promise<void>;
18
- stop(): Promise<void>;
19
- private pushState;
20
- private pushView;
21
- private pushApps;
22
- }
23
- //# sourceMappingURL=state-watcher.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-watcher.d.ts","sourceRoot":"","sources":["../src/state-watcher.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,0EAA0E;AAC1E,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,YAAY,CAA0B;gBAElC,OAAO,EAAE,mBAAmB;IAIxC,KAAK,IAAI,IAAI;IAoBb,8FAA8F;IAC9F,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAOb,SAAS;YAgCT,QAAQ;YA0BR,QAAQ;CAiBvB"}
@@ -1,121 +0,0 @@
1
- import { watch } from "chokidar";
2
- import { readFile } from "node:fs/promises";
3
- import { basename } from "node:path";
4
- /** Watch the agent's ui/state/ directory for changes and push to relay */
5
- export class StateWatcher {
6
- options;
7
- stateWatcher = null;
8
- viewsWatcher = null;
9
- constructor(options) {
10
- this.options = options;
11
- }
12
- start() {
13
- this.stateWatcher = watch(`${this.options.stateDir}/*.json`, {
14
- ignoreInitial: false,
15
- awaitWriteFinish: { stabilityThreshold: 200 },
16
- });
17
- this.stateWatcher.on("add", (path) => this.pushState(path));
18
- this.stateWatcher.on("change", (path) => this.pushState(path));
19
- if (this.options.viewsDir) {
20
- this.viewsWatcher = watch(`${this.options.viewsDir}/*.md`, {
21
- ignoreInitial: false,
22
- awaitWriteFinish: { stabilityThreshold: 200 },
23
- });
24
- this.viewsWatcher.on("add", (path) => this.pushView(path));
25
- this.viewsWatcher.on("change", (path) => this.pushView(path));
26
- }
27
- }
28
- /** Resolves when chokidar has finished its initial scan and filesystem watchers are active */
29
- waitReady() {
30
- return new Promise((resolve) => {
31
- if (!this.viewsWatcher) {
32
- this.stateWatcher?.on("ready", () => resolve());
33
- return;
34
- }
35
- let readyCount = 0;
36
- const onReady = () => {
37
- readyCount++;
38
- if (readyCount >= 2)
39
- resolve();
40
- };
41
- this.stateWatcher?.on("ready", onReady);
42
- this.viewsWatcher.on("ready", onReady);
43
- });
44
- }
45
- async stop() {
46
- await this.stateWatcher?.close();
47
- await this.viewsWatcher?.close();
48
- this.stateWatcher = null;
49
- this.viewsWatcher = null;
50
- }
51
- async pushState(filePath) {
52
- try {
53
- const content = await readFile(filePath, "utf-8");
54
- const parsed = JSON.parse(content);
55
- const name = basename(filePath, ".json");
56
- if (name === "_apps") {
57
- await this.pushApps(parsed);
58
- return;
59
- }
60
- const res = await fetch(`${this.options.relayUrl}/api/agent/state`, {
61
- method: "POST",
62
- headers: {
63
- "Content-Type": "application/json",
64
- Authorization: `Bearer ${this.options.token}`,
65
- },
66
- body: JSON.stringify({
67
- agentId: this.options.agentId,
68
- clappId: name,
69
- ...parsed,
70
- }),
71
- });
72
- if (!res.ok) {
73
- throw new Error(`Failed to push state: ${res.status}`);
74
- }
75
- }
76
- catch (err) {
77
- this.options.onError?.(err);
78
- }
79
- }
80
- async pushView(filePath) {
81
- try {
82
- const content = await readFile(filePath, "utf-8");
83
- const viewId = basename(filePath, ".md");
84
- const res = await fetch(`${this.options.relayUrl}/api/agent/views`, {
85
- method: "POST",
86
- headers: {
87
- "Content-Type": "application/json",
88
- Authorization: `Bearer ${this.options.token}`,
89
- },
90
- body: JSON.stringify({
91
- agentId: this.options.agentId,
92
- viewId,
93
- content,
94
- }),
95
- });
96
- if (!res.ok) {
97
- throw new Error(`Failed to push view: ${res.status}`);
98
- }
99
- }
100
- catch (err) {
101
- this.options.onError?.(err);
102
- }
103
- }
104
- async pushApps(apps) {
105
- const res = await fetch(`${this.options.relayUrl}/api/agent/apps`, {
106
- method: "POST",
107
- headers: {
108
- "Content-Type": "application/json",
109
- Authorization: `Bearer ${this.options.token}`,
110
- },
111
- body: JSON.stringify({
112
- agentId: this.options.agentId,
113
- apps,
114
- }),
115
- });
116
- if (!res.ok) {
117
- throw new Error(`Failed to push apps: ${res.status}`);
118
- }
119
- }
120
- }
121
- //# sourceMappingURL=state-watcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-watcher.js","sourceRoot":"","sources":["../src/state-watcher.ts"],"names":[],"mappings":"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"}