@orkestrel/scaffold 0.0.108 → 0.0.109

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 (157) hide show
  1. package/dist/agents/skills/orkestrel-dispatch/scripts/bench.js +326 -91
  2. package/dist/agents/skills/orkestrel-dispatch/scripts/brief.js +110 -14
  3. package/dist/agents/skills/orkestrel-dispatch/scripts/chain.js +280 -0
  4. package/dist/agents/skills/orkestrel-dispatch/scripts/cite.js +188 -26
  5. package/dist/agents/skills/orkestrel-dispatch/scripts/launch.js +142 -43
  6. package/dist/agents/skills/orkestrel-dispatch/scripts/login.js +240 -62
  7. package/dist/agents/skills/orkestrel-dispatch/scripts/patch.js +323 -0
  8. package/dist/agents/skills/orkestrel-dispatch/scripts/result.js +169 -32
  9. package/dist/agents/skills/orkestrel-dispatch/scripts/sweep.js +290 -69
  10. package/dist/agents/skills/orkestrel-falsify/scripts/mutate.js +560 -0
  11. package/dist/agents/skills/orkestrel-harden/scripts/discovery.js +1052 -205
  12. package/dist/agents/skills/orkestrel-harden/scripts/measure.js +361 -0
  13. package/dist/agents/skills/orkestrel-harden/scripts/titles.js +455 -80
  14. package/dist/agents/skills/orkestrel-parallel/scripts/cases.js +327 -0
  15. package/dist/agents/skills/orkestrel-publish/scripts/compare.js +298 -51
  16. package/dist/agents/skills/orkestrel-publish/scripts/pins.js +170 -13
  17. package/dist/agents/skills/orkestrel-publish/scripts/swap.js +956 -191
  18. package/dist/agents/skills/orkestrel-publish/scripts/wave.js +707 -112
  19. package/dist/agents/skills/orkestrel-publish/scripts/window.js +235 -41
  20. package/dist/agents/skills/orkestrel-scout/scripts/map.js +341 -54
  21. package/dist/agents/templates/brief.md +1 -1
  22. package/dist/bin/main.js +51 -46
  23. package/dist/bin/main.js.map +1 -1
  24. package/dist/host/AGENTS.md +23 -21
  25. package/dist/host/agents/orchestration.md +43 -18
  26. package/dist/host/agents/platforms/windows.md +3 -3
  27. package/dist/host/agents/skills/orkestrel-align/SKILL.md +10 -13
  28. package/dist/host/agents/skills/orkestrel-align/references/fleet.md +4 -10
  29. package/dist/host/agents/skills/orkestrel-align/references/integration.md +1 -1
  30. package/dist/host/agents/skills/orkestrel-build/SKILL.md +16 -48
  31. package/dist/host/agents/skills/orkestrel-build/agents/openai.yaml +1 -1
  32. package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +19 -16
  33. package/dist/host/agents/skills/orkestrel-debrief/agents/openai.yaml +1 -1
  34. package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +15 -28
  35. package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +5 -6
  36. package/dist/host/agents/skills/orkestrel-debrief/references/retention.md +4 -6
  37. package/dist/host/agents/skills/orkestrel-dispatch/SKILL.md +31 -20
  38. package/dist/host/agents/skills/orkestrel-dispatch/references/launch.md +3 -4
  39. package/dist/host/agents/skills/orkestrel-dispatch/scripts/bench.ts +366 -75
  40. package/dist/host/agents/skills/orkestrel-dispatch/scripts/brief.ts +126 -16
  41. package/dist/host/agents/skills/orkestrel-dispatch/scripts/chain.ts +323 -0
  42. package/dist/host/agents/skills/orkestrel-dispatch/scripts/cite.ts +220 -31
  43. package/dist/host/agents/skills/orkestrel-dispatch/scripts/launch.ts +176 -33
  44. package/dist/host/agents/skills/orkestrel-dispatch/scripts/login.ts +294 -59
  45. package/dist/host/agents/skills/orkestrel-dispatch/scripts/patch.ts +401 -0
  46. package/dist/host/agents/skills/orkestrel-dispatch/scripts/result.ts +199 -34
  47. package/dist/host/agents/skills/orkestrel-dispatch/scripts/sweep.ts +330 -69
  48. package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +10 -8
  49. package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +1 -5
  50. package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +1 -1
  51. package/dist/host/agents/skills/orkestrel-falsify/scripts/mutate.ts +701 -0
  52. package/dist/host/agents/skills/orkestrel-harden/SKILL.md +16 -12
  53. package/dist/host/agents/skills/orkestrel-harden/references/bindings.md +23 -81
  54. package/dist/host/agents/skills/orkestrel-harden/references/centralization.md +4 -5
  55. package/dist/host/agents/skills/orkestrel-harden/references/contract.md +2 -0
  56. package/dist/host/agents/skills/orkestrel-harden/references/document.md +33 -0
  57. package/dist/host/agents/skills/orkestrel-harden/references/equivalence.md +6 -3
  58. package/dist/host/agents/skills/orkestrel-harden/references/hardening.md +8 -4
  59. package/dist/host/agents/skills/orkestrel-harden/references/research.md +2 -0
  60. package/dist/host/agents/skills/orkestrel-harden/scripts/discovery.ts +1272 -279
  61. package/dist/host/agents/skills/orkestrel-harden/scripts/measure.ts +425 -0
  62. package/dist/host/agents/skills/orkestrel-harden/scripts/titles.ts +603 -98
  63. package/dist/host/agents/skills/orkestrel-journey/SKILL.md +75 -98
  64. package/dist/host/agents/skills/orkestrel-journey/references/captures.md +54 -17
  65. package/dist/host/agents/skills/orkestrel-journey/references/decide.md +1 -20
  66. package/dist/host/agents/skills/orkestrel-journey/references/layer.md +21 -31
  67. package/dist/host/agents/skills/orkestrel-journey/references/styles.md +1 -1
  68. package/dist/host/agents/skills/orkestrel-parallel/SKILL.md +28 -24
  69. package/dist/host/agents/skills/orkestrel-parallel/references/claude.md +15 -13
  70. package/dist/host/agents/skills/orkestrel-parallel/references/codex.md +1 -0
  71. package/dist/host/agents/skills/orkestrel-parallel/references/cursor.md +13 -13
  72. package/dist/host/agents/skills/orkestrel-parallel/scripts/cases.ts +389 -0
  73. package/dist/host/agents/skills/orkestrel-polish/SKILL.md +16 -20
  74. package/dist/host/agents/skills/orkestrel-polish/references/capture-harness.md +16 -26
  75. package/dist/host/agents/skills/orkestrel-publish/SKILL.md +12 -26
  76. package/dist/host/agents/skills/orkestrel-publish/agents/openai.yaml +2 -2
  77. package/dist/host/agents/skills/orkestrel-publish/references/adopt.md +23 -0
  78. package/dist/host/agents/skills/orkestrel-publish/references/release.md +4 -4
  79. package/dist/host/agents/skills/orkestrel-publish/references/wave.md +10 -9
  80. package/dist/host/agents/skills/orkestrel-publish/references/window.md +20 -25
  81. package/dist/host/agents/skills/orkestrel-publish/scripts/compare.ts +348 -59
  82. package/dist/host/agents/skills/orkestrel-publish/scripts/pins.ts +202 -22
  83. package/dist/host/agents/skills/orkestrel-publish/scripts/swap.ts +1061 -191
  84. package/dist/host/agents/skills/orkestrel-publish/scripts/wave.ts +812 -140
  85. package/dist/host/agents/skills/orkestrel-publish/scripts/window.ts +280 -38
  86. package/dist/host/agents/skills/orkestrel-scout/SKILL.md +3 -3
  87. package/dist/host/agents/skills/orkestrel-scout/scripts/map.ts +428 -70
  88. package/dist/host/agents/templates/brief.md +1 -1
  89. package/dist/host/agents/transports/claude-cli.md +3 -3
  90. package/dist/host/agents/transports/codex.md +2 -7
  91. package/dist/host/agents/transports/cursor.md +2 -3
  92. package/dist/host/claude/AGENTS.md +2 -2
  93. package/dist/host/claude/agents/analyst.md +3 -3
  94. package/dist/host/claude/agents/astra.md +3 -3
  95. package/dist/host/claude/agents/builder.md +1 -1
  96. package/dist/host/claude/agents/checker.md +1 -1
  97. package/dist/host/claude/agents/distiller.md +1 -1
  98. package/dist/host/claude/agents/grok.md +1 -1
  99. package/dist/host/claude/agents/opus.md +2 -2
  100. package/dist/host/claude/agents/orkestrel.md +57 -90
  101. package/dist/host/claude/agents/researcher.md +1 -1
  102. package/dist/host/claude/agents/reviewer.md +4 -0
  103. package/dist/host/claude/agents/scout.md +1 -1
  104. package/dist/host/claude/agents/verifier.md +1 -1
  105. package/dist/host/claude/rules/application.md +14 -21
  106. package/dist/host/claude/rules/architecture.md +34 -44
  107. package/dist/host/claude/rules/browser.md +3 -4
  108. package/dist/host/claude/rules/campaign.md +2 -2
  109. package/dist/host/claude/rules/documentation.md +25 -12
  110. package/dist/host/claude/rules/names.md +9 -4
  111. package/dist/host/claude/rules/patterns.md +6 -7
  112. package/dist/host/claude/rules/portability.md +1 -1
  113. package/dist/host/claude/rules/quality.md +4 -5
  114. package/dist/host/claude/rules/styles.md +2 -2
  115. package/dist/host/claude/rules/tests.md +57 -114
  116. package/dist/host/claude/rules/typescript.md +7 -9
  117. package/dist/host/claude/rules/workspace.md +21 -19
  118. package/dist/host/claude/rules/writing.md +2 -5
  119. package/dist/host/claude/skills/orkestrel-dispatch/SKILL.md +1 -1
  120. package/dist/host/claude/skills/orkestrel-harden/SKILL.md +1 -1
  121. package/dist/host/claude/skills/orkestrel-publish/SKILL.md +1 -1
  122. package/dist/host/claude/skills/orkestrel-scout/SKILL.md +1 -1
  123. package/dist/host/codex/agents/analyst.toml +9 -3
  124. package/dist/host/codex/agents/astra.toml +3 -4
  125. package/dist/host/codex/agents/builder.toml +1 -1
  126. package/dist/host/codex/agents/opus.toml +3 -4
  127. package/dist/host/codex/agents/orkestrel.toml +1 -1
  128. package/dist/host/codex/agents/researcher.toml +2 -2
  129. package/dist/host/codex/agents/verifier.toml +1 -1
  130. package/dist/host/configs/helpers.ts +21 -1
  131. package/dist/host/configs/policy.ts +299 -15
  132. package/dist/host/dotfiles/oxlintrc.json +137 -3
  133. package/dist/host/guides/agent.md +111 -134
  134. package/dist/host/guides/capture.md +801 -0
  135. package/dist/host/guides/probe.md +27 -8
  136. package/dist/host/guides/scaffold.md +96 -18
  137. package/dist/host/guides/study.md +534 -440
  138. package/dist/host/guides/test.md +111 -44
  139. package/dist/host/manifest.json +160 -240
  140. package/dist/host/tests/config.test.ts +971 -187
  141. package/dist/host/tests/policy.test.ts +127 -1
  142. package/dist/host/tests/setupPolicy.ts +893 -33
  143. package/dist/src/core/index.cjs +214 -86
  144. package/dist/src/core/index.cjs.map +1 -1
  145. package/dist/src/core/index.d.cts +122 -38
  146. package/dist/src/core/index.d.ts +122 -38
  147. package/dist/src/core/index.js +209 -85
  148. package/dist/src/core/index.js.map +1 -1
  149. package/dist/src/server/index.cjs +20 -27
  150. package/dist/src/server/index.cjs.map +1 -1
  151. package/dist/src/server/index.js +21 -28
  152. package/dist/src/server/index.js.map +1 -1
  153. package/package.json +11 -11
  154. package/dist/agents/skills/orkestrel-dispatch/scripts/helpers.js +0 -283
  155. package/dist/host/agents/skills/orkestrel-dispatch/references/bench.md +0 -25
  156. package/dist/host/agents/skills/orkestrel-dispatch/scripts/helpers.ts +0 -333
  157. package/dist/host/guides/supervisor.md +0 -4890
