@crewhaus/spec 0.4.2 → 0.5.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/dist/index.d.ts CHANGED
@@ -1421,6 +1421,22 @@ declare const thredzObject: z.ZodObject<{
1421
1421
  api_key: z.ZodString;
1422
1422
  base_url: z.ZodOptional<z.ZodString>;
1423
1423
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
1424
+ /**
1425
+ * 0.5.0 — a Thredz **wiki space** (Pro/Scale) to scope this agent's memory
1426
+ * to; becomes the synthesized server's `THREDZ_DEFAULT_SPACE`. A `shared`
1427
+ * space is readable by every wiki-enabled key on the account; an
1428
+ * `individual` space only by the key that owns it.
1429
+ *
1430
+ * The space TYPE is chosen when the space is created (over the API, or via
1431
+ * the model-callable `wiki_space_create`), not here — so this cannot be
1432
+ * validated at compile time and `visibility` is not cross-checked against
1433
+ * it. Inside a space the space's type decides visibility outright.
1434
+ *
1435
+ * ONE individual space per API KEY is a hard Thredz limit, so per-agent
1436
+ * private memory means a per-agent `api_key`. That is one `thredz:` block
1437
+ * per spec today; a crew gives each role its own (see the role-keyed form).
1438
+ */
1439
+ space: z.ZodOptional<z.ZodString>;
1424
1440
  goals: z.ZodOptional<z.ZodBoolean>;
1425
1441
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
1426
1442
  /**
@@ -1435,6 +1451,7 @@ declare const thredzObject: z.ZodObject<{
1435
1451
  api_key: string;
1436
1452
  base_url?: string | undefined;
1437
1453
  visibility?: "private" | "shared" | undefined;
1454
+ space?: string | undefined;
1438
1455
  goals?: boolean | undefined;
1439
1456
  agents?: string | boolean | undefined;
1440
1457
  messaging?: boolean | undefined;
@@ -1442,6 +1459,7 @@ declare const thredzObject: z.ZodObject<{
1442
1459
  api_key: string;
1443
1460
  base_url?: string | undefined;
1444
1461
  visibility?: "private" | "shared" | undefined;
1462
+ space?: string | undefined;
1445
1463
  goals?: boolean | undefined;
1446
1464
  agents?: string | boolean | undefined;
1447
1465
  messaging?: boolean | undefined;
@@ -1450,6 +1468,22 @@ declare const thredzBlock: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString,
1450
1468
  api_key: z.ZodString;
1451
1469
  base_url: z.ZodOptional<z.ZodString>;
1452
1470
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
1471
+ /**
1472
+ * 0.5.0 — a Thredz **wiki space** (Pro/Scale) to scope this agent's memory
1473
+ * to; becomes the synthesized server's `THREDZ_DEFAULT_SPACE`. A `shared`
1474
+ * space is readable by every wiki-enabled key on the account; an
1475
+ * `individual` space only by the key that owns it.
1476
+ *
1477
+ * The space TYPE is chosen when the space is created (over the API, or via
1478
+ * the model-callable `wiki_space_create`), not here — so this cannot be
1479
+ * validated at compile time and `visibility` is not cross-checked against
1480
+ * it. Inside a space the space's type decides visibility outright.
1481
+ *
1482
+ * ONE individual space per API KEY is a hard Thredz limit, so per-agent
1483
+ * private memory means a per-agent `api_key`. That is one `thredz:` block
1484
+ * per spec today; a crew gives each role its own (see the role-keyed form).
1485
+ */
1486
+ space: z.ZodOptional<z.ZodString>;
1453
1487
  goals: z.ZodOptional<z.ZodBoolean>;
1454
1488
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
1455
1489
  /**
@@ -1464,6 +1498,7 @@ declare const thredzBlock: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString,
1464
1498
  api_key: string;
1465
1499
  base_url?: string | undefined;
1466
1500
  visibility?: "private" | "shared" | undefined;
1501
+ space?: string | undefined;
1467
1502
  goals?: boolean | undefined;
1468
1503
  agents?: string | boolean | undefined;
1469
1504
  messaging?: boolean | undefined;
@@ -1471,6 +1506,7 @@ declare const thredzBlock: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString,
1471
1506
  api_key: string;
1472
1507
  base_url?: string | undefined;
1473
1508
  visibility?: "private" | "shared" | undefined;
1509
+ space?: string | undefined;
1474
1510
  goals?: boolean | undefined;
1475
1511
  agents?: string | boolean | undefined;
1476
1512
  messaging?: boolean | undefined;
@@ -3060,6 +3096,22 @@ declare const cliSchema: z.ZodObject<{
3060
3096
  api_key: z.ZodString;
3061
3097
  base_url: z.ZodOptional<z.ZodString>;
3062
3098
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
3099
+ /**
3100
+ * 0.5.0 — a Thredz **wiki space** (Pro/Scale) to scope this agent's memory
3101
+ * to; becomes the synthesized server's `THREDZ_DEFAULT_SPACE`. A `shared`
3102
+ * space is readable by every wiki-enabled key on the account; an
3103
+ * `individual` space only by the key that owns it.
3104
+ *
3105
+ * The space TYPE is chosen when the space is created (over the API, or via
3106
+ * the model-callable `wiki_space_create`), not here — so this cannot be
3107
+ * validated at compile time and `visibility` is not cross-checked against
3108
+ * it. Inside a space the space's type decides visibility outright.
3109
+ *
3110
+ * ONE individual space per API KEY is a hard Thredz limit, so per-agent
3111
+ * private memory means a per-agent `api_key`. That is one `thredz:` block
3112
+ * per spec today; a crew gives each role its own (see the role-keyed form).
3113
+ */
3114
+ space: z.ZodOptional<z.ZodString>;
3063
3115
  goals: z.ZodOptional<z.ZodBoolean>;
3064
3116
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
3065
3117
  /**
@@ -3074,6 +3126,7 @@ declare const cliSchema: z.ZodObject<{
3074
3126
  api_key: string;
3075
3127
  base_url?: string | undefined;
3076
3128
  visibility?: "private" | "shared" | undefined;
3129
+ space?: string | undefined;
3077
3130
  goals?: boolean | undefined;
3078
3131
  agents?: string | boolean | undefined;
3079
3132
  messaging?: boolean | undefined;
@@ -3081,6 +3134,7 @@ declare const cliSchema: z.ZodObject<{
3081
3134
  api_key: string;
3082
3135
  base_url?: string | undefined;
3083
3136
  visibility?: "private" | "shared" | undefined;
3137
+ space?: string | undefined;
3084
3138
  goals?: boolean | undefined;
3085
3139
  agents?: string | boolean | undefined;
3086
3140
  messaging?: boolean | undefined;
@@ -3587,6 +3641,7 @@ declare const cliSchema: z.ZodObject<{
3587
3641
  api_key: string;
3588
3642
  base_url?: string | undefined;
3589
3643
  visibility?: "private" | "shared" | undefined;
3644
+ space?: string | undefined;
3590
3645
  goals?: boolean | undefined;
3591
3646
  agents?: string | boolean | undefined;
3592
3647
  messaging?: boolean | undefined;
@@ -3922,6 +3977,7 @@ declare const cliSchema: z.ZodObject<{
3922
3977
  api_key: string;
3923
3978
  base_url?: string | undefined;
3924
3979
  visibility?: "private" | "shared" | undefined;
3980
+ space?: string | undefined;
3925
3981
  goals?: boolean | undefined;
3926
3982
  agents?: string | boolean | undefined;
3927
3983
  messaging?: boolean | undefined;
@@ -8260,6 +8316,22 @@ declare const channelSchema: z.ZodObject<{
8260
8316
  api_key: z.ZodString;
8261
8317
  base_url: z.ZodOptional<z.ZodString>;
8262
8318
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
8319
+ /**
8320
+ * 0.5.0 — a Thredz **wiki space** (Pro/Scale) to scope this agent's memory
8321
+ * to; becomes the synthesized server's `THREDZ_DEFAULT_SPACE`. A `shared`
8322
+ * space is readable by every wiki-enabled key on the account; an
8323
+ * `individual` space only by the key that owns it.
8324
+ *
8325
+ * The space TYPE is chosen when the space is created (over the API, or via
8326
+ * the model-callable `wiki_space_create`), not here — so this cannot be
8327
+ * validated at compile time and `visibility` is not cross-checked against
8328
+ * it. Inside a space the space's type decides visibility outright.
8329
+ *
8330
+ * ONE individual space per API KEY is a hard Thredz limit, so per-agent
8331
+ * private memory means a per-agent `api_key`. That is one `thredz:` block
8332
+ * per spec today; a crew gives each role its own (see the role-keyed form).
8333
+ */
8334
+ space: z.ZodOptional<z.ZodString>;
8263
8335
  goals: z.ZodOptional<z.ZodBoolean>;
8264
8336
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
8265
8337
  /**
@@ -8274,6 +8346,7 @@ declare const channelSchema: z.ZodObject<{
8274
8346
  api_key: string;
8275
8347
  base_url?: string | undefined;
8276
8348
  visibility?: "private" | "shared" | undefined;
8349
+ space?: string | undefined;
8277
8350
  goals?: boolean | undefined;
8278
8351
  agents?: string | boolean | undefined;
8279
8352
  messaging?: boolean | undefined;
@@ -8281,6 +8354,7 @@ declare const channelSchema: z.ZodObject<{
8281
8354
  api_key: string;
8282
8355
  base_url?: string | undefined;
8283
8356
  visibility?: "private" | "shared" | undefined;
8357
+ space?: string | undefined;
8284
8358
  goals?: boolean | undefined;
8285
8359
  agents?: string | boolean | undefined;
8286
8360
  messaging?: boolean | undefined;
@@ -8838,6 +8912,7 @@ declare const channelSchema: z.ZodObject<{
8838
8912
  api_key: string;
8839
8913
  base_url?: string | undefined;
8840
8914
  visibility?: "private" | "shared" | undefined;
8915
+ space?: string | undefined;
8841
8916
  goals?: boolean | undefined;
8842
8917
  agents?: string | boolean | undefined;
8843
8918
  messaging?: boolean | undefined;
@@ -9207,6 +9282,7 @@ declare const channelSchema: z.ZodObject<{
9207
9282
  api_key: string;
9208
9283
  base_url?: string | undefined;
9209
9284
  visibility?: "private" | "shared" | undefined;
9285
+ space?: string | undefined;
9210
9286
  goals?: boolean | undefined;
9211
9287
  agents?: string | boolean | undefined;
9212
9288
  messaging?: boolean | undefined;
@@ -11609,6 +11685,22 @@ declare const managedSchema: z.ZodObject<{
11609
11685
  api_key: z.ZodString;
11610
11686
  base_url: z.ZodOptional<z.ZodString>;
11611
11687
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
11688
+ /**
11689
+ * 0.5.0 — a Thredz **wiki space** (Pro/Scale) to scope this agent's memory
11690
+ * to; becomes the synthesized server's `THREDZ_DEFAULT_SPACE`. A `shared`
11691
+ * space is readable by every wiki-enabled key on the account; an
11692
+ * `individual` space only by the key that owns it.
11693
+ *
11694
+ * The space TYPE is chosen when the space is created (over the API, or via
11695
+ * the model-callable `wiki_space_create`), not here — so this cannot be
11696
+ * validated at compile time and `visibility` is not cross-checked against
11697
+ * it. Inside a space the space's type decides visibility outright.
11698
+ *
11699
+ * ONE individual space per API KEY is a hard Thredz limit, so per-agent
11700
+ * private memory means a per-agent `api_key`. That is one `thredz:` block
11701
+ * per spec today; a crew gives each role its own (see the role-keyed form).
11702
+ */
11703
+ space: z.ZodOptional<z.ZodString>;
11612
11704
  goals: z.ZodOptional<z.ZodBoolean>;
11613
11705
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
11614
11706
  /**
@@ -11623,6 +11715,7 @@ declare const managedSchema: z.ZodObject<{
11623
11715
  api_key: string;
11624
11716
  base_url?: string | undefined;
11625
11717
  visibility?: "private" | "shared" | undefined;
11718
+ space?: string | undefined;
11626
11719
  goals?: boolean | undefined;
11627
11720
  agents?: string | boolean | undefined;
11628
11721
  messaging?: boolean | undefined;
@@ -11630,6 +11723,7 @@ declare const managedSchema: z.ZodObject<{
11630
11723
  api_key: string;
11631
11724
  base_url?: string | undefined;
11632
11725
  visibility?: "private" | "shared" | undefined;
11726
+ space?: string | undefined;
11633
11727
  goals?: boolean | undefined;
11634
11728
  agents?: string | boolean | undefined;
11635
11729
  messaging?: boolean | undefined;
@@ -12020,6 +12114,7 @@ declare const managedSchema: z.ZodObject<{
12020
12114
  api_key: string;
12021
12115
  base_url?: string | undefined;
12022
12116
  visibility?: "private" | "shared" | undefined;
12117
+ space?: string | undefined;
12023
12118
  goals?: boolean | undefined;
12024
12119
  agents?: string | boolean | undefined;
12025
12120
  messaging?: boolean | undefined;
@@ -12299,6 +12394,7 @@ declare const managedSchema: z.ZodObject<{
12299
12394
  api_key: string;
12300
12395
  base_url?: string | undefined;
12301
12396
  visibility?: "private" | "shared" | undefined;
12397
+ space?: string | undefined;
12302
12398
  goals?: boolean | undefined;
12303
12399
  agents?: string | boolean | undefined;
12304
12400
  messaging?: boolean | undefined;
@@ -14605,34 +14701,108 @@ declare const crewSchema: z.ZodObject<{
14605
14701
  scope?: "auto" | "spec" | "session" | undefined;
14606
14702
  focusMaxChars?: number | undefined;
14607
14703
  }>]>>;
14608
- thredz: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString, z.ZodObject<{
14609
- api_key: z.ZodString;
14704
+ thredz: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString, z.ZodEffects<z.ZodObject<{
14610
14705
  base_url: z.ZodOptional<z.ZodString>;
14611
14706
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
14707
+ space: z.ZodOptional<z.ZodString>;
14612
14708
  goals: z.ZodOptional<z.ZodBoolean>;
14613
14709
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
14614
- /**
14615
- * Item 5 (G44) — enable the nine Thredz messaging tools (`message_send`
14616
- * / `inbox_poll` / `message_ack` / `thread_get` / `agent_*`). DEFAULT
14617
- * false: the send-side tools are destructive + justification-gated, so
14618
- * they stay off unless the author asks. The Thredz server side is already
14619
- * live (thredz-api) — this flips their registration on.
14620
- */
14621
14710
  messaging: z.ZodOptional<z.ZodBoolean>;
14711
+ } & {
14712
+ api_key: z.ZodOptional<z.ZodString>;
14713
+ roles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
14714
+ api_key: z.ZodOptional<z.ZodString>;
14715
+ base_url: z.ZodOptional<z.ZodString>;
14716
+ visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
14717
+ space: z.ZodOptional<z.ZodString>;
14718
+ goals: z.ZodOptional<z.ZodBoolean>;
14719
+ agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
14720
+ messaging: z.ZodOptional<z.ZodBoolean>;
14721
+ }, "strict", z.ZodTypeAny, {
14722
+ api_key?: string | undefined;
14723
+ base_url?: string | undefined;
14724
+ visibility?: "private" | "shared" | undefined;
14725
+ space?: string | undefined;
14726
+ goals?: boolean | undefined;
14727
+ agents?: string | boolean | undefined;
14728
+ messaging?: boolean | undefined;
14729
+ }, {
14730
+ api_key?: string | undefined;
14731
+ base_url?: string | undefined;
14732
+ visibility?: "private" | "shared" | undefined;
14733
+ space?: string | undefined;
14734
+ goals?: boolean | undefined;
14735
+ agents?: string | boolean | undefined;
14736
+ messaging?: boolean | undefined;
14737
+ }>>>;
14622
14738
  }, "strict", z.ZodTypeAny, {
14623
- api_key: string;
14739
+ api_key?: string | undefined;
14624
14740
  base_url?: string | undefined;
14625
14741
  visibility?: "private" | "shared" | undefined;
14742
+ space?: string | undefined;
14626
14743
  goals?: boolean | undefined;
14627
14744
  agents?: string | boolean | undefined;
14628
14745
  messaging?: boolean | undefined;
14746
+ roles?: Record<string, {
14747
+ api_key?: string | undefined;
14748
+ base_url?: string | undefined;
14749
+ visibility?: "private" | "shared" | undefined;
14750
+ space?: string | undefined;
14751
+ goals?: boolean | undefined;
14752
+ agents?: string | boolean | undefined;
14753
+ messaging?: boolean | undefined;
14754
+ }> | undefined;
14629
14755
  }, {
14630
- api_key: string;
14756
+ api_key?: string | undefined;
14757
+ base_url?: string | undefined;
14758
+ visibility?: "private" | "shared" | undefined;
14759
+ space?: string | undefined;
14760
+ goals?: boolean | undefined;
14761
+ agents?: string | boolean | undefined;
14762
+ messaging?: boolean | undefined;
14763
+ roles?: Record<string, {
14764
+ api_key?: string | undefined;
14765
+ base_url?: string | undefined;
14766
+ visibility?: "private" | "shared" | undefined;
14767
+ space?: string | undefined;
14768
+ goals?: boolean | undefined;
14769
+ agents?: string | boolean | undefined;
14770
+ messaging?: boolean | undefined;
14771
+ }> | undefined;
14772
+ }>, {
14773
+ api_key?: string | undefined;
14631
14774
  base_url?: string | undefined;
14632
14775
  visibility?: "private" | "shared" | undefined;
14776
+ space?: string | undefined;
14633
14777
  goals?: boolean | undefined;
14634
14778
  agents?: string | boolean | undefined;
14635
14779
  messaging?: boolean | undefined;
14780
+ roles?: Record<string, {
14781
+ api_key?: string | undefined;
14782
+ base_url?: string | undefined;
14783
+ visibility?: "private" | "shared" | undefined;
14784
+ space?: string | undefined;
14785
+ goals?: boolean | undefined;
14786
+ agents?: string | boolean | undefined;
14787
+ messaging?: boolean | undefined;
14788
+ }> | undefined;
14789
+ }, {
14790
+ api_key?: string | undefined;
14791
+ base_url?: string | undefined;
14792
+ visibility?: "private" | "shared" | undefined;
14793
+ space?: string | undefined;
14794
+ goals?: boolean | undefined;
14795
+ agents?: string | boolean | undefined;
14796
+ messaging?: boolean | undefined;
14797
+ roles?: Record<string, {
14798
+ api_key?: string | undefined;
14799
+ base_url?: string | undefined;
14800
+ visibility?: "private" | "shared" | undefined;
14801
+ space?: string | undefined;
14802
+ goals?: boolean | undefined;
14803
+ agents?: string | boolean | undefined;
14804
+ messaging?: boolean | undefined;
14805
+ }> | undefined;
14636
14806
  }>]>>;
