@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-invariants.test.js","sourceRoot":"","sources":["../../src/core/meta-invariants.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NodeFileSystem — concrete FileSystem implementation using Node.js APIs.
|
|
3
|
+
*
|
|
4
|
+
* Used by CLI and MCP server for real I/O. Core functions receive the
|
|
5
|
+
* FileSystem interface, not this class directly.
|
|
6
|
+
*/
|
|
7
|
+
import type { FileSystem, FileStat } from './types.js';
|
|
8
|
+
export declare class NodeFileSystem implements FileSystem {
|
|
9
|
+
readFile(filePath: string): Promise<string>;
|
|
10
|
+
readDir(dirPath: string): Promise<string[]>;
|
|
11
|
+
exists(filePath: string): Promise<boolean>;
|
|
12
|
+
glob(pattern: string, options?: {
|
|
13
|
+
cwd: string;
|
|
14
|
+
ignore?: string[];
|
|
15
|
+
}): Promise<string[]>;
|
|
16
|
+
stat(filePath: string): Promise<FileStat>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Resolve a potentially relative path against a base directory.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolvePath(base: string, relative: string): string;
|
|
22
|
+
//# sourceMappingURL=node-fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-fs.d.ts","sourceRoot":"","sources":["../../src/core/node-fs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEvD,qBAAa,cAAe,YAAW,UAAU;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK3C,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1C,IAAI,CACR,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC3C,OAAO,CAAC,MAAM,EAAE,CAAC;IAUd,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAIhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NodeFileSystem — concrete FileSystem implementation using Node.js APIs.
|
|
3
|
+
*
|
|
4
|
+
* Used by CLI and MCP server for real I/O. Core functions receive the
|
|
5
|
+
* FileSystem interface, not this class directly.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'node:fs/promises';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { glob as globFn } from 'glob';
|
|
10
|
+
export class NodeFileSystem {
|
|
11
|
+
async readFile(filePath) {
|
|
12
|
+
return fs.readFile(filePath, 'utf-8');
|
|
13
|
+
}
|
|
14
|
+
async readDir(dirPath) {
|
|
15
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
16
|
+
return entries.map((e) => e.name);
|
|
17
|
+
}
|
|
18
|
+
async exists(filePath) {
|
|
19
|
+
try {
|
|
20
|
+
await fs.access(filePath);
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async glob(pattern, options) {
|
|
28
|
+
const results = await globFn(pattern, {
|
|
29
|
+
cwd: options?.cwd,
|
|
30
|
+
ignore: options?.ignore,
|
|
31
|
+
nodir: true,
|
|
32
|
+
posix: true,
|
|
33
|
+
});
|
|
34
|
+
return results;
|
|
35
|
+
}
|
|
36
|
+
async stat(filePath) {
|
|
37
|
+
const s = await fs.stat(filePath);
|
|
38
|
+
return { mtime: s.mtime, size: s.size };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve a potentially relative path against a base directory.
|
|
43
|
+
*/
|
|
44
|
+
export function resolvePath(base, relative) {
|
|
45
|
+
return path.resolve(base, relative);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=node-fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-fs.js","sourceRoot":"","sources":["../../src/core/node-fs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAGtC,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe;QAC3B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CACR,OAAe,EACf,OAA4C;QAE5C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE;YACpC,GAAG,EAAE,OAAO,EAAE,GAAG;YACjB,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,QAAgB;IACxD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dogfood tests: @organon-methodology/testing used inside @organon-methodology/tools.
|
|
3
|
+
*
|
|
4
|
+
* These tests exercise the @organon-methodology/testing library against real source files
|
|
5
|
+
* in this package, proving the API works end-to-end from a consumer perspective.
|
|
6
|
+
*
|
|
7
|
+
* @organon-invariant INV-TOOLS-1 schema-fidelity
|
|
8
|
+
* @organon-invariant INV-TOOLS-2 every-command-has-tests
|
|
9
|
+
* @organon-invariant INV-TOOLS-3 gates-fail-not-warn
|
|
10
|
+
* @organon-invariant INV-TOOLS-4 machine-parsable-output
|
|
11
|
+
* @organon-invariant INV-TOOLS-5 idempotent-operations
|
|
12
|
+
* @organon-invariant INV-TOOLS-6 breaking-changes-major-version
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=organon-invariants.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organon-invariants.test.d.ts","sourceRoot":"","sources":["../../src/core/organon-invariants.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dogfood tests: @organon-methodology/testing used inside @organon-methodology/tools.
|
|
3
|
+
*
|
|
4
|
+
* These tests exercise the @organon-methodology/testing library against real source files
|
|
5
|
+
* in this package, proving the API works end-to-end from a consumer perspective.
|
|
6
|
+
*
|
|
7
|
+
* @organon-invariant INV-TOOLS-1 schema-fidelity
|
|
8
|
+
* @organon-invariant INV-TOOLS-2 every-command-has-tests
|
|
9
|
+
* @organon-invariant INV-TOOLS-3 gates-fail-not-warn
|
|
10
|
+
* @organon-invariant INV-TOOLS-4 machine-parsable-output
|
|
11
|
+
* @organon-invariant INV-TOOLS-5 idempotent-operations
|
|
12
|
+
* @organon-invariant INV-TOOLS-6 breaking-changes-major-version
|
|
13
|
+
*/
|
|
14
|
+
import { describe } from 'vitest';
|
|
15
|
+
import { testInvariant, assertMaxValue } from '@organon-methodology/testing/vitest';
|
|
16
|
+
import { resolve } from 'node:path';
|
|
17
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
18
|
+
import { validateFrontmatter } from './validate-frontmatter.js';
|
|
19
|
+
import { validateWorkflow } from './validate-workflow.js';
|
|
20
|
+
import { MemoryFileSystem, makeEthos } from './test-helpers.js';
|
|
21
|
+
const coreDir = resolve(import.meta.dirname, '.');
|
|
22
|
+
describe('@organon-methodology/testing dogfood — tools invariant verification', () => {
|
|
23
|
+
// -------------------------------------------------------------------------
|
|
24
|
+
// INV-TOOLS-1: schema-fidelity — MAX_SUMMARY_LENGTH ≤ 200
|
|
25
|
+
// -------------------------------------------------------------------------
|
|
26
|
+
testInvariant('INV-TOOLS-1', 'MAX_SUMMARY_LENGTH does not exceed 200 characters', async () => {
|
|
27
|
+
await assertMaxValue({
|
|
28
|
+
files: ['src/core/validate-frontmatter.ts'],
|
|
29
|
+
pattern: /MAX_SUMMARY_LENGTH\s*=\s*(\d+)/,
|
|
30
|
+
maxValue: 200,
|
|
31
|
+
unit: 'characters',
|
|
32
|
+
cwd: resolve(coreDir, '../..'),
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
// -------------------------------------------------------------------------
|
|
36
|
+
// INV-TOOLS-1: schema-fidelity — TOKEN_TOLERANCE ≤ 2.0
|
|
37
|
+
// -------------------------------------------------------------------------
|
|
38
|
+
testInvariant('INV-TOOLS-1', 'TOKEN_TOLERANCE stays within reasonable bounds (max 2.0)', async () => {
|
|
39
|
+
await assertMaxValue({
|
|
40
|
+
files: ['src/core/validate-frontmatter.ts'],
|
|
41
|
+
pattern: /TOKEN_TOLERANCE\s*=\s*([\d.]+)/,
|
|
42
|
+
maxValue: 2.0,
|
|
43
|
+
unit: 'ratio',
|
|
44
|
+
cwd: resolve(coreDir, '../..'),
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
// -------------------------------------------------------------------------
|
|
48
|
+
// INV-TOOLS-2: every-command-has-tests — core/ has ≥ 5 test files
|
|
49
|
+
// -------------------------------------------------------------------------
|
|
50
|
+
testInvariant('INV-TOOLS-2', 'core/ directory has at least 5 test files', async () => {
|
|
51
|
+
const entries = await readdir(coreDir);
|
|
52
|
+
const testFiles = entries.filter((f) => f.endsWith('.test.ts'));
|
|
53
|
+
if (testFiles.length < 5) {
|
|
54
|
+
throw new Error(`Expected at least 5 test files in core/, found ${testFiles.length}: ${testFiles.join(', ')}`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
// -------------------------------------------------------------------------
|
|
58
|
+
// INV-TOOLS-3: gates-fail-not-warn — gate errors use 'error' severity
|
|
59
|
+
// -------------------------------------------------------------------------
|
|
60
|
+
testInvariant('INV-TOOLS-3', 'verification gates produce errors (not warnings) for blocking checks', async () => {
|
|
61
|
+
// A workflow missing required fields should produce errors, not warnings
|
|
62
|
+
const fs = new MemoryFileSystem({
|
|
63
|
+
'/project/workflows/bad.md': '# No frontmatter',
|
|
64
|
+
});
|
|
65
|
+
const config = {
|
|
66
|
+
projectRoot: '/project',
|
|
67
|
+
organonPaths: ['.'],
|
|
68
|
+
organonGlobs: ['**/ETHOS.md'],
|
|
69
|
+
ignorePatterns: [],
|
|
70
|
+
workflowPaths: { generic: 'workflows' },
|
|
71
|
+
freshnessThresholdHours: 24,
|
|
72
|
+
};
|
|
73
|
+
const result = await validateWorkflow({ projectRoot: '/project', config, fs });
|
|
74
|
+
// Must fail (not just warn)
|
|
75
|
+
if (result.success) {
|
|
76
|
+
throw new Error('Gate should fail for invalid workflow, not silently pass');
|
|
77
|
+
}
|
|
78
|
+
// All blocking issues must be errors, not warnings
|
|
79
|
+
for (const err of result.errors) {
|
|
80
|
+
if (err.severity !== 'error') {
|
|
81
|
+
throw new Error(`Blocking diagnostic ${err.code} has severity '${err.severity}', expected 'error'`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
// -------------------------------------------------------------------------
|
|
86
|
+
// INV-TOOLS-4: machine-parsable-output — results are structured objects
|
|
87
|
+
// -------------------------------------------------------------------------
|
|
88
|
+
testInvariant('INV-TOOLS-4', 'validation results are structured objects with success/errors fields', async () => {
|
|
89
|
+
const fs = new MemoryFileSystem({
|
|
90
|
+
'/project/ETHOS.md': makeEthos(),
|
|
91
|
+
});
|
|
92
|
+
const config = {
|
|
93
|
+
projectRoot: '/project',
|
|
94
|
+
organonPaths: ['.'],
|
|
95
|
+
organonGlobs: ['**/ETHOS.md'],
|
|
96
|
+
ignorePatterns: [],
|
|
97
|
+
workflowPaths: {},
|
|
98
|
+
freshnessThresholdHours: 24,
|
|
99
|
+
};
|
|
100
|
+
const result = await validateFrontmatter({ projectRoot: '/project', config, fs });
|
|
101
|
+
// Result must have structured fields for programmatic consumption
|
|
102
|
+
if (typeof result.success !== 'boolean') {
|
|
103
|
+
throw new Error('Result must have boolean success field');
|
|
104
|
+
}
|
|
105
|
+
if (!Array.isArray(result.errors)) {
|
|
106
|
+
throw new Error('Result must have errors array');
|
|
107
|
+
}
|
|
108
|
+
if (!Array.isArray(result.warnings)) {
|
|
109
|
+
throw new Error('Result must have warnings array');
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
// -------------------------------------------------------------------------
|
|
113
|
+
// INV-TOOLS-5: idempotent-operations — same input → same output
|
|
114
|
+
// -------------------------------------------------------------------------
|
|
115
|
+
testInvariant('INV-TOOLS-5', 're-running validation with identical input produces identical output', async () => {
|
|
116
|
+
const fs = new MemoryFileSystem({
|
|
117
|
+
'/project/ETHOS.md': makeEthos(),
|
|
118
|
+
});
|
|
119
|
+
const config = {
|
|
120
|
+
projectRoot: '/project',
|
|
121
|
+
organonPaths: ['.'],
|
|
122
|
+
organonGlobs: ['**/ETHOS.md'],
|
|
123
|
+
ignorePatterns: [],
|
|
124
|
+
workflowPaths: {},
|
|
125
|
+
freshnessThresholdHours: 24,
|
|
126
|
+
};
|
|
127
|
+
const opts = { projectRoot: '/project', config, fs };
|
|
128
|
+
const result1 = await validateFrontmatter(opts);
|
|
129
|
+
const result2 = await validateFrontmatter(opts);
|
|
130
|
+
if (result1.success !== result2.success) {
|
|
131
|
+
throw new Error('Idempotency violated: success differs between runs');
|
|
132
|
+
}
|
|
133
|
+
if (result1.errors.length !== result2.errors.length) {
|
|
134
|
+
throw new Error('Idempotency violated: error count differs between runs');
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
// -------------------------------------------------------------------------
|
|
138
|
+
// INV-TOOLS-6: breaking-changes-major-version — version is semver
|
|
139
|
+
// -------------------------------------------------------------------------
|
|
140
|
+
testInvariant('INV-TOOLS-6', 'package.json version follows semver format', async () => {
|
|
141
|
+
const pkgPath = resolve(coreDir, '../../package.json');
|
|
142
|
+
const pkgJson = JSON.parse(await readFile(pkgPath, 'utf-8'));
|
|
143
|
+
const semverRe = /^\d+\.\d+\.\d+/;
|
|
144
|
+
if (!semverRe.test(pkgJson.version)) {
|
|
145
|
+
throw new Error(`Version "${pkgJson.version}" does not follow semver`);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=organon-invariants.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organon-invariants.test.js","sourceRoot":"","sources":["../../src/core/organon-invariants.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query organon files by frontmatter metadata.
|
|
3
|
+
*
|
|
4
|
+
* Supports filtering by scope, type, priority, task, budget, name pattern,
|
|
5
|
+
* and related entities. Returns matching files with frontmatter and total
|
|
6
|
+
* token cost for context budget planning.
|
|
7
|
+
*/
|
|
8
|
+
import type { FileSystem, FrontmatterScope, FrontmatterType, LoadPriority, OrganonConfig, QueryResult } from './types.js';
|
|
9
|
+
export interface QueryOptions {
|
|
10
|
+
projectRoot: string;
|
|
11
|
+
config: OrganonConfig;
|
|
12
|
+
fs: FileSystem;
|
|
13
|
+
/** Filter by scope */
|
|
14
|
+
scope?: FrontmatterScope;
|
|
15
|
+
/** Filter by type */
|
|
16
|
+
type?: FrontmatterType;
|
|
17
|
+
/** Filter by load_priority */
|
|
18
|
+
priority?: LoadPriority;
|
|
19
|
+
/** Filter by required_for containing this task */
|
|
20
|
+
task?: string;
|
|
21
|
+
/** Maximum total token budget — stops adding files when budget exceeded */
|
|
22
|
+
budget?: number;
|
|
23
|
+
/** Filter by name pattern (substring match) */
|
|
24
|
+
namePattern?: string;
|
|
25
|
+
/** Filter by related domain name */
|
|
26
|
+
relatedDomain?: string;
|
|
27
|
+
/** Filter by related feature name */
|
|
28
|
+
relatedFeature?: string;
|
|
29
|
+
/** Include files without frontmatter in results */
|
|
30
|
+
includeInvalid?: boolean;
|
|
31
|
+
/** Return full file content (body) or just frontmatter */
|
|
32
|
+
verbose?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare function query(options: QueryOptions): Promise<QueryResult>;
|
|
35
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/core/query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAEV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,aAAa,EAEb,WAAW,EACZ,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,EAAE,EAAE,UAAU,CAAC;IACf,sBAAsB;IACtB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,qBAAqB;IACrB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAkIvE"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query organon files by frontmatter metadata.
|
|
3
|
+
*
|
|
4
|
+
* Supports filtering by scope, type, priority, task, budget, name pattern,
|
|
5
|
+
* and related entities. Returns matching files with frontmatter and total
|
|
6
|
+
* token cost for context budget planning.
|
|
7
|
+
*/
|
|
8
|
+
import { parseOrganonFile } from './frontmatter-parser.js';
|
|
9
|
+
import { joinPath } from './config.js';
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Main
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
export async function query(options) {
|
|
14
|
+
const { projectRoot, config, fs } = options;
|
|
15
|
+
const errors = [];
|
|
16
|
+
const warnings = [];
|
|
17
|
+
// Discover all organon files
|
|
18
|
+
const allFiles = await discoverOrganonFiles(projectRoot, config, fs);
|
|
19
|
+
// Parse frontmatter for all files
|
|
20
|
+
const parsed = [];
|
|
21
|
+
for (const file of allFiles) {
|
|
22
|
+
const absPath = joinPath(projectRoot, file);
|
|
23
|
+
try {
|
|
24
|
+
const content = await fs.readFile(absPath);
|
|
25
|
+
parsed.push(parseOrganonFile(file, content));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
errors.push({
|
|
29
|
+
severity: 'error',
|
|
30
|
+
code: 'FILE_READ_ERROR',
|
|
31
|
+
message: `Cannot read file: ${file}`,
|
|
32
|
+
file,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Apply filters
|
|
37
|
+
let filtered = parsed;
|
|
38
|
+
// Filter out files without frontmatter (unless includeInvalid)
|
|
39
|
+
if (!options.includeInvalid) {
|
|
40
|
+
filtered = filtered.filter((f) => f.frontmatter !== null);
|
|
41
|
+
}
|
|
42
|
+
// Filter by scope
|
|
43
|
+
if (options.scope) {
|
|
44
|
+
filtered = filtered.filter((f) => f.frontmatter?.scope === options.scope);
|
|
45
|
+
}
|
|
46
|
+
// Filter by type
|
|
47
|
+
if (options.type) {
|
|
48
|
+
filtered = filtered.filter((f) => f.frontmatter?.type === options.type);
|
|
49
|
+
}
|
|
50
|
+
// Filter by priority
|
|
51
|
+
if (options.priority) {
|
|
52
|
+
filtered = filtered.filter((f) => f.frontmatter?.load_priority === options.priority);
|
|
53
|
+
}
|
|
54
|
+
// Filter by task (required_for)
|
|
55
|
+
if (options.task) {
|
|
56
|
+
filtered = filtered.filter((f) => f.frontmatter?.required_for?.includes(options.task));
|
|
57
|
+
}
|
|
58
|
+
// Filter by name pattern
|
|
59
|
+
if (options.namePattern) {
|
|
60
|
+
const pattern = options.namePattern.toLowerCase();
|
|
61
|
+
filtered = filtered.filter((f) => f.frontmatter?.name?.toLowerCase().includes(pattern));
|
|
62
|
+
}
|
|
63
|
+
// Filter by related domain
|
|
64
|
+
if (options.relatedDomain) {
|
|
65
|
+
filtered = filtered.filter((f) => f.frontmatter?.related_domains?.includes(options.relatedDomain) ||
|
|
66
|
+
f.frontmatter?.name === options.relatedDomain);
|
|
67
|
+
}
|
|
68
|
+
// Filter by related feature
|
|
69
|
+
if (options.relatedFeature) {
|
|
70
|
+
filtered = filtered.filter((f) => f.frontmatter?.related_features?.includes(options.relatedFeature) ||
|
|
71
|
+
f.frontmatter?.name === options.relatedFeature);
|
|
72
|
+
}
|
|
73
|
+
// Sort by load_priority (high first), then by token_estimate (smallest first)
|
|
74
|
+
filtered.sort((a, b) => {
|
|
75
|
+
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
76
|
+
const aPri = priorityOrder[a.frontmatter?.load_priority ?? 'medium'];
|
|
77
|
+
const bPri = priorityOrder[b.frontmatter?.load_priority ?? 'medium'];
|
|
78
|
+
if (aPri !== bPri)
|
|
79
|
+
return aPri - bPri;
|
|
80
|
+
return (a.frontmatter?.token_estimate ?? 0) - (b.frontmatter?.token_estimate ?? 0);
|
|
81
|
+
});
|
|
82
|
+
// Apply budget constraint
|
|
83
|
+
if (options.budget) {
|
|
84
|
+
let tokenSum = 0;
|
|
85
|
+
const budgetFiltered = [];
|
|
86
|
+
for (const f of filtered) {
|
|
87
|
+
const tokens = f.frontmatter?.token_estimate ?? 0;
|
|
88
|
+
if (tokenSum + tokens <= options.budget) {
|
|
89
|
+
budgetFiltered.push(f);
|
|
90
|
+
tokenSum += tokens;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
warnings.push({
|
|
94
|
+
severity: 'warning',
|
|
95
|
+
code: 'BUDGET_EXCEEDED',
|
|
96
|
+
message: `Skipping '${f.path}' (${tokens} tokens) — would exceed budget of ${options.budget}`,
|
|
97
|
+
file: f.path,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
filtered = budgetFiltered;
|
|
102
|
+
}
|
|
103
|
+
// Strip body content if not verbose
|
|
104
|
+
if (!options.verbose) {
|
|
105
|
+
filtered = filtered.map((f) => ({
|
|
106
|
+
...f,
|
|
107
|
+
body: '',
|
|
108
|
+
content: '',
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
const totalTokens = filtered.reduce((sum, f) => sum + (f.frontmatter?.token_estimate ?? 0), 0);
|
|
112
|
+
return {
|
|
113
|
+
success: errors.length === 0,
|
|
114
|
+
files: filtered,
|
|
115
|
+
totalTokens,
|
|
116
|
+
errors,
|
|
117
|
+
warnings,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
// Helpers
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
async function discoverOrganonFiles(projectRoot, config, fs) {
|
|
124
|
+
const allFiles = new Set();
|
|
125
|
+
for (const organonPath of config.organonPaths) {
|
|
126
|
+
for (const pattern of config.organonGlobs) {
|
|
127
|
+
const fullPattern = organonPath === '.' ? pattern : `${organonPath}/${pattern}`;
|
|
128
|
+
const matches = await fs.glob(fullPattern, {
|
|
129
|
+
cwd: projectRoot,
|
|
130
|
+
ignore: config.ignorePatterns,
|
|
131
|
+
});
|
|
132
|
+
for (const m of matches) {
|
|
133
|
+
allFiles.add(m);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return [...allFiles].sort();
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/core/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.test.d.ts","sourceRoot":"","sources":["../../src/core/query.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { query } from './query.js';
|
|
3
|
+
import { MemoryFileSystem, makeEthos, makePhilosophy, makeReadme } from './test-helpers.js';
|
|
4
|
+
function makeConfig(projectRoot) {
|
|
5
|
+
return {
|
|
6
|
+
projectRoot,
|
|
7
|
+
organonPaths: ['.'],
|
|
8
|
+
organonGlobs: ['**/ETHOS.md', '**/PHILOSOPHY.md', '**/PROTOCOLS.md', '**/README.md'],
|
|
9
|
+
ignorePatterns: [],
|
|
10
|
+
workflowPaths: {},
|
|
11
|
+
freshnessThresholdHours: 24,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
describe('query', () => {
|
|
15
|
+
const ethosContent = makeEthos({ name: 'genesis', scope: 'domain', extra: { load_priority: 'high', 'required_for': '[genesis_impl]' } });
|
|
16
|
+
const philContent = makePhilosophy({ name: 'genesis-phil' });
|
|
17
|
+
const readmeContent = makeReadme({ name: 'root', scope: 'product' });
|
|
18
|
+
function makeFs() {
|
|
19
|
+
return new MemoryFileSystem({
|
|
20
|
+
'/project/organon/domains/genesis/ETHOS.md': ethosContent,
|
|
21
|
+
'/project/organon/domains/genesis/PHILOSOPHY.md': philContent,
|
|
22
|
+
'/project/README.md': readmeContent,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
it('returns all files with frontmatter by default', async () => {
|
|
26
|
+
const fs = makeFs();
|
|
27
|
+
const config = makeConfig('/project');
|
|
28
|
+
const result = await query({ projectRoot: '/project', config, fs });
|
|
29
|
+
expect(result.success).toBe(true);
|
|
30
|
+
expect(result.files.length).toBe(3);
|
|
31
|
+
});
|
|
32
|
+
it('filters by scope', async () => {
|
|
33
|
+
const fs = makeFs();
|
|
34
|
+
const config = makeConfig('/project');
|
|
35
|
+
const result = await query({ projectRoot: '/project', config, fs, scope: 'domain' });
|
|
36
|
+
expect(result.files.length).toBe(2); // genesis ETHOS + PHILOSOPHY
|
|
37
|
+
expect(result.files.every((f) => f.frontmatter?.scope === 'domain')).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
it('filters by type', async () => {
|
|
40
|
+
const fs = makeFs();
|
|
41
|
+
const config = makeConfig('/project');
|
|
42
|
+
const result = await query({ projectRoot: '/project', config, fs, type: 'constraints' });
|
|
43
|
+
expect(result.files.length).toBe(1);
|
|
44
|
+
expect(result.files[0].frontmatter?.type).toBe('constraints');
|
|
45
|
+
});
|
|
46
|
+
it('filters by name pattern', async () => {
|
|
47
|
+
const fs = makeFs();
|
|
48
|
+
const config = makeConfig('/project');
|
|
49
|
+
const result = await query({ projectRoot: '/project', config, fs, namePattern: 'genesis' });
|
|
50
|
+
expect(result.files.length).toBe(2);
|
|
51
|
+
});
|
|
52
|
+
it('respects token budget', async () => {
|
|
53
|
+
const fs = makeFs();
|
|
54
|
+
const config = makeConfig('/project');
|
|
55
|
+
// Budget of 200 tokens - should only fit small files
|
|
56
|
+
const result = await query({ projectRoot: '/project', config, fs, budget: 200 });
|
|
57
|
+
expect(result.totalTokens).toBeLessThanOrEqual(200);
|
|
58
|
+
expect(result.warnings.some((w) => w.code === 'BUDGET_EXCEEDED')).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
it('calculates total tokens', async () => {
|
|
61
|
+
const fs = makeFs();
|
|
62
|
+
const config = makeConfig('/project');
|
|
63
|
+
const result = await query({ projectRoot: '/project', config, fs });
|
|
64
|
+
expect(result.totalTokens).toBeGreaterThan(0);
|
|
65
|
+
});
|
|
66
|
+
it('strips body in non-verbose mode', async () => {
|
|
67
|
+
const fs = makeFs();
|
|
68
|
+
const config = makeConfig('/project');
|
|
69
|
+
const result = await query({ projectRoot: '/project', config, fs, verbose: false });
|
|
70
|
+
expect(result.files.every((f) => f.body === '')).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
it('includes body in verbose mode', async () => {
|
|
73
|
+
const fs = makeFs();
|
|
74
|
+
const config = makeConfig('/project');
|
|
75
|
+
const result = await query({ projectRoot: '/project', config, fs, verbose: true });
|
|
76
|
+
expect(result.files.some((f) => f.body.length > 0)).toBe(true);
|
|
77
|
+
});
|
|
78
|
+
it('excludes files without frontmatter by default', async () => {
|
|
79
|
+
const fs = new MemoryFileSystem({
|
|
80
|
+
'/project/ETHOS.md': makeEthos({ name: 'test', scope: 'product' }),
|
|
81
|
+
'/project/README.md': '# No frontmatter',
|
|
82
|
+
});
|
|
83
|
+
const config = makeConfig('/project');
|
|
84
|
+
const result = await query({ projectRoot: '/project', config, fs });
|
|
85
|
+
expect(result.files.length).toBe(1);
|
|
86
|
+
});
|
|
87
|
+
it('includes invalid files when requested', async () => {
|
|
88
|
+
const fs = new MemoryFileSystem({
|
|
89
|
+
'/project/ETHOS.md': makeEthos({ name: 'test', scope: 'product' }),
|
|
90
|
+
'/project/README.md': '# No frontmatter',
|
|
91
|
+
});
|
|
92
|
+
const config = makeConfig('/project');
|
|
93
|
+
const result = await query({ projectRoot: '/project', config, fs, includeInvalid: true });
|
|
94
|
+
expect(result.files.length).toBe(2);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=query.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.test.js","sourceRoot":"","sources":["../../src/core/query.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automation suggestion heuristics.
|
|
3
|
+
*
|
|
4
|
+
* Analyzes protocols and suggests which ones should be upgraded
|
|
5
|
+
* from manual → semi-automated → automated, based on step count,
|
|
6
|
+
* complexity, frequency indicators, and error-proneness.
|
|
7
|
+
*/
|
|
8
|
+
import type { FileSystem, OrganonConfig, SuggestToolsResult } from './types.js';
|
|
9
|
+
export interface SuggestToolsOptions {
|
|
10
|
+
projectRoot: string;
|
|
11
|
+
config: OrganonConfig;
|
|
12
|
+
fs: FileSystem;
|
|
13
|
+
}
|
|
14
|
+
export declare function suggestTools(options: SuggestToolsOptions): Promise<SuggestToolsResult>;
|
|
15
|
+
//# sourceMappingURL=suggest-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest-tools.d.ts","sourceRoot":"","sources":["../../src/core/suggest-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAIV,UAAU,EACV,aAAa,EACb,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,EAAE,EAAE,UAAU,CAAC;CAChB;AA2BD,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA6C7B"}
|