@orkestrel/scaffold 0.0.90 → 0.0.92
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/templates/brief.md +2 -0
- package/dist/bin/main.js +3 -3
- package/dist/bin/main.js.map +1 -1
- package/dist/host/AGENTS.md +3 -3
- package/dist/host/agents/orchestration.md +1 -1
- package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +3 -3
- package/dist/host/agents/skills/orkestrel-publish/references/window.md +3 -4
- package/dist/host/agents/skills/orkestrel-scout/SKILL.md +1 -1
- package/dist/host/agents/templates/brief.md +2 -0
- package/dist/host/agents/transports/cursor.md +1 -1
- package/dist/host/claude/agents/analyst.md +1 -1
- package/dist/host/claude/agents/grok.md +1 -1
- package/dist/host/claude/agents/orkestrel.md +16 -16
- package/dist/host/claude/agents/planner.md +1 -1
- package/dist/host/claude/agents/researcher.md +1 -1
- package/dist/host/claude/agents/scout.md +1 -1
- package/dist/host/claude/rules/names.md +1 -1
- package/dist/host/claude/rules/patterns.md +1 -1
- package/dist/host/claude/rules/quality.md +11 -0
- package/dist/host/claude/rules/styles.md +3 -1
- package/dist/host/claude/rules/tests.md +7 -8
- package/dist/host/claude/rules/writing.md +2 -1
- package/dist/host/codex/agents/researcher.toml +2 -2
- package/dist/host/codex/agents/scout.toml +1 -1
- package/dist/host/guides/browser.md +822 -609
- package/dist/host/guides/pool.md +154 -58
- package/dist/host/manifest.json +24 -24
- package/dist/src/core/index.cjs +4 -3
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.js +4 -3
- package/dist/src/core/index.js.map +1 -1
- package/package.json +3 -3
package/dist/host/guides/pool.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# Pool
|
|
2
2
|
|
|
3
|
-
> A typed resource pool with optional bounded capacity,
|
|
4
|
-
> validated reuse, caller-owned cancellation, explicit cleanup
|
|
5
|
-
> event-driven teardown barrier.
|
|
3
|
+
> A typed resource pool with optional bounded capacity, a warm floor, bounded loss recovery,
|
|
4
|
+
> unique ownership, FIFO settlement, validated reuse, caller-owned cancellation, and explicit cleanup.
|
|
6
5
|
|
|
7
|
-
The pool
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
The pool supports lazy creation or a warm floor, with no eviction timer, acquire timeout,
|
|
7
|
+
or polling loop. Waits park on promises or signal listeners. An acquire rejects with
|
|
8
|
+
`cleanup` when a floor retains a record, owns `min` records, has nothing idle, and has no
|
|
9
|
+
refill or disposal pending, even with live leases. The lifecycle hooks are the caller's,
|
|
10
|
+
so the engine itself performs no I/O.
|
|
10
11
|
|
|
11
12
|
## Surface
|
|
12
13
|
|
|
@@ -44,10 +45,10 @@ try {
|
|
|
44
45
|
|
|
45
46
|
### Classes
|
|
46
47
|
|
|
47
|
-
| API | Kind | Summary
|
|
48
|
-
| ----------- | ----- |
|
|
49
|
-
| `Pool` | class | Represents a
|
|
50
|
-
| `PoolError` | class | Represents a stable, machine-readable pool failure that retains the original thrown value as its cause without unsafe coercion, alongside structured context.
|
|
48
|
+
| API | Kind | Summary |
|
|
49
|
+
| ----------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
50
|
+
| `Pool` | class | Represents a resource pool with optional bounded capacity and a warm floor, whose opaque ownership records preserve FIFO settlement, cancellation, exact lease release, and deterministic teardown under concurrent hooks. |
|
|
51
|
+
| `PoolError` | class | Represents a stable, machine-readable pool failure that retains the original thrown value as its cause without unsafe coercion, alongside structured context. |
|
|
51
52
|
|
|
52
53
|
### Guards
|
|
53
54
|
|
|
@@ -63,20 +64,20 @@ In a guard table a `Shape` cell holds the type the guard narrows to.
|
|
|
63
64
|
|
|
64
65
|
A `Shape` cell holds an interface's data members as bare names in braces, `?` marking an optional member and `plus` introducing its call-signature members, and a type alias's own type literal with a union's arms escaped as `\|`.
|
|
65
66
|
|
|
66
|
-
| API | Kind | Shape
|
|
67
|
-
| ------------------ | --------- |
|
|
68
|
-
| `PoolCode` | type | `'invalid' \| 'destroyed' \| 'create' \| 'cleanup'`
|
|
69
|
-
| `PoolContext` | interface | `{ value?, failures? }`
|
|
70
|
-
| `PoolErrorOptions` | interface | `{ code, cause?, context? }`
|
|
71
|
-
| `PoolEventMap` | type | `{ create, acquire, release, destroy }`
|
|
72
|
-
| `PoolToken` | interface | `{ value } plus release`
|
|
73
|
-
| `PoolOptions` | interface | `{ on?, error?, create, destroy?, validate?, max? }`
|
|
74
|
-
| `PoolInterface` | interface | `{ emitter, size, idle, active } plus acquire, clear, destroy`
|
|
75
|
-
|
|
76
|
-
`size` counts every owned record, including records being validated or
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
of `size`.
|
|
67
|
+
| API | Kind | Shape | Summary |
|
|
68
|
+
| ------------------ | --------- | ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
69
|
+
| `PoolCode` | type | `'invalid' \| 'destroyed' \| 'create' \| 'cleanup'` | Names the machine-readable failure codes produced by `PoolError`. |
|
|
70
|
+
| `PoolContext` | interface | `{ value?, failures? }` | Represents the structured context attached to a `PoolError`: the rejected input, or the distinct destroy-hook failures an aggregate cleanup collected. |
|
|
71
|
+
| `PoolErrorOptions` | interface | `{ code, cause?, context? }` | Represents the construction options for `PoolError`: the stable code, an optional cause, and optional structured context. |
|
|
72
|
+
| `PoolEventMap` | type | `{ create, acquire, release, destroy }` | Represents the observable resource lifecycle events emitted by a `PoolInterface`. |
|
|
73
|
+
| `PoolToken` | interface | `{ value } plus release, destroy` | Represents a unique lease over one pool-owned resource record, exposing that record as a readonly `value` and ending it through an idempotent `release` or `destroy`. |
|
|
74
|
+
| `PoolOptions` | interface | `{ on?, error?, create, destroy?, validate?, watch?, max?, min?, restarts? }` | Represents the resource lifecycle options for `Pool` and `createPool`: creation, destruction, validation, capacity, a bounded warm floor, and loss observation. |
|
|
75
|
+
| `PoolInterface` | interface | `{ emitter, size, idle, active } plus start, acquire, clear, destroy` | Represents a FIFO resource pool with optional bounded capacity, a warm floor, loss recovery, and deterministic teardown, exposing its record counts and a typed lifecycle emitter. |
|
|
76
|
+
|
|
77
|
+
`size` counts every owned record, including records being validated, destroyed, or retained
|
|
78
|
+
after failed cleanup under `min`. `idle` counts only immediately available records.
|
|
79
|
+
`active` counts only leased records. An in-flight create reservation claims capacity but is
|
|
80
|
+
not yet an owned record and therefore is not part of `size`.
|
|
80
81
|
|
|
81
82
|
## Methods
|
|
82
83
|
|
|
@@ -85,22 +86,107 @@ The public call-signature members of `PoolInterface` and `PoolToken`; `Pool` imp
|
|
|
85
86
|
|
|
86
87
|
#### `PoolInterface`
|
|
87
88
|
|
|
88
|
-
| Method | Returns | Summary
|
|
89
|
-
| --------- | ----------------------- |
|
|
90
|
-
| `
|
|
91
|
-
| `
|
|
92
|
-
| `
|
|
89
|
+
| Method | Returns | Summary |
|
|
90
|
+
| --------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
|
91
|
+
| `start` | `Promise<void>` | Fills the warm floor and resets the strikes of a spent floor; without a floor, resolves immediately. |
|
|
92
|
+
| `acquire` | `Promise<PoolToken<T>>` | Queues the caller in FIFO order, validates an idle record or waits for a floor refill, and creates on demand only without a floor. |
|
|
93
|
+
| `clear` | `Promise<void>` | Destroys the records that are idle at this call's synchronous snapshot and restores a started floor. |
|
|
94
|
+
| `destroy` | `Promise<void>` | Tears down the pool permanently and returns its stable completion barrier. |
|
|
93
95
|
|
|
94
96
|
#### `PoolToken`
|
|
95
97
|
|
|
96
|
-
The lease returned by `acquire`, with
|
|
98
|
+
The lease returned by `acquire`, with operations that return or dispose its exact record.
|
|
97
99
|
|
|
98
|
-
| Method | Returns
|
|
99
|
-
| --------- |
|
|
100
|
-
| `release` | `void`
|
|
100
|
+
| Method | Returns | Summary |
|
|
101
|
+
| --------- | --------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
102
|
+
| `release` | `void` | Gives this exact record back to the pool once; a repeat call, and a call after loss or teardown took ownership, are no-ops. |
|
|
103
|
+
| `destroy` | `Promise<void>` | Destroys this exact record instead of returning it; a repeat call, and a call after release, are no-ops. |
|
|
101
104
|
|
|
102
105
|
## Contract
|
|
103
106
|
|
|
107
|
+
### Warm floor and loss
|
|
108
|
+
|
|
109
|
+
Construction creates nothing. Set `min` to a positive safe integer and `restarts` to a
|
|
110
|
+
non-negative safe integer, then call `start()`. `max` defaults to `min`; explicit values
|
|
111
|
+
must equal each other. A missing restart bound, a bound without `min`, and a non-callable
|
|
112
|
+
`watch` are invalid. The restart bound has no default.
|
|
113
|
+
|
|
114
|
+
`start()` resolves when the pool owns `min` live records. Concurrent calls share the pending
|
|
115
|
+
promise. Without `min`, it resolves immediately. Under `min`, queued acquires never cause
|
|
116
|
+
creation, including before `start()` and during failed refills. The pool refills missing
|
|
117
|
+
capacity after startup and cleanup, one create attempt at a time.
|
|
118
|
+
Bound your `create` and `destroy` hooks. A create hook that never settles blocks every later
|
|
119
|
+
refill, including the attempt owed to a lost leased record. A destroy hook that never settles
|
|
120
|
+
keeps its record counted against `max` and blocks replacement of that record.
|
|
121
|
+
|
|
122
|
+
`watch(value, signal)` runs once for each created record. A fulfillment, rejection, or
|
|
123
|
+
synchronous throw declares loss while the record is live. The pool removes the record from
|
|
124
|
+
service, disposes it, and refills if the bound permits. Rejections and synchronous throws
|
|
125
|
+
reach `error(error, 'watch')` only while the record is live; a throwing error handler is
|
|
126
|
+
isolated. Disposal aborts the watch signal before the destroy hook runs, including disposal
|
|
127
|
+
through validation, clear, pool teardown, and token destruction.
|
|
128
|
+
The watch must release its listeners when that signal aborts. Any settlement after the signal
|
|
129
|
+
aborts is ignored, including rejection. A late or repeated loss cannot
|
|
130
|
+
dispose a record twice. A lost record cannot be handed out after validation or from a ready
|
|
131
|
+
result waiting behind an earlier caller. The pool disposes a lost leased record while its
|
|
132
|
+
holder still holds the token. The holder learns of that loss from its own `watch` or `destroy`
|
|
133
|
+
hook. After disposal, the token's `release()` and `destroy()` calls do nothing. During disposal,
|
|
134
|
+
the first `destroy()` call waits for that cleanup attempt and rejects with `cleanup` if it fails.
|
|
135
|
+
|
|
136
|
+
A failed refill adds a strike. Losing a record that has never been leased also adds a strike,
|
|
137
|
+
including failed validation. Granting a lease resets the strikes only when the granted record
|
|
138
|
+
was created after the last strike; successful creation alone does not. Granting an older healthy
|
|
139
|
+
record leaves the strikes unchanged. An idle never-leased record that dies, refills, and dies
|
|
140
|
+
again without a grant between those losses can spend the floor.
|
|
141
|
+
When strikes exceed `restarts`, the floor is spent. With `restarts: 1`, the first failed
|
|
142
|
+
create permits another attempt, and the second refuses the next attempt. `start()` rejects
|
|
143
|
+
with `create` and the last cause; another `start()` resets the strikes. While the floor is
|
|
144
|
+
spent, an acquire without an idle record rejects with `create` after pending refills and
|
|
145
|
+
disposal settle. If the floor retains a record and owns `min` records, that acquire rejects
|
|
146
|
+
with `cleanup` instead, even with live leases. A spent floor and a rejected `start()` still
|
|
147
|
+
serve their live records. A loss without a thrown cause leaves that cause undefined.
|
|
148
|
+
|
|
149
|
+
A record lost while leased earns one refill attempt even after the bound is spent.
|
|
150
|
+
The credit becomes spendable only when successful disposal removes the record; failed disposal
|
|
151
|
+
grants no credit. That attempt remains owed during a concurrent refill and never resets the strikes.
|
|
152
|
+
Its failed create adds a strike; its success alone does not reset the strikes. Granting that
|
|
153
|
+
replacement resets the strikes only if no strike occurred after its creation. A record that was leased
|
|
154
|
+
and later released adds no strike when lost. `token.destroy()` disposes the exact leased
|
|
155
|
+
record, waits for an existing cleanup attempt, and rejects with `cleanup` if disposal fails.
|
|
156
|
+
A token ends once: after `release()` or `destroy()`, the other call does nothing. Repeating
|
|
157
|
+
either call does nothing. A repeat `token.destroy()` after a `cleanup` rejection resolves
|
|
158
|
+
while the record stays retained.
|
|
159
|
+
|
|
160
|
+
Under `min`, a failed destroy hook leaves its record counted against `max` and excluded from
|
|
161
|
+
idle and active counts. The pool never replaces that retained record or retries its destroy
|
|
162
|
+
hook. The pool can run short; `start()` rejects with `cleanup` if retained records prevent
|
|
163
|
+
filling. An acquire rejects with `cleanup` when the floor retains a record, owns `min` records,
|
|
164
|
+
has nothing idle, and has no refill or disposal pending, even with live leases. The cause is
|
|
165
|
+
the retained record's own cleanup failure. The terminal `destroy()` barrier
|
|
166
|
+
reports the original cleanup failures. Without `min`, cleanup retains its lazy behavior and
|
|
167
|
+
frees capacity after either hook outcome.
|
|
168
|
+
|
|
169
|
+
This example warms an inert resource, explicitly loses its lease, and tears down the pool:
|
|
170
|
+
|
|
171
|
+
```ts
|
|
172
|
+
import { createPool } from '@orkestrel/pool'
|
|
173
|
+
|
|
174
|
+
const pool = createPool({
|
|
175
|
+
create: () => new EventTarget(),
|
|
176
|
+
min: 1,
|
|
177
|
+
restarts: 1,
|
|
178
|
+
watch: (resource, signal) =>
|
|
179
|
+
new Promise<void>((resolve) => {
|
|
180
|
+
resource.addEventListener('loss', () => resolve(), { once: true, signal })
|
|
181
|
+
signal.addEventListener('abort', () => resolve(), { once: true })
|
|
182
|
+
}),
|
|
183
|
+
})
|
|
184
|
+
await pool.start()
|
|
185
|
+
const token = await pool.acquire()
|
|
186
|
+
await token.destroy()
|
|
187
|
+
await pool.destroy()
|
|
188
|
+
```
|
|
189
|
+
|
|
104
190
|
### Capacity and FIFO
|
|
105
191
|
|
|
106
192
|
Every `acquire` receives its queue position before a create or validation hook starts. The
|
|
@@ -112,15 +198,18 @@ cannot overtake an earlier slow one. Capacity obeys:
|
|
|
112
198
|
owned records + create reservations <= max
|
|
113
199
|
```
|
|
114
200
|
|
|
115
|
-
`max` must be a positive safe integer. Omit
|
|
116
|
-
zero, negative values, and unsafe integers are invalid.
|
|
117
|
-
validates it before retention, then snapshots `on`
|
|
201
|
+
`max` must be a positive safe integer. Omit both capacity options for an unbounded pool.
|
|
202
|
+
`Infinity`, fractions, zero, negative values, and unsafe integers are invalid.
|
|
203
|
+
Construction snapshots `max` once and validates it before retention, then snapshots `on`
|
|
204
|
+
and `error` once each.
|
|
118
205
|
|
|
119
206
|
Record phases are disjoint:
|
|
120
207
|
|
|
121
208
|
```text
|
|
122
209
|
create reservation -> ready -> leased -> available -> validating -> ready
|
|
123
210
|
\-> destroying -> removed
|
|
211
|
+
\-> retained (failed cleanup with min)
|
|
212
|
+
floor refill --------------------------> available
|
|
124
213
|
```
|
|
125
214
|
|
|
126
215
|
Invalid validation, whether `false` or a thrown value, claims and cleans the record before a
|
|
@@ -148,16 +237,20 @@ eventual `destroy()` barrier.
|
|
|
148
237
|
A token captures its exact opaque record, so `release()` is correct even when multiple
|
|
149
238
|
records contain the same value. Release is idempotent and removes the lease synchronously.
|
|
150
239
|
With a waiter, the record is validated before handoff. Without an assignable waiter, it
|
|
151
|
-
becomes idle and emits `release`. Release after teardown ownership
|
|
240
|
+
becomes idle and emits `release`. Release after loss or teardown took ownership does nothing.
|
|
241
|
+
The pool disposes a lost lease while its holder still holds the token; the holder learns of
|
|
242
|
+
the loss through its own `watch` or `destroy` hook. After disposal, both token methods do nothing.
|
|
152
243
|
|
|
153
244
|
`clear()` synchronously snapshots idle records and installs one cleanup promise per record
|
|
154
245
|
before invoking the hook. Concurrent clears therefore own disjoint snapshots, and a lease
|
|
155
|
-
released after a snapshot is taken is not part of it. Every claimed record stays in `size`
|
|
156
|
-
hook attempt
|
|
157
|
-
whose `context.failures` retains the original thrown
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
246
|
+
released after a snapshot is taken is not part of it. Every claimed record stays in `size` during
|
|
247
|
+
its hook attempt; failed cleanup under `min` retains it afterward. Distinct failures are
|
|
248
|
+
aggregated in a code-`cleanup` `PoolError` whose `context.failures` retains the original thrown
|
|
249
|
+
values.
|
|
250
|
+
Each claimed record's cleanup settlement wakes queued acquires after the destroy ledger
|
|
251
|
+
transition. A failed `clear()` rejects its own aggregate cleanup barrier; under `min`,
|
|
252
|
+
the pool keeps a record whose cleanup fails counted against `max`, and successful cleanup
|
|
253
|
+
restores a started floor.
|
|
161
254
|
|
|
162
255
|
### Destruction
|
|
163
256
|
|
|
@@ -165,7 +258,8 @@ still rejects its own aggregate cleanup barrier.
|
|
|
165
258
|
rejects waiters, emits events, or invokes cleanup. Reentrant and repeated calls return that
|
|
166
259
|
same object. Teardown invalidates idle, leased, and ready records, waits for create,
|
|
167
260
|
validation, existing clear cleanup, and new cleanup activity, and disposes every late
|
|
168
|
-
resource.
|
|
261
|
+
resource. A pending `start()` rejects with `destroyed`. Unresolved create, validation, and
|
|
262
|
+
destroy hooks keep the barrier pending without polling; aborted watches do not delay it.
|
|
169
263
|
|
|
170
264
|
Cleanup already owned by an overlapping `clear()` is shared; its failure is reported to both
|
|
171
265
|
the clear call and the destroy aggregate. Create failures that produced no resource do not
|
|
@@ -176,12 +270,12 @@ hook attempt, then the stable barrier resolves or rejects.
|
|
|
176
270
|
|
|
177
271
|
`PoolError.code` is stable and lowercase:
|
|
178
272
|
|
|
179
|
-
| Code | Owner
|
|
180
|
-
| ----------- |
|
|
181
|
-
| `invalid` | Invalid
|
|
182
|
-
| `destroyed` |
|
|
183
|
-
| `create` |
|
|
184
|
-
| `cleanup` |
|
|
273
|
+
| Code | Owner |
|
|
274
|
+
| ----------- | ----------------------------------------------------------------------------------- |
|
|
275
|
+
| `invalid` | Invalid capacity, restart bound, watch hook, acquire signal, or internal boundary. |
|
|
276
|
+
| `destroyed` | Start, acquire, or clear attempted during terminal teardown. |
|
|
277
|
+
| `create` | A lazy create failed, or a floor refill bound was spent. |
|
|
278
|
+
| `cleanup` | Record disposal failed, including retained records blocking startup or acquisition. |
|
|
185
279
|
|
|
186
280
|
The original thrown value is retained as `cause`; aggregate cleanup values are also in
|
|
187
281
|
`context.failures`. Message construction and `isPoolError` avoid unsafe string coercion and
|
|
@@ -194,12 +288,12 @@ invokes listeners synchronously at each emission point. The `destroy` emission i
|
|
|
194
288
|
one microtask after cleanup settlement so bound outcomes precede observer reentry. Events
|
|
195
289
|
follow their ledger transitions:
|
|
196
290
|
|
|
197
|
-
| Event | Emission point
|
|
198
|
-
| --------- |
|
|
199
|
-
| `create` | After a fresh resource is inserted into the ownership ledger.
|
|
200
|
-
| `acquire` | After the waiter promise receives its token and the record is leased.
|
|
201
|
-
| `release` | Only when
|
|
202
|
-
| `destroy` | After the hook attempt and resource-ledger removal, one microtask after private cleanup settlement, while destroying ownership remains installed through the event. |
|
|
291
|
+
| Event | Emission point |
|
|
292
|
+
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
293
|
+
| `create` | After a fresh resource is inserted into the ownership ledger. |
|
|
294
|
+
| `acquire` | After the waiter promise receives its token and the record is leased. |
|
|
295
|
+
| `release` | Only when a released, orphaned, or refilled record remains idle. |
|
|
296
|
+
| `destroy` | After the hook attempt and resource-ledger removal or retention, one microtask after private cleanup settlement, while destroying ownership remains installed through the event. |
|
|
203
297
|
|
|
204
298
|
Because listeners may synchronously reenter or destroy the pool, the engine checks terminal
|
|
205
299
|
and waiter state after every awaited hook and every emit.
|
|
@@ -260,7 +354,8 @@ await pool.destroy()
|
|
|
260
354
|
hooks, create continuation, abort boundaries, abort-listener detachment, exclusive
|
|
261
355
|
invalid-cleanup waiter ownership, bounded and unbounded replacement, destroy-observer
|
|
262
356
|
reentry ordering, concurrent clear, stable reentrant destruction, late resources,
|
|
263
|
-
aggregate failures, emitter ordering,
|
|
357
|
+
aggregate failures, emitter ordering, high contention, warm floors, exact refill bounds,
|
|
358
|
+
retained cleanup failures, watch cancellation, lost-record handoff races, and owed lease refills.
|
|
264
359
|
- [`tests/src/core/validators.test.ts`](../tests/src/core/validators.test.ts) — the public
|
|
265
360
|
boundary guards alone: accepted and rejected maxima, and native versus hostile signals.
|
|
266
361
|
- [`tests/src/core/factories.test.ts`](../tests/src/core/factories.test.ts) — factory
|
|
@@ -271,7 +366,8 @@ await pool.destroy()
|
|
|
271
366
|
its declaration's description paragraph, the titled `Create a pool` fence against the
|
|
272
367
|
`@example` block of that title (pinned so the titled pair cannot be retired silently), and the
|
|
273
368
|
README pitch against this guide's tagline. It also runs the boundary-guard fence and asserts
|
|
274
|
-
the values its comments claim.
|
|
369
|
+
the values its comments claim. The floor fence is checked line for line in execution order
|
|
370
|
+
and runs with assertions for warming, token cleanup, and watch-listener removal.
|
|
275
371
|
|
|
276
372
|
## See also
|
|
277
373
|
|
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": "0f789cb1faea49ac3664d2246788ae160f7b036b42a8d5cc6f9618551442ed3b"
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"storage": "LICENSE",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"storage": "agents/orchestration.md",
|
|
17
17
|
"destination": ".agents/orchestration.md",
|
|
18
18
|
"executable": false,
|
|
19
|
-
"digest": "
|
|
19
|
+
"digest": "b31dfd8ec22606bf3d98ca2f32241c7f43d2537be49400c4b801028b4178bac0"
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"storage": "agents/skills/enterprise-bootstrap/SKILL.md",
|
|
@@ -220,7 +220,7 @@
|
|
|
220
220
|
"storage": "agents/skills/orkestrel-falsify/SKILL.md",
|
|
221
221
|
"destination": ".agents/skills/orkestrel-falsify/SKILL.md",
|
|
222
222
|
"executable": false,
|
|
223
|
-
"digest": "
|
|
223
|
+
"digest": "257ac6f56380decb55cb0ab7f2c2285f34474ba1a4b2944609c04218f4c9d013"
|
|
224
224
|
},
|
|
225
225
|
{
|
|
226
226
|
"storage": "agents/skills/orkestrel-falsify/agents/openai.yaml",
|
|
@@ -376,7 +376,7 @@
|
|
|
376
376
|
"storage": "agents/skills/orkestrel-publish/references/window.md",
|
|
377
377
|
"destination": ".agents/skills/orkestrel-publish/references/window.md",
|
|
378
378
|
"executable": false,
|
|
379
|
-
"digest": "
|
|
379
|
+
"digest": "00c520a8a0a67b7a20813c374fee4339cdb9fb48ff3926eb87f44c8cef204e8a"
|
|
380
380
|
},
|
|
381
381
|
{
|
|
382
382
|
"storage": "agents/skills/orkestrel-publish/scripts/compare.ts",
|
|
@@ -406,7 +406,7 @@
|
|
|
406
406
|
"storage": "agents/skills/orkestrel-scout/SKILL.md",
|
|
407
407
|
"destination": ".agents/skills/orkestrel-scout/SKILL.md",
|
|
408
408
|
"executable": false,
|
|
409
|
-
"digest": "
|
|
409
|
+
"digest": "e42e0b06a0cc647b8f13f7bf033ed6b2800e13e61298e9a0d2f2d22688e5011a"
|
|
410
410
|
},
|
|
411
411
|
{
|
|
412
412
|
"storage": "agents/skills/orkestrel-scout/agents/openai.yaml",
|
|
@@ -424,7 +424,7 @@
|
|
|
424
424
|
"storage": "agents/templates/brief.md",
|
|
425
425
|
"destination": ".agents/templates/brief.md",
|
|
426
426
|
"executable": false,
|
|
427
|
-
"digest": "
|
|
427
|
+
"digest": "7f479c0f2cfed85d5535a392474f6fe1a0a6de40ba1dfc37c4dc9c5e91a25ba8"
|
|
428
428
|
},
|
|
429
429
|
{
|
|
430
430
|
"storage": "agents/transports/claude-cli.md",
|
|
@@ -442,7 +442,7 @@
|
|
|
442
442
|
"storage": "agents/transports/cursor.md",
|
|
443
443
|
"destination": ".agents/transports/cursor.md",
|
|
444
444
|
"executable": false,
|
|
445
|
-
"digest": "
|
|
445
|
+
"digest": "2c3063adbac28be4942398dad5c004a083d6018de95042bb2ae1f48ecd4a3f35"
|
|
446
446
|
},
|
|
447
447
|
{
|
|
448
448
|
"storage": "claude/AGENTS.md",
|
|
@@ -454,7 +454,7 @@
|
|
|
454
454
|
"storage": "claude/agents/analyst.md",
|
|
455
455
|
"destination": ".claude/agents/analyst.md",
|
|
456
456
|
"executable": false,
|
|
457
|
-
"digest": "
|
|
457
|
+
"digest": "e1d7e4202b293ff7d8d934e95d1c499845f0f49729180077f417864dc179c84b"
|
|
458
458
|
},
|
|
459
459
|
{
|
|
460
460
|
"storage": "claude/agents/astra.md",
|
|
@@ -484,7 +484,7 @@
|
|
|
484
484
|
"storage": "claude/agents/grok.md",
|
|
485
485
|
"destination": ".claude/agents/grok.md",
|
|
486
486
|
"executable": false,
|
|
487
|
-
"digest": "
|
|
487
|
+
"digest": "6798fabf3a71e9514d8f33d7c310b7f20647951a0b847b11eee96f4150fb3e83"
|
|
488
488
|
},
|
|
489
489
|
{
|
|
490
490
|
"storage": "claude/agents/opus.md",
|
|
@@ -496,19 +496,19 @@
|
|
|
496
496
|
"storage": "claude/agents/orkestrel.md",
|
|
497
497
|
"destination": ".claude/agents/orkestrel.md",
|
|
498
498
|
"executable": false,
|
|
499
|
-
"digest": "
|
|
499
|
+
"digest": "36afc2242e9becbb7662aeece1b0f81a12162aacfd360a48a07a3ec7eaf7d639"
|
|
500
500
|
},
|
|
501
501
|
{
|
|
502
502
|
"storage": "claude/agents/planner.md",
|
|
503
503
|
"destination": ".claude/agents/planner.md",
|
|
504
504
|
"executable": false,
|
|
505
|
-
"digest": "
|
|
505
|
+
"digest": "86cef178ce25c8c8e002ea69c2e1bf0e21494ac77417e2376c5584fa3ae0c8b7"
|
|
506
506
|
},
|
|
507
507
|
{
|
|
508
508
|
"storage": "claude/agents/researcher.md",
|
|
509
509
|
"destination": ".claude/agents/researcher.md",
|
|
510
510
|
"executable": false,
|
|
511
|
-
"digest": "
|
|
511
|
+
"digest": "e5f0686f6bb1825fbf6006933e034c1ef882501792a93f690ac4bb059132e926"
|
|
512
512
|
},
|
|
513
513
|
{
|
|
514
514
|
"storage": "claude/agents/reviewer.md",
|
|
@@ -520,7 +520,7 @@
|
|
|
520
520
|
"storage": "claude/agents/scout.md",
|
|
521
521
|
"destination": ".claude/agents/scout.md",
|
|
522
522
|
"executable": false,
|
|
523
|
-
"digest": "
|
|
523
|
+
"digest": "fa55e6ca6c89dae3bdf6f2faddf6beea0746b8714962a45a44999f7d8b5f7691"
|
|
524
524
|
},
|
|
525
525
|
{
|
|
526
526
|
"storage": "claude/agents/verifier.md",
|
|
@@ -556,13 +556,13 @@
|
|
|
556
556
|
"storage": "claude/rules/names.md",
|
|
557
557
|
"destination": ".claude/rules/names.md",
|
|
558
558
|
"executable": false,
|
|
559
|
-
"digest": "
|
|
559
|
+
"digest": "e5d0221d31ab7eed5c9b4ec4537a827103f61dd90edc58029ff5dac024a6f4ac"
|
|
560
560
|
},
|
|
561
561
|
{
|
|
562
562
|
"storage": "claude/rules/patterns.md",
|
|
563
563
|
"destination": ".claude/rules/patterns.md",
|
|
564
564
|
"executable": false,
|
|
565
|
-
"digest": "
|
|
565
|
+
"digest": "b17a9102761262e116416d3c5a0f78b16fa2c3598ba203d35bba7b93b7ccbf1b"
|
|
566
566
|
},
|
|
567
567
|
{
|
|
568
568
|
"storage": "claude/rules/portability.md",
|
|
@@ -574,19 +574,19 @@
|
|
|
574
574
|
"storage": "claude/rules/quality.md",
|
|
575
575
|
"destination": ".claude/rules/quality.md",
|
|
576
576
|
"executable": false,
|
|
577
|
-
"digest": "
|
|
577
|
+
"digest": "4a67842795882635436aa001a7ad1d0b2b6b81b9d8dd51730b8c37e65ebd367a"
|
|
578
578
|
},
|
|
579
579
|
{
|
|
580
580
|
"storage": "claude/rules/styles.md",
|
|
581
581
|
"destination": ".claude/rules/styles.md",
|
|
582
582
|
"executable": false,
|
|
583
|
-
"digest": "
|
|
583
|
+
"digest": "ae1c97f23d71c53ef117b2cd661df6258712988ec86de6c60a1cbad4670eb996"
|
|
584
584
|
},
|
|
585
585
|
{
|
|
586
586
|
"storage": "claude/rules/tests.md",
|
|
587
587
|
"destination": ".claude/rules/tests.md",
|
|
588
588
|
"executable": false,
|
|
589
|
-
"digest": "
|
|
589
|
+
"digest": "0a7cf69072de3fb89afdd580c4d3b728130862f6d6865a2ec02a4881ddb504fa"
|
|
590
590
|
},
|
|
591
591
|
{
|
|
592
592
|
"storage": "claude/rules/typescript.md",
|
|
@@ -604,7 +604,7 @@
|
|
|
604
604
|
"storage": "claude/rules/writing.md",
|
|
605
605
|
"destination": ".claude/rules/writing.md",
|
|
606
606
|
"executable": false,
|
|
607
|
-
"digest": "
|
|
607
|
+
"digest": "7a115369ba2a79cf6362444f474a58d9094f06a7d2fdd501b454158ceabc5d07"
|
|
608
608
|
},
|
|
609
609
|
{
|
|
610
610
|
"storage": "claude/settings.json",
|
|
@@ -736,7 +736,7 @@
|
|
|
736
736
|
"storage": "codex/agents/researcher.toml",
|
|
737
737
|
"destination": ".codex/agents/researcher.toml",
|
|
738
738
|
"executable": false,
|
|
739
|
-
"digest": "
|
|
739
|
+
"digest": "c6d8288e49428aac8bfc253807631c6cb308cadc67ebd29a226887844c623ad7"
|
|
740
740
|
},
|
|
741
741
|
{
|
|
742
742
|
"storage": "codex/agents/reviewer.toml",
|
|
@@ -748,7 +748,7 @@
|
|
|
748
748
|
"storage": "codex/agents/scout.toml",
|
|
749
749
|
"destination": ".codex/agents/scout.toml",
|
|
750
750
|
"executable": false,
|
|
751
|
-
"digest": "
|
|
751
|
+
"digest": "b79ed6467954fc01d83fb66d687cb2cd7e10ba2ee061c3a3b8946a5540222298"
|
|
752
752
|
},
|
|
753
753
|
{
|
|
754
754
|
"storage": "codex/agents/verifier.toml",
|
|
@@ -862,7 +862,7 @@
|
|
|
862
862
|
"storage": "guides/browser.md",
|
|
863
863
|
"destination": "guides/browser.md",
|
|
864
864
|
"executable": false,
|
|
865
|
-
"digest": "
|
|
865
|
+
"digest": "deec731bfc8733f880021cbf9a8cf450e51a93bc23f2f963fb3e1bf750554ba8"
|
|
866
866
|
},
|
|
867
867
|
{
|
|
868
868
|
"storage": "guides/budget.md",
|
|
@@ -982,7 +982,7 @@
|
|
|
982
982
|
"storage": "guides/pool.md",
|
|
983
983
|
"destination": "guides/pool.md",
|
|
984
984
|
"executable": false,
|
|
985
|
-
"digest": "
|
|
985
|
+
"digest": "c49d3d2d3d5a2dc4518a8cebb94c82ba2dbcdc03222d5ad3885df13c46dfe8e2"
|
|
986
986
|
},
|
|
987
987
|
{
|
|
988
988
|
"storage": "guides/probe.md",
|
|
@@ -2144,5 +2144,5 @@
|
|
|
2144
2144
|
]
|
|
2145
2145
|
}
|
|
2146
2146
|
],
|
|
2147
|
-
"digest": "
|
|
2147
|
+
"digest": "09b047e9598599db3dca2e26b55b897293e600defd7c35147dbab8a771816c0b"
|
|
2148
2148
|
}
|
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.92",
|
|
8
8
|
description: "Scaffold workspaces with commands: new, audit, repair, catalog, and overwrite.",
|
|
9
9
|
keywords: [
|
|
10
10
|
"audit",
|
|
@@ -104,10 +104,10 @@ var package_default = {
|
|
|
104
104
|
},
|
|
105
105
|
devDependencies: {
|
|
106
106
|
"@microsoft/api-extractor": "^7.59.3",
|
|
107
|
-
"@orkestrel/browser": "^0.0.
|
|
107
|
+
"@orkestrel/browser": "^0.0.24",
|
|
108
108
|
"@orkestrel/guide": "^0.0.24",
|
|
109
109
|
"@orkestrel/html": "^0.0.12",
|
|
110
|
-
"@orkestrel/probe": "^0.0.
|
|
110
|
+
"@orkestrel/probe": "^0.0.20",
|
|
111
111
|
"@orkestrel/test": "^0.0.24",
|
|
112
112
|
"@types/node": "^26.6.4",
|
|
113
113
|
"@vitest/browser-playwright": "^4.1.11",
|
|
@@ -691,6 +691,7 @@ var BROWSE_UPSTREAM = Object.freeze([
|
|
|
691
691
|
"@orkestrel/html",
|
|
692
692
|
"@orkestrel/markdown",
|
|
693
693
|
"@orkestrel/mcp",
|
|
694
|
+
"@orkestrel/pool",
|
|
694
695
|
"@orkestrel/process",
|
|
695
696
|
"@orkestrel/router",
|
|
696
697
|
"@orkestrel/server",
|