@hs-x/cli 0.1.0 → 0.1.2

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 (141) hide show
  1. package/README.md +59 -33
  2. package/dist/cli/index.d.ts.map +1 -1
  3. package/dist/cli/index.js +152 -334
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/cli/kit.d.ts +36 -0
  6. package/dist/cli/kit.d.ts.map +1 -0
  7. package/dist/cli/kit.js +64 -0
  8. package/dist/cli/kit.js.map +1 -0
  9. package/dist/cli-error.d.ts +19 -1
  10. package/dist/cli-error.d.ts.map +1 -1
  11. package/dist/cli-error.js +19 -4
  12. package/dist/cli-error.js.map +1 -1
  13. package/dist/commands/account.d.ts +55 -6
  14. package/dist/commands/account.d.ts.map +1 -1
  15. package/dist/commands/account.js +254 -252
  16. package/dist/commands/account.js.map +1 -1
  17. package/dist/commands/api.d.ts +16 -0
  18. package/dist/commands/api.d.ts.map +1 -1
  19. package/dist/commands/api.js +173 -0
  20. package/dist/commands/api.js.map +1 -1
  21. package/dist/commands/completion.d.ts +6 -0
  22. package/dist/commands/completion.d.ts.map +1 -1
  23. package/dist/commands/completion.js +34 -0
  24. package/dist/commands/completion.js.map +1 -1
  25. package/dist/commands/connect.d.ts +32 -0
  26. package/dist/commands/connect.d.ts.map +1 -1
  27. package/dist/commands/connect.js +126 -1
  28. package/dist/commands/connect.js.map +1 -1
  29. package/dist/commands/control-plane-read.d.ts +60 -17
  30. package/dist/commands/control-plane-read.d.ts.map +1 -1
  31. package/dist/commands/control-plane-read.js +269 -231
  32. package/dist/commands/control-plane-read.js.map +1 -1
  33. package/dist/commands/deploy-promote.d.ts +14 -0
  34. package/dist/commands/deploy-promote.d.ts.map +1 -1
  35. package/dist/commands/deploy-promote.js +128 -0
  36. package/dist/commands/deploy-promote.js.map +1 -1
  37. package/dist/commands/deploy.d.ts +57 -0
  38. package/dist/commands/deploy.d.ts.map +1 -1
  39. package/dist/commands/deploy.js +154 -1
  40. package/dist/commands/deploy.js.map +1 -1
  41. package/dist/commands/dev.d.ts +25 -0
  42. package/dist/commands/dev.d.ts.map +1 -1
  43. package/dist/commands/dev.js +108 -0
  44. package/dist/commands/dev.js.map +1 -1
  45. package/dist/commands/doctor.d.ts +7 -7
  46. package/dist/commands/doctor.d.ts.map +1 -1
  47. package/dist/commands/doctor.js +144 -143
  48. package/dist/commands/doctor.js.map +1 -1
  49. package/dist/commands/flags.d.ts +35 -0
  50. package/dist/commands/flags.d.ts.map +1 -1
  51. package/dist/commands/flags.js +229 -0
  52. package/dist/commands/flags.js.map +1 -1
  53. package/dist/commands/history.d.ts +8 -5
  54. package/dist/commands/history.d.ts.map +1 -1
  55. package/dist/commands/history.js +46 -40
  56. package/dist/commands/history.js.map +1 -1
  57. package/dist/commands/init.d.ts +30 -0
  58. package/dist/commands/init.d.ts.map +1 -1
  59. package/dist/commands/init.js +89 -0
  60. package/dist/commands/init.js.map +1 -1
  61. package/dist/commands/link.d.ts +15 -0
  62. package/dist/commands/link.d.ts.map +1 -1
  63. package/dist/commands/link.js +284 -0
  64. package/dist/commands/link.js.map +1 -1
  65. package/dist/commands/login.d.ts +17 -1
  66. package/dist/commands/login.d.ts.map +1 -1
  67. package/dist/commands/login.js +79 -21
  68. package/dist/commands/login.js.map +1 -1
  69. package/dist/commands/migrate.d.ts +32 -0
  70. package/dist/commands/migrate.d.ts.map +1 -1
  71. package/dist/commands/migrate.js +255 -0
  72. package/dist/commands/migrate.js.map +1 -1
  73. package/dist/commands/rollback.d.ts +22 -0
  74. package/dist/commands/rollback.d.ts.map +1 -1
  75. package/dist/commands/rollback.js +271 -0
  76. package/dist/commands/rollback.js.map +1 -1
  77. package/dist/commands/secrets.d.ts +35 -5
  78. package/dist/commands/secrets.d.ts.map +1 -1
  79. package/dist/commands/secrets.js +94 -196
  80. package/dist/commands/secrets.js.map +1 -1
  81. package/dist/commands/status.d.ts +8 -5
  82. package/dist/commands/status.d.ts.map +1 -1
  83. package/dist/commands/status.js +162 -121
  84. package/dist/commands/status.js.map +1 -1
  85. package/dist/commands/unlink.d.ts +11 -0
  86. package/dist/commands/unlink.d.ts.map +1 -1
  87. package/dist/commands/unlink.js +75 -0
  88. package/dist/commands/unlink.js.map +1 -1
  89. package/dist/commands/update.d.ts +8 -4
  90. package/dist/commands/update.d.ts.map +1 -1
  91. package/dist/commands/update.js +83 -35
  92. package/dist/commands/update.js.map +1 -1
  93. package/dist/commands/validate.d.ts +12 -6
  94. package/dist/commands/validate.d.ts.map +1 -1
  95. package/dist/commands/validate.js +50 -23
  96. package/dist/commands/validate.js.map +1 -1
  97. package/dist/config.d.ts +8 -0
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +1 -1
  100. package/dist/config.js.map +1 -1
  101. package/dist/constants.d.ts +1 -1
  102. package/dist/constants.js +1 -1
  103. package/dist/init/templates.js +1 -1
  104. package/dist/init/templates.js.map +1 -1
  105. package/dist/services/cloudflare-kv.d.ts +2 -2
  106. package/dist/services/cloudflare-kv.d.ts.map +1 -1
  107. package/dist/services/cloudflare-kv.js +10 -6
  108. package/dist/services/cloudflare-kv.js.map +1 -1
  109. package/dist/services/command-history.d.ts +2 -0
  110. package/dist/services/command-history.d.ts.map +1 -1
  111. package/dist/services/command-history.js +1 -1
  112. package/dist/services/command-history.js.map +1 -1
  113. package/dist/services/config.d.ts +24 -0
  114. package/dist/services/config.d.ts.map +1 -0
  115. package/dist/services/config.js +41 -0
  116. package/dist/services/config.js.map +1 -0
  117. package/dist/services/cwd.d.ts +12 -0
  118. package/dist/services/cwd.d.ts.map +1 -0
  119. package/dist/services/cwd.js +10 -0
  120. package/dist/services/cwd.js.map +1 -0
  121. package/dist/services/hubspot-dev-client.d.ts +38 -0
  122. package/dist/services/hubspot-dev-client.d.ts.map +1 -0
  123. package/dist/services/hubspot-dev-client.js +256 -0
  124. package/dist/services/hubspot-dev-client.js.map +1 -0
  125. package/dist/services/live.d.ts +7 -1
  126. package/dist/services/live.d.ts.map +1 -1
  127. package/dist/services/live.js +20 -8
  128. package/dist/services/live.js.map +1 -1
  129. package/dist/services/reporter.d.ts +14 -0
  130. package/dist/services/reporter.d.ts.map +1 -1
  131. package/dist/services/reporter.js +20 -0
  132. package/dist/services/reporter.js.map +1 -1
  133. package/dist/services/telemetry.d.ts +43 -0
  134. package/dist/services/telemetry.d.ts.map +1 -0
  135. package/dist/services/telemetry.js +93 -0
  136. package/dist/services/telemetry.js.map +1 -0
  137. package/dist/services/tenant-state.d.ts +85 -0
  138. package/dist/services/tenant-state.d.ts.map +1 -0
  139. package/dist/services/tenant-state.js +98 -0
  140. package/dist/services/tenant-state.js.map +1 -0
  141. package/package.json +4 -2
