Same canonical content, three thin adapters; FastMCP scaffold with the five gateway tools (layer-1 guard enforced by the lesson schema); M365 spec with assumed minimal DDL, read-only queries, extraction-time anonymization and a review-queue with no auto-merge. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PDKeXvpT6tENSvyQGLV1Uq
65 lines
2.5 KiB
YAML
65 lines
2.5 KiB
YAML
openapi: 3.1.0
|
|
info:
|
|
title: SkillFactor Gateway (HTTP facade for ChatGPT Actions)
|
|
version: "0.1"
|
|
description: >
|
|
Write/read path for Custom-GPT actions. Same handlers as the MCP tools
|
|
(services/skillfactor-mcp). Auth via API key header; no credentials in
|
|
this repo.
|
|
servers:
|
|
- url: https://SKILLFACTOR_GATEWAY_HOST
|
|
paths:
|
|
/actions/profession_context:
|
|
get:
|
|
operationId: getProfessionContext
|
|
summary: Knowledge cascade (community -> org overlay -> project)
|
|
parameters:
|
|
- { name: profession, in: query, required: true, schema: { type: string } }
|
|
- { name: competence, in: query, schema: { type: string } }
|
|
- { name: org, in: query, schema: { type: string } }
|
|
- { name: customer, in: query, schema: { type: string } }
|
|
- { name: project, in: query, schema: { type: string } }
|
|
responses:
|
|
"200": { description: layered context blocks }
|
|
/actions/propose_lesson:
|
|
post:
|
|
operationId: proposeLesson
|
|
summary: Submit a user-confirmed lesson as a pull request (never direct commit)
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required: [layer, profession, competences, title, body_markdown, source]
|
|
properties:
|
|
layer: { type: integer, enum: [1, 2, 3] }
|
|
profession: { type: string }
|
|
competences:
|
|
type: array
|
|
items:
|
|
type: object
|
|
required: [esco_uri]
|
|
properties:
|
|
esco_uri: { type: string }
|
|
onet_soc: { type: string }
|
|
customer: { type: string }
|
|
project: { type: string }
|
|
title: { type: string }
|
|
body_markdown:
|
|
type: string
|
|
description: the FULL text the user confirmed, word for word
|
|
source:
|
|
type: string
|
|
enum: [conversation, m365-mail, m365-chat, m365-transcript, promotion]
|
|
update_of: { type: string }
|
|
responses:
|
|
"201": { description: PR created (link in body) }
|
|
"409": { description: similar lesson found - update proposal returned }
|
|
"422": { description: schema violation (e.g. customer reference in layer 1) }
|
|
components:
|
|
securitySchemes:
|
|
apiKey: { type: apiKey, in: header, name: X-SkillFactor-Token }
|
|
security:
|
|
- apiKey: []
|