@treeseed/sdk 0.10.28 → 0.11.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.
Files changed (148) hide show
  1. package/README.md +207 -6
  2. package/dist/capacity-provider.d.ts +3 -1
  3. package/dist/capacity-provider.js +25 -5
  4. package/dist/control-plane.d.ts +1 -0
  5. package/dist/control-plane.js +38 -13
  6. package/dist/db/market-schema.d.ts +8860 -6172
  7. package/dist/db/market-schema.js +108 -0
  8. package/dist/db/node-sqlite.js +7 -2
  9. package/dist/hosting/apps.d.ts +12 -0
  10. package/dist/hosting/apps.js +107 -0
  11. package/dist/hosting/builtins.d.ts +25 -0
  12. package/dist/hosting/builtins.js +791 -0
  13. package/dist/hosting/contracts.d.ts +207 -0
  14. package/dist/hosting/contracts.js +0 -0
  15. package/dist/hosting/graph.d.ts +192 -0
  16. package/dist/hosting/graph.js +1106 -0
  17. package/dist/hosting/index.d.ts +4 -0
  18. package/dist/hosting/index.js +4 -0
  19. package/dist/index.d.ts +10 -3
  20. package/dist/index.js +63 -6
  21. package/dist/managed-dependencies.js +1 -2
  22. package/dist/market-client.d.ts +63 -3
  23. package/dist/market-client.js +83 -11
  24. package/dist/operations/services/bootstrap-runner.d.ts +3 -1
  25. package/dist/operations/services/bootstrap-runner.js +22 -2
  26. package/dist/operations/services/config-runtime.d.ts +10 -5
  27. package/dist/operations/services/config-runtime.js +209 -66
  28. package/dist/operations/services/deploy.d.ts +70 -7
  29. package/dist/operations/services/deploy.js +579 -64
  30. package/dist/operations/services/deployment-readiness.d.ts +30 -0
  31. package/dist/operations/services/deployment-readiness.js +175 -0
  32. package/dist/operations/services/git-workflow.d.ts +2 -1
  33. package/dist/operations/services/git-workflow.js +9 -3
  34. package/dist/operations/services/github-actions-verification.d.ts +1 -0
  35. package/dist/operations/services/github-actions-verification.js +1 -0
  36. package/dist/operations/services/github-api.js +1 -1
  37. package/dist/operations/services/github-automation.d.ts +1 -1
  38. package/dist/operations/services/github-automation.js +4 -3
  39. package/dist/operations/services/github-credentials.d.ts +13 -0
  40. package/dist/operations/services/github-credentials.js +58 -0
  41. package/dist/operations/services/hosted-service-checks.d.ts +63 -0
  42. package/dist/operations/services/hosted-service-checks.js +327 -0
  43. package/dist/operations/services/hub-provider-launch.js +3 -3
  44. package/dist/operations/services/live-hosted-service-checks.d.ts +25 -0
  45. package/dist/operations/services/live-hosted-service-checks.js +350 -0
  46. package/dist/operations/services/managed-host-security.js +1 -1
  47. package/dist/operations/services/operations-runner-smoke.d.ts +30 -0
  48. package/dist/operations/services/operations-runner-smoke.js +180 -0
  49. package/dist/operations/services/package-adapters.d.ts +95 -0
  50. package/dist/operations/services/package-adapters.js +288 -0
  51. package/dist/operations/services/package-reference-policy.d.ts +1 -0
  52. package/dist/operations/services/package-reference-policy.js +15 -2
  53. package/dist/operations/services/project-platform.d.ts +80 -22
  54. package/dist/operations/services/project-platform.js +49 -8
  55. package/dist/operations/services/project-web-monitor.js +26 -4
  56. package/dist/operations/services/railway-api.d.ts +88 -5
  57. package/dist/operations/services/railway-api.js +626 -35
  58. package/dist/operations/services/railway-deploy.d.ts +46 -40
  59. package/dist/operations/services/railway-deploy.js +261 -293
  60. package/dist/operations/services/release-candidate.d.ts +19 -0
  61. package/dist/operations/services/release-candidate.js +375 -38
  62. package/dist/operations/services/repository-save-orchestrator.d.ts +3 -1
  63. package/dist/operations/services/repository-save-orchestrator.js +279 -66
  64. package/dist/operations/services/runtime-tools.d.ts +1 -0
  65. package/dist/operations/services/runtime-tools.js +10 -9
  66. package/dist/operations/services/verification-cache.d.ts +25 -0
  67. package/dist/operations/services/verification-cache.js +71 -0
  68. package/dist/operations/services/workspace-dependency-mode.js +9 -1
  69. package/dist/operations/services/workspace-save.js +1 -1
  70. package/dist/operations/services/workspace-tools.js +2 -1
  71. package/dist/platform/contracts.d.ts +32 -1
  72. package/dist/platform/deploy-config.js +73 -8
  73. package/dist/platform/env.yaml +163 -35
  74. package/dist/platform/environment.d.ts +1 -0
  75. package/dist/platform/environment.js +74 -5
  76. package/dist/platform/plugin.d.ts +9 -0
  77. package/dist/platform-operation-store.js +2 -2
  78. package/dist/platform-operations.js +1 -1
  79. package/dist/reconcile/bootstrap-systems.js +2 -2
  80. package/dist/reconcile/builtin-adapters.js +372 -189
  81. package/dist/reconcile/contracts.d.ts +9 -5
  82. package/dist/reconcile/desired-state.d.ts +1 -0
  83. package/dist/reconcile/desired-state.js +5 -5
  84. package/dist/reconcile/engine.d.ts +5 -2
  85. package/dist/reconcile/engine.js +53 -32
  86. package/dist/reconcile/index.d.ts +2 -0
  87. package/dist/reconcile/index.js +2 -0
  88. package/dist/reconcile/live-acceptance.d.ts +79 -0
  89. package/dist/reconcile/live-acceptance.js +1615 -0
  90. package/dist/reconcile/platform.d.ts +104 -0
  91. package/dist/reconcile/platform.js +100 -0
  92. package/dist/reconcile/state.js +4 -4
  93. package/dist/reconcile/units.js +2 -2
  94. package/dist/scripts/deployment-readiness.js +20 -0
  95. package/dist/scripts/generate-treedx-openapi-types.js +186 -0
  96. package/dist/scripts/operations-runner-smoke.js +16 -0
  97. package/dist/scripts/release-verify.js +4 -1
  98. package/dist/scripts/tenant-workflow-action.js +10 -1
  99. package/dist/sdk-types.d.ts +169 -4
  100. package/dist/sdk-types.js +20 -2
  101. package/dist/sdk.d.ts +35 -24
  102. package/dist/sdk.js +186 -17
  103. package/dist/template-launch-requirements.js +9 -0
  104. package/dist/treedx/adapters.d.ts +6 -0
  105. package/dist/treedx/adapters.js +36 -0
  106. package/dist/treedx/client.d.ts +222 -0
  107. package/dist/treedx/client.js +871 -0
  108. package/dist/treedx/errors.d.ts +13 -0
  109. package/dist/treedx/errors.js +17 -0
  110. package/dist/treedx/federated-client.d.ts +27 -0
  111. package/dist/treedx/federated-client.js +158 -0
  112. package/dist/treedx/generated/openapi-types.d.ts +3558 -0
  113. package/dist/treedx/generated/openapi-types.js +0 -0
  114. package/dist/treedx/graph-adapter.d.ts +33 -0
  115. package/dist/treedx/graph-adapter.js +156 -0
  116. package/dist/treedx/index.d.ts +14 -0
  117. package/dist/treedx/index.js +48 -0
  118. package/dist/treedx/market-integration.d.ts +27 -0
  119. package/dist/treedx/market-integration.js +131 -0
  120. package/dist/treedx/ports.d.ts +166 -0
  121. package/dist/treedx/ports.js +231 -0
  122. package/dist/treedx/query-adapter.d.ts +19 -0
  123. package/dist/treedx/query-adapter.js +62 -0
  124. package/dist/treedx/registry-client.d.ts +11 -0
  125. package/dist/treedx/registry-client.js +19 -0
  126. package/dist/treedx/repository-adapter.d.ts +45 -0
  127. package/dist/treedx/repository-adapter.js +308 -0
  128. package/dist/treedx/sdk-integration.d.ts +27 -0
  129. package/dist/treedx/sdk-integration.js +63 -0
  130. package/dist/treedx/types.d.ts +1084 -0
  131. package/dist/treedx/types.js +8 -0
  132. package/dist/treedx/workspace-adapter.d.ts +27 -0
  133. package/dist/treedx/workspace-adapter.js +65 -0
  134. package/dist/treedx-backends.d.ts +218 -0
  135. package/dist/treedx-backends.js +632 -0
  136. package/dist/treedx-client.d.ts +86 -0
  137. package/dist/treedx-client.js +175 -0
  138. package/dist/treeseed/template-catalog/catalog.fixture.json +23 -23
  139. package/dist/workflow/operations.d.ts +119 -13
  140. package/dist/workflow/operations.js +309 -53
  141. package/dist/workflow-state.d.ts +13 -0
  142. package/dist/workflow-state.js +43 -26
  143. package/dist/workflow-support.d.ts +11 -3
  144. package/dist/workflow-support.js +67 -3
  145. package/dist/workflow.d.ts +5 -0
  146. package/drizzle/market/0004_treedx_market_integration.sql +99 -0
  147. package/package.json +34 -3
  148. package/templates/github/deploy-web.workflow.yml +39 -6
