@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.
- package/README.md +61 -2
- package/dist/{AiOptInRequiredScreen-B8mgZbe5.js → AiOptInRequiredScreen-DPn1CCeD.js} +12 -577
- package/dist/AiOptInRequiredScreen-DPn1CCeD.js.map +1 -0
- package/dist/{add-mcp-server-to-clients-lCxOS1A1.js → add-mcp-server-to-clients-BU8Owthq.js} +4 -4
- package/dist/{add-mcp-server-to-clients-lCxOS1A1.js.map → add-mcp-server-to-clients-BU8Owthq.js.map} +1 -1
- package/dist/{agent-interface-BPCzPvK-.js → agent-interface-CysYcZl5.js} +6 -7
- package/dist/agent-interface-CysYcZl5.js.map +1 -0
- package/dist/{agent-runner-DgzF2mga.js → agent-runner-Br0OxBxd.js} +8 -8
- package/dist/{agent-runner-DgzF2mga.js.map → agent-runner-Br0OxBxd.js.map} +1 -1
- package/dist/{analytics-BZv-cKyn.js → analytics-BOWrR4qd.js} +22 -2
- package/dist/analytics-BOWrR4qd.js.map +1 -0
- package/dist/{api-BkLZ8BWm.js → api-RXTR8yZo.js} +3 -3
- package/dist/{api-BkLZ8BWm.js.map → api-RXTR8yZo.js.map} +1 -1
- package/dist/bin.js +875 -423
- package/dist/bin.js.map +1 -1
- package/dist/{ci-install-DBARq5LX.js → ci-install-BscZ60Ec.js} +5 -5
- package/dist/{ci-install-DBARq5LX.js.map → ci-install-BscZ60Ec.js.map} +1 -1
- package/dist/{debug-Ckumcrye.js → debug-BUdVZP84.js} +2 -2
- package/dist/{debug-Ckumcrye.js.map → debug-BUdVZP84.js.map} +1 -1
- package/dist/{debug-DLsuyfln.js → debug-BgH07S-e.js} +1 -1
- package/dist/{environment-DUh_8hqW.js → environment-G0Hv6_JI.js} +3 -3
- package/dist/{environment-DUh_8hqW.js.map → environment-G0Hv6_JI.js.map} +1 -1
- package/dist/{interactive-DeiHgviS.js → interactive-fh2iyewb.js} +3 -3
- package/dist/{interactive-DeiHgviS.js.map → interactive-fh2iyewb.js.map} +1 -1
- package/dist/{mcp-prompt-streaming-kEJgmB30.js → mcp-prompt-streaming-DUtbxnNy.js} +4 -4
- package/dist/{mcp-prompt-streaming-kEJgmB30.js.map → mcp-prompt-streaming-DUtbxnNy.js.map} +1 -1
- package/dist/{non-interactive-I4ifOSau.js → non-interactive-BfqXlY8R.js} +2 -2
- package/dist/{non-interactive-I4ifOSau.js.map → non-interactive-BfqXlY8R.js.map} +1 -1
- package/dist/{package-manager-fUeLORHg.js → package-manager-Ca1maxU-.js} +2 -2
- package/dist/{package-manager-fUeLORHg.js.map → package-manager-Ca1maxU-.js.map} +1 -1
- package/dist/{playground-DLLIz4Ql.js → playground-4sqLVVJL.js} +5 -10
- package/dist/{playground-DLLIz4Ql.js.map → playground-4sqLVVJL.js.map} +1 -1
- package/dist/{posthog-integration-COcPewVt.js → posthog-integration-Bz3HWkHn.js} +11 -11
- package/dist/{posthog-integration-COcPewVt.js.map → posthog-integration-Bz3HWkHn.js.map} +1 -1
- package/dist/{provisioning-7xU12_S9.js → provisioning-CgwvlsIl.js} +3 -3
- package/dist/{provisioning-7xU12_S9.js.map → provisioning-CgwvlsIl.js.map} +1 -1
- package/dist/{registry-YwaF-aD8.js → registry-CEnQVctL.js} +4 -4
- package/dist/{registry-YwaF-aD8.js.map → registry-CEnQVctL.js.map} +1 -1
- package/dist/{setup-utils-Cr4FxJDl.js → setup-utils-Doh69vo4.js} +8 -8
- package/dist/{setup-utils-Cr4FxJDl.js.map → setup-utils-Doh69vo4.js.map} +1 -1
- package/dist/{start-tui--E4PXdwG.js → start-tui-CywbSvZE.js} +54 -1030
- package/dist/start-tui-CywbSvZE.js.map +1 -0
- package/dist/{steps-CxUxdK4V.js → steps-DJojDYQ-.js} +6 -6
- package/dist/{steps-CxUxdK4V.js.map → steps-DJojDYQ-.js.map} +1 -1
- package/dist/{telemetry-BS7yw3TP.js → telemetry-8zMpaIuK.js} +3 -3
- package/dist/{telemetry-BS7yw3TP.js.map → telemetry-8zMpaIuK.js.map} +1 -1
- package/dist/{urls-BW23_XbC.js → urls-BUfvQmU4.js} +2 -2
- package/dist/{urls-BW23_XbC.js.map → urls-BUfvQmU4.js.map} +1 -1
- package/dist/{wizard-abort-E66_R4S7.js → wizard-abort-BdGW4Tvi.js} +3 -3
- package/dist/{wizard-abort-E66_R4S7.js.map → wizard-abort-BdGW4Tvi.js.map} +1 -1
- package/dist/{wizard-abort-BPsnXKY5.js → wizard-abort-Ni-mKJ58.js} +1 -1
- package/package.json +2 -2
- package/dist/AiOptInRequiredScreen-B8mgZbe5.js.map +0 -1
- package/dist/agent-interface-BPCzPvK-.js.map +0 -1
- package/dist/analytics-BZv-cKyn.js.map +0 -1
- 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-
|
|
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-
|
|
4
|
-
import { i as withUtm, n as openTrackedLink } from "./telemetry-
|
|
5
|
-
import { n as getCloudUrlFromRegion } from "./urls-
|
|
6
|
-
import { a as fetchUserData, i as fetchSlackConnected } from "./api-
|
|
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-
|
|
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-
|
|
10
|
-
import { a as
|
|
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,
|
|
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/
|
|
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 {
|
|
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-
|
|
5827
|
+
//# sourceMappingURL=AiOptInRequiredScreen-DPn1CCeD.js.map
|