@treeseed/agent 0.1.2

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 (93) hide show
  1. package/Dockerfile +7 -0
  2. package/README.md +62 -0
  3. package/dist/agent-runtime.js +111 -0
  4. package/dist/agents/adapters/execution.js +90 -0
  5. package/dist/agents/adapters/mutations.js +30 -0
  6. package/dist/agents/adapters/notification.js +16 -0
  7. package/dist/agents/adapters/repository.js +61 -0
  8. package/dist/agents/adapters/research.js +25 -0
  9. package/dist/agents/adapters/verification.js +62 -0
  10. package/dist/agents/cli-tools.js +5 -0
  11. package/dist/agents/cli.js +77 -0
  12. package/dist/agents/content-store.js +1 -0
  13. package/dist/agents/contracts/messages.js +138 -0
  14. package/dist/agents/contracts/run.js +0 -0
  15. package/dist/agents/d1-store.js +1 -0
  16. package/dist/agents/frontmatter.js +1 -0
  17. package/dist/agents/git-runtime.js +1 -0
  18. package/dist/agents/index.js +5 -0
  19. package/dist/agents/kernel/agent-kernel.js +284 -0
  20. package/dist/agents/kernel/trigger-resolver.js +153 -0
  21. package/dist/agents/model-registry.js +1 -0
  22. package/dist/agents/registry-helper.js +14 -0
  23. package/dist/agents/registry.js +91 -0
  24. package/dist/agents/runtime-types.js +0 -0
  25. package/dist/agents/sdk-filters.js +1 -0
  26. package/dist/agents/sdk-types.js +1 -0
  27. package/dist/agents/sdk.js +1 -0
  28. package/dist/agents/spec-loader.js +53 -0
  29. package/dist/agents/spec-normalizer.js +257 -0
  30. package/dist/agents/spec-types.js +0 -0
  31. package/dist/agents/stores/cursor-store.js +1 -0
  32. package/dist/agents/stores/helpers.js +1 -0
  33. package/dist/agents/stores/lease-store.js +1 -0
  34. package/dist/agents/stores/message-store.js +1 -0
  35. package/dist/agents/stores/run-store.js +1 -0
  36. package/dist/agents/stores/subscription-store.js +1 -0
  37. package/dist/agents/testing/agents-smoke.js +32 -0
  38. package/dist/agents/testing/e2e-harness.js +435 -0
  39. package/dist/agents/wrangler-d1.js +1 -0
  40. package/dist/index.js +9 -0
  41. package/dist/scripts/assert-release-tag-version.d.ts +1 -0
  42. package/dist/scripts/assert-release-tag-version.js +20 -0
  43. package/dist/scripts/build-dist.d.ts +1 -0
  44. package/dist/scripts/build-dist.js +98 -0
  45. package/dist/scripts/package-tools.d.ts +1 -0
  46. package/dist/scripts/package-tools.js +7 -0
  47. package/dist/scripts/publish-package.d.ts +1 -0
  48. package/dist/scripts/publish-package.js +19 -0
  49. package/dist/scripts/release-verify.d.ts +1 -0
  50. package/dist/scripts/release-verify.js +143 -0
  51. package/dist/scripts/test-smoke.d.ts +1 -0
  52. package/dist/scripts/test-smoke.js +23 -0
  53. package/dist/scripts/treeseed-agents.d.ts +2 -0
  54. package/dist/scripts/treeseed-agents.js +13 -0
  55. package/dist/src/agent-runtime.d.ts +17 -0
  56. package/dist/src/agents/adapters/execution.d.ts +46 -0
  57. package/dist/src/agents/adapters/mutations.d.ts +22 -0
  58. package/dist/src/agents/adapters/notification.d.ts +11 -0
  59. package/dist/src/agents/adapters/repository.d.ts +28 -0
  60. package/dist/src/agents/adapters/research.d.ts +14 -0
  61. package/dist/src/agents/adapters/verification.d.ts +36 -0
  62. package/dist/src/agents/cli-tools.d.ts +1 -0
  63. package/dist/src/agents/cli.d.ts +6 -0
  64. package/dist/src/agents/content-store.d.ts +1 -0
  65. package/dist/src/agents/contracts/messages.d.ts +88 -0
  66. package/dist/src/agents/contracts/run.d.ts +20 -0
  67. package/dist/src/agents/d1-store.d.ts +1 -0
  68. package/dist/src/agents/frontmatter.d.ts +1 -0
  69. package/dist/src/agents/git-runtime.d.ts +1 -0
  70. package/dist/src/agents/index.d.ts +1 -0
  71. package/dist/src/agents/kernel/agent-kernel.d.ts +52 -0
  72. package/dist/src/agents/kernel/trigger-resolver.d.ts +18 -0
  73. package/dist/src/agents/model-registry.d.ts +1 -0
  74. package/dist/src/agents/registry-helper.d.ts +4 -0
  75. package/dist/src/agents/registry.d.ts +7 -0
  76. package/dist/src/agents/runtime-types.d.ts +117 -0
  77. package/dist/src/agents/sdk-filters.d.ts +1 -0
  78. package/dist/src/agents/sdk-types.d.ts +1 -0
  79. package/dist/src/agents/sdk.d.ts +1 -0
  80. package/dist/src/agents/spec-loader.d.ts +18 -0
  81. package/dist/src/agents/spec-normalizer.d.ts +2 -0
  82. package/dist/src/agents/spec-types.d.ts +64 -0
  83. package/dist/src/agents/stores/cursor-store.d.ts +1 -0
  84. package/dist/src/agents/stores/helpers.d.ts +1 -0
  85. package/dist/src/agents/stores/lease-store.d.ts +1 -0
  86. package/dist/src/agents/stores/message-store.d.ts +1 -0
  87. package/dist/src/agents/stores/run-store.d.ts +1 -0
  88. package/dist/src/agents/stores/subscription-store.d.ts +1 -0
  89. package/dist/src/agents/testing/agents-smoke.d.ts +1 -0
  90. package/dist/src/agents/testing/e2e-harness.d.ts +44 -0
  91. package/dist/src/agents/wrangler-d1.d.ts +1 -0
  92. package/dist/src/index.d.ts +3 -0
  93. package/package.json +54 -0
