ccpoke 1.7.1 → 1.7.2

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.
Files changed (104) hide show
  1. package/ccpoke-lock.json +102 -0
  2. package/dist/agent/claude-code/claude-code-installer.d.ts +7 -21
  3. package/dist/agent/claude-code/claude-code-installer.js +67 -317
  4. package/dist/agent/claude-code/claude-code-installer.js.map +1 -1
  5. package/dist/agent/claude-code/claude-code-provider.d.ts +1 -1
  6. package/dist/agent/claude-code/claude-code-provider.js +6 -6
  7. package/dist/agent/claude-code/claude-code-provider.js.map +1 -1
  8. package/dist/agent/codex/codex-installer.d.ts +7 -12
  9. package/dist/agent/codex/codex-installer.js +50 -105
  10. package/dist/agent/codex/codex-installer.js.map +1 -1
  11. package/dist/agent/codex/codex-provider.d.ts +1 -1
  12. package/dist/agent/codex/codex-provider.js +6 -6
  13. package/dist/agent/codex/codex-provider.js.map +1 -1
  14. package/dist/agent/cursor/cursor-installer.d.ts +7 -13
  15. package/dist/agent/cursor/cursor-installer.js +53 -109
  16. package/dist/agent/cursor/cursor-installer.js.map +1 -1
  17. package/dist/agent/cursor/cursor-provider.d.ts +1 -1
  18. package/dist/agent/cursor/cursor-provider.js +6 -6
  19. package/dist/agent/cursor/cursor-provider.js.map +1 -1
  20. package/dist/agent/gemini-cli/gemini-cli-installer.d.ts +7 -12
  21. package/dist/agent/gemini-cli/gemini-cli-installer.js +64 -91
  22. package/dist/agent/gemini-cli/gemini-cli-installer.js.map +1 -1
  23. package/dist/agent/gemini-cli/gemini-cli-provider.d.ts +1 -1
  24. package/dist/agent/gemini-cli/gemini-cli-provider.js +6 -6
  25. package/dist/agent/gemini-cli/gemini-cli-provider.js.map +1 -1
  26. package/dist/agent/gemini-cli/gemini-cli-settings.d.ts +1 -3
  27. package/dist/agent/gemini-cli/gemini-cli-settings.js +6 -33
  28. package/dist/agent/gemini-cli/gemini-cli-settings.js.map +1 -1
  29. package/dist/agent/opencode/opencode-installer.d.ts +7 -9
  30. package/dist/agent/opencode/opencode-installer.js +18 -130
  31. package/dist/agent/opencode/opencode-installer.js.map +1 -1
  32. package/dist/agent/opencode/opencode-provider.d.ts +1 -1
  33. package/dist/agent/opencode/opencode-provider.js +6 -6
  34. package/dist/agent/opencode/opencode-provider.js.map +1 -1
  35. package/dist/agent/types.d.ts +12 -5
  36. package/dist/channel/discord/discord-session-command-handler.js +1 -0
  37. package/dist/channel/discord/discord-session-command-handler.js.map +1 -1
  38. package/dist/channel/telegram/telegram-channel.d.ts +1 -0
  39. package/dist/channel/telegram/telegram-channel.js +30 -28
  40. package/dist/channel/telegram/telegram-channel.js.map +1 -1
  41. package/dist/commands/setup.js +96 -38
  42. package/dist/commands/setup.js.map +1 -1
  43. package/dist/commands/update.js +3 -1
  44. package/dist/commands/update.js.map +1 -1
  45. package/dist/hooks/hook-env-writer.d.ts +4 -0
  46. package/dist/hooks/hook-env-writer.js +33 -0
  47. package/dist/hooks/hook-env-writer.js.map +1 -0
  48. package/dist/hooks/hook-lock.d.ts +11 -0
  49. package/dist/hooks/hook-lock.js +40 -0
  50. package/dist/hooks/hook-lock.js.map +1 -0
  51. package/dist/hooks/hook-script-copier.d.ts +6 -0
  52. package/dist/hooks/hook-script-copier.js +49 -0
  53. package/dist/hooks/hook-script-copier.js.map +1 -0
  54. package/dist/i18n/locales/en.js +4 -3
  55. package/dist/i18n/locales/en.js.map +1 -1
  56. package/dist/i18n/locales/vi.js +4 -3
  57. package/dist/i18n/locales/vi.js.map +1 -1
  58. package/dist/i18n/locales/zh.js +4 -3
  59. package/dist/i18n/locales/zh.js.map +1 -1
  60. package/dist/i18n/types.d.ts +3 -2
  61. package/dist/index.js +3 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/tmux/tmux-scanner.js +45 -17
  64. package/dist/tmux/tmux-scanner.js.map +1 -1
  65. package/dist/tmux/tmux-session-resolver.js +8 -8
  66. package/dist/tmux/tmux-session-resolver.js.map +1 -1
  67. package/dist/utils/atomic-file.d.ts +3 -0
  68. package/dist/utils/atomic-file.js +26 -0
  69. package/dist/utils/atomic-file.js.map +1 -0
  70. package/dist/utils/constants.d.ts +1 -0
  71. package/dist/utils/constants.js +15 -2
  72. package/dist/utils/constants.js.map +1 -1
  73. package/dist/utils/paths.d.ts +5 -0
  74. package/dist/utils/paths.js +5 -0
  75. package/dist/utils/paths.js.map +1 -1
  76. package/hooks/claude-code-notification.cmd +13 -0
  77. package/hooks/claude-code-notification.sh +10 -0
  78. package/hooks/claude-code-permission-request.cmd +13 -0
  79. package/hooks/claude-code-permission-request.sh +13 -0
  80. package/hooks/claude-code-pretooluse.cmd +15 -0
  81. package/hooks/claude-code-pretooluse.sh +13 -0
  82. package/hooks/claude-code-session-start.cmd +13 -0
  83. package/hooks/claude-code-session-start.sh +17 -0
  84. package/hooks/claude-code-stop.cmd +11 -0
  85. package/hooks/claude-code-stop.sh +8 -0
  86. package/hooks/codex-notify.cmd +12 -0
  87. package/hooks/codex-notify.sh +8 -0
  88. package/hooks/cursor-stop.cmd +12 -0
  89. package/hooks/cursor-stop.sh +8 -0
  90. package/hooks/gemini-notification.cmd +12 -0
  91. package/hooks/gemini-notification.sh +10 -0
  92. package/hooks/gemini-session-start.cmd +12 -0
  93. package/hooks/gemini-session-start.sh +10 -0
  94. package/hooks/gemini-stop.cmd +12 -0
  95. package/hooks/gemini-stop.sh +10 -0
  96. package/hooks/lib/common.cmd +12 -0
  97. package/hooks/lib/common.sh +39 -0
  98. package/hooks/lib/json-merge.cjs +11 -0
  99. package/hooks/lib/json-read.cjs +9 -0
  100. package/hooks/opencode-notify.js +119 -0
  101. package/package.json +6 -2
  102. package/dist/utils/windows-hook-script-builder.d.ts +0 -2
  103. package/dist/utils/windows-hook-script-builder.js +0 -24
  104. package/dist/utils/windows-hook-script-builder.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-provider.js","sourceRoot":"","sources":["../../../src/agent/cursor/cursor-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor-provider.js","sourceRoot":"","sources":["../../../src/agent/cursor/cursor-provider.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,7 @@
