@kindgi/cli 0.1.1 → 0.1.3

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 (99) hide show
  1. package/README.md +87 -16
  2. package/dist/build/containerfile.d.ts +1 -1
  3. package/dist/build/containerfile.d.ts.map +1 -1
  4. package/dist/build/containerfile.js +16 -2
  5. package/dist/build/containerfile.js.map +1 -1
  6. package/dist/build/defaults.d.ts +3 -3
  7. package/dist/build/defaults.d.ts.map +1 -1
  8. package/dist/build/defaults.js +16 -9
  9. package/dist/build/defaults.js.map +1 -1
  10. package/dist/build/host-install.d.ts +8 -0
  11. package/dist/build/host-install.d.ts.map +1 -1
  12. package/dist/build/host-install.js.map +1 -1
  13. package/dist/build/python-image.d.ts +2 -0
  14. package/dist/build/python-image.d.ts.map +1 -1
  15. package/dist/build/python-image.js +12 -1
  16. package/dist/build/python-image.js.map +1 -1
  17. package/dist/build/runners.d.ts +11 -5
  18. package/dist/build/runners.d.ts.map +1 -1
  19. package/dist/commands/build.d.ts.map +1 -1
  20. package/dist/commands/build.js +75 -43
  21. package/dist/commands/build.js.map +1 -1
  22. package/dist/commands/dev.d.ts.map +1 -1
  23. package/dist/commands/dev.js +219 -40
  24. package/dist/commands/dev.js.map +1 -1
  25. package/dist/commands/env.js +1 -1
  26. package/dist/commands/env.js.map +1 -1
  27. package/dist/commands/key.d.ts.map +1 -1
  28. package/dist/commands/key.js +143 -11
  29. package/dist/commands/key.js.map +1 -1
  30. package/dist/commands/providers.d.ts.map +1 -1
  31. package/dist/commands/providers.js +10 -1
  32. package/dist/commands/providers.js.map +1 -1
  33. package/dist/commands/runs.d.ts.map +1 -1
  34. package/dist/commands/runs.js +27 -7
  35. package/dist/commands/runs.js.map +1 -1
  36. package/dist/deploy/post.d.ts.map +1 -1
  37. package/dist/deploy/post.js +4 -0
  38. package/dist/deploy/post.js.map +1 -1
  39. package/dist/deploy/response.d.ts.map +1 -1
  40. package/dist/deploy/response.js +30 -7
  41. package/dist/deploy/response.js.map +1 -1
  42. package/dist/deploy/runners.d.ts +8 -0
  43. package/dist/deploy/runners.d.ts.map +1 -1
  44. package/dist/dev/bundler.d.ts +21 -0
  45. package/dist/dev/bundler.d.ts.map +1 -1
  46. package/dist/dev/bundler.js +46 -18
  47. package/dist/dev/bundler.js.map +1 -1
  48. package/dist/dev/defaults.d.ts +11 -0
  49. package/dist/dev/defaults.d.ts.map +1 -1
  50. package/dist/dev/defaults.js +19 -6
  51. package/dist/dev/defaults.js.map +1 -1
  52. package/dist/dev/project-database.d.ts +68 -0
  53. package/dist/dev/project-database.d.ts.map +1 -0
  54. package/dist/dev/project-database.js +142 -0
  55. package/dist/dev/project-database.js.map +1 -0
  56. package/dist/dev/project.d.ts +59 -0
  57. package/dist/dev/project.d.ts.map +1 -0
  58. package/dist/dev/project.js +182 -0
  59. package/dist/dev/project.js.map +1 -0
  60. package/dist/dev/providers.d.ts +96 -0
  61. package/dist/dev/providers.d.ts.map +1 -0
  62. package/dist/dev/providers.js +406 -0
  63. package/dist/dev/providers.js.map +1 -0
  64. package/dist/dev/runners.d.ts +17 -0
  65. package/dist/dev/runners.d.ts.map +1 -1
  66. package/dist/dev/runtime-image.d.ts +1 -1
  67. package/dist/dev/runtime-image.js +1 -1
  68. package/dist/env/pack-env-plan.d.ts +7 -1
  69. package/dist/env/pack-env-plan.d.ts.map +1 -1
  70. package/dist/env/pack-env-plan.js +9 -3
  71. package/dist/env/pack-env-plan.js.map +1 -1
  72. package/dist/providers/preset-loader.d.ts +5 -0
  73. package/dist/providers/preset-loader.d.ts.map +1 -1
  74. package/dist/providers/preset-loader.js +9 -1
  75. package/dist/providers/preset-loader.js.map +1 -1
  76. package/dist/providers/presets/gemini.json +2 -1
  77. package/dist/runs/follow.d.ts +25 -0
  78. package/dist/runs/follow.d.ts.map +1 -0
  79. package/dist/runs/follow.js +48 -0
  80. package/dist/runs/follow.js.map +1 -0
  81. package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +1 -1
  82. package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +1 -1
  83. package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +9 -3
  84. package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +1 -1
  85. package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +41 -6
  86. package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +15 -3
  87. package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +1 -1
  88. package/dist/sdk-skills/kindgi-getting-started/SKILL.md +78 -4
  89. package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +1 -1
  90. package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +1 -1
  91. package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +1 -1
  92. package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +5 -1
  93. package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +74 -5
  94. package/dist/templates/minimal/AGENTS.md +4 -3
  95. package/dist/templates/minimal/package.json.tmpl +1 -1
  96. package/dist/templates/python/AGENTS.md +5 -4
  97. package/dist/templates/sample/AGENTS.md +4 -3
  98. package/dist/templates/sample/package.json.tmpl +1 -1
  99. package/package.json +13 -12
