@sakanano-moe/agenthelm 6.7.0 → 6.11.0-rc.1

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 (86) hide show
  1. package/package.json +1 -1
  2. package/runtime/index.json +6 -6
  3. package/runtime/plugins/agent-pack/.codex-plugin/plugin.json +1 -1
  4. package/runtime/plugins/agent-pack/hooks/hooks.json +32 -0
  5. package/runtime/plugins/agent-pack/plugin.json +1 -1
  6. package/runtime/plugins/agent-pack/references/local-only.md +126 -0
  7. package/runtime/plugins/agent-pack/references/nudge.en.md +58 -0
  8. package/runtime/plugins/agent-pack/references/nudge.md +58 -0
  9. package/runtime/plugins/agent-pack/runtime/agent_pack_nudge.py +573 -0
  10. package/runtime/plugins/agent-pack/runtime/agenthelm.py +419 -107
  11. package/runtime/plugins/agent-pack/runtime/agenthelm_runtime.py +77 -53
  12. package/runtime/plugins/agent-pack/runtime/i18n_agent_pack.py +78 -0
  13. package/runtime/plugins/agent-pack/runtime/local_only.py +1130 -0
  14. package/runtime/plugins/agent-pack/runtime/locale/en.json +385 -0
  15. package/runtime/plugins/agent-pack/runtime/mcp_server.py +25 -0
  16. package/runtime/plugins/agent-pack/runtime/nudge_text.py +107 -0
  17. package/runtime/plugins/agent-pack/skills/agent-pack/SKILL.md +9 -1
  18. package/runtime/plugins/agents-init/.codex-plugin/plugin.json +1 -1
  19. package/runtime/plugins/agents-init/content.json +17 -2
  20. package/runtime/plugins/agents-init/plugin.json +1 -1
  21. package/runtime/plugins/agents-init/skills/agents-init/AGENT.template.md +47 -0
  22. package/runtime/plugins/agents-init/skills/agents-init/SKILL.md +39 -1
  23. package/runtime/plugins/agents-init/skills/agents-init/project.schema.json +404 -70
  24. package/runtime/plugins/agents-init/skills/agents-init/scripts/adopt.py +596 -0
  25. package/runtime/plugins/agents-init/skills/agents-init/scripts/i18n_init.py +78 -0
  26. package/runtime/plugins/agents-init/skills/agents-init/scripts/init_project.py +245 -72
  27. package/runtime/plugins/agents-init/skills/agents-init/scripts/locale/en.json +210 -0
  28. package/runtime/plugins/agents-init/skills/agents-init/scripts/regions.py +99 -0
  29. package/runtime/plugins/agents-init/skills/agents-init/scripts/scaffold.py +1081 -0
  30. package/runtime/plugins/agents-init/skills/agents-init/scripts/test_adopt.py +551 -0
  31. package/runtime/plugins/agents-init/skills/agents-init/scripts/test_init_project.py +46 -2
  32. package/runtime/plugins/agents-init/skills/agents-init/scripts/test_scaffold.py +555 -0
  33. package/runtime/plugins/agents-init/skills/agents-init/skeleton.json +66 -0
  34. package/runtime/plugins/agents-init/skills/agents-init/skill.json +1 -1
  35. package/runtime/plugins/opinion-manager/.codex-plugin/plugin.json +1 -1
  36. package/runtime/plugins/opinion-manager/plugin.json +1 -1
  37. package/runtime/plugins/opinion-manager/references/inbox.en.md +48 -0
  38. package/runtime/plugins/opinion-manager/references/inbox.md +48 -0
  39. package/runtime/plugins/opinion-manager/runtime/context.py +19 -18
  40. package/runtime/plugins/opinion-manager/runtime/i18n_opinion.py +78 -0
  41. package/runtime/plugins/opinion-manager/runtime/inbox.py +397 -0
  42. package/runtime/plugins/opinion-manager/runtime/inbox_text.py +101 -0
  43. package/runtime/plugins/opinion-manager/runtime/lifecycle.py +45 -44
  44. package/runtime/plugins/opinion-manager/runtime/locale/en.json +184 -0
  45. package/runtime/plugins/opinion-manager/runtime/opinion_manager.py +55 -50
  46. package/runtime/plugins/opinion-manager/runtime/versioned.py +84 -83
  47. package/runtime/plugins/opinion-manager/skills/opinion-manager/SKILL.md +15 -2
  48. package/runtime/plugins/project-orchestrator/.codex-plugin/plugin.json +1 -1
  49. package/runtime/plugins/project-orchestrator/content.json +30 -3
  50. package/runtime/plugins/project-orchestrator/plugin.json +1 -1
  51. package/runtime/plugins/project-orchestrator/references/case-workspaces.md +9 -1
  52. package/runtime/plugins/project-orchestrator/references/case.schema.json +1 -0
  53. package/runtime/plugins/project-orchestrator/references/sop-interview.md +83 -0
  54. package/runtime/plugins/project-orchestrator/references/sop.md +156 -0
  55. package/runtime/plugins/project-orchestrator/runtime/assets.py +52 -57
  56. package/runtime/plugins/project-orchestrator/runtime/case.py +139 -80
  57. package/runtime/plugins/project-orchestrator/runtime/case_structure.py +71 -0
  58. package/runtime/plugins/project-orchestrator/runtime/case_workspace.py +47 -46
  59. package/runtime/plugins/project-orchestrator/runtime/i18n_orchestrator.py +78 -0
  60. package/runtime/plugins/project-orchestrator/runtime/locale/en.json +1409 -0
  61. package/runtime/plugins/project-orchestrator/runtime/memory.py +44 -43
  62. package/runtime/plugins/project-orchestrator/runtime/private_paths.py +119 -0
  63. package/runtime/plugins/project-orchestrator/runtime/project_base.py +37 -19
  64. package/runtime/plugins/project-orchestrator/runtime/project_cli.py +267 -174
  65. package/runtime/plugins/project-orchestrator/runtime/project_demo.py +130 -48
  66. package/runtime/plugins/project-orchestrator/runtime/project_maintain.py +524 -134
  67. package/runtime/plugins/project-orchestrator/runtime/project_menu.py +159 -85
  68. package/runtime/plugins/project-orchestrator/runtime/project_real.py +191 -106
  69. package/runtime/plugins/project-orchestrator/runtime/project_write.py +58 -55
  70. package/runtime/plugins/project-orchestrator/runtime/sop.py +1670 -0
  71. package/runtime/plugins/project-orchestrator/runtime/sop_structure.py +226 -0
  72. package/runtime/plugins/project-orchestrator/runtime/wf.py +74 -70
  73. package/runtime/plugins/project-orchestrator/skills/project-orchestrator/SKILL.md +22 -0
  74. package/runtime/plugins/project-orchestrator/sop-templates/blank/SOP.en.md +57 -0
  75. package/runtime/plugins/project-orchestrator/sop-templates/blank/SOP.md +57 -0
  76. package/runtime/plugins/project-orchestrator/sop-templates/knowledge-digest/SOP.en.md +77 -0
  77. package/runtime/plugins/project-orchestrator/sop-templates/knowledge-digest/SOP.md +77 -0
  78. package/runtime/plugins/project-orchestrator/sop-templates/knowledge-digest/templates/digest.en.md +11 -0
  79. package/runtime/plugins/project-orchestrator/sop-templates/knowledge-digest/templates/digest.md +11 -0
  80. package/runtime/plugins/project-orchestrator/sop-templates/video-to-transcript/SOP.en.md +87 -0
  81. package/runtime/plugins/project-orchestrator/sop-templates/video-to-transcript/SOP.md +87 -0
  82. package/runtime/plugins/project-orchestrator/sop-templates/weekly-review/SOP.en.md +75 -0
  83. package/runtime/plugins/project-orchestrator/sop-templates/weekly-review/SOP.md +75 -0
  84. package/runtime/plugins/project-orchestrator/sop-templates/weekly-review/templates/review.en.md +11 -0
  85. package/runtime/plugins/project-orchestrator/sop-templates/weekly-review/templates/review.md +12 -0
  86. package/runtime/plugins/project-orchestrator/templates/CASE.en.md +39 -0
