@loxtep/sdk 0.9.5 → 0.9.7

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 (119) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +4 -4
  3. package/dist/cli/commands/approvals-cmd.d.ts +39 -9
  4. package/dist/cli/commands/approvals-cmd.d.ts.map +1 -1
  5. package/dist/cli/commands/approvals-cmd.js +112 -48
  6. package/dist/cli/commands/approvals-cmd.js.map +1 -1
  7. package/dist/cli/commands/candidates-cmd.d.ts +24 -0
  8. package/dist/cli/commands/candidates-cmd.d.ts.map +1 -0
  9. package/dist/cli/commands/candidates-cmd.js +138 -0
  10. package/dist/cli/commands/candidates-cmd.js.map +1 -0
  11. package/dist/cli/commands/cdlc-cmd.d.ts +23 -0
  12. package/dist/cli/commands/cdlc-cmd.d.ts.map +1 -0
  13. package/dist/cli/commands/cdlc-cmd.js +110 -0
  14. package/dist/cli/commands/cdlc-cmd.js.map +1 -0
  15. package/dist/cli/commands/packs-cmd.d.ts +14 -0
  16. package/dist/cli/commands/packs-cmd.d.ts.map +1 -0
  17. package/dist/cli/commands/packs-cmd.js +86 -0
  18. package/dist/cli/commands/packs-cmd.js.map +1 -0
  19. package/dist/cli/help.d.ts.map +1 -1
  20. package/dist/cli/help.js +16 -2
  21. package/dist/cli/help.js.map +1 -1
  22. package/dist/cli/index.js +143 -10
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/client/agent-workspace-types.d.ts +74 -0
  25. package/dist/client/agent-workspace-types.d.ts.map +1 -0
  26. package/dist/client/agent-workspace-types.js +7 -0
  27. package/dist/client/agent-workspace-types.js.map +1 -0
  28. package/dist/client/agent-workspace.d.ts +45 -0
  29. package/dist/client/agent-workspace.d.ts.map +1 -0
  30. package/dist/client/agent-workspace.js +142 -0
  31. package/dist/client/agent-workspace.js.map +1 -0
  32. package/dist/client/approvals-types.d.ts +18 -0
  33. package/dist/client/approvals-types.d.ts.map +1 -1
  34. package/dist/client/approvals.d.ts +4 -4
  35. package/dist/client/approvals.d.ts.map +1 -1
  36. package/dist/client/approvals.js +31 -8
  37. package/dist/client/approvals.js.map +1 -1
  38. package/dist/client/cdlc-types.d.ts +147 -0
  39. package/dist/client/cdlc-types.d.ts.map +1 -0
  40. package/dist/client/cdlc-types.js +16 -0
  41. package/dist/client/cdlc-types.js.map +1 -0
  42. package/dist/client/cdlc.d.ts +27 -0
  43. package/dist/client/cdlc.d.ts.map +1 -0
  44. package/dist/client/cdlc.js +174 -0
  45. package/dist/client/cdlc.js.map +1 -0
  46. package/dist/client/context.d.ts +8 -1
  47. package/dist/client/context.d.ts.map +1 -1
  48. package/dist/client/context.js +4 -1
  49. package/dist/client/context.js.map +1 -1
  50. package/dist/client/index.d.ts +19 -3
  51. package/dist/client/index.d.ts.map +1 -1
  52. package/dist/client/index.js +2 -0
  53. package/dist/client/index.js.map +1 -1
  54. package/dist/client/loxtep-client.d.ts +2 -2
  55. package/dist/client/loxtep-client.d.ts.map +1 -1
  56. package/dist/client/loxtep-client.js +42 -5
  57. package/dist/client/loxtep-client.js.map +1 -1
  58. package/dist/client/meaning.d.ts +10 -1
  59. package/dist/client/meaning.d.ts.map +1 -1
  60. package/dist/client/meaning.js +4 -1
  61. package/dist/client/meaning.js.map +1 -1
  62. package/dist/client/mining-types.d.ts +81 -0
  63. package/dist/client/mining-types.d.ts.map +1 -0
  64. package/dist/client/mining-types.js +14 -0
  65. package/dist/client/mining-types.js.map +1 -0
  66. package/dist/client/mining.d.ts +17 -0
  67. package/dist/client/mining.d.ts.map +1 -0
  68. package/dist/client/mining.js +115 -0
  69. package/dist/client/mining.js.map +1 -0
  70. package/dist/client/ontology-types.d.ts +91 -0
  71. package/dist/client/ontology-types.d.ts.map +1 -0
  72. package/dist/client/ontology-types.js +6 -0
  73. package/dist/client/ontology-types.js.map +1 -0
  74. package/dist/client/ontology.d.ts +27 -0
  75. package/dist/client/ontology.d.ts.map +1 -0
  76. package/dist/client/ontology.js +146 -0
  77. package/dist/client/ontology.js.map +1 -0
  78. package/dist/client/packs-types.d.ts +48 -0
  79. package/dist/client/packs-types.d.ts.map +1 -0
  80. package/dist/client/packs-types.js +7 -0
  81. package/dist/client/packs-types.js.map +1 -0
  82. package/dist/client/packs.d.ts +27 -0
  83. package/dist/client/packs.d.ts.map +1 -0
  84. package/dist/client/packs.js +122 -0
  85. package/dist/client/packs.js.map +1 -0
  86. package/dist/client/procedures-types.d.ts +147 -6
  87. package/dist/client/procedures-types.d.ts.map +1 -1
  88. package/dist/client/procedures-types.js +3 -2
  89. package/dist/client/procedures-types.js.map +1 -1
  90. package/dist/client/procedures.d.ts +27 -13
  91. package/dist/client/procedures.d.ts.map +1 -1
  92. package/dist/client/procedures.js +180 -20
  93. package/dist/client/procedures.js.map +1 -1
  94. package/dist/client/process-intelligence-types.d.ts +94 -2
  95. package/dist/client/process-intelligence-types.d.ts.map +1 -1
  96. package/dist/client/process-intelligence-types.js +15 -3
  97. package/dist/client/process-intelligence-types.js.map +1 -1
  98. package/dist/client/process-intelligence.d.ts +18 -5
  99. package/dist/client/process-intelligence.d.ts.map +1 -1
  100. package/dist/client/process-intelligence.js +47 -5
  101. package/dist/client/process-intelligence.js.map +1 -1
  102. package/dist/client/review.d.ts +7 -1
  103. package/dist/client/review.d.ts.map +1 -1
  104. package/dist/client/review.js +3 -1
  105. package/dist/client/review.js.map +1 -1
  106. package/dist/client/semantic-layer-types.d.ts +65 -0
  107. package/dist/client/semantic-layer-types.d.ts.map +1 -0
  108. package/dist/client/semantic-layer-types.js +7 -0
  109. package/dist/client/semantic-layer-types.js.map +1 -0
  110. package/dist/client/semantic-layer.d.ts +25 -0
  111. package/dist/client/semantic-layer.d.ts.map +1 -0
  112. package/dist/client/semantic-layer.js +100 -0
  113. package/dist/client/semantic-layer.js.map +1 -0
  114. package/dist/rstreams/leo-runtime.d.ts +9 -2
  115. package/dist/rstreams/leo-runtime.d.ts.map +1 -1
  116. package/dist/rstreams/leo-runtime.js +18 -4
  117. package/dist/rstreams/leo-runtime.js.map +1 -1
  118. package/docs/sdk-mcp-mapping.md +157 -3
  119. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -8,6 +8,50 @@ and this project adheres to
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.9.7] - 2026-08-10
12
+
13
+ ### Added
14
+
15
+ - **Phase A SDK/CLI surface parity** — typed REST under the existing 10 MCP
16
+ facades (no new hosted tools):
17
+ - **`client.meaning.ontology`** — ontology concepts CRUD + relationships
18
+ (`list/get/create/update/delete_concept`, `create/get_relationships`).
19
+ - **`client.meaning.packs`** + CLI `loxtep packs list|activate|status` —
20
+ vocabulary pack recommend / enable / activation-state.
21
+ - **`client.meaning.semantic`** — `search_semantic_layer`,
22
+ `get_semantic_artifact`, `get_semantic_completeness`.
23
+ - **`client.review.cdlc`** + CLI `loxtep cdlc transition|review-queue` —
24
+ lifecycle get/transition, propagate, lineage, deps, steward review queue.
25
+ - **`client.review.mining`** + CLI `loxtep candidates list|act` —
26
+ `run_mining_pass`, `list_candidates`, `act_on_candidate`.
27
+ - **`client.context.procedures`** — graph procedures CRUD +
28
+ `import_process_graph` / `export_process_graph` (list path now targets
29
+ authored graph procedures, not PI discovery).
30
+ - **`client.context.process_intelligence.decisionTraces`** — causal chain,
31
+ similar decisions, and create-with-links (LOX-1226 / LOX-1248).
32
+ - **`client.context.issues` / `.goals` / `.workstreams`** — thin agent-
33
+ orchestration **reads** (`list`/`get`); writes remain MCP-only.
34
+ - **Docs** — `docs/sdk-mcp-mapping.md` + `AGENTS.md` updated for the Phase A
35
+ surface (ontology/packs/semantic, CDLC/mining/candidates, procedures,
36
+ decisionTraces, agent-workspace reads).
37
+
38
+ ### Changed
39
+
40
+ - **`client.context.procedures.list`** — now targets authored graph procedures
41
+ (`GET /graph/organizations/{org}/procedures`) instead of the
42
+ process-intelligence discovery list. Filters match MCP (`status`, `name`,
43
+ `domain_id`, …); pagination args from the old PI wrapper are removed.
44
+
45
+ ## [0.9.6] - 2026-08-10
46
+
47
+ ### Fixed
48
+
49
+ - **CLI `DEP0187` warning** — stop eagerly importing `leo-sdk` on every command.
50
+ REST-only commands (e.g. `loxtep data-products list`) no longer load the stream
51
+ runtime, avoiding Node's `fs.existsSync` deprecation from leo-sdk's
52
+ `leoConfigure` side effect. `leo-sdk` is still required lazily when constructing
53
+ a stream reader/writer.
54
+
11
55
  ## [0.9.5] - 2026-08-10
