@openbuilder/cli 0.50.42 → 0.50.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/chunks/{Banner-C-FTiOIR.js → Banner-BlktOjfl.js} +2 -2
  2. package/dist/chunks/Banner-BlktOjfl.js.map +1 -0
  3. package/dist/chunks/_commonjsHelpers-h-Bqc03Z.js +34 -0
  4. package/dist/chunks/_commonjsHelpers-h-Bqc03Z.js.map +1 -0
  5. package/dist/chunks/auto-update-Dq2PFvjt.js +1 -0
  6. package/dist/chunks/auto-update-Dq2PFvjt.js.map +1 -0
  7. package/dist/chunks/build-D0qYqIq0.js +1 -0
  8. package/dist/chunks/build-D0qYqIq0.js.map +1 -0
  9. package/dist/chunks/cleanup-qVTsA3tk.js +1 -0
  10. package/dist/chunks/cleanup-qVTsA3tk.js.map +1 -0
  11. package/dist/chunks/cli-auth-ChCnxlFl.js +1 -0
  12. package/dist/chunks/cli-auth-ChCnxlFl.js.map +1 -0
  13. package/dist/chunks/cli-error-BjQwvWtK.js +1 -0
  14. package/dist/chunks/cli-error-BjQwvWtK.js.map +1 -0
  15. package/dist/chunks/config-BGP1jZJ4.js +1 -0
  16. package/dist/chunks/config-BGP1jZJ4.js.map +1 -0
  17. package/dist/chunks/config-manager-BkbjtN-H.js +1 -0
  18. package/dist/chunks/config-manager-BkbjtN-H.js.map +1 -0
  19. package/dist/chunks/database-BvAbD4sP.js +1 -0
  20. package/dist/chunks/database-BvAbD4sP.js.map +1 -0
  21. package/dist/chunks/database-setup-BYjIRAmT.js +1 -0
  22. package/dist/chunks/database-setup-BYjIRAmT.js.map +1 -0
  23. package/dist/chunks/devtools-7A3EXJhY.js +75 -0
  24. package/dist/chunks/devtools-7A3EXJhY.js.map +1 -0
  25. package/dist/chunks/exports-ij9sv4UM.js +7793 -0
  26. package/dist/chunks/exports-ij9sv4UM.js.map +1 -0
  27. package/dist/chunks/index-oFqGtEeF.js +119 -0
  28. package/dist/chunks/index-oFqGtEeF.js.map +1 -0
  29. package/dist/chunks/{init-DNyPS_SR.js → init-BsQ3dhwf.js} +9 -9
  30. package/dist/chunks/init-BsQ3dhwf.js.map +1 -0
  31. package/dist/chunks/{init-tui-EFMXj-MG.js → init-tui-Dvk6Ndvl.js} +8 -8
  32. package/dist/chunks/init-tui-Dvk6Ndvl.js.map +1 -0
  33. package/dist/chunks/logger-ZpJi7chw.js +1 -0
  34. package/dist/chunks/logger-ZpJi7chw.js.map +1 -0
  35. package/dist/chunks/login-BhtodVsj.js +1 -0
  36. package/dist/chunks/login-BhtodVsj.js.map +1 -0
  37. package/dist/chunks/logout-CDDASeuQ.js +1 -0
  38. package/dist/chunks/logout-CDDASeuQ.js.map +1 -0
  39. package/dist/chunks/{main-tui-D-SG-Ba5.js → main-tui-Cklcr3FX.js} +10 -10
  40. package/dist/chunks/main-tui-Cklcr3FX.js.map +1 -0
  41. package/dist/chunks/manager-CvGX9qqe.js +1 -0
  42. package/dist/chunks/manager-CvGX9qqe.js.map +1 -0
  43. package/dist/chunks/{port-allocator-B0q7xkLs.js → port-allocator-Ct3ioni4.js} +2 -34
  44. package/dist/chunks/port-allocator-Ct3ioni4.js.map +1 -0
  45. package/dist/chunks/process-killer-CaUL7Kpl.js +1 -0
  46. package/dist/chunks/process-killer-CaUL7Kpl.js.map +1 -0
  47. package/dist/chunks/prompts-1QbE_bRr.js +1 -0
  48. package/dist/chunks/prompts-1QbE_bRr.js.map +1 -0
  49. package/dist/chunks/repo-cloner-CpOQjFSo.js +1 -0
  50. package/dist/chunks/repo-cloner-CpOQjFSo.js.map +1 -0
  51. package/dist/chunks/repo-detector-B_oj696o.js +1 -0
  52. package/dist/chunks/repo-detector-B_oj696o.js.map +1 -0
  53. package/dist/chunks/{run-Cor14S0I.js → run-wycadErJ.js} +15 -28
  54. package/dist/chunks/run-wycadErJ.js.map +1 -0
  55. package/dist/chunks/runner-logger-instance-nDWv2h2T.js +1 -0
  56. package/dist/chunks/runner-logger-instance-nDWv2h2T.js.map +1 -0
  57. package/dist/chunks/spinner-BJL9zWAJ.js +1 -0
  58. package/dist/chunks/spinner-BJL9zWAJ.js.map +1 -0
  59. package/dist/chunks/{start-k9iGDVWo.js → start-CQKEEma-.js} +8 -7
  60. package/dist/chunks/start-CQKEEma-.js.map +1 -0
  61. package/dist/chunks/start-traditional-uoLZXdxm.js +1 -0
  62. package/dist/chunks/start-traditional-uoLZXdxm.js.map +1 -0
  63. package/dist/chunks/status-cS8YwtUx.js +1 -0
  64. package/dist/chunks/status-cS8YwtUx.js.map +1 -0
  65. package/dist/chunks/{vendor-react-CXgiD1Dl.js → theme-CktnrDZj.js} +47 -227
  66. package/dist/chunks/theme-CktnrDZj.js.map +1 -0
  67. package/dist/chunks/upgrade-CKjl4HlB.js +1 -0
  68. package/dist/chunks/upgrade-CKjl4HlB.js.map +1 -0
  69. package/dist/chunks/use-app-Cj2bzWaw.js +10 -0
  70. package/dist/chunks/use-app-Cj2bzWaw.js.map +1 -0
  71. package/dist/chunks/{useBuildState-DscLOZLl.js → useBuildState-pcDGDakI.js} +2 -2
  72. package/dist/chunks/useBuildState-pcDGDakI.js.map +1 -0
  73. package/dist/cli/index.js +6 -5
  74. package/dist/cli/index.js.map +1 -0
  75. package/dist/index.js +2044 -106
  76. package/dist/index.js.map +1 -0
  77. package/dist/instrument.js +64119 -37
  78. package/dist/instrument.js.map +1 -0
  79. package/package.json +1 -1
  80. package/dist/chunks/theme-DhorI2Hb.js +0 -43
  81. package/dist/chunks/vendor-ai-sdk-CSJ0bw9X.js +0 -1970
  82. package/dist/chunks/vendor-sentry-CqA9P3UG.js +0 -71910
