@treeseed/core 0.8.3 → 0.8.4
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/README.md +7 -11
- package/dist/dev-watch.js +1 -1
- package/dist/dev.d.ts +2 -4
- package/dist/dev.js +4 -124
- package/dist/env.yaml +23 -175
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -6
- package/dist/scripts/build-dist.js +3 -3
- package/dist/scripts/dev-platform.js +1 -7
- package/dist/scripts/run-fixture-astro-command.js +25 -51
- package/dist/scripts/test-smoke.js +50 -7
- package/package.json +5 -78
- package/templates/github/deploy-web.workflow.yml +106 -0
- package/templates/github/hosted-project.workflow.yml +4 -4
- package/dist/agent-runtime.d.ts +0 -17
- package/dist/agent-runtime.js +0 -117
- package/dist/agent.d.ts +0 -11
- package/dist/agent.js +0 -25
- package/dist/agents/adapters/execution.d.ts +0 -41
- package/dist/agents/adapters/execution.js +0 -73
- package/dist/agents/adapters/mutations.d.ts +0 -22
- package/dist/agents/adapters/mutations.js +0 -30
- package/dist/agents/adapters/notification.d.ts +0 -26
- package/dist/agents/adapters/notification.js +0 -46
- package/dist/agents/adapters/repository.d.ts +0 -23
- package/dist/agents/adapters/repository.js +0 -61
- package/dist/agents/adapters/research.d.ts +0 -26
- package/dist/agents/adapters/research.js +0 -59
- package/dist/agents/adapters/verification.d.ts +0 -36
- package/dist/agents/adapters/verification.js +0 -62
- package/dist/agents/cli-tools.d.ts +0 -1
- package/dist/agents/cli-tools.js +0 -5
- package/dist/agents/cli.d.ts +0 -15
- package/dist/agents/cli.js +0 -109
- package/dist/agents/contracts/messages.d.ts +0 -88
- package/dist/agents/contracts/messages.js +0 -138
- package/dist/agents/contracts/run.d.ts +0 -21
- package/dist/agents/contracts/run.js +0 -0
- package/dist/agents/index.d.ts +0 -1
- package/dist/agents/index.js +0 -5
- package/dist/agents/kernel/agent-kernel.d.ts +0 -51
- package/dist/agents/kernel/agent-kernel.js +0 -292
- package/dist/agents/kernel/trigger-resolver.d.ts +0 -19
- package/dist/agents/kernel/trigger-resolver.js +0 -157
- package/dist/agents/registry-helper.d.ts +0 -4
- package/dist/agents/registry-helper.js +0 -14
- package/dist/agents/registry.d.ts +0 -6
- package/dist/agents/registry.js +0 -98
- package/dist/agents/runtime-types.d.ts +0 -118
- package/dist/agents/runtime-types.js +0 -0
- package/dist/agents/spec-loader.d.ts +0 -18
- package/dist/agents/spec-loader.js +0 -55
- package/dist/agents/spec-normalizer.d.ts +0 -2
- package/dist/agents/spec-normalizer.js +0 -327
- package/dist/agents/spec-types.d.ts +0 -64
- package/dist/agents/spec-types.js +0 -0
- package/dist/agents/testing/agents-smoke.d.ts +0 -1
- package/dist/agents/testing/agents-smoke.js +0 -32
- package/dist/agents/testing/e2e-harness.d.ts +0 -44
- package/dist/agents/testing/e2e-harness.js +0 -504
- package/dist/api/agent-routes.d.ts +0 -13
- package/dist/api/agent-routes.js +0 -327
- package/dist/api/app.d.ts +0 -5
- package/dist/api/app.js +0 -361
- package/dist/api/auth/d1-database.d.ts +0 -3
- package/dist/api/auth/d1-database.js +0 -20
- package/dist/api/auth/d1-provider.d.ts +0 -79
- package/dist/api/auth/d1-provider.js +0 -92
- package/dist/api/auth/d1-store.d.ts +0 -114
- package/dist/api/auth/d1-store.js +0 -895
- package/dist/api/auth/memory-provider.d.ts +0 -77
- package/dist/api/auth/memory-provider.js +0 -249
- package/dist/api/auth/rbac.d.ts +0 -22
- package/dist/api/auth/rbac.js +0 -162
- package/dist/api/auth/tokens.d.ts +0 -18
- package/dist/api/auth/tokens.js +0 -56
- package/dist/api/capabilities.d.ts +0 -9
- package/dist/api/capabilities.js +0 -33
- package/dist/api/config.d.ts +0 -2
- package/dist/api/config.js +0 -77
- package/dist/api/http.d.ts +0 -28
- package/dist/api/http.js +0 -51
- package/dist/api/index.d.ts +0 -9
- package/dist/api/index.js +0 -18
- package/dist/api/operations-routes.d.ts +0 -11
- package/dist/api/operations-routes.js +0 -87
- package/dist/api/operations.d.ts +0 -3
- package/dist/api/operations.js +0 -26
- package/dist/api/project-routes.d.ts +0 -8
- package/dist/api/project-routes.js +0 -586
- package/dist/api/providers.d.ts +0 -2
- package/dist/api/providers.js +0 -62
- package/dist/api/railway.d.ts +0 -50
- package/dist/api/railway.js +0 -69
- package/dist/api/sdk-dispatch.d.ts +0 -5
- package/dist/api/sdk-dispatch.js +0 -13
- package/dist/api/sdk-routes.d.ts +0 -11
- package/dist/api/sdk-routes.js +0 -29
- package/dist/api/server.d.ts +0 -2
- package/dist/api/server.js +0 -10
- package/dist/api/templates.d.ts +0 -3
- package/dist/api/templates.js +0 -31
- package/dist/api/types.d.ts +0 -231
- package/dist/api/types.js +0 -0
- package/dist/api.d.ts +0 -1
- package/dist/api.js +0 -1
- package/dist/railway.d.ts +0 -1
- package/dist/railway.js +0 -4
- package/dist/services/agents.d.ts +0 -11
- package/dist/services/agents.js +0 -48
- package/dist/services/common.d.ts +0 -66
- package/dist/services/common.js +0 -212
- package/dist/services/index.d.ts +0 -6
- package/dist/services/index.js +0 -19
- package/dist/services/manager.d.ts +0 -267
- package/dist/services/manager.js +0 -1368
- package/dist/services/remote-runner.d.ts +0 -30
- package/dist/services/remote-runner.js +0 -230
- package/dist/services/workday-content.d.ts +0 -53
- package/dist/services/workday-content.js +0 -190
- package/dist/services/workday-manager.d.ts +0 -279
- package/dist/services/workday-manager.js +0 -163
- package/dist/services/workday-report.d.ts +0 -195
- package/dist/services/workday-report.js +0 -17
- package/dist/services/workday-start.d.ts +0 -195
- package/dist/services/workday-start.js +0 -17
- package/dist/services/worker-capacity.d.ts +0 -58
- package/dist/services/worker-capacity.js +0 -208
- package/dist/services/worker-pool-scaler.d.ts +0 -27
- package/dist/services/worker-pool-scaler.js +0 -127
- package/dist/services/worker.d.ts +0 -19
- package/dist/services/worker.js +0 -436
- package/templates/github/deploy.workflow.yml +0 -577
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# @treeseed/core
|
|
2
2
|
|
|
3
|
-
`@treeseed/core` is the Treeseed
|
|
3
|
+
`@treeseed/core` is the Treeseed web framework package for Astro/Starlight sites. It contains the published web runtime, tenant site configuration, shared components and styles, the knowledge-factory content model, and the forms stack used by Treeseed tenants.
|
|
4
|
+
|
|
5
|
+
Backend API, agent runtime, manager, worker, and workday processing services are owned by `@treeseed/agent`.
|
|
4
6
|
|
|
5
7
|
This repository is the package root. Run package commands from [`core`](./), not from the top-level `treeseed` workspace.
|
|
6
8
|
|
|
@@ -33,7 +35,7 @@ npm ci
|
|
|
33
35
|
- `test/`: unit tests run by Vitest
|
|
34
36
|
- `.fixtures/treeseed-fixtures/`: pinned shared fixtures submodule
|
|
35
37
|
- `.github/workflows/`: CI and publish workflows for this package repo
|
|
36
|
-
- `templates/github/deploy.workflow.yml`: downstream tenant deploy workflow template
|
|
38
|
+
- `templates/github/deploy-web.workflow.yml`: downstream tenant web deploy workflow template
|
|
37
39
|
|
|
38
40
|
The package builds directly against the canonical shared working-site fixture in `treeseed-fixtures`.
|
|
39
41
|
|
|
@@ -50,10 +52,6 @@ That means the fixture may reference package surfaces owned by `sdk`, `core`, an
|
|
|
50
52
|
```bash
|
|
51
53
|
npm run dev
|
|
52
54
|
npm run dev:web
|
|
53
|
-
npm run dev:api
|
|
54
|
-
npm run dev:worker
|
|
55
|
-
npm run dev:workday-manager
|
|
56
|
-
npm run dev:worker-runner
|
|
57
55
|
npm run fixtures:check
|
|
58
56
|
npm run build:dist
|
|
59
57
|
npm run test:unit
|
|
@@ -64,10 +62,8 @@ npm run test:smoke
|
|
|
64
62
|
|
|
65
63
|
What they do:
|
|
66
64
|
|
|
67
|
-
- `dev`: starts the
|
|
65
|
+
- `dev`: starts the Astro UI local runtime from `core`
|
|
68
66
|
- `dev:web`: starts only the Astro UI dev surface through the `core` runtime
|
|
69
|
-
- `dev:api`: starts only the Hono API dev surface through the `core` runtime
|
|
70
|
-
- `dev:workday-manager`, `dev:worker-runner`: start the scheduled manager and worker runner entrypoints from `core`
|
|
71
67
|
- `fixtures:check`: verifies that the pinned shared fixture is initialized and usable
|
|
72
68
|
- `build:dist`: builds the publishable `dist/` package output
|
|
73
69
|
- `test:unit`: runs package unit tests with Vitest
|
|
@@ -117,7 +113,7 @@ This repo ships two package workflows:
|
|
|
117
113
|
- [`ci.yml`](./.github/workflows/ci.yml): runs on push and pull request, installs with `npm ci`, then runs `npm run verify`
|
|
118
114
|
- [`publish.yml`](./.github/workflows/publish.yml): runs on `workflow_dispatch` and on plain semver tags like `0.1.0`; it installs with `npm ci`, validates the tag with `release:check-tag`, runs `npm run verify`, and publishes with `NPM_TOKEN`
|
|
119
115
|
|
|
120
|
-
The deploy workflow template at [`templates/github/deploy.workflow.yml`](./templates/github/deploy.workflow.yml) is for downstream Treeseed
|
|
116
|
+
The deploy workflow template at [`templates/github/deploy-web.workflow.yml`](./templates/github/deploy-web.workflow.yml) is for downstream Treeseed web repositories, not for publishing this package. Processing host deploy assets are owned by `@treeseed/agent`.
|
|
121
117
|
|
|
122
118
|
## Consumer Contract
|
|
123
119
|
|
|
@@ -132,7 +128,7 @@ The published package includes:
|
|
|
132
128
|
- `utils/`
|
|
133
129
|
- `README.md`
|
|
134
130
|
|
|
135
|
-
The package currently depends on `@treeseed/sdk` plus the runtime packages needed for its web
|
|
131
|
+
The package currently depends on `@treeseed/sdk` plus the runtime packages needed for its web surfaces. It does not depend on `@treeseed/cli` or `@treeseed/agent`.
|
|
136
132
|
|
|
137
133
|
## Contributor Workflow
|
|
138
134
|
|
package/dist/dev-watch.js
CHANGED
|
@@ -85,7 +85,7 @@ function classifyChanges(changedPaths, watchEntries) {
|
|
|
85
85
|
}
|
|
86
86
|
function isTenantApiInput(filePath) {
|
|
87
87
|
const normalized = filePath.split(sep).join("/");
|
|
88
|
-
return normalized.
|
|
88
|
+
return normalized.endsWith("/treeseed.site.yaml") || normalized.endsWith("/treeseed.config.ts") || normalized.endsWith("/package.json") || normalized.endsWith("/tsconfig.json");
|
|
89
89
|
}
|
|
90
90
|
const tenantChanged = changedPaths.some(
|
|
91
91
|
(filePath) => watchEntries.some((entry) => entry.kind === "tenant" && matchesEntry(filePath, entry))
|
package/dist/dev.d.ts
CHANGED
|
@@ -5,11 +5,10 @@ export declare const TREESEED_DEFAULT_WEB_HOST = "127.0.0.1";
|
|
|
5
5
|
export declare const TREESEED_DEFAULT_WEB_PORT = 4321;
|
|
6
6
|
export declare const TREESEED_DEFAULT_API_HOST = "127.0.0.1";
|
|
7
7
|
export declare const TREESEED_DEFAULT_API_PORT = 3000;
|
|
8
|
-
export declare const TREESEED_DEFAULT_MANAGER_PORT = 3100;
|
|
9
8
|
export declare const TREESEED_DEFAULT_LOCAL_SMTP_HOST = "127.0.0.1";
|
|
10
9
|
export declare const TREESEED_DEFAULT_LOCAL_SMTP_PORT = 1025;
|
|
11
10
|
export declare const TREESEED_DEFAULT_MAILPIT_UI_PORT = 8025;
|
|
12
|
-
export type TreeseedIntegratedDevSurface = 'integrated' | '
|
|
11
|
+
export type TreeseedIntegratedDevSurface = 'integrated' | 'web';
|
|
13
12
|
export type TreeseedIntegratedDevSetupMode = 'auto' | 'check' | 'off';
|
|
14
13
|
export type TreeseedIntegratedDevFeedbackMode = 'live' | 'restart' | 'off';
|
|
15
14
|
export type TreeseedIntegratedDevOpenMode = 'auto' | 'on' | 'off';
|
|
@@ -31,7 +30,6 @@ export type TreeseedIntegratedDevOptions = {
|
|
|
31
30
|
webPort?: number;
|
|
32
31
|
apiHost?: string;
|
|
33
32
|
apiPort?: number;
|
|
34
|
-
managerPort?: number;
|
|
35
33
|
setupMode?: TreeseedIntegratedDevSetupMode;
|
|
36
34
|
feedbackMode?: TreeseedIntegratedDevFeedbackMode;
|
|
37
35
|
openMode?: TreeseedIntegratedDevOpenMode;
|
|
@@ -46,7 +44,7 @@ export type TreeseedIntegratedDevOptions = {
|
|
|
46
44
|
shutdownGraceMs?: number;
|
|
47
45
|
};
|
|
48
46
|
export type TreeseedIntegratedDevCommand = {
|
|
49
|
-
id: 'web'
|
|
47
|
+
id: 'web';
|
|
50
48
|
label: string;
|
|
51
49
|
command: string;
|
|
52
50
|
args: string[];
|
package/dist/dev.js
CHANGED
|
@@ -27,7 +27,6 @@ const TREESEED_DEFAULT_WEB_HOST = "127.0.0.1";
|
|
|
27
27
|
const TREESEED_DEFAULT_WEB_PORT = 4321;
|
|
28
28
|
const TREESEED_DEFAULT_API_HOST = "127.0.0.1";
|
|
29
29
|
const TREESEED_DEFAULT_API_PORT = 3e3;
|
|
30
|
-
const TREESEED_DEFAULT_MANAGER_PORT = 3100;
|
|
31
30
|
const TREESEED_DEFAULT_LOCAL_SMTP_HOST = "127.0.0.1";
|
|
32
31
|
const TREESEED_DEFAULT_LOCAL_SMTP_PORT = 1025;
|
|
33
32
|
const TREESEED_DEFAULT_MAILPIT_UI_PORT = 8025;
|
|
@@ -83,28 +82,6 @@ function resolveOptionalScriptEntrypoint(packageDir, sourceRelativePath, distRel
|
|
|
83
82
|
}
|
|
84
83
|
return null;
|
|
85
84
|
}
|
|
86
|
-
function resolveTenantApiEntrypoint(tenantRoot, runTsPath) {
|
|
87
|
-
const javascriptCandidates = [
|
|
88
|
-
resolve(tenantRoot, "src", "api", "server.js"),
|
|
89
|
-
resolve(tenantRoot, "src", "api", "server.mjs")
|
|
90
|
-
];
|
|
91
|
-
for (const candidate of javascriptCandidates) {
|
|
92
|
-
if (existsSync(candidate)) {
|
|
93
|
-
return {
|
|
94
|
-
command: process.execPath,
|
|
95
|
-
args: [candidate]
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
const typescriptCandidate = resolve(tenantRoot, "src", "api", "server.ts");
|
|
100
|
-
if (existsSync(typescriptCandidate) && existsSync(runTsPath)) {
|
|
101
|
-
return {
|
|
102
|
-
command: process.execPath,
|
|
103
|
-
args: [runTsPath, typescriptCandidate]
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
85
|
function normalizePort(value, fallback) {
|
|
109
86
|
return Number.isInteger(value) && Number(value) > 0 ? Number(value) : fallback;
|
|
110
87
|
}
|
|
@@ -156,20 +133,6 @@ function selectWebLocalRuntime(surfaceConfig, providerFallback = "local") {
|
|
|
156
133
|
reason: requested === "local" ? "Configured to use the full local Astro runtime." : `Provider "${provider}" has no provider-local web runtime; using Astro local.`
|
|
157
134
|
};
|
|
158
135
|
}
|
|
159
|
-
function selectServiceLocalRuntime(serviceName, serviceConfig) {
|
|
160
|
-
const record = serviceConfig && typeof serviceConfig === "object" ? serviceConfig : {};
|
|
161
|
-
const provider = normalizeProvider(record.provider, "railway");
|
|
162
|
-
const requested = normalizeLocalRuntimeMode(record.local?.runtime);
|
|
163
|
-
if (requested === "provider") {
|
|
164
|
-
throw new Error(unsupportedProviderRuntimeMessage("service", serviceName, provider));
|
|
165
|
-
}
|
|
166
|
-
return {
|
|
167
|
-
requested,
|
|
168
|
-
provider,
|
|
169
|
-
selected: "node-local",
|
|
170
|
-
reason: requested === "local" ? "Configured to use the full local Node runtime." : `Provider "${provider}" has no provider-local service runtime; using Node local.`
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
136
|
function loadDevDeployConfig(tenantRoot) {
|
|
174
137
|
try {
|
|
175
138
|
return loadTreeseedDeployConfig(resolve(tenantRoot, "treeseed.site.yaml"));
|
|
@@ -272,9 +235,6 @@ function createWatchEntries(tenantRoot, sdkPackageRoot) {
|
|
|
272
235
|
}
|
|
273
236
|
return entries;
|
|
274
237
|
}
|
|
275
|
-
function isSurfaceIncluded(plan, id) {
|
|
276
|
-
return plan.commands.some((command) => command.id === id);
|
|
277
|
-
}
|
|
278
238
|
function createSetupSteps(tenantRoot, setupMode, sdkPackageRoot, planLike, env, mailpitEnabled, usesCloudflareWebRuntime) {
|
|
279
239
|
if (setupMode === "off") {
|
|
280
240
|
return [
|
|
@@ -311,7 +271,7 @@ function createSetupSteps(tenantRoot, setupMode, sdkPackageRoot, planLike, env,
|
|
|
311
271
|
{
|
|
312
272
|
id: "wrangler",
|
|
313
273
|
label: "Verify Wrangler executable",
|
|
314
|
-
required: usesCloudflareWebRuntime
|
|
274
|
+
required: usesCloudflareWebRuntime,
|
|
315
275
|
status: "planned",
|
|
316
276
|
detail: resolveTreeseedToolBinary("wrangler", { env }) ?? void 0
|
|
317
277
|
},
|
|
@@ -354,7 +314,7 @@ function createSetupSteps(tenantRoot, setupMode, sdkPackageRoot, planLike, env,
|
|
|
354
314
|
detail: mailpitEnabled ? mailpit ? "Mailpit SMTP will listen on 127.0.0.1:1025 and the web UI on http://127.0.0.1:8025." : "Unable to resolve the Mailpit startup script." : "Docker Compose is unavailable, so Mailpit is disabled for this local dev run."
|
|
355
315
|
}
|
|
356
316
|
];
|
|
357
|
-
if (
|
|
317
|
+
if (usesCloudflareWebRuntime && existsSync(resolve(tenantRoot, "migrations"))) {
|
|
358
318
|
const migrate = resolveOptionalScriptEntrypoint(
|
|
359
319
|
sdkPackageRoot,
|
|
360
320
|
"scripts/tenant-d1-migrate-local.ts",
|
|
@@ -383,8 +343,6 @@ function createTreeseedIntegratedDevPlan(options = {}) {
|
|
|
383
343
|
const webPort = normalizePort(options.webPort, TREESEED_DEFAULT_WEB_PORT);
|
|
384
344
|
const apiHost = options.apiHost ?? TREESEED_DEFAULT_API_HOST;
|
|
385
345
|
const apiPort = normalizePort(options.apiPort, TREESEED_DEFAULT_API_PORT);
|
|
386
|
-
const managerPort = normalizePort(options.managerPort, TREESEED_DEFAULT_MANAGER_PORT);
|
|
387
|
-
const includeServices = options.includeServices ?? (surface === "integrated" || surface === "services");
|
|
388
346
|
const machineEnv = resolveLocalMachineEnv(tenantRoot);
|
|
389
347
|
const mergedEnv = { ...process.env, ...machineEnv, ...options.env ?? {} };
|
|
390
348
|
const projectId = options.projectId ?? mergedEnv.TREESEED_PROJECT_ID;
|
|
@@ -394,13 +352,7 @@ function createTreeseedIntegratedDevPlan(options = {}) {
|
|
|
394
352
|
const sdkPackageRoot = resolvePackageRoot("@treeseed/sdk", tenantRoot);
|
|
395
353
|
const deployConfig = loadDevDeployConfig(tenantRoot);
|
|
396
354
|
const webLocalRuntime = selectWebLocalRuntime(deployConfig?.surfaces?.web, fallbackWebProviderFromDeployConfig(deployConfig));
|
|
397
|
-
const serviceLocalRuntimes = {
|
|
398
|
-
api: selectServiceLocalRuntime("api", deployConfig?.services?.api),
|
|
399
|
-
manager: selectServiceLocalRuntime("manager", deployConfig?.services?.manager),
|
|
400
|
-
worker: selectServiceLocalRuntime("worker", deployConfig?.services?.worker)
|
|
401
|
-
};
|
|
402
355
|
const usesCloudflareWebRuntime = webLocalRuntime.selected === "cloudflare-wrangler-local";
|
|
403
|
-
const coreRunTsPath = resolve(packageRoot, "scripts", "run-ts.mjs");
|
|
404
356
|
const webEntrypoint = resolveNodeEntrypoint(
|
|
405
357
|
sdkPackageRoot,
|
|
406
358
|
"scripts/tenant-astro-command.ts",
|
|
@@ -420,21 +372,6 @@ function createTreeseedIntegratedDevPlan(options = {}) {
|
|
|
420
372
|
String(webPort)
|
|
421
373
|
]
|
|
422
374
|
};
|
|
423
|
-
const apiEntrypoint = resolveTenantApiEntrypoint(tenantRoot, coreRunTsPath) ?? resolveNodeEntrypoint(
|
|
424
|
-
packageRoot,
|
|
425
|
-
"src/api/server.ts",
|
|
426
|
-
"dist/api/server.js"
|
|
427
|
-
);
|
|
428
|
-
const managerEntrypoint = resolveNodeEntrypoint(
|
|
429
|
-
packageRoot,
|
|
430
|
-
"src/services/manager.ts",
|
|
431
|
-
"dist/services/manager.js"
|
|
432
|
-
);
|
|
433
|
-
const workerEntrypoint = resolveNodeEntrypoint(
|
|
434
|
-
packageRoot,
|
|
435
|
-
"src/services/worker.ts",
|
|
436
|
-
"dist/services/worker.js"
|
|
437
|
-
);
|
|
438
375
|
const watchEntries = watch ? createWatchEntries(tenantRoot, sdkPackageRoot) : [];
|
|
439
376
|
const mailpitEnabled = dockerComposeIsAvailable(mergedEnv);
|
|
440
377
|
const resetRequested = options.reset === true;
|
|
@@ -480,46 +417,6 @@ function createTreeseedIntegratedDevPlan(options = {}) {
|
|
|
480
417
|
localRuntime: webLocalRuntime
|
|
481
418
|
});
|
|
482
419
|
}
|
|
483
|
-
if (surface === "integrated" || surface === "api") {
|
|
484
|
-
commands.push({
|
|
485
|
-
id: "api",
|
|
486
|
-
label: "Hono API",
|
|
487
|
-
command: apiEntrypoint.command,
|
|
488
|
-
args: apiEntrypoint.args,
|
|
489
|
-
cwd: tenantRoot,
|
|
490
|
-
env: {
|
|
491
|
-
...sharedEnv,
|
|
492
|
-
PORT: options.apiPort != null ? String(apiPort) : sharedEnv.PORT ?? String(apiPort)
|
|
493
|
-
},
|
|
494
|
-
localRuntime: serviceLocalRuntimes.api
|
|
495
|
-
});
|
|
496
|
-
}
|
|
497
|
-
if (includeServices || surface === "manager") {
|
|
498
|
-
commands.push({
|
|
499
|
-
id: "manager",
|
|
500
|
-
label: "Manager",
|
|
501
|
-
command: managerEntrypoint.command,
|
|
502
|
-
args: managerEntrypoint.args,
|
|
503
|
-
cwd: tenantRoot,
|
|
504
|
-
env: {
|
|
505
|
-
...sharedEnv,
|
|
506
|
-
PORT: options.managerPort != null ? String(managerPort) : sharedEnv.PORT ?? String(managerPort),
|
|
507
|
-
TREESEED_MANAGER_BASE_URL: options.managerPort != null ? `http://${apiHost}:${managerPort}` : sharedEnv.TREESEED_MANAGER_BASE_URL ?? `http://${apiHost}:${managerPort}`
|
|
508
|
-
},
|
|
509
|
-
localRuntime: serviceLocalRuntimes.manager
|
|
510
|
-
});
|
|
511
|
-
}
|
|
512
|
-
if (includeServices || surface === "worker") {
|
|
513
|
-
commands.push({
|
|
514
|
-
id: "worker",
|
|
515
|
-
label: "Worker",
|
|
516
|
-
command: workerEntrypoint.command,
|
|
517
|
-
args: workerEntrypoint.args,
|
|
518
|
-
cwd: tenantRoot,
|
|
519
|
-
env: sharedEnv,
|
|
520
|
-
localRuntime: serviceLocalRuntimes.worker
|
|
521
|
-
});
|
|
522
|
-
}
|
|
523
420
|
const readyChecks = commands.map((command) => {
|
|
524
421
|
if (command.id === "web") {
|
|
525
422
|
return {
|
|
@@ -530,15 +427,6 @@ function createTreeseedIntegratedDevPlan(options = {}) {
|
|
|
530
427
|
url: webUrl ?? void 0
|
|
531
428
|
};
|
|
532
429
|
}
|
|
533
|
-
if (command.id === "api") {
|
|
534
|
-
return {
|
|
535
|
-
id: command.id,
|
|
536
|
-
label: command.label,
|
|
537
|
-
required: true,
|
|
538
|
-
strategy: "http",
|
|
539
|
-
url: `${apiBaseUrl.replace(/\/$/u, "")}/readyz`
|
|
540
|
-
};
|
|
541
|
-
}
|
|
542
430
|
return {
|
|
543
431
|
id: command.id,
|
|
544
432
|
label: command.label,
|
|
@@ -569,8 +457,7 @@ function createTreeseedIntegratedDevPlan(options = {}) {
|
|
|
569
457
|
watchEntries,
|
|
570
458
|
commands,
|
|
571
459
|
localRuntimes: {
|
|
572
|
-
web: webLocalRuntime
|
|
573
|
-
...serviceLocalRuntimes
|
|
460
|
+
web: webLocalRuntime
|
|
574
461
|
},
|
|
575
462
|
reset
|
|
576
463
|
};
|
|
@@ -1284,13 +1171,7 @@ async function runTreeseedIntegratedDev(options = {}, deps = {}) {
|
|
|
1284
1171
|
await restartCommand("web");
|
|
1285
1172
|
}
|
|
1286
1173
|
if (change.packageChanged || change.sdkChanged) {
|
|
1287
|
-
await
|
|
1288
|
-
restartCommand("api"),
|
|
1289
|
-
restartCommand("manager"),
|
|
1290
|
-
restartCommand("worker")
|
|
1291
|
-
]);
|
|
1292
|
-
} else if (change.tenantApiChanged) {
|
|
1293
|
-
await restartCommand("api");
|
|
1174
|
+
await restartCommand("web");
|
|
1294
1175
|
}
|
|
1295
1176
|
if (plan.feedbackMode === "live") {
|
|
1296
1177
|
writeDevReloadStamp(plan.tenantRoot);
|
|
@@ -1379,7 +1260,6 @@ export {
|
|
|
1379
1260
|
TREESEED_DEFAULT_LOCAL_SMTP_HOST,
|
|
1380
1261
|
TREESEED_DEFAULT_LOCAL_SMTP_PORT,
|
|
1381
1262
|
TREESEED_DEFAULT_MAILPIT_UI_PORT,
|
|
1382
|
-
TREESEED_DEFAULT_MANAGER_PORT,
|
|
1383
1263
|
TREESEED_DEFAULT_WEB_HOST,
|
|
1384
1264
|
TREESEED_DEFAULT_WEB_PORT,
|
|
1385
1265
|
createTreeseedIntegratedDevPlan,
|
package/dist/env.yaml
CHANGED
|
@@ -1,198 +1,34 @@
|
|
|
1
1
|
entries:
|
|
2
|
-
|
|
3
|
-
label:
|
|
2
|
+
TREESEED_PROJECT_DOMAINS:
|
|
3
|
+
label: Project custom domains
|
|
4
4
|
group: auth
|
|
5
|
-
description:
|
|
6
|
-
howToGet:
|
|
7
|
-
sensitivity: secret
|
|
8
|
-
targets:
|
|
9
|
-
- local-runtime
|
|
10
|
-
- railway-secret
|
|
11
|
-
scopes:
|
|
12
|
-
- local
|
|
13
|
-
- staging
|
|
14
|
-
- prod
|
|
15
|
-
requirement: required
|
|
16
|
-
purposes:
|
|
17
|
-
- save
|
|
18
|
-
- config
|
|
19
|
-
validation:
|
|
20
|
-
kind: nonempty
|
|
21
|
-
minLength: 8
|
|
22
|
-
sourcePriority:
|
|
23
|
-
- machine-config
|
|
24
|
-
- process-env
|
|
25
|
-
TREESEED_GITHUB_OWNER:
|
|
26
|
-
label: GitHub repository owner
|
|
27
|
-
group: github
|
|
28
|
-
description: GitHub user or organization that owns the Treeseed repository used for bootstrap, CI/CD, and environment sync.
|
|
29
|
-
howToGet: Treeseed suggests this from the origin remote when available. Otherwise enter the GitHub user or organization that should own the repository.
|
|
30
|
-
sensitivity: plain
|
|
31
|
-
targets:
|
|
32
|
-
- local-runtime
|
|
33
|
-
scopes:
|
|
34
|
-
- local
|
|
35
|
-
storage: scoped
|
|
36
|
-
requirement: required
|
|
37
|
-
purposes:
|
|
38
|
-
- config
|
|
39
|
-
validation:
|
|
40
|
-
kind: nonempty
|
|
41
|
-
sourcePriority:
|
|
42
|
-
- machine-config
|
|
43
|
-
- process-env
|
|
44
|
-
defaultValueRef: githubOwnerDefault
|
|
45
|
-
TREESEED_GITHUB_REPOSITORY_NAME:
|
|
46
|
-
label: GitHub repository name
|
|
47
|
-
group: github
|
|
48
|
-
description: GitHub repository name Treeseed should verify or create before GitHub bootstrap.
|
|
49
|
-
howToGet: Treeseed suggests this from the origin remote when available and otherwise defaults it from the site slug.
|
|
50
|
-
sensitivity: plain
|
|
51
|
-
targets:
|
|
52
|
-
- local-runtime
|
|
53
|
-
scopes:
|
|
54
|
-
- local
|
|
55
|
-
storage: scoped
|
|
56
|
-
requirement: required
|
|
57
|
-
purposes:
|
|
58
|
-
- config
|
|
59
|
-
validation:
|
|
60
|
-
kind: nonempty
|
|
61
|
-
sourcePriority:
|
|
62
|
-
- machine-config
|
|
63
|
-
- process-env
|
|
64
|
-
defaultValueRef: githubRepositoryNameDefault
|
|
65
|
-
TREESEED_GITHUB_REPOSITORY_VISIBILITY:
|
|
66
|
-
label: GitHub repository visibility
|
|
67
|
-
group: github
|
|
68
|
-
description: Visibility to use if Treeseed needs to create the GitHub repository during bootstrap.
|
|
69
|
-
howToGet: Choose private, public, or internal. Treeseed defaults new repositories to private.
|
|
70
|
-
sensitivity: plain
|
|
71
|
-
targets:
|
|
72
|
-
- local-runtime
|
|
73
|
-
scopes:
|
|
74
|
-
- local
|
|
75
|
-
storage: scoped
|
|
76
|
-
requirement: optional
|
|
77
|
-
purposes:
|
|
78
|
-
- config
|
|
79
|
-
validation:
|
|
80
|
-
kind: enum
|
|
81
|
-
values:
|
|
82
|
-
- private
|
|
83
|
-
- public
|
|
84
|
-
- internal
|
|
85
|
-
sourcePriority:
|
|
86
|
-
- machine-config
|
|
87
|
-
- process-env
|
|
88
|
-
defaultValueRef: githubRepositoryVisibilityDefault
|
|
89
|
-
CLOUDFLARE_API_TOKEN:
|
|
90
|
-
label: Cloudflare API token
|
|
91
|
-
group: auth
|
|
92
|
-
description: Account-level Cloudflare API token used by Wrangler, Workers AI, and CI to manage Pages, Workers, Workers KV, D1, Queues, DNS, secrets, and deploys.
|
|
93
|
-
howToGet: "Create a Cloudflare account-level API token scoped to the target domain and account. Required permissions: Account Cloudflare Pages edit, Account Workers Scripts edit, Account Workers KV Storage edit, Account D1 edit, Account Queues edit, Zone DNS edit, Workers AI Read, and Workers AI Edit for model execution. If TREESEED_COMMIT_AI_GATEWAY_ID is configured, also grant AI Gateway Read/Run access for the gateway. Then paste it here as CLOUDFLARE_API_TOKEN."
|
|
94
|
-
sensitivity: secret
|
|
95
|
-
targets:
|
|
96
|
-
- local-runtime
|
|
97
|
-
- github-secret
|
|
98
|
-
scopes:
|
|
99
|
-
- local
|
|
100
|
-
- staging
|
|
101
|
-
- prod
|
|
102
|
-
storage: shared
|
|
103
|
-
requirement: required
|
|
104
|
-
purposes:
|
|
105
|
-
- save
|
|
106
|
-
- deploy
|
|
107
|
-
- destroy
|
|
108
|
-
- config
|
|
109
|
-
validation:
|
|
110
|
-
kind: nonempty
|
|
111
|
-
minLength: 8
|
|
112
|
-
sourcePriority:
|
|
113
|
-
- machine-config
|
|
114
|
-
- process-env
|
|
115
|
-
RAILWAY_API_TOKEN:
|
|
116
|
-
label: Railway API token
|
|
117
|
-
group: auth
|
|
118
|
-
description: Primary Railway token for user or workspace scoped access, including project creation and most Treeseed-managed Railway flows.
|
|
119
|
-
howToGet: In Railway, create a user or workspace API token that can create and manage the target project, then paste it here.
|
|
120
|
-
sensitivity: secret
|
|
121
|
-
targets:
|
|
122
|
-
- local-runtime
|
|
123
|
-
- github-secret
|
|
124
|
-
- railway-secret
|
|
125
|
-
scopes:
|
|
126
|
-
- staging
|
|
127
|
-
- prod
|
|
128
|
-
requirement: conditional
|
|
129
|
-
purposes:
|
|
130
|
-
- deploy
|
|
131
|
-
- destroy
|
|
132
|
-
- config
|
|
133
|
-
validation:
|
|
134
|
-
kind: nonempty
|
|
135
|
-
minLength: 8
|
|
136
|
-
sourcePriority:
|
|
137
|
-
- machine-config
|
|
138
|
-
- process-env
|
|
139
|
-
relevanceRef: railwayManagedEnabled
|
|
140
|
-
requiredWhenRef: railwayManagedEnabled
|
|
141
|
-
TREESEED_RAILWAY_WORKSPACE:
|
|
142
|
-
label: Railway workspace
|
|
143
|
-
group: railway
|
|
144
|
-
description: Railway workspace Treeseed should use when listing or creating projects during bootstrap and config reconciliation.
|
|
145
|
-
howToGet: In Railway, use the workspace slug or name shown in the workspace switcher. Treeseed defaults this repository to knowledge-coop unless you override it here.
|
|
146
|
-
sensitivity: plain
|
|
147
|
-
targets:
|
|
148
|
-
- railway-var
|
|
149
|
-
scopes:
|
|
150
|
-
- staging
|
|
151
|
-
- prod
|
|
152
|
-
storage: shared
|
|
153
|
-
requirement: conditional
|
|
154
|
-
purposes:
|
|
155
|
-
- deploy
|
|
156
|
-
- destroy
|
|
157
|
-
- config
|
|
158
|
-
validation:
|
|
159
|
-
kind: nonempty
|
|
160
|
-
sourcePriority:
|
|
161
|
-
- machine-config
|
|
162
|
-
- process-env
|
|
163
|
-
defaultValueRef: railwayWorkspaceDefault
|
|
164
|
-
relevanceRef: railwayManagedEnabled
|
|
165
|
-
requiredWhenRef: railwayManagedEnabled
|
|
166
|
-
CLOUDFLARE_ACCOUNT_ID:
|
|
167
|
-
label: Cloudflare account ID
|
|
168
|
-
group: cloudflare
|
|
169
|
-
description: Identifies the Cloudflare account Treeseed should provision, deploy into, and use for Workers AI commit message generation.
|
|
170
|
-
howToGet: In the Cloudflare dashboard, open Workers & Pages or Account Home and copy the account ID.
|
|
5
|
+
description: Comma-separated domains for the web-facing project surfaces. Treeseed uses this as a shared hint when it needs to complete environment-specific URL defaults.
|
|
6
|
+
howToGet: List one or more custom domains, separated by commas. Leave the default if the primary site URL already reflects the right domain.
|
|
171
7
|
sensitivity: plain
|
|
172
8
|
targets:
|
|
173
|
-
- local-runtime
|
|
174
9
|
- github-variable
|
|
175
|
-
-
|
|
10
|
+
- railway-var
|
|
11
|
+
- cloudflare-var
|
|
176
12
|
scopes:
|
|
177
|
-
- local
|
|
178
13
|
- staging
|
|
179
14
|
- prod
|
|
180
15
|
storage: shared
|
|
181
|
-
requirement:
|
|
16
|
+
requirement: optional
|
|
182
17
|
purposes:
|
|
183
|
-
- save
|
|
184
18
|
- deploy
|
|
185
|
-
- destroy
|
|
186
19
|
- config
|
|
187
20
|
validation:
|
|
188
21
|
kind: nonempty
|
|
189
22
|
sourcePriority:
|
|
190
23
|
- machine-config
|
|
191
24
|
- process-env
|
|
192
|
-
|
|
25
|
+
defaultValueRef: projectDomainsDefault
|
|
26
|
+
relevanceRef: webSurfaceEnabled
|
|
193
27
|
TREESEED_FORM_TOKEN_SECRET:
|
|
194
28
|
label: Forms token secret
|
|
195
29
|
group: forms
|
|
30
|
+
cluster: forms-core
|
|
31
|
+
startupProfile: core
|
|
196
32
|
description: Signs form-related tokens and protects Treeseed forms workflows in local and hosted runtimes.
|
|
197
33
|
howToGet: Treeseed can generate a strong random secret for you. Reuse it across environments only if that matches your security model.
|
|
198
34
|
sensitivity: secret
|
|
@@ -219,9 +55,11 @@ entries:
|
|
|
219
55
|
- process-env
|
|
220
56
|
defaultValueRef: generatedSecret
|
|
221
57
|
localDefaultValueRef: generatedSecret
|
|
58
|
+
relevanceRef: formsEnabled
|
|
222
59
|
TREESEED_PUBLIC_TURNSTILE_SITE_KEY:
|
|
223
60
|
label: Turnstile site key
|
|
224
61
|
group: forms
|
|
62
|
+
cluster: turnstile
|
|
225
63
|
description: Public site key used by the browser to render the Turnstile challenge when forms protection is enabled.
|
|
226
64
|
howToGet: Create a Turnstile widget in Cloudflare Turnstile and copy the site key.
|
|
227
65
|
sensitivity: plain
|
|
@@ -247,6 +85,7 @@ entries:
|
|
|
247
85
|
TREESEED_TURNSTILE_SECRET_KEY:
|
|
248
86
|
label: Turnstile secret key
|
|
249
87
|
group: forms
|
|
88
|
+
cluster: turnstile
|
|
250
89
|
description: Server-side Turnstile secret used to verify challenge responses.
|
|
251
90
|
howToGet: Create a Turnstile widget in Cloudflare Turnstile and copy the secret key.
|
|
252
91
|
sensitivity: secret
|
|
@@ -272,6 +111,7 @@ entries:
|
|
|
272
111
|
TREESEED_SMTP_HOST:
|
|
273
112
|
label: SMTP host
|
|
274
113
|
group: smtp
|
|
114
|
+
cluster: smtp
|
|
275
115
|
description: SMTP host for Treeseed email delivery when SMTP-backed forms behavior is enabled.
|
|
276
116
|
howToGet: Use the SMTP hostname from your email provider or local Mailpit instance.
|
|
277
117
|
sensitivity: plain
|
|
@@ -302,6 +142,7 @@ entries:
|
|
|
302
142
|
TREESEED_SMTP_PORT:
|
|
303
143
|
label: SMTP port
|
|
304
144
|
group: smtp
|
|
145
|
+
cluster: smtp
|
|
305
146
|
description: Port used to connect to the SMTP server.
|
|
306
147
|
howToGet: Use the port provided by your email service, commonly 587, 465, or the Mailpit local port.
|
|
307
148
|
sensitivity: plain
|
|
@@ -332,6 +173,7 @@ entries:
|
|
|
332
173
|
TREESEED_SMTP_USERNAME:
|
|
333
174
|
label: SMTP username
|
|
334
175
|
group: smtp
|
|
176
|
+
cluster: smtp
|
|
335
177
|
description: SMTP identity used when authenticating to the mail provider.
|
|
336
178
|
howToGet: Use the SMTP username or mailbox identity from your email provider.
|
|
337
179
|
sensitivity: plain
|
|
@@ -361,6 +203,7 @@ entries:
|
|
|
361
203
|
TREESEED_SMTP_PASSWORD:
|
|
362
204
|
label: SMTP password
|
|
363
205
|
group: smtp
|
|
206
|
+
cluster: smtp
|
|
364
207
|
description: SMTP password or app password used for authenticated email sending.
|
|
365
208
|
howToGet: Use the SMTP password or app-specific password from your email provider.
|
|
366
209
|
sensitivity: secret
|
|
@@ -390,6 +233,7 @@ entries:
|
|
|
390
233
|
TREESEED_SMTP_FROM:
|
|
391
234
|
label: SMTP from address
|
|
392
235
|
group: smtp
|
|
236
|
+
cluster: smtp
|
|
393
237
|
description: Email address Treeseed uses as the sender for mail notifications.
|
|
394
238
|
howToGet: Use a verified sender address from your SMTP provider.
|
|
395
239
|
sensitivity: plain
|
|
@@ -414,11 +258,13 @@ entries:
|
|
|
414
258
|
sourcePriority:
|
|
415
259
|
- machine-config
|
|
416
260
|
- process-env
|
|
261
|
+
localDefaultValueRef: contactEmailDefault
|
|
417
262
|
relevanceRef: smtpEnabled
|
|
418
263
|
requiredWhenRef: smtpNonLocal
|
|
419
264
|
TREESEED_SMTP_REPLY_TO:
|
|
420
265
|
label: SMTP reply-to address
|
|
421
266
|
group: smtp
|
|
267
|
+
cluster: smtp
|
|
422
268
|
description: Reply-to address attached to Treeseed-generated emails.
|
|
423
269
|
howToGet: Use a monitored mailbox that should receive replies from end users.
|
|
424
270
|
sensitivity: plain
|
|
@@ -443,5 +289,7 @@ entries:
|
|
|
443
289
|
sourcePriority:
|
|
444
290
|
- machine-config
|
|
445
291
|
- process-env
|
|
292
|
+
localDefaultValueRef: contactEmailDefault
|
|
446
293
|
relevanceRef: smtpEnabled
|
|
447
294
|
requiredWhenRef: smtpNonLocal
|
|
295
|
+
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
export { buildTreeseedSiteLayers, resolveTreeseedPageEntrypoint, resolveTreeseedSiteResource, resolveTreeseedStyleEntrypoint, TREESEED_SITE_RESOURCE_KINDS, } from './site-resources';
|
|
2
2
|
export { buildTreeseedPlatformLayers, resolveTreeseedPlatformResource, TREESEED_PLATFORM_RESOURCE_KINDS, } from './platform-resources';
|
|
3
3
|
export { parseSiteConfig } from './utils/site-config-schema.js';
|
|
4
|
-
export { createTreeseedApiApp } from './api/app';
|
|
5
|
-
export { createRailwayTreeseedApiServer } from './api/railway';
|
|
6
|
-
export { resolveApiConfig } from './api/config';
|
|
7
4
|
export { executeKnowledgeHubProviderLaunch, validateKnowledgeHubProviderLaunchPrerequisites, } from './launch';
|
|
8
5
|
export { createTreeseedIntegratedDevPlan, runTreeseedIntegratedDev, type TreeseedIntegratedDevCommand, type TreeseedIntegratedDevOptions, type TreeseedIntegratedDevPlan, type TreeseedIntegratedDevSurface, } from './dev';
|
|
9
6
|
export { filterSiteRenderedModels, isSiteRenderedModel, siteModelRendered, } from './utils/site-models.ts';
|
|
10
|
-
export type * from './api/types';
|
package/dist/index.js
CHANGED
|
@@ -11,9 +11,6 @@ import {
|
|
|
11
11
|
TREESEED_PLATFORM_RESOURCE_KINDS
|
|
12
12
|
} from "./platform-resources.js";
|
|
13
13
|
import { parseSiteConfig } from "./utils/site-config-schema.js";
|
|
14
|
-
import { createTreeseedApiApp } from "./api/app.js";
|
|
15
|
-
import { createRailwayTreeseedApiServer } from "./api/railway.js";
|
|
16
|
-
import { resolveApiConfig } from "./api/config.js";
|
|
17
14
|
import {
|
|
18
15
|
executeKnowledgeHubProviderLaunch,
|
|
19
16
|
validateKnowledgeHubProviderLaunchPrerequisites
|
|
@@ -32,14 +29,11 @@ export {
|
|
|
32
29
|
TREESEED_SITE_RESOURCE_KINDS,
|
|
33
30
|
buildTreeseedPlatformLayers,
|
|
34
31
|
buildTreeseedSiteLayers,
|
|
35
|
-
createRailwayTreeseedApiServer,
|
|
36
|
-
createTreeseedApiApp,
|
|
37
32
|
createTreeseedIntegratedDevPlan,
|
|
38
33
|
executeKnowledgeHubProviderLaunch,
|
|
39
34
|
filterSiteRenderedModels,
|
|
40
35
|
isSiteRenderedModel,
|
|
41
36
|
parseSiteConfig,
|
|
42
|
-
resolveApiConfig,
|
|
43
37
|
resolveTreeseedPageEntrypoint,
|
|
44
38
|
resolveTreeseedPlatformResource,
|
|
45
39
|
resolveTreeseedSiteResource,
|
|
@@ -232,9 +232,9 @@ function emitTypeDeclarations() {
|
|
|
232
232
|
resolve(srcRoot, 'services/index.ts'),
|
|
233
233
|
resolve(srcRoot, 'plugin-default.ts'),
|
|
234
234
|
resolve(srcRoot, 'index.ts'),
|
|
235
|
-
...walkFiles(resolve(srcRoot, 'api')).filter((filePath) => filePath.endsWith('.ts') && !filePath.endsWith('.d.js')),
|
|
236
|
-
...walkFiles(resolve(srcRoot, 'agents')).filter((filePath) => filePath.endsWith('.ts') && !filePath.endsWith('.d.js')),
|
|
237
|
-
...walkFiles(resolve(srcRoot, 'services')).filter((filePath) => filePath.endsWith('.ts') && !filePath.endsWith('.d.js')),
|
|
235
|
+
...(existsSync(resolve(srcRoot, 'api')) ? walkFiles(resolve(srcRoot, 'api')).filter((filePath) => filePath.endsWith('.ts') && !filePath.endsWith('.d.js')) : []),
|
|
236
|
+
...(existsSync(resolve(srcRoot, 'agents')) ? walkFiles(resolve(srcRoot, 'agents')).filter((filePath) => filePath.endsWith('.ts') && !filePath.endsWith('.d.js')) : []),
|
|
237
|
+
...(existsSync(resolve(srcRoot, 'services')) ? walkFiles(resolve(srcRoot, 'services')).filter((filePath) => filePath.endsWith('.ts') && !filePath.endsWith('.d.js')) : []),
|
|
238
238
|
].filter((filePath) => existsSync(filePath));
|
|
239
239
|
if (sourceFiles.length === 0) {
|
|
240
240
|
return;
|