@@ -0,0 +1,41 @@
1
+ import { ConfigProvider, Context, Effect, Layer } from 'effect';
2
+ import { DEFAULT_CONTROL_PLANE_URL, cliConfig } from '../config.js';
3
+ /**
4
+ * Resolved CLI configuration (control-plane URL, identity, selected
5
+ * account/project) as a service. Values are read from the ambient
6
+ * `ConfigProvider`, which the dispatch composes from process env + parsed
7
+ * global flags + ancestor dotenv (see `providerLayer`).
8
+ */
9
+ export class CliConfig extends Context.Tag('cli/Config')() {
10
+ }
11
+ // Resilient: an invalid/empty CONTROL_PLANE_URL env (some tests set it to "")
12
+ // must NOT crash the whole layer graph — commands that need a configured URL
13
+ // validate it themselves and fail gracefully. Fall back to the default config.
14
+ const defaultConfig = {
15
+ controlPlaneUrl: new URL(DEFAULT_CONTROL_PLANE_URL),
16
+ userId: 'local-cli-user',
17
+ };
18
+ export const layer = Layer.effect(CliConfig, cliConfig.pipe(Effect.orElseSucceed(() => defaultConfig)));
19
+ /**
20
+ * Build a `ConfigProvider` layer that overlays (highest precedence last):
21
+ * process env (the default provider) ← ancestor dotenv ← explicit flag values.
22
+ * The dispatch passes flag values already parsed by `@effect/cli` (keyed by the
23
+ * `HSX_*` names the config reads), so there is no argv string re-parsing.
24
+ */
25
+ export function providerLayer(input) {
26
+ const overlay = new Map();
27
+ // dotenv first, then flags so explicit flags win within the overlay.
28
+ if (input.dotenv)
29
+ for (const [key, value] of input.dotenv)
30
+ overlay.set(key, value);
31
+ if (input.flags) {
32
+ for (const [key, value] of Object.entries(input.flags)) {
33
+ if (value !== undefined && value.length > 0)
34
+ overlay.set(key, value);
35
+ }
36
+ }
37
+ // Precedence: overlay (dotenv+flags) wins; process env is the fallback base.
38
+ const provider = ConfigProvider.fromMap(overlay, { pathDelim: '_', seqDelim: ',' }).pipe(ConfigProvider.orElse(() => ConfigProvider.fromEnv()));
39
+ return Layer.setConfigProvider(provider);
40
+ }
41
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,SAAS,EAAoC,MAAM,cAAc,CAAC;AAEtG;;;;;GAKG;AACH,MAAM,OAAO,SAAU,SAAQ,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAA6B;CAAG;AAExF,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,MAAM,aAAa,GAAmB;IACpC,eAAe,EAAE,IAAI,GAAG,CAAC,yBAAyB,CAAC;IACnD,MAAM,EAAE,gBAAgB;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAA2B,KAAK,CAAC,MAAM,CACvD,SAAS,EACT,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAC1D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAG7B;IACC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,qEAAqE;IACrE,IAAI,KAAK,CAAC,MAAM;QAAE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnF,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CACtF,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CACtD,CAAC;IACF,OAAO,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Context, Layer } from 'effect';
2
+ declare const Cwd_base: Context.TagClass<Cwd, "cli/Cwd", string>;
3
+ /**
4
+ * The process working directory, captured once at the dispatch edge and
5
+ * injected — so command handlers resolve project roots without reading
6
+ * `process.cwd()` themselves. A `--cwd` option overrides it per command.
7
+ */
8
+ export declare class Cwd extends Cwd_base {
9
+ }
10
+ export declare const layer: (dir: string) => Layer.Layer<Cwd>;
11
+ export {};
12
+ //# sourceMappingURL=cwd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwd.d.ts","sourceRoot":"","sources":["../../src/services/cwd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;;AAExC;;;;GAIG;AACH,qBAAa,GAAI,SAAQ,QAAqC;CAAG;AAEjE,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,KAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Context, Layer } from 'effect';
2
+ /**
3
+ * The process working directory, captured once at the dispatch edge and
4
+ * injected — so command handlers resolve project roots without reading
5
+ * `process.cwd()` themselves. A `--cwd` option overrides it per command.
6
+ */
7
+ export class Cwd extends Context.Tag('cli/Cwd')() {
8
+ }
9
+ export const layer = (dir) => Layer.succeed(Cwd, dir);
10
+ //# sourceMappingURL=cwd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwd.js","sourceRoot":"","sources":["../../src/services/cwd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAExC;;;;GAIG;AACH,MAAM,OAAO,GAAI,SAAQ,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAe;CAAG;AAEjE,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAoB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { type HubSpotDeveloperClient } from '@hs-x/hubspot-cli';
2
+ import { Schema, schemas } from '@hs-x/types';
3
+ import { Context, Effect, Layer } from 'effect';
4
+ import { type CliError } from '../cli-error.js';
5
+ import { ControlPlaneClient } from './control-plane.js';
6
+ import { CliHttp } from './http.js';
7
+ export type LeaseOperation = Schema.Schema.Type<typeof schemas.LeaseOperation>;
8
+ /**
9
+ * Options mirroring the legacy `createDeployHubSpotDeveloperClient(...)`
10
+ * factory. `argv` carries the raw deploy flags; credential discovery follows
11
+ * the same order the factory used (control-plane lease → CLI flags / env →
12
+ * HubSpot CLI config).
13
+ */
14
+ export interface CreateDevClientInput {
15
+ readonly argv: readonly string[];
16
+ readonly local: boolean;
17
+ readonly allowedOperations: readonly LeaseOperation[];
18
+ readonly cwd?: string;
19
+ }
20
+ /**
21
+ * HubSpot developer-client credential discovery + construction as an Effect
22
+ * service. Resolves a usable `HubSpotDeveloperClient` for deploy operations by
23
+ * trying, in order: a short-TTL control-plane lease (when `--control-plane-url`
24
+ * / `--account-id` are present), then explicit `--pak` /
25
+ * `--developer-account-id` / `--developer-api-key` flags or their `HSX_*` env
26
+ * equivalents, then the HubSpot CLI config on the machine (the same source
27
+ * `hs-x doctor` reads). Fails with a typed `CliError` (`HSX_E_API_NO_HUBSPOT_AUTH`)
28
+ * when every source is exhausted, mirroring the legacy actionable errors.
29
+ */
30
+ export interface HubSpotDevClientApi {
31
+ readonly create: (input: CreateDevClientInput) => Effect.Effect<HubSpotDeveloperClient, CliError>;
32
+ }
33
+ declare const HubSpotDevClient_base: Context.TagClass<HubSpotDevClient, "cli/HubSpotDevClient", HubSpotDevClientApi>;
34
+ export declare class HubSpotDevClient extends HubSpotDevClient_base {
35
+ }
36
+ export declare const layer: Layer.Layer<HubSpotDevClient, never, ControlPlaneClient | CliHttp>;
37
+ export {};
38
+ //# sourceMappingURL=hubspot-dev-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubspot-dev-client.d.ts","sourceRoot":"","sources":["../../src/services/hubspot-dev-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAG5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAqB,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAU,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,iBAAiB,EAAE,SAAS,cAAc,EAAE,CAAC;IACtD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;CACnG;;AAED,qBAAa,gBAAiB,SAAQ,qBAGnC;CAAG;AAWN,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAqLpF,CAAC"}
@@ -0,0 +1,256 @@
1
+ import { createHubSpotDeveloperClient, } from '@hs-x/hubspot-cli';
2
+ import { HttpClientRequest, Schema, schemas } from '@hs-x/types';
3
+ import { Config, Context, Effect, Layer } from 'effect';
4
+ import { cliError } from '../cli-error.js';
5
+ import { discoverHubSpotAccounts } from '../hubspot-auth.js';
6
+ import { ControlPlaneClient } from './control-plane.js';
7
+ import { CliHttp } from './http.js';
8
+ export class HubSpotDevClient extends Context.Tag('cli/HubSpotDevClient')() {
9
+ }
10
+ export const layer = Layer.effect(HubSpotDevClient, Effect.gen(function* () {
11
+ const controlPlane = yield* ControlPlaneClient;
12
+ const http = yield* CliHttp;
13
+ const readEnv = Config.all({
14
+ developerAccountId: Config.string('HSX_HUBSPOT_DEVELOPER_ACCOUNT_ID').pipe(Config.withDefault('')),
15
+ pak: Config.string('HSX_HUBSPOT_PAK').pipe(Config.withDefault('')),
16
+ developerApiKey: Config.string('HSX_HUBSPOT_DEVELOPER_API_KEY').pipe(Config.withDefault('')),
17
+ controlPlaneUrl: Config.string('HSX_CONTROL_PLANE_URL').pipe(Config.withDefault('')),
18
+ accountId: Config.string('HSX_ACCOUNT_ID').pipe(Config.withDefault('')),
19
+ userId: Config.string('HSX_USER_ID').pipe(Config.withDefault('')),
20
+ }).pipe(Effect.orDie);
21
+ /**
22
+ * Request a HubSpot developer lease from the control plane. Returns
23
+ * `undefined` when neither a control-plane URL nor an account id is
24
+ * configured (no lease intended); fails loud when only one is present.
25
+ */
26
+ const requestLease = (argv, allowedOperations, env) => Effect.gen(function* () {
27
+ const controlPlaneUrl = orUndefined(resolveFlag(argv, '--control-plane-url'), env.controlPlaneUrl);
28
+ const accountId = orUndefined(resolveFlag(argv, '--account-id'), env.accountId);
29
+ if (!controlPlaneUrl && !accountId) {
30
+ return undefined;
31
+ }
32
+ if (!controlPlaneUrl || !accountId) {
33
+ return yield* Effect.fail(cliError('HSX_E_API_NO_HUBSPOT_AUTH', 'Control-plane lease requires both --control-plane-url/HSX_CONTROL_PLANE_URL and --account-id/HSX_ACCOUNT_ID.'));
34
+ }
35
+ const userId = orUndefined(resolveFlag(argv, '--user-id'), env.userId) ?? 'local-cli-user';
36
+ // Use CliHttp directly (not controlPlane.fetch, which hard-requires a
37
+ // logged-in session): the lease auths via the bearer-or-`x-hsx-user-id`
38
+ // fallback from authHeaders, so it works unlinked — matching legacy.
39
+ const authHeaders = yield* controlPlane.authHeaders(userId);
40
+ const leaseUrl = new URL(`/v1/accounts/${encodeURIComponent(accountId)}/hubspot/lease`, controlPlaneUrl);
41
+ const request = HttpClientRequest.post(leaseUrl).pipe(HttpClientRequest.setHeaders({
42
+ accept: 'application/json',
43
+ 'content-type': 'application/json',
44
+ ...authHeaders,
45
+ }), HttpClientRequest.bodyText(JSON.stringify({ deployId: resolveFlag(argv, '--deploy-id'), allowedOperations }), 'application/json'));
46
+ const response = yield* http.execute(request);
47
+ const body = yield* Effect.tryPromise({
48
+ try: () => response.json(),
49
+ catch: (cause) => cliError('HSX_E_INTERNAL', `Control-plane lease response was not JSON: ${String(cause)}`),
50
+ });
51
+ if (!response.ok) {
52
+ return yield* Effect.fail(cliError('HSX_E_API_NO_HUBSPOT_AUTH', isRecord(body) && typeof body.message === 'string'
53
+ ? body.message
54
+ : `Control-plane HubSpot lease failed with status ${response.status}`));
55
+ }
56
+ return yield* Effect.try({
57
+ try: () => Schema.decodeUnknownSync(schemas.HubSpotDeveloperLease)(body),
58
+ catch: (cause) => cliError('HSX_E_INTERNAL', `Control-plane HubSpot lease payload was malformed: ${String(cause)}`),
59
+ });
60
+ });
61
+ const create = (input) => Effect.gen(function* () {
62
+ const { argv, local, allowedOperations } = input;
63
+ const cwd = input.cwd ?? process.cwd();
64
+ const env = yield* readEnv;
65
+ if (local) {
66
+ if (hasFlag(argv, '--control-plane-url') || hasFlag(argv, '--account-id')) {
67
+ yield* requestLease(argv, allowedOperations, env);
68
+ }
69
+ return yield* makeClient({
70
+ developerAccountId: Number(resolveFlag(argv, '--developer-account-id') ?? '12345'),
71
+ adapter: createLocalHubSpotDeployAdapter(),
72
+ });
73
+ }
74
+ const lease = yield* requestLease(argv, allowedOperations, env);
75
+ if (lease) {
76
+ if (!lease.personalAccessKey) {
77
+ return yield* Effect.fail(cliError('HSX_E_API_NO_HUBSPOT_AUTH', 'Control-plane HubSpot lease did not include PAK material.'));
78
+ }
79
+ return yield* makeClient({
80
+ developerAccountId: lease.developerAccountId,
81
+ personalAccessKey: lease.personalAccessKey,
82
+ ...(lease.developerApiKey ? { developerApiKey: lease.developerApiKey } : {}),
83
+ });
84
+ }
85
+ let developerAccountId = orUndefined(resolveFlag(argv, '--developer-account-id'), env.developerAccountId);
86
+ let personalAccessKey = orUndefined(resolveFlag(argv, '--pak'), env.pak);
87
+ const developerApiKey = orUndefined(resolveFlag(argv, '--developer-api-key'), env.developerApiKey);
88
+ // Fall back to the HubSpot CLI config (~/.hscli/config.yml,
89
+ // hubspot.config.yml) that `hs-x doctor` already reads, so a configured
90
+ // machine can deploy without re-passing --pak / --developer-account-id.
91
+ // Both are taken from one account (the default, or the sole configured
92
+ // account) to stay coherent; an explicit flag/env always wins.
93
+ if (!developerAccountId || !personalAccessKey) {
94
+ const discovered = yield* Effect.tryPromise({
95
+ try: () => discoverHubSpotAccounts(cwd),
96
+ catch: (cause) => cliError('HSX_E_INTERNAL', `Failed to read HubSpot CLI config: ${String(cause)}`),
97
+ });
98
+ const account = discovered?.accounts.find((candidate) => candidate.isDefault) ??
99
+ (discovered?.accounts.length === 1 ? discovered.accounts[0] : undefined);
100
+ if (account) {
101
+ developerAccountId ??= String(account.portalId);
102
+ personalAccessKey ??= account.personalAccessKey;
103
+ }
104
+ }
105
+ if (!developerAccountId) {
106
+ return yield* Effect.fail(cliError('HSX_E_API_NO_HUBSPOT_AUTH', 'HubSpot developer account id is required. Pass --developer-account-id, set HSX_HUBSPOT_DEVELOPER_ACCOUNT_ID, or configure a HubSpot CLI account (see `hs-x doctor`).'));
107
+ }
108
+ if (!personalAccessKey) {
109
+ return yield* Effect.fail(cliError('HSX_E_API_NO_HUBSPOT_AUTH', 'HubSpot PAK is required. Pass --pak, set HSX_HUBSPOT_PAK, or configure a HubSpot CLI account (see `hs-x doctor`).'));
110
+ }
111
+ return yield* makeClient({
112
+ developerAccountId,
113
+ personalAccessKey,
114
+ ...(developerApiKey ? { developerApiKey } : {}),
115
+ });
116
+ });
117
+ return { create };
118
+ }));
119
+ /**
120
+ * Wrap the imperative `@hs-x/hubspot-cli` client constructor at the Effect
121
+ * boundary. The constructor is synchronous, but isolating it keeps any future
122
+ * throw from escaping as a defect.
123
+ */
124
+ function makeClient(options) {
125
+ return Effect.try({
126
+ try: () => createHubSpotDeveloperClient(options),
127
+ catch: (cause) => cliError('HSX_E_INTERNAL', `Failed to construct HubSpot developer client: ${String(cause)}`),
128
+ });
129
+ }
130
+ function createLocalHubSpotDeployAdapter() {
131
+ return {
132
+ async uploadProject(_accountId, projectName) {
133
+ return { buildId: deterministicNumber(`build:${projectName}`, 10_000) };
134
+ },
135
+ async deployProjectV2(_accountId, projectName, buildId) {
136
+ return { deployId: deterministicNumber(`deploy:${projectName}:${buildId}`, 10_000) };
137
+ },
138
+ async getBuildStatus(_accountId, projectName, buildId) {
139
+ return { projectName, buildId, status: 'SUCCESS' };
140
+ },
141
+ async getDeployStatus(_accountId, projectName, deployId) {
142
+ return { projectName, deployId, status: 'SUCCESS' };
143
+ },
144
+ async fetchProject(_accountId, projectName) {
145
+ return { id: deterministicNumber(`project:${projectName}`, 10_000), name: projectName };
146
+ },
147
+ async createProject(_accountId, projectName) {
148
+ return { id: deterministicNumber(`project:${projectName}`, 10_000), name: projectName };
149
+ },
150
+ async fetchProjectComponentsMetadata(_accountId, projectId) {
151
+ return {
152
+ topLevelComponentMetadata: [
153
+ {
154
+ componentName: `project-${projectId}`,
155
+ type: { name: 'private-app' },
156
+ deployOutput: { appId: 321 },
157
+ featureComponents: [],
158
+ },
159
+ ],
160
+ };
161
+ },
162
+ async fetchAppMetadataBySourceId(_accountId, projectId, appUid) {
163
+ return { id: 321, projectId, sourceId: appUid };
164
+ },
165
+ async fetchAppMetadataByUid(_accountId, appUid) {
166
+ return { id: 321, sourceId: appUid };
167
+ },
168
+ async listMigrationApps() {
169
+ return { results: [{ appId: 321, name: 'Local migrated App Card app' }] };
170
+ },
171
+ async migrateCardViews(_accountId, request) {
172
+ return {
173
+ accepted: true,
174
+ appId: request.appId,
175
+ legacyCrmCardId: request.legacyCrmCardId,
176
+ replacementAppCardId: request.replacementAppCardId,
177
+ ...(request.helpDeskAppCardId ? { helpDeskAppCardId: request.helpDeskAppCardId } : {}),
178
+ };
179
+ },
180
+ async listProperties(_accountId, objectType) {
181
+ return {
182
+ objectType,
183
+ results: objectType === 'contacts' ? [{ name: 'email', type: 'string' }] : [],
184
+ };
185
+ },
186
+ async createProperty(_accountId, objectType, request) {
187
+ return { objectType, name: request.name, label: request.label, type: request.type };
188
+ },
189
+ async updateProperty(_accountId, objectType, propertyName, request) {
190
+ return {
191
+ objectType,
192
+ name: propertyName,
193
+ type: request.type ?? 'string',
194
+ ...(request.label ? { label: request.label } : {}),
195
+ };
196
+ },
197
+ async listSchemas() {
198
+ return { results: [] };
199
+ },
200
+ async createSchema(_accountId, request) {
201
+ return {
202
+ name: request.name,
203
+ labels: request.labels,
204
+ ...(request.properties
205
+ ? {
206
+ properties: request.properties.map((property) => ({
207
+ name: property.name,
208
+ label: property.label,
209
+ type: property.type,
210
+ ...(property.fieldType ? { fieldType: property.fieldType } : {}),
211
+ ...(property.groupName ? { groupName: property.groupName } : {}),
212
+ })),
213
+ }
214
+ : {}),
215
+ };
216
+ },
217
+ };
218
+ }
219
+ function deterministicNumber(input, modulo) {
220
+ let hash = 2_166_136_261;
221
+ for (let index = 0; index < input.length; index += 1) {
222
+ hash ^= input.charCodeAt(index);
223
+ hash = Math.imul(hash, 16_777_619);
224
+ }
225
+ return Math.abs(hash >>> 0) % modulo;
226
+ }
227
+ /** Prefer an explicit flag, then a non-empty env default, else `undefined`. */
228
+ function orUndefined(flagValue, envValue) {
229
+ if (flagValue !== undefined)
230
+ return flagValue;
231
+ return envValue.length > 0 ? envValue : undefined;
232
+ }
233
+ function hasFlag(argv, flag) {
234
+ return argv.includes(flag);
235
+ }
236
+ function isFlagValue(value) {
237
+ return value !== undefined && value.length > 0 && !value.startsWith('-');
238
+ }
239
+ function resolveFlag(argv, flag) {
240
+ const index = argv.indexOf(flag);
241
+ if (index !== -1) {
242
+ const next = argv[index + 1];
243
+ if (isFlagValue(next))
244
+ return next;
245
+ }
246
+ const prefix = `${flag}=`;
247
+ const found = argv.find((arg) => arg.startsWith(prefix));
248
+ if (!found)
249
+ return undefined;
250
+ const value = found.slice(prefix.length);
251
+ return value.length > 0 ? value : undefined;
252
+ }
253
+ function isRecord(value) {
254
+ return typeof value === 'object' && value !== null;
255
+ }
256
+ //# sourceMappingURL=hubspot-dev-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubspot-dev-client.js","sourceRoot":"","sources":["../../src/services/hubspot-dev-client.ts"],"names":[],"mappings":"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"}
@@ -2,15 +2,21 @@ import { BunContext } from '@effect/platform-bun';
2
2
  import { Layer } from 'effect';
