@unson/brainbase-mcp 0.43.0 → 0.44.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 (74) hide show
  1. package/contracts/canonical-task/operation-schema.sql +58 -0
  2. package/contracts/canonical-task/search-indexes.sql +10 -0
  3. package/contracts/canonical-task/store-schema.sql +77 -0
  4. package/dist/automation-run.d.ts +213 -0
  5. package/dist/automation-run.js +479 -0
  6. package/dist/canonical-task-operations.d.ts +205 -0
  7. package/dist/canonical-task-operations.js +700 -0
  8. package/dist/canonical-task-postgres.d.ts +139 -0
  9. package/dist/canonical-task-postgres.js +554 -0
  10. package/dist/canonical-task-service.d.ts +13 -0
  11. package/dist/canonical-task-service.js +55 -3
  12. package/dist/canonical-task-store-config.d.ts +31 -0
  13. package/dist/canonical-task-store-config.js +53 -0
  14. package/dist/config-parser.d.ts +298 -0
  15. package/dist/config-parser.js +593 -0
  16. package/dist/connected-onboarding.d.ts +57 -0
  17. package/dist/connected-onboarding.js +37 -0
  18. package/dist/durable-wait-http.d.ts +3 -1
  19. package/dist/durable-wait-http.js +73 -6
  20. package/dist/durable-waits.d.ts +93 -3
  21. package/dist/durable-waits.js +320 -8
  22. package/dist/honcho.d.ts +25 -0
  23. package/dist/honcho.js +81 -0
  24. package/dist/judgment-event-adapter.d.ts +72 -0
  25. package/dist/judgment-event-adapter.js +114 -0
  26. package/dist/judgment-event-outbox.d.ts +182 -0
  27. package/dist/judgment-event-outbox.js +568 -0
  28. package/dist/judgment-execution-outcome.d.ts +46 -0
  29. package/dist/judgment-execution-outcome.js +149 -0
  30. package/dist/judgment-host.d.ts +18 -7
  31. package/dist/judgment-host.js +82 -34
  32. package/dist/judgment-lifecycle-core.d.ts +198 -0
  33. package/dist/judgment-lifecycle-core.js +464 -0
  34. package/dist/judgment-node-evidence.d.ts +57 -0
  35. package/dist/judgment-node-evidence.js +297 -0
  36. package/dist/judgment-runtime-resolution.d.ts +264 -0
  37. package/dist/judgment-runtime-resolution.js +1248 -0
  38. package/dist/judgment-runtime-resolution.public.d.ts +255 -0
  39. package/dist/knowledge-event.d.ts +28 -0
  40. package/dist/knowledge-event.js +114 -0
  41. package/dist/mcp-runtime.d.ts +75 -0
  42. package/dist/mcp-runtime.js +188 -0
  43. package/dist/meeting-automation-runtime.d.ts +102 -0
  44. package/dist/meeting-automation-runtime.js +249 -0
  45. package/dist/meeting-automation.d.ts +155 -0
  46. package/dist/meeting-automation.js +341 -0
  47. package/dist/meeting-minutes-context-receipt.d.ts +91 -0
  48. package/dist/meeting-minutes-context-receipt.js +280 -0
  49. package/dist/meeting-source-sync.d.ts +89 -0
  50. package/dist/meeting-source-sync.js +230 -0
  51. package/dist/mesh.d.ts +58 -0
  52. package/dist/mesh.js +134 -0
  53. package/dist/onboarding-runtime.d.ts +47 -0
  54. package/dist/onboarding-runtime.js +4719 -0
  55. package/dist/routine-cycle.d.ts +51 -0
  56. package/dist/routine-cycle.js +153 -0
  57. package/dist/routine-liveness.d.ts +49 -0
  58. package/dist/routine-liveness.js +227 -0
  59. package/dist/routine-runtime.d.ts +101 -0
  60. package/dist/routine-runtime.js +237 -0
  61. package/dist/routines.d.ts +3 -0
  62. package/dist/routines.js +3 -0
  63. package/dist/run-receipt.d.ts +40 -0
  64. package/dist/run-receipt.js +635 -0
  65. package/dist/runtime-host.d.ts +64 -0
  66. package/dist/runtime-host.js +70 -0
  67. package/dist/world-work.d.ts +16 -0
  68. package/package.json +115 -3
  69. package/ui/meeting-minutes.css +122 -0
  70. package/ui/meeting-minutes.js +316 -0
  71. package/ui/objective-editor.js +47 -11
  72. package/ui/world/world-district.js +18 -3
  73. package/ui/world/world-placement.js +13 -0
  74. package/ui/world/world-work-rail.js +7 -1
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Host-owned dependencies shared by the routine and automation run cores.
3
+ *
4
+ * The OSS package deliberately does not resolve a tenant, user, credential,
5
+ * storage directory, or Graph connection by itself. A consumer supplies those
6
+ * values through these ports for every operation.
7
+ */
8
+ export type Awaitable<T> = T | PromiseLike<T>;
9
+ export interface RuntimePortInput {
10
+ operation: string;
11
+ routine?: string;
12
+ automationId?: string;
13
+ runId?: string;
14
+ request?: unknown;
15
+ }
16
+ export interface RuntimeHostContext {
17
+ storageRoot: string;
18
+ now: Date;
19
+ tenantId: string;
20
+ identity: unknown;
21
+ auth: unknown;
22
+ graph: unknown;
23
+ input: RuntimePortInput;
24
+ }
25
+ export interface RuntimeStorageRootPort {
26
+ resolve(input: RuntimePortInput): Awaitable<string>;
27
+ }
28
+ export interface RuntimeClockPort {
29
+ now(): Date;
30
+ }
31
+ export interface RuntimeIdentityPort {
32
+ resolve(input: RuntimePortInput & {
33
+ tenantId: string;
34
+ }): Awaitable<unknown>;
35
+ }
36
+ export interface RuntimeTenantPort {
37
+ resolve(input: RuntimePortInput): Awaitable<string>;
38
+ }
39
+ export type RuntimeAuthorization = true | false | {
40
+ allowed: boolean;
41
+ context?: unknown;
42
+ };
43
+ export interface RuntimeAuthPort {
44
+ authorize(input: RuntimePortInput & {
45
+ tenantId: string;
46
+ identity: unknown;
47
+ }): Awaitable<RuntimeAuthorization>;
48
+ }
49
+ export interface RuntimeGraphPort {
50
+ resolve(input: RuntimePortInput & {
51
+ tenantId: string;
52
+ identity: unknown;
53
+ }): Awaitable<unknown>;
54
+ }
55
+ export interface RuntimeHostPorts {
56
+ storageRoot: RuntimeStorageRootPort;
57
+ clock: RuntimeClockPort;
58
+ identity: RuntimeIdentityPort;
59
+ tenant: RuntimeTenantPort;
60
+ auth: RuntimeAuthPort;
61
+ graph: RuntimeGraphPort;
62
+ }
63
+ export declare function assertRuntimeHostPorts(ports: RuntimeHostPorts): void;
64
+ export declare function resolveRuntimeHostContext(ports: RuntimeHostPorts, input: RuntimePortInput): Promise<RuntimeHostContext>;
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Host-owned dependencies shared by the routine and automation run cores.
3
+ *
4
+ * The OSS package deliberately does not resolve a tenant, user, credential,
5
+ * storage directory, or Graph connection by itself. A consumer supplies those
6
+ * values through these ports for every operation.
7
+ */
8
+ export function assertRuntimeHostPorts(ports) {
9
+ if (!ports || typeof ports !== 'object') {
10
+ throw new Error('runtime host ports are required');
11
+ }
12
+ const required = ['storageRoot', 'clock', 'identity', 'tenant', 'auth', 'graph'];
13
+ for (const name of required) {
14
+ if (!ports[name] || typeof ports[name] !== 'object') {
15
+ throw new Error(`runtime host port ${name} is required`);
16
+ }
17
+ }
18
+ for (const [name, value] of [
19
+ ['storageRoot.resolve', ports.storageRoot.resolve],
20
+ ['clock.now', ports.clock.now],
21
+ ['identity.resolve', ports.identity.resolve],
22
+ ['tenant.resolve', ports.tenant.resolve],
23
+ ['auth.authorize', ports.auth.authorize],
24
+ ['graph.resolve', ports.graph.resolve]
25
+ ]) {
26
+ if (typeof value !== 'function') {
27
+ throw new Error(`runtime host port ${name} must be a function`);
28
+ }
29
+ }
30
+ }
31
+ export async function resolveRuntimeHostContext(ports, input) {
32
+ assertRuntimeHostPorts(ports);
33
+ const storageRoot = await ports.storageRoot.resolve(input);
34
+ if (typeof storageRoot !== 'string' || storageRoot.trim() === '') {
35
+ throw new Error('runtime storage root must be a non-empty string');
36
+ }
37
+ const tenantId = await ports.tenant.resolve(input);
38
+ if (typeof tenantId !== 'string' || tenantId.trim() === '') {
39
+ throw new Error('runtime tenant port must resolve a non-empty string');
40
+ }
41
+ const identity = await ports.identity.resolve({ ...input, tenantId });
42
+ if (identity === null || identity === undefined) {
43
+ throw new Error('runtime identity port must resolve an identity');
44
+ }
45
+ const authorization = await ports.auth.authorize({ ...input, tenantId, identity });
46
+ const allowed = authorization === true
47
+ || (typeof authorization === 'object'
48
+ && authorization !== null
49
+ && authorization.allowed === true);
50
+ if (!allowed) {
51
+ throw new Error(`runtime authorization denied for ${input.operation}`);
52
+ }
53
+ const graph = await ports.graph.resolve({ ...input, tenantId, identity });
54
+ if (graph === null || graph === undefined) {
55
+ throw new Error('runtime Graph port must resolve a context');
56
+ }
57
+ const now = ports.clock.now();
58
+ if (!(now instanceof Date) || Number.isNaN(now.getTime())) {
59
+ throw new Error('runtime clock must return a valid Date');
60
+ }
61
+ return {
62
+ storageRoot,
63
+ now,
64
+ tenantId,
65
+ identity,
66
+ auth: authorization,
67
+ graph,
68
+ input
69
+ };
70
+ }
@@ -63,7 +63,23 @@ export interface WorldWorkAmbiguousMention {
63
63
  readonly text: string;
64
64
  readonly candidates: readonly WorldWorkPersonRef[];
65
65
  }
