@questionbase/deskfree 0.3.0-alpha.22 → 0.3.0-alpha.23

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/README.md CHANGED
@@ -15,31 +15,30 @@ Agents can pick up tasks, post progress updates, mark work as done or blocked, m
15
15
  │ deskfree_state Inbound messages from humans │
16
16
  │ deskfree_start_task Outbound replies from agent │
17
17
  │ deskfree_complete_task Real-time notifications │
18
- deskfree_suggest_tasks
19
- deskfree_create_activity
20
- deskfree_update_activity
21
- deskfree_classify_task
22
- deskfree_learn_from_task
23
- deskfree_update_deliverable
24
- │ deskfree_send_message (+ task suggestions) │
18
+ deskfree_send_message
19
+ deskfree_propose
20
+ deskfree_update_file
21
+ deskfree_create_file
22
+ deskfree_claim_evaluation
23
+ deskfree_submit_evaluation
25
24
  └──────────┬───────────────────────────┬───────────────────────────┘
26
25
  │ │
27
26
  ▼ ▼
28
27
  ┌──────────────────────────────────────────────────────────────────┐
29
28
  │ DeskFree Backend │
30
29
  │ │
31
- │ Tasks Activities Messages WebSocket Gateway│
32
- │ ────── ────────── ──────── ─────────────── │
33
- │ State machine Knowledge 1:1 bot↔user DynamoDB-backed │
34
- │ RLS-scoped containers Threaded by Thin notifs │
35
- │ Atomic claims Learn loop task + polling fallback│
30
+ │ Tasks Files Messages WebSocket Gateway│
31
+ │ ────── ───── ──────── ─────────────── │
32
+ │ State machine Persistent 1:1 bot↔user DynamoDB-backed │
33
+ │ RLS-scoped documents Threaded by Thin notifs │
34
+ │ Atomic claims Versioned task + polling fallback│
36
35
  └──────────────────────────────────────────────────────────────────┘
37
36
  ```
38
37
 
39
38
  The plugin registers three things with OpenClaw:
40
39
 
41
40
  1. **Channel** — bidirectional messaging between DeskFree users and the agent
42
- 2. **Tools** — 10 task, activity, and messaging tools the agent can call
41
+ 2. **Tools** — 9 task, file, and messaging tools the agent can call
43
42
  3. **Skill** — workflow knowledge that teaches the agent how to use the tools correctly
44
43
 
45
44
  ## Install
@@ -132,7 +131,7 @@ See `skills/deskfree/references/tools.md` for the full tool reference.
132
131
 
133
132
  **Inbound (human → agent):** WebSocket sends thin notification (`hint: "message.new"`) → plugin fetches full message via HTTP. Fallback: polls every 30s if WebSocket is unavailable.
134
133
 
135
- **Outbound (agent → human):** Messages chunked at 2000 chars `POST messages.send` per chunk.
134
+ **Outbound (agent → human):** Supports streaming (progressive deltas via `streamChunk`, finalized via `updateMessage`) and non-streaming (direct `POST messages.send`). Text chunked at 2000 chars when streaming is not active.
136
135
 
137
136
  ### WebSocket Gateway
138
137
 
package/dist/index.d.ts CHANGED
@@ -460,6 +460,13 @@ interface TaskWithContext extends Task {
460
460
  instructions: string;
461
461
  messages: TaskMessage[];
462
462
  fileContext: FileContext | null;
463
+ skillContext?: Array<{
464
+ skillId: string;
465
+ name: string;
466
+ displayName: string;
467
+ instructions: string;
468
+ criticalSection: string;
469
+ }>;
463
470
  }
464
471
  interface CompleteTaskInput {
465
472
  taskId: string;
@@ -566,6 +573,17 @@ declare class DeskFreeClient {
566
573
  messageId: string;
567
574
  content: string;
568
575
  }>;
576
+ /**
577
+ * Send a streaming chunk (delta only) for an in-progress message.
578
+ * Broadcasts delta over WS and stores full content in DynamoDB for crash recovery.
579
+ */
580
+ streamChunk(input: {
581
+ messageId: string;
582
+ delta: string;
583
+ fullContent: string;
584
+ }): Promise<{
585
+ messageId: string;
586
+ }>;
569
587
  /**
570
588
  * Send a text message to a DeskFree conversation.
571
589
  *
@@ -588,6 +606,7 @@ declare class DeskFreeClient {
588
606
  /** Fetch paginated message history for a conversation. */
589
607
  listMessages(input: {
590
608
  userId?: string;
609
+ taskId?: string;
591
610
  cursor?: string | null;
592
611
  limit?: number;
593
612
  }): Promise<MessagesResponse>;
@@ -596,6 +615,7 @@ declare class DeskFreeClient {
596
615
  /** Claim a task so the bot can begin working on it. Returns enriched context. */
597
616
  claimTask(input: {
598
617
  taskId: string;
618
+ runnerId?: string;
599
619
  }): Promise<TaskWithContext>;
600
620
  /** Fetch a lightweight task summary by ID. Read-only, no side effects. */
601
621
  getTask(input: {
@@ -672,24 +692,35 @@ declare class DeskFreeClient {
672
692
  completeTask(input: CompleteTaskInput): Promise<Task & {
673
693
  outcome: 'done' | 'blocked';
674
694
  }>;
675
- /** Suggest tasks via the dedicated bot/tasks.suggest endpoint. */
676
- suggestTasksDedicated(input: {
677
- suggestions: Array<{
678
- title: string;
695
+ /** Reopen a completed/human task back to bot status for further work. */
696
+ reopenTask(input: {
697
+ taskId: string;
698
+ reason?: string;
699
+ }): Promise<Task>;
700
+ /** Propose a plan — creates a proposal message with plan metadata. No DB rows until human approves. */
701
+ proposePlan(input: {
702
+ tasks: Array<{
703
+ title?: string;
679
704
  instructions?: string;
705
+ substeps?: string[];
706
+ file?: {
707
+ type: 'existing';
708
+ existingId: string;
709
+ } | {
710
+ type: 'new';
711
+ name: string;
712
+ description?: string;
713
+ };
680
714
  estimatedTokens?: number;
681
- initiativeId?: string;
682
715
  scheduledFor?: string;
683
716
  }>;
684
- parentTaskId?: string;
685
- initiativeSuggestions?: Array<{
717
+ initiative?: string | {
686
718
  title: string;
687
719
  content: string;
688
- taskRefs?: number[];
689
- }>;
720
+ };
721
+ context?: string;
690
722
  }): Promise<{
691
- suggestionIds: string[];
692
- initiativeSuggestionIds?: string[];
723
+ messageId: string;
693
724
  }>;
694
725
  /**
695
726
  * Claim a pending evaluation for a task. Atomically sets isWorking=true where