3
3
  import * as AccountStore from './account-store.js';
4
4
  import * as AppPaths from './app-paths.js';
5
+ import * as CloudflareAuth from './cloudflare-auth.js';
6
+ import * as CloudflareKv from './cloudflare-kv.js';
5
7
  import * as CommandHistory from './command-history.js';
8
+ import * as CliConfig from './config.js';
6
9
  import * as ControlPlane from './control-plane.js';
7
10
  import * as EnvLoader from './env-loader.js';
11
+ import * as HubSpotDevClient from './hubspot-dev-client.js';
8
12
  import * as CliHttp from './http.js';
9
13
  import * as MachineId from './machine-id.js';
14
+ import * as Telemetry from './telemetry.js';
15
+ import * as TenantState from './tenant-state.js';
10
16
  /**
11
17
  * Platform layer: FileSystem, Path, Terminal, CommandExecutor, HttpClient.
12
18
  * The single place the CLI binds to the Bun runtime.
13
19
  */
14
20
  export declare const PlatformLive: Layer.Layer<BunContext.BunContext, never, never>;
15
- export declare const ServicesLive: Layer.Layer<BunContext.BunContext | AppPaths.AppPaths | AccountStore.AccountStore | CliHttp.CliHttp | CommandHistory.CommandHistory | ControlPlane.ControlPlaneClient | EnvLoader.EnvLoader | MachineId.MachineId, never, never>;
21
+ export declare const ServicesLive: Layer.Layer<Telemetry.Telemetry | AppPaths.AppPaths | CliHttp.CliHttp | MachineId.MachineId | CliConfig.CliConfig | BunContext.BunContext | AccountStore.AccountStore | CommandHistory.CommandHistory | EnvLoader.EnvLoader | CloudflareAuth.CloudflareAuth | ControlPlane.ControlPlaneClient | CloudflareKv.CloudflareKv | TenantState.TenantState | HubSpotDevClient.HubSpotDevClient, never, never>;
16
22
  //# sourceMappingURL=live.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/services/live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,YAAY,kDAAmB,CAAC;AAqB7C,eAAO,MAAM,YAAY,kOAAoD,CAAC"}
