Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit452dbc9

Browse files
committed
backend-2
1 parent4019358 commit452dbc9

File tree

7 files changed

+141
-21
lines changed

7 files changed

+141
-21
lines changed

‎agent/agentcontainers/api.go‎

Lines changed: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,17 @@ type API struct {
7272
configFileModifiedTimesmap[string]time.Time// By config file path.
7373
recreateSuccessTimesmap[string]time.Time// By workspace folder.
7474
recreateErrorTimesmap[string]time.Time// By workspace folder.
75-
injectedSubAgentProcsmap[string]subAgentProcess// Bycontainer ID.
75+
injectedSubAgentProcsmap[string]subAgentProcess// Byworkspace folder.
7676
asyncWg sync.WaitGroup
7777

7878
devcontainerLogSourceIDsmap[string]uuid.UUID// By workspace folder.
7979
}
8080

8181
typesubAgentProcessstruct {
82-
agentSubAgent
83-
ctx context.Context
84-
stop context.CancelFunc
82+
agentSubAgent
83+
containerIDstring
84+
ctx context.Context
85+
stop context.CancelFunc
8586
}
8687

8788
// Option is a functional option for API.
@@ -586,7 +587,11 @@ func (api *API) processUpdatedContainersLocked(ctx context.Context, updated code
586587
dc.Dirty=true
587588
}
588589

