sysprom 1.19.0 → 1.21.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.
- package/README.md +3 -0
- package/dist/schema.json +4 -43
- package/dist/src/cli/commands/add.js +6 -2
- package/dist/src/cli/commands/query.js +5 -3
- package/dist/src/cli/commands/speckit.js +2 -2
- package/dist/src/cli/commands/update.js +6 -4
- package/dist/src/endpoint-types.d.ts +4 -0
- package/dist/src/endpoint-types.js +22 -116
- package/dist/src/json-to-md.js +2 -16
- package/dist/src/lifecycle-state.d.ts +9 -0
- package/dist/src/lifecycle-state.js +22 -0
- package/dist/src/mcp/server.js +3 -6
- package/dist/src/md-to-json.js +1 -19
- package/dist/src/operations/add-node.d.ts +21 -132
- package/dist/src/operations/add-plan-task.d.ts +14 -88
- package/dist/src/operations/add-relationship.d.ts +16 -102
- package/dist/src/operations/check.d.ts +7 -44
- package/dist/src/operations/graph-decision.d.ts +7 -44
- package/dist/src/operations/graph-decision.js +0 -1
- package/dist/src/operations/graph-dependency.d.ts +7 -44
- package/dist/src/operations/graph-dependency.js +3 -23
- package/dist/src/operations/graph-refinement.d.ts +7 -44
- package/dist/src/operations/graph-shared.js +1 -3
- package/dist/src/operations/graph.d.ts +7 -44
- package/dist/src/operations/infer-completeness.d.ts +10 -53
- package/dist/src/operations/infer-derived.d.ts +7 -44
- package/dist/src/operations/infer-derived.js +28 -4
- package/dist/src/operations/infer-impact.d.ts +49 -308
- package/dist/src/operations/infer-impact.js +22 -3
- package/dist/src/operations/infer-lifecycle.d.ts +8 -105
- package/dist/src/operations/infer-lifecycle.js +4 -10
- package/dist/src/operations/init-document.d.ts +7 -44
- package/dist/src/operations/json-to-markdown.d.ts +7 -44
- package/dist/src/operations/mark-task-done.d.ts +14 -88
- package/dist/src/operations/mark-task-undone.d.ts +14 -88
- package/dist/src/operations/markdown-to-json.d.ts +7 -44
- package/dist/src/operations/next-id.d.ts +8 -47
- package/dist/src/operations/node-history.d.ts +7 -44
- package/dist/src/operations/plan-add-task.d.ts +14 -88
- package/dist/src/operations/plan-gate.d.ts +7 -44
- package/dist/src/operations/plan-init.d.ts +7 -44
- package/dist/src/operations/plan-progress.d.ts +7 -44
- package/dist/src/operations/plan-status.d.ts +7 -44
- package/dist/src/operations/query-node.d.ts +29 -188
- package/dist/src/operations/query-nodes.d.ts +15 -89
- package/dist/src/operations/query-nodes.js +6 -4
- package/dist/src/operations/query-relationships.d.ts +9 -58
- package/dist/src/operations/remove-node.d.ts +21 -132
- package/dist/src/operations/remove-node.js +11 -1
- package/dist/src/operations/remove-relationship.d.ts +15 -101
- package/dist/src/operations/rename.d.ts +14 -88
- package/dist/src/operations/search.d.ts +14 -88
- package/dist/src/operations/speckit-diff.d.ts +7 -44
- package/dist/src/operations/speckit-export.d.ts +7 -44
- package/dist/src/operations/speckit-import.d.ts +7 -44
- package/dist/src/operations/speckit-sync.d.ts +22 -133
- package/dist/src/operations/speckit-sync.js +3 -3
- package/dist/src/operations/state-at.d.ts +7 -44
- package/dist/src/operations/stats.d.ts +7 -44
- package/dist/src/operations/sync.d.ts +21 -132
- package/dist/src/operations/task-list.d.ts +7 -44
- package/dist/src/operations/timeline.d.ts +7 -44
- package/dist/src/operations/trace-from-node.d.ts +21 -132
- package/dist/src/operations/update-metadata.d.ts +14 -88
- package/dist/src/operations/update-node.d.ts +20 -152
- package/dist/src/operations/update-plan-task.d.ts +14 -88
- package/dist/src/operations/validate.d.ts +7 -44
- package/dist/src/operations/validate.js +8 -6
- package/dist/src/schema.d.ts +22 -159
- package/dist/src/schema.js +4 -26
- package/dist/src/speckit/generate.js +10 -7
- package/dist/src/speckit/parse.js +6 -3
- package/dist/src/speckit/plan.js +1 -1
- package/package.json +12 -1
- package/schema.json +4 -43
|
@@ -89,39 +89,18 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
|
|
|
89
89
|
gate: "gate";
|
|
90
90
|
mode: "mode";
|
|
91
91
|
artefact: "artefact";
|
|
92
|
-
artefact_flow: "artefact_flow";
|
|
93
92
|
decision: "decision";
|
|
94
93
|
change: "change";
|
|
95
94
|
view: "view";
|
|
96
95
|
milestone: "milestone";
|
|
97
|
-
version: "version";
|
|
98
96
|
}> & {
|
|
99
|
-
is(value: unknown): value is "intent" | "concept" | "capability" | "element" | "realisation" | "invariant" | "principle" | "policy" | "protocol" | "stage" | "role" | "gate" | "mode" | "artefact" | "
|
|
97
|
+
is(value: unknown): value is "intent" | "concept" | "capability" | "element" | "realisation" | "invariant" | "principle" | "policy" | "protocol" | "stage" | "role" | "gate" | "mode" | "artefact" | "decision" | "change" | "view" | "milestone";
|
|
100
98
|
};
|
|
101
99
|
name: z.ZodString;
|
|
102
100
|
description: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
|
|
103
101
|
is(value: unknown): value is string | string[];
|
|
104
102
|
}>;
|
|
105
|
-
status: z.ZodOptional<z.
|
|
106
|
-
deprecated: "deprecated";
|
|
107
|
-
proposed: "proposed";
|
|
108
|
-
accepted: "accepted";
|
|
109
|
-
active: "active";
|
|
110
|
-
implemented: "implemented";
|
|
111
|
-
adopted: "adopted";
|
|
112
|
-
defined: "defined";
|
|
113
|
-
introduced: "introduced";
|
|
114
|
-
in_progress: "in_progress";
|
|
115
|
-
complete: "complete";
|
|
116
|
-
consolidated: "consolidated";
|
|
117
|
-
experimental: "experimental";
|
|
118
|
-
retired: "retired";
|
|
119
|
-
superseded: "superseded";
|
|
120
|
-
abandoned: "abandoned";
|
|
121
|
-
deferred: "deferred";
|
|
122
|
-
}> & {
|
|
123
|
-
is(value: unknown): value is "deprecated" | "proposed" | "accepted" | "active" | "implemented" | "adopted" | "defined" | "introduced" | "in_progress" | "complete" | "consolidated" | "experimental" | "retired" | "superseded" | "abandoned" | "deferred";
|
|
124
|
-
}>;
|
|
103
|
+
status: z.ZodOptional<z.ZodNever>;
|
|
125
104
|
lifecycle: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>>;
|
|
126
105
|
context: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
|
|
127
106
|
is(value: unknown): value is string | string[];
|
|
@@ -176,8 +155,6 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
|
|
|
176
155
|
}>>;
|
|
177
156
|
propagation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
178
157
|
includes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
179
|
-
input: z.ZodOptional<z.ZodString>;
|
|
180
|
-
output: z.ZodOptional<z.ZodString>;
|
|
181
158
|
external_references: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
182
159
|
role: z.ZodEnum<{
|
|
183
160
|
output: "output";
|
|
@@ -221,26 +198,14 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
|
|
|
221
198
|
affects: "affects";
|
|
222
199
|
supersedes: "supersedes";
|
|
223
200
|
must_preserve: "must_preserve";
|
|
224
|
-
performs: "performs";
|
|
225
201
|
part_of: "part_of";
|
|
226
202
|
precedes: "precedes";
|
|
227
203
|
must_follow: "must_follow";
|
|
228
|
-
blocks: "blocks";
|
|
229
|
-
routes_to: "routes_to";
|
|
230
204
|
governed_by: "governed_by";
|
|
231
205
|
modifies: "modifies";
|
|
232
|
-
triggered_by: "triggered_by";
|
|
233
|
-
applies_to: "applies_to";
|
|
234
206
|
produces: "produces";
|
|
235
|
-
consumes: "consumes";
|
|
236
|
-
transforms_into: "transforms_into";
|
|
237
|
-
selects: "selects";
|
|
238
|
-
requires: "requires";
|
|
239
|
-
disables: "disables";
|
|
240
|
-
influence: "influence";
|
|
241
|
-
justifies: "justifies";
|
|
242
207
|
}> & {
|
|
243
|
-
is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "
|
|
208
|
+
is(value: unknown): value is "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "part_of" | "precedes" | "must_follow" | "governed_by" | "modifies" | "produces";
|
|
244
209
|
};
|
|
245
210
|
description: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]> & {
|
|
246
211
|
is(value: unknown): value is string | string[];
|
|
@@ -259,7 +224,7 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
|
|
|
259
224
|
[x: string]: unknown;
|
|
260
225
|
from: string;
|
|
261
226
|
to: string;
|
|
262
|
-
type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "
|
|
227
|
+
type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "part_of" | "precedes" | "must_follow" | "governed_by" | "modifies" | "produces";
|
|
263
228
|
description?: string | string[] | undefined;
|
|
264
229
|
polarity?: "positive" | "negative" | "neutral" | "uncertain" | undefined;
|
|
265
230
|
strength?: number | undefined;
|
|
@@ -299,10 +264,10 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
|
|
|
299
264
|
nodes: {
|
|
300
265
|
[x: string]: unknown;
|
|
301
266
|
id: string;
|
|
302
|
-
type: "intent" | "concept" | "capability" | "element" | "realisation" | "invariant" | "principle" | "policy" | "protocol" | "stage" | "role" | "gate" | "mode" | "artefact" | "
|
|
267
|
+
type: "intent" | "concept" | "capability" | "element" | "realisation" | "invariant" | "principle" | "policy" | "protocol" | "stage" | "role" | "gate" | "mode" | "artefact" | "decision" | "change" | "view" | "milestone";
|
|
303
268
|
name: string;
|
|
304
269
|
description?: string | string[] | undefined;
|
|
305
|
-
status?:
|
|
270
|
+
status?: undefined;
|
|
306
271
|
lifecycle?: Record<string, string | boolean> | undefined;
|
|
307
272
|
context?: string | string[] | undefined;
|
|
308
273
|
options?: {
|
|
@@ -326,8 +291,6 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
|
|
|
326
291
|
}[] | undefined;
|
|
327
292
|
propagation?: Record<string, boolean> | undefined;
|
|
328
293
|
includes?: string[] | undefined;
|
|
329
|
-
input?: string | undefined;
|
|
330
|
-
output?: string | undefined;
|
|
331
294
|
external_references?: {
|
|
332
295
|
role: "output" | "input" | "context" | "evidence" | "source" | "standard" | "prior_art";
|
|
333
296
|
identifier: string;
|
|
@@ -350,7 +313,7 @@ export declare const inferDerivedOp: import("./define-operation.js").DefinedOper
|
|
|
350
313
|
[x: string]: unknown;
|
|
351
314
|
from: string;
|
|
352
315
|
to: string;
|
|
353
|
-
type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "
|
|
316
|
+
type: "refines" | "realises" | "implements" | "depends_on" | "constrained_by" | "affects" | "supersedes" | "must_preserve" | "part_of" | "precedes" | "must_follow" | "governed_by" | "modifies" | "produces";
|
|
354
317
|
description?: string | string[] | undefined;
|
|
355
318
|
polarity?: "positive" | "negative" | "neutral" | "uncertain" | undefined;
|
|
356
319
|
strength?: number | undefined;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
2
|
import { defineOperation } from "./define-operation.js";
|
|
3
3
|
import { SysProMDocument } from "../schema.js";
|
|
4
|
+
import { isViewReadModelDependsOnRelationship } from "../endpoint-types.js";
|
|
4
5
|
/**
|
|
5
6
|
* A derived relationship inferred from transitive closure or composition.
|
|
6
7
|
*/
|
|
@@ -61,8 +62,17 @@ export const inferDerivedOp = defineOperation({
|
|
|
61
62
|
output: DerivedOutput,
|
|
62
63
|
fn: (input) => {
|
|
63
64
|
const derived = [];
|
|
65
|
+
const nodeMap = new Map(input.doc.nodes.map((n) => [n.id, n]));
|
|
64
66
|
const existingKeys = new Set((input.doc.relationships ?? []).map((r) => `${r.from}:${r.type}:${r.to}`));
|
|
65
67
|
const derivedKeys = new Set();
|
|
68
|
+
const relationships = input.doc.relationships ?? [];
|
|
69
|
+
const isReadModelViewDependsOn = (rel) => {
|
|
70
|
+
const fromNode = nodeMap.get(rel.from);
|
|
71
|
+
const toNode = nodeMap.get(rel.to);
|
|
72
|
+
if (!fromNode || !toNode)
|
|
73
|
+
return false;
|
|
74
|
+
return isViewReadModelDependsOnRelationship(rel.type, fromNode.type, toNode.type);
|
|
75
|
+
};
|
|
66
76
|
// Helper to add derived relationship if not already existing
|
|
67
77
|
const addDerived = (from, to, type, derivedFrom, derivationType) => {
|
|
68
78
|
const key = `${from}:${type}:${to}`;
|
|
@@ -73,7 +83,14 @@ export const inferDerivedOp = defineOperation({
|
|
|
73
83
|
};
|
|
74
84
|
// 1. Transitive relationships - compute full transitive closure with path tracking
|
|
75
85
|
for (const [relType, derivedType] of Object.entries(TRANSITIVE_RELATIONSHIPS)) {
|
|
76
|
-
const rels =
|
|
86
|
+
const rels = relationships.filter((r) => {
|
|
87
|
+
if (r.type !== relType)
|
|
88
|
+
return false;
|
|
89
|
+
if (relType === "depends_on" && isReadModelViewDependsOn(r)) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
});
|
|
77
94
|
// Build adjacency list
|
|
78
95
|
const adj = new Map();
|
|
79
96
|
for (const r of rels) {
|
|
@@ -123,14 +140,21 @@ export const inferDerivedOp = defineOperation({
|
|
|
123
140
|
}
|
|
124
141
|
// 2. Inverse relationships
|
|
125
142
|
for (const [relType, inverseType] of Object.entries(INVERSE_RELATIONSHIPS)) {
|
|
126
|
-
const rels =
|
|
143
|
+
const rels = relationships.filter((r) => {
|
|
144
|
+
if (r.type !== relType)
|
|
145
|
+
return false;
|
|
146
|
+
if (relType === "depends_on" && isReadModelViewDependsOn(r)) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
return true;
|
|
150
|
+
});
|
|
127
151
|
for (const r of rels) {
|
|
128
152
|
addDerived(r.to, r.from, inverseType, [{ from: r.from, to: r.to, type: r.type }], "inverse");
|
|
129
153
|
}
|
|
130
154
|
}
|
|
131
155
|
// 3. Composite patterns (A affects B, B depends_on C => A potentially_affects C)
|
|
132
|
-
const affectsRels =
|
|
133
|
-
const dependsRels =
|
|
156
|
+
const affectsRels = relationships.filter((r) => r.type === "affects");
|
|
157
|
+
const dependsRels = relationships.filter((r) => r.type === "depends_on" && !isReadModelViewDependsOn(r));
|
|
134
158
|
const dependsMap = new Map();
|
|
135
159
|
for (const r of dependsRels) {
|
|
136
160
|
const deps = dependsMap.get(r.from) ?? [];
|