@gachlab/devup 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +52 -0
- package/README.md +23 -3
- package/dist/config/cli.d.ts +1 -0
- package/dist/config/cli.d.ts.map +1 -1
- package/dist/config/types.d.ts +8 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/validator.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +805 -307
- package/dist/index.js.map +1 -1
- package/dist/orchestrator/subcommands.d.ts +20 -0
- package/dist/orchestrator/subcommands.d.ts.map +1 -0
- package/dist/process/manager.d.ts +3 -0
- package/dist/process/manager.d.ts.map +1 -1
- package/dist/tui/App.d.ts +4 -0
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/LogsPanel.d.ts +2 -1
- package/dist/tui/LogsPanel.d.ts.map +1 -1
- package/dist/tui/ServiceList.d.ts.map +1 -1
- package/dist/tui/StatsPanel.d.ts +5 -1
- package/dist/tui/StatsPanel.d.ts.map +1 -1
- package/dist/tui/hooks/useKeyBindings.d.ts +5 -0
- package/dist/tui/hooks/useKeyBindings.d.ts.map +1 -1
- package/dist/tui/hooks/useProcessManager.d.ts +2 -0
- package/dist/tui/hooks/useProcessManager.d.ts.map +1 -1
- package/dist/tui/tips.d.ts +17 -0
- package/dist/tui/tips.d.ts.map +1 -0
- package/dist/utils.d.ts +25 -0
- package/dist/utils.d.ts.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DevStackConfig } from '../config/types.js';
|
|
2
|
+
/** Returns the subcommand name if the first arg is one we recognise, else null. */
|
|
3
|
+
export declare function detectSubcommand(argv: string[]): string | null;
|
|
4
|
+
interface SubOpts {
|
|
5
|
+
config: DevStackConfig;
|
|
6
|
+
baseCwd: string;
|
|
7
|
+
env: Record<string, string>;
|
|
8
|
+
logDir?: string;
|
|
9
|
+
out?: (line: string) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function runLogs(argv: string[], opts: SubOpts): Promise<number>;
|
|
12
|
+
export declare function runInstall(opts: SubOpts & {
|
|
13
|
+
concurrency?: number;
|
|
14
|
+
}): Promise<number>;
|
|
15
|
+
export declare function runStatus(opts: SubOpts): Promise<number>;
|
|
16
|
+
export declare function runHelp(argv: string[], opts?: {
|
|
17
|
+
out?: (l: string) => void;
|
|
18
|
+
}): number;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=subcommands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subcommands.d.ts","sourceRoot":"","sources":["../../src/orchestrator/subcommands.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED,UAAU,OAAO;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAaD,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB5E;AAoCD,wBAAsB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B1F;AAiBD,wBAAsB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAe9D;AAID,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAAG,MAAM,CA4BxF"}
|
|
@@ -3,6 +3,9 @@ import type { ServiceConfig } from '../config/types.js';
|
|
|
3
3
|
import type { ProcessState, ProcessManagerEvents } from './types.js';
|
|
4
4
|
/** Accepts both '/foo/' (vim-style) and bare 'foo'. Case-insensitive by default. */
|
|
5
5
|
export declare function compileReadyPattern(pattern: string | undefined): RegExp | null;
|
|
6
|
+
/** Extracts the value tokens of `--watch` / `--watch-path` / `--watch=X` / `--watch-path=X`
|
|
7
|
+
* from a command's args list. Accepts both `--flag value` and `--flag=value` forms. */
|
|
8
|
+
export declare function extractWatchPaths(args: string[]): string[];
|
|
6
9
|
export declare class ProcessManager {
|
|
7
10
|
readonly state: Map<string, ProcessState>;
|
|
8
11
|
private readonly procs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/process/manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/process/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAQrE,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAS9E;AAED;wFACwF;AACxF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAgB1D;AAoBD,qBAAa,cAAc;IACzB,QAAQ,CAAC,KAAK,4BAAmC;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAElC,IAAI,EAAE;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,QAAQ,EAAE,QAAQ,CAAC;QACnB,MAAM,EAAE,oBAAoB,CAAC;KAC9B;IAOK,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMhE,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgHnF,OAAO,CAAC,WAAW;IA+BnB,OAAO,CAAC,eAAe;IAgBvB,sGAAsG;IACtG,OAAO,CAAC,kBAAkB;IAc1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB,OAAO,CAAC,aAAa;IAOf,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB/B,OAAO,CAAC,IAAI,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCnE,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,GAAG;CAGZ"}
|
package/dist/tui/App.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ import type { DevStackConfig, ServiceConfig } from '../config/types.js';
|
|
|
3
3
|
import type { CliArgs } from '../config/cli.js';
|
|
4
4
|
import type { ProxyConfigProvider, ProxyOpts } from '../proxy-config/types.js';
|
|
5
5
|
import type { LogSink } from '../process/log-sink.js';
|
|
6
|
+
/** Builds the URL to open in the browser when the user picks a service.
|
|
7
|
+
* Honors the proxy + TLS settings: if --proxy is active and the service has
|
|
8
|
+
* a route, opens https://<sub>.<domain>; otherwise falls back to http://localhost:<port>. */
|
|
9
|
+
export declare function buildServiceUrl(name: string, port: number, proxyActive: boolean, proxyOpts: ProxyOpts | null): string;
|
|
6
10
|
interface Props {
|
|
7
11
|
config: DevStackConfig;
|
|
8
12
|
services: ServiceConfig[];
|
package/dist/tui/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAkBtD;;8FAE8F;AAC9F,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,MAAM,CAUR;AAED,UAAU,KAAK;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,KAAK,2CAkOlH"}
|
package/dist/tui/LogsPanel.d.ts
CHANGED
|
@@ -10,7 +10,8 @@ interface Props {
|
|
|
10
10
|
focused: boolean;
|
|
11
11
|
scrollOffset: number;
|
|
12
12
|
resetScroll: () => void;
|
|
13
|
+
levelFilter?: 'all' | 'error' | 'warn';
|
|
13
14
|
}
|
|
14
|
-
export declare function LogsPanel({ logs, filter, searchTerm, paused, showTimestamps, maxNameLen, height, focused, scrollOffset, resetScroll }: Props): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare function LogsPanel({ logs, filter, searchTerm, paused, showTimestamps, maxNameLen, height, focused, scrollOffset, resetScroll, levelFilter }: Props): import("react/jsx-runtime").JSX.Element;
|
|
15
16
|
export {};
|
|
16
17
|
//# sourceMappingURL=LogsPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogsPanel.d.ts","sourceRoot":"","sources":["../../src/tui/LogsPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAG7D,UAAU,KAAK;IACb,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"LogsPanel.d.ts","sourceRoot":"","sources":["../../src/tui/LogsPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAG7D,UAAU,KAAK;IACb,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;CACxC;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAmB,EAAE,EAAE,KAAK,2CA0DjK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceList.d.ts","sourceRoot":"","sources":["../../src/tui/ServiceList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CAC5B;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"ServiceList.d.ts","sourceRoot":"","sources":["../../src/tui/ServiceList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CAC5B;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,2CAmDpF"}
|
package/dist/tui/StatsPanel.d.ts
CHANGED
|
@@ -9,7 +9,11 @@ interface Props {
|
|
|
9
9
|
focused: boolean;
|
|
10
10
|
scrollOffset: number;
|
|
11
11
|
resetScroll: () => void;
|
|
12
|
+
verbose?: boolean;
|
|
12
13
|
}
|
|
13
|
-
|
|
14
|
+
/** Matches the constant in ProcessManager — kept in sync manually. */
|
|
15
|
+
export declare const MAX_RESTARTS = 3;
|
|
16
|
+
export declare function isCrashLooped(st: ProcessState): boolean;
|
|
17
|
+
export declare function StatsPanel({ states, stats, sortMode, maxNameLen, height, focused, scrollOffset, resetScroll, verbose }: Props): import("react/jsx-runtime").JSX.Element;
|
|
14
18
|
export {};
|
|
15
19
|
//# sourceMappingURL=StatsPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatsPanel.d.ts","sourceRoot":"","sources":["../../src/tui/StatsPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAIjE,UAAU,KAAK;IACb,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"StatsPanel.d.ts","sourceRoot":"","sources":["../../src/tui/StatsPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAIjE,UAAU,KAAK;IACb,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAOD,sEAAsE;AACtE,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAEvD;AAuCD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAe,EAAE,EAAE,KAAK,2CA8GrI"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export type Modal = 'none' | 'filter' | 'restart' | 'open' | 'search';
|
|
2
2
|
export type Panel = 'logs' | 'stats';
|
|
3
|
+
export type LevelFilter = 'all' | 'error' | 'warn';
|
|
3
4
|
export interface KeyState {
|
|
4
5
|
panel: Panel;
|
|
5
6
|
modal: Modal;
|
|
@@ -11,6 +12,8 @@ export interface KeyState {
|
|
|
11
12
|
proxyEnabled: boolean;
|
|
12
13
|
logsScrollOffset: number;
|
|
13
14
|
statsScrollOffset: number;
|
|
15
|
+
levelFilter: LevelFilter;
|
|
16
|
+
verboseStats: boolean;
|
|
14
17
|
}
|
|
15
18
|
export declare function useKeyBindings(opts: {
|
|
16
19
|
onQuit: () => void;
|
|
@@ -33,5 +36,7 @@ export declare function useKeyBindings(opts: {
|
|
|
33
36
|
proxyEnabled: boolean;
|
|
34
37
|
logsScrollOffset: number;
|
|
35
38
|
statsScrollOffset: number;
|
|
39
|
+
levelFilter: LevelFilter;
|
|
40
|
+
verboseStats: boolean;
|
|
36
41
|
};
|
|
37
42
|
//# sourceMappingURL=useKeyBindings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useKeyBindings.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useKeyBindings.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AACtE,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAErC,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"useKeyBindings.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useKeyBindings.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AACtE,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;CACvB;AA4BD,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;sBASsC,KAAK;mBACR,MAAM,GAAG,IAAI;mBACb,MAAM,GAAG,IAAI;;;;WAvDxC,KAAK;WACL,KAAK;eACD,MAAM,GAAG,IAAI;gBACZ,MAAM,GAAG,IAAI;gBACb,OAAO;oBACH,OAAO;aACd,MAAM;kBACD,OAAO;sBACH,MAAM;uBACL,MAAM;iBACZ,WAAW;kBACV,OAAO;EAuFtB"}
|
|
@@ -2,12 +2,14 @@ import { ProcessManager } from '../../process/manager.js';
|
|
|
2
2
|
import type { ProcessState } from '../../process/types.js';
|
|
3
3
|
import type { Platform } from '../../platform/types.js';
|
|
4
4
|
import type { ServiceConfig } from '../../config/types.js';
|
|
5
|
+
import { type LogLevel } from '../../utils.js';
|
|
5
6
|
import { LogSink } from '../../process/log-sink.js';
|
|
6
7
|
export interface LogEntry {
|
|
7
8
|
svcName: string;
|
|
8
9
|
text: string;
|
|
9
10
|
colorIdx: number;
|
|
10
11
|
ts: number;
|
|
12
|
+
level: LogLevel;
|
|
11
13
|
}
|
|
12
14
|
export interface ServiceStats {
|
|
13
15
|
cpu: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProcessManager.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useProcessManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"useProcessManager.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useProcessManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAkC,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,GAAE,OAAO,GAAG,IAAW;;;;iBAuGH,aAAa,YAAY,MAAM;iBAC/B,MAAM;oBACH,MAAM;mBACP,aAAa,YAAY,MAAM;;;wBAjBrB,OAAO;uBAhBR,MAAM,QAAQ,MAAM;;EAwC3D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Contextual tips for new users. Pure function — easy to test, easy to extend. */
|
|
2
|
+
export interface TipState {
|
|
3
|
+
totalLogs: number;
|
|
4
|
+
hasSearch: boolean;
|
|
5
|
+
hasFilter: boolean;
|
|
6
|
+
crashLoopedCount: number;
|
|
7
|
+
/** IDs of tips already shown this session — they don't repeat. */
|
|
8
|
+
shown: Set<string>;
|
|
9
|
+
}
|
|
10
|
+
export interface Tip {
|
|
11
|
+
id: string;
|
|
12
|
+
message: string;
|
|
13
|
+
}
|
|
14
|
+
/** Picks the highest-priority unseen tip whose conditions are met,
|
|
15
|
+
* or null if no tip applies right now. */
|
|
16
|
+
export declare function pickTip(state: TipState): Tip | null;
|
|
17
|
+
//# sourceMappingURL=tips.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tips.d.ts","sourceRoot":"","sources":["../../src/tui/tips.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;2CAC2C;AAC3C,wBAAgB,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,CAYnD"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
import type { ServiceConfig } from './config/types.js';
|
|
2
2
|
export declare function parseEnvFile(filePath: string, baseEnv?: Record<string, string>): Record<string, string>;
|
|
3
|
+
/** Hysteresis state machine for the "RAM pressure" banner.
|
|
4
|
+
* Returns the next visibility given the current sample and previous visibility.
|
|
5
|
+
* - turns on when usagePct > highWatermark
|
|
6
|
+
* - turns off when usagePct < lowWatermark
|
|
7
|
+
* - stays as-is in the dead band between watermarks */
|
|
8
|
+
export declare function nextRamBannerVisibility(usagePct: number, previousVisible: boolean, highWatermark?: number, lowWatermark?: number): boolean;
|
|
9
|
+
/** Returns the env record with values redacted to *** for keys that look
|
|
10
|
+
* secret-ish (token / password / secret / key / auth). Case-insensitive. */
|
|
11
|
+
export declare function redactSecrets(env: Record<string, string> | undefined): Record<string, string>;
|
|
12
|
+
export type LogLevel = 'error' | 'warn' | 'info';
|
|
13
|
+
/** Detects the level of a log line by case-insensitive keyword priority:
|
|
14
|
+
* error (and synonyms) > warn > info. Used by the L-level filter. */
|
|
15
|
+
export declare function detectLogLevel(line: string): LogLevel;
|
|
16
|
+
export interface SearchMatcher {
|
|
17
|
+
test: (line: string) => boolean;
|
|
18
|
+
/** Set when the input was a vim-style /pattern/flags — used to drive highlighting. */
|
|
19
|
+
regex?: RegExp;
|
|
20
|
+
/** True when input started with `/` but produced an invalid regex; UI may show a hint. */
|
|
21
|
+
invalid?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** Compiles a search term to a matcher.
|
|
24
|
+
* - `/foo/` → regex (case-insensitive by default; honors flags after the closing slash)
|
|
25
|
+
* - anything else → case-insensitive substring (existing behavior)
|
|
26
|
+
* - invalid regex → falls back to substring, sets `invalid: true` */
|
|
27
|
+
export declare function compileSearchPattern(term: string | null): SearchMatcher | null;
|
|
3
28
|
export declare function fmtUptime(ms: number): string;
|
|
4
29
|
export declare function needsInstall(fullCwd: string): boolean;
|
|
5
30
|
export declare function writeInstallStamp(fullCwd: string): void;
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiB3G;AAID,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAU5C;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASrD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKvD;AAID,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACxD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7C,MAAM,EAAE,CAQV;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAMvF;AAID,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,EAAE,CAK7D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU3G;AAID,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI7F;AAID,eAAO,MAAM,SAAS,UAIrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiB3G;AAID;;;;wDAIwD;AACxD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,OAAO,EACxB,aAAa,SAAK,EAClB,YAAY,SAAK,GAChB,OAAO,CAIT;AAID;6EAC6E;AAC7E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO7F;AAID,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjD;sEACsE;AACtE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAMrD;AAID,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAChC,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;sEAGsE;AACtE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,GAAG,IAAI,CAe9E;AAID,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAU5C;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASrD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKvD;AAID,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACxD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7C,MAAM,EAAE,CAQV;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAMvF;AAID,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,EAAE,CAK7D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU3G;AAID,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI7F;AAID,eAAO,MAAM,SAAS,UAIrB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gachlab/devup",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Dev stack runner with TUI, lazy proxy, and reverse proxy support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"bin": {
|
|
9
|
-
"devup": "
|
|
9
|
+
"devup": "dist/index.js"
|
|
10
10
|
},
|
|
11
11
|
"exports": {
|
|
12
12
|
".": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"license": "MIT",
|
|
37
37
|
"repository": {
|
|
38
38
|
"type": "git",
|
|
39
|
-
"url": "https://github.com/gachlab/devup.git"
|
|
39
|
+
"url": "git+https://github.com/gachlab/devup.git"
|
|
40
40
|
},
|
|
41
41
|
"homepage": "https://github.com/gachlab/devup#readme",
|
|
42
42
|
"bugs": {
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"scripts": {
|
|
46
46
|
"build": "tsup && tsc --emitDeclarationOnly",
|
|
47
47
|
"dev": "tsup --watch",
|
|
48
|
+
"prepack": "npm pkg fix",
|
|
48
49
|
"prepublishOnly": "npm run build",
|
|
49
50
|
"test": "node --import tsx --test \"tests/**/*.test.ts\" \"tests/**/*.test.tsx\"",
|
|
50
51
|
"test:unit": "node --import tsx --test --experimental-test-coverage \"tests/unit/**/*.test.ts\" \"tests/unit/**/*.test.tsx\"",
|
|
@@ -75,4 +76,4 @@
|
|
|
75
76
|
"access": "public",
|
|
76
77
|
"registry": "https://registry.npmjs.org/"
|
|
77
78
|
}
|
|
78
|
-
}
|
|
79
|
+
}
|