veryfront 0.0.82 → 0.0.84

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 (126) hide show
  1. package/README.md +18 -17
  2. package/esm/deno.js +1 -1
  3. package/esm/proxy/cache/index.d.ts +41 -0
  4. package/esm/proxy/cache/index.d.ts.map +1 -0
  5. package/esm/proxy/cache/index.js +75 -0
  6. package/esm/proxy/cache/memory-cache.d.ts +18 -0
  7. package/esm/proxy/cache/memory-cache.d.ts.map +1 -0
  8. package/esm/proxy/cache/memory-cache.js +100 -0
  9. package/esm/proxy/cache/redis-cache.d.ts +27 -0
  10. package/esm/proxy/cache/redis-cache.d.ts.map +1 -0
  11. package/esm/proxy/cache/redis-cache.js +183 -0
  12. package/esm/proxy/cache/resilient-cache.d.ts +44 -0
  13. package/esm/proxy/cache/resilient-cache.d.ts.map +1 -0
  14. package/esm/proxy/cache/resilient-cache.js +178 -0
  15. package/esm/proxy/cache/types.d.ts +65 -0
  16. package/esm/proxy/cache/types.d.ts.map +1 -0
  17. package/esm/proxy/cache/types.js +7 -0
  18. package/esm/proxy/handler.d.ts +81 -0
  19. package/esm/proxy/handler.d.ts.map +1 -0
  20. package/esm/proxy/handler.js +417 -0
  21. package/esm/proxy/logger.d.ts +29 -0
  22. package/esm/proxy/logger.d.ts.map +1 -0
  23. package/esm/proxy/logger.js +258 -0
  24. package/esm/proxy/oauth-client.d.ts +15 -0
  25. package/esm/proxy/oauth-client.d.ts.map +1 -0
  26. package/esm/proxy/oauth-client.js +52 -0
  27. package/esm/proxy/token-manager.d.ts +59 -0
  28. package/esm/proxy/token-manager.d.ts.map +1 -0
  29. package/esm/proxy/token-manager.js +125 -0
  30. package/esm/proxy/tracing.d.ts +39 -0
  31. package/esm/proxy/tracing.d.ts.map +1 -0
  32. package/esm/proxy/tracing.js +194 -0
  33. package/esm/src/cache/backend.d.ts +2 -0
  34. package/esm/src/cache/backend.d.ts.map +1 -1
  35. package/esm/src/cache/backend.js +2 -0
  36. package/esm/src/cache/cache-key-builder.d.ts +0 -4
  37. package/esm/src/cache/cache-key-builder.d.ts.map +1 -1
  38. package/esm/src/cache/cache-key-builder.js +0 -6
  39. package/esm/src/cache/multi-tier.d.ts +0 -29
  40. package/esm/src/cache/multi-tier.d.ts.map +1 -1
  41. package/esm/src/cache/multi-tier.js +0 -26
  42. package/esm/src/cli/app/actions.d.ts +26 -0
  43. package/esm/src/cli/app/actions.d.ts.map +1 -0
  44. package/esm/src/cli/app/actions.js +152 -0
  45. package/esm/src/cli/app/components/inline-input.d.ts +35 -0
  46. package/esm/src/cli/app/components/inline-input.d.ts.map +1 -0
  47. package/esm/src/cli/app/components/inline-input.js +220 -0
  48. package/esm/src/cli/app/components/list-select.d.ts +69 -0
  49. package/esm/src/cli/app/components/list-select.d.ts.map +1 -0
  50. package/esm/src/cli/app/components/list-select.js +137 -0
  51. package/esm/src/cli/app/index.d.ts +45 -0
  52. package/esm/src/cli/app/index.d.ts.map +1 -0
  53. package/esm/src/cli/app/index.js +1252 -0
  54. package/esm/src/cli/app/state.d.ts +122 -0
  55. package/esm/src/cli/app/state.d.ts.map +1 -0
  56. package/esm/src/cli/app/state.js +232 -0
  57. package/esm/src/cli/app/views/dashboard.d.ts +19 -0
  58. package/esm/src/cli/app/views/dashboard.d.ts.map +1 -0
  59. package/esm/src/cli/app/views/dashboard.js +178 -0
  60. package/esm/src/cli/commands/dev.js +2 -2
  61. package/esm/src/cli/commands/new.js +1 -1
  62. package/esm/src/cli/index/command-router.d.ts.map +1 -1
  63. package/esm/src/cli/index/command-router.js +9 -39
  64. package/esm/src/cli/index/start-handler.d.ts +3 -0
  65. package/esm/src/cli/index/start-handler.d.ts.map +1 -0
  66. package/esm/src/cli/index/start-handler.js +145 -0
  67. package/esm/src/cli/mcp/index.d.ts +11 -0
  68. package/esm/src/cli/mcp/index.d.ts.map +1 -0
  69. package/esm/src/cli/mcp/index.js +10 -0
  70. package/esm/src/cli/ui/tui.js +1 -1
  71. package/esm/src/middleware/builtin/security/redis-rate-limit.d.ts +2 -0
  72. package/esm/src/middleware/builtin/security/redis-rate-limit.d.ts.map +1 -1
  73. package/esm/src/middleware/builtin/security/redis-rate-limit.js +23 -9
  74. package/esm/src/modules/react-loader/ssr-module-loader/cache/redis.d.ts +10 -0
  75. package/esm/src/modules/react-loader/ssr-module-loader/cache/redis.d.ts.map +1 -1
  76. package/esm/src/modules/react-loader/ssr-module-loader/cache/redis.js +30 -42
  77. package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts.map +1 -1
  78. package/esm/src/modules/react-loader/ssr-module-loader/loader.js +34 -13
  79. package/esm/src/platform/adapters/fs/cache/file-cache.d.ts.map +1 -1
  80. package/esm/src/platform/adapters/fs/cache/file-cache.js +9 -3
  81. package/esm/src/server/context/cache-invalidation.d.ts.map +1 -1
  82. package/esm/src/server/context/cache-invalidation.js +4 -0
  83. package/esm/src/server/handlers/dev/dashboard/api.js +4 -0
  84. package/esm/src/server/handlers/dev/projects/ui-handler.d.ts.map +1 -1
  85. package/esm/src/server/handlers/dev/projects/ui-handler.js +6 -0
  86. package/esm/src/transforms/esm/http-cache.d.ts.map +1 -1
  87. package/esm/src/transforms/esm/http-cache.js +139 -64
  88. package/esm/src/utils/index.d.ts +1 -1
  89. package/esm/src/utils/index.d.ts.map +1 -1
  90. package/esm/src/utils/index.js +1 -1
  91. package/package.json +2 -1
  92. package/src/deno.js +1 -1
  93. package/src/proxy/cache/index.ts +93 -0
  94. package/src/proxy/cache/memory-cache.ts +120 -0
  95. package/src/proxy/cache/redis-cache.ts +203 -0
  96. package/src/proxy/cache/resilient-cache.ts +205 -0
  97. package/src/proxy/cache/types.ts +72 -0
  98. package/src/proxy/handler.ts +593 -0
  99. package/src/proxy/logger.ts +329 -0
  100. package/src/proxy/oauth-client.ts +91 -0
  101. package/src/proxy/token-manager.ts +174 -0
  102. package/src/proxy/tracing.ts +237 -0
  103. package/src/src/cache/backend.ts +3 -0
  104. package/src/src/cache/cache-key-builder.ts +0 -9
  105. package/src/src/cache/multi-tier.ts +0 -41
  106. package/src/src/cli/app/actions.ts +190 -0
  107. package/src/src/cli/app/components/inline-input.ts +255 -0
  108. package/src/src/cli/app/components/list-select.ts +215 -0
  109. package/src/src/cli/app/index.ts +1471 -0
  110. package/src/src/cli/app/state.ts +385 -0
  111. package/src/src/cli/app/views/dashboard.ts +212 -0
  112. package/src/src/cli/commands/dev.ts +2 -2
  113. package/src/src/cli/commands/new.ts +1 -1
  114. package/src/src/cli/index/command-router.ts +9 -40
  115. package/src/src/cli/index/start-handler.ts +195 -0
  116. package/src/src/cli/mcp/index.ts +11 -0
  117. package/src/src/cli/ui/tui.ts +1 -1
  118. package/src/src/middleware/builtin/security/redis-rate-limit.ts +24 -11
  119. package/src/src/modules/react-loader/ssr-module-loader/cache/redis.ts +36 -50
  120. package/src/src/modules/react-loader/ssr-module-loader/loader.ts +38 -14
  121. package/src/src/platform/adapters/fs/cache/file-cache.ts +9 -3
  122. package/src/src/server/context/cache-invalidation.ts +4 -0
  123. package/src/src/server/handlers/dev/dashboard/api.ts +2 -0
  124. package/src/src/server/handlers/dev/projects/ui-handler.ts +6 -0
  125. package/src/src/transforms/esm/http-cache.ts +148 -73
  126. package/src/src/utils/index.ts +0 -1
