sysprom 1.16.1 → 1.18.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.
Files changed (84) hide show
  1. package/README.md +147 -75
  2. package/dist/schema.json +2 -1
  3. package/dist/src/cli/commands/add.js +52 -36
  4. package/dist/src/cli/commands/graph.d.ts +15 -0
  5. package/dist/src/cli/commands/graph.js +51 -2
  6. package/dist/src/cli/commands/infer.js +44 -25
  7. package/dist/src/cli/commands/init.d.ts +1 -1
  8. package/dist/src/cli/commands/json2md.d.ts +30 -1
  9. package/dist/src/cli/commands/json2md.js +42 -1
  10. package/dist/src/cli/commands/md2json.d.ts +1 -1
  11. package/dist/src/cli/commands/query.js +35 -37
  12. package/dist/src/cli/commands/speckit.js +81 -77
  13. package/dist/src/cli/commands/stats.js +4 -4
  14. package/dist/src/cli/commands/sync.d.ts +1 -1
  15. package/dist/src/cli/commands/update.js +33 -20
  16. package/dist/src/cli/define-command.d.ts +1 -1
  17. package/dist/src/cli/define-command.js +176 -156
  18. package/dist/src/endpoint-types.js +13 -6
  19. package/dist/src/io.js +59 -8
  20. package/dist/src/json-to-md.d.ts +32 -2
  21. package/dist/src/json-to-md.js +145 -5
  22. package/dist/src/mcp/server.js +269 -112
  23. package/dist/src/md-to-json.js +7 -0
  24. package/dist/src/operations/add-node.d.ts +12 -9
  25. package/dist/src/operations/add-plan-task.d.ts +8 -6
  26. package/dist/src/operations/add-relationship.d.ts +11 -8
  27. package/dist/src/operations/check.d.ts +4 -3
  28. package/dist/src/operations/define-operation.d.ts +1 -1
  29. package/dist/src/operations/graph-decision.d.ts +329 -0
  30. package/dist/src/operations/graph-decision.js +96 -0
  31. package/dist/src/operations/graph-dependency.d.ts +329 -0
  32. package/dist/src/operations/graph-dependency.js +121 -0
  33. package/dist/src/operations/graph-refinement.d.ts +329 -0
  34. package/dist/src/operations/graph-refinement.js +97 -0
  35. package/dist/src/operations/graph-shared.d.ts +116 -0
  36. package/dist/src/operations/graph-shared.js +257 -0
  37. package/dist/src/operations/graph.d.ts +20 -4
  38. package/dist/src/operations/graph.js +129 -36
  39. package/dist/src/operations/index.d.ts +3 -0
  40. package/dist/src/operations/index.js +3 -0
  41. package/dist/src/operations/infer-completeness.d.ts +4 -3
  42. package/dist/src/operations/infer-derived.d.ts +4 -3
  43. package/dist/src/operations/infer-impact.d.ts +28 -21
  44. package/dist/src/operations/infer-lifecycle.d.ts +4 -3
  45. package/dist/src/operations/init-document.d.ts +4 -3
  46. package/dist/src/operations/json-to-markdown.d.ts +28 -3
  47. package/dist/src/operations/json-to-markdown.js +11 -1
  48. package/dist/src/operations/mark-task-done.d.ts +8 -6
  49. package/dist/src/operations/mark-task-undone.d.ts +8 -6
  50. package/dist/src/operations/markdown-to-json.d.ts +4 -3
  51. package/dist/src/operations/next-id.d.ts +4 -3
  52. package/dist/src/operations/node-history.d.ts +4 -3
  53. package/dist/src/operations/plan-add-task.d.ts +8 -6
  54. package/dist/src/operations/plan-gate.d.ts +4 -3
  55. package/dist/src/operations/plan-init.d.ts +4 -3
  56. package/dist/src/operations/plan-progress.d.ts +4 -3
  57. package/dist/src/operations/plan-status.d.ts +4 -3
  58. package/dist/src/operations/query-node.d.ts +24 -17
  59. package/dist/src/operations/query-nodes.d.ts +8 -6
  60. package/dist/src/operations/query-relationships.d.ts +7 -5
  61. package/dist/src/operations/remove-node.d.ts +12 -9
  62. package/dist/src/operations/remove-relationship.d.ts +10 -7
  63. package/dist/src/operations/rename.d.ts +8 -6
  64. package/dist/src/operations/search.d.ts +8 -6
  65. package/dist/src/operations/speckit-diff.d.ts +4 -3
  66. package/dist/src/operations/speckit-export.d.ts +4 -3
  67. package/dist/src/operations/speckit-import.d.ts +4 -3
  68. package/dist/src/operations/speckit-sync.d.ts +12 -9
  69. package/dist/src/operations/state-at.d.ts +4 -3
  70. package/dist/src/operations/stats.d.ts +4 -3
  71. package/dist/src/operations/sync.d.ts +12 -9
  72. package/dist/src/operations/task-list.d.ts +4 -3
  73. package/dist/src/operations/timeline.d.ts +4 -3
  74. package/dist/src/operations/trace-from-node.d.ts +12 -9
  75. package/dist/src/operations/update-metadata.d.ts +8 -6
  76. package/dist/src/operations/update-node.d.ts +11 -8
  77. package/dist/src/operations/update-plan-task.d.ts +8 -6
  78. package/dist/src/operations/validate.d.ts +4 -3
  79. package/dist/src/schema.d.ts +15 -10
  80. package/dist/src/schema.js +3 -11
  81. package/dist/src/utils/define-schema.d.ts +17 -0
  82. package/dist/src/utils/define-schema.js +21 -0
  83. package/package.json +98 -93
  84. package/schema.json +2 -1