@@ -1,4 +1,4 @@
1
- import { existsSync, readdirSync, readFileSync, rmSync } from 'node:fs'
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
2
2
  import { join } from 'node:path'
3
3
  import { describe, expect, it } from 'vitest'
4
4
  import { POLICY_BANNED_TERMS, POLICY_JUDGED_TERMS } from '../configs/policy.js'
@@ -15,6 +15,9 @@ import {
15
15
  inspectPolicyMirrorPaths,
16
16
  inspectPolicyMirrors,
17
17
  inspectPolicyPortability,
18
+ inspectPolicyShellPaths,
19
+ inspectPolicyShells,
20
+ inspectPolicyText,
18
21
  inspectPolicyWiring,
19
22
  inspectPolicyWorkspace,
20
23
  inspectSkillFamily,
@@ -56,6 +59,7 @@ import {
56
59
  SKILL_POLICY_PARAGRAPHS,
57
60
  SKILL_POLICY_TEXT,
58
61
  stemToPolicyCandidates,
62
+ TEXT_POLICY_CONTROLS,
59
63
  testToPolicyStem,
60
64
  } from './setupPolicy.js'
61
65
 
@@ -712,6 +716,105 @@ describe('portability policy', () => {
712
716
  ]),
713
717
  ).toEqual([])
