@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@questionbase/deskfree",
3
- "version": "0.3.0-alpha.36",
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.2.21"
43
+ "openclaw": "2026.3.1"
44
44
  },
45
45
  "devDependencies": {
46
- "@sinclair/typebox": "^0.34.0",
47
- "@types/ws": "^8.5.0",
46
+ "@sinclair/typebox": "^0.34.48",
47
+ "@types/ws": "^8.18.1",
48
48
  "tsup": "8.5.1",
49
- "typescript": "^5.9.0",
49
+ "typescript": "^5.9.3",
50
50
  "vitest": "^4.0.18",
51
- "ws": "^8.18.0"
51
+ "ws": "^8.19.0"
52
52
  },
53
53
  "keywords": [
54
54
  "openclaw",
@@ -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 → completereview),
7
+ handling task lifecycle (start → work → askcomplete),
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 update_knowledge
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` outcome `done` = work complete (summary required)
39
- - `complete_task` outcome `blocked` = need human input (send message FIRST explaining why)
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. Update knowledgedeskfree_update_knowledge (orchestrator only, after human approves)
50
+ 7. Complete taskdeskfree_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 `deskfree_update_knowledge`. Unique to each bot-human relationship.
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 (6)
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 (7 — sub-agents)
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. `bot` tasks with no active sub-agent? → spawn sub-agents to claim them
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 WHY, then complete with outcome "blocked"
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`, try a different task. |
172
- | 409 on `deskfree_start_task` | Race condition | Call `deskfree_state`, pick a different 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
- pendingactive → review → done
7
-
8
- pending (if human sends task back via conversation)
6
+ open → done
9
7
  ```
10
8
 
11
- - **pending** — Approved, waiting for bot to claim
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 — all tasks, recently done tasks, active initiatives, files, and current ways of working.
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 is created until the human reviews and approves in a modal. One initiative per call — make multiple calls for multiple initiatives.
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 initiative ID (e.g. `"INI_123"`) or `{title, content}` to create new |
40
- | `context` | string | No | Why this plan is being proposed — helps the human understand the reasoning |
41
- | `tasks` | array | Yes | Array of tasks to propose (1-20) |
42
- | `tasks[].title` | string | Yes | Task title — short, action-oriented (max 200 chars) |
43
- | `tasks[].instructions` | string | No | Rich markdown instructions (bold, lists, inline code — no # headers). Include: what to do, steps, what done looks like, constraints. |
44
- | `tasks[].estimatedTokens` | number | No | Estimated token cost for completing this task |
45
- | `tasks[].scheduledFor` | string | No | ISO-8601 date for when this task should become available |
46
- | `tasks[].file` | object | No | `{existingId}` to link existing file, or `{name, description}` to create new on approval |
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 in the task thread (progress update, question, status report).
61
+ Send a message.
56
62
 
57
63
  | Parameter | Type | Required | Description |
58
64
  |-----------|------|----------|-------------|
59
- | `content` | string | Yes | Message content |
60
- | `taskId` | string | No | Task UUID (optional — auto-threaded to active task if omitted) |
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
- ### `deskfree_reopen_task`
65
- Reopen a completed or review task back to pending.
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 to reopen |
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
- ### `deskfree_update_knowledge`
74
- Update global ways of working or initiative content. Orchestrator-only — single writer to avoid version conflicts.
82
+ ### `deskfree_reopen_task`
83
+ Reopen a done task.
75
84
 
76
85
  | Parameter | Type | Required | Description |
77
86
  |-----------|------|----------|-------------|
78
- | `globalWoW` | string | No | Updated global ways of working content (full replacement) |
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 a `pending` task → moves to `active`. Returns full context.
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:** Full task context — instructions, message history, `parentContext` (title, summary, instructions of the parent task if this was suggested by another task), and `fileContext` (file content + metadata if the task has a linked file).
100
+ **Returns:** Task context — instructions, message history, parentContext, fileContext.
95
101
 
96
- **Errors:** 404 if task not `pending` or doesn't exist. 409 if already claimed.
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. Build incrementally as you work.
107
+ Update a file's content (full replacement).
102
108
 
103
109
  | Parameter | Type | Required | Description |
104
110
  |-----------|------|----------|-------------|
105
- | `fileId` | string | Yes | File ID to update |
106
- | `content` | string | Yes | Full file content — markdown or HTML (replaces previous version) |
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
- Finish a task.
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
- | `outcome` | string | Yes | `review` (submit for human review), `done` (complete), `blocked` (need human input), or `cancelled` |
120
- | `summary` | string | No | Brief summary of what was accomplished — **required for outcome `done`** (max 2000 chars) |
121
- | `learnings` | string | No | What was learned during this task integrated into WoW when task reaches `done` |
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 — see above. Workers can propose follow-up tasks.)*
145
+ *(Same as orchestrator — workers can propose follow-up tasks)*