@shipfox/api-workflows 7.1.0 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +80 -0
  3. package/dist/core/agent-defaults.d.ts +2 -1
  4. package/dist/core/agent-defaults.d.ts.map +1 -1
  5. package/dist/core/agent-defaults.js.map +1 -1
  6. package/dist/core/agent-tools.d.ts +5 -2
  7. package/dist/core/agent-tools.d.ts.map +1 -1
  8. package/dist/core/agent-tools.js.map +1 -1
  9. package/dist/core/checkout.d.ts +2 -2
  10. package/dist/core/checkout.d.ts.map +1 -1
  11. package/dist/core/checkout.js.map +1 -1
  12. package/dist/core/entities/step.d.ts +2 -1
  13. package/dist/core/entities/step.d.ts.map +1 -1
  14. package/dist/core/entities/step.js.map +1 -1
  15. package/dist/core/errors.d.ts +0 -4
  16. package/dist/core/errors.d.ts.map +1 -1
  17. package/dist/core/errors.js +0 -6
  18. package/dist/core/errors.js.map +1 -1
  19. package/dist/core/job-execution.d.ts +0 -2
  20. package/dist/core/job-execution.d.ts.map +1 -1
  21. package/dist/core/job-execution.js +3 -7
  22. package/dist/core/job-execution.js.map +1 -1
  23. package/dist/core/run-workflow.d.ts +2 -2
  24. package/dist/core/run-workflow.d.ts.map +1 -1
  25. package/dist/core/run-workflow.js.map +1 -1
  26. package/dist/core/step-config/agent.d.ts +1 -1
  27. package/dist/core/step-config/agent.d.ts.map +1 -1
  28. package/dist/core/step-config/agent.js.map +1 -1
  29. package/dist/db/job-listeners.d.ts +2 -2
  30. package/dist/db/job-listeners.d.ts.map +1 -1
  31. package/dist/db/job-listeners.js.map +1 -1
  32. package/dist/db/workflow-runs/job-executions.d.ts +0 -5
  33. package/dist/db/workflow-runs/job-executions.d.ts.map +1 -1
  34. package/dist/db/workflow-runs/job-executions.js +0 -7
  35. package/dist/db/workflow-runs/job-executions.js.map +1 -1
  36. package/dist/db/workflow-runs/run-create.d.ts +2 -2
  37. package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
  38. package/dist/db/workflow-runs/run-create.js.map +1 -1
  39. package/dist/db/workflow-runs.d.ts +1 -1
  40. package/dist/db/workflow-runs.d.ts.map +1 -1
  41. package/dist/db/workflow-runs.js +1 -1
  42. package/dist/db/workflow-runs.js.map +1 -1
  43. package/dist/index.d.ts +2 -2
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +2 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/presentation/inter-module.d.ts +2 -2
  48. package/dist/presentation/inter-module.d.ts.map +1 -1
  49. package/dist/presentation/inter-module.js +2 -1
  50. package/dist/presentation/inter-module.js.map +1 -1
  51. package/dist/presentation/routes/cancel-run.d.ts +1 -1
  52. package/dist/presentation/routes/cancel-run.d.ts.map +1 -1
  53. package/dist/presentation/routes/cancel-run.js.map +1 -1
  54. package/dist/presentation/routes/checkout-token.d.ts +2 -2
  55. package/dist/presentation/routes/checkout-token.d.ts.map +1 -1
  56. package/dist/presentation/routes/checkout-token.js +1 -1
  57. package/dist/presentation/routes/checkout-token.js.map +1 -1
  58. package/dist/presentation/routes/get-run-aggregates.d.ts +1 -1
  59. package/dist/presentation/routes/get-run-aggregates.d.ts.map +1 -1
  60. package/dist/presentation/routes/get-run-aggregates.js.map +1 -1
  61. package/dist/presentation/routes/get-run.d.ts +1 -1
  62. package/dist/presentation/routes/get-run.d.ts.map +1 -1
  63. package/dist/presentation/routes/get-run.js.map +1 -1
  64. package/dist/presentation/routes/index.d.ts +2 -2
  65. package/dist/presentation/routes/index.d.ts.map +1 -1
  66. package/dist/presentation/routes/index.js.map +1 -1
  67. package/dist/presentation/routes/list-run-attempts.d.ts +1 -1
  68. package/dist/presentation/routes/list-run-attempts.d.ts.map +1 -1
  69. package/dist/presentation/routes/list-run-attempts.js.map +1 -1
  70. package/dist/presentation/routes/list-runs.d.ts +1 -1
  71. package/dist/presentation/routes/list-runs.d.ts.map +1 -1
  72. package/dist/presentation/routes/list-runs.js.map +1 -1
  73. package/dist/presentation/routes/next-step.d.ts.map +1 -1
  74. package/dist/presentation/routes/next-step.js +11 -8
  75. package/dist/presentation/routes/next-step.js.map +1 -1
  76. package/dist/presentation/routes/project-access.d.ts +1 -1
  77. package/dist/presentation/routes/project-access.d.ts.map +1 -1
  78. package/dist/presentation/routes/project-access.js.map +1 -1
  79. package/dist/presentation/routes/require-accessible-run.d.ts +1 -1
  80. package/dist/presentation/routes/require-accessible-run.d.ts.map +1 -1
  81. package/dist/presentation/routes/require-accessible-run.js.map +1 -1
  82. package/dist/presentation/routes/rerun-run.d.ts +1 -1
  83. package/dist/presentation/routes/rerun-run.d.ts.map +1 -1
  84. package/dist/presentation/routes/rerun-run.js.map +1 -1
  85. package/dist/temporal/activities/index.d.ts +2 -2
  86. package/dist/temporal/activities/index.d.ts.map +1 -1
  87. package/dist/temporal/activities/index.js.map +1 -1
  88. package/dist/temporal/activities/orchestration-activities.d.ts +2 -2
  89. package/dist/temporal/activities/orchestration-activities.d.ts.map +1 -1
  90. package/dist/temporal/activities/orchestration-activities.js.map +1 -1
  91. package/dist/tsconfig.test.tsbuildinfo +1 -1
  92. package/package.json +26 -28
  93. package/src/core/agent-defaults.ts +2 -1
  94. package/src/core/agent-tool-capability-warning.test.ts +26 -56
  95. package/src/core/agent-tools.ts +9 -7
  96. package/src/core/checkout.test.ts +2 -2
  97. package/src/core/checkout.ts +2 -2
  98. package/src/core/entities/step.ts +1 -2
  99. package/src/core/errors.ts +0 -7
  100. package/src/core/job-execution.ts +3 -10
  101. package/src/core/run-workflow.test.ts +22 -55
  102. package/src/core/run-workflow.ts +2 -2
  103. package/src/core/step-config/agent.ts +1 -1
  104. package/src/core/step-config/materialize-job-execution-steps.test.ts +1 -2
  105. package/src/core/step-config/materialize-workflow-model.test.ts +10 -13
  106. package/src/db/job-listeners.ts +2 -2
  107. package/src/db/workflow-runs/job-executions.ts +0 -21
  108. package/src/db/workflow-runs/run-create.test.ts +30 -23
  109. package/src/db/workflow-runs/run-create.ts +2 -2
  110. package/src/db/workflow-runs.ts +0 -1
  111. package/src/index.ts +3 -3
  112. package/src/presentation/dto/checkout-token.test.ts +7 -1
  113. package/src/presentation/inter-module.ts +4 -7
  114. package/src/presentation/routes/agent-runtime-config.test.ts +40 -132
  115. package/src/presentation/routes/cancel-run.test.ts +1 -1
  116. package/src/presentation/routes/cancel-run.ts +1 -1
  117. package/src/presentation/routes/checkout-token.test.ts +4 -37
  118. package/src/presentation/routes/checkout-token.ts +2 -2
  119. package/src/presentation/routes/get-run-aggregates.test.ts +1 -1
  120. package/src/presentation/routes/get-run-aggregates.ts +1 -1
  121. package/src/presentation/routes/get-run.test.ts +1 -1
  122. package/src/presentation/routes/get-run.ts +1 -1
  123. package/src/presentation/routes/get-step-secrets.test.ts +2 -2
  124. package/src/presentation/routes/index.test.ts +3 -3
  125. package/src/presentation/routes/index.ts +2 -2
  126. package/src/presentation/routes/list-run-attempts.test.ts +1 -1
  127. package/src/presentation/routes/list-run-attempts.ts +1 -1
  128. package/src/presentation/routes/list-runs.test.ts +1 -1
  129. package/src/presentation/routes/list-runs.ts +1 -1
  130. package/src/presentation/routes/next-step.test.ts +27 -69
  131. package/src/presentation/routes/next-step.ts +9 -5
  132. package/src/presentation/routes/project-access.ts +1 -1
  133. package/src/presentation/routes/report-step.test.ts +2 -3
  134. package/src/presentation/routes/require-accessible-run.ts +1 -1
  135. package/src/presentation/routes/rerun-run.test.ts +1 -1
  136. package/src/presentation/routes/rerun-run.ts +1 -1
  137. package/src/temporal/activities/index.ts +2 -2
  138. package/src/temporal/activities/orchestration-activities.ts +2 -2
  139. package/test/factories/workflow-model.ts +3 -1
  140. package/test/fixtures/active-lease-token.ts +5 -32
  141. package/test/fixtures/agent-inter-module.ts +32 -1
  142. package/test/fixtures/auth-inter-module.ts +2 -13
  143. package/test/fixtures/lease-token.ts +43 -29
  144. package/test/fixtures/projects-inter-module.ts +1 -1
  145. package/test/fixtures/runners-inter-module.ts +40 -48
  146. package/test/globalSetup.ts +0 -38
  147. package/test/setup.ts +2 -0
  148. package/tsconfig.build.tsbuildinfo +1 -1
  149. package/dist/db/runner-lease-table.d.ts +0 -469
  150. package/dist/db/runner-lease-table.d.ts.map +0 -1
  151. package/dist/db/runner-lease-table.js +0 -43
  152. package/dist/db/runner-lease-table.js.map +0 -1
  153. package/src/db/runner-lease-table.ts +0 -39
