@treeseed/sdk 0.10.23 → 0.10.25

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 (49) hide show
  1. package/dist/index.d.ts +12 -2
  2. package/dist/index.js +42 -1
  3. package/dist/market-client.d.ts +23 -0
  4. package/dist/market-client.js +30 -0
  5. package/dist/operations/providers/default.js +103 -10
  6. package/dist/operations/repository-operations.d.ts +6 -1
  7. package/dist/operations/repository-operations.js +44 -0
  8. package/dist/operations/services/bootstrap-runner.d.ts +5 -1
  9. package/dist/operations/services/bootstrap-runner.js +34 -5
  10. package/dist/operations/services/config-runtime.d.ts +25 -9
  11. package/dist/operations/services/config-runtime.js +60 -12
  12. package/dist/operations/services/deploy.js +6 -1
  13. package/dist/operations/services/hub-launch.js +1 -0
  14. package/dist/operations/services/hub-provider-launch.d.ts +11 -1
  15. package/dist/operations/services/hub-provider-launch.js +81 -8
  16. package/dist/operations/services/project-host-operations.d.ts +153 -0
  17. package/dist/operations/services/project-host-operations.js +365 -0
  18. package/dist/operations/services/project-platform.d.ts +207 -177
  19. package/dist/operations/services/project-platform.js +96 -29
  20. package/dist/operations/services/railway-deploy.d.ts +33 -1
  21. package/dist/operations/services/railway-deploy.js +153 -44
  22. package/dist/operations/services/release-candidate.js +8 -2
  23. package/dist/operations/services/template-host-bindings.d.ts +68 -0
  24. package/dist/operations/services/template-host-bindings.js +400 -0
  25. package/dist/operations/services/template-registry.d.ts +22 -2
  26. package/dist/operations/services/template-registry.js +93 -6
  27. package/dist/operations/services/template-secret-sync.d.ts +97 -0
  28. package/dist/operations/services/template-secret-sync.js +292 -0
  29. package/dist/platform/contracts.d.ts +1 -0
  30. package/dist/platform/deploy-config.js +8 -1
  31. package/dist/platform/deploy-runtime.js +1 -0
  32. package/dist/platform/environment.d.ts +3 -0
  33. package/dist/project-workflow.d.ts +7 -1
  34. package/dist/reconcile/engine.d.ts +2 -0
  35. package/dist/reconcile/engine.js +58 -3
  36. package/dist/scripts/scaffold-site.js +3 -2
  37. package/dist/scripts/test-scaffold.js +2 -1
  38. package/dist/sdk-types.d.ts +87 -0
  39. package/dist/sdk-types.js +29 -0
  40. package/dist/template-catalog.js +3 -1
  41. package/dist/template-launch-requirements.d.ts +118 -0
  42. package/dist/template-launch-requirements.js +759 -0
  43. package/dist/template-launch-ui.d.ts +85 -0
  44. package/dist/template-launch-ui.js +189 -0
  45. package/dist/timing.d.ts +20 -0
  46. package/dist/timing.js +73 -0
  47. package/dist/treeseed/template-catalog/catalog.fixture.json +477 -0
  48. package/package.json +13 -1
  49. package/templates/github/deploy-web.workflow.yml +4 -0
@@ -47,6 +47,483 @@
47
47
  "relatedBooks": [],
48
48
  "relatedKnowledge": [],
49
49
  "relatedObjectives": []