@@ -0,0 +1,143 @@
1
+ import { cpSync, mkdirSync, readFileSync, readdirSync, rmSync, symlinkSync, writeFileSync, existsSync } from 'node:fs';
2
+ import { mkdtempSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { dirname, extname, join, resolve } from 'node:path';
5
+ import { spawnSync } from 'node:child_process';
6
+ import { createRequire } from 'node:module';
7
+ import { packageRoot } from './package-tools.js';
8
+ const require = createRequire(import.meta.url);
9
+ const corePackageRoot = resolve(dirname(require.resolve('@treeseed/core')), '..');
10
+ const sdkPackageRoot = resolve(dirname(require.resolve('@treeseed/sdk')), '..');
11
+ const textExtensions = new Set(['.js', '.ts', '.mjs', '.cjs', '.d.js', '.json', '.md']);
12
+ const forbiddenPatterns = [
13
+ /['"`]file:[^'"`\n]+['"`]/,
14
+ /['"`]workspace:[^'"`\n]+['"`]/,
15
+ /['"`](?:\.\.\/|\.\/)[^'"`\n]*src\/[^'"`\n]*\.(?:[cm]?js|ts|tsx|json|astro|css)['"`]/,
16
+ /['"`][^'"`\n]*\/packages\/[^'"`\n]*\/src\/[^'"`\n]*['"`]/,
17
+ ];
18
+ function run(command, args, cwd = packageRoot, capture = false) {
19
+ const result = spawnSync(command, args, {
20
+ cwd,
21
+ stdio: capture ? 'pipe' : 'inherit',
22
+ encoding: 'utf8',
23
+ env: process.env,
24
+ });
25
+ if (result.status !== 0) {
26
+ throw new Error(result.stderr?.trim() || result.stdout?.trim() || `${command} ${args.join(' ')} failed`);
27
+ }
28
+ return (result.stdout ?? '').trim();
29
+ }
30
+ function walkFiles(root) {
31
+ const files = [];
32
+ for (const entry of readdirSync(root, { withFileTypes: true })) {
33
+ const fullPath = join(root, entry.name);
34
+ if (entry.isDirectory()) {
35
+ files.push(...walkFiles(fullPath));
36
+ continue;
37
+ }
38
+ files.push(fullPath);
39
+ }
40
+ return files;
41
+ }
42
+ function scanDirectory(root) {
43
+ for (const filePath of walkFiles(root)) {
44
+ if (!textExtensions.has(extname(filePath)))
45
+ continue;
46
+ const source = readFileSync(filePath, 'utf8');
47
+ for (const pattern of forbiddenPatterns) {
48
+ if (pattern.test(source)) {
49
+ throw new Error(`${filePath} contains forbidden publish reference matching ${pattern}.`);
50
+ }
51
+ }
52
+ }
53
+ }
54
+ function resolveNodeModulesRoot() {
55
+ let lastCandidate = null;
56
+ let current = packageRoot;
57
+ while (true) {
58
+ const candidate = resolve(current, 'node_modules');
59
+ try {
60
+ readdirSync(candidate);
61
+ lastCandidate = candidate;
62
+ }
63
+ catch {
64
+ }
65
+ const parent = resolve(current, '..');
66
+ if (parent === current)
67
+ break;
68
+ current = parent;
69
+ }
70
+ if (lastCandidate) {
71
+ return lastCandidate;
72
+ }
73
+ throw new Error(`Unable to locate node_modules for ${packageRoot}.`);
74
+ }
75
+ function mirrorDependencies(tempRoot) {
76
+ const sharedNodeModules = resolveNodeModulesRoot();
77
+ for (const entry of readdirSync(sharedNodeModules, { withFileTypes: true })) {
78
+ if (entry.name === '.bin' || entry.name === '@treeseed') {
79
+ continue;
80
+ }
81
+ const targetPath = resolve(tempRoot, 'node_modules', entry.name);
82
+ mkdirSync(dirname(targetPath), { recursive: true });
83
+ symlinkSync(resolve(sharedNodeModules, entry.name), targetPath, 'dir');
84
+ }
85
+ }
86
+ function pack(root, fallbackName) {
87
+ const output = run('npm', ['pack', '--silent', '--ignore-scripts'], root, true);
88
+ const filename = output
89
+ .split('\n')
90
+ .map((line) => line.trim())
91
+ .filter(Boolean)
92
+ .at(-1) ?? fallbackName;
93
+ return resolve(root, filename);
94
+ }
95
+ function installPackagedPackage(extractRoot, tempRoot, tarballPath, folderName) {
96
+ mkdirSync(resolve(tempRoot, 'node_modules', '@treeseed'), { recursive: true });
97
+ run('tar', ['-xzf', tarballPath, '-C', extractRoot]);
98
+ run('cp', ['-R', resolve(extractRoot, 'package'), resolve(tempRoot, 'node_modules', '@treeseed', folderName)]);
99
+ rmSync(resolve(extractRoot, 'package'), { recursive: true, force: true });
100
+ }
101
+ function isInstalledDependencyPackage(root) {
102
+ return root.includes(`${process.platform === 'win32' ? '\\' : '/'}node_modules${process.platform === 'win32' ? '\\' : '/'}`);
103
+ }
104
+ function installDependencyPackage(root, extractRoot, tempRoot, folderName, fallbackName) {
105
+ if (isInstalledDependencyPackage(root) && existsSync(resolve(root, 'dist')) && existsSync(resolve(root, 'package.json'))) {
106
+ const targetRoot = resolve(tempRoot, 'node_modules', '@treeseed', folderName);
107
+ mkdirSync(resolve(tempRoot, 'node_modules', '@treeseed'), { recursive: true });
108
+ cpSync(root, targetRoot, {
109
+ recursive: true,
110
+ filter(source) {
111
+ const relativePath = source.slice(root.length).replace(/^[/\\]/, '');
112
+ if (!relativePath) {
113
+ return true;
114
+ }
115
+ return !(relativePath === 'node_modules'
116
+ || relativePath.startsWith(`node_modules${process.platform === 'win32' ? '\\' : '/'}`));
117
+ },
118
+ });
119
+ return;
120
+ }
121
+ const tarballPath = pack(root, fallbackName);
122
+ installPackagedPackage(extractRoot, tempRoot, tarballPath, folderName);
123
+ }
124
+ run('npm', ['run', 'build:dist']);
125
+ scanDirectory(resolve(packageRoot, 'dist'));
126
+ run('npm', ['run', 'test:smoke']);
127
+ const stageRoot = mkdtempSync(join(tmpdir(), 'treeseed-agent-release-'));
128
+ const extractRoot = resolve(stageRoot, 'extract');
129
+ const installRoot = resolve(stageRoot, 'install');
130
+ try {
131
+ mkdirSync(extractRoot, { recursive: true });
132
+ const agentTarball = pack(packageRoot, 'treeseed-agent.tgz');
133
+ installDependencyPackage(sdkPackageRoot, extractRoot, installRoot, 'sdk', 'treeseed-sdk.tgz');
134
+ installDependencyPackage(corePackageRoot, extractRoot, installRoot, 'core', 'treeseed-core.tgz');
135
+ installPackagedPackage(extractRoot, installRoot, agentTarball, 'agent');
136
+ mirrorDependencies(installRoot);
137
+ writeFileSync(resolve(installRoot, 'package.json'), `${JSON.stringify({ name: 'treeseed-agent-smoke', private: true, type: 'module' }, null, 2)}\n`, 'utf8');
138
+ run(process.execPath, ['node_modules/@treeseed/agent/dist/scripts/treeseed-agents.js', '--help'], installRoot);
139
+ console.log('Agent packed-install bin smoke passed.');
140
+ }
141
+ finally {
142
+ rmSync(stageRoot, { recursive: true, force: true });
143
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import { createAgentTestRuntime } from '../agents/testing/e2e-harness.js';
2
+ const runtime = await createAgentTestRuntime({
3
+ executionMode: 'stub',
4
+ databaseMode: 'memory',
5
+ });
6
+ try {
7
+ await runtime.seedObjectives([{ slug: 'release-smoke-objective' }]);
8
+ await runtime.seedQuestions([
9
+ {
10
+ slug: 'release-smoke-question',
11
+ relatedObjectives: ['release-smoke-objective'],
12
+ },
13
+ ]);
14
+ await runtime.runAgent('planner-agent');
15
+ const runs = await runtime.readRunLogs();
16
+ if (runs.length === 0) {
17
+ throw new Error('Agent smoke did not produce any run logs.');
18
+ }
19
+ console.log(`Agent smoke passed with ${runs.length} run log(s).`);
20
+ }
21
+ finally {
22
+ await runtime.cleanup();
23
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ import { spawn } from 'node:child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+ const packageRoot = fileURLToPath(new URL('..', import.meta.url));
5
+ const cliScriptPath = fileURLToPath(new URL('../agents/cli.js', import.meta.url));
6
+ const child = spawn(process.execPath, [cliScriptPath, ...process.argv.slice(2)], {
7
+ cwd: packageRoot,
8
+ stdio: 'inherit',
9
+ env: process.env,
10
+ });
11
+ child.on('exit', (code) => {
12
+ process.exit(code ?? 1);
13
+ });
@@ -0,0 +1,17 @@
1
+ import type { AgentExecutionAdapter, AgentHandler, AgentMutationAdapter, AgentNotificationAdapter, AgentRepositoryInspectionAdapter, AgentResearchAdapter, AgentVerificationAdapter } from './agents/runtime-types.ts';
2
+ export declare function resolveAgentRuntimeProviders(repoRoot: string, selections: {
3
+ execution: string;
4
+ mutation: string;
5
+ repository: string;
6
+ verification: string;
7
+ notification: string;
8
+ research: string;
9
+ }): {
10
+ execution: AgentExecutionAdapter;
11
+ mutations: AgentMutationAdapter;
12
+ repository: AgentRepositoryInspectionAdapter;
13
+ verification: AgentVerificationAdapter;
14
+ notifications: AgentNotificationAdapter;
15
+ research: AgentResearchAdapter;
16
+ handlers: Map<string, AgentHandler<unknown, unknown>>;
17
+ };
@@ -0,0 +1,46 @@
1
+ import type { AgentExecutionAdapter } from '../runtime-types.ts';
2
+ export declare class StubExecutionAdapter implements AgentExecutionAdapter {
3
+ runTask(input: {
4
+ prompt: string;
5
+ runId: string;
6
+ }): Promise<{
7
+ status: "completed";
8
+ summary: string;
9
+ stdout: string;
10
+ stderr: string;
11
+ }>;
12
+ }
13
+ export declare class CopilotExecutionAdapter implements AgentExecutionAdapter {
14
+ runTask(input: {
15
+ agent: {
16
+ cli?: {
17
+ model?: string;
18
+ allowTools?: string[];
19
+ additionalArgs?: string[];
20
+ };
21
+ };
22
+ prompt: string;
23
+ }): Promise<{
24
+ status: "completed";
25
+ summary: string;
26
+ stdout: string;
27
+ stderr: string;
28
+ } | {
29
+ status: "failed";
30
+ summary: string;
31
+ stdout: string;
32
+ stderr: string;
33
+ }>;
34
+ }
35
+ export declare class ManualExecutionAdapter implements AgentExecutionAdapter {
36
+ runTask(input: {
37
+ prompt: string;
38
+ runId: string;
39
+ }): Promise<{
40
+ status: "completed";
41
+ summary: string;
42
+ stdout: string;
43
+ stderr: string;
44
+ }>;
45
+ }
46
+ export declare function createExecutionAdapter(): StubExecutionAdapter | CopilotExecutionAdapter | ManualExecutionAdapter;
@@ -0,0 +1,22 @@
1
+ import type { AgentMutationAdapter } from '../runtime-types.ts';
2
+ export declare class LocalBranchMutationAdapter implements AgentMutationAdapter {
3
+ private readonly git;
4
+ constructor(repoRoot: string);
5
+ writeArtifact(input: {
6
+ runId: string;
7
+ agent: {
8
+ execution: {
9
+ branchPrefix: string;
10
+ };
11
+ };
12
+ relativePath: string;
13
+ content: string;
14
+ commitMessage: string;
15
+ }): Promise<{
16
+ branchName: any;
17
+ commitMessage: any;
18
+ worktreePath: any;
19
+ commitSha: any;
20
+ changedPaths: any;
21
+ }>;
22
+ }
@@ -0,0 +1,11 @@
1
+ import type { AgentNotificationAdapter } from '../runtime-types.ts';
2
+ export declare class StubNotificationAdapter implements AgentNotificationAdapter {
3
+ deliver(input: {
4
+ recipients: string[];
5
+ }): Promise<{
6
+ status: "waiting" | "completed";
7
+ summary: string;
8
+ deliveredCount: number;
9
+ }>;
10
+ }
11
+ export declare function createNotificationAdapter(): StubNotificationAdapter;
@@ -0,0 +1,28 @@
1
+ import type { AgentRepositoryInspectionAdapter } from '../runtime-types.ts';
2
+ export declare class StubRepositoryInspectionAdapter implements AgentRepositoryInspectionAdapter {
3
+ inspectBranch(input: {
4
+ branchName: string | null;
5
+ }): Promise<{
6
+ branchName: string | null;
7
+ changedPaths: never[];
8
+ commitSha: null;
9
+ summary: string;
10
+ }>;
11
+ }
12
+ export declare class GitRepositoryInspectionAdapter implements AgentRepositoryInspectionAdapter {
13
+ inspectBranch(input: {
14
+ repoRoot: string;
15
+ branchName: string | null;
16
+ }): Promise<{
17
+ branchName: null;
18
+ changedPaths: never[];
19
+ commitSha: null;
20
+ summary: string;
21
+ } | {
22
+ branchName: string;
23
+ changedPaths: string[];
24
+ commitSha: string | null;
25
+ summary: string;
26
+ }>;
27
+ }
28
+ export declare function createRepositoryInspectionAdapter(): StubRepositoryInspectionAdapter | GitRepositoryInspectionAdapter;
@@ -0,0 +1,14 @@
1
+ import type { AgentResearchAdapter } from '../runtime-types.ts';
2
+ export declare class StubResearchAdapter implements AgentResearchAdapter {
3
+ research(input: {
4
+ questionId: string;
5
+ reason: string | null;
6
+ runId: string;
7
+ }): Promise<{
8
+ status: "completed";
9
+ summary: string;
10
+ markdown: string;
11
+ sources: never[];
12
+ }>;
13
+ }
14
+ export declare function createResearchAdapter(): StubResearchAdapter;
@@ -0,0 +1,36 @@
1
+ import type { AgentVerificationAdapter } from '../runtime-types.ts';
2
+ export declare class StubVerificationAdapter implements AgentVerificationAdapter {
3
+ runChecks(input: {
4
+ commands: string[];
5
+ runId: string;
6
+ }): Promise<{
7
+ status: "completed";
8
+ summary: string;
9
+ stdout: string;
10
+ stderr: string;
11
+ }>;
12
+ }
13
+ export declare class LocalVerificationAdapter implements AgentVerificationAdapter {
14
+ runChecks(input: {
15
+ commands: string[];
16
+ }): Promise<{
17
+ status: "waiting";
18
+ summary: string;
19
+ stdout: string;
20
+ stderr: string;
21
+ errorCategory?: undefined;
22
+ } | {
23
+ status: "failed";
24
+ summary: string;
25
+ stdout: string;
26
+ stderr: string;
27
+ errorCategory: "execution_error";
28
+ } | {
29
+ status: "completed";
30
+ summary: string;
31
+ stdout: string;
32
+ stderr: string;
33
+ errorCategory?: undefined;
34
+ }>;
35
+ }
36
+ export declare function createVerificationAdapter(): StubVerificationAdapter | LocalVerificationAdapter;
@@ -0,0 +1 @@
1
+ export { normalizeAgentCliOptions, buildCopilotAllowToolArgs } from '@treeseed/sdk/cli-tools';
@@ -0,0 +1,6 @@
1
+ declare function parseArgs(argv: string[]): {
2
+ command: string;
3
+ args: string[];
4
+ };
5
+ declare function renderHelp(): string;
6
+ declare function main(): Promise<void>;
@@ -0,0 +1 @@
1
+ export * from '@treeseed/sdk/content-store';
@@ -0,0 +1,88 @@
1
+ export interface QuestionPriorityUpdatedMessage {
2
+ questionId: string;
3
+ reason: string;
4
+ plannerRunId: string;
5
+ }
6
+ export interface ObjectivePriorityUpdatedMessage {
7
+ objectiveId: string;
8
+ reason: string;
9
+ plannerRunId: string;
10
+ }
11
+ export interface ArchitectureUpdatedMessage {
12
+ objectiveId: string;
13
+ knowledgeId: string;
14
+ architectRunId: string;
15
+ }
16
+ export interface SubscriberNotifiedMessage {
17
+ email: string;
18
+ itemCount: number;
19
+ notifierRunId: string;
20
+ }
21
+ export interface ResearchStartedMessage {
22
+ questionId: string;
23
+ researcherRunId: string;
24
+ }
25
+ export interface ResearchCompletedMessage {
26
+ questionId: string;
27
+ knowledgeId: string | null;
28
+ researcherRunId: string;
29
+ }
30
+ export interface TaskCompleteMessage {
31
+ branchName: string | null;
32
+ changedTargets: string[];
33
+ engineerRunId: string;
34
+ }
35
+ export interface TaskWaitingMessage {
36
+ blockingReason: string;
37
+ engineerRunId: string;
38
+ }
39
+ export interface TaskFailedMessage {
40
+ failureSummary: string;
41
+ engineerRunId: string;
42
+ }
43
+ export interface TaskVerifiedMessage {
44
+ branchName: string | null;
45
+ reviewerRunId: string;
46
+ }
47
+ export interface ReviewFailedMessage {
48
+ failureSummary: string;
49
+ reviewerRunId: string;
50
+ }
51
+ export interface ReviewWaitingMessage {
52
+ blockingReason: string;
53
+ reviewerRunId: string;
54
+ }
55
+ export interface ReleaseStartedMessage {
56
+ taskRunId: string | null;
57
+ releaserRunId: string;
58
+ }
59
+ export interface ReleaseCompletedMessage {
60
+ releaseSummary: string;
61
+ releaserRunId: string;
62
+ }
63
+ export interface ReleaseFailedMessage {
64
+ failureSummary: string;
65
+ releaserRunId: string;
66
+ }
67
+ export interface AgentMessageContracts {
68
+ question_priority_updated: QuestionPriorityUpdatedMessage;
69
+ objective_priority_updated: ObjectivePriorityUpdatedMessage;
70
+ architecture_updated: ArchitectureUpdatedMessage;
71
+ subscriber_notified: SubscriberNotifiedMessage;
72
+ research_started: ResearchStartedMessage;
73
+ research_completed: ResearchCompletedMessage;
74
+ task_complete: TaskCompleteMessage;
75
+ task_waiting: TaskWaitingMessage;
76
+ task_failed: TaskFailedMessage;
77
+ task_verified: TaskVerifiedMessage;
78
+ review_failed: ReviewFailedMessage;
79
+ review_waiting: ReviewWaitingMessage;
80
+ release_started: ReleaseStartedMessage;
81
+ release_completed: ReleaseCompletedMessage;
82
+ release_failed: ReleaseFailedMessage;
83
+ }
84
+ export type AgentMessageType = keyof AgentMessageContracts;
85
+ export type AgentMessagePayload<TType extends AgentMessageType> = AgentMessageContracts[TType];
86
+ export declare const AGENT_MESSAGE_TYPES: readonly ["question_priority_updated", "objective_priority_updated", "architecture_updated", "subscriber_notified", "research_started", "research_completed", "task_complete", "task_waiting", "task_failed", "task_verified", "review_failed", "review_waiting", "release_started", "release_completed", "release_failed"];
87
+ export declare function parseAgentMessagePayload<TType extends AgentMessageType>(type: TType, payloadJson: string): AgentMessagePayload<TType>;
88
+ export declare function serializeAgentMessagePayload<TType extends AgentMessageType>(type: TType, payload: AgentMessagePayload<TType>): Record<string, unknown>;
@@ -0,0 +1,20 @@
1
+ export type AgentErrorCategory = 'trigger_resolution_error' | 'permission_error' | 'message_claim_error' | 'lease_error' | 'execution_error' | 'mutation_error' | 'sdk_error';
2
+ export interface AgentRunTrace {
3
+ [key: string]: unknown;
4
+ runId: string;
5
+ agentSlug: string;
6
+ handlerKind: string;
7
+ triggerKind: string;
8
+ triggerSource: string;
9
+ claimedMessageId: number | null;
10
+ selectedItemKey: string | null;
11
+ branchName: string | null;
12
+ commitSha: string | null;
13
+ changedPaths: string[];
14
+ summary: string | null;
15
+ error: string | null;
16
+ errorCategory: AgentErrorCategory | null;
17
+ startedAt: string;
18
+ finishedAt: string | null;
19
+ status: string;
20
+ }
@@ -0,0 +1 @@
1
+ export * from '@treeseed/sdk/d1-store';
@@ -0,0 +1 @@
1
+ export * from '@treeseed/sdk/frontmatter';
@@ -0,0 +1 @@
1
+ export * from '@treeseed/sdk/git-runtime';
@@ -0,0 +1 @@
1
+ export { AGENT_HANDLER_REGISTRY, resolveAgentHandler } from './registry.ts';
@@ -0,0 +1,52 @@
1
+ import type { AgentExecutionAdapter, AgentMutationAdapter, AgentNotificationAdapter, AgentRepositoryInspectionAdapter, AgentResearchAdapter, AgentVerificationAdapter } from '../runtime-types.ts';
2
+ import { AgentSdk } from '../sdk.ts';
3
+ export declare class AgentKernel {
4
+ private readonly sdk;
5
+ private readonly repoRoot;
6
+ private readonly execution;
7
+ private readonly mutations;
8
+ private readonly repository;
9
+ private readonly verification;
10
+ private readonly notifications;
11
+ private readonly research;
12
+ private readonly activeRuns;
13
+ private readonly lastRunAt;
14
+ constructor(sdk: AgentSdk, repoRoot: string, options?: {
15
+ execution?: AgentExecutionAdapter;
16
+ mutations?: AgentMutationAdapter;
17
+ repository?: AgentRepositoryInspectionAdapter;
18
+ verification?: AgentVerificationAdapter;
19
+ notifications?: AgentNotificationAdapter;
20
+ research?: AgentResearchAdapter;
21
+ });
22
+ doctor(): Promise<{
23
+ agents: {
24
+ slug: any;
25
+ handler: any;
26
+ enabled: any;
27
+ triggers: any;
28
+ }[];
29
+ diagnostics: import("../spec-types.ts").AgentSpecDiagnostic[];
30
+ }>;
31
+ private sortAgents;
32
+ private resolveTrigger;
33
+ private recordRunTrace;
34
+ private buildTrace;
35
+ private categorizeError;
36
+ private executeAgent;
37
+ runAgent(slug: string, mode?: 'auto' | 'manual'): Promise<import("../runtime-types.ts").AgentExecutionResult>;
38
+ runCycle(): Promise<{
39
+ slug: any;
40
+ result: import("../runtime-types.ts").AgentExecutionResult;
41
+ }[]>;
42
+ start(intervalMs?: number): Promise<void>;
43
+ drainMessages(): Promise<{
44
+ slug: any;
45
+ result: import("../runtime-types.ts").AgentExecutionResult;
46
+ }[]>;
47
+ releaseLeases(): any;
48
+ replayMessage(id: number): Promise<{
49
+ id: number;
50
+ status: string;
51
+ }>;
52
+ }
@@ -0,0 +1,18 @@
1
+ import type { AgentRuntimeSpec, AgentTriggerConfig } from '@treeseed/core/types/agents';
2
+ import type { ScopedAgentSdk } from '../sdk.ts';
3
+ import type { AgentTriggerInvocation } from '../runtime-types.ts';
4
+ export type TriggerDecisionKind = 'ready' | 'skip' | 'blocked_by_cooldown' | 'blocked_by_concurrency' | 'no_message_available' | 'no_follow_activity' | 'no_trigger_available';
5
+ export interface TriggerDecision {
6
+ kind: TriggerDecisionKind;
7
+ invocation?: AgentTriggerInvocation;
8
+ reason?: string;
9
+ selectedTrigger?: AgentTriggerConfig;
10
+ }
11
+ export interface TriggerResolverInput {
12
+ agent: AgentRuntimeSpec;
13
+ mode?: 'auto' | 'manual';
14
+ isRunning: boolean;
15
+ lastRunAt?: number;
16
+ sdk: ScopedAgentSdk;
17
+ }
18
+ export declare function resolveTriggerDecision(input: TriggerResolverInput): Promise<TriggerDecision>;
@@ -0,0 +1 @@
1
+ export * from '@treeseed/sdk/models';
@@ -0,0 +1,4 @@
1
+ import type { AgentHandlerKind } from '@treeseed/core/types/agents';
2
+ import type { AgentHandler } from './runtime-types.ts';
3
+ export declare function defineAgentHandlerRegistry(registry: Partial<Record<AgentHandlerKind, AgentHandler>>): Partial<Record<AgentHandlerKind, AgentHandler<unknown, unknown>>>;
4
+ export declare function resolveAgentHandlerFromRegistry(registry: Partial<Record<AgentHandlerKind, AgentHandler>>, kind: AgentHandlerKind): AgentHandler<unknown, unknown>;
@@ -0,0 +1,7 @@
1
+ import type { AgentHandlerKind } from '@treeseed/core/types/agents';
2
+ import type { AgentHandler } from './runtime-types.ts';
3
+ export declare function getTenantAgentHandlerModulePaths(kind: AgentHandlerKind, tenantRoot?: string): string[];
4
+ export declare function loadTenantAgentHandlerRegistry(tenantRoot?: string): Promise<Record<string, AgentHandler>>;
5
+ export declare const AGENT_HANDLER_REGISTRY: Record<string, AgentHandler<unknown, unknown>>;
6
+ export declare function listRegisteredAgentHandlers(): string[];
7
+ export declare function resolveAgentHandler(kind: AgentHandlerKind): AgentHandler<unknown, unknown>;