@atlasnomos/atlas 1.1.5 → 1.1.8

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/atlas.js CHANGED
@@ -117,7 +117,7 @@ const { ModelsCommand } = require('./src/interface/cli/commands/ModelsCommand');
117
117
 
118
118
  // PHASE 4: Setup Flow Interception
119
119
  const command = rawArgs[0] || 'doctor';
120
- const isSetupCommand = ['init', 'help', '--help', '-h', '--version', '-v'].includes(command);
120
+ const isSetupCommand = ['init', 'help', '--help', '-h', '--version', '-v', 'config'].includes(command);
121
121
 
122
122
  let context;
123
123
  if (isSetupCommand) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlasnomos/atlas",
3
- "version": "1.1.5",
3
+ "version": "1.1.8",
4
4
  "description": "Production-grade AI governance kernel for autonomous agents with fail-closed security and cryptographic audit trails",
5
5
  "main": "atlas.js",
6
6
  "bin": {
@@ -80,6 +80,7 @@
80
80
  },
81
81
  "devDependencies": {
82
82
  "@types/express": "5.0.6",
83
+ "@types/node": "^18.19.74",
83
84
  "@types/node-fetch": "2.6.13",
84
85
  "axios-mock-adapter": "1.22.0",
85
86
  "chai": "4.3.10",
@@ -1,49 +1,121 @@
1
1
  /**
2
- * ATLAS V1 — Init Command
3
- * Initialized Model Configuration Plane artifacts
2
+ * ATLAS V1 — Init Command (Interactive)
3
+ * Initialized Model Configuration Plane and Environment setup
4
4
  */
5
5
 
6
6
  const fs = require('fs');
7
7
  const path = require('path');
8
+ const { Input, Password } = require('enquirer');
8
9
 
9
10
  class InitCommand {
10
11
  constructor() { }
11
12
 
12
13
  async execute(args) {
13
- console.log(' → Initializing ATLAS Model Configuration Plane...');
14
+ console.log('\n╔═══════════════════════════════════════════════════════════════╗');
15
+ console.log('║ ATLAS Governance Kernel — Setup Wizard ║');
16
+ console.log('╚═══════════════════════════════════════════════════════════════╝\n');
14
17
 
15
- const targetPath = path.join(process.cwd(), 'atlas.models.json');
18
+ const envPath = path.join(process.cwd(), '.env');
19
+ const modelsPath = path.join(process.cwd(), 'atlas.models.json');
16
20
 
17
- if (fs.existsSync(targetPath)) {
18
- console.log(' atlas.models.json already exists. Skipping creation.');
19
- } else {
20
- const template = {
21
- "version": "1.0",
22
- "default_provider": "openrouter",
23
- "roles": {
24
- "generator": {
25
- "model": "anthropic/claude-3-sonnet",
26
- "temperature": 0.2,
27
- "max_tokens": 4096,
28
- "risk_limit": 2
29
- },
30
- "reviewer": {
31
- "model": "openai/gpt-4o",
32
- "temperature": 0.1,
33
- "max_tokens": 2048,
34
- "risk_limit": 1
35
- }
21
+ // 1. Collect API Keys
22
+ console.log(' [1/3] Configuring Provider Credentials...');
23
+
24
+ let existingEnv = {};
25
+ if (fs.existsSync(envPath)) {
26
+ const content = fs.readFileSync(envPath, 'utf8');
27
+ content.split('\n').forEach(line => {
28
+ const [k, v] = line.split('=');
29
+ if (k) existingEnv[k.trim()] = (v || '').trim();
30
+ });
31
+ }
32
+
33
+ const keys = {
34
+ OPENROUTER_API_KEY: await new Password({
35
+ message: 'Enter OpenRouter API Key (Recommended)',
36
+ initial: existingEnv.OPENROUTER_API_KEY || ''
37
+ }).run(),
38
+ ANTHROPIC_API_KEY: await new Password({
39
+ message: 'Enter Anthropic API Key (Optional)',
40
+ initial: existingEnv.ANTHROPIC_API_KEY || ''
41
+ }).run(),
42
+ OPENAI_API_KEY: await new Password({
43
+ message: 'Enter OpenAI API Key (Optional)',
44
+ initial: existingEnv.OPENAI_API_KEY || ''
45
+ }).run()
46
+ };
47
+
48
+ // 2. Save .env
49
+ let envContent = '# ATLAS Environment Configuration\n';
50
+ for (const [k, v] of Object.entries(keys)) {
51
+ if (v) envContent += `${k}=${v}\n`;
52
+ }
53
+
54
+ // Preserve other env vars
55
+ for (const [k, v] of Object.entries(existingEnv)) {
56
+ if (!keys.hasOwnProperty(k)) {
57
+ envContent += `${k}=${v}\n`;
58
+ }
59
+ }
60
+
61
+ fs.writeFileSync(envPath, envContent, 'utf8');
62
+ console.log(' ✓ Saved .env');
63
+
64
+ // 3. Configure Roles
65
+ console.log('\n [2/3] Initializing Mandatory Role Bindings...');
66
+
67
+ const template = {
68
+ "version": "1.0",
69
+ "default_provider": keys.OPENROUTER_API_KEY ? "openrouter" : "anthropic",
70
+ "roles": {
71
+ "planner": {
72
+ "model": "anthropic/claude-3-sonnet",
73
+ "temperature": 0.1,
74
+ "max_tokens": 4096,
75
+ "risk_limit": 1
76
+ },
77
+ "generator": {
78
+ "model": "anthropic/claude-3-sonnet",
79
+ "temperature": 0.2,
80
+ "max_tokens": 4096,
81
+ "risk_limit": 2
82
+ },
83
+ "reviewer": {
84
+ "model": "openai/gpt-4o",
85
+ "temperature": 0.1,
86
+ "max_tokens": 2048,
87
+ "risk_limit": 1
36
88
  },
37
- "overrides": {
38
- "ENV_DEVELOPMENT": true
89
+ "fixer": {
90
+ "model": "anthropic/claude-3-sonnet",
91
+ "temperature": 0.1,
92
+ "max_tokens": 4096,
93
+ "risk_limit": 1
39
94
  }
40
- };
95
+ },
96
+ "overrides": {
97
+ "ENV_DEVELOPMENT": true
98
+ }
99
+ };
41
100
 
42
- fs.writeFileSync(targetPath, JSON.stringify(template, null, 4), 'utf8');
101
+ if (fs.existsSync(modelsPath)) {
102
+ console.log(' ⚠ atlas.models.json already exists. Merge not supported yet. skipping.');
103
+ } else {
104
+ fs.writeFileSync(modelsPath, JSON.stringify(template, null, 4), 'utf8');
43
105
  console.log(' ✓ Created atlas.models.json');
44
106
  }
45
107
 
46
- console.log(' ✓ Initialization complete.');
108
+ // 4. Finalize
109
+ console.log('\n [3/3] Finalizing Workspace...');
110
+ const logsDir = path.join(process.cwd(), '.atlas', 'logs');
111
+ if (!fs.existsSync(logsDir)) {
112
+ fs.mkdirSync(logsDir, { recursive: true });
113
+ }
114
+ console.log(' ✓ Initialized .atlas/ directory');
115
+
116
+ console.log('\n ✨ ATLAS Initialization Complete!');
117
+ console.log(' Run "atlas doctor" to verify your connection.\n');
118
+
47
119
  return true;
48
120
  }
49
121
  }