forge-openclaw-plugin 0.2.27 → 0.2.28

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 (31) hide show
  1. package/README.md +1 -0
  2. package/dist/assets/{board-C6jCchjI.js → board-DPFvZf-D.js} +2 -2
  3. package/dist/assets/{board-C6jCchjI.js.map → board-DPFvZf-D.js.map} +1 -1
  4. package/dist/assets/index-Auw3JrdE.css +1 -0
  5. package/dist/assets/index-D1H7myQH.js +85 -0
  6. package/dist/assets/index-D1H7myQH.js.map +1 -0
  7. package/dist/assets/{motion-DFHrH2rd.js → motion-Bvwc85ch.js} +2 -2
  8. package/dist/assets/{motion-DFHrH2rd.js.map → motion-Bvwc85ch.js.map} +1 -1
  9. package/dist/assets/{table-ZL7Di_u3.js → table-FJQTJvUR.js} +2 -2
  10. package/dist/assets/{table-ZL7Di_u3.js.map → table-FJQTJvUR.js.map} +1 -1
  11. package/dist/assets/{ui-CKNPpz7q.js → ui-GXFcgvSw.js} +2 -2
  12. package/dist/assets/{ui-CKNPpz7q.js.map → ui-GXFcgvSw.js.map} +1 -1
  13. package/dist/assets/{vendor-DoNZuFhn.js → vendor-Cwf49UMz.js} +204 -204
  14. package/dist/assets/vendor-Cwf49UMz.js.map +1 -0
  15. package/dist/index.html +7 -7
  16. package/dist/server/server/src/app.js +244 -2
  17. package/dist/server/server/src/openapi.js +799 -2
  18. package/dist/server/server/src/repositories/calendar.js +151 -0
  19. package/dist/server/server/src/services/life-force-model.js +20 -0
  20. package/dist/server/server/src/services/life-force.js +1333 -97
  21. package/dist/server/server/src/types.js +21 -1
  22. package/dist/server/src/lib/snapshot-normalizer.js +2 -0
  23. package/openclaw.plugin.json +1 -1
  24. package/package.json +1 -1
  25. package/skills/forge-openclaw/SKILL.md +17 -0
  26. package/skills/forge-openclaw/entity_conversation_playbooks.md +238 -0
  27. package/skills/forge-openclaw/psyche_entity_playbooks.md +57 -0
  28. package/dist/assets/index-DVvS8iiU.css +0 -1
  29. package/dist/assets/index-zYB-9Dfo.js +0 -85
  30. package/dist/assets/index-zYB-9Dfo.js.map +0 -1
  31. package/dist/assets/vendor-DoNZuFhn.js.map +0 -1
@@ -37,6 +37,14 @@ const API_TAGS = [
37
37
  name: "Health",
38
38
  description: "Runtime health, sleep, sports, workout, and mobile sync surfaces."
39
39
  },