@@ -1,52 +1,44 @@
1
- import {runnerToolCapabilitiesSchema} from '@shipfox/api-runners-dto';
2
1
  import type {RunnersInterModuleClient} from '@shipfox/api-runners-dto/inter-module';
3
- import {sql} from 'drizzle-orm';
4
- import {db} from '#db/db.js';
2
+
3
+ const activeLeases = new Set<string>();
4
+ const toolCapabilities = new Map<
5
+ string,
6
+ Awaited<ReturnType<RunnersInterModuleClient['getEffectiveRunnerToolCapabilities']>>
7
+ >();
8
+
9
+ function leaseKey(params: {
10
+ jobId: string;
11
+ jobExecutionId: string;
12
+ runnerSessionId: string;
13
+ }): string {
14
+ return `${params.jobId}:${params.jobExecutionId}:${params.runnerSessionId}`;
15
+ }
16
+
17
+ export function registerActiveRunnerLease(params: {
18
+ jobId: string;
19
+ jobExecutionId: string;
20
+ runnerSessionId: string;
21
+ }): void {
22
+ activeLeases.add(leaseKey(params));
23
+ }
24
+
25
+ export function setRunnerToolCapabilities(
26
+ runnerSessionId: string,
27
+ capabilities: Awaited<ReturnType<RunnersInterModuleClient['getEffectiveRunnerToolCapabilities']>>,
28
+ ): void {
29
+ toolCapabilities.set(runnerSessionId, capabilities);
30
+ }
31
+
32
+ export function resetRunnersTestClient(): void {
33
+ activeLeases.clear();
34
+ toolCapabilities.clear();
35
+ }
5
36
 
