@ontologie/cli 0.1.0-preview.1

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.
Files changed (266) hide show
  1. package/README.md +492 -0
  2. package/dist/cache/keys.d.ts +11 -0
  3. package/dist/cache/keys.d.ts.map +1 -0
  4. package/dist/cache/keys.js +14 -0
  5. package/dist/cache/keys.js.map +1 -0
  6. package/dist/cache/store.d.ts +23 -0
  7. package/dist/cache/store.d.ts.map +1 -0
  8. package/dist/cache/store.js +160 -0
  9. package/dist/cache/store.js.map +1 -0
  10. package/dist/cli-compat.d.ts +6 -0
  11. package/dist/cli-compat.d.ts.map +1 -0
  12. package/dist/cli-compat.js +11 -0
  13. package/dist/cli-compat.js.map +1 -0
  14. package/dist/cli.d.ts +30 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +119 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/client.d.ts +7 -0
  19. package/dist/client.d.ts.map +1 -0
  20. package/dist/client.js +15 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/commands/actions.d.ts +22 -0
  23. package/dist/commands/actions.d.ts.map +1 -0
  24. package/dist/commands/actions.js +211 -0
  25. package/dist/commands/actions.js.map +1 -0
  26. package/dist/commands/agent-files.d.ts +27 -0
  27. package/dist/commands/agent-files.d.ts.map +1 -0
  28. package/dist/commands/agent-files.js +167 -0
  29. package/dist/commands/agent-files.js.map +1 -0
  30. package/dist/commands/agent.d.ts +23 -0
  31. package/dist/commands/agent.d.ts.map +1 -0
  32. package/dist/commands/agent.js +314 -0
  33. package/dist/commands/agent.js.map +1 -0
  34. package/dist/commands/audit.d.ts +11 -0
  35. package/dist/commands/audit.d.ts.map +1 -0
  36. package/dist/commands/audit.js +94 -0
  37. package/dist/commands/audit.js.map +1 -0
  38. package/dist/commands/cache.d.ts +8 -0
  39. package/dist/commands/cache.d.ts.map +1 -0
  40. package/dist/commands/cache.js +40 -0
  41. package/dist/commands/cache.js.map +1 -0
  42. package/dist/commands/capabilities.d.ts +56 -0
  43. package/dist/commands/capabilities.d.ts.map +1 -0
  44. package/dist/commands/capabilities.js +304 -0
  45. package/dist/commands/capabilities.js.map +1 -0
  46. package/dist/commands/check.d.ts +7 -0
  47. package/dist/commands/check.d.ts.map +1 -0
  48. package/dist/commands/check.js +16 -0
  49. package/dist/commands/check.js.map +1 -0
  50. package/dist/commands/config.d.ts +6 -0
  51. package/dist/commands/config.d.ts.map +1 -0
  52. package/dist/commands/config.js +133 -0
  53. package/dist/commands/config.js.map +1 -0
  54. package/dist/commands/context.d.ts +6 -0
  55. package/dist/commands/context.d.ts.map +1 -0
  56. package/dist/commands/context.js +226 -0
  57. package/dist/commands/context.js.map +1 -0
  58. package/dist/commands/dev.d.ts +15 -0
  59. package/dist/commands/dev.d.ts.map +1 -0
  60. package/dist/commands/dev.js +62 -0
  61. package/dist/commands/dev.js.map +1 -0
  62. package/dist/commands/docs-alias.d.ts +14 -0
  63. package/dist/commands/docs-alias.d.ts.map +1 -0
  64. package/dist/commands/docs-alias.js +28 -0
  65. package/dist/commands/docs-alias.js.map +1 -0
  66. package/dist/commands/docs.d.ts +6 -0
  67. package/dist/commands/docs.d.ts.map +1 -0
  68. package/dist/commands/docs.js +67 -0
  69. package/dist/commands/docs.js.map +1 -0
  70. package/dist/commands/doctor.d.ts +6 -0
  71. package/dist/commands/doctor.d.ts.map +1 -0
  72. package/dist/commands/doctor.js +161 -0
  73. package/dist/commands/doctor.js.map +1 -0
  74. package/dist/commands/generate.d.ts +7 -0
  75. package/dist/commands/generate.d.ts.map +1 -0
  76. package/dist/commands/generate.js +36 -0
  77. package/dist/commands/generate.js.map +1 -0
  78. package/dist/commands/graph.d.ts +9 -0
  79. package/dist/commands/graph.d.ts.map +1 -0
  80. package/dist/commands/graph.js +149 -0
  81. package/dist/commands/graph.js.map +1 -0
  82. package/dist/commands/import.d.ts +19 -0
  83. package/dist/commands/import.d.ts.map +1 -0
  84. package/dist/commands/import.js +330 -0
  85. package/dist/commands/import.js.map +1 -0
  86. package/dist/commands/index.d.ts +80 -0
  87. package/dist/commands/index.d.ts.map +1 -0
  88. package/dist/commands/index.js +345 -0
  89. package/dist/commands/index.js.map +1 -0
  90. package/dist/commands/init.d.ts +7 -0
  91. package/dist/commands/init.d.ts.map +1 -0
  92. package/dist/commands/init.js +101 -0
  93. package/dist/commands/init.js.map +1 -0
  94. package/dist/commands/instances.d.ts +7 -0
  95. package/dist/commands/instances.d.ts.map +1 -0
  96. package/dist/commands/instances.js +418 -0
  97. package/dist/commands/instances.js.map +1 -0
  98. package/dist/commands/keys.d.ts +6 -0
  99. package/dist/commands/keys.d.ts.map +1 -0
  100. package/dist/commands/keys.js +113 -0
  101. package/dist/commands/keys.js.map +1 -0
  102. package/dist/commands/knowledge.d.ts +6 -0
  103. package/dist/commands/knowledge.d.ts.map +1 -0
  104. package/dist/commands/knowledge.js +76 -0
  105. package/dist/commands/knowledge.js.map +1 -0
  106. package/dist/commands/model.d.ts +3 -0
  107. package/dist/commands/model.d.ts.map +1 -0
  108. package/dist/commands/model.js +40 -0
  109. package/dist/commands/model.js.map +1 -0
  110. package/dist/commands/nodes.d.ts +6 -0
  111. package/dist/commands/nodes.d.ts.map +1 -0
  112. package/dist/commands/nodes.js +111 -0
  113. package/dist/commands/nodes.js.map +1 -0
  114. package/dist/commands/openapi.d.ts +7 -0
  115. package/dist/commands/openapi.d.ts.map +1 -0
  116. package/dist/commands/openapi.js +17 -0
  117. package/dist/commands/openapi.js.map +1 -0
  118. package/dist/commands/plan.d.ts +19 -0
  119. package/dist/commands/plan.d.ts.map +1 -0
  120. package/dist/commands/plan.js +563 -0
  121. package/dist/commands/plan.js.map +1 -0
  122. package/dist/commands/process.d.ts +3 -0
  123. package/dist/commands/process.d.ts.map +1 -0
  124. package/dist/commands/process.js +67 -0
  125. package/dist/commands/process.js.map +1 -0
  126. package/dist/commands/query.d.ts +26 -0
  127. package/dist/commands/query.d.ts.map +1 -0
  128. package/dist/commands/query.js +253 -0
  129. package/dist/commands/query.js.map +1 -0
  130. package/dist/commands/schema.d.ts +24 -0
  131. package/dist/commands/schema.d.ts.map +1 -0
  132. package/dist/commands/schema.js +933 -0
  133. package/dist/commands/schema.js.map +1 -0
  134. package/dist/commands/search.d.ts +10 -0
  135. package/dist/commands/search.d.ts.map +1 -0
  136. package/dist/commands/search.js +74 -0
  137. package/dist/commands/search.js.map +1 -0
  138. package/dist/commands/shared.d.ts +32 -0
  139. package/dist/commands/shared.d.ts.map +1 -0
  140. package/dist/commands/shared.js +63 -0
  141. package/dist/commands/shared.js.map +1 -0
  142. package/dist/commands/usage.d.ts +6 -0
  143. package/dist/commands/usage.d.ts.map +1 -0
  144. package/dist/commands/usage.js +86 -0
  145. package/dist/commands/usage.js.map +1 -0
  146. package/dist/commands/validators.d.ts +30 -0
  147. package/dist/commands/validators.d.ts.map +1 -0
  148. package/dist/commands/validators.js +93 -0
  149. package/dist/commands/validators.js.map +1 -0
  150. package/dist/commands/whoami.d.ts +6 -0
  151. package/dist/commands/whoami.d.ts.map +1 -0
  152. package/dist/commands/whoami.js +48 -0
  153. package/dist/commands/whoami.js.map +1 -0
  154. package/dist/config.d.ts +47 -0
  155. package/dist/config.d.ts.map +1 -0
  156. package/dist/config.js +127 -0
  157. package/dist/config.js.map +1 -0
  158. package/dist/credentials.d.ts +9 -0
  159. package/dist/credentials.d.ts.map +1 -0
  160. package/dist/credentials.js +79 -0
  161. package/dist/credentials.js.map +1 -0
  162. package/dist/keychain.d.ts +9 -0
  163. package/dist/keychain.d.ts.map +1 -0
  164. package/dist/keychain.js +51 -0
  165. package/dist/keychain.js.map +1 -0
  166. package/dist/output/csv.d.ts +5 -0
  167. package/dist/output/csv.d.ts.map +1 -0
  168. package/dist/output/csv.js +22 -0
  169. package/dist/output/csv.js.map +1 -0
  170. package/dist/output/envelope.schema.d.ts +1053 -0
  171. package/dist/output/envelope.schema.d.ts.map +1 -0
  172. package/dist/output/envelope.schema.js +256 -0
  173. package/dist/output/envelope.schema.js.map +1 -0
  174. package/dist/output/errors.d.ts +58 -0
  175. package/dist/output/errors.d.ts.map +1 -0
  176. package/dist/output/errors.js +339 -0
  177. package/dist/output/errors.js.map +1 -0
  178. package/dist/output/formatter.d.ts +27 -0
  179. package/dist/output/formatter.d.ts.map +1 -0
  180. package/dist/output/formatter.js +80 -0
  181. package/dist/output/formatter.js.map +1 -0
  182. package/dist/output/json.d.ts +41 -0
  183. package/dist/output/json.d.ts.map +1 -0
  184. package/dist/output/json.js +215 -0
  185. package/dist/output/json.js.map +1 -0
  186. package/dist/output/markdown.d.ts +6 -0
  187. package/dist/output/markdown.d.ts.map +1 -0
  188. package/dist/output/markdown.js +51 -0
  189. package/dist/output/markdown.js.map +1 -0
  190. package/dist/output/meta.d.ts +49 -0
  191. package/dist/output/meta.d.ts.map +1 -0
  192. package/dist/output/meta.js +96 -0
  193. package/dist/output/meta.js.map +1 -0
  194. package/dist/output/plain.d.ts +6 -0
  195. package/dist/output/plain.d.ts.map +1 -0
  196. package/dist/output/plain.js +51 -0
  197. package/dist/output/plain.js.map +1 -0
  198. package/dist/output/table.d.ts +5 -0
  199. package/dist/output/table.d.ts.map +1 -0
  200. package/dist/output/table.js +54 -0
  201. package/dist/output/table.js.map +1 -0
  202. package/dist/output/types.d.ts +54 -0
  203. package/dist/output/types.d.ts.map +1 -0
  204. package/dist/output/types.js +80 -0
  205. package/dist/output/types.js.map +1 -0
  206. package/dist/output/warnings.d.ts +15 -0
  207. package/dist/output/warnings.d.ts.map +1 -0
  208. package/dist/output/warnings.js +46 -0
  209. package/dist/output/warnings.js.map +1 -0
  210. package/dist/output/yaml.d.ts +6 -0
  211. package/dist/output/yaml.d.ts.map +1 -0
  212. package/dist/output/yaml.js +9 -0
  213. package/dist/output/yaml.js.map +1 -0
  214. package/dist/schema/breaking-changes.d.ts +17 -0
  215. package/dist/schema/breaking-changes.d.ts.map +1 -0
  216. package/dist/schema/breaking-changes.js +108 -0
  217. package/dist/schema/breaking-changes.js.map +1 -0
  218. package/dist/schema/helpers.d.ts +18 -0
  219. package/dist/schema/helpers.d.ts.map +1 -0
  220. package/dist/schema/helpers.js +48 -0
  221. package/dist/schema/helpers.js.map +1 -0
  222. package/dist/schema/load-schema-file.d.ts +13 -0
  223. package/dist/schema/load-schema-file.d.ts.map +1 -0
  224. package/dist/schema/load-schema-file.js +88 -0
  225. package/dist/schema/load-schema-file.js.map +1 -0
  226. package/dist/schema/lockfile.d.ts +6 -0
  227. package/dist/schema/lockfile.d.ts.map +1 -0
  228. package/dist/schema/lockfile.js +34 -0
  229. package/dist/schema/lockfile.js.map +1 -0
  230. package/dist/schema/manifest-client.d.ts +31 -0
  231. package/dist/schema/manifest-client.d.ts.map +1 -0
  232. package/dist/schema/manifest-client.js +282 -0
  233. package/dist/schema/manifest-client.js.map +1 -0
  234. package/dist/schema/output.d.ts +38 -0
  235. package/dist/schema/output.d.ts.map +1 -0
  236. package/dist/schema/output.js +95 -0
  237. package/dist/schema/output.js.map +1 -0
  238. package/dist/stdin.d.ts +8 -0
  239. package/dist/stdin.d.ts.map +1 -0
  240. package/dist/stdin.js +21 -0
  241. package/dist/stdin.js.map +1 -0
  242. package/dist/templates/basic.d.ts +6 -0
  243. package/dist/templates/basic.d.ts.map +1 -0
  244. package/dist/templates/basic.js +90 -0
  245. package/dist/templates/basic.js.map +1 -0
  246. package/dist/templates/contract-review.d.ts +9 -0
  247. package/dist/templates/contract-review.d.ts.map +1 -0
  248. package/dist/templates/contract-review.js +172 -0
  249. package/dist/templates/contract-review.js.map +1 -0
  250. package/dist/templates/customer-onboarding.d.ts +9 -0
  251. package/dist/templates/customer-onboarding.d.ts.map +1 -0
  252. package/dist/templates/customer-onboarding.js +176 -0
  253. package/dist/templates/customer-onboarding.js.map +1 -0
  254. package/dist/templates/index.d.ts +11 -0
  255. package/dist/templates/index.d.ts.map +1 -0
  256. package/dist/templates/index.js +16 -0
  257. package/dist/templates/index.js.map +1 -0
  258. package/dist/templates/react-dashboard.d.ts +6 -0
  259. package/dist/templates/react-dashboard.d.ts.map +1 -0
  260. package/dist/templates/react-dashboard.js +146 -0
  261. package/dist/templates/react-dashboard.js.map +1 -0
  262. package/dist/templates/vendor-risk.d.ts +9 -0
  263. package/dist/templates/vendor-risk.d.ts.map +1 -0
  264. package/dist/templates/vendor-risk.js +186 -0
  265. package/dist/templates/vendor-risk.js.map +1 -0
  266. package/package.json +47 -0
