nomoreide 0.1.98 → 0.1.100

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 (158) hide show
  1. package/README.md +26 -1
  2. package/dist/cli/git.js +5 -1
  3. package/dist/cli/git.js.map +1 -1
  4. package/dist/cli/profile.js +1 -1
  5. package/dist/cli/profile.js.map +1 -1
  6. package/dist/core/agent-profiles/index.d.ts +1 -1
  7. package/dist/core/agent-profiles/index.js +1 -1
  8. package/dist/core/agent-profiles/index.js.map +1 -1
  9. package/dist/core/agent-profiles/registry-client.d.ts +2 -1
  10. package/dist/core/agent-profiles/registry-client.js.map +1 -1
  11. package/dist/core/agent-profiles/registry-config.d.ts +16 -2
  12. package/dist/core/agent-profiles/registry-config.js +76 -22
  13. package/dist/core/agent-profiles/registry-config.js.map +1 -1
  14. package/dist/core/agent-profiles/registry-transfer.js +15 -1
  15. package/dist/core/agent-profiles/registry-transfer.js.map +1 -1
  16. package/dist/core/agent-profiles/store.d.ts +10 -0
  17. package/dist/core/agent-profiles/store.js +47 -1
  18. package/dist/core/agent-profiles/store.js.map +1 -1
  19. package/dist/core/agent-profiles/transfer.js +28 -5
  20. package/dist/core/agent-profiles/transfer.js.map +1 -1
  21. package/dist/core/agent-terminal.d.ts +3 -1
  22. package/dist/core/agent-terminal.js +24 -5
  23. package/dist/core/agent-terminal.js.map +1 -1
  24. package/dist/core/agent-transcripts.js +36 -3
  25. package/dist/core/agent-transcripts.js.map +1 -1
  26. package/dist/core/app-settings.d.ts +6 -0
  27. package/dist/core/app-settings.js +6 -0
  28. package/dist/core/app-settings.js.map +1 -1
  29. package/dist/core/config-store.d.ts +35 -1
  30. package/dist/core/config-store.js +173 -0
  31. package/dist/core/config-store.js.map +1 -1
  32. package/dist/core/db/data-masking.d.ts +3 -0
  33. package/dist/core/db/data-masking.js +14 -0
  34. package/dist/core/db/data-masking.js.map +1 -0
  35. package/dist/core/db/driver.d.ts +29 -1
  36. package/dist/core/db/driver.js +94 -0
  37. package/dist/core/db/driver.js.map +1 -1
  38. package/dist/core/db/export.d.ts +17 -0
  39. package/dist/core/db/export.js +67 -0
  40. package/dist/core/db/export.js.map +1 -0
  41. package/dist/core/db/mysql-driver.d.ts +3 -2
  42. package/dist/core/db/mysql-driver.js +53 -3
  43. package/dist/core/db/mysql-driver.js.map +1 -1
  44. package/dist/core/db/postgres-driver.d.ts +3 -2
  45. package/dist/core/db/postgres-driver.js +41 -3
  46. package/dist/core/db/postgres-driver.js.map +1 -1
  47. package/dist/core/db/sqlite-driver.d.ts +3 -2
  48. package/dist/core/db/sqlite-driver.js +38 -4
  49. package/dist/core/db/sqlite-driver.js.map +1 -1
  50. package/dist/core/db-peek.d.ts +9 -2
  51. package/dist/core/db-peek.js +20 -10
  52. package/dist/core/db-peek.js.map +1 -1
  53. package/dist/core/git-actions.d.ts +19 -0
  54. package/dist/core/git-actions.js +36 -4
  55. package/dist/core/git-actions.js.map +1 -1
  56. package/dist/core/git-identity.d.ts +78 -0
  57. package/dist/core/git-identity.js +178 -0
  58. package/dist/core/git-identity.js.map +1 -0
  59. package/dist/core/git-manager.d.ts +9 -1
  60. package/dist/core/git-manager.js +10 -3
  61. package/dist/core/git-manager.js.map +1 -1
  62. package/dist/core/github-context.js +1 -29
  63. package/dist/core/github-context.js.map +1 -1
  64. package/dist/core/github-manager.d.ts +6 -0
  65. package/dist/core/github-manager.js.map +1 -1
  66. package/dist/core/process-manager.d.ts +14 -0
  67. package/dist/core/process-manager.js +49 -19
  68. package/dist/core/process-manager.js.map +1 -1
  69. package/dist/core/project-overview.d.ts +52 -0
  70. package/dist/core/project-overview.js +122 -0
  71. package/dist/core/project-overview.js.map +1 -0
  72. package/dist/core/repo-match.d.ts +12 -0
  73. package/dist/core/repo-match.js +40 -0
  74. package/dist/core/repo-match.js.map +1 -0
  75. package/dist/core/repo-onboard.d.ts +4 -4
  76. package/dist/core/service-detect.d.ts +19 -0
  77. package/dist/core/service-detect.js +141 -0
  78. package/dist/core/service-detect.js.map +1 -0
  79. package/dist/core/ssh-servers.d.ts +52 -0
  80. package/dist/core/ssh-servers.js +194 -0
  81. package/dist/core/ssh-servers.js.map +1 -0
  82. package/dist/core/terminal-session.d.ts +8 -0
  83. package/dist/core/terminal-session.js +20 -0
  84. package/dist/core/terminal-session.js.map +1 -1
  85. package/dist/core/types.d.ts +62 -0
  86. package/dist/core/vercel-actions.d.ts +71 -0
  87. package/dist/core/vercel-actions.js +109 -0
  88. package/dist/core/vercel-actions.js.map +1 -0
  89. package/dist/core/vercel-auth.d.ts +58 -0
  90. package/dist/core/vercel-auth.js +130 -0
  91. package/dist/core/vercel-auth.js.map +1 -0
  92. package/dist/core/vercel-context.d.ts +25 -0
  93. package/dist/core/vercel-context.js +143 -0
  94. package/dist/core/vercel-context.js.map +1 -0
  95. package/dist/core/vercel-manager.d.ts +253 -0
  96. package/dist/core/vercel-manager.js +391 -0
  97. package/dist/core/vercel-manager.js.map +1 -0
  98. package/dist/core/vercel-oauth.d.ts +75 -0
  99. package/dist/core/vercel-oauth.js +223 -0
  100. package/dist/core/vercel-oauth.js.map +1 -0
  101. package/dist/index.js +0 -0
  102. package/dist/mcp/tools/agent-registry.d.ts +2 -2
  103. package/dist/mcp/tools/agent-registry.js +3 -3
  104. package/dist/mcp/tools/agent-registry.js.map +1 -1
  105. package/dist/mcp/tools/docs.d.ts +1 -1
  106. package/dist/mcp/tools/docs.js +20 -8
  107. package/dist/mcp/tools/docs.js.map +1 -1
  108. package/dist/mcp/tools/git.js +20 -2
  109. package/dist/mcp/tools/git.js.map +1 -1
  110. package/dist/mcp/tools/index.d.ts +1 -1
  111. package/dist/mcp/tools/index.js +3 -0
  112. package/dist/mcp/tools/index.js.map +1 -1
  113. package/dist/mcp/tools/vercel.d.ts +12 -0
  114. package/dist/mcp/tools/vercel.js +103 -0
  115. package/dist/mcp/tools/vercel.js.map +1 -0
  116. package/dist/mcp/tools.d.ts +19 -0
  117. package/dist/mcp/tools.js +354 -0
  118. package/dist/mcp/tools.js.map +1 -0
  119. package/dist/web/client/assets/code-editor-DFOGG6ys.js +30 -0
  120. package/dist/web/client/assets/index-BG_E_64s.css +1 -0
  121. package/dist/web/client/assets/index-BhDAhmA1.js +1 -0
  122. package/dist/web/client/assets/index-CYgm7PZW.js +346 -0
  123. package/dist/web/client/assets/{system-process-table-yI0XrfjG.js → system-process-table-B9uNpXW9.js} +1 -1
  124. package/dist/web/client/index.html +2 -2
  125. package/dist/web/routes/agent-chat-routes.js +29 -0
  126. package/dist/web/routes/agent-chat-routes.js.map +1 -1
  127. package/dist/web/routes/agent-profile-routes.js +14 -2
  128. package/dist/web/routes/agent-profile-routes.js.map +1 -1
  129. package/dist/web/routes/database-routes.js +108 -1
  130. package/dist/web/routes/database-routes.js.map +1 -1
  131. package/dist/web/routes/git-routes.js +37 -7
  132. package/dist/web/routes/git-routes.js.map +1 -1
  133. package/dist/web/routes/index.js +6 -0
  134. package/dist/web/routes/index.js.map +1 -1
  135. package/dist/web/routes/overview-routes.d.ts +2 -0
  136. package/dist/web/routes/overview-routes.js +36 -0
  137. package/dist/web/routes/overview-routes.js.map +1 -0
  138. package/dist/web/routes/shell-routes.d.ts +8 -0
  139. package/dist/web/routes/shell-routes.js +10 -2
  140. package/dist/web/routes/shell-routes.js.map +1 -1
  141. package/dist/web/routes/ssh-server-routes.d.ts +3 -0
  142. package/dist/web/routes/ssh-server-routes.js +101 -0
  143. package/dist/web/routes/ssh-server-routes.js.map +1 -0
  144. package/dist/web/routes/terminal-routes.js +18 -4
  145. package/dist/web/routes/terminal-routes.js.map +1 -1
  146. package/dist/web/routes/vercel-routes.d.ts +2 -0
  147. package/dist/web/routes/vercel-routes.js +476 -0
  148. package/dist/web/routes/vercel-routes.js.map +1 -0
  149. package/dist/web/server.d.ts +8 -0
  150. package/dist/web/server.js +25 -7
  151. package/dist/web/server.js.map +1 -1
  152. package/dist/web/ui-lifecycle.d.ts +30 -0
  153. package/dist/web/ui-lifecycle.js +129 -0
  154. package/dist/web/ui-lifecycle.js.map +1 -0
  155. package/package.json +4 -1
  156. package/dist/web/client/assets/code-editor-C9zfB-Qp.js +0 -28
  157. package/dist/web/client/assets/index-BW5OtB6c.js +0 -308
  158. package/dist/web/client/assets/index-DofkHtdO.css +0 -1
