@swarmclawai/swarmclaw 1.2.0 → 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.
- package/README.md +19 -0
- package/package.json +5 -2
- package/skills/coding-agent/SKILL.md +111 -0
- package/skills/github/SKILL.md +140 -0
- package/skills/nano-banana-pro/SKILL.md +62 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +235 -0
- package/skills/nano-pdf/SKILL.md +53 -0
- package/skills/openai-image-gen/SKILL.md +78 -0
- package/skills/openai-image-gen/scripts/gen.py +328 -0
- package/skills/resourceful-problem-solving/SKILL.md +49 -0
- package/skills/skill-creator/SKILL.md +147 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/quick_validate.py +159 -0
- package/skills/summarize/SKILL.md +77 -0
- package/src/app/api/auth/route.ts +20 -5
- package/src/app/api/chats/[id]/deploy/route.ts +11 -6
- package/src/app/api/chats/[id]/devserver/route.ts +17 -20
- package/src/app/api/chats/[id]/messages/route.ts +15 -11
- package/src/app/api/chats/[id]/route.ts +9 -10
- package/src/app/api/chats/[id]/stop/route.ts +5 -7
- package/src/app/api/chats/messages-route.test.ts +8 -6
- package/src/app/api/chats/route.ts +9 -10
- package/src/app/api/credentials/[id]/route.ts +4 -1
- package/src/app/api/extensions/marketplace/route.ts +5 -2
- package/src/app/api/ip/route.ts +2 -2
- package/src/app/api/memory/maintenance/route.ts +5 -2
- package/src/app/api/preview-server/route.ts +15 -12
- package/src/app/api/projects/[id]/route.ts +7 -46
- package/src/app/api/system/status/route.ts +11 -0
- package/src/app/api/upload/route.ts +4 -1
- package/src/cli/index.js +7 -0
- package/src/cli/spec.js +1 -0
- package/src/components/agents/agent-files-editor.tsx +44 -32
- package/src/components/agents/personality-builder.tsx +13 -7
- package/src/components/agents/trash-list.tsx +1 -1
- package/src/components/chat/chat-area.tsx +45 -23
- package/src/components/chat/message-bubble.test.ts +35 -0
- package/src/components/chat/message-bubble.tsx +20 -9
- package/src/components/chat/message-list.tsx +62 -42
- package/src/components/chat/swarm-status-card.tsx +10 -3
- package/src/components/input/chat-input.tsx +34 -14
- package/src/components/layout/daemon-indicator.tsx +7 -8
- package/src/components/layout/update-banner.tsx +8 -13
- package/src/components/logs/log-list.tsx +1 -1
- package/src/components/memory/memory-card.tsx +3 -1
- package/src/components/org-chart/org-chart-view.tsx +4 -0
- package/src/components/projects/project-list.tsx +4 -2
- package/src/components/projects/tabs/overview-tab.tsx +3 -2
- package/src/components/secrets/secret-sheet.tsx +1 -1
- package/src/components/secrets/secrets-list.tsx +1 -1
- package/src/components/shared/agent-switch-dialog.tsx +12 -6
- package/src/components/shared/dir-browser.tsx +22 -18
- package/src/components/skills/skill-sheet.tsx +2 -3
- package/src/components/tasks/task-list.tsx +1 -1
- package/src/components/tasks/task-sheet.tsx +1 -1
- package/src/hooks/use-openclaw-gateway.ts +46 -27
- package/src/instrumentation.ts +10 -7
- package/src/lib/chat/assistant-render-id.ts +3 -0
- package/src/lib/chat/chat-streaming-state.test.ts +42 -3
- package/src/lib/chat/chat-streaming-state.ts +20 -8
- package/src/lib/chat/chat.ts +18 -2
- package/src/lib/chat/queued-message-queue.test.ts +23 -1
- package/src/lib/chat/queued-message-queue.ts +11 -2
- package/src/lib/providers/anthropic.ts +6 -3
- package/src/lib/providers/claude-cli.ts +9 -3
- package/src/lib/providers/cli-utils.test.ts +124 -0
- package/src/lib/providers/cli-utils.ts +15 -0
- package/src/lib/providers/codex-cli.ts +9 -3
- package/src/lib/providers/gemini-cli.ts +6 -2
- package/src/lib/providers/index.ts +4 -1
- package/src/lib/providers/ollama.ts +5 -2
- package/src/lib/providers/openai.ts +8 -5
- package/src/lib/providers/opencode-cli.ts +6 -2
- package/src/lib/server/activity/activity-log.ts +21 -0
- package/src/lib/server/agents/agent-availability.test.ts +10 -5
- package/src/lib/server/agents/agent-cascade.ts +79 -59
- package/src/lib/server/agents/agent-registry.ts +23 -4
- package/src/lib/server/agents/agent-repository.ts +90 -0
- package/src/lib/server/agents/delegation-job-repository.ts +53 -0
- package/src/lib/server/agents/delegation-jobs.ts +11 -4
- package/src/lib/server/agents/guardian-checkpoint-repository.ts +35 -0
- package/src/lib/server/agents/guardian.ts +2 -2
- package/src/lib/server/agents/main-agent-loop.ts +14 -6
- package/src/lib/server/agents/main-loop-state-repository.ts +38 -0
- package/src/lib/server/agents/subagent-runtime.ts +9 -6
- package/src/lib/server/agents/subagent-swarm.ts +3 -2
- package/src/lib/server/agents/task-session.ts +3 -4
- package/src/lib/server/approvals/approval-repository.ts +30 -0
- package/src/lib/server/autonomy/supervisor-incident-repository.ts +42 -0
- package/src/lib/server/autonomy/supervisor-reflection.ts +14 -1
- package/src/lib/server/chat-execution/chat-execution-types.ts +38 -0
- package/src/lib/server/chat-execution/chat-execution-utils.ts +1 -1
- package/src/lib/server/chat-execution/chat-execution.ts +84 -1914
- package/src/lib/server/chat-execution/chat-turn-finalization.ts +620 -0
- package/src/lib/server/chat-execution/chat-turn-partial-persistence.ts +221 -0
- package/src/lib/server/chat-execution/chat-turn-preflight.ts +133 -0
- package/src/lib/server/chat-execution/chat-turn-preparation.ts +817 -0
- package/src/lib/server/chat-execution/chat-turn-stream-execution.ts +296 -0
- package/src/lib/server/chat-execution/chat-turn-tool-routing.ts +5 -5
- package/src/lib/server/chat-execution/continuation-evaluator.ts +4 -3
- package/src/lib/server/chat-execution/continuation-limits.ts +6 -3
- package/src/lib/server/chat-execution/message-classifier.test.ts +329 -0
- package/src/lib/server/chat-execution/message-classifier.ts +5 -2
- package/src/lib/server/chat-execution/post-stream-finalization.ts +5 -2
- package/src/lib/server/chat-execution/prompt-builder.ts +22 -1
- package/src/lib/server/chat-execution/prompt-sections.ts +55 -13
- package/src/lib/server/chat-execution/response-completeness.ts +5 -2
- package/src/lib/server/chat-execution/situational-awareness.ts +12 -7
- package/src/lib/server/chat-execution/stream-agent-chat.ts +58 -25
- package/src/lib/server/chatrooms/chatroom-memory-bridge.ts +6 -3
- package/src/lib/server/chatrooms/chatroom-repository.ts +32 -0
- package/src/lib/server/connectors/bluebubbles.ts +7 -4
- package/src/lib/server/connectors/connector-inbound.ts +16 -13
- package/src/lib/server/connectors/connector-lifecycle.ts +11 -8
- package/src/lib/server/connectors/connector-outbound.ts +6 -3
- package/src/lib/server/connectors/connector-repository.ts +58 -0
- package/src/lib/server/connectors/discord.ts +10 -7
- package/src/lib/server/connectors/email.ts +17 -14
- package/src/lib/server/connectors/googlechat.ts +7 -4
- package/src/lib/server/connectors/inbound-audio-transcription.ts +5 -2
- package/src/lib/server/connectors/matrix.ts +6 -3
- package/src/lib/server/connectors/openclaw.ts +20 -17
- package/src/lib/server/connectors/outbox.ts +4 -1
- package/src/lib/server/connectors/runtime-state.test.ts +117 -0
- package/src/lib/server/connectors/runtime-state.ts +19 -0
- package/src/lib/server/connectors/session-consolidation.ts +5 -2
- package/src/lib/server/connectors/signal.ts +9 -6
- package/src/lib/server/connectors/slack.ts +13 -10
- package/src/lib/server/connectors/teams.ts +8 -5
- package/src/lib/server/connectors/telegram.ts +15 -12
- package/src/lib/server/connectors/whatsapp.ts +32 -29
- package/src/lib/server/credentials/credential-repository.ts +7 -0
- package/src/lib/server/embeddings.ts +4 -1
- package/src/lib/server/gateways/gateway-profile-repository.ts +4 -0
- package/src/lib/server/link-understanding.ts +4 -1
- package/src/lib/server/memory/memory-abstract.test.ts +59 -0
- package/src/lib/server/memory/memory-abstract.ts +59 -0
- package/src/lib/server/memory/memory-db.ts +40 -14
- package/src/lib/server/missions/mission-repository.ts +74 -0
- package/src/lib/server/missions/mission-service/actions.ts +6 -0
- package/src/lib/server/missions/mission-service/bindings.ts +9 -0
- package/src/lib/server/missions/mission-service/context.ts +4 -0
- package/src/lib/server/missions/mission-service/core.ts +2269 -0
- package/src/lib/server/missions/mission-service/queries.ts +12 -0
- package/src/lib/server/missions/mission-service/recovery.ts +5 -0
- package/src/lib/server/missions/mission-service/ticks.ts +9 -0
- package/src/lib/server/missions/mission-service.test.ts +9 -2
- package/src/lib/server/missions/mission-service.ts +6 -2263
- package/src/lib/server/openclaw/gateway.ts +8 -5
- package/src/lib/server/persistence/repository-utils.ts +154 -0
- package/src/lib/server/persistence/storage-context.ts +51 -0
- package/src/lib/server/persistence/transaction.ts +1 -0
- package/src/lib/server/project-utils.ts +13 -0
- package/src/lib/server/projects/project-repository.ts +36 -0
- package/src/lib/server/projects/project-service.ts +79 -0
- package/src/lib/server/protocols/protocol-agent-turn.ts +5 -2
- package/src/lib/server/protocols/protocol-normalization.test.ts +6 -4
- package/src/lib/server/protocols/protocol-run-lifecycle.ts +5 -2
- package/src/lib/server/protocols/protocol-step-helpers.ts +4 -1
- package/src/lib/server/provider-health.ts +18 -0
- package/src/lib/server/query-expansion.ts +4 -1
- package/src/lib/server/runtime/alert-dispatch.ts +8 -7
- package/src/lib/server/runtime/daemon-policy.ts +1 -1
- package/src/lib/server/runtime/daemon-state/core.ts +1570 -0
- package/src/lib/server/runtime/daemon-state/health.ts +6 -0
- package/src/lib/server/runtime/daemon-state/policy.ts +7 -0
- package/src/lib/server/runtime/daemon-state/supervisor.ts +6 -0
- package/src/lib/server/runtime/daemon-state.test.ts +48 -0
- package/src/lib/server/runtime/daemon-state.ts +3 -1331
- package/src/lib/server/runtime/estop-repository.ts +4 -0
- package/src/lib/server/runtime/estop.ts +3 -1
- package/src/lib/server/runtime/heartbeat-service.test.ts +2 -2
- package/src/lib/server/runtime/heartbeat-service.ts +78 -34
- package/src/lib/server/runtime/heartbeat-wake.ts +6 -4
- package/src/lib/server/runtime/idle-window.ts +6 -3
- package/src/lib/server/runtime/network.ts +11 -0
- package/src/lib/server/runtime/orchestrator-events.ts +2 -2
- package/src/lib/server/runtime/perf.ts +4 -1
- package/src/lib/server/runtime/process-manager.ts +7 -4
- package/src/lib/server/runtime/queue/claims.ts +4 -0
- package/src/lib/server/runtime/queue/core.ts +2079 -0
- package/src/lib/server/runtime/queue/execution.ts +7 -0
- package/src/lib/server/runtime/queue/followups.ts +4 -0
- package/src/lib/server/runtime/queue/queries.ts +12 -0
- package/src/lib/server/runtime/queue/recovery.ts +7 -0
- package/src/lib/server/runtime/queue-recovery.test.ts +48 -13
- package/src/lib/server/runtime/queue-repository.ts +17 -0
- package/src/lib/server/runtime/queue.ts +5 -2058
- package/src/lib/server/runtime/run-ledger.ts +6 -5
- package/src/lib/server/runtime/run-repository.ts +73 -0
- package/src/lib/server/runtime/runtime-lock-repository.ts +8 -0
- package/src/lib/server/runtime/runtime-settings.ts +1 -1
- package/src/lib/server/runtime/runtime-state.ts +99 -0
- package/src/lib/server/runtime/scheduler.ts +13 -8
- package/src/lib/server/runtime/session-run-manager/cancellation.ts +157 -0
- package/src/lib/server/runtime/session-run-manager/drain.ts +246 -0
- package/src/lib/server/runtime/session-run-manager/enqueue.ts +287 -0
- package/src/lib/server/runtime/session-run-manager/queries.ts +117 -0
- package/src/lib/server/runtime/session-run-manager/recovery.ts +238 -0
- package/src/lib/server/runtime/session-run-manager/state.ts +441 -0
- package/src/lib/server/runtime/session-run-manager/types.ts +74 -0
- package/src/lib/server/runtime/session-run-manager.ts +72 -1374
- package/src/lib/server/runtime/watch-job-repository.ts +35 -0
- package/src/lib/server/runtime/watch-jobs.ts +3 -1
- package/src/lib/server/sandbox/bridge-auth-registry.ts +6 -0
- package/src/lib/server/sandbox/novnc-auth.ts +10 -0
- package/src/lib/server/schedules/schedule-repository.ts +42 -0
- package/src/lib/server/session-tools/context.ts +14 -0
- package/src/lib/server/session-tools/discovery.ts +9 -6
- package/src/lib/server/session-tools/index.ts +3 -1
- package/src/lib/server/session-tools/platform.ts +1 -1
- package/src/lib/server/session-tools/subagent.ts +23 -2
- package/src/lib/server/session-tools/wallet.ts +4 -1
- package/src/lib/server/sessions/session-repository.ts +85 -0
- package/src/lib/server/settings/settings-repository.ts +25 -0
- package/src/lib/server/skills/clawhub-client.ts +4 -1
- package/src/lib/server/skills/runtime-skill-resolver.ts +8 -2
- package/src/lib/server/skills/skill-discovery.test.ts +2 -2
- package/src/lib/server/skills/skill-discovery.ts +2 -2
- package/src/lib/server/skills/skill-eligibility.ts +6 -0
- package/src/lib/server/skills/skill-repository.ts +14 -0
- package/src/lib/server/solana.ts +6 -0
- package/src/lib/server/storage-auth.ts +5 -5
- package/src/lib/server/storage-normalization.ts +4 -0
- package/src/lib/server/storage.ts +32 -32
- package/src/lib/server/tasks/task-followups.ts +4 -1
- package/src/lib/server/tasks/task-repository.ts +54 -0
- package/src/lib/server/tool-loop-detection.ts +8 -3
- package/src/lib/server/tool-planning.ts +226 -0
- package/src/lib/server/tool-retry.ts +4 -3
- package/src/lib/server/usage/usage-repository.ts +30 -0
- package/src/lib/server/wallet/wallet-portfolio.ts +29 -0
- package/src/lib/server/webhooks/webhook-repository.ts +10 -0
- package/src/lib/server/ws-hub.ts +5 -2
- package/src/lib/strip-internal-metadata.test.ts +78 -37
- package/src/lib/strip-internal-metadata.ts +20 -6
- package/src/stores/use-approval-store.ts +7 -1
- package/src/stores/use-chat-store.test.ts +54 -0
- package/src/stores/use-chat-store.ts +26 -6
- package/src/types/index.ts +6 -0
- /package/{bundled-skills → skills}/google-workspace/SKILL.md +0 -0
|
@@ -7,7 +7,7 @@ import { describe, it } from 'node:test'
|
|
|
7
7
|
|
|
8
8
|
const repoRoot = path.resolve(path.dirname(new URL(import.meta.url).pathname), '../../..')
|
|
9
9
|
|
|
10
|
-
function runWithTempDataDir(script: string) {
|
|
10
|
+
function runWithTempDataDir<T extends Record<string, unknown>>(script: string): T {
|
|
11
11
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'swarmclaw-queue-recovery-'))
|
|
12
12
|
try {
|
|
13
13
|
const result = spawnSync(process.execPath, ['--import', 'tsx', '--input-type=module', '--eval', script], {
|
|
@@ -28,7 +28,7 @@ function runWithTempDataDir(script: string) {
|
|
|
28
28
|
.map((line) => line.trim())
|
|
29
29
|
.filter(Boolean)
|
|
30
30
|
const jsonLine = [...lines].reverse().find((line) => line.startsWith('{'))
|
|
31
|
-
return JSON.parse(jsonLine || '{}') as
|
|
31
|
+
return JSON.parse(jsonLine || '{}') as T
|
|
32
32
|
} finally {
|
|
33
33
|
fs.rmSync(tempDir, { recursive: true, force: true })
|
|
34
34
|
}
|
|
@@ -36,7 +36,13 @@ function runWithTempDataDir(script: string) {
|
|
|
36
36
|
|
|
37
37
|
describe('queue recovery', () => {
|
|
38
38
|
it('processNext recovers orphaned queued tasks and defers them when the agent is disabled', () => {
|
|
39
|
-
const output = runWithTempDataDir
|
|
39
|
+
const output = runWithTempDataDir<{
|
|
40
|
+
status: string | null
|
|
41
|
+
queued: string[]
|
|
42
|
+
retryDelayMs: number | null
|
|
43
|
+
error: string | null
|
|
44
|
+
deferredReason: string | null
|
|
45
|
+
}>(`
|
|
40
46
|
const storageMod = await import('@/lib/server/storage')
|
|
41
47
|
const queueMod = await import('@/lib/server/runtime/queue')
|
|
42
48
|
const storage = storageMod.default || storageMod
|
|
@@ -76,18 +82,28 @@ describe('queue recovery', () => {
|
|
|
76
82
|
queued: queueItems,
|
|
77
83
|
retryDelayMs: typeof task?.retryScheduledAt === 'number' ? task.retryScheduledAt - now : null,
|
|
78
84
|
error: task?.error ?? null,
|
|
85
|
+
deferredReason: task?.deferredReason ?? null,
|
|
79
86
|
}))
|
|
80
87
|
`)
|
|
81
88
|
|
|
82
|
-
assert.equal(output.status, '
|
|
83
|
-
assert.deepEqual(output.queued, [
|
|
84
|
-
assert.equal(
|
|
85
|
-
assert.
|
|
86
|
-
assert.
|
|
89
|
+
assert.equal(output.status, 'deferred')
|
|
90
|
+
assert.deepEqual(output.queued, [])
|
|
91
|
+
assert.equal(output.retryDelayMs, null)
|
|
92
|
+
assert.equal(output.error, null)
|
|
93
|
+
assert.ok(output.deferredReason)
|
|
94
|
+
assert.match(output.deferredReason, /disabled/i)
|
|
87
95
|
})
|
|
88
96
|
|
|
89
97
|
it('recoverStalledRunningTasks requeues tasks missing startedAt and records the recovery', () => {
|
|
90
|
-
const output = runWithTempDataDir
|
|
98
|
+
const output = runWithTempDataDir<{
|
|
99
|
+
result: { recovered: number; deadLettered: number }
|
|
100
|
+
status: string | null
|
|
101
|
+
queued: string[]
|
|
102
|
+
retryDelayMs: number | null
|
|
103
|
+
error: string | null
|
|
104
|
+
comment: string | null
|
|
105
|
+
scheduledCalls: number
|
|
106
|
+
}>(`
|
|
91
107
|
const storageMod = await import('@/lib/server/storage')
|
|
92
108
|
const queueMod = await import('@/lib/server/runtime/queue')
|
|
93
109
|
const storage = storageMod.default || storageMod
|
|
@@ -135,14 +151,26 @@ describe('queue recovery', () => {
|
|
|
135
151
|
assert.equal(output.status, 'queued')
|
|
136
152
|
assert.deepEqual(output.queued, ['broken'])
|
|
137
153
|
assert.equal(typeof output.retryDelayMs, 'number')
|
|
154
|
+
assert.ok(output.retryDelayMs !== null)
|
|
138
155
|
assert.ok(output.retryDelayMs >= 25_000 && output.retryDelayMs <= 35_000)
|
|
156
|
+
assert.ok(output.error)
|
|
139
157
|
assert.match(output.error, /missing startedAt/i)
|
|
158
|
+
assert.ok(output.comment)
|
|
140
159
|
assert.match(output.comment, /missing startedAt/i)
|
|
141
160
|
assert.equal(output.scheduledCalls, 1)
|
|
142
161
|
})
|
|
143
162
|
|
|
144
163
|
it('recoverStalledRunningTasks preserves retry policy backoff for stalled tasks', () => {
|
|
145
|
-
const output = runWithTempDataDir
|
|
164
|
+
const output = runWithTempDataDir<{
|
|
165
|
+
result: { recovered: number; deadLettered: number }
|
|
166
|
+
status: string | null
|
|
167
|
+
attempts: number | null
|
|
168
|
+
queued: string[]
|
|
169
|
+
retryDelayMs: number | null
|
|
170
|
+
error: string | null
|
|
171
|
+
heartbeatEnabled: boolean | null
|
|
172
|
+
scheduledCalls: number
|
|
173
|
+
}>(`
|
|
146
174
|
const storageMod = await import('@/lib/server/storage')
|
|
147
175
|
const queueMod = await import('@/lib/server/runtime/queue')
|
|
148
176
|
const storage = storageMod.default || storageMod
|
|
@@ -212,14 +240,20 @@ describe('queue recovery', () => {
|
|
|
212
240
|
assert.equal(output.attempts, 1)
|
|
213
241
|
assert.deepEqual(output.queued, ['stalled'])
|
|
214
242
|
assert.equal(typeof output.retryDelayMs, 'number')
|
|
215
|
-
assert.ok(output.retryDelayMs
|
|
243
|
+
assert.ok(output.retryDelayMs !== null)
|
|
244
|
+
assert.ok(output.retryDelayMs >= 85_000 && output.retryDelayMs <= 100_000)
|
|
245
|
+
assert.ok(output.error)
|
|
216
246
|
assert.match(output.error, /Retry scheduled after failure/i)
|
|
217
247
|
assert.equal(output.heartbeatEnabled, false)
|
|
218
248
|
assert.equal(output.scheduledCalls, 1)
|
|
219
249
|
})
|
|
220
250
|
|
|
221
251
|
it('resumeQueue restores blocked queued tasks without clobbering their queuedAt timestamp', () => {
|
|
222
|
-
const output = runWithTempDataDir
|
|
252
|
+
const output = runWithTempDataDir<{
|
|
253
|
+
queued: string[]
|
|
254
|
+
queuedAt: number | null
|
|
255
|
+
status: string | null
|
|
256
|
+
}>(`
|
|
223
257
|
const storageMod = await import('@/lib/server/storage')
|
|
224
258
|
const queueMod = await import('@/lib/server/runtime/queue')
|
|
225
259
|
const storage = storageMod.default || storageMod
|
|
@@ -261,9 +295,10 @@ describe('queue recovery', () => {
|
|
|
261
295
|
}))
|
|
262
296
|
`)
|
|
263
297
|
|
|
264
|
-
assert.deepEqual(output.queued, ['blocked'])
|
|
298
|
+
assert.deepEqual(output.queued, ['blocked', 'dep'])
|
|
265
299
|
assert.equal(output.status, 'queued')
|
|
266
300
|
assert.equal(typeof output.queuedAt, 'number')
|
|
301
|
+
assert.ok(output.queuedAt !== null)
|
|
267
302
|
assert.ok(output.queuedAt < Date.now() - 30_000)
|
|
268
303
|
})
|
|
269
304
|
})
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { loadQueue as loadStoredQueue, saveQueue as saveStoredQueue } from '@/lib/server/storage'
|
|
2
|
+
import { createSingletonRepository } from '@/lib/server/persistence/repository-utils'
|
|
3
|
+
|
|
4
|
+
export const queueRepository = createSingletonRepository<string[], string[]>(
|
|
5
|
+
'queue',
|
|
6
|
+
{
|
|
7
|
+
get() {
|
|
8
|
+
return loadStoredQueue()
|
|
9
|
+
},
|
|
10
|
+
save(value) {
|
|
11
|
+
saveStoredQueue(value)
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
export const loadQueue = () => queueRepository.get()
|
|
17
|
+
export const saveQueue = (queue: string[]) => queueRepository.save(queue)
|