spiracha 2.1.0 → 2.2.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 (125) hide show
  1. package/AGENTS.md +27 -12
  2. package/README.md +37 -19
  3. package/apps/ui/AGENTS.md +18 -10
  4. package/apps/ui/README.md +17 -10
  5. package/apps/ui/src/components/analytics-breakdowns.tsx +106 -0
  6. package/apps/ui/src/components/antigravity-conversations-table.tsx +1 -0
  7. package/apps/ui/src/components/app-shell.tsx +45 -3
  8. package/apps/ui/src/components/data-table.tsx +17 -1
  9. package/apps/ui/src/components/delete-confirm-dialog.tsx +4 -3
  10. package/apps/ui/src/components/export-dialog.tsx +77 -62
  11. package/apps/ui/src/components/projects-table.tsx +4 -1
  12. package/apps/ui/src/components/route-error-panel.tsx +13 -0
  13. package/apps/ui/src/components/thread-goals-panel.tsx +50 -0
  14. package/apps/ui/src/components/thread-tools-panel.tsx +142 -0
  15. package/apps/ui/src/components/threads-table.tsx +4 -1
  16. package/apps/ui/src/lib/antigravity-server.ts +70 -17
  17. package/apps/ui/src/lib/antigravity-transcript-events.ts +46 -70
  18. package/apps/ui/src/lib/claude-code-server.ts +14 -4
  19. package/apps/ui/src/lib/codex-queries.ts +3 -3
  20. package/apps/ui/src/lib/codex-server.ts +3 -3
  21. package/apps/ui/src/lib/cursor-server.ts +41 -69
  22. package/apps/ui/src/lib/cursor-transcript-events.ts +11 -86
  23. package/apps/ui/src/lib/delete-batch.ts +52 -0
  24. package/apps/ui/src/lib/error-presentation.ts +43 -0
  25. package/apps/ui/src/lib/export-mutation.ts +20 -0
  26. package/apps/ui/src/lib/export-options.ts +15 -0
  27. package/apps/ui/src/lib/grok-server.ts +2 -3
  28. package/apps/ui/src/lib/kiro-server.ts +14 -2
  29. package/apps/ui/src/lib/mutation-error.ts +15 -0
  30. package/apps/ui/src/lib/opencode-server.ts +13 -2
  31. package/apps/ui/src/lib/path-utils.ts +1 -1
  32. package/apps/ui/src/lib/qoder-queries.ts +15 -0
  33. package/apps/ui/src/lib/qoder-transcript-events.ts +1 -1
  34. package/apps/ui/src/lib/route-state-reset.tsx +10 -0
  35. package/apps/ui/src/lib/settings-server.ts +33 -0
  36. package/apps/ui/src/lib/settings-store.tsx +82 -38
  37. package/apps/ui/src/lib/settings.ts +65 -0
  38. package/apps/ui/src/lib/source-session-export-server.ts +1 -1
  39. package/apps/ui/src/lib/thread-metadata.ts +22 -0
  40. package/apps/ui/src/lib/thread-transcript-stats.ts +10 -1
  41. package/apps/ui/src/lib/workspace-delete-navigation.ts +8 -0
  42. package/apps/ui/src/routeTree.gen.ts +282 -282
  43. package/apps/ui/src/routes/__root.tsx +12 -15
  44. package/apps/ui/src/routes/analytics.tsx +10 -61
  45. package/apps/ui/src/routes/antigravity-conversations.$conversationId.tsx +73 -19
  46. package/apps/ui/src/routes/antigravity.$workspaceKey.tsx +42 -60
  47. package/apps/ui/src/routes/antigravity.index.tsx +2 -2
  48. package/apps/ui/src/routes/claude-code-sessions.$sessionId.tsx +25 -11
  49. package/apps/ui/src/routes/claude-code.$workspaceKey.tsx +27 -32
  50. package/apps/ui/src/routes/claude-code.index.tsx +2 -2
  51. package/apps/ui/src/routes/codex.$project.tsx +33 -31
  52. package/apps/ui/src/routes/codex.index.tsx +5 -10
  53. package/apps/ui/src/routes/cursor-threads.$composerId.tsx +29 -16
  54. package/apps/ui/src/routes/cursor.$workspaceKey.tsx +33 -27
  55. package/apps/ui/src/routes/cursor.index.tsx +5 -2
  56. package/apps/ui/src/routes/grok-sessions.$sessionId.tsx +25 -12
  57. package/apps/ui/src/routes/grok.$workspaceKey.tsx +20 -26
  58. package/apps/ui/src/routes/grok.index.tsx +2 -2
  59. package/apps/ui/src/routes/index.tsx +2 -18
  60. package/apps/ui/src/routes/kiro-sessions.$sessionId.tsx +25 -12
  61. package/apps/ui/src/routes/kiro.$workspaceKey.tsx +27 -32
  62. package/apps/ui/src/routes/kiro.index.tsx +2 -2
  63. package/apps/ui/src/routes/opencode-sessions.$sessionId.tsx +29 -36
  64. package/apps/ui/src/routes/opencode.$workspaceKey.tsx +45 -61
  65. package/apps/ui/src/routes/opencode.index.tsx +8 -17
  66. package/apps/ui/src/routes/qoder-sessions.$sessionId.tsx +12 -11
  67. package/apps/ui/src/routes/qoder.$workspaceKey.tsx +19 -25
  68. package/apps/ui/src/routes/qoder.index.tsx +2 -2
  69. package/apps/ui/src/routes/threads.$threadId.tsx +87 -56
  70. package/apps/ui/vite.config.ts +22 -12
  71. package/bin/spiracha.ts +28 -1
  72. package/package.json +26 -17
  73. package/src/client.ts +61 -16
  74. package/src/lib/antigravity-db.ts +236 -82
  75. package/src/lib/antigravity-keychain.ts +7 -8
  76. package/src/lib/antigravity-transcript-phase.ts +47 -0
  77. package/src/lib/claude-code-db.ts +45 -19
  78. package/src/lib/codex-analytics.ts +32 -5
  79. package/src/lib/codex-browser-db.ts +540 -137
  80. package/src/lib/codex-browser-export.ts +2 -7
  81. package/src/lib/codex-browser-types.ts +21 -1
  82. package/src/lib/codex-thread-cache.ts +88 -33
  83. package/src/lib/codex-thread-parser.ts +78 -35
  84. package/src/lib/codex-thread-recovery.ts +38 -11
  85. package/src/lib/codex-transcript-renderer.ts +49 -61
  86. package/src/lib/concurrency.ts +15 -3
  87. package/src/lib/conversation-api.ts +34 -31
  88. package/src/lib/conversation-data/adapter-helpers.ts +25 -3
  89. package/src/lib/conversation-data/antigravity-adapter.ts +54 -29
  90. package/src/lib/conversation-data/claude-code-adapter.ts +32 -6
  91. package/src/lib/conversation-data/codex-adapter.ts +91 -80
  92. package/src/lib/conversation-data/cursor-adapter.ts +48 -34
  93. package/src/lib/conversation-data/grok-adapter.ts +19 -6
  94. package/src/lib/conversation-data/index.ts +29 -10
  95. package/src/lib/conversation-data/kiro-adapter.ts +18 -5
  96. package/src/lib/conversation-data/message-selector.ts +2 -5
  97. package/src/lib/conversation-data/opencode-adapter.ts +43 -15
  98. package/src/lib/conversation-data/path-match.ts +1 -13
  99. package/src/lib/conversation-data/qoder-adapter.ts +23 -18
  100. package/src/lib/conversation-zip-export.ts +20 -2
  101. package/src/lib/cursor-db.ts +34 -23
  102. package/src/lib/cursor-id.ts +17 -0
  103. package/src/lib/cursor-recovery.ts +146 -35
  104. package/src/lib/cursor-transcript-phase.ts +40 -0
  105. package/src/lib/cursor-transcript.ts +21 -5
  106. package/src/lib/grok-db.ts +76 -34
  107. package/src/lib/grok-transcript-phase.ts +11 -2
  108. package/src/lib/grok-transcript.ts +15 -2
  109. package/src/lib/kiro-db.ts +161 -68
  110. package/src/lib/kiro-transcript.ts +0 -4
  111. package/src/lib/opencode-db.ts +4 -8
  112. package/src/lib/opencode-think-tags.ts +17 -3
  113. package/src/lib/portable-path.ts +9 -0
  114. package/src/lib/qoder-acp-client.ts +11 -2
  115. package/src/lib/qoder-db.ts +51 -17
  116. package/src/lib/qoder-transcript-phase.ts +64 -0
  117. package/src/lib/qoder-transcript.ts +30 -2
  118. package/src/lib/shared.ts +51 -15
  119. package/src/lib/sqlite-error.ts +31 -5
  120. package/src/lib/transcript-load-limiter.ts +8 -3
  121. package/src/lib/ui-cache.ts +152 -17
  122. package/src/lib/ui-export-archive.ts +14 -55
  123. package/src/lib/ui-export-files.ts +75 -15
  124. package/src/lib/ui-export-zip.ts +40 -0
  125. package/apps/ui/package.json +0 -65