14637
14807
  learning: z.ZodOptional<z.ZodObject<{
14638
14808
  enabled: z.ZodOptional<z.ZodBoolean>;
@@ -14955,9 +15125,6 @@ declare const crewSchema: z.ZodObject<{
14955
15125
  }>>;
14956
15126
  }, "strict", z.ZodTypeAny, {
14957
15127
  model: string;
14958
- name: string;
14959
- target: "crew";
14960
- entry: string;
14961
15128
  roles: Record<string, {
14962
15129
  instructions: string;
14963
15130
  tools?: string[] | undefined;
@@ -15027,6 +15194,9 @@ declare const crewSchema: z.ZodObject<{
15027
15194
  }> | undefined;
15028
15195
  tool_config?: Record<string, unknown> | undefined;
15029
15196
  }>;
15197
+ name: string;
15198
+ target: "crew";
15199
+ entry: string;
15030
15200
  permissions?: {
15031
15201
  mode?: "default" | "plan" | "auto" | undefined;
15032
15202
  rules?: {
@@ -15057,12 +15227,22 @@ declare const crewSchema: z.ZodObject<{
15057
15227
  } | undefined;
15058
15228
  } | undefined;
15059
15229
  thredz?: string | boolean | {
15060
- api_key: string;
15230
+ api_key?: string | undefined;
15061
15231
  base_url?: string | undefined;
15062
15232
  visibility?: "private" | "shared" | undefined;
15233
+ space?: string | undefined;
15063
15234
  goals?: boolean | undefined;
15064
15235
  agents?: string | boolean | undefined;
15065
15236
  messaging?: boolean | undefined;
15237
+ roles?: Record<string, {
15238
+ api_key?: string | undefined;
15239
+ base_url?: string | undefined;
15240
+ visibility?: "private" | "shared" | undefined;
15241
+ space?: string | undefined;
15242
+ goals?: boolean | undefined;
15243
+ agents?: string | boolean | undefined;
15244
+ messaging?: boolean | undefined;
15245
+ }> | undefined;
15066
15246
  } | undefined;
15067
15247
  version?: number | undefined;
15068
15248
  mcp_servers?: Record<string, {
@@ -15223,9 +15403,6 @@ declare const crewSchema: z.ZodObject<{
15223
15403
  } | undefined;
15224
15404
  }, {
15225
15405
  model: string;
15226
- name: string;
15227
- target: "crew";
15228
- entry: string;
15229
15406
  roles: Record<string, {
15230
15407
  instructions: string;
15231
15408
  tools?: string[] | undefined;
@@ -15295,6 +15472,9 @@ declare const crewSchema: z.ZodObject<{
15295
15472
  }> | undefined;
15296
15473
  tool_config?: Record<string, unknown> | undefined;
15297
15474
  }>;
15475
+ name: string;
15476
+ target: "crew";
15477
+ entry: string;
15298
15478
  permissions?: {
15299
15479
  mode?: "default" | "plan" | "auto" | undefined;
15300
15480
  rules?: {
@@ -15325,12 +15505,22 @@ declare const crewSchema: z.ZodObject<{
15325
15505
  } | undefined;
15326
15506
  } | undefined;
15327
15507
  thredz?: string | boolean | {
15328
- api_key: string;
15508
+ api_key?: string | undefined;
15329
15509
  base_url?: string | undefined;
15330
15510
  visibility?: "private" | "shared" | undefined;
15511
+ space?: string | undefined;
15331
15512
  goals?: boolean | undefined;
15332
15513
  agents?: string | boolean | undefined;
15333
15514
  messaging?: boolean | undefined;
15515
+ roles?: Record<string, {
15516
+ api_key?: string | undefined;
15517
+ base_url?: string | undefined;
15518
+ visibility?: "private" | "shared" | undefined;
15519
+ space?: string | undefined;
15520
+ goals?: boolean | undefined;
15521
+ agents?: string | boolean | undefined;
15522
+ messaging?: boolean | undefined;
15523
+ }> | undefined;
15334
15524
  } | undefined;
15335
15525
  version?: number | undefined;
15336
15526
  mcp_servers?: Record<string, {
@@ -16165,6 +16355,22 @@ declare const researchSchema: z.ZodObject<{
16165
16355
  api_key: z.ZodString;
16166
16356
  base_url: z.ZodOptional<z.ZodString>;
16167
16357
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
16358
+ /**
16359
+ * 0.5.0 — a Thredz **wiki space** (Pro/Scale) to scope this agent's memory
16360
+ * to; becomes the synthesized server's `THREDZ_DEFAULT_SPACE`. A `shared`
16361
+ * space is readable by every wiki-enabled key on the account; an
16362
+ * `individual` space only by the key that owns it.
16363
+ *
16364
+ * The space TYPE is chosen when the space is created (over the API, or via
16365
+ * the model-callable `wiki_space_create`), not here — so this cannot be
16366
+ * validated at compile time and `visibility` is not cross-checked against
16367
+ * it. Inside a space the space's type decides visibility outright.
16368
+ *
16369
+ * ONE individual space per API KEY is a hard Thredz limit, so per-agent
16370
+ * private memory means a per-agent `api_key`. That is one `thredz:` block
16371
+ * per spec today; a crew gives each role its own (see the role-keyed form).
16372
+ */
16373
+ space: z.ZodOptional<z.ZodString>;
16168
16374
  goals: z.ZodOptional<z.ZodBoolean>;
16169
16375
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
16170
16376
  /**
@@ -16179,6 +16385,7 @@ declare const researchSchema: z.ZodObject<{
16179
16385
  api_key: string;
16180
16386
  base_url?: string | undefined;
16181
16387
  visibility?: "private" | "shared" | undefined;
16388
+ space?: string | undefined;
16182
16389
  goals?: boolean | undefined;
16183
16390
  agents?: string | boolean | undefined;
16184
16391
  messaging?: boolean | undefined;
@@ -16186,6 +16393,7 @@ declare const researchSchema: z.ZodObject<{
16186
16393
  api_key: string;
16187
16394
  base_url?: string | undefined;
16188
16395
  visibility?: "private" | "shared" | undefined;
16396
+ space?: string | undefined;
16189
16397
  goals?: boolean | undefined;
16190
16398
  agents?: string | boolean | undefined;
16191
16399
  messaging?: boolean | undefined;
@@ -16424,6 +16632,7 @@ declare const researchSchema: z.ZodObject<{
16424
16632
  api_key: string;
16425
16633
  base_url?: string | undefined;
16426
16634
  visibility?: "private" | "shared" | undefined;
16635
+ space?: string | undefined;
16427
16636
  goals?: boolean | undefined;
16428
16637
  agents?: string | boolean | undefined;
16429
16638
  messaging?: boolean | undefined;
@@ -16616,6 +16825,7 @@ declare const researchSchema: z.ZodObject<{
16616
16825
  api_key: string;
16617
16826
  base_url?: string | undefined;
16618
16827
  visibility?: "private" | "shared" | undefined;
16828
+ space?: string | undefined;
16619
16829
  goals?: boolean | undefined;
16620
16830
  agents?: string | boolean | undefined;
16621
16831
  messaging?: boolean | undefined;
@@ -21387,6 +21597,22 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
21387
21597
  api_key: z.ZodString;
21388
21598
  base_url: z.ZodOptional<z.ZodString>;
21389
21599
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
21600
+ /**
21601
+ * 0.5.0 — a Thredz **wiki space** (Pro/Scale) to scope this agent's memory
21602
+ * to; becomes the synthesized server's `THREDZ_DEFAULT_SPACE`. A `shared`
21603
+ * space is readable by every wiki-enabled key on the account; an
21604
+ * `individual` space only by the key that owns it.
21605
+ *
21606
+ * The space TYPE is chosen when the space is created (over the API, or via
21607
+ * the model-callable `wiki_space_create`), not here — so this cannot be
21608
+ * validated at compile time and `visibility` is not cross-checked against
21609
+ * it. Inside a space the space's type decides visibility outright.
21610
+ *
21611
+ * ONE individual space per API KEY is a hard Thredz limit, so per-agent
21612
+ * private memory means a per-agent `api_key`. That is one `thredz:` block
21613
+ * per spec today; a crew gives each role its own (see the role-keyed form).
21614
+ */
21615
+ space: z.ZodOptional<z.ZodString>;
21390
21616
  goals: z.ZodOptional<z.ZodBoolean>;
21391
21617
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
21392
21618
  /**
@@ -21401,6 +21627,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
21401
21627
  api_key: string;
21402
21628
  base_url?: string | undefined;
21403
21629
  visibility?: "private" | "shared" | undefined;
21630
+ space?: string | undefined;
21404
21631
  goals?: boolean | undefined;
21405
21632
  agents?: string | boolean | undefined;
21406
21633
  messaging?: boolean | undefined;
@@ -21408,6 +21635,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
21408
21635
  api_key: string;
21409
21636
  base_url?: string | undefined;
21410
21637
  visibility?: "private" | "shared" | undefined;
21638
+ space?: string | undefined;
21411
21639
  goals?: boolean | undefined;
21412
21640
  agents?: string | boolean | undefined;
21413
21641
  messaging?: boolean | undefined;
@@ -21914,6 +22142,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
21914
22142
  api_key: string;
21915
22143
  base_url?: string | undefined;
21916
22144
  visibility?: "private" | "shared" | undefined;
22145
+ space?: string | undefined;
21917
22146
  goals?: boolean | undefined;
21918
22147
  agents?: string | boolean | undefined;
21919
22148
  messaging?: boolean | undefined;
@@ -22249,6 +22478,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
22249
22478
  api_key: string;
22250
22479
  base_url?: string | undefined;
22251
22480
  visibility?: "private" | "shared" | undefined;
22481
+ space?: string | undefined;
22252
22482
  goals?: boolean | undefined;
22253
22483
  agents?: string | boolean | undefined;
22254
22484
  messaging?: boolean | undefined;
@@ -25024,6 +25254,22 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
25024
25254
  api_key: z.ZodString;
25025
25255
  base_url: z.ZodOptional<z.ZodString>;
25026
25256
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
25257
+ /**
25258
+ * 0.5.0 — a Thredz **wiki space** (Pro/Scale) to scope this agent's memory
25259
+ * to; becomes the synthesized server's `THREDZ_DEFAULT_SPACE`. A `shared`
25260
+ * space is readable by every wiki-enabled key on the account; an
25261
+ * `individual` space only by the key that owns it.
25262
+ *
25263
+ * The space TYPE is chosen when the space is created (over the API, or via
25264
+ * the model-callable `wiki_space_create`), not here — so this cannot be
25265
+ * validated at compile time and `visibility` is not cross-checked against
25266
+ * it. Inside a space the space's type decides visibility outright.
25267
+ *
25268
+ * ONE individual space per API KEY is a hard Thredz limit, so per-agent
25269
+ * private memory means a per-agent `api_key`. That is one `thredz:` block
25270
+ * per spec today; a crew gives each role its own (see the role-keyed form).
25271
+ */
25272
+ space: z.ZodOptional<z.ZodString>;
25027
25273
  goals: z.ZodOptional<z.ZodBoolean>;
25028
25274
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
25029
25275
  /**
@@ -25038,6 +25284,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
25038
25284
  api_key: string;
25039
25285
  base_url?: string | undefined;
25040
25286
  visibility?: "private" | "shared" | undefined;
25287
+ space?: string | undefined;
25041
25288
  goals?: boolean | undefined;
25042
25289
  agents?: string | boolean | undefined;
25043
25290
  messaging?: boolean | undefined;
@@ -25045,6 +25292,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
25045
25292
  api_key: string;
25046
25293
  base_url?: string | undefined;
25047
25294
  visibility?: "private" | "shared" | undefined;
25295
+ space?: string | undefined;
25048
25296
  goals?: boolean | undefined;
25049
25297
  agents?: string | boolean | undefined;
25050
25298
  messaging?: boolean | undefined;
@@ -25602,6 +25850,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
25602
25850
  api_key: string;
25603
25851
  base_url?: string | undefined;
25604
25852
  visibility?: "private" | "shared" | undefined;
25853
+ space?: string | undefined;
25605
25854
  goals?: boolean | undefined;
25606
25855
  agents?: string | boolean | undefined;
25607
25856
  messaging?: boolean | undefined;
@@ -25971,6 +26220,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
25971
26220
  api_key: string;
25972
26221
  base_url?: string | undefined;
25973
26222
  visibility?: "private" | "shared" | undefined;
26223
+ space?: string | undefined;
25974
26224
  goals?: boolean | undefined;
25975
26225
  agents?: string | boolean | undefined;
25976
26226
  messaging?: boolean | undefined;
@@ -28010,6 +28260,22 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
28010
28260
  api_key: z.ZodString;
28011
28261
  base_url: z.ZodOptional<z.ZodString>;
28012
28262
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
28263
+ /**
28264
+ * 0.5.0 — a Thredz **wiki space** (Pro/Scale) to scope this agent's memory
28265
+ * to; becomes the synthesized server's `THREDZ_DEFAULT_SPACE`. A `shared`
28266
+ * space is readable by every wiki-enabled key on the account; an
28267
+ * `individual` space only by the key that owns it.
28268
+ *
28269
+ * The space TYPE is chosen when the space is created (over the API, or via
28270
+ * the model-callable `wiki_space_create`), not here — so this cannot be
28271
+ * validated at compile time and `visibility` is not cross-checked against
28272
+ * it. Inside a space the space's type decides visibility outright.
28273
+ *
28274
+ * ONE individual space per API KEY is a hard Thredz limit, so per-agent
28275
+ * private memory means a per-agent `api_key`. That is one `thredz:` block
28276
+ * per spec today; a crew gives each role its own (see the role-keyed form).
28277
+ */
28278
+ space: z.ZodOptional<z.ZodString>;
28013
28279
  goals: z.ZodOptional<z.ZodBoolean>;
28014
28280
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
28015
28281
  /**
@@ -28024,6 +28290,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
28024
28290
  api_key: string;
28025
28291
  base_url?: string | undefined;
28026
28292
  visibility?: "private" | "shared" | undefined;
28293
+ space?: string | undefined;
28027
28294
  goals?: boolean | undefined;
28028
28295
  agents?: string | boolean | undefined;
28029
28296
  messaging?: boolean | undefined;
@@ -28031,6 +28298,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
28031
28298
  api_key: string;
28032
28299
  base_url?: string | undefined;
28033
28300
  visibility?: "private" | "shared" | undefined;
28301
+ space?: string | undefined;
28034
28302
  goals?: boolean | undefined;
28035
28303
  agents?: string | boolean | undefined;
28036
28304
  messaging?: boolean | undefined;
@@ -28421,6 +28689,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
28421
28689
  api_key: string;
28422
28690
  base_url?: string | undefined;
28423
28691
  visibility?: "private" | "shared" | undefined;
28692
+ space?: string | undefined;
28424
28693
  goals?: boolean | undefined;
28425
28694
  agents?: string | boolean | undefined;
28426
28695
  messaging?: boolean | undefined;
@@ -28700,6 +28969,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
28700
28969
  api_key: string;
28701
28970
  base_url?: string | undefined;
28702
28971
  visibility?: "private" | "shared" | undefined;
28972
+ space?: string | undefined;
28703
28973
  goals?: boolean | undefined;
28704
28974
  agents?: string | boolean | undefined;
28705
28975
  messaging?: boolean | undefined;
@@ -30432,34 +30702,108 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
30432
30702
  scope?: "auto" | "spec" | "session" | undefined;
30433
30703
  focusMaxChars?: number | undefined;
30434
30704
  }>]>>;
30435
- thredz: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString, z.ZodObject<{
30436
- api_key: z.ZodString;
30705
+ thredz: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString, z.ZodEffects<z.ZodObject<{
30437
30706
  base_url: z.ZodOptional<z.ZodString>;
30438
30707
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
30708
+ space: z.ZodOptional<z.ZodString>;
30439
30709
  goals: z.ZodOptional<z.ZodBoolean>;
30440
30710
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
30441
- /**
30442
- * Item 5 (G44) — enable the nine Thredz messaging tools (`message_send`
30443
- * / `inbox_poll` / `message_ack` / `thread_get` / `agent_*`). DEFAULT
30444
- * false: the send-side tools are destructive + justification-gated, so
30445
- * they stay off unless the author asks. The Thredz server side is already
30446
- * live (thredz-api) — this flips their registration on.
30447
- */
30448
30711
  messaging: z.ZodOptional<z.ZodBoolean>;
30712
+ } & {
30713
+ api_key: z.ZodOptional<z.ZodString>;
30714
+ roles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
30715
+ api_key: z.ZodOptional<z.ZodString>;
30716
+ base_url: z.ZodOptional<z.ZodString>;
30717
+ visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
30718
+ space: z.ZodOptional<z.ZodString>;
30719
+ goals: z.ZodOptional<z.ZodBoolean>;
30720
+ agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
30721
+ messaging: z.ZodOptional<z.ZodBoolean>;
30722
+ }, "strict", z.ZodTypeAny, {
30723
+ api_key?: string | undefined;
30724
+ base_url?: string | undefined;
30725
+ visibility?: "private" | "shared" | undefined;
30726
+ space?: string | undefined;
30727
+ goals?: boolean | undefined;
30728
+ agents?: string | boolean | undefined;
30729
+ messaging?: boolean | undefined;
30730
+ }, {
30731
+ api_key?: string | undefined;
30732
+ base_url?: string | undefined;
30733
+ visibility?: "private" | "shared" | undefined;
30734
+ space?: string | undefined;
30735
+ goals?: boolean | undefined;
30736
+ agents?: string | boolean | undefined;
30737
+ messaging?: boolean | undefined;
30738
+ }>>>;
30449
30739
  }, "strict", z.ZodTypeAny, {
30450
- api_key: string;
30740
+ api_key?: string | undefined;
30451
30741
  base_url?: string | undefined;
30452
30742
  visibility?: "private" | "shared" | undefined;
30743
+ space?: string | undefined;
30453
30744
  goals?: boolean | undefined;
30454
30745
  agents?: string | boolean | undefined;
30455
30746
  messaging?: boolean | undefined;
30747
+ roles?: Record<string, {
30748
+ api_key?: string | undefined;
30749
+ base_url?: string | undefined;
30750
+ visibility?: "private" | "shared" | undefined;
30751
+ space?: string | undefined;
30752
+ goals?: boolean | undefined;
30753
+ agents?: string | boolean | undefined;
30754
+ messaging?: boolean | undefined;
30755
+ }> | undefined;
30456
30756
  }, {
30457
- api_key: string;
30757
+ api_key?: string | undefined;
30458
30758
  base_url?: string | undefined;
30459
30759
  visibility?: "private" | "shared" | undefined;
30760
+ space?: string | undefined;
30460
30761
  goals?: boolean | undefined;
30461
30762
  agents?: string | boolean | undefined;
30462
30763
  messaging?: boolean | undefined;
30764
+ roles?: Record<string, {
30765
+ api_key?: string | undefined;
30766
+ base_url?: string | undefined;
30767
+ visibility?: "private" | "shared" | undefined;
30768
+ space?: string | undefined;
30769
+ goals?: boolean | undefined;
30770
+ agents?: string | boolean | undefined;
30771
+ messaging?: boolean | undefined;
30772
+ }> | undefined;
30773
+ }>, {
30774
+ api_key?: string | undefined;
30775
+ base_url?: string | undefined;
30776
+ visibility?: "private" | "shared" | undefined;
30777
+ space?: string | undefined;
30778
+ goals?: boolean | undefined;
30779
+ agents?: string | boolean | undefined;
30780
+ messaging?: boolean | undefined;
30781
+ roles?: Record<string, {
30782
+ api_key?: string | undefined;
30783
+ base_url?: string | undefined;
30784
+ visibility?: "private" | "shared" | undefined;
30785
+ space?: string | undefined;
30786
+ goals?: boolean | undefined;
30787
+ agents?: string | boolean | undefined;
30788
+ messaging?: boolean | undefined;
30789
+ }> | undefined;
30790
+ }, {
30791
+ api_key?: string | undefined;
30792
+ base_url?: string | undefined;
30793
+ visibility?: "private" | "shared" | undefined;
30794
+ space?: string | undefined;
30795
+ goals?: boolean | undefined;
30796
+ agents?: string | boolean | undefined;
30797
+ messaging?: boolean | undefined;
30798
+ roles?: Record<string, {
30799
+ api_key?: string | undefined;
30800
+ base_url?: string | undefined;
30801
+ visibility?: "private" | "shared" | undefined;
30802
+ space?: string | undefined;
30803
+ goals?: boolean | undefined;
30804
+ agents?: string | boolean | undefined;
30805
+ messaging?: boolean | undefined;
30806
+ }> | undefined;
30463
30807
  }>]>>;
30464
30808
  learning: z.ZodOptional<z.ZodObject<{
30465
30809
  enabled: z.ZodOptional<z.ZodBoolean>;
@@ -30782,9 +31126,6 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
30782
31126
  }>>;
30783
31127
  }, "strict", z.ZodTypeAny, {
30784
31128
  model: string;
30785
- name: string;
30786
- target: "crew";
30787
- entry: string;
30788
31129
  roles: Record<string, {
30789
31130
  instructions: string;
30790
31131
  tools?: string[] | undefined;
@@ -30854,6 +31195,9 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
30854
31195
  }> | undefined;
30855
31196
  tool_config?: Record<string, unknown> | undefined;
30856
31197
  }>;
31198
+ name: string;
31199
+ target: "crew";
31200
+ entry: string;
30857
31201
  permissions?: {
30858
31202
  mode?: "default" | "plan" | "auto" | undefined;
30859
31203
  rules?: {
@@ -30884,12 +31228,22 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
30884
31228
  } | undefined;
30885
31229
  } | undefined;
30886
31230
  thredz?: string | boolean | {
30887
- api_key: string;
31231
+ api_key?: string | undefined;
30888
31232
  base_url?: string | undefined;
30889
31233
  visibility?: "private" | "shared" | undefined;
31234
+ space?: string | undefined;
30890
31235
  goals?: boolean | undefined;
30891
31236
  agents?: string | boolean | undefined;
30892
31237
  messaging?: boolean | undefined;
31238
+ roles?: Record<string, {
31239
+ api_key?: string | undefined;
31240
+ base_url?: string | undefined;
31241
+ visibility?: "private" | "shared" | undefined;
31242
+ space?: string | undefined;
31243
+ goals?: boolean | undefined;
31244
+ agents?: string | boolean | undefined;
31245
+ messaging?: boolean | undefined;
31246
+ }> | undefined;
30893
31247
  } | undefined;
30894
31248
  version?: number | undefined;
30895
31249
  mcp_servers?: Record<string, {
@@ -31050,9 +31404,6 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
31050
31404
  } | undefined;
31051
31405
  }, {
31052
31406
  model: string;
31053
- name: string;
31054
- target: "crew";
31055
- entry: string;
31056
31407
  roles: Record<string, {
31057
31408
  instructions: string;
31058
31409
  tools?: string[] | undefined;
@@ -31122,6 +31473,9 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
31122
31473
  }> | undefined;
31123
31474
  tool_config?: Record<string, unknown> | undefined;
31124
31475
  }>;
31476
+ name: string;
31477
+ target: "crew";
31478
+ entry: string;
31125
31479
  permissions?: {
31126
31480
  mode?: "default" | "plan" | "auto" | undefined;
31127
31481
  rules?: {
@@ -31152,12 +31506,22 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
31152
31506
  } | undefined;
31153
31507
  } | undefined;
31154
31508
  thredz?: string | boolean | {
31155
- api_key: string;
31509
+ api_key?: string | undefined;
31156
31510
  base_url?: string | undefined;
31157
31511
  visibility?: "private" | "shared" | undefined;
31512
+ space?: string | undefined;
31158
31513
  goals?: boolean | undefined;
31159
31514
  agents?: string | boolean | undefined;
31160
31515
  messaging?: boolean | undefined;
31516
+ roles?: Record<string, {
31517
+ api_key?: string | undefined;
31518
+ base_url?: string | undefined;
31519
+ visibility?: "private" | "shared" | undefined;
31520
+ space?: string | undefined;
31521
+ goals?: boolean | undefined;
31522
+ agents?: string | boolean | undefined;
31523
+ messaging?: boolean | undefined;
31524
+ }> | undefined;
31161
31525
  } | undefined;
31162
31526
  version?: number | undefined;
31163
31527
  mcp_servers?: Record<string, {
@@ -31978,6 +32342,22 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
31978
32342
  api_key: z.ZodString;
31979
32343
  base_url: z.ZodOptional<z.ZodString>;
31980
32344
  visibility: z.ZodOptional<z.ZodEnum<["private", "shared"]>>;
32345
+ /**
32346
+ * 0.5.0 — a Thredz **wiki space** (Pro/Scale) to scope this agent's memory
32347
+ * to; becomes the synthesized server's `THREDZ_DEFAULT_SPACE`. A `shared`
32348
+ * space is readable by every wiki-enabled key on the account; an
32349
+ * `individual` space only by the key that owns it.
32350
+ *
32351
+ * The space TYPE is chosen when the space is created (over the API, or via
32352
+ * the model-callable `wiki_space_create`), not here — so this cannot be
32353
+ * validated at compile time and `visibility` is not cross-checked against
32354
+ * it. Inside a space the space's type decides visibility outright.
32355
+ *
32356
+ * ONE individual space per API KEY is a hard Thredz limit, so per-agent
32357
+ * private memory means a per-agent `api_key`. That is one `thredz:` block
32358
+ * per spec today; a crew gives each role its own (see the role-keyed form).
32359
+ */
32360
+ space: z.ZodOptional<z.ZodString>;
31981
32361
  goals: z.ZodOptional<z.ZodBoolean>;
31982
32362
  agents: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
31983
32363
  /**
@@ -31992,6 +32372,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
31992
32372
  api_key: string;
31993
32373
  base_url?: string | undefined;
31994
32374
  visibility?: "private" | "shared" | undefined;
32375
+ space?: string | undefined;
31995
32376
  goals?: boolean | undefined;
31996
32377
  agents?: string | boolean | undefined;
31997
32378
  messaging?: boolean | undefined;
@@ -31999,6 +32380,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
31999
32380
  api_key: string;
32000
32381
  base_url?: string | undefined;
32001
32382
  visibility?: "private" | "shared" | undefined;
32383
+ space?: string | undefined;
32002
32384
  goals?: boolean | undefined;
32003
32385
  agents?: string | boolean | undefined;
32004
32386
  messaging?: boolean | undefined;
@@ -32237,6 +32619,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
32237
32619
  api_key: string;
32238
32620
  base_url?: string | undefined;
32239
32621
  visibility?: "private" | "shared" | undefined;
32622
+ space?: string | undefined;
32240
32623
  goals?: boolean | undefined;
32241
32624
  agents?: string | boolean | undefined;
32242
32625
  messaging?: boolean | undefined;
@@ -32429,6 +32812,7 @@ export declare const Spec: z.ZodDiscriminatedUnion<"target", [z.ZodObject<{
32429
32812
  api_key: string;
32430
32813
  base_url?: string | undefined;
32431
32814
  visibility?: "private" | "shared" | undefined;
32815
+ space?: string | undefined;
32432
32816
  goals?: boolean | undefined;
32433
32817
  agents?: string | boolean | undefined;
32434
32818
  messaging?: boolean | undefined;
package/dist/index.js CHANGED
@@ -1110,7 +1110,8 @@ const continuityBlock = z.union([z.boolean(), continuityObject]).optional();
1110
1110
  /**
1111
1111
  * v0.3.0 Goal 3 (§4.1) — the top-level `thredz:` block: ONE knob that flips
1112
1112
  * the memory fabric's wiki backend to a hosted Thredz wiki over the published
1113
- * `thredz-mcp` stdio server (npm, v0.2.0 — 25 tools incl. `goal_*`/`task_*`).
1113
+ * `thredz-mcp` stdio server (npm, v0.3.0 — 27 tools incl. `goal_*`/`task_*`
1114
+ * and the `wiki_space_*` pair).
1114
1115
  *
1115
1116
  * Forms:
1116
1117
  * - boolean shorthand: `thredz: true` ≡ `{ api_key: "$THREDZ_API_KEY" }`
@@ -1142,6 +1143,22 @@ const thredzObject = z
1142
1143
  api_key: z.string().min(1),
1143
1144
  base_url: z.string().url().optional(),
1144
1145
  visibility: z.enum(["private", "shared"]).optional(),
1146
+ /**
1147
+ * 0.5.0 — a Thredz **wiki space** (Pro/Scale) to scope this agent's memory
1148
+ * to; becomes the synthesized server's `THREDZ_DEFAULT_SPACE`. A `shared`
1149
+ * space is readable by every wiki-enabled key on the account; an
1150
+ * `individual` space only by the key that owns it.
1151
+ *
1152
+ * The space TYPE is chosen when the space is created (over the API, or via
1153
+ * the model-callable `wiki_space_create`), not here — so this cannot be
1154
+ * validated at compile time and `visibility` is not cross-checked against
1155
+ * it. Inside a space the space's type decides visibility outright.
1156
+ *
1157
+ * ONE individual space per API KEY is a hard Thredz limit, so per-agent
1158
+ * private memory means a per-agent `api_key`. That is one `thredz:` block
1159
+ * per spec today; a crew gives each role its own (see the role-keyed form).
1160
+ */
1161
+ space: z.string().min(1).optional(),
1145
1162
  goals: z.boolean().optional(),
1146
1163
  agents: z
1147
1164
  .union([
@@ -1162,6 +1179,48 @@ const thredzObject = z
1162
1179
  })
1163
1180
  .strict();
1164
1181
  const thredzBlock = z.union([z.boolean(), z.string().min(1), thredzObject]).optional();
1182
+ /**
1183
+ * 0.5.0 — the CREW-ONLY superset of {@link thredzObject}. `roles` fans the
1184
+ * block out per role so each role can carry its OWN `api_key` and its own
1185
+ * `space`; every other field at this level is the DEFAULT a role inherits and
1186
+ * may override.
1187
+ *
1188
+ * WHY THE MAP LIVES HERE, under `thredz.roles.<role>`, and NOT on the role as
1189
+ * `roles.<role>.thredz` — this is load-bearing, not taste. Two security
1190
+ * surfaces prefix-match on `["thredz"]`:
1191
+ *
1192
+ * - `@crewhaus/spec-patch`'s `OPTIMIZABLE_PATHS.crew` allows `["roles"]`
1193
+ * (whole-role replacement) and matches by PREFIX. Under `roles.*`, a
1194
+ * role's `api_key` would become optimizer-reachable and
1195
+ * `optimize --write-back` could rewrite a credential.
1196
+ * - the hangar's spec editor denies the `["thredz"]` prefix outright
1197
+ * ("thredz crosses the harness boundary to a hosted wiki"). Under
1198
+ * `roles.*`, `api_key` would be editable from a browser.
1199
+ *
1200
+ * Keeping the fan-out under `thredz.` inherits both protections with zero
1201
+ * code change. The `^thredz:` header/badge regexes keep matching too.
1202
+ *
1203
+ * `api_key` is optional ONLY here: a pure fan-out crew gives every role its
1204
+ * own key and needs no crew-wide one. The refinement below enforces that at
1205
+ * least one of the two exists.
1206
+ */
1207
+ const crewThredzObject = thredzObject
1208
+ .extend({
1209
+ api_key: z.string().min(1).optional(),
1210
+ roles: z.record(safeName, thredzObject.partial({ api_key: true })).optional(),
1211
+ })
1212
+ .strict()
1213
+ .superRefine((t, ctx) => {
1214
+ const fanOut = t.roles !== undefined && Object.keys(t.roles).length > 0;
1215
+ if (!fanOut && t.api_key === undefined) {
1216
+ ctx.addIssue({
1217
+ code: "custom",
1218
+ message: "thredz.api_key is required unless thredz.roles gives each role its own key (one individual wiki space per API key is a hard Thredz limit, so per-role private memory needs per-role keys)",
1219
+ });
1220
+ }
1221
+ });
1222
+ /** The crew mount: the shorthands still work, plus the role-keyed superset. */
1223
+ const crewThredzBlock = z.union([z.boolean(), z.string().min(1), crewThredzObject]).optional();
1165
1224
  /**
1166
1225
  * v0.3.0 Goal 2 (§3.3, PR 17) — the top-level `learning:` block: continual
1167
1226
  * learning as a first-class capability. Presence (with `enabled` not `false`)
@@ -2250,7 +2309,7 @@ const crewSchema = z
2250
2309
  // surface, §2.7).
2251
2310
  memory: memoryBlock,
2252
2311
  continuity: continuityBlock,
2253
- thredz: thredzBlock,
2312
+ thredz: crewThredzBlock,
2254
2313
  learning: learningBlock,
2255
2314
  // Loop contract 0.4 (Batch C, G26) — crew joins the observability-carrying
2256
2315
  // shapes (cli/channel/managed): the orchestrator's cost/trace/metrics/
@@ -2647,6 +2706,48 @@ function crossFieldIssues(data) {
2647
2706
  if (roleNames.length > 0 && !roleNames.includes(data.entry)) {
2648
2707
  custom(["entry"], `crew.entry "${data.entry}" must name one of crew.roles (got: ${roleNames.join(", ")})`);
2649
2708
  }
2709
+ // 0.5.0 — the role-keyed thredz fan-out. Both checks are cross-field, so
2710
+ // they cannot live in the schema: `thredz.roles` and `roles` are siblings.
2711
+ const crewThredz = data.thredz;
2712
+ if (typeof crewThredz === "object" && crewThredz !== null && "roles" in crewThredz) {
2713
+ const fanOut = crewThredz.roles;
2714
+ const inheritedKey = crewThredz.api_key;
2715
+ if (fanOut !== undefined) {
2716
+ for (const name of Object.keys(fanOut)) {
2717
+ if (!roleNames.includes(name)) {
2718
+ custom(["thredz", "roles", name], `thredz.roles["${name}"]: no such role — crew.roles declares ${roleNames.join(", ")}`);
2719
+ }
2720
+ }
2721
+ // Every role must resolve to a key: its own, or the inherited one. A
2722
+ // role with neither would silently get NO hosted wiki while its
2723
+ // siblings got one, which is the kind of gap you find in production.
2724
+ if (inheritedKey === undefined) {
2725
+ for (const name of roleNames) {
2726
+ if (fanOut[name]?.api_key === undefined) {
2727
+ custom(["thredz", "roles", name], `role "${name}" has no Thredz api_key and thredz.api_key is not set — give it one, or set a crew-wide thredz.api_key for the roles that share a wiki`);
2728
+ }
2729
+ }
2730
+ }
2731
+ // Two role names that slugify to the same MCP server name would make
2732
+ // one silently overwrite the other's server entry.
2733
+ const slugs = new Map();
2734
+ for (const name of Object.keys(fanOut)) {
2735
+ const slug = name
2736
+ .toLowerCase()
2737
+ .replace(/[^a-z0-9]+/g, "-")
2738
+ .replace(/^-+|-+$/g, "");
2739
+ if (slug === "") {
2740
+ custom(["thredz", "roles", name], `thredz.roles["${name}"]: the role name has no characters usable in an MCP server name — rename the role`);
2741
+ continue;
2742
+ }
2743
+ const clash = slugs.get(slug);
2744
+ if (clash !== undefined) {
2745
+ custom(["thredz", "roles", name], `thredz.roles["${name}"] and thredz.roles["${clash}"] both reduce to the MCP server name "thredz-${slug}" — rename one`);
2746
+ }
2747
+ slugs.set(slug, name);
2748
+ }
2749
+ }
2750
+ }
2650
2751
  if (data.routing !== undefined && data.routing.kind === "match" && data.routing.match) {
2651
2752
  for (const [from, rules] of Object.entries(data.routing.match)) {
2652
2753
  if (!roleNames.includes(from)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewhaus/spec",
3
- "version": "0.4.2",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "description": "User-facing spec schema (Zod) + YAML parser",
6
6
  "main": "dist/index.js",
@@ -15,7 +15,7 @@
15
15
  "test": "bun test src"
16
16
  },
17
17
  "dependencies": {
18
- "@crewhaus/errors": "0.4.2",
18
+ "@crewhaus/errors": "0.5.0",
19
19
  "yaml": "^2.6.0",
20
20
  "zod": "^3.23.8",
21
21
  "zod-to-json-schema": "^3.23.5"