soja-cli 1.4.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 (189) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +117 -0
  3. package/dist/application/chat.js +1 -0
  4. package/dist/application/filters.js +27 -0
  5. package/dist/application/import.js +1 -0
  6. package/dist/application/ports.js +1 -0
  7. package/dist/application/repository-root.js +18 -0
  8. package/dist/application/services/backup-service.js +93 -0
  9. package/dist/application/services/folder-service.js +116 -0
  10. package/dist/application/services/git-workflow-service.js +593 -0
  11. package/dist/application/services/index.js +24 -0
  12. package/dist/application/services/project-service.js +129 -0
  13. package/dist/application/services/session-service.js +52 -0
  14. package/dist/application/services/task-service.js +350 -0
  15. package/dist/application/services/update-service.js +60 -0
  16. package/dist/application/services/workspace-service.js +81 -0
  17. package/dist/application/timeline.js +83 -0
  18. package/dist/application/types.js +1 -0
  19. package/dist/application/validation.js +30 -0
  20. package/dist/bootstrap.js +91 -0
  21. package/dist/cli/commands/access.js +60 -0
  22. package/dist/cli/commands/account.js +203 -0
  23. package/dist/cli/commands/args.js +27 -0
  24. package/dist/cli/commands/backup.js +70 -0
  25. package/dist/cli/commands/chat.js +133 -0
  26. package/dist/cli/commands/dev.js +59 -0
  27. package/dist/cli/commands/folders.js +59 -0
  28. package/dist/cli/commands/git-ops.js +200 -0
  29. package/dist/cli/commands/import.js +48 -0
  30. package/dist/cli/commands/info.js +82 -0
  31. package/dist/cli/commands/project.js +108 -0
  32. package/dist/cli/commands/start.js +34 -0
  33. package/dist/cli/commands/sync.js +43 -0
  34. package/dist/cli/commands/task.js +309 -0
  35. package/dist/cli/commands/tui.js +43 -0
  36. package/dist/cli/commands/update.js +20 -0
  37. package/dist/cli/commands/workspace.js +55 -0
  38. package/dist/cli/index.js +103 -0
  39. package/dist/cli/output.js +56 -0
  40. package/dist/cli/prompt.js +28 -0
  41. package/dist/cli/runtime.js +43 -0
  42. package/dist/config/config.js +103 -0
  43. package/dist/config/credentials.js +68 -0
  44. package/dist/config/paths.js +18 -0
  45. package/dist/config/server.js +21 -0
  46. package/dist/config/version.js +7 -0
  47. package/dist/data/local/activity.js +33 -0
  48. package/dist/data/local/clock.js +1 -0
  49. package/dist/data/local/comments.js +27 -0
  50. package/dist/data/local/index.js +48 -0
  51. package/dist/data/local/projects.js +53 -0
  52. package/dist/data/local/tasks.js +104 -0
  53. package/dist/data/local/users.js +38 -0
  54. package/dist/data/local/workspaces.js +55 -0
  55. package/dist/data/remote/api-client.js +103 -0
  56. package/dist/data/remote/live.js +93 -0
  57. package/dist/data/repositories.js +1 -0
  58. package/dist/data/sync/chat.js +242 -0
  59. package/dist/data/sync/engine.js +459 -0
  60. package/dist/data/sync/importer.js +156 -0
  61. package/dist/data/sync/index.js +109 -0
  62. package/dist/data/sync/services.js +263 -0
  63. package/dist/data/sync/store.js +200 -0
  64. package/dist/database/client.js +76 -0
  65. package/dist/database/migrate.js +27 -0
  66. package/dist/database/migrations/0000_init.sql +100 -0
  67. package/dist/database/migrations/0001_git-operations.sql +19 -0
  68. package/dist/database/migrations/0002_merge-detection.sql +19 -0
  69. package/dist/database/migrations/0003_sync-replica.sql +40 -0
  70. package/dist/database/migrations/0004_chat-replica.sql +52 -0
  71. package/dist/database/migrations/0005_pr-events.sql +18 -0
  72. package/dist/database/migrations/0006_archive.sql +20 -0
  73. package/dist/database/migrations/meta/0000_snapshot.json +710 -0
  74. package/dist/database/migrations/meta/0001_snapshot.json +717 -0
  75. package/dist/database/migrations/meta/0002_snapshot.json +724 -0
  76. package/dist/database/migrations/meta/0003_snapshot.json +972 -0
  77. package/dist/database/migrations/meta/0004_snapshot.json +1168 -0
  78. package/dist/database/migrations/meta/0005_snapshot.json +1168 -0
  79. package/dist/database/migrations/meta/0006_snapshot.json +1183 -0
  80. package/dist/database/migrations/meta/_journal.json +55 -0
  81. package/dist/database/schema.js +170 -0
  82. package/dist/dev/seed.js +84 -0
  83. package/dist/domain/activity.js +22 -0
  84. package/dist/domain/chat.js +21 -0
  85. package/dist/domain/entities.js +1 -0
  86. package/dist/domain/errors.js +23 -0
  87. package/dist/domain/naming.js +33 -0
  88. package/dist/domain/task.js +140 -0
  89. package/dist/domain/workflow.js +23 -0
  90. package/dist/git/cli-git.js +363 -0
  91. package/dist/git/console.js +37 -0
  92. package/dist/git/diagnose.js +145 -0
  93. package/dist/git/merge-evidence.js +23 -0
  94. package/dist/git/releases.js +95 -0
  95. package/dist/git/types.js +16 -0
  96. package/dist/ui/App.js +71 -0
  97. package/dist/ui/Shell.js +211 -0
  98. package/dist/ui/app-state.js +213 -0
  99. package/dist/ui/branding/CompactLogo.js +8 -0
  100. package/dist/ui/branding/Logo.js +22 -0
  101. package/dist/ui/branding/Splash.js +21 -0
  102. package/dist/ui/branding/brand.js +23 -0
  103. package/dist/ui/chrome/Sidebar.js +50 -0
  104. package/dist/ui/chrome/StatusBar.js +26 -0
  105. package/dist/ui/chrome/Toast.js +11 -0
  106. package/dist/ui/chrome/TopBar.js +10 -0
  107. package/dist/ui/chrome/context.js +33 -0
  108. package/dist/ui/components/ConsoleLines.js +16 -0
  109. package/dist/ui/components/EmptyState.js +8 -0
  110. package/dist/ui/components/Labels.js +25 -0
  111. package/dist/ui/components/PullRequestLabel.js +27 -0
  112. package/dist/ui/components/TaskTable.js +41 -0
  113. package/dist/ui/components/TextField.js +11 -0
  114. package/dist/ui/components/TextInput.js +29 -0
  115. package/dist/ui/components/task-columns.js +27 -0
  116. package/dist/ui/copy.js +23 -0
  117. package/dist/ui/hooks/use-commands.js +58 -0
  118. package/dist/ui/hooks/use-flows.js +254 -0
  119. package/dist/ui/hooks/use-layout.js +36 -0
  120. package/dist/ui/hooks/use-list.js +28 -0
  121. package/dist/ui/hooks/use-measure.js +22 -0
  122. package/dist/ui/hooks/use-query.js +29 -0
  123. package/dist/ui/hooks/use-task-actions.js +450 -0
  124. package/dist/ui/hooks/use-terminal-size.js +19 -0
  125. package/dist/ui/input/KeyProvider.js +101 -0
  126. package/dist/ui/input/dispatcher.js +26 -0
  127. package/dist/ui/input/list-navigation.js +38 -0
  128. package/dist/ui/input/mouse.js +78 -0
  129. package/dist/ui/input/text-editing.js +62 -0
  130. package/dist/ui/kit/Badge.js +8 -0
  131. package/dist/ui/kit/Button.js +13 -0
  132. package/dist/ui/kit/Clickable.js +14 -0
  133. package/dist/ui/kit/Gauge.js +9 -0
  134. package/dist/ui/kit/Keycap.js +7 -0
  135. package/dist/ui/kit/Panel.js +30 -0
  136. package/dist/ui/kit/ScrollBar.js +14 -0
  137. package/dist/ui/kit/Spinner.js +9 -0
  138. package/dist/ui/kit/Tabs.js +12 -0
  139. package/dist/ui/mascot/AgentScene.js +30 -0
  140. package/dist/ui/mascot/Mascot.js +26 -0
  141. package/dist/ui/mascot/ansi.js +25 -0
  142. package/dist/ui/mascot/engine.js +146 -0
  143. package/dist/ui/mascot/index.js +6 -0
  144. package/dist/ui/mascot/palette.js +18 -0
  145. package/dist/ui/mascot/scenes/bugHunt.js +115 -0
  146. package/dist/ui/mascot/scenes/celebrate.js +76 -0
  147. package/dist/ui/mascot/scenes/cleaning.js +156 -0
  148. package/dist/ui/mascot/scenes/clockIn.js +105 -0
  149. package/dist/ui/mascot/scenes/deadline.js +125 -0
  150. package/dist/ui/mascot/scenes/empty.js +149 -0
  151. package/dist/ui/mascot/scenes/fire.js +138 -0
  152. package/dist/ui/mascot/scenes/index.js +25 -0
  153. package/dist/ui/mascot/scenes/planning.js +73 -0
  154. package/dist/ui/mascot/scenes/resting.js +90 -0
  155. package/dist/ui/mascot/scenes/syncing.js +116 -0
  156. package/dist/ui/mascot/scenes/working.js +193 -0
  157. package/dist/ui/mascot/selection.js +32 -0
  158. package/dist/ui/mascot/states.js +25 -0
  159. package/dist/ui/navigation/routes.js +17 -0
  160. package/dist/ui/overlays/CommitOverlay.js +93 -0
  161. package/dist/ui/overlays/ConfirmOverlay.js +42 -0
  162. package/dist/ui/overlays/GitLogOverlay.js +22 -0
  163. package/dist/ui/overlays/GitRunOverlay.js +94 -0
  164. package/dist/ui/overlays/NewTaskOverlay.js +117 -0
  165. package/dist/ui/overlays/OverlayFrame.js +35 -0
  166. package/dist/ui/overlays/PickerOverlay.js +72 -0
  167. package/dist/ui/overlays/PromptOverlay.js +51 -0
  168. package/dist/ui/overlays/SearchOverlay.js +49 -0
  169. package/dist/ui/overlays/options.js +29 -0
  170. package/dist/ui/overlays/types.js +1 -0
  171. package/dist/ui/screens/AccessScreen.js +91 -0
  172. package/dist/ui/screens/ChatScreen.js +450 -0
  173. package/dist/ui/screens/HelpScreen.js +99 -0
  174. package/dist/ui/screens/ProjectsScreen.js +66 -0
  175. package/dist/ui/screens/ScreenFrame.js +14 -0
  176. package/dist/ui/screens/SetupScreen.js +79 -0
  177. package/dist/ui/screens/TaskListScreen.js +152 -0
  178. package/dist/ui/screens/TaskScreen.js +193 -0
  179. package/dist/ui/screens/WelcomeScreen.js +254 -0
  180. package/dist/ui/screens/WorkspacesScreen.js +64 -0
  181. package/dist/ui/theme/detect.js +59 -0
  182. package/dist/ui/theme/theme.js +135 -0
  183. package/dist/utils/editor.js +37 -0
  184. package/dist/utils/errors.js +23 -0
  185. package/dist/utils/text.js +60 -0
  186. package/dist/utils/time.js +25 -0
  187. package/docs/NPM_PUBLISH.md +35 -0
  188. package/docs/PRIVACY.md +38 -0
  189. package/package.json +74 -0
