@kindgi/cli 0.0.0-bootstrap.0 → 0.1.1
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/LICENSE +201 -0
- package/README.md +738 -1
- package/dist/build/apt.d.ts +16 -0
- package/dist/build/apt.d.ts.map +1 -0
- package/dist/build/apt.js +50 -0
- package/dist/build/apt.js.map +1 -0
- package/dist/build/bundle.d.ts +48 -0
- package/dist/build/bundle.d.ts.map +1 -0
- package/dist/build/bundle.js +125 -0
- package/dist/build/bundle.js.map +1 -0
- package/dist/build/containerfile.d.ts +27 -0
- package/dist/build/containerfile.d.ts.map +1 -0
- package/dist/build/containerfile.js +197 -0
- package/dist/build/containerfile.js.map +1 -0
- package/dist/build/context-files.d.ts +24 -0
- package/dist/build/context-files.d.ts.map +1 -0
- package/dist/build/context-files.js +99 -0
- package/dist/build/context-files.js.map +1 -0
- package/dist/build/defaults.d.ts +66 -0
- package/dist/build/defaults.d.ts.map +1 -0
- package/dist/build/defaults.js +597 -0
- package/dist/build/defaults.js.map +1 -0
- package/dist/build/envelope.d.ts +72 -0
- package/dist/build/envelope.d.ts.map +1 -0
- package/dist/build/envelope.js +76 -0
- package/dist/build/envelope.js.map +1 -0
- package/dist/build/host-install.d.ts +100 -0
- package/dist/build/host-install.d.ts.map +1 -0
- package/dist/build/host-install.js +443 -0
- package/dist/build/host-install.js.map +1 -0
- package/dist/build/image-config.d.ts +32 -0
- package/dist/build/image-config.d.ts.map +1 -0
- package/dist/build/image-config.js +129 -0
- package/dist/build/image-config.js.map +1 -0
- package/dist/build/integrity.d.ts +51 -0
- package/dist/build/integrity.d.ts.map +1 -0
- package/dist/build/integrity.js +75 -0
- package/dist/build/integrity.js.map +1 -0
- package/dist/build/node-image.d.ts +18 -0
- package/dist/build/node-image.d.ts.map +1 -0
- package/dist/build/node-image.js +46 -0
- package/dist/build/node-image.js.map +1 -0
- package/dist/build/pack-root.d.ts +69 -0
- package/dist/build/pack-root.d.ts.map +1 -0
- package/dist/build/pack-root.js +102 -0
- package/dist/build/pack-root.js.map +1 -0
- package/dist/build/poetry-requirements.d.ts +5 -0
- package/dist/build/poetry-requirements.d.ts.map +1 -0
- package/dist/build/poetry-requirements.js +8 -0
- package/dist/build/poetry-requirements.js.map +1 -0
- package/dist/build/python-image.d.ts +40 -0
- package/dist/build/python-image.d.ts.map +1 -0
- package/dist/build/python-image.js +197 -0
- package/dist/build/python-image.js.map +1 -0
- package/dist/build/runners.d.ts +259 -0
- package/dist/build/runners.d.ts.map +1 -0
- package/dist/build/runners.js +4 -0
- package/dist/build/runners.js.map +1 -0
- package/dist/build/version-specifier.d.ts +2 -0
- package/dist/build/version-specifier.d.ts.map +1 -0
- package/dist/build/version-specifier.js +70 -0
- package/dist/build/version-specifier.js.map +1 -0
- package/dist/cli-package.d.ts +15 -0
- package/dist/cli-package.d.ts.map +1 -0
- package/dist/cli-package.js +37 -0
- package/dist/cli-package.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +26 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/adapters.d.ts +3 -0
- package/dist/commands/adapters.d.ts.map +1 -0
- package/dist/commands/adapters.js +148 -0
- package/dist/commands/adapters.js.map +1 -0
- package/dist/commands/agents.d.ts +3 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +82 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/approvals.d.ts +3 -0
- package/dist/commands/approvals.d.ts.map +1 -0
- package/dist/commands/approvals.js +92 -0
- package/dist/commands/approvals.js.map +1 -0
- package/dist/commands/artifacts.d.ts +3 -0
- package/dist/commands/artifacts.d.ts.map +1 -0
- package/dist/commands/artifacts.js +87 -0
- package/dist/commands/artifacts.js.map +1 -0
- package/dist/commands/auth.d.ts +25 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +283 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/build.d.ts +46 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +902 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/capabilities.d.ts +3 -0
- package/dist/commands/capabilities.d.ts.map +1 -0
- package/dist/commands/capabilities.js +38 -0
- package/dist/commands/capabilities.js.map +1 -0
- package/dist/commands/conversations.d.ts +3 -0
- package/dist/commands/conversations.d.ts.map +1 -0
- package/dist/commands/conversations.js +75 -0
- package/dist/commands/conversations.js.map +1 -0
- package/dist/commands/deploy.d.ts +7 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +697 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts +43 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +1110 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/env.d.ts +27 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +816 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/feedback.d.ts +33 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +374 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/flows.d.ts +3 -0
- package/dist/commands/flows.d.ts.map +1 -0
- package/dist/commands/flows.js +60 -0
- package/dist/commands/flows.js.map +1 -0
- package/dist/commands/guardrails.d.ts +3 -0
- package/dist/commands/guardrails.d.ts.map +1 -0
- package/dist/commands/guardrails.js +89 -0
- package/dist/commands/guardrails.js.map +1 -0
- package/dist/commands/health.d.ts +8 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +40 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/helpers.d.ts +48 -0
- package/dist/commands/helpers.d.ts.map +1 -0
- package/dist/commands/helpers.js +110 -0
- package/dist/commands/helpers.js.map +1 -0
- package/dist/commands/index.d.ts +7 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +90 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +46 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +454 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/key.d.ts +3 -0
- package/dist/commands/key.d.ts.map +1 -0
- package/dist/commands/key.js +322 -0
- package/dist/commands/key.js.map +1 -0
- package/dist/commands/mcp.d.ts +43 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +433 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/memory.d.ts +3 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +82 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/observations.d.ts +3 -0
- package/dist/commands/observations.d.ts.map +1 -0
- package/dist/commands/observations.js +27 -0
- package/dist/commands/observations.js.map +1 -0
- package/dist/commands/proposals.d.ts +3 -0
- package/dist/commands/proposals.d.ts.map +1 -0
- package/dist/commands/proposals.js +116 -0
- package/dist/commands/proposals.js.map +1 -0
- package/dist/commands/provenance.d.ts +3 -0
- package/dist/commands/provenance.d.ts.map +1 -0
- package/dist/commands/provenance.js +53 -0
- package/dist/commands/provenance.js.map +1 -0
- package/dist/commands/providers.d.ts +3 -0
- package/dist/commands/providers.d.ts.map +1 -0
- package/dist/commands/providers.js +212 -0
- package/dist/commands/providers.js.map +1 -0
- package/dist/commands/reviewers.d.ts +3 -0
- package/dist/commands/reviewers.d.ts.map +1 -0
- package/dist/commands/reviewers.js +78 -0
- package/dist/commands/reviewers.js.map +1 -0
- package/dist/commands/runs.d.ts +3 -0
- package/dist/commands/runs.d.ts.map +1 -0
- package/dist/commands/runs.js +223 -0
- package/dist/commands/runs.js.map +1 -0
- package/dist/commands/secrets.d.ts +18 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +702 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/skills.d.ts +64 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +430 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/test.d.ts +5 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +181 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/tokens.d.ts +3 -0
- package/dist/commands/tokens.d.ts.map +1 -0
- package/dist/commands/tokens.js +33 -0
- package/dist/commands/tokens.js.map +1 -0
- package/dist/commands/tools.d.ts +3 -0
- package/dist/commands/tools.d.ts.map +1 -0
- package/dist/commands/tools.js +162 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/types.d.ts +54 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +4 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/unwired.d.ts +22 -0
- package/dist/commands/unwired.d.ts.map +1 -0
- package/dist/commands/unwired.js +52 -0
- package/dist/commands/unwired.js.map +1 -0
- package/dist/commands/version.d.ts +8 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +41 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/config.d.ts +42 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +83 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +162 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +45 -0
- package/dist/context.js.map +1 -0
- package/dist/deploy/defaults.d.ts +14 -0
- package/dist/deploy/defaults.d.ts.map +1 -0
- package/dist/deploy/defaults.js +37 -0
- package/dist/deploy/defaults.js.map +1 -0
- package/dist/deploy/envelope-loader.d.ts +24 -0
- package/dist/deploy/envelope-loader.d.ts.map +1 -0
- package/dist/deploy/envelope-loader.js +141 -0
- package/dist/deploy/envelope-loader.js.map +1 -0
- package/dist/deploy/post.d.ts +48 -0
- package/dist/deploy/post.d.ts.map +1 -0
- package/dist/deploy/post.js +210 -0
- package/dist/deploy/post.js.map +1 -0
- package/dist/deploy/response.d.ts +42 -0
- package/dist/deploy/response.d.ts.map +1 -0
- package/dist/deploy/response.js +128 -0
- package/dist/deploy/response.js.map +1 -0
- package/dist/deploy/runners.d.ts +218 -0
- package/dist/deploy/runners.d.ts.map +1 -0
- package/dist/deploy/runners.js +4 -0
- package/dist/deploy/runners.js.map +1 -0
- package/dist/dev/bundler.d.ts +10 -0
- package/dist/dev/bundler.d.ts.map +1 -0
- package/dist/dev/bundler.js +235 -0
- package/dist/dev/bundler.js.map +1 -0
- package/dist/dev/defaults.d.ts +140 -0
- package/dist/dev/defaults.d.ts.map +1 -0
- package/dist/dev/defaults.js +709 -0
- package/dist/dev/defaults.js.map +1 -0
- package/dist/dev/dev-only-imports.d.ts +15 -0
- package/dist/dev/dev-only-imports.d.ts.map +1 -0
- package/dist/dev/dev-only-imports.js +57 -0
- package/dist/dev/dev-only-imports.js.map +1 -0
- package/dist/dev/docker-compose.dev.yml +68 -0
- package/dist/dev/index-child.d.ts +2 -0
- package/dist/dev/index-child.d.ts.map +1 -0
- package/dist/dev/index-child.js +53 -0
- package/dist/dev/index-child.js.map +1 -0
- package/dist/dev/pack-code.d.ts +36 -0
- package/dist/dev/pack-code.d.ts.map +1 -0
- package/dist/dev/pack-code.js +129 -0
- package/dist/dev/pack-code.js.map +1 -0
- package/dist/dev/pack-env.d.ts +13 -0
- package/dist/dev/pack-env.d.ts.map +1 -0
- package/dist/dev/pack-env.js +36 -0
- package/dist/dev/pack-env.js.map +1 -0
- package/dist/dev/pack-service.d.ts +40 -0
- package/dist/dev/pack-service.d.ts.map +1 -0
- package/dist/dev/pack-service.js +189 -0
- package/dist/dev/pack-service.js.map +1 -0
- package/dist/dev/paths.d.ts +22 -0
- package/dist/dev/paths.d.ts.map +1 -0
- package/dist/dev/paths.js +35 -0
- package/dist/dev/paths.js.map +1 -0
- package/dist/dev/postgres-container.d.ts +77 -0
- package/dist/dev/postgres-container.d.ts.map +1 -0
- package/dist/dev/postgres-container.js +346 -0
- package/dist/dev/postgres-container.js.map +1 -0
- package/dist/dev/python-builder.d.ts +16 -0
- package/dist/dev/python-builder.d.ts.map +1 -0
- package/dist/dev/python-builder.js +122 -0
- package/dist/dev/python-builder.js.map +1 -0
- package/dist/dev/register.d.ts +71 -0
- package/dist/dev/register.d.ts.map +1 -0
- package/dist/dev/register.js +54 -0
- package/dist/dev/register.js.map +1 -0
- package/dist/dev/runners.d.ts +312 -0
- package/dist/dev/runners.d.ts.map +1 -0
- package/dist/dev/runners.js +4 -0
- package/dist/dev/runners.js.map +1 -0
- package/dist/dev/runtime-container.d.ts +71 -0
- package/dist/dev/runtime-container.d.ts.map +1 -0
- package/dist/dev/runtime-container.js +173 -0
- package/dist/dev/runtime-container.js.map +1 -0
- package/dist/dev/runtime-env.d.ts +62 -0
- package/dist/dev/runtime-env.d.ts.map +1 -0
- package/dist/dev/runtime-env.js +100 -0
- package/dist/dev/runtime-env.js.map +1 -0
- package/dist/dev/runtime-image.d.ts +26 -0
- package/dist/dev/runtime-image.d.ts.map +1 -0
- package/dist/dev/runtime-image.js +44 -0
- package/dist/dev/runtime-image.js.map +1 -0
- package/dist/dev/runtime-registry.d.ts +73 -0
- package/dist/dev/runtime-registry.d.ts.map +1 -0
- package/dist/dev/runtime-registry.js +111 -0
- package/dist/dev/runtime-registry.js.map +1 -0
- package/dist/env/defaults.d.ts +3 -0
- package/dist/env/defaults.d.ts.map +1 -0
- package/dist/env/defaults.js +22 -0
- package/dist/env/defaults.js.map +1 -0
- package/dist/env/pack-env-plan.d.ts +70 -0
- package/dist/env/pack-env-plan.d.ts.map +1 -0
- package/dist/env/pack-env-plan.js +236 -0
- package/dist/env/pack-env-plan.js.map +1 -0
- package/dist/env/parser.d.ts +9 -0
- package/dist/env/parser.d.ts.map +1 -0
- package/dist/env/parser.js +11 -0
- package/dist/env/parser.js.map +1 -0
- package/dist/env/project-env.d.ts +34 -0
- package/dist/env/project-env.d.ts.map +1 -0
- package/dist/env/project-env.js +45 -0
- package/dist/env/project-env.js.map +1 -0
- package/dist/env/runners.d.ts +22 -0
- package/dist/env/runners.d.ts.map +1 -0
- package/dist/env/runners.js +4 -0
- package/dist/env/runners.js.map +1 -0
- package/dist/env/writer.d.ts +7 -0
- package/dist/env/writer.d.ts.map +1 -0
- package/dist/env/writer.js +9 -0
- package/dist/env/writer.js.map +1 -0
- package/dist/errors.d.ts +31 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +111 -0
- package/dist/errors.js.map +1 -0
- package/dist/help.d.ts +5 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +61 -0
- package/dist/help.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/init/augment-scaffolder.d.ts +86 -0
- package/dist/init/augment-scaffolder.d.ts.map +1 -0
- package/dist/init/augment-scaffolder.js +538 -0
- package/dist/init/augment-scaffolder.js.map +1 -0
- package/dist/init/dependency-specs.d.ts +58 -0
- package/dist/init/dependency-specs.d.ts.map +1 -0
- package/dist/init/dependency-specs.js +153 -0
- package/dist/init/dependency-specs.js.map +1 -0
- package/dist/init/gitignore-patcher.d.ts +23 -0
- package/dist/init/gitignore-patcher.d.ts.map +1 -0
- package/dist/init/gitignore-patcher.js +103 -0
- package/dist/init/gitignore-patcher.js.map +1 -0
- package/dist/init/mode-detect.d.ts +34 -0
- package/dist/init/mode-detect.d.ts.map +1 -0
- package/dist/init/mode-detect.js +115 -0
- package/dist/init/mode-detect.js.map +1 -0
- package/dist/init/package-json-patcher.d.ts +36 -0
- package/dist/init/package-json-patcher.d.ts.map +1 -0
- package/dist/init/package-json-patcher.js +128 -0
- package/dist/init/package-json-patcher.js.map +1 -0
- package/dist/init/pnpm-workspace-patcher.d.ts +55 -0
- package/dist/init/pnpm-workspace-patcher.d.ts.map +1 -0
- package/dist/init/pnpm-workspace-patcher.js +248 -0
- package/dist/init/pnpm-workspace-patcher.js.map +1 -0
- package/dist/init/pyproject-patcher.d.ts +56 -0
- package/dist/init/pyproject-patcher.d.ts.map +1 -0
- package/dist/init/pyproject-patcher.js +324 -0
- package/dist/init/pyproject-patcher.js.map +1 -0
- package/dist/init/python-augment.d.ts +22 -0
- package/dist/init/python-augment.d.ts.map +1 -0
- package/dist/init/python-augment.js +300 -0
- package/dist/init/python-augment.js.map +1 -0
- package/dist/init/template-files.d.ts +18 -0
- package/dist/init/template-files.d.ts.map +1 -0
- package/dist/init/template-files.js +53 -0
- package/dist/init/template-files.js.map +1 -0
- package/dist/key/defaults.d.ts +3 -0
- package/dist/key/defaults.d.ts.map +1 -0
- package/dist/key/defaults.js +60 -0
- package/dist/key/defaults.js.map +1 -0
- package/dist/key/fingerprint.d.ts +6 -0
- package/dist/key/fingerprint.d.ts.map +1 -0
- package/dist/key/fingerprint.js +25 -0
- package/dist/key/fingerprint.js.map +1 -0
- package/dist/key/paths.d.ts +30 -0
- package/dist/key/paths.d.ts.map +1 -0
- package/dist/key/paths.js +51 -0
- package/dist/key/paths.js.map +1 -0
- package/dist/key/runners.d.ts +60 -0
- package/dist/key/runners.d.ts.map +1 -0
- package/dist/key/runners.js +4 -0
- package/dist/key/runners.js.map +1 -0
- package/dist/main.d.ts +113 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +199 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/launcher.d.ts +143 -0
- package/dist/mcp/launcher.d.ts.map +1 -0
- package/dist/mcp/launcher.js +393 -0
- package/dist/mcp/launcher.js.map +1 -0
- package/dist/mcp/preset-loader.d.ts +29 -0
- package/dist/mcp/preset-loader.d.ts.map +1 -0
- package/dist/mcp/preset-loader.js +217 -0
- package/dist/mcp/preset-loader.js.map +1 -0
- package/dist/mcp/preset-types.d.ts +71 -0
- package/dist/mcp/preset-types.d.ts.map +1 -0
- package/dist/mcp/preset-types.js +4 -0
- package/dist/mcp/preset-types.js.map +1 -0
- package/dist/mcp/presets/README.md +68 -0
- package/dist/mcp/presets/postgres.json +15 -0
- package/dist/output.d.ts +26 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +46 -0
- package/dist/output.js.map +1 -0
- package/dist/pack-config.d.ts +37 -0
- package/dist/pack-config.d.ts.map +1 -0
- package/dist/pack-config.js +65 -0
- package/dist/pack-config.js.map +1 -0
- package/dist/package-manager.d.ts +33 -0
- package/dist/package-manager.d.ts.map +1 -0
- package/dist/package-manager.js +129 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/parse.d.ts +88 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +100 -0
- package/dist/parse.js.map +1 -0
- package/dist/providers/preset-loader.d.ts +47 -0
- package/dist/providers/preset-loader.d.ts.map +1 -0
- package/dist/providers/preset-loader.js +107 -0
- package/dist/providers/preset-loader.js.map +1 -0
- package/dist/providers/presets/anthropic.json +47 -0
- package/dist/providers/presets/gemini.json +40 -0
- package/dist/reference.d.ts +28 -0
- package/dist/reference.d.ts.map +1 -0
- package/dist/reference.js +52 -0
- package/dist/reference.js.map +1 -0
- package/dist/sdk-package.d.ts +9 -0
- package/dist/sdk-package.d.ts.map +1 -0
- package/dist/sdk-package.js +20 -0
- package/dist/sdk-package.js.map +1 -0
- package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +252 -0
- package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +302 -0
- package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +297 -0
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +289 -0
- package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +705 -0
- package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +298 -0
- package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +211 -0
- package/dist/sdk-skills/kindgi-getting-started/SKILL.md +189 -0
- package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +205 -0
- package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +325 -0
- package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +176 -0
- package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +305 -0
- package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +242 -0
- package/dist/stop-signal.d.ts +15 -0
- package/dist/stop-signal.d.ts.map +1 -0
- package/dist/stop-signal.js +16 -0
- package/dist/stop-signal.js.map +1 -0
- package/dist/templates/minimal/.nvmrc +1 -0
- package/dist/templates/minimal/AGENTS.md +23 -0
- package/dist/templates/minimal/README.md.tmpl +69 -0
- package/dist/templates/minimal/agents/.gitkeep +0 -0
- package/dist/templates/minimal/flows/.gitkeep +0 -0
- package/dist/templates/minimal/gitignore +8 -0
- package/dist/templates/minimal/guardrails/.gitkeep +0 -0
- package/dist/templates/minimal/kindgi.config.ts.tmpl +44 -0
- package/dist/templates/minimal/package.json.tmpl +25 -0
- package/dist/templates/minimal/pnpm-workspace.yaml +8 -0
- package/dist/templates/minimal/tools/.gitkeep +0 -0
- package/dist/templates/minimal/tsconfig.json.tmpl +27 -0
- package/dist/templates/minimal/vitest.config.ts.tmpl +14 -0
- package/dist/templates/python/AGENTS.md +30 -0
- package/dist/templates/python/README.md.tmpl +56 -0
- package/dist/templates/python/agents/echo_agent.py.tmpl +23 -0
- package/dist/templates/python/flows/echo_flow.py.tmpl +17 -0
- package/dist/templates/python/gitignore +9 -0
- package/dist/templates/python/guardrails/response_not_empty.py.tmpl +27 -0
- package/dist/templates/python/pyproject.toml.tmpl +42 -0
- package/dist/templates/python/tests/test_tools.py.tmpl +22 -0
- package/dist/templates/python/tools/echo.py.tmpl +27 -0
- package/dist/templates/python/tools/greet.py.tmpl +20 -0
- package/dist/templates/sample/.nvmrc +1 -0
- package/dist/templates/sample/AGENTS.md +23 -0
- package/dist/templates/sample/README.md.tmpl +85 -0
- package/dist/templates/sample/agents/echo-agent/index.ts.tmpl +34 -0
- package/dist/templates/sample/flows/echo-flow/index.ts.tmpl +59 -0
- package/dist/templates/sample/gitignore +8 -0
- package/dist/templates/sample/guardrails/response-not-empty/index.ts.tmpl +58 -0
- package/dist/templates/sample/kindgi.config.ts.tmpl +41 -0
- package/dist/templates/sample/package.json.tmpl +25 -0
- package/dist/templates/sample/pnpm-workspace.yaml +8 -0
- package/dist/templates/sample/tools/echo/index.test.ts.tmpl +31 -0
- package/dist/templates/sample/tools/echo/index.ts.tmpl +37 -0
- package/dist/templates/sample/tools/fetch-httpbin/index.ts.tmpl +60 -0
- package/dist/templates/sample/tools/greet/index.ts.tmpl +35 -0
- package/dist/templates/sample/tsconfig.json.tmpl +27 -0
- package/dist/templates/sample/vitest.config.ts.tmpl +14 -0
- package/dist/terminal-input.d.ts +17 -0
- package/dist/terminal-input.d.ts.map +1 -0
- package/dist/terminal-input.js +88 -0
- package/dist/terminal-input.js.map +1 -0
- package/dist/test/defaults.d.ts +3 -0
- package/dist/test/defaults.d.ts.map +1 -0
- package/dist/test/defaults.js +104 -0
- package/dist/test/defaults.js.map +1 -0
- package/dist/test/runners.d.ts +60 -0
- package/dist/test/runners.d.ts.map +1 -0
- package/dist/test/runners.js +4 -0
- package/dist/test/runners.js.map +1 -0
- package/dist/version-info.d.ts +9 -0
- package/dist/version-info.d.ts.map +1 -0
- package/dist/version-info.js +27 -0
- package/dist/version-info.js.map +1 -0
- package/dist/write-fully.d.ts +13 -0
- package/dist/write-fully.d.ts.map +1 -0
- package/dist/write-fully.js +17 -0
- package/dist/write-fully.js.map +1 -0
- package/package.json +63 -4
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kindgi-authoring-tools
|
|
3
|
+
description: >
|
|
4
|
+
Covers writing tools for a Kindgi pack with @kindgi/sdk:
|
|
5
|
+
defining tools via defineTool with either an imperative handler or a
|
|
6
|
+
declarative HTTP spec, choosing between Zod v4 and JSON Schema for
|
|
7
|
+
input/output, tool id naming conventions, handling the Result return
|
|
8
|
+
shape, and how tools reach agents via ToolRef versioning. Load this
|
|
9
|
+
whenever you are authoring or editing code inside a pack's tools/
|
|
10
|
+
directory, defining a tool, or wiring a tool onto an agent. Getting
|
|
11
|
+
started with a new pack is covered by kindgi-getting-started;
|
|
12
|
+
authoring agents is covered by kindgi-authoring-agents.
|
|
13
|
+
type: core
|
|
14
|
+
library: "@kindgi/sdk"
|
|
15
|
+
version: "0.4.3"
|
|
16
|
+
sdk_version: "0.1.1"
|
|
17
|
+
pack_languages: [node]
|
|
18
|
+
sources:
|
|
19
|
+
- packages/tools/src/types.ts
|
|
20
|
+
- packages/tools/src/define.ts
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Authoring Kindgi tools
|
|
24
|
+
|
|
25
|
+
> **Running `kindgi`:** the CLI is a devDependency of the project (`@kindgi/cli`),
|
|
26
|
+
> not a global command. Run it through the project's package manager —
|
|
27
|
+
> `pnpm exec kindgi …`, `npx --no kindgi …` (npm), `yarn kindgi …` or
|
|
28
|
+
> `bun run kindgi …`. Commands below are written `kindgi …` for brevity.
|
|
29
|
+
|
|
30
|
+
A **tool** is a callable unit of work an agent invokes: a function with a
|
|
31
|
+
typed input, a typed output, and either author-written logic or a
|
|
32
|
+
declarative spec the framework synthesizes into logic. Tools live at
|
|
33
|
+
`tools/<name>/index.ts` inside a pack; the pack indexer discovers
|
|
34
|
+
them by folder convention.
|
|
35
|
+
|
|
36
|
+
Before writing a tool, establish what it should DO — its purpose,
|
|
37
|
+
inputs, outputs, and whether it extends an existing tool or is fresh.
|
|
38
|
+
Requests like "add a tool" without a purpose are conversation openers,
|
|
39
|
+
not tickets. Ask what it should compute or fetch, what shape the caller
|
|
40
|
+
provides, what shape it returns. The pack's existing tools are examples
|
|
41
|
+
that prove the framework runs end-to-end — they are NOT the shape you
|
|
42
|
+
imitate unless the user explicitly asks for that.
|
|
43
|
+
|
|
44
|
+
## Two authoring modes
|
|
45
|
+
|
|
46
|
+
Both use `defineTool` from `@kindgi/sdk/define`. Pick based on where the
|
|
47
|
+
logic lives:
|
|
48
|
+
|
|
49
|
+
- **`handler`** — imperative TS function. Use when the tool computes,
|
|
50
|
+
transforms, calls a proprietary library, or has non-trivial logic
|
|
51
|
+
that lives in the pack's source.
|
|
52
|
+
- **`spec`** — declarative descriptor. Use when the tool is a
|
|
53
|
+
straightforward remote call. `spec: {kind: 'http', ...}` is the kind
|
|
54
|
+
that ships with the framework; other kinds can be added with
|
|
55
|
+
`registerToolSpecSynthesizer`. The framework synthesizes the handler
|
|
56
|
+
from the spec — URL substitution, timeout, abort propagation, secret
|
|
57
|
+
resolution and the status check are handled for you (there is no
|
|
58
|
+
automatic retry).
|
|
59
|
+
|
|
60
|
+
`handler` and `spec` are MUTUALLY EXCLUSIVE. Setting both (or neither)
|
|
61
|
+
makes `defineTool` return an `invalid-tool-definition` error.
|
|
62
|
+
|
|
63
|
+
## Imperative handler
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
// tools/verify-citation/index.ts
|
|
67
|
+
import { defineTool } from '@kindgi/sdk/define';
|
|
68
|
+
import type { ToolId } from '@kindgi/sdk/types';
|
|
69
|
+
import { z } from 'zod';
|
|
70
|
+
|
|
71
|
+
const Input = z.object({
|
|
72
|
+
citation: z.string().min(1),
|
|
73
|
+
jurisdiction: z.enum(['US', 'UK', 'EU']),
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
const Output = z.object({
|
|
77
|
+
found: z.boolean(),
|
|
78
|
+
canonicalCite: z.string().optional(),
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
const defined = defineTool({
|
|
82
|
+
id: 'acme.verify-citation' as ToolId,
|
|
83
|
+
description:
|
|
84
|
+
'Verify a legal citation against the jurisdictional citator. Returns whether the citation resolves and the canonical form.',
|
|
85
|
+
version: '0.1.0',
|
|
86
|
+
input: Input,
|
|
87
|
+
output: Output,
|
|
88
|
+
effects: [],
|
|
89
|
+
mutating: false,
|
|
90
|
+
handler: async (input, ctx) => {
|
|
91
|
+
// ctx.tenantId, ctx.abortSignal, ctx.secrets (what needsSpec declares) available
|
|
92
|
+
// Return type MUST match Output schema (validated at invoke time)
|
|
93
|
+
return { found: true, canonicalCite: '...' };
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
if (defined.kind === 'err') {
|
|
98
|
+
throw new Error(`acme.verify-citation failed to compile: ${defined.error.message}`);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export default defined.value;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
A handler must return a Promise; one with nothing to `await` can return `Promise.resolve({ … })` instead of being `async`, which keeps lint rules like `require-await` quiet.
|
|
105
|
+
|
|
106
|
+
### What the handler receives
|
|
107
|
+
|
|
108
|
+
The handler gets the **parsed** input, typed `z.infer` of `input` (Zod's output type):
|
|
109
|
+
|
|
110
|
+
- **Defaults.** A `.default()` field is optional to the caller, the model included. The tool's advertised schema doesn't list it as required, and the handler always gets a value.
|
|
111
|
+
- **Transforms and refinements.** `.transform()` results and `.refine()` checks apply before the handler runs. A failed refinement comes back as `input-validation-failed`.
|
|
112
|
+
- **Extra keys.** A plain `z.object` accepts them and strips them. Use `z.strictObject` to reject them.
|
|
113
|
+
- **JSON-Schema-authored tools** get each property's `default` filled in the same way.
|
|
114
|
+
|
|
115
|
+
The output side is the reverse: the advertised output schema requires every field, defaulted ones included. Return them all.
|
|
116
|
+
|
|
117
|
+
### Configuration and secrets
|
|
118
|
+
|
|
119
|
+
A secret that belongs to the tenant — an API key a customer gives you — is declared, and read from `ctx.secrets`:
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
const defined = defineTool({
|
|
123
|
+
// …id, description, version, input, output, effects…
|
|
124
|
+
needsSpec: { secrets: { CITATOR_KEY: { type: 'string', minLength: 20 } } },
|
|
125
|
+
handler: async (input, ctx) => {
|
|
126
|
+
const key = ctx.secrets?.CITATOR_KEY;
|
|
127
|
+
// …
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The runtime resolves every declared secret on every call, for the call's tenant, in its env (`KINDGI_ENV`; in `kindgi dev`, `local`: the pack's `.env` and `.env.local`). It checks each value against its schema, and fails the call, naming the secret, when one is missing or doesn't match. Every declared secret is required, so in a runtime call `ctx.secrets` holds them all; it's optional in the type because a unit test builds its own context and passes `secrets: { CITATOR_KEY: '…' }`.
|
|
133
|
+
|
|
134
|
+
Everything else comes from the process environment: `process.env.CITATOR_URL`. The pack service runs with the pack's env files in `kindgi dev`, and with the container's environment in an image. Declare the names your code reads in `kindgi.config.ts`, `env: { required: ['CITATOR_URL'], optional: [...] }`: a deployment injects exactly those, a pack service missing a required one isn't ready and says which, and `kindgi dev` warns about it. Values per environment go in `environments.<name>.env`, secrets only as references.
|
|
135
|
+
|
|
136
|
+
## Declarative HTTP spec
|
|
137
|
+
|
|
138
|
+
```ts
|
|
139
|
+
// tools/fetch-order/index.ts
|
|
140
|
+
import { defineTool } from '@kindgi/sdk/define';
|
|
141
|
+
import type { ToolId } from '@kindgi/sdk/types';
|
|
142
|
+
import { z } from 'zod';
|
|
143
|
+
|
|
144
|
+
const defined = defineTool({
|
|
145
|
+
id: 'shop.fetch-order' as ToolId,
|
|
146
|
+
description: 'Fetch an order by id from the storefront API.',
|
|
147
|
+
version: '0.1.0',
|
|
148
|
+
input: z.object({ orderId: z.string() }),
|
|
149
|
+
output: z.object({ id: z.string(), status: z.string(), total: z.number() }),
|
|
150
|
+
effects: [],
|
|
151
|
+
mutating: false,
|
|
152
|
+
spec: {
|
|
153
|
+
kind: 'http',
|
|
154
|
+
method: 'GET',
|
|
155
|
+
urlTemplate: 'https://api.shop.example/orders/{orderId}',
|
|
156
|
+
// Every {placeholder} MUST be a key on the input schema
|
|
157
|
+
authorization: {
|
|
158
|
+
kind: 'bearer',
|
|
159
|
+
secretRef: { envName: 'production', name: 'shop-api-token' },
|
|
160
|
+
},
|
|
161
|
+
successStatus: { min: 200, max: 299 },
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
if (defined.kind === 'err') throw new Error(defined.error.message);
|
|
166
|
+
export default defined.value;
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Read-only tools: `mutating`
|
|
170
|
+
|
|
171
|
+
`mutating: false` declares that the tool changes nothing outside Kindgi; it only reads. Leaving `mutating` out counts as mutating, the same as `true`. It decides two things, in both authoring modes:
|
|
172
|
+
|
|
173
|
+
- **Dry runs.** `kindgi runs start --dry-run` runs a tool only if it's `mutating: false` and its `effects` declare no `writes`, `deletes`, `spawns-run`, `emits-event` or `external-side-effect`. The first other tool stops the run with `dry-run-effectful-tool`.
|
|
174
|
+
- **Approval gates.** When an agent turns tool gates on (`conversationPolicy.hitl.tools`) and sets neither an override for the tool nor a `default`, a `mutating: false` tool runs straight through, and any other tool asks for approval on its first use.
|
|
175
|
+
|
|
176
|
+
So declare `mutating: false` on every tool that only reads, and never on one that writes.
|
|
177
|
+
|
|
178
|
+
## Tool id convention
|
|
179
|
+
|
|
180
|
+
`<pack-id>.<tool-name>` — kebab-case, dot-namespaced. The `<pack-id>`
|
|
181
|
+
prefix scopes the tool to its pack; `<tool-name>` names the operation.
|
|
182
|
+
Enforced by `defineTool` at author time. Examples:
|
|
183
|
+
`acme.verify-citation`, `shop.fetch-order`, `demo.echo`.
|
|
184
|
+
|
|
185
|
+
## Iterating on a tool
|
|
186
|
+
|
|
187
|
+
Edit the source file (`tools/<tool>/index.ts`), save. The next
|
|
188
|
+
`kindgi runs start` sees the change — new input/output schema, new
|
|
189
|
+
description, new handler behavior. No version bump, no restart, no
|
|
190
|
+
re-registration ceremony. Source is truth in dev.
|
|
191
|
+
|
|
192
|
+
The `version` field is a **semver contract for humans** — it declares
|
|
193
|
+
what callers can rely on. Bump it because the *contract with
|
|
194
|
+
downstream callers* changed (removed a field, tightened a type,
|
|
195
|
+
narrowed enum values), not because you saved the file. If you're
|
|
196
|
+
iterating in dev and the shape isn't finalized, leave `version`
|
|
197
|
+
alone.
|
|
198
|
+
|
|
199
|
+
**When version matters:** `kindgi deploy` publishes to a durable
|
|
200
|
+
production registry that enforces the immutable `(id, version)`
|
|
201
|
+
contract — a re-publish of the same version with different bytes
|
|
202
|
+
gets rejected. That's when semver discipline kicks in. The deploy
|
|
203
|
+
tooling surfaces the check; you don't have to think about it while
|
|
204
|
+
authoring.
|
|
205
|
+
|
|
206
|
+
**Downstream callers still pin ranges.** An agent's `tools: [{id,
|
|
207
|
+
version: '^0.1.0'}]` picks the highest active version matching the
|
|
208
|
+
range at run start. Compatible tool updates (patch, minor) reach the
|
|
209
|
+
agent without editing agent source; breaking updates (major) require
|
|
210
|
+
the agent-author to opt in.
|
|
211
|
+
|
|
212
|
+
## Wiring the tool onto an agent
|
|
213
|
+
|
|
214
|
+
Agents reference tools via `ToolRef[]`, NOT `string[]`. Each entry is
|
|
215
|
+
`{id, version}` where `version` is an npm-style semver **range**:
|
|
216
|
+
|
|
217
|
+
```ts
|
|
218
|
+
// agents/brief-writer/index.ts
|
|
219
|
+
tools: [
|
|
220
|
+
{ id: 'acme.verify-citation' as ToolId, version: '^0.1.0' },
|
|
221
|
+
{ id: 'acme.fetch-precedent' as ToolId, version: '~0.2.0' },
|
|
222
|
+
],
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
The resolver picks the highest active version matching the range at
|
|
226
|
+
run start via `semver.maxSatisfying`. No implicit `:latest`.
|
|
227
|
+
|
|
228
|
+
## Common mistakes
|
|
229
|
+
|
|
230
|
+
1. **Copying another tool's shape without user intent.** The pack may
|
|
231
|
+
ship `tools/echo/` as a starter example. Copying its skeleton to
|
|
232
|
+
make `tools/lookup/` produces plausible-looking code that solves
|
|
233
|
+
the wrong problem. Ask the user what the new tool should DO first.
|
|
234
|
+
|
|
235
|
+
2. **Passing bare strings to `agent.tools`.** `tools: ['acme.verify-citation']`
|
|
236
|
+
doesn't type-check (`tools` is `ToolRef[]`), and `defineAgent`
|
|
237
|
+
returns `invalid-agent` for a bare string that slips through. Use
|
|
238
|
+
`[{id: 'acme.verify-citation', version: '^0.1.0'}]`.
|
|
239
|
+
|
|
240
|
+
3. **Forgetting the `Result` unwrap.** `defineTool` returns
|
|
241
|
+
`Result<DefinedTool, ToolError>` — a bad schema doesn't throw at import
|
|
242
|
+
time unless you check `defined.kind === 'err'`. Always unwrap at
|
|
243
|
+
module load so a broken pack fails LOUDLY, not on first invocation.
|
|
244
|
+
|
|
245
|
+
4. **`handler` and `spec` together.** Mutually exclusive.
|
|
246
|
+
`defineTool` returns `invalid-tool-definition` with both set.
|
|
247
|
+
|
|
248
|
+
5. **`{placeholder}` in `urlTemplate` without a matching input key.**
|
|
249
|
+
HTTP tools substitute placeholders from the input at invoke time.
|
|
250
|
+
Missing keys throw a clear error at invoke time — check both sides
|
|
251
|
+
line up.
|
|
252
|
+
|
|
253
|
+
6. **An HTTP tool's `secretRef` in the wrong env.** The runtime
|
|
254
|
+
resolves `authorization.secretRef` itself, on every call, in the env
|
|
255
|
+
the ref names: `{ envName: 'local', … }` is the pack's `.env` /
|
|
256
|
+
`.env.local` under `kindgi dev`, while `'production'` reads
|
|
257
|
+
`.env.production`. A secret it can't find fails the call with
|
|
258
|
+
`secret-unavailable`, naming it. Only a harness of your own that
|
|
259
|
+
calls `invokeTool` directly has to pass `ctx.resolveSecret`.
|
|
260
|
+
7. **Reading a secret from `process.env` in a tool that runs for many
|
|
261
|
+
tenants.** The pack service's environment is one for all of them.
|
|
262
|
+
Declare the secret in `needsSpec.secrets` and read `ctx.secrets`.
|
|
263
|
+
|
|
264
|
+
8. **Bumping `version` on every dev save.** Old habit from
|
|
265
|
+
frameworks that stored manifests immutably by `(id, version)`.
|
|
266
|
+
Kindgi's dev mode reads tool manifests directly from source —
|
|
267
|
+
version doesn't gate iteration. Bump it when the *contract*
|
|
268
|
+
changes (breaking schema shape, semantic behavior), not when you
|
|
269
|
+
save. See the "Iterating on a tool" section above.
|
|
270
|
+
|
|
271
|
+
9. **A package a tool imports, listed only in `devDependencies`.** The
|
|
272
|
+
deployed pack installs the app's production dependencies only, so the
|
|
273
|
+
import works under `kindgi dev` and fails in the image. When a tool
|
|
274
|
+
imports a new package (an ORM client such as `@prisma/client`, an API
|
|
275
|
+
SDK), check that the app's `package.json` lists it under
|
|
276
|
+
`dependencies`. Build-time tools (the `prisma` CLI, `typescript`) stay
|
|
277
|
+
in `devDependencies`. `kindgi dev` warns as soon as a tool imports one
|
|
278
|
+
("⚠ The pack imports @prisma/client (in kindgi/tools/…), which
|
|
279
|
+
package.json lists only in devDependencies: …"), and `kindgi build`
|
|
280
|
+
refuses the pack until it moves.
|
|
281
|
+
|
|
282
|
+
## References
|
|
283
|
+
|
|
284
|
+
- Type surface: `hover any @kindgi/sdk/define export` in your editor
|
|
285
|
+
for full JSDoc — every field on `DefineToolSpec` / `ToolManifest`
|
|
286
|
+
documents purpose, when to set it, and gotchas.
|
|
287
|
+
- API reference: https://docs.kindgi.com/v0.1/reference/typescript/sdk/kindgi/sdk/define/ (every `define*` spec, field by field).
|
|
288
|
+
- Common patterns: check the `sample` template (`kindgi init
|
|
289
|
+
--template=sample`) for working examples of both authoring modes.
|
|
290
|
+
|
|
291
|
+
## When the framework itself is the problem
|
|
292
|
+
|
|
293
|
+
If you diagnose that the bug lives in Kindgi/`@kindgi/sdk` itself (SDK
|
|
294
|
+
type drift, wire schema silently dropping a field, indexer allowlist
|
|
295
|
+
gap, misleading error, CLI friction) — not in the pack's own code —
|
|
296
|
+
load the `kindgi-framework-feedback` skill and file a structured report
|
|
297
|
+
with `kindgi feedback write`. That diagnostic is high-signal input the
|
|
298
|
+
maintainers can act on; don't let it disappear into the transcript.
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kindgi-framework-feedback
|
|
3
|
+
description: >
|
|
4
|
+
Capture framework-level feedback about Kindgi/@kindgi/sdk when you
|
|
5
|
+
diagnose a problem that isn't in the pack's own code — SDK type
|
|
6
|
+
drift, API wire schema gaps, adapter regressions, CLI
|
|
7
|
+
friction, skill/code mismatches, misleading errors, UX cliffs.
|
|
8
|
+
Load whenever you have just diagnosed such a problem during pack
|
|
9
|
+
authoring. Also load when the pack author asks you to remove,
|
|
10
|
+
mark-fixed, or re-order entries in FEEDBACK.md — the file is a
|
|
11
|
+
simple markdown list you edit directly with the Edit tool. Distinct
|
|
12
|
+
from authoring skills (which help you build packs) and from
|
|
13
|
+
getting-started (which onboards new packs); this skill turns your
|
|
14
|
+
diagnostic output into durable input for framework improvement.
|
|
15
|
+
type: core
|
|
16
|
+
library: "@kindgi/sdk"
|
|
17
|
+
version: "0.4.0"
|
|
18
|
+
sdk_version: "0.1.1"
|
|
19
|
+
pack_languages: [node, python]
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Capturing framework feedback
|
|
23
|
+
|
|
24
|
+
> **Running `kindgi`:** in a Node project the CLI is a devDependency
|
|
25
|
+
> (`@kindgi/cli`), not a global command. Run it through the project's
|
|
26
|
+
> package manager — `pnpm exec kindgi …`, `npx --no kindgi …` (npm),
|
|
27
|
+
> `yarn kindgi …` or `bun run kindgi …`. A Python pack (`[tool.kindgi]` in
|
|
28
|
+
> `pyproject.toml`) has no Node project: run the `kindgi` on `PATH`.
|
|
29
|
+
> Commands below are written `kindgi …` for brevity.
|
|
30
|
+
|
|
31
|
+
You just spent time diagnosing a Kindgi-framework issue. That diagnostic
|
|
32
|
+
is exactly the kind of report the framework maintainers need — file:line
|
|
33
|
+
pointers, exact reproducers, honest severity, what you expected vs. what
|
|
34
|
+
you observed. **This skill exists to make sure that value doesn't get
|
|
35
|
+
lost in the transcript.**
|
|
36
|
+
|
|
37
|
+
## The mechanism is deliberately simple
|
|
38
|
+
|
|
39
|
+
One file: `FEEDBACK.md` at the pack root. Each entry is a markdown
|
|
40
|
+
section with two identifiers:
|
|
41
|
+
|
|
42
|
+
- **`id: YYYY-MM-DD.N`** — per-day counter, unique within this pack.
|
|
43
|
+
Used for local navigation and hand-editing ("remove 2026-09-25.3").
|
|
44
|
+
- **`hash: feedback-<8-hex>`** — deterministic hash of the
|
|
45
|
+
normalized title. Two packs (or two peers) filing the same issue
|
|
46
|
+
produce the same hash, so p2p sync and framework-side clustering
|
|
47
|
+
work without a central registry.
|
|
48
|
+
|
|
49
|
+
`kindgi feedback write` appends new entries with both stamps. To mark
|
|
50
|
+
an item fixed, add a `> **Fixed:** <note>` line right after its
|
|
51
|
+
header. To remove an item, delete the section (including the
|
|
52
|
+
trailing `---` separator). All of that is plain markdown editing —
|
|
53
|
+
no `kindgi feedback update`, no `kindgi feedback delete`, no
|
|
54
|
+
separate tracking database.
|
|
55
|
+
|
|
56
|
+
## When to file
|
|
57
|
+
|
|
58
|
+
File an entry when you diagnose:
|
|
59
|
+
|
|
60
|
+
- **SDK type drift** — a skill or docs claim a field that the SDK's
|
|
61
|
+
`.d.ts` doesn't have (or vice versa).
|
|
62
|
+
- **Wire schema gaps** — the API silently drops a field you sent
|
|
63
|
+
(usually `additionalProperties: false` missing a property).
|
|
64
|
+
- **Adapter regressions** — behavior changed between rebuilds.
|
|
65
|
+
- **CLI friction** — command failures with unhelpful error messages,
|
|
66
|
+
missing verbs, stubs that pretend to work.
|
|
67
|
+
- **Skill/code mismatches** — the skill example doesn't work as
|
|
68
|
+
written.
|
|
69
|
+
- **Misleading errors** — the error message points at the wrong
|
|
70
|
+
thing.
|
|
71
|
+
- **UX cliffs** — the "obvious next step" fails and the recovery
|
|
72
|
+
isn't documented.
|
|
73
|
+
|
|
74
|
+
Do NOT file when:
|
|
75
|
+
|
|
76
|
+
- The bug is in the pack's own code (that's a normal debug loop).
|
|
77
|
+
- You haven't actually reproduced it — file with `--kind=question`
|
|
78
|
+
instead so it's flagged as unconfirmed.
|
|
79
|
+
|
|
80
|
+
## How to file — the command
|
|
81
|
+
|
|
82
|
+
```sh
|
|
83
|
+
kindgi feedback write \
|
|
84
|
+
--kind=bug \
|
|
85
|
+
--severity=high \
|
|
86
|
+
--title="preferredProvider silently dropped by wire schema" \
|
|
87
|
+
--authored-by=claude-code \
|
|
88
|
+
--body=@/tmp/report.md
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Body-input modes:
|
|
92
|
+
|
|
93
|
+
- `--body=@<file>` — reads the file at path.
|
|
94
|
+
- `--body="<literal text>"` — literal content inline. Useful for
|
|
95
|
+
short entries.
|
|
96
|
+
- `--body-stdin` — reads from stdin (`diagnose | kindgi feedback write ...`).
|
|
97
|
+
- `--interactive` (or omit all of the above) — opens `$EDITOR` with
|
|
98
|
+
a template.
|
|
99
|
+
|
|
100
|
+
The entry lands as a new `## <title>` section appended to
|
|
101
|
+
`FEEDBACK.md`, stamped with a fresh `id: YYYY-MM-DD.N`. The file is
|
|
102
|
+
created with a header if it doesn't yet exist.
|
|
103
|
+
|
|
104
|
+
## Entry shape (what the CLI produces)
|
|
105
|
+
|
|
106
|
+
```md
|
|
107
|
+
## preferredProvider silently dropped by wire schema
|
|
108
|
+
|
|
109
|
+
- **id:** 2026-09-25.3
|
|
110
|
+
- **hash:** feedback-a3f2c1d0
|
|
111
|
+
- **kind:** bug
|
|
112
|
+
- **severity:** high
|
|
113
|
+
- **date:** 2026-09-25T14:32:07.104Z
|
|
114
|
+
- **sdk:** 0.1.2 · **cli:** 0.1.2 · **by:** claude-code
|
|
115
|
+
|
|
116
|
+
### Summary
|
|
117
|
+
One-line: what the report is about.
|
|
118
|
+
|
|
119
|
+
### Observed
|
|
120
|
+
What happened, with file:line pointers when possible.
|
|
121
|
+
|
|
122
|
+
### Expected
|
|
123
|
+
What should have happened.
|
|
124
|
+
|
|
125
|
+
### Reproducer
|
|
126
|
+
Exact commands, spec files, output.
|
|
127
|
+
|
|
128
|
+
### Suggested fix
|
|
129
|
+
Optional; leave blank if you don't have one.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Editing FEEDBACK.md directly
|
|
135
|
+
|
|
136
|
+
Entries are referenced locally by their `id` (e.g. `2026-09-25.3`)
|
|
137
|
+
or by their title; across packs (or between peers) they are referenced
|
|
138
|
+
by their `hash` (e.g. `feedback-a3f2c1d0`). When the pack author says
|
|
139
|
+
something like:
|
|
140
|
+
|
|
141
|
+
- **"Remove 2026-09-25.3"** / **"Remove the preferredProvider
|
|
142
|
+
entry"** → find the section whose `id` matches (or whose `##
|
|
143
|
+
<title>` matches), delete from the header down through the next
|
|
144
|
+
`---` separator (inclusive). Do NOT renumber other entries — ids
|
|
145
|
+
are historical identifiers, gaps are expected.
|
|
146
|
+
- **"Mark 2026-09-25.3 fixed"** / **"That preferredProvider one
|
|
147
|
+
landed in commit abc123"** → find the section, insert a line
|
|
148
|
+
right after the header:
|
|
149
|
+
```md
|
|
150
|
+
> **Fixed:** landed in commit abc123 (2026-09-25). <optional context>
|
|
151
|
+
```
|
|
152
|
+
- **"Note that 2026-09-25.5 is a duplicate of feedback-a3f2c1d0"** /
|
|
153
|
+
**"Merge these — same hash"** → find the section, insert:
|
|
154
|
+
```md
|
|
155
|
+
> **Duplicate of:** feedback-a3f2c1d0 (<optional context>)
|
|
156
|
+
```
|
|
157
|
+
Prefer the `hash` when the duplicate lives in another pack (peer /
|
|
158
|
+
framework side); prefer the `id` when it's a local duplicate.
|
|
159
|
+
- **Restructuring / re-ordering** → use the Edit tool to move the
|
|
160
|
+
section; keep the header + `- **id:** …` + `- **hash:** …` lines
|
|
161
|
+
intact so both identifiers stay stable.
|
|
162
|
+
|
|
163
|
+
Do NOT try to re-file the same item through `kindgi feedback write`
|
|
164
|
+
— that would create a new entry with a new id (though the hash
|
|
165
|
+
would match, which is exactly the p2p-dedup signal). Always edit
|
|
166
|
+
directly for maintenance operations within one pack.
|
|
167
|
+
|
|
168
|
+
## Fields to fill precisely
|
|
169
|
+
|
|
170
|
+
- **`kind`** — honest classification.
|
|
171
|
+
- `bug` — the framework did the wrong thing (crashed, silently
|
|
172
|
+
dropped a field, contradicted its own docs).
|
|
173
|
+
- `friction` — the framework did the "right" thing but the UX cost
|
|
174
|
+
more time than the task warranted.
|
|
175
|
+
- `question` — you don't understand something and the docs don't
|
|
176
|
+
answer it.
|
|
177
|
+
- `design` — you observed something that works as designed but the
|
|
178
|
+
design might be wrong.
|
|
179
|
+
|
|
180
|
+
- **`severity`** — honest impact.
|
|
181
|
+
- `blocker` — nothing useful can happen until this is fixed.
|
|
182
|
+
- `high` — a common workflow is broken; users will hit this.
|
|
183
|
+
- `medium` — real friction, but there's a documented workaround.
|
|
184
|
+
- `low` — cosmetic, tiny annoyance, or affects one obscure path.
|
|
185
|
+
|
|
186
|
+
- **`authored_by`** — `claude-code` when the diagnostic came entirely
|
|
187
|
+
from an AI coding assistant; `human` when the pack author wrote
|
|
188
|
+
it; `mixed` when it's a combination.
|
|
189
|
+
|
|
190
|
+
## Common mistakes
|
|
191
|
+
|
|
192
|
+
1. **File-path-only entries** ("bug in router.ts").
|
|
193
|
+
Without a reproducer + expected behavior, the maintainer has to
|
|
194
|
+
reverse-engineer your session. File:line is necessary but not
|
|
195
|
+
sufficient.
|
|
196
|
+
2. **Skipping "Suggested fix" when you have one.** If you diagnosed
|
|
197
|
+
the root cause, name it. "Add `preferredProvider` to `AgentSchema`
|
|
198
|
+
in `packages/api/src/openapi/schemas.ts:667`" is worth a dozen
|
|
199
|
+
back-and-forth clarifications.
|
|
200
|
+
3. **Bundling multiple bugs into one entry.** Run `kindgi feedback
|
|
201
|
+
write` once per bug. Each gets its own number, its own fix
|
|
202
|
+
status, its own removal path.
|
|
203
|
+
4. **Sensitive state in reproducers.** Reproducer sections sometimes
|
|
204
|
+
contain API keys, tenant IDs, secrets — review before committing.
|
|
205
|
+
5. **Filing "the way I'd design it" as a bug.** Design disagreements
|
|
206
|
+
are `--kind=design`, not `--kind=bug`. Both are welcome; the
|
|
207
|
+
classification helps prioritization.
|
|
208
|
+
|
|
209
|
+
## References
|
|
210
|
+
|
|
211
|
+
- `FEEDBACK.md` at the pack root — the running list itself.
|