wicked-crew 0.7.26 → 0.7.28
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/api/routes.d.ts +8 -0
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +9 -2
- package/dist/api/routes.js.map +1 -1
- package/dist/api/server.d.ts +13 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +14 -0
- package/dist/api/server.js.map +1 -1
- package/dist/cli/index.js +46 -18
- package/dist/cli/index.js.map +1 -1
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/core/adapter.js +22 -18
- package/dist/core/adapter.js.map +1 -1
- package/dist/core/deliver.d.ts +26 -10
- package/dist/core/deliver.d.ts.map +1 -1
- package/dist/core/deliver.js +27 -11
- package/dist/core/deliver.js.map +1 -1
- package/dist/core/deliverable-floor.d.ts.map +1 -1
- package/dist/core/deliverable-floor.js +5 -4
- package/dist/core/deliverable-floor.js.map +1 -1
- package/dist/interactive/bridge-pool.d.ts +130 -2
- package/dist/interactive/bridge-pool.d.ts.map +1 -1
- package/dist/interactive/bridge-pool.js +281 -8
- package/dist/interactive/bridge-pool.js.map +1 -1
- package/dist/interactive/bus-location.d.ts +65 -0
- package/dist/interactive/bus-location.d.ts.map +1 -0
- package/dist/interactive/bus-location.js +75 -0
- package/dist/interactive/bus-location.js.map +1 -0
- package/dist/interactive/chat-events.d.ts.map +1 -1
- package/dist/interactive/chat-events.js +29 -23
- package/dist/interactive/chat-events.js.map +1 -1
- package/dist/interactive/demo-events.d.ts +16 -1
- package/dist/interactive/demo-events.d.ts.map +1 -1
- package/dist/interactive/demo-events.js +262 -43
- package/dist/interactive/demo-events.js.map +1 -1
- package/dist/interactive/doc-grounding.d.ts +202 -0
- package/dist/interactive/doc-grounding.d.ts.map +1 -0
- package/dist/interactive/doc-grounding.js +647 -0
- package/dist/interactive/doc-grounding.js.map +1 -0
- package/dist/interactive/draft-events.d.ts +54 -1
- package/dist/interactive/draft-events.d.ts.map +1 -1
- package/dist/interactive/draft-events.js +234 -117
- package/dist/interactive/draft-events.js.map +1 -1
- package/dist/interactive/edit-events.d.ts.map +1 -1
- package/dist/interactive/edit-events.js +27 -21
- package/dist/interactive/edit-events.js.map +1 -1
- package/dist/interactive/proxy-routes.d.ts +78 -0
- package/dist/interactive/proxy-routes.d.ts.map +1 -1
- package/dist/interactive/proxy-routes.js +355 -14
- package/dist/interactive/proxy-routes.js.map +1 -1
- package/dist/interactive/repo-snapshot.d.ts +31 -0
- package/dist/interactive/repo-snapshot.d.ts.map +1 -1
- package/dist/interactive/repo-snapshot.js +56 -1
- package/dist/interactive/repo-snapshot.js.map +1 -1
- package/dist/qe/conformance.d.ts +10 -1
- package/dist/qe/conformance.d.ts.map +1 -1
- package/dist/qe/conformance.js +57 -4
- package/dist/qe/conformance.js.map +1 -1
- package/dist/skills/plugin-source.d.ts +149 -32
- package/dist/skills/plugin-source.d.ts.map +1 -1
- package/dist/skills/plugin-source.js +303 -108
- package/dist/skills/plugin-source.js.map +1 -1
- package/dist/skills/root-fence.d.ts +2 -2
- package/dist/skills/root-fence.js +4 -4
- package/dist/skills/root-fence.js.map +1 -1
- package/dist/skills/runtime.d.ts +19 -2
- package/dist/skills/runtime.d.ts.map +1 -1
- package/dist/skills/runtime.js +82 -8
- package/dist/skills/runtime.js.map +1 -1
- package/dist/skills/store.d.ts +2 -2
- package/dist/skills/store.d.ts.map +1 -1
- package/dist/skills/store.js +30 -9
- package/dist/skills/store.js.map +1 -1
- package/dist/studio/assets/index-CdmCMh2f.js +539 -0
- package/dist/studio/index.html +1 -1
- package/dist/studio/testid-inventory.json +125 -5
- package/endpoint-manifest.json +16 -1
- package/package.json +3 -3
- package/dist/studio/assets/index-FcZg3WDR.js +0 -539
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doc → SUBJECT-REPO grounding for the interactive seams (acceptance findings F-046 + follow-up).
|
|
3
|
+
*
|
|
4
|
+
* WHAT WAS WRONG: a document created in a multi-repo project was grounded on the project's FIRST
|
|
5
|
+
* `crew.repo` member — a brochure about wicked-studio was drafted against a wicked-core snapshot,
|
|
6
|
+
* the brief's "use the wicked-studio repo in this project" had no way to reach the seam, and the
|
|
7
|
+
* thread never said which repository the worker actually saw. The bridge's create wire carries
|
|
8
|
+
* `name/kind/brief/style/project` only and builds `doc.created` explicitly (server.js `POST
|
|
9
|
+
* /api/docs`), so a repo named on the create request never rides the bus: crew has to remember it
|
|
10
|
+
* itself, keyed by the document id the bridge answers with.
|
|
11
|
+
*
|
|
12
|
+
* Three things live here, shared by the proxy's create interception and the draft/demo seams:
|
|
13
|
+
*
|
|
14
|
+
* 1. THE REQUEST GRAMMAR — `repo_ref` (one) / `repo_refs` (several) on the create body, each a
|
|
15
|
+
* registered repo id, its registry name, or its root directory's basename; `style` from the
|
|
16
|
+
* bridge's own set, or inferred from the brief's format words when the client sent none
|
|
17
|
+
* (`inferDocStyle`) so a print/A4 brief reaches the bridge's print instructions instead of
|
|
18
|
+
* defaulting to `web`.
|
|
19
|
+
* 2. THE RESOLUTION RULE (`resolveGroundingRepos`) — in preference order: the repos NAMED on the
|
|
20
|
+
* request; else the member repos the BRIEF names by name; else the project's SOLE repo; else
|
|
21
|
+
* NONE — never a silent first-member substitution. A named repo that is not (or no longer) a
|
|
22
|
+
* member is reported as `missing`, so the seam can say so on the thread and the proxy can
|
|
23
|
+
* refuse the create up front.
|
|
24
|
+
* 3. THE DURABLE BINDING (`DocGroundingStore`) — a `crew-grounding.json` sidecar BESIDE THE DOC,
|
|
25
|
+
* `<docs root>/<doc>/crew-grounding.json`, written atomically (tmp + rename, the handoff-ledger
|
|
26
|
+
* discipline): the proxy records `{project, repo_refs, style}` under the doc name the bridge's
|
|
27
|
+
* create answered with, the seams read it when `doc.created` arrives. The bridge emits
|
|
28
|
+
* `doc.created` BEFORE it answers the create, and the seams poll the bus, so a seam can see the
|
|
29
|
+
* event a few ms before the proxy has recorded the binding: `beginCreate`/`settleCreate`/
|
|
30
|
+
* `waitFor` close that window in-process (proxy and seams run in the same daemon) — a seam that
|
|
31
|
+
* finds no binding but sees an unsettled create for the same project waits, bounded, for it.
|
|
32
|
+
*/
|
|
33
|
+
import { type Stats } from 'node:fs';
|
|
34
|
+
import type { CoreAdapter } from '../core/adapter.js';
|
|
35
|
+
/** The bridge's own style set (server.js `POST /api/docs`: anything else is dropped to null → web). */
|
|
36
|
+
export declare const DOC_STYLES: readonly ["web", "ppt", "brochure", "doc"];
|
|
37
|
+
export type DocStyle = (typeof DOC_STYLES)[number];
|
|
38
|
+
export declare function isDocStyle(value: unknown): value is DocStyle;
|
|
39
|
+
/** Infer the bridge style a brief asks for by its format words, or `undefined` when it names none. */
|
|
40
|
+
export declare function inferDocStyle(brief: string): DocStyle | undefined;
|
|
41
|
+
/** The one-line format contract a style implies — folded into the worker's problem statement so
|
|
42
|
+
* the DRAFT phase (not only the outline's legend) knows what "brochure" must mean on disk. The
|
|
43
|
+
* brochure line is the F-050/F-053 lesson: a print doc rendered as fixed slide pages with
|
|
44
|
+
* `overflow:hidden` clipped its content. */
|
|
45
|
+
export declare function styleContract(style: string): string;
|
|
46
|
+
/** How many repositories one document may name. A brochure is about a product, not a monorepo
|
|
47
|
+
* census; the cap also bounds how many snapshots one launch can clone. */
|
|
48
|
+
export declare const REPO_REFS_MAX = 8;
|
|
49
|
+
/** A failed parse still carries `requested` — the refs AS THE CLIENT SPELLED them (best-effort:
|
|
50
|
+
* non-strings stringified, capped), so the refusal can render exactly what was sent (Copilot, #506). */
|
|
51
|
+
export type RepoRefsParse = {
|
|
52
|
+
ok: true;
|
|
53
|
+
refs: string[];
|
|
54
|
+
} | {
|
|
55
|
+
ok: false;
|
|
56
|
+
error: string;
|
|
57
|
+
requested: string[];
|
|
58
|
+
};
|
|
59
|
+
/** The raw spellings a body carried, for a refusal's `requested` — never used for matching. Every
|
|
60
|
+
* refusal carries them, project mismatches included (Copilot on crew#506). */
|
|
61
|
+
export declare function spelledRefs(body: Record<string, unknown>): string[];
|
|
62
|
+
/**
|
|
63
|
+
* Read `repo_ref` / `repo_refs` off a create body. Both may be present; the union is de-duplicated
|
|
64
|
+
* in order. `{ok: true, refs: []}` when neither is present — the common case, nothing named.
|
|
65
|
+
*/
|
|
66
|
+
export declare function parseRepoRefs(body: Record<string, unknown>): RepoRefsParse;
|
|
67
|
+
/** A project repo a document can be grounded on: the registry identity, its human name, and the
|
|
68
|
+
* root the snapshot is cloned from (never handed to the worker directly — wicked-core#294). */
|
|
69
|
+
export interface GroundingRepo {
|
|
70
|
+
repoRef: string;
|
|
71
|
+
name: string;
|
|
72
|
+
rootPath: string;
|
|
73
|
+
}
|
|
74
|
+
/** Why a launch grounds where it grounds — narrated on the thread verbatim (F-046 follow-up). */
|
|
75
|
+
export type GroundingSource = 'named' | 'brief' | 'sole-member' | 'none';
|
|
76
|
+
export interface GroundingDecision {
|
|
77
|
+
repos: GroundingRepo[];
|
|
78
|
+
source: GroundingSource;
|
|
79
|
+
/** Named refs that resolve to no member repo (detached since the create, or never attached). */
|
|
80
|
+
missing: string[];
|
|
81
|
+
/** Named refs that resolve to SEVERAL member repos (two repos sharing a name/basename): never
|
|
82
|
+
* guessed — reported, so the user names the id (codex on crew#506). */
|
|
83
|
+
ambiguous: string[];
|
|
84
|
+
/** How many member repos the project has — the honest "none of N was named" note needs it. */
|
|
85
|
+
memberCount: number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The project's `crew.repo` members verified against the repo registry (a stale membership whose
|
|
89
|
+
* repo left the registry is skipped — it has no root to snapshot). `[]` when the project has no
|
|
90
|
+
* repo members or the adapter cannot answer (old addon, engine hiccup): every caller degrades to an
|
|
91
|
+
* ungrounded launch, narrated.
|
|
92
|
+
*/
|
|
93
|
+
export declare function projectRepoCandidates(adapter: CoreAdapter, projectId: string, log?: (message: string) => void): Promise<GroundingRepo[]>;
|
|
94
|
+
/** Does a request ref name this repo? Its registry id, its name, or its root basename — case-
|
|
95
|
+
* insensitive on the human spellings, exact on the id. */
|
|
96
|
+
export declare function matchRepoRef(ref: string, repo: GroundingRepo): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* EVERY candidate a ref names. An exact registry id is unique by construction and wins alone; a
|
|
99
|
+
* human spelling (name / root basename) can name several repos — two checkouts of `wicked-studio`
|
|
100
|
+
* under different parents share a basename — and the caller must treat >1 as AMBIGUOUS, never
|
|
101
|
+
* pick the first (codex on crew#506).
|
|
102
|
+
*/
|
|
103
|
+
export declare function matchingRepos(ref: string, candidates: readonly GroundingRepo[]): GroundingRepo[];
|
|
104
|
+
/**
|
|
105
|
+
* The member repos a brief names OUTRIGHT — "use the wicked-studio repo in this project" names
|
|
106
|
+
* wicked-studio. Whole-token matches only (a name followed by `-` or an alphanumeric is a
|
|
107
|
+
* different repo: `wicked-studio` must not match `wicked-studio-archived`); case-insensitive.
|
|
108
|
+
* Order follows the candidates, not the brief.
|
|
109
|
+
*/
|
|
110
|
+
export declare function reposNamedInBrief(brief: string, candidates: GroundingRepo[]): GroundingRepo[];
|
|
111
|
+
/**
|
|
112
|
+
* Decide which repositories a document is grounded on. The order IS the contract:
|
|
113
|
+
*
|
|
114
|
+
* - `namedRefs` given (the create request said so) → THOSE, with unresolvable ones in `missing`;
|
|
115
|
+
* - else the member repos the brief names by name;
|
|
116
|
+
* - else the project's only repo;
|
|
117
|
+
* - else none — a multi-repo project whose document named nothing is NOT grounded on an arbitrary
|
|
118
|
+
* member (the F-046 defect); the caller narrates how to name one.
|
|
119
|
+
*/
|
|
120
|
+
export declare function resolveGroundingRepos(adapter: CoreAdapter, projectId: string, brief: string, namedRefs: readonly string[] | undefined, log?: (message: string) => void): Promise<GroundingDecision>;
|
|
121
|
+
/**
|
|
122
|
+
* A safe directory name for a repo's snapshot under `<runDir>/repos/` — derived from the CANONICAL
|
|
123
|
+
* registry id (unique by construction; names and basenames collide — codex on crew#506), reduced
|
|
124
|
+
* to a path-safe charset with its case kept, and made unique among `taken` CASE-INSENSITIVELY so
|
|
125
|
+
* ids `Foo` and `foo` never overwrite each other on a case-insensitive filesystem. The problem
|
|
126
|
+
* statement still calls the repo by its NAME beside the path. Adds the result to `taken`.
|
|
127
|
+
*/
|
|
128
|
+
export declare function snapshotDirName(repo: GroundingRepo, taken?: Set<string>): string;
|
|
129
|
+
/** The thread line that says WHERE a launch is grounded and WHY (F-046 follow-up: the worker's
|
|
130
|
+
* own words were the only place "grounded on wicked-core only" appeared). `null` when there is
|
|
131
|
+
* nothing to say about repositories at all (a repo-less project, an unfiled doc). */
|
|
132
|
+
export declare function groundingNarration(decision: GroundingDecision, snapshotted: readonly GroundingRepo[], kind: 'draft' | 'demo'): string | null;
|
|
133
|
+
/** The sidecar's filename, beside `versions.json`. */
|
|
134
|
+
export declare const CREW_GROUNDING_FILE = "crew-grounding.json";
|
|
135
|
+
/** What the proxy recorded for one document at create time. */
|
|
136
|
+
export interface DocGroundingBinding {
|
|
137
|
+
project_id: string;
|
|
138
|
+
/** Registry ids, canonicalized from whatever spelling the request used. */
|
|
139
|
+
repo_refs: string[];
|
|
140
|
+
/** The style the create was forwarded with (client-given or brief-inferred), when known. */
|
|
141
|
+
style?: string | undefined;
|
|
142
|
+
recorded_at: string;
|
|
143
|
+
}
|
|
144
|
+
/** Why a sidecar path was refused — each is a containment failure, never a "not found". */
|
|
145
|
+
export declare class GroundingPathRefusedError extends Error {
|
|
146
|
+
constructor(message: string);
|
|
147
|
+
}
|
|
148
|
+
/** Test seams into the containment sequence (never wired in production): `afterLstat` runs after
|
|
149
|
+
* the path checks and before the descriptor is opened — the swap window the fd discipline closes. */
|
|
150
|
+
export interface DocGroundingStoreHooks {
|
|
151
|
+
afterLstat?: (path: string) => void;
|
|
152
|
+
}
|
|
153
|
+
export declare class DocGroundingStore {
|
|
154
|
+
private readonly pending;
|
|
155
|
+
private nextToken;
|
|
156
|
+
private readonly hooks;
|
|
157
|
+
constructor(hooks?: DocGroundingStoreHooks);
|
|
158
|
+
/** `<docsRoot>/<documentId>/crew-grounding.json`, or null for an id that is not a safe segment.
|
|
159
|
+
* LEXICAL only — see {@link DocGroundingStore.verifiedSidecar} for the containment-checked path. */
|
|
160
|
+
static sidecarPath(docsRoot: string, documentId: string): string | null;
|
|
161
|
+
/**
|
|
162
|
+
* The sidecar path anchored to the REAL docs root, every component below it checked (codex on
|
|
163
|
+
* crew#506): the docs root must resolve (`realpath`); the doc directory, when present, must be a
|
|
164
|
+
* real directory — a symlink there would let a planted `<docs root>/<doc>` → elsewhere read or
|
|
165
|
+
* write a sidecar outside the root — and the sidecar (and its rename temp) must not be a link.
|
|
166
|
+
* Returns `{ path, docDir, docDirExists }`; throws {@link GroundingPathRefusedError} on a link or
|
|
167
|
+
* a non-directory; throws the fs error when the root itself does not resolve.
|
|
168
|
+
*/
|
|
169
|
+
static verifiedSidecar(docsRoot: string, documentId: string): {
|
|
170
|
+
path: string;
|
|
171
|
+
docDir: string;
|
|
172
|
+
docDirExists: boolean;
|
|
173
|
+
sidecar: Stats | null;
|
|
174
|
+
};
|
|
175
|
+
/** The binding beside the doc, or `undefined` when absent, malformed, or REFUSED (a symlinked
|
|
176
|
+
* doc dir / sidecar is read as "nothing named" — the thread narrates the fallback, the daemon
|
|
177
|
+
* never dies over it, and nothing outside the docs root is ever read). */
|
|
178
|
+
get(docsRoot: string, documentId: string): DocGroundingBinding | undefined;
|
|
179
|
+
/** Write the sidecar atomically under the VERIFIED real docs root. The doc directory normally
|
|
180
|
+
* exists by now (the bridge created it before answering the create); it is created — as a plain
|
|
181
|
+
* directory directly under the real root, never through a link — when it does not, so a record
|
|
182
|
+
* never fails on ordering alone. Throws ({@link GroundingPathRefusedError} on containment, the
|
|
183
|
+
* fs error otherwise) — the caller logs and the doc stays unbound. */
|
|
184
|
+
record(docsRoot: string, documentId: string, binding: Omit<DocGroundingBinding, 'recorded_at'> & {
|
|
185
|
+
recorded_at?: string;
|
|
186
|
+
}): void;
|
|
187
|
+
/** Drop a document's sidecar. `true` when one was removed; a refused path removes nothing. */
|
|
188
|
+
remove(docsRoot: string, documentId: string): boolean;
|
|
189
|
+
/** The proxy is about to forward a create for `projectId` that WILL record a binding. */
|
|
190
|
+
beginCreate(projectId: string): number;
|
|
191
|
+
/** The create answered (recorded, refused, or failed) — wake every waiter. */
|
|
192
|
+
settleCreate(token: number): void;
|
|
193
|
+
/** How many creates for `projectId` are still unanswered (diagnostics / tests). */
|
|
194
|
+
pendingCount(projectId: string): number;
|
|
195
|
+
/**
|
|
196
|
+
* The binding for `documentId` under `docsRoot`, waiting (bounded) for an in-flight create of the
|
|
197
|
+
* same project to settle first — the seam's answer to the bus racing the create response.
|
|
198
|
+
* Resolves immediately when the binding is already there or nothing is pending for the project.
|
|
199
|
+
*/
|
|
200
|
+
waitFor(docsRoot: string, documentId: string, projectId: string, timeoutMs: number): Promise<DocGroundingBinding | undefined>;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=doc-grounding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-grounding.d.ts","sourceRoot":"","sources":["../../src/interactive/doc-grounding.ts"],"names":[],"mappings":"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"}
|