@hatchway/cli 0.50.71 → 0.50.72
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/bin/hatchway.js +2 -4
- package/package.json +2 -2
- package/dist/chunks/Banner-B4nm86qK.js +0 -27
- package/dist/chunks/Banner-B4nm86qK.js.map +0 -1
- package/dist/chunks/index-DCC6HGdr.js +0 -119
- package/dist/chunks/index-DCC6HGdr.js.map +0 -1
- package/dist/chunks/init-CBODHYDw.js +0 -473
- package/dist/chunks/init-CBODHYDw.js.map +0 -1
- package/dist/chunks/init-tui-CcxzfgmC.js +0 -1168
- package/dist/chunks/init-tui-CcxzfgmC.js.map +0 -1
- package/dist/chunks/main-tui-qySRaa-s.js +0 -652
- package/dist/chunks/main-tui-qySRaa-s.js.map +0 -1
- package/dist/chunks/manager-DjVI7erc.js +0 -1161
- package/dist/chunks/manager-DjVI7erc.js.map +0 -1
- package/dist/chunks/port-allocator-BENntRMG.js +0 -864
- package/dist/chunks/port-allocator-BENntRMG.js.map +0 -1
- package/dist/chunks/run-BbxtXsLx.js +0 -698
- package/dist/chunks/run-BbxtXsLx.js.map +0 -1
- package/dist/chunks/start-Dkuro1jp.js +0 -1713
- package/dist/chunks/start-Dkuro1jp.js.map +0 -1
- package/dist/chunks/theme-NAQBkisB.js +0 -40222
- package/dist/chunks/theme-NAQBkisB.js.map +0 -1
- package/dist/chunks/use-app-Ct3w2jLI.js +0 -10
- package/dist/chunks/use-app-Ct3w2jLI.js.map +0 -1
- package/dist/chunks/useBuildState-Dy7pRR8Z.js +0 -330
- package/dist/chunks/useBuildState-Dy7pRR8Z.js.map +0 -1
- package/dist/chunks/version-info-CDtU8Ta2.js +0 -92
- package/dist/chunks/version-info-CDtU8Ta2.js.map +0 -1
- package/dist/instrument.js +0 -48
- package/dist/instrument.js.map +0 -1
package/bin/hatchway.js
CHANGED
|
@@ -7,14 +7,12 @@ import { dirname, resolve } from 'path';
|
|
|
7
7
|
const __filename = fileURLToPath(import.meta.url);
|
|
8
8
|
const __dirname = dirname(__filename);
|
|
9
9
|
|
|
10
|
-
//
|
|
11
|
-
const instrumentPath = resolve(__dirname, '../dist/instrument.js');
|
|
10
|
+
// Path relative to this bin script
|
|
12
11
|
const cliPath = resolve(__dirname, '../dist/cli/index.js');
|
|
13
12
|
|
|
14
|
-
// Spawn node with --import flag for proper ESM instrumentation
|
|
15
13
|
const child = spawn(
|
|
16
14
|
process.execPath, // Use the same Node.js binary
|
|
17
|
-
[
|
|
15
|
+
[cliPath, ...process.argv.slice(2)],
|
|
18
16
|
{
|
|
19
17
|
stdio: 'inherit',
|
|
20
18
|
env: process.env,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hatchway/cli",
|
|
3
|
-
"version": "0.50.
|
|
3
|
+
"version": "0.50.72",
|
|
4
4
|
"description": "Hatchway CLI - Build AI-powered apps with Claude. Just run: npx @hatchway/cli runner",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"scripts": {
|
|
44
44
|
"dev": "RUNNER_WS_URL=ws://localhost:3000/ws/runner RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET:-dev-secret} tsx src/index.ts",
|
|
45
45
|
"dev:cli": "tsx src/cli/index.ts",
|
|
46
|
-
"build": "rollup -c && cp templates.json dist/ && rm -rf dist/lib/skills/platform-plugin && mkdir -p dist/lib/skills && cp -R src/lib/skills/platform-plugin dist/lib/skills/platform-plugin",
|
|
46
|
+
"build": "rm -rf dist && rollup -c && cp templates.json dist/ && rm -rf dist/lib/skills/platform-plugin && mkdir -p dist/lib/skills && cp -R src/lib/skills/platform-plugin dist/lib/skills/platform-plugin",
|
|
47
47
|
"build:tsc": "tsc -p tsconfig.json",
|
|
48
48
|
"start": "RUNNER_WS_URL=ws://localhost:3000/ws/runner RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET:-dev-secret} node dist/index.js",
|
|
49
49
|
"cli": "node dist/cli/index.js"
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
// Hatchway CLI - Built with Rollup
|
|
2
|
-
import { j as jsxRuntimeExports, B as Box, T as Text, c as colors } from './theme-NAQBkisB.js';
|
|
3
|
-
import 'node:stream';
|
|
4
|
-
import 'node:process';
|
|
5
|
-
import 'chalk';
|
|
6
|
-
import 'node:events';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* ASCII art banner component - centered with cyan/purple gradient
|
|
10
|
-
* Each line is padded to exactly the same width for perfect alignment
|
|
11
|
-
*/
|
|
12
|
-
function Banner() {
|
|
13
|
-
// Full banner lines - HATCH in cyan, WAY in purple
|
|
14
|
-
// All lines padded to same total width for consistent centering
|
|
15
|
-
const lines = [
|
|
16
|
-
{ hatch: '██╗ ██╗ █████╗ ████████╗ ██████╗██╗ ██╗', way: '██╗ ██╗ █████╗ ██╗ ██╗' },
|
|
17
|
-
{ hatch: '██║ ██║██╔══██╗╚══██╔══╝██╔════╝██║ ██║', way: '██║ ██║██╔══██╗╚██╗ ██╔╝' },
|
|
18
|
-
{ hatch: '███████║███████║ ██║ ██║ ███████║', way: '██║ █╗ ██║███████║ ╚████╔╝ ' },
|
|
19
|
-
{ hatch: '██╔══██║██╔══██║ ██║ ██║ ██╔══██║', way: '██║███╗██║██╔══██║ ╚██╔╝ ' },
|
|
20
|
-
{ hatch: '██║ ██║██║ ██║ ██║ ╚██████╗██║ ██║', way: '╚███╔███╔╝██║ ██║ ██║ ' },
|
|
21
|
-
{ hatch: '╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝', way: ' ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ' },
|
|
22
|
-
];
|
|
23
|
-
return (jsxRuntimeExports.jsx(Box, { flexDirection: "column", alignItems: "center", children: lines.map((line, index) => (jsxRuntimeExports.jsxs(Box, { children: [jsxRuntimeExports.jsx(Text, { color: colors.cyan, children: line.hatch }), jsxRuntimeExports.jsx(Text, { color: colors.brightPurple, children: line.way })] }, index))) }));
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export { Banner as B };
|
|
27
|
-
//# sourceMappingURL=Banner-B4nm86qK.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Banner-B4nm86qK.js","sources":["../../src/cli/tui/components/Banner.tsx"],"sourcesContent":["import { Box, Text } from 'ink';\nimport { colors } from '../theme.js';\n\n/**\n * ASCII art banner component - centered with cyan/purple gradient\n * Each line is padded to exactly the same width for perfect alignment\n */\nexport function Banner() {\n // Full banner lines - HATCH in cyan, WAY in purple\n // All lines padded to same total width for consistent centering\n const lines = [\n { hatch: '██╗ ██╗ █████╗ ████████╗ ██████╗██╗ ██╗', way: '██╗ ██╗ █████╗ ██╗ ██╗' },\n { hatch: '██║ ██║██╔══██╗╚══██╔══╝██╔════╝██║ ██║', way: '██║ ██║██╔══██╗╚██╗ ██╔╝' },\n { hatch: '███████║███████║ ██║ ██║ ███████║', way: '██║ █╗ ██║███████║ ╚████╔╝ ' },\n { hatch: '██╔══██║██╔══██║ ██║ ██║ ██╔══██║', way: '██║███╗██║██╔══██║ ╚██╔╝ ' },\n { hatch: '██║ ██║██║ ██║ ██║ ╚██████╗██║ ██║', way: '╚███╔███╔╝██║ ██║ ██║ ' },\n { hatch: '╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝', way: ' ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ' },\n ];\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n {lines.map((line, index) => (\n <Box key={index}>\n <Text color={colors.cyan}>{line.hatch}</Text>\n <Text color={colors.brightPurple}>{line.way}</Text>\n </Box>\n ))}\n </Box>\n );\n}\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;AAGA;;;AAGG;SACa,MAAM,GAAA;;;AAGpB,IAAA,MAAM,KAAK,GAAG;AACZ,QAAA,EAAE,KAAK,EAAE,2CAA2C,EAAE,GAAG,EAAE,6BAA6B,EAAE;AAC1F,QAAA,EAAE,KAAK,EAAE,2CAA2C,EAAE,GAAG,EAAE,6BAA6B,EAAE;AAC1F,QAAA,EAAE,KAAK,EAAE,2CAA2C,EAAE,GAAG,EAAE,6BAA6B,EAAE;AAC1F,QAAA,EAAE,KAAK,EAAE,2CAA2C,EAAE,GAAG,EAAE,6BAA6B,EAAE;AAC1F,QAAA,EAAE,KAAK,EAAE,2CAA2C,EAAE,GAAG,EAAE,6BAA6B,EAAE;AAC1F,QAAA,EAAE,KAAK,EAAE,2CAA2C,EAAE,GAAG,EAAE,6BAA6B,EAAE;KAC3F;AAED,IAAA,QACEA,qBAAA,CAAC,GAAG,EAAA,EAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,EAAA,QAAA,EAC5C,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MACrBC,sBAAA,CAAC,GAAG,EAAA,EAAA,QAAA,EAAA,CACFD,qBAAA,CAAC,IAAI,EAAA,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAA,QAAA,EAAG,IAAI,CAAC,KAAK,EAAA,CAAQ,EAC7CA,qBAAA,CAAC,IAAI,EAAA,EAAC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,QAAA,EAAG,IAAI,CAAC,GAAG,EAAA,CAAQ,CAAA,EAAA,EAF3C,KAAK,CAGT,CACP,CAAC,EAAA,CACE;AAEV;;;;"}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
// Hatchway CLI - Built with Rollup
|
|
2
|
-
import { r as reactExports, u as useInput, R as React, T as Text } from './theme-NAQBkisB.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-DCC6HGdr.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-DCC6HGdr.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":"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","x_google_ignoreList":[0]}
|