@nac3/forge-cli 0.2.0-alpha.17 → 0.2.0-alpha.19

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 (55) hide show
  1. package/dist/bin/yf.js +0 -0
  2. package/dist/chat/claude.d.ts +10 -0
  3. package/dist/chat/claude.d.ts.map +1 -1
  4. package/dist/chat/claude.js +15 -2
  5. package/dist/chat/claude.js.map +1 -1
  6. package/dist/chat/server.js +13 -0
  7. package/dist/chat/server.js.map +1 -1
  8. package/dist/commands/license.d.ts.map +1 -1
  9. package/dist/commands/license.js +41 -0
  10. package/dist/commands/license.js.map +1 -1
  11. package/dist/commands/operate.d.ts.map +1 -1
  12. package/dist/commands/operate.js +20 -7
  13. package/dist/commands/operate.js.map +1 -1
  14. package/dist/deploy/adapter.d.ts +93 -0
  15. package/dist/deploy/adapter.d.ts.map +1 -0
  16. package/dist/deploy/adapter.js +42 -0
  17. package/dist/deploy/adapter.js.map +1 -0
  18. package/dist/deploy/aws_adapter.d.ts +28 -0
  19. package/dist/deploy/aws_adapter.d.ts.map +1 -0
  20. package/dist/deploy/aws_adapter.js +65 -0
  21. package/dist/deploy/aws_adapter.js.map +1 -0
  22. package/dist/deploy/cloudflare.d.ts +24 -0
  23. package/dist/deploy/cloudflare.d.ts.map +1 -0
  24. package/dist/deploy/cloudflare.js +169 -0
  25. package/dist/deploy/cloudflare.js.map +1 -0
  26. package/dist/license/sync.d.ts +54 -0
  27. package/dist/license/sync.d.ts.map +1 -0
  28. package/dist/license/sync.js +131 -0
  29. package/dist/license/sync.js.map +1 -0
  30. package/dist/telemetry/usage.d.ts +67 -0
  31. package/dist/telemetry/usage.d.ts.map +1 -0
  32. package/dist/telemetry/usage.js +208 -0
  33. package/dist/telemetry/usage.js.map +1 -0
  34. package/dist/version.d.ts +1 -1
  35. package/dist/version.js +1 -1
  36. package/dist/voice/providers/google.d.ts.map +1 -1
  37. package/dist/voice/providers/google.js +11 -3
  38. package/dist/voice/providers/google.js.map +1 -1
  39. package/dist/voice/router.d.ts +10 -0
  40. package/dist/voice/router.d.ts.map +1 -1
  41. package/dist/voice/router.js +39 -20
  42. package/dist/voice/router.js.map +1 -1
  43. package/dist/voice/types.d.ts +5 -2
  44. package/dist/voice/types.d.ts.map +1 -1
  45. package/dist/voice/types.js.map +1 -1
  46. package/package.json +12 -14
  47. package/templates/nextjs-app/README.md +48 -0
  48. package/templates/nextjs-app/next.config.js +8 -0
  49. package/templates/nextjs-app/package.json +33 -0
  50. package/templates/nextjs-app/src/app/globals.css +43 -0
  51. package/templates/nextjs-app/src/app/layout.tsx +29 -0
  52. package/templates/nextjs-app/src/app/page.tsx +63 -0
  53. package/templates/nextjs-app/src/nac/manifest.ts +36 -0
  54. package/templates/nextjs-app/tsconfig.json +21 -0
  55. package/templates/nextjs-app/yujin.forge.json +11 -0
