@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 +55 -63
- package/package.json +4 -3
- package/src/baselinker-commands.js +21 -94
- package/src/cli.js +20 -6
- package/src/commands.js +167 -137
- package/src/completion.js +24 -18
- package/src/embedding.js +59 -0
- package/src/rendermind/cli-commands.js +31 -0
- package/src/rendermind/client.js +393 -0
- package/src/rendermind/mcp-server.js +305 -0
- package/src/skill-commands.js +157 -15
- package/src/skills-hub.js +66 -0
- package/src/supplier/cli-commands.js +32 -0
- package/src/supplier/mcp-server.js +360 -0
- package/src/tui.js +24 -39
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> #
|
|
144
|
-
deertools baselinker test #
|
|
145
|
-
deertools baselinker serve --port 3456 #
|
|
146
|
-
deertools baselinker mcp #
|
|
147
|
-
deertools baselinker sync-schema #
|
|
148
|
-
deertools baselinker search "relations" #
|
|
149
|
-
deertools baselinker call getOrders #
|
|
150
|
-
deertools baselinker catalog search 105 "
|
|
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 #
|
|
165
|
-
deertools skill sync #
|
|
166
|
-
deertools sync --push #
|
|
167
|
-
deertools skill install --all #
|
|
168
|
-
deertools skill install deer-kosztorys #
|
|
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 "
|
|
171
|
-
deertools skill push ./my-skill #
|
|
172
|
-
deertools skill push ./my-skill --tags "
|
|
173
|
-
deertools skill push ./my-skill --team
|
|
174
|
-
deertools skill share my-skill --team
|
|
175
|
-
deertools skill share my-skill --private
|
|
176
|
-
deertools skill update deer-kosztorys #
|
|
177
|
-
deertools skill update #
|
|
178
|
-
deertools skill promote my-skill #
|
|
179
|
-
|
|
180
|
-
# 8. Team Management
|
|
181
|
-
deertools team list #
|
|
182
|
-
deertools team members
|
|
183
|
-
deertools team add
|
|
184
|
-
deertools team add
|
|
185
|
-
deertools team remove
|
|
186
|
-
deertools team create "
|
|
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 #
|
|
190
|
-
deertools mcp config #
|
|
191
|
-
deertools mcp install #
|
|
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`)
|
|
224
|
-
|
|
225
|
-
1. **
|
|
226
|
-
- **
|
|
227
|
-
- **
|
|
228
|
-
- **
|
|
229
|
-
2. **
|
|
230
|
-
-
|
|
231
|
-
-
|
|
232
|
-
3. **
|
|
233
|
-
-
|
|
234
|
-
-
|
|
235
|
-
- CLI
|
|
236
|
-
4.
|
|
237
|
-
-
|
|
238
|
-
- `deertools doctor`
|
|
239
|
-
5.
|
|
240
|
-
-
|
|
241
|
-
-
|
|
242
|
-
6. **
|
|
243
|
-
- DeerSkills
|
|
244
|
-
-
|
|
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.
|
|
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:
|
|
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
|
|
7
|
-
const {
|
|
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 —
|
|
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
|
|
21
|
-
deertools baselinker
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
|
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
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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,
|
|
41
|
-
|
|
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,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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) {
|