@harnesskit/opencode 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 ADDED
@@ -0,0 +1,40 @@
1
+ # HarnessKit OpenCode Plugin
2
+
3
+ Capture OpenCode sessions and send telemetry to HarnessKit.
4
+
5
+ ## Install (OpenCode config)
6
+
7
+ Add the plugin to your OpenCode config (`~/.config/opencode/opencode.json` or project `opencode.json`):
8
+
9
+ ```json
10
+ {
11
+ "$schema": "https://opencode.ai/config.json",
12
+ "plugin": ["@harnesskit/opencode"]
13
+ }
14
+ ```
15
+
16
+ ## Configure HarnessKit
17
+
18
+ Set HarnessKit credentials via `~/.harnesskit/config.json`:
19
+
20
+ ```json
21
+ {
22
+ "apiUrl": "https://api.harnesskit.io",
23
+ "apiKey": "<YOUR_API_KEY>",
24
+ "projectId": "<YOUR_PROJECT_ID>",
25
+ "toolSource": "opencode"
26
+ }
27
+ ```
28
+
29
+ Or set environment variables (highest priority):
30
+
31
+ ```bash
32
+ export HARNESSKIT_API_URL=https://api.harnesskit.io
33
+ export HARNESSKIT_API_KEY=...
34
+ export HARNESSKIT_PROJECT_ID=...
35
+ ```
36
+
37
+ ## Notes
38
+
39
+ - The plugin listens to OpenCode events and posts sessions + actions to HarnessKit.
40
+ - If OpenCode is offline, the collector buffer handles retries.
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from '@opencode-ai/plugin';
2
+ export declare const HarnessKitPlugin: Plugin;
3
+ export default HarnessKitPlugin;
package/dist/index.js ADDED
@@ -0,0 +1,550 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { homedir } from 'node:os';
4
+ import { resolve } from 'node:path';
5
+ import { ingestionEventSchema } from '@harnesskit/shared';
6
+ const defaultConfigPath = () => resolve(homedir(), '.harnesskit', 'config.json');
7
+ const loadConfig = async () => {
8
+ try {
9
+ const raw = await readFile(defaultConfigPath(), 'utf8');
10
+ return JSON.parse(raw);
11
+ }
12
+ catch {
13
+ return {};
14
+ }
15
+ };
16
+ const resolveConfig = async () => {
17
+ const config = await loadConfig();
18
+ const parseNumber = (value) => {
19
+ if (!value)
20
+ return undefined;
21
+ const parsed = Number(value);
22
+ return Number.isFinite(parsed) ? parsed : undefined;
23
+ };
24
+ return {
25
+ apiUrl: process.env.HARNESSKIT_API_URL ?? config.apiUrl,
26
+ apiKey: process.env.HARNESSKIT_API_KEY ?? config.apiKey,
27
+ projectId: process.env.HARNESSKIT_PROJECT_ID ?? config.projectId,
28
+ toolSource: process.env.HARNESSKIT_TOOL_SOURCE ?? config.toolSource ?? 'opencode',
29
+ version: process.env.HARNESSKIT_VERSION ?? config.version ?? 'v1',
30
+ bufferPath: process.env.HARNESSKIT_BUFFER_PATH ?? config.bufferPath,
31
+ maxRetries: parseNumber(process.env.HARNESSKIT_MAX_RETRIES) ?? config.maxRetries,
32
+ retryBaseMs: parseNumber(process.env.HARNESSKIT_RETRY_BASE_MS) ?? config.retryBaseMs,
33
+ retryMaxMs: parseNumber(process.env.HARNESSKIT_RETRY_MAX_MS) ?? config.retryMaxMs,
34
+ };
35
+ };
36
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
37
+ const toUuid = (hex) => `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;
38
+ const normalizeUuid = (value) => {
39
+ if (uuidRegex.test(value)) {
40
+ return value;
41
+ }
42
+ const hash = createHash('sha256').update(value, 'utf8').digest('hex');
43
+ return toUuid(hash);
44
+ };
45
+ const normalizeActionId = (sessionId, rawId) => {
46
+ if (rawId) {
47
+ return normalizeUuid(`${sessionId}:${rawId}`);
48
+ }
49
+ return randomUUID();
50
+ };
51
+ const toIso = (value) => value ? new Date(value).toISOString() : new Date().toISOString();
52
+ const readString = (value) => (typeof value === 'string' ? value : undefined);
53
+ const readNumber = (value) => typeof value === 'number' && Number.isFinite(value) ? value : undefined;
54
+ const readRecord = (value) => value && typeof value === 'object' ? value : null;
55
+ const mapToolToActionType = (tool) => {
56
+ if (!tool)
57
+ return 'tool_call';
58
+ switch (tool.toLowerCase()) {
59
+ case 'write':
60
+ case 'edit':
61
+ case 'multiedit':
62
+ return 'file_edit';
63
+ default:
64
+ return 'tool_call';
65
+ }
66
+ };
67
+ const mapToolToFileOp = (tool) => {
68
+ if (!tool)
69
+ return undefined;
70
+ switch (tool.toLowerCase()) {
71
+ case 'read':
72
+ return 'read';
73
+ case 'write':
74
+ return 'write';
75
+ case 'edit':
76
+ case 'multiedit':
77
+ return 'edit';
78
+ case 'delete':
79
+ return 'delete';
80
+ default:
81
+ return undefined;
82
+ }
83
+ };
84
+ const createState = () => ({
85
+ seq: 0,
86
+ inputTokens: 0,
87
+ outputTokens: 0,
88
+ costUsd: 0,
89
+ started: false,
90
+ ended: false,
91
+ status: 'unknown',
92
+ completedMessages: new Set(),
93
+ completedTools: new Set(),
94
+ });
95
+ const readErrorMessage = (value) => {
96
+ const error = readRecord(value);
97
+ const data = readRecord(error?.data);
98
+ return readString(data?.['message']);
99
+ };
100
+ export const HarnessKitPlugin = async (ctx) => {
101
+ const { client } = ctx;
102
+ const config = await resolveConfig();
103
+ const errors = [];
104
+ if (!config.apiUrl)
105
+ errors.push('HARNESSKIT_API_URL is missing.');
106
+ if (!config.apiKey)
107
+ errors.push('HARNESSKIT_API_KEY is missing.');
108
+ if (!config.projectId)
109
+ errors.push('HARNESSKIT_PROJECT_ID is missing.');
110
+ if (errors.length) {
111
+ const message = `HarnessKit disabled: ${errors.join(' ')}`;
112
+ try {
113
+ await client.app.log({
114
+ body: { service: 'harnesskit', level: 'warn', message },
115
+ });
116
+ }
117
+ catch {
118
+ // ignore logging errors
119
+ }
120
+ return {};
121
+ }
122
+ const options = {
123
+ apiUrl: config.apiUrl,
124
+ apiKey: config.apiKey,
125
+ projectId: config.projectId,
126
+ toolSource: (config.toolSource ?? 'opencode'),
127
+ version: config.version ?? 'v1',
128
+ maxRetries: config.maxRetries,
129
+ retryBaseMs: config.retryBaseMs,
130
+ retryMaxMs: config.retryMaxMs,
131
+ };
132
+ const sessionTypes = new Set(['session_start', 'session_end']);
133
+ const actionTypes = new Set(['action', 'error']);
134
+ const validateEvents = (batch) => {
135
+ const events = [];
136
+ const errors = [];
137
+ batch.forEach((event, index) => {
138
+ const parsed = ingestionEventSchema.safeParse(event);
139
+ if (!parsed.success) {
140
+ errors.push(`Event ${index}: ${parsed.error.issues[0]?.message ?? 'Invalid event.'}`);
141
+ return;
142
+ }
143
+ events.push(parsed.data);
144
+ });
145
+ return { events, errors };
146
+ };
147
+ const postBatch = async (endpoint, events) => {
148
+ const response = await fetch(`${options.apiUrl}${endpoint}`, {
149
+ method: 'POST',
150
+ headers: {
151
+ 'Content-Type': 'application/json',
152
+ Authorization: `Bearer ${options.apiKey}`,
153
+ },
154
+ body: JSON.stringify(events),
155
+ });
156
+ if (!response.ok) {
157
+ const text = await response.text();
158
+ throw new Error(`Request failed (${response.status}): ${text}`);
159
+ }
160
+ };
161
+ const postBatchWithRetry = async (endpoint, events) => {
162
+ const maxRetries = options.maxRetries ?? 3;
163
+ const retryBaseMs = options.retryBaseMs ?? 500;
164
+ const retryMaxMs = options.retryMaxMs ?? 5_000;
165
+ let attempt = 0;
166
+ while (true) {
167
+ try {
168
+ await postBatch(endpoint, events);
169
+ return;
170
+ }
171
+ catch (error) {
172
+ if (attempt >= maxRetries) {
173
+ throw error;
174
+ }
175
+ const backoff = Math.min(retryBaseMs * 2 ** attempt, retryMaxMs);
176
+ const jitter = Math.floor(Math.random() * Math.max(1, Math.floor(backoff * 0.2)));
177
+ await new Promise((resolve) => setTimeout(resolve, backoff + jitter));
178
+ attempt += 1;
179
+ }
180
+ }
181
+ };
182
+ const sendBatch = async (batch) => {
183
+ const { events, errors: validationErrors } = validateEvents(batch);
184
+ if (validationErrors.length) {
185
+ const message = validationErrors.join(' ');
186
+ try {
187
+ await client.app.log({
188
+ body: { service: 'harnesskit', level: 'warn', message },
189
+ });
190
+ }
191
+ catch {
192
+ // ignore
193
+ }
194
+ }
195
+ const sessions = events.filter((event) => sessionTypes.has(event.event_type));
196
+ const actions = events.filter((event) => actionTypes.has(event.event_type));
197
+ if (sessions.length) {
198
+ await postBatchWithRetry('/sessions', sessions);
199
+ }
200
+ if (actions.length) {
201
+ await postBatchWithRetry('/actions', actions);
202
+ }
203
+ };
204
+ const sessionMap = new Map();
205
+ const pendingEvents = [];
206
+ let flushTimer = null;
207
+ let flushing = false;
208
+ const getState = (sessionId) => {
209
+ const existing = sessionMap.get(sessionId);
210
+ if (existing)
211
+ return existing;
212
+ const created = createState();
213
+ sessionMap.set(sessionId, created);
214
+ return created;
215
+ };
216
+ const nextSeq = (sessionId) => {
217
+ const state = getState(sessionId);
218
+ state.seq += 1;
219
+ return state.seq;
220
+ };
221
+ const enqueue = (event) => {
222
+ pendingEvents.push(event);
223
+ if (pendingEvents.length >= 50) {
224
+ void flush();
225
+ return;
226
+ }
227
+ if (!flushTimer) {
228
+ flushTimer = setTimeout(() => {
229
+ void flush();
230
+ }, 1000);
231
+ }
232
+ };
233
+ const flush = async () => {
234
+ if (flushing)
235
+ return;
236
+ if (flushTimer) {
237
+ clearTimeout(flushTimer);
238
+ flushTimer = null;
239
+ }
240
+ if (!pendingEvents.length)
241
+ return;
242
+ flushing = true;
243
+ const batch = pendingEvents.splice(0, pendingEvents.length);
244
+ try {
245
+ await sendBatch(batch);
246
+ }
247
+ catch (error) {
248
+ const message = error instanceof Error ? error.message : 'Unknown error.';
249
+ try {
250
+ await client.app.log({
251
+ body: { service: 'harnesskit', level: 'error', message },
252
+ });
253
+ }
254
+ catch {
255
+ // ignore
256
+ }
257
+ }
258
+ finally {
259
+ flushing = false;
260
+ }
261
+ };
262
+ const emitSessionStart = (sessionId, startedAt) => {
263
+ const state = getState(sessionId);
264
+ if (state.started)
265
+ return;
266
+ state.started = true;
267
+ enqueue({
268
+ version: options.version ?? 'v1',
269
+ project_id: options.projectId ?? '',
270
+ session_id: sessionId,
271
+ tool_source: options.toolSource ?? 'opencode',
272
+ timestamp: toIso(startedAt),
273
+ event_type: 'session_start',
274
+ payload: {
275
+ started_at: toIso(startedAt),
276
+ },
277
+ });
278
+ };
279
+ const emitSessionEnd = (sessionId, endedAt) => {
280
+ const state = getState(sessionId);
281
+ if (state.ended)
282
+ return;
283
+ state.ended = true;
284
+ enqueue({
285
+ version: options.version ?? 'v1',
286
+ project_id: options.projectId ?? '',
287
+ session_id: sessionId,
288
+ tool_source: options.toolSource ?? 'opencode',
289
+ timestamp: toIso(endedAt),
290
+ event_type: 'session_end',
291
+ payload: {
292
+ ended_at: toIso(endedAt),
293
+ status: state.status === 'unknown' ? 'success' : state.status,
294
+ outcome_reason: state.outcomeReason,
295
+ input_tokens: state.inputTokens || undefined,
296
+ output_tokens: state.outputTokens || undefined,
297
+ cost_usd: state.costUsd || undefined,
298
+ cost_estimated: false,
299
+ },
300
+ });
301
+ };
302
+ const handleMessageUpdated = (event) => {
303
+ const info = readRecord(event.properties.info);
304
+ if (!info)
305
+ return;
306
+ const role = readString(info.role);
307
+ if (role !== 'assistant')
308
+ return;
309
+ const sessionIdRaw = readString(info.sessionID);
310
+ if (!sessionIdRaw)
311
+ return;
312
+ const sessionId = normalizeUuid(sessionIdRaw);
313
+ const messageIdRaw = readString(info.id) ?? '';
314
+ const state = getState(sessionId);
315
+ const time = readRecord(info.time);
316
+ const created = readNumber(time?.created);
317
+ const completed = readNumber(time?.completed);
318
+ emitSessionStart(sessionId, created);
319
+ const messageKey = `${sessionId}:${messageIdRaw}`;
320
+ if (completed && !state.completedMessages.has(messageKey)) {
321
+ state.completedMessages.add(messageKey);
322
+ const tokens = readRecord(info.tokens);
323
+ const inputTokens = readNumber(tokens?.input) ?? 0;
324
+ const outputTokens = readNumber(tokens?.output) ?? 0;
325
+ state.inputTokens += inputTokens;
326
+ state.outputTokens += outputTokens;
327
+ const cost = readNumber(info.cost) ?? 0;
328
+ state.costUsd += cost;
329
+ const provider = readString(info.providerID) ?? 'opencode';
330
+ const model = readString(info.modelID) ?? 'unknown';
331
+ const actionId = normalizeActionId(sessionId, messageIdRaw);
332
+ const status = info.error ? 'error' : 'success';
333
+ enqueue({
334
+ version: options.version ?? 'v1',
335
+ project_id: options.projectId ?? '',
336
+ session_id: sessionId,
337
+ tool_source: options.toolSource ?? 'opencode',
338
+ timestamp: toIso(completed ?? created),
339
+ event_type: 'action',
340
+ payload: {
341
+ id: actionId,
342
+ seq: nextSeq(sessionId),
343
+ type: 'llm_call',
344
+ name: `${provider}/${model}`,
345
+ status,
346
+ started_at: toIso(created),
347
+ ended_at: completed ? toIso(completed) : undefined,
348
+ input_tokens: inputTokens || undefined,
349
+ output_tokens: outputTokens || undefined,
350
+ cost_usd: cost || undefined,
351
+ cost_estimated: false,
352
+ error_message: info.error ? (readErrorMessage(info.error) ?? undefined) : undefined,
353
+ },
354
+ });
355
+ if (info.error) {
356
+ state.status = 'failed';
357
+ state.outcomeReason = readString(info.error?.name) ?? 'error';
358
+ }
359
+ else if (state.status === 'unknown') {
360
+ state.status = 'success';
361
+ }
362
+ }
363
+ };
364
+ const handleToolPartUpdated = (event) => {
365
+ const part = readRecord(event.properties.part);
366
+ if (!part)
367
+ return;
368
+ if (readString(part.type) !== 'tool')
369
+ return;
370
+ const sessionIdRaw = readString(part.sessionID);
371
+ if (!sessionIdRaw)
372
+ return;
373
+ const sessionId = normalizeUuid(sessionIdRaw);
374
+ emitSessionStart(sessionId);
375
+ const callId = readString(part.callID) ?? randomUUID();
376
+ const toolName = readString(part.tool) ?? 'tool_call';
377
+ const stateInfo = readRecord(part.state);
378
+ if (!stateInfo)
379
+ return;
380
+ const status = readString(stateInfo.status);
381
+ if (status !== 'completed' && status !== 'error')
382
+ return;
383
+ const actionKey = `${sessionId}:${callId}`;
384
+ const sessionState = getState(sessionId);
385
+ if (sessionState.completedTools.has(actionKey)) {
386
+ return;
387
+ }
388
+ sessionState.completedTools.add(actionKey);
389
+ const time = readRecord(stateInfo.time);
390
+ const startedAt = readNumber(time?.start);
391
+ const endedAt = readNumber(time?.end);
392
+ const input = readRecord(stateInfo.input);
393
+ const output = readString(stateInfo.output);
394
+ const errorMessage = readString(stateInfo.error);
395
+ const filePath = readString(input?.file_path) ?? readString(input?.filePath);
396
+ const fileOp = mapToolToFileOp(toolName);
397
+ enqueue({
398
+ version: options.version ?? 'v1',
399
+ project_id: options.projectId ?? '',
400
+ session_id: sessionId,
401
+ tool_source: options.toolSource ?? 'opencode',
402
+ timestamp: toIso(endedAt ?? startedAt),
403
+ event_type: 'action',
404
+ payload: {
405
+ id: normalizeActionId(sessionId, callId),
406
+ seq: nextSeq(sessionId),
407
+ type: mapToolToActionType(toolName),
408
+ name: toolName,
409
+ status: status === 'error' ? 'error' : 'success',
410
+ started_at: toIso(startedAt),
411
+ ended_at: endedAt ? toIso(endedAt) : undefined,
412
+ request_payload: input ?? undefined,
413
+ response_payload: output ?? undefined,
414
+ error_code: status === 'error' ? 'tool_error' : undefined,
415
+ error_message: status === 'error' ? (errorMessage ?? 'Tool failed.') : undefined,
416
+ file_path: filePath ?? undefined,
417
+ file_op: fileOp,
418
+ cost_estimated: true,
419
+ },
420
+ });
421
+ };
422
+ const handleFileEdited = (event) => {
423
+ const file = readString(event.properties.file);
424
+ const sessionIdRaw = readString(event.properties.sessionID);
425
+ if (!file || !sessionIdRaw)
426
+ return;
427
+ const sessionId = normalizeUuid(sessionIdRaw);
428
+ emitSessionStart(sessionId);
429
+ enqueue({
430
+ version: options.version ?? 'v1',
431
+ project_id: options.projectId ?? '',
432
+ session_id: sessionId,
433
+ tool_source: options.toolSource ?? 'opencode',
434
+ timestamp: toIso(),
435
+ event_type: 'action',
436
+ payload: {
437
+ id: normalizeActionId(sessionId, `file:${file}`),
438
+ seq: nextSeq(sessionId),
439
+ type: 'file_edit',
440
+ name: 'file.edited',
441
+ status: 'success',
442
+ started_at: toIso(),
443
+ file_path: file,
444
+ file_op: 'edit',
445
+ },
446
+ });
447
+ };
448
+ const handleCommandExecuted = (event) => {
449
+ const sessionIdRaw = readString(event.properties.sessionID);
450
+ if (!sessionIdRaw)
451
+ return;
452
+ const sessionId = normalizeUuid(sessionIdRaw);
453
+ emitSessionStart(sessionId);
454
+ const name = readString(event.properties.name) ?? 'command';
455
+ const args = readString(event.properties.arguments);
456
+ enqueue({
457
+ version: options.version ?? 'v1',
458
+ project_id: options.projectId ?? '',
459
+ session_id: sessionId,
460
+ tool_source: options.toolSource ?? 'opencode',
461
+ timestamp: toIso(),
462
+ event_type: 'action',
463
+ payload: {
464
+ id: normalizeActionId(sessionId, `command:${name}:${args ?? ''}`),
465
+ seq: nextSeq(sessionId),
466
+ type: 'system',
467
+ name: `command:${name}`,
468
+ status: 'success',
469
+ started_at: toIso(),
470
+ request_payload: args ? { args } : undefined,
471
+ },
472
+ });
473
+ };
474
+ const handleSessionCreated = (event) => {
475
+ const info = readRecord(event.properties.info);
476
+ if (!info)
477
+ return;
478
+ const sessionIdRaw = readString(info.id);
479
+ if (!sessionIdRaw)
480
+ return;
481
+ const sessionId = normalizeUuid(sessionIdRaw);
482
+ const time = readRecord(info.time);
483
+ const created = readNumber(time?.created);
484
+ emitSessionStart(sessionId, created);
485
+ };
486
+ const handleSessionIdle = (event) => {
487
+ const sessionIdRaw = readString(event.properties.sessionID);
488
+ if (!sessionIdRaw)
489
+ return;
490
+ const sessionId = normalizeUuid(sessionIdRaw);
491
+ emitSessionEnd(sessionId);
492
+ };
493
+ const handleSessionError = (event) => {
494
+ const sessionIdRaw = readString(event.properties.sessionID);
495
+ if (!sessionIdRaw)
496
+ return;
497
+ const sessionId = normalizeUuid(sessionIdRaw);
498
+ const state = getState(sessionId);
499
+ state.status = 'failed';
500
+ const error = readRecord(event.properties.error);
501
+ const errorName = readString(error?.name) ?? 'session_error';
502
+ const errorData = readRecord(error?.data);
503
+ const errorMessage = readString(errorData?.message) ?? 'Session error.';
504
+ enqueue({
505
+ version: options.version ?? 'v1',
506
+ project_id: options.projectId ?? '',
507
+ session_id: sessionId,
508
+ tool_source: options.toolSource ?? 'opencode',
509
+ timestamp: toIso(),
510
+ event_type: 'error',
511
+ payload: {
512
+ error_code: errorName,
513
+ error_message: errorMessage,
514
+ severity: 'error',
515
+ },
516
+ });
517
+ state.outcomeReason = errorName;
518
+ };
519
+ return {
520
+ event: async ({ event }) => {
521
+ switch (event.type) {
522
+ case 'session.created':
523
+ handleSessionCreated(event);
524
+ break;
525
+ case 'session.idle':
526
+ handleSessionIdle(event);
527
+ break;
528
+ case 'session.error':
529
+ handleSessionError(event);
530
+ break;
531
+ case 'message.updated':
532
+ handleMessageUpdated(event);
533
+ break;
534
+ case 'message.part.updated':
535
+ handleToolPartUpdated(event);
536
+ break;
537
+ case 'file.edited':
538
+ handleFileEdited(event);
539
+ break;
540
+ case 'command.executed':
541
+ handleCommandExecuted(event);
542
+ break;
543
+ default:
544
+ break;
545
+ }
546
+ },
547
+ };
548
+ };
549
+ export default HarnessKitPlugin;
550
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@harnesskit/opencode",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "default": "./dist/index.js"
10
+ }
11
+ },
12
+ "main": "dist/index.js",
13
+ "types": "dist/index.d.ts",
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "dependencies": {
21
+ "@opencode-ai/plugin": "^0.8.0",
22
+ "@harnesskit/shared": "^0.1.0"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^20.11.30"
26
+ },
27
+ "scripts": {
28
+ "build": "tsc -p tsconfig.build.json",
29
+ "lint": "eslint \"src/**/*.{ts,tsx}\"",
30
+ "typecheck": "tsc -p tsconfig.json --noEmit",
31
+ "test": "node -e \"\""
32
+ }
33
+ }