6
37
  export const runnersTestClient: RunnersInterModuleClient = {
7
- enqueueJobExecution() {
8
- return Promise.resolve({});
9
- },
10
- releaseJobExecution() {
11
- return Promise.resolve({});
12
- },
13
- cancelJobs() {
14
- return Promise.resolve({});
15
- },
16
- async getLeaseState({jobId, jobExecutionId, runnerSessionId}) {
17
- const result = await db().execute<{active: boolean}>(sql`
18
- SELECT EXISTS(
19
- SELECT 1
20
- FROM runners_running_jobs
21
- WHERE job_id = ${jobId}
22
- AND job_execution_id = ${jobExecutionId}
23
- AND runner_session_id = ${runnerSessionId}
24
- ) AS active
25
- `);
26
- return {active: result.rows[0]?.active ?? false};
27
- },
28
- async getEffectiveRunnerToolCapabilities({runnerSessionId}) {
29
- const result = await db().execute<{
30
- toolCapabilities: unknown;
31
- toolCapabilitiesReportedAt: Date | string | null;
32
- }>(sql`
33
- SELECT
34
- tool_capabilities AS "toolCapabilities",
35
- tool_capabilities_reported_at AS "toolCapabilitiesReportedAt"
36
- FROM runners_runner_sessions
37
- WHERE id = ${runnerSessionId}
38
- `);
39
- const row = result.rows[0];
40
- const reportedAt = row?.toolCapabilitiesReportedAt;
41
- const reportFresh =
42
- reportedAt !== null &&
43
- reportedAt !== undefined &&
44
- Date.now() - new Date(reportedAt).getTime() <= 60_000;
45
- return {
46
- capabilities: reportFresh
47
- ? runnerToolCapabilitiesSchema.parse(row?.toolCapabilities ?? {harnesses: {}})
48
- : {harnesses: {}},
49
- reportFresh,
50
- };
51
- },
38
+ enqueueJobExecution: async () => ({}),
39
+ releaseJobExecution: async () => ({}),
40
+ cancelJobs: async () => ({}),
41
+ getLeaseState: async (params) => ({active: activeLeases.has(leaseKey(params))}),
42
+ getEffectiveRunnerToolCapabilities: async ({runnerSessionId}) =>
43
+ toolCapabilities.get(runnerSessionId) ?? {capabilities: {harnesses: {}}, reportFresh: false},
52
44
  };
