open-agents-ai 0.184.6 → 0.184.7

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 (3) hide show
  1. package/README.md +0 -10
  2. package/dist/index.js +115 -57
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -26,16 +26,6 @@ An autonomous multi-turn tool-calling agent that reads your code, makes changes,
26
26
 
27
27
  An LLM is a high-bandwidth associative generative core — closer to a cortex-like prior than to a complete agent. Its weights contain broad latent structure, but they do not by themselves give you situated continuity, durable task state, calibrated action policies, or grounded memory management. Open Agents treats the model as one organ inside a larger organism. The framework provides the rest: sensors, effectors, memory stores, routing, gating, evaluation, and persistence.
28
28
 
29
- **Empirical proof** — 65 IQ-grade reasoning tasks (LSAT Logic Games, Bayesian probability, cryptarithmetic, constraint satisfaction, formal logic):
30
-
31
- | | With Framework (Full Organism) | Pure Reasoning (Cortex Only) |
32
- |---|---|---|
33
- | **4B model** | 65/65 (100%) | 15/15 (100%) |
34
- | **9B model** | 50/50 (100%) | 12/15 (80%) |
35
- | **30B model** | 20/20 (100%) | 11/15 (73%) |
36
-
37
- When the framework provides externalized computation (shell), persistent state (files), and verification loops (validators) — model size becomes irrelevant. A 4B model with the full agentic framework outperforms a 30B model reasoning alone.
38
-
39
29
  **What the framework provides:**
40
30
 
41
31
  | Layer | Biological Analog | Implementation |
package/dist/index.js CHANGED
@@ -42644,21 +42644,29 @@ async function stepBanner(config, rl, availableRows) {
42644
42644
  return false;
42645
42645
  }
42646
42646
  async function stepHeader(config, rl, availableRows) {
42647
+ function msgDetail() {
42648
+ return config.header.message || "(none set \u2014 press Enter to edit)";
42649
+ }
42650
+ function linkDetail() {
42651
+ return config.header.linkUrl ? `${config.header.linkUrl} [${config.header.linkText || "link"}]` : "(none set \u2014 press Enter to edit)";
42652
+ }
42647
42653
  const items = [
42648
42654
  { key: "hdr", label: "Header Content" },
42649
42655
  {
42650
42656
  key: "message_toggle",
42651
42657
  label: `${config.header.messageEnabled ? "[x]" : "[ ]"} Header Message`,
42652
- detail: config.header.message || "(none set)"
42658
+ detail: msgDetail()
42653
42659
  },
42654
42660
  {
42655
42661
  key: "link_toggle",
42656
42662
  label: `${config.header.linkEnabled ? "[x]" : "[ ]"} Link`,
42657
- detail: config.header.linkUrl ? `${config.header.linkUrl} [${config.header.linkText || "link"}]` : "(none set)"
42663
+ detail: linkDetail()
42658
42664
  },
42659
42665
  { key: "sep", label: "" },
42660
42666
  { key: "next", label: selectColors.green(" Next Step \u2192") }
42661
42667
  ];
42668
+ const msgIdx = 1;
42669
+ const linkIdx = 2;
42662
42670
  const result = await tuiSelect({
42663
42671
  items,
42664
42672
  title: "Step 3/5 \u2014 Header Text & Links",
@@ -42679,31 +42687,52 @@ async function stepHeader(config, rl, availableRows) {
42679
42687
  }
42680
42688
  }
42681
42689
  return false;
42690
+ },
42691
+ // Use onCustomKey + helpers.getInput() for proper inline text capture
42692
+ // (same pattern as TTS clone rename in voice list)
42693
+ customKeyHint: " e edit space toggle",
42694
+ onCustomKey: (item, key, helpers) => {
42695
+ if ((key === "e" || key === "E") && item.key === "message_toggle") {
42696
+ config.header.messageEnabled = true;
42697
+ helpers.getInput("Header message:", config.header.message).then((text) => {
42698
+ if (text !== null && text.trim()) {
42699
+ config.header.message = text.trim().slice(0, 80);
42700
+ helpers.updateItem(msgIdx, {
42701
+ label: `[x] Header Message`,
42702
+ detail: msgDetail()
42703
+ });
42704
+ }
42705
+ helpers.render();
42706
+ });
42707
+ return true;
42708
+ }
42709
+ if ((key === "e" || key === "E") && item.key === "link_toggle") {
42710
+ config.header.linkEnabled = true;
42711
+ helpers.getInput("Link URL:", config.header.linkUrl).then((url) => {
42712
+ if (url !== null && url.trim()) {
42713
+ config.header.linkUrl = url.trim();
42714
+ helpers.getInput("Link text:", config.header.linkText).then((text) => {
42715
+ if (text !== null && text.trim()) {
42716
+ config.header.linkText = text.trim();
42717
+ }
42718
+ helpers.updateItem(linkIdx, {
42719
+ label: `[x] Link`,
42720
+ detail: linkDetail()
42721
+ });
42722
+ helpers.render();
42723
+ });
42724
+ } else {
42725
+ helpers.render();
42726
+ }
42727
+ });
42728
+ return true;
42729
+ }
42730
+ return false;
42682
42731
  }
42683
42732
  });
