@brainervirus/workit-claude-code 8.43.1 → 8.43.2

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/dist/workit.js CHANGED
@@ -9417,7 +9417,7 @@ var package_default;
9417
9417
  var init_package = __esm(() => {
9418
9418
  package_default = {
9419
9419
  name: "@brainervirus/workit-cli",
9420
- version: "8.43.1",
9420
+ version: "8.43.2",
9421
9421
  private: false,
9422
9422
  description: "Workit CLI — setup wizard, doctor, and task control for agentic coding workflows",
9423
9423
  keywords: [
@@ -9455,13 +9455,13 @@ var init_package = __esm(() => {
9455
9455
  },
9456
9456
  dependencies: {
9457
9457
  "@babel/parser": "7.29.9",
9458
- "@brainervirus/workit-cursor": "^8.43.1",
9458
+ "@brainervirus/workit-cursor": "^8.43.2",
9459
9459
  "@inkjs/ui": "2.0.0",
9460
9460
  ink: "7.1.1",
9461
9461
  react: "19.2.8"
9462
9462
  },
9463
9463
  devDependencies: {
9464
- "@brainervirus/workit-core": "^8.43.1"
9464
+ "@brainervirus/workit-core": "^8.43.2"
9465
9465
  },
9466
9466
  engines: {
9467
9467
  node: ">=24"
@@ -65417,6 +65417,258 @@ var init_build3 = __esm(async () => {
65417
65417
  init_types();
65418
65418
  });
65419
65419
 
65420
+ // node_modules/react/cjs/react-jsx-dev-runtime.development.js
65421
+ var require_react_jsx_dev_runtime_development = __commonJS(function(exports) {
65422
+ var React = __toESM(require_react());
65423
+ (function() {
65424
+ function getComponentNameFromType(type) {
65425
+ if (type == null)
65426
+ return null;
65427
+ if (typeof type === "function")
65428
+ return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null;
65429
+ if (typeof type === "string")
65430
+ return type;
65431
+ switch (type) {
65432
+ case REACT_FRAGMENT_TYPE:
65433
+ return "Fragment";
65434
+ case REACT_PROFILER_TYPE:
65435
+ return "Profiler";
65436
+ case REACT_STRICT_MODE_TYPE:
65437
+ return "StrictMode";
65438
+ case REACT_SUSPENSE_TYPE:
65439
+ return "Suspense";
65440
+ case REACT_SUSPENSE_LIST_TYPE:
65441
+ return "SuspenseList";
65442
+ case REACT_ACTIVITY_TYPE:
65443
+ return "Activity";
65444
+ }
65445
+ if (typeof type === "object")
65446
+ switch (typeof type.tag === "number" && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof) {
65447
+ case REACT_PORTAL_TYPE:
65448
+ return "Portal";
65449
+ case REACT_CONTEXT_TYPE:
65450
+ return type.displayName || "Context";
65451
+ case REACT_CONSUMER_TYPE:
65452
+ return (type._context.displayName || "Context") + ".Consumer";
65453
+ case REACT_FORWARD_REF_TYPE:
65454
+ var innerType = type.render;
65455
+ type = type.displayName;
65456
+ type || (type = innerType.displayName || innerType.name || "", type = type !== "" ? "ForwardRef(" + type + ")" : "ForwardRef");
65457
+ return type;
65458
+ case REACT_MEMO_TYPE:
65459
+ return innerType = type.displayName || null, innerType !== null ? innerType : getComponentNameFromType(type.type) || "Memo";
65460
+ case REACT_LAZY_TYPE:
65461
+ innerType = type._payload;
65462
+ type = type._init;
65463
+ try {
65464
+ return getComponentNameFromType(type(innerType));
65465
+ } catch (x) {}
65466
+ }
65467
+ return null;
65468
+ }
65469
+ function testStringCoercion(value) {
65470
+ return "" + value;
65471
+ }
65472
+ function checkKeyStringCoercion(value) {
65473
+ try {
65474
+ testStringCoercion(value);
65475
+ var JSCompiler_inline_result = false;
65476
+ } catch (e) {
65477
+ JSCompiler_inline_result = true;
65478
+ }
65479
+ if (JSCompiler_inline_result) {
65480
+ JSCompiler_inline_result = console;
65481
+ var JSCompiler_temp_const = JSCompiler_inline_result.error;
65482
+ var JSCompiler_inline_result$jscomp$0 = typeof Symbol === "function" && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
65483
+ JSCompiler_temp_const.call(JSCompiler_inline_result, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", JSCompiler_inline_result$jscomp$0);
65484
+ return testStringCoercion(value);
65485
+ }
65486
+ }
65487
+ function getTaskName(type) {
65488
+ if (type === REACT_FRAGMENT_TYPE)
65489
+ return "<>";
65490
+ if (typeof type === "object" && type !== null && type.$$typeof === REACT_LAZY_TYPE)
65491
+ return "<...>";
65492
+ try {
65493
+ var name = getComponentNameFromType(type);
65494
+ return name ? "<" + name + ">" : "<...>";
65495
+ } catch (x) {
65496
+ return "<...>";
65497
+ }
65498
+ }
65499
+ function getOwner() {
65500
+ var dispatcher = ReactSharedInternals.A;
65501
+ return dispatcher === null ? null : dispatcher.getOwner();
65502
+ }
65503
+ function UnknownOwner() {
65504
+ return Error("react-stack-top-frame");
65505
+ }
65506
+ function hasValidKey(config) {
65507
+ if (hasOwnProperty2.call(config, "key")) {
65508
+ var getter = Object.getOwnPropertyDescriptor(config, "key").get;
65509
+ if (getter && getter.isReactWarning)
65510
+ return false;
65511
+ }
65512
+ return config.key !== undefined;
65513
+ }
65514
+ function defineKeyPropWarningGetter(props, displayName) {
65515
+ function warnAboutAccessingKey() {
65516
+ specialPropKeyWarningShown || (specialPropKeyWarningShown = true, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", displayName));
65517
+ }
65518
+ warnAboutAccessingKey.isReactWarning = true;
65519
+ Object.defineProperty(props, "key", {
65520
+ get: warnAboutAccessingKey,
65521
+ configurable: true
65522
+ });
65523
+ }
65524
+ function elementRefGetterWithDeprecationWarning() {
65525
+ var componentName = getComponentNameFromType(this.type);
65526
+ didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = true, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."));
65527
+ componentName = this.props.ref;
65528
+ return componentName !== undefined ? componentName : null;
65529
+ }
65530
+ function ReactElement(type, key, props, owner, debugStack, debugTask) {
65531
+ var refProp = props.ref;
65532
+ type = {
65533
+ $$typeof: REACT_ELEMENT_TYPE,
65534
+ type,
65535
+ key,
65536
+ props,
65537
+ _owner: owner
65538
+ };
65539
+ (refProp !== undefined ? refProp : null) !== null ? Object.defineProperty(type, "ref", {
65540
+ enumerable: false,
65541
+ get: elementRefGetterWithDeprecationWarning
65542
+ }) : Object.defineProperty(type, "ref", { enumerable: false, value: null });
65543
+ type._store = {};
65544
+ Object.defineProperty(type._store, "validated", {
65545
+ configurable: false,
65546
+ enumerable: false,
65547
+ writable: true,
65548
+ value: 0
65549
+ });
65550
+ Object.defineProperty(type, "_debugInfo", {
65551
+ configurable: false,
65552
+ enumerable: false,
65553
+ writable: true,
65554
+ value: null
65555
+ });
65556
+ Object.defineProperty(type, "_debugStack", {
65557
+ configurable: false,
65558
+ enumerable: false,
65559
+ writable: true,
65560
+ value: debugStack
65561
+ });
65562
+ Object.defineProperty(type, "_debugTask", {
65563
+ configurable: false,
65564
+ enumerable: false,
65565
+ writable: true,
65566
+ value: debugTask
65567
+ });
65568
+ Object.freeze && (Object.freeze(type.props), Object.freeze(type));
65569
+ return type;
65570
+ }
65571
+ function jsxDEVImpl(type, config, maybeKey, isStaticChildren, debugStack, debugTask) {
65572
+ var children = config.children;
65573
+ if (children !== undefined)
65574
+ if (isStaticChildren)
65575
+ if (isArrayImpl(children)) {
65576
+ for (isStaticChildren = 0;isStaticChildren < children.length; isStaticChildren++)
65577
+ validateChildKeys(children[isStaticChildren]);
65578
+ Object.freeze && Object.freeze(children);
65579
+ } else
65580
+ console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");
65581
+ else
65582
+ validateChildKeys(children);
65583
+ if (hasOwnProperty2.call(config, "key")) {
65584
+ children = getComponentNameFromType(type);
65585
+ var keys = Object.keys(config).filter(function(k) {
65586
+ return k !== "key";
65587
+ });
65588
+ isStaticChildren = 0 < keys.length ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" : "{key: someKey}";
65589
+ didWarnAboutKeySpread[children + isStaticChildren] || (keys = 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}", console.error(`A props object containing a "key" prop is being spread into JSX:
65590
+ let props = %s;
65591
+ <%s {...props} />
65592
+ React keys must be passed directly to JSX without using spread:
65593
+ let props = %s;
65594
+ <%s key={someKey} {...props} />`, isStaticChildren, children, keys, children), didWarnAboutKeySpread[children + isStaticChildren] = true);
65595
+ }
65596
+ children = null;
65597
+ maybeKey !== undefined && (checkKeyStringCoercion(maybeKey), children = "" + maybeKey);
65598
+ hasValidKey(config) && (checkKeyStringCoercion(config.key), children = "" + config.key);
65599
+ if ("key" in config) {
65600
+ maybeKey = {};
65601
+ for (var propName in config)
65602
+ propName !== "key" && (maybeKey[propName] = config[propName]);
65603
+ } else
65604
+ maybeKey = config;
65605
+ children && defineKeyPropWarningGetter(maybeKey, typeof type === "function" ? type.displayName || type.name || "Unknown" : type);
65606
+ return ReactElement(type, children, maybeKey, getOwner(), debugStack, debugTask);
65607
+ }
65608
+ function validateChildKeys(node) {
65609
+ isValidElement(node) ? node._store && (node._store.validated = 1) : typeof node === "object" && node !== null && node.$$typeof === REACT_LAZY_TYPE && (node._payload.status === "fulfilled" ? isValidElement(node._payload.value) && node._payload.value._store && (node._payload.value._store.validated = 1) : node._store && (node._store.validated = 1));
65610
+ }
65611
+ function isValidElement(object) {
65612
+ return typeof object === "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
65613
+ }
65614
+ var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler"), REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, hasOwnProperty2 = Object.prototype.hasOwnProperty, isArrayImpl = Array.isArray, createTask = console.createTask ? console.createTask : function() {
65615
+ return null;
65616
+ };
65617
+ React = {
65618
+ react_stack_bottom_frame: function(callStackForError) {
65619
+ return callStackForError();
65620
+ }
65621
+ };
65622
+ var specialPropKeyWarningShown;
65623
+ var didWarnAboutElementRef = {};
65624
+ var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(React, UnknownOwner)();
65625
+ var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));
65626
+ var didWarnAboutKeySpread = {};
65627
+ exports.Fragment = REACT_FRAGMENT_TYPE;
65628
+ exports.jsxDEV = function(type, config, maybeKey, isStaticChildren) {
65629
+ var trackActualOwner = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;
65630
+ return jsxDEVImpl(type, config, maybeKey, isStaticChildren, trackActualOwner ? Error("react-stack-top-frame") : unknownOwnerDebugStack, trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask);
65631
+ };
65632
+ })();
65633
+ });
65634
+
65635
+ // node_modules/react/jsx-dev-runtime.js
65636
+ var require_jsx_dev_runtime = __commonJS(function(exports, module) {
65637
+ var react_jsx_dev_runtime_development = __toESM(require_react_jsx_dev_runtime_development());
65638
+ if (false) {} else {
65639
+ module.exports = react_jsx_dev_runtime_development;
65640
+ }
65641
+ });
65642
+
65643
+ // packages/workit-cli/src/steps/ink-style.tsx
65644
+ function inkColor(role, options = { stream: process.stdout, env: process.env }) {
65645
+ return colorEnabled(options) ? INK_COLORS[role] : undefined;
65646
+ }
65647
+ function StableTextInput({ onChange, ...rest }) {
65648
+ const latest = import_react65.useRef(onChange);
65649
+ import_react65.useLayoutEffect(() => {
65650
+ latest.current = onChange;
65651
+ }, [onChange]);
65652
+ const stable = import_react65.useCallback((value) => latest.current?.(value), []);
65653
+ return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(TextInput, {
65654
+ ...rest,
65655
+ onChange: onChange ? stable : undefined
65656
+ }, undefined, false, undefined, this);
65657
+ }
65658
+ var import_react65, jsx_dev_runtime, INK_COLORS;
65659
+ var init_ink_style = __esm(async () => {
65660
+ init_style();
65661
+ await init_build3();
65662
+ import_react65 = __toESM(require_react(), 1);
65663
+ jsx_dev_runtime = __toESM(require_jsx_dev_runtime(), 1);
65664
+ INK_COLORS = {
65665
+ ok: "green",
65666
+ fail: "red",
65667
+ warn: "yellow",
65668
+ accent: "cyan"
65669
+ };
65670
+ });
65671
+
65420
65672
  // packages/workit-core/src/core/gitignore.ts
65421
65673
  var GITIGNORE_ENTRIES;
65422
65674
  var init_gitignore = __esm(() => {
@@ -72683,229 +72935,6 @@ var init_detect_hosts = __esm(() => {
72683
72935
  WIZARD_HOSTS = [...HOSTS];
72684
72936
  });
72685
72937
 
72686
- // node_modules/react/cjs/react-jsx-dev-runtime.development.js
72687
- var require_react_jsx_dev_runtime_development = __commonJS(function(exports) {
72688
- var React = __toESM(require_react());
72689
- (function() {
72690
- function getComponentNameFromType(type) {
72691
- if (type == null)
72692
- return null;
72693
- if (typeof type === "function")
72694
- return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null;
72695
- if (typeof type === "string")
72696
- return type;
72697
- switch (type) {
72698
- case REACT_FRAGMENT_TYPE:
72699
- return "Fragment";
72700
- case REACT_PROFILER_TYPE:
72701
- return "Profiler";
72702
- case REACT_STRICT_MODE_TYPE:
72703
- return "StrictMode";
72704
- case REACT_SUSPENSE_TYPE:
72705
- return "Suspense";
72706
- case REACT_SUSPENSE_LIST_TYPE:
72707
- return "SuspenseList";
72708
- case REACT_ACTIVITY_TYPE:
72709
- return "Activity";
72710
- }
72711
- if (typeof type === "object")
72712
- switch (typeof type.tag === "number" && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof) {
72713
- case REACT_PORTAL_TYPE:
72714
- return "Portal";
72715
- case REACT_CONTEXT_TYPE:
72716
- return type.displayName || "Context";
72717
- case REACT_CONSUMER_TYPE:
72718
- return (type._context.displayName || "Context") + ".Consumer";
72719
- case REACT_FORWARD_REF_TYPE:
72720
- var innerType = type.render;
72721
- type = type.displayName;
72722
- type || (type = innerType.displayName || innerType.name || "", type = type !== "" ? "ForwardRef(" + type + ")" : "ForwardRef");
72723
- return type;
72724
- case REACT_MEMO_TYPE:
72725
- return innerType = type.displayName || null, innerType !== null ? innerType : getComponentNameFromType(type.type) || "Memo";
72726
- case REACT_LAZY_TYPE:
72727
- innerType = type._payload;
72728
- type = type._init;
72729
- try {
72730
- return getComponentNameFromType(type(innerType));
72731
- } catch (x) {}
72732
- }
72733
- return null;
72734
- }
72735
- function testStringCoercion(value) {
72736
- return "" + value;
72737
- }
72738
- function checkKeyStringCoercion(value) {
72739
- try {
72740
- testStringCoercion(value);
72741
- var JSCompiler_inline_result = false;
72742
- } catch (e) {
72743
- JSCompiler_inline_result = true;
72744
- }
72745
- if (JSCompiler_inline_result) {
72746
- JSCompiler_inline_result = console;
72747
- var JSCompiler_temp_const = JSCompiler_inline_result.error;
72748
- var JSCompiler_inline_result$jscomp$0 = typeof Symbol === "function" && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
72749
- JSCompiler_temp_const.call(JSCompiler_inline_result, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", JSCompiler_inline_result$jscomp$0);
72750
- return testStringCoercion(value);
72751
- }
72752
- }
72753
- function getTaskName(type) {
72754
- if (type === REACT_FRAGMENT_TYPE)
72755
- return "<>";
72756
- if (typeof type === "object" && type !== null && type.$$typeof === REACT_LAZY_TYPE)
72757
- return "<...>";
72758
- try {
72759
- var name = getComponentNameFromType(type);
72760
- return name ? "<" + name + ">" : "<...>";
72761
- } catch (x) {
72762
- return "<...>";
72763
- }
72764
- }
72765
- function getOwner() {
72766
- var dispatcher = ReactSharedInternals.A;
72767
- return dispatcher === null ? null : dispatcher.getOwner();
72768
- }
72769
- function UnknownOwner() {
72770
- return Error("react-stack-top-frame");
72771
- }
72772
- function hasValidKey(config) {
72773
- if (hasOwnProperty2.call(config, "key")) {
72774
- var getter = Object.getOwnPropertyDescriptor(config, "key").get;
72775
- if (getter && getter.isReactWarning)
72776
- return false;
72777
- }
72778
- return config.key !== undefined;
72779
- }
72780
- function defineKeyPropWarningGetter(props, displayName) {
72781
- function warnAboutAccessingKey() {
72782
- specialPropKeyWarningShown || (specialPropKeyWarningShown = true, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", displayName));
72783
- }
72784
- warnAboutAccessingKey.isReactWarning = true;
72785
- Object.defineProperty(props, "key", {
72786
- get: warnAboutAccessingKey,
72787
- configurable: true
72788
- });
72789
- }
72790
- function elementRefGetterWithDeprecationWarning() {
72791
- var componentName = getComponentNameFromType(this.type);
72792
- didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = true, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."));
72793
- componentName = this.props.ref;
72794
- return componentName !== undefined ? componentName : null;
72795
- }
72796
- function ReactElement(type, key, props, owner, debugStack, debugTask) {
72797
- var refProp = props.ref;
72798
- type = {
72799
- $$typeof: REACT_ELEMENT_TYPE,
72800
- type,
72801
- key,
72802
- props,
72803
- _owner: owner
72804
- };
72805
- (refProp !== undefined ? refProp : null) !== null ? Object.defineProperty(type, "ref", {
72806
- enumerable: false,
72807
- get: elementRefGetterWithDeprecationWarning
72808
- }) : Object.defineProperty(type, "ref", { enumerable: false, value: null });
72809
- type._store = {};
72810
- Object.defineProperty(type._store, "validated", {
72811
- configurable: false,
72812
- enumerable: false,
72813
- writable: true,
72814
- value: 0
72815
- });
72816
- Object.defineProperty(type, "_debugInfo", {
72817
- configurable: false,
72818
- enumerable: false,
72819
- writable: true,
72820
- value: null
72821
- });
72822
- Object.defineProperty(type, "_debugStack", {
72823
- configurable: false,
72824
- enumerable: false,
72825
- writable: true,
72826
- value: debugStack
72827
- });
72828
- Object.defineProperty(type, "_debugTask", {
72829
- configurable: false,
72830
- enumerable: false,
72831
- writable: true,
72832
- value: debugTask
72833
- });
72834
- Object.freeze && (Object.freeze(type.props), Object.freeze(type));
72835
- return type;
72836
- }
72837
- function jsxDEVImpl(type, config, maybeKey, isStaticChildren, debugStack, debugTask) {
72838
- var children = config.children;
72839
- if (children !== undefined)
72840
- if (isStaticChildren)
72841
- if (isArrayImpl(children)) {
72842
- for (isStaticChildren = 0;isStaticChildren < children.length; isStaticChildren++)
72843
- validateChildKeys(children[isStaticChildren]);
72844
- Object.freeze && Object.freeze(children);
72845
- } else
72846
- console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");
72847
- else
72848
- validateChildKeys(children);
72849
- if (hasOwnProperty2.call(config, "key")) {
72850
- children = getComponentNameFromType(type);
72851
- var keys = Object.keys(config).filter(function(k) {
72852
- return k !== "key";
72853
- });
72854
- isStaticChildren = 0 < keys.length ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" : "{key: someKey}";
72855
- didWarnAboutKeySpread[children + isStaticChildren] || (keys = 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}", console.error(`A props object containing a "key" prop is being spread into JSX:
72856
- let props = %s;
72857
- <%s {...props} />
72858
- React keys must be passed directly to JSX without using spread:
72859
- let props = %s;
72860
- <%s key={someKey} {...props} />`, isStaticChildren, children, keys, children), didWarnAboutKeySpread[children + isStaticChildren] = true);
72861
- }
72862
- children = null;
72863
- maybeKey !== undefined && (checkKeyStringCoercion(maybeKey), children = "" + maybeKey);
72864
- hasValidKey(config) && (checkKeyStringCoercion(config.key), children = "" + config.key);
72865
- if ("key" in config) {
72866
- maybeKey = {};
72867
- for (var propName in config)
72868
- propName !== "key" && (maybeKey[propName] = config[propName]);
72869
- } else
72870
- maybeKey = config;
72871
- children && defineKeyPropWarningGetter(maybeKey, typeof type === "function" ? type.displayName || type.name || "Unknown" : type);
72872
- return ReactElement(type, children, maybeKey, getOwner(), debugStack, debugTask);
72873
- }
72874
- function validateChildKeys(node) {
72875
- isValidElement(node) ? node._store && (node._store.validated = 1) : typeof node === "object" && node !== null && node.$$typeof === REACT_LAZY_TYPE && (node._payload.status === "fulfilled" ? isValidElement(node._payload.value) && node._payload.value._store && (node._payload.value._store.validated = 1) : node._store && (node._store.validated = 1));
72876
- }
72877
- function isValidElement(object) {
72878
- return typeof object === "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
72879
- }
72880
- var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler"), REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, hasOwnProperty2 = Object.prototype.hasOwnProperty, isArrayImpl = Array.isArray, createTask = console.createTask ? console.createTask : function() {
72881
- return null;
72882
- };
72883
- React = {
72884
- react_stack_bottom_frame: function(callStackForError) {
72885
- return callStackForError();
72886
- }
72887
- };
72888
- var specialPropKeyWarningShown;
72889
- var didWarnAboutElementRef = {};
72890
- var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(React, UnknownOwner)();
72891
- var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));
72892
- var didWarnAboutKeySpread = {};
72893
- exports.Fragment = REACT_FRAGMENT_TYPE;
72894
- exports.jsxDEV = function(type, config, maybeKey, isStaticChildren) {
72895
- var trackActualOwner = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;
72896
- return jsxDEVImpl(type, config, maybeKey, isStaticChildren, trackActualOwner ? Error("react-stack-top-frame") : unknownOwnerDebugStack, trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask);
72897
- };
72898
- })();
72899
- });
72900
-
72901
- // node_modules/react/jsx-dev-runtime.js
72902
- var require_jsx_dev_runtime = __commonJS(function(exports, module) {
72903
- var react_jsx_dev_runtime_development = __toESM(require_react_jsx_dev_runtime_development());
72904
- if (false) {} else {
72905
- module.exports = react_jsx_dev_runtime_development;
72906
- }
72907
- });
72908
-
72909
72938
  // packages/workit-cli/src/search-select.tsx
72910
72939
  function filterOptions(options, query, limit = VISIBLE_ROWS) {
72911
72940
  const q = fold(query.trim().toLowerCase());
@@ -72920,9 +72949,9 @@ function SearchSelect({
72920
72949
  onSelect,
72921
72950
  onQueryChange
72922
72951
  }) {
72923
- const [query, setQuery] = import_react65.useState("");
72924
- const filtered = import_react65.useMemo(() => filterOptions(options, query, Infinity), [options, query]);
72925
- const [rawIndex, setRawIndex] = import_react65.useState(() => Math.max(0, options.findIndex((option) => option.value === value)));
72952
+ const [query, setQuery] = import_react66.useState("");
72953
+ const filtered = import_react66.useMemo(() => filterOptions(options, query, Infinity), [options, query]);
72954
+ const [rawIndex, setRawIndex] = import_react66.useState(() => Math.max(0, options.findIndex((option) => option.value === value)));
72926
72955
  const index = Math.min(rawIndex, Math.max(0, filtered.length - 1));
72927
72956
  const offset = Math.max(0, index - VISIBLE_ROWS + 1);
72928
72957
  use_input_default((input, key) => {
@@ -72944,20 +72973,21 @@ function SearchSelect({
72944
72973
  type(query + input);
72945
72974
  }
72946
72975
  });
72947
- return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
72976
+ return /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(Box_default, {
72948
72977
  flexDirection: "column",
72949
72978
  gap: 0,
72950
72979
  children: [
72951
- /* @__PURE__ */ jsx_dev_runtime.jsxDEV(TextInput, {
72980
+ /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(TextInput, {
72952
72981
  isDisabled: true,
72953
72982
  defaultValue: query,
72954
72983
  placeholder
72955
72984
  }, query, false, undefined, this),
72956
- filtered.length === 0 ? /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
72985
+ filtered.length === 0 ? /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(Text, {
72957
72986
  dimColor: true,
72958
72987
  children: "No matches"
72959
- }, undefined, false, undefined, this) : filtered.slice(offset, offset + VISIBLE_ROWS).map((option, i) => /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
72960
- color: i + offset === index ? "cyan" : "dim",
72988
+ }, undefined, false, undefined, this) : filtered.slice(offset, offset + VISIBLE_ROWS).map((option, i) => /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(Text, {
72989
+ color: i + offset === index ? inkColor("accent") : undefined,
72990
+ dimColor: i + offset !== index,
72961
72991
  children: [
72962
72992
  i + offset === index ? "❯ " : " ",
72963
72993
  option.label
@@ -72966,14 +72996,15 @@ function SearchSelect({
72966
72996
  ]
72967
72997
  }, undefined, true, undefined, this);
72968
72998
  }
72969
- var import_react65, jsx_dev_runtime, LOCALE_LANGUAGE_MAP, VISIBLE_ROWS = 5, fold = (s) => s.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
72999
+ var import_react66, jsx_dev_runtime2, LOCALE_LANGUAGE_MAP, VISIBLE_ROWS = 5, fold = (s) => s.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
72970
73000
  var init_search_select = __esm(async () => {
72971
73001
  await __promiseAll([
73002
+ init_ink_style(),
72972
73003
  init_build2(),
72973
73004
  init_build3()
72974
73005
  ]);
72975
- import_react65 = __toESM(require_react(), 1);
72976
- jsx_dev_runtime = __toESM(require_jsx_dev_runtime(), 1);
73006
+ import_react66 = __toESM(require_react(), 1);
73007
+ jsx_dev_runtime2 = __toESM(require_jsx_dev_runtime(), 1);
72977
73008
  LOCALE_LANGUAGE_MAP = [
72978
73009
  { label: "Español (España)", locale: "es-ES" },
72979
73010
  { label: "Español (Latinoamérica)", locale: "es-419" },
@@ -73165,13 +73196,13 @@ function HostPicker({
73165
73196
  { label: "Clear all", value: "__none" },
73166
73197
  ...PLATFORM_LABELS.map(({ label, value }) => ({ label, value }))
73167
73198
  ];
73168
- const [index, setIndex] = import_react66.useState(0);
73169
- const indexRef = import_react66.useRef(index);
73170
- const chosenRef = import_react66.useRef(selected);
73171
- import_react66.useEffect(() => {
73199
+ const [index, setIndex] = import_react67.useState(0);
73200
+ const indexRef = import_react67.useRef(index);
73201
+ const chosenRef = import_react67.useRef(selected);
73202
+ import_react67.useEffect(() => {
73172
73203
  indexRef.current = index;
73173
73204
  }, [index]);
73174
- import_react66.useEffect(() => {
73205
+ import_react67.useEffect(() => {
73175
73206
  chosenRef.current = selected;
73176
73207
  }, [selected]);
73177
73208
  const update = (next) => {
@@ -73205,7 +73236,7 @@ function HostPicker({
73205
73236
  onSubmit(chosenRef.current);
73206
73237
  }
73207
73238
  });
73208
- return /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(Box_default, {
73239
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(Box_default, {
73209
73240
  flexDirection: "column",
73210
73241
  gap: 0,
73211
73242
  children: options.map((option, row) => {
@@ -73213,8 +73244,8 @@ function HostPicker({
73213
73244
  const detected = host === null || detection[host].detected;
73214
73245
  const checked = host !== null && checkedHosts.has(host);
73215
73246
  const label = host === null ? option.label : `${checked ? "[✓]" : "[ ]"} ${option.label}${detection[host].configured ? " · already configured" : detection[host].detected ? " · detected" : " · unavailable"}`;
73216
- return /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(Text, {
73217
- color: row === index ? "cyan" : undefined,
73247
+ return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(Text, {
73248
+ color: row === index ? inkColor("accent") : undefined,
73218
73249
  dimColor: !detected,
73219
73250
  children: [
73220
73251
  row === index ? "❯ " : " ",
@@ -73224,14 +73255,15 @@ function HostPicker({
73224
73255
  })
73225
73256
  }, undefined, false, undefined, this);
73226
73257
  }
73227
- var import_react66, jsx_dev_runtime2;
73258
+ var import_react67, jsx_dev_runtime3;
73228
73259
  var init_host_picker = __esm(async () => {
73229
73260
  await __promiseAll([
73261
+ init_ink_style(),
73230
73262
  init_build2(),
73231
73263
  init_options()
73232
73264
  ]);
73233
- import_react66 = __toESM(require_react(), 1);
73234
- jsx_dev_runtime2 = __toESM(require_jsx_dev_runtime(), 1);
73265
+ import_react67 = __toESM(require_react(), 1);
73266
+ jsx_dev_runtime3 = __toESM(require_jsx_dev_runtime(), 1);
73235
73267
  });
73236
73268
 
73237
73269
  // packages/workit-cli/src/steps/select-list.tsx
@@ -73241,9 +73273,9 @@ function SelectList({
73241
73273
  onChange,
73242
73274
  onSelect
73243
73275
  }) {
73244
- const [index, setIndex] = import_react67.useState(() => Math.max(0, options.findIndex((option) => option.value === value)));
73245
- const indexRef = import_react67.useRef(index);
73246
- import_react67.useEffect(() => {
73276
+ const [index, setIndex] = import_react68.useState(() => Math.max(0, options.findIndex((option) => option.value === value)));
73277
+ const indexRef = import_react68.useRef(index);
73278
+ import_react68.useEffect(() => {
73247
73279
  indexRef.current = index;
73248
73280
  }, [index]);
73249
73281
  use_input_default((_input, key) => {
@@ -73258,11 +73290,12 @@ function SelectList({
73258
73290
  onSelect(options[indexRef.current].value);
73259
73291
  }
73260
73292
  });
73261
- return /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(Box_default, {
73293
+ return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
73262
73294
  flexDirection: "column",
73263
73295
  gap: 0,
73264
- children: options.map((option, i) => /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(Text, {
73265
- color: i === index ? "cyan" : "dim",
73296
+ children: options.map((option, i) => /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73297
+ color: i === index ? inkColor("accent") : undefined,
73298
+ dimColor: i !== index,
73266
73299
  children: [
73267
73300
  i === index ? "❯ " : " ",
73268
73301
  option.label
@@ -73270,11 +73303,14 @@ function SelectList({
73270
73303
  }, option.value, true, undefined, this))
73271
73304
  }, undefined, false, undefined, this);
73272
73305
  }
73273
- var import_react67, jsx_dev_runtime3;
73306
+ var import_react68, jsx_dev_runtime4;
73274
73307
  var init_select_list = __esm(async () => {
73275
- await init_build2();
73276
- import_react67 = __toESM(require_react(), 1);
73277
- jsx_dev_runtime3 = __toESM(require_jsx_dev_runtime(), 1);
73308
+ await __promiseAll([
73309
+ init_ink_style(),
73310
+ init_build2()
73311
+ ]);
73312
+ import_react68 = __toESM(require_react(), 1);
73313
+ jsx_dev_runtime4 = __toESM(require_jsx_dev_runtime(), 1);
73278
73314
  });
73279
73315
 
73280
73316
  // packages/workit-cli/src/steps/global-screens.tsx
@@ -73283,22 +73319,22 @@ function PlatformsScreen({
73283
73319
  dispatch,
73284
73320
  detection = emptyDetection()
73285
73321
  }) {
73286
- return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
73322
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73287
73323
  flexDirection: "column",
73288
73324
  gap: 1,
73289
73325
  children: [
73290
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73326
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73291
73327
  bold: true,
73292
73328
  children: "Step 1 — Platforms"
73293
73329
  }, undefined, false, undefined, this),
73294
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73330
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73295
73331
  children: "Choose the detected tools where Workit should be configured."
73296
73332
  }, undefined, false, undefined, this),
73297
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73333
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73298
73334
  dimColor: true,
73299
73335
  children: "Use Space to toggle, or choose Select all available / Clear all."
73300
73336
  }, undefined, false, undefined, this),
73301
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(HostPicker, {
73337
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(HostPicker, {
73302
73338
  detection,
73303
73339
  selected: draft.values.platforms,
73304
73340
  onChange: (values) => dispatch({ type: "set", field: "platforms", value: values }),
@@ -73307,11 +73343,11 @@ function PlatformsScreen({
73307
73343
  dispatch({ type: "next" });
73308
73344
  }
73309
73345
  }, undefined, false, undefined, this),
73310
- draft.errors.platforms && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73311
- color: "red",
73346
+ draft.errors.platforms && /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73347
+ color: inkColor("fail"),
73312
73348
  children: draft.errors.platforms
73313
73349
  }, undefined, false, undefined, this),
73314
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73350
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73315
73351
  dimColor: true,
73316
73352
  children: "Enter to continue · Esc Cancel"
73317
73353
  }, undefined, false, undefined, this)
@@ -73319,28 +73355,28 @@ function PlatformsScreen({
73319
73355
  }, undefined, true, undefined, this);
73320
73356
  }
73321
73357
  function LocaleScreen({ draft, dispatch, onSearchQueryChange }) {
73322
- return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
73358
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73323
73359
  flexDirection: "column",
73324
73360
  gap: 1,
73325
73361
  children: [
73326
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73362
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73327
73363
  bold: true,
73328
73364
  children: "Step 2 — Global config · Locale"
73329
73365
  }, undefined, false, undefined, this),
73330
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73366
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73331
73367
  dimColor: true,
73332
73368
  children: "Locale (BCP-47):"
73333
73369
  }, undefined, false, undefined, this),
73334
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73370
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73335
73371
  children: [
73336
73372
  "Current: ",
73337
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73338
- color: "green",
73373
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73374
+ color: inkColor("ok"),
73339
73375
  children: draft.values.locale
73340
73376
  }, undefined, false, undefined, this)
73341
73377
  ]
73342
73378
  }, undefined, true, undefined, this),
73343
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(SearchSelect, {
73379
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(SearchSelect, {
73344
73380
  options: LOCALE_PICKER_OPTIONS,
73345
73381
  value: draft.values.locale,
73346
73382
  placeholder: "Type to search languages…",
@@ -73354,11 +73390,11 @@ function LocaleScreen({ draft, dispatch, onSearchQueryChange }) {
73354
73390
  }
73355
73391
  }
73356
73392
  }, undefined, false, undefined, this),
73357
- draft.errors.locale && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73358
- color: "red",
73393
+ draft.errors.locale && /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73394
+ color: inkColor("fail"),
73359
73395
  children: draft.errors.locale
73360
73396
  }, undefined, false, undefined, this),
73361
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73397
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73362
73398
  dimColor: true,
73363
73399
  children: "Type to filter · Enter to continue · b Back · Esc Cancel"
73364
73400
  }, undefined, false, undefined, this)
@@ -73366,28 +73402,28 @@ function LocaleScreen({ draft, dispatch, onSearchQueryChange }) {
73366
73402
  }, undefined, true, undefined, this);
73367
73403
  }
73368
73404
  function LocaleOtherScreen({ draft, dispatch }) {
73369
- return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
73405
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73370
73406
  flexDirection: "column",
73371
73407
  gap: 1,
73372
73408
  children: [
73373
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73409
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73374
73410
  bold: true,
73375
73411
  children: "Step 2 — Global config · Locale (custom)"
73376
73412
  }, undefined, false, undefined, this),
73377
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73413
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73378
73414
  dimColor: true,
73379
73415
  children: "Type a BCP-47 locale (e.g. en or es-CL):"
73380
73416
  }, undefined, false, undefined, this),
73381
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TextInput, {
73417
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(StableTextInput, {
73382
73418
  placeholder: SCREEN_PLACEHOLDERS.localeOther,
73383
73419
  onChange: (value) => dispatch({ type: "set", field: "locale", value }),
73384
73420
  onSubmit: () => dispatch({ type: "next" })
73385
73421
  }, undefined, false, undefined, this),
73386
- draft.errors.locale && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73387
- color: "red",
73422
+ draft.errors.locale && /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73423
+ color: inkColor("fail"),
73388
73424
  children: draft.errors.locale
73389
73425
  }, undefined, false, undefined, this),
73390
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73426
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73391
73427
  dimColor: true,
73392
73428
  children: "Enter to continue · Esc Back"
73393
73429
  }, undefined, false, undefined, this)
@@ -73396,53 +73432,53 @@ function LocaleOtherScreen({ draft, dispatch }) {
73396
73432
  }
73397
73433
  function BranchPresetScreen({ draft, dispatch }) {
73398
73434
  const policy = effectivePolicy(draft.values);
73399
- return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
73435
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73400
73436
  flexDirection: "column",
73401
73437
  gap: 1,
73402
73438
  children: [
73403
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73439
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73404
73440
  bold: true,
73405
73441
  children: "Step 2 — Global config · Branch policy"
73406
73442
  }, undefined, false, undefined, this),
73407
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73443
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73408
73444
  dimColor: true,
73409
73445
  children: "Branch policy preset:"
73410
73446
  }, undefined, false, undefined, this),
73411
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(SelectList, {
73447
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(SelectList, {
73412
73448
  options: BRANCH_PRESETS,
73413
73449
  value: draft.values.branchPreset,
73414
73450
  onChange: (value) => dispatch({ type: "set", field: "branchPreset", value }),
73415
73451
  onSelect: () => dispatch({ type: "next" })
73416
73452
  }, undefined, false, undefined, this),
73417
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73453
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73418
73454
  dimColor: true,
73419
73455
  children: BRANCH_PRESET_DESCRIPTIONS[draft.values.branchPreset]
73420
73456
  }, undefined, false, undefined, this),
73421
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
73457
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73422
73458
  flexDirection: "column",
73423
73459
  gap: 0,
73424
73460
  children: [
73425
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73461
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73426
73462
  children: [
73427
73463
  "Allowed: ",
73428
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73429
- color: "green",
73464
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73465
+ color: inkColor("ok"),
73430
73466
  children: policy.allowed.join(", ") || "—"
73431
73467
  }, undefined, false, undefined, this)
73432
73468
  ]
73433
73469
  }, undefined, true, undefined, this),
73434
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73470
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73435
73471
  children: [
73436
73472
  "Protected: ",
73437
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73438
- color: "green",
73473
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73474
+ color: inkColor("ok"),
73439
73475
  children: policy.protected.join(", ") || "—"
73440
73476
  }, undefined, false, undefined, this)
73441
73477
  ]
73442
73478
  }, undefined, true, undefined, this)
73443
73479
  ]
73444
73480
  }, undefined, true, undefined, this),
73445
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73481
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73446
73482
  dimColor: true,
73447
73483
  children: policy.preset === "custom" ? "Enter to continue — define the patterns next · b Back · Esc Cancel" : "Enter to continue · b Back · Esc Cancel"
73448
73484
  }, undefined, false, undefined, this)
@@ -73450,29 +73486,29 @@ function BranchPresetScreen({ draft, dispatch }) {
73450
73486
  }, undefined, true, undefined, this);
73451
73487
  }
73452
73488
  function BranchAllowedScreen({ draft, dispatch }) {
73453
- return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
73489
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73454
73490
  flexDirection: "column",
73455
73491
  gap: 1,
73456
73492
  children: [
73457
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73493
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73458
73494
  bold: true,
73459
73495
  children: "Step 2 — Global config · Allowed branch patterns"
73460
73496
  }, undefined, false, undefined, this),
73461
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73497
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73462
73498
  dimColor: true,
73463
73499
  children: "Allowed branch patterns (comma-separated):"
73464
73500
  }, undefined, false, undefined, this),
73465
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TextInput, {
73501
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(StableTextInput, {
73466
73502
  placeholder: SCREEN_PLACEHOLDERS.branchAllowed,
73467
73503
  defaultValue: draft.values.branchAllowed,
73468
73504
  onChange: (value) => dispatch({ type: "set", field: "branchAllowed", value }),
73469
73505
  onSubmit: () => dispatch({ type: "next" })
73470
73506
  }, undefined, false, undefined, this),
73471
- draft.errors.branchAllowed && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73472
- color: "red",
73507
+ draft.errors.branchAllowed && /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73508
+ color: inkColor("fail"),
73473
73509
  children: draft.errors.branchAllowed
73474
73510
  }, undefined, false, undefined, this),
73475
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73511
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73476
73512
  dimColor: true,
73477
73513
  children: "Enter to continue · Esc Back"
73478
73514
  }, undefined, false, undefined, this)
@@ -73480,29 +73516,29 @@ function BranchAllowedScreen({ draft, dispatch }) {
73480
73516
  }, undefined, true, undefined, this);
73481
73517
  }
73482
73518
  function BranchProtectedScreen({ draft, dispatch }) {
73483
- return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
73519
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73484
73520
  flexDirection: "column",
73485
73521
  gap: 1,
73486
73522
  children: [
73487
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73523
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73488
73524
  bold: true,
73489
73525
  children: "Step 2 — Global config · Protected branch names"
73490
73526
  }, undefined, false, undefined, this),
73491
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73527
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73492
73528
  dimColor: true,
73493
73529
  children: "Protected branch names (comma-separated):"
73494
73530
  }, undefined, false, undefined, this),
73495
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TextInput, {
73531
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(StableTextInput, {
73496
73532
  placeholder: SCREEN_PLACEHOLDERS.branchProtected,
73497
73533
  defaultValue: draft.values.branchProtected,
73498
73534
  onChange: (value) => dispatch({ type: "set", field: "branchProtected", value }),
73499
73535
  onSubmit: () => dispatch({ type: "next" })
73500
73536
  }, undefined, false, undefined, this),
73501
- draft.errors.branchProtected && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73502
- color: "red",
73537
+ draft.errors.branchProtected && /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73538
+ color: inkColor("fail"),
73503
73539
  children: draft.errors.branchProtected
73504
73540
  }, undefined, false, undefined, this),
73505
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73541
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73506
73542
  dimColor: true,
73507
73543
  children: "Enter to continue · Esc Back"
73508
73544
  }, undefined, false, undefined, this)
@@ -73510,25 +73546,25 @@ function BranchProtectedScreen({ draft, dispatch }) {
73510
73546
  }, undefined, true, undefined, this);
73511
73547
  }
73512
73548
  function IssueTrackerScreen({ draft, dispatch }) {
73513
- return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
73549
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73514
73550
  flexDirection: "column",
73515
73551
  gap: 1,
73516
73552
  children: [
73517
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73553
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73518
73554
  bold: true,
73519
73555
  children: "Step 3 — Issue tracker"
73520
73556
  }, undefined, false, undefined, this),
73521
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73557
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73522
73558
  dimColor: true,
73523
73559
  children: "Where do issues live?"
73524
73560
  }, undefined, false, undefined, this),
73525
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(SelectList, {
73561
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(SelectList, {
73526
73562
  options: ISSUE_TRACKERS,
73527
73563
  value: draft.values.issueTracker,
73528
73564
  onChange: (value) => dispatch({ type: "set", field: "issueTracker", value }),
73529
73565
  onSelect: () => dispatch({ type: "next" })
73530
73566
  }, undefined, false, undefined, this),
73531
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73567
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73532
73568
  dimColor: true,
73533
73569
  children: "Enter to continue · b Back · Esc Cancel"
73534
73570
  }, undefined, false, undefined, this)
@@ -73536,29 +73572,29 @@ function IssueTrackerScreen({ draft, dispatch }) {
73536
73572
  }, undefined, true, undefined, this);
73537
73573
  }
73538
73574
  function YoutrackScreen({ draft, dispatch }) {
73539
- return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
73575
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73540
73576
  flexDirection: "column",
73541
73577
  gap: 1,
73542
73578
  children: [
73543
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73579
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73544
73580
  bold: true,
73545
73581
  children: "Step 3 — YouTrack"
73546
73582
  }, undefined, false, undefined, this),
73547
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73583
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73548
73584
  dimColor: true,
73549
73585
  children: "Base URL (https):"
73550
73586
  }, undefined, false, undefined, this),
73551
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(TextInput, {
73587
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(StableTextInput, {
73552
73588
  placeholder: SCREEN_PLACEHOLDERS.youtrack,
73553
73589
  defaultValue: draft.values.baseUrl,
73554
73590
  onChange: (value) => dispatch({ type: "set", field: "baseUrl", value }),
73555
73591
  onSubmit: () => dispatch({ type: "next" })
73556
73592
  }, undefined, false, undefined, this),
73557
- draft.errors.baseUrl && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73558
- color: "red",
73593
+ draft.errors.baseUrl && /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73594
+ color: inkColor("fail"),
73559
73595
  children: draft.errors.baseUrl
73560
73596
  }, undefined, false, undefined, this),
73561
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73597
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73562
73598
  dimColor: true,
73563
73599
  children: "Enter to continue · Esc Back"
73564
73600
  }, undefined, false, undefined, this)
@@ -73566,43 +73602,43 @@ function YoutrackScreen({ draft, dispatch }) {
73566
73602
  }, undefined, true, undefined, this);
73567
73603
  }
73568
73604
  function VcsScreen({ draft, dispatch }) {
73569
- return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
73605
+ return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73570
73606
  flexDirection: "column",
73571
73607
  gap: 1,
73572
73608
  children: [
73573
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73609
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73574
73610
  bold: true,
73575
73611
  children: "Step 4 — Version control"
73576
73612
  }, undefined, false, undefined, this),
73577
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73613
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73578
73614
  dimColor: true,
73579
73615
  children: "Provider:"
73580
73616
  }, undefined, false, undefined, this),
73581
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(SelectList, {
73617
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(SelectList, {
73582
73618
  options: VCS_PROVIDERS,
73583
73619
  value: draft.values.vcsProvider,
73584
73620
  onChange: (value) => dispatch({ type: "set", field: "vcsProvider", value }),
73585
73621
  onSelect: () => dispatch({ type: "next" })
73586
73622
  }, undefined, false, undefined, this),
73587
- /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
73623
+ /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73588
73624
  dimColor: true,
73589
73625
  children: "Enter to continue · b Back · Esc Cancel"
73590
73626
  }, undefined, false, undefined, this)
73591
73627
  ]
73592
73628
  }, undefined, true, undefined, this);
73593
73629
  }
73594
- var jsx_dev_runtime4;
73630
+ var jsx_dev_runtime5;
73595
73631
  var init_global_screens = __esm(async () => {
73596
73632
  init_detect_hosts();
73597
73633
  await __promiseAll([
73634
+ init_ink_style(),
73598
73635
  init_build2(),
73599
- init_build3(),
73600
73636
  init_search_select(),
73601
73637
  init_host_picker(),
73602
73638
  init_select_list(),
73603
73639
  init_options()
73604
73640
  ]);
73605
- jsx_dev_runtime4 = __toESM(require_jsx_dev_runtime(), 1);
73641
+ jsx_dev_runtime5 = __toESM(require_jsx_dev_runtime(), 1);
73606
73642
  });
73607
73643
 
73608
73644
  // packages/workit-cli/src/steps/workspace-screens.tsx
@@ -73632,23 +73668,23 @@ function WorkspacesScreen({ draft, dispatch }) {
73632
73668
  value: `advanced:${i}`
73633
73669
  }))
73634
73670
  ];
73635
- return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73671
+ return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Box_default, {
73636
73672
  flexDirection: "column",
73637
73673
  gap: 1,
73638
73674
  children: [
73639
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73675
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73640
73676
  bold: true,
73641
73677
  children: "Step 5 — Workspaces"
73642
73678
  }, undefined, false, undefined, this),
73643
- draft.values.workspaces.length === 0 ? /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73679
+ draft.values.workspaces.length === 0 ? /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73644
73680
  dimColor: true,
73645
73681
  children: "No workspaces configured yet."
73646
- }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73682
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Box_default, {
73647
73683
  flexDirection: "column",
73648
73684
  gap: 0,
73649
73685
  children: draft.values.workspaces.map((w) => {
73650
73686
  const matches = matchWorkspace(w.glob, base);
73651
- return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73687
+ return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73652
73688
  children: [
73653
73689
  matches ? "✓ matches" : "✗ no match",
73654
73690
  " ",
@@ -73662,16 +73698,22 @@ function WorkspacesScreen({ draft, dispatch }) {
73662
73698
  }, `${w.name}|${w.glob}|${w.vcs?.provider ?? ""}`, true, undefined, this);
73663
73699
  })
73664
73700
  }, undefined, false, undefined, this),
73665
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(SelectList, {
73701
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(SelectList, {
73666
73702
  options,
73667
73703
  value: "done",
73668
73704
  onSelect: (value) => {
73669
73705
  if (value.startsWith("edit:"))
73670
73706
  dispatch({ type: "workspaceEdit", index: Number(value.slice(5)) });
73671
73707
  else if (value.startsWith("remove:"))
73672
- dispatch({ type: "workspaceRemove", index: Number(value.slice(7)) });
73708
+ dispatch({
73709
+ type: "workspaceRemove",
73710
+ index: Number(value.slice(7))
73711
+ });
73673
73712
  else if (value.startsWith("advanced:"))
73674
- dispatch({ type: "workspaceAdvancedOpen", index: Number(value.slice(9)) });
73713
+ dispatch({
73714
+ type: "workspaceAdvancedOpen",
73715
+ index: Number(value.slice(9))
73716
+ });
73675
73717
  else if (value === "global-commit")
73676
73718
  dispatch({ type: "globalCommitOpen" });
73677
73719
  else if (value === "add")
@@ -73682,7 +73724,7 @@ function WorkspacesScreen({ draft, dispatch }) {
73682
73724
  dispatch({ type: "next" });
73683
73725
  }
73684
73726
  }, draft.values.workspaces.map((w) => `${w.name}:${w.glob}`).join("|"), false, undefined, this),
73685
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73727
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73686
73728
  dimColor: true,
73687
73729
  children: "Enter to continue · b Back · Esc Cancel"
73688
73730
  }, undefined, false, undefined, this)
@@ -73690,29 +73732,29 @@ function WorkspacesScreen({ draft, dispatch }) {
73690
73732
  }, undefined, true, undefined, this);
73691
73733
  }
73692
73734
  function WorkspaceNameScreen({ draft, dispatch }) {
73693
- return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73735
+ return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Box_default, {
73694
73736
  flexDirection: "column",
73695
73737
  gap: 1,
73696
73738
  children: [
73697
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73739
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73698
73740
  bold: true,
73699
73741
  children: "Step 5 — Workspaces · Name"
73700
73742
  }, undefined, false, undefined, this),
73701
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73743
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73702
73744
  dimColor: true,
73703
73745
  children: draft.workspaceIndex === null ? "New workspace name:" : `Edit workspace name (${draft.values.workspaces[draft.workspaceIndex]?.name ?? ""}):`
73704
73746
  }, undefined, false, undefined, this),
73705
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TextInput, {
73747
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(StableTextInput, {
73706
73748
  placeholder: SCREEN_PLACEHOLDERS.workspaceName,
73707
73749
  defaultValue: draft.workspaceDraft?.name ?? "",
73708
73750
  onChange: (value) => dispatch({ type: "workspaceDraftName", value }),
73709
73751
  onSubmit: () => dispatch({ type: "next" })
73710
73752
  }, undefined, false, undefined, this),
73711
- draft.errors.workspaceName && /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73712
- color: "red",
73753
+ draft.errors.workspaceName && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73754
+ color: inkColor("fail"),
73713
73755
  children: draft.errors.workspaceName
73714
73756
  }, undefined, false, undefined, this),
73715
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73757
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73716
73758
  dimColor: true,
73717
73759
  children: "Enter to continue · Esc Back"
73718
73760
  }, undefined, false, undefined, this)
@@ -73721,36 +73763,36 @@ function WorkspaceNameScreen({ draft, dispatch }) {
73721
73763
  }
73722
73764
  function WorkspaceGlobScreen({ draft, dispatch }) {
73723
73765
  const glob = draft.workspaceDraft?.glob ?? "";
73724
- return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73766
+ return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Box_default, {
73725
73767
  flexDirection: "column",
73726
73768
  gap: 1,
73727
73769
  children: [
73728
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73770
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73729
73771
  bold: true,
73730
73772
  children: "Step 5 — Workspaces · Pattern"
73731
73773
  }, undefined, false, undefined, this),
73732
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73774
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73733
73775
  dimColor: true,
73734
73776
  children: "Workspace pattern (glob, e.g. /work/**):"
73735
73777
  }, undefined, false, undefined, this),
73736
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TextInput, {
73778
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(StableTextInput, {
73737
73779
  placeholder: SCREEN_PLACEHOLDERS.workspaceGlob,
73738
73780
  defaultValue: glob,
73739
73781
  onChange: (value) => dispatch({ type: "workspaceDraftGlob", value }),
73740
73782
  onSubmit: () => dispatch({ type: "next" })
73741
73783
  }, undefined, false, undefined, this),
73742
- glob.trim() !== "" && /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73784
+ glob.trim() !== "" && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Box_default, {
73743
73785
  flexDirection: "column",
73744
73786
  gap: 0,
73745
73787
  children: [
73746
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73788
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73747
73789
  bold: true,
73748
73790
  children: "Match preview (shared matcher):"
73749
73791
  }, undefined, false, undefined, this),
73750
73792
  workspacePreviewTargets(resolveBasePath(draft.values)).map((target) => {
73751
73793
  const matches = matchWorkspace(glob, target);
73752
- return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73753
- color: matches ? "green" : "red",
73794
+ return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73795
+ color: inkColor(matches ? "ok" : "fail"),
73754
73796
  children: [
73755
73797
  matches ? "✓ matches" : "✗ no match",
73756
73798
  " ",
@@ -73760,11 +73802,11 @@ function WorkspaceGlobScreen({ draft, dispatch }) {
73760
73802
  })
73761
73803
  ]
73762
73804
  }, undefined, true, undefined, this),
73763
- draft.errors.workspaceGlob && /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73764
- color: "red",
73805
+ draft.errors.workspaceGlob && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73806
+ color: inkColor("fail"),
73765
73807
  children: draft.errors.workspaceGlob
73766
73808
  }, undefined, false, undefined, this),
73767
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73809
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73768
73810
  dimColor: true,
73769
73811
  children: "Enter to continue · Esc Back"
73770
73812
  }, undefined, false, undefined, this)
@@ -73772,19 +73814,19 @@ function WorkspaceGlobScreen({ draft, dispatch }) {
73772
73814
  }, undefined, true, undefined, this);
73773
73815
  }
73774
73816
  function WorkspaceProviderScreen({ draft, dispatch }) {
73775
- return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73817
+ return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Box_default, {
73776
73818
  flexDirection: "column",
73777
73819
  gap: 1,
73778
73820
  children: [
73779
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73821
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73780
73822
  bold: true,
73781
73823
  children: "Step 5 — Workspaces · Provider"
73782
73824
  }, undefined, false, undefined, this),
73783
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73825
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73784
73826
  dimColor: true,
73785
73827
  children: "Version control provider for this workspace:"
73786
73828
  }, undefined, false, undefined, this),
73787
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(SelectList, {
73829
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(SelectList, {
73788
73830
  options: VCS_PROVIDERS,
73789
73831
  value: draft.workspaceDraft?.vcs?.provider ?? "skip",
73790
73832
  onChange: (value) => dispatch({ type: "workspaceDraftProvider", value }),
@@ -73793,7 +73835,7 @@ function WorkspaceProviderScreen({ draft, dispatch }) {
73793
73835
  dispatch({ type: "workspaceSave" });
73794
73836
  }
73795
73837
  }, undefined, false, undefined, this),
73796
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73838
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73797
73839
  dimColor: true,
73798
73840
  children: "Enter to save · b Back · Esc Cancel"
73799
73841
  }, undefined, false, undefined, this)
@@ -73812,38 +73854,38 @@ function WorkspaceAdvancedValueScreen({ draft, dispatch }) {
73812
73854
  value: name
73813
73855
  }))
73814
73856
  ] : null;
73815
- return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73857
+ return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Box_default, {
73816
73858
  flexDirection: "column",
73817
73859
  gap: 1,
73818
73860
  children: [
73819
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73861
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73820
73862
  bold: true,
73821
73863
  children: [
73822
73864
  "Advanced workspace settings · ",
73823
73865
  label
73824
73866
  ]
73825
73867
  }, undefined, true, undefined, this),
73826
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73868
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73827
73869
  dimColor: true,
73828
73870
  children: "Leave empty to clear this override. Use comma-separated values for lists."
73829
73871
  }, undefined, false, undefined, this),
73830
- profileChoices ? /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(SelectList, {
73872
+ profileChoices ? /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(SelectList, {
73831
73873
  options: profileChoices,
73832
73874
  value: current,
73833
73875
  onSelect: (value) => field && dispatch({ type: "workspaceAdvancedSet", field, value })
73834
- }, undefined, false, undefined, this) : choices ? /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(SelectList, {
73876
+ }, undefined, false, undefined, this) : choices ? /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(SelectList, {
73835
73877
  options: choices,
73836
73878
  value: current || choices[0].value,
73837
73879
  onSelect: (value) => field && dispatch({ type: "workspaceAdvancedSet", field, value })
73838
- }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TextInput, {
73880
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(StableTextInput, {
73839
73881
  defaultValue: current,
73840
73882
  onSubmit: (value) => field && dispatch({ type: "workspaceAdvancedSet", field, value })
73841
73883
  }, undefined, false, undefined, this),
73842
- field?.endsWith("integration") && /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73884
+ field?.endsWith("integration") && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73843
73885
  dimColor: true,
73844
73886
  children: "Enter pr or merge."
73845
73887
  }, undefined, false, undefined, this),
73846
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73888
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73847
73889
  dimColor: true,
73848
73890
  children: "Enter to save · Esc Back"
73849
73891
  }, undefined, false, undefined, this)
@@ -73861,26 +73903,26 @@ function GlobalCommitPolicyScreen({ draft, dispatch }) {
73861
73903
  { label: "Edit custom pattern…", value: "pattern" },
73862
73904
  { label: "Done", value: "done" }
73863
73905
  ];
73864
- return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73906
+ return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Box_default, {
73865
73907
  flexDirection: "column",
73866
73908
  gap: 1,
73867
73909
  children: [
73868
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73910
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73869
73911
  bold: true,
73870
73912
  children: "Advanced global commit policy"
73871
73913
  }, undefined, false, undefined, this),
73872
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73914
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73873
73915
  dimColor: true,
73874
73916
  children: "Default convention used when a workspace has no commit override."
73875
73917
  }, undefined, false, undefined, this),
73876
- draft.values.commitPolicy.pattern && /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73918
+ draft.values.commitPolicy.pattern && /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73877
73919
  dimColor: true,
73878
73920
  children: [
73879
73921
  "Custom pattern: ",
73880
73922
  draft.values.commitPolicy.pattern
73881
73923
  ]
73882
73924
  }, undefined, true, undefined, this),
73883
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(SelectList, {
73925
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(SelectList, {
73884
73926
  options,
73885
73927
  value: draft.values.commitPolicy.preset,
73886
73928
  onSelect: (value) => {
@@ -73892,7 +73934,7 @@ function GlobalCommitPolicyScreen({ draft, dispatch }) {
73892
73934
  dispatch({ type: "globalCommitPreset", value });
73893
73935
  }
73894
73936
  }, undefined, false, undefined, this),
73895
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73937
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73896
73938
  dimColor: true,
73897
73939
  children: "Enter to select · b Back"
73898
73940
  }, undefined, false, undefined, this)
@@ -73900,42 +73942,42 @@ function GlobalCommitPolicyScreen({ draft, dispatch }) {
73900
73942
  }, undefined, true, undefined, this);
73901
73943
  }
73902
73944
  function GlobalCommitPatternScreen({ draft, dispatch }) {
73903
- return /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Box_default, {
73945
+ return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Box_default, {
73904
73946
  flexDirection: "column",
73905
73947
  gap: 1,
73906
73948
  children: [
73907
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73949
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73908
73950
  bold: true,
73909
73951
  children: "Advanced global commit policy · Custom pattern"
73910
73952
  }, undefined, false, undefined, this),
73911
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73953
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73912
73954
  dimColor: true,
73913
73955
  children: "Regular expression matched against the commit subject line."
73914
73956
  }, undefined, false, undefined, this),
73915
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(TextInput, {
73957
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(StableTextInput, {
73916
73958
  defaultValue: draft.values.commitPolicy.pattern ?? "",
73917
73959
  onChange: (value) => dispatch({ type: "globalCommitPattern", value }),
73918
73960
  onSubmit: () => dispatch({ type: "globalCommitPatternDone" })
73919
73961
  }, undefined, false, undefined, this),
73920
- /* @__PURE__ */ jsx_dev_runtime5.jsxDEV(Text, {
73962
+ /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
73921
73963
  dimColor: true,
73922
73964
  children: "Enter to save · Esc Back"
73923
73965
  }, undefined, false, undefined, this)
73924
73966
  ]
73925
73967
  }, undefined, true, undefined, this);
73926
73968
  }
73927
- var jsx_dev_runtime5;
73969
+ var jsx_dev_runtime6;
73928
73970
  var init_workspace_screens = __esm(async () => {
73929
73971
  init_workspaces();
73930
73972
  init_logic();
73931
73973
  init_wizard_state();
73932
73974
  await __promiseAll([
73975
+ init_ink_style(),
73933
73976
  init_build2(),
73934
- init_build3(),
73935
73977
  init_select_list(),
73936
73978
  init_options()
73937
73979
  ]);
73938
- jsx_dev_runtime5 = __toESM(require_jsx_dev_runtime(), 1);
73980
+ jsx_dev_runtime6 = __toESM(require_jsx_dev_runtime(), 1);
73939
73981
  });
73940
73982
 
73941
73983
  // packages/workit-cli/src/steps/sphere-spinner.tsx
@@ -73946,16 +73988,16 @@ function SphereSpinner({
73946
73988
  now = Date.now
73947
73989
  }) {
73948
73990
  const mode = terminalMode({ stream, env });
73949
- const [began] = import_react68.useState(now);
73950
- const [tick, setTick] = import_react68.useState(0);
73951
- import_react68.useEffect(() => {
73991
+ const [began] = import_react69.useState(now);
73992
+ const [tick, setTick] = import_react69.useState(0);
73993
+ import_react69.useEffect(() => {
73952
73994
  if (mode === "off")
73953
73995
  return;
73954
73996
  const timer = setInterval(() => setTick((n) => n + 1), SPINNER_FRAME_MS);
73955
73997
  return () => clearInterval(timer);
73956
73998
  }, [mode]);
73957
73999
  if (mode === "off")
73958
- return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
74000
+ return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
73959
74001
  children: [
73960
74002
  label,
73961
74003
  "…"
@@ -73965,7 +74007,7 @@ function SphereSpinner({
73965
74007
  const frame = SPINNER_FRAMES[tick % SPINNER_FRAMES.length] ?? "";
73966
74008
  const glyph = mode === "spinner" ? spinnerPaint(elapsed, env, frame) : frame;
73967
74009
  const shown = env.TERM === "dumb" ? "..." : glyph;
73968
- return /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(Text, {
74010
+ return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
73969
74011
  children: [
73970
74012
  shown,
73971
74013
  " ",
@@ -73976,21 +74018,21 @@ function SphereSpinner({
73976
74018
  ]
73977
74019
  }, undefined, true, undefined, this);
73978
74020
  }
73979
- var import_react68, jsx_dev_runtime6;
74021
+ var import_react69, jsx_dev_runtime7;
73980
74022
  var init_sphere_spinner = __esm(async () => {
73981
74023
  init_style();
73982
74024
  await init_build2();
73983
- import_react68 = __toESM(require_react(), 1);
73984
- jsx_dev_runtime6 = __toESM(require_jsx_dev_runtime(), 1);
74025
+ import_react69 = __toESM(require_react(), 1);
74026
+ jsx_dev_runtime7 = __toESM(require_jsx_dev_runtime(), 1);
73985
74027
  });
73986
74028
 
73987
74029
  // packages/workit-cli/src/steps/finish-screens.tsx
73988
74030
  function BranchPolicyScreen({ draft, dispatch }) {
73989
74031
  const detected = draft.values.branchPolicyDetected;
73990
74032
  const policy = draft.values.branchPolicy ?? detected;
73991
- const [mode, setMode] = import_react69.useState("menu");
74033
+ const [mode, setMode] = import_react70.useState("menu");
73992
74034
  const basePath = resolveBasePath(draft.values);
73993
- import_react69.useEffect(() => {
74035
+ import_react70.useEffect(() => {
73994
74036
  if (detected)
73995
74037
  return;
73996
74038
  dispatch({
@@ -74000,15 +74042,15 @@ function BranchPolicyScreen({ draft, dispatch }) {
74000
74042
  });
74001
74043
  }, [detected, dispatch, basePath]);
74002
74044
  if (mode === "integration") {
74003
- return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74045
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74004
74046
  flexDirection: "column",
74005
74047
  gap: 1,
74006
74048
  children: [
74007
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74049
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74008
74050
  bold: true,
74009
74051
  children: "Step 5 — Branch policy · Integration"
74010
74052
  }, undefined, false, undefined, this),
74011
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(SelectList, {
74053
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(SelectList, {
74012
74054
  options: INTEGRATION_OPTIONS,
74013
74055
  value: policy?.integration ?? "merge",
74014
74056
  onSelect: (value) => {
@@ -74016,76 +74058,76 @@ function BranchPolicyScreen({ draft, dispatch }) {
74016
74058
  setMode("menu");
74017
74059
  }
74018
74060
  }, undefined, false, undefined, this),
74019
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74061
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74020
74062
  dimColor: true,
74021
74063
  children: "Enter to select · b Back · Esc Cancel"
74022
74064
  }, undefined, false, undefined, this)
74023
74065
  ]
74024
74066
  }, undefined, true, undefined, this);
74025
74067
  }
74026
- return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74068
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74027
74069
  flexDirection: "column",
74028
74070
  gap: 1,
74029
74071
  children: [
74030
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74072
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74031
74073
  bold: true,
74032
74074
  children: "Step 5 — Branch policy"
74033
74075
  }, undefined, false, undefined, this),
74034
- policy ? /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74076
+ policy ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74035
74077
  flexDirection: "column",
74036
74078
  gap: 0,
74037
74079
  children: [
74038
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74080
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74039
74081
  children: [
74040
74082
  "Detected preset: ",
74041
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74042
- color: "green",
74083
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74084
+ color: inkColor("ok"),
74043
74085
  children: policy.preset
74044
74086
  }, undefined, false, undefined, this)
74045
74087
  ]
74046
74088
  }, undefined, true, undefined, this),
74047
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74089
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74048
74090
  children: [
74049
74091
  "Develop branch: ",
74050
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74051
- color: "green",
74092
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74093
+ color: inkColor("ok"),
74052
74094
  children: policy.developBranch ?? "—"
74053
74095
  }, undefined, false, undefined, this)
74054
74096
  ]
74055
74097
  }, undefined, true, undefined, this),
74056
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74098
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74057
74099
  children: [
74058
74100
  "Integration: ",
74059
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74060
- color: "green",
74101
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74102
+ color: inkColor("ok"),
74061
74103
  children: policy.integration
74062
74104
  }, undefined, false, undefined, this)
74063
74105
  ]
74064
74106
  }, undefined, true, undefined, this),
74065
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74107
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74066
74108
  children: [
74067
74109
  "Prefixes:",
74068
74110
  " ",
74069
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74070
- color: "green",
74111
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74112
+ color: inkColor("ok"),
74071
74113
  children: Object.values(policy.prefixes ?? {}).join(", ") || "—"
74072
74114
  }, undefined, false, undefined, this)
74073
74115
  ]
74074
74116
  }, undefined, true, undefined, this),
74075
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74117
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74076
74118
  children: [
74077
74119
  "Protected: ",
74078
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74079
- color: "green",
74120
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74121
+ color: inkColor("ok"),
74080
74122
  children: policy.protected?.join(", ") || "—"
74081
74123
  }, undefined, false, undefined, this)
74082
74124
  ]
74083
74125
  }, undefined, true, undefined, this)
74084
74126
  ]
74085
- }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(SphereSpinner, {
74127
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(SphereSpinner, {
74086
74128
  label: "Detecting branch policy"
74087
74129
  }, undefined, false, undefined, this),
74088
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(SelectList, {
74130
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(SelectList, {
74089
74131
  options: BRANCH_POLICY_ACTIONS,
74090
74132
  value: "accept",
74091
74133
  onSelect: (value) => {
@@ -74101,7 +74143,7 @@ function BranchPolicyScreen({ draft, dispatch }) {
74101
74143
  dispatch({ type: "next" });
74102
74144
  }
74103
74145
  }, undefined, false, undefined, this),
74104
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74146
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74105
74147
  dimColor: true,
74106
74148
  children: "Enter to continue · b Back · Esc Cancel"
74107
74149
  }, undefined, false, undefined, this)
@@ -74138,33 +74180,33 @@ function mutationRows(mutations) {
74138
74180
  });
74139
74181
  }
74140
74182
  function BasePathScreen({ draft, dispatch }) {
74141
- const onChange = import_react69.useCallback((value) => dispatch({ type: "set", field: "basePath", value }), [dispatch]);
74142
- const onSubmit = import_react69.useCallback((value) => {
74183
+ const onChange = import_react70.useCallback((value) => dispatch({ type: "set", field: "basePath", value }), [dispatch]);
74184
+ const onSubmit = import_react70.useCallback((value) => {
74143
74185
  dispatch({ type: "set", field: "basePath", value });
74144
74186
  dispatch({ type: "next" });
74145
74187
  }, [dispatch]);
74146
- return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74188
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74147
74189
  flexDirection: "column",
74148
74190
  gap: 1,
74149
74191
  children: [
74150
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74192
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74151
74193
  bold: true,
74152
74194
  children: "Step 5 — Workspace root"
74153
74195
  }, undefined, false, undefined, this),
74154
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74196
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74155
74197
  dimColor: true,
74156
74198
  children: "Absolute path where your projects live (e.g. /work):"
74157
74199
  }, undefined, false, undefined, this),
74158
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(TextInput, {
74200
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(StableTextInput, {
74159
74201
  defaultValue: draft.values.basePath,
74160
74202
  onChange,
74161
74203
  onSubmit
74162
74204
  }, undefined, false, undefined, this),
74163
- draft.errors.basePath && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74164
- color: "red",
74205
+ draft.errors.basePath && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74206
+ color: inkColor("fail"),
74165
74207
  children: draft.errors.basePath
74166
74208
  }, undefined, false, undefined, this),
74167
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74209
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74168
74210
  dimColor: true,
74169
74211
  children: "Enter to continue · Esc Back"
74170
74212
  }, undefined, false, undefined, this)
@@ -74172,19 +74214,19 @@ function BasePathScreen({ draft, dispatch }) {
74172
74214
  }, undefined, true, undefined, this);
74173
74215
  }
74174
74216
  function BranchPolicyDevelopScreen({ draft, dispatch }) {
74175
- return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74217
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74176
74218
  flexDirection: "column",
74177
74219
  gap: 1,
74178
74220
  children: [
74179
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74221
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74180
74222
  bold: true,
74181
74223
  children: "Step 5 — Branch policy · Develop branch"
74182
74224
  }, undefined, false, undefined, this),
74183
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74225
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74184
74226
  dimColor: true,
74185
74227
  children: "Integration/develop branch name (leave empty to unset):"
74186
74228
  }, undefined, false, undefined, this),
74187
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(TextInput, {
74229
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(StableTextInput, {
74188
74230
  placeholder: SCREEN_PLACEHOLDERS.branchPolicyDevelop,
74189
74231
  defaultValue: draft.values.branchPolicy?.developBranch ?? draft.values.branchPolicyDetected?.developBranch ?? "",
74190
74232
  onSubmit: (value) => {
@@ -74192,7 +74234,7 @@ function BranchPolicyDevelopScreen({ draft, dispatch }) {
74192
74234
  dispatch({ type: "next" });
74193
74235
  }
74194
74236
  }, undefined, false, undefined, this),
74195
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74237
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74196
74238
  dimColor: true,
74197
74239
  children: "Enter to save · Esc Back"
74198
74240
  }, undefined, false, undefined, this)
@@ -74202,22 +74244,22 @@ function BranchPolicyDevelopScreen({ draft, dispatch }) {
74202
74244
  function ProjectScreen({ draft, dispatch }) {
74203
74245
  const target = projectTargetFor(resolveBasePath(draft.values));
74204
74246
  if (!target.ok) {
74205
- return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74247
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74206
74248
  flexDirection: "column",
74207
74249
  gap: 1,
74208
74250
  children: [
74209
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74251
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74210
74252
  bold: true,
74211
74253
  children: "Step 6 — Project setup"
74212
74254
  }, undefined, false, undefined, this),
74213
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74214
- color: "yellow",
74255
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74256
+ color: inkColor("warn"),
74215
74257
  children: [
74216
74258
  "Skipped: ",
74217
74259
  target.refused
74218
74260
  ]
74219
74261
  }, undefined, true, undefined, this),
74220
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ConfirmInput, {
74262
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ConfirmInput, {
74221
74263
  defaultChoice: "confirm",
74222
74264
  submitOnEnter: false,
74223
74265
  onConfirm: () => {
@@ -74229,22 +74271,22 @@ function ProjectScreen({ draft, dispatch }) {
74229
74271
  dispatch({ type: "next" });
74230
74272
  }
74231
74273
  }, undefined, false, undefined, this),
74232
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74274
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74233
74275
  dimColor: true,
74234
74276
  children: "y to keep this note in the summary · n to skip it · either adds no project files · b Back · Esc Cancel"
74235
74277
  }, undefined, false, undefined, this)
74236
74278
  ]
74237
74279
  }, undefined, true, undefined, this);
74238
74280
  }
74239
- return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74281
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74240
74282
  flexDirection: "column",
74241
74283
  gap: 1,
74242
74284
  children: [
74243
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74285
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74244
74286
  bold: true,
74245
74287
  children: "Step 6 — Project setup"
74246
74288
  }, undefined, false, undefined, this),
74247
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74289
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74248
74290
  dimColor: true,
74249
74291
  children: [
74250
74292
  "Apply gitignore + hygiene in ",
@@ -74252,7 +74294,7 @@ function ProjectScreen({ draft, dispatch }) {
74252
74294
  "? (Existing files are never overwritten.)"
74253
74295
  ]
74254
74296
  }, undefined, true, undefined, this),
74255
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ConfirmInput, {
74297
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ConfirmInput, {
74256
74298
  defaultChoice: "cancel",
74257
74299
  submitOnEnter: false,
74258
74300
  onConfirm: () => {
@@ -74264,7 +74306,7 @@ function ProjectScreen({ draft, dispatch }) {
74264
74306
  dispatch({ type: "next" });
74265
74307
  }
74266
74308
  }, undefined, false, undefined, this),
74267
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74309
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74268
74310
  dimColor: true,
74269
74311
  children: "y to add project files · n to skip · b Back · Esc Cancel"
74270
74312
  }, undefined, false, undefined, this)
@@ -74273,7 +74315,9 @@ function ProjectScreen({ draft, dispatch }) {
74273
74315
  }
74274
74316
  function SummaryScreen({ draft, dispatch }) {
74275
74317
  const policy = effectivePolicy(draft.values);
74276
- const preview = buildSetupPreview(draft.values, { cwd: resolveBasePath(draft.values) });
74318
+ const preview = buildSetupPreview(draft.values, {
74319
+ cwd: resolveBasePath(draft.values)
74320
+ });
74277
74321
  const policyPreview = (() => {
74278
74322
  try {
74279
74323
  const current = readConfig();
@@ -74304,38 +74348,38 @@ function SummaryScreen({ draft, dispatch }) {
74304
74348
  }
74305
74349
  })();
74306
74350
  const canApply = preview.ok && policyPreview.error === null;
74307
- return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74351
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74308
74352
  flexDirection: "column",
74309
74353
  gap: 1,
74310
74354
  children: [
74311
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74355
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74312
74356
  bold: true,
74313
- color: "cyan",
74357
+ color: inkColor("accent"),
74314
74358
  children: "Review"
74315
74359
  }, undefined, false, undefined, this),
74316
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74360
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74317
74361
  children: [
74318
74362
  "Platforms: ",
74319
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74320
- color: "green",
74363
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74364
+ color: inkColor("ok"),
74321
74365
  children: draft.values.platforms.join(", ") || "—"
74322
74366
  }, undefined, false, undefined, this)
74323
74367
  ]
74324
74368
  }, undefined, true, undefined, this),
74325
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74369
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74326
74370
  children: [
74327
74371
  "Locale: ",
74328
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74329
- color: "green",
74372
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74373
+ color: inkColor("ok"),
74330
74374
  children: draft.values.locale
74331
74375
  }, undefined, false, undefined, this)
74332
74376
  ]
74333
74377
  }, undefined, true, undefined, this),
74334
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74378
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74335
74379
  children: [
74336
74380
  "Branch policy: ",
74337
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74338
- color: "green",
74381
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74382
+ color: inkColor("ok"),
74339
74383
  children: policy.preset
74340
74384
  }, undefined, false, undefined, this),
74341
74385
  " — allowed:",
@@ -74345,97 +74389,101 @@ function SummaryScreen({ draft, dispatch }) {
74345
74389
  policy.protected.join(", ")
74346
74390
  ]
74347
74391
  }, undefined, true, undefined, this),
74348
- policyPreview.error === null ? /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74392
+ policyPreview.error === null ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74349
74393
  flexDirection: "column",
74350
74394
  gap: 0,
74351
74395
  children: [
74352
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74396
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74353
74397
  children: [
74354
74398
  "Sample checkout: ",
74355
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74356
- color: "green",
74399
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74400
+ color: inkColor("ok"),
74357
74401
  children: resolveBasePath(draft.values)
74358
74402
  }, undefined, false, undefined, this),
74359
74403
  policyPreview.workspace ? ` · workspace ${policyPreview.workspace}` : " · no matching workspace"
74360
74404
  ]
74361
74405
  }, undefined, true, undefined, this),
74362
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74406
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74363
74407
  children: [
74364
- "Effective branch policy: ",
74365
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74366
- color: "green",
74408
+ "Effective branch policy:",
74409
+ " ",
74410
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74411
+ color: inkColor("ok"),
74367
74412
  children: policyPreview.branchPreset
74368
74413
  }, undefined, false, undefined, this),
74369
- " · target ",
74414
+ " · target",
74415
+ " ",
74370
74416
  policyPreview.target,
74371
74417
  " · source ",
74372
74418
  policyPreview.branchSource
74373
74419
  ]
74374
74420
  }, undefined, true, undefined, this),
74375
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74421
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74376
74422
  children: [
74377
- "Effective commit policy: ",
74378
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74379
- color: "green",
74423
+ "Effective commit policy:",
74424
+ " ",
74425
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74426
+ color: inkColor("ok"),
74380
74427
  children: policyPreview.commitPreset
74381
74428
  }, undefined, false, undefined, this),
74382
- " · source ",
74429
+ " · source",
74430
+ " ",
74383
74431
  policyPreview.commitSource
74384
74432
  ]
74385
74433
  }, undefined, true, undefined, this)
74386
74434
  ]
74387
- }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74388
- color: "red",
74435
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74436
+ color: inkColor("fail"),
74389
74437
  children: [
74390
74438
  "Policy preview failed: ",
74391
74439
  policyPreview.error
74392
74440
  ]
74393
74441
  }, undefined, true, undefined, this),
74394
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74442
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74395
74443
  children: [
74396
74444
  "YouTrack base URL:",
74397
74445
  " ",
74398
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74399
- color: "green",
74446
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74447
+ color: inkColor("ok"),
74400
74448
  children: draft.values.issueTracker === "youtrack" ? draft.values.baseUrl.trim() ? draft.values.baseUrl : "— (skip)" : "—"
74401
74449
  }, undefined, false, undefined, this)
74402
74450
  ]
74403
74451
  }, undefined, true, undefined, this),
74404
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74452
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74405
74453
  children: [
74406
74454
  "VCS provider: ",
74407
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74408
- color: "green",
74455
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74456
+ color: inkColor("ok"),
74409
74457
  children: draft.values.vcsProvider
74410
74458
  }, undefined, false, undefined, this)
74411
74459
  ]
74412
74460
  }, undefined, true, undefined, this),
74413
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74461
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74414
74462
  children: [
74415
74463
  "Project hygiene:",
74416
74464
  " ",
74417
- preview.projectRefused ? /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74418
- color: "yellow",
74465
+ preview.projectRefused ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74466
+ color: inkColor("warn"),
74419
74467
  children: [
74420
74468
  "skipped — ",
74421
74469
  preview.projectRefused
74422
74470
  ]
74423
- }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74424
- color: "green",
74471
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74472
+ color: inkColor("ok"),
74425
74473
  children: draft.values.applyProject ? "yes" : "no"
74426
74474
  }, undefined, false, undefined, this)
74427
74475
  ]
74428
74476
  }, undefined, true, undefined, this),
74429
- preview.overrides.length > 0 && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74477
+ preview.overrides.length > 0 && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74430
74478
  flexDirection: "column",
74431
74479
  gap: 0,
74432
74480
  children: [
74433
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74481
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74434
74482
  bold: true,
74435
74483
  children: "Environment overrides (not applied by the wizard):"
74436
74484
  }, undefined, false, undefined, this),
74437
- preview.overrides.map((o) => /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74438
- color: "yellow",
74485
+ preview.overrides.map((o) => /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74486
+ color: inkColor("warn"),
74439
74487
  children: [
74440
74488
  o.envKey,
74441
74489
  " → ",
@@ -74446,19 +74494,19 @@ function SummaryScreen({ draft, dispatch }) {
74446
74494
  }, o.envKey, true, undefined, this))
74447
74495
  ]
74448
74496
  }, undefined, true, undefined, this),
74449
- canApply ? /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74497
+ canApply ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74450
74498
  flexDirection: "column",
74451
74499
  gap: 0,
74452
74500
  children: [
74453
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74501
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74454
74502
  bold: true,
74455
74503
  children: "Will apply:"
74456
74504
  }, undefined, false, undefined, this),
74457
- mutationRows(preview.mutations).map((row) => /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74505
+ mutationRows(preview.mutations).map((row) => /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74458
74506
  children: row.text
74459
74507
  }, row.key, false, undefined, this)),
74460
- preview.preserved.map((p) => /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74461
- color: "green",
74508
+ preview.preserved.map((p) => /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74509
+ color: inkColor("ok"),
74462
74510
  children: [
74463
74511
  "preserve ",
74464
74512
  p,
@@ -74466,32 +74514,32 @@ function SummaryScreen({ draft, dispatch }) {
74466
74514
  ]
74467
74515
  }, p, true, undefined, this))
74468
74516
  ]
74469
- }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74517
+ }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74470
74518
  flexDirection: "column",
74471
74519
  gap: 0,
74472
74520
  children: [
74473
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74521
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74474
74522
  bold: true,
74475
- color: "red",
74523
+ color: inkColor("fail"),
74476
74524
  children: "Apply blocked — malformed configuration:"
74477
74525
  }, undefined, false, undefined, this),
74478
- preview.blocked.map((b) => /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74479
- color: "red",
74526
+ preview.blocked.map((b) => /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74527
+ color: inkColor("fail"),
74480
74528
  children: b
74481
74529
  }, b, false, undefined, this)),
74482
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74530
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74483
74531
  dimColor: true,
74484
74532
  children: "Fix or remove the blocked file above, then return here. Esc Cancel."
74485
74533
  }, undefined, false, undefined, this)
74486
74534
  ]
74487
74535
  }, undefined, true, undefined, this),
74488
- canApply && /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(ConfirmInput, {
74536
+ canApply && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ConfirmInput, {
74489
74537
  defaultChoice: "confirm",
74490
74538
  submitOnEnter: false,
74491
74539
  onConfirm: () => dispatch({ type: "apply" }),
74492
74540
  onCancel: () => {}
74493
74541
  }, undefined, false, undefined, this),
74494
- /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74542
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74495
74543
  dimColor: true,
74496
74544
  children: canApply ? "y to apply · b Back · Esc Cancel" : "b Back · Esc Cancel"
74497
74545
  }, undefined, false, undefined, this)
@@ -74499,16 +74547,16 @@ function SummaryScreen({ draft, dispatch }) {
74499
74547
  }, undefined, true, undefined, this);
74500
74548
  }
74501
74549
  function ExitScreen() {
74502
- return /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Box_default, {
74550
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74503
74551
  flexDirection: "column",
74504
74552
  gap: 1,
74505
- children: /* @__PURE__ */ jsx_dev_runtime7.jsxDEV(Text, {
74553
+ children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74506
74554
  dimColor: true,
74507
74555
  children: "Exiting…"
74508
74556
  }, undefined, false, undefined, this)
74509
74557
  }, undefined, false, undefined, this);
74510
74558
  }
74511
- var import_react69, jsx_dev_runtime7, lastProjectTarget = null, projectTargetFor = (base) => {
74559
+ var import_react70, jsx_dev_runtime8, lastProjectTarget = null, projectTargetFor = (base) => {
74512
74560
  if (lastProjectTarget?.base !== base)
74513
74561
  lastProjectTarget = { base, target: projectTarget(base) };
74514
74562
  return lastProjectTarget.target;
@@ -74521,14 +74569,15 @@ var init_finish_screens = __esm(async () => {
74521
74569
  init_logic();
74522
74570
  init_wizard_state();
74523
74571
  await __promiseAll([
74572
+ init_ink_style(),
74524
74573
  init_build2(),
74525
74574
  init_build3(),
74526
74575
  init_select_list(),
74527
74576
  init_sphere_spinner(),
74528
74577
  init_options()
74529
74578
  ]);
74530
- import_react69 = __toESM(require_react(), 1);
74531
- jsx_dev_runtime7 = __toESM(require_jsx_dev_runtime(), 1);
74579
+ import_react70 = __toESM(require_react(), 1);
74580
+ jsx_dev_runtime8 = __toESM(require_jsx_dev_runtime(), 1);
74532
74581
  BRANCH_POLICY_ACTIONS = [
74533
74582
  { label: "Accept defaults", value: "accept" },
74534
74583
  { label: "Edit integration", value: "integration" },
@@ -74546,32 +74595,32 @@ function WorkspaceCollectionEditor({
74546
74595
  draft,
74547
74596
  dispatch
74548
74597
  }) {
74549
- const [view, setView] = import_react70.useState({ mode: "main" });
74598
+ const [view, setView] = import_react71.useState({ mode: "main" });
74550
74599
  const workspace = draft.workspaceDraft;
74551
74600
  if (!workspace)
74552
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74553
- color: "red",
74601
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74602
+ color: inkColor("fail"),
74554
74603
  children: "Workspace draft is unavailable."
74555
74604
  }, undefined, false, undefined, this);
74556
74605
  switch (view.mode) {
74557
74606
  case "main":
74558
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(MainMenu, {
74607
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(MainMenu, {
74559
74608
  workspace,
74560
74609
  dispatch,
74561
74610
  setView
74562
74611
  }, undefined, false, undefined, this);
74563
74612
  case "menu":
74564
- return view.kind === "profile" ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ProfilesMenu, {
74613
+ return view.kind === "profile" ? /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ProfilesMenu, {
74565
74614
  workspace,
74566
74615
  dispatch,
74567
74616
  setView
74568
- }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(TracksMenu, {
74617
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(TracksMenu, {
74569
74618
  workspace,
74570
74619
  dispatch,
74571
74620
  setView
74572
74621
  }, undefined, false, undefined, this);
74573
74622
  case "name":
74574
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(NameInput, {
74623
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(NameInput, {
74575
74624
  collection: COLLECTIONS[view.kind],
74576
74625
  workspace,
74577
74626
  onCreate: (name) => {
@@ -74580,7 +74629,7 @@ function WorkspaceCollectionEditor({
74580
74629
  }
74581
74630
  }, undefined, false, undefined, this);
74582
74631
  case "edit":
74583
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(EntryFields, {
74632
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(EntryFields, {
74584
74633
  collection: COLLECTIONS[view.kind],
74585
74634
  workspace,
74586
74635
  name: view.name,
@@ -74588,7 +74637,7 @@ function WorkspaceCollectionEditor({
74588
74637
  onPick: (field) => setView({ ...view, mode: "value", field })
74589
74638
  }, undefined, false, undefined, this);
74590
74639
  case "value":
74591
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(EntryFieldValue, {
74640
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(EntryFieldValue, {
74592
74641
  collection: COLLECTIONS[view.kind],
74593
74642
  workspace,
74594
74643
  name: view.name,
@@ -74601,22 +74650,22 @@ function WorkspaceCollectionEditor({
74601
74650
  }
74602
74651
  }
74603
74652
  function MainMenu({ workspace, dispatch, setView }) {
74604
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74653
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
74605
74654
  flexDirection: "column",
74606
74655
  gap: 1,
74607
74656
  children: [
74608
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74657
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74609
74658
  bold: true,
74610
74659
  children: [
74611
74660
  "Advanced workspace settings · ",
74612
74661
  workspace.name
74613
74662
  ]
74614
74663
  }, undefined, true, undefined, this),
74615
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74664
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74616
74665
  dimColor: true,
74617
74666
  children: "Choose a setting to edit. Lists use comma-separated values; blank clears an override."
74618
74667
  }, undefined, false, undefined, this),
74619
- [...WORKSPACE_ADVANCED_FIELDS].map(({ label, value }) => /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74668
+ [...WORKSPACE_ADVANCED_FIELDS].map(({ label, value }) => /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74620
74669
  dimColor: true,
74621
74670
  children: [
74622
74671
  label,
@@ -74624,7 +74673,7 @@ function MainMenu({ workspace, dispatch, setView }) {
74624
74673
  workspaceEditorValue(workspace, value) || "inherited / unset"
74625
74674
  ]
74626
74675
  }, value, true, undefined, this)),
74627
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(SelectList, {
74676
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(SelectList, {
74628
74677
  options: MAIN_OPTIONS,
74629
74678
  value: "save",
74630
74679
  onSelect: (value) => {
@@ -74651,22 +74700,22 @@ function ProfilesMenu({ workspace, dispatch, setView }) {
74651
74700
  { label: "Create profile", value: "create" },
74652
74701
  { label: "Back to advanced settings", value: "back" }
74653
74702
  ];
74654
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74703
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
74655
74704
  flexDirection: "column",
74656
74705
  gap: 1,
74657
74706
  children: [
74658
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74707
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74659
74708
  bold: true,
74660
74709
  children: [
74661
74710
  "Profiles · default: ",
74662
74711
  workspace.defaultProfile ?? "none"
74663
74712
  ]
74664
74713
  }, undefined, true, undefined, this),
74665
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74714
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74666
74715
  dimColor: true,
74667
74716
  children: "Profiles can override branch rules and commit conventions."
74668
74717
  }, undefined, false, undefined, this),
74669
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(SelectList, {
74718
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(SelectList, {
74670
74719
  options,
74671
74720
  value: "back",
74672
74721
  onSelect: (value) => {
@@ -74695,19 +74744,19 @@ function TracksMenu({ workspace, dispatch, setView }) {
74695
74744
  { label: "Create release track", value: "create" },
74696
74745
  { label: "Back to advanced settings", value: "back" }
74697
74746
  ];
74698
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74747
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
74699
74748
  flexDirection: "column",
74700
74749
  gap: 1,
74701
74750
  children: [
74702
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74751
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74703
74752
  bold: true,
74704
74753
  children: "Named release tracks"
74705
74754
  }, undefined, false, undefined, this),
74706
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74755
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74707
74756
  dimColor: true,
74708
74757
  children: "Each track has its own branches, naming, version source, and checks."
74709
74758
  }, undefined, false, undefined, this),
74710
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(SelectList, {
74759
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(SelectList, {
74711
74760
  options,
74712
74761
  value: "back",
74713
74762
  onSelect: (value) => {
@@ -74730,20 +74779,20 @@ function NameInput({
74730
74779
  workspace,
74731
74780
  onCreate
74732
74781
  }) {
74733
- const [error, setError] = import_react70.useState("");
74734
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74782
+ const [error, setError] = import_react71.useState("");
74783
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
74735
74784
  flexDirection: "column",
74736
74785
  gap: 1,
74737
74786
  children: [
74738
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74787
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74739
74788
  bold: true,
74740
74789
  children: collection.createTitle
74741
74790
  }, undefined, false, undefined, this),
74742
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74791
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74743
74792
  dimColor: true,
74744
74793
  children: collection.nameLabel
74745
74794
  }, undefined, false, undefined, this),
74746
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(TextInput, {
74795
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(StableTextInput, {
74747
74796
  onSubmit: (value) => {
74748
74797
  const next = value.trim();
74749
74798
  if (!next)
@@ -74754,11 +74803,11 @@ function NameInput({
74754
74803
  onCreate(next);
74755
74804
  }
74756
74805
  }, undefined, false, undefined, this),
74757
- error && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74758
- color: "red",
74806
+ error && /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74807
+ color: inkColor("fail"),
74759
74808
  children: error
74760
74809
  }, undefined, false, undefined, this),
74761
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74810
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74762
74811
  dimColor: true,
74763
74812
  children: "Enter to create · Esc Back"
74764
74813
  }, undefined, false, undefined, this)
@@ -74773,11 +74822,11 @@ function EntryFields({
74773
74822
  onPick
74774
74823
  }) {
74775
74824
  const options = [...collection.fields, { label: "Done editing", value: "done" }];
74776
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74825
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
74777
74826
  flexDirection: "column",
74778
74827
  gap: 1,
74779
74828
  children: [
74780
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74829
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74781
74830
  bold: true,
74782
74831
  children: [
74783
74832
  collection.editTitle,
@@ -74787,7 +74836,7 @@ function EntryFields({
74787
74836
  }, undefined, true, undefined, this),
74788
74837
  collection.fields.map((item) => {
74789
74838
  const value = collection.valueOf(workspace, name, item.value);
74790
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74839
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74791
74840
  dimColor: true,
74792
74841
  children: [
74793
74842
  item.label,
@@ -74796,7 +74845,7 @@ function EntryFields({
74796
74845
  ]
74797
74846
  }, item.value, true, undefined, this);
74798
74847
  }),
74799
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(SelectList, {
74848
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(SelectList, {
74800
74849
  options,
74801
74850
  value: "done",
74802
74851
  onSelect: (value) => value === "done" ? onDone() : onPick(value)
@@ -74814,11 +74863,11 @@ function EntryFieldValue({
74814
74863
  const item = collection.fields.find((entry) => entry.value === field);
74815
74864
  const choices = enumFieldOptions(field);
74816
74865
  const current = collection.valueOf(workspace, name, field);
74817
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
74866
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
74818
74867
  flexDirection: "column",
74819
74868
  gap: 1,
74820
74869
  children: [
74821
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74870
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74822
74871
  bold: true,
74823
74872
  children: [
74824
74873
  collection.valueTitle,
@@ -74828,32 +74877,32 @@ function EntryFieldValue({
74828
74877
  item?.label
74829
74878
  ]
74830
74879
  }, undefined, true, undefined, this),
74831
- choices ? /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(SelectList, {
74880
+ choices ? /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(SelectList, {
74832
74881
  options: choices,
74833
74882
  value: current ?? choices[0].value,
74834
74883
  onSelect: onSave
74835
- }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(TextInput, {
74884
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(StableTextInput, {
74836
74885
  defaultValue: current ?? "",
74837
74886
  onSubmit: onSave
74838
74887
  }, undefined, false, undefined, this),
74839
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
74888
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
74840
74889
  dimColor: true,
74841
74890
  children: collection.valueFooter
74842
74891
  }, undefined, false, undefined, this)
74843
74892
  ]
74844
74893
  }, undefined, true, undefined, this);
74845
74894
  }
74846
- var import_react70, jsx_dev_runtime8, COLLECTIONS, MAIN_OPTIONS;
74895
+ var import_react71, jsx_dev_runtime9, COLLECTIONS, MAIN_OPTIONS;
74847
74896
  var init_workspace_editor = __esm(async () => {
74848
74897
  init_logic();
74849
74898
  await __promiseAll([
74899
+ init_ink_style(),
74850
74900
  init_build2(),
74851
- init_build3(),
74852
74901
  init_select_list(),
74853
74902
  init_options()
74854
74903
  ]);
74855
- import_react70 = __toESM(require_react(), 1);
74856
- jsx_dev_runtime8 = __toESM(require_jsx_dev_runtime(), 1);
74904
+ import_react71 = __toESM(require_react(), 1);
74905
+ jsx_dev_runtime9 = __toESM(require_jsx_dev_runtime(), 1);
74857
74906
  COLLECTIONS = {
74858
74907
  profile: {
74859
74908
  fields: PROFILE_FIELDS,
@@ -74913,14 +74962,14 @@ function Wizard({
74913
74962
  onExit,
74914
74963
  detection = emptyDetection()
74915
74964
  }) {
74916
- const [draft, dispatch] = import_react71.useReducer(reducer3, detection, (found) => {
74965
+ const [draft, dispatch] = import_react72.useReducer(reducer3, detection, (found) => {
74917
74966
  const initial = createInitialDraft();
74918
74967
  const platforms = preselectedPlatforms(found);
74919
74968
  return platforms.length > 0 ? { ...initial, values: { ...initial.values, platforms } } : initial;
74920
74969
  });
74921
- const exitedRef = import_react71.useRef(false);
74922
- const searchRef = import_react71.useRef({ q: "", typed: false });
74923
- import_react71.useEffect(() => {
74970
+ const exitedRef = import_react72.useRef(false);
74971
+ const searchRef = import_react72.useRef({ q: "", typed: false });
74972
+ import_react72.useEffect(() => {
74924
74973
  searchRef.current = { q: "", typed: false };
74925
74974
  }, [draft.screen]);
74926
74975
  use_input_default((input, key) => {
@@ -74938,22 +74987,22 @@ function Wizard({
74938
74987
  dispatch({ type: "back" });
74939
74988
  }
74940
74989
  });
74941
- import_react71.useEffect(() => {
74990
+ import_react72.useEffect(() => {
74942
74991
  if (draft.screen === "exit" && !exitedRef.current) {
74943
74992
  exitedRef.current = true;
74944
74993
  onExit(!draft.cancelled, draft.values);
74945
74994
  }
74946
74995
  }, [draft.screen, draft.cancelled, draft.values, onExit]);
74947
- return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
74996
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Box_default, {
74948
74997
  flexDirection: "column",
74949
74998
  gap: 1,
74950
74999
  children: [
74951
- /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
75000
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Text, {
74952
75001
  bold: true,
74953
- color: "cyan",
75002
+ color: inkColor("accent"),
74954
75003
  children: "workit — workflow rails for agentic coding"
74955
75004
  }, undefined, false, undefined, this),
74956
- /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Screen, {
75005
+ /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Screen, {
74957
75006
  draft,
74958
75007
  dispatch,
74959
75008
  detection,
@@ -74969,15 +75018,16 @@ function Wizard({
74969
75018
  }
74970
75019
  function Screen(props) {
74971
75020
  const Body = SCREENS[props.draft.screen];
74972
- return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Body, {
75021
+ return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Body, {
74973
75022
  ...props
74974
75023
  }, undefined, false, undefined, this);
74975
75024
  }
74976
- var import_react71, jsx_dev_runtime9, TEXT_SCREENS, SEARCH_SCREENS, SCREENS;
75025
+ var import_react72, jsx_dev_runtime10, TEXT_SCREENS, SEARCH_SCREENS, SCREENS;
74977
75026
  var init_steps = __esm(async () => {
74978
75027
  init_wizard_state();
74979
75028
  init_detect_hosts();
74980
75029
  await __promiseAll([
75030
+ init_ink_style(),
74981
75031
  init_build2(),
74982
75032
  init_options(),
74983
75033
  init_global_screens(),
@@ -74987,8 +75037,8 @@ var init_steps = __esm(async () => {
74987
75037
  init_options(),
74988
75038
  init_select_list()
74989
75039
  ]);
74990
- import_react71 = __toESM(require_react(), 1);
74991
- jsx_dev_runtime9 = __toESM(require_jsx_dev_runtime(), 1);
75040
+ import_react72 = __toESM(require_react(), 1);
75041
+ jsx_dev_runtime10 = __toESM(require_jsx_dev_runtime(), 1);
74992
75042
  TEXT_SCREENS = new Set([
74993
75043
  "localeOther",
74994
75044
  "branchAllowed",
@@ -75224,6 +75274,24 @@ const timer = setInterval(() => {
75224
75274
  NOOP_STEP = { label: () => {}, end: () => {} };
75225
75275
  });
75226
75276
 
75277
+ // packages/workit-cli/src/steps/ink-signals.ts
75278
+ function snapshotSignalListeners() {
75279
+ return new Map(SIGNALS.map((signal) => [signal, new Set(process.listeners(signal))]));
75280
+ }
75281
+ function dropSignalListenersAddedSince(snapshot) {
75282
+ for (const signal of SIGNALS) {
75283
+ const known = snapshot.get(signal);
75284
+ for (const listener of process.listeners(signal)) {
75285
+ if (!known?.has(listener))
75286
+ process.off(signal, listener);
75287
+ }
75288
+ }
75289
+ }
75290
+ var SIGNALS;
75291
+ var init_ink_signals = __esm(() => {
75292
+ SIGNALS = ["SIGINT", "SIGTERM", "SIGHUP"];
75293
+ });
75294
+
75227
75295
  // packages/workit-cli/src/index.tsx
75228
75296
  function printApplySummary(result, style) {
75229
75297
  for (const entry of result.entries) {
@@ -75264,7 +75332,8 @@ async function runInit() {
75264
75332
  const exits = [];
75265
75333
  let done = () => {};
75266
75334
  process.stdout.write("\x1B[2J\x1B[H");
75267
- const instance = render_default(/* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Wizard, {
75335
+ const signals = snapshotSignalListeners();
75336
+ const instance = render_default(/* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Wizard, {
75268
75337
  detection: progress.runSync("Detecting installed hosts", () => detectHosts()),
75269
75338
  onExit: (complete, values) => {
75270
75339
  exits.push({ complete, values });
@@ -75276,6 +75345,7 @@ async function runInit() {
75276
75345
  await instance.waitUntilExit();
75277
75346
  } finally {
75278
75347
  instance.unmount();
75348
+ dropSignalListenersAddedSince(signals);
75279
75349
  }
75280
75350
  process.stdout.write("\x1B[2J\x1B[H");
75281
75351
  const exit = exits[0];
@@ -75310,22 +75380,22 @@ async function runInit() {
75310
75380
  process.exit(exit !== undefined && exit.complete ? 0 : 1);
75311
75381
  }
75312
75382
  function UninstallWizard({ onExit }) {
75313
- const [hosts, setHosts] = import_react72.useState([]);
75314
- const [plan, setPlan] = import_react72.useState(null);
75383
+ const [hosts, setHosts] = import_react73.useState([]);
75384
+ const [plan, setPlan] = import_react73.useState(null);
75315
75385
  if (!plan) {
75316
- return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Box_default, {
75386
+ return /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Box_default, {
75317
75387
  flexDirection: "column",
75318
75388
  gap: 1,
75319
75389
  children: [
75320
- /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Text, {
75390
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Text, {
75321
75391
  bold: true,
75322
75392
  children: "Uninstall workit"
75323
75393
  }, undefined, false, undefined, this),
75324
- /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Text, {
75394
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Text, {
75325
75395
  dimColor: true,
75326
75396
  children: "Select the hosts to remove workit from (space to toggle):"
75327
75397
  }, undefined, false, undefined, this),
75328
- /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(MultiSelect, {
75398
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(MultiSelect, {
75329
75399
  options: UNINSTALL_HOST_OPTIONS,
75330
75400
  defaultValue: [],
75331
75401
  onChange: (values) => setHosts(values),
@@ -75334,7 +75404,7 @@ function UninstallWizard({ onExit }) {
75334
75404
  setPlan(planUninstall({ env: process.env }));
75335
75405
  }
75336
75406
  }, undefined, false, undefined, this),
75337
- /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Text, {
75407
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Text, {
75338
75408
  dimColor: true,
75339
75409
  children: "Enter to continue"
75340
75410
  }, undefined, false, undefined, this)
@@ -75344,17 +75414,17 @@ function UninstallWizard({ onExit }) {
75344
75414
  const chosen = new Set(hosts);
75345
75415
  const selected = plan.hosts.filter((h) => chosen.has(h.host));
75346
75416
  const reviewed = { hosts: selected };
75347
- return /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Box_default, {
75417
+ return /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Box_default, {
75348
75418
  flexDirection: "column",
75349
75419
  gap: 1,
75350
75420
  children: [
75351
- /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Text, {
75421
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Text, {
75352
75422
  bold: true,
75353
75423
  children: "Uninstall workit — review"
75354
75424
  }, undefined, false, undefined, this),
75355
- selected.every((h) => h.actions.length === 0) ? /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Text, {
75425
+ selected.every((h) => h.actions.length === 0) ? /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Text, {
75356
75426
  children: "No workit registrations found for the selected hosts."
75357
- }, undefined, false, undefined, this) : selected.flatMap((h) => h.actions.map((a) => /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Text, {
75427
+ }, undefined, false, undefined, this) : selected.flatMap((h) => h.actions.map((a) => /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Text, {
75358
75428
  children: [
75359
75429
  "• [",
75360
75430
  h.host,
@@ -75364,10 +75434,10 @@ function UninstallWizard({ onExit }) {
75364
75434
  a.path
75365
75435
  ]
75366
75436
  }, `${h.host}:${a.path}`, true, undefined, this))),
75367
- /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(Text, {
75437
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(Text, {
75368
75438
  children: "Apply uninstall? (y/N)"
75369
75439
  }, undefined, false, undefined, this),
75370
- /* @__PURE__ */ jsx_dev_runtime10.jsxDEV(ConfirmInput, {
75440
+ /* @__PURE__ */ jsx_dev_runtime11.jsxDEV(ConfirmInput, {
75371
75441
  onConfirm: () => onExit({ confirmed: true, hosts, plan: reviewed }),
75372
75442
  onCancel: () => onExit({ confirmed: false, hosts, plan: reviewed })
75373
75443
  }, undefined, false, undefined, this)
@@ -75382,7 +75452,8 @@ async function runUninstall() {
75382
75452
  }
75383
75453
  const outcomes = [];
75384
75454
  let done = () => {};
75385
- const instance = render_default(/* @__PURE__ */ jsx_dev_runtime10.jsxDEV(UninstallWizard, {
75455
+ const signals = snapshotSignalListeners();
75456
+ const instance = render_default(/* @__PURE__ */ jsx_dev_runtime11.jsxDEV(UninstallWizard, {
75386
75457
  onExit: (outcome) => {
75387
75458
  outcomes.push(outcome);
75388
75459
  done();
@@ -75393,6 +75464,7 @@ async function runUninstall() {
75393
75464
  await instance.waitUntilExit();
75394
75465
  } finally {
75395
75466
  instance.unmount();
75467
+ dropSignalListenersAddedSince(signals);
75396
75468
  }
75397
75469
  const outcome = outcomes[0];
75398
75470
  if (!outcome || !outcome.confirmed || !outcome.plan) {
@@ -75411,7 +75483,7 @@ async function runUninstall() {
75411
75483
  console.log(result.ok ? "Uninstall complete." : "Uninstall finished with problems.");
75412
75484
  process.exit(result.ok ? 0 : 1);
75413
75485
  }
75414
- var import_react72, jsx_dev_runtime10, stdoutStyle = () => createStyle({ stream: process.stdout, env: process.env }), initProgress = () => createProgress({ stream: process.stderr, env: process.env }), statusPaint = (style, status) => status === "Failed" ? style.fail(status) : status === "Skipped" ? style.warn(status) : style.ok(status), UNINSTALL_HOST_OPTIONS;
75486
+ var import_react73, jsx_dev_runtime11, stdoutStyle = () => createStyle({ stream: process.stdout, env: process.env }), initProgress = () => createProgress({ stream: process.stderr, env: process.env }), statusPaint = (style, status) => status === "Failed" ? style.fail(status) : status === "Skipped" ? style.warn(status) : style.ok(status), UNINSTALL_HOST_OPTIONS;
75415
75487
  var init_src2 = __esm(async () => {
75416
75488
  init_wizard_state();
75417
75489
  init_boundary();
@@ -75423,13 +75495,14 @@ var init_src2 = __esm(async () => {
75423
75495
  init_diagnostics();
75424
75496
  init_progress();
75425
75497
  init_style();
75498
+ init_ink_signals();
75426
75499
  await __promiseAll([
75427
75500
  init_build2(),
75428
75501
  init_build3(),
75429
75502
  init_steps()
75430
75503
  ]);
75431
- import_react72 = __toESM(require_react(), 1);
75432
- jsx_dev_runtime10 = __toESM(require_jsx_dev_runtime(), 1);
75504
+ import_react73 = __toESM(require_react(), 1);
75505
+ jsx_dev_runtime11 = __toESM(require_jsx_dev_runtime(), 1);
75433
75506
  UNINSTALL_HOST_OPTIONS = [
75434
75507
  { label: "OpenCode", value: "opencode" },
75435
75508
  { label: "Cursor", value: "cursor" },