@posthog/wizard 2.22.1 → 2.24.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.
Files changed (56) hide show
  1. package/README.md +61 -2
  2. package/dist/{AiOptInRequiredScreen-B8mgZbe5.js → AiOptInRequiredScreen-DPn1CCeD.js} +12 -577
  3. package/dist/AiOptInRequiredScreen-DPn1CCeD.js.map +1 -0
  4. package/dist/{add-mcp-server-to-clients-lCxOS1A1.js → add-mcp-server-to-clients-BU8Owthq.js} +4 -4
  5. package/dist/{add-mcp-server-to-clients-lCxOS1A1.js.map → add-mcp-server-to-clients-BU8Owthq.js.map} +1 -1
  6. package/dist/{agent-interface-BPCzPvK-.js → agent-interface-CysYcZl5.js} +6 -7
  7. package/dist/agent-interface-CysYcZl5.js.map +1 -0
  8. package/dist/{agent-runner-DgzF2mga.js → agent-runner-Br0OxBxd.js} +8 -8
  9. package/dist/{agent-runner-DgzF2mga.js.map → agent-runner-Br0OxBxd.js.map} +1 -1
  10. package/dist/{analytics-BZv-cKyn.js → analytics-BOWrR4qd.js} +22 -2
  11. package/dist/analytics-BOWrR4qd.js.map +1 -0
  12. package/dist/{api-BkLZ8BWm.js → api-RXTR8yZo.js} +3 -3
  13. package/dist/{api-BkLZ8BWm.js.map → api-RXTR8yZo.js.map} +1 -1
  14. package/dist/bin.js +875 -423
  15. package/dist/bin.js.map +1 -1
  16. package/dist/{ci-install-DBARq5LX.js → ci-install-BscZ60Ec.js} +5 -5
  17. package/dist/{ci-install-DBARq5LX.js.map → ci-install-BscZ60Ec.js.map} +1 -1
  18. package/dist/{debug-Ckumcrye.js → debug-BUdVZP84.js} +2 -2
  19. package/dist/{debug-Ckumcrye.js.map → debug-BUdVZP84.js.map} +1 -1
  20. package/dist/{debug-DLsuyfln.js → debug-BgH07S-e.js} +1 -1
  21. package/dist/{environment-DUh_8hqW.js → environment-G0Hv6_JI.js} +3 -3
  22. package/dist/{environment-DUh_8hqW.js.map → environment-G0Hv6_JI.js.map} +1 -1
  23. package/dist/{interactive-DeiHgviS.js → interactive-fh2iyewb.js} +3 -3
  24. package/dist/{interactive-DeiHgviS.js.map → interactive-fh2iyewb.js.map} +1 -1
  25. package/dist/{mcp-prompt-streaming-kEJgmB30.js → mcp-prompt-streaming-DUtbxnNy.js} +4 -4
  26. package/dist/{mcp-prompt-streaming-kEJgmB30.js.map → mcp-prompt-streaming-DUtbxnNy.js.map} +1 -1
  27. package/dist/{non-interactive-I4ifOSau.js → non-interactive-BfqXlY8R.js} +2 -2
  28. package/dist/{non-interactive-I4ifOSau.js.map → non-interactive-BfqXlY8R.js.map} +1 -1
  29. package/dist/{package-manager-fUeLORHg.js → package-manager-Ca1maxU-.js} +2 -2
  30. package/dist/{package-manager-fUeLORHg.js.map → package-manager-Ca1maxU-.js.map} +1 -1
  31. package/dist/{playground-DLLIz4Ql.js → playground-4sqLVVJL.js} +5 -10
  32. package/dist/{playground-DLLIz4Ql.js.map → playground-4sqLVVJL.js.map} +1 -1
  33. package/dist/{posthog-integration-COcPewVt.js → posthog-integration-Bz3HWkHn.js} +11 -11
  34. package/dist/{posthog-integration-COcPewVt.js.map → posthog-integration-Bz3HWkHn.js.map} +1 -1
  35. package/dist/{provisioning-7xU12_S9.js → provisioning-CgwvlsIl.js} +3 -3
  36. package/dist/{provisioning-7xU12_S9.js.map → provisioning-CgwvlsIl.js.map} +1 -1
  37. package/dist/{registry-YwaF-aD8.js → registry-CEnQVctL.js} +4 -4
  38. package/dist/{registry-YwaF-aD8.js.map → registry-CEnQVctL.js.map} +1 -1
  39. package/dist/{setup-utils-Cr4FxJDl.js → setup-utils-Doh69vo4.js} +8 -8
  40. package/dist/{setup-utils-Cr4FxJDl.js.map → setup-utils-Doh69vo4.js.map} +1 -1
  41. package/dist/{start-tui--E4PXdwG.js → start-tui-CywbSvZE.js} +54 -1030
  42. package/dist/start-tui-CywbSvZE.js.map +1 -0
  43. package/dist/{steps-CxUxdK4V.js → steps-DJojDYQ-.js} +6 -6
  44. package/dist/{steps-CxUxdK4V.js.map → steps-DJojDYQ-.js.map} +1 -1
  45. package/dist/{telemetry-BS7yw3TP.js → telemetry-8zMpaIuK.js} +3 -3
  46. package/dist/{telemetry-BS7yw3TP.js.map → telemetry-8zMpaIuK.js.map} +1 -1
  47. package/dist/{urls-BW23_XbC.js → urls-BUfvQmU4.js} +2 -2
  48. package/dist/{urls-BW23_XbC.js.map → urls-BUfvQmU4.js.map} +1 -1
  49. package/dist/{wizard-abort-E66_R4S7.js → wizard-abort-BdGW4Tvi.js} +3 -3
  50. package/dist/{wizard-abort-E66_R4S7.js.map → wizard-abort-BdGW4Tvi.js.map} +1 -1
  51. package/dist/{wizard-abort-BPsnXKY5.js → wizard-abort-Ni-mKJ58.js} +1 -1
  52. package/package.json +2 -2
  53. package/dist/AiOptInRequiredScreen-B8mgZbe5.js.map +0 -1
  54. package/dist/agent-interface-BPCzPvK-.js.map +0 -1
  55. package/dist/analytics-BZv-cKyn.js.map +0 -1
  56. package/dist/start-tui--E4PXdwG.js.map +0 -1