@@ -112,8 +112,9 @@ export declare const RelationshipType: z.ZodEnum<{
112
112
  requires: "requires";
113
113
  disables: "disables";
114
114
  influence: "influence";
115
+ justifies: "justifies";
115
116
  }> & {
116
- is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence";
117
+ is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
117
118
  };
118
119
  /** A valid relationship type string. */
119
120
  export type RelationshipType = z.infer<typeof RelationshipType>;
@@ -144,9 +145,10 @@ export declare const RELATIONSHIP_TYPE_LABELS: {
144
145
  readonly requires: "Requires";
145
146
  readonly disables: "Disables";
146
147
  readonly influence: "Influence";
148
+ readonly justifies: "Justifies";
147
149
  };
148
150
  /** Reverse map from human-readable label to relationship type key (e.g. `"Refines"` → `"refines"`). */
149
- export declare const RELATIONSHIP_LABEL_TO_TYPE: Record<string, "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence">;
151
+ export declare const RELATIONSHIP_LABEL_TO_TYPE: Record<string, "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies">;
150
152
  /** Zod schema for impact polarity (e.g. `"positive"`, `"negative"`, `"neutral"`, `"uncertain"`). */
151
153
  export declare const ImpactPolarity: z.ZodEnum<{
152
154
  positive: "positive";
@@ -324,8 +326,9 @@ export declare const Relationship: z.ZodObject<{
324
326
  requires: "requires";
325
327
  disables: "disables";
326
328
  influence: "influence";
329
+ justifies: "justifies";
327
330
  }> & {
328
- is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence";
331
+ is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
329
332
  };
330
333
  description: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
331
334
  is(value: unknown): value is string | string[];
@@ -344,7 +347,7 @@ export declare const Relationship: z.ZodObject<{
344
347
  [x: string]: unknown;
345
348
  from: string;
346
349
  to: string;
347
- type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence";
350
+ type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
348
351
  description?: string | string[] | undefined;
349
352
  polarity?: "positive" | "negative" | "neutral" | "uncertain" | undefined;
350
353
  strength?: number | undefined;
@@ -400,8 +403,9 @@ declare const SysProMDocumentSchema: z.ZodObject<{
400
403
  requires: "requires";
401
404
  disables: "disables";
402
405
  influence: "influence";
406
+ justifies: "justifies";
403
407
  }> & {
404
- is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence";
408
+ is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
405
409
  };
406
410
  description: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
407
411
  is(value: unknown): value is string | string[];
@@ -420,7 +424,7 @@ declare const SysProMDocumentSchema: z.ZodObject<{
420
424
  [x: string]: unknown;
421
425
  from: string;
422
426
  to: string;
423
- type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence";
427
+ type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
424
428
  description?: string | string[] | undefined;
425
429
  polarity?: "positive" | "negative" | "neutral" | "uncertain" | undefined;
426
430
  strength?: number | undefined;
@@ -784,8 +788,9 @@ export declare const SysProMDocument: z.ZodObject<{
784
788
  requires: "requires";
785
789
  disables: "disables";
786
790
  influence: "influence";
791
+ justifies: "justifies";
787
792
  }> & {
788
- is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence";
793
+ is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
789
794
  };
790
795
  description: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
791
796
  is(value: unknown): value is string | string[];
@@ -804,7 +809,7 @@ export declare const SysProMDocument: z.ZodObject<{
804
809
  [x: string]: unknown;
805
810
  from: string;
806
811
  to: string;
807
- type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence";
812
+ type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
808
813
  description?: string | string[] | undefined;
809
814
  polarity?: "positive" | "negative" | "neutral" | "uncertain" | undefined;
810
815
  strength?: number | undefined;
@@ -895,7 +900,7 @@ export declare const SysProMDocument: z.ZodObject<{
895
900
  [x: string]: unknown;
896
901
  from: string;
897
902
  to: string;
898
- type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence";
903
+ type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
899
904
  description?: string | string[] | undefined;
900
905
  polarity?: "positive" | "negative" | "neutral" | "uncertain" | undefined;
901
906
  strength?: number | undefined;
@@ -1107,7 +1112,7 @@ export declare const Node: z.ZodObject<{
1107
1112
  [x: string]: unknown;
1108
1113
  from: string;
1109
1114
  to: string;
1110
- type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence";
1115
+ type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "performs" | "part_of" | "precedes" | "must_follow" | "blocks" | "routes_to" | "governed_by" | "modifies" | "triggered_by" | "applies_to" | "produces" | "consumes" | "transforms_into" | "selects" | "requires" | "disables" | "influence" | "justifies";
1111
1116
  description?: string | string[] | undefined;
1112
1117
  polarity?: "positive" | "negative" | "neutral" | "uncertain" | undefined;
1113
1118
  strength?: number | undefined;
@@ -1,14 +1,5 @@
1
1
  import * as z from "zod";
2
- // ---------------------------------------------------------------------------
3
- // defineSchema — attaches a .is() type guard to any Zod schema
4
- // ---------------------------------------------------------------------------
5
- function defineSchema(schema) {
6
- return Object.assign(schema, {
7
- is(value) {
8
- return schema.safeParse(value).success;
9
- },
10
- });
11
- }
2
+ import { defineSchema } from "./utils/define-schema.js";
12
3
  // ---------------------------------------------------------------------------
13
4
  // Text type — allows a string or an array of lines
14
5
  // ---------------------------------------------------------------------------
@@ -133,6 +124,7 @@ const relationshipTypeDef = labelledEnum({
133
124
  requires: "Requires",
134
125
  disables: "Disables",
135
126
  influence: "Influence",
127
+ justifies: "Justifies",
136
128
  });
137
129
  /** Zod schema for the set of valid relationship types (e.g. `"refines"`, `"depends_on"`, `"affects"`). */
138
130
  export const RelationshipType = relationshipTypeDef.schema;
@@ -337,7 +329,7 @@ const NodeSchema = NodeBase.superRefine((node, ctx) => {
337
329
  const pattern = new RegExp(`^${prefix}\\d+(-[A-Z][A-Z0-9_]*)*$`);
338
330
  if (!pattern.test(node.id)) {
339
331
  ctx.addIssue({
340
- code: z.ZodIssueCode.custom,
332
+ code: "custom",
341
333
  path: ["id"],
342
334
  message: `Node ID "${node.id}" does not match required pattern for type "${node.type}": expected ${prefix}<number> with optional -SUFFIX segments (e.g. ${prefix}1, ${prefix}1-MY-LABEL)`,
343
335
  });
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Attach a type guard directly to a Zod schema.
4
+ *
5
+ * This keeps the runtime validator, the inferred TypeScript type,
6
+ * and the runtime type guard derived from the same source.
7
+ * @param schema - Zod schema to extend
8
+ * @returns The original schema augmented with an `is` guard
9
+ * @example
10
+ * const MySchema = defineSchema(z.string());
11
+ * if (MySchema.is(value)) { // value is string
12
+ * }
13
+ */
14
+ export declare function defineSchema<T extends z.ZodType>(schema: T): T & {
15
+ is(value: unknown): value is z.infer<T>;
16
+ };
17
+ export default defineSchema;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Attach a type guard directly to a Zod schema.
3
+ *
4
+ * This keeps the runtime validator, the inferred TypeScript type,
5
+ * and the runtime type guard derived from the same source.
6
+ * @param schema - Zod schema to extend
7
+ * @returns The original schema augmented with an `is` guard
8
+ * @example
9
+ * const MySchema = defineSchema(z.string());
10
+ * if (MySchema.is(value)) { // value is string
11
+ * }
12
+ */
13
+ export function defineSchema(schema) {
14
+ // Object.assign has a helpful return type (T & U) so no manual assertion is needed.
15
+ return Object.assign(schema, {
16
+ is(value) {
17
+ return schema.safeParse(value).success;
18
+ },
19
+ });
20
+ }
21
+ export default defineSchema;
package/package.json CHANGED
@@ -1,95 +1,100 @@
1
1
  {
2
- "name": "sysprom",
3
- "version": "1.16.1",
4
- "description": "SysProM — System Provenance Model CLI and library",
5
- "author": "ExaDev",
6
- "homepage": "https://exadev.github.io/SysProM",
7
- "bugs": "https://github.com/ExaDev/SysProM/issues",
8
- "repository": {
9
- "type": "git",
10
- "url": "git+https://github.com/ExaDev/SysProM.git"
11
- },
12
- "keywords": [
13
- "sysprom",
14
- "provenance",
15
- "decision",
16
- "architecture",
17
- "traceability",
18
- "system-model",
19
- "cli"
20
- ],
21
- "packageManager": "pnpm@10.32.1",
22
- "type": "module",
23
- "main": "./dist/src/index.js",
24
- "types": "./dist/src/index.d.ts",
25
- "exports": {
26
- ".": {
27
- "types": "./dist/src/index.d.ts",
28
- "import": "./dist/src/index.js"
29
- }
30
- },
31
- "files": [
32
- "dist/src/**/*.js",
33
- "dist/src/**/*.d.ts",
34
- "schema.json"
35
- ],
36
- "bin": {
37
- "sysprom": "dist/src/cli/index.js",
38
- "spm": "dist/src/cli/index.js",
39
- "sysprom-mcp": "dist/src/mcp/index.js"
40
- },
41
- "scripts": {
42
- "build": "turbo run _build",
43
- "typecheck": "turbo run _typecheck",
44
- "compile": "turbo run _compile",
45
- "schema": "turbo run _schema",
46
- "test": "turbo run _test",
47
- "test:coverage": "turbo run _test:coverage",
48
- "docs": "turbo run _docs:cli _docs:api:html",
49
- "docs:serve": "typedoc --watch --serve",
50
- "lint": "turbo run _lint",
51
- "spm": "tsx src/cli/index.ts",
52
- "_lint": "eslint --cache .",
53
- "_typecheck": "tsc --noEmit",
54
- "_compile": "tsc",
55
- "_schema": "tsx src/generate-schema.ts",
56
- "_test": "tsx --test tests/*.test.ts",
57
- "_test:coverage": "c8 --src src --exclude 'src/cli/**' --exclude 'src/generate-schema.ts' tsx --test tests/*.test.ts",
58
- "_docs:cli": "tsx scripts/generate-cli-docs.ts",
59
- "_docs:api": "typedoc",
60
- "_docs:api:html": "typedoc",
61
- "prepare": "husky"
62
- },
63
- "dependencies": {
64
- "@modelcontextprotocol/sdk": "1.27.1",
65
- "commander": "14.0.3",
66
- "picocolors": "1.1.1",
67
- "zod": "4.3.6"
68
- },
69
- "devDependencies": {
70
- "@commitlint/cli": "20.5.0",
71
- "@commitlint/config-conventional": "20.5.0",
72
- "@eslint-community/eslint-plugin-eslint-comments": "4.7.1",
73
- "@eslint/js": "10.0.1",
74
- "@semantic-release/changelog": "6.0.3",
75
- "@semantic-release/exec": "7.1.0",
76
- "@semantic-release/git": "10.0.1",
77
- "@types/node": "25.5.0",
78
- "c8": "11.0.0",
79
- "conventional-changelog-conventionalcommits": "9.3.0",
80
- "eslint": "10.1.0",
81
- "eslint-config-prettier": "10.1.8",
82
- "eslint-plugin-jsdoc": "62.8.0",
83
- "eslint-plugin-prettier": "5.5.5",
84
- "husky": "9.1.7",
85
- "prettier": "3.8.1",
86
- "semantic-release": "25.0.3",
87
- "tsx": "4.21.0",
88
- "turbo": "2.8.20",
89
- "typedoc": "0.28.17",
90
- "typedoc-plugin-markdown": "4.11.0",
91
- "typedoc-plugin-zod": "1.4.3",
92
- "typescript": "5.9.3",
93
- "typescript-eslint": "8.57.1"
94
- }
2
+ "name": "sysprom",
3
+ "version": "1.18.0",
4
+ "description": "SysProM — System Provenance Model CLI and library",
5
+ "author": "ExaDev",
6
+ "homepage": "https://exadev.github.io/SysProM",
7
+ "bugs": "https://github.com/ExaDev/SysProM/issues",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/ExaDev/SysProM.git"
11
+ },
12
+ "keywords": [
13
+ "sysprom",
14
+ "provenance",
15
+ "decision",
16
+ "architecture",
17
+ "traceability",
18
+ "system-model",
19
+ "cli"
20
+ ],
21
+ "packageManager": "pnpm@10.32.1",
22
+ "type": "module",
23
+ "main": "./dist/src/index.js",
24
+ "types": "./dist/src/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/src/index.d.ts",
28
+ "import": "./dist/src/index.js"
29
+ }
30
+ },
31
+ "files": [
32
+ "dist/src/**/*.js",
33
+ "dist/src/**/*.d.ts",
34
+ "schema.json"
35
+ ],
36
+ "bin": {
37
+ "sysprom": "dist/src/cli/index.js",
38
+ "spm": "dist/src/cli/index.js",
39
+ "sysprom-mcp": "dist/src/mcp/index.js"
40
+ },
41
+ "scripts": {
42
+ "build": "turbo run _build",
43
+ "typecheck": "turbo run _typecheck",
44
+ "compile": "turbo run _compile",
45
+ "schema": "turbo run _schema",
46
+ "test": "turbo run _test",
47
+ "test:coverage": "turbo run _test:coverage",
48
+ "docs": "turbo run _docs:cli _docs:api:html",
49
+ "docs:serve": "typedoc --watch --serve",
50
+ "lint": "turbo run _lint",
51
+ "spm": "tsx src/cli/index.ts",
52
+ "_lint": "eslint --cache .",
53
+ "_typecheck": "tsc --noEmit",
54
+ "_compile": "tsc",
55
+ "_schema": "tsx src/generate-schema.ts",
56
+ "_test": "tsx --test tests/*.test.ts",
57
+ "_test:coverage": "c8 --src src --exclude 'src/cli/**' --exclude 'src/generate-schema.ts' tsx --test tests/*.test.ts",
58
+ "_docs:cli": "tsx scripts/generate-cli-docs.ts",
59
+ "_docs:api": "typedoc",
60
+ "_docs:api:html": "typedoc",
61
+ "validate": "turbo run _validate",
62
+ "prepare": "husky"
63
+ },
64
+ "dependencies": {
65
+ "@modelcontextprotocol/sdk": "1.27.1",
66
+ "commander": "14.0.3",
67
+ "picocolors": "1.1.1",
68
+ "zod": "4.3.6"
69
+ },
70
+ "devDependencies": {
71
+ "@commitlint/cli": "20.5.0",
72
+ "@commitlint/config-conventional": "20.5.0",
73
+ "@eslint-community/eslint-plugin-eslint-comments": "4.7.1",
74
+ "@eslint/compat": "2.0.3",
75
+ "@eslint/eslintrc": "3.3.5",
76
+ "@eslint/js": "10.0.1",
77
+ "@semantic-release/changelog": "6.0.3",
78
+ "@semantic-release/exec": "7.1.0",
79
+ "@semantic-release/git": "10.0.1",
80
+ "@types/node": "25.5.0",
81
+ "c8": "11.0.0",
82
+ "conventional-changelog-conventionalcommits": "9.3.0",
83
+ "eslint": "10.1.0",
84
+ "eslint-config-prettier": "10.1.8",
85
+ "eslint-formatter-compact": "9.0.1",
86
+ "eslint-plugin-jsdoc": "62.8.0",
87
+ "eslint-plugin-prettier": "5.5.5",
88
+ "eslint-plugin-sonarjs": "^4.0.2",
89
+ "husky": "9.1.7",
90
+ "prettier": "3.8.1",
91
+ "semantic-release": "25.0.3",
92
+ "tsx": "4.21.0",
93
+ "turbo": "2.8.20",
94
+ "typedoc": "0.28.18",
95
+ "typedoc-plugin-markdown": "4.11.0",
96
+ "typedoc-plugin-zod": "1.4.3",
97
+ "typescript": "6.0.2",
98
+ "typescript-eslint": "8.57.2"
99
+ }
95
100
  }
package/schema.json CHANGED
@@ -504,7 +504,8 @@
504
504
  "selects",
505
505
  "requires",
506
506
  "disables",
507
- "influence"
507
+ "influence",
508
+ "justifies"
508
509
  ],
509
510
  "type": "string"
510
511
  }