@gobing-ai/spur 0.3.44 → 0.3.46

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 (71) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/rules/README.md +12 -4
  3. package/config/rules/recommended-pre-check.yaml +4 -4
  4. package/config/rules/strict-check.yaml +7 -4
  5. package/package.json +9 -9
  6. package/plugins/sp/commands/dev-find-next.md +20 -12
  7. package/plugins/sp/plugin.json +1 -1
  8. package/plugins/sp/skills/next-feature/SKILL.md +17 -13
  9. package/plugins/sp/skills/next-feature/references/handoff-routing.md +12 -7
  10. package/plugins/sp/skills/next-feature/references/signal-derivation.md +39 -2
  11. package/plugins/sp/skills/spur-cli/references/agent.md +35 -2
  12. package/plugins/sp/skills/spur-cli/references/message.md +15 -4
  13. package/plugins/sp/skills/spur-cli/references/workflows/validation-and-extension.md +18 -3
  14. package/plugins/sp/skills/spur-cli/references/workflows.md +8 -2
  15. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +5 -4
  16. package/schemas/state-machine-workflow.schema.json +137 -26
  17. package/schemas/transition-flow-workflow.schema.json +123 -23
  18. package/spur.js +2943 -703
  19. package/web/_astro/BoardApp.Ce6zJYAH.js +1 -0
  20. package/web/_astro/BoardApp.DKyrGxdo.js +179 -0
  21. package/web/_astro/{TaskDetail.B6yiT-U7.js → TaskDetail.6-27_LMa.js} +1 -1
  22. package/web/_astro/{arc.PbmgYm3_.js → arc.Df-9AQvS.js} +1 -1
  23. package/web/_astro/{architectureDiagram-3BPJPVTR.BkOMSdmD.js → architectureDiagram-3BPJPVTR.VAI_-paS.js} +1 -1
  24. package/web/_astro/{blockDiagram-GPEHLZMM.BtomoUdy.js → blockDiagram-GPEHLZMM.DFpUY1ue.js} +1 -1
  25. package/web/_astro/{c4Diagram-AAUBKEIU.UzrYwJnF.js → c4Diagram-AAUBKEIU.CF8doOpg.js} +1 -1
  26. package/web/_astro/channel.Uhm9O3UV.js +1 -0
  27. package/web/_astro/{chunk-2J33WTMH.nNChLHkw.js → chunk-2J33WTMH.BnjK3fjt.js} +1 -1
  28. package/web/_astro/{chunk-4BX2VUAB.DLYAecPo.js → chunk-4BX2VUAB.x6ZDnJKq.js} +1 -1
  29. package/web/_astro/{chunk-55IACEB6.t5bzuj1J.js → chunk-55IACEB6.zY-0uu7w.js} +1 -1
  30. package/web/_astro/{chunk-727SXJPM.DBV62bIy.js → chunk-727SXJPM.BZxKg_Vi.js} +1 -1
  31. package/web/_astro/{chunk-AQP2D5EJ.BdaPhTPs.js → chunk-AQP2D5EJ.Cpi9G9Td.js} +1 -1
  32. package/web/_astro/{chunk-FMBD7UC4.eoZ88KMf.js → chunk-FMBD7UC4.DWTB-Pif.js} +1 -1
  33. package/web/_astro/{chunk-ND2GUHAM.QdNDyeSh.js → chunk-ND2GUHAM.BPDQbiOG.js} +1 -1
  34. package/web/_astro/{chunk-QZHKN3VN.DPaToLfx.js → chunk-QZHKN3VN.BRWIcuoM.js} +1 -1
  35. package/web/_astro/{classDiagram-4FO5ZUOK.By9BMe7b.js → classDiagram-4FO5ZUOK.mGTCZsDO.js} +1 -1
  36. package/web/_astro/{classDiagram-v2-Q7XG4LA2.By9BMe7b.js → classDiagram-v2-Q7XG4LA2.mGTCZsDO.js} +1 -1
  37. package/web/_astro/{cose-bilkent-S5V4N54A.DMypl6q_.js → cose-bilkent-S5V4N54A.D1GEut-z.js} +1 -1
  38. package/web/_astro/{dagre-BM42HDAG.p26m9grg.js → dagre-BM42HDAG.BV0XG9Do.js} +1 -1
  39. package/web/_astro/{diagram-2AECGRRQ.C6m3oTIu.js → diagram-2AECGRRQ.DzpYxsjo.js} +1 -1
  40. package/web/_astro/{diagram-5GNKFQAL.JCxivn2z.js → diagram-5GNKFQAL.Cm9YzJh4.js} +1 -1
  41. package/web/_astro/{diagram-KO2AKTUF.DifbEd3P.js → diagram-KO2AKTUF.BjhottUj.js} +1 -1
  42. package/web/_astro/{diagram-LMA3HP47.Bffga-cf.js → diagram-LMA3HP47.BFsQW5kb.js} +1 -1
  43. package/web/_astro/{diagram-OG6HWLK6.CUKx5_Cx.js → diagram-OG6HWLK6.8pdpzSWO.js} +1 -1
  44. package/web/_astro/{erDiagram-TEJ5UH35.DaJ9KZR0.js → erDiagram-TEJ5UH35.Bd7KUJmJ.js} +1 -1
  45. package/web/_astro/{flowDiagram-I6XJVG4X.Do6l5pzg.js → flowDiagram-I6XJVG4X.7LWffkaE.js} +1 -1
  46. package/web/_astro/{ganttDiagram-6RSMTGT7.DqBKgB-3.js → ganttDiagram-6RSMTGT7.BeDcO5tI.js} +1 -1
  47. package/web/_astro/{gitGraphDiagram-PVQCEYII.B3VLSQ22.js → gitGraphDiagram-PVQCEYII.Ca4n730A.js} +1 -1
  48. package/web/_astro/{index.QfZ9SC3X.css → index.Dbvuw6d4.css} +1 -1
  49. package/web/_astro/{infoDiagram-5YYISTIA.hK8ZC1oa.js → infoDiagram-5YYISTIA.B0OakQYb.js} +1 -1
  50. package/web/_astro/{ishikawaDiagram-YF4QCWOH.C8DXwh9Z.js → ishikawaDiagram-YF4QCWOH.DSmNQe-1.js} +1 -1
  51. package/web/_astro/{journeyDiagram-JHISSGLW.mj5aHQDb.js → journeyDiagram-JHISSGLW.Cy5ruEUu.js} +1 -1
  52. package/web/_astro/{kanban-definition-UN3LZRKU.Dwlhi49r.js → kanban-definition-UN3LZRKU.CUJXub0p.js} +1 -1
  53. package/web/_astro/{linear.7zBHdlwl.js → linear.DC1jCCXn.js} +1 -1
  54. package/web/_astro/{mermaid.core.AYdA0EJr.js → mermaid.core.DxVP99Ab.js} +4 -4
  55. package/web/_astro/{mindmap-definition-RKZ34NQL.BSnniHEq.js → mindmap-definition-RKZ34NQL.D0MaV6sJ.js} +1 -1
  56. package/web/_astro/{pieDiagram-4H26LBE5.B7EVpA3J.js → pieDiagram-4H26LBE5.DCC6_q32.js} +1 -1
  57. package/web/_astro/{quadrantDiagram-W4KKPZXB.rg4i8YOY.js → quadrantDiagram-W4KKPZXB.BeUOAM7C.js} +1 -1
  58. package/web/_astro/{requirementDiagram-4Y6WPE33.C4pr792x.js → requirementDiagram-4Y6WPE33.Dbl4MASO.js} +1 -1
  59. package/web/_astro/{sankeyDiagram-5OEKKPKP.DTXU996O.js → sankeyDiagram-5OEKKPKP.HsLg0VS4.js} +1 -1
  60. package/web/_astro/{sequenceDiagram-3UESZ5HK.D73DOjzi.js → sequenceDiagram-3UESZ5HK.DT7DJTnZ.js} +1 -1
  61. package/web/_astro/{stateDiagram-AJRCARHV.CVkeSaEH.js → stateDiagram-AJRCARHV.d_ju1Vr1.js} +1 -1
  62. package/web/_astro/{stateDiagram-v2-BHNVJYJU.DkBGwoN5.js → stateDiagram-v2-BHNVJYJU.DMCAjMJ4.js} +1 -1
  63. package/web/_astro/{timeline-definition-PNZ67QCA.DnJ9Yh7G.js → timeline-definition-PNZ67QCA.DNOHr62_.js} +1 -1
  64. package/web/_astro/{vennDiagram-CIIHVFJN.DN1tvR4Y.js → vennDiagram-CIIHVFJN.B7dUy-1W.js} +1 -1
  65. package/web/_astro/{wardley-L42UT6IY.D54jJ-7-.js → wardley-L42UT6IY.DEqOXvBh.js} +1 -1
  66. package/web/_astro/{wardleyDiagram-YWT4CUSO.C2grUBbE.js → wardleyDiagram-YWT4CUSO.BCRb2p6x.js} +1 -1
  67. package/web/_astro/{xychartDiagram-2RQKCTM6.D05okBnV.js → xychartDiagram-2RQKCTM6.NxVQLdBh.js} +1 -1
  68. package/web/index.html +2 -2
  69. package/web/_astro/BoardApp.BnhkWEOG.js +0 -179
  70. package/web/_astro/BoardApp.CxOS4HSo.js +0 -1
  71. package/web/_astro/channel.DRRsElzO.js +0 -1
