@questionbase/deskfree 0.3.0-alpha.36 → 0.3.0-alpha.38
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/index.d.ts +16 -20
- package/dist/index.js +614 -599
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/skills/deskfree/SKILL.md +12 -13
- package/skills/deskfree/references/tools.md +65 -51
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@questionbase/deskfree",
|
|
3
|
-
"version": "0.3.0-alpha.
|
|
3
|
+
"version": "0.3.0-alpha.38",
|
|
4
4
|
"description": "OpenClaw channel plugin for DeskFree — turns DeskFree into a messaging platform for OpenClaw AI agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -40,15 +40,15 @@
|
|
|
40
40
|
"url": "git+https://github.com/questionbase/deskfree.git"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"openclaw": "2026.
|
|
43
|
+
"openclaw": "2026.3.1"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@sinclair/typebox": "^0.34.
|
|
47
|
-
"@types/ws": "^8.
|
|
46
|
+
"@sinclair/typebox": "^0.34.48",
|
|
47
|
+
"@types/ws": "^8.18.1",
|
|
48
48
|
"tsup": "8.5.1",
|
|
49
|
-
"typescript": "^5.9.
|
|
49
|
+
"typescript": "^5.9.3",
|
|
50
50
|
"vitest": "^4.0.18",
|
|
51
|
-
"ws": "^8.
|
|
51
|
+
"ws": "^8.19.0"
|
|
52
52
|
},
|
|
53
53
|
"keywords": [
|
|
54
54
|
"openclaw",
|
package/skills/deskfree/SKILL.md
CHANGED
|
@@ -4,7 +4,7 @@ description: >
|
|
|
4
4
|
DeskFree task management and human-AI collaboration workflows.
|
|
5
5
|
Use when: creating tasks, managing work items, updating files,
|
|
6
6
|
communicating with humans through DeskFree, checking workspace state,
|
|
7
|
-
handling task lifecycle (start → work →
|
|
7
|
+
handling task lifecycle (start → work → ask → complete),
|
|
8
8
|
updating ways of working, managing initiatives.
|
|
9
9
|
Do NOT use for: general project management advice without DeskFree tools,
|
|
10
10
|
OpenClaw configuration or gateway setup, non-DeskFree platforms (Jira, Asana, etc.),
|
|
@@ -30,13 +30,13 @@ deskfree_propose → [human approves in modal] → bot → [start_task] → bot
|
|
|
30
30
|
│
|
|
31
31
|
[approve]
|
|
32
32
|
↓
|
|
33
|
-
done
|
|
33
|
+
done (with optional learnings + follow-ups)
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
- Proposals live as metadata on a single message — **NO database rows until human approves**
|
|
37
37
|
- Human reviews everything in a modal: can edit titles, instructions, toggle skills
|
|
38
|
-
- `complete_task`
|
|
39
|
-
- `
|
|
38
|
+
- `complete_task` = task is done. Optionally include learnings (WoW/initiative updates) and follow-up proposals.
|
|
39
|
+
- Use `send_message(type: 'ask')` when you need human input — don't complete, just ask.
|
|
40
40
|
|
|
41
41
|
### The Work Loop
|
|
42
42
|
|
|
@@ -47,7 +47,7 @@ deskfree_propose → [human approves in modal] → bot → [start_task] → bot
|
|
|
47
47
|
4. Load skill → deskfree_read_skill_section (if skills were attached)
|
|
48
48
|
5. Do the work → deskfree_update_file
|
|
49
49
|
6. Complete → deskfree_complete_task
|
|
50
|
-
7.
|
|
50
|
+
7. Complete task → deskfree_complete_task (marks done, optionally updates WoW/initiative + proposes follow-ups)
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
### Three Rules
|
|
@@ -64,7 +64,7 @@ deskfree_propose → [human approves in modal] → bot → [start_task] → bot
|
|
|
64
64
|
|
|
65
65
|
**Initiatives** = human aspirations ("where are we going"). Named after outcomes, not activities. Descriptions are 2-3 aspirational sentences — not project plans.
|
|
66
66
|
|
|
67
|
-
**Ways of Working (WoW)** = learned preferences ("how WE work together"). Evolves from completed tasks via `
|
|
67
|
+
**Ways of Working (WoW)** = learned preferences ("how WE work together"). Evolves from completed tasks via the `learnings` param on `deskfree_complete_task`. Unique to each bot-human relationship.
|
|
68
68
|
|
|
69
69
|
When proposing tasks:
|
|
70
70
|
- Check WoW for established patterns before proposing
|
|
@@ -108,7 +108,7 @@ Keep instructions concise. Brief a contractor: what to do, what done looks like.
|
|
|
108
108
|
|
|
109
109
|
## Tools Reference
|
|
110
110
|
|
|
111
|
-
### Orchestrator Tools (
|
|
111
|
+
### Orchestrator Tools (5)
|
|
112
112
|
|
|
113
113
|
| Tool | What it does |
|
|
114
114
|
|---|---|
|
|
@@ -116,10 +116,9 @@ Keep instructions concise. Brief a contractor: what to do, what done looks like.
|
|
|
116
116
|
| `deskfree_propose` | Propose a plan for human approval — one initiative per call |
|
|
117
117
|
| `deskfree_schedule_task` | Defer or activate a task (pass ISO datetime or null) |
|
|
118
118
|
| `deskfree_reopen_task` | Reopen a completed task back to bot queue |
|
|
119
|
-
| `deskfree_update_knowledge` | Update WoW and/or initiative content after task completion |
|
|
120
119
|
| `deskfree_send_message` | Send a message to the human (1-3 sentences, no walls of text) |
|
|
121
120
|
|
|
122
|
-
### Worker Tools (
|
|
121
|
+
### Worker Tools (6 — sub-agents)
|
|
123
122
|
|
|
124
123
|
| Tool | What it does |
|
|
125
124
|
|---|---|
|
|
@@ -137,7 +136,7 @@ Keep instructions concise. Brief a contractor: what to do, what done looks like.
|
|
|
137
136
|
### Heartbeat / Proactive Check
|
|
138
137
|
|
|
139
138
|
1. `deskfree_state` → get workspace snapshot
|
|
140
|
-
2. `
|
|
139
|
+
2. `open` tasks with `awaiting: bot` and no active sub-agent? → spawn sub-agents to claim them
|
|
141
140
|
3. Anything else needing attention? → act on it
|
|
142
141
|
|
|
143
142
|
### Human Gives You Work
|
|
@@ -159,7 +158,7 @@ Sub-agent: deskfree_start_task → deskfree_update_file → deskfree_complete
|
|
|
159
158
|
|
|
160
159
|
- One task per sub-agent
|
|
161
160
|
- Workers keep messages concise — senior colleague giving a status update, not a report
|
|
162
|
-
- If blocked: send message explaining
|
|
161
|
+
- If blocked: send an `ask` message explaining what you need. Sub-agent terminates after ask.
|
|
163
162
|
|
|
164
163
|
---
|
|
165
164
|
|
|
@@ -168,8 +167,8 @@ Sub-agent: deskfree_start_task → deskfree_update_file → deskfree_complete
|
|
|
168
167
|
| Error | Cause | Action |
|
|
169
168
|
|---|---|---|
|
|
170
169
|
| `deskfree_state` returns empty | No tasks exist | Create if appropriate. Do NOT retry in a loop. |
|
|
171
|
-
| 404 on `deskfree_start_task` | Task not available | Call `deskfree_state`,
|
|
172
|
-
| 409 on `deskfree_start_task` |
|
|
170
|
+
| 404 on `deskfree_start_task` | Task not available | STOP. Do not retry. Call `deskfree_state`, pick a different task. |
|
|
171
|
+
| 409 on `deskfree_start_task` | Already claimed | STOP. Do not retry the same taskId. Call `deskfree_state`. |
|
|
173
172
|
| 401 Unauthorized | Token invalid | Check config. Do not retry. |
|
|
174
173
|
|
|
175
174
|
### Recovery
|
|
@@ -3,122 +3,136 @@
|
|
|
3
3
|
## Task Status Model
|
|
4
4
|
|
|
5
5
|
```
|
|
6
|
-
|
|
7
|
-
↓
|
|
8
|
-
pending (if human sends task back via conversation)
|
|
6
|
+
open → done
|
|
9
7
|
```
|
|
10
8
|
|
|
11
|
-
- **
|
|
12
|
-
- **active** — Bot claimed, runner working
|
|
13
|
-
- **review** — Bot submitted deliverable, waiting for human feedback
|
|
9
|
+
- **open** — Task exists, work can happen
|
|
14
10
|
- **done** — Completed
|
|
15
11
|
|
|
12
|
+
### Awaiting (whose turn)
|
|
13
|
+
|
|
14
|
+
| `awaiting` | Meaning |
|
|
15
|
+
|------------|---------|
|
|
16
|
+
| `bot` | Bot should pick this up |
|
|
17
|
+
| `human` | Human needs to respond |
|
|
18
|
+
| `null` | Idle, no one actively needed |
|
|
19
|
+
|
|
20
|
+
Derived from: `ask` messages set `awaiting: human`, bot claiming sets `awaiting: bot`.
|
|
21
|
+
|
|
22
|
+
### Message Types
|
|
23
|
+
|
|
24
|
+
| Type | Surfaces to main | Thread rendering | Sub-agent |
|
|
25
|
+
|------|-----------------|------------------|-----------|
|
|
26
|
+
| `notify` | No | Muted (50% opacity), collapsible | Keeps working |
|
|
27
|
+
| `ask` | Yes | Full prominence | Terminates after sending |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
16
31
|
## Orchestrator Tools (5)
|
|
17
32
|
|
|
18
33
|
### `deskfree_state`
|
|
19
|
-
Get full workspace snapshot
|
|
34
|
+
Get full workspace snapshot.
|
|
20
35
|
|
|
21
36
|
| Parameter | Type | Required | Description |
|
|
22
37
|
|-----------|------|----------|-------------|
|
|
23
38
|
| *(none)* | — | — | — |
|
|
24
39
|
|
|
25
|
-
**Returns:**
|
|
26
|
-
- `tasks` — active tasks array (includes `fileId` and `fileName` if linked to a file)
|
|
27
|
-
- `recentlyDone` — recently completed tasks (status=done)
|
|
28
|
-
- `waysOfWorking` — global ways of working (string or null)
|
|
29
|
-
- `initiatives` — active initiatives with `{id, title, status, content, contentVersion, taskCount, activeTaskCount}`
|
|
30
|
-
- `files` — all bot files with `{fileId, name, description, contentFormat, version, updatedAt}`
|
|
40
|
+
**Returns:** tasks, recentlyDone, waysOfWorking, initiatives, files.
|
|
31
41
|
|
|
32
42
|
---
|
|
33
43
|
|
|
34
44
|
### `deskfree_propose`
|
|
35
|
-
Propose a plan for human approval. Nothing
|
|
45
|
+
Propose a plan for human approval. Nothing created until human approves.
|
|
36
46
|
|
|
37
47
|
| Parameter | Type | Required | Description |
|
|
38
48
|
|-----------|------|----------|-------------|
|
|
39
|
-
| `initiative` | string \| object | No | Existing
|
|
40
|
-
| `context` | string | No | Why this plan is being proposed
|
|
41
|
-
| `tasks` | array | Yes | Array of tasks
|
|
42
|
-
| `tasks[].title` | string | Yes |
|
|
43
|
-
| `tasks[].instructions` | string | No | Rich markdown
|
|
44
|
-
| `tasks[].estimatedTokens` | number | No | Estimated token cost
|
|
45
|
-
| `tasks[].scheduledFor` | string | No | ISO-8601 date
|
|
46
|
-
| `tasks[].file` | object | No | `{existingId}`
|
|
47
|
-
|
|
48
|
-
**Note:** The `substeps` field is deprecated and ignored. Put all steps in the `instructions` field as markdown instead.
|
|
49
|
-
|
|
50
|
-
**Returns:** Confirmation that proposal was attached to the message.
|
|
49
|
+
| `initiative` | string \| object | No | Existing ID or `{title, content}` for new |
|
|
50
|
+
| `context` | string | No | Why this plan is being proposed |
|
|
51
|
+
| `tasks` | array | Yes | Array of tasks (1-20) |
|
|
52
|
+
| `tasks[].title` | string | Yes | Short, action-oriented (max 200 chars) |
|
|
53
|
+
| `tasks[].instructions` | string | No | Rich markdown (bold, lists, inline code — no # headers) |
|
|
54
|
+
| `tasks[].estimatedTokens` | number | No | Estimated token cost |
|
|
55
|
+
| `tasks[].scheduledFor` | string | No | ISO-8601 date |
|
|
56
|
+
| `tasks[].file` | object | No | `{existingId}` or `{name, description}` |
|
|
51
57
|
|
|
52
58
|
---
|
|
53
59
|
|
|
54
60
|
### `deskfree_send_message`
|
|
55
|
-
Send a message
|
|
61
|
+
Send a message.
|
|
56
62
|
|
|
57
63
|
| Parameter | Type | Required | Description |
|
|
58
64
|
|-----------|------|----------|-------------|
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
65
|
+
| `type` | string | Yes | `notify` (progress, quiet) or `ask` (needs attention, surfaces to main) |
|
|
66
|
+
| `content` | string | Yes | Message content (1-3 sentences) |
|
|
67
|
+
| `taskId` | string | No | Task UUID |
|
|
61
68
|
|
|
62
69
|
---
|
|
63
70
|
|
|
64
|
-
### `
|
|
65
|
-
|
|
71
|
+
### `deskfree_schedule_task`
|
|
72
|
+
Defer or activate a task.
|
|
66
73
|
|
|
67
74
|
| Parameter | Type | Required | Description |
|
|
68
75
|
|-----------|------|----------|-------------|
|
|
69
|
-
| `taskId` | string | Yes | Task UUID
|
|
76
|
+
| `taskId` | string | Yes | Task UUID |
|
|
77
|
+
| `scheduledFor` | string | No | ISO-8601 datetime to defer to, or omit/null to activate immediately |
|
|
78
|
+
| `reason` | string | Yes | Why the task is being scheduled/activated |
|
|
70
79
|
|
|
71
80
|
---
|
|
72
81
|
|
|
73
|
-
### `
|
|
74
|
-
|
|
82
|
+
### `deskfree_reopen_task`
|
|
83
|
+
Reopen a done task.
|
|
75
84
|
|
|
76
85
|
| Parameter | Type | Required | Description |
|
|
77
86
|
|-----------|------|----------|-------------|
|
|
78
|
-
| `
|
|
79
|
-
| `initiativeId` | string | No | Initiative to update |
|
|
80
|
-
| `initiativeContent` | string | No | Updated initiative content (required if initiativeId provided) |
|
|
81
|
-
| `reasoning` | string | Yes | Explanation of why knowledge is being updated |
|
|
87
|
+
| `taskId` | string | Yes | Task UUID |
|
|
82
88
|
|
|
83
89
|
---
|
|
84
90
|
|
|
85
91
|
## Worker Tools (5 — sub-agents only)
|
|
86
92
|
|
|
87
93
|
### `deskfree_start_task`
|
|
88
|
-
Claim
|
|
94
|
+
Claim an `open` task. Returns full context.
|
|
89
95
|
|
|
90
96
|
| Parameter | Type | Required | Description |
|
|
91
97
|
|-----------|------|----------|-------------|
|
|
92
98
|
| `taskId` | string | Yes | Task UUID to claim |
|
|
93
99
|
|
|
94
|
-
**Returns:**
|
|
100
|
+
**Returns:** Task context — instructions, message history, parentContext, fileContext.
|
|
95
101
|
|
|
96
|
-
**Errors:** 404 if
|
|
102
|
+
**Errors:** 404 if not `open` or doesn't exist. 409 if already claimed.
|
|
97
103
|
|
|
98
104
|
---
|
|
99
105
|
|
|
100
106
|
### `deskfree_update_file`
|
|
101
|
-
Update a file's content
|
|
107
|
+
Update a file's content (full replacement).
|
|
102
108
|
|
|
103
109
|
| Parameter | Type | Required | Description |
|
|
104
110
|
|-----------|------|----------|-------------|
|
|
105
|
-
| `fileId` | string | Yes | File ID
|
|
106
|
-
| `content` | string | Yes | Full
|
|
111
|
+
| `fileId` | string | Yes | File ID |
|
|
112
|
+
| `content` | string | Yes | Full content (replaces previous) |
|
|
107
113
|
| `contentFormat` | string | No | `markdown` (default) or `html` |
|
|
108
114
|
|
|
109
|
-
**Note:** Each call replaces the entire file content. Always send the complete current version.
|
|
110
|
-
|
|
111
115
|
---
|
|
112
116
|
|
|
113
117
|
### `deskfree_complete_task`
|
|
114
|
-
|
|
118
|
+
Mark task as done. Optionally update WoW/initiative and propose follow-ups — all in one atomic call.
|
|
115
119
|
|
|
116
120
|
| Parameter | Type | Required | Description |
|
|
117
121
|
|-----------|------|----------|-------------|
|
|
118
122
|
| `taskId` | string | Yes | Task UUID |
|
|
119
|
-
| `
|
|
120
|
-
| `
|
|
121
|
-
| `learnings` | string | No |
|
|
123
|
+
| `learnings` | object | No | Knowledge updates (see below) |
|
|
124
|
+
| `learnings.reasoning` | string | Yes (if learnings) | Why these updates matter |
|
|
125
|
+
| `learnings.globalWoW` | string | No | Updated Ways of Working content (full replacement) |
|
|
126
|
+
|
|
127
|
+
| `learnings.initiativeContent` | string | No | Updated initiative content (full replacement) |
|
|
128
|
+
| `followUps` | array | No | Follow-up tasks to propose (max 10) |
|
|
129
|
+
| `followUps[].title` | string | Yes | Task title (max 200 chars) |
|
|
130
|
+
| `followUps[].instructions` | string | No | Task instructions |
|
|
131
|
+
|
|
132
|
+
**Side effects:**
|
|
133
|
+
- WoW update → inserts new version, creates "📝 Updated Ways of Working" message in thread (viewable as diff)
|
|
134
|
+
- Initiative update → stores old + new content, creates "📝 Updated [Initiative]" message (viewable as diff)
|
|
135
|
+
- Follow-ups → creates proposal for human approval
|
|
122
136
|
|
|
123
137
|
---
|
|
124
138
|
|
|
@@ -128,4 +142,4 @@ Finish a task.
|
|
|
128
142
|
---
|
|
129
143
|
|
|
130
144
|
### `deskfree_propose`
|
|
131
|
-
*(Same as orchestrator —
|
|
145
|
+
*(Same as orchestrator — workers can propose follow-up tasks)*
|