@deerdesign/deertools 1.2.27 → 1.2.32

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/README.md CHANGED
@@ -19,14 +19,6 @@ Log in once from your computer, and grant your AI coding agent (Antigravity, Cur
19
19
 
20
20
  ---
21
21
 
22
- ## 📊 Prezentacja dla Zespołu IT
23
-
24
- Dedykowana prezentacja architektoniczna i wdrożeniowa dla zespołów deweloperskich i DevOps:
25
- - 🌐 **[Slajdy interaktywne HTML (Reveal.js)](./docs/prezentacja-it-deertools.html)** — uruchom w dowolnej przeglądarce (`Space` / strzałki do nawigacji, `Esc` do widoku miniatur kafelkowych, `Cmd+P` do druku/eksportu PDF).
26
- - 📝 **[Wersja tekstowa Markdown](./docs/prezentacja-it-deertools.md)** — do szybkiego czytania bezpośrednio w GitHubie.
27
-
28
- ---
29
-
30
22
  ## Installation
31
23
 
32
24
  Requires **Node.js ≥ 18**. Zero runtime dependencies.
@@ -140,14 +132,14 @@ deertools doctor --json
140
132
  deertools completion install # automatically configures ~/.zshrc or ~/.bashrc
141
133
 
142
134
  # 3. BaseLinker Hub & MCP Proxy:
143
- deertools baselinker auth <X-BLToken> # Zapisz token w credentials.json
144
- deertools baselinker test # Sprawdź połączenie i listę katalogów
145
- deertools baselinker serve --port 3456 # Uruchom lokalny dashboard Web UI + MCP SSE
146
- deertools baselinker mcp # Mostek MCP stdio (Cursor / Claude Desktop)
147
- deertools baselinker sync-schema # Pobierz 204 metod z api.baselinker.com
148
- deertools baselinker search "relations" # Wyszukaj metody i schematy parametrów
149
- deertools baselinker call getOrders # Bezpośrednie wywołanie API z terminala
150
- deertools baselinker catalog search 105 "dąb" # Wyszukaj produkty w katalogu BaseLinkera
135
+ deertools baselinker auth <X-BLToken> # Save BaseLinker token to credentials.json
136
+ deertools baselinker test # Test authorization and list product catalogs
137
+ deertools baselinker serve --port 3456 # Launch local Web UI dashboard + MCP SSE server
138
+ deertools baselinker mcp # Stdio MCP bridge (Cursor / Claude Desktop)
139
+ deertools baselinker sync-schema # Download and refresh 204 API methods from api.baselinker.com
140
+ deertools baselinker search "relations" # Search BaseLinker methods and parameter schemas
141
+ deertools baselinker call getOrders # Direct API method execution from terminal
142
+ deertools baselinker catalog search 105 "oak" # Search products in BaseLinker catalog
151
143
 
152
144
  # 4. Local Stdio MCP Bridge (for Claude Desktop, Ollama, local LLM tools):
153
145
  deertools mcp serve
@@ -161,34 +153,34 @@ deertools profile list
161
153
  deertools profile use staging
162
154
 
163
155
  # 7. AI Agent Skills (DeerSkills Hub):
164
- deertools skill list # Wyświetl listę skilli ze statusem zainstalowania w projekcie
165
- deertools skill sync # Pobiera i aktualizuje skille z Hubu (chroni lokalne nowości)
166
- deertools sync --push # Pełny sync dwukierunkowy: pobiera nowości + automatycznie wypycha lokalne skille
167
- deertools skill install --all # To samo co skill sync (pełna synchronizacja zespołu)
168
- deertools skill install deer-kosztorys # Zainstaluj konkretny skill w ~/.gemini/antigravity/skills lub .agents
156
+ deertools skill list # View list of skills with installation status across agents
157
+ deertools skill sync # Pull and update skills from Hub (protects local changes)
158
+ deertools sync --push # Full two-way sync: pull updates + push newer local skills to Hub
159
+ deertools skill install --all # Alias for skill sync (full team synchronization)
160
+ deertools skill install deer-kosztorys # Install specific skill to detected AI agent environments
169
161
  deertools skill install deer-kosztorys --version 1.0.0
170
- deertools skill search "kosztorys" # Wyszukaj skille po nazwie, tagu lub opisie
171
- deertools skill push ./my-skill # Opublikuj nową wersję z automatycznym skanerem sekretów
172
- deertools skill push ./my-skill --tags "wycena, kosztorys, marże" # Dodaj tagi przy publikacji
173
- deertools skill push ./my-skill --team architekci # Publikacja bezpośrednio do zespołu
174
- deertools skill share my-skill --team architekci # Udostępnij skill dla wskazanego zespołu
175
- deertools skill share my-skill --private # Cofnij udostępnienie (tylko dla autora)
176
- deertools skill update deer-kosztorys # Zaktualizuj zainstalowany skill do najnowszej wersji
177
- deertools skill update # Zaktualizuj wszystkie zainstalowane skille
178
- deertools skill promote my-skill # Zgłoś wniosek do admina o nominację do globalnego katalogu
179
-
180
- # 8. Team Management (Konfiguracja Zespołów):
181
- deertools team list # Lista zespołów, liczba członków i skilli
182
- deertools team members architekci # Członkowie i role w zespole architekci
183
- deertools team add architekci jan@deer.pl # Dodaj członka do zespołu (rola member)
184
- deertools team add architekci ewa@deer.pl --role lead # Dodaj lidera zespołu
185
- deertools team remove architekci jan@deer.pl # Usuń członka z zespołu
186
- deertools team create "Projektanci Wnętrz" --slug projektanci # Utwórz nowy zespół
162
+ deertools skill search "pricing" # Search skills by keyword, tag, or description
163
+ deertools skill push ./my-skill # Publish new version with automated secret scanning
164
+ deertools skill push ./my-skill --tags "pricing, margins, design" # Attach tags upon publish
165
+ deertools skill push ./my-skill --team architects # Publish directly to specific team space
166
+ deertools skill share my-skill --team architects # Share private skill with team members
167
+ deertools skill share my-skill --private # Revoke sharing (private to author only)
168
+ deertools skill update deer-kosztorys # Update installed skill to latest Hub version
169
+ deertools skill update # Update all installed skills across agents
170
+ deertools skill promote my-skill # Submit promotion request to company-wide global registry
171
+
172
+ # 8. Team Management:
173
+ deertools team list # List teams, member counts, and assigned skills
174
+ deertools team members architects # List members and roles in the architects team
175
+ deertools team add architects john@deer.pl # Add user to team (member role)
176
+ deertools team add architects eva@deer.pl --role lead # Add team lead
177
+ deertools team remove architects john@deer.pl # Remove member from team
178
+ deertools team create "Interior Designers" --slug designers # Create new organization team
187
179
 
188
180
  # 9. AI Agent MCP Registry & Configuration:
189
- deertools mcp list # Lista dostępnych serwerów MCP w ekosystemie
190
- deertools mcp config # Wygeneruj konfigurację JSON dla Cursor, Claude, Antigravity
191
- deertools mcp install # Automatycznie dopisz konfigurację do narzędzi AI
181
+ deertools mcp list # List available MCP servers across the ecosystem
182
+ deertools mcp config # Generate Remote MCP JSON config for Cursor, Claude, Antigravity
183
+ deertools mcp install # Automatically write MCP config to local AI agents
192
184
  ```
193
185
 
194
186
  ---
@@ -220,28 +212,28 @@ deertools mcp install # Automatycznie dopisz konfiguracj
220
212
 
221
213
  ## DeerSkills Hub & MCP Ecosystem
222
214
 
223
- **DeerSkills Hub** (`https://skills.deergroup.pl`) to centralna platforma dystrybucji, wersjonowania i zarządzania umiejętnościami agentów AI (Skills) oraz serwerami MCP w ekosystemie Deer Design:
224
-
225
- 1. **Trzypoziomowa Struktura Uprawnień i Widoczności**:
226
- - **Oficjalne Skille Firmowe (`global`)**: Zweryfikowane narzędzia firmowe, widoczne dla wszystkich pracowników w organizacji, instalowane domyślnie.
227
- - **Skille Zespołowe (`team`)**: Dedykowane dla konkretnego zespołu (np. Architekci, Doradcy Klienta, Kosztorysy, Logistyka, IT-Dev). Widoczne i instalowalne **wyłącznie** przez członków danego zespołu. Zespoły i role są w pełni konfigurowalne przez `deertools team` oraz portal Web.
228
- - **Prywatne Skille Użytkownika (`user`)**: Każdy pracownik publikuje pod własną przestrzenią `@uzytkownik/nazwa-skilla`. Są w 100% prywatne (niewidoczne dla innych), dopóki autor nie zdecyduje się ich udostępnić swojemu zespołowi (`deertools skill share --team <slug>`) lub zgłosić do publikacji globalnej (`deertools skill promote`).
229
- 2. **Automatyczny Skaner Sekretów**:
230
- - Każde wywołanie `deertools skill push` automatycznie skanuje pliki skilla w poszukiwaniu niebezpiecznych tokenów (`deer_*_live_`, `ghp_`, `sk-`, `X-BLToken`, haseł).
231
- - Próba wysłania niezanominizowanych kluczy kończy się natychmiastową blokadą z kodem błędu i listą wykrytych linii.
232
- 3. **Wersjonowanie SemVer i Wizualny Diff**:
233
- - Zmiany są wersjonowane (`1.0.0` -> `1.0.1` -> `1.1.0`).
234
- - W portalu Web dostępny jest interaktywny widok Side-by-Side Diff porównujący wersje.
235
- - CLI wspiera flagę `--bump patch|minor|major` przy publikacji.
236
- 4. **Śledzenie Zależności (`.deertools-lock.json`)**:
237
- - Zainstalowane skille są rejestrowane w pliku blokady z sumą kontrolną SHA-256 i zainstalowaną wersją.
238
- - `deertools doctor` automatycznie wykrywa nieaktualne skille i proponuje aktualizację przez `deertools skill update`.
239
- 5. **Ścieżka Awansu ("Nominuj do Globalnych")**:
240
- - Użytkownicy mogą promować swoje prywatne lub zespołowe skille do oficjalnego katalogu firmowego komendą `deertools skill promote <slug>`.
241
- - Administrator weryfikuje zgłoszenie w panelu `/settings` i zatwierdza jednym kliknięciem.
242
- 6. **Integracja z Narzędziami AI (Cursor / Antigravity / Claude)**:
243
- - DeerSkills udostępnia własny serwer MCP (`https://skills.deergroup.pl/functions/v1/skills-mcp`) implementujący specyfikację MCP 2024-11-05.
244
- - Narzędzia: `hub_search_skills`, `hub_get_skill`, `hub_publish_skill_version`, `hub_list_mcp_servers`, `hub_get_ecosystem_products`.
215
+ **DeerSkills Hub** (`https://skills.deergroup.pl`) is the central platform for distributing, versioning, and managing AI Agent Skills and MCP servers across the Deer Design ecosystem:
216
+
217
+ 1. **Three-Tier Scope & Permission Model**:
218
+ - **Company-Wide Official Skills (`global`)**: Verified organization-wide tools, visible to all employees, installed by default during agent initialization.
219
+ - **Team-Scoped Skills (`team`)**: Dedicated to specific functional teams (e.g., Architects, Sales Advisors, Estimators, Logistics, IT-Dev). Visible and installable **strictly** by members of that team. Teams and roles are fully configurable via `deertools team` and the web portal.
220
+ - **User Private Skills (`user`)**: Every employee can publish in their personal namespace `@username/skill-slug`. These remain 100% private until the author explicitly shares them with their team (`deertools skill share --team <slug>`) or submits them for global promotion (`deertools skill promote`).
221
+ 2. **Automated Secret Scanner**:
222
+ - Every `deertools skill push` runs a comprehensive regex scanner for live tokens and API keys (`deer_*_live_`, `ghp_`, `sk-`, `X-BLToken`, passwords).
223
+ - Any unredacted secrets trigger an immediate safety halt with specific line citations, preventing credential leakage before upload.
224
+ 3. **SemVer Versioning & Visual Diff**:
225
+ - All revisions follow Semantic Versioning (`1.0.0` -> `1.0.1` -> `1.1.0`).
226
+ - The web portal features an interactive side-by-side visual diff comparing file trees and `SKILL.md` content between releases.
227
+ - CLI supports `--bump patch|minor|major` or explicit version flags.
228
+ 4. **Dependency Tracking (`.deertools-lock.json`)**:
229
+ - Installed skills are tracked locally in `.deertools-lock.json` with SHA-256 integrity checksums and installed timestamps.
230
+ - `deertools doctor` and `deertools skill check` detect outdated skills and prompt for automated updates.
231
+ 5. **Promotion Pipeline ("Nominate to Global")**:
232
+ - Authors can promote individual or team skills to the official company catalog via `deertools skill promote <slug>`.
233
+ - Administrators review peer requests in the management dashboard and approve with one click.
234
+ 6. **AI Agent Tooling Integration (Cursor / Antigravity / Claude)**:
235
+ - DeerSkills Hub exposes a dedicated Remote MCP server (`https://skills.deergroup.pl/functions/v1/skills-mcp`) compliant with the MCP 2024-11-05 standard.
236
+ - Tools include: `hub_search_skills`, `hub_get_skill`, `hub_publish_skill_version`, `hub_list_mcp_servers`, `hub_get_ecosystem_products`.
245
237
 
246
238
  ---
247
239
 
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@deerdesign/deertools",
3
- "version": "1.2.27",
3
+ "version": "1.2.32",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org/"
7
7
  },
