@kindgi/cli 0.1.4-rc.2 → 0.1.4-rc.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 +15 -8
- package/dist/build/defaults.d.ts.map +1 -1
- package/dist/build/defaults.js +2 -1
- package/dist/build/defaults.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +10 -2
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +7 -2
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts +54 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +483 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.js +1 -1
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/providers.d.ts.map +1 -1
- package/dist/commands/providers.js +1 -1
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/run-waits.d.ts +106 -0
- package/dist/commands/run-waits.d.ts.map +1 -0
- package/dist/commands/run-waits.js +233 -0
- package/dist/commands/run-waits.js.map +1 -0
- package/dist/commands/runs.d.ts.map +1 -1
- package/dist/commands/runs.js +43 -18
- package/dist/commands/runs.js.map +1 -1
- package/dist/commands/unwired.d.ts.map +1 -1
- package/dist/commands/unwired.js +0 -5
- package/dist/commands/unwired.js.map +1 -1
- package/dist/context.d.ts +10 -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/bundler.d.ts.map +1 -1
- package/dist/dev/bundler.js +3 -2
- package/dist/dev/bundler.js.map +1 -1
- package/dist/dev/runtime-container.d.ts.map +1 -1
- package/dist/dev/runtime-container.js +7 -4
- package/dist/dev/runtime-container.js.map +1 -1
- package/dist/dev/runtime-image.d.ts +1 -1
- package/dist/dev/runtime-image.js +1 -1
- package/dist/dev/runtime-registry.d.ts +23 -1
- package/dist/dev/runtime-registry.d.ts.map +1 -1
- package/dist/dev/runtime-registry.js +38 -4
- package/dist/dev/runtime-registry.js.map +1 -1
- package/dist/esbuild-loader.d.ts +3 -0
- package/dist/esbuild-loader.d.ts.map +1 -0
- package/dist/esbuild-loader.js +21 -0
- package/dist/esbuild-loader.js.map +1 -0
- package/dist/init/augment-scaffolder.d.ts.map +1 -1
- package/dist/init/augment-scaffolder.js +40 -8
- package/dist/init/augment-scaffolder.js.map +1 -1
- package/dist/init/dependency-specs.d.ts +6 -0
- package/dist/init/dependency-specs.d.ts.map +1 -1
- package/dist/init/dependency-specs.js +8 -0
- package/dist/init/dependency-specs.js.map +1 -1
- package/dist/init/package-json-patcher.d.ts +24 -0
- package/dist/init/package-json-patcher.d.ts.map +1 -1
- package/dist/init/package-json-patcher.js +58 -19
- package/dist/init/package-json-patcher.js.map +1 -1
- package/dist/init/pyproject-patcher.d.ts +6 -0
- package/dist/init/pyproject-patcher.d.ts.map +1 -1
- package/dist/init/pyproject-patcher.js +15 -0
- package/dist/init/pyproject-patcher.js.map +1 -1
- package/dist/init/python-augment.d.ts +5 -1
- package/dist/init/python-augment.d.ts.map +1 -1
- package/dist/init/python-augment.js +28 -6
- package/dist/init/python-augment.js.map +1 -1
- package/dist/init/template-files.d.ts +2 -0
- package/dist/init/template-files.d.ts.map +1 -1
- package/dist/init/template-files.js +2 -1
- package/dist/init/template-files.js.map +1 -1
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +18 -2
- package/dist/main.js.map +1 -1
- package/dist/package-manager.d.ts +34 -3
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.js +83 -4
- package/dist/package-manager.js.map +1 -1
- package/dist/providers/preset-loader.d.ts +2 -0
- package/dist/providers/preset-loader.d.ts.map +1 -1
- package/dist/providers/preset-loader.js +30 -11
- package/dist/providers/preset-loader.js.map +1 -1
- package/dist/providers/presets/gemini-api.json +55 -0
- package/dist/providers/presets/groq.json +39 -0
- package/dist/providers/presets/openai.json +50 -0
- package/dist/providers/presets/openrouter.json +61 -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 +17 -8
- 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 +7 -5
- package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +7 -5
- package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +7 -5
- package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +7 -5
- package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +16 -13
- package/dist/templates/minimal/AGENTS.md +6 -3
- package/dist/templates/minimal/README.md.tmpl +11 -5
- package/dist/templates/minimal/package.json.tmpl +3 -0
- package/dist/templates/minimal/pnpm-workspace.yaml +2 -1
- package/dist/templates/python/AGENTS.md +7 -4
- package/dist/templates/python/README.md.tmpl +11 -5
- package/dist/templates/python/pyproject.toml.tmpl +1 -1
- package/dist/templates/sample/AGENTS.md +6 -3
- package/dist/templates/sample/README.md.tmpl +11 -5
- package/dist/templates/sample/package.json.tmpl +3 -0
- package/dist/templates/sample/pnpm-workspace.yaml +2 -1
- package/package.json +11 -11
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* A preset is a vendor's registration body with the models, context
|
|
7
7
|
* windows and prices filled in (`src/providers/presets/<name>.json`,
|
|
8
8
|
* copied to `dist/providers/presets/` at build): its adapter, the secret
|
|
9
|
-
* its credential lives in (if any), the adapter settings it
|
|
10
|
-
*
|
|
9
|
+
* its credential lives in (if any), the adapter settings it fixes itself
|
|
10
|
+
* (e.g. an OpenAI-compatible endpoint's `baseURL`) or needs from the
|
|
11
|
+
* caller (e.g. Gemini's `--project`), and `metadata`. Prices change
|
|
11
12
|
* with the vendors' — `pricesCheckedAt` says when they were last read.
|
|
12
13
|
*/
|
|
13
14
|
import { readFile as nodeReadFile, readdir as nodeReaddir } from 'node:fs/promises';
|
|
@@ -56,14 +57,9 @@ function checkPreset(input) {
|
|
|
56
57
|
if (p.secret !== undefined && (typeof p.secret !== 'string' || p.secret === '')) {
|
|
57
58
|
return '"secret" must be a non-empty string';
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
typeof s === 'object' &&
|
|
63
|
-
typeof s.key === 'string' &&
|
|
64
|
-
typeof s.description === 'string'))) {
|
|
65
|
-
return '"adapterConfig" must be a list of { key, description }';
|
|
66
|
-
}
|
|
60
|
+
const configProblem = adapterConfigProblem(p);
|
|
61
|
+
if (configProblem !== undefined)
|
|
62
|
+
return configProblem;
|
|
67
63
|
const metadata = p.metadata;
|
|
68
64
|
if (metadata === undefined ||
|
|
69
65
|
typeof metadata.id !== 'string' ||
|
|
@@ -74,6 +70,26 @@ function checkPreset(input) {
|
|
|
74
70
|
}
|
|
75
71
|
return input;
|
|
76
72
|
}
|
|
73
|
+
/** What's wrong with a preset's `adapterConfig` / `adapterConfigValues`, if anything. */
|
|
74
|
+
function adapterConfigProblem(p) {
|
|
75
|
+
if (p.adapterConfig !== undefined &&
|
|
76
|
+
(!Array.isArray(p.adapterConfig) ||
|
|
77
|
+
!p.adapterConfig.every((s) => s !== null &&
|
|
78
|
+
typeof s === 'object' &&
|
|
79
|
+
typeof s.key === 'string' &&
|
|
80
|
+
typeof s.description === 'string'))) {
|
|
81
|
+
return '"adapterConfig" must be a list of { key, description }';
|
|
82
|
+
}
|
|
83
|
+
const values = p.adapterConfigValues;
|
|
84
|
+
if (values !== undefined &&
|
|
85
|
+
(values === null ||
|
|
86
|
+
typeof values !== 'object' ||
|
|
87
|
+
Array.isArray(values) ||
|
|
88
|
+
!Object.values(values).every((v) => ['string', 'number', 'boolean'].includes(typeof v)))) {
|
|
89
|
+
return '"adapterConfigValues" must be an object of string, number or boolean values';
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
77
93
|
/** The registration body for a preset, or why the choices don't fit it. */
|
|
78
94
|
export function presetRegistration(preset, choices) {
|
|
79
95
|
const all = preset.metadata.models;
|
|
@@ -101,7 +117,10 @@ export function presetRegistration(preset, choices) {
|
|
|
101
117
|
};
|
|
102
118
|
}
|
|
103
119
|
const secret = choices.secret ?? preset.secret;
|
|
104
|
-
const adapterConfig =
|
|
120
|
+
const adapterConfig = {
|
|
121
|
+
...preset.adapterConfigValues,
|
|
122
|
+
...Object.fromEntries((preset.adapterConfig ?? []).map((s) => [s.key, choices.settings[s.key]])),
|
|
123
|
+
};
|
|
105
124
|
return {
|
|
106
125
|
kind: 'ok',
|
|
107
126
|
input: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset-loader.js","sourceRoot":"","sources":["../../src/providers/preset-loader.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC
|
|
1
|
+
{"version":3,"file":"preset-loader.js","sourceRoot":"","sources":["../../src/providers/preset-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gemini-api",
|
|
3
|
+
"description": "Gemini on the Gemini Developer API, with an API key from Google AI Studio (key: GEMINI_API_KEY). For Vertex AI, use gemini.",
|
|
4
|
+
"adapterId": "@kindgi/adapter-model-gemini",
|
|
5
|
+
"adapterConfigValues": {
|
|
6
|
+
"api": "developer"
|
|
7
|
+
},
|
|
8
|
+
"secret": "GEMINI_API_KEY",
|
|
9
|
+
"pricesCheckedAt": "2026-10-07",
|
|
10
|
+
"metadata": {
|
|
11
|
+
"id": "gemini-api",
|
|
12
|
+
"region": "unspecified",
|
|
13
|
+
"description": "Gemini on the Gemini Developer API",
|
|
14
|
+
"models": [
|
|
15
|
+
{
|
|
16
|
+
"name": "gemini-3.8-flash",
|
|
17
|
+
"contextWindow": 1048576,
|
|
18
|
+
"maxOutputTokens": 65536,
|
|
19
|
+
"features": ["tool-use", "long-context"],
|
|
20
|
+
"cost": {
|
|
21
|
+
"promptUsdPer1kTokens": 0.00075,
|
|
22
|
+
"completionUsdPer1kTokens": 0.00375
|
|
23
|
+
},
|
|
24
|
+
"description": "Fast and inexpensive (Google's prices for it rise on 2027-01-01)."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "gemini-3.1-pro-preview",
|
|
28
|
+
"contextWindow": 1048576,
|
|
29
|
+
"maxOutputTokens": 65536,
|
|
30
|
+
"features": ["tool-use", "long-context"],
|
|
31
|
+
"cost": {
|
|
32
|
+
"promptUsdPer1kTokens": 0.002,
|
|
33
|
+
"completionUsdPer1kTokens": 0.012,
|
|
34
|
+
"longContext": {
|
|
35
|
+
"thresholdTokens": 200000,
|
|
36
|
+
"promptUsdPer1kTokens": 0.004,
|
|
37
|
+
"completionUsdPer1kTokens": 0.018
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"description": "Most capable Gemini (a preview model)."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "gemini-3.5-flash-lite",
|
|
44
|
+
"contextWindow": 1048576,
|
|
45
|
+
"maxOutputTokens": 65536,
|
|
46
|
+
"features": ["tool-use", "long-context"],
|
|
47
|
+
"cost": {
|
|
48
|
+
"promptUsdPer1kTokens": 0.0003,
|
|
49
|
+
"completionUsdPer1kTokens": 0.0025
|
|
50
|
+
},
|
|
51
|
+
"description": "Cheapest — routing, classification, simple calls."
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "groq",
|
|
3
|
+
"description": "Open-weight models on Groq's fast inference (key: GROQ_API_KEY).",
|
|
4
|
+
"adapterId": "@kindgi/adapter-model-openai-compat",
|
|
5
|
+
"adapterConfigValues": {
|
|
6
|
+
"baseURL": "https://api.groq.com/openai/v1"
|
|
7
|
+
},
|
|
8
|
+
"secret": "GROQ_API_KEY",
|
|
9
|
+
"pricesCheckedAt": "2026-10-07",
|
|
10
|
+
"metadata": {
|
|
11
|
+
"id": "groq",
|
|
12
|
+
"region": "unspecified",
|
|
13
|
+
"description": "Open-weight models on Groq",
|
|
14
|
+
"models": [
|
|
15
|
+
{
|
|
16
|
+
"name": "openai/gpt-oss-120b",
|
|
17
|
+
"contextWindow": 131072,
|
|
18
|
+
"maxOutputTokens": 65536,
|
|
19
|
+
"features": ["tool-use"],
|
|
20
|
+
"cost": {
|
|
21
|
+
"promptUsdPer1kTokens": 0.00015,
|
|
22
|
+
"completionUsdPer1kTokens": 0.0006
|
|
23
|
+
},
|
|
24
|
+
"description": "gpt-oss 120B: the stronger of the two."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "openai/gpt-oss-20b",
|
|
28
|
+
"contextWindow": 131072,
|
|
29
|
+
"maxOutputTokens": 65536,
|
|
30
|
+
"features": ["tool-use"],
|
|
31
|
+
"cost": {
|
|
32
|
+
"promptUsdPer1kTokens": 7.5e-5,
|
|
33
|
+
"completionUsdPer1kTokens": 0.0003
|
|
34
|
+
},
|
|
35
|
+
"description": "gpt-oss 20B: fastest and cheapest."
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "openai",
|
|
3
|
+
"description": "GPT on the OpenAI API (key: OPENAI_API_KEY).",
|
|
4
|
+
"adapterId": "@kindgi/adapter-model-openai-compat",
|
|
5
|
+
"adapterConfigValues": {
|
|
6
|
+
"baseURL": "https://api.openai.com/v1"
|
|
7
|
+
},
|
|
8
|
+
"secret": "OPENAI_API_KEY",
|
|
9
|
+
"pricesCheckedAt": "2026-10-07",
|
|
10
|
+
"metadata": {
|
|
11
|
+
"id": "openai",
|
|
12
|
+
"region": "unspecified",
|
|
13
|
+
"description": "GPT on the OpenAI API",
|
|
14
|
+
"models": [
|
|
15
|
+
{
|
|
16
|
+
"name": "gpt-6.1-sol",
|
|
17
|
+
"contextWindow": 1050000,
|
|
18
|
+
"maxOutputTokens": 128000,
|
|
19
|
+
"features": ["tool-use", "parallel-tool-use", "structured-output", "long-context"],
|
|
20
|
+
"cost": {
|
|
21
|
+
"promptUsdPer1kTokens": 0.002,
|
|
22
|
+
"completionUsdPer1kTokens": 0.01
|
|
23
|
+
},
|
|
24
|
+
"description": "Balanced performance and cost."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "gpt-6-astra",
|
|
28
|
+
"contextWindow": 1050000,
|
|
29
|
+
"maxOutputTokens": 128000,
|
|
30
|
+
"features": ["tool-use", "parallel-tool-use", "structured-output", "long-context"],
|
|
31
|
+
"cost": {
|
|
32
|
+
"promptUsdPer1kTokens": 0.01,
|
|
33
|
+
"completionUsdPer1kTokens": 0.05
|
|
34
|
+
},
|
|
35
|
+
"description": "Most capable — hard reasoning and long agentic work."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "gpt-6-luna",
|
|
39
|
+
"contextWindow": 1050000,
|
|
40
|
+
"maxOutputTokens": 128000,
|
|
41
|
+
"features": ["tool-use", "parallel-tool-use", "structured-output", "long-context"],
|
|
42
|
+
"cost": {
|
|
43
|
+
"promptUsdPer1kTokens": 0.0001,
|
|
44
|
+
"completionUsdPer1kTokens": 0.0005
|
|
45
|
+
},
|
|
46
|
+
"description": "Fastest and cheapest — routing, classification, simple calls."
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "openrouter",
|
|
3
|
+
"description": "Many vendors' models through OpenRouter, with one key (key: OPENROUTER_API_KEY).",
|
|
4
|
+
"adapterId": "@kindgi/adapter-model-openai-compat",
|
|
5
|
+
"adapterConfigValues": {
|
|
6
|
+
"baseURL": "https://openrouter.ai/api/v1"
|
|
7
|
+
},
|
|
8
|
+
"secret": "OPENROUTER_API_KEY",
|
|
9
|
+
"pricesCheckedAt": "2026-10-07",
|
|
10
|
+
"metadata": {
|
|
11
|
+
"id": "openrouter",
|
|
12
|
+
"region": "unspecified",
|
|
13
|
+
"description": "Models from several vendors through OpenRouter",
|
|
14
|
+
"models": [
|
|
15
|
+
{
|
|
16
|
+
"name": "anthropic/claude-sonnet-5.5",
|
|
17
|
+
"contextWindow": 1000000,
|
|
18
|
+
"maxOutputTokens": 128000,
|
|
19
|
+
"features": ["tool-use", "parallel-tool-use", "structured-output", "long-context"],
|
|
20
|
+
"cost": {
|
|
21
|
+
"promptUsdPer1kTokens": 0.002,
|
|
22
|
+
"completionUsdPer1kTokens": 0.01
|
|
23
|
+
},
|
|
24
|
+
"description": "Claude Sonnet 5.5: balanced performance and cost."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "openai/gpt-6.1-sol",
|
|
28
|
+
"contextWindow": 1050000,
|
|
29
|
+
"maxOutputTokens": 128000,
|
|
30
|
+
"features": ["tool-use", "parallel-tool-use", "structured-output", "long-context"],
|
|
31
|
+
"cost": {
|
|
32
|
+
"promptUsdPer1kTokens": 0.002,
|
|
33
|
+
"completionUsdPer1kTokens": 0.01
|
|
34
|
+
},
|
|
35
|
+
"description": "GPT-6.1 Sol: balanced performance and cost."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "google/gemini-3.8-flash",
|
|
39
|
+
"contextWindow": 1048576,
|
|
40
|
+
"maxOutputTokens": 65536,
|
|
41
|
+
"features": ["tool-use", "parallel-tool-use", "structured-output", "long-context"],
|
|
42
|
+
"cost": {
|
|
43
|
+
"promptUsdPer1kTokens": 0.00075,
|
|
44
|
+
"completionUsdPer1kTokens": 0.00375
|
|
45
|
+
},
|
|
46
|
+
"description": "Gemini 3.8 Flash: fast and inexpensive."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "openai/gpt-6-luna",
|
|
50
|
+
"contextWindow": 1050000,
|
|
51
|
+
"maxOutputTokens": 128000,
|
|
52
|
+
"features": ["tool-use", "parallel-tool-use", "structured-output", "long-context"],
|
|
53
|
+
"cost": {
|
|
54
|
+
"promptUsdPer1kTokens": 0.0001,
|
|
55
|
+
"completionUsdPer1kTokens": 0.0005
|
|
56
|
+
},
|
|
57
|
+
"description": "GPT-6 Luna: fastest and cheapest — routing, classification, simple calls."
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -22,8 +22,8 @@ description: >
|
|
|
22
22
|
kindgi-getting-started.
|
|
23
23
|
type: core
|
|
24
24
|
library: "@kindgi/sdk"
|
|
25
|
-
version: "0.9.
|
|
26
|
-
sdk_version: "0.1.4-rc.
|
|
25
|
+
version: "0.9.4"
|
|
26
|
+
sdk_version: "0.1.4-rc.4"
|
|
27
27
|
pack_languages: [node, python]
|
|
28
28
|
sources:
|
|
29
29
|
- packages/adapters/model-anthropic/src/provider.ts
|
|
@@ -305,15 +305,23 @@ kindgi secrets set GROQ_API_KEY --env=local --scope=tenant
|
|
|
305
305
|
|
|
306
306
|
**Steps 3–5** same as Path A.
|
|
307
307
|
|
|
308
|
-
## Path C — Local via in-process ONNX
|
|
308
|
+
## Path C — Local via in-process ONNX (runtime from source only)
|
|
309
|
+
|
|
310
|
+
> ⚠️ **Not in the runtime image, so not under `kindgi dev`.** The adapter
|
|
311
|
+
> runs ONNX through `onnxruntime-node`, which ships glibc binaries only,
|
|
312
|
+
> and the Kindgi runtime image is Alpine (musl): the adapter can't load
|
|
313
|
+
> there (`Error loading shared library ld-linux-…`). `kindgi dev` runs
|
|
314
|
+
> that image, so this path fails under it. It works only when the
|
|
315
|
+
> runtime itself runs from source on macOS or a glibc Linux. **For a
|
|
316
|
+
> local model under `kindgi dev`, use Ollama** ([Local via Ollama](#local-via-ollama-via-path-b)).
|
|
309
317
|
|
|
310
318
|
> ⚠️ **Dev-only.** The in-process ONNX adapter writes weights to
|
|
311
319
|
> `~/.cache/huggingface/hub/` — a per-machine cache with no production
|
|
312
320
|
> recipe (no volume-mount recipe, no image-bake pattern, no offline
|
|
313
|
-
> mode, no SHA pinning). Good for
|
|
314
|
-
>
|
|
315
|
-
> that rely on this adapter to production.** Use hosted
|
|
316
|
-
> (Path A) or Ollama (Path B) instead.
|
|
321
|
+
> mode, no SHA pinning). Good for smoke tests and CI runners that run
|
|
322
|
+
> the runtime from source and keep the same disk between runs. **Do not
|
|
323
|
+
> ship packs that rely on this adapter to production.** Use hosted
|
|
324
|
+
> providers (Path A) or Ollama (Path B) instead.
|
|
317
325
|
|
|
318
326
|
No API key. No network. Bundled with the framework — the adapter ships
|
|
319
327
|
`smollm2-360m` by default (~273 MB weights, cached at
|
|
@@ -385,7 +393,8 @@ production. Skip only for scripted teardown where the model is already
|
|
|
385
393
|
cached (`~/.cache/huggingface/hub/models--HuggingFaceTB--SmolLM2-360M-Instruct/`).
|
|
386
394
|
|
|
387
395
|
`prepare` is idempotent: subsequent invocations are cache hits and
|
|
388
|
-
return almost instantly, so put it in
|
|
396
|
+
return almost instantly, so put it in the script that boots your
|
|
397
|
+
from-source runtime.
|
|
389
398
|
|
|
390
399
|
Multi-model providers: prepare each model separately.
|
|
391
400
|
```sh
|
|
@@ -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-rc.
|
|
18
|
+
version: "0.1.1"
|
|
19
|
+
sdk_version: "0.1.4-rc.4"
|
|
20
20
|
pack_languages: [python]
|
|
21
21
|
sources:
|
|
22
22
|
- sdks/python/src/kindgi/pack/define.py
|
|
@@ -25,9 +25,11 @@ sources:
|
|
|
25
25
|
|
|
26
26
|
# Authoring Kindgi agents in Python
|
|
27
27
|
|
|
28
|
-
> **Running `kindgi`:**
|
|
29
|
-
>
|
|
30
|
-
>
|
|
28
|
+
> **Running `kindgi`:** the CLI is `kindgi-cli` from PyPI, pinned in the
|
|
29
|
+
> pack's dev group, so every `kindgi <command>` below runs as
|
|
30
|
+
> `uv run kindgi <command>` (Poetry: `poetry run kindgi <command>`). Python
|
|
31
|
+
> commands run in the pack's environment the same way: `uv run …` (or
|
|
32
|
+
> `.venv/bin/python …`).
|
|
31
33
|
|
|
32
34
|
An **agent** is a versioned, model-driven orchestrator: instructions (a
|
|
33
35
|
prompt template), the tools it may call, the capabilities its model
|
|
@@ -16,8 +16,8 @@ description: >
|
|
|
16
16
|
kindgi-python-authoring-agents.
|
|
17
17
|
type: core
|
|
18
18
|
library: "kindgi (Python)"
|
|
19
|
-
version: "0.1.
|
|
20
|
-
sdk_version: "0.1.4-rc.
|
|
19
|
+
version: "0.1.2"
|
|
20
|
+
sdk_version: "0.1.4-rc.4"
|
|
21
21
|
pack_languages: [python]
|
|
22
22
|
sources:
|
|
23
23
|
- sdks/python/src/kindgi/pack/define.py
|
|
@@ -27,9 +27,11 @@ sources:
|
|
|
27
27
|
|
|
28
28
|
# Authoring Kindgi flows in Python
|
|
29
29
|
|
|
30
|
-
> **Running `kindgi`:**
|
|
31
|
-
>
|
|
32
|
-
>
|
|
30
|
+
> **Running `kindgi`:** the CLI is `kindgi-cli` from PyPI, pinned in the
|
|
31
|
+
> pack's dev group, so every `kindgi <command>` below runs as
|
|
32
|
+
> `uv run kindgi <command>` (Poetry: `poetry run kindgi <command>`). Python
|
|
33
|
+
> commands run in the pack's environment the same way: `uv run …` (or
|
|
34
|
+
> `.venv/bin/python …`).
|
|
33
35
|
|
|
34
36
|
A **flow** is a versioned, durable graph of steps: tools (your code) and
|
|
35
37
|
agents (a model's judgment), joined by edges that can carry conditions.
|
|
@@ -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-rc.
|
|
17
|
+
version: "0.1.2"
|
|
18
|
+
sdk_version: "0.1.4-rc.4"
|
|
19
19
|
pack_languages: [python]
|
|
20
20
|
sources:
|
|
21
21
|
- sdks/python/src/kindgi/pack/define.py
|
|
@@ -25,9 +25,11 @@ sources:
|
|
|
25
25
|
|
|
26
26
|
# Authoring Kindgi guardrails in Python
|
|
27
27
|
|
|
28
|
-
> **Running `kindgi`:**
|
|
29
|
-
>
|
|
30
|
-
>
|
|
28
|
+
> **Running `kindgi`:** the CLI is `kindgi-cli` from PyPI, pinned in the
|
|
29
|
+
> pack's dev group, so every `kindgi <command>` below runs as
|
|
30
|
+
> `uv run kindgi <command>` (Poetry: `poetry run kindgi <command>`). Python
|
|
31
|
+
> commands run in the pack's environment the same way: `uv run …` (or
|
|
32
|
+
> `.venv/bin/python …`).
|
|
31
33
|
|
|
32
34
|
A **guardrail** is a rule an agent's turn must satisfy: a **check** (a
|
|
33
35
|
function over the turn's trace) plus an **action** (what happens when it
|
|
@@ -14,8 +14,8 @@ description: >
|
|
|
14
14
|
kindgi-python-getting-started.
|
|
15
15
|
type: core
|
|
16
16
|
library: "kindgi (Python)"
|
|
17
|
-
version: "0.1.
|
|
18
|
-
sdk_version: "0.1.4-rc.
|
|
17
|
+
version: "0.1.2"
|
|
18
|
+
sdk_version: "0.1.4-rc.4"
|
|
19
19
|
pack_languages: [python]
|
|
20
20
|
sources:
|
|
21
21
|
- sdks/python/src/kindgi/pack/define.py
|
|
@@ -25,9 +25,11 @@ sources:
|
|
|
25
25
|
|
|
26
26
|
# Authoring Kindgi tools in Python
|
|
27
27
|
|
|
28
|
-
> **Running `kindgi`:**
|
|
29
|
-
>
|
|
30
|
-
>
|
|
28
|
+
> **Running `kindgi`:** the CLI is `kindgi-cli` from PyPI, pinned in the
|
|
29
|
+
> pack's dev group, so every `kindgi <command>` below runs as
|
|
30
|
+
> `uv run kindgi <command>` (Poetry: `poetry run kindgi <command>`). Python
|
|
31
|
+
> commands run in the pack's environment the same way: `uv run …` (or
|
|
32
|
+
> `.venv/bin/python …`).
|
|
31
33
|
|
|
32
34
|
A **tool** is a unit of work an agent (or a flow step) calls: typed
|
|
33
35
|
input, typed output, your code in between. In a Python pack it is a
|
|
@@ -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-rc.
|
|
17
|
+
version: "0.1.6"
|
|
18
|
+
sdk_version: "0.1.4-rc.4"
|
|
19
19
|
pack_languages: [python]
|
|
20
20
|
sources:
|
|
21
21
|
- sdks/python/README.md
|
|
@@ -25,9 +25,11 @@ sources:
|
|
|
25
25
|
|
|
26
26
|
# Getting started with Kindgi in Python
|
|
27
27
|
|
|
28
|
-
> **Running `kindgi`:**
|
|
29
|
-
>
|
|
30
|
-
>
|
|
28
|
+
> **Running `kindgi`:** the CLI is `kindgi-cli` from PyPI (the Kindgi CLI
|
|
29
|
+
> with its own Node, so no Node install), pinned in the pack's dev group.
|
|
30
|
+
> Every `kindgi <command>` below runs as `uv run kindgi <command>` (Poetry:
|
|
31
|
+
> `poetry run kindgi <command>`). Python commands run in the pack's
|
|
32
|
+
> environment the same way: `uv run …`.
|
|
31
33
|
|
|
32
34
|
## What a pack is
|
|
33
35
|
|
|
@@ -52,11 +54,11 @@ primitive; `test_*.py`, `*_test.py` and `conftest.py` are skipped.
|
|
|
52
54
|
## Scaffold a new pack
|
|
53
55
|
|
|
54
56
|
```sh
|
|
55
|
-
kindgi init my-pack --template=python
|
|
57
|
+
uvx --from "kindgi-cli>=0.1,<0.2" kindgi init my-pack --template=python
|
|
56
58
|
cd my-pack
|
|
57
|
-
uv sync # .venv with the kindgi package
|
|
59
|
+
uv sync # .venv with the kindgi package and the kindgi CLI
|
|
58
60
|
uv run pytest
|
|
59
|
-
kindgi dev
|
|
61
|
+
uv run kindgi dev # boots Kindgi locally and runs this pack, reloading on save
|
|
60
62
|
```
|
|
61
63
|
|
|
62
64
|
`kindgi dev` needs Postgres: it starts one in Docker unless
|
|
@@ -70,9 +72,10 @@ kindgi dev # boots Kindgi locally and runs this pack, reloading on save
|
|
|
70
72
|
In the app's directory (where its `pyproject.toml` is):
|
|
71
73
|
|
|
72
74
|
```sh
|
|
73
|
-
|
|
75
|
+
uv add --dev "kindgi-cli>=0.1,<0.2" # the CLI (Poetry: poetry add --group dev …)
|
|
76
|
+
uv run kindgi init # --pack-id=<id> if the app's name doesn't make one
|
|
74
77
|
uv sync # or what it prints for Poetry / pip
|
|
75
|
-
kindgi dev
|
|
78
|
+
uv run kindgi dev
|
|
76
79
|
```
|
|
77
80
|
|
|
78
81
|
`kindgi init` edits the app's `pyproject.toml` in place — your layout and
|
|
@@ -116,7 +119,7 @@ The `[tool.kindgi]` keys are the ones `kindgi.config.ts` takes —
|
|
|
116
119
|
With `kindgi dev` running, from another terminal in the pack directory:
|
|
117
120
|
|
|
118
121
|
```sh
|
|
119
|
-
kindgi runs start --agent=my-pack.echo-agent --input='{"userMessage":"Ada"}'
|
|
122
|
+
uv run kindgi runs start --agent=my-pack.echo-agent --input='{"userMessage":"Ada"}'
|
|
120
123
|
```
|
|
121
124
|
|
|
122
125
|
The answer comes from `dev-echo`, a **fallback** provider a new pack
|
|
@@ -125,8 +128,8 @@ responded: …", and the turn carries a `fallback-provider` warning. For
|
|
|
125
128
|
a real model, put the key in `.env` and register a provider:
|
|
126
129
|
|
|
127
130
|
```sh
|
|
128
|
-
kindgi secrets set ANTHROPIC_API_KEY --env=local --scope=tenant # no-echo prompt
|
|
129
|
-
kindgi providers register --preset=anthropic
|
|
131
|
+
uv run kindgi secrets set ANTHROPIC_API_KEY --env=local --scope=tenant # no-echo prompt
|
|
132
|
+
uv run kindgi providers register --preset=anthropic
|
|
130
133
|
```
|
|
131
134
|
|
|
132
135
|
It takes over at the next turn. That registration is in this project's dev
|
|
@@ -7,9 +7,12 @@ field-level docs. Iterate with `kindgi dev`; `kindgi --help` lists
|
|
|
7
7
|
the full CLI.
|
|
8
8
|
|
|
9
9
|
Agents answer through a model provider. `kindgi dev` gives a new pack
|
|
10
|
-
`dev-echo`, a fallback that calls the first tool and
|
|
11
|
-
"Tool responded: …" while no other provider
|
|
12
|
-
|
|
10
|
+
`dev-echo`, a fallback that isn't a model: it calls the first tool and
|
|
11
|
+
replies "Tool responded: …" after a warning line, while no other provider
|
|
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` or
|
|
14
|
+
`OPENROUTER_API_KEY`) and declare its preset (`{ preset: 'anthropic' }`,
|
|
15
|
+
`'openai'`, `'gemini-api'`, `'groq'` or `'openrouter'`) in
|
|
13
16
|
`kindgi.config.ts`'s `providers`: `kindgi dev` then registers it on every
|
|
14
17
|
boot, in every worktree. Other providers and per-agent model choice:
|
|
15
18
|
`.claude/skills/kindgi-authoring-providers/SKILL.md`.
|