@hoox-sh/hoox-shared 1.2.1 → 1.3.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/dist/index.d.ts CHANGED
@@ -55,8 +55,8 @@ export { restoreSession, saveSession } from "./session";
55
55
  export type { SessionState } from "./session";
56
56
  export { formatRelativeTime as formatRelativeTimeFromTime } from "./format-time";
57
57
  export type { ViewId, ModalState, WorkerStatus, WorkerInfo, TradeSide, Trade, AlertSeverity, Alert, LogLevel, LogEntry, SystemMetrics, ConnectionStatus, LogFilter, NotificationPreferences, CliErrorType, CliErrorDetails, } from "./types";
58
- export { getHooxHome, resolveHooxPath, isWithinHooxHome, getRelativeHooxPath, getHooxRepoPath, getHooxConfigDir, getHooxDataDir, getHooxWranglerPath, getHooxStatePath, isHooxSetupRoot, findHooxSetupRoot, resolveHooxRuntimeRoot, getTuiEntryCandidates, } from "./path-utils";
59
- export type { HooxPath, RuntimeRootSource, RuntimeRootResult, } from "./path-utils";
58
+ export { getHooxHome, resolveHooxPath, isWithinHooxHome, getRelativeHooxPath, getHooxRepoPath, getHooxConfigDir, getHooxDataDir, getHooxWranglerPath, getHooxStatePath, isHooxSetupRoot, findHooxSetupRoot, resolveHooxRuntimeRoot, getTuiEntryCandidates, getRememberedMonorepoPath, getRememberedMonorepoRoot, rememberMonorepoRoot, } from "./path-utils";
59
+ export type { HooxPath, RuntimeRootSource, RuntimeRootResult, RememberedMonorepo, } from "./path-utils";
60
60
  export { DASHBOARD_WORKER_PREFIX, DASHBOARD_SECTION_PREFIX, DASHBOARD_FIELD_KV_OVERRIDES, DASHBOARD_SECTIONS_NOT_FLAT_KV, DASHBOARD_SECTIONS_UI_SKIP, DASHBOARD_WORKER_IDS, buildDashboardKvKey, isDashboardSectionFlatKv, isDashboardSectionEditable, stripJsonc, parseDashboardManifest, dashboardWorkerDir, kvManifestFromDashboardManifests, loadDashboardKvManifestFromRoot, loadDashboardManifestsFromRoot, } from "./dashboard-manifest";
61
61
  export type { DashboardFieldType, DashboardFieldKind, DashboardFieldOption, DashboardSettingField, DashboardSection, WorkerDashboardManifest, DashboardWorkerId, DashboardKvManifestKey, DashboardKvManifest, } from "./dashboard-manifest";
62
62
  export { AGENT_CONFIG_KV_KEY, AGENT_CONFIG_EMBEDDED_FIELDS, DASHBOARD_SECTIONS_AGENT_CONFIG, isAgentConfigEmbeddedField, isAgentConfigSection, parseAgentConfigJson, serializeAgentConfigForKv, getAgentConfigEmbeddedValue, setAgentConfigEmbeddedValue, expandAgentConfigToFieldMap, applyAgentConfigFieldUpdates, } from "./agent-config-fields";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2236,7 +2236,13 @@ function createMockEnv(overrides) {
2236
2236
  }
2237
2237
 
2238
2238
  // src/path-utils.ts
2239
- import { existsSync as existsSync3 } from "fs";
2239
+ import {
2240
+ existsSync as existsSync3,
2241
+ mkdirSync as mkdirSync2,
2242
+ readFileSync as readFileSync3,
2243
+ writeFileSync as writeFileSync2,
2244
+ chmodSync as chmodSync2
2245
+ } from "fs";
2240
2246
  import { homedir as homedir2 } from "os";
2241
2247
  import { dirname, join as join3, resolve } from "path";