@@ -6,29 +6,83 @@
6
6
  "additionalProperties": false,
7
7
  "required": ["name", "initialState", "states", "transitions"],
8
8
  "properties": {
9
- "$schema": { "type": "string" },
10
- "kind": { "const": "state-machine" },
11
- "name": { "type": "string", "minLength": 1 },
12
- "version": { "type": "string" },
13
- "description": { "type": "string" },
14
- "initialState": { "type": "string", "minLength": 1 },
15
- "terminalStates": { "type": "array", "items": { "type": "string", "minLength": 1 } },
9
+ "$schema": {
10
+ "type": "string"
11
+ },
12
+ "kind": {
13
+ "const": "state-machine"
14
+ },
15
+ "name": {
16
+ "type": "string",
17
+ "minLength": 1
18
+ },
19
+ "version": {
20
+ "type": "string"
21
+ },
22
+ "description": {
23
+ "type": "string"
24
+ },
25
+ "initialState": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "terminalStates": {
30
+ "type": "array",
31
+ "items": {
32
+ "type": "string",
33
+ "minLength": 1
34
+ }
35
+ },
16
36
  "failureStates": {
17
37
  "type": "array",
18
- "items": { "type": "string", "minLength": 1 },
19
- "description": "Subset of terminalStates whose reach finalizes the run as failed. Absent ⇒ every terminal is a success."
38
+ "items": {
39
+ "type": "string",
40
+ "minLength": 1
41
+ },
42
+ "description": "Subset of terminalStates whose reach finalizes the run as failed. Absent \u21d2 every terminal is a success."
43
+ },
44
+ "iterationBound": {
45
+ "type": "integer",
46
+ "exclusiveMinimum": 0
20
47
  },
21
- "iterationBound": { "type": "integer", "exclusiveMinimum": 0 },
22
48
  "vars": {
23
49
  "type": "object",
24
- "propertyNames": { "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" },
25
- "additionalProperties": { "type": "string" }
50
+ "propertyNames": {
51
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
52
+ },
53
+ "additionalProperties": {
54
+ "type": "string"
55
+ }
26
56
  },
27
57
  "env": {
28
58
  "type": "object",
29
59
  "additionalProperties": false,
30
60
  "properties": {
31
- "allow": { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" } }
61
+ "allow": {
62
+ "type": "array",
63
+ "items": {
64
+ "type": "string",
65
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
66
+ }
67
+ }
68
+ }
69
+ },
70
+ "extensions": {
71
+ "type": "object",
72
+ "additionalProperties": false,
73
+ "properties": {
74
+ "actions": {
75
+ "type": "array",
76
+ "items": {
77
+ "$ref": "#/$defs/relativeExtensionPath"
78
+ }
79
+ },
80
+ "guards": {
81
+ "type": "array",
82
+ "items": {
83
+ "$ref": "#/$defs/relativeExtensionPath"
84
+ }
85
+ }
32
86
  }
33
87
  },
34
88
  "states": {
@@ -38,14 +92,29 @@
38
92
  "additionalProperties": false,
39
93
  "required": ["id"],
40
94
  "properties": {
41
- "id": { "type": "string", "minLength": 1 },
42
- "description": { "type": "string" },
95
+ "id": {
96
+ "type": "string",
97
+ "minLength": 1
98
+ },
99
+ "description": {
100
+ "type": "string"
101
+ },
43
102
  "pause": {
44
103
  "type": "boolean",
45
104
  "description": "When true, the engine pauses the run at this state for HITL (E3); resume with `spur workflow continue`."
46
105
  },
47
- "onEnter": { "type": "array", "items": { "$ref": "#/$defs/action" } },
48
- "onExit": { "type": "array", "items": { "$ref": "#/$defs/action" } }
106
+ "onEnter": {
107
+ "type": "array",
108
+ "items": {
109
+ "$ref": "#/$defs/action"
110
+ }
111
+ },
112
+ "onExit": {
113
+ "type": "array",
114
+ "items": {
115
+ "$ref": "#/$defs/action"
116
+ }
117
+ }
49
118
  }
50
119
  }
51
120
  },
@@ -56,11 +125,23 @@
56
125
  "additionalProperties": false,
57
126
  "required": ["from", "to"],
58
127
  "properties": {
59
- "from": { "type": "string", "minLength": 1 },
60
- "to": { "type": "string", "minLength": 1 },
61
- "description": { "type": "string" },
62
- "trigger": { "type": "string" },
63
- "guard": { "$ref": "#/$defs/guard" }
128
+ "from": {
129
+ "type": "string",
130
+ "minLength": 1
131
+ },
132
+ "to": {
133
+ "type": "string",
134
+ "minLength": 1
135
+ },
136
+ "description": {
137
+ "type": "string"
138
+ },
139
+ "trigger": {
140
+ "type": "string"
141
+ },
142
+ "guard": {
143
+ "$ref": "#/$defs/guard"
144
+ }
64
145
  }
65
146
  }
