@tryglen/cli 0.42.1 → 0.42.3
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/dist/_generated/contract/zod.gen.js +1 -0
- package/dist/_generated/contract/zod.gen.js.map +1 -1
- package/dist/clients/glen-api/glen-api.js +24 -27
- package/dist/clients/glen-api/glen-api.js.map +1 -1
- package/dist/clients/npm/update.js +5 -10
- package/dist/clients/npm/update.js.map +1 -1
- package/dist/commands/_utils/bound-segments.js +89 -0
- package/dist/commands/_utils/bound-segments.js.map +1 -0
- package/dist/commands/_utils/fails-until-fixed.js +7 -0
- package/dist/commands/_utils/fails-until-fixed.js.map +1 -0
- package/dist/commands/_utils/truncate-to-cap.js +6 -0
- package/dist/commands/_utils/truncate-to-cap.js.map +1 -0
- package/dist/commands/doctor/index.js +2 -1
- package/dist/commands/doctor/index.js.map +1 -1
- package/dist/commands/import/_utils/transcript-turns.js +2 -93
- package/dist/commands/import/_utils/transcript-turns.js.map +1 -1
- package/dist/commands/import/index.js +21 -20
- package/dist/commands/import/index.js.map +1 -1
- package/dist/commands/ingest/_utils/fit-turn-body.js +34 -0
- package/dist/commands/ingest/_utils/fit-turn-body.js.map +1 -0
- package/dist/commands/ingest/index.js +88 -43
- package/dist/commands/ingest/index.js.map +1 -1
- package/dist/commands/install/_utils/finish-install.js +3 -2
- package/dist/commands/install/_utils/finish-install.js.map +1 -1
- package/dist/commands/login/index.js +2 -1
- package/dist/commands/login/index.js.map +1 -1
- package/dist/commands/org/_utils/fetch-orgs.js +2 -1
- package/dist/commands/org/_utils/fetch-orgs.js.map +1 -1
- package/dist/commands/pr-link/index.js +2 -1
- package/dist/commands/pr-link/index.js.map +1 -1
- package/dist/commands/session-start/index.js +5 -5
- package/dist/commands/session-start/index.js.map +1 -1
- package/dist/commands/set-mode/index.js +2 -1
- package/dist/commands/set-mode/index.js.map +1 -1
- package/dist/commands/status/index.js +7 -4
- package/dist/commands/status/index.js.map +1 -1
- package/dist/commands/suggestions/index.js +2 -1
- package/dist/commands/suggestions/index.js.map +1 -1
- package/dist/core/errors/fixes.js +8 -0
- package/dist/core/errors/fixes.js.map +1 -0
- package/dist/core/state/import-job.js +4 -0
- package/dist/core/state/import-job.js.map +1 -1
- package/dist/core/state/session-memo.js +92 -0
- package/dist/core/state/session-memo.js.map +1 -0
- package/dist/core/state/state.js +5 -2
- package/dist/core/state/state.js.map +1 -1
- package/package.json +2 -2
- package/dist/commands/ingest/_utils/ingest-failure-memo.js +0 -57
- package/dist/commands/ingest/_utils/ingest-failure-memo.js.map +0 -1
- package/dist/core/state/paused-line.js +0 -3
- package/dist/core/state/paused-line.js.map +0 -1
- package/dist/core/state/state-line-memo.js +0 -52
- package/dist/core/state/state-line-memo.js.map +0 -1
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { dirname, join } from "node:path";
|
|
2
|
-
import { files } from "../../../core/system/files.js";
|
|
3
|
-
import { field } from "../../../core/json/json-field.js";
|
|
4
|
-
import { parseJson } from "../../../core/json/parse-json.js";
|
|
5
|
-
import { mapErr, ok } from "../../../core/errors/result.js";
|
|
6
|
-
import { glenState } from "../../../core/state/state.js";
|
|
7
|
-
const MAX_SESSIONS = 200;
|
|
8
|
-
const MAX_AGE_MS = 48 * 60 * 60 * 1000;
|
|
9
|
-
const memoPath = () => join(dirname(glenState.path()), "ingest-failure-memo.json");
|
|
10
|
-
const entryOf = (value) => {
|
|
11
|
-
const count = field(value, "count");
|
|
12
|
-
const updatedAt = field(value, "updatedAt");
|
|
13
|
-
return typeof count === "number" && typeof updatedAt === "number"
|
|
14
|
-
? { count, updatedAt }
|
|
15
|
-
: null;
|
|
16
|
-
};
|
|
17
|
-
const readMemo = async () => {
|
|
18
|
-
const raw = await files.readTextIfExists(memoPath());
|
|
19
|
-
if (!raw.ok || raw.value === null)
|
|
20
|
-
return {};
|
|
21
|
-
const parsed = parseJson(raw.value);
|
|
22
|
-
if (!parsed.ok || typeof parsed.value !== "object" || parsed.value === null)
|
|
23
|
-
return {};
|
|
24
|
-
return Object.fromEntries(Object.entries(parsed.value).flatMap(([id, v]) => {
|
|
25
|
-
const entry = entryOf(v);
|
|
26
|
-
return entry ? [[id, entry]] : [];
|
|
27
|
-
}));
|
|
28
|
-
};
|
|
29
|
-
const writeMemo = async (memo) => {
|
|
30
|
-
const now = Date.now();
|
|
31
|
-
const entries = Object.entries(memo)
|
|
32
|
-
.filter(([, entry]) => now - entry.updatedAt < MAX_AGE_MS)
|
|
33
|
-
.sort(([idA, a], [idB, b]) => b.updatedAt - a.updatedAt || (idA > idB ? -1 : idA < idB ? 1 : 0))
|
|
34
|
-
.slice(0, MAX_SESSIONS);
|
|
35
|
-
return mapErr(await files.writeAtomic(memoPath(), JSON.stringify(Object.fromEntries(entries))), (f) => files.toError(f, {
|
|
36
|
-
code: "ingest.failure_memo_write_failed",
|
|
37
|
-
what: "could not save glen's capture-failure count",
|
|
38
|
-
remedy: "check ownership of ~/.glen (e.g. `sudo chown -R $USER ~/.glen`)",
|
|
39
|
-
}));
|
|
40
|
-
};
|
|
41
|
-
const recordIngestCaptureOutcome = async (sessionId, outcome) => {
|
|
42
|
-
const memo = await readMemo();
|
|
43
|
-
if (outcome === "success") {
|
|
44
|
-
if (!(sessionId in memo))
|
|
45
|
-
return ok(false);
|
|
46
|
-
const cleared = await writeMemo(Object.fromEntries(Object.entries(memo).filter(([id]) => id !== sessionId)));
|
|
47
|
-
return cleared.ok ? ok(false) : cleared;
|
|
48
|
-
}
|
|
49
|
-
const count = (memo[sessionId]?.count ?? 0) + 1;
|
|
50
|
-
const saved = await writeMemo({
|
|
51
|
-
...memo,
|
|
52
|
-
[sessionId]: { count, updatedAt: Date.now() },
|
|
53
|
-
});
|
|
54
|
-
return saved.ok ? ok(count === 2) : saved;
|
|
55
|
-
};
|
|
56
|
-
export { recordIngestCaptureOutcome };
|
|
57
|
-
//# sourceMappingURL=ingest-failure-memo.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ingest-failure-memo.js","sourceRoot":"","sources":["../../../../src/commands/ingest/_utils/ingest-failure-memo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paused-line.js","sourceRoot":"","sources":["../../../src/core/state/paused-line.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,CAAC,MAA6C,EAAU,EAAE,CAC3E,4DAA4D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,2BAA2B,MAAM,CAAC,UAAU,EAAE,CAAC;AAEjJ,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { dirname, join } from "node:path";
|
|
2
|
-
import { files } from "../system/files.js";
|
|
3
|
-
import { field } from "../json/json-field.js";
|
|
4
|
-
import { parseJson } from "../json/parse-json.js";
|
|
5
|
-
import { mapErr, ok } from "../errors/result.js";
|
|
6
|
-
import { glenState } from "./state.js";
|
|
7
|
-
const MAX_SESSIONS = 200;
|
|
8
|
-
const MAX_AGE_MS = 48 * 60 * 60 * 1000;
|
|
9
|
-
const memoPath = () => join(dirname(glenState.path()), "state-line-memo.json");
|
|
10
|
-
const entryOf = (value) => {
|
|
11
|
-
const line = field(value, "line");
|
|
12
|
-
const updatedAt = field(value, "updatedAt");
|
|
13
|
-
return typeof line === "string" && typeof updatedAt === "number"
|
|
14
|
-
? { line, updatedAt }
|
|
15
|
-
: null;
|
|
16
|
-
};
|
|
17
|
-
const readMemo = async () => {
|
|
18
|
-
const raw = await files.readTextIfExists(memoPath());
|
|
19
|
-
if (!raw.ok || raw.value === null)
|
|
20
|
-
return {};
|
|
21
|
-
const parsed = parseJson(raw.value);
|
|
22
|
-
if (!parsed.ok || typeof parsed.value !== "object" || parsed.value === null)
|
|
23
|
-
return {};
|
|
24
|
-
return Object.fromEntries(Object.entries(parsed.value).flatMap(([id, v]) => {
|
|
25
|
-
const entry = entryOf(v);
|
|
26
|
-
return entry ? [[id, entry]] : [];
|
|
27
|
-
}));
|
|
28
|
-
};
|
|
29
|
-
const writeMemo = async (memo) => {
|
|
30
|
-
const now = Date.now();
|
|
31
|
-
const entries = Object.entries(memo)
|
|
32
|
-
.filter(([, e]) => now - e.updatedAt < MAX_AGE_MS)
|
|
33
|
-
.sort(([idA, a], [idB, b]) => b.updatedAt - a.updatedAt || (idA > idB ? -1 : idA < idB ? 1 : 0))
|
|
34
|
-
.slice(0, MAX_SESSIONS);
|
|
35
|
-
return mapErr(await files.writeAtomic(memoPath(), JSON.stringify(Object.fromEntries(entries))), (f) => files.toError(f, {
|
|
36
|
-
code: "state_line_memo.write_failed",
|
|
37
|
-
what: "could not save which glen status line this session last showed",
|
|
38
|
-
remedy: "check ownership of ~/.glen (e.g. `sudo chown -R $USER ~/.glen`)",
|
|
39
|
-
}));
|
|
40
|
-
};
|
|
41
|
-
const rememberStateLine = async (sessionId, line) => {
|
|
42
|
-
const memo = await readMemo();
|
|
43
|
-
if (memo[sessionId]?.line === line)
|
|
44
|
-
return ok(false);
|
|
45
|
-
const saved = await writeMemo({
|
|
46
|
-
...memo,
|
|
47
|
-
[sessionId]: { line, updatedAt: Date.now() },
|
|
48
|
-
});
|
|
49
|
-
return saved.ok ? ok(true) : saved;
|
|
50
|
-
};
|
|
51
|
-
export { rememberStateLine };
|
|
52
|
-
//# sourceMappingURL=state-line-memo.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-line-memo.js","sourceRoot":"","sources":["../../../src/core/state/state-line-memo.ts"],"names":[],"mappings":"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"}
|