12
56
 
13
57
  ### Fixed
package/README.md CHANGED
@@ -10,11 +10,11 @@ Client for the Loxtep API. `LoxtepClient` groups platform APIs under
10
10
  | Workspace | `client.workspace` | `.projects.*`, `.instances.*` |
11
11
  | Build & deploy | `client.build` | `.workflows.*`, `.triggers.*`, `.data_products.*`, `.targets.*` |
12
12
  | Governance | `client.define` | `.schemas.*`, `.quality.*`, `.domains.*`, … |
13
- | Semantics | `client.meaning` | `.thesaurus.*` |
13
+ | Semantics | `client.meaning` | `.thesaurus.*`, `.ontology.*`, `.packs.*`, `.semantic.*` |
14
14
  | Review | `client.review` | `.approvals.*`, `.improvements.*` |
15
15
  | Analytics | `client.query` | `.catalog.*`, `.discovery.*`, `.query()` |
16
16
  | Observe | `client.observe` | `.stream_config()`, `.open_reader()` |
17
- | Context | `client.context` | `.procedures.*`, `.activity.*`, … |
17
+ | Context | `client.context` | `.procedures.*`, `.issues.*`, `.goals.*`, `.workstreams.*`, … |
18
18
 
19
19
  **Stream I/O** uses top-level helpers on the client:
20
20
  `await client.get_writer('data-product-name')` and
@@ -228,9 +228,9 @@ Every method is `snake_case`. APIs live on **namespaced areas** of
228
228
  ### Authentication, semantics, review, and context
229
229
 
230
230
  - **`client.session`** — `get_current_user`, `get_current_organization`, `logout`
231
- - **`client.meaning`** — `.thesaurus.*`
231
+ - **`client.meaning`** — `.thesaurus.*`, `.ontology.*`, `.packs.*`, `.semantic.*`
232
232
  - **`client.review`** — `.approvals.*`, `.improvements.*`
233
- - **`client.context`** — `.procedures.*`, `.activity.*`, `.process_intelligence.*`
233
+ - **`client.context`** — `.procedures.*`, `.activity.*`, `.process_intelligence.*`, `.issues.*`, `.goals.*`, `.workstreams.*`
234
234
  - **`client.metrics`** — `log`, `get_reporter` (stub until metrics wiring lands)
235
235
 
236
236
  ## Data product writer and reader
@@ -1,21 +1,51 @@
1
1
  /**
2
2
  * CLI: loxtep approvals list|approve|reject
3
3
  *
4
- * SDK/MCP parity for HITL approval inbox (`client.review.approvals` /
5
- * `loxtep_review`). Does not require an attached project.
4
+ * Mirrors MCP `loxtep_review.list_pending` / `resolve` plus REST body fields
5
+ * (`response`, `form_response`) for criteria_schema gates.
6
+ *
7
+ * loxtep approvals list [--status pending|approved|rejected|expired] [--page N] [--page-size N] [--organization-id <id>]
8
+ * loxtep approvals approve <id> [--response <val>] [--form-response <json>] [--organization-id <id>]
9
+ * loxtep approvals reject <id> [--response <val>] [--form-response <json>] [--organization-id <id>]
10
+ *
11
+ * `list` defaults to `pending` (MCP list_pending parity). Auth required; no project attach.
6
12
  */