@@ -9,51 +9,46 @@
9
9
  // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
10
10
 
11
11
  import { Route as rootRouteImport } from './routes/__root'
12
- import { Route as SettingsRouteImport } from './routes/settings'
13
- import { Route as AnalyticsRouteImport } from './routes/analytics'
14
- import { Route as ThreadIdRouteImport } from './routes/$threadId'
15
12
  import { Route as IndexRouteImport } from './routes/index'
16
- import { Route as QoderIndexRouteImport } from './routes/qoder.index'
17
- import { Route as OpencodeIndexRouteImport } from './routes/opencode.index'
18
- import { Route as KiroIndexRouteImport } from './routes/kiro.index'
19
- import { Route as GrokIndexRouteImport } from './routes/grok.index'
20
- import { Route as CursorIndexRouteImport } from './routes/cursor.index'
21
- import { Route as CodexIndexRouteImport } from './routes/codex.index'
22
- import { Route as ClaudeCodeIndexRouteImport } from './routes/claude-code.index'
13
+ import { Route as ThreadIdRouteImport } from './routes/$threadId'
14
+ import { Route as AnalyticsRouteImport } from './routes/analytics'
15
+ import { Route as SettingsRouteImport } from './routes/settings'
16
+ import { Route as AntigravityConversationsConversationIdRouteImport } from './routes/antigravity-conversations.$conversationId'
23
17
  import { Route as AntigravityIndexRouteImport } from './routes/antigravity.index'
24
- import { Route as ThreadsThreadIdRouteImport } from './routes/threads.$threadId'
25
- import { Route as QoderWorkspaceKeyRouteImport } from './routes/qoder.$workspaceKey'
26
- import { Route as QoderSessionsSessionIdRouteImport } from './routes/qoder-sessions.$sessionId'
27
- import { Route as OpencodeWorkspaceKeyRouteImport } from './routes/opencode.$workspaceKey'
28
- import { Route as OpencodeSessionsSessionIdRouteImport } from './routes/opencode-sessions.$sessionId'
29
- import { Route as KiroWorkspaceKeyRouteImport } from './routes/kiro.$workspaceKey'
30
- import { Route as KiroSessionsSessionIdRouteImport } from './routes/kiro-sessions.$sessionId'
31
- import { Route as GrokWorkspaceKeyRouteImport } from './routes/grok.$workspaceKey'
32
- import { Route as GrokSessionsSessionIdRouteImport } from './routes/grok-sessions.$sessionId'
33
- import { Route as CursorWorkspaceKeyRouteImport } from './routes/cursor.$workspaceKey'
34
- import { Route as CursorThreadsComposerIdRouteImport } from './routes/cursor-threads.$composerId'
35
- import { Route as CodexProjectRouteImport } from './routes/codex.$project'
36
- import { Route as ClaudeCodeWorkspaceKeyRouteImport } from './routes/claude-code.$workspaceKey'
37
- import { Route as ClaudeCodeSessionsSessionIdRouteImport } from './routes/claude-code-sessions.$sessionId'
38
18
  import { Route as AntigravityWorkspaceKeyRouteImport } from './routes/antigravity.$workspaceKey'
