@arjunkhera/atlas 0.3.34 → 0.3.37
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/.claude-plugin/plugin.json +1 -1
- package/door/kit-releases.json +4 -0
- package/package.json +1 -1
- package/shape/check.mjs +77 -25
- package/shape/releases.json +5 -0
- package/tests/model.mjs +6 -3
package/door/kit-releases.json
CHANGED
|
@@ -32,6 +32,10 @@
|
|
|
32
32
|
{
|
|
33
33
|
"kit_sha256": "c4a506ec261d2d2fd7884943c9d317fb7b522704f4f63669b5bd37d32326bde5",
|
|
34
34
|
"first_package": "0.3.32"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"kit_sha256": "b5c36f685ba476e09a54e3207e2444b098cc6a26dded8dca65b01e751fe2cbe4",
|
|
38
|
+
"first_package": "0.3.34"
|
|
35
39
|
}
|
|
36
40
|
]
|
|
37
41
|
}
|
package/package.json
CHANGED
package/shape/check.mjs
CHANGED
|
@@ -34,7 +34,7 @@ export const sha256 = (text) => createHash('sha256').update(String(text ?? ''),
|
|
|
34
34
|
// Whether a copy is current or behind is not decided here. CI has no package
|
|
35
35
|
// and no network. The session verb decides it, from the release list that
|
|
36
36
|
// ships beside this file in the package, shape/releases.json.
|
|
37
|
-
export const CHECK_VERSION =
|
|
37
|
+
export const CHECK_VERSION = 4;
|
|
38
38
|
|
|
39
39
|
// ---------------------------------------------------------------------------
|
|
40
40
|
// The spec. One object per version. The check reads a version it has here and
|
|
@@ -55,7 +55,9 @@ export const SPEC_1 = {
|
|
|
55
55
|
"kinds": {
|
|
56
56
|
"service": "A running product with a deploy target, logs and metrics.",
|
|
57
57
|
"library": "Code another repo takes as a dependency. It is not deployed.",
|
|
58
|
-
"schema": "Migrations and their release. It has no service and no library build."
|
|
58
|
+
"schema": "Migrations and their release. It has no service and no library build.",
|
|
59
|
+
"plugin": "A Claude Code plugin. It is installed, not deployed, and the merge proves it.",
|
|
60
|
+
"cli": "A command-line tool people install. It is not deployed."
|
|
59
61
|
},
|
|
60
62
|
"files": [
|
|
61
63
|
{
|
|
@@ -72,7 +74,9 @@ export const SPEC_1 = {
|
|
|
72
74
|
"kind": {
|
|
73
75
|
"service": "required",
|
|
74
76
|
"library": "required",
|
|
75
|
-
"schema": "required"
|
|
77
|
+
"schema": "required",
|
|
78
|
+
"plugin": "required",
|
|
79
|
+
"cli": "required"
|
|
76
80
|
},
|
|
77
81
|
"check": "markdown",
|
|
78
82
|
"max_lines": 200
|
|
@@ -84,7 +88,9 @@ export const SPEC_1 = {
|
|
|
84
88
|
"kind": {
|
|
85
89
|
"service": "required",
|
|
86
90
|
"library": "required",
|
|
87
|
-
"schema": "required"
|
|
91
|
+
"schema": "required",
|
|
92
|
+
"plugin": "required",
|
|
93
|
+
"cli": "required"
|
|
88
94
|
},
|
|
89
95
|
"check": "markdown",
|
|
90
96
|
"max_lines": 200
|
|
@@ -106,7 +112,9 @@ export const SPEC_1 = {
|
|
|
106
112
|
"kind": {
|
|
107
113
|
"service": "optional",
|
|
108
114
|
"library": "optional",
|
|
109
|
-
"schema": "optional"
|
|
115
|
+
"schema": "optional",
|
|
116
|
+
"plugin": "optional",
|
|
117
|
+
"cli": "optional"
|
|
110
118
|
},
|
|
111
119
|
"check": "path-rules"
|
|
112
120
|
}
|
|
@@ -126,7 +134,9 @@ export const SPEC_1 = {
|
|
|
126
134
|
"kind": {
|
|
127
135
|
"service": "required",
|
|
128
136
|
"library": "not applicable",
|
|
129
|
-
"schema": "not applicable"
|
|
137
|
+
"schema": "not applicable",
|
|
138
|
+
"plugin": "not applicable",
|
|
139
|
+
"cli": "not applicable"
|
|
130
140
|
},
|
|
131
141
|
"check": "procedure"
|
|
132
142
|
},
|
|
@@ -137,7 +147,9 @@ export const SPEC_1 = {
|
|
|
137
147
|
"kind": {
|
|
138
148
|
"service": "required",
|
|
139
149
|
"library": "required",
|
|
140
|
-
"schema": "not applicable"
|
|
150
|
+
"schema": "not applicable",
|
|
151
|
+
"plugin": "required",
|
|
152
|
+
"cli": "required"
|
|
141
153
|
},
|
|
142
154
|
"check": "procedure"
|
|
143
155
|
},
|
|
@@ -148,7 +160,9 @@ export const SPEC_1 = {
|
|
|
148
160
|
"kind": {
|
|
149
161
|
"service": "required",
|
|
150
162
|
"library": "not applicable",
|
|
151
|
-
"schema": "not applicable"
|
|
163
|
+
"schema": "not applicable",
|
|
164
|
+
"plugin": "not applicable",
|
|
165
|
+
"cli": "not applicable"
|
|
152
166
|
},
|
|
153
167
|
"check": "procedure"
|
|
154
168
|
},
|
|
@@ -159,7 +173,9 @@ export const SPEC_1 = {
|
|
|
159
173
|
"kind": {
|
|
160
174
|
"service": "required",
|
|
161
175
|
"library": "required",
|
|
162
|
-
"schema": "required"
|
|
176
|
+
"schema": "required",
|
|
177
|
+
"plugin": "required",
|
|
178
|
+
"cli": "required"
|
|
163
179
|
},
|
|
164
180
|
"check": "procedure"
|
|
165
181
|
}
|
|
@@ -179,7 +195,9 @@ export const SPEC_1 = {
|
|
|
179
195
|
"kind": {
|
|
180
196
|
"service": "required",
|
|
181
197
|
"library": "required",
|
|
182
|
-
"schema": "required"
|
|
198
|
+
"schema": "required",
|
|
199
|
+
"plugin": "required",
|
|
200
|
+
"cli": "required"
|
|
183
201
|
},
|
|
184
202
|
"check": "facts-root",
|
|
185
203
|
"keys": [
|
|
@@ -197,7 +215,9 @@ export const SPEC_1 = {
|
|
|
197
215
|
"kind": {
|
|
198
216
|
"service": "required",
|
|
199
217
|
"library": "not applicable",
|
|
200
|
-
"schema": "not applicable"
|
|
218
|
+
"schema": "not applicable",
|
|
219
|
+
"plugin": "not applicable",
|
|
220
|
+
"cli": "not applicable"
|
|
201
221
|
},
|
|
202
222
|
"check": "facts-section",
|
|
203
223
|
"keys": [
|
|
@@ -212,7 +232,9 @@ export const SPEC_1 = {
|
|
|
212
232
|
"kind": {
|
|
213
233
|
"service": "required",
|
|
214
234
|
"library": "not applicable",
|
|
215
|
-
"schema": "not applicable"
|
|
235
|
+
"schema": "not applicable",
|
|
236
|
+
"plugin": "not applicable",
|
|
237
|
+
"cli": "not applicable"
|
|
216
238
|
},
|
|
217
239
|
"check": "facts-section",
|
|
218
240
|
"keys": [
|
|
@@ -227,7 +249,9 @@ export const SPEC_1 = {
|
|
|
227
249
|
"kind": {
|
|
228
250
|
"service": "required",
|
|
229
251
|
"library": "not applicable",
|
|
230
|
-
"schema": "required"
|
|
252
|
+
"schema": "required",
|
|
253
|
+
"plugin": "optional",
|
|
254
|
+
"cli": "optional"
|
|
231
255
|
},
|
|
232
256
|
"check": "facts-credentials",
|
|
233
257
|
"keys": [
|
|
@@ -242,7 +266,9 @@ export const SPEC_1 = {
|
|
|
242
266
|
"kind": {
|
|
243
267
|
"service": "required",
|
|
244
268
|
"library": "optional",
|
|
245
|
-
"schema": "optional"
|
|
269
|
+
"schema": "optional",
|
|
270
|
+
"plugin": "optional",
|
|
271
|
+
"cli": "optional"
|
|
246
272
|
},
|
|
247
273
|
"check": "facts-section",
|
|
248
274
|
"keys_present": [
|
|
@@ -257,7 +283,9 @@ export const SPEC_1 = {
|
|
|
257
283
|
"kind": {
|
|
258
284
|
"service": "optional",
|
|
259
285
|
"library": "optional",
|
|
260
|
-
"schema": "optional"
|
|
286
|
+
"schema": "optional",
|
|
287
|
+
"plugin": "optional",
|
|
288
|
+
"cli": "optional"
|
|
261
289
|
},
|
|
262
290
|
"check": "facts-section",
|
|
263
291
|
"keys": [
|
|
@@ -280,7 +308,9 @@ export const SPEC_1 = {
|
|
|
280
308
|
"kind": {
|
|
281
309
|
"service": "required",
|
|
282
310
|
"library": "required",
|
|
283
|
-
"schema": "required"
|
|
311
|
+
"schema": "required",
|
|
312
|
+
"plugin": "required",
|
|
313
|
+
"cli": "required"
|
|
284
314
|
},
|
|
285
315
|
"check": "docs-index"
|
|
286
316
|
}
|
|
@@ -301,7 +331,9 @@ export const SPEC_1 = {
|
|
|
301
331
|
"kind": {
|
|
302
332
|
"service": "required",
|
|
303
333
|
"library": "optional",
|
|
304
|
-
"schema": "optional"
|
|
334
|
+
"schema": "optional",
|
|
335
|
+
"plugin": "optional",
|
|
336
|
+
"cli": "optional"
|
|
305
337
|
},
|
|
306
338
|
"check": "docs-pages"
|
|
307
339
|
},
|
|
@@ -312,7 +344,9 @@ export const SPEC_1 = {
|
|
|
312
344
|
"kind": {
|
|
313
345
|
"service": "required",
|
|
314
346
|
"library": "optional",
|
|
315
|
-
"schema": "optional"
|
|
347
|
+
"schema": "optional",
|
|
348
|
+
"plugin": "optional",
|
|
349
|
+
"cli": "optional"
|
|
316
350
|
},
|
|
317
351
|
"check": "features"
|
|
318
352
|
},
|
|
@@ -324,7 +358,9 @@ export const SPEC_1 = {
|
|
|
324
358
|
"kind": {
|
|
325
359
|
"service": "optional",
|
|
326
360
|
"library": "optional",
|
|
327
|
-
"schema": "optional"
|
|
361
|
+
"schema": "optional",
|
|
362
|
+
"plugin": "optional",
|
|
363
|
+
"cli": "optional"
|
|
328
364
|
},
|
|
329
365
|
"check": "notes"
|
|
330
366
|
},
|
|
@@ -335,7 +371,9 @@ export const SPEC_1 = {
|
|
|
335
371
|
"kind": {
|
|
336
372
|
"service": "required",
|
|
337
373
|
"library": "not applicable",
|
|
338
|
-
"schema": "not applicable"
|
|
374
|
+
"schema": "not applicable",
|
|
375
|
+
"plugin": "not applicable",
|
|
376
|
+
"cli": "not applicable"
|
|
339
377
|
},
|
|
340
378
|
"check": "generated",
|
|
341
379
|
"extractor": "routes"
|
|
@@ -347,7 +385,9 @@ export const SPEC_1 = {
|
|
|
347
385
|
"kind": {
|
|
348
386
|
"service": "required",
|
|
349
387
|
"library": "not applicable",
|
|
350
|
-
"schema": "required"
|
|
388
|
+
"schema": "required",
|
|
389
|
+
"plugin": "not applicable",
|
|
390
|
+
"cli": "not applicable"
|
|
351
391
|
},
|
|
352
392
|
"check": "generated",
|
|
353
393
|
"extractor": "migrations"
|
|
@@ -359,7 +399,9 @@ export const SPEC_1 = {
|
|
|
359
399
|
"kind": {
|
|
360
400
|
"service": "optional",
|
|
361
401
|
"library": "optional",
|
|
362
|
-
"schema": "optional"
|
|
402
|
+
"schema": "optional",
|
|
403
|
+
"plugin": "optional",
|
|
404
|
+
"cli": "optional"
|
|
363
405
|
},
|
|
364
406
|
"check": "generated",
|
|
365
407
|
"extractor": "mcp"
|
|
@@ -380,7 +422,9 @@ export const SPEC_1 = {
|
|
|
380
422
|
"kind": {
|
|
381
423
|
"service": "required",
|
|
382
424
|
"library": "required",
|
|
383
|
-
"schema": "required"
|
|
425
|
+
"schema": "required",
|
|
426
|
+
"plugin": "required",
|
|
427
|
+
"cli": "required"
|
|
384
428
|
},
|
|
385
429
|
"check": "workflow"
|
|
386
430
|
},
|
|
@@ -390,7 +434,9 @@ export const SPEC_1 = {
|
|
|
390
434
|
"kind": {
|
|
391
435
|
"service": "optional",
|
|
392
436
|
"library": "optional",
|
|
393
|
-
"schema": "optional"
|
|
437
|
+
"schema": "optional",
|
|
438
|
+
"plugin": "optional",
|
|
439
|
+
"cli": "optional"
|
|
394
440
|
},
|
|
395
441
|
"check": "linters",
|
|
396
442
|
"candidates": [
|
|
@@ -458,6 +504,12 @@ deepFreeze(SPEC_1);
|
|
|
458
504
|
//
|
|
459
505
|
// Nothing else moves. Spec 1 keeps its twenty-two parts, and spec 2 has
|
|
460
506
|
// twenty-three.
|
|
507
|
+
//
|
|
508
|
+
// Check version 4 adds two kinds, plugin and cli, to both specs (issue #141).
|
|
509
|
+
// No cell of an older kind moves, so a repo that names service, library or
|
|
510
|
+
// schema reads the same table as before. The kind is now a second coupling
|
|
511
|
+
// beside the spec version: a repo that names plugin or cli needs check 4 or
|
|
512
|
+
// later. Stage 2 of the target design retires these fixed tables.
|
|
461
513
|
const clone = (value) => JSON.parse(JSON.stringify(value));
|
|
462
514
|
|
|
463
515
|
export const SPEC_2 = (() => {
|
|
@@ -471,7 +523,7 @@ export const SPEC_2 = (() => {
|
|
|
471
523
|
// declared below it. A test keeps the two equal.
|
|
472
524
|
path: '.github/atlas/check.mjs',
|
|
473
525
|
holds: 'The check itself, the copy this repo runs. One file, no dependency, carrying the Atlas version and the package commit it came from.',
|
|
474
|
-
kind: { service: 'required', library: 'required', schema: 'required' },
|
|
526
|
+
kind: { service: 'required', library: 'required', schema: 'required', plugin: 'required', cli: 'required' },
|
|
475
527
|
check: 'check-file',
|
|
476
528
|
});
|
|
477
529
|
return deepFreeze(spec);
|
package/shape/releases.json
CHANGED
|
@@ -15,6 +15,11 @@
|
|
|
15
15
|
"check_version": 3,
|
|
16
16
|
"sha256": "0184db66fd5d5061c21ee7d2d88395b5bac64ab1308e02e06781e6015f3d7608",
|
|
17
17
|
"first_package": "0.3.0"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"check_version": 4,
|
|
21
|
+
"sha256": "3357ea247694634c3535998368683eceffaf863221dee5fec9e43a03042afb95",
|
|
22
|
+
"first_package": "0.3.36"
|
|
18
23
|
}
|
|
19
24
|
]
|
|
20
25
|
}
|
package/tests/model.mjs
CHANGED
|
@@ -289,11 +289,14 @@ export async function runClaude({ prompt, args = [], key, cwd, meter, what, reda
|
|
|
289
289
|
// A call with no cost in its answer counts its whole hold: the meter never guesses low. The hold is at
|
|
290
290
|
// most a quarter of the cap, so one bad call does not end the night.
|
|
291
291
|
meter.add(Number.isFinite(cost) ? cost : left, what, id);
|
|
292
|
-
if (!envelope) throw new Error(`${what}: the model command gave no answer (exit ${out.exit}): ${(redactor ? redactor.text(out.stderr || out.stdout) : out.stderr || out.stdout).slice(0, 400)}`);
|
|
293
292
|
const clean = (t) => (redactor ? redactor.text(t) : t);
|
|
293
|
+
// No answer at all: the command could not run (a missing binary, say). That is no product result
|
|
294
|
+
// either, so it reads blocked, and the log shows what the command printed.
|
|
295
|
+
if (!envelope) throw new Blocked(`${what}: the model command gave no answer (exit ${out.exit}): ${clean(String(out.stderr || out.stdout).trim()).slice(0, 400)}`);
|
|
294
296
|
// An error answer with no cost never reached the model: a refused sign-in, no credit, a bad model
|
|
295
|
-
// name. The scenario cannot pass or fail on it, so it
|
|
296
|
-
|
|
297
|
+
// name. Newer claude commands give a cost of 0 there. The scenario cannot pass or fail on it, so it
|
|
298
|
+
// reads blocked, with the reason.
|
|
299
|
+
if (envelope.is_error && !(cost > 0)) throw new Blocked(`${what}: the model call failed before the model answered: ${clean(String(envelope.result ?? envelope.error ?? (out.stderr || out.stdout))).slice(0, 400)}`);
|
|
297
300
|
if (out.signal === 'SIGKILL') throw new Error(`${what}: the model call ran past ${Math.round(timeoutMs / 1000)} seconds and was stopped`);
|
|
298
301
|
return { exit: out.exit, stdout: clean(out.stdout), stderr: clean(out.stderr), envelope, events, cost: Number.isFinite(cost) ? cost : null };
|
|
299
302
|
} finally {
|