sysprom 1.0.0 → 1.0.6

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 (148) hide show
  1. package/README.md +207 -0
  2. package/dist/schema.json +510 -0
  3. package/dist/src/canonical-json.d.ts +23 -0
  4. package/dist/src/canonical-json.js +120 -0
  5. package/dist/src/cli/commands/add.d.ts +22 -0
  6. package/dist/src/cli/commands/add.js +95 -0
  7. package/dist/src/cli/commands/check.d.ts +10 -0
  8. package/dist/src/cli/commands/check.js +33 -0
  9. package/dist/src/cli/commands/graph.d.ts +15 -0
  10. package/dist/src/cli/commands/graph.js +32 -0
  11. package/dist/src/cli/commands/init.d.ts +2 -0
  12. package/dist/src/cli/commands/init.js +44 -0
  13. package/dist/src/cli/commands/json2md.d.ts +2 -0
  14. package/dist/src/cli/commands/json2md.js +60 -0
  15. package/dist/src/cli/commands/md2json.d.ts +2 -0
  16. package/dist/src/cli/commands/md2json.js +29 -0
  17. package/dist/src/cli/commands/plan.d.ts +2 -0
  18. package/dist/src/cli/commands/plan.js +227 -0
  19. package/dist/src/cli/commands/query.d.ts +2 -0
  20. package/dist/src/cli/commands/query.js +275 -0
  21. package/dist/src/cli/commands/remove.d.ts +13 -0
  22. package/dist/src/cli/commands/remove.js +50 -0
  23. package/dist/src/cli/commands/rename.d.ts +14 -0
  24. package/dist/src/cli/commands/rename.js +34 -0
  25. package/dist/src/cli/commands/search.d.ts +11 -0
  26. package/dist/src/cli/commands/search.js +37 -0
  27. package/dist/src/cli/commands/speckit.d.ts +2 -0
  28. package/dist/src/cli/commands/speckit.js +318 -0
  29. package/dist/src/cli/commands/stats.d.ts +10 -0
  30. package/dist/src/cli/commands/stats.js +51 -0
  31. package/dist/src/cli/commands/task.d.ts +2 -0
  32. package/dist/src/cli/commands/task.js +162 -0
  33. package/dist/src/cli/commands/update.d.ts +2 -0
  34. package/dist/src/cli/commands/update.js +219 -0
  35. package/dist/src/cli/commands/validate.d.ts +10 -0
  36. package/dist/src/cli/commands/validate.js +30 -0
  37. package/dist/src/cli/define-command.d.ts +34 -0
  38. package/dist/src/cli/define-command.js +237 -0
  39. package/dist/src/cli/index.d.ts +2 -0
  40. package/dist/src/cli/index.js +3 -0
  41. package/dist/src/cli/program.d.ts +4 -0
  42. package/dist/src/cli/program.js +46 -0
  43. package/dist/src/cli/shared.d.ts +26 -0
  44. package/dist/src/cli/shared.js +41 -0
  45. package/dist/src/generate-schema.d.ts +1 -0
  46. package/dist/src/generate-schema.js +9 -0
  47. package/dist/src/index.d.ts +48 -0
  48. package/dist/src/index.js +99 -0
  49. package/dist/src/io.d.ts +22 -0
  50. package/dist/src/io.js +66 -0
  51. package/dist/src/json-to-md.d.ts +26 -0
  52. package/dist/src/json-to-md.js +498 -0
  53. package/dist/src/md-to-json.d.ts +22 -0
  54. package/dist/src/md-to-json.js +548 -0
  55. package/dist/src/operations/add-node.d.ts +887 -0
  56. package/dist/src/operations/add-node.js +21 -0
  57. package/dist/src/operations/add-plan-task.d.ts +594 -0
  58. package/dist/src/operations/add-plan-task.js +25 -0
  59. package/dist/src/operations/add-relationship.d.ts +635 -0
  60. package/dist/src/operations/add-relationship.js +25 -0
  61. package/dist/src/operations/check.d.ts +301 -0
  62. package/dist/src/operations/check.js +66 -0
  63. package/dist/src/operations/define-operation.d.ts +14 -0
  64. package/dist/src/operations/define-operation.js +21 -0
  65. package/dist/src/operations/graph.d.ts +303 -0
  66. package/dist/src/operations/graph.js +71 -0
  67. package/dist/src/operations/index.d.ts +38 -0
  68. package/dist/src/operations/index.js +45 -0
  69. package/dist/src/operations/init-document.d.ts +299 -0
  70. package/dist/src/operations/init-document.js +26 -0
  71. package/dist/src/operations/json-to-markdown.d.ts +298 -0
  72. package/dist/src/operations/json-to-markdown.js +13 -0
  73. package/dist/src/operations/mark-task-done.d.ts +594 -0
  74. package/dist/src/operations/mark-task-done.js +26 -0
  75. package/dist/src/operations/mark-task-undone.d.ts +594 -0
  76. package/dist/src/operations/mark-task-undone.js +26 -0
  77. package/dist/src/operations/markdown-to-json.d.ts +298 -0
  78. package/dist/src/operations/markdown-to-json.js +13 -0
  79. package/dist/src/operations/next-id.d.ts +322 -0
  80. package/dist/src/operations/next-id.js +29 -0
  81. package/dist/src/operations/node-history.d.ts +313 -0
  82. package/dist/src/operations/node-history.js +55 -0
  83. package/dist/src/operations/plan-add-task.d.ts +595 -0
  84. package/dist/src/operations/plan-add-task.js +18 -0
  85. package/dist/src/operations/plan-gate.d.ts +351 -0
  86. package/dist/src/operations/plan-gate.js +41 -0
  87. package/dist/src/operations/plan-init.d.ts +299 -0
  88. package/dist/src/operations/plan-init.js +17 -0
  89. package/dist/src/operations/plan-progress.d.ts +313 -0
  90. package/dist/src/operations/plan-progress.js +23 -0
  91. package/dist/src/operations/plan-status.d.ts +349 -0
  92. package/dist/src/operations/plan-status.js +41 -0
  93. package/dist/src/operations/query-node.d.ts +1065 -0
  94. package/dist/src/operations/query-node.js +27 -0
  95. package/dist/src/operations/query-nodes.d.ts +594 -0
  96. package/dist/src/operations/query-nodes.js +23 -0
  97. package/dist/src/operations/query-relationships.d.ts +343 -0
  98. package/dist/src/operations/query-relationships.js +27 -0
  99. package/dist/src/operations/remove-node.d.ts +895 -0
  100. package/dist/src/operations/remove-node.js +58 -0
  101. package/dist/src/operations/remove-relationship.d.ts +622 -0
  102. package/dist/src/operations/remove-relationship.js +26 -0
  103. package/dist/src/operations/rename.d.ts +594 -0
  104. package/dist/src/operations/rename.js +113 -0
  105. package/dist/src/operations/search.d.ts +593 -0
  106. package/dist/src/operations/search.js +39 -0
  107. package/dist/src/operations/speckit-diff.d.ts +330 -0
  108. package/dist/src/operations/speckit-diff.js +89 -0
  109. package/dist/src/operations/speckit-export.d.ts +300 -0
  110. package/dist/src/operations/speckit-export.js +17 -0
  111. package/dist/src/operations/speckit-import.d.ts +299 -0
  112. package/dist/src/operations/speckit-import.js +39 -0
  113. package/dist/src/operations/speckit-sync.d.ts +900 -0
  114. package/dist/src/operations/speckit-sync.js +116 -0
  115. package/dist/src/operations/state-at.d.ts +309 -0
  116. package/dist/src/operations/state-at.js +53 -0
  117. package/dist/src/operations/stats.d.ts +324 -0
  118. package/dist/src/operations/stats.js +85 -0
  119. package/dist/src/operations/task-list.d.ts +305 -0
  120. package/dist/src/operations/task-list.js +44 -0
  121. package/dist/src/operations/timeline.d.ts +312 -0
  122. package/dist/src/operations/timeline.js +46 -0
  123. package/dist/src/operations/trace-from-node.d.ts +1197 -0
  124. package/dist/src/operations/trace-from-node.js +36 -0
  125. package/dist/src/operations/update-metadata.d.ts +593 -0
  126. package/dist/src/operations/update-metadata.js +18 -0
  127. package/dist/src/operations/update-node.d.ts +957 -0
  128. package/dist/src/operations/update-node.js +24 -0
  129. package/dist/src/operations/update-plan-task.d.ts +595 -0
  130. package/dist/src/operations/update-plan-task.js +31 -0
  131. package/dist/src/operations/validate.d.ts +310 -0
  132. package/dist/src/operations/validate.js +82 -0
  133. package/dist/src/schema.d.ts +891 -0
  134. package/dist/src/schema.js +356 -0
  135. package/dist/src/speckit/generate.d.ts +7 -0
  136. package/dist/src/speckit/generate.js +546 -0
  137. package/dist/src/speckit/index.d.ts +4 -0
  138. package/dist/src/speckit/index.js +4 -0
  139. package/dist/src/speckit/parse.d.ts +11 -0
  140. package/dist/src/speckit/parse.js +712 -0
  141. package/dist/src/speckit/plan.d.ts +125 -0
  142. package/dist/src/speckit/plan.js +636 -0
  143. package/dist/src/speckit/project.d.ts +39 -0
  144. package/dist/src/speckit/project.js +141 -0
  145. package/dist/src/text.d.ts +23 -0
  146. package/dist/src/text.js +32 -0
  147. package/package.json +86 -8
  148. package/schema.json +510 -0