@@ -0,0 +1,119 @@
1
+ // OpenBuilder CLI - Built with Rollup
2
+ import { r as reactExports, u as useInput, R as React, T as Text } from './theme-CktnrDZj.js';
3
+ import 'node:stream';
4
+ import 'node:process';
5
+ import chalk from 'chalk';
6
+ import 'node:events';
7
+
8
+ function TextInput({ value: originalValue, placeholder = '', focus = true, mask, highlightPastedText = false, showCursor = true, onChange, onSubmit, }) {
9
+ const [state, setState] = reactExports.useState({
10
+ cursorOffset: (originalValue || '').length,
11
+ cursorWidth: 0,
12
+ });
13
+ const { cursorOffset, cursorWidth } = state;
14
+ reactExports.useEffect(() => {
15
+ setState(previousState => {
16
+ if (!focus || !showCursor) {
17
+ return previousState;
18
+ }
19
+ const newValue = originalValue || '';
20
+ if (previousState.cursorOffset > newValue.length - 1) {
21
+ return {
22
+ cursorOffset: newValue.length,
23
+ cursorWidth: 0,
24
+ };
25
+ }
26
+ return previousState;
27
+ });
28
+ }, [originalValue, focus, showCursor]);
29
+ const cursorActualWidth = highlightPastedText ? cursorWidth : 0;
30
+ const value = mask ? mask.repeat(originalValue.length) : originalValue;
31
+ let renderedValue = value;
32
+ let renderedPlaceholder = placeholder ? chalk.grey(placeholder) : undefined;
33
+ // Fake mouse cursor, because it's too inconvenient to deal with actual cursor and ansi escapes
34
+ if (showCursor && focus) {
35
+ renderedPlaceholder =
36
+ placeholder.length > 0
37
+ ? chalk.inverse(placeholder[0]) + chalk.grey(placeholder.slice(1))
38
+ : chalk.inverse(' ');
39
+ renderedValue = value.length > 0 ? '' : chalk.inverse(' ');
40
+ let i = 0;
41
+ for (const char of value) {
42
+ renderedValue +=
43
+ i >= cursorOffset - cursorActualWidth && i <= cursorOffset
44
+ ? chalk.inverse(char)
45
+ : char;
46
+ i++;
47
+ }
48
+ if (value.length > 0 && cursorOffset === value.length) {
49
+ renderedValue += chalk.inverse(' ');
50
+ }
51
+ }
52
+ useInput((input, key) => {
53
+ if (key.upArrow ||
54
+ key.downArrow ||
55
+ (key.ctrl && input === 'c') ||
56
+ key.tab ||
57
+ (key.shift && key.tab)) {
58
+ return;
59
+ }
60
+ if (key.return) {
61
+ if (onSubmit) {
62
+ onSubmit(originalValue);
63
+ }
64
+ return;
65
+ }
66
+ let nextCursorOffset = cursorOffset;
67
+ let nextValue = originalValue;
68
+ let nextCursorWidth = 0;
69
+ if (key.leftArrow) {
70
+ if (showCursor) {
71
+ nextCursorOffset--;
72
+ }
73
+ }
74
+ else if (key.rightArrow) {
75
+ if (showCursor) {
76
+ nextCursorOffset++;
77
+ }
78
+ }
79
+ else if (key.backspace || key.delete) {
80
+ if (cursorOffset > 0) {
81
+ nextValue =
82
+ originalValue.slice(0, cursorOffset - 1) +
83
+ originalValue.slice(cursorOffset, originalValue.length);
84
+ nextCursorOffset--;
85
+ }
86
+ }
87
+ else {
88
+ nextValue =
89
+ originalValue.slice(0, cursorOffset) +
90
+ input +
91
+ originalValue.slice(cursorOffset, originalValue.length);
92
+ nextCursorOffset += input.length;
93
+ if (input.length > 1) {
94
+ nextCursorWidth = input.length;
95
+ }
96
+ }
97
+ if (cursorOffset < 0) {
98
+ nextCursorOffset = 0;
99
+ }
100
+ if (cursorOffset > originalValue.length) {
101
+ nextCursorOffset = originalValue.length;
102
+ }
103
+ setState({
104
+ cursorOffset: nextCursorOffset,
105
+ cursorWidth: nextCursorWidth,
106
+ });
107
+ if (nextValue !== originalValue) {
108
+ onChange(nextValue);
109
+ }
110
+ }, { isActive: focus });
111
+ return (React.createElement(Text, null, placeholder
112
+ ? value.length > 0
113
+ ? renderedValue
114
+ : renderedPlaceholder
115
+ : renderedValue));
116
+ }
117
+
118
+ export { TextInput as T };
119
+ //# sourceMappingURL=index-oFqGtEeF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-oFqGtEeF.js","sources":["../../../../node_modules/.pnpm/ink-text-input@6.0.0_ink@6.5.1_@types+react@19.2.7_react@19.1.0__react@19.1.0/node_modules/ink-text-input/build/index.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { Text, useInput } from 'ink';\nimport chalk from 'chalk';\nfunction TextInput({ value: originalValue, placeholder = '', focus = true, mask, highlightPastedText = false, showCursor = true, onChange, onSubmit, }) {\n const [state, setState] = useState({\n cursorOffset: (originalValue || '').length,\n cursorWidth: 0,\n });\n const { cursorOffset, cursorWidth } = state;\n useEffect(() => {\n setState(previousState => {\n if (!focus || !showCursor) {\n return previousState;\n }\n const newValue = originalValue || '';\n if (previousState.cursorOffset > newValue.length - 1) {\n return {\n cursorOffset: newValue.length,\n cursorWidth: 0,\n };\n }\n return previousState;\n });\n }, [originalValue, focus, showCursor]);\n const cursorActualWidth = highlightPastedText ? cursorWidth : 0;\n const value = mask ? mask.repeat(originalValue.length) : originalValue;\n let renderedValue = value;\n let renderedPlaceholder = placeholder ? chalk.grey(placeholder) : undefined;\n // Fake mouse cursor, because it's too inconvenient to deal with actual cursor and ansi escapes\n if (showCursor && focus) {\n renderedPlaceholder =\n placeholder.length > 0\n ? chalk.inverse(placeholder[0]) + chalk.grey(placeholder.slice(1))\n : chalk.inverse(' ');\n renderedValue = value.length > 0 ? '' : chalk.inverse(' ');\n let i = 0;\n for (const char of value) {\n renderedValue +=\n i >= cursorOffset - cursorActualWidth && i <= cursorOffset\n ? chalk.inverse(char)\n : char;\n i++;\n }\n if (value.length > 0 && cursorOffset === value.length) {\n renderedValue += chalk.inverse(' ');\n }\n }\n useInput((input, key) => {\n if (key.upArrow ||\n key.downArrow ||\n (key.ctrl && input === 'c') ||\n key.tab ||\n (key.shift && key.tab)) {\n return;\n }\n if (key.return) {\n if (onSubmit) {\n onSubmit(originalValue);\n }\n return;\n }\n let nextCursorOffset = cursorOffset;\n let nextValue = originalValue;\n let nextCursorWidth = 0;\n if (key.leftArrow) {\n if (showCursor) {\n nextCursorOffset--;\n }\n }\n else if (key.rightArrow) {\n if (showCursor) {\n nextCursorOffset++;\n }\n }\n else if (key.backspace || key.delete) {\n if (cursorOffset > 0) {\n nextValue =\n originalValue.slice(0, cursorOffset - 1) +\n originalValue.slice(cursorOffset, originalValue.length);\n nextCursorOffset--;\n }\n }\n else {\n nextValue =\n originalValue.slice(0, cursorOffset) +\n input +\n originalValue.slice(cursorOffset, originalValue.length);\n nextCursorOffset += input.length;\n if (input.length > 1) {\n nextCursorWidth = input.length;\n }\n }\n if (cursorOffset < 0) {\n nextCursorOffset = 0;\n }\n if (cursorOffset > originalValue.length) {\n nextCursorOffset = originalValue.length;\n }\n setState({\n cursorOffset: nextCursorOffset,\n cursorWidth: nextCursorWidth,\n });\n if (nextValue !== originalValue) {\n onChange(nextValue);\n }\n }, { isActive: focus });\n return (React.createElement(Text, null, placeholder\n ? value.length > 0\n ? renderedValue\n : renderedPlaceholder\n : renderedValue));\n}\nexport default TextInput;\nexport function UncontrolledTextInput({ initialValue = '', ...props }) {\n const [value, setValue] = useState(initialValue);\n return React.createElement(TextInput, { ...props, value: value, onChange: setValue });\n}\n//# sourceMappingURL=index.js.map"],"names":["useState","useEffect"],"mappings":";;;;;;;AAGA,SAAS,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,IAAI,EAAE,mBAAmB,GAAG,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,EAAE;AACxJ,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,qBAAQ,CAAC;AACvC,QAAQ,YAAY,EAAE,CAAC,aAAa,IAAI,EAAE,EAAE,MAAM;AAClD,QAAQ,WAAW,EAAE,CAAC;AACtB,KAAK,CAAC;AACN,IAAI,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,KAAK;AAC/C,IAAIC,sBAAS,CAAC,MAAM;AACpB,QAAQ,QAAQ,CAAC,aAAa,IAAI;AAClC,YAAY,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE;AACvC,gBAAgB,OAAO,aAAa;AACpC,YAAY;AACZ,YAAY,MAAM,QAAQ,GAAG,aAAa,IAAI,EAAE;AAChD,YAAY,IAAI,aAAa,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAClE,gBAAgB,OAAO;AACvB,oBAAoB,YAAY,EAAE,QAAQ,CAAC,MAAM;AACjD,oBAAoB,WAAW,EAAE,CAAC;AAClC,iBAAiB;AACjB,YAAY;AACZ,YAAY,OAAO,aAAa;AAChC,QAAQ,CAAC,CAAC;AACV,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAC1C,IAAI,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,WAAW,GAAG,CAAC;AACnE,IAAI,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,aAAa;AAC1E,IAAI,IAAI,aAAa,GAAG,KAAK;AAC7B,IAAI,IAAI,mBAAmB,GAAG,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,SAAS;AAC/E;AACA,IAAI,IAAI,UAAU,IAAI,KAAK,EAAE;AAC7B,QAAQ,mBAAmB;AAC3B,YAAY,WAAW,CAAC,MAAM,GAAG;AACjC,kBAAkB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AACjF,kBAAkB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AACpC,QAAQ,aAAa,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAClE,QAAQ,IAAI,CAAC,GAAG,CAAC;AACjB,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAClC,YAAY,aAAa;AACzB,gBAAgB,CAAC,IAAI,YAAY,GAAG,iBAAiB,IAAI,CAAC,IAAI;AAC9D,sBAAsB,KAAK,CAAC,OAAO,CAAC,IAAI;AACxC,sBAAsB,IAAI;AAC1B,YAAY,CAAC,EAAE;AACf,QAAQ;AACR,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,KAAK,KAAK,CAAC,MAAM,EAAE;AAC/D,YAAY,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAC/C,QAAQ;AACR,IAAI;AACJ,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK;AAC7B,QAAQ,IAAI,GAAG,CAAC,OAAO;AACvB,YAAY,GAAG,CAAC,SAAS;AACzB,aAAa,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,CAAC;AACvC,YAAY,GAAG,CAAC,GAAG;AACnB,aAAa,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;AACpC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE;AACxB,YAAY,IAAI,QAAQ,EAAE;AAC1B,gBAAgB,QAAQ,CAAC,aAAa,CAAC;AACvC,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,gBAAgB,GAAG,YAAY;AAC3C,QAAQ,IAAI,SAAS,GAAG,aAAa;AACrC,QAAQ,IAAI,eAAe,GAAG,CAAC;AAC/B,QAAQ,IAAI,GAAG,CAAC,SAAS,EAAE;AAC3B,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,gBAAgB,EAAE;AAClC,YAAY;AACZ,QAAQ;AACR,aAAa,IAAI,GAAG,CAAC,UAAU,EAAE;AACjC,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,gBAAgB,EAAE;AAClC,YAAY;AACZ,QAAQ;AACR,aAAa,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE;AAC9C,YAAY,IAAI,YAAY,GAAG,CAAC,EAAE;AAClC,gBAAgB,SAAS;AACzB,oBAAoB,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC;AAC5D,wBAAwB,aAAa,CAAC,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC;AAC/E,gBAAgB,gBAAgB,EAAE;AAClC,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,SAAS;AACrB,gBAAgB,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;AACpD,oBAAoB,KAAK;AACzB,oBAAoB,aAAa,CAAC,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC;AAC3E,YAAY,gBAAgB,IAAI,KAAK,CAAC,MAAM;AAC5C,YAAY,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,gBAAgB,eAAe,GAAG,KAAK,CAAC,MAAM;AAC9C,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,YAAY,GAAG,CAAC,EAAE;AAC9B,YAAY,gBAAgB,GAAG,CAAC;AAChC,QAAQ;AACR,QAAQ,IAAI,YAAY,GAAG,aAAa,CAAC,MAAM,EAAE;AACjD,YAAY,gBAAgB,GAAG,aAAa,CAAC,MAAM;AACnD,QAAQ;AACR,QAAQ,QAAQ,CAAC;AACjB,YAAY,YAAY,EAAE,gBAAgB;AAC1C,YAAY,WAAW,EAAE,eAAe;AACxC,SAAS,CAAC;AACV,QAAQ,IAAI,SAAS,KAAK,aAAa,EAAE;AACzC,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC3B,IAAI,QAAQ,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE;AAC5C,UAAU,KAAK,CAAC,MAAM,GAAG;AACzB,cAAc;AACd,cAAc;AACd,UAAU,aAAa,CAAC;AACxB;;;;","x_google_ignoreList":[0]}
@@ -10,7 +10,7 @@ import { i as isInsideMonorepo } from './repo-detector-B_oj696o.js';
10
10
  import { isPnpmInstalled, cloneRepository, installDependencies, buildAgentCore } from './repo-cloner-CpOQjFSo.js';
11
11
  import { s as setupDatabase, p as pushDatabaseSchema, c as connectManualDatabase } from './database-setup-BYjIRAmT.js';
12
12
  import { C as CLIError, e as errors } from './cli-error-BjQwvWtK.js';
13
- import { initTUICommand } from './init-tui-EFMXj-MG.js';
13
+ import { initTUICommand } from './init-tui-Dvk6Ndvl.js';
14
14
  import 'conf';
15
15
  import 'node:os';
16
16
  import 'node:child_process';
@@ -20,19 +20,18 @@ import './spinner-BJL9zWAJ.js';
20
20
  import 'ora';
21
21
  import './prompts-1QbE_bRr.js';
22
22
  import 'inquirer';
23
- import './vendor-react-CXgiD1Dl.js';
24
- import 'module';
25
- import 'events';
26
- import 'assert';
27
- import 'ws';
28
- import 'react-devtools-core';
23
+ import './theme-CktnrDZj.js';
29
24
  import 'node:stream';
30
25
  import 'node:process';
26
+ import './_commonjsHelpers-h-Bqc03Z.js';
27
+ import 'assert';
28
+ import 'events';
31
29
  import 'node:events';
30
+ import 'module';
32
31
  import 'node:buffer';
33
- import './Banner-C-FTiOIR.js';
32
+ import './use-app-Cj2bzWaw.js';
33
+ import './Banner-BlktOjfl.js';
34
34
  import 'node:url';
35
- import './theme-DhorI2Hb.js';
36
35
  import 'node:http';
37
36
 
