agency-lang 0.6.2 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/lib/agents/agency-agent/agent.agency +1 -1
  2. package/dist/lib/agents/agency-agent/agent.js +45 -112
  3. package/dist/lib/agents/agency-agent/code.js +532 -0
  4. package/dist/lib/agents/agency-agent/images/images.js +3 -0
  5. package/dist/lib/agents/agency-agent/lib/config.js +3 -0
  6. package/dist/lib/agents/agency-agent/lib/defaultPolicy.js +5 -6
  7. package/dist/lib/agents/agency-agent/lib/models.agency +154 -0
  8. package/dist/lib/agents/agency-agent/lib/models.js +711 -0
  9. package/dist/lib/agents/agency-agent/lib/utils.js +9 -22
  10. package/dist/lib/agents/agency-agent/prompts/codeSample.js +9 -22
  11. package/dist/lib/agents/agency-agent/research.js +311 -0
  12. package/dist/lib/agents/agency-agent/shared.agency +19 -67
  13. package/dist/lib/agents/agency-agent/shared.js +52 -150
  14. package/dist/lib/agents/agency-agent/subagents/code.js +16 -20
  15. package/dist/lib/agents/agency-agent/subagents/explorer.js +9 -10
  16. package/dist/lib/agents/agency-agent/subagents/oracle.js +10 -11
  17. package/dist/lib/agents/agency-agent/subagents/research.js +12 -13
  18. package/dist/lib/agents/agency-agent/subagents/review.js +12 -34
  19. package/dist/lib/agents/agency-agent/tests/agentTurn.js +5 -6
  20. package/dist/lib/agents/agency-agent/tests/execPolicy.js +15 -31
  21. package/dist/lib/agents/agency-agent/tests/toolWiring.js +13 -26
  22. package/dist/lib/agents/agency-agent/toolWiring.js +696 -0
  23. package/dist/lib/agents/docs/cli/cli/optimize.md +4 -2
  24. package/dist/lib/agents/docs/cli/optimize.md +4 -2
  25. package/dist/lib/agents/eval/goalJudge.agency +4 -1
  26. package/dist/lib/agents/eval/goalJudge.js +14 -10
  27. package/dist/lib/agents/eval/judge.js +5 -6
  28. package/dist/lib/agents/eval/judgePairwise.js +5 -6
  29. package/dist/lib/agents/gepaReflect.js +316 -0
  30. package/dist/lib/agents/mutatePrompt.js +301 -0
  31. package/dist/lib/agents/optimize/gepaReflect.js +5 -6
  32. package/dist/lib/agents/optimize/mutatePrompt.js +5 -6
  33. package/dist/lib/agents/policy/agent.js +16 -44
  34. package/dist/lib/agents/review/agent.js +6 -10
  35. package/dist/lib/backends/typescriptBuilder.integration.test.js +80 -0
  36. package/dist/lib/backends/typescriptBuilder.js +67 -17
  37. package/dist/lib/backends/typescriptGenerator/validationDescriptor.d.ts +6 -0
  38. package/dist/lib/backends/typescriptGenerator/validationDescriptor.js +108 -31
  39. package/dist/lib/cli/eval/optimize.js +4 -2
  40. package/dist/lib/optimize/baseOptimizer.d.ts +27 -0
  41. package/dist/lib/optimize/baseOptimizer.js +63 -5
  42. package/dist/lib/optimize/baseOptimizer.workdir.test.d.ts +1 -0
  43. package/dist/lib/optimize/baseOptimizer.workdir.test.js +77 -0
  44. package/dist/lib/optimize/grading/functionGrader.d.ts +5 -1
  45. package/dist/lib/optimize/grading/functionGrader.js +9 -1
  46. package/dist/lib/optimize/grading/functionGrader.test.js +22 -0
  47. package/dist/lib/optimize/grading/graders/llmJudge.d.ts +1 -0
  48. package/dist/lib/optimize/grading/graders/llmJudge.js +5 -1
  49. package/dist/lib/optimize/grading/graders/llmJudge.test.js +12 -2
  50. package/dist/lib/optimize/optimizers/example.d.ts +9 -10
  51. package/dist/lib/optimize/optimizers/example.js +33 -33
  52. package/dist/lib/optimize/optimizers/example.test.js +11 -0
  53. package/dist/lib/optimize/optimizers/gepa.d.ts +0 -2
  54. package/dist/lib/optimize/optimizers/gepa.js +3 -18
  55. package/dist/lib/optimize/optimizers/gepa.test.js +11 -0
  56. package/dist/lib/optimize/optimizers/greedyReflective.d.ts +0 -7
  57. package/dist/lib/optimize/optimizers/greedyReflective.js +2 -36
  58. package/dist/lib/runtime/errors.d.ts +21 -10
  59. package/dist/lib/runtime/errors.js +46 -22
  60. package/dist/lib/runtime/errors.test.js +56 -2
  61. package/dist/lib/runtime/guard.d.ts +22 -5
  62. package/dist/lib/runtime/guard.js +30 -7
  63. package/dist/lib/runtime/guard.test.js +30 -1
  64. package/dist/lib/runtime/hooks.js +5 -2
  65. package/dist/lib/runtime/index.d.ts +2 -2
  66. package/dist/lib/runtime/index.js +2 -2
  67. package/dist/lib/runtime/node.d.ts +43 -0
  68. package/dist/lib/runtime/node.js +129 -52
  69. package/dist/lib/runtime/prompt.js +16 -28
  70. package/dist/lib/runtime/result.d.ts +6 -0
  71. package/dist/lib/runtime/result.js +19 -15
  72. package/dist/lib/runtime/result.test.js +55 -4
  73. package/dist/lib/runtime/runBatch.js +3 -2
  74. package/dist/lib/runtime/runBatch.test.js +33 -0
  75. package/dist/lib/runtime/state/stateStack.test.js +6 -2
  76. package/dist/lib/runtime/threadRepair.d.ts +36 -0
  77. package/dist/lib/runtime/threadRepair.js +69 -0
  78. package/dist/lib/runtime/threadRepair.test.d.ts +1 -0
  79. package/dist/lib/runtime/threadRepair.test.js +89 -0
  80. package/dist/lib/serve/discovery.js +24 -2
  81. package/dist/lib/serve/http/adapter.js +1 -5
  82. package/dist/lib/serve/http/adapter.test.js +3 -0
  83. package/dist/lib/serve/http/functionFrame.integration.test.d.ts +1 -0
  84. package/dist/lib/serve/http/functionFrame.integration.test.js +83 -0
  85. package/dist/lib/serve/mcp/adapter.js +1 -1
  86. package/dist/lib/serve/mcp/adapter.test.js +4 -2
  87. package/dist/lib/serve/mcp/httpTransport.test.js +1 -0
  88. package/dist/lib/serve/types.d.ts +10 -0
  89. package/dist/lib/stdlib/http.js +19 -2
  90. package/dist/lib/stdlib/thread.d.ts +29 -4
  91. package/dist/lib/stdlib/thread.js +60 -15
  92. package/dist/lib/stdlib/version.d.ts +1 -1
  93. package/dist/lib/stdlib/version.js +1 -1
  94. package/dist/lib/templates/backends/typescriptGenerator/functionCatchFailure.d.ts +1 -1
  95. package/dist/lib/templates/backends/typescriptGenerator/functionCatchFailure.js +8 -15
  96. package/dist/lib/templates/backends/typescriptGenerator/imports.d.ts +1 -1
  97. package/dist/lib/templates/backends/typescriptGenerator/imports.js +7 -2
  98. package/dist/lib/typeChecker/capabilities.test.d.ts +1 -0
  99. package/dist/lib/typeChecker/capabilities.test.js +74 -0
  100. package/dist/lib/typeChecker/valueParamSubstitution.js +17 -3
  101. package/package.json +1 -1
  102. package/stdlib/agency/eval.js +9 -22
  103. package/stdlib/agency.js +20 -66
  104. package/stdlib/agent.js +13 -38
  105. package/stdlib/args.js +5 -6
  106. package/stdlib/array.js +17 -54
  107. package/stdlib/browser.js +5 -6
  108. package/stdlib/calendar.js +10 -26
  109. package/stdlib/capabilities.agency +60 -0
  110. package/stdlib/capabilities.js +172 -0
  111. package/stdlib/chart.js +8 -18
  112. package/stdlib/cli.js +10 -26
  113. package/stdlib/clipboard.js +6 -10
  114. package/stdlib/concurrency.js +5 -6
  115. package/stdlib/date.js +19 -62
  116. package/stdlib/email.js +7 -14
  117. package/stdlib/fs.js +10 -26
  118. package/stdlib/http.js +7 -14
  119. package/stdlib/imessage.js +5 -6
  120. package/stdlib/index.js +24 -82
  121. package/stdlib/keyring.js +8 -18
  122. package/stdlib/layout.js +22 -74
  123. package/stdlib/llm.agency +9 -3
  124. package/stdlib/llm.js +17 -21
  125. package/stdlib/markdown.js +8 -18
  126. package/stdlib/math.js +8 -18
  127. package/stdlib/memory.js +13 -38
  128. package/stdlib/oauth.js +8 -18
  129. package/stdlib/object.js +9 -22
  130. package/stdlib/path.js +11 -30
  131. package/stdlib/policy.js +22 -74
  132. package/stdlib/schemas.js +3 -0
  133. package/stdlib/search.js +5 -6
  134. package/stdlib/shell.js +12 -34
  135. package/stdlib/skills.js +13 -38
  136. package/stdlib/sms.js +5 -6
  137. package/stdlib/speech.js +7 -14
  138. package/stdlib/statelog.js +10 -26
  139. package/stdlib/strategy.js +9 -22
  140. package/stdlib/syntax.js +8 -18
  141. package/stdlib/system.js +15 -46
  142. package/stdlib/table.js +11 -30
  143. package/stdlib/thread.agency +4 -3
  144. package/stdlib/thread.js +25 -43
  145. package/stdlib/threads.js +9 -22
  146. package/stdlib/types.js +27 -0
  147. package/stdlib/ui.js +60 -226
  148. package/stdlib/validators.js +15 -46
  149. package/stdlib/weather.js +7 -14
  150. package/stdlib/wikipedia.js +7 -14