@@ -1,18 +1,18 @@
1
- import { M as POSTHOG_APP_URL, Q as getSkillsBaseUrl, g as SERVICE_LABELS, s as logToFile, y as getBlockingServiceKeys } from "./debug-Ckumcrye.js";
1
+ import { M as POSTHOG_APP_URL, Q as getSkillsBaseUrl, g as SERVICE_LABELS, s as logToFile, y as getBlockingServiceKeys } from "./debug-BUdVZP84.js";
2
2
  import { n as isTaskStatus } from "./wizard-ui-YdGFRyu_.js";
3
- import { r as sessionProperties, t as analytics } from "./analytics-BZv-cKyn.js";
4
- import { i as withUtm, n as openTrackedLink } from "./telemetry-BS7yw3TP.js";
5
- import { n as getCloudUrlFromRegion } from "./urls-BW23_XbC.js";
6
- import { a as fetchUserData, i as fetchSlackConnected } from "./api-BkLZ8BWm.js";
3
+ import { r as sessionProperties, t as analytics } from "./analytics-BOWrR4qd.js";
4
+ import { i as withUtm, n as openTrackedLink } from "./telemetry-8zMpaIuK.js";
5
+ import { n as getCloudUrlFromRegion } from "./urls-BUfvQmU4.js";
6
+ import { a as fetchUserData, i as fetchSlackConnected } from "./api-RXTR8yZo.js";
7
7
  import { i as buildSession } from "./wizard-session-G3VWD6hv.js";
8
- import { m as fetchSkillMenu, y as AUDIT_SEVERITY_STYLE } from "./agent-interface-BPCzPvK-.js";
9
- import { c as computeVisibleRange, d as isObjectBlock, f as Colors, l as isClearBlock, p as Icons, s as TextBlock, u as isLinesBlock } from "./posthog-integration-COcPewVt.js";
10
- import { a as getProgramConfig, i as Program, l as getKindMeta, r as PROGRAM_REGISTRY } from "./bin.js";
8
+ import { m as fetchSkillMenu, y as AUDIT_SEVERITY_STYLE } from "./agent-interface-CysYcZl5.js";
9
+ import { c as computeVisibleRange, d as isObjectBlock, f as Colors, l as isClearBlock, p as Icons, s as TextBlock, u as isLinesBlock } from "./posthog-integration-Bz3HWkHn.js";
10
+ import { a as PromptLabel, c as PROGRAM_REGISTRY, i as useKeyboardHintsContext, l as Program, m as getKindMeta, n as useKeyBindings, r as KeyboardHintsProvider, t as PickerMenu, u as getProgramConfig } from "./bin.js";
11
11
  import { n as AVAILABLE_FEATURES, o as isAllFeaturesSelected, t as ALL_FEATURE_VALUES } from "./defaults-BNWIWzjc.js";
12
12
  import opn from "opn";
13
13
  import * as fs$1 from "fs";
14
14
  import { Box, Text, measureElement, useInput, useStdout } from "ink";
15
- import { Component, Fragment, createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
15
+ import { Component, Fragment, useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
16
16
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
17
17
  import { atom, map } from "nanostores";
18
18
  import { Spinner } from "@inkjs/ui";
@@ -837,401 +837,6 @@ const ProgressList = ({ items, title }) => {
837
837
  });
838
838
  };
