@inventarch/cli 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/README.md +19 -2
  4. package/SPEC.md +30 -0
  5. package/assets/base/71f0665cb1ffc3f3964fc7710528451f635d664bdf4b8c95005ee97c21db5928.ia.tgz +0 -0
  6. package/assets/base.json +6 -0
  7. package/assets/host/43a1f8c471141b1f2f46cef4411a9a61c00da1c1aa19d277189ae2423282bfd6.tgz +0 -0
  8. package/assets/host.json +6 -0
  9. package/assets/vocabulary.json +3268 -0
  10. package/dist/args.d.ts +62 -0
  11. package/dist/args.d.ts.map +1 -0
  12. package/dist/args.js +117 -0
  13. package/dist/args.js.map +1 -0
  14. package/dist/briefing.d.ts +76 -0
  15. package/dist/briefing.d.ts.map +1 -0
  16. package/dist/briefing.js +105 -0
  17. package/dist/briefing.js.map +1 -0
  18. package/dist/channel.d.ts +22 -0
  19. package/dist/channel.d.ts.map +1 -0
  20. package/dist/channel.js +74 -0
  21. package/dist/channel.js.map +1 -0
  22. package/dist/claude-cli.d.ts +35 -0
  23. package/dist/claude-cli.d.ts.map +1 -0
  24. package/dist/claude-cli.js +101 -0
  25. package/dist/claude-cli.js.map +1 -0
  26. package/dist/commands.d.ts +39 -0
  27. package/dist/commands.d.ts.map +1 -0
  28. package/dist/commands.js +436 -0
  29. package/dist/commands.js.map +1 -0
  30. package/dist/compile.d.ts +39 -0
  31. package/dist/compile.d.ts.map +1 -0
  32. package/dist/compile.js +136 -0
  33. package/dist/compile.js.map +1 -0
  34. package/dist/consumer.d.ts +137 -0
  35. package/dist/consumer.d.ts.map +1 -0
  36. package/dist/consumer.js +366 -0
  37. package/dist/consumer.js.map +1 -0
  38. package/dist/decline.d.ts +7 -0
  39. package/dist/decline.d.ts.map +1 -0
  40. package/dist/decline.js +78 -0
  41. package/dist/decline.js.map +1 -0
  42. package/dist/distribute.d.ts +163 -0
  43. package/dist/distribute.d.ts.map +1 -0
  44. package/dist/distribute.js +664 -0
  45. package/dist/distribute.js.map +1 -0
  46. package/dist/doctor-user.d.ts +45 -0
  47. package/dist/doctor-user.d.ts.map +1 -0
  48. package/dist/doctor-user.js +193 -0
  49. package/dist/doctor-user.js.map +1 -0
  50. package/dist/doctor.d.ts +57 -0
  51. package/dist/doctor.d.ts.map +1 -0
  52. package/dist/doctor.js +754 -0
  53. package/dist/doctor.js.map +1 -0
  54. package/dist/format.d.ts +25 -0
  55. package/dist/format.d.ts.map +1 -0
  56. package/dist/format.js +168 -0
  57. package/dist/format.js.map +1 -0
  58. package/dist/home-remedy.d.ts +10 -0
  59. package/dist/home-remedy.d.ts.map +1 -0
  60. package/dist/home-remedy.js +26 -0
  61. package/dist/home-remedy.js.map +1 -0
  62. package/dist/host-projection.d.ts +11 -0
  63. package/dist/host-projection.d.ts.map +1 -0
  64. package/dist/host-projection.js +73 -0
  65. package/dist/host-projection.js.map +1 -0
  66. package/dist/host.d.ts +162 -0
  67. package/dist/host.d.ts.map +1 -0
  68. package/dist/host.js +599 -0
  69. package/dist/host.js.map +1 -0
  70. package/dist/init.d.ts +217 -0
  71. package/dist/init.d.ts.map +1 -0
  72. package/dist/init.js +840 -0
  73. package/dist/init.js.map +1 -0
  74. package/dist/inspect.d.ts +32 -0
  75. package/dist/inspect.d.ts.map +1 -0
  76. package/dist/inspect.js +226 -0
  77. package/dist/inspect.js.map +1 -0
  78. package/dist/main.d.ts +24 -0
  79. package/dist/main.d.ts.map +1 -0
  80. package/dist/main.js +215 -0
  81. package/dist/main.js.map +1 -0
  82. package/dist/operation-help.d.ts +14 -0
  83. package/dist/operation-help.d.ts.map +1 -0
  84. package/dist/operation-help.js +75 -0
  85. package/dist/operation-help.js.map +1 -0
  86. package/dist/pack.d.ts +17 -0
  87. package/dist/pack.d.ts.map +1 -0
  88. package/dist/pack.js +121 -0
  89. package/dist/pack.js.map +1 -0
  90. package/dist/render.d.ts +165 -0
  91. package/dist/render.d.ts.map +1 -0
  92. package/dist/render.js +277 -0
  93. package/dist/render.js.map +1 -0
  94. package/dist/session.d.ts +13 -0
  95. package/dist/session.d.ts.map +1 -0
  96. package/dist/session.js +25 -0
  97. package/dist/session.js.map +1 -0
  98. package/dist/user-host.d.ts +59 -0
  99. package/dist/user-host.d.ts.map +1 -0
  100. package/dist/user-host.js +228 -0
  101. package/dist/user-host.js.map +1 -0
  102. package/dist/validate.d.ts +53 -0
  103. package/dist/validate.d.ts.map +1 -0
  104. package/dist/validate.js +220 -0
  105. package/dist/validate.js.map +1 -0
  106. package/dist/vocabulary.d.ts +55 -0
  107. package/dist/vocabulary.d.ts.map +1 -0
  108. package/dist/vocabulary.js +179 -0
  109. package/dist/vocabulary.js.map +1 -0
  110. package/package.json +153 -3