39
- import { Route as AntigravityConversationsConversationIdRouteImport } from './routes/antigravity-conversations.$conversationId'
40
- import { Route as ApiV1SourcesRouteImport } from './routes/api.v1.sources'
41
- import { Route as ApiV1ResolveRouteImport } from './routes/api.v1.resolve'
42
- import { Route as ApiV1ConversationsRouteImport } from './routes/api.v1.conversations'
19
+ import { Route as ClaudeCodeSessionsSessionIdRouteImport } from './routes/claude-code-sessions.$sessionId'
20
+ import { Route as ClaudeCodeIndexRouteImport } from './routes/claude-code.index'
21
+ import { Route as ClaudeCodeWorkspaceKeyRouteImport } from './routes/claude-code.$workspaceKey'
22
+ import { Route as CodexIndexRouteImport } from './routes/codex.index'
23
+ import { Route as CodexProjectRouteImport } from './routes/codex.$project'
24
+ import { Route as CursorThreadsComposerIdRouteImport } from './routes/cursor-threads.$composerId'
25
+ import { Route as CursorIndexRouteImport } from './routes/cursor.index'
26
+ import { Route as CursorWorkspaceKeyRouteImport } from './routes/cursor.$workspaceKey'
27
+ import { Route as GrokSessionsSessionIdRouteImport } from './routes/grok-sessions.$sessionId'
28
+ import { Route as GrokIndexRouteImport } from './routes/grok.index'
29
+ import { Route as GrokWorkspaceKeyRouteImport } from './routes/grok.$workspaceKey'
30
+ import { Route as KiroSessionsSessionIdRouteImport } from './routes/kiro-sessions.$sessionId'
31
+ import { Route as KiroIndexRouteImport } from './routes/kiro.index'
32
+ import { Route as KiroWorkspaceKeyRouteImport } from './routes/kiro.$workspaceKey'
33
+ import { Route as OpencodeSessionsSessionIdRouteImport } from './routes/opencode-sessions.$sessionId'
34
+ import { Route as OpencodeIndexRouteImport } from './routes/opencode.index'
35
+ import { Route as OpencodeWorkspaceKeyRouteImport } from './routes/opencode.$workspaceKey'
36
+ import { Route as QoderSessionsSessionIdRouteImport } from './routes/qoder-sessions.$sessionId'
37
+ import { Route as QoderIndexRouteImport } from './routes/qoder.index'
38
+ import { Route as QoderWorkspaceKeyRouteImport } from './routes/qoder.$workspaceKey'
39
+ import { Route as ThreadsThreadIdRouteImport } from './routes/threads.$threadId'
43
40
  import { Route as ApiV1ConversationQueryRouteImport } from './routes/api.v1.conversation-query'
44
- import { Route as ApiV1ConversationsExportRouteImport } from './routes/api.v1.conversations.export'
41
+ import { Route as ApiV1ConversationsRouteImport } from './routes/api.v1.conversations'
42
+ import { Route as ApiV1ResolveRouteImport } from './routes/api.v1.resolve'
43
+ import { Route as ApiV1SourcesRouteImport } from './routes/api.v1.sources'
45
44
  import { Route as ApiV1ConversationsDeleteRouteImport } from './routes/api.v1.conversations.delete'
45
+ import { Route as ApiV1ConversationsExportRouteImport } from './routes/api.v1.conversations.export'
46
46
  import { Route as ApiV1ConversationsSourceIdRouteImport } from './routes/api.v1.conversations.$source.$id'
47
47
  import { Route as ApiV1ConversationsSourceIdExportRouteImport } from './routes/api.v1.conversations.$source.$id.export'
48
48
 