@@ -0,0 +1,154 @@
1
+ /*
2
+ * Model selection policy for the Agency Agent.
3
+ *
4
+ * Pure, side-effect-free helpers (no memory/LLM init on import) so they
5
+ * can be unit-tested in isolation. `shared.agency` consumes these and
6
+ * owns the actual side effects (setLlmOptions, slow-model state, exit).
7
+ *
8
+ * Two jobs:
9
+ * - `resolveDetected` — decide which provider's defaults to use,
10
+ * honoring an explicit `--provider` flag over env auto-detection.
11
+ * - `planModels` — given that provider, turn the four CLI flag values
12
+ * into the concrete fast/slow model + provider to apply.
13
+ */
14
+ import { pickProvider, envVarFor } from "std::llm"
15
+ import { env } from "std::system"
16
+
17
+ // Default models per provider. `slowProvider` pins the provider for the
18
+ // deep-reasoning call: OpenAI needs the Responses API for reasoning /
19
+ // extended thinking; native providers use their own. Used as fallbacks
20
+ // when the user doesn't pass --model / --fastmodel / --slowmodel.
21
+ type ProviderModels = {
22
+ fast: string;
23
+ slow: string;
24
+ slowProvider: string
25
+ }
26
+
27
+ export static const MODELS: Record<string, ProviderModels> = {
28
+ openai: {
29
+ fast: "gpt-4o-mini",
30
+ slow: "gpt-5.5",
31
+ slowProvider: "openai-responses"
32
+ },
33
+ anthropic: {
34
+ fast: "claude-sonnet-4-6",
35
+ slow: "claude-opus-4-8",
36
+ slowProvider: "anthropic"
37
+ },
38
+ google: {
39
+ fast: "gemini-3.5-flash",
40
+ slow: "gemini-3.1-pro-preview",
41
+ slowProvider: "google"
42
+ }
43
+ }
44
+
45
+ // The concrete models + providers to apply, produced by `planModels`.
46
+ // `fastProvider` is what `setLlmOptions` receives ("" lets smoltalk
47
+ // resolve the provider from the model name).
48
+ export type ModelPlan = {
49
+ fastModel: string;
50
+ fastProvider: string;
51
+ slowModel: string;
52
+ slowProvider: string
53
+ }
54
+
55
+ /** Decide which provider's default models to use, given the four
56
+ * (already-normalized-to-"") CLI flag values.
57
+ *
58
+ * - An explicit `--provider` for a *recognized* provider (a key in
59
+ * MODELS) wins outright: we use its defaults and SKIP env
60
+ * auto-detection entirely. This is what lets `--provider openai`
61
+ * work even when a stale/invalid ANTHROPIC_API_KEY is set. We also
62
+ * verify that provider's API key is present so we fail loudly up
63
+ * front instead of mid-run.
64
+ * - An explicit `--provider` for an *unrecognized* provider (a custom
65
+ * or local one) has no built-in defaults, so it's only valid
66
+ * alongside an explicit model; otherwise it's an error.
67
+ * - With no `--provider`, fall back to env auto-detection
68
+ * (`pickProvider`) whenever defaults are actually needed.
69
+ *
70
+ * Returns the provider name whose MODELS bucket should supply defaults,
71
+ * or a failure whose message is ready to print. */
72
+ export def resolveDetected(
73
+ model: string,
74
+ fast: string,
75
+ slow: string,
76
+ provider: string,
77
+ ): Result<string> {
78
+ const needFast = fast == "" && model == ""
79
+ const needSlow = slow == "" && model == ""
80
+
81
+ if (provider != "") {
82
+ if (MODELS[provider] == undefined) {
83
+ // Custom/local provider — no defaults to fall back on.
84
+ if (needFast || needSlow) {
85
+ const known = Object.keys(MODELS)
86
+ return failure(
87
+ "--provider ${provider} has no built-in defaults; also pass --model (or --fastmodel/--slowmodel). Providers with defaults: ${known.join(", ")}.",
88
+ )
89
+ }
90
+ // Models fully specified; the defaults bucket is never read.
91
+ return success(provider)
92
+ }
93
+ // Recognized provider forced. Fail loudly now if its key is missing
94
+ // rather than emitting a confusing auth error on the first llm() call.
95
+ const varName = envVarFor(provider)
96
+ if (varName != "" && (env(varName) == null || env(varName) == "")) {
97
+ return failure("No API key for provider '${provider}'. Set ${varName}.")
98
+ }
99
+ return success(provider)
100
+ }
101
+
102
+ if (needFast || needSlow) {
103
+ return pickProvider()
104
+ }
105
+ // Everything came from --model; the defaults bucket is never read.
106
+ return success("openai")
107
+ }
108
+
109
+ /** Turn the four CLI flag values plus the resolved `detected` provider
110
+ * into the concrete models/providers to apply. Pure. Precedence:
111
+ * --fastmodel/--slowmodel win over --model, which wins over the
112
+ * `detected` provider's defaults.
113
+ *
114
+ * The `detected` bucket (MODELS[detected]) is only read when a default
115
+ * is actually needed — i.e. when the corresponding model flag is
116
+ * absent. For a custom/local provider (no bucket) `resolveDetected`
117
+ * guarantees an explicit model was supplied, so the defaults are never
118
+ * dereferenced. */
119
+ export def planModels(
120
+ model: string,
121
+ fast: string,
122
+ slow: string,
123
+ provider: string,
124
+ detected: string,
125
+ ): ModelPlan {
126
+ let fastModel = fast
127
+ if (fastModel == "") {
128
+ if (model != "") {
129
+ fastModel = model
130
+ } else {
131
+ fastModel = MODELS[detected].fast
132
+ }
133
+ }
134
+
135
+ let slowModel = ""
136
+ let slowProvider = ""
137
+ if (slow != "") {
138
+ slowModel = slow
139
+ slowProvider = provider
140
+ } else if (model != "") {
141
+ slowModel = model
142
+ slowProvider = provider
143
+ } else {
144
+ slowModel = MODELS[detected].slow
145
+ slowProvider = MODELS[detected].slowProvider
146
+ }
147
+
148
+ return {
149
+ fastModel: fastModel,
150
+ fastProvider: provider,
151
+ slowModel: slowModel,
152
+ slowProvider: slowProvider
153
+ }
154
+ }