@swarmclawai/swarmclaw 1.2.1 → 1.2.2

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 (144) hide show
  1. package/README.md +9 -0
  2. package/package.json +2 -2
  3. package/skills/coding-agent/SKILL.md +111 -0
  4. package/skills/github/SKILL.md +140 -0
  5. package/skills/nano-banana-pro/SKILL.md +62 -0
  6. package/skills/nano-banana-pro/scripts/generate_image.py +235 -0
  7. package/skills/nano-pdf/SKILL.md +53 -0
  8. package/skills/openai-image-gen/SKILL.md +78 -0
  9. package/skills/openai-image-gen/scripts/gen.py +328 -0
  10. package/skills/resourceful-problem-solving/SKILL.md +49 -0
  11. package/skills/skill-creator/SKILL.md +147 -0
  12. package/skills/skill-creator/scripts/init_skill.py +378 -0
  13. package/skills/skill-creator/scripts/quick_validate.py +159 -0
  14. package/skills/summarize/SKILL.md +77 -0
  15. package/src/app/api/auth/route.ts +20 -5
  16. package/src/app/api/chats/[id]/devserver/route.ts +13 -19
  17. package/src/app/api/chats/[id]/messages/route.ts +13 -15
  18. package/src/app/api/chats/[id]/route.ts +9 -10
  19. package/src/app/api/chats/[id]/stop/route.ts +5 -7
  20. package/src/app/api/chats/messages-route.test.ts +8 -6
  21. package/src/app/api/chats/route.ts +9 -10
  22. package/src/app/api/ip/route.ts +2 -2
  23. package/src/app/api/preview-server/route.ts +1 -1
  24. package/src/app/api/projects/[id]/route.ts +7 -46
  25. package/src/components/chat/chat-area.tsx +45 -23
  26. package/src/components/chat/message-bubble.test.ts +35 -0
  27. package/src/components/chat/message-bubble.tsx +19 -9
  28. package/src/components/chat/message-list.tsx +37 -3
  29. package/src/components/input/chat-input.tsx +34 -14
  30. package/src/instrumentation.ts +1 -1
  31. package/src/lib/chat/assistant-render-id.ts +3 -0
  32. package/src/lib/chat/chat-streaming-state.test.ts +42 -3
  33. package/src/lib/chat/chat-streaming-state.ts +20 -8
  34. package/src/lib/chat/queued-message-queue.test.ts +23 -1
  35. package/src/lib/chat/queued-message-queue.ts +11 -2
  36. package/src/lib/providers/cli-utils.test.ts +124 -0
  37. package/src/lib/server/activity/activity-log.ts +21 -0
  38. package/src/lib/server/agents/agent-availability.test.ts +10 -5
  39. package/src/lib/server/agents/agent-cascade.ts +79 -59
  40. package/src/lib/server/agents/agent-registry.ts +3 -1
  41. package/src/lib/server/agents/agent-repository.ts +90 -0
  42. package/src/lib/server/agents/delegation-job-repository.ts +53 -0
  43. package/src/lib/server/agents/delegation-jobs.ts +11 -4
  44. package/src/lib/server/agents/guardian-checkpoint-repository.ts +35 -0
  45. package/src/lib/server/agents/guardian.ts +2 -2
  46. package/src/lib/server/agents/main-agent-loop.ts +10 -3
  47. package/src/lib/server/agents/main-loop-state-repository.ts +38 -0
  48. package/src/lib/server/agents/subagent-runtime.ts +9 -6
  49. package/src/lib/server/agents/subagent-swarm.ts +3 -2
  50. package/src/lib/server/agents/task-session.ts +3 -4
  51. package/src/lib/server/approvals/approval-repository.ts +30 -0
  52. package/src/lib/server/autonomy/supervisor-incident-repository.ts +42 -0
  53. package/src/lib/server/chat-execution/chat-execution-types.ts +38 -0
  54. package/src/lib/server/chat-execution/chat-execution-utils.ts +1 -1
  55. package/src/lib/server/chat-execution/chat-execution.ts +84 -1926
  56. package/src/lib/server/chat-execution/chat-turn-finalization.ts +620 -0
  57. package/src/lib/server/chat-execution/chat-turn-partial-persistence.ts +221 -0
  58. package/src/lib/server/chat-execution/chat-turn-preflight.ts +133 -0
  59. package/src/lib/server/chat-execution/chat-turn-preparation.ts +817 -0
  60. package/src/lib/server/chat-execution/chat-turn-stream-execution.ts +296 -0
  61. package/src/lib/server/chat-execution/chat-turn-tool-routing.ts +5 -5
  62. package/src/lib/server/chat-execution/message-classifier.test.ts +329 -0
  63. package/src/lib/server/chat-execution/post-stream-finalization.ts +1 -1
  64. package/src/lib/server/chat-execution/prompt-builder.ts +11 -0
  65. package/src/lib/server/chat-execution/prompt-sections.ts +5 -6
  66. package/src/lib/server/chat-execution/situational-awareness.ts +12 -7
  67. package/src/lib/server/chat-execution/stream-agent-chat.ts +16 -13
  68. package/src/lib/server/chatrooms/chatroom-repository.ts +32 -0
  69. package/src/lib/server/connectors/connector-repository.ts +58 -0
  70. package/src/lib/server/connectors/runtime-state.test.ts +117 -0
  71. package/src/lib/server/credentials/credential-repository.ts +7 -0
  72. package/src/lib/server/gateways/gateway-profile-repository.ts +4 -0
  73. package/src/lib/server/memory/memory-abstract.test.ts +59 -0
  74. package/src/lib/server/missions/mission-repository.ts +74 -0
  75. package/src/lib/server/missions/mission-service/actions.ts +6 -0
  76. package/src/lib/server/missions/mission-service/bindings.ts +9 -0
  77. package/src/lib/server/missions/mission-service/context.ts +4 -0
  78. package/src/lib/server/missions/mission-service/core.ts +2269 -0
  79. package/src/lib/server/missions/mission-service/queries.ts +12 -0
  80. package/src/lib/server/missions/mission-service/recovery.ts +5 -0
  81. package/src/lib/server/missions/mission-service/ticks.ts +9 -0
  82. package/src/lib/server/missions/mission-service.test.ts +9 -2
  83. package/src/lib/server/missions/mission-service.ts +6 -2266
  84. package/src/lib/server/persistence/repository-utils.ts +154 -0
  85. package/src/lib/server/persistence/storage-context.ts +51 -0
  86. package/src/lib/server/persistence/transaction.ts +1 -0
  87. package/src/lib/server/projects/project-repository.ts +36 -0
  88. package/src/lib/server/projects/project-service.ts +79 -0
  89. package/src/lib/server/protocols/protocol-normalization.test.ts +6 -4
  90. package/src/lib/server/runtime/alert-dispatch.ts +1 -1
  91. package/src/lib/server/runtime/daemon-policy.ts +1 -1
  92. package/src/lib/server/runtime/daemon-state/core.ts +1570 -0
  93. package/src/lib/server/runtime/daemon-state/health.ts +6 -0
  94. package/src/lib/server/runtime/daemon-state/policy.ts +7 -0
  95. package/src/lib/server/runtime/daemon-state/supervisor.ts +6 -0
  96. package/src/lib/server/runtime/daemon-state.test.ts +48 -0
  97. package/src/lib/server/runtime/daemon-state.ts +3 -1470
  98. package/src/lib/server/runtime/estop-repository.ts +4 -0
  99. package/src/lib/server/runtime/estop.ts +3 -1
  100. package/src/lib/server/runtime/heartbeat-service.test.ts +2 -2
  101. package/src/lib/server/runtime/heartbeat-service.ts +55 -34
  102. package/src/lib/server/runtime/heartbeat-wake.ts +6 -4
  103. package/src/lib/server/runtime/idle-window.ts +2 -2
  104. package/src/lib/server/runtime/network.ts +11 -0
  105. package/src/lib/server/runtime/orchestrator-events.ts +2 -2
  106. package/src/lib/server/runtime/queue/claims.ts +4 -0
  107. package/src/lib/server/runtime/queue/core.ts +2079 -0
  108. package/src/lib/server/runtime/queue/execution.ts +7 -0
  109. package/src/lib/server/runtime/queue/followups.ts +4 -0
  110. package/src/lib/server/runtime/queue/queries.ts +12 -0
  111. package/src/lib/server/runtime/queue/recovery.ts +7 -0
  112. package/src/lib/server/runtime/queue-recovery.test.ts +48 -13
  113. package/src/lib/server/runtime/queue-repository.ts +17 -0
  114. package/src/lib/server/runtime/queue.ts +5 -2061
  115. package/src/lib/server/runtime/run-ledger.ts +6 -5
  116. package/src/lib/server/runtime/run-repository.ts +73 -0
  117. package/src/lib/server/runtime/runtime-lock-repository.ts +8 -0
  118. package/src/lib/server/runtime/runtime-settings.ts +1 -1
  119. package/src/lib/server/runtime/runtime-state.ts +99 -0
  120. package/src/lib/server/runtime/scheduler.ts +4 -2
  121. package/src/lib/server/runtime/session-run-manager/cancellation.ts +157 -0
  122. package/src/lib/server/runtime/session-run-manager/drain.ts +246 -0
  123. package/src/lib/server/runtime/session-run-manager/enqueue.ts +287 -0
  124. package/src/lib/server/runtime/session-run-manager/queries.ts +117 -0
  125. package/src/lib/server/runtime/session-run-manager/recovery.ts +238 -0
  126. package/src/lib/server/runtime/session-run-manager/state.ts +441 -0
  127. package/src/lib/server/runtime/session-run-manager/types.ts +74 -0
  128. package/src/lib/server/runtime/session-run-manager.ts +72 -1377
  129. package/src/lib/server/runtime/watch-job-repository.ts +35 -0
  130. package/src/lib/server/runtime/watch-jobs.ts +3 -1
  131. package/src/lib/server/schedules/schedule-repository.ts +42 -0
  132. package/src/lib/server/sessions/session-repository.ts +85 -0
  133. package/src/lib/server/settings/settings-repository.ts +25 -0
  134. package/src/lib/server/skills/skill-discovery.test.ts +2 -2
  135. package/src/lib/server/skills/skill-discovery.ts +2 -2
  136. package/src/lib/server/skills/skill-repository.ts +14 -0
  137. package/src/lib/server/storage.ts +13 -24
  138. package/src/lib/server/tasks/task-repository.ts +54 -0
  139. package/src/lib/server/usage/usage-repository.ts +30 -0
  140. package/src/lib/server/webhooks/webhook-repository.ts +10 -0
  141. package/src/lib/strip-internal-metadata.test.ts +42 -41
  142. package/src/stores/use-chat-store.test.ts +54 -0
  143. package/src/stores/use-chat-store.ts +21 -5
  144. /package/{bundled-skills → skills}/google-workspace/SKILL.md +0 -0
