@kindgi/cli 0.1.6 → 0.1.7
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.
- package/README.md +35 -24
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +5 -4
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +84 -13
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts +5 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +104 -19
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/guardrails.d.ts.map +1 -1
- package/dist/commands/guardrails.js +13 -2
- package/dist/commands/guardrails.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +4 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +23 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/license.d.ts +3 -0
- package/dist/commands/license.d.ts.map +1 -0
- package/dist/commands/license.js +187 -0
- package/dist/commands/license.js.map +1 -0
- package/dist/commands/mcp.js +1 -1
- package/dist/commands/providers.d.ts.map +1 -1
- package/dist/commands/providers.js +11 -9
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +21 -9
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/webhooks.d.ts +20 -0
- package/dist/commands/webhooks.d.ts.map +1 -0
- package/dist/commands/webhooks.js +444 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/context.d.ts +4 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -0
- package/dist/context.js.map +1 -1
- package/dist/dev/already-running.d.ts +22 -0
- package/dist/dev/already-running.d.ts.map +1 -0
- package/dist/dev/already-running.js +72 -0
- package/dist/dev/already-running.js.map +1 -0
- package/dist/dev/defaults.d.ts.map +1 -1
- package/dist/dev/defaults.js +5 -2
- package/dist/dev/defaults.js.map +1 -1
- package/dist/dev/dev-lock.d.ts +50 -0
- package/dist/dev/dev-lock.d.ts.map +1 -0
- package/dist/dev/dev-lock.js +203 -0
- package/dist/dev/dev-lock.js.map +1 -0
- package/dist/dev/port.d.ts +6 -2
- package/dist/dev/port.d.ts.map +1 -1
- package/dist/dev/port.js +8 -4
- package/dist/dev/port.js.map +1 -1
- package/dist/dev/providers.d.ts.map +1 -1
- package/dist/dev/providers.js +112 -23
- package/dist/dev/providers.js.map +1 -1
- package/dist/dev/runners.d.ts +21 -2
- package/dist/dev/runners.d.ts.map +1 -1
- package/dist/dev/runtime-container.d.ts +78 -3
- package/dist/dev/runtime-container.d.ts.map +1 -1
- package/dist/dev/runtime-container.js +258 -26
- package/dist/dev/runtime-container.js.map +1 -1
- package/dist/dev/runtime-image.d.ts +4 -3
- package/dist/dev/runtime-image.d.ts.map +1 -1
- package/dist/dev/runtime-image.js +4 -3
- package/dist/dev/runtime-image.js.map +1 -1
- package/dist/dev/runtime-registry.d.ts +0 -9
- package/dist/dev/runtime-registry.d.ts.map +1 -1
- package/dist/dev/runtime-registry.js +12 -2
- package/dist/dev/runtime-registry.js.map +1 -1
- package/dist/dev/start-phases.d.ts +41 -0
- package/dist/dev/start-phases.d.ts.map +1 -0
- package/dist/dev/start-phases.js +103 -0
- package/dist/dev/start-phases.js.map +1 -0
- package/dist/init/augment-scaffolder.d.ts +20 -7
- package/dist/init/augment-scaffolder.d.ts.map +1 -1
- package/dist/init/augment-scaffolder.js +94 -21
- package/dist/init/augment-scaffolder.js.map +1 -1
- package/dist/init/pinning.d.ts +39 -0
- package/dist/init/pinning.d.ts.map +1 -0
- package/dist/init/pinning.js +130 -0
- package/dist/init/pinning.js.map +1 -0
- package/dist/init/template-files.d.ts +1 -1
- package/dist/init/tsconfig-paths.d.ts +29 -0
- package/dist/init/tsconfig-paths.d.ts.map +1 -0
- package/dist/init/tsconfig-paths.js +235 -0
- package/dist/init/tsconfig-paths.js.map +1 -0
- package/dist/init/vitest-setup.d.ts +41 -0
- package/dist/init/vitest-setup.d.ts.map +1 -0
- package/dist/init/vitest-setup.js +163 -0
- package/dist/init/vitest-setup.js.map +1 -0
- package/dist/license/aws.d.ts +24 -0
- package/dist/license/aws.d.ts.map +1 -0
- package/dist/license/aws.js +291 -0
- package/dist/license/aws.js.map +1 -0
- package/dist/license/cloud.d.ts +13 -0
- package/dist/license/cloud.d.ts.map +1 -0
- package/dist/license/cloud.js +193 -0
- package/dist/license/cloud.js.map +1 -0
- package/dist/license/expiry.d.ts +33 -0
- package/dist/license/expiry.d.ts.map +1 -0
- package/dist/license/expiry.js +35 -0
- package/dist/license/expiry.js.map +1 -0
- package/dist/license/license-key.d.ts +32 -0
- package/dist/license/license-key.d.ts.map +1 -0
- package/dist/license/license-key.js +91 -0
- package/dist/license/license-key.js.map +1 -0
- package/dist/license/protocol.d.ts +63 -0
- package/dist/license/protocol.d.ts.map +1 -0
- package/dist/license/protocol.js +102 -0
- package/dist/license/protocol.js.map +1 -0
- package/dist/license/renew.d.ts +59 -0
- package/dist/license/renew.d.ts.map +1 -0
- package/dist/license/renew.js +153 -0
- package/dist/license/renew.js.map +1 -0
- package/dist/license/stores.d.ts +19 -0
- package/dist/license/stores.d.ts.map +1 -0
- package/dist/license/stores.js +150 -0
- package/dist/license/stores.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -0
- package/dist/main.js.map +1 -1
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.js +2 -1
- package/dist/package-manager.js.map +1 -1
- package/dist/providers/preset-loader.d.ts +52 -1
- package/dist/providers/preset-loader.d.ts.map +1 -1
- package/dist/providers/preset-loader.js +85 -6
- package/dist/providers/preset-loader.js.map +1 -1
- package/dist/providers/presets/anthropic.json +1 -1
- package/dist/providers/presets/azure-openai.json +65 -0
- package/dist/providers/presets/bedrock.json +102 -0
- package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +3 -3
- package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +3 -3
- package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +11 -10
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +4 -4
- package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +16 -9
- package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +9 -11
- package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +3 -3
- package/dist/sdk-skills/kindgi-getting-started/SKILL.md +28 -5
- package/dist/sdk-skills/kindgi-java-authoring-agents/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-java-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-java-authoring-guardrails/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-java-authoring-tools/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-java-getting-started/SKILL.md +6 -1
- package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +6 -1
- package/dist/sdk-skills/kindgi-scala-authoring-agents/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-scala-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-scala-authoring-guardrails/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-scala-authoring-tools/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-scala-getting-started/SKILL.md +6 -1
- package/dist/sdk-skills/kindgi-using/SKILL.md +236 -0
- package/dist/templates/drupal/.nvmrc +1 -0
- package/dist/templates/drupal/AGENTS.md +62 -0
- package/dist/templates/drupal/README.md.tmpl +321 -0
- package/dist/templates/drupal/agents/content-agent/index.test.ts.tmpl +47 -0
- package/dist/templates/drupal/agents/content-agent/index.ts.tmpl +69 -0
- package/dist/templates/drupal/agents/content-reviewer/index.test.ts.tmpl +37 -0
- package/dist/templates/drupal/agents/content-reviewer/index.ts.tmpl +57 -0
- package/dist/templates/drupal/fixtures/node-updated.json +174 -0
- package/dist/templates/drupal/flows/content-review/index.ts.tmpl +66 -0
- package/dist/templates/drupal/gitignore +8 -0
- package/dist/templates/drupal/guardrails/no-contact-details/index.test.ts.tmpl +29 -0
- package/dist/templates/drupal/guardrails/no-contact-details/index.ts.tmpl +73 -0
- package/dist/templates/drupal/kindgi.config.ts.tmpl +41 -0
- package/dist/templates/drupal/lib/drupal.ts.tmpl +64 -0
- package/dist/templates/drupal/package.json.tmpl +31 -0
- package/dist/templates/drupal/pnpm-workspace.yaml +9 -0
- package/dist/templates/drupal/scripts/connect-drupal.mjs.tmpl +57 -0
- package/dist/templates/drupal/tools/check-content-event/index.test.ts.tmpl +72 -0
- package/dist/templates/drupal/tools/check-content-event/index.ts.tmpl +115 -0
- package/dist/templates/drupal/tsconfig.json.tmpl +28 -0
- package/dist/templates/drupal/vitest.config.ts.tmpl +14 -0
- package/dist/templates/java/AGENTS.md +6 -0
- package/dist/templates/java/README.md.tmpl +1 -1
- package/dist/templates/minimal/AGENTS.md +6 -0
- package/dist/templates/minimal/README.md.tmpl +3 -2
- package/dist/templates/minimal/package.json.tmpl +3 -2
- package/dist/templates/python/AGENTS.md +3 -2
- package/dist/templates/sample/AGENTS.md +6 -0
- package/dist/templates/sample/package.json.tmpl +3 -2
- package/dist/templates/scala/AGENTS.md +6 -0
- package/dist/templates/scala/README.md.tmpl +1 -1
- package/dist/templates/woocommerce/.nvmrc +1 -0
- package/dist/templates/woocommerce/AGENTS.md +49 -0
- package/dist/templates/woocommerce/README.md.tmpl +273 -0
- package/dist/templates/woocommerce/agents/order-reviewer/index.test.ts.tmpl +28 -0
- package/dist/templates/woocommerce/agents/order-reviewer/index.ts.tmpl +45 -0
- package/dist/templates/woocommerce/agents/store-agent/index.test.ts.tmpl +47 -0
- package/dist/templates/woocommerce/agents/store-agent/index.ts.tmpl +79 -0
- package/dist/templates/woocommerce/fixtures/order-created.json +67 -0
- package/dist/templates/woocommerce/flows/order-review/index.ts.tmpl +64 -0
- package/dist/templates/woocommerce/gitignore +8 -0
- package/dist/templates/woocommerce/guardrails/no-customer-contact-details/index.test.ts.tmpl +29 -0
- package/dist/templates/woocommerce/guardrails/no-customer-contact-details/index.ts.tmpl +74 -0
- package/dist/templates/woocommerce/kindgi.config.ts.tmpl +41 -0
- package/dist/templates/woocommerce/lib/fake-store.ts.tmpl +82 -0
- package/dist/templates/woocommerce/lib/woo.ts.tmpl +182 -0
- package/dist/templates/woocommerce/package.json.tmpl +30 -0
- package/dist/templates/woocommerce/pnpm-workspace.yaml +9 -0
- package/dist/templates/woocommerce/tools/check-order-event/index.test.ts.tmpl +76 -0
- package/dist/templates/woocommerce/tools/check-order-event/index.ts.tmpl +131 -0
- package/dist/templates/woocommerce/tools/find-orders/index.ts.tmpl +80 -0
- package/dist/templates/woocommerce/tools/publish-product/index.ts.tmpl +34 -0
- package/dist/templates/woocommerce/tools/refund/index.test.ts.tmpl +125 -0
- package/dist/templates/woocommerce/tools/refund/index.ts.tmpl +70 -0
- package/dist/templates/woocommerce/tools/refund-large/index.test.ts.tmpl +53 -0
- package/dist/templates/woocommerce/tools/refund-large/index.ts.tmpl +44 -0
- package/dist/templates/woocommerce/tools/set-price/index.ts.tmpl +36 -0
- package/dist/templates/woocommerce/tsconfig.json.tmpl +28 -0
- package/dist/templates/woocommerce/vitest.config.ts.tmpl +14 -0
- package/dist/test/defaults.d.ts +1 -1
- package/dist/test/defaults.d.ts.map +1 -1
- package/dist/test/defaults.js +2 -7
- package/dist/test/defaults.js.map +1 -1
- package/dist/test/runners.d.ts +6 -0
- package/dist/test/runners.d.ts.map +1 -1
- package/dist/test/runners.js +18 -1
- package/dist/test/runners.js.map +1 -1
- package/package.json +13 -13
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ devDependency and runs the `kindgi` it pins, never a global install.
|
|
|
13
13
|
```sh
|
|
14
14
|
npx @kindgi/cli init # in an existing app, or: init <pack-name>
|
|
15
15
|
pnpm install
|
|
16
|
-
pnpm exec kindgi dev # npm: npx --no kindgi dev
|
|
16
|
+
pnpm exec kindgi dev # npm: npx --no -- kindgi dev
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
Use the scoped name, `@kindgi/cli`: there is no unscoped `kindgi` package.
|
|
@@ -64,7 +64,7 @@ pnpm exec kindgi runs start --flow=my-pack.echo-flow --input='{"name":"Ada"}' --
|
|
|
64
64
|
## `kindgi init`
|
|
65
65
|
|
|
66
66
|
```sh
|
|
67
|
-
kindgi init [<pack-name>] [--template=minimal|sample|python] [--path=<dir>]
|
|
67
|
+
kindgi init [<pack-name>] [--template=minimal|sample|woocommerce|drupal|python] [--path=<dir>]
|
|
68
68
|
[--force] [--link-local] [--new-repo] [--pack-id=<id>]
|
|
69
69
|
```
|
|
70
70
|
|
|
@@ -115,7 +115,7 @@ devDependency) at the running CLI's own version, or linked from a checkout
|
|
|
115
115
|
| Flag | Purpose |
|
|
116
116
|
|---|---|
|
|
117
117
|
| `<pack-name>` | The pack id: lowercase kebab-case, optionally dot-namespaced (`my-pack`, `acme.legal-basics`). |
|
|
118
|
-
| `--template=<name>` | `minimal` (the default: the folders, no examples), `sample` (three tools, a guardrail, an agent and a flow), or `python` (the sample as a Python pack). |
|
|
118
|
+
| `--template=<name>` | `minimal` (the default: the folders, no examples), `sample` (three tools, a guardrail, an agent and a flow), `woocommerce` (agents for a WooCommerce store: typed store tools, approvals for large refunds and store changes, and a review of each new order), `drupal` (agents for a Drupal site through its MCP Server: house-style fixes as drafts, each change approved, and a review of each saved article), or `python` (the sample as a Python pack). |
|
|
119
119
|
| `--path=<dir>` | Where to scaffold. Default: `<pack-name>` under the current directory (for a dot-namespaced id, its last segment). |
|
|
120
120
|
| `--force` | Write into a non-empty directory. Default: refuse. |
|
|
121
121
|
| `--link-local` | Link `@kindgi/*` from the checkout the CLI runs from. |
|
|
@@ -207,12 +207,18 @@ One command runs the whole loop on your machine:
|
|
|
207
207
|
Default Credentials file (`GOOGLE_APPLICATION_CREDENTIALS`, else the one
|
|
208
208
|
`gcloud auth application-default login` writes) is mounted read-only.
|
|
209
209
|
Kindgi keeps no key files of its own.
|
|
210
|
-
- **The image:** the runtime image is pulled on first use. It
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
`kindgi auth registry --username <robot name>` (see
|
|
210
|
+
- **The image:** the runtime image is pulled on first use. It needs a pull
|
|
211
|
+
credential: sign in with GitHub at https://access.kindgi.com for one, then
|
|
212
|
+
log Docker in with it:
|
|
213
|
+
`kindgi auth registry --username <your robot name>` (see
|
|
214
214
|
[The runtime image's registry](#the-runtime-images-registry)). `kindgi dev`
|
|
215
215
|
says so when a pull is refused.
|
|
216
|
+
- **Starting:** `kindgi dev` says what the start is doing as it happens,
|
|
217
|
+
and how long each step took: pulling the image (its size, then how much
|
|
218
|
+
has come as each layer arrives), starting the container, migrating the
|
|
219
|
+
database, and waiting for the runtime to serve. A step still going says
|
|
220
|
+
so every 3 seconds. Migrating shows with a runtime that reports it (0.1.7
|
|
221
|
+
and later); with an earlier one, that time counts as waiting.
|
|
216
222
|
|
|
217
223
|
### Env files
|
|
218
224
|
|
|
@@ -272,9 +278,10 @@ A turn the fallback answers carries a `fallback-provider` warning, which
|
|
|
272
278
|
`kindgi runs start` prints. `kindgi providers unregister dev-echo` removes it
|
|
273
279
|
for good.
|
|
274
280
|
|
|
275
|
-
A preset's models carry
|
|
276
|
-
|
|
277
|
-
|
|
281
|
+
A preset's models carry a default output cap, what a call asks for when its
|
|
282
|
+
agent sets none (Gemini 3.8 Flash: 65,536 tokens, thinking included; the Claude
|
|
283
|
+
models: 16,000). `--max-output-tokens=<n>` registers them with a lower or
|
|
284
|
+
different cap.
|
|
278
285
|
|
|
279
286
|
**Declared in the config**, `kindgi dev` registers them itself. Each project
|
|
280
287
|
and git worktree has its own dev database, so this registers them in every
|
|
@@ -295,7 +302,7 @@ export default {
|
|
|
295
302
|
In `pyproject.toml`, each one is a `[[tool.kindgi.providers]]` table with
|
|
296
303
|
the same keys. A preset takes:
|
|
297
304
|
- `models`;
|
|
298
|
-
- `project
|
|
305
|
+
- the settings its preset asks for, each required: `project` for `gemini`, `resourceName` and `deployments` for `azure-openai`, `region` for `bedrock`. Another preset's setting is refused. `deployments` is a map of model to deployment (`{ 'gpt-6.1-sol': 'gpt-6-1-sol' }`, a `[tool.kindgi.providers.deployments]` table in `pyproject.toml`);
|
|
299
306
|
- `secret`: the key's name, in place of the preset's own;
|
|
300
307
|
- `maxOutputTokens`.
|
|
301
308
|
|
|
@@ -434,11 +441,15 @@ kindgi test [--watch] [--reporter <name>] [--path <dir>] [-- <vitest-args>...]
|
|
|
434
441
|
```
|
|
435
442
|
|
|
436
443
|
Runs the pack's tests with the pack's own vitest (the CLI bundles none, so the
|
|
437
|
-
pack chooses its vitest version).
|
|
438
|
-
and a first test.
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
`
|
|
444
|
+
pack chooses its vitest version). A pack from `kindgi init <name>` has a
|
|
445
|
+
`vitest.config.ts` and a first test. In an app Kindgi was added to, `kindgi
|
|
446
|
+
init` writes `vitest.config.mts` (`.ts` in a `"type": "module"` app), which
|
|
447
|
+
runs `kindgi/**/*.test.ts` with the app's tsconfig `paths` as
|
|
448
|
+
`resolve.alias`, and adds `vitest` and `vite`, unless the app runs vitest
|
|
449
|
+
already. `--watch` runs vitest in watch mode; everything after `--` goes to
|
|
450
|
+
vitest as is. The CLI refuses to run without a `vitest.config.*` (`.ts`,
|
|
451
|
+
`.mts`, `.cts`, `.js`, `.mjs` or `.cjs`) at the pack root, and uses
|
|
452
|
+
`pnpm exec vitest` in a pnpm project, else `npx --no-install vitest`.
|
|
442
453
|
|
|
443
454
|
## `kindgi build`
|
|
444
455
|
|
|
@@ -813,14 +824,14 @@ with `kindgi auth whoami`.
|
|
|
813
824
|
|
|
814
825
|
### The runtime image's registry
|
|
815
826
|
|
|
816
|
-
The Kindgi runtime image `kindgi dev` runs
|
|
817
|
-
|
|
818
|
-
|
|
827
|
+
The Kindgi runtime image `kindgi dev` runs needs a pull credential (a robot
|
|
828
|
+
name and a token). Sign in with GitHub at https://access.kindgi.com for one,
|
|
829
|
+
then log Docker in once:
|
|
819
830
|
|
|
820
831
|
```sh
|
|
821
|
-
kindgi auth registry --username <robot name>
|
|
822
|
-
printf '%s' "$TOKEN" | kindgi auth registry --username <robot name> --password-stdin
|
|
823
|
-
kindgi auth registry --check
|
|
832
|
+
kindgi auth registry --username <your robot name> # prompts for the token, without echoing it
|
|
833
|
+
printf '%s' "$TOKEN" | kindgi auth registry --username <your robot name> --password-stdin
|
|
834
|
+
kindgi auth registry --check # only check access, no login
|
|
824
835
|
```
|
|
825
836
|
|
|
826
837
|
It runs `docker login` with the token on its stdin, never in its arguments,
|
|
@@ -828,8 +839,8 @@ so the credential lives in Docker's own credential store: Kindgi stores
|
|
|
828
839
|
nothing. Then it checks that Docker can pull the exact image this CLI runs
|
|
829
840
|
(pinned by digest; with `docker buildx imagetools inspect`, or
|
|
830
841
|
`docker manifest inspect` by digest where buildx isn't installed), and a
|
|
831
|
-
failure says whether it's access (
|
|
832
|
-
|
|
842
|
+
failure says whether it's access (a pull credential from
|
|
843
|
+
https://access.kindgi.com) or the image or the network. `--registry <host>` logs in
|
|
833
844
|
to a mirror instead and checks for the same image there.
|
|
834
845
|
|
|
835
846
|
## Output and global flags
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAU,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAU,MAAM,6BAA6B,CAAC;AAkBxE,OAAO,EAEL,KAAK,OAAO,EAIb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,OAAO,EAA8B,MAAM,YAAY,CAAC;AAoFtE;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,kEAAkE;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IACpC,uCAAuC;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AA2OD,eAAO,MAAM,WAAW,EAAE,OAKzB,CAAC"}
|
package/dist/commands/auth.js
CHANGED
|
@@ -4,6 +4,7 @@ import { saveHomeConfig } from '../config.js';
|
|
|
4
4
|
import { docker } from '../dev/runtime-container.js';
|
|
5
5
|
import { DEFAULT_RUNTIME_IMAGE, RUNTIME_IMAGE_REGISTRY, imageOnRegistry, registryOf, } from '../dev/runtime-image.js';
|
|
6
6
|
import { checkDocker, checkImageAccess, credentialHelperHint, dockerLogin, registryLoginCommand, } from '../dev/runtime-registry.js';
|
|
7
|
+
import { KINDGI_ACCESS_ORIGIN } from '../license/protocol.js';
|
|
7
8
|
import { renderJson } from '../output.js';
|
|
8
9
|
import { PromptCancelled, readStdinToEnd, realTtySeam, stdinIsTty, } from '../terminal-input.js';
|
|
9
10
|
const login = {
|
|
@@ -93,7 +94,7 @@ const registry = {
|
|
|
93
94
|
optionSpec: {
|
|
94
95
|
username: {
|
|
95
96
|
type: 'string',
|
|
96
|
-
description: '
|
|
97
|
+
description: `Your pull credential's robot name, shown at ${KINDGI_ACCESS_ORIGIN} once you sign in with GitHub. Needed to log in.`,
|
|
97
98
|
},
|
|
98
99
|
'password-stdin': {
|
|
99
100
|
type: 'boolean',
|
|
@@ -122,7 +123,7 @@ function registryArgs(ctx) {
|
|
|
122
123
|
return usageError('--check only checks access, so it takes no --username or --password-stdin.');
|
|
123
124
|
}
|
|
124
125
|
if (!check && (typeof username !== 'string' || username === '')) {
|
|
125
|
-
return usageError(
|
|
126
|
+
return usageError(`Missing --username=<name>: your pull credential's robot name. Sign in with GitHub at ${KINDGI_ACCESS_ORIGIN}: the page shows this command with your robot name, and the token to paste.\nTo check access without logging in: kindgi auth registry --check.`);
|
|
126
127
|
}
|
|
127
128
|
return {
|
|
128
129
|
check,
|
|
@@ -202,8 +203,8 @@ function accessFailure(access, image, args) {
|
|
|
202
203
|
return [
|
|
203
204
|
` ✗ No access to ${image}: ${access.detail}`,
|
|
204
205
|
args.username === undefined
|
|
205
|
-
? ` The runtime image
|
|
206
|
-
: ` ${args.username} is logged in to ${args.host} but can't pull it:
|
|
206
|
+
? ` The runtime image needs a pull credential: sign in with GitHub at ${KINDGI_ACCESS_ORIGIN} for one, then log in: ${registryLoginCommand(image)}.`
|
|
207
|
+
: ` ${args.username} is logged in to ${args.host} but can't pull it: sign in at ${KINDGI_ACCESS_ORIGIN} for your current pull credential (questions: contact@kindgi.com).`,
|
|
207
208
|
];
|
|
208
209
|
}
|
|
209
210
|
if (access.kind === 'credential-helper') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAqEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAqEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAWpD,OAAO,EAEL,KAAK,oBAAoB,EAK1B,MAAM,8BAA8B,CAAC;AA+BtC,OAAO,EAAE,KAAK,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;AAChF,OAAO,KAAK,EAEV,WAAW,EAKZ,MAAM,mBAAmB,CAAC;AAsB3B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D,eAAO,MAAM,UAAU,EAAE,WAsGxB,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,wDAAwD;AACxD,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAuH7C,wBAAsB,MAAM,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAwDxE;AA47CD,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAqHD,UAAU,eAAe;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,CAAC;IAC3D,6DAA6D;IAC7D,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,kFAAkF;IAClF,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,mGAAmG;IACnG,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,uGAAuG;IACvG,QAAQ,CAAC,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;CACnD;AAgDD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAKrE;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,MAAM,EAAE,CAoC1E"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -39,6 +39,8 @@ import { createInterface } from 'node:readline';
|
|
|
39
39
|
import { discoveryRoots, findKindgiConfig, packLanguage, resolveDiscovery, } from '@kindgi/handler-runtime';
|
|
40
40
|
import { LOCAL_ENV_NAME, describeUnreadable, displayEnvPath, namesInAppFiles, packValues, readPackEnv, runtimeValues, } from '@kindgi/secrets-dotenv';
|
|
41
41
|
import { CORS_ORIGINS_VAR, EXPORT_SIGNING_KEY_PATH_VAR, PUBLIC_TOKEN_KEY_PATH_VAR, parseCorsOrigins, } from '@kindgi/env-schema';
|
|
42
|
+
import { ALREADY_RUNNING_EXIT_CODE, alreadyRunning } from '../dev/already-running.js';
|
|
43
|
+
import { DEV_LOCK_FILE, osProcesses, ownerIsLive, takeDevLock, } from '../dev/dev-lock.js';
|
|
42
44
|
import { createDevOnlyImportsCheck } from '../dev/dev-only-imports.js';
|
|
43
45
|
import { DEV_GOOGLE_CREDENTIALS_VAR, VERTEX_PROVIDER_ID, isVertexRegistration, resolveDevGoogleCredentials, vertexCredentialsHint, } from '../dev/google-credentials.js';
|
|
44
46
|
import { DEFAULT_DEV_LOG_VIEW, parseDevLogFlags, resolveDevLogView, runtimeLogLevels, showIndexerLine, showLine, showText, sourceLogEnv, } from '../dev/log-view.js';
|
|
@@ -49,9 +51,10 @@ import { PORT_SEARCH_SPAN, firstFreePort } from '../dev/port.js';
|
|
|
49
51
|
import { resolveDevProject } from '../dev/project.js';
|
|
50
52
|
import { adoptLegacyBundledEntries, declaredProviders, describeReconcile, devProvidersKey, devProvidersRecordPath, readOwnedProviders, reconcileProviders, writeOwnedProviders, } from '../dev/providers.js';
|
|
51
53
|
import { registerFromIndex } from '../dev/register.js';
|
|
52
|
-
import { RuntimeStartStopped } from '../dev/runtime-container.js';
|
|
54
|
+
import { RuntimeOwnedElsewhere, RuntimeStartStopped } from '../dev/runtime-container.js';
|
|
53
55
|
import { DEFAULT_RUNTIME_IMAGE } from '../dev/runtime-image.js';
|
|
54
56
|
import { resolveDevSandbox } from '../dev/sandbox/notices.js';
|
|
57
|
+
import { createStartPhases, formatDuration } from '../dev/start-phases.js';
|
|
55
58
|
import { describeEnvDiagnostics, loadLocalEnvSettings } from '../env/project-env.js';
|
|
56
59
|
import { declaredProviderKeyNames, listAllProviders, providerKeyNamesFromRuntime, readProviderKeysRecord, writeProviderKeysRecord, } from '../env/provider-keys.js';
|
|
57
60
|
import { PYPI_NO_BUNDLER } from '../esbuild-loader.js';
|
|
@@ -66,7 +69,7 @@ import { detectSkillDrift } from './skills.js';
|
|
|
66
69
|
export const devCommand = {
|
|
67
70
|
kind: 'leaf',
|
|
68
71
|
name: 'dev',
|
|
69
|
-
description: 'Run the Kindgi runtime as a container + hot-reload the pack under cwd.',
|
|
72
|
+
description: 'Run the Kindgi runtime as a container + hot-reload the pack under cwd. One per pack: a second exits 3 ("already running"), saying where the first is.',
|
|
70
73
|
usage: 'kindgi dev [--port <n>] [--database-url <url>] [--tenant <id>] [--dev-token <token>] [--no-watch] [--open] [--path <dir>] [--reset [--yes]] [--recreate-services] [--runtime-image <ref> | --runtime-url <url>] [--log-level <level>] [--log <subsystem>=<level>]... [--log-format pretty|json] [--quiet]',
|
|
71
74
|
optionSpec: {
|
|
72
75
|
port: {
|
|
@@ -265,6 +268,36 @@ export async function runDev(ctx) {
|
|
|
265
268
|
exitCode: 1,
|
|
266
269
|
};
|
|
267
270
|
}
|
|
271
|
+
// One kindgi dev per pack: a second would take the first's runtime
|
|
272
|
+
// container and repoint `.kindgirc.json`. It refuses before anything
|
|
273
|
+
// starts, saying where the running one is (exit 3).
|
|
274
|
+
let taken;
|
|
275
|
+
try {
|
|
276
|
+
taken = await takeDevLock(args.packDir, dev.devLockProcesses);
|
|
277
|
+
}
|
|
278
|
+
catch (cause) {
|
|
279
|
+
return { kind: 'error', stderr: `kindgi dev: ${cause.message}\n`, exitCode: 1 };
|
|
280
|
+
}
|
|
281
|
+
if (taken.kind === 'held') {
|
|
282
|
+
return alreadyRunning(taken.holder, {
|
|
283
|
+
fetch: ctx.fetch,
|
|
284
|
+
format: ctx.globals.format,
|
|
285
|
+
formatRequested: ctx.globals.formatRequested,
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
if (taken.stale !== undefined) {
|
|
289
|
+
emitProgress(` a previous kindgi dev (pid ${taken.stale.pid}) ended without removing ${DEV_LOCK_FILE}; continuing`);
|
|
290
|
+
}
|
|
291
|
+
const lock = taken.lock;
|
|
292
|
+
try {
|
|
293
|
+
return await runDevForPack(ctx, args, dev, configFile, stderrIsTTY, lock);
|
|
294
|
+
}
|
|
295
|
+
finally {
|
|
296
|
+
await lock.release();
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/** `kindgi dev` for a pack it holds the lock of (`.kindgi/dev/dev.lock`). */
|
|
300
|
+
async function runDevForPack(ctx, args, dev, configFile, stderrIsTTY, lock) {
|
|
268
301
|
// The project's env files — Kindgi runtime config (`KINDGI_*`) for
|
|
269
302
|
// this process, everything else for the pack's agents via the dev
|
|
270
303
|
// secret binding.
|
|
@@ -332,7 +365,11 @@ export async function runDev(ctx) {
|
|
|
332
365
|
// The runtime's port, before anything starts. Taken without `--port`
|
|
333
366
|
// (another `kindgi dev`, say): the next free one, which `.kindgirc.json`
|
|
334
367
|
// then records for every client. Taken with `--port`: refused.
|
|
335
|
-
const
|
|
368
|
+
const owner = {
|
|
369
|
+
owner: lock.owner,
|
|
370
|
+
ownerIsLive: (o) => ownerIsLive(o, dev.devLockProcesses ?? osProcesses()),
|
|
371
|
+
};
|
|
372
|
+
const port = await pickRuntimePort(dev, args, owner);
|
|
336
373
|
if (port.kind === 'error')
|
|
337
374
|
return port;
|
|
338
375
|
// Resolve the database URL. Precedence:
|
|
@@ -572,9 +609,12 @@ export async function runDev(ctx) {
|
|
|
572
609
|
? `Using the Kindgi runtime at ${args.runtimeUrl}...`
|
|
573
610
|
: `Starting the Kindgi runtime (${args.runtimeImage})...`);
|
|
574
611
|
let server;
|
|
612
|
+
// Each phase of the start as it happens, with its time (`dev/start-phases.ts`).
|
|
613
|
+
const startPhases = createStartPhases({ emit: emitProgress });
|
|
575
614
|
try {
|
|
576
|
-
server = await
|
|
615
|
+
server = await dev.startApiServer({
|
|
577
616
|
port: port.port,
|
|
617
|
+
...owner,
|
|
578
618
|
databaseUrl,
|
|
579
619
|
tenantId: effectiveTenantId,
|
|
580
620
|
token: effectiveToken,
|
|
@@ -602,10 +642,12 @@ export async function runDev(ctx) {
|
|
|
602
642
|
logLevels: runtimeLogLevels(logView),
|
|
603
643
|
onLog: (line, stream) => emitOutput(showLine('runtime', line, logView, stream)),
|
|
604
644
|
onProgress: emitProgress,
|
|
645
|
+
startPhases,
|
|
605
646
|
...(ctx.stopSignal !== undefined && { signal: ctx.stopSignal }),
|
|
606
|
-
})
|
|
647
|
+
});
|
|
607
648
|
}
|
|
608
649
|
catch (err) {
|
|
650
|
+
startPhases.close();
|
|
609
651
|
await pack.close().catch(() => undefined);
|
|
610
652
|
// Ctrl+C (or SIGTERM) while it waited: a stop, not a failure.
|
|
611
653
|
if (err instanceof RuntimeStartStopped || ctx.stopSignal?.aborted === true) {
|
|
@@ -615,13 +657,18 @@ export async function runDev(ctx) {
|
|
|
615
657
|
exitCode: 130,
|
|
616
658
|
};
|
|
617
659
|
}
|
|
660
|
+
if (err instanceof RuntimeOwnedElsewhere)
|
|
661
|
+
return ownedElsewhereRefusal(err);
|
|
618
662
|
return {
|
|
619
663
|
kind: 'error',
|
|
620
664
|
stderr: `kindgi dev couldn't start the Kindgi runtime: ${err.message}\n`,
|
|
621
665
|
exitCode: 1,
|
|
622
666
|
};
|
|
623
667
|
}
|
|
624
|
-
|
|
668
|
+
startPhases.close();
|
|
669
|
+
emitProgress(args.runtimeUrl !== undefined
|
|
670
|
+
? `✓ the Kindgi runtime is serving at ${server.baseUrl}`
|
|
671
|
+
: `✓ the Kindgi runtime is serving at ${server.baseUrl} (started in ${formatDuration(startPhases.elapsedMs())})`);
|
|
625
672
|
const client = ctx.clientFor(server.baseUrl, server.token);
|
|
626
673
|
// Boot-time register, from the index built above.
|
|
627
674
|
emitProgress('Registering primitives...');
|
|
@@ -736,6 +783,13 @@ export async function runDev(ctx) {
|
|
|
736
783
|
// Best effort — if the pack dir is read-only or something goes wrong,
|
|
737
784
|
// don't fail boot. The user can still pass --url/--token flags.
|
|
738
785
|
}
|
|
786
|
+
// Where it serves, for a second kindgi dev to say (`dev.lock`).
|
|
787
|
+
await lock
|
|
788
|
+
.update({
|
|
789
|
+
apiUrl: server.baseUrl,
|
|
790
|
+
...(server.consoleMounted === true && { consoleUrl: consoleUrlOf(server.baseUrl) }),
|
|
791
|
+
})
|
|
792
|
+
.catch(() => undefined);
|
|
739
793
|
// Emit the "you're up, here's what to do next" block live to stderr
|
|
740
794
|
// so watch-mode users see it immediately. (With --no-watch, the returned
|
|
741
795
|
// command result also carries bannerLines, flushed on exit; watch mode
|
|
@@ -1017,14 +1071,29 @@ async function loadDevProjectEnv(ctx, packDir) {
|
|
|
1017
1071
|
envFilesLabel: label(env.files.read),
|
|
1018
1072
|
};
|
|
1019
1073
|
}
|
|
1020
|
-
|
|
1074
|
+
/** Another live kindgi dev's runtime container, for this pack: untouched, and said so. */
|
|
1075
|
+
function ownedElsewhereRefusal(err) {
|
|
1076
|
+
return {
|
|
1077
|
+
kind: 'error',
|
|
1078
|
+
stderr: `kindgi dev: ${err.message}. Stop that kindgi dev first, then run kindgi dev again.\n`,
|
|
1079
|
+
exitCode: ALREADY_RUNNING_EXIT_CODE,
|
|
1080
|
+
};
|
|
1081
|
+
}
|
|
1082
|
+
async function pickRuntimePort(dev, args, owner) {
|
|
1021
1083
|
// `--runtime-url`: the developer's runtime has its own port. Port 0: any.
|
|
1022
1084
|
if (args.runtimeUrl !== undefined || args.port === 0 || dev.runtimePortInUse === undefined) {
|
|
1023
1085
|
return { kind: 'ok', port: args.port };
|
|
1024
1086
|
}
|
|
1025
|
-
const inUse = (port) => dev.runtimePortInUse({ packDir: args.packDir, port });
|
|
1026
|
-
|
|
1027
|
-
|
|
1087
|
+
const inUse = (port) => dev.runtimePortInUse({ packDir: args.packDir, port, ...owner });
|
|
1088
|
+
try {
|
|
1089
|
+
if (!(await inUse(args.port)))
|
|
1090
|
+
return { kind: 'ok', port: args.port };
|
|
1091
|
+
}
|
|
1092
|
+
catch (err) {
|
|
1093
|
+
if (err instanceof RuntimeOwnedElsewhere)
|
|
1094
|
+
return ownedElsewhereRefusal(err);
|
|
1095
|
+
throw err;
|
|
1096
|
+
}
|
|
1028
1097
|
if (args.portGiven) {
|
|
1029
1098
|
return {
|
|
1030
1099
|
kind: 'error',
|
|
@@ -1561,11 +1630,13 @@ function describeBrowserOrigins(origins) {
|
|
|
1561
1630
|
}
|
|
1562
1631
|
/**
|
|
1563
1632
|
* How to get a real model, for the banner: the presets that take an LLM
|
|
1564
|
-
* provider key (anthropic, openai, gemini-api, groq,
|
|
1565
|
-
* the dev-echo warning
|
|
1633
|
+
* provider key and nothing else (anthropic, openai, gemini-api, groq,
|
|
1634
|
+
* openrouter…), as the dev-echo warning names them. A preset that also asks
|
|
1635
|
+
* for settings (azure-openai) doesn't fit a one-line hint; doctor names its
|
|
1636
|
+
* settings.
|
|
1566
1637
|
*/
|
|
1567
1638
|
async function registerProviderHint(kindgi) {
|
|
1568
|
-
const keyed = Object.values(await loadProviderPresets()).flatMap((p) => p.secret !== undefined ? [p.name] : []);
|
|
1639
|
+
const keyed = Object.values(await loadProviderPresets()).flatMap((p) => p.secret !== undefined && (p.adapterConfig ?? []).length === 0 ? [p.name] : []);
|
|
1569
1640
|
return keyed.length > 1
|
|
1570
1641
|
? `set an LLM provider key, then ${kindgi('providers', 'register', `--preset=<${keyed.join('|')}>`)}`
|
|
1571
1642
|
: kindgi('providers', 'register', `--preset=${keyed[0] ?? 'anthropic'}`);
|