@@ -0,0 +1,100 @@
1
+ CREATE TABLE `projects` (
2
+ `id` text PRIMARY KEY NOT NULL,
3
+ `workspace_id` text NOT NULL,
4
+ `name` text NOT NULL,
5
+ `key` text NOT NULL,
6
+ `description` text,
7
+ `repository_url` text,
8
+ `repository_path` text,
9
+ `created_at` integer NOT NULL,
10
+ `updated_at` integer NOT NULL,
11
+ FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade
12
+ );
13
+ --> statement-breakpoint
14
+ CREATE UNIQUE INDEX `projects_workspace_key` ON `projects` (`workspace_id`,`key`);--> statement-breakpoint
15
+ CREATE TABLE `task_activity` (
16
+ `id` text PRIMARY KEY NOT NULL,
17
+ `task_id` text NOT NULL,
18
+ `user_id` text,
19
+ `type` text NOT NULL,
20
+ `metadata` text NOT NULL,
21
+ `created_at` integer NOT NULL,
22
+ FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON UPDATE no action ON DELETE cascade,
23
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE set null,
24
+ CONSTRAINT "task_activity_type" CHECK(type IN ('task_created', 'task_updated', 'status_changed', 'assigned', 'unassigned', 'priority_changed', 'project_changed', 'comment_added', 'task_completed', 'task_reopened'))
25
+ );
26
+ --> statement-breakpoint
27
+ CREATE INDEX `task_activity_task` ON `task_activity` (`task_id`);--> statement-breakpoint
28
+ CREATE TABLE `task_comments` (
29
+ `id` text PRIMARY KEY NOT NULL,
30
+ `task_id` text NOT NULL,
31
+ `user_id` text NOT NULL,
32
+ `body` text NOT NULL,
33
+ `created_at` integer NOT NULL,
34
+ `updated_at` integer NOT NULL,
35
+ FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON UPDATE no action ON DELETE cascade,
36
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
37
+ );
38
+ --> statement-breakpoint
39
+ CREATE INDEX `task_comments_task` ON `task_comments` (`task_id`);--> statement-breakpoint
40
+ CREATE TABLE `tasks` (
41
+ `id` text PRIMARY KEY NOT NULL,
42
+ `number` integer NOT NULL,
43
+ `workspace_id` text NOT NULL,
44
+ `project_id` text,
45
+ `title` text NOT NULL,
46
+ `description` text,
47
+ `type` text NOT NULL,
48
+ `priority` text NOT NULL,
49
+ `status` text NOT NULL,
50
+ `assignee_id` text,
51
+ `creator_id` text NOT NULL,
52
+ `requester` text,
53
+ `branch` text,
54
+ `created_at` integer NOT NULL,
55
+ `updated_at` integer NOT NULL,
56
+ `started_at` integer,
57
+ `completed_at` integer,
58
+ FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade,
59
+ FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE set null,
60
+ FOREIGN KEY (`assignee_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE set null,
61
+ FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
62
+ CONSTRAINT "tasks_type" CHECK(type IN ('bug', 'feature', 'improvement', 'maintenance', 'infra', 'refactor', 'research', 'chore')),
63
+ CONSTRAINT "tasks_priority" CHECK(priority IN ('none', 'low', 'medium', 'high', 'urgent')),
64
+ CONSTRAINT "tasks_status" CHECK(status IN ('backlog', 'todo', 'in_progress', 'review', 'blocked', 'done', 'cancelled'))
65
+ );
66
+ --> statement-breakpoint
67
+ CREATE UNIQUE INDEX `tasks_workspace_number` ON `tasks` (`workspace_id`,`number`);--> statement-breakpoint
68
+ CREATE INDEX `tasks_workspace_status` ON `tasks` (`workspace_id`,`status`);--> statement-breakpoint
69
+ CREATE INDEX `tasks_assignee` ON `tasks` (`assignee_id`);--> statement-breakpoint
70
+ CREATE INDEX `tasks_project` ON `tasks` (`project_id`);--> statement-breakpoint
71
+ CREATE TABLE `users` (
72
+ `id` text PRIMARY KEY NOT NULL,
73
+ `username` text NOT NULL,
74
+ `display_name` text NOT NULL,
75
+ `email` text,
76
+ `created_at` integer NOT NULL,
77
+ `updated_at` integer NOT NULL
78
+ );
79
+ --> statement-breakpoint
80
+ CREATE UNIQUE INDEX `users_username_unique` ON `users` (`username`);--> statement-breakpoint
81
+ CREATE TABLE `workspace_members` (
82
+ `workspace_id` text NOT NULL,
83
+ `user_id` text NOT NULL,
84
+ `role` text NOT NULL,
85
+ PRIMARY KEY(`workspace_id`, `user_id`),
86
+ FOREIGN KEY (`workspace_id`) REFERENCES `workspaces`(`id`) ON UPDATE no action ON DELETE cascade,
87
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade,
88
+ CONSTRAINT "workspace_members_role" CHECK(role IN ('owner', 'member'))
89
+ );
90
+ --> statement-breakpoint
91
+ CREATE TABLE `workspaces` (
92
+ `id` text PRIMARY KEY NOT NULL,
93
+ `name` text NOT NULL,
94
+ `slug` text NOT NULL,
95
+ `description` text,
96
+ `created_at` integer NOT NULL,
97
+ `updated_at` integer NOT NULL
98
+ );
99
+ --> statement-breakpoint
100
+ CREATE UNIQUE INDEX `workspaces_slug_unique` ON `workspaces` (`slug`);
@@ -0,0 +1,19 @@
1
+ PRAGMA foreign_keys=OFF;--> statement-breakpoint
2
+ CREATE TABLE `__new_task_activity` (
3
+ `id` text PRIMARY KEY NOT NULL,
4
+ `task_id` text NOT NULL,
5
+ `user_id` text,
6
+ `type` text NOT NULL,
7
+ `metadata` text NOT NULL,
8
+ `created_at` integer NOT NULL,
9
+ FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON UPDATE no action ON DELETE cascade,
10
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE set null,
11
+ CONSTRAINT "task_activity_type" CHECK(type IN ('task_created', 'task_updated', 'status_changed', 'assigned', 'unassigned', 'priority_changed', 'project_changed', 'comment_added', 'task_completed', 'task_reopened', 'git_committed', 'git_merged', 'git_branch_deleted', 'git_pushed', 'pr_opened'))
12
+ );
13
+ --> statement-breakpoint
14
+ INSERT INTO `__new_task_activity`("id", "task_id", "user_id", "type", "metadata", "created_at") SELECT "id", "task_id", "user_id", "type", "metadata", "created_at" FROM `task_activity`;--> statement-breakpoint
15
+ DROP TABLE `task_activity`;--> statement-breakpoint
16
+ ALTER TABLE `__new_task_activity` RENAME TO `task_activity`;--> statement-breakpoint
17
+ PRAGMA foreign_keys=ON;--> statement-breakpoint
18
+ CREATE INDEX `task_activity_task` ON `task_activity` (`task_id`);--> statement-breakpoint
19
+ ALTER TABLE `tasks` ADD `base_branch` text;
@@ -0,0 +1,19 @@
1
+ PRAGMA foreign_keys=OFF;--> statement-breakpoint
2
+ CREATE TABLE `__new_task_activity` (
3
+ `id` text PRIMARY KEY NOT NULL,
4
+ `task_id` text NOT NULL,
5
+ `user_id` text,
6
+ `type` text NOT NULL,
7
+ `metadata` text NOT NULL,
8
+ `created_at` integer NOT NULL,
9
+ FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON UPDATE no action ON DELETE cascade,
10
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE set null,
11
+ CONSTRAINT "task_activity_type" CHECK(type IN ('task_created', 'task_updated', 'status_changed', 'assigned', 'unassigned', 'priority_changed', 'project_changed', 'comment_added', 'task_completed', 'task_reopened', 'git_committed', 'git_merged', 'git_branch_deleted', 'git_pushed', 'pr_opened', 'git_merge_detected'))
12
+ );
13
+ --> statement-breakpoint
14
+ INSERT INTO `__new_task_activity`("id", "task_id", "user_id", "type", "metadata", "created_at") SELECT "id", "task_id", "user_id", "type", "metadata", "created_at" FROM `task_activity`;--> statement-breakpoint
15
+ DROP TABLE `task_activity`;--> statement-breakpoint
16
+ ALTER TABLE `__new_task_activity` RENAME TO `task_activity`;--> statement-breakpoint
17
+ PRAGMA foreign_keys=ON;--> statement-breakpoint
18
+ CREATE INDEX `task_activity_task` ON `task_activity` (`task_id`);--> statement-breakpoint
19
+ ALTER TABLE `tasks` ADD `branch_start` text;
@@ -0,0 +1,40 @@
1
+ CREATE TABLE `sync_notices` (
2
+ `id` text PRIMARY KEY NOT NULL,
3
+ `workspace_id` text NOT NULL,
4
+ `task_id` text,
5
+ `task_ref` text NOT NULL,
6
+ `kind` text NOT NULL,
7
+ `message` text NOT NULL,
8
+ `field` text,
9
+ `overwritten` text,
10
+ `created_at` integer NOT NULL,
11
+ `dismissed_at` integer
12
+ );
13
+ --> statement-breakpoint
14
+ CREATE INDEX `sync_notices_workspace` ON `sync_notices` (`workspace_id`);--> statement-breakpoint
15
+ CREATE TABLE `sync_outbox` (
16
+ `seq` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
17
+ `op_id` text NOT NULL,
18
+ `workspace_id` text NOT NULL,
19
+ `type` text NOT NULL,
20
+ `task_id` text NOT NULL,
21
+ `payload` text NOT NULL,
22
+ `base` text,
23
+ `occurred_at` integer NOT NULL,
24
+ `attempts` integer DEFAULT 0 NOT NULL,
25
+ `last_error` text
26
+ );
27
+ --> statement-breakpoint
28
+ CREATE UNIQUE INDEX `sync_outbox_op_id_unique` ON `sync_outbox` (`op_id`);--> statement-breakpoint
29
+ CREATE INDEX `sync_outbox_workspace` ON `sync_outbox` (`workspace_id`,`seq`);--> statement-breakpoint
30
+ CREATE TABLE `sync_pending_activity` (
31
+ `activity_id` text PRIMARY KEY NOT NULL,
32
+ `op_id` text NOT NULL
33
+ );
34
+ --> statement-breakpoint
35
+ CREATE TABLE `sync_state` (
36
+ `workspace_id` text PRIMARY KEY NOT NULL,
37
+ `cursor` integer DEFAULT 0 NOT NULL,
38
+ `last_sync_at` integer,
39
+ `last_error` text
40
+ );
@@ -0,0 +1,52 @@
1
+ CREATE TABLE `chat_channels` (
2
+ `id` text PRIMARY KEY NOT NULL,
3
+ `workspace_id` text NOT NULL,
4
+ `name` text NOT NULL,
5
+ `topic` text,
6
+ `created_by` text,
7
+ `created_at` integer NOT NULL,
8
+ `updated_at` integer NOT NULL,
9
+ `archived_at` integer
10
+ );
11
+ --> statement-breakpoint
12
+ CREATE INDEX `chat_channels_workspace` ON `chat_channels` (`workspace_id`,`name`);--> statement-breakpoint
13
+ CREATE TABLE `chat_messages` (
14
+ `id` text PRIMARY KEY NOT NULL,
15
+ `seq` integer,
16
+ `workspace_id` text NOT NULL,
17
+ `channel_id` text NOT NULL,
18
+ `author_id` text,
19
+ `body` text NOT NULL,
20
+ `reply_to_id` text,
21
+ `created_at` integer NOT NULL,
22
+ `edited_at` integer,
23
+ `deleted_at` integer
24
+ );
25
+ --> statement-breakpoint
26
+ CREATE INDEX `chat_messages_channel` ON `chat_messages` (`channel_id`,`seq`);--> statement-breakpoint
27
+ CREATE INDEX `chat_messages_workspace` ON `chat_messages` (`workspace_id`);--> statement-breakpoint
28
+ CREATE TABLE `chat_reads` (
29
+ `channel_id` text PRIMARY KEY NOT NULL,
30
+ `last_read_seq` integer DEFAULT 0 NOT NULL
31
+ );
32
+ --> statement-breakpoint
33
+ PRAGMA foreign_keys=OFF;--> statement-breakpoint
34
+ CREATE TABLE `__new_sync_outbox` (
35
+ `seq` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
36
+ `op_id` text NOT NULL,
37
+ `workspace_id` text NOT NULL,
38
+ `type` text NOT NULL,
39
+ `task_id` text,
40
+ `payload` text NOT NULL,
41
+ `base` text,
42
+ `occurred_at` integer NOT NULL,
43
+ `attempts` integer DEFAULT 0 NOT NULL,
44
+ `last_error` text
45
+ );
46
+ --> statement-breakpoint
47
+ INSERT INTO `__new_sync_outbox`("seq", "op_id", "workspace_id", "type", "task_id", "payload", "base", "occurred_at", "attempts", "last_error") SELECT "seq", "op_id", "workspace_id", "type", "task_id", "payload", "base", "occurred_at", "attempts", "last_error" FROM `sync_outbox`;--> statement-breakpoint
48
+ DROP TABLE `sync_outbox`;--> statement-breakpoint
49
+ ALTER TABLE `__new_sync_outbox` RENAME TO `sync_outbox`;--> statement-breakpoint
50
+ PRAGMA foreign_keys=ON;--> statement-breakpoint
51
+ CREATE UNIQUE INDEX `sync_outbox_op_id_unique` ON `sync_outbox` (`op_id`);--> statement-breakpoint
52
+ CREATE INDEX `sync_outbox_workspace` ON `sync_outbox` (`workspace_id`,`seq`);
@@ -0,0 +1,18 @@
1
+ PRAGMA foreign_keys=OFF;--> statement-breakpoint
2
+ CREATE TABLE `__new_task_activity` (
3
+ `id` text PRIMARY KEY NOT NULL,
4
+ `task_id` text NOT NULL,
5
+ `user_id` text,
6
+ `type` text NOT NULL,
7
+ `metadata` text NOT NULL,
8
+ `created_at` integer NOT NULL,
9
+ FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON UPDATE no action ON DELETE cascade,
10
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE set null,
11
+ CONSTRAINT "task_activity_type" CHECK(type IN ('task_created', 'task_updated', 'status_changed', 'assigned', 'unassigned', 'priority_changed', 'project_changed', 'comment_added', 'task_completed', 'task_reopened', 'git_committed', 'git_merged', 'git_branch_deleted', 'git_pushed', 'pr_opened', 'git_merge_detected', 'pr_merged', 'pr_checks_failed'))
12
+ );
13
+ --> statement-breakpoint
14
+ INSERT INTO `__new_task_activity`("id", "task_id", "user_id", "type", "metadata", "created_at") SELECT "id", "task_id", "user_id", "type", "metadata", "created_at" FROM `task_activity`;--> statement-breakpoint
15
+ DROP TABLE `task_activity`;--> statement-breakpoint
16
+ ALTER TABLE `__new_task_activity` RENAME TO `task_activity`;--> statement-breakpoint
17
+ PRAGMA foreign_keys=ON;--> statement-breakpoint
18
+ CREATE INDEX `task_activity_task` ON `task_activity` (`task_id`);
@@ -0,0 +1,20 @@
1
+ PRAGMA foreign_keys=OFF;--> statement-breakpoint
2
+ CREATE TABLE `__new_task_activity` (
3
+ `id` text PRIMARY KEY NOT NULL,
4
+ `task_id` text NOT NULL,
5
+ `user_id` text,
6
+ `type` text NOT NULL,
7
+ `metadata` text NOT NULL,
8
+ `created_at` integer NOT NULL,
9
+ FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON UPDATE no action ON DELETE cascade,
10
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE set null,
11
+ CONSTRAINT "task_activity_type" CHECK(type IN ('task_created', 'task_updated', 'status_changed', 'assigned', 'unassigned', 'priority_changed', 'project_changed', 'comment_added', 'task_completed', 'task_reopened', 'git_committed', 'git_merged', 'git_branch_deleted', 'git_pushed', 'pr_opened', 'git_merge_detected', 'pr_merged', 'pr_checks_failed', 'task_archived', 'task_unarchived'))
12
+ );
13
+ --> statement-breakpoint
14
+ INSERT INTO `__new_task_activity`("id", "task_id", "user_id", "type", "metadata", "created_at") SELECT "id", "task_id", "user_id", "type", "metadata", "created_at" FROM `task_activity`;--> statement-breakpoint
15
+ DROP TABLE `task_activity`;--> statement-breakpoint
16
+ ALTER TABLE `__new_task_activity` RENAME TO `task_activity`;--> statement-breakpoint
17
+ PRAGMA foreign_keys=ON;--> statement-breakpoint
18
+ CREATE INDEX `task_activity_task` ON `task_activity` (`task_id`);--> statement-breakpoint
19
+ ALTER TABLE `tasks` ADD `archived_at` integer;--> statement-breakpoint
20
+ ALTER TABLE `workspaces` ADD `last_deleted_number` integer DEFAULT 0 NOT NULL;