66
+ /** Optional current actors supplied by an authoritative host; the common UI owns no membership store. */
67
+ export interface WorldWorkActor {
68
+ readonly id: string;
69
+ readonly name: string;
70
+ readonly task_id: string;
71
+ readonly kind?: string;
72
+ readonly state: WorldWorkStatus | null;
73
+ readonly activity?: {
74
+ readonly state: string;
75
+ readonly moving: boolean;
76
+ readonly heartbeat_at?: string | null;
77
+ readonly checked_at?: string;
78
+ };
79
+ }
66
80
  export interface WorldWorkSite {
81
+ readonly actors_state?: 'confirmed' | 'unconfirmed';
82
+ readonly actors?: readonly WorldWorkActor[];
67
83
  readonly task_id: string;
68
84
  readonly title: string;
69
85
  /** What the work is for, as the task record states it (`purpose_label`); null when it states none. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unson/brainbase-mcp",
3
- "version": "0.43.0",
3
+ "version": "0.44.1",
4
4
  "description": "Local-first Brainbase judgment OS that lets supported AI agents reuse a user's approved goals, priorities, decisions, and judgment criteria.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -43,6 +43,30 @@
43
43
  "types": "./dist/judgment-value-proof.d.ts",
44
44
  "import": "./dist/judgment-value-proof.js"
45
45
  },
46
+ "./judgment-host": {
47
+ "types": "./dist/judgment-host.d.ts",
48
+ "import": "./dist/judgment-host.js"
49
+ },
50
+ "./judgment-lifecycle-core": {
51
+ "types": "./dist/judgment-lifecycle-core.d.ts",
52
+ "import": "./dist/judgment-lifecycle-core.js"
53
+ },
54
+ "./judgment-execution-outcome": {
55
+ "types": "./dist/judgment-execution-outcome.d.ts",
56
+ "import": "./dist/judgment-execution-outcome.js"
57
+ },
58
+ "./judgment-node-evidence": {
59
+ "types": "./dist/judgment-node-evidence.d.ts",
60
+ "import": "./dist/judgment-node-evidence.js"
61
+ },
62
+ "./judgment-event-adapter": {
63
+ "types": "./dist/judgment-event-adapter.d.ts",
64
+ "import": "./dist/judgment-event-adapter.js"
65
+ },
66
+ "./judgment-event-outbox": {
67
+ "types": "./dist/judgment-event-outbox.d.ts",
68
+ "import": "./dist/judgment-event-outbox.js"
69
+ },
46
70
  "./judgment-value-proof-review": {
47
71
  "types": "./dist/judgment-value-proof-review.d.ts",
48
72
  "import": "./dist/judgment-value-proof-review.js"
@@ -99,6 +123,18 @@
99
123
  "types": "./dist/canonical-task-service.d.ts",
100
124
  "import": "./dist/canonical-task-service.js"
101
125
  },
126
+ "./canonical-task-postgres": {
127
+ "types": "./dist/canonical-task-postgres.d.ts",
128
+ "import": "./dist/canonical-task-postgres.js"
129
+ },
130
+ "./canonical-task-operations": {
131
+ "types": "./dist/canonical-task-operations.d.ts",
132
+ "import": "./dist/canonical-task-operations.js"
133
+ },
134
+ "./canonical-task-store-config": {
135
+ "types": "./dist/canonical-task-store-config.d.ts",
136
+ "import": "./dist/canonical-task-store-config.js"
137
+ },
102
138
  "./foundation-catalog": {
103
139
  "types": "./dist/foundation-catalog.d.ts",
104
140
  "import": "./dist/foundation-catalog.js"
@@ -123,6 +159,18 @@
123
159
  "types": "./dist/company-os-receipt-adapter.d.ts",
124
160
  "import": "./dist/company-os-receipt-adapter.js"
125
161
  },
162
+ "./run-receipt": {
163
+ "types": "./dist/run-receipt.d.ts",
164
+ "import": "./dist/run-receipt.js"
165
+ },
166
+ "./routines": {
167
+ "types": "./dist/routines.d.ts",
168
+ "import": "./dist/routines.js"
169
+ },
170
+ "./automation-run": {
171
+ "types": "./dist/automation-run.d.ts",
172
+ "import": "./dist/automation-run.js"
173
+ },
126
174
  "./company-os-learning-adoption": {
127
175
  "types": "./dist/company-os-learning-adoption.d.ts",
128
176
  "import": "./dist/company-os-learning-adoption.js"
@@ -187,6 +235,10 @@
187
235
  "types": "./dist/judgment-resolution-contract.d.ts",
188
236
  "import": "./dist/judgment-resolution-contract.js"
189
237
  },
238
+ "./judgment-runtime-resolution": {
239
+ "types": "./dist/judgment-runtime-resolution.public.d.ts",
240
+ "import": "./dist/judgment-runtime-resolution.js"
241
+ },
190
242
  "./graph-maintenance-engine": {
191
243
  "types": "./dist/graph-maintenance-engine.d.ts",
192
244
  "import": "./dist/graph-maintenance-engine.js"
@@ -255,10 +307,34 @@
255
307
  "types": "./dist/knowledge-promotion.d.ts",
256
308
  "import": "./dist/knowledge-promotion.js"
257
309
  },
310
+ "./knowledge-event": {
311
+ "types": "./dist/knowledge-event.d.ts",
312
+ "import": "./dist/knowledge-event.js"
313
+ },
258
314
  "./organization-connection": {
259
315
  "types": "./dist/organization-connection.d.ts",
260
316
  "import": "./dist/organization-connection.js"
261
317
  },
318
+ "./mesh": {
319
+ "types": "./dist/mesh.d.ts",
320
+ "import": "./dist/mesh.js"
321
+ },
322
+ "./honcho": {
323
+ "types": "./dist/honcho.d.ts",
324
+ "import": "./dist/honcho.js"
325
+ },
326
+ "./onboarding-runtime": {
327
+ "types": "./dist/onboarding-runtime.d.ts",
328
+ "import": "./dist/onboarding-runtime.js"
329
+ },
330
+ "./connected-onboarding": {
331
+ "types": "./dist/connected-onboarding.d.ts",
332
+ "import": "./dist/connected-onboarding.js"
333
+ },
334
+ "./mcp-runtime": {
335
+ "types": "./dist/mcp-runtime.d.ts",
336
+ "import": "./dist/mcp-runtime.js"
337
+ },
262
338
  "./resource-reservations": {
263
339
  "types": "./dist/resource-reservations.d.ts",
264
340
  "import": "./dist/resource-reservations.js"
@@ -287,6 +363,10 @@
287
363
  "types": "./dist/server-support.d.ts",
288
364
  "import": "./dist/server-support.js"
289
365
  },
366
+ "./config-parser": {
367
+ "types": "./dist/config-parser.d.ts",
368
+ "import": "./dist/config-parser.js"
369
+ },
290
370
  "./company-os-impact-review": {
291
371
  "types": "./dist/company-os-impact-review.d.ts",
292
372
  "import": "./dist/company-os-impact-review.js"
@@ -303,6 +383,22 @@
303
383
  "types": "./dist/meeting-minutes.d.ts",
304
384
  "import": "./dist/meeting-minutes.js"
305
385
  },
386
+ "./meeting-automation": {
387
+ "types": "./dist/meeting-automation.d.ts",
388
+ "import": "./dist/meeting-automation.js"
389
+ },
390
+ "./meeting-automation-runtime": {
391
+ "types": "./dist/meeting-automation-runtime.d.ts",
392
+ "import": "./dist/meeting-automation-runtime.js"
393
+ },
394
+ "./meeting-minutes-context-receipt": {
395
+ "types": "./dist/meeting-minutes-context-receipt.d.ts",
396
+ "import": "./dist/meeting-minutes-context-receipt.js"
397
+ },
398
+ "./meeting-source-sync": {
399
+ "types": "./dist/meeting-source-sync.d.ts",
400
+ "import": "./dist/meeting-source-sync.js"
401
+ },
306
402
  "./meeting-minutes-http": {
307
403
  "types": "./dist/meeting-minutes-http.d.ts",
308
404
  "import": "./dist/meeting-minutes-http.js"
@@ -444,9 +540,12 @@
444
540
  "access": "public"
445
541
  },
446
542
  "scripts": {
447
- "build": "tsc -p tsconfig.json",
543
+ "build": "tsc -p tsconfig.json && node scripts/copy-judgment-runtime-resolution-public-types.mjs && tsc -p tsconfig.judgment-runtime-resolution-types.json --pretty false && node scripts/build-stage3b-candidate-bundle.mjs",
544
+ "typecheck:config-parser": "tsc -p tsconfig.config-parser-types.json --pretty false",
545
+ "typecheck:judgment-runtime-resolution": "tsc -p tsconfig.judgment-runtime-resolution-types.json --pretty false",
448
546
  "test": "vitest run --exclude tests/npm-prepublication-evidence.integration.test.ts",
449
547
  "test:integration": "vitest run tests/mcp-contract.test.ts tests/ontology-cli.test.ts tests/npm-release-validation.integration.test.ts tests/npm-consumer-smoke.integration.test.ts",
548
+ "test:canonical-task-postgres": "vitest run tests/canonical-task-postgres-service.integration.test.ts",
450
549
  "test:consumer-smoke": "vitest run tests/npm-consumer-smoke.integration.test.ts",
451
550
  "test:integration:release-evidence": "vitest run tests/npm-release-validation.integration.test.ts tests/npm-prepublication-evidence.integration.test.ts",
452
551
  "test:e2e": "vitest run tests/e2e/brainbase-mcp-only-acceptance.spec.ts tests/e2e/story-brainbase-portable-ontology-kernel-acceptance.spec.ts",
@@ -477,6 +576,7 @@
477
576
  "dependencies": {
478
577
  "@modelcontextprotocol/sdk": "^1.31.0",
479
578
  "graphology": "0.26.0",
579
+ "js-yaml": "^4.1.1",
480
580
  "sigma": "3.0.3",
481
581
  "zod": "^3.25.56"
482
582
  },
@@ -486,7 +586,9 @@
486
586
  "devDependencies": {
487
587
  "@electric-sql/pglite": "^0.5.8",
488
588
  "@types/node": "^22.15.29",
589
+ "@types/pg": "^8.23.1",
489
590
  "esbuild": "0.28.2",
591
+ "pg": "^8.23.1",
490
592
  "three": "0.186.1",
491
593
  "tsx": "^4.19.4",
492
594
  "typescript": "^5.8.3",
@@ -496,5 +598,15 @@
496
598
  "engines": {
497
599
  "node": ">=20"
498
600
  },
499
- "gitHead": "a8166d088899a27bb8267af9e6dd99d3550c7b63"
601
+ "directories": {
602
+ "doc": "docs",
603
+ "test": "tests"
604
+ },
605
+ "keywords": [],
606
+ "author": "",
607
+ "bugs": {
608
+ "url": "https://github.com/Unson-LLC/brainbase/issues"
609
+ },
610
+ "homepage": "https://github.com/Unson-LLC/brainbase#readme",
611
+ "gitHead": "3ce9dcd2ced2f30a9665cfd9b64ec6775c6a18c3"
500
612
  }
@@ -698,3 +698,125 @@
698
698
  .bb-minutes-connection-note.is-unavailable {
699
699
  color: var(--bb-color-warning);
700
700
  }
701
+
702
+ /* 参加者 (story-meeting-participants-row-v1): linked names, 未確認 badges and the link panel. */
703
+ .bb-minutes-participants {
704
+ display: grid;
705
+ gap: 4px;
706
+ margin: 8px 0 4px;
707
+ padding: 8px 12px;
708
+ border: 1px solid var(--bb-color-border);
709
+ border-radius: var(--bb-radius-md, 6px);
710
+ background: var(--bb-color-surface);
711
+ }
712
+
713
+ .bb-minutes-participants[hidden] {
714
+ display: none;
715
+ }
716
+
717
+ .bb-minutes-participants-row {
718
+ display: grid;
719
+ grid-template-columns: 7em minmax(0, 1fr);
720
+ gap: 8px;
721
+ align-items: baseline;
722
+ font-size: 13px;
723
+ line-height: 1.5;
724
+ }
725
+
726
+ .bb-minutes-participant-items {
727
+ display: flex;
728
+ flex-wrap: wrap;
729
+ gap: 4px 14px;
730
+ margin: 0;
731
+ padding: 0;
732
+ list-style: none;
733
+ min-width: 0;
734
+ }
735
+
736
+ .bb-minutes-participant-items li {
737
+ display: inline-flex;
738
+ align-items: baseline;
739
+ gap: 4px;
740
+ min-width: 0;
741
+ overflow-wrap: anywhere;
742
+ }
743
+
744
+ .bb-minutes-participant-badge {
745
+ padding: 0 8px;
746
+ border: 1px dashed var(--bb-color-warning);
747
+ border-radius: 999px;
748
+ background: transparent;
749
+ color: var(--bb-color-ink);
750
+ font: inherit;
751
+ cursor: pointer;
752
+ }
753
+
754
+ .bb-minutes-participant-badge[aria-expanded="true"] {
755
+ border-style: solid;
756
+ background: var(--bb-color-warning-soft);
757
+ }
758
+
759
+ .bb-minutes-participant-undo {
760
+ padding: 0;
761
+ border: 0;
762
+ background: transparent;
763
+ color: var(--bb-color-muted);
764
+ font-size: 12px;
765
+ text-decoration: underline;
766
+ cursor: pointer;
767
+ }
768
+
769
+ .bb-minutes-participant-notice {
770
+ margin: 0;
771
+ font-size: 13px;
772
+ }
773
+
774
+ .bb-minutes-participant-panel {
775
+ display: grid;
776
+ gap: 8px;
777
+ margin-top: 4px;
778
+ padding: 10px 12px;
779
+ border: 1px solid var(--bb-color-border);
780
+ border-radius: var(--bb-radius-md, 6px);
781
+ background: var(--bb-color-paper);
782
+ font-size: 13px;
783
+ }
784
+
785
+ .bb-minutes-participant-panel-title {
786
+ margin: 0;
787
+ font-weight: 700;
788
+ }
789
+
790
+ .bb-minutes-participant-others {
791
+ margin: 0;
792
+ color: var(--bb-color-muted);
793
+ }
794
+
795
+ .bb-minutes-participant-candidates {
796
+ display: grid;
797
+ gap: 6px;
798
+ margin: 0;
799
+ padding: 0;
800
+ list-style: none;
801
+ }
802
+
803
+ .bb-minutes-participant-candidate {
804
+ display: flex;
805
+ flex-wrap: wrap;
806
+ align-items: center;
807
+ justify-content: space-between;
808
+ gap: 4px 12px;
809
+ }
810
+
811
+ .bb-minutes-participant-candidate > div {
812
+ display: grid;
813
+ min-width: 0;
814
+ }
815
+
816
+ .bb-minutes-participant-new,
817
+ .bb-minutes-participant-not-person {
818
+ display: flex;
819
+ flex-wrap: wrap;
820
+ align-items: flex-end;
821
+ gap: 6px 8px;
822
+ }