@questionbase/deskfree 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +129 -0
  2. package/dist/channel.d.ts +3 -0
  3. package/dist/channel.d.ts.map +1 -0
  4. package/dist/channel.js +503 -0
  5. package/dist/channel.js.map +1 -0
  6. package/dist/client.d.ts +148 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +255 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/deliver.d.ts +22 -0
  11. package/dist/deliver.d.ts.map +1 -0
  12. package/dist/deliver.js +350 -0
  13. package/dist/deliver.js.map +1 -0
  14. package/dist/gateway.d.ts +13 -0
  15. package/dist/gateway.d.ts.map +1 -0
  16. package/dist/gateway.js +687 -0
  17. package/dist/gateway.js.map +1 -0
  18. package/dist/index.d.ts +11 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +19 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/llm-definitions.d.ts +116 -0
  23. package/dist/llm-definitions.d.ts.map +1 -0
  24. package/dist/llm-definitions.js +148 -0
  25. package/dist/llm-definitions.js.map +1 -0
  26. package/dist/offline-queue.d.ts +45 -0
  27. package/dist/offline-queue.d.ts.map +1 -0
  28. package/dist/offline-queue.js +109 -0
  29. package/dist/offline-queue.js.map +1 -0
  30. package/dist/paths.d.ts +10 -0
  31. package/dist/paths.d.ts.map +1 -0
  32. package/dist/paths.js +29 -0
  33. package/dist/paths.js.map +1 -0
  34. package/dist/runtime.d.ts +17 -0
  35. package/dist/runtime.d.ts.map +1 -0
  36. package/dist/runtime.js +24 -0
  37. package/dist/runtime.js.map +1 -0
  38. package/dist/tools.d.ts +35 -0
  39. package/dist/tools.d.ts.map +1 -0
  40. package/dist/tools.js +527 -0
  41. package/dist/tools.js.map +1 -0
  42. package/dist/types.d.ts +389 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +2 -0
  45. package/dist/types.js.map +1 -0
  46. package/dist/workspace.d.ts +18 -0
  47. package/dist/workspace.d.ts.map +1 -0
  48. package/dist/workspace.js +83 -0
  49. package/dist/workspace.js.map +1 -0
  50. package/openclaw.plugin.json +8 -0
  51. package/package.json +63 -0
  52. package/skills/deskfree/SKILL.md +271 -0