839
839
  //#endregion
840
- //#region src/ui/tui/primitives/PromptLabel.tsx
841
- /**
842
- * PromptLabel — Compact inline label for input prompts.
843
- *
844
- * Renders: [!] message
845
- * where [!] is black text on accent background.
846
- */
847
- const PromptLabel = ({ message }) => {
848
- return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(Text, {
849
- bold: true,
850
- color: Colors.accent,
851
- children: [" ", message]
852
- }) });
853
- };
854
- //#endregion
855
- //#region src/ui/tui/hooks/keyboard-hints-utils.ts
856
- /** Default priorities by key type. */
857
- const DEFAULT_PRIORITY = {
858
- ["upArrow"]: 0,
859
- ["downArrow"]: 0,
860
- ["leftArrow"]: 1,
861
- ["rightArrow"]: 1,
862
- ["space"]: 10,
863
- ["escape"]: 20,
864
- ["return"]: 21
865
- };
866
- /** Get the default display priority for a key match. */
867
- function getDefaultPriority(match) {
868
- return DEFAULT_PRIORITY[Array.isArray(match) ? match[0] : match] ?? 15;
869
- }
870
- /** Check if a KeyMatchOrChar matches the given input string and key flags. */
871
- function matchesKey(m, input, key) {
872
- switch (m) {
873
- case "upArrow": return !!key.upArrow;
874
- case "downArrow": return !!key.downArrow;
875
- case "leftArrow": return !!key.leftArrow;
876
- case "rightArrow": return !!key.rightArrow;
877
- case "return": return !!key.return;
878
- case "escape": return !!key.escape;
879
- case "space": return input === " ";
880
- default: return input === m;
881
- }
882
- }
883
- /** Serialize hints for comparison. */
884
- function hintsKey(hints) {
885
- return hints.map((h) => `${h.label}:${h.action}`).join("|");
886
- }
887
- /** Deduplicate hints by label+action and sort by priority. */
888
- function deduplicateAndSort(hints) {
889
- const seen = /* @__PURE__ */ new Set();
890
- const deduped = [];
891
- for (const hint of hints) {
892
- const k = `${hint.label}:${hint.action}`;
893
- if (!seen.has(k)) {
894
- seen.add(k);
895
- deduped.push(hint);
896
- }
897
- }
898
- deduped.sort((a, b) => a.priority - b.priority);
899
- return deduped;
900
- }
901
- //#endregion
902
- //#region src/ui/tui/hooks/useKeyboardHints.tsx
903
- /**
904
- * KeyboardHintsProvider — Context for collecting and displaying keyboard hints.
905
- *
906
- * Input components register their hints via useKeyBindings. The provider
907
- * flattens, deduplicates, and sorts them. The hints bar stays visible for as
908
- * long as a screen has registered hints — it never auto-dismisses.
909
- */
910
- const KeyboardHintsContext = createContext({
911
- register: () => void 0,
912
- unregister: () => void 0,
913
- hints: []
914
- });
915
- const useKeyboardHintsContext = () => useContext(KeyboardHintsContext);
916
- const KeyboardHintsProvider = ({ children }) => {
917
- const registrationsRef = useRef(/* @__PURE__ */ new Map());
918
- const [hints, setHints] = useState([]);
919
- const prevHintsKeyRef = useRef("");
920
- const recompute = useCallback(() => {
921
- const all = [];
922
- for (const h of registrationsRef.current.values()) all.push(...h);
923
- const deduped = deduplicateAndSort(all);
924
- const newKey = hintsKey(deduped);
925
- if (newKey !== prevHintsKeyRef.current) {
926
- prevHintsKeyRef.current = newKey;
927
- setHints(deduped);
928
- }
929
- }, []);
930
- const register = useCallback((id, h) => {
931
- registrationsRef.current.set(id, h);
932
- recompute();
933
- }, [recompute]);
934
- const unregister = useCallback((id) => {
935
- registrationsRef.current.delete(id);
936
- recompute();
937
- }, [recompute]);
938
- return /* @__PURE__ */ jsx(KeyboardHintsContext.Provider, {
939
- value: {
940
- register,
941
- unregister,
942
- hints
943
- },
944
- children
945
- });
946
- };
947
- //#endregion
948
- //#region src/ui/tui/hooks/useKeyBindings.ts
949
- /**
950
- * useKeyBindings — Declarative keyboard input + automatic hint registration.
951
- *
952
- * Replaces raw `useInput` in input components. Define bindings as data;
953
- * the hook wires up the Ink input handler AND registers hints in the
954
- * KeyboardHintsProvider. One source of truth for keys and their labels.
955
- */
956
- /**
957
- * Declarative key bindings hook. Replaces `useInput` in input components.
958
- * Registers hints automatically with the KeyboardHintsProvider.
959
- *
960
- * @param id Unique identifier for this component's hints registration
961
- * @param bindings Array of key binding definitions
962
- */
963
- function useKeyBindings(id, bindings) {
964
- const ctx = useKeyboardHintsContext();
965
- const hintsRef = useRef("");
966
- const hints = bindings.map((b) => ({
967
- label: b.label,
968
- action: b.action,
969
- priority: b.priority ?? getDefaultPriority(b.match)
970
- }));
971
- const serialized = hints.map((h) => `${h.label}:${h.action}:${h.priority}`).join("|");
972
- useEffect(() => {
973
- if (serialized !== hintsRef.current) {
974
- hintsRef.current = serialized;
975
- ctx.register(id, hints);
976
- }
977
- return () => ctx.unregister(id);
978
- }, [id, serialized]);
979
- useInput((input, key) => {
980
- for (const binding of bindings) if ((Array.isArray(binding.match) ? binding.match : [binding.match]).some((m) => matchesKey(m, input, key))) {
981
- binding.handler(input, key);
982
- return;
983
- }
984
- });
985
- }
986
- //#endregion
987
- //#region src/ui/tui/primitives/PickerMenu.tsx
988
- /**
989
- * PickerMenu — Single and multi select.
990
- * Single mode: custom renderer with small triangle indicator.
991
- * Multi mode: checkbox glyphs with space to toggle.
992
- *
993
- * Key bindings are declared via useKeyBindings, which auto-registers
994
- * hints in the KeyboardHintsBar.
995
- */
996
- /**
997
- * Step through a column's options in `dir`, wrapping, until an enabled
998
- * option is found. Returns `from` unchanged if the column is entirely
999
- * disabled.
1000
- */
1001
- function stepEnabled(options, rows, from, dir) {
1002
- const colStart = Math.floor(from / rows) * rows;
1003
- const colLen = Math.min(rows, options.length - colStart);
1004
- let row = from % rows;
1005
- for (let i = 0; i < colLen; i++) {
1006
- row = (row + dir + colLen) % colLen;
1007
- const idx = colStart + row;
1008
- if (!options[idx]?.disabled) return idx;
1009
- }
1010
- return from;
1011
- }
1012
- /** Index of the first enabled option, for the initial focus. */
1013
- function firstEnabled(options) {
1014
- const idx = options.findIndex((o) => !o.disabled);
1015
- return idx === -1 ? 0 : idx;
1016
- }
1017
- const PickerMenu = ({ message, options, mode = "single", centered = false, columns = 1, optionMarginBottom = 0, onSelect }) => {
1018
- if (mode === "multi") return /* @__PURE__ */ jsx(MultiPickerMenu, {
1019
- message,
1020
- options,
1021
- centered,
1022
- columns,
1023
- optionMarginBottom,
1024
- onSelect
1025
- });
1026
- return /* @__PURE__ */ jsx(SinglePickerMenu, {
1027
- message,
1028
- options,
1029
- centered,
1030
- columns,
1031
- optionMarginBottom,
1032
- onSelect
1033
- });
1034
- };
1035
- /** Custom single-select with triangle indicator and accent highlight. */
1036
- const SinglePickerMenu = ({ message, options, centered = false, columns = 1, optionMarginBottom = 0, onSelect }) => {
1037
- const [focused, setFocused] = useState(() => firstEnabled(options));
1038
- const rows = Math.ceil(options.length / columns);
1039
- useEffect(() => {
1040
- if (focused >= options.length || options[focused]?.disabled) setFocused(firstEnabled(options));
1041
- }, [options, focused]);
1042
- const bindings = [{
1043
- match: ["upArrow", "downArrow"],
1044
- label: "↑↓",
1045
- action: "navigate",
1046
- handler: (_input, key) => {
1047
- if (key.upArrow) setFocused(stepEnabled(options, rows, focused, -1));
1048
- if (key.downArrow) setFocused(stepEnabled(options, rows, focused, 1));
1049
- }
1050
- }, {
1051
- match: "return",
1052
- label: "enter",
1053
- action: "select",
1054
- handler: () => {
1055
- const selected = options[focused];
1056
- if (selected && !selected.disabled) onSelect(selected.value);
1057
- }
1058
- }];
1059
- if (columns > 1) bindings.splice(1, 0, {
1060
- match: ["leftArrow", "rightArrow"],
1061
- label: "←→",
1062
- action: "navigate",
1063
- handler: (_input, key) => {
1064
- const col = Math.floor(focused / rows);
1065
- const row = focused % rows;
1066
- let next = focused;
1067
- if (key.leftArrow) {
1068
- const prevCol = col > 0 ? col - 1 : columns - 1;
1069
- next = Math.min(prevCol * rows + row, options.length - 1);
1070
- }
1071
- if (key.rightArrow) {
1072
- const nextCol = col < columns - 1 ? col + 1 : 0;
1073
- next = Math.min(nextCol * rows + row, options.length - 1);
1074
- }
1075
- if (options[next]?.disabled) next = stepEnabled(options, rows, next, 1);
1076
- setFocused(next);
1077
- }
1078
- });
1079
- useKeyBindings("single-picker", bindings);
1080
- const columnArrays = [];
1081
- for (let c = 0; c < columns; c++) columnArrays.push(options.slice(c * rows, c * rows + rows));
1082
- return /* @__PURE__ */ jsxs(Box, {
1083
- flexDirection: "column",
1084
- alignItems: centered ? "center" : void 0,
1085
- children: [/* @__PURE__ */ jsx(PromptLabel, { message }), /* @__PURE__ */ jsx(Box, {
1086
- flexDirection: "row",
1087
- gap: 4,
1088
- children: columnArrays.map((colOpts, colIdx) => /* @__PURE__ */ jsx(Box, {
1089
- flexDirection: "column",
1090
- children: colOpts.map((opt, rowIdx) => {
1091
- const flatIdx = colIdx * rows + rowIdx;
1092
- const isFocused = flatIdx === focused;
1093
- const label = opt.hint ? `${opt.label} (${opt.hint})` : opt.label;
1094
- return /* @__PURE__ */ jsxs(Box, {
1095
- gap: 1,
1096
- marginBottom: optionMarginBottom,
1097
- children: [
1098
- /* @__PURE__ */ jsx(Text, {
1099
- color: isFocused ? Colors.accent : void 0,
1100
- dimColor: !isFocused,
1101
- children: isFocused ? Icons.triangleSmallRight : " "
1102
- }),
1103
- opt.icon && /* @__PURE__ */ jsx(Text, {
1104
- color: opt.icon.color,
1105
- children: opt.icon.glyph
1106
- }),
1107
- /* @__PURE__ */ jsx(Text, {
1108
- color: opt.disabled ? Colors.muted : isFocused ? Colors.accent : void 0,
1109
- bold: isFocused && !opt.disabled,
1110
- dimColor: !isFocused || opt.disabled,
1111
- children: label
1112
- })
1113
- ]
1114
- }, flatIdx);
1115
- })
1116
- }, colIdx))
1117
- })]
1118
- });
1119
- };
1120
- /** Custom multi-select with checkbox glyphs and accent highlight. */
1121
- const MultiPickerMenu = ({ message, options, centered = false, columns = 1, optionMarginBottom = 0, onSelect }) => {
1122
- const [focused, setFocused] = useState(() => firstEnabled(options));
1123
- const [selected, setSelected] = useState(/* @__PURE__ */ new Set());
1124
- const rows = Math.ceil(options.length / columns);
1125
- useEffect(() => {
1126
- if (focused >= options.length || options[focused]?.disabled) setFocused(firstEnabled(options));
1127
- }, [options, focused]);
1128
- const bindings = [
1129
- {
1130
- match: ["upArrow", "downArrow"],
1131
- label: "↑↓",
1132
- action: "navigate",
1133
- handler: (_input, key) => {
1134
- if (key.upArrow) setFocused(stepEnabled(options, rows, focused, -1));
1135
- if (key.downArrow) setFocused(stepEnabled(options, rows, focused, 1));
1136
- }
1137
- },
1138
- {
1139
- match: "space",
1140
- label: "space",
1141
- action: "toggle",
1142
- handler: () => {
1143
- if (options[focused]?.disabled) return;
1144
- setSelected((prev) => {
1145
- const next = new Set(prev);
1146
- if (next.has(focused)) {
1147
- next.delete(focused);
1148
- return next;
1149
- }
1150
- if (options[focused]?.exclusive) return new Set([focused]);
1151
- for (const i of next) if (options[i]?.exclusive) next.delete(i);
1152
- next.add(focused);
1153
- return next;
1154
- });
1155
- }
1156
- },
1157
- {
1158
- match: "return",
1159
- label: "enter",
1160
- action: "confirm",
1161
- handler: () => {
1162
- if (selected.size === 0) {
1163
- const hovered = options[focused];
1164
- if (hovered && !hovered.disabled) onSelect(hovered.value);
1165
- } else onSelect([...selected].sort().map((i) => options[i].value));
1166
- }
1167
- }
1168
- ];
1169
- if (columns > 1) bindings.splice(1, 0, {
1170
- match: ["leftArrow", "rightArrow"],
1171
- label: "←→",
1172
- action: "navigate",
1173
- handler: (_input, key) => {
1174
- const col = Math.floor(focused / rows);
1175
- const row = focused % rows;
1176
- let next = focused;
1177
- if (key.leftArrow) {
1178
- const prevCol = col > 0 ? col - 1 : columns - 1;
1179
- next = Math.min(prevCol * rows + row, options.length - 1);
1180
- }
1181
- if (key.rightArrow) {
1182
- const nextCol = col < columns - 1 ? col + 1 : 0;
1183
- next = Math.min(nextCol * rows + row, options.length - 1);
1184
- }
1185
- if (options[next]?.disabled) next = stepEnabled(options, rows, next, 1);
1186
- setFocused(next);
1187
- }
1188
- });
1189
- useKeyBindings("multi-picker", bindings);
1190
- const columnArrays = [];
1191
- for (let c = 0; c < columns; c++) columnArrays.push(options.slice(c * rows, c * rows + rows));
1192
- return /* @__PURE__ */ jsxs(Box, {
1193
- flexDirection: "column",
1194
- alignItems: centered ? "center" : void 0,
1195
- children: [/* @__PURE__ */ jsx(PromptLabel, { message }), /* @__PURE__ */ jsx(Box, {
1196
- flexDirection: "row",
1197
- gap: 4,
1198
- marginLeft: centered ? 0 : 2,
1199
- marginTop: 1,
1200
- children: columnArrays.map((colOpts, colIdx) => /* @__PURE__ */ jsx(Box, {
1201
- flexDirection: "column",
1202
- children: colOpts.map((opt, rowIdx) => {
1203
- const flatIdx = colIdx * rows + rowIdx;
1204
- const isFocused = flatIdx === focused;
1205
- const isSelected = selected.has(flatIdx);
1206
- const label = opt.hint ? `${opt.label} (${opt.hint})` : opt.label;
1207
- const checkbox = isSelected ? Icons.squareFilled : Icons.squareOpen;
1208
- return /* @__PURE__ */ jsxs(Box, {
1209
- gap: 1,
1210
- marginBottom: optionMarginBottom,
1211
- children: [
1212
- /* @__PURE__ */ jsx(Text, {
1213
- color: isSelected ? "white" : Colors.muted,
1214
- dimColor: !isFocused && !isSelected,
1215
- children: checkbox
1216
- }),
1217
- opt.icon && /* @__PURE__ */ jsx(Text, {
1218
- color: opt.icon.color,
1219
- children: opt.icon.glyph
1220
- }),
1221
- /* @__PURE__ */ jsx(Text, {
1222
- color: opt.disabled ? Colors.muted : isFocused ? Colors.accent : void 0,
1223
- bold: isFocused && !opt.disabled,
1224
- dimColor: !isFocused || opt.disabled,
1225
- children: label
1226
- })
1227
- ]
1228
- }, flatIdx);
1229
- })
1230
- }, colIdx))
1231
- })]
1232
- });
1233
- };
1234
- //#endregion
1235
840
  //#region src/ui/tui/hooks/useStdoutDimensions.ts
