@a-company/sentinel 3.6.0 → 3.9.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.
@@ -1,6 +1,6 @@
1
- import { S as Sentinel } from '../sdk-CzFDYYST.js';
2
- import '../storage-BKyt7aPJ.js';
3
- import '../types-BmVoO1iF.js';
1
+ import { S as Sentinel } from '../sdk-faJTgu-S.js';
2
+ import '../storage-8SPPsAJb.js';
3
+ import '../types-CPU5sxLq.js';
4
4
 
5
5
  /**
6
6
  * Sentinel Express Adapter
@@ -1,6 +1,6 @@
1
- import { S as Sentinel } from '../sdk-CzFDYYST.js';
2
- import '../storage-BKyt7aPJ.js';
3
- import '../types-BmVoO1iF.js';
1
+ import { S as Sentinel } from '../sdk-faJTgu-S.js';
2
+ import '../storage-8SPPsAJb.js';
3
+ import '../types-CPU5sxLq.js';
4
4
 
5
5
  /**
6
6
  * Sentinel Fastify Adapter
@@ -1,6 +1,6 @@
1
- import { S as Sentinel } from '../sdk-CzFDYYST.js';
2
- import '../storage-BKyt7aPJ.js';
3
- import '../types-BmVoO1iF.js';
1
+ import { S as Sentinel } from '../sdk-faJTgu-S.js';
2
+ import '../storage-8SPPsAJb.js';
3
+ import '../types-CPU5sxLq.js';
4
4
 
5
5
  /**
6
6
  * Sentinel Hono Adapter
@@ -0,0 +1,74 @@
1
+ import { ae as SentinelServerConfig } from './types-CPU5sxLq.js';
2
+ import { a as EventSchemaDeclaration } from './storage-8SPPsAJb.js';
3
+
4
+ /**
5
+ * Sentinel Configuration
6
+ *
7
+ * Loads and writes .sentinel.yaml config files.
8
+ * Provides project-level configuration for the Sentinel SDK and CLI.
9
+ */
10
+
11
+ interface SentinelYamlConfig {
12
+ version: string;
13
+ project: string;
14
+ environment?: string;
15
+ symbols?: {
16
+ components?: string[];
17
+ gates?: string[];
18
+ flows?: string[];
19
+ signals?: string[];
20
+ };
21
+ routes?: Record<string, string>;
22
+ scrub?: {
23
+ headers?: string[];
24
+ fields?: string[];
25
+ };
26
+ server?: {
27
+ port?: number;
28
+ maxLogs?: number;
29
+ maxBatchSize?: number;
30
+ wsMaxSubscribers?: number;
31
+ pruneIntervalInserts?: number;
32
+ logRetentionDays?: number;
33
+ };
34
+ }
35
+ /**
36
+ * Load .sentinel.yaml from a project directory.
37
+ *
38
+ * @param projectDir - Project root directory
39
+ * @returns Parsed config or null if not found
40
+ */
41
+ declare function loadConfig(projectDir: string): SentinelYamlConfig | null;
42
+ /**
43
+ * Write .sentinel.yaml to a project directory.
44
+ *
45
+ * @param projectDir - Project root directory
46
+ * @param config - Config to write
47
+ */
48
+ declare function writeConfig(projectDir: string, config: SentinelYamlConfig): void;
49
+ /**
50
+ * Load server configuration with resolution order:
51
+ * env vars → local .sentinel.yaml → global ~/.paradigm/sentinel.yaml → defaults
52
+ */
53
+ declare function loadServerConfig(projectDir?: string): SentinelServerConfig;
54
+
55
+ /**
56
+ * Built-in Paradigm Schema Declaration
57
+ *
58
+ * Registers Paradigm's existing log/metric/trace types as an event schema.
59
+ * This is informational — existing tables remain untouched.
60
+ */
61
+
62
+ declare const PARADIGM_SCHEMA: EventSchemaDeclaration;
63
+
64
+ /**
65
+ * Built-in Symphony Schema Declaration — #SymphonySchema
66
+ *
67
+ * Defines the paradigm-symphony event schema for agent-to-agent messaging.
68
+ * Events are scoped by threadId with parent-child causality via parentId.
69
+ * 19 event types across 6 categories: dialogue, action, outcome, system, lifecycle, transfer.
70
+ */
71
+
72
+ declare const SYMPHONY_SCHEMA: EventSchemaDeclaration;
73
+
74
+ export { PARADIGM_SCHEMA as P, type SentinelYamlConfig as S, SYMPHONY_SCHEMA as a, loadServerConfig as b, loadConfig as l, writeConfig as w };
@@ -594,6 +594,19 @@ var SentinelStorage = class {
594
594
  );