File without changes
@@ -0,0 +1,33 @@
1
+ import { TreeDxClient } from './client.ts';
2
+ import type { SdkContextPack, SdkContextPackRequest, SdkGraphDslParseResult, SdkGraphNode, SdkGraphQueryOptions, SdkGraphQueryRequest, SdkGraphQueryResult, SdkGraphRefreshPayload, SdkGraphSearchOptions, SdkGraphSearchResult, SdkGraphSeedResolution, SdkGraphTraversalResult, TreeDxGraphRefreshRequest } from './types.ts';
3
+ export interface TreeDxGraphAdapterOptions {
4
+ client: TreeDxClient;
5
+ repoId?: string;
6
+ defaultRef?: string;
7
+ }
8
+ export declare class TreeDxGraphAdapter {
9
+ private readonly options;
10
+ constructor(options: TreeDxGraphAdapterOptions);
11
+ refresh(request?: TreeDxGraphRefreshRequest): Promise<SdkGraphRefreshPayload>;
12
+ searchFiles(query: string, options?: SdkGraphSearchOptions): Promise<SdkGraphSearchResult[]>;
13
+ searchSections(query: string, options?: SdkGraphSearchOptions): Promise<SdkGraphSearchResult[]>;
14
+ searchEntities(query: string, options?: SdkGraphSearchOptions): Promise<SdkGraphSearchResult[]>;
15
+ getNode(id: string): Promise<SdkGraphNode | null>;
16
+ getNeighbors(id: string, options?: SdkGraphQueryOptions): Promise<SdkGraphTraversalResult>;
17
+ followReferences(id: string, options?: SdkGraphQueryOptions): Promise<SdkGraphTraversalResult>;
18
+ getBacklinks(id: string, options?: SdkGraphQueryOptions): Promise<SdkGraphTraversalResult>;
19
+ getRelated(id: string, options?: SdkGraphQueryOptions): Promise<SdkGraphTraversalResult>;
20
+ getSubgraph(seedIds: string[], options?: SdkGraphQueryOptions): Promise<SdkGraphTraversalResult>;
21
+ resolveSeeds(_request: SdkGraphQueryRequest): Promise<SdkGraphSeedResolution>;
22
+ queryGraph(request: SdkGraphQueryRequest): Promise<SdkGraphQueryResult>;
23
+ buildContextPack(request: SdkContextPackRequest): Promise<SdkContextPack>;
24
+ parseGraphDsl(source: string): Promise<SdkGraphDslParseResult>;
25
+ resolveReference(_reference?: string, _options?: {
26
+ fromNodeId?: string;
27
+ fromPath?: string;
28
+ models?: string[];
29
+ }): Promise<never>;
30
+ explainReferenceChain(_fromId?: string, _toId?: string): Promise<never>;
31
+ private related;
32
+ private unwrapNode;
33
+ }
@@ -0,0 +1,156 @@
1
+ import { TreeDxApiError } from "./errors.js";
2
+ class TreeDxGraphAdapter {
3
+ constructor(options) {
4
+ this.options = options;
5
+ }
6
+ options;
7
+ async refresh(request = {}) {
8
+ return this.options.client.refreshGraph({
9
+ ...request,
10
+ repoId: this.options.repoId,
11
+ ref: this.options.defaultRef
12
+ });
13
+ }
14
+ searchFiles(query, options) {
15
+ return this.options.client.searchGraphFiles({
16
+ repoId: this.options.repoId,
17
+ ref: this.options.defaultRef,
18
+ query,
19
+ limit: options?.limit,
20
+ options
21
+ });
22
+ }
23
+ searchSections(query, options) {
24
+ return this.options.client.searchGraphSections({
25
+ repoId: this.options.repoId,
26
+ ref: this.options.defaultRef,
27
+ query,
28
+ limit: options?.limit,
29
+ options
30
+ });
31
+ }
32
+ searchEntities(query, options) {
33
+ return this.options.client.searchGraphEntities({
34
+ repoId: this.options.repoId,
35
+ ref: this.options.defaultRef,
36
+ query,
37
+ limit: options?.limit,
38
+ options
39
+ });
40
+ }
41
+ async getNode(id) {
42
+ try {
43
+ return await this.options.client.getGraphNode({
44
+ repoId: this.options.repoId,
45
+ ref: this.options.defaultRef,
46
+ nodeId: id
47
+ });
48
+ } catch (error) {
49
+ if (error instanceof TreeDxApiError && error.status === 404) {
50
+ return null;
51
+ }
52
+ throw error;
53
+ }
54
+ }
55
+ getNeighbors(id, options) {
56
+ return this.related(id, [], options);
57
+ }
58
+ followReferences(id, options) {
59
+ return this.related(id, ["references"], options);
60
+ }
61
+ getBacklinks(id, options) {
62
+ return this.related(id, [], { ...options, direction: "incoming" });
63
+ }
64
+ getRelated(id, options) {
65
+ return this.related(id, ["related"], options);
66
+ }
67
+ async getSubgraph(seedIds, options) {
68
+ const result = await this.options.client.getSubgraph({
69
+ repoId: this.options.repoId,
70
+ ref: this.options.defaultRef,
71
+ seedIds,
72
+ options
73
+ });
74
+ return {
75
+ seedId: String(result.seedId ?? seedIds.join(",")),
76
+ nodes: (result.nodes ?? []).map((entry) => this.unwrapNode(entry)),
77
+ edges: result.edges ?? []
78
+ };
79
+ }
80
+ async resolveSeeds(_request) {
81
+ throw new TreeDxApiError("TreeDX remote graph seed resolution is not implemented by the TreeDX remote graph adapter.", {
82
+ status: 501,
83
+ code: "unsupported_treedx_graph_operation"
84
+ });
85
+ }
86
+ async queryGraph(request) {
87
+ const result = await this.options.client.queryGraph({
88
+ ...request,
89
+ repoId: this.options.repoId,
90
+ ref: this.options.defaultRef
91
+ });
92
+ return {
93
+ seedIds: result.seedIds,
94
+ nodes: result.nodes,
95
+ edges: result.edges,
96
+ providerId: result.providerId,
97
+ diagnostics: result.diagnostics
98
+ };
99
+ }
100
+ async buildContextPack(request) {
101
+ const result = await this.options.client.buildContext({
102
+ ...request,
103
+ repoId: this.options.repoId,
104
+ ref: this.options.defaultRef
105
+ });
106
+ return {
107
+ seedIds: result.seedIds,
108
+ totalTokenEstimate: result.totalTokenEstimate,
109
+ includedNodeIds: result.includedNodeIds,
110
+ nodes: result.nodes,
111
+ edges: result.edges
112
+ };
113
+ }
114
+ parseGraphDsl(source) {
115
+ return this.options.client.parseContextDsl({
116
+ repoId: this.options.repoId,
117
+ ref: this.options.defaultRef,
118
+ source
119
+ });
120
+ }
121
+ resolveReference(_reference, _options) {
122
+ return Promise.reject(new TreeDxApiError("TreeDX remote reference resolution is not implemented by the TreeDX remote graph adapter.", {
123
+ status: 501,
124
+ code: "unsupported_treedx_graph_operation"
125
+ }));
126
+ }
127
+ explainReferenceChain(_fromId, _toId) {
128
+ return Promise.reject(new TreeDxApiError("TreeDX remote reference-chain explanation is not implemented by the TreeDX remote graph adapter.", {
129
+ status: 501,
130
+ code: "unsupported_treedx_graph_operation"
131
+ }));
132
+ }
133
+ async related(id, relations, options) {
134
+ const result = await this.options.client.getRelated({
135
+ repoId: this.options.repoId,
136
+ ref: this.options.defaultRef,
137
+ nodeId: id,
138
+ relations,
139
+ options
140
+ });
141
+ return {
142
+ seedId: id,
143
+ nodes: (result.nodes ?? []).map((entry) => this.unwrapNode(entry)),
144
+ edges: result.edges ?? []
145
+ };
146
+ }
147
+ unwrapNode(entry) {
148
+ if (typeof entry === "object" && entry !== null && "node" in entry) {
149
+ return entry.node;
150
+ }
151
+ return entry;
152
+ }
153
+ }
154
+ export {
155
+ TreeDxGraphAdapter
156
+ };
@@ -0,0 +1,14 @@
1
+ export { TREEDX_CLIENT_OPERATION_MAP, TreeDxClient } from './client.ts';
2
+ export { TreeDxRegistryClient, type TreeDxRegistryClientOptions } from './registry-client.ts';
3
+ export { TreeDxFederatedClient, type TreeDxFederatedClientOptions } from './federated-client.ts';
4
+ export { TreeDxApiError } from './errors.ts';
5
+ export { resolveAgentTreeDxIntegration, type AgentSdkTreeDxIntegration, type AgentSdkTreeDxOptions } from './sdk-integration.ts';
6
+ export { TreeDxRepositoryAdapter, resolveContentDir, type TreeDxContentMutationResult, type TreeDxRepositoryAdapterOptions, } from './repository-adapter.ts';
7
+ export { TreeDxQueryAdapter, type TreeDxQueryAdapterOptions } from './query-adapter.ts';
8
+ export { TreeDxGraphAdapter, type TreeDxGraphAdapterOptions } from './graph-adapter.ts';
9
+ export { TreeDxWorkspaceAdapter, type TreeDxWorkspaceAdapterOptions } from './workspace-adapter.ts';
10
+ export * from './market-integration.ts';
11
+ export { LocalGraphPort, LocalRepositoryPort, LocalRepositoryQueryPort, TreeDxArtifactPort, TreeDxExecPort, TreeDxFederatedPort, TreeDxGraphPort, TreeDxRegistryPort, TreeDxRepositoryPort, TreeDxRepositoryQueryPort, } from './ports.ts';
12
+ export type * from './ports.ts';
13
+ export type * from './types.ts';
14
+ export type { components as TreeDxOpenApiComponents, operations as TreeDxOpenApiOperations, paths as TreeDxOpenApiPaths, } from './generated/openapi-types.ts';
@@ -0,0 +1,48 @@
1
+ import { TREEDX_CLIENT_OPERATION_MAP, TreeDxClient } from "./client.js";
2
+ import { TreeDxRegistryClient } from "./registry-client.js";
3
+ import { TreeDxFederatedClient } from "./federated-client.js";
4
+ import { TreeDxApiError } from "./errors.js";
5
+ import { resolveAgentTreeDxIntegration } from "./sdk-integration.js";
6
+ import {
7
+ TreeDxRepositoryAdapter,
8
+ resolveContentDir
9
+ } from "./repository-adapter.js";
10
+ import { TreeDxQueryAdapter } from "./query-adapter.js";
11
+ import { TreeDxGraphAdapter } from "./graph-adapter.js";
12
+ import { TreeDxWorkspaceAdapter } from "./workspace-adapter.js";
13
+ export * from "./market-integration.js";
14
+ import {
15
+ LocalGraphPort,
16
+ LocalRepositoryPort,
17
+ LocalRepositoryQueryPort,
18
+ TreeDxArtifactPort,
19
+ TreeDxExecPort,
20
+ TreeDxFederatedPort,
21
+ TreeDxGraphPort,
22
+ TreeDxRegistryPort,
23
+ TreeDxRepositoryPort,
24
+ TreeDxRepositoryQueryPort
25
+ } from "./ports.js";
26
+ export {
27
+ LocalGraphPort,
28
+ LocalRepositoryPort,
29
+ LocalRepositoryQueryPort,
30
+ TREEDX_CLIENT_OPERATION_MAP,
31
+ TreeDxApiError,
32
+ TreeDxArtifactPort,
33
+ TreeDxClient,
34
+ TreeDxExecPort,
35
+ TreeDxFederatedClient,
36
+ TreeDxFederatedPort,
37
+ TreeDxGraphAdapter,
38
+ TreeDxGraphPort,
39
+ TreeDxQueryAdapter,
40
+ TreeDxRegistryClient,
41
+ TreeDxRegistryPort,
42
+ TreeDxRepositoryAdapter,
43
+ TreeDxRepositoryPort,
44
+ TreeDxRepositoryQueryPort,
45
+ TreeDxWorkspaceAdapter,
46
+ resolveAgentTreeDxIntegration,
47
+ resolveContentDir
48
+ };
@@ -0,0 +1,27 @@
1
+ import type { ProjectFilesystemRepositoryTopology, ProjectRepositoryTopology, TreeDxInstance, TreeDxProjectLibraryBinding } from '../sdk-types.ts';
2
+ export declare const TREEDX_DOCKER_IMAGE: "treeseed/treedx:latest";
3
+ export declare const TREEDX_VOLUME_MOUNT_PATH: "/data";
4
+ export declare const TREEDX_CONTENT_PATH: "src/content";
5
+ export declare function defaultTreeDxImageRef(tag?: string): string;
6
+ export declare function treeDxLibraryIdForProject(input: {
7
+ teamSlug?: string | null;
8
+ projectSlug?: string | null;
9
+ projectId?: string | null;
10
+ }): string;
11
+ export declare function buildManagedTreeDxInstance(input: {
12
+ id: string;
13
+ teamId: string;
14
+ teamSlug?: string | null;
15
+ visibility?: 'private' | 'public' | string | null;
16
+ imageRef?: string | null;
17
+ baseUrl?: string | null;
18
+ now?: string;
19
+ }): TreeDxInstance;
20
+ export declare function buildProjectRepositoryTopology(input: {
21
+ instance: Pick<TreeDxInstance, 'id' | 'baseUrl'>;
22
+ binding: Pick<TreeDxProjectLibraryBinding, 'libraryId' | 'repositoryId' | 'contentPath' | 'contentRepositoryUrl' | 'contentRepositoryDefaultBranch' | 'contentRepositoryRef' | 'r2BucketName' | 'r2ManifestKey'>;
23
+ siteRepository: Partial<ProjectFilesystemRepositoryTopology>;
24
+ projectRepository?: Partial<ProjectFilesystemRepositoryTopology> | null;
25
+ }): ProjectRepositoryTopology;
26
+ export declare function normalizeProjectRepositoryTopology(value: unknown): ProjectRepositoryTopology;
27
+ export declare function isTreeDxCanonicalContent(topology: ProjectRepositoryTopology | null | undefined): boolean;
@@ -0,0 +1,131 @@
1
+ const TREEDX_DOCKER_IMAGE = "treeseed/treedx:latest";
2
+ const TREEDX_VOLUME_MOUNT_PATH = "/data";
3
+ const TREEDX_CONTENT_PATH = "src/content";
4
+ function cleanString(value) {
5
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
6
+ }
7
+ function safeSlug(value, fallback = "library") {
8
+ return String(value ?? fallback).trim().toLowerCase().replace(/[^a-z0-9_.-]+/gu, "-").replace(/^-+|-+$/gu, "") || fallback;
9
+ }
10
+ function objectValue(value) {
11
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
12
+ }
13
+ function defaultTreeDxImageRef(tag = "latest") {
14
+ const normalizedTag = cleanString(tag) ?? "latest";
15
+ return normalizedTag.includes("/") || normalizedTag.includes(":") ? normalizedTag : `treeseed/treedx:${normalizedTag}`;
16
+ }
17
+ function treeDxLibraryIdForProject(input) {
18
+ return [input.teamSlug, input.projectSlug ?? input.projectId].map((part) => safeSlug(part, "project")).join("/");
19
+ }
20
+ function buildManagedTreeDxInstance(input) {
21
+ const isPublic = input.visibility === "public";
22
+ const now = input.now ?? (/* @__PURE__ */ new Date()).toISOString();
23
+ return {
24
+ id: input.id,
25
+ teamId: input.teamId,
26
+ kind: isPublic ? "managed_public_federation" : "managed_private",
27
+ provider: isPublic ? "public_federation" : "railway",
28
+ name: isPublic ? "TreeSeed public federation" : `${safeSlug(input.teamSlug ?? input.teamId, "team")} TreeDX`,
29
+ baseUrl: cleanString(input.baseUrl),
30
+ registryUrl: cleanString(input.baseUrl),
31
+ publicRead: isPublic,
32
+ primary: true,
33
+ status: cleanString(input.baseUrl) ? "active" : "pending",
34
+ imageRef: input.imageRef ?? defaultTreeDxImageRef(),
35
+ volumeMountPath: isPublic ? null : TREEDX_VOLUME_MOUNT_PATH,
36
+ metadata: {
37
+ hostRole: "knowledge-library",
38
+ contentCanonical: "treedx",
39
+ managedBy: "treeseed-market"
40
+ },
41
+ createdAt: now,
42
+ updatedAt: now
43
+ };
44
+ }
45
+ function buildProjectRepositoryTopology(input) {
46
+ const siteRepository = normalizeFilesystemRepository(input.siteRepository, "site");
47
+ return {
48
+ contentRepository: {
49
+ accessMode: "treedx",
50
+ githubUrl: input.binding.contentRepositoryUrl ?? null,
51
+ defaultBranch: input.binding.contentRepositoryDefaultBranch ?? null,
52
+ ref: input.binding.contentRepositoryRef ?? null,
53
+ contentPath: input.binding.contentPath || TREEDX_CONTENT_PATH,
54
+ treeDx: {
55
+ instanceId: input.instance.id,
56
+ libraryId: input.binding.libraryId,
57
+ repositoryId: input.binding.repositoryId ?? null,
58
+ baseUrl: input.instance.baseUrl ?? null
59
+ },
60
+ r2: {
61
+ bucketName: input.binding.r2BucketName ?? null,
62
+ manifestKey: input.binding.r2ManifestKey ?? null
63
+ }
64
+ },
65
+ siteRepository,
66
+ projectRepository: input.projectRepository ? normalizeFilesystemRepository(input.projectRepository, "project") : null
67
+ };
68
+ }
69
+ function normalizeProjectRepositoryTopology(value) {
70
+ const record = objectValue(value);
71
+ const content = objectValue(record.contentRepository);
72
+ const treeDx = objectValue(content.treeDx);
73
+ const site = normalizeFilesystemRepository(record.siteRepository, "site");
74
+ const project = record.projectRepository ? normalizeFilesystemRepository(record.projectRepository, "project") : null;
75
+ const instanceId = cleanString(treeDx.instanceId);
76
+ const libraryId = cleanString(treeDx.libraryId);
77
+ if (!instanceId || !libraryId) {
78
+ throw new Error("Project repository topology contentRepository.treeDx.instanceId and libraryId are required.");
79
+ }
80
+ if (site.accessMode !== "filesystem") {
81
+ throw new Error("Project repository topology siteRepository must use filesystem access.");
82
+ }
83
+ return {
84
+ contentRepository: {
85
+ accessMode: "treedx",
86
+ githubUrl: cleanString(content.githubUrl),
87
+ defaultBranch: cleanString(content.defaultBranch),
88
+ ref: cleanString(content.ref),
89
+ contentPath: cleanString(content.contentPath) ?? TREEDX_CONTENT_PATH,
90
+ treeDx: {
91
+ instanceId,
92
+ libraryId,
93
+ repositoryId: cleanString(treeDx.repositoryId),
94
+ baseUrl: cleanString(treeDx.baseUrl)
95
+ },
96
+ r2: objectValue(content.r2)
97
+ },
98
+ siteRepository: site,
99
+ projectRepository: project
100
+ };
101
+ }
102
+ function normalizeFilesystemRepository(value, fallbackName) {
103
+ const record = objectValue(value);
104
+ return {
105
+ accessMode: "filesystem",
106
+ provider: cleanString(record.provider) ?? "github",
107
+ owner: cleanString(record.owner),
108
+ name: cleanString(record.name) ?? fallbackName,
109
+ url: cleanString(record.url),
110
+ defaultBranch: cleanString(record.defaultBranch) ?? cleanString(record.ref) ?? "staging",
111
+ ref: cleanString(record.ref),
112
+ checkoutPath: cleanString(record.checkoutPath),
113
+ volumePath: cleanString(record.volumePath),
114
+ submoduleMountPath: cleanString(record.submoduleMountPath),
115
+ siteSubmodulePath: cleanString(record.siteSubmodulePath)
116
+ };
117
+ }
118
+ function isTreeDxCanonicalContent(topology) {
119
+ return topology?.contentRepository?.accessMode === "treedx" && Boolean(topology.contentRepository.treeDx?.instanceId) && Boolean(topology.contentRepository.treeDx?.libraryId);
120
+ }
121
+ export {
122
+ TREEDX_CONTENT_PATH,
123
+ TREEDX_DOCKER_IMAGE,
124
+ TREEDX_VOLUME_MOUNT_PATH,
125
+ buildManagedTreeDxInstance,
126
+ buildProjectRepositoryTopology,
127
+ defaultTreeDxImageRef,
128
+ isTreeDxCanonicalContent,
129
+ normalizeProjectRepositoryTopology,
130
+ treeDxLibraryIdForProject
131
+ };
@@ -0,0 +1,166 @@
1
+ import type { TreeDxClient } from './client.ts';
2
+ import type { TreeDxFederatedClient } from './federated-client.ts';
3
+ import type { TreeDxGraphAdapter } from './graph-adapter.ts';
4
+ import type { TreeDxQueryAdapter } from './query-adapter.ts';
5
+ import type { TreeDxRegistryClient } from './registry-client.ts';
6
+ import type { TreeDxRepositoryAdapter } from './repository-adapter.ts';
7
+ import type { TreeDxWorkspaceAdapter } from './workspace-adapter.ts';
8
+ import type { ContentStore } from '../content-store.ts';
9
+ import type { ContentGraphRuntime } from '../graph.ts';
10
+ import type { SdkContentEntry, SdkFollowRequest, SdkGetRequest, SdkMutationRequest, SdkPickRequest, SdkSearchRequest } from '../sdk-types.ts';
11
+ import type { TreeDxArtifact, TreeDxArtifactDownload, TreeDxArtifactExportRequest, TreeDxCommitRequest, TreeDxCommitResult, TreeDxCreateWorkspaceRequest, TreeDxDiff, TreeDxExecRequest, TreeDxExecResult, TreeDxFederatedContextRequest, TreeDxFederatedContextResult, TreeDxFederatedGraphRequest, TreeDxFederatedGraphResult, TreeDxFederatedQueryRequest, TreeDxFederatedQueryResult, TreeDxFederatedSearchRequest, TreeDxFederatedSearchResult, TreeDxFile, TreeDxFileMutationResult, TreeDxListTreeRequest, TreeDxPatchFileRequest, TreeDxReadFileRequest, TreeDxRepositoryPathsRequest, TreeDxRepositoryPlacement, TreeDxRepositoryQueryRequest, TreeDxRepositoryQueryResult, TreeDxRepositoryReadRequest, TreeDxRepositorySearchRequest, TreeDxSearchRequest, TreeDxSearchResult, TreeDxSnapshot, TreeDxSnapshotBuildRequest, TreeDxStatus, TreeDxTreeEntry, TreeDxWorkspace, TreeDxWorkspaceRequest, TreeDxWriteFileRequest, TreeDxDeleteFileRequest } from './types.ts';
12
+ export interface AuthPort {
13
+ whoami(): Promise<unknown>;
14
+ effectiveScope(input?: unknown): Promise<unknown>;
15
+ }
16
+ export interface RepositoryPort {
17
+ createWorkspace(input: TreeDxCreateWorkspaceRequest): Promise<TreeDxWorkspace>;
18
+ closeWorkspace(workspaceId: string): Promise<void>;
19
+ listTree(input: TreeDxListTreeRequest): Promise<TreeDxTreeEntry[]>;
20
+ readFile(input: TreeDxReadFileRequest): Promise<TreeDxFile>;
21
+ writeFile(input: TreeDxWriteFileRequest): Promise<TreeDxFileMutationResult>;
22
+ patchFile(input: TreeDxPatchFileRequest): Promise<TreeDxFileMutationResult>;
23
+ deleteFile(input: TreeDxDeleteFileRequest): Promise<TreeDxFileMutationResult>;
24
+ search(input: TreeDxSearchRequest): Promise<TreeDxSearchResult>;
25
+ status(input: TreeDxWorkspaceRequest): Promise<TreeDxStatus>;
26
+ diff(input: TreeDxWorkspaceRequest): Promise<TreeDxDiff>;
27
+ commit(input: TreeDxCommitRequest): Promise<TreeDxCommitResult>;
28
+ exec(input: TreeDxExecRequest): Promise<TreeDxExecResult>;
29
+ }
30
+ export interface RepositoryQueryPort {
31
+ read(input: TreeDxRepositoryReadRequest): Promise<TreeDxRepositoryQueryResult>;
32
+ paths(input: TreeDxRepositoryPathsRequest): Promise<TreeDxRepositoryQueryResult>;
33
+ query(input: TreeDxRepositoryQueryRequest): Promise<TreeDxRepositoryQueryResult>;
34
+ search(input: TreeDxRepositorySearchRequest): Promise<TreeDxRepositoryQueryResult>;
35
+ }
36
+ export interface GraphPort {
37
+ refresh(input?: unknown): Promise<unknown>;
38
+ searchFiles(query: string, options?: unknown): Promise<unknown>;
39
+ searchSections(query: string, options?: unknown): Promise<unknown>;
40
+ searchEntities(query: string, options?: unknown): Promise<unknown>;
41
+ getNode(id: string, options?: unknown): Promise<unknown>;
42
+ query(input: unknown): Promise<unknown>;
43
+ buildContext(input: unknown): Promise<unknown>;
44
+ parseDsl(source: string): Promise<unknown>;
45
+ }
46
+ export interface RegistryPort {
47
+ resolveRepository(repoId: string): Promise<unknown>;
48
+ resolveRepositories(repoIds: string[]): Promise<unknown[]>;
49
+ }
50
+ export interface ExecPort {
51
+ exec(input: TreeDxExecRequest): Promise<TreeDxExecResult>;
52
+ }
53
+ export interface ArtifactPort {
54
+ buildSnapshot(input?: TreeDxSnapshotBuildRequest): Promise<TreeDxSnapshot>;
55
+ exportArtifact(input?: TreeDxArtifactExportRequest): Promise<TreeDxArtifact>;
56
+ downloadArtifact(input?: TreeDxArtifactExportRequest): Promise<TreeDxArtifactDownload>;
57
+ }
58
+ export interface FederatedPort {
59
+ search(input: TreeDxFederatedSearchRequest): Promise<TreeDxFederatedSearchResult>;
60
+ query(input: TreeDxFederatedQueryRequest): Promise<TreeDxFederatedQueryResult>;
61
+ context(input: TreeDxFederatedContextRequest): Promise<TreeDxFederatedContextResult>;
62
+ graph(input: TreeDxFederatedGraphRequest): Promise<TreeDxFederatedGraphResult>;
63
+ }
64
+ export declare class LocalRepositoryPort {
65
+ readonly content: ContentStore;
66
+ constructor(content: ContentStore);
67
+ list(model: string): Promise<SdkContentEntry[]>;
68
+ get(input: SdkGetRequest): Promise<SdkContentEntry | null>;
69
+ search(input: SdkSearchRequest): Promise<SdkContentEntry[]>;
70
+ follow(input: SdkFollowRequest): Promise<{
71
+ items: SdkContentEntry[];
72
+ since: string;
73
+ }>;
74
+ pick(input: SdkPickRequest): Promise<import("../sdk-types.ts").SdkPickResult<SdkContentEntry>>;
75
+ create(input: SdkMutationRequest): Promise<{
76
+ item: SdkContentEntry;
77
+ git: import("../git-runtime.ts").GitMutationResult;
78
+ }>;
79
+ update(input: SdkMutationRequest): Promise<{
80
+ item: SdkContentEntry;
81
+ git: import("../git-runtime.ts").GitMutationResult;
82
+ }>;
83
+ }
84
+ export declare class LocalRepositoryQueryPort {
85
+ readonly content: ContentStore;
86
+ constructor(content: ContentStore);
87
+ search(input: SdkSearchRequest): Promise<SdkContentEntry[]>;
88
+ query(input: SdkSearchRequest): Promise<SdkContentEntry[]>;
89
+ }
90
+ export declare class LocalGraphPort implements GraphPort {
91
+ readonly runtime: ContentGraphRuntime;
92
+ constructor(runtime: ContentGraphRuntime);
93
+ refresh(input?: unknown): Promise<import("./types.ts").SdkGraphRefreshPayload>;
94
+ searchFiles(query: string, options?: unknown): Promise<import("./types.ts").SdkGraphSearchResult[]>;
95
+ searchSections(query: string, options?: unknown): Promise<import("./types.ts").SdkGraphSearchResult[]>;
96
+ searchEntities(query: string, options?: unknown): Promise<import("./types.ts").SdkGraphSearchResult[]>;
97
+ getNode(id: string): Promise<import("./types.ts").SdkGraphNode | null>;
98
+ query(input: unknown): Promise<import("./types.ts").SdkGraphQueryResult>;
99
+ buildContext(input: unknown): Promise<import("./types.ts").SdkContextPack>;
100
+ parseDsl(source: string): Promise<import("./types.ts").SdkGraphDslParseResult>;
101
+ }
102
+ export declare class TreeDxRepositoryPort implements RepositoryPort {
103
+ readonly client: TreeDxClient;
104
+ readonly content?: TreeDxRepositoryAdapter | undefined;
105
+ readonly workspace?: TreeDxWorkspaceAdapter | undefined;
106
+ constructor(client: TreeDxClient, content?: TreeDxRepositoryAdapter | undefined, workspace?: TreeDxWorkspaceAdapter | undefined);
107
+ createWorkspace(input: TreeDxCreateWorkspaceRequest): Promise<TreeDxWorkspace>;
108
+ closeWorkspace(workspaceId: string): Promise<void>;
109
+ listTree(input: TreeDxListTreeRequest): Promise<TreeDxTreeEntry[]>;
110
+ readFile(input: TreeDxReadFileRequest): Promise<TreeDxFile>;
111
+ writeFile(input: TreeDxWriteFileRequest): Promise<TreeDxFileMutationResult>;
112
+ patchFile(input: TreeDxPatchFileRequest): Promise<TreeDxFileMutationResult>;
113
+ deleteFile(input: TreeDxDeleteFileRequest): Promise<TreeDxFileMutationResult>;
114
+ search(input: TreeDxSearchRequest): Promise<TreeDxSearchResult>;
115
+ status(input: TreeDxWorkspaceRequest): Promise<TreeDxStatus>;
116
+ diff(input: TreeDxWorkspaceRequest): Promise<TreeDxDiff>;
117
+ commit(input: TreeDxCommitRequest): Promise<TreeDxCommitResult>;
118
+ exec(input: TreeDxExecRequest): Promise<TreeDxExecResult>;
119
+ }
120
+ export declare class TreeDxRepositoryQueryPort implements RepositoryQueryPort {
121
+ readonly client: TreeDxClient;
122
+ readonly adapter?: TreeDxQueryAdapter | undefined;
123
+ constructor(client: TreeDxClient, adapter?: TreeDxQueryAdapter | undefined);
124
+ read(input: TreeDxRepositoryReadRequest): Promise<TreeDxRepositoryQueryResult>;
125
+ paths(input: TreeDxRepositoryPathsRequest): Promise<TreeDxRepositoryQueryResult>;
126
+ query(input: TreeDxRepositoryQueryRequest): Promise<TreeDxRepositoryQueryResult>;
127
+ search(input: TreeDxRepositorySearchRequest): Promise<TreeDxRepositoryQueryResult>;
128
+ }
129
+ export declare class TreeDxGraphPort implements GraphPort {
130
+ readonly adapter: TreeDxGraphAdapter;
131
+ constructor(adapter: TreeDxGraphAdapter);
132
+ refresh(input?: unknown): Promise<import("./types.ts").SdkGraphRefreshPayload>;
133
+ searchFiles(query: string, options?: unknown): Promise<import("./types.ts").SdkGraphSearchResult[]>;
134
+ searchSections(query: string, options?: unknown): Promise<import("./types.ts").SdkGraphSearchResult[]>;
135
+ searchEntities(query: string, options?: unknown): Promise<import("./types.ts").SdkGraphSearchResult[]>;
136
+ getNode(id: string, options?: unknown): Promise<import("./types.ts").SdkGraphNode | null>;
137
+ query(input: unknown): Promise<import("./types.ts").SdkGraphQueryResult>;
138
+ buildContext(input: unknown): Promise<import("./types.ts").SdkContextPack>;
139
+ parseDsl(source: string): Promise<import("./types.ts").SdkGraphDslParseResult>;
140
+ }
141
+ export declare class TreeDxRegistryPort implements RegistryPort {
142
+ readonly client: TreeDxRegistryClient;
143
+ constructor(client: TreeDxRegistryClient);
144
+ resolveRepository(repoId: string): Promise<TreeDxRepositoryPlacement>;
145
+ resolveRepositories(repoIds: string[]): Promise<TreeDxRepositoryPlacement[]>;
146
+ }
147
+ export declare class TreeDxFederatedPort implements FederatedPort {
148
+ readonly client: TreeDxFederatedClient;
149
+ constructor(client: TreeDxFederatedClient);
150
+ search(input: TreeDxFederatedSearchRequest): Promise<TreeDxFederatedSearchResult>;
151
+ query(input: TreeDxFederatedQueryRequest): Promise<TreeDxFederatedQueryResult>;
152
+ context(input: TreeDxFederatedContextRequest): Promise<TreeDxFederatedContextResult>;
153
+ graph(input: TreeDxFederatedGraphRequest): Promise<TreeDxFederatedGraphResult>;
154
+ }
155
+ export declare class TreeDxExecPort implements ExecPort {
156
+ readonly client: TreeDxClient;
157
+ constructor(client: TreeDxClient);
158
+ exec(input: TreeDxExecRequest): Promise<TreeDxExecResult>;
159
+ }
160
+ export declare class TreeDxArtifactPort implements ArtifactPort {
161
+ readonly client: TreeDxClient;
162
+ constructor(client: TreeDxClient);
163
+ buildSnapshot(input?: TreeDxSnapshotBuildRequest): Promise<TreeDxSnapshot>;
164
+ exportArtifact(input?: TreeDxArtifactExportRequest): Promise<TreeDxArtifact>;
165
+ downloadArtifact(input?: TreeDxArtifactExportRequest): Promise<TreeDxArtifactDownload>;
166
+ }