589-
if_,injected:=api.injectedSubAgentProcs[dc.Container.ID];!injected&&dc.Status==codersdk.WorkspaceAgentDevcontainerStatusRunning {
590+
proc,injected:=api.injectedSubAgentProcs[dc.WorkspaceFolder]
591+
ifinjected&&proc.containerID!=dc.Container.ID {
592+
injected=false// The container ID changed, we need to re-inject.
593+
}
594+
if!injected&&dc.Status==codersdk.WorkspaceAgentDevcontainerStatusRunning {
590595
err:=api.injectSubAgentIntoContainerLocked(ctx,dc)
591596
iferr!=nil {
592597
logger.Error(ctx,"inject subagent into container failed",slog.Error(err))
@@ -660,10 +665,22 @@ func (api *API) getContainers() (codersdk.WorkspaceAgentListContainersResponse,
660665
iflen(api.knownDevcontainers)>0 {
661666
devcontainers=make([]codersdk.WorkspaceAgentDevcontainer,0,len(api.knownDevcontainers))
662667
for_,dc:=rangeapi.knownDevcontainers {
668+
// Include the agent if it's been created (we're iterating over
669+
// copies, so mutating is fine).
670+
ifdc.Container!=nil {
671+
ifproc:=api.injectedSubAgentProcs[dc.WorkspaceFolder];proc.agent.ID!=uuid.Nil&&proc.containerID==dc.Container.ID {
672+
dc.Agent=&codersdk.WorkspaceAgentDevcontainerAgent{
673+
ID:proc.agent.ID,
674+
Name:proc.agent.Name,
675+
Directory:proc.agent.Directory,
676+
}
677+
}
678+
}
679+
663680
devcontainers=append(devcontainers,dc)
664681
}
665682
slices.SortFunc(devcontainers,func(a,b codersdk.WorkspaceAgentDevcontainer)int {
666-
returnstrings.Compare(a.ID.String(),b.ID.String())
683+
returnstrings.Compare(a.Name,b.Name)
667684
})
668685
}
669686

@@ -975,9 +992,25 @@ func (api *API) injectSubAgentIntoContainerLocked(ctx context.Context, dc coders
975992
returnxerrors.New("container is nil, cannot inject subagent")
976993
}
977994

995+
logger:=api.logger.With(
996+
slog.F("devcontainer_id",dc.ID),
997+
slog.F("devcontainer_name",dc.Name),
998+
slog.F("workspace_folder",dc.WorkspaceFolder),
999+
slog.F("config_path",dc.ConfigPath),
1000+
slog.F("container_id",container.ID),
1001+
slog.F("container_name",container.FriendlyName),
1002+
)
1003+
9781004
// Skip if subagent already exists for this container.
979-
if_,injected:=api.injectedSubAgentProcs[container.ID];injected||api.closed {
980-
returnnil
1005+
ifproc,injected:=api.injectedSubAgentProcs[dc.WorkspaceFolder];injected||api.closed {
1006+
ifproc.containerID==container.ID {
1007+
returnnil
1008+
}
1009+
1010+
// If the subagent is already injected but the container ID has
1011+
// changed, we need to inject it into the new container.
1012+
logger.Debug(ctx,"injecting subagent into new container")
1013+
proc.stop()
9811014
}
9821015

9831016
// Mark subagent as being injected immediately with a placeholder.
@@ -1010,13 +1043,6 @@ func (api *API) injectSubAgentIntoContainerLocked(ctx context.Context, dc coders
10101043
api.mu.Unlock()
10111044
deferapi.mu.Lock()// Re-lock.
10121045

1013-
logger:=api.logger.With(
1014-
slog.F("devcontainer_id",dc.ID),
1015-
slog.F("devcontainer_name",dc.Name),
1016-
slog.F("workspace_folder",dc.WorkspaceFolder),
1017-
slog.F("config_path",dc.ConfigPath),
1018-
)
1019-
10201046
arch,err:=api.ccli.DetectArchitecture(ctx,container.ID)
10211047
iferr!=nil {
10221048
returnxerrors.Errorf("detect architecture: %w",err)
@@ -1176,7 +1202,9 @@ func (api *API) runSubAgentInContainer(ctx context.Context, dc codersdk.Workspac
11761202
}
11771203

11781204
api.mu.Lock()
1179-
delete(api.injectedSubAgentProcs,container.ID)
1205+
ifapi.injectedSubAgentProcs[dc.WorkspaceFolder].containerID==container.ID {
1206+
delete(api.injectedSubAgentProcs,dc.WorkspaceFolder)
1207+
}
11801208
api.mu.Unlock()
11811209

11821210
logger.Debug(ctx,"agent process cleanup complete")
@@ -1191,10 +1219,11 @@ func (api *API) runSubAgentInContainer(ctx context.Context, dc codersdk.Workspac
11911219
return
11921220
}
11931221
// Update the placeholder with a valid subagent, context and stop.
1194-
api.injectedSubAgentProcs[container.ID]=subAgentProcess{
1195-
agent:agent,
1196-
ctx:agentCtx,
1197-
stop:agentStop,
1222+
api.injectedSubAgentProcs[dc.WorkspaceFolder]=subAgentProcess{
1223+
agent:agent,
1224+
containerID:container.ID,
1225+
ctx:agentCtx,
1226+
stop:agentStop,
11981227
}
11991228
api.mu.Unlock()
12001229

@@ -1226,7 +1255,11 @@ func (api *API) Close() error {
12261255
api.closed=true
12271256

12281257
for_,proc:=rangeapi.injectedSubAgentProcs {
1229-
api.logger.Debug(api.ctx,"canceling subagent process",slog.F("agent_name",proc.agent.Name),slog.F("agent_id",proc.agent.ID))
1258+
api.logger.Debug(api.ctx,"canceling subagent process",
1259+
slog.F("agent_name",proc.agent.Name),
1260+
slog.F("agent_id",proc.agent.ID),
1261+
slog.F("container_id",proc.containerID),
1262+
)
12301263
proc.stop()
12311264
}
12321265

‎coderd/apidoc/docs.go‎

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/apidoc/swagger.json‎

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎codersdk/workspaceagents.go‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,15 @@ type WorkspaceAgentDevcontainer struct {
422422
StatusWorkspaceAgentDevcontainerStatus`json:"status"`
423423
Dirtybool`json:"dirty"`
424424
Container*WorkspaceAgentContainer`json:"container,omitempty"`
425+
Agent*WorkspaceAgentDevcontainerAgent`json:"agent,omitempty"`
426+
}
427+
428+
// WorkspaceAgentDevcontainerAgent represents the sub agent for a
429+
// devcontainer.
430+
typeWorkspaceAgentDevcontainerAgentstruct {
431+
ID uuid.UUID`json:"id" format:"uuid"`
432+
Namestring`json:"name"`
433+
Directorystring`json:"directory"`
425434
}
426435

427436
// WorkspaceAgentContainer describes a devcontainer of some sort

‎docs/reference/api/agents.md‎

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎docs/reference/api/schemas.md‎

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎site/src/api/typesGenerated.ts‎

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp