@swarmclawai/swarmclaw 1.2.8 → 1.3.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 (214) hide show
  1. package/README.md +39 -6
  2. package/package.json +2 -2
  3. package/src/app/agents/[id]/page.tsx +1 -18
  4. package/src/app/api/activity/route.ts +9 -23
  5. package/src/app/api/agents/route.ts +17 -1
  6. package/src/app/api/agents/thread-route.test.ts +0 -1
  7. package/src/app/api/approvals/route.test.ts +6 -22
  8. package/src/app/api/approvals/route.ts +13 -5
  9. package/src/app/api/connectors/route.ts +2 -2
  10. package/src/app/api/credentials/[id]/route.ts +2 -0
  11. package/src/app/api/credentials/route.ts +4 -1
  12. package/src/app/api/goals/[id]/route.ts +28 -0
  13. package/src/app/api/goals/route.ts +33 -0
  14. package/src/app/api/portability/export/route.ts +8 -0
  15. package/src/app/api/portability/import/route.test.ts +80 -0
  16. package/src/app/api/portability/import/route.ts +28 -0
  17. package/src/app/api/protocols/templates/[id]/route.ts +2 -1
  18. package/src/app/api/protocols/templates/route.ts +2 -1
  19. package/src/app/api/settings/route.ts +13 -2
  20. package/src/app/api/wallets/[id]/route.ts +15 -157
  21. package/src/app/api/wallets/generate/route.ts +22 -0
  22. package/src/app/api/wallets/route.test.ts +147 -0
  23. package/src/app/api/wallets/route.ts +13 -95
  24. package/src/app/autonomy/page.tsx +2 -57
  25. package/src/app/home/page.tsx +3 -0
  26. package/src/app/protocols/page.tsx +2 -21
  27. package/src/app/settings/page.tsx +0 -9
  28. package/src/app/wallets/page.tsx +105 -5
  29. package/src/cli/index.js +32 -33
  30. package/src/cli/spec.js +26 -27
  31. package/src/components/agents/agent-sheet.tsx +2 -40
  32. package/src/components/agents/inspector-panel.tsx +0 -83
  33. package/src/components/chat/chat-card.tsx +0 -31
  34. package/src/components/chat/message-bubble.tsx +1 -108
  35. package/src/components/connectors/connector-sheet.tsx +25 -1
  36. package/src/components/layout/sidebar-rail.tsx +6 -10
  37. package/src/components/projects/project-detail.tsx +3 -35
  38. package/src/components/projects/tabs/overview-tab.tsx +3 -59
  39. package/src/components/projects/tabs/work-tab.tsx +7 -77
  40. package/src/components/protocols/structured-session-launcher.tsx +1 -22
  41. package/src/components/shared/connector-platform-icon.tsx +1 -0
  42. package/src/components/tasks/task-card.tsx +4 -34
  43. package/src/components/tasks/task-sheet.tsx +6 -36
  44. package/src/components/wallets/wallet-list.tsx +150 -0
  45. package/src/lib/app/navigation.test.ts +0 -13
  46. package/src/lib/app/navigation.ts +2 -7
  47. package/src/lib/app/view-constants.ts +14 -19
  48. package/src/lib/server/activity/activity-log.ts +16 -1
  49. package/src/lib/server/agents/agent-service.ts +24 -11
  50. package/src/lib/server/agents/agent-thread-session.ts +0 -1
  51. package/src/lib/server/agents/delegation-advisory.test.ts +0 -1
  52. package/src/lib/server/agents/delegation-jobs.test.ts +0 -69
  53. package/src/lib/server/agents/delegation-jobs.ts +0 -25
  54. package/src/lib/server/agents/main-agent-loop.ts +1 -49
  55. package/src/lib/server/agents/subagent-runtime.ts +0 -1
  56. package/src/lib/server/approval-match.ts +14 -85
  57. package/src/lib/server/approvals/approval-hooks.ts +81 -0
  58. package/src/lib/server/approvals.test.ts +6 -6
  59. package/src/lib/server/approvals.ts +11 -6
  60. package/src/lib/server/autonomy/supervisor-reflection.test.ts +0 -1
  61. package/src/lib/server/builtin-extensions.ts +0 -2
  62. package/src/lib/server/capability-router.test.ts +0 -2
  63. package/src/lib/server/chat-execution/chat-execution-tool-events.test.ts +14 -14
  64. package/src/lib/server/chat-execution/chat-execution-types.ts +0 -2
  65. package/src/lib/server/chat-execution/chat-execution-utils.ts +0 -2
  66. package/src/lib/server/chat-execution/chat-streaming-utils.ts +2 -30
  67. package/src/lib/server/chat-execution/chat-turn-finalization.ts +1 -36
  68. package/src/lib/server/chat-execution/chat-turn-preparation.ts +2 -22
  69. package/src/lib/server/chat-execution/iteration-event-handler.ts +0 -24
  70. package/src/lib/server/chat-execution/message-classifier.test.ts +0 -45
  71. package/src/lib/server/chat-execution/message-classifier.ts +1 -16
  72. package/src/lib/server/chat-execution/prompt-builder.test.ts +0 -1
  73. package/src/lib/server/chat-execution/prompt-builder.ts +0 -30
  74. package/src/lib/server/chat-execution/prompt-sections.ts +0 -1
  75. package/src/lib/server/chat-execution/situational-awareness.test.ts +2 -73
  76. package/src/lib/server/chat-execution/situational-awareness.ts +4 -38
  77. package/src/lib/server/chat-execution/stream-agent-chat.test.ts +8 -123
  78. package/src/lib/server/chat-execution/stream-agent-chat.ts +1 -5
  79. package/src/lib/server/chat-execution/stream-continuation.test.ts +4 -52
  80. package/src/lib/server/chat-execution/stream-continuation.ts +6 -48
  81. package/src/lib/server/chatrooms/session-mailbox.ts +0 -10
  82. package/src/lib/server/chats/chat-session-service.ts +3 -5
  83. package/src/lib/server/connectors/connector-inbound.ts +0 -1
  84. package/src/lib/server/connectors/connector-lifecycle.ts +19 -3
  85. package/src/lib/server/connectors/connector-service.ts +39 -9
  86. package/src/lib/server/connectors/swarmdock-bidding.ts +74 -0
  87. package/src/lib/server/connectors/swarmdock-payloads.test.ts +85 -0
  88. package/src/lib/server/connectors/swarmdock-secret.test.ts +128 -0
  89. package/src/lib/server/connectors/swarmdock-secret.ts +152 -0
  90. package/src/lib/server/connectors/swarmdock-tasks.ts +127 -0
  91. package/src/lib/server/connectors/swarmdock.ts +285 -0
  92. package/src/lib/server/execution-brief.test.ts +2 -25
  93. package/src/lib/server/execution-brief.ts +30 -35
  94. package/src/lib/server/execution-engine/task-attempt.ts +0 -1
  95. package/src/lib/server/goals/goal-repository.ts +19 -0
  96. package/src/lib/server/goals/goal-service.ts +143 -0
  97. package/src/lib/server/persistence/storage-context.ts +0 -5
  98. package/src/lib/server/portability/export.ts +109 -0
  99. package/src/lib/server/portability/import.ts +159 -0
  100. package/src/lib/server/protocols/protocol-normalization.ts +0 -4
  101. package/src/lib/server/protocols/protocol-queries.ts +0 -6
  102. package/src/lib/server/protocols/protocol-run-lifecycle.ts +4 -32
  103. package/src/lib/server/protocols/protocol-service.ts +0 -1
  104. package/src/lib/server/protocols/protocol-step-helpers.ts +0 -4
  105. package/src/lib/server/protocols/protocol-step-processors.ts +0 -6
  106. package/src/lib/server/protocols/protocol-swarm.ts +0 -2
  107. package/src/lib/server/protocols/protocol-types.ts +0 -2
  108. package/src/lib/server/provider-health.ts +0 -9
  109. package/src/lib/server/runtime/daemon-state/core.ts +0 -9
  110. package/src/lib/server/runtime/daemon-state.test.ts +0 -35
  111. package/src/lib/server/runtime/heartbeat-service.ts +3 -23
  112. package/src/lib/server/runtime/queue/core.ts +11 -33
  113. package/src/lib/server/runtime/runtime-storage-write-paths.test.ts +6 -6
  114. package/src/lib/server/runtime/scheduler.ts +0 -13
  115. package/src/lib/server/runtime/session-run-manager/drain.ts +0 -24
  116. package/src/lib/server/runtime/session-run-manager/enqueue.ts +0 -1
  117. package/src/lib/server/runtime/session-run-manager/queries.ts +0 -1
  118. package/src/lib/server/runtime/session-run-manager/recovery.ts +0 -1
  119. package/src/lib/server/runtime/session-run-manager.test.ts +0 -28
  120. package/src/lib/server/session-tools/crud.ts +0 -14
  121. package/src/lib/server/session-tools/delegate.ts +0 -4
  122. package/src/lib/server/session-tools/index.ts +0 -4
  123. package/src/lib/server/session-tools/team-context.ts +0 -3
  124. package/src/lib/server/storage-normalization.ts +13 -0
  125. package/src/lib/server/storage.ts +75 -45
  126. package/src/lib/server/tasks/task-checkout.ts +59 -0
  127. package/src/lib/server/tasks/task-lifecycle.ts +2 -0
  128. package/src/lib/server/tasks/task-route-service.ts +4 -26
  129. package/src/lib/server/tasks/task-service.ts +0 -7
  130. package/src/lib/server/tool-aliases.ts +0 -1
  131. package/src/lib/server/tool-capability-policy-advanced.test.ts +4 -4
  132. package/src/lib/server/tool-capability-policy.ts +0 -2
  133. package/src/lib/server/tool-planning.ts +0 -12
  134. package/src/lib/server/universal-tool-access.ts +0 -1
  135. package/src/lib/server/usage/cost-rollup.ts +124 -0
  136. package/src/lib/server/usage/usage-repository.ts +6 -0
  137. package/src/lib/server/wallets/wallet-crypto.ts +33 -0
  138. package/src/lib/server/wallets/wallet-repository.ts +24 -0
  139. package/src/lib/server/wallets/wallet-service.ts +119 -0
  140. package/src/lib/server/working-state/extraction.ts +8 -42
  141. package/src/lib/server/working-state/normalization.ts +10 -103
  142. package/src/lib/server/working-state/service.ts +12 -21
  143. package/src/lib/strip-internal-metadata.test.ts +1 -1
  144. package/src/lib/strip-internal-metadata.ts +1 -1
  145. package/src/lib/tool-definitions.ts +0 -1
  146. package/src/lib/validation/schemas.ts +36 -32
  147. package/src/lib/validation/server-schemas.ts +35 -0
  148. package/src/stores/slices/data-slice.ts +5 -1
  149. package/src/stores/slices/ui-slice.ts +0 -4
  150. package/src/types/agent.ts +10 -84
  151. package/src/types/app-settings.ts +6 -2
  152. package/src/types/approval.ts +3 -2
  153. package/src/types/connector.ts +1 -0
  154. package/src/types/goal.ts +30 -0
  155. package/src/types/index.ts +2 -1
  156. package/src/types/message.ts +0 -1
  157. package/src/types/misc.ts +2 -4
  158. package/src/types/protocol.ts +0 -2
  159. package/src/types/run.ts +0 -3
  160. package/src/types/session.ts +1 -51
  161. package/src/types/swarmdock.ts +29 -0
  162. package/src/types/task.ts +9 -3
  163. package/src/types/working-state.ts +2 -9
  164. package/src/views/settings/section-runtime-loop.tsx +0 -14
  165. package/src/app/api/canvas/[sessionId]/route.ts +0 -35
  166. package/src/app/api/missions/[id]/actions/route.ts +0 -31
  167. package/src/app/api/missions/[id]/events/route.ts +0 -14
  168. package/src/app/api/missions/[id]/route.ts +0 -10
  169. package/src/app/api/missions/route.test.ts +0 -244
  170. package/src/app/api/missions/route.ts +0 -57
  171. package/src/app/api/wallets/[id]/approve/route.ts +0 -79
  172. package/src/app/api/wallets/[id]/balance-history/route.ts +0 -18
  173. package/src/app/api/wallets/[id]/send/route.ts +0 -113
  174. package/src/app/api/wallets/[id]/transactions/route.ts +0 -18
  175. package/src/app/missions/[id]/page.tsx +0 -3
  176. package/src/app/missions/page.tsx +0 -685
  177. package/src/components/canvas/canvas-panel.tsx +0 -267
  178. package/src/components/wallets/wallet-approval-dialog.tsx +0 -107
  179. package/src/components/wallets/wallet-panel.tsx +0 -1010
  180. package/src/components/wallets/wallet-section.tsx +0 -260
  181. package/src/features/missions/queries.ts +0 -23
  182. package/src/lib/canvas-content.test.ts +0 -360
  183. package/src/lib/canvas-content.ts +0 -198
  184. package/src/lib/server/canvas-content.test.ts +0 -32
  185. package/src/lib/server/canvas-content.ts +0 -6
  186. package/src/lib/server/ethereum.ts +0 -591
  187. package/src/lib/server/evm-swap.ts +0 -476
  188. package/src/lib/server/missions/mission-intent.test.ts +0 -63
  189. package/src/lib/server/missions/mission-intent.ts +0 -569
  190. package/src/lib/server/missions/mission-repository.ts +0 -74
  191. package/src/lib/server/missions/mission-service/actions.ts +0 -6
  192. package/src/lib/server/missions/mission-service/bindings.ts +0 -9
  193. package/src/lib/server/missions/mission-service/context.ts +0 -4
  194. package/src/lib/server/missions/mission-service/core.ts +0 -2271
  195. package/src/lib/server/missions/mission-service/queries.ts +0 -12
  196. package/src/lib/server/missions/mission-service/recovery.ts +0 -5
  197. package/src/lib/server/missions/mission-service/ticks.ts +0 -9
  198. package/src/lib/server/missions/mission-service.test.ts +0 -888
  199. package/src/lib/server/missions/mission-service.ts +0 -6
  200. package/src/lib/server/session-tools/canvas.ts +0 -105
  201. package/src/lib/server/session-tools/wallet-tool.test.ts +0 -150
  202. package/src/lib/server/session-tools/wallet.ts +0 -1287
  203. package/src/lib/server/solana.ts +0 -327
  204. package/src/lib/server/wallet/wallet-execution.test.ts +0 -198
  205. package/src/lib/server/wallet/wallet-portfolio.test.ts +0 -98
  206. package/src/lib/server/wallet/wallet-portfolio.ts +0 -772
  207. package/src/lib/server/wallet/wallet-service.test.ts +0 -81
  208. package/src/lib/server/wallet/wallet-service.ts +0 -225
  209. package/src/lib/wallet/wallet-transactions.test.ts +0 -75
  210. package/src/lib/wallet/wallet-transactions.ts +0 -43
  211. package/src/lib/wallet/wallet.test.ts +0 -333
  212. package/src/lib/wallet/wallet.ts +0 -183
  213. package/src/types/mission.ts +0 -185
  214. package/src/views/settings/section-wallets.tsx +0 -35