@@ -0,0 +1,67 @@
1
+ import * as fs from 'node:fs';
2
+ import { compile, lintModelAssurance, runProcessTests } from '@dataforge/schema';
3
+ import { resolveConfig } from '../config.js';
4
+ import { output } from '../output/formatter.js';
5
+ import { buildCliMeta } from '../output/meta.js';
6
+ import { loadSchemaFile } from '../schema/load-schema-file.js';
7
+ import { getGlobalFlags, withErrorHandler } from './shared.js';
8
+ import { CliUsageError } from '../output/errors.js';
9
+ const DEFAULT_SCHEMA_FILE = 'dataforge.schema.ts';
10
+ async function compileLocalModel(schemaPath, config) {
11
+ const loaded = await loadSchemaFile(schemaPath);
12
+ return compile(loaded.objectTypes, {
13
+ workspaceId: config.workspaceId,
14
+ espaceId: config.spaceId ?? undefined,
15
+ actions: loaded.actions.length > 0 ? loaded.actions : undefined,
16
+ });
17
+ }
18
+ function readScenarios(path) {
19
+ const raw = JSON.parse(fs.readFileSync(path, 'utf-8'));
20
+ const scenarios = Array.isArray(raw)
21
+ ? raw
22
+ : raw && typeof raw === 'object' && Array.isArray(raw.scenarios)
23
+ ? raw.scenarios
24
+ : null;
25
+ if (!scenarios) {
26
+ throw new CliUsageError('Process test file must be a JSON array or an object with a scenarios array', { path });
27
+ }
28
+ return scenarios;
29
+ }
30
+ export function registerProcess(program) {
31
+ const processCmd = program
32
+ .command('process')
33
+ .description('Model assurance process linting and deterministic scenario tests');
34
+ const getFormat = () => {
35
+ const flags = program.opts();
36
+ return flags.format === 'json' ? 'json' : flags.format === 'jsonl' ? 'jsonl' : 'text';
37
+ };
38
+ processCmd
39
+ .command('lint')
40
+ .description('Lint model assurance coverage: sourceRef, decision, evidence, role, exception paths and terms')
41
+ .option('--schema <path>', 'Path to schema file', DEFAULT_SCHEMA_FILE)
42
+ .option('--exit-code', 'Exit non-zero when model assurance gaps are present', false)
43
+ .action((opts) => withErrorHandler(async () => {
44
+ const flags = getGlobalFlags(program);
45
+ const config = resolveConfig(flags);
46
+ const manifest = await compileLocalModel(opts.schema, config);
47
+ const result = lintModelAssurance(manifest);
48
+ output(result, buildCliMeta({ command: 'process.lint', workspaceId: config.workspaceId, apiUrl: config.apiUrl }), flags);
49
+ if (opts.exitCode && result.gaps.length > 0)
50
+ process.exitCode = 1;
51
+ }, getFormat)());
52
+ processCmd
53
+ .command('test')
54
+ .description('Run deterministic model assurance scenarios')
55
+ .requiredOption('--scenarios <path>', 'JSON scenario file')
56
+ .option('--schema <path>', 'Path to schema file', DEFAULT_SCHEMA_FILE)
57
+ .action((opts) => withErrorHandler(async () => {
58
+ const flags = getGlobalFlags(program);
59
+ const config = resolveConfig(flags);
60
+ const manifest = await compileLocalModel(opts.schema, config);
61
+ const result = runProcessTests(manifest, readScenarios(opts.scenarios));
62
+ output(result, buildCliMeta({ command: 'process.test', workspaceId: config.workspaceId, apiUrl: config.apiUrl }), flags);
63
+ if (!result.passed)
64
+ process.exitCode = 1;
65
+ }, getFormat)());
66
+ }
67
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/commands/process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * ontologie query -- query ObjectSet instances by type
3
+ */
4
+ import { Command } from 'commander';
5
+ export type AggregationOperation = 'count' | 'sum' | 'avg' | 'min' | 'max';
6
+ export type AggregationSpec = {
7
+ field: string;
8
+ operation: AggregationOperation;
9
+ };
10
+ export declare function validateQueryOpts(opts: {
11
+ limit?: number | string;
12
+ filterJson?: string;
13
+ }): {
14
+ limit: number;
15
+ filterBody?: unknown;
16
+ };
17
+ /**
18
+ * Parse a comma-separated aggregation spec into AggregationSpec[].
19
+ * Examples: "count" -> [{field:'*', operation:'count'}]
20
+ * "sum:amount" -> [{field:'amount', operation:'sum'}]
21
+ * "count,sum:amount,avg:price" -> 3 specs
22
+ */
23
+ export declare function parseAggregations(spec: string): AggregationSpec[];
24
+ export declare function parseGroupBy(spec: string): string[];
25
+ export declare function registerQuery(program: Command): void;
26
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC3E,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAIjF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,CAsB1C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsCjE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAenD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyNpD"}
@@ -0,0 +1,253 @@
1
+ /**
2
+ * ontologie query -- query ObjectSet instances by type
3
+ */
4
+ import { resolveConfig } from '../config.js';
5
+ import { createDfClient } from '../client.js';
6
+ import { buildCliMeta, extractMetaFromHeaders } from '../output/meta.js';
7
+ import { output } from '../output/formatter.js';
8
+ import { withErrorHandler, getGlobalFlags, resolveTypeId } from './shared.js';
9
+ import { CliUsageError } from '../output/errors.js';
10
+ // ---------------------------------------------------------------------------
11
+ // Exported pure validation — testable without API mocking
12
+ // ---------------------------------------------------------------------------
13
+ const MAX_QUERY_LIMIT = 10_000;
14
+ const ALLOWED_AGG_OPERATIONS = ['count', 'sum', 'avg', 'min', 'max'];
15
+ export function validateQueryOpts(opts) {
16
+ const rawLimit = Number(opts.limit) || 50;
17
+ if (rawLimit > MAX_QUERY_LIMIT) {
18
+ throw Object.assign(new Error(`--limit cannot exceed ${MAX_QUERY_LIMIT}. Use pagination with --cursor instead.`), { code: 'VALIDATION_ERROR', statusCode: 422 });
19
+ }
20
+ let filterBody;
21
+ if (opts.filterJson) {
22
+ try {
23
+ filterBody = JSON.parse(opts.filterJson);
24
+ }
25
+ catch {
26
+ throw Object.assign(new Error('Invalid JSON in --filter-json'), { code: 'VALIDATION_ERROR', statusCode: 422 });
27
+ }
28
+ }
29
+ return { limit: rawLimit, filterBody };
30
+ }
31
+ /**
32
+ * Parse a comma-separated aggregation spec into AggregationSpec[].
33
+ * Examples: "count" -> [{field:'*', operation:'count'}]
34
+ * "sum:amount" -> [{field:'amount', operation:'sum'}]
35
+ * "count,sum:amount,avg:price" -> 3 specs
36
+ */
37
+ export function parseAggregations(spec) {
38
+ const parts = spec.split(',').map((s) => s.trim()).filter(Boolean);
39
+ if (parts.length === 0) {
40
+ throw Object.assign(new Error('--aggregate is empty. Use count, count:<field>, sum:<field>, avg:<field>, min:<field>, or max:<field>'), { code: 'VALIDATION_ERROR', statusCode: 422 });
41
+ }
42
+ const result = [];
43
+ for (const part of parts) {
44
+ if (part === 'count') {
45
+ result.push({ field: '*', operation: 'count' });
46
+ continue;
47
+ }
48
+ const colonIdx = part.indexOf(':');
49
+ if (colonIdx === -1) {
50
+ throw Object.assign(new Error(`Invalid aggregation '${part}'. Format: count or <op>:<field>`), { code: 'VALIDATION_ERROR', statusCode: 422 });
51
+ }
52
+ const op = part.slice(0, colonIdx).trim();
53
+ const field = part.slice(colonIdx + 1).trim();
54
+ if (!field) {
55
+ throw Object.assign(new Error(`Invalid aggregation '${part}'. Field is required after ':'`), { code: 'VALIDATION_ERROR', statusCode: 422 });
56
+ }
57
+ if (!ALLOWED_AGG_OPERATIONS.includes(op)) {
58
+ throw Object.assign(new Error(`Unknown aggregation operation '${op}'. Allowed: ${ALLOWED_AGG_OPERATIONS.join(', ')}`), { code: 'VALIDATION_ERROR', statusCode: 422 });
59
+ }
60
+ result.push({ field, operation: op });
61
+ }
62
+ return result;
63
+ }
64
+ export function parseGroupBy(spec) {
65
+ const fields = spec.split(',').map((s) => s.trim()).filter(Boolean);
66
+ if (fields.length === 0) {
67
+ throw Object.assign(new Error('--group-by cannot be empty'), { code: 'VALIDATION_ERROR', statusCode: 422 });
68
+ }
69
+ if (fields.length > 5) {
70
+ throw Object.assign(new Error('--group-by accepts up to 5 fields'), { code: 'VALIDATION_ERROR', statusCode: 422 });
71
+ }
72
+ return fields;
73
+ }
74
+ export function registerQuery(program) {
75
+ const getFormat = () => {
76
+ const f = getGlobalFlags(program);
77
+ return f.format === 'json' ? 'json' : f.format === 'jsonl' ? 'jsonl' : 'text';
78
+ };
79
+ program
80
+ .command('query <type>')
81
+ .description('Query ObjectSet instances by type')
82
+ .option('--filter-json <json>', 'JSON filter expression (e.g., \'{"status":"active"}\')')
83
+ .option('--where <expr>', 'Simple key=value filter (e.g., status=active)')
84
+ .option('--order-by <field>', 'Sort field')
85
+ .option('--order <dir>', 'Sort direction: asc|desc', 'asc')
86
+ .option('--select <fields>', 'Comma-separated field list')
87
+ .option('--ids-only', 'Output only IDs')
88
+ .option('--count', 'Return only count')
89
+ .option('--cursor <cursor>', 'Pagination cursor')
90
+ .option('--explain-cost', 'Show estimated cost without executing')
91
+ .option('--aggregate <spec>', 'Aggregations: count or comma-separated <op>:<field> (e.g., "count,sum:amount")')
92
+ .option('--group-by <fields>', 'Comma-separated grouping fields (max 5)')
93
+ .action(async (typeName, opts) => withErrorHandler(async () => {
94
+ const flags = getGlobalFlags(program);
95
+ const config = resolveConfig(flags);
96
+ const client = createDfClient(config);
97
+ const typeId = await resolveTypeId(client, typeName);
98
+ // ---------------------------------------------------------------
99
+ // Step 1b — Validate query options
100
+ // ---------------------------------------------------------------
101
+ const { limit, filterBody } = validateQueryOpts({
102
+ limit: flags.limit,
103
+ filterJson: opts.filterJson,
104
+ });
105
+ // Validate --order
106
+ if (opts.order && opts.order !== 'asc' && opts.order !== 'desc') {
107
+ throw new CliUsageError(`--order must be one of: asc, desc. Got "${opts.order}"`, { allowed: ['asc', 'desc'], value: opts.order });
108
+ }
109
+ // Mutual exclusion: --aggregate vs --ids-only / --count / --explain-cost
110
+ if (opts.aggregate && (opts.idsOnly || opts.count || opts.explainCost)) {
111
+ throw new CliUsageError('--aggregate is mutually exclusive with --ids-only, --count, and --explain-cost');
112
+ }
113
+ // ---------------------------------------------------------------
114
+ // Step 1c — Validate that --group-by requires --aggregate
115
+ // ---------------------------------------------------------------
116
+ if (opts.groupBy && !opts.aggregate) {
117
+ throw Object.assign(new Error('--group-by requires --aggregate (group-by alone is not a valid query)'), { code: 'VALIDATION_ERROR', statusCode: 422 });
118
+ }
119
+ // ---------------------------------------------------------------
120
+ // Step 1d — Aggregate path (mutually exclusive with explain-cost)
121
+ // ---------------------------------------------------------------
122
+ if (opts.aggregate) {
123
+ const aggregations = parseAggregations(opts.aggregate);
124
+ const groupBy = opts.groupBy ? parseGroupBy(opts.groupBy) : undefined;
125
+ // --filter-json with --aggregate must be a FilterClause array. A non-array
126
+ // shape (legacy object form like {"status":"active"}) cannot be translated
127
+ // server-side, so reject it loudly instead of silently dropping.
128
+ if (filterBody !== undefined && !Array.isArray(filterBody)) {
129
+ throw Object.assign(new Error('--filter-json with --aggregate must be a FilterClause array, e.g. [{"property":"status","operator":"equals","value":"active"}]'), { code: 'VALIDATION_ERROR', statusCode: 422 });
130
+ }
131
+ const filtersForAgg = filterBody;
132
+ const aggResponse = await client.transport.requestWithHeaders({
133
+ method: 'POST',
134
+ path: '/api/v1/ontology/aggregate',
135
+ body: {
136
+ objectType: typeName,
137
+ aggregations,
138
+ ...(groupBy ? { groupBy } : {}),
139
+ ...(filtersForAgg ? { filters: filtersForAgg } : {}),
140
+ },
141
+ });
142
+ const headerMeta = extractMetaFromHeaders(aggResponse.headers);
143
+ const aggMeta = buildCliMeta({
144
+ command: 'query.aggregate',
145
+ workspaceId: config.workspaceId,
146
+ apiUrl: config.apiUrl,
147
+ ...headerMeta,
148
+ });
149
+ output(aggResponse.data, aggMeta, flags);
150
+ return;
151
+ }
152
+ // ---------------------------------------------------------------
153
+ // Step 1e — Explain cost (zero-limit probe)
154
+ // ---------------------------------------------------------------
155
+ if (opts.explainCost) {
156
+ const response = await client.transport.requestWithHeaders({
157
+ method: 'GET',
158
+ path: `/api/v1/object-types/${typeId}/instances`,
159
+ query: { limit: 0, offset: 0 },
160
+ });
161
+ const headerMeta = extractMetaFromHeaders(response.headers);
162
+ const meta = buildCliMeta({
163
+ command: 'query.explain-cost',
164
+ workspaceId: config.workspaceId,
165
+ apiUrl: config.apiUrl,
166
+ estimatedCostUnits: headerMeta.costUnits ?? 0,
167
+ ...headerMeta,
168
+ });
169
+ const costInfo = {
170
+ type: typeName,
171
+ typeId,
172
+ estimatedCostUnits: meta.estimatedCostUnits ?? meta.costUnits,
173
+ limit,
174
+ note: 'Cost estimate based on zero-limit probe. Actual cost may vary with result size.',
175
+ };
176
+ output(costInfo, meta, flags);
177
+ return;
178
+ }
179
+ const offset = opts.cursor ? Number(opts.cursor) : 0;
180
+ let response;
181
+ if (filterBody) {
182
+ // POST search with JSON filter
183
+ response = await client.transport.requestWithHeaders({
184
+ method: 'POST',
185
+ path: `/api/v1/object-types/${typeId}/instances/search`,
186
+ body: {
187
+ query: filterBody,
188
+ limit,
189
+ offset,
190
+ ...(opts.orderBy ? { sortBy: opts.orderBy, sortOrder: opts.order } : {}),
191
+ },
192
+ });
193
+ }
194
+ else {
195
+ // GET instances
196
+ const query = {
197
+ limit,
198
+ offset,
199
+ ...(opts.where ? { search: opts.where } : {}),
200
+ ...(opts.orderBy ? { sortBy: opts.orderBy, sortOrder: opts.order } : {}),
201
+ };
202
+ response = await client.transport.requestWithHeaders({
203
+ method: 'GET',
204
+ path: `/api/v1/object-types/${typeId}/instances`,
205
+ query,
206
+ });
207
+ }
208
+ const items = response.data || [];
209
+ // ---------------------------------------------------------------
210
+ // Step 3 — Handle --count
211
+ // ---------------------------------------------------------------
212
+ if (opts.count) {
213
+ const pagination = response
214
+ .metadata?.pagination;
215
+ const count = pagination?.total ?? items.length;
216
+ process.stdout.write(String(count) + '\n');
217
+ return;
218
+ }
219
+ // ---------------------------------------------------------------
220
+ // Step 4 — Handle --ids-only
221
+ // ---------------------------------------------------------------
222
+ if (opts.idsOnly) {
223
+ for (const item of items) {
224
+ process.stdout.write(String(item.id) + '\n');
225
+ }
226
+ return;
227
+ }
228
+ // ---------------------------------------------------------------
229
+ // Step 5 — Handle --select
230
+ // ---------------------------------------------------------------
231
+ let columns = ['id', 'external_id', 'status', 'created_at', 'updated_at'];
232
+ if (opts.select) {
233
+ columns = opts.select.split(',').map((c) => c.trim());
234
+ }
235
+ // ---------------------------------------------------------------
236
+ // Step 6 — Build pagination and output
237
+ // ---------------------------------------------------------------
238
+ const pagination = response
239
+ .metadata?.pagination;
240
+ const page = pagination && pagination.total != null && pagination.total > limit
241
+ ? { limit, nextCursor: String((pagination.offset ?? 0) + limit), hasMore: (pagination.offset ?? 0) + limit < pagination.total }
242
+ : null;
243
+ const headerMeta = extractMetaFromHeaders(response.headers);
244
+ const meta = buildCliMeta({
245
+ command: 'query',
246
+ workspaceId: config.workspaceId,
247
+ apiUrl: config.apiUrl,
248
+ ...headerMeta,
249
+ });
250
+ output(items, meta, flags, columns, page);
251
+ }, getFormat)());
252
+ }
253
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * ontologie schema -- export, diff, push, pull, check, describe, search
3
+ *
4
+ * Rule: stdout = command result, stderr = diagnostics/progress.
5
+ * Machine-readable formats never mix human diagnostics into stdout.
6
+ *
7
+ * Fixes over V2:
8
+ * - schema describe resolves interfaces, linkTypes, and actions (not just objectTypes)
9
+ * - schema check outputs structured JSON on stdout (not just stderr)
10
+ * - schema search validates --types against allowed values
11
+ * - schema pull creates parent directories before writing
12
+ * - schema push refuses incomplete remote manifest (no silent action duplication)
13
+ */
14
+ import { Command } from 'commander';
15
+ export declare function sortDiffChanges<T extends {
16
+ entity?: string;
17
+ name?: string;
18
+ kind?: string;
19
+ }>(changes: T[]): T[];
20
+ export declare const ALLOWED_SEARCH_TYPES: Set<string>;
21
+ export declare function parseSearchTypes(raw: string): string;
22
+ export declare function parseLimit(raw: unknown, defaultValue?: number, maxValue?: number): number;
23
+ export declare function registerSchema(program: Command): void;
24
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CpC,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAQ9G;AAMD,eAAO,MAAM,oBAAoB,aAA6D,CAAC;AAE/F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAuBpD;AAMD,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,SAAK,EAAE,QAAQ,SAAM,GAAG,MAAM,CAclF;AAsED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0DrD"}