128 lines
3.5 KiB
YAML
128 lines
3.5 KiB
YAML
openapi: 3.1.0
|
|
info:
|
|
title: AIOS Orchestrator Decision Callback
|
|
version: 1.0.0
|
|
servers:
|
|
- url: https://REPLACE_WITH_ACTIONS_HOST
|
|
paths:
|
|
/v1/orchestrator/decisions:
|
|
post:
|
|
operationId: submit_orchestration_decision
|
|
summary: Submit one strict orchestration decision for a triggered event
|
|
description: >-
|
|
The 18890 Actions API validates the decision strictly and forwards it
|
|
to the loopback Gateway with a callback credential resolved only from
|
|
an approved SecretRef. This operation cannot perform arbitrary GitOps
|
|
mutations.
|
|
security:
|
|
- bearerAuth: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Decision'
|
|
responses:
|
|
'202':
|
|
description: Accepted
|
|
'409':
|
|
description: Contract mismatch or stale state version
|
|
'422':
|
|
description: Schema validation failed
|
|
'401':
|
|
description: Missing or invalid Actions API bearer credential
|
|
'403':
|
|
description: Credential lacks orchestrator:decision scope
|
|
'502':
|
|
description: Metadata-only Gateway forwarding failure
|
|
'503':
|
|
description: SecretRef provider or callback configuration unavailable
|
|
components:
|
|
securitySchemes:
|
|
bearerAuth:
|
|
type: http
|
|
scheme: bearer
|
|
schemas:
|
|
WorkUnit:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- id
|
|
- track_id
|
|
- gate_id
|
|
- primary_agent
|
|
- fallback_agent
|
|
- clean_base_commit
|
|
- allowed_paths
|
|
- required_checks
|
|
- forbidden_operations
|
|
- instruction
|
|
properties:
|
|
id: {type: string}
|
|
track_id: {type: string}
|
|
gate_id: {type: string}
|
|
primary_agent:
|
|
type: string
|
|
enum: [openclaw, codex]
|
|
fallback_agent:
|
|
type: string
|
|
enum: [openclaw, codex]
|
|
clean_base_commit:
|
|
type: string
|
|
pattern: '^[0-9a-f]{40}$'
|
|
allowed_paths:
|
|
type: array
|
|
items: {type: string}
|
|
required_checks:
|
|
type: array
|
|
items: {type: string}
|
|
forbidden_operations:
|
|
type: array
|
|
items: {type: string}
|
|
instruction: {type: string}
|
|
Decision:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- schema_version
|
|
- project_key
|
|
- contract_commit
|
|
- event_id
|
|
- expected_state_version
|
|
- verdict
|
|
- state_updates
|
|
- next_work_units
|
|
- requires_human_input
|
|
- stop_reason
|
|
properties:
|
|
schema_version:
|
|
type: integer
|
|
const: 1
|
|
project_key: {type: string}
|
|
contract_commit:
|
|
type: string
|
|
pattern: '^[0-9a-f]{40}$'
|
|
event_id: {type: string}
|
|
expected_state_version:
|
|
type: integer
|
|
minimum: 0
|
|
verdict:
|
|
type: string
|
|
enum: [DISPATCH, BLOCKED, COMPLETE, NOOP]
|
|
state_updates:
|
|
type: array
|
|
items:
|
|
type: object
|
|
additionalProperties: false
|
|
required: [key, value]
|
|
properties:
|
|
key: {type: string}
|
|
value: {type: string}
|
|
next_work_units:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/WorkUnit'
|
|
requires_human_input: {type: boolean}
|
|
stop_reason:
|
|
type: [string, 'null']
|