@openagents-org/agent-launcher 0.1.5 → 0.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openagents-org/agent-launcher",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "OpenAgents Launcher — install, configure, and run AI coding agents from your terminal",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -31,12 +31,13 @@ class BaseAdapter {
31
31
  * @param {string} opts.agentName
32
32
  * @param {string} [opts.endpoint]
33
33
  */
34
- constructor({ workspaceId, channelName, token, agentName, endpoint }) {
34
+ constructor({ workspaceId, channelName, token, agentName, endpoint, agentEnv }) {
35
35
  this.workspaceId = workspaceId;
36
36
  this.channelName = channelName;
37
37
  this.token = token;
38
38
  this.agentName = agentName;
39
39
  this.endpoint = endpoint || DEFAULT_ENDPOINT;
40
+ this.agentEnv = agentEnv || process.env;
40
41
  this.client = new WorkspaceClient(this.endpoint);
41
42
  this._lastEventId = null;
42
43
  this._running = false;
@@ -288,7 +288,7 @@ class ClaudeAdapter extends BaseAdapter {
288
288
  }
289
289
 
290
290
  // Clean env
291
- const cleanEnv = { ...process.env };
291
+ const cleanEnv = { ...(this.agentEnv || process.env) };
292
292
  delete cleanEnv.CLAUDECODE;
293
293
  delete cleanEnv.CLAUDE_CODE_SESSION;
294
294
 
@@ -192,7 +192,7 @@ class OpenClawAdapter extends BaseAdapter {
192
192
 
193
193
  this._log(`CLI: ${binary} ${args.slice(0, 5).join(' ')} ...`);
194
194
 
195
- const spawnEnv = { ...process.env };
195
+ const spawnEnv = { ...(this.agentEnv || process.env) };
196
196
  if (IS_WINDOWS) {
197
197
  // Ensure node and npm global bin are on PATH
198
198
  const nodeBinDir = path.dirname(process.execPath);
package/src/daemon.js CHANGED
@@ -357,6 +357,7 @@ class Daemon {
357
357
  endpoint,
358
358
  openclawAgentId: agentCfg.openclaw_agent_id || 'main',
359
359
  disabledModules: new Set(),
360
+ agentEnv: this._buildAgentEnv(agentCfg),
360
361
  });
361
362
  } catch (e) {
362
363
  this._log(`${name} failed to create ${agentType} adapter: ${e.message}`);
package/src/registry.js CHANGED
@@ -54,9 +54,22 @@ class Registry {
54
54
  getCatalogSync() {
55
55
  if (this._catalog) return this._catalog;
56
56
  const cached = this._loadCache();
57
- if (cached) { this._catalog = cached; return cached; }
58
- this._catalog = this._loadBundled();
59
- return this._catalog;
57
+ const bundled = this._loadBundled();
58
+ if (cached) {
59
+ // Merge bundled env_config/resolve_env into cached entries (cache may be stale)
60
+ for (const entry of cached) {
61
+ const b = bundled.find(x => x.name === entry.name);
62
+ if (b) {
63
+ if (!entry.env_config && b.env_config) entry.env_config = b.env_config;
64
+ if (!entry.resolve_env && b.resolve_env) entry.resolve_env = b.resolve_env;
65
+ if (!entry.install && b.install) entry.install = b.install;
66
+ }
67
+ }
68
+ this._catalog = cached;
69
+ return cached;
70
+ }
71
+ this._catalog = bundled;
72
+ return bundled;
60
73
  }
61
74
 
62
75
  /**
package/src/tui.js CHANGED
@@ -590,19 +590,17 @@ function createTUI() {
590
590
  style: { border: { fg: COLORS.accent }, bg: COLORS.surface },
591
591
  });
592
592
 
593
- blessed.text({ parent: dialog, top: 1, left: 2, tags: true, content: '{bold}Agent name:{/bold}' });
593
+ blessed.text({ parent: dialog, top: 1, left: 2, tags: true, content: `{bold}Agent name:{/bold} {gray-fg}(default: ${defaultName}){/gray-fg}` });
594
594
  const nameInput = blessed.textbox({
595
595
  parent: dialog, top: 2, left: 2, width: 50, height: 3,
596
596
  border: { type: 'line' }, inputOnFocus: true,
597
- value: defaultName,
598
597
  style: { focus: { border: { fg: COLORS.accent } }, border: { fg: 'grey' } },
599
598
  });
600
599
 
601
- blessed.text({ parent: dialog, top: 5, left: 2, tags: true, content: '{bold}Working directory:{/bold}' });
600
+ blessed.text({ parent: dialog, top: 5, left: 2, tags: true, content: `{bold}Working directory:{/bold} {gray-fg}(default: cwd){/gray-fg}` });
602
601
  const pathInput = blessed.textbox({
603
602
  parent: dialog, top: 6, left: 2, width: 50, height: 3,
604
603
  border: { type: 'line' }, inputOnFocus: true,
605
- value: defaultPath,
606
604
  style: { focus: { border: { fg: COLORS.accent } }, border: { fg: 'grey' } },
607
605
  });
608
606
 
@@ -627,9 +625,8 @@ function createTUI() {
627
625
 
628
626
  nameInput.key('enter', () => pathInput.focus());
629
627
  pathInput.key('enter', () => {
630
- const name = nameInput.getValue().trim();
631
- const agentPath = pathInput.getValue().trim();
632
- if (!name) { msg.setContent('{red-fg}Name is required{/red-fg}'); screen.render(); return; }
628
+ const name = nameInput.getValue().trim() || defaultName;
629
+ const agentPath = pathInput.getValue().trim() || defaultPath;
633
630
  close();
634
631
  callback({ name, type: agentType, path: agentPath });
635
632
  });
@@ -720,18 +717,21 @@ function createTUI() {
720
717
  parent: box, bottom: 0, left: 0, width: '100%', height: 1,
721
718
  tags: true,
722
719
  style: { bg: COLORS.footerBg, fg: COLORS.footerFg },
723
- content: ' {cyan-fg}Tab{/cyan-fg} Next field {cyan-fg}Ctrl+S{/cyan-fg} Save {cyan-fg}Ctrl+T{/cyan-fg} Test {cyan-fg}Esc{/cyan-fg} Back',
720
+ content: ' {cyan-fg}Enter{/cyan-fg} Next field {cyan-fg}Ctrl+S{/cyan-fg} Save {cyan-fg}Ctrl+T{/cyan-fg} Test {cyan-fg}Esc{/cyan-fg} Back',
724
721
  });
725
722
 
726
723
  screen.append(box);
727
724
  if (inputs.length > 0) inputs[0].focus();
728
725
  screen.render();
729
726
 
730
- // Tab between fields
727
+ // Enter moves to next field, last field triggers save
731
728
  for (let i = 0; i < inputs.length; i++) {
732
- inputs[i].key('tab', () => {
733
- const next = (i + 1) % inputs.length;
734
- inputs[next].focus();
729
+ inputs[i].key('enter', () => {
730
+ if (i < inputs.length - 1) {
731
+ inputs[i + 1].focus();
732
+ } else {
733
+ doSave();
734
+ }
735
735
  });
736
736
  }
737
737