agents-inc 0.153.0 → 0.154.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 (116) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/{chunk-EFU6P3B7.js → chunk-2IMYK4WN.js} +3 -3
  3. package/dist/{chunk-U2YSGBHA.js → chunk-4VCWL2IG.js} +33 -16
  4. package/dist/chunk-4VCWL2IG.js.map +1 -0
  5. package/dist/{chunk-ORJ5Y222.js → chunk-5MFJ24VM.js} +90 -24
  6. package/dist/chunk-5MFJ24VM.js.map +1 -0
  7. package/dist/{chunk-TY6CAOL7.js → chunk-7VZV4O6B.js} +3 -3
  8. package/dist/{chunk-4VYALFQZ.js → chunk-AKQ5QISO.js} +6 -6
  9. package/dist/{chunk-U2DNAHFE.js → chunk-AURY6RT6.js} +3 -3
  10. package/dist/{chunk-ACKC577F.js → chunk-B66SC72V.js} +3 -3
  11. package/dist/{chunk-WDAO3RUY.js → chunk-BZ4CZBOM.js} +3 -3
  12. package/dist/{chunk-NXQAY5U7.js → chunk-CBF4ZYV3.js} +4556 -4457
  13. package/dist/chunk-CBF4ZYV3.js.map +1 -0
  14. package/dist/{chunk-JFAUQDZM.js → chunk-CHNA5RVS.js} +3 -3
  15. package/dist/{chunk-2HC2SNRP.js → chunk-DRKSYJZ2.js} +1 -5
  16. package/dist/chunk-DRKSYJZ2.js.map +1 -0
  17. package/dist/{chunk-X5XJ6WKO.js → chunk-FMYHWKGG.js} +45 -4
  18. package/dist/chunk-FMYHWKGG.js.map +1 -0
  19. package/dist/{chunk-K7PJDWER.js → chunk-GUDGCFSF.js} +6 -6
  20. package/dist/{chunk-35VOK7XE.js → chunk-IPJOMAWC.js} +4355 -4355
  21. package/dist/{chunk-35VOK7XE.js.map → chunk-IPJOMAWC.js.map} +1 -1
  22. package/dist/{chunk-VGEBYCQZ.js → chunk-IXEDSKMH.js} +4 -15
  23. package/dist/chunk-IXEDSKMH.js.map +1 -0
  24. package/dist/{chunk-ZNDLUWWD.js → chunk-LA3JPESW.js} +3 -3
  25. package/dist/{chunk-M5HSTNYU.js → chunk-MJFIO5SX.js} +5 -23
  26. package/dist/chunk-MJFIO5SX.js.map +1 -0
  27. package/dist/{chunk-VECFAKM5.js → chunk-NFH6SA62.js} +4 -4
  28. package/dist/{chunk-R4SEU3DF.js → chunk-NKCY2ULI.js} +2 -2
  29. package/dist/{chunk-IO4VEW5U.js → chunk-ONWEOS77.js} +2 -2
  30. package/dist/{chunk-FRWKCE6R.js → chunk-PRJD5MMQ.js} +3 -3
  31. package/dist/{chunk-HEBPKK5L.js → chunk-QQTYMW7N.js} +11 -23
  32. package/dist/chunk-QQTYMW7N.js.map +1 -0
  33. package/dist/{chunk-KET3EVGX.js → chunk-QUDQTO3O.js} +3 -3
  34. package/dist/{chunk-BMGBA6HJ.js → chunk-R7JV22QK.js} +12 -12
  35. package/dist/{chunk-FIHTAFST.js → chunk-TUQF577Z.js} +30 -30
  36. package/dist/{chunk-FIHTAFST.js.map → chunk-TUQF577Z.js.map} +1 -1
  37. package/dist/{chunk-NXGMM5YN.js → chunk-UW44KSYL.js} +3 -3
  38. package/dist/{chunk-WG6V6VJV.js → chunk-WRRP47PY.js} +2 -2
  39. package/dist/{chunk-F7Z5I6GU.js → chunk-XMEIVWAS.js} +4 -4
  40. package/dist/{chunk-REKOWTIB.js → chunk-ZU6DAR4S.js} +42 -8
  41. package/dist/chunk-ZU6DAR4S.js.map +1 -0
  42. package/dist/commands/build/marketplace.js +6 -5
  43. package/dist/commands/build/marketplace.js.map +1 -1
  44. package/dist/commands/build/plugins.js +6 -6
  45. package/dist/commands/compile.js +48 -10
  46. package/dist/commands/compile.js.map +1 -1
  47. package/dist/commands/doctor.js +10 -10
  48. package/dist/commands/edit.js +93 -59
  49. package/dist/commands/edit.js.map +1 -1
  50. package/dist/commands/eject.js +10 -10
  51. package/dist/commands/init.js +29 -29
  52. package/dist/commands/list.js +7 -7
  53. package/dist/commands/search.js +29 -21
  54. package/dist/commands/search.js.map +1 -1
  55. package/dist/commands/uninstall.js +198 -147
  56. package/dist/commands/uninstall.js.map +1 -1
  57. package/dist/commands/update.js +5 -5
  58. package/dist/components/wizard/category-grid.js +3 -3
  59. package/dist/components/wizard/checkbox-grid.js +2 -2
  60. package/dist/components/wizard/domain-selection.js +8 -8
  61. package/dist/components/wizard/run-wizard-session.js +21 -21
  62. package/dist/components/wizard/skill-agent-summary.js +5 -5
  63. package/dist/components/wizard/source-grid.js +3 -3
  64. package/dist/components/wizard/stack-selection.js +5 -5
  65. package/dist/components/wizard/step-agents.js +8 -8
  66. package/dist/components/wizard/step-build.js +7 -7
  67. package/dist/components/wizard/step-confirm.js +8 -8
  68. package/dist/components/wizard/step-sources.js +7 -7
  69. package/dist/components/wizard/step-stack.js +6 -6
  70. package/dist/components/wizard/summary-panel.js +7 -7
  71. package/dist/components/wizard/wizard-layout.js +9 -9
  72. package/dist/components/wizard/wizard.js +20 -20
  73. package/dist/copy-local-skills-WVHJFRPK.js +14 -0
  74. package/dist/hooks/init.js +29 -29
  75. package/dist/load-agent-defs-5OT54J5M.js +15 -0
  76. package/dist/{loader-4U7UCE2Y.js → loader-JIZDTR4G.js} +2 -2
  77. package/dist/recompile-project-agents-VREEPBDV.js +20 -0
  78. package/dist/{source-loader-ZNSYJJCI.js → source-loader-OE6EJFPU.js} +4 -4
  79. package/dist/stores/wizard-store.js +4 -4
  80. package/package.json +1 -1
  81. package/src/schemas/plugin.schema.json +3 -0
  82. package/dist/chunk-2HC2SNRP.js.map +0 -1
  83. package/dist/chunk-HEBPKK5L.js.map +0 -1
  84. package/dist/chunk-M5HSTNYU.js.map +0 -1
  85. package/dist/chunk-NXQAY5U7.js.map +0 -1
  86. package/dist/chunk-ORJ5Y222.js.map +0 -1
  87. package/dist/chunk-REKOWTIB.js.map +0 -1
  88. package/dist/chunk-U2YSGBHA.js.map +0 -1
  89. package/dist/chunk-VGEBYCQZ.js.map +0 -1
  90. package/dist/chunk-X5XJ6WKO.js.map +0 -1
  91. package/dist/copy-local-skills-KF2RAVD3.js +0 -14
  92. package/dist/load-agent-defs-DGXGBU3Q.js +0 -15
  93. package/dist/recompile-project-agents-CJVBAWDJ.js +0 -20
  94. /package/dist/{chunk-EFU6P3B7.js.map → chunk-2IMYK4WN.js.map} +0 -0
  95. /package/dist/{chunk-TY6CAOL7.js.map → chunk-7VZV4O6B.js.map} +0 -0
  96. /package/dist/{chunk-4VYALFQZ.js.map → chunk-AKQ5QISO.js.map} +0 -0
  97. /package/dist/{chunk-U2DNAHFE.js.map → chunk-AURY6RT6.js.map} +0 -0
  98. /package/dist/{chunk-ACKC577F.js.map → chunk-B66SC72V.js.map} +0 -0
  99. /package/dist/{chunk-WDAO3RUY.js.map → chunk-BZ4CZBOM.js.map} +0 -0
  100. /package/dist/{chunk-JFAUQDZM.js.map → chunk-CHNA5RVS.js.map} +0 -0
  101. /package/dist/{chunk-K7PJDWER.js.map → chunk-GUDGCFSF.js.map} +0 -0
  102. /package/dist/{chunk-ZNDLUWWD.js.map → chunk-LA3JPESW.js.map} +0 -0
  103. /package/dist/{chunk-VECFAKM5.js.map → chunk-NFH6SA62.js.map} +0 -0
  104. /package/dist/{chunk-R4SEU3DF.js.map → chunk-NKCY2ULI.js.map} +0 -0
  105. /package/dist/{chunk-IO4VEW5U.js.map → chunk-ONWEOS77.js.map} +0 -0
  106. /package/dist/{chunk-FRWKCE6R.js.map → chunk-PRJD5MMQ.js.map} +0 -0
  107. /package/dist/{chunk-KET3EVGX.js.map → chunk-QUDQTO3O.js.map} +0 -0
  108. /package/dist/{chunk-BMGBA6HJ.js.map → chunk-R7JV22QK.js.map} +0 -0
  109. /package/dist/{chunk-NXGMM5YN.js.map → chunk-UW44KSYL.js.map} +0 -0
  110. /package/dist/{chunk-WG6V6VJV.js.map → chunk-WRRP47PY.js.map} +0 -0
  111. /package/dist/{chunk-F7Z5I6GU.js.map → chunk-XMEIVWAS.js.map} +0 -0
  112. /package/dist/{copy-local-skills-KF2RAVD3.js.map → copy-local-skills-WVHJFRPK.js.map} +0 -0
  113. /package/dist/{load-agent-defs-DGXGBU3Q.js.map → load-agent-defs-5OT54J5M.js.map} +0 -0
  114. /package/dist/{loader-4U7UCE2Y.js.map → loader-JIZDTR4G.js.map} +0 -0
  115. /package/dist/{recompile-project-agents-CJVBAWDJ.js.map → recompile-project-agents-VREEPBDV.js.map} +0 -0
  116. /package/dist/{source-loader-ZNSYJJCI.js.map → source-loader-OE6EJFPU.js.map} +0 -0