7
13
  import type { LoxtepClient } from '../../client/loxtep-client.js';
8
14
  import type { CliResult } from '../project-context.js';
9
- export declare function runApprovalsListCommand(client: LoxtepClient, options?: {
15
+ export interface ApprovalsListOptions {
10
16
  status?: string;
11
- organization_id?: string;
12
17
  page?: number;
13
18
  page_size?: number;
14
- }): Promise<CliResult>;
15
- export declare function runApprovalsApproveCommand(client: LoxtepClient, approval_request_id: string, options?: {
16
19
  organization_id?: string;
17
- }): Promise<CliResult>;
18
- export declare function runApprovalsRejectCommand(client: LoxtepClient, approval_request_id: string, options?: {
20
+ }
21
+ export interface ApprovalsDecideOptions {
22
+ response?: string;
23
+ form_response_json?: string;
19
24
  organization_id?: string;
20
- }): Promise<CliResult>;
25
+ }
26
+ /**
27
+ * Execute `loxtep approvals list`.
28
+ * Defaults status to pending when --status is omitted (MCP list_pending parity).
29
+ */
30
+ export declare function runApprovalsListCommand(client: LoxtepClient, options?: ApprovalsListOptions): Promise<CliResult>;
31
+ /**
32
+ * Execute `loxtep approvals approve <id>`.
33
+ */
34
+ export declare function runApprovalsApproveCommand(client: LoxtepClient, id: string, options?: ApprovalsDecideOptions): Promise<CliResult>;
35
+ /**
36
+ * Execute `loxtep approvals reject <id>`.
37
+ */
38
+ export declare function runApprovalsRejectCommand(client: LoxtepClient, id: string, options?: ApprovalsDecideOptions): Promise<CliResult>;
39
+ /** Parse CLI flag strings into list numeric options (used by index.ts). */
40
+ export declare function parseApprovalsListNumericFlags(flags: {
41
+ page?: string;
42
+ page_size?: string;
43
+ }): {
44
+ ok: true;
45
+ page?: number;
46
+ page_size?: number;
47
+ } | {
48
+ ok: false;
49
+ error: string;
50
+ };
21
51
  //# sourceMappingURL=approvals-cmd.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"approvals-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/approvals-cmd.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AA2BvD,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACzF,OAAO,CAAC,SAAS,CAAC,CAgCpB;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,YAAY,EACpB,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GACrC,OAAO,CAAC,SAAS,CAAC,CAoBpB;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,YAAY,EACpB,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GACrC,OAAO,CAAC,SAAS,CAAC,CAoBpB"}
