agency-lang 0.7.0 → 0.7.2
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 +169 -28
- package/dist/lib/agents/agency-agent/agent.js +579 -152
- package/dist/lib/agents/agency-agent/lib/attachments.js +2 -2
- package/dist/lib/agents/agency-agent/lib/config.agency +5 -0
- package/dist/lib/agents/agency-agent/lib/config.js +11 -0
- package/dist/lib/agents/agency-agent/lib/defaultPolicy.agency +106 -0
- package/dist/lib/agents/agency-agent/lib/defaultPolicy.js +764 -3
- package/dist/lib/agents/agency-agent/lib/modelFilters.js +1 -1
- package/dist/lib/agents/agency-agent/lib/resolution.js +4 -4
- package/dist/lib/agents/agency-agent/lib/search.js +3 -3
- package/dist/lib/agents/agency-agent/lib/settings.js +1 -1
- package/dist/lib/agents/agency-agent/lib/utils.js +1 -1
- package/dist/lib/agents/agency-agent/shared.agency +22 -0
- package/dist/lib/agents/agency-agent/shared.js +160 -3
- package/dist/lib/agents/agency-agent/subagents/code.js +1 -1
- package/dist/lib/agents/agency-agent/subagents/explorer.js +1 -1
- package/dist/lib/agents/agency-agent/subagents/oracle.js +1 -1
- package/dist/lib/agents/agency-agent/subagents/research.js +1 -1
- package/dist/lib/agents/agency-agent/subagents/review.js +4 -4
- package/dist/lib/agents/agency-agent/tests/agentTurn.js +1 -1
- package/dist/lib/agents/agency-agent/tests/attachments.js +1 -1
- package/dist/lib/agents/agency-agent/tests/attachmentsTurn.js +2 -2
- package/dist/lib/agents/agency-agent/tests/gitPolicy.js +3 -3
- package/dist/lib/agents/agency-agent/tests/oneShotRounds.agency +20 -0
- package/dist/lib/agents/agency-agent/tests/oneShotRounds.js +555 -0
- package/dist/lib/agents/agency-agent/tests/oneShotRounds.test.json +9 -0
- package/dist/lib/agents/review/agent.js +3 -3
- package/dist/lib/cli/doctor.d.ts +8 -0
- package/dist/lib/cli/doctor.js +21 -13
- package/dist/lib/cli/doctor.test.js +34 -0
- package/dist/lib/cli/help.js +1 -5
- package/dist/lib/cli/runBundledAgent.d.ts +17 -1
- package/dist/lib/cli/runBundledAgent.js +73 -2
- package/dist/lib/cli/runBundledAgent.test.d.ts +1 -0
- package/dist/lib/cli/runBundledAgent.test.js +96 -0
- package/dist/lib/config.d.ts +42 -33
- package/dist/lib/config.js +108 -6
- package/dist/lib/config.test.js +121 -2
- package/dist/lib/ir/prettyPrint.js +25 -4
- package/dist/lib/parseCache.js +8 -13
- package/dist/lib/parseCache.test.js +5 -8
- package/dist/lib/parser.js +5 -12
- package/dist/lib/preprocessors/typescriptPreprocessor.d.ts +0 -28
- package/dist/lib/preprocessors/typescriptPreprocessor.js +0 -245
- package/dist/lib/runtime/configOverrides.d.ts +17 -16
- package/dist/lib/runtime/configOverrides.js +27 -16
- package/dist/lib/runtime/configOverrides.test.js +116 -2
- package/dist/lib/runtime/prompt.js +7 -3
- package/dist/lib/runtime/runner.d.ts +2 -2
- package/dist/lib/runtime/runner.js +26 -7
- package/dist/lib/runtime/state/context.js +9 -2
- package/dist/lib/stdlib/llm.d.ts +1 -0
- package/dist/lib/stdlib/version.d.ts +1 -1
- package/dist/lib/stdlib/version.js +1 -1
- package/dist/scripts/agency.d.ts +2 -0
- package/dist/scripts/agency.js +55 -12
- package/dist/scripts/agency.test.js +73 -1
- package/package.json +1 -1
- package/stdlib/agency/eval.js +1 -1
- package/stdlib/agency.js +1 -1
- package/stdlib/agent.agency +9 -9
- package/stdlib/agent.js +5 -5
- package/stdlib/data/tech/hackernews.js +1 -1
- package/stdlib/index.js +15 -15
- package/stdlib/llm.agency +2 -1
- package/stdlib/llm.js +3 -3
- package/stdlib/markdown.js +1 -1
- package/stdlib/memory.js +2 -2
- package/stdlib/object.js +5 -5
- package/stdlib/policy.agency +21 -7
- package/stdlib/policy.js +45 -16
- package/stdlib/skills.js +1 -1
- package/stdlib/strategy.js +3 -3
- package/stdlib/thread.js +3 -3
- package/stdlib/ui/chart.js +2 -2
- package/stdlib/ui/cli.agency +1 -1
- package/stdlib/ui/cli.js +1 -1
- package/stdlib/ui/layout.js +3 -3
- package/stdlib/ui/table.js +2 -2
- package/stdlib/ui.js +3 -3
- package/dist/lib/agents/docs/cli/cli/agent.md +0 -16
- package/dist/lib/agents/docs/cli/cli/compile.md +0 -21
- package/dist/lib/agents/docs/cli/cli/coverage.md +0 -112
- package/dist/lib/agents/docs/cli/cli/debug.md +0 -41
- package/dist/lib/agents/docs/cli/cli/doc.md +0 -98
- package/dist/lib/agents/docs/cli/cli/editor-integration.md +0 -44
- package/dist/lib/agents/docs/cli/cli/eval-judge.md +0 -72
- package/dist/lib/agents/docs/cli/cli/eval.md +0 -194
- package/dist/lib/agents/docs/cli/cli/format.md +0 -23
- package/dist/lib/agents/docs/cli/cli/index.md +0 -7
- package/dist/lib/agents/docs/cli/cli/local.md +0 -92
- package/dist/lib/agents/docs/cli/cli/models.md +0 -63
- package/dist/lib/agents/docs/cli/cli/optimize.md +0 -338
- package/dist/lib/agents/docs/cli/cli/pack.md +0 -56
- package/dist/lib/agents/docs/cli/cli/policy.md +0 -23
- package/dist/lib/agents/docs/cli/cli/preprocess-and-ast.md +0 -21
- package/dist/lib/agents/docs/cli/cli/review.md +0 -16
- package/dist/lib/agents/docs/cli/cli/run.md +0 -79
- package/dist/lib/agents/docs/cli/cli/schedule.md +0 -89
- package/dist/lib/agents/docs/cli/cli/serve.md +0 -52
- package/dist/lib/agents/docs/cli/cli/test.md +0 -44
- package/dist/lib/agents/docs/cli/cli/trace-and-bundle.md +0 -75
- package/dist/lib/agents/docs/cli/cli/typecheck.md +0 -19
- package/dist/lib/agents/docs/guide/guide/advanced-types.md +0 -26
- package/dist/lib/agents/docs/guide/guide/agency-config-file.md +0 -212
- package/dist/lib/agents/docs/guide/guide/agency-packages.md +0 -54
- package/dist/lib/agents/docs/guide/guide/agency-stdlib.md +0 -14
- package/dist/lib/agents/docs/guide/guide/agency-vs-typescript.md +0 -33
- package/dist/lib/agents/docs/guide/guide/attachments.md +0 -56
- package/dist/lib/agents/docs/guide/guide/basic-syntax.md +0 -350
- package/dist/lib/agents/docs/guide/guide/blocks.md +0 -134
- package/dist/lib/agents/docs/guide/guide/build-integration.md +0 -99
- package/dist/lib/agents/docs/guide/guide/builtins.md +0 -84
- package/dist/lib/agents/docs/guide/guide/callbacks.md +0 -169
- package/dist/lib/agents/docs/guide/guide/checkpointing.md +0 -101
- package/dist/lib/agents/docs/guide/guide/cli-args.md +0 -190
- package/dist/lib/agents/docs/guide/guide/common-functions.md +0 -36
- package/dist/lib/agents/docs/guide/guide/compiling-and-running.md +0 -62
- package/dist/lib/agents/docs/guide/guide/concurrency.md +0 -108
- package/dist/lib/agents/docs/guide/guide/cross-thread-context.md +0 -226
- package/dist/lib/agents/docs/guide/guide/custom-providers.md +0 -195
- package/dist/lib/agents/docs/guide/guide/debugging.md +0 -67
- package/dist/lib/agents/docs/guide/guide/developer-tools.md +0 -90
- package/dist/lib/agents/docs/guide/guide/effects-and-raises.md +0 -137
- package/dist/lib/agents/docs/guide/guide/effects.md +0 -100
- package/dist/lib/agents/docs/guide/guide/error-handling.md +0 -161
- package/dist/lib/agents/docs/guide/guide/exercise-1.md +0 -32
- package/dist/lib/agents/docs/guide/guide/functions.md +0 -94
- package/dist/lib/agents/docs/guide/guide/getting-started.md +0 -35
- package/dist/lib/agents/docs/guide/guide/global-var-initialization.md +0 -70
- package/dist/lib/agents/docs/guide/guide/global-vs-static.md +0 -76
- package/dist/lib/agents/docs/guide/guide/guards.md +0 -134
- package/dist/lib/agents/docs/guide/guide/handlers.md +0 -196
- package/dist/lib/agents/docs/guide/guide/image-generation.md +0 -113
- package/dist/lib/agents/docs/guide/guide/imports-and-packages.md +0 -100
- package/dist/lib/agents/docs/guide/guide/interrupts-from-typescript.md +0 -84
- package/dist/lib/agents/docs/guide/guide/interrupts-part-2.md +0 -54
- package/dist/lib/agents/docs/guide/guide/interrupts.md +0 -139
- package/dist/lib/agents/docs/guide/guide/llm-part-2.md +0 -111
- package/dist/lib/agents/docs/guide/guide/llm.md +0 -109
- package/dist/lib/agents/docs/guide/guide/mcp.md +0 -295
- package/dist/lib/agents/docs/guide/guide/memory.md +0 -401
- package/dist/lib/agents/docs/guide/guide/message-threads.md +0 -111
- package/dist/lib/agents/docs/guide/guide/nodes.md +0 -50
- package/dist/lib/agents/docs/guide/guide/observability.md +0 -99
- package/dist/lib/agents/docs/guide/guide/partial-application.md +0 -96
- package/dist/lib/agents/docs/guide/guide/pattern-matching.md +0 -366
- package/dist/lib/agents/docs/guide/guide/policies.md +0 -67
- package/dist/lib/agents/docs/guide/guide/schema-parameter-injection.md +0 -101
- package/dist/lib/agents/docs/guide/guide/schemas.md +0 -99
- package/dist/lib/agents/docs/guide/guide/serving.md +0 -165
- package/dist/lib/agents/docs/guide/guide/state-isolation.md +0 -139
- package/dist/lib/agents/docs/guide/guide/streaming.md +0 -28
- package/dist/lib/agents/docs/guide/guide/tags.md +0 -72
- package/dist/lib/agents/docs/guide/guide/testing.md +0 -187
- package/dist/lib/agents/docs/guide/guide/troubleshooting.md +0 -86
- package/dist/lib/agents/docs/guide/guide/ts-helpers.md +0 -559
- package/dist/lib/agents/docs/guide/guide/ts-interop.md +0 -72
- package/dist/lib/agents/docs/guide/guide/type-validation.md +0 -187
- package/dist/lib/agents/docs/guide/guide/types.md +0 -181
- package/dist/lib/agents/docs/guide/guide/unused.md +0 -178
- package/dist/lib/agents/docs/guide/guide/unused2.md +0 -258
- package/dist/lib/agents/docs/guide/guide/value-parameterized-types.md +0 -186
- package/dist/lib/agents/docs/guide/guide/vscode-extension.md +0 -33
- package/dist/lib/agents/docs/guide/guide/why-agency.md +0 -323
- package/dist/lib/preprocessors/typescriptPreprocessor.config.test.js +0 -327
- package/stdlib/browser.js +0 -421
- package/stdlib/chart.js +0 -983
- package/stdlib/cli.js +0 -1116
- package/stdlib/email.js +0 -1104
- package/stdlib/imessage.js +0 -377
- package/stdlib/keyring.js +0 -803
- package/stdlib/layout.js +0 -3657
- package/stdlib/oauth.js +0 -862
- package/stdlib/schemas.js +0 -223
- package/stdlib/search.js +0 -629
- package/stdlib/sms.js +0 -419
- package/stdlib/table.js +0 -1419
- package/stdlib/threads.js +0 -1041
- package/stdlib/types.js +0 -222
- package/stdlib/validators.js +0 -1606
- /package/dist/lib/{preprocessors/typescriptPreprocessor.config.test.d.ts → cli/doctor.test.d.ts} +0 -0
|
@@ -6,21 +6,13 @@ import {
|
|
|
6
6
|
} from "std::agency/local"
|
|
7
7
|
import { parseArgs } from "std::args"
|
|
8
8
|
import { map } from "std::array"
|
|
9
|
-
import {
|
|
10
|
-
clearMessages,
|
|
11
|
-
pushMessage,
|
|
12
|
-
repl,
|
|
13
|
-
clearScreen,
|
|
14
|
-
clearHistory,
|
|
15
|
-
} from "std::ui/cli"
|
|
16
9
|
import { today } from "std::date"
|
|
17
10
|
import { generateImage } from "std::image"
|
|
18
11
|
import { applyAgentCwd, setAgentCwd } from "std::index"
|
|
12
|
+
import { listHostedModels, hostedModelInfo, setLlmOptions } from "std::llm"
|
|
13
|
+
import { setMemoryId, disableMemory } from "std::memory"
|
|
19
14
|
import { keys } from "std::object"
|
|
20
15
|
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"
|
|
24
16
|
import {
|
|
25
17
|
ScopedRuleFields,
|
|
26
18
|
cliPolicyHandler,
|
|
@@ -31,15 +23,38 @@ import { exists } from "std::shell"
|
|
|
31
23
|
import { commandsDir, expandSlash } from "std::skills"
|
|
32
24
|
import { highlight } from "std::syntax"
|
|
33
25
|
import { cwd, env, isTTY, readStdin, setTitle } from "std::system"
|
|
34
|
-
import {
|
|
26
|
+
import {
|
|
27
|
+
Attachment,
|
|
28
|
+
attachToReply,
|
|
29
|
+
getCost,
|
|
30
|
+
getModelCosts,
|
|
31
|
+
image,
|
|
32
|
+
systemMessage,
|
|
33
|
+
} from "std::thread"
|
|
35
34
|
import { chooseOption, ChoiceItem } from "std::ui"
|
|
35
|
+
import {
|
|
36
|
+
clearMessages,
|
|
37
|
+
pushMessage,
|
|
38
|
+
repl,
|
|
39
|
+
clearScreen,
|
|
40
|
+
clearHistory,
|
|
41
|
+
} from "std::ui/cli"
|
|
42
|
+
import { box, render } from "std::ui/layout"
|
|
36
43
|
|
|
37
44
|
import { figs, title } from "./images/images.agency"
|
|
38
45
|
import { detectAttachments, modalityFilter } from "./lib/attachments.agency"
|
|
39
|
-
import {
|
|
46
|
+
import {
|
|
47
|
+
POLICY_PATH,
|
|
48
|
+
SESSION_POLICY_PATH,
|
|
49
|
+
HISTORY_PATH,
|
|
50
|
+
ALWAYS_FIELDS,
|
|
51
|
+
} from "./lib/config.agency"
|
|
40
52
|
import {
|
|
41
53
|
minimalAutoApprovePolicy,
|
|
42
54
|
recommendedAutoApprovePolicy,
|
|
55
|
+
builtinPolicy,
|
|
56
|
+
builtinPolicyNames,
|
|
57
|
+
BUILTIN_POLICIES,
|
|
43
58
|
} from "./lib/defaultPolicy.agency"
|
|
44
59
|
import { filterHostedModels, ModelFilters } from "./lib/modelFilters.agency"
|
|
45
60
|
import { parseModelFlag, knownProviders, Resolved } from "./lib/models.agency"
|
|
@@ -66,6 +81,7 @@ import {
|
|
|
66
81
|
applyResolved,
|
|
67
82
|
promoteAll,
|
|
68
83
|
currentProvider,
|
|
84
|
+
resolveMaxToolCallRounds,
|
|
69
85
|
} from "./shared.agency"
|
|
70
86
|
import { codeAgent } from "./subagents/code.agency"
|
|
71
87
|
import { explorerAgent } from "./subagents/explorer.agency"
|
|
@@ -128,6 +144,11 @@ let VERBOSE: boolean = false
|
|
|
128
144
|
// scroll-output writes when stdout is destined for a Unix pipe.
|
|
129
145
|
let _isInteractive: boolean = true
|
|
130
146
|
|
|
147
|
+
// The `--policy` argument (a built-in name or a policy-file path), or ""
|
|
148
|
+
// when the flag is absent. Set in main() before `setupSession` runs;
|
|
149
|
+
// consumed there to override the saved policy for this run only.
|
|
150
|
+
let _policyArg: string = ""
|
|
151
|
+
|
|
131
152
|
// Live tool-call tracing. Always shown in the interactive REPL; in
|
|
132
153
|
// one-shot mode it's suppressed so piped output is just the reply,
|
|
133
154
|
// unless the user opts in with `--verbose` / `--debug` (AGENT_DEBUG).
|
|
@@ -856,7 +877,12 @@ export def generateImageFile(
|
|
|
856
877
|
// writeBinary rejects an absolute filename when dir is set, so split
|
|
857
878
|
// path into (dir, name); useAgentCwd resolves a relative dir against
|
|
858
879
|
// the agent cwd (absolute dirs pass through untouched).
|
|
859
|
-
const written = writeBinary(
|
|
880
|
+
const written = writeBinary(
|
|
881
|
+
basename(path),
|
|
882
|
+
generated.value.base64,
|
|
883
|
+
dirname(path),
|
|
884
|
+
useAgentCwd: true,
|
|
885
|
+
)
|
|
860
886
|
if (isFailure(written)) {
|
|
861
887
|
return "Generated the image, but saving to ${path} failed: ${written.error}"
|
|
862
888
|
}
|
|
@@ -921,7 +947,9 @@ export def agentReplyVia(target: string, userMsg: string): string {
|
|
|
921
947
|
// every attach and every skip prints a visible line.
|
|
922
948
|
const detected = modalityFilter(detectAttachments(expanded))
|
|
923
949
|
for (skippedFile in detected.skipped) {
|
|
924
|
-
pushMessage(
|
|
950
|
+
pushMessage(
|
|
951
|
+
color.yellow("📎 skipped ${skippedFile.label} (${skippedFile.reason})"),
|
|
952
|
+
)
|
|
925
953
|
}
|
|
926
954
|
if (detected.attached.length == 0) {
|
|
927
955
|
// Deliberate special case: a text-only turn stays a bare string. A
|
|
@@ -993,6 +1021,21 @@ def printHeader() {
|
|
|
993
1021
|
print(render(data, color: true))
|
|
994
1022
|
}
|
|
995
1023
|
|
|
1024
|
+
// Print `--policy` usage and list the built-in policies (name + one-line
|
|
1025
|
+
// description). Shown when `--policy` is passed with no value.
|
|
1026
|
+
def printPolicyHelp() {
|
|
1027
|
+
print(color.bold("Usage: agency agent --policy <name | path>"))
|
|
1028
|
+
print(
|
|
1029
|
+
"Select the approval policy for this run: a built-in name below, or a path to a policy JSON file.",
|
|
1030
|
+
)
|
|
1031
|
+
print("")
|
|
1032
|
+
print(color.bold("Built-in policies:"))
|
|
1033
|
+
for (p in BUILTIN_POLICIES) {
|
|
1034
|
+
print(" ${color.cyan(p.name)}")
|
|
1035
|
+
print(" ${p.description}")
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
|
|
996
1039
|
def givePolicyChoice() {
|
|
997
1040
|
const title = "Welcome to the agency agent. Please pick a policy to start."
|
|
998
1041
|
const body = "Don't worry, you can change this later. The policy just controls how the agent asks for your approval when it wants to do something. You can also create your own custom policy file at ${POLICY_PATH} and the agent will use it automatically."
|
|
@@ -1034,25 +1077,66 @@ def setupSession(interactive: boolean): any {
|
|
|
1034
1077
|
const projectContext = loadAgentsMd(cwd()) with approve
|
|
1035
1078
|
_context = "\n\nCurrent date: ${today()}\nCurrent working directory: ${cwd()}${projectContext}"
|
|
1036
1079
|
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1080
|
+
// Which file the handler persists against, and an optional in-memory
|
|
1081
|
+
// policy to start from. Normally the user's saved policy loaded from
|
|
1082
|
+
// POLICY_PATH; a `--policy` override redirects this (see below) so the
|
|
1083
|
+
// saved policy is never read or written.
|
|
1084
|
+
let policyFile = POLICY_PATH
|
|
1085
|
+
let sessionPolicy: any = null
|
|
1086
|
+
|
|
1087
|
+
if (_policyArg != "") {
|
|
1088
|
+
// `--policy` override: a built-in name or a path to a policy file.
|
|
1089
|
+
// The cwd-scoped built-ins pin the launch directory, so we resolve
|
|
1090
|
+
// them against `cwd()` (what `setAgentCwd` just stored, and what the
|
|
1091
|
+
// write/git/bash interrupts resolve their default paths back to).
|
|
1092
|
+
const builtin = builtinPolicy(_policyArg, cwd())
|
|
1093
|
+
if (builtin != null) {
|
|
1094
|
+
// Hand the policy to the handler in memory (no disk write): a
|
|
1095
|
+
// one-off, cwd-scoped override must not clobber the saved policy
|
|
1096
|
+
// or leak into a later run from a different directory. Any new
|
|
1097
|
+
// interactive "always" decision persists to the session file.
|
|
1098
|
+
policyFile = SESSION_POLICY_PATH
|
|
1099
|
+
sessionPolicy = builtin
|
|
1100
|
+
} else {
|
|
1101
|
+
// Not a built-in name — treat it as a policy file path and use it
|
|
1102
|
+
// directly (the handler loads/persists it). Validate up front so a
|
|
1103
|
+
// typo fails fast instead of silently starting from empty.
|
|
1104
|
+
const loaded = parsePolicyFile(_policyArg)
|
|
1105
|
+
if (loaded is failure(f)) {
|
|
1106
|
+
print(
|
|
1107
|
+
color.red(
|
|
1108
|
+
"--policy '${_policyArg}' is neither a built-in policy (${builtinPolicyNames().join(", ")}) nor a readable policy file (${f.status}).",
|
|
1109
|
+
),
|
|
1110
|
+
)
|
|
1111
|
+
process.exit(1)
|
|
1112
|
+
}
|
|
1113
|
+
policyFile = _policyArg
|
|
1114
|
+
}
|
|
1115
|
+
} else {
|
|
1116
|
+
const policy = parsePolicyFile(POLICY_PATH)
|
|
1117
|
+
if (policy is failure(f)) {
|
|
1118
|
+
if (f.status == "doesnt-exist") {
|
|
1119
|
+
if (interactive) {
|
|
1120
|
+
print(color.yellow("No existing policy found at ${POLICY_PATH}."))
|
|
1121
|
+
setPolicy(POLICY_PATH, givePolicyChoice())
|
|
1122
|
+
} else {
|
|
1123
|
+
setPolicy(POLICY_PATH, recommendedAutoApprovePolicy)
|
|
1124
|
+
}
|
|
1043
1125
|
} else {
|
|
1044
|
-
|
|
1126
|
+
print(color.red("Failed to load policy: ${JSON.stringify(f.error)}"))
|
|
1127
|
+
process.exit(1)
|
|
1045
1128
|
}
|
|
1046
1129
|
} else {
|
|
1047
|
-
|
|
1048
|
-
process.exit(1)
|
|
1130
|
+
setPolicy(POLICY_PATH, policy.value)
|
|
1049
1131
|
}
|
|
1050
|
-
} else {
|
|
1051
|
-
setPolicy(POLICY_PATH, policy.value)
|
|
1052
1132
|
}
|
|
1053
1133
|
// Bind the handler to a local var so `with handler` parses (the
|
|
1054
1134
|
// `with` clause only accepts an identifier, not a call expression).
|
|
1055
|
-
return cliPolicyHandler(
|
|
1135
|
+
return cliPolicyHandler(
|
|
1136
|
+
file: policyFile,
|
|
1137
|
+
fields: ALWAYS_FIELDS,
|
|
1138
|
+
policy: sessionPolicy,
|
|
1139
|
+
)
|
|
1056
1140
|
}
|
|
1057
1141
|
|
|
1058
1142
|
// One-shot entry: run a single turn through the same `mainAgent` the
|
|
@@ -1170,6 +1254,11 @@ node main() {
|
|
|
1170
1254
|
type: "string",
|
|
1171
1255
|
description: "Route the starting prompt to a named subagent: code, research, oracle, explorer, review (default: coordinator)"
|
|
1172
1256
|
},
|
|
1257
|
+
policy: {
|
|
1258
|
+
type: "string",
|
|
1259
|
+
optional: true,
|
|
1260
|
+
description: "Approval policy for this run: a built-in name (minimal, recommended, with-writes, with-bash) or a path to a policy JSON file. with-writes/with-bash auto-approve writes (and, for with-bash, shell) scoped to the current directory and its children. Overrides the saved policy without persisting it. Pass --policy with no value to list the built-in policies."
|
|
1261
|
+
},
|
|
1173
1262
|
local: {
|
|
1174
1263
|
type: "string",
|
|
1175
1264
|
optional: true,
|
|
@@ -1179,17 +1268,48 @@ node main() {
|
|
|
1179
1268
|
type: "string",
|
|
1180
1269
|
optional: true,
|
|
1181
1270
|
description: "Deprecated alias for --local."
|
|
1271
|
+
},
|
|
1272
|
+
trace: {
|
|
1273
|
+
type: "string",
|
|
1274
|
+
optional: true,
|
|
1275
|
+
description: "Write an execution trace to this file for debugging (bare --trace writes <runId>.agencytrace in the current directory)"
|
|
1276
|
+
},
|
|
1277
|
+
"log-file": {
|
|
1278
|
+
type: "string",
|
|
1279
|
+
description: "Append structured statelog events (one JSON object per line) to this file for debugging"
|
|
1280
|
+
},
|
|
1281
|
+
"max-tool-call-rounds": {
|
|
1282
|
+
type: "number",
|
|
1283
|
+
description: "Max LLM tool-call rounds before a tool loop halts (default 10 interactive, 50 in one-shot/-p mode)"
|
|
1284
|
+
},
|
|
1285
|
+
"max-tool-result-chars": {
|
|
1286
|
+
type: "number",
|
|
1287
|
+
description: "Max chars of a single tool result fed back to the model (0 disables; default 100000)"
|
|
1182
1288
|
}
|
|
1183
1289
|
}
|
|
1184
1290
|
},
|
|
1185
1291
|
)
|
|
1186
1292
|
|
|
1293
|
+
// NOTE: --trace / --log-file are declared here only for --help and so
|
|
1294
|
+
// parseArgs accepts them. runBundledAgent extracts them from the forwarded
|
|
1295
|
+
// args and passes them to this process as the AGENCY_CONFIG_OVERRIDES env
|
|
1296
|
+
// var, read when the RuntimeContext is constructed — before this main() runs.
|
|
1297
|
+
// Do not re-handle them here.
|
|
1298
|
+
|
|
1187
1299
|
if (args.flags.debug) {
|
|
1188
1300
|
AGENT_DEBUG = true
|
|
1189
1301
|
}
|
|
1190
1302
|
if (args.flags.verbose) {
|
|
1191
1303
|
VERBOSE = true
|
|
1192
1304
|
}
|
|
1305
|
+
// `--policy` is an optional-value flag: a bare `--policy` (no name or
|
|
1306
|
+
// path) prints the usage + the built-in policies and exits, rather than
|
|
1307
|
+
// silently doing nothing.
|
|
1308
|
+
if (args.flags.policy == "") {
|
|
1309
|
+
printPolicyHelp()
|
|
1310
|
+
process.exit(0)
|
|
1311
|
+
}
|
|
1312
|
+
_policyArg = args.flags.policy ?? ""
|
|
1193
1313
|
|
|
1194
1314
|
// Model setup. `--local` (deprecated alias: `--local-model`) is an optional-
|
|
1195
1315
|
// value flag with three states: absent (null); bare empty-string for guided
|
|
@@ -1292,6 +1412,28 @@ node main() {
|
|
|
1292
1412
|
const startAgent = args.flags.agent ?? ""
|
|
1293
1413
|
const wantInteractive = args.flags.interactive
|
|
1294
1414
|
|
|
1415
|
+
// Seeded interactive: run the prompt as the first turn, then hand over the
|
|
1416
|
+
// REPL (needs a TTY + query, and not --print). Everything else is one-shot.
|
|
1417
|
+
const seededInteractive = wantInteractive && hasQuery && isTTY() && !args.flags.print
|
|
1418
|
+
const runningOneShot = !seededInteractive && (args.flags.print || hasQuery || !isTTY())
|
|
1419
|
+
|
|
1420
|
+
// Tool-loop caps. One-shot runs (--print / piped / a positional query) have
|
|
1421
|
+
// no REPL to continue an autonomous task, so maxToolCallRounds defaults
|
|
1422
|
+
// higher (resolveMaxToolCallRounds); an explicit --max-tool-call-rounds always
|
|
1423
|
+
// wins. Set as branch-scoped defaults on the root branch BEFORE any subagent
|
|
1424
|
+
// is dispatched, so every (fork-seeded) subagent inherits them. setLlmOptions
|
|
1425
|
+
// merges only present keys, so this never clobbers the model defaults above.
|
|
1426
|
+
// Separate calls, each gated on its own value: setLlmOptions only skips
|
|
1427
|
+
// `undefined`, not `null`, so passing an absent key would clobber the bag.
|
|
1428
|
+
const maxRounds = resolveMaxToolCallRounds(args.flags["max-tool-call-rounds"] ?? null, runningOneShot)
|
|
1429
|
+
if (maxRounds != null) {
|
|
1430
|
+
setLlmOptions({ maxToolCallRounds: maxRounds })
|
|
1431
|
+
}
|
|
1432
|
+
const maxResultChars = args.flags["max-tool-result-chars"]
|
|
1433
|
+
if (maxResultChars != null) {
|
|
1434
|
+
setLlmOptions({ maxToolResultChars: maxResultChars })
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1295
1437
|
// Validate the target subagent name up front (empty = coordinator).
|
|
1296
1438
|
if (startAgent != "" && !START_AGENTS.includes(startAgent)) {
|
|
1297
1439
|
print(
|
|
@@ -1308,7 +1450,7 @@ node main() {
|
|
|
1308
1450
|
// and exit with no REPL. Without a TTY (or with `--print`) we fall
|
|
1309
1451
|
// through to one-shot below; `--interactive` with no prompt falls through
|
|
1310
1452
|
// to the plain REPL.
|
|
1311
|
-
if (
|
|
1453
|
+
if (seededInteractive) {
|
|
1312
1454
|
setTitle("Agency Agent")
|
|
1313
1455
|
clearScreen()
|
|
1314
1456
|
printHeader()
|
|
@@ -1352,4 +1494,3 @@ node main() {
|
|
|
1352
1494
|
const handler = setupSession(true)
|
|
1353
1495
|
startInteractive(handler, "", "")
|
|
1354
1496
|
}
|
|
1355
|
-
|