@treeseed/core 0.4.6 → 0.4.7

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 (65) hide show
  1. package/README.md +8 -16
  2. package/dist/agent-runtime.d.ts +17 -0
  3. package/dist/agent-runtime.js +111 -0
  4. package/dist/agent.d.ts +11 -0
  5. package/dist/agent.js +25 -0
  6. package/dist/agents/adapters/execution.d.ts +46 -0
  7. package/dist/agents/adapters/execution.js +90 -0
  8. package/dist/agents/adapters/mutations.d.ts +22 -0
  9. package/dist/agents/adapters/mutations.js +30 -0
  10. package/dist/agents/adapters/notification.d.ts +11 -0
  11. package/dist/agents/adapters/notification.js +16 -0
  12. package/dist/agents/adapters/repository.d.ts +23 -0
  13. package/dist/agents/adapters/repository.js +61 -0
  14. package/dist/agents/adapters/research.d.ts +14 -0
  15. package/dist/agents/adapters/research.js +25 -0
  16. package/dist/agents/adapters/verification.d.ts +36 -0
  17. package/dist/agents/adapters/verification.js +62 -0
  18. package/dist/agents/cli-tools.d.ts +1 -0
  19. package/dist/agents/cli-tools.js +5 -0
  20. package/dist/agents/cli.d.ts +15 -0
  21. package/dist/agents/cli.js +109 -0
  22. package/dist/agents/contracts/messages.d.ts +88 -0
  23. package/dist/agents/contracts/messages.js +138 -0
  24. package/dist/agents/contracts/run.d.ts +20 -0
  25. package/dist/agents/contracts/run.js +0 -0
  26. package/dist/agents/index.d.ts +1 -0
  27. package/dist/agents/index.js +5 -0
  28. package/dist/agents/kernel/agent-kernel.d.ts +51 -0
  29. package/dist/agents/kernel/agent-kernel.js +285 -0
  30. package/dist/agents/kernel/trigger-resolver.d.ts +18 -0
  31. package/dist/agents/kernel/trigger-resolver.js +153 -0
  32. package/dist/agents/registry-helper.d.ts +4 -0
  33. package/dist/agents/registry-helper.js +14 -0
  34. package/dist/agents/registry.d.ts +6 -0
  35. package/dist/agents/registry.js +98 -0
  36. package/dist/agents/runtime-types.d.ts +117 -0
  37. package/dist/agents/runtime-types.js +0 -0
  38. package/dist/agents/spec-loader.d.ts +18 -0
  39. package/dist/agents/spec-loader.js +55 -0
  40. package/dist/agents/spec-normalizer.d.ts +2 -0
  41. package/dist/agents/spec-normalizer.js +257 -0
  42. package/dist/agents/spec-types.d.ts +64 -0
  43. package/dist/agents/spec-types.js +0 -0
  44. package/dist/agents/testing/agents-smoke.d.ts +1 -0
  45. package/dist/agents/testing/agents-smoke.js +32 -0
  46. package/dist/agents/testing/e2e-harness.d.ts +44 -0
  47. package/dist/agents/testing/e2e-harness.js +504 -0
  48. package/dist/api/agent-routes.js +2 -10
  49. package/dist/scripts/build-dist.js +5 -0
  50. package/dist/scripts/run-fixture-astro-command.js +2 -170
  51. package/dist/scripts/test-smoke.js +15 -1
  52. package/dist/scripts/workspace-bootstrap.js +0 -1
  53. package/dist/services/common.d.ts +20 -0
  54. package/dist/services/common.js +66 -0
  55. package/dist/services/index.d.ts +4 -0
  56. package/dist/services/index.js +11 -0
  57. package/dist/services/manager.d.ts +4 -0
  58. package/dist/services/manager.js +199 -0
  59. package/dist/services/workday-report.d.ts +17 -0
  60. package/dist/services/workday-report.js +44 -0
  61. package/dist/services/workday-start.d.ts +2 -0
  62. package/dist/services/workday-start.js +27 -0
  63. package/dist/services/worker.d.ts +6 -0
  64. package/dist/services/worker.js +108 -0
  65. package/package.json +43 -2
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+ import { fileURLToPath } from "node:url";
3
+ import { createGatewayClient, createQueueClient, resolveWorkerConfig } from "./common.js";
4
+ async function managerRequest(baseUrl, path, body) {
5
+ const response = await fetch(`${baseUrl}${path}`, {
6
+ method: "POST",
7
+ headers: {
8
+ accept: "application/json",
9
+ "content-type": "application/json"
10
+ },
11
+ body: JSON.stringify(body)
12
+ });
13
+ const payload = await response.json().catch(() => ({}));
14
+ if (!response.ok) {
15
+ throw new Error(typeof payload.error === "string" ? payload.error : `Manager request failed with ${response.status}.`);
16
+ }
17
+ return payload;
18
+ }
19
+ async function runWorkerCycle() {
20
+ const gateway = createGatewayClient();
21
+ const queue = createQueueClient();
22
+ const config = resolveWorkerConfig();
23
+ if (!gateway || !queue) {
24
+ throw new Error("Worker requires TREESEED_GATEWAY_BASE_URL, TREESEED_GATEWAY_BEARER_TOKEN, CLOUDFLARE_ACCOUNT_ID, TREESEED_QUEUE_ID, and TREESEED_QUEUE_PULL_TOKEN.");
25
+ }
26
+ const pulled = await queue.pull({
27
+ batchSize: config.batchSize,
28
+ visibilityTimeoutMs: config.visibilityTimeoutMs
29
+ });
30
+ if (pulled.messages.length === 0) {
31
+ return { ok: true, processed: 0 };
32
+ }
33
+ let processed = 0;
34
+ for (const message of pulled.messages) {
35
+ try {
36
+ await gateway.requestJson(`/tasks/${encodeURIComponent(message.body.taskId)}/claim`, {
37
+ body: {
38
+ workerId: config.workerId,
39
+ leaseSeconds: config.leaseSeconds
40
+ }
41
+ });
42
+ const context = await managerRequest(
43
+ config.managerBaseUrl,
44
+ "/internal/context/resolve-task",
45
+ { taskId: message.body.taskId }
46
+ );
47
+ const task = context.payload.task;
48
+ const payload = task && typeof task.payloadJson === "string" ? JSON.parse(task.payloadJson) : {};
49
+ await gateway.requestJson(`/tasks/${encodeURIComponent(message.body.taskId)}/progress`, {
50
+ body: {
51
+ workerId: config.workerId,
52
+ state: "running",
53
+ appendEvent: {
54
+ kind: "worker_started",
55
+ data: { workerId: config.workerId, queueAttempt: message.attempts }
56
+ }
57
+ }
58
+ });
59
+ await gateway.requestJson(`/tasks/${encodeURIComponent(message.body.taskId)}/complete`, {
60
+ body: {
61
+ output: {
62
+ workerId: config.workerId,
63
+ queueAttempt: message.attempts,
64
+ payload
65
+ },
66
+ summary: {
67
+ status: "completed",
68
+ workerId: config.workerId
69
+ }
70
+ }
71
+ });
72
+ await queue.ack([message.leaseId]);
73
+ processed += 1;
74
+ } catch (error) {
75
+ const retryDelaySeconds = Math.min(300, Math.max(15, message.attempts * 30));
76
+ await gateway.requestJson(`/tasks/${encodeURIComponent(message.body.taskId)}/fail`, {
77
+ body: {
78
+ errorMessage: error instanceof Error ? error.message : String(error),
79
+ retryable: true,
80
+ nextVisibleAt: new Date(Date.now() + retryDelaySeconds * 1e3).toISOString()
81
+ }
82
+ }).catch(() => null);
83
+ await queue.retry([{ leaseId: message.leaseId, delaySeconds: retryDelaySeconds }]);
84
+ }
85
+ }
86
+ return { ok: true, processed };
87
+ }
88
+ async function startWorkerLoop() {
89
+ const config = resolveWorkerConfig();
90
+ for (; ; ) {
91
+ try {
92
+ await runWorkerCycle();
93
+ } catch (error) {
94
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}
95
+ `);
96
+ }
97
+ await new Promise((resolve) => setTimeout(resolve, config.pollIntervalMs));
98
+ }
99
+ }
100
+ const currentFile = fileURLToPath(import.meta.url);
101
+ const entryFile = process.argv[1] ?? "";
102
+ if (entryFile === currentFile) {
103
+ await startWorkerLoop();
104
+ }
105
+ export {
106
+ runWorkerCycle,
107
+ startWorkerLoop
108
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@treeseed/core",
3
- "version": "0.4.6",
3
+ "version": "0.4.7",
4
4
  "description": "Treeseed integrated platform starter for Astro/Starlight web runtimes and Hono API runtimes.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
@@ -29,6 +29,7 @@
29
29
  "access": "public"
30
30
  },
31
31
  "bin": {
32
+ "treeseed-agents": "./dist/agents/cli.js",
32
33
  "treeseed-workspace-bootstrap": "./dist/scripts/workspace-bootstrap.js"
33
34
  },
34
35
  "scripts": {
@@ -39,6 +40,10 @@
39
40
  "dev": "node ./scripts/run-ts.mjs ./scripts/dev-platform.ts",
40
41
  "dev:web": "node ./scripts/run-ts.mjs ./scripts/dev-platform.ts --surface web",
41
42
  "dev:api": "node ./scripts/run-ts.mjs ./scripts/dev-platform.ts --surface api",
43
+ "dev:manager": "node ./scripts/run-ts.mjs ./src/services/manager.ts",
44
+ "dev:worker": "node ./scripts/run-ts.mjs ./src/services/worker.ts",
45
+ "dev:workday-start": "node ./scripts/run-ts.mjs ./src/services/workday-start.ts",
46
+ "dev:workday-report": "node ./scripts/run-ts.mjs ./src/services/workday-report.ts",
42
47
  "dev:watch": "node ./scripts/run-ts.mjs ./scripts/dev-platform.ts --watch",
43
48
  "starlight:patch": "node ./scripts/run-ts.mjs ./scripts/patch-starlight-content-path.ts",
44
49
  "precheck": "npm run starlight:patch",
@@ -62,7 +67,7 @@
62
67
  "release:publish": "node ./scripts/run-ts.mjs ./scripts/publish-package.ts"
63
68
  },
64
69
  "dependencies": {
65
- "@treeseed/sdk": "^0.4.5",
70
+ "@treeseed/sdk": "^0.4.6",
66
71
  "@astrojs/check": "^0.9.8",
67
72
  "@astrojs/cloudflare": "^12.6.13",
68
73
  "@astrojs/sitemap": "3.7.0",
@@ -107,6 +112,26 @@
107
112
  "types": "./dist/api.d.ts",
108
113
  "default": "./dist/api.js"
109
114
  },
115
+ "./agent": {
116
+ "types": "./dist/agent.d.ts",
117
+ "default": "./dist/agent.js"
118
+ },
119
+ "./agent/cli": {
120
+ "types": "./dist/agents/cli.d.ts",
121
+ "default": "./dist/agents/cli.js"
122
+ },
123
+ "./runtime-types": {
124
+ "types": "./dist/agents/runtime-types.d.ts",
125
+ "default": "./dist/agents/runtime-types.js"
126
+ },
127
+ "./contracts/messages": {
128
+ "types": "./dist/agents/contracts/messages.d.ts",
129
+ "default": "./dist/agents/contracts/messages.js"
130
+ },
131
+ "./contracts/run": {
132
+ "types": "./dist/agents/contracts/run.d.ts",
133
+ "default": "./dist/agents/contracts/run.js"
134
+ },
110
135
  "./railway": {
111
136
  "types": "./dist/railway.d.ts",
112
137
  "default": "./dist/railway.js"
@@ -134,6 +159,22 @@
134
159
  "./tenant": "./dist/tenant/bridge.js",
135
160
  "./scripts/dev-platform": "./dist/scripts/dev-platform.js",
136
161
  "./scripts/workspace-bootstrap": "./dist/scripts/workspace-bootstrap.js",
162
+ "./services/manager": {
163
+ "types": "./dist/services/manager.d.ts",
164
+ "default": "./dist/services/manager.js"
165
+ },
166
+ "./services/worker": {
167
+ "types": "./dist/services/worker.d.ts",
168
+ "default": "./dist/services/worker.js"
169
+ },
170
+ "./services/workday-start": {
171
+ "types": "./dist/services/workday-start.d.ts",
172
+ "default": "./dist/services/workday-start.js"
173
+ },
174
+ "./services/workday-report": {
175
+ "types": "./dist/services/workday-report.d.ts",
176
+ "default": "./dist/services/workday-report.js"
177
+ },
137
178
  "./api/app": {
138
179
  "types": "./dist/api/app.d.ts",
139
180
  "default": "./dist/api/app.js"