@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.
- package/.package.json.release.bak +1 -1
- package/CHANGELOG.md +6 -0
- package/README.md +5 -6
- package/dist/main.js +24 -7
- package/dist/main.js.map +1 -1
- package/dist/src/docker-git/cli/parser-auth.js +32 -12
- package/dist/src/docker-git/cli/parser.js +1 -1
- package/dist/src/docker-git/cli/usage.js +4 -3
- package/dist/src/docker-git/menu-actions.js +23 -7
- package/dist/src/docker-git/menu-auth-data.js +90 -0
- package/dist/src/docker-git/menu-auth-helpers.js +20 -0
- package/dist/src/docker-git/menu-auth.js +159 -0
- package/dist/src/docker-git/menu-buffer-input.js +9 -0
- package/dist/src/docker-git/menu-create.js +5 -9
- package/dist/src/docker-git/menu-input-handler.js +70 -28
- package/dist/src/docker-git/menu-input-utils.js +47 -0
- package/dist/src/docker-git/menu-labeled-env.js +33 -0
- package/dist/src/docker-git/menu-project-auth-claude.js +43 -0
- package/dist/src/docker-git/menu-project-auth-data.js +165 -0
- package/dist/src/docker-git/menu-project-auth.js +124 -0
- package/dist/src/docker-git/menu-render-auth.js +45 -0
- package/dist/src/docker-git/menu-render-common.js +26 -0
- package/dist/src/docker-git/menu-render-layout.js +14 -0
- package/dist/src/docker-git/menu-render-project-auth.js +37 -0
- package/dist/src/docker-git/menu-render-select.js +10 -3
- package/dist/src/docker-git/menu-render.js +4 -13
- package/dist/src/docker-git/menu-select-actions.js +66 -0
- package/dist/src/docker-git/menu-select-view.js +15 -0
- package/dist/src/docker-git/menu-select.js +11 -75
- package/dist/src/docker-git/menu-shared.js +86 -17
- package/dist/src/docker-git/menu-types.js +2 -0
- package/dist/src/docker-git/menu.js +13 -1
- package/dist/src/docker-git/program.js +3 -3
- package/package.json +1 -1
- package/src/docker-git/cli/parser-auth.ts +46 -16
- package/src/docker-git/cli/parser-mcp-playwright.ts +0 -1
- package/src/docker-git/cli/parser.ts +1 -1
- package/src/docker-git/cli/usage.ts +4 -3
- package/src/docker-git/menu-actions.ts +31 -12
- package/src/docker-git/menu-auth-data.ts +184 -0
- package/src/docker-git/menu-auth-helpers.ts +30 -0
- package/src/docker-git/menu-auth.ts +311 -0
- package/src/docker-git/menu-buffer-input.ts +18 -0
- package/src/docker-git/menu-create.ts +5 -11
- package/src/docker-git/menu-input-handler.ts +104 -28
- package/src/docker-git/menu-input-utils.ts +85 -0
- package/src/docker-git/menu-labeled-env.ts +37 -0
- package/src/docker-git/menu-project-auth-claude.ts +70 -0
- package/src/docker-git/menu-project-auth-data.ts +292 -0
- package/src/docker-git/menu-project-auth.ts +271 -0
- package/src/docker-git/menu-render-auth.ts +65 -0
- package/src/docker-git/menu-render-common.ts +67 -0
- package/src/docker-git/menu-render-layout.ts +30 -0
- package/src/docker-git/menu-render-project-auth.ts +70 -0
- package/src/docker-git/menu-render-select.ts +11 -1
- package/src/docker-git/menu-render.ts +5 -29
- package/src/docker-git/menu-select-actions.ts +150 -0
- package/src/docker-git/menu-select-load.ts +1 -1
- package/src/docker-git/menu-select-view.ts +25 -0
- package/src/docker-git/menu-select.ts +21 -167
- package/src/docker-git/menu-shared.ts +135 -20
- package/src/docker-git/menu-types.ts +69 -2
- package/src/docker-git/menu.ts +26 -1
- package/src/docker-git/program.ts +10 -4
- 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" },
|
package/src/docker-git/menu.ts
CHANGED
|
@@ -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 {
|
|
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(
|
|
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\"")
|