@1aboveio/skills 0.21.0 → 0.21.1
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 +7 -5
- package/package.json +1 -1
- package/runtime/skills/distribution/generated/recipes.json +23 -23
- package/runtime/skills/distribution/scripts/bundles.mjs +37 -9
- package/runtime/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
- package/skills/engineering/engineering-runtime/coherence/workflow.json +13 -13
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +1 -1
package/README.md
CHANGED
|
@@ -101,11 +101,13 @@ non-interactively.
|
|
|
101
101
|
Declined skills are never uninstalled by the coordinator and stay out of the remembered acceptance,
|
|
102
102
|
so the next update asks again.
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
104
|
+
Every `install` and `update` scans the managed global root for exact manifest-declared retired
|
|
105
|
+
skills. A selected former group may first make the replacement current; outside the selection, a
|
|
106
|
+
leftover is eligible only when its replacement was already installed and matches this release.
|
|
107
|
+
For each eligible leftover, the coordinator will archive it by default through the pinned
|
|
108
|
+
native Skills CLI. An interactive prompt defaults to Yes; non-interactive runs archive without
|
|
109
|
+
`--yes`. Missing or modified unselected
|
|
110
|
+
replacements stay untouched. Declined or failed archival remains available for a later run.
|
|
109
111
|
|
|
110
112
|
Install and update are best-effort per member over bulk source commands: they continue after a
|
|
111
113
|
member failure except for skills whose required dependency is unavailable, summarize
|
package/package.json
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"id": "first-party",
|
|
25
25
|
"type": "first-party",
|
|
26
26
|
"package": "@1aboveio/skills",
|
|
27
|
-
"version": "0.21.
|
|
27
|
+
"version": "0.21.1",
|
|
28
28
|
"updatePolicy": "pinned-npm-version",
|
|
29
29
|
"members": [
|
|
30
30
|
{
|
|
@@ -293,7 +293,7 @@
|
|
|
293
293
|
"sourceId": "first-party",
|
|
294
294
|
"sourceType": "first-party",
|
|
295
295
|
"package": "@1aboveio/skills",
|
|
296
|
-
"version": "0.21.
|
|
296
|
+
"version": "0.21.1",
|
|
297
297
|
"installPath": null,
|
|
298
298
|
"members": [
|
|
299
299
|
"harness-runtime",
|
|
@@ -327,7 +327,7 @@
|
|
|
327
327
|
"sourceId": "first-party",
|
|
328
328
|
"sourceType": "first-party",
|
|
329
329
|
"package": "@1aboveio/skills",
|
|
330
|
-
"version": "0.21.
|
|
330
|
+
"version": "0.21.1",
|
|
331
331
|
"installPath": null,
|
|
332
332
|
"members": [
|
|
333
333
|
"harness-runtime",
|
|
@@ -371,7 +371,7 @@
|
|
|
371
371
|
"sourceId": "first-party",
|
|
372
372
|
"sourceType": "first-party",
|
|
373
373
|
"package": "@1aboveio/skills",
|
|
374
|
-
"version": "0.21.
|
|
374
|
+
"version": "0.21.1",
|
|
375
375
|
"installPath": null,
|
|
376
376
|
"members": [
|
|
377
377
|
"harness-runtime",
|
|
@@ -404,7 +404,7 @@
|
|
|
404
404
|
"sourceId": "first-party",
|
|
405
405
|
"sourceType": "first-party",
|
|
406
406
|
"package": "@1aboveio/skills",
|
|
407
|
-
"version": "0.21.
|
|
407
|
+
"version": "0.21.1",
|
|
408
408
|
"installPath": null,
|
|
409
409
|
"members": [
|
|
410
410
|
"harness-runtime",
|
|
@@ -447,7 +447,7 @@
|
|
|
447
447
|
"sourceId": "first-party",
|
|
448
448
|
"sourceType": "first-party",
|
|
449
449
|
"package": "@1aboveio/skills",
|
|
450
|
-
"version": "0.21.
|
|
450
|
+
"version": "0.21.1",
|
|
451
451
|
"installPath": null,
|
|
452
452
|
"members": [
|
|
453
453
|
"harness-runtime",
|
|
@@ -475,7 +475,7 @@
|
|
|
475
475
|
"sourceId": "first-party",
|
|
476
476
|
"sourceType": "first-party",
|
|
477
477
|
"package": "@1aboveio/skills",
|
|
478
|
-
"version": "0.21.
|
|
478
|
+
"version": "0.21.1",
|
|
479
479
|
"installPath": null,
|
|
480
480
|
"members": [
|
|
481
481
|
"harness-runtime",
|
|
@@ -513,7 +513,7 @@
|
|
|
513
513
|
"sourceId": "first-party",
|
|
514
514
|
"sourceType": "first-party",
|
|
515
515
|
"package": "@1aboveio/skills",
|
|
516
|
-
"version": "0.21.
|
|
516
|
+
"version": "0.21.1",
|
|
517
517
|
"installPath": null,
|
|
518
518
|
"members": [
|
|
519
519
|
"harness-runtime",
|
|
@@ -541,7 +541,7 @@
|
|
|
541
541
|
"sourceId": "first-party",
|
|
542
542
|
"sourceType": "first-party",
|
|
543
543
|
"package": "@1aboveio/skills",
|
|
544
|
-
"version": "0.21.
|
|
544
|
+
"version": "0.21.1",
|
|
545
545
|
"installPath": null,
|
|
546
546
|
"members": [
|
|
547
547
|
"harness-runtime",
|
|
@@ -579,7 +579,7 @@
|
|
|
579
579
|
"sourceId": "first-party",
|
|
580
580
|
"sourceType": "first-party",
|
|
581
581
|
"package": "@1aboveio/skills",
|
|
582
|
-
"version": "0.21.
|
|
582
|
+
"version": "0.21.1",
|
|
583
583
|
"installPath": null,
|
|
584
584
|
"members": [
|
|
585
585
|
"harness-runtime",
|
|
@@ -609,7 +609,7 @@
|
|
|
609
609
|
"sourceId": "first-party",
|
|
610
610
|
"sourceType": "first-party",
|
|
611
611
|
"package": "@1aboveio/skills",
|
|
612
|
-
"version": "0.21.
|
|
612
|
+
"version": "0.21.1",
|
|
613
613
|
"installPath": null,
|
|
614
614
|
"members": [
|
|
615
615
|
"harness-runtime",
|
|
@@ -649,7 +649,7 @@
|
|
|
649
649
|
"sourceId": "first-party",
|
|
650
650
|
"sourceType": "first-party",
|
|
651
651
|
"package": "@1aboveio/skills",
|
|
652
|
-
"version": "0.21.
|
|
652
|
+
"version": "0.21.1",
|
|
653
653
|
"installPath": null,
|
|
654
654
|
"members": [
|
|
655
655
|
"harness-runtime",
|
|
@@ -677,7 +677,7 @@
|
|
|
677
677
|
"sourceId": "first-party",
|
|
678
678
|
"sourceType": "first-party",
|
|
679
679
|
"package": "@1aboveio/skills",
|
|
680
|
-
"version": "0.21.
|
|
680
|
+
"version": "0.21.1",
|
|
681
681
|
"installPath": null,
|
|
682
682
|
"members": [
|
|
683
683
|
"harness-runtime",
|
|
@@ -715,7 +715,7 @@
|
|
|
715
715
|
"sourceId": "first-party",
|
|
716
716
|
"sourceType": "first-party",
|
|
717
717
|
"package": "@1aboveio/skills",
|
|
718
|
-
"version": "0.21.
|
|
718
|
+
"version": "0.21.1",
|
|
719
719
|
"installPath": null,
|
|
720
720
|
"members": [
|
|
721
721
|
"harness-runtime",
|
|
@@ -745,7 +745,7 @@
|
|
|
745
745
|
"sourceId": "first-party",
|
|
746
746
|
"sourceType": "first-party",
|
|
747
747
|
"package": "@1aboveio/skills",
|
|
748
|
-
"version": "0.21.
|
|
748
|
+
"version": "0.21.1",
|
|
749
749
|
"installPath": null,
|
|
750
750
|
"members": [
|
|
751
751
|
"harness-runtime",
|
|
@@ -785,7 +785,7 @@
|
|
|
785
785
|
"sourceId": "first-party",
|
|
786
786
|
"sourceType": "first-party",
|
|
787
787
|
"package": "@1aboveio/skills",
|
|
788
|
-
"version": "0.21.
|
|
788
|
+
"version": "0.21.1",
|
|
789
789
|
"installPath": null,
|
|
790
790
|
"members": [
|
|
791
791
|
"harness-runtime",
|
|
@@ -816,7 +816,7 @@
|
|
|
816
816
|
"sourceId": "first-party",
|
|
817
817
|
"sourceType": "first-party",
|
|
818
818
|
"package": "@1aboveio/skills",
|
|
819
|
-
"version": "0.21.
|
|
819
|
+
"version": "0.21.1",
|
|
820
820
|
"installPath": null,
|
|
821
821
|
"members": [
|
|
822
822
|
"harness-runtime",
|
|
@@ -857,7 +857,7 @@
|
|
|
857
857
|
"sourceId": "first-party",
|
|
858
858
|
"sourceType": "first-party",
|
|
859
859
|
"package": "@1aboveio/skills",
|
|
860
|
-
"version": "0.21.
|
|
860
|
+
"version": "0.21.1",
|
|
861
861
|
"installPath": null,
|
|
862
862
|
"members": [
|
|
863
863
|
"harness-runtime",
|
|
@@ -889,7 +889,7 @@
|
|
|
889
889
|
"sourceId": "first-party",
|
|
890
890
|
"sourceType": "first-party",
|
|
891
891
|
"package": "@1aboveio/skills",
|
|
892
|
-
"version": "0.21.
|
|
892
|
+
"version": "0.21.1",
|
|
893
893
|
"installPath": null,
|
|
894
894
|
"members": [
|
|
895
895
|
"harness-runtime",
|
|
@@ -929,7 +929,7 @@
|
|
|
929
929
|
"sourceId": "first-party",
|
|
930
930
|
"sourceType": "first-party",
|
|
931
931
|
"package": "@1aboveio/skills",
|
|
932
|
-
"version": "0.21.
|
|
932
|
+
"version": "0.21.1",
|
|
933
933
|
"installPath": null,
|
|
934
934
|
"members": [
|
|
935
935
|
"harness-runtime"
|
|
@@ -955,7 +955,7 @@
|
|
|
955
955
|
"sourceId": "first-party",
|
|
956
956
|
"sourceType": "first-party",
|
|
957
957
|
"package": "@1aboveio/skills",
|
|
958
|
-
"version": "0.21.
|
|
958
|
+
"version": "0.21.1",
|
|
959
959
|
"installPath": null,
|
|
960
960
|
"members": [
|
|
961
961
|
"harness-runtime"
|
|
@@ -987,7 +987,7 @@
|
|
|
987
987
|
"sourceId": "first-party",
|
|
988
988
|
"sourceType": "first-party",
|
|
989
989
|
"package": "@1aboveio/skills",
|
|
990
|
-
"version": "0.21.
|
|
990
|
+
"version": "0.21.1",
|
|
991
991
|
"installPath": null,
|
|
992
992
|
"members": [
|
|
993
993
|
"harness-runtime",
|
|
@@ -1052,7 +1052,7 @@
|
|
|
1052
1052
|
"sourceId": "first-party",
|
|
1053
1053
|
"sourceType": "first-party",
|
|
1054
1054
|
"package": "@1aboveio/skills",
|
|
1055
|
-
"version": "0.21.
|
|
1055
|
+
"version": "0.21.1",
|
|
1056
1056
|
"installPath": null,
|
|
1057
1057
|
"members": [
|
|
1058
1058
|
"harness-runtime",
|
|
@@ -204,13 +204,14 @@ export function newMemberCandidates(action, groupIds, priorState, transport = {}
|
|
|
204
204
|
return candidates;
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
//
|
|
208
|
-
//
|
|
209
|
-
//
|
|
210
|
-
//
|
|
207
|
+
// A selected former group may retire its accepted or installed leftovers because this run can make
|
|
208
|
+
// the replacement ready. An unrelated group may retire an installed leftover only when the
|
|
209
|
+
// replacement already matches this release: global cleanup must never install an unselected group
|
|
210
|
+
// or turn a missing/modified replacement into an unrelated run failure.
|
|
211
211
|
export function archivedMemberCandidates(action, groupIds, priorState, transport = {}) {
|
|
212
212
|
if (!ACTIONS.has(action)) return [];
|
|
213
|
-
const
|
|
213
|
+
const { recipesPath, localRoot } = resolveBundleTransport(transport);
|
|
214
|
+
const recipes = readRecipes(recipesPath);
|
|
214
215
|
const selected = new Set(groupIds);
|
|
215
216
|
const acceptedByGroup = new Map((priorState?.groups ?? [])
|
|
216
217
|
.map((group) => [group.id, new Set(group.acceptedMembers)]));
|
|
@@ -218,8 +219,30 @@ export function archivedMemberCandidates(action, groupIds, priorState, transport
|
|
|
218
219
|
transport.skillsRoot
|
|
219
220
|
&& statSync(join(transport.skillsRoot, name), { throwIfNoEntry: false }),
|
|
220
221
|
);
|
|
221
|
-
|
|
222
|
-
|
|
222
|
+
const membersByName = new Map((recipes.sources ?? []).flatMap((source) => (
|
|
223
|
+
(source.members ?? []).map((member) => [member.installName, { source, member }])
|
|
224
|
+
)));
|
|
225
|
+
return (recipes.archives ?? []).flatMap((archive) => {
|
|
226
|
+
if (selected.has(archive.formerGroupId)) {
|
|
227
|
+
return (acceptedByGroup.get(archive.formerGroupId)?.has(archive.installName)
|
|
228
|
+
|| leftover(archive.installName)) ? [archive] : [];
|
|
229
|
+
}
|
|
230
|
+
if (!leftover(archive.installName)) return [];
|
|
231
|
+
const replacement = membersByName.get(archive.replacement);
|
|
232
|
+
if (!replacement) return [];
|
|
233
|
+
try {
|
|
234
|
+
if (classifyInstalledMember(replacement.source, replacement.member, {
|
|
235
|
+
enableTdd: transport.enableTdd,
|
|
236
|
+
localRoot,
|
|
237
|
+
skillsRoot: transport.skillsRoot,
|
|
238
|
+
}).status !== 'unchanged') return [];
|
|
239
|
+
} catch {
|
|
240
|
+
// A scoped transport may declare an archive without carrying an unselected replacement's
|
|
241
|
+
// source bytes. Without an expected digest this cleanup is ineligible, never presence-based.
|
|
242
|
+
return [];
|
|
243
|
+
}
|
|
244
|
+
return [{ ...archive, replacementAlreadyCurrent: true }];
|
|
245
|
+
});
|
|
223
246
|
}
|
|
224
247
|
|
|
225
248
|
// Prior acceptance for the new-member consent delta on explicit selections (picker, --group,
|
|
@@ -690,8 +713,9 @@ install without --group/--all opens the interactive picker; update without them
|
|
|
690
713
|
remembered selection (\${XDG_STATE_HOME:-~/.local/state}/1aboveio-skills/selection.json).
|
|
691
714
|
When a remembered group's current recipe declares members you have not accepted yet, each new skill
|
|
692
715
|
is offered individually and defaults to No; --yes accepts them all, --dry-run lists them without
|
|
693
|
-
prompting.
|
|
694
|
-
|
|
716
|
+
prompting. Every run archives exact retired leftovers from the managed global root by default when
|
|
717
|
+
their replacement is current; it never installs an unselected replacement. Decline interactively to
|
|
718
|
+
keep them. TDD implicit model invocation is enabled by default; --disable-tdd makes TDD explicit-only,
|
|
695
719
|
and --enable-tdd restores implicit invocation. --manual-tdd remains a compatibility alias for
|
|
696
720
|
--disable-tdd.
|
|
697
721
|
`;
|
|
@@ -995,6 +1019,7 @@ export async function runCli(args, {
|
|
|
995
1019
|
const skillsRoot = join(env.HOME || homedir(), '.agents', 'skills');
|
|
996
1020
|
const archiveCandidates = archivedMemberCandidates(parsed.action, groupIds, priorState, {
|
|
997
1021
|
...transport,
|
|
1022
|
+
enableTdd,
|
|
998
1023
|
skillsRoot,
|
|
999
1024
|
});
|
|
1000
1025
|
let declinedArchives = new Set();
|
|
@@ -1070,6 +1095,9 @@ export async function runCli(args, {
|
|
|
1070
1095
|
const readyMembers = new Set([
|
|
1071
1096
|
...succeeded.map((planned) => planned.member),
|
|
1072
1097
|
...(buckets?.unchanged.map((entry) => entry.member) ?? []),
|
|
1098
|
+
...archiveCandidates
|
|
1099
|
+
.filter((candidate) => candidate.replacementAlreadyCurrent)
|
|
1100
|
+
.map((candidate) => candidate.replacement),
|
|
1073
1101
|
]);
|
|
1074
1102
|
failed.push(...enforceReadyDependencies(
|
|
1075
1103
|
readyMembers,
|
|
@@ -342,7 +342,7 @@
|
|
|
342
342
|
"id": "first-party",
|
|
343
343
|
"type": "first-party",
|
|
344
344
|
"package": "@1aboveio/skills",
|
|
345
|
-
"version": "0.21.
|
|
345
|
+
"version": "0.21.1"
|
|
346
346
|
},
|
|
347
347
|
"contentDigest": "eff6c7b5931bce5b2265a619bccddd371a89df6ce7bc2edc74f11d00060a71dd",
|
|
348
348
|
"digestExcludes": []
|
|
@@ -355,7 +355,7 @@
|
|
|
355
355
|
"id": "first-party",
|
|
356
356
|
"type": "first-party",
|
|
357
357
|
"package": "@1aboveio/skills",
|
|
358
|
-
"version": "0.21.
|
|
358
|
+
"version": "0.21.1"
|
|
359
359
|
},
|
|
360
360
|
"contentDigest": "d97abeff7bdc5ae2e4be2f631d09dba46d4753ce1e67334793364329af59f066",
|
|
361
361
|
"digestExcludes": []
|
|
@@ -368,7 +368,7 @@
|
|
|
368
368
|
"id": "first-party",
|
|
369
369
|
"type": "first-party",
|
|
370
370
|
"package": "@1aboveio/skills",
|
|
371
|
-
"version": "0.21.
|
|
371
|
+
"version": "0.21.1"
|
|
372
372
|
},
|
|
373
373
|
"contentDigest": "fe2ec3bae2bfec2dbef19db30ab0272391d7c1d9b6893341a76a9f339adefc57",
|
|
374
374
|
"digestExcludes": []
|
|
@@ -381,7 +381,7 @@
|
|
|
381
381
|
"id": "first-party",
|
|
382
382
|
"type": "first-party",
|
|
383
383
|
"package": "@1aboveio/skills",
|
|
384
|
-
"version": "0.21.
|
|
384
|
+
"version": "0.21.1"
|
|
385
385
|
},
|
|
386
386
|
"contentDigest": "58b0556228a9271cf9e33727a05fc08a4fdfd29512ec0936b169f0a55d60e6ef",
|
|
387
387
|
"digestExcludes": []
|
|
@@ -394,7 +394,7 @@
|
|
|
394
394
|
"id": "first-party",
|
|
395
395
|
"type": "first-party",
|
|
396
396
|
"package": "@1aboveio/skills",
|
|
397
|
-
"version": "0.21.
|
|
397
|
+
"version": "0.21.1"
|
|
398
398
|
},
|
|
399
399
|
"contentDigest": "d28dd4d3c4394df0cc7e6b48d0e5daa7d2277701ea459e39fba99acf1d8ff670",
|
|
400
400
|
"digestExcludes": []
|
|
@@ -407,7 +407,7 @@
|
|
|
407
407
|
"id": "first-party",
|
|
408
408
|
"type": "first-party",
|
|
409
409
|
"package": "@1aboveio/skills",
|
|
410
|
-
"version": "0.21.
|
|
410
|
+
"version": "0.21.1"
|
|
411
411
|
},
|
|
412
412
|
"contentDigest": "56fb5843788c9073b0d5a65ffa72bd7d2fa80dc6a1ff06fb0e19fab513c51502",
|
|
413
413
|
"digestExcludes": []
|
|
@@ -420,7 +420,7 @@
|
|
|
420
420
|
"id": "first-party",
|
|
421
421
|
"type": "first-party",
|
|
422
422
|
"package": "@1aboveio/skills",
|
|
423
|
-
"version": "0.21.
|
|
423
|
+
"version": "0.21.1"
|
|
424
424
|
},
|
|
425
425
|
"contentDigest": "f048fd00c69f2dc666fc7a3096cfeee6dfba73933bfb69602f3f0e26159798cc",
|
|
426
426
|
"digestExcludes": []
|
|
@@ -433,7 +433,7 @@
|
|
|
433
433
|
"id": "first-party",
|
|
434
434
|
"type": "first-party",
|
|
435
435
|
"package": "@1aboveio/skills",
|
|
436
|
-
"version": "0.21.
|
|
436
|
+
"version": "0.21.1"
|
|
437
437
|
},
|
|
438
438
|
"contentDigest": "d533684db4483cfc90be2aa7161980b6548057ef18a4b54f0cdbcd53c79dd46d",
|
|
439
439
|
"digestExcludes": []
|
|
@@ -446,15 +446,15 @@
|
|
|
446
446
|
"id": "first-party",
|
|
447
447
|
"type": "first-party",
|
|
448
448
|
"package": "@1aboveio/skills",
|
|
449
|
-
"version": "0.21.
|
|
449
|
+
"version": "0.21.1"
|
|
450
450
|
},
|
|
451
|
-
"contentDigest": "
|
|
451
|
+
"contentDigest": "ec99877689de4bdfe8c5164bf3c518896eb1d3b0bdc990d9466e16f4cd73b88b",
|
|
452
452
|
"digestExcludes": [
|
|
453
453
|
"coherence/workflow.json"
|
|
454
454
|
]
|
|
455
455
|
}
|
|
456
456
|
],
|
|
457
|
-
"releaseIdentity": "
|
|
457
|
+
"releaseIdentity": "54fba3d7b607050e20097a84fe7d7d02ff1b12de83cd9d004f544293d18534f5",
|
|
458
458
|
"lifecycleAuthority": "native-skills-cli",
|
|
459
459
|
"repairRecipe": {
|
|
460
460
|
"id": "engineering-workflow-dependency-first",
|
|
@@ -512,7 +512,7 @@
|
|
|
512
512
|
"sourceId": "first-party",
|
|
513
513
|
"sourceType": "first-party",
|
|
514
514
|
"package": "@1aboveio/skills",
|
|
515
|
-
"version": "0.21.
|
|
515
|
+
"version": "0.21.1",
|
|
516
516
|
"installPath": null,
|
|
517
517
|
"members": [
|
|
518
518
|
"harness-runtime",
|
|
@@ -528,7 +528,7 @@
|
|
|
528
528
|
"commands": [
|
|
529
529
|
{
|
|
530
530
|
"transport": "npm",
|
|
531
|
-
"command": "npx @1aboveio/skills@0.21.
|
|
531
|
+
"command": "npx @1aboveio/skills@0.21.1 install --group engineering-workflow --yes"
|
|
532
532
|
}
|
|
533
533
|
],
|
|
534
534
|
"onFailure": {
|