agency-lang 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/agents/agency-agent/agent.agency +122 -27
- package/dist/lib/agents/agency-agent/agent.js +474 -147
- 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.js +2 -2
- 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/review/agent.js +3 -3
- package/dist/lib/ir/prettyPrint.js +25 -4
- package/dist/lib/runtime/runner.d.ts +2 -2
- package/dist/lib/runtime/runner.js +26 -7
- package/dist/lib/stdlib/version.d.ts +1 -1
- package/dist/lib/stdlib/version.js +1 -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.js +1 -1
- 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/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
|
@@ -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"
|
|
19
|
-
import { keys } from "std::object"
|
|
20
|
-
import { basename, dirname } from "std::path"
|
|
21
|
-
import { box, render } from "std::ui/layout"
|
|
22
12
|
import { listHostedModels, hostedModelInfo } from "std::llm"
|
|
23
13
|
import { setMemoryId, disableMemory } from "std::memory"
|
|
14
|
+
import { keys } from "std::object"
|
|
15
|
+
import { basename, dirname } from "std::path"
|
|
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"
|
|
@@ -128,6 +143,11 @@ let VERBOSE: boolean = false
|
|
|
128
143
|
// scroll-output writes when stdout is destined for a Unix pipe.
|
|
129
144
|
let _isInteractive: boolean = true
|
|
130
145
|
|
|
146
|
+
// The `--policy` argument (a built-in name or a policy-file path), or ""
|
|
147
|
+
// when the flag is absent. Set in main() before `setupSession` runs;
|
|
148
|
+
// consumed there to override the saved policy for this run only.
|
|
149
|
+
let _policyArg: string = ""
|
|
150
|
+
|
|
131
151
|
// Live tool-call tracing. Always shown in the interactive REPL; in
|
|
132
152
|
// one-shot mode it's suppressed so piped output is just the reply,
|
|
133
153
|
// unless the user opts in with `--verbose` / `--debug` (AGENT_DEBUG).
|
|
@@ -856,7 +876,12 @@ export def generateImageFile(
|
|
|
856
876
|
// writeBinary rejects an absolute filename when dir is set, so split
|
|
857
877
|
// path into (dir, name); useAgentCwd resolves a relative dir against
|
|
858
878
|
// the agent cwd (absolute dirs pass through untouched).
|
|
859
|
-
const written = writeBinary(
|
|
879
|
+
const written = writeBinary(
|
|
880
|
+
basename(path),
|
|
881
|
+
generated.value.base64,
|
|
882
|
+
dirname(path),
|
|
883
|
+
useAgentCwd: true,
|
|
884
|
+
)
|
|
860
885
|
if (isFailure(written)) {
|
|
861
886
|
return "Generated the image, but saving to ${path} failed: ${written.error}"
|
|
862
887
|
}
|
|
@@ -921,7 +946,9 @@ export def agentReplyVia(target: string, userMsg: string): string {
|
|
|
921
946
|
// every attach and every skip prints a visible line.
|
|
922
947
|
const detected = modalityFilter(detectAttachments(expanded))
|
|
923
948
|
for (skippedFile in detected.skipped) {
|
|
924
|
-
pushMessage(
|
|
949
|
+
pushMessage(
|
|
950
|
+
color.yellow("📎 skipped ${skippedFile.label} (${skippedFile.reason})"),
|
|
951
|
+
)
|
|
925
952
|
}
|
|
926
953
|
if (detected.attached.length == 0) {
|
|
927
954
|
// Deliberate special case: a text-only turn stays a bare string. A
|
|
@@ -993,6 +1020,21 @@ def printHeader() {
|
|
|
993
1020
|
print(render(data, color: true))
|
|
994
1021
|
}
|
|
995
1022
|
|
|
1023
|
+
// Print `--policy` usage and list the built-in policies (name + one-line
|
|
1024
|
+
// description). Shown when `--policy` is passed with no value.
|
|
1025
|
+
def printPolicyHelp() {
|
|
1026
|
+
print(color.bold("Usage: agency agent --policy <name | path>"))
|
|
1027
|
+
print(
|
|
1028
|
+
"Select the approval policy for this run: a built-in name below, or a path to a policy JSON file.",
|
|
1029
|
+
)
|
|
1030
|
+
print("")
|
|
1031
|
+
print(color.bold("Built-in policies:"))
|
|
1032
|
+
for (p in BUILTIN_POLICIES) {
|
|
1033
|
+
print(" ${color.cyan(p.name)}")
|
|
1034
|
+
print(" ${p.description}")
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
|
|
996
1038
|
def givePolicyChoice() {
|
|
997
1039
|
const title = "Welcome to the agency agent. Please pick a policy to start."
|
|
998
1040
|
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 +1076,66 @@ def setupSession(interactive: boolean): any {
|
|
|
1034
1076
|
const projectContext = loadAgentsMd(cwd()) with approve
|
|
1035
1077
|
_context = "\n\nCurrent date: ${today()}\nCurrent working directory: ${cwd()}${projectContext}"
|
|
1036
1078
|
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1079
|
+
// Which file the handler persists against, and an optional in-memory
|
|
1080
|
+
// policy to start from. Normally the user's saved policy loaded from
|
|
1081
|
+
// POLICY_PATH; a `--policy` override redirects this (see below) so the
|
|
1082
|
+
// saved policy is never read or written.
|
|
1083
|
+
let policyFile = POLICY_PATH
|
|
1084
|
+
let sessionPolicy: any = null
|
|
1085
|
+
|
|
1086
|
+
if (_policyArg != "") {
|
|
1087
|
+
// `--policy` override: a built-in name or a path to a policy file.
|
|
1088
|
+
// The cwd-scoped built-ins pin the launch directory, so we resolve
|
|
1089
|
+
// them against `cwd()` (what `setAgentCwd` just stored, and what the
|
|
1090
|
+
// write/git/bash interrupts resolve their default paths back to).
|
|
1091
|
+
const builtin = builtinPolicy(_policyArg, cwd())
|
|
1092
|
+
if (builtin != null) {
|
|
1093
|
+
// Hand the policy to the handler in memory (no disk write): a
|
|
1094
|
+
// one-off, cwd-scoped override must not clobber the saved policy
|
|
1095
|
+
// or leak into a later run from a different directory. Any new
|
|
1096
|
+
// interactive "always" decision persists to the session file.
|
|
1097
|
+
policyFile = SESSION_POLICY_PATH
|
|
1098
|
+
sessionPolicy = builtin
|
|
1099
|
+
} else {
|
|
1100
|
+
// Not a built-in name — treat it as a policy file path and use it
|
|
1101
|
+
// directly (the handler loads/persists it). Validate up front so a
|
|
1102
|
+
// typo fails fast instead of silently starting from empty.
|
|
1103
|
+
const loaded = parsePolicyFile(_policyArg)
|
|
1104
|
+
if (loaded is failure(f)) {
|
|
1105
|
+
print(
|
|
1106
|
+
color.red(
|
|
1107
|
+
"--policy '${_policyArg}' is neither a built-in policy (${builtinPolicyNames().join(", ")}) nor a readable policy file (${f.status}).",
|
|
1108
|
+
),
|
|
1109
|
+
)
|
|
1110
|
+
process.exit(1)
|
|
1111
|
+
}
|
|
1112
|
+
policyFile = _policyArg
|
|
1113
|
+
}
|
|
1114
|
+
} else {
|
|
1115
|
+
const policy = parsePolicyFile(POLICY_PATH)
|
|
1116
|
+
if (policy is failure(f)) {
|
|
1117
|
+
if (f.status == "doesnt-exist") {
|
|
1118
|
+
if (interactive) {
|
|
1119
|
+
print(color.yellow("No existing policy found at ${POLICY_PATH}."))
|
|
1120
|
+
setPolicy(POLICY_PATH, givePolicyChoice())
|
|
1121
|
+
} else {
|
|
1122
|
+
setPolicy(POLICY_PATH, recommendedAutoApprovePolicy)
|
|
1123
|
+
}
|
|
1043
1124
|
} else {
|
|
1044
|
-
|
|
1125
|
+
print(color.red("Failed to load policy: ${JSON.stringify(f.error)}"))
|
|
1126
|
+
process.exit(1)
|
|
1045
1127
|
}
|
|
1046
1128
|
} else {
|
|
1047
|
-
|
|
1048
|
-
process.exit(1)
|
|
1129
|
+
setPolicy(POLICY_PATH, policy.value)
|
|
1049
1130
|
}
|
|
1050
|
-
} else {
|
|
1051
|
-
setPolicy(POLICY_PATH, policy.value)
|
|
1052
1131
|
}
|
|
1053
1132
|
// Bind the handler to a local var so `with handler` parses (the
|
|
1054
1133
|
// `with` clause only accepts an identifier, not a call expression).
|
|
1055
|
-
return cliPolicyHandler(
|
|
1134
|
+
return cliPolicyHandler(
|
|
1135
|
+
file: policyFile,
|
|
1136
|
+
fields: ALWAYS_FIELDS,
|
|
1137
|
+
policy: sessionPolicy,
|
|
1138
|
+
)
|
|
1056
1139
|
}
|
|
1057
1140
|
|
|
1058
1141
|
// One-shot entry: run a single turn through the same `mainAgent` the
|
|
@@ -1170,6 +1253,11 @@ node main() {
|
|
|
1170
1253
|
type: "string",
|
|
1171
1254
|
description: "Route the starting prompt to a named subagent: code, research, oracle, explorer, review (default: coordinator)"
|
|
1172
1255
|
},
|
|
1256
|
+
policy: {
|
|
1257
|
+
type: "string",
|
|
1258
|
+
optional: true,
|
|
1259
|
+
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."
|
|
1260
|
+
},
|
|
1173
1261
|
local: {
|
|
1174
1262
|
type: "string",
|
|
1175
1263
|
optional: true,
|
|
@@ -1190,6 +1278,14 @@ node main() {
|
|
|
1190
1278
|
if (args.flags.verbose) {
|
|
1191
1279
|
VERBOSE = true
|
|
1192
1280
|
}
|
|
1281
|
+
// `--policy` is an optional-value flag: a bare `--policy` (no name or
|
|
1282
|
+
// path) prints the usage + the built-in policies and exits, rather than
|
|
1283
|
+
// silently doing nothing.
|
|
1284
|
+
if (args.flags.policy == "") {
|
|
1285
|
+
printPolicyHelp()
|
|
1286
|
+
process.exit(0)
|
|
1287
|
+
}
|
|
1288
|
+
_policyArg = args.flags.policy ?? ""
|
|
1193
1289
|
|
|
1194
1290
|
// Model setup. `--local` (deprecated alias: `--local-model`) is an optional-
|
|
1195
1291
|
// value flag with three states: absent (null); bare empty-string for guided
|
|
@@ -1352,4 +1448,3 @@ node main() {
|
|
|
1352
1448
|
const handler = setupSession(true)
|
|
1353
1449
|
startInteractive(handler, "", "")
|
|
1354
1450
|
}
|
|
1355
|
-
|