nomoreide 0.1.96 → 0.1.98
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/README.md +16 -1
- package/dist/cli/commands.js +5 -1
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/database.d.ts +2 -0
- package/dist/cli/database.js +145 -0
- package/dist/cli/database.js.map +1 -0
- package/dist/cli/profile.js +12 -8
- package/dist/cli/profile.js.map +1 -1
- package/dist/core/agent-env/claude-reader.js +12 -4
- package/dist/core/agent-env/claude-reader.js.map +1 -1
- package/dist/core/agent-env/codex-reader.js +5 -4
- package/dist/core/agent-env/codex-reader.js.map +1 -1
- package/dist/core/agent-env/managed-plugins.d.ts +5 -0
- package/dist/core/agent-env/managed-plugins.js +43 -11
- package/dist/core/agent-env/managed-plugins.js.map +1 -1
- package/dist/core/agent-env-plugin-uninstall.js +36 -19
- package/dist/core/agent-env-plugin-uninstall.js.map +1 -1
- package/dist/core/agent-profiles/apply.d.ts +6 -1
- package/dist/core/agent-profiles/apply.js +37 -1
- package/dist/core/agent-profiles/apply.js.map +1 -1
- package/dist/core/agent-profiles/index.d.ts +3 -2
- package/dist/core/agent-profiles/index.js +3 -2
- package/dist/core/agent-profiles/index.js.map +1 -1
- package/dist/core/agent-profiles/plugin-apply.d.ts +16 -0
- package/dist/core/agent-profiles/plugin-apply.js +383 -0
- package/dist/core/agent-profiles/plugin-apply.js.map +1 -0
- package/dist/core/agent-profiles/plugin-bundle.d.ts +6 -0
- package/dist/core/agent-profiles/plugin-bundle.js +32 -0
- package/dist/core/agent-profiles/plugin-bundle.js.map +1 -0
- package/dist/core/agent-profiles/registry-transfer.js +6 -1
- package/dist/core/agent-profiles/registry-transfer.js.map +1 -1
- package/dist/core/agent-profiles/store.d.ts +3 -1
- package/dist/core/agent-profiles/store.js +92 -5
- package/dist/core/agent-profiles/store.js.map +1 -1
- package/dist/core/agent-profiles/transfer.d.ts +1 -0
- package/dist/core/agent-profiles/transfer.js +183 -5
- package/dist/core/agent-profiles/transfer.js.map +1 -1
- package/dist/core/agent-profiles/types.d.ts +105 -3
- package/dist/core/agent-profiles/types.js +15 -1
- package/dist/core/agent-profiles/types.js.map +1 -1
- package/dist/core/agent-transcripts.d.ts +6 -4
- package/dist/core/agent-transcripts.js +20 -12
- package/dist/core/agent-transcripts.js.map +1 -1
- package/dist/core/config-store.d.ts +16 -2
- package/dist/core/config-store.js +55 -2
- package/dist/core/config-store.js.map +1 -1
- package/dist/core/db/catalog.d.ts +57 -0
- package/dist/core/db/catalog.js +38 -0
- package/dist/core/db/catalog.js.map +1 -0
- package/dist/core/db/driver.d.ts +20 -3
- package/dist/core/db/driver.js +8 -0
- package/dist/core/db/driver.js.map +1 -1
- package/dist/core/db/mysql-driver.d.ts +8 -1
- package/dist/core/db/mysql-driver.js +167 -7
- package/dist/core/db/mysql-driver.js.map +1 -1
- package/dist/core/db/postgres-driver.d.ts +8 -1
- package/dist/core/db/postgres-driver.js +235 -4
- package/dist/core/db/postgres-driver.js.map +1 -1
- package/dist/core/db/sqlite-driver.d.ts +7 -1
- package/dist/core/db/sqlite-driver.js +123 -4
- package/dist/core/db/sqlite-driver.js.map +1 -1
- package/dist/core/db-peek.d.ts +24 -0
- package/dist/core/db-peek.js +120 -0
- package/dist/core/db-peek.js.map +1 -1
- package/dist/core/db-write.d.ts +11 -0
- package/dist/core/db-write.js +118 -0
- package/dist/core/db-write.js.map +1 -1
- package/dist/core/docker-stats.d.ts +2 -0
- package/dist/core/docker-stats.js +24 -0
- package/dist/core/docker-stats.js.map +1 -1
- package/dist/core/git-actions.d.ts +12 -0
- package/dist/core/git-actions.js +48 -0
- package/dist/core/git-actions.js.map +1 -1
- package/dist/core/git-manager.d.ts +4 -1
- package/dist/core/git-manager.js +18 -2
- package/dist/core/git-manager.js.map +1 -1
- package/dist/core/github-auth.d.ts +28 -0
- package/dist/core/github-auth.js +134 -0
- package/dist/core/github-auth.js.map +1 -0
- package/dist/core/github-context.d.ts +12 -0
- package/dist/core/github-context.js +64 -0
- package/dist/core/github-context.js.map +1 -0
- package/dist/core/github-manager.d.ts +2 -0
- package/dist/core/github-manager.js.map +1 -1
- package/dist/core/metrics-store.d.ts +11 -1
- package/dist/core/metrics-store.js +63 -5
- package/dist/core/metrics-store.js.map +1 -1
- package/dist/core/one-time-skills.d.ts +27 -0
- package/dist/core/one-time-skills.js +185 -0
- package/dist/core/one-time-skills.js.map +1 -0
- package/dist/core/system-processes.d.ts +29 -0
- package/dist/core/system-processes.js +119 -0
- package/dist/core/system-processes.js.map +1 -0
- package/dist/core/tool-call-store.d.ts +1 -0
- package/dist/core/tool-call-store.js +10 -1
- package/dist/core/tool-call-store.js.map +1 -1
- package/dist/core/types.d.ts +13 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/tools/agent-profiles.js +42 -10
- package/dist/mcp/tools/agent-profiles.js.map +1 -1
- package/dist/mcp/tools/context.js +2 -2
- package/dist/mcp/tools/context.js.map +1 -1
- package/dist/mcp/tools/database.d.ts +1 -1
- package/dist/mcp/tools/database.js +53 -0
- package/dist/mcp/tools/database.js.map +1 -1
- package/dist/mcp/tools/github.js +10 -20
- package/dist/mcp/tools/github.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +1 -1
- package/dist/web/client/assets/{code-editor-0KKgooZa.js → code-editor-C9zfB-Qp.js} +1 -1
- package/dist/web/client/assets/index-BW5OtB6c.js +308 -0
- package/dist/web/client/assets/index-DofkHtdO.css +1 -0
- package/dist/web/client/assets/system-process-table-yI0XrfjG.js +1 -0
- package/dist/web/client/index.html +3 -3
- package/dist/web/routes/agent-profile-routes.js +2 -1
- package/dist/web/routes/agent-profile-routes.js.map +1 -1
- package/dist/web/routes/database-routes.js +93 -2
- package/dist/web/routes/database-routes.js.map +1 -1
- package/dist/web/routes/git-routes.js +66 -1
- package/dist/web/routes/git-routes.js.map +1 -1
- package/dist/web/routes/github-context.d.ts +2 -8
- package/dist/web/routes/github-context.js +2 -29
- package/dist/web/routes/github-context.js.map +1 -1
- package/dist/web/routes/github-routes.js +157 -9
- package/dist/web/routes/github-routes.js.map +1 -1
- package/dist/web/routes/index.js +2 -0
- package/dist/web/routes/index.js.map +1 -1
- package/dist/web/routes/metrics-routes.js +30 -4
- package/dist/web/routes/metrics-routes.js.map +1 -1
- package/dist/web/routes/skills-routes.d.ts +2 -0
- package/dist/web/routes/skills-routes.js +49 -0
- package/dist/web/routes/skills-routes.js.map +1 -0
- package/dist/web/routes/terminal-routes.js +28 -3
- package/dist/web/routes/terminal-routes.js.map +1 -1
- package/package.json +2 -1
- package/dist/web/client/assets/index-BT_kqOsy.css +0 -1
- package/dist/web/client/assets/index-CWkw1l1F.js +0 -242
package/dist/core/db-peek.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { readEnvFile, entriesFromLines } from "./env-file.js";
|
|
3
|
+
import { resolveCatalogObject, tableRefForObject, } from "./db/catalog.js";
|
|
3
4
|
import { MysqlDriver } from "./db/mysql-driver.js";
|
|
4
5
|
import { PostgresDriver } from "./db/postgres-driver.js";
|
|
5
6
|
import { SqliteDriver } from "./db/sqlite-driver.js";
|
|
@@ -28,6 +29,37 @@ export class DbPeek {
|
|
|
28
29
|
const driver = await this.driverFor(await this.resolve(name));
|
|
29
30
|
return driver.listTables();
|
|
30
31
|
}
|
|
32
|
+
async capabilities(name) {
|
|
33
|
+
const driver = await this.driverFor(await this.resolve(name));
|
|
34
|
+
return driver.capabilities();
|
|
35
|
+
}
|
|
36
|
+
async listSchemas(name) {
|
|
37
|
+
const driver = await this.driverFor(await this.resolve(name));
|
|
38
|
+
return driver.listSchemas();
|
|
39
|
+
}
|
|
40
|
+
async listObjects(name, schema, kinds) {
|
|
41
|
+
const driver = await this.driverFor(await this.resolve(name));
|
|
42
|
+
return driver.listObjects(schema, kinds);
|
|
43
|
+
}
|
|
44
|
+
async objectDetails(name, key) {
|
|
45
|
+
const driver = await this.driverFor(await this.resolve(name));
|
|
46
|
+
const object = await this.resolveObject(driver, key);
|
|
47
|
+
return driver.describeObject(object);
|
|
48
|
+
}
|
|
49
|
+
async sampleObject(name, key, limit, offset = 0) {
|
|
50
|
+
const connection = await this.resolve(name);
|
|
51
|
+
const driver = await this.driverFor(connection);
|
|
52
|
+
const object = await this.resolveObject(driver, key);
|
|
53
|
+
const table = tableRefForObject(object);
|
|
54
|
+
const sample = await driver.sampleRows(table, limit, offset);
|
|
55
|
+
return {
|
|
56
|
+
engine: connection.engine,
|
|
57
|
+
object,
|
|
58
|
+
table,
|
|
59
|
+
...sample,
|
|
60
|
+
rows: maskAutomaticPreviewRows(sample.rows),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
31
63
|
async sampleRows(name, qualifiedName, limit, offset = 0) {
|
|
32
64
|
const connection = await this.resolve(name);
|
|
33
65
|
const driver = await this.driverFor(connection);
|
|
@@ -52,6 +84,58 @@ export class DbPeek {
|
|
|
52
84
|
await driver.close().catch(() => { });
|
|
53
85
|
}
|
|
54
86
|
}
|
|
87
|
+
async register(input) {
|
|
88
|
+
const name = input.name.trim();
|
|
89
|
+
if (!name)
|
|
90
|
+
throw new Error("Database connection name is required.");
|
|
91
|
+
const config = await this.configStore.load();
|
|
92
|
+
const existing = config.databases.find((connection) => connection.name === name);
|
|
93
|
+
if (existing && !input.replace) {
|
|
94
|
+
throw new Error(`Database connection "${name}" already exists. Set replace=true to replace it.`);
|
|
95
|
+
}
|
|
96
|
+
if (input.check !== false) {
|
|
97
|
+
try {
|
|
98
|
+
await this.test(input.engine, input.url);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
throw new Error(redactDatabaseError(input.engine, input.url, error));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
await this.configStore.registerDatabase({
|
|
105
|
+
name,
|
|
106
|
+
engine: input.engine,
|
|
107
|
+
url: input.url,
|
|
108
|
+
projectPath: input.projectPath?.trim() || undefined,
|
|
109
|
+
// MCP registration can never carry write authorization to a new target.
|
|
110
|
+
writeUnlocked: false,
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
name,
|
|
114
|
+
engine: input.engine,
|
|
115
|
+
url: maskConnectionUrl(input.engine, input.url),
|
|
116
|
+
writeUnlocked: false,
|
|
117
|
+
projectPath: input.projectPath?.trim() || undefined,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
async check(name) {
|
|
121
|
+
const connection = await this.resolve(name);
|
|
122
|
+
try {
|
|
123
|
+
await this.test(connection.engine, connection.url);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
throw new Error(redactDatabaseError(connection.engine, connection.url, error));
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
ok: true,
|
|
130
|
+
connection: {
|
|
131
|
+
name: connection.name,
|
|
132
|
+
engine: connection.engine,
|
|
133
|
+
url: maskConnectionUrl(connection.engine, connection.url),
|
|
134
|
+
writeUnlocked: connection.writeUnlocked ?? false,
|
|
135
|
+
projectPath: connection.projectPath,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
55
139
|
/** Scan registered services' `.env` files for usable connection strings. */
|
|
56
140
|
async detectFromEnv() {
|
|
57
141
|
const config = await this.configStore.load();
|
|
@@ -113,6 +197,23 @@ export class DbPeek {
|
|
|
113
197
|
}
|
|
114
198
|
return table;
|
|
115
199
|
}
|
|
200
|
+
async resolveObject(driver, key) {
|
|
201
|
+
const schemas = await driver.listSchemas();
|
|
202
|
+
for (const schema of schemas) {
|
|
203
|
+
const objects = await driver.listObjects(schema.name);
|
|
204
|
+
const match = objects.find((object) => object.key === key);
|
|
205
|
+
if (match)
|
|
206
|
+
return match;
|
|
207
|
+
}
|
|
208
|
+
return resolveCatalogObject([], key);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
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
|
+
])));
|
|
116
217
|
}
|
|
117
218
|
function createDriver(engine, url) {
|
|
118
219
|
switch (engine) {
|
|
@@ -180,4 +281,23 @@ export function maskConnectionUrl(engine, url) {
|
|
|
180
281
|
return `${url.slice(0, 4)}****${url.slice(-4)}`;
|
|
181
282
|
}
|
|
182
283
|
}
|
|
284
|
+
export function redactDatabaseError(engine, url, error) {
|
|
285
|
+
let message = error instanceof Error ? error.message : String(error);
|
|
286
|
+
const masked = maskConnectionUrl(engine, url);
|
|
287
|
+
message = message.replaceAll(url, masked);
|
|
288
|
+
if (engine !== "sqlite") {
|
|
289
|
+
try {
|
|
290
|
+
const parsed = new URL(url);
|
|
291
|
+
const password = decodeURIComponent(parsed.password);
|
|
292
|
+
if (password)
|
|
293
|
+
message = message.replaceAll(password, "****");
|
|
294
|
+
if (parsed.password)
|
|
295
|
+
message = message.replaceAll(parsed.password, "****");
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
// The full unparseable value was already replaced above.
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return message;
|
|
302
|
+
}
|
|
183
303
|
//# sourceMappingURL=db-peek.js.map
|
package/dist/core/db-peek.js.map
CHANGED
|
@@ -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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"}
|
package/dist/core/db-write.d.ts
CHANGED
|
@@ -10,6 +10,10 @@ export interface WriteOutcome extends Partial<WriteResult> {
|
|
|
10
10
|
export interface DbWriteOptions {
|
|
11
11
|
configStore: ConfigStore;
|
|
12
12
|
}
|
|
13
|
+
export interface DeleteRowsOutcome extends WriteOutcome {
|
|
14
|
+
/** Live-catalog primary key order used to bind every tuple. */
|
|
15
|
+
primaryKeys: string[];
|
|
16
|
+
}
|
|
13
17
|
/**
|
|
14
18
|
* Write-capable counterpart to {@link DbPeek}, kept deliberately separate so the
|
|
15
19
|
* read-only browser can never reach a write. Every connection here is gated by
|
|
@@ -27,8 +31,15 @@ export declare class DbWrite {
|
|
|
27
31
|
* locked.
|
|
28
32
|
*/
|
|
29
33
|
execute(name: string, sql: string, commit: boolean): Promise<WriteOutcome>;
|
|
34
|
+
/**
|
|
35
|
+
* Delete rows identified by complete primary-key tuples. The object and its
|
|
36
|
+
* primary-key metadata are resolved from the live catalog; caller-provided
|
|
37
|
+
* names are never used as SQL identifiers.
|
|
38
|
+
*/
|
|
39
|
+
deleteRows(name: string, objectKey: string, tuples: unknown, commit: boolean, expectedAffectedRows?: number): Promise<DeleteRowsOutcome>;
|
|
30
40
|
closeAll(): Promise<void>;
|
|
31
41
|
/** Resolve a connection and assert the user has unlocked writes on it. */
|
|
32
42
|
private resolveUnlocked;
|
|
33
43
|
private driverFor;
|
|
44
|
+
private resolveObject;
|
|
34
45
|
}
|
package/dist/core/db-write.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { canPreviewWrite, } from "./db/driver.js";
|
|
2
|
+
import { resolveCatalogObject, } from "./db/catalog.js";
|
|
2
3
|
import { MysqlDriver } from "./db/mysql-driver.js";
|
|
3
4
|
import { PostgresDriver } from "./db/postgres-driver.js";
|
|
4
5
|
import { SqliteDriver } from "./db/sqlite-driver.js";
|
|
6
|
+
const MAX_DELETE_TUPLES = 100;
|
|
7
|
+
const MAX_DELETE_PARAMETERS = 500;
|
|
8
|
+
const MASKED_VALUE = /^•+$/;
|
|
5
9
|
/**
|
|
6
10
|
* Write-capable counterpart to {@link DbPeek}, kept deliberately separate so the
|
|
7
11
|
* read-only browser can never reach a write. Every connection here is gated by
|
|
@@ -31,6 +35,52 @@ export class DbWrite {
|
|
|
31
35
|
const result = await driver.executeWrite(sql, commit);
|
|
32
36
|
return { engine: connection.engine, previewUnavailable: false, ...result };
|
|
33
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Delete rows identified by complete primary-key tuples. The object and its
|
|
40
|
+
* primary-key metadata are resolved from the live catalog; caller-provided
|
|
41
|
+
* names are never used as SQL identifiers.
|
|
42
|
+
*/
|
|
43
|
+
async deleteRows(name, objectKey, tuples, commit, expectedAffectedRows) {
|
|
44
|
+
const connection = await this.resolveUnlocked(name);
|
|
45
|
+
const driver = this.driverFor(connection);
|
|
46
|
+
const object = await this.resolveObject(driver, objectKey);
|
|
47
|
+
if (object.kind !== "table") {
|
|
48
|
+
throw new Error("Only live catalog tables support row deletion.");
|
|
49
|
+
}
|
|
50
|
+
const details = await driver.describeObject(object);
|
|
51
|
+
const primaryKeys = details.columns
|
|
52
|
+
.filter((column) => column.primaryKey)
|
|
53
|
+
.map((column) => column.name);
|
|
54
|
+
if (primaryKeys.length === 0) {
|
|
55
|
+
throw new Error(`Table "${object.qualifiedName}" has no primary key; rows cannot be deleted safely.`);
|
|
56
|
+
}
|
|
57
|
+
const validatedTuples = validatePrimaryKeyTuples(tuples, primaryKeys);
|
|
58
|
+
const expected = validateExpectedAffectedRows(expectedAffectedRows);
|
|
59
|
+
if (commit && expected === undefined) {
|
|
60
|
+
throw new Error("A confirmed preview count is required before deleting rows.");
|
|
61
|
+
}
|
|
62
|
+
if (commit && expected !== validatedTuples.length) {
|
|
63
|
+
throw new Error("The confirmed preview count must match the selected primary-key tuples.");
|
|
64
|
+
}
|
|
65
|
+
const options = {
|
|
66
|
+
table: {
|
|
67
|
+
schema: object.schema,
|
|
68
|
+
name: object.name,
|
|
69
|
+
qualifiedName: object.qualifiedName,
|
|
70
|
+
},
|
|
71
|
+
primaryKeys,
|
|
72
|
+
tuples: validatedTuples,
|
|
73
|
+
commit,
|
|
74
|
+
expectedAffectedRows: expected,
|
|
75
|
+
};
|
|
76
|
+
const result = await driver.deleteRows(options);
|
|
77
|
+
return {
|
|
78
|
+
engine: connection.engine,
|
|
79
|
+
previewUnavailable: false,
|
|
80
|
+
primaryKeys,
|
|
81
|
+
...result,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
34
84
|
async closeAll() {
|
|
35
85
|
await Promise.all([...this.drivers.values()].map((driver) => driver.close().catch(() => { })));
|
|
36
86
|
this.drivers.clear();
|
|
@@ -56,6 +106,74 @@ export class DbWrite {
|
|
|
56
106
|
}
|
|
57
107
|
return driver;
|
|
58
108
|
}
|
|
109
|
+
async resolveObject(driver, key) {
|
|
110
|
+
if (!key)
|
|
111
|
+
throw new Error("Database object key is required.");
|
|
112
|
+
const schemas = await driver.listSchemas();
|
|
113
|
+
for (const schema of schemas) {
|
|
114
|
+
const objects = await driver.listObjects(schema.name);
|
|
115
|
+
const match = objects.find((object) => object.key === key);
|
|
116
|
+
if (match)
|
|
117
|
+
return match;
|
|
118
|
+
}
|
|
119
|
+
return resolveCatalogObject([], key);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function validatePrimaryKeyTuples(value, primaryKeys) {
|
|
123
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
124
|
+
throw new Error("At least one primary-key tuple is required.");
|
|
125
|
+
}
|
|
126
|
+
if (value.length > MAX_DELETE_TUPLES) {
|
|
127
|
+
throw new Error(`No more than ${MAX_DELETE_TUPLES} rows can be deleted at once.`);
|
|
128
|
+
}
|
|
129
|
+
if (value.length * primaryKeys.length > MAX_DELETE_PARAMETERS) {
|
|
130
|
+
throw new Error(`Row deletion is limited to ${MAX_DELETE_PARAMETERS} bound primary-key values.`);
|
|
131
|
+
}
|
|
132
|
+
const requiredNames = new Set(primaryKeys);
|
|
133
|
+
const seen = new Set();
|
|
134
|
+
return value.map((candidate, index) => {
|
|
135
|
+
if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) {
|
|
136
|
+
throw new Error(`Primary-key tuple ${index + 1} must be an object.`);
|
|
137
|
+
}
|
|
138
|
+
const record = candidate;
|
|
139
|
+
const names = Object.keys(record);
|
|
140
|
+
if (names.length !== primaryKeys.length ||
|
|
141
|
+
names.some((column) => !requiredNames.has(column))) {
|
|
142
|
+
throw new Error(`Primary-key tuple ${index + 1} must contain exactly: ${primaryKeys.join(", ")}.`);
|
|
143
|
+
}
|
|
144
|
+
const tuple = {};
|
|
145
|
+
for (const column of primaryKeys) {
|
|
146
|
+
tuple[column] = validatePrimaryKeyValue(record[column], index, column);
|
|
147
|
+
}
|
|
148
|
+
const identity = primaryKeys
|
|
149
|
+
.map((column) => `${typeof tuple[column]}:${JSON.stringify(tuple[column])}`)
|
|
150
|
+
.join("\u0000");
|
|
151
|
+
if (seen.has(identity)) {
|
|
152
|
+
throw new Error(`Primary-key tuple ${index + 1} is a duplicate.`);
|
|
153
|
+
}
|
|
154
|
+
seen.add(identity);
|
|
155
|
+
return tuple;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
function validatePrimaryKeyValue(value, tupleIndex, column) {
|
|
159
|
+
const scalar = typeof value === "string" ||
|
|
160
|
+
typeof value === "boolean" ||
|
|
161
|
+
(typeof value === "number" && Number.isFinite(value));
|
|
162
|
+
if (!scalar || value === null) {
|
|
163
|
+
throw new Error(`Primary-key value "${column}" in tuple ${tupleIndex + 1} must be a non-null scalar.`);
|
|
164
|
+
}
|
|
165
|
+
if (typeof value === "string" && MASKED_VALUE.test(value)) {
|
|
166
|
+
throw new Error(`Primary-key value "${column}" in tuple ${tupleIndex + 1} is masked and cannot be used for deletion.`);
|
|
167
|
+
}
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
170
|
+
function validateExpectedAffectedRows(value) {
|
|
171
|
+
if (value === undefined)
|
|
172
|
+
return undefined;
|
|
173
|
+
if (!Number.isSafeInteger(value) || value < 0 || value > MAX_DELETE_TUPLES) {
|
|
174
|
+
throw new Error("expectedAffectedRows must be a non-negative integer within the delete limit.");
|
|
175
|
+
}
|
|
176
|
+
return value;
|
|
59
177
|
}
|
|
60
178
|
function createWriteDriver(engine, url) {
|
|
61
179
|
switch (engine) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-write.js","sourceRoot":"","sources":["../../src/core/db-write.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,
|
|
1
|
+
{"version":3,"file":"db-write.js","sourceRoot":"","sources":["../../src/core/db-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,8 @@ export declare function listDockerStats(): Promise<DockerContainerStats[]>;
|
|
|
13
13
|
export declare function parseDockerStatsLines(stdout: string): DockerContainerStats[];
|
|
14
14
|
/** Docker formats percentages as "2.43%", or "--" when it has no sample. */
|
|
15
15
|
export declare function parsePercent(value: string): number | null;
|
|
16
|
+
/** Parse the used side of Docker's "184MiB / 2GiB" memory value into MiB. */
|
|
17
|
+
export declare function parseDockerMemoryUsageMb(value: string): number | null;
|
|
16
18
|
/**
|
|
17
19
|
* `docker stats` keys rows by the short (12-char) ID while `docker ps` reports
|
|
18
20
|
* the same short form — but callers may hold either, so match on prefix in
|
|
@@ -28,6 +28,30 @@ export function parsePercent(value) {
|
|
|
28
28
|
const parsed = Number.parseFloat(value.replace("%", "").trim());
|
|
29
29
|
return Number.isFinite(parsed) ? parsed : null;
|
|
30
30
|
}
|
|
31
|
+
/** Parse the used side of Docker's "184MiB / 2GiB" memory value into MiB. */
|
|
32
|
+
export function parseDockerMemoryUsageMb(value) {
|
|
33
|
+
const used = value.split("/", 1)[0]?.trim() ?? "";
|
|
34
|
+
const matched = /^(\d+(?:\.\d+)?)\s*([kmgt]?i?b)$/i.exec(used);
|
|
35
|
+
if (!matched)
|
|
36
|
+
return null;
|
|
37
|
+
const amount = Number.parseFloat(matched[1]);
|
|
38
|
+
if (!Number.isFinite(amount))
|
|
39
|
+
return null;
|
|
40
|
+
const unit = matched[2].toLowerCase();
|
|
41
|
+
const bytesPerUnit = {
|
|
42
|
+
b: 1,
|
|
43
|
+
kb: 1_000,
|
|
44
|
+
kib: 1024,
|
|
45
|
+
mb: 1_000_000,
|
|
46
|
+
mib: 1024 ** 2,
|
|
47
|
+
gb: 1_000_000_000,
|
|
48
|
+
gib: 1024 ** 3,
|
|
49
|
+
tb: 1_000_000_000_000,
|
|
50
|
+
tib: 1024 ** 4,
|
|
51
|
+
};
|
|
52
|
+
const bytes = amount * (bytesPerUnit[unit] ?? 0);
|
|
53
|
+
return bytes > 0 ? bytes / 1024 ** 2 : 0;
|
|
54
|
+
}
|
|
31
55
|
/**
|
|
32
56
|
* `docker stats` keys rows by the short (12-char) ID while `docker ps` reports
|
|
33
57
|
* the same short form — but callers may hold either, so match on prefix in
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-stats.js","sourceRoot":"","sources":["../../src/core/docker-stats.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAc3E,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,OAAO,qBAAqB,CAC1B,MAAM,UAAU,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CACrE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,OAAO,oBAAoB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;QAC1C,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACjE,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACrB,OAAO;YACL,EAAE;YACF,UAAU,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACpD,aAAa,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACvD,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC;YACxC,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;YAC/B,OAAO,EAAE,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC;SACpC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,KAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgC,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,KAAK;QAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAAwC,EACxC,WAAmB;IAEnB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;IAC7E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
1
|
+
{"version":3,"file":"docker-stats.js","sourceRoot":"","sources":["../../src/core/docker-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,9 +30,21 @@ export declare class GitActions {
|
|
|
30
30
|
push(options?: {
|
|
31
31
|
remote?: string;
|
|
32
32
|
}): Promise<PushResult>;
|
|
33
|
+
/** Fast-forward the current branch from its configured upstream. */
|
|
34
|
+
pull(): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Merge a branch into the current branch without opening an editor. The
|
|
37
|
+
* header command surface must not leave a repository half-merged, so a
|
|
38
|
+
* conflict is automatically aborted and returned as an error.
|
|
39
|
+
*/
|
|
40
|
+
merge(branch: string): Promise<string>;
|
|
41
|
+
/** Rebase the current branch onto another branch, aborting on conflicts. */
|
|
42
|
+
rebase(branch: string): Promise<string>;
|
|
33
43
|
checkoutDefaultAndPull(options?: {
|
|
34
44
|
remote?: string;
|
|
35
45
|
}): Promise<CheckoutDefaultAndPullResult>;
|
|
36
46
|
private defaultBranch;
|
|
47
|
+
private validBranchRef;
|
|
48
|
+
private assertCleanWorkingTree;
|
|
37
49
|
private git;
|
|
38
50
|
}
|
package/dist/core/git-actions.js
CHANGED
|
@@ -38,6 +38,38 @@ export class GitActions {
|
|
|
38
38
|
: ["push"];
|
|
39
39
|
return { output: await this.git(args), branch, setUpstream };
|
|
40
40
|
}
|
|
41
|
+
/** Fast-forward the current branch from its configured upstream. */
|
|
42
|
+
async pull() {
|
|
43
|
+
return this.git(["pull", "--ff-only"]);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Merge a branch into the current branch without opening an editor. The
|
|
47
|
+
* header command surface must not leave a repository half-merged, so a
|
|
48
|
+
* conflict is automatically aborted and returned as an error.
|
|
49
|
+
*/
|
|
50
|
+
async merge(branch) {
|
|
51
|
+
const target = await this.validBranchRef(branch);
|
|
52
|
+
await this.assertCleanWorkingTree("merge");
|
|
53
|
+
try {
|
|
54
|
+
return await this.git(["merge", "--no-edit", target]);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
await this.git(["merge", "--abort"]).catch(() => undefined);
|
|
58
|
+
throw new Error(`Merge failed and was aborted.\n${errorMessage(error)}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Rebase the current branch onto another branch, aborting on conflicts. */
|
|
62
|
+
async rebase(branch) {
|
|
63
|
+
const target = await this.validBranchRef(branch);
|
|
64
|
+
await this.assertCleanWorkingTree("rebase");
|
|
65
|
+
try {
|
|
66
|
+
return await this.git(["rebase", target]);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
await this.git(["rebase", "--abort"]).catch(() => undefined);
|
|
70
|
+
throw new Error(`Rebase failed and was aborted.\n${errorMessage(error)}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
41
73
|
async checkoutDefaultAndPull(options = {}) {
|
|
42
74
|
const remote = options.remote ?? "origin";
|
|
43
75
|
const branch = await this.defaultBranch(remote);
|
|
@@ -61,6 +93,19 @@ export class GitActions {
|
|
|
61
93
|
return "master";
|
|
62
94
|
throw new Error(`Could not determine default branch for ${remote}.`);
|
|
63
95
|
}
|
|
96
|
+
async validBranchRef(branch) {
|
|
97
|
+
const target = branch.trim();
|
|
98
|
+
if (!target)
|
|
99
|
+
throw new Error("branch is required");
|
|
100
|
+
await this.git(["check-ref-format", "--branch", target]);
|
|
101
|
+
return target;
|
|
102
|
+
}
|
|
103
|
+
async assertCleanWorkingTree(operation) {
|
|
104
|
+
const status = await this.git(["status", "--porcelain=v1", "--untracked-files=all"]);
|
|
105
|
+
if (status.trim()) {
|
|
106
|
+
throw new Error(`Commit or stash local changes before ${operation}.`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
64
109
|
async git(args) {
|
|
65
110
|
try {
|
|
66
111
|
const { stdout, stderr } = await execFileAsync("git", args, {
|
|
@@ -78,4 +123,7 @@ export class GitActions {
|
|
|
78
123
|
}
|
|
79
124
|
}
|
|
80
125
|
}
|
|
126
|
+
function errorMessage(error) {
|
|
127
|
+
return error instanceof Error ? error.message : String(error);
|
|
128
|
+
}
|
|
81
129
|
//# sourceMappingURL=git-actions.js.map
|
|
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAgB1C;;;;;;;;GAQG;AACH,MAAM,OAAO,UAAU;IACQ;IAA7B,YAA6B,MAAM,OAAO,CAAC,GAAG,EAAE;QAAnB,QAAG,GAAH,GAAG,CAAgB;IAAG,CAAC;IAEpD;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,UAA+B,EAAE;QAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC1C,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,QAAQ,GAAG,CACf,MAAM,IAAI,CAAC,GAAG,CAAC;YACb,WAAW;YACX,cAAc;YACd,sBAAsB;YACtB,aAAa;SACd,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CACnB,CAAC,IAAI,EAAE,CAAC;QAET,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC;QAC9B,MAAM,IAAI,GAAG,WAAW;YACtB,CAAC,CAAC,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC;YAC5C,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEb,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC/D,CAAC;IAED,oEAAoE;IACpE,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,kCAAkC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,mCAAmC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,UAA+B,EAAE;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;QACzD,OAAO;YACL,MAAM;YACN,MAAM,EAAE,CAAC,eAAe,MAAM,GAAG,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;SAC/F,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,MAAc;QACxC,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,SAAS,EAAE,gBAAgB,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvH,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAC9G,IAAI,cAAc;YAAE,OAAO,cAAc,CAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9E,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,GAAG,CAAC,CAAC;IACvE,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,MAAc;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACnD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,SAAiB;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,CAAC,CAAC;QACrF,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,GAAG,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,GAAG,CAAC,IAAc;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE;gBAC1D,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;aAC5B,CAAC,CAAC;YACH,OAAO,MAAM,IAAI,MAAM,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,WAAW,GAAG,KAAqD,CAAC;gBAC1E,MAAM,IAAI,KAAK,CACb,CAAC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CACnE,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -67,6 +67,7 @@ export interface FileSizeRank {
|
|
|
67
67
|
export declare class GitManager {
|
|
68
68
|
private readonly cwd;
|
|
69
69
|
constructor(cwd?: string);
|
|
70
|
+
root(): Promise<string>;
|
|
70
71
|
status(): Promise<GitStatus>;
|
|
71
72
|
/**
|
|
72
73
|
* How far the current branch is ahead/behind its upstream — the ahead/behind
|
|
@@ -107,12 +108,14 @@ export declare class GitManager {
|
|
|
107
108
|
private validateHash;
|
|
108
109
|
branches(): Promise<GitBranch[]>;
|
|
109
110
|
switchBranch(branch: string): Promise<string>;
|
|
110
|
-
createBranch(branch: string): Promise<string>;
|
|
111
|
+
createBranch(branch: string, startPoint?: string): Promise<string>;
|
|
112
|
+
deleteBranch(branch: string): Promise<string>;
|
|
111
113
|
fetch(): Promise<string>;
|
|
112
114
|
remoteUrl(remote?: string): Promise<string | null>;
|
|
113
115
|
stage(paths: string[]): Promise<string>;
|
|
114
116
|
unstage(paths: string[]): Promise<string>;
|
|
115
117
|
commit(message: string): Promise<string>;
|
|
116
118
|
private git;
|
|
119
|
+
private validBranchRef;
|
|
117
120
|
private untrackedDiff;
|
|
118
121
|
}
|
package/dist/core/git-manager.js
CHANGED
|
@@ -9,6 +9,9 @@ export class GitManager {
|
|
|
9
9
|
constructor(cwd = process.cwd()) {
|
|
10
10
|
this.cwd = cwd;
|
|
11
11
|
}
|
|
12
|
+
async root() {
|
|
13
|
+
return (await this.git(["rev-parse", "--show-toplevel"])).trim();
|
|
14
|
+
}
|
|
12
15
|
async status() {
|
|
13
16
|
const [branch, porcelain, tracking] = await Promise.all([
|
|
14
17
|
this.git(["branch", "--show-current"]),
|
|
@@ -370,8 +373,14 @@ export class GitManager {
|
|
|
370
373
|
const isRemoteBranch = remoteBranches.some((item) => item.name === name);
|
|
371
374
|
return this.git(isRemoteBranch ? ["switch", "--track", name] : ["switch", name]);
|
|
372
375
|
}
|
|
373
|
-
async createBranch(branch) {
|
|
374
|
-
|
|
376
|
+
async createBranch(branch, startPoint) {
|
|
377
|
+
const args = ["switch", "-c", await this.validBranchRef(branch, "branch")];
|
|
378
|
+
if (startPoint)
|
|
379
|
+
args.push(await this.validBranchRef(startPoint, "start point"));
|
|
380
|
+
return this.git(args);
|
|
381
|
+
}
|
|
382
|
+
async deleteBranch(branch) {
|
|
383
|
+
return this.git(["branch", "-d", await this.validBranchRef(branch, "branch")]);
|
|
375
384
|
}
|
|
376
385
|
async fetch() {
|
|
377
386
|
return this.git(["fetch", "--prune"]);
|
|
@@ -417,6 +426,13 @@ export class GitManager {
|
|
|
417
426
|
throw error;
|
|
418
427
|
}
|
|
419
428
|
}
|
|
429
|
+
async validBranchRef(value, label) {
|
|
430
|
+
const name = requireName(value, label);
|
|
431
|
+
if (name.startsWith("-"))
|
|
432
|
+
throw new Error(`${label} is invalid`);
|
|
433
|
+
await this.git(["check-ref-format", "--branch", name]);
|
|
434
|
+
return name;
|
|
435
|
+
}
|
|
420
436
|
async untrackedDiff(path) {
|
|
421
437
|
const fullPath = resolveInside(this.cwd, path);
|
|
422
438
|
const content = await readFile(fullPath, "utf8");
|