40
+ {
41
+ name: "Movement",
42
+ description: "Movement overviews, timeline history, known places, stays, trips, selection aggregates, and user-defined overlay routes."
43
+ },
44
+ {
45
+ name: "Life Force",
46
+ description: "Energy-budget, fatigue, and action-point modeling routes."
47
+ },
40
48
  {
41
49
  name: "Auth",
42
50
  description: "Operator session bootstrapping for trusted local usage."
@@ -125,6 +133,10 @@ const API_TAGS = [
125
133
  name: "Insights",
126
134
  description: "Stored insights and structured feedback on them."
127
135
  },
136
+ {
137
+ name: "Workbench",
138
+ description: "Graph-flow catalog, execution, published outputs, and node-result routes."
139
+ },
128
140
  {
129
141
  name: "Metrics",
130
142
  description: "XP, reward-ledger, and runtime metric surfaces."
@@ -145,7 +157,11 @@ const API_TAGS = [
145
157
  const API_TAG_GROUPS = [
146
158
  {
147
159
  name: "Runtime",
148
- tags: ["Meta", "Health", "Auth", "Platform", "Operator", "Diagnostics"]
160
+ tags: ["Meta", "Auth", "Platform", "Operator", "Diagnostics"]
161
+ },
162
+ {
163
+ name: "Embodied Context",
164
+ tags: ["Health", "Movement", "Life Force"]
149
165
  },
150
166
  {
151
167
  name: "Core Work",
@@ -162,7 +178,8 @@ const API_TAG_GROUPS = [
162
178
  "Activity",
163
179
  "Metrics",
164
180
  "Reviews",
165
- "Insights"
181
+ "Insights",
182
+ "Workbench"
166
183
  ]
167
184
  },
168
185
  {
@@ -188,6 +205,18 @@ function resolveTagsForPath(path) {
188
205
  path.startsWith("/api/v1/mobile")) {
189
206
  return ["Health"];
190
207
  }
208
+ if (path.startsWith("/api/v1/movement")) {
209
+ return ["Movement"];
210
+ }
211
+ if (path.startsWith("/api/v1/life-force")) {
212
+ return ["Life Force"];
213
+ }
214
+ if (path.startsWith("/api/v1/workbench")) {
215
+ return ["Workbench"];
216
+ }
217
+ if (path.startsWith("/api/v1/screen-time")) {
218
+ return ["Health"];
219
+ }
191
220
  if (path === "/api/v1/context" || path.startsWith("/api/v1/domains")) {
192
221
  return ["Platform"];
193
222
  }
@@ -2706,6 +2735,10 @@ export function buildOpenApiDocument() {
2706
2735
  "calendar",
2707
2736
  "workBlock",
2708
2737
  "taskTimebox",
2738
+ "workAdjustment",
2739
+ "movement",
2740
+ "lifeForce",
2741
+ "workbench",
2709
2742
  "psyche"
2710
2743
  ],
2711
2744
  properties: {
@@ -2724,6 +2757,10 @@ export function buildOpenApiDocument() {
2724
2757
  calendar: { type: "string" },
2725
2758
  workBlock: { type: "string" },
2726
2759
  taskTimebox: { type: "string" },
2760
+ workAdjustment: { type: "string" },
2761
+ movement: { type: "string" },
2762
+ lifeForce: { type: "string" },
2763
+ workbench: { type: "string" },
2727
2764
  psyche: { type: "string" }
2728
2765
  }
2729
2766
  },
@@ -2800,6 +2837,7 @@ export function buildOpenApiDocument() {
2800
2837
  "batchRoutes",
2801
2838
  "specializedCrudEntities",
2802
2839
  "actionEntities",
2840
+ "specializedDomainSurfaces",
2803
2841
  "readModelOnlySurfaces"
2804
2842
  ],
2805
2843
  properties: {
@@ -2830,6 +2868,13 @@ export function buildOpenApiDocument() {
2830
2868
  additionalProperties: true
2831
2869
  }
2832
2870
  },
2871
+ specializedDomainSurfaces: {
2872
+ type: "object",
2873
+ additionalProperties: {
2874
+ type: "object",
2875
+ additionalProperties: true
2876
+ }
2877
+ },
2833
2878
  readModelOnlySurfaces: {
2834
2879
  type: "object",
2835
2880
  additionalProperties: { type: "string" }
@@ -2957,6 +3002,10 @@ export function buildOpenApiDocument() {
2957
3002
  "weeklyReview",
2958
3003
  "sleepOverview",
2959
3004
  "sportsOverview",
3005
+ "lifeForce",
3006
+ "movementTimeline",
3007
+ "movementAllTime",
3008
+ "workbenchFlows",
2960
3009
  "wikiSettings",
2961
3010
  "wikiSearch",
2962
3011
  "wikiHealth",
@@ -2973,6 +3022,10 @@ export function buildOpenApiDocument() {
2973
3022
  weeklyReview: { type: "string" },
2974
3023
  sleepOverview: { type: "string" },
2975
3024
  sportsOverview: { type: "string" },
3025
+ lifeForce: { type: "string" },
3026
+ movementTimeline: { type: "string" },
3027
+ movementAllTime: { type: "string" },
3028
+ workbenchFlows: { type: "string" },
2976
3029
  wikiSettings: { type: "string" },
2977
3030
  wikiSearch: { type: "string" },
2978
3031
  wikiHealth: { type: "string" },
@@ -4127,6 +4180,750 @@ export function buildOpenApiDocument() {
4127
4180
  }
4128
4181
  }
4129
4182
  },
4183
+ "/api/v1/life-force": {
4184
+ get: {
4185
+ summary: "Read the current life-force overview with stats, drains, curve state, warnings, and recommendations",
4186
+ responses: {
4187
+ "200": jsonResponse({
4188
+ type: "object",
4189
+ required: ["lifeForce", "templates"],
4190
+ properties: {
4191
+ lifeForce: {
4192
+ type: "object",
4193
+ additionalProperties: true
4194
+ },
4195
+ templates: arrayOf({
4196
+ type: "object",
4197
+ additionalProperties: true
4198
+ })
4199
+ }
4200
+ }, "Life-force overview"),
4201
+ default: { $ref: "#/components/responses/Error" }
4202
+ }
4203
+ }
4204
+ },
4205
+ "/api/v1/life-force/profile": {
4206
+ patch: {
4207
+ summary: "Update the user-controlled life-force profile settings",
4208
+ responses: {
4209
+ "200": jsonResponse({
4210
+ type: "object",
4211
+ required: ["lifeForce", "actor"],
4212
+ properties: {
4213
+ lifeForce: {
4214
+ type: "object",
4215
+ additionalProperties: true
4216
+ },
4217
+ actor: { type: "string" }
4218
+ }
4219
+ }, "Updated life-force profile"),
4220
+ default: { $ref: "#/components/responses/Error" }
4221
+ }
4222
+ }
4223
+ },
4224
+ "/api/v1/life-force/templates/{weekday}": {
4225
+ put: {
4226
+ summary: "Replace one weekday life-force curve template",
4227
+ responses: {
4228
+ "200": jsonResponse({
4229
+ type: "object",
4230
+ required: ["weekday", "points", "actor"],
4231
+ properties: {
4232
+ weekday: { type: "integer" },
4233
+ points: arrayOf({
4234
+ type: "object",
4235
+ additionalProperties: true
4236
+ }),
4237
+ actor: { type: "string" }
4238
+ }
4239
+ }, "Updated weekday curve template"),
4240
+ default: { $ref: "#/components/responses/Error" }
4241
+ }
4242
+ }
4243
+ },
4244
+ "/api/v1/life-force/fatigue-signals": {
4245
+ post: {
4246
+ summary: "Record a tired or recovered fatigue signal and rebuild life-force state",
4247
+ responses: {
4248
+ "200": jsonResponse({
4249
+ type: "object",
4250
+ required: ["lifeForce", "actor"],
4251
+ properties: {
4252
+ lifeForce: {
4253
+ type: "object",
4254
+ additionalProperties: true
4255
+ },
4256
+ actor: { type: "string" }
4257
+ }
4258
+ }, "Updated life-force state after fatigue signal"),
4259
+ default: { $ref: "#/components/responses/Error" }
4260
+ }
4261
+ }
4262
+ },
4263
+ "/api/v1/movement/day": {
4264
+ get: {
4265
+ summary: "Read one day of movement detail with distance, stays, trips, gaps, and summaries",
4266
+ responses: {
4267
+ "200": jsonResponse({
4268
+ type: "object",
4269
+ required: ["movement"],
4270
+ properties: {
4271
+ movement: {
4272
+ type: "object",
4273
+ additionalProperties: true
4274
+ }
4275
+ }
4276
+ }, "Movement day detail"),
4277
+ default: { $ref: "#/components/responses/Error" }
4278
+ }
4279
+ }
4280
+ },
4281
+ "/api/v1/movement/month": {
4282
+ get: {
4283
+ summary: "Read one month of movement summary",
4284
+ responses: {
4285
+ "200": jsonResponse({
4286
+ type: "object",
4287
+ required: ["movement"],
4288
+ properties: {
4289
+ movement: {
4290
+ type: "object",
4291
+ additionalProperties: true
4292
+ }
4293
+ }
4294
+ }, "Movement month summary"),
4295
+ default: { $ref: "#/components/responses/Error" }
4296
+ }
4297
+ }
4298
+ },
4299
+ "/api/v1/movement/all-time": {
4300
+ get: {
4301
+ summary: "Read all-time movement summary including place and trip distribution",
4302
+ responses: {
4303
+ "200": jsonResponse({
4304
+ type: "object",
4305
+ required: ["movement"],
4306
+ properties: {
4307
+ movement: {
4308
+ type: "object",
4309
+ additionalProperties: true
4310
+ }
4311
+ }
4312
+ }, "Movement all-time summary"),
4313
+ default: { $ref: "#/components/responses/Error" }
4314
+ }
4315
+ }
4316
+ },
4317
+ "/api/v1/movement/timeline": {
4318
+ get: {
4319
+ summary: "Read the paginated movement timeline with stays, trips, missing spans, and projected boxes",
4320
+ responses: {
4321
+ "200": jsonResponse({
4322
+ type: "object",
4323
+ required: ["movement"],
4324
+ properties: {
4325
+ movement: {
4326
+ type: "object",
4327
+ additionalProperties: true
4328
+ }
4329
+ }
4330
+ }, "Movement timeline"),
4331
+ default: { $ref: "#/components/responses/Error" }
4332
+ }
4333
+ }
4334
+ },
4335
+ "/api/v1/movement/settings": {
4336
+ get: {
4337
+ summary: "Read movement capture settings",
4338
+ responses: {
4339
+ "200": jsonResponse({
4340
+ type: "object",
4341
+ required: ["settings"],
4342
+ properties: {
4343
+ settings: {
4344
+ type: "object",
4345
+ additionalProperties: true
4346
+ }
4347
+ }
4348
+ }, "Movement settings"),
4349
+ default: { $ref: "#/components/responses/Error" }
4350
+ }
4351
+ },
4352
+ patch: {
4353
+ summary: "Update movement capture settings",
4354
+ responses: {
4355
+ "200": jsonResponse({
4356
+ type: "object",
4357
+ required: ["settings"],
4358
+ properties: {
4359
+ settings: {
4360
+ type: "object",
4361
+ additionalProperties: true
4362
+ }
4363
+ }
4364
+ }, "Updated movement settings"),
4365
+ default: { $ref: "#/components/responses/Error" }
4366
+ }
4367
+ }
4368
+ },
4369
+ "/api/v1/movement/places": {
4370
+ get: {
4371
+ summary: "List known movement places",
4372
+ responses: {
4373
+ "200": jsonResponse({
4374
+ type: "object",
4375
+ required: ["places"],
4376
+ properties: {
4377
+ places: arrayOf({
4378
+ type: "object",
4379
+ additionalProperties: true
4380
+ })
4381
+ }
4382
+ }, "Movement places"),
4383
+ default: { $ref: "#/components/responses/Error" }
4384
+ }
4385
+ },
4386
+ post: {
4387
+ summary: "Create one user-defined movement place",
4388
+ responses: {
4389
+ "201": jsonResponse({
4390
+ type: "object",
4391
+ required: ["place"],
4392
+ properties: {
4393
+ place: {
4394
+ type: "object",
4395
+ additionalProperties: true
4396
+ }
4397
+ }
4398
+ }, "Created movement place"),
4399
+ default: { $ref: "#/components/responses/Error" }
4400
+ }
4401
+ }
4402
+ },
4403
+ "/api/v1/movement/places/{id}": {
4404
+ patch: {
4405
+ summary: "Update one known movement place",
4406
+ responses: {
4407
+ "200": jsonResponse({
4408
+ type: "object",
4409
+ required: ["place"],
4410
+ properties: {
4411
+ place: {
4412
+ type: "object",
4413
+ additionalProperties: true
4414
+ }
4415
+ }
4416
+ }, "Updated movement place"),
4417
+ "404": { $ref: "#/components/responses/Error" }
4418
+ }
4419
+ }
4420
+ },
4421
+ "/api/v1/movement/user-boxes": {
4422
+ post: {
4423
+ summary: "Create a user-defined movement overlay box such as a manual stay, trip, or missing-data override",
4424
+ responses: {
4425
+ "201": jsonResponse({
4426
+ type: "object",
4427
+ required: ["box"],
4428
+ properties: {
4429
+ box: {
4430
+ type: "object",
4431
+ additionalProperties: true
4432
+ }
4433
+ }
4434
+ }, "Created movement user box"),
4435
+ default: { $ref: "#/components/responses/Error" }
4436
+ }
4437
+ }
4438
+ },
4439
+ "/api/v1/movement/user-boxes/preflight": {
4440
+ post: {
4441
+ summary: "Analyze a proposed movement overlay before saving it, especially when replacing a missing gap or overlapping another box",
4442
+ responses: {
4443
+ "200": jsonResponse({
4444
+ type: "object",
4445
+ required: ["preflight"],
4446
+ properties: {
4447
+ preflight: {
4448
+ type: "object",
4449
+ additionalProperties: true
4450
+ }
4451
+ }
4452
+ }, "Movement user-box preflight"),
4453
+ default: { $ref: "#/components/responses/Error" }
4454
+ }
4455
+ }
4456
+ },
4457
+ "/api/v1/movement/user-boxes/{id}": {
4458
+ patch: {
4459
+ summary: "Update one user-defined movement overlay box",
4460
+ responses: {
4461
+ "200": jsonResponse({
4462
+ type: "object",
4463
+ required: ["box"],
4464
+ properties: {
4465
+ box: {
4466
+ type: "object",
4467
+ additionalProperties: true
4468
+ }
4469
+ }
4470
+ }, "Updated movement user box"),
4471
+ "404": { $ref: "#/components/responses/Error" }
4472
+ }
4473
+ },
4474
+ delete: {
4475
+ summary: "Delete one user-defined movement box",
4476
+ responses: {
4477
+ "200": jsonResponse({
4478
+ type: "object",
4479
+ additionalProperties: true
4480
+ }, "Deleted movement user box"),
4481
+ "404": { $ref: "#/components/responses/Error" }
4482
+ }
4483
+ }
4484
+ },
4485
+ "/api/v1/movement/automatic-boxes/{id}/invalidate": {
4486
+ post: {
4487
+ summary: "Hide one automatic movement box and project the resulting user-defined overlay",
4488
+ responses: {
4489
+ "201": jsonResponse({
4490
+ type: "object",
4491
+ required: ["box"],
4492
+ properties: {
4493
+ box: {
4494
+ type: "object",
4495
+ additionalProperties: true
4496
+ }
4497
+ }
4498
+ }, "Invalidated automatic movement box"),
4499
+ "404": { $ref: "#/components/responses/Error" }
4500
+ }
4501
+ }
4502
+ },
4503
+ "/api/v1/movement/stays/{id}": {
4504
+ patch: {
4505
+ summary: "Update one recorded movement stay",
4506
+ responses: {
4507
+ "200": jsonResponse({
4508
+ type: "object",
4509
+ required: ["stay"],
4510
+ properties: {
4511
+ stay: {
4512
+ type: "object",
4513
+ additionalProperties: true
4514
+ }
4515
+ }
4516
+ }, "Updated movement stay"),
4517
+ "404": { $ref: "#/components/responses/Error" }
4518
+ }
4519
+ },
4520
+ delete: {
4521
+ summary: "Delete one recorded movement stay",
4522
+ responses: {
4523
+ "200": jsonResponse({
4524
+ type: "object",
4525
+ additionalProperties: true
4526
+ }, "Deleted movement stay"),
4527
+ "404": { $ref: "#/components/responses/Error" }
4528
+ }
4529
+ }
4530
+ },
4531
+ "/api/v1/movement/trips/{id}": {
4532
+ get: {
4533
+ summary: "Read one movement trip with its full detail",
4534
+ responses: {
4535
+ "200": jsonResponse({
4536
+ type: "object",
4537
+ required: ["movement"],
4538
+ properties: {
4539
+ movement: {
4540
+ type: "object",
4541
+ additionalProperties: true
4542
+ }
4543
+ }
4544
+ }, "Movement trip detail"),
4545
+ "404": { $ref: "#/components/responses/Error" }
4546
+ }
4547
+ },
4548
+ patch: {
4549
+ summary: "Update one movement trip",
4550
+ responses: {
4551
+ "200": jsonResponse({
4552
+ type: "object",
4553
+ required: ["trip"],
4554
+ properties: {
4555
+ trip: {
4556
+ type: "object",
4557
+ additionalProperties: true
4558
+ }
4559
+ }
4560
+ }, "Updated movement trip"),
4561
+ "404": { $ref: "#/components/responses/Error" }
4562
+ }
4563
+ },
4564
+ delete: {
4565
+ summary: "Delete one movement trip",
4566
+ responses: {
4567
+ "200": jsonResponse({
4568
+ type: "object",
4569
+ additionalProperties: true
4570
+ }, "Deleted movement trip"),
4571
+ "404": { $ref: "#/components/responses/Error" }
4572
+ }
4573
+ }
4574
+ },
4575
+ "/api/v1/movement/trips/{id}/points/{pointId}": {
4576
+ patch: {
4577
+ summary: "Update one movement trip datapoint",
4578
+ responses: {
4579
+ "200": jsonResponse({
4580
+ type: "object",
4581
+ additionalProperties: true
4582
+ }, "Updated movement trip point"),
4583
+ "404": { $ref: "#/components/responses/Error" }
4584
+ }
4585
+ },
4586
+ delete: {
4587
+ summary: "Delete one movement trip datapoint",
4588
+ responses: {
4589
+ "200": jsonResponse({
4590
+ type: "object",
4591
+ additionalProperties: true
4592
+ }, "Deleted movement trip point"),
4593
+ "404": { $ref: "#/components/responses/Error" }
4594
+ }
4595
+ }
4596
+ },
4597
+ "/api/v1/movement/selection": {
4598
+ post: {
4599
+ summary: "Aggregate one selected movement range or set of segments",
4600
+ responses: {
4601
+ "200": jsonResponse({
4602
+ type: "object",
4603
+ required: ["movement"],
4604
+ properties: {
4605
+ movement: {
4606
+ type: "object",
4607
+ additionalProperties: true
4608
+ }
4609
+ }
4610
+ }, "Movement selection aggregate"),
4611
+ default: { $ref: "#/components/responses/Error" }
4612
+ }
4613
+ }
4614
+ },
4615
+ "/api/v1/workbench/catalog/boxes": {
4616
+ get: {
4617
+ summary: "List registered Workbench boxes and their contracts",
4618
+ responses: {
4619
+ "200": jsonResponse({
4620
+ type: "object",
4621
+ required: ["boxes"],
4622
+ properties: {
4623
+ boxes: arrayOf({
4624
+ type: "object",
4625
+ additionalProperties: true
4626
+ })
4627
+ }
4628
+ }, "Workbench box catalog"),
4629
+ default: { $ref: "#/components/responses/Error" }
4630
+ }
4631
+ }
4632
+ },
4633
+ "/api/v1/workbench/flows": {
4634
+ get: {
4635
+ summary: "List Workbench flows and recent execution summaries",
4636
+ responses: {
4637
+ "200": jsonResponse({
4638
+ type: "object",
4639
+ required: ["flows"],
4640
+ properties: {
4641
+ flows: arrayOf({
4642
+ type: "object",
4643
+ additionalProperties: true
4644
+ })
4645
+ }
4646
+ }, "Workbench flow collection"),
4647
+ default: { $ref: "#/components/responses/Error" }
4648
+ }
4649
+ },
4650
+ post: {
4651
+ summary: "Create one Workbench flow",
4652
+ responses: {
4653
+ "201": jsonResponse({
4654
+ type: "object",
4655
+ required: ["flow"],
4656
+ properties: {
4657
+ flow: {
4658
+ type: "object",
4659
+ additionalProperties: true
4660
+ }
4661
+ }
4662
+ }, "Created Workbench flow"),
4663
+ default: { $ref: "#/components/responses/Error" }
4664
+ }
4665
+ }
4666
+ },
4667
+ "/api/v1/workbench/flows/{id}": {
4668
+ get: {
4669
+ summary: "Read one Workbench flow with runs",
4670
+ responses: {
4671
+ "200": jsonResponse({
4672
+ type: "object",
4673
+ required: ["flow", "runs"],
4674
+ properties: {
4675
+ flow: {
4676
+ type: "object",
4677
+ additionalProperties: true
4678
+ },
4679
+ runs: arrayOf({
4680
+ type: "object",
4681
+ additionalProperties: true
4682
+ })
4683
+ }
4684
+ }, "Workbench flow detail"),
4685
+ "404": { $ref: "#/components/responses/Error" }
4686
+ }
4687
+ },
4688
+ patch: {
4689
+ summary: "Update one Workbench flow",
4690
+ responses: {
4691
+ "200": jsonResponse({
4692
+ type: "object",
4693
+ required: ["flow"],
4694
+ properties: {
4695
+ flow: {
4696
+ type: "object",
4697
+ additionalProperties: true
4698
+ }
4699
+ }
4700
+ }, "Updated Workbench flow"),
4701
+ "404": { $ref: "#/components/responses/Error" }
4702
+ }
4703
+ },
4704
+ delete: {
4705
+ summary: "Delete one Workbench flow",
4706
+ responses: {
4707
+ "200": jsonResponse({
4708
+ type: "object",
4709
+ additionalProperties: true
4710
+ }, "Deleted Workbench flow"),
4711
+ "404": { $ref: "#/components/responses/Error" }
4712
+ }
4713
+ }
4714
+ },
4715
+ "/api/v1/workbench/flows/by-slug/{slug}": {
4716
+ get: {
4717
+ summary: "Read one Workbench flow by slug",
4718
+ responses: {
4719
+ "200": jsonResponse({
4720
+ type: "object",
4721
+ required: ["flow"],
4722
+ properties: {
4723
+ flow: {
4724
+ type: "object",
4725
+ additionalProperties: true
4726
+ }
4727
+ }
4728
+ }, "Workbench flow by slug"),
4729
+ "404": { $ref: "#/components/responses/Error" }
4730
+ }
4731
+ }
4732
+ },
4733
+ "/api/v1/workbench/flows/{id}/run": {
4734
+ post: {
4735
+ summary: "Run one Workbench flow by id",
4736
+ responses: {
4737
+ "200": jsonResponse({
4738
+ type: "object",
4739
+ required: ["flow", "run", "conversation"],
4740
+ properties: {
4741
+ flow: {
4742
+ type: "object",
4743
+ additionalProperties: true
4744
+ },
4745
+ run: {
4746
+ type: "object",
4747
+ additionalProperties: true
4748
+ },
4749
+ conversation: {
4750
+ type: "object",
4751
+ additionalProperties: true
4752
+ }
4753
+ }
4754
+ }, "Workbench flow execution"),
4755
+ "404": { $ref: "#/components/responses/Error" }
4756
+ }
4757
+ }
4758
+ },
4759
+ "/api/v1/workbench/run": {
4760
+ post: {
4761
+ summary: "Run one Workbench flow by payload with flowId",
4762
+ responses: {
4763
+ "200": jsonResponse({
4764
+ type: "object",
4765
+ required: ["flow", "run", "conversation"],
4766
+ properties: {
4767
+ flow: {
4768
+ type: "object",
4769
+ additionalProperties: true
4770
+ },
4771
+ run: {
4772
+ type: "object",
4773
+ additionalProperties: true
4774
+ },
4775
+ conversation: {
4776
+ type: "object",
4777
+ additionalProperties: true
4778
+ }
4779
+ }
4780
+ }, "Workbench flow execution"),
4781
+ "404": { $ref: "#/components/responses/Error" }
4782
+ }
4783
+ }
4784
+ },
4785
+ "/api/v1/workbench/flows/{id}/chat": {
4786
+ post: {
4787
+ summary: "Continue or start one Workbench chat flow",
4788
+ responses: {
4789
+ "200": jsonResponse({
4790
+ type: "object",
4791
+ additionalProperties: true
4792
+ }, "Workbench chat response"),
4793
+ "404": { $ref: "#/components/responses/Error" }
4794
+ }
4795
+ }
4796
+ },
4797
+ "/api/v1/workbench/flows/{id}/output": {
4798
+ get: {
4799
+ summary: "Read the latest published whole-flow output",
4800
+ responses: {
4801
+ "200": jsonResponse({
4802
+ type: "object",
4803
+ additionalProperties: true
4804
+ }, "Workbench published output"),
4805
+ "404": { $ref: "#/components/responses/Error" }
4806
+ }
4807
+ }
4808
+ },
4809
+ "/api/v1/workbench/flows/{id}/runs": {
4810
+ get: {
4811
+ summary: "List Workbench runs for one flow",
4812
+ responses: {
4813
+ "200": jsonResponse({
4814
+ type: "object",
4815
+ required: ["flow", "runs"],
4816
+ properties: {
4817
+ flow: {
4818
+ type: "object",
4819
+ additionalProperties: true
4820
+ },
4821
+ runs: arrayOf({
4822
+ type: "object",
4823
+ additionalProperties: true
4824
+ })
4825
+ }
4826
+ }, "Workbench run list"),
4827
+ "404": { $ref: "#/components/responses/Error" }
4828
+ }
4829
+ }
4830
+ },
4831
+ "/api/v1/workbench/flows/{id}/runs/{runId}": {
4832
+ get: {
4833
+ summary: "Read one Workbench run detail",
4834
+ responses: {
4835
+ "200": jsonResponse({
4836
+ type: "object",
4837
+ required: ["flow", "run"],
4838
+ properties: {
4839
+ flow: {
4840
+ type: "object",
4841
+ additionalProperties: true
4842
+ },
4843
+ run: {
4844
+ type: "object",
4845
+ additionalProperties: true
4846
+ }
4847
+ }
4848
+ }, "Workbench run detail"),
4849
+ "404": { $ref: "#/components/responses/Error" }
4850
+ }
4851
+ }
4852
+ },
4853
+ "/api/v1/workbench/flows/{id}/runs/{runId}/nodes": {
4854
+ get: {
4855
+ summary: "List node results for one Workbench run",
4856
+ responses: {
4857
+ "200": jsonResponse({
4858
+ type: "object",
4859
+ required: ["flow", "run", "nodeResults"],
4860
+ properties: {
4861
+ flow: {
4862
+ type: "object",
4863
+ additionalProperties: true
4864
+ },
4865
+ run: {
4866
+ type: "object",
4867
+ additionalProperties: true
4868
+ },
4869
+ nodeResults: arrayOf({
4870
+ type: "object",
4871
+ additionalProperties: true
4872
+ })
4873
+ }
4874
+ }, "Workbench node results"),
4875
+ "404": { $ref: "#/components/responses/Error" }
4876
+ }
4877
+ }
4878
+ },
4879
+ "/api/v1/workbench/flows/{id}/runs/{runId}/nodes/{nodeId}": {
4880
+ get: {
4881
+ summary: "Read one node result for one Workbench run",
4882
+ responses: {
4883
+ "200": jsonResponse({
4884
+ type: "object",
4885
+ required: ["flow", "nodeResult"],
4886
+ properties: {
4887
+ flow: {
4888
+ type: "object",
4889
+ additionalProperties: true
4890
+ },
4891
+ nodeResult: {
4892
+ type: "object",
4893
+ additionalProperties: true
4894
+ }
4895
+ }
4896
+ }, "Workbench node result"),
4897
+ "404": { $ref: "#/components/responses/Error" }
4898
+ }
4899
+ }
4900
+ },
4901
+ "/api/v1/workbench/flows/{id}/nodes/{nodeId}/output": {
4902
+ get: {
4903
+ summary: "Read the latest successful output for one Workbench node",
4904
+ responses: {
4905
+ "200": jsonResponse({
4906
+ type: "object",
4907
+ required: ["flow", "run", "nodeResult"],
4908
+ properties: {
4909
+ flow: {
4910
+ type: "object",
4911
+ additionalProperties: true
4912
+ },
4913
+ run: {
4914
+ type: "object",
4915
+ additionalProperties: true
4916
+ },
4917
+ nodeResult: {
4918
+ type: "object",
4919
+ additionalProperties: true
4920
+ }
4921
+ }
4922
+ }, "Workbench latest node output"),
4923
+ "404": { $ref: "#/components/responses/Error" }
4924
+ }
4925
+ }
4926
+ },
4130
4927
  "/api/v1/wiki/settings": {
4131
4928
  get: {
4132
4929
  summary: "Read wiki spaces plus enabled LLM and embedding profiles",