conductor-oss 0.2.18 → 0.2.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/dashboard.js +2 -2
- package/dist/commands/start.d.ts +3 -6
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +450 -220
- package/dist/commands/start.js.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/native/conductor +0 -0
- package/node_modules/@conductor-oss/core/dist/session-manager.js +1 -1
- package/node_modules/@conductor-oss/core/dist/session-manager.js.map +1 -1
- package/node_modules/@conductor-oss/plugin-agent-amp/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-ccr/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-claude-code/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-codex/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-cursor-cli/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-droid/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-gemini/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-github-copilot/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-opencode/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-qwen-code/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-mcp-server/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-desktop/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-discord/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-runtime-tmux/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-scm-github/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-terminal-web/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-tracker-github/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-workspace-worktree/package.json +1 -1
- package/package.json +21 -22
- package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/packages/web/.next/app-path-routes-manifest.json +0 -1
- package/web/.next/standalone/packages/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/packages/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/packages/web/.next/routes-manifest.json +0 -6
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.rsc +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app-paths-manifest.json +0 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1ed2e6c1._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3d6b30a3._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a0b6570d._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0e4dc4f7.js +2 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__12eb9005._.js → [root-of-the-server]__48817f02._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__6622b514._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__869d9ac0._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__9dc23e5a._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_0e1412de._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_69e05fca._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_80efe193._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b6d31783._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_c0f0e227._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_f36ddaa9._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_38e7b35d._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_f665760b._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_f2ebd7a9._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_79316445._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_a078c137._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_app_page_tsx_cd282e82._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{packages_web_src_components_3809c507._.js → packages_web_src_components_6cab1c8c._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/functions-config-manifest.json +1 -2
- package/web/.next/standalone/packages/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +8 -8
- package/web/.next/standalone/packages/web/.next/static/chunks/062888342200567f.js +1 -0
- package/web/.next/{static/chunks/28dd6ef2af62b509.js → standalone/packages/web/.next/static/chunks/3b757dce050133c8.js} +2 -2
- package/web/.next/standalone/packages/web/.next/static/chunks/{c959976264f14eba.js → 5c7e8425945ad682.js} +1 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/6c9a11faed9daf4d.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/8221b78965a50858.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/8de84e208e201d72.css +3 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/{e862e73b22fe29c2.js → c4ea57fb949fb623.js} +1 -1
- package/web/.next/standalone/packages/web/src/components/layout/TopBar.tsx +8 -10
- package/web/.next/standalone/packages/web/src/features/dashboard/DashboardClient.tsx +32 -16
- package/web/.next/standalone/packages/web/src/features/sessions/SessionPageClient.tsx +12 -2
- package/web/.next/standalone/packages/web/src/proxy.ts +1 -0
- package/web/.next/static/chunks/062888342200567f.js +1 -0
- package/web/.next/{standalone/packages/web/.next/static/chunks/28dd6ef2af62b509.js → static/chunks/3b757dce050133c8.js} +2 -2
- package/web/.next/static/chunks/{c959976264f14eba.js → 5c7e8425945ad682.js} +1 -1
- package/web/.next/static/chunks/6c9a11faed9daf4d.js +1 -0
- package/web/.next/static/chunks/8221b78965a50858.js +1 -0
- package/web/.next/static/chunks/8de84e208e201d72.css +3 -0
- package/web/.next/static/chunks/{e862e73b22fe29c2.js → c4ea57fb949fb623.js} +1 -1
- package/dist/commands/watch.d.ts +0 -12
- package/dist/commands/watch.d.ts.map +0 -1
- package/dist/commands/watch.js +0 -84
- package/dist/commands/watch.js.map +0 -1
- package/dist/commands/webhook.d.ts +0 -12
- package/dist/commands/webhook.d.ts.map +0 -1
- package/dist/commands/webhook.js +0 -59
- package/dist/commands/webhook.js.map +0 -1
- package/node_modules/@conductor-oss/plugin-webhook/dist/index.d.ts +0 -28
- package/node_modules/@conductor-oss/plugin-webhook/dist/index.d.ts.map +0 -1
- package/node_modules/@conductor-oss/plugin-webhook/dist/index.js +0 -295
- package/node_modules/@conductor-oss/plugin-webhook/dist/index.js.map +0 -1
- package/node_modules/@conductor-oss/plugin-webhook/package.json +0 -11
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route/app-paths-manifest.json +0 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route/build-manifest.json +0 -11
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route/server-reference-manifest.json +0 -4
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js +0 -8
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js.map +0 -5
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js.nft.json +0 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route_client-reference-manifest.js +0 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7633d324._.js +0 -4
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__bf8faac8._.js +0 -4
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_web__next-internal_server_app_api_agents_route_actions_29063d1a.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_78af9fdf._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_c4bad84a._.js +0 -3
- package/web/.next/standalone/packages/web/.next/static/chunks/1e67fbc3874d3f51.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/2b2a24dff50e7dc9.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/483eb2824f5282c7.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/860d84e1f09476a4.css +0 -3
- package/web/.next/standalone/packages/web/src/app/api/agents/route.ts +0 -223
- package/web/.next/static/chunks/1e67fbc3874d3f51.js +0 -1
- package/web/.next/static/chunks/2b2a24dff50e7dc9.js +0 -1
- package/web/.next/static/chunks/483eb2824f5282c7.js +0 -1
- package/web/.next/static/chunks/860d84e1f09476a4.css +0 -3
- /package/web/.next/standalone/packages/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_buildManifest.js +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_ssgManifest.js +0 -0
- /package/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_buildManifest.js +0 -0
- /package/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_ssgManifest.js +0 -0
package/dist/commands/watch.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `co watch`
|
|
3
|
-
*
|
|
4
|
-
* Watches Obsidian CONDUCTOR.md kanban boards for tasks moved to "Ready to Dispatch".
|
|
5
|
-
* When a task is detected, spawns an agent session via `co spawn`.
|
|
6
|
-
*
|
|
7
|
-
* Supports project-specific boards (auto-detected from path) and the workspace-level
|
|
8
|
-
* board (requires #project/ tag on the card).
|
|
9
|
-
*/
|
|
10
|
-
import chalk from "chalk";
|
|
11
|
-
import ora from "ora";
|
|
12
|
-
import { createServices, loadConfig } from "../services.js";
|
|
13
|
-
const WORKSPACE = process.env["CONDUCTOR_WORKSPACE"]
|
|
14
|
-
?? `${process.env["HOME"]}/.conductor/workspace`;
|
|
15
|
-
export function registerWatch(program) {
|
|
16
|
-
program
|
|
17
|
-
.command("watch")
|
|
18
|
-
.description("Watch Obsidian CONDUCTOR.md boards and auto-dispatch tasks")
|
|
19
|
-
.option("-w, --workspace <path>", "Obsidian workspace path", WORKSPACE)
|
|
20
|
-
.option("--poll <ms>", "Polling interval in milliseconds", "5000")
|
|
21
|
-
.action(async (opts) => {
|
|
22
|
-
try {
|
|
23
|
-
const config = await loadConfig(opts.workspace);
|
|
24
|
-
const { sessionManager, registry } = await createServices(config);
|
|
25
|
-
const core = await import("@conductor-oss/core");
|
|
26
|
-
const spinner = ora("Discovering boards").start();
|
|
27
|
-
const boardPatternsOrConfig = config.boards?.length ? config.boards : config;
|
|
28
|
-
const boards = core.discoverBoards(opts.workspace, boardPatternsOrConfig);
|
|
29
|
-
if (boards.length === 0) {
|
|
30
|
-
spinner.fail("No CONDUCTOR.md boards found");
|
|
31
|
-
console.log(chalk.dim(`Searched in: ${opts.workspace}`));
|
|
32
|
-
process.exit(1);
|
|
33
|
-
}
|
|
34
|
-
spinner.succeed(`Found ${boards.length} board(s)`);
|
|
35
|
-
const boardProjectMap = core.buildBoardProjectMap(boards, config);
|
|
36
|
-
// Show board -> project mapping
|
|
37
|
-
for (const board of boards) {
|
|
38
|
-
const project = boardProjectMap.get(board);
|
|
39
|
-
if (project) {
|
|
40
|
-
console.log(chalk.dim(` ${board} -> ${chalk.cyan(project)}`));
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
console.log(chalk.dim(` ${board} -> ${chalk.yellow("workspace (needs #project/ tag)")}`));
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
const watcher = core.createBoardWatcher({
|
|
47
|
-
config,
|
|
48
|
-
sessionManager,
|
|
49
|
-
boardPaths: boards,
|
|
50
|
-
agentNames: registry.list("agent").map((agent) => agent.name),
|
|
51
|
-
boardProjectMap,
|
|
52
|
-
pollIntervalMs: parseInt(opts.poll, 10),
|
|
53
|
-
onDispatch: (projectId, sessionId, task) => {
|
|
54
|
-
console.log(chalk.green(` Dispatched: `) +
|
|
55
|
-
chalk.cyan(sessionId) +
|
|
56
|
-
chalk.dim(` -> ${projectId}: "${task}"`));
|
|
57
|
-
},
|
|
58
|
-
onError: (err, context) => {
|
|
59
|
-
console.error(chalk.red(` Error [${context}]: ${err.message}`));
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
watcher.start();
|
|
63
|
-
console.log();
|
|
64
|
-
console.log(chalk.bold.green("Board watcher running."));
|
|
65
|
-
console.log(chalk.dim(" Move tasks to 'Ready to Dispatch' in Obsidian to auto-spawn agents."));
|
|
66
|
-
console.log(chalk.dim(" Press Ctrl-C to stop.\n"));
|
|
67
|
-
// Graceful shutdown
|
|
68
|
-
const shutdown = () => {
|
|
69
|
-
console.log(chalk.dim("\nStopping board watcher..."));
|
|
70
|
-
watcher.stop();
|
|
71
|
-
process.exit(0);
|
|
72
|
-
};
|
|
73
|
-
process.on("SIGINT", shutdown);
|
|
74
|
-
process.on("SIGTERM", shutdown);
|
|
75
|
-
// Keep alive
|
|
76
|
-
setInterval(() => { }, 60_000);
|
|
77
|
-
}
|
|
78
|
-
catch (err) {
|
|
79
|
-
console.error(chalk.red(`Failed to start watcher: ${err}`));
|
|
80
|
-
process.exit(1);
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=watch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `co webhook`
|
|
3
|
-
*
|
|
4
|
-
* Starts the webhook server standalone — useful for testing without the full
|
|
5
|
-
* lifecycle manager and board watcher.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* co webhook [--port 4748]
|
|
9
|
-
*/
|
|
10
|
-
import type { Command } from "commander";
|
|
11
|
-
export declare function registerWebhook(program: Command): void;
|
|
12
|
-
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/commands/webhook.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2DtD"}
|
package/dist/commands/webhook.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `co webhook`
|
|
3
|
-
*
|
|
4
|
-
* Starts the webhook server standalone — useful for testing without the full
|
|
5
|
-
* lifecycle manager and board watcher.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* co webhook [--port 4748]
|
|
9
|
-
*/
|
|
10
|
-
import chalk from "chalk";
|
|
11
|
-
import { loadConfig } from "../services.js";
|
|
12
|
-
export function registerWebhook(program) {
|
|
13
|
-
program
|
|
14
|
-
.command("webhook")
|
|
15
|
-
.description("Start webhook server standalone (HTTP + GitHub webhook → kanban task creation)")
|
|
16
|
-
.option("-p, --port <port>", "Port to listen on (default: 4748)")
|
|
17
|
-
.action(async (opts) => {
|
|
18
|
-
try {
|
|
19
|
-
const config = await loadConfig();
|
|
20
|
-
const port = opts.port
|
|
21
|
-
? parseInt(opts.port, 10)
|
|
22
|
-
: (config.webhook?.port ?? 4748);
|
|
23
|
-
const { createWebhookServer } = await import("@conductor-oss/plugin-webhook");
|
|
24
|
-
const webhookConfig = {
|
|
25
|
-
enabled: true,
|
|
26
|
-
port,
|
|
27
|
-
secret: config.webhook?.secret,
|
|
28
|
-
};
|
|
29
|
-
const server = createWebhookServer(config, webhookConfig);
|
|
30
|
-
await server.start();
|
|
31
|
-
const line = "=".repeat(50);
|
|
32
|
-
console.log(chalk.dim(line));
|
|
33
|
-
console.log(chalk.bold.cyan(" Conductor Webhook Server"));
|
|
34
|
-
console.log(chalk.dim(line));
|
|
35
|
-
console.log();
|
|
36
|
-
console.log(chalk.bold.green(`Webhook server running on http://localhost:${port}`));
|
|
37
|
-
console.log();
|
|
38
|
-
console.log(chalk.dim(" POST /api/webhook/task — create task from any source"));
|
|
39
|
-
console.log(chalk.dim(" POST /api/webhook/github — handle GitHub webhook events"));
|
|
40
|
-
console.log(chalk.dim(" GET /api/webhook/health — health check"));
|
|
41
|
-
console.log(chalk.dim(" GET /api/webhook/status — stats"));
|
|
42
|
-
console.log();
|
|
43
|
-
console.log(chalk.dim(" Press Ctrl-C to stop.\n"));
|
|
44
|
-
const shutdown = () => {
|
|
45
|
-
server.stop();
|
|
46
|
-
process.exit(0);
|
|
47
|
-
};
|
|
48
|
-
process.on("SIGINT", shutdown);
|
|
49
|
-
process.on("SIGTERM", shutdown);
|
|
50
|
-
// Keep process alive
|
|
51
|
-
setInterval(() => { }, 60_000);
|
|
52
|
-
}
|
|
53
|
-
catch (err) {
|
|
54
|
-
console.error(chalk.red(`Failed to start webhook server: ${err}`));
|
|
55
|
-
process.exit(1);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=webhook.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/commands/webhook.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,gFAAgF,CAAC;SAC7F,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,IAAuB,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;gBACpB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;YAEnC,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAC1C,+BAA+B,CAChC,CAAC;YAEF,MAAM,aAAa,GAAG;gBACpB,OAAO,EAAE,IAAI;gBACb,IAAI;gBACJ,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM;aAC/B,CAAC;YAEF,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAC1D,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YAErB,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,8CAA8C,IAAI,EAAE,CAAC,CACvE,CAAC;YACF,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CACtE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CACvE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAEpD,MAAM,QAAQ,GAAG,GAAS,EAAE;gBAC1B,MAAM,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAEhC,qBAAqB;YACrB,WAAW,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Conductor Webhook Plugin
|
|
3
|
-
*
|
|
4
|
-
* HTTP server that listens for external events and creates tasks on
|
|
5
|
-
* Obsidian CONDUCTOR.md kanban boards automatically.
|
|
6
|
-
*
|
|
7
|
-
* Endpoints:
|
|
8
|
-
* POST /api/webhook/task — Create a task from any source
|
|
9
|
-
* POST /api/webhook/github — Handle GitHub webhook events
|
|
10
|
-
* GET /api/webhook/health — Health check
|
|
11
|
-
* GET /api/webhook/status — Stats (tasks created, uptime)
|
|
12
|
-
*/
|
|
13
|
-
import type { OrchestratorConfig } from "@conductor-oss/core";
|
|
14
|
-
export interface WebhookConfig {
|
|
15
|
-
enabled: boolean;
|
|
16
|
-
port: number;
|
|
17
|
-
secret?: string;
|
|
18
|
-
}
|
|
19
|
-
export interface WebhookServer {
|
|
20
|
-
start(): Promise<void>;
|
|
21
|
-
stop(): void;
|
|
22
|
-
getStats(): {
|
|
23
|
-
tasksCreated: number;
|
|
24
|
-
startedAt: Date;
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
export declare function createWebhookServer(config: OrchestratorConfig, webhookConfig: WebhookConfig): WebhookServer;
|
|
28
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAM9D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,IAAI,CAAC;IACb,QAAQ,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC;CACvD;AAqID,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,kBAAkB,EAC1B,aAAa,EAAE,aAAa,GAC3B,aAAa,CAsMf"}
|
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Conductor Webhook Plugin
|
|
3
|
-
*
|
|
4
|
-
* HTTP server that listens for external events and creates tasks on
|
|
5
|
-
* Obsidian CONDUCTOR.md kanban boards automatically.
|
|
6
|
-
*
|
|
7
|
-
* Endpoints:
|
|
8
|
-
* POST /api/webhook/task — Create a task from any source
|
|
9
|
-
* POST /api/webhook/github — Handle GitHub webhook events
|
|
10
|
-
* GET /api/webhook/health — Health check
|
|
11
|
-
* GET /api/webhook/status — Stats (tasks created, uptime)
|
|
12
|
-
*/
|
|
13
|
-
import { createServer } from "node:http";
|
|
14
|
-
import { createHmac } from "node:crypto";
|
|
15
|
-
import { readFileSync, writeFileSync, appendFileSync, existsSync, mkdirSync } from "node:fs";
|
|
16
|
-
import { join } from "node:path";
|
|
17
|
-
// =============================================================================
|
|
18
|
-
// Helpers
|
|
19
|
-
// =============================================================================
|
|
20
|
-
function readBody(req) {
|
|
21
|
-
return new Promise((resolve, reject) => {
|
|
22
|
-
const chunks = [];
|
|
23
|
-
req.on("data", (chunk) => chunks.push(chunk));
|
|
24
|
-
req.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")));
|
|
25
|
-
req.on("error", reject);
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
/** Constant-time HMAC-SHA256 signature verification for GitHub webhooks. */
|
|
29
|
-
function verifyGitHubSignature(body, signature, secret) {
|
|
30
|
-
if (!signature)
|
|
31
|
-
return false;
|
|
32
|
-
const expected = "sha256=" + createHmac("sha256", secret).update(body).digest("hex");
|
|
33
|
-
if (expected.length !== signature.length)
|
|
34
|
-
return false;
|
|
35
|
-
let diff = 0;
|
|
36
|
-
for (let i = 0; i < expected.length; i++) {
|
|
37
|
-
diff |= expected.charCodeAt(i) ^ signature.charCodeAt(i);
|
|
38
|
-
}
|
|
39
|
-
return diff === 0;
|
|
40
|
-
}
|
|
41
|
-
/** Resolve the default workspace path. */
|
|
42
|
-
function defaultWorkspacePath() {
|
|
43
|
-
return (process.env["CONDUCTOR_WORKSPACE"] ??
|
|
44
|
-
join(process.env["HOME"] ?? "~", ".conductor", "workspace"));
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Find the best CONDUCTOR.md board path for a given project key.
|
|
48
|
-
* Falls back to the first available board, then the default workspace board.
|
|
49
|
-
*/
|
|
50
|
-
function findBoardPath(config, projectKey) {
|
|
51
|
-
const workspacePath = defaultWorkspacePath();
|
|
52
|
-
if (projectKey) {
|
|
53
|
-
const project = config.projects[projectKey];
|
|
54
|
-
if (project) {
|
|
55
|
-
const boardDir = project.boardDir ?? projectKey;
|
|
56
|
-
const candidate = join(workspacePath, boardDir, "CONDUCTOR.md");
|
|
57
|
-
if (existsSync(candidate))
|
|
58
|
-
return candidate;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
// First available project board
|
|
62
|
-
for (const [key, project] of Object.entries(config.projects)) {
|
|
63
|
-
const boardDir = project.boardDir ?? key;
|
|
64
|
-
const candidate = join(workspacePath, boardDir, "CONDUCTOR.md");
|
|
65
|
-
if (existsSync(candidate))
|
|
66
|
-
return candidate;
|
|
67
|
-
}
|
|
68
|
-
// Top-level workspace board
|
|
69
|
-
const defaultBoard = join(workspacePath, "CONDUCTOR.md");
|
|
70
|
-
if (existsSync(defaultBoard))
|
|
71
|
-
return defaultBoard;
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Insert a task line into the Inbox section of a CONDUCTOR.md board.
|
|
76
|
-
* If no "## Inbox" heading exists, one is appended.
|
|
77
|
-
*/
|
|
78
|
-
function addTaskToInbox(boardPath, task) {
|
|
79
|
-
const content = readFileSync(boardPath, "utf-8");
|
|
80
|
-
const inboxIdx = content.indexOf("## Inbox");
|
|
81
|
-
if (inboxIdx === -1) {
|
|
82
|
-
writeFileSync(boardPath, content + `\n## Inbox\n\n- ${task}\n`);
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
// Insert immediately after the "## Inbox\n" line
|
|
86
|
-
const insertAt = content.indexOf("\n", inboxIdx) + 1;
|
|
87
|
-
const newContent = content.slice(0, insertAt) + `- ${task}\n` + content.slice(insertAt);
|
|
88
|
-
writeFileSync(boardPath, newContent);
|
|
89
|
-
}
|
|
90
|
-
/** Append a line to conductor.log and echo to stdout. */
|
|
91
|
-
function logWebhook(message) {
|
|
92
|
-
const logDir = join(process.env["HOME"] ?? ".", ".conductor");
|
|
93
|
-
const logPath = join(logDir, "conductor.log");
|
|
94
|
-
const timestamp = new Date().toISOString();
|
|
95
|
-
try {
|
|
96
|
-
mkdirSync(logDir, { recursive: true });
|
|
97
|
-
appendFileSync(logPath, `[${timestamp}] [webhook] ${message}\n`);
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
/* ignore log write failures */
|
|
101
|
-
}
|
|
102
|
-
console.log(`[webhook] ${message}`);
|
|
103
|
-
}
|
|
104
|
-
function sendJson(res, status, data) {
|
|
105
|
-
const body = JSON.stringify(data);
|
|
106
|
-
res.writeHead(status, { "Content-Type": "application/json" });
|
|
107
|
-
res.end(body);
|
|
108
|
-
}
|
|
109
|
-
/** Find a project key whose repo name matches the GitHub repository name. */
|
|
110
|
-
function matchProject(config, repoName) {
|
|
111
|
-
for (const [key, proj] of Object.entries(config.projects)) {
|
|
112
|
-
if (proj.repo === repoName ||
|
|
113
|
-
proj.repo.endsWith(`/${repoName}`)) {
|
|
114
|
-
return key;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return undefined;
|
|
118
|
-
}
|
|
119
|
-
// =============================================================================
|
|
120
|
-
// Server factory
|
|
121
|
-
// =============================================================================
|
|
122
|
-
export function createWebhookServer(config, webhookConfig) {
|
|
123
|
-
let tasksCreated = 0;
|
|
124
|
-
const startedAt = new Date();
|
|
125
|
-
const server = createServer(async (req, res) => {
|
|
126
|
-
const url = req.url ?? "/";
|
|
127
|
-
const method = req.method ?? "GET";
|
|
128
|
-
try {
|
|
129
|
-
// ------------------------------------------------------------------
|
|
130
|
-
// GET /api/webhook/health
|
|
131
|
-
// ------------------------------------------------------------------
|
|
132
|
-
if (method === "GET" && url === "/api/webhook/health") {
|
|
133
|
-
sendJson(res, 200, { ok: true });
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
// ------------------------------------------------------------------
|
|
137
|
-
// GET /api/webhook/status
|
|
138
|
-
// ------------------------------------------------------------------
|
|
139
|
-
if (method === "GET" && url === "/api/webhook/status") {
|
|
140
|
-
sendJson(res, 200, {
|
|
141
|
-
ok: true,
|
|
142
|
-
tasksCreated,
|
|
143
|
-
uptime: Math.floor((Date.now() - startedAt.getTime()) / 1000),
|
|
144
|
-
startedAt: startedAt.toISOString(),
|
|
145
|
-
});
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
// ------------------------------------------------------------------
|
|
149
|
-
// POST /api/webhook/task — generic task creation
|
|
150
|
-
// ------------------------------------------------------------------
|
|
151
|
-
if (method === "POST" && url === "/api/webhook/task") {
|
|
152
|
-
const raw = await readBody(req);
|
|
153
|
-
let payload;
|
|
154
|
-
try {
|
|
155
|
-
payload = JSON.parse(raw);
|
|
156
|
-
}
|
|
157
|
-
catch {
|
|
158
|
-
sendJson(res, 400, { ok: false, error: "Invalid JSON body" });
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
if (!payload.task) {
|
|
162
|
-
sendJson(res, 400, { ok: false, error: "task field is required" });
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
let taskLine = payload.task;
|
|
166
|
-
if (payload.agent)
|
|
167
|
-
taskLine += ` #agent/${payload.agent}`;
|
|
168
|
-
if (payload.project)
|
|
169
|
-
taskLine += ` #project/${payload.project}`;
|
|
170
|
-
if (payload.priority)
|
|
171
|
-
taskLine += ` #priority/${payload.priority}`;
|
|
172
|
-
const boardPath = payload.board ?? findBoardPath(config, payload.project);
|
|
173
|
-
if (!boardPath) {
|
|
174
|
-
sendJson(res, 500, {
|
|
175
|
-
ok: false,
|
|
176
|
-
error: "No CONDUCTOR.md board found",
|
|
177
|
-
});
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
addTaskToInbox(boardPath, taskLine);
|
|
181
|
-
tasksCreated++;
|
|
182
|
-
logWebhook(`Task created: "${taskLine}" -> ${boardPath}`);
|
|
183
|
-
sendJson(res, 200, { ok: true, task: taskLine, board: boardPath });
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
// ------------------------------------------------------------------
|
|
187
|
-
// POST /api/webhook/github — GitHub webhook events
|
|
188
|
-
// ------------------------------------------------------------------
|
|
189
|
-
if (method === "POST" && url === "/api/webhook/github") {
|
|
190
|
-
const raw = await readBody(req);
|
|
191
|
-
// Verify HMAC signature when a secret is configured
|
|
192
|
-
if (webhookConfig.secret) {
|
|
193
|
-
const sig = req.headers["x-hub-signature-256"];
|
|
194
|
-
if (!verifyGitHubSignature(raw, sig, webhookConfig.secret)) {
|
|
195
|
-
sendJson(res, 401, { ok: false, error: "Invalid signature" });
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
const event = req.headers["x-github-event"];
|
|
200
|
-
let payload;
|
|
201
|
-
try {
|
|
202
|
-
payload = JSON.parse(raw);
|
|
203
|
-
}
|
|
204
|
-
catch {
|
|
205
|
-
sendJson(res, 400, { ok: false, error: "Invalid JSON body" });
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
const action = payload["action"];
|
|
209
|
-
let taskLine = null;
|
|
210
|
-
let projectKey;
|
|
211
|
-
const repoObj = payload["repository"];
|
|
212
|
-
const repoName = repoObj?.["name"] ?? "";
|
|
213
|
-
if (repoName) {
|
|
214
|
-
projectKey = matchProject(config, repoName);
|
|
215
|
-
}
|
|
216
|
-
const projectTag = projectKey ? ` #project/${projectKey}` : "";
|
|
217
|
-
// ---- issues.opened ----
|
|
218
|
-
if (event === "issues" && action === "opened") {
|
|
219
|
-
const issue = payload["issue"];
|
|
220
|
-
const issueNum = issue?.["number"];
|
|
221
|
-
const title = issue?.["title"] ?? "New issue";
|
|
222
|
-
const body = issue?.["body"] ?? "";
|
|
223
|
-
const issueTag = issueNum ? ` #issue/${issueNum}` : "";
|
|
224
|
-
taskLine = `${title}${issueTag}${projectTag}`;
|
|
225
|
-
if (body.trim()) {
|
|
226
|
-
const preview = body.slice(0, 200).replace(/\n+/g, " ").trim();
|
|
227
|
-
taskLine += ` — ${preview}`;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
// ---- issue_comment.created with /conductor command ----
|
|
231
|
-
if (event === "issue_comment" && action === "created") {
|
|
232
|
-
const comment = payload["comment"];
|
|
233
|
-
const commentBody = comment?.["body"] ?? "";
|
|
234
|
-
if (commentBody.trim().startsWith("/conductor")) {
|
|
235
|
-
const taskText = commentBody
|
|
236
|
-
.replace(/^\/conductor\s*/m, "")
|
|
237
|
-
.trim();
|
|
238
|
-
if (taskText) {
|
|
239
|
-
taskLine = `${taskText}${projectTag}`;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
// ---- pull_request_review with changes_requested ----
|
|
244
|
-
if (event === "pull_request_review" && action === "submitted") {
|
|
245
|
-
const review = payload["review"];
|
|
246
|
-
const state = review?.["state"]?.toLowerCase();
|
|
247
|
-
if (state === "changes_requested") {
|
|
248
|
-
const pr = payload["pull_request"];
|
|
249
|
-
const prNum = pr?.["number"];
|
|
250
|
-
taskLine = `Address PR review for #${prNum}${projectTag}`;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
if (!taskLine) {
|
|
254
|
-
sendJson(res, 200, { ok: true, skipped: true, event, action });
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
const boardPath = findBoardPath(config, projectKey);
|
|
258
|
-
if (!boardPath) {
|
|
259
|
-
sendJson(res, 500, { ok: false, error: "No CONDUCTOR.md board found" });
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
addTaskToInbox(boardPath, taskLine);
|
|
263
|
-
tasksCreated++;
|
|
264
|
-
logWebhook(`GitHub ${event}/${action}: "${taskLine}" -> ${boardPath}`);
|
|
265
|
-
sendJson(res, 200, { ok: true, task: taskLine, board: boardPath });
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
// 404
|
|
269
|
-
sendJson(res, 404, { ok: false, error: "Not found" });
|
|
270
|
-
}
|
|
271
|
-
catch (err) {
|
|
272
|
-
console.error("[webhook] Unhandled error:", err);
|
|
273
|
-
sendJson(res, 500, { ok: false, error: "Internal server error" });
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
return {
|
|
277
|
-
start() {
|
|
278
|
-
return new Promise((resolve, reject) => {
|
|
279
|
-
server.listen(webhookConfig.port, () => {
|
|
280
|
-
logWebhook(`Listening on port ${webhookConfig.port}`);
|
|
281
|
-
resolve();
|
|
282
|
-
});
|
|
283
|
-
server.on("error", reject);
|
|
284
|
-
});
|
|
285
|
-
},
|
|
286
|
-
stop() {
|
|
287
|
-
server.close();
|
|
288
|
-
logWebhook("Server stopped");
|
|
289
|
-
},
|
|
290
|
-
getStats() {
|
|
291
|
-
return { tasksCreated, startedAt };
|
|
292
|
-
},
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
var R=require("../../../chunks/[turbopack]_runtime.js")("server/app/api/agents/route.js")
|
|
2
|
-
R.c("server/chunks/[root-of-the-server]__bf8faac8._.js")
|
|
3
|
-
R.c("server/chunks/node_modules_next_dist_79f1aee4._.js")
|
|
4
|
-
R.c("server/chunks/[root-of-the-server]__09c3bdaf._.js")
|
|
5
|
-
R.c("server/chunks/node_modules_next_f2da0d3e._.js")
|
|
6
|
-
R.c("server/chunks/packages_web__next-internal_server_app_api_agents_route_actions_29063d1a.js")
|
|
7
|
-
R.m(59396)
|
|
8
|
-
module.exports=R.m(59396).exports
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":1,"files":["../../../../../../../node_modules/next/dist/client/components/app-router-headers.js","../../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../../../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../../../../../node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js","../../../../../../../node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js","../../../../../../../node_modules/next/dist/lib/client-and-server-references.js","../../../../../../../node_modules/next/dist/lib/constants.js","../../../../../../../node_modules/next/dist/lib/interop-default.js","../../../../../../../node_modules/next/dist/lib/is-error.js","../../../../../../../node_modules/next/dist/lib/semver-noop.js","../../../../../../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../../../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../../../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../../../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../../../../node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../../../node_modules/next/dist/server/app-render/cache-signal.js","../../../../../../../node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../../../../../../node_modules/next/dist/server/app-render/console-async-storage.external.js","../../../../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js","../../../../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js","../../../../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../../../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../../../../../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../../../../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../../../../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../../../node_modules/next/dist/server/lib/lru-cache.js","../../../../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../../node_modules/next/dist/server/load-manifest.external.js","../../../../../../../node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../../../../../../node_modules/next/dist/server/response-cache/types.js","../../../../../../../node_modules/next/dist/server/runtime-reacts.external.js","../../../../../../../node_modules/next/dist/shared/lib/deep-freeze.js","../../../../../../../node_modules/next/dist/shared/lib/invariant-error.js","../../../../../../../node_modules/next/dist/shared/lib/is-plain-object.js","../../../../../../../node_modules/next/dist/shared/lib/is-thenable.js","../../../../../../../node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../../../../../node_modules/next/dist/shared/lib/server-reference-info.js","../../../../../../../node_modules/next/package.json","../../../chunks/[root-of-the-server]__09c3bdaf._.js","../../../chunks/[root-of-the-server]__bf8faac8._.js","../../../chunks/[turbopack]_runtime.js","../../../chunks/node_modules_next_dist_79f1aee4._.js","../../../chunks/node_modules_next_f2da0d3e._.js","../../../chunks/packages_web__next-internal_server_app_api_agents_route_actions_29063d1a.js","./route_client-reference-manifest.js"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {};
|
|
2
|
-
globalThis.__RSC_MANIFEST["/api/agents/route"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{},"ssrModuleMapping":{},"edgeSSRModuleMapping":{},"rscModuleMapping":{},"edgeRscModuleMapping":{},"entryCSSFiles":{},"entryJSFiles":{}}
|