@@ -48,6 +48,9 @@ const (
4848 screenCWLogGroupList
4949 screenCWLogStreamList
5050 screenCWLogViewer
51+ screenS3BucketList
52+ screenS3ObjectList
53+ screenS3ObjectDetail
5154 screenContextPicker
5255 screenContextAdd
5356 screenLoading
@@ -198,6 +201,22 @@ type Model struct {
198201 cwLogTailing bool // live tail active
199202 cwLogTailToken * string
200203
204+ // S3 browser state
205+ s3Buckets []awsservice.S3Bucket
206+ filteredS3Buckets []awsservice.S3Bucket
207+ s3BucketIdx int
208+ s3BucketFilter string
209+ s3BucketFilterActive bool
210+ selectedS3Bucket * awsservice.S3Bucket
211+ s3Objects []awsservice.S3Object
212+ filteredS3Objects []awsservice.S3Object
213+ s3ObjectIdx int
214+ s3ObjectFilter string
215+ s3ObjectFilterActive bool
216+ s3CurrentPrefix string
217+ s3PrefixStack []string
218+ selectedS3Object * awsservice.S3ObjectDetail
219+
201220 // Context picker
202221 configPath string
203222 ctxList []config.ContextInfo
@@ -310,6 +329,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
310329 m .handleIAMMsg ,
311330 m .handleSecretMsg ,
312331 m .handleCloudWatchLogsMsg ,
332+ m .handleS3Msg ,
313333 m .handleContextMsg ,
314334 } {
315335 if newM , cmd , handled := h (msg ); handled {
@@ -378,6 +398,12 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
378398 return m .updateCWLogStreamList (msg )
379399 case screenCWLogViewer :
380400 return m .updateCWLogViewer (msg )
401+ case screenS3BucketList :
402+ return m .updateS3BucketList (msg )
403+ case screenS3ObjectList :
404+ return m .updateS3ObjectList (msg )
405+ case screenS3ObjectDetail :
406+ return m .updateS3ObjectDetail (msg )
381407 case screenSecurityGroupList :
382408 return m .updateSecurityGroupList (msg )
383409 case screenSecurityGroupDetail :
@@ -487,6 +513,9 @@ func (m Model) updateFeatureList(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
487513 case domain .FeatureCloudWatchLogsBrowser :
488514 m .screen = screenLoading
489515 return m , m .loadCWLogGroups ()
516+ case domain .FeatureS3Browser :
517+ m .screen = screenLoading
518+ return m , m .loadS3Buckets ()
490519 case domain .FeatureSecurityGroupBrowser :
491520 m .screen = screenLoading
492521 return m , m .loadSecurityGroups ()
@@ -566,6 +595,12 @@ func (m Model) View() string {
566595 v = m .viewCWLogStreamList ()
567596 case screenCWLogViewer :
568597 v = m .viewCWLogViewer ()
598+ case screenS3BucketList :
599+ v = m .viewS3BucketList ()
600+ case screenS3ObjectList :
601+ v = m .viewS3ObjectList ()
602+ case screenS3ObjectDetail :
603+ v = m .viewS3ObjectDetail ()
569604 case screenSecurityGroupList :
570605 v = m .viewSecurityGroupList ()
571606 case screenSecurityGroupDetail :
0 commit comments