@tinyviber/a2h 0.1.0
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 +229 -0
- package/bin/a2h.js +7 -0
- package/dist/actions/engine.d.ts +40 -0
- package/dist/actions/engine.d.ts.map +1 -0
- package/dist/actions/engine.js +227 -0
- package/dist/actions/engine.js.map +1 -0
- package/dist/actions/policy.d.ts +8 -0
- package/dist/actions/policy.d.ts.map +1 -0
- package/dist/actions/policy.js +55 -0
- package/dist/actions/policy.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +258 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +8 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +69 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/build.d.ts +8 -0
- package/dist/ir/build.d.ts.map +1 -0
- package/dist/ir/build.js +397 -0
- package/dist/ir/build.js.map +1 -0
- package/dist/ir/enrich.d.ts +21 -0
- package/dist/ir/enrich.d.ts.map +1 -0
- package/dist/ir/enrich.js +177 -0
- package/dist/ir/enrich.js.map +1 -0
- package/dist/ir/identity.d.ts +3 -0
- package/dist/ir/identity.d.ts.map +1 -0
- package/dist/ir/identity.js +91 -0
- package/dist/ir/identity.js.map +1 -0
- package/dist/ir/scoring.d.ts +7 -0
- package/dist/ir/scoring.d.ts.map +1 -0
- package/dist/ir/scoring.js +88 -0
- package/dist/ir/scoring.js.map +1 -0
- package/dist/parsers/code.d.ts +3 -0
- package/dist/parsers/code.d.ts.map +1 -0
- package/dist/parsers/code.js +17 -0
- package/dist/parsers/code.js.map +1 -0
- package/dist/parsers/diff.d.ts +11 -0
- package/dist/parsers/diff.d.ts.map +1 -0
- package/dist/parsers/diff.js +125 -0
- package/dist/parsers/diff.js.map +1 -0
- package/dist/parsers/json.d.ts +3 -0
- package/dist/parsers/json.d.ts.map +1 -0
- package/dist/parsers/json.js +16 -0
- package/dist/parsers/json.js.map +1 -0
- package/dist/parsers/log.d.ts +3 -0
- package/dist/parsers/log.d.ts.map +1 -0
- package/dist/parsers/log.js +105 -0
- package/dist/parsers/log.js.map +1 -0
- package/dist/parsers/markdown.d.ts +15 -0
- package/dist/parsers/markdown.d.ts.map +1 -0
- package/dist/parsers/markdown.js +89 -0
- package/dist/parsers/markdown.js.map +1 -0
- package/dist/parsers/text.d.ts +24 -0
- package/dist/parsers/text.d.ts.map +1 -0
- package/dist/parsers/text.js +98 -0
- package/dist/parsers/text.js.map +1 -0
- package/dist/presentation/blocks.d.ts +14 -0
- package/dist/presentation/blocks.d.ts.map +1 -0
- package/dist/presentation/blocks.js +87 -0
- package/dist/presentation/blocks.js.map +1 -0
- package/dist/presentation/present.d.ts +12 -0
- package/dist/presentation/present.d.ts.map +1 -0
- package/dist/presentation/present.js +115 -0
- package/dist/presentation/present.js.map +1 -0
- package/dist/providers/mock.d.ts +3 -0
- package/dist/providers/mock.d.ts.map +1 -0
- package/dist/providers/mock.js +171 -0
- package/dist/providers/mock.js.map +1 -0
- package/dist/providers/registry.d.ts +12 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +20 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +64 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +40 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/renderer/assets/index.html +41 -0
- package/dist/renderer/assets/js/actions.js +205 -0
- package/dist/renderer/assets/js/api.js +75 -0
- package/dist/renderer/assets/js/artifacts.js +422 -0
- package/dist/renderer/assets/js/blocks.js +301 -0
- package/dist/renderer/assets/js/bus.js +21 -0
- package/dist/renderer/assets/js/cards.js +137 -0
- package/dist/renderer/assets/js/dom.js +61 -0
- package/dist/renderer/assets/js/format.js +118 -0
- package/dist/renderer/assets/js/main.js +125 -0
- package/dist/renderer/assets/js/nav.js +80 -0
- package/dist/renderer/assets/js/router.js +64 -0
- package/dist/renderer/assets/js/store.js +69 -0
- package/dist/renderer/assets/js/views.js +356 -0
- package/dist/renderer/assets/styles.css +856 -0
- package/dist/renderer/content.d.ts +11 -0
- package/dist/renderer/content.d.ts.map +1 -0
- package/dist/renderer/content.js +114 -0
- package/dist/renderer/content.js.map +1 -0
- package/dist/scanner/classify.d.ts +17 -0
- package/dist/scanner/classify.d.ts.map +1 -0
- package/dist/scanner/classify.js +117 -0
- package/dist/scanner/classify.js.map +1 -0
- package/dist/scanner/git.d.ts +3 -0
- package/dist/scanner/git.d.ts.map +1 -0
- package/dist/scanner/git.js +43 -0
- package/dist/scanner/git.js.map +1 -0
- package/dist/scanner/ignore.d.ts +22 -0
- package/dist/scanner/ignore.d.ts.map +1 -0
- package/dist/scanner/ignore.js +57 -0
- package/dist/scanner/ignore.js.map +1 -0
- package/dist/scanner/scan.d.ts +8 -0
- package/dist/scanner/scan.d.ts.map +1 -0
- package/dist/scanner/scan.js +108 -0
- package/dist/scanner/scan.js.map +1 -0
- package/dist/security/boundary.d.ts +19 -0
- package/dist/security/boundary.d.ts.map +1 -0
- package/dist/security/boundary.js +59 -0
- package/dist/security/boundary.js.map +1 -0
- package/dist/security/urlPolicy.d.ts +4 -0
- package/dist/security/urlPolicy.d.ts.map +1 -0
- package/dist/security/urlPolicy.js +56 -0
- package/dist/security/urlPolicy.js.map +1 -0
- package/dist/security/workspaceRead.d.ts +25 -0
- package/dist/security/workspaceRead.d.ts.map +1 -0
- package/dist/security/workspaceRead.js +103 -0
- package/dist/security/workspaceRead.js.map +1 -0
- package/dist/semantics/load.d.ts +11 -0
- package/dist/semantics/load.d.ts.map +1 -0
- package/dist/semantics/load.js +537 -0
- package/dist/semantics/load.js.map +1 -0
- package/dist/semantics/resolve.d.ts +37 -0
- package/dist/semantics/resolve.d.ts.map +1 -0
- package/dist/semantics/resolve.js +211 -0
- package/dist/semantics/resolve.js.map +1 -0
- package/dist/semantics/types.d.ts +158 -0
- package/dist/semantics/types.d.ts.map +1 -0
- package/dist/semantics/types.js +3 -0
- package/dist/semantics/types.js.map +1 -0
- package/dist/server/server.d.ts +17 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +510 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/workspace.d.ts +53 -0
- package/dist/server/workspace.d.ts.map +1 -0
- package/dist/server/workspace.js +211 -0
- package/dist/server/workspace.js.map +1 -0
- package/dist/types.d.ts +570 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/dist/util/path.d.ts +11 -0
- package/dist/util/path.d.ts.map +1 -0
- package/dist/util/path.js +35 -0
- package/dist/util/path.js.map +1 -0
- package/dist/util/safeRead.d.ts +38 -0
- package/dist/util/safeRead.d.ts.map +1 -0
- package/dist/util/safeRead.js +117 -0
- package/dist/util/safeRead.js.map +1 -0
- package/package.json +40 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,570 @@
|
|
|
1
|
+
/** Broad classification of a scanned file. Extension-driven, least trusted. */
|
|
2
|
+
export type FileKind = 'markdown' | 'code' | 'json' | 'log' | 'diff' | 'image' | 'binary' | 'other';
|
|
3
|
+
/**
|
|
4
|
+
* How a file's bytes should be drawn. Separate from `Role` on purpose: a role
|
|
5
|
+
* is what a thing *means* ("spec", "evidence", "draft"), a content kind is what
|
|
6
|
+
* it *is* ("markdown", "image"). A producer can call a PNG anything it likes and
|
|
7
|
+
* it will still be drawn as an image.
|
|
8
|
+
*
|
|
9
|
+
* Published on the view so a client can decide how to present an artifact
|
|
10
|
+
* without fetching it first.
|
|
11
|
+
*/
|
|
12
|
+
export type ContentKind = 'markdown' | 'code' | 'json' | 'log' | 'diff' | 'image' | 'file';
|
|
13
|
+
export interface FileEntry {
|
|
14
|
+
/** POSIX-style path relative to the workspace root, e.g. "outputs/a.md". */
|
|
15
|
+
path: string;
|
|
16
|
+
absolutePath: string;
|
|
17
|
+
kind: FileKind;
|
|
18
|
+
/** Size in bytes. */
|
|
19
|
+
size: number;
|
|
20
|
+
/** Last modified time in epoch ms. */
|
|
21
|
+
mtimeMs: number;
|
|
22
|
+
/** Lowercase extension without the leading dot, e.g. "md" ("" if none). */
|
|
23
|
+
ext: string;
|
|
24
|
+
isSymlink: boolean;
|
|
25
|
+
/** Content looks like a secret / credential — do not preview. */
|
|
26
|
+
sensitive: boolean;
|
|
27
|
+
/** Directory depth from the workspace root. */
|
|
28
|
+
depth: number;
|
|
29
|
+
}
|
|
30
|
+
export interface IgnoredEntry {
|
|
31
|
+
path: string;
|
|
32
|
+
reason: string;
|
|
33
|
+
}
|
|
34
|
+
export interface GitInfo {
|
|
35
|
+
isRepo: boolean;
|
|
36
|
+
branch?: string;
|
|
37
|
+
lastCommit?: {
|
|
38
|
+
hash: string;
|
|
39
|
+
dateMs: number;
|
|
40
|
+
subject: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface WorkspaceIdentity {
|
|
44
|
+
/** Human-facing name for the workspace. */
|
|
45
|
+
name: string;
|
|
46
|
+
/** One-line summary, typically sourced from the README or git remote. */
|
|
47
|
+
summary?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface ScanResult {
|
|
50
|
+
rootDir: string;
|
|
51
|
+
identity: WorkspaceIdentity;
|
|
52
|
+
git: GitInfo;
|
|
53
|
+
files: FileEntry[];
|
|
54
|
+
ignored: IgnoredEntry[];
|
|
55
|
+
warnings: string[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The built-in (inferred) roles. Producers may use any other string; A2H
|
|
59
|
+
* treats unknown roles as opaque labels and falls back to a generic card.
|
|
60
|
+
*/
|
|
61
|
+
export type ArtifactKind = 'readme' | 'markdown' | 'report' | 'code' | 'json' | 'log' | 'diff' | 'image' | 'file';
|
|
62
|
+
/**
|
|
63
|
+
* An open role string. `ArtifactKind | (string & {})` keeps autocomplete for
|
|
64
|
+
* the built-ins while accepting producer-defined roles such as "signal" or
|
|
65
|
+
* "test-plan".
|
|
66
|
+
*/
|
|
67
|
+
export type Role = ArtifactKind | (string & {});
|
|
68
|
+
/** How a node's semantics were established. Ordered by trust, highest first. */
|
|
69
|
+
export type SemanticSource = 'explicit' | 'frontmatter' | 'convention' | 'heuristic';
|
|
70
|
+
export interface ArtifactMeta {
|
|
71
|
+
size: number;
|
|
72
|
+
mtimeMs: number;
|
|
73
|
+
/** Lines in the file's own text. Never the number of files touched. */
|
|
74
|
+
lineCount?: number;
|
|
75
|
+
/** Files touched by a diff. */
|
|
76
|
+
fileCount?: number;
|
|
77
|
+
language?: string;
|
|
78
|
+
imageWidth?: number;
|
|
79
|
+
imageHeight?: number;
|
|
80
|
+
}
|
|
81
|
+
/** Built-in fallback sections. Explicit groups may use any string id. */
|
|
82
|
+
export type SectionKind = 'overview' | 'reports' | 'changes' | 'visuals' | 'logs' | 'data' | 'code' | 'other';
|
|
83
|
+
export type RelationKind = 'related' | 'derived-from' | 'supports' | 'supersedes' | 'produced-by';
|
|
84
|
+
export interface Relation {
|
|
85
|
+
kind: RelationKind | (string & {});
|
|
86
|
+
/** Workspace-relative path or node id. */
|
|
87
|
+
target: string;
|
|
88
|
+
note?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface Metric {
|
|
91
|
+
label: string;
|
|
92
|
+
value: string | number;
|
|
93
|
+
unit?: string;
|
|
94
|
+
delta?: string;
|
|
95
|
+
tone?: Tone;
|
|
96
|
+
}
|
|
97
|
+
export type Tone = 'neutral' | 'good' | 'warn' | 'bad' | 'info';
|
|
98
|
+
export interface SemanticNode {
|
|
99
|
+
/**
|
|
100
|
+
* Stable id. For artifacts this is the workspace-relative path (unique).
|
|
101
|
+
* For sections it is a slug such as "reports".
|
|
102
|
+
*/
|
|
103
|
+
id: string;
|
|
104
|
+
type: 'workspace' | 'section' | 'group' | 'artifact';
|
|
105
|
+
title: string;
|
|
106
|
+
/** Open semantic role. */
|
|
107
|
+
kind?: Role;
|
|
108
|
+
/** How the bytes will be drawn, independent of the role. */
|
|
109
|
+
content?: ContentKind;
|
|
110
|
+
/** Workspace-relative path (artifacts only). */
|
|
111
|
+
path?: string;
|
|
112
|
+
summary?: string;
|
|
113
|
+
/** Higher = more important / should be shown earlier. */
|
|
114
|
+
priority: number;
|
|
115
|
+
meta?: ArtifactMeta;
|
|
116
|
+
/** Short human tags, e.g. "final", "latest", "stale". */
|
|
117
|
+
tags?: string[];
|
|
118
|
+
/** Where the semantics came from. */
|
|
119
|
+
source?: SemanticSource;
|
|
120
|
+
/** Producer-declared group id (falls back to the derived section). */
|
|
121
|
+
group?: string;
|
|
122
|
+
/** Owning task id, when the producer declared one. */
|
|
123
|
+
taskId?: string;
|
|
124
|
+
/** Explicit relations to other artifacts. */
|
|
125
|
+
relations?: Relation[];
|
|
126
|
+
/** Producer-declared metrics. */
|
|
127
|
+
metrics?: Metric[];
|
|
128
|
+
/** Producer-authored presentation blocks for this artifact. */
|
|
129
|
+
blocks?: Block[];
|
|
130
|
+
/**
|
|
131
|
+
* Which inferred section this artifact belongs to when no producer group
|
|
132
|
+
* claims it. Derived from the role if it is a built-in one, otherwise from
|
|
133
|
+
* the file's actual kind — so a producer role never loses basic placement.
|
|
134
|
+
*/
|
|
135
|
+
fallbackSection?: SectionKind;
|
|
136
|
+
children: SemanticNode[];
|
|
137
|
+
}
|
|
138
|
+
export interface SemanticIR {
|
|
139
|
+
/** Stable id for the whole workspace (hash of absolute path). */
|
|
140
|
+
id: string;
|
|
141
|
+
identity: WorkspaceIdentity;
|
|
142
|
+
git: GitInfo;
|
|
143
|
+
stats: {
|
|
144
|
+
files: number;
|
|
145
|
+
artifacts: number;
|
|
146
|
+
ignored: number;
|
|
147
|
+
bytes: number;
|
|
148
|
+
};
|
|
149
|
+
/** Which semantics layer actually shaped this IR. */
|
|
150
|
+
semantics: SemanticsOrigin;
|
|
151
|
+
root: SemanticNode;
|
|
152
|
+
warnings: string[];
|
|
153
|
+
}
|
|
154
|
+
export type SemanticsOrigin = 'explicit' | 'mixed' | 'inferred';
|
|
155
|
+
/**
|
|
156
|
+
* Presentation blocks. These are the units the renderer knows how to draw.
|
|
157
|
+
* A producer can author any of them in the manifest; A2H also synthesises
|
|
158
|
+
* some from the task/run/action model.
|
|
159
|
+
*
|
|
160
|
+
* `type` is an open string so new block kinds can be added without touching
|
|
161
|
+
* this union's consumers — the client keeps a renderer registry.
|
|
162
|
+
*/
|
|
163
|
+
export interface TextBlock {
|
|
164
|
+
type: 'text';
|
|
165
|
+
id?: string;
|
|
166
|
+
title?: string;
|
|
167
|
+
text: string;
|
|
168
|
+
tone?: Tone;
|
|
169
|
+
}
|
|
170
|
+
export interface MarkdownBlock {
|
|
171
|
+
type: 'markdown';
|
|
172
|
+
id?: string;
|
|
173
|
+
title?: string;
|
|
174
|
+
/**
|
|
175
|
+
* Server-rendered HTML. Producers never set this — they supply `text` or
|
|
176
|
+
* `path` and the presentation layer compiles it with the same conservative
|
|
177
|
+
* renderer used for artifact content.
|
|
178
|
+
*/
|
|
179
|
+
html?: string;
|
|
180
|
+
/** Literal markdown source. */
|
|
181
|
+
text?: string;
|
|
182
|
+
/** Workspace-relative file to read the markdown from. */
|
|
183
|
+
path?: string;
|
|
184
|
+
}
|
|
185
|
+
export interface ListItem {
|
|
186
|
+
title: string;
|
|
187
|
+
detail?: string;
|
|
188
|
+
href?: string;
|
|
189
|
+
status?: TaskStatus | (string & {});
|
|
190
|
+
meta?: string;
|
|
191
|
+
}
|
|
192
|
+
export interface ListBlock {
|
|
193
|
+
type: 'list';
|
|
194
|
+
id?: string;
|
|
195
|
+
title?: string;
|
|
196
|
+
items: ListItem[];
|
|
197
|
+
ordered?: boolean;
|
|
198
|
+
}
|
|
199
|
+
export interface TableBlock {
|
|
200
|
+
type: 'table';
|
|
201
|
+
id?: string;
|
|
202
|
+
title?: string;
|
|
203
|
+
columns: {
|
|
204
|
+
key: string;
|
|
205
|
+
label: string;
|
|
206
|
+
align?: 'left' | 'right';
|
|
207
|
+
}[];
|
|
208
|
+
rows: Record<string, string>[];
|
|
209
|
+
note?: string;
|
|
210
|
+
}
|
|
211
|
+
export interface ComparisonOption {
|
|
212
|
+
title: string;
|
|
213
|
+
summary?: string;
|
|
214
|
+
facts: {
|
|
215
|
+
label: string;
|
|
216
|
+
value: string;
|
|
217
|
+
}[];
|
|
218
|
+
tone?: Tone;
|
|
219
|
+
}
|
|
220
|
+
export interface ComparisonBlock {
|
|
221
|
+
type: 'comparison';
|
|
222
|
+
id?: string;
|
|
223
|
+
title?: string;
|
|
224
|
+
options: ComparisonOption[];
|
|
225
|
+
conclusion?: string;
|
|
226
|
+
}
|
|
227
|
+
export interface MetricsBlock {
|
|
228
|
+
type: 'metrics';
|
|
229
|
+
id?: string;
|
|
230
|
+
title?: string;
|
|
231
|
+
items: Metric[];
|
|
232
|
+
}
|
|
233
|
+
export interface TimelineItem {
|
|
234
|
+
at?: string;
|
|
235
|
+
title: string;
|
|
236
|
+
detail?: string;
|
|
237
|
+
status?: TaskStatus | (string & {});
|
|
238
|
+
}
|
|
239
|
+
export interface TimelineBlock {
|
|
240
|
+
type: 'timeline';
|
|
241
|
+
id?: string;
|
|
242
|
+
title?: string;
|
|
243
|
+
items: TimelineItem[];
|
|
244
|
+
}
|
|
245
|
+
export interface StatusBlock {
|
|
246
|
+
type: 'status';
|
|
247
|
+
id?: string;
|
|
248
|
+
title?: string;
|
|
249
|
+
status: TaskStatus | (string & {});
|
|
250
|
+
detail?: string;
|
|
251
|
+
}
|
|
252
|
+
export interface KeyValueBlock {
|
|
253
|
+
type: 'keyvalue';
|
|
254
|
+
id?: string;
|
|
255
|
+
title?: string;
|
|
256
|
+
items: {
|
|
257
|
+
key: string;
|
|
258
|
+
value: string;
|
|
259
|
+
mono?: boolean;
|
|
260
|
+
}[];
|
|
261
|
+
}
|
|
262
|
+
export interface NoticeBlock {
|
|
263
|
+
type: 'notice';
|
|
264
|
+
id?: string;
|
|
265
|
+
title?: string;
|
|
266
|
+
text: string;
|
|
267
|
+
tone?: 'info' | 'warn' | 'error';
|
|
268
|
+
}
|
|
269
|
+
export interface ActionsBlock {
|
|
270
|
+
type: 'actions';
|
|
271
|
+
id?: string;
|
|
272
|
+
title?: string;
|
|
273
|
+
/** Action ids, resolved against the workspace action registry. */
|
|
274
|
+
ids: string[];
|
|
275
|
+
}
|
|
276
|
+
export type Block = TextBlock | MarkdownBlock | ListBlock | TableBlock | ComparisonBlock | MetricsBlock | TimelineBlock | StatusBlock | KeyValueBlock | NoticeBlock | ActionsBlock | {
|
|
277
|
+
type: string;
|
|
278
|
+
id?: string;
|
|
279
|
+
title?: string;
|
|
280
|
+
[key: string]: unknown;
|
|
281
|
+
};
|
|
282
|
+
export interface ArtifactView {
|
|
283
|
+
id: string;
|
|
284
|
+
title: string;
|
|
285
|
+
kind: Role;
|
|
286
|
+
/** How this artifact's bytes will be drawn. Lets the client pick a renderer. */
|
|
287
|
+
content: ContentKind;
|
|
288
|
+
path?: string;
|
|
289
|
+
summary?: string;
|
|
290
|
+
meta?: ArtifactMeta;
|
|
291
|
+
tags?: string[];
|
|
292
|
+
priority: number;
|
|
293
|
+
source?: SemanticSource;
|
|
294
|
+
/**
|
|
295
|
+
* The producer-declared group, when there was one. The section an artifact
|
|
296
|
+
* appears in is its *home*; the group is the producer's own labelling, which
|
|
297
|
+
* matters when a section holds more than one group or on a task page.
|
|
298
|
+
*/
|
|
299
|
+
group?: string;
|
|
300
|
+
taskId?: string;
|
|
301
|
+
relations?: Relation[];
|
|
302
|
+
metrics?: Metric[];
|
|
303
|
+
}
|
|
304
|
+
export interface GroupView {
|
|
305
|
+
id: string;
|
|
306
|
+
title: string;
|
|
307
|
+
description?: string;
|
|
308
|
+
artifacts: ArtifactView[];
|
|
309
|
+
taskId?: string;
|
|
310
|
+
}
|
|
311
|
+
export interface SectionView {
|
|
312
|
+
id: string;
|
|
313
|
+
title: string;
|
|
314
|
+
kind: SectionKind | (string & {});
|
|
315
|
+
description?: string;
|
|
316
|
+
artifacts: ArtifactView[];
|
|
317
|
+
/** True when the section came from a producer-declared group. */
|
|
318
|
+
explicit?: boolean;
|
|
319
|
+
}
|
|
320
|
+
export type TaskStatus = 'pending' | 'running' | 'succeeded' | 'failed' | 'partial' | 'blocked' | 'cancelled' | 'info';
|
|
321
|
+
export interface RunStep {
|
|
322
|
+
id: string;
|
|
323
|
+
title: string;
|
|
324
|
+
status: TaskStatus | (string & {});
|
|
325
|
+
detail?: string;
|
|
326
|
+
at?: string;
|
|
327
|
+
}
|
|
328
|
+
export interface RunView {
|
|
329
|
+
id: string;
|
|
330
|
+
taskId?: string;
|
|
331
|
+
title: string;
|
|
332
|
+
status: TaskStatus | (string & {});
|
|
333
|
+
startedAt?: string;
|
|
334
|
+
endedAt?: string;
|
|
335
|
+
durationMs?: number;
|
|
336
|
+
summary?: string;
|
|
337
|
+
/** Workspace-relative paths produced by this run. */
|
|
338
|
+
artifacts: string[];
|
|
339
|
+
steps?: RunStep[];
|
|
340
|
+
blocks?: Block[];
|
|
341
|
+
/** True when this run is real; false when produced by a mock provider. */
|
|
342
|
+
simulated?: boolean;
|
|
343
|
+
}
|
|
344
|
+
export interface ActionParam {
|
|
345
|
+
name: string;
|
|
346
|
+
label: string;
|
|
347
|
+
type: 'text' | 'textarea' | 'select' | 'boolean';
|
|
348
|
+
required?: boolean;
|
|
349
|
+
options?: string[];
|
|
350
|
+
placeholder?: string;
|
|
351
|
+
default?: string | boolean;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* How far an action's effect reaches.
|
|
355
|
+
*
|
|
356
|
+
* none — navigation only; nothing changes
|
|
357
|
+
* state — changes state A2H can see
|
|
358
|
+
* external — would leave this machine (send to an agent, publish, apply a diff)
|
|
359
|
+
*
|
|
360
|
+
* Two parties have an opinion about this: the workspace (which hints) and the
|
|
361
|
+
* executor that will actually run the action (which is authoritative). See
|
|
362
|
+
* `actions/policy.ts` for the merge — it can only ever raise the level.
|
|
363
|
+
*/
|
|
364
|
+
export type SideEffect = 'none' | 'state' | 'external';
|
|
365
|
+
/**
|
|
366
|
+
* A provider's authoritative statement about one action: what it will do, and
|
|
367
|
+
* whether a human must confirm it first.
|
|
368
|
+
*/
|
|
369
|
+
export interface EffectPolicy {
|
|
370
|
+
effect: SideEffect;
|
|
371
|
+
/** 'required' means a human must confirm before the action runs. */
|
|
372
|
+
confirmation: 'required' | 'optional';
|
|
373
|
+
}
|
|
374
|
+
export interface ActionView {
|
|
375
|
+
id: string;
|
|
376
|
+
label: string;
|
|
377
|
+
/** Open kind: approve / reject / retry / run / publish / open / discard … */
|
|
378
|
+
kind: string;
|
|
379
|
+
taskId?: string;
|
|
380
|
+
target?: string;
|
|
381
|
+
description?: string;
|
|
382
|
+
/**
|
|
383
|
+
* How far the side effect reaches — already merged with the executor's own
|
|
384
|
+
* policy, so this is the *effective* level rather than the workspace's claim.
|
|
385
|
+
*/
|
|
386
|
+
sideEffect: SideEffect;
|
|
387
|
+
/** Requires an explicit second confirmation before executing. */
|
|
388
|
+
confirm: boolean;
|
|
389
|
+
enabled: boolean;
|
|
390
|
+
params?: ActionParam[];
|
|
391
|
+
/**
|
|
392
|
+
* True when the executor that will run *this* action only simulates it.
|
|
393
|
+
* Per action, not per workspace: a real provider may own one action while
|
|
394
|
+
* the built-in simulator owns the next one.
|
|
395
|
+
*/
|
|
396
|
+
simulated: boolean;
|
|
397
|
+
}
|
|
398
|
+
export interface TaskView {
|
|
399
|
+
id: string;
|
|
400
|
+
title: string;
|
|
401
|
+
status: TaskStatus | (string & {});
|
|
402
|
+
summary?: string;
|
|
403
|
+
group?: string;
|
|
404
|
+
owner?: string;
|
|
405
|
+
updatedAt?: string;
|
|
406
|
+
progress?: {
|
|
407
|
+
done: number;
|
|
408
|
+
total: number;
|
|
409
|
+
label?: string;
|
|
410
|
+
};
|
|
411
|
+
metrics?: Metric[];
|
|
412
|
+
blocks?: Block[];
|
|
413
|
+
/** Artifact ids (workspace-relative paths) belonging to this task. */
|
|
414
|
+
artifacts: string[];
|
|
415
|
+
runs: RunView[];
|
|
416
|
+
actions: ActionView[];
|
|
417
|
+
source: SemanticSource;
|
|
418
|
+
}
|
|
419
|
+
export interface Presentation {
|
|
420
|
+
identity: WorkspaceIdentity;
|
|
421
|
+
git: GitInfo;
|
|
422
|
+
stats: {
|
|
423
|
+
files: number;
|
|
424
|
+
artifacts: number;
|
|
425
|
+
ignored: number;
|
|
426
|
+
bytes: number;
|
|
427
|
+
};
|
|
428
|
+
/** 'explicit' when a manifest shaped the view; 'inferred' for zero-config. */
|
|
429
|
+
semantics: SemanticsOrigin;
|
|
430
|
+
/**
|
|
431
|
+
* True when at least one declared action will be simulated by its executor.
|
|
432
|
+
* Deliberately not "all": a workspace may hand one action to a real provider
|
|
433
|
+
* and let the next fall through to the built-in simulator. Read the per-action
|
|
434
|
+
* `ActionView.simulated` for anything the human is about to click.
|
|
435
|
+
*/
|
|
436
|
+
simulatedActions: boolean;
|
|
437
|
+
highlights: ArtifactView[];
|
|
438
|
+
sections: SectionView[];
|
|
439
|
+
tasks: TaskView[];
|
|
440
|
+
runs: RunView[];
|
|
441
|
+
actions: ActionView[];
|
|
442
|
+
/** Workspace-level composed blocks (the "panel"). */
|
|
443
|
+
panels: Block[];
|
|
444
|
+
/** Actions attempted in this session. In-memory only; nothing is persisted. */
|
|
445
|
+
audit: ActionAuditEntry[];
|
|
446
|
+
warnings: string[];
|
|
447
|
+
}
|
|
448
|
+
/** One line of the session action trail. */
|
|
449
|
+
export interface ActionAuditEntry {
|
|
450
|
+
at: string;
|
|
451
|
+
actionId: string;
|
|
452
|
+
kind: string;
|
|
453
|
+
sideEffect: string;
|
|
454
|
+
ok: boolean;
|
|
455
|
+
simulated: boolean;
|
|
456
|
+
message: string;
|
|
457
|
+
executor: string;
|
|
458
|
+
}
|
|
459
|
+
export interface Frontmatter {
|
|
460
|
+
data: Record<string, unknown>;
|
|
461
|
+
}
|
|
462
|
+
export interface MarkdownContent {
|
|
463
|
+
type: 'markdown';
|
|
464
|
+
html: string;
|
|
465
|
+
title?: string;
|
|
466
|
+
frontmatter?: Record<string, unknown>;
|
|
467
|
+
}
|
|
468
|
+
export interface CodeContent {
|
|
469
|
+
type: 'code';
|
|
470
|
+
language: string;
|
|
471
|
+
raw: string;
|
|
472
|
+
totalLines: number;
|
|
473
|
+
truncated: boolean;
|
|
474
|
+
}
|
|
475
|
+
export interface DiffFile {
|
|
476
|
+
path: string;
|
|
477
|
+
from?: string;
|
|
478
|
+
to?: string;
|
|
479
|
+
status: 'added' | 'removed' | 'modified' | 'renamed';
|
|
480
|
+
added: number;
|
|
481
|
+
removed: number;
|
|
482
|
+
hunks: DiffHunk[];
|
|
483
|
+
}
|
|
484
|
+
export interface DiffHunk {
|
|
485
|
+
header: string;
|
|
486
|
+
lines: DiffLine[];
|
|
487
|
+
}
|
|
488
|
+
export interface DiffLine {
|
|
489
|
+
type: 'context' | 'add' | 'del';
|
|
490
|
+
text: string;
|
|
491
|
+
oldNo?: number;
|
|
492
|
+
newNo?: number;
|
|
493
|
+
}
|
|
494
|
+
export interface DiffContent {
|
|
495
|
+
type: 'diff';
|
|
496
|
+
files: DiffFile[];
|
|
497
|
+
totalLines: number;
|
|
498
|
+
truncated?: boolean;
|
|
499
|
+
}
|
|
500
|
+
export interface JsonContent {
|
|
501
|
+
type: 'json';
|
|
502
|
+
data: unknown;
|
|
503
|
+
valid: boolean;
|
|
504
|
+
/** Raw text, possibly truncated. */
|
|
505
|
+
raw: string;
|
|
506
|
+
truncated: boolean;
|
|
507
|
+
}
|
|
508
|
+
export interface LogContent {
|
|
509
|
+
type: 'log';
|
|
510
|
+
tail: string[];
|
|
511
|
+
totalLines: number;
|
|
512
|
+
truncated: boolean;
|
|
513
|
+
hasErrors: boolean;
|
|
514
|
+
hasWarnings: boolean;
|
|
515
|
+
/** Zero-based line numbers (of the full log) that contain errors. */
|
|
516
|
+
errorLines: number[];
|
|
517
|
+
}
|
|
518
|
+
export interface ImageContent {
|
|
519
|
+
type: 'image';
|
|
520
|
+
url: string;
|
|
521
|
+
width?: number;
|
|
522
|
+
height?: number;
|
|
523
|
+
}
|
|
524
|
+
export interface FileContent {
|
|
525
|
+
type: 'file';
|
|
526
|
+
isBinary: boolean;
|
|
527
|
+
/** Short text preview for text files (truncated). */
|
|
528
|
+
text?: string;
|
|
529
|
+
truncated?: boolean;
|
|
530
|
+
/** Optional note, e.g. "sensitive" or "symlink". */
|
|
531
|
+
note?: string;
|
|
532
|
+
}
|
|
533
|
+
export type ArtifactContent = MarkdownContent | CodeContent | DiffContent | JsonContent | LogContent | ImageContent | FileContent;
|
|
534
|
+
export interface ArtifactPayload {
|
|
535
|
+
id: string;
|
|
536
|
+
title: string;
|
|
537
|
+
kind: Role;
|
|
538
|
+
path?: string;
|
|
539
|
+
summary?: string;
|
|
540
|
+
meta?: ArtifactMeta;
|
|
541
|
+
tags?: string[];
|
|
542
|
+
content: ArtifactContent;
|
|
543
|
+
/** Producer-authored blocks, pre-resolved for rendering. */
|
|
544
|
+
blocks?: Block[];
|
|
545
|
+
relations?: Relation[];
|
|
546
|
+
taskId?: string;
|
|
547
|
+
}
|
|
548
|
+
export interface ActionRequest {
|
|
549
|
+
id: string;
|
|
550
|
+
params?: Record<string, string>;
|
|
551
|
+
/** Set by the client after the user confirms a side-effecting action. */
|
|
552
|
+
confirm?: boolean;
|
|
553
|
+
}
|
|
554
|
+
export interface ActionResult {
|
|
555
|
+
ok: boolean;
|
|
556
|
+
actionId: string;
|
|
557
|
+
/** Human-readable outcome line. */
|
|
558
|
+
message: string;
|
|
559
|
+
/** True when a mock provider produced this result. */
|
|
560
|
+
simulated: boolean;
|
|
561
|
+
/** Run created by the action, when the executor produced one. */
|
|
562
|
+
run?: RunView;
|
|
563
|
+
/** Task whose state changed, with its new status. */
|
|
564
|
+
task?: {
|
|
565
|
+
id: string;
|
|
566
|
+
status: string;
|
|
567
|
+
};
|
|
568
|
+
error?: string;
|
|
569
|
+
}
|
|
570
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// A2H core types.
|
|
3
|
+
//
|
|
4
|
+
// These types form the contract between the scanner, semantics resolver,
|
|
5
|
+
// semantic IR builder, presentation layer, content renderers, action
|
|
6
|
+
// executors, and the local server. They are deliberately framework-free:
|
|
7
|
+
// nothing here imports React or any renderer.
|
|
8
|
+
//
|
|
9
|
+
// The layering, in order:
|
|
10
|
+
//
|
|
11
|
+
// filesystem
|
|
12
|
+
// -> scanner (FileEntry: what bytes exist)
|
|
13
|
+
// -> semantics (explicit manifest / frontmatter / conventions)
|
|
14
|
+
// -> semantic IR (SemanticNode: what things mean)
|
|
15
|
+
// -> presentation IR (Presentation: what a human should see, in order)
|
|
16
|
+
// -> renderer (ArtifactContent + Block payloads)
|
|
17
|
+
// -> local web UI
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,kBAAkB;AAClB,EAAE;AACF,yEAAyE;AACzE,qEAAqE;AACrE,yEAAyE;AACzE,8CAA8C;AAC9C,EAAE;AACF,0BAA0B;AAC1B,EAAE;AACF,eAAe;AACf,0DAA0D;AAC1D,4EAA4E;AAC5E,6DAA6D;AAC7D,8EAA8E;AAC9E,+DAA+D;AAC/D,sBAAsB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalizes a POSIX relative path, resolving "." and ".." segments.
|
|
3
|
+
* Returns null if the path escapes the root (i.e. climbs above it).
|
|
4
|
+
*/
|
|
5
|
+
export declare function normalizeRel(p: string): string | null;
|
|
6
|
+
/**
|
|
7
|
+
* Joins a base directory with a relative path and normalizes the result.
|
|
8
|
+
* Returns null if the result escapes the workspace root.
|
|
9
|
+
*/
|
|
10
|
+
export declare function joinRel(baseDir: string, rel: string): string | null;
|
|
11
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/util/path.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEnE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Path helpers that are used by both the renderer (image resolution) and the
|
|
3
|
+
// server (route safety). They produce workspace-relative POSIX paths and
|
|
4
|
+
// reject anything that would escape the workspace root.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.normalizeRel = normalizeRel;
|
|
7
|
+
exports.joinRel = joinRel;
|
|
8
|
+
/**
|
|
9
|
+
* Normalizes a POSIX relative path, resolving "." and ".." segments.
|
|
10
|
+
* Returns null if the path escapes the root (i.e. climbs above it).
|
|
11
|
+
*/
|
|
12
|
+
function normalizeRel(p) {
|
|
13
|
+
const segs = [];
|
|
14
|
+
for (const seg of p.split('/')) {
|
|
15
|
+
if (seg === '' || seg === '.')
|
|
16
|
+
continue;
|
|
17
|
+
if (seg === '..') {
|
|
18
|
+
if (segs.length === 0)
|
|
19
|
+
return null;
|
|
20
|
+
segs.pop();
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
segs.push(seg);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return segs.join('/');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Joins a base directory with a relative path and normalizes the result.
|
|
30
|
+
* Returns null if the result escapes the workspace root.
|
|
31
|
+
*/
|
|
32
|
+
function joinRel(baseDir, rel) {
|
|
33
|
+
return normalizeRel(baseDir ? `${baseDir}/${rel}` : rel);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/util/path.ts"],"names":[],"mappings":";AAAA,6EAA6E;AAC7E,yEAAyE;AACzE,wDAAwD;;AAMxD,oCAYC;AAMD,0BAEC;AAxBD;;;GAGG;AACH,SAAgB,YAAY,CAAC,CAAS;IACpC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG;YAAE,SAAS;QACxC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACnC,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe,EAAE,GAAW;IAClD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3D,CAAC"}
|