@@ -5,73 +5,270 @@
5
5
  "description": "由 project-orchestrator、agent-pack 与 opinion-manager 消费的可移植项目发现契约,位于 .agents/moe.sakanano.agent-pack/project.json。",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
- "required": ["schema_version", "name", "profile", "runtime", "opinion", "capabilities", "work", "privacy"],
8
+ "required": [
9
+ "schema_version",
10
+ "name",
11
+ "profile",
12
+ "runtime",
13
+ "opinion",
14
+ "capabilities",
15
+ "work",
16
+ "privacy"
17
+ ],
9
18
  "properties": {
10
- "$schema": {"type": "string", "format": "uri-reference"},
11
- "schema_version": {"const": "1.0"},
12
- "initializer_version": {"type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"},
13
- "name": {"type": "string", "minLength": 1},
19
+ "$schema": {
20
+ "type": "string",
21
+ "format": "uri-reference"
22
+ },
23
+ "schema_version": {
24
+ "const": "1.0"
25
+ },
26
+ "initializer_version": {
27
+ "type": "string",
28
+ "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
29
+ },
30
+ "name": {
31
+ "type": "string",
32
+ "minLength": 1
33
+ },
34
+ "language": {
35
+ "enum": [
36
+ "zh",
37
+ "en"
38
+ ],
39
+ "description": "项目文件语言:新建 Case 的小节名与默认文字、README 追加的使用说明用哪种语言写;缺省视为 zh(已有项目保持原样)。与命令行界面的语言(AGENTHELM_LANG)无关,随项目同步。"
40
+ },
14
41
  "profile": {
15
42
  "type": "object",
16
43
  "additionalProperties": true,
17
- "required": ["project_type", "vcs", "stack", "runtime", "agent_cli"],
44
+ "required": [
45
+ "project_type",
46
+ "vcs",
47
+ "stack",
48
+ "runtime",
49
+ "agent_cli"
50
+ ],
18
51
  "properties": {
19
- "project_type": {"$ref": "#/$defs/stringArray"},
20
- "vcs": {"type": "string", "minLength": 1},
21
- "stack": {"$ref": "#/$defs/stringArray"},
22
- "runtime": {"type": "string", "minLength": 1},
23
- "agent_cli": {"$ref": "#/$defs/stringArray"}
52
+ "project_type": {
53
+ "$ref": "#/$defs/stringArray"
54
+ },
55
+ "vcs": {
56
+ "type": "string",
57
+ "minLength": 1
58
+ },
59
+ "stack": {
60
+ "$ref": "#/$defs/stringArray"
61
+ },
62
+ "runtime": {
63
+ "type": "string",
64
+ "minLength": 1
65
+ },
66
+ "agent_cli": {
67
+ "$ref": "#/$defs/stringArray"
68
+ }
24
69
  }
25
70
  },
26
71
  "runtime": {
27
72
  "type": "object",
28
73
  "additionalProperties": true,
29
- "required": ["skill", "plugin", "capability_manager", "required", "commit_policy", "push_policy"],
74
+ "required": [
75
+ "skill",
76
+ "plugin",
77
+ "capability_manager",
78
+ "required",
79
+ "commit_policy",
80
+ "push_policy"
81
+ ],
30
82
  "properties": {
31
- "skill": {"const": "project-orchestrator"},
32
- "plugin": {"const": "project-orchestrator"},
33
- "capability_manager": {"const": "agent-pack"},
34
- "distribution": {"enum": ["marketplace", "bundled", "external"]},
35
- "required": {"type": "boolean"},
36
- "commit_policy": {"enum": ["explicit", "project-policy"]},
37
- "push_policy": {"enum": ["explicit", "project-policy"]}
83
+ "skill": {
84
+ "const": "project-orchestrator"
85
+ },
86
+ "plugin": {
87
+ "const": "project-orchestrator"
88
+ },
89
+ "capability_manager": {
90
+ "const": "agent-pack"
91
+ },
92
+ "distribution": {
93
+ "enum": [
94
+ "marketplace",
95
+ "bundled",
96
+ "external"
97
+ ]
98
+ },
99
+ "required": {
100
+ "type": "boolean"
101
+ },
102
+ "commit_policy": {
103
+ "enum": [
104
+ "explicit",
105
+ "project-policy"
106
+ ]
107
+ },
108
+ "push_policy": {
109
+ "enum": [
110
+ "explicit",
111
+ "project-policy"
112
+ ]
113
+ },
114
+ "source_repository": {
115
+ "type": "string",
116
+ "x-agenthelm-scope": "audit",
117
+ "description": "审计记录:采用的来源仓库。运行时代码不读取,check 不比较,也不进脚手架指纹。"
118
+ },
119
+ "source_ref": {
120
+ "type": "string",
121
+ "x-agenthelm-scope": "audit",
122
+ "description": "审计记录:采用的发布 tag。同上,仅作记录。"
123
+ },
124
+ "source_commit": {
125
+ "type": "string",
126
+ "x-agenthelm-scope": "audit",
127
+ "description": "审计记录:采用的提交。同上,仅作记录。"
128
+ },
129
+ "plugin_version": {
130
+ "type": "string",
131
+ "x-agenthelm-scope": "audit",
132
+ "description": "审计记录:采用时的 project-orchestrator 版本。同上,仅作记录。"
133
+ },
134
+ "capability_manager_version": {
135
+ "type": "string",
136
+ "x-agenthelm-scope": "audit",
137
+ "description": "审计记录:采用时的 agent-pack 版本。同上,仅作记录。"
138
+ }
38
139
  }
39
140
  },
40
141
  "opinion": {
41
142
  "type": "object",
42
143
  "additionalProperties": true,
43
- "required": ["provider", "project_overlay", "strict_mode"],
144
+ "required": [
145
+ "provider",
146
+ "project_overlay",
147
+ "strict_mode"
148
+ ],
44
149
  "properties": {
45
- "provider": {"type": ["string", "null"]},
46
- "project_overlay": {"type": ["string", "null"]},
47
- "strict_mode": {"enum": ["smart", "strict", "disabled"]},
48
- "loading_mode": {"enum": ["tiered", "full"]}
150
+ "provider": {
151
+ "type": [
152
+ "string",
153
+ "null"
154
+ ]
155
+ },
156
+ "project_overlay": {
157
+ "type": [
158
+ "string",
159
+ "null"
160
+ ]
161
+ },
162
+ "strict_mode": {
163
+ "enum": [
164
+ "smart",
165
+ "strict",
166
+ "disabled"
167
+ ]
168
+ },
169
+ "loading_mode": {
170
+ "enum": [
171
+ "tiered",
172
+ "full"
173
+ ]
174
+ },
175
+ "tool_version": {
176
+ "type": "string",
177
+ "x-agenthelm-scope": "audit",
178
+ "description": "审计记录:生成该 Opinion 时的工具版本;不参与比较。"
179
+ }
49
180
  }
50
181
  },
51
182
  "memory": {
52
183
  "type": "object",
53
184
  "additionalProperties": true,
54
- "required": ["provider"],
185
+ "required": [
186
+ "provider"
187
+ ],
188
+ "properties": {
189
+ "provider": {
190
+ "enum": [
191
+ "project-orchestrator",
192
+ "project"
193
+ ]
194
+ },
195
+ "root": {
196
+ "anyOf": [
197
+ {
198
+ "$ref": "#/$defs/relativePath"
199
+ },
200
+ {
201
+ "type": "null"
202
+ }
203
+ ]
204
+ },
205
+ "index_command": {
206
+ "type": [
207
+ "string",
208
+ "null"
209
+ ]
210
+ },
211
+ "check_command": {
212
+ "type": [
213
+ "string",
214
+ "null"
215
+ ]
216
+ },
217
+ "policy": {
218
+ "anyOf": [
219
+ {
220
+ "$ref": "#/$defs/relativePath"
221
+ },
222
+ {
223
+ "type": "null"
224
+ }
225
+ ]
226
+ }
227
+ }
228
+ },
229
+ "sop": {
230
+ "type": "object",
231
+ "additionalProperties": true,
55
232
  "properties": {
56
- "provider": {"enum": ["project-orchestrator", "project"]},
57
- "root": {"anyOf": [{"$ref": "#/$defs/relativePath"}, {"type": "null"}]},
58
- "index_command": {"type": ["string", "null"]},
59
- "check_command": {"type": ["string", "null"]},
60
- "policy": {"anyOf": [{"$ref": "#/$defs/relativePath"}, {"type": "null"}]}
233
+ "root": {"$ref": "#/$defs/relativePath"}
61
234
  }
62
235
  },
63
236
  "capabilities": {
64
237
  "type": "object",
65
238
  "additionalProperties": false,
66
- "required": ["plugin_roots", "plugin_dirs", "skill_roots", "mcp_sources", "destination_skill_root", "destination_mcp"],
239
+ "required": [
240
+ "plugin_roots",
241
+ "plugin_dirs",
242
+ "skill_roots",
243
+ "mcp_sources",
244
+ "destination_skill_root",
245
+ "destination_mcp"
246
+ ],
67
247
  "properties": {
68
- "plugin_roots": {"$ref": "#/$defs/pathArray"},
69
- "plugin_dirs": {"$ref": "#/$defs/pathArray"},
70
- "skill_roots": {"$ref": "#/$defs/pathArray"},
71
- "mcp_sources": {"$ref": "#/$defs/pathArray"},
72
- "native_mcp_sources": {"$ref": "#/$defs/pathArray"},
248
+ "plugin_roots": {
249
+ "$ref": "#/$defs/pathArray"
250
+ },
251
+ "plugin_dirs": {
252
+ "$ref": "#/$defs/pathArray"
253
+ },
254
+ "skill_roots": {
255
+ "$ref": "#/$defs/pathArray"
256
+ },
257
+ "mcp_sources": {
258
+ "$ref": "#/$defs/pathArray"
259
+ },
260
+ "native_mcp_sources": {
261
+ "$ref": "#/$defs/pathArray"
262
+ },
73
263
  "credential_env_file": {
74
- "anyOf": [{"$ref": "#/$defs/relativePath"}, {"type": "null"}]
264
+ "anyOf": [
265
+ {
266
+ "$ref": "#/$defs/relativePath"
267
+ },
268
+ {
269
+ "type": "null"
270
+ }
271
+ ]
75
272
  },
76
273
  "mcp_client_policy": {
77
274
  "type": "object",
@@ -79,63 +276,186 @@
79
276
  "type": "object",
80
277
  "additionalProperties": false,
81
278
  "properties": {
82
- "include": {"$ref": "#/$defs/stringArray"},
83
- "exclude": {"$ref": "#/$defs/stringArray"}
279
+ "include": {
280
+ "$ref": "#/$defs/stringArray"
281
+ },
282
+ "exclude": {
283
+ "$ref": "#/$defs/stringArray"
284
+ }
84
285
  },
85
- "not": {"required": ["include", "exclude"]}
286
+ "not": {
287
+ "required": [
288
+ "include",
289
+ "exclude"
290
+ ]
291
+ }
86
292
  }
87
293
  },
88
- "destination_skill_root": {"$ref": "#/$defs/relativePath"},
89
- "destination_mcp": {"$ref": "#/$defs/relativePath"}
294
+ "destination_skill_root": {
295
+ "$ref": "#/$defs/relativePath"
296
+ },
297
+ "destination_mcp": {
298
+ "$ref": "#/$defs/relativePath"
299
+ }
90
300
  }
91
301
  },
