@plazmodium/odin 0.3.2-beta
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 +306 -0
- package/dist/adapters/archive/supabase.d.ts +19 -0
- package/dist/adapters/archive/supabase.d.ts.map +1 -0
- package/dist/adapters/archive/supabase.js +121 -0
- package/dist/adapters/archive/supabase.js.map +1 -0
- package/dist/adapters/archive/types.d.ts +26 -0
- package/dist/adapters/archive/types.d.ts.map +1 -0
- package/dist/adapters/archive/types.js +6 -0
- package/dist/adapters/archive/types.js.map +1 -0
- package/dist/adapters/formal-verification/tla-precheck.d.ts +22 -0
- package/dist/adapters/formal-verification/tla-precheck.d.ts.map +1 -0
- package/dist/adapters/formal-verification/tla-precheck.js +270 -0
- package/dist/adapters/formal-verification/tla-precheck.js.map +1 -0
- package/dist/adapters/formal-verification/types.d.ts +37 -0
- package/dist/adapters/formal-verification/types.d.ts.map +1 -0
- package/dist/adapters/formal-verification/types.js +6 -0
- package/dist/adapters/formal-verification/types.js.map +1 -0
- package/dist/adapters/review/semgrep.d.ts +12 -0
- package/dist/adapters/review/semgrep.d.ts.map +1 -0
- package/dist/adapters/review/semgrep.js +175 -0
- package/dist/adapters/review/semgrep.js.map +1 -0
- package/dist/adapters/review/types.d.ts +14 -0
- package/dist/adapters/review/types.d.ts.map +1 -0
- package/dist/adapters/review/types.js +6 -0
- package/dist/adapters/review/types.js.map +1 -0
- package/dist/adapters/skills/filesystem.d.ts +18 -0
- package/dist/adapters/skills/filesystem.d.ts.map +1 -0
- package/dist/adapters/skills/filesystem.js +398 -0
- package/dist/adapters/skills/filesystem.js.map +1 -0
- package/dist/adapters/skills/types.d.ts +19 -0
- package/dist/adapters/skills/types.d.ts.map +1 -0
- package/dist/adapters/skills/types.js +6 -0
- package/dist/adapters/skills/types.js.map +1 -0
- package/dist/adapters/sql-executor/direct-postgres.d.ts +15 -0
- package/dist/adapters/sql-executor/direct-postgres.d.ts.map +1 -0
- package/dist/adapters/sql-executor/direct-postgres.js +33 -0
- package/dist/adapters/sql-executor/direct-postgres.js.map +1 -0
- package/dist/adapters/sql-executor/supabase-management-api.d.ts +17 -0
- package/dist/adapters/sql-executor/supabase-management-api.d.ts.map +1 -0
- package/dist/adapters/sql-executor/supabase-management-api.js +40 -0
- package/dist/adapters/sql-executor/supabase-management-api.js.map +1 -0
- package/dist/adapters/sql-executor/types.d.ts +15 -0
- package/dist/adapters/sql-executor/types.d.ts.map +1 -0
- package/dist/adapters/sql-executor/types.js +6 -0
- package/dist/adapters/sql-executor/types.js.map +1 -0
- package/dist/adapters/workflow-state/in-memory.d.ts +69 -0
- package/dist/adapters/workflow-state/in-memory.d.ts.map +1 -0
- package/dist/adapters/workflow-state/in-memory.js +444 -0
- package/dist/adapters/workflow-state/in-memory.js.map +1 -0
- package/dist/adapters/workflow-state/supabase.d.ts +55 -0
- package/dist/adapters/workflow-state/supabase.d.ts.map +1 -0
- package/dist/adapters/workflow-state/supabase.js +823 -0
- package/dist/adapters/workflow-state/supabase.js.map +1 -0
- package/dist/adapters/workflow-state/types.d.ts +55 -0
- package/dist/adapters/workflow-state/types.d.ts.map +1 -0
- package/dist/adapters/workflow-state/types.js +6 -0
- package/dist/adapters/workflow-state/types.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +52 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +115 -0
- package/dist/config.js.map +1 -0
- package/dist/domain/actors.d.ts +10 -0
- package/dist/domain/actors.d.ts.map +1 -0
- package/dist/domain/actors.js +60 -0
- package/dist/domain/actors.js.map +1 -0
- package/dist/domain/development-evals.d.ts +9 -0
- package/dist/domain/development-evals.d.ts.map +1 -0
- package/dist/domain/development-evals.js +164 -0
- package/dist/domain/development-evals.js.map +1 -0
- package/dist/domain/matching.d.ts +8 -0
- package/dist/domain/matching.d.ts.map +1 -0
- package/dist/domain/matching.js +24 -0
- package/dist/domain/matching.js.map +1 -0
- package/dist/domain/phases.d.ts +10 -0
- package/dist/domain/phases.d.ts.map +1 -0
- package/dist/domain/phases.js +165 -0
- package/dist/domain/phases.js.map +1 -0
- package/dist/domain/quality-gates.d.ts +7 -0
- package/dist/domain/quality-gates.d.ts.map +1 -0
- package/dist/domain/quality-gates.js +8 -0
- package/dist/domain/quality-gates.js.map +1 -0
- package/dist/domain/resonance.d.ts +33 -0
- package/dist/domain/resonance.d.ts.map +1 -0
- package/dist/domain/resonance.js +100 -0
- package/dist/domain/resonance.js.map +1 -0
- package/dist/domain/tasks.d.ts +9 -0
- package/dist/domain/tasks.d.ts.map +1 -0
- package/dist/domain/tasks.js +57 -0
- package/dist/domain/tasks.js.map +1 -0
- package/dist/init.d.ts +7 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +387 -0
- package/dist/init.js.map +1 -0
- package/dist/schemas.d.ts +366 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +184 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +243 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/apply-migrations.d.ts +21 -0
- package/dist/tools/apply-migrations.d.ts.map +1 -0
- package/dist/tools/apply-migrations.js +286 -0
- package/dist/tools/apply-migrations.js.map +1 -0
- package/dist/tools/archive-feature-release.d.ts +13 -0
- package/dist/tools/archive-feature-release.d.ts.map +1 -0
- package/dist/tools/archive-feature-release.js +182 -0
- package/dist/tools/archive-feature-release.js.map +1 -0
- package/dist/tools/capture-learning.d.ts +9 -0
- package/dist/tools/capture-learning.d.ts.map +1 -0
- package/dist/tools/capture-learning.js +53 -0
- package/dist/tools/capture-learning.js.map +1 -0
- package/dist/tools/explore-knowledge.d.ts +9 -0
- package/dist/tools/explore-knowledge.d.ts.map +1 -0
- package/dist/tools/explore-knowledge.js +142 -0
- package/dist/tools/explore-knowledge.js.map +1 -0
- package/dist/tools/get-claims-needing-review.d.ts +8 -0
- package/dist/tools/get-claims-needing-review.d.ts.map +1 -0
- package/dist/tools/get-claims-needing-review.js +21 -0
- package/dist/tools/get-claims-needing-review.js.map +1 -0
- package/dist/tools/get-development-eval-status.d.ts +8 -0
- package/dist/tools/get-development-eval-status.d.ts.map +1 -0
- package/dist/tools/get-development-eval-status.js +49 -0
- package/dist/tools/get-development-eval-status.js.map +1 -0
- package/dist/tools/get-feature-status.d.ts +8 -0
- package/dist/tools/get-feature-status.d.ts.map +1 -0
- package/dist/tools/get-feature-status.js +68 -0
- package/dist/tools/get-feature-status.js.map +1 -0
- package/dist/tools/get-next-phase.d.ts +8 -0
- package/dist/tools/get-next-phase.d.ts.map +1 -0
- package/dist/tools/get-next-phase.js +26 -0
- package/dist/tools/get-next-phase.js.map +1 -0
- package/dist/tools/prepare-phase-context.d.ts +9 -0
- package/dist/tools/prepare-phase-context.d.ts.map +1 -0
- package/dist/tools/prepare-phase-context.js +151 -0
- package/dist/tools/prepare-phase-context.js.map +1 -0
- package/dist/tools/record-commit.d.ts +8 -0
- package/dist/tools/record-commit.d.ts.map +1 -0
- package/dist/tools/record-commit.js +28 -0
- package/dist/tools/record-commit.js.map +1 -0
- package/dist/tools/record-eval-plan.d.ts +8 -0
- package/dist/tools/record-eval-plan.d.ts.map +1 -0
- package/dist/tools/record-eval-plan.js +40 -0
- package/dist/tools/record-eval-plan.js.map +1 -0
- package/dist/tools/record-eval-run.d.ts +8 -0
- package/dist/tools/record-eval-run.d.ts.map +1 -0
- package/dist/tools/record-eval-run.js +42 -0
- package/dist/tools/record-eval-run.js.map +1 -0
- package/dist/tools/record-merge.d.ts +8 -0
- package/dist/tools/record-merge.d.ts.map +1 -0
- package/dist/tools/record-merge.js +16 -0
- package/dist/tools/record-merge.js.map +1 -0
- package/dist/tools/record-phase-artifact.d.ts +8 -0
- package/dist/tools/record-phase-artifact.d.ts.map +1 -0
- package/dist/tools/record-phase-artifact.js +26 -0
- package/dist/tools/record-phase-artifact.js.map +1 -0
- package/dist/tools/record-phase-result.d.ts +9 -0
- package/dist/tools/record-phase-result.d.ts.map +1 -0
- package/dist/tools/record-phase-result.js +122 -0
- package/dist/tools/record-phase-result.js.map +1 -0
- package/dist/tools/record-pull-request.d.ts +8 -0
- package/dist/tools/record-pull-request.d.ts.map +1 -0
- package/dist/tools/record-pull-request.js +16 -0
- package/dist/tools/record-pull-request.js.map +1 -0
- package/dist/tools/record-quality-gate.d.ts +8 -0
- package/dist/tools/record-quality-gate.d.ts.map +1 -0
- package/dist/tools/record-quality-gate.js +26 -0
- package/dist/tools/record-quality-gate.js.map +1 -0
- package/dist/tools/record-watcher-review.d.ts +8 -0
- package/dist/tools/record-watcher-review.d.ts.map +1 -0
- package/dist/tools/record-watcher-review.js +18 -0
- package/dist/tools/record-watcher-review.js.map +1 -0
- package/dist/tools/run-policy-checks.d.ts +8 -0
- package/dist/tools/run-policy-checks.d.ts.map +1 -0
- package/dist/tools/run-policy-checks.js +38 -0
- package/dist/tools/run-policy-checks.js.map +1 -0
- package/dist/tools/run-review-checks.d.ts +9 -0
- package/dist/tools/run-review-checks.d.ts.map +1 -0
- package/dist/tools/run-review-checks.js +45 -0
- package/dist/tools/run-review-checks.js.map +1 -0
- package/dist/tools/start-feature.d.ts +8 -0
- package/dist/tools/start-feature.d.ts.map +1 -0
- package/dist/tools/start-feature.js +33 -0
- package/dist/tools/start-feature.js.map +1 -0
- package/dist/tools/submit-claim.d.ts +8 -0
- package/dist/tools/submit-claim.d.ts.map +1 -0
- package/dist/tools/submit-claim.js +45 -0
- package/dist/tools/submit-claim.js.map +1 -0
- package/dist/tools/verify-claims.d.ts +8 -0
- package/dist/tools/verify-claims.d.ts.map +1 -0
- package/dist/tools/verify-claims.js +39 -0
- package/dist/tools/verify-claims.js.map +1 -0
- package/dist/tools/verify-design.d.ts +8 -0
- package/dist/tools/verify-design.d.ts.map +1 -0
- package/dist/tools/verify-design.js +31 -0
- package/dist/tools/verify-design.js.map +1 -0
- package/dist/types.d.ts +333 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +52 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +24 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +50 -0
- package/dist/utils.js.map +1 -0
- package/migrations/001_schema.sql +795 -0
- package/migrations/002_functions.sql +2126 -0
- package/migrations/003_views.sql +599 -0
- package/migrations/004_seed.sql +106 -0
- package/migrations/005_odin_v2_schema.sql +217 -0
- package/migrations/006_odin_v2_functions.sql +671 -0
- package/migrations/007_odin_v2_phase_alignment.sql +554 -0
- package/migrations/008_related_learnings.sql +80 -0
- package/migrations/README.md +23 -0
- package/package.json +63 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Odin MCP Runtime
|
|
4
|
+
* Version: 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
8
|
+
import { SupabaseArchiveAdapter } from './adapters/archive/supabase.js';
|
|
9
|
+
import { TlaPreCheckAdapter } from './adapters/formal-verification/tla-precheck.js';
|
|
10
|
+
import { FilesystemSkillAdapter } from './adapters/skills/filesystem.js';
|
|
11
|
+
import { SemgrepReviewAdapter } from './adapters/review/semgrep.js';
|
|
12
|
+
import { InMemoryWorkflowStateAdapter } from './adapters/workflow-state/in-memory.js';
|
|
13
|
+
import { SupabaseWorkflowStateAdapter } from './adapters/workflow-state/supabase.js';
|
|
14
|
+
import { CONFIG_RESTART_NOTE, loadRuntimeConfig, summarizeRuntimeConfig } from './config.js';
|
|
15
|
+
import { ApplyMigrationsInputSchema, ArchiveFeatureReleaseInputSchema, CaptureLearningInputSchema, ExploreKnowledgeInputSchema, GetClaimsNeedingReviewInputSchema, GetDevelopmentEvalStatusInputSchema, GetFeatureStatusInputSchema, GetNextPhaseInputSchema, PreparePhaseContextInputSchema, RecordCommitInputSchema, RecordEvalPlanInputSchema, RecordEvalRunInputSchema, RecordMergeInputSchema, RecordPhaseArtifactInputSchema, RecordQualityGateInputSchema, RecordPullRequestInputSchema, RecordPhaseResultInputSchema, RecordWatcherReviewInputSchema, RunReviewChecksInputSchema, RunPolicyChecksInputSchema, StartFeatureInputSchema, SubmitClaimInputSchema, VerifyClaimsInputSchema, VerifyDesignInputSchema, } from './schemas.js';
|
|
16
|
+
import { handleApplyMigrations } from './tools/apply-migrations.js';
|
|
17
|
+
import { handleArchiveFeatureRelease } from './tools/archive-feature-release.js';
|
|
18
|
+
import { handleCaptureLearning } from './tools/capture-learning.js';
|
|
19
|
+
import { handleExploreKnowledge } from './tools/explore-knowledge.js';
|
|
20
|
+
import { handleGetClaimsNeedingReview } from './tools/get-claims-needing-review.js';
|
|
21
|
+
import { handleGetDevelopmentEvalStatus } from './tools/get-development-eval-status.js';
|
|
22
|
+
import { handleGetFeatureStatus } from './tools/get-feature-status.js';
|
|
23
|
+
import { handleGetNextPhase } from './tools/get-next-phase.js';
|
|
24
|
+
import { handlePreparePhaseContext } from './tools/prepare-phase-context.js';
|
|
25
|
+
import { handleRecordCommit } from './tools/record-commit.js';
|
|
26
|
+
import { handleRecordEvalPlan } from './tools/record-eval-plan.js';
|
|
27
|
+
import { handleRecordEvalRun } from './tools/record-eval-run.js';
|
|
28
|
+
import { handleRecordMerge } from './tools/record-merge.js';
|
|
29
|
+
import { handleRecordPhaseArtifact } from './tools/record-phase-artifact.js';
|
|
30
|
+
import { handleRecordPullRequest } from './tools/record-pull-request.js';
|
|
31
|
+
import { handleRecordQualityGate } from './tools/record-quality-gate.js';
|
|
32
|
+
import { handleRecordPhaseResult } from './tools/record-phase-result.js';
|
|
33
|
+
import { handleRecordWatcherReview } from './tools/record-watcher-review.js';
|
|
34
|
+
import { handleRunReviewChecks } from './tools/run-review-checks.js';
|
|
35
|
+
import { handleRunPolicyChecks } from './tools/run-policy-checks.js';
|
|
36
|
+
import { handleStartFeature } from './tools/start-feature.js';
|
|
37
|
+
import { handleSubmitClaim } from './tools/submit-claim.js';
|
|
38
|
+
import { handleVerifyClaims } from './tools/verify-claims.js';
|
|
39
|
+
import { handleVerifyDesign } from './tools/verify-design.js';
|
|
40
|
+
import { safeToolHandler } from './utils.js';
|
|
41
|
+
const project_root = process.env.ODIN_PROJECT_ROOT ?? process.cwd();
|
|
42
|
+
const runtime_config = loadRuntimeConfig(project_root);
|
|
43
|
+
const runtime_summary = summarizeRuntimeConfig(project_root, runtime_config);
|
|
44
|
+
console.error(`[Odin Runtime] Project root: ${runtime_summary.project_root}`);
|
|
45
|
+
console.error(`[Odin Runtime] Runtime mode: ${runtime_summary.runtime_mode}`);
|
|
46
|
+
console.error(`[Odin Runtime] Review adapter: ${runtime_summary.review_provider}`);
|
|
47
|
+
console.error(`[Odin Runtime] Skills auto-detect: ${runtime_summary.skills_auto_detect ? 'enabled' : 'disabled'}`);
|
|
48
|
+
console.error(`[Odin Runtime] ${CONFIG_RESTART_NOTE}`);
|
|
49
|
+
function createWorkflowStateAdapter() {
|
|
50
|
+
const config = runtime_config;
|
|
51
|
+
if (config.runtime.mode === 'supabase') {
|
|
52
|
+
if (!config.supabase?.url || !config.supabase?.secret_key) {
|
|
53
|
+
console.error('[Odin Runtime] FATAL: runtime.mode is "supabase" but SUPABASE_URL and/or SUPABASE_SECRET_KEY are missing.\n' +
|
|
54
|
+
' → Set them in .env or .odin/config.yaml, or change runtime.mode to "in_memory".\n' +
|
|
55
|
+
' → Run `odin init` (or `odin-runtime-init`) to generate config scaffolding.');
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
const adapter = new SupabaseWorkflowStateAdapter(config);
|
|
59
|
+
console.error('[Odin Runtime] Workflow state adapter: supabase');
|
|
60
|
+
return adapter;
|
|
61
|
+
}
|
|
62
|
+
if (config.runtime.mode !== 'in_memory') {
|
|
63
|
+
console.error(`[Odin Runtime] FATAL: unknown runtime.mode "${config.runtime.mode}". Supported: "supabase", "in_memory".`);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
console.error('[Odin Runtime] Workflow state adapter: in-memory');
|
|
67
|
+
return new InMemoryWorkflowStateAdapter();
|
|
68
|
+
}
|
|
69
|
+
const workflow_state = createWorkflowStateAdapter();
|
|
70
|
+
function createArchiveAdapter() {
|
|
71
|
+
const provider = runtime_config.archive?.provider ?? 'none';
|
|
72
|
+
if (provider !== 'supabase') {
|
|
73
|
+
console.error('[Odin Runtime] Archive adapter: disabled (provider: none)');
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
if (!runtime_config.supabase?.url || !runtime_config.supabase?.secret_key) {
|
|
77
|
+
console.error('[Odin Runtime] Archive adapter: disabled (SUPABASE_URL and SUPABASE_SECRET_KEY are required when archive.provider is "supabase")');
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
const adapter = new SupabaseArchiveAdapter(runtime_config);
|
|
81
|
+
console.error('[Odin Runtime] Archive adapter: supabase');
|
|
82
|
+
return adapter;
|
|
83
|
+
}
|
|
84
|
+
function createReviewAdapter(project_root) {
|
|
85
|
+
console.error('[Odin Runtime] Review adapter: semgrep');
|
|
86
|
+
return new SemgrepReviewAdapter(project_root);
|
|
87
|
+
}
|
|
88
|
+
function createSkillAdapter(project_root) {
|
|
89
|
+
console.error('[Odin Runtime] Skill adapter: filesystem');
|
|
90
|
+
return new FilesystemSkillAdapter(project_root, runtime_config);
|
|
91
|
+
}
|
|
92
|
+
function createFormalVerificationAdapter(project_root) {
|
|
93
|
+
const provider = runtime_config.formal_verification?.provider;
|
|
94
|
+
if (provider == null || provider === 'none') {
|
|
95
|
+
console.error('[Odin Runtime] Formal verification adapter: disabled (provider: none)');
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const timeout = runtime_config.formal_verification?.timeout_seconds ?? 120;
|
|
99
|
+
console.error(`[Odin Runtime] Formal verification adapter: tla-precheck (timeout: ${timeout}s)`);
|
|
100
|
+
return new TlaPreCheckAdapter(project_root, timeout);
|
|
101
|
+
}
|
|
102
|
+
const review_adapter = createReviewAdapter(project_root);
|
|
103
|
+
const skill_adapter = createSkillAdapter(project_root);
|
|
104
|
+
const archive_adapter = createArchiveAdapter();
|
|
105
|
+
const formal_verification_adapter = createFormalVerificationAdapter(project_root);
|
|
106
|
+
const server = new McpServer({
|
|
107
|
+
name: 'odin',
|
|
108
|
+
version: '0.1.0',
|
|
109
|
+
}, {
|
|
110
|
+
capabilities: {
|
|
111
|
+
logging: {},
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
server.registerTool('odin.archive_feature_release', {
|
|
115
|
+
title: 'Archive Feature Release',
|
|
116
|
+
description: 'Upload and record the release archive for a feature using Odin runtime semantics.',
|
|
117
|
+
inputSchema: ArchiveFeatureReleaseInputSchema,
|
|
118
|
+
}, safeToolHandler(async (input) => handleArchiveFeatureRelease(workflow_state, archive_adapter, input)));
|
|
119
|
+
server.registerTool('odin.start_feature', {
|
|
120
|
+
title: 'Start Feature',
|
|
121
|
+
description: 'Create a feature inside the Odin runtime control plane.',
|
|
122
|
+
inputSchema: StartFeatureInputSchema,
|
|
123
|
+
}, safeToolHandler(async (input) => handleStartFeature(workflow_state, input)));
|
|
124
|
+
server.registerTool('odin.get_feature_status', {
|
|
125
|
+
title: 'Get Feature Status',
|
|
126
|
+
description: 'Return a richer feature status bundle with workflow counts and recent activity.',
|
|
127
|
+
inputSchema: GetFeatureStatusInputSchema,
|
|
128
|
+
}, safeToolHandler(async (input) => handleGetFeatureStatus(workflow_state, input)));
|
|
129
|
+
server.registerTool('odin.get_development_eval_status', {
|
|
130
|
+
title: 'Get Development Eval Status',
|
|
131
|
+
description: 'Inspect focused development eval state, latest artifacts, and recent history for a feature.',
|
|
132
|
+
inputSchema: GetDevelopmentEvalStatusInputSchema,
|
|
133
|
+
}, safeToolHandler(async (input) => handleGetDevelopmentEvalStatus(workflow_state, input)));
|
|
134
|
+
server.registerTool('odin.get_next_phase', {
|
|
135
|
+
title: 'Get Next Phase',
|
|
136
|
+
description: 'Return the current phase and next allowed phase for a feature.',
|
|
137
|
+
inputSchema: GetNextPhaseInputSchema,
|
|
138
|
+
}, safeToolHandler(async (input) => handleGetNextPhase(workflow_state, input)));
|
|
139
|
+
server.registerTool('odin.prepare_phase_context', {
|
|
140
|
+
title: 'Prepare Phase Context',
|
|
141
|
+
description: 'Assemble the working bundle an agent needs for a feature phase.',
|
|
142
|
+
inputSchema: PreparePhaseContextInputSchema,
|
|
143
|
+
}, safeToolHandler(async (input) => handlePreparePhaseContext(workflow_state, skill_adapter, input)));
|
|
144
|
+
server.registerTool('odin.record_phase_artifact', {
|
|
145
|
+
title: 'Record Phase Artifact',
|
|
146
|
+
description: 'Record an artifact produced during a workflow phase.',
|
|
147
|
+
inputSchema: RecordPhaseArtifactInputSchema,
|
|
148
|
+
}, safeToolHandler(async (input) => handleRecordPhaseArtifact(workflow_state, input)));
|
|
149
|
+
server.registerTool('odin.submit_claim', {
|
|
150
|
+
title: 'Submit Claim',
|
|
151
|
+
description: 'Submit a watched agent claim for policy and watcher verification.',
|
|
152
|
+
inputSchema: SubmitClaimInputSchema,
|
|
153
|
+
}, safeToolHandler(async (input) => handleSubmitClaim(workflow_state, input)));
|
|
154
|
+
server.registerTool('odin.record_commit', {
|
|
155
|
+
title: 'Record Commit',
|
|
156
|
+
description: 'Record git commit metadata for a feature.',
|
|
157
|
+
inputSchema: RecordCommitInputSchema,
|
|
158
|
+
}, safeToolHandler(async (input) => handleRecordCommit(workflow_state, input)));
|
|
159
|
+
server.registerTool('odin.record_pr', {
|
|
160
|
+
title: 'Record Pull Request',
|
|
161
|
+
description: 'Record the GitHub pull request created for a feature.',
|
|
162
|
+
inputSchema: RecordPullRequestInputSchema,
|
|
163
|
+
}, safeToolHandler(async (input) => handleRecordPullRequest(workflow_state, input)));
|
|
164
|
+
server.registerTool('odin.record_merge', {
|
|
165
|
+
title: 'Record Merge',
|
|
166
|
+
description: 'Record that a human merged the feature pull request.',
|
|
167
|
+
inputSchema: RecordMergeInputSchema,
|
|
168
|
+
}, safeToolHandler(async (input) => handleRecordMerge(workflow_state, input)));
|
|
169
|
+
server.registerTool('odin.record_quality_gate', {
|
|
170
|
+
title: 'Record Quality Gate',
|
|
171
|
+
description: 'Record a workflow quality gate decision for a feature.',
|
|
172
|
+
inputSchema: RecordQualityGateInputSchema,
|
|
173
|
+
}, safeToolHandler(async (input) => handleRecordQualityGate(workflow_state, input)));
|
|
174
|
+
server.registerTool('odin.record_eval_plan', {
|
|
175
|
+
title: 'Record Eval Plan',
|
|
176
|
+
description: 'Record a structured development eval plan for the Architect phase.',
|
|
177
|
+
inputSchema: RecordEvalPlanInputSchema,
|
|
178
|
+
}, safeToolHandler(async (input) => handleRecordEvalPlan(workflow_state, input)));
|
|
179
|
+
server.registerTool('odin.record_eval_run', {
|
|
180
|
+
title: 'Record Eval Run',
|
|
181
|
+
description: 'Record a structured development eval run for Reviewer or Integrator.',
|
|
182
|
+
inputSchema: RecordEvalRunInputSchema,
|
|
183
|
+
}, safeToolHandler(async (input) => handleRecordEvalRun(workflow_state, input)));
|
|
184
|
+
server.registerTool('odin.record_phase_result', {
|
|
185
|
+
title: 'Record Phase Result',
|
|
186
|
+
description: 'Record the outcome of a workflow phase and update workflow state.',
|
|
187
|
+
inputSchema: RecordPhaseResultInputSchema,
|
|
188
|
+
}, safeToolHandler(async (input) => handleRecordPhaseResult(workflow_state, archive_adapter, input)));
|
|
189
|
+
server.registerTool('odin.run_review_checks', {
|
|
190
|
+
title: 'Run Review Checks',
|
|
191
|
+
description: 'Queue or execute review checks for a feature phase.',
|
|
192
|
+
inputSchema: RunReviewChecksInputSchema,
|
|
193
|
+
}, safeToolHandler(async (input) => handleRunReviewChecks(workflow_state, review_adapter, input)));
|
|
194
|
+
server.registerTool('odin.run_policy_checks', {
|
|
195
|
+
title: 'Run Policy Checks',
|
|
196
|
+
description: 'Run deterministic policy checks for submitted claims on a feature.',
|
|
197
|
+
inputSchema: RunPolicyChecksInputSchema,
|
|
198
|
+
}, safeToolHandler(async (input) => handleRunPolicyChecks(workflow_state, input)));
|
|
199
|
+
server.registerTool('odin.capture_learning', {
|
|
200
|
+
title: 'Capture Learning',
|
|
201
|
+
description: 'Capture a learning candidate from workflow execution.',
|
|
202
|
+
inputSchema: CaptureLearningInputSchema,
|
|
203
|
+
}, safeToolHandler(async (input) => handleCaptureLearning(workflow_state, skill_adapter, input)));
|
|
204
|
+
server.registerTool('odin.explore_knowledge', {
|
|
205
|
+
title: 'Explore Knowledge',
|
|
206
|
+
description: 'Explore knowledge clusters across features, grouped by domain with cross-domain bridges and resonance ranking.',
|
|
207
|
+
inputSchema: ExploreKnowledgeInputSchema,
|
|
208
|
+
}, safeToolHandler(async (input) => handleExploreKnowledge(workflow_state, skill_adapter, input)));
|
|
209
|
+
server.registerTool('odin.verify_claims', {
|
|
210
|
+
title: 'Verify Claims',
|
|
211
|
+
description: 'Inspect claim verification status for a feature.',
|
|
212
|
+
inputSchema: VerifyClaimsInputSchema,
|
|
213
|
+
}, safeToolHandler(async (input) => handleVerifyClaims(workflow_state, input)));
|
|
214
|
+
server.registerTool('odin.get_claims_needing_review', {
|
|
215
|
+
title: 'Get Claims Needing Review',
|
|
216
|
+
description: 'List claims currently waiting for watcher review.',
|
|
217
|
+
inputSchema: GetClaimsNeedingReviewInputSchema,
|
|
218
|
+
}, safeToolHandler(async (input) => handleGetClaimsNeedingReview(workflow_state, input)));
|
|
219
|
+
server.registerTool('odin.record_watcher_review', {
|
|
220
|
+
title: 'Record Watcher Review',
|
|
221
|
+
description: 'Record the watcher verdict for an escalated claim.',
|
|
222
|
+
inputSchema: RecordWatcherReviewInputSchema,
|
|
223
|
+
}, safeToolHandler(async (input) => handleRecordWatcherReview(workflow_state, input)));
|
|
224
|
+
server.registerTool('odin.verify_design', {
|
|
225
|
+
title: 'Verify Design',
|
|
226
|
+
description: 'Run formal design verification (TLA+ model checking) on a .machine.ts DSL file. Opt-in via formal_verification.provider in .odin/config.yaml.',
|
|
227
|
+
inputSchema: VerifyDesignInputSchema,
|
|
228
|
+
}, safeToolHandler(async (input) => handleVerifyDesign(formal_verification_adapter, input)));
|
|
229
|
+
server.registerTool('odin.apply_migrations', {
|
|
230
|
+
title: 'Apply Migrations',
|
|
231
|
+
description: 'Apply pending PostgreSQL database migrations. Supports DATABASE_URL (any PostgreSQL provider) or SUPABASE_URL + SUPABASE_ACCESS_TOKEN (Supabase Management API). Auto-detects existing schema on first run.',
|
|
232
|
+
inputSchema: ApplyMigrationsInputSchema,
|
|
233
|
+
}, safeToolHandler(async (input) => handleApplyMigrations(runtime_config, input)));
|
|
234
|
+
async function main() {
|
|
235
|
+
const transport = new StdioServerTransport();
|
|
236
|
+
await server.connect(transport);
|
|
237
|
+
console.error('[Odin Runtime] MCP server running on stdio');
|
|
238
|
+
}
|
|
239
|
+
main().catch((error) => {
|
|
240
|
+
console.error('[Odin Runtime] Fatal startup error:', error);
|
|
241
|
+
process.exit(1);
|
|
242
|
+
});
|
|
243
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply Migrations Tool
|
|
3
|
+
* Version: 0.2.0
|
|
4
|
+
*
|
|
5
|
+
* Provider-agnostic PostgreSQL migration runner. Supports:
|
|
6
|
+
* - Supabase Management API (SUPABASE_URL + SUPABASE_ACCESS_TOKEN)
|
|
7
|
+
* - Direct PostgreSQL (DATABASE_URL)
|
|
8
|
+
*
|
|
9
|
+
* Includes automatic bootstrap: detects existing Odin schema and seeds
|
|
10
|
+
* the tracking table so already-applied migrations are not re-run.
|
|
11
|
+
*/
|
|
12
|
+
import { type RuntimeConfig } from '../config.js';
|
|
13
|
+
import type { ApplyMigrationsInput } from '../schemas.js';
|
|
14
|
+
import type { SqlExecutor } from '../adapters/sql-executor/types.js';
|
|
15
|
+
export declare function describeSupabaseManagementApiUrlIssue(supabase_url: string): string | null;
|
|
16
|
+
export declare function createSqlExecutor(config: RuntimeConfig): {
|
|
17
|
+
executor?: SqlExecutor;
|
|
18
|
+
error?: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function handleApplyMigrations(config: RuntimeConfig, input: ApplyMigrationsInput): Promise<import("../utils.js").ToolResult>;
|
|
21
|
+
//# sourceMappingURL=apply-migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-migrations.d.ts","sourceRoot":"","sources":["../../src/tools/apply-migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAmBrE,wBAAgB,qCAAqC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsBzF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,QAAQ,CAAC,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAoCnG;AA8HD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,oBAAoB,6CA+C5B"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply Migrations Tool
|
|
3
|
+
* Version: 0.2.0
|
|
4
|
+
*
|
|
5
|
+
* Provider-agnostic PostgreSQL migration runner. Supports:
|
|
6
|
+
* - Supabase Management API (SUPABASE_URL + SUPABASE_ACCESS_TOKEN)
|
|
7
|
+
* - Direct PostgreSQL (DATABASE_URL)
|
|
8
|
+
*
|
|
9
|
+
* Includes automatic bootstrap: detects existing Odin schema and seeds
|
|
10
|
+
* the tracking table so already-applied migrations are not re-run.
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
13
|
+
import { dirname, join, resolve } from 'node:path';
|
|
14
|
+
import { fileURLToPath } from 'node:url';
|
|
15
|
+
import { CONFIG_RESTART_NOTE } from '../config.js';
|
|
16
|
+
import { SupabaseManagementApiExecutor } from '../adapters/sql-executor/supabase-management-api.js';
|
|
17
|
+
import { DirectPostgresExecutor } from '../adapters/sql-executor/direct-postgres.js';
|
|
18
|
+
import { createErrorResult, createTextResult } from '../utils.js';
|
|
19
|
+
// ====================================================================
|
|
20
|
+
// Executor factory
|
|
21
|
+
// ====================================================================
|
|
22
|
+
function appendRestartNote(message) {
|
|
23
|
+
return `${message}\n\n${CONFIG_RESTART_NOTE}`;
|
|
24
|
+
}
|
|
25
|
+
export function describeSupabaseManagementApiUrlIssue(supabase_url) {
|
|
26
|
+
let parsed;
|
|
27
|
+
try {
|
|
28
|
+
parsed = new URL(supabase_url);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return `SUPABASE_URL is not a valid URL: ${supabase_url}. Use your project base URL (for example https://<ref>.supabase.co) or use DATABASE_URL for direct PostgreSQL migrations.`;
|
|
32
|
+
}
|
|
33
|
+
if (parsed.pathname.startsWith('/storage/')) {
|
|
34
|
+
return `SUPABASE_URL points to a Storage endpoint (${supabase_url}), not a project base URL. Use the project base URL instead (for example https://<ref>.supabase.co). If you are working against local Supabase or another local PostgreSQL instance, prefer DATABASE_URL for odin.apply_migrations.`;
|
|
35
|
+
}
|
|
36
|
+
if (parsed.hostname === '127.0.0.1' || parsed.hostname === 'localhost') {
|
|
37
|
+
return `SUPABASE_URL points to a local Supabase endpoint (${supabase_url}). Odin does not use local Supabase URLs with the Supabase Management API path here. Use DATABASE_URL for direct PostgreSQL migrations instead.`;
|
|
38
|
+
}
|
|
39
|
+
const project_ref = SupabaseManagementApiExecutor.extractProjectRef(supabase_url);
|
|
40
|
+
if (project_ref == null) {
|
|
41
|
+
return `Cannot extract a Supabase project ref from SUPABASE_URL: ${supabase_url}. Expected a base project URL like https://<ref>.supabase.co. If you are not using hosted Supabase Management API access, use DATABASE_URL instead.`;
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
export function createSqlExecutor(config) {
|
|
46
|
+
const database_url = config.database?.url;
|
|
47
|
+
if (database_url != null && database_url.length > 0) {
|
|
48
|
+
return { executor: new DirectPostgresExecutor(database_url) };
|
|
49
|
+
}
|
|
50
|
+
const supabase_url = config.supabase?.url;
|
|
51
|
+
const access_token = config.supabase?.access_token;
|
|
52
|
+
if (supabase_url != null && supabase_url.length > 0 && access_token != null && access_token.length > 0) {
|
|
53
|
+
const url_issue = describeSupabaseManagementApiUrlIssue(supabase_url);
|
|
54
|
+
if (url_issue != null) {
|
|
55
|
+
return {
|
|
56
|
+
error: appendRestartNote(url_issue),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const project_ref = SupabaseManagementApiExecutor.extractProjectRef(supabase_url);
|
|
60
|
+
if (project_ref == null) {
|
|
61
|
+
return {
|
|
62
|
+
error: appendRestartNote(`Cannot extract project ref from SUPABASE_URL: ${supabase_url}. Expected format: https://<ref>.supabase.co`),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return { executor: new SupabaseManagementApiExecutor(project_ref, access_token) };
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
error: appendRestartNote('No database connection configured. Set one of:\n' +
|
|
69
|
+
' • DATABASE_URL — direct PostgreSQL connection string (recommended for local PostgreSQL or local Supabase)\n' +
|
|
70
|
+
' • SUPABASE_URL + SUPABASE_ACCESS_TOKEN — Supabase Management API\n' +
|
|
71
|
+
'Set in .env or .odin/config.yaml.'),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// ====================================================================
|
|
75
|
+
// Migration file discovery
|
|
76
|
+
// ====================================================================
|
|
77
|
+
function findMigrationsDir() {
|
|
78
|
+
const current_file = fileURLToPath(import.meta.url);
|
|
79
|
+
const package_root = resolve(dirname(current_file), '..', '..');
|
|
80
|
+
const bundled_migrations = join(package_root, 'migrations');
|
|
81
|
+
if (existsSync(bundled_migrations)) {
|
|
82
|
+
return bundled_migrations;
|
|
83
|
+
}
|
|
84
|
+
const sibling_migrations = resolve(package_root, '..', 'migrations');
|
|
85
|
+
if (existsSync(sibling_migrations)) {
|
|
86
|
+
return sibling_migrations;
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
function loadMigrationFiles(migrations_dir) {
|
|
91
|
+
const entries = readdirSync(migrations_dir)
|
|
92
|
+
.filter((f) => f.endsWith('.sql'))
|
|
93
|
+
.sort();
|
|
94
|
+
return entries.map((name) => ({
|
|
95
|
+
name,
|
|
96
|
+
sql: readFileSync(join(migrations_dir, name), 'utf8'),
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
// ====================================================================
|
|
100
|
+
// Tracking table + bootstrap
|
|
101
|
+
// ====================================================================
|
|
102
|
+
async function ensureTrackingTable(executor) {
|
|
103
|
+
const result = await executor.execute(`CREATE TABLE IF NOT EXISTS odin_migrations (
|
|
104
|
+
id SERIAL PRIMARY KEY,
|
|
105
|
+
name TEXT UNIQUE NOT NULL,
|
|
106
|
+
applied_at TIMESTAMPTZ DEFAULT now()
|
|
107
|
+
);`);
|
|
108
|
+
return { error: result.error };
|
|
109
|
+
}
|
|
110
|
+
async function fetchAppliedNames(executor) {
|
|
111
|
+
const result = await executor.execute('SELECT name FROM odin_migrations ORDER BY id;');
|
|
112
|
+
if (result.error != null) {
|
|
113
|
+
return { names: new Set(), error: result.error };
|
|
114
|
+
}
|
|
115
|
+
const names = new Set(result.rows.map((row) => row.name));
|
|
116
|
+
return { names };
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Bootstrap: detect whether the Odin schema already exists and seed the
|
|
120
|
+
* tracking table with migration names so they are not re-applied.
|
|
121
|
+
*
|
|
122
|
+
* Detection heuristic: if the `features` table exists, the core schema is
|
|
123
|
+
* already in place. If `agent_claims` exists, the current bundled v2 baseline
|
|
124
|
+
* (`005`-`008`) is also present.
|
|
125
|
+
*/
|
|
126
|
+
async function bootstrapExistingSchema(executor, migration_files) {
|
|
127
|
+
const check = await executor.execute(`SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tablename IN ('features', 'agent_claims') ORDER BY tablename;`);
|
|
128
|
+
if (check.error != null) {
|
|
129
|
+
return { bootstrapped: [], error: check.error };
|
|
130
|
+
}
|
|
131
|
+
const existing_tables = new Set(check.rows.map((r) => r.tablename));
|
|
132
|
+
if (existing_tables.size === 0) {
|
|
133
|
+
return { bootstrapped: [] };
|
|
134
|
+
}
|
|
135
|
+
const has_core = existing_tables.has('features');
|
|
136
|
+
const has_v2 = existing_tables.has('agent_claims');
|
|
137
|
+
// Determine which migrations are already represented in the live schema.
|
|
138
|
+
// Core migrations: 001-004. Current bundled v2 baseline: 005-008.
|
|
139
|
+
const bootstrapped = [];
|
|
140
|
+
for (const file of migration_files) {
|
|
141
|
+
const prefix = parseInt(file.name.split('_')[0] ?? '', 10);
|
|
142
|
+
if (isNaN(prefix))
|
|
143
|
+
continue;
|
|
144
|
+
if (has_core && prefix <= 4) {
|
|
145
|
+
bootstrapped.push(file.name);
|
|
146
|
+
}
|
|
147
|
+
else if (has_v2 && prefix >= 5 && prefix <= 8) {
|
|
148
|
+
bootstrapped.push(file.name);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (bootstrapped.length === 0) {
|
|
152
|
+
return { bootstrapped: [] };
|
|
153
|
+
}
|
|
154
|
+
// Seed the tracking table.
|
|
155
|
+
const values = bootstrapped
|
|
156
|
+
.map((name) => `('${name.replace(/'/g, "''")}')`)
|
|
157
|
+
.join(', ');
|
|
158
|
+
const seed = await executor.execute(`INSERT INTO odin_migrations (name) VALUES ${values} ON CONFLICT (name) DO NOTHING;`);
|
|
159
|
+
if (seed.error != null) {
|
|
160
|
+
return { bootstrapped: [], error: `Bootstrap seed failed: ${seed.error}` };
|
|
161
|
+
}
|
|
162
|
+
console.error(`[Odin Runtime] Bootstrapped ${bootstrapped.length} existing migration(s): ${bootstrapped.join(', ')}`);
|
|
163
|
+
return { bootstrapped };
|
|
164
|
+
}
|
|
165
|
+
// ====================================================================
|
|
166
|
+
// Main handler
|
|
167
|
+
// ====================================================================
|
|
168
|
+
export async function handleApplyMigrations(config, input) {
|
|
169
|
+
const migrations_dir = findMigrationsDir();
|
|
170
|
+
if (migrations_dir == null) {
|
|
171
|
+
return createErrorResult('No migrations directory found. Looked for: ' +
|
|
172
|
+
'bundled migrations/ in the Odin package, sibling migrations/ next to the runtime package.');
|
|
173
|
+
}
|
|
174
|
+
const migration_files = loadMigrationFiles(migrations_dir);
|
|
175
|
+
if (migration_files.length === 0) {
|
|
176
|
+
return createTextResult('No .sql migration files found in ' + migrations_dir, {
|
|
177
|
+
migrations_dir,
|
|
178
|
+
total: 0,
|
|
179
|
+
applied: [],
|
|
180
|
+
skipped: [],
|
|
181
|
+
failed: [],
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
if (input.dry_run) {
|
|
185
|
+
const file_names = migration_files.map((f) => f.name);
|
|
186
|
+
return createTextResult(`Dry run: found ${migration_files.length} migration file(s) in ${migrations_dir}.\n` +
|
|
187
|
+
`Files: ${file_names.join(', ')}\n` +
|
|
188
|
+
'Run with dry_run=false to apply pending migrations.', {
|
|
189
|
+
dry_run: true,
|
|
190
|
+
migrations_dir,
|
|
191
|
+
total: migration_files.length,
|
|
192
|
+
files: file_names,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
// Resolve executor (DATABASE_URL takes priority over Supabase Management API).
|
|
196
|
+
const { executor, error: executor_error } = createSqlExecutor(config);
|
|
197
|
+
if (executor == null) {
|
|
198
|
+
return createErrorResult(executor_error);
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
return await runMigrations(executor, migration_files, migrations_dir);
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
await executor.close();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
async function runMigrations(executor, migration_files, migrations_dir) {
|
|
208
|
+
// Ensure the tracking table exists.
|
|
209
|
+
const tracking_result = await ensureTrackingTable(executor);
|
|
210
|
+
if (tracking_result.error != null) {
|
|
211
|
+
return createErrorResult(`Failed to create migration tracking table: ${tracking_result.error}`);
|
|
212
|
+
}
|
|
213
|
+
// Check which migrations are already recorded.
|
|
214
|
+
let { names: applied_names, error: fetch_error } = await fetchAppliedNames(executor);
|
|
215
|
+
if (fetch_error != null) {
|
|
216
|
+
return createErrorResult(`Failed to query applied migrations: ${fetch_error}`);
|
|
217
|
+
}
|
|
218
|
+
// Bootstrap: if no migrations are tracked yet, check for existing schema.
|
|
219
|
+
if (applied_names.size === 0) {
|
|
220
|
+
const { bootstrapped, error: bootstrap_error } = await bootstrapExistingSchema(executor, migration_files);
|
|
221
|
+
if (bootstrap_error != null) {
|
|
222
|
+
return createErrorResult(`Bootstrap failed: ${bootstrap_error}`);
|
|
223
|
+
}
|
|
224
|
+
if (bootstrapped.length > 0) {
|
|
225
|
+
for (const name of bootstrapped) {
|
|
226
|
+
applied_names.add(name);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Apply pending migrations.
|
|
231
|
+
const results = [];
|
|
232
|
+
let had_failure = false;
|
|
233
|
+
for (const migration of migration_files) {
|
|
234
|
+
if (applied_names.has(migration.name)) {
|
|
235
|
+
results.push({ name: migration.name, status: 'skipped' });
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
if (had_failure) {
|
|
239
|
+
results.push({
|
|
240
|
+
name: migration.name,
|
|
241
|
+
status: 'failed',
|
|
242
|
+
error: 'Skipped due to earlier failure',
|
|
243
|
+
});
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
console.error(`[Odin Runtime] Applying migration: ${migration.name}`);
|
|
247
|
+
const apply_result = await executor.execute(migration.sql);
|
|
248
|
+
if (apply_result.error != null) {
|
|
249
|
+
results.push({ name: migration.name, status: 'failed', error: apply_result.error });
|
|
250
|
+
had_failure = true;
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
const record_result = await executor.execute(`INSERT INTO odin_migrations (name) VALUES ('${migration.name.replace(/'/g, "''")}');`);
|
|
254
|
+
if (record_result.error != null) {
|
|
255
|
+
results.push({
|
|
256
|
+
name: migration.name,
|
|
257
|
+
status: 'failed',
|
|
258
|
+
error: `Migration SQL succeeded but tracking insert failed: ${record_result.error}`,
|
|
259
|
+
});
|
|
260
|
+
had_failure = true;
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
results.push({ name: migration.name, status: 'applied' });
|
|
264
|
+
}
|
|
265
|
+
const applied = results.filter((r) => r.status === 'applied');
|
|
266
|
+
const skipped = results.filter((r) => r.status === 'skipped');
|
|
267
|
+
const failed = results.filter((r) => r.status === 'failed');
|
|
268
|
+
const summary_lines = [
|
|
269
|
+
`Migrations: ${applied.length} applied, ${skipped.length} skipped, ${failed.length} failed.`,
|
|
270
|
+
];
|
|
271
|
+
if (applied.length > 0) {
|
|
272
|
+
summary_lines.push(`Applied: ${applied.map((r) => r.name).join(', ')}`);
|
|
273
|
+
}
|
|
274
|
+
if (failed.length > 0) {
|
|
275
|
+
summary_lines.push(`Failed: ${failed.map((r) => `${r.name} (${r.error ?? 'unknown error'})`).join(', ')}`);
|
|
276
|
+
}
|
|
277
|
+
const result_tool = had_failure ? createErrorResult : createTextResult;
|
|
278
|
+
return result_tool(summary_lines.join('\n'), {
|
|
279
|
+
migrations_dir,
|
|
280
|
+
total: migration_files.length,
|
|
281
|
+
applied: applied.map((r) => r.name),
|
|
282
|
+
skipped: skipped.map((r) => r.name),
|
|
283
|
+
failed: failed.map((r) => ({ name: r.name, error: r.error })),
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=apply-migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-migrations.js","sourceRoot":"","sources":["../../src/tools/apply-migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Archive Feature Release Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { ArchiveAdapter } from '../adapters/archive/types.js';
|
|
6
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
7
|
+
import type { ArchiveFeatureReleaseInput } from '../schemas.js';
|
|
8
|
+
export declare function autoArchiveFeature(workflow_state: WorkflowStateAdapter, archive_adapter: ArchiveAdapter, feature_id: string, summary: string, archived_by: string): Promise<{
|
|
9
|
+
files_archived: number;
|
|
10
|
+
storage_path: string;
|
|
11
|
+
} | null>;
|
|
12
|
+
export declare function handleArchiveFeatureRelease(workflow_state: WorkflowStateAdapter, archive_adapter: ArchiveAdapter | null, input: ArchiveFeatureReleaseInput): Promise<import("../utils.js").ToolResult>;
|
|
13
|
+
//# sourceMappingURL=archive-feature-release.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive-feature-release.d.ts","sourceRoot":"","sources":["../../src/tools/archive-feature-release.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAwHhE,wBAAsB,kBAAkB,CACtC,cAAc,EAAE,oBAAoB,EACpC,eAAe,EAAE,cAAc,EAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA4BlE;AAED,wBAAsB,2BAA2B,CAC/C,cAAc,EAAE,oBAAoB,EACpC,eAAe,EAAE,cAAc,GAAG,IAAI,EACtC,KAAK,EAAE,0BAA0B,6CAoElC"}
|