1
+ {"version":3,"file":"approvals-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/approvals-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAMlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIvD,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAkCD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,SAAS,CAAC,CAkDpB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,SAAS,CAAC,CAoBpB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,SAAS,CAAC,CAoBpB;AAED,2EAA2E;AAC3E,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAMjF"}
@@ -1,50 +1,90 @@
1
1
  /**
2
2
  * CLI: loxtep approvals list|approve|reject
3
3
  *
4
- * SDK/MCP parity for HITL approval inbox (`client.review.approvals` /
5
- * `loxtep_review`). Does not require an attached project.
4
+ * Mirrors MCP `loxtep_review.list_pending` / `resolve` plus REST body fields
5
+ * (`response`, `form_response`) for criteria_schema gates.
6
+ *
7
+ * loxtep approvals list [--status pending|approved|rejected|expired] [--page N] [--page-size N] [--organization-id <id>]
8
+ * loxtep approvals approve <id> [--response <val>] [--form-response <json>] [--organization-id <id>]
9
+ * loxtep approvals reject <id> [--response <val>] [--form-response <json>] [--organization-id <id>]
10
+ *
11
+ * `list` defaults to `pending` (MCP list_pending parity). Auth required; no project attach.
6
12
  */
7
13
  const VALID_STATUSES = ['pending', 'approved', 'rejected', 'expired'];