92
302
  "work": {
93
- "type": "object", "additionalProperties": true,
303
+ "type": "object",
304
+ "additionalProperties": true,
94
305
  "properties": {
95
- "mode": {"enum": ["case-workspace", "legacy"]},
96
- "task": {"type": ["object", "null"]},
97
- "legacy_task": {"type": ["object", "null"]},
306
+ "mode": {
307
+ "enum": [
308
+ "case-workspace",
309
+ "legacy"
310
+ ]
311
+ },
312
+ "task": {
313
+ "type": [
314
+ "object",
315
+ "null"
316
+ ]
317
+ },
318
+ "legacy_task": {
319
+ "type": [
320
+ "object",
321
+ "null"
322
+ ]
323
+ },
98
324
  "case": {
99
- "type": ["object", "null"], "additionalProperties": true,
325
+ "type": [
326
+ "object",
327
+ "null"
328
+ ],
329
+ "additionalProperties": true,
100
330
  "properties": {
101
- "root": {"$ref": "#/$defs/relativePath"},
102
- "artifact_mode": {"enum": ["case-local", "external-references"]}
331
+ "root": {
332
+ "$ref": "#/$defs/relativePath"
333
+ },
334
+ "artifact_mode": {
335
+ "enum": [
336
+ "case-local",
337
+ "external-references"
338
+ ]
339
+ },
340
+ "command": {
341
+ "type": [
342
+ "array",
343
+ "string"
344
+ ],
345
+ "description": "项目自己的 Case 工具命令;声明后项目入口不绕过它写 Case。"
346
+ },
347
+ "directory_naming": {
348
+ "type": "object",
349
+ "additionalProperties": true,
350
+ "description": "Case 目录命名规则,check 据此检查目录名;缺省按 CASE-日期-序号-主题。fix case-naming 只给改名计划,不移动目录。",
351
+ "properties": {
352
+ "style": {
353
+ "enum": [
354
+ "case-id",
355
+ "date-topic",
356
+ "custom"
357
+ ]
358
+ },
359
+ "pattern": {
360
+ "type": "string",
361
+ "description": "匹配整个目录名的正则;style 为 custom 时必填。"
362
+ }
363
+ }
364
+ }
103
365
  }
104
366
  },
105
367
  "assets": {
106
- "type": ["object", "null"], "additionalProperties": true,
368
+ "type": [
369
+ "object",
370
+ "null"
371
+ ],
372
+ "additionalProperties": true,
107
373
  "properties": {
108
- "roots": {"$ref": "#/$defs/pathArray"}
374
+ "roots": {
375
+ "$ref": "#/$defs/pathArray"
376
+ }
109
377
  }
110
378
  }
111
379
  }
112
380
  },