@@ -90,19 +90,47 @@ export class VoiceRouter {
90
90
  invalidate() {
91
91
  this.cachedConfig = null;
92
92
  }
93
+ /** Resolve an active provider for a kind ("stt" | "tts"). Auto-
94
+ * detect path: if the configured provider has credentials,
95
+ * use it. Otherwise scan all registered providers and pick the
96
+ * first one that is ready. This rescues the common case where
97
+ * BYOK setup only configured one provider (e.g. google) but the
98
+ * config still points to the default (e.g. whisper).
99
+ *
100
+ * Returns the resolved provider id + factory result. Throws
101
+ * with a clear message when NOTHING is ready. */
102
+ async resolveReadyProvider(kind, configured, registry) {
103
+ const factory = registry.get(configured);
104
+ if (factory) {
105
+ const provider = factory();
106
+ if (await provider.readyToRun())
107
+ return provider;
108
+ }
109
+ /* Configured provider has no credentials. Try the rest. */
110
+ const triedIds = [configured];
111
+ for (const [otherId, otherFactory] of registry.entries()) {
112
+ if (otherId === configured)
113
+ continue;
114
+ triedIds.push(otherId);
115
+ const candidate = otherFactory();
116
+ if (await candidate.readyToRun()) {
117
+ /* Inform via stderr -- the panel UI surfaces this via
118
+ * its status line so the user knows we degraded gracefully. */
119
+ // eslint-disable-next-line no-console
120
+ console.error('[voice-router] ' + kind + ' configured="' + configured
121
+ + '" has no credentials; using ready provider "' + otherId + '" instead. '
122
+ + 'Run `yf voice config` to set a permanent default.');
123
+ return candidate;
124
+ }
125
+ }
126
+ throw new Error('No ' + kind.toUpperCase() + ' provider is ready. Tried: ' + triedIds.join(', ') + '. '
127
+ + 'Run `yf keys setup` to configure brain + voice provider keys, '
128
+ + 'or `yf vault list` to inspect existing slots.');
129
+ }
93
130
  /** Resolve the active STT provider and pass the request to it. */
94
131
  async transcribe(req) {
95
132
  const config = await this.loadConfig();
96
- const factory = this.registry.stt.get(config.stt.provider);
97
- if (!factory) {
98
- throw new Error('No STT provider registered for "' + config.stt.provider
99
- + '". Run `yf voice config` to pick a different one.');
100
- }
101
- const provider = factory();
102
- if (!(await provider.readyToRun())) {
103
- throw new Error('STT provider "' + provider.id + '" is not ready. '
104
- + 'Missing credentials? Check `yf vault list` and ensure the slot for this provider is set.');
105
- }
133
+ const provider = await this.resolveReadyProvider('stt', config.stt.provider, this.registry.stt);
106
134
  const enriched = {
107
135
  ...req,
108
136
  ...(req.languageHint || config.stt.language
@@ -117,16 +145,7 @@ export class VoiceRouter {
117
145
  /** Resolve the active TTS provider and synthesize. */
118
146
  async synthesize(req) {
119
147
  const config = await this.loadConfig();
120
- const factory = this.registry.tts.get(config.tts.provider);
121
- if (!factory) {
122
- throw new Error('No TTS provider registered for "' + config.tts.provider
123
- + '". Run `yf voice config` to pick a different one.');
124
- }
125
- const provider = factory();
126
- if (!(await provider.readyToRun())) {
127
- throw new Error('TTS provider "' + provider.id + '" is not ready. '
128
- + 'Missing credentials? Check `yf vault list` and ensure the slot for this provider is set.');
129
- }
148
+ const provider = await this.resolveReadyProvider('tts', config.tts.provider, this.registry.tts);
130
149
  const enriched = {
131
150
  ...req,
132
151
  ...(req.voice || config.tts.voice
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/voice/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/voice/router.ts"],"names":[],"mappings":"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"}
@@ -46,8 +46,11 @@ export interface SttResponse {
46
46
  latency_ms: number;
47
47
  /** Provider id that handled the request. */
48
48
  provider: SttProviderId;
49
- /** Resolved model id. */
50
- model: string;
49
+ /** Resolved model id. Optional since 2026-05-31 -- providers may
50
+ * omit it when the caller did not request a specific model and
51
+ * the provider auto-selected internally (e.g. Google chooses
52
+ * the model from languageCode when `model` is not in the body). */
53
+ model?: string;
51
54
  }
52
55
  export interface TtsRequest {
53
56
  /** Plain text to synthesise. Provider must NOT execute SSML
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/voice/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/voice/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/voice/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAoHH,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC5B,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;CAC5B,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/voice/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAuHH,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC5B,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;CAC5B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nac3/forge-cli",
3
- "version": "0.2.0-alpha.17",
3
+ "version": "0.2.0-alpha.19",
4
4
  "description": "Yujin Forge -- voice-first NAC-3 React development framework. CLI + chat panel + spec ingest + 10-format document reader + voice loop.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": "Pablo Kuschnirof <pablo@rpaforce.com>",
@@ -15,17 +15,6 @@
15
15
  "exports": {
16
16
  ".": "./dist/index.js"
17
17
  },
18
- "scripts": {
19
- "build": "tsc",
20
- "dev": "tsx watch src/bin/yf.ts",
21
- "typecheck": "tsc --noEmit",
22
- "test": "vitest run",
23
- "test:watch": "vitest",
24
- "lint": "tsc --noEmit",
25
- "yf": "tsx src/bin/yf.ts",
26
- "catalog:lint": "node scripts/catalog_lint.mjs",
27
- "prepublishOnly": "pnpm run build && pnpm run typecheck && pnpm run catalog:lint && pnpm run test"
28
- },
29
18
  "dependencies": {
30
19
  "@anthropic-ai/sdk": "^0.32.1",
31
20
  "@aws-sdk/client-ecs": "^3.1053.0",
@@ -52,7 +41,6 @@
52
41
  "node": ">=18.17",
53
42
  "pnpm": ">=9"
54
43
  },
55
- "packageManager": "pnpm@11.3.0",
56
44
  "files": [
57
45
  "dist",
58
46
  "templates",
@@ -90,5 +78,15 @@
90
78
  "publishConfig": {
91
79
  "access": "public",
92
80
  "tag": "alpha"
81
+ },
82
+ "scripts": {
83
+ "build": "tsc",
84
+ "dev": "tsx watch src/bin/yf.ts",
85
+ "typecheck": "tsc --noEmit",
86
+ "test": "vitest run",
87
+ "test:watch": "vitest",
88
+ "lint": "tsc --noEmit",
89
+ "yf": "tsx src/bin/yf.ts",
90
+ "catalog:lint": "node scripts/catalog_lint.mjs"
93
91
  }
94
- }
92
+ }
@@ -0,0 +1,48 @@
1
+ # %%PROJECT_NAME%%
2
+
3
+ A Yujin Forge **Next.js (App Router)** starter, NAC-3 conformant by construction.
4
+
5
+ ## Stack
6
+
7
+ - **Next.js 15** with the App Router (`src/app/`).
8
+ - **React 18** + TypeScript 5.
9
+ - **@yujin/nac 2.3.x** -- NAC-3 runtime + manifest types.
10
+ - **Vitest** for unit tests, **Playwright** for e2e.
11
+
12
+ ## Why Next.js (vs the react-app starter)
13
+
14
+ Pick this starter when you need:
15
+ - Server-side rendering / streaming for SEO or fast first paint.
16
+ - Route-level code splitting + edge runtime.
17
+ - Built-in API routes (no separate backend yet).
18
+ - File-based routing (App Router conventions).
19
+
20
+ If you just want a SPA, the `react-app` template is leaner (Vite,
21
+ no server runtime, fastest dev).
22
+
23
+ ## Quick start
24
+
25
+ ```bash
26
+ npm install
27
+ npm run dev # http://localhost:3000
28
+ ```
29
+
30
+ ## Tests
31
+
32
+ ```bash
33
+ npm run test # Vitest unit tests
34
+ npm run test:e2e # Playwright e2e (requires `npx playwright install` once)
35
+ npm run typecheck # TypeScript strict mode
36
+ npm run lint # next lint (eslint-config-next)
37
+ ```
38
+
39
+ ## Yujin Forge integration
40
+
41
+ Open the project in `yf chat` to drive development via voice + chat:
42
+
43
+ ```bash
44
+ yf chat
45
+ ```
46
+
47
+ The chat panel reads `src/nac/manifest.ts` and exposes each
48
+ manifest element as a tool the AI can invoke.
@@ -0,0 +1,8 @@
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {
3
+ reactStrictMode: true,
4
+ /* NAC-3 attributes are non-standard data-* attributes; React 18+
5
+ * passes them through unchanged. No config needed. */
6
+ };
7
+
8
+ module.exports = nextConfig;
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "%%PROJECT_SLUG%%",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "description": "%%PROJECT_NAME%% -- Yujin Forge Next.js app (App Router), NAC-3 conformant by construction.",
6
+ "scripts": {
7
+ "dev": "next dev",
8
+ "build": "next build",
9
+ "start": "next start",
10
+ "test": "vitest run",
11
+ "test:watch": "vitest",
12
+ "test:e2e": "playwright test",
13
+ "lint": "next lint",
14
+ "typecheck": "tsc --noEmit",
15
+ "yf": "yf"
16
+ },
17
+ "dependencies": {
18
+ "next": "15.0.4",
19
+ "react": "18.3.1",
20
+ "react-dom": "18.3.1",
21
+ "@yujin/nac": "^2.3.0"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "22.10.2",
25
+ "@types/react": "18.3.18",
26
+ "@types/react-dom": "18.3.5",
27
+ "@playwright/test": "1.49.1",
28
+ "eslint": "9.17.0",
29
+ "eslint-config-next": "15.0.4",
30
+ "typescript": "5.7.2",
31
+ "vitest": "2.1.8"
32
+ }
33
+ }
@@ -0,0 +1,43 @@
1
+ :root {
2
+ --bg: #fafafa;
3
+ --fg: #1a1a1a;
4
+ --accent: #c0392b;
5
+ --border: #e0e0e0;
6
+ }
7
+
8
+ * { box-sizing: border-box; }
9
+
10
+ body {
11
+ margin: 0;
12
+ padding: 2rem;
13
+ font-family: ui-sans-serif, system-ui, -apple-system, sans-serif;
14
+ background: var(--bg);
15
+ color: var(--fg);
16
+ }
17
+
18
+ main {
19
+ max-width: 32rem;
20
+ margin: 0 auto;
21
+ }
22
+
23
+ h1 { font-weight: 500; margin-bottom: 1rem; }
24
+
25
+ input {
26
+ width: 70%;
27
+ padding: 0.5rem 0.75rem;
28
+ border: 1px solid var(--border);
29
+ border-radius: 0.25rem;
30
+ margin-right: 0.5rem;
31
+ }
32
+
33
+ button {
34
+ padding: 0.5rem 1rem;
35
+ background: var(--accent);
36
+ color: white;
37
+ border: none;
38
+ border-radius: 0.25rem;
39
+ cursor: pointer;
40
+ }
41
+
42
+ ul { list-style: none; padding: 0; margin: 1.5rem 0 0; }
43
+ li { padding: 0.5rem; border-bottom: 1px solid var(--border); }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Root layout for the App Router. Every route renders inside
3
+ * the <html> + <body> here, so this is where Yujin Pilot would
4
+ * inject its panel + NAC-3 runtime in a real project.
5
+ */
6
+ import type { Metadata, Viewport } from 'next';
7
+ import './globals.css';
8
+
9
+ export const metadata: Metadata = {
10
+ title: '%%PROJECT_NAME%%',
11
+ description: 'Built with Yujin Forge -- NAC-3 by construction.',
12
+ };
13
+
14
+ export const viewport: Viewport = {
15
+ width: 'device-width',
16
+ initialScale: 1,
17
+ };
18
+
19
+ export default function RootLayout({
20
+ children,
21
+ }: {
22
+ children: React.ReactNode;
23
+ }) {
24
+ return (
25
+ <html lang="es" data-nac-app="%%PROJECT_SLUG%%">
26
+ <body>{children}</body>
27
+ </html>
28
+ );
29
+ }
@@ -0,0 +1,63 @@
1
+ 'use client';
2
+ /**
3
+ * Home page -- a single-input todo list, decorated with NAC-3 attrs
4
+ * so the chat panel can drive it ("add task X", "mark task 1 done").
5
+ *
6
+ * Same shape as the react-app template's App.tsx, ported to the
7
+ * Next.js App Router. Client component because we use useState.
8
+ */
9
+ import { useState } from 'react';
10
+
11
+ interface Todo { id: number; text: string; done: boolean }
12
+
13
+ export default function Home() {
14
+ const [todos, setTodos] = useState<Todo[]>([]);
15
+ const [draft, setDraft] = useState('');
16
+
17
+ function addTodo(): void {
18
+ const text = draft.trim();
19
+ if (!text) return;
20
+ setTodos((cur) => [...cur, { id: Date.now(), text, done: false }]);
21
+ setDraft('');
22
+ }
23
+
24
+ function toggleTodo(id: number): void {
25
+ setTodos((cur) => cur.map((t) =>
26
+ t.id === id ? { ...t, done: !t.done } : t,
27
+ ));
28
+ }
29
+
30
+ return (
31
+ <main data-nac-id="todos.app">
32
+ <h1>%%PROJECT_NAME%%</h1>
33
+ <input
34
+ type="text"
35
+ value={draft}
36
+ onChange={(e) => setDraft(e.target.value)}
37
+ onKeyDown={(e) => { if (e.key === 'Enter') addTodo(); }}
38
+ data-nac-id="todos.input"
39
+ data-nac-role="field"
40
+ data-nac-action="input"
41
+ placeholder="New task..."
42
+ />
43
+ <button
44
+ onClick={addTodo}
45
+ data-nac-id="todos.add_button"
46
+ data-nac-role="action"
47
+ data-nac-action="add_todo"
48
+ >Add</button>
49
+ <ul data-nac-id="todos.list" data-nac-role="list">
50
+ {todos.map((t) => (
51
+ <li
52
+ key={t.id}
53
+ data-nac-id={'todos.item.' + t.id}
54
+ data-nac-role="item"
55
+ data-nac-state={t.done ? 'done' : 'pending'}
56
+ onClick={() => toggleTodo(t.id)}
57
+ style={{ textDecoration: t.done ? 'line-through' : 'none', cursor: 'pointer' }}
58
+ >{t.text}</li>
59
+ ))}
60
+ </ul>
61
+ </main>
62
+ );
63
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * NAC-3 manifest for the todos plugin. Same shape as the
3
+ * react-app template; the runtime reads this on boot and
4
+ * exposes each verb to agents + the chat panel.
5
+ *
6
+ * label_i18n covers the 10 NAC default locales.
7
+ */
8
+ import type { Manifest } from '@yujin/nac';
9
+
10
+ export const TODOS_MANIFEST: Manifest = {
11
+ plugin: 'todos',
12
+ version: '1.0.0',
13
+ elements: [
14
+ {
15
+ nac_id: 'todos.input',
16
+ role: 'field',
17
+ kind: 'text',
18
+ label_i18n: {
19
+ es: 'Nueva tarea', en: 'New task', pt: 'Nova tarefa',
20
+ fr: 'Nouvelle tache', de: 'Neue Aufgabe', it: 'Nuovo compito',
21
+ ja: 'New task', zh: 'New task', hi: 'New task',
22
+ ar: 'New task',
23
+ },
24
+ },
25
+ {
26
+ nac_id: 'todos.add_button',
27
+ role: 'action',
28
+ verb: 'add_todo',
29
+ label_i18n: {
30
+ es: 'Agregar', en: 'Add', pt: 'Adicionar', fr: 'Ajouter',
31
+ de: 'Add', it: 'Add', ja: 'Add', zh: 'Add',
32
+ hi: 'Add', ar: 'Add',
33
+ },
34
+ },
35
+ ],
36
+ };
@@ -0,0 +1,21 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "lib": ["dom", "dom.iterable", "esnext"],
5
+ "module": "esnext",
6
+ "moduleResolution": "bundler",
7
+ "jsx": "preserve",
8
+ "strict": true,
9
+ "noEmit": true,
10
+ "esModuleInterop": true,
11
+ "skipLibCheck": true,
12
+ "allowJs": true,
13
+ "incremental": true,
14
+ "resolveJsonModule": true,
15
+ "isolatedModules": true,
16
+ "plugins": [{ "name": "next" }],
17
+ "paths": { "@/*": ["./src/*"] }
18
+ },
19
+ "include": ["next-env.d.ts", "src/**/*.ts", "src/**/*.tsx"],
20
+ "exclude": ["node_modules", ".next"]
21
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "$schema": "https://yujin.app/schemas/yujin.forge.json",
3
+ "project_slug": "%%PROJECT_SLUG%%",
4
+ "project_name": "%%PROJECT_NAME%%",
5
+ "forge_version": "0.1.0",
6
+ "nac_version": "2.3.x",
7
+ "license_ref": "%%LICENSE_REF%%",
8
+ "framework": "nextjs",
9
+ "telemetry": { "opt_out": false },
10
+ "generate": { "tests": true, "mocks": true }
11
+ }