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.
Files changed (150) hide show
  1. package/dist/lib/agents/agency-agent/agent.agency +122 -27
  2. package/dist/lib/agents/agency-agent/agent.js +474 -147
  3. package/dist/lib/agents/agency-agent/lib/attachments.js +2 -2
  4. package/dist/lib/agents/agency-agent/lib/config.agency +5 -0
  5. package/dist/lib/agents/agency-agent/lib/config.js +11 -0
  6. package/dist/lib/agents/agency-agent/lib/defaultPolicy.agency +106 -0
  7. package/dist/lib/agents/agency-agent/lib/defaultPolicy.js +764 -3
  8. package/dist/lib/agents/agency-agent/lib/modelFilters.js +1 -1
  9. package/dist/lib/agents/agency-agent/lib/resolution.js +4 -4
  10. package/dist/lib/agents/agency-agent/lib/search.js +3 -3
  11. package/dist/lib/agents/agency-agent/lib/settings.js +1 -1
  12. package/dist/lib/agents/agency-agent/lib/utils.js +1 -1
  13. package/dist/lib/agents/agency-agent/shared.js +2 -2
  14. package/dist/lib/agents/agency-agent/subagents/code.js +1 -1
  15. package/dist/lib/agents/agency-agent/subagents/explorer.js +1 -1
  16. package/dist/lib/agents/agency-agent/subagents/oracle.js +1 -1
  17. package/dist/lib/agents/agency-agent/subagents/research.js +1 -1
  18. package/dist/lib/agents/agency-agent/subagents/review.js +4 -4
  19. package/dist/lib/agents/agency-agent/tests/agentTurn.js +1 -1
  20. package/dist/lib/agents/agency-agent/tests/attachments.js +1 -1
  21. package/dist/lib/agents/agency-agent/tests/attachmentsTurn.js +2 -2
  22. package/dist/lib/agents/agency-agent/tests/gitPolicy.js +3 -3
  23. package/dist/lib/agents/review/agent.js +3 -3
  24. package/dist/lib/ir/prettyPrint.js +25 -4
  25. package/dist/lib/runtime/runner.d.ts +2 -2
  26. package/dist/lib/runtime/runner.js +26 -7
  27. package/dist/lib/stdlib/version.d.ts +1 -1
  28. package/dist/lib/stdlib/version.js +1 -1
  29. package/package.json +1 -1
  30. package/stdlib/agency/eval.js +1 -1
  31. package/stdlib/agency.js +1 -1
  32. package/stdlib/agent.agency +9 -9
  33. package/stdlib/agent.js +5 -5
  34. package/stdlib/data/tech/hackernews.js +1 -1
  35. package/stdlib/index.js +15 -15
  36. package/stdlib/llm.js +1 -1
  37. package/stdlib/markdown.js +1 -1
  38. package/stdlib/memory.js +2 -2
  39. package/stdlib/object.js +5 -5
  40. package/stdlib/policy.agency +21 -7
  41. package/stdlib/policy.js +45 -16
  42. package/stdlib/skills.js +1 -1
  43. package/stdlib/strategy.js +3 -3
  44. package/stdlib/thread.js +3 -3
  45. package/stdlib/ui/chart.js +2 -2
  46. package/stdlib/ui/cli.agency +1 -1
  47. package/stdlib/ui/cli.js +1 -1
  48. package/stdlib/ui/layout.js +3 -3
  49. package/stdlib/ui/table.js +2 -2
  50. package/stdlib/ui.js +3 -3
  51. package/dist/lib/agents/docs/cli/cli/agent.md +0 -16
  52. package/dist/lib/agents/docs/cli/cli/compile.md +0 -21
  53. package/dist/lib/agents/docs/cli/cli/coverage.md +0 -112
  54. package/dist/lib/agents/docs/cli/cli/debug.md +0 -41
  55. package/dist/lib/agents/docs/cli/cli/doc.md +0 -98
  56. package/dist/lib/agents/docs/cli/cli/editor-integration.md +0 -44
  57. package/dist/lib/agents/docs/cli/cli/eval-judge.md +0 -72
  58. package/dist/lib/agents/docs/cli/cli/eval.md +0 -194
  59. package/dist/lib/agents/docs/cli/cli/format.md +0 -23
  60. package/dist/lib/agents/docs/cli/cli/index.md +0 -7
  61. package/dist/lib/agents/docs/cli/cli/local.md +0 -92
  62. package/dist/lib/agents/docs/cli/cli/models.md +0 -63
  63. package/dist/lib/agents/docs/cli/cli/optimize.md +0 -338
  64. package/dist/lib/agents/docs/cli/cli/pack.md +0 -56
  65. package/dist/lib/agents/docs/cli/cli/policy.md +0 -23
  66. package/dist/lib/agents/docs/cli/cli/preprocess-and-ast.md +0 -21
  67. package/dist/lib/agents/docs/cli/cli/review.md +0 -16
  68. package/dist/lib/agents/docs/cli/cli/run.md +0 -79
  69. package/dist/lib/agents/docs/cli/cli/schedule.md +0 -89
  70. package/dist/lib/agents/docs/cli/cli/serve.md +0 -52
  71. package/dist/lib/agents/docs/cli/cli/test.md +0 -44
  72. package/dist/lib/agents/docs/cli/cli/trace-and-bundle.md +0 -75
  73. package/dist/lib/agents/docs/cli/cli/typecheck.md +0 -19
  74. package/dist/lib/agents/docs/guide/guide/advanced-types.md +0 -26
  75. package/dist/lib/agents/docs/guide/guide/agency-config-file.md +0 -212
  76. package/dist/lib/agents/docs/guide/guide/agency-packages.md +0 -54
  77. package/dist/lib/agents/docs/guide/guide/agency-stdlib.md +0 -14
  78. package/dist/lib/agents/docs/guide/guide/agency-vs-typescript.md +0 -33
  79. package/dist/lib/agents/docs/guide/guide/attachments.md +0 -56
  80. package/dist/lib/agents/docs/guide/guide/basic-syntax.md +0 -350
  81. package/dist/lib/agents/docs/guide/guide/blocks.md +0 -134
  82. package/dist/lib/agents/docs/guide/guide/build-integration.md +0 -99
  83. package/dist/lib/agents/docs/guide/guide/builtins.md +0 -84
  84. package/dist/lib/agents/docs/guide/guide/callbacks.md +0 -169
  85. package/dist/lib/agents/docs/guide/guide/checkpointing.md +0 -101
  86. package/dist/lib/agents/docs/guide/guide/cli-args.md +0 -190
  87. package/dist/lib/agents/docs/guide/guide/common-functions.md +0 -36
  88. package/dist/lib/agents/docs/guide/guide/compiling-and-running.md +0 -62
  89. package/dist/lib/agents/docs/guide/guide/concurrency.md +0 -108
  90. package/dist/lib/agents/docs/guide/guide/cross-thread-context.md +0 -226
  91. package/dist/lib/agents/docs/guide/guide/custom-providers.md +0 -195
  92. package/dist/lib/agents/docs/guide/guide/debugging.md +0 -67
  93. package/dist/lib/agents/docs/guide/guide/developer-tools.md +0 -90
  94. package/dist/lib/agents/docs/guide/guide/effects-and-raises.md +0 -137
  95. package/dist/lib/agents/docs/guide/guide/effects.md +0 -100
  96. package/dist/lib/agents/docs/guide/guide/error-handling.md +0 -161
  97. package/dist/lib/agents/docs/guide/guide/exercise-1.md +0 -32
  98. package/dist/lib/agents/docs/guide/guide/functions.md +0 -94
  99. package/dist/lib/agents/docs/guide/guide/getting-started.md +0 -35
  100. package/dist/lib/agents/docs/guide/guide/global-var-initialization.md +0 -70
  101. package/dist/lib/agents/docs/guide/guide/global-vs-static.md +0 -76
  102. package/dist/lib/agents/docs/guide/guide/guards.md +0 -134
  103. package/dist/lib/agents/docs/guide/guide/handlers.md +0 -196
  104. package/dist/lib/agents/docs/guide/guide/image-generation.md +0 -113
  105. package/dist/lib/agents/docs/guide/guide/imports-and-packages.md +0 -100
  106. package/dist/lib/agents/docs/guide/guide/interrupts-from-typescript.md +0 -84
  107. package/dist/lib/agents/docs/guide/guide/interrupts-part-2.md +0 -54
  108. package/dist/lib/agents/docs/guide/guide/interrupts.md +0 -139
  109. package/dist/lib/agents/docs/guide/guide/llm-part-2.md +0 -111
  110. package/dist/lib/agents/docs/guide/guide/llm.md +0 -109
  111. package/dist/lib/agents/docs/guide/guide/mcp.md +0 -295
  112. package/dist/lib/agents/docs/guide/guide/memory.md +0 -401
  113. package/dist/lib/agents/docs/guide/guide/message-threads.md +0 -111
  114. package/dist/lib/agents/docs/guide/guide/nodes.md +0 -50
  115. package/dist/lib/agents/docs/guide/guide/observability.md +0 -99
  116. package/dist/lib/agents/docs/guide/guide/partial-application.md +0 -96
  117. package/dist/lib/agents/docs/guide/guide/pattern-matching.md +0 -366
  118. package/dist/lib/agents/docs/guide/guide/policies.md +0 -67
  119. package/dist/lib/agents/docs/guide/guide/schema-parameter-injection.md +0 -101
  120. package/dist/lib/agents/docs/guide/guide/schemas.md +0 -99
  121. package/dist/lib/agents/docs/guide/guide/serving.md +0 -165
  122. package/dist/lib/agents/docs/guide/guide/state-isolation.md +0 -139
  123. package/dist/lib/agents/docs/guide/guide/streaming.md +0 -28
  124. package/dist/lib/agents/docs/guide/guide/tags.md +0 -72
  125. package/dist/lib/agents/docs/guide/guide/testing.md +0 -187
  126. package/dist/lib/agents/docs/guide/guide/troubleshooting.md +0 -86
  127. package/dist/lib/agents/docs/guide/guide/ts-helpers.md +0 -559
  128. package/dist/lib/agents/docs/guide/guide/ts-interop.md +0 -72
  129. package/dist/lib/agents/docs/guide/guide/type-validation.md +0 -187
  130. package/dist/lib/agents/docs/guide/guide/types.md +0 -181
  131. package/dist/lib/agents/docs/guide/guide/unused.md +0 -178
  132. package/dist/lib/agents/docs/guide/guide/unused2.md +0 -258
  133. package/dist/lib/agents/docs/guide/guide/value-parameterized-types.md +0 -186
  134. package/dist/lib/agents/docs/guide/guide/vscode-extension.md +0 -33
  135. package/dist/lib/agents/docs/guide/guide/why-agency.md +0 -323
  136. package/stdlib/browser.js +0 -421
  137. package/stdlib/chart.js +0 -983
  138. package/stdlib/cli.js +0 -1116
  139. package/stdlib/email.js +0 -1104
  140. package/stdlib/imessage.js +0 -377
  141. package/stdlib/keyring.js +0 -803
  142. package/stdlib/layout.js +0 -3657
  143. package/stdlib/oauth.js +0 -862
  144. package/stdlib/schemas.js +0 -223
  145. package/stdlib/search.js +0 -629
  146. package/stdlib/sms.js +0 -419
  147. package/stdlib/table.js +0 -1419
  148. package/stdlib/threads.js +0 -1041
  149. package/stdlib/types.js +0 -222
  150. 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 { Attachment, attachToReply, getCost, getModelCosts, image, systemMessage } from "std::thread"
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 { POLICY_PATH, HISTORY_PATH, ALWAYS_FIELDS } from "./lib/config.agency"
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(basename(path), generated.value.base64, dirname(path), useAgentCwd: true)
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(color.yellow("📎 skipped ${skippedFile.label} (${skippedFile.reason})"))
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
- const policy = parsePolicyFile(POLICY_PATH)
1038
- if (policy is failure(f)) {
1039
- if (f.status == "doesnt-exist") {
1040
- if (interactive) {
1041
- print(color.yellow("No existing policy found at ${POLICY_PATH}."))
1042
- setPolicy(POLICY_PATH, givePolicyChoice())
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
- setPolicy(POLICY_PATH, recommendedAutoApprovePolicy)
1125
+ print(color.red("Failed to load policy: ${JSON.stringify(f.error)}"))
1126
+ process.exit(1)
1045
1127
  }
1046
1128
  } else {
1047
- print(color.red("Failed to load policy: ${JSON.stringify(f.error)}"))
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(file: POLICY_PATH, fields: ALWAYS_FIELDS)
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
-