@@ -0,0 +1,194 @@
1
+ /**
2
+ * OpenTelemetry OTLP tracing for proxy.
3
+ * Env: OTEL_TRACES_ENABLED, OTEL_SERVICE_NAME, OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_HEADERS
4
+ */
5
+ import * as dntShim from "../_dnt.shims.js";
6
+ // Inline cross-runtime getEnv to avoid dependency on src/platform/compat (not copied in Docker)
7
+ function getEnv(key) {
8
+ // Deno
9
+ if (typeof dntShim.Deno !== "undefined" && dntShim.Deno.env?.get) {
10
+ return dntShim.Deno.env.get(key);
11
+ }
12
+ // Node.js / Bun
13
+ const nodeProcess = dntShim.dntGlobalThis.process;
14
+ return nodeProcess?.env?.[key];
15
+ }
16
+ let initialized = false;
17
+ let tracerProvider = null;
18
+ let tracer = null;
19
+ function parseHeaders(headerString) {
20
+ if (!headerString)
21
+ return {};
22
+ const headers = {};
23
+ for (const part of headerString.split(",")) {
24
+ const [key, ...valueParts] = part.split("=");
25
+ if (key && valueParts.length > 0) {
26
+ headers[key.trim()] = valueParts.join("=").trim();
27
+ }
28
+ }
29
+ return headers;
30
+ }
31
+ function getConfig() {
32
+ return {
33
+ enabled: getEnv("OTEL_TRACES_ENABLED") === "true",
34
+ serviceName: getEnv("OTEL_SERVICE_NAME") || "veryfront-proxy",
35
+ endpoint: getEnv("OTEL_EXPORTER_OTLP_ENDPOINT") || "",
36
+ headers: parseHeaders(getEnv("OTEL_EXPORTER_OTLP_HEADERS")),
37
+ };
38
+ }
39
+ let traceApi = null;
40
+ let propagationApi = null;
41
+ async function loadApis() {
42
+ if (traceApi)
43
+ return;
44
+ traceApi = await import("@opentelemetry/api");
45
+ propagationApi = await import("@opentelemetry/core");
46
+ }
47
+ export async function initializeOTLP() {
48
+ if (initialized)
49
+ return;
50
+ const config = getConfig();
51
+ if (!config.enabled) {
52
+ initialized = true;
53
+ return;
54
+ }
55
+ if (!config.endpoint) {
56
+ console.warn("[otel] No endpoint configured");
57
+ initialized = true;
58
+ return;
59
+ }
60
+ try {
61
+ const { trace } = await import("@opentelemetry/api");
62
+ const { BasicTracerProvider, BatchSpanProcessor } = await import("@opentelemetry/sdk-trace-base");
63
+ const { OTLPTraceExporter } = await import("@opentelemetry/exporter-trace-otlp-http");
64
+ const { Resource } = await import("@opentelemetry/resources");
65
+ const { ATTR_SERVICE_NAME } = await import("@opentelemetry/semantic-conventions");
66
+ const resource = new Resource({ [ATTR_SERVICE_NAME]: config.serviceName });
67
+ const exporter = new OTLPTraceExporter({
68
+ url: `${config.endpoint}/v1/traces`,
69
+ headers: config.headers,
70
+ });
71
+ const provider = new BasicTracerProvider({ resource });
72
+ provider.addSpanProcessor(new BatchSpanProcessor(exporter));
73
+ provider.register();
74
+ tracerProvider = provider;
75
+ tracer = trace.getTracer(config.serviceName);
76
+ initialized = true;
77
+ await loadApis();
78
+ console.log("[otel] Initialized", {
79
+ serviceName: config.serviceName,
80
+ endpoint: config.endpoint,
81
+ });
82
+ }
83
+ catch (error) {
84
+ console.error("[otel] Init failed", { error });
85
+ initialized = true;
86
+ }
87
+ }
88
+ export async function shutdownOTLP() {
89
+ if (tracerProvider) {
90
+ try {
91
+ await tracerProvider.shutdown();
92
+ console.log("[otel] Shutdown complete");
93
+ }
94
+ catch (error) {
95
+ console.warn("[otel] Shutdown error", { error });
96
+ }
97
+ }
98
+ }
99
+ export function isOTLPEnabled() {
100
+ return initialized && tracerProvider !== null;
101
+ }
102
+ export function extractContext(headers) {
103
+ if (!traceApi || !propagationApi)
104
+ return undefined;
105
+ const carrier = {};
106
+ headers.forEach((v, k) => (carrier[k.toLowerCase()] = v));
107
+ return new propagationApi.W3CTraceContextPropagator().extract(traceApi.context.active(), carrier, traceApi.defaultTextMapGetter);
108
+ }
109
+ export function injectContext(headers) {
110
+ if (!traceApi || !propagationApi)
111
+ return;
112
+ const carrier = {};
113
+ new propagationApi.W3CTraceContextPropagator().inject(traceApi.context.active(), carrier, traceApi.defaultTextMapSetter);
114
+ Object.entries(carrier).forEach(([k, v]) => headers.set(k, v));
115
+ }
116
+ export function startServerSpan(method, path, parentContext) {
117
+ if (!traceApi || !tracer)
118
+ return null;
119
+ const ctx = parentContext || traceApi.context.active();
120
+ const span = tracer.startSpan(`${method} ${path}`, { kind: traceApi.SpanKind.SERVER }, ctx);
121
+ return { span, context: traceApi.trace.setSpan(ctx, span) };
122
+ }
123
+ export function endSpan(span, statusCode, error) {
124
+ if (!span || !traceApi)
125
+ return;
126
+ span.setAttribute("http.status_code", statusCode);
127
+ if (error) {
128
+ span.setStatus({ code: traceApi.SpanStatusCode.ERROR, message: error.message });
129
+ span.recordException(error);
130
+ }
131
+ else if (statusCode >= 400) {
132
+ span.setStatus({ code: traceApi.SpanStatusCode.ERROR });
133
+ }
134
+ span.end();
135
+ }
136
+ export function withContext(spanContext, fn) {
137
+ if (!traceApi)
138
+ return fn();
139
+ return traceApi.context.with(spanContext, fn);
140
+ }
141
+ export function getTraceContext() {
142
+ if (!traceApi)
143
+ return {};
144
+ const span = traceApi.trace.getSpan(traceApi.context.active());
145
+ if (!span)
146
+ return {};
147
+ const ctx = span.spanContext();
148
+ return { traceId: ctx.traceId, spanId: ctx.spanId };
149
+ }
150
+ /**
151
+ * Span names for proxy tracing.
152
+ */
153
+ export const ProxySpanNames = {
154
+ PROXY_REQUEST: "proxy.request",
155
+ PROXY_PROCESS: "proxy.process",
156
+ PROXY_TOKEN_FETCH: "proxy.token_fetch",
157
+ PROXY_DOMAIN_LOOKUP: "proxy.domain_lookup",
158
+ OAUTH_TOKEN_REQUEST: "oauth.token_request",
159
+ HTTP_CLIENT_FETCH: "http.client.fetch",
160
+ };
161
+ /**
162
+ * Execute an async function within a tracing span.
163
+ * If tracing is disabled, executes the function directly.
164
+ */
165
+ export async function withSpan(name, fn, attributes) {
166
+ if (!traceApi || !tracer) {
167
+ return await fn();
168
+ }
169
+ const parentContext = traceApi.context.active();
170
+ const span = tracer.startSpan(name, {
171
+ kind: traceApi.SpanKind.INTERNAL,
172
+ attributes,
173
+ }, parentContext);
174
+ const spanContext = traceApi.trace.setSpan(parentContext, span);
175
+ try {
176
+ const result = await traceApi.context.with(spanContext, fn);
177
+ span.setStatus({ code: traceApi.SpanStatusCode.OK });
178
+ return result;
179
+ }
180
+ catch (error) {
181
+ span.setStatus({
182
+ code: traceApi.SpanStatusCode.ERROR,
183
+ message: error instanceof Error ? error.message : String(error),
184
+ });
185
+ if (error instanceof Error) {
186
+ span.recordException(error);
187
+ }
188
+ throw error;
189
+ }
190
+ finally {
191
+ span.end();
192
+ }
193
+ }
194
+ export { initializeOTLP as initializeOTLPWithApis };
@@ -156,6 +156,8 @@ export declare const CacheBackends: {
156
156
  /** HTTP module cache for ESM.sh modules (cross-pod sharing).
157
157
  * Uses separate circuit breaker to prevent cascade failures from blocking recovery. */
158
158
  httpModule: () => Promise<CacheBackend>;
159
+ /** SSR module cache for React loader (cross-pod sharing). */
160
+ ssrModule: () => Promise<CacheBackend>;
159
161
  /** Project CSS cache for Tailwind CSS output (cross-pod sharing). */
160
162
  projectCSS: () => Promise<CacheBackend>;
161
163
  };
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/src/cache/backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/src/cache/backend.ts"],"names":[],"mappings":"AAsBA,OAAO,EAA0C,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAkCnG,+BAA+B;AAC/B,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IAE1C,6BAA6B;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEzC,uDAAuD;IACvD,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAE/D,uDAAuD;IACvD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE,qDAAqD;IACrD,QAAQ,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvF,8BAA8B;IAC9B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC,8CAA8C;IAC9C,YAAY,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhD,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,6CAA6C;AAC7C,qBAAa,kBAAmB,YAAW,YAAY;IACrD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,OAAO,CAAC,KAAK,CAA2D;IACxE,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,SAA2B;IAIjD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAYxC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAuB7D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB9C,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED,6EAA6E;AAC7E,qBAAa,iBAAkB,YAAW,YAAY;IACpD,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,SAAc;IAInC,OAAO,CAAC,SAAS;IAIjB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAoBxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWxC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAqB7D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAqBrD;AAED;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAClD,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,GAAG,CAAC,CAAa;IACzB,OAAO,CAAC,cAAc,CAAC;gBAEX,OAAO,GAAE;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,6CAA6C;QAC7C,GAAG,CAAC,EAAE,UAAU,CAAC;QACjB,4EAA4E;QAC5E,kBAAkB,CAAC,EAAE,MAAM,CAAC;KACxB;IAkBN,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,cAAc;YAIR,OAAO;IAmEf,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQxC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IA4BnE,6EAA6E;YAC/D,eAAe;IAKvB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYrF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAMrD;AAED,mCAAmC;AACnC,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC9C,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,qDAAqD;IACrD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAc7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC,CAyCzF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAEnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,EACpC,IAAI,EAAE,MAAM,GACX,MAAM,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAmCpC;AAED,sDAAsD;AACtD,eAAO,MAAM,aAAa;IACxB,yCAAyC;;IAGzC,qGAAqG;;IAGrG,oCAAoC;;IAGpC,uCAAuC;;IAGvC,+CAA+C;;IAG/C;2FACuF;;IAIvF,6DAA6D;;IAG7D,qEAAqE;;CAEtE,CAAC"}
@@ -521,6 +521,8 @@ export const CacheBackends = {
521
521
  /** HTTP module cache for ESM.sh modules (cross-pod sharing).
522
522
  * Uses separate circuit breaker to prevent cascade failures from blocking recovery. */
523
523
  httpModule: () => createCacheBackend({ keyPrefix: "http-module", circuitBreakerName: "api-cache-http" }),
524
+ /** SSR module cache for React loader (cross-pod sharing). */
525
+ ssrModule: () => createCacheBackend({ keyPrefix: "ssr-module" }),
524
526
  /** Project CSS cache for Tailwind CSS output (cross-pod sharing). */
525
527
  projectCSS: () => createCacheBackend({ keyPrefix: "project-css" }),
526
528
  };
