@tryglen/cli 0.36.0 → 0.37.0
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 +39 -27
- package/dist/_utils/agent-adapter.d.ts +0 -15
- package/dist/_utils/agent-adapter.js +0 -20
- package/dist/_utils/agent-adapter.js.map +1 -1
- package/dist/_utils/agents-table.js +1 -9
- package/dist/_utils/agents-table.js.map +1 -1
- package/dist/_utils/cli-error.js +0 -3
- package/dist/_utils/cli-error.js.map +1 -1
- package/dist/_utils/codex-app-server.js +0 -2
- package/dist/_utils/codex-app-server.js.map +1 -1
- package/dist/_utils/codex-hooks-merge.js +0 -11
- package/dist/_utils/codex-hooks-merge.js.map +1 -1
- package/dist/_utils/codex-hooks-setup.d.ts +1 -0
- package/dist/_utils/codex-hooks-setup.js +5 -18
- package/dist/_utils/codex-hooks-setup.js.map +1 -1
- package/dist/_utils/codex-paths.d.ts +2 -1
- package/dist/_utils/codex-paths.js +4 -4
- package/dist/_utils/codex-paths.js.map +1 -1
- package/dist/_utils/codex-repair-trace.js +0 -3
- package/dist/_utils/codex-repair-trace.js.map +1 -1
- package/dist/_utils/codex-rules-setup.d.ts +4 -0
- package/dist/_utils/codex-rules-setup.js +34 -0
- package/dist/_utils/codex-rules-setup.js.map +1 -0
- package/dist/_utils/codex-trust-toml.js +1 -9
- package/dist/_utils/codex-trust-toml.js.map +1 -1
- package/dist/_utils/collect-import-files.js +0 -7
- package/dist/_utils/collect-import-files.js.map +1 -1
- package/dist/_utils/config.js +0 -4
- package/dist/_utils/config.js.map +1 -1
- package/dist/_utils/confirm.js +2 -10
- package/dist/_utils/confirm.js.map +1 -1
- package/dist/_utils/credentials.js +0 -3
- package/dist/_utils/credentials.js.map +1 -1
- package/dist/_utils/detect-transcript-format.js +0 -7
- package/dist/_utils/detect-transcript-format.js.map +1 -1
- package/dist/_utils/ensure-global-cli.d.ts +0 -12
- package/dist/_utils/ensure-global-cli.js +1 -28
- package/dist/_utils/ensure-global-cli.js.map +1 -1
- package/dist/_utils/ephemeral-session.js +3 -24
- package/dist/_utils/ephemeral-session.js.map +1 -1
- package/dist/_utils/extract-claude-segments.js +1 -5
- package/dist/_utils/extract-claude-segments.js.map +1 -1
- package/dist/_utils/extract-codex-segments.js +0 -9
- package/dist/_utils/extract-codex-segments.js.map +1 -1
- package/dist/_utils/extract-pi-segments.js +1 -5
- package/dist/_utils/extract-pi-segments.js.map +1 -1
- package/dist/_utils/find-bin.js +0 -8
- package/dist/_utils/find-bin.js.map +1 -1
- package/dist/_utils/format-search-result.js +3 -19
- package/dist/_utils/format-search-result.js.map +1 -1
- package/dist/_utils/format-turn-nudges.js +2 -20
- package/dist/_utils/format-turn-nudges.js.map +1 -1
- package/dist/_utils/git-context.d.ts +0 -2
- package/dist/_utils/git-context.js +1 -33
- package/dist/_utils/git-context.js.map +1 -1
- package/dist/_utils/git-hook-setup.js +0 -1
- package/dist/_utils/git-hook-setup.js.map +1 -1
- package/dist/_utils/glen-headers.js +1 -4
- package/dist/_utils/glen-headers.js.map +1 -1
- package/dist/_utils/http.js +1 -8
- package/dist/_utils/http.js.map +1 -1
- package/dist/_utils/idempotency-key.js +1 -4
- package/dist/_utils/idempotency-key.js.map +1 -1
- package/dist/_utils/indicator-app.js +4 -26
- package/dist/_utils/indicator-app.js.map +1 -1
- package/dist/_utils/indicator-health.js +0 -6
- package/dist/_utils/indicator-health.js.map +1 -1
- package/dist/_utils/ingest-diagnosis.js +0 -5
- package/dist/_utils/ingest-diagnosis.js.map +1 -1
- package/dist/_utils/ingest-heartbeat.js +1 -6
- package/dist/_utils/ingest-heartbeat.js.map +1 -1
- package/dist/_utils/install-receipt.js +0 -3
- package/dist/_utils/install-receipt.js.map +1 -1
- package/dist/_utils/jcode-bundle.js +0 -7
- package/dist/_utils/jcode-bundle.js.map +1 -1
- package/dist/_utils/jcode-event.js +2 -18
- package/dist/_utils/jcode-event.js.map +1 -1
- package/dist/_utils/jcode-hook-lines.js +1 -5
- package/dist/_utils/jcode-hook-lines.js.map +1 -1
- package/dist/_utils/jcode-hooks-toml.js +1 -9
- package/dist/_utils/jcode-hooks-toml.js.map +1 -1
- package/dist/_utils/jcode-paths.js +0 -3
- package/dist/_utils/jcode-paths.js.map +1 -1
- package/dist/_utils/jcode-setup.js +0 -7
- package/dist/_utils/jcode-setup.js.map +1 -1
- package/dist/_utils/jcode-skills-sync.js +1 -6
- package/dist/_utils/jcode-skills-sync.js.map +1 -1
- package/dist/_utils/login-check.js +1 -4
- package/dist/_utils/login-check.js.map +1 -1
- package/dist/_utils/managed-block.js +0 -4
- package/dist/_utils/managed-block.js.map +1 -1
- package/dist/_utils/normalize-boolean-flags.js +2 -7
- package/dist/_utils/normalize-boolean-flags.js.map +1 -1
- package/dist/_utils/open-browser.js +1 -3
- package/dist/_utils/open-browser.js.map +1 -1
- package/dist/_utils/parse-claude-transcript.js +4 -24
- package/dist/_utils/parse-claude-transcript.js.map +1 -1
- package/dist/_utils/parse-codex-transcript.js +1 -22
- package/dist/_utils/parse-codex-transcript.js.map +1 -1
- package/dist/_utils/parse-cursor-db.js +2 -21
- package/dist/_utils/parse-cursor-db.js.map +1 -1
- package/dist/_utils/parse-jcode-session.js +0 -15
- package/dist/_utils/parse-jcode-session.js.map +1 -1
- package/dist/_utils/parse-pi-transcript.js +1 -35
- package/dist/_utils/parse-pi-transcript.js.map +1 -1
- package/dist/_utils/parse-transcript.js +1 -9
- package/dist/_utils/parse-transcript.js.map +1 -1
- package/dist/_utils/plugin-status.js +0 -19
- package/dist/_utils/plugin-status.js.map +1 -1
- package/dist/_utils/post-route.js +0 -7
- package/dist/_utils/post-route.js.map +1 -1
- package/dist/_utils/pr-review-link.js +0 -2
- package/dist/_utils/pr-review-link.js.map +1 -1
- package/dist/_utils/proactive-ticket-log.js +1 -11
- package/dist/_utils/proactive-ticket-log.js.map +1 -1
- package/dist/_utils/record-commit-anchor.js +1 -8
- package/dist/_utils/record-commit-anchor.js.map +1 -1
- package/dist/_utils/refresh-control-state.js +1 -7
- package/dist/_utils/refresh-control-state.js.map +1 -1
- package/dist/_utils/render-callback-page.js +0 -7
- package/dist/_utils/render-callback-page.js.map +1 -1
- package/dist/_utils/resolve-import-workspace.d.ts +0 -7
- package/dist/_utils/resolve-import-workspace.js +1 -13
- package/dist/_utils/resolve-import-workspace.js.map +1 -1
- package/dist/_utils/run-bin.js +0 -2
- package/dist/_utils/run-bin.js.map +1 -1
- package/dist/_utils/session-map.js +0 -5
- package/dist/_utils/session-map.js.map +1 -1
- package/dist/_utils/shell-profile.js +1 -28
- package/dist/_utils/shell-profile.js.map +1 -1
- package/dist/_utils/state-line-memo.d.ts +0 -6
- package/dist/_utils/state-line-memo.js +3 -18
- package/dist/_utils/state-line-memo.js.map +1 -1
- package/dist/_utils/state-line.js +0 -4
- package/dist/_utils/state-line.js.map +1 -1
- package/dist/_utils/state.js +0 -5
- package/dist/_utils/state.js.map +1 -1
- package/dist/_utils/sync-mode-from-server.d.ts +0 -18
- package/dist/_utils/sync-mode-from-server.js +2 -21
- package/dist/_utils/sync-mode-from-server.js.map +1 -1
- package/dist/_utils/transcript-turns.js +1 -51
- package/dist/_utils/transcript-turns.js.map +1 -1
- package/dist/_utils/turn-cache.js +1 -8
- package/dist/_utils/turn-cache.js.map +1 -1
- package/dist/_utils/update.d.ts +0 -10
- package/dist/_utils/update.js +8 -30
- package/dist/_utils/update.js.map +1 -1
- package/dist/_utils/version.js +3 -6
- package/dist/_utils/version.js.map +1 -1
- package/dist/_utils/which.d.ts +0 -5
- package/dist/_utils/which.js +0 -5
- package/dist/_utils/which.js.map +1 -1
- package/dist/_utils/write-commit-trailer.js +1 -5
- package/dist/_utils/write-commit-trailer.js.map +1 -1
- package/dist/bin.js +6 -25
- package/dist/bin.js.map +1 -1
- package/dist/commands/_utils/materialize-skill.js +4 -34
- package/dist/commands/_utils/materialize-skill.js.map +1 -1
- package/dist/commands/_utils/pack-skill-dir.js +6 -27
- package/dist/commands/_utils/pack-skill-dir.js.map +1 -1
- package/dist/commands/artifact.js +2 -5
- package/dist/commands/artifact.js.map +1 -1
- package/dist/commands/code-search.js +0 -6
- package/dist/commands/code-search.js.map +1 -1
- package/dist/commands/doctor.d.ts +0 -17
- package/dist/commands/doctor.js +15 -79
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/feedback.js +2 -10
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/git-hooks.js +0 -3
- package/dist/commands/git-hooks.js.map +1 -1
- package/dist/commands/import.js +5 -27
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/incognito.d.ts +0 -5
- package/dist/commands/incognito.js +0 -5
- package/dist/commands/incognito.js.map +1 -1
- package/dist/commands/indicator.d.ts +0 -1
- package/dist/commands/indicator.js +0 -1
- package/dist/commands/indicator.js.map +1 -1
- package/dist/commands/ingest.js +37 -111
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/install.js +10 -93
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/invite.d.ts +0 -6
- package/dist/commands/invite.js +0 -16
- package/dist/commands/invite.js.map +1 -1
- package/dist/commands/login.js +0 -15
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/onboard.js +0 -6
- package/dist/commands/onboard.js.map +1 -1
- package/dist/commands/org.js +0 -2
- package/dist/commands/org.js.map +1 -1
- package/dist/commands/pr-link.js +2 -15
- package/dist/commands/pr-link.js.map +1 -1
- package/dist/commands/search.js +0 -5
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/session-start.d.ts +0 -21
- package/dist/commands/session-start.js +6 -65
- package/dist/commands/session-start.js.map +1 -1
- package/dist/commands/set-mode.d.ts +0 -6
- package/dist/commands/set-mode.js +2 -12
- package/dist/commands/set-mode.js.map +1 -1
- package/dist/commands/skill.js +5 -35
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/statusline.d.ts +0 -13
- package/dist/commands/statusline.js +0 -15
- package/dist/commands/statusline.js.map +1 -1
- package/dist/commands/suggestions.d.ts +0 -6
- package/dist/commands/suggestions.js +0 -7
- package/dist/commands/suggestions.js.map +1 -1
- package/dist/commands/takeover/_utils/agent-paths.js +2 -3
- package/dist/commands/takeover/_utils/agent-paths.js.map +1 -1
- package/dist/commands/takeover/_utils/cursor-store.js +1 -3
- package/dist/commands/takeover/_utils/cursor-store.js.map +1 -1
- package/dist/commands/takeover/_utils/write-codex-desktop-session.js +1 -4
- package/dist/commands/takeover/_utils/write-codex-desktop-session.js.map +1 -1
- package/dist/commands/takeover/_utils/write-codex-session.js +1 -2
- package/dist/commands/takeover/_utils/write-codex-session.js.map +1 -1
- package/dist/commands/uninstall.d.ts +0 -1
- package/dist/commands/uninstall.js +7 -7
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts +0 -10
- package/dist/commands/update.js +6 -32
- package/dist/commands/update.js.map +1 -1
- package/dist/jcode/plugin.json +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-cursor-db.js","sourceRoot":"","sources":["../../src/_utils/parse-cursor-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAiB,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAe,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-cursor-db.js","sourceRoot":"","sources":["../../src/_utils/parse-cursor-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,6 @@ const parseJson = (raw) => {
|
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
15
|
const messagesOf = (entry) => Array.isArray(entry?.messages) ? entry.messages.filter(isEntry) : [];
|
|
16
|
-
// Text blocks only — thinking blocks (`thinking`) and tool blocks are not the
|
|
17
|
-
// answer the user read.
|
|
18
16
|
const textOf = (content) => {
|
|
19
17
|
if (typeof content === "string")
|
|
20
18
|
return content;
|
|
@@ -30,7 +28,6 @@ const textOf = (content) => {
|
|
|
30
28
|
.join("\n")
|
|
31
29
|
.trim();
|
|
32
30
|
};
|
|
33
|
-
// Non-system/background rows in file order — the messages a turn is built from.
|
|
34
31
|
const visibleOf = (messages) => messages.filter((m) => m.display_role === undefined || m.display_role === null);
|
|
35
32
|
const idOf = (message, index) => typeof message.id === "string" && message.id ? message.id : `${index}`;
|
|
36
33
|
const turnOf = (messages) => {
|
|
@@ -54,12 +51,6 @@ const turnOf = (messages) => {
|
|
|
54
51
|
return null;
|
|
55
52
|
return { prompt, text, turnId: idOf(lastUser.m, lastUser.i) };
|
|
56
53
|
};
|
|
57
|
-
// The last user prompt, regardless of whether the assistant reply has landed
|
|
58
|
-
// yet. jcode fires turn_end BEFORE it flushes the assistant message to the
|
|
59
|
-
// session snapshot (measured ~5-7s later), so at hook time the file already
|
|
60
|
-
// has the prompt but not the answer. This lets the caller pair the real
|
|
61
|
-
// prompt with the answer jcode passes in the hook env (LAST_ASSISTANT_TEXT),
|
|
62
|
-
// so a turn is never dropped while waiting for the flush.
|
|
63
54
|
const lastUserPromptOf = (messages) => {
|
|
64
55
|
const visible = visibleOf(messages);
|
|
65
56
|
const lastUser = visible
|
|
@@ -89,15 +80,12 @@ const loadMessages = async (sessionId) => {
|
|
|
89
80
|
.flatMap(messagesOf)
|
|
90
81
|
: []),
|
|
91
82
|
];
|
|
92
|
-
// Journal entries may repeat snapshot rows — last write wins, order kept.
|
|
93
83
|
const byId = new Map();
|
|
94
84
|
for (const m of all)
|
|
95
85
|
byId.set(typeof m.id === "string" ? m.id : `${byId.size}`, m);
|
|
96
86
|
return [...byId.values()];
|
|
97
87
|
};
|
|
98
88
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
99
|
-
// The hook is detached, so a short wait costs nothing: turn_end can fire a
|
|
100
|
-
// beat before the answer reaches the journal.
|
|
101
89
|
const readJcodeTurn = async (sessionId, opts = {}) => {
|
|
102
90
|
if (!/^[A-Za-z0-9._-]+$/.test(sessionId))
|
|
103
91
|
return null;
|
|
@@ -115,9 +103,6 @@ const readJcodeTurn = async (sessionId, opts = {}) => {
|
|
|
115
103
|
};
|
|
116
104
|
return attempt(retries);
|
|
117
105
|
};
|
|
118
|
-
// Race-proof companion to readJcodeTurn: the current turn's user prompt from
|
|
119
|
-
// the session file, without waiting for the assistant flush. Returns null
|
|
120
|
-
// only when the file is unreadable or has no user message.
|
|
121
106
|
const readJcodeUserPrompt = async (sessionId) => {
|
|
122
107
|
if (!/^[A-Za-z0-9._-]+$/.test(sessionId))
|
|
123
108
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-jcode-session.js","sourceRoot":"","sources":["../../src/_utils/parse-jcode-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-jcode-session.js","sourceRoot":"","sources":["../../src/_utils/parse-jcode-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,9 +15,6 @@ const messageOf = (e) => e.message !== null && typeof e.message === "object"
|
|
|
15
15
|
? e.message
|
|
16
16
|
: null;
|
|
17
17
|
const str = (v) => (typeof v === "string" ? v : "");
|
|
18
|
-
// A pi `toolResult`/`bashExecution` message's output text: toolResult's
|
|
19
|
-
// `content` is a string OR an array of {text} blocks; bashExecution's
|
|
20
|
-
// `output` is always a flat string.
|
|
21
18
|
const outputTextOf = (content) => {
|
|
22
19
|
if (typeof content === "string")
|
|
23
20
|
return content;
|
|
@@ -28,9 +25,6 @@ const outputTextOf = (content) => {
|
|
|
28
25
|
.join("\n");
|
|
29
26
|
return "";
|
|
30
27
|
};
|
|
31
|
-
// toolResult/bashExecution are separate pi ENTRY types (not content blocks
|
|
32
|
-
// inside a message), so they cannot flow through extractPiSegments — build
|
|
33
|
-
// their tool_result segment directly from the entry's message payload.
|
|
34
28
|
const toolResultSegmentOf = (message) => {
|
|
35
29
|
if (message.role === "toolResult") {
|
|
36
30
|
const output = outputTextOf(message.content);
|
|
@@ -60,11 +54,6 @@ const toolResultSegmentOf = (message) => {
|
|
|
60
54
|
}
|
|
61
55
|
return null;
|
|
62
56
|
};
|
|
63
|
-
// Append a lifted tool_result segment onto the trailing assistant message
|
|
64
|
-
// (toolResult/bashExecution entries always follow the assistant turn that
|
|
65
|
-
// invoked them). If there is no trailing assistant message yet, start one
|
|
66
|
-
// carrying only segments — Task 6's segment-only-message handling lets it
|
|
67
|
-
// survive downstream folding with an empty `text`.
|
|
68
57
|
const appendToolResultSegment = (messages, segment) => {
|
|
69
58
|
const last = messages[messages.length - 1];
|
|
70
59
|
if (last && last.role === "assistant") {
|
|
@@ -76,9 +65,6 @@ const appendToolResultSegment = (messages, segment) => {
|
|
|
76
65
|
}
|
|
77
66
|
messages.push({ role: "assistant", text: "", segments: [segment] });
|
|
78
67
|
};
|
|
79
|
-
// Text of a pi message: a plain string (typical human prompt) or the
|
|
80
|
-
// concatenated `text` content blocks (assistant output; thinking/toolCall/
|
|
81
|
-
// image blocks are not conversation text).
|
|
82
68
|
const textOf = (content) => {
|
|
83
69
|
if (typeof content === "string")
|
|
84
70
|
return content;
|
|
@@ -92,14 +78,6 @@ const textOf = (content) => {
|
|
|
92
78
|
.map((p) => p.text)
|
|
93
79
|
.join("\n");
|
|
94
80
|
};
|
|
95
|
-
// Pi entries form a tree via id → parentId (branching via /fork and tree
|
|
96
|
-
// navigation creates alternates). Follow the chain up from the active leaf —
|
|
97
|
-
// the last CONVERSATION entry (a message whose role is user/assistant) that is
|
|
98
|
-
// nobody's parent — so abandoned branches aren't imported twice. Restricting
|
|
99
|
-
// leaf candidates to conversation entries matters: bookkeeping entries
|
|
100
|
-
// (labels, custom extension state, model changes) can trail the file as
|
|
101
|
-
// childless nodes, and picking one of those would walk a one-entry branch.
|
|
102
|
-
// Falls back to file order when the chain is unwalkable (format drift).
|
|
103
81
|
const activeBranch = (entries) => {
|
|
104
82
|
const withId = entries.filter((e) => typeof e.id === "string");
|
|
105
83
|
const byId = new Map(withId.map((e) => [e.id, e]));
|
|
@@ -125,17 +103,7 @@ const activeBranch = (entries) => {
|
|
|
125
103
|
const chain = walk(leaf, [], new Set());
|
|
126
104
|
return chain.length > 0 ? chain : entries;
|
|
127
105
|
};
|
|
128
|
-
//
|
|
129
|
-
// <timestamp>_<uuid>.jsonl) into the normalized transcript shape. The first
|
|
130
|
-
// line is a {type:"session"} header carrying the session id and cwd; entry
|
|
131
|
-
// lines wrap AgentMessages ({type:"message", id, parentId, message}).
|
|
132
|
-
// user/assistant messages are conversation text; toolResult/bashExecution are
|
|
133
|
-
// separate entry types (not content blocks) whose output is lifted onto the
|
|
134
|
-
// preceding assistant message as a tool_result segment. Custom-role messages
|
|
135
|
-
// are extension-injected context (glen's own per-turn recall arrives as
|
|
136
|
-
// customType "glen-context"; importing it would feed glen's output back in as
|
|
137
|
-
// memory). Tolerant by design: unknown entry types, missing fields, and
|
|
138
|
-
// unparseable lines are skipped, never fatal.
|
|
106
|
+
// Skip custom-role messages: glen's own recall arrives as customType "glen-context", and importing it would feed it back as memory.
|
|
139
107
|
const parsePiTranscript = (lines, fallbackSessionId) => {
|
|
140
108
|
const entries = lines.map(parseLine).filter((e) => e !== null);
|
|
141
109
|
const header = entries.find((e) => e.type === "session");
|
|
@@ -178,8 +146,6 @@ const parsePiTranscript = (lines, fallbackSessionId) => {
|
|
|
178
146
|
}
|
|
179
147
|
if (messages.every((m) => m.text.trim() === "" && (m.segments?.length ?? 0) === 0))
|
|
180
148
|
return null;
|
|
181
|
-
// Assistant messages carry the model that produced them; the last one wins
|
|
182
|
-
// (the model can change mid-session via /model).
|
|
183
149
|
const lastModel = [...conversation]
|
|
184
150
|
.reverse()
|
|
185
151
|
.map((e) => messageOf(e)?.model)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-pi-transcript.js","sourceRoot":"","sources":["../../src/_utils/parse-pi-transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AASnF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAgB,EAAE;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,OAAO,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;YAClD,CAAC,CAAE,MAAgB;YACnB,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,CAAQ,EAAgB,EAAE,CAC3C,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;IACjD,CAAC,CAAE,CAAC,CAAC,OAAiB;IACtB,CAAC,CAAC,IAAI,CAAC;AAEX,MAAM,GAAG,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAErE,
|
|
1
|
+
{"version":3,"file":"parse-pi-transcript.js","sourceRoot":"","sources":["../../src/_utils/parse-pi-transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,6 @@ const roleOf = (e) => e?.message?.role ??
|
|
|
13
13
|
e?.role;
|
|
14
14
|
const contentOf = (e) => extractText(e?.message?.content ?? e?.content);
|
|
15
15
|
const messageObjOf = (e) => e?.message ?? e ?? {};
|
|
16
|
-
// Claude returns tool OUTPUTS as their own `user`-role lines: a top-level
|
|
17
|
-
// `toolUseResult` field, or a `tool_result` block in the content array.
|
|
18
16
|
const isToolResultLine = (e) => {
|
|
19
17
|
const m = messageObjOf(e);
|
|
20
18
|
if (e.toolUseResult !== undefined)
|
|
@@ -23,8 +21,6 @@ const isToolResultLine = (e) => {
|
|
|
23
21
|
return (Array.isArray(content) &&
|
|
24
22
|
content.some((p) => p?.type === "tool_result"));
|
|
25
23
|
};
|
|
26
|
-
// Aggregate every assistant block + lifted tool_result across [promptIndex..end]
|
|
27
|
-
// — the full completed turn's tool I/O, matching the import parser.
|
|
28
24
|
const spanAssistantSegments = (span) => span.flatMap((e) => {
|
|
29
25
|
if (roleOf(e) === "assistant")
|
|
30
26
|
return extractClaudeSegments(messageObjOf(e));
|
|
@@ -63,8 +59,6 @@ const parseTranscript = (lines) => {
|
|
|
63
59
|
if (assistantIndex < 0)
|
|
64
60
|
return null;
|
|
65
61
|
const priorMessages = messages.slice(0, assistantIndex);
|
|
66
|
-
// The completed turn's "user prompt" is the last user line that is NOT
|
|
67
|
-
// a tool-result line (tool outputs arrive as their own user-role lines).
|
|
68
62
|
const userIndex = (() => {
|
|
69
63
|
const reversedIndex = [...priorMessages]
|
|
70
64
|
.reverse()
|
|
@@ -78,9 +72,7 @@ const parseTranscript = (lines) => {
|
|
|
78
72
|
if (!userMessage || !assistantMessage)
|
|
79
73
|
return null;
|
|
80
74
|
const span = messages.slice(userIndex);
|
|
81
|
-
// userMessageIndex feeds the Stop-hook idempotency key
|
|
82
|
-
// pre-Task-6 value: the last user line of ANY type before the assistant
|
|
83
|
-
// (not the filtered, non-tool-result userIndex above).
|
|
75
|
+
// userMessageIndex feeds the Stop-hook idempotency key: it must count user lines of any type, or keys collide with earlier turns.
|
|
84
76
|
const originalUserIndex = lastIndexOfRole(priorMessages, "user");
|
|
85
77
|
return {
|
|
86
78
|
user: contentOf(userMessage),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-transcript.js","sourceRoot":"","sources":["../../src/_utils/parse-transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAerE,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAU,EAAE;IAC/C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;SACtE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,CAA0B,EAAsB,EAAE,CAC9D,CAAC,EAAE,OAAmC,EAAE,IAA2B;IACpE,CAAC,EAAE,IAA2B,CAAC;AAElC,MAAM,SAAS,GAAG,CAAC,CAA0B,EAAU,EAAE,CACvD,WAAW,CAAE,CAAC,EAAE,OAAmC,EAAE,OAAO,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAE9E,MAAM,YAAY,GAAG,CAAC,CAA0B,EAA2B,EAAE,CAC1E,CAAC,EAAE,OAAmC,IAAI,CAAC,IAAI,EAAE,CAAC;AAErD,
|
|
1
|
+
{"version":3,"file":"parse-transcript.js","sourceRoot":"","sources":["../../src/_utils/parse-transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,21 +6,9 @@ import { GLEN_JCODE_HOOK_LINES } from "./jcode-hook-lines.js";
|
|
|
6
6
|
import { hasHookLines, readHooksTable } from "./jcode-hooks-toml.js";
|
|
7
7
|
import { jcodeConfigTomlPath } from "./jcode-paths.js";
|
|
8
8
|
import { runBin } from "./run-bin.js";
|
|
9
|
-
// A line whose first token is the glen plugin: claude lists `❯ glen@glen`
|
|
10
|
-
// entries (selection marker before the name), codex lists plugin names
|
|
11
|
-
// (`glen — …`) — match exactly `glen` (optionally `@<marketplace>`) at line
|
|
12
|
-
// start, tolerating common list markers (`❯`, `>`, `•`, `*`, `-`) before the
|
|
13
|
-
// name, so `foo@glen`, `glenda`, or a description merely mentioning glen
|
|
14
|
-
// never false-positives.
|
|
15
9
|
const GLEN_PLUGIN_LINE = /^[\s>❯•*-]*glen(@\S+)?(\s|$)/im;
|
|
16
|
-
// Pi settings path (GLEN_PI_SETTINGS_PATH env var is for test overrides only).
|
|
17
10
|
const piSettingsPath = () => process.env.GLEN_PI_SETTINGS_PATH ??
|
|
18
11
|
join(homedir(), ".pi", "agent", "settings.json");
|
|
19
|
-
// Pi has no `plugin list` — `pi install` records the package in the `packages`
|
|
20
|
-
// array of ~/.pi/agent/settings.json (string or `{ source }` object entries),
|
|
21
|
-
// so that file is the source of truth. A missing file means pi has no packages
|
|
22
|
-
// at all (fresh install) → not-installed; an unreadable/corrupt file → unknown
|
|
23
|
-
// (callers fall back to attempting an install, which is idempotent).
|
|
24
12
|
const piPluginStatus = () => {
|
|
25
13
|
const raw = (() => {
|
|
26
14
|
try {
|
|
@@ -51,9 +39,6 @@ const piPluginStatus = () => {
|
|
|
51
39
|
return "unknown";
|
|
52
40
|
}
|
|
53
41
|
};
|
|
54
|
-
// jcode has no plugin CLI — the two glen hook lines in ~/.jcode/config.toml
|
|
55
|
-
// ARE the install. Missing file → not-installed; unparseable → unknown (the
|
|
56
|
-
// installer refuses to touch it and says why).
|
|
57
42
|
const jcodePluginStatus = () => {
|
|
58
43
|
const raw = (() => {
|
|
59
44
|
try {
|
|
@@ -74,10 +59,6 @@ const jcodePluginStatus = () => {
|
|
|
74
59
|
? "installed"
|
|
75
60
|
: "not-installed";
|
|
76
61
|
};
|
|
77
|
-
// Detects whether the glen plugin is installed for an agent — by parsing
|
|
78
|
-
// `<agent> plugin list` output (claude/codex), or by reading pi's settings
|
|
79
|
-
// file (pi has no plugin-list CLI). "unknown" (agent missing or check failed)
|
|
80
|
-
// lets callers fall back to attempting an install.
|
|
81
62
|
const glenPluginStatus = (agentBin) => {
|
|
82
63
|
if (agentBin === "jcode")
|
|
83
64
|
return jcodePluginStatus();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-status.js","sourceRoot":"","sources":["../../src/_utils/plugin-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,
|
|
1
|
+
{"version":3,"file":"plugin-status.js","sourceRoot":"","sources":["../../src/_utils/plugin-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,6 @@ import { err, ok } from "./result.js";
|
|
|
7
7
|
import { readState } from "./state.js";
|
|
8
8
|
import { handle426AndReexec, maybeSpawnBackgroundUpdate } from "./update.js";
|
|
9
9
|
import { cliVersion } from "./version.js";
|
|
10
|
-
// Shared POST to a /api/mcp/route/* endpoint with the standard glen auth
|
|
11
|
-
// headers + 426/401/403 handling. The HTTP bridge maps typed errors to
|
|
12
|
-
// statuses + a JSON { error } body, so CONFLICT/NOT_FOUND surfaces its
|
|
13
|
-
// message instead of an opaque 500.
|
|
14
10
|
const postRoute = async (url, body, options = {}) => {
|
|
15
11
|
void maybeSpawnBackgroundUpdate();
|
|
16
12
|
const creds = await readCredentials();
|
|
@@ -40,15 +36,12 @@ const postRoute = async (url, body, options = {}) => {
|
|
|
40
36
|
what: "no active organization",
|
|
41
37
|
remedy: "run `glen org switch`",
|
|
42
38
|
}));
|
|
43
|
-
// If the server sent a JSON { error } body, surface it — it's a permission/ownership
|
|
44
|
-
// error (e.g. "Only the skill's author can update it."), not a session expiry.
|
|
45
39
|
const serverMsg = res.value.json?.error;
|
|
46
40
|
if (typeof serverMsg === "string")
|
|
47
41
|
return err(cliErr({
|
|
48
42
|
what: serverMsg,
|
|
49
43
|
remedy: "ask the skill's author, or use a different name",
|
|
50
44
|
}));
|
|
51
|
-
// No JSON body → bodyless edge-auth failure; prompt re-login.
|
|
52
45
|
return err(cliErr({
|
|
53
46
|
what: "your connection expired",
|
|
54
47
|
remedy: "run `glen login` to reconnect",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-route.js","sourceRoot":"","sources":["../../src/_utils/post-route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAe,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,
|
|
1
|
+
{"version":3,"file":"post-route.js","sourceRoot":"","sources":["../../src/_utils/post-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { config } from "./config.js";
|
|
2
|
-
// owner/repo segments stop at the first char that isn't a GitHub-name char,
|
|
3
|
-
// so a trailing ")"/"."/"," after the number is naturally excluded.
|
|
4
2
|
const PR_URL_RE = /https?:\/\/github\.com\/([A-Za-z0-9._-]+)\/([A-Za-z0-9._-]+)\/pull\/(\d+)/g;
|
|
5
3
|
const extractPrUrls = (text) => {
|
|
6
4
|
const seen = new Set();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-review-link.js","sourceRoot":"","sources":["../../src/_utils/pr-review-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,
|
|
1
|
+
{"version":3,"file":"pr-review-link.js","sourceRoot":"","sources":["../../src/_utils/pr-review-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,SAAS,GACb,4EAA4E,CAAC;AAE/E,MAAM,aAAa,GAAG,CACpB,IAAY,EAC4C,EAAE;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACjD,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,EAIvB,EAAU,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -2,15 +2,7 @@ import { mkdir, stat, writeFile } from "node:fs/promises";
|
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { fromPromise } from "./result.js";
|
|
5
|
-
//
|
|
6
|
-
// every turn is noise. The slot is claimed once the request comes back
|
|
7
|
-
// accepted — a transport failure or an off-the-record refusal leaves it open,
|
|
8
|
-
// but a deployment with no Slack configured burns it, since retrying there
|
|
9
|
-
// can't reach anyone either.
|
|
10
|
-
//
|
|
11
|
-
// Claims expire: the fallback key below is the cwd, not a session, so without
|
|
12
|
-
// a window one proactive ticket would silence a directory permanently rather
|
|
13
|
-
// than for the session the cap is meant to cover.
|
|
5
|
+
// Claims expire: the fallback key is the cwd, so without a TTL one ticket would silence a directory forever.
|
|
14
6
|
const CLAIM_TTL_MS = 8 * 60 * 60 * 1000;
|
|
15
7
|
const slotFor = (key) => join(process.env.GLEN_PROACTIVE_TICKET_DIR ??
|
|
16
8
|
join(homedir(), ".glen", "proactive-tickets"), `${key.replace(/[^\w.-]/g, "_").slice(-120)}.claimed`);
|
|
@@ -18,8 +10,6 @@ const proactiveSlotTaken = async (key) => {
|
|
|
18
10
|
const found = await fromPromise(stat(slotFor(key)));
|
|
19
11
|
return found.ok && Date.now() - found.value.mtimeMs < CLAIM_TTL_MS;
|
|
20
12
|
};
|
|
21
|
-
// Best-effort: if we can't record the claim, the next proactive filing goes
|
|
22
|
-
// through. A duplicate ticket beats a silently dropped one.
|
|
23
13
|
const takeProactiveSlot = async (key) => {
|
|
24
14
|
const slot = slotFor(key);
|
|
25
15
|
const made = await fromPromise(mkdir(dirname(slot), { recursive: true, mode: 0o700 }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proactive-ticket-log.js","sourceRoot":"","sources":["../../src/_utils/proactive-ticket-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,
|
|
1
|
+
{"version":3,"file":"proactive-ticket-log.js","sourceRoot":"","sources":["../../src/_utils/proactive-ticket-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,6GAA6G;AAC7G,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE,CACtC,IAAI,CACF,OAAO,CAAC,GAAG,CAAC,yBAAyB;IACnC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,mBAAmB,CAAC,EAC/C,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CACtD,CAAC;AAEJ,MAAM,kBAAkB,GAAG,KAAK,EAAE,GAAW,EAAoB,EAAE;IACjE,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,MAAM,WAAW,CAC5B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CACvD,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO;IACrB,MAAM,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -7,11 +7,7 @@ import { httpJson } from "./http.js";
|
|
|
7
7
|
import { readSessionForCwd } from "./session-map.js";
|
|
8
8
|
import { readState } from "./state.js";
|
|
9
9
|
import { cliVersion } from "./version.js";
|
|
10
|
-
//
|
|
11
|
-
// `-C <path>` between `git` and `commit`, in any &&/;/|-separated segment — but
|
|
12
|
-
// not `git commit --dry-run`. Tokenized rather than one big regex: a repeated
|
|
13
|
-
// alternation like `(\s+-C\s+\S+|\s+-[^\s]+)*` is prone to catastrophic
|
|
14
|
-
// backtracking (ReDoS). Splitting on whitespace/separators is strictly linear.
|
|
10
|
+
// Tokenized, not one regex: a repeated alternation here is prone to catastrophic backtracking (ReDoS).
|
|
15
11
|
const VALUE_FLAGS = new Set(["-C", "-c", "--git-dir", "--work-tree"]);
|
|
16
12
|
const segmentIsGitCommit = (segment) => {
|
|
17
13
|
const tokens = segment.trim().split(/\s+/).filter(Boolean);
|
|
@@ -19,8 +15,6 @@ const segmentIsGitCommit = (segment) => {
|
|
|
19
15
|
if (gitIdx === -1)
|
|
20
16
|
return false;
|
|
21
17
|
const rest = tokens.slice(gitIdx + 1);
|
|
22
|
-
// The git subcommand is the first token that is neither a flag nor the value
|
|
23
|
-
// of a value-taking flag (e.g. the path after `-C`).
|
|
24
18
|
const subcommand = rest.find((t, i) => !t.startsWith("-") && !VALUE_FLAGS.has(rest[i - 1] ?? ""));
|
|
25
19
|
return subcommand === "commit" && !rest.includes("--dry-run");
|
|
26
20
|
};
|
|
@@ -65,7 +59,6 @@ const recordCommitAnchor = async (event) => {
|
|
|
65
59
|
conversationId,
|
|
66
60
|
...(ctx.branch ? { branch: ctx.branch } : {}),
|
|
67
61
|
};
|
|
68
|
-
// httpJson never throws (returns a Result); we ignore the outcome — best-effort.
|
|
69
62
|
await httpJson(config.commitAnchorUrl, {
|
|
70
63
|
method: "POST",
|
|
71
64
|
headers: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-commit-anchor.js","sourceRoot":"","sources":["../../src/_utils/record-commit-anchor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,
|
|
1
|
+
{"version":3,"file":"record-commit-anchor.js","sourceRoot":"","sources":["../../src/_utils/record-commit-anchor.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,7 @@ import { buildGlenHeaders } from "./glen-headers.js";
|
|
|
3
3
|
import { httpJson } from "./http.js";
|
|
4
4
|
import { syncModeFromServer } from "./sync-mode-from-server.js";
|
|
5
5
|
import { cliVersion } from "./version.js";
|
|
6
|
-
//
|
|
7
|
-
// Best-effort and privacy-safe: an unavailable or invalid server response leaves
|
|
8
|
-
// the current local mode in place.
|
|
9
|
-
//
|
|
10
|
-
// teamMemoryBlock is not schema-validated here and is injected verbatim into a
|
|
11
|
-
// model's context downstream, so extraction is defensive: anything but a
|
|
12
|
-
// string (missing, null, wrong type) becomes null.
|
|
6
|
+
// teamMemoryBlock isn't schema-validated and is injected verbatim into model context, so accept strings only.
|
|
13
7
|
const extractTeamMemoryBlock = (json) => {
|
|
14
8
|
const block = json?.teamMemoryBlock;
|
|
15
9
|
return typeof block === "string" ? block : null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refresh-control-state.js","sourceRoot":"","sources":["../../src/_utils/refresh-control-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,
|
|
1
|
+
{"version":3,"file":"refresh-control-state.js","sourceRoot":"","sources":["../../src/_utils/refresh-control-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,8GAA8G;AAC9G,MAAM,sBAAsB,GAAG,CAAC,IAAa,EAAiB,EAAE;IAC9D,MAAM,KAAK,GAAI,IAA6C,EAAE,eAAe,CAAC;IAC9E,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAC/B,GAAW,EACX,KAAgB,EAC+C,EAAE;IACjE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE;QACvD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;SACzD;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC,sBAAsB;KACzC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;QACnD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,CAAC,MAAM,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;IAC3E,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,eAAe,EAAE,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;KAC7D,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
// The HTML the browser lands on after the OAuth handoff redirects to our loopback.
|
|
2
|
-
// Themed to match the glen dashboard: Hanken Grotesk, glen green, stone neutrals,
|
|
3
|
-
// sharp corners (the app's --radius is 0), light/dark via prefers-color-scheme.
|
|
4
|
-
// Two variants: success (code received) and error (provider bounced back, no code).
|
|
5
|
-
// The Glen mark — base64 transparent PNG (96×96), embedded so the mark always
|
|
6
|
-
// renders (mirrors the dashboard/email mark). Fonts load from Google (the browser
|
|
7
|
-
// is online right after the OAuth round-trip) with a system fallback.
|
|
8
1
|
const GLEN_LOGO_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABmJLR0QA/wD/AP+gvaeTAAAE4ElEQVR4nO3bTUxcVRQH8P+5DyiM0kKdeQN0VEhMaEJI1KaYJkZAMMAMJTU6rR900aqNZWWMujA1tosuZNHEmDQ2ph/0ATUTE9NEiW60MSbGr40LVyaatCt0KXQYZt5xgd2QQpnH/XiQ81vzzrmZ//DmvnvvA4QQQgghhBBCCCGEEEIIIYQQQgghhBDbDbkewHaUvDjWqOqWBwAaBtADYO/80bnE3f62xu7AtrdkMNzpkZpgLr8C0H0buUYC0KBlZrQn5PAsGIPM1V0rAWxCy6WRVFhL58IwfBkRb+cSQESpIHs4BJ8H8MBm6kgAVcoU8g2l4uKHAL+mYw4jAVQhGQy1Li0tXCfCfl01JYANSk9nu8MQXxLhQZ11JYANSAYHH2eufE2EpO7aSnfB7cafGj2gUPkG0P/hAxLAulquDHWBwi8A7DLVQ25Ba9g9PZIJmeYA7DbZZ80A/CD7B5jmofhPZv4tDNWvjWHq+7+OXSmaHFAcpAp991NJfQXwQ6Z7rfcfkABxOxjtBOr3FGPRm7/tX81+FxJ9/k9mYQ79N8qmB2gdg9RM4hIzd9loV91vAKMBhCEF/jh1K/GDP52baC7kjd0fXfCnR04xI2+rX+QfYQL2gPlU7dK/P/pB7mRXIV+nc2AupK4OPwnQ+zZ7apgF0U6A3/u7uHjDnxo+sPl6bjQXBneRUgEAz2ZffdNQ4nYoVfCD7Js4fXrLTW9ri3XnwWi33Vf3B+UBeMt/5KcgeXGsUXNtY/xg5BAIL7nobeabyuinHeXryWCo1Uh9jVa+KPSRq/7GbhXE2KvY+8z/ZCBtqocOXu3yWQAZV/3N3qsJHdxQ/2mmMGT0aTKq1NTIY0w04XIMxn8sibmztKQu7/vlRK3pXtUijyZhedazmqXZCu2/9fvNSTu9NiYZ5HJgDLoeh7XpIhMdSV/Ljdnqt65C3lOED1wPA7C8HM3lcDIOM6N0cTEPS2s992L5gYl2EtecAzs8kccgJn7XWf9VrD+xEnFvcnb4iO2+d/hB7lkA3a76r+ZkyUCF6kxmanSPi94gfsdJ3zW4WrNpXCa2uuoIrGyuA3jCdt/1OFs0Y+LR1Ez2KZs9FVXesNlvI9yuWjKdwbd9Vvalmy4faoLFjZaNchoAMXembibGbfTaUVN6HkC9jV7VcL5uT8Rv29jWZOBF0z2icB4AQM01pYWTJjv8//DXa7JHVDEIACDGq22zfUZOngGAx94LcLzotpZYBAAgUSknXjdVPKR43n6A+AQAJhz3Z8e0b960zmQfJug7Tq5bbAIAUI/ysvbNkbBCzpec1xOnAABF47p3z5h4QGc93eIVAKOhVFTHNNYjAP3a6hkQrwAAgHC87cLBu77UXK10kOsC0KKjlinxCwDUvNxQOayjUgh+Wkcdk2IYAECKTug4XUdEPTrGY1IsAwBze7Lj580/uRIe1TAao+IZAABP8dHNXJ8p5BvA3KlrPKbENgAwBjezgV9evt2NLfAKVmwDYEKNIhX5wGwlDGNx6uFeYhvAChrHhX2RTtQRqEP3aEyIdwCMdCqRjvYkS9yudzBmxDsAAESI9mPs4GWLKGIfABi9yWvPtEW4MtbH4u+IfwCAUpW6QxGua9I+EgO2QgAA83MRrtpWr88KIYQQQgghhBBCCCGEEEIISTX9B+l2HtJhmbi6AAAAAElFTkSuQmCC";
|
|
9
2
|
const CHECK_PATH = "M20 6 9 17l-5-5";
|
|
10
3
|
const CROSS_PATH = "M18 6 6 18M6 6l12 12";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-callback-page.js","sourceRoot":"","sources":["../../src/_utils/render-callback-page.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"render-callback-page.js","sourceRoot":"","sources":["../../src/_utils/render-callback-page.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GACpB,suDAAsuD,CAAC;AAEzuD,MAAM,UAAU,GAAG,iBAAiB,CAAC;AACrC,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAE1C,MAAM,UAAU,GAAG,CAAC,CAAS,EAAU,EAAE,CACvC,CAAC,CAAC,OAAO,CACP,QAAQ,EACR,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAC5D,CAAC;AAEJ,MAAM,kBAAkB,GAAG,CAAC,EAAW,EAAU,EAAE;IACjD,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,4BAA4B,CAAC;IACtE,MAAM,OAAO,GAAG,EAAE;QAChB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,iFAAiF,CAAC;IACtF,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IAC9C,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC/D,MAAM,WAAW,GAAG,OAAO;QACzB,CAAC,CAAC,sBAAsB,UAAU,CAAC,OAAO,CAAC,MAAM;QACjD,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mDA+D0C,gBAAgB;kBACjD,UAAU;2IAC+G,QAAQ;;UAEzI,KAAK;MACT,WAAW;;;;QAIT,CAAC;AACT,CAAC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
/** The repo a historical transcript ran in, recovered from the `cwd` it
|
|
2
|
-
* recorded. A checkout that still exists answers for itself. A checkout that
|
|
3
|
-
* is gone — overwhelmingly a cleaned-up worktree, which lives inside the repo
|
|
4
|
-
* it was forked from — is recovered from its nearest surviving ancestor, but
|
|
5
|
-
* only when that ancestor knows the branch the transcript recorded; without
|
|
6
|
-
* that proof the ancestor could be an unrelated repo the session merely sat
|
|
7
|
-
* inside. */
|
|
8
1
|
export declare const resolveImportWorkspace: (cwd: string | undefined, branch: string | undefined) => {
|
|
9
2
|
readonly repoName: string;
|
|
10
3
|
readonly remoteUrl: string;
|
|
@@ -17,10 +17,7 @@ const gitOut = (dir, args) => {
|
|
|
17
17
|
}
|
|
18
18
|
};
|
|
19
19
|
const repoCache = new Map();
|
|
20
|
-
// `origin
|
|
21
|
-
// checked out today has nothing to do with the session being imported. For the
|
|
22
|
-
// same reason nothing here reads HEAD — today's commit would be a lie about a
|
|
23
|
-
// historical turn, so the transcript's own branch is the only ref we keep.
|
|
20
|
+
// Always `origin`, and never read HEAD: today's checkout says nothing about the historical session being imported.
|
|
24
21
|
const repoAt = (dir) => {
|
|
25
22
|
const cached = repoCache.get(dir);
|
|
26
23
|
if (cached !== undefined)
|
|
@@ -60,18 +57,9 @@ const nearestExistingAncestor = (path) => {
|
|
|
60
57
|
return null;
|
|
61
58
|
return existsSync(parent) ? parent : nearestExistingAncestor(parent);
|
|
62
59
|
};
|
|
63
|
-
/** The repo a historical transcript ran in, recovered from the `cwd` it
|
|
64
|
-
* recorded. A checkout that still exists answers for itself. A checkout that
|
|
65
|
-
* is gone — overwhelmingly a cleaned-up worktree, which lives inside the repo
|
|
66
|
-
* it was forked from — is recovered from its nearest surviving ancestor, but
|
|
67
|
-
* only when that ancestor knows the branch the transcript recorded; without
|
|
68
|
-
* that proof the ancestor could be an unrelated repo the session merely sat
|
|
69
|
-
* inside. */
|
|
70
60
|
export const resolveImportWorkspace = (cwd, branch) => {
|
|
71
61
|
if (!cwd)
|
|
72
62
|
return null;
|
|
73
|
-
// An existing path inside a checkout resolves via git's own upward walk, so
|
|
74
|
-
// a miss here means there is no repo above it either.
|
|
75
63
|
if (existsSync(cwd)) {
|
|
76
64
|
const direct = repoAt(cwd);
|
|
77
65
|
return direct && { repoName: direct.repoName, remoteUrl: direct.remoteUrl };
|