@@ -0,0 +1,96 @@
1
+ import type { Provider, RegisterProviderInput } from '@kindgi/client';
2
+ import { type ProviderPreset } from '../providers/preset-loader.js';
3
+ /** A provider the config declares, as it will be registered. */
4
+ export interface DeclaredProvider {
5
+ readonly id: string;
6
+ readonly input: RegisterProviderInput;
7
+ }
8
+ export type DeclaredProvidersOutcome = {
9
+ readonly kind: 'ok';
10
+ readonly providers: readonly DeclaredProvider[];
11
+ } | {
12
+ readonly kind: 'invalid';
13
+ readonly message: string;
14
+ };
15
+ /**
16
+ * The config's `providers`, as registration bodies. `file` names the
17
+ * config in the messages (`kindgi.config.ts`, `pyproject.toml`).
18
+ */
19
+ export declare function declaredProviders(config: Readonly<Record<string, unknown>> | undefined, file: string, presets: Readonly<Record<string, ProviderPreset>>): DeclaredProvidersOutcome;
20
+ /** What this pack registered: hashes of the declared body and of the runtime's listing after. */
21
+ export interface OwnedProvider {
22
+ readonly declared: string;
23
+ readonly registered: string;
24
+ }
25
+ export type OwnedProviders = Readonly<Record<string, OwnedProvider>>;
26
+ /** Where `kindgi dev` records which providers this pack registered. */
27
+ export declare function devProvidersRecordPath(packDir: string): string;
28
+ /**
29
+ * The record's key: the dev database (host, port, name; never the
30
+ * credentials) and the tenant. Another database, or a new tenant, starts
31
+ * with nothing owned.
32
+ */
33
+ export declare function devProvidersKey(databaseUrl: string | undefined, tenantId: string): string;
34
+ /** This pack's providers in that database and tenant; nothing when the record is missing or unreadable. */
35
+ export declare function readOwnedProviders(path: string, key: string): Promise<OwnedProviders>;
36
+ export declare function writeOwnedProviders(path: string, key: string, owned: OwnedProviders): Promise<void>;
37
+ export interface ProvidersClient {
38
+ /** Every provider of the tenant (all pages). */
39
+ readonly list: () => Promise<readonly Provider[]>;
40
+ readonly register: (input: RegisterProviderInput) => Promise<unknown>;
41
+ readonly unregister: (id: string) => Promise<unknown>;
42
+ }
43
+ export type ProviderOutcome = {
44
+ readonly id: string;
45
+ readonly kind: 'registered' | 'updated' | 'unchanged' | 'removed';
46
+ }
47
+ /** Registered already, as declared, but not by this pack: left. */
48
+ | {
49
+ readonly id: string;
50
+ readonly kind: 'present';
51
+ }
52
+ /** Registered already, differently, not by this pack: left. */
53
+ | {
54
+ readonly id: string;
55
+ readonly kind: 'conflict';
56
+ }
57
+ /** This pack's before, changed since in the runtime: left, and no longer this pack's. */
58
+ | {
59
+ readonly id: string;
60
+ readonly kind: 'released';
61
+ }
62
+ /** Its secret isn't in the env files: not registered. */
63
+ | {
64
+ readonly id: string;
65
+ readonly kind: 'skipped';
66
+ readonly secret: string;
67
+ } | {
68
+ readonly id: string;
69
+ readonly kind: 'failed';
70
+ readonly message: string;
71
+ };
72
+ export interface ReconcileInputs {
73
+ readonly declared: readonly DeclaredProvider[];
74
+ readonly owned: OwnedProviders;
75
+ readonly client: ProvidersClient;
76
+ /** Whether a secret of `local` can be resolved (it's in the pack's env files). */
77
+ readonly hasSecret: (name: string) => boolean;
78
+ }
79
+ export interface ReconcileResult {
80
+ readonly outcomes: readonly ProviderOutcome[];
81
+ /** The record to keep. */
82
+ readonly owned: OwnedProviders;
83
+ }
84
+ /** Bring the runtime's providers in step with the config's. Throws only when they can't be listed. */
85
+ export declare function reconcileProviders(inputs: ReconcileInputs): Promise<ReconcileResult>;
86
+ export interface DescribeInputs {
87
+ /** The config's file name. */
88
+ readonly file: string;
89
+ /** A `kindgi` command line, in the pack's own runner. */
90
+ readonly kindgi: (...args: string[]) => string;
91
+ /** The env files `local` reads, for a missing secret's line. */
92
+ readonly envFiles: string;
93
+ }
94
+ /** The boot log's lines for a reconcile; none when the config declares nothing and nothing changed. */
95
+ export declare function describeReconcile(outcomes: readonly ProviderOutcome[], inputs: DescribeInputs): readonly string[];
96
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/dev/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,406 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright (C) 2026 Kindgi Inc.
3
+ /**
4
+ * The model providers a pack declares in its config, kept in step by
5
+ * `kindgi dev`: `providers` in `kindgi.config.ts`, or
6
+ * `[[tool.kindgi.providers]]` in `pyproject.toml`.
7
+ *
8
+ * Each project (and each git worktree) has its own dev database, so a
9
+ * provider registered by hand has to be registered again per worktree,
10
+ * after every `--reset`, and on every teammate's machine. Declared here,
11
+ * `kindgi dev` registers them on boot.
12
+ *
13
+ * A declaration is a preset with the choices `providers register
14
+ * --preset` takes, or a full registration body (`spec`), as `--spec`
15
+ * takes it. A credential is always a secret's name, resolved in `local`
16
+ * (the pack's env files); a `spec` that carries one in `adapter_config`
17
+ * is refused.
18
+ *
19
+ * The reconcile reads the runtime's providers first, so a fresh or reset
20
+ * database is handled. A provider is this pack's only while it is as
21
+ * this pack registered it: `.kindgi/dev/providers.json` records, per dev
22
+ * database and tenant, a hash of what was declared and of what the
23
+ * runtime listed after registering it. Anything else in the runtime —
24
+ * registered by hand, by another pack of the project, or changed since —
25
+ * is never touched.
26
+ */
27
+ import { createHash } from 'node:crypto';
28
+ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
29
+ import { dirname, join } from 'node:path';
30
+ import { LOCAL_ENV_NAME } from '@kindgi/secrets-dotenv';
31
+ import { stableStringify } from '../build/envelope.js';
32
+ import { presetRegistration } from '../providers/preset-loader.js';
33
+ const PRESET_KEYS = new Set([
34
+ 'preset',
35
+ 'models',
36
+ 'project',
37
+ 'secret',
38
+ 'maxOutputTokens',
39
+ ]);
40
+ /**
41
+ * `adapter_config` keys that hold a credential, compared lowercase with
42
+ * `-`/`_` dropped. A credential goes in `secret_ref`, by name.
43
+ */
44
+ const CREDENTIAL_KEYS = new Set([
45
+ 'apikey',
46
+ 'key',
47
+ 'token',
48
+ 'accesstoken',
49
+ 'bearertoken',
50
+ 'authtoken',
51
+ 'secret',
52
+ 'clientsecret',
53
+ 'password',
54
+ 'authorization',
55
+ 'credentials',
56
+ 'privatekey',
57
+ 'serviceaccountkey',
58
+ ]);
59
+ /**
60
+ * The config's `providers`, as registration bodies. `file` names the
61
+ * config in the messages (`kindgi.config.ts`, `pyproject.toml`).
62
+ */
63
+ export function declaredProviders(config, file, presets) {
64
+ const raw = config?.providers;
65
+ if (raw === undefined)
66
+ return { kind: 'ok', providers: [] };
67
+ const invalid = (message) => ({
68
+ kind: 'invalid',
69
+ message: `\`providers\` in ${file}: ${message}`,
70
+ });
71
+ if (!Array.isArray(raw)) {
72
+ return invalid('must be a list, each a `{ preset: … }` or a `{ spec: … }`.');
73
+ }
74
+ const out = [];
75
+ for (const [i, entry] of raw.entries()) {
76
+ const at = `entry ${i + 1}`;
77
+ if (!isRecord(entry))
78
+ return invalid(`${at} must be a \`{ preset: … }\` or a \`{ spec: … }\`.`);
79
+ if ('preset' in entry === 'spec' in entry) {
80
+ return invalid(`${at} must have one of \`preset\` or \`spec\`.`);
81
+ }
82
+ const built = 'preset' in entry ? fromPreset(entry, presets) : fromSpec(entry.spec);
83
+ if (built.kind === 'invalid')
84
+ return invalid(`${at}: ${built.message}`);
85
+ if (out.some((p) => p.id === built.provider.id)) {
86
+ return invalid(`${at}: provider "${built.provider.id}" is declared twice.`);
87
+ }
88
+ out.push(built.provider);
89
+ }
90
+ return { kind: 'ok', providers: out };
91
+ }
92
+ function fromPreset(entry, presets) {
93
+ const invalid = (message) => ({ kind: 'invalid', message });
94
+ const problem = presetEntryProblem(entry);
95
+ if (problem !== undefined)
96
+ return invalid(problem);
97
+ const { preset: name, models, project, secret, maxOutputTokens } = entry;
98
+ const preset = presets[name];
99
+ if (preset === undefined) {
100
+ return invalid(`no provider preset "${name}"; there are ${Object.keys(presets).join(', ')}.`);
101
+ }
102
+ const built = presetRegistration(preset, {
103
+ ...(models !== undefined && { models: models }),
104
+ ...(secret !== undefined && { secret: secret }),
105
+ envName: LOCAL_ENV_NAME,
106
+ settings: { project: project },
107
+ ...(maxOutputTokens !== undefined && { maxOutputTokens: maxOutputTokens }),
108
+ });
109
+ if (built.kind === 'err') {
110
+ // The preset's messages name the CLI flags (`--project=<…>`); the config names keys.
111
+ return invalid(built.message.replace(/--([a-z]+)=<…>/g, '`$1`'));
112
+ }
113
+ return { kind: 'ok', provider: { id: built.input.metadata.id, input: built.input } };
114
+ }
115
+ /** What's wrong with a preset entry's keys and values, before the preset is looked up. */
116
+ function presetEntryProblem(entry) {
117
+ const unknown = Object.keys(entry).filter((k) => !PRESET_KEYS.has(k));
118
+ if (unknown.length > 0) {
119
+ return `a preset takes ${[...PRESET_KEYS].map((k) => `\`${k}\``).join(', ')}; not ${unknown.map((k) => `\`${k}\``).join(', ')}.`;
120
+ }
121
+ const { preset: name, models, project, secret, maxOutputTokens } = entry;
122
+ if (typeof name !== 'string' || name === '')
123
+ return '`preset` must be a preset name.';
124
+ if (models !== undefined &&
125
+ (!Array.isArray(models) ||
126
+ models.length === 0 ||
127
+ !models.every((m) => typeof m === 'string' && m !== ''))) {
128
+ return '`models` must be a non-empty list of model names.';
129
+ }
130
+ for (const [key, value] of [
131
+ ['project', project],
132
+ ['secret', secret],
133
+ ]) {
134
+ if (value !== undefined && (typeof value !== 'string' || value === '')) {
135
+ return `\`${key}\` must be a non-empty string.`;
136
+ }
137
+ }
138
+ if (maxOutputTokens !== undefined &&
139
+ (typeof maxOutputTokens !== 'number' ||
140
+ !Number.isInteger(maxOutputTokens) ||
141
+ maxOutputTokens < 1)) {
142
+ return '`maxOutputTokens` must be a whole number of at least 1.';
143
+ }
144
+ return undefined;
145
+ }
146
+ function fromSpec(spec) {
147
+ const invalid = (message) => ({ kind: 'invalid', message });
148
+ if (!isRecord(spec)) {
149
+ return invalid('`spec` must be a registration body, as `providers register --spec` takes it.');
150
+ }
151
+ const metadata = spec.metadata;
152
+ if (!isRecord(metadata) || typeof metadata.id !== 'string' || metadata.id === '') {
153
+ return invalid('`spec.metadata.id` must name the provider.');
154
+ }
155
+ if (typeof spec.adapter_id !== 'string' || spec.adapter_id === '') {
156
+ return invalid('`spec.adapter_id` must name the adapter.');
157
+ }
158
+ const config = spec.adapter_config;
159
+ if (config !== undefined) {
160
+ if (!isRecord(config))
161
+ return invalid('`spec.adapter_config` must be an object.');
162
+ // Keys may be dotted (`extraBody.x`, one per request field): any part counts.
163
+ const credentials = Object.keys(config).filter((k) => k.split('.').some((part) => CREDENTIAL_KEYS.has(part.toLowerCase().replace(/[-_]/g, ''))));
164
+ if (credentials.length > 0) {
165
+ return invalid(`\`spec.adapter_config.${credentials[0]}\` looks like a credential. Credentials go in \`secret_ref\`, by name ({ name: "MY_API_KEY" }), with the value in the env files.`);
166
+ }
167
+ }
168
+ const ref = spec.secret_ref;
169
+ if (ref !== undefined && (!isRecord(ref) || typeof ref.name !== 'string' || ref.name === '')) {
170
+ return invalid('`spec.secret_ref` must be `{ name: "<SECRET_NAME>" }`.');
171
+ }
172
+ // Under `kindgi dev`, secrets resolve in `local`: the pack's env files.
173
+ const input = (ref === undefined
174
+ ? spec
175
+ : {
176
+ ...spec,
177
+ secret_ref: { envName: LOCAL_ENV_NAME, ...ref },
178
+ });
179
+ return { kind: 'ok', provider: { id: metadata.id, input } };
180
+ }
181
+ /** Where `kindgi dev` records which providers this pack registered. */
182
+ export function devProvidersRecordPath(packDir) {
183
+ return join(packDir, '.kindgi', 'dev', 'providers.json');
184
+ }
185
+ /**
186
+ * The record's key: the dev database (host, port, name; never the
187
+ * credentials) and the tenant. Another database, or a new tenant, starts
188
+ * with nothing owned.
189
+ */
190
+ export function devProvidersKey(databaseUrl, tenantId) {
191
+ let database = 'unknown';
192
+ if (databaseUrl !== undefined) {
193
+ try {
194
+ const url = new URL(databaseUrl);
195
+ database = `${url.hostname}:${url.port === '' ? '5432' : url.port}${url.pathname}`;
196
+ }
197
+ catch {
198
+ database = createHash('sha256').update(databaseUrl).digest('hex').slice(0, 16);
199
+ }
200
+ }
201
+ return `${database} tenant ${tenantId}`;
202
+ }
203
+ /** This pack's providers in that database and tenant; nothing when the record is missing or unreadable. */
204
+ export async function readOwnedProviders(path, key) {
205
+ const file = await readRecordFile(path);
206
+ return file?.runtimes[key] ?? {};
207
+ }
208
+ export async function writeOwnedProviders(path, key, owned) {
209
+ const file = await readRecordFile(path);
210
+ const runtimes = { ...(file?.runtimes ?? {}) };
211
+ if (Object.keys(owned).length === 0)
212
+ delete runtimes[key];
213
+ else
214
+ runtimes[key] = owned;
215
+ if (file === undefined && Object.keys(runtimes).length === 0)
216
+ return;
217
+ const next = { v: 1, runtimes };
218
+ await mkdir(dirname(path), { recursive: true });
219
+ const tmp = `${path}.${process.pid}.tmp`;
220
+ await writeFile(tmp, `${JSON.stringify(next, null, 2)}\n`, 'utf8');
221
+ await rename(tmp, path);
222
+ }
223
+ async function readRecordFile(path) {
224
+ let text;
225
+ try {
226
+ text = await readFile(path, 'utf8');
227
+ }
228
+ catch {
229
+ return undefined;
230
+ }
231
+ try {
232
+ const parsed = JSON.parse(text);
233
+ if (isRecord(parsed) && parsed.v === 1 && isRecord(parsed.runtimes)) {
234
+ return parsed;
235
+ }
236
+ }
237
+ catch {
238
+ // A record that can't be read owns nothing: providers are then left alone.
239
+ }
240
+ return undefined;
241
+ }
242
+ /** Bring the runtime's providers in step with the config's. Throws only when they can't be listed. */
243
+ export async function reconcileProviders(inputs) {
244
+ const runtime = new Map((await inputs.client.list()).map((p) => [p.id, p]));
245
+ const owned = {};
246
+ const outcomes = [];
247
+ const toRecord = [];
248
+ for (const provider of inputs.declared) {
249
+ const step = await reconcileDeclared(provider, runtime.get(provider.id), inputs);
250
+ outcomes.push(step.outcome);
251
+ if (step.keep !== undefined)
252
+ owned[provider.id] = step.keep;
253
+ if (step.registered)
254
+ toRecord.push(provider);
255
+ }
256
+ // This pack's providers its config no longer declares.
257
+ for (const [id, before] of Object.entries(inputs.owned)) {
258
+ if (inputs.declared.some((p) => p.id === id))
259
+ continue;
260
+ const step = await removeUndeclared(id, before, runtime.get(id), inputs.client);
261
+ if (step.outcome !== undefined)
262
+ outcomes.push(step.outcome);
263
+ if (step.keep !== undefined)
264
+ owned[id] = step.keep;
265
+ }
266
+ Object.assign(owned, await recordRegistered(toRecord, inputs.client));
267
+ return { outcomes, owned };
268
+ }
269
+ /**
270
+ * A provider this pack registered and its config no longer declares:
271
+ * unregistered when it is as this pack registered it, else left.
272
+ */
273
+ async function removeUndeclared(id, before, current, client) {
274
+ if (current === undefined)
275
+ return {};
276
+ if (hashOf(current) !== before.registered)
277
+ return { outcome: { id, kind: 'released' } };
278
+ try {
279
+ await client.unregister(id);
280
+ return { outcome: { id, kind: 'removed' } };
281
+ }
282
+ catch (err) {
283
+ return { outcome: { id, kind: 'failed', message: messageOf(err) }, keep: before };
284
+ }
285
+ }
286
+ /**
287
+ * The record entries for providers registered now, as the runtime lists
288
+ * them: that is what "still this pack's" is checked against. Not listed,
289
+ * they aren't recorded, and the next boot leaves them as they are.
290
+ */
291
+ async function recordRegistered(registered, client) {
292
+ if (registered.length === 0)
293
+ return {};
294
+ const after = await client.list().then((all) => new Map(all.map((p) => [p.id, p])), () => new Map());
295
+ const owned = {};
296
+ for (const provider of registered) {
297
+ const listed = after.get(provider.id);
298
+ if (listed !== undefined) {
299
+ owned[provider.id] = { declared: hashOf(provider.input), registered: hashOf(listed) };
300
+ }
301
+ }
302
+ return owned;
303
+ }
304
+ /** One declared provider against the runtime's `current`. */
305
+ async function reconcileDeclared(provider, current, inputs) {
306
+ const { id } = provider;
307
+ const before = inputs.owned[id];
308
+ // This pack's: registered by it, and as it registered it.
309
+ const mine = current !== undefined && before?.registered === hashOf(current) ? before : undefined;
310
+ if (current !== undefined && mine === undefined) {
311
+ return {
312
+ outcome: { id, kind: covers(provider.input.metadata, current) ? 'present' : 'conflict' },
313
+ };
314
+ }
315
+ const keep = mine !== undefined ? { keep: mine } : {};
316
+ if (mine !== undefined && mine.declared === hashOf(provider.input)) {
317
+ return { outcome: { id, kind: 'unchanged' }, ...keep };
318
+ }
319
+ const ref = provider.input.secret_ref;
320
+ if (ref !== undefined && ref.envName === LOCAL_ENV_NAME && !inputs.hasSecret(ref.name)) {
321
+ return { outcome: { id, kind: 'skipped', secret: ref.name }, ...keep };
322
+ }
323
+ // There's no update: a changed provider is unregistered, then registered.
324
+ try {
325
+ if (mine !== undefined)
326
+ await inputs.client.unregister(id);
327
+ }
328
+ catch (err) {
329
+ return { outcome: { id, kind: 'failed', message: messageOf(err) }, ...keep };
330
+ }
331
+ try {
332
+ await inputs.client.register(provider.input);
333
+ return {
334
+ outcome: { id, kind: mine !== undefined ? 'updated' : 'registered' },
335
+ registered: true,
336
+ };
337
+ }
338
+ catch (err) {
339
+ return { outcome: { id, kind: 'failed', message: messageOf(err) } };
340
+ }
341
+ }
342
+ /** The boot log's lines for a reconcile; none when the config declares nothing and nothing changed. */
343
+ export function describeReconcile(outcomes, inputs) {
344
+ if (outcomes.length === 0)
345
+ return [];
346
+ const unchanged = outcomes.filter((o) => o.kind === 'unchanged').map((o) => o.id);
347
+ if (unchanged.length === outcomes.length) {
348
+ return [`✓ Providers from ${inputs.file}: ${unchanged.join(', ')} (unchanged)`];
349
+ }
350
+ const lines = [`Providers from ${inputs.file}:`];
351
+ if (unchanged.length > 0)
352
+ lines.push(` · ${unchanged.join(', ')}: unchanged`);
353
+ for (const o of outcomes) {
354
+ switch (o.kind) {
355
+ case 'unchanged':
356
+ break;
357
+ case 'registered':
358
+ lines.push(` ✓ ${o.id}: registered`);
359
+ break;
360
+ case 'updated':
361
+ lines.push(` ✓ ${o.id}: registered again (changed in ${inputs.file})`);
362
+ break;
363
+ case 'removed':
364
+ lines.push(` ✓ ${o.id}: unregistered (no longer in ${inputs.file})`);
365
+ break;
366
+ case 'present':
367
+ lines.push(` · ${o.id}: registered already, not from ${inputs.file}; left as it is`);
368
+ break;
369
+ case 'conflict':
370
+ lines.push(` ⚠ ${o.id}: registered already, differently, not from ${inputs.file}; left as it is. For the config's: ${inputs.kindgi('providers', 'unregister', o.id)}, then restart kindgi dev`);
371
+ break;
372
+ case 'released':
373
+ lines.push(` · ${o.id}: changed in the runtime since kindgi dev registered it; left as it is`);
374
+ break;
375
+ case 'skipped':
376
+ lines.push(` ⚠ ${o.id}: not registered: ${o.secret} is not in ${inputs.envFiles}. Set it (${inputs.kindgi('secrets', 'set', o.secret, `--env=${LOCAL_ENV_NAME}`, '--scope=tenant')}), then restart kindgi dev`);
377
+ break;
378
+ case 'failed':
379
+ lines.push(` ✗ ${o.id}: ${o.message}`);
380
+ break;
381
+ }
382
+ }
383
+ return lines;
384
+ }
385
+ function hashOf(value) {
386
+ return `sha256:${createHash('sha256').update(stableStringify(value)).digest('hex')}`;
387
+ }
388
+ /** Whether everything `expected` says, `actual` says too (the runtime may add defaults). */
389
+ function covers(expected, actual) {
390
+ if (Array.isArray(expected)) {
391
+ return (Array.isArray(actual) &&
392
+ expected.length === actual.length &&
393
+ expected.every((item, i) => covers(item, actual[i])));
394
+ }
395
+ if (isRecord(expected)) {
396
+ return isRecord(actual) && Object.entries(expected).every(([k, v]) => covers(v, actual[k]));
397
+ }
398
+ return expected === actual;
399
+ }
400
+ function messageOf(err) {
401
+ return err instanceof Error ? err.message : String(err);
402
+ }
403
+ function isRecord(value) {
404
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
405
+ }
406
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/dev/providers.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@
7
7
  * `runIndexer` (`@kindgi/handler-runtime`), and an `fs.watch` bridge.
