nothumanallowed 14.4.8 → 14.4.9

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": "nothumanallowed",
3
- "version": "14.4.8",
3
+ "version": "14.4.9",
4
4
  "description": "NotHumanAllowed — 38 AI agents, 80 tools, Studio (visual agentic workflows). Email, calendar, browser automation, screen capture, canvas, cron/heartbeat, Alexandria E2E messaging, GitHub, Notion, Slack, voice chat, free AI (Liara), 28 languages. Zero-dependency CLI.",
5
5
  "type": "module",
6
6
  "bin": {
package/src/constants.mjs CHANGED
@@ -5,7 +5,7 @@ import { fileURLToPath } from 'url';
5
5
  const __filename = fileURLToPath(import.meta.url);
6
6
  const __dirname = path.dirname(__filename);
7
7
 
8
- export const VERSION = '14.4.8';
8
+ export const VERSION = '14.4.9';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -1542,15 +1542,13 @@ Continue from here:`;
1542
1542
  };
1543
1543
  fs.writeFileSync(ProjectStore.metaPath(projectName), JSON.stringify(meta, null, 2), 'utf-8');
1544
1544
 
1545
- // Initialize skill context files (memory.md, skills.md, provider.md)
1546
- SkillStore.ensureDefaults(projectName, config);
1547
- const ctxDir = SkillStore.dir(projectName);
1548
-
1549
- // Generate detailed skills.md with project context knowledge structure (first time only)
1550
- const skillsFile = path.join(ctxDir, 'skills.md');
1551
- const skillsContent = fs.existsSync(skillsFile) ? fs.readFileSync(skillsFile, 'utf-8') : '';
1552
- if (skillsContent.length < 100) {
1553
- const detailedSkills = `# ${projectName} — Skills & Knowledge Structure
1545
+ // Write changes log
1546
+ {
1547
+ const logCtxDir = SkillStore.dir(projectName);
1548
+ const skillsFile = path.join(logCtxDir, 'skills.md');
1549
+ const skillsContent = fs.existsSync(skillsFile) ? fs.readFileSync(skillsFile, 'utf-8') : '';
1550
+ if (skillsContent.length < 100) {
1551
+ const detailedSkills = `# ${projectName} Skills & Knowledge Structure
1554
1552
 
1555
1553
  ## Context Discovery Strategy
1556
1554
 
@@ -1588,15 +1586,15 @@ Agents score context relevance based on:
1588
1586
 
1589
1587
  This approach ensures agents have the right context without being overwhelmed by irrelevant information.
1590
1588
  `;
1591
- fs.writeFileSync(skillsFile, detailedSkills, 'utf-8');
1589
+ fs.writeFileSync(skillsFile, detailedSkills, 'utf-8');
1590
+ }
1591
+ const logProvider = config.llm?.provider || 'nha';
1592
+ const logModel = config.llm?.model || '';
1593
+ const logFile = path.join(logCtxDir, 'changes.log.md');
1594
+ const logEntry = `## ${new Date().toISOString().slice(0, 10)} — Initial generation\n- Generated ${generatedFiles.length} files\n- Tokens in: ${totalTokensIn} / out: ${totalTokensOut}\n- Description: ${description}\n- Provider: ${logProvider} (${logModel || 'default'})\n`;
1595
+ fs.writeFileSync(logFile, (fs.existsSync(logFile) ? fs.readFileSync(logFile, 'utf-8') : '') + logEntry, 'utf-8');
1592
1596
  }
1593
1597
 
1594
- const provider = config.llm?.provider || 'nha';
1595
- const model = config.llm?.model || '';
1596
- const logFile = path.join(ctxDir, 'changes.log.md');
1597
- const logEntry = `## ${new Date().toISOString().slice(0, 10)} — Initial generation\n- Generated ${generatedFiles.length} files\n- Tokens in: ${totalTokensIn} / out: ${totalTokensOut}\n- Description: ${description}\n- Provider: ${provider} (${model || 'default'})\n`;
1598
- fs.writeFileSync(logFile, (fs.existsSync(logFile) ? fs.readFileSync(logFile, 'utf-8') : '') + logEntry, 'utf-8');
1599
-
1600
1598
  emit({ type: 'done', tokIn: totalTokensIn, tokOut: totalTokensOut });
1601
1599
  }
1602
1600
 
package/src/server/ws.mjs CHANGED
@@ -22,7 +22,7 @@ let wssTerminal = null;
22
22
 
23
23
  export function setupWebSocket(server) {
24
24
  // ── Main WS — daemon events + version ──
25
- wss = new WebSocketServer({ server, path: '/api' });
25
+ wss = new WebSocketServer({ server, path: '/ws' });
26
26
 
27
27
  wss.on('connection', async (ws) => {
28
28
  const { VERSION } = await import('../constants.mjs');
@@ -40,7 +40,7 @@ export function setupWebSocket(server) {
40
40
  });
41
41
 
42
42
  // ── Terminal WS — interactive shell ──
43
- wssTerminal = new WebSocketServer({ server, path: '/api/terminal' });
43
+ wssTerminal = new WebSocketServer({ server, path: '/ws/terminal' });
44
44
 
45
45
  wssTerminal.on('connection', (ws, req) => {
46
46
  // Parse project from query: /api/terminal?cwd=ProjectName