Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import { startSdk } from '@start9labs/start-sdk'
|
|
import { sdk } from '../sdk'
|
|
|
|
/**
|
|
* Trigger a review of whatever is currently in the inbox. The running job-runner
|
|
* thread polls for /data/state/run_request and starts a job when it appears, so
|
|
* this action just drops that request file (decoupled from the daemon — no need
|
|
* to reach its HTTP port from the action's one-shot container).
|
|
*/
|
|
export const runReview = sdk.Action.withoutInput(
|
|
'run-review',
|
|
|
|
async ({ effects }) => ({
|
|
name: 'Run Review',
|
|
description: 'Convene the panel now over the documents currently in the inbox.',
|
|
warning: null,
|
|
allowedStatuses: 'only-running',
|
|
group: null,
|
|
visibility: 'enabled',
|
|
}),
|
|
|
|
async ({ effects }) => {
|
|
const mounts = sdk.Mounts.of().mountVolume({
|
|
volumeId: 'main',
|
|
mountpoint: '/data',
|
|
subpath: null,
|
|
readonly: false,
|
|
})
|
|
|
|
let output: string
|
|
try {
|
|
const { stdout } = await startSdk.runCommand<typeof sdk.manifest>(
|
|
effects,
|
|
{ imageId: 'main' },
|
|
[
|
|
'sh',
|
|
'-c',
|
|
'mkdir -p /data/state && date +%s > /data/state/run_request && ' +
|
|
'n=$(ls -1 /data/inbox 2>/dev/null | wc -l | tr -d " "); ' +
|
|
'echo "Review requested. $n file(s) in the inbox."',
|
|
],
|
|
{ mounts, env: { BM_DATA_DIR: '/data' } },
|
|
'run-review',
|
|
)
|
|
output = (stdout?.toString() || '').trim() || 'Review requested.'
|
|
} catch (e: any) {
|
|
output = 'Could not request a review: ' + (e?.message || String(e))
|
|
}
|
|
|
|
return {
|
|
version: '1',
|
|
title: 'Review Requested',
|
|
message:
|
|
output +
|
|
' Watch the Web UI for progress; reports appear there and via "View Latest Report".',
|
|
result: { type: 'single', value: output, copyable: false, qr: false, masked: false },
|
|
}
|
|
},
|
|
)
|