@dmsdc-ai/aterm 0.1.12 → 0.1.13

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 (2) hide show
  1. package/bin/aterm.js +59 -0
  2. package/package.json +2 -2
package/bin/aterm.js CHANGED
@@ -4,9 +4,12 @@ import path from 'node:path';
4
4
  import { spawn } from 'node:child_process';
5
5
  import { fileURLToPath } from 'node:url';
6
6
  import {
7
+ detectAiCliStatus,
7
8
  ensureUserLayout,
8
9
  getUserAtermConfigPath,
9
10
  resolveAigentryConfig,
11
+ resolveInstallHomeDir,
12
+ updateConfigFile,
10
13
  } from '../lib/aigentry.js';
11
14
 
12
15
  const __filename = fileURLToPath(import.meta.url);
@@ -76,11 +79,67 @@ async function maybeRunFirstRunWizard() {
76
79
  await wizardModule.completeFirstRunWizard(context, wizardResult);
77
80
  }
78
81
 
82
+ async function maybeRunConfigMigration() {
83
+ const configPath = getUserAtermConfigPath();
84
+ if (!fs.existsSync(configPath)) return;
85
+
86
+ let config;
87
+ try {
88
+ config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
89
+ } catch { return; }
90
+
91
+ if (!config.setupCompleted) return;
92
+
93
+ const isTTY = process.stdin.isTTY && process.stdout.isTTY;
94
+ const cliStatus = detectAiCliStatus(resolveInstallHomeDir());
95
+ const patch = {};
96
+ const questions = [];
97
+
98
+ // Check each field individually — users from any version get prompted only for THEIR missing fields
99
+ if (!config.ai?.defaultCLI) {
100
+ questions.push({
101
+ type: 'select',
102
+ name: 'defaultCLI',
103
+ message: 'Default AI CLI for orchestrator workspace',
104
+ choices: [
105
+ { title: 'claude', value: 'claude', disabled: !cliStatus.claude },
106
+ { title: 'codex', value: 'codex', disabled: !cliStatus.codex },
107
+ { title: 'gemini', value: 'gemini', disabled: !cliStatus.gemini },
108
+ { title: 'none (plain zsh)', value: 'none' },
109
+ ],
110
+ initial: cliStatus.claude ? 0 : cliStatus.codex ? 1 : cliStatus.gemini ? 2 : 3,
111
+ });
112
+ }
113
+
114
+ if (questions.length === 0) return;
115
+
116
+ if (isTTY) {
117
+ try {
118
+ const prompts = (await import('prompts')).default;
119
+ const responses = await prompts(questions);
120
+ if (responses.defaultCLI) {
121
+ patch.ai = { ...config.ai, defaultCLI: responses.defaultCLI };
122
+ }
123
+ } catch { /* fall through to auto-detect */ }
124
+ }
125
+
126
+ // Auto-fill any fields not answered via prompt
127
+ if (!patch.ai?.defaultCLI && !config.ai?.defaultCLI) {
128
+ const auto = cliStatus.claude ? 'claude' : cliStatus.codex ? 'codex' : cliStatus.gemini ? 'gemini' : 'none';
129
+ patch.ai = { ...config.ai, ...patch.ai, defaultCLI: auto };
130
+ }
131
+
132
+ if (Object.keys(patch).length > 0) {
133
+ updateConfigFile(configPath, patch);
134
+ }
135
+ }
136
+
79
137
  if (process.argv.includes('--version') || process.argv.includes('-v')) {
80
138
  printVersionAndExit();
81
139
  }
82
140
 
83
141
  await maybeRunFirstRunWizard();
142
+ await maybeRunConfigMigration();
84
143
  const resolvedConfig = resolveAigentryConfig({ cwd: process.cwd() });
85
144
 
86
145
  if (!fs.existsSync(executable)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dmsdc-ai/aterm",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "description": "Native aterm launcher package",
5
5
  "type": "module",
6
6
  "main": "./bin/aterm.js",
@@ -17,7 +17,7 @@
17
17
  "package.json"
18
18
  ],
19
19
  "optionalDependencies": {
20
- "@dmsdc-ai/aterm-darwin-arm64": "0.1.12"
20
+ "@dmsdc-ai/aterm-darwin-arm64": "0.1.13"
21
21
  },
22
22
  "dependencies": {
23
23
  "@dmsdc-ai/aigentry-brain": "latest",