Connect LLM segment proposals into HandleTurn, replace U10–U12 dry-run stubs with production owners (blackboard supplement, docgov claim/submit, workflow run/resume) when flags are on, and update policy/sysadmin maturity metadata.
61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
package app
|
|
|
|
import (
|
|
"context"
|
|
"strconv"
|
|
|
|
"chat-agent-system/internal/ctxmgr"
|
|
|
|
"github.com/jackc/pgx/v5"
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
)
|
|
|
|
func projectBlackboardPort(pool *pgxpool.Pool, ctxMgr *ctxmgr.ContextManager) ProjectBlackboardPort {
|
|
return ProjectBlackboardPort{
|
|
CurrentVersion: func(ctx context.Context, projectID int64) (string, error) {
|
|
if pool != nil {
|
|
var version int64
|
|
err := pool.QueryRow(ctx, `
|
|
SELECT COALESCE(version, 0) FROM project_blackboards WHERE project_id = $1
|
|
`, projectID).Scan(&version)
|
|
if err == pgx.ErrNoRows {
|
|
return "0", nil
|
|
}
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return strconv.FormatInt(version, 10), nil
|
|
}
|
|
return "0", nil
|
|
},
|
|
MergeFacts: func(ctx context.Context, projectID int64, facts map[string]string) (string, error) {
|
|
if ctxMgr == nil {
|
|
return "0", nil
|
|
}
|
|
before, _ := projectBlackboardPort(pool, ctxMgr).CurrentVersion(ctx, projectID)
|
|
if err := ctxMgr.UpdateProjectBlackboard(ctx, projectID, facts); err != nil {
|
|
return "", err
|
|
}
|
|
after, err := projectBlackboardPort(pool, ctxMgr).CurrentVersion(ctx, projectID)
|
|
if err != nil {
|
|
return before, nil
|
|
}
|
|
return after, nil
|
|
},
|
|
}
|
|
}
|
|
|
|
func projectNameLookup(pool *pgxpool.Pool) func(context.Context, int64) (string, error) {
|
|
return func(ctx context.Context, projectID int64) (string, error) {
|
|
if pool == nil || projectID <= 0 {
|
|
return "", nil
|
|
}
|
|
var name string
|
|
err := pool.QueryRow(ctx, `SELECT COALESCE(name, '') FROM projects WHERE id = $1`, projectID).Scan(&name)
|
|
if err == pgx.ErrNoRows {
|
|
return "", nil
|
|
}
|
|
return name, err
|
|
}
|
|
}
|