@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
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get Next Phase Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { GetNextPhaseInput } from '../schemas.js';
|
|
7
|
+
export declare function handleGetNextPhase(adapter: WorkflowStateAdapter, input: GetNextPhaseInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=get-next-phase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-next-phase.d.ts","sourceRoot":"","sources":["../../src/tools/get-next-phase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,iBAAiB,6CAwBzB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get Next Phase Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { getNextPhaseId, getPhaseContract } from '../domain/phases.js';
|
|
6
|
+
import { createErrorResult, createTextResult } from '../utils.js';
|
|
7
|
+
export async function handleGetNextPhase(adapter, input) {
|
|
8
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
9
|
+
if (feature == null) {
|
|
10
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
11
|
+
feature_id: input.feature_id,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
const current_phase = getPhaseContract(feature.current_phase);
|
|
15
|
+
const next_phase_id = getNextPhaseId(feature.current_phase);
|
|
16
|
+
const next_phase = next_phase_id == null ? null : getPhaseContract(next_phase_id);
|
|
17
|
+
return createTextResult(next_phase == null
|
|
18
|
+
? `Feature ${feature.id} is at the terminal phase ${current_phase.name}.`
|
|
19
|
+
: `Feature ${feature.id} is at ${current_phase.name}; next phase is ${next_phase.name}.`, {
|
|
20
|
+
feature_id: feature.id,
|
|
21
|
+
current_phase: current_phase,
|
|
22
|
+
next_phase,
|
|
23
|
+
blocked: feature.status === 'BLOCKED',
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=get-next-phase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-next-phase.js","sourceRoot":"","sources":["../../src/tools/get-next-phase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA6B,EAC7B,KAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAElF,OAAO,gBAAgB,CACrB,UAAU,IAAI,IAAI;QAChB,CAAC,CAAC,WAAW,OAAO,CAAC,EAAE,6BAA6B,aAAa,CAAC,IAAI,GAAG;QACzE,CAAC,CAAC,WAAW,OAAO,CAAC,EAAE,UAAU,aAAa,CAAC,IAAI,mBAAmB,UAAU,CAAC,IAAI,GAAG,EAC1F;QACE,UAAU,EAAE,OAAO,CAAC,EAAE;QACtB,aAAa,EAAE,aAAa;QAC5B,UAAU;QACV,OAAO,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS;KACtC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prepare Phase Context Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { SkillAdapter } from '../adapters/skills/types.js';
|
|
6
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
7
|
+
import type { PreparePhaseContextInput } from '../schemas.js';
|
|
8
|
+
export declare function handlePreparePhaseContext(adapter: WorkflowStateAdapter, skill_adapter: SkillAdapter, input: PreparePhaseContextInput): Promise<import("../utils.js").ToolResult>;
|
|
9
|
+
//# sourceMappingURL=prepare-phase-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare-phase-context.d.ts","sourceRoot":"","sources":["../../src/tools/prepare-phase-context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAMhF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AA+B9D,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,YAAY,EAC3B,KAAK,EAAE,wBAAwB,6CAwIhC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prepare Phase Context Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { resolveWorkflowActorName } from '../domain/actors.js';
|
|
6
|
+
import { appendDevelopmentEvalChecks, buildDevelopmentEvalContext } from '../domain/development-evals.js';
|
|
7
|
+
import { getPhaseAgentInstructions, getPhaseContract, isWatchedPhase } from '../domain/phases.js';
|
|
8
|
+
import { formatOpenGateSummary } from '../domain/quality-gates.js';
|
|
9
|
+
import { computeResonance } from '../domain/resonance.js';
|
|
10
|
+
import { createErrorResult, createTextResult } from '../utils.js';
|
|
11
|
+
const ARTIFACT_KEYS = [
|
|
12
|
+
'prd',
|
|
13
|
+
'requirements',
|
|
14
|
+
'spec',
|
|
15
|
+
'tasks',
|
|
16
|
+
'review',
|
|
17
|
+
'documentation',
|
|
18
|
+
'release_notes',
|
|
19
|
+
'design_verification',
|
|
20
|
+
'eval_plan',
|
|
21
|
+
'eval_run',
|
|
22
|
+
];
|
|
23
|
+
function buildArtifactLineage(artifacts) {
|
|
24
|
+
const lineage = {};
|
|
25
|
+
for (const output_type of ARTIFACT_KEYS) {
|
|
26
|
+
const matching = artifacts.filter((artifact) => artifact.output_type === output_type);
|
|
27
|
+
const latest = matching.at(-1);
|
|
28
|
+
if (latest != null) {
|
|
29
|
+
lineage[output_type] = latest;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return lineage;
|
|
33
|
+
}
|
|
34
|
+
export async function handlePreparePhaseContext(adapter, skill_adapter, input) {
|
|
35
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
36
|
+
if (feature == null) {
|
|
37
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
38
|
+
feature_id: input.feature_id,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const all_artifacts = await adapter.listPhaseArtifacts(input.feature_id);
|
|
42
|
+
const artifacts = input.include_artifacts ? all_artifacts : [];
|
|
43
|
+
const [feature_learnings, related_learnings] = input.include_learnings
|
|
44
|
+
? await Promise.all([
|
|
45
|
+
adapter.listLearnings(input.feature_id),
|
|
46
|
+
adapter.listRelatedLearnings(input.feature_id, 5),
|
|
47
|
+
])
|
|
48
|
+
: [[], []];
|
|
49
|
+
const [open_blockers, open_gate_records, open_findings, pending_claims, claims_needing_review] = await Promise.all([
|
|
50
|
+
adapter.listOpenBlockers(input.feature_id),
|
|
51
|
+
adapter.listOpenGateRecords(input.feature_id),
|
|
52
|
+
adapter.listOpenFindings(input.feature_id),
|
|
53
|
+
adapter.listPendingClaims(input.feature_id),
|
|
54
|
+
adapter.listClaimsNeedingReview(input.feature_id),
|
|
55
|
+
]);
|
|
56
|
+
const open_gates = open_gate_records.map(formatOpenGateSummary);
|
|
57
|
+
const phase = getPhaseContract(input.phase);
|
|
58
|
+
const agent = getPhaseAgentInstructions(input.phase);
|
|
59
|
+
const actor_name = resolveWorkflowActorName(input.phase, input.agent_name ?? agent.name);
|
|
60
|
+
const development_evals = buildDevelopmentEvalContext(feature, input.phase, all_artifacts, open_gate_records);
|
|
61
|
+
const watcher_constraints = isWatchedPhase(input.phase) && claims_needing_review.length > 0
|
|
62
|
+
? [
|
|
63
|
+
'Outstanding claims need watcher review: call odin.get_claims_needing_review, have watcher-agent review each claim, record results with odin.record_watcher_review, then re-run odin.verify_claims before closing the watched phase.',
|
|
64
|
+
]
|
|
65
|
+
: [];
|
|
66
|
+
const resolved_skills = input.include_skills
|
|
67
|
+
? await skill_adapter.resolveSkills({ feature, artifacts: all_artifacts, phase: input.phase })
|
|
68
|
+
: { resolved: [], fallback_used: false };
|
|
69
|
+
const skill_paths = resolved_skills.resolved.map((skill) => `${skill.category}/${skill.name}`);
|
|
70
|
+
const existing_invocation = await adapter.findOpenAgentInvocation(feature.id, input.phase, actor_name);
|
|
71
|
+
const invocation = existing_invocation ??
|
|
72
|
+
(input.phase === '10'
|
|
73
|
+
? null
|
|
74
|
+
: await adapter.startAgentInvocation(feature.id, input.phase, actor_name, `Phase ${input.phase}: ${phase.name}`, skill_paths.length > 0 ? skill_paths : undefined));
|
|
75
|
+
const bundle = {
|
|
76
|
+
feature,
|
|
77
|
+
phase,
|
|
78
|
+
agent: {
|
|
79
|
+
...agent,
|
|
80
|
+
name: actor_name,
|
|
81
|
+
constraints: [...new Set([...agent.constraints, ...development_evals.harness_prompt_block, ...watcher_constraints])],
|
|
82
|
+
},
|
|
83
|
+
invocation: invocation == null
|
|
84
|
+
? null
|
|
85
|
+
: {
|
|
86
|
+
id: invocation.id,
|
|
87
|
+
agent_name: invocation.agent_name,
|
|
88
|
+
started_at: invocation.started_at,
|
|
89
|
+
skills_used: invocation.skills_used,
|
|
90
|
+
},
|
|
91
|
+
workflow: {
|
|
92
|
+
open_blockers,
|
|
93
|
+
open_gates,
|
|
94
|
+
open_gate_records,
|
|
95
|
+
open_findings,
|
|
96
|
+
pending_claims,
|
|
97
|
+
claims_needing_review_count: claims_needing_review.length,
|
|
98
|
+
},
|
|
99
|
+
artifacts: buildArtifactLineage(artifacts),
|
|
100
|
+
development_evals,
|
|
101
|
+
skills: {
|
|
102
|
+
resolved: resolved_skills.resolved,
|
|
103
|
+
fallback_used: resolved_skills.fallback_used,
|
|
104
|
+
},
|
|
105
|
+
verification: {
|
|
106
|
+
watched_phase: isWatchedPhase(input.phase),
|
|
107
|
+
required_claims: isWatchedPhase(input.phase) ? ['CODE_MODIFIED'] : [],
|
|
108
|
+
required_checks: appendDevelopmentEvalChecks(input.phase === '6'
|
|
109
|
+
? ['security review', 'unit test evaluation']
|
|
110
|
+
: isWatchedPhase(input.phase)
|
|
111
|
+
? ['build', 'tests', 'policy checks', ...(claims_needing_review.length > 0 ? ['watcher review resolution'] : [])]
|
|
112
|
+
: [], input.phase),
|
|
113
|
+
review_mode: input.phase === '6' ? 'security' : isWatchedPhase(input.phase) ? 'watched_phase' : 'none',
|
|
114
|
+
},
|
|
115
|
+
learnings: [
|
|
116
|
+
...feature_learnings.map((learning) => ({
|
|
117
|
+
id: learning.id,
|
|
118
|
+
title: learning.title,
|
|
119
|
+
category: learning.category,
|
|
120
|
+
summary: learning.content.slice(0, 200),
|
|
121
|
+
source: 'feature',
|
|
122
|
+
})),
|
|
123
|
+
...(() => {
|
|
124
|
+
const resonance_inputs = related_learnings.map((l) => ({
|
|
125
|
+
id: l.id,
|
|
126
|
+
category: l.category,
|
|
127
|
+
confidence_score: l.confidence_score,
|
|
128
|
+
source_feature_id: l.source_feature_id,
|
|
129
|
+
shared_domains: l.shared_domains,
|
|
130
|
+
created_at: new Date().toISOString(),
|
|
131
|
+
}));
|
|
132
|
+
const scores = computeResonance(resonance_inputs);
|
|
133
|
+
const score_map = new Map(scores.map((s) => [s.learning_id, s.combined]));
|
|
134
|
+
return related_learnings
|
|
135
|
+
.slice()
|
|
136
|
+
.sort((a, b) => (score_map.get(b.id) ?? 0) - (score_map.get(a.id) ?? 0))
|
|
137
|
+
.map((learning) => ({
|
|
138
|
+
id: learning.id,
|
|
139
|
+
title: learning.title,
|
|
140
|
+
category: learning.category,
|
|
141
|
+
summary: learning.content.slice(0, 200),
|
|
142
|
+
source: 'related',
|
|
143
|
+
source_feature_id: learning.source_feature_id,
|
|
144
|
+
shared_domains: learning.shared_domains,
|
|
145
|
+
}));
|
|
146
|
+
})(),
|
|
147
|
+
],
|
|
148
|
+
};
|
|
149
|
+
return createTextResult(`Prepared ${phase.name} context for feature ${feature.id}.`, { context: bundle });
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=prepare-phase-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare-phase-context.js","sourceRoot":"","sources":["../../src/tools/prepare-phase-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Commit Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { RecordCommitInput } from '../schemas.js';
|
|
7
|
+
export declare function handleRecordCommit(adapter: WorkflowStateAdapter, input: RecordCommitInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=record-commit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-commit.d.ts","sourceRoot":"","sources":["../../src/tools/record-commit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAGhF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,iBAAiB,6CA6BzB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Commit Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { resolveWorkflowActorName } from '../domain/actors.js';
|
|
6
|
+
import { getPhaseAgentInstructions } from '../domain/phases.js';
|
|
7
|
+
import { createErrorResult, createTextResult } from '../utils.js';
|
|
8
|
+
export async function handleRecordCommit(adapter, input) {
|
|
9
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
10
|
+
if (feature == null) {
|
|
11
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
12
|
+
feature_id: input.feature_id,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
const committed_by = resolveWorkflowActorName(input.phase, input.committed_by ?? getPhaseAgentInstructions(input.phase).name);
|
|
16
|
+
const commit = await adapter.recordCommit({
|
|
17
|
+
feature_id: input.feature_id,
|
|
18
|
+
commit_hash: input.commit_hash,
|
|
19
|
+
phase: input.phase,
|
|
20
|
+
message: input.message,
|
|
21
|
+
files_changed: input.files_changed,
|
|
22
|
+
insertions: input.insertions,
|
|
23
|
+
deletions: input.deletions,
|
|
24
|
+
committed_by,
|
|
25
|
+
});
|
|
26
|
+
return createTextResult(`Recorded commit ${commit.commit_hash} for feature ${commit.feature_id}.`, { commit });
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=record-commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-commit.js","sourceRoot":"","sources":["../../src/tools/record-commit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA6B,EAC7B,KAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,wBAAwB,CAC3C,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,YAAY,IAAI,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAClE,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;QACxC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY;KACb,CAAC,CAAC;IAEH,OAAO,gBAAgB,CACrB,mBAAmB,MAAM,CAAC,WAAW,gBAAgB,MAAM,CAAC,UAAU,GAAG,EACzE,EAAE,MAAM,EAAE,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Eval Plan Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { RecordEvalPlanInput } from '../schemas.js';
|
|
7
|
+
export declare function handleRecordEvalPlan(adapter: WorkflowStateAdapter, input: RecordEvalPlanInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=record-eval-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-eval-plan.d.ts","sourceRoot":"","sources":["../../src/tools/record-eval-plan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGzD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,mBAAmB,6CAmC3B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Eval Plan Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { resolveWorkflowActorName } from '../domain/actors.js';
|
|
6
|
+
import { createErrorResult, createId, createTextResult } from '../utils.js';
|
|
7
|
+
export async function handleRecordEvalPlan(adapter, input) {
|
|
8
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
9
|
+
if (feature == null) {
|
|
10
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
11
|
+
feature_id: input.feature_id,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
const created_by = resolveWorkflowActorName('3', input.created_by);
|
|
15
|
+
const artifact = await adapter.recordPhaseArtifact({
|
|
16
|
+
id: createId('artifact'),
|
|
17
|
+
feature_id: input.feature_id,
|
|
18
|
+
phase: '3',
|
|
19
|
+
output_type: 'eval_plan',
|
|
20
|
+
content: {
|
|
21
|
+
scope: input.scope,
|
|
22
|
+
success_criteria: input.success_criteria,
|
|
23
|
+
non_goals: input.non_goals,
|
|
24
|
+
capability_evals: input.capability_evals,
|
|
25
|
+
regression_evals: input.regression_evals,
|
|
26
|
+
transcript_review_plan: input.transcript_review_plan,
|
|
27
|
+
solvability_note: input.solvability_note,
|
|
28
|
+
},
|
|
29
|
+
created_by,
|
|
30
|
+
created_at: new Date().toISOString(),
|
|
31
|
+
});
|
|
32
|
+
return createTextResult(`Recorded eval_plan for feature ${input.feature_id}.`, {
|
|
33
|
+
artifact,
|
|
34
|
+
counts: {
|
|
35
|
+
capability_evals: input.capability_evals.length,
|
|
36
|
+
regression_evals: input.regression_evals.length,
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=record-eval-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-eval-plan.js","sourceRoot":"","sources":["../../src/tools/record-eval-plan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA6B,EAC7B,KAA0B;IAE1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC;QACjD,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE;YACP,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;YACpD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;SACzC;QACD,UAAU;QACV,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,kCAAkC,KAAK,CAAC,UAAU,GAAG,EAAE;QAC7E,QAAQ;QACR,MAAM,EAAE;YACN,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM;YAC/C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM;SAChD;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Eval Run Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { RecordEvalRunInput } from '../schemas.js';
|
|
7
|
+
export declare function handleRecordEvalRun(adapter: WorkflowStateAdapter, input: RecordEvalRunInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=record-eval-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-eval-run.d.ts","sourceRoot":"","sources":["../../src/tools/record-eval-run.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,kBAAkB,6CAqC1B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Eval Run Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { resolveWorkflowActorName } from '../domain/actors.js';
|
|
6
|
+
import { createErrorResult, createId, createTextResult } from '../utils.js';
|
|
7
|
+
export async function handleRecordEvalRun(adapter, input) {
|
|
8
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
9
|
+
if (feature == null) {
|
|
10
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
11
|
+
feature_id: input.feature_id,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
const created_by = resolveWorkflowActorName(input.phase, input.created_by);
|
|
15
|
+
const artifact = await adapter.recordPhaseArtifact({
|
|
16
|
+
id: createId('artifact'),
|
|
17
|
+
feature_id: input.feature_id,
|
|
18
|
+
phase: input.phase,
|
|
19
|
+
output_type: 'eval_run',
|
|
20
|
+
content: {
|
|
21
|
+
status: input.status,
|
|
22
|
+
cases_run: input.cases_run,
|
|
23
|
+
important_failures: input.important_failures,
|
|
24
|
+
manual_review_notes: input.manual_review_notes,
|
|
25
|
+
transcript_review_observations: input.transcript_review_observations,
|
|
26
|
+
follow_up: input.follow_up,
|
|
27
|
+
environment_summary: input.environment_summary,
|
|
28
|
+
},
|
|
29
|
+
created_by,
|
|
30
|
+
created_at: new Date().toISOString(),
|
|
31
|
+
});
|
|
32
|
+
return createTextResult(`Recorded eval_run for feature ${input.feature_id}.`, {
|
|
33
|
+
artifact,
|
|
34
|
+
eval_run: {
|
|
35
|
+
status: input.status,
|
|
36
|
+
phase: input.phase,
|
|
37
|
+
cases_run: input.cases_run.length,
|
|
38
|
+
important_failures: input.important_failures.length,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=record-eval-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-eval-run.js","sourceRoot":"","sources":["../../src/tools/record-eval-run.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA6B,EAC7B,KAAyB;IAEzB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC;QACjD,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE;YACP,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;YAC9C,8BAA8B,EAAE,KAAK,CAAC,8BAA8B;YACpE,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;SAC/C;QACD,UAAU;QACV,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,iCAAiC,KAAK,CAAC,UAAU,GAAG,EAAE;QAC5E,QAAQ;QACR,QAAQ,EAAE;YACR,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM;YACjC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC,MAAM;SACpD;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Merge Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { RecordMergeInput } from '../schemas.js';
|
|
7
|
+
export declare function handleRecordMerge(adapter: WorkflowStateAdapter, input: RecordMergeInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=record-merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-merge.d.ts","sourceRoot":"","sources":["../../src/tools/record-merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,gBAAgB,6CAexB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Merge Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { createErrorResult, createTextResult } from '../utils.js';
|
|
6
|
+
export async function handleRecordMerge(adapter, input) {
|
|
7
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
8
|
+
if (feature == null) {
|
|
9
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
10
|
+
feature_id: input.feature_id,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const merge = await adapter.recordMerge(input.feature_id, input.merged_by);
|
|
14
|
+
return createTextResult(`Recorded merge for feature ${merge.feature_id}.`, { merge });
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=record-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-merge.js","sourceRoot":"","sources":["../../src/tools/record-merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA6B,EAC7B,KAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAE3E,OAAO,gBAAgB,CACrB,8BAA8B,KAAK,CAAC,UAAU,GAAG,EACjD,EAAE,KAAK,EAAE,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Phase Artifact Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { RecordPhaseArtifactInput } from '../schemas.js';
|
|
7
|
+
export declare function handleRecordPhaseArtifact(adapter: WorkflowStateAdapter, input: RecordPhaseArtifactInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=record-phase-artifact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-phase-artifact.d.ts","sourceRoot":"","sources":["../../src/tools/record-phase-artifact.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAG9D,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,wBAAwB,6CAyBhC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Phase Artifact Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { resolveWorkflowActorName } from '../domain/actors.js';
|
|
6
|
+
import { createId, createErrorResult, createTextResult } from '../utils.js';
|
|
7
|
+
export async function handleRecordPhaseArtifact(adapter, input) {
|
|
8
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
9
|
+
if (feature == null) {
|
|
10
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
11
|
+
feature_id: input.feature_id,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
const created_by = resolveWorkflowActorName(input.phase, input.created_by);
|
|
15
|
+
const artifact = await adapter.recordPhaseArtifact({
|
|
16
|
+
id: createId('artifact'),
|
|
17
|
+
feature_id: input.feature_id,
|
|
18
|
+
phase: input.phase,
|
|
19
|
+
output_type: input.output_type,
|
|
20
|
+
content: input.content,
|
|
21
|
+
created_by,
|
|
22
|
+
created_at: new Date().toISOString(),
|
|
23
|
+
});
|
|
24
|
+
return createTextResult(`Recorded ${artifact.output_type} artifact for feature ${artifact.feature_id}.`, { artifact });
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=record-phase-artifact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-phase-artifact.js","sourceRoot":"","sources":["../../src/tools/record-phase-artifact.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAA6B,EAC7B,KAA+B;IAE/B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,iBAAiB,CAAC,WAAW,KAAK,CAAC,UAAU,iBAAiB,EAAE;YACrE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAE3E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC;QACjD,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU;QACV,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CACrB,YAAY,QAAQ,CAAC,WAAW,yBAAyB,QAAQ,CAAC,UAAU,GAAG,EAC/E,EAAE,QAAQ,EAAE,CACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Phase Result 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 { RecordPhaseResultInput } from '../schemas.js';
|
|
8
|
+
export declare function handleRecordPhaseResult(adapter: WorkflowStateAdapter, archive_adapter: ArchiveAdapter | null, input: RecordPhaseResultInput): Promise<import("../utils.js").ToolResult>;
|
|
9
|
+
//# sourceMappingURL=record-phase-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-phase-result.d.ts","sourceRoot":"","sources":["../../src/tools/record-phase-result.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAIhF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAiC5D,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,oBAAoB,EAC7B,eAAe,EAAE,cAAc,GAAG,IAAI,EACtC,KAAK,EAAE,sBAAsB,6CA8H9B"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Phase Result Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import { resolveWorkflowActorName } from '../domain/actors.js';
|
|
6
|
+
import { getNextPhaseId, getPhaseContract } from '../domain/phases.js';
|
|
7
|
+
import { completeTaskArtifactContent } from '../domain/tasks.js';
|
|
8
|
+
import { createErrorResult, createId, createTextResult } from '../utils.js';
|
|
9
|
+
import { autoArchiveFeature } from './archive-feature-release.js';
|
|
10
|
+
async function completeBuilderTasks(adapter, feature_id, created_by) {
|
|
11
|
+
const artifacts = await adapter.listPhaseArtifacts(feature_id);
|
|
12
|
+
const latest_tasks = artifacts.filter((artifact) => artifact.output_type === 'tasks').at(-1);
|
|
13
|
+
if (latest_tasks == null) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const completed = completeTaskArtifactContent(latest_tasks.content);
|
|
17
|
+
if (!completed.changed) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
await adapter.recordPhaseArtifact({
|
|
21
|
+
id: createId('artifact'),
|
|
22
|
+
feature_id,
|
|
23
|
+
phase: latest_tasks.phase,
|
|
24
|
+
output_type: latest_tasks.output_type,
|
|
25
|
+
content: completed.content,
|
|
26
|
+
created_by,
|
|
27
|
+
created_at: new Date().toISOString(),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export async function handleRecordPhaseResult(adapter, archive_adapter, input) {
|
|
31
|
+
const feature = await adapter.getFeature(input.feature_id);
|
|
32
|
+
if (feature == null) {
|
|
33
|
+
return createErrorResult(`Feature ${input.feature_id} was not found.`, {
|
|
34
|
+
feature_id: input.feature_id,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (feature.current_phase !== input.phase) {
|
|
38
|
+
return createErrorResult(`Feature ${input.feature_id} is currently in phase ${feature.current_phase}, not ${input.phase}.`, {
|
|
39
|
+
feature_id: input.feature_id,
|
|
40
|
+
expected_phase: feature.current_phase,
|
|
41
|
+
provided_phase: input.phase,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
const next_phase = input.outcome === 'completed' ? input.next_phase ?? getNextPhaseId(input.phase) : input.next_phase ?? null;
|
|
45
|
+
const workflow_actor = resolveWorkflowActorName(input.phase, input.created_by);
|
|
46
|
+
if (input.phase === '5' && input.outcome === 'completed') {
|
|
47
|
+
await completeBuilderTasks(adapter, input.feature_id, workflow_actor);
|
|
48
|
+
}
|
|
49
|
+
let invocation_id = (await adapter.findOpenAgentInvocation(input.feature_id, input.phase, workflow_actor))?.id ?? null;
|
|
50
|
+
if (invocation_id == null && input.phase !== '10') {
|
|
51
|
+
try {
|
|
52
|
+
const phase_contract = getPhaseContract(input.phase);
|
|
53
|
+
const invocation = await adapter.startAgentInvocation(input.feature_id, input.phase, workflow_actor, `Phase ${input.phase}: ${phase_contract.name} (fallback)`);
|
|
54
|
+
invocation_id = invocation.id;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
console.error(`[Odin Runtime] Failed to start agent invocation for ${input.feature_id} phase ${input.phase}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const updated_feature = await adapter.recordPhaseResult({
|
|
61
|
+
id: createId('result'),
|
|
62
|
+
feature_id: input.feature_id,
|
|
63
|
+
phase: input.phase,
|
|
64
|
+
outcome: input.outcome,
|
|
65
|
+
summary: input.summary,
|
|
66
|
+
next_phase,
|
|
67
|
+
blockers: input.blockers,
|
|
68
|
+
created_by: workflow_actor,
|
|
69
|
+
created_at: new Date().toISOString(),
|
|
70
|
+
});
|
|
71
|
+
// GAP-1: Complete the agent invocation
|
|
72
|
+
if (invocation_id != null) {
|
|
73
|
+
try {
|
|
74
|
+
await adapter.completeAgentInvocation(invocation_id);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
console.error(`[Odin Runtime] Failed to complete agent invocation ${invocation_id}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// GAP-2: Record quality gate when phase completes
|
|
81
|
+
if (input.outcome === 'completed') {
|
|
82
|
+
try {
|
|
83
|
+
const phase_contract = getPhaseContract(input.phase);
|
|
84
|
+
await adapter.recordQualityGate(input.feature_id, `${phase_contract.name.toLowerCase()}_phase_complete`, 'APPROVED', workflow_actor, input.summary, input.phase);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
console.error(`[Odin Runtime] Failed to record quality gate for ${input.feature_id} phase ${input.phase}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (updated_feature == null) {
|
|
91
|
+
return createErrorResult(`Feature ${input.feature_id} could not be updated.`, {
|
|
92
|
+
feature_id: input.feature_id,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
// GAP-3: Compute feature eval when feature completes
|
|
96
|
+
let feature_eval = null;
|
|
97
|
+
let auto_archive = null;
|
|
98
|
+
if (updated_feature.status === 'COMPLETED') {
|
|
99
|
+
try {
|
|
100
|
+
feature_eval = await adapter.computeFeatureEval(input.feature_id);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
console.error(`[Odin Runtime] Failed to compute feature eval for ${input.feature_id}`);
|
|
104
|
+
}
|
|
105
|
+
// GAP-5: Auto-archive artifacts when feature completes
|
|
106
|
+
if (archive_adapter != null) {
|
|
107
|
+
try {
|
|
108
|
+
auto_archive = await autoArchiveFeature(adapter, archive_adapter, input.feature_id, input.summary, input.created_by);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
console.error(`[Odin Runtime] Failed to auto-archive feature ${input.feature_id}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return createTextResult(`Recorded ${input.outcome} result for phase ${input.phase} on feature ${input.feature_id}.`, {
|
|
116
|
+
feature: updated_feature,
|
|
117
|
+
next_phase,
|
|
118
|
+
...(feature_eval != null ? { feature_eval } : {}),
|
|
119
|
+
...(auto_archive != null ? { auto_archive } : {}),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=record-phase-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-phase-result.js","sourceRoot":"","sources":["../../src/tools/record-phase-result.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Pull Request Tool
|
|
3
|
+
* Version: 0.1.0
|
|
4
|
+
*/
|
|
5
|
+
import type { WorkflowStateAdapter } from '../adapters/workflow-state/types.js';
|
|
6
|
+
import type { RecordPullRequestInput } from '../schemas.js';
|
|
7
|
+
export declare function handleRecordPullRequest(adapter: WorkflowStateAdapter, input: RecordPullRequestInput): Promise<import("../utils.js").ToolResult>;
|
|
8
|
+
//# sourceMappingURL=record-pull-request.d.ts.map
|