kushi-agents 5.5.0 → 5.5.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kushi-agents",
|
|
3
|
-
"version": "5.5.
|
|
3
|
+
"version": "5.5.1",
|
|
4
4
|
"description": "Install Kushi — multi-source project evidence agent with Comprehensive Structured Capture (CSC) into weekly-only files across Email, Teams, OneNote, Loop, SharePoint, Meetings, CRM, ADO. Meetings retain a sibling verbatim/ audit folder. WorkIQ-only for M365 sources (Graph / m365_* FORBIDDEN as fallbacks; user-paste is first-class). Host-agnostic.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -57,4 +57,5 @@
|
|
|
57
57
|
"publishConfig": {
|
|
58
58
|
"access": "public"
|
|
59
59
|
}
|
|
60
|
-
}
|
|
60
|
+
}
|
|
61
|
+
|
|
@@ -65,3 +65,26 @@ Probes D44–D47 will assert:
|
|
|
65
65
|
- D45: no SKILL.md contains forbidden phrasings (HTTP verbs, manual path templates, week-math snippets).
|
|
66
66
|
- D46: every runner has integration tests under `plugin/runners/test/integration/`.
|
|
67
67
|
- D47: every runner emits a stdout JSON line on the happy path under fixture mode.
|
|
68
|
+
|
|
69
|
+
## Legacy probe carve-out (v5.5.1)
|
|
70
|
+
|
|
71
|
+
The following pre-v5.5.0 probes assumed SKILL.md inlined doctrine cites, validation loops, and orchestrator checklists. In v5.5.0+ those concerns live in the runner + its tests, so the probes **skip thin-pointer skills** (the same nine listed in `D44` `$v550Map`):
|
|
72
|
+
|
|
73
|
+
| Probe | What it used to require | Where it lives now |
|
|
74
|
+
|-------|------------------------|--------------------|
|
|
75
|
+
| C12 | `evidence-thoroughness` cite in pull-* SKILL.md | runner: thoroughness retry loop |
|
|
76
|
+
| D2 | `snapshot-vs-stream.instructions.md` cite in pull-* SKILL.md | runner JSDoc + integration tests |
|
|
77
|
+
| D3 | "WorkIQ" in pull-* SKILL.md Tools section | runner's discovery code path |
|
|
78
|
+
| D6 | `side-by-side-config` cite in bootstrap/refresh SKILL.md | runner: config-write helper |
|
|
79
|
+
| D11 | `verbatim-by-default` + v3.7.6 contracts cite | runner: `lib/verbatim.mjs` + tests |
|
|
80
|
+
| D12 | `m365-id-registry` tokens in SKILL.md | runner: `lib/id-registry.mjs` |
|
|
81
|
+
| D17 | `fuzzy-disambiguation` cite in name→ID skills | runner: name→ID resolver |
|
|
82
|
+
| D18 | `per-source-verification-gate` cite | runner: gate check before write |
|
|
83
|
+
| D26 | `issue-recovery` cite | runner: error-classification helper |
|
|
84
|
+
| D30.references-layout | `Load references/...` pointer when `references/` exists | runner loads its own packs |
|
|
85
|
+
| D30.checklist-orchestrators | `- [ ]` items in orchestrator SKILL.md | `refresh.mjs` orchestrates |
|
|
86
|
+
| D30.validation-loop | `## Validation loop` in writer SKILL.md | runner integration tests |
|
|
87
|
+
| D34.retrofit-clean | skill-checker `--retrofit` non-additive gaps == 0 | n/a for thin-pointers |
|
|
88
|
+
|
|
89
|
+
Non-thin-pointer skills (e.g. `pull-loop`, `pull-misc`, `aggregate-project`, `consolidate-evidence`) still get all of these checks.
|
|
90
|
+
|
|
@@ -279,6 +279,13 @@ $agentFile = Join-Path $pluginDir 'agents\kushi.agent.md'
|
|
|
279
279
|
$readmeFile = Join-Path $Root 'README.md'
|
|
280
280
|
$wtlFile = Join-Path $Root 'docs\reference\where-things-live.md'
|
|
281
281
|
|
|
282
|
+
# v5.5.0 thin-pointer skills — see plugin/instructions/llm-vs-runner.instructions.md
|
|
283
|
+
# "Legacy probe carve-out" table for which probes skip these and why.
|
|
284
|
+
$thinPointerSkills = @(
|
|
285
|
+
'pull-crm','pull-ado','pull-email','pull-teams','pull-meetings',
|
|
286
|
+
'pull-onenote','pull-sharepoint','bootstrap-project','refresh-project'
|
|
287
|
+
)
|
|
288
|
+
|
|
282
289
|
if (-not (Test-Path $pluginDir)) {
|
|
283
290
|
Write-Error "plugin/ not found at $pluginDir — run from kushi repo root or pass -Root."
|
|
284
291
|
exit 2
|
|
@@ -513,7 +520,8 @@ foreach ($name in $fdeSkills) {
|
|
|
513
520
|
}
|
|
514
521
|
|
|
515
522
|
# === C12: pull-* skills must reference evidence-thoroughness (merged thoroughness-detector v4.4.9) ===
|
|
516
|
-
|
|
523
|
+
# Skip thin-pointers — runner owns thoroughness retry in v5.5.0.
|
|
524
|
+
foreach ($d in $skillDirs | Where-Object { $_.Name -like 'pull-*' -and ($thinPointerSkills -notcontains $_.Name) }) {
|
|
517
525
|
$f = Join-Path $d.FullName 'SKILL.md'
|
|
518
526
|
$text = $mdText[$f]
|
|
519
527
|
if (-not $text) { continue }
|
|
@@ -545,6 +553,11 @@ if (-not (Test-Path $detectorFile)) {
|
|
|
545
553
|
|
|
546
554
|
# === Deep checks ===
|
|
547
555
|
if ($Deep) {
|
|
556
|
+
# See module-level $thinPointerSkills (line ~282) and
|
|
557
|
+
# plugin/instructions/llm-vs-runner.instructions.md for the rationale on
|
|
558
|
+
# why pre-v5.5.0 probes skip thin-pointer SKILL.md files. Coverage for
|
|
559
|
+
# those skills lives in D44–D47 V550Runners probes lower in this file.
|
|
560
|
+
|
|
548
561
|
# D1: templates referenced from skills exist
|
|
549
562
|
$templatesDir = Join-Path $pluginDir 'templates'
|
|
550
563
|
foreach ($d in $skillDirs) {
|
|
@@ -559,16 +572,16 @@ if ($Deep) {
|
|
|
559
572
|
}
|
|
560
573
|
}
|
|
561
574
|
}
|
|
562
|
-
# D2: pull-* skills must reference snapshot-vs-stream
|
|
563
|
-
foreach ($d in $skillDirs | Where-Object { $_.Name -like 'pull-*' }) {
|
|
575
|
+
# D2: pull-* skills must reference snapshot-vs-stream (skip thin-pointers; runner owns this contract in v5.5.0)
|
|
576
|
+
foreach ($d in $skillDirs | Where-Object { $_.Name -like 'pull-*' -and ($thinPointerSkills -notcontains $_.Name) }) {
|
|
564
577
|
$f = Join-Path $d.FullName 'SKILL.md'
|
|
565
578
|
$text = $mdText[$f]
|
|
566
579
|
if ($text -notmatch 'snapshot-vs-stream\.instructions\.md') {
|
|
567
580
|
Add-Finding D2 'Snapshot/Stream' 'warning' "Skill $($d.Name) doesn't cite snapshot-vs-stream.instructions.md" "Add a reference (e.g. 'per snapshot-vs-stream.instructions.md') in the skill body." $f 0
|
|
568
581
|
}
|
|
569
582
|
}
|
|
570
|
-
# D3: pull-* must list WorkIQ in Tools section (
|
|
571
|
-
foreach ($d in $skillDirs | Where-Object { $_.Name -like 'pull-*' }) {
|
|
583
|
+
# D3: pull-* must list WorkIQ in Tools section (skip thin-pointers; runner owns discovery + capture in v5.5.0)
|
|
584
|
+
foreach ($d in $skillDirs | Where-Object { $_.Name -like 'pull-*' -and ($thinPointerSkills -notcontains $_.Name) }) {
|
|
572
585
|
$f = Join-Path $d.FullName 'SKILL.md'
|
|
573
586
|
$text = $mdText[$f]
|
|
574
587
|
if ($text -notmatch '(?ms)\bWorkIQ\b') {
|
|
@@ -642,7 +655,7 @@ if ($Deep) {
|
|
|
642
655
|
}
|
|
643
656
|
}
|
|
644
657
|
# D6: side-by-side rule cited where user config is touched
|
|
645
|
-
$configTouchers = @('bootstrap-project','refresh-project') #
|
|
658
|
+
$configTouchers = @('bootstrap-project','refresh-project') | Where-Object { $thinPointerSkills -notcontains $_ } # v5.5.0: runner owns side-by-side config writes
|
|
646
659
|
foreach ($name in $configTouchers) {
|
|
647
660
|
$f = Join-Path $skillsDir "$name\SKILL.md"
|
|
648
661
|
if (Test-Path $f) {
|
|
@@ -740,8 +753,8 @@ if ($Deep) {
|
|
|
740
753
|
}
|
|
741
754
|
}
|
|
742
755
|
|
|
743
|
-
# D11: pull-* skills SKILL.md cite verbatim-by-default contract in front blockquote
|
|
744
|
-
$pullSkillDirs = Get-ChildItem -Path (Join-Path $pluginDir 'skills') -Directory | Where-Object { $_.Name -like 'pull-*' -or $_.Name -in @('bootstrap-project','refresh-project') }
|
|
756
|
+
# D11: pull-* skills SKILL.md cite verbatim-by-default contract in front blockquote (skip thin-pointers; runner owns verbatim doctrine in v5.5.0)
|
|
757
|
+
$pullSkillDirs = Get-ChildItem -Path (Join-Path $pluginDir 'skills') -Directory | Where-Object { ($_.Name -like 'pull-*' -or $_.Name -in @('bootstrap-project','refresh-project')) -and ($thinPointerSkills -notcontains $_.Name) }
|
|
745
758
|
foreach ($sd in $pullSkillDirs) {
|
|
746
759
|
$sf = Join-Path $sd.FullName 'SKILL.md'
|
|
747
760
|
if (Test-Path $sf) {
|
|
@@ -765,7 +778,7 @@ if ($Deep) {
|
|
|
765
778
|
@{ name='refresh-project'; required=@('m365-id-registry','knownSections') },
|
|
766
779
|
@{ name='pull-onenote'; required=@('m365-id-registry','one_pages', 'webPageId', 'auth-required', 'playwright-profile') },
|
|
767
780
|
@{ name='pull-misc'; required=@('m365-id-registry','external-links', 'misc_links', 'placeholder', 'delegated') }
|
|
768
|
-
)
|
|
781
|
+
) | Where-Object { $thinPointerSkills -notcontains $_.name } # v5.5.0: runner owns these tokens
|
|
769
782
|
foreach ($rc in $registryConsumers) {
|
|
770
783
|
$sf = Join-Path $pluginDir "skills\$($rc.name)\SKILL.md"
|
|
771
784
|
if (Test-Path $sf) {
|
|
@@ -966,7 +979,7 @@ if ($Deep) {
|
|
|
966
979
|
$fuzzyCallers = @(
|
|
967
980
|
'pull-onenote','pull-sharepoint','pull-teams','pull-crm','pull-ado','pull-email',
|
|
968
981
|
'engagement-root-resolution.instructions.md','ask-project'
|
|
969
|
-
)
|
|
982
|
+
) | Where-Object { $thinPointerSkills -notcontains $_ } # v5.5.0: runner owns name→ID resolution
|
|
970
983
|
foreach ($caller in $fuzzyCallers) {
|
|
971
984
|
$candidate = if ($caller -like '*.instructions.md') {
|
|
972
985
|
Join-Path $instructionsDir $caller
|
|
@@ -988,6 +1001,7 @@ if ($Deep) {
|
|
|
988
1001
|
Add-Finding D18 'Verification gate' 'warning' "plugin/instructions/per-source-verification-gate.instructions.md is missing" "Restore the v4.4.7 verification-gate doctrine." $gateInst 0
|
|
989
1002
|
} else {
|
|
990
1003
|
$gateCallers = @('bootstrap-project','refresh-project','aggregate-project') + (Get-ChildItem $skillsDir -Directory | Where-Object { $_.Name -like 'pull-*' } | Select-Object -ExpandProperty Name)
|
|
1004
|
+
$gateCallers = $gateCallers | Where-Object { $thinPointerSkills -notcontains $_ } # v5.5.0: runner enforces the gate
|
|
991
1005
|
foreach ($caller in $gateCallers) {
|
|
992
1006
|
$sf = Join-Path (Join-Path $skillsDir $caller) 'SKILL.md'
|
|
993
1007
|
if (Test-Path $sf) {
|
|
@@ -1182,7 +1196,7 @@ if ($Deep) {
|
|
|
1182
1196
|
'aggregate-project','consolidate-evidence',
|
|
1183
1197
|
'bootstrap-project','refresh-project',
|
|
1184
1198
|
'apply-ado-update','propose-ado-update'
|
|
1185
|
-
)
|
|
1199
|
+
) | Where-Object { $thinPointerSkills -notcontains $_ } # v5.5.0: runner cites issue-recovery
|
|
1186
1200
|
foreach ($skillName in $recoveryRequired) {
|
|
1187
1201
|
$skillFile = Join-Path $skillsDir "$skillName\SKILL.md"
|
|
1188
1202
|
if (-not (Test-Path $skillFile)) { continue }
|
|
@@ -1664,9 +1678,9 @@ if ($Deep) {
|
|
|
1664
1678
|
Add-Finding 'D30.skill-size' 'Spec compliance' 'warning' "$($d.Name)/SKILL.md is ~$skillTokens tokens (cap 5000)" "Split bulk content into plugin/skills/$($d.Name)/references/<topic>.md per agentskills-compliance.instructions.md." $skillFile 0
|
|
1665
1679
|
}
|
|
1666
1680
|
|
|
1667
|
-
# D30.references-layout — if references/ exists, SKILL.md must cite at least one "Load references/..." pointer.
|
|
1681
|
+
# D30.references-layout — if references/ exists, SKILL.md must cite at least one "Load references/..." pointer. (skip thin-pointers; runner owns the reference packs)
|
|
1668
1682
|
$refsDir = Join-Path $d.FullName 'references'
|
|
1669
|
-
if (Test-Path $refsDir) {
|
|
1683
|
+
if ((Test-Path $refsDir) -and ($thinPointerSkills -notcontains $d.Name)) {
|
|
1670
1684
|
$hasRefMention = $skillText -match 'references/[A-Za-z0-9_\-]+\.md'
|
|
1671
1685
|
if (-not $hasRefMention) {
|
|
1672
1686
|
Add-Finding 'D30.references-layout' 'Spec compliance' 'warning' "$($d.Name)/ has a references/ folder but SKILL.md never cites any references/<file>.md" "Add explicit load-on-trigger pointers, e.g. 'Load references/canonical-prompts.md when constructing the WorkIQ query.'" $skillFile 0
|
|
@@ -1680,15 +1694,15 @@ if ($Deep) {
|
|
|
1680
1694
|
}
|
|
1681
1695
|
}
|
|
1682
1696
|
|
|
1683
|
-
# D30.checklist-orchestrators — orchestrators contain at least one `- [ ]` checklist item.
|
|
1684
|
-
if ($orchestratorSkills -contains $d.Name) {
|
|
1697
|
+
# D30.checklist-orchestrators — orchestrators contain at least one `- [ ]` checklist item. (skip thin-pointers; orchestration moved into refresh.mjs in v5.5.0)
|
|
1698
|
+
if (($orchestratorSkills -contains $d.Name) -and ($thinPointerSkills -notcontains $d.Name)) {
|
|
1685
1699
|
if ($skillText -notmatch '(?m)^\s*-\s+\[ \]') {
|
|
1686
1700
|
Add-Finding 'D30.checklist-orchestrators' 'Spec compliance' 'warning' "$($d.Name)/SKILL.md is an orchestrator but contains no '- [ ]' checklist items" "Convert the numbered/prose step list to GitHub checkbox syntax per agentskills-compliance.instructions.md rule 4." $skillFile 0
|
|
1687
1701
|
}
|
|
1688
1702
|
}
|
|
1689
1703
|
|
|
1690
|
-
# D30.validation-loop — writer skills contain a `## Validation loop` heading.
|
|
1691
|
-
if ($writerSkills -contains $d.Name) {
|
|
1704
|
+
# D30.validation-loop — writer skills contain a `## Validation loop` heading. (skip thin-pointers; runner integration tests are the validation loop in v5.5.0)
|
|
1705
|
+
if (($writerSkills -contains $d.Name) -and ($thinPointerSkills -notcontains $d.Name)) {
|
|
1692
1706
|
if ($skillText -notmatch '(?m)^##\s+Validation loop\b') {
|
|
1693
1707
|
Add-Finding 'D30.validation-loop' 'Spec compliance' 'warning' "$($d.Name)/SKILL.md is a writer skill but is missing a '## Validation loop' section" "Append the standard validation loop (do → self-check -Targeted → fix → repeat → log success) per agentskills-compliance.instructions.md rule 5." $skillFile 0
|
|
1694
1708
|
}
|
|
@@ -1962,6 +1976,8 @@ process.stdout.write(JSON.stringify(out));
|
|
|
1962
1976
|
try { $allParsed = $allJson | ConvertFrom-Json } catch {}
|
|
1963
1977
|
if ($allParsed -and $allParsed.skills) {
|
|
1964
1978
|
foreach ($s in $allParsed.skills) {
|
|
1979
|
+
# v5.5.0: thin-pointer skills are intentionally minimal; retrofit gaps don't apply.
|
|
1980
|
+
if ($thinPointerSkills -contains $s.name) { continue }
|
|
1965
1981
|
if ($s.non_additive_count -gt 0) {
|
|
1966
1982
|
Add-Finding 'D34.retrofit-clean' 'Creator conformance' 'warning' "Skill '$($s.name)' has $($s.non_additive_count) non-additive gap(s) that retrofit cannot auto-fix" "Inspect Evidence/_skill-checker/$($s.name)/fix-plan.json and document/fix manually. See docs/audits/v5.0.4-skill-creator-dogfood.md for known exceptions." (Join-Path $Root "plugin/skills/$($s.name)/SKILL.md") 0
|
|
1967
1983
|
}
|