50
+ },
51
+ {
52
+ "id": "starter-research",
53
+ "displayName": "TreeSeed Research",
54
+ "description": "First-party TreeSeed starter for freestanding research projects and knowledge-pack publishing.",
55
+ "summary": "A research starter for building source-backed books, gathered assets, synthesis notes, and reusable knowledge packs.",
56
+ "status": "live",
57
+ "featured": true,
58
+ "category": "starter",
59
+ "audience": [
60
+ "researchers",
61
+ "maintainers"
62
+ ],
63
+ "tags": [
64
+ "starter",
65
+ "research",
66
+ "books",
67
+ "knowledge-packs",
68
+ "agents"
69
+ ],
70
+ "publisher": {
71
+ "id": "treeseed",
72
+ "name": "TreeSeed",
73
+ "url": "https://treeseed.ai"
74
+ },
75
+ "publisherVerified": true,
76
+ "templateVersion": "1.0.0",
77
+ "templateApiVersion": 1,
78
+ "minCliVersion": "0.1.1",
79
+ "minCoreVersion": "0.1.2",
80
+ "fulfillment": {
81
+ "mode": "git",
82
+ "source": {
83
+ "kind": "git",
84
+ "repoUrl": "https://github.com/treeseed-ai/starter-research.git",
85
+ "directory": ".",
86
+ "ref": "staging",
87
+ "integrity": "pending-external-repo"
88
+ },
89
+ "hooksPolicy": "builtin_only",
90
+ "supportsReconcile": true
91
+ },
92
+ "offer": {
93
+ "priceModel": "free",
94
+ "license": "AGPL-3.0-only",
95
+ "support": "community"
96
+ },
97
+ "launchRequirements": {
98
+ "version": 1,
99
+ "hosts": [
100
+ {
101
+ "kind": "host",
102
+ "key": "sourceRepository",
103
+ "type": "repository",
104
+ "required": true,
105
+ "compatibleProviders": ["github"],
106
+ "displayName": "Source repository",
107
+ "purpose": "Create and push the generated research project repository.",
108
+ "defaultSelection": "team-default",
109
+ "configWrites": [
110
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.provider", "valueFrom": "selectedHost.provider" },
111
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.owner", "valueFrom": "selectedHost.github.owner" },
112
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.repository", "valueFrom": "derived.repositoryName" }
113
+ ],
114
+ "environmentWrites": [
115
+ { "env": "GITHUB_TOKEN", "valueFrom": "selectedHost.token", "targets": ["github-secret"], "scopes": ["staging", "prod"], "sensitivity": "secret" }
116
+ ]
117
+ },
118
+ {
119
+ "kind": "host",
120
+ "key": "publicWeb",
121
+ "type": "web",
122
+ "required": true,
123
+ "compatibleProviders": ["cloudflare"],
124
+ "displayName": "Public web host",
125
+ "purpose": "Deploy the research site, previews, content storage, and web runtime resources.",
126
+ "defaultSelection": "managed",
127
+ "configWrites": [
128
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.publicWeb.provider", "valueFrom": "selectedHost.provider" },
129
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.provider", "valueFrom": "selectedHost.provider" },
130
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.environments.prod.domain", "valueFrom": "launchInput.domains.productionDomain", "writeWhen": "host-selected" },
131
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.environments.staging.domain", "valueFrom": "launchInput.domains.stagingDomain", "writeWhen": "host-selected" }
132
+ ],
133
+ "environmentWrites": [
134
+ { "env": "TREESEED_PUBLIC_WEB_PROVIDER", "valueFrom": "selectedHost.provider", "targets": ["github-variable", "cloudflare-var"], "scopes": ["staging", "prod"], "sensitivity": "plain" }
135
+ ]
136
+ },
137
+ {
138
+ "kind": "host",
139
+ "key": "transactionalEmail",
140
+ "type": "email",
141
+ "required": false,
142
+ "compatibleProviders": ["smtp"],
143
+ "displayName": "Transactional email",
144
+ "purpose": "Send form, account, and research project notification email.",
145
+ "defaultSelection": "managed",
146
+ "configWrites": [
147
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.transactionalEmail.provider", "valueFrom": "selectedHost.provider", "writeWhen": "host-selected" }
148
+ ],
149
+ "environmentWrites": [
150
+ { "env": "SMTP_HOST", "valueFrom": "selectedHost.smtpHost", "targets": ["github-secret", "railway-secret"], "scopes": ["staging", "prod"], "sensitivity": "secret" }
151
+ ]
152
+ }
153
+ ]
154
+ },
155
+ "relatedBooks": [],
156
+ "relatedKnowledge": [],
157
+ "relatedObjectives": []
158
+ },
159
+ {
160
+ "id": "starter-engineering",
161
+ "displayName": "TreeSeed Engineering",
162
+ "description": "First-party TreeSeed starter for integrated software guidance, docs, and engineering agents.",
163
+ "summary": "An engineering starter for guiding software projects with research, architecture, implementation, review, and release agents.",
164
+ "status": "live",
165
+ "featured": true,
166
+ "category": "starter",
167
+ "audience": [
168
+ "engineers",
169
+ "maintainers"
170
+ ],
171
+ "tags": [
172
+ "starter",
173
+ "engineering",
174
+ "software",
175
+ "docs",
176
+ "agents"
177
+ ],
178
+ "publisher": {
179
+ "id": "treeseed",
180
+ "name": "TreeSeed",
181
+ "url": "https://treeseed.ai"
182
+ },
183
+ "publisherVerified": true,
184
+ "templateVersion": "1.0.0",
185
+ "templateApiVersion": 1,
186
+ "minCliVersion": "0.1.1",
187
+ "minCoreVersion": "0.1.2",
188
+ "fulfillment": {
189
+ "mode": "git",
190
+ "source": {
191
+ "kind": "git",
192
+ "repoUrl": "https://github.com/treeseed-ai/starter-engineering.git",
193
+ "directory": ".",
194
+ "ref": "staging",
195
+ "integrity": "pending-external-repo"
196
+ },
197
+ "hooksPolicy": "builtin_only",
198
+ "supportsReconcile": true
199
+ },
200
+ "offer": {
201
+ "priceModel": "free",
202
+ "license": "AGPL-3.0-only",
203
+ "support": "community"
204
+ },
205
+ "launchRequirements": {
206
+ "version": 1,
207
+ "hosts": [
208
+ {
209
+ "kind": "host",
210
+ "key": "sourceRepository",
211
+ "type": "repository",
212
+ "required": true,
213
+ "compatibleProviders": ["github"],
214
+ "displayName": "Source repository",
215
+ "purpose": "Create and push the generated engineering project repository.",
216
+ "defaultSelection": "team-default",
217
+ "configWrites": [
218
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.provider", "valueFrom": "selectedHost.provider" },
219
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.owner", "valueFrom": "selectedHost.github.owner" },
220
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.repository", "valueFrom": "derived.repositoryName" }
221
+ ],
222
+ "environmentWrites": [
223
+ { "env": "GITHUB_TOKEN", "valueFrom": "selectedHost.token", "targets": ["github-secret"], "scopes": ["staging", "prod"], "sensitivity": "secret" }
224
+ ]
225
+ },
226
+ {
227
+ "kind": "host",
228
+ "key": "publicWeb",
229
+ "type": "web",
230
+ "required": true,
231
+ "compatibleProviders": ["cloudflare"],
232
+ "displayName": "Public web host",
233
+ "purpose": "Deploy the engineering site, previews, content storage, and web runtime resources.",
234
+ "defaultSelection": "managed",
235
+ "configWrites": [
236
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.publicWeb.provider", "valueFrom": "selectedHost.provider" },
237
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.provider", "valueFrom": "selectedHost.provider" },
238
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.environments.prod.domain", "valueFrom": "launchInput.domains.productionDomain", "writeWhen": "host-selected" },
239
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.environments.staging.domain", "valueFrom": "launchInput.domains.stagingDomain", "writeWhen": "host-selected" }
240
+ ],
241
+ "environmentWrites": [
242
+ { "env": "TREESEED_PUBLIC_WEB_PROVIDER", "valueFrom": "selectedHost.provider", "targets": ["github-variable", "cloudflare-var"], "scopes": ["staging", "prod"], "sensitivity": "plain" }
243
+ ]
244
+ },
245
+ {
246
+ "kind": "host",
247
+ "key": "transactionalEmail",
248
+ "type": "email",
249
+ "required": false,
250
+ "compatibleProviders": ["smtp"],
251
+ "displayName": "Transactional email",
252
+ "purpose": "Send form, account, and engineering project notification email.",
253
+ "defaultSelection": "managed",
254
+ "configWrites": [
255
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.transactionalEmail.provider", "valueFrom": "selectedHost.provider", "writeWhen": "host-selected" }
256
+ ],
257
+ "environmentWrites": [
258
+ { "env": "SMTP_HOST", "valueFrom": "selectedHost.smtpHost", "targets": ["github-secret", "railway-secret"], "scopes": ["staging", "prod"], "sensitivity": "secret" }
259
+ ]
260
+ }
261
+ ]
262
+ },
263
+ "relatedBooks": [],
264
+ "relatedKnowledge": [],
265
+ "relatedObjectives": []
266
+ },
267
+ {
268
+ "id": "starter-information-hub",
269
+ "displayName": "TreeSeed Information Hub",
270
+ "description": "First-party TreeSeed starter for recurring information retrieval, distillation, and downstream distribution.",
271
+ "summary": "An information distribution starter for retrieving updates over time, distilling derived knowledge, and packaging it for downstream projects.",
272
+ "status": "live",
273
+ "featured": true,
274
+ "category": "starter",
275
+ "audience": [
276
+ "curators",
277
+ "maintainers"
278
+ ],
279
+ "tags": [
280
+ "starter",
281
+ "information-hub",
282
+ "distribution",
283
+ "knowledge-packs",
284
+ "agents"
285
+ ],
286
+ "publisher": {
287
+ "id": "treeseed",
288
+ "name": "TreeSeed",
289
+ "url": "https://treeseed.ai"
290
+ },
291
+ "publisherVerified": true,
292
+ "templateVersion": "1.0.0",
293
+ "templateApiVersion": 1,
294
+ "minCliVersion": "0.1.1",
295
+ "minCoreVersion": "0.1.2",
296
+ "fulfillment": {
297
+ "mode": "git",
298
+ "source": {
299
+ "kind": "git",
300
+ "repoUrl": "https://github.com/treeseed-ai/starter-information-hub.git",
301
+ "directory": ".",
302
+ "ref": "staging",
303
+ "integrity": "pending-external-repo"
304
+ },
305
+ "hooksPolicy": "builtin_only",
306
+ "supportsReconcile": true
307
+ },
308
+ "offer": {
309
+ "priceModel": "free",
310
+ "license": "AGPL-3.0-only",
311
+ "support": "community"
312
+ },
313
+ "launchRequirements": {
314
+ "version": 1,
315
+ "hosts": [
316
+ {
317
+ "kind": "host",
318
+ "key": "sourceRepository",
319
+ "type": "repository",
320
+ "required": true,
321
+ "compatibleProviders": ["github"],
322
+ "displayName": "Source repository",
323
+ "purpose": "Create and push the generated information hub project repository.",
324
+ "defaultSelection": "team-default",
325
+ "configWrites": [
326
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.provider", "valueFrom": "selectedHost.provider" },
327
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.owner", "valueFrom": "selectedHost.github.owner" },
328
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.repository", "valueFrom": "derived.repositoryName" }
329
+ ],
330
+ "environmentWrites": [
331
+ { "env": "GITHUB_TOKEN", "valueFrom": "selectedHost.token", "targets": ["github-secret"], "scopes": ["staging", "prod"], "sensitivity": "secret" }
332
+ ]
333
+ },
334
+ {
335
+ "kind": "host",
336
+ "key": "publicWeb",
337
+ "type": "web",
338
+ "required": true,
339
+ "compatibleProviders": ["cloudflare"],
340
+ "displayName": "Public web host",
341
+ "purpose": "Deploy the information hub site, previews, content storage, and web runtime resources.",
342
+ "defaultSelection": "managed",
343
+ "configWrites": [
344
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.publicWeb.provider", "valueFrom": "selectedHost.provider" },
345
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.provider", "valueFrom": "selectedHost.provider" },
346
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.environments.prod.domain", "valueFrom": "launchInput.domains.productionDomain", "writeWhen": "host-selected" },
347
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.environments.staging.domain", "valueFrom": "launchInput.domains.stagingDomain", "writeWhen": "host-selected" }
348
+ ],
349
+ "environmentWrites": [
350
+ { "env": "TREESEED_PUBLIC_WEB_PROVIDER", "valueFrom": "selectedHost.provider", "targets": ["github-variable", "cloudflare-var"], "scopes": ["staging", "prod"], "sensitivity": "plain" }
351
+ ]
352
+ },
353
+ {
354
+ "kind": "host",
355
+ "key": "transactionalEmail",
356
+ "type": "email",
357
+ "required": false,
358
+ "compatibleProviders": ["smtp"],
359
+ "displayName": "Transactional email",
360
+ "purpose": "Send form, account, and information hub project notification email.",
361
+ "defaultSelection": "managed",
362
+ "configWrites": [
363
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.transactionalEmail.provider", "valueFrom": "selectedHost.provider", "writeWhen": "host-selected" }
364
+ ],
365
+ "environmentWrites": [
366
+ { "env": "SMTP_HOST", "valueFrom": "selectedHost.smtpHost", "targets": ["github-secret", "railway-secret"], "scopes": ["staging", "prod"], "sensitivity": "secret" }
367
+ ]
368
+ }
369
+ ]
370
+ },
371
+ "relatedBooks": [],
372
+ "relatedKnowledge": [],
373
+ "relatedObjectives": []
374
+ },
375
+ {
376
+ "id": "market-control-plane",
377
+ "displayName": "TreeSeed Market Control Plane",
378
+ "description": "Draft first-party template requirements for deploying the TreeSeed Market control plane with dynamic host and Railway resource selection.",
379
+ "summary": "A draft control-plane template that models the Market web/API, operations runner, and PostgreSQL resource roles without hardcoded provider accounts.",
380
+ "status": "draft",
381
+ "featured": false,
382
+ "category": "reference-app",
383
+ "audience": [
384
+ "operators",
385
+ "platform-teams"
386
+ ],
387
+ "tags": [
388
+ "market",
389
+ "control-plane",
390
+ "railway",
391
+ "postgres",
392
+ "operations-runner"
393
+ ],
394
+ "publisher": {
395
+ "id": "treeseed",
396
+ "name": "TreeSeed",
397
+ "url": "https://treeseed.ai"
398
+ },
399
+ "publisherVerified": true,
400
+ "templateVersion": "0.1.0",
401
+ "templateApiVersion": 1,
402
+ "minCliVersion": "0.1.1",
403
+ "minCoreVersion": "0.1.2",
404
+ "fulfillment": {
405
+ "mode": "git",
406
+ "source": {
407
+ "kind": "git",
408
+ "repoUrl": "https://github.com/treeseed-ai/market.git",
409
+ "directory": ".",
410
+ "ref": "main",
411
+ "integrity": "draft-requirements-only"
412
+ },
413
+ "hooksPolicy": "builtin_only",
414
+ "supportsReconcile": true
415
+ },
416
+ "offer": {
417
+ "priceModel": "free",
418
+ "license": "AGPL-3.0-only",
419
+ "support": "community"
420
+ },
421
+ "launchRequirements": {
422
+ "version": 1,
423
+ "hosts": [
424
+ {
425
+ "kind": "host",
426
+ "key": "sourceRepository",
427
+ "type": "repository",
428
+ "required": true,
429
+ "compatibleProviders": ["github"],
430
+ "displayName": "Source repository",
431
+ "purpose": "Create and push the Market control-plane repository.",
432
+ "defaultSelection": "team-default",
433
+ "configWrites": [
434
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.provider", "valueFrom": "selectedHost.provider" },
435
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.owner", "valueFrom": "selectedHost.github.owner" },
436
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.sourceRepository.repository", "valueFrom": "derived.repositoryName" }
437
+ ],
438
+ "environmentWrites": [
439
+ { "env": "GITHUB_TOKEN", "valueFrom": "selectedHost.token", "targets": ["github-secret"], "scopes": ["staging", "prod"], "sensitivity": "secret" }
440
+ ]
441
+ },
442
+ {
443
+ "kind": "host",
444
+ "key": "publicWeb",
445
+ "type": "web",
446
+ "required": true,
447
+ "compatibleProviders": ["cloudflare"],
448
+ "displayName": "Public web host",
449
+ "purpose": "Deploy the Market web surface and public control-plane routes.",
450
+ "defaultSelection": "managed",
451
+ "configWrites": [
452
+ { "target": "treeseed.site.yaml", "path": "hosting.hostBindings.publicWeb.provider", "valueFrom": "selectedHost.provider" },
453
+ { "target": "treeseed.site.yaml", "path": "hosting.kind", "valueFrom": "literal.market_control_plane" },
454
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.provider", "valueFrom": "selectedHost.provider" },
455
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.environments.prod.domain", "valueFrom": "launchInput.domains.productionDomain", "writeWhen": "host-selected" },
456
+ { "target": "treeseed.site.yaml", "path": "surfaces.web.environments.staging.domain", "valueFrom": "launchInput.domains.stagingDomain", "writeWhen": "host-selected" }
457
+ ],
458
+ "environmentWrites": [
459
+ { "env": "TREESEED_PUBLIC_WEB_PROVIDER", "valueFrom": "selectedHost.provider", "targets": ["github-variable", "cloudflare-var"], "scopes": ["staging", "prod"], "sensitivity": "plain" }
460
+ ]
461
+ }
462
+ ],
463
+ "resources": [
464
+ {
465
+ "kind": "resource",
466
+ "key": "marketDatabase",
467
+ "type": "database",
468
+ "required": true,
469
+ "compatibleProviders": ["railway-postgres"],
470
+ "displayName": "Market database",
471
+ "purpose": "Provide the PostgreSQL database used by the Market API control plane.",
472
+ "configWrites": [
473
+ { "target": "treeseed.site.yaml", "path": "services.marketDatabase.enabled", "valueFrom": "literal.true" },
474
+ { "target": "treeseed.site.yaml", "path": "services.marketDatabase.provider", "valueFrom": "literal.railway" },
475
+ { "target": "treeseed.site.yaml", "path": "services.marketDatabase.railway.resourceType", "valueFrom": "literal.postgres" },
476
+ { "target": "treeseed.site.yaml", "path": "services.marketDatabase.railway.serviceName", "valueFrom": "selectedResource.configValues.serviceName" },
477
+ { "target": "treeseed.site.yaml", "path": "services.marketDatabase.railway.environmentVariable", "valueFrom": "literal.TREESEED_MARKET_DATABASE_URL" }
478
+ ],
479
+ "environmentWrites": [
480
+ { "env": "TREESEED_MARKET_DATABASE_URL", "valueFrom": "selectedResource.secretRefs.databaseUrl", "targets": ["github-secret", "railway-secret"], "scopes": ["staging", "prod"], "sensitivity": "secret" }
481
+ ]
482
+ },
483
+ {
484
+ "kind": "resource",
485
+ "key": "api",
486
+ "type": "service",
487
+ "required": true,
488
+ "compatibleProviders": ["railway"],
489
+ "displayName": "Market API service",
490
+ "purpose": "Run the Market API service that serves the control-plane routes.",
491
+ "configWrites": [
492
+ { "target": "treeseed.site.yaml", "path": "services.api.enabled", "valueFrom": "literal.true" },
493
+ { "target": "treeseed.site.yaml", "path": "services.api.provider", "valueFrom": "literal.railway" },
494
+ { "target": "treeseed.site.yaml", "path": "services.api.railway.serviceName", "valueFrom": "selectedResource.configValues.serviceName" },
495
+ { "target": "treeseed.site.yaml", "path": "services.api.railway.rootDirectory", "valueFrom": "literal." },
496
+ { "target": "treeseed.site.yaml", "path": "services.api.railway.startCommand", "valueFrom": "literal.node dist/api/server.js" }
497
+ ],
498
+ "environmentWrites": [
499
+ { "env": "TREESEED_MARKET_DATABASE_URL", "valueFrom": "selectedResource.secretRefs.databaseUrl", "targets": ["railway-secret"], "scopes": ["staging", "prod"], "sensitivity": "secret" }
500
+ ]
501
+ },
502
+ {
503
+ "kind": "resource",
504
+ "key": "marketOperationsRunner",
505
+ "type": "service",
506
+ "required": true,
507
+ "compatibleProviders": ["railway"],
508
+ "displayName": "Market operations runner",
509
+ "purpose": "Run the governed Market operations runner for queued control-plane operations.",
510
+ "configWrites": [
511
+ { "target": "treeseed.site.yaml", "path": "services.marketOperationsRunner.enabled", "valueFrom": "literal.true" },
512
+ { "target": "treeseed.site.yaml", "path": "services.marketOperationsRunner.provider", "valueFrom": "literal.railway" },
513
+ { "target": "treeseed.site.yaml", "path": "services.marketOperationsRunner.railway.serviceName", "valueFrom": "selectedResource.configValues.serviceName" },
514
+ { "target": "treeseed.site.yaml", "path": "services.marketOperationsRunner.railway.startCommand", "valueFrom": "literal.node dist/market-operations-runner/runner.js" }
515
+ ],
516
+ "environmentWrites": [
517
+ { "env": "TREESEED_MARKET_DATABASE_URL", "valueFrom": "selectedResource.secretRefs.databaseUrl", "targets": ["railway-secret"], "scopes": ["staging", "prod"], "sensitivity": "secret" },
518
+ { "env": "TREESEED_PLATFORM_RUNNER_TOKEN", "valueFrom": "selectedResource.secretRefs.runnerToken", "targets": ["railway-secret"], "scopes": ["staging", "prod"], "sensitivity": "secret" },
519
+ { "env": "TREESEED_PLATFORM_RUNNER_ID", "valueFrom": "selectedResource.environmentValues.runnerId", "targets": ["railway-var"], "scopes": ["staging", "prod"], "sensitivity": "plain" }
520
+ ]
521
+ }
522
+ ]
523
+ },
524
+ "relatedBooks": [],
525
+ "relatedKnowledge": [],
526
+ "relatedObjectives": []
50
527
  }
