@kindgi/cli 0.1.7 → 0.1.8-rc.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.
- package/README.md +1 -1
- package/dist/api-address.d.ts +57 -0
- package/dist/api-address.d.ts.map +1 -0
- package/dist/api-address.js +144 -0
- package/dist/api-address.js.map +1 -0
- package/dist/build/defaults.d.ts +9 -0
- package/dist/build/defaults.d.ts.map +1 -1
- package/dist/build/defaults.js +132 -30
- package/dist/build/defaults.js.map +1 -1
- package/dist/build/hosted.d.ts +32 -0
- package/dist/build/hosted.d.ts.map +1 -0
- package/dist/build/hosted.js +62 -0
- package/dist/build/hosted.js.map +1 -0
- package/dist/build/runners.d.ts +10 -0
- package/dist/build/runners.d.ts.map +1 -1
- package/dist/commands/adapters.d.ts.map +1 -1
- package/dist/commands/adapters.js +5 -9
- package/dist/commands/adapters.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +2 -1
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/artifacts.js +1 -1
- package/dist/commands/artifacts.js.map +1 -1
- package/dist/commands/auth.js +1 -1
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/blocks.d.ts.map +1 -1
- package/dist/commands/blocks.js +4 -3
- package/dist/commands/blocks.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +191 -47
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/conversations.js +1 -1
- package/dist/commands/conversations.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +296 -36
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +0 -2
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +74 -54
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +64 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/flows.d.ts.map +1 -1
- package/dist/commands/flows.js +2 -1
- package/dist/commands/flows.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.js +13 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/license.d.ts.map +1 -1
- package/dist/commands/license.js +130 -5
- package/dist/commands/license.js.map +1 -1
- package/dist/commands/projects.d.ts.map +1 -1
- package/dist/commands/projects.js +67 -8
- package/dist/commands/projects.js.map +1 -1
- package/dist/commands/runs.d.ts.map +1 -1
- package/dist/commands/runs.js +2 -2
- package/dist/commands/runs.js.map +1 -1
- package/dist/commands/schedules.d.ts.map +1 -1
- package/dist/commands/schedules.js +30 -2
- package/dist/commands/schedules.js.map +1 -1
- package/dist/commands/secrets.js +1 -1
- package/dist/commands/secrets.js.map +1 -1
- package/dist/commands/skills.d.ts +42 -6
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +258 -158
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/sso.d.ts.map +1 -1
- package/dist/commands/sso.js +5 -2
- package/dist/commands/sso.js.map +1 -1
- package/dist/commands/webhooks.d.ts +0 -6
- package/dist/commands/webhooks.d.ts.map +1 -1
- package/dist/commands/webhooks.js +12 -85
- package/dist/commands/webhooks.js.map +1 -1
- package/dist/config.d.ts +34 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +58 -20
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +8 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -0
- package/dist/context.js.map +1 -1
- package/dist/deploy/defaults.d.ts.map +1 -1
- package/dist/deploy/defaults.js +5 -1
- package/dist/deploy/defaults.js.map +1 -1
- package/dist/deploy/post.d.ts +9 -1
- package/dist/deploy/post.d.ts.map +1 -1
- package/dist/deploy/post.js +100 -2
- package/dist/deploy/post.js.map +1 -1
- package/dist/deploy/response.d.ts.map +1 -1
- package/dist/deploy/response.js +3 -0
- package/dist/deploy/response.js.map +1 -1
- package/dist/deploy/runners.d.ts +67 -0
- package/dist/deploy/runners.d.ts.map +1 -1
- package/dist/dev/blocked.d.ts +57 -0
- package/dist/dev/blocked.d.ts.map +1 -0
- package/dist/dev/blocked.js +127 -0
- package/dist/dev/blocked.js.map +1 -0
- package/dist/dev/defaults.d.ts +2 -1
- package/dist/dev/defaults.d.ts.map +1 -1
- package/dist/dev/defaults.js +20 -5
- package/dist/dev/defaults.js.map +1 -1
- package/dist/dev/port.d.ts +2 -1
- package/dist/dev/port.d.ts.map +1 -1
- package/dist/dev/port.js +11 -3
- package/dist/dev/port.js.map +1 -1
- package/dist/dev/preview-expiry.d.ts +35 -0
- package/dist/dev/preview-expiry.d.ts.map +1 -0
- package/dist/dev/preview-expiry.js +57 -0
- package/dist/dev/preview-expiry.js.map +1 -0
- package/dist/dev/runners.d.ts +6 -2
- package/dist/dev/runners.d.ts.map +1 -1
- package/dist/dev/runtime-container.d.ts +2 -0
- package/dist/dev/runtime-container.d.ts.map +1 -1
- package/dist/dev/runtime-container.js +16 -4
- package/dist/dev/runtime-container.js.map +1 -1
- package/dist/dev/runtime-image.d.ts +1 -1
- package/dist/dev/runtime-image.d.ts.map +1 -1
- package/dist/dev/runtime-image.js +1 -1
- package/dist/dev/runtime-image.js.map +1 -1
- package/dist/dev/runtime-registry.d.ts +6 -2
- package/dist/dev/runtime-registry.d.ts.map +1 -1
- package/dist/dev/runtime-registry.js +14 -15
- package/dist/dev/runtime-registry.js.map +1 -1
- package/dist/init/augment-scaffolder.d.ts +1 -1
- package/dist/init/augment-scaffolder.d.ts.map +1 -1
- package/dist/init/augment-scaffolder.js +5 -3
- package/dist/init/augment-scaffolder.js.map +1 -1
- package/dist/init/dependency-specs.d.ts +1 -1
- package/dist/init/dependency-specs.d.ts.map +1 -1
- package/dist/init/dependency-specs.js +1 -1
- package/dist/init/dependency-specs.js.map +1 -1
- package/dist/init/gitignore-patcher.d.ts +13 -3
- package/dist/init/gitignore-patcher.d.ts.map +1 -1
- package/dist/init/gitignore-patcher.js +8 -4
- package/dist/init/gitignore-patcher.js.map +1 -1
- package/dist/init/java-augment.js +1 -1
- package/dist/init/java-augment.js.map +1 -1
- package/dist/init/mode-detect.d.ts.map +1 -1
- package/dist/init/mode-detect.js +3 -2
- package/dist/init/mode-detect.js.map +1 -1
- package/dist/init/python-augment.d.ts.map +1 -1
- package/dist/init/python-augment.js +5 -4
- package/dist/init/python-augment.js.map +1 -1
- package/dist/init/scala-augment.js +2 -2
- package/dist/init/scala-augment.js.map +1 -1
- package/dist/license/expiry.d.ts +3 -1
- package/dist/license/expiry.d.ts.map +1 -1
- package/dist/license/expiry.js +4 -2
- package/dist/license/expiry.js.map +1 -1
- package/dist/license/license-key.d.ts.map +1 -1
- package/dist/license/license-key.js +2 -0
- package/dist/license/license-key.js.map +1 -1
- package/dist/license/protocol.d.ts +25 -0
- package/dist/license/protocol.d.ts.map +1 -1
- package/dist/license/protocol.js +65 -0
- package/dist/license/protocol.js.map +1 -1
- package/dist/license/renew.d.ts +18 -1
- package/dist/license/renew.d.ts.map +1 -1
- package/dist/license/renew.js +33 -4
- package/dist/license/renew.js.map +1 -1
- package/dist/license/stores.d.ts.map +1 -1
- package/dist/license/stores.js +2 -1
- package/dist/license/stores.js.map +1 -1
- 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/providers/models-guide.d.ts +7 -0
- package/dist/providers/models-guide.d.ts.map +1 -0
- package/dist/providers/models-guide.js +11 -0
- package/dist/providers/models-guide.js.map +1 -0
- package/dist/rate-limit-wait.d.ts +42 -0
- package/dist/rate-limit-wait.d.ts.map +1 -0
- package/dist/rate-limit-wait.js +104 -0
- package/dist/rate-limit-wait.js.map +1 -0
- package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +75 -5
- package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +4 -2
- package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-getting-started/SKILL.md +37 -11
- package/dist/sdk-skills/kindgi-java-authoring-agents/SKILL.md +3 -3
- package/dist/sdk-skills/kindgi-java-authoring-flows/SKILL.md +9 -3
- package/dist/sdk-skills/kindgi-java-authoring-guardrails/SKILL.md +3 -3
- package/dist/sdk-skills/kindgi-java-authoring-tools/SKILL.md +9 -4
- package/dist/sdk-skills/kindgi-java-getting-started/SKILL.md +33 -8
- 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 +6 -2
- package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +33 -8
- package/dist/sdk-skills/kindgi-scala-authoring-agents/SKILL.md +3 -3
- package/dist/sdk-skills/kindgi-scala-authoring-flows/SKILL.md +9 -3
- package/dist/sdk-skills/kindgi-scala-authoring-guardrails/SKILL.md +3 -3
- package/dist/sdk-skills/kindgi-scala-authoring-tools/SKILL.md +9 -4
- package/dist/sdk-skills/kindgi-scala-getting-started/SKILL.md +33 -8
- package/dist/sdk-skills/kindgi-using/SKILL.md +1 -1
- package/dist/templates/drupal/AGENTS.md +40 -15
- package/dist/templates/drupal/README.md.tmpl +2 -3
- package/dist/templates/drupal/kindgi.config.ts.tmpl +23 -19
- package/dist/templates/java/AGENTS.md +32 -3
- package/dist/templates/java/README.md.tmpl +1 -1
- package/dist/templates/minimal/AGENTS.md +42 -17
- package/dist/templates/minimal/README.md.tmpl +11 -10
- package/dist/templates/minimal/kindgi.config.ts.tmpl +23 -22
- package/dist/templates/python/AGENTS.md +28 -8
- package/dist/templates/python/README.md.tmpl +1 -1
- package/dist/templates/python/pyproject.toml.tmpl +10 -6
- package/dist/templates/sample/AGENTS.md +42 -17
- package/dist/templates/sample/README.md.tmpl +1 -1
- package/dist/templates/sample/kindgi.config.ts.tmpl +23 -19
- package/dist/templates/scala/AGENTS.md +32 -3
- package/dist/templates/scala/README.md.tmpl +1 -1
- package/dist/templates/woocommerce/AGENTS.md +38 -13
- package/dist/templates/woocommerce/README.md.tmpl +28 -3
- package/dist/templates/woocommerce/kindgi.config.ts.tmpl +23 -19
- package/package.json +13 -13
|
@@ -26,12 +26,41 @@ The config is `kindgi.config.json`.
|
|
|
26
26
|
`"openrouter"`) to `kindgi.config.json`: `kindgi dev` then registers it on
|
|
27
27
|
every boot, in every worktree.
|
|
28
28
|
|
|
29
|
+
## Skills
|
|
30
|
+
|
|
31
|
+
`.claude/skills/` and `.agents/skills/` hold the same Kindgi skills for Java
|
|
32
|
+
packs: getting started, tools, guardrails, agents and flows in Java
|
|
33
|
+
(`kindgi-java-*`), model providers, MCP servers, framework feedback, and
|
|
34
|
+
guiding the person in using what you built (`kindgi-using`). Claude Code
|
|
35
|
+
loads `.claude/skills/` on its own; Codex and Gemini CLI look in
|
|
36
|
+
`.agents/skills/`; any other coding agent can read either.
|
|
37
|
+
`kindgi skills sync` refreshes both.
|
|
38
|
+
|
|
29
39
|
When you diagnose a framework bug (something in Kindgi itself, not in this
|
|
30
40
|
pack's code), append an entry to `FEEDBACK.md` at the pack root with
|
|
31
41
|
`kindgi feedback write`.
|
|
32
42
|
|
|
33
43
|
When the person asks how to use what you built (where something is in
|
|
34
44
|
Kindgi's console, what an agent did, what it cost, who has access), answer
|
|
35
|
-
from `kindgi`'s read-only commands and give the console link beside it:
|
|
36
|
-
|
|
37
|
-
|
|
45
|
+
from `kindgi`'s read-only commands and give the console link beside it:
|
|
46
|
+
see the `kindgi-using` skill. Deciding approvals, erasing, adding people
|
|
47
|
+
and rating answers stay with the person.
|
|
48
|
+
|
|
49
|
+
## Commands for the person's own terminal
|
|
50
|
+
|
|
51
|
+
Two commands are always the person's to run, in their own terminal, since
|
|
52
|
+
they ask for a secret: `./kindgiw secrets set` and
|
|
53
|
+
`./kindgiw auth registry`. Others need what a coding agent's sandbox often
|
|
54
|
+
blocks: `./kindgiw dev` and any dev server (they keep running), and
|
|
55
|
+
`./kindgiw build` or anything else that needs Docker. When your sandbox
|
|
56
|
+
blocks a command (a process it can't start, `spawn EPERM`; Docker's socket
|
|
57
|
+
denied; `localhost` refused; a folder it keeps read-only, as Codex's keeps
|
|
58
|
+
`.agents/`, which `./kindgiw skills sync` writes), don't work around it:
|
|
59
|
+
don't turn your sandbox off, and don't start the command in the background.
|
|
60
|
+
Give the person the exact command, the folder to run it in and what they'll
|
|
61
|
+
see, then wait for them. Once they say `./kindgiw dev` is running, starting
|
|
62
|
+
it yourself exits 3 and says where theirs runs: use that one.
|
|
63
|
+
|
|
64
|
+
A tool's own `EPERM` while it runs under `./kindgiw dev` is something else:
|
|
65
|
+
Kindgi's dev sandbox, which the tools skill covers. Never turn that one off
|
|
66
|
+
either.
|
|
@@ -6,7 +6,7 @@ Two tools (`echo`, `greet`), one guardrail (`response-not-empty`), one agent
|
|
|
6
6
|
that uses both tools and the guardrail, and one flow that runs the echo tool.
|
|
7
7
|
|
|
8
8
|
Java and Scala support is in preview: tested and supported, but the API may
|
|
9
|
-
still change in
|
|
9
|
+
still change in a later release without the usual deprecation period.
|
|
10
10
|
|
|
11
11
|
## Layout
|
|
12
12
|
|
|
@@ -10,24 +10,49 @@ Agents answer through a model provider. `kindgi dev` gives a new pack
|
|
|
10
10
|
`dev-echo`, a fallback that isn't a model: it calls the first tool and
|
|
11
11
|
replies "Tool responded: …" after a warning line, while no other provider
|
|
12
12
|
fits. For a real model, put one LLM provider's key in `.env`
|
|
13
|
-
(`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, `GROQ_API_KEY`
|
|
14
|
-
`OPENROUTER_API_KEY`) and declare its preset
|
|
15
|
-
`'openai'`, `'gemini-api'`, `'groq'` or
|
|
16
|
-
`kindgi.config.ts`'s `providers`: `kindgi dev` then
|
|
17
|
-
boot, in every worktree. Other providers and
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
##
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
`.claude/skills
|
|
26
|
-
|
|
27
|
-
|
|
13
|
+
(`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, `GROQ_API_KEY`
|
|
14
|
+
or `OPENROUTER_API_KEY`) and declare its preset
|
|
15
|
+
(`{ preset: 'anthropic' }`, `'openai'`, `'gemini-api'`, `'groq'` or
|
|
16
|
+
`'openrouter'`) in `kindgi.config.ts`'s `providers`: `kindgi dev` then
|
|
17
|
+
registers it on every boot, in every worktree. Other providers and
|
|
18
|
+
per-agent model choice: the `kindgi-authoring-providers` skill.
|
|
19
|
+
|
|
20
|
+
## Skills
|
|
21
|
+
|
|
22
|
+
`.claude/skills/` and `.agents/skills/` hold the same Kindgi skills: getting
|
|
23
|
+
started, tools, guardrails, agents and flows, model providers, MCP servers,
|
|
24
|
+
framework feedback, and guiding the person in using what you built
|
|
25
|
+
(`kindgi-using`). Claude Code loads `.claude/skills/` on its own; Codex and
|
|
26
|
+
Gemini CLI look in `.agents/skills/`; any other coding agent can read
|
|
27
|
+
either. `kindgi skills sync` refreshes both.
|
|
28
|
+
|
|
29
|
+
When you diagnose a framework bug (something in Kindgi itself, not in this
|
|
30
|
+
pack's code), append an entry to `FEEDBACK.md` at the pack root via
|
|
31
|
+
`kindgi feedback write` — see the `kindgi-framework-feedback` skill. Mark
|
|
32
|
+
items fixed by adding a `> **Fixed:** <note>` line right after their
|
|
33
|
+
header; the file is a plain markdown list you edit directly.
|
|
28
34
|
|
|
29
35
|
When the person asks how to use what you built (where something is in
|
|
30
36
|
Kindgi's console, what an agent did, what it cost, who has access), answer
|
|
31
37
|
from `kindgi`'s read-only commands and give the console link beside it —
|
|
32
|
-
see
|
|
33
|
-
|
|
38
|
+
see the `kindgi-using` skill. Deciding approvals, erasing, adding people
|
|
39
|
+
and rating answers stay with the person.
|
|
40
|
+
|
|
41
|
+
## Commands for the person's own terminal
|
|
42
|
+
|
|
43
|
+
Two commands are always the person's to run, in their own terminal, since
|
|
44
|
+
they ask for a secret: `kindgi secrets set` and `kindgi auth registry`.
|
|
45
|
+
Others need what a coding agent's sandbox often blocks: `kindgi dev` and any
|
|
46
|
+
dev server (they keep running), and `kindgi build` or anything else that
|
|
47
|
+
needs Docker. When your sandbox blocks a command (a process it can't start,
|
|
48
|
+
`spawn EPERM`; Docker's socket denied; `localhost` refused; a folder it
|
|
49
|
+
keeps read-only, as Codex's keeps `.agents/`, which `kindgi skills sync`
|
|
50
|
+
writes), don't work around it: don't turn your sandbox off, and don't start
|
|
51
|
+
the command in the background. Give the person the exact command, the folder
|
|
52
|
+
to run it in and what they'll see, then wait for them. Once they say
|
|
53
|
+
`kindgi dev` is running, starting it yourself exits 3 and says where theirs
|
|
54
|
+
runs: use that one.
|
|
55
|
+
|
|
56
|
+
A tool's own `EPERM` while it runs under `kindgi dev` is something else:
|
|
57
|
+
Kindgi's dev sandbox, which the tools skill covers. Never turn that one off
|
|
58
|
+
either.
|
|
@@ -14,6 +14,7 @@ Author your first via `defineTool` / `defineAgent` / `defineCheck` /
|
|
|
14
14
|
├── package.json # depends on @kindgi/sdk + zod
|
|
15
15
|
├── tsconfig.json
|
|
16
16
|
├── .claude/skills/ # SDK skills — Claude Code auto-loads per task
|
|
17
|
+
├── .agents/skills/ # the same skills, where Codex and Gemini CLI look
|
|
17
18
|
├── tools/ # place `<name>/index.ts` per tool
|
|
18
19
|
├── agents/ # place `<name>/index.ts` per agent
|
|
19
20
|
├── guardrails/ # place `<name>/index.ts` per check
|
|
@@ -22,15 +23,15 @@ Author your first via `defineTool` / `defineAgent` / `defineCheck` /
|
|
|
22
23
|
|
|
23
24
|
## AI coding assistants
|
|
24
25
|
|
|
25
|
-
`.claude/skills/`
|
|
26
|
-
guides: `kindgi-authoring-tools`,
|
|
27
|
-
`kindgi-authoring-
|
|
28
|
-
`kindgi-authoring-providers` (a real model),
|
|
29
|
-
`kindgi-
|
|
30
|
-
you built). Claude Code
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
assistant in the loop.
|
|
26
|
+
`.claude/skills/` and `.agents/skills/` are auto-populated at `kindgi init`
|
|
27
|
+
with the same per-primitive guides: `kindgi-authoring-tools`,
|
|
28
|
+
`kindgi-authoring-agents`, `kindgi-authoring-guardrails`,
|
|
29
|
+
`kindgi-getting-started` — plus `kindgi-authoring-providers` (a real model),
|
|
30
|
+
`kindgi-authoring-mcp-servers`, `kindgi-framework-feedback` and
|
|
31
|
+
`kindgi-using` (guiding you in using what you built). Claude Code loads
|
|
32
|
+
`.claude/skills/` on demand, based on what you're editing; Codex and Gemini
|
|
33
|
+
CLI look in `.agents/skills/`. No configuration needed. Read them directly
|
|
34
|
+
if you want the mental model without an assistant in the loop.
|
|
34
35
|
|
|
35
36
|
## Run
|
|
36
37
|
|
|
@@ -67,4 +68,4 @@ Claude takes over from dev-echo on the next turn; nothing to restart.
|
|
|
67
68
|
OpenRouter, a hosted service your prompts pass through (`OPENROUTER_API_KEY`,
|
|
68
69
|
`--preset=openrouter`), work the same way; `kindgi providers presets` lists
|
|
69
70
|
the presets (Gemini on Vertex AI too). Picking a model per
|
|
70
|
-
agent, and other providers:
|
|
71
|
+
agent, and other providers: the `kindgi-authoring-providers` skill.
|
|
@@ -13,31 +13,32 @@ const config = {
|
|
|
13
13
|
flows: 'flows/**/*.ts',
|
|
14
14
|
},
|
|
15
15
|
// ---------------------------------------------------------------
|
|
16
|
-
// Environments
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
// behalf), and the tenantId the Kindgi runtime scopes the
|
|
21
|
-
// deployment to. Consumed by `kindgi build` + `kindgi deploy`.
|
|
16
|
+
// Environments: one entry per place you deploy to, picked with
|
|
17
|
+
// `--env <name>` (default `staging`). `kindgi build` reads `build`,
|
|
18
|
+
// `registry`, `signingKey` and `tenantId`; `kindgi deploy` reads
|
|
19
|
+
// `endpoint`. Local `kindgi dev` doesn't read this block.
|
|
22
20
|
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
21
|
+
// Your API key goes only to the address you signed in to
|
|
22
|
+
// (`kindgi auth login --url <url>`), so an `endpoint` here must be
|
|
23
|
+
// that address. Builds are signed with a key of yours: make it with
|
|
24
|
+
// `kindgi key create <id>`, and let the runtime trust it with
|
|
25
|
+
// `kindgi key trust <id>` (once).
|
|
25
26
|
// ---------------------------------------------------------------
|
|
26
27
|
environments: {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
production: {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
},
|
|
28
|
+
// Kindgi Cloud: `kindgi deploy --env=prod` builds there and deploys.
|
|
29
|
+
// prod: {
|
|
30
|
+
// build: 'hosted',
|
|
31
|
+
// signingKey: '~/.kindgi/keys/<id>.pem',
|
|
32
|
+
// },
|
|
33
|
+
//
|
|
34
|
+
// A runtime of your own:
|
|
35
|
+
// production: {
|
|
36
|
+
// endpoint: 'https://kindgi.your-company.example', // the address you signed in to
|
|
37
|
+
// build: 'https://build.your-company.example', // your Kindgi build server
|
|
38
|
+
// registry: 'ghcr.io/your-org',
|
|
39
|
+
// signingKey: '~/.kindgi/keys/<id>.pem',
|
|
40
|
+
// tenantId: '<your tenant id>',
|
|
41
|
+
// },
|
|
41
42
|
},
|
|
42
43
|
} as const;
|
|
43
44
|
|
|
@@ -19,17 +19,37 @@ starts with `_`. The config is `[tool.kindgi]` in `pyproject.toml`.
|
|
|
19
19
|
preset (`preset = "anthropic"`, `"openai"`, `"gemini-api"`, `"groq"` or
|
|
20
20
|
`"openrouter"`) to `pyproject.toml`: `kindgi dev` then registers it
|
|
21
21
|
on every boot, in every worktree. Other providers and per-agent model
|
|
22
|
-
choice:
|
|
22
|
+
choice: the `kindgi-authoring-providers` skill.
|
|
23
23
|
|
|
24
24
|
## Skills
|
|
25
25
|
|
|
26
|
-
`.claude/skills/`
|
|
27
|
-
tools, guardrails and agents in Python
|
|
28
|
-
MCP servers, framework feedback, and
|
|
29
|
-
built (`kindgi-using`). Claude Code
|
|
30
|
-
|
|
26
|
+
`.claude/skills/` and `.agents/skills/` hold the same Kindgi skills for
|
|
27
|
+
Python packs: getting started, tools, guardrails and agents in Python
|
|
28
|
+
(`kindgi-python-*`), model providers, MCP servers, framework feedback, and
|
|
29
|
+
guiding the person in using what you built (`kindgi-using`). Claude Code
|
|
30
|
+
loads `.claude/skills/` on its own; Codex and Gemini CLI look in
|
|
31
|
+
`.agents/skills/`; any other coding agent can read either.
|
|
32
|
+
`kindgi skills sync` refreshes both.
|
|
31
33
|
|
|
32
34
|
When you diagnose a framework bug (something in Kindgi itself, not in this
|
|
33
35
|
pack's code), append an entry to `FEEDBACK.md` at the pack root via
|
|
34
|
-
`kindgi feedback write` — see
|
|
35
|
-
|
|
36
|
+
`kindgi feedback write` — see the `kindgi-framework-feedback` skill.
|
|
37
|
+
|
|
38
|
+
## Commands for the person's own terminal
|
|
39
|
+
|
|
40
|
+
Two commands are always the person's to run, in their own terminal, since
|
|
41
|
+
they ask for a secret: `kindgi secrets set` and `kindgi auth registry`.
|
|
42
|
+
Others need what a coding agent's sandbox often blocks: `kindgi dev` and any
|
|
43
|
+
dev server (they keep running), and `kindgi build` or anything else that
|
|
44
|
+
needs Docker. When your sandbox blocks a command (a process it can't start,
|
|
45
|
+
`spawn EPERM`; Docker's socket denied; `localhost` refused; a folder it
|
|
46
|
+
keeps read-only, as Codex's keeps `.agents/`, which `kindgi skills sync`
|
|
47
|
+
writes), don't work around it: don't turn your sandbox off, and don't start
|
|
48
|
+
the command in the background. Give the person the exact command, the folder
|
|
49
|
+
to run it in and what they'll see, then wait for them. Once they say
|
|
50
|
+
`kindgi dev` is running, starting it yourself exits 3 and says where theirs
|
|
51
|
+
runs: use that one.
|
|
52
|
+
|
|
53
|
+
A tool's own `EPERM` while it runs under `kindgi dev` is something else:
|
|
54
|
+
Kindgi's dev sandbox, which the tools skill covers. Never turn that one off
|
|
55
|
+
either.
|
|
@@ -53,7 +53,7 @@ Claude takes over from dev-echo on the next turn; nothing to restart.
|
|
|
53
53
|
OpenRouter, a hosted service your prompts pass through (`OPENROUTER_API_KEY`,
|
|
54
54
|
`--preset=openrouter`), work the same way; `kindgi providers presets` lists
|
|
55
55
|
the presets (Gemini on Vertex AI too). Picking a model per
|
|
56
|
-
agent, and other providers:
|
|
56
|
+
agent, and other providers: the `kindgi-authoring-providers` skill.
|
|
57
57
|
|
|
58
58
|
## Build
|
|
59
59
|
|
|
@@ -30,12 +30,16 @@ description = "A sample Kindgi pack in Python — two tools, one guardrail, one
|
|
|
30
30
|
# python = ["uv", "run", "python"] # default: .venv/bin/python, else python3
|
|
31
31
|
# envFiles = [".env", ".env.local"]
|
|
32
32
|
|
|
33
|
-
# One block per deploy
|
|
34
|
-
#
|
|
35
|
-
# endpoint
|
|
36
|
-
#
|
|
37
|
-
#
|
|
38
|
-
#
|
|
33
|
+
# One block per place you deploy to; `kindgi build --env=<name>` reads it.
|
|
34
|
+
# Your API key goes only to the address you signed in to
|
|
35
|
+
# (`kindgi auth login --url <url>`), so an `endpoint` must be that address.
|
|
36
|
+
# Builds are signed with a key of yours: make it with `kindgi key create <id>`,
|
|
37
|
+
# and let the runtime trust it with `kindgi key trust <id>` (once).
|
|
38
|
+
# [tool.kindgi.environments.production]
|
|
39
|
+
# endpoint = "https://kindgi.your-company.example" # the address you signed in to
|
|
40
|
+
# build = "https://build.your-company.example" # your Kindgi build server
|
|
41
|
+
# tenantId = "<your tenant id>"
|
|
42
|
+
# signingKey = "~/.kindgi/keys/<id>.pem"
|
|
39
43
|
|
|
40
44
|
[tool.pytest.ini_options]
|
|
41
45
|
testpaths = ["tests"]
|
|
@@ -10,24 +10,49 @@ Agents answer through a model provider. `kindgi dev` gives a new pack
|
|
|
10
10
|
`dev-echo`, a fallback that isn't a model: it calls the first tool and
|
|
11
11
|
replies "Tool responded: …" after a warning line, while no other provider
|
|
12
12
|
fits. For a real model, put one LLM provider's key in `.env`
|
|
13
|
-
(`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, `GROQ_API_KEY`
|
|
14
|
-
`OPENROUTER_API_KEY`) and declare its preset
|
|
15
|
-
`'openai'`, `'gemini-api'`, `'groq'` or
|
|
16
|
-
`kindgi.config.ts`'s `providers`: `kindgi dev` then
|
|
17
|
-
boot, in every worktree. Other providers and
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
##
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
`.claude/skills
|
|
26
|
-
|
|
27
|
-
|
|
13
|
+
(`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, `GROQ_API_KEY`
|
|
14
|
+
or `OPENROUTER_API_KEY`) and declare its preset
|
|
15
|
+
(`{ preset: 'anthropic' }`, `'openai'`, `'gemini-api'`, `'groq'` or
|
|
16
|
+
`'openrouter'`) in `kindgi.config.ts`'s `providers`: `kindgi dev` then
|
|
17
|
+
registers it on every boot, in every worktree. Other providers and
|
|
18
|
+
per-agent model choice: the `kindgi-authoring-providers` skill.
|
|
19
|
+
|
|
20
|
+
## Skills
|
|
21
|
+
|
|
22
|
+
`.claude/skills/` and `.agents/skills/` hold the same Kindgi skills: getting
|
|
23
|
+
started, tools, guardrails, agents and flows, model providers, MCP servers,
|
|
24
|
+
framework feedback, and guiding the person in using what you built
|
|
25
|
+
(`kindgi-using`). Claude Code loads `.claude/skills/` on its own; Codex and
|
|
26
|
+
Gemini CLI look in `.agents/skills/`; any other coding agent can read
|
|
27
|
+
either. `kindgi skills sync` refreshes both.
|
|
28
|
+
|
|
29
|
+
When you diagnose a framework bug (something in Kindgi itself, not in this
|
|
30
|
+
pack's code), append an entry to `FEEDBACK.md` at the pack root via
|
|
31
|
+
`kindgi feedback write` — see the `kindgi-framework-feedback` skill. Mark
|
|
32
|
+
items fixed by adding a `> **Fixed:** <note>` line right after their
|
|
33
|
+
header; the file is a plain markdown list you edit directly.
|
|
28
34
|
|
|
29
35
|
When the person asks how to use what you built (where something is in
|
|
30
36
|
Kindgi's console, what an agent did, what it cost, who has access), answer
|
|
31
37
|
from `kindgi`'s read-only commands and give the console link beside it —
|
|
32
|
-
see
|
|
33
|
-
|
|
38
|
+
see the `kindgi-using` skill. Deciding approvals, erasing, adding people
|
|
39
|
+
and rating answers stay with the person.
|
|
40
|
+
|
|
41
|
+
## Commands for the person's own terminal
|
|
42
|
+
|
|
43
|
+
Two commands are always the person's to run, in their own terminal, since
|
|
44
|
+
they ask for a secret: `kindgi secrets set` and `kindgi auth registry`.
|
|
45
|
+
Others need what a coding agent's sandbox often blocks: `kindgi dev` and any
|
|
46
|
+
dev server (they keep running), and `kindgi build` or anything else that
|
|
47
|
+
needs Docker. When your sandbox blocks a command (a process it can't start,
|
|
48
|
+
`spawn EPERM`; Docker's socket denied; `localhost` refused; a folder it
|
|
49
|
+
keeps read-only, as Codex's keeps `.agents/`, which `kindgi skills sync`
|
|
50
|
+
writes), don't work around it: don't turn your sandbox off, and don't start
|
|
51
|
+
the command in the background. Give the person the exact command, the folder
|
|
52
|
+
to run it in and what they'll see, then wait for them. Once they say
|
|
53
|
+
`kindgi dev` is running, starting it yourself exits 3 and says where theirs
|
|
54
|
+
runs: use that one.
|
|
55
|
+
|
|
56
|
+
A tool's own `EPERM` while it runs under `kindgi dev` is something else:
|
|
57
|
+
Kindgi's dev sandbox, which the tools skill covers. Never turn that one off
|
|
58
|
+
either.
|
|
@@ -58,7 +58,7 @@ Claude takes over from dev-echo on the next turn; nothing to restart.
|
|
|
58
58
|
OpenRouter, a hosted service your prompts pass through (`OPENROUTER_API_KEY`,
|
|
59
59
|
`--preset=openrouter`), work the same way; `kindgi providers presets` lists
|
|
60
60
|
the presets (Gemini on Vertex AI too). Picking a model per
|
|
61
|
-
agent, and other providers:
|
|
61
|
+
agent, and other providers: the `kindgi-authoring-providers` skill.
|
|
62
62
|
|
|
63
63
|
## The four primitives (one file each)
|
|
64
64
|
|
|
@@ -13,28 +13,32 @@ const config = {
|
|
|
13
13
|
flows: 'flows/**/*.ts',
|
|
14
14
|
},
|
|
15
15
|
// ---------------------------------------------------------------
|
|
16
|
-
// Environments
|
|
17
|
-
//
|
|
18
|
-
//
|
|
16
|
+
// Environments: one entry per place you deploy to, picked with
|
|
17
|
+
// `--env <name>` (default `staging`). `kindgi build` reads `build`,
|
|
18
|
+
// `registry`, `signingKey` and `tenantId`; `kindgi deploy` reads
|
|
19
|
+
// `endpoint`. Local `kindgi dev` doesn't read this block.
|
|
19
20
|
//
|
|
20
|
-
//
|
|
21
|
-
// `kindgi
|
|
21
|
+
// Your API key goes only to the address you signed in to
|
|
22
|
+
// (`kindgi auth login --url <url>`), so an `endpoint` here must be
|
|
23
|
+
// that address. Builds are signed with a key of yours: make it with
|
|
24
|
+
// `kindgi key create <id>`, and let the runtime trust it with
|
|
25
|
+
// `kindgi key trust <id>` (once).
|
|
22
26
|
// ---------------------------------------------------------------
|
|
23
27
|
environments: {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
production: {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
},
|
|
28
|
+
// Kindgi Cloud: `kindgi deploy --env=prod` builds there and deploys.
|
|
29
|
+
// prod: {
|
|
30
|
+
// build: 'hosted',
|
|
31
|
+
// signingKey: '~/.kindgi/keys/<id>.pem',
|
|
32
|
+
// },
|
|
33
|
+
//
|
|
34
|
+
// A runtime of your own:
|
|
35
|
+
// production: {
|
|
36
|
+
// endpoint: 'https://kindgi.your-company.example', // the address you signed in to
|
|
37
|
+
// build: 'https://build.your-company.example', // your Kindgi build server
|
|
38
|
+
// registry: 'ghcr.io/your-org',
|
|
39
|
+
// signingKey: '~/.kindgi/keys/<id>.pem',
|
|
40
|
+
// tenantId: '<your tenant id>',
|
|
41
|
+
// },
|
|
38
42
|
},
|
|
39
43
|
} as const;
|
|
40
44
|
|
|
@@ -27,12 +27,41 @@ make it a `val`. The config is `kindgi.config.json`.
|
|
|
27
27
|
`"openrouter"`) to `kindgi.config.json`: `kindgi dev` then registers it on
|
|
28
28
|
every boot, in every worktree.
|
|
29
29
|
|
|
30
|
+
## Skills
|
|
31
|
+
|
|
32
|
+
`.claude/skills/` and `.agents/skills/` hold the same Kindgi skills for
|
|
33
|
+
Scala packs: getting started, tools, guardrails, agents and flows in Scala
|
|
34
|
+
(`kindgi-scala-*`), model providers, MCP servers, framework feedback, and
|
|
35
|
+
guiding the person in using what you built (`kindgi-using`). Claude Code
|
|
36
|
+
loads `.claude/skills/` on its own; Codex and Gemini CLI look in
|
|
37
|
+
`.agents/skills/`; any other coding agent can read either.
|
|
38
|
+
`./kindgiw skills sync` refreshes both.
|
|
39
|
+
|
|
30
40
|
When you diagnose a framework bug (something in Kindgi itself, not in this
|
|
31
41
|
pack's code), append an entry to `FEEDBACK.md` at the pack root with
|
|
32
42
|
`./kindgiw feedback write`.
|
|
33
43
|
|
|
34
44
|
When the person asks how to use what you built (where something is in
|
|
35
45
|
Kindgi's console, what an agent did, what it cost, who has access), answer
|
|
36
|
-
from `./kindgiw`'s read-only commands and give the console link beside it:
|
|
37
|
-
|
|
38
|
-
|
|
46
|
+
from `./kindgiw`'s read-only commands and give the console link beside it:
|
|
47
|
+
see the `kindgi-using` skill. Deciding approvals, erasing, adding people
|
|
48
|
+
and rating answers stay with the person.
|
|
49
|
+
|
|
50
|
+
## Commands for the person's own terminal
|
|
51
|
+
|
|
52
|
+
Two commands are always the person's to run, in their own terminal, since
|
|
53
|
+
they ask for a secret: `./kindgiw secrets set` and
|
|
54
|
+
`./kindgiw auth registry`. Others need what a coding agent's sandbox often
|
|
55
|
+
blocks: `./kindgiw dev` and any dev server (they keep running), and
|
|
56
|
+
`./kindgiw build` or anything else that needs Docker. When your sandbox
|
|
57
|
+
blocks a command (a process it can't start, `spawn EPERM`; Docker's socket
|
|
58
|
+
denied; `localhost` refused; a folder it keeps read-only, as Codex's keeps
|
|
59
|
+
`.agents/`, which `./kindgiw skills sync` writes), don't work around it:
|
|
60
|
+
don't turn your sandbox off, and don't start the command in the background.
|
|
61
|
+
Give the person the exact command, the folder to run it in and what they'll
|
|
62
|
+
see, then wait for them. Once they say `./kindgiw dev` is running, starting
|
|
63
|
+
it yourself exits 3 and says where theirs runs: use that one.
|
|
64
|
+
|
|
65
|
+
A tool's own `EPERM` while it runs under `./kindgiw dev` is something else:
|
|
66
|
+
Kindgi's dev sandbox, which the tools skill covers. Never turn that one off
|
|
67
|
+
either.
|
|
@@ -6,7 +6,7 @@ Two tools (`echo`, `greet`), one guardrail (`response-not-empty`), one agent
|
|
|
6
6
|
that uses both tools and the guardrail, and one flow that runs the echo tool.
|
|
7
7
|
|
|
8
8
|
Java and Scala support is in preview: tested and supported, but the API may
|
|
9
|
-
still change in
|
|
9
|
+
still change in a later release without the usual deprecation period.
|
|
10
10
|
|
|
11
11
|
## Layout
|
|
12
12
|
|
|
@@ -10,12 +10,12 @@ Agents answer through a model provider. `kindgi dev` gives a new pack
|
|
|
10
10
|
`dev-echo`, a fallback that isn't a model: it calls the first tool and
|
|
11
11
|
replies "Tool responded: …" after a warning line, while no other provider
|
|
12
12
|
fits. For a real model, put one LLM provider's key in `.env`
|
|
13
|
-
(`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, `GROQ_API_KEY`
|
|
14
|
-
`OPENROUTER_API_KEY`) and declare its preset
|
|
15
|
-
`'openai'`, `'gemini-api'`, `'groq'` or
|
|
16
|
-
`kindgi.config.ts`'s `providers`: `kindgi dev` then
|
|
17
|
-
boot, in every worktree. Other providers and
|
|
18
|
-
|
|
13
|
+
(`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, `GROQ_API_KEY`
|
|
14
|
+
or `OPENROUTER_API_KEY`) and declare its preset
|
|
15
|
+
(`{ preset: 'anthropic' }`, `'openai'`, `'gemini-api'`, `'groq'` or
|
|
16
|
+
`'openrouter'`) in `kindgi.config.ts`'s `providers`: `kindgi dev` then
|
|
17
|
+
registers it on every boot, in every worktree. Other providers and
|
|
18
|
+
per-agent model choice: the `kindgi-authoring-providers` skill.
|
|
19
19
|
|
|
20
20
|
## This pack: a WooCommerce store
|
|
21
21
|
|
|
@@ -39,11 +39,36 @@ README.md explains the whole design; keep it true when you change the pack.
|
|
|
39
39
|
- **The store's password is a secret** (`WOO_APP_PASSWORD`, set with
|
|
40
40
|
`kindgi secrets set`): never write it in a file, a test or the chat.
|
|
41
41
|
|
|
42
|
-
##
|
|
42
|
+
## Skills
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
`.claude/skills
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
`.claude/skills/` and `.agents/skills/` hold the same Kindgi skills: getting
|
|
45
|
+
started, tools, guardrails, agents and flows, model providers, MCP servers,
|
|
46
|
+
framework feedback, and guiding the person in using what you built
|
|
47
|
+
(`kindgi-using`). Claude Code loads `.claude/skills/` on its own; Codex and
|
|
48
|
+
Gemini CLI look in `.agents/skills/`; any other coding agent can read
|
|
49
|
+
either. `kindgi skills sync` refreshes both.
|
|
50
|
+
|
|
51
|
+
When you diagnose a framework bug (something in Kindgi itself, not in this
|
|
52
|
+
pack's code), append an entry to `FEEDBACK.md` at the pack root via
|
|
53
|
+
`kindgi feedback write` — see the `kindgi-framework-feedback` skill. Mark
|
|
54
|
+
items fixed by adding a `> **Fixed:** <note>` line right after their
|
|
55
|
+
header; the file is a plain markdown list you edit directly.
|
|
56
|
+
|
|
57
|
+
## Commands for the person's own terminal
|
|
58
|
+
|
|
59
|
+
Two commands are always the person's to run, in their own terminal, since
|
|
60
|
+
they ask for a secret: `kindgi secrets set` and `kindgi auth registry`.
|
|
61
|
+
Others need what a coding agent's sandbox often blocks: `kindgi dev` and any
|
|
62
|
+
dev server (they keep running), and `kindgi build` or anything else that
|
|
63
|
+
needs Docker. When your sandbox blocks a command (a process it can't start,
|
|
64
|
+
`spawn EPERM`; Docker's socket denied; `localhost` refused; a folder it
|
|
65
|
+
keeps read-only, as Codex's keeps `.agents/`, which `kindgi skills sync`
|
|
66
|
+
writes), don't work around it: don't turn your sandbox off, and don't start
|
|
67
|
+
the command in the background. Give the person the exact command, the folder
|
|
68
|
+
to run it in and what they'll see, then wait for them. Once they say
|
|
69
|
+
`kindgi dev` is running, starting it yourself exits 3 and says where theirs
|
|
70
|
+
runs: use that one.
|
|
71
|
+
|
|
72
|
+
A tool's own `EPERM` while it runs under `kindgi dev` is something else:
|
|
73
|
+
Kindgi's dev sandbox, which the tools skill covers. Never turn that one off
|
|
74
|
+
either.
|
|
@@ -158,8 +158,7 @@ calls the first tool. For Claude, with `kindgi dev` running:
|
|
|
158
158
|
{{KINDGI}} providers register --preset=anthropic
|
|
159
159
|
```
|
|
160
160
|
|
|
161
|
-
|
|
162
|
-
providers.
|
|
161
|
+
The `kindgi-authoring-providers` skill has the other providers.
|
|
163
162
|
|
|
164
163
|
Ask the store agent something:
|
|
165
164
|
|
|
@@ -167,6 +166,32 @@ Ask the store agent something:
|
|
|
167
166
|
{{KINDGI}} runs start --agent={{PACK_ID}}.store-agent --input='{"userMessage": "Refund 40 on order 1043: the jacket arrived torn."}'
|
|
168
167
|
```
|
|
169
168
|
|
|
169
|
+
## One project and one pack per client
|
|
170
|
+
|
|
171
|
+
This pack is one client's: every id in it starts with `{{PACK_ID}}.`. For
|
|
172
|
+
another client, make another copy, so its ids start with that client's
|
|
173
|
+
name:
|
|
174
|
+
|
|
175
|
+
```sh
|
|
176
|
+
{{KINDGI}} init <client> --template=woocommerce
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Deploy each copy into its client's project (its id or its slug):
|
|
180
|
+
|
|
181
|
+
```sh
|
|
182
|
+
{{KINDGI}} deploy --project <client project>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
The agents and tools are registered in that project. Give it the store's
|
|
186
|
+
credentials there too, apart from your other clients':
|
|
187
|
+
|
|
188
|
+
```sh
|
|
189
|
+
{{KINDGI}} secrets set WOO_APP_PASSWORD --env=<env> --scope=project:<client project id>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Deploying this same pack into a second project is refused with a `409`,
|
|
193
|
+
since its ids already belong to the first.
|
|
194
|
+
|
|
170
195
|
## Review each new order
|
|
171
196
|
|
|
172
197
|
`{{PACK_ID}}.order-review` is a flow with two steps:
|
|
@@ -221,7 +246,7 @@ delivery, and Kindgi checks the signature before it starts a run:
|
|
|
221
246
|
|
|
222
247
|
```sh
|
|
223
248
|
{{KINDGI}} webhooks register --flow={{PACK_ID}}.order-review --flow-version={{PACK_VERSION}} \
|
|
224
|
-
--preset=woocommerce --generate-secret --secret=WOO_WEBHOOK_SECRET
|
|
249
|
+
--preset=woocommerce --generate-secret --secret=WOO_WEBHOOK_SECRET \
|
|
225
250
|
--label="WooCommerce orders"
|
|
226
251
|
```
|
|
227
252
|
|