@prover-coder-ai/docker-git 1.0.16 → 1.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/.package.json.release.bak +1 -1
  2. package/CHANGELOG.md +6 -0
  3. package/README.md +5 -6
  4. package/dist/main.js +24 -7
  5. package/dist/main.js.map +1 -1
  6. package/dist/src/docker-git/cli/parser-auth.js +32 -12
  7. package/dist/src/docker-git/cli/parser.js +1 -1
  8. package/dist/src/docker-git/cli/usage.js +4 -3
  9. package/dist/src/docker-git/menu-actions.js +23 -7
  10. package/dist/src/docker-git/menu-auth-data.js +90 -0
  11. package/dist/src/docker-git/menu-auth-helpers.js +20 -0
  12. package/dist/src/docker-git/menu-auth.js +159 -0
  13. package/dist/src/docker-git/menu-buffer-input.js +9 -0
  14. package/dist/src/docker-git/menu-create.js +5 -9
  15. package/dist/src/docker-git/menu-input-handler.js +70 -28
  16. package/dist/src/docker-git/menu-input-utils.js +47 -0
  17. package/dist/src/docker-git/menu-labeled-env.js +33 -0
  18. package/dist/src/docker-git/menu-project-auth-claude.js +43 -0
  19. package/dist/src/docker-git/menu-project-auth-data.js +165 -0
  20. package/dist/src/docker-git/menu-project-auth.js +124 -0
  21. package/dist/src/docker-git/menu-render-auth.js +45 -0
  22. package/dist/src/docker-git/menu-render-common.js +26 -0
  23. package/dist/src/docker-git/menu-render-layout.js +14 -0
  24. package/dist/src/docker-git/menu-render-project-auth.js +37 -0
  25. package/dist/src/docker-git/menu-render-select.js +10 -3
  26. package/dist/src/docker-git/menu-render.js +4 -13
  27. package/dist/src/docker-git/menu-select-actions.js +66 -0
  28. package/dist/src/docker-git/menu-select-view.js +15 -0
  29. package/dist/src/docker-git/menu-select.js +11 -75
  30. package/dist/src/docker-git/menu-shared.js +86 -17
  31. package/dist/src/docker-git/menu-types.js +2 -0
  32. package/dist/src/docker-git/menu.js +13 -1
  33. package/dist/src/docker-git/program.js +3 -3
  34. package/package.json +1 -1
  35. package/src/docker-git/cli/parser-auth.ts +46 -16
  36. package/src/docker-git/cli/parser-mcp-playwright.ts +0 -1
  37. package/src/docker-git/cli/parser.ts +1 -1
  38. package/src/docker-git/cli/usage.ts +4 -3
  39. package/src/docker-git/menu-actions.ts +31 -12
  40. package/src/docker-git/menu-auth-data.ts +184 -0
  41. package/src/docker-git/menu-auth-helpers.ts +30 -0
  42. package/src/docker-git/menu-auth.ts +311 -0
  43. package/src/docker-git/menu-buffer-input.ts +18 -0
  44. package/src/docker-git/menu-create.ts +5 -11
  45. package/src/docker-git/menu-input-handler.ts +104 -28
  46. package/src/docker-git/menu-input-utils.ts +85 -0
  47. package/src/docker-git/menu-labeled-env.ts +37 -0
  48. package/src/docker-git/menu-project-auth-claude.ts +70 -0
  49. package/src/docker-git/menu-project-auth-data.ts +292 -0
  50. package/src/docker-git/menu-project-auth.ts +271 -0
  51. package/src/docker-git/menu-render-auth.ts +65 -0
  52. package/src/docker-git/menu-render-common.ts +67 -0
  53. package/src/docker-git/menu-render-layout.ts +30 -0
  54. package/src/docker-git/menu-render-project-auth.ts +70 -0
  55. package/src/docker-git/menu-render-select.ts +11 -1
  56. package/src/docker-git/menu-render.ts +5 -29
  57. package/src/docker-git/menu-select-actions.ts +150 -0
  58. package/src/docker-git/menu-select-load.ts +1 -1
  59. package/src/docker-git/menu-select-view.ts +25 -0
  60. package/src/docker-git/menu-select.ts +21 -167
  61. package/src/docker-git/menu-shared.ts +135 -20
  62. package/src/docker-git/menu-types.ts +69 -2
  63. package/src/docker-git/menu.ts +26 -1
  64. package/src/docker-git/program.ts +10 -4
  65. package/tests/docker-git/entrypoint-auth.test.ts +1 -1
@@ -40,13 +40,14 @@ export type MenuKeyInput = {
40
40
  readonly downArrow?: boolean
41
41
  readonly return?: boolean
42
42
  readonly escape?: boolean
43
+ readonly backspace?: boolean
44
+ readonly delete?: boolean
43
45
  }
44
46
 
