inspeffct 1.0.4 → 1.0.5

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.
Files changed (2) hide show
  1. package/dist/bin.js +179 -63
  2. package/package.json +1 -1
package/dist/bin.js CHANGED
@@ -2,8 +2,8 @@
2
2
  import * as NodeRuntime from '@effect/platform-node/NodeRuntime';
3
3
  import * as NodeServices from '@effect/platform-node/NodeServices';
4
4
  import * as Effect10 from 'effect/Effect';
5
- import * as Command5 from 'effect/unstable/cli/Command';
6
- import * as Argument2 from 'effect/unstable/cli/Argument';
5
+ import * as Command6 from 'effect/unstable/cli/Command';
6
+ import * as Argument3 from 'effect/unstable/cli/Argument';
7
7
  import * as Context4 from 'effect/Context';
8
8
  import * as Fiber from 'effect/Fiber';
9
9
  import * as FileSystem from 'effect/FileSystem';
@@ -332,9 +332,9 @@ var randomUUID = Effect10.gen(function* () {
332
332
  hex.slice(10, 16).join("")
333
333
  ].join("-");
334
334
  });
335
- var ExecutionId = class extends Context4.Service()("inspeffct/ExecutionId") {
335
+ var RunId = class extends Context4.Service()("inspeffct/RunId") {
336
336
  };
337
- var layer3 = Layer8.effect(ExecutionId, randomUUID);
337
+ var layer3 = Layer8.effect(RunId, randomUUID);
338
338
  var isSchema = (u) => typeof u === "object" && u !== null && "ast" in u;
339
339
  var getMembers = (schema) => "members" in schema && Array.isArray(schema.members) ? schema.members : "cases" in schema ? Object.values(schema.cases) : [schema];
340
340
  var evolveNested = (schema, evolve2) => {
@@ -516,13 +516,13 @@ var create_otel_tables_default = Effect10.gen(function* () {
516
516
  });
517
517
  var create_span_exits_table_default = Effect10.void;
518
518
  var simplify_span_exits_default = Effect10.void;
519
- var add_execution_id_default = Effect10.gen(function* () {
519
+ var add_run_id_default = Effect10.gen(function* () {
520
520
  const sql = yield* SqlClient5.SqlClient;
521
- yield* sql`ALTER TABLE spans ADD COLUMN execution_id TEXT NOT NULL DEFAULT ''`.pipe(
522
- Effect10.withSpan("add_spans_execution_id")
521
+ yield* sql`ALTER TABLE spans ADD COLUMN run_id TEXT NOT NULL DEFAULT ''`.pipe(
522
+ Effect10.withSpan("add_spans_run_id")
523
523
  );
524
- yield* sql`CREATE INDEX idx_spans_execution_id ON spans(execution_id)`.pipe(
525
- Effect10.withSpan("create_idx_spans_execution_id")
524
+ yield* sql`CREATE INDEX idx_spans_run_id ON spans(run_id)`.pipe(
525
+ Effect10.withSpan("create_idx_spans_run_id")
526
526
  );
527
527
  });
528
528
 
@@ -594,7 +594,7 @@ var DbExternalSpan = ExternalSpan.pipe(
594
594
  );
595
595
  var DbAnySpan = Schema.Union([DbSpan, DbExternalSpan]);
596
596
  var TraceSummary = Schema.Struct({
597
- execution_id: Schema.String,
597
+ run_id: Schema.String,
598
598
  trace_id: Schema.String,
599
599
  span_count: NumberFromBigInt,
600
600
  root_span_name: Schema.NullOr(Schema.String),
@@ -620,7 +620,7 @@ var MigrationsLoader = Migrator.fromRecord({
620
620
  "0001_create_otel_tables": create_otel_tables_default,
621
621
  "0002_create_span_exits_table": create_span_exits_table_default,
622
622
  "0003_simplify_span_exits": simplify_span_exits_default,
623
- "0004_add_execution_id": add_execution_id_default
623
+ "0004_add_run_id": add_run_id_default
624
624
  });
625
625
  var runMigrations = Migrator.make({})({
626
626
  loader: MigrationsLoader
@@ -630,14 +630,14 @@ var layer5 = (config) => Layer8.effectContext(
630
630
  const sql = yield* SqliteClient.SqliteClient;
631
631
  yield* runMigrations;
632
632
  const storage = Storage.of({
633
- persistSpan: (span, executionId) => Effect10.gen(function* () {
633
+ persistSpan: (span, runId) => Effect10.gen(function* () {
634
634
  const changed = yield* (
635
635
  // @ts-ignore TS28 false positive from SqlSchema service inference
636
636
  SqlSchema.findOne({
637
637
  Request: DbAnySpan,
638
638
  Result: Schema.Struct({ span_id: Schema.String }),
639
639
  execute: (db) => {
640
- const row = { ...db, execution_id: executionId };
640
+ const row = { ...db, run_id: runId };
641
641
  return sql`
642
642
  INSERT INTO spans ${sql.insert(row)}
643
643
  ON CONFLICT(span_id) DO UPDATE SET
@@ -756,22 +756,22 @@ var layer5 = (config) => Layer8.effectContext(
756
756
  }),
757
757
  getTraces: (filters = {}) => SqlSchema.findAll({
758
758
  Request: Schema.Struct({
759
- executionId: Schema.optional(Schema.String),
760
759
  limit: Schema.optional(Schema.Number),
760
+ runId: Schema.optional(Schema.String),
761
761
  since: Schema.optional(Schema.BigInt),
762
762
  status: Schema.optional(Schema.Number)
763
763
  }),
764
764
  Result: TraceSummary,
765
765
  execute: (req) => sql`
766
766
  SELECT
767
- s.execution_id,
767
+ s.run_id,
768
768
  s.trace_id,
769
769
  COUNT(*) as span_count,
770
770
  (
771
771
  SELECT name
772
772
  FROM spans
773
773
  WHERE trace_id = s.trace_id
774
- AND execution_id = s.execution_id
774
+ AND run_id = s.run_id
775
775
  AND parent_span_id IS NULL
776
776
  LIMIT 1
777
777
  ) as root_span_name,
@@ -786,7 +786,7 @@ var layer5 = (config) => Layer8.effectContext(
786
786
  ) as status
787
787
  FROM spans s
788
788
  WHERE ${sql.and([
789
- req.executionId !== void 0 ? sql`s.execution_id = ${req.executionId}` : sql`1=1`,
789
+ req.runId !== void 0 ? sql`s.run_id = ${req.runId}` : sql`1=1`,
790
790
  req.since !== void 0 ? sql`s.start_time >= ${req.since}` : sql`1=1`,
791
791
  req.status !== void 0 ? sql`
792
792
  CASE
@@ -796,7 +796,7 @@ var layer5 = (config) => Layer8.effectContext(
796
796
  END = ${req.status}
797
797
  ` : sql`1=1`
798
798
  ])}
799
- GROUP BY s.execution_id, s.trace_id
799
+ GROUP BY s.run_id, s.trace_id
800
800
  ORDER BY start_time DESC
801
801
  ${req.limit !== void 0 ? sql`LIMIT ${req.limit}` : sql``}
802
802
  `
@@ -807,10 +807,11 @@ var layer5 = (config) => Layer8.effectContext(
807
807
  // @ts-ignore TS28 false positive from SqlSchema service inference
808
808
  SqlSchema.findAll({
809
809
  Request: Schema.Struct({
810
- executionId: Schema.optional(Schema.String),
811
810
  limit: Schema.optional(Schema.Number),
812
811
  minDuration: Schema.optional(Schema.BigInt),
813
812
  name: Schema.optional(Schema.String),
813
+ runId: Schema.optional(Schema.String),
814
+ spanId: Schema.optional(Schema.String),
814
815
  status: Schema.optional(Schema.Number),
815
816
  traceId: Schema.optional(Schema.String)
816
817
  }),
@@ -819,7 +820,8 @@ var layer5 = (config) => Layer8.effectContext(
819
820
  SELECT s.*
820
821
  FROM spans s
821
822
  WHERE ${sql.and([
822
- req.executionId !== void 0 ? sql`s.execution_id = ${req.executionId}` : sql`1=1`,
823
+ req.runId !== void 0 ? sql`s.run_id = ${req.runId}` : sql`1=1`,
824
+ req.spanId !== void 0 ? sql`s.span_id = ${req.spanId}` : sql`1=1`,
823
825
  req.traceId !== void 0 ? sql`s.trace_id = ${req.traceId}` : sql`1=1`,
824
826
  req.name !== void 0 ? req.name.includes("%") ? sql`s.name LIKE ${req.name}` : sql`s.name = ${req.name}` : sql`1=1`,
825
827
  req.minDuration !== void 0 ? sql`(s.end_time - s.start_time) >= ${req.minDuration}` : sql`1=1`,
@@ -849,7 +851,7 @@ var EventCollector = class extends Context4.Service()("inspeffct/EventCollector"
849
851
  var layer6 = Layer8.effect(
850
852
  EventCollector,
851
853
  Effect10.gen(function* () {
852
- const executionId = yield* ExecutionId;
854
+ const runId = yield* RunId;
853
855
  const storage = yield* Storage;
854
856
  return EventCollector.of({
855
857
  collect: (message) => Effect10.gen(function* () {
@@ -863,12 +865,10 @@ var layer6 = Layer8.effect(
863
865
  case "TracerSpanNotification": {
864
866
  const { instrumentationId, span } = message;
865
867
  yield* Effect10.logDebug(`${message._tag} from ${instrumentationId}`);
866
- if (span._tag === "Span" && span.status._tag === "Ended") {
867
- yield* storage.persistSpan(span, executionId);
868
- yield* Effect10.logDebug(
869
- `Persisted span ${span.name} (${span.spanId}) with exit ${span.status.exit._tag} to storage`
870
- );
871
- }
868
+ yield* storage.persistSpan(span, runId);
869
+ yield* Effect10.logDebug(
870
+ `Persisted span (${span.traceId}, ${span.spanId}) to storage`
871
+ );
872
872
  break;
873
873
  }
874
874
  case "TracerSpanEventNotification": {
@@ -1139,16 +1139,16 @@ var buildEnv = (bootloaderPath, ipcPath) => {
1139
1139
  };
1140
1140
  };
1141
1141
  var makeServicesLayer = (dataPath) => {
1142
- const executionIdLayer = layer3;
1142
+ const runIdLayer = layer3;
1143
1143
  const storageLayer = layer5({ filename: dataPath });
1144
1144
  const eventCollectorLayer = layer6.pipe(
1145
- Layer8.provide(executionIdLayer),
1145
+ Layer8.provide(runIdLayer),
1146
1146
  Layer8.provide(storageLayer)
1147
1147
  );
1148
1148
  const bootloaderPathLayer = layer.pipe(Layer8.provide(NodePath.layer));
1149
1149
  return Layer8.mergeAll(
1150
- executionIdLayer,
1151
1150
  layer8,
1151
+ runIdLayer,
1152
1152
  bootloaderPathLayer,
1153
1153
  layer7.pipe(
1154
1154
  Layer8.provide(layer2),
@@ -1163,12 +1163,12 @@ var makeServicesLayer = (dataPath) => {
1163
1163
  var makeReadOnlyLayer = (dataPath) => layer5({ filename: dataPath });
1164
1164
 
1165
1165
  // src/cli/connect.ts
1166
- var command = Command5.make(
1166
+ var command = Command6.make(
1167
1167
  "connect",
1168
1168
  {
1169
1169
  data: dataOption,
1170
- url: Argument2.string("url").pipe(
1171
- Argument2.withDescription("WebSocket URL of the inspector (ws://...)")
1170
+ url: Argument3.string("url").pipe(
1171
+ Argument3.withDescription("WebSocket URL of the inspector (ws://...)")
1172
1172
  )
1173
1173
  },
1174
1174
  ({ data, url }) => Effect10.gen(function* () {
@@ -1182,7 +1182,7 @@ var command = Command5.make(
1182
1182
  Effect10.scoped,
1183
1183
  Effect10.provide(makeServicesLayer(data))
1184
1184
  )
1185
- ).pipe(Command5.withDescription("Connect to an existing inspector endpoint"));
1185
+ ).pipe(Command6.withDescription("Connect to an existing CDP inspector endpoint"));
1186
1186
  var NODE_INSPECTOR_REGEX = /Debugger listening on (ws:\/\/[^\s]+)/;
1187
1187
  var BUN_INSPECTOR_REGEX = /https:\/\/debug\.bun\.sh\/#([^\s]+)/;
1188
1188
  var parseInspectorUrl = (chunk, decoder) => {
@@ -1197,7 +1197,7 @@ var parseInspectorUrl = (chunk, decoder) => {
1197
1197
  }
1198
1198
  return void 0;
1199
1199
  };
1200
- var command2 = Command5.make(
1200
+ var command2 = Command6.make(
1201
1201
  "run",
1202
1202
  {
1203
1203
  data: dataOption,
@@ -1205,17 +1205,17 @@ var command2 = Command5.make(
1205
1205
  Flag3.optional,
1206
1206
  Flag3.withHidden
1207
1207
  ),
1208
- args: Argument2.string("command").pipe(
1209
- Argument2.withDescription("The command to run"),
1210
- Argument2.variadic({ min: 0 })
1208
+ args: Argument3.string("command").pipe(
1209
+ Argument3.withDescription("The command to run"),
1210
+ Argument3.variadic({ min: 0 })
1211
1211
  )
1212
1212
  },
1213
1213
  ({ args, data, encodedCommand }) => Effect10.gen(function* () {
1214
1214
  const resolvedArgs = Option3.isSome(encodedCommand) ? JSON.parse(Buffer.from(encodedCommand.value, "base64url").toString("utf8")) : args;
1215
1215
  const [rawExecutable, ...commandArgs] = resolvedArgs;
1216
1216
  const executable = rawExecutable === "node" ? process.execPath : rawExecutable;
1217
- const executionId = yield* ExecutionId;
1218
- yield* Console2.log(`Execution ID: ${executionId}`);
1217
+ const runId = yield* RunId;
1218
+ yield* Console2.log(`Run ID: ${runId}`);
1219
1219
  yield* Effect10.logDebug(`Running: ${executable} ${commandArgs.join(" ")}`);
1220
1220
  yield* Effect10.logDebug(`Data file: ${data}`);
1221
1221
  const bootloaderPath = yield* getPath;
@@ -1268,7 +1268,7 @@ var command2 = Command5.make(
1268
1268
  Effect10.scoped,
1269
1269
  Effect10.provide(makeServicesLayer(data))
1270
1270
  )
1271
- ).pipe(Command5.withDescription("Run a command with Effect instrumentation"));
1271
+ ).pipe(Command6.withDescription("Run a command with Effect instrumentation"));
1272
1272
  var getSpanId = (span) => span.spanId;
1273
1273
  var getTraceId = (span) => span.traceId;
1274
1274
  var getParentSpanId = (span) => span._tag === "Span" ? span.parentSpanId : null;
@@ -1393,13 +1393,121 @@ var renderSpanGraph = (graph) => {
1393
1393
  return rootDocs.filter((doc) => doc.length > 0).join("\n");
1394
1394
  };
1395
1395
 
1396
- // src/cli/spans.ts
1397
- var command3 = Command5.make(
1396
+ // src/cli/span.ts
1397
+ var attributesToObject = (attributes) => Object.fromEntries(attributes);
1398
+ var command3 = Command6.make(
1399
+ "span",
1400
+ {
1401
+ data: dataOption,
1402
+ json: jsonOption,
1403
+ traceId: Argument3.string("trace-id").pipe(
1404
+ Argument3.withDescription("The trace ID containing the span")
1405
+ ),
1406
+ spanId: Argument3.string("span-id").pipe(
1407
+ Argument3.withDescription("The span ID to display")
1408
+ )
1409
+ },
1410
+ ({ data, json, spanId, traceId }) => Effect10.gen(function* () {
1411
+ const storage = yield* Storage;
1412
+ const spans = yield* storage.getSpans({ spanId, traceId });
1413
+ const span = spans[0];
1414
+ if (span === void 0) {
1415
+ yield* Console2.log(`No span found for trace: ${traceId}, span: ${spanId}`);
1416
+ return;
1417
+ }
1418
+ const events = yield* storage.getSpanEvents({ traceId, spanId });
1419
+ const links = yield* storage.getSpanLinks({ traceId, spanId });
1420
+ const startTime = getStartTime(span);
1421
+ const endTime = getEndTime(span);
1422
+ const durationNanos = endTime !== null ? endTime - startTime : null;
1423
+ if (json) {
1424
+ const output = {
1425
+ span: {
1426
+ spanId: getSpanId(span),
1427
+ traceId: getTraceId(span),
1428
+ parentSpanId: getParentSpanId(span),
1429
+ name: getSpanName(span),
1430
+ kind: getSpanKind(span),
1431
+ statusCode: getStatusCode(span),
1432
+ statusMessage: getStatusMessage(span),
1433
+ startTime: formatTimestamp(startTime),
1434
+ endTime: endTime !== null ? formatTimestamp(endTime) : null,
1435
+ durationMs: durationNanos !== null ? Number(durationNanos / 1000000n) : null,
1436
+ attributes: getAttributes(span),
1437
+ isExternal: isExternalSpan(span)
1438
+ },
1439
+ events: events.map((event) => ({
1440
+ name: event.name,
1441
+ time: formatTimestamp(event.time),
1442
+ attributes: attributesToObject(event.attributes)
1443
+ })),
1444
+ links: links.map((link) => ({
1445
+ linkedSpanId: link.linkedSpanId,
1446
+ linkedTraceId: link.linkedTraceId,
1447
+ attributes: attributesToObject(link.attributes)
1448
+ }))
1449
+ };
1450
+ yield* Console2.log(JSON.stringify(output, null, 2));
1451
+ } else {
1452
+ const fields = [
1453
+ field("Span", getSpanId(span)),
1454
+ field("Name", getSpanName(span)),
1455
+ field("Trace", getTraceId(span)),
1456
+ field("Kind", String(getSpanKind(span))),
1457
+ field("Status", formatStatusDoc(getStatusCode(span))),
1458
+ field("Started", formatTimestamp(startTime)),
1459
+ field("Duration", durationNanos !== null ? formatDuration(durationNanos) : "running")
1460
+ ];
1461
+ const parentSpanId = getParentSpanId(span);
1462
+ if (parentSpanId !== null) {
1463
+ fields.push(field("Parent", parentSpanId));
1464
+ }
1465
+ if (endTime !== null) {
1466
+ fields.push(field("Ended", formatTimestamp(endTime)));
1467
+ }
1468
+ const statusMessage = getStatusMessage(span);
1469
+ if (statusMessage !== null) {
1470
+ fields.push(field("Status Message", statusMessage));
1471
+ }
1472
+ const attrs = getAttributes(span);
1473
+ if (Object.keys(attrs).length > 0) {
1474
+ fields.push(field("Attrs", JSON.stringify(attrs)));
1475
+ }
1476
+ const eventDocs = events.length === 0 ? ["Events: none"] : [
1477
+ `Events (${events.length}):`,
1478
+ ...events.map((event) => {
1479
+ const attrs2 = attributesToObject(event.attributes);
1480
+ const lines = [` ${event.name} @ ${formatTimestamp(event.time)}`];
1481
+ if (Object.keys(attrs2).length > 0) {
1482
+ lines.push(` ${field("Attrs", JSON.stringify(attrs2))}`);
1483
+ }
1484
+ return lines.join("\n");
1485
+ })
1486
+ ];
1487
+ const linkDocs = links.length === 0 ? ["Links: none"] : [
1488
+ `Links (${links.length}):`,
1489
+ ...links.map((link) => {
1490
+ const attrs2 = attributesToObject(link.attributes);
1491
+ const lines = [` ${link.linkedTraceId}/${link.linkedSpanId}`];
1492
+ if (Object.keys(attrs2).length > 0) {
1493
+ lines.push(` ${field("Attrs", JSON.stringify(attrs2))}`);
1494
+ }
1495
+ return lines.join("\n");
1496
+ })
1497
+ ];
1498
+ yield* Console2.log(renderDoc([...fields, "", ...eventDocs, "", ...linkDocs].join("\n")));
1499
+ }
1500
+ }).pipe(
1501
+ Effect10.scoped,
1502
+ Effect10.provide(makeReadOnlyLayer(data))
1503
+ )
1504
+ ).pipe(Command6.withDescription("Show detailed span information"));
1505
+ var command4 = Command6.make(
1398
1506
  "spans",
1399
1507
  {
1400
1508
  data: dataOption,
1401
- executionId: Flag3.string("execution-id").pipe(
1402
- Flag3.withDescription("Filter by execution ID"),
1509
+ runId: Flag3.string("run-id").pipe(
1510
+ Flag3.withDescription("Filter by run ID"),
1403
1511
  Flag3.optional
1404
1512
  ),
1405
1513
  json: jsonOption,
@@ -1412,17 +1520,21 @@ var command3 = Command5.make(
1412
1520
  Flag3.withDescription("Filter by span name (use % for wildcards)"),
1413
1521
  Flag3.optional
1414
1522
  ),
1523
+ spanId: Flag3.string("span-id").pipe(
1524
+ Flag3.withDescription("Filter by span ID"),
1525
+ Flag3.optional
1526
+ ),
1415
1527
  status: Flag3.string("status").pipe(
1416
1528
  Flag3.withDescription("Filter by status: ok, error, unset"),
1417
1529
  Flag3.optional
1418
1530
  ),
1419
- trace: Flag3.string("trace").pipe(
1531
+ trace: Flag3.string("trace-id").pipe(
1420
1532
  Flag3.withAlias("t"),
1421
1533
  Flag3.withDescription("Filter by trace ID"),
1422
1534
  Flag3.optional
1423
1535
  )
1424
1536
  },
1425
- ({ data, executionId, json, limit, minDuration, name, status, trace }) => Effect10.gen(function* () {
1537
+ ({ data, json, limit, minDuration, name, runId, spanId, status, trace }) => Effect10.gen(function* () {
1426
1538
  const storage = yield* Storage;
1427
1539
  let statusCode;
1428
1540
  if (Option3.isSome(status)) {
@@ -1441,7 +1553,8 @@ var command3 = Command5.make(
1441
1553
  }
1442
1554
  }
1443
1555
  const filters = {
1444
- ...Option3.isSome(executionId) ? { executionId: executionId.value } : {},
1556
+ ...Option3.isSome(runId) ? { runId: runId.value } : {},
1557
+ ...Option3.isSome(spanId) ? { spanId: spanId.value } : {},
1445
1558
  ...Option3.isSome(trace) ? { traceId: trace.value } : {},
1446
1559
  ...Option3.isSome(name) ? { name: name.value } : {},
1447
1560
  ...statusCode !== void 0 ? { status: statusCode } : {},
@@ -1508,14 +1621,14 @@ var command3 = Command5.make(
1508
1621
  Effect10.scoped,
1509
1622
  Effect10.provide(makeReadOnlyLayer(data))
1510
1623
  )
1511
- ).pipe(Command5.withDescription("List spans with optional filters"));
1512
- var command4 = Command5.make(
1624
+ ).pipe(Command6.withDescription("List spans with optional filters"));
1625
+ var command5 = Command6.make(
1513
1626
  "trace",
1514
1627
  {
1515
1628
  data: dataOption,
1516
1629
  json: jsonOption,
1517
- traceId: Argument2.string("trace-id").pipe(
1518
- Argument2.withDescription("The trace ID to display")
1630
+ traceId: Argument3.string("trace-id").pipe(
1631
+ Argument3.withDescription("The trace ID to display")
1519
1632
  )
1520
1633
  },
1521
1634
  ({ data, json, traceId }) => Effect10.gen(function* () {
@@ -1578,14 +1691,14 @@ var command4 = Command5.make(
1578
1691
  Effect10.scoped,
1579
1692
  Effect10.provide(makeReadOnlyLayer(data))
1580
1693
  )
1581
- ).pipe(Command5.withDescription("Show a trace as a tree view"));
1582
- var command5 = Command5.make(
1694
+ ).pipe(Command6.withDescription("Show a trace as a tree view"));
1695
+ var command6 = Command6.make(
1583
1696
  "traces",
1584
1697
  {
1585
1698
  data: dataOption,
1586
1699
  json: jsonOption,
1587
- executionId: Flag3.string("execution-id").pipe(
1588
- Flag3.withDescription("Filter by execution ID"),
1700
+ runId: Flag3.string("run-id").pipe(
1701
+ Flag3.withDescription("Filter by run ID"),
1589
1702
  Flag3.optional
1590
1703
  ),
1591
1704
  limit: limitOption,
@@ -1598,7 +1711,7 @@ var command5 = Command5.make(
1598
1711
  Flag3.optional
1599
1712
  )
1600
1713
  },
1601
- ({ data, executionId, json, limit, since, status }) => Effect10.gen(function* () {
1714
+ ({ data, json, limit, runId, since, status }) => Effect10.gen(function* () {
1602
1715
  const storage = yield* Storage;
1603
1716
  let statusCode;
1604
1717
  if (Option3.isSome(status)) {
@@ -1623,7 +1736,7 @@ var command5 = Command5.make(
1623
1736
  sinceNanos = nowNanos - durationNanos;
1624
1737
  }
1625
1738
  const filters = {
1626
- ...Option3.isSome(executionId) ? { executionId: executionId.value } : {},
1739
+ ...Option3.isSome(runId) ? { runId: runId.value } : {},
1627
1740
  ...statusCode !== void 0 ? { status: statusCode } : {},
1628
1741
  ...sinceNanos !== void 0 ? { since: sinceNanos } : {},
1629
1742
  ...Option3.isSome(limit) ? { limit: limit.value } : {}
@@ -1667,14 +1780,17 @@ var command5 = Command5.make(
1667
1780
  Effect10.scoped,
1668
1781
  Effect10.provide(makeReadOnlyLayer(data))
1669
1782
  )
1670
- ).pipe(Command5.withDescription("List traces with optional filters"));
1783
+ ).pipe(Command6.withDescription("List traces with optional filters"));
1671
1784
 
1672
1785
  // src/cli.ts
1673
- var command6 = Command5.make("inspeffct").pipe(
1674
- Command5.withDescription("Inspect Effect applications without code changes"),
1675
- Command5.withSubcommands([command2, command, command5, command4, command3])
1786
+ var command7 = Command6.make("inspeffct").pipe(
1787
+ Command6.withDescription("Inspect Effect applications without code changes"),
1788
+ Command6.withSubcommands([
1789
+ { group: "Capture", commands: [command2, command] },
1790
+ { group: "Inspect", commands: [command6, command5, command4, command3] }
1791
+ ])
1676
1792
  );
1677
- var cli = Command5.runWith(command6, {
1793
+ var cli = Command6.runWith(command7, {
1678
1794
  version: "0.0.1"
1679
1795
  });
1680
1796
  var encodeRunSeparator = (args) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inspeffct",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "type": "module",
5
5
  "description": "A CLI to help agents and humans inspect Effect applications",
6
6
  "license": "MIT",