@@ -1,5 +1,6 @@
1
1
  import { join } from "node:path";
2
2
  import { readEnvFile, entriesFromLines } from "./env-file.js";
3
+ import { maskDatabaseRows } from "./db/data-masking.js";
3
4
  import { resolveCatalogObject, tableRefForObject, } from "./db/catalog.js";
4
5
  import { MysqlDriver } from "./db/mysql-driver.js";
5
6
  import { PostgresDriver } from "./db/postgres-driver.js";
@@ -46,18 +47,18 @@ export class DbPeek {
46
47
  const object = await this.resolveObject(driver, key);
47
48
  return driver.describeObject(object);
48
49
  }
49
- async sampleObject(name, key, limit, offset = 0) {
50
+ async sampleObject(name, key, limit, offset = 0, query) {
50
51
  const connection = await this.resolve(name);
51
52
  const driver = await this.driverFor(connection);
52
53
  const object = await this.resolveObject(driver, key);
53
54
  const table = tableRefForObject(object);
54
- const sample = await driver.sampleRows(table, limit, offset);
55
+ const sample = await driver.sampleRows(table, limit, offset, query);
55
56
  return {
56
57
  engine: connection.engine,
57
58
  object,
58
59
  table,
59
60
  ...sample,
60
- rows: maskAutomaticPreviewRows(sample.rows),
61
+ rows: maskDatabaseRows(sample.rows),
61
62
  };
62
63
  }
63
64
  async sampleRows(name, qualifiedName, limit, offset = 0) {
@@ -67,6 +68,22 @@ export class DbPeek {
67
68
  const sample = await driver.sampleRows(table, limit, offset);
68
69
  return { engine: connection.engine, table, ...sample };
69
70
  }
71
+ async exportObjectSource(name, key, options = {}) {
72
+ const connection = await this.resolve(name);
73
+ const driver = await this.driverFor(connection);
74
+ const object = await this.resolveObject(driver, key);
75
+ if (!["table", "view", "materializedView"].includes(object.kind)) {
76
+ throw new Error("This database object cannot be exported.");
77
+ }
78
+ const table = tableRefForObject(object);
79
+ const columns = (await driver.describeObject(object)).columns;
80
+ return {
81
+ engine: connection.engine,
82
+ object,
83
+ columns,
84
+ rows: driver.streamRows(table, columns, options),
85
+ };
86
+ }
70
87
  /** Run a user-authored read-only query against a registered connection. */
71
88
  async runQuery(name, sql, maxRows = 100) {
72
89
  const connection = await this.resolve(name);
@@ -208,13 +225,6 @@ export class DbPeek {
208
225
  return resolveCatalogObject([], key);
209
226
  }
210
227
  }
211
- const SENSITIVE_PREVIEW_COLUMN = /(^|_)(password|passwd|pwd|secret|token|api_?key|access_?key|private_?key|credential|authorization|cookie)(_|$)/i;
212
- function maskAutomaticPreviewRows(rows) {
213
- return rows.map((row) => Object.fromEntries(Object.entries(row).map(([column, value]) => [
214
- column,
215
- SENSITIVE_PREVIEW_COLUMN.test(column) && value !== null ? "••••" : value,
216
- ])));
217
- }
218
228
  function createDriver(engine, url) {
219
229
  switch (engine) {
220
230
  case "postgres":
@@ -1 +1 @@
1
- {"version":3,"file":"db-peek.js","sourceRoot":"","sources":["../../src/core/db-peek.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-peek.js","sourceRoot":"","sources":["../../src/core/db-peek.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,16 @@ export interface CheckoutDefaultAndPullResult {
10
10
  output: string;
11
11
  branch: string;
12
12
  }
13
+ /**
14
+ * Credential for a single push. The token travels through the environment into
15
+ * a throwaway credential helper, so it never appears in `argv` (visible to any
16
+ * process listing) and never gets written to the repository's config.
17
+ */
18
+ export interface PushCredential {
19
+ token: string;
20
+ /** GitHub ignores the username for token auth; the conventional value is used. */
21
+ username?: string;
22
+ }
13
23
  /**
14
24
  * Write-capable Git operations, kept deliberately separate from the read-safe
15
25
  * {@link GitManager}. These reach outward (push) or move refs, so they live in
@@ -29,6 +39,7 @@ export declare class GitActions {
29
39
  */
30
40
  push(options?: {
31
41
  remote?: string;
42
+ credential?: PushCredential;
32
43
  }): Promise<PushResult>;
33
44
  /** Fast-forward the current branch from its configured upstream. */
34
45
  pull(): Promise<string>;
@@ -48,3 +59,11 @@ export declare class GitActions {
48
59
  private assertCleanWorkingTree;
49
60
  private git;
50
61
  }
62
+ /** Exported so tests can drive `git credential fill` through the real helper. */
63
+ export declare function credentialConfigArgs(): string[];
64
+ /**
65
+ * Push output and git's error text are surfaced verbatim in the UI and written
66
+ * to the timeline, so scrub the token on the way out even though the helper
67
+ * keeps it off the command line.
68
+ */
69
+ export declare function redact(text: string, secret: string | undefined): string;
@@ -1,6 +1,15 @@
1
1
  import { execFile } from "node:child_process";
2
2
  import { promisify } from "node:util";
3
3
  const execFileAsync = promisify(execFile);
4
+ /**
5
+ * A credential helper that echoes the two values git asks for and nothing else.
6
+ * The empty `credential.helper=` that precedes it resets the inherited helper
7
+ * chain, so the machine's keychain cannot answer first and quietly push as the
8
+ * account the user did not select.
9
+ */
10
+ // The `$NAME` reads are expanded by the helper's own shell, not by JavaScript —
11
+ // interpolating them here would put the token in `argv`, which is what this avoids.
12
+ const CREDENTIAL_HELPER = '!f() { echo "username=$NOMOREIDE_GIT_USERNAME"; echo "password=$NOMOREIDE_GIT_PASSWORD"; }; f';
4
13
  /**
5
14
  * Write-capable Git operations, kept deliberately separate from the read-safe
6
15
  * {@link GitManager}. These reach outward (push) or move refs, so they live in
@@ -36,7 +45,14 @@ export class GitActions {
36
45
  const args = setUpstream
37
46
  ? ["push", "--set-upstream", remote, branch]
38
47
  : ["push"];
39
- return { output: await this.git(args), branch, setUpstream };
48
+ const credential = options.credential;
49
+ const output = await this.git(credential ? [...credentialConfigArgs(), ...args] : args, credential
50
+ ? {
51
+ NOMOREIDE_GIT_USERNAME: credential.username ?? "x-access-token",
52
+ NOMOREIDE_GIT_PASSWORD: credential.token,
53
+ }
54
+ : undefined);
55
+ return { output, branch, setUpstream };
40
56
  }
41
57
  /** Fast-forward the current branch from its configured upstream. */
42
58
  async pull() {
@@ -106,23 +122,39 @@ export class GitActions {
106
122
  throw new Error(`Commit or stash local changes before ${operation}.`);
107
123
  }
108
124
  }
109
- async git(args) {
125
+ async git(args, env) {
126
+ const secret = env?.NOMOREIDE_GIT_PASSWORD;
110
127
  try {
111
128
  const { stdout, stderr } = await execFileAsync("git", args, {
112
129
  cwd: this.cwd,
130
+ env: env ? { ...process.env, ...env } : undefined,
113
131
  maxBuffer: 16 * 1024 * 1024,
114
132
  });
115
- return stdout || stderr;
133
+ return redact(stdout || stderr, secret);
116
134
  }
117
135
  catch (error) {
118
136
  if (error instanceof Error) {
119
137
  const withStreams = error;
120
- throw new Error((withStreams.stderr || withStreams.stdout || error.message).trim());
138
+ throw new Error(redact((withStreams.stderr || withStreams.stdout || error.message).trim(), secret));
121
139
  }
122
140
  throw error;
123
141
  }
124
142
  }
125
143
  }
144
+ /** Exported so tests can drive `git credential fill` through the real helper. */
145
+ export function credentialConfigArgs() {
146
+ return ["-c", "credential.helper=", "-c", `credential.helper=${CREDENTIAL_HELPER}`];
147
+ }
148
+ /**
149
+ * Push output and git's error text are surfaced verbatim in the UI and written
150
+ * to the timeline, so scrub the token on the way out even though the helper
151
+ * keeps it off the command line.
152
+ */
153
+ export function redact(text, secret) {
154
+ if (!secret)
155
+ return text;
156
+ return text.split(secret).join("***");
157
+ }
126
158
  function errorMessage(error) {
127
159
  return error instanceof Error ? error.message : String(error);
128
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"git-actions.js","sourceRoot":"","sources":["../../src/core/git-actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-actions.js","sourceRoot":"","sources":["../../src/core/git-actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { type ConfigStore } from "./config-store.js";
2
+ import type { GitHubIdentity, GitRepositoryDefinition, NoMoreIdeConfig } from "./types.js";
3
+ /** Author/committer NoMoreIDE stamps on the commits it creates. */
4
+ export type GitIdentity = GitHubIdentity;
5
+ /** What `git config user.*` resolves to in a working tree. */
6
+ export interface MachineIdentity {
7
+ name?: string;
8
+ email?: string;
9
+ }
10
+ export interface GitIdentityState {
11
+ /**
12
+ * Identity NoMoreIDE will commit as, or null when it defers to whatever the
13
+ * machine is configured with.
14
+ */
15
+ selected: GitIdentity | null;
16
+ machine: MachineIdentity;
17
+ /** True when a commit made here would carry an author the machine doesn't use. */
18
+ diverged: boolean;
19
+ /** Why `selected` is null — the UI explains the fallback rather than hiding it. */
20
+ reason?: string;
21
+ }
22
+ /**
23
+ * Commit identity derived from the GitHub account selected for a repository.
24
+ *
25
+ * The account switcher has always governed the GitHub *API* (pull requests,
26
+ * issues, CI) while `git commit` quietly used the machine's `user.email`. That
27
+ * split let a commit be authored by one account and its pull request opened by
28
+ * another, with nothing in the UI saying so. This module closes the gap for
29
+ * commits and reports the mismatch when it can't.
30
+ *
31
+ * Deliberately scoped to the repository: the alternative — `gh auth switch` —
32
+ * changes identity for every terminal and every other repo on the machine, and
33
+ * NoMoreIDE does not reach outside what it owns.
34
+ */
35
+ export declare function resolveGitIdentityState(configStore: ConfigStore, repository: GitRepositoryDefinition | undefined, cwd: string): Promise<GitIdentityState>;
36
+ /**
37
+ * Same as {@link resolveGitIdentityState}, for callers that only know a working
38
+ * directory — the MCP tools and the CLI, which take a `cwd` rather than a
39
+ * repository name. An unregistered or ambiguous directory resolves to "no
40
+ * selection", which keeps today's machine-identity behaviour.
41
+ */
42
+ export declare function resolveGitIdentityForCwd(configStore: ConfigStore, cwd: string): Promise<GitIdentityState>;
43
+ /** The registered repository owning `cwd`, or undefined when there isn't a clear one. */
44
+ export declare function repositoryForCwd(configStore: ConfigStore, cwd: string): Promise<GitRepositoryDefinition | undefined>;
45
+ /**
46
+ * Identity for the repository's selected account, from the config cache when
47
+ * possible and the GitHub API otherwise. Cached because every commit would
48
+ * otherwise spend an API call resolving an answer that changes ~never.
49
+ */
50
+ export declare function resolveSelectedIdentity(configStore: ConfigStore, config: NoMoreIdeConfig, repository: GitRepositoryDefinition): Promise<GitIdentity>;
51
+ /**
52
+ * Environment that pins a commit's author and committer. Passed per command
53
+ * rather than written to `git config`, so nothing about the machine's setup
54
+ * changes and concurrent commits in other repos are unaffected.
55
+ */
56
+ /**
57
+ * Token to push the repository's selected account with, or null to leave the
58
+ * machine's credential helper in charge.
59
+ *
60
+ * Returns null for SSH remotes on purpose: authentication there comes from a
61
+ * key, and no token NoMoreIDE holds can change which key `ssh` offers. Callers
62
+ * that care about the mismatch surface it through {@link resolveGitIdentityState}
63
+ * instead of pretending the push was re-attributed.
64
+ */
65
+ export declare function resolvePushCredential(configStore: ConfigStore, repository: GitRepositoryDefinition | undefined, remoteUrl: string | null): Promise<{
66
+ token: string;
67
+ login?: string;
68
+ } | null>;
69
+ /** Host of an HTTPS git remote, or null when the remote is SSH or unparseable. */
70
+ export declare function httpsRemoteHost(remoteUrl: string | null): string | null;
71
+ export declare function identityEnv(identity: GitIdentity): Record<string, string>;
72
+ export declare function readMachineIdentity(cwd: string): Promise<MachineIdentity>;
73
+ /**
74
+ * The address a commit should carry. GitHub's own address is preferred over a
75
+ * guess, and the id-qualified `noreply` form is used when the account keeps its
76
+ * email private — that form still attributes the commit to the account.
77
+ */
78
+ export declare function commitEmail(publicEmail: string | null | undefined, id: number | undefined, login: string): string;
@@ -0,0 +1,178 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { gitToplevel } from "./config-store.js";
4
+ import { resolveGitHubCredential } from "./github-auth.js";
5
+ import { GitHubManager } from "./github-manager.js";
6
+ import { matchRegisteredRepository } from "./repo-match.js";
7
+ const execFileAsync = promisify(execFile);
8
+ const GIT_CONFIG_TIMEOUT_MS = 5_000;
9
+ /**
10
+ * Commit identity derived from the GitHub account selected for a repository.
11
+ *
12
+ * The account switcher has always governed the GitHub *API* (pull requests,
13
+ * issues, CI) while `git commit` quietly used the machine's `user.email`. That
14
+ * split let a commit be authored by one account and its pull request opened by
15
+ * another, with nothing in the UI saying so. This module closes the gap for
16
+ * commits and reports the mismatch when it can't.
17
+ *
18
+ * Deliberately scoped to the repository: the alternative — `gh auth switch` —
19
+ * changes identity for every terminal and every other repo on the machine, and
20
+ * NoMoreIDE does not reach outside what it owns.
21
+ */
22
+ export async function resolveGitIdentityState(configStore, repository, cwd) {
23
+ const machine = await readMachineIdentity(cwd);
24
+ const config = await configStore.load();
25
+ if (!repository?.githubCredential) {
26
+ return {
27
+ selected: null,
28
+ machine,
29
+ diverged: false,
30
+ reason: "No GitHub account is selected for this repository.",
31
+ };
32
+ }
33
+ try {
34
+ const selected = await resolveSelectedIdentity(configStore, config, repository);
35
+ return { selected, machine, diverged: isDiverged(selected, machine) };
36
+ }
37
+ catch (error) {
38
+ return {
39
+ selected: null,
40
+ machine,
41
+ diverged: false,
42
+ reason: error instanceof Error ? error.message : String(error),
43
+ };
44
+ }
45
+ }
46
+ /**
47
+ * Same as {@link resolveGitIdentityState}, for callers that only know a working
48
+ * directory — the MCP tools and the CLI, which take a `cwd` rather than a
49
+ * repository name. An unregistered or ambiguous directory resolves to "no
50
+ * selection", which keeps today's machine-identity behaviour.
51
+ */
52
+ export async function resolveGitIdentityForCwd(configStore, cwd) {
53
+ return resolveGitIdentityState(configStore, await repositoryForCwd(configStore, cwd), cwd);
54
+ }
55
+ /** The registered repository owning `cwd`, or undefined when there isn't a clear one. */
56
+ export async function repositoryForCwd(configStore, cwd) {
57
+ const config = await configStore.load();
58
+ const topLevel = await gitToplevel(cwd);
59
+ if (!topLevel)
60
+ return undefined;
61
+ return matchRegisteredRepository(config, topLevel).catch(() => undefined);
62
+ }
63
+ /**
64
+ * Identity for the repository's selected account, from the config cache when
65
+ * possible and the GitHub API otherwise. Cached because every commit would
66
+ * otherwise spend an API call resolving an answer that changes ~never.
67
+ */
68
+ export async function resolveSelectedIdentity(configStore, config, repository) {
69
+ const selection = repository.githubCredential;
70
+ if (!selection)
71
+ throw new Error("No GitHub account is selected for this repository.");
72
+ const host = selection.host;
73
+ const knownLogin = selection.source === "gh"
74
+ ? selection.login
75
+ : config.githubTokens.find((entry) => entry.host === host)?.login;
76
+ const cached = knownLogin ? configStore.getGithubIdentity(config, host, knownLogin) : undefined;
77
+ if (cached)
78
+ return cached;
79
+ const credential = await resolveGitHubCredential(config, repository, host);
80
+ const viewer = await new GitHubManager(credential.token, "", "").viewer();
81
+ const login = viewer.login || knownLogin;
82
+ if (!login)
83
+ throw new Error("GitHub did not report an account login for the selected credential.");
84
+ const identity = {
85
+ host,
86
+ login,
87
+ name: viewer.name?.trim() || login,
88
+ email: commitEmail(viewer.email, viewer.id, login),
89
+ };
90
+ await configStore.setGithubIdentity(identity);
91
+ return identity;
92
+ }
93
+ /**
94
+ * Environment that pins a commit's author and committer. Passed per command
95
+ * rather than written to `git config`, so nothing about the machine's setup
96
+ * changes and concurrent commits in other repos are unaffected.
97
+ */
98
+ /**
99
+ * Token to push the repository's selected account with, or null to leave the
100
+ * machine's credential helper in charge.
101
+ *
102
+ * Returns null for SSH remotes on purpose: authentication there comes from a
103
+ * key, and no token NoMoreIDE holds can change which key `ssh` offers. Callers
104
+ * that care about the mismatch surface it through {@link resolveGitIdentityState}
105
+ * instead of pretending the push was re-attributed.
106
+ */
107
+ export async function resolvePushCredential(configStore, repository, remoteUrl) {
108
+ if (!repository?.githubCredential)
109
+ return null;
110
+ const host = httpsRemoteHost(remoteUrl);
111
+ if (!host || host !== repository.githubCredential.host)
112
+ return null;
113
+ const config = await configStore.load();
114
+ const credential = await resolveGitHubCredential(config, repository, host);
115
+ return { token: credential.token, login: credential.login };
116
+ }
117
+ /** Host of an HTTPS git remote, or null when the remote is SSH or unparseable. */
118
+ export function httpsRemoteHost(remoteUrl) {
119
+ if (!remoteUrl)
120
+ return null;
121
+ try {
122
+ const parsed = new URL(remoteUrl.trim());
123
+ if (parsed.protocol !== "https:" && parsed.protocol !== "http:")
124
+ return null;
125
+ return parsed.hostname || null;
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ export function identityEnv(identity) {
132
+ return {
133
+ GIT_AUTHOR_NAME: identity.name,
134
+ GIT_AUTHOR_EMAIL: identity.email,
135
+ GIT_COMMITTER_NAME: identity.name,
136
+ GIT_COMMITTER_EMAIL: identity.email,
137
+ };
138
+ }
139
+ export async function readMachineIdentity(cwd) {
140
+ const [name, email] = await Promise.all([
141
+ gitConfigValue(cwd, "user.name"),
142
+ gitConfigValue(cwd, "user.email"),
143
+ ]);
144
+ return { name, email };
145
+ }
146
+ /**
147
+ * The address a commit should carry. GitHub's own address is preferred over a
148
+ * guess, and the id-qualified `noreply` form is used when the account keeps its
149
+ * email private — that form still attributes the commit to the account.
150
+ */
151
+ export function commitEmail(publicEmail, id, login) {
152
+ const explicit = publicEmail?.trim();
153
+ if (explicit)
154
+ return explicit;
155
+ return id ? `${id}+${login}@users.noreply.github.com` : `${login}@users.noreply.github.com`;
156
+ }
157
+ function isDiverged(selected, machine) {
158
+ const configured = machine.email?.trim().toLowerCase();
159
+ if (!configured)
160
+ return true;
161
+ return configured !== selected.email.trim().toLowerCase();
162
+ }
163
+ async function gitConfigValue(cwd, key) {
164
+ try {
165
+ const { stdout } = await execFileAsync("git", ["config", "--get", key], {
166
+ cwd,
167
+ encoding: "utf8",
168
+ timeout: GIT_CONFIG_TIMEOUT_MS,
169
+ });
170
+ return stdout.trim() || undefined;
171
+ }
172
+ catch {
173
+ // `git config --get` exits non-zero when the key is unset — an unconfigured
174
+ // machine identity is a normal state here, not a failure.
175
+ return undefined;
176
+ }
177
+ }
178
+ //# sourceMappingURL=git-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-identity.js","sourceRoot":"","sources":["../../src/core/git-identity.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type GitGraphLayoutRow } from "./git-graph-layout.js";
2
+ import { type GitIdentity } from "./git-identity.js";
2
3
  export interface GitFileStatus {
3
4
  path: string;
4
5
  index: string;
@@ -114,7 +115,14 @@ export declare class GitManager {
114
115
  remoteUrl(remote?: string): Promise<string | null>;
115
116
  stage(paths: string[]): Promise<string>;
116
117
  unstage(paths: string[]): Promise<string>;
117
- commit(message: string): Promise<string>;
118
+ /**
119
+ * Commit staged changes. Pass `identity` to stamp a specific author and
120
+ * committer — callers use this to honour the GitHub account selected for the
121
+ * repository instead of silently falling back to the machine's `user.email`.
122
+ */
123
+ commit(message: string, options?: {
124
+ identity?: GitIdentity;
125
+ }): Promise<string>;
118
126
  private git;
119
127
  private validBranchRef;
120
128
  private untrackedDiff;
@@ -3,6 +3,7 @@ import { execFile } from "node:child_process";
3
3
  import { resolve, sep } from "node:path";
4
4
  import { promisify } from "node:util";
5
5
  import { assignLanes } from "./git-graph-layout.js";
6
+ import { identityEnv } from "./git-identity.js";
6
7
  const execFileAsync = promisify(execFile);
7
8
  export class GitManager {
8
9
  cwd;
@@ -402,16 +403,22 @@ export class GitManager {
402
403
  requirePaths(paths);
403
404
  return this.git(["restore", "--staged", "--", ...paths]);
404
405
  }
405
- async commit(message) {
406
+ /**
407
+ * Commit staged changes. Pass `identity` to stamp a specific author and
408
+ * committer — callers use this to honour the GitHub account selected for the
409
+ * repository instead of silently falling back to the machine's `user.email`.
410
+ */
411
+ async commit(message, options = {}) {
406
412
  if (!message.trim()) {
407
413
  throw new Error("commit message is required");
408
414
  }
409
- return this.git(["commit", "-m", message]);
415
+ return this.git(["commit", "-m", message], options.identity ? identityEnv(options.identity) : undefined);
410
416
  }
411
- async git(args) {
417
+ async git(args, env) {
412
418
  try {
413
419
  const { stdout, stderr } = await execFileAsync("git", args, {
414
420
  cwd: this.cwd,
421
+ env: env ? { ...process.env, ...env } : undefined,
415
422
  // Data-file diffs/logs (CSV, logs) can exceed Node's 1 MB stdout
416
423
  // default, which otherwise aborts with a maxBuffer error whose partial
417
424
  // stdout gets surfaced to the UI as a raw, unrendered diff.