koneck 2.25.55 → 2.25.57
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/ink-chat.d.ts +27 -0
- package/dist/ink-chat.d.ts.map +1 -1
- package/dist/ink-chat.js +84 -17
- package/dist/ink-chat.js.map +1 -1
- package/dist/logo.d.ts +5 -1
- package/dist/logo.d.ts.map +1 -1
- package/dist/logo.js +5 -5
- package/dist/logo.js.map +1 -1
- package/dist/redact.d.ts +21 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +61 -0
- package/dist/redact.js.map +1 -0
- package/dist/session.d.ts +14 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +8 -4
- package/dist/session.js.map +1 -1
- package/package.json +1 -1
package/dist/logo.d.ts
CHANGED
|
@@ -11,12 +11,16 @@
|
|
|
11
11
|
* anyone forcing ASCII has said what they want.
|
|
12
12
|
*/
|
|
13
13
|
/**
|
|
14
|
-
* Half-block art, 34 columns by
|
|
14
|
+
* Half-block art, 34 columns by 9 rows.
|
|
15
15
|
*
|
|
16
16
|
* The size is not arbitrary: the mark is 1.51 times wider than it is tall, and half-blocks make
|
|
17
17
|
* each sub-cell roughly square, so 34 columns over 22 half-rows reproduces that. The first attempt
|
|
18
18
|
* was 22 by 7 and the arms of the two K's merged into a single blob with a diamond hole — at that
|
|
19
19
|
* width a diagonal two cells thick has nowhere to go.
|
|
20
|
+
*
|
|
21
|
+
* The tip rows are trimmed. Where each arm tapers to a single cell the render is a detached speck
|
|
22
|
+
* rather than a point — read on a real terminal as dirt above and below the mark — and the taper
|
|
23
|
+
* is already carried by the row beneath it.
|
|
20
24
|
*/
|
|
21
25
|
export declare const LOGO_BLOCKS: readonly string[];
|
|
22
26
|
/**
|
package/dist/logo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo.d.ts","sourceRoot":"","sources":["../src/logo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH
|
|
1
|
+
{"version":3,"file":"logo.d.ts","sourceRoot":"","sources":["../src/logo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAUxC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAUvC,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,SAAS,MAAM,EAAE,CAGzE"}
|
package/dist/logo.js
CHANGED
|
@@ -11,15 +11,18 @@
|
|
|
11
11
|
* anyone forcing ASCII has said what they want.
|
|
12
12
|
*/
|
|
13
13
|
/**
|
|
14
|
-
* Half-block art, 34 columns by
|
|
14
|
+
* Half-block art, 34 columns by 9 rows.
|
|
15
15
|
*
|
|
16
16
|
* The size is not arbitrary: the mark is 1.51 times wider than it is tall, and half-blocks make
|
|
17
17
|
* each sub-cell roughly square, so 34 columns over 22 half-rows reproduces that. The first attempt
|
|
18
18
|
* was 22 by 7 and the arms of the two K's merged into a single blob with a diamond hole — at that
|
|
19
19
|
* width a diagonal two cells thick has nowhere to go.
|
|
20
|
+
*
|
|
21
|
+
* The tip rows are trimmed. Where each arm tapers to a single cell the render is a detached speck
|
|
22
|
+
* rather than a point — read on a real terminal as dirt above and below the mark — and the taper
|
|
23
|
+
* is already carried by the row beneath it.
|
|
20
24
|
*/
|
|
21
25
|
export const LOGO_BLOCKS = [
|
|
22
|
-
" ▄ ▄",
|
|
23
26
|
" ▄██ ██▄",
|
|
24
27
|
"▄▄▄▄▄ ▄████ ████▄ ▄▄▄▄▄",
|
|
25
28
|
"█████ ▄████▀ ▀████▄ █████",
|
|
@@ -29,7 +32,6 @@ export const LOGO_BLOCKS = [
|
|
|
29
32
|
"█████ ▀█████ █████▀ █████",
|
|
30
33
|
"████▀ ▀████ ████▀ ▀████",
|
|
31
34
|
" ▀██ ██▀",
|
|
32
|
-
" ▀ ▀",
|
|
33
35
|
];
|
|
34
36
|
/**
|
|
35
37
|
* The same shape in characters every terminal has.
|
|
@@ -39,7 +41,6 @@ export const LOGO_BLOCKS = [
|
|
|
39
41
|
* from the mark the moment either is edited.
|
|
40
42
|
*/
|
|
41
43
|
export const LOGO_ASCII = [
|
|
42
|
-
" _ _",
|
|
43
44
|
" _## ##_",
|
|
44
45
|
"_____ _#### ####_ _____",
|
|
45
46
|
"##### _####\" \"####_ #####",
|
|
@@ -49,7 +50,6 @@ export const LOGO_ASCII = [
|
|
|
49
50
|
"##### \"##### #####\" #####",
|
|
50
51
|
"####\" \"#### ####\" \"####",
|
|
51
52
|
" \"## ##\"",
|
|
52
|
-
" \" \"",
|
|
53
53
|
];
|
|
54
54
|
/** How wide the logo needs the terminal to be before it is worth drawing. */
|
|
55
55
|
export const LOGO_MIN_COLUMNS = 38;
|
package/dist/logo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo.js","sourceRoot":"","sources":["../src/logo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH
|
|
1
|
+
{"version":3,"file":"logo.js","sourceRoot":"","sources":["../src/logo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,uBAAuB;IACvB,oCAAoC;IACpC,oCAAoC;IACpC,oCAAoC;IACpC,oCAAoC;IACpC,oCAAoC;IACpC,oCAAoC;IACpC,oCAAoC;IACpC,uBAAuB;CACxB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC3C,uBAAuB;IACvB,oCAAoC;IACpC,sCAAsC;IACtC,sCAAsC;IACtC,oCAAoC;IACpC,wCAAwC;IACxC,sCAAsC;IACtC,wCAAwC;IACxC,yBAAyB;CAC1B,CAAC;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,KAAK,GAAG,KAAK;IACpD,IAAI,OAAO,GAAG,gBAAgB;QAAE,OAAO,EAAE,CAAC;IAC1C,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;AAC1C,CAAC"}
|
package/dist/redact.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Masking secrets before they are written down or shown.
|
|
3
|
+
*
|
|
4
|
+
* A real session: an OpenRouter key was pasted while a prompt was asking for one, the paste went
|
|
5
|
+
* to the composer instead, and the key became the first user message. That message is what a
|
|
6
|
+
* session's title is taken from — so the key was written into the session file on disk and then
|
|
7
|
+
* printed in the resume picker, in full, next to the word "latest".
|
|
8
|
+
*
|
|
9
|
+
* The paste bug is fixed, but a secret reaching a place it should not is never one bug. Anything
|
|
10
|
+
* persisted or displayed goes through here, so the next route to the same outcome is closed too.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* The text with any secret in it masked.
|
|
14
|
+
*
|
|
15
|
+
* A prefix is kept so somebody can tell which key they pasted — recognising it is the whole
|
|
16
|
+
* reason to show anything, and six characters of an `sk-or-…` is not a credential.
|
|
17
|
+
*/
|
|
18
|
+
export declare function redactSecrets(text: string): string;
|
|
19
|
+
/** Whether masking would change anything — for deciding whether to warn. */
|
|
20
|
+
export declare function containsSecret(text: string): boolean;
|
|
21
|
+
//# sourceMappingURL=redact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgCH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
package/dist/redact.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Masking secrets before they are written down or shown.
|
|
3
|
+
*
|
|
4
|
+
* A real session: an OpenRouter key was pasted while a prompt was asking for one, the paste went
|
|
5
|
+
* to the composer instead, and the key became the first user message. That message is what a
|
|
6
|
+
* session's title is taken from — so the key was written into the session file on disk and then
|
|
7
|
+
* printed in the resume picker, in full, next to the word "latest".
|
|
8
|
+
*
|
|
9
|
+
* The paste bug is fixed, but a secret reaching a place it should not is never one bug. Anything
|
|
10
|
+
* persisted or displayed goes through here, so the next route to the same outcome is closed too.
|
|
11
|
+
*/
|
|
12
|
+
/** A labelled secret: `api_key=…`, `token: …`, `--password …`. */
|
|
13
|
+
const LABELLED = [
|
|
14
|
+
/((?:api[_-]?key|apikey|token|password|passwd|secret|credential|auth)\s*[=:]\s*)(\S+)/gi,
|
|
15
|
+
/(--(?:token|password|secret|api-key|apikey)[\s=]+)(\S+)/gi,
|
|
16
|
+
/(authorization:\s*bearer\s+)(\S+)/gi,
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* Bare tokens, recognised by the prefixes their issuers use.
|
|
20
|
+
*
|
|
21
|
+
* Worth catching separately because a key pasted on its own carries no label at all — which is
|
|
22
|
+
* exactly how one arrives when somebody is answering "paste your key".
|
|
23
|
+
*/
|
|
24
|
+
const BARE = [
|
|
25
|
+
/\bsk-[A-Za-z0-9_-]{16,}/g, // OpenAI, OpenRouter (sk-or-v1-…), Anthropic-style
|
|
26
|
+
/\bgh[pousr]_[A-Za-z0-9]{16,}/g, // GitHub
|
|
27
|
+
/\bAIza[A-Za-z0-9_-]{20,}/g, // Google
|
|
28
|
+
/\bxox[abprs]-[A-Za-z0-9-]{10,}/g, // Slack
|
|
29
|
+
/\bAKIA[0-9A-Z]{16}\b/g, // AWS access key id
|
|
30
|
+
/\bglpat-[A-Za-z0-9_-]{16,}/g, // GitLab
|
|
31
|
+
/\bAQ\.[A-Za-z0-9_-]{20,}/g, // Google/Gemini short-lived
|
|
32
|
+
/\bey[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g, // a JWT
|
|
33
|
+
];
|
|
34
|
+
/** Enough of the start to recognise which key it was, and nothing that could be used. */
|
|
35
|
+
function stub(secret) {
|
|
36
|
+
const visible = secret.slice(0, 6);
|
|
37
|
+
return `${visible}…[redacted]`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The text with any secret in it masked.
|
|
41
|
+
*
|
|
42
|
+
* A prefix is kept so somebody can tell which key they pasted — recognising it is the whole
|
|
43
|
+
* reason to show anything, and six characters of an `sk-or-…` is not a credential.
|
|
44
|
+
*/
|
|
45
|
+
export function redactSecrets(text) {
|
|
46
|
+
if (!text)
|
|
47
|
+
return text;
|
|
48
|
+
let out = text;
|
|
49
|
+
for (const pattern of LABELLED) {
|
|
50
|
+
out = out.replace(pattern, (_whole, label, value) => label + stub(value));
|
|
51
|
+
}
|
|
52
|
+
for (const pattern of BARE) {
|
|
53
|
+
out = out.replace(pattern, match => stub(match));
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
/** Whether masking would change anything — for deciding whether to warn. */
|
|
58
|
+
export function containsSecret(text) {
|
|
59
|
+
return redactSecrets(text) !== text;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,kEAAkE;AAClE,MAAM,QAAQ,GAAG;IACf,wFAAwF;IACxF,2DAA2D;IAC3D,qCAAqC;CACtC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,IAAI,GAAG;IACX,0BAA0B,EAAa,mDAAmD;IAC1F,+BAA+B,EAAQ,SAAS;IAChD,2BAA2B,EAAY,SAAS;IAChD,iCAAiC,EAAM,QAAQ;IAC/C,uBAAuB,EAAgB,oBAAoB;IAC3D,6BAA6B,EAAU,SAAS;IAChD,2BAA2B,EAAY,4BAA4B;IACnE,iEAAiE,EAAE,QAAQ;CAC5E,CAAC;AAEF,yFAAyF;AACzF,SAAS,IAAI,CAAC,MAAc;IAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,GAAG,OAAO,aAAa,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,KAAa,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5F,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AACtC,CAAC"}
|
package/dist/session.d.ts
CHANGED
|
@@ -35,6 +35,20 @@ export interface SessionMeta {
|
|
|
35
35
|
note?: string;
|
|
36
36
|
}>;
|
|
37
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* The git branch the work was on.
|
|
40
|
+
*
|
|
41
|
+
* What a person actually uses to tell two sessions apart when both say "fix the tests" — the
|
|
42
|
+
* timestamp in the id says when, and says nothing about which piece of work it belongs to.
|
|
43
|
+
*/
|
|
44
|
+
branch?: string;
|
|
45
|
+
/**
|
|
46
|
+
* How large the session file is.
|
|
47
|
+
*
|
|
48
|
+
* A rough measure of how much was done, and free: the listing already stats every file to sort
|
|
49
|
+
* by modification time.
|
|
50
|
+
*/
|
|
51
|
+
sizeBytes?: number;
|
|
38
52
|
/** The session this was forked from, when it was. */
|
|
39
53
|
forkedFrom?: string;
|
|
40
54
|
task: string;
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACxE,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C;AAQD,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,CAgBrD;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,KAAK,SAAK,EACV,eAAe,UAAQ,GACtB,OAAO,CAAC,WAAW,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACxE;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C;AAQD,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,CAgBrD;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,KAAK,SAAK,EACV,eAAe,UAAQ,GACtB,OAAO,CAAC,WAAW,EAAE,CAAC,CAsCxB;AAsBD,+DAA+D;AAC/D,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAO/F;AAED,0DAA0D;AAC1D,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,UAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAMnG;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,CAY5C;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB7C;AAGD,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,SAAa,GAAG,MAAM,CAY7E"}
|
package/dist/session.js
CHANGED
|
@@ -70,10 +70,10 @@ export async function listSessions(cwd, limit = 15, includeArchived = false) {
|
|
|
70
70
|
const stamped = await Promise.all(names.map(async (name) => {
|
|
71
71
|
try {
|
|
72
72
|
const st = await fs.stat(path.join(dir, name));
|
|
73
|
-
return { name, at: st.mtimeMs };
|
|
73
|
+
return { name, at: st.mtimeMs, size: st.size };
|
|
74
74
|
}
|
|
75
75
|
catch {
|
|
76
|
-
return { name, at: 0 };
|
|
76
|
+
return { name, at: 0, size: 0 };
|
|
77
77
|
}
|
|
78
78
|
}));
|
|
79
79
|
const files = stamped
|
|
@@ -82,7 +82,7 @@ export async function listSessions(cwd, limit = 15, includeArchived = false) {
|
|
|
82
82
|
// silently returned five of fifteen would look like sessions had gone missing.
|
|
83
83
|
.slice(0, includeArchived ? limit : limit * 3);
|
|
84
84
|
const metas = [];
|
|
85
|
-
for (const { name: file, at } of files) {
|
|
85
|
+
for (const { name: file, at, size } of files) {
|
|
86
86
|
try {
|
|
87
87
|
const raw = await fs.readFile(path.join(dir, file), 'utf-8');
|
|
88
88
|
const first = raw.split('\n').find(Boolean);
|
|
@@ -90,7 +90,11 @@ export async function listSessions(cwd, limit = 15, includeArchived = false) {
|
|
|
90
90
|
continue;
|
|
91
91
|
const entry = JSON.parse(first);
|
|
92
92
|
if (entry.type === 'meta') {
|
|
93
|
-
metas.push({
|
|
93
|
+
metas.push({
|
|
94
|
+
...entry.data,
|
|
95
|
+
updatedAt: at ? new Date(at).toISOString() : undefined,
|
|
96
|
+
...(size ? { sizeBytes: size } : {}),
|
|
97
|
+
});
|
|
94
98
|
}
|
|
95
99
|
}
|
|
96
100
|
catch { /* skip corrupt */ }
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|