@@ -2,18 +2,13 @@
2
2
  import {
3
3
  SourceGrid,
4
4
  isRowInert
5
- } from "./chunk-U2DNAHFE.js";
5
+ } from "./chunk-AURY6RT6.js";
6
6
  import {
7
7
  useMeasuredHeight
8
8
  } from "./chunk-TSIU7DME.js";
9
- import {
10
- HOTKEY_SET_ALL_LOCAL,
11
- HOTKEY_SET_ALL_PLUGIN,
12
- isHotkey
13
- } from "./chunk-2HC2SNRP.js";
14
9
  import {
15
10
  useWizardStore
16
- } from "./chunk-HEBPKK5L.js";
11
+ } from "./chunk-QQTYMW7N.js";
17
12
 
18
13
  // src/cli/components/wizard/step-sources.tsx
19
14
  import { Box, useInput } from "ink";
@@ -29,13 +24,7 @@ var StepSources = ({ onContinue, onBack }) => {
29
24
  },
30
25
  [store]
31
26
  );
32
- useInput((input, key) => {
33
- if (isHotkey(input, HOTKEY_SET_ALL_LOCAL)) {
34
- store.setAllSourcesEject();
35
- }
36
- if (isHotkey(input, HOTKEY_SET_ALL_PLUGIN)) {
37
- store.setAllSourcesPlugin();
38
- }
27
+ useInput((_input, key) => {
39
28
  if (key.return) {
40
29
  onContinue();
41
30
  }
@@ -56,4 +45,4 @@ var StepSources = ({ onContinue, onBack }) => {
56
45
  export {
57
46
  StepSources
58
47
  };
59
- //# sourceMappingURL=chunk-VGEBYCQZ.js.map
48
+ //# sourceMappingURL=chunk-IXEDSKMH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/step-sources.tsx"],"sourcesContent":["import { Box, useInput } from \"ink\";\nimport React, { useCallback } from \"react\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type { InstallMode, SkillId } from \"../../types/index.js\";\nimport { useMeasuredHeight } from \"../hooks/use-measured-height.js\";\nimport { isRowInert, SourceGrid } from \"./source-grid.js\";\n\nexport type StepSourcesProps = {\n onContinue: () => void;\n onBack: () => void;\n};\n\nexport const StepSources: React.FC<StepSourcesProps> = ({ onContinue, onBack }) => {\n const store = useWizardStore();\n const { ref: gridRef, measuredHeight: gridHeight } = useMeasuredHeight();\n\n const handleGridSelect = useCallback(\n (skillId: SkillId, mode: Exclude<InstallMode, \"mixed\">) => {\n // Thread the acting scope from the editable Sources row: a dual-scope skill renders only\n // its project row here, so the switch targets the project entry and leaves the masked\n // global tombstone untouched. SourceGrid only fires onSelect for non-inert rows, so the\n // sole editable row for this skill carries the acting scope.\n const actingRow = store\n .buildSourceRows()\n .find((row) => row.skillId === skillId && !isRowInert(row));\n store.setInstallMode(skillId, mode, actingRow?.scope);\n },\n [store],\n );\n\n // No character hotkeys. The step's only install-mode surface is SourceGrid's per-row\n // SPACE, which returns on an inert row — so a locked global row cannot be committed\n // from here at all. The withdrawn bulk keys `l` / `p` had no such containment.\n useInput((_input, key) => {\n if (key.return) {\n onContinue();\n }\n if (key.escape) {\n onBack();\n }\n });\n\n return (\n <Box ref={gridRef} flexGrow={1} flexBasis={0}>\n <SourceGrid\n rows={store.buildSourceRows()}\n availableHeight={gridHeight}\n onSelect={handleGridSelect}\n />\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,KAAK,gBAAgB;AAC9B,SAAgB,mBAAmB;AA2C7B;AAhCC,IAAM,cAA0C,CAAC,EAAE,YAAY,OAAO,MAAM;AACjF,QAAM,QAAQ,eAAe;AAC7B,QAAM,EAAE,KAAK,SAAS,gBAAgB,WAAW,IAAI,kBAAkB;AAEvE,QAAM,mBAAmB;AAAA,IACvB,CAAC,SAAkB,SAAwC;AAKzD,YAAM,YAAY,MACf,gBAAgB,EAChB,KAAK,CAAC,QAAQ,IAAI,YAAY,WAAW,CAAC,WAAW,GAAG,CAAC;AAC5D,YAAM,eAAe,SAAS,MAAM,WAAW,KAAK;AAAA,IACtD;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AAKA,WAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,IAAI,QAAQ;AACd,iBAAW;AAAA,IACb;AACA,QAAI,IAAI,QAAQ;AACd,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SACE,oBAAC,OAAI,KAAK,SAAS,UAAU,GAAG,WAAW,GACzC;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,MAAM,gBAAgB;AAAA,MAC5B,iBAAiB;AAAA,MACjB,UAAU;AAAA;AAAA,EACZ,GACF;AAEJ;","names":[]}
@@ -6,13 +6,13 @@ import {
6
6
  HOTKEY_TOGGLE_LABELS,
7
7
  KEY_SPACE,
8
8
  isHotkey
9
- } from "./chunk-2HC2SNRP.js";
9
+ } from "./chunk-DRKSYJZ2.js";
10
10
  import {
11
11
  useSectionScroll
12
12
  } from "./chunk-Q5FLW4JG.js";
13
13
  import {
14
14
  getSkillById
15
- } from "./chunk-35VOK7XE.js";
15
+ } from "./chunk-IPJOMAWC.js";
16
16
  import {
17
17
  CLI_COLORS
18
18
  } from "./chunk-R54KIGN2.js";
@@ -266,4 +266,4 @@ var CategoryGrid = ({
266
266
  export {
267
267
  CategoryGrid
268
268
  };
269
- //# sourceMappingURL=chunk-ZNDLUWWD.js.map
269
+ //# sourceMappingURL=chunk-LA3JPESW.js.map
@@ -8,27 +8,25 @@ import {
8
8
  } from "./chunk-JC7DBPRD.js";
9
9
  import {
10
10
  SummaryPanel
11
- } from "./chunk-VECFAKM5.js";
11
+ } from "./chunk-NFH6SA62.js";
12
12
  import {
13
13
  getDomainDisplayName,
14
14
  getStackName
15
- } from "./chunk-JFAUQDZM.js";
15
+ } from "./chunk-CHNA5RVS.js";
16
16
  import {
17
17
  HOTKEY_INFO,
18
18
  HOTKEY_SCOPE,
19
- HOTKEY_SET_ALL_LOCAL,
20
- HOTKEY_SET_ALL_PLUGIN,
21
19
  HOTKEY_TOGGLE_LABELS,
22
20
  KEY_LABEL_ENTER,
23
21
  KEY_LABEL_ESC,
24
22
  KEY_LABEL_SPACE,
25
23
  isInfoPanelAvailable
26
- } from "./chunk-2HC2SNRP.js";
24
+ } from "./chunk-DRKSYJZ2.js";
27
25
  import {
28
26
  getActiveStepFlow,
29
27
  orderDomains,
30
28
  useWizardStore
31
- } from "./chunk-HEBPKK5L.js";
29
+ } from "./chunk-QQTYMW7N.js";
32
30
  import {
33
31
  formatTerminalTooSmallMessage,
34
32
  isTerminalLargeEnough
@@ -204,22 +202,6 @@ var WizardLayout = ({
204
202
  isVisible: (store.step === "build" || store.step === "agents") && !store.isEditingFromGlobalScope
205
203
  }
206
204
  ),
207
- /* @__PURE__ */ jsx(
208
- DefinitionItem,
209
- {
210
- label: "Set all local",
211
- values: [HOTKEY_SET_ALL_LOCAL.label],
212
- isVisible: store.step === "sources"
213
- }
214
- ),
215
- /* @__PURE__ */ jsx(
216
- DefinitionItem,
217
- {
218
- label: "Set all plugin",
219
- values: [HOTKEY_SET_ALL_PLUGIN.label],
220
- isVisible: store.step === "sources"
221
- }
222
- ),
223
205
  /* @__PURE__ */ jsx(
224
206
  DefinitionItem,
225
207
  {
@@ -239,4 +221,4 @@ export {
239
221
  useTerminalDimensions,
240
222
  WizardLayout
241
223
  };
242
- //# sourceMappingURL=chunk-M5HSTNYU.js.map
224
+ //# sourceMappingURL=chunk-MJFIO5SX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/wizard-layout.tsx","../src/cli/components/hooks/use-terminal-dimensions.ts"],"sourcesContent":["import { Box, Text } from \"ink\";\nimport React, { Fragment } from \"react\";\nimport { CLI_COLORS, FALLBACK_DOMAIN, LOGO_MIN_TERMINAL_ROWS } from \"../../consts.js\";\nimport type { StartupMessage } from \"../../utils/logger.js\";\nimport { formatTerminalTooSmallMessage, isTerminalLargeEnough } from \"../../utils/terminal.js\";\nimport { getActiveStepFlow, useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport { useTerminalDimensions } from \"../hooks/use-terminal-dimensions.js\";\nimport { SummaryPanel } from \"./summary-panel.js\";\nimport { Toast } from \"./toast.js\";\nimport {\n HOTKEY_INFO,\n HOTKEY_SCOPE,\n HOTKEY_TOGGLE_LABELS,\n KEY_LABEL_ENTER,\n KEY_LABEL_ESC,\n KEY_LABEL_SPACE,\n isInfoPanelAvailable,\n} from \"./hotkeys.js\";\nimport {\n WizardTabs,\n wizardTabsFor,\n type DomainNavProps,\n type TabDropdownProps,\n} from \"./wizard-tabs.js\";\nimport { getDomainDisplayName, getStackName, orderDomains } from \"./utils.js\";\n\ntype KeyHintProps = {\n isVisible?: boolean;\n label: string;\n values: readonly string[];\n};\n\nconst DefinitionItem: React.FC<KeyHintProps> = ({ isVisible = true, label, values }) => {\n if (!isVisible) {\n return null;\n }\n\n return (\n <Text>\n {values.map((value) => (\n <Fragment key={value}>\n <Text backgroundColor={CLI_COLORS.LABEL_BG} color={CLI_COLORS.UNFOCUSED}>\n {\" \"}\n {value}{\" \"}\n </Text>{\" \"}\n </Fragment>\n ))}\n <Text>{label}</Text>\n </Text>\n );\n};\n\nconst HOT_KEYS = [\n { label: \"select\", values: [KEY_LABEL_SPACE] },\n { label: \"continue\", values: [KEY_LABEL_ENTER] },\n { label: \"back\", values: [KEY_LABEL_ESC] },\n] as const satisfies readonly { label: string; values: readonly string[] }[];\n\nconst WizardFooter = () => {\n return (\n <Box\n columnGap={2}\n borderTop\n borderRight={false}\n borderBottom\n borderLeft={false}\n borderColor=\"blackBright\"\n borderStyle=\"single\"\n paddingLeft={1}\n paddingRight={1}\n >\n {HOT_KEYS.map((hotkey) => (\n <DefinitionItem {...hotkey} key={hotkey.label} />\n ))}\n </Box>\n );\n};\n\ntype WizardLayoutProps = {\n version?: string | undefined;\n logo?: string | undefined;\n startupMessages?: StartupMessage[] | undefined;\n children: React.ReactNode;\n};\n\n/**\n * How many buffered messages the band paints before it counts the rest instead.\n * A source that cannot resolve its own relationships warns once per unresolved\n * name — thousands, for a source with a broken `skill-rules.ts` — and every line\n * is a row taken from the step below it.\n *\n * Two budgets, because a row is worth more at some heights than others: a\n * terminal short enough that the logo is already dropped for starving the\n * content cannot spare four rows for news either, and there it paints the first\n * message and counts the rest. The first is the one that matters — the fetch\n * speaks before anything is parsed, so an unreachable source is message one.\n */\nconst MAX_PAINTED_STARTUP_MESSAGES = 3;\nconst MAX_PAINTED_STARTUP_MESSAGES_CRAMPED = 1;\n\nfunction paintedStartupMessageCount(terminalHeight: number): number {\n return terminalHeight >= LOGO_MIN_TERMINAL_ROWS\n ? MAX_PAINTED_STARTUP_MESSAGES\n : MAX_PAINTED_STARTUP_MESSAGES_CRAMPED;\n}\n\nconst STARTUP_MESSAGE_COLOR = {\n info: CLI_COLORS.NEUTRAL,\n warn: CLI_COLORS.WARNING,\n error: CLI_COLORS.ERROR,\n} as const satisfies Record<StartupMessage[\"level\"], string>;\n\n/**\n * What the load said before Ink took the terminal.\n *\n * `warn()` writes to stderr, which the wizard's own `clearTerminal` would wipe,\n * so a load that opens a wizard buffers instead (`lib/operations/source/load-source.ts`)\n * and hands the buffer here. This band is the only place those lines are ever\n * seen — the source-unreachable warning among them.\n *\n * It sits above the step rather than over it, and does not shrink: a warning\n * compressed by Yoga overprints into an unreadable row, which is worse than the\n * row it would have cost the step.\n */\nconst StartupMessages: React.FC<{ messages: StartupMessage[]; terminalHeight: number }> = ({\n messages,\n terminalHeight,\n}) => {\n if (messages.length === 0) return null;\n\n const painted = messages.slice(0, paintedStartupMessageCount(terminalHeight));\n const counted = messages.length - painted.length;\n\n return (\n <Box flexDirection=\"column\" flexShrink={0} paddingX={1}>\n {painted.map((message, index) => (\n <Text key={index} color={STARTUP_MESSAGE_COLOR[message.level]}>\n {message.text}\n </Text>\n ))}\n {counted > 0 && <Text color={CLI_COLORS.NEUTRAL}>{`... and ${counted} more`}</Text>}\n </Box>\n );\n};\n\nconst STEP_DROPDOWN_LABEL: Partial<Record<WizardStep, string>> = {\n stack: \"Choose a stack\",\n domains: \"Select domains\",\n sources: \"Customize skill sources\",\n agents: \"Select agents\",\n};\n\n/**\n * What the wizard paints instead of itself while the terminal is below\n * `MIN_TERMINAL_SIZE` (consts.ts). It REPLACES the wizard tree rather than\n * covering it: Ink lays a still-mounted tree out at the small size regardless of\n * what is drawn on top, so an overlay leaves the squeezed content bleeding\n * underneath.\n */\nconst TerminalTooSmall: React.FC<{ columns: number }> = ({ columns }) => (\n <Box paddingX={1} paddingY={1}>\n <Text color={CLI_COLORS.WARNING}>{formatTerminalTooSmallMessage(columns)}</Text>\n </Box>\n);\n\nfunction resolveDropdownLabel(\n step: WizardStep,\n selectedStackId: string | null,\n): string | undefined {\n if (step === \"confirm\") {\n const stackName = getStackName(selectedStackId);\n return stackName ? `Ready to install ${stackName}` : \"Ready to install your custom stack\";\n }\n return STEP_DROPDOWN_LABEL[step];\n}\n\nexport const WizardLayout: React.FC<WizardLayoutProps> = ({\n version,\n logo,\n startupMessages = [],\n children,\n}) => {\n const store = useWizardStore();\n const { columns: terminalWidth, rows: terminalHeight } = useTerminalDimensions();\n\n // The startup gate cannot catch a terminal that shrinks after launch, and\n // `useTerminalDimensions` already re-renders on resize — so the same check\n // lives here, on the value that hook returns.\n if (!isTerminalLargeEnough(terminalWidth, terminalHeight)) {\n return <TerminalTooSmall columns={terminalWidth} />;\n }\n\n const { completedSteps, skippedSteps } = store.getStepProgress();\n\n const domainNav: DomainNavProps | undefined =\n store.step === \"build\" && store.selectedDomains.length > 0\n ? {\n domains: orderDomains(store.selectedDomains),\n activeDomain: store.getCurrentDomain() || store.selectedDomains[0] || FALLBACK_DOMAIN,\n getDomainLabel: getDomainDisplayName,\n }\n : undefined;\n\n // The logo is decoration; the stack list is the content. Below the threshold\n // its six rows starve that list's viewport until the shared scroll gate stops\n // clipping and the rows bleed over the footer.\n const terminalHasRoomForLogo = terminalHeight >= LOGO_MIN_TERMINAL_ROWS;\n const shouldRenderLogo = !!logo && store.step === \"stack\" && terminalHasRoomForLogo;\n\n const dropdownLabel = resolveDropdownLabel(store.step, store.selectedStackId);\n const dropdowns: Partial<Record<WizardStep, TabDropdownProps>> = dropdownLabel\n ? { [store.step]: { items: [{ id: dropdownLabel, label: dropdownLabel }] } }\n : {};\n\n return (\n <Box flexDirection=\"column\" paddingX={1} height={terminalHeight}>\n {shouldRenderLogo && (\n <Box flexDirection=\"row\" marginTop={1} columnGap={1}>\n <Text>{logo}</Text>\n </Box>\n )}\n <WizardTabs\n steps={wizardTabsFor(getActiveStepFlow())}\n currentStep={store.step}\n completedSteps={completedSteps}\n skippedSteps={skippedSteps}\n version={version}\n domainNav={domainNav}\n dropdowns={dropdowns}\n />\n <StartupMessages messages={startupMessages} terminalHeight={terminalHeight} />\n {store.showInfo ? (\n <>\n <Box flexDirection=\"column\" flexGrow={1} flexBasis={0} marginTop={1}>\n <SummaryPanel />\n </Box>\n <WizardFooter />\n </>\n ) : (\n <>\n <Box flexDirection=\"column\" flexGrow={1} flexBasis={0} marginTop={1}>\n {children}\n </Box>\n <Box paddingX={1} columnGap={2} marginTop={2}>\n <DefinitionItem\n label=\"Labels\"\n values={[HOTKEY_TOGGLE_LABELS.label]}\n isVisible={store.step === \"build\"}\n />\n <DefinitionItem\n label=\"Scope\"\n values={[HOTKEY_SCOPE.label]}\n isVisible={\n (store.step === \"build\" || store.step === \"agents\") &&\n !store.isEditingFromGlobalScope\n }\n />\n <DefinitionItem\n label=\"Info\"\n values={[HOTKEY_INFO.label]}\n isVisible={isInfoPanelAvailable(store.step)}\n />\n </Box>\n <WizardFooter />\n {store.toastMessage && (\n <Box position=\"absolute\" marginTop={terminalHeight - 4}>\n <Toast>{store.toastMessage}</Toast>\n </Box>\n )}\n </>\n )}\n </Box>\n );\n};\n","import { useState, useEffect } from \"react\";\nimport { useStdout } from \"ink\";\n\nconst DEFAULT_COLUMNS = 80;\nconst DEFAULT_ROWS = 24;\n\nexport type TerminalDimensions = {\n /** Terminal width in columns */\n columns: number;\n /** Terminal height in rows */\n rows: number;\n};\n\n/**\n * Tracks terminal dimensions reactively. Re-renders on resize.\n *\n * Falls back to DEFAULT_COLUMNS x DEFAULT_ROWS when stdout is not a TTY\n * (e.g., piped output, CI environments, tests).\n */\nexport function useTerminalDimensions(): TerminalDimensions {\n const { stdout } = useStdout();\n\n const [dimensions, setDimensions] = useState<TerminalDimensions>(() => ({\n columns: stdout.columns || DEFAULT_COLUMNS,\n rows: stdout.rows || DEFAULT_ROWS,\n }));\n\n useEffect(() => {\n const handleResize = () => {\n setDimensions({\n columns: stdout.columns || DEFAULT_COLUMNS,\n rows: stdout.rows || DEFAULT_ROWS,\n });\n };\n\n stdout.on(\"resize\", handleResize);\n return () => {\n stdout.off(\"resize\", handleResize);\n };\n }, [stdout]);\n\n return dimensions;\n}\n"],"mappings":"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","names":["Fragment"]}
@@ -4,16 +4,16 @@ import {
4
4
  } from "./chunk-TSIU7DME.js";
5
5
  import {
6
6
  getStackName
7
- } from "./chunk-JFAUQDZM.js";
7
+ } from "./chunk-CHNA5RVS.js";
8
8
  import {
9
9
  ScrollAffordance
10
10
  } from "./chunk-6CNRMCFM.js";
11
11
  import {
12
12
  SkillAgentSummary
13
- } from "./chunk-ACKC577F.js";
13
+ } from "./chunk-B66SC72V.js";
14
14
  import {
15
15
  useWizardStore
16
- } from "./chunk-HEBPKK5L.js";
16
+ } from "./chunk-QQTYMW7N.js";
17
17
  import {
18
18
  ALL_SKILLS_EJECTED_LABEL,
19
19
  CLI_COLORS,
@@ -121,4 +121,4 @@ var SummaryPanel = () => {
121
121
  export {
122
122
  SummaryPanel
123
123
  };
124
- //# sourceMappingURL=chunk-VECFAKM5.js.map
124
+ //# sourceMappingURL=chunk-NFH6SA62.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SummaryPanel
4
- } from "./chunk-VECFAKM5.js";
4
+ } from "./chunk-NFH6SA62.js";
5
5
 
6
6
  // src/cli/components/wizard/step-confirm.tsx
7
7
  import { useInput } from "ink";
@@ -22,4 +22,4 @@ var StepConfirm = ({ onComplete, onBack }) => {
22
22
  export {
23
23
  StepConfirm
24
24
  };
25
- //# sourceMappingURL=chunk-R4SEU3DF.js.map
25
+ //# sourceMappingURL=chunk-NKCY2ULI.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-V3ENMW7G.js";
5
5
  import {
6
6
  KEY_SPACE
7
- } from "./chunk-2HC2SNRP.js";
7
+ } from "./chunk-DRKSYJZ2.js";
8
8
  import {
9
9
  CLI_COLORS,
10
10
  UI_SYMBOLS
@@ -108,4 +108,4 @@ var CheckboxGrid = ({
108
108
  export {
109
109
  CheckboxGrid
110
110
  };
111
- //# sourceMappingURL=chunk-IO4VEW5U.js.map
111
+ //# sourceMappingURL=chunk-ONWEOS77.js.map
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getAgentDefinitions
4
- } from "./chunk-FIHTAFST.js";
4
+ } from "./chunk-TUQF577Z.js";
5
5
  import {
6
6
  loadMergedAgents
7
- } from "./chunk-U2YSGBHA.js";
7
+ } from "./chunk-4VCWL2IG.js";
8
8
 
9
9
  // src/cli/lib/operations/project/load-agent-defs.ts
10
10
  async function loadAgentDefs(options) {
@@ -20,4 +20,4 @@ async function loadAgentDefs(options) {
20
20
  export {
21
21
  loadAgentDefs
22
22
  };
23
- //# sourceMappingURL=chunk-FRWKCE6R.js.map
23
+ //# sourceMappingURL=chunk-PRJD5MMQ.js.map
@@ -8,15 +8,15 @@ import {
8
8
  isActiveAt,
9
9
  isGlobalTombstone,
10
10
  isProjectOwned
11
- } from "./chunk-NXQAY5U7.js";
11
+ } from "./chunk-CBF4ZYV3.js";
12
12
  import {
13
13
  warn
14
- } from "./chunk-U2YSGBHA.js";
14
+ } from "./chunk-4VCWL2IG.js";
15
15
  import {
16
16
  getCategoryDomain,
17
17
  getSkillById,
18
18
  matrix
19
- } from "./chunk-35VOK7XE.js";
19
+ } from "./chunk-IPJOMAWC.js";
20
20
  import {
21
21
  typedEntries,
22
22
  typedFromEntries,
@@ -246,6 +246,10 @@ function wouldOverwriteGlobalEject(config, liveConfigs, installedSkillConfigs) {
246
246
  if (!globalEjectInstalled) return false;
247
247
  return !liveConfigs.some((sc) => sc.id === config.id && sc.excluded);
248
248
  }
249
+ function isInheritedGlobalSlot(installed, id, scope) {
250
+ if (installed === null) return false;
251
+ return scope === "global" && hasGlobalActive(installed, id);
252
+ }
249
253
  function withActiveEntrySource(configs, id, scope, source) {
250
254
  return configs.map(
251
255
  (sc) => sc.id === id && !sc.excluded && sc.scope === scope ? { ...sc, source } : sc
@@ -793,6 +797,9 @@ var useWizardStore = create((set, get) => ({
793
797
  warn("Ignoring setInstallMode call with empty skillId");
794
798
  return state;
795
799
  }
800
+ if (isInheritedGlobalSlot(state.installedSkillConfigs, skillId, scope) && !state.isEditingFromGlobalScope) {
801
+ return state;
802
+ }
796
803
  const source = sourceForInstallMode(getSkillById(skillId), mode);
797
804
  return {
798
805
  skillConfigs: withActiveEntrySource(state.skillConfigs, skillId, scope, source)
@@ -906,25 +913,6 @@ var useWizardStore = create((set, get) => ({
906
913
  const state = get();
907
914
  return state.currentDomainIndex > 0;
908
915
  },
909
- setAllSourcesEject: () => {
910
- set((state) => ({
911
- // Never touch tombstones — a dual-scope skill's excluded global tombstone keeps describing
912
- // the masked global install. The bulk set-all applies only to active entries, mirroring the
913
- // D-262 per-skill setSkillSource/setSourceSelection guard (D-265).
914
- skillConfigs: state.skillConfigs.map(
915
- (sc) => sc.excluded ? sc : { ...sc, source: EJECT_SOURCE }
916
- )
917
- }));
918
- },
919
- setAllSourcesPlugin: () => {
920
- set((state) => ({
921
- // Never touch tombstones (see setAllSourcesEject) — the excluded global tombstone keeps its
922
- // marketplace source describing the masked global install (D-265).
923
- skillConfigs: state.skillConfigs.map(
924
- (sc) => sc.excluded ? sc : { ...sc, source: marketplaceSourceName(getSkillById(sc.id)) }
925
- )
926
- }));
927
- },
928
916
  buildSourceRows: () => {
929
917
  const state = get();
930
918
  const selectedTechnologies = get().getAllSelectedTechnologies();
@@ -1046,4 +1034,4 @@ export {
1046
1034
  useWizardStore,
1047
1035
  hydrateWizardStore
1048
1036
  };
1049
- //# sourceMappingURL=chunk-HEBPKK5L.js.map
1037
+ //# sourceMappingURL=chunk-QQTYMW7N.js.map