multimodel-dev-os 2.0.0 → 2.6.0
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/.ai/intelligence/README.md +14 -0
- package/.ai/intelligence/apply-log.schema.json +65 -0
- package/.ai/intelligence/feedback-log.example.jsonl +2 -0
- package/.ai/intelligence/feedback.schema.json +47 -0
- package/.ai/intelligence/improvement-proposal.schema.json +70 -0
- package/.ai/intelligence/learning-rules.example.md +18 -0
- package/.ai/intelligence/memory.schema.json +97 -0
- package/.ai/policies/approval-gates.md +35 -0
- package/.ai/policies/memory-policy.md +30 -0
- package/.ai/policies/self-improvement-policy.md +39 -0
- package/.ai/proposals/README.md +44 -0
- package/.ai/proposals/apply-operation.example.json +22 -0
- package/.ai/registries/capabilities.yaml +73 -0
- package/.ai/registries/tools.yaml +84 -0
- package/.ai/registries/workflows.yaml +217 -0
- package/README.md +218 -97
- package/bin/multimodel-dev-os.js +2899 -10
- package/docs/.vitepress/config.js +23 -1
- package/docs/CLI.md +89 -2
- package/docs/adapter-sync.md +27 -0
- package/docs/adapters.md +16 -0
- package/docs/agent-handoff.md +40 -0
- package/docs/approved-proposal-apply.md +156 -0
- package/docs/capability-registry.md +24 -0
- package/docs/cli-roadmap.md +14 -22
- package/docs/faq.md +1 -1
- package/docs/feedback-learning.md +33 -0
- package/docs/future-proof-architecture.md +22 -0
- package/docs/hash-compressed-memory.md +72 -0
- package/docs/improvement-proposals.md +70 -0
- package/docs/index.md +5 -5
- package/docs/learning-rules.md +36 -0
- package/docs/npm-publishing.md +16 -16
- package/docs/public/llms-full.txt +32 -2
- package/docs/public/llms.txt +43 -2
- package/docs/public/sitemap.xml +81 -1
- package/docs/quickstart.md +14 -16
- package/docs/real-repo-onboarding.md +27 -0
- package/docs/release-policy.md +5 -22
- package/docs/repository-command-center.md +52 -0
- package/docs/self-improving-codebase.md +46 -0
- package/docs/template-recommendation.md +22 -0
- package/docs/templates-guide.md +14 -3
- package/docs/tool-registry.md +21 -0
- package/docs/v2-release-checklist.md +1 -1
- package/docs/v2-roadmap.md +21 -1
- package/docs/workflow-orchestration.md +59 -0
- package/package.json +1 -1
- package/scripts/install.ps1 +1 -1
- package/scripts/install.sh +1 -1
- package/scripts/prepublish-guard.js +3 -3
- package/scripts/verify.js +107 -3
package/docs/templates-guide.md
CHANGED
|
@@ -55,13 +55,13 @@ To view and list templates directly from your shell:
|
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
57
|
# List all templates
|
|
58
|
-
|
|
58
|
+
npx multimodel-dev-os templates
|
|
59
59
|
|
|
60
60
|
# Inspect nextjs-saas layout details
|
|
61
|
-
|
|
61
|
+
npx multimodel-dev-os show-template nextjs-saas
|
|
62
62
|
|
|
63
63
|
# Bootstrap target using a template
|
|
64
|
-
|
|
64
|
+
npx multimodel-dev-os init --target ../my-new-app --template nextjs-saas
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
---
|
|
@@ -69,3 +69,14 @@ node bin/multimodel-dev-os.js init --target ../my-new-app --template nextjs-saas
|
|
|
69
69
|
## Template Quality Assurance
|
|
70
70
|
|
|
71
71
|
To ensure all contributed templates meet our rigorous quality standards before packaging, refer to our [Template Quality Assurance Blueprint](/template-qa).
|
|
72
|
+
|
|
73
|
+
## Template Recommendations for Existing Repos
|
|
74
|
+
|
|
75
|
+
If you are onboarding an existing repository and unsure which template profile to use, the recommendation engine can automatically analyze your project files:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Analyze framework and package signals, then output recommendation
|
|
79
|
+
npx multimodel-dev-os onboard recommend --target .
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
For detailed heuristics and confidence weights, refer to the [Template Recommendation Engine docs](/template-recommendation).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Tool & Protocol Registry
|
|
2
|
+
|
|
3
|
+
The **Tool Registry** governs connection protocols, interfaces, and file associations for developer environments and AI agents.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Tool Mappings
|
|
8
|
+
|
|
9
|
+
Tools configured in `.ai/registries/tools.yaml` are mapped by:
|
|
10
|
+
* **Interface Type**: `editor` (IDE plugins), `terminal` (CLI clients), or `assistant` (chat helpers).
|
|
11
|
+
* **Protocols**: Connection formats such as `stdin-stdout`, `mcp-jsonrpc` (Model Context Protocol), or custom config parameters.
|
|
12
|
+
* **Registry Keys**: Associated configuration files (e.g. `.cursorrules` for Cursor, `CLAUDE.md` for Claude Code).
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 2. Model Context Protocol (MCP) Integration
|
|
17
|
+
|
|
18
|
+
MultiModel Dev OS leverages MCP to expose local resources to models:
|
|
19
|
+
1. **Server Bindings**: Developers declare local MCP servers (e.g. gcloud SDK MCP, Chrome DevTools MCP) under the tools registry.
|
|
20
|
+
2. **Capability Matching**: The Capability Registry checks if the selected model has `mcp-compliance: 1.0` before attempting native bindings.
|
|
21
|
+
3. **Unified Tool Access**: Exposes filesystem, browser automation, and deployment commands directly to agent execution loops securely.
|
|
@@ -4,7 +4,7 @@ Use this checklist to verify compliance before publishing `multimodel-dev-os` to
|
|
|
4
4
|
|
|
5
5
|
## Pre-Flight Requirements
|
|
6
6
|
|
|
7
|
-
- [x] Ensure version string in `package.json` is set to `2.0.
|
|
7
|
+
- [x] Ensure version string in `package.json` is set to `2.0.1`.
|
|
8
8
|
- [x] Verify version strings in documentation and install scripts (`scripts/install.sh`, `scripts/install.ps1`) align with the release.
|
|
9
9
|
- [x] Run full release verification:
|
|
10
10
|
```bash
|
package/docs/v2-roadmap.md
CHANGED
|
@@ -9,7 +9,7 @@ This document outlines the development path, stabilization targets, and migratio
|
|
|
9
9
|
The primary goal of the **v2.0.0 release** is to promote the experimental features introduced in `v1.2.0` (Template Galaxy, Model Compatibility Layer, and Android Expo template) into officially frozen, production-grade core components, and resume stable package publication to the public npm registry.
|
|
10
10
|
|
|
11
11
|
> [!IMPORTANT]
|
|
12
|
-
> **v2.0.
|
|
12
|
+
> **v2.0.1 is the active stable release.** NPM publishing is resumed, consolidating the Template Galaxy and Model registries.
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -93,3 +93,23 @@ The `v2.0.0` release requires:
|
|
|
93
93
|
1. 100% pass rate on all automated linter and verifier checks.
|
|
94
94
|
2. Complete documentation updates across all guides and discovery indices.
|
|
95
95
|
3. Explicit maintainer sign-off on local testing of the Android Expo template.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 6. Future Stages: v2.1.0 to v3.0.0
|
|
100
|
+
|
|
101
|
+
* **v2.1.0 — Intelligence Core & Registries Foundation**
|
|
102
|
+
* Design and document schemas (`memory.schema.json`, `feedback.schema.json`).
|
|
103
|
+
* Introduce `.ai/registries/` configuration databases.
|
|
104
|
+
* Implement CLI routing helper `mmdo capability route` and `mmdo memory build/refresh`.
|
|
105
|
+
* **v2.2.0 — Feedback Loops & Tool Integrations**
|
|
106
|
+
* Add `mmdo learn` capability to append feedback metrics.
|
|
107
|
+
* Define `.ai/registries/tools.yaml` with MCP protocol interfaces.
|
|
108
|
+
* **v2.3.0 — Proposal Engine & Safety Controls**
|
|
109
|
+
* Deploy proposal structures under `.ai/proposals/`.
|
|
110
|
+
* Implement CLI pipeline `mmdo improve propose/review/apply`.
|
|
111
|
+
* **v2.4.0 — Local/Offline Operations**
|
|
112
|
+
* Integrate local model scoring (Llama.cpp, Ollama) and offline schema checks.
|
|
113
|
+
* **v3.0.0 — Unified Autonomous Co-Pilot Ecosystem**
|
|
114
|
+
* Full multi-agent orchestration workflows with dynamic task handoffs.
|
|
115
|
+
* Distributed registry syncing and cryptographically signed self-improvement proposals.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Workflow Orchestration
|
|
2
|
+
|
|
3
|
+
MultiModel Dev OS `v2.5.0` features a built-in **Workflow Runner** designed to orchestrate codebase diagnostic pipelines safely.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. CLI Commands
|
|
8
|
+
|
|
9
|
+
Workflows are registered in [.ai/registries/workflows.yaml](file:///.ai/registries/workflows.yaml) and can be executed via the following subcommands:
|
|
10
|
+
|
|
11
|
+
### List Registered Workflows
|
|
12
|
+
Prints name, risk, and summary of all active workflows:
|
|
13
|
+
```bash
|
|
14
|
+
npx multimodel-dev-os workflow list
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Show Workflow Specifications
|
|
18
|
+
Displays details, memory write permissions, code modification permissions, and individual logical steps:
|
|
19
|
+
```bash
|
|
20
|
+
npx multimodel-dev-os workflow show repo-health
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Plan Workflow Execution (Dry-Run)
|
|
24
|
+
Prints the execution sequence, command lists, and expected outputs without executing any logic:
|
|
25
|
+
```bash
|
|
26
|
+
npx multimodel-dev-os workflow plan repo-health
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Run Workflow
|
|
30
|
+
Executes the workflow steps sequentially:
|
|
31
|
+
```bash
|
|
32
|
+
npx multimodel-dev-os workflow run repo-health
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 2. Standard Built-in Workflows
|
|
38
|
+
|
|
39
|
+
MultiModel Dev OS defines 5 baseline workflows:
|
|
40
|
+
|
|
41
|
+
1. **`repo-health`** (Low Risk): Scans framework signals, performs advisory doctor audits, and verifies file structures.
|
|
42
|
+
2. **`memory-refresh`** (Medium Risk): Assesses memory differences and incremental refreshes.
|
|
43
|
+
3. **`feedback-review`** (Low Risk): Lists active developer logs and compiles rules to `learning-rules.md`.
|
|
44
|
+
4. **`proposal-review`** (Low Risk): Inspects codebase proposals, checks status counts, and displays audit apply logs.
|
|
45
|
+
5. **`release-check`** (Low Risk): Verifies codebase structures, executes release doctors, and runs package pack checks.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 3. Strict Safety Gates
|
|
50
|
+
|
|
51
|
+
The workflow engine enforces strict safety boundaries:
|
|
52
|
+
|
|
53
|
+
* **No File Modifications**: Allowed workflows only execute read-only checkups and incremental metadata updates (memory file compilation, feedback summaries).
|
|
54
|
+
* **No Shell Execution**: Shell command execution from `workflows.yaml` is prohibited. Steps map directly to internal Javascript CLI functions.
|
|
55
|
+
* **No Autonomy**: Any step requiring code changes (e.g. applying proposals) stops and outputs manual next-step instructions for the developer.
|
|
56
|
+
|
|
57
|
+
## 4. Bundled Registry Fallback
|
|
58
|
+
|
|
59
|
+
If the repository does not have a local `.ai/registries/workflows.yaml` registry file initialized yet, the workflow runner will automatically fall back to the bundled registry package templates and output a notice. This allows running read-only diagnostics prior to full project onboarding.
|
package/package.json
CHANGED
package/scripts/install.ps1
CHANGED
package/scripts/install.sh
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* MultiModel Dev OS - Prepublish Guard
|
|
5
|
-
* Blocks accidental npm publications
|
|
5
|
+
* Blocks accidental npm publications.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { readFileSync, existsSync } from 'fs';
|
|
@@ -15,8 +15,8 @@ const projectRoot = join(__dirname, '..');
|
|
|
15
15
|
|
|
16
16
|
// 1. Check environment variable override
|
|
17
17
|
if (process.env.MMDO_ALLOW_PUBLISH !== 'true') {
|
|
18
|
-
console.error('\n\x1b[31m[ABORT]
|
|
19
|
-
console.error('To override this guard during the approved
|
|
18
|
+
console.error('\n\x1b[31m[ABORT] Publishing requires explicit release approval. Set MMDO_ALLOW_PUBLISH=true only during an approved npm publish.\x1b[0m');
|
|
19
|
+
console.error('To override this guard during the approved release, set the environment variable:');
|
|
20
20
|
console.log(' \x1b[33mMMDO_ALLOW_PUBLISH=true\x1b[0m\n');
|
|
21
21
|
process.exit(1);
|
|
22
22
|
}
|
package/scripts/verify.js
CHANGED
|
@@ -231,6 +231,21 @@ checkFile('docs/v2-migration.md');
|
|
|
231
231
|
checkFile('docs/v2-release-checklist.md');
|
|
232
232
|
checkFile('docs/package-safety.md');
|
|
233
233
|
|
|
234
|
+
// --- v2.1.0 Intelligence Layer Documentation ---
|
|
235
|
+
console.log('\nIntelligence Layer Documentation:');
|
|
236
|
+
checkFile('docs/future-proof-architecture.md');
|
|
237
|
+
checkFile('docs/self-improving-codebase.md');
|
|
238
|
+
checkFile('docs/feedback-learning.md');
|
|
239
|
+
checkFile('docs/hash-compressed-memory.md');
|
|
240
|
+
checkFile('docs/capability-registry.md');
|
|
241
|
+
checkFile('docs/tool-registry.md');
|
|
242
|
+
checkFile('docs/improvement-proposals.md');
|
|
243
|
+
checkFile('docs/learning-rules.md');
|
|
244
|
+
checkFile('docs/approved-proposal-apply.md');
|
|
245
|
+
checkFile('docs/repository-command-center.md');
|
|
246
|
+
checkFile('docs/workflow-orchestration.md');
|
|
247
|
+
checkFile('docs/agent-handoff.md');
|
|
248
|
+
|
|
234
249
|
// --- Model & Adapter Registries ---
|
|
235
250
|
console.log('\nModel & Adapter Registries:');
|
|
236
251
|
checkFile('.ai/models/registry.yaml');
|
|
@@ -250,6 +265,28 @@ checkFile('.ai/schema/config.schema.json');
|
|
|
250
265
|
checkFile('.ai/schema/template.schema.json');
|
|
251
266
|
checkFile('.ai/schema/adapter.schema.json');
|
|
252
267
|
|
|
268
|
+
// --- v2.1.0 Intelligence Layer (Schemas, Policies, Registries) ---
|
|
269
|
+
console.log('\nIntelligence Layer Schemas:');
|
|
270
|
+
checkFile('.ai/intelligence/memory.schema.json');
|
|
271
|
+
checkFile('.ai/intelligence/feedback.schema.json');
|
|
272
|
+
checkFile('.ai/intelligence/README.md');
|
|
273
|
+
checkFile('.ai/intelligence/feedback-log.example.jsonl');
|
|
274
|
+
checkFile('.ai/intelligence/learning-rules.example.md');
|
|
275
|
+
checkFile('.ai/intelligence/improvement-proposal.schema.json');
|
|
276
|
+
checkFile('.ai/intelligence/apply-log.schema.json');
|
|
277
|
+
checkFile('.ai/proposals/README.md');
|
|
278
|
+
checkFile('.ai/proposals/apply-operation.example.json');
|
|
279
|
+
|
|
280
|
+
console.log('\nIntelligence Layer Policies:');
|
|
281
|
+
checkFile('.ai/policies/self-improvement-policy.md');
|
|
282
|
+
checkFile('.ai/policies/memory-policy.md');
|
|
283
|
+
checkFile('.ai/policies/approval-gates.md');
|
|
284
|
+
|
|
285
|
+
console.log('\nIntelligence Layer Registries:');
|
|
286
|
+
checkFile('.ai/registries/capabilities.yaml');
|
|
287
|
+
checkFile('.ai/registries/tools.yaml');
|
|
288
|
+
checkFile('.ai/registries/workflows.yaml');
|
|
289
|
+
|
|
253
290
|
// --- Test Blueprints ---
|
|
254
291
|
console.log('\nTest Manuals:');
|
|
255
292
|
checkFile('tests/README.md');
|
|
@@ -377,6 +414,9 @@ verifyRegistryParsed('.ai/models/routing-presets.yaml', 'presets');
|
|
|
377
414
|
verifyRegistryParsed('.ai/models/local-models.yaml', 'local_engines');
|
|
378
415
|
verifyRegistryParsed('.ai/adapters/registry.yaml', 'adapters');
|
|
379
416
|
verifyRegistryParsed('.ai/templates/registry.yaml', 'templates');
|
|
417
|
+
verifyRegistryParsed('.ai/registries/capabilities.yaml', 'capabilities');
|
|
418
|
+
verifyRegistryParsed('.ai/registries/tools.yaml', 'tools');
|
|
419
|
+
verifyRegistryParsed('.ai/registries/workflows.yaml', 'workflows');
|
|
380
420
|
|
|
381
421
|
// --- CLI & Packaging Pre-Flight Tests ---
|
|
382
422
|
console.log('\nRunning CLI & Packaging Pre-Flight Tests...');
|
|
@@ -408,11 +448,70 @@ try {
|
|
|
408
448
|
console.log(` ${GREEN}✓${NC} CLI help displays v${expectedVersion}`);
|
|
409
449
|
pass++;
|
|
410
450
|
}
|
|
451
|
+
|
|
452
|
+
if (helpOutput.includes('scan') && helpOutput.includes('memory') && helpOutput.includes('status') && helpOutput.includes('workflow') && helpOutput.includes('handoff')) {
|
|
453
|
+
console.log(` ${GREEN}✓${NC} CLI help includes scan, memory, status, workflow, and handoff commands`);
|
|
454
|
+
pass++;
|
|
455
|
+
} else {
|
|
456
|
+
console.error(` ${RED}✗${NC} CLI help is missing scan, memory, status, workflow, or handoff commands`);
|
|
457
|
+
fail++;
|
|
458
|
+
}
|
|
411
459
|
} catch (e) {
|
|
412
460
|
console.error(` ${RED}✗${NC} node bin/multimodel-dev-os.js --help failed: ${e.message}`);
|
|
413
461
|
fail++;
|
|
414
462
|
}
|
|
415
463
|
|
|
464
|
+
// Verify docs mention memory build
|
|
465
|
+
try {
|
|
466
|
+
const mdContent = readFileSync(join(projectRoot, 'docs', 'hash-compressed-memory.md'), 'utf8');
|
|
467
|
+
if (mdContent.includes('memory build')) {
|
|
468
|
+
console.log(` ${GREEN}✓${NC} docs/hash-compressed-memory.md mentions 'memory build'`);
|
|
469
|
+
pass++;
|
|
470
|
+
} else {
|
|
471
|
+
console.error(` ${RED}✗${NC} docs/hash-compressed-memory.md does not mention 'memory build'`);
|
|
472
|
+
fail++;
|
|
473
|
+
}
|
|
474
|
+
} catch (e) {
|
|
475
|
+
console.error(` ${RED}✗${NC} docs check failed: ${e.message}`);
|
|
476
|
+
fail++;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// Verify no generated memory or feedback logs or proposals are committed/tracked in git root/intelligence folder
|
|
480
|
+
try {
|
|
481
|
+
const checkUntracked = (relPath) => {
|
|
482
|
+
if (existsSync(join(projectRoot, relPath))) {
|
|
483
|
+
console.error(` ${RED}✗${NC} ${relPath} should not be tracked/committed!`);
|
|
484
|
+
fail++;
|
|
485
|
+
} else {
|
|
486
|
+
console.log(` ${GREEN}✓${NC} ${relPath} is not tracked/committed`);
|
|
487
|
+
pass++;
|
|
488
|
+
}
|
|
489
|
+
};
|
|
490
|
+
checkUntracked('.ai/intelligence/memory.hash.json');
|
|
491
|
+
checkUntracked('.ai/intelligence/memory.summary.md');
|
|
492
|
+
checkUntracked('.ai/intelligence/feedback-log.jsonl');
|
|
493
|
+
checkUntracked('.ai/intelligence/learning-rules.md');
|
|
494
|
+
checkUntracked('.ai/intelligence/handoff.md');
|
|
495
|
+
checkUntracked('.ai/proposals/apply-log.jsonl');
|
|
496
|
+
|
|
497
|
+
// also check if any proposal-*.md file exists directly in projectRoot/proposals (since it shouldn't be tracked)
|
|
498
|
+
const proposalsDir = join(projectRoot, '.ai', 'proposals');
|
|
499
|
+
if (existsSync(proposalsDir)) {
|
|
500
|
+
const files = readdirSync(proposalsDir);
|
|
501
|
+
const hasRuntimeProposals = files.some(f => f.startsWith('proposal-') && f !== 'proposal-template.md' && f.endsWith('.md'));
|
|
502
|
+
if (hasRuntimeProposals) {
|
|
503
|
+
console.error(` ${RED}✗${NC} Runtime proposals should not be committed/tracked!`);
|
|
504
|
+
fail++;
|
|
505
|
+
} else {
|
|
506
|
+
console.log(` ${GREEN}✓${NC} No runtime proposals committed`);
|
|
507
|
+
pass++;
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
} catch (e) {
|
|
511
|
+
console.error(` ${RED}✗${NC} Tracking verification of generated files failed: ${e.message}`);
|
|
512
|
+
fail++;
|
|
513
|
+
}
|
|
514
|
+
|
|
416
515
|
// Verify npm pack dry-run shows current version dynamically
|
|
417
516
|
try {
|
|
418
517
|
const packOutput = execSync('npm pack --dry-run', { cwd: projectRoot, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
|
|
@@ -447,12 +546,17 @@ try {
|
|
|
447
546
|
|
|
448
547
|
// --- Package Safety & Hygiene Checks ---
|
|
449
548
|
console.log('\nPackage Safety & Hygiene Checks:');
|
|
450
|
-
if (existsSync(join(projectRoot, '.npmrc'))) {
|
|
549
|
+
if (existsSync(join(projectRoot, '.npmrc')) && process.env.MMDO_ALLOW_PUBLISH !== 'true') {
|
|
451
550
|
console.error(` ${RED}✗ .npmrc file exists in package root (security risk)${NC}`);
|
|
452
551
|
fail++;
|
|
453
552
|
} else {
|
|
454
|
-
|
|
455
|
-
|
|
553
|
+
if (existsSync(join(projectRoot, '.npmrc'))) {
|
|
554
|
+
console.log(` ${YELLOW}!${NC} .npmrc file present in package root (allowed via MMDO_ALLOW_PUBLISH)`);
|
|
555
|
+
warn++;
|
|
556
|
+
} else {
|
|
557
|
+
console.log(` ${GREEN}✓${NC} No .npmrc file present in package root`);
|
|
558
|
+
pass++;
|
|
559
|
+
}
|
|
456
560
|
}
|
|
457
561
|
|
|
458
562
|
const checkExamplesHygiene = (dir) => {
|