clawdlets 0.2.4 → 0.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 (113) hide show
  1. package/dist/main.mjs +556 -1004
  2. package/node_modules/@clawdlets/core/dist/lib/context.d.ts +21 -0
  3. package/node_modules/@clawdlets/core/dist/lib/context.d.ts.map +1 -0
  4. package/node_modules/@clawdlets/core/dist/lib/context.js +19 -0
  5. package/node_modules/@clawdlets/core/dist/lib/context.js.map +1 -0
  6. package/node_modules/@clawdlets/core/dist/lib/host-resolve.d.ts +6 -0
  7. package/node_modules/@clawdlets/core/dist/lib/host-resolve.d.ts.map +1 -0
  8. package/node_modules/@clawdlets/core/dist/lib/host-resolve.js +20 -0
  9. package/node_modules/@clawdlets/core/dist/lib/host-resolve.js.map +1 -0
  10. package/node_modules/@clawdlets/core/dist/repo-layout.d.ts +1 -0
  11. package/node_modules/@clawdlets/core/dist/repo-layout.d.ts.map +1 -1
  12. package/node_modules/@clawdlets/core/dist/repo-layout.js +2 -0
  13. package/node_modules/@clawdlets/core/dist/repo-layout.js.map +1 -1
  14. package/node_modules/@clawdlets/core/package.json +1 -3
  15. package/package.json +3 -6
  16. package/node_modules/@clawdlets/clf-queue/dist/client.d.ts +0 -21
  17. package/node_modules/@clawdlets/clf-queue/dist/client.d.ts.map +0 -1
  18. package/node_modules/@clawdlets/clf-queue/dist/client.js +0 -132
  19. package/node_modules/@clawdlets/clf-queue/dist/client.js.map +0 -1
  20. package/node_modules/@clawdlets/clf-queue/dist/index.d.ts +0 -9
  21. package/node_modules/@clawdlets/clf-queue/dist/index.d.ts.map +0 -1
  22. package/node_modules/@clawdlets/clf-queue/dist/index.js +0 -5
  23. package/node_modules/@clawdlets/clf-queue/dist/index.js.map +0 -1
  24. package/node_modules/@clawdlets/clf-queue/dist/jobs.d.ts +0 -32
  25. package/node_modules/@clawdlets/clf-queue/dist/jobs.d.ts.map +0 -1
  26. package/node_modules/@clawdlets/clf-queue/dist/jobs.js +0 -24
  27. package/node_modules/@clawdlets/clf-queue/dist/jobs.js.map +0 -1
  28. package/node_modules/@clawdlets/clf-queue/dist/protocol.d.ts +0 -118
  29. package/node_modules/@clawdlets/clf-queue/dist/protocol.d.ts.map +0 -1
  30. package/node_modules/@clawdlets/clf-queue/dist/protocol.js +0 -46
  31. package/node_modules/@clawdlets/clf-queue/dist/protocol.js.map +0 -1
  32. package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.d.ts +0 -3
  33. package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.d.ts.map +0 -1
  34. package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.js +0 -112
  35. package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.js.map +0 -1
  36. package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.d.ts +0 -3
  37. package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.d.ts.map +0 -1
  38. package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.js +0 -313
  39. package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.js.map +0 -1
  40. package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.d.ts +0 -2
  41. package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.d.ts.map +0 -1
  42. package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.js +0 -74
  43. package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.js.map +0 -1
  44. package/node_modules/@clawdlets/clf-queue/dist/queue/open.d.ts +0 -3
  45. package/node_modules/@clawdlets/clf-queue/dist/queue/open.d.ts.map +0 -1
  46. package/node_modules/@clawdlets/clf-queue/dist/queue/open.js +0 -27
  47. package/node_modules/@clawdlets/clf-queue/dist/queue/open.js.map +0 -1
  48. package/node_modules/@clawdlets/clf-queue/dist/queue/types.d.ts +0 -113
  49. package/node_modules/@clawdlets/clf-queue/dist/queue/types.d.ts.map +0 -1
  50. package/node_modules/@clawdlets/clf-queue/dist/queue/types.js +0 -2
  51. package/node_modules/@clawdlets/clf-queue/dist/queue/types.js.map +0 -1
  52. package/node_modules/@clawdlets/clf-queue/dist/queue/util.d.ts +0 -10
  53. package/node_modules/@clawdlets/clf-queue/dist/queue/util.d.ts.map +0 -1
  54. package/node_modules/@clawdlets/clf-queue/dist/queue/util.js +0 -30
  55. package/node_modules/@clawdlets/clf-queue/dist/queue/util.js.map +0 -1
  56. package/node_modules/@clawdlets/clf-queue/dist/queue.d.ts +0 -3
  57. package/node_modules/@clawdlets/clf-queue/dist/queue.d.ts.map +0 -1
  58. package/node_modules/@clawdlets/clf-queue/dist/queue.js +0 -2
  59. package/node_modules/@clawdlets/clf-queue/dist/queue.js.map +0 -1
  60. package/node_modules/@clawdlets/clf-queue/package.json +0 -36
  61. package/node_modules/@clawdlets/core/dist/lib/cattle-state.d.ts +0 -25
  62. package/node_modules/@clawdlets/core/dist/lib/cattle-state.d.ts.map +0 -1
  63. package/node_modules/@clawdlets/core/dist/lib/cattle-state.js +0 -136
  64. package/node_modules/@clawdlets/core/dist/lib/cattle-state.js.map +0 -1
  65. package/node_modules/better-sqlite3/LICENSE +0 -21
  66. package/node_modules/better-sqlite3/README.md +0 -99
  67. package/node_modules/better-sqlite3/binding.gyp +0 -38
  68. package/node_modules/better-sqlite3/deps/common.gypi +0 -68
  69. package/node_modules/better-sqlite3/deps/copy.js +0 -31
  70. package/node_modules/better-sqlite3/deps/defines.gypi +0 -41
  71. package/node_modules/better-sqlite3/deps/download.sh +0 -122
  72. package/node_modules/better-sqlite3/deps/patches/1208.patch +0 -15
  73. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +0 -265969
  74. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +0 -13968
  75. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3ext.h +0 -730
  76. package/node_modules/better-sqlite3/deps/sqlite3.gyp +0 -80
  77. package/node_modules/better-sqlite3/deps/test_extension.c +0 -21
  78. package/node_modules/better-sqlite3/lib/database.js +0 -90
  79. package/node_modules/better-sqlite3/lib/index.js +0 -3
  80. package/node_modules/better-sqlite3/lib/methods/aggregate.js +0 -43
  81. package/node_modules/better-sqlite3/lib/methods/backup.js +0 -67
  82. package/node_modules/better-sqlite3/lib/methods/function.js +0 -31
  83. package/node_modules/better-sqlite3/lib/methods/inspect.js +0 -7
  84. package/node_modules/better-sqlite3/lib/methods/pragma.js +0 -12
  85. package/node_modules/better-sqlite3/lib/methods/serialize.js +0 -16
  86. package/node_modules/better-sqlite3/lib/methods/table.js +0 -189
  87. package/node_modules/better-sqlite3/lib/methods/transaction.js +0 -78
  88. package/node_modules/better-sqlite3/lib/methods/wrappers.js +0 -54
  89. package/node_modules/better-sqlite3/lib/sqlite-error.js +0 -20
  90. package/node_modules/better-sqlite3/lib/util.js +0 -12
  91. package/node_modules/better-sqlite3/package.json +0 -59
  92. package/node_modules/better-sqlite3/src/addon.cpp +0 -47
  93. package/node_modules/better-sqlite3/src/better_sqlite3.cpp +0 -74
  94. package/node_modules/better-sqlite3/src/objects/backup.cpp +0 -120
  95. package/node_modules/better-sqlite3/src/objects/backup.hpp +0 -36
  96. package/node_modules/better-sqlite3/src/objects/database.cpp +0 -417
  97. package/node_modules/better-sqlite3/src/objects/database.hpp +0 -103
  98. package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +0 -113
  99. package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +0 -50
  100. package/node_modules/better-sqlite3/src/objects/statement.cpp +0 -383
  101. package/node_modules/better-sqlite3/src/objects/statement.hpp +0 -58
  102. package/node_modules/better-sqlite3/src/util/bind-map.cpp +0 -73
  103. package/node_modules/better-sqlite3/src/util/binder.cpp +0 -193
  104. package/node_modules/better-sqlite3/src/util/constants.cpp +0 -172
  105. package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +0 -121
  106. package/node_modules/better-sqlite3/src/util/custom-function.cpp +0 -59
  107. package/node_modules/better-sqlite3/src/util/custom-table.cpp +0 -409
  108. package/node_modules/better-sqlite3/src/util/data-converter.cpp +0 -17
  109. package/node_modules/better-sqlite3/src/util/data.cpp +0 -194
  110. package/node_modules/better-sqlite3/src/util/helpers.cpp +0 -109
  111. package/node_modules/better-sqlite3/src/util/macros.cpp +0 -70
  112. package/node_modules/better-sqlite3/src/util/query-macros.cpp +0 -71
  113. package/node_modules/better-sqlite3/src/util/row-builder.cpp +0 -49