@@ -0,0 +1,389 @@
1
+ /**
2
+ * Minimal type definitions for the OpenClaw plugin API.
3
+ * These mirror the actual OpenClaw types but are defined inline
4
+ * to avoid a hard dependency on the openclaw package at build time.
5
+ * At runtime, the real types are provided by OpenClaw.
6
+ */
7
+ import type { IncomingMessage, ServerResponse } from 'node:http';
8
+ export interface AnyAgentTool {
9
+ name: string;
10
+ description: string;
11
+ parameters: Record<string, unknown>;
12
+ execute: (id: string, params: Record<string, unknown>) => Promise<{
13
+ content: Array<{
14
+ type: string;
15
+ text?: string;
16
+ }>;
17
+ }>;
18
+ optional?: boolean;
19
+ }
20
+ export interface OpenClawPluginToolContext {
21
+ config?: unknown;
22
+ messageChannel?: unknown;
23
+ agentAccountId?: string;
24
+ sandboxed?: boolean;
25
+ }
26
+ export type OpenClawPluginToolFactory = (ctx: OpenClawPluginToolContext) => AnyAgentTool | AnyAgentTool[] | null | undefined;
27
+ export interface OpenClawPluginToolOptions {
28
+ optional?: boolean;
29
+ }
30
+ export interface OpenClawConfig {
31
+ channels?: {
32
+ deskfree?: DeskFreeChannelConfig;
33
+ [key: string]: unknown;
34
+ };
35
+ plugins?: {
36
+ entries?: {
37
+ [pluginId: string]: {
38
+ enabled?: boolean;
39
+ [key: string]: unknown;
40
+ };
41
+ };
42
+ [key: string]: unknown;
43
+ };
44
+ [key: string]: unknown;
45
+ }
46
+ export interface OpenClawPluginApi {
47
+ runtime: PluginRuntime;
48
+ config: OpenClawConfig;
49
+ pluginConfig: Record<string, unknown>;
50
+ logger: PluginLogger;
51
+ registerChannel(registration: {
52
+ plugin: ChannelPlugin;
53
+ }): void;
54
+ registerHttpRoute(params: {
55
+ path: string;
56
+ handler: (req: IncomingMessage, res: ServerResponse) => Promise<void> | void;
57
+ }): void;
58
+ registerTool(tool: AnyAgentTool | OpenClawPluginToolFactory, opts?: OpenClawPluginToolOptions): void;
59
+ }
60
+ export interface PluginRuntime {
61
+ version: string;
62
+ config: {
63
+ loadConfig(): OpenClawConfig;
64
+ writeConfigFile(cfg: OpenClawConfig): Promise<void>;
65
+ };
66
+ channel: {
67
+ reply: {
68
+ finalizeInboundContext<T extends Record<string, unknown>>(ctx: T): T & FinalizedMsgContext;
69
+ dispatchReplyFromConfig(params: {
70
+ ctx: FinalizedMsgContext;
71
+ cfg: OpenClawConfig;
72
+ dispatcher: ReplyDispatcher;
73
+ replyOptions?: Record<string, unknown>;
74
+ }): Promise<{
75
+ queuedFinal: boolean;
76
+ }>;
77
+ createReplyDispatcherWithTyping(params: {
78
+ channel: string;
79
+ accountId: string;
80
+ deliver: (payload: {
81
+ text?: string;
82
+ body?: string;
83
+ }) => Promise<void>;
84
+ [key: string]: unknown;
85
+ }): {
86
+ dispatcher: ReplyDispatcher;
87
+ replyOptions: Record<string, unknown>;
88
+ markDispatchIdle: () => void;
89
+ };
90
+ };
91
+ text: {
92
+ chunkMarkdownText(text: string, limit: number): string[];
93
+ };
94
+ };
95
+ logging: {
96
+ createLogger(name: string): PluginLogger;
97
+ };
98
+ state: {
99
+ resolveStateDir(): string;
100
+ };
101
+ }
102
+ export interface FinalizedMsgContext {
103
+ Body: string;
104
+ RawBody?: string;
105
+ ChatType: string;
106
+ Provider: string;
107
+ Surface: string;
108
+ From: string;
109
+ To: string;
110
+ MessageSid: string;
111
+ Timestamp?: string;
112
+ BodyForAgent?: string;
113
+ [key: string]: unknown;
114
+ }
115
+ export interface ReplyDispatcher {
116
+ send(reply: unknown): Promise<void>;
117
+ getQueuedCounts(): unknown;
118
+ }
119
+ export interface PluginLogger {
120
+ info(msg: string): void;
121
+ warn(msg: string): void;
122
+ error(msg: string): void;
123
+ debug(msg: string): void;
124
+ }
125
+ export interface ChannelMessagingTargetResolver {
126
+ hint?: string;
127
+ looksLikeId?(raw: string, normalized?: string): boolean;
128
+ }
129
+ export interface ChannelMessagingAdapter {
130
+ normalizeTarget?(raw: string): string | undefined;
131
+ targetResolver?: ChannelMessagingTargetResolver;
132
+ }
133
+ export interface ChannelPlugin {
134
+ id: string;
135
+ meta: ChannelMeta;
136
+ capabilities: ChannelCapabilities;
137
+ config: ChannelConfigAdapter;
138
+ outbound?: ChannelOutboundAdapter;
139
+ gateway?: ChannelGatewayAdapter;
140
+ setup?: ChannelSetupAdapter;
141
+ security?: ChannelSecurityAdapter;
142
+ messaging?: ChannelMessagingAdapter;
143
+ onboarding?: ChannelOnboardingAdapter;
144
+ status?: ChannelStatusAdapter;
145
+ }
146
+ export interface ChannelMeta {
147
+ name: string;
148
+ icon?: string;
149
+ description?: string;
150
+ }
151
+ export interface ChannelCapabilities {
152
+ text: boolean;
153
+ media: boolean;
154
+ reactions: boolean;
155
+ threads: boolean;
156
+ editing: boolean;
157
+ }
158
+ export interface ChannelConfigAdapter {
159
+ listAccountIds(cfg: OpenClawConfig): string[];
160
+ resolveAccount(cfg: OpenClawConfig, accountId?: string | null): ResolvedDeskFreeAccount;
161
+ isConfigured?(account: ResolvedDeskFreeAccount, cfg?: OpenClawConfig): boolean;
162
+ isEnabled?(account: ResolvedDeskFreeAccount, cfg?: OpenClawConfig): boolean;
163
+ describeAccount?(account: ResolvedDeskFreeAccount, cfg?: OpenClawConfig): ChannelAccountSnapshot;
164
+ }
165
+ export interface ChannelOutboundAdapter {
166
+ deliveryMode: 'direct' | 'gateway' | 'hybrid';
167
+ resolveTarget?(target: string, ctx: {
168
+ cfg: OpenClawConfig;
169
+ accountId?: string | null;
170
+ }): {
171
+ to: string;
172
+ } | null;
173
+ sendText?(ctx: ChannelOutboundContext): Promise<OutboundDeliveryResult>;
174
+ textChunkLimit?: number;
175
+ chunkerMode?: 'text' | 'markdown';
176
+ }
177
+ export interface ChannelGatewayAdapter {
178
+ startAccount?(ctx: ChannelGatewayContext): Promise<unknown>;
179
+ stopAccount?(ctx: ChannelGatewayContext): Promise<void>;
180
+ logoutAccount?(ctx: ChannelLogoutContext): Promise<ChannelLogoutResult>;
181
+ }
182
+ export interface ChannelGatewayContext {
183
+ cfg: OpenClawConfig;
184
+ accountId: string;
185
+ account: ResolvedDeskFreeAccount;
186
+ runtime: PluginRuntime;
187
+ abortSignal: AbortSignal;
188
+ log?: PluginLogger;
189
+ getStatus(): ChannelAccountSnapshot;
190
+ setStatus(next: Partial<ChannelAccountSnapshot>): void;
191
+ }
192
+ export interface ChannelSetupAdapter {
193
+ applyAccountConfig(params: {
194
+ cfg: OpenClawConfig;
195
+ accountId: string;
196
+ input: Record<string, string>;
197
+ }): OpenClawConfig;
198
+ validateInput?(params: {
199
+ cfg: OpenClawConfig;
200
+ accountId: string;
201
+ input: Record<string, string>;
202
+ }): string | null;
203
+ }
204
+ export interface ChannelSecurityDmPolicy {
205
+ policy: string;
206
+ allowFrom?: Array<string | number> | null;
207
+ policyPath?: string;
208
+ allowFromPath: string;
209
+ approveHint: string;
210
+ normalizeEntry?: (raw: string) => string;
211
+ }
212
+ export interface ChannelSecurityAdapter {
213
+ resolveDmPolicy?(ctx: {
214
+ cfg: OpenClawConfig;
215
+ accountId?: string | null;
216
+ account: ResolvedDeskFreeAccount;
217
+ }): ChannelSecurityDmPolicy | null;
218
+ collectWarnings?(ctx: {
219
+ cfg: OpenClawConfig;
220
+ accountId?: string | null;
221
+ account: ResolvedDeskFreeAccount;
222
+ }): Promise<string[]> | string[];
223
+ }
224
+ export interface ChannelOutboundContext {
225
+ cfg: OpenClawConfig;
226
+ to: string;
227
+ text: string;
228
+ threadId?: string | number | null;
229
+ replyToId?: string | null;
230
+ accountId?: string | null;
231
+ }
232
+ export interface OutboundDeliveryResult {
233
+ channel: string;
234
+ success: boolean;
235
+ threadId?: string;
236
+ }
237
+ export interface ChannelAccountSnapshot {
238
+ accountId?: string;
239
+ enabled?: boolean;
240
+ configured?: boolean;
241
+ running?: boolean;
242
+ lastStartAt?: number;
243
+ lastStopAt?: number;
244
+ lastError?: string;
245
+ probe?: ChannelProbeResult;
246
+ }
247
+ export interface ResolvedDeskFreeAccount {
248
+ accountId: string;
249
+ botToken: string;
250
+ apiUrl: string;
251
+ wsUrl: string;
252
+ userId: string;
253
+ enabled: boolean;
254
+ }
255
+ export interface DeskFreeChannelConfig {
256
+ enabled?: boolean;
257
+ botToken: string;
258
+ apiUrl: string;
259
+ wsUrl: string;
260
+ userId: string;
261
+ accounts?: Record<string, Omit<DeskFreeChannelConfig, 'accounts'>>;
262
+ }
263
+ export interface ChatMessageAttachment {
264
+ name: string;
265
+ contentType: string;
266
+ size: number;
267
+ url: string;
268
+ }
269
+ export interface ChatMessage {
270
+ messageId: string;
271
+ botId: string;
272
+ humanId: string;
273
+ authorType: 'bot' | 'user';
274
+ content: string;
275
+ attachments?: ChatMessageAttachment[];
276
+ taskId?: string | null;
277
+ createdAt: string;
278
+ userName?: string | null;
279
+ botName?: string | null;
280
+ }
281
+ export interface MessagesResponse {
282
+ items: ChatMessage[];
283
+ cursor: string | null;
284
+ hasMore: boolean;
285
+ }
286
+ export interface WsTicketResponse {
287
+ ticket: string;
288
+ wsUrl: string;
289
+ expiresAt: string;
290
+ }
291
+ export interface WizardPrompter {
292
+ text(params: {
293
+ message: string;
294
+ initialValue?: string;
295
+ placeholder?: string;
296
+ validate?: (value: string) => string | undefined;
297
+ }): Promise<string>;
298
+ confirm(params: {
299
+ message: string;
300
+ initialValue?: boolean;
301
+ }): Promise<boolean>;
302
+ note(message: string, title?: string): Promise<void>;
303
+ }
304
+ export interface ChannelOnboardingStatus {
305
+ channel: string;
306
+ configured: boolean;
307
+ statusLines: string[];
308
+ selectionHint?: string;
309
+ quickstartScore?: number;
310
+ }
311
+ export interface ChannelOnboardingResult {
312
+ cfg: OpenClawConfig;
313
+ accountId?: string;
314
+ }
315
+ export interface ChannelOnboardingAdapter {
316
+ channel: string;
317
+ getStatus(ctx: {
318
+ cfg: OpenClawConfig;
319
+ }): Promise<ChannelOnboardingStatus>;
320
+ configure(ctx: {
321
+ cfg: OpenClawConfig;
322
+ runtime: PluginRuntime;
323
+ prompter: WizardPrompter;
324
+ accountOverrides: Record<string, string>;
325
+ shouldPromptAccountIds: boolean;
326
+ forceAllowFrom: boolean;
327
+ }): Promise<ChannelOnboardingResult>;
328
+ disable?(cfg: OpenClawConfig): OpenClawConfig;
329
+ }
330
+ export interface ChannelProbeResult {
331
+ ok: boolean;
332
+ error?: string;
333
+ }
334
+ export interface ChannelStatusIssue {
335
+ channel: string;
336
+ accountId: string;
337
+ kind: 'config' | 'auth' | 'runtime';
338
+ message: string;
339
+ fix?: string;
340
+ }
341
+ export interface ChannelStatusAdapter {
342
+ probeAccount?(params: {
343
+ account: ResolvedDeskFreeAccount;
344
+ timeoutMs: number;
345
+ cfg: OpenClawConfig;
346
+ }): Promise<ChannelProbeResult>;
347
+ buildAccountSnapshot?(params: {
348
+ account: ResolvedDeskFreeAccount;
349
+ cfg: OpenClawConfig;
350
+ runtime?: ChannelAccountSnapshot;
351
+ probe?: ChannelProbeResult;
352
+ }): ChannelAccountSnapshot;
353
+ collectStatusIssues?(accounts: ChannelAccountSnapshot[]): ChannelStatusIssue[];
354
+ }
355
+ export interface ChannelLogoutContext {
356
+ cfg: OpenClawConfig;
357
+ accountId: string;
358
+ account: ResolvedDeskFreeAccount;
359
+ runtime: PluginRuntime;
360
+ log?: PluginLogger;
361
+ }
362
+ export interface ChannelLogoutResult {
363
+ cleared: boolean;
364
+ loggedOut?: boolean;
365
+ [key: string]: unknown;
366
+ }
367
+ export interface WsNotification {
368
+ action: 'notify';
369
+ hint: string;
370
+ }
371
+ export interface Task {
372
+ taskId: string;
373
+ title: string;
374
+ status: 'ready_for_bot' | 'working_on_it' | 'waiting_for_human' | 'done';
375
+ instructions?: string;
376
+ createdAt: string;
377
+ updatedAt: string;
378
+ botId?: string | null;
379
+ createdById: string;
380
+ reason?: string | null;
381
+ deliverable?: string | null;
382
+ }
383
+ export interface TasksListResponse {
384
+ tasks: Task[];
385
+ }
386
+ export interface CreateTaskResponse {
387
+ task: Task;
388
+ }
389
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Recursively read all `.md` files from a workspace directory.
3
+ *
4
+ * Skips files larger than 100 KB, hidden directories, node_modules, and .git.
5
+ * Returns paths relative to `workspacePath`.
6
+ */
7
+ export declare function readWorkspaceFiles(workspacePath: string): {
8
+ path: string;
9
+ content: string;
10
+ }[];
11
+ /**
12
+ * Resolve the OpenClaw workspace path from config.
13
+ *
14
+ * Looks for `agents.defaults.workspace` in the OpenClaw config.
15
+ * Falls back to `~/.openclaw` if not found.
16
+ */
17
+ export declare function resolveWorkspacePath(cfg: Record<string, unknown>): string | null;
18
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAYA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAyCrC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,GAAG,IAAI,CAcf"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Workspace sync utilities.
3
+ *
4
+ * Reads .md files from the OpenClaw workspace directory so they can be
5
+ * uploaded to DeskFree via the workspace.sync API.
6
+ */
7
+ import { readdirSync, readFileSync, statSync } from 'node:fs';
8
+ import { join, relative } from 'node:path';
9
+ const MAX_FILE_SIZE = 100 * 1024; // 100 KB
10
+ const SKIP_DIRS = new Set(['node_modules', '.git']);
11
+ /**
12
+ * Recursively read all `.md` files from a workspace directory.
13
+ *
14
+ * Skips files larger than 100 KB, hidden directories, node_modules, and .git.
15
+ * Returns paths relative to `workspacePath`.
16
+ */
17
+ export function readWorkspaceFiles(workspacePath) {
18
+ const results = [];
19
+ function walk(dir) {
20
+ let entries;
21
+ try {
22
+ entries = readdirSync(dir);
23
+ }
24
+ catch {
25
+ return;
26
+ }
27
+ for (const entry of entries) {
28
+ // Skip hidden directories and known non-workspace dirs
29
+ if (entry.startsWith('.') || SKIP_DIRS.has(entry))
30
+ continue;
31
+ const fullPath = join(dir, entry);
32
+ let st;
33
+ try {
34
+ st = statSync(fullPath);
35
+ }
36
+ catch {
37
+ continue;
38
+ }
39
+ if (st.isDirectory()) {
40
+ walk(fullPath);
41
+ }
42
+ else if (entry.endsWith('.md') && st.size <= MAX_FILE_SIZE) {
43
+ try {
44
+ const content = readFileSync(fullPath, 'utf-8');
45
+ results.push({
46
+ path: relative(workspacePath, fullPath),
47
+ content,
48
+ });
49
+ }
50
+ catch {
51
+ // Skip unreadable files
52
+ }
53
+ }
54
+ }
55
+ }
56
+ walk(workspacePath);
57
+ return results;
58
+ }
59
+ /**
60
+ * Resolve the OpenClaw workspace path from config.
61
+ *
62
+ * Looks for `agents.defaults.workspace` in the OpenClaw config.
63
+ * Falls back to `~/.openclaw` if not found.
64
+ */
65
+ export function resolveWorkspacePath(cfg) {
66
+ try {
67
+ const agents = cfg.agents;
68
+ if (!agents)
69
+ return null;
70
+ const defaults = agents.defaults;
71
+ if (!defaults)
72
+ return null;
73
+ const workspace = defaults.workspace;
74
+ if (typeof workspace === 'string' && workspace.length > 0) {
75
+ return workspace;
76
+ }
77
+ return null;
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ }
83
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,SAAS;AAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,aAAqB;IAErB,MAAM,OAAO,GAAwC,EAAE,CAAC;IAExD,SAAS,IAAI,CAAC,GAAW;QACvB,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,uDAAuD;YACvD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS;YAE5D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClC,IAAI,EAAE,CAAC;YACP,IAAI,CAAC;gBACH,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YAED,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;gBACrB,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjB,CAAC;iBAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;gBAC7D,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAChD,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC;wBACvC,OAAO;qBACR,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,wBAAwB;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAA6C,CAAC;QACjE,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAA+C,CAAC;QACxE,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACrC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "deskfree",
3
+ "name": "DeskFree",
4
+ "description": "Channel plugin and agent tools for DeskFree project management",
5
+ "configSchema": { "type": "object", "additionalProperties": true },
6
+ "channels": ["deskfree"],
7
+ "skills": ["./skills"]
8
+ }
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@questionbase/deskfree",
3
+ "version": "0.1.0",
4
+ "description": "OpenClaw channel plugin for DeskFree — turns DeskFree into a messaging platform for OpenClaw AI agents",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "openclaw": {
15
+ "extensions": [
16
+ "./dist/index.js"
17
+ ]
18
+ },
19
+ "files": [
20
+ "dist/",
21
+ "openclaw.plugin.json",
22
+ "skills/"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc",
26
+ "dev": "tsc --watch",
27
+ "test": "vitest run",
28
+ "tsc": "tsc --noEmit",
29
+ "typecheck": "tsc --noEmit",
30
+ "prepublishOnly": "npm run build"
31
+ },
32
+ "engines": {
33
+ "node": ">=18.0.0"
34
+ },
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "git+https://github.com/questionbase/deskfree.git"
41
+ },
42
+ "peerDependencies": {
43
+ "openclaw": ">=0.1.0"
44
+ },
45
+ "dependencies": {
46
+ "@sinclair/typebox": "^0.34.0",
47
+ "ws": "^8.18.0"
48
+ },
49
+ "devDependencies": {
50
+ "@types/ws": "^8.5.0",
51
+ "typescript": "^5.9.0",
52
+ "vitest": "^4.0.18"
53
+ },
54
+ "keywords": [
55
+ "openclaw",
56
+ "deskfree",
57
+ "channel",
58
+ "plugin",
59
+ "ai",
60
+ "agent"
61
+ ],
62
+ "license": "MIT"
63
+ }