113
381
  "entry": {
114
- "type": ["object", "null"],
382
+ "type": [
383
+ "object",
384
+ "null"
385
+ ],
115
386
  "additionalProperties": true,
116
387
  "description": "人用入口:不经过 AI Agent 打开项目菜单。缺省时仍可用 agenthelm project。",
117
388
  "properties": {
118
- "api": {"type": "integer", "minimum": 1, "description": "项目入口的接口版本;运行时不支持时启动器提示更新"},
119
- "launcher": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$", "description": "根目录启动器的文件名"},
120
- "about": {"type": "string"},
121
- "guide": {"$ref": "#/$defs/relativePath"},
122
- "tools": {"$ref": "#/$defs/relativePath"},
389
+ "api": {
390
+ "type": "integer",
391
+ "minimum": 1,
392
+ "description": "项目入口的接口版本;运行时不支持时启动器提示更新"
393
+ },
394
+ "launcher": {
395
+ "type": "string",
396
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
397
+ "description": "根目录启动器的文件名"
398
+ },
399
+ "about": {
400
+ "type": "string"
401
+ },
402
+ "guide": {
403
+ "$ref": "#/$defs/relativePath"
404
+ },
405
+ "tools": {
406
+ "$ref": "#/$defs/relativePath"
407
+ },
123
408
  "where": {
124
409
  "type": "array",
125
- "items": {"type": "object", "required": ["label", "path"],
126
- "properties": {"label": {"type": "string"}, "path": {"type": "string"}}}
410
+ "items": {
411
+ "type": "object",
412
+ "required": [
413
+ "label",
414
+ "path"
415
+ ],
416
+ "properties": {
417
+ "label": {
418
+ "type": "string"
419
+ },
420
+ "path": {
421
+ "type": "string"
422
+ }
423
+ }
424
+ }
425
+ },
426
+ "start": {
427
+ "$ref": "#/$defs/stringArray"
127
428
  },
128
- "start": {"$ref": "#/$defs/stringArray"},
129
429
  "items": {
130
430
  "type": "object",
131
431
  "additionalProperties": true,
132
- "required": ["command"],
432
+ "required": [
433
+ "command"
434
+ ],
133
435
  "properties": {
134
- "command": {"type": "array", "minItems": 1, "items": {"type": "string", "minLength": 1}},
135
- "write": {"type": "boolean"},
436
+ "command": {
437
+ "type": "array",
438
+ "minItems": 1,
439
+ "items": {
440
+ "type": "string",
441
+ "minLength": 1
442
+ }
443
+ },
444
+ "write": {
445
+ "type": "boolean"
446
+ },
136
447
  "status_map": {
137
448
  "type": "object",
138
- "additionalProperties": {"enum": ["active", "waiting", "captured", "suspended", "done", "abandoned"]}
449
+ "additionalProperties": {
450
+ "enum": [
451
+ "active",
452
+ "waiting",
453
+ "captured",
454
+ "suspended",
455
+ "done",
456
+ "abandoned"
457
+ ]
458
+ }
139
459
  }
140
460
  }
141
461
  }
@@ -144,27 +464,41 @@
144
464
  "privacy": {
145
465
  "type": "object",
146
466
  "additionalProperties": true,
147
- "required": ["forbidden_default_reads", "generated_outputs"],
467
+ "required": [
468
+ "forbidden_default_reads",
469
+ "generated_outputs"
470
+ ],
148
471
  "properties": {
149
- "forbidden_default_reads": {"$ref": "#/$defs/pathArray"},
150
- "generated_outputs": {"$ref": "#/$defs/pathArray"}
472
+ "forbidden_default_reads": {
473
+ "$ref": "#/$defs/pathArray"
474
+ },
475
+ "generated_outputs": {
476
+ "$ref": "#/$defs/pathArray"
477
+ }
151
478
  }
152
479
  }
153
480
  },
154
481
  "$defs": {
155
482
  "stringArray": {
156
483
  "type": "array",
157
- "items": {"type": "string", "minLength": 1},
484
+ "items": {
485
+ "type": "string",
486
+ "minLength": 1
487
+ },
158
488
  "uniqueItems": true
159
489
  },
160
490
  "relativePath": {
161
491
  "type": "string",
162
492
  "minLength": 1,
163
- "not": {"pattern": "^(?:/|~|[A-Za-z]:[\\\\/])"}
493
+ "not": {
494
+ "pattern": "^(?:/|~|[A-Za-z]:[\\\\/])"
495
+ }
164
496
  },
165
497
  "pathArray": {
166
498
  "type": "array",
167
- "items": {"$ref": "#/$defs/relativePath"},
499
+ "items": {
500
+ "$ref": "#/$defs/relativePath"
501
+ },
168
502
  "uniqueItems": true
169
503
  }
170
504
  }