@@ -21,8 +21,4 @@ export declare function getProjectScopedKey(prefix: string, resourceKey: string)
21
21
  export declare function getProjectScopedKeyAlways(prefix: string, resourceKey: string): string | null;
22
22
  export declare function extractCacheKeyContext(handlerCtx: HandlerContext): CacheKeyContext;
23
23
  export type { MultiProjectRequestContextType as MultiProjectRequestContext };
24
- /**
25
- * @deprecated Use tryGetCacheKeyContext() which auto-detects context
26
- */
27
- export declare function extractCacheKeyContextFromRequestContext(reqCtx: MultiProjectRequestContextType): CacheKeyContext;
28
24
  //# sourceMappingURL=cache-key-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache-key-builder.d.ts","sourceRoot":"","sources":["../../../src/src/cache/cache-key-builder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,KAAK,8BAA8B,GAAG;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAUF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAGR;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAE9E;AAED,wBAAgB,yBAAyB,IAAI,eAAe,CAQ3D;AA4BD,wBAAgB,qBAAqB,IAAI,eAAe,GAAG,IAAI,CAS9D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKtF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5F;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,eAAe,CAQlF;AAED,YAAY,EAAE,8BAA8B,IAAI,0BAA0B,EAAE,CAAC;AAE7E;;GAEG;AACH,wBAAgB,wCAAwC,CACtD,MAAM,EAAE,8BAA8B,GACrC,eAAe,CAEjB"}