1236
841
  /**
1237
842
  * useStdoutDimensions — Returns [columns, rows] and re-renders on terminal resize.
@@ -3899,7 +3504,7 @@ var neutralCrossSell = [{
3899
3504
  }];
3900
3505
  var slackApp = {
3901
3506
  "learnMoreUrl": "https://posthog.com/slack",
3902
- "setupUrl": "https://app.posthog.com/settings/project-integrations#integration-slack",
3507
+ "setupUrl": "https://app.posthog.com/integrations/slack",
3903
3508
  "headline": "@PostHog in Slack",
3904
3509
  "pitch": "Ask about your product data, debug issues, and generate PRs without leaving the thread.",
3905
3510
  "capabilities": ["Tag @PostHog with a bug, edit, or a feature idea. It will spin up a sandboxed environment, plan, edit files, run tests, and open a draft PR.", "Tag @PostHog with any data question. It's the same SQL-writing, statistically-minded assistant as PostHog AI, but it responds where you send work memes."]
@@ -5542,176 +5147,6 @@ const AUDIT_AREA_SLIDES = [
5542
5147
  }
5543
5148
  ];
5544
5149
  //#endregion
5545
- //#region src/ui/tui/screens/audit-3000/slides/eventQuality.tsx
5546
- const EventQualityVisual = () => /* @__PURE__ */ jsxs(VisualBox, { children: [
5547
- /* @__PURE__ */ jsxs(Text, { children: [/* @__PURE__ */ jsx(Text, {
5548
- color: "green",
5549
- children: "event_clicked "
5550
- }), /* @__PURE__ */ jsx(Text, {
5551
- color: "green",
5552
- children: "✓"
5553
- })] }),
5554
- /* @__PURE__ */ jsxs(Text, { children: [/* @__PURE__ */ jsx(Text, {
5555
- color: "yellow",
5556
- children: "eventClicked "
5557
- }), /* @__PURE__ */ jsx(Text, {
5558
- color: "yellow",
5559
- children: "~ duplicate?"
5560
- })] }),
5561
- /* @__PURE__ */ jsxs(Text, { children: [/* @__PURE__ */ jsx(Text, {
5562
- color: "yellow",
5563
- children: "click_event "
5564
- }), /* @__PURE__ */ jsx(Text, {
5565
- color: "yellow",
5566
- children: "~ duplicate?"
5567
- })] }),
5568
- /* @__PURE__ */ jsxs(Text, { children: [/* @__PURE__ */ jsx(Text, {
5569
- color: "red",
5570
- children: "big_kitchen_sink "
5571
- }), /* @__PURE__ */ jsx(Text, {
5572
- color: "red",
5573
- children: "✗ 22 props"
5574
- })] })
5575
- ] });
5576
- const EventQualitySlide = {
5577
- area: "Event Quality",
5578
- intro: [
5579
- "LEVEL 5: EVENT QUALITY. The capture call-sites are clean. The events themselves are the real boss fight.",
5580
- "Scanning for: naming inconsistencies, semantic duplicates, kitchen-sink event payloads, and (if your PostHog project is linked) which captured events actually drive insights and dashboards.",
5581
- "4 subagents fan out in parallel. The ticker shows them clearing checks live."
5582
- ],
5583
- visual: /* @__PURE__ */ jsx(EventQualityVisual, {}),
5584
- docsUrl: "https://posthog.com/docs/product-analytics/best-practices"
5585
- };
5586
- //#endregion
5587
- //#region src/ui/tui/screens/audit-3000/slides/featureFlags.tsx
5588
- const FeatureFlagsVisual = () => /* @__PURE__ */ jsxs(VisualBox, { children: [
5589
- /* @__PURE__ */ jsxs(Text, { children: [
5590
- /* @__PURE__ */ jsx(Text, {
5591
- color: "red",
5592
- children: "new-checkout-v2 "
5593
- }),
5594
- /* @__PURE__ */ jsx(Text, {
5595
- dimColor: true,
5596
- children: "no code refs "
5597
- }),
5598
- /* @__PURE__ */ jsx(Text, {
5599
- color: "red",
5600
- children: "DROP"
5601
- })
5602
- ] }),
5603
- /* @__PURE__ */ jsxs(Text, { children: [
5604
- /* @__PURE__ */ jsx(Text, {
5605
- color: "yellow",
5606
- children: "beta-dashboard "
5607
- }),
5608
- /* @__PURE__ */ jsx(Text, {
5609
- dimColor: true,
5610
- children: "1 ref, 100% on "
5611
- }),
5612
- /* @__PURE__ */ jsx(Text, {
5613
- color: "yellow",
5614
- children: "REVIEW"
5615
- })
5616
- ] }),
5617
- /* @__PURE__ */ jsxs(Text, { children: [
5618
- /* @__PURE__ */ jsx(Text, {
5619
- color: "green",
5620
- children: "killswitch-payments"
5621
- }),
5622
- /* @__PURE__ */ jsx(Text, {
5623
- dimColor: true,
5624
- children: "live experiment"
5625
- }),
5626
- /* @__PURE__ */ jsx(Text, {
5627
- color: "green",
5628
- children: "KEEP"
5629
- })
5630
- ] })
5631
- ] });
5632
- const FeatureFlagsSlide = {
5633
- area: "Feature Flags",
5634
- intro: [
5635
- "LEVEL 6: STALE FLAGS. Old flags add evaluation overhead and confuse the next engineer who wonders if a flag is still live.",
5636
- "Cross-referencing PostHog's stale-flag classification against your source tree. Each flag scored: safe-to-disable, needs-review, or unknown.",
5637
- "The final report ships with a copy-paste cleanup prompt. We never touch a flag."
5638
- ],
5639
- visual: /* @__PURE__ */ jsx(FeatureFlagsVisual, {}),
5640
- docsUrl: "https://posthog.com/docs/feature-flags"
5641
- };
5642
- //#endregion
5643
- //#region src/ui/tui/screens/audit-3000/slides/expansion.tsx
5644
- const ExpansionVisual = () => /* @__PURE__ */ jsxs(VisualBox, { children: [
5645
- /* @__PURE__ */ jsxs(Text, { children: [/* @__PURE__ */ jsx(Text, {
5646
- color: "cyan",
5647
- children: "product analytics "
5648
- }), /* @__PURE__ */ jsx(Text, {
5649
- color: "green",
5650
- children: "■■■■■"
5651
- })] }),
5652
- /* @__PURE__ */ jsxs(Text, { children: [
5653
- /* @__PURE__ */ jsx(Text, {
5654
- color: "cyan",
5655
- children: "error tracking "
5656
- }),
5657
- /* @__PURE__ */ jsx(Text, {
5658
- color: "red",
5659
- children: "□□□□□"
5660
- }),
5661
- /* @__PURE__ */ jsx(Text, {
5662
- dimColor: true,
5663
- children: " sentry detected"
5664
- })
5665
- ] }),
5666
- /* @__PURE__ */ jsxs(Text, { children: [
5667
- /* @__PURE__ */ jsx(Text, {
5668
- color: "cyan",
5669
- children: "session replay "
5670
- }),
5671
- /* @__PURE__ */ jsx(Text, {
5672
- color: "yellow",
5673
- children: "■■□□□"
5674
- }),
5675
- /* @__PURE__ */ jsx(Text, {
5676
- dimColor: true,
5677
- children: " partial"
5678
- })
5679
- ] }),
5680
- /* @__PURE__ */ jsxs(Text, { children: [
5681
- /* @__PURE__ */ jsx(Text, {
5682
- color: "cyan",
5683
- children: "llm observability "
5684
- }),
5685
- /* @__PURE__ */ jsx(Text, {
5686
- color: "red",
5687
- children: "□□□□□"
5688
- }),
5689
- /* @__PURE__ */ jsx(Text, {
5690
- dimColor: true,
5691
- children: " greenfield"
5692
- })
5693
- ] })
5694
- ] });
5695
- //#endregion
5696
- //#region src/ui/tui/screens/audit-3000/slides/index.ts
5697
- const AUDIT_3000_AREA_SLIDES = [
5698
- InstallationSlide,
5699
- IdentificationSlide,
5700
- EventCaptureSlide,
5701
- EventQualitySlide,
5702
- FeatureFlagsSlide,
5703
- {
5704
- area: "Use Case: Expansion",
5705
- intro: [
5706
- "BONUS ROUND: EXPANSION. You might be paying for tools PostHog covers natively.",
5707
- "Scanning for competitive SDKs (Sentry, LaunchDarkly, Mixpanel, Datadog, OpenTelemetry, GA4) and PostHog coverage gaps across 8 product surfaces.",
5708
- "8 subagents in two waves of 4. Each one returns one of: cross-sell, greenfield, gap, or pass."
5709
- ],
5710
- visual: /* @__PURE__ */ jsx(ExpansionVisual, {}),
5711
- docsUrl: "https://posthog.com/docs"
5712
- }
5713
- ];
5714
- //#endregion
5715
5150
  //#region src/ui/tui/screens/SlackConnectScreen.tsx
