MCPcopy Create free account
hub / github.com/compozy/agh / Resolve

Method Resolve

internal/workspace/resolver.go:86–150  ·  view source on GitHub ↗

Resolve loads and caches the effective runtime snapshot for a workspace.

(ctx context.Context, idOrNameOrPath string)

Source from the content-addressed store, hash-verified

84
85// Resolve loads and caches the effective runtime snapshot for a workspace.
86func (r *Resolver) Resolve(ctx context.Context, idOrNameOrPath string) (resolved ResolvedWorkspace, err error) {
87 start := r.now()
88 cacheHit := false
89 workspaceID := ""
90 defer r.observeResolve(start, &workspaceID, &cacheHit, &resolved, &err)
91
92 if err := checkContext(ctx); err != nil {
93 return ResolvedWorkspace{}, err
94 }
95
96 ws, err := r.lookupWorkspace(ctx, idOrNameOrPath)
97 if err != nil {
98 return ResolvedWorkspace{}, err
99 }
100 workspaceID = ws.ID
101
102 ws, err = r.refreshRootDir(ctx, ws)
103 if err != nil {
104 return ResolvedWorkspace{}, err
105 }
106 workspaceID = ws.ID
107 identity, err := ensureIdentity(ctx, ws.RootDir, r.now, NewWorkspaceID)
108 if err != nil {
109 return ResolvedWorkspace{}, err
110 }
111 workspaceID = identity.WorkspaceID
112
113 scan, err := r.scanWorkspace(ctx, ws)
114 if err != nil {
115 return ResolvedWorkspace{}, err
116 }
117
118 now := r.now()
119
120 r.mu.Lock()
121 r.evictExpiredLocked(now)
122 if cached := r.cache[ws.ID]; cached != nil && cached.canReuse(ws, scan.snapshots) {
123 cached.lastAccess = now
124 cacheHit = true
125 resolved = cloneResolvedWorkspace(&cached.resolved)
126 resolved.Workspace = cloneWorkspace(ws)
127 resolved.WorkspaceID = identity.WorkspaceID
128 r.mu.Unlock()
129 return resolved, nil
130 }
131 r.mu.Unlock()
132
133 resolved, err = r.buildResolvedWorkspace(ctx, ws, scan)
134 if err != nil {
135 return ResolvedWorkspace{}, err
136 }
137 resolved.WorkspaceID = identity.WorkspaceID
138
139 r.mu.Lock()
140 r.evictExpiredLocked(now)
141 r.cache[ws.ID] = &cachedEntry{
142 workspace: cloneWorkspace(ws),
143 resolved: cloneResolvedWorkspace(&resolved),

Callers 3

RegisterMethod · 0.95
ResolveOrRegisterMethod · 0.95

Calls 13

observeResolveMethod · 0.95
lookupWorkspaceMethod · 0.95
refreshRootDirMethod · 0.95
scanWorkspaceMethod · 0.95
evictExpiredLockedMethod · 0.95
ensureIdentityFunction · 0.85
cloneResolvedWorkspaceFunction · 0.85
cloneWorkspaceFunction · 0.85
cloneSnapshotsFunction · 0.85
canReuseMethod · 0.80
checkContextFunction · 0.70

Tested by 1