@@ -1,8 +1,4 @@
1
1
  import './env.js';
2
- import {annotationsModule} from '@shipfox/annotations';
3
- import {createAgentModule} from '@shipfox/api-agent';
4
- import type {AuthInterModuleClient} from '@shipfox/api-auth-dto/inter-module';
5
- import {createRunnersModule} from '@shipfox/api-runners';
6
2
  import {runMigrations} from '@shipfox/node-drizzle';
7
3
  import {closePostgresClient, createPostgresClient} from '@shipfox/node-postgres';
8
4
  import {sql} from 'drizzle-orm';
@@ -10,44 +6,10 @@ import {closeDb, db, migrationsPath} from '#db/index.js';
10
6
 
11
7
  export async function setup() {
12
8
  createPostgresClient();
13
- const runnersModule = createRunnersModule({auth: {} as AuthInterModuleClient});
14
-
15
- const agentModule = createAgentModule({
16
- secrets: {
17
- deleteSecrets: async () => ({deleted: 0}),
18
- getSecretsByNamespace: async () => ({values: {}}),
19
- setSecrets: async () => ({}),
20
- },
21
- });
22
- if (!agentModule.database || Array.isArray(agentModule.database)) {
23
- throw new Error('Agent module database is not configured');
24
- }
25
- await runMigrations(
26
- agentModule.database.db(),
27
- agentModule.database.migrationsPath,
28
- '__drizzle_migrations_agent',
29
- );
30
- if (!runnersModule.database || Array.isArray(runnersModule.database)) {
31
- throw new Error('Runners module database is not configured');
32
- }
33
- await runMigrations(
34
- runnersModule.database.db(),
35
- runnersModule.database.migrationsPath,
36
- '__drizzle_migrations_runners',
37
- );
38
- if (!annotationsModule.database || Array.isArray(annotationsModule.database)) {
39
- throw new Error('Annotations module database is not configured');
40
- }
41
- await runMigrations(
42
- annotationsModule.database.db(),
43
- annotationsModule.database.migrationsPath,
44
- '__drizzle_migrations_annotations',
45
- );
46
9
  await runMigrations(db(), migrationsPath, '__drizzle_migrations_workflows');
47
10
  await db().execute(sql`TRUNCATE workflows_workflow_runs CASCADE`);
48
11
  await db().execute(sql`TRUNCATE workflows_job_listener_events CASCADE`);
49
12
  await db().execute(sql`TRUNCATE workflows_outbox CASCADE`);
50
- await db().execute(sql`TRUNCATE annotations_annotations CASCADE`);
51
13
 
52
14
  closeDb();
53
15
  await closePostgresClient();
package/test/setup.ts CHANGED
@@ -2,6 +2,7 @@ import './env.js';
2
2
  import {closePostgresClient, createPostgresClient} from '@shipfox/node-postgres';
3
3
  import {afterAll, afterEach, beforeAll, vi} from '@shipfox/vitest/vi';
4
4
  import {closeDb} from '#db/index.js';
5
+ import {resetRunnersTestClient} from '#test/fixtures/runners-inter-module.js';
5
6
 
6
7
  beforeAll(() => {
7
8
  createPostgresClient();
@@ -9,6 +10,7 @@ beforeAll(() => {
9
10
 
10
11
  afterEach(() => {
11
12
  vi.restoreAllMocks();
13
+ resetRunnersTestClient();
12
14
  });
13
15
 
14
16
  afterAll(async () => {