@orkestrel/scaffold 0.0.103 → 0.0.104

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 (88) hide show
  1. package/dist/agents/skills/orkestrel-dispatch/scripts/helpers.js +84 -1
  2. package/dist/agents/skills/orkestrel-dispatch/scripts/launch.js +21 -6
  3. package/dist/agents/skills/orkestrel-harden/scripts/titles.js +338 -0
  4. package/dist/agents/skills/orkestrel-publish/scripts/swap.js +3 -39
  5. package/dist/agents/skills/orkestrel-publish/scripts/wave.js +433 -47
  6. package/dist/agents/skills/orkestrel-publish/scripts/window.js +2 -1
  7. package/dist/bin/main.js +16 -9
  8. package/dist/bin/main.js.map +1 -1
  9. package/dist/host/agents/orchestration.md +3 -3
  10. package/dist/host/agents/skills/enterprise-bootstrap/references/components.md +2 -2
  11. package/dist/host/agents/skills/enterprise-bootstrap/references/inspection.md +1 -1
  12. package/dist/host/agents/skills/orkestrel-build/SKILL.md +2 -2
  13. package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +2 -2
  14. package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +1 -1
  15. package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +3 -3
  16. package/dist/host/agents/skills/orkestrel-dispatch/SKILL.md +10 -10
  17. package/dist/host/agents/skills/orkestrel-dispatch/references/launch.md +1 -0
  18. package/dist/host/agents/skills/orkestrel-dispatch/scripts/helpers.ts +100 -1
  19. package/dist/host/agents/skills/orkestrel-dispatch/scripts/launch.ts +27 -6
  20. package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +4 -4
  21. package/dist/host/agents/skills/orkestrel-falsify/agents/openai.yaml +1 -1
  22. package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +8 -7
  23. package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +6 -6
  24. package/dist/host/agents/skills/orkestrel-harden/SKILL.md +6 -1
  25. package/dist/host/agents/skills/orkestrel-harden/references/bindings.md +1700 -0
  26. package/dist/host/agents/skills/orkestrel-harden/references/contract.md +2 -2
  27. package/dist/host/agents/skills/orkestrel-harden/references/equivalence.md +48 -0
  28. package/dist/host/agents/skills/orkestrel-harden/references/hardening.md +4 -2
  29. package/dist/host/agents/skills/orkestrel-harden/scripts/titles.ts +425 -0
  30. package/dist/host/agents/skills/orkestrel-journey/SKILL.md +2 -2
  31. package/dist/host/agents/skills/orkestrel-journey/references/captures.md +9 -8
  32. package/dist/host/agents/skills/orkestrel-polish/SKILL.md +3 -3
  33. package/dist/host/agents/skills/orkestrel-publish/SKILL.md +2 -2
  34. package/dist/host/agents/skills/orkestrel-publish/references/release.md +1 -0
  35. package/dist/host/agents/skills/orkestrel-publish/references/wave.md +56 -13
  36. package/dist/host/agents/skills/orkestrel-publish/references/window.md +6 -6
  37. package/dist/host/agents/skills/orkestrel-publish/scripts/swap.ts +5 -49
  38. package/dist/host/agents/skills/orkestrel-publish/scripts/wave.ts +646 -49
  39. package/dist/host/agents/skills/orkestrel-publish/scripts/window.ts +2 -1
  40. package/dist/host/agents/transports/codex.md +1 -1
  41. package/dist/host/claude/agents/orkestrel.md +54 -53
  42. package/dist/host/claude/agents/reviewer.md +4 -4
  43. package/dist/host/claude/rules/documentation.md +2 -1
  44. package/dist/host/claude/rules/patterns.md +1 -1
  45. package/dist/host/claude/rules/quality.md +2 -2
  46. package/dist/host/claude/rules/styles.md +1 -1
  47. package/dist/host/claude/rules/tests.md +34 -8
  48. package/dist/host/claude/rules/typescript.md +29 -0
  49. package/dist/host/claude/rules/workspace.md +32 -22
  50. package/dist/host/claude/rules/writing.md +34 -26
  51. package/dist/host/claude/settings.json +2 -0
  52. package/dist/host/claude/skills/orkestrel-debrief/SKILL.md +1 -1
  53. package/dist/host/claude/skills/orkestrel-falsify/SKILL.md +1 -1
  54. package/dist/host/codex/agents/analyst.toml +3 -3
  55. package/dist/host/codex/agents/reviewer.toml +4 -4
  56. package/dist/host/configs/policy.ts +13 -2
  57. package/dist/host/dotfiles/editorconfig +0 -1
  58. package/dist/host/dotfiles/gitattributes +0 -1
  59. package/dist/host/dotfiles/gitignore +0 -1
  60. package/dist/host/dotfiles/oxlintrc.json +24 -0
  61. package/dist/host/guides/agent.md +1638 -598
  62. package/dist/host/guides/budget.md +89 -29
  63. package/dist/host/guides/form.md +477 -91
  64. package/dist/host/guides/mcp.md +14 -2
  65. package/dist/host/guides/ollama.md +97 -73
  66. package/dist/host/guides/probe.md +1 -1
  67. package/dist/host/guides/scaffold.md +158 -101
  68. package/dist/host/guides/study.md +2635 -0
  69. package/dist/host/guides/table.md +225 -15
  70. package/dist/host/guides/terminal.md +22 -20
  71. package/dist/host/guides/test.md +689 -255
  72. package/dist/host/manifest.json +87 -63
  73. package/dist/host/tests/config.test.ts +136 -82
  74. package/dist/host/tests/policy.test.ts +39 -1
  75. package/dist/host/tests/setupPolicy.ts +86 -28
  76. package/dist/src/core/index.cjs +1387 -611
  77. package/dist/src/core/index.cjs.map +1 -1
  78. package/dist/src/core/index.d.cts +35 -20
  79. package/dist/src/core/index.d.ts +35 -20
  80. package/dist/src/core/index.js +1385 -612
  81. package/dist/src/core/index.js.map +1 -1
  82. package/dist/src/server/index.cjs +12 -12
  83. package/dist/src/server/index.cjs.map +1 -1
  84. package/dist/src/server/index.d.cts +12 -12
  85. package/dist/src/server/index.d.ts +12 -12
  86. package/dist/src/server/index.js +12 -12
  87. package/dist/src/server/index.js.map +1 -1
  88. package/package.json +4 -4
