agency-lang 0.6.4 → 0.7.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/dist/lib/agents/agency-agent/agent.agency +595 -43
- package/dist/lib/agents/agency-agent/agent.js +5134 -2060
- package/dist/lib/agents/agency-agent/images/images.js +36 -15
- package/dist/lib/agents/agency-agent/lib/attachments.agency +115 -0
- package/dist/lib/agents/agency-agent/lib/attachments.js +791 -0
- package/dist/lib/agents/agency-agent/lib/config.agency +2 -0
- package/dist/lib/agents/agency-agent/lib/config.js +47 -15
- package/dist/lib/agents/agency-agent/lib/defaultPolicy.agency +28 -1
- package/dist/lib/agents/agency-agent/lib/defaultPolicy.js +64 -16
- package/dist/lib/agents/agency-agent/lib/modelFilters.agency +29 -0
- package/dist/lib/agents/agency-agent/lib/modelFilters.js +353 -0
- package/dist/lib/agents/agency-agent/lib/models.agency +214 -30
- package/dist/lib/agents/agency-agent/lib/models.js +1296 -278
- package/dist/lib/agents/agency-agent/lib/resolution.agency +191 -0
- package/dist/lib/agents/agency-agent/lib/resolution.js +1538 -0
- package/dist/lib/agents/agency-agent/lib/search.agency +471 -0
- package/dist/lib/agents/agency-agent/lib/search.js +2647 -0
- package/dist/lib/agents/agency-agent/lib/settings.agency +147 -0
- package/dist/lib/agents/agency-agent/lib/settings.js +956 -0
- package/dist/lib/agents/agency-agent/lib/slots.agency +34 -0
- package/dist/lib/agents/agency-agent/lib/slots.js +602 -0
- package/dist/lib/agents/agency-agent/lib/utils.js +38 -21
- package/dist/lib/agents/agency-agent/prompts/codeSample.agency +8 -4
- package/dist/lib/agents/agency-agent/prompts/codeSample.js +77 -45
- package/dist/lib/agents/agency-agent/prompts/design.md +13 -7
- package/dist/lib/agents/agency-agent/shared.agency +187 -27
- package/dist/lib/agents/agency-agent/shared.js +1399 -148
- package/dist/lib/agents/agency-agent/subagents/code.agency +46 -15
- package/dist/lib/agents/agency-agent/subagents/code.js +88 -48
- package/dist/lib/agents/agency-agent/subagents/explorer.agency +4 -2
- package/dist/lib/agents/agency-agent/subagents/explorer.js +57 -43
- package/dist/lib/agents/agency-agent/subagents/oracle.agency +4 -2
- package/dist/lib/agents/agency-agent/subagents/oracle.js +57 -43
- package/dist/lib/agents/agency-agent/subagents/research.agency +9 -10
- package/dist/lib/agents/agency-agent/subagents/research.js +55 -39
- package/dist/lib/agents/agency-agent/subagents/review.js +41 -24
- package/dist/lib/agents/agency-agent/subagents/shell.js +446 -0
- package/dist/lib/agents/agency-agent/tests/agentTurn.agency +222 -1
- package/dist/lib/agents/agency-agent/tests/agentTurn.js +2303 -30
- package/dist/lib/agents/agency-agent/tests/agentTurn.test.json +17 -1
- package/dist/lib/agents/agency-agent/tests/attachments.agency +187 -0
- package/dist/lib/agents/agency-agent/tests/attachments.js +3736 -0
- package/dist/lib/agents/agency-agent/tests/attachments.test.json +254 -0
- package/dist/lib/agents/agency-agent/tests/attachmentsTurn.agency +65 -0
- package/dist/lib/agents/agency-agent/tests/attachmentsTurn.js +1032 -0
- package/dist/lib/agents/agency-agent/tests/attachmentsTurn.test.json +110 -0
- package/dist/lib/agents/agency-agent/tests/execPolicy.js +47 -25
- package/dist/lib/agents/agency-agent/tests/gitPolicy.agency +53 -0
- package/dist/lib/agents/agency-agent/tests/gitPolicy.js +694 -0
- package/dist/lib/agents/agency-agent/tests/gitPolicy.test.json +7 -0
- package/dist/lib/agents/agency-agent/tests/imageTool.agency +51 -0
- package/dist/lib/agents/agency-agent/tests/imageTool.js +1111 -0
- package/dist/lib/agents/agency-agent/tests/imageTool.test.json +81 -0
- package/dist/lib/agents/agency-agent/tests/modelFilters.agency +32 -0
- package/dist/lib/agents/agency-agent/tests/modelFilters.js +723 -0
- package/dist/lib/agents/agency-agent/tests/modelFilters.test.json +7 -0
- package/dist/lib/agents/agency-agent/tests/models.agency +114 -0
- package/dist/lib/agents/agency-agent/tests/models.js +2143 -0
- package/dist/lib/agents/agency-agent/tests/models.test.json +49 -0
- package/dist/lib/agents/agency-agent/tests/resolution.agency +184 -0
- package/dist/lib/agents/agency-agent/tests/resolution.js +1498 -0
- package/dist/lib/agents/agency-agent/tests/resolution.test.json +13 -0
- package/dist/lib/agents/agency-agent/tests/search.agency +101 -0
- package/dist/lib/agents/agency-agent/tests/search.js +2095 -0
- package/dist/lib/agents/agency-agent/tests/search.test.json +19 -0
- package/dist/lib/agents/agency-agent/tests/settings.agency +87 -0
- package/dist/lib/agents/agency-agent/tests/settings.js +978 -0
- package/dist/lib/agents/agency-agent/tests/settings.test.json +26 -0
- package/dist/lib/agents/agency-agent/tests/slots.agency +22 -0
- package/dist/lib/agents/agency-agent/tests/slots.js +648 -0
- package/dist/lib/agents/agency-agent/tests/slots.test.json +10 -0
- package/dist/lib/agents/agency-agent/tests/toolWiring.js +41 -15
- package/dist/lib/agents/agency-agent/tests/turnFailure.agency +35 -0
- package/dist/lib/agents/agency-agent/tests/turnFailure.js +694 -0
- package/dist/lib/agents/agency-agent/tests/turnFailure.test.json +34 -0
- package/dist/lib/agents/docs/cli/cli/editor-integration.md +1 -1
- package/dist/lib/agents/docs/cli/cli/local.md +92 -0
- package/dist/lib/agents/docs/cli/cli/models.md +63 -0
- package/dist/lib/agents/docs/cli/cli/optimize.md +33 -1
- package/dist/lib/agents/docs/cli/cli/run.md +0 -29
- package/dist/lib/agents/docs/cli/editor-integration.md +1 -1
- package/dist/lib/agents/docs/cli/local.md +92 -0
- package/dist/lib/agents/docs/cli/models.md +63 -0
- package/dist/lib/agents/docs/cli/optimize.md +33 -1
- package/dist/lib/agents/docs/cli/run.md +0 -29
- package/dist/lib/agents/docs/guide/agency-config-file.md +205 -3
- package/dist/lib/agents/docs/guide/agency-packages.md +54 -0
- package/dist/lib/agents/docs/guide/agency-stdlib.md +14 -0
- package/dist/lib/agents/docs/guide/agency-vs-typescript.md +33 -0
- package/dist/lib/agents/docs/guide/attachments.md +56 -0
- package/dist/lib/agents/docs/guide/basic-syntax.md +204 -72
- package/dist/lib/agents/docs/guide/blocks.md +64 -34
- package/dist/lib/agents/docs/guide/build-integration.md +99 -0
- package/dist/lib/agents/docs/{appendix/appendix → guide}/builtins.md +27 -4
- package/dist/lib/agents/docs/{appendix/appendix → guide}/callbacks.md +55 -33
- package/dist/lib/agents/docs/guide/checkpointing.md +56 -27
- package/dist/lib/agents/docs/guide/cli-args.md +1 -1
- package/dist/lib/agents/docs/guide/common-functions.md +36 -0
- package/dist/lib/agents/docs/guide/compiling-and-running.md +62 -0
- package/dist/lib/agents/docs/guide/concurrency.md +49 -92
- package/dist/lib/agents/docs/guide/cross-thread-context.md +5 -7
- package/dist/lib/agents/docs/guide/custom-providers.md +195 -0
- package/dist/lib/agents/docs/guide/debugging.md +67 -0
- package/dist/lib/agents/docs/guide/developer-tools.md +90 -0
- package/dist/lib/agents/docs/guide/effects-and-raises.md +73 -92
- package/dist/lib/agents/docs/guide/effects.md +100 -0
- package/dist/lib/agents/docs/guide/error-handling.md +56 -44
- package/dist/lib/agents/docs/guide/exercise-1.md +32 -0
- package/dist/lib/agents/docs/guide/functions.md +71 -10
- package/dist/lib/agents/docs/guide/getting-started.md +5 -12
- package/dist/lib/agents/docs/guide/global-var-initialization.md +70 -0
- package/dist/lib/agents/docs/guide/global-vs-static.md +29 -34
- package/dist/lib/agents/docs/guide/guards.md +57 -108
- package/dist/lib/agents/docs/guide/guide/agency-config-file.md +205 -3
- package/dist/lib/agents/docs/guide/guide/agency-packages.md +54 -0
- package/dist/lib/agents/docs/guide/guide/agency-stdlib.md +14 -0
- package/dist/lib/agents/docs/guide/guide/agency-vs-typescript.md +33 -0
- package/dist/lib/agents/docs/guide/guide/attachments.md +56 -0
- package/dist/lib/agents/docs/guide/guide/basic-syntax.md +204 -72
- package/dist/lib/agents/docs/guide/guide/blocks.md +64 -34
- package/dist/lib/agents/docs/guide/guide/build-integration.md +99 -0
- package/dist/lib/agents/docs/{appendix → guide/guide}/builtins.md +27 -4
- package/dist/lib/agents/docs/{appendix → guide/guide}/callbacks.md +55 -33
- package/dist/lib/agents/docs/guide/guide/checkpointing.md +56 -27
- package/dist/lib/agents/docs/guide/guide/cli-args.md +1 -1
- package/dist/lib/agents/docs/guide/guide/common-functions.md +36 -0
- package/dist/lib/agents/docs/guide/guide/compiling-and-running.md +62 -0
- package/dist/lib/agents/docs/guide/guide/concurrency.md +49 -92
- package/dist/lib/agents/docs/guide/guide/cross-thread-context.md +5 -7
- package/dist/lib/agents/docs/guide/guide/custom-providers.md +195 -0
- package/dist/lib/agents/docs/guide/guide/debugging.md +67 -0
- package/dist/lib/agents/docs/guide/guide/developer-tools.md +90 -0
- package/dist/lib/agents/docs/guide/guide/effects-and-raises.md +73 -92
- package/dist/lib/agents/docs/guide/guide/effects.md +100 -0
- package/dist/lib/agents/docs/guide/guide/error-handling.md +56 -44
- package/dist/lib/agents/docs/guide/guide/exercise-1.md +32 -0
- package/dist/lib/agents/docs/guide/guide/functions.md +71 -10
- package/dist/lib/agents/docs/guide/guide/getting-started.md +5 -12
- package/dist/lib/agents/docs/guide/guide/global-var-initialization.md +70 -0
- package/dist/lib/agents/docs/guide/guide/global-vs-static.md +29 -34
- package/dist/lib/agents/docs/guide/guide/guards.md +57 -108
- package/dist/lib/agents/docs/guide/guide/handlers.md +109 -205
- package/dist/lib/agents/docs/guide/guide/image-generation.md +113 -0
- package/dist/lib/agents/docs/guide/guide/imports-and-packages.md +35 -95
- package/dist/lib/agents/docs/guide/guide/interrupts-from-typescript.md +84 -0
- package/dist/lib/agents/docs/guide/guide/interrupts-part-2.md +54 -0
- package/dist/lib/agents/docs/guide/guide/interrupts.md +98 -58
- package/dist/lib/agents/docs/guide/guide/llm-part-2.md +111 -0
- package/dist/lib/agents/docs/guide/guide/llm.md +53 -124
- package/dist/lib/agents/docs/guide/guide/memory.md +262 -249
- package/dist/lib/agents/docs/guide/guide/message-threads.md +111 -0
- package/dist/lib/agents/docs/guide/guide/nodes.md +32 -17
- package/dist/lib/agents/docs/guide/guide/observability.md +11 -4
- package/dist/lib/agents/docs/guide/guide/partial-application.md +40 -132
- package/dist/lib/agents/docs/guide/guide/pattern-matching.md +216 -43
- package/dist/lib/agents/docs/guide/guide/policies.md +11 -4
- package/dist/lib/agents/docs/guide/guide/schemas.md +22 -9
- package/dist/lib/agents/docs/guide/guide/state-isolation.md +139 -0
- package/dist/lib/agents/docs/guide/guide/streaming.md +28 -0
- package/dist/lib/agents/docs/guide/guide/tags.md +72 -0
- package/dist/lib/agents/docs/guide/guide/testing.md +167 -7
- package/dist/lib/agents/docs/guide/guide/troubleshooting.md +2 -53
- package/dist/lib/agents/docs/{appendix/appendix → guide/guide}/ts-helpers.md +48 -0
- package/dist/lib/agents/docs/guide/guide/ts-interop.md +16 -129
- package/dist/lib/agents/docs/guide/guide/type-validation.md +30 -172
- package/dist/lib/agents/docs/guide/guide/types.md +69 -84
- package/dist/lib/agents/docs/guide/guide/unused.md +178 -0
- package/dist/lib/agents/docs/guide/guide/unused2.md +258 -0
- package/dist/lib/agents/docs/guide/guide/value-parameterized-types.md +186 -0
- package/dist/lib/agents/docs/guide/guide/vscode-extension.md +33 -0
- package/dist/lib/agents/docs/guide/guide/why-agency.md +323 -0
- package/dist/lib/agents/docs/guide/handlers.md +109 -205
- package/dist/lib/agents/docs/guide/image-generation.md +113 -0
- package/dist/lib/agents/docs/guide/imports-and-packages.md +35 -95
- package/dist/lib/agents/docs/guide/interrupts-from-typescript.md +84 -0
- package/dist/lib/agents/docs/guide/interrupts-part-2.md +54 -0
- package/dist/lib/agents/docs/guide/interrupts.md +98 -58
- package/dist/lib/agents/docs/guide/llm-part-2.md +111 -0
- package/dist/lib/agents/docs/guide/llm.md +53 -124
- package/dist/lib/agents/docs/guide/memory.md +262 -249
- package/dist/lib/agents/docs/guide/message-threads.md +111 -0
- package/dist/lib/agents/docs/guide/nodes.md +32 -17
- package/dist/lib/agents/docs/guide/observability.md +11 -4
- package/dist/lib/agents/docs/guide/partial-application.md +40 -132
- package/dist/lib/agents/docs/guide/pattern-matching.md +216 -43
- package/dist/lib/agents/docs/guide/policies.md +11 -4
- package/dist/lib/agents/docs/guide/schemas.md +22 -9
- package/dist/lib/agents/docs/guide/state-isolation.md +139 -0
- package/dist/lib/agents/docs/guide/streaming.md +28 -0
- package/dist/lib/agents/docs/guide/tags.md +72 -0
- package/dist/lib/agents/docs/guide/testing.md +167 -7
- package/dist/lib/agents/docs/guide/troubleshooting.md +2 -53
- package/dist/lib/agents/docs/{appendix → guide}/ts-helpers.md +48 -0
- package/dist/lib/agents/docs/guide/ts-interop.md +16 -129
- package/dist/lib/agents/docs/guide/type-validation.md +30 -172
- package/dist/lib/agents/docs/guide/types.md +69 -84
- package/dist/lib/agents/docs/guide/unused.md +178 -0
- package/dist/lib/agents/docs/guide/unused2.md +258 -0
- package/dist/lib/agents/docs/guide/value-parameterized-types.md +186 -0
- package/dist/lib/agents/docs/guide/vscode-extension.md +33 -0
- package/dist/lib/agents/docs/guide/why-agency.md +323 -0
- package/dist/lib/agents/eval/goalJudge.js +35 -14
- package/dist/lib/agents/eval/judge.js +35 -14
- package/dist/lib/agents/eval/judgePairwise.agency +2 -2
- package/dist/lib/agents/eval/judgePairwise.js +35 -14
- package/dist/lib/agents/optimize/gepaReflect.js +35 -14
- package/dist/lib/agents/optimize/mutatePrompt.agency +2 -0
- package/dist/lib/agents/optimize/mutatePrompt.js +38 -15
- package/dist/lib/agents/policy/agent.agency +2 -2
- package/dist/lib/agents/policy/agent.js +94 -58
- package/dist/lib/agents/review/agent.js +41 -19
- package/dist/lib/backends/agencyGenerator.d.ts +14 -2
- package/dist/lib/backends/agencyGenerator.js +158 -53
- package/dist/lib/backends/agencyGenerator.matchBlock.test.js +106 -0
- package/dist/lib/backends/agencyGenerator.test.js +148 -0
- package/dist/lib/backends/effectDeclarationFormat.test.d.ts +1 -0
- package/dist/lib/backends/effectDeclarationFormat.test.js +32 -0
- package/dist/lib/backends/llmAttachmentCodegen.test.d.ts +1 -0
- package/dist/lib/backends/llmAttachmentCodegen.test.js +24 -0
- package/dist/lib/backends/llmNamedArgsCodegen.test.d.ts +1 -0
- package/dist/lib/backends/llmNamedArgsCodegen.test.js +40 -0
- package/dist/lib/backends/providerModules.codegen.test.d.ts +1 -0
- package/dist/lib/backends/{anthropicApiKey.codegen.test.js → providerModules.codegen.test.js} +12 -15
- package/dist/lib/backends/smoltalkDefaults.codegen.test.d.ts +1 -0
- package/dist/lib/backends/smoltalkDefaults.codegen.test.js +65 -0
- package/dist/lib/backends/typescriptBuilder.d.ts +82 -0
- package/dist/lib/backends/typescriptBuilder.integration.test.js +94 -4
- package/dist/lib/backends/typescriptBuilder.js +499 -158
- package/dist/lib/backends/typescriptGenerator/typeToString.js +8 -2
- package/dist/lib/backends/typescriptGenerator/typeToZodSchema.js +25 -28
- package/dist/lib/backends/typescriptGenerator/typeToZodSchema.test.js +73 -0
- package/dist/lib/cli/commands.d.ts +28 -0
- package/dist/lib/cli/commands.js +53 -4
- package/dist/lib/cli/doc.js +19 -0
- package/dist/lib/cli/doc.test.js +27 -1
- package/dist/lib/cli/eval/run.d.ts +18 -1
- package/dist/lib/cli/eval/run.js +55 -24
- package/dist/lib/cli/eval/run.workdir.test.d.ts +1 -0
- package/dist/lib/cli/eval/run.workdir.test.js +111 -0
- package/dist/lib/cli/fetchMockResolve.d.ts +6 -0
- package/dist/lib/cli/fetchMockResolve.js +51 -0
- package/dist/lib/cli/fetchMockResolve.test.d.ts +1 -0
- package/dist/lib/cli/fetchMockResolve.test.js +36 -0
- package/dist/lib/cli/hostedModels.d.ts +10 -0
- package/dist/lib/cli/hostedModels.js +61 -0
- package/dist/lib/cli/hostedModels.test.d.ts +1 -0
- package/dist/lib/cli/hostedModels.test.js +105 -0
- package/dist/lib/cli/local.d.ts +19 -0
- package/dist/lib/cli/local.js +109 -0
- package/dist/lib/cli/local.test.d.ts +1 -0
- package/dist/lib/cli/local.test.js +50 -0
- package/dist/lib/cli/pack.test.js +18 -0
- package/dist/lib/cli/precompile.d.ts +22 -0
- package/dist/lib/cli/precompile.js +125 -0
- package/dist/lib/cli/precompile.test.d.ts +1 -0
- package/dist/lib/cli/precompile.test.js +172 -0
- package/dist/lib/cli/test.js +55 -5
- package/dist/lib/cli/util.d.ts +8 -2
- package/dist/lib/cli/util.js +23 -6
- package/dist/lib/compiler/compile.js +5 -1
- package/dist/lib/compiler/compile.test.js +54 -1
- package/dist/lib/compiler/compileClosure.js +8 -9
- package/dist/lib/compiler/typecheck.js +10 -3
- package/dist/lib/config.d.ts +114 -6
- package/dist/lib/config.js +39 -3
- package/dist/lib/config.modelAliases.test.d.ts +1 -0
- package/dist/lib/config.modelAliases.test.js +11 -0
- package/dist/lib/config.providerModules.test.d.ts +1 -0
- package/dist/lib/config.providerModules.test.js +16 -0
- package/dist/lib/config.test.js +12 -0
- package/dist/lib/constants.d.ts +12 -0
- package/dist/lib/constants.js +12 -0
- package/dist/lib/effectDeclCollection.test.d.ts +1 -0
- package/dist/lib/effectDeclCollection.test.js +56 -0
- package/dist/lib/eval/runArtifacts.js +4 -10
- package/dist/lib/eval/runArtifacts.test.js +10 -22
- package/dist/lib/eval/runEvalInput.d.ts +11 -3
- package/dist/lib/eval/runEvalInput.js +16 -1
- package/dist/lib/eval/runTypes.d.ts +0 -4
- package/dist/lib/eval/runWorkdir.d.ts +25 -0
- package/dist/lib/eval/runWorkdir.js +46 -0
- package/dist/lib/eval/runWorkdir.test.d.ts +1 -0
- package/dist/lib/eval/runWorkdir.test.js +42 -0
- package/dist/lib/importPaths.d.ts +31 -1
- package/dist/lib/importPaths.js +88 -32
- package/dist/lib/importPaths.test.js +47 -4
- package/dist/lib/ir/builders.d.ts +6 -1
- package/dist/lib/ir/builders.js +3 -0
- package/dist/lib/ir/prettyPrint.js +31 -6
- package/dist/lib/ir/prettyPrint.test.js +70 -7
- package/dist/lib/ir/tsIR.d.ts +12 -2
- package/dist/lib/logsViewer/render.js +2 -0
- package/dist/lib/logsViewer/summary.js +13 -0
- package/dist/lib/logsViewer/summary.test.js +6 -0
- package/dist/lib/logsViewer/tree.js +38 -0
- package/dist/lib/logsViewer/tree.test.js +19 -0
- package/dist/lib/lowering/loweringError.d.ts +10 -0
- package/dist/lib/lowering/loweringError.js +13 -0
- package/dist/lib/lowering/patternLowering.ifExpr.test.d.ts +1 -0
- package/dist/lib/lowering/patternLowering.ifExpr.test.js +59 -0
- package/dist/lib/lowering/patternLowering.js +504 -30
- package/dist/lib/lowering/patternLowering.matchExpr.test.d.ts +1 -0
- package/dist/lib/lowering/patternLowering.matchExpr.test.js +572 -0
- package/dist/lib/lowering/patternLowering.test.js +102 -10
- package/dist/lib/lsp/codeAction.js +3 -3
- package/dist/lib/lsp/codeAction.test.js +13 -10
- package/dist/lib/lsp/completion.js +2 -2
- package/dist/lib/lsp/diagnostics.js +11 -4
- package/dist/lib/lsp/diagnostics.test.js +30 -0
- package/dist/lib/matchVal.d.ts +18 -0
- package/dist/lib/matchVal.js +26 -0
- package/dist/lib/optimize/artifacts.js +8 -35
- package/dist/lib/optimize/artifacts.test.js +12 -5
- package/dist/lib/optimize/baseOptimizer.d.ts +15 -9
- package/dist/lib/optimize/baseOptimizer.js +33 -27
- package/dist/lib/optimize/baseOptimizer.test.js +25 -15
- package/dist/lib/optimize/baseOptimizer.workdir.test.js +29 -24
- package/dist/lib/optimize/constraint.d.ts +45 -0
- package/dist/lib/optimize/constraint.js +78 -0
- package/dist/lib/optimize/constraint.test.d.ts +1 -0
- package/dist/lib/optimize/constraint.test.js +133 -0
- package/dist/lib/optimize/grading/scorecard.d.ts +6 -0
- package/dist/lib/optimize/grading/scorecard.js +8 -0
- package/dist/lib/optimize/mutator.js +2 -0
- package/dist/lib/optimize/mutator.test.js +37 -0
- package/dist/lib/optimize/optimizers/example.d.ts +4 -1
- package/dist/lib/optimize/optimizers/example.js +11 -12
- package/dist/lib/optimize/optimizers/example.test.js +2 -2
- package/dist/lib/optimize/optimizers/gepa.d.ts +1 -1
- package/dist/lib/optimize/optimizers/gepa.js +11 -10
- package/dist/lib/optimize/optimizers/gepa.test.js +5 -5
- package/dist/lib/optimize/optimizers/greedyReflective.d.ts +1 -1
- package/dist/lib/optimize/optimizers/greedyReflective.js +8 -7
- package/dist/lib/optimize/optimizers/greedyReflective.test.js +100 -2
- package/dist/lib/optimize/reporter.test.js +2 -0
- package/dist/lib/optimize/sourceMutator.d.ts +8 -4
- package/dist/lib/optimize/sourceMutator.js +63 -13
- package/dist/lib/optimize/sourceMutator.test.js +117 -0
- package/dist/lib/optimize/targets.d.ts +21 -3
- package/dist/lib/optimize/targets.js +119 -10
- package/dist/lib/optimize/targets.test.js +79 -5
- package/dist/lib/optimize/types.d.ts +8 -1
- package/dist/lib/optimize/workspace.d.ts +8 -30
- package/dist/lib/optimize/workspace.js +5 -78
- package/dist/lib/optimize/workspace.test.js +10 -70
- package/dist/lib/parseCache.d.ts +10 -0
- package/dist/lib/parseCache.js +58 -0
- package/dist/lib/parseCache.test.d.ts +1 -0
- package/dist/lib/parseCache.test.js +113 -0
- package/dist/lib/parser.js +27 -2
- package/dist/lib/parsers/dataStructures.test.js +86 -0
- package/dist/lib/parsers/debugMessagesLeak.test.d.ts +1 -0
- package/dist/lib/parsers/debugMessagesLeak.test.js +31 -0
- package/dist/lib/parsers/effectDeclaration.test.d.ts +1 -0
- package/dist/lib/parsers/effectDeclaration.test.js +107 -0
- package/dist/lib/parsers/function.test.js +39 -2
- package/dist/lib/parsers/ifExpression.test.d.ts +1 -0
- package/dist/lib/parsers/ifExpression.test.js +45 -0
- package/dist/lib/parsers/importStatement.test.js +49 -0
- package/dist/lib/parsers/literals.test.js +52 -0
- package/dist/lib/parsers/matchBlock.test.js +298 -59
- package/dist/lib/parsers/parsers.d.ts +21 -2
- package/dist/lib/parsers/parsers.js +232 -100
- package/dist/lib/parsers/pattern.test.js +10 -10
- package/dist/lib/parsers/typeHints.test.js +70 -0
- package/dist/lib/preprocessors/importResolver.d.ts +3 -1
- package/dist/lib/preprocessors/importResolver.js +37 -7
- package/dist/lib/preprocessors/importResolver.test.js +82 -0
- package/dist/lib/preprocessors/injectSchemaArgs.js +1 -2
- package/dist/lib/preprocessors/liftCallbacks.js +1 -1
- package/dist/lib/preprocessors/parallelDesugar.js +3 -2
- package/dist/lib/preprocessors/parallelDesugar.test.js +3 -2
- package/dist/lib/preprocessors/prunePreludeShadows.d.ts +22 -0
- package/dist/lib/preprocessors/prunePreludeShadows.js +55 -0
- package/dist/lib/preprocessors/prunePreludeShadows.test.d.ts +1 -0
- package/dist/lib/preprocessors/prunePreludeShadows.test.js +112 -0
- package/dist/lib/preprocessors/typescriptPreprocessor.core.test.js +25 -0
- package/dist/lib/preprocessors/typescriptPreprocessor.js +7 -5
- package/dist/lib/runtime/__tests__/testHelpers.js +0 -1
- package/dist/lib/runtime/agency.d.ts +3 -1
- package/dist/lib/runtime/agency.js +6 -7
- package/dist/lib/runtime/agencyFunction.js +13 -4
- package/dist/lib/runtime/agencyFunction.test.js +52 -0
- package/dist/lib/runtime/agencyInterrupt.test.js +91 -6
- package/dist/lib/runtime/agencyLlm.d.ts +14 -3
- package/dist/lib/runtime/agencyLlm.js +10 -0
- package/dist/lib/runtime/agencyLlm.test.js +17 -0
- package/dist/lib/runtime/callDepth.d.ts +36 -0
- package/dist/lib/runtime/callDepth.js +76 -0
- package/dist/lib/runtime/callDepth.test.d.ts +1 -0
- package/dist/lib/runtime/callDepth.test.js +67 -0
- package/dist/lib/runtime/callbackForwarding.d.ts +47 -0
- package/dist/lib/runtime/callbackForwarding.js +76 -0
- package/dist/lib/runtime/callbackForwarding.test.d.ts +1 -0
- package/dist/lib/runtime/callbackForwarding.test.js +72 -0
- package/dist/lib/runtime/configOverrides.d.ts +17 -5
- package/dist/lib/runtime/configOverrides.js +28 -6
- package/dist/lib/runtime/configOverrides.test.js +33 -0
- package/dist/lib/runtime/cost.d.ts +10 -0
- package/dist/lib/runtime/cost.js +17 -0
- package/dist/lib/runtime/costTelemetry.d.ts +24 -0
- package/dist/lib/runtime/costTelemetry.js +39 -0
- package/dist/lib/runtime/costTelemetry.test.d.ts +1 -0
- package/dist/lib/runtime/costTelemetry.test.js +92 -0
- package/dist/lib/runtime/deterministicClient.d.ts +9 -2
- package/dist/lib/runtime/deterministicClient.js +21 -1
- package/dist/lib/runtime/deterministicClient.test.js +29 -0
- package/dist/lib/runtime/eq.d.ts +12 -0
- package/dist/lib/runtime/eq.js +14 -0
- package/dist/lib/runtime/eq.test.d.ts +1 -0
- package/dist/lib/runtime/eq.test.js +32 -0
- package/dist/lib/runtime/errors.d.ts +20 -0
- package/dist/lib/runtime/errors.js +23 -0
- package/dist/lib/runtime/errors.test.js +18 -0
- package/dist/lib/runtime/fetchMock.d.ts +12 -0
- package/dist/lib/runtime/fetchMock.js +167 -0
- package/dist/lib/runtime/fetchMock.test.d.ts +1 -0
- package/dist/lib/runtime/fetchMock.test.js +145 -0
- package/dist/lib/runtime/hooks.d.ts +21 -3
- package/dist/lib/runtime/hooks.js +19 -0
- package/dist/lib/runtime/hooks.test.js +39 -2
- package/dist/lib/runtime/image-client.test.d.ts +1 -0
- package/dist/lib/runtime/image-client.test.js +22 -0
- package/dist/lib/runtime/index.d.ts +4 -1
- package/dist/lib/runtime/index.js +3 -1
- package/dist/lib/runtime/interrupts.d.ts +50 -0
- package/dist/lib/runtime/interrupts.js +206 -126
- package/dist/lib/runtime/interrupts.test.js +110 -1
- package/dist/lib/runtime/ipc.configOverrides.test.js +35 -17
- package/dist/lib/runtime/ipc.d.ts +238 -21
- package/dist/lib/runtime/ipc.js +622 -95
- package/dist/lib/runtime/ipc.test.js +453 -2
- package/dist/lib/runtime/llmClient.d.ts +71 -3
- package/dist/lib/runtime/llmClient.hostedTools.test.d.ts +1 -0
- package/dist/lib/runtime/llmClient.hostedTools.test.js +45 -0
- package/dist/lib/runtime/llmClient.js +71 -11
- package/dist/lib/runtime/llmClient.test.d.ts +1 -0
- package/dist/lib/runtime/llmClient.test.js +80 -0
- package/dist/lib/runtime/llmRetry.d.ts +65 -0
- package/dist/lib/runtime/llmRetry.js +158 -0
- package/dist/lib/runtime/llmRetry.test.d.ts +1 -0
- package/dist/lib/runtime/llmRetry.test.js +94 -0
- package/dist/lib/runtime/memory/manager.d.ts +25 -0
- package/dist/lib/runtime/memory/manager.js +115 -14
- package/dist/lib/runtime/memory/manager.test.js +60 -21
- package/dist/lib/runtime/memory/types.d.ts +7 -0
- package/dist/lib/runtime/node.js +10 -1
- package/dist/lib/runtime/prompt.attachments.test.d.ts +1 -0
- package/dist/lib/runtime/prompt.attachments.test.js +41 -0
- package/dist/lib/runtime/prompt.d.ts +65 -2
- package/dist/lib/runtime/prompt.js +276 -31
- package/dist/lib/runtime/prompt.test.js +170 -1
- package/dist/lib/runtime/promptRunner.d.ts +1 -1
- package/dist/lib/runtime/promptRunner.js +1 -1
- package/dist/lib/runtime/providerModules.d.ts +27 -0
- package/dist/lib/runtime/providerModules.js +87 -0
- package/dist/lib/runtime/providerModules.test.d.ts +1 -0
- package/dist/lib/runtime/providerModules.test.js +90 -0
- package/dist/lib/runtime/redactForStatelog.d.ts +20 -0
- package/dist/lib/runtime/redactForStatelog.js +32 -0
- package/dist/lib/runtime/redactForStatelog.test.d.ts +1 -0
- package/dist/lib/runtime/redactForStatelog.test.js +84 -0
- package/dist/lib/runtime/replyAttachments.d.ts +46 -0
- package/dist/lib/runtime/replyAttachments.js +143 -0
- package/dist/lib/runtime/replyAttachments.test.d.ts +1 -0
- package/dist/lib/runtime/replyAttachments.test.js +205 -0
- package/dist/lib/runtime/result.js +8 -0
- package/dist/lib/runtime/revivers/index.js +2 -0
- package/dist/lib/runtime/revivers/taggedReviver.d.ts +8 -0
- package/dist/lib/runtime/revivers/taggedReviver.js +30 -0
- package/dist/lib/runtime/revivers/taggedReviver.test.d.ts +1 -0
- package/dist/lib/runtime/revivers/taggedReviver.test.js +42 -0
- package/dist/lib/runtime/runBatch.js +33 -16
- package/dist/lib/runtime/runBatch.test.js +62 -0
- package/dist/lib/runtime/runner.d.ts +26 -4
- package/dist/lib/runtime/runner.js +125 -49
- package/dist/lib/runtime/runner.test.js +217 -1
- package/dist/lib/runtime/simpleOpenAIClient.js +1 -1
- package/dist/lib/runtime/state/context.d.ts +22 -12
- package/dist/lib/runtime/state/context.js +43 -14
- package/dist/lib/runtime/state/context.providerModules.test.d.ts +1 -0
- package/dist/lib/runtime/state/context.providerModules.test.js +38 -0
- package/dist/lib/runtime/state/globalStore.d.ts +42 -0
- package/dist/lib/runtime/state/globalStore.js +187 -2
- package/dist/lib/runtime/state/globalStore.tags.test.d.ts +1 -0
- package/dist/lib/runtime/state/globalStore.tags.test.js +211 -0
- package/dist/lib/runtime/state/stateStack.d.ts +34 -0
- package/dist/lib/runtime/state/stateStack.js +46 -0
- package/dist/lib/runtime/state/tagSymbol.d.ts +6 -0
- package/dist/lib/runtime/state/tagSymbol.js +49 -0
- package/dist/lib/runtime/state/tagSymbol.test.d.ts +1 -0
- package/dist/lib/runtime/state/tagSymbol.test.js +60 -0
- package/dist/lib/runtime/streaming.d.ts +7 -2
- package/dist/lib/runtime/streaming.js +31 -8
- package/dist/lib/runtime/subprocess-bootstrap.js +90 -35
- package/dist/lib/runtime/subprocessRunInfo.d.ts +46 -0
- package/dist/lib/runtime/subprocessRunInfo.js +53 -0
- package/dist/lib/runtime/subprocessRunInfo.test.d.ts +1 -0
- package/dist/lib/runtime/subprocessRunInfo.test.js +32 -0
- package/dist/lib/runtime/topsortCycleErrors.test.js +69 -0
- package/dist/lib/runtime/utils.d.ts +16 -2
- package/dist/lib/runtime/utils.js +13 -4
- package/dist/lib/runtime/utils.test.js +27 -0
- package/dist/lib/statelogClient.d.ts +40 -1
- package/dist/lib/statelogClient.js +98 -1
- package/dist/lib/statelogClient.redaction.test.d.ts +1 -0
- package/dist/lib/statelogClient.redaction.test.js +131 -0
- package/dist/lib/statelogClient.test.js +13 -0
- package/dist/lib/stdlib/abortable.d.ts +6 -0
- package/dist/lib/stdlib/abortable.js +26 -1
- package/dist/lib/stdlib/agency.d.ts +7 -2
- package/dist/lib/stdlib/agency.js +17 -13
- package/dist/lib/stdlib/agencyEval.js +7 -1
- package/dist/lib/stdlib/args.d.ts +4 -1
- package/dist/lib/stdlib/args.js +68 -0
- package/dist/lib/stdlib/builtins.d.ts +2 -1
- package/dist/lib/stdlib/builtins.js +22 -13
- package/dist/lib/stdlib/cli.d.ts +65 -0
- package/dist/lib/stdlib/cli.js +217 -39
- package/dist/lib/stdlib/git.d.ts +29 -0
- package/dist/lib/stdlib/git.js +80 -0
- package/dist/lib/stdlib/gitCore.d.ts +132 -0
- package/dist/lib/stdlib/gitCore.js +231 -0
- package/dist/lib/stdlib/gitParse.d.ts +17 -0
- package/dist/lib/stdlib/gitParse.js +259 -0
- package/dist/lib/stdlib/http.d.ts +5 -4
- package/dist/lib/stdlib/http.js +42 -1
- package/dist/lib/stdlib/image.d.ts +7 -0
- package/dist/lib/stdlib/image.js +80 -0
- package/dist/lib/stdlib/layout/ansi.js +35 -3
- package/dist/lib/stdlib/layout/axis.js +14 -5
- package/dist/lib/stdlib/layout/barchart.js +5 -5
- package/dist/lib/stdlib/layout/block.js +2 -2
- package/dist/lib/stdlib/layout/border.js +2 -2
- package/dist/lib/stdlib/layout/box.js +12 -4
- package/dist/lib/stdlib/layout/nodes.d.ts +0 -1
- package/dist/lib/stdlib/layout/nodes.js +40 -17
- package/dist/lib/stdlib/layout/render.js +7 -3
- package/dist/lib/stdlib/layout/sizing.d.ts +1 -0
- package/dist/lib/stdlib/layout/sizing.js +1 -1
- package/dist/lib/stdlib/layout/table.js +11 -11
- package/dist/lib/stdlib/layout.js +1 -1
- package/dist/lib/stdlib/llm.d.ts +54 -1
- package/dist/lib/stdlib/llm.js +104 -0
- package/dist/lib/stdlib/localModels.d.ts +209 -0
- package/dist/lib/stdlib/localModels.js +904 -0
- package/dist/lib/stdlib/mediaPathScan.d.ts +31 -0
- package/dist/lib/stdlib/mediaPathScan.js +79 -0
- package/dist/lib/stdlib/providers/llama-cpp.mjs +79 -0
- package/dist/lib/stdlib/providers/llamaModelConfig.d.ts +7 -0
- package/dist/lib/stdlib/providers/llamaModelConfig.js +7 -0
- package/dist/lib/stdlib/search.d.ts +7 -0
- package/dist/lib/stdlib/search.js +40 -0
- package/dist/lib/stdlib/shell.d.ts +1 -1
- package/dist/lib/stdlib/shell.js +4 -2
- package/dist/lib/stdlib/tag.d.ts +17 -0
- package/dist/lib/stdlib/tag.js +49 -0
- package/dist/lib/stdlib/thread.d.ts +38 -3
- package/dist/lib/stdlib/thread.js +71 -2
- package/dist/lib/stdlib/threads.d.ts +12 -0
- package/dist/lib/stdlib/threads.js +48 -17
- package/dist/lib/stdlib/version.d.ts +1 -1
- package/dist/lib/stdlib/version.js +1 -1
- package/dist/lib/symbolTable.d.ts +10 -1
- package/dist/lib/symbolTable.js +27 -7
- package/dist/lib/templates/backends/agency/template.d.ts +1 -1
- package/dist/lib/templates/backends/agency/template.js +1 -1
- package/dist/lib/templates/backends/typescriptGenerator/imports.d.ts +1 -1
- package/dist/lib/templates/backends/typescriptGenerator/imports.js +14 -2
- package/dist/lib/templates/backends/typescriptGenerator/runnerIfElse.d.ts +2 -1
- package/dist/lib/templates/backends/typescriptGenerator/runnerIfElse.js +1 -1
- package/dist/lib/typeChecker/assignability.d.ts +8 -0
- package/dist/lib/typeChecker/assignability.js +26 -4
- package/dist/lib/typeChecker/assignability.test.js +59 -1
- package/dist/lib/typeChecker/attachments.test.d.ts +1 -0
- package/dist/lib/typeChecker/attachments.test.js +45 -0
- package/dist/lib/typeChecker/builtinNamedArgs.test.js +30 -0
- package/dist/lib/typeChecker/builtins.js +134 -40
- package/dist/lib/typeChecker/checker.d.ts +25 -0
- package/dist/lib/typeChecker/checker.js +41 -4
- package/dist/lib/typeChecker/definiteReturns.d.ts +16 -0
- package/dist/lib/typeChecker/definiteReturns.js +52 -0
- package/dist/lib/typeChecker/definiteReturns.test.d.ts +1 -0
- package/dist/lib/typeChecker/definiteReturns.test.js +203 -0
- package/dist/lib/typeChecker/effectPayloadCheck.d.ts +17 -0
- package/dist/lib/typeChecker/effectPayloadCheck.js +181 -0
- package/dist/lib/typeChecker/effectPayloadCheck.test.d.ts +1 -0
- package/dist/lib/typeChecker/effectPayloadCheck.test.js +192 -0
- package/dist/lib/typeChecker/flow.d.ts +131 -0
- package/dist/lib/typeChecker/flow.js +248 -0
- package/dist/lib/typeChecker/flow.test.d.ts +1 -0
- package/dist/lib/typeChecker/flow.test.js +467 -0
- package/dist/lib/typeChecker/flowAssignments.test.d.ts +1 -0
- package/dist/lib/typeChecker/flowAssignments.test.js +84 -0
- package/dist/lib/typeChecker/flowBuilder.d.ts +32 -0
- package/dist/lib/typeChecker/flowBuilder.js +337 -0
- package/dist/lib/typeChecker/flowBuilder.test.d.ts +1 -0
- package/dist/lib/typeChecker/flowBuilder.test.js +215 -0
- package/dist/lib/typeChecker/flowNarrowing.test.d.ts +1 -0
- package/dist/lib/typeChecker/flowNarrowing.test.js +96 -0
- package/dist/lib/typeChecker/handlerBodyInterrupts.test.js +1 -1
- package/dist/lib/typeChecker/handlerParamTyping.d.ts +31 -0
- package/dist/lib/typeChecker/handlerParamTyping.js +108 -0
- package/dist/lib/typeChecker/handlerParamTyping.test.d.ts +1 -0
- package/dist/lib/typeChecker/handlerParamTyping.test.js +379 -0
- package/dist/lib/typeChecker/ifExpression.test.d.ts +1 -0
- package/dist/lib/typeChecker/ifExpression.test.js +49 -0
- package/dist/lib/typeChecker/index.js +43 -3
- package/dist/lib/typeChecker/inference.d.ts +6 -0
- package/dist/lib/typeChecker/inference.js +1 -1
- package/dist/lib/typeChecker/interruptAnalysis.d.ts +9 -0
- package/dist/lib/typeChecker/interruptAnalysis.js +21 -13
- package/dist/lib/typeChecker/literalType.d.ts +9 -0
- package/dist/lib/typeChecker/literalType.js +18 -0
- package/dist/lib/typeChecker/matchArmNarrowing.test.d.ts +1 -0
- package/dist/lib/typeChecker/matchArmNarrowing.test.js +172 -0
- package/dist/lib/typeChecker/matchExhaustiveness.d.ts +9 -0
- package/dist/lib/typeChecker/matchExhaustiveness.js +238 -0
- package/dist/lib/typeChecker/matchExhaustiveness.test.d.ts +1 -0
- package/dist/lib/typeChecker/matchExhaustiveness.test.js +404 -0
- package/dist/lib/typeChecker/matchExprTypes.d.ts +37 -0
- package/dist/lib/typeChecker/matchExprTypes.js +143 -0
- package/dist/lib/typeChecker/matchExpression.test.d.ts +1 -0
- package/dist/lib/typeChecker/matchExpression.test.js +240 -0
- package/dist/lib/typeChecker/memberPathNarrowing.test.d.ts +1 -0
- package/dist/lib/typeChecker/memberPathNarrowing.test.js +419 -0
- package/dist/lib/typeChecker/narrowing.d.ts +113 -0
- package/dist/lib/typeChecker/narrowing.js +396 -0
- package/dist/lib/typeChecker/narrowing.test.d.ts +1 -0
- package/dist/lib/typeChecker/narrowing.test.js +930 -0
- package/dist/lib/typeChecker/neverType.test.d.ts +1 -0
- package/dist/lib/typeChecker/neverType.test.js +19 -0
- package/dist/lib/typeChecker/nullNarrowing.test.d.ts +1 -0
- package/dist/lib/typeChecker/nullNarrowing.test.js +246 -0
- package/dist/lib/typeChecker/nullish.test.d.ts +1 -0
- package/dist/lib/typeChecker/nullish.test.js +16 -0
- package/dist/lib/typeChecker/pathSegments.d.ts +56 -0
- package/dist/lib/typeChecker/pathSegments.js +73 -0
- package/dist/lib/typeChecker/primitiveMembers.d.ts +2 -2
- package/dist/lib/typeChecker/primitiveMembers.js +5 -5
- package/dist/lib/typeChecker/primitives.d.ts +2 -1
- package/dist/lib/typeChecker/primitives.js +2 -1
- package/dist/lib/typeChecker/recordLike.d.ts +18 -0
- package/dist/lib/typeChecker/recordLike.js +27 -0
- package/dist/lib/typeChecker/resolveCall.js +4 -0
- package/dist/lib/typeChecker/resultUnion.d.ts +8 -0
- package/dist/lib/typeChecker/resultUnion.js +43 -0
- package/dist/lib/typeChecker/scope.d.ts +9 -1
- package/dist/lib/typeChecker/scope.js +25 -4
- package/dist/lib/typeChecker/scope.test.js +15 -0
- package/dist/lib/typeChecker/scopeVisibility.test.d.ts +1 -0
- package/dist/lib/typeChecker/scopeVisibility.test.js +138 -0
- package/dist/lib/typeChecker/scopes.d.ts +7 -0
- package/dist/lib/typeChecker/scopes.js +164 -113
- package/dist/lib/typeChecker/strictMemberAccess.test.d.ts +1 -0
- package/dist/lib/typeChecker/strictMemberAccess.test.js +221 -0
- package/dist/lib/typeChecker/synthesizer.js +257 -47
- package/dist/lib/typeChecker/typeCases.d.ts +28 -0
- package/dist/lib/typeChecker/typeCases.js +122 -0
- package/dist/lib/typeChecker/typeCases.test.d.ts +1 -0
- package/dist/lib/typeChecker/typeCases.test.js +150 -0
- package/dist/lib/typeChecker/types.d.ts +26 -0
- package/dist/lib/typeChecker/utils.d.ts +19 -0
- package/dist/lib/typeChecker/utils.js +50 -10
- package/dist/lib/typeChecker.test.js +351 -34
- package/dist/lib/types/dataStructures.d.ts +18 -1
- package/dist/lib/types/effectDeclaration.d.ts +11 -0
- package/dist/lib/types/effectDeclaration.js +1 -0
- package/dist/lib/types/function.d.ts +1 -1
- package/dist/lib/types/function.js +2 -0
- package/dist/lib/types/function.test.d.ts +1 -0
- package/dist/lib/types/function.test.js +11 -0
- package/dist/lib/types/ifElse.d.ts +4 -0
- package/dist/lib/types/importStatement.d.ts +4 -0
- package/dist/lib/types/matchBlock.d.ts +15 -3
- package/dist/lib/types/matchYield.d.ts +16 -0
- package/dist/lib/types/matchYield.js +1 -0
- package/dist/lib/types.d.ts +54 -3
- package/dist/lib/types.js +37 -0
- package/dist/lib/utils/mapBodies.js +1 -1
- package/dist/lib/utils/node.d.ts +30 -0
- package/dist/lib/utils/node.js +160 -3
- package/dist/lib/utils/projectTree.d.ts +13 -0
- package/dist/lib/utils/projectTree.js +42 -0
- package/dist/lib/utils/projectTree.test.d.ts +1 -0
- package/dist/lib/utils/projectTree.test.js +49 -0
- package/dist/lib/utils/termcolors.d.ts +1 -1
- package/dist/lib/utils/termcolors.js +1 -1
- package/dist/scripts/agency.js +27 -0
- package/dist/scripts/genModelHashes.d.ts +10 -0
- package/dist/scripts/genModelHashes.js +88 -0
- package/package.json +4 -2
- package/stdlib/agency/eval.agency +31 -59
- package/stdlib/agency/eval.js +56 -84
- package/stdlib/agency/local.agency +189 -0
- package/stdlib/agency/local.js +1685 -0
- package/stdlib/agency.agency +169 -98
- package/stdlib/agency.js +278 -286
- package/stdlib/agent.agency +69 -71
- package/stdlib/agent.js +352 -51
- package/stdlib/args.agency +30 -53
- package/stdlib/args.js +44 -20
- package/stdlib/array.agency +21 -221
- package/stdlib/array.js +116 -416
- package/stdlib/{keyring.agency → auth/keyring.agency} +17 -17
- package/stdlib/auth/keyring.js +810 -0
- package/stdlib/{oauth.agency → auth/oauth.agency} +24 -27
- package/stdlib/auth/oauth.js +873 -0
- package/stdlib/browser.js +13 -3
- package/stdlib/calendar.agency +29 -88
- package/stdlib/calendar.js +40 -25
- package/stdlib/capabilities.agency +7 -3
- package/stdlib/capabilities.js +41 -18
- package/stdlib/chart.js +21 -10
- package/stdlib/cli.js +139 -6
- package/stdlib/clipboard.agency +19 -2
- package/stdlib/clipboard.js +40 -19
- package/stdlib/concurrency.agency +34 -22
- package/stdlib/concurrency.js +45 -38
- package/stdlib/data/finance/dbnomics.agency +115 -0
- package/stdlib/data/finance/dbnomics.js +934 -0
- package/stdlib/data/finance/edgar.agency +172 -0
- package/stdlib/data/finance/edgar.js +1598 -0
- package/stdlib/data/finance/fred.agency +215 -0
- package/stdlib/data/finance/fred.js +2028 -0
- package/stdlib/data/finance/gdelt.agency +98 -0
- package/stdlib/data/finance/gdelt.js +873 -0
- package/stdlib/data/people/littlesis.agency +322 -0
- package/stdlib/data/people/littlesis.js +3221 -0
- package/stdlib/data/tech/hackernews.agency +344 -0
- package/stdlib/data/tech/hackernews.js +3814 -0
- package/stdlib/data/tech/yc.agency +253 -0
- package/stdlib/data/tech/yc.js +2913 -0
- package/stdlib/date.agency +34 -81
- package/stdlib/date.js +53 -39
- package/stdlib/email.js +13 -3
- package/stdlib/fs.agency +44 -16
- package/stdlib/fs.js +50 -37
- package/stdlib/git.agency +327 -0
- package/stdlib/git.js +3724 -0
- package/stdlib/http.agency +39 -14
- package/stdlib/http.js +39 -27
- package/stdlib/image.agency +44 -0
- package/stdlib/image.js +404 -0
- package/stdlib/imessage.js +13 -3
- package/stdlib/index.agency +318 -116
- package/stdlib/index.js +1762 -517
- package/stdlib/keyring.js +13 -3
- package/stdlib/layout.js +23 -12
- package/stdlib/llm.agency +115 -16
- package/stdlib/llm.js +726 -36
- package/stdlib/markdown.agency +38 -55
- package/stdlib/markdown.js +58 -66
- package/stdlib/math.agency +16 -0
- package/stdlib/math.js +175 -20
- package/stdlib/memory.agency +82 -90
- package/stdlib/memory.js +67 -114
- package/stdlib/{email.agency → messaging/email.agency} +11 -15
- package/stdlib/messaging/email.js +1112 -0
- package/stdlib/{imessage.agency → messaging/imessage.agency} +7 -8
- package/stdlib/messaging/imessage.js +387 -0
- package/stdlib/{sms.agency → messaging/sms.agency} +8 -8
- package/stdlib/messaging/sms.js +429 -0
- package/stdlib/oauth.js +13 -3
- package/stdlib/object.agency +52 -5
- package/stdlib/object.js +409 -26
- package/stdlib/path.agency +29 -4
- package/stdlib/path.js +54 -30
- package/stdlib/policy.agency +115 -198
- package/stdlib/policy.js +212 -154
- package/stdlib/schemas.js +13 -3
- package/stdlib/search.js +225 -6
- package/stdlib/shell.agency +51 -27
- package/stdlib/shell.js +75 -53
- package/stdlib/skills.agency +41 -20
- package/stdlib/skills.js +81 -43
- package/stdlib/sms.js +13 -3
- package/stdlib/speech.agency +42 -24
- package/stdlib/speech.js +46 -42
- package/stdlib/statelog.agency +64 -46
- package/stdlib/statelog.js +165 -66
- package/stdlib/strategy.agency +27 -0
- package/stdlib/strategy.js +158 -20
- package/stdlib/syntax.agency +34 -27
- package/stdlib/syntax.js +46 -46
- package/stdlib/system.agency +62 -23
- package/stdlib/system.js +210 -49
- package/stdlib/table.js +19 -8
- package/stdlib/tag.agency +62 -0
- package/stdlib/tag.js +966 -0
- package/stdlib/thread.agency +282 -67
- package/stdlib/thread.js +1522 -263
- package/stdlib/threads.js +18 -7
- package/stdlib/types.js +13 -3
- package/stdlib/{chart.agency → ui/chart.agency} +41 -48
- package/stdlib/ui/chart.js +993 -0
- package/stdlib/ui/cli.agency +119 -0
- package/stdlib/ui/cli.js +1096 -0
- package/stdlib/{layout.agency → ui/layout.agency} +110 -178
- package/stdlib/ui/layout.js +3740 -0
- package/stdlib/{table.agency → ui/table.agency} +49 -50
- package/stdlib/ui/table.js +1434 -0
- package/stdlib/ui.agency +194 -316
- package/stdlib/ui.js +442 -364
- package/stdlib/validation.agency +197 -0
- package/stdlib/validation.js +1707 -0
- package/stdlib/validators.js +13 -3
- package/stdlib/weather.agency +27 -4
- package/stdlib/weather.js +39 -21
- package/stdlib/web/browser.agency +52 -0
- package/stdlib/web/browser.js +431 -0
- package/stdlib/web/search.agency +101 -0
- package/stdlib/web/search.js +638 -0
- package/stdlib/wikipedia.agency +28 -3
- package/stdlib/wikipedia.js +46 -21
- package/dist/lib/agents/docs/appendix/agency-stdlib.md +0 -25
- package/dist/lib/agents/docs/appendix/agency-vs-typescript.md +0 -14
- package/dist/lib/agents/docs/appendix/appendix/agency-stdlib.md +0 -25
- package/dist/lib/agents/docs/appendix/appendix/agency-vs-typescript.md +0 -14
- package/dist/lib/agents/docs/appendix/appendix/vscode-extension.md +0 -11
- package/dist/lib/agents/docs/appendix/vscode-extension.md +0 -11
- package/dist/lib/agents/docs/guide/agents-101.md +0 -212
- package/dist/lib/agents/docs/guide/execution-model.md +0 -130
- package/dist/lib/agents/docs/guide/guide/agents-101.md +0 -212
- package/dist/lib/agents/docs/guide/guide/execution-model.md +0 -130
- package/dist/lib/agents/docs/guide/guide/message-history-and-threads.md +0 -88
- package/dist/lib/agents/docs/guide/guide/odds-and-ends.md +0 -41
- package/dist/lib/agents/docs/guide/guide/structured-interrupts.md +0 -49
- package/dist/lib/agents/docs/guide/message-history-and-threads.md +0 -88
- package/dist/lib/agents/docs/guide/odds-and-ends.md +0 -41
- package/dist/lib/agents/docs/guide/structured-interrupts.md +0 -49
- package/stdlib/browser.agency +0 -47
- package/stdlib/cli.agency +0 -132
- package/stdlib/schemas.agency +0 -37
- package/stdlib/search.agency +0 -57
- package/stdlib/threads.agency +0 -198
- package/stdlib/types.agency +0 -58
- package/stdlib/validators.agency +0 -150
- /package/dist/lib/agents/docs/{appendix → guide}/advanced-types.md +0 -0
- /package/dist/lib/agents/docs/{appendix/appendix → guide/guide}/advanced-types.md +0 -0
- /package/dist/lib/agents/docs/{appendix/appendix → guide/guide}/schema-parameter-injection.md +0 -0
- /package/dist/lib/agents/docs/{appendix → guide}/schema-parameter-injection.md +0 -0
- /package/dist/lib/backends/{anthropicApiKey.codegen.test.d.ts → agencyGenerator.matchBlock.test.d.ts} +0 -0
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
import { getVersion } from "std::agency"
|
|
2
|
+
import {
|
|
3
|
+
printLocalCatalog,
|
|
4
|
+
localModelsSupported,
|
|
5
|
+
listModelNames,
|
|
6
|
+
} from "std::agency/local"
|
|
2
7
|
import { parseArgs } from "std::args"
|
|
3
|
-
import {
|
|
8
|
+
import { map } from "std::array"
|
|
9
|
+
import {
|
|
10
|
+
clearMessages,
|
|
11
|
+
pushMessage,
|
|
12
|
+
repl,
|
|
13
|
+
clearScreen,
|
|
14
|
+
clearHistory,
|
|
15
|
+
} from "std::ui/cli"
|
|
4
16
|
import { today } from "std::date"
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
17
|
+
import { generateImage } from "std::image"
|
|
18
|
+
import { applyAgentCwd, setAgentCwd } from "std::index"
|
|
19
|
+
import { keys } from "std::object"
|
|
20
|
+
import { basename, dirname } from "std::path"
|
|
21
|
+
import { box, render } from "std::ui/layout"
|
|
22
|
+
import { listHostedModels, hostedModelInfo } from "std::llm"
|
|
23
|
+
import { setMemoryId, disableMemory } from "std::memory"
|
|
8
24
|
import {
|
|
9
25
|
ScopedRuleFields,
|
|
10
26
|
cliPolicyHandler,
|
|
@@ -15,17 +31,42 @@ import { exists } from "std::shell"
|
|
|
15
31
|
import { commandsDir, expandSlash } from "std::skills"
|
|
16
32
|
import { highlight } from "std::syntax"
|
|
17
33
|
import { cwd, env, isTTY, readStdin, setTitle } from "std::system"
|
|
18
|
-
import { getCost, getModelCosts, systemMessage } from "std::thread"
|
|
34
|
+
import { Attachment, attachToReply, getCost, getModelCosts, image, systemMessage } from "std::thread"
|
|
19
35
|
import { chooseOption, ChoiceItem } from "std::ui"
|
|
20
36
|
|
|
21
37
|
import { figs, title } from "./images/images.agency"
|
|
38
|
+
import { detectAttachments, modalityFilter } from "./lib/attachments.agency"
|
|
22
39
|
import { POLICY_PATH, HISTORY_PATH, ALWAYS_FIELDS } from "./lib/config.agency"
|
|
23
40
|
import {
|
|
24
41
|
minimalAutoApprovePolicy,
|
|
25
42
|
recommendedAutoApprovePolicy,
|
|
26
43
|
} from "./lib/defaultPolicy.agency"
|
|
44
|
+
import { filterHostedModels, ModelFilters } from "./lib/modelFilters.agency"
|
|
45
|
+
import { parseModelFlag, knownProviders, Resolved } from "./lib/models.agency"
|
|
46
|
+
import {
|
|
47
|
+
buildLayers,
|
|
48
|
+
resolveAll,
|
|
49
|
+
diffResolved,
|
|
50
|
+
Ctx,
|
|
51
|
+
SlotChange,
|
|
52
|
+
} from "./lib/resolution.agency"
|
|
53
|
+
import {
|
|
54
|
+
configureSearch,
|
|
55
|
+
setSearchBackend,
|
|
56
|
+
getSearchBackend,
|
|
57
|
+
availableBackendItems,
|
|
58
|
+
} from "./lib/search.agency"
|
|
59
|
+
import { getModelSettings, loadSettings } from "./lib/settings.agency"
|
|
27
60
|
import { truncate, formatArgs, formatToolResponse } from "./lib/utils.agency"
|
|
28
|
-
import {
|
|
61
|
+
import {
|
|
62
|
+
configureModels,
|
|
63
|
+
configureLocalModel,
|
|
64
|
+
enableAgentMemory,
|
|
65
|
+
getResolvedSlots,
|
|
66
|
+
applyResolved,
|
|
67
|
+
promoteAll,
|
|
68
|
+
currentProvider,
|
|
69
|
+
} from "./shared.agency"
|
|
29
70
|
import { codeAgent } from "./subagents/code.agency"
|
|
30
71
|
import { explorerAgent } from "./subagents/explorer.agency"
|
|
31
72
|
import { oracleAgent } from "./subagents/oracle.agency"
|
|
@@ -126,13 +167,75 @@ callback("onLLMCallEnd") as data {
|
|
|
126
167
|
}
|
|
127
168
|
}
|
|
128
169
|
|
|
170
|
+
// Map a transient LLM retry reason (an `LLMRetryReason` from the runtime
|
|
171
|
+
// retry layer) to a short, human-facing label. `connectionLost` is the
|
|
172
|
+
// lost-internet / closed-the-laptop case; the rest cover provider hiccups
|
|
173
|
+
// and our own per-call timeout.
|
|
174
|
+
export def retryReasonLabel(reason: string): string {
|
|
175
|
+
if (reason == "connectionLost") {
|
|
176
|
+
return "Connection lost"
|
|
177
|
+
}
|
|
178
|
+
if (reason == "timeout") {
|
|
179
|
+
return "Request timed out"
|
|
180
|
+
}
|
|
181
|
+
if (reason == "streamInterrupted") {
|
|
182
|
+
return "Connection interrupted"
|
|
183
|
+
}
|
|
184
|
+
if (reason == "rateLimit") {
|
|
185
|
+
return "Rate limited"
|
|
186
|
+
}
|
|
187
|
+
if (reason == "overloaded") {
|
|
188
|
+
return "Model overloaded"
|
|
189
|
+
}
|
|
190
|
+
if (reason == "serverError") {
|
|
191
|
+
return "Server error"
|
|
192
|
+
}
|
|
193
|
+
return reason
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// A transient LLM failure (lost connection, timeout, server hiccup) the
|
|
197
|
+
// runtime is about to retry. Surface a dim, one-line heads-up so the user
|
|
198
|
+
// understands the pause instead of staring at a frozen prompt — this is the
|
|
199
|
+
// "lost internet / closed the laptop" experience the abort taxonomy made
|
|
200
|
+
// distinguishable. Gated like the other traces so piped one-shot output
|
|
201
|
+
// stays clean. `attempt` is the 1-based retry number; `maxRetries` is the
|
|
202
|
+
// configured retry budget.
|
|
203
|
+
callback("onLLMRetry") as data {
|
|
204
|
+
if (_showTraces()) {
|
|
205
|
+
pushMessage(
|
|
206
|
+
color.dim(
|
|
207
|
+
"⟳ ${retryReasonLabel(data.reason)} — retrying (${data.attempt}/${data.maxRetries})…",
|
|
208
|
+
),
|
|
209
|
+
)
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Turn a terminal (retries-exhausted) LLM failure into a short, actionable
|
|
214
|
+
// message. The runtime's exhausted-retry error text embeds the reason in
|
|
215
|
+
// parens, e.g. "LLM call failed after 3 attempts (connectionLost): ...". We
|
|
216
|
+
// recognize the transport reasons that mean "the network or model dropped"
|
|
217
|
+
// and give concrete advice; anything else echoes the raw error so nothing
|
|
218
|
+
// is hidden.
|
|
219
|
+
export def formatTurnFailure(errText: string): string {
|
|
220
|
+
if (errText.includes("(connectionLost)") || errText.includes("(streamInterrupted)")) {
|
|
221
|
+
return "⚠ Lost the connection to the model and couldn't recover after retrying.\nCheck your internet connection and try again."
|
|
222
|
+
}
|
|
223
|
+
if (errText.includes("(timeout)")) {
|
|
224
|
+
return "⚠ The model took too long to respond — the request timed out after retrying.\nTry again, perhaps with a smaller request."
|
|
225
|
+
}
|
|
226
|
+
if (errText.includes("(rateLimit)") || errText.includes("(overloaded)") || errText.includes("(serverError)")) {
|
|
227
|
+
return "⚠ The model provider is busy and the request failed after retrying.\nWait a moment and try again."
|
|
228
|
+
}
|
|
229
|
+
return "⚠ The request failed: ${errText}"
|
|
230
|
+
}
|
|
231
|
+
|
|
129
232
|
type ToolCallData = {
|
|
130
233
|
name: string;
|
|
131
234
|
arguments: any
|
|
132
235
|
}
|
|
133
236
|
|
|
134
237
|
type LLMResponse = {
|
|
135
|
-
output
|
|
238
|
+
output?: string;
|
|
136
239
|
toolCalls: ToolCallData[];
|
|
137
240
|
usage: { inputTokens: number; outputTokens: number; totalTokens: number; cachedInputTokens: number };
|
|
138
241
|
cost: { inputCost: number; outputCost: number; cachedInputCost: number; totalCost: number; currency: string };
|
|
@@ -144,7 +247,7 @@ def renderLLMCallResponse(data: LLMResponse): string {
|
|
|
144
247
|
if (data.output != "" && data.output != null && data.output != undefined) {
|
|
145
248
|
response.push(data.output)
|
|
146
249
|
}
|
|
147
|
-
if (data.toolCalls
|
|
250
|
+
if (data.toolCalls.length > 0) {
|
|
148
251
|
for (toolCall in data.toolCalls) {
|
|
149
252
|
response.push(`${toolCall.name}(${formatArgs(toolCall.arguments)})`)
|
|
150
253
|
}
|
|
@@ -184,7 +287,12 @@ def builtinPalette(): Record<string, string> {
|
|
|
184
287
|
return {
|
|
185
288
|
"/exit": "Exit the agent",
|
|
186
289
|
"/clear": "Clear the conversation transcript",
|
|
290
|
+
"/clear-history": "Clear the input history (recall + saved file)",
|
|
187
291
|
"/cost": "Show cumulative LLM cost and tokens",
|
|
292
|
+
"/model": "Switch the model (bare to pick, or slot=model)",
|
|
293
|
+
"/models": "List / filter the hosted model catalog",
|
|
294
|
+
"/local": "Switch to a local model",
|
|
295
|
+
"/search": "Choose the web search backend (hosted / Tavily / Brave / off)",
|
|
188
296
|
"/paste": "Multi-line paste mode (Ctrl+D submits, Ctrl+C cancels)",
|
|
189
297
|
"/help": "Show available slash commands"
|
|
190
298
|
}
|
|
@@ -208,6 +316,136 @@ def mergedPalette(): Record<string, string> {
|
|
|
208
316
|
return out
|
|
209
317
|
}
|
|
210
318
|
|
|
319
|
+
// In-session model selection state. One mutable cell holding the current
|
|
320
|
+
// Session (the pin + per-slot overrides chosen via /model this run). switchModel
|
|
321
|
+
// is pure over this value — it copies, never mutates — so it stays testable.
|
|
322
|
+
export type Session = {
|
|
323
|
+
pin: string;
|
|
324
|
+
slots: Record<string, string>
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
let _session: Session = {
|
|
328
|
+
pin: "",
|
|
329
|
+
slots: {}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/** Apply an in-session model selection. Copies `prior` (never mutates), folds in
|
|
333
|
+
the new spec (bare → pin; slot=model → per-slot), resolves, applies, and returns
|
|
334
|
+
the new session + assignment + the slots that changed (so the caller can react,
|
|
335
|
+
e.g. the cross-provider recall notice). Turn-boundary semantics: takes effect on
|
|
336
|
+
the NEXT turn; no in-flight call is mutated. */
|
|
337
|
+
export def switchModel(
|
|
338
|
+
prior: Session,
|
|
339
|
+
spec: string,
|
|
340
|
+
ctx: Ctx,
|
|
341
|
+
before: Record<string, Resolved>,
|
|
342
|
+
): { session: Session; resolved: Record<string, Resolved>; changes: SlotChange[] } {
|
|
343
|
+
let nextSlots: Record<string, string> = {}
|
|
344
|
+
for (key in Object.keys(prior.slots)) {
|
|
345
|
+
nextSlots[key] = prior.slots[key]
|
|
346
|
+
}
|
|
347
|
+
let next: Session = {
|
|
348
|
+
pin: prior.pin,
|
|
349
|
+
slots: nextSlots
|
|
350
|
+
}
|
|
351
|
+
const parsed = parseModelFlag(spec)
|
|
352
|
+
if (parsed.slot != "" && parsed.slot != "main" && parsed.slot != "reasoning") {
|
|
353
|
+
pushMessage(
|
|
354
|
+
color.red("Unknown model slot '${parsed.slot}'. Valid slots: main, reasoning."),
|
|
355
|
+
)
|
|
356
|
+
return {
|
|
357
|
+
session: prior,
|
|
358
|
+
resolved: before,
|
|
359
|
+
changes: []
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
if (parsed.slot == "") {
|
|
363
|
+
next.pin = parsed.model
|
|
364
|
+
} else {
|
|
365
|
+
next.slots[parsed.slot] = parsed.model
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
// A saved provider (settings.model.provider) means a provider is established,
|
|
369
|
+
// so a unified provider/model spec should not be split during resolution.
|
|
370
|
+
const settings = getModelSettings(loadSettings())
|
|
371
|
+
const providerEstablished = settings.provider != null && settings.provider != ""
|
|
372
|
+
const layers = buildLayers(
|
|
373
|
+
next.pin,
|
|
374
|
+
next.slots,
|
|
375
|
+
"",
|
|
376
|
+
{},
|
|
377
|
+
settings,
|
|
378
|
+
knownProviders(),
|
|
379
|
+
providerEstablished,
|
|
380
|
+
)
|
|
381
|
+
const all = resolveAll(layers, ctx)
|
|
382
|
+
if (isFailure(all)) {
|
|
383
|
+
pushMessage(color.red("Could not switch model: ${all.error}"))
|
|
384
|
+
return {
|
|
385
|
+
session: prior,
|
|
386
|
+
resolved: before,
|
|
387
|
+
changes: []
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
const resolved = promoteAll(all.value)
|
|
391
|
+
applyResolved(resolved)
|
|
392
|
+
return {
|
|
393
|
+
session: next,
|
|
394
|
+
resolved: resolved,
|
|
395
|
+
changes: diffResolved(before, resolved)
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/** React to one resolved-slot change. Phase 1: a `main`-slot provider change
|
|
400
|
+
means the embedding space behind memory changed, so pause memory and warn.
|
|
401
|
+
(std::memory has no tier-2-only toggle yet -- full pause; structured recall
|
|
402
|
+
returns when a selective toggle lands.) Returns true if it emitted the notice. */
|
|
403
|
+
export def reactToSlotChange(change: SlotChange): boolean {
|
|
404
|
+
if (change.slot == "main" && change.before.provider != change.after.provider) {
|
|
405
|
+
pushMessage(
|
|
406
|
+
color.dim(
|
|
407
|
+
"Warning: provider changed - memory is paused until restart (recall would be unreliable).",
|
|
408
|
+
),
|
|
409
|
+
)
|
|
410
|
+
// `with approve`: the agent is deliberately auto-pausing memory on a
|
|
411
|
+
// provider switch, not asking the user — so don't surface an approval prompt.
|
|
412
|
+
disableMemory() with approve
|
|
413
|
+
return true
|
|
414
|
+
}
|
|
415
|
+
return false
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// ChoiceItem list for the model pickers: the hosted catalog, filtered, each
|
|
419
|
+
// labeled with provider + input price for an informed pick.
|
|
420
|
+
export def modelChoiceItems(filters: ModelFilters): ChoiceItem[] {
|
|
421
|
+
let items: ChoiceItem[] = []
|
|
422
|
+
for (model in filterHostedModels(listHostedModels(), filters)) {
|
|
423
|
+
const label = "${model.name} (${model.provider}, $${model.inputCost}/1M in)"
|
|
424
|
+
items.push({
|
|
425
|
+
key: model.name,
|
|
426
|
+
label: label
|
|
427
|
+
})
|
|
428
|
+
}
|
|
429
|
+
return items
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// Parse a `/models [provider]` command line into filters. Bare `/models` (or a
|
|
433
|
+
// trailing-space-only arg) yields no filters; `/models <provider>` narrows to
|
|
434
|
+
// one provider. Extracted from the handler so it is unit-testable.
|
|
435
|
+
export def parseModelsFilters(cmd: string): ModelFilters {
|
|
436
|
+
const prefix = "/models "
|
|
437
|
+
if (!cmd.startsWith(prefix)) {
|
|
438
|
+
return {}
|
|
439
|
+
}
|
|
440
|
+
const arg = cmd.substring(prefix.length).trim()
|
|
441
|
+
if (arg == "") {
|
|
442
|
+
return {}
|
|
443
|
+
}
|
|
444
|
+
return {
|
|
445
|
+
provider: arg
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
211
449
|
// Slash-command + user-message dispatcher invoked by `repl()` for
|
|
212
450
|
// every Enter keystroke. Return `false` to terminate the loop.
|
|
213
451
|
def _runTurn(msg: string): boolean {
|
|
@@ -227,8 +465,30 @@ def _runTurn(msg: string): boolean {
|
|
|
227
465
|
clearMessages()
|
|
228
466
|
return true
|
|
229
467
|
}
|
|
468
|
+
if (trimmed == "/clear-history") {
|
|
469
|
+
clearHistory()
|
|
470
|
+
pushMessage("Input history cleared.")
|
|
471
|
+
return true
|
|
472
|
+
}
|
|
230
473
|
if (trimmed == "/help") {
|
|
231
|
-
pushMessage(
|
|
474
|
+
pushMessage(
|
|
475
|
+
"Commands: /exit, /clear, /clear-history, /cost, /model, /models, /local, /search, /paste, /help",
|
|
476
|
+
)
|
|
477
|
+
return true
|
|
478
|
+
}
|
|
479
|
+
if (trimmed == "/search") {
|
|
480
|
+
const opts = availableBackendItems()
|
|
481
|
+
const choice = chooseOption(
|
|
482
|
+
"Web search backend",
|
|
483
|
+
"Pick how this agent searches the web. Current: ${getSearchBackend()}",
|
|
484
|
+
opts,
|
|
485
|
+
false,
|
|
486
|
+
true,
|
|
487
|
+
)
|
|
488
|
+
if (choice != "" && choice != null && choice != undefined) {
|
|
489
|
+
setSearchBackend(choice)
|
|
490
|
+
pushMessage("Web search backend set to: ${choice}")
|
|
491
|
+
}
|
|
232
492
|
return true
|
|
233
493
|
}
|
|
234
494
|
if (trimmed == "/cost") {
|
|
@@ -252,18 +512,123 @@ def _runTurn(msg: string): boolean {
|
|
|
252
512
|
pushMessage("")
|
|
253
513
|
pushMessage("By model:")
|
|
254
514
|
for (m in byModel) {
|
|
255
|
-
pushMessage(
|
|
515
|
+
pushMessage(
|
|
516
|
+
" ${m.model} ↑${m.inputTokens} ↓${m.outputTokens} $${m.cost.toFixed(4)}",
|
|
517
|
+
)
|
|
256
518
|
}
|
|
257
519
|
}
|
|
258
520
|
return true
|
|
259
521
|
}
|
|
522
|
+
if (trimmed == "/model" || trimmed.startsWith("/model ")) {
|
|
523
|
+
let spec = ""
|
|
524
|
+
if (trimmed != "/model") {
|
|
525
|
+
spec = trimmed.substring(7).trim()
|
|
526
|
+
}
|
|
527
|
+
if (spec == "") {
|
|
528
|
+
pushMessage("Current models:")
|
|
529
|
+
const current = getResolvedSlots()
|
|
530
|
+
for (slot in Object.keys(current)) {
|
|
531
|
+
const resolved = current[slot]
|
|
532
|
+
if (resolved != null) {
|
|
533
|
+
pushMessage(" ${slot}: ${resolved.model} (${resolved.via})")
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
const items = modelChoiceItems({})
|
|
537
|
+
const choice = chooseOption(
|
|
538
|
+
"Model",
|
|
539
|
+
"Pick a model, or type one (or slot=model, e.g. reasoning=claude-opus-4-8). Empty to cancel.",
|
|
540
|
+
items,
|
|
541
|
+
allowFreeText: true,
|
|
542
|
+
allowCancel: true,
|
|
543
|
+
)
|
|
544
|
+
if (choice == "" || choice == null) {
|
|
545
|
+
return true
|
|
546
|
+
}
|
|
547
|
+
spec = choice
|
|
548
|
+
}
|
|
549
|
+
const ctx: Ctx = {
|
|
550
|
+
provider: currentProvider(),
|
|
551
|
+
price: "standard"
|
|
552
|
+
}
|
|
553
|
+
const out = switchModel(_session, spec, ctx, getResolvedSlots())
|
|
554
|
+
_session = out.session
|
|
555
|
+
for (change in out.changes) {
|
|
556
|
+
reactToSlotChange(change)
|
|
557
|
+
}
|
|
558
|
+
pushMessage("Model set:")
|
|
559
|
+
for (slot in Object.keys(out.resolved)) {
|
|
560
|
+
const resolved = out.resolved[slot]
|
|
561
|
+
if (resolved != null) {
|
|
562
|
+
pushMessage(color.dim(" ${slot}: ${resolved.model} (${resolved.via})"))
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
return true
|
|
566
|
+
}
|
|
567
|
+
if (trimmed == "/models" || trimmed.startsWith("/models ")) {
|
|
568
|
+
const filters = parseModelsFilters(trimmed)
|
|
569
|
+
const models = filterHostedModels(listHostedModels(), filters)
|
|
570
|
+
if (models.length == 0) {
|
|
571
|
+
pushMessage("No models match.")
|
|
572
|
+
return true
|
|
573
|
+
}
|
|
574
|
+
for (model in models) {
|
|
575
|
+
pushMessage(
|
|
576
|
+
" ${model.name} (${model.provider}, $${model.inputCost}/1M in, ${model.contextWindow} ctx)",
|
|
577
|
+
)
|
|
578
|
+
}
|
|
579
|
+
return true
|
|
580
|
+
}
|
|
581
|
+
if (trimmed == "/local") {
|
|
582
|
+
if (!localModelsSupported()) {
|
|
583
|
+
pushMessage(
|
|
584
|
+
color.yellow(
|
|
585
|
+
"Local models need smoltalk-llama-cpp. Install: ! npm i -g smoltalk-llama-cpp",
|
|
586
|
+
),
|
|
587
|
+
)
|
|
588
|
+
return true
|
|
589
|
+
}
|
|
590
|
+
let items: ChoiceItem[] = []
|
|
591
|
+
for (modelName in listModelNames()) {
|
|
592
|
+
items.push({
|
|
593
|
+
key: modelName.name,
|
|
594
|
+
label: modelName.name
|
|
595
|
+
})
|
|
596
|
+
}
|
|
597
|
+
const choice = chooseOption(
|
|
598
|
+
"Local model",
|
|
599
|
+
"Pick a local model, or type an hf: URI / .gguf path (downloads on first use):",
|
|
600
|
+
items,
|
|
601
|
+
allowFreeText: true,
|
|
602
|
+
allowCancel: true,
|
|
603
|
+
)
|
|
604
|
+
if (choice == "" || choice == null) {
|
|
605
|
+
return true
|
|
606
|
+
}
|
|
607
|
+
const before = getResolvedSlots()
|
|
608
|
+
configureLocalModel(choice)
|
|
609
|
+
configureSearch(true)
|
|
610
|
+
for (change in diffResolved(before, getResolvedSlots())) {
|
|
611
|
+
reactToSlotChange(change)
|
|
612
|
+
}
|
|
613
|
+
pushMessage("Switched to local model: ${choice}")
|
|
614
|
+
return true
|
|
615
|
+
}
|
|
616
|
+
|
|
260
617
|
// Hand the message to the agent. `agentReply` does the slash-command
|
|
261
618
|
// expansion and the actual agent work; the REPL just renders the reply.
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
619
|
+
// Wrap in `try` so a terminal LLM failure (e.g. the connection dropped and
|
|
620
|
+
// retries were exhausted) renders a friendly heads-up instead of a raw
|
|
621
|
+
// Failure object. Aborts/interrupts are NOT caught here — `try` re-throws
|
|
622
|
+
// them so an Esc-cancel still reaches the policy handler.
|
|
623
|
+
const result = try agentReply(msg)
|
|
624
|
+
if (result is success(reply)) {
|
|
625
|
+
if (reply != "" && reply != null && reply != undefined) {
|
|
626
|
+
pushMessage(highlight("${reply}\n", language: "markdown"))
|
|
627
|
+
} else {
|
|
628
|
+
pushMessage(color.red("No reply generated."))
|
|
629
|
+
}
|
|
630
|
+
} else if (result is failure(f)) {
|
|
631
|
+
pushMessage(color.red(formatTurnFailure("${f.error}")))
|
|
267
632
|
}
|
|
268
633
|
return true
|
|
269
634
|
}
|
|
@@ -279,8 +644,8 @@ static const mainAgentSystemPrompt = """
|
|
|
279
644
|
You are the top-level coordinator of an Agency-language assistant. You
|
|
280
645
|
receive every user message and decide how to respond.
|
|
281
646
|
|
|
282
|
-
You have five subagent tools
|
|
283
|
-
context:
|
|
647
|
+
You have five subagent tools (each running in its own isolated
|
|
648
|
+
context) and one direct tool:
|
|
284
649
|
|
|
285
650
|
- `codeAgent(userMsg)` — anything that touches code or the filesystem:
|
|
286
651
|
reading, writing, editing, typechecking, running shell commands,
|
|
@@ -297,6 +662,11 @@ context:
|
|
|
297
662
|
- `explorerAgent(userMsg)` — a read-only researcher that produces
|
|
298
663
|
broad, synthesizing answers about the codebase or bundled docs.
|
|
299
664
|
Read the **Explorer** section below.
|
|
665
|
+
- `generateImageFile(prompt, path, size, images)` — generate an image
|
|
666
|
+
from a text prompt (or modify existing images by passing their paths
|
|
667
|
+
in `images`) and save it to `path`. Call it directly whenever the
|
|
668
|
+
user asks you to create, draw, edit, or restyle an image — do NOT
|
|
669
|
+
route image generation to `codeAgent`.
|
|
300
670
|
|
|
301
671
|
**Answer directly (no tool call) when** the message is conversational,
|
|
302
672
|
a clarifying question, or something you can answer from context alone.
|
|
@@ -439,22 +809,81 @@ unless the user has clearly asked for an action ("do X", "fix Y",
|
|
|
439
809
|
with them — don't sprint to implementation.
|
|
440
810
|
"""
|
|
441
811
|
|
|
812
|
+
// Exported for tests: agent-cwd resolution of edit inputs is a spec
|
|
813
|
+
// invariant with no other observable (the deterministic image client
|
|
814
|
+
// ignores its images argument). generateImage accepts path / URL /
|
|
815
|
+
// data-URI strings, so only local paths get agent-cwd resolution —
|
|
816
|
+
// running a URL through applyAgentCwd would mangle it into
|
|
817
|
+
// "<agentCwd>/https:/…".
|
|
818
|
+
export def resolveEditInputs(images: string[]): string[] {
|
|
819
|
+
return map(images) as inputPath {
|
|
820
|
+
if (inputPath.startsWith("http://") || inputPath.startsWith("https://") || inputPath.startsWith("data:")) {
|
|
821
|
+
return inputPath
|
|
822
|
+
}
|
|
823
|
+
return applyAgentCwd(inputPath)
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
// Direct image generation for the coordinator. Saves to disk and
|
|
828
|
+
// returns the path — never base64, which would flood the LLM context.
|
|
829
|
+
// The write rides the std::writeBinary interrupt gate (writes are not
|
|
830
|
+
// auto-approved by policy) and generation cost accrues to the agent's
|
|
831
|
+
// cost tracking like any llm() call.
|
|
832
|
+
export def generateImageFile(
|
|
833
|
+
prompt: string,
|
|
834
|
+
path: string,
|
|
835
|
+
size: string = "",
|
|
836
|
+
images: string[] = [],
|
|
837
|
+
): string {
|
|
838
|
+
"""
|
|
839
|
+
Generate an image from a text prompt and save it to `path`. To MODIFY
|
|
840
|
+
existing images (edit / variation), pass their paths in `images`.
|
|
841
|
+
Returns the saved path on success. Use this when the user asks to
|
|
842
|
+
create, draw, edit, or restyle an image.
|
|
843
|
+
|
|
844
|
+
@param prompt - What to generate, or how to modify the input images.
|
|
845
|
+
@param path - Where to save the resulting image (e.g. "diagram.png").
|
|
846
|
+
@param size - Optional size like "1024x1024".
|
|
847
|
+
@param images - Optional input image paths to edit / vary.
|
|
848
|
+
"""
|
|
849
|
+
// LLM-supplied paths resolve against the agent cwd, like every other
|
|
850
|
+
// agent file tool.
|
|
851
|
+
const inputs = resolveEditInputs(images)
|
|
852
|
+
const generated = generateImage(prompt, size: size, images: inputs)
|
|
853
|
+
if (isFailure(generated)) {
|
|
854
|
+
return "Image generation failed: ${generated.error}"
|
|
855
|
+
}
|
|
856
|
+
// writeBinary rejects an absolute filename when dir is set, so split
|
|
857
|
+
// path into (dir, name); useAgentCwd resolves a relative dir against
|
|
858
|
+
// the agent cwd (absolute dirs pass through untouched).
|
|
859
|
+
const written = writeBinary(basename(path), generated.value.base64, dirname(path), useAgentCwd: true)
|
|
860
|
+
if (isFailure(written)) {
|
|
861
|
+
return "Generated the image, but saving to ${path} failed: ${written.error}"
|
|
862
|
+
}
|
|
863
|
+
// Show the model what it made (generate -> view -> refine). The loop
|
|
864
|
+
// inlines the bytes when it builds the injected user message; the
|
|
865
|
+
// path resolves the same way the write did.
|
|
866
|
+
attachToReply(image(applyAgentCwd(path)))
|
|
867
|
+
return "Saved image to ${path}"
|
|
868
|
+
}
|
|
869
|
+
|
|
442
870
|
static const mainAgentTools = [
|
|
443
871
|
researchAgent.partial(allowHandoff: false),
|
|
444
872
|
codeAgent.partial(allowHandoff: false),
|
|
445
873
|
reviewAgent.partial(allowHandoff: false),
|
|
446
874
|
oracleAgent.partial(allowHandoff: false),
|
|
447
875
|
explorerAgent.partial(allowHandoff: false),
|
|
876
|
+
generateImageFile,
|
|
448
877
|
]
|
|
449
878
|
|
|
450
|
-
def mainAgent(prompt: string): string {
|
|
879
|
+
def mainAgent(prompt: string | (string | Attachment)[]): string {
|
|
451
880
|
thread(label: "main", summarize: true, session: "main") {
|
|
452
881
|
setMemoryId("main")
|
|
453
882
|
if (first) {
|
|
454
883
|
// `_context` carries the per-run grounding (date, cwd, AGENTS.md),
|
|
455
884
|
// set by `setupSession`. Appending it to the system prompt is what
|
|
456
885
|
// actually gets that context to the LLM.
|
|
457
|
-
systemMessage(mainAgentSystemPrompt
|
|
886
|
+
systemMessage("${mainAgentSystemPrompt}${_context}")
|
|
458
887
|
first = false
|
|
459
888
|
}
|
|
460
889
|
const result = llm(prompt, {
|
|
@@ -487,7 +916,28 @@ export def agentReplyVia(target: string, userMsg: string): string {
|
|
|
487
916
|
if (target == "review") {
|
|
488
917
|
return reviewAgent(expanded, false)
|
|
489
918
|
}
|
|
490
|
-
|
|
919
|
+
// Auto-attach image/PDF files the user referenced (drag-drop or typed
|
|
920
|
+
// path), filtered to what the resolved model accepts. Never silent:
|
|
921
|
+
// every attach and every skip prints a visible line.
|
|
922
|
+
const detected = modalityFilter(detectAttachments(expanded))
|
|
923
|
+
for (skippedFile in detected.skipped) {
|
|
924
|
+
pushMessage(color.yellow("📎 skipped ${skippedFile.label} (${skippedFile.reason})"))
|
|
925
|
+
}
|
|
926
|
+
if (detected.attached.length == 0) {
|
|
927
|
+
// Deliberate special case: a text-only turn stays a bare string. A
|
|
928
|
+
// one-element array is API-equivalent, but the stored thread message
|
|
929
|
+
// shape (string vs parts array) — and with it every serialized
|
|
930
|
+
// session and message fixture — would change for EVERY turn.
|
|
931
|
+
return mainAgent(expanded)
|
|
932
|
+
}
|
|
933
|
+
for (item in detected.attached) {
|
|
934
|
+
pushMessage(color.dim("📎 attached ${item.label}"))
|
|
935
|
+
}
|
|
936
|
+
const attachments = map(detected.attached) as item {
|
|
937
|
+
return item.attachment
|
|
938
|
+
}
|
|
939
|
+
const parts: (string | Attachment)[] = [expanded, ...attachments]
|
|
940
|
+
return mainAgent(parts)
|
|
491
941
|
}
|
|
492
942
|
|
|
493
943
|
// The agent's core turn, decoupled from the terminal: expand any project
|
|
@@ -558,9 +1008,9 @@ def givePolicyChoice() {
|
|
|
558
1008
|
]
|
|
559
1009
|
|
|
560
1010
|
const answer = chooseOption(title, body, items, allowFreeText: true)
|
|
561
|
-
match(answer) {
|
|
562
|
-
"minimal" =>
|
|
563
|
-
"recommended" =>
|
|
1011
|
+
return match(answer) {
|
|
1012
|
+
"minimal" => minimalAutoApprovePolicy
|
|
1013
|
+
"recommended" => recommendedAutoApprovePolicy
|
|
564
1014
|
}
|
|
565
1015
|
}
|
|
566
1016
|
|
|
@@ -616,7 +1066,15 @@ def oneShotAgent(target: string, prompt: string): string {
|
|
|
616
1066
|
const handler = setupSession(false)
|
|
617
1067
|
let reply: string = ""
|
|
618
1068
|
handle {
|
|
619
|
-
|
|
1069
|
+
// `try` converts a terminal LLM failure (retries exhausted on a dropped
|
|
1070
|
+
// connection / timeout) into a friendly message; aborts/interrupts still
|
|
1071
|
+
// propagate to the handler below.
|
|
1072
|
+
const result = try agentReplyVia(target, prompt)
|
|
1073
|
+
if (result is success(r)) {
|
|
1074
|
+
reply = r
|
|
1075
|
+
} else if (result is failure(f)) {
|
|
1076
|
+
reply = formatTurnFailure("${f.error}")
|
|
1077
|
+
}
|
|
620
1078
|
} with (data) {
|
|
621
1079
|
return handler(data)
|
|
622
1080
|
}
|
|
@@ -628,11 +1086,15 @@ def oneShotAgent(target: string, prompt: string): string {
|
|
|
628
1086
|
// Mirrors the reply-rendering half of `_runTurn`.
|
|
629
1087
|
def _runSeedTurn(target: string, msg: string) {
|
|
630
1088
|
pushMessage(color.dim("> ${msg}"))
|
|
631
|
-
const
|
|
632
|
-
if (
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
1089
|
+
const result = try agentReplyVia(target, msg)
|
|
1090
|
+
if (result is success(reply)) {
|
|
1091
|
+
if (reply != "" && reply != null && reply != undefined) {
|
|
1092
|
+
pushMessage(highlight("${reply}\n", language: "markdown"))
|
|
1093
|
+
} else {
|
|
1094
|
+
pushMessage(color.red("No reply generated."))
|
|
1095
|
+
}
|
|
1096
|
+
} else if (result is failure(f)) {
|
|
1097
|
+
pushMessage(color.red(formatTurnFailure("${f.error}")))
|
|
636
1098
|
}
|
|
637
1099
|
}
|
|
638
1100
|
|
|
@@ -697,7 +1159,7 @@ node main() {
|
|
|
697
1159
|
},
|
|
698
1160
|
provider: {
|
|
699
1161
|
type: "string",
|
|
700
|
-
description: "Force the LLM provider. Given alone (openai/anthropic/google) it selects that provider's default models and skips env auto-detection; pair it with --model for a custom/local model
|
|
1162
|
+
description: "Force the LLM provider. Given alone (openai/anthropic/google/openrouter) it selects that provider's default models and skips env auto-detection; pair it with --model for any other provider (e.g. litellm, openai-compat, or a custom/local model)"
|
|
701
1163
|
},
|
|
702
1164
|
interactive: {
|
|
703
1165
|
type: "boolean",
|
|
@@ -707,6 +1169,16 @@ node main() {
|
|
|
707
1169
|
agent: {
|
|
708
1170
|
type: "string",
|
|
709
1171
|
description: "Route the starting prompt to a named subagent: code, research, oracle, explorer, review (default: coordinator)"
|
|
1172
|
+
},
|
|
1173
|
+
local: {
|
|
1174
|
+
type: "string",
|
|
1175
|
+
optional: true,
|
|
1176
|
+
description: "Run a local model (downloads if needed): a curated short name, an hf: URI, or a .gguf path. Run without a value for guided setup. Pins all slots to the local model; mutually exclusive with --model/--fastmodel/--slowmodel. Requires: npm i -g smoltalk-llama-cpp"
|
|
1177
|
+
},
|
|
1178
|
+
"local-model": {
|
|
1179
|
+
type: "string",
|
|
1180
|
+
optional: true,
|
|
1181
|
+
description: "Deprecated alias for --local."
|
|
710
1182
|
}
|
|
711
1183
|
}
|
|
712
1184
|
},
|
|
@@ -719,19 +1191,98 @@ node main() {
|
|
|
719
1191
|
VERBOSE = true
|
|
720
1192
|
}
|
|
721
1193
|
|
|
722
|
-
//
|
|
723
|
-
//
|
|
724
|
-
//
|
|
725
|
-
// model
|
|
726
|
-
//
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
1194
|
+
// Model setup. `--local` (deprecated alias: `--local-model`) is an optional-
|
|
1195
|
+
// value flag with three states: absent (null); bare empty-string for guided
|
|
1196
|
+
// setup; a value for that local model. `--local` and the hosted flags
|
|
1197
|
+
// (--model / --fastmodel / --slowmodel) are mutually exclusive -- local and
|
|
1198
|
+
// hosted are different in kind (provider llama-cpp, no embedding endpoint).
|
|
1199
|
+
const localVal = args.flags["local"] ?? args.flags["local-model"]
|
|
1200
|
+
const modelArg = args.flags.model ?? ""
|
|
1201
|
+
const hasModelFlags = modelArg != "" || (args.flags.fastmodel ?? "") != "" || (args.flags.slowmodel ?? "") != ""
|
|
1202
|
+
if (localVal != null && hasModelFlags) {
|
|
1203
|
+
print(
|
|
1204
|
+
color.red("Pass either --model (hosted) or --local (local), not both."),
|
|
1205
|
+
)
|
|
1206
|
+
process.exit(1)
|
|
1207
|
+
}
|
|
1208
|
+
if (localVal == "") {
|
|
1209
|
+
// Bare --local: guided setup. Non-interactive can't prompt, so keep the
|
|
1210
|
+
// print-catalog-and-exit behavior there.
|
|
1211
|
+
if (!isTTY()) {
|
|
1212
|
+
printLocalCatalog()
|
|
1213
|
+
process.exit(0)
|
|
1214
|
+
}
|
|
1215
|
+
if (!localModelsSupported()) {
|
|
1216
|
+
print(color.yellow("Local models need the smoltalk-llama-cpp package."))
|
|
1217
|
+
print("Install it, then re-run: ! npm i -g smoltalk-llama-cpp")
|
|
1218
|
+
process.exit(1)
|
|
1219
|
+
}
|
|
1220
|
+
let items: ChoiceItem[] = []
|
|
1221
|
+
for (modelName in listModelNames()) {
|
|
1222
|
+
items.push({
|
|
1223
|
+
key: modelName.name,
|
|
1224
|
+
label: modelName.name
|
|
1225
|
+
})
|
|
1226
|
+
}
|
|
1227
|
+
const choice = chooseOption(
|
|
1228
|
+
"Local model",
|
|
1229
|
+
"Pick a model, or type an hf: URI / .gguf path (downloads on first use):",
|
|
1230
|
+
items,
|
|
1231
|
+
allowFreeText: true,
|
|
1232
|
+
allowCancel: true,
|
|
1233
|
+
)
|
|
1234
|
+
if (choice == "" || choice == null) {
|
|
1235
|
+
process.exit(0)
|
|
1236
|
+
}
|
|
1237
|
+
configureLocalModel(choice)
|
|
1238
|
+
configureSearch(true)
|
|
1239
|
+
// fall through into the session on the chosen local model
|
|
1240
|
+
} else if (localVal != null) {
|
|
1241
|
+
configureLocalModel(localVal)
|
|
1242
|
+
// Intentionally do NOT enable memory for a local model: the llama-cpp
|
|
1243
|
+
// provider has no embedding endpoint, so memory would only emit a
|
|
1244
|
+
// "Tier-2 disabled" notice. std::memory calls no-op while it's off.
|
|
1245
|
+
configureSearch(true)
|
|
1246
|
+
} else {
|
|
1247
|
+
// Hosted path. --model accepts `slot=model` (per-slot) or a bare model
|
|
1248
|
+
// (global pin); explicit --fastmodel/--slowmodel win over a --model slot=.
|
|
1249
|
+
const parsed = parseModelFlag(modelArg)
|
|
1250
|
+
let modelGlobal = ""
|
|
1251
|
+
let fastFlag = ""
|
|
1252
|
+
let slowFlag = ""
|
|
1253
|
+
if (modelArg != "") {
|
|
1254
|
+
if (parsed.slot == "") {
|
|
1255
|
+
modelGlobal = parsed.model
|
|
1256
|
+
} else if (parsed.slot == "main") {
|
|
1257
|
+
fastFlag = parsed.model
|
|
1258
|
+
} else if (parsed.slot == "reasoning") {
|
|
1259
|
+
slowFlag = parsed.model
|
|
1260
|
+
} else {
|
|
1261
|
+
print(
|
|
1262
|
+
color.red(
|
|
1263
|
+
"Unknown model slot '${parsed.slot}' in --model. Valid slots: main, reasoning.",
|
|
1264
|
+
),
|
|
1265
|
+
)
|
|
1266
|
+
process.exit(1)
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
const fm = args.flags.fastmodel ?? ""
|
|
1270
|
+
const sm = args.flags.slowmodel ?? ""
|
|
1271
|
+
if (fm != "") {
|
|
1272
|
+
fastFlag = fm
|
|
1273
|
+
}
|
|
1274
|
+
if (sm != "") {
|
|
1275
|
+
slowFlag = sm
|
|
1276
|
+
}
|
|
1277
|
+
configureModels(modelGlobal, fastFlag, slowFlag, args.flags.provider ?? "")
|
|
1278
|
+
// Persistent knowledge graph — enabled for hosted providers, skipped for
|
|
1279
|
+
// local models. (Some hosted providers, e.g. anthropic, still lack an
|
|
1280
|
+
// embedding endpoint and just disable Tier-2 recall with a one-time
|
|
1281
|
+
// notice; structured recall works regardless.) Must run before any
|
|
1282
|
+
// handler/REPL is installed.
|
|
1283
|
+
enableAgentMemory()
|
|
1284
|
+
configureSearch(false)
|
|
1285
|
+
}
|
|
735
1286
|
|
|
736
1287
|
// Positional args (everything after flags) are joined with spaces to
|
|
737
1288
|
// form the starting prompt. `--` ends flag parsing if a positional
|
|
@@ -801,3 +1352,4 @@ node main() {
|
|
|
801
1352
|
const handler = setupSession(true)
|
|
802
1353
|
startInteractive(handler, "", "")
|
|
803
1354
|
}
|
|
1355
|
+
|