595
595
  this.save();
596
596
  }
597
+ resolveIncident(id, options) {
598
+ this.updateIncident(id, {
599
+ status: "resolved",
600
+ resolvedAt: (/* @__PURE__ */ new Date()).toISOString()
601
+ });
602
+ if (options?.notes) {
603
+ this.addIncidentNote(id, {
604
+ author: "system",
605
+ content: options.notes,
606
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
607
+ });
608
+ }
609
+ }
597
610
  addIncidentNote(incidentId, note) {
598
611
  this.initializeSync();
599
612
  const incident = this.getIncident(incidentId);
@@ -2613,6 +2626,454 @@ function loadServerConfig(projectDir) {
2613
2626
  return config;
2614
2627
  }
2615
2628
 
2629
+ // src/schema/builtin-paradigm.ts
2630
+ var PARADIGM_SCHEMA = {
2631
+ id: "paradigm-logger",
2632
+ version: "1.0.0",
2633
+ name: "Paradigm Logger",
2634
+ description: "Structured logs from @a-company/paradigm-logger with symbolic context",
2635
+ scope: {
2636
+ field: "correlationId",
2637
+ type: "string",
2638
+ label: "Correlation",
2639
+ ordering: "independent",
2640
+ sessionField: "sessionId"
2641
+ },
2642
+ eventTypes: [
2643
+ {
2644
+ type: "log:debug",
2645
+ category: "logs",
2646
+ label: "Debug Log",
2647
+ severity: "debug",
2648
+ frequency: "high",
2649
+ fields: [
2650
+ { name: "symbol", type: "string", indexed: true, display: true },
2651
+ { name: "symbolType", type: "string", indexed: true, display: true },
2652
+ { name: "message", type: "string", display: true },
2653
+ { name: "service", type: "string", indexed: true, display: true },
2654
+ { name: "durationMs", type: "number", display: true }
2655
+ ]
2656
+ },
2657
+ {
2658
+ type: "log:info",
2659
+ category: "logs",
2660
+ label: "Info Log",
2661
+ severity: "info",
2662
+ frequency: "high",
2663
+ fields: [
2664
+ { name: "symbol", type: "string", indexed: true, display: true },
2665
+ { name: "symbolType", type: "string", indexed: true, display: true },
2666
+ { name: "message", type: "string", display: true },
2667
+ { name: "service", type: "string", indexed: true, display: true },
2668
+ { name: "durationMs", type: "number", display: true }
2669
+ ]
2670
+ },
2671
+ {
2672
+ type: "log:warn",
2673
+ category: "logs",
2674
+ label: "Warning Log",
2675
+ severity: "warn",
2676
+ frequency: "medium",
2677
+ fields: [
2678
+ { name: "symbol", type: "string", indexed: true, display: true },
2679
+ { name: "symbolType", type: "string", indexed: true, display: true },
2680
+ { name: "message", type: "string", display: true },
2681
+ { name: "service", type: "string", indexed: true, display: true }
2682
+ ]
2683
+ },
2684
+ {
2685
+ type: "log:error",
2686
+ category: "logs",
2687
+ label: "Error Log",
2688
+ severity: "error",
2689
+ frequency: "low",
2690
+ fields: [
2691
+ { name: "symbol", type: "string", indexed: true, display: true },
2692
+ { name: "symbolType", type: "string", indexed: true, display: true },
2693
+ { name: "message", type: "string", display: true },
2694
+ { name: "service", type: "string", indexed: true, display: true }
2695
+ ]
2696
+ },
2697
+ {
2698
+ type: "metric:counter",
2699
+ category: "metrics",
2700
+ label: "Counter Metric",
2701
+ severity: "info",
2702
+ frequency: "high",
2703
+ fields: [
2704
+ { name: "name", type: "string", indexed: true, display: true },
2705
+ { name: "value", type: "number", display: true },
2706
+ { name: "tags", type: "object" }
2707
+ ]
2708
+ },
2709
+ {
2710
+ type: "metric:gauge",
2711
+ category: "metrics",
2712
+ label: "Gauge Metric",
2713
+ severity: "info",
2714
+ frequency: "medium",
2715
+ fields: [
2716
+ { name: "name", type: "string", indexed: true, display: true },
2717
+ { name: "value", type: "number", display: true },
2718
+ { name: "tags", type: "object" }
2719
+ ]
2720
+ },
2721
+ {
2722
+ type: "metric:histogram",
2723
+ category: "metrics",
2724
+ label: "Histogram Metric",
2725
+ severity: "info",
2726
+ frequency: "medium",
2727
+ fields: [
2728
+ { name: "name", type: "string", indexed: true, display: true },
2729
+ { name: "value", type: "number", display: true },
2730
+ { name: "tags", type: "object" }
2731
+ ]
2732
+ },
2733
+ {
2734
+ type: "trace:span",
2735
+ category: "traces",
2736
+ label: "Trace Span",
2737
+ severity: "info",
2738
+ frequency: "medium",
2739
+ fields: [
2740
+ { name: "traceId", type: "string", indexed: true, display: true },
2741
+ { name: "spanId", type: "string", indexed: true },
2742
+ { name: "operation", type: "string", display: true },
2743
+ { name: "durationMs", type: "number", display: true },
2744
+ { name: "status", type: "string", display: true }
2745
+ ]
2746
+ },
2747
+ {
2748
+ type: "incident:recorded",
2749
+ category: "incidents",
2750
+ label: "Incident Recorded",
2751
+ severity: "error",
2752
+ frequency: "low",
2753
+ fields: [
2754
+ { name: "incidentId", type: "string", indexed: true, display: true },
2755
+ { name: "errorMessage", type: "string", display: true },
2756
+ { name: "symbols", type: "object" },
2757
+ { name: "environment", type: "string", display: true }
2758
+ ]
2759
+ }
2760
+ ],
2761
+ visualization: {
2762
+ defaultView: "table",
2763
+ categoryColors: {
2764
+ logs: "#3b82f6",
2765
+ metrics: "#22c55e",
2766
+ traces: "#a855f7",
2767
+ incidents: "#ef4444"
2768
+ },
2769
+ summaryFields: ["symbol", "message", "service"],
2770
+ defaultExcluded: ["log:debug"]
2771
+ },
2772
+ tags: ["builtin", "paradigm"]
2773
+ };
2774
+
2775
+ // src/schema/builtin-symphony.ts
2776
+ var SYMPHONY_SCHEMA = {
2777
+ id: "paradigm-symphony",
2778
+ version: "1.0.0",
2779
+ name: "Symphony Conversations",
2780
+ description: "Agent-to-agent messaging events from The Score protocol",
2781
+ scope: {
2782
+ field: "threadId",
2783
+ type: "string",
2784
+ label: "Thread",
2785
+ ordering: "independent",
2786
+ sessionField: "sessionId"
2787
+ },
2788
+ eventTypes: [
2789
+ // ── Dialogue (5) ──────────────────────────────────────
2790
+ {
2791
+ type: "note:question",
2792
+ category: "dialogue",
2793
+ label: "Question",
2794
+ severity: "info",
2795
+ frequency: "high",
2796
+ fields: [
2797
+ { name: "sender", type: "string", indexed: true, display: true },
2798
+ { name: "senderRole", type: "string", indexed: true, display: true },
2799
+ { name: "text", type: "string", display: true },
2800
+ { name: "symbols", type: "object" },
2801
+ { name: "parentId", type: "string", indexed: true }
2802
+ ]
2803
+ },
2804
+ {
2805
+ type: "note:context",
2806
+ category: "dialogue",
2807
+ label: "Context",
2808
+ severity: "info",
2809
+ frequency: "high",
2810
+ fields: [
2811
+ { name: "sender", type: "string", indexed: true, display: true },
2812
+ { name: "senderRole", type: "string", indexed: true, display: true },
2813
+ { name: "text", type: "string", display: true },
2814
+ { name: "symbols", type: "object" },
2815
+ { name: "parentId", type: "string", indexed: true }
2816
+ ]
2817
+ },
2818
+ {
2819
+ type: "note:clarification",
2820
+ category: "dialogue",
2821
+ label: "Clarification",
2822
+ severity: "info",
2823
+ frequency: "medium",
2824
+ fields: [
2825
+ { name: "sender", type: "string", indexed: true, display: true },
2826
+ { name: "senderRole", type: "string", indexed: true, display: true },
2827
+ { name: "text", type: "string", display: true },
2828
+ { name: "symbols", type: "object" },
2829
+ { name: "parentId", type: "string", indexed: true }
2830
+ ]
2831
+ },
2832
+ {
2833
+ type: "note:verification",
2834
+ category: "dialogue",
2835
+ label: "Verification",
2836
+ severity: "info",
2837
+ frequency: "medium",
2838
+ fields: [
2839
+ { name: "sender", type: "string", indexed: true, display: true },
2840
+ { name: "senderRole", type: "string", indexed: true, display: true },
2841
+ { name: "text", type: "string", display: true },
2842
+ { name: "symbols", type: "object" },
2843
+ { name: "parentId", type: "string", indexed: true }
2844
+ ]
2845
+ },
2846
+ {
2847
+ type: "note:reference",
2848
+ category: "dialogue",
2849
+ label: "Reference",
2850
+ severity: "info",
2851
+ frequency: "medium",
2852
+ fields: [
2853
+ { name: "sender", type: "string", indexed: true, display: true },
2854
+ { name: "senderRole", type: "string", indexed: true, display: true },
2855
+ { name: "text", type: "string", display: true },
2856
+ { name: "symbols", type: "object" },
2857
+ { name: "parentId", type: "string", indexed: true }
2858
+ ]
2859
+ },
2860
+ // ── Action (2) ────────────────────────────────────────
2861
+ {
2862
+ type: "note:proposal",
2863
+ category: "action",
2864
+ label: "Proposal",
2865
+ severity: "info",
2866
+ frequency: "medium",
2867
+ fields: [
2868
+ { name: "sender", type: "string", indexed: true, display: true },
2869
+ { name: "senderRole", type: "string", indexed: true, display: true },
2870
+ { name: "text", type: "string", display: true },
2871
+ { name: "diff", type: "string" },
2872
+ { name: "symbols", type: "object" },
2873
+ { name: "parentId", type: "string", indexed: true }
2874
+ ]
2875
+ },
2876
+ {
2877
+ type: "note:action",
2878
+ category: "action",
2879
+ label: "Action",
2880
+ severity: "info",
2881
+ frequency: "medium",
2882
+ fields: [
2883
+ { name: "sender", type: "string", indexed: true, display: true },
2884
+ { name: "senderRole", type: "string", indexed: true, display: true },
2885
+ { name: "text", type: "string", display: true },
2886
+ { name: "diff", type: "string" },
2887
+ { name: "symbols", type: "object" },
2888
+ { name: "parentId", type: "string", indexed: true }
2889
+ ]
2890
+ },
2891
+ // ── Outcome (3) ───────────────────────────────────────
2892
+ {
2893
+ type: "note:decision",
2894
+ category: "outcome",
2895
+ label: "Decision",
2896
+ severity: "warn",
2897
+ frequency: "low",
2898
+ fields: [
2899
+ { name: "sender", type: "string", indexed: true, display: true },
2900
+ { name: "senderRole", type: "string", indexed: true, display: true },
2901
+ { name: "text", type: "string", display: true },
2902
+ { name: "decision", type: "string", display: true },
2903
+ { name: "symbols", type: "object" },
2904
+ { name: "parentId", type: "string", indexed: true }
2905
+ ]
2906
+ },
2907
+ {
2908
+ type: "note:approval",
2909
+ category: "outcome",
2910
+ label: "Approval",
2911
+ severity: "info",
2912
+ frequency: "low",
2913
+ fields: [
2914
+ { name: "sender", type: "string", indexed: true, display: true },
2915
+ { name: "senderRole", type: "string", indexed: true, display: true },
2916
+ { name: "text", type: "string", display: true },
2917
+ { name: "parentId", type: "string", indexed: true }
2918
+ ]
2919
+ },
2920
+ {
2921
+ type: "note:rejection",
2922
+ category: "outcome",
2923
+ label: "Rejection",
2924
+ severity: "warn",
2925
+ frequency: "low",
2926
+ fields: [
2927
+ { name: "sender", type: "string", indexed: true, display: true },
2928
+ { name: "senderRole", type: "string", indexed: true, display: true },
2929
+ { name: "text", type: "string", display: true },
2930
+ { name: "parentId", type: "string", indexed: true }
2931
+ ]
2932
+ },
2933
+ // ── System (1) ────────────────────────────────────────
2934
+ {
2935
+ type: "note:alert",
2936
+ category: "system",
2937
+ label: "Alert",
2938
+ severity: "error",
2939
+ frequency: "low",
2940
+ fields: [
2941
+ { name: "sender", type: "string", indexed: true, display: true },
2942
+ { name: "senderRole", type: "string", indexed: true, display: true },
2943
+ { name: "text", type: "string", display: true },
2944
+ { name: "symbols", type: "object" },
2945
+ { name: "parentId", type: "string", indexed: true }
2946
+ ]
2947
+ },
2948
+ // ── Lifecycle (4) ─────────────────────────────────────
2949
+ {
2950
+ type: "note:handoff",
2951
+ category: "lifecycle",
2952
+ label: "Handoff",
2953
+ severity: "info",
2954
+ frequency: "low",
2955
+ fields: [
2956
+ { name: "sender", type: "string", indexed: true, display: true },
2957
+ { name: "senderRole", type: "string", indexed: true, display: true },
2958
+ { name: "text", type: "string", display: true },
2959
+ { name: "parentId", type: "string", indexed: true }
2960
+ ]
2961
+ },
2962
+ {
2963
+ type: "thread:created",
2964
+ category: "lifecycle",
2965
+ label: "Thread Created",
2966
+ severity: "info",
2967
+ frequency: "low",
2968
+ fields: [
2969
+ { name: "topic", type: "string", display: true },
2970
+ { name: "initiator", type: "string", indexed: true, display: true }
2971
+ ]
2972
+ },
2973
+ {
2974
+ type: "thread:resolved",
2975
+ category: "lifecycle",
2976
+ label: "Thread Resolved",
2977
+ severity: "info",
2978
+ frequency: "low",
2979
+ fields: [
2980
+ { name: "topic", type: "string", display: true },
2981
+ { name: "decision", type: "string", display: true }
2982
+ ]
2983
+ },
2984
+ {
2985
+ type: "participant:joined",
2986
+ category: "lifecycle",
2987
+ label: "Participant Joined",
2988
+ severity: "info",
2989
+ frequency: "low",
2990
+ fields: [
2991
+ { name: "participantId", type: "string", indexed: true, display: true },
2992
+ { name: "participantName", type: "string", display: true },
2993
+ { name: "participantRole", type: "string", display: true }
2994
+ ]
2995
+ },
2996
+ {
2997
+ type: "participant:left",
2998
+ category: "lifecycle",
2999
+ label: "Participant Left",
3000
+ severity: "info",
3001
+ frequency: "low",
3002
+ fields: [
3003
+ { name: "participantId", type: "string", indexed: true, display: true },
3004
+ { name: "participantName", type: "string", display: true }
3005
+ ]
3006
+ },
3007
+ // ── Transfer (4) ──────────────────────────────────────
3008
+ {
3009
+ type: "file:requested",
3010
+ category: "transfer",
3011
+ label: "File Requested",
3012
+ severity: "info",
3013
+ frequency: "low",
3014
+ fields: [
3015
+ { name: "requestId", type: "string", indexed: true, display: true },
3016
+ { name: "filePath", type: "string", display: true },
3017
+ { name: "requester", type: "string", indexed: true, display: true },
3018
+ { name: "reason", type: "string", display: true },
3019
+ { name: "urgency", type: "string", display: true }
3020
+ ]
3021
+ },
3022
+ {
3023
+ type: "file:approved",
3024
+ category: "transfer",
3025
+ label: "File Approved",
3026
+ severity: "info",
3027
+ frequency: "low",
3028
+ fields: [
3029
+ { name: "requestId", type: "string", indexed: true, display: true },
3030
+ { name: "filePath", type: "string", display: true },
3031
+ { name: "size", type: "number", display: true },
3032
+ { name: "hash", type: "string" }
3033
+ ]
3034
+ },
3035
+ {
3036
+ type: "file:denied",
3037
+ category: "transfer",
3038
+ label: "File Denied",
3039
+ severity: "warn",
3040
+ frequency: "low",
3041
+ fields: [
3042
+ { name: "requestId", type: "string", indexed: true, display: true },
3043
+ { name: "filePath", type: "string", display: true },
3044
+ { name: "reason", type: "string", display: true }
3045
+ ]
3046
+ },
3047
+ {
3048
+ type: "file:delivered",
3049
+ category: "transfer",
3050
+ label: "File Delivered",
3051
+ severity: "info",
3052
+ frequency: "low",
3053
+ fields: [
3054
+ { name: "requestId", type: "string", indexed: true, display: true },
3055
+ { name: "filePath", type: "string", display: true },
3056
+ { name: "size", type: "number", display: true },
3057
+ { name: "hash", type: "string" }
3058
+ ]
3059
+ }
3060
+ ],
3061
+ visualization: {
3062
+ defaultView: "tree",
3063
+ categoryColors: {
3064
+ dialogue: "#7dd3fc",
3065
+ action: "#86efac",
3066
+ outcome: "#fbbf24",
3067
+ system: "#f87171",
3068
+ lifecycle: "#a78bfa",
3069
+ transfer: "#34d399"
3070
+ },
3071
+ summaryFields: ["sender", "text", "senderRole"],
3072
+ defaultExcluded: []
3073
+ },
3074
+ tags: ["builtin", "symphony"]
3075
+ };
3076
+
2616
3077
  export {
2617
3078
  SentinelStorage,
2618
3079
  DEFAULT_AUTH_CONFIG,
@@ -2620,5 +3081,7 @@ export {
2620
3081
  DEFAULT_SERVER_CONFIG,
2621
3082
  loadConfig,
2622
3083
  writeConfig,
2623
- loadServerConfig
3084
+ loadServerConfig,
3085
+ PARADIGM_SCHEMA,
3086
+ SYMPHONY_SCHEMA
2624
3087
  };
package/dist/cli.js CHANGED
@@ -2,31 +2,34 @@
2
2
 
3
3
  // src/cli.ts
4
4
  import { Command } from "commander";
5
+ import { createRequire } from "module";
6
+ var require2 = createRequire(import.meta.url);
7
+ var { version: VERSION } = require2("../package.json");
5
8
  var program = new Command();
6
- program.name("sentinel").description("Semantic error monitoring \u2014 errors that speak your language").version("0.2.0");
7
- program.command("dashboard", { isDefault: true }).description("Launch the Sentinel dashboard").option("-p, --port <port>", "Port number", "3838").option("--no-open", "Don't open browser").action(async (opts) => {
8
- const { launchDashboard } = await import("./commands-E7ACLOE7.js");
9
+ program.name("sentinel").description("Semantic error monitoring \u2014 errors that speak your language").version(VERSION);
10
+ program.command("defend", { isDefault: true }).description("Launch the Sentinel dashboard").option("-p, --port <port>", "Port number", "3838").option("--no-open", "Don't open browser").action(async (opts) => {
11
+ const { launchDashboard } = await import("./commands-EV7I6V3F.js");
9
12
  await launchDashboard(opts);
10
13
  });
11
14
  program.command("init").description("Initialize Sentinel in current project").option("--detect", "Auto-detect symbols from codebase").action(async (opts) => {
12
- const { initProject } = await import("./commands-E7ACLOE7.js");
15
+ const { initProject } = await import("./commands-EV7I6V3F.js");
13
16
  await initProject(opts);
14
17
  });
15
18
  var triage = program.command("triage").description("Incident triage");
16
19
  triage.command("list").description("List incidents").option("-s, --status <status>", "Filter by status (open, investigating, resolved, wont-fix)").option("-e, --env <env>", "Filter by environment").option("--symbol <symbol>", "Filter by symbol").option("-n, --limit <n>", "Max results", "10").action(async (opts) => {
17
- const { triageList } = await import("./commands-E7ACLOE7.js");
20
+ const { triageList } = await import("./commands-EV7I6V3F.js");
18
21
  await triageList(opts);
19
22
  });
20
23
  triage.command("show <id>").description("Show incident details").option("--timeline", "Include flow timeline").action(async (id, opts) => {
21
- const { triageShow } = await import("./commands-E7ACLOE7.js");
24
+ const { triageShow } = await import("./commands-EV7I6V3F.js");
22
25
  await triageShow(id, opts);
23
26
  });
24
27
  triage.command("resolve <id>").description("Resolve an incident").option("--pattern <id>", "Pattern that resolved it").option("--commit <hash>", "Fix commit").option("--notes <text>", "Resolution notes").action(async (id, opts) => {
25
- const { triageResolve } = await import("./commands-E7ACLOE7.js");
28
+ const { triageResolve } = await import("./commands-EV7I6V3F.js");
26
29
  await triageResolve(id, opts);
27
30
  });
28
31
  triage.command("stats").description("Show incident statistics").option("-p, --period <period>", "Period (7d, 30d, 90d)", "7d").action(async (opts) => {
29
- const { triageStats } = await import("./commands-E7ACLOE7.js");
32
+ const { triageStats } = await import("./commands-EV7I6V3F.js");
30
33
  await triageStats(opts);
31
34
  });
32
35
  program.parse();