@codedeck/codedeck 2026.3.1-4.63
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 +38 -0
- package/config/default.yaml +51 -0
- package/dist/agent/brain-dispatcher.d.ts +67 -0
- package/dist/agent/brain-dispatcher.d.ts.map +1 -0
- package/dist/agent/brain-dispatcher.js +136 -0
- package/dist/agent/brain-dispatcher.js.map +1 -0
- package/dist/agent/detect.d.ts +20 -0
- package/dist/agent/detect.d.ts.map +1 -0
- package/dist/agent/detect.js +187 -0
- package/dist/agent/detect.js.map +1 -0
- package/dist/agent/drivers/base.d.ts +57 -0
- package/dist/agent/drivers/base.d.ts.map +1 -0
- package/dist/agent/drivers/base.js +3 -0
- package/dist/agent/drivers/base.js.map +1 -0
- package/dist/agent/drivers/claude-code.d.ts +14 -0
- package/dist/agent/drivers/claude-code.d.ts.map +1 -0
- package/dist/agent/drivers/claude-code.js +112 -0
- package/dist/agent/drivers/claude-code.js.map +1 -0
- package/dist/agent/drivers/codex.d.ts +14 -0
- package/dist/agent/drivers/codex.d.ts.map +1 -0
- package/dist/agent/drivers/codex.js +77 -0
- package/dist/agent/drivers/codex.js.map +1 -0
- package/dist/agent/drivers/gemini.d.ts +24 -0
- package/dist/agent/drivers/gemini.d.ts.map +1 -0
- package/dist/agent/drivers/gemini.js +142 -0
- package/dist/agent/drivers/gemini.js.map +1 -0
- package/dist/agent/drivers/opencode.d.ts +18 -0
- package/dist/agent/drivers/opencode.d.ts.map +1 -0
- package/dist/agent/drivers/opencode.js +50 -0
- package/dist/agent/drivers/opencode.js.map +1 -0
- package/dist/agent/drivers/shell.d.ts +13 -0
- package/dist/agent/drivers/shell.d.ts.map +1 -0
- package/dist/agent/drivers/shell.js +30 -0
- package/dist/agent/drivers/shell.js.map +1 -0
- package/dist/agent/env-isolation.d.ts +26 -0
- package/dist/agent/env-isolation.d.ts.map +1 -0
- package/dist/agent/env-isolation.js +103 -0
- package/dist/agent/env-isolation.js.map +1 -0
- package/dist/agent/notify-setup.d.ts +18 -0
- package/dist/agent/notify-setup.d.ts.map +1 -0
- package/dist/agent/notify-setup.js +68 -0
- package/dist/agent/notify-setup.js.map +1 -0
- package/dist/agent/session-manager.d.ts +75 -0
- package/dist/agent/session-manager.d.ts.map +1 -0
- package/dist/agent/session-manager.js +407 -0
- package/dist/agent/session-manager.js.map +1 -0
- package/dist/agent/signal.d.ts +32 -0
- package/dist/agent/signal.d.ts.map +1 -0
- package/dist/agent/signal.js +199 -0
- package/dist/agent/signal.js.map +1 -0
- package/dist/agent/status-poller.d.ts +27 -0
- package/dist/agent/status-poller.d.ts.map +1 -0
- package/dist/agent/status-poller.js +76 -0
- package/dist/agent/status-poller.js.map +1 -0
- package/dist/agent/templates/brain-prompt.d.ts +14 -0
- package/dist/agent/templates/brain-prompt.d.ts.map +1 -0
- package/dist/agent/templates/brain-prompt.js +57 -0
- package/dist/agent/templates/brain-prompt.js.map +1 -0
- package/dist/agent/templates/identity.d.ts +19 -0
- package/dist/agent/templates/identity.d.ts.map +1 -0
- package/dist/agent/templates/identity.js +97 -0
- package/dist/agent/templates/identity.js.map +1 -0
- package/dist/agent/tmux.d.ts +90 -0
- package/dist/agent/tmux.d.ts.map +1 -0
- package/dist/agent/tmux.js +386 -0
- package/dist/agent/tmux.js.map +1 -0
- package/dist/autofix/audit-engine.d.ts +35 -0
- package/dist/autofix/audit-engine.d.ts.map +1 -0
- package/dist/autofix/audit-engine.js +144 -0
- package/dist/autofix/audit-engine.js.map +1 -0
- package/dist/autofix/branch-manager.d.ts +44 -0
- package/dist/autofix/branch-manager.d.ts.map +1 -0
- package/dist/autofix/branch-manager.js +97 -0
- package/dist/autofix/branch-manager.js.map +1 -0
- package/dist/autofix/decision-engine.d.ts +38 -0
- package/dist/autofix/decision-engine.d.ts.map +1 -0
- package/dist/autofix/decision-engine.js +115 -0
- package/dist/autofix/decision-engine.js.map +1 -0
- package/dist/autofix/index.d.ts +23 -0
- package/dist/autofix/index.d.ts.map +1 -0
- package/dist/autofix/index.js +192 -0
- package/dist/autofix/index.js.map +1 -0
- package/dist/autofix/prompt-builder.d.ts +25 -0
- package/dist/autofix/prompt-builder.d.ts.map +1 -0
- package/dist/autofix/prompt-builder.js +137 -0
- package/dist/autofix/prompt-builder.js.map +1 -0
- package/dist/autofix/report-parser.d.ts +18 -0
- package/dist/autofix/report-parser.d.ts.map +1 -0
- package/dist/autofix/report-parser.js +74 -0
- package/dist/autofix/report-parser.js.map +1 -0
- package/dist/autofix/state-machine.d.ts +40 -0
- package/dist/autofix/state-machine.d.ts.map +1 -0
- package/dist/autofix/state-machine.js +76 -0
- package/dist/autofix/state-machine.js.map +1 -0
- package/dist/bind/bind-flow.d.ts +15 -0
- package/dist/bind/bind-flow.d.ts.map +1 -0
- package/dist/bind/bind-flow.js +198 -0
- package/dist/bind/bind-flow.js.map +1 -0
- package/dist/config.d.ts +53 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +89 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon/codex-watcher.d.ts +46 -0
- package/dist/daemon/codex-watcher.d.ts.map +1 -0
- package/dist/daemon/codex-watcher.js +533 -0
- package/dist/daemon/codex-watcher.js.map +1 -0
- package/dist/daemon/command-handler.d.ts +6 -0
- package/dist/daemon/command-handler.d.ts.map +1 -0
- package/dist/daemon/command-handler.js +770 -0
- package/dist/daemon/command-handler.js.map +1 -0
- package/dist/daemon/discussion-orchestrator.d.ts +63 -0
- package/dist/daemon/discussion-orchestrator.d.ts.map +1 -0
- package/dist/daemon/discussion-orchestrator.js +482 -0
- package/dist/daemon/discussion-orchestrator.js.map +1 -0
- package/dist/daemon/gemini-watcher.d.ts +42 -0
- package/dist/daemon/gemini-watcher.d.ts.map +1 -0
- package/dist/daemon/gemini-watcher.js +463 -0
- package/dist/daemon/gemini-watcher.js.map +1 -0
- package/dist/daemon/hook-server.d.ts +42 -0
- package/dist/daemon/hook-server.d.ts.map +1 -0
- package/dist/daemon/hook-server.js +160 -0
- package/dist/daemon/hook-server.js.map +1 -0
- package/dist/daemon/jsonl-watcher.d.ts +35 -0
- package/dist/daemon/jsonl-watcher.d.ts.map +1 -0
- package/dist/daemon/jsonl-watcher.js +635 -0
- package/dist/daemon/jsonl-watcher.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +20 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -0
- package/dist/daemon/lifecycle.js +331 -0
- package/dist/daemon/lifecycle.js.map +1 -0
- package/dist/daemon/server-link.d.ts +44 -0
- package/dist/daemon/server-link.d.ts.map +1 -0
- package/dist/daemon/server-link.js +232 -0
- package/dist/daemon/server-link.js.map +1 -0
- package/dist/daemon/subsession-manager.d.ts +37 -0
- package/dist/daemon/subsession-manager.d.ts.map +1 -0
- package/dist/daemon/subsession-manager.js +240 -0
- package/dist/daemon/subsession-manager.js.map +1 -0
- package/dist/daemon/terminal-parser.d.ts +42 -0
- package/dist/daemon/terminal-parser.d.ts.map +1 -0
- package/dist/daemon/terminal-parser.js +278 -0
- package/dist/daemon/terminal-parser.js.map +1 -0
- package/dist/daemon/terminal-streamer.d.ts +93 -0
- package/dist/daemon/terminal-streamer.d.ts.map +1 -0
- package/dist/daemon/terminal-streamer.js +451 -0
- package/dist/daemon/terminal-streamer.js.map +1 -0
- package/dist/daemon/timeline-emitter.d.ts +32 -0
- package/dist/daemon/timeline-emitter.d.ts.map +1 -0
- package/dist/daemon/timeline-emitter.js +97 -0
- package/dist/daemon/timeline-emitter.js.map +1 -0
- package/dist/daemon/timeline-event.d.ts +23 -0
- package/dist/daemon/timeline-event.d.ts.map +1 -0
- package/dist/daemon/timeline-event.js +7 -0
- package/dist/daemon/timeline-event.js.map +1 -0
- package/dist/daemon/timeline-store.d.ts +40 -0
- package/dist/daemon/timeline-store.d.ts.map +1 -0
- package/dist/daemon/timeline-store.js +153 -0
- package/dist/daemon/timeline-store.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +149 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/claude-mem.d.ts +9 -0
- package/dist/memory/claude-mem.d.ts.map +1 -0
- package/dist/memory/claude-mem.js +58 -0
- package/dist/memory/claude-mem.js.map +1 -0
- package/dist/memory/context-builder.d.ts +4 -0
- package/dist/memory/context-builder.d.ts.map +1 -0
- package/dist/memory/context-builder.js +35 -0
- package/dist/memory/context-builder.js.map +1 -0
- package/dist/memory/detector.d.ts +7 -0
- package/dist/memory/detector.d.ts.map +1 -0
- package/dist/memory/detector.js +17 -0
- package/dist/memory/detector.js.map +1 -0
- package/dist/memory/extractor.d.ts +21 -0
- package/dist/memory/extractor.d.ts.map +1 -0
- package/dist/memory/extractor.js +83 -0
- package/dist/memory/extractor.js.map +1 -0
- package/dist/memory/injector.d.ts +7 -0
- package/dist/memory/injector.d.ts.map +1 -0
- package/dist/memory/injector.js +18 -0
- package/dist/memory/injector.js.map +1 -0
- package/dist/memory/interface.d.ts +25 -0
- package/dist/memory/interface.d.ts.map +1 -0
- package/dist/memory/interface.js +3 -0
- package/dist/memory/interface.js.map +1 -0
- package/dist/memory/mem0.d.ts +12 -0
- package/dist/memory/mem0.d.ts.map +1 -0
- package/dist/memory/mem0.js +93 -0
- package/dist/memory/mem0.js.map +1 -0
- package/dist/router/command-parser.d.ts +33 -0
- package/dist/router/command-parser.d.ts.map +1 -0
- package/dist/router/command-parser.js +66 -0
- package/dist/router/command-parser.js.map +1 -0
- package/dist/router/message-router.d.ts +42 -0
- package/dist/router/message-router.d.ts.map +1 -0
- package/dist/router/message-router.js +222 -0
- package/dist/router/message-router.js.map +1 -0
- package/dist/router/response-collector.d.ts +28 -0
- package/dist/router/response-collector.d.ts.map +1 -0
- package/dist/router/response-collector.js +164 -0
- package/dist/router/response-collector.js.map +1 -0
- package/dist/store/project-store.d.ts +37 -0
- package/dist/store/project-store.d.ts.map +1 -0
- package/dist/store/project-store.js +70 -0
- package/dist/store/project-store.js.map +1 -0
- package/dist/store/session-store.d.ts +32 -0
- package/dist/store/session-store.d.ts.map +1 -0
- package/dist/store/session-store.js +67 -0
- package/dist/store/session-store.js.map +1 -0
- package/dist/tracker/branch.d.ts +24 -0
- package/dist/tracker/branch.d.ts.map +1 -0
- package/dist/tracker/branch.js +55 -0
- package/dist/tracker/branch.js.map +1 -0
- package/dist/tracker/github.d.ts +31 -0
- package/dist/tracker/github.d.ts.map +1 -0
- package/dist/tracker/github.js +117 -0
- package/dist/tracker/github.js.map +1 -0
- package/dist/tracker/gitlab.d.ts +31 -0
- package/dist/tracker/gitlab.d.ts.map +1 -0
- package/dist/tracker/gitlab.js +116 -0
- package/dist/tracker/gitlab.js.map +1 -0
- package/dist/tracker/index.d.ts +9 -0
- package/dist/tracker/index.d.ts.map +1 -0
- package/dist/tracker/index.js +28 -0
- package/dist/tracker/index.js.map +1 -0
- package/dist/tracker/interface.d.ts +39 -0
- package/dist/tracker/interface.d.ts.map +1 -0
- package/dist/tracker/interface.js +7 -0
- package/dist/tracker/interface.js.map +1 -0
- package/dist/tracker/priority.d.ts +19 -0
- package/dist/tracker/priority.d.ts.map +1 -0
- package/dist/tracker/priority.js +40 -0
- package/dist/tracker/priority.js.map +1 -0
- package/dist/util/logger.d.ts +4 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +14 -0
- package/dist/util/logger.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Build a minimal explicit environment for spawning agent tmux sessions.
|
|
4
|
+
* Only pass through safe, non-secret env vars. Never pass secrets to child processes.
|
|
5
|
+
*
|
|
6
|
+
* Agents are spawned with ONLY these env vars — any secrets from the daemon's
|
|
7
|
+
* environment are explicitly excluded.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.buildAgentEnv = buildAgentEnv;
|
|
11
|
+
exports.getAgentEnvVars = getAgentEnvVars;
|
|
12
|
+
exports.buildAgentEnvFromProcess = buildAgentEnvFromProcess;
|
|
13
|
+
/** Safe env vars that agents always need */
|
|
14
|
+
const ALWAYS_ALLOWED = [
|
|
15
|
+
'PATH',
|
|
16
|
+
'HOME',
|
|
17
|
+
'TERM',
|
|
18
|
+
'COLORTERM',
|
|
19
|
+
'LANG',
|
|
20
|
+
'LC_ALL',
|
|
21
|
+
'LC_CTYPE',
|
|
22
|
+
'USER',
|
|
23
|
+
'LOGNAME',
|
|
24
|
+
'SHELL',
|
|
25
|
+
'TMPDIR',
|
|
26
|
+
'XDG_RUNTIME_DIR',
|
|
27
|
+
'DISPLAY',
|
|
28
|
+
'WAYLAND_DISPLAY',
|
|
29
|
+
];
|
|
30
|
+
/** Env var patterns that are explicitly blocked (secrets/credentials) */
|
|
31
|
+
const BLOCKED_PATTERNS = [
|
|
32
|
+
/token/i,
|
|
33
|
+
/secret/i,
|
|
34
|
+
/password/i,
|
|
35
|
+
/key/i,
|
|
36
|
+
/credential/i,
|
|
37
|
+
/api_/i,
|
|
38
|
+
/auth/i,
|
|
39
|
+
/^deck/i,
|
|
40
|
+
/^jwt/i,
|
|
41
|
+
];
|
|
42
|
+
/**
|
|
43
|
+
* Build a minimal environment for an agent tmux session.
|
|
44
|
+
*
|
|
45
|
+
* @param agentSpecificVars Agent-specific vars to include (e.g., ANTHROPIC_API_KEY for CC).
|
|
46
|
+
* These must be explicitly opted-in — they are NOT automatically inherited.
|
|
47
|
+
* @returns Environment object safe to pass to `newSession({ env: ... })`.
|
|
48
|
+
*/
|
|
49
|
+
function buildAgentEnv(agentSpecificVars = {}) {
|
|
50
|
+
const env = {};
|
|
51
|
+
const source = process.env;
|
|
52
|
+
// Passthrough only explicitly allowed vars
|
|
53
|
+
for (const key of ALWAYS_ALLOWED) {
|
|
54
|
+
const value = source[key];
|
|
55
|
+
if (value !== undefined) {
|
|
56
|
+
env[key] = value;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Add agent-specific vars (caller is responsible for providing correct keys/values)
|
|
60
|
+
for (const [k, v] of Object.entries(agentSpecificVars)) {
|
|
61
|
+
if (isBlocked(k)) {
|
|
62
|
+
// Log warning and skip — prevents accidental secret leakage via this path
|
|
63
|
+
console.warn(`[env-isolation] Blocked env var "${k}" — pass via agent config, not env`);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
env[k] = v;
|
|
67
|
+
}
|
|
68
|
+
return env;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get the agent-specific env vars for a given agent type.
|
|
72
|
+
* Only includes the vars explicitly needed by that agent.
|
|
73
|
+
*/
|
|
74
|
+
function getAgentEnvVars(agentType) {
|
|
75
|
+
switch (agentType) {
|
|
76
|
+
case 'claude-code':
|
|
77
|
+
return ['ANTHROPIC_API_KEY'];
|
|
78
|
+
case 'codex':
|
|
79
|
+
return ['OPENAI_API_KEY', 'OPENAI_BASE_URL'];
|
|
80
|
+
case 'opencode':
|
|
81
|
+
return ['ANTHROPIC_API_KEY', 'OPENAI_API_KEY'];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Build agent env from process.env, extracting only the agent-specific API key vars.
|
|
86
|
+
* The caller must ensure these vars are set in process.env before calling this.
|
|
87
|
+
*/
|
|
88
|
+
function buildAgentEnvFromProcess(agentType) {
|
|
89
|
+
const agentVars = {};
|
|
90
|
+
for (const key of getAgentEnvVars(agentType)) {
|
|
91
|
+
const val = process.env[key];
|
|
92
|
+
if (val)
|
|
93
|
+
agentVars[key] = val;
|
|
94
|
+
}
|
|
95
|
+
return buildAgentEnv(agentVars);
|
|
96
|
+
}
|
|
97
|
+
function isBlocked(key) {
|
|
98
|
+
// Allow explicitly needed keys if they match the ALWAYS_ALLOWED list
|
|
99
|
+
if (ALWAYS_ALLOWED.includes(key))
|
|
100
|
+
return false;
|
|
101
|
+
return BLOCKED_PATTERNS.some((p) => p.test(key));
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=env-isolation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-isolation.js","sourceRoot":"","sources":["../../src/agent/env-isolation.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAwCH,sCAuBC;AAMD,0CASC;AAMD,4DASC;AA3FD,4CAA4C;AAC5C,MAAM,cAAc,GAAG;IACrB,MAAM;IACN,MAAM;IACN,MAAM;IACN,WAAW;IACX,MAAM;IACN,QAAQ;IACR,UAAU;IACV,MAAM;IACN,SAAS;IACT,OAAO;IACP,QAAQ;IACR,iBAAiB;IACjB,SAAS;IACT,iBAAiB;CAClB,CAAC;AAEF,yEAAyE;AACzE,MAAM,gBAAgB,GAAG;IACvB,QAAQ;IACR,SAAS;IACT,WAAW;IACX,MAAM;IACN,aAAa;IACb,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;CACR,CAAC;AAEF;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,oBAA4C,EAAE;IAC1E,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAE3B,2CAA2C;IAC3C,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACvD,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,0EAA0E;YAC1E,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,oCAAoC,CAAC,CAAC;YACxF,SAAS;QACX,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,SAA+C;IAC7E,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,aAAa;YAChB,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAC/C,KAAK,UAAU;YACb,OAAO,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,wBAAwB,CACtC,SAA+C;IAE/C,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,GAAG;YAAE,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAChC,CAAC;IACD,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,qEAAqE;IACrE,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup idle notify hooks for Codex and OpenCode agents.
|
|
3
|
+
* Both POST directly to the daemon hook server (127.0.0.1:51913/notify).
|
|
4
|
+
*
|
|
5
|
+
* - Codex: config.toml [notify] "agent-turn-complete" = curl script
|
|
6
|
+
* - OpenCode: .opencode/plugin/idle-notify.ts session.idle → fetch
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Append Codex notify config to <projectDir>/config.toml.
|
|
10
|
+
* The session name is baked in at setup time (each session has its own config).
|
|
11
|
+
*/
|
|
12
|
+
export declare function setupCodexNotify(projectDir: string, sessionName: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Write .opencode/plugin/idle-notify.ts to <projectDir>.
|
|
15
|
+
* OpenCode loads plugins from this directory automatically.
|
|
16
|
+
*/
|
|
17
|
+
export declare function setupOpenCodePlugin(projectDir: string, sessionName: string): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=notify-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify-setup.d.ts","sourceRoot":"","sources":["../../src/agent/notify-setup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAID;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Setup idle notify hooks for Codex and OpenCode agents.
|
|
4
|
+
* Both POST directly to the daemon hook server (127.0.0.1:51913/notify).
|
|
5
|
+
*
|
|
6
|
+
* - Codex: config.toml [notify] "agent-turn-complete" = curl script
|
|
7
|
+
* - OpenCode: .opencode/plugin/idle-notify.ts session.idle → fetch
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.setupCodexNotify = setupCodexNotify;
|
|
14
|
+
exports.setupOpenCodePlugin = setupOpenCodePlugin;
|
|
15
|
+
const fs_1 = require("fs");
|
|
16
|
+
const path_1 = __importDefault(require("path"));
|
|
17
|
+
const hook_server_js_1 = require("../daemon/hook-server.js");
|
|
18
|
+
// ─── Codex ────────────────────────────────────────────────────────────────────
|
|
19
|
+
/**
|
|
20
|
+
* Append Codex notify config to <projectDir>/config.toml.
|
|
21
|
+
* The session name is baked in at setup time (each session has its own config).
|
|
22
|
+
*/
|
|
23
|
+
async function setupCodexNotify(projectDir, sessionName) {
|
|
24
|
+
const configPath = path_1.default.join(projectDir, 'config.toml');
|
|
25
|
+
let existing = '';
|
|
26
|
+
try {
|
|
27
|
+
existing = await fs_1.promises.readFile(configPath, 'utf-8');
|
|
28
|
+
}
|
|
29
|
+
catch { /* ok */ }
|
|
30
|
+
if (existing.includes('agent-turn-complete'))
|
|
31
|
+
return; // already set up
|
|
32
|
+
const notifyBlock = `
|
|
33
|
+
[notify]
|
|
34
|
+
"agent-turn-complete" = """
|
|
35
|
+
curl -s -X POST "http://127.0.0.1:${hook_server_js_1.activeHookPort}/notify" \\
|
|
36
|
+
-H "Content-Type: application/json" \\
|
|
37
|
+
-d '{"event":"idle","session":"${sessionName}","agentType":"codex"}' \\
|
|
38
|
+
--max-time 2 &>/dev/null || true
|
|
39
|
+
"""
|
|
40
|
+
`;
|
|
41
|
+
await fs_1.promises.appendFile(configPath, notifyBlock);
|
|
42
|
+
}
|
|
43
|
+
// ─── OpenCode ─────────────────────────────────────────────────────────────────
|
|
44
|
+
/**
|
|
45
|
+
* Write .opencode/plugin/idle-notify.ts to <projectDir>.
|
|
46
|
+
* OpenCode loads plugins from this directory automatically.
|
|
47
|
+
*/
|
|
48
|
+
async function setupOpenCodePlugin(projectDir, sessionName) {
|
|
49
|
+
const pluginDir = path_1.default.join(projectDir, '.opencode', 'plugin');
|
|
50
|
+
await fs_1.promises.mkdir(pluginDir, { recursive: true });
|
|
51
|
+
const pluginPath = path_1.default.join(pluginDir, 'idle-notify.ts');
|
|
52
|
+
const pluginContent = `// Codedeck idle notify plugin for OpenCode
|
|
53
|
+
export default {
|
|
54
|
+
name: 'idle-notify',
|
|
55
|
+
events: {
|
|
56
|
+
'session.idle': async () => {
|
|
57
|
+
await fetch('http://127.0.0.1:${hook_server_js_1.activeHookPort}/notify', {
|
|
58
|
+
method: 'POST',
|
|
59
|
+
headers: { 'Content-Type': 'application/json' },
|
|
60
|
+
body: JSON.stringify({ event: 'idle', session: '${sessionName}', agentType: 'opencode' }),
|
|
61
|
+
}).catch(() => { /* daemon may not be running */ });
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
`;
|
|
66
|
+
await fs_1.promises.writeFile(pluginPath, pluginContent);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=notify-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify-setup.js","sourceRoot":"","sources":["../../src/agent/notify-setup.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;AAYH,4CAqBC;AAQD,kDAuBC;AA9DD,2BAAoC;AACpC,gDAAwB;AACxB,6DAA0D;AAE1D,iFAAiF;AAEjF;;;GAGG;AACI,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,WAAmB;IAEnB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAExD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QAAC,QAAQ,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE7E,IAAI,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAAE,OAAO,CAAC,iBAAiB;IAEvE,MAAM,WAAW,GAAG;;;oCAGc,+BAAc;;mCAEf,WAAW;;;CAG7C,CAAC;IACA,MAAM,aAAE,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED,iFAAiF;AAEjF;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAClB,WAAmB;IAEnB,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,aAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG;;;;;sCAKc,+BAAc;;;0DAGM,WAAW;;;;;CAKpE,CAAC;IACA,MAAM,aAAE,CAAC,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { AgentDriver } from './drivers/base.js';
|
|
2
|
+
import type { AgentType } from './detect.js';
|
|
3
|
+
import { type SessionRecord } from '../store/session-store.js';
|
|
4
|
+
type SessionEventCallback = (event: 'started' | 'stopped' | 'error', session: string, state: string) => void;
|
|
5
|
+
export declare function setSessionEventCallback(cb: SessionEventCallback): void;
|
|
6
|
+
/** Called after upsert (record provided) or remove (record=null, name provided). */
|
|
7
|
+
type SessionPersistCallback = (record: SessionRecord | null, name: string) => Promise<void>;
|
|
8
|
+
export declare function setSessionPersistCallback(cb: SessionPersistCallback): void;
|
|
9
|
+
export interface ProjectConfig {
|
|
10
|
+
name: string;
|
|
11
|
+
dir: string;
|
|
12
|
+
brainType: AgentType;
|
|
13
|
+
workerTypes: AgentType[];
|
|
14
|
+
/** When true, start fresh sessions without resuming last conversation. */
|
|
15
|
+
fresh?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function getDriver(type: AgentType): AgentDriver;
|
|
18
|
+
export declare function sessionName(project: string, role: 'brain' | `w${number}`): string;
|
|
19
|
+
/** Start all sessions for a project (brain + workers). */
|
|
20
|
+
export declare function startProject(config: ProjectConfig): Promise<void>;
|
|
21
|
+
/** Stop all sessions for a project. */
|
|
22
|
+
export declare function stopProject(projectName: string): Promise<void>;
|
|
23
|
+
/** Clean up orphan FIFOs from previous daemon runs and reconcile session store on startup. */
|
|
24
|
+
export declare function initOnStartup(): Promise<void>;
|
|
25
|
+
/** Reconcile store with actual tmux on daemon start — restart missing sessions and discover orphans. */
|
|
26
|
+
export declare function restoreFromStore(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Auto-restart a crashed session.
|
|
29
|
+
* Enforces max 3 restarts within 5 minutes; marks as error if exceeded.
|
|
30
|
+
*/
|
|
31
|
+
export declare function restartSession(record: SessionRecord): Promise<boolean>;
|
|
32
|
+
interface LaunchOpts {
|
|
33
|
+
name: string;
|
|
34
|
+
projectName: string;
|
|
35
|
+
role: 'brain' | `w${number}`;
|
|
36
|
+
agentType: AgentType;
|
|
37
|
+
projectDir: string;
|
|
38
|
+
skipStore?: boolean;
|
|
39
|
+
extraEnv?: Record<string, string>;
|
|
40
|
+
/** When true, start fresh without resuming last conversation. */
|
|
41
|
+
fresh?: boolean;
|
|
42
|
+
/** CC session UUID for --session-id / --resume. Generated if absent for CC sessions. */
|
|
43
|
+
ccSessionId?: string;
|
|
44
|
+
/** Codex session UUID for `codex resume <UUID>`. */
|
|
45
|
+
codexSessionId?: string;
|
|
46
|
+
/** Gemini session UUID for `gemini --resume <UUID>`. */
|
|
47
|
+
geminiSessionId?: string;
|
|
48
|
+
}
|
|
49
|
+
export declare function launchSession(opts: LaunchOpts): Promise<void>;
|
|
50
|
+
/** Bound ops for a session (used by status poller / response collector). */
|
|
51
|
+
export declare function getSessionOps(name: string): {
|
|
52
|
+
capturePane: () => Promise<string[]>;
|
|
53
|
+
sendKeys: (keys: string) => Promise<void>;
|
|
54
|
+
showBuffer: () => Promise<string>;
|
|
55
|
+
};
|
|
56
|
+
export interface AutoFixProjectConfig {
|
|
57
|
+
projectName: string;
|
|
58
|
+
projectDir: string;
|
|
59
|
+
coderType: AgentType;
|
|
60
|
+
auditorType: AgentType;
|
|
61
|
+
/** Feature branch already checked out in projectDir. */
|
|
62
|
+
featureBranch: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Start sessions for auto-fix mode:
|
|
66
|
+
* - w1 (coder) session: launched in projectDir (feature branch already checked out)
|
|
67
|
+
* - brain session: launched with audit-enhanced system prompt env var so the brain dispatcher
|
|
68
|
+
* can call registerAutoFixExtensions() on startup
|
|
69
|
+
*/
|
|
70
|
+
export declare function startAutoFixProject(config: AutoFixProjectConfig): Promise<{
|
|
71
|
+
coderSession: string;
|
|
72
|
+
auditorSession: string;
|
|
73
|
+
}>;
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/agent/session-manager.ts"],"names":[],"mappings":"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"}
|