1
+ {"version":3,"file":"cache-key-builder.d.ts","sourceRoot":"","sources":["../../../src/src/cache/cache-key-builder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,KAAK,8BAA8B,GAAG;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAUF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAGR;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAE9E;AAED,wBAAgB,yBAAyB,IAAI,eAAe,CAQ3D;AA4BD,wBAAgB,qBAAqB,IAAI,eAAe,GAAG,IAAI,CAS9D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKtF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5F;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,eAAe,CAQlF;AAED,YAAY,EAAE,8BAA8B,IAAI,0BAA0B,EAAE,CAAC"}
@@ -76,9 +76,3 @@ export function extractCacheKeyContext(handlerCtx) {
76
76
  : (handlerCtx.parsedDomain?.branch || "main");
77
77
  return { projectId, mode, versionId };
78
78
  }
79
- /**
80
- * @deprecated Use tryGetCacheKeyContext() which auto-detects context
81
- */
82
- export function extractCacheKeyContextFromRequestContext(reqCtx) {
83
- return extractCacheKeyContextFromMultiProjectContext(reqCtx);
84
- }
@@ -145,33 +145,4 @@ export declare class MultiTierCache<T = string> {
145
145
  */
146
146
  private individualGets;
147
147
  }
148
- /**
149
- * Create a memory-backed cache tier from a CacheBackend.
150
- */
151
- export declare function createMemoryTier(backend: {
152
- get(key: string): Promise<string | null>;
153
- set(key: string, value: string, ttlSeconds?: number): Promise<void>;
154
- del?(key: string): Promise<void>;
155
- getBatch?(keys: string[]): Promise<Map<string, string | null>>;
156
- setBatch?(entries: Array<{
157
- key: string;
158
- value: string;
159
- ttl?: number;
160
- }>): Promise<void>;
161
- }): CacheTier<string>;
162
- /**
163
- * Create a distributed cache tier from a CacheBackend.
164
- */
165
- export declare function createDistributedTier(backend: {
166
- readonly type: string;
167
- get(key: string): Promise<string | null>;
168
- set(key: string, value: string, ttlSeconds?: number): Promise<void>;
169
- del?(key: string): Promise<void>;
170
- getBatch?(keys: string[]): Promise<Map<string, string | null>>;
171
- setBatch?(entries: Array<{
172
- key: string;
173
- value: string;
174
- ttl?: number;
175
- }>): Promise<void>;
176
- }): CacheTier<string>;
177
148
  //# sourceMappingURL=multi-tier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"multi-tier.d.ts","sourceRoot":"","sources":["../../../src/src/cache/multi-tier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multi-tier.d.ts","sourceRoot":"","sources":["../../../src/src/cache/multi-tier.ts"],"names":[],"mappings":"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"}
@@ -324,29 +324,3 @@ export class MultiTierCache {
324
324
  return new Map(results);
325
325
  }
326
326
  }