66
147
  }
@@ -71,8 +152,14 @@
71
152
  "additionalProperties": false,
72
153
  "required": ["kind"],
73
154
  "properties": {
74
- "kind": { "type": "string", "minLength": 1 },
75
- "options": { "type": "object", "additionalProperties": true }
155
+ "kind": {
156
+ "type": "string",
157
+ "minLength": 1
158
+ },
159
+ "options": {
160
+ "type": "object",
161
+ "additionalProperties": true
162
+ }
76
163
  }
77
164
  },
78
165
  "guard": {
@@ -80,8 +167,32 @@
80
167
  "additionalProperties": false,
81
168
  "required": ["kind"],
82
169
  "properties": {
83
- "kind": { "type": "string", "minLength": 1 },
84
- "options": { "type": "object", "additionalProperties": true }
170
+ "kind": {
171
+ "type": "string",
172
+ "minLength": 1
173
+ },
174
+ "options": {
175
+ "type": "object",
176
+ "additionalProperties": true
177
+ }
178
+ }
179
+ },
180
+ "relativeExtensionPath": {
181
+ "type": "string",
182
+ "minLength": 1,
183
+ "description": "Relative module path; absolute paths and '..' traversal are forbidden.",
184
+ "not": {
185
+ "anyOf": [
186
+ {
187
+ "pattern": "^[/\\\\]"
188
+ },
189
+ {
190
+ "pattern": "^[A-Za-z]:[/\\\\]"
191
+ },
192
+ {
193
+ "pattern": "(^|[/\\\\])\\.\\.([/\\\\]|$)"
194
+ }
195
+ ]
85
196
  }
86
197
  }