8
8
  */
9
9
  import type { PackServiceSupervisor, PackServiceSupervisorEvent } from '@kindgi/handler-runtime/pack-service';
10
+ import type { ProjectDatabases } from './project-database.js';
11
+ import type { ProjectOutcome } from './project.js';
10
12
  import type { PackCode } from './pack-code.js';
11
13
  /** The running Kindgi runtime `kindgi dev` talks to. */
12
14
  export interface RunningApiServer {
@@ -217,6 +219,12 @@ export interface StartedServicesHandle {
217
219
  readonly startedWith: 'docker compose' | 'docker';
218
220
  /** What the developer should know about this start: a flag that needs compose. */
219
221
  readonly notes?: readonly string[];
222
+ /**
223
+ * The project databases in this Postgres (`project-database.ts`): each
224
+ * project gets one, and the runtime connects to it. Absent: the shared
225
+ * `databaseUrl` is used as is.
226
+ */
227
+ readonly projectDatabases?: ProjectDatabases;
220
228
  }
221
229
  /**
222
230
  * Outcome of `startServices`. `kind: 'ok'` = started (with docker
@@ -308,5 +316,14 @@ export interface DevRunners {
308
316
  readonly startServices?: (options: {
309
317
  readonly recreate: boolean;
310
318
  }) => Promise<StartServicesResult>;
319
+ /** Resolve the project (default: `resolveDevProject`, with git). Tests pass their own. */
320
+ readonly resolveProject?: (input: {
321
+ readonly packDir: string;
322
+ readonly configured: unknown;
323
+ }) => Promise<ProjectOutcome>;
324
+ /** Whether there's a person at a terminal to ask (default: stdin and stderr are TTYs). */
325
+ readonly interactive?: () => boolean;
326
+ /** Ask a yes/no question (default: on the terminal). */
327
+ readonly confirm?: (question: string) => Promise<boolean>;
311
328
  }