38
37
  /**
@@ -471,3 +470,4 @@ async function initCommand(options) {
471
470
  }
472
471
 
473
472
  export { initCommand };
473
+ //# sourceMappingURL=init-BsQ3dhwf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-BsQ3dhwf.js","sources":["../../src/cli/commands/init.ts"],"sourcesContent":["/**\n * Enhanced init command with @clack/prompts and friction-free -y mode\n * Provides beautiful interactive setup or completely automated installation\n * \n * For -y mode: Uses a beautiful centered TUI with animated progress\n */\n\nimport { mkdir, realpath, writeFile } from 'node:fs/promises';\nimport { existsSync, realpathSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join, resolve } from 'node:path';\nimport { randomBytes } from 'node:crypto';\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport { configManager } from '../utils/config-manager.js';\nimport { isInsideMonorepo } from '../utils/repo-detector.js';\nimport {\n cloneRepository,\n installDependencies,\n isPnpmInstalled,\n buildAgentCore\n} from '../utils/repo-cloner.js';\nimport {\n setupDatabase,\n pushDatabaseSchema,\n connectManualDatabase\n} from '../utils/database-setup.js';\nimport { CLIError, errors } from '../utils/cli-error.js';\nimport { initTUICommand } from './init-tui.js';\n\n/**\n * Generate a secure random secret\n */\nfunction generateSecret(): string {\n return randomBytes(32).toString('hex');\n}\n\n/**\n * Check if a path is or contains the current working directory\n * Prevents accidental deletion of the directory we're running from\n */\nfunction isCurrentWorkingDirectory(targetPath: string): boolean {\n try {\n const cwd = realpathSync(process.cwd());\n const target = realpathSync(resolve(targetPath));\n // Check if target is cwd or if cwd is inside target\n return cwd === target || cwd.startsWith(target + '/');\n } catch {\n // If we can't resolve paths, be safe and assume it might be cwd\n const cwd = process.cwd();\n const target = resolve(targetPath);\n return cwd === target || cwd.startsWith(target + '/');\n }\n}\n\n/**\n * Safely remove a directory, but never the current working directory\n */\nfunction safeRemoveDirectory(targetPath: string, rmSync: typeof import('fs').rmSync): boolean {\n if (isCurrentWorkingDirectory(targetPath)) {\n console.error(`\\n⚠️ Cannot remove ${targetPath} - it is the current working directory`);\n console.error(' Please run this command from a different directory.\\n');\n return false;\n }\n rmSync(targetPath, { recursive: true, force: true });\n return true;\n}\n\n/**\n * Normalize URL by adding protocol if missing\n */\nfunction normalizeUrl(url: string): string {\n if (!url) return url;\n if (url.match(/^https?:\\/\\//i)) return url;\n if (url.match(/^(localhost|127\\.0\\.0\\.1)(:|\\/|$)/i)) {\n return `http://${url}`;\n }\n return `https://${url}`;\n}\n\n/**\n * Get default workspace path\n */\nfunction getDefaultWorkspace(): string {\n return join(process.cwd(), 'openbuilder-workspace');\n}\n\n/**\n * Get default monorepo clone path\n */\nfunction getDefaultMonorepoPath(): string {\n return join(process.cwd(), 'openbuilder');\n}\n\ninterface InitOptions {\n workspace?: string;\n url?: string;\n secret?: string;\n branch?: string;\n database?: string | boolean; // Can be: undefined (neon), or a PostgreSQL connection string\n yes?: boolean;\n nonInteractive?: boolean;\n}\n\nexport async function initCommand(options: InitOptions) {\n const isNonInteractive = options.nonInteractive || options.yes;\n\n // ========================================\n // NON-INTERACTIVE MODE: Use beautiful TUI\n // ========================================\n if (isNonInteractive) {\n return initTUICommand(options);\n }\n\n // ========================================\n // INTERACTIVE MODE (Beautiful @clack/prompts)\n // ========================================\n // Handle Ctrl+C gracefully\n const handleCancel = () => {\n p.cancel('Setup cancelled');\n process.exit(0);\n };\n\n try {\n {\n // Keep banner visible - don't clear screen\n console.log(); // Just add spacing\n\n p.intro(pc.bgCyan(pc.black(' OpenBuilder Setup ')));\n\n // Step 1: Check if already initialized\n if (configManager.isInitialized()) {\n const shouldReset = await p.confirm({\n message: 'Configuration already exists. Reset and reconfigure?',\n initialValue: true,\n });\n\n if (p.isCancel(shouldReset)) {\n handleCancel();\n return;\n }\n\n if (!shouldReset) {\n p.cancel('Setup cancelled');\n return;\n }\n\n configManager.reset();\n p.log.success('Configuration reset');\n }\n\n // Step 2: Check for monorepo\n const s = p.spinner();\n s.start('Checking for OpenBuilder repository');\n\n const repoCheck = await isInsideMonorepo();\n let monorepoPath: string | undefined;\n\n if (repoCheck.inside && repoCheck.root) {\n s.stop(pc.green('✓') + ' Found repository at: ' + pc.cyan(repoCheck.root));\n monorepoPath = repoCheck.root;\n } else {\n s.stop('Repository not found in current directory');\n\n const shouldClone = await p.confirm({\n message: 'Clone OpenBuilder repository?',\n initialValue: true,\n });\n\n if (p.isCancel(shouldClone)) {\n handleCancel();\n return;\n }\n\n if (shouldClone) {\n // Check for pnpm\n const hasPnpm = await isPnpmInstalled();\n if (!hasPnpm) {\n throw new CLIError({\n code: 'DEPENDENCIES_INSTALL_FAILED',\n message: 'pnpm is not installed',\n suggestions: [\n 'Install pnpm: npm install -g pnpm',\n 'Or visit: https://pnpm.io/installation',\n ],\n });\n }\n\n const clonePath = await p.text({\n message: 'Where should the repository be cloned?',\n placeholder: getDefaultMonorepoPath(),\n defaultValue: getDefaultMonorepoPath(),\n validate: (value) => {\n if (!value) return 'Path is required';\n },\n });\n\n if (p.isCancel(clonePath)) {\n handleCancel();\n return;\n }\n\n // Check if path exists\n const defaultWorkspace = getDefaultWorkspace();\n const existingInstallation = existsSync(clonePath as string) || existsSync(defaultWorkspace);\n\n if (existingInstallation) {\n const shouldOverwrite = await p.confirm({\n message: `Existing OpenBuilder installation found. Replace it with fresh install?`,\n initialValue: true,\n });\n\n if (p.isCancel(shouldOverwrite)) {\n handleCancel();\n return;\n }\n\n if (shouldOverwrite) {\n s.start('Removing existing installation');\n const { rmSync } = await import('fs');\n\n // Safety check: never delete the current working directory\n if (existsSync(clonePath as string)) {\n if (!safeRemoveDirectory(clonePath as string, rmSync)) {\n s.stop(pc.red('✗') + ' Cannot remove current working directory');\n p.cancel('Please run openbuilder init from a different directory');\n return;\n }\n }\n\n // Delete workspace directory\n if (existsSync(defaultWorkspace)) {\n if (!safeRemoveDirectory(defaultWorkspace, rmSync)) {\n s.stop(pc.red('✗') + ' Cannot remove current working directory');\n p.cancel('Please run openbuilder init from a different directory');\n return;\n }\n }\n\n s.stop(pc.green('✓') + ' Existing installation removed');\n } else {\n p.cancel('Setup cancelled');\n return;\n }\n }\n\n // Clone, install, build\n try {\n s.start('Cloning repository from GitHub');\n monorepoPath = await cloneRepository({\n targetPath: clonePath as string,\n branch: options.branch || 'main',\n });\n s.stop(pc.green('✓') + ' Repository cloned');\n\n s.start('Installing dependencies (this may take a few minutes)');\n await installDependencies(monorepoPath);\n s.stop(pc.green('✓') + ' Dependencies installed');\n\n s.start('Building @openbuilder/agent-core');\n await buildAgentCore(monorepoPath);\n s.stop(pc.green('✓') + ' Build complete');\n\n // Ask about pre-building services\n const shouldPreBuild = await p.confirm({\n message: 'Pre-build all services for production performance?',\n initialValue: true,\n });\n\n if (p.isCancel(shouldPreBuild)) {\n handleCancel();\n return;\n }\n\n if (shouldPreBuild) {\n s.start('Building all services (this may take a minute)');\n const { spawn } = await import('child_process');\n\n try {\n await new Promise<void>((resolve, reject) => {\n const buildProcess = spawn('pnpm', ['build:all'], {\n cwd: monorepoPath,\n stdio: 'pipe',\n shell: true,\n });\n\n buildProcess.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Build failed with code ${code}`));\n }\n });\n\n buildProcess.on('error', reject);\n });\n\n s.stop(pc.green('✓') + ' All services built for production');\n } catch (error) {\n s.stop(pc.yellow('⚠') + ' Build failed (you can build later with: pnpm build:all)');\n }\n }\n } catch (error) {\n throw new CLIError({\n code: 'MONOREPO_CLONE_FAILED',\n message: 'Failed to setup repository',\n cause: error instanceof Error ? error : new Error(String(error)),\n suggestions: [\n 'Check your internet connection',\n 'Verify you have git installed: git --version',\n 'Try cloning manually: git clone https://github.com/codyde/openbuilder.git',\n ],\n });\n }\n } else {\n p.note(\n 'Setup will continue in runner-only mode.\\nYou can add the repository path later with:\\n openbuilder config set monorepoPath <path>',\n 'Repository setup skipped'\n );\n }\n }\n\n // Step 3: Workspace configuration\n p.log.step(pc.cyan('Workspace Configuration'));\n\n const workspace = await p.text({\n message: 'Where should generated projects be stored?',\n placeholder: getDefaultWorkspace(),\n defaultValue: getDefaultWorkspace(),\n validate: (value) => {\n if (!value) return 'Workspace path is required';\n },\n });\n\n if (p.isCancel(workspace)) {\n handleCancel();\n return;\n }\n\n // Create workspace directory\n try {\n if (!existsSync(workspace as string)) {\n await mkdir(workspace as string, { recursive: true });\n }\n } catch (error) {\n throw errors.workspaceNotFound(workspace as string);\n }\n\n // Step 4: Connection configuration\n p.log.step(pc.cyan('Connection Configuration'));\n\n const wsUrl = await p.text({\n message: 'Server WebSocket URL',\n placeholder: 'ws://localhost:3000/ws/runner',\n defaultValue: 'ws://localhost:3000/ws/runner',\n });\n\n if (p.isCancel(wsUrl)) {\n handleCancel();\n return;\n }\n\n const apiUrl = await p.text({\n message: 'API base URL',\n placeholder: 'http://localhost:3000',\n defaultValue: options.url || 'http://localhost:3000',\n });\n\n if (p.isCancel(apiUrl)) {\n handleCancel();\n return;\n }\n\n // Step 5: Security\n const secret = await p.text({\n message: 'Shared secret (press Enter to generate)',\n placeholder: 'Generated automatically',\n defaultValue: options.secret || generateSecret(),\n });\n\n if (p.isCancel(secret)) {\n handleCancel();\n return;\n }\n\n const runnerId = await p.text({\n message: 'Runner ID',\n placeholder: 'local',\n defaultValue: 'local',\n });\n\n if (p.isCancel(runnerId)) {\n handleCancel();\n return;\n }\n\n // Step 6: Database setup (if monorepo available)\n let databaseUrl: string | undefined;\n\n if (monorepoPath) {\n p.log.step(pc.cyan('Database Setup'));\n\n const dbChoice = await p.select({\n message: 'Database configuration',\n options: [\n {\n value: 'neon',\n label: 'Create Neon database (recommended)',\n hint: 'Free tier, persistent storage'\n },\n {\n value: 'existing',\n label: 'Use existing PostgreSQL',\n hint: 'Provide connection string'\n },\n ],\n });\n\n if (p.isCancel(dbChoice)) {\n handleCancel();\n return;\n }\n\n if (dbChoice === 'neon') {\n p.note(\n 'Opening Neon in your browser...\\nCreate a database and paste the connection string below.',\n pc.cyan('Database Setup')\n );\n databaseUrl = await setupDatabase(monorepoPath) || undefined;\n \n // Push schema if we have a database\n if (databaseUrl) {\n s.start('Pushing database schema');\n const pushed = await pushDatabaseSchema(monorepoPath, databaseUrl);\n if (pushed) {\n s.stop(pc.green('✓') + ' Schema initialized');\n } else {\n s.stop(pc.yellow('⚠') + ' Schema push failed (you can retry later)');\n }\n }\n } else if (dbChoice === 'existing') {\n databaseUrl = await connectManualDatabase() || undefined;\n \n // Push schema if we have a database\n if (databaseUrl) {\n s.start('Pushing database schema');\n const pushed = await pushDatabaseSchema(monorepoPath, databaseUrl);\n if (pushed) {\n s.stop(pc.green('✓') + ' Schema initialized');\n } else {\n s.stop(pc.yellow('⚠') + ' Schema push failed (you can retry later)');\n }\n }\n }\n }\n\n // Step 7: Save configuration\n try {\n configManager.set('workspace', workspace);\n if (monorepoPath) {\n configManager.set('monorepoPath', monorepoPath);\n }\n if (databaseUrl) {\n configManager.set('databaseUrl', databaseUrl);\n }\n configManager.set('apiUrl', normalizeUrl(apiUrl as string));\n configManager.set('server', {\n wsUrl: wsUrl,\n secret: secret,\n });\n configManager.set('runner', {\n id: runnerId,\n reconnectAttempts: 5,\n heartbeatInterval: 15000,\n });\n configManager.set('tunnel', {\n provider: 'cloudflare',\n autoCreate: true,\n });\n } catch (error) {\n throw new CLIError({\n code: 'CONFIG_INVALID',\n message: 'Failed to save configuration',\n cause: error instanceof Error ? error : new Error(String(error)),\n suggestions: [\n 'Check file permissions on config directory',\n 'Try running with sudo (not recommended)',\n ],\n });\n }\n\n // Validate\n const validation = configManager.validate();\n if (!validation.valid) {\n throw new CLIError({\n code: 'CONFIG_INVALID',\n message: 'Configuration validation failed',\n context: { errors: validation.errors },\n suggestions: validation.errors,\n });\n }\n\n // Success!\n p.outro(pc.green('✨ OpenBuilder is ready!'));\n\n p.note(\n `${pc.cyan('openbuilder run')}\\n\\nThen open: ${pc.cyan('http://localhost:3000')}`,\n 'Next Steps'\n );\n\n return;\n }\n } catch (error) {\n // Handle cancellation gracefully\n if (error && typeof error === 'object' && 'name' in error) {\n if ((error as { name: string }).name === 'ExitPromptError' || (error as { code?: string }).code === 'CLACK_CANCEL') {\n handleCancel();\n return;\n }\n }\n\n // Re-throw for global error handler\n throw error;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -3,13 +3,13 @@ import { mkdir, writeFile } from 'node:fs/promises';
3
3
  import { existsSync, rmSync, realpathSync } from 'node:fs';
4
4
  import { join, resolve } from 'node:path';
5
5
  import { randomBytes } from 'node:crypto';
6
- import { j as jsxRuntimeExports, B as Box, r as reactExports, T as Text, d as useApp, b as useStdout, u as useInput, e as render } from './vendor-react-CXgiD1Dl.js';
6
+ import { j as jsxRuntimeExports, B as Box, r as reactExports, T as Text, s as symbols, c as colors, l as layout, a as useStdout, u as useInput, b as render } from './theme-CktnrDZj.js';
7
7
  import 'chalk';
8
8
  import 'node:stream';
9
9
  import 'node:process';
10
10
  import 'node:events';
11
- import { g as getVersionInfo, B as Banner } from './Banner-C-FTiOIR.js';
12
- import { s as symbols, c as colors, l as layout } from './theme-DhorI2Hb.js';
11
+ import { u as useApp } from './use-app-Cj2bzWaw.js';
12
+ import { g as getVersionInfo, B as Banner } from './Banner-BlktOjfl.js';
13
13
  import 'node:http';
14
14
  import 'node:url';
15
15
  import 'node:os';
@@ -19,11 +19,10 @@ import { i as isInsideMonorepo } from './repo-detector-B_oj696o.js';
19
19
  import { isPnpmInstalled, cloneRepository, installDependencies, buildAgentCore } from './repo-cloner-CpOQjFSo.js';
20
20
  import { p as pushDatabaseSchema, s as setupDatabase } from './database-setup-BYjIRAmT.js';
21
21
  import { C as CLIError } from './cli-error-BjQwvWtK.js';
22
- import 'module';
23
- import 'events';
22
+ import './_commonjsHelpers-h-Bqc03Z.js';
24
23
  import 'assert';
25
- import 'ws';
26
- import 'react-devtools-core';
24
+ import 'events';
25
+ import 'module';
27
26
  import 'node:buffer';
28
27
  import 'conf';
29
28
  import './logger-ZpJi7chw.js';
@@ -764,7 +763,7 @@ async function initTUICommand(options) {
764
763
  console.clear();
765
764
  console.log('\n Starting OpenBuilder...\n');
766
765
  // Import and run the start command (full TUI with web app + runner)
767
- const { startCommand } = await import('./start-k9iGDVWo.js');
766
+ const { startCommand } = await import('./start-CQKEEma-.js');
768
767
  await startCommand({});
769
768
  }
770
769
  else {
@@ -1130,3 +1129,4 @@ async function executeInitFlow(options, callbacks) {
1130
1129
  }
1131
1130
 
1132
1131
  export { initTUICommand };
1132
+ //# sourceMappingURL=init-tui-Dvk6Ndvl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-tui-Dvk6Ndvl.js","sources":["../../src/cli/tui/components/ProgressStepper.tsx","../../src/cli/tui/components/TaskStream.tsx","../../src/cli/tui/components/ConfigSummary.tsx","../../src/cli/tui/components/BuildErrorView.tsx","../../src/cli/tui/hooks/useInitFlow.ts","../../src/cli/tui/screens/InitScreen.tsx","../../src/cli/tui/screens/StartPromptScreen.tsx","../../src/cli/tui/App.tsx","../../src/cli/commands/init-tui.tsx"],"sourcesContent":["import { Fragment } from 'react';\nimport { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\nexport type StepStatus = 'pending' | 'active' | 'completed' | 'error';\n\nexport interface Step {\n id: string;\n label: string;\n status: StepStatus;\n}\n\n// Keep for backwards compatibility\nexport interface StepTask {\n id: string;\n label: string;\n status: 'pending' | 'running' | 'completed' | 'failed';\n detail?: string;\n error?: string;\n}\n\ninterface ProgressStepperProps {\n steps: Step[];\n}\n\n/**\n * Horizontal progress stepper - just the dots and labels\n * \n * ●───────────●───────────○───────────○\n * Setup Install Database Finalize\n */\nexport function ProgressStepper({ steps }: ProgressStepperProps) {\n const getStepColor = (status: StepStatus): string => {\n switch (status) {\n case 'completed':\n return colors.success;\n case 'active':\n return colors.cyan;\n case 'error':\n return colors.error;\n default:\n return colors.dimGray;\n }\n };\n\n const getStepSymbol = (status: StepStatus): string => {\n switch (status) {\n case 'error':\n return symbols.errorDot;\n case 'completed':\n case 'active':\n return symbols.filledDot;\n default:\n return symbols.hollowDot;\n }\n };\n\n // Cell and connector sizing\n const cellWidth = 10;\n const connectorWidth = 7;\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n {/* Dots row */}\n <Box>\n {steps.map((step, index) => (\n <Fragment key={step.id}>\n <Box width={cellWidth} justifyContent=\"center\">\n <Text color={getStepColor(step.status)}>\n {getStepSymbol(step.status)}\n </Text>\n </Box>\n {index < steps.length - 1 && (\n <Text color={colors.dimGray}>\n {symbols.horizontalLine.repeat(connectorWidth)}\n </Text>\n )}\n </Fragment>\n ))}\n </Box>\n \n {/* Labels row */}\n <Box>\n {steps.map((step, index) => (\n <Fragment key={step.id}>\n <Box width={cellWidth} justifyContent=\"center\">\n <Text \n color={step.status === 'pending' ? colors.dimGray : colors.gray}\n dimColor={step.status === 'pending'}\n >\n {step.label}\n </Text>\n </Box>\n {index < steps.length - 1 && (\n <Box width={connectorWidth} />\n )}\n </Fragment>\n ))}\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect, useRef } from 'react';\nimport { Box, Text } from 'ink';\nimport { colors, symbols, layout } from '../theme.js';\n\nexport interface StreamTask {\n id: string;\n label: string;\n status: 'pending' | 'running' | 'completed' | 'failed';\n detail?: string;\n error?: string;\n}\n\ninterface TaskStreamProps {\n /** Current step ID - clears stream when this changes */\n stepId: string;\n /** Tasks for the current step */\n tasks: StreamTask[];\n /** Called when typewriter animation completes for a detail */\n onTypewriterComplete?: (taskId: string) => void;\n}\n\ninterface DisplayLine {\n id: string;\n text: string;\n displayedText: string;\n color: string;\n prefix: string;\n prefixColor: string;\n showCursor: boolean;\n checkmark?: boolean; // Show green checkmark after prefix\n}\n\n// Match the stepper width: cellWidth(10) * 4 + connectorWidth(7) * 3 = 61\nconst BOX_WIDTH = 61;\nconst BOX_INNER_WIDTH = BOX_WIDTH - 4; // Account for \"│ \" and \" │\"\n\n/**\n * TaskStream - Shows current step's tasks in a terminal-style box\n * \n * ┌───────────────────────────────────────────────────────────┐\n * │ ⠋ Configuring database │\n * │ └── Setting up Neon database...▌ │\n * └───────────────────────────────────────────────────────────┘\n */\nexport function TaskStream({ stepId, tasks, onTypewriterComplete }: TaskStreamProps) {\n const [spinnerIndex, setSpinnerIndex] = useState(0);\n const [cursorVisible, setCursorVisible] = useState(true);\n const [typedChars, setTypedChars] = useState<Record<string, number>>({});\n const [completedTyping, setCompletedTyping] = useState<Set<string>>(new Set());\n const prevStepRef = useRef(stepId);\n \n // Reset typed chars when step changes\n useEffect(() => {\n if (stepId !== prevStepRef.current) {\n setTypedChars({});\n setCompletedTyping(new Set());\n prevStepRef.current = stepId;\n }\n }, [stepId]);\n \n // Spinner animation - runs independently\n useEffect(() => {\n let mounted = true;\n const animate = () => {\n if (!mounted) return;\n setSpinnerIndex(prev => (prev + 1) % symbols.spinnerFrames.length);\n setTimeout(animate, layout.spinnerInterval);\n };\n const timeout = setTimeout(animate, layout.spinnerInterval);\n return () => {\n mounted = false;\n clearTimeout(timeout);\n };\n }, []);\n \n // Cursor blink - runs independently \n useEffect(() => {\n let mounted = true;\n const blink = () => {\n if (!mounted) return;\n setCursorVisible(prev => !prev);\n setTimeout(blink, 400);\n };\n const timeout = setTimeout(blink, 400);\n return () => {\n mounted = false;\n clearTimeout(timeout);\n };\n }, []);\n \n // Find tasks by status\n const runningTask = tasks.find(t => t.status === 'running');\n const failedTask = tasks.find(t => t.status === 'failed');\n const completedTasks = tasks.filter(t => t.status === 'completed');\n \n // Primary task: running > failed > last completed (to prevent visual jump)\n const primaryTask = runningTask || failedTask || completedTasks[completedTasks.length - 1];\n \n // Previous completed tasks (all except the one shown as primary)\n const previousCompleted = primaryTask?.status === 'completed' \n ? completedTasks.slice(0, -1) \n : completedTasks;\n \n // Build display lines\n const lines: DisplayLine[] = [];\n \n // Main task line (running, failed, or last completed)\n if (primaryTask) {\n const isRunning = primaryTask.status === 'running';\n const isCompleted = primaryTask.status === 'completed';\n const isFailed = primaryTask.status === 'failed';\n \n let prefix: string;\n let prefixColor: string;\n let textColor: string;\n \n if (isRunning) {\n prefix = `${symbols.spinnerFrames[spinnerIndex]} `;\n prefixColor = colors.cyan;\n textColor = colors.white;\n } else if (isCompleted) {\n prefix = `${symbols.check} `;\n prefixColor = colors.success;\n textColor = colors.white;\n } else {\n prefix = `${symbols.cross} `;\n prefixColor = colors.error;\n textColor = colors.error;\n }\n \n lines.push({\n id: `main-${primaryTask.id}`,\n text: primaryTask.label,\n displayedText: primaryTask.label,\n color: textColor,\n prefix,\n prefixColor,\n showCursor: false,\n });\n }\n \n // Previous completed tasks as subtasks - with green checkmark\n previousCompleted.forEach((task, index) => {\n const hasMore = primaryTask?.detail || primaryTask?.error || index < previousCompleted.length - 1;\n const connector = hasMore ? '├──' : '└──';\n \n lines.push({\n id: `completed-${task.id}`,\n text: task.label,\n displayedText: task.label,\n color: colors.white,\n prefix: ` ${connector} `,\n prefixColor: colors.dimGray,\n showCursor: false,\n checkmark: true,\n });\n });\n \n // Detail line (no typewriter for progress updates - show immediately)\n if (primaryTask?.detail && primaryTask.status === 'running') {\n lines.push({\n id: `detail-${primaryTask.id}`,\n text: primaryTask.detail,\n displayedText: primaryTask.detail, // Show full text immediately for progress updates\n color: colors.dimGray,\n prefix: ' └── ',\n prefixColor: colors.dimGray,\n showCursor: false, // No cursor for instant updates\n });\n }\n \n // Error line (typewriter effect)\n if (primaryTask?.error && primaryTask.status === 'failed') {\n const errorId = `error-${primaryTask.id}`;\n const currentChars = typedChars[errorId] || 0;\n const displayedText = primaryTask.error.slice(0, currentChars);\n const isTyping = currentChars < primaryTask.error.length;\n \n lines.push({\n id: errorId,\n text: primaryTask.error,\n displayedText,\n color: colors.error,\n prefix: ' └── ',\n prefixColor: colors.dimGray,\n showCursor: isTyping && cursorVisible,\n });\n }\n \n // Typewriter animation - only for errors now (details show instantly for progress)\n const errorToType = primaryTask?.error && primaryTask.status === 'failed' ? primaryTask.error : null;\n const textToType = errorToType;\n const typeId = errorToType ? `error-${primaryTask?.id}` : null;\n \n useEffect(() => {\n if (!typeId || !textToType) return;\n \n const currentChars = typedChars[typeId] || 0;\n \n // Check if we just finished typing\n if (currentChars >= textToType.length) {\n // Fire callback once when typing completes\n if (!completedTyping.has(typeId) && onTypewriterComplete && primaryTask) {\n setCompletedTyping(prev => new Set(prev).add(typeId));\n onTypewriterComplete(primaryTask.id);\n }\n return;\n }\n \n // Continue typing animation\n const timeout = setTimeout(() => {\n setTypedChars(prev => ({\n ...prev,\n [typeId]: (prev[typeId] || 0) + 1,\n }));\n }, 30);\n \n return () => clearTimeout(timeout);\n }, [typeId, textToType, typedChars[typeId || ''], completedTyping, onTypewriterComplete, primaryTask]);\n \n // Empty state - show empty box to maintain layout\n if (lines.length === 0) {\n return (\n <Box flexDirection=\"column\" alignItems=\"center\" marginTop={1}>\n <Box flexDirection=\"column\" width={BOX_WIDTH}>\n <Text color={colors.dimGray}>┌{'─'.repeat(BOX_WIDTH - 2)}┐</Text>\n <Box>\n <Text color={colors.dimGray}>│</Text>\n <Text>{' '.repeat(BOX_WIDTH - 2)}</Text>\n <Text color={colors.dimGray}>│</Text>\n </Box>\n <Text color={colors.dimGray}>└{'─'.repeat(BOX_WIDTH - 2)}┘</Text>\n </Box>\n </Box>\n );\n }\n \n return (\n <Box flexDirection=\"column\" alignItems=\"center\" marginTop={1}>\n <Box flexDirection=\"column\" width={BOX_WIDTH}>\n {/* Top border */}\n <Text color={colors.dimGray}>┌{'─'.repeat(BOX_WIDTH - 2)}┐</Text>\n \n {/* Content lines */}\n {lines.map(line => {\n const checkmarkStr = line.checkmark ? `${symbols.check} ` : '';\n const content = `${line.prefix}${checkmarkStr}${line.displayedText}`;\n const cursor = line.showCursor ? '▌' : '';\n const paddingNeeded = Math.max(0, BOX_INNER_WIDTH - content.length - cursor.length);\n \n return (\n <Box key={line.id}>\n <Text color={colors.dimGray}>│ </Text>\n <Text color={line.prefixColor}>{line.prefix}</Text>\n {line.checkmark && <Text color={colors.success}>{symbols.check} </Text>}\n <Text color={line.color}>{line.displayedText}</Text>\n {line.showCursor && <Text color={colors.cyan}>▌</Text>}\n <Text>{' '.repeat(paddingNeeded)}</Text>\n <Text color={colors.dimGray}> │</Text>\n </Box>\n );\n })}\n \n {/* Bottom border */}\n <Text color={colors.dimGray}>└{'─'.repeat(BOX_WIDTH - 2)}┘</Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\nexport interface ConfigItem {\n label: string;\n value: string;\n}\n\ninterface ConfigSummaryProps {\n items: ConfigItem[];\n title?: string;\n}\n\n/**\n * Configuration summary display\n * ───────────────────────────────────\n * Workspace ~/openbuilder-workspace\n * Server http://localhost:3000\n * Runner local\n * ───────────────────────────────────\n */\nexport function ConfigSummary({ items, title }: ConfigSummaryProps) {\n const dividerWidth = 40;\n const divider = symbols.horizontalLine.repeat(dividerWidth);\n \n // Find the longest label for alignment\n const maxLabelLength = Math.max(...items.map(item => item.label.length));\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Text color={colors.dimGray}>{divider}</Text>\n \n {title && (\n <Box marginTop={1} marginBottom={1}>\n <Text color={colors.white} bold>{title}</Text>\n </Box>\n )}\n \n <Box flexDirection=\"column\" alignItems=\"flex-start\" marginTop={title ? 0 : 1}>\n {items.map((item, index) => (\n <Box key={index}>\n <Text color={colors.gray}>\n {item.label.padEnd(maxLabelLength + 3)}\n </Text>\n <Text color={colors.cyan}>{item.value}</Text>\n </Box>\n ))}\n </Box>\n \n <Box marginTop={1}>\n <Text color={colors.dimGray}>{divider}</Text>\n </Box>\n </Box>\n );\n}\n\ninterface NextStepsProps {\n command: string;\n url: string;\n}\n\n/**\n * Next steps display for completion screen\n */\nexport function NextSteps({ command, url }: NextStepsProps) {\n return (\n <Box flexDirection=\"column\" alignItems=\"center\" marginTop={1}>\n <Box>\n <Text color={colors.gray}>Run: </Text>\n <Text color={colors.cyan} bold>{command}</Text>\n </Box>\n <Box>\n <Text color={colors.gray}>Open: </Text>\n <Text color={colors.cyan}>{url}</Text>\n </Box>\n </Box>\n );\n}\n\ninterface ErrorSummaryProps {\n message?: string;\n suggestions: string[];\n}\n\n/**\n * Error display with message and recovery suggestions\n */\nexport function ErrorSummary({ message, suggestions }: ErrorSummaryProps) {\n const dividerWidth = 44;\n const divider = symbols.horizontalLine.repeat(dividerWidth);\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Text color={colors.dimGray}>{divider}</Text>\n \n {/* Error message header */}\n {message && (\n <Box marginTop={1} marginBottom={1}>\n <Text color={colors.error} bold>{symbols.cross} {message}</Text>\n </Box>\n )}\n \n {/* Suggestions/details */}\n <Box flexDirection=\"column\" alignItems=\"flex-start\" marginTop={message ? 0 : 1}>\n {suggestions.map((suggestion, index) => (\n <Box key={index}>\n <Text color={suggestion.startsWith(' ') ? colors.cyan : colors.gray}>\n {suggestion}\n </Text>\n </Box>\n ))}\n </Box>\n \n <Box marginTop={1}>\n <Text color={colors.dimGray}>{divider}</Text>\n </Box>\n </Box>\n );\n}\n","/**\n * BuildErrorView - Compact scrollable view for build errors\n * Designed to fit in the center of the init screen, not full-screen\n */\n\nimport React, { useState, useCallback } from 'react';\nimport { Box, Text, useInput, useApp, useStdout } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface BuildErrorViewProps {\n /** Error title/message */\n title: string;\n /** Array of error lines to display */\n errorLines: string[];\n /** Suggestions for fixing the error */\n suggestions?: string[];\n /** Callback when user exits */\n onExit?: () => void;\n}\n\n/**\n * Compact build error viewer with scrolling and copy support\n * Displays in the center area, half-width, with scrollable content\n */\nexport function BuildErrorView({ \n title, \n errorLines, \n suggestions = [],\n onExit \n}: BuildErrorViewProps) {\n const { exit } = useApp();\n const { stdout } = useStdout();\n const terminalWidth = stdout?.columns || 80;\n\n const [scrollOffset, setScrollOffset] = useState(0);\n const [showCopiedMessage, setShowCopiedMessage] = useState(false);\n\n // Fixed dimensions for compact view\n const boxWidth = Math.min(70, Math.floor(terminalWidth * 0.6));\n const maxVisibleLines = 12; // Show 12 lines of errors max\n \n // Calculate max scroll\n const maxScroll = Math.max(0, errorLines.length - maxVisibleLines);\n\n // Get visible lines\n const visibleLines = errorLines.slice(scrollOffset, scrollOffset + maxVisibleLines);\n\n // Copy all error content to clipboard\n const copyToClipboard = useCallback(async () => {\n const content = [\n `Build Error: ${title}`,\n '─'.repeat(60),\n ...errorLines,\n '─'.repeat(60),\n '',\n ...suggestions,\n ].join('\\n');\n\n try {\n const { exec } = await import('child_process');\n\n // Detect platform and use appropriate clipboard command\n const platform = process.platform;\n let clipboardCmd: string;\n\n if (platform === 'darwin') {\n clipboardCmd = 'pbcopy';\n } else if (platform === 'win32') {\n clipboardCmd = 'clip';\n } else {\n clipboardCmd = 'xclip -selection clipboard';\n }\n\n // Write to clipboard\n const child = exec(clipboardCmd);\n child.stdin?.write(content);\n child.stdin?.end();\n\n setShowCopiedMessage(true);\n\n // Show success message then exit after delay\n setTimeout(() => {\n if (onExit) {\n onExit();\n } else {\n exit();\n }\n }, 1500);\n } catch (error) {\n // Clipboard failed - still show message\n setShowCopiedMessage(true);\n setTimeout(() => setShowCopiedMessage(false), 2000);\n }\n }, [title, errorLines, suggestions, onExit, exit]);\n\n // Handle keyboard input\n useInput((input, key) => {\n if (input === 'c' || input === 'C') {\n copyToClipboard();\n } else if (key.upArrow) {\n setScrollOffset(prev => Math.max(0, prev - 1));\n } else if (key.downArrow) {\n setScrollOffset(prev => Math.min(maxScroll, prev + 1));\n } else if (key.pageUp) {\n setScrollOffset(prev => Math.max(0, prev - maxVisibleLines));\n } else if (key.pageDown) {\n setScrollOffset(prev => Math.min(maxScroll, prev + maxVisibleLines));\n } else if (input === 'q' || key.escape) {\n if (onExit) {\n onExit();\n } else {\n exit();\n }\n }\n });\n\n // Color error lines based on content\n const getLineColor = (line: string): string => {\n if (/error|Error|ERR!/i.test(line)) return colors.error;\n if (/warning|warn/i.test(line)) return colors.warning;\n if (/:\\d+:\\d+/.test(line)) return colors.cyan;\n if (line.startsWith('─') || line.startsWith('openbuilder:')) return colors.dimGray;\n return colors.gray;\n };\n\n const divider = symbols.horizontalLine.repeat(boxWidth - 2);\n const hasScroll = errorLines.length > maxVisibleLines;\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\" width=\"100%\">\n {/* Top divider */}\n <Text color={colors.dimGray}>{divider}</Text>\n \n {/* Error header */}\n <Box marginTop={1} marginBottom={1} width={boxWidth} justifyContent=\"center\">\n <Text color={colors.error} bold>{symbols.cross} {title}</Text>\n </Box>\n\n {/* Scrollable error content */}\n <Box \n flexDirection=\"column\" \n width={boxWidth}\n borderStyle=\"round\"\n borderColor={colors.error}\n paddingX={1}\n paddingY={0}\n >\n {/* Scroll indicator header */}\n {hasScroll && (\n <Box justifyContent=\"flex-end\" marginBottom={0}>\n <Text color={colors.dimGray} dimColor>\n [{scrollOffset + 1}-{Math.min(scrollOffset + maxVisibleLines, errorLines.length)}/{errorLines.length}] ↑↓\n </Text>\n </Box>\n )}\n \n {/* Error lines */}\n {visibleLines.length > 0 ? (\n visibleLines.map((line, index) => {\n const truncatedLine = line.length > boxWidth - 4 \n ? line.substring(0, boxWidth - 7) + '...' \n : line;\n return (\n <Text key={index} color={getLineColor(line)} wrap=\"truncate\">\n {truncatedLine}\n </Text>\n );\n })\n ) : (\n <Text color={colors.dimGray}>No error details captured</Text>\n )}\n </Box>\n\n {/* Suggestions */}\n {suggestions.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1} width={boxWidth}>\n {suggestions.map((suggestion, index) => (\n <Text key={index} color={suggestion.startsWith(' ') ? colors.cyan : colors.gray}>\n {suggestion}\n </Text>\n ))}\n </Box>\n )}\n\n {/* Bottom divider */}\n <Box marginTop={1}>\n <Text color={colors.dimGray}>{divider}</Text>\n </Box>\n\n {/* Keyboard shortcuts */}\n <Box marginTop={1} justifyContent=\"center\">\n {showCopiedMessage ? (\n <Text color={colors.success} bold>\n {symbols.check} Copied to clipboard! Exiting...\n </Text>\n ) : (\n <Box>\n <Text color={colors.dimGray}>[</Text>\n <Text color={colors.success} bold>c</Text>\n <Text color={colors.dimGray}>]</Text>\n <Text color={colors.success}>copy & exit</Text>\n <Text> </Text>\n <Text color={colors.dimGray}>[</Text>\n <Text color={colors.cyan}>q</Text>\n <Text color={colors.dimGray}>]</Text>\n <Text color={colors.gray}>quit</Text>\n {hasScroll && (\n <>\n <Text> </Text>\n <Text color={colors.dimGray}>[</Text>\n <Text color={colors.cyan}>↑↓</Text>\n <Text color={colors.dimGray}>]</Text>\n <Text color={colors.gray}>scroll</Text>\n </>\n )}\n </Box>\n )}\n </Box>\n </Box>\n );\n}\n","import { useState, useCallback } from 'react';\nimport type { StepStatus } from '../components/ProgressStepper.js';\nimport type { TaskStatus } from '../components/TaskList.js';\nimport type { ConfigItem } from '../components/ConfigSummary.js';\n\nexport type InitPhase = 'repo' | 'build' | 'database' | 'ready';\n\nexport interface Task {\n id: string;\n label: string;\n status: TaskStatus;\n detail?: string;\n error?: string;\n stepId: string; // Which step this task belongs to\n}\n\nexport interface Step {\n id: string;\n label: string;\n status: StepStatus;\n}\n\nexport interface BuildErrorDetails {\n /** Raw error output lines for scrollable view */\n errorLines: string[];\n /** Suggestions for fixing */\n suggestions: string[];\n}\n\nexport interface InitState {\n phase: InitPhase;\n steps: Step[];\n tasks: Task[];\n config: ConfigItem[];\n error: {\n message: string;\n suggestions: string[];\n /** Detailed build error for full-screen view */\n buildError?: BuildErrorDetails;\n } | null;\n isComplete: boolean;\n}\n\nconst INITIAL_STEPS: Step[] = [\n { id: 'repo', label: 'Clone', status: 'pending' },\n { id: 'build', label: 'Build', status: 'pending' },\n { id: 'database', label: 'Configure', status: 'pending' },\n { id: 'ready', label: 'Finish', status: 'pending' },\n];\n\n// Tasks now have a stepId to associate them with a step\nconst INITIAL_TASKS: Task[] = [\n { id: 'clone', label: 'Cloning repository', status: 'pending', stepId: 'repo' },\n { id: 'deps', label: 'Installing dependencies', status: 'pending', stepId: 'build' },\n { id: 'build', label: 'Building packages', status: 'pending', stepId: 'build' },\n { id: 'database', label: 'Configuring database', status: 'pending', stepId: 'database' },\n { id: 'config', label: 'Saving configuration', status: 'pending', stepId: 'ready' },\n { id: 'services', label: 'Building services', status: 'pending', stepId: 'ready' },\n];\n\nexport interface UseInitFlowReturn {\n state: InitState;\n // Step management\n setStepStatus: (stepId: string, status: StepStatus) => void;\n activateStep: (stepId: string) => void;\n completeStep: (stepId: string) => void;\n failStep: (stepId: string) => void;\n // Task management\n setTaskStatus: (taskId: string, status: TaskStatus, detail?: string) => void;\n startTask: (taskId: string, detail?: string) => void;\n completeTask: (taskId: string) => void;\n failTask: (taskId: string, error: string) => void;\n // Helper to get tasks for a specific step\n getTasksForStep: (stepId: string) => Task[];\n // Helper to get currently active tasks (running or just completed in current phase)\n getActiveStepTasks: () => Task[];\n // Config management\n setConfig: (items: ConfigItem[]) => void;\n // Error management\n setError: (message: string, suggestions: string[]) => void;\n setBuildError: (message: string, errorLines: string[], suggestions: string[]) => void;\n clearError: () => void;\n // Completion\n markComplete: () => void;\n // Reset\n reset: () => void;\n}\n\nexport function useInitFlow(): UseInitFlowReturn {\n const [state, setState] = useState<InitState>({\n phase: 'repo',\n steps: INITIAL_STEPS,\n tasks: INITIAL_TASKS,\n config: [],\n error: null,\n isComplete: false,\n });\n\n // Step management\n const setStepStatus = useCallback((stepId: string, status: StepStatus) => {\n setState(prev => ({\n ...prev,\n steps: prev.steps.map(step =>\n step.id === stepId ? { ...step, status } : step\n ),\n }));\n }, []);\n\n const activateStep = useCallback((stepId: string) => {\n setState(prev => ({\n ...prev,\n phase: stepId as InitPhase,\n steps: prev.steps.map(step =>\n step.id === stepId ? { ...step, status: 'active' } : step\n ),\n }));\n }, []);\n\n const completeStep = useCallback((stepId: string) => {\n setStepStatus(stepId, 'completed');\n }, [setStepStatus]);\n\n const failStep = useCallback((stepId: string) => {\n setStepStatus(stepId, 'error');\n }, [setStepStatus]);\n\n // Task management\n const setTaskStatus = useCallback((taskId: string, status: TaskStatus, detail?: string) => {\n setState(prev => ({\n ...prev,\n tasks: prev.tasks.map(task =>\n task.id === taskId ? { ...task, status, detail: detail ?? task.detail } : task\n ),\n }));\n }, []);\n\n const startTask = useCallback((taskId: string, detail?: string) => {\n setTaskStatus(taskId, 'running', detail);\n }, [setTaskStatus]);\n\n const completeTask = useCallback((taskId: string) => {\n setTaskStatus(taskId, 'completed');\n }, [setTaskStatus]);\n\n const failTask = useCallback((taskId: string, error: string) => {\n setState(prev => ({\n ...prev,\n tasks: prev.tasks.map(task =>\n task.id === taskId ? { ...task, status: 'failed', error } : task\n ),\n }));\n }, []);\n\n // Get tasks for a specific step\n const getTasksForStep = useCallback((stepId: string): Task[] => {\n return state.tasks.filter(task => task.stepId === stepId);\n }, [state.tasks]);\n\n // Get tasks for the currently active step\n const getActiveStepTasks = useCallback((): Task[] => {\n return state.tasks.filter(task => task.stepId === state.phase);\n }, [state.tasks, state.phase]);\n\n // Config management\n const setConfig = useCallback((items: ConfigItem[]) => {\n setState(prev => ({\n ...prev,\n config: items,\n }));\n }, []);\n\n // Error management\n const setError = useCallback((message: string, suggestions: string[]) => {\n setState(prev => ({\n ...prev,\n error: { message, suggestions },\n }));\n }, []);\n\n const setBuildError = useCallback((message: string, errorLines: string[], suggestions: string[]) => {\n setState(prev => ({\n ...prev,\n error: { \n message, \n suggestions,\n buildError: {\n errorLines,\n suggestions,\n }\n },\n }));\n }, []);\n\n const clearError = useCallback(() => {\n setState(prev => ({\n ...prev,\n error: null,\n }));\n }, []);\n\n // Completion\n const markComplete = useCallback(() => {\n setState(prev => ({\n ...prev,\n isComplete: true,\n phase: 'ready',\n steps: prev.steps.map(step => ({ ...step, status: 'completed' })),\n }));\n }, []);\n\n // Reset\n const reset = useCallback(() => {\n setState({\n phase: 'repo',\n steps: INITIAL_STEPS,\n tasks: INITIAL_TASKS,\n config: [],\n error: null,\n isComplete: false,\n });\n }, []);\n\n return {\n state,\n setStepStatus,\n activateStep,\n completeStep,\n failStep,\n setTaskStatus,\n startTask,\n completeTask,\n failTask,\n getTasksForStep,\n getActiveStepTasks,\n setConfig,\n setError,\n setBuildError,\n clearError,\n markComplete,\n reset,\n };\n}\n","import { useEffect, useState } from 'react';\nimport { Box, Text, useApp, useStdout } from 'ink';\nimport { Banner, ProgressStepper, TaskStream, ConfigSummary, NextSteps, ErrorSummary, BuildErrorView } from '../components/index.js';\nimport { useInitFlow } from '../hooks/index.js';\nimport type { ConfigItem } from '../components/ConfigSummary.js';\nimport type { StreamTask } from '../components/TaskStream.js';\nimport { colors, symbols } from '../theme.js';\nimport { getVersionInfo } from '../../utils/version-info.js';\n\nexport interface InitConfig {\n workspace: string;\n monorepoPath?: string;\n databaseUrl?: string;\n apiUrl: string;\n runnerId: string;\n}\n\nexport interface InitScreenProps {\n onInit: (callbacks: InitCallbacks) => Promise<InitConfig>;\n onComplete?: (config: InitConfig) => void;\n onError?: (error: Error) => void;\n}\n\nexport interface InitCallbacks {\n // Step management\n activateStep: (stepId: string) => void;\n completeStep: (stepId: string) => void;\n failStep: (stepId: string) => void;\n // Task management\n startTask: (taskId: string, detail?: string) => void;\n completeTask: (taskId: string) => void;\n failTask: (taskId: string, error: string) => void;\n // Skip task (remove from display)\n skipTask: (taskId: string) => void;\n // Update task label\n updateTaskLabel: (taskId: string, label: string) => void;\n // Error handling\n setError: (message: string, suggestions: string[]) => void;\n // Build error with full output for scrollable view\n setBuildError: (message: string, errorLines: string[], suggestions: string[]) => void;\n}\n\n/**\n * Main init screen - fullscreen centered TUI\n * Shows progress stepper with tasks appearing under the active step\n */\nexport function InitScreen({ onInit, onComplete, onError }: InitScreenProps) {\n const { exit } = useApp();\n const { stdout } = useStdout();\n const flow = useInitFlow();\n const [finalConfig, setFinalConfig] = useState<InitConfig | null>(null);\n \n // Get version info\n const versionInfo = getVersionInfo();\n \n // Calculate vertical centering\n const terminalHeight = stdout?.rows || 24;\n const contentHeight = 20;\n const topPadding = Math.max(0, Math.floor((terminalHeight - contentHeight) / 3));\n\n // Run init flow\n useEffect(() => {\n const callbacks: InitCallbacks = {\n activateStep: flow.activateStep,\n completeStep: flow.completeStep,\n failStep: flow.failStep,\n startTask: flow.startTask,\n completeTask: flow.completeTask,\n failTask: flow.failTask,\n skipTask: (taskId: string) => {\n flow.setTaskStatus(taskId, 'completed');\n },\n updateTaskLabel: (taskId: string, label: string) => {\n flow.setTaskStatus(taskId, flow.state.tasks.find(t => t.id === taskId)?.status || 'pending');\n },\n setError: flow.setError,\n setBuildError: flow.setBuildError,\n };\n\n onInit(callbacks)\n .then((config) => {\n setFinalConfig(config);\n \n // Set config summary items\n const configItems: ConfigItem[] = [\n { label: 'Workspace', value: config.workspace },\n { label: 'Server', value: config.apiUrl },\n { label: 'Runner', value: config.runnerId },\n ];\n \n if (config.monorepoPath) {\n configItems.push({ label: 'Repository', value: config.monorepoPath });\n }\n \n flow.setConfig(configItems);\n flow.markComplete();\n \n if (onComplete) {\n onComplete(config);\n }\n })\n .catch((error) => {\n if (onError) {\n onError(error);\n }\n });\n }, []);\n\n const { state } = flow;\n \n // Get tasks for current step only, mapped to StreamTask format\n const currentStepTasks: StreamTask[] = flow.getActiveStepTasks().map(task => ({\n id: task.id,\n label: task.label,\n status: task.status,\n detail: task.detail,\n error: task.error,\n }));\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\" paddingTop={topPadding}>\n {/* Banner */}\n <Banner />\n \n {/* Version - right under banner */}\n <Box marginTop={1}>\n <Text color={colors.gray} dimColor>\n {versionInfo.display}\n </Text>\n </Box>\n \n {/* Spacer */}\n <Box marginTop={1} />\n \n {/* Progress Stepper (just dots and labels) */}\n <ProgressStepper steps={state.steps} />\n \n {/* Task Stream - shows current step's tasks with typewriter effect */}\n {!state.isComplete && !state.error && (\n <TaskStream \n stepId={state.phase}\n tasks={currentStepTasks}\n />\n )}\n \n {/* Error Display - show full BuildErrorView for build errors, simple ErrorSummary for others */}\n {state.error && state.error.buildError && (\n <BuildErrorView\n title={state.error.message}\n errorLines={state.error.buildError.errorLines}\n suggestions={state.error.buildError.suggestions}\n onExit={() => exit()}\n />\n )}\n {state.error && !state.error.buildError && (\n <Box marginTop={2}>\n <ErrorSummary \n message={state.error.message} \n suggestions={state.error.suggestions} \n />\n </Box>\n )}\n \n {/* Completion Display - show summary of all completed tasks */}\n {state.isComplete && !state.error && (\n <Box marginTop={2} flexDirection=\"column\" alignItems=\"center\">\n {/* Success message */}\n <Text color={colors.success} bold>\n {symbols.check} Setup complete!\n </Text>\n \n {/* Completed tasks summary */}\n <Box marginTop={1} flexDirection=\"column\">\n {state.tasks.filter(t => t.status === 'completed').map(task => (\n <Box key={task.id}>\n <Text color={colors.success}>{symbols.check}</Text>\n <Text color={colors.gray}> {task.label}</Text>\n </Box>\n ))}\n </Box>\n \n <Box marginTop={1} />\n <ConfigSummary items={state.config} />\n <NextSteps command=\"openbuilder run\" url=\"http://localhost:3000\" />\n </Box>\n )}\n </Box>\n );\n}\n","import { Box, Text, useInput, useStdout } from 'ink';\nimport { Banner } from '../components/index.js';\nimport { colors, symbols } from '../theme.js';\n\nexport interface StartPromptScreenProps {\n onSelect: (shouldStart: boolean) => void;\n}\n\n/**\n * Post-init prompt asking if user wants to start OpenBuilder now\n */\nexport function StartPromptScreen({ onSelect }: StartPromptScreenProps) {\n const { stdout } = useStdout();\n \n // Calculate vertical centering\n const terminalHeight = stdout?.rows || 24;\n const contentHeight = 14;\n const topPadding = Math.max(0, Math.floor((terminalHeight - contentHeight) / 3));\n\n useInput((input, key) => {\n const char = input.toLowerCase();\n \n // Enter = start\n if (key.return) {\n onSelect(true);\n return;\n }\n \n // Y = start\n if (char === 'y') {\n onSelect(true);\n return;\n }\n \n // N = don't start\n if (char === 'n') {\n onSelect(false);\n return;\n }\n \n // Escape = don't start\n if (key.escape) {\n onSelect(false);\n return;\n }\n });\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\" paddingTop={topPadding}>\n {/* Banner */}\n <Banner />\n \n {/* Spacer */}\n <Box marginTop={2} />\n \n {/* Success message */}\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Text color={colors.success} bold>\n {symbols.check} OpenBuilder is ready!\n </Text>\n </Box>\n \n {/* Spacer */}\n <Box marginTop={2} />\n \n {/* Prompt */}\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Text color={colors.white}>\n Start OpenBuilder now?\n </Text>\n \n <Box marginTop={1}>\n <Text color={colors.dimGray}>\n Press <Text color={colors.cyan} bold>Y</Text> or <Text color={colors.cyan} bold>Enter</Text> to start, <Text color={colors.cyan} bold>N</Text> or <Text color={colors.cyan} bold>Esc</Text> to exit\n </Text>\n </Box>\n </Box>\n \n {/* Spacer */}\n <Box marginTop={2} />\n \n {/* Info about manual start */}\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Text color={colors.dimGray}>\n To start later, run: <Text color={colors.cyan}>openbuilder run</Text>\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { render } from 'ink';\nimport { InitScreen, StartPromptScreen, type InitCallbacks, type InitConfig } from './screens/index.js';\n\nexport interface RunInitTUIOptions {\n onInit: (callbacks: InitCallbacks) => Promise<InitConfig>;\n}\n\ntype InitAppScreen = 'init' | 'prompt';\n\ninterface InitAppProps {\n onInit: (callbacks: InitCallbacks) => Promise<InitConfig>;\n onComplete: (config: InitConfig, shouldStart: boolean) => void;\n onError: (error: Error) => void;\n}\n\n/**\n * Init App component that manages the init flow screens\n */\nfunction InitApp({ onInit, onComplete, onError }: InitAppProps) {\n const [screen, setScreen] = useState<InitAppScreen>('init');\n const [config, setConfig] = useState<InitConfig | null>(null);\n\n const handleInitComplete = (initConfig: InitConfig) => {\n setConfig(initConfig);\n // Show the start prompt screen\n setScreen('prompt');\n };\n\n const handleStartChoice = (shouldStart: boolean) => {\n if (config) {\n onComplete(config, shouldStart);\n }\n };\n\n if (screen === 'prompt' && config) {\n return <StartPromptScreen onSelect={handleStartChoice} />;\n }\n\n return (\n <InitScreen\n onInit={onInit}\n onComplete={handleInitComplete}\n onError={onError}\n />\n );\n}\n\n/**\n * Render the TUI init screen\n * Returns a promise that resolves with config and whether to start\n */\nexport async function runInitTUI(options: RunInitTUIOptions): Promise<{ config: InitConfig; shouldStart: boolean }> {\n return new Promise((resolve, reject) => {\n let result: { config: InitConfig; shouldStart: boolean } | null = null;\n let error: Error | null = null;\n\n const { unmount, waitUntilExit } = render(\n <InitApp\n onInit={options.onInit}\n onComplete={(config, shouldStart) => {\n result = { config, shouldStart };\n // Give time for final render before unmounting\n setTimeout(() => {\n unmount();\n }, 100);\n }}\n onError={(err) => {\n error = err;\n // Keep error displayed, don't auto-unmount\n }}\n />,\n {\n exitOnCtrlC: true,\n }\n );\n\n waitUntilExit().then(() => {\n if (error) {\n reject(error);\n } else if (result) {\n resolve(result);\n } else {\n reject(new Error('Init cancelled'));\n }\n });\n });\n}\n","/**\n * TUI-based init command with beautiful centered interface\n * Uses Ink for React-based terminal rendering\n */\n\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { existsSync, realpathSync, rmSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { randomBytes } from 'node:crypto';\nimport { runInitTUI } from '../tui/App.js';\nimport type { InitCallbacks, InitConfig } from '../tui/screens/index.js';\nimport { configManager } from '../utils/config-manager.js';\nimport { isInsideMonorepo } from '../utils/repo-detector.js';\nimport {\n cloneRepository,\n installDependencies,\n isPnpmInstalled,\n buildAgentCore\n} from '../utils/repo-cloner.js';\nimport {\n setupDatabase,\n pushDatabaseSchema,\n} from '../utils/database-setup.js';\nimport { CLIError } from '../utils/cli-error.js';\nimport { layout } from '../tui/theme.js';\n\n/**\n * Generate a secure random secret\n */\nfunction generateSecret(): string {\n return randomBytes(32).toString('hex');\n}\n\n/**\n * Check if a path is or contains the current working directory\n */\nfunction isCurrentWorkingDirectory(targetPath: string): boolean {\n try {\n const cwd = realpathSync(process.cwd());\n const target = realpathSync(resolve(targetPath));\n return cwd === target || cwd.startsWith(target + '/');\n } catch {\n const cwd = process.cwd();\n const target = resolve(targetPath);\n return cwd === target || cwd.startsWith(target + '/');\n }\n}\n\n/**\n * Normalize URL by adding protocol if missing\n */\nfunction normalizeUrl(url: string): string {\n if (!url) return url;\n if (url.match(/^https?:\\/\\//i)) return url;\n if (url.match(/^(localhost|127\\.0\\.0\\.1)(:|\\/|$)/i)) {\n return `http://${url}`;\n }\n return `https://${url}`;\n}\n\n/**\n * Get default workspace path\n */\nfunction getDefaultWorkspace(): string {\n return join(process.cwd(), 'openbuilder-workspace');\n}\n\n/**\n * Get default monorepo clone path\n */\nfunction getDefaultMonorepoPath(): string {\n return join(process.cwd(), 'openbuilder');\n}\n\n/**\n * Sleep utility for deliberate pacing\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\ninterface InitOptions {\n workspace?: string;\n url?: string;\n secret?: string;\n branch?: string;\n database?: string | boolean;\n yes?: boolean;\n nonInteractive?: boolean;\n}\n\n/**\n * Run the TUI-based init command\n */\nexport async function initTUICommand(options: InitOptions): Promise<void> {\n // Clear screen for fullscreen experience\n console.clear();\n\n try {\n const { shouldStart } = await runInitTUI({\n onInit: async (callbacks: InitCallbacks) => {\n return executeInitFlow(options, callbacks);\n },\n });\n \n if (shouldStart) {\n console.clear();\n console.log('\\n Starting OpenBuilder...\\n');\n // Import and run the start command (full TUI with web app + runner)\n const { startCommand } = await import('./start.js');\n await startCommand({});\n } else {\n console.clear();\n console.log('\\n ✨ OpenBuilder is ready!\\n');\n console.log(' To start later, run:\\n');\n console.log(' openbuilder run\\n');\n console.log(' Then open: http://localhost:3000\\n');\n }\n \n } catch (error) {\n // Error was already displayed in TUI\n console.log('\\n');\n process.exit(1);\n }\n}\n\n\n\n/**\n * Execute the init flow, calling callbacks to update UI\n */\nasync function executeInitFlow(\n options: InitOptions,\n callbacks: InitCallbacks\n): Promise<InitConfig> {\n const { activateStep, completeStep, failStep, startTask, completeTask, failTask, setError, setBuildError } = callbacks;\n\n let monorepoPath: string | undefined;\n let databaseUrl: string | undefined;\n const workspace = options.workspace || getDefaultWorkspace();\n const generatedSecret = options.secret || generateSecret();\n const apiUrl = normalizeUrl(options.url || 'http://localhost:3000');\n\n // ============================================\n // PHASE 1: Repository\n // ============================================\n activateStep('repo');\n await sleep(layout.stepTransitionDelay);\n\n // Reset config if exists\n if (configManager.isInitialized()) {\n configManager.reset();\n }\n\n // Check for existing monorepo\n startTask('clone', 'Checking for repository...');\n await sleep(300);\n\n const repoCheck = await isInsideMonorepo();\n\n if (repoCheck.inside && repoCheck.root) {\n monorepoPath = repoCheck.root;\n completeTask('clone');\n await sleep(layout.taskCompletionDelay);\n } else {\n // Need to clone\n const hasPnpm = await isPnpmInstalled();\n if (!hasPnpm) {\n failTask('clone', 'pnpm not found');\n failStep('repo');\n setError('pnpm is required', [\n 'Install pnpm: npm install -g pnpm',\n 'Then retry: openbuilder init -y',\n ]);\n throw new CLIError({\n code: 'DEPENDENCIES_INSTALL_FAILED',\n message: 'pnpm is not installed',\n });\n }\n\n const clonePath = getDefaultMonorepoPath();\n\n // Clean up existing installation\n if (existsSync(clonePath)) {\n if (isCurrentWorkingDirectory(clonePath)) {\n failTask('clone', 'Cannot remove current directory');\n failStep('repo');\n setError('Cannot remove current directory', [\n 'Run from a different directory',\n 'Or manually remove: rm -rf ' + clonePath,\n ]);\n throw new CLIError({\n code: 'CONFIG_INVALID',\n message: 'Cannot remove current working directory',\n });\n }\n rmSync(clonePath, { recursive: true, force: true });\n }\n\n try {\n // Clone repository\n startTask('clone', 'Cloning from GitHub...');\n monorepoPath = await cloneRepository({\n targetPath: clonePath,\n branch: options.branch || 'main',\n silent: true, // Suppress console output in TUI mode\n });\n completeTask('clone');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n failTask('clone', 'Clone failed');\n failStep('repo');\n setError('Failed to clone repository', [\n 'Check your internet connection',\n 'Verify git is installed: git --version',\n 'Try: git clone https://github.com/codyde/openbuilder.git',\n ]);\n throw error;\n }\n }\n\n completeStep('repo');\n await sleep(layout.stepTransitionDelay);\n\n // ============================================\n // PHASE 2: Build\n // ============================================\n activateStep('build');\n await sleep(layout.stepTransitionDelay);\n\n // Install dependencies\n startTask('deps', 'Running pnpm install...');\n try {\n await installDependencies(monorepoPath!, true); // silent mode\n completeTask('deps');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n failTask('deps', 'Install failed');\n failStep('build');\n setError('Failed to install dependencies', [\n 'Check pnpm is installed: pnpm --version',\n 'Try manually: cd ' + monorepoPath + ' && pnpm install',\n ]);\n throw error;\n }\n\n // Build packages\n startTask('build', '@openbuilder/agent-core');\n try {\n await buildAgentCore(monorepoPath!, true); // silent mode\n completeTask('build');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n failTask('build', 'Build failed');\n failStep('build');\n setError('Failed to build packages', [\n 'Try manually: cd ' + monorepoPath + ' && pnpm build',\n ]);\n throw error;\n }\n\n completeStep('build');\n await sleep(layout.stepTransitionDelay);\n\n // ============================================\n // PHASE 3: Database\n // ============================================\n activateStep('database');\n await sleep(layout.stepTransitionDelay);\n\n startTask('database', 'Setting up Neon database...');\n\n // Handle database options\n const dbOption = options.database;\n const isConnectionString = typeof dbOption === 'string' &&\n (dbOption.startsWith('postgres://') || dbOption.startsWith('postgresql://'));\n\n try {\n if (isConnectionString) {\n databaseUrl = dbOption as string;\n await pushDatabaseSchema(monorepoPath!, databaseUrl, true); // silent mode\n } else {\n // Default: setup Neon database\n databaseUrl = await setupDatabase(monorepoPath!, true) || undefined; // silent mode\n if (databaseUrl) {\n await pushDatabaseSchema(monorepoPath!, databaseUrl, true); // silent mode\n }\n }\n completeTask('database');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n // Database setup is optional, don't fail hard\n completeTask('database');\n await sleep(layout.taskCompletionDelay);\n }\n\n completeStep('database');\n await sleep(layout.stepTransitionDelay);\n\n // ============================================\n // PHASE 4: Configuration & Ready\n // ============================================\n activateStep('ready');\n await sleep(layout.stepTransitionDelay);\n\n // Create workspace directory\n if (!existsSync(workspace)) {\n await mkdir(workspace, { recursive: true });\n }\n\n // Save configuration\n startTask('config', 'Writing configuration...');\n try {\n configManager.set('workspace', workspace);\n if (monorepoPath) {\n configManager.set('monorepoPath', monorepoPath);\n }\n if (databaseUrl) {\n configManager.set('databaseUrl', databaseUrl);\n }\n configManager.set('apiUrl', apiUrl);\n \n const wsProtocol = apiUrl.startsWith('https://') ? 'wss://' : 'ws://';\n const hostPath = apiUrl.replace(/^https?:\\/\\//, '').replace(/\\/$/, '');\n const wsUrl = `${wsProtocol}${hostPath}/ws/runner`;\n \n configManager.set('server', {\n wsUrl: wsUrl,\n secret: generatedSecret,\n });\n configManager.set('runner', {\n id: 'local',\n reconnectAttempts: 5,\n heartbeatInterval: 15000,\n });\n configManager.set('tunnel', {\n provider: 'cloudflare',\n autoCreate: true,\n });\n\n // Create .env.local\n if (monorepoPath) {\n const envLocalPath = join(monorepoPath, 'apps', 'openbuilder', '.env.local');\n const envContent = [\n '# Auto-generated by openbuilder CLI',\n `# Generated at: ${new Date().toISOString()}`,\n '',\n 'OPENBUILDER_LOCAL_MODE=true',\n `RUNNER_SHARED_SECRET=${generatedSecret}`,\n `WORKSPACE_ROOT=${workspace}`,\n 'RUNNER_ID=local',\n 'RUNNER_DEFAULT_ID=local',\n `DATABASE_URL=${databaseUrl || ''}`,\n '',\n ].join('\\n');\n \n await writeFile(envLocalPath, envContent);\n }\n\n completeTask('config');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n failTask('config', 'Config save failed');\n failStep('ready');\n setError('Failed to save configuration', [\n 'Check file permissions',\n 'Try running from a different directory',\n ]);\n throw error;\n }\n\n // Build all services for production\n if (monorepoPath) {\n startTask('services', 'Building services (this may take a minute)...');\n \n // Track build output for error reporting (capture both stdout and stderr)\n let buildOutput = '';\n let buildError = '';\n \n try {\n const { spawn } = await import('child_process');\n \n await new Promise<void>((resolve, reject) => {\n const buildProcess = spawn('pnpm', ['build:all'], {\n cwd: monorepoPath,\n stdio: 'pipe',\n shell: true,\n });\n \n // Capture stdout - many build tools output errors here\n buildProcess.stdout?.on('data', (data: Buffer) => {\n buildOutput += data.toString();\n });\n \n // Capture stderr\n buildProcess.stderr?.on('data', (data: Buffer) => {\n buildError += data.toString();\n });\n \n buildProcess.on('close', (code) => {\n if (code === 0) resolve();\n else reject(new Error(`Build failed with code ${code}`));\n });\n buildProcess.on('error', reject);\n });\n completeTask('services');\n await sleep(layout.taskCompletionDelay);\n } catch (error) {\n // Build failed - surface the error to the user\n failTask('services', 'Build failed');\n failStep('ready');\n \n // Combine all output for analysis\n const allOutput = (buildOutput + '\\n' + buildError).trim();\n const allLines = allOutput.split('\\n');\n \n // Find the most relevant error lines with better patterns\n const errorPatterns = [\n /error TS\\d+:/i, // TypeScript errors\n /error:/i, // General errors\n /Error:/, // Error messages\n /ERR!/, // npm/pnpm errors\n /failed/i, // Failed messages\n /Cannot find/i, // Module not found\n /Module not found/i, // Webpack/Next.js errors\n /SyntaxError/i, // Syntax errors\n /TypeError/i, // Type errors\n /ReferenceError/i, // Reference errors\n /ENOENT/i, // File not found\n /✖|✗|×/, // Error symbols\n ];\n \n // Find lines that match error patterns\n const relevantLines: string[] = [];\n let inErrorBlock = false;\n \n for (let i = 0; i < allLines.length; i++) {\n const line = allLines[i];\n const isErrorLine = errorPatterns.some(pattern => pattern.test(line));\n \n if (isErrorLine) {\n inErrorBlock = true;\n // Include 1 line before for context if available\n if (i > 0 && relevantLines.length === 0) {\n const prevLine = allLines[i - 1].trim();\n if (prevLine && !prevLine.startsWith('>')) {\n relevantLines.push(prevLine);\n }\n }\n }\n \n if (inErrorBlock) {\n relevantLines.push(line.trim());\n // Collect more lines for scrollable view (max 50 lines)\n if (relevantLines.length >= 50) break;\n }\n \n // End error block on empty line or success indicators\n if (inErrorBlock && (line.trim() === '' || /successfully|completed/i.test(line))) {\n // Keep going in case there are more errors\n inErrorBlock = false;\n }\n }\n \n // If no specific errors found, show last 30 lines of output\n const displayLines = relevantLines.length > 0 \n ? relevantLines\n : allLines.slice(-30);\n \n const suggestions = [\n 'To debug further, run manually:',\n ` cd ${monorepoPath} && pnpm build:all`,\n '',\n 'Common fixes:',\n ' - Run: pnpm install (missing dependencies)',\n ' - Check for TypeScript errors in the files mentioned above',\n ' - Ensure all environment variables are set',\n ];\n \n // Use setBuildError to show full-screen scrollable error view\n setBuildError('Production build failed', displayLines, suggestions);\n \n throw new CLIError({\n code: 'BUILD_FAILED',\n message: 'Failed to build services for production',\n suggestions: [\n `Run manually: cd ${monorepoPath} && pnpm build:all`,\n 'Check for TypeScript errors in the output above',\n 'Ensure all dependencies are installed: pnpm install',\n ],\n });\n }\n }\n\n // Validate configuration\n const validation = configManager.validate();\n if (!validation.valid) {\n failStep('ready');\n setError('Configuration invalid', validation.errors);\n throw new CLIError({\n code: 'CONFIG_INVALID',\n message: 'Configuration validation failed',\n });\n }\n\n completeStep('ready');\n\n return {\n workspace,\n monorepoPath,\n databaseUrl,\n apiUrl,\n runnerId: 'local',\n };\n}\n"],"names":["_jsxs","_jsx","Fragment","useState","useRef","useEffect","useCallback","_Fragment"],"mappings":"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"}
@@ -35,3 +35,4 @@ class Logger {
35
35
  const logger = new Logger();
36
36
 
37
37
  export { logger as l };
38
+ //# sourceMappingURL=logger-ZpJi7chw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-ZpJi7chw.js","sources":["../../src/cli/utils/logger.ts"],"sourcesContent":["import chalk from 'chalk';\n\n/**\n * CLI logger with colored output\n */\nexport class Logger {\n constructor(private verbose: boolean = false) {}\n\n info(message: string) {\n console.log(chalk.blue('ℹ'), message);\n }\n\n success(message: string) {\n console.log(chalk.green('✔'), message);\n }\n\n warn(message: string) {\n console.log(chalk.yellow('⚠'), message);\n }\n\n error(message: string) {\n console.error(chalk.red('✖'), message);\n }\n\n debug(message: string) {\n if (this.verbose) {\n console.log(chalk.gray('[debug]'), message);\n }\n }\n\n log(message: string) {\n console.log(message);\n }\n\n section(title: string) {\n console.log('\\n' + chalk.bold(title));\n }\n}\n\nexport const logger = new Logger();\n"],"names":[],"mappings":";;;AAEA;;AAEG;MACU,MAAM,CAAA;AACjB,IAAA,WAAA,CAAoB,UAAmB,KAAK,EAAA;QAAxB,IAAA,CAAA,OAAO,GAAP,OAAO;IAAoB;AAE/C,IAAA,IAAI,CAAC,OAAe,EAAA;AAClB,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvC;AAEA,IAAA,OAAO,CAAC,OAAe,EAAA;AACrB,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACxC;AAEA,IAAA,IAAI,CAAC,OAAe,EAAA;AAClB,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACzC;AAEA,IAAA,KAAK,CAAC,OAAe,EAAA;AACnB,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACxC;AAEA,IAAA,KAAK,CAAC,OAAe,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAC7C;IACF;AAEA,IAAA,GAAG,CAAC,OAAe,EAAA;AACjB,QAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACtB;AAEA,IAAA,OAAO,CAAC,KAAa,EAAA;AACnB,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC;AACD;AAEM,MAAM,MAAM,GAAG,IAAI,MAAM;;;;"}
@@ -60,3 +60,4 @@ async function loginCommand(options = {}) {
60
60
  }
61
61
 
62
62
  export { loginCommand };
63
+ //# sourceMappingURL=login-BhtodVsj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-BhtodVsj.js","sources":["../../src/cli/commands/login.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { performOAuthLogin, hasStoredToken, getStoredToken, storeToken } from '../utils/cli-auth.js';\nimport { logger } from '../utils/logger.js';\n\ninterface LoginOptions {\n url?: string;\n force?: boolean;\n}\n\n/**\n * Login command - authenticate with OpenBuilder via OAuth\n * \n * Usage:\n * openbuilder login [--url <server-url>] [--force]\n * \n * This command:\n * 1. Opens a browser for OAuth authentication (GitHub or Sentry)\n * 2. Creates a runner token automatically\n * 3. Stores the token locally for future use\n */\nexport async function loginCommand(options: LoginOptions = {}) {\n const apiUrl = options.url || 'https://openbuilder.sh';\n \n logger.section('OpenBuilder Login');\n \n // Check if already logged in\n if (!options.force && hasStoredToken()) {\n const existingToken = getStoredToken();\n logger.info(`Already logged in with token: ${chalk.cyan(existingToken?.substring(0, 12) + '...')}`);\n logger.info('');\n logger.info('Use --force to re-authenticate, or run:');\n logger.info(` ${chalk.cyan('openbuilder logout')} to clear credentials`);\n logger.info(` ${chalk.cyan('openbuilder runner')} to start the runner`);\n return;\n }\n \n logger.info(`Server: ${chalk.cyan(apiUrl)}`);\n logger.info('');\n \n // Perform OAuth flow\n const result = await performOAuthLogin({\n apiUrl,\n silent: false,\n });\n \n if (result.success && result.token) {\n // Store the token\n storeToken(result.token, apiUrl);\n \n logger.log('');\n logger.success('Authentication successful!');\n logger.info('');\n logger.info(`Token stored: ${chalk.cyan(result.token.substring(0, 12) + '...')}`);\n logger.info('');\n logger.info('You can now run:');\n logger.info(` ${chalk.cyan('openbuilder runner')} to start the runner`);\n } else {\n logger.error(result.error || 'Authentication failed');\n process.exit(1);\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AASA;;;;;;;;;;AAUG;AACI,eAAe,YAAY,CAAC,UAAwB,EAAE,EAAA;AAC3D,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,wBAAwB;AAEtD,IAAA,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC;;IAGnC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,cAAc,EAAE,EAAE;AACtC,QAAA,MAAM,aAAa,GAAG,cAAc,EAAE;QACtC,MAAM,CAAC,IAAI,CAAC,CAAA,8BAAA,EAAiC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAA,CAAE,CAAC;AACnG,QAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACf,QAAA,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC;AACtD,QAAA,MAAM,CAAC,IAAI,CAAC,CAAA,EAAA,EAAK,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA,qBAAA,CAAuB,CAAC;AACzE,QAAA,MAAM,CAAC,IAAI,CAAC,CAAA,EAAA,EAAK,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA,oBAAA,CAAsB,CAAC;QACxE;IACF;AAEA,IAAA,MAAM,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAE,CAAC;AAC5C,IAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;;AAGf,IAAA,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;QACrC,MAAM;AACN,QAAA,MAAM,EAAE,KAAK;AACd,KAAA,CAAC;IAEF,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE;;AAElC,QAAA,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;AAEhC,QAAA,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACd,QAAA,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC;AAC5C,QAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,CAAA,cAAA,EAAiB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAA,CAAE,CAAC;AACjF,QAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACf,QAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC/B,QAAA,MAAM,CAAC,IAAI,CAAC,CAAA,EAAA,EAAK,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA,oBAAA,CAAsB,CAAC;IAC1E;SAAO;QACL,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,uBAAuB,CAAC;AACrD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;AACF;;;;"}
@@ -37,3 +37,4 @@ async function logoutCommand() {
37
37
  }
38
38
 
39
39
  export { logoutCommand };
40
+ //# sourceMappingURL=logout-CDDASeuQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout-CDDASeuQ.js","sources":["../../src/cli/commands/logout.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { hasStoredToken, clearToken } from '../utils/cli-auth.js';\nimport { logger } from '../utils/logger.js';\n\n/**\n * Logout command - clear stored credentials\n * \n * Usage:\n * openbuilder logout\n * \n * This command clears the locally stored runner token.\n * The token remains valid on the server - you can revoke it\n * from the OpenBuilder dashboard if needed.\n */\nexport async function logoutCommand() {\n logger.section('OpenBuilder Logout');\n \n if (!hasStoredToken()) {\n logger.info('Not currently logged in.');\n return;\n }\n \n clearToken();\n \n logger.success('Logged out successfully.');\n logger.info('');\n logger.info('Note: The runner token is still valid on the server.');\n logger.info('To revoke it, visit your OpenBuilder dashboard.');\n logger.info('');\n logger.info(`Run ${chalk.cyan('openbuilder login')} to authenticate again.`);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAIA;;;;;;;;;AASG;AACI,eAAe,aAAa,GAAA;AACjC,IAAA,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;AAEpC,IAAA,IAAI,CAAC,cAAc,EAAE,EAAE;AACrB,QAAA,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC;QACvC;IACF;AAEA,IAAA,UAAU,EAAE;AAEZ,IAAA,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC;AAC1C,IAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACf,IAAA,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC;AACnE,IAAA,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC;AAC9D,IAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACf,IAAA,MAAM,CAAC,IAAI,CAAC,CAAA,IAAA,EAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA,uBAAA,CAAyB,CAAC;AAC9E;;;;"}