{"record":{"id":"381aa08ffdc14077","repo":"chenhg5/cc-connect","slug":"antigravity-initialize-permission-bridge-w","errorCode":null,"errorMessage":"antigravity: initialize permission bridge: %w","messagePattern":"antigravity: initialize permission bridge: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agent/antigravity/session.go","lineNumber":63,"sourceCode":"\tas := &antigravitySession{\n\t\tcmd:       cmd,\n\t\textraArgs: extraArgs,\n\t\tworkDir:   workDir,\n\t\tmodel:     model,\n\t\tmode:      mode,\n\t\ttimeout:   timeout,\n\t\textraEnv:  extraEnv,\n\t\tevents:    make(chan core.Event, 64),\n\t\tctx:       sessionCtx,\n\t\tcancel:    cancel,\n\t}\n\tas.alive.Store(true)\n\n\tif mode == \"default\" {\n\t\tbridge, err := newAgyPermissionBridge(sessionCtx, as.events)\n\t\tif err != nil {\n\t\t\tcancel()\n\t\t\treturn nil, fmt.Errorf(\"antigravity: initialize permission bridge: %w\", err)\n\t\t}\n\t\tas.permissionBridge = bridge\n\t}\n\n\tif resumeID != \"\" && resumeID != core.ContinueSession {\n\t\tas.chatID.Store(resumeID)\n\t}\n\n\treturn as, nil\n}\n\nfunc (as *antigravitySession) Send(prompt string, messageID string, images []core.ImageAttachment, files []core.FileAttachment) error {\n\tif !as.alive.Load() {\n\t\treturn fmt.Errorf(\"session is closed\")\n\t}\n\n\t// Capture existing chat logs so we can identify a new session on first turn\n\tpreEntries := make(map[string]bool)","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/chenhg5/cc-connect/blob/4000b2338aa6e850c99df54f8b0ed6ed7460b401/agent/antigravity/session.go#L45-L81","documentation":"newAntigravitySession wraps any failure from newAgyPermissionBridge when the session mode is \"default\" (the only mode that needs the interactive permission bridge). If the bridge listener cannot be created or started, the session construction is aborted and the context cancelled.","triggerScenarios":"StartSession with mode=default where the bridge cannot bind its listener — e.g. no available local socket, temp dir not writable, or OS refusing socket creation (fd limits, seccomp/containers blocking Unix sockets).","commonSituations":"Running inside restricted Docker containers/sandboxes that disallow Unix domain sockets; hitting the process fd limit; read-only TMPDIR; permission bridge listener path collisions.","solutions":["Read the wrapped cause (%w) for the underlying listener error (bind/permission/fd).","Raise fd limits if 'too many open files' appears: ulimit -n.","Ensure the environment allows Unix/TCP sockets (container seccomp/apparmor profiles) or set a writable TMPDIR.","Use a non-default mode (e.g. yolo/acceptEdits) if interactive permission prompts are not needed."],"exampleFix":"// config.toml\n// before\n[agents.antigravity]\nmode = \"default\"   # fails in sandbox without sockets\n// after (non-interactive environment)\n[agents.antigravity]\nmode = \"yolo\"","handlingStrategy":"fallback","validationCode":"// pre-check in restrictive environments\nif _, err := net.Listen(\"unix\", filepath.Join(os.TempDir(), \"agy-probe.sock\")); err != nil {\n    // sockets unavailable — configure a non-interactive mode\n}","typeGuard":null,"tryCatchPattern":"session, err := StartSession(ctx, opts)\nif err != nil && strings.Contains(err.Error(), \"initialize permission bridge\") {\n    opts.Mode = \"yolo\" // or alert the user that interactive mode is unavailable\n    session, err = StartSession(ctx, opts)\n}","preventionTips":["Ensure container/seccomp profiles allow Unix domain sockets.","Set TMPDIR to a writable path in sandboxes.","Raise fd limits before starting cc-connect.","Use non-interactive modes in headless/CI deployments."],"tags":["go","antigravity","permission-bridge","session-init"],"backgroundTag":"module-init-failed","analyzedSha":"4000b2338aa6e850c99df54f8b0ed6ed7460b401","analyzedAt":"2026-09-06T11:45:09.575Z","contentChangedAt":"2026-09-06T11:45:09.575Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}