@orkestrel/scaffold 0.0.49 → 0.0.51
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/README.md +4 -2
- package/dist/bin/main.js +229 -88
- package/dist/bin/main.js.map +1 -1
- package/dist/host/AGENTS.md +2 -2
- package/dist/host/agents/orchestration.md +42 -15
- package/dist/host/claude/agents/orkestrel.md +54 -54
- package/dist/host/claude/rules/architecture.md +6 -6
- package/dist/host/claude/rules/tests.md +10 -4
- package/dist/host/claude/rules/workspace.md +1 -1
- package/dist/host/codex/config.toml +1 -1
- package/dist/host/guides/scaffold.md +353 -117
- package/dist/host/manifest.json +10 -10
- package/dist/host/scripts/codex.sh +0 -0
- package/dist/host/scripts/cursor.sh +0 -0
- package/dist/host/scripts/deps.sh +0 -0
- package/dist/host/scripts/ollama.sh +0 -0
- package/dist/host/tests/config.test.ts +83 -5
- package/dist/src/core/index.cjs +1683 -431
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +222 -55
- package/dist/src/core/index.d.ts +222 -55
- package/dist/src/core/index.js +1678 -432
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/server/index.cjs +47 -15
- package/dist/src/server/index.cjs.map +1 -1
- package/dist/src/server/index.d.cts +42 -15
- package/dist/src/server/index.d.ts +42 -15
- package/dist/src/server/index.js +48 -17
- package/dist/src/server/index.js.map +1 -1
- package/package.json +9 -9
package/dist/host/manifest.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"storage": "AGENTS.md",
|
|
5
5
|
"destination": "AGENTS.md",
|
|
6
6
|
"executable": false,
|
|
7
|
-
"digest": "
|
|
7
|
+
"digest": "691f9fb52acd475a08109b93cdbed18628af36e9363f4803d84176a8117cf53c"
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"storage": "CLAUDE.md",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"storage": "agents/orchestration.md",
|
|
23
23
|
"destination": ".agents/orchestration.md",
|
|
24
24
|
"executable": false,
|
|
25
|
-
"digest": "
|
|
25
|
+
"digest": "63bacfdcd9b9918fb8302b723a0049bd3bbf74e939a8c1afbe50d0083c1742db"
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
"storage": "agents/skills/enterprise-bootstrap/SKILL.md",
|
|
@@ -268,7 +268,7 @@
|
|
|
268
268
|
"storage": "claude/agents/orkestrel.md",
|
|
269
269
|
"destination": ".claude/agents/orkestrel.md",
|
|
270
270
|
"executable": false,
|
|
271
|
-
"digest": "
|
|
271
|
+
"digest": "8e228a484383a04bf12fa510b3619eb7f38a512ec081ee0870ea7534b314945d"
|
|
272
272
|
},
|
|
273
273
|
{
|
|
274
274
|
"storage": "claude/agents/planner.md",
|
|
@@ -316,7 +316,7 @@
|
|
|
316
316
|
"storage": "claude/rules/architecture.md",
|
|
317
317
|
"destination": ".claude/rules/architecture.md",
|
|
318
318
|
"executable": false,
|
|
319
|
-
"digest": "
|
|
319
|
+
"digest": "94f70c20f927129cf9cb3965b3180a14e941e4f6eddf6512c4adc014e0bcbdf2"
|
|
320
320
|
},
|
|
321
321
|
{
|
|
322
322
|
"storage": "claude/rules/browser.md",
|
|
@@ -358,7 +358,7 @@
|
|
|
358
358
|
"storage": "claude/rules/tests.md",
|
|
359
359
|
"destination": ".claude/rules/tests.md",
|
|
360
360
|
"executable": false,
|
|
361
|
-
"digest": "
|
|
361
|
+
"digest": "2f8658425bc48b8751a5526300827c90f22226d4605514ec866891b5be4fabfb"
|
|
362
362
|
},
|
|
363
363
|
{
|
|
364
364
|
"storage": "claude/rules/typescript.md",
|
|
@@ -370,7 +370,7 @@
|
|
|
370
370
|
"storage": "claude/rules/workspace.md",
|
|
371
371
|
"destination": ".claude/rules/workspace.md",
|
|
372
372
|
"executable": false,
|
|
373
|
-
"digest": "
|
|
373
|
+
"digest": "8120bac99d00b4cb0613b0dc6cb4048074c86fdb6f6583be07514229d90bbd07"
|
|
374
374
|
},
|
|
375
375
|
{
|
|
376
376
|
"storage": "claude/rules/writing.md",
|
|
@@ -520,7 +520,7 @@
|
|
|
520
520
|
"storage": "codex/config.toml",
|
|
521
521
|
"destination": ".codex/config.toml",
|
|
522
522
|
"executable": false,
|
|
523
|
-
"digest": "
|
|
523
|
+
"digest": "e67d555ed4381b098b203e14484718e64e5262715d87b3f71857511cff929560"
|
|
524
524
|
},
|
|
525
525
|
{
|
|
526
526
|
"storage": "configs/helpers.ts",
|
|
@@ -604,7 +604,7 @@
|
|
|
604
604
|
"storage": "guides/scaffold.md",
|
|
605
605
|
"destination": "guides/scaffold.md",
|
|
606
606
|
"executable": false,
|
|
607
|
-
"digest": "
|
|
607
|
+
"digest": "1aace5325608c6880d73a2bae7c02936c26445ef7aff550c43a70333c7be85f6"
|
|
608
608
|
},
|
|
609
609
|
{
|
|
610
610
|
"storage": "scripts/codex.sh",
|
|
@@ -634,7 +634,7 @@
|
|
|
634
634
|
"storage": "tests/config.test.ts",
|
|
635
635
|
"destination": "tests/config.test.ts",
|
|
636
636
|
"executable": false,
|
|
637
|
-
"digest": "
|
|
637
|
+
"digest": "f8ddc2ab6cb54f2b1f51ad9212d7f09881271d265628299e5ce8f536cfec76a7"
|
|
638
638
|
},
|
|
639
639
|
{
|
|
640
640
|
"storage": "tests/policy.test.ts",
|
|
@@ -688,5 +688,5 @@
|
|
|
688
688
|
".codex/agents",
|
|
689
689
|
".cursor/rules"
|
|
690
690
|
],
|
|
691
|
-
"digest": "
|
|
691
|
+
"digest": "1472dda0358190ef9900fcdf86fdfb0ed60053b6095ba7b9f1b0efe490cc85ce"
|
|
692
692
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -152,11 +152,10 @@ describe('root configuration', () => {
|
|
|
152
152
|
pool: 'threads',
|
|
153
153
|
setup: ['./tests/setup.ts'],
|
|
154
154
|
})
|
|
155
|
-
// A row that is a configuration rather than a factory.
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
//
|
|
159
|
-
// wherever it runs instead of only where the shape happens to occur.
|
|
155
|
+
// A row that is a configuration rather than a factory. Every generated
|
|
156
|
+
// workspace registers the factory itself, so this shape is required here
|
|
157
|
+
// rather than observed: the proof exercises that resolution wherever it runs
|
|
158
|
+
// instead of only where a hand-written configuration happens to produce it.
|
|
160
159
|
expected.set('concrete', { include: 'tests/concrete.test.ts', setup: ['./tests/setup.ts'] })
|
|
161
160
|
|
|
162
161
|
const projects = configuration.test?.projects
|
|
@@ -297,6 +296,65 @@ describe('root configuration', () => {
|
|
|
297
296
|
}).toThrow(/strictly equal/u)
|
|
298
297
|
})
|
|
299
298
|
|
|
299
|
+
it('emits every project as a factory so the release mode reaches its proof', () => {
|
|
300
|
+
const projects = configuration.test?.projects
|
|
301
|
+
if (!Array.isArray(projects)) throw new Error('The root configuration carries no projects')
|
|
302
|
+
if (projects.length === 0) throw new Error('The root configuration registers no project')
|
|
303
|
+
// Measured: with `--mode release` on the command line, `import.meta.env.MODE` reads
|
|
304
|
+
// `release` inside a project Vitest calls and `test` inside an inline project
|
|
305
|
+
// configuration. `prepublishOnly` runs the distribution proof with `--mode release`, and
|
|
306
|
+
// that proof fails rather than skips only when it reads `release`, so converting these
|
|
307
|
+
// entries to inline configurations turns the publish gate into a skip while every suite
|
|
308
|
+
// stays green. The control is that conversion applied to one entry.
|
|
309
|
+
const inline = {
|
|
310
|
+
test: {
|
|
311
|
+
name: { label: 'inline' },
|
|
312
|
+
include: ['tests/inline.test.ts'],
|
|
313
|
+
setupFiles: ['./tests/setup.ts'],
|
|
314
|
+
},
|
|
315
|
+
}
|
|
316
|
+
const callable = projects.concat(inline).filter((entry) => typeof entry === 'function')
|
|
317
|
+
for (const entry of projects) expect(callable).toContain(entry)
|
|
318
|
+
expect(callable).not.toContain(inline)
|
|
319
|
+
})
|
|
320
|
+
|
|
321
|
+
it('keeps Vitest invocation fields out of project configurations', () => {
|
|
322
|
+
const projects = configuration.test?.projects
|
|
323
|
+
if (!Array.isArray(projects)) throw new Error('The root configuration carries no projects')
|
|
324
|
+
const factories = projects.filter((row) => typeof row === 'function')
|
|
325
|
+
if (factories.length === 0)
|
|
326
|
+
throw new Error('The root configuration registers no project factory')
|
|
327
|
+
const sentinel = {
|
|
328
|
+
command: 'sentinel-command',
|
|
329
|
+
isPreview: true,
|
|
330
|
+
isSsrBuild: true,
|
|
331
|
+
mode: 'sentinel-mode',
|
|
332
|
+
sentinel: true,
|
|
333
|
+
}
|
|
334
|
+
for (const factory of factories) {
|
|
335
|
+
const project: unknown = Reflect.apply(factory, undefined, [sentinel])
|
|
336
|
+
if (typeof project !== 'object' || project === null) {
|
|
337
|
+
throw new Error('A project factory returned no configuration')
|
|
338
|
+
}
|
|
339
|
+
for (const field of Object.keys(sentinel)) {
|
|
340
|
+
expect(Object.getOwnPropertyDescriptor(project, field)?.value).toBeUndefined()
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
const control = Object.defineProperty(() => ({ ...sentinel }), 'name', { value: 'control' })
|
|
345
|
+
expect(() => {
|
|
346
|
+
for (const factory of factories.concat(control)) {
|
|
347
|
+
const project: unknown = Reflect.apply(factory, undefined, [sentinel])
|
|
348
|
+
if (typeof project !== 'object' || project === null) {
|
|
349
|
+
throw new Error('A project factory returned no configuration')
|
|
350
|
+
}
|
|
351
|
+
for (const field of Object.keys(sentinel)) {
|
|
352
|
+
expect(Object.getOwnPropertyDescriptor(project, field)?.value).toBeUndefined()
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}).toThrow(/expected/u)
|
|
356
|
+
})
|
|
357
|
+
|
|
300
358
|
it('requires and validates every selected target wrapper', async () => {
|
|
301
359
|
const required: string[] = []
|
|
302
360
|
for (const axis of ['src', 'app']) {
|
|
@@ -513,6 +571,26 @@ describe('root configuration', () => {
|
|
|
513
571
|
)
|
|
514
572
|
})
|
|
515
573
|
|
|
574
|
+
it('rebuilds publishing workspaces before packing', () => {
|
|
575
|
+
const manifest: unknown = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8'))
|
|
576
|
+
if (typeof manifest !== 'object' || manifest === null) {
|
|
577
|
+
throw new Error('The package manifest is not a record')
|
|
578
|
+
}
|
|
579
|
+
const scripts: unknown = Object.getOwnPropertyDescriptor(manifest, 'scripts')?.value
|
|
580
|
+
if (typeof scripts !== 'object' || scripts === null) {
|
|
581
|
+
throw new Error('The package manifest carries no scripts')
|
|
582
|
+
}
|
|
583
|
+
const publishes = Object.getOwnPropertyDescriptor(manifest, 'private')?.value !== true
|
|
584
|
+
const prepack = Object.getOwnPropertyDescriptor(scripts, 'prepack')?.value
|
|
585
|
+
expect(prepack).toBe(publishes ? 'npm run build' : undefined)
|
|
586
|
+
|
|
587
|
+
const controlled = { ...scripts, prepack: 'npm run control' }
|
|
588
|
+
expect(() => {
|
|
589
|
+
const control = Object.getOwnPropertyDescriptor(controlled, 'prepack')?.value
|
|
590
|
+
expect(control).toBe(publishes ? 'npm run build' : undefined)
|
|
591
|
+
}).toThrow(/expected/u)
|
|
592
|
+
})
|
|
593
|
+
|
|
516
594
|
it('keeps the committed host inventory aligned with the vendored checkout bytes', async () => {
|
|
517
595
|
// Run this gate against a quiescent checkout. It compares two reads and cannot
|
|
518
596
|
// distinguish stale committed data from a source edit made while it runs.
|