2242
2248
  function createHooxPath(path) {
@@ -2262,7 +2268,55 @@ function isHooxSetupRoot(dir) {
2262
2268
  return false;
2263
2269
  try {
2264
2270
  const root = resolve(dir);
2265
- return existsSync3(join3(root, "wrangler.jsonc")) && existsSync3(join3(root, "packages", "cli", "package.json"));
2271
+ if (!existsSync3(join3(root, "packages", "cli", "package.json"))) {
2272
+ return false;
2273
+ }
2274
+ return existsSync3(join3(root, "wrangler.jsonc")) || existsSync3(join3(root, "wrangler.jsonc.example")) || existsSync3(join3(root, "workers")) || existsSync3(join3(root, ".gitmodules"));
2275
+ } catch {
2276
+ return false;
2277
+ }
2278
+ }
2279
+ function getRememberedMonorepoPath() {
2280
+ return resolveHooxPath("config/monorepo.json");
2281
+ }
2282
+ function getRememberedMonorepoRoot() {
2283
+ try {
2284
+ const path = getRememberedMonorepoPath();
2285
+ if (!existsSync3(path))
2286
+ return null;
2287
+ const raw = readFileSync3(path, "utf-8");
2288
+ const data = JSON.parse(raw);
2289
+ if (!data.root || typeof data.root !== "string")
2290
+ return null;
2291
+ const resolved = resolve(data.root);
2292
+ return isHooxSetupRoot(resolved) ? resolved : null;
2293
+ } catch {
2294
+ return null;
2295
+ }
2296
+ }
2297
+ function rememberMonorepoRoot(root) {
2298
+ try {
2299
+ const resolved = resolve(root);
2300
+ if (!isHooxSetupRoot(resolved))
2301
+ return false;
2302
+ const configDir = getHooxConfigDir();
2303
+ mkdirSync2(configDir, { recursive: true, mode: 448 });
2304
+ try {
2305
+ chmodSync2(configDir, 448);
2306
+ } catch {}
2307
+ const payload = {
2308
+ root: resolved,
2309
+ updatedAt: new Date().toISOString()
2310
+ };
2311
+ const path = getRememberedMonorepoPath();
2312
+ writeFileSync2(path, JSON.stringify(payload, null, 2) + `
2313
+ `, {
2314
+ mode: 384
2315
+ });
2316
+ try {
2317
+ chmodSync2(path, 384);
2318
+ } catch {}
2319
+ return true;
2266
2320
  } catch {
2267
2321
  return false;
2268
2322
  }
@@ -2282,6 +2336,7 @@ function resolveHooxRuntimeRoot(options) {
2282
2336
  const env = options?.env ?? process.env;
2283
2337
  const cwd = resolve(options?.cwd ?? process.cwd());
2284
2338
  const globalRepo = getHooxRepoPath();
2339
+ const remembered = options?.skipRemembered ? null : getRememberedMonorepoRoot();
2285
2340
  const envRepo = env.HOOX_REPO?.trim();
2286
2341
  if (envRepo) {
2287
2342
  const resolved = resolve(envRepo);
@@ -2292,6 +2347,7 @@ function resolveHooxRuntimeRoot(options) {
2292
2347
  checked: {
2293
2348
  env: resolved,
2294
2349
  cwd: findHooxSetupRoot(cwd),
2350
+ remembered,
2295
2351
  global: globalRepo
2296
2352
  }
2297
2353
  };
@@ -2302,6 +2358,7 @@ function resolveHooxRuntimeRoot(options) {
2302
2358
  checked: {
2303
2359
  env: resolved,
2304
2360
  cwd: findHooxSetupRoot(cwd),
2361
+ remembered,
2305
2362
  global: globalRepo
2306
2363
  }
2307
2364
  };
@@ -2311,20 +2368,27 @@ function resolveHooxRuntimeRoot(options) {
2311
2368
  return {
2312
2369
  root: local,
2313
2370
  source: "cwd",
2314
- checked: { cwd: local, global: globalRepo }
2371
+ checked: { cwd: local, remembered, global: globalRepo }
2372
+ };
2373
+ }
2374
+ if (remembered) {
2375
+ return {
2376
+ root: remembered,
2377
+ source: "remembered",
2378
+ checked: { cwd: null, remembered, global: globalRepo }
2315
2379
  };
2316
2380
  }
2317
2381
  if (isHooxSetupRoot(globalRepo)) {
2318
2382
  return {
2319
2383
  root: globalRepo,
2320
2384
  source: "global",
2321
- checked: { cwd: null, global: globalRepo }
2385
+ checked: { cwd: null, remembered: null, global: globalRepo }
2322
2386
  };
2323
2387
  }
2324
2388
  return {
2325
2389
  root: null,
2326
2390
  source: "none",
2327
- checked: { cwd: null, global: globalRepo }
2391
+ checked: { cwd: null, remembered: null, global: globalRepo }
2328
2392
  };
2329
2393
  }
2330
2394
  function getTuiEntryCandidates(runtimeRoot) {
@@ -3677,7 +3741,8 @@ var initialState = {
3677
3741
  sidebarExpanded: true,
3678
3742
  modal: null,
3679
3743
  commandPaletteOpen: false,
3680
- previousView: null
3744
+ previousView: null,
3745
+ statusErrorExpanded: false
3681
3746
  };
3682
3747
  var useUIStore = create()(immer((set) => ({
3683
3748
  ...initialState,
@@ -3708,6 +3773,12 @@ var useUIStore = create()(immer((set) => ({
3708
3773
  state.activeView = state.previousView;
3709
3774
  state.previousView = null;
3710
3775
  }
3776
+ }),
3777
+ toggleStatusErrorExpanded: () => set((state) => {
3778
+ state.statusErrorExpanded = !state.statusErrorExpanded;
3779
+ }),
3780
+ setStatusErrorExpanded: (expanded) => set((state) => {
3781
+ state.statusErrorExpanded = expanded;
3711
3782
  })
3712
3783
  })));
3713
3784
 
@@ -3730,6 +3801,23 @@ function ringPush(arr, item, max) {
3730
3801
  var tradeStreamAbort = null;
3731
3802
  var logStreamAbort = null;
3732
3803
  var fetchWorkersGeneration = 0;
3804
+ var reconnectTimer = null;
3805
+ function clearReconnectTimer() {
3806
+ if (reconnectTimer !== null) {
3807
+ clearTimeout(reconnectTimer);
3808
+ reconnectTimer = null;
3809
+ }
3810
+ }
3811
+ function scheduleReconnect(delayMs) {
3812
+ clearReconnectTimer();
3813
+ if (delayMs < 0)
3814
+ return;
3815
+ reconnectTimer = setTimeout(() => {
3816
+ reconnectTimer = null;
3817
+ scheduledReconnectTick();
3818
+ }, delayMs);
3819
+ }
3820
+ var scheduledReconnectTick = async () => {};
3733
3821
  var MAX_TRADES = 500;
3734
3822
  var MAX_ALERTS = 100;
3735
3823
  var MAX_LOGS = 1000;
@@ -3764,6 +3852,7 @@ var useServiceStore = create2()(immer2((set, get) => ({
3764
3852
  const data = await hooxFetch2("/v1/workers");
3765
3853
  if (gen !== fetchWorkersGeneration)
3766
3854
  return;
3855
+ clearReconnectTimer();
3767
3856
  set((state) => {
3768
3857
  state.workers = data;
3769
3858
  state.lastUpdated = Date.now();
@@ -3789,6 +3878,7 @@ var useServiceStore = create2()(immer2((set, get) => ({
3789
3878
  timestamp: Date.now(),
3790
3879
  acknowledged: false
3791
3880
  });
3881
+ let nextDelay = 0;
3792
3882
  set((state) => {
3793
3883
  state.lastError = msg;
3794
3884
  state.disconnectedAt = state.disconnectedAt ?? Date.now();
@@ -3797,21 +3887,26 @@ var useServiceStore = create2()(immer2((set, get) => ({
3797
3887
  state.retryCount = state.retryCount + 1;
3798
3888
  if (state.retryCount >= MAX_RETRIES2) {
3799
3889
  state.connectionStatus = "offline";
3800
- state.lastError = `Connection lost after ${MAX_RETRIES2} retries`;
3890
+ state.lastError = `${msg} (gave up after ${MAX_RETRIES2} retries)`;
3891
+ state.reconnectDelay = 0;
3801
3892
  } else {
3802
3893
  state.reconnectDelay = getBackoffDelay(state.retryCount);
3894
+ nextDelay = state.reconnectDelay;
3803
3895
  }
3804
3896
  } else if (state.connectionStatus === "reconnecting") {
3805
3897
  state.retryCount = state.retryCount + 1;
3806
3898
  if (state.retryCount >= MAX_RETRIES2) {
3807
3899
  state.connectionStatus = "offline";
3808
- state.lastError = `Connection lost after ${MAX_RETRIES2} retries`;
3900
+ state.lastError = `${msg} (gave up after ${MAX_RETRIES2} retries)`;
3809
3901
  state.reconnectDelay = 0;
3810
3902
  } else {
3811
3903
  state.reconnectDelay = getBackoffDelay(state.retryCount);
3904
+ nextDelay = state.reconnectDelay;
3812
3905
  }
3813
3906
  }
3814
3907
  });
3908
+ if (nextDelay > 0)
3909
+ scheduleReconnect(nextDelay);
3815
3910
  }
3816
3911
  },
3817
3912
  streamTrades: async () => {
@@ -3873,6 +3968,17 @@ var useServiceStore = create2()(immer2((set, get) => ({
3873
3968
  const merged = [...state.alerts, ...alerts];
3874
3969
  state.alerts = merged.length > MAX_ALERTS ? merged.slice(merged.length - MAX_ALERTS) : merged;
3875
3970
  }),
3971
+ acknowledgeAlert: (id) => set((state) => {
3972
+ const hit = state.alerts.find((a) => a.id === id);
3973
+ if (hit)
3974
+ hit.acknowledged = true;
3975
+ }),
3976
+ dismissAlert: (id) => set((state) => {
3977
+ state.alerts = state.alerts.filter((a) => a.id !== id);
3978
+ }),
3979
+ clearLogs: () => set((state) => {
3980
+ state.logs = [];
3981
+ }),
3876
3982
  setConnectionStatus: (status) => set((state) => {
3877
3983
  if (status === "connected") {
3878
3984
  state.retryCount = 0;
@@ -3903,49 +4009,69 @@ var useServiceStore = create2()(immer2((set, get) => ({
3903
4009
  state.metrics = metrics;
3904
4010
  state.lastUpdated = metrics.lastUpdated;
3905
4011
  }),
3906
- handleConnectionSuccess: () => set((state) => {
3907
- state.lastSuccessfulFetch = Date.now();
3908
- state.retryCount = 0;
3909
- state.lastError = null;
3910
- state.lastErrorDetails = null;
3911
- state.reconnectDelay = 0;
3912
- state.disconnectedAt = null;
3913
- state.connectionStatus = "connected";
3914
- }),
3915
- handleConnectionFailure: (errorMessage) => set((state) => {
3916
- state.lastError = errorMessage;
3917
- state.disconnectedAt = state.disconnectedAt ?? Date.now();
3918
- if (state.connectionStatus === "connected" || state.connectionStatus === "polling") {
3919
- state.connectionStatus = "reconnecting";
3920
- state.retryCount = 1;
3921
- state.reconnectDelay = getBackoffDelay(1);
3922
- } else if (state.connectionStatus === "reconnecting") {
3923
- state.retryCount = state.retryCount + 1;
3924
- if (state.retryCount >= MAX_RETRIES2) {
3925
- state.connectionStatus = "offline";
3926
- state.lastError = `Connection lost after ${MAX_RETRIES2} retries`;
3927
- state.reconnectDelay = 0;
3928
- } else {
3929
- state.reconnectDelay = getBackoffDelay(state.retryCount);
4012
+ handleConnectionSuccess: () => {
4013
+ clearReconnectTimer();
4014
+ set((state) => {
4015
+ state.lastSuccessfulFetch = Date.now();
4016
+ state.retryCount = 0;
4017
+ state.lastError = null;
4018
+ state.lastErrorDetails = null;
4019
+ state.reconnectDelay = 0;
4020
+ state.disconnectedAt = null;
4021
+ state.connectionStatus = "connected";
4022
+ });
4023
+ },
4024
+ handleConnectionFailure: (errorMessage) => {
4025
+ let nextDelay = 0;
4026
+ set((state) => {
4027
+ state.lastError = errorMessage;
4028
+ state.disconnectedAt = state.disconnectedAt ?? Date.now();
4029
+ if (state.connectionStatus === "connected" || state.connectionStatus === "polling") {
4030
+ state.connectionStatus = "reconnecting";
4031
+ state.retryCount = 1;
4032
+ state.reconnectDelay = getBackoffDelay(1);
4033
+ nextDelay = state.reconnectDelay;
4034
+ } else if (state.connectionStatus === "reconnecting") {
4035
+ state.retryCount = state.retryCount + 1;
4036
+ if (state.retryCount >= MAX_RETRIES2) {
4037
+ state.connectionStatus = "offline";
4038
+ state.lastError = `${errorMessage} (gave up after ${MAX_RETRIES2} retries)`;
4039
+ state.reconnectDelay = 0;
4040
+ } else {
4041
+ state.reconnectDelay = getBackoffDelay(state.retryCount);
4042
+ nextDelay = state.reconnectDelay;
4043
+ }
3930
4044
  }
3931
- }
3932
- }),
3933
- resetRetries: () => set((state) => {
3934
- state.retryCount = 0;
3935
- state.lastError = null;
3936
- state.lastErrorDetails = null;
3937
- state.reconnectDelay = 0;
3938
- state.disconnectedAt = null;
3939
- }),
3940
- forceRetry: () => set((state) => {
3941
- if (state.connectionStatus === "offline") {
3942
- state.connectionStatus = "polling";
4045
+ });
4046
+ if (nextDelay > 0)
4047
+ scheduleReconnect(nextDelay);
4048
+ },
4049
+ resetRetries: () => {
4050
+ clearReconnectTimer();
4051
+ set((state) => {
3943
4052
  state.retryCount = 0;
3944
4053
  state.lastError = null;
3945
4054
  state.lastErrorDetails = null;
3946
4055
  state.reconnectDelay = 0;
4056
+ state.disconnectedAt = null;
4057
+ });
4058
+ },
4059
+ forceRetry: () => {
4060
+ clearReconnectTimer();
4061
+ const wasOffline = get().connectionStatus === "offline";
4062
+ set((state) => {
4063
+ if (state.connectionStatus === "offline") {
4064
+ state.connectionStatus = "polling";
4065
+ state.retryCount = 0;
4066
+ state.lastError = null;
4067
+ state.lastErrorDetails = null;
4068
+ state.reconnectDelay = 0;
4069
+ }
4070
+ });
4071
+ if (wasOffline) {
4072
+ scheduleReconnect(0);
3947
4073
  }
3948
- }),
4074
+ },
3949
4075
  setLastErrorDetails: (details) => set((state) => {
3950
4076
  state.lastErrorDetails = details;
3951
4077
  state.lastError = details === null ? null : summarizeCliError(details);
@@ -3968,38 +4094,73 @@ var useServiceStore = create2()(immer2((set, get) => ({
3968
4094
  }, MAX_ALERTS);
3969
4095
  })
3970
4096
  })));
4097
+ scheduledReconnectTick = async () => {
4098
+ const status = useServiceStore.getState().connectionStatus;
4099
+ if (status === "reconnecting" || status === "polling") {
4100
+ await useServiceStore.getState().fetchWorkers();
4101
+ }
4102
+ };
3971
4103
 
3972
4104
  // src/stores/config-store.ts
3973
4105
  import { create as create3 } from "zustand";
3974
4106
  import { immer as immer3 } from "zustand/middleware/immer";
3975
4107
  import { persist, createJSONStorage } from "zustand/middleware";
3976
- import { chmodSync as chmodSync2, mkdirSync as mkdirSync2, existsSync as existsSync4 } from "fs";
3977
- import { homedir as homedir3 } from "os";
4108
+ import { chmodSync as chmodSync3, mkdirSync as mkdirSync3, existsSync as existsSync4, readFileSync as readFileSync4 } from "fs";
3978
4109
  import { join as join4 } from "path";
4110
+ function getTuiPreferencesPath() {
4111
+ return join4(getHooxHome(), ".tui-state", "preferences.json");
4112
+ }
4113
+ function getLegacyConfigJsonPath() {
4114
+ return join4(getHooxHome(), "config.json");
4115
+ }
4116
+ function extractZustandPrefsPayload(raw) {
4117
+ try {
4118
+ const parsed = JSON.parse(raw);
4119
+ if (parsed && typeof parsed === "object" && parsed.state && typeof parsed.state === "object" && !Array.isArray(parsed.state) && (("theme" in parsed.state) || ("refreshIntervalMs" in parsed.state)) && !("apiToken" in parsed)) {
4120
+ return raw;
4121
+ }
4122
+ } catch {}
4123
+ return null;
4124
+ }
3979
4125
  var bunConfigStorage = {
3980
4126
  getItem: async (_name) => {
3981
4127
  try {
3982
- const file = Bun.file(join4(homedir3(), ".hoox", "config.json"));
3983
- const exists = await file.exists();
3984
- if (!exists)
3985
- return null;
3986
- return await file.text();
4128
+ const prefsPath = getTuiPreferencesPath();
4129
+ const prefsFile = Bun.file(prefsPath);
4130
+ if (await prefsFile.exists()) {
4131
+ return await prefsFile.text();
4132
+ }
4133
+ const legacyPath = getLegacyConfigJsonPath();
4134
+ if (existsSync4(legacyPath)) {
4135
+ const legacyRaw = readFileSync4(legacyPath, "utf-8");
4136
+ const envelope = extractZustandPrefsPayload(legacyRaw);
4137
+ if (envelope) {
4138
+ await bunConfigStorage.setItem(_name, envelope);
4139
+ return envelope;
4140
+ }
4141
+ }
4142
+ return null;
3987
4143
  } catch {
3988
4144
  return null;
3989
4145
  }
3990
4146
  },
3991
4147
  setItem: async (_name, value) => {
3992
- const dir = join4(homedir3(), ".hoox");
3993
- if (!existsSync4(dir)) {
3994
- mkdirSync2(dir, { recursive: true, mode: HOOX_DIR_MODE });
4148
+ const home = getHooxHome();
4149
+ const stateDir = join4(home, ".tui-state");
4150
+ if (!existsSync4(home)) {
4151
+ mkdirSync3(home, { recursive: true, mode: HOOX_DIR_MODE });
4152
+ }
4153
+ if (!existsSync4(stateDir)) {
4154
+ mkdirSync3(stateDir, { recursive: true, mode: HOOX_DIR_MODE });
3995
4155
  }
3996
4156
  try {
3997
- chmodSync2(dir, HOOX_DIR_MODE);
4157
+ chmodSync3(home, HOOX_DIR_MODE);
4158
+ chmodSync3(stateDir, HOOX_DIR_MODE);
3998
4159
  } catch {}
3999
- const filePath = join4(dir, "config.json");
4160
+ const filePath = getTuiPreferencesPath();
4000
4161
  await Bun.write(filePath, value);
4001
4162
  try {
4002
- chmodSync2(filePath, HOOX_CONFIG_FILE_MODE);
4163
+ chmodSync3(filePath, HOOX_CONFIG_FILE_MODE);
4003
4164
  } catch {}
4004
4165
  },
4005
4166
  removeItem: async (_name) => {}
@@ -4071,7 +4232,7 @@ var useConfigStore = create3()(persist(immer3((set) => ({
4071
4232
  state.notifications[channel] = !state.notifications[channel];
4072
4233
  })
4073
4234
  })), {
4074
- name: "hoox-config",
4235
+ name: "hoox-tui-prefs",
4075
4236
  storage: createJSONStorage(() => bunConfigStorage),
4076
4237
  partialize: (state) => ({
4077
4238
  theme: state.theme,
@@ -4120,6 +4281,7 @@ export {
4120
4281
  resolveHooxRuntimeRoot,
4121
4282
  resolveHooxPath,
4122
4283
  resolveDependencies,
4284
+ rememberMonorepoRoot,
4123
4285
  readConfigSync,
4124
4286
  readConfig,
4125
4287
  parseDashboardManifest,
@@ -4144,6 +4306,8 @@ export {
4144
4306
  headersToObject,
4145
4307
  hasOperatorClientCredentials,
4146
4308
  getTuiEntryCandidates,
4309
+ getRememberedMonorepoRoot,
4310
+ getRememberedMonorepoPath,
4147
4311
  getRelativeHooxPath,
4148
4312
  getHooxWranglerPath,
4149
4313
  getHooxStatePath,
@@ -10,7 +10,7 @@ export type HooxPath = string & {
10
10
  readonly __brand: "HooxPath";
11
11
  };
12
12
  /** Where resolveHooxRuntimeRoot found (or failed to find) a setup monorepo. */
13
- export type RuntimeRootSource = "env" | "cwd" | "global" | "none";
13
+ export type RuntimeRootSource = "env" | "cwd" | "remembered" | "global" | "none";
14
14
  /** Result of resolveHooxRuntimeRoot(). */
15
15
  export interface RuntimeRootResult {
16
16
  /** Absolute monorepo root, or null if none found. */
@@ -21,9 +21,17 @@ export interface RuntimeRootResult {
21
21
  checked: {
22
22
  env?: string;
23
23
  cwd: string | null;
24
+ remembered?: string | null;
24
25
  global: string;
25
26
  };
26
27
  }
28
+ /** Persisted monorepo pointer written when the CLI discovers a checkout. */
29
+ export interface RememberedMonorepo {
30
+ /** Absolute path to monorepo root. */
31
+ root: string;
32
+ /** ISO timestamp of last successful remember. */
33
+ updatedAt: string;
34
+ }
27
35
  /**
28
36
  * Gets the Hoox home directory location: $HOME/.hoox
29
37
  *
@@ -48,9 +56,29 @@ export declare function getHooxHome(): HooxPath;
48
56
  /**
49
57
  * True when `dir` looks like a hoox monorepo root.
50
58
  *
51
- * Markers match CLI verifyRepoRoot: root wrangler.jsonc + packages/cli package.
59
+ * Aligns with CLI `verifyRepoRoot`:
60
+ * - Required: `packages/cli/package.json`
61
+ * - Plus one of: `wrangler.jsonc`, `wrangler.jsonc.example`, `workers/`, `.gitmodules`
62
+ *
63
+ * (`wrangler.jsonc` is gitignored and created by init — fresh clones only
64
+ * ship `wrangler.jsonc.example`.)
52
65
  */
53
66
  export declare function isHooxSetupRoot(dir: string): boolean;
67
+ /**
68
+ * Path to the remembered monorepo pointer file.
69
+ * `$HOOX_HOME/config/monorepo.json` (default `~/.hoox/config/monorepo.json`).
70
+ */
71
+ export declare function getRememberedMonorepoPath(): HooxPath;
72
+ /**
73
+ * Read the last monorepo path the CLI discovered (if still valid).
74
+ * Returns null when missing, unreadable, or no longer a setup root.
75
+ */
76
+ export declare function getRememberedMonorepoRoot(): string | null;
77
+ /**
78
+ * Persist a monorepo root for future CLI invocations from any cwd.
79
+ * No-op when path is not a valid setup root.
80
+ */
81
+ export declare function rememberMonorepoRoot(root: string): boolean;
54
82
  /**
55
83
  * Walk up from `startDir` looking for a hoox monorepo root.
56
84
  *
@@ -63,14 +91,17 @@ export declare function findHooxSetupRoot(startDir?: string): string | null;
63
91
  * Order:
64
92
  * 1. HOOX_REPO — must pass isHooxSetupRoot or result is source "env" with root null
65
93
  * 2. Walk up from cwd
66
- * 3. getHooxRepoPath() ($HOME/.hoox/repo or $HOOX_HOME/repo)
94
+ * 3. Remembered monorepo (~/.hoox/config/monorepo.json) — last discovered checkout
95
+ * 4. getHooxRepoPath() ($HOME/.hoox/repo or $HOOX_HOME/repo)
67
96
  *
68
97
  * Project cwd and tool root are intentionally separate: a random project
69
- * directory can still use the global runtime for TUI / templates.
98
+ * directory can still use a remembered or global monorepo for CLI ops.
70
99
  */
71
100
  export declare function resolveHooxRuntimeRoot(options?: {
72
101
  cwd?: string;
73
102
  env?: NodeJS.ProcessEnv;
103
+ /** Skip reading remembered path (tests). Default false. */
104
+ skipRemembered?: boolean;
74
105
  }): RuntimeRootResult;
75
106
  /**
76
107
  * Candidate TUI entry files under a monorepo root (source first, then dist).
@@ -1 +1 @@
1
- {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../src/path-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC;AAEjE,+EAA+E;AAC/E,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElE,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,iDAAiD;IACjD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,qDAAqD;IACrD,OAAO,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAUD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAgBtC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAWpD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,GAAE,MAAsB,GAC/B,MAAM,GAAG,IAAI,CAQf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,iBAAiB,CAoDpB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAOnE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAiC9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAStD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAE1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,QAAQ,CAE3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CAEzC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,IAAI,QAAQ,CAE9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,QAAQ,CAE3C"}
1
+ {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../src/path-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkCH;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAAC;AAEjE,+EAA+E;AAC/E,MAAM,MAAM,iBAAiB,GACzB,KAAK,GACL,KAAK,GACL,YAAY,GACZ,QAAQ,GACR,MAAM,CAAC;AAEX,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,iDAAiD;IACjD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,qDAAqD;IACrD,OAAO,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAgBtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgBpD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,QAAQ,CAEpD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,IAAI,CAYzD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA4B1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,GAAE,MAAsB,GAC/B,MAAM,GAAG,IAAI,CAQf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,iBAAiB,CAiEpB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAOnE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAiC9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAStD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAE1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,QAAQ,CAE3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CAEzC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,IAAI,QAAQ,CAE9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,QAAQ,CAE3C"}