8
- "description": "DeerTools CLI: logowanie z laptopa i dostęp agenta AI do API produktów DeerTools (Kosztorys, Katalog, Dostawy, Supplier Hub, RenderMind)",
8
+ "description": "DeerTools CLI: Developer authentication and AI agent access for DeerTools product APIs (Estimate, Catalog, Deliveries, Supplier Hub, RenderMind, DeerSkills)",
9
9
  "bin": {
10
10
  "deertools": "bin/deertools.js",
11
11
  "deer": "bin/deertools.js"
@@ -13,7 +13,8 @@
13
13
  "main": "./src/cli.js",
14
14
  "scripts": {
15
15
  "start": "node ./bin/deertools.js",
16
- "test": "node --test"
16
+ "test": "node --test",
17
+ "install:local": "mkdir -p ~/.local/share/deertools && rsync -av --delete ./ ~/.local/share/deertools/ --exclude node_modules --exclude .git && ln -sf ~/.local/share/deertools/bin/deertools.js ~/.local/bin/deertools && ln -sf ~/.local/share/deertools/bin/deertools.js ~/.local/bin/deer"
17
18
  },
18
19
  "keywords": [
19
20
  "deerdesign",
@@ -1,32 +1,29 @@
1
1
  'use strict';
2
2
  const { getClient } = require('./baselinker/client');
3
3
  const { getBaseLinkerToken, saveBaseLinkerToken } = require('./credentials');
4
- const { startBaseLinkerServer } = require('./baselinker/ui');
5
4
  const { runBaseLinkerMcpServer } = require('./baselinker/mcp-server');
6
- const { syncSchema, searchMethods, loadSchemas } = require('./baselinker/crawler');
7
- const { handleCatalogToolCall } = require('./baselinker/catalog-tools');
8
- const { formatTable, c } = require('./formatters');
5
+ const { syncSchema } = require('./baselinker/crawler');
6
+ const { c } = require('./formatters');
9
7
 
10
8
  async function cmdBaseLinker(pos, flags) {
11
9
  const sub = pos.shift() || 'help';
12
10
 
13
11
  if (sub === 'help') {
14
12
  process.stdout.write(`
15
- DeerTools BaseLinker — MCP Proxy, Hub & Catalog Engine
13
+ DeerTools BaseLinker — Autoryzacja i Mostek MCP (deer-baselinker)
16
14
 
17
- Komendy:
15
+ Komendy administracyjne CLI:
16
+ deertools login baselinker Logowanie przez przeglądarkę i zapis tokenu w credentials.json.
18
17
  deertools baselinker auth [token] Zapisuje token API BaseLinker (X-BLToken) w credentials.json.
19
18
  deertools baselinker test Testuje połączenie z BaseLinker API i pobiera listę katalogów.
20
- deertools baselinker serve [--port 3456] Uruchamia lokalny serwer Web UI z dashboardem i proxy MCP SSE.
21
- deertools baselinker mcp [--all] Uruchamia serwer MCP stdio dla Cursor / Claude Desktop.
22
- deertools baselinker sync-schema Pobiera i aktualizuje bazę wszystkich 204 metod z api.baselinker.com.
23
- deertools baselinker search <fraza> Przeszukuje bazę 204 metod BaseLinkera i zwraca ich parametry.
24
- deertools baselinker call <metoda> [json] Wywołuje dowolną metodę BaseLinkera bezpośrednio z terminala.
25
- deertools baselinker catalog search <id> Wyszukuje produkty w katalogu BaseLinker.
26
- deertools baselinker catalog get <inv> <p> Pobiera pełne dane produktu (w tym relacje, cechy, galerię).
27
-
28
- Zmienne środowiskowe:
29
- BASELINKER_TOKEN lub BL_TOKEN Klucz API BaseLinkera (ma pierwszeństwo przed plikiem).
19
+ deertools baselinker mcp [--all] Uruchamia serwer MCP stdio dla Cursor / Antigravity / Claude Desktop.
20
+ deertools baselinker sync-schema Aktualizuje lokalną bazę schematów metod z api.baselinker.com.
21
+
22
+ Zgodnie ze standardem architektonicznym DeerTools CLI:
23
+ - Operacje biznesowe i katalogowe wykonuje Agent AI wyłącznie przez serwer MCP (deer-baselinker):
24
+ * bl_catalog_search_products, bl_catalog_get_product, bl_catalog_create_or_update_product
25
+ * bl_catalog_set_descriptions_and_features, bl_catalog_manage_images, bl_catalog_set_relations
26
+ * bl_catalog_categories, bl_catalog_manufacturers, bl_catalog_tags, bl_search_methods, bl_call_api
30
27
  `);
31
28
  return;
32
29
  }
@@ -46,7 +43,6 @@ Zmienne środowiskowe:
46
43
  saveBaseLinkerToken(token);
47
44
  process.stdout.write(`${c.green}✓ Zapisano token BaseLinker w credentials.json (uprawnienia 0600).${c.reset}\n`);
48
45
 
49
- // Szybki test
50
46
  process.stdout.write('Testowanie autoryzacji...\n');
51
47
  const client = getClient(token);
52
48
  const test = await client.testConnection();
@@ -61,7 +57,7 @@ Zmienne środowiskowe:
61
57
  if (sub === 'test') {
62
58
  const token = getBaseLinkerToken();
63
59
  if (!token) {
64
- throw new Error('Brak zapisanego tokenu BaseLinker. Wpisz: deertools baselinker auth <token>');
60
+ throw new Error('Brak zapisanego tokenu BaseLinker. Wpisz: deertools login baselinker');
65
61
  }
66
62
  const client = getClient(token);
67
63
  process.stdout.write('Testowanie połączenia z https://api.baselinker.com/connector.php...\n');
@@ -82,13 +78,6 @@ Zmienne środowiskowe:
82
78
  return;
83
79
  }
84
80
 
85
- if (sub === 'serve') {
86
- const port = parseInt(flags.port || 3456, 10);
87
- startBaseLinkerServer(port);
88
- // Trzymaj proces przy życiu
89
- return new Promise(() => {});
90
- }
91
-
92
81
  if (sub === 'mcp') {
93
82
  runBaseLinkerMcpServer({ mode: flags.all ? 'all' : 'catalog' });
94
83
  return;
@@ -103,75 +92,13 @@ Zmienne środowiskowe:
103
92
  return;
104
93
  }
105
94
 
106
- if (sub === 'search') {
107
- const q = pos.join(' ');
108
- const results = searchMethods(q);
109
- if (flags.json) {
110
- process.stdout.write(JSON.stringify(results, null, 2) + '\n');
111
- return;
112
- }
113
- process.stdout.write(`\nZnaleziono ${results.length} metod pasujących do „${q}”:\n\n`);
114
- for (const r of results.slice(0, 15)) {
115
- process.stdout.write(`${c.bold}${c.cyan}${r.name}${c.reset} [${r.category}]\n`);
116
- process.stdout.write(` ${(r.description || '').slice(0, 100)}...\n`);
117
- if (r.parameters && Object.keys(r.parameters).length > 0) {
118
- process.stdout.write(` Parametry: ${Object.keys(r.parameters).join(', ')}\n`);
119
- }
120
- process.stdout.write('\n');
121
- }
122
- return;
123
- }
124
-
125
- if (sub === 'call') {
126
- const method = pos.shift();
127
- if (!method) throw new Error('Podaj nazwę metody: deertools baselinker call <metoda> [json]');
128
- let params = {};
129
- if (pos[0]) {
130
- try { params = JSON.parse(pos.join(' ')); } catch (e) {
131
- throw new Error('Nieprawidłowy JSON parametrów: ' + e.message);
132
- }
133
- }
134
- const client = getClient();
135
- const result = await client.call(method, params);
136
- process.stdout.write(JSON.stringify(result, null, 2) + '\n');
137
- return;
138
- }
139
-
140
- if (sub === 'catalog') {
141
- const catSub = pos.shift() || 'search';
142
- if (catSub === 'search') {
143
- const invId = parseInt(pos.shift() || flags.inventory || 0, 10);
144
- const query = pos.join(' ') || flags.query || '';
145
- if (!invId) throw new Error('Podaj inventory_id: deertools baselinker catalog search <inventory_id> [query]');
146
- const res = await handleCatalogToolCall('bl_catalog_search_products', {
147
- inventory_id: invId,
148
- filter_name: query
149
- });
150
- if (flags.json) {
151
- process.stdout.write(JSON.stringify(res, null, 2) + '\n');
152
- return;
153
- }
154
- const products = res.products ? Object.values(res.products) : [];
155
- process.stdout.write(`\nZnaleziono ${products.length} produktów w katalogu ID ${invId}:\n\n`);
156
- for (const p of products.slice(0, 20)) {
157
- process.stdout.write(`- [ID ${p.id || p.product_id}] SKU: ${p.sku || '-'} | EAN: ${p.ean || '-'} | ${p.name}\n`);
158
- }
159
- return;
160
- }
161
-
162
- if (catSub === 'get') {
163
- const invId = parseInt(pos.shift() || flags.inventory, 10);
164
- const prodId = parseInt(pos.shift() || flags.product, 10);
165
- if (!invId || !prodId) throw new Error('Użycie: deertools baselinker catalog get <inventory_id> <product_id>');
166
- const product = await handleCatalogToolCall('bl_catalog_get_product', {
167
- inventory_id: invId,
168
- product_id: prodId,
169
- include_relations: true,
170
- include_channels_media: true
171
- });
172
- process.stdout.write(JSON.stringify(product, null, 2) + '\n');
173
- return;
174
- }
95
+ if (sub === 'catalog' || sub === 'call' || sub === 'search' || sub === 'serve') {
96
+ const err = new Error(
97
+ `Zgodnie z architekturą DeerTools CLI wywołania domenowe („deertools baselinker ${sub}”) w terminalu są zablokowane. ` +
98
+ `Użyj natywnych narzędzi serwera MCP „deer-baselinker” (bl_catalog_search_products, bl_catalog_get_product, bl_search_methods, bl_call_api).`
99
+ );
100
+ err.exitCode = 2;
101
+ throw err;
175
102
  }
176
103
 
177
104
  throw new Error(`Nieznana podkomenda baselinker: ${sub}. Wpisz "deertools baselinker help".`);
package/src/cli.js CHANGED
@@ -37,14 +37,28 @@ async function main(argv) {
37
37
  }
38
38
 
39
39
  const table = {
40
- login: c.cmdLogin, logout: c.cmdLogout, whoami: c.cmdWhoami, docs: c.cmdDocs,
41
- endpoints: c.cmdEndpoints, api: c.cmdApi, skill: c.cmdSkill,
40
+ login: c.cmdLogin,
41
+ logout: c.cmdLogout,
42
+ whoami: c.cmdWhoami,
43
+ skill: c.cmdSkill,
42
44
  sync: (pos, flags) => c.cmdSkill(['sync', ...pos], flags),
43
- agent: c.cmdAgent, agents: c.cmdAgent,
44
- team: c.cmdTeam, teams: c.cmdTeam,
45
- mcp: c.cmdMcp, doctor: c.cmdDoctor, audit: c.cmdAudit, profile: c.cmdProfile,
46
- completion: c.cmdCompletion, baselinker: c.cmdBaseLinker,
45
+ agent: c.cmdAgent,
46
+ agents: c.cmdAgent,
47
+ team: c.cmdTeam,
48
+ teams: c.cmdTeam,
49
+ mcp: c.cmdMcp,
50
+ doctor: c.cmdDoctor,
51
+ audit: c.cmdAudit,
52
+ profile: c.cmdProfile,
53
+ completion: c.cmdCompletion,
54
+ baselinker: c.cmdBaseLinker,
55
+ rendermind: c.cmdRenderMind,
56
+ supplier: c.cmdSupplier,
47
57
  update: require('./updater').cmdUpdate,
58
+ // Bezpiecznik architektoniczny: blokada bezpośrednich wywołań REST API z CLI
59
+ api: () => c.cmdBlockedDomain('api'),
60
+ endpoints: () => c.cmdBlockedDomain('endpoints'),
61
+ docs: () => c.cmdBlockedDomain('docs'),
48
62
  };
49
63
 
50
64
  if (pos.length === 0 && !flags.help && !flags.version && process.stdout.isTTY) {