@treeseed/sdk 0.8.7 → 0.8.9
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/capacity.d.ts +120 -1
- package/dist/capacity.js +371 -2
- package/dist/control-plane-client.d.ts +1 -1
- package/dist/d1-store.d.ts +5 -5
- package/dist/d1-store.js +24 -24
- package/dist/db/d1.d.ts +102 -0
- package/dist/db/node-sqlite.d.ts +102 -0
- package/dist/db/schema.d.ts +204 -0
- package/dist/db/schema.js +9 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +33 -23
- package/dist/market-client.d.ts +32 -0
- package/dist/market-client.js +48 -0
- package/dist/operations/services/config-runtime.js +57 -20
- package/dist/operations/services/d1-migration.js +10 -2
- package/dist/operations/services/github-automation.js +1 -1
- package/dist/operations/services/hosting-audit.d.ts +2 -1
- package/dist/operations/services/hosting-audit.js +18 -9
- package/dist/operations/services/hub-provider-launch.d.ts +3 -3
- package/dist/operations/services/hub-provider-launch.js +16 -16
- package/dist/operations/services/{knowledge-coop-packaging.d.ts → market-packaging.d.ts} +13 -13
- package/dist/operations/services/{knowledge-coop-packaging.js → market-packaging.js} +10 -10
- package/dist/operations/services/project-platform.d.ts +32 -0
- package/dist/operations/services/project-platform.js +91 -1
- package/dist/platform/contracts.d.ts +53 -31
- package/dist/platform/utils/site-config-schema.js +120 -52
- package/dist/{knowledge-coop.d.ts → project-workflow.d.ts} +15 -15
- package/dist/{knowledge-coop.js → project-workflow.js} +15 -15
- package/dist/reconcile/builtin-adapters.js +95 -11
- package/dist/scripts/tenant-d1-migrate-local.js +1 -0
- package/dist/sdk-types.d.ts +5 -4
- package/dist/sdk.d.ts +1 -1
- package/dist/stores/{knowledge-coop-store.d.ts → project-workflow-store.d.ts} +3 -3
- package/dist/stores/{knowledge-coop-store.js → project-workflow-store.js} +4 -4
- package/dist/workflow/operations.js +6 -6
- package/dist/workflow-state.js +2 -2
- package/package.json +1 -1
|
@@ -48,6 +48,8 @@ import {
|
|
|
48
48
|
resolveRailwayWorkspaceContext,
|
|
49
49
|
upsertRailwayVariables
|
|
50
50
|
} from "../operations/services/railway-api.js";
|
|
51
|
+
import { loadTreeseedReconcileState } from "./state.js";
|
|
52
|
+
import { createTreeseedReconcileUnitId } from "./units.js";
|
|
51
53
|
function toDeployTarget(target) {
|
|
52
54
|
return target.kind === "persistent" ? createPersistentDeployTarget(target.scope) : createBranchPreviewDeployTarget(target.branchName);
|
|
53
55
|
}
|
|
@@ -289,6 +291,28 @@ function storeCustomDomainState(input, provider, domain, value) {
|
|
|
289
291
|
function getCustomDomainState(input, provider, domain) {
|
|
290
292
|
return input.context.session.get(customDomainStateKey(provider, domain));
|
|
291
293
|
}
|
|
294
|
+
function getPersistedCustomDomainState(input, provider, domain) {
|
|
295
|
+
if (!domain) {
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
if (provider === "railway") {
|
|
299
|
+
try {
|
|
300
|
+
const state = loadTreeseedReconcileState(input.context.tenantRoot, input.context.target);
|
|
301
|
+
const unitId = createTreeseedReconcileUnitId("custom-domain:api", domain);
|
|
302
|
+
const unit = state.units[unitId];
|
|
303
|
+
const reconciled = unit?.lastReconciledState;
|
|
304
|
+
if (reconciled && typeof reconciled === "object" && reconciled.domain === domain) {
|
|
305
|
+
return reconciled;
|
|
306
|
+
}
|
|
307
|
+
const observed = unit?.lastObservedState;
|
|
308
|
+
if (observed && typeof observed === "object" && observed.domain === domain) {
|
|
309
|
+
return observed;
|
|
310
|
+
}
|
|
311
|
+
} catch {
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return null;
|
|
315
|
+
}
|
|
292
316
|
function listCloudflareDnsRecords(env, zoneId, recordName) {
|
|
293
317
|
const query = recordName ? `?name=${encodeURIComponent(recordName)}` : "";
|
|
294
318
|
const payload = cloudflareApiRequest(`/zones/${encodeURIComponent(zoneId)}/dns_records${query}`, {
|
|
@@ -402,22 +426,70 @@ function normalizeRailwayDomainDnsRecord(value) {
|
|
|
402
426
|
status: typeof record.status === "string" ? record.status.trim().toUpperCase() : ""
|
|
403
427
|
};
|
|
404
428
|
}
|
|
429
|
+
function firstRailwayDomainString(...values) {
|
|
430
|
+
for (const value of values) {
|
|
431
|
+
if (typeof value === "string" && value.trim()) {
|
|
432
|
+
return value.trim();
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
return null;
|
|
436
|
+
}
|
|
437
|
+
function firstRailwayDomainArray(...values) {
|
|
438
|
+
for (const value of values) {
|
|
439
|
+
if (Array.isArray(value)) {
|
|
440
|
+
return value;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
return [];
|
|
444
|
+
}
|
|
405
445
|
function normalizeRailwayDomainPayload(value) {
|
|
406
446
|
if (!value || typeof value !== "object") {
|
|
407
447
|
return null;
|
|
408
448
|
}
|
|
409
449
|
const record = value;
|
|
450
|
+
const status = record.status && typeof record.status === "object" ? record.status : {};
|
|
410
451
|
const domain = typeof record.domain === "string" ? record.domain.trim() : typeof record.name === "string" ? record.name.trim() : "";
|
|
411
|
-
const
|
|
452
|
+
const serviceDomain = firstRailwayDomainString(
|
|
453
|
+
record.serviceDomain,
|
|
454
|
+
record.target,
|
|
455
|
+
record.targetDomain,
|
|
456
|
+
record.cnameTarget,
|
|
457
|
+
record.cname,
|
|
458
|
+
record.dnsTarget,
|
|
459
|
+
status.serviceDomain,
|
|
460
|
+
status.target,
|
|
461
|
+
status.targetDomain,
|
|
462
|
+
status.cnameTarget,
|
|
463
|
+
status.cname,
|
|
464
|
+
status.dnsTarget
|
|
465
|
+
);
|
|
466
|
+
const dnsRecordCandidates = firstRailwayDomainArray(
|
|
467
|
+
record.dnsRecords,
|
|
468
|
+
record.requiredDnsRecords,
|
|
469
|
+
record.requiredRecords,
|
|
470
|
+
record.records,
|
|
471
|
+
record.dns,
|
|
472
|
+
status.dnsRecords,
|
|
473
|
+
status.requiredDnsRecords,
|
|
474
|
+
status.requiredRecords,
|
|
475
|
+
status.records,
|
|
476
|
+
status.dns
|
|
477
|
+
);
|
|
412
478
|
const dnsRecords = dnsRecordCandidates.map((entry) => normalizeRailwayDomainDnsRecord(entry)).filter(Boolean);
|
|
479
|
+
const effectiveDnsRecords = dnsRecords.length > 0 || !domain || !serviceDomain || serviceDomain === domain ? dnsRecords : [{
|
|
480
|
+
type: "CNAME",
|
|
481
|
+
name: domain,
|
|
482
|
+
content: serviceDomain,
|
|
483
|
+
status: ""
|
|
484
|
+
}];
|
|
413
485
|
return {
|
|
414
486
|
id: typeof record.id === "string" ? record.id.trim() : null,
|
|
415
487
|
domain,
|
|
416
|
-
serviceDomain
|
|
417
|
-
certificateStatus: typeof
|
|
418
|
-
verificationDnsHost: typeof record.verificationDnsHost === "string" ? record.verificationDnsHost.trim() : typeof
|
|
419
|
-
verificationToken: typeof record.verificationToken === "string" ? record.verificationToken.trim() : typeof
|
|
420
|
-
dnsRecords
|
|
488
|
+
serviceDomain,
|
|
489
|
+
certificateStatus: typeof status.certificateStatus === "string" ? String(status.certificateStatus).trim().toUpperCase() : null,
|
|
490
|
+
verificationDnsHost: typeof record.verificationDnsHost === "string" ? record.verificationDnsHost.trim() : typeof status.verificationDnsHost === "string" ? String(status.verificationDnsHost).trim() : null,
|
|
491
|
+
verificationToken: typeof record.verificationToken === "string" ? record.verificationToken.trim() : typeof status.verificationToken === "string" ? String(status.verificationToken).trim() : null,
|
|
492
|
+
dnsRecords: effectiveDnsRecords
|
|
421
493
|
};
|
|
422
494
|
}
|
|
423
495
|
async function ensureRailwayCustomDomain(input, service, domain, env, identifiers) {
|
|
@@ -1581,8 +1653,16 @@ function resolveDesiredDnsRecords(input) {
|
|
|
1581
1653
|
if (!domain) {
|
|
1582
1654
|
return [];
|
|
1583
1655
|
}
|
|
1584
|
-
const railwayState = getCustomDomainState(input, "railway", domain) ?? input.persistedState?.lastObservedState ?? input.persistedState?.lastReconciledState;
|
|
1656
|
+
const railwayState = getCustomDomainState(input, "railway", domain) ?? getPersistedCustomDomainState(input, "railway", domain) ?? input.persistedState?.lastObservedState ?? input.persistedState?.lastReconciledState;
|
|
1585
1657
|
const records = Array.isArray(railwayState?.dnsRecords) ? railwayState.dnsRecords.map((entry) => normalizeRailwayDomainDnsRecord(entry)).filter(Boolean) : [];
|
|
1658
|
+
if (records.length === 0 && typeof railwayState?.serviceDomain === "string" && railwayState.serviceDomain.trim() && railwayState.serviceDomain.trim() !== domain) {
|
|
1659
|
+
records.push({
|
|
1660
|
+
type: "CNAME",
|
|
1661
|
+
name: domain,
|
|
1662
|
+
content: railwayState.serviceDomain.trim(),
|
|
1663
|
+
status: ""
|
|
1664
|
+
});
|
|
1665
|
+
}
|
|
1586
1666
|
const desiredRecords = records.map((record) => ({
|
|
1587
1667
|
...record,
|
|
1588
1668
|
proxied: false
|
|
@@ -1685,8 +1765,9 @@ function verifyCustomDomainUnit(input) {
|
|
|
1685
1765
|
}
|
|
1686
1766
|
case "custom-domain:api": {
|
|
1687
1767
|
const domain = String(input.unit.spec.domain ?? "").trim();
|
|
1688
|
-
const live = getCustomDomainState(input, "railway", domain) ?? input.persistedState?.lastObservedState ?? input.persistedState?.lastReconciledState ?? null;
|
|
1768
|
+
const live = getCustomDomainState(input, "railway", domain) ?? getPersistedCustomDomainState(input, "railway", domain) ?? input.persistedState?.lastObservedState ?? input.persistedState?.lastReconciledState ?? null;
|
|
1689
1769
|
const dnsRecords = Array.isArray(live?.dnsRecords) ? live.dnsRecords : [];
|
|
1770
|
+
const hasDnsRequirements = dnsRecords.length > 0 || typeof live?.serviceDomain === "string" && live.serviceDomain.trim().length > 0 || typeof live?.verificationDnsHost === "string" && live.verificationDnsHost.trim().length > 0 && typeof live?.verificationToken === "string" && live.verificationToken.trim().length > 0;
|
|
1690
1771
|
return summarizeVerification(input.unit.unitId, [
|
|
1691
1772
|
verificationCheck("custom-domain.exists", "Railway custom domain attachment exists", "cli", {
|
|
1692
1773
|
exists: Boolean(live?.domain),
|
|
@@ -1695,10 +1776,13 @@ function verifyCustomDomainUnit(input) {
|
|
|
1695
1776
|
issues: live?.domain ? [] : [`Railway custom domain ${domain || "(unset)"} is missing.`]
|
|
1696
1777
|
}),
|
|
1697
1778
|
verificationCheck("custom-domain.dns-requirements", "Railway custom domain exposes DNS requirements", "api", {
|
|
1698
|
-
exists:
|
|
1779
|
+
exists: hasDnsRequirements,
|
|
1699
1780
|
expected: true,
|
|
1700
|
-
observed: dnsRecords.length
|
|
1701
|
-
|
|
1781
|
+
observed: dnsRecords.length > 0 ? dnsRecords.length : {
|
|
1782
|
+
serviceDomain: typeof live?.serviceDomain === "string" ? live.serviceDomain : null,
|
|
1783
|
+
verificationDnsHost: typeof live?.verificationDnsHost === "string" ? live.verificationDnsHost : null
|
|
1784
|
+
},
|
|
1785
|
+
issues: hasDnsRequirements ? [] : [`Railway custom domain ${domain || "(unset)"} did not expose DNS requirements.`]
|
|
1702
1786
|
})
|
|
1703
1787
|
]);
|
|
1704
1788
|
}
|
package/dist/sdk-types.d.ts
CHANGED
|
@@ -394,21 +394,21 @@ export interface TaskCreditLedgerEntry {
|
|
|
394
394
|
projectId: string;
|
|
395
395
|
workDayId: string;
|
|
396
396
|
taskId: string | null;
|
|
397
|
-
phase: 'seed' | 'settle' | 'refund' | 'grant' | 'reserve' | 'consume' | 'release' | 'adjustment';
|
|
397
|
+
phase: 'seed' | 'settle' | 'refund' | 'grant' | 'reserve' | 'consume' | 'release' | 'adjustment' | 'grant_created' | 'reservation_created' | 'reservation_released' | 'task_started' | 'task_completed_estimate_settlement' | 'task_completed_actual_settlement' | 'task_failed_refund' | 'manual_adjustment' | 'monthly_rollover' | 'overrun_hold';
|
|
398
398
|
credits: number;
|
|
399
399
|
metadata?: Record<string, unknown>;
|
|
400
400
|
createdAt: string;
|
|
401
401
|
}
|
|
402
402
|
export type CapacityProviderKind = 'treeseed_managed' | 'team_owned' | 'external' | 'hybrid';
|
|
403
|
-
export type CapacityProviderStatus = 'pending' | 'active' | 'paused' | 'configuration_required' | 'disabled';
|
|
403
|
+
export type CapacityProviderStatus = 'pending' | 'credential_required' | 'registering' | 'active' | 'degraded' | 'draining' | 'paused' | 'configuration_required' | 'disabled' | 'failed';
|
|
404
404
|
export type CapacityProviderBillingScope = 'treeseed' | 'team' | 'external';
|
|
405
405
|
export type CapacityBusinessModel = 'subscription_quota' | 'token_metered' | 'hybrid_usage_based' | 'infrastructure_runtime' | 'custom';
|
|
406
406
|
export type CapacityLaneUnit = 'treeseed_credit' | 'quota_minute' | 'token_usd' | 'github_ai_credit' | 'worker_second' | 'request' | 'custom';
|
|
407
407
|
export type CapacityScarcityLevel = 'low' | 'medium' | 'high';
|
|
408
408
|
export type CapacityGrantScope = 'team' | 'project' | 'workday' | 'overflow_pool';
|
|
409
409
|
export type CapacityGrantState = 'active' | 'paused' | 'expired' | 'disabled';
|
|
410
|
-
export type CapacityOverflowPolicy = 'hard_grant' | 'soft_grant' | 'weighted_fair_share' | 'approval_required';
|
|
411
|
-
export type CapacityReservationState = 'reserved' | 'consumed' | 'released' | 'expired' | 'cancelled';
|
|
410
|
+
export type CapacityOverflowPolicy = 'deny' | 'hard_grant' | 'soft_grant' | 'weighted_fair_share' | 'approval_required' | 'fallback_lane' | 'platform_subsidy';
|
|
411
|
+
export type CapacityReservationState = 'reserved' | 'consuming' | 'consumed' | 'released' | 'expired' | 'cancelled' | 'failed' | 'overran_pending_approval';
|
|
412
412
|
export type CapacityEstimatePhase = 'intent' | 'discovery' | 'plan' | 'execution' | 'actual';
|
|
413
413
|
export type CapacityEstimateConfidence = 'low' | 'medium' | 'high';
|
|
414
414
|
export type CapacityApprovalState = 'pending' | 'approved' | 'rejected' | 'expired' | 'superseded';
|
|
@@ -1667,6 +1667,7 @@ export interface RecordCapacityUsageRequest {
|
|
|
1667
1667
|
usd?: number | null;
|
|
1668
1668
|
source?: string;
|
|
1669
1669
|
metadata?: Record<string, unknown> | null;
|
|
1670
|
+
usageActual?: Record<string, unknown> | null;
|
|
1670
1671
|
}
|
|
1671
1672
|
export interface CreateCapacityRoutingDecisionRequest {
|
|
1672
1673
|
id?: string;
|
package/dist/sdk.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { AgentPermissionConfig, AgentRuntimeSpec } from './types/agents.ts'
|
|
|
2
2
|
import { ContentStore } from './content-store.ts';
|
|
3
3
|
import { type AgentDatabase } from './d1-store.ts';
|
|
4
4
|
import { type LoadedTreeseedPluginEntry } from './platform/plugins.ts';
|
|
5
|
-
import type { ReleaseDetail, ReleaseSummary, SharePackageStatus, WorkstreamDetail, WorkstreamEvent, WorkstreamSummary } from './
|
|
5
|
+
import type { ReleaseDetail, ReleaseSummary, SharePackageStatus, WorkstreamDetail, WorkstreamEvent, WorkstreamSummary } from './project-workflow.ts';
|
|
6
6
|
import type { SdkAckMessageRequest, SdkClaimMessageRequest, SdkClaimTaskRequest, SdkCloseWorkDayRequest, SdkCompleteTaskRequest, SdkCreateReportRequest, SdkCreateMessageRequest, SdkCreatePrioritySnapshotRequest, SdkCreateTaskRequest, SdkCursorRequest, SdkFailTaskRequest, SdkFollowRequest, SdkGetRequest, SdkGetCursorRequest, SdkJsonEnvelope, SdkLeaseReleaseRequest, SdkManagerContextPayload, SdkMutationRequest, SdkGraphQueryOptions, SdkGraphQueryRequest, SdkGraphRefreshRequest, SdkGraphSearchOptions, SdkContextPackRequest, SdkGraphDslParseResult, SdkPickRequest, SdkPriorityOverrideRequest, SdkClaimWorkdayManagerLeaseRequest, SdkCreateWorkdayRequest, SdkRecordRepositoryClaimRequest, SdkRecordRunnerScaleDecisionRequest, SdkRecordWorkerRunnerRequest, SdkRecordRunRequest, SdkRecordScaleDecisionRequest, SdkRecordTaskCreditsRequest, SdkReleaseWorkdayManagerLeaseRequest, SdkSearchRequest, SdkStartWorkDayRequest, SdkTaskProgressRequest, SdkTaskSearchRequest, SdkUpsertWorkPolicyRequest, SdkUpdateWorkDayGraphRequest, SdkUpdateRequest, SdkModelDefinition, SdkModelRegistry, SdkGraphRankingProvider, SdkDispatchConfig, SdkDispatchRequest, SdkDispatchResult, PrioritySnapshot, RepositoryClaim, RunnerScaleDecision, ScaleDecision, TaskCreditLedgerEntry, WorkdayManagerLease, WorkdayPolicy, WorkdayRequest, WorkerRunner } from './sdk-types.ts';
|
|
7
7
|
export interface AgentSdkOptions {
|
|
8
8
|
repoRoot?: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { ReleaseDetail, ReleaseSummary, SharePackageStatus, WorkstreamDetail, WorkstreamEvent, WorkstreamState, WorkstreamSummary, LinkedProjectRecordRef } from '../
|
|
1
|
+
import type { ReleaseDetail, ReleaseSummary, SharePackageStatus, WorkstreamDetail, WorkstreamEvent, WorkstreamState, WorkstreamSummary, LinkedProjectRecordRef } from '../project-workflow.ts';
|
|
2
2
|
import { SqliteStoreBase } from './helpers.ts';
|
|
3
|
-
export declare class
|
|
3
|
+
export declare class MemoryProjectWorkflowStore {
|
|
4
4
|
private readonly workstreams;
|
|
5
5
|
private readonly workstreamEvents;
|
|
6
6
|
private readonly releases;
|
|
@@ -19,7 +19,7 @@ export declare class MemoryKnowledgeCoopStore {
|
|
|
19
19
|
getSharePackage(packageId: string): SharePackageStatus | null;
|
|
20
20
|
upsertSharePackage(input: Partial<SharePackageStatus> & Pick<SharePackageStatus, 'projectId' | 'kind' | 'title'>): SharePackageStatus;
|
|
21
21
|
}
|
|
22
|
-
export declare class
|
|
22
|
+
export declare class SqliteProjectWorkflowStore extends SqliteStoreBase {
|
|
23
23
|
private initialized;
|
|
24
24
|
private ensureSchema;
|
|
25
25
|
listWorkstreams(projectId: string): Promise<WorkstreamSummary[]>;
|
|
@@ -85,7 +85,7 @@ function sharePackageFromRow(row) {
|
|
|
85
85
|
metadata: parseJson(row.metadata_json, {})
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
|
-
class
|
|
88
|
+
class MemoryProjectWorkflowStore {
|
|
89
89
|
workstreams = /* @__PURE__ */ new Map();
|
|
90
90
|
workstreamEvents = /* @__PURE__ */ new Map();
|
|
91
91
|
releases = /* @__PURE__ */ new Map();
|
|
@@ -211,7 +211,7 @@ class MemoryKnowledgeCoopStore {
|
|
|
211
211
|
return next;
|
|
212
212
|
}
|
|
213
213
|
}
|
|
214
|
-
class
|
|
214
|
+
class SqliteProjectWorkflowStore extends SqliteStoreBase {
|
|
215
215
|
initialized = false;
|
|
216
216
|
async ensureSchema() {
|
|
217
217
|
if (this.initialized) return;
|
|
@@ -477,6 +477,6 @@ class SqliteKnowledgeCoopStore extends SqliteStoreBase {
|
|
|
477
477
|
}
|
|
478
478
|
}
|
|
479
479
|
export {
|
|
480
|
-
|
|
481
|
-
|
|
480
|
+
MemoryProjectWorkflowStore,
|
|
481
|
+
SqliteProjectWorkflowStore
|
|
482
482
|
};
|
|
@@ -973,14 +973,14 @@ async function connectTreeseedMarketProject(helpers, tenantRoot, input, context)
|
|
|
973
973
|
"Treeseed config --connect-market requires a market base URL. Pass --market-base-url or configure an authenticated remote host first."
|
|
974
974
|
);
|
|
975
975
|
}
|
|
976
|
-
const hostId = normalizeOptionalString(marketSettings.hostId) ?? "
|
|
976
|
+
const hostId = normalizeOptionalString(marketSettings.hostId) ?? "treeseed-market";
|
|
977
977
|
const activeRemoteSession = resolveTreeseedRemoteSession(tenantRoot, hostId) ?? resolveTreeseedRemoteSession(tenantRoot, remoteSettings.activeHostId) ?? resolveTreeseedRemoteSession(tenantRoot, "official");
|
|
978
978
|
const accessToken = normalizeOptionalString(input.marketAccessToken) ?? normalizeOptionalString(activeRemoteSession?.accessToken);
|
|
979
979
|
if (!accessToken) {
|
|
980
980
|
workflowError(
|
|
981
981
|
"config",
|
|
982
982
|
"validation_failed",
|
|
983
|
-
"Treeseed config --connect-market requires a market access token. Authenticate to the
|
|
983
|
+
"Treeseed config --connect-market requires a market access token. Authenticate to the TreeSeed control-plane first or pass --market-access-token."
|
|
984
984
|
);
|
|
985
985
|
}
|
|
986
986
|
const projectId = normalizeOptionalString(input.marketProjectId) ?? normalizeOptionalString(marketSettings.projectId);
|
|
@@ -1018,7 +1018,7 @@ async function connectTreeseedMarketProject(helpers, tenantRoot, input, context)
|
|
|
1018
1018
|
const hosts = Array.isArray(remoteSettings.hosts) ? [...remoteSettings.hosts] : [];
|
|
1019
1019
|
const updatedHost = {
|
|
1020
1020
|
id: hostId,
|
|
1021
|
-
label: "
|
|
1021
|
+
label: "TreeSeed",
|
|
1022
1022
|
baseUrl,
|
|
1023
1023
|
official: false
|
|
1024
1024
|
};
|
|
@@ -1051,7 +1051,7 @@ async function connectTreeseedMarketProject(helpers, tenantRoot, input, context)
|
|
|
1051
1051
|
expiresAt: "",
|
|
1052
1052
|
principal: {
|
|
1053
1053
|
id: `runner:${projectId}`,
|
|
1054
|
-
displayName: "
|
|
1054
|
+
displayName: "TreeSeed Project Runner",
|
|
1055
1055
|
scopes: [],
|
|
1056
1056
|
roles: ["project_runner"],
|
|
1057
1057
|
permissions: [],
|
|
@@ -1104,10 +1104,10 @@ async function connectTreeseedMarketProject(helpers, tenantRoot, input, context)
|
|
|
1104
1104
|
runnerTokenIssued: Boolean(connectionResult.runnerToken)
|
|
1105
1105
|
},
|
|
1106
1106
|
{
|
|
1107
|
-
summary: "
|
|
1107
|
+
summary: "TreeSeed project pairing completed.",
|
|
1108
1108
|
nextSteps: createNextSteps([
|
|
1109
1109
|
{ operation: "status", reason: "Confirm the new market connection, runner health, and current workstream posture." },
|
|
1110
|
-
{ operation: "tasks", reason: "Inspect the branch-backed workstreams that will now sync into the
|
|
1110
|
+
{ operation: "tasks", reason: "Inspect the branch-backed workstreams that will now sync into the TreeSeed UI." }
|
|
1111
1111
|
])
|
|
1112
1112
|
}
|
|
1113
1113
|
);
|
package/dist/workflow-state.js
CHANGED
|
@@ -703,8 +703,8 @@ function resolveTreeseedWorkflowState(cwd, options = {}) {
|
|
|
703
703
|
state.marketConnection.verificationPosture = state.readiness.local.ready ? "ready" : state.files.machineConfig ? "blocked" : "pending";
|
|
704
704
|
const registrationRequired = state.marketConnection.runtimeRegistration === "required";
|
|
705
705
|
state.marketConnection.approvalBlockers = [
|
|
706
|
-
...registrationRequired && !state.marketConnection.configured ? ["
|
|
707
|
-
...registrationRequired && !state.marketConnection.runtimeReady ? ["
|
|
706
|
+
...registrationRequired && !state.marketConnection.configured ? ["TreeSeed runtime attachment is not configured."] : [],
|
|
707
|
+
...registrationRequired && !state.marketConnection.runtimeReady ? ["TreeSeed runtime credential is missing or not ready."] : []
|
|
708
708
|
];
|
|
709
709
|
state.recommendations = recommendTreeseedNextSteps(state);
|
|
710
710
|
return state;
|