312
329
  //# sourceMappingURL=runners.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../../src/dev/runners.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../../src/dev/runners.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sGAAsG;IACtG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/D,uFAAuF;IACvF,QAAQ,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,iHAAiH;IACjH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,4FAA4F;IAC5F,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,6CAA6C;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,gCAAgC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gDAAgD;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,GACjB;IACE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;CACjD,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAEjE,yFAAyF;AACzF,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,8EAA8E;IAC9E,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,0FAA0F;IAC1F,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,wFAAwF;IACxF,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,gEAAgE;IAChE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/D,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;CAC1B;AAED,mEAAmE;AACnE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9D,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAC9D;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS;QAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;KAC5B,EAAE,CAAC;IACJ;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,gBAAgB,GAAG,QAAQ,CAAC;IAClD,kFAAkF;IAClF,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpF;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,CACnB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,iBAAiB,KACxB,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE;QACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;QACrC,kGAAkG;QAClG,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QACxB,mFAAmF;QACnF,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;KAC/D,KAAK,WAAW,CAAC;IAClB,gDAAgD;IAChD,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,cAAc,CAAC;IAC5E;;;OAGG;IACH,QAAQ,CAAC,eAAe,EAAE,CACxB,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EACtC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACrC,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CACR;QAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC/C;QAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CACrD,CAAC;IACF,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,IAAI,EACpB,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KACpC,KACE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE;QACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;KAC5B,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnC,0FAA0F;IAC1F,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;KAC9B,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC,wDAAwD;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3D"}