@@ -13,22 +13,23 @@ import { genId } from '@/lib/id'
13
13
  import { errorMessage, hmrSingleton, sleep } from '@/lib/shared-utils'
14
14
  import { log } from '@/lib/server/logger'
15
15
  import { logExecution } from '@/lib/server/execution-log'
16
- import { logActivity } from '@/lib/server/storage'
16
+ import { logActivity } from '@/lib/server/activity/activity-log'
17
17
  import { createNotification } from '@/lib/server/create-notification'
18
18
  import { notify } from '@/lib/server/ws-hub'
19
+ import { loadAgents } from '@/lib/server/agents/agent-repository'
19
20
  import {
20
21
  spawnSubagent,
21
22
  type SubagentContext,
22
23
  type SubagentHandle,
23
24
  type SubagentResult,
24
25
  } from '@/lib/server/agents/subagent-runtime'
25
- import { loadAgents, loadSessions } from '@/lib/server/storage'
26
26
  import { getDelegationJob } from '@/lib/server/agents/delegation-jobs'
27
27
  import {
28
28
  getLineageNode,
29
29
  cancelLineageNode,
30
30
  type SubagentState,
31
31
  } from '@/lib/server/agents/subagent-lineage'
32
+ import { loadSessions } from '@/lib/server/sessions/session-repository'
32
33
  import type { Agent } from '@/types'
