@kilnai/cli 1.0.7 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -8
- package/dist/application/__tests__/session-report.test.d.ts +2 -0
- package/dist/application/__tests__/session-report.test.d.ts.map +1 -0
- package/dist/application/__tests__/session-report.test.js +100 -0
- package/dist/application/__tests__/session-report.test.js.map +1 -0
- package/dist/application/agent-loader.d.ts +30 -2
- package/dist/application/agent-loader.d.ts.map +1 -1
- package/dist/application/agent-loader.js +99 -3
- package/dist/application/agent-loader.js.map +1 -1
- package/dist/application/agent-loader.test.js +112 -18
- package/dist/application/agent-loader.test.js.map +1 -1
- package/dist/application/agent-skill-context.d.ts +12 -0
- package/dist/application/agent-skill-context.d.ts.map +1 -0
- package/dist/application/agent-skill-context.js +32 -0
- package/dist/application/agent-skill-context.js.map +1 -0
- package/dist/application/agent-skill-context.test.d.ts +2 -0
- package/dist/application/agent-skill-context.test.d.ts.map +1 -0
- package/dist/application/agent-skill-context.test.js +156 -0
- package/dist/application/agent-skill-context.test.js.map +1 -0
- package/dist/application/benchmark-session-executor.d.ts +14 -0
- package/dist/application/benchmark-session-executor.d.ts.map +1 -0
- package/dist/application/benchmark-session-executor.js +210 -0
- package/dist/application/benchmark-session-executor.js.map +1 -0
- package/dist/application/config-apply-tool.d.ts +30 -0
- package/dist/application/config-apply-tool.d.ts.map +1 -0
- package/dist/application/config-apply-tool.js +68 -0
- package/dist/application/config-apply-tool.js.map +1 -0
- package/dist/application/config-apply.d.ts +9 -0
- package/dist/application/config-apply.d.ts.map +1 -0
- package/dist/application/config-apply.js +146 -0
- package/dist/application/config-apply.js.map +1 -0
- package/dist/application/config-approval.d.ts +10 -0
- package/dist/application/config-approval.d.ts.map +1 -0
- package/dist/application/config-approval.js +30 -0
- package/dist/application/config-approval.js.map +1 -0
- package/dist/application/config-mutation-store.d.ts +25 -0
- package/dist/application/config-mutation-store.d.ts.map +1 -0
- package/dist/application/config-mutation-store.js +59 -0
- package/dist/application/config-mutation-store.js.map +1 -0
- package/dist/application/config-proposal.d.ts +22 -0
- package/dist/application/config-proposal.d.ts.map +1 -0
- package/dist/application/config-proposal.js +395 -0
- package/dist/application/config-proposal.js.map +1 -0
- package/dist/application/config-propose-tool.d.ts +30 -0
- package/dist/application/config-propose-tool.d.ts.map +1 -0
- package/dist/application/config-propose-tool.js +63 -0
- package/dist/application/config-propose-tool.js.map +1 -0
- package/dist/application/config-read-tool.d.ts +26 -0
- package/dist/application/config-read-tool.d.ts.map +1 -0
- package/dist/application/config-read-tool.js +51 -0
- package/dist/application/config-read-tool.js.map +1 -0
- package/dist/application/config-status.d.ts +9 -0
- package/dist/application/config-status.d.ts.map +1 -0
- package/dist/application/config-status.js +361 -0
- package/dist/application/config-status.js.map +1 -0
- package/dist/application/config-tools.d.ts +3 -0
- package/dist/application/config-tools.d.ts.map +1 -0
- package/dist/application/config-tools.js +11 -0
- package/dist/application/config-tools.js.map +1 -0
- package/dist/application/context-types.d.ts +4 -17
- package/dist/application/context-types.d.ts.map +1 -1
- package/dist/application/context-types.js.map +1 -1
- package/dist/application/first-party-agent-defaults.d.ts +3 -0
- package/dist/application/first-party-agent-defaults.d.ts.map +1 -0
- package/dist/application/first-party-agent-defaults.js +135 -0
- package/dist/application/first-party-agent-defaults.js.map +1 -0
- package/dist/application/instruction-profile-context.d.ts +15 -0
- package/dist/application/instruction-profile-context.d.ts.map +1 -0
- package/dist/application/instruction-profile-context.js +80 -0
- package/dist/application/instruction-profile-context.js.map +1 -0
- package/dist/application/instruction-profile-loader.d.ts +20 -0
- package/dist/application/instruction-profile-loader.d.ts.map +1 -0
- package/dist/application/instruction-profile-loader.js +132 -0
- package/dist/application/instruction-profile-loader.js.map +1 -0
- package/dist/application/instruction-profile-loader.test.d.ts +2 -0
- package/dist/application/instruction-profile-loader.test.d.ts.map +1 -0
- package/dist/application/instruction-profile-loader.test.js +100 -0
- package/dist/application/instruction-profile-loader.test.js.map +1 -0
- package/dist/application/operator-theme-preferences.d.ts +11 -0
- package/dist/application/operator-theme-preferences.d.ts.map +1 -0
- package/dist/application/operator-theme-preferences.js +49 -0
- package/dist/application/operator-theme-preferences.js.map +1 -0
- package/dist/application/project-context.d.ts +22 -0
- package/dist/application/project-context.d.ts.map +1 -0
- package/dist/application/project-context.js +139 -0
- package/dist/application/project-context.js.map +1 -0
- package/dist/application/project-root-resolver.d.ts +14 -0
- package/dist/application/project-root-resolver.d.ts.map +1 -0
- package/dist/application/project-root-resolver.js +71 -0
- package/dist/application/project-root-resolver.js.map +1 -0
- package/dist/application/repo-shim-projection.d.ts +48 -0
- package/dist/application/repo-shim-projection.d.ts.map +1 -0
- package/dist/application/repo-shim-projection.js +536 -0
- package/dist/application/repo-shim-projection.js.map +1 -0
- package/dist/application/resume-sidebar-info.d.ts +9 -0
- package/dist/application/resume-sidebar-info.d.ts.map +1 -0
- package/dist/application/resume-sidebar-info.js +40 -0
- package/dist/application/resume-sidebar-info.js.map +1 -0
- package/dist/application/resume-strategy-feedback.d.ts.map +1 -1
- package/dist/application/resume-strategy-feedback.js +2 -1
- package/dist/application/resume-strategy-feedback.js.map +1 -1
- package/dist/application/run-session.d.ts +15 -0
- package/dist/application/run-session.d.ts.map +1 -1
- package/dist/application/run-session.js +110 -19
- package/dist/application/run-session.js.map +1 -1
- package/dist/application/runtime-session-rehydration.d.ts +9 -0
- package/dist/application/runtime-session-rehydration.d.ts.map +1 -0
- package/dist/application/runtime-session-rehydration.js +115 -0
- package/dist/application/runtime-session-rehydration.js.map +1 -0
- package/dist/application/session-context-artifacts.d.ts +19 -0
- package/dist/application/session-context-artifacts.d.ts.map +1 -0
- package/dist/application/session-context-artifacts.js +60 -0
- package/dist/application/session-context-artifacts.js.map +1 -0
- package/dist/application/session-metadata.d.ts +35 -0
- package/dist/application/session-metadata.d.ts.map +1 -0
- package/dist/application/session-metadata.js +157 -0
- package/dist/application/session-metadata.js.map +1 -0
- package/dist/application/session-report.d.ts.map +1 -1
- package/dist/application/session-report.js +8 -0
- package/dist/application/session-report.js.map +1 -1
- package/dist/application/session-resume.d.ts +1 -1
- package/dist/application/session-resume.d.ts.map +1 -1
- package/dist/application/session-resume.js +4 -4
- package/dist/application/session-resume.js.map +1 -1
- package/dist/application/work-governance-context.d.ts +7 -0
- package/dist/application/work-governance-context.d.ts.map +1 -0
- package/dist/application/work-governance-context.js +64 -0
- package/dist/application/work-governance-context.js.map +1 -0
- package/dist/application/work-governance-context.test.d.ts +2 -0
- package/dist/application/work-governance-context.test.d.ts.map +1 -0
- package/dist/application/work-governance-context.test.js +55 -0
- package/dist/application/work-governance-context.test.js.map +1 -0
- package/dist/application/work-governance-policy.d.ts +15 -0
- package/dist/application/work-governance-policy.d.ts.map +1 -0
- package/dist/application/work-governance-policy.js +53 -0
- package/dist/application/work-governance-policy.js.map +1 -0
- package/dist/application/work-governance-tool.d.ts +421 -0
- package/dist/application/work-governance-tool.d.ts.map +1 -0
- package/dist/application/work-governance-tool.js +937 -0
- package/dist/application/work-governance-tool.js.map +1 -0
- package/dist/application/work-governance-tool.test.d.ts +2 -0
- package/dist/application/work-governance-tool.test.d.ts.map +1 -0
- package/dist/application/work-governance-tool.test.js +935 -0
- package/dist/application/work-governance-tool.test.js.map +1 -0
- package/dist/application/work-governance-workflows.d.ts +23 -0
- package/dist/application/work-governance-workflows.d.ts.map +1 -0
- package/dist/application/work-governance-workflows.js +177 -0
- package/dist/application/work-governance-workflows.js.map +1 -0
- package/dist/application/workflow-snapshot-export.d.ts +81 -0
- package/dist/application/workflow-snapshot-export.d.ts.map +1 -0
- package/dist/application/workflow-snapshot-export.js +141 -0
- package/dist/application/workflow-snapshot-export.js.map +1 -0
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +242 -24
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/benchmark.d.ts +8 -0
- package/dist/commands/benchmark.d.ts.map +1 -0
- package/dist/commands/benchmark.js +287 -0
- package/dist/commands/benchmark.js.map +1 -0
- package/dist/commands/config.d.ts +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +369 -39
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/config.test.d.ts +2 -0
- package/dist/commands/config.test.d.ts.map +1 -0
- package/dist/commands/config.test.js +86 -0
- package/dist/commands/config.test.js.map +1 -0
- package/dist/commands/goal.d.ts +12 -0
- package/dist/commands/goal.d.ts.map +1 -0
- package/dist/commands/goal.js +469 -0
- package/dist/commands/goal.js.map +1 -0
- package/dist/commands/goal.test.d.ts +2 -0
- package/dist/commands/goal.test.d.ts.map +1 -0
- package/dist/commands/goal.test.js +317 -0
- package/dist/commands/goal.test.js.map +1 -0
- package/dist/commands/gui-options.d.ts +5 -0
- package/dist/commands/gui-options.d.ts.map +1 -0
- package/dist/commands/gui-options.js +18 -0
- package/dist/commands/gui-options.js.map +1 -0
- package/dist/commands/gui-session-detail.d.ts +4 -0
- package/dist/commands/gui-session-detail.d.ts.map +1 -0
- package/dist/commands/gui-session-detail.js +32 -0
- package/dist/commands/gui-session-detail.js.map +1 -0
- package/dist/commands/gui-session-summaries.d.ts +5 -0
- package/dist/commands/gui-session-summaries.d.ts.map +1 -0
- package/dist/commands/gui-session-summaries.js +62 -0
- package/dist/commands/gui-session-summaries.js.map +1 -0
- package/dist/commands/gui-shutdown-monitor.d.ts +8 -0
- package/dist/commands/gui-shutdown-monitor.d.ts.map +1 -0
- package/dist/commands/gui-shutdown-monitor.js +50 -0
- package/dist/commands/gui-shutdown-monitor.js.map +1 -0
- package/dist/commands/gui-window.d.ts +42 -0
- package/dist/commands/gui-window.d.ts.map +1 -0
- package/dist/commands/gui-window.js +287 -0
- package/dist/commands/gui-window.js.map +1 -0
- package/dist/commands/gui-workspace.d.ts +3 -0
- package/dist/commands/gui-workspace.d.ts.map +1 -0
- package/dist/commands/gui-workspace.js +297 -0
- package/dist/commands/gui-workspace.js.map +1 -0
- package/dist/commands/gui.d.ts +14 -0
- package/dist/commands/gui.d.ts.map +1 -0
- package/dist/commands/gui.js +391 -0
- package/dist/commands/gui.js.map +1 -0
- package/dist/commands/import-native.d.ts +34 -0
- package/dist/commands/import-native.d.ts.map +1 -0
- package/dist/commands/import-native.js +302 -0
- package/dist/commands/import-native.js.map +1 -0
- package/dist/commands/init-templates.d.ts.map +1 -1
- package/dist/commands/init-templates.js +13 -12
- package/dist/commands/init-templates.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp-config.d.ts.map +1 -1
- package/dist/commands/mcp-config.js +6 -3
- package/dist/commands/mcp-config.js.map +1 -1
- package/dist/commands/memory.d.ts +1 -1
- package/dist/commands/memory.d.ts.map +1 -1
- package/dist/commands/memory.js +188 -39
- package/dist/commands/memory.js.map +1 -1
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +64 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/route.d.ts +3 -0
- package/dist/commands/route.d.ts.map +1 -0
- package/dist/commands/route.js +19 -0
- package/dist/commands/route.js.map +1 -0
- package/dist/commands/run.d.ts +23 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +416 -81
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/skill-capture.js +34 -14
- package/dist/commands/skill-capture.js.map +1 -1
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +10 -9
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/status.d.ts +5 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +134 -5
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts +8 -6
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +173 -48
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/tools.d.ts +2 -0
- package/dist/commands/tools.d.ts.map +1 -1
- package/dist/commands/tools.js +34 -15
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/tui.d.ts +6 -4
- package/dist/commands/tui.d.ts.map +1 -1
- package/dist/commands/tui.js +594 -94
- package/dist/commands/tui.js.map +1 -1
- package/dist/commands/uninstall.d.ts +13 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +111 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/config/builtin-tool-surface-config.d.ts +6 -0
- package/dist/config/builtin-tool-surface-config.d.ts.map +1 -0
- package/dist/config/builtin-tool-surface-config.js +27 -0
- package/dist/config/builtin-tool-surface-config.js.map +1 -0
- package/dist/config/config-merger.d.ts +1 -1
- package/dist/config/config-merger.d.ts.map +1 -1
- package/dist/config/config-merger.js +21 -4
- package/dist/config/config-merger.js.map +1 -1
- package/dist/config/config-merger.test.js +202 -7
- package/dist/config/config-merger.test.js.map +1 -1
- package/dist/config/global-config.d.ts +59 -13
- package/dist/config/global-config.d.ts.map +1 -1
- package/dist/config/global-config.js +580 -5
- package/dist/config/global-config.js.map +1 -1
- package/dist/config/global-config.test.js +481 -8
- package/dist/config/global-config.test.js.map +1 -1
- package/dist/config/harness-integration-capabilities.d.ts +27 -0
- package/dist/config/harness-integration-capabilities.d.ts.map +1 -0
- package/dist/config/harness-integration-capabilities.js +64 -0
- package/dist/config/harness-integration-capabilities.js.map +1 -0
- package/dist/config/interactive-use-config.d.ts +25 -0
- package/dist/config/interactive-use-config.d.ts.map +1 -0
- package/dist/config/interactive-use-config.js +210 -0
- package/dist/config/interactive-use-config.js.map +1 -0
- package/dist/config/json-comments.d.ts +2 -0
- package/dist/config/json-comments.d.ts.map +1 -0
- package/dist/config/json-comments.js +21 -0
- package/dist/config/json-comments.js.map +1 -0
- package/dist/config/managed-agent-direct-adapters.d.ts +15 -0
- package/dist/config/managed-agent-direct-adapters.d.ts.map +1 -0
- package/dist/config/managed-agent-direct-adapters.js +54 -0
- package/dist/config/managed-agent-direct-adapters.js.map +1 -0
- package/dist/config/managed-agent-provider-models.d.ts +3 -0
- package/dist/config/managed-agent-provider-models.d.ts.map +1 -0
- package/dist/config/managed-agent-provider-models.js +12 -0
- package/dist/config/managed-agent-provider-models.js.map +1 -0
- package/dist/config/managed-agent-routes.d.ts +49 -0
- package/dist/config/managed-agent-routes.d.ts.map +1 -0
- package/dist/config/managed-agent-routes.js +578 -0
- package/dist/config/managed-agent-routes.js.map +1 -0
- package/dist/config/managed-invocation-context-resolver.d.ts +10 -0
- package/dist/config/managed-invocation-context-resolver.d.ts.map +1 -0
- package/dist/config/managed-invocation-context-resolver.js +98 -0
- package/dist/config/managed-invocation-context-resolver.js.map +1 -0
- package/dist/config/managed-invocation-context-resolver.test.d.ts +2 -0
- package/dist/config/managed-invocation-context-resolver.test.d.ts.map +1 -0
- package/dist/config/managed-invocation-context-resolver.test.js +133 -0
- package/dist/config/managed-invocation-context-resolver.test.js.map +1 -0
- package/dist/config/model-task-suitability.d.ts +9 -0
- package/dist/config/model-task-suitability.d.ts.map +1 -0
- package/dist/config/model-task-suitability.js +40 -0
- package/dist/config/model-task-suitability.js.map +1 -0
- package/dist/config/native-agent-projection.d.ts +16 -0
- package/dist/config/native-agent-projection.d.ts.map +1 -0
- package/dist/config/native-agent-projection.js +242 -0
- package/dist/config/native-agent-projection.js.map +1 -0
- package/dist/config/native-hook-projection.d.ts +11 -0
- package/dist/config/native-hook-projection.d.ts.map +1 -0
- package/dist/config/native-hook-projection.js +180 -0
- package/dist/config/native-hook-projection.js.map +1 -0
- package/dist/config/native-permission-projection.d.ts +12 -0
- package/dist/config/native-permission-projection.d.ts.map +1 -0
- package/dist/config/native-permission-projection.js +162 -0
- package/dist/config/native-permission-projection.js.map +1 -0
- package/dist/config/native-projection-backup.d.ts +8 -0
- package/dist/config/native-projection-backup.d.ts.map +1 -0
- package/dist/config/native-projection-backup.js +19 -0
- package/dist/config/native-projection-backup.js.map +1 -0
- package/dist/config/native-projection-policy.d.ts +10 -0
- package/dist/config/native-projection-policy.d.ts.map +1 -0
- package/dist/config/native-projection-policy.js +9 -0
- package/dist/config/native-projection-policy.js.map +1 -0
- package/dist/config/native-projection-state.d.ts +57 -0
- package/dist/config/native-projection-state.d.ts.map +1 -0
- package/dist/config/native-projection-state.js +199 -0
- package/dist/config/native-projection-state.js.map +1 -0
- package/dist/config/native-skill-projection.d.ts +24 -0
- package/dist/config/native-skill-projection.d.ts.map +1 -0
- package/dist/config/native-skill-projection.js +170 -0
- package/dist/config/native-skill-projection.js.map +1 -0
- package/dist/config/operator-identity-context.d.ts +7 -0
- package/dist/config/operator-identity-context.d.ts.map +1 -0
- package/dist/config/operator-identity-context.js +46 -0
- package/dist/config/operator-identity-context.js.map +1 -0
- package/dist/config/operator-identity-context.test.d.ts +2 -0
- package/dist/config/operator-identity-context.test.d.ts.map +1 -0
- package/dist/config/operator-identity-context.test.js +61 -0
- package/dist/config/operator-identity-context.test.js.map +1 -0
- package/dist/config/operator-voice.d.ts +10 -0
- package/dist/config/operator-voice.d.ts.map +1 -0
- package/dist/config/operator-voice.js +29 -0
- package/dist/config/operator-voice.js.map +1 -0
- package/dist/config/provider-route-candidates.d.ts +20 -0
- package/dist/config/provider-route-candidates.d.ts.map +1 -0
- package/dist/config/provider-route-candidates.js +211 -0
- package/dist/config/provider-route-candidates.js.map +1 -0
- package/dist/config/provider-route-candidates.test.d.ts +2 -0
- package/dist/config/provider-route-candidates.test.d.ts.map +1 -0
- package/dist/config/provider-route-candidates.test.js +150 -0
- package/dist/config/provider-route-candidates.test.js.map +1 -0
- package/dist/config/skill-registry.d.ts +9 -0
- package/dist/config/skill-registry.d.ts.map +1 -0
- package/dist/config/skill-registry.js +13 -0
- package/dist/config/skill-registry.js.map +1 -0
- package/dist/config/skill-registry.test.d.ts +2 -0
- package/dist/config/skill-registry.test.d.ts.map +1 -0
- package/dist/config/skill-registry.test.js +64 -0
- package/dist/config/skill-registry.test.js.map +1 -0
- package/dist/config/task-skill-selection.d.ts +24 -0
- package/dist/config/task-skill-selection.d.ts.map +1 -0
- package/dist/config/task-skill-selection.js +79 -0
- package/dist/config/task-skill-selection.js.map +1 -0
- package/dist/config/translators/claude-translator.d.ts +7 -0
- package/dist/config/translators/claude-translator.d.ts.map +1 -0
- package/dist/config/translators/claude-translator.js +30 -0
- package/dist/config/translators/claude-translator.js.map +1 -0
- package/dist/config/translators/codex-translator.d.ts +7 -0
- package/dist/config/translators/codex-translator.d.ts.map +1 -0
- package/dist/config/translators/codex-translator.js +20 -0
- package/dist/config/translators/codex-translator.js.map +1 -0
- package/dist/config/translators/opencode-translator.d.ts +7 -0
- package/dist/config/translators/opencode-translator.d.ts.map +1 -0
- package/dist/config/translators/opencode-translator.js +19 -0
- package/dist/config/translators/opencode-translator.js.map +1 -0
- package/dist/config/translators/permission-projection.d.ts +26 -0
- package/dist/config/translators/permission-projection.d.ts.map +1 -0
- package/dist/config/translators/permission-projection.js +22 -0
- package/dist/config/translators/permission-projection.js.map +1 -0
- package/dist/config/web-tools-config.d.ts +45 -0
- package/dist/config/web-tools-config.d.ts.map +1 -0
- package/dist/config/web-tools-config.js +846 -0
- package/dist/config/web-tools-config.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/engines/engine-registry.d.ts +45 -0
- package/dist/engines/engine-registry.d.ts.map +1 -0
- package/dist/engines/engine-registry.js +125 -0
- package/dist/engines/engine-registry.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +141 -18
- package/dist/index.js.map +1 -1
- package/dist/kiln-yaml-types.d.ts +207 -1
- package/dist/kiln-yaml-types.d.ts.map +1 -1
- package/dist/kiln-yaml-types.js +29 -0
- package/dist/kiln-yaml-types.js.map +1 -1
- package/dist/kiln-yaml.d.ts +1 -1
- package/dist/kiln-yaml.d.ts.map +1 -1
- package/dist/kiln-yaml.js +93 -0
- package/dist/kiln-yaml.js.map +1 -1
- package/dist/mcp/config-generator.d.ts.map +1 -1
- package/dist/mcp/config-generator.js +8 -7
- package/dist/mcp/config-generator.js.map +1 -1
- package/dist/mcp/index.d.ts +2 -25
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -103
- package/dist/mcp/index.js.map +1 -1
- package/dist/wrapper/__tests__/session-manager-context-governor.test.d.ts +2 -0
- package/dist/wrapper/__tests__/session-manager-context-governor.test.d.ts.map +1 -0
- package/dist/wrapper/__tests__/session-manager-context-governor.test.js +210 -0
- package/dist/wrapper/__tests__/session-manager-context-governor.test.js.map +1 -0
- package/dist/wrapper/claude-code-process.d.ts +1 -0
- package/dist/wrapper/claude-code-process.d.ts.map +1 -1
- package/dist/wrapper/claude-code-process.js +32 -19
- package/dist/wrapper/claude-code-process.js.map +1 -1
- package/dist/wrapper/cleanup-registry.d.ts.map +1 -1
- package/dist/wrapper/cleanup-registry.js +3 -1
- package/dist/wrapper/cleanup-registry.js.map +1 -1
- package/dist/wrapper/codex-session.d.ts +3 -0
- package/dist/wrapper/codex-session.d.ts.map +1 -1
- package/dist/wrapper/codex-session.js +193 -85
- package/dist/wrapper/codex-session.js.map +1 -1
- package/dist/wrapper/debug.d.ts.map +1 -1
- package/dist/wrapper/debug.js +2 -0
- package/dist/wrapper/debug.js.map +1 -1
- package/dist/wrapper/direct-provider-adapter-factory.d.ts +12 -0
- package/dist/wrapper/direct-provider-adapter-factory.d.ts.map +1 -0
- package/dist/wrapper/direct-provider-adapter-factory.js +99 -0
- package/dist/wrapper/direct-provider-adapter-factory.js.map +1 -0
- package/dist/wrapper/index.d.ts +0 -2
- package/dist/wrapper/index.d.ts.map +1 -1
- package/dist/wrapper/index.js +0 -1
- package/dist/wrapper/index.js.map +1 -1
- package/dist/wrapper/opencode-session.d.ts +4 -0
- package/dist/wrapper/opencode-session.d.ts.map +1 -1
- package/dist/wrapper/opencode-session.js +245 -38
- package/dist/wrapper/opencode-session.js.map +1 -1
- package/dist/wrapper/permission-evaluator.d.ts +2 -1
- package/dist/wrapper/permission-evaluator.d.ts.map +1 -1
- package/dist/wrapper/permission-evaluator.js +54 -0
- package/dist/wrapper/permission-evaluator.js.map +1 -1
- package/dist/wrapper/permission-normalizer.d.ts +5 -1
- package/dist/wrapper/permission-normalizer.d.ts.map +1 -1
- package/dist/wrapper/permission-normalizer.js +17 -0
- package/dist/wrapper/permission-normalizer.js.map +1 -1
- package/dist/wrapper/permission-policy-authorizer.d.ts +1 -1
- package/dist/wrapper/permission-policy-authorizer.js +1 -1
- package/dist/wrapper/pooled-harness-session.d.ts +24 -0
- package/dist/wrapper/pooled-harness-session.d.ts.map +1 -0
- package/dist/wrapper/pooled-harness-session.js +123 -0
- package/dist/wrapper/pooled-harness-session.js.map +1 -0
- package/dist/wrapper/preamble-builder.d.ts +4 -1
- package/dist/wrapper/preamble-builder.d.ts.map +1 -1
- package/dist/wrapper/preamble-builder.js +48 -20
- package/dist/wrapper/preamble-builder.js.map +1 -1
- package/dist/wrapper/provider-session.d.ts +25 -5
- package/dist/wrapper/provider-session.d.ts.map +1 -1
- package/dist/wrapper/provider-session.js +562 -138
- package/dist/wrapper/provider-session.js.map +1 -1
- package/dist/wrapper/session-manager.d.ts.map +1 -1
- package/dist/wrapper/session-manager.js +16 -5
- package/dist/wrapper/session-manager.js.map +1 -1
- package/dist/wrapper/session-registry.d.ts +11 -1
- package/dist/wrapper/session-registry.d.ts.map +1 -1
- package/dist/wrapper/session-registry.js +167 -259
- package/dist/wrapper/session-registry.js.map +1 -1
- package/dist/wrapper/session-store.d.ts +33 -10
- package/dist/wrapper/session-store.d.ts.map +1 -1
- package/dist/wrapper/session-store.js +327 -84
- package/dist/wrapper/session-store.js.map +1 -1
- package/dist/wrapper/session.d.ts +55 -2
- package/dist/wrapper/session.d.ts.map +1 -1
- package/dist/wrapper/session.js +11 -2
- package/dist/wrapper/session.js.map +1 -1
- package/package.json +8 -8
- package/dist/application/__tests__/plan-exit-tool.test.d.ts +0 -2
- package/dist/application/__tests__/plan-exit-tool.test.d.ts.map +0 -1
- package/dist/application/__tests__/plan-exit-tool.test.js +0 -12
- package/dist/application/__tests__/plan-exit-tool.test.js.map +0 -1
- package/dist/application/context-governor.d.ts +0 -26
- package/dist/application/context-governor.d.ts.map +0 -1
- package/dist/application/context-governor.js +0 -164
- package/dist/application/context-governor.js.map +0 -1
- package/dist/application/plan-exit-tool.d.ts +0 -19
- package/dist/application/plan-exit-tool.d.ts.map +0 -1
- package/dist/application/plan-exit-tool.js +0 -13
- package/dist/application/plan-exit-tool.js.map +0 -1
- package/dist/commands/serve.d.ts +0 -7
- package/dist/commands/serve.d.ts.map +0 -1
- package/dist/commands/serve.js +0 -24
- package/dist/commands/serve.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -36
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -156
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/transports.d.ts +0 -28
- package/dist/mcp/transports.d.ts.map +0 -1
- package/dist/mcp/transports.js +0 -108
- package/dist/mcp/transports.js.map +0 -1
- package/dist/mcp-entry.d.ts +0 -3
- package/dist/mcp-entry.d.ts.map +0 -1
- package/dist/mcp-entry.js +0 -19
- package/dist/mcp-entry.js.map +0 -1
- package/dist/sync/agent-sync.d.ts +0 -13
- package/dist/sync/agent-sync.d.ts.map +0 -1
- package/dist/sync/agent-sync.js +0 -130
- package/dist/sync/agent-sync.js.map +0 -1
- package/dist/sync/agent-sync.test.d.ts +0 -2
- package/dist/sync/agent-sync.test.d.ts.map +0 -1
- package/dist/sync/agent-sync.test.js +0 -130
- package/dist/sync/agent-sync.test.js.map +0 -1
- package/dist/sync/agents-md-sync.d.ts +0 -7
- package/dist/sync/agents-md-sync.d.ts.map +0 -1
- package/dist/sync/agents-md-sync.js +0 -44
- package/dist/sync/agents-md-sync.js.map +0 -1
- package/dist/sync/agents-md-sync.test.d.ts +0 -2
- package/dist/sync/agents-md-sync.test.d.ts.map +0 -1
- package/dist/sync/agents-md-sync.test.js +0 -154
- package/dist/sync/agents-md-sync.test.js.map +0 -1
- package/dist/sync/hook-sync.d.ts +0 -8
- package/dist/sync/hook-sync.d.ts.map +0 -1
- package/dist/sync/hook-sync.js +0 -90
- package/dist/sync/hook-sync.js.map +0 -1
- package/dist/sync/security-sync.d.ts +0 -9
- package/dist/sync/security-sync.d.ts.map +0 -1
- package/dist/sync/security-sync.js +0 -161
- package/dist/sync/security-sync.js.map +0 -1
- package/dist/sync/skill-sync.d.ts +0 -10
- package/dist/sync/skill-sync.d.ts.map +0 -1
- package/dist/sync/skill-sync.js +0 -87
- package/dist/sync/skill-sync.js.map +0 -1
- package/dist/sync/skill-sync.test.d.ts +0 -2
- package/dist/sync/skill-sync.test.d.ts.map +0 -1
- package/dist/sync/skill-sync.test.js +0 -163
- package/dist/sync/skill-sync.test.js.map +0 -1
- package/dist/wrapper/executable-provider-session.d.ts +0 -26
- package/dist/wrapper/executable-provider-session.d.ts.map +0 -1
- package/dist/wrapper/executable-provider-session.js +0 -214
- package/dist/wrapper/executable-provider-session.js.map +0 -1
package/README.md
CHANGED
|
@@ -6,16 +6,19 @@
|
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<a href="https://www.npmjs.com/package/@kilnai/cli"><img src="https://img.shields.io/npm/v/@kilnai/cli.svg" alt="npm version" /></a>
|
|
9
|
-
<a href="https://opensource.org/licenses/
|
|
9
|
+
<a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg" alt="License: Apache-2.0" /></a>
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
|
-
<p align="center">CLI and MCP
|
|
12
|
+
<p align="center">CLI, GUI launcher, and MCP tooling for the Kiln governed AI control plane.</p>
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
## What is this?
|
|
17
17
|
|
|
18
|
-
`@kilnai/cli` is the command-line interface for
|
|
18
|
+
`@kilnai/cli` is the command-line interface for
|
|
19
|
+
[Kiln](https://github.com/sequelcore/kiln). It provides local operator
|
|
20
|
+
commands, GUI/TUI launchers, config projection tools, workflow commands, and
|
|
21
|
+
the dev-tools MCP server.
|
|
19
22
|
|
|
20
23
|
## Install
|
|
21
24
|
|
|
@@ -23,6 +26,9 @@
|
|
|
23
26
|
bun add -g @kilnai/cli
|
|
24
27
|
```
|
|
25
28
|
|
|
29
|
+
This installs the official CLI, GUI launcher/assets, TUI, runtime, and gateway
|
|
30
|
+
contracts so `kiln gui` and `kiln tui` can run from any project directory.
|
|
31
|
+
|
|
26
32
|
Or use directly:
|
|
27
33
|
|
|
28
34
|
```bash
|
|
@@ -40,9 +46,9 @@ kiln init
|
|
|
40
46
|
```
|
|
41
47
|
|
|
42
48
|
Walks you through:
|
|
43
|
-
- Provider selection
|
|
44
|
-
- Channel selection
|
|
45
|
-
- Team mode
|
|
49
|
+
- Provider selection
|
|
50
|
+
- Channel selection
|
|
51
|
+
- Team mode selection for YAML app scaffolding
|
|
46
52
|
- Quality gates (test, lint, typecheck)
|
|
47
53
|
- Domain detection (React, Python, docs, etc.)
|
|
48
54
|
|
|
@@ -66,6 +72,20 @@ Run a single task:
|
|
|
66
72
|
kiln run "Implement the login page"
|
|
67
73
|
```
|
|
68
74
|
|
|
75
|
+
Useful flags:
|
|
76
|
+
|
|
77
|
+
- `--provider <name>` to select the provider for the run
|
|
78
|
+
- `--model <name>` to select the model for providers that require model selection
|
|
79
|
+
- `--effort <minimal|low|medium|high|xhigh>` or
|
|
80
|
+
`--reasoning-effort <minimal|low|medium|high|xhigh>` to set reasoning effort
|
|
81
|
+
for providers/models that support it
|
|
82
|
+
- `--plan` to start in plan mode
|
|
83
|
+
- `--workers <number>` to run isolated parallel workers
|
|
84
|
+
|
|
85
|
+
Reasoning effort is forwarded through the shared session contract. For the
|
|
86
|
+
Codex CLI wrapper it becomes Codex's `model_reasoning_effort` config override;
|
|
87
|
+
for direct runtime providers it is sent as provider request metadata.
|
|
88
|
+
|
|
69
89
|
### `kiln tui`
|
|
70
90
|
|
|
71
91
|
Start the interactive terminal UI:
|
|
@@ -77,6 +97,7 @@ kiln tui
|
|
|
77
97
|
Useful flags:
|
|
78
98
|
|
|
79
99
|
- `--provider <name>` to select the initial provider
|
|
100
|
+
- `--model <name>` to select the initial model
|
|
80
101
|
- `--theme <name>` to select a theme
|
|
81
102
|
- `--port <number>` to override the local TUI gateway port
|
|
82
103
|
- `--plan` to start in plan mode
|
|
@@ -86,7 +107,12 @@ Current transport behavior:
|
|
|
86
107
|
- gateway transport is the default path
|
|
87
108
|
- direct transport is available only with `KILN_TUI_TRANSPORT=direct`
|
|
88
109
|
|
|
89
|
-
The default gateway path keeps TUI conversations on the runtime session
|
|
110
|
+
The default gateway path keeps TUI conversations on the runtime session
|
|
111
|
+
pipeline so provider routing, continuity, approvals, reasoning effort, and
|
|
112
|
+
sidebar route labels reflect the actual backend used for each turn.
|
|
113
|
+
|
|
114
|
+
Inside the TUI, use `/provider` to change provider/model and `/effort` to cycle
|
|
115
|
+
the active model's advertised reasoning effort options.
|
|
90
116
|
|
|
91
117
|
### `kiln gateway`
|
|
92
118
|
|
|
@@ -160,4 +186,4 @@ This lets Claude Code use Kiln tools directly in your development workflow.
|
|
|
160
186
|
|
|
161
187
|
## License
|
|
162
188
|
|
|
163
|
-
[
|
|
189
|
+
[Apache-2.0](https://github.com/sequelcore/kiln/blob/main/LICENSE)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-report.test.d.ts","sourceRoot":"","sources":["../../../src/application/__tests__/session-report.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { summarizeContextGovernance } from "../session-report.js";
|
|
3
|
+
describe("summarizeContextGovernance", () => {
|
|
4
|
+
it("uses core context audit reasons instead of local inference when available", () => {
|
|
5
|
+
const projectedContext = {
|
|
6
|
+
blocks: [
|
|
7
|
+
{
|
|
8
|
+
id: "candidate:0",
|
|
9
|
+
kind: "summary",
|
|
10
|
+
source: "runtime-continuity",
|
|
11
|
+
content: "summary",
|
|
12
|
+
required: false,
|
|
13
|
+
score: 80,
|
|
14
|
+
estimatedTokens: 2,
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
deferredBlocks: [
|
|
18
|
+
{
|
|
19
|
+
id: "candidate:1",
|
|
20
|
+
kind: "memory",
|
|
21
|
+
source: "runtime-recalled-memory",
|
|
22
|
+
content: "memory",
|
|
23
|
+
required: false,
|
|
24
|
+
score: 40,
|
|
25
|
+
estimatedTokens: 2,
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
estimatedTokens: 2,
|
|
29
|
+
tokenBudget: 2,
|
|
30
|
+
overflow: true,
|
|
31
|
+
auditTrail: [
|
|
32
|
+
{
|
|
33
|
+
governor: "DefaultContextGovernor",
|
|
34
|
+
selectedBlockIds: ["candidate:0"],
|
|
35
|
+
deferredBlockIds: ["candidate:1"],
|
|
36
|
+
requiredBlockIds: [],
|
|
37
|
+
preservedRequiredBlockIds: [],
|
|
38
|
+
selectedTokens: 2,
|
|
39
|
+
requiredTokens: 0,
|
|
40
|
+
tokenBudget: 2,
|
|
41
|
+
overflow: true,
|
|
42
|
+
overflowReason: "budget-cap",
|
|
43
|
+
blocks: [
|
|
44
|
+
{
|
|
45
|
+
id: "candidate:0",
|
|
46
|
+
kind: "summary",
|
|
47
|
+
source: "runtime-continuity",
|
|
48
|
+
required: false,
|
|
49
|
+
estimatedTokens: 2,
|
|
50
|
+
baseScore: 80,
|
|
51
|
+
effectiveScore: 80,
|
|
52
|
+
decision: "admitted",
|
|
53
|
+
reason: "within-budget",
|
|
54
|
+
order: 0,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: "candidate:1",
|
|
58
|
+
kind: "memory",
|
|
59
|
+
source: "runtime-recalled-memory",
|
|
60
|
+
required: false,
|
|
61
|
+
estimatedTokens: 2,
|
|
62
|
+
baseScore: 40,
|
|
63
|
+
effectiveScore: 40,
|
|
64
|
+
decision: "deferred",
|
|
65
|
+
reason: "budget-cap",
|
|
66
|
+
order: 1,
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
expect(summarizeContextGovernance(projectedContext).deferredReasons).toEqual([
|
|
73
|
+
"budget-cap",
|
|
74
|
+
]);
|
|
75
|
+
});
|
|
76
|
+
it("keeps the local deferred reason fallback when no core audit is present", () => {
|
|
77
|
+
const projectedContext = {
|
|
78
|
+
blocks: [],
|
|
79
|
+
deferredBlocks: [
|
|
80
|
+
{
|
|
81
|
+
id: "candidate:1",
|
|
82
|
+
kind: "memory",
|
|
83
|
+
source: "runtime-recalled-memory",
|
|
84
|
+
content: "memory",
|
|
85
|
+
required: false,
|
|
86
|
+
score: 40,
|
|
87
|
+
estimatedTokens: 2,
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
estimatedTokens: 0,
|
|
91
|
+
tokenBudget: 2,
|
|
92
|
+
overflow: true,
|
|
93
|
+
};
|
|
94
|
+
expect(summarizeContextGovernance(projectedContext).deferredReasons).toEqual([
|
|
95
|
+
"required-overflow",
|
|
96
|
+
"lower-priority-memory",
|
|
97
|
+
]);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=session-report.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-report.test.js","sourceRoot":"","sources":["../../../src/application/__tests__/session-report.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,40 @@
|
|
|
1
|
+
import type { AgentTier, ModelTaskSuitabilityTask } from "@kilnai/core";
|
|
1
2
|
export interface KilnAgentDefinition {
|
|
2
3
|
readonly name: string;
|
|
4
|
+
readonly displayName?: string;
|
|
5
|
+
readonly nicknameCandidates?: readonly string[];
|
|
3
6
|
readonly role: string;
|
|
7
|
+
readonly description?: string;
|
|
8
|
+
readonly goal: string;
|
|
9
|
+
readonly backstory?: string;
|
|
10
|
+
readonly tier: AgentTier;
|
|
4
11
|
readonly tools?: readonly string[];
|
|
5
12
|
readonly model?: string;
|
|
6
13
|
readonly skills?: readonly string[];
|
|
14
|
+
readonly instructionProfiles?: readonly string[];
|
|
15
|
+
readonly taskAffinity?: readonly ModelTaskSuitabilityTask[];
|
|
16
|
+
readonly mode?: KilnAgentMode;
|
|
17
|
+
readonly structured?: boolean;
|
|
18
|
+
readonly count?: number;
|
|
19
|
+
readonly sandbox?: boolean;
|
|
20
|
+
readonly modalities?: readonly string[];
|
|
21
|
+
readonly authorityProfile?: string;
|
|
22
|
+
readonly routeId?: string;
|
|
23
|
+
readonly providerRoute?: KilnAgentProviderRoute;
|
|
24
|
+
readonly voiceProfile?: string;
|
|
7
25
|
readonly instructions?: string;
|
|
8
|
-
readonly scope: "global" | "project";
|
|
26
|
+
readonly scope: "builtin" | "global" | "project";
|
|
9
27
|
}
|
|
10
|
-
export
|
|
28
|
+
export type KilnAgentMode = "primary" | "subagent" | "managed-child" | "all";
|
|
29
|
+
export interface KilnAgentProviderRoute {
|
|
30
|
+
readonly providerId: string;
|
|
31
|
+
readonly model?: string;
|
|
32
|
+
readonly reasoningEffort?: string;
|
|
33
|
+
}
|
|
34
|
+
export declare function parseAgentDefinitionContent(raw: string, scope?: "global" | "project"): KilnAgentDefinition | undefined;
|
|
35
|
+
export interface LoadAgentDefinitionsOptions {
|
|
36
|
+
readonly includeBuiltins?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare function loadAgentDefinitions(projectPath: string, options?: LoadAgentDefinitionsOptions): Promise<KilnAgentDefinition[]>;
|
|
11
39
|
export declare function findAgent(definitions: KilnAgentDefinition[], name: string): KilnAgentDefinition | undefined;
|
|
12
40
|
//# sourceMappingURL=agent-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loader.d.ts","sourceRoot":"","sources":["../../src/application/agent-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-loader.d.ts","sourceRoot":"","sources":["../../src/application/agent-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAGxE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,sBAAsB,CAAC;IAChD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;CAClD;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,eAAe,GAAG,KAAK,CAAC;AAE7E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAuKD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,QAAQ,GAAG,SAAqB,GAAG,mBAAmB,GAAG,SAAS,CAEjI;AAkCD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAqBhC;AAED,wBAAgB,SAAS,CACvB,WAAW,EAAE,mBAAmB,EAAE,EAClC,IAAI,EAAE,MAAM,GACX,mBAAmB,GAAG,SAAS,CAkBjC"}
|
|
@@ -2,6 +2,7 @@ import { readdirSync, readFileSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { parse } from "yaml";
|
|
5
|
+
import { KILN_FIRST_PARTY_AGENT_DEFAULTS } from "./first-party-agent-defaults.js";
|
|
5
6
|
function parseFrontmatter(raw) {
|
|
6
7
|
const content = raw.replace(/^\uFEFF/, "");
|
|
7
8
|
const match = /^---\s*\r?\n([\s\S]*?)\r?\n---\s*([\s\S]*)$/u.exec(content);
|
|
@@ -30,6 +31,50 @@ function asStringArray(value) {
|
|
|
30
31
|
.filter((entry) => entry.length > 0);
|
|
31
32
|
return entries.length > 0 ? entries : undefined;
|
|
32
33
|
}
|
|
34
|
+
function asBoolean(value) {
|
|
35
|
+
return typeof value === "boolean" ? value : undefined;
|
|
36
|
+
}
|
|
37
|
+
function asPositiveInteger(value) {
|
|
38
|
+
return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : undefined;
|
|
39
|
+
}
|
|
40
|
+
function asAgentTier(value) {
|
|
41
|
+
return value === "reasoning" || value === "coding" || value === "fast" ? value : undefined;
|
|
42
|
+
}
|
|
43
|
+
function asAgentMode(value) {
|
|
44
|
+
return value === "primary" || value === "subagent" || value === "managed-child" || value === "all"
|
|
45
|
+
? value
|
|
46
|
+
: undefined;
|
|
47
|
+
}
|
|
48
|
+
function asTaskAffinity(value) {
|
|
49
|
+
const entries = asStringArray(value);
|
|
50
|
+
if (!entries) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
const supported = entries.filter((entry) => entry === "architecture-review"
|
|
54
|
+
|| entry === "backend-coding"
|
|
55
|
+
|| entry === "frontend-design"
|
|
56
|
+
|| entry === "mechanical-edit"
|
|
57
|
+
|| entry === "research"
|
|
58
|
+
|| entry === "test-writing");
|
|
59
|
+
return supported.length > 0 ? supported : undefined;
|
|
60
|
+
}
|
|
61
|
+
function asProviderRoute(value) {
|
|
62
|
+
if (!value || typeof value !== "object") {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
const record = value;
|
|
66
|
+
const providerId = asNonEmptyString(record.providerId);
|
|
67
|
+
if (!providerId) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
const model = asNonEmptyString(record.model);
|
|
71
|
+
const reasoningEffort = asNonEmptyString(record.reasoningEffort);
|
|
72
|
+
return {
|
|
73
|
+
providerId,
|
|
74
|
+
...(model ? { model } : {}),
|
|
75
|
+
...(reasoningEffort ? { reasoningEffort } : {}),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
33
78
|
function parseAgentDefinition(raw, scope) {
|
|
34
79
|
const parsed = parseFrontmatter(raw);
|
|
35
80
|
if (!parsed) {
|
|
@@ -48,23 +93,60 @@ function parseAgentDefinition(raw, scope) {
|
|
|
48
93
|
const record = frontmatter;
|
|
49
94
|
const name = asNonEmptyString(record.name);
|
|
50
95
|
const role = asNonEmptyString(record.role);
|
|
51
|
-
|
|
96
|
+
const goal = asNonEmptyString(record.goal);
|
|
97
|
+
const tier = asAgentTier(record.tier);
|
|
98
|
+
if (!name || !role || !goal || !tier) {
|
|
52
99
|
return undefined;
|
|
53
100
|
}
|
|
101
|
+
const description = asNonEmptyString(record.description);
|
|
102
|
+
const displayName = asNonEmptyString(record.displayName);
|
|
103
|
+
const nicknameCandidates = asStringArray(record.nicknameCandidates);
|
|
104
|
+
const backstory = asNonEmptyString(record.backstory);
|
|
54
105
|
const tools = asStringArray(record.tools);
|
|
55
106
|
const model = asNonEmptyString(record.model);
|
|
56
107
|
const skills = asStringArray(record.skills);
|
|
108
|
+
const instructionProfiles = asStringArray(record.instructionProfiles);
|
|
109
|
+
const taskAffinity = asTaskAffinity(record.taskAffinity);
|
|
110
|
+
const mode = asAgentMode(record.mode);
|
|
111
|
+
const structured = asBoolean(record.structured);
|
|
112
|
+
const count = asPositiveInteger(record.count);
|
|
113
|
+
const sandbox = asBoolean(record.sandbox);
|
|
114
|
+
const modalities = asStringArray(record.modalities);
|
|
115
|
+
const authorityProfile = asNonEmptyString(record.authorityProfile);
|
|
116
|
+
const routeId = asNonEmptyString(record.routeId);
|
|
117
|
+
const providerRoute = asProviderRoute(record.providerRoute);
|
|
118
|
+
const voiceProfile = asNonEmptyString(record.voiceProfile);
|
|
57
119
|
const instructions = parsed.body.length > 0 ? parsed.body : undefined;
|
|
58
120
|
return {
|
|
59
121
|
name,
|
|
122
|
+
...(displayName ? { displayName } : {}),
|
|
123
|
+
...(nicknameCandidates ? { nicknameCandidates } : {}),
|
|
60
124
|
role,
|
|
125
|
+
...(description ? { description } : {}),
|
|
126
|
+
goal,
|
|
127
|
+
...(backstory ? { backstory } : {}),
|
|
128
|
+
tier,
|
|
61
129
|
...(tools ? { tools } : {}),
|
|
62
130
|
...(model ? { model } : {}),
|
|
63
131
|
...(skills ? { skills } : {}),
|
|
132
|
+
...(instructionProfiles ? { instructionProfiles } : {}),
|
|
133
|
+
...(taskAffinity ? { taskAffinity } : {}),
|
|
134
|
+
...(mode ? { mode } : {}),
|
|
135
|
+
...(structured !== undefined ? { structured } : {}),
|
|
136
|
+
...(count !== undefined ? { count } : {}),
|
|
137
|
+
...(sandbox !== undefined ? { sandbox } : {}),
|
|
138
|
+
...(modalities ? { modalities } : {}),
|
|
139
|
+
...(authorityProfile ? { authorityProfile } : {}),
|
|
140
|
+
...(routeId ? { routeId } : {}),
|
|
141
|
+
...(providerRoute ? { providerRoute } : {}),
|
|
142
|
+
...(voiceProfile ? { voiceProfile } : {}),
|
|
64
143
|
...(instructions ? { instructions } : {}),
|
|
65
144
|
scope,
|
|
66
145
|
};
|
|
67
146
|
}
|
|
147
|
+
export function parseAgentDefinitionContent(raw, scope = "project") {
|
|
148
|
+
return parseAgentDefinition(raw, scope);
|
|
149
|
+
}
|
|
68
150
|
function readDefinitionsFromDirectory(directory, scope) {
|
|
69
151
|
let entries;
|
|
70
152
|
try {
|
|
@@ -92,10 +174,15 @@ function readDefinitionsFromDirectory(directory, scope) {
|
|
|
92
174
|
}
|
|
93
175
|
return definitions;
|
|
94
176
|
}
|
|
95
|
-
export async function loadAgentDefinitions(projectPath) {
|
|
177
|
+
export async function loadAgentDefinitions(projectPath, options = {}) {
|
|
96
178
|
const globalDirectory = join(homedir(), ".kiln", "agents");
|
|
97
179
|
const projectDirectory = join(projectPath, ".kiln", "agents");
|
|
98
180
|
const merged = new Map();
|
|
181
|
+
if (options.includeBuiltins !== false) {
|
|
182
|
+
for (const definition of KILN_FIRST_PARTY_AGENT_DEFAULTS) {
|
|
183
|
+
merged.set(definition.name.toLowerCase(), definition);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
99
186
|
for (const definition of readDefinitionsFromDirectory(globalDirectory, "global")) {
|
|
100
187
|
merged.set(definition.name.toLowerCase(), definition);
|
|
101
188
|
}
|
|
@@ -109,6 +196,15 @@ export function findAgent(definitions, name) {
|
|
|
109
196
|
if (target.length === 0) {
|
|
110
197
|
return undefined;
|
|
111
198
|
}
|
|
112
|
-
|
|
199
|
+
const canonicalMatch = definitions.find((definition) => definition.name.toLowerCase() === target);
|
|
200
|
+
if (canonicalMatch) {
|
|
201
|
+
return canonicalMatch;
|
|
202
|
+
}
|
|
203
|
+
const nicknameMatches = definitions.filter((definition) => {
|
|
204
|
+
const displayName = definition.displayName?.toLowerCase();
|
|
205
|
+
const nicknames = definition.nicknameCandidates?.map((nickname) => nickname.toLowerCase()) ?? [];
|
|
206
|
+
return displayName === target || nicknames.includes(target);
|
|
207
|
+
});
|
|
208
|
+
return nicknameMatches.length === 1 ? nicknameMatches[0] : undefined;
|
|
113
209
|
}
|
|
114
210
|
//# sourceMappingURL=agent-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../../src/application/agent-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../../src/application/agent-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,18 +58,34 @@ describe("agent-loader", () => {
|
|
|
58
58
|
afterEach(() => {
|
|
59
59
|
vi.restoreAllMocks();
|
|
60
60
|
});
|
|
61
|
-
it("returns
|
|
61
|
+
it("returns first-party defaults when both directories missing", async () => {
|
|
62
62
|
const definitions = await loadAgentDefinitions(PROJECT_PATH);
|
|
63
|
-
expect(definitions).
|
|
63
|
+
expect(findAgent(definitions, "architect")).toMatchObject({
|
|
64
|
+
name: "architect",
|
|
65
|
+
scope: "builtin",
|
|
66
|
+
taskAffinity: ["architecture-review"],
|
|
67
|
+
});
|
|
68
|
+
expect(findAgent(definitions, "coder")).toMatchObject({
|
|
69
|
+
name: "coder",
|
|
70
|
+
scope: "builtin",
|
|
71
|
+
tools: ["read", "grep", "glob", "write", "bash"],
|
|
72
|
+
});
|
|
64
73
|
expect(readdirSyncMock).toHaveBeenCalledWith(GLOBAL_AGENTS_DIR);
|
|
65
74
|
expect(readdirSyncMock).toHaveBeenCalledWith(PROJECT_AGENTS_DIR);
|
|
66
75
|
});
|
|
67
|
-
it("parses
|
|
76
|
+
it("parses canonical agent profile frontmatter", async () => {
|
|
68
77
|
configureDirectories(["architect.md"], []);
|
|
69
78
|
configureFiles({
|
|
70
79
|
[join(GLOBAL_AGENTS_DIR, "architect.md")]: markdownWithFrontmatter([
|
|
71
80
|
"name: Architect",
|
|
81
|
+
"displayName: Piama",
|
|
82
|
+
"nicknameCandidates:",
|
|
83
|
+
" - Architect Piama",
|
|
72
84
|
"role: System architect",
|
|
85
|
+
"description: Reviews system boundaries",
|
|
86
|
+
"goal: Keep architecture coherent",
|
|
87
|
+
"backstory: Staff engineer perspective",
|
|
88
|
+
"tier: reasoning",
|
|
73
89
|
"tools:",
|
|
74
90
|
" - read",
|
|
75
91
|
" - write",
|
|
@@ -77,16 +93,47 @@ describe("agent-loader", () => {
|
|
|
77
93
|
"skills:",
|
|
78
94
|
" - sequel-spring",
|
|
79
95
|
" - refactor",
|
|
96
|
+
"instructionProfiles:",
|
|
97
|
+
" - sequel-engineering",
|
|
98
|
+
"mode: managed-child",
|
|
99
|
+
"structured: true",
|
|
100
|
+
"count: 2",
|
|
101
|
+
"sandbox: true",
|
|
102
|
+
"modalities:",
|
|
103
|
+
" - text",
|
|
104
|
+
"authorityProfile: foundation-readonly-plan",
|
|
105
|
+
"routeId: codex-oauth-readonly",
|
|
106
|
+
"providerRoute:",
|
|
107
|
+
" providerId: codex-oauth",
|
|
108
|
+
" model: gpt-5.4-mini",
|
|
80
109
|
].join("\n")),
|
|
81
110
|
});
|
|
82
|
-
const definitions = await loadAgentDefinitions(PROJECT_PATH);
|
|
111
|
+
const definitions = await loadAgentDefinitions(PROJECT_PATH, { includeBuiltins: false });
|
|
83
112
|
expect(definitions).toEqual([
|
|
84
113
|
{
|
|
85
114
|
name: "Architect",
|
|
115
|
+
displayName: "Piama",
|
|
116
|
+
nicknameCandidates: ["Architect Piama"],
|
|
86
117
|
role: "System architect",
|
|
118
|
+
description: "Reviews system boundaries",
|
|
119
|
+
goal: "Keep architecture coherent",
|
|
120
|
+
backstory: "Staff engineer perspective",
|
|
121
|
+
tier: "reasoning",
|
|
87
122
|
tools: ["read", "write"],
|
|
88
123
|
model: "claude-sonnet-4-6",
|
|
89
124
|
skills: ["sequel-spring", "refactor"],
|
|
125
|
+
instructionProfiles: ["sequel-engineering"],
|
|
126
|
+
mode: "managed-child",
|
|
127
|
+
structured: true,
|
|
128
|
+
count: 2,
|
|
129
|
+
sandbox: true,
|
|
130
|
+
modalities: ["text"],
|
|
131
|
+
authorityProfile: "foundation-readonly-plan",
|
|
132
|
+
routeId: "codex-oauth-readonly",
|
|
133
|
+
providerRoute: {
|
|
134
|
+
providerId: "codex-oauth",
|
|
135
|
+
model: "gpt-5.4-mini",
|
|
136
|
+
},
|
|
90
137
|
scope: "global",
|
|
91
138
|
},
|
|
92
139
|
]);
|
|
@@ -94,24 +141,26 @@ describe("agent-loader", () => {
|
|
|
94
141
|
it("captures markdown body as instructions", async () => {
|
|
95
142
|
configureDirectories(["planner.md"], []);
|
|
96
143
|
configureFiles({
|
|
97
|
-
[join(GLOBAL_AGENTS_DIR, "planner.md")]: markdownWithFrontmatter(["name: Planner", "role: Planning specialist"].join("\n"), "\n# Plan\n\nCreate a concrete implementation plan.\n"),
|
|
144
|
+
[join(GLOBAL_AGENTS_DIR, "planner.md")]: markdownWithFrontmatter(["name: Planner", "role: Planning specialist", "goal: Produce plans", "tier: reasoning"].join("\n"), "\n# Plan\n\nCreate a concrete implementation plan.\n"),
|
|
98
145
|
});
|
|
99
|
-
const [definition] = await loadAgentDefinitions(PROJECT_PATH);
|
|
146
|
+
const [definition] = await loadAgentDefinitions(PROJECT_PATH, { includeBuiltins: false });
|
|
100
147
|
expect(definition?.instructions).toBe("# Plan\n\nCreate a concrete implementation plan.");
|
|
101
148
|
});
|
|
102
149
|
it("project agents override global agents with same name", async () => {
|
|
103
150
|
configureDirectories(["shared.md", "global-only.md"], ["shared.md", "project-only.md"]);
|
|
104
151
|
configureFiles({
|
|
105
|
-
[join(GLOBAL_AGENTS_DIR, "shared.md")]: markdownWithFrontmatter(["name: Shared", "role: Global role"].join("\n")),
|
|
106
|
-
[join(GLOBAL_AGENTS_DIR, "global-only.md")]: markdownWithFrontmatter(["name: GlobalOnly", "role: Global only role"].join("\n")),
|
|
107
|
-
[join(PROJECT_AGENTS_DIR, "shared.md")]: markdownWithFrontmatter(["name: Shared", "role: Project role"].join("\n")),
|
|
108
|
-
[join(PROJECT_AGENTS_DIR, "project-only.md")]: markdownWithFrontmatter(["name: ProjectOnly", "role: Project only role"].join("\n")),
|
|
152
|
+
[join(GLOBAL_AGENTS_DIR, "shared.md")]: markdownWithFrontmatter(["name: Shared", "role: Global role", "goal: Global goal", "tier: fast"].join("\n")),
|
|
153
|
+
[join(GLOBAL_AGENTS_DIR, "global-only.md")]: markdownWithFrontmatter(["name: GlobalOnly", "role: Global only role", "goal: Global only goal", "tier: coding"].join("\n")),
|
|
154
|
+
[join(PROJECT_AGENTS_DIR, "shared.md")]: markdownWithFrontmatter(["name: Shared", "role: Project role", "goal: Project goal", "tier: reasoning"].join("\n")),
|
|
155
|
+
[join(PROJECT_AGENTS_DIR, "project-only.md")]: markdownWithFrontmatter(["name: ProjectOnly", "role: Project only role", "goal: Project only goal", "tier: fast"].join("\n")),
|
|
109
156
|
});
|
|
110
|
-
const definitions = await loadAgentDefinitions(PROJECT_PATH);
|
|
157
|
+
const definitions = await loadAgentDefinitions(PROJECT_PATH, { includeBuiltins: false });
|
|
111
158
|
expect(definitions).toHaveLength(3);
|
|
112
159
|
expect(findAgent(definitions, "shared")).toEqual({
|
|
113
160
|
name: "Shared",
|
|
114
161
|
role: "Project role",
|
|
162
|
+
goal: "Project goal",
|
|
163
|
+
tier: "reasoning",
|
|
115
164
|
scope: "project",
|
|
116
165
|
});
|
|
117
166
|
expect(findAgent(definitions, "globalonly")?.scope).toBe("global");
|
|
@@ -122,28 +171,73 @@ describe("agent-loader", () => {
|
|
|
122
171
|
configureFiles({
|
|
123
172
|
[join(GLOBAL_AGENTS_DIR, "missing-name.md")]: markdownWithFrontmatter(["role: No name present"].join("\n")),
|
|
124
173
|
});
|
|
125
|
-
const definitions = await loadAgentDefinitions(PROJECT_PATH);
|
|
174
|
+
const definitions = await loadAgentDefinitions(PROJECT_PATH, { includeBuiltins: false });
|
|
126
175
|
expect(definitions).toEqual([]);
|
|
127
176
|
});
|
|
128
|
-
it("skips files missing required
|
|
177
|
+
it("skips files missing required canonical fields", async () => {
|
|
129
178
|
configureDirectories(["missing-role.md"], []);
|
|
130
179
|
configureFiles({
|
|
131
|
-
[join(GLOBAL_AGENTS_DIR, "missing-role.md")]: markdownWithFrontmatter(["name: MissingRole"].join("\n")),
|
|
180
|
+
[join(GLOBAL_AGENTS_DIR, "missing-role.md")]: markdownWithFrontmatter(["name: MissingRole", "role: Worker"].join("\n")),
|
|
132
181
|
});
|
|
133
|
-
const definitions = await loadAgentDefinitions(PROJECT_PATH);
|
|
182
|
+
const definitions = await loadAgentDefinitions(PROJECT_PATH, { includeBuiltins: false });
|
|
134
183
|
expect(definitions).toEqual([]);
|
|
135
184
|
});
|
|
136
185
|
it("findAgent() returns correct definition case-insensitively", () => {
|
|
137
186
|
const definitions = [
|
|
138
|
-
{ name: "Planner", role: "Planning specialist", scope: "global" },
|
|
139
|
-
{ name: "Code-Reviewer", role: "Review specialist", scope: "project" },
|
|
187
|
+
{ name: "Planner", role: "Planning specialist", goal: "Plan work", tier: "reasoning", scope: "global" },
|
|
188
|
+
{ name: "Code-Reviewer", role: "Review specialist", goal: "Review code", tier: "coding", scope: "project" },
|
|
140
189
|
];
|
|
141
190
|
expect(findAgent(definitions, "planner")).toBe(definitions[0]);
|
|
142
191
|
expect(findAgent(definitions, "CODE-REVIEWER")).toBe(definitions[1]);
|
|
143
192
|
});
|
|
193
|
+
it("findAgent() resolves unique display names and nicknames", () => {
|
|
194
|
+
const definitions = [
|
|
195
|
+
{
|
|
196
|
+
name: "tdd",
|
|
197
|
+
displayName: "Malcolm",
|
|
198
|
+
nicknameCandidates: ["Malcolm Wilkerson"],
|
|
199
|
+
role: "TDD specialist",
|
|
200
|
+
goal: "Write tests first",
|
|
201
|
+
tier: "reasoning",
|
|
202
|
+
scope: "global",
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
name: "coder",
|
|
206
|
+
displayName: "Reese",
|
|
207
|
+
role: "Coding specialist",
|
|
208
|
+
goal: "Implement code",
|
|
209
|
+
tier: "coding",
|
|
210
|
+
scope: "global",
|
|
211
|
+
},
|
|
212
|
+
];
|
|
213
|
+
expect(findAgent(definitions, "malcolm")).toBe(definitions[0]);
|
|
214
|
+
expect(findAgent(definitions, "Malcolm Wilkerson")).toBe(definitions[0]);
|
|
215
|
+
expect(findAgent(definitions, "reese")).toBe(definitions[1]);
|
|
216
|
+
});
|
|
217
|
+
it("findAgent() does not resolve ambiguous nicknames", () => {
|
|
218
|
+
const definitions = [
|
|
219
|
+
{
|
|
220
|
+
name: "reviewer-one",
|
|
221
|
+
displayName: "Reviewer",
|
|
222
|
+
role: "Review specialist",
|
|
223
|
+
goal: "Review code",
|
|
224
|
+
tier: "reasoning",
|
|
225
|
+
scope: "global",
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
name: "reviewer-two",
|
|
229
|
+
nicknameCandidates: ["Reviewer"],
|
|
230
|
+
role: "Second review specialist",
|
|
231
|
+
goal: "Review code",
|
|
232
|
+
tier: "reasoning",
|
|
233
|
+
scope: "global",
|
|
234
|
+
},
|
|
235
|
+
];
|
|
236
|
+
expect(findAgent(definitions, "Reviewer")).toBeUndefined();
|
|
237
|
+
});
|
|
144
238
|
it("findAgent() returns undefined for unknown name", () => {
|
|
145
239
|
const definitions = [
|
|
146
|
-
{ name: "Planner", role: "Planning specialist", scope: "global" },
|
|
240
|
+
{ name: "Planner", role: "Planning specialist", goal: "Plan work", tier: "reasoning", scope: "global" },
|
|
147
241
|
];
|
|
148
242
|
expect(findAgent(definitions, "unknown")).toBeUndefined();
|
|
149
243
|
});
|