42684
42733
  if (!result.confirmed)
42685
42734
  return false;
42686
- if (result.key === "next")
42687
- return true;
42688
- if (result.key === "message_toggle") {
42689
- config.header.messageEnabled = true;
42690
- const msg = await promptLine(rl, "Header message: ");
42691
- if (msg)
42692
- config.header.message = msg.slice(0, 80);
42693
- return stepHeader(config, rl, availableRows);
42694
- }
42695
- if (result.key === "link_toggle") {
42696
- config.header.linkEnabled = true;
42697
- const url = await promptLine(rl, "Link URL: ");
42698
- if (url) {
42699
- config.header.linkUrl = url;
42700
- const text = await promptLine(rl, "Link text: ");
42701
- if (text)
42702
- config.header.linkText = text;
42703
- }
42704
- return stepHeader(config, rl, availableRows);
42705
- }
42706
- return false;
42735
+ return result.key === "next";
42707
42736
  }
42708
42737
  async function stepTransport(config, rl, availableRows) {
42709
42738
  const items = [
@@ -42734,12 +42763,16 @@ async function stepTransport(config, rl, availableRows) {
42734
42763
  { key: "sep", label: "" },
42735
42764
  { key: "next", label: selectColors.green(" Next Step \u2192") }
42736
42765
  ];
42766
+ const rpmIdx = items.findIndex((i) => i.key === "rpm");
42767
+ const tpdIdx = items.findIndex((i) => i.key === "tpd");
42768
+ const concIdx = items.findIndex((i) => i.key === "conc");
42737
42769
  const result = await tuiSelect({
42738
42770
  items,
42739
42771
  title: "Step 4/5 \u2014 Transport & Rate Limits",
42740
42772
  rl,
42741
42773
  skipKeys: ["hdr_transport", "hdr_limits", "sep"],
42742
42774
  availableRows,
42775
+ customKeyHint: " e edit space toggle",
42743
42776
  onAction: (item, action) => {
42744
42777
  if (action === "space") {
42745
42778
  if (item.key === "cf_toggle") {
@@ -42754,6 +42787,42 @@ async function stepTransport(config, rl, availableRows) {
42754
42787
  }
42755
42788
  }
42756
42789
  return false;
42790
+ },
42791
+ onCustomKey: (item, key, helpers) => {
42792
+ if ((key === "e" || key === "E") && item.key === "rpm") {
42793
+ helpers.getInput("Max req/min:", String(config.rateLimits.maxRequestsPerMinute)).then((val) => {
42794
+ if (val !== null) {
42795
+ const n = parseInt(val, 10);
42796
+ if (!isNaN(n) && n > 0)
42797
+ config.rateLimits.maxRequestsPerMinute = n;
42798
+ }
42799
+ helpers.updateItem(rpmIdx, { label: ` Max requests/min: ${config.rateLimits.maxRequestsPerMinute}` });
42800
+ });
42801
+ return true;
42802
+ }
42803
+ if ((key === "e" || key === "E") && item.key === "tpd") {
42804
+ helpers.getInput("Max tokens/day:", String(config.rateLimits.maxTokensPerDay)).then((val) => {
42805
+ if (val !== null) {
42806
+ const n = parseInt(val, 10);
42807
+ if (!isNaN(n) && n > 0)
42808
+ config.rateLimits.maxTokensPerDay = n;
42809
+ }
42810
+ helpers.updateItem(tpdIdx, { label: ` Max tokens/day: ${config.rateLimits.maxTokensPerDay.toLocaleString()}` });
42811
+ });
42812
+ return true;
42813
+ }
42814
+ if ((key === "e" || key === "E") && item.key === "conc") {
42815
+ helpers.getInput("Max concurrent:", String(config.rateLimits.maxConcurrent)).then((val) => {
42816
+ if (val !== null) {
42817
+ const n = parseInt(val, 10);
42818
+ if (!isNaN(n) && n > 0)
42819
+ config.rateLimits.maxConcurrent = n;
42820
+ }
42821
+ helpers.updateItem(concIdx, { label: ` Max concurrent: ${config.rateLimits.maxConcurrent}` });
42822
+ });
42823
+ return true;
42824
+ }
42825
+ return false;
42757
42826
  }
42758
42827
  });
42759
42828
  if (!result.confirmed)
@@ -42765,27 +42834,6 @@ async function stepTransport(config, rl, availableRows) {
42765
42834
  }
42766
42835
  return true;
42767
42836
  }
42768
- if (result.key === "rpm") {
42769
- const val = await promptLine(rl, "Max requests per minute: ");
42770
- const n = parseInt(val, 10);
42771
- if (!isNaN(n) && n > 0)
42772
- config.rateLimits.maxRequestsPerMinute = n;
42773
- return stepTransport(config, rl, availableRows);
42774
- }
42775
- if (result.key === "tpd") {
42776
- const val = await promptLine(rl, "Max tokens per day: ");
42777
- const n = parseInt(val, 10);
42778
- if (!isNaN(n) && n > 0)
42779
- config.rateLimits.maxTokensPerDay = n;
42780
- return stepTransport(config, rl, availableRows);
42781
- }
42782
- if (result.key === "conc") {
42783
- const val = await promptLine(rl, "Max concurrent requests: ");
42784
- const n = parseInt(val, 10);
42785
- if (!isNaN(n) && n > 0)
42786
- config.rateLimits.maxConcurrent = n;
42787
- return stepTransport(config, rl, availableRows);
42788
- }
42789
42837
  return false;
42790
42838
  }
42791
42839
  async function stepReview(config, rl, availableRows) {
@@ -42880,16 +42928,6 @@ async function runSponsorWizard(ctx) {
42880
42928
  renderInfo("Toggle: /sponsor status | Pause: /sponsor pause | Remove: /sponsor remove");
42881
42929
  return config;
42882
42930
  }
42883
- function promptLine(rl, prompt) {
42884
- return new Promise((resolve35) => {
42885
- process.stdout.write(prompt);
42886
- const handler = (line) => {
42887
- rl.removeListener("line", handler);
42888
- resolve35(line.trim());
42889
- };
42890
- rl.on("line", handler);
42891
- });
42892
- }
42893
42931
  var ANIM_PRESETS;
42894
42932
  var init_sponsor_wizard = __esm({
42895
42933
  "packages/cli/dist/tui/sponsor-wizard.js"() {
@@ -48972,17 +49010,37 @@ async function handleSponsoredEndpoint(ctx, local) {
48972
49010
  `);
48973
49011
  const sponsors = [];
48974
49012
  const gateway = ctx.getExposeGateway?.();
48975
- if (gateway && gateway.isActive && gateway.tunnelUrl) {
49013
+ if (gateway && gateway.isActive) {
49014
+ const gwUrl = gateway.tunnelUrl || `http://127.0.0.1:${gateway._proxyPort || 11434}`;
48976
49015
  sponsors.push({
48977
49016
  name: "Local Gateway",
48978
- url: gateway.tunnelUrl,
49017
+ url: gwUrl,
48979
49018
  authKey: gateway.authKey,
48980
49019
  models: [],
48981
- // would need to probe
48982
49020
  limits: { rpm: 60, tpd: 1e5 },
48983
49021
  source: "local"
48984
49022
  });
48985
49023
  }
49024
+ const { loadSponsorConfig: loadSpCfg } = await Promise.resolve().then(() => (init_sponsor_wizard(), sponsor_wizard_exports));
49025
+ const spCfg = loadSpCfg(ctx.repoRoot ?? process.cwd());
49026
+ if (spCfg && spCfg.status === "active") {
49027
+ const epUrls = new Set(sponsors.map((s) => s.url));
49028
+ for (const ep of spCfg.endpoints.filter((e) => e.enabled)) {
49029
+ if (!epUrls.has(ep.url)) {
49030
+ sponsors.push({
49031
+ name: ep.label,
49032
+ url: ep.url,
49033
+ authKey: "",
49034
+ models: ep.models,
49035
+ limits: {
49036
+ rpm: spCfg.rateLimits.maxRequestsPerMinute,
49037
+ tpd: spCfg.rateLimits.maxTokensPerDay
49038
+ },
49039
+ source: "local"
49040
+ });
49041
+ }
49042
+ }
49043
+ }
48986
49044
  const sponsorDir2 = join58(ctx.repoRoot ?? process.cwd(), ".oa", "sponsor");
48987
49045
  const knownFile = join58(sponsorDir2, "known-sponsors.json");
48988
49046
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.184.6",
3
+ "version": "0.184.7",
4
4
  "description": "AI coding agent powered by open-source models (Ollama/vLLM) \u2014 interactive TUI with agentic tool-calling loop",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",