33
34
 
34
35
  // ---------------------------------------------------------------------------
@@ -1,9 +1,9 @@
1
1
  import { genId } from '@/lib/id'
2
- import { loadSessions, saveSessions } from '@/lib/server/storage'
3
2
  import { WORKSPACE_DIR } from '@/lib/server/data-dir'
4
3
  import type { Agent } from '@/types'
5
4
  import { getEnabledCapabilitySelection } from '@/lib/capability-selection'
6
5
  import { applyResolvedRoute, resolvePrimaryAgentRoute } from '@/lib/server/agents/agent-runtime-config'
6
+ import { saveSession } from '@/lib/server/sessions/session-repository'
7
7
 
8
8
  export function createAgentTaskSession(
9
9
  agent: Agent,
@@ -15,7 +15,6 @@ export function createAgentTaskSession(
15
15
  preferredGatewayUseCase?: string | null
16
16
  } | null,
17
17
  ): string {
18
- const sessions = loadSessions()
19
18
  const sessionId = genId()
20
19
  const preferredGatewayTags = Array.isArray(routePreferences?.preferredGatewayTags)
21
20
  ? routePreferences.preferredGatewayTags.filter((tag) => typeof tag === 'string' && tag.trim())
@@ -25,7 +24,7 @@ export function createAgentTaskSession(
25
24
  preferredGatewayUseCase: routePreferences?.preferredGatewayUseCase || null,
26
25
  })
