@controlflow-ai/daemon 0.1.1 → 0.1.3

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 (65) hide show
  1. package/README.md +66 -24
  2. package/package.json +16 -3
  3. package/src/agent-avatar.ts +30 -0
  4. package/src/agent-key.ts +28 -0
  5. package/src/agent-permissions.ts +359 -0
  6. package/src/agent-runtime.ts +810 -28
  7. package/src/agent-workspace.ts +183 -0
  8. package/src/app.ts +2183 -79
  9. package/src/args.ts +54 -7
  10. package/src/cli.ts +873 -14
  11. package/src/client.ts +482 -12
  12. package/src/coco.ts +9 -40
  13. package/src/codex.ts +33 -5
  14. package/src/config.ts +28 -4
  15. package/src/console.ts +460 -26
  16. package/src/daemon-client.ts +116 -3
  17. package/src/daemon.ts +958 -101
  18. package/src/db.ts +3216 -113
  19. package/src/delivery-ws.ts +269 -0
  20. package/src/format.ts +4 -1
  21. package/src/lark/app-registration.ts +141 -0
  22. package/src/lark/cli.ts +7 -137
  23. package/src/lark/credentials.ts +36 -3
  24. package/src/lark/event-router.ts +61 -5
  25. package/src/lark/inbound-events.ts +156 -3
  26. package/src/lark/server-integration.ts +659 -111
  27. package/src/lark/setup.ts +74 -5
  28. package/src/lark/ws-daemon.ts +136 -10
  29. package/src/local-api.ts +611 -14
  30. package/src/local-auth.ts +36 -3
  31. package/src/message-attachments.ts +71 -0
  32. package/src/messaging-cli.ts +741 -0
  33. package/src/messaging-status.ts +669 -0
  34. package/src/migrations/023_projects.ts +65 -0
  35. package/src/migrations/024_agents_model.ts +10 -0
  36. package/src/migrations/025_room_archive.ts +44 -0
  37. package/src/migrations/026_project_archive.ts +44 -0
  38. package/src/migrations/027_agent_permission_profiles.ts +16 -0
  39. package/src/migrations/028_lark_websocket_restart_state.ts +16 -0
  40. package/src/migrations/029_held_message_drafts.ts +32 -0
  41. package/src/migrations/030_agent_room_read_state.ts +25 -0
  42. package/src/migrations/031_room_tasks.ts +29 -0
  43. package/src/migrations/032_room_reminders.ts +29 -0
  44. package/src/migrations/033_room_saved_messages.ts +25 -0
  45. package/src/migrations/034_agent_activity_events.ts +27 -0
  46. package/src/migrations/035_agent_avatars.ts +17 -0
  47. package/src/migrations/036_project_agent_defaults.ts +21 -0
  48. package/src/migrations/037_message_attachments.ts +36 -0
  49. package/src/migrations/038_agent_activity_room_scope.ts +64 -0
  50. package/src/migrations/039_message_attachments_path.ts +34 -0
  51. package/src/migrations/040_message_attachments_file_schema.ts +80 -0
  52. package/src/migrations/041_room_system_events.ts +30 -0
  53. package/src/migrations/042_message_attachment_file_kind.ts +52 -0
  54. package/src/migrations/043_room_mode_skill_registry.ts +92 -0
  55. package/src/migrations/044_workflow_runtime.ts +69 -0
  56. package/src/migrations/045_skill_repository_ownership.ts +64 -0
  57. package/src/migrations.ts +70 -1
  58. package/src/neeko.ts +40 -4
  59. package/src/runtime-env.ts +179 -0
  60. package/src/runtime-registry.ts +83 -13
  61. package/src/server.ts +244 -4
  62. package/src/token-file.ts +13 -6
  63. package/src/types.ts +394 -0
  64. package/src/workflow-runtime.ts +275 -0
  65. package/src/web.ts +0 -904
package/src/args.ts CHANGED
@@ -4,10 +4,45 @@ export interface ParsedArgs {
4
4
  flags: Record<string, string | boolean>;
5
5
  }
6
6
 
7
+ const booleanFlags = new Set([
8
+ 'apply',
9
+ 'dry-run',
10
+ 'force',
11
+ 'help',
12
+ 'hold-if-stale',
13
+ 'interactive',
14
+ 'json',
15
+ 'infer-mentions',
16
+ 'literal-mentions',
17
+ 'no-reload',
18
+ 'no-mention-lint',
19
+ 'once',
20
+ 'rebind-lark',
21
+ 'send-anyway-if-stale',
22
+ 'show-hidden',
23
+ 'stdin',
24
+ 'unbind-lark',
25
+ 'verbose',
26
+ 'yes',
27
+ ]);
28
+
7
29
  export function parseArgs(argv = process.argv.slice(2)): ParsedArgs {
8
- const [command = 'help', ...rest] = argv;
30
+ const [first = 'help', ...tail] = argv;
31
+ const command = first.startsWith('--') ? 'help' : first;
32
+ const rest = first.startsWith('--') ? argv : tail;
9
33
  const values: string[] = [];
10
- const flags: Record<string, string | boolean> = {};
34
+ const flags: Record<string, string | boolean | string[]> = {};
35
+
36
+ const setFlag = (name: string, value: string | boolean): void => {
37
+ const existing = flags[name];
38
+ if (existing === undefined) {
39
+ flags[name] = value;
40
+ } else if (Array.isArray(existing)) {
41
+ existing.push(String(value));
42
+ } else {
43
+ flags[name] = [String(existing), String(value)];
44
+ }
45
+ };
11
46
 
12
47
  for (let index = 0; index < rest.length; index += 1) {
13
48
  const arg = rest[index];
@@ -19,28 +54,40 @@ export function parseArgs(argv = process.argv.slice(2)): ParsedArgs {
19
54
  const raw = arg.slice(2);
20
55
  const eq = raw.indexOf('=');
21
56
  if (eq >= 0) {
22
- flags[raw.slice(0, eq)] = raw.slice(eq + 1);
57
+ setFlag(raw.slice(0, eq), raw.slice(eq + 1));
58
+ continue;
59
+ }
60
+ if (booleanFlags.has(raw)) {
61
+ setFlag(raw, true);
23
62
  continue;
24
63
  }
25
64
 
26
65
  const next = rest[index + 1];
27
66
  if (next && !next.startsWith('--')) {
28
- flags[raw] = next;
67
+ setFlag(raw, next);
29
68
  index += 1;
30
69
  } else {
31
- flags[raw] = true;
70
+ setFlag(raw, true);
32
71
  }
33
72
  }
34
73
 
35
- return { command, values, flags };
74
+ return { command, values, flags: flags as Record<string, string | boolean> };
36
75
  }
37
76
 
38
77
  export function flag(flags: Record<string, string | boolean>, name: string, fallback?: string): string | undefined {
39
- const value = flags[name];
78
+ const value = flags[name] as string | boolean | string[] | undefined;
79
+ if (Array.isArray(value)) return value[value.length - 1] ?? fallback;
40
80
  if (typeof value === 'string') return value;
41
81
  return fallback;
42
82
  }
43
83
 
84
+ export function flagValues(flags: Record<string, string | boolean>, name: string): string[] {
85
+ const value = flags[name] as string | boolean | string[] | undefined;
86
+ if (Array.isArray(value)) return value.filter((entry) => entry !== 'true');
87
+ if (typeof value === 'string') return [value];
88
+ return [];
89
+ }
90
+
44
91
  export function boolFlag(flags: Record<string, string | boolean>, name: string): boolean {
45
92
  return flags[name] === true || flags[name] === 'true';
46
93
  }