45
47
  export type CreateInputs = {
46
48
  readonly repoUrl: string
47
49
  readonly repoRef: string
48
50
  readonly outDir: string
49
- readonly secretsRoot: string
50
51
  readonly runUp: boolean
51
52
  readonly enableMcpPlaywright: boolean
52
53
  readonly force: boolean
@@ -70,12 +71,76 @@ export const createSteps: ReadonlyArray<CreateStep> = [
70
71
  "force"
71
72
  ]
72
73
 
74
+ export type AuthFlow =
75
+ | "GithubOauth"
76
+ | "GithubRemove"
77
+ | "GitSet"
78
+ | "GitRemove"
79
+ | "ClaudeOauth"
80
+ | "ClaudeLogout"
81
+
82
+ export interface AuthSnapshot {
83
+ readonly globalEnvPath: string
84
+ readonly claudeAuthPath: string
85
+ readonly totalEntries: number
86
+ readonly githubTokenEntries: number
87
+ readonly gitTokenEntries: number
88
+ readonly gitUserEntries: number
89
+ readonly claudeAuthEntries: number
90
+ }
91
+
92
+ export type ProjectAuthFlow =
93
+ | "ProjectGithubConnect"
94
+ | "ProjectGithubDisconnect"
95
+ | "ProjectGitConnect"
96
+ | "ProjectGitDisconnect"
97
+ | "ProjectClaudeConnect"
98
+ | "ProjectClaudeDisconnect"
99
+
100
+ export interface ProjectAuthSnapshot {
101
+ readonly projectDir: string
102
+ readonly projectName: string
103
+ readonly envGlobalPath: string
104
+ readonly envProjectPath: string
105
+ readonly claudeAuthPath: string
106
+ readonly githubTokenEntries: number
107
+ readonly gitTokenEntries: number
108
+ readonly claudeAuthEntries: number
109
+ readonly activeGithubLabel: string | null
110
+ readonly activeGitLabel: string | null
111
+ readonly activeClaudeLabel: string | null
112
+ }
113
+
73
114
  export type ViewState =
74
115
  | { readonly _tag: "Menu" }
75
116
  | { readonly _tag: "Create"; readonly step: number; readonly buffer: string; readonly values: Partial<CreateInputs> }
117
+ | { readonly _tag: "AuthMenu"; readonly selected: number; readonly snapshot: AuthSnapshot }
118
+ | {
119
+ readonly _tag: "AuthPrompt"
120
+ readonly flow: AuthFlow
121
+ readonly step: number
122
+ readonly buffer: string
123
+ readonly values: Readonly<Record<string, string>>
124
+ readonly snapshot: AuthSnapshot
125
+ }
126
+ | {
127
+ readonly _tag: "ProjectAuthMenu"
128
+ readonly selected: number
129
+ readonly project: ProjectItem
130
+ readonly snapshot: ProjectAuthSnapshot
131
+ }
132
+ | {
133
+ readonly _tag: "ProjectAuthPrompt"
134
+ readonly flow: ProjectAuthFlow
135
+ readonly step: number
136
+ readonly buffer: string
137
+ readonly values: Readonly<Record<string, string>>
138
+ readonly project: ProjectItem
139
+ readonly snapshot: ProjectAuthSnapshot
140
+ }
76
141
  | {
77
142
  readonly _tag: "SelectProject"
78
- readonly purpose: "Connect" | "Down" | "Info" | "Delete"
143
+ readonly purpose: "Connect" | "Down" | "Info" | "Delete" | "Auth"
79
144
  readonly items: ReadonlyArray<ProjectItem>
80
145
  readonly runtimeByProject: Readonly<Record<string, SelectProjectRuntime>>
81
146
  readonly selected: number
@@ -93,6 +158,8 @@ export type SelectProjectRuntime = {
93
158
  export const menuItems: ReadonlyArray<{ readonly id: MenuAction; readonly label: string }> = [
94
159
  { id: { _tag: "Create" }, label: "Create project" },
95
160
  { id: { _tag: "Select" }, label: "Select project" },
161
+ { id: { _tag: "Auth" }, label: "Auth profiles (keys)" },
162
+ { id: { _tag: "ProjectAuth" }, label: "Project auth (bind labels)" },
96
163
  { id: { _tag: "Info" }, label: "Show connection info" },
97
164
  { id: { _tag: "Status" }, label: "docker compose ps" },
98
165
  { id: { _tag: "Logs" }, label: "docker compose logs --tail=200" },
@@ -9,7 +9,16 @@ import React, { useEffect, useMemo, useState } from "react"
9
9
 
10
10
  import { resolveCreateInputs } from "./menu-create.js"
11
11
  import { handleUserInput, type InputStage } from "./menu-input-handler.js"
12
- import { renderCreate, renderMenu, renderSelect, renderStepLabel } from "./menu-render.js"
12
+ import {
13
+ renderAuthMenu,
14
+ renderAuthPrompt,
15
+ renderCreate,
16
+ renderMenu,
17
+ renderProjectAuthMenu,
18
+ renderProjectAuthPrompt,
19
+ renderSelect,
20
+ renderStepLabel
21
+ } from "./menu-render.js"
13
22
  import { leaveTui, resumeTui } from "./menu-shared.js"
14
23
  import { defaultMenuStartupSnapshot, resolveMenuStartupSnapshot } from "./menu-startup.js"
15
24
  import { createSteps, type MenuEnv, type MenuState, type ViewState } from "./menu-types.js"
@@ -82,6 +91,22 @@ const renderView = (context: RenderContext) => {
82
91
  return renderCreate(label, context.view.buffer, context.message, context.view.step, currentDefaults)
83
92
  }
84
93
 
94
+ if (context.view._tag === "AuthMenu") {
95
+ return renderAuthMenu(context.view.snapshot, context.view.selected, context.message)
96
+ }
97
+
98
+ if (context.view._tag === "AuthPrompt") {
99
+ return renderAuthPrompt(context.view, context.message)
100
+ }
101
+
102
+ if (context.view._tag === "ProjectAuthMenu") {
103
+ return renderProjectAuthMenu(context.view.snapshot, context.view.selected, context.message)
104
+ }
105
+
106
+ if (context.view._tag === "ProjectAuthPrompt") {
107
+ return renderProjectAuthPrompt(context.view, context.message)
108
+ }
109
+
85
110
  return renderSelect({
86
111
  purpose: context.view.purpose,
87
112
  items: context.view.items,
@@ -1,6 +1,9 @@
1
1
  import type { Command, ParseError } from "@effect-template/lib/core/domain"
2
2
  import { createProject } from "@effect-template/lib/usecases/actions"
3
3
  import {
4
+ authClaudeLogin,
5
+ authClaudeLogout,
6
+ authClaudeStatus,
4
7
  authCodexLogin,
5
8
  authCodexLogout,
6
9
  authCodexStatus,
@@ -85,15 +88,18 @@ const handleNonBaseCommand = (command: NonBaseCommand) =>
85
88
  Match.when({ _tag: "AuthCodexLogin" }, (cmd) => authCodexLogin(cmd)),
86
89
  Match.when({ _tag: "AuthCodexStatus" }, (cmd) => authCodexStatus(cmd)),
87
90
  Match.when({ _tag: "AuthCodexLogout" }, (cmd) => authCodexLogout(cmd)),
91
+ Match.when({ _tag: "AuthClaudeLogin" }, (cmd) => authClaudeLogin(cmd)),
92
+ Match.when({ _tag: "AuthClaudeStatus" }, (cmd) => authClaudeStatus(cmd)),
93
+ Match.when({ _tag: "AuthClaudeLogout" }, (cmd) => authClaudeLogout(cmd)),
88
94
  Match.when({ _tag: "Attach" }, (cmd) => attachTmux(cmd)),
89
95
  Match.when({ _tag: "Panes" }, (cmd) => listTmuxPanes(cmd)),
90
96
  Match.when({ _tag: "SessionsList" }, (cmd) => listTerminalSessions(cmd)),
91
- Match.when({ _tag: "SessionsKill" }, (cmd) => killTerminalProcess(cmd)),
92
- Match.when({ _tag: "SessionsLogs" }, (cmd) => tailTerminalLogs(cmd)),
93
- Match.when({ _tag: "ScrapExport" }, (cmd) => exportScrap(cmd)),
94
- Match.when({ _tag: "ScrapImport" }, (cmd) => importScrap(cmd))
97
+ Match.when({ _tag: "SessionsKill" }, (cmd) => killTerminalProcess(cmd))
95
98
  )
96
99
  .pipe(
100
+ Match.when({ _tag: "SessionsLogs" }, (cmd) => tailTerminalLogs(cmd)),
101
+ Match.when({ _tag: "ScrapExport" }, (cmd) => exportScrap(cmd)),
102
+ Match.when({ _tag: "ScrapImport" }, (cmd) => importScrap(cmd)),
97
103
  Match.when({ _tag: "McpPlaywrightUp" }, (cmd) => mcpPlaywrightUp(cmd)),
98
104
  Match.exhaustive
99
105
  )
@@ -19,7 +19,7 @@ describe("renderEntrypoint auth bridge", () => {
19
19
  expect(entrypoint).toContain("GITHUB_TOKEN=\"${GITHUB_TOKEN:-${GH_TOKEN:-}}\"")
20
20
  expect(entrypoint).toContain("if [[ -n \"$GH_TOKEN\" || -n \"$GITHUB_TOKEN\" ]]; then")
21
21
  expect(entrypoint).toContain(String.raw`printf "export GITHUB_TOKEN=%q\n" "$EFFECTIVE_GITHUB_TOKEN"`)
22
- expect(entrypoint).toContain(String.raw`printf "%s\n" "GITHUB_TOKEN=$EFFECTIVE_GITHUB_TOKEN" >> "$SSH_ENV_PATH"`)
22
+ expect(entrypoint).toContain("docker_git_upsert_ssh_env \"GITHUB_TOKEN\" \"$EFFECTIVE_GITHUB_TOKEN\"")
23
23
  expect(entrypoint).toContain("GIT_CREDENTIAL_HELPER_PATH=\"/usr/local/bin/docker-git-credential-helper\"")
24
24
  expect(entrypoint).toContain("token=\"$GITHUB_TOKEN\"")
25
25
  expect(entrypoint).toContain("token=\"$GH_TOKEN\"")