49
- const SettingsRoute = SettingsRouteImport.update({
50
- id: '/settings',
51
- path: '/settings',
52
- getParentRoute: () => rootRouteImport,
53
- } as any)
54
- const AnalyticsRoute = AnalyticsRouteImport.update({
55
- id: '/analytics',
56
- path: '/analytics',
49
+ const IndexRoute = IndexRouteImport.update({
50
+ id: '/',
51
+ path: '/',
57
52
  getParentRoute: () => rootRouteImport,
58
53
  } as any)
59
54
  const ThreadIdRoute = ThreadIdRouteImport.update({
@@ -61,34 +56,46 @@ const ThreadIdRoute = ThreadIdRouteImport.update({
61
56
  path: '/$threadId',
62
57
  getParentRoute: () => rootRouteImport,
63
58
  } as any)
64
- const IndexRoute = IndexRouteImport.update({
65
- id: '/',
66
- path: '/',
59
+ const AnalyticsRoute = AnalyticsRouteImport.update({
60
+ id: '/analytics',
61
+ path: '/analytics',
67
62
  getParentRoute: () => rootRouteImport,
68
63
  } as any)
69
- const QoderIndexRoute = QoderIndexRouteImport.update({
70
- id: '/qoder/',
71
- path: '/qoder/',
64
+ const SettingsRoute = SettingsRouteImport.update({
65
+ id: '/settings',
66
+ path: '/settings',
72
67
  getParentRoute: () => rootRouteImport,
73
68
  } as any)
74
- const OpencodeIndexRoute = OpencodeIndexRouteImport.update({
75
- id: '/opencode/',
76
- path: '/opencode/',
69
+ const AntigravityConversationsConversationIdRoute =
70
+ AntigravityConversationsConversationIdRouteImport.update({
71
+ id: '/antigravity-conversations/$conversationId',
72
+ path: '/antigravity-conversations/$conversationId',
73
+ getParentRoute: () => rootRouteImport,
74
+ } as any)
75
+ const AntigravityIndexRoute = AntigravityIndexRouteImport.update({
76
+ id: '/antigravity/',
77
+ path: '/antigravity/',
77
78
  getParentRoute: () => rootRouteImport,
78
79
  } as any)
79
- const KiroIndexRoute = KiroIndexRouteImport.update({
80
- id: '/kiro/',
81
- path: '/kiro/',
80
+ const AntigravityWorkspaceKeyRoute = AntigravityWorkspaceKeyRouteImport.update({
81
+ id: '/antigravity/$workspaceKey',
82
+ path: '/antigravity/$workspaceKey',
82
83
  getParentRoute: () => rootRouteImport,
83
84
  } as any)
84
- const GrokIndexRoute = GrokIndexRouteImport.update({
85
- id: '/grok/',
86
- path: '/grok/',
85
+ const ClaudeCodeSessionsSessionIdRoute =
86
+ ClaudeCodeSessionsSessionIdRouteImport.update({
87
+ id: '/claude-code-sessions/$sessionId',
88
+ path: '/claude-code-sessions/$sessionId',
89
+ getParentRoute: () => rootRouteImport,
90
+ } as any)
91
+ const ClaudeCodeIndexRoute = ClaudeCodeIndexRouteImport.update({
92
+ id: '/claude-code/',
93
+ path: '/claude-code/',
87
94
  getParentRoute: () => rootRouteImport,
88
95
  } as any)
89
- const CursorIndexRoute = CursorIndexRouteImport.update({
90
- id: '/cursor/',
91
- path: '/cursor/',
96
+ const ClaudeCodeWorkspaceKeyRoute = ClaudeCodeWorkspaceKeyRouteImport.update({
97
+ id: '/claude-code/$workspaceKey',
98
+ path: '/claude-code/$workspaceKey',
92
99
  getParentRoute: () => rootRouteImport,
93
100
  } as any)
94
101
  const CodexIndexRoute = CodexIndexRouteImport.update({
@@ -96,45 +103,39 @@ const CodexIndexRoute = CodexIndexRouteImport.update({
96
103
  path: '/codex/',
97
104
  getParentRoute: () => rootRouteImport,
98
105
  } as any)
99
- const ClaudeCodeIndexRoute = ClaudeCodeIndexRouteImport.update({
100
- id: '/claude-code/',
101
- path: '/claude-code/',
106
+ const CodexProjectRoute = CodexProjectRouteImport.update({
107
+ id: '/codex/$project',
108
+ path: '/codex/$project',
102
109
  getParentRoute: () => rootRouteImport,
103
110
  } as any)
104
- const AntigravityIndexRoute = AntigravityIndexRouteImport.update({
105
- id: '/antigravity/',
106
- path: '/antigravity/',
111
+ const CursorThreadsComposerIdRoute = CursorThreadsComposerIdRouteImport.update({
112
+ id: '/cursor-threads/$composerId',
113
+ path: '/cursor-threads/$composerId',
107
114
  getParentRoute: () => rootRouteImport,
108
115
  } as any)
109
- const ThreadsThreadIdRoute = ThreadsThreadIdRouteImport.update({
110
- id: '/threads/$threadId',
111
- path: '/threads/$threadId',
116
+ const CursorIndexRoute = CursorIndexRouteImport.update({
117
+ id: '/cursor/',
118
+ path: '/cursor/',
112
119
  getParentRoute: () => rootRouteImport,
113
120
  } as any)
114
- const QoderWorkspaceKeyRoute = QoderWorkspaceKeyRouteImport.update({
115
- id: '/qoder/$workspaceKey',
116
- path: '/qoder/$workspaceKey',
121
+ const CursorWorkspaceKeyRoute = CursorWorkspaceKeyRouteImport.update({
122
+ id: '/cursor/$workspaceKey',
123
+ path: '/cursor/$workspaceKey',
117
124
  getParentRoute: () => rootRouteImport,
118
125
  } as any)
119
- const QoderSessionsSessionIdRoute = QoderSessionsSessionIdRouteImport.update({
120
- id: '/qoder-sessions/$sessionId',
121
- path: '/qoder-sessions/$sessionId',
126
+ const GrokSessionsSessionIdRoute = GrokSessionsSessionIdRouteImport.update({
127
+ id: '/grok-sessions/$sessionId',
128
+ path: '/grok-sessions/$sessionId',
122
129
  getParentRoute: () => rootRouteImport,
123
130
  } as any)
124
- const OpencodeWorkspaceKeyRoute = OpencodeWorkspaceKeyRouteImport.update({
125
- id: '/opencode/$workspaceKey',
126
- path: '/opencode/$workspaceKey',
131
+ const GrokIndexRoute = GrokIndexRouteImport.update({
132
+ id: '/grok/',
133
+ path: '/grok/',
127
134
  getParentRoute: () => rootRouteImport,
128
135
  } as any)
129
- const OpencodeSessionsSessionIdRoute =
130
- OpencodeSessionsSessionIdRouteImport.update({
131
- id: '/opencode-sessions/$sessionId',
132
- path: '/opencode-sessions/$sessionId',
133
- getParentRoute: () => rootRouteImport,
134
- } as any)
135
- const KiroWorkspaceKeyRoute = KiroWorkspaceKeyRouteImport.update({
136
- id: '/kiro/$workspaceKey',
137
- path: '/kiro/$workspaceKey',
136
+ const GrokWorkspaceKeyRoute = GrokWorkspaceKeyRouteImport.update({
137
+ id: '/grok/$workspaceKey',
138
+ path: '/grok/$workspaceKey',
138
139
  getParentRoute: () => rootRouteImport,
139
140
  } as any)
140
141
  const KiroSessionsSessionIdRoute = KiroSessionsSessionIdRouteImport.update({
@@ -142,61 +143,55 @@ const KiroSessionsSessionIdRoute = KiroSessionsSessionIdRouteImport.update({
142
143
  path: '/kiro-sessions/$sessionId',
143
144
  getParentRoute: () => rootRouteImport,
144
145
  } as any)
145
- const GrokWorkspaceKeyRoute = GrokWorkspaceKeyRouteImport.update({
146
- id: '/grok/$workspaceKey',
147
- path: '/grok/$workspaceKey',
146
+ const KiroIndexRoute = KiroIndexRouteImport.update({
147
+ id: '/kiro/',
148
+ path: '/kiro/',
148
149
  getParentRoute: () => rootRouteImport,
149
150
  } as any)
150
- const GrokSessionsSessionIdRoute = GrokSessionsSessionIdRouteImport.update({
151
- id: '/grok-sessions/$sessionId',
152
- path: '/grok-sessions/$sessionId',
151
+ const KiroWorkspaceKeyRoute = KiroWorkspaceKeyRouteImport.update({
152
+ id: '/kiro/$workspaceKey',
153
+ path: '/kiro/$workspaceKey',
153
154
  getParentRoute: () => rootRouteImport,
154
155
  } as any)
155
- const CursorWorkspaceKeyRoute = CursorWorkspaceKeyRouteImport.update({
156
- id: '/cursor/$workspaceKey',
157
- path: '/cursor/$workspaceKey',
156
+ const OpencodeSessionsSessionIdRoute =
157
+ OpencodeSessionsSessionIdRouteImport.update({
158
+ id: '/opencode-sessions/$sessionId',
159
+ path: '/opencode-sessions/$sessionId',
160
+ getParentRoute: () => rootRouteImport,
161
+ } as any)
162
+ const OpencodeIndexRoute = OpencodeIndexRouteImport.update({
163
+ id: '/opencode/',
164
+ path: '/opencode/',
158
165
  getParentRoute: () => rootRouteImport,
159
166
  } as any)
160
- const CursorThreadsComposerIdRoute = CursorThreadsComposerIdRouteImport.update({
161
- id: '/cursor-threads/$composerId',
162
- path: '/cursor-threads/$composerId',
167
+ const OpencodeWorkspaceKeyRoute = OpencodeWorkspaceKeyRouteImport.update({
168
+ id: '/opencode/$workspaceKey',
169
+ path: '/opencode/$workspaceKey',
163
170
  getParentRoute: () => rootRouteImport,
164
171
  } as any)
165
- const CodexProjectRoute = CodexProjectRouteImport.update({
166
- id: '/codex/$project',
167
- path: '/codex/$project',
172
+ const QoderSessionsSessionIdRoute = QoderSessionsSessionIdRouteImport.update({
173
+ id: '/qoder-sessions/$sessionId',
174
+ path: '/qoder-sessions/$sessionId',
168
175
  getParentRoute: () => rootRouteImport,
169
176
  } as any)
170
- const ClaudeCodeWorkspaceKeyRoute = ClaudeCodeWorkspaceKeyRouteImport.update({
171
- id: '/claude-code/$workspaceKey',
172
- path: '/claude-code/$workspaceKey',
177
+ const QoderIndexRoute = QoderIndexRouteImport.update({
178
+ id: '/qoder/',
179
+ path: '/qoder/',
173
180
  getParentRoute: () => rootRouteImport,
174
181
  } as any)
175
- const ClaudeCodeSessionsSessionIdRoute =
176
- ClaudeCodeSessionsSessionIdRouteImport.update({
177
- id: '/claude-code-sessions/$sessionId',
178
- path: '/claude-code-sessions/$sessionId',
179
- getParentRoute: () => rootRouteImport,
180
- } as any)
181
- const AntigravityWorkspaceKeyRoute = AntigravityWorkspaceKeyRouteImport.update({
182
- id: '/antigravity/$workspaceKey',
183
- path: '/antigravity/$workspaceKey',
182
+ const QoderWorkspaceKeyRoute = QoderWorkspaceKeyRouteImport.update({
183
+ id: '/qoder/$workspaceKey',
184
+ path: '/qoder/$workspaceKey',
184
185
  getParentRoute: () => rootRouteImport,
185
186
  } as any)
186
- const AntigravityConversationsConversationIdRoute =
187
- AntigravityConversationsConversationIdRouteImport.update({
188
- id: '/antigravity-conversations/$conversationId',
189
- path: '/antigravity-conversations/$conversationId',
190
- getParentRoute: () => rootRouteImport,
191
- } as any)
192
- const ApiV1SourcesRoute = ApiV1SourcesRouteImport.update({
193
- id: '/api/v1/sources',
194
- path: '/api/v1/sources',
187
+ const ThreadsThreadIdRoute = ThreadsThreadIdRouteImport.update({
188
+ id: '/threads/$threadId',
189
+ path: '/threads/$threadId',
195
190
  getParentRoute: () => rootRouteImport,
196
191
  } as any)
197
- const ApiV1ResolveRoute = ApiV1ResolveRouteImport.update({
198
- id: '/api/v1/resolve',
199
- path: '/api/v1/resolve',
192
+ const ApiV1ConversationQueryRoute = ApiV1ConversationQueryRouteImport.update({
193
+ id: '/api/v1/conversation-query',
194
+ path: '/api/v1/conversation-query',
200
195
  getParentRoute: () => rootRouteImport,
201
196
  } as any)
202
197
  const ApiV1ConversationsRoute = ApiV1ConversationsRouteImport.update({
@@ -204,25 +199,30 @@ const ApiV1ConversationsRoute = ApiV1ConversationsRouteImport.update({
204
199
  path: '/api/v1/conversations',
205
200
  getParentRoute: () => rootRouteImport,
206
201
  } as any)
207
- const ApiV1ConversationQueryRoute = ApiV1ConversationQueryRouteImport.update({
208
- id: '/api/v1/conversation-query',
209
- path: '/api/v1/conversation-query',
202
+ const ApiV1ResolveRoute = ApiV1ResolveRouteImport.update({
203
+ id: '/api/v1/resolve',
204
+ path: '/api/v1/resolve',
205
+ getParentRoute: () => rootRouteImport,
206
+ } as any)
207
+ const ApiV1SourcesRoute = ApiV1SourcesRouteImport.update({
208
+ id: '/api/v1/sources',
209
+ path: '/api/v1/sources',
210
210
  getParentRoute: () => rootRouteImport,
211
211
  } as any)
212
- const ApiV1ConversationsExportRoute =
213
- ApiV1ConversationsExportRouteImport.update({
214
- id: '/export',
215
- path: '/export',
216
- getParentRoute: () => ApiV1ConversationsRoute,
217
- } as any)
218
212
  const ApiV1ConversationsDeleteRoute =
219
213
  ApiV1ConversationsDeleteRouteImport.update({
220
214
  id: '/delete',
221
215
  path: '/delete',
222
216
  getParentRoute: () => ApiV1ConversationsRoute,
223
217
  } as any)
224
- const ApiV1ConversationsSourceIdRoute =
225
- ApiV1ConversationsSourceIdRouteImport.update({
218
+ const ApiV1ConversationsExportRoute =
219
+ ApiV1ConversationsExportRouteImport.update({
220
+ id: '/export',
221
+ path: '/export',
222
+ getParentRoute: () => ApiV1ConversationsRoute,
223
+ } as any)
224
+ const ApiV1ConversationsSourceIdRoute =
225
+ ApiV1ConversationsSourceIdRouteImport.update({
226
226
  id: '/$source/$id',
227
227
  path: '/$source/$id',
228
228
  getParentRoute: () => ApiV1ConversationsRoute,
@@ -503,18 +503,11 @@ export interface RootRouteChildren {
503
503
 
504
504
  declare module '@tanstack/react-router' {
505
505
  interface FileRoutesByPath {
506
- '/settings': {
507
- id: '/settings'
508
- path: '/settings'
509
- fullPath: '/settings'
510
- preLoaderRoute: typeof SettingsRouteImport
511
- parentRoute: typeof rootRouteImport
512
- }
513
- '/analytics': {
514
- id: '/analytics'
515
- path: '/analytics'
516
- fullPath: '/analytics'
517
- preLoaderRoute: typeof AnalyticsRouteImport
506
+ '/': {
507
+ id: '/'
508
+ path: '/'
509
+ fullPath: '/'
510
+ preLoaderRoute: typeof IndexRouteImport
518
511
  parentRoute: typeof rootRouteImport
519
512
  }
520
513
  '/$threadId': {
@@ -524,53 +517,46 @@ declare module '@tanstack/react-router' {
524
517
  preLoaderRoute: typeof ThreadIdRouteImport
525
518
  parentRoute: typeof rootRouteImport
526
519
  }
527
- '/': {
528
- id: '/'
529
- path: '/'
530
- fullPath: '/'
531
- preLoaderRoute: typeof IndexRouteImport
532
- parentRoute: typeof rootRouteImport
533
- }
534
- '/qoder/': {
535
- id: '/qoder/'
536
- path: '/qoder'
537
- fullPath: '/qoder/'
538
- preLoaderRoute: typeof QoderIndexRouteImport
520
+ '/analytics': {
521
+ id: '/analytics'
522
+ path: '/analytics'
523
+ fullPath: '/analytics'
524
+ preLoaderRoute: typeof AnalyticsRouteImport
539
525
  parentRoute: typeof rootRouteImport
540
526
  }
541
- '/opencode/': {
542
- id: '/opencode/'
543
- path: '/opencode'
544
- fullPath: '/opencode/'
545
- preLoaderRoute: typeof OpencodeIndexRouteImport
527
+ '/settings': {
528
+ id: '/settings'
529
+ path: '/settings'
530
+ fullPath: '/settings'
531
+ preLoaderRoute: typeof SettingsRouteImport
546
532
  parentRoute: typeof rootRouteImport
547
533
  }
548
- '/kiro/': {
549
- id: '/kiro/'
550
- path: '/kiro'
551
- fullPath: '/kiro/'
552
- preLoaderRoute: typeof KiroIndexRouteImport
534
+ '/antigravity-conversations/$conversationId': {
535
+ id: '/antigravity-conversations/$conversationId'
536
+ path: '/antigravity-conversations/$conversationId'
537
+ fullPath: '/antigravity-conversations/$conversationId'
538
+ preLoaderRoute: typeof AntigravityConversationsConversationIdRouteImport
553
539
  parentRoute: typeof rootRouteImport
554
540
  }
555
- '/grok/': {
556
- id: '/grok/'
557
- path: '/grok'
558
- fullPath: '/grok/'
559
- preLoaderRoute: typeof GrokIndexRouteImport
541
+ '/antigravity/': {
542
+ id: '/antigravity/'
543
+ path: '/antigravity'
544
+ fullPath: '/antigravity/'
545
+ preLoaderRoute: typeof AntigravityIndexRouteImport
560
546
  parentRoute: typeof rootRouteImport
561
547
  }
562
- '/cursor/': {
563
- id: '/cursor/'
564
- path: '/cursor'
565
- fullPath: '/cursor/'
566
- preLoaderRoute: typeof CursorIndexRouteImport
548
+ '/antigravity/$workspaceKey': {
549
+ id: '/antigravity/$workspaceKey'
550
+ path: '/antigravity/$workspaceKey'
551
+ fullPath: '/antigravity/$workspaceKey'
552
+ preLoaderRoute: typeof AntigravityWorkspaceKeyRouteImport
567
553
  parentRoute: typeof rootRouteImport
568
554
  }
569
- '/codex/': {
570
- id: '/codex/'
571
- path: '/codex'
572
- fullPath: '/codex/'
573
- preLoaderRoute: typeof CodexIndexRouteImport
555
+ '/claude-code-sessions/$sessionId': {
556
+ id: '/claude-code-sessions/$sessionId'
557
+ path: '/claude-code-sessions/$sessionId'
558
+ fullPath: '/claude-code-sessions/$sessionId'
559
+ preLoaderRoute: typeof ClaudeCodeSessionsSessionIdRouteImport
574
560
  parentRoute: typeof rootRouteImport
575
561
  }
576
562
  '/claude-code/': {
@@ -580,60 +566,60 @@ declare module '@tanstack/react-router' {
580
566
  preLoaderRoute: typeof ClaudeCodeIndexRouteImport
581
567
  parentRoute: typeof rootRouteImport
582
568
  }
583
- '/antigravity/': {
584
- id: '/antigravity/'
585
- path: '/antigravity'
586
- fullPath: '/antigravity/'
587
- preLoaderRoute: typeof AntigravityIndexRouteImport
569
+ '/claude-code/$workspaceKey': {
570
+ id: '/claude-code/$workspaceKey'
571
+ path: '/claude-code/$workspaceKey'
572
+ fullPath: '/claude-code/$workspaceKey'
573
+ preLoaderRoute: typeof ClaudeCodeWorkspaceKeyRouteImport
588
574
  parentRoute: typeof rootRouteImport
589
575
  }
590
- '/threads/$threadId': {
591
- id: '/threads/$threadId'
592
- path: '/threads/$threadId'
593
- fullPath: '/threads/$threadId'
594
- preLoaderRoute: typeof ThreadsThreadIdRouteImport
576
+ '/codex/': {
577
+ id: '/codex/'
578
+ path: '/codex'
579
+ fullPath: '/codex/'
580
+ preLoaderRoute: typeof CodexIndexRouteImport
595
581
  parentRoute: typeof rootRouteImport
596
582
  }
597
- '/qoder/$workspaceKey': {
598
- id: '/qoder/$workspaceKey'
599
- path: '/qoder/$workspaceKey'
600
- fullPath: '/qoder/$workspaceKey'
601
- preLoaderRoute: typeof QoderWorkspaceKeyRouteImport
583
+ '/codex/$project': {
584
+ id: '/codex/$project'
585
+ path: '/codex/$project'
586
+ fullPath: '/codex/$project'
587
+ preLoaderRoute: typeof CodexProjectRouteImport
602
588
  parentRoute: typeof rootRouteImport
603
589
  }
604
- '/qoder-sessions/$sessionId': {
605
- id: '/qoder-sessions/$sessionId'
606
- path: '/qoder-sessions/$sessionId'
607
- fullPath: '/qoder-sessions/$sessionId'
608
- preLoaderRoute: typeof QoderSessionsSessionIdRouteImport
590
+ '/cursor-threads/$composerId': {
591
+ id: '/cursor-threads/$composerId'
592
+ path: '/cursor-threads/$composerId'
593
+ fullPath: '/cursor-threads/$composerId'
594
+ preLoaderRoute: typeof CursorThreadsComposerIdRouteImport
609
595
  parentRoute: typeof rootRouteImport
610
596
  }
611
- '/opencode/$workspaceKey': {
612
- id: '/opencode/$workspaceKey'
613
- path: '/opencode/$workspaceKey'
614
- fullPath: '/opencode/$workspaceKey'
615
- preLoaderRoute: typeof OpencodeWorkspaceKeyRouteImport
597
+ '/cursor/': {
598
+ id: '/cursor/'
599
+ path: '/cursor'
600
+ fullPath: '/cursor/'
601
+ preLoaderRoute: typeof CursorIndexRouteImport
616
602
  parentRoute: typeof rootRouteImport
617
603
  }
618
- '/opencode-sessions/$sessionId': {
619
- id: '/opencode-sessions/$sessionId'
620
- path: '/opencode-sessions/$sessionId'
621
- fullPath: '/opencode-sessions/$sessionId'
622
- preLoaderRoute: typeof OpencodeSessionsSessionIdRouteImport
604
+ '/cursor/$workspaceKey': {
605
+ id: '/cursor/$workspaceKey'
606
+ path: '/cursor/$workspaceKey'
607
+ fullPath: '/cursor/$workspaceKey'
608
+ preLoaderRoute: typeof CursorWorkspaceKeyRouteImport
623
609
  parentRoute: typeof rootRouteImport
624
610
  }
625
- '/kiro/$workspaceKey': {
626
- id: '/kiro/$workspaceKey'
627
- path: '/kiro/$workspaceKey'
628
- fullPath: '/kiro/$workspaceKey'
629
- preLoaderRoute: typeof KiroWorkspaceKeyRouteImport
611
+ '/grok-sessions/$sessionId': {
612
+ id: '/grok-sessions/$sessionId'
613
+ path: '/grok-sessions/$sessionId'
614
+ fullPath: '/grok-sessions/$sessionId'
615
+ preLoaderRoute: typeof GrokSessionsSessionIdRouteImport
630
616
  parentRoute: typeof rootRouteImport
631
617
  }
632
- '/kiro-sessions/$sessionId': {
633
- id: '/kiro-sessions/$sessionId'
634
- path: '/kiro-sessions/$sessionId'
635
- fullPath: '/kiro-sessions/$sessionId'
636
- preLoaderRoute: typeof KiroSessionsSessionIdRouteImport
618
+ '/grok/': {
619
+ id: '/grok/'
620
+ path: '/grok'
621
+ fullPath: '/grok/'
622
+ preLoaderRoute: typeof GrokIndexRouteImport
637
623
  parentRoute: typeof rootRouteImport
638
624
  }
639
625
  '/grok/$workspaceKey': {
@@ -643,74 +629,81 @@ declare module '@tanstack/react-router' {
643
629
  preLoaderRoute: typeof GrokWorkspaceKeyRouteImport
644
630
  parentRoute: typeof rootRouteImport
645
631
  }
646
- '/grok-sessions/$sessionId': {
647
- id: '/grok-sessions/$sessionId'
648
- path: '/grok-sessions/$sessionId'
649
- fullPath: '/grok-sessions/$sessionId'
650
- preLoaderRoute: typeof GrokSessionsSessionIdRouteImport
632
+ '/kiro-sessions/$sessionId': {
633
+ id: '/kiro-sessions/$sessionId'
634
+ path: '/kiro-sessions/$sessionId'
635
+ fullPath: '/kiro-sessions/$sessionId'
636
+ preLoaderRoute: typeof KiroSessionsSessionIdRouteImport
651
637
  parentRoute: typeof rootRouteImport
652
638
  }
653
- '/cursor/$workspaceKey': {
654
- id: '/cursor/$workspaceKey'
655
- path: '/cursor/$workspaceKey'
656
- fullPath: '/cursor/$workspaceKey'
657
- preLoaderRoute: typeof CursorWorkspaceKeyRouteImport
639
+ '/kiro/': {
640
+ id: '/kiro/'
641
+ path: '/kiro'
642
+ fullPath: '/kiro/'
643
+ preLoaderRoute: typeof KiroIndexRouteImport
658
644
  parentRoute: typeof rootRouteImport
659
645
  }
660
- '/cursor-threads/$composerId': {
661
- id: '/cursor-threads/$composerId'
662
- path: '/cursor-threads/$composerId'
663
- fullPath: '/cursor-threads/$composerId'
664
- preLoaderRoute: typeof CursorThreadsComposerIdRouteImport
646
+ '/kiro/$workspaceKey': {
647
+ id: '/kiro/$workspaceKey'
648
+ path: '/kiro/$workspaceKey'
649
+ fullPath: '/kiro/$workspaceKey'
650
+ preLoaderRoute: typeof KiroWorkspaceKeyRouteImport
665
651
  parentRoute: typeof rootRouteImport
666
652
  }
667
- '/codex/$project': {
668
- id: '/codex/$project'
669
- path: '/codex/$project'
670
- fullPath: '/codex/$project'
671
- preLoaderRoute: typeof CodexProjectRouteImport
653
+ '/opencode-sessions/$sessionId': {
654
+ id: '/opencode-sessions/$sessionId'
655
+ path: '/opencode-sessions/$sessionId'
656
+ fullPath: '/opencode-sessions/$sessionId'
657
+ preLoaderRoute: typeof OpencodeSessionsSessionIdRouteImport
672
658
  parentRoute: typeof rootRouteImport
673
659
  }
674
- '/claude-code/$workspaceKey': {
675
- id: '/claude-code/$workspaceKey'
676
- path: '/claude-code/$workspaceKey'
677
- fullPath: '/claude-code/$workspaceKey'
678
- preLoaderRoute: typeof ClaudeCodeWorkspaceKeyRouteImport
660
+ '/opencode/': {
661
+ id: '/opencode/'
662
+ path: '/opencode'
663
+ fullPath: '/opencode/'
664
+ preLoaderRoute: typeof OpencodeIndexRouteImport
679
665
  parentRoute: typeof rootRouteImport
680
666
  }
681
- '/claude-code-sessions/$sessionId': {
682
- id: '/claude-code-sessions/$sessionId'
683
- path: '/claude-code-sessions/$sessionId'
684
- fullPath: '/claude-code-sessions/$sessionId'
685
- preLoaderRoute: typeof ClaudeCodeSessionsSessionIdRouteImport
667
+ '/opencode/$workspaceKey': {
668
+ id: '/opencode/$workspaceKey'
669
+ path: '/opencode/$workspaceKey'
670
+ fullPath: '/opencode/$workspaceKey'
671
+ preLoaderRoute: typeof OpencodeWorkspaceKeyRouteImport
686
672
  parentRoute: typeof rootRouteImport
687
673
  }
688
- '/antigravity/$workspaceKey': {
689
- id: '/antigravity/$workspaceKey'
690
- path: '/antigravity/$workspaceKey'
691
- fullPath: '/antigravity/$workspaceKey'
692
- preLoaderRoute: typeof AntigravityWorkspaceKeyRouteImport
674
+ '/qoder-sessions/$sessionId': {
675
+ id: '/qoder-sessions/$sessionId'
676
+ path: '/qoder-sessions/$sessionId'
677
+ fullPath: '/qoder-sessions/$sessionId'
678
+ preLoaderRoute: typeof QoderSessionsSessionIdRouteImport
693
679
  parentRoute: typeof rootRouteImport
694
680
  }
695
- '/antigravity-conversations/$conversationId': {
696
- id: '/antigravity-conversations/$conversationId'
697
- path: '/antigravity-conversations/$conversationId'
698
- fullPath: '/antigravity-conversations/$conversationId'
699
- preLoaderRoute: typeof AntigravityConversationsConversationIdRouteImport
681
+ '/qoder/': {
682
+ id: '/qoder/'
683
+ path: '/qoder'
684
+ fullPath: '/qoder/'
685
+ preLoaderRoute: typeof QoderIndexRouteImport
700
686
  parentRoute: typeof rootRouteImport
701
687
  }
702
- '/api/v1/sources': {
703
- id: '/api/v1/sources'
704
- path: '/api/v1/sources'
705
- fullPath: '/api/v1/sources'
706
- preLoaderRoute: typeof ApiV1SourcesRouteImport
688
+ '/qoder/$workspaceKey': {
689
+ id: '/qoder/$workspaceKey'
690
+ path: '/qoder/$workspaceKey'
691
+ fullPath: '/qoder/$workspaceKey'
692
+ preLoaderRoute: typeof QoderWorkspaceKeyRouteImport
707
693
  parentRoute: typeof rootRouteImport
708
694
  }
709
- '/api/v1/resolve': {
710
- id: '/api/v1/resolve'
711
- path: '/api/v1/resolve'
712
- fullPath: '/api/v1/resolve'
713
- preLoaderRoute: typeof ApiV1ResolveRouteImport
695
+ '/threads/$threadId': {
696
+ id: '/threads/$threadId'
697
+ path: '/threads/$threadId'
698
+ fullPath: '/threads/$threadId'
699
+ preLoaderRoute: typeof ThreadsThreadIdRouteImport
700
+ parentRoute: typeof rootRouteImport
701
+ }
702
+ '/api/v1/conversation-query': {
703
+ id: '/api/v1/conversation-query'
704
+ path: '/api/v1/conversation-query'
705
+ fullPath: '/api/v1/conversation-query'
706
+ preLoaderRoute: typeof ApiV1ConversationQueryRouteImport
714
707
  parentRoute: typeof rootRouteImport
715
708
  }
716
709
  '/api/v1/conversations': {
@@ -720,19 +713,19 @@ declare module '@tanstack/react-router' {
720
713
  preLoaderRoute: typeof ApiV1ConversationsRouteImport
721
714
  parentRoute: typeof rootRouteImport
722
715
  }
723
- '/api/v1/conversation-query': {
724
- id: '/api/v1/conversation-query'
725
- path: '/api/v1/conversation-query'
726
- fullPath: '/api/v1/conversation-query'
727
- preLoaderRoute: typeof ApiV1ConversationQueryRouteImport
716
+ '/api/v1/resolve': {
717
+ id: '/api/v1/resolve'
718
+ path: '/api/v1/resolve'
719
+ fullPath: '/api/v1/resolve'
720
+ preLoaderRoute: typeof ApiV1ResolveRouteImport
728
721
  parentRoute: typeof rootRouteImport
729
722
  }
730
- '/api/v1/conversations/export': {
731
- id: '/api/v1/conversations/export'
732
- path: '/export'
733
- fullPath: '/api/v1/conversations/export'
734
- preLoaderRoute: typeof ApiV1ConversationsExportRouteImport
735
- parentRoute: typeof ApiV1ConversationsRoute
723
+ '/api/v1/sources': {
724
+ id: '/api/v1/sources'
725
+ path: '/api/v1/sources'
726
+ fullPath: '/api/v1/sources'
727
+ preLoaderRoute: typeof ApiV1SourcesRouteImport
728
+ parentRoute: typeof rootRouteImport
736
729
  }
737
730
  '/api/v1/conversations/delete': {
738
731
  id: '/api/v1/conversations/delete'
@@ -741,6 +734,13 @@ declare module '@tanstack/react-router' {
741
734
  preLoaderRoute: typeof ApiV1ConversationsDeleteRouteImport
742
735
  parentRoute: typeof ApiV1ConversationsRoute
743
736
  }
737
+ '/api/v1/conversations/export': {
738
+ id: '/api/v1/conversations/export'
739
+ path: '/export'
740
+ fullPath: '/api/v1/conversations/export'
741
+ preLoaderRoute: typeof ApiV1ConversationsExportRouteImport
742
+ parentRoute: typeof ApiV1ConversationsRoute
743
+ }
744
744
  '/api/v1/conversations/$source/$id': {
745
745
  id: '/api/v1/conversations/$source/$id'
746
746
  path: '/$source/$id'