@12ui/design 0.2.16 → 0.2.17
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 +22 -0
- package/dist/branch-client.d.ts +6 -1
- package/dist/branch-client.d.ts.map +1 -1
- package/dist/branch-client.js +6 -1
- package/dist/branch-client.js.map +1 -1
- package/dist/branch-status.d.ts.map +1 -1
- package/dist/branch-status.js +3 -2
- package/dist/branch-status.js.map +1 -1
- package/dist/branch-winner.d.ts +31 -0
- package/dist/branch-winner.d.ts.map +1 -0
- package/dist/branch-winner.js +121 -0
- package/dist/branch-winner.js.map +1 -0
- package/dist/cli-arguments.d.ts +1 -0
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +4 -3
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli-branch-command.d.ts +3 -0
- package/dist/cli-branch-command.d.ts.map +1 -1
- package/dist/cli-branch-command.js +66 -98
- package/dist/cli-branch-command.js.map +1 -1
- package/dist/cli-capabilities.d.ts +18 -0
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +23 -0
- package/dist/cli-capabilities.js.map +1 -1
- package/dist/cli-convert-command.d.ts +10 -0
- package/dist/cli-convert-command.d.ts.map +1 -0
- package/dist/cli-convert-command.js +307 -0
- package/dist/cli-convert-command.js.map +1 -0
- package/dist/cli-corpus-command.d.ts +6 -1
- package/dist/cli-corpus-command.d.ts.map +1 -1
- package/dist/cli-corpus-command.js +17 -21
- package/dist/cli-corpus-command.js.map +1 -1
- package/dist/cli-create-command.d.ts +5 -1
- package/dist/cli-create-command.d.ts.map +1 -1
- package/dist/cli-create-command.js +28 -12
- package/dist/cli-create-command.js.map +1 -1
- package/dist/cli-detach.d.ts.map +1 -1
- package/dist/cli-detach.js +10 -2
- package/dist/cli-detach.js.map +1 -1
- package/dist/cli-draft-command.d.ts +7 -0
- package/dist/cli-draft-command.d.ts.map +1 -1
- package/dist/cli-draft-command.js +6 -4
- package/dist/cli-draft-command.js.map +1 -1
- package/dist/cli-export-command.d.ts +24 -1
- package/dist/cli-export-command.d.ts.map +1 -1
- package/dist/cli-export-command.js +6 -3
- package/dist/cli-export-command.js.map +1 -1
- package/dist/cli-image-batch-command.d.ts +8 -2
- package/dist/cli-image-batch-command.d.ts.map +1 -1
- package/dist/cli-image-batch-command.js +15 -11
- package/dist/cli-image-batch-command.js.map +1 -1
- package/dist/cli-image-batch-resume.d.ts +3 -1
- package/dist/cli-image-batch-resume.d.ts.map +1 -1
- package/dist/cli-image-batch-resume.js +1 -0
- package/dist/cli-image-batch-resume.js.map +1 -1
- package/dist/cli-image-command.d.ts +3 -1
- package/dist/cli-image-command.d.ts.map +1 -1
- package/dist/cli-image-command.js +4 -2
- package/dist/cli-image-command.js.map +1 -1
- package/dist/cli-package-command.d.ts.map +1 -1
- package/dist/cli-package-command.js +4 -3
- package/dist/cli-package-command.js.map +1 -1
- package/dist/cli-refusal.d.ts +20 -0
- package/dist/cli-refusal.d.ts.map +1 -0
- package/dist/cli-refusal.js +29 -0
- package/dist/cli-refusal.js.map +1 -0
- package/dist/cli-run.d.ts +4 -0
- package/dist/cli-run.d.ts.map +1 -0
- package/dist/cli-run.js +215 -0
- package/dist/cli-run.js.map +1 -0
- package/dist/cli-select-command.d.ts +6 -1
- package/dist/cli-select-command.d.ts.map +1 -1
- package/dist/cli-select-command.js +9 -7
- package/dist/cli-select-command.js.map +1 -1
- package/dist/cli-usage.d.ts +17 -0
- package/dist/cli-usage.d.ts.map +1 -0
- package/dist/cli-usage.js +69 -0
- package/dist/cli-usage.js.map +1 -0
- package/dist/cli-version.d.ts +2 -0
- package/dist/cli-version.d.ts.map +1 -0
- package/dist/cli-version.js +8 -0
- package/dist/cli-version.js.map +1 -0
- package/dist/cli.js +9 -491
- package/dist/cli.js.map +1 -1
- package/dist/concept-input.d.ts +34 -0
- package/dist/concept-input.d.ts.map +1 -0
- package/dist/concept-input.js +41 -0
- package/dist/concept-input.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/package-client.d.ts +13 -0
- package/dist/package-client.d.ts.map +1 -1
- package/dist/package-client.js +32 -0
- package/dist/package-client.js.map +1 -1
- package/dist/run-journal-commands.d.ts +54 -0
- package/dist/run-journal-commands.d.ts.map +1 -0
- package/dist/run-journal-commands.js +258 -0
- package/dist/run-journal-commands.js.map +1 -0
- package/dist/run-journal.d.ts +231 -0
- package/dist/run-journal.d.ts.map +1 -0
- package/dist/run-journal.js +453 -0
- package/dist/run-journal.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CLI run journal — the durable record of what the CLI actually did.
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS EXISTS. The product left the shell: `12ui draft` collapsed three
|
|
5
|
+
* commands into one, `branch execute` detaches into its own process group, and
|
|
6
|
+
* a fused convert exports alongside itself. Every measurement pass since has
|
|
7
|
+
* made the same mistake in a new costume — the absence of a command in a shell
|
|
8
|
+
* transcript was read as the absence of work. It is not: the work moved into
|
|
9
|
+
* the CLI, and the shell stopped being able to see it. So the CLI writes down
|
|
10
|
+
* what it did, in the workspace the work belongs to, and that record — not a
|
|
11
|
+
* transcript, not narration — is what a reader scores.
|
|
12
|
+
*
|
|
13
|
+
* WHERE. `<workspace>/journal.jsonl`, one JSON object per line, where the
|
|
14
|
+
* workspace is the durable directory the command operates on: a draft run
|
|
15
|
+
* directory, a branch out-dir, a convert or export output directory. Commands
|
|
16
|
+
* with no workspace (`auth status`, `capabilities`, `create claim`, `mcp`) do
|
|
17
|
+
* not journal — see `run-journal-commands.ts`, which enumerates the whole
|
|
18
|
+
* surface and states a reason for every command that skips.
|
|
19
|
+
*
|
|
20
|
+
* ORDER AND DURABILITY.
|
|
21
|
+
* - Append-only. A line, once written, is never rewritten or removed.
|
|
22
|
+
* - Every append is ONE `write(2)` of a complete line under
|
|
23
|
+
* {@link RUN_JOURNAL_MAX_LINE_BYTES} to a descriptor opened `O_APPEND`, so
|
|
24
|
+
* concurrent appenders — the detached `branch execute` worker and the parent
|
|
25
|
+
* that spawned it share one file — never interleave mid-line.
|
|
26
|
+
* - Appends are synchronous so a line survives `process.exit` and so an exit
|
|
27
|
+
* backstop can close an unfinished command's record.
|
|
28
|
+
* - A reader must tolerate a torn final line: a writer can be interrupted
|
|
29
|
+
* between the append and the newline. {@link readRunJournal} reports it
|
|
30
|
+
* rather than throwing.
|
|
31
|
+
* - The journal never creates a directory. A workspace that never came into
|
|
32
|
+
* existence has no journal, which is the truthful record — nothing durable
|
|
33
|
+
* happened. Lines written before the workspace exists are held and flushed
|
|
34
|
+
* the moment it does.
|
|
35
|
+
*
|
|
36
|
+
* LINE SCHEMA v1. Field order below is the serialized order; readers must not
|
|
37
|
+
* depend on it.
|
|
38
|
+
*
|
|
39
|
+
* v always 1. A reader that does not know a version SKIPS the
|
|
40
|
+
* line and counts it, rather than guessing.
|
|
41
|
+
* ts ISO-8601 UTC, taken when the EVENT happened, which may be
|
|
42
|
+
* earlier than the append if the workspace appeared late.
|
|
43
|
+
* Wall clocks across processes are not ordered; file order
|
|
44
|
+
* is. Read order from the file, never from `ts`.
|
|
45
|
+
* cmd canonical command name: `branch execute`, `convert`,
|
|
46
|
+
* `convert package`, `draft status`. Never raw argv.
|
|
47
|
+
* args_digest sha256 of the normalized argv (positional order kept,
|
|
48
|
+
* flags sorted, values of sensitive flags replaced before
|
|
49
|
+
* hashing so the digest is stable across key rotation).
|
|
50
|
+
* Argv itself is never written down.
|
|
51
|
+
* run_id the service-side identity this command operates on, when
|
|
52
|
+
* it has one: a branch/create run id, a conversion id.
|
|
53
|
+
* idempotency_key the key that makes the paid call replayable.
|
|
54
|
+
* paid whether this command CAN spend money. A property of the
|
|
55
|
+
* command, not of the outcome.
|
|
56
|
+
* event "start" at command begin, "end" at exit.
|
|
57
|
+
* outcome end lines only: "ok" | "refused" | "error". A refusal is
|
|
58
|
+
* the CLI declining with nothing started (see
|
|
59
|
+
* `cli-refusal.ts`); an error is a failure.
|
|
60
|
+
* error_class end lines only, and only when not "ok". A closed
|
|
61
|
+
* vocabulary slug — never message text, never a path or an
|
|
62
|
+
* id. See {@link classifyRunJournalError}.
|
|
63
|
+
* artifacts paths this command produced. The AUTHORITATIVE records
|
|
64
|
+
* (a completion sentinel, a manifest, the written output),
|
|
65
|
+
* not every file: the records name the rest, and the line
|
|
66
|
+
* has a byte budget.
|
|
67
|
+
* purchased ids of anything bought — conversion ids, run ids, package
|
|
68
|
+
* ids.
|
|
69
|
+
* terminal whether the RUN this workspace holds is in a terminal
|
|
70
|
+
* state after this event, as best this command knows. A
|
|
71
|
+
* start line is never terminal. A dispatcher that detached
|
|
72
|
+
* is never terminal — its worker owns the answer.
|
|
73
|
+
* detached whether this process handed the run to a background
|
|
74
|
+
* worker and returned before the work finished. The worker
|
|
75
|
+
* appends its own start/end pair to the same file with
|
|
76
|
+
* `detached: false` and its own `pid`; the two are told
|
|
77
|
+
* apart by `pid` and by the worker's argv digest, which
|
|
78
|
+
* covers the `--wait` the dispatcher appended.
|
|
79
|
+
* pid the appending process.
|
|
80
|
+
*
|
|
81
|
+
* FORWARD COMPATIBILITY. Fields are added, never repurposed or removed, and a
|
|
82
|
+
* new field is always optional. Readers ignore fields they do not know, skip
|
|
83
|
+
* lines whose `v` they do not know, and tolerate a torn final line. Anything
|
|
84
|
+
* that changes the meaning of an existing field takes `v: 2`, and this header
|
|
85
|
+
* is where that is written down.
|
|
86
|
+
*/
|
|
87
|
+
export declare const RUN_JOURNAL_VERSION = 1;
|
|
88
|
+
export declare const RUN_JOURNAL_FILENAME = "journal.jsonl";
|
|
89
|
+
/**
|
|
90
|
+
* A single small append cannot be split by the kernel, which is what keeps
|
|
91
|
+
* concurrent appenders from interleaving. 4 KiB is the conventional page-sized
|
|
92
|
+
* budget and is far more than a line of identities needs.
|
|
93
|
+
*/
|
|
94
|
+
export declare const RUN_JOURNAL_MAX_LINE_BYTES = 4096;
|
|
95
|
+
/** How many entries `artifacts` and `purchased` carry before they are trimmed. */
|
|
96
|
+
export declare const RUN_JOURNAL_MAX_LIST_ENTRIES = 16;
|
|
97
|
+
/**
|
|
98
|
+
* The last element of a list that did not fit. Trimming is visible rather than
|
|
99
|
+
* silent: a journal that names fewer paths is recoverable, a journal that
|
|
100
|
+
* failed to append is not.
|
|
101
|
+
*/
|
|
102
|
+
export declare const RUN_JOURNAL_TRUNCATION_MARKER = "<truncated>";
|
|
103
|
+
/** Written in place of a sensitive flag's value before the digest is taken. */
|
|
104
|
+
export declare const RUN_JOURNAL_REDACTED = "<redacted>";
|
|
105
|
+
export type RunJournalEventKind = 'start' | 'end';
|
|
106
|
+
export type RunJournalOutcome = 'ok' | 'refused' | 'error';
|
|
107
|
+
export type RunJournalEntry = {
|
|
108
|
+
v: typeof RUN_JOURNAL_VERSION;
|
|
109
|
+
ts: string;
|
|
110
|
+
cmd: string;
|
|
111
|
+
args_digest: string;
|
|
112
|
+
run_id?: string;
|
|
113
|
+
idempotency_key?: string;
|
|
114
|
+
paid: boolean;
|
|
115
|
+
event: RunJournalEventKind;
|
|
116
|
+
outcome?: RunJournalOutcome;
|
|
117
|
+
error_class?: string;
|
|
118
|
+
artifacts?: string[];
|
|
119
|
+
purchased?: string[];
|
|
120
|
+
terminal: boolean;
|
|
121
|
+
detached: boolean;
|
|
122
|
+
pid: number;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Credentials are redacted before the digest is taken so two runs of the same
|
|
126
|
+
* command share a digest across a key rotation, and so no secret is ever inside
|
|
127
|
+
* a hash the journal publishes. Identities that are not secrets —
|
|
128
|
+
* `--idempotency-key` above all — are deliberately NOT redacted: they are what
|
|
129
|
+
* ties a line to a paid call.
|
|
130
|
+
*/
|
|
131
|
+
export declare const isSensitiveFlagName: (name: string) => boolean;
|
|
132
|
+
export type NormalizedArgv = {
|
|
133
|
+
command: string[];
|
|
134
|
+
flags: [string, string | true][];
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Tolerant on purpose. The digest is taken before anything is validated, so an
|
|
138
|
+
* argv the real parser would reject still produces a stable digest instead of
|
|
139
|
+
* throwing inside the instrument.
|
|
140
|
+
*/
|
|
141
|
+
export declare const normalizeArgv: (argv: readonly string[]) => NormalizedArgv;
|
|
142
|
+
export declare const argsDigest: (argv: readonly string[]) => string;
|
|
143
|
+
/**
|
|
144
|
+
* The line as it goes to disk: lists trimmed to the entry cap, then trimmed
|
|
145
|
+
* again — visibly — until the whole line fits the single-write budget.
|
|
146
|
+
*/
|
|
147
|
+
export declare const buildRunJournalLine: (entry: RunJournalEntry) => string;
|
|
148
|
+
/**
|
|
149
|
+
* ONE `write(2)` of the whole line to an `O_APPEND` descriptor. Everything
|
|
150
|
+
* about concurrent appenders rests on this staying a single write: a loop that
|
|
151
|
+
* retried a short write would be exactly the tear this prevents.
|
|
152
|
+
*/
|
|
153
|
+
export declare const appendRunJournalLine: (file: string, line: string) => void;
|
|
154
|
+
export declare const runJournalPath: (workspace: string) => string;
|
|
155
|
+
export type RunJournalLineResult = {
|
|
156
|
+
ok: true;
|
|
157
|
+
entry: RunJournalEntry;
|
|
158
|
+
} | {
|
|
159
|
+
ok: false;
|
|
160
|
+
reason: 'malformed' | 'unsupported-version';
|
|
161
|
+
};
|
|
162
|
+
export declare const parseRunJournalLine: (line: string) => RunJournalLineResult;
|
|
163
|
+
export type RunJournalReadResult = {
|
|
164
|
+
entries: RunJournalEntry[];
|
|
165
|
+
/** The file did not end in a newline: a writer was cut mid-append. */
|
|
166
|
+
torn: boolean;
|
|
167
|
+
/** Lines a v1 reader could not use, kept as a count rather than dropped. */
|
|
168
|
+
skipped: {
|
|
169
|
+
line: number;
|
|
170
|
+
reason: 'malformed' | 'unsupported-version';
|
|
171
|
+
}[];
|
|
172
|
+
};
|
|
173
|
+
export declare const parseRunJournal: (contents: string) => RunJournalReadResult;
|
|
174
|
+
export declare const readRunJournal: (target: {
|
|
175
|
+
workspace: string;
|
|
176
|
+
} | {
|
|
177
|
+
file: string;
|
|
178
|
+
}) => Promise<RunJournalReadResult>;
|
|
179
|
+
/**
|
|
180
|
+
* A closed vocabulary, so a reader can bucket without reading prose and so no
|
|
181
|
+
* path, id, or user text ever reaches the journal through an error message.
|
|
182
|
+
* Refusals carry their own declared code; everything else lands on a shape.
|
|
183
|
+
*/
|
|
184
|
+
export declare const classifyRunJournalError: (error: unknown) => {
|
|
185
|
+
outcome: Exclude<RunJournalOutcome, "ok">;
|
|
186
|
+
errorClass: string;
|
|
187
|
+
};
|
|
188
|
+
/** What a command tells the journal while it runs. */
|
|
189
|
+
export type RunJournalFacts = {
|
|
190
|
+
/** Bind a workspace that only existed once the command created it. */
|
|
191
|
+
workspace?: string;
|
|
192
|
+
runId?: string;
|
|
193
|
+
idempotencyKey?: string;
|
|
194
|
+
artifacts?: readonly string[];
|
|
195
|
+
purchased?: readonly string[];
|
|
196
|
+
/** The run's state as this command observed it. */
|
|
197
|
+
terminal?: boolean;
|
|
198
|
+
};
|
|
199
|
+
export type RunJournalNotes = {
|
|
200
|
+
note: (facts: RunJournalFacts) => void;
|
|
201
|
+
};
|
|
202
|
+
export type RunJournalPlan = {
|
|
203
|
+
cmd: string;
|
|
204
|
+
argv: readonly string[];
|
|
205
|
+
paid: boolean;
|
|
206
|
+
detached: boolean;
|
|
207
|
+
/** Absolute, when the workspace is known before the command runs. */
|
|
208
|
+
workspace?: string;
|
|
209
|
+
runId?: string;
|
|
210
|
+
idempotencyKey?: string;
|
|
211
|
+
/** Whether a successful run of this command leaves the run terminal. */
|
|
212
|
+
terminalOnSuccess: boolean;
|
|
213
|
+
};
|
|
214
|
+
export type RunJournalSession = RunJournalNotes & {
|
|
215
|
+
end: (result: {
|
|
216
|
+
outcome: RunJournalOutcome;
|
|
217
|
+
error?: unknown;
|
|
218
|
+
}) => void;
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Opens the record for one command: writes (or holds) the start line now and
|
|
222
|
+
* owns the end line, including the backstop for a command that leaves through
|
|
223
|
+
* `process.exit` instead of returning.
|
|
224
|
+
*/
|
|
225
|
+
export declare const openRunJournal: (plan: RunJournalPlan) => RunJournalSession;
|
|
226
|
+
/**
|
|
227
|
+
* Run one command inside its journal. A command with no workspace runs against
|
|
228
|
+
* a no-op session, so the caller never branches on whether it journals.
|
|
229
|
+
*/
|
|
230
|
+
export declare const withRunJournal: <T>(plan: RunJournalPlan | null, run: (journal: RunJournalNotes) => Promise<T>) => Promise<T>;
|
|
231
|
+
//# sourceMappingURL=run-journal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-journal.d.ts","sourceRoot":"","sources":["../src/run-journal.ts"],"names":[],"mappings":"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"}
|