@organon-methodology/tools 0.3.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/LICENSE +21 -0
- package/README.md +152 -0
- package/dist/cli/commands/coverage.d.ts +12 -0
- package/dist/cli/commands/coverage.d.ts.map +1 -0
- package/dist/cli/commands/coverage.js +80 -0
- package/dist/cli/commands/coverage.js.map +1 -0
- package/dist/cli/commands/find.d.ts +15 -0
- package/dist/cli/commands/find.d.ts.map +1 -0
- package/dist/cli/commands/find.js +81 -0
- package/dist/cli/commands/find.js.map +1 -0
- package/dist/cli/commands/generate-tests.d.ts +14 -0
- package/dist/cli/commands/generate-tests.d.ts.map +1 -0
- package/dist/cli/commands/generate-tests.js +87 -0
- package/dist/cli/commands/generate-tests.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +15 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +77 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/health.d.ts +13 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +79 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/init.d.ts +14 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +132 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +11 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +26 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/query.d.ts +19 -0
- package/dist/cli/commands/query.d.ts.map +1 -0
- package/dist/cli/commands/query.js +103 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +13 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -0
- package/dist/cli/commands/upgrade.js +162 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +13 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +89 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +12 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +67 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/index.d.ts +19 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +59 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/add-protocols-array.d.ts +17 -0
- package/dist/core/add-protocols-array.d.ts.map +1 -0
- package/dist/core/add-protocols-array.js +95 -0
- package/dist/core/add-protocols-array.js.map +1 -0
- package/dist/core/add-protocols-array.test.d.ts +2 -0
- package/dist/core/add-protocols-array.test.d.ts.map +1 -0
- package/dist/core/add-protocols-array.test.js +86 -0
- package/dist/core/add-protocols-array.test.js.map +1 -0
- package/dist/core/config.d.ts +44 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +130 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/config.test.d.ts +2 -0
- package/dist/core/config.test.d.ts.map +1 -0
- package/dist/core/config.test.js +88 -0
- package/dist/core/config.test.js.map +1 -0
- package/dist/core/find.d.ts +29 -0
- package/dist/core/find.d.ts.map +1 -0
- package/dist/core/find.js +191 -0
- package/dist/core/find.js.map +1 -0
- package/dist/core/find.test.d.ts +2 -0
- package/dist/core/find.test.d.ts.map +1 -0
- package/dist/core/find.test.js +91 -0
- package/dist/core/find.test.js.map +1 -0
- package/dist/core/frontmatter-parser.d.ts +45 -0
- package/dist/core/frontmatter-parser.d.ts.map +1 -0
- package/dist/core/frontmatter-parser.js +122 -0
- package/dist/core/frontmatter-parser.js.map +1 -0
- package/dist/core/frontmatter-parser.test.d.ts +2 -0
- package/dist/core/frontmatter-parser.test.d.ts.map +1 -0
- package/dist/core/frontmatter-parser.test.js +200 -0
- package/dist/core/frontmatter-parser.test.js.map +1 -0
- package/dist/core/generate-frontmatter.d.ts +27 -0
- package/dist/core/generate-frontmatter.d.ts.map +1 -0
- package/dist/core/generate-frontmatter.js +219 -0
- package/dist/core/generate-frontmatter.js.map +1 -0
- package/dist/core/generate-frontmatter.test.d.ts +2 -0
- package/dist/core/generate-frontmatter.test.d.ts.map +1 -0
- package/dist/core/generate-frontmatter.test.js +161 -0
- package/dist/core/generate-frontmatter.test.js.map +1 -0
- package/dist/core/generate-tests.d.ts +41 -0
- package/dist/core/generate-tests.d.ts.map +1 -0
- package/dist/core/generate-tests.js +191 -0
- package/dist/core/generate-tests.js.map +1 -0
- package/dist/core/generate-tests.test.d.ts +2 -0
- package/dist/core/generate-tests.test.d.ts.map +1 -0
- package/dist/core/generate-tests.test.js +205 -0
- package/dist/core/generate-tests.test.js.map +1 -0
- package/dist/core/health.d.ts +16 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +156 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/health.test.d.ts +2 -0
- package/dist/core/health.test.d.ts.map +1 -0
- package/dist/core/health.test.js +97 -0
- package/dist/core/health.test.js.map +1 -0
- package/dist/core/init.d.ts +25 -0
- package/dist/core/init.d.ts.map +1 -0
- package/dist/core/init.js +100 -0
- package/dist/core/init.js.map +1 -0
- package/dist/core/init.test.d.ts +8 -0
- package/dist/core/init.test.d.ts.map +1 -0
- package/dist/core/init.test.js +203 -0
- package/dist/core/init.test.js.map +1 -0
- package/dist/core/invariant-coverage.d.ts +41 -0
- package/dist/core/invariant-coverage.d.ts.map +1 -0
- package/dist/core/invariant-coverage.js +181 -0
- package/dist/core/invariant-coverage.js.map +1 -0
- package/dist/core/invariant-coverage.test.d.ts +2 -0
- package/dist/core/invariant-coverage.test.d.ts.map +1 -0
- package/dist/core/invariant-coverage.test.js +188 -0
- package/dist/core/invariant-coverage.test.js.map +1 -0
- package/dist/core/meta-invariants.test.d.ts +17 -0
- package/dist/core/meta-invariants.test.d.ts.map +1 -0
- package/dist/core/meta-invariants.test.js +191 -0
- package/dist/core/meta-invariants.test.js.map +1 -0
- package/dist/core/node-fs.d.ts +22 -0
- package/dist/core/node-fs.d.ts.map +1 -0
- package/dist/core/node-fs.js +47 -0
- package/dist/core/node-fs.js.map +1 -0
- package/dist/core/organon-invariants.test.d.ts +15 -0
- package/dist/core/organon-invariants.test.d.ts.map +1 -0
- package/dist/core/organon-invariants.test.js +149 -0
- package/dist/core/organon-invariants.test.js.map +1 -0
- package/dist/core/query.d.ts +35 -0
- package/dist/core/query.d.ts.map +1 -0
- package/dist/core/query.js +139 -0
- package/dist/core/query.js.map +1 -0
- package/dist/core/query.test.d.ts +2 -0
- package/dist/core/query.test.d.ts.map +1 -0
- package/dist/core/query.test.js +97 -0
- package/dist/core/query.test.js.map +1 -0
- package/dist/core/suggest-tools.d.ts +15 -0
- package/dist/core/suggest-tools.d.ts.map +1 -0
- package/dist/core/suggest-tools.js +139 -0
- package/dist/core/suggest-tools.js.map +1 -0
- package/dist/core/suggest-tools.test.d.ts +2 -0
- package/dist/core/suggest-tools.test.d.ts.map +1 -0
- package/dist/core/suggest-tools.test.js +122 -0
- package/dist/core/suggest-tools.test.js.map +1 -0
- package/dist/core/test-helpers.d.ts +63 -0
- package/dist/core/test-helpers.d.ts.map +1 -0
- package/dist/core/test-helpers.js +265 -0
- package/dist/core/test-helpers.js.map +1 -0
- package/dist/core/types.d.ts +277 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/upgrade.d.ts +46 -0
- package/dist/core/upgrade.d.ts.map +1 -0
- package/dist/core/upgrade.js +227 -0
- package/dist/core/upgrade.js.map +1 -0
- package/dist/core/upgrade.test.d.ts +8 -0
- package/dist/core/upgrade.test.d.ts.map +1 -0
- package/dist/core/upgrade.test.js +370 -0
- package/dist/core/upgrade.test.js.map +1 -0
- package/dist/core/validate-frontmatter.d.ts +20 -0
- package/dist/core/validate-frontmatter.d.ts.map +1 -0
- package/dist/core/validate-frontmatter.js +529 -0
- package/dist/core/validate-frontmatter.js.map +1 -0
- package/dist/core/validate-frontmatter.test.d.ts +2 -0
- package/dist/core/validate-frontmatter.test.d.ts.map +1 -0
- package/dist/core/validate-frontmatter.test.js +366 -0
- package/dist/core/validate-frontmatter.test.js.map +1 -0
- package/dist/core/validate-workflow.d.ts +17 -0
- package/dist/core/validate-workflow.d.ts.map +1 -0
- package/dist/core/validate-workflow.js +233 -0
- package/dist/core/validate-workflow.js.map +1 -0
- package/dist/core/validate-workflow.test.d.ts +2 -0
- package/dist/core/validate-workflow.test.d.ts.map +1 -0
- package/dist/core/validate-workflow.test.js +205 -0
- package/dist/core/validate-workflow.test.js.map +1 -0
- package/dist/core/verify-tier4-tests.d.ts +34 -0
- package/dist/core/verify-tier4-tests.d.ts.map +1 -0
- package/dist/core/verify-tier4-tests.js +106 -0
- package/dist/core/verify-tier4-tests.js.map +1 -0
- package/dist/core/verify-tier4-tests.test.d.ts +2 -0
- package/dist/core/verify-tier4-tests.test.d.ts.map +1 -0
- package/dist/core/verify-tier4-tests.test.js +140 -0
- package/dist/core/verify-tier4-tests.test.js.map +1 -0
- package/dist/core/verify-triplets.d.ts +17 -0
- package/dist/core/verify-triplets.d.ts.map +1 -0
- package/dist/core/verify-triplets.js +217 -0
- package/dist/core/verify-triplets.js.map +1 -0
- package/dist/core/verify-triplets.test.d.ts +2 -0
- package/dist/core/verify-triplets.test.d.ts.map +1 -0
- package/dist/core/verify-triplets.test.js +147 -0
- package/dist/core/verify-triplets.test.js.map +1 -0
- package/dist/core/verify.d.ts +19 -0
- package/dist/core/verify.d.ts.map +1 -0
- package/dist/core/verify.js +162 -0
- package/dist/core/verify.js.map +1 -0
- package/dist/core/verify.test.d.ts +2 -0
- package/dist/core/verify.test.d.ts.map +1 -0
- package/dist/core/verify.test.js +147 -0
- package/dist/core/verify.test.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/prompts.d.ts +9 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +265 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +7 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +111 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +7 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +31 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +7 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +130 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/templates/config.d.ts +6 -0
- package/dist/templates/config.d.ts.map +1 -0
- package/dist/templates/config.js +30 -0
- package/dist/templates/config.js.map +1 -0
- package/dist/templates/index.d.ts +7 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +7 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/organon/claude-md.d.ts +7 -0
- package/dist/templates/organon/claude-md.d.ts.map +1 -0
- package/dist/templates/organon/claude-md.js +32 -0
- package/dist/templates/organon/claude-md.js.map +1 -0
- package/dist/templates/organon/ethos.d.ts +5 -0
- package/dist/templates/organon/ethos.d.ts.map +1 -0
- package/dist/templates/organon/ethos.js +69 -0
- package/dist/templates/organon/ethos.js.map +1 -0
- package/dist/templates/organon/index.d.ts +10 -0
- package/dist/templates/organon/index.d.ts.map +1 -0
- package/dist/templates/organon/index.js +10 -0
- package/dist/templates/organon/index.js.map +1 -0
- package/dist/templates/organon/observations-readme.d.ts +5 -0
- package/dist/templates/organon/observations-readme.d.ts.map +1 -0
- package/dist/templates/organon/observations-readme.js +25 -0
- package/dist/templates/organon/observations-readme.js.map +1 -0
- package/dist/templates/organon/philosophy.d.ts +5 -0
- package/dist/templates/organon/philosophy.d.ts.map +1 -0
- package/dist/templates/organon/philosophy.js +75 -0
- package/dist/templates/organon/philosophy.js.map +1 -0
- package/dist/templates/organon/protocols.d.ts +7 -0
- package/dist/templates/organon/protocols.d.ts.map +1 -0
- package/dist/templates/organon/protocols.js +197 -0
- package/dist/templates/organon/protocols.js.map +1 -0
- package/dist/templates/organon/readme.d.ts +5 -0
- package/dist/templates/organon/readme.d.ts.map +1 -0
- package/dist/templates/organon/readme.js +40 -0
- package/dist/templates/organon/readme.js.map +1 -0
- package/dist/templates/skills/domain-feature-design.d.ts +9 -0
- package/dist/templates/skills/domain-feature-design.d.ts.map +1 -0
- package/dist/templates/skills/domain-feature-design.js +123 -0
- package/dist/templates/skills/domain-feature-design.js.map +1 -0
- package/dist/templates/skills/index.d.ts +15 -0
- package/dist/templates/skills/index.d.ts.map +1 -0
- package/dist/templates/skills/index.js +35 -0
- package/dist/templates/skills/index.js.map +1 -0
- package/dist/templates/skills/organon-file-creation.d.ts +9 -0
- package/dist/templates/skills/organon-file-creation.d.ts.map +1 -0
- package/dist/templates/skills/organon-file-creation.js +138 -0
- package/dist/templates/skills/organon-file-creation.js.map +1 -0
- package/dist/templates/skills/quality-review.d.ts +9 -0
- package/dist/templates/skills/quality-review.d.ts.map +1 -0
- package/dist/templates/skills/quality-review.js +127 -0
- package/dist/templates/skills/quality-review.js.map +1 -0
- package/dist/templates/skills/session-compounding.d.ts +9 -0
- package/dist/templates/skills/session-compounding.d.ts.map +1 -0
- package/dist/templates/skills/session-compounding.js +118 -0
- package/dist/templates/skills/session-compounding.js.map +1 -0
- package/dist/templates/skills/verify-and-health.d.ts +9 -0
- package/dist/templates/skills/verify-and-health.d.ts.map +1 -0
- package/dist/templates/skills/verify-and-health.js +99 -0
- package/dist/templates/skills/verify-and-health.js.map +1 -0
- package/package.json +72 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Organon Methodology Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: navigation
|
|
3
|
+
scope: domain
|
|
4
|
+
name: tools
|
|
5
|
+
version: "1.0"
|
|
6
|
+
summary: CLI and MCP server for the Organon methodology — validate frontmatter, run verification gates, query organon files
|
|
7
|
+
token_estimate: 1700
|
|
8
|
+
provides: [architecture, cli-commands, mcp-server, configuration, programmatic-api]
|
|
9
|
+
parent: packages
|
|
10
|
+
audience: [llm, human]
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Organon Tools
|
|
14
|
+
|
|
15
|
+
CLI tools and MCP server for the **Organon Methodology** — enforce documentation constraints, validate frontmatter, and give agents immediate methodology context.
|
|
16
|
+
|
|
17
|
+
## Organon (Start Here)
|
|
18
|
+
|
|
19
|
+
This project uses the Organon methodology to govern its own development:
|
|
20
|
+
|
|
21
|
+
- **[ETHOS.md](../../organon/domains/tools/ETHOS.md)** — Constraints for developing organon-tools (what rules must never be violated)
|
|
22
|
+
- **[PHILOSOPHY.md](../../organon/domains/tools/PHILOSOPHY.md)** — Design decisions and trade-offs (why TypeScript, why CLI, why fail-fast)
|
|
23
|
+
- **[dev/](./dev/)** — Design docs, RFCs, and future tool ideas
|
|
24
|
+
|
|
25
|
+
**For contributors:** Read ETHOS.md first to understand invariants and principles. Read PHILOSOPHY.md to understand why the tool is built this way.
|
|
26
|
+
|
|
27
|
+
## Architecture
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
packages/tools/src/
|
|
31
|
+
├── core/ ← Pure logic (no I/O, no console, no process.exit)
|
|
32
|
+
│ ├── types.ts ← FileSystem interface, result types, config
|
|
33
|
+
│ ├── config.ts ← Convention-based config discovery
|
|
34
|
+
│ ├── frontmatter-parser.ts
|
|
35
|
+
│ ├── node-fs.ts ← NodeFileSystem implementation
|
|
36
|
+
│ ├── validate-frontmatter.ts ← 4-stage validation
|
|
37
|
+
│ ├── generate-frontmatter.ts ← Auto-generate from content
|
|
38
|
+
│ ├── query.ts ← Filter by scope/type/priority/budget
|
|
39
|
+
│ ├── health.ts ← Coverage, validation, tokens, freshness
|
|
40
|
+
│ ├── find.ts ← Cross-domain discovery
|
|
41
|
+
│ ├── verify-triplets.ts ← Protocol↔workflow↔tool bindings
|
|
42
|
+
│ ├── suggest-tools.ts ← Automation tier suggestions
|
|
43
|
+
│ └── verify.ts ← Gate registry orchestrator
|
|
44
|
+
├── cli/ ← Thin yargs adapter
|
|
45
|
+
│ └── commands/ ← validate, generate, query, health, find, verify, mcp
|
|
46
|
+
├── mcp/ ← Thin MCP adapter
|
|
47
|
+
│ ├── server.ts ← stdio transport
|
|
48
|
+
│ ├── tools.ts ← 8 MCP tools
|
|
49
|
+
│ ├── resources.ts ← 4 MCP resources
|
|
50
|
+
│ └── prompts.ts ← 4 MCP prompts
|
|
51
|
+
└── index.ts ← Public API
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## CLI Commands
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Validate frontmatter (schema, references, truthfulness, consistency)
|
|
58
|
+
organon validate
|
|
59
|
+
organon validate book-llms/ETHOS.md
|
|
60
|
+
organon validate --stages 1 3
|
|
61
|
+
|
|
62
|
+
# Generate frontmatter from file content
|
|
63
|
+
organon generate book-llms/ETHOS.md
|
|
64
|
+
organon generate book-llms/ETHOS.md --update
|
|
65
|
+
|
|
66
|
+
# Query organon files by metadata
|
|
67
|
+
organon query --scope=meta
|
|
68
|
+
organon query --budget=20000
|
|
69
|
+
organon query --task=genesis_tool_impl
|
|
70
|
+
|
|
71
|
+
# Health dashboard
|
|
72
|
+
organon health
|
|
73
|
+
organon health --detailed --fix-suggestions
|
|
74
|
+
|
|
75
|
+
# Cross-domain discovery
|
|
76
|
+
organon find --file=src/domain/genesis/Store.ts
|
|
77
|
+
organon find --scope=domain
|
|
78
|
+
organon find --name=frontmatter
|
|
79
|
+
|
|
80
|
+
# Run verification gates
|
|
81
|
+
organon verify
|
|
82
|
+
organon verify --gate frontmatter triplets
|
|
83
|
+
|
|
84
|
+
# Start MCP server
|
|
85
|
+
organon mcp
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## MCP Server
|
|
89
|
+
|
|
90
|
+
Start with `organon mcp`. Exposes:
|
|
91
|
+
|
|
92
|
+
**8 Tools:** `organon_validate_frontmatter`, `organon_generate_frontmatter`, `organon_query`, `organon_health`, `organon_find`, `organon_verify_triplets`, `organon_suggest_tools`, `organon_verify`
|
|
93
|
+
|
|
94
|
+
**4 Resources:** `organon://index`, `organon://file/{path}`, `organon://scope/{scope}`, `organon://health`
|
|
95
|
+
|
|
96
|
+
**4 Prompts:** `implement-feature`, `review-changes`, `create-organon`, `evolve-organon`
|
|
97
|
+
|
|
98
|
+
### Claude Code Integration
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"mcpServers": {
|
|
103
|
+
"organon": {
|
|
104
|
+
"command": "npx",
|
|
105
|
+
"args": ["tsx", "packages/tools/src/cli/index.ts", "mcp", "--project-root", "."]
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Configuration
|
|
112
|
+
|
|
113
|
+
Place `organon.config.json` at your project root:
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"organonPaths": ["book-llms", "organon", "."],
|
|
118
|
+
"organonGlobs": ["**/ETHOS.md", "**/PHILOSOPHY.md", "**/PROTOCOL.md", "**/README.md"],
|
|
119
|
+
"ignorePatterns": ["node_modules/**", "dist/**"],
|
|
120
|
+
"workflowPaths": {
|
|
121
|
+
"claudeCode": ".claude/skills",
|
|
122
|
+
"cursor": ".cursor/rules"
|
|
123
|
+
},
|
|
124
|
+
"freshnessThresholdHours": 720
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Without a config file, conventions are used: scans for `organon/` and `book-llms/` directories automatically.
|
|
129
|
+
|
|
130
|
+
## Programmatic API
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
import { validateFrontmatter, resolveConfig, NodeFileSystem } from '@organon-methodology/tools';
|
|
134
|
+
|
|
135
|
+
const fs = new NodeFileSystem();
|
|
136
|
+
const config = await resolveConfig('.', fs);
|
|
137
|
+
const result = await validateFrontmatter({ projectRoot: '.', config, fs });
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Development
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
npm install
|
|
144
|
+
npm run build
|
|
145
|
+
npm run dev # watch mode
|
|
146
|
+
npm test # vitest
|
|
147
|
+
npm run organon # run CLI locally
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## License
|
|
151
|
+
|
|
152
|
+
MIT
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* organon coverage — Invariant coverage analysis.
|
|
3
|
+
*/
|
|
4
|
+
import type { CommandModule } from 'yargs';
|
|
5
|
+
interface CoverageArgs {
|
|
6
|
+
'project-root': string;
|
|
7
|
+
config?: string;
|
|
8
|
+
json: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const coverageCommand: CommandModule<{}, CoverageArgs>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/coverage.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,UAAU,YAAY;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,EAAE,EAAE,YAAY,CAmF3D,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* organon coverage — Invariant coverage analysis.
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { resolveConfig } from '../../core/config.js';
|
|
6
|
+
import { computeInvariantCoverage } from '../../core/invariant-coverage.js';
|
|
7
|
+
import { NodeFileSystem } from '../../core/node-fs.js';
|
|
8
|
+
export const coverageCommand = {
|
|
9
|
+
command: 'coverage',
|
|
10
|
+
describe: 'Analyze invariant test coverage',
|
|
11
|
+
builder: (yargs) => {
|
|
12
|
+
return yargs
|
|
13
|
+
.option('project-root', {
|
|
14
|
+
describe: 'Project root directory',
|
|
15
|
+
type: 'string',
|
|
16
|
+
default: process.cwd(),
|
|
17
|
+
})
|
|
18
|
+
.option('config', {
|
|
19
|
+
describe: 'Path to organon.config.json',
|
|
20
|
+
type: 'string',
|
|
21
|
+
})
|
|
22
|
+
.option('json', {
|
|
23
|
+
describe: 'Output machine-readable JSON',
|
|
24
|
+
type: 'boolean',
|
|
25
|
+
default: false,
|
|
26
|
+
})
|
|
27
|
+
.example('$0 coverage', 'Show invariant coverage report')
|
|
28
|
+
.example('$0 coverage --json', 'Output coverage as JSON');
|
|
29
|
+
},
|
|
30
|
+
handler: async (args) => {
|
|
31
|
+
const fs = new NodeFileSystem();
|
|
32
|
+
const config = await resolveConfig(args['project-root'], fs, args.config);
|
|
33
|
+
const result = await computeInvariantCoverage({
|
|
34
|
+
projectRoot: args['project-root'],
|
|
35
|
+
config,
|
|
36
|
+
fs,
|
|
37
|
+
});
|
|
38
|
+
if (args.json) {
|
|
39
|
+
console.log(JSON.stringify(result, null, 2));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.log(chalk.blue('Organon Invariant Coverage'));
|
|
43
|
+
console.log();
|
|
44
|
+
if (result.invariants.length === 0) {
|
|
45
|
+
console.log(chalk.dim(' No invariants defined in frontmatter.'));
|
|
46
|
+
console.log(chalk.dim(' Add an `invariants` array to ETHOS.md frontmatter.'));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Table header
|
|
50
|
+
console.log(` ${chalk.dim('ID'.padEnd(18))}${chalk.dim('Name'.padEnd(30))}${chalk.dim('Status'.padEnd(16))}${chalk.dim('Tests')}`);
|
|
51
|
+
console.log(chalk.dim(' ' + '─'.repeat(74)));
|
|
52
|
+
for (const inv of result.invariants) {
|
|
53
|
+
const statusIcon = inv.status === 'covered' ? chalk.green('covered')
|
|
54
|
+
: inv.status === 'judgment_call' ? chalk.yellow('judgment')
|
|
55
|
+
: chalk.red('uncovered');
|
|
56
|
+
const tests = inv.tests.length > 0 ? inv.tests.join(', ') : chalk.dim('none');
|
|
57
|
+
console.log(` ${inv.id.padEnd(18)}${inv.name.padEnd(30)}${statusIcon.padEnd(16)}${tests}`);
|
|
58
|
+
}
|
|
59
|
+
console.log();
|
|
60
|
+
const { summary } = result;
|
|
61
|
+
const parts = [
|
|
62
|
+
`${summary.covered}/${summary.total} covered`,
|
|
63
|
+
];
|
|
64
|
+
if (summary.judgment_call > 0) {
|
|
65
|
+
parts.push(`${summary.judgment_call} judgment calls`);
|
|
66
|
+
}
|
|
67
|
+
if (summary.uncovered > 0) {
|
|
68
|
+
parts.push(`${summary.uncovered} uncovered`);
|
|
69
|
+
}
|
|
70
|
+
if (result.success) {
|
|
71
|
+
console.log(chalk.green(` ✓ ${parts.join(', ')}`));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.log(chalk.red(` ✗ ${parts.join(', ')}`));
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/cli/commands/coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* organon find — Cross-domain discovery.
|
|
3
|
+
*/
|
|
4
|
+
import type { CommandModule } from 'yargs';
|
|
5
|
+
interface FindArgs {
|
|
6
|
+
'project-root': string;
|
|
7
|
+
config?: string;
|
|
8
|
+
file?: string;
|
|
9
|
+
scope?: string;
|
|
10
|
+
type?: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const findCommand: CommandModule<{}, FindArgs>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=find.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/find.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,UAAU,QAAQ;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,EAAE,EAAE,QAAQ,CA6EnD,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* organon find — Cross-domain discovery.
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { resolveConfig } from '../../core/config.js';
|
|
6
|
+
import { find } from '../../core/find.js';
|
|
7
|
+
import { NodeFileSystem } from '../../core/node-fs.js';
|
|
8
|
+
export const findCommand = {
|
|
9
|
+
command: 'find',
|
|
10
|
+
describe: 'Cross-domain discovery (find organons by file, scope, type, or name)',
|
|
11
|
+
builder: (yargs) => {
|
|
12
|
+
return yargs
|
|
13
|
+
.option('project-root', {
|
|
14
|
+
describe: 'Project root directory',
|
|
15
|
+
type: 'string',
|
|
16
|
+
default: process.cwd(),
|
|
17
|
+
})
|
|
18
|
+
.option('config', {
|
|
19
|
+
describe: 'Path to organon.config.json',
|
|
20
|
+
type: 'string',
|
|
21
|
+
})
|
|
22
|
+
.option('file', {
|
|
23
|
+
describe: 'Find organons governing this file path',
|
|
24
|
+
type: 'string',
|
|
25
|
+
})
|
|
26
|
+
.option('scope', {
|
|
27
|
+
describe: 'List organons at this scope level',
|
|
28
|
+
type: 'string',
|
|
29
|
+
choices: ['product', 'domain', 'feature', 'component', 'meta', 'methodology'],
|
|
30
|
+
})
|
|
31
|
+
.option('type', {
|
|
32
|
+
describe: 'List organons of this type',
|
|
33
|
+
type: 'string',
|
|
34
|
+
choices: ['navigation', 'constraints', 'rationale', 'procedures', 'mapping'],
|
|
35
|
+
})
|
|
36
|
+
.option('name', {
|
|
37
|
+
describe: 'Find organons matching this name (substring)',
|
|
38
|
+
type: 'string',
|
|
39
|
+
})
|
|
40
|
+
.check((argv) => {
|
|
41
|
+
if (!argv.file && !argv.scope && !argv.type && !argv.name) {
|
|
42
|
+
throw new Error('Specify at least one: --file, --scope, --type, or --name');
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
45
|
+
})
|
|
46
|
+
.example('$0 find --file=src/domain/genesis/Store.ts', 'Find governing organons')
|
|
47
|
+
.example('$0 find --scope=domain', 'List all domain organons')
|
|
48
|
+
.example('$0 find --name=frontmatter', 'Search by name');
|
|
49
|
+
},
|
|
50
|
+
handler: async (args) => {
|
|
51
|
+
const fs = new NodeFileSystem();
|
|
52
|
+
const config = await resolveConfig(args['project-root'], fs, args.config);
|
|
53
|
+
const result = await find({
|
|
54
|
+
projectRoot: args['project-root'],
|
|
55
|
+
config,
|
|
56
|
+
fs,
|
|
57
|
+
file: args.file,
|
|
58
|
+
scope: args.scope,
|
|
59
|
+
type: args.type,
|
|
60
|
+
name: args.name,
|
|
61
|
+
});
|
|
62
|
+
console.log(chalk.blue('Organon Find'));
|
|
63
|
+
console.log(chalk.dim(` Mode: ${result.mode}`));
|
|
64
|
+
console.log();
|
|
65
|
+
if (result.matches.length === 0) {
|
|
66
|
+
console.log(chalk.yellow(' No matches found'));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
for (const match of result.matches) {
|
|
70
|
+
console.log(` ${chalk.green(match.file)}`);
|
|
71
|
+
if (match.frontmatter) {
|
|
72
|
+
console.log(chalk.dim(` ${match.frontmatter.type} | ${match.frontmatter.scope} | ${match.frontmatter.name}`));
|
|
73
|
+
}
|
|
74
|
+
console.log(chalk.dim(` ${match.relevance}`));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
console.log();
|
|
78
|
+
console.log(chalk.dim(`${result.matches.length} match(es)`));
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=find.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/cli/commands/find.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* organon generate-tests — Generate test scaffolds for uncovered invariants.
|
|
3
|
+
*/
|
|
4
|
+
import type { CommandModule } from 'yargs';
|
|
5
|
+
interface GenerateTestsArgs {
|
|
6
|
+
'project-root': string;
|
|
7
|
+
config?: string;
|
|
8
|
+
invariant?: string[];
|
|
9
|
+
'out-dir'?: string;
|
|
10
|
+
json: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare const generateTestsCommand: CommandModule<{}, GenerateTestsArgs>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=generate-tests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-tests.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate-tests.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,UAAU,iBAAiB;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,EAAE,EAAE,iBAAiB,CAuFrE,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* organon generate-tests — Generate test scaffolds for uncovered invariants.
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { resolveConfig } from '../../core/config.js';
|
|
6
|
+
import { generateTests } from '../../core/generate-tests.js';
|
|
7
|
+
import { NodeFileSystem } from '../../core/node-fs.js';
|
|
8
|
+
export const generateTestsCommand = {
|
|
9
|
+
command: 'generate-tests',
|
|
10
|
+
describe: 'Generate test scaffolds for uncovered invariants',
|
|
11
|
+
builder: (yargs) => {
|
|
12
|
+
return yargs
|
|
13
|
+
.option('project-root', {
|
|
14
|
+
describe: 'Project root directory',
|
|
15
|
+
type: 'string',
|
|
16
|
+
default: process.cwd(),
|
|
17
|
+
})
|
|
18
|
+
.option('config', {
|
|
19
|
+
describe: 'Path to organon.config.json',
|
|
20
|
+
type: 'string',
|
|
21
|
+
})
|
|
22
|
+
.option('invariant', {
|
|
23
|
+
describe: 'Generate for specific invariant ID(s)',
|
|
24
|
+
type: 'array',
|
|
25
|
+
string: true,
|
|
26
|
+
})
|
|
27
|
+
.option('out-dir', {
|
|
28
|
+
describe: 'Directory to write generated test files',
|
|
29
|
+
type: 'string',
|
|
30
|
+
})
|
|
31
|
+
.option('json', {
|
|
32
|
+
describe: 'Output machine-readable JSON',
|
|
33
|
+
type: 'boolean',
|
|
34
|
+
default: false,
|
|
35
|
+
})
|
|
36
|
+
.example('$0 generate-tests', 'Generate scaffolds for all uncovered invariants')
|
|
37
|
+
.example('$0 generate-tests --invariant INV-FOO-1', 'Generate for specific invariant')
|
|
38
|
+
.example('$0 generate-tests --json', 'Output as JSON');
|
|
39
|
+
},
|
|
40
|
+
handler: async (args) => {
|
|
41
|
+
const fs = new NodeFileSystem();
|
|
42
|
+
const config = await resolveConfig(args['project-root'], fs, args.config);
|
|
43
|
+
const result = await generateTests({
|
|
44
|
+
projectRoot: args['project-root'],
|
|
45
|
+
config,
|
|
46
|
+
fs,
|
|
47
|
+
invariantIds: args.invariant,
|
|
48
|
+
outDir: args['out-dir'],
|
|
49
|
+
});
|
|
50
|
+
if (args.json) {
|
|
51
|
+
console.log(JSON.stringify(result, null, 2));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
console.log(chalk.blue('Organon Generate Tests'));
|
|
55
|
+
console.log();
|
|
56
|
+
if (result.generated.length === 0 && result.alreadyCovered.length === 0 && result.judgmentCalls.length === 0) {
|
|
57
|
+
console.log(chalk.dim(' No invariants found. Add invariants to ETHOS.md frontmatter.'));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Show already covered
|
|
61
|
+
if (result.alreadyCovered.length > 0) {
|
|
62
|
+
console.log(chalk.green(` ✓ ${result.alreadyCovered.length} invariant(s) already covered`));
|
|
63
|
+
}
|
|
64
|
+
// Show judgment calls
|
|
65
|
+
if (result.judgmentCalls.length > 0) {
|
|
66
|
+
console.log(chalk.yellow(` ○ ${result.judgmentCalls.length} judgment call(s) (no test needed)`));
|
|
67
|
+
}
|
|
68
|
+
// Show generated scaffolds
|
|
69
|
+
if (result.generated.length > 0) {
|
|
70
|
+
console.log(chalk.cyan(` ⚡ ${result.generated.length} test scaffold(s) generated:`));
|
|
71
|
+
console.log();
|
|
72
|
+
for (const test of result.generated) {
|
|
73
|
+
console.log(chalk.dim(` ─── ${test.invariant.id}: ${test.invariant.name} ───`));
|
|
74
|
+
console.log(chalk.dim(` Suggested assertion: ${test.assertion}`));
|
|
75
|
+
console.log(chalk.dim(` Suggested filename: ${test.filename}`));
|
|
76
|
+
console.log();
|
|
77
|
+
console.log(test.code);
|
|
78
|
+
console.log();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.log();
|
|
83
|
+
console.log(chalk.green(' All invariants are covered!'));
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=generate-tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-tests.js","sourceRoot":"","sources":["../../../src/cli/commands/generate-tests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* organon generate — Auto-generate frontmatter from file content.
|
|
3
|
+
*/
|
|
4
|
+
import type { CommandModule } from 'yargs';
|
|
5
|
+
interface GenerateArgs {
|
|
6
|
+
file: string;
|
|
7
|
+
'project-root': string;
|
|
8
|
+
config?: string;
|
|
9
|
+
update?: boolean;
|
|
10
|
+
type?: string;
|
|
11
|
+
scope?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const generateCommand: CommandModule<{}, GenerateArgs>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,EAAE,EAAE,YAAY,CA0E3D,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* organon generate — Auto-generate frontmatter from file content.
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { resolveConfig } from '../../core/config.js';
|
|
6
|
+
import { generateFrontmatter, serializeFrontmatter } from '../../core/generate-frontmatter.js';
|
|
7
|
+
import { NodeFileSystem } from '../../core/node-fs.js';
|
|
8
|
+
export const generateCommand = {
|
|
9
|
+
command: 'generate <file>',
|
|
10
|
+
describe: 'Auto-generate frontmatter for an organon file',
|
|
11
|
+
builder: (yargs) => {
|
|
12
|
+
return yargs
|
|
13
|
+
.positional('file', {
|
|
14
|
+
describe: 'File to generate frontmatter for',
|
|
15
|
+
type: 'string',
|
|
16
|
+
demandOption: true,
|
|
17
|
+
})
|
|
18
|
+
.option('project-root', {
|
|
19
|
+
describe: 'Project root directory',
|
|
20
|
+
type: 'string',
|
|
21
|
+
default: process.cwd(),
|
|
22
|
+
})
|
|
23
|
+
.option('config', {
|
|
24
|
+
describe: 'Path to organon.config.json',
|
|
25
|
+
type: 'string',
|
|
26
|
+
})
|
|
27
|
+
.option('update', {
|
|
28
|
+
describe: 'Write generated frontmatter back to file',
|
|
29
|
+
type: 'boolean',
|
|
30
|
+
default: false,
|
|
31
|
+
})
|
|
32
|
+
.option('type', {
|
|
33
|
+
describe: 'Override auto-detected type',
|
|
34
|
+
type: 'string',
|
|
35
|
+
choices: ['navigation', 'constraints', 'rationale', 'procedures', 'mapping'],
|
|
36
|
+
})
|
|
37
|
+
.option('scope', {
|
|
38
|
+
describe: 'Override auto-detected scope',
|
|
39
|
+
type: 'string',
|
|
40
|
+
choices: ['product', 'domain', 'feature', 'component', 'meta', 'methodology'],
|
|
41
|
+
})
|
|
42
|
+
.example('$0 generate book-llms/ETHOS.md', 'Generate frontmatter (dry run)')
|
|
43
|
+
.example('$0 generate book-llms/ETHOS.md --update', 'Generate and write to file');
|
|
44
|
+
},
|
|
45
|
+
handler: async (args) => {
|
|
46
|
+
const fs = new NodeFileSystem();
|
|
47
|
+
const config = await resolveConfig(args['project-root'], fs, args.config);
|
|
48
|
+
const result = await generateFrontmatter({
|
|
49
|
+
projectRoot: args['project-root'],
|
|
50
|
+
config,
|
|
51
|
+
fs,
|
|
52
|
+
file: args.file,
|
|
53
|
+
update: args.update,
|
|
54
|
+
type: args.type,
|
|
55
|
+
scope: args.scope,
|
|
56
|
+
});
|
|
57
|
+
console.log(chalk.blue('Organon Generate'));
|
|
58
|
+
console.log();
|
|
59
|
+
if (!result.success) {
|
|
60
|
+
for (const e of result.errors) {
|
|
61
|
+
console.log(chalk.red(` ✗ [${e.code}] ${e.message}`));
|
|
62
|
+
}
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
const yaml = serializeFrontmatter(result.generated);
|
|
66
|
+
console.log(chalk.dim('Generated frontmatter:'));
|
|
67
|
+
console.log();
|
|
68
|
+
console.log(yaml);
|
|
69
|
+
if (args.update) {
|
|
70
|
+
console.log(chalk.green(`✓ Updated ${args.file}`));
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
console.log(chalk.dim('(dry run — use --update to write)'));
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* organon health — Dashboard showing coverage, validation, tokens, freshness.
|
|
3
|
+
*/
|
|
4
|
+
import type { CommandModule } from 'yargs';
|
|
5
|
+
interface HealthArgs {
|
|
6
|
+
'project-root': string;
|
|
7
|
+
config?: string;
|
|
8
|
+
detailed?: boolean;
|
|
9
|
+
'fix-suggestions'?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const healthCommand: CommandModule<{}, HealthArgs>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/health.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,UAAU,UAAU;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,EAAE,EAAE,UAAU,CAiFvD,CAAC"}
|