1
- export declare class GeminiCliInstaller {
2
- static isInstalled(): boolean;
3
- static verifyIntegrity(): {
4
- complete: boolean;
5
- missing: string[];
6
- };
7
- static install(hookPort: number, hookSecret: string): void;
8
- static uninstall(): void;
9
- private static writeScript;
10
- private static removeScript;
11
- private static removeFromSettings;
12
- }
1
+ import type { IntegrityResult } from "../types.js";
2
+ export declare const geminiCliInstaller: {
3
+ isInstalled(): boolean;
4
+ verifyIntegrity(): IntegrityResult;
5
+ install(): void;
6
+ uninstall(): void;
7
+ };
@@ -1,13 +1,28 @@
1
- import { mkdirSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
2
- import { dirname } from "node:path";
1
+ import { HookScriptCopier } from "../../hooks/hook-script-copier.js";
2
+ import { readJsonFile, writeJsonFile } from "../../utils/atomic-file.js";
3
3
  import { isWindows } from "../../utils/constants.js";
4
- import { getPackageVersion, paths, toPosixPath } from "../../utils/paths.js";
5
- import { buildWindowsHookScript } from "../../utils/windows-hook-script-builder.js";
6
- import { buildHookConfigs, hasCcpokeHook, isScriptCurrent, isScriptPresent, readGeminiSettings, } from "./gemini-cli-settings.js";
7
- export class GeminiCliInstaller {
8
- static isInstalled() {
4
+ import { paths, toPosixPath } from "../../utils/paths.js";
5
+ import { buildHookConfigs, hasCcpokeHook, isScriptCurrent, isScriptPresent, } from "./gemini-cli-settings.js";
6
+ const SOURCE_MAP = {
7
+ "ccpoke-stop": "gemini-stop",
8
+ "ccpoke-session-start": "gemini-session-start",
9
+ "ccpoke-notification": "gemini-notification",
10
+ };
11
+ function copyScripts() {
12
+ HookScriptCopier.copyLib();
13
+ const ext = isWindows() ? ".cmd" : ".sh";
14
+ for (const cfg of buildHookConfigs()) {
15
+ const baseName = SOURCE_MAP[cfg.hookName];
16
+ const sourceFile = baseName ? `${baseName}${ext}` : undefined;
17
+ if (sourceFile) {
18
+ HookScriptCopier.copy(sourceFile, cfg.scriptPath);
19
+ }
20
+ }
21
+ }
22
+ export const geminiCliInstaller = {
23
+ isInstalled() {
9
24
  try {
10
- const settings = readGeminiSettings();
25
+ const settings = readJsonFile(paths.geminiSettings, {});
11
26
  if (!settings.hooks)
12
27
  return false;
13
28
  return buildHookConfigs().every((cfg) => hasCcpokeHook(settings.hooks?.[cfg.event] ?? []));
@@ -15,11 +30,11 @@ export class GeminiCliInstaller {
15
30
  catch {
16
31
  return false;
17
32
  }
18
- }
19
- static verifyIntegrity() {
33
+ },
34
+ verifyIntegrity() {
20
35
  const missing = [];
21
36
  try {
22
- const settings = readGeminiSettings();
37
+ const settings = readJsonFile(paths.geminiSettings, {});
23
38
  for (const cfg of buildHookConfigs()) {
24
39
  if (!hasCcpokeHook(settings.hooks?.[cfg.event] ?? []))
25
40
  missing.push(`${cfg.event} hook in settings`);
@@ -28,98 +43,55 @@ export class GeminiCliInstaller {
28
43
  catch {
29
44
  missing.push("settings.json");
30
45
  }
46
+ const ext = isWindows() ? ".cmd" : ".sh";
31
47
  for (const cfg of buildHookConfigs()) {
48
+ const baseName = SOURCE_MAP[cfg.hookName];
49
+ const sourceFile = baseName ? `${baseName}${ext}` : undefined;
32
50
  if (!isScriptPresent(cfg.scriptPath)) {
33
51
  missing.push(`${cfg.hookName} script file`);
34
52
  }
35
- else if (!isScriptCurrent(cfg.scriptPath)) {
53
+ else if (sourceFile && !isScriptCurrent(cfg.scriptPath, sourceFile)) {
36
54
  missing.push(`outdated ${cfg.hookName} script`);
37
55
  }
38
56
  }
39
57
  return { complete: missing.length === 0, missing };
40
- }
41
- static install(hookPort, hookSecret) {
42
- GeminiCliInstaller.uninstall();
43
- const settings = readGeminiSettings();
44
- if (!settings.hooks)
58
+ },
59
+ install() {
60
+ geminiCliInstaller.uninstall();
61
+ const settings = readJsonFile(paths.geminiSettings, {});
62
+ if (!settings.hooks) {
45
63
  settings.hooks = {};
46
- for (const cfg of buildHookConfigs()) {
47
- const existing = (settings.hooks[cfg.event] ?? []).filter((e) => !hasCcpokeHook([e]));
48
- existing.push({
49
- matcher: cfg.matcher,
50
- hooks: [
51
- {
52
- name: cfg.hookName,
53
- type: "command",
54
- command: toPosixPath(cfg.scriptPath),
55
- timeout: cfg.timeout,
56
- },
57
- ],
58
- });
59
- settings.hooks[cfg.event] = existing;
60
64
  }
61
- mkdirSync(dirname(paths.geminiSettings), { recursive: true });
62
- const tmp = `${paths.geminiSettings}.tmp`;
63
- writeFileSync(tmp, JSON.stringify(settings, null, 2));
64
- renameSync(tmp, paths.geminiSettings);
65
65
  for (const cfg of buildHookConfigs()) {
66
- GeminiCliInstaller.writeScript(cfg, hookPort, hookSecret);
67
- }
68
- }
69
- static uninstall() {
70
- GeminiCliInstaller.removeFromSettings();
71
- for (const cfg of buildHookConfigs()) {
72
- GeminiCliInstaller.removeScript(cfg.scriptPath);
73
- }
74
- }
75
- static writeScript(cfg, hookPort, hookSecret) {
76
- mkdirSync(paths.hooksDir, { recursive: true });
77
- const version = getPackageVersion();
78
- if (isWindows()) {
79
- writeFileSync(cfg.scriptPath, buildWindowsHookScript(version, hookPort, cfg.route, hookSecret), { mode: 0o644 });
80
- return;
81
- }
82
- const script = `#!/bin/bash
83
- # ccpoke-version: ${version}
84
- CCPOKE_HOST="\${CCPOKE_HOST:-localhost}"
85
- INPUT=$(cat)
86
- echo '{}'
87
- (
88
- TMUX_TARGET=""
89
- if [ -n "$TMUX_PANE" ]; then
90
- TMUX_TARGET=$(tmux display-message -t "$TMUX_PANE" -p '#{session_name}:#{window_index}.#{pane_index}' 2>/dev/null || echo "")
91
- elif [ -n "$TMUX" ]; then
92
- TMUX_TARGET=$(tmux display-message -p '#{session_name}:#{window_index}.#{pane_index}' 2>/dev/null || echo "")
93
- fi
94
- if [ -n "$TMUX_TARGET" ] && echo "$TMUX_TARGET" | grep -qE '^[a-zA-Z0-9_.:/@ -]+$'; then
95
- ESCAPED_TARGET=$(printf '%s' "$TMUX_TARGET" | sed 's/[&/\\\\]/\\\\&/g')
96
- INPUT=$(echo "$INPUT" | sed 's/}$/,"tmux_target":"'"$ESCAPED_TARGET"'"}/')
97
- fi
98
- echo "$INPUT" | curl -s -X POST "http://$CCPOKE_HOST:${hookPort}${cfg.route}" \\
99
- -H "Content-Type: application/json" \\
100
- -H "X-CCPoke-Secret: ${hookSecret}" \\
101
- --data-binary @- --max-time 5 > /dev/null 2>&1 || true
102
- ) &
103
- `;
104
- writeFileSync(cfg.scriptPath, script, { mode: 0o700 });
105
- }
106
- static removeScript(scriptPath) {
107
- try {
108
- unlinkSync(scriptPath);
109
- }
110
- catch {
111
- /* may not exist */
66
+ settings.hooks[cfg.event] = [
67
+ ...(settings.hooks[cfg.event] ?? []),
68
+ {
69
+ matcher: cfg.matcher,
70
+ hooks: [
71
+ {
72
+ name: cfg.hookName,
73
+ type: "command",
74
+ command: toPosixPath(cfg.scriptPath),
75
+ timeout: cfg.timeout,
76
+ },
77
+ ],
78
+ },
79
+ ];
112
80
  }
113
- }
114
- static removeFromSettings() {
81
+ writeJsonFile(paths.geminiSettings, settings);
82
+ copyScripts();
83
+ },
84
+ uninstall() {
115
85
  try {
116
- const settings = readGeminiSettings();
117
- if (!settings.hooks)
86
+ const settings = readJsonFile(paths.geminiSettings, {});
87
+ if (!settings.hooks) {
118
88
  return;
89
+ }
119
90
  for (const event of Object.keys(settings.hooks)) {
120
91
  const entries = settings.hooks[event];
121
- if (!entries)
92
+ if (!entries) {
122
93
  continue;
94
+ }
123
95
  const filtered = entries.filter((e) => !hasCcpokeHook([e]));
124
96
  if (filtered.length === 0) {
125
97
  delete settings.hooks[event];
@@ -131,13 +103,14 @@ echo "$INPUT" | curl -s -X POST "http://$CCPOKE_HOST:${hookPort}${cfg.route}" \\
131
103
  if (Object.keys(settings.hooks).length === 0) {
132
104
  delete settings.hooks;
133
105
  }
134
- const tmp = `${paths.geminiSettings}.tmp`;
135
- writeFileSync(tmp, JSON.stringify(settings, null, 2));
136
- renameSync(tmp, paths.geminiSettings);
106
+ writeJsonFile(paths.geminiSettings, settings);
137
107
  }
138
108
  catch {
139
109
  /* settings may not exist */
140
110
  }
141
- }
142
- }
111
+ for (const cfg of buildHookConfigs()) {
112
+ HookScriptCopier.remove(cfg.scriptPath);
113
+ }
114
+ },
115
+ };
143
116
  //# sourceMappingURL=gemini-cli-installer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-cli-installer.js","sourceRoot":"","sources":["../../../src/agent/gemini-cli/gemini-cli-installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini-cli-installer.js","sourceRoot":"","sources":["../../../src/agent/gemini-cli/gemini-cli-installer.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export declare class GeminiCliProvider implements AgentProvider {
6
6
  readonly submitKeys: string[];
7
7
  detect(): boolean;
8
8
  isHookInstalled(): boolean;
9
- installHook(port: number, secret: string): void;
9
+ installHook(): void;
10
10
  uninstallHook(): void;
11
11
  verifyIntegrity(): {
12
12
  complete: boolean;
@@ -3,7 +3,7 @@ import { collectGitChanges } from "../../utils/git-collector.js";
3
3
  import { logDebug } from "../../utils/log.js";
4
4
  import { paths } from "../../utils/paths.js";
5
5
  import { AGENT_DISPLAY_NAMES, AgentName, } from "../types.js";
6
- import { GeminiCliInstaller } from "./gemini-cli-installer.js";
6
+ import { geminiCliInstaller } from "./gemini-cli-installer.js";
7
7
  import { extractProjectName, isValidAfterAgentEvent, parseAfterAgentEvent, parseTranscriptForUsage, } from "./gemini-cli-parser.js";
8
8
  export class GeminiCliProvider {
9
9
  name = AgentName.GeminiCli;
@@ -14,16 +14,16 @@ export class GeminiCliProvider {
14
14
  return existsSync(paths.geminiDir);
15
15
  }
16
16
  isHookInstalled() {
17
- return GeminiCliInstaller.isInstalled();
17
+ return geminiCliInstaller.isInstalled();
18
18
  }
19
- installHook(port, secret) {
20
- GeminiCliInstaller.install(port, secret);
19
+ installHook() {
20
+ geminiCliInstaller.install();
21
21
  }
22
22
  uninstallHook() {
23
- GeminiCliInstaller.uninstall();
23
+ geminiCliInstaller.uninstall();
24
24
  }
25
25
  verifyIntegrity() {
26
- return GeminiCliInstaller.verifyIntegrity();
26
+ return geminiCliInstaller.verifyIntegrity();
27
27
  }
28
28
  parseEvent(raw) {
29
29
  if (!isValidAfterAgentEvent(raw)) {
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-cli-provider.js","sourceRoot":"","sources":["../../../src/agent/gemini-cli/gemini-cli-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini-cli-provider.js","sourceRoot":"","sources":["../../../src/agent/gemini-cli/gemini-cli-provider.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,5 @@ export interface HookEventConfig {
22
22
  }
23
23
  export declare function buildHookConfigs(): HookEventConfig[];
24
24
  export declare function hasCcpokeHook(entries: GeminiHookEntry[]): boolean;
25
- export declare function readScriptVersion(scriptPath: string): string | null;
26
- export declare function readGeminiSettings(): GeminiSettings;
27
25
  export declare function isScriptPresent(scriptPath: string): boolean;
28
- export declare function isScriptCurrent(scriptPath: string): boolean;
26
+ export declare function isScriptCurrent(scriptPath: string, sourceFileName: string): boolean;
@@ -1,10 +1,8 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { ApiRoute } from "../../utils/constants.js";
3
- import { getPackageVersion, paths } from "../../utils/paths.js";
1
+ import { existsSync } from "node:fs";
2
+ import { HookScriptCopier } from "../../hooks/hook-script-copier.js";
3
+ import { ApiRoute, CCPOKE_MARKER } from "../../utils/constants.js";
4
+ import { paths } from "../../utils/paths.js";
4
5
  import { AgentName } from "../types.js";
5
- const VERSION_HEADER_PATTERN = /^#\s*ccpoke-version:\s*(\S+)/;
6
- const VERSION_HEADER_PATTERN_WIN = /^@REM\s+ccpoke-version:\s*(\S+)/;
7
- const CCPOKE_MARKER = "ccpoke";
8
6
  const AGENT_PARAM = `?agent=${AgentName.GeminiCli}`;
9
7
  export function buildHookConfigs() {
10
8
  return [
@@ -38,35 +36,10 @@ export function hasCcpokeHook(entries) {
38
36
  return entries.some((entry) => entry.hooks?.some((h) => (typeof h.command === "string" && h.command.includes(CCPOKE_MARKER)) ||
39
37
  (typeof h.name === "string" && h.name.includes(CCPOKE_MARKER))));
40
38
  }
41
- export function readScriptVersion(scriptPath) {
42
- try {
43
- const lines = readFileSync(scriptPath, "utf-8").split("\n");
44
- for (const line of lines.slice(0, 3)) {
45
- const match = line.match(VERSION_HEADER_PATTERN) ?? line.match(VERSION_HEADER_PATTERN_WIN);
46
- if (match)
47
- return match[1] ?? null;
48
- }
49
- return null;
50
- }
51
- catch {
52
- return null;
53
- }
54
- }
55
- export function readGeminiSettings() {
56
- try {
57
- return JSON.parse(readFileSync(paths.geminiSettings, "utf-8"));
58
- }
59
- catch (err) {
60
- const isFileNotFound = err instanceof Error && err.code === "ENOENT";
61
- if (isFileNotFound)
62
- return {};
63
- throw err;
64
- }
65
- }
66
39
  export function isScriptPresent(scriptPath) {
67
40
  return existsSync(scriptPath);
68
41
  }
69
- export function isScriptCurrent(scriptPath) {
70
- return readScriptVersion(scriptPath) === getPackageVersion();
42
+ export function isScriptCurrent(scriptPath, sourceFileName) {
43
+ return !HookScriptCopier.needsCopy(sourceFileName, scriptPath);
71
44
  }
72
45
  //# sourceMappingURL=gemini-cli-settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-cli-settings.js","sourceRoot":"","sources":["../../../src/agent/gemini-cli/gemini-cli-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini-cli-settings.js","sourceRoot":"","sources":["../../../src/agent/gemini-cli/gemini-cli-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA4BxC,MAAM,WAAW,GAAG,UAAU,SAAS,CAAC,SAAS,EAAE,CAAC;AAEpD,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL;YACE,KAAK,EAAE,YAAY;YACnB,UAAU,EAAE,KAAK,CAAC,gBAAgB;YAClC,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,QAAQ,CAAC,QAAQ,GAAG,WAAW;YACtC,OAAO,EAAE,IAAI;SACd;QACD;YACE,KAAK,EAAE,cAAc;YACrB,UAAU,EAAE,KAAK,CAAC,wBAAwB;YAC1C,QAAQ,EAAE,sBAAsB;YAChC,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,QAAQ,CAAC,gBAAgB;YAChC,OAAO,EAAE,IAAI;SACd;QACD;YACE,KAAK,EAAE,cAAc;YACrB,UAAU,EAAE,KAAK,CAAC,wBAAwB;YAC1C,QAAQ,EAAE,qBAAqB;YAC/B,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,QAAQ,CAAC,gBAAgB;YAChC,OAAO,EAAE,IAAI;SACd;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAA0B;IACtD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5B,KAAK,CAAC,KAAK,EAAE,IAAI,CACf,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACpE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CACjE,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,cAAsB;IACxE,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AACjE,CAAC"}
@@ -1,9 +1,7 @@
1
- export declare class OpencodeInstaller {
2
- static isInstalled(): boolean;
3
- static verifyIntegrity(): {
4
- complete: boolean;
5
- missing: string[];
6
- };
7
- static install(hookPort: number, hookSecret: string): void;
8
- static uninstall(): void;
9
- }
1
+ import type { IntegrityResult } from "../types.js";
2
+ export declare const opencodeInstaller: {
3
+ isInstalled(): boolean;
4
+ verifyIntegrity(): IntegrityResult;
5
+ install(): void;
6
+ uninstall(): void;
7
+ };
@@ -1,144 +1,32 @@
1
- import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
2
- import { ApiRoute } from "../../utils/constants.js";
3
- import { getPackageVersion, paths } from "../../utils/paths.js";
4
- import { AgentName } from "../types.js";
5
- const PLUGIN_FILENAME = "ccpoke-notify.js";
6
- const VERSION_HEADER_PATTERN = /^\/\/\s*ccpoke-version:\s*(\S+)/;
7
- const AGENT_PARAM = `?agent=${AgentName.OpenCode}`;
8
- export class OpencodeInstaller {
9
- static isInstalled() {
1
+ import { existsSync, mkdirSync, unlinkSync } from "node:fs";
2
+ import { HookScriptCopier } from "../../hooks/hook-script-copier.js";
3
+ import { paths } from "../../utils/paths.js";
4
+ export const opencodeInstaller = {
5
+ isInstalled() {
10
6
  return existsSync(paths.opencodePluginFile);
11
- }
12
- static verifyIntegrity() {
7
+ },
8
+ verifyIntegrity() {
13
9
  const missing = [];
14
10
  if (!existsSync(paths.opencodePluginFile)) {
15
- missing.push(`${PLUGIN_FILENAME} in plugins dir`);
11
+ missing.push("ccpoke-notify.js in plugins dir");
16
12
  }
17
- else {
18
- const version = readPluginVersion(paths.opencodePluginFile);
19
- if (version !== getPackageVersion()) {
20
- missing.push(`outdated ${PLUGIN_FILENAME}`);
21
- }
13
+ else if (HookScriptCopier.needsCopy("opencode-notify.js", paths.opencodePluginFile)) {
14
+ missing.push("outdated ccpoke-notify.js");
22
15
  }
23
16
  return { complete: missing.length === 0, missing };
24
- }
25
- static install(hookPort, hookSecret) {
26
- OpencodeInstaller.uninstall();
17
+ },
18
+ install() {
19
+ opencodeInstaller.uninstall();
27
20
  mkdirSync(paths.opencodePluginsDir, { recursive: true });
28
- const version = getPackageVersion();
29
- const route = ApiRoute.HookStop + AGENT_PARAM;
30
- const permissionRoute = ApiRoute.HookPermissionRequest + AGENT_PARAM;
31
- const askRoute = ApiRoute.HookAskUserQuestion + AGENT_PARAM;
32
- const plugin = `// ccpoke-version: ${version}
33
- export default async function({ $, client, directory, worktree }) {
34
- const ccpokeHost = process.env.CCPOKE_HOST || "localhost";
35
- let cachedTmuxTarget = null;
36
- async function detectTmuxTarget() {
37
- if (cachedTmuxTarget !== null) return cachedTmuxTarget;
38
- try {
39
- const result = await $\`tmux display-message -p '#{session_name}:#{window_index}.#{pane_index}'\`.nothrow().quiet();
40
- cachedTmuxTarget = result.stdout?.toString().trim() || "";
41
- } catch { cachedTmuxTarget = ""; }
42
- return cachedTmuxTarget;
43
- }
44
-
45
- async function fetchSessionContext(sessionID) {
46
- if (!sessionID || !client) return { summary: "", model: "" };
47
- try {
48
- const res = await client.session.messages({ path: { id: sessionID }, query: { limit: 2 } });
49
- const messages = res.data ?? [];
50
- let summary = "";
51
- let model = "";
52
- for (let i = messages.length - 1; i >= 0; i--) {
53
- const msg = messages[i];
54
- if (msg.info?.role !== "assistant") continue;
55
- model = msg.info.modelID ? msg.info.providerID + "/" + msg.info.modelID : "";
56
- const texts = (msg.parts ?? []).filter(p => p.type === "text").map(p => p.text ?? "");
57
- summary = texts.join("\\n").slice(0, 500);
58
- break;
59
- }
60
- return { summary, model };
61
- } catch { return { summary: "", model: "" }; }
62
- }
63
-
64
- return {
65
- event: async ({ event }) => {
66
- if (event.type === "question.asked") {
67
- const props = event.properties || {};
68
- const tmuxTarget = await detectTmuxTarget();
69
- const payload = JSON.stringify({
70
- session_id: props.sessionID || "",
71
- tool_input: { questions: props.questions || [] },
72
- cwd: worktree || directory,
73
- tmux_target: tmuxTarget
74
- });
75
- try {
76
- await $\`echo \${payload} | curl -s -X POST "http://\${ccpokeHost}:${hookPort}${askRoute}" -H "Content-Type: application/json" -H "X-CCPoke-Secret: ${hookSecret}" --data-binary @- --max-time 5\`.nothrow().quiet();
77
- } catch {}
78
- return;
79
- }
80
-
81
- if (event.type === "permission.asked") {
82
- const props = event.properties || {};
83
- const tmuxTarget = await detectTmuxTarget();
84
- const payload = JSON.stringify({
85
- session_id: props.sessionID || "",
86
- tool_name: props.permission || "unknown",
87
- tool_input: { patterns: props.patterns || [], metadata: props.metadata || {} },
88
- cwd: worktree || directory,
89
- tmux_target: tmuxTarget
90
- });
91
- try {
92
- await $\`echo \${payload} | curl -s -X POST "http://\${ccpokeHost}:${hookPort}${permissionRoute}" -H "Content-Type: application/json" -H "X-CCPoke-Secret: ${hookSecret}" --data-binary @- --max-time 5\`.nothrow().quiet();
93
- } catch {}
94
- return;
95
- }
96
-
97
- if (event.type !== "session.idle" && event.type !== "session.error") return;
98
- const sessionID = event.properties?.sessionID || "";
99
- const cwd = worktree || directory;
100
- const ctx = await fetchSessionContext(sessionID);
101
- const tmuxTarget = await detectTmuxTarget();
102
- const payload = JSON.stringify({
103
- session_id: sessionID,
104
- prompt_response: ctx.summary,
105
- cwd,
106
- model: ctx.model,
107
- event_type: event.type,
108
- tmux_target: tmuxTarget
109
- });
110
- try {
111
- await $\`echo \${payload} | curl -s -X POST "http://\${ccpokeHost}:${hookPort}${route}" -H "Content-Type: application/json" -H "X-CCPoke-Secret: ${hookSecret}" --data-binary @- --max-time 5\`.nothrow().quiet();
112
- } catch {}
113
- }
114
- };
115
- }
116
- `;
117
- const tmp = `${paths.opencodePluginFile}.tmp`;
118
- writeFileSync(tmp, plugin, { mode: 0o600 });
119
- renameSync(tmp, paths.opencodePluginFile);
120
- }
121
- static uninstall() {
21
+ HookScriptCopier.copy("opencode-notify.js", paths.opencodePluginFile);
22
+ },
23
+ uninstall() {
122
24
  try {
123
25
  unlinkSync(paths.opencodePluginFile);
124
26
  }
125
27
  catch {
126
28
  /* may not exist */
127
29
  }
128
- }
129
- }
130
- function readPluginVersion(filePath) {
131
- try {
132
- const lines = readFileSync(filePath, "utf-8").split("\n");
133
- for (const line of lines.slice(0, 3)) {
134
- const match = line.match(VERSION_HEADER_PATTERN);
135
- if (match)
136
- return match[1] ?? null;
137
- }
138
- return null;
139
- }
140
- catch {
141
- return null;
142
- }
143
- }
30
+ },
31
+ };
144
32
  //# sourceMappingURL=opencode-installer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-installer.js","sourceRoot":"","sources":["../../../src/agent/opencode/opencode-installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opencode-installer.js","sourceRoot":"","sources":["../../../src/agent/opencode/opencode-installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAG7C,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,WAAW;QACT,OAAO,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC9C,CAAC;IAED,eAAe;QACb,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,gBAAgB,CAAC,SAAS,CAAC,oBAAoB,EAAE,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IACrD,CAAC;IAED,OAAO;QACL,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAC9B,SAAS,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxE,CAAC;IAED,SAAS;QACP,IAAI,CAAC;YACH,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,mBAAmB;QACrB,CAAC;IACH,CAAC;CACuB,CAAC"}
@@ -6,7 +6,7 @@ export declare class OpencodeProvider implements AgentProvider {
6
6
  readonly submitKeys: string[];
7
7
  detect(): boolean;
8
8
  isHookInstalled(): boolean;
9
- installHook(port: number, secret: string): void;
9
+ installHook(): void;
10
10
  uninstallHook(): void;
11
11
  verifyIntegrity(): {
12
12
  complete: boolean;