@kindgi/cli 0.1.4-rc.4 → 0.1.4
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 +3 -3
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +12 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts +4 -3
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +71 -7
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/helpers.d.ts +5 -2
- package/dist/commands/helpers.d.ts.map +1 -1
- package/dist/commands/helpers.js +8 -3
- package/dist/commands/helpers.js.map +1 -1
- package/dist/commands/providers.d.ts.map +1 -1
- package/dist/commands/providers.js +40 -2
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/runs.d.ts.map +1 -1
- package/dist/commands/runs.js +27 -2
- package/dist/commands/runs.js.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 +6 -0
- package/dist/dev/runtime-container.js.map +1 -1
- package/dist/dev/runtime-env.d.ts.map +1 -1
- package/dist/dev/runtime-env.js +4 -0
- package/dist/dev/runtime-env.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/errors.d.ts.map +1 -1
- package/dist/errors.js +10 -4
- package/dist/errors.js.map +1 -1
- package/dist/help.d.ts +14 -0
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +55 -0
- package/dist/help.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -2
- package/dist/main.js.map +1 -1
- package/dist/providers/preset-loader.d.ts.map +1 -1
- package/dist/providers/preset-loader.js +9 -1
- package/dist/providers/preset-loader.js.map +1 -1
- package/dist/providers/presets/anthropic.json +25 -2
- package/dist/providers/presets/gemini-api.json +5 -2
- package/dist/providers/presets/gemini.json +12 -15
- package/dist/providers/presets/groq.json +1 -0
- package/dist/providers/presets/openai.json +36 -4
- package/dist/providers/presets/openrouter.json +6 -2
- package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +10 -6
- 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 +56 -44
- package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-getting-started/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +13 -8
- package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +3 -3
- package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +8 -5
- package/dist/templates/minimal/README.md.tmpl +3 -3
- package/dist/templates/python/README.md.tmpl +3 -3
- package/dist/templates/python/agents/echo_agent.py.tmpl +2 -2
- package/dist/templates/sample/README.md.tmpl +3 -3
- package/dist/templates/sample/agents/echo-agent/index.ts.tmpl +1 -1
- package/package.json +12 -11
|
@@ -5,8 +5,9 @@ description: >
|
|
|
5
5
|
can actually call a real model. Covers four paths — hosted via
|
|
6
6
|
Anthropic native adapter, Gemini on Vertex AI (Google Application
|
|
7
7
|
Default Credentials, no API key), hosted via the OpenAI-compat adapter
|
|
8
|
-
(works with OpenAI
|
|
9
|
-
|
|
8
|
+
(works with OpenAI, Groq, self-hosted vLLM and Ollama, and any other
|
|
9
|
+
OpenAI-compatible endpoint, a hosted gateway such as OpenRouter
|
|
10
|
+
included), and local
|
|
10
11
|
via the in-process ONNX adapter — plus the credential flow (in
|
|
11
12
|
`kindgi dev` the key lives in the project's env files — `.env`, then
|
|
12
13
|
`.env.local` — added by hand or with `kindgi secrets set`'s no-echo
|
|
@@ -22,8 +23,8 @@ description: >
|
|
|
22
23
|
kindgi-getting-started.
|
|
23
24
|
type: core
|
|
24
25
|
library: "@kindgi/sdk"
|
|
25
|
-
version: "0.9.
|
|
26
|
-
sdk_version: "0.1.4
|
|
26
|
+
version: "0.9.8"
|
|
27
|
+
sdk_version: "0.1.4"
|
|
27
28
|
pack_languages: [node, python]
|
|
28
29
|
sources:
|
|
29
30
|
- packages/adapters/model-anthropic/src/provider.ts
|
|
@@ -106,7 +107,11 @@ yours.
|
|
|
106
107
|
## Path A — Hosted, native Anthropic
|
|
107
108
|
|
|
108
109
|
Best fidelity to Anthropic's API (prompt caching, latest models, tool
|
|
109
|
-
use
|
|
110
|
+
use). Requires an `ANTHROPIC_API_KEY`.
|
|
111
|
+
|
|
112
|
+
A model's `structured-output` feature is a routing label: the model can
|
|
113
|
+
follow a JSON schema natively, but Kindgi's typed outputs use instructions,
|
|
114
|
+
then parse, check against the schema and repair, on every provider.
|
|
110
115
|
|
|
111
116
|
**Step 1 — set the key:**
|
|
112
117
|
```sh
|
|
@@ -123,9 +128,18 @@ credential on argv.
|
|
|
123
128
|
|
|
124
129
|
**Step 2 — register it, from the preset:**
|
|
125
130
|
```sh
|
|
126
|
-
kindgi providers register --preset=anthropic # Opus 5.5, Sonnet 5.5, Haiku 4.5
|
|
127
|
-
kindgi providers register --preset=anthropic --models=claude-
|
|
131
|
+
kindgi providers register --preset=anthropic # Opus 5.5, Sonnet 5.5 (default), Haiku 5.5, Haiku 4.5
|
|
132
|
+
kindgi providers register --preset=anthropic --models=claude-sonnet-5-5 # just one
|
|
128
133
|
```
|
|
134
|
+
Don't pin `claude-haiku-4-5`: Anthropic retires it on or after 2026-10-15,
|
|
135
|
+
and a turn routed to it then fails; `claude-haiku-5-5` replaces it. Each
|
|
136
|
+
preset names a default model (`metadata.defaultModel`, marked `(default)`
|
|
137
|
+
when it registers), which an agent with no preference gets. A preset
|
|
138
|
+
registered before 0.1.4 has none: unregister it and register it again.
|
|
139
|
+
The Claude 5.5 and GPT-6 models take no `temperature` (`"sampling": false`:
|
|
140
|
+
the call goes without it, with a `sampling-unsupported` warning), and a
|
|
141
|
+
model's `thinking` says how it thinks; thinking counts against
|
|
142
|
+
`maxOutputTokens` and bills as output.
|
|
129
143
|
The preset carries the models, context windows, output limits and current
|
|
130
144
|
prices (`kindgi providers presets` lists the presets and when their prices
|
|
131
145
|
were checked); `--max-output-tokens=<n>` sets another output limit. In a pack it refuses until the key is in the pack's env files —
|
|
@@ -139,8 +153,8 @@ needs under `kindgi dev`:
|
|
|
139
153
|
```ts
|
|
140
154
|
// in kindgi.config.ts
|
|
141
155
|
providers: [
|
|
142
|
-
{ preset: 'anthropic', models: ['claude-
|
|
143
|
-
{ preset: 'gemini', project: 'acme-gcp', models: ['gemini-
|
|
156
|
+
{ preset: 'anthropic', models: ['claude-sonnet-5-5'] }, // key ANTHROPIC_API_KEY, from the env files
|
|
157
|
+
{ preset: 'gemini', project: 'acme-gcp', models: ['gemini-3.8-flash'] },
|
|
144
158
|
{ spec: { /* the provider.json body below */ } },
|
|
145
159
|
],
|
|
146
160
|
```
|
|
@@ -148,7 +162,7 @@ providers: [
|
|
|
148
162
|
# in pyproject.toml: one table per provider, same keys
|
|
149
163
|
[[tool.kindgi.providers]]
|
|
150
164
|
preset = "anthropic"
|
|
151
|
-
models = ["claude-
|
|
165
|
+
models = ["claude-sonnet-5-5"]
|
|
152
166
|
```
|
|
153
167
|
- A preset entry takes `models`, `project`, `secret` (the key's name, in place
|
|
154
168
|
of the preset's) and `maxOutputTokens`, spelled the same in `pyproject.toml`;
|
|
@@ -167,7 +181,7 @@ models = ["claude-haiku-4-5"]
|
|
|
167
181
|
providers with `kindgi providers register`.
|
|
168
182
|
|
|
169
183
|
**Step 2 (by hand) — write `provider.json`** at the pack root. One connection,
|
|
170
|
-
|
|
184
|
+
two models — matches how the Anthropic SDK actually works (the API
|
|
171
185
|
key is per-vendor; the model is per-call):
|
|
172
186
|
```json
|
|
173
187
|
{
|
|
@@ -194,16 +208,6 @@ key is per-vendor; the model is per-call):
|
|
|
194
208
|
"completionUsdPer1kTokens": 0.01
|
|
195
209
|
},
|
|
196
210
|
"description": "Balanced performance/cost."
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
"name": "claude-haiku-4-5",
|
|
200
|
-
"contextWindow": 200000,
|
|
201
|
-
"features": ["tool-use"],
|
|
202
|
-
"cost": {
|
|
203
|
-
"promptUsdPer1kTokens": 0.001,
|
|
204
|
-
"completionUsdPer1kTokens": 0.005
|
|
205
|
-
},
|
|
206
|
-
"description": "Fastest and cheapest — routing, classification, simple calls."
|
|
207
211
|
}
|
|
208
212
|
],
|
|
209
213
|
"description": "Anthropic Claude via native adapter."
|
|
@@ -241,7 +245,14 @@ capability requirement (see "How the router picks…" below).
|
|
|
241
245
|
|
|
242
246
|
Nothing to switch off: `dev-echo` is a fallback, so the new provider
|
|
243
247
|
answers every agent it satisfies. A turn that still lands on dev-echo
|
|
244
|
-
carries
|
|
248
|
+
carries the `fallback-provider` and `dev-echo-not-a-model` warnings — see
|
|
249
|
+
mistake 9.
|
|
250
|
+
|
|
251
|
+
**The other one-key presets** work the same way, with their own key:
|
|
252
|
+
`--preset=openai` (`OPENAI_API_KEY`), `--preset=gemini-api` (`GEMINI_API_KEY`,
|
|
253
|
+
a Google AI Studio key; `gemini` is Vertex AI), `--preset=groq`
|
|
254
|
+
(`GROQ_API_KEY`) and `--preset=openrouter` (`OPENROUTER_API_KEY`).
|
|
255
|
+
`kindgi providers presets` lists them with their models.
|
|
245
256
|
|
|
246
257
|
## Path B — Hosted via OpenAI-compat
|
|
247
258
|
|
|
@@ -254,9 +265,9 @@ Works with **any** OpenAI-compatible endpoint. Same adapter, different
|
|
|
254
265
|
| Groq | `https://api.groq.com/openai/v1` |
|
|
255
266
|
| Together | `https://api.together.xyz/v1` |
|
|
256
267
|
| Fireworks | `https://api.fireworks.ai/inference/v1` |
|
|
257
|
-
| OpenRouter | `https://openrouter.ai/api/v1` |
|
|
258
268
|
| DeepSeek | `https://api.deepseek.com/v1` |
|
|
259
269
|
| LiteLLM proxy | `http://localhost:4000/v1` |
|
|
270
|
+
| OpenRouter (a hosted gateway) | `https://openrouter.ai/api/v1` |
|
|
260
271
|
|
|
261
272
|
The connection carries the `baseURL` (in `adapter_config`);
|
|
262
273
|
each endpoint is a separate provider row because each has its own API
|
|
@@ -478,24 +489,16 @@ outside Google Cloud: put a service-account key (its JSON) in a secret
|
|
|
478
489
|
"region": "global",
|
|
479
490
|
"models": [
|
|
480
491
|
{
|
|
481
|
-
"name": "gemini-
|
|
492
|
+
"name": "gemini-3.8-flash",
|
|
482
493
|
"contextWindow": 1048576,
|
|
483
|
-
"features": ["tool-use"],
|
|
494
|
+
"features": ["tool-use", "structured-output", "long-context"],
|
|
484
495
|
"maxOutputTokens": 65536,
|
|
485
|
-
"cost": {
|
|
486
|
-
"promptUsdPer1kTokens": 0.00125,
|
|
487
|
-
"completionUsdPer1kTokens": 0.01,
|
|
488
|
-
"longContext": {
|
|
489
|
-
"thresholdTokens": 200000,
|
|
490
|
-
"promptUsdPer1kTokens": 0.0025,
|
|
491
|
-
"completionUsdPer1kTokens": 0.015
|
|
492
|
-
}
|
|
493
|
-
}
|
|
496
|
+
"cost": { "promptUsdPer1kTokens": 0.00075, "completionUsdPer1kTokens": 0.00375 }
|
|
494
497
|
},
|
|
495
498
|
{
|
|
496
|
-
"name": "gemini-
|
|
499
|
+
"name": "gemini-3.5-flash-lite",
|
|
497
500
|
"contextWindow": 1048576,
|
|
498
|
-
"features": ["tool-use"],
|
|
501
|
+
"features": ["tool-use", "structured-output", "long-context"],
|
|
499
502
|
"maxOutputTokens": 65536,
|
|
500
503
|
"cost": { "promptUsdPer1kTokens": 0.0003, "completionUsdPer1kTokens": 0.0025 }
|
|
501
504
|
}
|
|
@@ -510,11 +513,17 @@ outside Google Cloud: put a service-account key (its JSON) in a secret
|
|
|
510
513
|
- `metadata.region` is the Vertex location: `global`, or a region such as
|
|
511
514
|
`us-central1` or `northamerica-northeast1` when data must stay in one
|
|
512
515
|
place. `unspecified` means `global`. Different locations are different
|
|
513
|
-
provider rows.
|
|
516
|
+
provider rows. Check that the location serves the model: Gemini 3.8 Flash
|
|
517
|
+
isn't served from `us-central1`.
|
|
518
|
+
- Don't register `gemini-2.5-pro` or `gemini-2.5-flash`: Vertex AI retires
|
|
519
|
+
both on 2026-10-20.
|
|
514
520
|
- Rates are per 1K tokens, from Google's published pricing; check them
|
|
515
|
-
before relying on budgets. Thinking tokens bill as output.
|
|
516
|
-
|
|
517
|
-
|
|
521
|
+
before relying on budgets. Thinking tokens bill as output, and Gemini 3.8
|
|
522
|
+
Flash thinks by default. `gemini-3.8-flash`'s rates above are Google's
|
|
523
|
+
launch price, through 2026-12-31 ($0.0015 / $0.0075 from 2027-01-01).
|
|
524
|
+
`longContext` (`{ thresholdTokens, promptUsdPer1kTokens,
|
|
525
|
+
completionUsdPer1kTokens }` in a model's `cost`) switches the whole call
|
|
526
|
+
to the higher rates past the threshold; `cachedPromptMultiplier` (default 0.25) prices cached
|
|
518
527
|
prompt tokens.
|
|
519
528
|
|
|
520
529
|
**Step 3 — register and check:**
|
|
@@ -546,8 +555,10 @@ tenant policy), then sorts survivors in this order:
|
|
|
546
555
|
declares `prefer: [{feature: 'thinking', weight: 3}, ...]`, tuples
|
|
547
556
|
with matching model features (or provider attributes) get higher
|
|
548
557
|
scores. Sorted by summed score, descending.
|
|
549
|
-
3. **Deterministic
|
|
550
|
-
|
|
558
|
+
3. **Deterministic tiebreak.** When scores tie, tuples sort by provider
|
|
559
|
+
id, then the provider's `defaultModel` before its other models, then
|
|
560
|
+
model name — replay-safe and stable. A provider without a
|
|
561
|
+
`defaultModel` falls back to its first model by name.
|
|
551
562
|
|
|
552
563
|
**Practical rule:** preferences are soft — they rank, they don't
|
|
553
564
|
exclude. To guarantee which model runs, make it a hard requirement in
|
|
@@ -696,8 +707,9 @@ defineAgent({
|
|
|
696
707
|
does nothing. Pin the model with a `models: { allow: [...] }`
|
|
697
708
|
requirement instead.
|
|
698
709
|
|
|
699
|
-
9. **Replies still come from dev-echo** (
|
|
700
|
-
result has
|
|
710
|
+
9. **Replies still come from dev-echo** (`⚠ dev-echo isn't a real model: …`
|
|
711
|
+
then `Tool responded: …`; the turn's result has the `fallback-provider`
|
|
712
|
+
and `dev-echo-not-a-model` warnings). dev-echo is a fallback: it
|
|
701
713
|
answers only when no registered provider satisfies the agent. So your
|
|
702
714
|
provider doesn't — check its models' `features` against the agent's
|
|
703
715
|
`capabilities.needs` (mistake 2), a `models` / `providers` allow-list
|
|
@@ -15,8 +15,8 @@ description: >
|
|
|
15
15
|
model by kindgi-authoring-providers.
|
|
16
16
|
type: core
|
|
17
17
|
library: "kindgi (Python)"
|
|
18
|
-
version: "0.1.
|
|
19
|
-
sdk_version: "0.1.4
|
|
18
|
+
version: "0.1.4"
|
|
19
|
+
sdk_version: "0.1.4"
|
|
20
20
|
pack_languages: [python]
|
|
21
21
|
sources:
|
|
22
22
|
- sdks/python/src/kindgi/pack/define.py
|
|
@@ -77,7 +77,7 @@ brief_writer = Agent(
|
|
|
77
77
|
instructions=(
|
|
78
78
|
"You are drafting a brief in {{ jurisdiction }}. The user provides the case "
|
|
79
79
|
"facts; you produce a Section IV argument citing at least two precedents. "
|
|
80
|
-
"
|
|
80
|
+
"Check every cite with the verify-citation tool before using it. Never invent one."
|
|
81
81
|
),
|
|
82
82
|
capabilities=[{"needs": [{"feature": "tool-use"}]}],
|
|
83
83
|
tools=[verify_citation, fetch_precedent], # Tool objects — or {"id", "version"} refs
|
|
@@ -111,7 +111,11 @@ brief_writer = Agent(
|
|
|
111
111
|
`parameters` or the runtime's own variables (`today`, `now`,
|
|
112
112
|
`agent.*`, `conversation.*`), rendered strictly: an unknown variable
|
|
113
113
|
fails the turn. Write it as a brief for a capable colleague: what to
|
|
114
|
-
do, which tools to prefer, what to refuse, the quality bar.
|
|
114
|
+
do, which tools to prefer, what to refuse, the quality bar. Name a
|
|
115
|
+
tool by what it does ("the verify-citation tool"), never by its dotted
|
|
116
|
+
id: the model sees ids in its provider's form (`acme__verify-citation`
|
|
117
|
+
for Anthropic and OpenAI-compatible models), and `acme.verify-citation`
|
|
118
|
+
in the instructions can make it call a name it wasn't given.
|
|
115
119
|
- **`capabilities`** — what the model must support, e.g.
|
|
116
120
|
`[{"needs": [{"feature": "tool-use"}]}]`. The turn routes its first
|
|
117
121
|
capability to pick a provider and model; none declared fails the turn.
|
|
@@ -128,9 +132,9 @@ brief_writer = Agent(
|
|
|
128
132
|
instructions.
|
|
129
133
|
- **`preferred_provider`** / **`preferred_model`** — soft hints: the
|
|
130
134
|
router prefers that provider id (e.g. `"anthropic"`) and/or model name
|
|
131
|
-
(e.g. `"claude-
|
|
135
|
+
(e.g. `"claude-sonnet-5-5"`) when they satisfy the capabilities. To
|
|
132
136
|
*require* a model, put it in the capability:
|
|
133
|
-
`{"needs": [{"feature": "tool-use"}, {"models": {"allow": ["claude-
|
|
137
|
+
`{"needs": [{"feature": "tool-use"}, {"models": {"allow": ["claude-sonnet-5-5"]}}]}`.
|
|
134
138
|
- **`conversation_policy`** — `{"historyLimit": n}` caps the prior
|
|
135
139
|
messages loaded; `hitl` configures approval gates. Absent = the full
|
|
136
140
|
history, no gates. A tenant's `hitl` policy can tighten the gates
|
|
@@ -161,8 +165,9 @@ brief_writer = Agent(
|
|
|
161
165
|
Agents run on a registered model provider; the router picks one whose
|
|
162
166
|
models satisfy `capabilities`. `kindgi dev` gives a new pack `dev-echo`,
|
|
163
167
|
a **fallback** that answers only while no other provider fits — it
|
|
164
|
-
calls the first tool and replies "
|
|
165
|
-
carries
|
|
168
|
+
calls the first tool and replies "⚠ dev-echo isn't a real model: …"
|
|
169
|
+
then "Tool responded: …", and the turn carries the `fallback-provider` and
|
|
170
|
+
`dev-echo-not-a-model` warnings. Register a real model and it
|
|
166
171
|
takes over: see `kindgi-authoring-providers`
|
|
167
172
|
(`kindgi providers register --preset=anthropic`).
|
|
168
173
|
|
|
@@ -14,8 +14,8 @@ description: >
|
|
|
14
14
|
kindgi-python-authoring-tools.
|
|
15
15
|
type: core
|
|
16
16
|
library: "kindgi (Python)"
|
|
17
|
-
version: "0.1.
|
|
18
|
-
sdk_version: "0.1.4
|
|
17
|
+
version: "0.1.3"
|
|
18
|
+
sdk_version: "0.1.4"
|
|
19
19
|
pack_languages: [python]
|
|
20
20
|
sources:
|
|
21
21
|
- sdks/python/src/kindgi/pack/define.py
|
|
@@ -51,7 +51,7 @@ from kindgi import CheckResult, RunTrace, guardrail
|
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
class Config(BaseModel):
|
|
54
|
-
min_lookups: int = Field(1, alias="minLookups", ge=0)
|
|
54
|
+
min_lookups: int = Field(default=1, alias="minLookups", ge=0)
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
@guardrail(
|
|
@@ -14,8 +14,8 @@ description: >
|
|
|
14
14
|
kindgi-python-authoring-agents; models by kindgi-authoring-providers.
|
|
15
15
|
type: core
|
|
16
16
|
library: "kindgi (Python)"
|
|
17
|
-
version: "0.1.
|
|
18
|
-
sdk_version: "0.1.4
|
|
17
|
+
version: "0.1.7"
|
|
18
|
+
sdk_version: "0.1.4"
|
|
19
19
|
pack_languages: [python]
|
|
20
20
|
sources:
|
|
21
21
|
- sdks/python/README.md
|
|
@@ -123,9 +123,12 @@ uv run kindgi runs start --agent=my-pack.echo-agent --input='{"userMessage":"Ada
|
|
|
123
123
|
```
|
|
124
124
|
|
|
125
125
|
The answer comes from `dev-echo`, a **fallback** provider a new pack
|
|
126
|
-
gets: no model, no key — it calls the first tool and replies "
|
|
127
|
-
responded: …", and the turn
|
|
128
|
-
|
|
126
|
+
gets: no model, no key — it calls the first tool and replies "⚠
|
|
127
|
+
dev-echo isn't a real model: …" then "Tool responded: …", and the turn
|
|
128
|
+
carries the `fallback-provider` and `dev-echo-not-a-model` warnings. For a
|
|
129
|
+
real model, put an LLM provider's key in `.env` and register its preset
|
|
130
|
+
(Anthropic below; `kindgi providers presets` lists OpenAI, Gemini, Groq and
|
|
131
|
+
OpenRouter too):
|
|
129
132
|
|
|
130
133
|
```sh
|
|
131
134
|
uv run kindgi secrets set ANTHROPIC_API_KEY --env=local --scope=tenant # no-echo prompt
|
|
@@ -56,14 +56,14 @@ use a real model, set one LLM provider's key and register its preset, with
|
|
|
56
56
|
|
|
57
57
|
```sh
|
|
58
58
|
kindgi secrets set ANTHROPIC_API_KEY --env=local --scope=tenant # no-echo prompt; writes .env.local
|
|
59
|
-
kindgi providers register --preset=anthropic # Opus 5.5, Sonnet 5.5, Haiku 4.5
|
|
59
|
+
kindgi providers register --preset=anthropic # Opus 5.5, Sonnet 5.5 (default), Haiku 5.5, Haiku 4.5
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
Claude takes over from dev-echo on the next turn; nothing to restart.
|
|
63
|
-
`--models=claude-
|
|
63
|
+
`--models=claude-sonnet-5-5` registers one model only. OpenAI
|
|
64
64
|
(`OPENAI_API_KEY`, `--preset=openai`), Gemini (`GEMINI_API_KEY`,
|
|
65
65
|
`--preset=gemini-api`), Groq (`GROQ_API_KEY`, `--preset=groq`) and
|
|
66
|
-
OpenRouter,
|
|
66
|
+
OpenRouter, a hosted service your prompts pass through (`OPENROUTER_API_KEY`,
|
|
67
67
|
`--preset=openrouter`), work the same way; `kindgi providers presets` lists
|
|
68
68
|
the presets (Gemini on Vertex AI too). Picking a model per
|
|
69
69
|
agent, and other providers: `.claude/skills/kindgi-authoring-providers/SKILL.md`.
|
|
@@ -43,14 +43,14 @@ use a real model, set one LLM provider's key and register its preset, with
|
|
|
43
43
|
|
|
44
44
|
```sh
|
|
45
45
|
kindgi secrets set ANTHROPIC_API_KEY --env=local --scope=tenant # no-echo prompt; writes .env.local
|
|
46
|
-
kindgi providers register --preset=anthropic # Opus 5.5, Sonnet 5.5, Haiku 4.5
|
|
46
|
+
kindgi providers register --preset=anthropic # Opus 5.5, Sonnet 5.5 (default), Haiku 5.5, Haiku 4.5
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
Claude takes over from dev-echo on the next turn; nothing to restart.
|
|
50
|
-
`--models=claude-
|
|
50
|
+
`--models=claude-sonnet-5-5` registers one model only. OpenAI
|
|
51
51
|
(`OPENAI_API_KEY`, `--preset=openai`), Gemini (`GEMINI_API_KEY`,
|
|
52
52
|
`--preset=gemini-api`), Groq (`GROQ_API_KEY`, `--preset=groq`) and
|
|
53
|
-
OpenRouter,
|
|
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
56
|
agent, and other providers: `.claude/skills/kindgi-authoring-providers/SKILL.md`.
|
|
@@ -12,8 +12,8 @@ echo_agent = Agent(
|
|
|
12
12
|
name="Echo Agent",
|
|
13
13
|
description="Uses the pack's echo and greet tools; the response-not-empty guardrail guards the output.",
|
|
14
14
|
instructions=(
|
|
15
|
-
"For each user message: if the user sends a name,
|
|
16
|
-
"Otherwise
|
|
15
|
+
"For each user message: if the user sends a name, greet them with the greet tool. "
|
|
16
|
+
"Otherwise echo their message with the echo tool. Quote the tool result verbatim."
|
|
17
17
|
),
|
|
18
18
|
capabilities=[{"needs": [{"feature": "tool-use"}]}],
|
|
19
19
|
tools=[echo, greet],
|
|
@@ -48,14 +48,14 @@ use a real model, set one LLM provider's key and register its preset, with
|
|
|
48
48
|
|
|
49
49
|
```sh
|
|
50
50
|
kindgi secrets set ANTHROPIC_API_KEY --env=local --scope=tenant # no-echo prompt; writes .env.local
|
|
51
|
-
kindgi providers register --preset=anthropic # Opus 5.5, Sonnet 5.5, Haiku 4.5
|
|
51
|
+
kindgi providers register --preset=anthropic # Opus 5.5, Sonnet 5.5 (default), Haiku 5.5, Haiku 4.5
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
Claude takes over from dev-echo on the next turn; nothing to restart.
|
|
55
|
-
`--models=claude-
|
|
55
|
+
`--models=claude-sonnet-5-5` registers one model only. OpenAI
|
|
56
56
|
(`OPENAI_API_KEY`, `--preset=openai`), Gemini (`GEMINI_API_KEY`,
|
|
57
57
|
`--preset=gemini-api`), Groq (`GROQ_API_KEY`, `--preset=groq`) and
|
|
58
|
-
OpenRouter,
|
|
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
61
|
agent, and other providers: `.claude/skills/kindgi-authoring-providers/SKILL.md`.
|
|
@@ -12,7 +12,7 @@ const defined = defineAgent({
|
|
|
12
12
|
description:
|
|
13
13
|
'Uses the pack\'s echo + greet tools; the response-not-empty guardrail guards the output.',
|
|
14
14
|
instructions:
|
|
15
|
-
'For each user message: if the user sends a name,
|
|
15
|
+
'For each user message: if the user sends a name, greet them with the greet tool. Otherwise echo their message with the echo tool. Quote the tool result verbatim in your reply.',
|
|
16
16
|
capabilities: [{ needs: [{ feature: 'tool-use' as const }] }],
|
|
17
17
|
tools: [
|
|
18
18
|
{ id: '{{PACK_ID}}.echo', version: '{{PACK_VERSION}}' },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kindgi/cli",
|
|
3
|
-
"version": "0.1.4
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Command-line interface for Kindgi™ — the sovereign AI OS. Create a pack, run it on your machine (`kindgi dev`), build, sign and deploy it, and work with a running Kindgi API from the terminal.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -37,16 +37,17 @@
|
|
|
37
37
|
"provenance": true
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@kindgi/
|
|
41
|
-
"@kindgi/
|
|
42
|
-
"@kindgi/
|
|
43
|
-
"@kindgi/
|
|
44
|
-
"@kindgi/
|
|
45
|
-
"@kindgi/
|
|
46
|
-
"@kindgi/
|
|
47
|
-
"@kindgi/
|
|
48
|
-
"@kindgi/
|
|
49
|
-
"@kindgi/
|
|
40
|
+
"@kindgi/agents": "0.1.4",
|
|
41
|
+
"@kindgi/client": "0.1.4",
|
|
42
|
+
"@kindgi/dotenv-file": "0.1.4",
|
|
43
|
+
"@kindgi/crypto": "0.1.4",
|
|
44
|
+
"@kindgi/env-schema": "0.1.4",
|
|
45
|
+
"@kindgi/flow": "0.1.4",
|
|
46
|
+
"@kindgi/handler-runtime": "0.1.4",
|
|
47
|
+
"@kindgi/secrets-dotenv": "0.1.4",
|
|
48
|
+
"@kindgi/platform": "0.1.4",
|
|
49
|
+
"@kindgi/sdk": "0.1.4",
|
|
50
|
+
"@kindgi/types": "0.1.4",
|
|
50
51
|
"esbuild": "^0.24.0",
|
|
51
52
|
"semver": "^7.8.5",
|
|
52
53
|
"smol-toml": "^1.9.0",
|