327
- /**
328
- * Create a memory-backed cache tier from a CacheBackend.
329
- */
330
- export function createMemoryTier(backend) {
331
- return {
332
- name: "memory",
333
- get: (key) => backend.get(key),
334
- set: (key, value, ttl) => backend.set(key, value, ttl),
335
- delete: backend.del?.bind(backend),
336
- getBatch: backend.getBatch?.bind(backend),
337
- setBatch: backend.setBatch?.bind(backend),
338
- };
339
- }
340
- /**
341
- * Create a distributed cache tier from a CacheBackend.
342
- */
343
- export function createDistributedTier(backend) {
344
- return {
345
- name: `distributed-${backend.type}`,
346
- get: (key) => backend.get(key),
347
- set: (key, value, ttl) => backend.set(key, value, ttl),
348
- delete: backend.del?.bind(backend),
349
- getBatch: backend.getBatch?.bind(backend),
350
- setBatch: backend.setBatch?.bind(backend),
351
- };
352
- }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * CLI App Actions
3
+ *
4
+ * Handlers for opening projects in browser, Studio, and IDE.
5
+ * Uses cross-runtime platform abstractions for filesystem and command execution.
6
+ */
7
+ import type { ProjectInfo } from "./state.js";
8
+ import { type RuntimeEnv } from "../../config/runtime-env.js";
9
+ export type IDE = "cursor" | "code" | "zed" | "idea" | "webstorm";
10
+ export interface ActionResult {
11
+ success: boolean;
12
+ message?: string;
13
+ }
14
+ export declare function openInBrowser(project: ProjectInfo, port: number): Promise<ActionResult>;
15
+ export declare function openInStudio(project: ProjectInfo): Promise<ActionResult>;
16
+ export declare function detectIDEs(): Promise<IDE[]>;
17
+ export declare function getPreferredIDE(): Promise<IDE | null>;
18
+ export declare function openInIDE(project: ProjectInfo, ide?: IDE): Promise<ActionResult>;
19
+ export declare function openFileInIDE(filePath: string, ide?: IDE): Promise<ActionResult>;
20
+ export declare function clearProjectCache(project: ProjectInfo): Promise<ActionResult>;
21
+ export declare function openMCPSettings(env?: RuntimeEnv): Promise<ActionResult>;
22
+ export declare function quickOpen(projects: Array<{
23
+ slug: string;
24
+ path: string;
25
+ }>, num: number, port: number): Promise<ActionResult>;
26
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../../src/src/cli/app/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE7E,MAAM,MAAM,GAAG,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiDD,wBAAsB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAS7F;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAS9E;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAUjD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAG3D;AAsBD,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAMtF;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAEhF;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAgBnF;AAED,wBAAsB,eAAe,CAAC,GAAG,GAAE,UAA4B,GAAG,OAAO,CAAC,YAAY,CAAC,CAkB9F;AAED,wBAAgB,SAAS,CACvB,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAQvB"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * CLI App Actions
3
+ *
4
+ * Handlers for opening projects in browser, Studio, and IDE.
5
+ * Uses cross-runtime platform abstractions for filesystem and command execution.
6
+ */
7
+ import { openBrowser } from "../auth/browser.js";
8
+ import { createFileSystem } from "../../platform/compat/fs.js";
9
+ import { getOsType, runCommand } from "../../platform/compat/process.js";
10
+ import { join } from "../../platform/compat/path/index.js";
11
+ import { getRuntimeEnv } from "../../config/runtime-env.js";
12
+ /** IDE command-line executables */
13
+ const IDE_COMMANDS = {
14
+ cursor: "cursor",
15
+ code: "code",
16
+ zed: "zed",
17
+ idea: "idea",
18
+ webstorm: "webstorm",
19
+ };
20
+ /** IDE display names */
21
+ const IDE_NAMES = {
22
+ cursor: "Cursor",
23
+ code: "VS Code",
24
+ zed: "Zed",
25
+ idea: "IntelliJ IDEA",
26
+ webstorm: "WebStorm",
27
+ };
28
+ /** IDE detection order (preferred first) */
29
+ const IDE_DETECTION_ORDER = ["cursor", "code", "zed", "idea", "webstorm"];
30
+ /** Cache directories to clear relative to project path */
31
+ const PROJECT_CACHE_DIRS = [".cache", "node_modules/.cache"];
32
+ function formatError(error) {
33
+ return error instanceof Error ? error.message : String(error);
34
+ }
35
+ async function commandExists(cmd) {
36
+ try {
37
+ const whichCmd = getOsType() === "windows" ? "where" : "which";
38
+ const result = await runCommand(whichCmd, { args: [cmd] });
39
+ return result.success;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ async function runCommandLocal(cmd, args) {
46
+ try {
47
+ const result = await runCommand(cmd, { args });
48
+ return result.success;
49
+ }
50
+ catch {
51
+ return false;
52
+ }
53
+ }
54
+ export async function openInBrowser(project, port) {
55
+ const url = `http://${project.slug}.veryfront.me:${port}`;
56
+ try {
57
+ await openBrowser(url);
58
+ return { success: true, message: `Opened ${url}` };
59
+ }
60
+ catch (error) {
61
+ return { success: false, message: `Failed to open browser: ${formatError(error)}` };
62
+ }
63
+ }
64
+ export async function openInStudio(project) {
65
+ const url = `https://veryfront.com/projects/${project.slug}`;
66
+ try {
67
+ await openBrowser(url);
68
+ return { success: true, message: `Opened Studio for ${project.slug}` };
69
+ }
70
+ catch (error) {
71
+ return { success: false, message: `Failed to open Studio: ${formatError(error)}` };
72
+ }
73
+ }
74
+ export async function detectIDEs() {
75
+ const available = [];
76
+ for (const ide of IDE_DETECTION_ORDER) {
77
+ if (await commandExists(IDE_COMMANDS[ide])) {
78
+ available.push(ide);
79
+ }
80
+ }
81
+ return available;
82
+ }
83
+ export async function getPreferredIDE() {
84
+ const ides = await detectIDEs();
85
+ return ides[0] ?? null;
86
+ }
87
+ async function openPathInIDE(path, ide) {
88
+ const targetIDE = ide ?? (await getPreferredIDE());
89
+ if (!targetIDE) {
90
+ return {
91
+ success: false,
92
+ message: "No supported IDE found. Install VS Code, Cursor, or Zed.",
93
+ };
94
+ }
95
+ const cmd = IDE_COMMANDS[targetIDE];
96
+ const name = IDE_NAMES[targetIDE];
97
+ if (await runCommandLocal(cmd, [path])) {
98
+ return { success: true, message: `Opened in ${name}` };
99
+ }
100
+ return { success: false, message: `Failed to open ${name}` };
101
+ }
102
+ export async function openInIDE(project, ide) {
103
+ const result = await openPathInIDE(project.path, ide);
104
+ if (!result.success)
105
+ return result;
106
+ const ideName = result.message?.split(" in ")[1];
107
+ return { success: true, message: `Opened ${project.slug} in ${ideName}` };
108
+ }
109
+ export function openFileInIDE(filePath, ide) {
110
+ return openPathInIDE(filePath, ide);
111
+ }
112
+ export async function clearProjectCache(project) {
113
+ const fs = createFileSystem();
114
+ let cleared = 0;
115
+ for (const relativeDir of PROJECT_CACHE_DIRS) {
116
+ const dir = join(project.path, relativeDir);
117
+ try {
118
+ await fs.remove(dir, { recursive: true });
119
+ cleared++;
120
+ }
121
+ catch {
122
+ // Directory doesn't exist
123
+ }
124
+ }
125
+ const message = cleared > 0 ? `Cleared ${cleared} cache directories` : "No caches to clear";
126
+ return { success: true, message };
127
+ }
128
+ export async function openMCPSettings(env = getRuntimeEnv()) {
129
+ const home = env.homeDir || "";
130
+ const claudeDir = join(home, ".claude");
131
+ const settingsPath = join(claudeDir, "settings.json");
132
+ const fs = createFileSystem();
133
+ try {
134
+ await fs.mkdir(claudeDir, { recursive: true });
135
+ }
136
+ catch {
137
+ // Already exists
138
+ }
139
+ if (!(await fs.exists(settingsPath))) {
140
+ const defaultSettings = { mcpServers: {} };
141
+ await fs.writeTextFile(settingsPath, JSON.stringify(defaultSettings, null, 2));
142
+ }
143
+ return openFileInIDE(settingsPath);
144
+ }
145
+ export function quickOpen(projects, num, port) {
146
+ const index = num - 1;
147
+ if (index < 0 || index >= projects.length) {
148
+ return Promise.resolve({ success: false, message: `No project at position ${num}` });
149
+ }
150
+ const project = projects[index];
151
+ return openInBrowser({ slug: project.slug, path: project.path, type: "local" }, port);
152
+ }
@@ -0,0 +1,35 @@
1
+ /****
2
+ * Inline Text Input Component
3
+ *
4
+ * Renders an input prompt at the bottom of the TUI that stays inline
5
+ * without exiting alternate screen mode.
6
+ */
7
+ import type { InputState, LogEntry } from "../state.js";
8
+ export interface InlineInputOptions {
9
+ maxWidth?: number;
10
+ }
11
+ /**
12
+ * Render the inline input prompt
13
+ */
14
+ export declare function renderInput(input: InputState, _options?: InlineInputOptions): string;
15
+ export interface RenderLogsOptions {
16
+ maxLines?: number;
17
+ maxWidth?: number;
18
+ scroll?: number;
19
+ expanded?: boolean;
20
+ }
21
+ /**
22
+ * Render the logs area with optional scrolling
23
+ */
24
+ export declare function renderLogs(logs: LogEntry[], options?: RenderLogsOptions): string;
25
+ /**
26
+ * Handle input key press
27
+ * Returns the new value and cursor position, or null if the key should end input
28
+ */
29
+ export declare function handleInputKey(key: string, value: string, cursorPos: number): {
30
+ value: string;
31
+ cursorPos: number;
32
+ } | {
33
+ action: "submit" | "cancel";
34
+ };
35
+ //# sourceMappingURL=inline-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-input.d.ts","sourceRoot":"","sources":["../../../../../src/src/cli/app/components/inline-input.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,GAAE,kBAAuB,GAAG,MAAM,CAkBxF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,QAAQ,EAAE,EAChB,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CA4ER;AAuED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAAE,CAiDxE"}