27
26
 
28
- sessions[sessionId] = applyResolvedRoute({
27
+ const session = applyResolvedRoute({
29
28
  id: sessionId,
30
29
  name: `[Task] ${agent.name}: ${task.slice(0, 40)}`,
31
30
  cwd: cwd || WORKSPACE_DIR,
@@ -57,6 +56,6 @@ export function createAgentTaskSession(
57
56
  heartbeatEnabled: false,
58
57
  }, resolvedRoute)
59
58
 
60
- saveSessions(sessions)
59
+ saveSession(sessionId, session)
61
60
  return sessionId
62
61
  }
@@ -0,0 +1,30 @@
1
+ import {
2
+ deleteApproval as deleteStoredApproval,
3
+ loadApprovals as loadStoredApprovals,
4
+ upsertApproval as upsertStoredApproval,
5
+ } from '@/lib/server/storage'
6
+ import { createRecordRepository } from '@/lib/server/persistence/repository-utils'
7
+ import type { ApprovalRequest } from '@/types'
8
+
9
+ export const approvalRepository = createRecordRepository<ApprovalRequest>(
10
+ 'approvals',
11
+ {
12
+ get(id) {
13
+ return loadStoredApprovals()[id] || null
14
+ },
15
+ list() {
16
+ return loadStoredApprovals() as Record<string, ApprovalRequest>
17
+ },
18
+ upsert(id, value) {
19
+ upsertStoredApproval(id, value)
20
+ },
21
+ delete(id) {
22
+ deleteStoredApproval(id)
23
+ },
24
+ },
25
+ )
26
+
27
+ export const loadApprovals = () => approvalRepository.list()
28
+ export const loadApproval = (id: string) => approvalRepository.get(id)
29
+ export const upsertApproval = (id: string, value: ApprovalRequest | Record<string, unknown>) => approvalRepository.upsert(id, value as ApprovalRequest)
30
+ export const deleteApproval = (id: string) => approvalRepository.delete(id)
@@ -0,0 +1,42 @@
1
+ import type { SupervisorIncident } from '@/types'
2
+
3
+ import {
4
+ loadSupervisorIncident as loadStoredSupervisorIncident,
5
+ loadSupervisorIncidents as loadStoredSupervisorIncidents,
6
+ saveSupervisorIncidents as saveStoredSupervisorIncidents,
7
+ upsertSupervisorIncident as upsertStoredSupervisorIncident,
8
+ } from '@/lib/server/storage'
9
+ import { createRecordRepository } from '@/lib/server/persistence/repository-utils'
10
+
11
+ export const supervisorIncidentRepository = createRecordRepository<SupervisorIncident>(
12
+ 'supervisor-incidents',
13
+ {
14
+ get(id) {
15
+ return loadStoredSupervisorIncident(id) as SupervisorIncident | null
16
+ },
17
+ list() {
18
+ return loadStoredSupervisorIncidents() as Record<string, SupervisorIncident>
19
+ },
20
+ upsert(id, value) {
21
+ upsertStoredSupervisorIncident(id, value as SupervisorIncident)
22
+ },
23
+ replace(data) {
24
+ saveStoredSupervisorIncidents(data as Record<string, SupervisorIncident>)
25
+ },
26
+ },
27
+ )
28
+
29
+ export const loadSupervisorIncidents = () => supervisorIncidentRepository.list()
30
+ export const loadSupervisorIncident = (id: string) => supervisorIncidentRepository.get(id)
31
+ export const saveSupervisorIncidents = (items: Record<string, SupervisorIncident | Record<string, unknown>>) => (
32
+ supervisorIncidentRepository.replace(items as Record<string, SupervisorIncident>)
33
+ )
34
+ export const upsertSupervisorIncident = (id: string, value: SupervisorIncident | Record<string, unknown>) => (
35
+ supervisorIncidentRepository.upsert(id, value as SupervisorIncident)
36
+ )
37
+
38
+ export function listAgentIncidents(agentId?: string): SupervisorIncident[] {
39
+ return Object.values(loadSupervisorIncidents())
40
+ .filter((incident) => !agentId || incident.agentId === agentId)
41
+ .sort((left, right) => right.createdAt - left.createdAt)
42
+ }
@@ -0,0 +1,38 @@
1
+ import type { MessageToolEvent, SSEEvent } from '@/types'
2
+
3
+ export interface ExecuteChatTurnInput {
4
+ sessionId: string
5
+ message: string
6
+ missionId?: string | null
7
+ imagePath?: string
8
+ imageUrl?: string
9
+ attachedFiles?: string[]
10
+ internal?: boolean
11
+ source?: string
12
+ runId?: string
13
+ signal?: AbortSignal
14
+ onEvent?: (event: SSEEvent) => void
15
+ modelOverride?: string
16
+ heartbeatConfig?: {
17
+ ackMaxChars: number
18
+ showOk: boolean
19
+ showAlerts: boolean
20
+ target: string | null
21
+ lightContext?: boolean
22
+ deliveryMode?: 'default' | 'tool_only' | 'silent'
23
+ }
24
+ replyToId?: string
25
+ }
26
+
27
+ export interface ExecuteChatTurnResult {
28
+ runId?: string
29
+ sessionId: string
30
+ missionId?: string | null
31
+ text: string
32
+ persisted: boolean
33
+ toolEvents: MessageToolEvent[]
34
+ error?: string
35
+ inputTokens?: number
36
+ outputTokens?: number
37
+ estimatedCost?: number
38
+ }
@@ -2,7 +2,7 @@ import fs from 'fs'
2
2
  import path from 'path'
3
3
  import type { Message, MessageToolEvent } from '@/types'
4
4
  import { dedup } from '@/lib/shared-utils'
5
- import { getUsageSpendSince } from '@/lib/server/storage'
5
+ import { getUsageSpendSince } from '@/lib/server/usage/usage-repository'
6
6
  import { extensionIdMatches } from '@/lib/server/tool-aliases'
7
7
  import { buildToolEventAssistantSummary } from '@/lib/chat/tool-event-summary'
8
8
  import { looksLikePositiveConnectorDeliveryText } from '@/lib/server/chat-execution/chat-execution-connector-delivery'