@orkestrel/scaffold 0.0.107 → 0.0.108
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/dist/agents/skills/orkestrel-dispatch/scripts/sweep.js +124 -4
- package/dist/bin/main.js +1 -1
- package/dist/bin/main.js.map +1 -1
- package/dist/host/AGENTS.md +5 -1
- package/dist/host/agents/orchestration.md +60 -45
- package/dist/host/agents/platforms/posix.md +15 -0
- package/dist/host/agents/platforms/windows.md +37 -0
- package/dist/host/agents/skills/orkestrel-debrief/references/retention.md +10 -10
- package/dist/host/agents/skills/orkestrel-dispatch/SKILL.md +6 -5
- package/dist/host/agents/skills/orkestrel-dispatch/references/launch.md +12 -8
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/sweep.ts +144 -4
- package/dist/host/agents/skills/orkestrel-parallel/SKILL.md +67 -10
- package/dist/host/agents/skills/orkestrel-parallel/agents/openai.yaml +2 -2
- package/dist/host/agents/skills/orkestrel-parallel/references/claude.md +32 -0
- package/dist/host/agents/skills/orkestrel-parallel/references/codex.md +28 -0
- package/dist/host/agents/skills/orkestrel-parallel/references/cursor.md +29 -0
- package/dist/host/agents/skills/orkestrel-parallel/references/t3.md +31 -0
- package/dist/host/agents/skills/orkestrel-publish/references/wave.md +2 -1
- package/dist/host/agents/transports/codex.md +1 -1
- package/dist/host/claude/AGENTS.md +6 -9
- package/dist/host/claude/rules/campaign.md +55 -0
- package/dist/host/claude/rules/documentation.md +2 -0
- package/dist/host/claude/rules/portability.md +1 -2
- package/dist/host/claude/rules/typescript.md +1 -1
- package/dist/host/claude/rules/writing.md +5 -2
- package/dist/host/claude/skills/orkestrel-parallel/SKILL.md +1 -1
- package/dist/host/codex/config.toml +3 -3
- package/dist/host/configs/policy.ts +106 -1
- package/dist/host/cursor/rules/orchestration.mdc +1 -0
- package/dist/host/dotfiles/oxlintrc.json +4 -2
- package/dist/host/guides/scaffold.md +56 -1
- package/dist/host/manifest.json +64 -27
- package/dist/host/tests/config.test.ts +560 -5
- package/dist/host/tests/setupPolicy.ts +496 -6
- package/dist/src/core/index.cjs +26 -2
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +1 -1
- package/dist/src/core/index.d.ts +1 -1
- package/dist/src/core/index.js +26 -2
- package/dist/src/core/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/host/agents/skills/orkestrel-parallel/references/harnesses.md +0 -19
|
@@ -45,6 +45,18 @@ export interface PolicySource {
|
|
|
45
45
|
readonly content: string
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
/** Pairs a collected Vue import fixture with its native and independent restriction outcomes. */
|
|
49
|
+
export interface PolicyVueImportCase extends PolicySource {
|
|
50
|
+
readonly boundary: boolean
|
|
51
|
+
readonly restricted: boolean
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Pairs a collected composable fixture with its placement and domain outcomes. */
|
|
55
|
+
export interface PolicyVueDomainCase extends PolicySource {
|
|
56
|
+
readonly misplaced: boolean
|
|
57
|
+
readonly malformed: boolean
|
|
58
|
+
}
|
|
59
|
+
|
|
48
60
|
/** Describes one policy failure the sweep reports. */
|
|
49
61
|
export interface PolicyViolation {
|
|
50
62
|
readonly rule: PolicyRule
|
|
@@ -4656,16 +4668,468 @@ export const COMPUTED_IMPORT_PATHS: readonly string[] = Object.freeze([
|
|
|
4656
4668
|
'.orkestrel/sample/instruments/harness/load.mts',
|
|
4657
4669
|
])
|
|
4658
4670
|
|
|
4671
|
+
/** Lists nested same-face imports carrying a native collection sentinel in each source. */
|
|
4672
|
+
export const POLICY_VUE_RELATIVE_SOURCES: readonly PolicySource[] = Object.freeze([
|
|
4673
|
+
{
|
|
4674
|
+
path: 'app/vue/components/Panel.vue',
|
|
4675
|
+
content: [
|
|
4676
|
+
'<script lang="ts">',
|
|
4677
|
+
"import * as boundary from '../composables/useTheme.js'",
|
|
4678
|
+
'void boundary',
|
|
4679
|
+
'debugger',
|
|
4680
|
+
'</script>',
|
|
4681
|
+
'',
|
|
4682
|
+
].join('\n'),
|
|
4683
|
+
},
|
|
4684
|
+
{
|
|
4685
|
+
path: 'app/vue/components/dialogs/Panel.vue',
|
|
4686
|
+
content: [
|
|
4687
|
+
'<script setup lang="ts">',
|
|
4688
|
+
"import * as boundary from '../../composables/useTheme.js'",
|
|
4689
|
+
'void boundary',
|
|
4690
|
+
'debugger',
|
|
4691
|
+
'</script>',
|
|
4692
|
+
'',
|
|
4693
|
+
].join('\n'),
|
|
4694
|
+
},
|
|
4695
|
+
{
|
|
4696
|
+
path: 'app/vue/features/editor/dialogs/helpers.ts',
|
|
4697
|
+
content: [
|
|
4698
|
+
"import * as boundary from '../../../components/Toolbar.vue'",
|
|
4699
|
+
'void boundary',
|
|
4700
|
+
'debugger',
|
|
4701
|
+
'',
|
|
4702
|
+
].join('\n'),
|
|
4703
|
+
},
|
|
4704
|
+
{
|
|
4705
|
+
path: 'app/vue/features/helpers.ts',
|
|
4706
|
+
content: [
|
|
4707
|
+
"import * as boundary from '../print/index.js'",
|
|
4708
|
+
'void boundary',
|
|
4709
|
+
'debugger',
|
|
4710
|
+
'',
|
|
4711
|
+
].join('\n'),
|
|
4712
|
+
},
|
|
4713
|
+
{
|
|
4714
|
+
path: 'src/vue/features/helpers.ts',
|
|
4715
|
+
content: [
|
|
4716
|
+
"import * as boundary from '../print/index.js'",
|
|
4717
|
+
'void boundary',
|
|
4718
|
+
'debugger',
|
|
4719
|
+
'',
|
|
4720
|
+
].join('\n'),
|
|
4721
|
+
},
|
|
4722
|
+
{
|
|
4723
|
+
path: 'src/vue/features/editor/helpers.ts',
|
|
4724
|
+
content: [
|
|
4725
|
+
"import * as boundary from '../../components/Toolbar.js'",
|
|
4726
|
+
'void boundary',
|
|
4727
|
+
'debugger',
|
|
4728
|
+
'',
|
|
4729
|
+
].join('\n'),
|
|
4730
|
+
},
|
|
4731
|
+
])
|
|
4732
|
+
|
|
4733
|
+
/** Supplies a valid direct Vue composable with its collection sentinel inside the exported function. */
|
|
4734
|
+
export const POLICY_VUE_COMPOSABLE_SOURCE: PolicySource = Object.freeze({
|
|
4735
|
+
path: 'app/vue/composables/useTheme.ts',
|
|
4736
|
+
content: [
|
|
4737
|
+
'/** Reads the selected theme. */',
|
|
4738
|
+
'export function useTheme(): string {',
|
|
4739
|
+
'\tdebugger',
|
|
4740
|
+
"\treturn 'light'",
|
|
4741
|
+
'}',
|
|
4742
|
+
'',
|
|
4743
|
+
].join('\n'),
|
|
4744
|
+
})
|
|
4745
|
+
|
|
4746
|
+
/** Lists lexical destinations independently of the host running the test. */
|
|
4747
|
+
export const POLICY_VUE_TARGET_CASES: ReadonlyArray<
|
|
4748
|
+
readonly [string, string, string, string | undefined]
|
|
4749
|
+
> = Object.freeze([
|
|
4750
|
+
[
|
|
4751
|
+
'/work/app/vue/components/Panel.vue',
|
|
4752
|
+
'/work',
|
|
4753
|
+
'../composables/useTheme.js',
|
|
4754
|
+
'app/vue/composables/useTheme.js',
|
|
4755
|
+
],
|
|
4756
|
+
[
|
|
4757
|
+
'/work/app/vue/components/dialogs/Panel.vue',
|
|
4758
|
+
'/work/',
|
|
4759
|
+
'../../composables/useTheme.js',
|
|
4760
|
+
'app/vue/composables/useTheme.js',
|
|
4761
|
+
],
|
|
4762
|
+
['/work/src/vue/features/editor/helpers.ts', '/work', '../../types.js', 'src/vue/types.js'],
|
|
4763
|
+
[
|
|
4764
|
+
'/work/app/vue/features/editor/dialogs/Panel.vue',
|
|
4765
|
+
'/work',
|
|
4766
|
+
'../../../components/Toolbar.vue',
|
|
4767
|
+
'app/vue/components/Toolbar.vue',
|
|
4768
|
+
],
|
|
4769
|
+
['/work/app/vue/helpers.ts', '/work', '../print/index.js', 'app/print/index.js'],
|
|
4770
|
+
['/work/app/vue/features/helpers.ts', '/work', '../print/index.js', 'app/vue/print/index.js'],
|
|
4771
|
+
['/work/src/vue/features/helpers.ts', '/work', '../print/index.js', 'src/vue/print/index.js'],
|
|
4772
|
+
['/work/app/vue/helpers.ts', '/work', '../browser?x', 'app/browser'],
|
|
4773
|
+
['/work/app/vue/helpers.ts', '/work', '../browser/#fragment', 'app/browser'],
|
|
4774
|
+
['/work/app/vue/helpers.ts', '/work', './entry.js?raw#fragment', 'app/vue/entry.js'],
|
|
4775
|
+
['/work/app/vue/helpers.ts', '/work', './%2e%2e/entry.js', 'app/vue/%2e%2e/entry.js'],
|
|
4776
|
+
['/work/app/vue/helpers.ts', '/work', '../../src/vue/helpers.js', 'src/vue/helpers.js'],
|
|
4777
|
+
[
|
|
4778
|
+
'/work/src/vue/nested/app/vue/helpers.ts',
|
|
4779
|
+
'/work',
|
|
4780
|
+
'../print/index.js',
|
|
4781
|
+
'src/vue/nested/app/print/index.js',
|
|
4782
|
+
],
|
|
4783
|
+
['/app/vue/helpers.ts', '/', './entry.js', 'app/vue/entry.js'],
|
|
4784
|
+
['C:/work/app/vue/features/helpers.ts', 'C:/work/', '../types.js', 'app/vue/types.js'],
|
|
4785
|
+
['C:\\work\\app\\vue\\features\\helpers.ts', 'C:\\work\\', '../types.js', 'app/vue/types.js'],
|
|
4786
|
+
['C:\\app\\vue\\helpers.ts', 'C:\\', './entry.js', 'app/vue/entry.js'],
|
|
4787
|
+
[
|
|
4788
|
+
'\\\\host\\share\\work\\app\\vue\\features\\helpers.ts',
|
|
4789
|
+
'\\\\host\\share\\work\\',
|
|
4790
|
+
'../types.js',
|
|
4791
|
+
'app/vue/types.js',
|
|
4792
|
+
],
|
|
4793
|
+
['//host/share/app/vue/helpers.ts', '//host/share', './entry.js', 'app/vue/entry.js'],
|
|
4794
|
+
['/work-other/app/vue/helpers.ts', '/work', './entry.js', undefined],
|
|
4795
|
+
['C:/work-other/app/vue/helpers.ts', 'C:/work', './entry.js', undefined],
|
|
4796
|
+
['c:/work/app/vue/helpers.ts', 'C:/work', './entry.js', undefined],
|
|
4797
|
+
['D:/work/app/vue/helpers.ts', 'C:/work', './entry.js', undefined],
|
|
4798
|
+
['//host/other/app/vue/helpers.ts', '//host/share', './entry.js', undefined],
|
|
4799
|
+
['/work/app/vuex/helpers.ts', '/work', './entry.js', undefined],
|
|
4800
|
+
['/work/other/app/vue/helpers.ts', '/work', './entry.js', undefined],
|
|
4801
|
+
['app/vue/helpers.ts', '/work', './entry.js', undefined],
|
|
4802
|
+
['/work/app/vue/helpers.ts', 'work', './entry.js', undefined],
|
|
4803
|
+
['/work/../other/app/vue/helpers.ts', '/work/../other', './entry.js', undefined],
|
|
4804
|
+
['/work/app/vue/helpers.ts', '/work', '../../../print/index.js', undefined],
|
|
4805
|
+
['/work/app/vue/helpers.ts', '/work', './../types.js', undefined],
|
|
4806
|
+
['/work/app/vue/helpers.ts', '/work', '.././types.js', undefined],
|
|
4807
|
+
['/work/app/vue/helpers.ts', '/work', './name/../types.js', undefined],
|
|
4808
|
+
['/work/app/vue/helpers.ts', '/work', './name/./types.js', undefined],
|
|
4809
|
+
['/work/app/vue/helpers.ts', '/work', './name//types.js', undefined],
|
|
4810
|
+
['/work/app/vue/helpers.ts', '/work', '..\\types.js', undefined],
|
|
4811
|
+
['/work/app/vue/helpers.ts', '/work', '/machine/entry.js', undefined],
|
|
4812
|
+
['/work/app/vue/helpers.ts', '/work', '@src/vue', undefined],
|
|
4813
|
+
['/work/app/vue/helpers.ts', '/work', '././entry.js', undefined],
|
|
4814
|
+
['/work/app/vue/helpers.ts', '/work', './.', undefined],
|
|
4815
|
+
['/work/app/vue/helpers.ts', '/work', '././entry.js?raw#fragment', undefined],
|
|
4816
|
+
['/work/app/vue/helpers.ts', '/work', './entry.js', 'app/vue/entry.js'],
|
|
4817
|
+
['/work/app/vue/features/helpers.ts', '/work', '../entry.js', 'app/vue/entry.js'],
|
|
4818
|
+
['/work/app/vue/helpers.ts', '/work', '.', 'app/vue'],
|
|
4819
|
+
['/work/app/vue/helpers.ts', '/work', './', 'app/vue'],
|
|
4820
|
+
])
|
|
4821
|
+
|
|
4822
|
+
/** Lists the two existing override owners without inferring faces from a filename suffix. */
|
|
4823
|
+
export const POLICY_VUE_FACES = Object.freeze(['src/vue', 'app/vue'] as const)
|
|
4824
|
+
|
|
4825
|
+
/** Lists importer locations that a directly invoked Vue rule must refuse to classify. */
|
|
4826
|
+
export const POLICY_VUE_UNCLASSIFIED_FILES = Object.freeze([
|
|
4827
|
+
'../outside/app/vue/helpers.ts',
|
|
4828
|
+
'other/app/vue/helpers.ts',
|
|
4829
|
+
'app/vuex/helpers.ts',
|
|
4830
|
+
])
|
|
4831
|
+
|
|
4832
|
+
/** Lists native source-bearing syntax, distinguishing forms that need TypeScript parsing. */
|
|
4833
|
+
export const POLICY_VUE_IMPORT_FORMS = Object.freeze([
|
|
4834
|
+
{ name: 'value', before: 'import * as boundary from ', after: '\nvoid boundary', typed: false },
|
|
4835
|
+
{ name: 'type', before: 'import type { Boundary } from ', after: '', typed: true },
|
|
4836
|
+
{ name: 'named', before: 'export { boundary } from ', after: '', typed: false },
|
|
4837
|
+
{ name: 'star', before: 'export * from ', after: '', typed: false },
|
|
4838
|
+
{ name: 'namedType', before: 'export type { Boundary } from ', after: '', typed: true },
|
|
4839
|
+
{ name: 'starType', before: 'export type * from ', after: '', typed: true },
|
|
4840
|
+
{ name: 'dynamic', before: 'void import(', after: ')', typed: false },
|
|
4841
|
+
])
|
|
4842
|
+
|
|
4843
|
+
/** Lists every configured extension and both native Vue script extraction forms. */
|
|
4844
|
+
export const POLICY_VUE_POPULATIONS = Object.freeze([
|
|
4845
|
+
{ name: 'cjs', extension: 'cjs', before: '', after: '', typed: false },
|
|
4846
|
+
{ name: 'cts', extension: 'cts', before: '', after: '', typed: true },
|
|
4847
|
+
{ name: 'js', extension: 'js', before: '', after: '', typed: false },
|
|
4848
|
+
{ name: 'jsx', extension: 'jsx', before: '', after: '', typed: false },
|
|
4849
|
+
{ name: 'mjs', extension: 'mjs', before: '', after: '', typed: false },
|
|
4850
|
+
{ name: 'mts', extension: 'mts', before: '', after: '', typed: true },
|
|
4851
|
+
{ name: 'ts', extension: 'ts', before: '', after: '', typed: true },
|
|
4852
|
+
{ name: 'tsx', extension: 'tsx', before: '', after: '', typed: true },
|
|
4853
|
+
{
|
|
4854
|
+
name: 'script',
|
|
4855
|
+
extension: 'vue',
|
|
4856
|
+
before: '<script lang="ts">\n',
|
|
4857
|
+
after: '</script>\n',
|
|
4858
|
+
typed: true,
|
|
4859
|
+
},
|
|
4860
|
+
{
|
|
4861
|
+
name: 'setup',
|
|
4862
|
+
extension: 'vue',
|
|
4863
|
+
before: '<script setup lang="ts">\n',
|
|
4864
|
+
after: '</script>\n',
|
|
4865
|
+
typed: true,
|
|
4866
|
+
},
|
|
4867
|
+
])
|
|
4868
|
+
|
|
4869
|
+
/** Crosses admitted nested imports and refused sibling imports with the actual syntax populations. */
|
|
4870
|
+
export const POLICY_VUE_IMPORT_CASES: readonly PolicyVueImportCase[] = Object.freeze(
|
|
4871
|
+
POLICY_VUE_FACES.flatMap((face) =>
|
|
4872
|
+
POLICY_VUE_POPULATIONS.flatMap((population) =>
|
|
4873
|
+
POLICY_VUE_IMPORT_FORMS.filter((form) => !form.typed || population.typed).flatMap((form) =>
|
|
4874
|
+
[false, true].map((boundary) => ({
|
|
4875
|
+
path: `${face}/${boundary ? '' : 'features/editor/'}${population.name}${form.name}.${population.extension}`,
|
|
4876
|
+
content:
|
|
4877
|
+
population.before +
|
|
4878
|
+
form.before +
|
|
4879
|
+
JSON.stringify(boundary ? '../print/index.js' : '../../components/Toolbar.vue') +
|
|
4880
|
+
form.after +
|
|
4881
|
+
'\ndebugger\n' +
|
|
4882
|
+
population.after,
|
|
4883
|
+
boundary,
|
|
4884
|
+
restricted: false,
|
|
4885
|
+
})),
|
|
4886
|
+
),
|
|
4887
|
+
),
|
|
4888
|
+
),
|
|
4889
|
+
)
|
|
4890
|
+
|
|
4891
|
+
/** Lists relative destinations and independent raw-spelling bans under the complete configuration. */
|
|
4892
|
+
export const POLICY_VUE_BOUNDARY_ROWS: ReadonlyArray<readonly [string, string, boolean, boolean]> =
|
|
4893
|
+
Object.freeze([
|
|
4894
|
+
['helpers.ts', '../print/index.js', true, false],
|
|
4895
|
+
['helpers.ts', '../src/print/index.js', true, false],
|
|
4896
|
+
['helpers.ts', '../print.ext/index.js', true, false],
|
|
4897
|
+
['helpers.ts', '../vuex/index.js', true, false],
|
|
4898
|
+
['helpers.ts', '../corex/index.js', true, false],
|
|
4899
|
+
['helpers.ts', '../browserx/index.js', true, false],
|
|
4900
|
+
['helpers.ts', '../print?raw', true, false],
|
|
4901
|
+
['helpers.ts', '../print#fragment', true, false],
|
|
4902
|
+
['features/helpers.ts', '../print/index.js', false, false],
|
|
4903
|
+
['features/helpers.ts', '../print.ext/index.js', false, false],
|
|
4904
|
+
['features/editor/dialogs/helpers.ts', '../../../components/Toolbar.vue', false, false],
|
|
4905
|
+
['features/editor/helpers.ts', '../../../print/index.js', true, false],
|
|
4906
|
+
['features/editor/helpers.ts', '../../../../src/print/index.js', true, false],
|
|
4907
|
+
['features/helpers.ts', '../types.js?raw#fragment', false, false],
|
|
4908
|
+
['helpers.ts', './index.js', false, false],
|
|
4909
|
+
['helpers.ts', '../../../outside/index.js', true, false],
|
|
4910
|
+
['helpers.ts', '@src/core', false, false],
|
|
4911
|
+
['helpers.ts', '@src/browser', false, false],
|
|
4912
|
+
['helpers.ts', '@src/vue', false, false],
|
|
4913
|
+
['helpers.ts', '@src/print', false, true],
|
|
4914
|
+
['helpers.ts', '@src/corex', false, true],
|
|
4915
|
+
['helpers.ts', '@src/', false, true],
|
|
4916
|
+
['helpers.ts', '@src/server', false, true],
|
|
4917
|
+
['helpers.ts', '@orkestrel/sample/server', false, true],
|
|
4918
|
+
['helpers.ts', 'node:fs', false, true],
|
|
4919
|
+
['helpers.ts', 'fs/promises', false, true],
|
|
4920
|
+
['helpers.ts', '/machine/entry.js', false, true],
|
|
4921
|
+
['helpers.ts', 'C:/machine/entry.js', false, true],
|
|
4922
|
+
['helpers.ts', 'C:\\machine\\entry.js', false, true],
|
|
4923
|
+
['helpers.ts', 'file:///machine/entry.js', false, true],
|
|
4924
|
+
['helpers.ts', 'https://host/entry.js', false, true],
|
|
4925
|
+
['helpers.ts', 'data:text/javascript,export{}', false, true],
|
|
4926
|
+
['helpers.ts', '..\\print\\index.js', false, true],
|
|
4927
|
+
['helpers.ts', './../types.js', true, true],
|
|
4928
|
+
['helpers.ts', '.././types.js', true, true],
|
|
4929
|
+
['helpers.ts', './name/../types.js', true, true],
|
|
4930
|
+
['helpers.ts', './name/./types.js', true, true],
|
|
4931
|
+
['helpers.ts', './name//types.js', true, true],
|
|
4932
|
+
['helpers.ts', 'typescript', false, true],
|
|
4933
|
+
['helpers.ts', '../server/index.js', true, true],
|
|
4934
|
+
['features/helpers.ts', '../server/index.js', false, true],
|
|
4935
|
+
])
|
|
4936
|
+
|
|
4937
|
+
/** Supplies face-specific alias requirements and preserves existing application-relative admissions. */
|
|
4938
|
+
export const POLICY_VUE_OWNER_ROWS: Readonly<
|
|
4939
|
+
Record<string, ReadonlyArray<readonly [string, string, boolean, boolean]>>
|
|
4940
|
+
> = Object.freeze({
|
|
4941
|
+
'src/vue': [
|
|
4942
|
+
['helpers.ts', '../browser?x', false, true],
|
|
4943
|
+
['helpers.ts', '../browser#fragment', false, true],
|
|
4944
|
+
['helpers.ts', '@app/core', false, true],
|
|
4945
|
+
['features/helpers.ts', '../../../app/core/types.js', true, true],
|
|
4946
|
+
['features/helpers.ts', '../../core/helpers.js', false, true],
|
|
4947
|
+
['features/helpers.ts', '../../browser/helpers.js', false, true],
|
|
4948
|
+
['features/helpers.ts', '../core/helpers.js', false, true],
|
|
4949
|
+
['features/helpers.ts', '../browser/helpers.js', false, true],
|
|
4950
|
+
['nested/app/vue/helpers.ts', '../print/index.js', false, false],
|
|
4951
|
+
],
|
|
4952
|
+
'app/vue': [
|
|
4953
|
+
['helpers.ts', '../browser?x', false, false],
|
|
4954
|
+
['helpers.ts', '../browser#fragment', false, false],
|
|
4955
|
+
['helpers.ts', '../browser/index.js', false, false],
|
|
4956
|
+
['features/helpers.ts', '../../browser/helpers.js', false, false],
|
|
4957
|
+
['helpers.ts', '../core/index.js', false, false],
|
|
4958
|
+
['helpers.ts', '../../src/core/index.js', false, false],
|
|
4959
|
+
['helpers.ts', '../../src/browser/index.js', false, false],
|
|
4960
|
+
['helpers.ts', '../../src/vue/index.js', false, false],
|
|
4961
|
+
['helpers.ts', '@app/core', false, false],
|
|
4962
|
+
['helpers.ts', '@app/browser', false, false],
|
|
4963
|
+
['helpers.ts', '@app/vue', false, false],
|
|
4964
|
+
['helpers.ts', '@app/print', false, true],
|
|
4965
|
+
['helpers.ts', '@app/server', false, true],
|
|
4966
|
+
['features/helpers.ts', '../../server/index.js', true, true],
|
|
4967
|
+
['helpers.ts', '../../src/server/index.js', true, true],
|
|
4968
|
+
['nested/src/vue/helpers.ts', '../print/index.js', false, false],
|
|
4969
|
+
],
|
|
4970
|
+
})
|
|
4971
|
+
|
|
4972
|
+
/** Materializes the boundary rows as separate collected modules without resolving their targets. */
|
|
4973
|
+
export const POLICY_VUE_BOUNDARY_CASES: readonly PolicyVueImportCase[] = Object.freeze([
|
|
4974
|
+
...POLICY_VUE_FACES.flatMap((face) =>
|
|
4975
|
+
[...POLICY_VUE_BOUNDARY_ROWS, ...(POLICY_VUE_OWNER_ROWS[face] ?? [])].map(
|
|
4976
|
+
([file, source, boundary, restricted], index) => ({
|
|
4977
|
+
path: `${face}/${file.replace('helpers.ts', `boundary${index}.ts`)}`,
|
|
4978
|
+
content:
|
|
4979
|
+
'import * as boundary from ' + JSON.stringify(source) + '\nvoid boundary\ndebugger\n',
|
|
4980
|
+
boundary,
|
|
4981
|
+
restricted,
|
|
4982
|
+
}),
|
|
4983
|
+
),
|
|
4984
|
+
),
|
|
4985
|
+
...POLICY_VUE_FACES.flatMap((face) => [
|
|
4986
|
+
{
|
|
4987
|
+
path: `${face}/leadingdotentry.ts`,
|
|
4988
|
+
content: 'import * as boundary from "././entry.js"\nvoid boundary\ndebugger\n',
|
|
4989
|
+
boundary: true,
|
|
4990
|
+
restricted: false,
|
|
4991
|
+
},
|
|
4992
|
+
{
|
|
4993
|
+
path: `${face}/leadingdotonly.ts`,
|
|
4994
|
+
content: 'import * as boundary from "./."\nvoid boundary\ndebugger\n',
|
|
4995
|
+
boundary: true,
|
|
4996
|
+
restricted: false,
|
|
4997
|
+
},
|
|
4998
|
+
{
|
|
4999
|
+
path: `${face}/leadingdotquery.ts`,
|
|
5000
|
+
content: 'import * as boundary from "././entry.js?raw#fragment"\nvoid boundary\ndebugger\n',
|
|
5001
|
+
boundary: true,
|
|
5002
|
+
restricted: false,
|
|
5003
|
+
},
|
|
5004
|
+
]),
|
|
5005
|
+
])
|
|
5006
|
+
|
|
5007
|
+
/** Lists nonliteral sources and source-less exports the relative rule leaves to their existing owners. */
|
|
5008
|
+
export const POLICY_VUE_COMPUTED_FORMS = Object.freeze([
|
|
5009
|
+
'const target = "../print/index.js"; void import(target)',
|
|
5010
|
+
'void import("../print/" + "index.js")',
|
|
5011
|
+
'void import(`../print/index.js`)',
|
|
5012
|
+
'const boundary = 1; export { boundary }',
|
|
5013
|
+
])
|
|
5014
|
+
|
|
5015
|
+
/** Supplies collection sentinels for nonliteral and source-less forms in every configured population. */
|
|
5016
|
+
export const POLICY_VUE_COMPUTED_CASES: readonly PolicyVueImportCase[] = Object.freeze(
|
|
5017
|
+
POLICY_VUE_FACES.flatMap((face) =>
|
|
5018
|
+
POLICY_VUE_POPULATIONS.flatMap((population) =>
|
|
5019
|
+
POLICY_VUE_COMPUTED_FORMS.map((content, index) => ({
|
|
5020
|
+
path: `${face}/computed${population.name}${index}.${population.extension}`,
|
|
5021
|
+
content: population.before + content + '\ndebugger\n' + population.after,
|
|
5022
|
+
boundary: false,
|
|
5023
|
+
restricted: false,
|
|
5024
|
+
})),
|
|
5025
|
+
),
|
|
5026
|
+
),
|
|
5027
|
+
)
|
|
5028
|
+
|
|
5029
|
+
/** Lists the measured CommonJS parser refusals by original relative filename, token, and offset. */
|
|
5030
|
+
export const POLICY_VUE_PARSER_ROWS: ReadonlyArray<readonly [string, string, number]> =
|
|
5031
|
+
Object.freeze([
|
|
5032
|
+
['cjsvalue.cjs', 'import', 0],
|
|
5033
|
+
['features/editor/cjsvalue.cjs', 'import', 0],
|
|
5034
|
+
['cjsnamed.cjs', 'export', 0],
|
|
5035
|
+
['features/editor/cjsnamed.cjs', 'export', 0],
|
|
5036
|
+
['cjsstar.cjs', 'export', 0],
|
|
5037
|
+
['features/editor/cjsstar.cjs', 'export', 0],
|
|
5038
|
+
['computedcjs3.cjs', 'export', 20],
|
|
5039
|
+
])
|
|
5040
|
+
|
|
5041
|
+
/** Retains each original parser-refused input on both faces with its exact expected native location. */
|
|
5042
|
+
export const POLICY_VUE_PARSER_CASES = Object.freeze(
|
|
5043
|
+
POLICY_VUE_FACES.flatMap((face) =>
|
|
5044
|
+
POLICY_VUE_PARSER_ROWS.map(([file, keyword, offset]) => {
|
|
5045
|
+
const path = `${face}/${file}`
|
|
5046
|
+
const source = [...POLICY_VUE_IMPORT_CASES, ...POLICY_VUE_COMPUTED_CASES].find(
|
|
5047
|
+
(candidate) => candidate.path === path,
|
|
5048
|
+
)
|
|
5049
|
+
if (source === undefined) throw new Error(`Missing original Vue parser fixture ${path}`)
|
|
5050
|
+
return {
|
|
5051
|
+
...source,
|
|
5052
|
+
keyword,
|
|
5053
|
+
message: `Cannot use ${keyword} statement outside a module`,
|
|
5054
|
+
span: { offset, length: keyword.length, line: 1, column: offset + 1 },
|
|
5055
|
+
}
|
|
5056
|
+
}),
|
|
5057
|
+
),
|
|
5058
|
+
)
|
|
5059
|
+
|
|
5060
|
+
/** Retains all other original inputs under strict rule-code and debugger-sentinel validation. */
|
|
5061
|
+
export const POLICY_VUE_PARSED_CASES: readonly PolicyVueImportCase[] = Object.freeze(
|
|
5062
|
+
[...POLICY_VUE_IMPORT_CASES, ...POLICY_VUE_COMPUTED_CASES].filter(
|
|
5063
|
+
(source) => !POLICY_VUE_PARSER_CASES.some((refused) => refused.path === source.path),
|
|
5064
|
+
),
|
|
5065
|
+
)
|
|
5066
|
+
|
|
5067
|
+
/** Preserves the two removed relative alternatives solely for scratch regression controls. */
|
|
5068
|
+
export const POLICY_VUE_ORIGINAL_RELATIVES: Readonly<Record<string, string>> = Object.freeze({
|
|
5069
|
+
'src/vue': String.raw`(?:\.\./)+(?:src/)?(?:[^/.scbv][^/.]*|s|s[^/.r][^/.]*|sr|sr[^/.c][^/.]*|src[^/.][^/.]*|c|c[^/.o][^/.]*|co|co[^/.r][^/.]*|cor|cor[^/.e][^/.]*|core[^/.][^/.]*|b|b[^/.r][^/.]*|br|br[^/.o][^/.]*|bro|bro[^/.w][^/.]*|brow|brow[^/.s][^/.]*|brows|brows[^/.e][^/.]*|browse|browse[^/.r][^/.]*|browser[^/.][^/.]*|v|v[^/.u][^/.]*|vu|vu[^/.e][^/.]*|vue[^/.][^/.]*)(?:/|$)`,
|
|
5070
|
+
'app/vue': String.raw`(?:\.\./)+(?:src/|app/)?(?:[^/.sacbv][^/.]*|s|s[^/.r][^/.]*|sr|sr[^/.c][^/.]*|src[^/.][^/.]*|a|a[^/.p][^/.]*|ap|ap[^/.p][^/.]*|app[^/.][^/.]*|c|c[^/.o][^/.]*|co|co[^/.r][^/.]*|cor|cor[^/.e][^/.]*|core[^/.][^/.]*|b|b[^/.r][^/.]*|br|br[^/.o][^/.]*|bro|bro[^/.w][^/.]*|brow|brow[^/.s][^/.]*|brows|brows[^/.e][^/.]*|browse|browse[^/.r][^/.]*|browser[^/.][^/.]*|v|v[^/.u][^/.]*|vu|vu[^/.e][^/.]*|vue[^/.][^/.]*)(?:/|$)`,
|
|
5071
|
+
})
|
|
5072
|
+
|
|
5073
|
+
/** Lists direct domain failures and look-alike folders that must remain unregistered. */
|
|
5074
|
+
export const POLICY_VUE_DOMAIN_CASES: readonly PolicyVueDomainCase[] = Object.freeze([
|
|
5075
|
+
{ ...POLICY_VUE_COMPOSABLE_SOURCE, misplaced: false, malformed: false },
|
|
5076
|
+
{
|
|
5077
|
+
path: 'app/vue/composables/useWrong.ts',
|
|
5078
|
+
content: 'export function useMode(): void { debugger }\n',
|
|
5079
|
+
misplaced: false,
|
|
5080
|
+
malformed: true,
|
|
5081
|
+
},
|
|
5082
|
+
{
|
|
5083
|
+
path: 'app/vue/composables/useHidden.ts',
|
|
5084
|
+
content: 'function useHidden(): void { debugger }\n',
|
|
5085
|
+
misplaced: false,
|
|
5086
|
+
malformed: true,
|
|
5087
|
+
},
|
|
5088
|
+
{
|
|
5089
|
+
path: 'app/vue/composables/useMany.ts',
|
|
5090
|
+
content: 'export function useMany(): void { debugger }\nexport function useOther(): void {}\n',
|
|
5091
|
+
misplaced: false,
|
|
5092
|
+
malformed: true,
|
|
5093
|
+
},
|
|
5094
|
+
{
|
|
5095
|
+
path: 'app/vue/composables/useExtra.ts',
|
|
5096
|
+
content: 'const extra = 1\nexport function useExtra(): void { debugger; void extra }\n',
|
|
5097
|
+
misplaced: false,
|
|
5098
|
+
malformed: true,
|
|
5099
|
+
},
|
|
5100
|
+
...[
|
|
5101
|
+
'app/vue/composables/nested/useTheme.ts',
|
|
5102
|
+
'app/vue/composables/nested/app/vue/composables/useTheme.ts',
|
|
5103
|
+
'app/vue/composablesExtra/useTheme.ts',
|
|
5104
|
+
'app/vue/other/useTheme.ts',
|
|
5105
|
+
'src/vue/composables/useTheme.ts',
|
|
5106
|
+
'app/vue/composables/index.ts',
|
|
5107
|
+
'app/vue/composables/main.ts',
|
|
5108
|
+
'app/vue/composables/UseTheme.ts',
|
|
5109
|
+
].map((path) => ({
|
|
5110
|
+
path,
|
|
5111
|
+
content: POLICY_VUE_COMPOSABLE_SOURCE.content,
|
|
5112
|
+
misplaced: true,
|
|
5113
|
+
malformed: false,
|
|
5114
|
+
})),
|
|
5115
|
+
{
|
|
5116
|
+
path: 'app/vue/composables/helpers.ts',
|
|
5117
|
+
content: POLICY_VUE_COMPOSABLE_SOURCE.content,
|
|
5118
|
+
misplaced: false,
|
|
5119
|
+
malformed: false,
|
|
5120
|
+
},
|
|
5121
|
+
])
|
|
5122
|
+
|
|
4659
5123
|
/**
|
|
4660
|
-
* Reads
|
|
5124
|
+
* Reads native diagnostic records through the installed linter without assigning rule codes.
|
|
4661
5125
|
* @param directory - The fixture workspace containing the lint configuration.
|
|
4662
|
-
* @param paths - The fixtures
|
|
4663
|
-
* @returns
|
|
5126
|
+
* @param paths - The fixtures expected to produce native diagnostics.
|
|
5127
|
+
* @returns Readonly native records for the caller's rule or parser validation contract.
|
|
4664
5128
|
*/
|
|
4665
|
-
export function
|
|
5129
|
+
export function readNativeDiagnostics(
|
|
4666
5130
|
directory: string,
|
|
4667
5131
|
paths: readonly string[],
|
|
4668
|
-
):
|
|
5132
|
+
): ReadonlyArray<Readonly<Record<string, unknown>>> {
|
|
4669
5133
|
const manifestPath = createRequire(import.meta.url).resolve('oxlint/package.json')
|
|
4670
5134
|
const manifest = readConfigRecord(JSON.parse(readFileSync(manifestPath, 'utf8')))
|
|
4671
5135
|
const entry =
|
|
@@ -4691,11 +5155,37 @@ export function readImportDiagnostics(
|
|
|
4691
5155
|
)
|
|
4692
5156
|
const diagnostics = readConfigRecord(JSON.parse(result.stdout)).diagnostics
|
|
4693
5157
|
if (!Array.isArray(diagnostics)) throw new Error('Missing lint diagnostics')
|
|
5158
|
+
return diagnostics.map(readConfigRecord)
|
|
5159
|
+
}
|
|
5160
|
+
|
|
5161
|
+
/**
|
|
5162
|
+
* Reads import restrictions and collection sentinels from the installed linter.
|
|
5163
|
+
* @param directory - The fixture workspace containing the lint configuration.
|
|
5164
|
+
* @param paths - The fixtures carrying debugger collection sentinels.
|
|
5165
|
+
* @returns Diagnostic codes paired with workspace-relative paths.
|
|
5166
|
+
*/
|
|
5167
|
+
export function readImportDiagnostics(
|
|
5168
|
+
directory: string,
|
|
5169
|
+
paths: readonly string[],
|
|
5170
|
+
): ReadonlySet<string> {
|
|
5171
|
+
const diagnostics = readNativeDiagnostics(directory, paths)
|
|
4694
5172
|
const codes = new Set(
|
|
4695
5173
|
diagnostics.map((value: unknown) => {
|
|
4696
5174
|
const diagnostic = readConfigRecord(value)
|
|
4697
5175
|
if (typeof diagnostic.code !== 'string' || typeof diagnostic.filename !== 'string')
|
|
4698
|
-
throw new Error(
|
|
5176
|
+
throw new Error(
|
|
5177
|
+
'Missing diagnostic location: ' +
|
|
5178
|
+
JSON.stringify({
|
|
5179
|
+
offending: value,
|
|
5180
|
+
invalidDiagnostics: diagnostics.filter((candidate: unknown) => {
|
|
5181
|
+
const candidateRecord = readConfigRecord(candidate)
|
|
5182
|
+
return (
|
|
5183
|
+
typeof candidateRecord.code !== 'string' ||
|
|
5184
|
+
typeof candidateRecord.filename !== 'string'
|
|
5185
|
+
)
|
|
5186
|
+
}),
|
|
5187
|
+
}),
|
|
5188
|
+
)
|
|
4699
5189
|
return (
|
|
4700
5190
|
diagnostic.code +
|
|
4701
5191
|
' ' +
|
package/dist/src/core/index.cjs
CHANGED
|
@@ -4,7 +4,7 @@ let _orkestrel_template = require("@orkestrel/template");
|
|
|
4
4
|
let _orkestrel_emitter = require("@orkestrel/emitter");
|
|
5
5
|
var package_default = {
|
|
6
6
|
name: "@orkestrel/scaffold",
|
|
7
|
-
version: "0.0.
|
|
7
|
+
version: "0.0.108",
|
|
8
8
|
description: "Scaffold workspaces with commands: new, audit, repair, catalog, and overwrite.",
|
|
9
9
|
keywords: [
|
|
10
10
|
"audit",
|
|
@@ -331,6 +331,7 @@ var CANON_PATHS = Object.freeze([
|
|
|
331
331
|
".claude/AGENTS.md",
|
|
332
332
|
".mcp.json",
|
|
333
333
|
".agents/orchestration.md",
|
|
334
|
+
".agents/platforms",
|
|
334
335
|
".agents/skills",
|
|
335
336
|
".agents/templates",
|
|
336
337
|
".agents/transports",
|
|
@@ -1370,7 +1371,30 @@ export function appServer(override?: UserConfig): UserConfig {
|
|
|
1370
1371
|
browser: { enabled: false },
|
|
1371
1372
|
},
|
|
1372
1373
|
}
|
|
1373
|
-
|
|
1374
|
+
// Fills the missing codeSplitting of each merged output with false and adds no output,
|
|
1375
|
+
// so an override's output list keeps its own members and their order. A member that
|
|
1376
|
+
// already supplies a value is returned as written, found by property lookup, so a value
|
|
1377
|
+
// an inherited getter supplies survives.
|
|
1378
|
+
const merged = mergeOverride(project, override)
|
|
1379
|
+
const rolldown = merged.build?.rolldownOptions
|
|
1380
|
+
const output = rolldown?.output
|
|
1381
|
+
const unsplit = { codeSplitting: false }
|
|
1382
|
+
return {
|
|
1383
|
+
...merged,
|
|
1384
|
+
build: {
|
|
1385
|
+
...merged.build,
|
|
1386
|
+
rolldownOptions: {
|
|
1387
|
+
...rolldown,
|
|
1388
|
+
output: Array.isArray(output)
|
|
1389
|
+
? output.map((member) =>
|
|
1390
|
+
member.codeSplitting === undefined ? { ...member, ...unsplit } : member,
|
|
1391
|
+
)
|
|
1392
|
+
: output?.codeSplitting === undefined
|
|
1393
|
+
? { ...output, ...unsplit }
|
|
1394
|
+
: output,
|
|
1395
|
+
},
|
|
1396
|
+
},
|
|
1397
|
+
}
|
|
1374
1398
|
}
|
|
1375
1399
|
`
|
|
1376
1400
|
}),
|