87
198
  }
@@ -6,24 +6,75 @@
6
6
  "additionalProperties": false,
7
7
  "required": ["kind", "name", "initialNode", "nodes", "edges"],
8
8
  "properties": {
9
- "$schema": { "type": "string" },
10
- "kind": { "const": "transition-flow" },
11
- "name": { "type": "string", "minLength": 1 },
12
- "version": { "type": "string" },
13
- "description": { "type": "string" },
14
- "initialNode": { "type": "string", "minLength": 1 },
15
- "terminalNodes": { "type": "array", "items": { "type": "string", "minLength": 1 } },
16
- "iterationBound": { "type": "integer", "exclusiveMinimum": 0 },
9
+ "$schema": {
10
+ "type": "string"
11
+ },
12
+ "kind": {
13
+ "const": "transition-flow"
14
+ },
15
+ "name": {
16
+ "type": "string",
17
+ "minLength": 1
18
+ },
19
+ "version": {
20
+ "type": "string"
21
+ },
22
+ "description": {
23
+ "type": "string"
24
+ },
25
+ "initialNode": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "terminalNodes": {
30
+ "type": "array",
31
+ "items": {
32
+ "type": "string",
33
+ "minLength": 1
34
+ }
35
+ },
36
+ "iterationBound": {
37
+ "type": "integer",
38
+ "exclusiveMinimum": 0
39
+ },
17
40
  "vars": {
18
41
  "type": "object",
19
- "propertyNames": { "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" },
20
- "additionalProperties": { "type": "string" }
42
+ "propertyNames": {
43
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
44
+ },
45
+ "additionalProperties": {
46
+ "type": "string"
47
+ }
21
48
  },
22
49
  "env": {
23
50
  "type": "object",
24
51
  "additionalProperties": false,
25
52
  "properties": {
26
- "allow": { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" } }
53
+ "allow": {
54
+ "type": "array",
55
+ "items": {
56
+ "type": "string",
57
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
58
+ }
59
+ }
60
+ }
61
+ },
62
+ "extensions": {
63
+ "type": "object",
64
+ "additionalProperties": false,
65
+ "properties": {
66
+ "actions": {
67
+ "type": "array",
68
+ "items": {
69
+ "$ref": "#/$defs/relativeExtensionPath"
70
+ }
71
+ },
72
+ "guards": {
73
+ "type": "array",
74
+ "items": {
75
+ "$ref": "#/$defs/relativeExtensionPath"
76
+ }
77
+ }
27
78
  }
28
79
  },
29
80
  "nodes": {
@@ -33,10 +84,19 @@
33
84
  "additionalProperties": false,
34
85
  "required": ["id"],
35
86
  "properties": {
36
- "id": { "type": "string", "minLength": 1 },
37
- "description": { "type": "string" },
38
- "type": { "enum": ["action", "gate", "parallel", "decision"] },
39
- "action": { "$ref": "#/$defs/action" }
87
+ "id": {
88
+ "type": "string",
89
+ "minLength": 1
90
+ },
91
+ "description": {
92
+ "type": "string"
93
+ },
94
+ "type": {
95
+ "enum": ["action", "gate", "parallel", "decision"]
96
+ },
97
+ "action": {
98
+ "$ref": "#/$defs/action"
99
+ }
40
100
  }
41
101
  }
42
102
  },
@@ -47,10 +107,20 @@
47
107
  "additionalProperties": false,
48
108
  "required": ["from", "to"],
49
109
  "properties": {
50
- "from": { "type": "string", "minLength": 1 },
51
- "to": { "type": "string", "minLength": 1 },
52
- "description": { "type": "string" },
53
- "condition": { "$ref": "#/$defs/guard" }
110
+ "from": {
111
+ "type": "string",
112
+ "minLength": 1
113
+ },
114
+ "to": {
115
+ "type": "string",
116
+ "minLength": 1
117
+ },
118
+ "description": {
119
+ "type": "string"
120
+ },
121
+ "condition": {
122
+ "$ref": "#/$defs/guard"
123
+ }
54
124
  }
55
125
  }