@@ -0,0 +1,48 @@
1
+ /**
2
+ * SysProM — System Provenance Model
3
+ *
4
+ * A recursive, decision-driven model for recording where every part of a
5
+ * system came from, what decisions shaped it, and how it reached its current form.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import type { SysProMDocument, Node, NodeType, Relationship, RelationshipType } from "./schema.js";
10
+ import type { ValidationResult, DocumentStats, NodeDetail, TraceNode, RemoveResult, TimelineEvent, NodeState } from "./operations/index.js";
11
+ export { SysProMDocument, Node, Relationship, NodeType, NodeStatus, RelationshipType, Text, Option, Operation, Task, ExternalReference, ExternalReferenceRole, Metadata, NODE_TYPE_LABELS, NODE_LABEL_TO_TYPE, RELATIONSHIP_TYPE_LABELS, RELATIONSHIP_LABEL_TO_TYPE, EXTERNAL_REFERENCE_ROLE_LABELS, EXTERNAL_REFERENCE_LABEL_TO_ROLE, NODE_STATUSES, NODE_FILE_MAP, NODE_ID_PREFIX, toJSONSchema, } from "./schema.js";
12
+ export { jsonToMarkdownSingle, jsonToMarkdownMultiDoc, jsonToMarkdown, type ConvertOptions, } from "./json-to-md.js";
13
+ export { markdownSingleToJson, markdownMultiDocToJson, markdownToJson, } from "./md-to-json.js";
14
+ export { validateOp, type ValidationResult } from "./operations/index.js";
15
+ export { statsOp, type DocumentStats } from "./operations/index.js";
16
+ export { queryNodesOp, queryNodeOp, queryRelationshipsOp, traceFromNodeOp, type NodeDetail, type TraceNode, } from "./operations/index.js";
17
+ export { nextIdOp, addNodeOp, removeNodeOp, updateNodeOp, addRelationshipOp, removeRelationshipOp, updateMetadataOp, addPlanTaskOp, updatePlanTaskOp, type RemoveResult, } from "./operations/index.js";
18
+ export declare function validate(doc: SysProMDocument): ValidationResult;
19
+ export declare function stats(doc: SysProMDocument): DocumentStats;
20
+ export declare function queryNodes(doc: SysProMDocument, filters?: {
21
+ type?: string;
22
+ status?: string;
23
+ }): Node[];
24
+ export declare function queryNode(doc: SysProMDocument, id: string): NodeDetail | undefined;
25
+ export declare function queryRelationships(doc: SysProMDocument, filters?: {
26
+ from?: string;
27
+ to?: string;
28
+ type?: string;
29
+ }): Relationship[];
30
+ export declare function traceFromNode(doc: SysProMDocument, startId: string): TraceNode;
31
+ export declare function nextId(doc: SysProMDocument, type: NodeType): string;
32
+ export declare function addNode(doc: SysProMDocument, node: Node): SysProMDocument;
33
+ export declare function removeNode(doc: SysProMDocument, id: string): RemoveResult;
34
+ export declare function updateNode(doc: SysProMDocument, id: string, fields: Partial<Node>): SysProMDocument;
35
+ export declare function addRelationship(doc: SysProMDocument, rel: Relationship): SysProMDocument;
36
+ export declare function removeRelationship(doc: SysProMDocument, from: string, type: RelationshipType, to: string): SysProMDocument;
37
+ export declare function updateMetadata(doc: SysProMDocument, fields: Record<string, unknown>): SysProMDocument;
38
+ export declare function addPlanTask(doc: SysProMDocument, changeId: string, description: string): SysProMDocument;
39
+ export declare function updatePlanTask(doc: SysProMDocument, changeId: string, taskIndex: number, done: boolean): SysProMDocument;
40
+ export { canonicalise, type FormatOptions } from "./canonical-json.js";
41
+ export { textToString, textToLines, textToMarkdown, markdownToText, } from "./text.js";
42
+ export { loadDocument, saveDocument, type Format, type LoadedDocument, } from "./io.js";
43
+ export { detectSpecKitProject, listFeatures, getFeature, resolveConstitution, type SpecKitProject, type SpecKitFeature, parseConstitution, parseSpec, parsePlan, parseTasks, parseChecklist, parseSpecKitFeature, generateConstitution, generateSpec, generatePlan, generateTasks, generateChecklist, generateSpecKitProject, type ParseResult, } from "./speckit/index.js";
44
+ export { timelineOp, nodeHistoryOp, stateAtOp, type TimelineEvent, type NodeState, } from "./operations/index.js";
45
+ export declare function timeline(doc: SysProMDocument): TimelineEvent[];
46
+ export declare function nodeHistory(doc: SysProMDocument, nodeId: string): TimelineEvent[];
47
+ export declare function stateAt(doc: SysProMDocument, timestamp: string): NodeState[];
48
+ export { defineOperation, type OperationDef, type DefinedOperation, searchOp, checkOp, graphOp, renameOp, } from "./operations/index.js";
@@ -0,0 +1,99 @@
1
+ /**
2
+ * SysProM — System Provenance Model
3
+ *
4
+ * A recursive, decision-driven model for recording where every part of a
5
+ * system came from, what decisions shaped it, and how it reached its current form.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { validateOp, statsOp, queryNodesOp, queryNodeOp, queryRelationshipsOp, traceFromNodeOp, nextIdOp, addNodeOp, removeNodeOp, updateNodeOp, addRelationshipOp, removeRelationshipOp, updateMetadataOp, addPlanTaskOp, updatePlanTaskOp, timelineOp, nodeHistoryOp, stateAtOp, } from "./operations/index.js";
10
+ // Schema types and validators (const and type share the same name)
11
+ export { SysProMDocument, Node, Relationship, NodeType, NodeStatus, RelationshipType, Text, Option, Operation, Task, ExternalReference, ExternalReferenceRole, Metadata,
12
+ // Labels
13
+ NODE_TYPE_LABELS, NODE_LABEL_TO_TYPE, RELATIONSHIP_TYPE_LABELS, RELATIONSHIP_LABEL_TO_TYPE, EXTERNAL_REFERENCE_ROLE_LABELS, EXTERNAL_REFERENCE_LABEL_TO_ROLE, NODE_STATUSES, NODE_FILE_MAP, NODE_ID_PREFIX,
14
+ // Schema generator
15
+ toJSONSchema, } from "./schema.js";
16
+ // Converters: JSON to Markdown
17
+ export { jsonToMarkdownSingle, jsonToMarkdownMultiDoc, jsonToMarkdown, } from "./json-to-md.js";
18
+ // Converters: Markdown to JSON
19
+ export { markdownSingleToJson, markdownMultiDocToJson, markdownToJson, } from "./md-to-json.js";
20
+ // Validation
21
+ export { validateOp } from "./operations/index.js";
22
+ // Stats
23
+ export { statsOp } from "./operations/index.js";
24
+ // Query
25
+ export { queryNodesOp, queryNodeOp, queryRelationshipsOp, traceFromNodeOp, } from "./operations/index.js";
26
+ // Mutation
27
+ export { nextIdOp, addNodeOp, removeNodeOp, updateNodeOp, addRelationshipOp, removeRelationshipOp, updateMetadataOp, addPlanTaskOp, updatePlanTaskOp, } from "./operations/index.js";
28
+ // Convenience wrappers for backwards compatibility
29
+ export function validate(doc) {
30
+ return validateOp({ doc });
31
+ }
32
+ export function stats(doc) {
33
+ return statsOp({ doc });
34
+ }
35
+ export function queryNodes(doc, filters) {
36
+ return queryNodesOp({ doc, type: filters?.type, status: filters?.status });
37
+ }
38
+ export function queryNode(doc, id) {
39
+ return queryNodeOp({ doc, id }) ?? undefined;
40
+ }
41
+ export function queryRelationships(doc, filters) {
42
+ return queryRelationshipsOp({
43
+ doc,
44
+ from: filters?.from,
45
+ to: filters?.to,
46
+ type: filters?.type,
47
+ });
48
+ }
49
+ export function traceFromNode(doc, startId) {
50
+ return traceFromNodeOp({ doc, startId });
51
+ }
52
+ export function nextId(doc, type) {
53
+ return nextIdOp({ doc, type });
54
+ }
55
+ export function addNode(doc, node) {
56
+ return addNodeOp({ doc, node });
57
+ }
58
+ export function removeNode(doc, id) {
59
+ return removeNodeOp({ doc, id });
60
+ }
61
+ export function updateNode(doc, id, fields) {
62
+ return updateNodeOp({ doc, id, fields });
63
+ }
64
+ export function addRelationship(doc, rel) {
65
+ return addRelationshipOp({ doc, rel });
66
+ }
67
+ export function removeRelationship(doc, from, type, to) {
68
+ return removeRelationshipOp({ doc, from, type, to });
69
+ }
70
+ export function updateMetadata(doc, fields) {
71
+ return updateMetadataOp({ doc, fields });
72
+ }
73
+ export function addPlanTask(doc, changeId, description) {
74
+ return addPlanTaskOp({ doc, changeId, description });
75
+ }
76
+ export function updatePlanTask(doc, changeId, taskIndex, done) {
77
+ return updatePlanTaskOp({ doc, changeId, taskIndex, done });
78
+ }
79
+ // Utilities
80
+ export { canonicalise } from "./canonical-json.js";
81
+ export { textToString, textToLines, textToMarkdown, markdownToText, } from "./text.js";
82
+ // IO
83
+ export { loadDocument, saveDocument, } from "./io.js";
84
+ // Spec-Kit interoperability
85
+ export { detectSpecKitProject, listFeatures, getFeature, resolveConstitution, parseConstitution, parseSpec, parsePlan, parseTasks, parseChecklist, parseSpecKitFeature, generateConstitution, generateSpec, generatePlan, generateTasks, generateChecklist, generateSpecKitProject, } from "./speckit/index.js";
86
+ // Temporal query
87
+ export { timelineOp, nodeHistoryOp, stateAtOp, } from "./operations/index.js";
88
+ // Convenience wrappers for temporal
89
+ export function timeline(doc) {
90
+ return timelineOp({ doc });
91
+ }
92
+ export function nodeHistory(doc, nodeId) {
93
+ return nodeHistoryOp({ doc, nodeId });
94
+ }
95
+ export function stateAt(doc, timestamp) {
96
+ return stateAtOp({ doc, timestamp });
97
+ }
98
+ // Operations (single source of truth for domain logic + metadata)
99
+ export { defineOperation, searchOp, checkOp, graphOp, renameOp, } from "./operations/index.js";
@@ -0,0 +1,22 @@
1
+ import { SysProMDocument } from "./schema.js";
2
+ export type Format = "json" | "single-md" | "multi-md";
3
+ export interface LoadedDocument {
4
+ doc: SysProMDocument;
5
+ format: Format;
6
+ path: string;
7
+ }
8
+ /**
9
+ * Load a SysProM document from a file (JSON or Markdown).
10
+ *
11
+ * @param input - File path or directory to load from.
12
+ * @returns The loaded document with its detected format and resolved path.
13
+ */
14
+ export declare function loadDocument(input: string): LoadedDocument;
15
+ /**
16
+ * Save a SysProM document to a file (JSON or Markdown).
17
+ *
18
+ * @param doc - The SysProM document to save.
19
+ * @param format - Output format: 'json', 'single-md', or 'multi-md'.
20
+ * @param path - Destination file path or directory.
21
+ */
22
+ export declare function saveDocument(doc: SysProMDocument, format: Format, path: string): void;
package/dist/src/io.js ADDED
@@ -0,0 +1,66 @@
1
+ import { readFileSync, writeFileSync, statSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import { SysProMDocument } from "./schema.js";
4
+ import { markdownSingleToJson, markdownMultiDocToJson } from "./md-to-json.js";
5
+ import { jsonToMarkdownSingle, jsonToMarkdownMultiDoc } from "./json-to-md.js";
6
+ import { canonicalise } from "./canonical-json.js";
7
+ function detectFormat(input) {
8
+ const stat = statSync(input);
9
+ if (stat.isDirectory())
10
+ return "multi-md";
11
+ if (input.endsWith(".json"))
12
+ return "json";
13
+ return "single-md";
14
+ }
15
+ /**
16
+ * Load a SysProM document from a file (JSON or Markdown).
17
+ *
18
+ * @param input - File path or directory to load from.
19
+ * @returns The loaded document with its detected format and resolved path.
20
+ */
21
+ export function loadDocument(input) {
22
+ const path = resolve(input);
23
+ const format = detectFormat(path);
24
+ let doc;
25
+ switch (format) {
26
+ case "json": {
27
+ const raw = JSON.parse(readFileSync(path, "utf8"));
28
+ const result = SysProMDocument.safeParse(raw);
29
+ if (!result.success) {
30
+ throw new Error(`Invalid SysProM document:\n${result.error.issues.map((i) => ` ${i.path.join(".")}: ${i.message}`).join("\n")}`);
31
+ }
32
+ doc = result.data;
33
+ break;
34
+ }
35
+ case "single-md": {
36
+ const content = readFileSync(path, "utf8");
37
+ doc = markdownSingleToJson(content);
38
+ break;
39
+ }
40
+ case "multi-md": {
41
+ doc = markdownMultiDocToJson(path);
42
+ break;
43
+ }
44
+ }
45
+ return { doc, format, path };
46
+ }
47
+ /**
48
+ * Save a SysProM document to a file (JSON or Markdown).
49
+ *
50
+ * @param doc - The SysProM document to save.
51
+ * @param format - Output format: 'json', 'single-md', or 'multi-md'.
52
+ * @param path - Destination file path or directory.
53
+ */
54
+ export function saveDocument(doc, format, path) {
55
+ switch (format) {
56
+ case "json":
57
+ writeFileSync(path, canonicalise(doc, { indent: "\t" }) + "\n");
58
+ break;
59
+ case "single-md":
60
+ writeFileSync(path, jsonToMarkdownSingle(doc));
61
+ break;
62
+ case "multi-md":
63
+ jsonToMarkdownMultiDoc(doc, path);
64
+ break;
65
+ }
66
+ }
@@ -0,0 +1,26 @@
1
+ import { type SysProMDocument } from "./schema.js";
2
+ export interface ConvertOptions {
3
+ form: "single-file" | "multi-doc";
4
+ }
5
+ /**
6
+ * Convert a SysProM document to a single Markdown string.
7
+ *
8
+ * @param doc - The SysProM document to convert.
9
+ * @returns The Markdown representation.
10
+ */
11
+ export declare function jsonToMarkdownSingle(doc: SysProMDocument): string;
12
+ /**
13
+ * Convert a SysProM document to a multi-document Markdown folder.
14
+ *
15
+ * @param doc - The SysProM document to convert.
16
+ * @param outDir - Output directory path.
17
+ */
18
+ export declare function jsonToMarkdownMultiDoc(doc: SysProMDocument, outDir: string): void;
19
+ /**
20
+ * Convert a SysProM document to Markdown, writing to the specified output path.
21
+ *
22
+ * @param doc - The SysProM document to convert.
23
+ * @param output - Output file or directory path.
24
+ * @param options - Conversion options specifying single-file or multi-doc form.
25
+ */
26
+ export declare function jsonToMarkdown(doc: SysProMDocument, output: string, options: ConvertOptions): void;