@soddong/agentic-runtime 0.16.0
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/.tbls.yml +103 -0
- package/CHANGELOG.md +229 -0
- package/README.md +707 -0
- package/dist/agent-router.d.ts +39 -0
- package/dist/agent-router.d.ts.map +1 -0
- package/dist/agent-router.js +175 -0
- package/dist/agent-router.js.map +1 -0
- package/dist/bundle-installer.d.ts +25 -0
- package/dist/bundle-installer.d.ts.map +1 -0
- package/dist/bundle-installer.js +149 -0
- package/dist/bundle-installer.js.map +1 -0
- package/dist/bundle-registry.d.ts +30 -0
- package/dist/bundle-registry.d.ts.map +1 -0
- package/dist/bundle-registry.js +102 -0
- package/dist/bundle-registry.js.map +1 -0
- package/dist/claude-code-adapter.d.ts +27 -0
- package/dist/claude-code-adapter.d.ts.map +1 -0
- package/dist/claude-code-adapter.js +177 -0
- package/dist/claude-code-adapter.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1731 -0
- package/dist/cli.js.map +1 -0
- package/dist/codex-adapter.d.ts +23 -0
- package/dist/codex-adapter.d.ts.map +1 -0
- package/dist/codex-adapter.js +264 -0
- package/dist/codex-adapter.js.map +1 -0
- package/dist/database.d.ts +22 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +184 -0
- package/dist/database.js.map +1 -0
- package/dist/execution-projects.d.ts +71 -0
- package/dist/execution-projects.d.ts.map +1 -0
- package/dist/execution-projects.js +333 -0
- package/dist/execution-projects.js.map +1 -0
- package/dist/execution-query.d.ts +73 -0
- package/dist/execution-query.d.ts.map +1 -0
- package/dist/execution-query.js +370 -0
- package/dist/execution-query.js.map +1 -0
- package/dist/execution.d.ts +47 -0
- package/dist/execution.d.ts.map +1 -0
- package/dist/execution.js +153 -0
- package/dist/execution.js.map +1 -0
- package/dist/hook-command.d.ts +3 -0
- package/dist/hook-command.d.ts.map +1 -0
- package/dist/hook-command.js +13 -0
- package/dist/hook-command.js.map +1 -0
- package/dist/hook-record.d.ts +16 -0
- package/dist/hook-record.d.ts.map +1 -0
- package/dist/hook-record.js +427 -0
- package/dist/hook-record.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/kiro-adapter.d.ts +38 -0
- package/dist/kiro-adapter.d.ts.map +1 -0
- package/dist/kiro-adapter.js +374 -0
- package/dist/kiro-adapter.js.map +1 -0
- package/dist/module-registry.d.ts +21 -0
- package/dist/module-registry.d.ts.map +1 -0
- package/dist/module-registry.js +75 -0
- package/dist/module-registry.js.map +1 -0
- package/dist/runtime-info.d.ts +8 -0
- package/dist/runtime-info.d.ts.map +1 -0
- package/dist/runtime-info.js +15 -0
- package/dist/runtime-info.js.map +1 -0
- package/dist/seed-importer.d.ts +77 -0
- package/dist/seed-importer.d.ts.map +1 -0
- package/dist/seed-importer.js +570 -0
- package/dist/seed-importer.js.map +1 -0
- package/docs/build.md +129 -0
- package/docs/configuration.md +61 -0
- package/docs/delivery.md +90 -0
- package/docs/operations.md +112 -0
- package/docs/publishing.md +196 -0
- package/docs/schema/generated/README.md +31 -0
- package/docs/schema/generated/agentic_execution_logs.md +90 -0
- package/docs/schema/generated/agentic_execution_logs.svg +52 -0
- package/docs/schema/generated/agentic_execution_outputs.md +85 -0
- package/docs/schema/generated/agentic_execution_outputs.svg +52 -0
- package/docs/schema/generated/agentic_execution_project_activities.md +83 -0
- package/docs/schema/generated/agentic_execution_project_activities.svg +71 -0
- package/docs/schema/generated/agentic_execution_project_stages.md +69 -0
- package/docs/schema/generated/agentic_execution_project_stages.svg +71 -0
- package/docs/schema/generated/agentic_execution_projects.md +82 -0
- package/docs/schema/generated/agentic_execution_projects.svg +92 -0
- package/docs/schema/generated/agentic_execution_runs.md +111 -0
- package/docs/schema/generated/agentic_execution_runs.svg +92 -0
- package/docs/schema/generated/agentic_project_bundles.md +106 -0
- package/docs/schema/generated/agentic_project_bundles.svg +91 -0
- package/docs/schema/generated/agentic_project_modules.md +77 -0
- package/docs/schema/generated/agentic_project_modules.svg +49 -0
- package/docs/schema/generated/agentic_runtime_metadata.md +62 -0
- package/docs/schema/generated/agentic_runtime_metadata.svg +28 -0
- package/docs/schema/generated/agentic_schema_migrations.md +65 -0
- package/docs/schema/generated/agentic_schema_migrations.svg +32 -0
- package/docs/schema/generated/agentic_seed_import_items.md +85 -0
- package/docs/schema/generated/agentic_seed_import_items.svg +47 -0
- package/docs/schema/generated/agentic_seed_import_runs.md +103 -0
- package/docs/schema/generated/agentic_seed_import_runs.svg +68 -0
- package/docs/schema/generated/agentic_user_requests.md +66 -0
- package/docs/schema/generated/agentic_user_requests.svg +52 -0
- package/docs/schema/generated/schema.json +1976 -0
- package/docs/schema/generated/schema.mmd +167 -0
- package/docs/schema/generated/schema.svg +266 -0
- package/docs/schema/migrations.md +163 -0
- package/docs/usage.md +774 -0
- package/package.json +32 -0
- package/src/database/migrations/0001_runtime_base.sql +231 -0
- package/src/database/migrations/0002_runtime_bundles.sql +61 -0
- package/src/database/migrations/0003_runtime_seed_imports.sql +121 -0
- package/src/database/migrations/0004_runtime_seed_apply_status.sql +76 -0
- package/src/database/migrations/0005_runtime_execution_projects.sql +92 -0
package/dist/database.js
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
3
|
+
import { dirname, isAbsolute, join } from "node:path";
|
|
4
|
+
import { getRuntimeInfo } from "./runtime-info.js";
|
|
5
|
+
const DEFAULT_DATABASE_PATH = ".agentic/platform.sqlite";
|
|
6
|
+
const RUNTIME_MIGRATIONS = [
|
|
7
|
+
{
|
|
8
|
+
migrationId: "0001_runtime_base",
|
|
9
|
+
schemaVersion: "1"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
migrationId: "0002_runtime_bundles",
|
|
13
|
+
schemaVersion: "2"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
migrationId: "0003_runtime_seed_imports",
|
|
17
|
+
schemaVersion: "3"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
migrationId: "0004_runtime_seed_apply_status",
|
|
21
|
+
schemaVersion: "4"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
migrationId: "0005_runtime_execution_projects",
|
|
25
|
+
schemaVersion: "5"
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
function readProjectConfig(projectRoot) {
|
|
29
|
+
const configPath = join(projectRoot, "agentic.config.json");
|
|
30
|
+
if (!existsSync(configPath)) {
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
33
|
+
return JSON.parse(readFileSync(configPath, "utf8"));
|
|
34
|
+
}
|
|
35
|
+
export function resolveRuntimeDatabasePath(projectRoot = process.cwd()) {
|
|
36
|
+
const config = readProjectConfig(projectRoot);
|
|
37
|
+
const database = config.runtime?.database;
|
|
38
|
+
if (database?.type !== undefined && database.type !== "sqlite") {
|
|
39
|
+
throw new Error(`Unsupported runtime database type: ${database.type}`);
|
|
40
|
+
}
|
|
41
|
+
const configuredPath = database?.path ?? DEFAULT_DATABASE_PATH;
|
|
42
|
+
return isAbsolute(configuredPath) ? configuredPath : join(projectRoot, configuredPath);
|
|
43
|
+
}
|
|
44
|
+
function listAgenticTables(db) {
|
|
45
|
+
const rows = db
|
|
46
|
+
.prepare(`SELECT name
|
|
47
|
+
FROM sqlite_master
|
|
48
|
+
WHERE type = 'table'
|
|
49
|
+
AND name LIKE 'agentic_%'
|
|
50
|
+
ORDER BY name`)
|
|
51
|
+
.all();
|
|
52
|
+
return rows.map((row) => row.name);
|
|
53
|
+
}
|
|
54
|
+
function readRuntimeMigration(migrationId) {
|
|
55
|
+
const migrationUrl = new URL(`../src/database/migrations/${migrationId}.sql`, import.meta.url);
|
|
56
|
+
return readFileSync(migrationUrl, "utf8");
|
|
57
|
+
}
|
|
58
|
+
function hasMigrationTable(db) {
|
|
59
|
+
const row = db
|
|
60
|
+
.prepare(`SELECT name
|
|
61
|
+
FROM sqlite_master
|
|
62
|
+
WHERE type = 'table'
|
|
63
|
+
AND name = 'agentic_schema_migrations'`)
|
|
64
|
+
.get();
|
|
65
|
+
return row !== undefined;
|
|
66
|
+
}
|
|
67
|
+
function hasRuntimeMigration(db, migrationId) {
|
|
68
|
+
if (!hasMigrationTable(db)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const row = db
|
|
72
|
+
.prepare(`SELECT migration_id
|
|
73
|
+
FROM agentic_schema_migrations
|
|
74
|
+
WHERE package_name = ?
|
|
75
|
+
AND migration_id = ?`)
|
|
76
|
+
.get("@soddong/agentic-runtime", migrationId);
|
|
77
|
+
return row !== undefined;
|
|
78
|
+
}
|
|
79
|
+
function applyRuntimeMigration(db, migration) {
|
|
80
|
+
if (hasRuntimeMigration(db, migration.migrationId)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const info = getRuntimeInfo();
|
|
84
|
+
db.exec(readRuntimeMigration(migration.migrationId));
|
|
85
|
+
db.prepare(`INSERT OR IGNORE INTO agentic_schema_migrations
|
|
86
|
+
(package_name, migration_id, checksum_sha256, applied_by_runtime_version, applied_at)
|
|
87
|
+
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)`).run("@soddong/agentic-runtime", migration.migrationId, null, info.version);
|
|
88
|
+
}
|
|
89
|
+
function applyRuntimeMigrations(db) {
|
|
90
|
+
for (const migration of RUNTIME_MIGRATIONS) {
|
|
91
|
+
applyRuntimeMigration(db, migration);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function upsertRuntimeMetadata(db) {
|
|
95
|
+
const info = getRuntimeInfo();
|
|
96
|
+
const upsert = db.prepare(`
|
|
97
|
+
INSERT INTO agentic_runtime_metadata
|
|
98
|
+
(metadata_key, metadata_value, value_type, metadata_description, updated_at)
|
|
99
|
+
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
100
|
+
ON CONFLICT(metadata_key) DO UPDATE SET
|
|
101
|
+
metadata_value = excluded.metadata_value,
|
|
102
|
+
value_type = excluded.value_type,
|
|
103
|
+
metadata_description = excluded.metadata_description,
|
|
104
|
+
updated_at = excluded.updated_at
|
|
105
|
+
`);
|
|
106
|
+
upsert.run("runtime.package", info.name, "string", "runtime package name");
|
|
107
|
+
upsert.run("runtime.version", info.version, "string", "runtime package version");
|
|
108
|
+
upsert.run("runtime.database.schema", RUNTIME_MIGRATIONS[RUNTIME_MIGRATIONS.length - 1]?.schemaVersion ?? "0", "integer", "runtime database schema version");
|
|
109
|
+
}
|
|
110
|
+
export function initializeRuntimeDatabase(projectRoot = process.cwd()) {
|
|
111
|
+
const databasePath = resolveRuntimeDatabasePath(projectRoot);
|
|
112
|
+
const created = !existsSync(databasePath);
|
|
113
|
+
const db = openRuntimeDatabase(projectRoot);
|
|
114
|
+
try {
|
|
115
|
+
return {
|
|
116
|
+
databasePath,
|
|
117
|
+
created,
|
|
118
|
+
tables: listAgenticTables(db)
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
db.close();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export function openRuntimeDatabase(projectRoot = process.cwd()) {
|
|
126
|
+
const databasePath = resolveRuntimeDatabasePath(projectRoot);
|
|
127
|
+
mkdirSync(dirname(databasePath), { recursive: true });
|
|
128
|
+
const db = new Database(databasePath);
|
|
129
|
+
try {
|
|
130
|
+
db.pragma("journal_mode = WAL");
|
|
131
|
+
db.pragma("foreign_keys = ON");
|
|
132
|
+
applyRuntimeMigrations(db);
|
|
133
|
+
upsertRuntimeMetadata(db);
|
|
134
|
+
return db;
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
db.close();
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
export function openRuntimeDatabaseReadOnly(projectRoot = process.cwd()) {
|
|
142
|
+
const databasePath = resolveRuntimeDatabasePath(projectRoot);
|
|
143
|
+
if (!existsSync(databasePath)) {
|
|
144
|
+
throw new Error(`Runtime database does not exist: ${databasePath}`);
|
|
145
|
+
}
|
|
146
|
+
const db = new Database(databasePath, {
|
|
147
|
+
readonly: true,
|
|
148
|
+
fileMustExist: true
|
|
149
|
+
});
|
|
150
|
+
try {
|
|
151
|
+
db.pragma("foreign_keys = ON");
|
|
152
|
+
return {
|
|
153
|
+
databasePath,
|
|
154
|
+
mode: "readonly",
|
|
155
|
+
database: db
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
db.close();
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
export function getRuntimeDatabaseStatus(projectRoot = process.cwd()) {
|
|
164
|
+
const databasePath = resolveRuntimeDatabasePath(projectRoot);
|
|
165
|
+
if (!existsSync(databasePath)) {
|
|
166
|
+
return {
|
|
167
|
+
databasePath,
|
|
168
|
+
exists: false,
|
|
169
|
+
tables: []
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
const db = new Database(databasePath, { readonly: true });
|
|
173
|
+
try {
|
|
174
|
+
return {
|
|
175
|
+
databasePath,
|
|
176
|
+
exists: true,
|
|
177
|
+
tables: listAgenticTables(db)
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
db.close();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export type ExecutionProjectStatusCode = "planned" | "in_progress" | "completed" | "blocked" | "skipped";
|
|
2
|
+
export interface CreateExecutionProjectInput {
|
|
3
|
+
readonly projectCode: string;
|
|
4
|
+
readonly projectName: string;
|
|
5
|
+
readonly bundleCode: string;
|
|
6
|
+
readonly packageName?: string;
|
|
7
|
+
readonly status?: ExecutionProjectStatusCode;
|
|
8
|
+
}
|
|
9
|
+
export interface ExecutionProjectRecord {
|
|
10
|
+
readonly executionProjectId: number;
|
|
11
|
+
readonly projectCode: string;
|
|
12
|
+
readonly projectName: string;
|
|
13
|
+
readonly projectStatusCode: ExecutionProjectStatusCode;
|
|
14
|
+
readonly bundleId: number;
|
|
15
|
+
readonly packageName: string;
|
|
16
|
+
readonly packageVersion: string;
|
|
17
|
+
readonly bundleCode: string;
|
|
18
|
+
readonly bundleVersion: string;
|
|
19
|
+
readonly methodologyCode?: string;
|
|
20
|
+
readonly lifecycleCode?: string;
|
|
21
|
+
readonly phaseCode?: string;
|
|
22
|
+
readonly processCode?: string;
|
|
23
|
+
readonly metadata: unknown;
|
|
24
|
+
readonly createdAt: string;
|
|
25
|
+
readonly updatedAt: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ExecutionProjectStageRecord {
|
|
28
|
+
readonly executionProjectStageId: number;
|
|
29
|
+
readonly executionProjectId: number;
|
|
30
|
+
readonly stageCode: string;
|
|
31
|
+
readonly stageName: string;
|
|
32
|
+
readonly stageStatusCode: ExecutionProjectStatusCode;
|
|
33
|
+
readonly sortOrder: number;
|
|
34
|
+
readonly metadata: unknown;
|
|
35
|
+
readonly createdAt: string;
|
|
36
|
+
readonly updatedAt: string;
|
|
37
|
+
}
|
|
38
|
+
export interface ExecutionProjectActivityRecord {
|
|
39
|
+
readonly executionProjectActivityId: number;
|
|
40
|
+
readonly executionProjectId: number;
|
|
41
|
+
readonly executionProjectStageId: number;
|
|
42
|
+
readonly activityCode: string;
|
|
43
|
+
readonly activityName: string;
|
|
44
|
+
readonly activityStatusCode: ExecutionProjectStatusCode;
|
|
45
|
+
readonly primaryArtifactStandardCode?: string;
|
|
46
|
+
readonly primaryArtifactStandardVersion?: string;
|
|
47
|
+
readonly artifactInstanceId?: string;
|
|
48
|
+
readonly sortOrder: number;
|
|
49
|
+
readonly metadata: unknown;
|
|
50
|
+
readonly createdAt: string;
|
|
51
|
+
readonly updatedAt: string;
|
|
52
|
+
}
|
|
53
|
+
export interface ExecutionProjectStageStatus {
|
|
54
|
+
readonly stage: ExecutionProjectStageRecord;
|
|
55
|
+
readonly activities: readonly ExecutionProjectActivityRecord[];
|
|
56
|
+
readonly activityCount: number;
|
|
57
|
+
readonly completedActivityCount: number;
|
|
58
|
+
}
|
|
59
|
+
export interface ExecutionProjectStatus {
|
|
60
|
+
readonly project: ExecutionProjectRecord;
|
|
61
|
+
readonly stages: readonly ExecutionProjectStageStatus[];
|
|
62
|
+
readonly activityCount: number;
|
|
63
|
+
readonly completedActivityCount: number;
|
|
64
|
+
readonly expectedOutputArtifactCount: number;
|
|
65
|
+
readonly createdArtifactInstanceCount: number;
|
|
66
|
+
}
|
|
67
|
+
export declare function createExecutionProjectFromBundle(input: CreateExecutionProjectInput, projectRoot?: string): Promise<ExecutionProjectStatus>;
|
|
68
|
+
export declare function getExecutionProjectStatus(input: {
|
|
69
|
+
readonly projectCode: string;
|
|
70
|
+
}, projectRoot?: string): ExecutionProjectStatus;
|
|
71
|
+
//# sourceMappingURL=execution-projects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-projects.d.ts","sourceRoot":"","sources":["../src/execution-projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { openRuntimeDatabase } from "./database.js";
|
|
5
|
+
import { listProjectBundles } from "./bundle-registry.js";
|
|
6
|
+
function mapProjectRow(row) {
|
|
7
|
+
return {
|
|
8
|
+
executionProjectId: row.execution_project_id,
|
|
9
|
+
projectCode: row.project_code,
|
|
10
|
+
projectName: row.project_name,
|
|
11
|
+
projectStatusCode: row.project_status_code,
|
|
12
|
+
bundleId: row.bundle_id,
|
|
13
|
+
packageName: row.package_name,
|
|
14
|
+
packageVersion: row.package_version,
|
|
15
|
+
bundleCode: row.bundle_code,
|
|
16
|
+
bundleVersion: row.bundle_version,
|
|
17
|
+
methodologyCode: row.methodology_code ?? undefined,
|
|
18
|
+
lifecycleCode: row.lifecycle_code ?? undefined,
|
|
19
|
+
phaseCode: row.phase_code ?? undefined,
|
|
20
|
+
processCode: row.process_code ?? undefined,
|
|
21
|
+
metadata: JSON.parse(row.metadata_json),
|
|
22
|
+
createdAt: row.created_at,
|
|
23
|
+
updatedAt: row.updated_at
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function mapStageRow(row) {
|
|
27
|
+
return {
|
|
28
|
+
executionProjectStageId: row.execution_project_stage_id,
|
|
29
|
+
executionProjectId: row.execution_project_id,
|
|
30
|
+
stageCode: row.stage_code,
|
|
31
|
+
stageName: row.stage_name,
|
|
32
|
+
stageStatusCode: row.stage_status_code,
|
|
33
|
+
sortOrder: row.sort_order,
|
|
34
|
+
metadata: JSON.parse(row.metadata_json),
|
|
35
|
+
createdAt: row.created_at,
|
|
36
|
+
updatedAt: row.updated_at
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function mapActivityRow(row) {
|
|
40
|
+
return {
|
|
41
|
+
executionProjectActivityId: row.execution_project_activity_id,
|
|
42
|
+
executionProjectId: row.execution_project_id,
|
|
43
|
+
executionProjectStageId: row.execution_project_stage_id,
|
|
44
|
+
activityCode: row.activity_code,
|
|
45
|
+
activityName: row.activity_name,
|
|
46
|
+
activityStatusCode: row.activity_status_code,
|
|
47
|
+
primaryArtifactStandardCode: row.primary_artifact_standard_code ?? undefined,
|
|
48
|
+
primaryArtifactStandardVersion: row.primary_artifact_standard_version ?? undefined,
|
|
49
|
+
artifactInstanceId: row.artifact_instance_id ?? undefined,
|
|
50
|
+
sortOrder: row.sort_order,
|
|
51
|
+
metadata: JSON.parse(row.metadata_json),
|
|
52
|
+
createdAt: row.created_at,
|
|
53
|
+
updatedAt: row.updated_at
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function stringValue(value, key) {
|
|
57
|
+
const raw = value[key];
|
|
58
|
+
return typeof raw === "string" && raw.length > 0 ? raw : undefined;
|
|
59
|
+
}
|
|
60
|
+
function numberValue(value, key) {
|
|
61
|
+
const raw = value[key];
|
|
62
|
+
return typeof raw === "number" && Number.isFinite(raw) ? raw : 0;
|
|
63
|
+
}
|
|
64
|
+
function findInstalledBundle(input, projectRoot) {
|
|
65
|
+
const matches = listProjectBundles(projectRoot).filter((bundle) => {
|
|
66
|
+
return (bundle.bundleCode === input.bundleCode &&
|
|
67
|
+
bundle.enabled &&
|
|
68
|
+
(input.packageName === undefined || bundle.packageName === input.packageName));
|
|
69
|
+
});
|
|
70
|
+
if (matches.length === 0) {
|
|
71
|
+
throw new Error(`Bundle was not installed in this project: ${input.bundleCode}`);
|
|
72
|
+
}
|
|
73
|
+
if (matches.length > 1) {
|
|
74
|
+
throw new Error(`Multiple installed bundles match ${input.bundleCode}. Use --package to disambiguate.`);
|
|
75
|
+
}
|
|
76
|
+
return matches[0];
|
|
77
|
+
}
|
|
78
|
+
function assertBundleApplied(db, bundle) {
|
|
79
|
+
const row = db
|
|
80
|
+
.prepare(`SELECT seed_import_run_id
|
|
81
|
+
FROM agentic_seed_import_runs
|
|
82
|
+
WHERE bundle_id = ?
|
|
83
|
+
AND import_mode = 'apply'
|
|
84
|
+
AND import_status = 'applied'
|
|
85
|
+
ORDER BY seed_import_run_id DESC
|
|
86
|
+
LIMIT 1`)
|
|
87
|
+
.get(bundle.bundleId);
|
|
88
|
+
if (row === undefined) {
|
|
89
|
+
throw new Error(`Bundle seed has not been applied yet: ${bundle.bundleCode}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function loadInstalledBundle(bundle, projectRoot) {
|
|
93
|
+
const projectRequire = createRequire(join(projectRoot, "package.json"));
|
|
94
|
+
const packageMainPath = projectRequire.resolve(bundle.packageName);
|
|
95
|
+
const packageExports = await import(pathToFileURL(packageMainPath).href);
|
|
96
|
+
const loadBundle = packageExports.loadAiAgentSdlcBundle ?? packageExports.loadSeedBundle ?? packageExports.loadBundle;
|
|
97
|
+
if (typeof loadBundle !== "function") {
|
|
98
|
+
throw new Error(`Package does not provide a supported seed bundle loader: ${bundle.packageName}`);
|
|
99
|
+
}
|
|
100
|
+
return await loadBundle(bundle.bundleCode);
|
|
101
|
+
}
|
|
102
|
+
function primaryOutputsByActivity(bundle) {
|
|
103
|
+
const result = new Map();
|
|
104
|
+
for (const requirement of bundle.activityArtifactRequirements ?? []) {
|
|
105
|
+
if (stringValue(requirement, "requirementRoleCode") === "output" &&
|
|
106
|
+
requirement.isPrimary === true) {
|
|
107
|
+
const activityCode = stringValue(requirement, "activityCode");
|
|
108
|
+
if (activityCode !== undefined) {
|
|
109
|
+
result.set(activityCode, requirement);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
function readProjectByCode(db, projectCode) {
|
|
116
|
+
const row = db
|
|
117
|
+
.prepare(`SELECT execution_project_id,
|
|
118
|
+
project_code,
|
|
119
|
+
project_name,
|
|
120
|
+
project_status_code,
|
|
121
|
+
bundle_id,
|
|
122
|
+
package_name,
|
|
123
|
+
package_version,
|
|
124
|
+
bundle_code,
|
|
125
|
+
bundle_version,
|
|
126
|
+
methodology_code,
|
|
127
|
+
lifecycle_code,
|
|
128
|
+
phase_code,
|
|
129
|
+
process_code,
|
|
130
|
+
metadata_json,
|
|
131
|
+
created_at,
|
|
132
|
+
updated_at
|
|
133
|
+
FROM agentic_execution_projects
|
|
134
|
+
WHERE project_code = ?`)
|
|
135
|
+
.get(projectCode);
|
|
136
|
+
return row === undefined ? undefined : mapProjectRow(row);
|
|
137
|
+
}
|
|
138
|
+
function readProjectById(db, executionProjectId) {
|
|
139
|
+
const row = db
|
|
140
|
+
.prepare(`SELECT execution_project_id,
|
|
141
|
+
project_code,
|
|
142
|
+
project_name,
|
|
143
|
+
project_status_code,
|
|
144
|
+
bundle_id,
|
|
145
|
+
package_name,
|
|
146
|
+
package_version,
|
|
147
|
+
bundle_code,
|
|
148
|
+
bundle_version,
|
|
149
|
+
methodology_code,
|
|
150
|
+
lifecycle_code,
|
|
151
|
+
phase_code,
|
|
152
|
+
process_code,
|
|
153
|
+
metadata_json,
|
|
154
|
+
created_at,
|
|
155
|
+
updated_at
|
|
156
|
+
FROM agentic_execution_projects
|
|
157
|
+
WHERE execution_project_id = ?`)
|
|
158
|
+
.get(executionProjectId);
|
|
159
|
+
if (row === undefined) {
|
|
160
|
+
throw new Error(`Execution project was not found: ${executionProjectId}`);
|
|
161
|
+
}
|
|
162
|
+
return mapProjectRow(row);
|
|
163
|
+
}
|
|
164
|
+
function readExecutionProjectStatus(db, projectCode) {
|
|
165
|
+
const project = readProjectByCode(db, projectCode);
|
|
166
|
+
if (project === undefined) {
|
|
167
|
+
throw new Error(`Execution project was not found: ${projectCode}`);
|
|
168
|
+
}
|
|
169
|
+
const stageRows = db.prepare(`SELECT execution_project_stage_id,
|
|
170
|
+
execution_project_id,
|
|
171
|
+
stage_code,
|
|
172
|
+
stage_name,
|
|
173
|
+
stage_status_code,
|
|
174
|
+
sort_order,
|
|
175
|
+
metadata_json,
|
|
176
|
+
created_at,
|
|
177
|
+
updated_at
|
|
178
|
+
FROM agentic_execution_project_stages
|
|
179
|
+
WHERE execution_project_id = ?
|
|
180
|
+
ORDER BY sort_order, execution_project_stage_id`).all(project.executionProjectId);
|
|
181
|
+
const activityRows = db.prepare(`SELECT execution_project_activity_id,
|
|
182
|
+
execution_project_id,
|
|
183
|
+
execution_project_stage_id,
|
|
184
|
+
activity_code,
|
|
185
|
+
activity_name,
|
|
186
|
+
activity_status_code,
|
|
187
|
+
primary_artifact_standard_code,
|
|
188
|
+
primary_artifact_standard_version,
|
|
189
|
+
artifact_instance_id,
|
|
190
|
+
sort_order,
|
|
191
|
+
metadata_json,
|
|
192
|
+
created_at,
|
|
193
|
+
updated_at
|
|
194
|
+
FROM agentic_execution_project_activities
|
|
195
|
+
WHERE execution_project_id = ?
|
|
196
|
+
ORDER BY sort_order, execution_project_activity_id`).all(project.executionProjectId);
|
|
197
|
+
const activities = activityRows.map(mapActivityRow);
|
|
198
|
+
const stages = stageRows.map(mapStageRow).map((stage) => {
|
|
199
|
+
const stageActivities = activities.filter((activity) => {
|
|
200
|
+
return activity.executionProjectStageId === stage.executionProjectStageId;
|
|
201
|
+
});
|
|
202
|
+
return {
|
|
203
|
+
stage,
|
|
204
|
+
activities: stageActivities,
|
|
205
|
+
activityCount: stageActivities.length,
|
|
206
|
+
completedActivityCount: stageActivities.filter((activity) => activity.activityStatusCode === "completed").length
|
|
207
|
+
};
|
|
208
|
+
});
|
|
209
|
+
return {
|
|
210
|
+
project,
|
|
211
|
+
stages,
|
|
212
|
+
activityCount: activities.length,
|
|
213
|
+
completedActivityCount: activities.filter((activity) => activity.activityStatusCode === "completed").length,
|
|
214
|
+
expectedOutputArtifactCount: activities.filter((activity) => activity.primaryArtifactStandardCode !== undefined).length,
|
|
215
|
+
createdArtifactInstanceCount: activities.filter((activity) => activity.artifactInstanceId !== undefined).length
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
export async function createExecutionProjectFromBundle(input, projectRoot = process.cwd()) {
|
|
219
|
+
if (input.projectCode.trim().length === 0) {
|
|
220
|
+
throw new Error("projectCode is required.");
|
|
221
|
+
}
|
|
222
|
+
if (input.projectName.trim().length === 0) {
|
|
223
|
+
throw new Error("projectName is required.");
|
|
224
|
+
}
|
|
225
|
+
const bundle = findInstalledBundle(input, projectRoot);
|
|
226
|
+
const bundleValue = await loadInstalledBundle(bundle, projectRoot);
|
|
227
|
+
const stages = bundleValue.stages ?? [];
|
|
228
|
+
const activities = bundleValue.activities ?? [];
|
|
229
|
+
if (stages.length === 0 || activities.length === 0) {
|
|
230
|
+
throw new Error(`Bundle does not provide stages and activities: ${bundle.bundleCode}`);
|
|
231
|
+
}
|
|
232
|
+
const primaryOutputs = primaryOutputsByActivity(bundleValue);
|
|
233
|
+
const db = openRuntimeDatabase(projectRoot);
|
|
234
|
+
try {
|
|
235
|
+
assertBundleApplied(db, bundle);
|
|
236
|
+
const existing = readProjectByCode(db, input.projectCode);
|
|
237
|
+
if (existing !== undefined) {
|
|
238
|
+
throw new Error(`Execution project already exists: ${input.projectCode}`);
|
|
239
|
+
}
|
|
240
|
+
const transaction = db.transaction(() => {
|
|
241
|
+
const metadata = {
|
|
242
|
+
source: "bundle",
|
|
243
|
+
sampleExecution: bundleValue.sampleExecution ?? null
|
|
244
|
+
};
|
|
245
|
+
const result = db.prepare(`INSERT INTO agentic_execution_projects
|
|
246
|
+
(
|
|
247
|
+
project_code,
|
|
248
|
+
project_name,
|
|
249
|
+
project_status_code,
|
|
250
|
+
bundle_id,
|
|
251
|
+
package_name,
|
|
252
|
+
package_version,
|
|
253
|
+
bundle_code,
|
|
254
|
+
bundle_version,
|
|
255
|
+
methodology_code,
|
|
256
|
+
lifecycle_code,
|
|
257
|
+
phase_code,
|
|
258
|
+
process_code,
|
|
259
|
+
metadata_json,
|
|
260
|
+
created_at,
|
|
261
|
+
updated_at
|
|
262
|
+
)
|
|
263
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`).run(input.projectCode, input.projectName, input.status ?? "planned", bundle.bundleId, bundle.packageName, bundle.packageVersion, bundle.bundleCode, bundle.bundleVersion, bundle.methodologyCode ?? null, bundleValue.manifest?.scope?.lifecycleCode ?? bundleValue.lifecycle?.lifecycleCode ?? null, bundleValue.manifest?.scope?.phaseCode ?? null, bundleValue.manifest?.scope?.processCode ?? null, JSON.stringify(metadata));
|
|
264
|
+
const executionProjectId = Number(result.lastInsertRowid);
|
|
265
|
+
const insertStage = db.prepare(`INSERT INTO agentic_execution_project_stages
|
|
266
|
+
(
|
|
267
|
+
execution_project_id,
|
|
268
|
+
stage_code,
|
|
269
|
+
stage_name,
|
|
270
|
+
stage_status_code,
|
|
271
|
+
sort_order,
|
|
272
|
+
metadata_json,
|
|
273
|
+
created_at,
|
|
274
|
+
updated_at
|
|
275
|
+
)
|
|
276
|
+
VALUES (?, ?, ?, 'planned', ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`);
|
|
277
|
+
const insertActivity = db.prepare(`INSERT INTO agentic_execution_project_activities
|
|
278
|
+
(
|
|
279
|
+
execution_project_id,
|
|
280
|
+
execution_project_stage_id,
|
|
281
|
+
activity_code,
|
|
282
|
+
activity_name,
|
|
283
|
+
activity_status_code,
|
|
284
|
+
primary_artifact_standard_code,
|
|
285
|
+
primary_artifact_standard_version,
|
|
286
|
+
sort_order,
|
|
287
|
+
metadata_json,
|
|
288
|
+
created_at,
|
|
289
|
+
updated_at
|
|
290
|
+
)
|
|
291
|
+
VALUES (?, ?, ?, ?, 'planned', ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`);
|
|
292
|
+
const stageIds = new Map();
|
|
293
|
+
for (const stage of [...stages].sort((a, b) => numberValue(a, "stageOrder") - numberValue(b, "stageOrder"))) {
|
|
294
|
+
const stageCode = stringValue(stage, "stageCode");
|
|
295
|
+
const stageName = stringValue(stage, "stageName");
|
|
296
|
+
if (stageCode === undefined || stageName === undefined) {
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
const stageResult = insertStage.run(executionProjectId, stageCode, stageName, numberValue(stage, "stageOrder"), JSON.stringify({ seed: stage }));
|
|
300
|
+
stageIds.set(stageCode, Number(stageResult.lastInsertRowid));
|
|
301
|
+
}
|
|
302
|
+
for (const activity of [...activities].sort((a, b) => numberValue(a, "sortOrder") - numberValue(b, "sortOrder"))) {
|
|
303
|
+
const activityCode = stringValue(activity, "activityCode");
|
|
304
|
+
const activityName = stringValue(activity, "activityName");
|
|
305
|
+
const stageCode = stringValue(activity, "stageCode");
|
|
306
|
+
if (activityCode === undefined || activityName === undefined || stageCode === undefined) {
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
const stageId = stageIds.get(stageCode);
|
|
310
|
+
if (stageId === undefined) {
|
|
311
|
+
throw new Error(`Activity references a stage that was not found: ${activityCode} -> ${stageCode}`);
|
|
312
|
+
}
|
|
313
|
+
const primaryOutput = primaryOutputs.get(activityCode);
|
|
314
|
+
insertActivity.run(executionProjectId, stageId, activityCode, activityName, stringValue(primaryOutput ?? {}, "artifactStandardCode") ?? null, stringValue(primaryOutput ?? {}, "artifactStandardVersion") ?? null, numberValue(activity, "sortOrder"), JSON.stringify({ seed: activity, primaryOutput: primaryOutput ?? null }));
|
|
315
|
+
}
|
|
316
|
+
return executionProjectId;
|
|
317
|
+
});
|
|
318
|
+
return readExecutionProjectStatus(db, readProjectById(db, transaction()).projectCode);
|
|
319
|
+
}
|
|
320
|
+
finally {
|
|
321
|
+
db.close();
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
export function getExecutionProjectStatus(input, projectRoot = process.cwd()) {
|
|
325
|
+
const db = openRuntimeDatabase(projectRoot);
|
|
326
|
+
try {
|
|
327
|
+
return readExecutionProjectStatus(db, input.projectCode);
|
|
328
|
+
}
|
|
329
|
+
finally {
|
|
330
|
+
db.close();
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=execution-projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-projects.js","sourceRoot":"","sources":["../src/execution-projects.ts"],"names":[],"mappings":"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"}
|