@theholocron/cli 5.0.0-alpha.9 → 5.0.0-alpha.91

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.
@@ -136,10 +136,11 @@ interface Source extends ProviderIdentity {
136
136
  */
137
137
  syncLabels?(canonical: ReadonlyArray<LabelDef>, stale: ReadonlyArray<string>): Promise<string>;
138
138
  /**
139
- * Set org-level custom property values on the repo.
139
+ * Set org-level custom property values on the repo. `string[]` for
140
+ * `multi_select` properties, plain `string` for everything else.
140
141
  * Optional — providers that don't support custom properties omit this.
141
142
  */
142
- syncProperties?(values: Record<string, string>): Promise<string>;
143
+ syncProperties?(values: Record<string, string | string[]>): Promise<string>;
143
144
  /**
144
145
  * Replace the repo's topic set with the supplied list.
145
146
  * Optional — providers that don't support topics omit this.
@@ -364,8 +365,32 @@ interface DeploymentRecord {
364
365
  status: "queued" | "building" | "ready" | "error" | "cancelled";
365
366
  createdAt?: string;
366
367
  }
368
+ /** Config for `Deployment.deployFunction()` — source files, not a Git ref. */
369
+ interface DeployFunctionConfig {
370
+ /**
371
+ * Files to deploy, keyed by path relative to the project root (e.g.
372
+ * `"api/webhook.js"`, `"package.json"`). Content is plain text — the
373
+ * provider handles any wire-format encoding.
374
+ */
375
+ files: Record<string, string>;
376
+ /**
377
+ * Named deployment target. Omit for a preview deployment — same
378
+ * semantics as `triggerDeployment`'s `target`.
379
+ */
380
+ target?: DeploymentTrigger;
381
+ }
382
+ interface DeployFunctionResult {
383
+ deploymentId: string;
384
+ url: string;
385
+ }
367
386
  interface Deployment extends ProviderIdentity {
368
387
  readonly key: "deployment";
388
+ /**
389
+ * Custom domain declared in the deployment provider's configuration.
390
+ * `holocron setup` attaches it to the configured project and hands any
391
+ * returned verification record to the `dns` capability.
392
+ */
393
+ readonly domain?: string;
369
394
  listProjects(): Promise<DeploymentProject[]>;
370
395
  /** Create if missing, otherwise return existing. Idempotent. */
371
396
  ensureProject(input: {
@@ -389,6 +414,16 @@ interface Deployment extends ProviderIdentity {
389
414
  target?: DeploymentTrigger;
390
415
  }): Promise<DeploymentRecord>;
391
416
  getDeployment(deploymentId: string): Promise<DeploymentRecord>;
417
+ /**
418
+ * Deploy (or update) a project directly from source files, bypassing
419
+ * Git entirely — the non-git counterpart to `triggerDeployment`, for a
420
+ * consumer with no repo to link (a webhook receiver shipped as an npm
421
+ * package, for instance, rather than deployed from its own Git
422
+ * history). `projectId` may be a project name for providers that
423
+ * accept either. Optional — providers without a files-based deploy API
424
+ * omit this (e.g. Cloudflare Pages, git-source only today).
425
+ */
426
+ deployFunction?(projectId: string, config: DeployFunctionConfig): Promise<DeployFunctionResult>;
392
427
  /**
393
428
  * List preview deployments for a specific branch alias (e.g. "repo-pr-42").
394
429
  * Optional — providers that don't support listing by branch omit this.
@@ -401,10 +436,18 @@ interface Deployment extends ProviderIdentity {
401
436
  deletePreviewDeployments?(projectId: string, deploymentIds: string[]): Promise<number>;
402
437
  /**
403
438
  * Add a custom domain (or wildcard) to the project. Idempotent — no-op
404
- * when the domain is already present. Optional: providers without a custom
405
- * domain API omit this (e.g. Vercel manages domains separately).
439
+ * when the domain is already present. Optional: providers without a
440
+ * custom domain API omit this.
441
+ *
442
+ * Returns the DNS record needed to finish verification — `null` when
443
+ * the domain is already verified, or when the provider's API doesn't
444
+ * surface DNS-challenge details at all (e.g. Cloudflare Pages, whose
445
+ * custom-domain flow doesn't expose the same per-request verification
446
+ * handshake Vercel's does). Callers hand a non-null result straight
447
+ * to `dns.upsertRecord(result.zone, result.record)` — the exact
448
+ * pattern `setup` already uses for `Wiki.dnsRecord()`.
406
449
  */
407
- ensureCustomDomain?(projectId: string, hostname: string): Promise<void>;
450
+ ensureCustomDomain?(projectId: string, hostname: string): Promise<DnsRecordRequest | null>;
408
451
  }
409
452
  interface StorageBranch {
410
453
  id: string;
@@ -572,6 +615,17 @@ interface DnsRecord {
572
615
  priority?: number;
573
616
  proxied?: boolean;
574
617
  }
618
+ /**
619
+ * A DNS record a capability wants created, plus which zone it belongs
620
+ * to — the shape `Wiki.dnsRecord()` and `Deployment.ensureCustomDomain()`
621
+ * both hand off to `Dns.upsertRecord()`. Not tied to either capability;
622
+ * any provider that needs "here's a record, go create it" returns this.
623
+ */
624
+ interface DnsRecordRequest {
625
+ /** Zone apex passed as the first argument to `dns.upsertRecord`. */
626
+ zone: string;
627
+ record: DnsRecord;
628
+ }
575
629
  interface Dns extends ProviderIdentity {
576
630
  readonly key: "dns";
577
631
  listRecords(domain: string): Promise<DnsRecord[]>;
@@ -650,18 +704,6 @@ interface WikiProvisionOpts {
650
704
  /** Project display name used in the wiki title (e.g. "Holocron"). */
651
705
  name?: string;
652
706
  }
653
- /**
654
- * DNS record that `setup` should create for a wiki custom domain.
655
- * Returned by `Wiki.dnsRecord()` when a custom domain is configured.
656
- */
657
- interface WikiDnsRecord {
658
- /** Zone apex passed as the first argument to `dns.upsertRecord`. */
659
- zone: string;
660
- /** Full hostname for the CNAME (e.g. "wiki.theholocron.dev"). */
661
- cname: string;
662
- /** CNAME target (e.g. "holocron.docs.buildwithfern.com"). */
663
- target: string;
664
- }
665
707
  /**
666
708
  * Reverse-proxy configuration returned by `Wiki.proxyConfig()`.
667
709
  * Used by `setup` to deploy a Worker that forwards traffic to the wiki
@@ -690,7 +732,7 @@ interface Wiki extends ProviderIdentity {
690
732
  * Returns null when no custom domain is set.
691
733
  * Called by `setup` to provision the CNAME via the `dns` capability.
692
734
  */
693
- dnsRecord?(): WikiDnsRecord | null;
735
+ dnsRecord?(): DnsRecordRequest | null;
694
736
  /**
695
737
  * Reverse-proxy config when the wiki provider requires a Worker-level
696
738
  * proxy in addition to the CNAME. Returns null when no proxy is needed.
@@ -698,12 +740,34 @@ interface Wiki extends ProviderIdentity {
698
740
  */
699
741
  proxyConfig?(): WikiProxyConfig | null;
700
742
  }
743
+ /** Config for `Workers.deployScript()` — an arbitrary Worker, not a generated reverse-proxy. */
744
+ interface DeployScriptConfig {
745
+ /** The full Worker script source — a single ES module (`export default { fetch(...) {...} }`). */
746
+ code: string;
747
+ /**
748
+ * Secret bindings — `env.<name>` in the deployed Worker. Values are
749
+ * write-only; the provider never echoes them back, here or anywhere else.
750
+ */
751
+ secrets?: Record<string, string>;
752
+ /**
753
+ * Route pattern(s) this Worker should serve (e.g.
754
+ * `"sentinel.theholocron.dev/*"`). Omit for a Worker reached only via
755
+ * its `*.workers.dev` URL.
756
+ */
757
+ routes?: string[];
758
+ }
759
+ interface DeployScriptResult {
760
+ /** The deployed script's name at the provider. */
761
+ scriptName: string;
762
+ }
701
763
  /**
702
- * Edge Worker / reverse-proxy management capability.
764
+ * Edge Worker management capability.
703
765
  *
704
- * Deploys and manages Worker scripts that proxy traffic to a configured
705
- * target. Used by `setup` to wire wiki custom-domain proxies when the
706
- * wiki provider requires a Worker in addition to the CNAME.
766
+ * Deploys and manages Worker scripts. `upsertProxy` is the existing,
767
+ * narrower case `setup` uses to wire wiki custom-domain reverse-proxies;
768
+ * `deployScript` is the general case — any Worker, any code, its own
769
+ * secrets — for a consumer that isn't a reverse-proxy (a webhook
770
+ * receiver, for instance).
707
771
  */
708
772
  interface Workers extends ProviderIdentity {
709
773
  readonly key: "workers";
@@ -713,6 +777,8 @@ interface Workers extends ProviderIdentity {
713
777
  * `config.headers` on each request.
714
778
  */
715
779
  upsertProxy(hostname: string, config: WikiProxyConfig): Promise<void>;
780
+ /** Deploy (or update) an arbitrary Worker script, optionally with secrets and routes. */
781
+ deployScript(name: string, config: DeployScriptConfig): Promise<DeployScriptResult>;
716
782
  }
717
783
  interface CapabilityImpls {
718
784
  source: Source;
@@ -738,4 +804,4 @@ type CardinalityFor<K extends CapabilityKey> = (typeof CARDINALITY)[K];
738
804
  type ResolvedCapability<K extends CapabilityKey> = CardinalityFor<K> extends "many" ? CapabilityImpls[K][] : CapabilityImpls[K];
739
805
  declare function isMulti<K extends CapabilityKey>(key: K): CardinalityFor<K> extends "many" ? true : false;
740
806
  //#endregion
741
- export { Analytics, Auth, AuthDescription, AuthEvent, AuthEventType, AuthIdentity, AuthUser, CARDINALITY, CapabilityImpls, CapabilityKey, Cardinality, CardinalityFor, Ci, CiRun, CiRunFilter, CiRunStatus, ConnectionStringOptions, CreateAuthUserInput, Deployment, DeploymentProject, DeploymentProjectSettings, DeploymentRecord, DeploymentTarget, DeploymentTrigger, Dns, DnsRecord, DnsRecordType, EnsureResult, Environment, EnvironmentReviewer, Environments, Errors, Issue, IssueSearchFilter, Issues, LabelDef, LifecycleResult, LifecycleSlot, Logs, NormalizedAuthUser, Notifications, PagesConfig, ParseWebhookInput, ProviderApiError, ProviderIdentity, PullRequest, REQUIRED_CAPABILITIES, RepoRef, RepoSettings, ResolvedCapability, Ruleset, SecretScope, Secrets, Source, StatusCategory, Storage, StorageBranch, TeamEntry, TeamPermission, Tooling, ToolingDoctorReport, TrackerDoctorReport, TrackerUser, Vault, WebhookDashboardInfo, WebhookVerificationError, Wiki, WikiDnsRecord, WikiProvisionOpts, WikiProxyConfig, Workers, isMulti };
807
+ export { Analytics, Auth, AuthDescription, AuthEvent, AuthEventType, AuthIdentity, AuthUser, CARDINALITY, CapabilityImpls, CapabilityKey, Cardinality, CardinalityFor, Ci, CiRun, CiRunFilter, CiRunStatus, ConnectionStringOptions, CreateAuthUserInput, DeployFunctionConfig, DeployFunctionResult, DeployScriptConfig, DeployScriptResult, Deployment, DeploymentProject, DeploymentProjectSettings, DeploymentRecord, DeploymentTarget, DeploymentTrigger, Dns, DnsRecord, DnsRecordRequest, DnsRecordType, EnsureResult, Environment, EnvironmentReviewer, Environments, Errors, Issue, IssueSearchFilter, Issues, LabelDef, LifecycleResult, LifecycleSlot, Logs, NormalizedAuthUser, Notifications, PagesConfig, ParseWebhookInput, ProviderApiError, ProviderIdentity, PullRequest, REQUIRED_CAPABILITIES, RepoRef, RepoSettings, ResolvedCapability, Ruleset, SecretScope, Secrets, Source, StatusCategory, Storage, StorageBranch, TeamEntry, TeamPermission, Tooling, ToolingDoctorReport, TrackerDoctorReport, TrackerUser, Vault, WebhookDashboardInfo, WebhookVerificationError, Wiki, WikiProvisionOpts, WikiProxyConfig, Workers, isMulti };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theholocron/cli",
3
- "version": "5.0.0-alpha.9",
3
+ "version": "5.0.0-alpha.91",
4
4
  "description": "The Holocron CLI - a pluggable, capability-based orchestrator for spinning up and operating software projects.",
5
5
  "keywords": [
6
6
  "cli",
@@ -41,15 +41,18 @@
41
41
  ],
42
42
  "dependencies": {
43
43
  "@axiomhq/pino": "^2.0.0",
44
+ "@commitlint/lint": "^21.2.3",
45
+ "@commitlint/load": "^21.2.3",
46
+ "@commitlint/types": "^21.2.3",
44
47
  "@inquirer/prompts": "^8.5.2",
45
48
  "@inquirer/search": "^4.3.3",
46
49
  "@napi-rs/keyring": "^1.3.0",
47
50
  "@sentry/node": "^10.70.0",
48
51
  "@theholocron/components-doc": "^1.6.0",
49
52
  "@theholocron/env-utils": "^1.6.0",
50
- "@theholocron/github-client": "^1.14.2",
51
- "@theholocron/http-client": "^1.14.2",
52
- "@theholocron/observability": "^0.3.0",
53
+ "@theholocron/github-client": "^1.33.0",
54
+ "@theholocron/http-client": "^1.31.0",
55
+ "@theholocron/observability": "^0.4.0",
53
56
  "@theholocron/registry-doc": "^1.12.0",
54
57
  "chalk": "^6.0.0",
55
58
  "ora": "^9.4.1",
@@ -57,13 +60,15 @@
57
60
  "pino-pretty": "^13.1.3",
58
61
  "posthog-node": "^5.51.6",
59
62
  "yargs": "^18.1.0",
60
- "@theholocron/astromech": "5.0.0-alpha.9",
61
- "@theholocron/datapad": "5.0.0-alpha.9"
63
+ "@theholocron/astromech": "5.0.0-alpha.91",
64
+ "@theholocron/datapad": "5.0.0-alpha.91"
62
65
  },
63
66
  "devDependencies": {
64
- "@theholocron/eslint-config": "^8.0.0",
65
- "@theholocron/tsconfig": "^8.0.0",
66
- "@theholocron/vitest-config": "^8.0.0",
67
+ "@commitlint/config-conventional": "^21.2.3",
68
+ "@theholocron/commitlint-config": "^8.4.5",
69
+ "@theholocron/eslint-config": "^8.6.0",
70
+ "@theholocron/tsconfig": "^8.4.5",
71
+ "@theholocron/vitest-config": "^8.4.5",
67
72
  "@types/node": "^26",
68
73
  "@types/yargs": "^17.0.35",
69
74
  "@vitest/coverage-v8": "^4.1.11",
@@ -75,7 +80,7 @@
75
80
  "tsx": "4.23.12",
76
81
  "typescript": "^5.9.3",
77
82
  "vitest": "^4.1.11",
78
- "@theholocron/rollup-plugin-transform-template": "5.0.0-alpha.9"
83
+ "@theholocron/rollup-plugin-transform-template": "5.0.0-alpha.91"
79
84
  },
80
85
  "engines": {
81
86
  "node": ">=22.0.0"