@tryglen/cli 0.23.0 → 0.24.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/_utils/config.js +1 -5
- package/dist/_utils/config.js.map +1 -1
- package/dist/_utils/format-search-result.js +15 -49
- package/dist/_utils/format-search-result.js.map +1 -1
- package/dist/_utils/http.js +12 -1
- package/dist/_utils/http.js.map +1 -1
- package/dist/commands/session-start.js +1 -1
- package/package.json +1 -1
package/dist/_utils/config.js
CHANGED
|
@@ -23,11 +23,7 @@ const config = {
|
|
|
23
23
|
setRecordingUrl: `${baseUrl}/api/mcp/route/setRecording`,
|
|
24
24
|
setSuggestionsUrl: `${baseUrl}/api/mcp/route/setSuggestions`,
|
|
25
25
|
ingestTimeoutMs: 8000,
|
|
26
|
-
|
|
27
|
-
// scans (coarse shards → fine observations) and legitimately lands ~15s on heavy
|
|
28
|
-
// queries; a flat 15s clipped answers the server had already computed. Also the
|
|
29
|
-
// shared timeout for every /api/mcp/route/* POST via post-route.ts.
|
|
30
|
-
searchTimeoutMs: 30_000,
|
|
26
|
+
searchTimeoutMs: 60_000,
|
|
31
27
|
forgetTimeoutMs: 15_000,
|
|
32
28
|
listOrgsTimeoutMs: 15_000,
|
|
33
29
|
commitAnchorTimeoutMs: 3000,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/_utils/config.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,gEAAgE;AAChE,MAAM,OAAO,GAAG,CACd,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,yBAAyB,CACvD,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAEtB,MAAM,MAAM,GAAG;IACb,OAAO;IACP,UAAU,EAAE,GAAG,OAAO,cAAc;IACpC,WAAW,EAAE,GAAG,OAAO,2BAA2B;IAClD,OAAO,EAAE,GAAG,OAAO,qBAAqB;IACxC,SAAS,EAAE,GAAG,OAAO,uBAAuB;IAC5C,SAAS,EAAE,GAAG,OAAO,uBAAuB;IAC5C,SAAS,EAAE,GAAG,OAAO,6BAA6B;IAClD,WAAW,EAAE,GAAG,OAAO,yBAAyB;IAChD,cAAc,EAAE,GAAG,OAAO,4BAA4B;IACtD,WAAW,EAAE,GAAG,OAAO,yBAAyB;IAChD,cAAc,EAAE,GAAG,OAAO,4BAA4B;IACtD,mBAAmB,EAAE,GAAG,OAAO,iCAAiC;IAChE,iBAAiB,EAAE,GAAG,OAAO,+BAA+B;IAC5D,cAAc,EAAE,GAAG,OAAO,4BAA4B;IACtD,iBAAiB,EAAE,GAAG,OAAO,+BAA+B;IAC5D,eAAe,EAAE,GAAG,OAAO,6BAA6B;IACxD,aAAa,EAAE,GAAG,OAAO,2BAA2B;IACpD,SAAS,EAAE,GAAG,OAAO,iCAAiC;IACtD,eAAe,EAAE,GAAG,OAAO,6BAA6B;IACxD,iBAAiB,EAAE,GAAG,OAAO,+BAA+B;IAC5D,eAAe,EAAE,IAAI;IACrB
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/_utils/config.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,gEAAgE;AAChE,MAAM,OAAO,GAAG,CACd,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,yBAAyB,CACvD,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAEtB,MAAM,MAAM,GAAG;IACb,OAAO;IACP,UAAU,EAAE,GAAG,OAAO,cAAc;IACpC,WAAW,EAAE,GAAG,OAAO,2BAA2B;IAClD,OAAO,EAAE,GAAG,OAAO,qBAAqB;IACxC,SAAS,EAAE,GAAG,OAAO,uBAAuB;IAC5C,SAAS,EAAE,GAAG,OAAO,uBAAuB;IAC5C,SAAS,EAAE,GAAG,OAAO,6BAA6B;IAClD,WAAW,EAAE,GAAG,OAAO,yBAAyB;IAChD,cAAc,EAAE,GAAG,OAAO,4BAA4B;IACtD,WAAW,EAAE,GAAG,OAAO,yBAAyB;IAChD,cAAc,EAAE,GAAG,OAAO,4BAA4B;IACtD,mBAAmB,EAAE,GAAG,OAAO,iCAAiC;IAChE,iBAAiB,EAAE,GAAG,OAAO,+BAA+B;IAC5D,cAAc,EAAE,GAAG,OAAO,4BAA4B;IACtD,iBAAiB,EAAE,GAAG,OAAO,+BAA+B;IAC5D,eAAe,EAAE,GAAG,OAAO,6BAA6B;IACxD,aAAa,EAAE,GAAG,OAAO,2BAA2B;IACpD,SAAS,EAAE,GAAG,OAAO,iCAAiC;IACtD,eAAe,EAAE,GAAG,OAAO,6BAA6B;IACxD,iBAAiB,EAAE,GAAG,OAAO,+BAA+B;IAC5D,eAAe,EAAE,IAAI;IACrB,eAAe,EAAE,MAAM;IACvB,eAAe,EAAE,MAAM;IACvB,iBAAiB,EAAE,MAAM;IACzB,qBAAqB,EAAE,IAAI;IAC3B,oFAAoF;IACpF,mBAAmB,EAAE,MAAM;IAC3B,8EAA8E;IAC9E,eAAe,EAAE,MAAM;IACvB,qBAAqB,EAAE,MAAM;IAC7B,uBAAuB,EAAE,MAAM;CAChC,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -1,59 +1,25 @@
|
|
|
1
|
-
// `
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
// directly, so we lead with a short receipt of how many memories came back and
|
|
5
|
-
// render each as a bullet — a few bullets on what was returned, rather than an
|
|
6
|
-
// undifferentiated block — and close with a one-line reliability caveat.
|
|
7
|
-
// Returns null when there's no context to show.
|
|
8
|
-
const ELISION = /^…\[\d+ omitted\]…$/;
|
|
9
|
-
// Memories are LLM-extracted from past sessions — they can be stale, partial, or
|
|
10
|
-
// contradict each other. The nudge tells the agent to run `glen search` via Bash,
|
|
11
|
-
// which does NOT load skills/search/SKILL.md, so the caveat has to travel with the
|
|
12
|
-
// result itself rather than living only in the skill (same for the stale→forget
|
|
13
|
-
// instruction, whose full guardrails live in skills/forget/SKILL.md). Kept short —
|
|
14
|
-
// it rides every non-empty result.
|
|
1
|
+
// `answer` is already fully rendered server-side (render-answer.ts appends the
|
|
2
|
+
// "Sources:"/"Couldn't verify:" sections), so print it as-is — re-deriving
|
|
3
|
+
// bullets/gaps here would double-render those sections.
|
|
15
4
|
const CAVEAT = "(Recalled from past sessions — may be outdated or conflicting. Weigh recency, " +
|
|
16
5
|
"use your judgment on what's relevant, and confirm with the user before relying " +
|
|
17
|
-
"on anything uncertain or contradictory.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
// loaded), so the instruction has to ride the result itself, like the caveat.
|
|
27
|
-
// We hand the agent a single-cell Markdown table as a fixed scaffold and let it
|
|
28
|
-
// author only the inner 1–3 sentence summary: copying the fragile `| … |` / `| --- |`
|
|
29
|
-
// lines verbatim keeps the box from collapsing, while the summary stays
|
|
30
|
-
// context-aware. It's gated twice — the CLI appends this only when memories came
|
|
31
|
-
// back, and the agent renders it only when one actually matters here — so the box
|
|
32
|
-
// means "Glen surfaced something useful", not merely "Glen ran". The one-line / no-`|`
|
|
33
|
-
// rule is what stops the single cell from breaking apart.
|
|
34
|
-
const BANNER = "If one or more of the recalled memories above is genuinely useful for the " +
|
|
35
|
-
"user's current request, BEGIN your reply with the two-line banner below — copy " +
|
|
36
|
-
"both lines exactly, replacing only the angle-bracketed text with a 1–3 sentence " +
|
|
37
|
-
"summary of that useful context and why it matters here. Keep it on ONE line: " +
|
|
38
|
-
'never put a "|" character or a line break inside it. If nothing above is ' +
|
|
39
|
-
"actually relevant, skip the banner entirely and don't mention Glen.\n" +
|
|
6
|
+
"on anything uncertain or contradictory.)";
|
|
7
|
+
// Rides the result (Bash `glen search` loads no skill). The agent fills only the
|
|
8
|
+
// inner cell text; the one-line/no-`|` rule keeps the single-cell table from collapsing.
|
|
9
|
+
const BANNER = "If the answer above is genuinely useful for the user's current request, " +
|
|
10
|
+
"BEGIN your reply with the two-line banner below — copy both lines exactly, " +
|
|
11
|
+
"replacing only the angle-bracketed text with a 1–3 sentence summary of that " +
|
|
12
|
+
"useful context and why it matters here. Keep it on ONE line: never put a " +
|
|
13
|
+
'"|" character or a line break inside it. If nothing above is actually ' +
|
|
14
|
+
"relevant, skip the banner entirely and don't mention Glen.\n" +
|
|
40
15
|
"\n" +
|
|
41
16
|
"| 🧠 **Glen** — <1–3 sentences: the useful context and why it matters here> |\n" +
|
|
42
17
|
"| --- |";
|
|
43
18
|
const formatSearchResult = (result) => {
|
|
44
|
-
const
|
|
45
|
-
if (typeof
|
|
19
|
+
const answer = result?.answer;
|
|
20
|
+
if (typeof answer !== "string" || answer.trim() === "")
|
|
46
21
|
return null;
|
|
47
|
-
|
|
48
|
-
const memoryCount = lines.filter((l) => !ELISION.test(l.trim())).length;
|
|
49
|
-
if (memoryCount === 0)
|
|
50
|
-
return null;
|
|
51
|
-
const noun = memoryCount === 1 ? "memory" : "memories";
|
|
52
|
-
const bullets = lines
|
|
53
|
-
// The elision marker isn't a memory — keep it inline (indented), un-bulleted.
|
|
54
|
-
.map((l) => (ELISION.test(l.trim()) ? ` ${l.trim()}` : `• ${l}`))
|
|
55
|
-
.join("\n");
|
|
56
|
-
return `[glen] recalled ${memoryCount} ${noun}:\n${bullets}\n${CAVEAT}\n\n${BANNER}`;
|
|
22
|
+
return `[glen] search answer:\n\n${answer}\n\n${CAVEAT}\n\n${BANNER}`;
|
|
57
23
|
};
|
|
58
24
|
export { formatSearchResult };
|
|
59
25
|
//# sourceMappingURL=format-search-result.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-search-result.js","sourceRoot":"","sources":["../../src/_utils/format-search-result.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"format-search-result.js","sourceRoot":"","sources":["../../src/_utils/format-search-result.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2EAA2E;AAC3E,wDAAwD;AACxD,MAAM,MAAM,GACV,gFAAgF;IAChF,iFAAiF;IACjF,0CAA0C,CAAC;AAE7C,iFAAiF;AACjF,yFAAyF;AACzF,MAAM,MAAM,GACV,0EAA0E;IAC1E,6EAA6E;IAC7E,8EAA8E;IAC9E,2EAA2E;IAC3E,wEAAwE;IACxE,8DAA8D;IAC9D,IAAI;IACJ,iFAAiF;IACjF,SAAS,CAAC;AAEZ,MAAM,kBAAkB,GAAG,CAAC,MAAe,EAAiB,EAAE;IAC5D,MAAM,MAAM,GAAI,MAAyC,EAAE,MAAM,CAAC;IAClE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAEpE,OAAO,4BAA4B,MAAM,OAAO,MAAM,OAAO,MAAM,EAAE,CAAC;AACxE,CAAC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
package/dist/_utils/http.js
CHANGED
|
@@ -40,13 +40,24 @@ const classifyFetchError = (e, url) => {
|
|
|
40
40
|
};
|
|
41
41
|
const httpJson = async (url, options = {}) => {
|
|
42
42
|
const { method = "GET", headers, body, timeoutMs } = options;
|
|
43
|
+
// Staging/preview deployments sit behind Vercel deployment protection; the
|
|
44
|
+
// bypass token must ride on EVERY request or Vercel 401s before the app
|
|
45
|
+
// runs. Env-gated so production use (unset) sends nothing extra — pairs
|
|
46
|
+
// with GLEN_BASE_URL for pointing the CLI at a preview deploy.
|
|
47
|
+
const bypassToken = process.env.GLEN_VERCEL_PROTECTION_BYPASS;
|
|
48
|
+
const mergedHeaders = {
|
|
49
|
+
...(bypassToken ? { "x-vercel-protection-bypass": bypassToken } : {}),
|
|
50
|
+
...headers,
|
|
51
|
+
};
|
|
43
52
|
const controller = new AbortController();
|
|
44
53
|
const timeoutId = timeoutMs
|
|
45
54
|
? setTimeout(() => controller.abort(), timeoutMs)
|
|
46
55
|
: undefined;
|
|
47
56
|
const fetchResult = await fromPromise(fetch(url, {
|
|
48
57
|
method,
|
|
49
|
-
...(
|
|
58
|
+
...(Object.keys(mergedHeaders).length > 0
|
|
59
|
+
? { headers: mergedHeaders }
|
|
60
|
+
: {}),
|
|
50
61
|
body: body ?? null,
|
|
51
62
|
signal: controller.signal,
|
|
52
63
|
}));
|
package/dist/_utils/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/_utils/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAwB/C,MAAM,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE;IACrC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,CAAU,EAAE,GAAW,EAAe,EAAE;IAClE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,KAAK,GAAI,CAAuC,EAAE,KAAK,CAAC;IAC9D,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAK,CAA2B,EAAE,IAAI,CAAC;IAC/D,IAAK,CAAW,EAAE,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,WAAW;QAC7D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,IAAI,YAAY,EAAE,CAAC;IAC3E,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW;QAC9C,OAAO;YACL,IAAI,EAAE,KAAK;YACX,IAAI;YACJ,MAAM,EAAE,qBAAqB,IAAI,sBAAsB;SACxD,CAAC;IACJ,IAAI,IAAI,KAAK,cAAc;QACzB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,IAAI;YACJ,MAAM,EAAE,iBAAiB,IAAI,UAAU;SACxC,CAAC;IACJ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACtD,OAAO;YACL,IAAI,EAAE,KAAK;YACX,IAAI;YACJ,MAAM,EAAE,wBAAwB,IAAI,KAAK,IAAI,yCAAyC;SACvF,CAAC;IACJ,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI;QACJ,MAAM,EAAE,0BAA0B,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG;KACzD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,KAAK,EACpB,GAAW,EACX,UAAuB,EAAE,EACmB,EAAE;IAC9C,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAE7D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,SAAS;QACzB,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC;QACjD,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,WAAW,GAAG,MAAM,WAAW,CACnC,KAAK,CAAC,GAAG,EAAE;QACT,MAAM;QACN,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/_utils/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,7 +125,7 @@ const sessionStart = async (agent) => {
|
|
|
125
125
|
// Cursor has no user-facing notice channel (no systemMessage field), so the
|
|
126
126
|
// off/incognito notice rides additional_context; it contains no memory.
|
|
127
127
|
const healthy = Boolean(credentials && state && state.mode !== "off" && state.mode !== "silent");
|
|
128
|
-
const searchNudge = '[glen] Cursor cannot inject team memory per turn — for anything the user references from past team work (decisions, discussions, prior fixes), run `glen search "<topic>"` via the shell and treat its
|
|
128
|
+
const searchNudge = '[glen] Cursor cannot inject team memory per turn — for anything the user references from past team work (decisions, discussions, prior fixes), run `glen search "<topic>"` via the shell and treat its answer as team memory.';
|
|
129
129
|
const combined = [
|
|
130
130
|
systemMessage,
|
|
131
131
|
additionalContext,
|