@@ -9,7 +9,7 @@
9
9
  * The image is in private preview on Quay (pull credentials on request at
10
10
  * contact@kindgi.com, then `kindgi auth registry --username <name>`).
11
11
  */
12
- export declare const DEFAULT_RUNTIME_IMAGE = "quay.io/kindgi/runtime:0.1.1@sha256:eaa3a981f88f37efa3a33955d24c40df31474997e0318b006e983f411fdd8654";
12
+ export declare const DEFAULT_RUNTIME_IMAGE = "quay.io/kindgi/runtime:0.1.3@sha256:0a149b88696c4221355e0a5cb9de9609af020ec74cea145448bd22e928f259f3";
13
13
  /**
14
14
  * The registry an image reference is pulled from, read the way Docker
15
15
  * reads it: the first path component when it names a host (it has a `.`
@@ -11,7 +11,7 @@
11
11
  * The image is in private preview on Quay (pull credentials on request at
12
12
  * contact@kindgi.com, then `kindgi auth registry --username <name>`).
13
13
  */
14
- export const DEFAULT_RUNTIME_IMAGE = 'quay.io/kindgi/runtime:0.1.1@sha256:eaa3a981f88f37efa3a33955d24c40df31474997e0318b006e983f411fdd8654';
14
+ export const DEFAULT_RUNTIME_IMAGE = 'quay.io/kindgi/runtime:0.1.3@sha256:0a149b88696c4221355e0a5cb9de9609af020ec74cea145448bd22e928f259f3';
15
15
  /** Docker Hub, the registry of a reference that names none (`busybox`, `library/busybox`). */
16
16
  const DOCKER_HUB = 'docker.io';
17
17
  /**
@@ -64,7 +64,13 @@ export declare function secretReference(source: Extract<PackEnvSource, {
64
64
  * values) and `secret_env` (references), as JSON.
65
65
  */
66
66
  export declare function renderTerraform(plan: PackEnvPlan): string;
67
- /** `gcloud run deploy` flags: `--set-env-vars` and `--set-secrets`, one per line. */
67
+ /**
68
+ * `gcloud run deploy` (or `gcloud run services update`) flags:
69
+ * `--update-env-vars` and `--update-secrets`, one per line. They add or
70
+ * replace the names they list and leave the service's other variables as
71
+ * they are; `--set-*` would replace the whole env, silently dropping
72
+ * whatever else the service had (the runtime's own settings, say).
73
+ */
68
74
  export declare function renderGcloud(plan: PackEnvPlan): string;
69
75
  export declare function describePackEnvPlan(plan: PackEnvPlan): string[];
70
76
  //# sourceMappingURL=pack-env-plan.d.ts.map