1
+ {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/services/live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,YAAY,kDAAmB,CAAC;AAiC7C,eAAO,MAAM,YAAY,wYAA+C,CAAC"}
@@ -2,25 +2,37 @@ import { BunContext } from '@effect/platform-bun';
2
2
  import { Layer } from 'effect';
3
3
  import * as AccountStore from './account-store.js';
4
4
  import * as AppPaths from './app-paths.js';
5
+ import * as CloudflareAuth from './cloudflare-auth.js';
6
+ import * as CloudflareKv from './cloudflare-kv.js';
5
7
  import * as CommandHistory from './command-history.js';
8
+ import * as CliConfig from './config.js';
6
9
  import * as ControlPlane from './control-plane.js';
7
10
  import * as EnvLoader from './env-loader.js';
11
+ import * as HubSpotDevClient from './hubspot-dev-client.js';
8
12
  import * as CliHttp from './http.js';
9
13
  import * as MachineId from './machine-id.js';
14
+ import * as Telemetry from './telemetry.js';
15
+ import * as TenantState from './tenant-state.js';
10
16
  /**
11
17
  * Platform layer: FileSystem, Path, Terminal, CommandExecutor, HttpClient.
12
18
  * The single place the CLI binds to the Bun runtime.
13
19
  */
14
20
  export const PlatformLive = BunContext.layer;
15
21
  /**
16
- * All CLI domain services, wired and provided the platform layer. Grows as
17
- * each phase lands; consumers (`bin`, tests) provide just this.
22
+ * All CLI domain services, wired and provided the platform layer. Consumers
23
+ * (`bin`, tests) provide just `ServicesLive`. `Reporter` is intentionally NOT
24
+ * here — it is command-scoped and provided per-invocation alongside this.
18
25
  *
19
- * AppPaths is the shared dependency of the store/history/machine-id services,
20
- * so it is provideMerge'd once and re-exposed to all of them.
26
+ * Wiring is layered by dependency depth:
27
+ * - base: stores + env-loader, all over AppPaths
28
+ * - http: CliHttp (no deps), CliConfig (no deps), CloudflareAuth (no deps)
29
+ * - clients: ControlPlane (←AccountStore,CliHttp), CloudflareKv (←CliHttp)
30
+ * - upper: TenantState (←CloudflareKv), HubSpotDevClient (←ControlPlane),
31
+ * Telemetry (←AppPaths,CliHttp,MachineId,CliConfig)
21
32
  */
22
- const StoresLive = Layer.mergeAll(AccountStore.layer, CommandHistory.layer, MachineId.layer, EnvLoader.layer).pipe(Layer.provideMerge(AppPaths.layer));
23
- /** Stores + the HTTP primitive + clients built on them (control plane). */
24
- const DomainLive = ControlPlane.layer.pipe(Layer.provideMerge(Layer.merge(StoresLive, CliHttp.layer)));
25
- export const ServicesLive = DomainLive.pipe(Layer.provideMerge(PlatformLive));
33
+ const Base = Layer.mergeAll(AccountStore.layer, CommandHistory.layer, MachineId.layer, EnvLoader.layer).pipe(Layer.provideMerge(AppPaths.layer));
34
+ const Roots = Layer.mergeAll(Base, CliHttp.layer, CliConfig.layer, CloudflareAuth.layer);
35
+ const Clients = Layer.mergeAll(ControlPlane.layer, CloudflareKv.layer).pipe(Layer.provideMerge(Roots));
36
+ const Upper = Layer.mergeAll(TenantState.layer, HubSpotDevClient.layer, Telemetry.layer).pipe(Layer.provideMerge(Clients));
37
+ export const ServicesLive = Upper.pipe(Layer.provideMerge(PlatformLive));
26
38
  //# sourceMappingURL=live.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/services/live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAE7C;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAC/B,YAAY,CAAC,KAAK,EAClB,cAAc,CAAC,KAAK,EACpB,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,KAAK,CAChB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAE3C,2EAA2E;AAC3E,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CACxC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAC3D,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/services/live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CACzB,YAAY,CAAC,KAAK,EAClB,cAAc,CAAC,KAAK,EACpB,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,KAAK,CAChB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAE3C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;AAEzF,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CACzE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAC1B,CAAC;AAEF,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAC1B,WAAW,CAAC,KAAK,EACjB,gBAAgB,CAAC,KAAK,EACtB,SAAS,CAAC,KAAK,CAChB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC"}
@@ -46,6 +46,20 @@ export interface ReporterLayerInput {
46
46
  * handlers receive only the Effect facade.
47
47
  */
48
48
  export declare function layer(input: ReporterLayerInput): Layer.Layer<Reporter>;
49
+ export interface ReporterFlags {
50
+ readonly json?: boolean;
51
+ readonly jsonStream?: boolean;
52
+ readonly verbose?: boolean;
53
+ readonly debug?: boolean;
54
+ readonly quiet?: boolean;
55
+ }
56
+ /**
57
+ * Live layer built from typed flags (the dispatch parses options via
58
+ * `@effect/cli`, not argv). Internally synthesizes the minimal argv that the
59
+ * rendering engine's mode detection reads — reporter config only, never
60
+ * re-dispatch.
61
+ */
62
+ export declare function layerFromFlags(command: string, flags: ReporterFlags, entry?: boolean): Layer.Layer<Reporter>;
49
63
  /**
50
64
  * Test layer: routes all output into a provided in-memory implementation so
51
65
  * specs can assert on emitted lines without spawning a subprocess.
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/services/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEjG;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACzD;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3D,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5D,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvF,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtF,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC7E;;AAED,qBAAa,QAAS,SAAQ,aAAoD;CAAG;AAErF,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,CAuBxD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAUtE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAEnE"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/services/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEjG;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACzD;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3D,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5D,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvF,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtF,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC7E;;AAED,qBAAa,QAAS,SAAQ,aAAoD;CAAG;AAErF,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,CAuBxD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAUtE;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,EACpB,KAAK,UAAQ,GACZ,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAQvB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAEnE"}
@@ -39,6 +39,26 @@ export function layer(input) {
39
39
  ...(input.entry === undefined ? {} : { entry: input.entry }),
40
40
  })));
41
41
  }
42
+ /**
43
+ * Live layer built from typed flags (the dispatch parses options via
44
+ * `@effect/cli`, not argv). Internally synthesizes the minimal argv that the
45
+ * rendering engine's mode detection reads — reporter config only, never
46
+ * re-dispatch.
47
+ */
48
+ export function layerFromFlags(command, flags, entry = false) {
49
+ const argv = [];
50
+ if (flags.json)
51
+ argv.push('--json');
52
+ if (flags.jsonStream)
53
+ argv.push('--json-stream');
54
+ if (flags.verbose)
55
+ argv.push('--verbose');
56
+ if (flags.debug)
57
+ argv.push('--debug');
58
+ if (flags.quiet)
59
+ argv.push('--quiet');
60
+ return layer({ command, argv, entry });
61
+ }
42
62
  /**
43
63
  * Test layer: routes all output into a provided in-memory implementation so
44
64
  * specs can assert on emitted lines without spawning a subprocess.
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/services/reporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/services/reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { FileSystem, Path } from '@effect/platform';
2
+ import { Context, Effect, Layer } from 'effect';
3
+ import { AppPaths } from './app-paths.js';
4
+ import { CliConfig } from './config.js';
5
+ import { CliHttp } from './http.js';
6
+ import { MachineId } from './machine-id.js';
7
+ type CliOutputMode = 'human' | 'plain' | 'json' | 'ndjson';
8
+ export interface TelemetryEmitInput {
9
+ readonly command: string;
10
+ readonly subcommand?: string;
11
+ readonly exitCode: number;
12
+ readonly durationMs: number;
13
+ readonly mode: CliOutputMode;
14
+ /** `--no-telemetry` was passed. */
15
+ readonly optedOutByFlag: boolean;
16
+ /** Running from the source tree (`/packages/cli/src/bin/`) — suppressed unless forced. */
17
+ readonly isSourceTreeRun: boolean;
18
+ }
19
+ export interface TelemetryNoticeInput {
20
+ readonly command: string;
21
+ readonly json: boolean;
22
+ readonly optedOutByFlag: boolean;
23
+ readonly isSourceTreeRun: boolean;
24
+ }
25
+ /**
26
+ * Anonymous best-effort usage telemetry. Every method is total: failures are
27
+ * swallowed and never affect CLI behavior. Network goes through `CliHttp`,
28
+ * paths through `AppPaths`; platform facts (os/arch/runtime) are captured once
29
+ * at the edge. The first-run notice is returned as lines for the dispatch to
30
+ * render through its `Reporter` (keeping this service Reporter-free so it stays
31
+ * in the closed `ServicesLive` layer).
32
+ */
33
+ export interface TelemetryApi {
34
+ readonly emit: (input: TelemetryEmitInput) => Effect.Effect<void>;
35
+ /** Notice lines to show on first run (and marks the stamp); `[]` if suppressed. */
36
+ readonly noticeLines: (input: TelemetryNoticeInput) => Effect.Effect<readonly string[]>;
37
+ }
38
+ declare const Telemetry_base: Context.TagClass<Telemetry, "cli/Telemetry", TelemetryApi>;
39
+ export declare class Telemetry extends Telemetry_base {
40
+ }
41
+ export declare const layer: Layer.Layer<Telemetry, never, FileSystem.FileSystem | Path.Path | AppPaths | CliHttp | MachineId | CliConfig>;
42
+ export {};
43
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/services/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAU,OAAO,EAAY,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,KAAK,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,mCAAmC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,mFAAmF;IACnF,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;CACzF;;AAED,qBAAa,SAAU,SAAQ,cAAuD;CAAG;AAIzF,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAC7B,SAAS,EACT,KAAK,EACL,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CA6F/E,CAAC"}