714
718
  })
719
+
720
+ it('rejects a shell-family file outside scripts whatever its case, and a non-shell file inside it', () => {
721
+ expect(
722
+ inspectPolicyShellPaths([
723
+ 'src/run.sh',
724
+ 'tools/BUILD.PY',
725
+ 'scripts/probe.ts',
726
+ 'scripts/a/b.cmd',
727
+ ]),
728
+ ).toEqual([
729
+ {
730
+ rule: 'portability',
731
+ path: 'src/run.sh',
732
+ message: 'shell, PowerShell, Python, and batch files sit only in scripts',
733
+ },
734
+ {
735
+ rule: 'portability',
736
+ path: 'tools/BUILD.PY',
737
+ message: 'shell, PowerShell, Python, and batch files sit only in scripts',
738
+ },
739
+ {
740
+ rule: 'portability',
741
+ path: 'scripts/probe.ts',
742
+ message: 'scripts holds .sh files and nothing else',
743
+ },
744
+ {
745
+ rule: 'portability',
746
+ path: 'scripts/a/b.cmd',
747
+ message: 'scripts holds .sh files and nothing else',
748
+ },
749
+ ])
750
+ })
751
+
752
+ it('accepts a shell file at any depth inside scripts and every other file elsewhere', () => {
753
+ expect(
754
+ inspectPolicyShellPaths([
755
+ 'scripts/deps.sh',
756
+ 'scripts/DEPS.SH',
757
+ 'scripts/nested/hook.sh',
758
+ 'src/worker/helpers.ts',
759
+ 'package.json',
760
+ '.gitattributes',
761
+ 'build.shared.ts',
762
+ ]),
763
+ ).toEqual([])
764
+ })
765
+
766
+ it('reads files only: a directory named like a shell file or inside scripts is no violation', () => {
767
+ const scratch = createPolicyScratch({ prefix: 'orkestrel-policy-shells-' })
768
+ try {
769
+ scratch.write('src/tools.py/index.ts', 'export {}\n')
770
+ scratch.write('scripts/nested/deps.sh', '#!/usr/bin/env bash\n')
771
+ scratch.write('src/run.sh', '#!/usr/bin/env bash\n')
772
+ // The refused file arrives beside the directories, so an empty result elsewhere is a read
773
+ // that reached the population rather than one that found nothing.
774
+ expect(inspectPolicyShells(scratch.path)).toEqual([
775
+ {
776
+ rule: 'portability',
777
+ path: 'src/run.sh',
778
+ message: 'shell, PowerShell, Python, and batch files sit only in scripts',
779
+ },
780
+ ])
781
+ } finally {
782
+ scratch.destroy()
783
+ }
784
+ })
785
+ })
786
+
787
+ describe('text integrity policy', () => {
788
+ for (const control of TEXT_POLICY_CONTROLS) {
789
+ it(`${control.label} [membership: ${control.membership}]`, () => {
790
+ expect(
791
+ inspectPolicyControl(control).filter((violation) => violation.rule === 'text'),
792
+ ).toEqual(control.violations)
793
+ })
794
+ }
795
+
796
+ // A text fixture is a JavaScript string and cannot hold a byte sequence UTF-8 never carries, so
797
+ // the bytes are written directly. The valid file beside the broken one proves the sweep ran
798
+ // over the workspace and refused one file rather than every file.
799
+ it('rejects a file whose bytes are not UTF-8 and accepts the same file once they are', () => {
800
+ const scratch = createPolicyScratch({ prefix: 'orkestrel-policy-text-' })
801
+ try {
802
+ mkdirSync(join(scratch.path, 'src'), { recursive: true })
803
+ writeFileSync(join(scratch.path, 'src', 'valid.ts'), Uint8Array.of(0x61, 0xc3, 0xa8, 0x0a))
804
+ writeFileSync(join(scratch.path, 'src', 'broken.ts'), Uint8Array.of(0x61, 0xc3, 0x28, 0x0a))
805
+ expect(inspectPolicyText(scratch.path)).toEqual([
806
+ { rule: 'text', path: 'src/broken.ts', message: 'text decodes as UTF-8' },
807
+ ])
808
+ writeFileSync(join(scratch.path, 'src', 'broken.ts'), Uint8Array.of(0x61, 0xc3, 0xa8, 0x0a))
809
+ expect(inspectPolicyText(scratch.path)).toEqual([])
810
+ } finally {
811
+ scratch.destroy()
812
+ }
813
+ })
814
+
815
+ it('holds the authored and source text of this workspace to clean UTF-8', () => {
816
+ expect(inspectPolicyText(process.cwd())).toEqual([])
817
+ })
715
818
  })
