@orkestrel/scaffold 0.0.2 → 0.0.4

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 (82) hide show
  1. package/README.md +29 -15
  2. package/dist/bin/scaffold.js +1162 -1200
  3. package/dist/bin/scaffold.js.map +1 -1
  4. package/dist/host/AGENTS.md +124 -925
  5. package/dist/host/CLAUDE.md +335 -495
  6. package/dist/host/agents/skills/orkestrel-align-packages/SKILL.md +53 -0
  7. package/dist/host/agents/skills/orkestrel-align-packages/agents/openai.yaml +4 -0
  8. package/dist/host/agents/skills/orkestrel-align-packages/references/fleet.md +50 -0
  9. package/dist/host/agents/skills/orkestrel-align-packages/references/integration.md +56 -0
  10. package/dist/host/agents/skills/orkestrel-build-application/SKILL.md +64 -0
  11. package/dist/host/agents/skills/orkestrel-build-application/agents/openai.yaml +4 -0
  12. package/dist/host/agents/skills/orkestrel-build-application/references/application.md +129 -0
  13. package/dist/host/agents/skills/orkestrel-harden-package/SKILL.md +64 -0
  14. package/dist/host/agents/skills/orkestrel-harden-package/agents/openai.yaml +4 -0
  15. package/dist/host/agents/skills/orkestrel-harden-package/references/centralization.md +85 -0
  16. package/dist/host/agents/skills/orkestrel-harden-package/references/contract.md +57 -0
  17. package/dist/host/agents/skills/orkestrel-harden-package/references/hardening.md +93 -0
  18. package/dist/host/agents/skills/orkestrel-harden-package/references/research.md +61 -0
  19. package/dist/host/claude/agents/application.md +30 -0
  20. package/dist/host/claude/agents/builder.md +10 -7
  21. package/dist/host/claude/agents/checker.md +14 -8
  22. package/dist/host/claude/agents/codex.md +94 -0
  23. package/dist/host/claude/agents/grok.md +37 -34
  24. package/dist/host/claude/agents/implementer.md +40 -0
  25. package/dist/host/claude/agents/orkestrel.md +88 -223
  26. package/dist/host/claude/agents/planner.md +13 -34
  27. package/dist/host/claude/agents/reviewer.md +38 -24
  28. package/dist/host/claude/agents/verifier.md +14 -10
  29. package/dist/host/claude/rules/application.md +57 -0
  30. package/dist/host/claude/rules/architecture.md +180 -0
  31. package/dist/host/claude/rules/browser.md +28 -0
  32. package/dist/host/claude/rules/documentation.md +64 -0
  33. package/dist/host/claude/rules/names.md +209 -0
  34. package/dist/host/claude/rules/patterns.md +130 -0
  35. package/dist/host/claude/rules/quality.md +45 -0
  36. package/dist/host/claude/rules/styles.md +64 -0
  37. package/dist/host/claude/rules/tests.md +123 -0
  38. package/dist/host/claude/rules/typescript.md +78 -0
  39. package/dist/host/claude/rules/workspace.md +180 -0
  40. package/dist/host/claude/settings.json +112 -0
  41. package/dist/host/claude/skills/orkestrel-align-packages/SKILL.md +10 -0
  42. package/dist/host/claude/skills/orkestrel-build-application/SKILL.md +12 -0
  43. package/dist/host/claude/skills/orkestrel-harden-package/SKILL.md +10 -0
  44. package/dist/host/codex/agents/analyst.toml +15 -0
  45. package/dist/host/codex/agents/application.toml +25 -0
  46. package/dist/host/codex/agents/builder.toml +24 -0
  47. package/dist/host/codex/agents/checker.toml +15 -0
  48. package/dist/host/codex/agents/grok.toml +17 -0
  49. package/dist/host/codex/agents/implementer.toml +17 -0
  50. package/dist/host/codex/agents/opus.toml +25 -0
  51. package/dist/host/codex/agents/orkestrel.toml +16 -0
  52. package/dist/host/codex/agents/planner.toml +20 -0
  53. package/dist/host/codex/agents/reviewer.toml +18 -0
  54. package/dist/host/codex/agents/verifier.toml +14 -0
  55. package/dist/host/codex/config.toml +66 -0
  56. package/dist/host/cursor/mcp.json +12 -0
  57. package/dist/host/dotfiles/mcp.json +8 -0
  58. package/dist/host/dotfiles/oxlintrc.json +307 -1
  59. package/dist/host/guides/src/scaffold.md +2059 -2007
  60. package/dist/host/manifest.json +376 -137
  61. package/dist/host/scripts/codex.sh +49 -0
  62. package/dist/host/scripts/cursor.sh +33 -47
  63. package/dist/host/scripts/deps.sh +34 -16
  64. package/dist/host/scripts/ollama.sh +6 -149
  65. package/dist/host/tests/setupPolicy.ts +390 -0
  66. package/dist/src/core/index.cjs +6603 -1200
  67. package/dist/src/core/index.cjs.map +1 -1
  68. package/dist/src/core/index.d.cts +802 -267
  69. package/dist/src/core/index.d.ts +802 -267
  70. package/dist/src/core/index.js +6521 -1192
  71. package/dist/src/core/index.js.map +1 -1
  72. package/dist/src/server/index.cjs +3132 -593
  73. package/dist/src/server/index.cjs.map +1 -1
  74. package/dist/src/server/index.d.cts +643 -95
  75. package/dist/src/server/index.d.ts +643 -95
  76. package/dist/src/server/index.js +3054 -594
  77. package/dist/src/server/index.js.map +1 -1
  78. package/package.json +16 -12
  79. package/dist/host/claude/agents/composer.md +0 -64
  80. package/dist/host/claude/agents/researcher.md +0 -38
  81. package/dist/host/claude/agents/scout.md +0 -35
  82. package/dist/host/github/workflows/ci.yml +0 -64
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "codex": {
4
+ "command": "codex",
5
+ "args": ["mcp-server"]
6
+ }
7
+ }
8
+ }
@@ -4,6 +4,18 @@
4
4
  "rules": {
5
5
  "@typescript-eslint/no-explicit-any": "error",
6
6
  "@typescript-eslint/no-non-null-assertion": "error",
7
+ "typescript/consistent-type-assertions": ["error", { "assertionStyle": "never" }],
8
+ "typescript/no-require-imports": "error",
9
+ "typescript/array-type": ["error", { "default": "array-simple" }],
10
+ "typescript/ban-ts-comment": [
11
+ "error",
12
+ {
13
+ "ts-expect-error": true,
14
+ "ts-ignore": true,
15
+ "ts-nocheck": true,
16
+ "ts-check": false
17
+ }
18
+ ],
7
19
  "@typescript-eslint/no-unused-vars": [
8
20
  "error",
9
21
  {
@@ -22,8 +34,14 @@
22
34
  ],
23
35
 
24
36
  "import/no-default-export": "error",
37
+ "import/no-dynamic-require": ["error", { "esmodule": true }],
25
38
  "import/extensions": "off",
26
- "import/no-unassigned-import": ["error", { "allow": ["**/*.css", "**/*.scss"] }],
39
+ "import/no-unassigned-import": [
40
+ "error",
41
+ {
42
+ "allow": ["**/*.{css,less,sass,scss,styl,stylus,pcss,postcss,sss}"]
43
+ }
44
+ ],
27
45
 
28
46
  "no-var": "error",
29
47
  "prefer-const": "error",
@@ -53,6 +71,294 @@
53
71
  "import/no-default-export": "off",
54
72
  "no-unused-expressions": "off"
55
73
  }
74
+ },
75
+ {
76
+ "files": ["src/core/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}"],
77
+ "rules": {
78
+ "no-restricted-imports": [
79
+ "error",
80
+ {
81
+ "patterns": [
82
+ {
83
+ "regex": "^(?:/|[A-Za-z]:[\\\\/])",
84
+ "message": "imports must not use machine-specific absolute paths"
85
+ },
86
+ {
87
+ "regex": "^(?!node:)[A-Za-z][A-Za-z0-9+.-]*:",
88
+ "message": "imports must not use non-Node URL schemes"
89
+ },
90
+ {
91
+ "regex": "(?:^|/)(?!\\.{1,2}(?:/|$))[^/]+/\\.{1,2}(?:/|$)",
92
+ "message": "internal import paths must not contain noncanonical dot segments"
93
+ },
94
+ {
95
+ "regex": "^(?:(?:\\./)+\\.\\.(?:/|$)|(?:\\.\\./)+(?:\\./)+)|//",
96
+ "message": "relative import paths must not contain normalized traversal segments"
97
+ },
98
+ {
99
+ "regex": "\\\\",
100
+ "message": "import paths must use portable forward slashes"
101
+ },
102
+ {
103
+ "regex": "^(?:@app(?:[/?#]|$)|(?:\\.\\./)+app(?:[/?#]|$))",
104
+ "message": "src environments must not depend on private app modules"
105
+ },
106
+ {
107
+ "regex": "\\.(?:css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:[?#]|$)",
108
+ "message": "src/core must not import browser stylesheets"
109
+ },
110
+ {
111
+ "regex": "^(?:node:|(?:_(?:http_(?:agent|client|common|incoming|outgoing|server)|stream_(?:duplex|passthrough|readable|transform|wrap|writable)|tls_(?:common|wrap))|assert(?:/strict)?|async_hooks|buffer|child_process|cluster|console|constants|crypto|dgram|diagnostics_channel|dns(?:/promises)?|domain|events|fs(?:/promises)?|http|http2|https|inspector(?:/promises)?|module|net|os|path(?:/(?:posix|win32))?|perf_hooks|process|punycode|querystring|readline(?:/promises)?|repl|sqlite|stream(?:/(?:consumers|promises|web))?|string_decoder|sys|timers(?:/promises)?|tls|trace_events|tty|url|util(?:/types)?|v8|vm|wasi|worker_threads|zlib)(?:[/?#]|$)|(?:vue|vite)(?:[/?#]|$)|@(?:vue|vitejs)/|@src/(?:browser|server)(?:[/?#]|$)|@orkestrel/[^/]+/(?:browser|server)(?:[/?#]|$)|(?:\\.\\./)+(?:browser|server)(?:[/?#]|$))",
112
+ "message": "src/core must remain host-independent"
113
+ }
114
+ ]
115
+ }
116
+ ]
117
+ }
118
+ },
119
+ {
120
+ "files": ["src/browser/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}"],
121
+ "rules": {
122
+ "no-restricted-imports": [
123
+ "error",
124
+ {
125
+ "patterns": [
126
+ {
127
+ "regex": "^(?:/|[A-Za-z]:[\\\\/])",
128
+ "message": "imports must not use machine-specific absolute paths"
129
+ },
130
+ {
131
+ "regex": "^(?!node:)[A-Za-z][A-Za-z0-9+.-]*:",
132
+ "message": "imports must not use non-Node URL schemes"
133
+ },
134
+ {
135
+ "regex": "(?:^|/)(?!\\.{1,2}(?:/|$))[^/]+/\\.{1,2}(?:/|$)",
136
+ "message": "internal import paths must not contain noncanonical dot segments"
137
+ },
138
+ {
139
+ "regex": "^(?:(?:\\./)+\\.\\.(?:/|$)|(?:\\.\\./)+(?:\\./)+)|//",
140
+ "message": "relative import paths must not contain normalized traversal segments"
141
+ },
142
+ {
143
+ "regex": "\\\\",
144
+ "message": "import paths must use portable forward slashes"
145
+ },
146
+ {
147
+ "regex": "^(?:@app(?:[/?#]|$)|(?:\\.\\./)+app(?:[/?#]|$))",
148
+ "message": "src environments must not depend on private app modules"
149
+ },
150
+ {
151
+ "regex": "^(?:node:|(?:_(?:http_(?:agent|client|common|incoming|outgoing|server)|stream_(?:duplex|passthrough|readable|transform|wrap|writable)|tls_(?:common|wrap))|assert(?:/strict)?|async_hooks|buffer|child_process|cluster|console|constants|crypto|dgram|diagnostics_channel|dns(?:/promises)?|domain|events|fs(?:/promises)?|http|http2|https|inspector(?:/promises)?|module|net|os|path(?:/(?:posix|win32))?|perf_hooks|process|punycode|querystring|readline(?:/promises)?|repl|sqlite|stream(?:/(?:consumers|promises|web))?|string_decoder|sys|timers(?:/promises)?|tls|trace_events|tty|url|util(?:/types)?|v8|vm|wasi|worker_threads|zlib)(?:[/?#]|$)|@src/server(?:[/?#]|$)|@orkestrel/[^/]+/server(?:[/?#]|$)|(?:\\.\\./)+(?:server|src/server|app/server)(?:[/?#]|$))",
152
+ "message": "src/browser must not depend on Node or server-only modules"
153
+ }
154
+ ]
155
+ }
156
+ ]
157
+ }
158
+ },
159
+ {
160
+ "files": ["src/server/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}"],
161
+ "rules": {
162
+ "no-restricted-imports": [
163
+ "error",
164
+ {
165
+ "patterns": [
166
+ {
167
+ "regex": "^(?:/|[A-Za-z]:[\\\\/])",
168
+ "message": "imports must not use machine-specific absolute paths"
169
+ },
170
+ {
171
+ "regex": "^(?!node:)[A-Za-z][A-Za-z0-9+.-]*:",
172
+ "message": "imports must not use non-Node URL schemes"
173
+ },
174
+ {
175
+ "regex": "(?:^|/)(?!\\.{1,2}(?:/|$))[^/]+/\\.{1,2}(?:/|$)",
176
+ "message": "internal import paths must not contain noncanonical dot segments"
177
+ },
178
+ {
179
+ "regex": "^(?:(?:\\./)+\\.\\.(?:/|$)|(?:\\.\\./)+(?:\\./)+)|//",
180
+ "message": "relative import paths must not contain normalized traversal segments"
181
+ },
182
+ {
183
+ "regex": "\\\\",
184
+ "message": "import paths must use portable forward slashes"
185
+ },
186
+ {
187
+ "regex": "^(?:@app(?:[/?#]|$)|(?:\\.\\./)+app(?:[/?#]|$))",
188
+ "message": "src environments must not depend on private app modules"
189
+ },
190
+ {
191
+ "regex": "\\.(?:css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:[?#]|$)",
192
+ "message": "src/server must not import browser stylesheets"
193
+ },
194
+ {
195
+ "regex": "^(?:(?:vue|vite)(?:[/?#]|$)|@(?:vue|vitejs)/|@src/browser(?:[/?#]|$)|@orkestrel/[^/]+/browser(?:[/?#]|$)|(?:\\.\\./)+(?:browser|src/browser|app/browser)(?:[/?#]|$))",
196
+ "message": "src/server must not depend on Vue or browser-only modules"
197
+ }
198
+ ]
199
+ }
200
+ ]
201
+ }
202
+ },
203
+ {
204
+ "files": ["app/core/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}"],
205
+ "rules": {
206
+ "no-restricted-imports": [
207
+ "error",
208
+ {
209
+ "patterns": [
210
+ {
211
+ "regex": "^(?:/|[A-Za-z]:[\\\\/])",
212
+ "message": "imports must not use machine-specific absolute paths"
213
+ },
214
+ {
215
+ "regex": "^(?!node:)[A-Za-z][A-Za-z0-9+.-]*:",
216
+ "message": "imports must not use non-Node URL schemes"
217
+ },
218
+ {
219
+ "regex": "(?:^|/)(?!\\.{1,2}(?:/|$))[^/]+/\\.{1,2}(?:/|$)",
220
+ "message": "internal import paths must not contain noncanonical dot segments"
221
+ },
222
+ {
223
+ "regex": "^(?:(?:\\./)+\\.\\.(?:/|$)|(?:\\.\\./)+(?:\\./)+)|//",
224
+ "message": "relative import paths must not contain normalized traversal segments"
225
+ },
226
+ {
227
+ "regex": "\\\\",
228
+ "message": "import paths must use portable forward slashes"
229
+ },
230
+ {
231
+ "regex": "\\.(?:css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:[?#]|$)",
232
+ "message": "app/core must not import browser stylesheets"
233
+ },
234
+ {
235
+ "regex": "^(?:node:|(?:_(?:http_(?:agent|client|common|incoming|outgoing|server)|stream_(?:duplex|passthrough|readable|transform|wrap|writable)|tls_(?:common|wrap))|assert(?:/strict)?|async_hooks|buffer|child_process|cluster|console|constants|crypto|dgram|diagnostics_channel|dns(?:/promises)?|domain|events|fs(?:/promises)?|http|http2|https|inspector(?:/promises)?|module|net|os|path(?:/(?:posix|win32))?|perf_hooks|process|punycode|querystring|readline(?:/promises)?|repl|sqlite|stream(?:/(?:consumers|promises|web))?|string_decoder|sys|timers(?:/promises)?|tls|trace_events|tty|url|util(?:/types)?|v8|vm|wasi|worker_threads|zlib)(?:[/?#]|$)|(?:vue|vite)(?:[/?#]|$)|@(?:vue|vitejs)/|@app/(?:browser|server)(?:[/?#]|$)|@src/(?:browser|server)(?:[/?#]|$)|@orkestrel/[^/]+/(?:browser|server)(?:[/?#]|$)|(?:\\.\\./)+(?:browser|server|src/(?:browser|server)|app/(?:browser|server))(?:[/?#]|$))",
236
+ "message": "app/core must remain host-independent"
237
+ }
238
+ ]
239
+ }
240
+ ]
241
+ }
242
+ },
243
+ {
244
+ "files": ["app/browser/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}"],
245
+ "rules": {
246
+ "no-restricted-imports": [
247
+ "error",
248
+ {
249
+ "patterns": [
250
+ {
251
+ "regex": "^(?:/|[A-Za-z]:[\\\\/])",
252
+ "message": "imports must not use machine-specific absolute paths"
253
+ },
254
+ {
255
+ "regex": "^(?!node:)[A-Za-z][A-Za-z0-9+.-]*:",
256
+ "message": "imports must not use non-Node URL schemes"
257
+ },
258
+ {
259
+ "regex": "(?:^|/)(?!\\.{1,2}(?:/|$))[^/]+/\\.{1,2}(?:/|$)",
260
+ "message": "internal import paths must not contain noncanonical dot segments"
261
+ },
262
+ {
263
+ "regex": "^(?:(?:\\./)+\\.\\.(?:/|$)|(?:\\.\\./)+(?:\\./)+)|//",
264
+ "message": "relative import paths must not contain normalized traversal segments"
265
+ },
266
+ {
267
+ "regex": "\\\\",
268
+ "message": "import paths must use portable forward slashes"
269
+ },
270
+ {
271
+ "regex": "^(?:node:|(?:_(?:http_(?:agent|client|common|incoming|outgoing|server)|stream_(?:duplex|passthrough|readable|transform|wrap|writable)|tls_(?:common|wrap))|assert(?:/strict)?|async_hooks|buffer|child_process|cluster|console|constants|crypto|dgram|diagnostics_channel|dns(?:/promises)?|domain|events|fs(?:/promises)?|http|http2|https|inspector(?:/promises)?|module|net|os|path(?:/(?:posix|win32))?|perf_hooks|process|punycode|querystring|readline(?:/promises)?|repl|sqlite|stream(?:/(?:consumers|promises|web))?|string_decoder|sys|timers(?:/promises)?|tls|trace_events|tty|url|util(?:/types)?|v8|vm|wasi|worker_threads|zlib)(?:[/?#]|$)|@app/server(?:[/?#]|$)|@src/server(?:[/?#]|$)|@orkestrel/[^/]+/server(?:[/?#]|$)|(?:\\.\\./)+(?:server|src/server|app/server)(?:[/?#]|$))",
272
+ "message": "app/browser must not depend on Node or server-only modules"
273
+ }
274
+ ]
275
+ }
276
+ ]
277
+ }
278
+ },
279
+ {
280
+ "files": ["app/server/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}"],
281
+ "rules": {
282
+ "no-restricted-imports": [
283
+ "error",
284
+ {
285
+ "patterns": [
286
+ {
287
+ "regex": "^(?:/|[A-Za-z]:[\\\\/])",
288
+ "message": "imports must not use machine-specific absolute paths"
289
+ },
290
+ {
291
+ "regex": "^(?!node:)[A-Za-z][A-Za-z0-9+.-]*:",
292
+ "message": "imports must not use non-Node URL schemes"
293
+ },
294
+ {
295
+ "regex": "(?:^|/)(?!\\.{1,2}(?:/|$))[^/]+/\\.{1,2}(?:/|$)",
296
+ "message": "internal import paths must not contain noncanonical dot segments"
297
+ },
298
+ {
299
+ "regex": "^(?:(?:\\./)+\\.\\.(?:/|$)|(?:\\.\\./)+(?:\\./)+)|//",
300
+ "message": "relative import paths must not contain normalized traversal segments"
301
+ },
302
+ {
303
+ "regex": "\\\\",
304
+ "message": "import paths must use portable forward slashes"
305
+ },
306
+ {
307
+ "regex": "\\.(?:css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:[?#]|$)",
308
+ "message": "app/server must not import browser stylesheets"
309
+ },
310
+ {
311
+ "regex": "^(?:(?:vue|vite)(?:[/?#]|$)|@(?:vue|vitejs)/|@app/browser(?:[/?#]|$)|@src/browser(?:[/?#]|$)|@orkestrel/[^/]+/browser(?:[/?#]|$)|(?:\\.\\./)+(?:browser|src/browser|app/browser)(?:[/?#]|$))",
312
+ "message": "app/server must not depend on Vue or browser-only modules"
313
+ }
314
+ ]
315
+ }
316
+ ]
317
+ }
318
+ },
319
+ {
320
+ "files": ["src/bin/**/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}"],
321
+ "rules": {
322
+ "no-restricted-imports": [
323
+ "error",
324
+ {
325
+ "patterns": [
326
+ {
327
+ "regex": "^(?:/|[A-Za-z]:[\\\\/])",
328
+ "message": "imports must not use machine-specific absolute paths"
329
+ },
330
+ {
331
+ "regex": "^(?!node:)[A-Za-z][A-Za-z0-9+.-]*:",
332
+ "message": "imports must not use non-Node URL schemes"
333
+ },
334
+ {
335
+ "regex": "(?:^|/)(?!\\.{1,2}(?:/|$))[^/]+/\\.{1,2}(?:/|$)",
336
+ "message": "internal import paths must not contain noncanonical dot segments"
337
+ },
338
+ {
339
+ "regex": "^(?:(?:\\./)+\\.\\.(?:/|$)|(?:\\.\\./)+(?:\\./)+)|//",
340
+ "message": "relative import paths must not contain normalized traversal segments"
341
+ },
342
+ {
343
+ "regex": "\\\\",
344
+ "message": "import paths must use portable forward slashes"
345
+ },
346
+ {
347
+ "regex": "\\.(?:css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:[?#]|$)",
348
+ "message": "src/bin must not import browser stylesheets"
349
+ },
350
+ {
351
+ "regex": "^(?:@app(?:[/?#]|$)|(?:\\.\\./)+app(?:[/?#]|$))",
352
+ "message": "src/bin must not depend on private app modules"
353
+ },
354
+ {
355
+ "regex": "^(?:(?:vue|vite)(?:[/?#]|$)|@(?:vue|vitejs)/|@src/browser(?:[/?#]|$)|@orkestrel/[^/]+/browser(?:[/?#]|$)|(?:\\.\\./)+(?:browser|src/browser|app/browser)(?:[/?#]|$))",
356
+ "message": "src/bin must not depend on browser-only modules"
357
+ }
358
+ ]
359
+ }
360
+ ]
361
+ }
56
362
  }
57
363
  ]
58
364
  }