@@ -1 +0,0 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { ClfQueue } from "./types.js";
2
- export declare function createBootstrapTokenOps(db: import("better-sqlite3").Database): Pick<ClfQueue, "createCattleBootstrapToken" | "consumeCattleBootstrapToken" | "pruneCattleBootstrapTokens">;
3
- //# sourceMappingURL=bootstrap-tokens.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrap-tokens.d.ts","sourceRoot":"","sources":["../../src/queue/bootstrap-tokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA2B,QAAQ,EAAE,MAAM,YAAY,CAAC;AAepE,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,OAAO,gBAAgB,EAAE,QAAQ,GAAG,IAAI,CAClF,QAAQ,EACR,4BAA4B,GAAG,6BAA6B,GAAG,4BAA4B,CAC5F,CAyIA"}
@@ -1,112 +0,0 @@
1
- import { randomBytes } from "node:crypto";
2
- import { isSafeEnvVarName, safeParseJson, sha256Hex } from "./util.js";
3
- export function createBootstrapTokenOps(db) {
4
- const insertBootstrapToken = db.prepare(`
5
- insert into cattle_bootstrap_tokens (
6
- token_hash, created_at, expires_at, used_at,
7
- job_id, requester, cattle_name,
8
- env_keys_json, public_env_json
9
- )
10
- values (
11
- @token_hash, @created_at, @expires_at, null,
12
- @job_id, @requester, @cattle_name,
13
- @env_keys_json, @public_env_json
14
- )
15
- `);
16
- const getBootstrapToken = db.prepare(`select * from cattle_bootstrap_tokens where token_hash = @token_hash limit 1`);
17
- const markBootstrapTokenUsed = db.prepare(`
18
- update cattle_bootstrap_tokens
19
- set used_at = @now
20
- where token_hash = @token_hash
21
- and used_at is null
22
- and expires_at > @now
23
- `);
24
- const pruneBootstrapTokens = db.prepare(`delete from cattle_bootstrap_tokens where expires_at <= @now or used_at is not null`);
25
- const createBootstrapTokenTx = db.transaction((params) => {
26
- const token = randomBytes(32).toString("hex");
27
- const tokenHash = sha256Hex(token);
28
- const expiresAt = params.now + params.ttlMs;
29
- insertBootstrapToken.run({
30
- token_hash: tokenHash,
31
- created_at: params.now,
32
- expires_at: expiresAt,
33
- job_id: params.jobId,
34
- requester: params.requester,
35
- cattle_name: params.cattleName,
36
- env_keys_json: JSON.stringify(params.envKeys),
37
- public_env_json: JSON.stringify(params.publicEnv),
38
- });
39
- return { token, expiresAt };
40
- });
41
- const consumeBootstrapTokenTx = db.transaction((params) => {
42
- const row = getBootstrapToken.get({ token_hash: params.tokenHash });
43
- if (!row)
44
- return null;
45
- if (row.used_at != null)
46
- return null;
47
- if (row.expires_at <= params.now)
48
- return null;
49
- const res = markBootstrapTokenUsed.run({ token_hash: params.tokenHash, now: params.now });
50
- if (res.changes !== 1)
51
- return null;
52
- const envKeys = safeParseJson(row.env_keys_json);
53
- const publicEnv = safeParseJson(row.public_env_json);
54
- return {
55
- jobId: row.job_id,
56
- requester: row.requester,
57
- cattleName: row.cattle_name,
58
- envKeys: Array.isArray(envKeys) ? envKeys.map((v) => String(v || "").trim()).filter(Boolean) : [],
59
- publicEnv: publicEnv && typeof publicEnv === "object" && !Array.isArray(publicEnv) ? publicEnv : {},
60
- createdAt: row.created_at,
61
- expiresAt: row.expires_at,
62
- usedAt: params.now,
63
- };
64
- });
65
- return {
66
- createCattleBootstrapToken: (params) => {
67
- const jobId = String(params.jobId || "").trim();
68
- if (!jobId)
69
- throw new Error("createCattleBootstrapToken.jobId missing");
70
- const requester = String(params.requester || "").trim();
71
- if (!requester)
72
- throw new Error("createCattleBootstrapToken.requester missing");
73
- const cattleName = String(params.cattleName || "").trim();
74
- if (!cattleName)
75
- throw new Error("createCattleBootstrapToken.cattleName missing");
76
- const envKeys = Array.from(new Set((params.envKeys || []).map((k) => String(k || "").trim()).filter(Boolean)));
77
- for (const k of envKeys) {
78
- if (!isSafeEnvVarName(k))
79
- throw new Error(`createCattleBootstrapToken.envKeys contains invalid env var name: ${k}`);
80
- }
81
- const publicEnv = {};
82
- for (const [k, v] of Object.entries(params.publicEnv || {})) {
83
- const key = String(k || "").trim();
84
- if (!key)
85
- continue;
86
- if (!isSafeEnvVarName(key))
87
- throw new Error(`createCattleBootstrapToken.publicEnv contains invalid env var name: ${key}`);
88
- if (!key.startsWith("CLAWDLETS_")) {
89
- throw new Error(`createCattleBootstrapToken.publicEnv not allowed: ${key} (public env must use CLAWDLETS_*)`);
90
- }
91
- publicEnv[key] = String(v ?? "");
92
- }
93
- const now = params.now ?? Date.now();
94
- const ttlMs = Math.max(30_000, Math.min(60 * 60_000, Math.floor(params.ttlMs ?? 10 * 60_000)));
95
- return createBootstrapTokenTx({ jobId, requester, cattleName, envKeys, publicEnv, now, ttlMs });
96
- },
97
- consumeCattleBootstrapToken: (params) => {
98
- const token = String(params.token || "").trim();
99
- if (!token)
100
- return null;
101
- const now = params.now ?? Date.now();
102
- const tokenHash = sha256Hex(token);
103
- return consumeBootstrapTokenTx({ tokenHash, now });
104
- },
105
- pruneCattleBootstrapTokens: (params) => {
106
- const now = params.now ?? Date.now();
107
- const res = pruneBootstrapTokens.run({ now });
108
- return res.changes;
109
- },
110
- };
111
- }
112
- //# sourceMappingURL=bootstrap-tokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrap-tokens.js","sourceRoot":"","sources":["../../src/queue/bootstrap-tokens.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { ClfQueue } from "./types.js";
2
- export declare function createQueueJobOps(db: import("better-sqlite3").Database): Pick<ClfQueue, "enqueue" | "get" | "list" | "claimNext" | "extendLease" | "ack" | "fail" | "cancel" | "prune">;
3
- //# sourceMappingURL=jobs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/queue/jobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAmD,MAAM,YAAY,CAAC;AA2C5F,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,gBAAgB,EAAE,QAAQ,GAAG,IAAI,CAC5E,QAAQ,EACR,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAC/F,CAyUA"}
@@ -1,313 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { computeBackoffMs, isSqliteUniqueConstraintError, safeParseJson } from "./util.js";
3
- function rowToJob(row) {
4
- return {
5
- jobId: row.job_id,
6
- kind: row.kind,
7
- payload: safeParseJson(row.payload_json),
8
- requester: row.requester,
9
- idempotencyKey: row.idempotency_key,
10
- status: row.status,
11
- priority: row.priority,
12
- runAt: row.run_at,
13
- createdAt: row.created_at,
14
- updatedAt: row.updated_at,
15
- attempt: row.attempt,
16
- maxAttempts: row.max_attempts,
17
- lockedBy: row.locked_by,
18
- leaseUntil: row.lease_until,
19
- lastError: String(row.last_error || ""),
20
- result: safeParseJson(row.result_json),
21
- };
22
- }
23
- export function createQueueJobOps(db) {
24
- const insertJob = db.prepare(`
25
- insert into jobs (
26
- job_id, kind, payload_json,
27
- requester, idempotency_key,
28
- status, priority, run_at,
29
- created_at, updated_at,
30
- attempt, max_attempts,
31
- locked_by, lease_until,
32
- last_error, result_json
33
- )
34
- values (
35
- @job_id, @kind, @payload_json,
36
- @requester, @idempotency_key,
37
- @status, @priority, @run_at,
38
- @created_at, @updated_at,
39
- @attempt, @max_attempts,
40
- null, null,
41
- '', null
42
- )
43
- `);
44
- const findByIdempotency = db.prepare(`select job_id from jobs where requester = @requester and idempotency_key = @idempotency_key limit 1`);
45
- const getJob = db.prepare(`select * from jobs where job_id = @job_id limit 1`);
46
- const listJobsBase = (filters) => {
47
- const where = [];
48
- const params = {};
49
- if (filters?.requester) {
50
- where.push("requester = @requester");
51
- params.requester = filters.requester;
52
- }
53
- if (filters?.statuses && filters.statuses.length > 0) {
54
- where.push(`status in (${filters.statuses.map((_, i) => `@s${i}`).join(",")})`);
55
- filters.statuses.forEach((s, i) => (params[`s${i}`] = s));
56
- }
57
- if (filters?.kinds && filters.kinds.length > 0) {
58
- where.push(`kind in (${filters.kinds.map((_, i) => `@k${i}`).join(",")})`);
59
- filters.kinds.forEach((k, i) => (params[`k${i}`] = k));
60
- }
61
- const whereSql = where.length > 0 ? `where ${where.join(" and ")}` : "";
62
- const limit = Math.max(1, Math.min(500, Math.floor(filters?.limit ?? 50)));
63
- params.limit = limit;
64
- return {
65
- sql: `select * from jobs ${whereSql} order by created_at desc, job_id asc limit @limit`,
66
- params,
67
- };
68
- };
69
- const selectNext = db.prepare(`
70
- select job_id
71
- from (
72
- select job_id, priority, run_at, created_at
73
- from jobs
74
- where status = 'queued' and run_at <= @now
75
- union all
76
- select job_id, priority, run_at, created_at
77
- from jobs
78
- where status = 'running' and lease_until is not null and lease_until <= @now
79
- ) ready
80
- order by priority desc, run_at asc, created_at asc, job_id asc
81
- limit 1
82
- `);
83
- const claimJob = db.prepare(`
84
- update jobs
85
- set
86
- status = 'running',
87
- locked_by = @worker_id,
88
- lease_until = @lease_until,
89
- updated_at = @now,
90
- attempt = attempt + 1
91
- where
92
- job_id = @job_id
93
- and (
94
- (status = 'queued' and run_at <= @now)
95
- or (status = 'running' and lease_until is not null and lease_until <= @now)
96
- )
97
- `);
98
- const updateLease = db.prepare(`
99
- update jobs
100
- set lease_until = @lease_until,
101
- updated_at = @now
102
- where job_id = @job_id
103
- and status = 'running'
104
- and locked_by = @worker_id
105
- `);
106
- const ackJob = db.prepare(`
107
- update jobs
108
- set
109
- status = 'done',
110
- updated_at = @now,
111
- locked_by = null,
112
- lease_until = null,
113
- result_json = @result_json
114
- where job_id = @job_id
115
- and status = 'running'
116
- and locked_by = @worker_id
117
- `);
118
- const failToRetry = db.prepare(`
119
- update jobs
120
- set
121
- status = 'queued',
122
- updated_at = @now,
123
- locked_by = null,
124
- lease_until = null,
125
- run_at = @run_at,
126
- last_error = @last_error
127
- where job_id = @job_id
128
- and status = 'running'
129
- and locked_by = @worker_id
130
- `);
131
- const failTerminal = db.prepare(`
132
- update jobs
133
- set
134
- status = 'failed',
135
- updated_at = @now,
136
- locked_by = null,
137
- lease_until = null,
138
- last_error = @last_error
139
- where job_id = @job_id
140
- and status = 'running'
141
- and locked_by = @worker_id
142
- `);
143
- const cancelJob = db.prepare(`
144
- update jobs
145
- set
146
- status = 'canceled',
147
- updated_at = @now,
148
- locked_by = null,
149
- lease_until = null
150
- where job_id = @job_id
151
- and status in ('queued','running')
152
- `);
153
- const insertEvent = db.prepare(`insert into job_events (job_id, at, type, message, attempt) values (@job_id, @at, @type, @message, @attempt)`);
154
- const pruneJobs = db.prepare(`delete from jobs where created_at < @cutoff and status in ('done','failed','canceled')`);
155
- const enqueueTx = db.transaction((params) => {
156
- if (params.idempotencyKey) {
157
- const existing = findByIdempotency.get({ requester: params.requester, idempotency_key: params.idempotencyKey });
158
- if (existing?.job_id)
159
- return { jobId: existing.job_id, deduped: true };
160
- }
161
- const jobId = randomUUID();
162
- try {
163
- insertJob.run({
164
- job_id: jobId,
165
- kind: params.kind,
166
- payload_json: JSON.stringify(params.payload ?? null),
167
- requester: params.requester,
168
- idempotency_key: params.idempotencyKey,
169
- status: "queued",
170
- priority: params.priority,
171
- run_at: params.runAt,
172
- created_at: params.now,
173
- updated_at: params.now,
174
- attempt: 0,
175
- max_attempts: params.maxAttempts,
176
- });
177
- }
178
- catch (e) {
179
- if (params.idempotencyKey && isSqliteUniqueConstraintError(e)) {
180
- const existing = findByIdempotency.get({ requester: params.requester, idempotency_key: params.idempotencyKey });
181
- if (existing?.job_id)
182
- return { jobId: existing.job_id, deduped: true };
183
- }
184
- throw e;
185
- }
186
- insertEvent.run({ job_id: jobId, at: params.now, type: "enqueue", message: "", attempt: 0 });
187
- return { jobId, deduped: false };
188
- });
189
- const claimTx = db.transaction((params) => {
190
- const picked = selectNext.get({ now: params.now });
191
- if (!picked?.job_id)
192
- return null;
193
- const leaseUntil = params.now + params.leaseMs;
194
- const res = claimJob.run({ job_id: picked.job_id, now: params.now, worker_id: params.workerId, lease_until: leaseUntil });
195
- if (res.changes !== 1)
196
- return null;
197
- const row = getJob.get({ job_id: picked.job_id });
198
- if (!row)
199
- return null;
200
- insertEvent.run({ job_id: picked.job_id, at: params.now, type: "claim", message: params.workerId, attempt: row.attempt });
201
- return rowToJob(row);
202
- });
203
- return {
204
- enqueue: (params) => {
205
- const kind = String(params.kind || "").trim();
206
- if (!kind)
207
- throw new Error("enqueue.kind missing");
208
- const requester = String(params.requester || "").trim();
209
- if (!requester)
210
- throw new Error("enqueue.requester missing");
211
- const idempotencyKey = String(params.idempotencyKey || "").trim();
212
- const now = Date.now();
213
- const runAt = Number.isFinite(params.runAt) && params.runAt > 0 ? Math.floor(params.runAt) : now;
214
- const priority = Number.isFinite(params.priority) ? Math.floor(params.priority) : 0;
215
- const maxAttempts = Number.isFinite(params.maxAttempts) && params.maxAttempts > 0 ? Math.floor(params.maxAttempts) : 1;
216
- return enqueueTx({ kind, payload: params.payload ?? null, requester, idempotencyKey, runAt, priority, maxAttempts, now });
217
- },
218
- get: (jobId) => {
219
- const v = String(jobId || "").trim();
220
- if (!v)
221
- return null;
222
- const row = getJob.get({ job_id: v });
223
- return row ? rowToJob(row) : null;
224
- },
225
- list: (filters) => {
226
- const { sql, params } = listJobsBase(filters);
227
- const stmt = db.prepare(sql);
228
- return stmt.all(params).map(rowToJob);
229
- },
230
- claimNext: (params) => {
231
- const workerId = String(params.workerId || "").trim();
232
- if (!workerId)
233
- throw new Error("claimNext.workerId missing");
234
- const now = params.now ?? Date.now();
235
- const leaseMs = Math.max(5_000, Math.min(60 * 60_000, Math.floor(params.leaseMs ?? 120_000)));
236
- return claimTx({ workerId, now, leaseMs });
237
- },
238
- extendLease: (params) => {
239
- const jobId = String(params.jobId || "").trim();
240
- const workerId = String(params.workerId || "").trim();
241
- if (!jobId || !workerId)
242
- return false;
243
- const now = Date.now();
244
- const res = updateLease.run({ job_id: jobId, worker_id: workerId, lease_until: params.leaseUntil, now });
245
- return res.changes === 1;
246
- },
247
- ack: (params) => {
248
- const jobId = String(params.jobId || "").trim();
249
- const workerId = String(params.workerId || "").trim();
250
- if (!jobId || !workerId)
251
- return false;
252
- const now = params.now ?? Date.now();
253
- const row = getJob.get({ job_id: jobId });
254
- if (!row)
255
- return false;
256
- const res = ackJob.run({ job_id: jobId, worker_id: workerId, now, result_json: JSON.stringify(params.result ?? null) });
257
- if (res.changes === 1)
258
- insertEvent.run({ job_id: jobId, at: now, type: "ack", message: "", attempt: row.attempt });
259
- return res.changes === 1;
260
- },
261
- fail: (params) => {
262
- const jobId = String(params.jobId || "").trim();
263
- const workerId = String(params.workerId || "").trim();
264
- if (!jobId || !workerId)
265
- return null;
266
- const now = params.now ?? Date.now();
267
- const row = getJob.get({ job_id: jobId });
268
- if (!row)
269
- return null;
270
- const err = String(params.error || "").trim() || "unknown error";
271
- const attempt = Math.max(1, row.attempt);
272
- const maxAttempts = Math.max(1, row.max_attempts);
273
- if (attempt < maxAttempts) {
274
- const baseMs = params.retry?.baseMs ?? 5_000;
275
- const maxMs = params.retry?.maxMs ?? 5 * 60_000;
276
- const delay = computeBackoffMs({ attempt, baseMs, maxMs });
277
- const res = failToRetry.run({ job_id: jobId, worker_id: workerId, now, run_at: now + delay, last_error: err });
278
- if (res.changes === 1) {
279
- insertEvent.run({ job_id: jobId, at: now, type: "retry", message: err, attempt });
280
- return { status: "queued" };
281
- }
282
- return null;
283
- }
284
- const res = failTerminal.run({ job_id: jobId, worker_id: workerId, now, last_error: err });
285
- if (res.changes === 1) {
286
- insertEvent.run({ job_id: jobId, at: now, type: "fail", message: err, attempt });
287
- return { status: "failed" };
288
- }
289
- return null;
290
- },
291
- cancel: (params) => {
292
- const jobId = String(params.jobId || "").trim();
293
- if (!jobId)
294
- return false;
295
- const now = params.now ?? Date.now();
296
- const row = getJob.get({ job_id: jobId });
297
- if (!row)
298
- return false;
299
- const res = cancelJob.run({ job_id: jobId, now });
300
- if (res.changes === 1)
301
- insertEvent.run({ job_id: jobId, at: now, type: "cancel", message: "", attempt: row.attempt });
302
- return res.changes === 1;
303
- },
304
- prune: (params) => {
305
- const now = params.now ?? Date.now();
306
- const keepDays = Math.max(1, Math.floor(params.keepDays));
307
- const cutoff = now - keepDays * 86400_000;
308
- const res = pruneJobs.run({ cutoff });
309
- return res.changes;
310
- },
311
- };
312
- }
313
- //# sourceMappingURL=jobs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/queue/jobs.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function migrateClfQueue(db: import("better-sqlite3").Database): void;
2
- //# sourceMappingURL=migrate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/queue/migrate.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,gBAAgB,EAAE,QAAQ,GAAG,IAAI,CA0E3E"}
@@ -1,74 +0,0 @@
1
- export function migrateClfQueue(db) {
2
- let version = db.pragma("user_version", { simple: true });
3
- if (version === 0) {
4
- db.exec(`
5
- pragma foreign_keys = on;
6
-
7
- create table jobs (
8
- job_id text primary key,
9
- kind text not null,
10
- payload_json text not null,
11
- requester text not null,
12
- idempotency_key text not null,
13
- status text not null,
14
- priority integer not null,
15
- run_at integer not null,
16
- created_at integer not null,
17
- updated_at integer not null,
18
- attempt integer not null,
19
- max_attempts integer not null,
20
- locked_by text,
21
- lease_until integer,
22
- last_error text,
23
- result_json text
24
- );
25
-
26
- create unique index jobs_by_idempotency on jobs(requester, idempotency_key) where idempotency_key != '';
27
- create index jobs_by_status_run_at on jobs(status, run_at);
28
- create index jobs_by_requester on jobs(requester, created_at desc);
29
- create index jobs_by_kind on jobs(kind, created_at desc);
30
-
31
- create table job_events (
32
- id integer primary key autoincrement,
33
- job_id text not null,
34
- at integer not null,
35
- type text not null,
36
- message text not null,
37
- attempt integer not null,
38
- foreign key(job_id) references jobs(job_id) on delete cascade
39
- );
40
- create index job_events_by_job_id on job_events(job_id, at);
41
- `);
42
- db.pragma("user_version = 1");
43
- version = 1;
44
- }
45
- if (version === 1) {
46
- db.exec(`
47
- create table cattle_bootstrap_tokens (
48
- token_hash text primary key,
49
- created_at integer not null,
50
- expires_at integer not null,
51
- used_at integer,
52
- job_id text not null,
53
- requester text not null,
54
- cattle_name text not null,
55
- env_keys_json text not null,
56
- public_env_json text not null
57
- );
58
- create index cattle_bootstrap_tokens_by_expires_at on cattle_bootstrap_tokens(expires_at);
59
- create index cattle_bootstrap_tokens_by_job_id on cattle_bootstrap_tokens(job_id);
60
- `);
61
- db.pragma("user_version = 2");
62
- version = 2;
63
- }
64
- if (version === 2) {
65
- db.exec(`
66
- create index jobs_by_status_lease_until on jobs(status, lease_until);
67
- `);
68
- db.pragma("user_version = 3");
69
- version = 3;
70
- }
71
- if (version !== 3)
72
- throw new Error(`unsupported clf queue schema version: ${version}`);
73
- }
74
- //# sourceMappingURL=migrate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/queue/migrate.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,EAAqC;IACnE,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAW,CAAC;IACpE,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAqCP,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;KAcP,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,EAAE,CAAC,IAAI,CAAC;;KAEP,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;AACzF,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { ClfQueue } from "./types.js";
2
- export declare function openClfQueue(dbPath: string): ClfQueue;
3
- //# sourceMappingURL=open.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/queue/open.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAS3C,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAoBrD"}
@@ -1,27 +0,0 @@
1
- import path from "node:path";
2
- import process from "node:process";
3
- import { createRequire } from "node:module";
4
- import { ensurePrivateDir, ensurePrivateFile } from "@clawdlets/core/lib/fs-private";
5
- import { migrateClfQueue } from "./migrate.js";
6
- import { createQueueJobOps } from "./jobs.js";
7
- import { createBootstrapTokenOps } from "./bootstrap-tokens.js";
8
- const require = createRequire(import.meta.url);
9
- const BetterSqlite3 = require("better-sqlite3");
10
- export function openClfQueue(dbPath) {
11
- const abs = path.isAbsolute(dbPath) ? dbPath : path.resolve(process.cwd(), dbPath);
12
- ensurePrivateDir(path.dirname(abs));
13
- const db = new BetterSqlite3(abs);
14
- ensurePrivateFile(abs);
15
- db.pragma("journal_mode = WAL");
16
- db.pragma("synchronous = NORMAL");
17
- db.pragma("foreign_keys = ON");
18
- migrateClfQueue(db);
19
- const jobs = createQueueJobOps(db);
20
- const tokens = createBootstrapTokenOps(db);
21
- return {
22
- close: () => db.close(),
23
- ...jobs,
24
- ...tokens,
25
- };
26
- }
27
- //# sourceMappingURL=open.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/queue/open.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAoC,CAAC;AAEnF,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACnF,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpC,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IAClC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,eAAe,CAAC,EAAE,CAAC,CAAC;IAEpB,MAAM,IAAI,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAE3C,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;QACvB,GAAG,IAAI;QACP,GAAG,MAAM;KACV,CAAC;AACJ,CAAC"}