716
819
 
717
820
  describe('prose policy', () => {
@@ -893,6 +996,29 @@ describe('policy configuration wiring', () => {
893
996
  ])
894
997
  })
895
998
 
999
+ it('counts a rule as enabled only at error severity, in the string or an array first member', () => {
1000
+ const configuration = {
1001
+ rules: { 'rule/top-off': 'off', 'rule/top-warn': ['warn'], 'rule/top-error': 'error' },
1002
+ overrides: [
1003
+ {
1004
+ files: ['a/**'],
1005
+ rules: { 'rule/scoped-off': 'off', 'rule/scoped-error': ['error', {}] },
1006
+ },
1007
+ ],
1008
+ }
1009
+ expect(
1010
+ inspectPolicyWiring(
1011
+ configuration,
1012
+ ['rule/top-off', 'rule/top-warn', 'rule/top-error', 'rule/scoped-off', 'rule/scoped-error'],
1013
+ [],
1014
+ ),
1015
+ ).toEqual(
1016
+ ['rule/top-off', 'rule/top-warn', 'rule/scoped-off'].map(
1017
+ (rule) => `${rule} is enabled by no top-level or override rules record`,
1018
+ ),
1019
+ )
1020
+ })
1021
+
896
1022
  it('reports a configuration that is not a record', () => {
897
1023
  expect(inspectPolicyWiring([], [], [])).toEqual(['Oxlint configuration must be a record'])
898
1024
  })