okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

nekomimi.petfeat: background cells, jobs page, and session list fixesf65a648

main
2.0 KiB73 linesraw
1package daemon
2
3import (
4	"context"
5
6	"albedo/cli/internal/daemon/protocol"
7)
8
9type AgentPhase string
10
11const (
12	PhaseResting     AgentPhase = "resting"
13	PhaseInterrupted AgentPhase = "interrupted"
14	PhasePreparing   AgentPhase = "preparing"
15	PhaseReasoning   AgentPhase = "reasoning"
16	PhaseTool        AgentPhase = "tool"
17	PhaseModel       AgentPhase = "model"
18	PhaseIdle        AgentPhase = "idle"
19	PhaseCompacting  AgentPhase = "compacting"
20)
21
22type AgentStatus struct {
23	Phase                         *AgentPhase
24	RunID                         *string
25	KernelJobs                    *int64
26	KernelBuild, KernelInstanceID *string
27	KernelLink, KernelStep        string
28	RunningJobs                   []protocol.KernelJob
29	InputOrder                    int64
30	Running, Idle, KernelStale    bool
31}
32
33func validateSessionStatus(status protocol.SessionStatus) error {
34	switch status.Phase {
35	case "idle", "preparing", "generating", "running", "interrupting", "compacting":
36		return nil
37	}
38	return fieldError("status.phase")
39}
40func statusValue(status protocol.SessionStatus, kernel protocol.Kernel) AgentStatus {
41	phase := PhaseIdle
42	switch status.Phase {
43	case "preparing":
44		phase = PhasePreparing
45	case "generating":
46		phase = PhaseModel
47	case "running":
48		phase = PhaseTool
49	case "interrupting":
50		phase = PhaseInterrupted
51	case "compacting":
52		phase = PhaseCompacting
53	}
54	return AgentStatus{
55		Phase: &phase, Running: status.Phase != "idle", Idle: status.Phase == "idle",
56		KernelStale: kernel.Stale, KernelLink: kernel.State, KernelStep: value(kernel.Stage),
57		RunID: status.RunID, KernelJobs: kernel.LiveJobCount, RunningJobs: kernel.RunningJobs,
58		KernelBuild: kernel.Build, KernelInstanceID: kernel.InstanceID,
59	}
60}
61func (c *ChatClient) GetStatus(ctx context.Context) (*AgentStatus, error) {
62	session, err := c.GetSession(ctx)
63	if err != nil {
64		return nil, err
65	}
66	status := session.Status
67	status.InputOrder = session.wire.InputOrder
68	return &status, nil
69}
70
71func (c *ChatClient) GetSession(ctx context.Context) (Session, error) {
72	return GetSession(ctx, c.conn, c.agentID)
73}