@shield-agent/kya 0.1.38 → 0.1.40
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/.mcp.json +1 -1
- package/README.md +3 -3
- package/amp/settings.example.json +1 -1
- package/claude/claude_desktop_config.example.json +1 -1
- package/cline/cline_mcp_settings.example.json +1 -1
- package/copilot/mcp-config.example.json +1 -1
- package/dist/commands/connect.d.ts +15 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +4 -4
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/orr.d.ts.map +1 -1
- package/dist/commands/orr.js +3 -3
- package/dist/commands/orr.js.map +1 -1
- package/dist/node-upgrade.d.ts +17 -1
- package/dist/node-upgrade.d.ts.map +1 -1
- package/dist/node-upgrade.js +152 -5
- package/dist/node-upgrade.js.map +1 -1
- package/dist/receipt/enrich.d.ts +45 -0
- package/dist/receipt/enrich.d.ts.map +1 -0
- package/dist/receipt/enrich.js +205 -0
- package/dist/receipt/enrich.js.map +1 -0
- package/dist/receipt/render-receipt.d.ts +47 -0
- package/dist/receipt/render-receipt.d.ts.map +1 -1
- package/dist/receipt/render-receipt.js +433 -13
- package/dist/receipt/render-receipt.js.map +1 -1
- package/dist/showback/usage-file.d.ts +12 -0
- package/dist/showback/usage-file.d.ts.map +1 -0
- package/dist/showback/usage-file.js +14 -0
- package/dist/showback/usage-file.js.map +1 -0
- package/droid/README.md +1 -1
- package/droid/mcp.example.json +1 -1
- package/gemini/settings.example.json +1 -1
- package/grok/README.md +1 -1
- package/kilo/kilo.example.json +1 -1
- package/kimi/mcp.example.json +1 -1
- package/kiro/mcp.example.json +1 -1
- package/manifest.json +1 -1
- package/mastracode/mcp.example.json +1 -1
- package/mcp.json +1 -1
- package/openai/codex.config.example.toml +1 -1
- package/opencode/opencode.example.json +1 -1
- package/package.json +1 -1
- package/qwen/settings.example.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { OrrDisposition, OrrRating } from "../commands/orr.js";
|
|
2
|
+
import { type KyaFileConfig } from "../config.js";
|
|
3
|
+
import { type HostReload } from "../host-reload.js";
|
|
4
|
+
import type { SandboxRecord } from "../sandbox/types.js";
|
|
5
|
+
import { type ShowbackReport } from "../showback/cost-per-task.js";
|
|
6
|
+
/** Local identity from .kya/config.json; config.json never holds the API key.
|
|
7
|
+
* Only string fields pass through; baseUrl is inert display text (never a link). */
|
|
8
|
+
export declare function loadIdentity(cwd: string): KyaFileConfig | undefined;
|
|
9
|
+
export interface SandboxCard {
|
|
10
|
+
/** Configured backend from KYA_SANDBOX, when set. */
|
|
11
|
+
readonly backend: string | undefined;
|
|
12
|
+
readonly sandboxes: readonly SandboxRecord[];
|
|
13
|
+
}
|
|
14
|
+
export declare function loadSandboxes(cwd: string, env?: NodeJS.ProcessEnv): SandboxCard;
|
|
15
|
+
export interface OrrScorecardCounts {
|
|
16
|
+
readonly pass: number;
|
|
17
|
+
readonly fail: number;
|
|
18
|
+
readonly partial: number;
|
|
19
|
+
readonly notEvaluated: number;
|
|
20
|
+
}
|
|
21
|
+
export interface OrrCard {
|
|
22
|
+
readonly overall: OrrRating;
|
|
23
|
+
readonly disposition: OrrDisposition;
|
|
24
|
+
readonly primaryFailureMode: string;
|
|
25
|
+
readonly mostUrgentFix: string;
|
|
26
|
+
readonly generatedAt: string;
|
|
27
|
+
readonly targetName: string | undefined;
|
|
28
|
+
readonly scorecards: OrrScorecardCounts;
|
|
29
|
+
}
|
|
30
|
+
/** Slim ORR card from <cwd>/orr-report/report.json (default orr --out). */
|
|
31
|
+
export declare function loadOrrCard(cwd: string): OrrCard | undefined;
|
|
32
|
+
/** Observe-only showback from .kya/usage.json inside cwd. */
|
|
33
|
+
export declare function loadShowbackCard(cwd: string): ShowbackReport | undefined;
|
|
34
|
+
export type WiredState = "global" | "project" | "both" | "none";
|
|
35
|
+
export interface WiredHostRow {
|
|
36
|
+
readonly id: string;
|
|
37
|
+
readonly label: string;
|
|
38
|
+
readonly wired: WiredState;
|
|
39
|
+
readonly reload: HostReload | undefined;
|
|
40
|
+
readonly running: boolean;
|
|
41
|
+
/** Docs recipe path for hosts with no safe auto-wire. */
|
|
42
|
+
readonly recipeOnly: string | undefined;
|
|
43
|
+
}
|
|
44
|
+
export declare function loadWiredHosts(cwd: string, home?: string, procs?: ReadonlySet<string>): WiredHostRow[];
|
|
45
|
+
//# sourceMappingURL=enrich.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich.d.ts","sourceRoot":"","sources":["../../src/receipt/enrich.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAa,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,8BAA8B,CAAC;AA+BtC;oFACoF;AACpF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAcnE;AAED,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;CAC9C;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,WAAW,CASb;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;CACzC;AASD,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAmD5D;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAYxE;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAiBD,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,MAAkB,EACxB,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAC1B,YAAY,EAAE,CAuChB"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fail-safe loaders for the local Agent-activity report.
|
|
3
|
+
* Every loader returns undefined (or an empty list) on missing, corrupt, or
|
|
4
|
+
* oversize state and never throws — the report renders with zero optional
|
|
5
|
+
* state. Nothing here ever reads .kya/receipt-server.json (loopback token).
|
|
6
|
+
*/
|
|
7
|
+
import { lstatSync, readFileSync, realpathSync, statSync } from "node:fs";
|
|
8
|
+
import { homedir } from "node:os";
|
|
9
|
+
import { join, resolve, sep } from "node:path";
|
|
10
|
+
import { CONNECT_REGISTRY } from "../commands/connect.js";
|
|
11
|
+
import { readFileConfig } from "../config.js";
|
|
12
|
+
import { hostReload, hostRunning, listProcessNames, } from "../host-reload.js";
|
|
13
|
+
import { loadSandboxState } from "../sandbox/runtime.js";
|
|
14
|
+
import { buildShowback, } from "../showback/cost-per-task.js";
|
|
15
|
+
import { MAX_USAGE_FILE_BYTES, parseUsageFilePayload, } from "../showback/usage-file.js";
|
|
16
|
+
const MAX_ORR_REPORT_BYTES = 256 * 1024;
|
|
17
|
+
const MAX_ORR_TEXT_CHARS = 500;
|
|
18
|
+
const MAX_HOST_CONFIG_BYTES = 1024 * 1024;
|
|
19
|
+
function insideRoot(file, root) {
|
|
20
|
+
const a = resolve(file);
|
|
21
|
+
const b = resolve(root);
|
|
22
|
+
const prefix = b.endsWith(sep) ? b : b + sep;
|
|
23
|
+
return a === b || a.startsWith(prefix);
|
|
24
|
+
}
|
|
25
|
+
/** Resolve a file strictly inside root; refuse symlinks and escapes. */
|
|
26
|
+
function confinedFile(file, root) {
|
|
27
|
+
try {
|
|
28
|
+
const st = lstatSync(file);
|
|
29
|
+
if (st.isSymbolicLink() || !st.isFile())
|
|
30
|
+
return undefined;
|
|
31
|
+
const realFile = realpathSync(file);
|
|
32
|
+
const realRoot = realpathSync(root);
|
|
33
|
+
if (!insideRoot(realFile, realRoot))
|
|
34
|
+
return undefined;
|
|
35
|
+
return realFile;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Local identity from .kya/config.json; config.json never holds the API key.
|
|
42
|
+
* Only string fields pass through; baseUrl is inert display text (never a link). */
|
|
43
|
+
export function loadIdentity(cwd) {
|
|
44
|
+
try {
|
|
45
|
+
const raw = readFileConfig(cwd);
|
|
46
|
+
const out = {};
|
|
47
|
+
for (const key of ["agentId", "agentName", "host", "baseUrl"]) {
|
|
48
|
+
const v = raw[key];
|
|
49
|
+
if (typeof v !== "string" || !v.trim())
|
|
50
|
+
continue;
|
|
51
|
+
if (key === "host" && v !== "ide" && v !== "runtime")
|
|
52
|
+
continue;
|
|
53
|
+
out[key] = v;
|
|
54
|
+
}
|
|
55
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export function loadSandboxes(cwd, env = process.env) {
|
|
62
|
+
const backend = env.KYA_SANDBOX?.trim().toLowerCase() || undefined;
|
|
63
|
+
let sandboxes = [];
|
|
64
|
+
try {
|
|
65
|
+
sandboxes = loadSandboxState(cwd);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
sandboxes = [];
|
|
69
|
+
}
|
|
70
|
+
return { backend, sandboxes };
|
|
71
|
+
}
|
|
72
|
+
const ORR_RATINGS = new Set(["green", "amber", "red"]);
|
|
73
|
+
const ORR_DISPOSITIONS = new Set(["go", "conditional", "no_go"]);
|
|
74
|
+
function strOr(v) {
|
|
75
|
+
return typeof v === "string" ? v : "";
|
|
76
|
+
}
|
|
77
|
+
/** Slim ORR card from <cwd>/orr-report/report.json (default orr --out). */
|
|
78
|
+
export function loadOrrCard(cwd) {
|
|
79
|
+
const path = confinedFile(join(cwd, "orr-report", "report.json"), cwd);
|
|
80
|
+
if (!path)
|
|
81
|
+
return undefined;
|
|
82
|
+
try {
|
|
83
|
+
if (statSync(path).size > MAX_ORR_REPORT_BYTES)
|
|
84
|
+
return undefined;
|
|
85
|
+
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
86
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
87
|
+
return undefined;
|
|
88
|
+
const report = raw;
|
|
89
|
+
if (typeof report.overall !== "string" ||
|
|
90
|
+
!ORR_RATINGS.has(report.overall) ||
|
|
91
|
+
typeof report.disposition !== "string" ||
|
|
92
|
+
!ORR_DISPOSITIONS.has(report.disposition)) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
const counts = { pass: 0, fail: 0, partial: 0, notEvaluated: 0 };
|
|
96
|
+
if (Array.isArray(report.scorecards)) {
|
|
97
|
+
for (const card of report.scorecards) {
|
|
98
|
+
switch (card?.result) {
|
|
99
|
+
case "pass":
|
|
100
|
+
counts.pass += 1;
|
|
101
|
+
break;
|
|
102
|
+
case "fail":
|
|
103
|
+
counts.fail += 1;
|
|
104
|
+
break;
|
|
105
|
+
case "partial":
|
|
106
|
+
counts.partial += 1;
|
|
107
|
+
break;
|
|
108
|
+
case "not_evaluated":
|
|
109
|
+
counts.notEvaluated += 1;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const targetName = report.target && typeof report.target.name === "string"
|
|
115
|
+
? report.target.name.slice(0, MAX_ORR_TEXT_CHARS)
|
|
116
|
+
: undefined;
|
|
117
|
+
return {
|
|
118
|
+
overall: report.overall,
|
|
119
|
+
disposition: report.disposition,
|
|
120
|
+
primaryFailureMode: strOr(report.primary_failure_mode).slice(0, MAX_ORR_TEXT_CHARS),
|
|
121
|
+
mostUrgentFix: strOr(report.most_urgent_fix).slice(0, MAX_ORR_TEXT_CHARS),
|
|
122
|
+
generatedAt: strOr(report.generated_at),
|
|
123
|
+
targetName,
|
|
124
|
+
scorecards: counts,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/** Observe-only showback from .kya/usage.json inside cwd. */
|
|
132
|
+
export function loadShowbackCard(cwd) {
|
|
133
|
+
const path = confinedFile(join(cwd, ".kya", "usage.json"), cwd);
|
|
134
|
+
if (!path)
|
|
135
|
+
return undefined;
|
|
136
|
+
try {
|
|
137
|
+
if (statSync(path).size > MAX_USAGE_FILE_BYTES)
|
|
138
|
+
return undefined;
|
|
139
|
+
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
140
|
+
const records = parseUsageFilePayload(raw);
|
|
141
|
+
if (records.length === 0)
|
|
142
|
+
return undefined;
|
|
143
|
+
return buildShowback(records);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function hasWiredEntry(path, rootKey) {
|
|
150
|
+
try {
|
|
151
|
+
if (statSync(path).size > MAX_HOST_CONFIG_BYTES)
|
|
152
|
+
return false;
|
|
153
|
+
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
154
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
155
|
+
return false;
|
|
156
|
+
const servers = raw[rootKey];
|
|
157
|
+
if (!servers || typeof servers !== "object" || Array.isArray(servers)) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
return Boolean(servers["shield-kya"]);
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
export function loadWiredHosts(cwd, home = homedir(), procs) {
|
|
167
|
+
const running = procs ?? listProcessNames();
|
|
168
|
+
return Object.entries(CONNECT_REGISTRY).map(([id, spec]) => {
|
|
169
|
+
const reload = hostReload(id);
|
|
170
|
+
const isRunning = reload ? hostRunning(reload, running) : false;
|
|
171
|
+
// recipeOnly hosts have no verified config file — never probe for one.
|
|
172
|
+
if (spec.recipeOnly) {
|
|
173
|
+
return {
|
|
174
|
+
id,
|
|
175
|
+
label: spec.label,
|
|
176
|
+
wired: "none",
|
|
177
|
+
reload,
|
|
178
|
+
running: isRunning,
|
|
179
|
+
recipeOnly: spec.recipeOnly,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const globalWired = spec.globalPath
|
|
183
|
+
? hasWiredEntry(spec.globalPath(home), spec.rootKey)
|
|
184
|
+
: false;
|
|
185
|
+
const projectWired = spec.projectPath
|
|
186
|
+
? hasWiredEntry(spec.projectPath(cwd), spec.rootKey)
|
|
187
|
+
: false;
|
|
188
|
+
const wired = globalWired && projectWired
|
|
189
|
+
? "both"
|
|
190
|
+
: globalWired
|
|
191
|
+
? "global"
|
|
192
|
+
: projectWired
|
|
193
|
+
? "project"
|
|
194
|
+
: "none";
|
|
195
|
+
return {
|
|
196
|
+
id,
|
|
197
|
+
label: spec.label,
|
|
198
|
+
wired,
|
|
199
|
+
reload,
|
|
200
|
+
running: isRunning,
|
|
201
|
+
recipeOnly: undefined,
|
|
202
|
+
};
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=enrich.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich.js","sourceRoot":"","sources":["../../src/receipt/enrich.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { type TrailEvent } from "../trail.js";
|
|
2
|
+
import type { KyaFileConfig } from "../config.js";
|
|
3
|
+
import { type OrrCard, type SandboxCard, type WiredHostRow } from "./enrich.js";
|
|
4
|
+
import { type ShowbackReport } from "../showback/cost-per-task.js";
|
|
2
5
|
export interface ReceiptModel {
|
|
3
6
|
readonly title: string;
|
|
4
7
|
readonly rangeLabel: string;
|
|
@@ -14,7 +17,51 @@ export interface ReceiptModel {
|
|
|
14
17
|
}[];
|
|
15
18
|
/** When true, page connects to /events SSE for live refresh. */
|
|
16
19
|
readonly live?: boolean;
|
|
20
|
+
/** Local identity from .kya/config.json (inert text; never a link). */
|
|
21
|
+
readonly identity?: KyaFileConfig;
|
|
22
|
+
/** Sandbox state + configured KYA_SANDBOX backend. */
|
|
23
|
+
readonly sandboxes?: SandboxCard;
|
|
24
|
+
/** Per-host wiring status across the connect registry. */
|
|
25
|
+
readonly wiredHosts?: readonly WiredHostRow[];
|
|
26
|
+
/** Slim ORR card from orr-report/report.json. */
|
|
27
|
+
readonly orr?: OrrCard;
|
|
28
|
+
/** Observe-only showback from .kya/usage.json. */
|
|
29
|
+
readonly showback?: ShowbackReport;
|
|
17
30
|
}
|
|
31
|
+
export type WorstVerdict = "never" | "deny" | "hold" | "allow";
|
|
32
|
+
export interface SessionAggregate {
|
|
33
|
+
readonly sessionId: string;
|
|
34
|
+
readonly events: number;
|
|
35
|
+
readonly deny: number;
|
|
36
|
+
readonly hold: number;
|
|
37
|
+
readonly never: number;
|
|
38
|
+
readonly lastTs: string;
|
|
39
|
+
/** never > deny > hold > allow. */
|
|
40
|
+
readonly worst: WorstVerdict;
|
|
41
|
+
}
|
|
42
|
+
export interface CountRow {
|
|
43
|
+
readonly label: string;
|
|
44
|
+
readonly count: number;
|
|
45
|
+
}
|
|
46
|
+
export interface EventAggregates {
|
|
47
|
+
readonly modes: {
|
|
48
|
+
readonly observe: number;
|
|
49
|
+
readonly hold: number;
|
|
50
|
+
readonly offline: number;
|
|
51
|
+
};
|
|
52
|
+
readonly planes: {
|
|
53
|
+
readonly ide: number;
|
|
54
|
+
readonly runtime: number;
|
|
55
|
+
};
|
|
56
|
+
/** Top 8 sessions by recency. */
|
|
57
|
+
readonly sessions: readonly SessionAggregate[];
|
|
58
|
+
/** Top 8 reason codes by count. */
|
|
59
|
+
readonly reasons: readonly CountRow[];
|
|
60
|
+
/** Counts by productLabel, sorted desc. */
|
|
61
|
+
readonly products: readonly CountRow[];
|
|
62
|
+
}
|
|
63
|
+
/** Pure rollup of trail events for the report's stat chips and sections. */
|
|
64
|
+
export declare function aggregateEvents(events: readonly TrailEvent[]): EventAggregates;
|
|
18
65
|
export declare function buildReceiptModel(sessionId: string, events: readonly TrailEvent[], extras?: Partial<Omit<ReceiptModel, "title" | "events" | "generatedAt" | "rangeLabel">>): ReceiptModel;
|
|
19
66
|
export declare function buildWindowReceiptModel(events: readonly TrailEvent[], days: number, extras?: Partial<Omit<ReceiptModel, "title" | "events" | "generatedAt" | "rangeLabel">>): ReceiptModel;
|
|
20
67
|
/** Shared loader for static artifacts and the live loopback server. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-receipt.d.ts","sourceRoot":"","sources":["../../src/receipt/render-receipt.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2C,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"render-receipt.d.ts","sourceRoot":"","sources":["../../src/receipt/render-receipt.ts"],"names":[],"mappings":"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"}
|