@@ -55,9 +55,9 @@ export declare interface BytesReadResult {
55
55
  * Each step reads one path and moves the climb to one other: a dangling link redirects it to the
56
56
  * link's target with the same suffix, and an absent name moves it to the parent with that name added
57
57
  * to the suffix. One successor per step makes the climb a bounded recursion rather than a worklist,
58
- * and the depth argument is its bound, so an adversarial path or a link cycle answers `undefined`
59
- * after `MAX_PATH_DEPTH` steps instead of walking indefinitely. {@link resolveRealPath} starts the
60
- * climb at depth 0 with nothing pending.
58
+ * and the depth argument is its bound, so a path or a link cycle whose climb runs past that bound
59
+ * answers `undefined` after `MAX_PATH_DEPTH` steps instead of walking indefinitely.
60
+ * {@link resolveRealPath} starts the climb at depth 0 with nothing pending.
61
61
  *
62
62
  * @example
63
63
  * ```ts
@@ -233,8 +233,8 @@ export declare const DIGEST_PATTERN: RegExp;
233
233
  *
234
234
  * @remarks
235
235
  * The one segment allowed to carry a colon. Every other segment is measured by
236
- * {@link INVALID_SEGMENT_CHARACTER_PATTERN}, which refuses one, so a stream name
237
- * such as `file.txt:stream` cannot be smuggled through a later segment.
236
+ * {@link INVALID_SEGMENT_CHARACTER_PATTERN}, which refuses one, so a later
237
+ * segment cannot carry a stream name such as `file.txt:stream`.
238
238
  */
239
239
  export declare const DRIVE_PATTERN: RegExp;
240
240
 
@@ -557,7 +557,7 @@ export declare const isHostManifest: Guard<HostManifest>;
557
557
  * @remarks
558
558
  * Compose this ahead of an element guard exactly as the core collection guard is
559
559
  * composed, and for the same reason: the item count is settled before anything
560
- * walks the items, and a hostile `length` accessor answers `false` rather than
560
+ * walks the items, and a throwing `length` accessor answers `false` rather than
561
561
  * escaping as a throw. It exists beside that guard rather than reusing it
562
562
  * because they bound different things — one bounds what a caller may hand a
563
563
  * public method, this one bounds what a checkout may contain.
@@ -1046,7 +1046,7 @@ export declare function matchesGitPath(path: string): boolean;
1046
1046
  * The one place absence is told apart from failure. Every read here answers
1047
1047
  * `undefined` or an empty result for a path that is not there and reports a path
1048
1048
  * that is there but unreadable, so they must never be read from the same
1049
- * caught value by eye. Total for any caught value, including a hostile one.
1049
+ * caught value by eye. Total for any caught value, including one whose reads throw.
1050
1050
  *
1051
1051
  * @example
1052
1052
  * ```ts
@@ -1588,7 +1588,7 @@ export declare class Materializer implements MaterializerInterface {
1588
1588
  * Far above the core collection ceiling, and deliberately so. A tracked or dirty
1589
1589
  * path list is the target repository's own fact rather than an argument a caller
1590
1590
  * authored, so measuring it against the ceiling that bounds a public collection
1591
- * would read a legitimately large checkout as hostile and refuse the deletion
1591
+ * would read a legitimately large checkout as off contract and refuse the deletion
1592
1592
  * verb on it.
1593
1593
  */
1594
1594
  export declare const MAX_INVENTORY_PATHS = 100000;
@@ -1687,7 +1687,7 @@ export declare class Materializer implements MaterializerInterface {
1687
1687
  * Candidates are taken deepest first, which is what lets a whole chain go: the
1688
1688
  * directory holding nothing but the emptied directory is empty in turn by the
1689
1689
  * time it is read. Each one is resolved through the containment law and left
1690
- * standing when it escapes the target, is not a physical directory, still holds
1690
+ * standing when it resolves outside the target, is not a physical directory, still holds
1691
1691
  * an entry, or refuses removal, and a directory left standing is absent from the
1692
1692
  * answer.
1693
1693
  *
@@ -2071,7 +2071,7 @@ export declare class Materializer implements MaterializerInterface {
2071
2071
  * concurrent rename or link swap during the call or before the caller finishes
2072
2072
  * using the returned path. This helper returns a string, not a filesystem
2073
2073
  * handle, so it cannot bind its containment check to a later operation. A caller
2074
- * that admits hostile concurrent namespace mutation needs a handle-bound
2074
+ * that admits untrusted concurrent namespace mutation needs a handle-bound
2075
2075
  * operation instead.
2076
2076
  *
2077
2077
  * @example
@@ -2099,7 +2099,7 @@ export declare class Materializer implements MaterializerInterface {
2099
2099
  * prefix moves the destination somewhere the text never named. So the deepest
2100
2100
  * existing ancestor is resolved and the remaining segments are re-joined onto
2101
2101
  * it. {@link climbRealPath} performs the climb and bounds it by the path-depth
2102
- * ceiling, so an adversarial path cannot make it walk indefinitely.
2102
+ * ceiling, so no path can make it walk indefinitely.
2103
2103
  *
2104
2104
  * The caller's own text is collapsed first, which is what `resolve` does with a
2105
2105
  * `..` the caller wrote: it cancels the segment before it as text, before any
@@ -2325,7 +2325,7 @@ export declare class Materializer implements MaterializerInterface {
2325
2325
  * baseline instead of a mixture it would have to reconcile.
2326
2326
  *
2327
2327
  * Requests are unauthenticated because every fleet repository is public, and
2328
- * they follow no redirect, so a misconfigured or hostile endpoint cannot move a
2328
+ * they follow no redirect, so a misconfigured or untrusted endpoint cannot move a
2329
2329
  * read to another host. Each one is bounded by its endpoint's timeout and by the
2330
2330
  * reader's own abort signal, so {@link Upstream.destroy} cancels what is in
2331
2331
  * flight instead of waiting for it.
@@ -55,9 +55,9 @@ export declare interface BytesReadResult {
55
55
  * Each step reads one path and moves the climb to one other: a dangling link redirects it to the
56
56
  * link's target with the same suffix, and an absent name moves it to the parent with that name added
57
57
  * to the suffix. One successor per step makes the climb a bounded recursion rather than a worklist,
58
- * and the depth argument is its bound, so an adversarial path or a link cycle answers `undefined`
59
- * after `MAX_PATH_DEPTH` steps instead of walking indefinitely. {@link resolveRealPath} starts the
60
- * climb at depth 0 with nothing pending.
58
+ * and the depth argument is its bound, so a path or a link cycle whose climb runs past that bound
59
+ * answers `undefined` after `MAX_PATH_DEPTH` steps instead of walking indefinitely.
60
+ * {@link resolveRealPath} starts the climb at depth 0 with nothing pending.
61
61
  *
62
62
  * @example
63
63
  * ```ts
@@ -233,8 +233,8 @@ export declare const DIGEST_PATTERN: RegExp;
233
233
  *
234
234
  * @remarks
235
235
  * The one segment allowed to carry a colon. Every other segment is measured by
236
- * {@link INVALID_SEGMENT_CHARACTER_PATTERN}, which refuses one, so a stream name
237
- * such as `file.txt:stream` cannot be smuggled through a later segment.
236
+ * {@link INVALID_SEGMENT_CHARACTER_PATTERN}, which refuses one, so a later
237
+ * segment cannot carry a stream name such as `file.txt:stream`.
238
238
  */
239
239
  export declare const DRIVE_PATTERN: RegExp;
240
240
 
@@ -557,7 +557,7 @@ export declare const isHostManifest: Guard<HostManifest>;
557
557
  * @remarks
558
558
  * Compose this ahead of an element guard exactly as the core collection guard is
559
559
  * composed, and for the same reason: the item count is settled before anything
560
- * walks the items, and a hostile `length` accessor answers `false` rather than
560
+ * walks the items, and a throwing `length` accessor answers `false` rather than
561
561
  * escaping as a throw. It exists beside that guard rather than reusing it
562
562
  * because they bound different things — one bounds what a caller may hand a
563
563
  * public method, this one bounds what a checkout may contain.
@@ -1046,7 +1046,7 @@ export declare function matchesGitPath(path: string): boolean;
1046
1046
  * The one place absence is told apart from failure. Every read here answers
1047
1047
  * `undefined` or an empty result for a path that is not there and reports a path
1048
1048
  * that is there but unreadable, so they must never be read from the same
1049
- * caught value by eye. Total for any caught value, including a hostile one.
1049
+ * caught value by eye. Total for any caught value, including one whose reads throw.
1050
1050
  *
1051
1051
  * @example
1052
1052
  * ```ts
@@ -1588,7 +1588,7 @@ export declare class Materializer implements MaterializerInterface {
1588
1588
  * Far above the core collection ceiling, and deliberately so. A tracked or dirty
1589
1589
  * path list is the target repository's own fact rather than an argument a caller
1590
1590
  * authored, so measuring it against the ceiling that bounds a public collection
1591
- * would read a legitimately large checkout as hostile and refuse the deletion
1591
+ * would read a legitimately large checkout as off contract and refuse the deletion
1592
1592
  * verb on it.
1593
1593
  */
1594
1594
  export declare const MAX_INVENTORY_PATHS = 100000;
@@ -1687,7 +1687,7 @@ export declare class Materializer implements MaterializerInterface {
1687
1687
  * Candidates are taken deepest first, which is what lets a whole chain go: the
1688
1688
  * directory holding nothing but the emptied directory is empty in turn by the
1689
1689
  * time it is read. Each one is resolved through the containment law and left
1690
- * standing when it escapes the target, is not a physical directory, still holds
1690
+ * standing when it resolves outside the target, is not a physical directory, still holds
1691
1691
  * an entry, or refuses removal, and a directory left standing is absent from the
1692
1692
  * answer.
1693
1693
  *
@@ -2071,7 +2071,7 @@ export declare class Materializer implements MaterializerInterface {
2071
2071
  * concurrent rename or link swap during the call or before the caller finishes
2072
2072
  * using the returned path. This helper returns a string, not a filesystem
2073
2073
  * handle, so it cannot bind its containment check to a later operation. A caller
2074
- * that admits hostile concurrent namespace mutation needs a handle-bound
2074
+ * that admits untrusted concurrent namespace mutation needs a handle-bound
2075
2075
  * operation instead.
2076
2076
  *
2077
2077
  * @example
@@ -2099,7 +2099,7 @@ export declare class Materializer implements MaterializerInterface {
2099
2099
  * prefix moves the destination somewhere the text never named. So the deepest
2100
2100
  * existing ancestor is resolved and the remaining segments are re-joined onto
2101
2101
  * it. {@link climbRealPath} performs the climb and bounds it by the path-depth
2102
- * ceiling, so an adversarial path cannot make it walk indefinitely.
2102
+ * ceiling, so no path can make it walk indefinitely.
2103
2103
  *
2104
2104
  * The caller's own text is collapsed first, which is what `resolve` does with a
2105
2105
  * `..` the caller wrote: it cancels the segment before it as text, before any
@@ -2325,7 +2325,7 @@ export declare class Materializer implements MaterializerInterface {
2325
2325
  * baseline instead of a mixture it would have to reconcile.
2326
2326
  *
2327
2327
  * Requests are unauthenticated because every fleet repository is public, and
2328
- * they follow no redirect, so a misconfigured or hostile endpoint cannot move a
2328
+ * they follow no redirect, so a misconfigured or untrusted endpoint cannot move a
2329
2329
  * read to another host. Each one is bounded by its endpoint's timeout and by the
2330
2330
  * reader's own abort signal, so {@link Upstream.destroy} cancels what is in
2331
2331
  * flight instead of waiting for it.
@@ -14,8 +14,8 @@ import { Emitter } from "@orkestrel/emitter";
14
14
  *
15
15
  * @remarks
16
16
  * The one segment allowed to carry a colon. Every other segment is measured by
17
- * {@link INVALID_SEGMENT_CHARACTER_PATTERN}, which refuses one, so a stream name
18
- * such as `file.txt:stream` cannot be smuggled through a later segment.
17
+ * {@link INVALID_SEGMENT_CHARACTER_PATTERN}, which refuses one, so a later
18
+ * segment cannot carry a stream name such as `file.txt:stream`.
19
19
  */
20
20
  var DRIVE_PATTERN = /^[A-Za-z]:$/;
21
21
  /**
@@ -80,7 +80,7 @@ var MAX_PATH_DEPTH = 64;
80
80
  * Far above the core collection ceiling, and deliberately so. A tracked or dirty
81
81
  * path list is the target repository's own fact rather than an argument a caller
82
82
  * authored, so measuring it against the ceiling that bounds a public collection
83
- * would read a legitimately large checkout as hostile and refuse the deletion
83
+ * would read a legitimately large checkout as off contract and refuse the deletion
84
84
  * verb on it.
85
85
  */
86
86
  var MAX_INVENTORY_PATHS = 1e5;
@@ -173,7 +173,7 @@ var PACKUMENT_MEDIA_TYPE = "application/vnd.npm.install-v1+json";
173
173
  * The one place absence is told apart from failure. Every read here answers
174
174
  * `undefined` or an empty result for a path that is not there and reports a path
175
175
  * that is there but unreadable, so they must never be read from the same
176
- * caught value by eye. Total for any caught value, including a hostile one.
176
+ * caught value by eye. Total for any caught value, including one whose reads throw.
177
177
  *
178
178
  * @example
179
179
  * ```ts
@@ -622,7 +622,7 @@ function computeFileDigest(path) {
622
622
  * prefix moves the destination somewhere the text never named. So the deepest
623
623
  * existing ancestor is resolved and the remaining segments are re-joined onto
624
624
  * it. {@link climbRealPath} performs the climb and bounds it by the path-depth
625
- * ceiling, so an adversarial path cannot make it walk indefinitely.
625
+ * ceiling, so no path can make it walk indefinitely.
626
626
  *
627
627
  * The caller's own text is collapsed first, which is what `resolve` does with a
628
628
  * `..` the caller wrote: it cancels the segment before it as text, before any
@@ -673,9 +673,9 @@ function resolveRealPath(path) {
673
673
  * Each step reads one path and moves the climb to one other: a dangling link redirects it to the
674
674
  * link's target with the same suffix, and an absent name moves it to the parent with that name added
675
675
  * to the suffix. One successor per step makes the climb a bounded recursion rather than a worklist,
676
- * and the depth argument is its bound, so an adversarial path or a link cycle answers `undefined`
677
- * after `MAX_PATH_DEPTH` steps instead of walking indefinitely. {@link resolveRealPath} starts the
678
- * climb at depth 0 with nothing pending.
676
+ * and the depth argument is its bound, so a path or a link cycle whose climb runs past that bound
677
+ * answers `undefined` after `MAX_PATH_DEPTH` steps instead of walking indefinitely.
678
+ * {@link resolveRealPath} starts the climb at depth 0 with nothing pending.
679
679
  *
680
680
  * @example
681
681
  * ```ts
@@ -728,7 +728,7 @@ function climbRealPath(current, pending, depth) {
728
728
  * concurrent rename or link swap during the call or before the caller finishes
729
729
  * using the returned path. This helper returns a string, not a filesystem
730
730
  * handle, so it cannot bind its containment check to a later operation. A caller
731
- * that admits hostile concurrent namespace mutation needs a handle-bound
731
+ * that admits untrusted concurrent namespace mutation needs a handle-bound
732
732
  * operation instead.
733
733
  *
734
734
  * @example
@@ -1030,7 +1030,7 @@ function listCanonPaths(target, groups) {
1030
1030
  * Candidates are taken deepest first, which is what lets a whole chain go: the
1031
1031
  * directory holding nothing but the emptied directory is empty in turn by the
1032
1032
  * time it is read. Each one is resolved through the containment law and left
1033
- * standing when it escapes the target, is not a physical directory, still holds
1033
+ * standing when it resolves outside the target, is not a physical directory, still holds
1034
1034
  * an entry, or refuses removal, and a directory left standing is absent from the
1035
1035
  * answer.
1036
1036
  *
@@ -2080,7 +2080,7 @@ var isDigest = stringOf({ pattern: DIGEST_PATTERN });
2080
2080
  * @remarks
2081
2081
  * Compose this ahead of an element guard exactly as the core collection guard is
2082
2082
  * composed, and for the same reason: the item count is settled before anything
2083
- * walks the items, and a hostile `length` accessor answers `false` rather than
2083
+ * walks the items, and a throwing `length` accessor answers `false` rather than
2084
2084
  * escaping as a throw. It exists beside that guard rather than reusing it
2085
2085
  * because they bound different things — one bounds what a caller may hand a
2086
2086
  * public method, this one bounds what a checkout may contain.
@@ -3925,7 +3925,7 @@ var ReadAllowance = class {
3925
3925
  * baseline instead of a mixture it would have to reconcile.
3926
3926
  *
3927
3927
  * Requests are unauthenticated because every fleet repository is public, and
3928
- * they follow no redirect, so a misconfigured or hostile endpoint cannot move a
3928
+ * they follow no redirect, so a misconfigured or untrusted endpoint cannot move a
3929
3929
  * read to another host. Each one is bounded by its endpoint's timeout and by the
3930
3930
  * reader's own abort signal, so {@link Upstream.destroy} cancels what is in
3931
3931
  * flight instead of waiting for it.