@yourtechtribe-labs/koncept-cli 0.2.0-alpha.0 → 0.2.0-alpha.2

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.
@@ -0,0 +1,3 @@
1
+ import type { CommandContext } from '../index.js';
2
+ export declare function runCheck(ctx: CommandContext): Promise<number>;
3
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,wBAAsB,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAanE"}
@@ -0,0 +1,65 @@
1
+ import { runChecks } from '@yourtechtribe-labs/koncept-core';
2
+ // ─── Entry point ──────────────────────────────────────────────────────────────
3
+ export async function runCheck(ctx) {
4
+ const filterId = typeof ctx.flags.id === 'string' ? ctx.flags.id : undefined;
5
+ const json = ctx.flags.json === true;
6
+ const result = await runChecks({ cwd: ctx.rootDir, filterId });
7
+ if (json) {
8
+ renderJson(result);
9
+ }
10
+ else {
11
+ renderTable(result);
12
+ }
13
+ return exitCode(result);
14
+ }
15
+ // ─── Renderers ────────────────────────────────────────────────────────────────
16
+ function renderTable(result) {
17
+ const total = result.results.length;
18
+ const concepts = new Set(result.results.map((r) => r.conceptId)).size;
19
+ process.stdout.write(`koncepto check — ${concepts} concept(s), ${total} invariant(s)\n\n`);
20
+ for (const r of result.results) {
21
+ const symbol = statusSymbol(r.status);
22
+ const line = [
23
+ ' ',
24
+ r.conceptId.padEnd(24),
25
+ r.invariantId.padEnd(28),
26
+ r.kind.padEnd(9),
27
+ symbol,
28
+ r.status,
29
+ ].join(' ');
30
+ process.stdout.write(line + '\n');
31
+ if (r.detail) {
32
+ process.stdout.write(` └─ ${r.detail}\n`);
33
+ }
34
+ }
35
+ process.stdout.write(`\n Results: ${result.passed} passed · ${result.failed} failed · ${result.skipped} skipped · ${result.errors} errors\n`);
36
+ }
37
+ function renderJson(result) {
38
+ const output = {
39
+ results: result.results,
40
+ summary: {
41
+ passed: result.passed,
42
+ failed: result.failed,
43
+ skipped: result.skipped,
44
+ errors: result.errors,
45
+ },
46
+ };
47
+ process.stdout.write(JSON.stringify(output, null, 2) + '\n');
48
+ }
49
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
50
+ function statusSymbol(status) {
51
+ switch (status) {
52
+ case 'pass': return '✓';
53
+ case 'fail': return '✗';
54
+ case 'skip': return '–';
55
+ case 'error': return '!';
56
+ }
57
+ }
58
+ function exitCode(result) {
59
+ if (result.errors > 0)
60
+ return 2;
61
+ if (result.failed > 0)
62
+ return 1;
63
+ return 0;
64
+ }
65
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA4BA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;CACxC;AAYD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBtF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAiCA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;CACxC;AAaD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBtF"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import { realpathSync } from 'node:fs';
2
3
  import { resolve } from 'node:path';
3
4
  import { pathToFileURL } from 'node:url';
4
5
  import { parseArgs } from './args.js';
@@ -7,6 +8,7 @@ import { runVerify } from './commands/verify.js';
7
8
  import { runList } from './commands/list.js';
8
9
  import { runLink } from './commands/link.js';
9
10
  import { runAffected } from './commands/affected.js';
11
+ import { runCheck } from './commands/check.js';
10
12
  import { VERSION } from './version.js';
11
13
  const HELP = `koncepto ${VERSION}
12
14
 
@@ -20,6 +22,9 @@ Usage:
20
22
  --role=<r> --purpose=<p>
21
23
  koncepto affected [--from <ref>] Report concepts/invariants touched by a diff
22
24
  [--files=a,b,c] [--json]
25
+ koncepto check Execute invariant.check payloads (grep + command)
26
+ [--id <concept-id>] (filter to one concept)
27
+ [--json] (machine-readable output)
23
28
 
24
29
  Flags:
25
30
  --help, --version
@@ -30,6 +35,7 @@ const COMMANDS = {
30
35
  list: runList,
31
36
  link: runLink,
32
37
  affected: runAffected,
38
+ check: runCheck,
33
39
  };
34
40
  export async function run(argv, cwd = process.cwd()) {
35
41
  const { command, positional, flags } = parseArgs(argv);
@@ -52,9 +58,29 @@ export async function run(argv, cwd = process.cwd()) {
52
58
  }
53
59
  return handler({ rootDir: resolve(cwd), positional, flags });
54
60
  }
55
- const invokedAsScript = process.argv[1] !== undefined &&
56
- import.meta.url === pathToFileURL(process.argv[1]).href;
57
- if (invokedAsScript) {
61
+ /**
62
+ * True when this module is the process entrypoint (i.e. run as a CLI).
63
+ *
64
+ * `import.meta.url` is realpath-resolved by Node's ESM loader, but
65
+ * `process.argv[1]` is NOT: package managers expose the bin as a symlink
66
+ * (npm `node_modules/.bin/koncepto`, pnpm's `.pnpm` store indirection).
67
+ * Comparing the two raw paths therefore never matches under `pnpm run` /
68
+ * `npx` / `node_modules/.bin`, so the CLI silently no-ops (exit 0, no
69
+ * output). Resolve argv[1] through realpath before comparing so symlinked
70
+ * bin invocations are detected correctly.
71
+ */
72
+ function invokedAsScript() {
73
+ const argv1 = process.argv[1];
74
+ if (argv1 === undefined)
75
+ return false;
76
+ try {
77
+ return import.meta.url === pathToFileURL(realpathSync(argv1)).href;
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ }
83
+ if (invokedAsScript()) {
58
84
  run(process.argv.slice(2))
59
85
  .then((code) => process.exit(code))
60
86
  .catch((err) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,IAAI,GAAG,YAAY,OAAO;;;;;;;;;;;;;;;CAe/B,CAAA;AAUD,MAAM,QAAQ,GAA4B;IACxC,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,WAAW;CACtB,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IACnE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAEtD,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC1B,OAAO,CAAC,CAAA;IACV,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;QACpC,OAAO,CAAC,CAAA;IACV,CAAC;IACD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC1B,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,OAAO,MAAM,IAAI,EAAE,CAAC,CAAA;QACvE,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,eAAe,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;IAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAEzD,IAAI,eAAe,EAAE,CAAC;IACpB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACvB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACN,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yourtechtribe-labs/koncept-cli",
3
- "version": "0.2.0-alpha.0",
3
+ "version": "0.2.0-alpha.2",
4
4
  "description": "CLI for koncepto — init, verify, list, link operations on .koncept/ concept graphs.",
5
5
  "keywords": [
6
6
  "mcp",