@orkestrel/scaffold 0.0.107 → 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 (164) 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 +368 -27
  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 +26 -20
  25. package/dist/host/agents/orchestration.md +98 -58
  26. package/dist/host/agents/platforms/posix.md +15 -0
  27. package/dist/host/agents/platforms/windows.md +37 -0
  28. package/dist/host/agents/skills/orkestrel-align/SKILL.md +10 -13
  29. package/dist/host/agents/skills/orkestrel-align/references/fleet.md +4 -10
  30. package/dist/host/agents/skills/orkestrel-align/references/integration.md +1 -1
  31. package/dist/host/agents/skills/orkestrel-build/SKILL.md +16 -48
  32. package/dist/host/agents/skills/orkestrel-build/agents/openai.yaml +1 -1
  33. package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +19 -16
  34. package/dist/host/agents/skills/orkestrel-debrief/agents/openai.yaml +1 -1
  35. package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +15 -28
  36. package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +5 -6
  37. package/dist/host/agents/skills/orkestrel-debrief/references/retention.md +12 -14
  38. package/dist/host/agents/skills/orkestrel-dispatch/SKILL.md +36 -24
  39. package/dist/host/agents/skills/orkestrel-dispatch/references/launch.md +14 -11
  40. package/dist/host/agents/skills/orkestrel-dispatch/scripts/bench.ts +366 -75
  41. package/dist/host/agents/skills/orkestrel-dispatch/scripts/brief.ts +126 -16
  42. package/dist/host/agents/skills/orkestrel-dispatch/scripts/chain.ts +323 -0
  43. package/dist/host/agents/skills/orkestrel-dispatch/scripts/cite.ts +220 -31
  44. package/dist/host/agents/skills/orkestrel-dispatch/scripts/launch.ts +176 -33
  45. package/dist/host/agents/skills/orkestrel-dispatch/scripts/login.ts +294 -59
  46. package/dist/host/agents/skills/orkestrel-dispatch/scripts/patch.ts +401 -0
  47. package/dist/host/agents/skills/orkestrel-dispatch/scripts/result.ts +199 -34
  48. package/dist/host/agents/skills/orkestrel-dispatch/scripts/sweep.ts +428 -27
  49. package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +10 -8
  50. package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +1 -5
  51. package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +1 -1
  52. package/dist/host/agents/skills/orkestrel-falsify/scripts/mutate.ts +701 -0
  53. package/dist/host/agents/skills/orkestrel-harden/SKILL.md +16 -12
  54. package/dist/host/agents/skills/orkestrel-harden/references/bindings.md +23 -81
  55. package/dist/host/agents/skills/orkestrel-harden/references/centralization.md +4 -5
  56. package/dist/host/agents/skills/orkestrel-harden/references/contract.md +2 -0
  57. package/dist/host/agents/skills/orkestrel-harden/references/document.md +33 -0
  58. package/dist/host/agents/skills/orkestrel-harden/references/equivalence.md +6 -3
  59. package/dist/host/agents/skills/orkestrel-harden/references/hardening.md +8 -4
  60. package/dist/host/agents/skills/orkestrel-harden/references/research.md +2 -0
  61. package/dist/host/agents/skills/orkestrel-harden/scripts/discovery.ts +1272 -279
  62. package/dist/host/agents/skills/orkestrel-harden/scripts/measure.ts +425 -0
  63. package/dist/host/agents/skills/orkestrel-harden/scripts/titles.ts +603 -98
  64. package/dist/host/agents/skills/orkestrel-journey/SKILL.md +75 -98
  65. package/dist/host/agents/skills/orkestrel-journey/references/captures.md +54 -17
  66. package/dist/host/agents/skills/orkestrel-journey/references/decide.md +1 -20
  67. package/dist/host/agents/skills/orkestrel-journey/references/layer.md +21 -31
  68. package/dist/host/agents/skills/orkestrel-journey/references/styles.md +1 -1
  69. package/dist/host/agents/skills/orkestrel-parallel/SKILL.md +91 -30
  70. package/dist/host/agents/skills/orkestrel-parallel/agents/openai.yaml +2 -2
  71. package/dist/host/agents/skills/orkestrel-parallel/references/claude.md +34 -0
  72. package/dist/host/agents/skills/orkestrel-parallel/references/codex.md +29 -0
  73. package/dist/host/agents/skills/orkestrel-parallel/references/cursor.md +29 -0
  74. package/dist/host/agents/skills/orkestrel-parallel/references/t3.md +31 -0
  75. package/dist/host/agents/skills/orkestrel-parallel/scripts/cases.ts +389 -0
  76. package/dist/host/agents/skills/orkestrel-polish/SKILL.md +16 -20
  77. package/dist/host/agents/skills/orkestrel-polish/references/capture-harness.md +16 -26
  78. package/dist/host/agents/skills/orkestrel-publish/SKILL.md +12 -26
  79. package/dist/host/agents/skills/orkestrel-publish/agents/openai.yaml +2 -2
  80. package/dist/host/agents/skills/orkestrel-publish/references/adopt.md +23 -0
  81. package/dist/host/agents/skills/orkestrel-publish/references/release.md +4 -4
  82. package/dist/host/agents/skills/orkestrel-publish/references/wave.md +12 -10
  83. package/dist/host/agents/skills/orkestrel-publish/references/window.md +20 -25
  84. package/dist/host/agents/skills/orkestrel-publish/scripts/compare.ts +348 -59
  85. package/dist/host/agents/skills/orkestrel-publish/scripts/pins.ts +202 -22
  86. package/dist/host/agents/skills/orkestrel-publish/scripts/swap.ts +1061 -191
  87. package/dist/host/agents/skills/orkestrel-publish/scripts/wave.ts +812 -140
  88. package/dist/host/agents/skills/orkestrel-publish/scripts/window.ts +280 -38
  89. package/dist/host/agents/skills/orkestrel-scout/SKILL.md +3 -3
  90. package/dist/host/agents/skills/orkestrel-scout/scripts/map.ts +428 -70
  91. package/dist/host/agents/templates/brief.md +1 -1
  92. package/dist/host/agents/transports/claude-cli.md +3 -3
  93. package/dist/host/agents/transports/codex.md +3 -8
  94. package/dist/host/agents/transports/cursor.md +2 -3
  95. package/dist/host/claude/AGENTS.md +7 -10
  96. package/dist/host/claude/agents/analyst.md +3 -3
  97. package/dist/host/claude/agents/astra.md +3 -3
  98. package/dist/host/claude/agents/builder.md +1 -1
  99. package/dist/host/claude/agents/checker.md +1 -1
  100. package/dist/host/claude/agents/distiller.md +1 -1
  101. package/dist/host/claude/agents/grok.md +1 -1
  102. package/dist/host/claude/agents/opus.md +2 -2
  103. package/dist/host/claude/agents/orkestrel.md +57 -90
  104. package/dist/host/claude/agents/researcher.md +1 -1
  105. package/dist/host/claude/agents/reviewer.md +4 -0
  106. package/dist/host/claude/agents/scout.md +1 -1
  107. package/dist/host/claude/agents/verifier.md +1 -1
  108. package/dist/host/claude/rules/application.md +14 -21
  109. package/dist/host/claude/rules/architecture.md +34 -44
  110. package/dist/host/claude/rules/browser.md +3 -4
  111. package/dist/host/claude/rules/campaign.md +55 -0
  112. package/dist/host/claude/rules/documentation.md +26 -11
  113. package/dist/host/claude/rules/names.md +9 -4
  114. package/dist/host/claude/rules/patterns.md +6 -7
  115. package/dist/host/claude/rules/portability.md +2 -3
  116. package/dist/host/claude/rules/quality.md +4 -5
  117. package/dist/host/claude/rules/styles.md +2 -2
  118. package/dist/host/claude/rules/tests.md +57 -114
  119. package/dist/host/claude/rules/typescript.md +8 -10
  120. package/dist/host/claude/rules/workspace.md +21 -19
  121. package/dist/host/claude/rules/writing.md +3 -3
  122. package/dist/host/claude/skills/orkestrel-dispatch/SKILL.md +1 -1
  123. package/dist/host/claude/skills/orkestrel-harden/SKILL.md +1 -1
  124. package/dist/host/claude/skills/orkestrel-parallel/SKILL.md +1 -1
  125. package/dist/host/claude/skills/orkestrel-publish/SKILL.md +1 -1
  126. package/dist/host/claude/skills/orkestrel-scout/SKILL.md +1 -1
  127. package/dist/host/codex/agents/analyst.toml +9 -3
  128. package/dist/host/codex/agents/astra.toml +3 -4
  129. package/dist/host/codex/agents/builder.toml +1 -1
  130. package/dist/host/codex/agents/opus.toml +3 -4
  131. package/dist/host/codex/agents/orkestrel.toml +1 -1
  132. package/dist/host/codex/agents/researcher.toml +2 -2
  133. package/dist/host/codex/agents/verifier.toml +1 -1
  134. package/dist/host/codex/config.toml +3 -3
  135. package/dist/host/configs/helpers.ts +21 -1
  136. package/dist/host/configs/policy.ts +405 -16
  137. package/dist/host/cursor/rules/orchestration.mdc +1 -0
  138. package/dist/host/dotfiles/oxlintrc.json +141 -5
  139. package/dist/host/guides/agent.md +111 -134
  140. package/dist/host/guides/capture.md +801 -0
  141. package/dist/host/guides/probe.md +27 -8
  142. package/dist/host/guides/scaffold.md +152 -19
  143. package/dist/host/guides/study.md +534 -440
  144. package/dist/host/guides/test.md +111 -44
  145. package/dist/host/manifest.json +199 -242
  146. package/dist/host/tests/config.test.ts +1558 -219
  147. package/dist/host/tests/policy.test.ts +127 -1
  148. package/dist/host/tests/setupPolicy.ts +1389 -39
  149. package/dist/src/core/index.cjs +239 -87
  150. package/dist/src/core/index.cjs.map +1 -1
  151. package/dist/src/core/index.d.cts +123 -39
  152. package/dist/src/core/index.d.ts +123 -39
  153. package/dist/src/core/index.js +234 -86
  154. package/dist/src/core/index.js.map +1 -1
  155. package/dist/src/server/index.cjs +20 -27
  156. package/dist/src/server/index.cjs.map +1 -1
  157. package/dist/src/server/index.js +21 -28
  158. package/dist/src/server/index.js.map +1 -1
  159. package/package.json +11 -11
  160. package/dist/agents/skills/orkestrel-dispatch/scripts/helpers.js +0 -283
  161. package/dist/host/agents/skills/orkestrel-dispatch/references/bench.md +0 -25
  162. package/dist/host/agents/skills/orkestrel-dispatch/scripts/helpers.ts +0 -333
  163. package/dist/host/agents/skills/orkestrel-parallel/references/harnesses.md +0 -19
  164. 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
  })