@jinn-network/client 0.1.9-canary.95c0ef5f → 0.1.9-canary.96fab2ed
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/launcher-endpoints.js +6 -1
- package/dist/api/launcher-endpoints.js.map +1 -1
- package/dist/api/launcher-tasks.d.ts +47 -0
- package/dist/api/launcher-tasks.js +88 -3
- package/dist/api/launcher-tasks.js.map +1 -1
- package/dist/bin/jinn-distil-mcp.js +813 -0
- package/dist/bin/jinn-layer.js +1008 -63
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/captures/distil-export.d.ts +54 -0
- package/dist/captures/distil-export.js +135 -0
- package/dist/captures/distil-export.js.map +1 -0
- package/dist/dashboard/assets/{index-DutC5x2k.js → index-B2VRYqxE.js} +11 -11
- package/dist/dashboard/assets/index-D7rvJRNa.css +1 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.js +83 -1
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +12 -0
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +43 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +10 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/eval/capability-slate.d.ts +54 -0
- package/dist/eval/capability-slate.js +116 -0
- package/dist/eval/capability-slate.js.map +1 -0
- package/dist/eval/capability-stats.d.ts +39 -0
- package/dist/eval/capability-stats.js +123 -0
- package/dist/eval/capability-stats.js.map +1 -0
- package/dist/eval/contested-band.d.ts +18 -0
- package/dist/eval/contested-band.js +19 -0
- package/dist/eval/contested-band.js.map +1 -0
- package/dist/eval/corpus-index.d.ts +21 -0
- package/dist/eval/corpus-index.js +55 -0
- package/dist/eval/corpus-index.js.map +1 -0
- package/dist/eval/disjointness.d.ts +26 -0
- package/dist/eval/disjointness.js +67 -0
- package/dist/eval/disjointness.js.map +1 -0
- package/dist/eval/mcnemar-power.d.ts +14 -0
- package/dist/eval/mcnemar-power.js +40 -0
- package/dist/eval/mcnemar-power.js.map +1 -0
- package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +3 -1
- package/dist/harnesses/impls/learner/adapters/codex-code.js +39 -4
- package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
- package/dist/main.js +26 -0
- package/dist/main.js.map +1 -1
- package/dist/monitoring/net-liveness.d.ts +143 -0
- package/dist/monitoring/net-liveness.js +301 -0
- package/dist/monitoring/net-liveness.js.map +1 -0
- package/dist/pilot/cost.d.ts +19 -0
- package/dist/pilot/cost.js +31 -0
- package/dist/pilot/cost.js.map +1 -0
- package/dist/pilot/instance.d.ts +20 -0
- package/dist/pilot/instance.js +19 -0
- package/dist/pilot/instance.js.map +1 -0
- package/dist/pilot/repo.d.ts +31 -0
- package/dist/pilot/repo.js +42 -0
- package/dist/pilot/repo.js.map +1 -0
- package/dist/pilot/solve.d.ts +22 -0
- package/dist/pilot/solve.js +37 -0
- package/dist/pilot/solve.js.map +1 -0
- package/dist/pilot/tally.d.ts +35 -0
- package/dist/pilot/tally.js +61 -0
- package/dist/pilot/tally.js.map +1 -0
- package/dist/plugins/local-trace-distiller/.claude-plugin/plugin.json +9 -0
- package/dist/plugins/local-trace-distiller/.codex-plugin/plugin.json +41 -0
- package/dist/plugins/local-trace-distiller/.mcp.json +8 -0
- package/dist/plugins/local-trace-distiller/README.md +27 -0
- package/dist/plugins/local-trace-distiller/jinn.plugin.json +36 -0
- package/dist/plugins/local-trace-distiller/skills/distill/SKILL.md +51 -0
- package/dist/spend/credential.d.ts +2 -2
- package/dist/spend/credential.js +9 -3
- package/dist/spend/credential.js.map +1 -1
- package/dist/store/store.d.ts +7 -0
- package/dist/store/store.js +1 -0
- package/dist/store/store.js.map +1 -1
- package/dist/trajectory/scrub/secretlint-stage.js +10 -1
- package/dist/trajectory/scrub/secretlint-stage.js.map +1 -1
- package/dist/util/redact-rpc-urls.d.ts +1 -1
- package/dist/util/redact-rpc-urls.js +57 -2
- package/dist/util/redact-rpc-urls.js.map +1 -1
- package/package.json +5 -2
- package/plugins/local-trace-distiller/.claude-plugin/plugin.json +9 -0
- package/plugins/local-trace-distiller/.codex-plugin/plugin.json +41 -0
- package/plugins/local-trace-distiller/.mcp.json +8 -0
- package/plugins/local-trace-distiller/README.md +27 -0
- package/plugins/local-trace-distiller/jinn.plugin.json +36 -0
- package/plugins/local-trace-distiller/skills/distill/SKILL.md +51 -0
- package/dist/dashboard/assets/index-DJvvj6nF.css +0 -1
|
@@ -21,6 +21,10 @@ function parseCursor(raw) {
|
|
|
21
21
|
// SPA can pass either form without a wrapper layer.
|
|
22
22
|
return raw;
|
|
23
23
|
}
|
|
24
|
+
function parseManifestCid(raw) {
|
|
25
|
+
const trimmed = raw?.trim();
|
|
26
|
+
return trimmed ? trimmed : undefined;
|
|
27
|
+
}
|
|
24
28
|
export function addLauncherRoutes(app, deps) {
|
|
25
29
|
app.get('/v1/launcher/status', async (c) => {
|
|
26
30
|
const body = await gatherLauncherStatus({ ...deps, config: deps.getConfig() });
|
|
@@ -29,7 +33,8 @@ export function addLauncherRoutes(app, deps) {
|
|
|
29
33
|
app.get('/v1/launcher/tasks', async (c) => {
|
|
30
34
|
const limit = parseLimit(c.req.query('limit'));
|
|
31
35
|
const before = parseCursor(c.req.query('cursor'));
|
|
32
|
-
const
|
|
36
|
+
const manifestCid = parseManifestCid(c.req.query('manifestCid'));
|
|
37
|
+
const body = await gatherLauncherTasks({ ...deps.tasksDeps, config: deps.getConfig() }, { limit, ...(before ? { before } : {}), ...(manifestCid ? { manifestCid } : {}) });
|
|
33
38
|
return c.json(body);
|
|
34
39
|
});
|
|
35
40
|
// Legacy launcher-mode SolverNet patch (`PATCH /v1/launcher/solvernets/:name`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher-endpoints.js","sourceRoot":"","sources":["../../src/api/launcher-endpoints.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AA+B7B,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,aAAa,GAAG,SAAS,CAAC;AAEhC,SAAS,UAAU,CAAC,GAAuB;IACzC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,aAAa,CAAC;IACnD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,WAAW,CAAC,GAAuB;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1E,0EAA0E;IAC1E,oDAAoD;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAS,EAAE,IAAwB;IACnE,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC/E,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CACpC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAC/C,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"launcher-endpoints.js","sourceRoot":"","sources":["../../src/api/launcher-endpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { JinnConfig } from '../config.js';
|
|
2
|
+
import type { TaskOnchainStatus, TaskStatusSnapshot } from '../discovery/types.js';
|
|
2
3
|
export type LauncherTaskState = 'open' | 'claims-in-flight' | 'fully-claimed' | 'settled' | 'failed';
|
|
3
4
|
export interface LauncherTaskEntry {
|
|
4
5
|
taskId: string;
|
|
@@ -7,6 +8,13 @@ export interface LauncherTaskEntry {
|
|
|
7
8
|
solverType?: string;
|
|
8
9
|
postedAt: string;
|
|
9
10
|
state: LauncherTaskState;
|
|
11
|
+
/**
|
|
12
|
+
* On-chain finalization status (#579), sourced from the indexer `task` table
|
|
13
|
+
* (`finalized`/`refunded`/`claimWindowEnd`) — DISTINCT from the local,
|
|
14
|
+
* generator-side `state`. `'unknown'` is the safe degraded default (no
|
|
15
|
+
* snapshot / indexer outage); never guessed as `'open'`.
|
|
16
|
+
*/
|
|
17
|
+
onchainStatus: TaskOnchainStatus;
|
|
10
18
|
claims: {
|
|
11
19
|
current: number;
|
|
12
20
|
max: number;
|
|
@@ -32,6 +40,14 @@ export interface LauncherTasksResponse {
|
|
|
32
40
|
/** A single posted-Task row as surfaced by the daemon's store accessor. */
|
|
33
41
|
export interface PostedTaskRecord {
|
|
34
42
|
taskId: string;
|
|
43
|
+
/**
|
|
44
|
+
* On-chain decimal taskId (#579). DISTINCT from `taskId`, which is the
|
|
45
|
+
* off-chain task-document id (UUID / solver-type slug). The indexer status
|
|
46
|
+
* map is keyed by this on-chain id, so `mapRecordToEntry` looks the chip up
|
|
47
|
+
* by `protocolTaskId` (falling back to `taskId` for older/test rows that
|
|
48
|
+
* don't carry it). Optional: pre-migration rows omit it.
|
|
49
|
+
*/
|
|
50
|
+
protocolTaskId?: string;
|
|
35
51
|
taskCid: string;
|
|
36
52
|
/** Optional — if present, used to derive `solverNet` via config lookup. */
|
|
37
53
|
solverType?: string;
|
|
@@ -65,6 +81,13 @@ export interface GatherLauncherTasksDeps {
|
|
|
65
81
|
config: Pick<JinnConfig, 'joinedSolverNets'>;
|
|
66
82
|
creatorAddress: string;
|
|
67
83
|
fetchPostedTasks: (opts: FetchPostedTasksOptions) => Promise<PostedTaskRecord[]> | PostedTaskRecord[];
|
|
84
|
+
/**
|
|
85
|
+
* Optional on-chain status fetcher (#579), keyed by SolverNet manifest CID.
|
|
86
|
+
* Optional so existing call-sites/tests compile and degrade to 'unknown'.
|
|
87
|
+
* Each call is wrapped in try/catch by the gatherer — a throw yields the
|
|
88
|
+
* graceful all-'unknown' default rather than failing the whole response.
|
|
89
|
+
*/
|
|
90
|
+
fetchTaskStatuses?: (manifestCid: string) => Promise<Map<string, TaskStatusSnapshot>>;
|
|
68
91
|
now?: () => number;
|
|
69
92
|
}
|
|
70
93
|
export interface GatherLauncherTasksOptions {
|
|
@@ -72,5 +95,29 @@ export interface GatherLauncherTasksOptions {
|
|
|
72
95
|
limit?: number;
|
|
73
96
|
/** ISO-8601 timestamp; filter to rows with `postedAt < before`. */
|
|
74
97
|
before?: string;
|
|
98
|
+
/**
|
|
99
|
+
* Optional launched-record manifest CID. When present, on-chain statuses are
|
|
100
|
+
* fetched only for this SolverNet, even if the launcher has not joined it.
|
|
101
|
+
*/
|
|
102
|
+
manifestCid?: string;
|
|
75
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Derive the on-chain status chip (#579) from a task's finalization snapshot.
|
|
106
|
+
*
|
|
107
|
+
* - `undefined` snapshot → 'unknown' (no on-chain data; the safe default — we
|
|
108
|
+
* never guess 'open').
|
|
109
|
+
* - `finalized === true` → 'finalized'.
|
|
110
|
+
* - `refunded === true` → 'finalized': a refunded task is on-chain-closed (the
|
|
111
|
+
* creator reclaimed budget), so it is terminal just like a finalized one. We
|
|
112
|
+
* collapse both into the 'finalized' chip rather than adding a 'refunded'
|
|
113
|
+
* tone — the launcher table only distinguishes open / closed / expired.
|
|
114
|
+
* - missing/invalid `claimWindowEnd` → 'unknown' (the indexer cannot prove
|
|
115
|
+
* that claims are still open).
|
|
116
|
+
* - not finalized, `now > claimWindowEnd` → 'expired'. Exact equality remains
|
|
117
|
+
* open, matching `TaskCoordinator.claimTask`.
|
|
118
|
+
* - otherwise → 'open'.
|
|
119
|
+
*
|
|
120
|
+
* `nowSeconds` is unix seconds, matching the indexer's `claimWindowEnd`.
|
|
121
|
+
*/
|
|
122
|
+
export declare function deriveOnchainStatus(snapshot: TaskStatusSnapshot | undefined, nowSeconds: number): TaskOnchainStatus;
|
|
76
123
|
export declare function gatherLauncherTasks(deps: GatherLauncherTasksDeps, opts?: GatherLauncherTasksOptions): Promise<LauncherTasksResponse>;
|
|
@@ -65,7 +65,66 @@ function buildSolverTypeToNetIndex(joinedSolverNets) {
|
|
|
65
65
|
}
|
|
66
66
|
return index;
|
|
67
67
|
}
|
|
68
|
-
function
|
|
68
|
+
function normalizeManifestCid(raw) {
|
|
69
|
+
const trimmed = raw?.trim();
|
|
70
|
+
return trimmed ? trimmed : undefined;
|
|
71
|
+
}
|
|
72
|
+
function statusLookupManifestCids(joinedSolverNets, launchedManifestCid, records) {
|
|
73
|
+
const scopedCid = normalizeManifestCid(launchedManifestCid);
|
|
74
|
+
if (scopedCid)
|
|
75
|
+
return [scopedCid];
|
|
76
|
+
const solverTypes = new Set(records.map((record) => record.solverType).filter(Boolean));
|
|
77
|
+
if (solverTypes.size > 0) {
|
|
78
|
+
const cids = new Set();
|
|
79
|
+
for (const [cid, joined] of Object.entries(joinedSolverNets ?? {})) {
|
|
80
|
+
const solverType = solverTypeFromJoinedContract(joined);
|
|
81
|
+
if (!solverType || !solverTypes.has(solverType))
|
|
82
|
+
continue;
|
|
83
|
+
const normalized = normalizeManifestCid(joined.manifestCid) ?? normalizeManifestCid(cid);
|
|
84
|
+
if (normalized)
|
|
85
|
+
cids.add(normalized);
|
|
86
|
+
}
|
|
87
|
+
return [...cids];
|
|
88
|
+
}
|
|
89
|
+
const cids = new Set();
|
|
90
|
+
for (const [cid, joined] of Object.entries(joinedSolverNets ?? {})) {
|
|
91
|
+
const normalized = normalizeManifestCid(joined.manifestCid) ?? normalizeManifestCid(cid);
|
|
92
|
+
if (normalized)
|
|
93
|
+
cids.add(normalized);
|
|
94
|
+
}
|
|
95
|
+
return [...cids];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Derive the on-chain status chip (#579) from a task's finalization snapshot.
|
|
99
|
+
*
|
|
100
|
+
* - `undefined` snapshot → 'unknown' (no on-chain data; the safe default — we
|
|
101
|
+
* never guess 'open').
|
|
102
|
+
* - `finalized === true` → 'finalized'.
|
|
103
|
+
* - `refunded === true` → 'finalized': a refunded task is on-chain-closed (the
|
|
104
|
+
* creator reclaimed budget), so it is terminal just like a finalized one. We
|
|
105
|
+
* collapse both into the 'finalized' chip rather than adding a 'refunded'
|
|
106
|
+
* tone — the launcher table only distinguishes open / closed / expired.
|
|
107
|
+
* - missing/invalid `claimWindowEnd` → 'unknown' (the indexer cannot prove
|
|
108
|
+
* that claims are still open).
|
|
109
|
+
* - not finalized, `now > claimWindowEnd` → 'expired'. Exact equality remains
|
|
110
|
+
* open, matching `TaskCoordinator.claimTask`.
|
|
111
|
+
* - otherwise → 'open'.
|
|
112
|
+
*
|
|
113
|
+
* `nowSeconds` is unix seconds, matching the indexer's `claimWindowEnd`.
|
|
114
|
+
*/
|
|
115
|
+
export function deriveOnchainStatus(snapshot, nowSeconds) {
|
|
116
|
+
if (!snapshot)
|
|
117
|
+
return 'unknown';
|
|
118
|
+
if (snapshot.finalized || snapshot.refunded)
|
|
119
|
+
return 'finalized';
|
|
120
|
+
if (typeof snapshot.claimWindowEnd !== 'number' || !Number.isFinite(snapshot.claimWindowEnd)) {
|
|
121
|
+
return 'unknown';
|
|
122
|
+
}
|
|
123
|
+
if (nowSeconds > snapshot.claimWindowEnd)
|
|
124
|
+
return 'expired';
|
|
125
|
+
return 'open';
|
|
126
|
+
}
|
|
127
|
+
function mapRecordToEntry(record, solverTypeIndex, statusMap, nowSeconds) {
|
|
69
128
|
const solverNet = record.solverNet
|
|
70
129
|
?? (record.solverType ? solverTypeIndex.get(record.solverType) : undefined)
|
|
71
130
|
?? 'unknown';
|
|
@@ -80,6 +139,10 @@ function mapRecordToEntry(record, solverTypeIndex) {
|
|
|
80
139
|
...(record.solverType ? { solverType: record.solverType } : {}),
|
|
81
140
|
postedAt: record.postedAt,
|
|
82
141
|
state: record.state ?? 'open',
|
|
142
|
+
onchainStatus: deriveOnchainStatus(
|
|
143
|
+
// The status map is keyed by the on-chain decimal taskId; prefer it. Fall
|
|
144
|
+
// back to the off-chain display id for older/test rows lacking it (#579).
|
|
145
|
+
statusMap.get(record.protocolTaskId ?? record.taskId), nowSeconds),
|
|
83
146
|
claims: { current: claimsCurrent, max: claimsMax },
|
|
84
147
|
budget: { totalWei, remainingWei },
|
|
85
148
|
};
|
|
@@ -113,12 +176,34 @@ export async function gatherLauncherTasks(deps, opts = {}) {
|
|
|
113
176
|
return 1;
|
|
114
177
|
return 0;
|
|
115
178
|
});
|
|
179
|
+
const pageRecords = sorted.slice(0, limit);
|
|
116
180
|
const solverTypeIndex = buildSolverTypeToNetIndex(deps.config.joinedSolverNets);
|
|
117
|
-
|
|
181
|
+
// Build a merged on-chain status map keyed by taskId. The launched-SolverNet
|
|
182
|
+
// page scopes this to its manifest CID; the generic fallback only checks
|
|
183
|
+
// joined SolverNets matching the current page's solver types to avoid
|
|
184
|
+
// unbounded dashboard-poll fanout. Each call is guarded so the store-only /
|
|
185
|
+
// offline / indexer-outage path degrades to all-'unknown' (#579).
|
|
186
|
+
const generatedAtMs = deps.now?.() ?? Date.now();
|
|
187
|
+
const nowSeconds = Math.floor(generatedAtMs / 1000);
|
|
188
|
+
const statusMap = new Map();
|
|
189
|
+
const fetchTaskStatuses = deps.fetchTaskStatuses;
|
|
190
|
+
if (fetchTaskStatuses) {
|
|
191
|
+
for (const cid of statusLookupManifestCids(deps.config.joinedSolverNets, opts.manifestCid, pageRecords)) {
|
|
192
|
+
try {
|
|
193
|
+
const snapshots = await fetchTaskStatuses(cid);
|
|
194
|
+
for (const [taskId, snapshot] of snapshots)
|
|
195
|
+
statusMap.set(taskId, snapshot);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// Tolerant: skip this SolverNet's statuses; its tasks render 'unknown'.
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const tasks = pageRecords
|
|
203
|
+
.map((record) => mapRecordToEntry(record, solverTypeIndex, statusMap, nowSeconds));
|
|
118
204
|
const cursor = tasks.length === limit && tasks.length > 0
|
|
119
205
|
? { before: tasks[tasks.length - 1].postedAt }
|
|
120
206
|
: undefined;
|
|
121
|
-
const generatedAtMs = deps.now?.() ?? Date.now();
|
|
122
207
|
const response = {
|
|
123
208
|
schemaVersion: 1,
|
|
124
209
|
generatedAt: new Date(generatedAtMs).toISOString(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher-tasks.js","sourceRoot":"","sources":["../../src/api/launcher-tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"launcher-tasks.js","sourceRoot":"","sources":["../../src/api/launcher-tasks.ts"],"names":[],"mappings":"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"}
|