5716
5151
  /**
5717
5152
  * SlackConnectScreen — the dedicated "Connect Slack" step shown after the
@@ -6387,6 +5822,6 @@ const AiOptInRequiredScreen = ({ store }) => {
6387
5822
  });
6388
5823
  };
6389
5824
  //#endregion
6390
- export { useKeyBindings as A, EventPlanViewer as C, GroupedPickerMenu as D, ConfirmationInput as E, WizardStore as F, LoadingBox as M, SplitView as N, useStdoutDimensions as O, CardLayout as P, ScreenContainer as S, ModalOverlay as T, TipsCard as _, SlackConnectScreen as a, HNViewer as b, VisualBox as c, TAILORED_ROLES as d, McpScreen as f, ServiceHealthList as g, SEVERITY_ORDER as h, OutroScreen as i, ProgressList as j, PickerMenu as k, AuditChecksViewer as l, SEVERITY_LABEL as m, SkillSourceInfo as n, AUDIT_3000_AREA_SLIDES as o, IssueTable as p, useSkillEntry as r, AUDIT_AREA_SLIDES as s, AiOptInRequiredScreen as t, McpSuggestedPromptsScreen as u, LearnCard as v, LogViewer as w, TabContainer as x, ContentSequencer as y };
5825
+ export { SplitView as A, LogViewer as C, useStdoutDimensions as D, GroupedPickerMenu as E, WizardStore as M, ProgressList as O, EventPlanViewer as S, ConfirmationInput as T, LearnCard as _, SlackConnectScreen as a, TabContainer as b, AuditChecksViewer as c, McpScreen as d, IssueTable as f, TipsCard as g, ServiceHealthList as h, OutroScreen as i, CardLayout as j, LoadingBox as k, McpSuggestedPromptsScreen as l, SEVERITY_ORDER as m, SkillSourceInfo as n, AUDIT_AREA_SLIDES as o, SEVERITY_LABEL as p, useSkillEntry as r, VisualBox as s, AiOptInRequiredScreen as t, TAILORED_ROLES as u, ContentSequencer as v, ModalOverlay as w, ScreenContainer as x, HNViewer as y };
6391
5826
 
6392
- //# sourceMappingURL=AiOptInRequiredScreen-B8mgZbe5.js.map
5827
+ //# sourceMappingURL=AiOptInRequiredScreen-DPn1CCeD.js.map