@@ -1,198 +0,0 @@
1
- import type {
2
- CanvasActionItem,
3
- CanvasBlock,
4
- CanvasCardItem,
5
- CanvasContent,
6
- CanvasDocument,
7
- CanvasMetricItem,
8
- CanvasTableData,
9
- } from '@/types'
10
-
11
- function asObject(value: unknown): Record<string, unknown> | null {
12
- if (!value || typeof value !== 'object' || Array.isArray(value)) return null
13
- return value as Record<string, unknown>
14
- }
15
-
16
- function asTrimmedString(value: unknown, max = 8000): string | null {
17
- if (typeof value === 'number' || typeof value === 'boolean') return String(value).slice(0, max)
18
- if (typeof value !== 'string') return null
19
- const trimmed = value.trim()
20
- return trimmed ? trimmed.slice(0, max) : null
21
- }
22
-
23
- function asStringArray(value: unknown): string[] {
24
- if (!Array.isArray(value)) return []
25
- return value
26
- .map((entry) => asTrimmedString(entry, 240))
27
- .filter((entry): entry is string => Boolean(entry))
28
- }
29
-
30
- function normalizeMetricItems(value: unknown): CanvasMetricItem[] {
31
- if (!Array.isArray(value)) return []
32
- const items: CanvasMetricItem[] = []
33
- for (const entry of value) {
34
- const row = asObject(entry)
35
- if (!row) continue
36
- const label = asTrimmedString(row.label, 120)
37
- const metricValue = asTrimmedString(row.value, 120)
38
- if (!label || !metricValue) continue
39
- items.push({
40
- label,
41
- value: metricValue,
42
- detail: asTrimmedString(row.detail, 240) || undefined,
43
- tone: row.tone === 'positive' || row.tone === 'negative' || row.tone === 'warning' ? row.tone : 'default',
44
- })
45
- if (items.length >= 24) break
46
- }
47
- return items
48
- }
49
-
50
- function normalizeCardItems(value: unknown): CanvasCardItem[] {
51
- if (!Array.isArray(value)) return []
52
- const items: CanvasCardItem[] = []
53
- for (const entry of value) {
54
- const row = asObject(entry)
55
- if (!row) continue
56
- const title = asTrimmedString(row.title, 180)
57
- if (!title) continue
58
- items.push({
59
- title,
60
- body: asTrimmedString(row.body, 1600) || undefined,
61
- meta: asTrimmedString(row.meta, 200) || undefined,
62
- tone: row.tone === 'positive' || row.tone === 'negative' || row.tone === 'warning' ? row.tone : 'default',
63
- })
64
- if (items.length >= 24) break
65
- }
66
- return items
67
- }
68
-
69
- function normalizeActionItems(value: unknown): CanvasActionItem[] {
70
- if (!Array.isArray(value)) return []
71
- const items: CanvasActionItem[] = []
72
- for (const entry of value) {
73
- const row = asObject(entry)
74
- if (!row) continue
75
- const label = asTrimmedString(row.label, 120)
76
- if (!label) continue
77
- items.push({
78
- label,
79
- href: asTrimmedString(row.href, 1000) || undefined,
80
- note: asTrimmedString(row.note, 240) || undefined,
81
- intent: row.intent === 'primary' || row.intent === 'success' || row.intent === 'danger' ? row.intent : 'secondary',
82
- })
83
- if (items.length >= 24) break
84
- }
85
- return items
86
- }
87
-
88
- function normalizeTable(value: unknown): CanvasTableData | null {
89
- const row = asObject(value)
90
- if (!row) return null
91
- const columns = asStringArray(row.columns).slice(0, 20)
92
- if (!columns.length) return null
93
- const rows = Array.isArray(row.rows)
94
- ? row.rows
95
- .map((entry) => Array.isArray(entry)
96
- ? entry.slice(0, columns.length).map((cell) => (
97
- typeof cell === 'string'
98
- || typeof cell === 'number'
99
- || typeof cell === 'boolean'
100
- || cell === null
101
- ? cell
102
- : JSON.stringify(cell)
103
- ))
104
- : null)
105
- .filter((entry): entry is Array<string | number | boolean | null> => Array.isArray(entry))
106
- .slice(0, 100)
107
- : []
108
- return rows.length
109
- ? {
110
- columns,
111
- rows,
112
- caption: asTrimmedString(row.caption, 240) || undefined,
113
- }
114
- : null
115
- }
116
-
117
- function normalizeBlock(value: unknown): CanvasBlock | null {
118
- const row = asObject(value)
119
- if (!row) return null
120
- const title = asTrimmedString(row.title, 160) || undefined
121
- switch (row.type) {
122
- case 'markdown': {
123
- const markdown = asTrimmedString(row.markdown, 20_000)
124
- return markdown ? { type: 'markdown', title, markdown } : null
125
- }
126
- case 'metrics': {
127
- const items = normalizeMetricItems(row.items)
128
- return items.length ? { type: 'metrics', title, items } : null
129
- }
130
- case 'cards': {
131
- const items = normalizeCardItems(row.items)
132
- return items.length ? { type: 'cards', title, items } : null
133
- }
134
- case 'table': {
135
- const table = normalizeTable(row.table)
136
- return table ? { type: 'table', title, table } : null
137
- }
138
- case 'code': {
139
- const code = asTrimmedString(row.code, 20_000)
140
- return code ? { type: 'code', title, code, language: asTrimmedString(row.language, 60) || undefined } : null
141
- }
142
- case 'actions': {
143
- const items = normalizeActionItems(row.items)
144
- return items.length ? { type: 'actions', title, items } : null
145
- }
146
- default:
147
- return null
148
- }
149
- }
150
-
151
- export function normalizeCanvasDocument(value: unknown): CanvasDocument | null {
152
- const row = asObject(value)
153
- if (!row) return null
154
- const blocks = Array.isArray(row.blocks)
155
- ? row.blocks.map((entry) => normalizeBlock(entry)).filter((entry): entry is CanvasBlock => entry !== null).slice(0, 24)
156
- : []
157
- if (!blocks.length) return null
158
- return {
159
- kind: 'structured',
160
- title: asTrimmedString(row.title, 180) || undefined,
161
- subtitle: asTrimmedString(row.subtitle, 320) || undefined,
162
- theme: row.theme === 'sky' || row.theme === 'emerald' || row.theme === 'amber' || row.theme === 'rose' ? row.theme : 'slate',
163
- blocks,
164
- updatedAt: typeof row.updatedAt === 'number' && Number.isFinite(row.updatedAt) ? row.updatedAt : Date.now(),
165
- }
166
- }
167
-
168
- export function isCanvasDocument(value: unknown): value is CanvasDocument {
169
- return normalizeCanvasDocument(value) !== null
170
- }
171
-
172
- export function normalizeCanvasContent(value: unknown): CanvasContent {
173
- if (typeof value === 'string') return value || null
174
- if (value === null || value === undefined) return null
175
- return normalizeCanvasDocument(value)
176
- }
177
-
178
- export function summarizeCanvasContent(content: CanvasContent): Record<string, unknown> {
179
- if (!content) {
180
- return { kind: 'empty', hasContent: false, contentLength: 0, preview: null }
181
- }
182
- if (typeof content === 'string') {
183
- return {
184
- kind: 'html',
185
- hasContent: true,
186
- contentLength: content.length,
187
- preview: content.slice(0, 500),
188
- }
189
- }
190
- return {
191
- kind: 'structured',
192
- hasContent: true,
193
- blockCount: content.blocks.length,
194
- title: content.title || null,
195
- blockTypes: content.blocks.map((block) => block.type),
196
- preview: JSON.stringify(content).slice(0, 500),
197
- }
198
- }
@@ -1,32 +0,0 @@
1
- import assert from 'node:assert/strict'
2
- import { describe, it } from 'node:test'
3
-
4
- import { normalizeCanvasDocument } from './canvas-content'
5
-
6
- describe('normalizeCanvasDocument', () => {
7
- it('filters invalid metric rows and keeps valid metrics blocks', () => {
8
- const result = normalizeCanvasDocument({
9
- title: 'Smoke',
10
- blocks: [
11
- {
12
- type: 'metrics',
13
- items: [
14
- { label: 'Healthy', value: 12, tone: 'positive' },
15
- { label: '', value: 'skip-me' },
16
- { value: 'missing-label' },
17
- ],
18
- },
19
- ],
20
- })
21
-
22
- assert.ok(result)
23
- assert.equal(result?.blocks.length, 1)
24
- assert.deepEqual(result?.blocks[0], {
25
- type: 'metrics',
26
- items: [
27
- { label: 'Healthy', value: '12', tone: 'positive', detail: undefined },
28
- ],
29
- title: undefined,
30
- })
31
- })
32
- })
@@ -1,6 +0,0 @@
1
- export {
2
- isCanvasDocument,
3
- normalizeCanvasContent,
4
- normalizeCanvasDocument,
5
- summarizeCanvasContent,
6
- } from '../canvas-content'