56
126
  }
@@ -61,8 +131,14 @@
61
131
  "additionalProperties": false,
62
132
  "required": ["kind"],
63
133
  "properties": {
64
- "kind": { "type": "string", "minLength": 1 },
65
- "options": { "type": "object", "additionalProperties": true }
134
+ "kind": {
135
+ "type": "string",
136
+ "minLength": 1
137
+ },
138
+ "options": {
139
+ "type": "object",
140
+ "additionalProperties": true
141
+ }
66
142
  }
67
143
  },
68
144
  "guard": {
@@ -70,8 +146,32 @@
70
146
  "additionalProperties": false,
71
147
  "required": ["kind"],
72
148
  "properties": {
73
- "kind": { "type": "string", "minLength": 1 },
74
- "options": { "type": "object", "additionalProperties": true }
149
+ "kind": {
150
+ "type": "string",
151
+ "minLength": 1
152
+ },
153
+ "options": {
154
+ "type": "object",
155
+ "additionalProperties": true
156
+ }
157
+ }
158
+ },
159
+ "relativeExtensionPath": {
160
+ "type": "string",
161
+ "minLength": 1,
162
+ "description": "Relative module path; absolute paths and '..' traversal are forbidden.",
163
+ "not": {
164
+ "anyOf": [
165
+ {
166
+ "pattern": "^[/\\\\]"
167
+ },
168
+ {
169
+ "pattern": "^[A-Za-z]:[/\\\\]"
170
+ },
171
+ {
172
+ "pattern": "(^|[/\\\\])\\.\\.([/\\\\]|$)"
173
+ }
174
+ ]
75
175
  }
76
176
  }
77
177
  }