8
- async function resolveOrganizationId(client, override) {
9
- if (override) {
10
- return { ok: true, organization_id: override };
14
+ function parsePositiveInt(raw, flag) {
15
+ if (raw == null || raw === '')
16
+ return { ok: true, value: undefined };
17
+ const n = Number(raw);
18
+ if (!Number.isInteger(n) || n < 1) {
19
+ return { ok: false, error: `Invalid ${flag}: '${raw}'. Must be a positive integer.` };
11
20
  }
12
- try {
13
- const user = await client.session.get_current_user();
14
- if (user.organization_id) {
15
- return { ok: true, organization_id: user.organization_id };
21
+ return { ok: true, value: n };
22
+ }
23
+ function parseDecideOptions(options) {
24
+ const body = {};
25
+ if (options?.organization_id !== undefined)
26
+ body.organization_id = options.organization_id;
27
+ if (options?.response !== undefined)
28
+ body.response = options.response;
29
+ if (options?.form_response_json !== undefined) {
30
+ try {
31
+ const parsed = JSON.parse(options.form_response_json);
32
+ if (parsed !== null && (typeof parsed !== 'object' || Array.isArray(parsed))) {
33
+ return {
34
+ ok: false,
35
+ error: 'Invalid --form-response: must be a JSON object (or null).',
36
+ };
37
+ }
38
+ body.form_response = parsed;
39
+ }
40
+ catch {
41
+ return { ok: false, error: 'Invalid --form-response: must be valid JSON.' };
16
42
  }
17
43
  }
18
- catch (err) {
19
- const message = err instanceof Error ? err.message : String(err);
20
- return { ok: false, error: `Failed to resolve organization_id: ${message}` };
21
- }
22
- return {
23
- ok: false,
24
- error: 'organization_id is required. Set it in .loxtep/project.json or pass --organization-id <id>.',
25
- };
44
+ return { ok: true, body };
26
45
  }
46
+ /**
47
+ * Execute `loxtep approvals list`.
48
+ * Defaults status to pending when --status is omitted (MCP list_pending parity).
49
+ */
27
50
  export async function runApprovalsListCommand(client, options) {
28
- if (options?.status && !VALID_STATUSES.includes(options.status)) {
29
- return {
30
- exitCode: 1,
31
- stdout: [],
32
- stderr: [
33
- `Invalid status filter: '${options.status}'. Must be one of: ${VALID_STATUSES.join(', ')}.`,
34
- ],
35
- };
36
- }
37
- const org = await resolveOrganizationId(client, options?.organization_id);
38
- if (!org.ok) {
39
- return { exitCode: 1, stdout: [], stderr: [org.error] };
40
- }
41
51
  try {
42
- const result = await client.review.approvals.list({
43
- organization_id: org.organization_id,
44
- status: options?.status,
45
- page: options?.page,
46
- page_size: options?.page_size,
47
- });
52
+ const filters = {};
53
+ const status = options?.status ?? 'pending';
54
+ if (!VALID_STATUSES.includes(status)) {
55
+ return {
56
+ exitCode: 1,
57
+ stdout: [],
58
+ stderr: [
59
+ `Invalid status filter: '${status}'. Must be one of: ${VALID_STATUSES.join(', ')}.`,
60
+ ],
61
+ };
62
+ }
63
+ filters.status = status;
64
+ if (options?.organization_id) {
65
+ filters.organization_id = options.organization_id;
66
+ }
67
+ if (options?.page != null) {
68
+ if (!Number.isInteger(options.page) || options.page < 1) {
69
+ return {
70
+ exitCode: 1,
71
+ stdout: [],
72
+ stderr: [`Invalid --page: '${options.page}'. Must be a positive integer.`],
73
+ };
74
+ }
75
+ filters.page = options.page;
76
+ }
77
+ if (options?.page_size != null) {
78
+ if (!Number.isInteger(options.page_size) || options.page_size < 1) {
79
+ return {
80
+ exitCode: 1,
81
+ stdout: [],
82
+ stderr: [`Invalid --page-size: '${options.page_size}'. Must be a positive integer.`],
83
+ };
84
+ }
85
+ filters.page_size = options.page_size;
86
+ }
87
+ const result = await client.review.approvals.list(filters);
48
88
  return {
49
89
  exitCode: 0,
50
90
  stdout: [JSON.stringify(result, null, 2)],
@@ -56,13 +96,16 @@ export async function runApprovalsListCommand(client, options) {
56
96
  return { exitCode: 1, stdout: [], stderr: [`Failed to list approvals: ${message}`] };
57
97
  }
58
98
  }
59
- export async function runApprovalsApproveCommand(client, approval_request_id, options) {
60
- const org = await resolveOrganizationId(client, options?.organization_id);
61
- if (!org.ok) {
62
- return { exitCode: 1, stdout: [], stderr: [org.error] };
99
+ /**
100
+ * Execute `loxtep approvals approve <id>`.
101
+ */
102
+ export async function runApprovalsApproveCommand(client, id, options) {
103
+ const parsed = parseDecideOptions(options);
104
+ if (!parsed.ok) {
105
+ return { exitCode: 1, stdout: [], stderr: [parsed.error] };
63
106
  }
64
107
  try {
65
- const result = await client.review.approvals.approve(approval_request_id, org.organization_id);
108
+ const result = await client.review.approvals.approve(id, parsed.body);
66
109
  return {
67
110
  exitCode: 0,
68
111
  stdout: [JSON.stringify(result, null, 2)],
@@ -71,16 +114,23 @@ export async function runApprovalsApproveCommand(client, approval_request_id, op
71
114
  }
72
115
  catch (err) {
73
116
  const message = err instanceof Error ? err.message : String(err);
74
- return { exitCode: 1, stdout: [], stderr: [`Failed to approve request: ${message}`] };
117
+ return {
118
+ exitCode: 1,
119
+ stdout: [],
120
+ stderr: [`Error: Failed to approve approval '${id}': ${message}`],
121
+ };
75
122
  }
76
123
  }
77
- export async function runApprovalsRejectCommand(client, approval_request_id, options) {
78
- const org = await resolveOrganizationId(client, options?.organization_id);
79
- if (!org.ok) {
80
- return { exitCode: 1, stdout: [], stderr: [org.error] };
124
+ /**
125
+ * Execute `loxtep approvals reject <id>`.
126
+ */
127
+ export async function runApprovalsRejectCommand(client, id, options) {
128
+ const parsed = parseDecideOptions(options);
129
+ if (!parsed.ok) {
130
+ return { exitCode: 1, stdout: [], stderr: [parsed.error] };
81
131
  }
82
132
  try {
83
- const result = await client.review.approvals.reject(approval_request_id, org.organization_id);
133
+ const result = await client.review.approvals.reject(id, parsed.body);
84
134
  return {
85
135
  exitCode: 0,
86
136
  stdout: [JSON.stringify(result, null, 2)],
@@ -89,7 +139,21 @@ export async function runApprovalsRejectCommand(client, approval_request_id, opt
89
139
  }
90
140
  catch (err) {
91
141
  const message = err instanceof Error ? err.message : String(err);
92
- return { exitCode: 1, stdout: [], stderr: [`Failed to reject request: ${message}`] };
142
+ return {
143
+ exitCode: 1,
144
+ stdout: [],
145
+ stderr: [`Error: Failed to reject approval '${id}': ${message}`],
146
+ };
93
147
  }
94
148
  }
149
+ /** Parse CLI flag strings into list numeric options (used by index.ts). */
150
+ export function parseApprovalsListNumericFlags(flags) {
151
+ const page = parsePositiveInt(flags.page, '--page');
152
+ if (!page.ok)
153
+ return page;
154
+ const pageSize = parsePositiveInt(flags.page_size, '--page-size');
155
+ if (!pageSize.ok)
156
+ return pageSize;
157
+ return { ok: true, page: page.value, page_size: pageSize.value };
158
+ }
95
159
  //# sourceMappingURL=approvals-cmd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approvals-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/approvals-cmd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approvals-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/approvals-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CLI: loxtep candidates list|act
3
+ *
4
+ * Context-mining candidates on `client.review.mining`:
5
+ * - list_candidates
6
+ * - act_on_candidate (approve → CDLC in_review; reject → discard)
7
+ *
8
+ * Does not require an attached project.
9
+ */
10
+ import type { LoxtepClient } from '../../client/loxtep-client.js';
11
+ import type { CliResult } from '../project-context.js';
12
+ export declare function runCandidatesListCommand(client: LoxtepClient, options?: {
13
+ candidate_type?: string;
14
+ status?: string;
15
+ mining_run_id?: string;
16
+ organization_id?: string;
17
+ }): Promise<CliResult>;
18
+ export declare function runCandidatesActCommand(client: LoxtepClient, candidate_id: string, options: {
19
+ action?: string;
20
+ organization_id?: string;
21
+ rationale?: string;
22
+ actor?: string;
23
+ }): Promise<CliResult>;
24
+ //# sourceMappingURL=candidates-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidates-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/candidates-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAMlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAkCvD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IACR,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,SAAS,CAAC,CA8CpB;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,SAAS,CAAC,CAyDpB"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * CLI: loxtep candidates list|act
3
+ *
4
+ * Context-mining candidates on `client.review.mining`:
5
+ * - list_candidates
6
+ * - act_on_candidate (approve → CDLC in_review; reject → discard)
7
+ *
8
+ * Does not require an attached project.
9
+ */
10
+ const VALID_STATUSES = ['candidate', 'approved', 'rejected'];
11
+ const VALID_ACTIONS = ['approve', 'reject'];
12
+ const KNOWN_TYPES = [
13
+ 'semantic_conflict',
14
+ 'procedure',
15
+ 'promotion',
16
+ 'entity_fact',
17
+ ];
18
+ async function resolveOrganizationId(client, override) {
19
+ if (override) {
20
+ return { ok: true, organization_id: override };
21
+ }
22
+ try {
23
+ const user = await client.session.get_current_user();
24
+ if (user.organization_id) {
25
+ return { ok: true, organization_id: user.organization_id };
26
+ }
27
+ }
28
+ catch (err) {
29
+ const message = err instanceof Error ? err.message : String(err);
30
+ return { ok: false, error: `Failed to resolve organization_id: ${message}` };
31
+ }
32
+ return {
33
+ ok: false,
34
+ error: 'organization_id is required. Set it in .loxtep/project.json or pass --organization-id <id>.',
35
+ };
36
+ }
37
+ export async function runCandidatesListCommand(client, options) {
38
+ if (options?.status && !VALID_STATUSES.includes(options.status)) {
39
+ return {
40
+ exitCode: 1,
41
+ stdout: [],
42
+ stderr: [
43
+ `Invalid status filter: '${options.status}'. Must be one of: ${VALID_STATUSES.join(', ')}.`,
44
+ ],
45
+ };
46
+ }
47
+ if (options?.candidate_type &&
48
+ !KNOWN_TYPES.includes(options.candidate_type)) {
49
+ return {
50
+ exitCode: 1,
51
+ stdout: [],
52
+ stderr: [
53
+ `Invalid --type: '${options.candidate_type}'. Known types: ${KNOWN_TYPES.join(', ')}.`,
54
+ ],
55
+ };
56
+ }
57
+ const org = await resolveOrganizationId(client, options?.organization_id);
58
+ if (!org.ok) {
59
+ return { exitCode: 1, stdout: [], stderr: [org.error] };
60
+ }
61
+ try {
62
+ const result = await client.review.mining.list_candidates({
63
+ organization_id: org.organization_id,
64
+ ...(options?.candidate_type
65
+ ? { candidate_type: options.candidate_type }
66
+ : {}),
67
+ ...(options?.status ? { status: options.status } : {}),
68
+ ...(options?.mining_run_id ? { mining_run_id: options.mining_run_id } : {}),
69
+ });
70
+ return {
71
+ exitCode: 0,
72
+ stdout: [JSON.stringify(result, null, 2)],
73
+ stderr: [],
74
+ };
75
+ }
76
+ catch (err) {
77
+ const message = err instanceof Error ? err.message : String(err);
78
+ return { exitCode: 1, stdout: [], stderr: [`Failed to list candidates: ${message}`] };
79
+ }
80
+ }
81
+ export async function runCandidatesActCommand(client, candidate_id, options) {
82
+ if (!candidate_id) {
83
+ return {
84
+ exitCode: 1,
85
+ stdout: [],
86
+ stderr: ['candidate_id is required.'],
87
+ };
88
+ }
89
+ if (!options.action) {
90
+ return {
91
+ exitCode: 1,
92
+ stdout: [],
93
+ stderr: [
94
+ `--action is required. Must be one of: ${VALID_ACTIONS.join(', ')}. ` +
95
+ 'approve routes the candidate into CDLC in_review; reject discards it.',
96
+ ],
97
+ };
98
+ }
99
+ if (!VALID_ACTIONS.includes(options.action)) {
100
+ return {
101
+ exitCode: 1,
102
+ stdout: [],
103
+ stderr: [
104
+ `Invalid --action: '${options.action}'. Must be one of: ${VALID_ACTIONS.join(', ')}. ` +
105
+ 'approve routes the candidate into CDLC in_review; reject discards it.',
106
+ ],
107
+ };
108
+ }
109
+ const org = await resolveOrganizationId(client, options.organization_id);
110
+ if (!org.ok) {
111
+ return { exitCode: 1, stdout: [], stderr: [org.error] };
112
+ }
113
+ try {
114
+ const result = await client.review.mining.act_on_candidate({
115
+ candidate_id,
116
+ action: options.action,
117
+ organization_id: org.organization_id,
118
+ ...(options.rationale != null ? { rationale: options.rationale } : {}),
119
+ ...(options.actor != null ? { actor: options.actor } : {}),
120
+ });
121
+ return {
122
+ exitCode: 0,
123
+ stdout: [JSON.stringify(result, null, 2)],
124
+ stderr: [],
125
+ };
126
+ }
127
+ catch (err) {
128
+ const message = err instanceof Error ? err.message : String(err);
129
+ return {
130
+ exitCode: 1,
131
+ stdout: [],
132
+ stderr: [
133
+ `Failed to act on candidate '${candidate_id}' (${options.action}): ${message}`,
134
+ ],
135
+ };
136
+ }
137
+ }
138
+ //# sourceMappingURL=candidates-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidates-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/candidates-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * CLI: loxtep cdlc transition|review-queue
3
+ *
4
+ * Steward-critical CDLC paths on `client.review.cdlc`:
5
+ * - transition_lifecycle
6
+ * - list_review_queue
7
+ *
8
+ * Does not require an attached project.
9
+ */
10
+ import type { LoxtepClient } from '../../client/loxtep-client.js';
11
+ import type { CliResult } from '../project-context.js';
12
+ export declare function runCdlcTransitionCommand(client: LoxtepClient, artifact_ref: string, options: {
13
+ from?: string;
14
+ to?: string;
15
+ organization_id?: string;
16
+ actor?: string;
17
+ owner?: string;
18
+ }): Promise<CliResult>;
19
+ export declare function runCdlcReviewQueueCommand(client: LoxtepClient, options?: {
20
+ organization_id?: string;
21
+ domain_id?: string;
22
+ }): Promise<CliResult>;
23
+ //# sourceMappingURL=cdlc-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdlc-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cdlc-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAqCvD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,SAAS,CAAC,CAkDpB;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,OAAO,CAAC,SAAS,CAAC,CAoBpB"}