@@ -0,0 +1,163 @@
1
+ import type { Dependency, DistributionLock } from '@inventarch/db/distribution';
2
+ import type { InstallationPlan } from '@inventarch/distribution/install';
3
+ import type { RegistryChoice, RegistryLevel } from '@inventarch/distribution/registry';
4
+ import type { Context, Host, Result } from './consumer.js';
5
+ import type { HostName } from './host-projection.js';
6
+ import type { Capabilities } from './render.js';
7
+ export type Operation = 'install' | 'update' | 'remove' | 'restore';
8
+ /** §2.8: the id grammar is `provider/name`, and a positional may pin it with `@<range>`. */
9
+ export declare const REQUEST: RegExp;
10
+ /** A positional with no range asks for whatever the source offers; nothing in the tree supplies another default. */
11
+ export declare const ANY_VERSION = "*";
12
+ export interface Applied {
13
+ readonly status: string;
14
+ readonly generation: string;
15
+ readonly counter: number;
16
+ readonly host: string;
17
+ }
18
+ export interface ChangeRow {
19
+ readonly kind: 'added' | 'removed' | 'updated' | 'shadowed';
20
+ readonly id: string;
21
+ readonly version: string;
22
+ readonly archive: string | null;
23
+ readonly origin: string;
24
+ }
25
+ /**
26
+ * Registry spec §6.1: the registry that answered for one provider — its HTTPS URL or absolute directory — and the §4
27
+ * level that chose it (`flag`, `env`, `workspace`, `user` or `default`).
28
+ */
29
+ export interface RegistrySource {
30
+ readonly provider: string;
31
+ readonly base: string;
32
+ readonly level: RegistryLevel;
33
+ }
34
+ export interface PlanView {
35
+ readonly operation: Operation;
36
+ readonly root: string;
37
+ readonly plan: InstallationPlan;
38
+ readonly rows: readonly ChangeRow[];
39
+ readonly applied: Applied | null;
40
+ /** Accepted withdrawn releases: bare ids from a catalog restore, `id@version` pins from a registry restore. */
41
+ readonly withdrawn: readonly string[];
42
+ /** The registries this command read, one per provider, sorted; empty when a catalog or the cache was the source. */
43
+ readonly registries: readonly RegistrySource[];
44
+ /** The exact command that would apply this plan; §7.6's `\` breaks are chosen here, not by the wrapper. */
45
+ readonly invocation: string;
46
+ readonly planOut: string | null;
47
+ /** Hosts whose projection this workspace owns; `applyPlan` refreshes each after the install commits. */
48
+ readonly refresh: readonly HostName[];
49
+ /** Whether `--root` was given, so every `ia host` command printed carries it (`rootedNext`). */
50
+ readonly rooted: boolean;
51
+ }
52
+ /** §2.8's join. `changes` carries ids; every other column is looked up, and an absent value is never invented. */
53
+ export declare function changeRows(plan: InstallationPlan, previous: DistributionLock | undefined): readonly ChangeRow[];
54
+ /**
55
+ * Acquisition is the only phase that can reach class 4, so it is the only phase wrapped. A DistributionError keeps
56
+ * its own code (§4.1). The service reports a transport failure — DNS, TLS, or its own 30-second timeout — as
57
+ * IA-DIST-ARTIFACT-UNAVAILABLE naming the URL (registry spec §6.4); anything that still arrives without an IA code
58
+ * is reported as a CLI failure at class 4 rather than relabelled with a service code the service never raised.
59
+ *
60
+ * The next action depends on the route the failure arrived on, because the repair does. On the catalog route the
61
+ * archive remedy applies: retry, or name the archive in a local catalog entry and resolve from that catalog offline.
62
+ * On the registry route — the default since registry discovery — a catalog-only remedy is wrong twice over: `--offline`
63
+ * without `--catalog` reads no catalog, and the failure is the registry's. Registry-route failures therefore name the
64
+ * registry sources, whether the failure was an index, `ia-registry.json` ("Registry request …") or an artifact fetched
65
+ * from an HTTPS registry ("Artifact request …"). The other registry failures each have their own remedy: the built-in
66
+ * default that is not available ("The default registry …"), a document over the 4 MiB bound ("Registry document …",
67
+ * a limit a retry cannot fix), and a directory registry that lists a release whose artifact file it lacks. All of
68
+ * these stay class 4: remote or registry content the user cannot fix in the workspace. Two registry refusals are
69
+ * class 3 and carry the remedy §4 and §7 name for them: an unmapped provider, and a request only a licensed release
70
+ * satisfies.
71
+ *
72
+ * Every other refusal passes through with its code and class, located at the file it names when the service located
73
+ * it (`.path`, e.g. `.ia/registries.json`), so §4.3's `where` is null only when there is genuinely no location.
74
+ */
75
+ export type Route = 'catalog' | 'registry';
76
+ /** Registry spec §4's remedy for an unmapped provider; `ia doctor` names the same one. */
77
+ export declare const UNMAPPED = "Every requested and locked package's provider needs a registry. Map the provider to an HTTPS URL or a workspace directory in .ia/registries.json, or pass --registry <url|dir>.";
78
+ export interface PlanRequest {
79
+ readonly signal?: AbortSignal | undefined;
80
+ readonly root: string;
81
+ readonly operation: Operation;
82
+ readonly ids: readonly string[];
83
+ readonly requestsFile: string | undefined;
84
+ readonly catalog: string | undefined;
85
+ readonly offline: boolean;
86
+ readonly to: string | undefined;
87
+ readonly allowWithdrawn: boolean;
88
+ readonly planOut: string | undefined;
89
+ readonly invocation: string;
90
+ /** Whether the invocation named `--root`; commands printed for a registered projection then carry it. */
91
+ readonly rooted?: boolean;
92
+ /** The registered projections, when the caller already found them; otherwise they are found here. */
93
+ readonly refresh?: readonly HostName[];
94
+ /**
95
+ * Registry spec §4: the command's one chooser (`registryChooser`), which reads the configuration once. It is needed
96
+ * only when registries are the source — `install` and `update` without `--catalog` or `--offline`, and `restore`
97
+ * online without `--catalog` — and the caller builds it from the host, because this function never reads the process.
98
+ */
99
+ readonly choose?: ((id: string) => RegistryChoice) | undefined;
100
+ }
101
+ /** §2.8: a positional adds or repins one direct request; `--requests` supplies the whole set the native path reads. */
102
+ export declare function mergeRequests(previous: DistributionLock | undefined, ids: readonly string[]): readonly Dependency[];
103
+ /**
104
+ * Host registration spec §4: the hosts whose projection this workspace owns. Ownership is the state file's presence,
105
+ * as `ia host` and `ia doctor` decide it. `restore` changes no admitted system, so it has none to refresh.
106
+ */
107
+ export declare const registeredProjections: (root: string, operation: Operation) => readonly HostName[];
108
+ /**
109
+ * Host registration spec §4: `--apply` refuses before any install write when a registered projection would refuse.
110
+ * A hand edit to an owned file is the refusal the refresh would raise (§6.3), so it is found here, before
111
+ * acquisition, the saved plan or the lock is touched; the remedy is the one `ia host` and `ia doctor` name for it.
112
+ * Missing, outdated and unowned files do not block: the refresh rewrites the first two and never touches the third.
113
+ * A file the mechanism cannot read — an unreadable ownership state, an aliased or oversized managed file — would
114
+ * refuse the refresh too, so it is refused here, located at that file, with the repair `ia host` names for it.
115
+ */
116
+ export declare function requireProjectionsClean(root: string, hosts: readonly HostName[], rooted: boolean): void;
117
+ export declare function collectPlan(request: PlanRequest): Promise<PlanView>;
118
+ /**
119
+ * §2.8 rule 2's second half, separated from the first so rule 3's question can sit between them. `collectPlan`
120
+ * never writes installation state; this is the only call in the consumer that does, and `applyInstallation`
121
+ * re-runs the installer's own staleness check before it writes anything. Host registration spec §4 then refreshes
122
+ * each registered projection; that writes only the projection's own files and state, never installation state. A
123
+ * refused refresh is class 3 naming the first refusal, and the count when more than one host refused (file comment).
124
+ */
125
+ export declare function applyPlan(view: PlanView): PlanView;
126
+ /**
127
+ * The `--json` envelope (§2.8): `{version: 1, command, plan, applied?, refresh?, registries?, withdrawn?, planOut?}`.
128
+ *
129
+ * - `plan` is the planner's own value, unchanged.
130
+ * - `registries` (registry spec §6.1) is present only when registries were the source: one `{provider, base, level}`
131
+ * per provider, sorted by provider, then base. `base` is the HTTPS URL or the absolute directory; `level` is the §4
132
+ * level that chose it, `flag`, `env`, `workspace`, `user` or `default`. For `restore` it names the registries asked
133
+ * whether a locked release was withdrawn. A package's registry is the entry for its provider.
134
+ * - `withdrawn` lists the withdrawn releases `--allow-withdrawn` accepted, and its entries differ by source: a catalog
135
+ * restore names bare package ids, as it always has; a registry restore names `id@version` pins (§6.3).
136
+ */
137
+ export declare function planEnvelope(view: PlanView): unknown;
138
+ export declare function renderPlan(view: PlanView, caps: Capabilities): string;
139
+ /** §2.8 rule 3's one question, asked once and only where an answer can arrive. */
140
+ export declare const CONFIRMATION = "Apply these changes? [y/N] ";
141
+ /**
142
+ * The change summary rule 3 requires the question to show: what the preview shows about what would change, without
143
+ * the preview's "nothing has been written" note or its next-action footer, because the question *is* the action.
144
+ * It is the same blocks the preview builds, so a column the preview prints and this one does not cannot exist.
145
+ */
146
+ export declare const renderSummary: (view: PlanView, caps: Capabilities) => string;
147
+ /**
148
+ * A declined question is an answer, not a failure: §2.8 rule 3 asked, the user said no, and the command reports
149
+ * that and exits 0. The summary was on stderr, so what stdout carries is the outcome and the way to get the other
150
+ * one. `--plan-out` was already written, because a declined apply is exactly the plan-only run rule 1 describes.
151
+ */
152
+ export declare const renderDeclined: (view: PlanView, caps: Capabilities) => string;
153
+ /**
154
+ * Registry spec §4: the one chooser a command builds, from the host rather than the process, so every verb that
155
+ * reports or uses registry routing (`install`, `update`, `restore`, `doctor`) picks the same base for an id. A
156
+ * relative `--registry` or `IA_REGISTRY` directory is the caller's (`host.cwd`), and the user file is found from the
157
+ * host's environment: `IA_CONFIG_HOME`, else the per-OS directory under the home `os.homedir()` would use —
158
+ * `USERPROFILE` on Windows, `HOME` elsewhere — and, when that variable is unset, `os.homedir()` itself. Construction
159
+ * reads nothing: the configuration is read on first use, once per command.
160
+ */
161
+ export declare function hostRegistryChooser(host: Pick<Host, 'env' | 'cwd'>, root: string, flag?: string): (id: string) => RegistryChoice;
162
+ export declare function runDistribute(operation: Operation): (context: Context) => Promise<Result>;
163
+ //# sourceMappingURL=distribute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribute.d.ts","sourceRoot":"","sources":["../src/distribute.ts"],"names":[],"mappings":"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"}