실험 설계서 6장(WP-12)의 AI VM 2층 구현.
- cmd/agent: 하네스 /diagnose 수신 → OpenAI Responses API 함수 호출 루프(읽기 전용 도구 7종:
query_metrics, query_logs, get_probe_status, get_k8s, get_gcp_instances, get_aws_state,
search_runbooks) → strict 스키마 submit_diagnosis(6.3) → 하네스 /proposals 등록 + HITL 게시,
또는 신뢰도 0.5 미만·escalate 시 3층 큐 에스컬레이션. 세션·프롬프트 버전·러너북 벡터는
pgvector(ai 스키마)에 저장. 라벨·조치 enum은 하네스 /scenarios·/actions/catalog에서 갱신.
- cmd/hitl: Discord Gateway 봇(intents GUILDS만). 승인/거부 버튼(custom_id approve:/reject:<token>),
3초 내 DEFERRED_UPDATE_MESSAGE, 승인 시 하네스 승인 → /actions/execute → 원 메시지 편집,
15분 무응답 시 에스컬레이션 채널로 이동. 재기동 시 미결 제안 타이머 복원.
- harness: POST /proposals/{token}/approve, /reject 추가. 제안은 진단 시점에 등록하고 승인은
버튼 시점에 기록해 MTTA(승인-제안)가 실제 대기 시간이 되도록 함.
OpenAI·Discord 토큰은 Secret Manager 파일로만 읽고 코드·저장소에 두지 않는다.
93 lines
4.3 KiB
AMPL
93 lines
4.3 KiB
AMPL
module github.com/selfheal-lab/selfheal-lab-apps/ai
|
|
|
|
go 1.27
|
|
|
|
require (
|
|
github.com/aws/aws-sdk-go-v2 v1.47.1
|
|
github.com/aws/aws-sdk-go-v2/credentials v1.20.7
|
|
github.com/aws/aws-sdk-go-v2/service/ec2 v1.338.2
|
|
github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.63.2
|
|
github.com/aws/aws-sdk-go-v2/service/sts v1.51.2
|
|
github.com/bwmarrin/discordgo v0.29.0
|
|
github.com/google/uuid v1.6.0
|
|
github.com/jackc/pgx/v5 v5.11.0
|
|
github.com/pgvector/pgvector-go v0.4.1
|
|
google.golang.org/api v0.300.0
|
|
k8s.io/apimachinery v0.37.1
|
|
k8s.io/client-go v0.37.1
|
|
)
|
|
|
|
require (
|
|
cloud.google.com/go/auth v0.24.0 // indirect
|
|
cloud.google.com/go/auth/oauth2adapt v0.3.0 // indirect
|
|
cloud.google.com/go/compute/metadata v0.10.0 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.4 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.4 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.4 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.4 // indirect
|
|
github.com/aws/smithy-go v1.28.1 // indirect
|
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
|
github.com/emicklei/go-restful/v3 v3.13.0 // indirect
|
|
github.com/felixge/httpsnoop v1.1.0 // indirect
|
|
github.com/fxamacker/cbor/v2 v2.9.1 // indirect
|
|
github.com/go-logr/logr v1.4.4 // indirect
|
|
github.com/go-logr/stdr v1.2.2 // indirect
|
|
github.com/go-openapi/jsonpointer v1.0.0 // indirect
|
|
github.com/go-openapi/jsonreference v1.0.0 // indirect
|
|
github.com/go-openapi/swag v0.27.1 // indirect
|
|
github.com/go-openapi/swag/cmdutils v0.27.1 // indirect
|
|
github.com/go-openapi/swag/conv v0.27.1 // indirect
|
|
github.com/go-openapi/swag/fileutils v0.27.1 // indirect
|
|
github.com/go-openapi/swag/jsonutils v0.27.1 // indirect
|
|
github.com/go-openapi/swag/loading v0.27.1 // indirect
|
|
github.com/go-openapi/swag/mangling v0.27.1 // indirect
|
|
github.com/go-openapi/swag/netutils v0.27.1 // indirect
|
|
github.com/go-openapi/swag/pools v0.27.1 // indirect
|
|
github.com/go-openapi/swag/stringutils v0.27.1 // indirect
|
|
github.com/go-openapi/swag/typeutils v0.27.1 // indirect
|
|
github.com/go-openapi/swag/yamlutils v0.27.1 // indirect
|
|
github.com/google/gnostic-models v0.7.0 // indirect
|
|
github.com/google/s2a-go v0.1.10 // indirect
|
|
github.com/googleapis/enterprise-certificate-proxy v0.3.22 // indirect
|
|
github.com/googleapis/gax-go/v2 v2.26.2 // indirect
|
|
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect
|
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
|
|
github.com/jackc/puddle/v2 v2.2.2 // indirect
|
|
github.com/json-iterator/go v1.1.12 // indirect
|
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
|
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
|
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
|
github.com/x448/float16 v0.8.4 // indirect
|
|
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
|
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect
|
|
go.opentelemetry.io/otel v1.45.0 // indirect
|
|
go.opentelemetry.io/otel/metric v1.45.0 // indirect
|
|
go.opentelemetry.io/otel/trace v1.45.0 // indirect
|
|
go.yaml.in/yaml/v2 v2.4.4 // indirect
|
|
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
|
golang.org/x/crypto v0.57.0 // indirect
|
|
golang.org/x/net v0.59.0 // indirect
|
|
golang.org/x/oauth2 v0.37.0 // indirect
|
|
golang.org/x/sync v0.23.0 // indirect
|
|
golang.org/x/sys v0.48.0 // indirect
|
|
golang.org/x/term v0.46.0 // indirect
|
|
golang.org/x/text v0.42.0 // indirect
|
|
golang.org/x/time v0.16.0 // indirect
|
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20260921155816-b14227669459 // indirect
|
|
google.golang.org/grpc v1.84.0 // indirect
|
|
google.golang.org/protobuf v1.36.12 // indirect
|
|
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
|
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
|
k8s.io/api v0.37.1 // indirect
|
|
k8s.io/klog/v2 v2.140.0 // indirect
|
|
k8s.io/kube-openapi v0.0.0-20260721132016-d427ff9ee9ad // indirect
|
|
k8s.io/utils v0.0.0-20260626114624-be93311217bd // indirect
|
|
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
|
|
sigs.k8s.io/randfill v1.0.0 // indirect
|
|
sigs.k8s.io/structured-merge-diff/v6 v6.4.2 // indirect
|
|
sigs.k8s.io/yaml v1.6.0 // indirect
|
|
)
|