51
528
  ],
52
529
  "meta": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@treeseed/sdk",
3
- "version": "0.10.23",
3
+ "version": "0.10.25",
4
4
  "description": "Shared Treeseed SDK for content-backed and D1-backed object models.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
@@ -198,6 +198,18 @@
198
198
  "types": "./dist/template-catalog.d.ts",
199
199
  "default": "./dist/template-catalog.js"
200
200
  },
201
+ "./template-launch-requirements": {
202
+ "types": "./dist/template-launch-requirements.d.ts",
203
+ "default": "./dist/template-launch-requirements.js"
204
+ },
205
+ "./template-launch-ui": {
206
+ "types": "./dist/template-launch-ui.d.ts",
207
+ "default": "./dist/template-launch-ui.js"
208
+ },
209
+ "./template-secret-sync": {
210
+ "types": "./dist/operations/services/template-secret-sync.d.ts",
211
+ "default": "./dist/operations/services/template-secret-sync.js"
212
+ },
201
213
  "./d1-store": {
202
214
  "types": "./dist/d1-store.d.ts",
203
215
  "default": "./dist/d1-store.js"
@@ -120,7 +120,11 @@ __WORKING_DIRECTORY_BLOCK__ web:
120
120
  shell: bash
121
121
  run: |
122
122
  set -euo pipefail
123
+ TIMING_SUMMARY="${RUNNER_TEMP:-/tmp}/treeseed-provider-timing.md"
124
+ : > "${TIMING_SUMMARY}"
125
+ export TREESEED_PROVIDER_TIMING_SUMMARY_PATH="${TIMING_SUMMARY}"
123
126
  EXTRA_ARGS=()
124
127
  if [[ -n "${TREESEED_WORKFLOW_PROJECT:-}" ]]; then EXTRA_ARGS+=(--project-id "${TREESEED_WORKFLOW_PROJECT}"); fi
125
128
  if [[ -n "${TREESEED_WORKFLOW_PREVIEW_ID:-}" ]]; then EXTRA_ARGS+=(--preview-id "${TREESEED_WORKFLOW_PREVIEW_ID}"); fi
126
129
  node ./packages/sdk/scripts/run-ts.mjs ./packages/sdk/scripts/tenant-workflow-action.ts --action "${TREESEED_WORKFLOW_ACTION}" --environment "${TREESEED_WORKFLOW_ENVIRONMENT}" "${EXTRA_ARGS[@]}"
130
+ if [[ -n "${GITHUB_STEP_SUMMARY:-}" && -s "${TIMING_SUMMARY}" ]]; then cat "${TIMING_SUMMARY}" >> "${GITHUB_STEP_SUMMARY}"; fi