@bookedsolid/reagent 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/ai-platforms/ai-deepseek-specialist.md +83 -0
- package/agents/ai-platforms/ai-elevenlabs-specialist.md +75 -0
- package/agents/ai-platforms/ai-grok-specialist.md +71 -0
- package/agents/ai-platforms/ai-local-llm-specialist.md +95 -0
- package/agents/ai-platforms/ai-video-ai-specialist.md +103 -0
- package/agents/engineering/cto-advisory.md +44 -0
- package/agents/engineering/qa-engineer-automation.md +77 -0
- package/agents/engineering/qa-engineer-manual.md +48 -0
- package/agents/engineering/qa-lead.md +124 -0
- package/agents/engineering/security-engineer-appsec.md +47 -0
- package/agents/engineering/security-engineer-compliance.md +47 -0
- package/dist/cli/commands/catalyze/gap-detector.d.ts +6 -0
- package/dist/cli/commands/catalyze/gap-detector.d.ts.map +1 -0
- package/dist/cli/commands/catalyze/gap-detector.js +359 -0
- package/dist/cli/commands/catalyze/gap-detector.js.map +1 -0
- package/dist/cli/commands/catalyze/index.d.ts +15 -0
- package/dist/cli/commands/catalyze/index.d.ts.map +1 -0
- package/dist/cli/commands/catalyze/index.js +149 -0
- package/dist/cli/commands/catalyze/index.js.map +1 -0
- package/dist/cli/commands/catalyze/report-generator.d.ts +17 -0
- package/dist/cli/commands/catalyze/report-generator.d.ts.map +1 -0
- package/dist/cli/commands/catalyze/report-generator.js +290 -0
- package/dist/cli/commands/catalyze/report-generator.js.map +1 -0
- package/dist/cli/commands/catalyze/stack-analyzer.d.ts +6 -0
- package/dist/cli/commands/catalyze/stack-analyzer.d.ts.map +1 -0
- package/dist/cli/commands/catalyze/stack-analyzer.js +267 -0
- package/dist/cli/commands/catalyze/stack-analyzer.js.map +1 -0
- package/dist/cli/commands/catalyze/types.d.ts +40 -0
- package/dist/cli/commands/catalyze/types.d.ts.map +1 -0
- package/dist/cli/commands/catalyze/types.js +2 -0
- package/dist/cli/commands/catalyze/types.js.map +1 -0
- package/dist/cli/commands/init/agents.d.ts.map +1 -1
- package/dist/cli/commands/init/agents.js +9 -0
- package/dist/cli/commands/init/agents.js.map +1 -1
- package/dist/cli/commands/init/claude-hooks.d.ts.map +1 -1
- package/dist/cli/commands/init/claude-hooks.js +27 -0
- package/dist/cli/commands/init/claude-hooks.js.map +1 -1
- package/dist/cli/commands/init/commands.d.ts.map +1 -1
- package/dist/cli/commands/init/commands.js +9 -0
- package/dist/cli/commands/init/commands.js.map +1 -1
- package/dist/cli/commands/init/discord.d.ts +21 -0
- package/dist/cli/commands/init/discord.d.ts.map +1 -0
- package/dist/cli/commands/init/discord.js +87 -0
- package/dist/cli/commands/init/discord.js.map +1 -0
- package/dist/cli/commands/init/github.d.ts +13 -0
- package/dist/cli/commands/init/github.d.ts.map +1 -0
- package/dist/cli/commands/init/github.js +81 -0
- package/dist/cli/commands/init/github.js.map +1 -0
- package/dist/cli/commands/init/index.d.ts.map +1 -1
- package/dist/cli/commands/init/index.js +72 -17
- package/dist/cli/commands/init/index.js.map +1 -1
- package/dist/cli/commands/init/profiles.d.ts +39 -0
- package/dist/cli/commands/init/profiles.d.ts.map +1 -0
- package/dist/cli/commands/init/profiles.js +132 -0
- package/dist/cli/commands/init/profiles.js.map +1 -0
- package/dist/cli/index.js +27 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/gateway/native-tools.d.ts.map +1 -1
- package/dist/gateway/native-tools.js +63 -0
- package/dist/gateway/native-tools.js.map +1 -1
- package/dist/pm/discord-notifier.d.ts +52 -0
- package/dist/pm/discord-notifier.d.ts.map +1 -0
- package/dist/pm/discord-notifier.js +122 -0
- package/dist/pm/discord-notifier.js.map +1 -0
- package/dist/pm/github-bridge.d.ts +35 -0
- package/dist/pm/github-bridge.d.ts.map +1 -1
- package/dist/pm/github-bridge.js +185 -0
- package/dist/pm/github-bridge.js.map +1 -1
- package/dist/pm/types.d.ts +7 -7
- package/hooks/ci-config-protection.sh +84 -0
- package/hooks/file-size-guard.sh +64 -0
- package/hooks/git-config-guard.sh +81 -0
- package/hooks/import-guard.sh +99 -0
- package/hooks/network-exfil-guard.sh +118 -0
- package/hooks/output-validation.sh +101 -0
- package/hooks/rate-limit-guard.sh +75 -0
- package/hooks/symlink-guard.sh +96 -0
- package/package.json +1 -1
- package/profiles/astro/README.md +44 -0
- package/profiles/astro/agents.txt +3 -0
- package/profiles/astro/gates.yaml +15 -0
- package/profiles/astro/hooks/astro-ssr-guard.sh +73 -0
- package/profiles/drupal/README.md +53 -0
- package/profiles/drupal/agents.txt +4 -0
- package/profiles/drupal/gates.yaml +15 -0
- package/profiles/drupal/hooks/drupal-coding-standards.sh +70 -0
- package/profiles/drupal/hooks/hook-update-guard.sh +65 -0
- package/profiles/lit-wc/README.md +48 -0
- package/profiles/lit-wc/agents.txt +4 -0
- package/profiles/lit-wc/gates.yaml +15 -0
- package/profiles/lit-wc/hooks/cem-integrity-gate.sh +48 -0
- package/profiles/lit-wc/hooks/shadow-dom-guard.sh +76 -0
- package/profiles/nextjs/README.md +44 -0
- package/profiles/nextjs/agents.txt +4 -0
- package/profiles/nextjs/gates.yaml +15 -0
- package/profiles/nextjs/hooks/server-component-drift.sh +73 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-tools.js","sourceRoot":"","sources":["../../src/gateway/native-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"native-tools.js","sourceRoot":"","sources":["../../src/gateway/native-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { TaskView } from './types.js';
|
|
2
|
+
export interface DiscordOpsConfig {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
guild_id: string;
|
|
5
|
+
channels: {
|
|
6
|
+
alerts?: string;
|
|
7
|
+
releases?: string;
|
|
8
|
+
tasks?: string;
|
|
9
|
+
dev?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface DiscordGatewayYaml {
|
|
13
|
+
discord_ops?: DiscordOpsConfig;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Load discord_ops config from .reagent/gateway.yaml.
|
|
17
|
+
* Returns null if not configured or disabled.
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadDiscordConfig(baseDir: string): DiscordOpsConfig | null;
|
|
20
|
+
/**
|
|
21
|
+
* Discord notifier — sends structured notifications to configured channels.
|
|
22
|
+
* All methods fail silently when Discord is not configured or unavailable.
|
|
23
|
+
*/
|
|
24
|
+
export declare class DiscordNotifier {
|
|
25
|
+
private readonly config;
|
|
26
|
+
constructor(baseDir: string);
|
|
27
|
+
/**
|
|
28
|
+
* Check whether Discord notifications are enabled.
|
|
29
|
+
*/
|
|
30
|
+
isEnabled(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Notify Discord that a task was created.
|
|
33
|
+
*/
|
|
34
|
+
notifyTaskCreated(task: TaskView): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Notify Discord that a task was completed.
|
|
37
|
+
*/
|
|
38
|
+
notifyTaskCompleted(task: TaskView): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Notify Discord that a hook blocked an action.
|
|
41
|
+
*/
|
|
42
|
+
notifyHookBlocked(hookName: string, tool: string, reason: string): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Notify Discord of a release.
|
|
45
|
+
*/
|
|
46
|
+
notifyRelease(version: string, changelog: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Notify Discord of a security/audit alert.
|
|
49
|
+
*/
|
|
50
|
+
notifyAuditAlert(message: string): Promise<void>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=discord-notifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discord-notifier.d.ts","sourceRoot":"","sources":["../../src/pm/discord-notifier.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAe1E;AA0CD;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;gBAErC,OAAO,EAAE,MAAM;IAI3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAStD;;OAEG;IACG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtF;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtE;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIvD"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { parse as parseYaml } from 'yaml';
|
|
5
|
+
/**
|
|
6
|
+
* Load discord_ops config from .reagent/gateway.yaml.
|
|
7
|
+
* Returns null if not configured or disabled.
|
|
8
|
+
*/
|
|
9
|
+
export function loadDiscordConfig(baseDir) {
|
|
10
|
+
const gatewayPath = path.join(baseDir, '.reagent', 'gateway.yaml');
|
|
11
|
+
if (!fs.existsSync(gatewayPath))
|
|
12
|
+
return null;
|
|
13
|
+
try {
|
|
14
|
+
const raw = fs.readFileSync(gatewayPath, 'utf8');
|
|
15
|
+
const parsed = parseYaml(raw);
|
|
16
|
+
const discordOps = parsed?.discord_ops;
|
|
17
|
+
if (!discordOps?.enabled)
|
|
18
|
+
return null;
|
|
19
|
+
return discordOps;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Send a message to a Discord channel via the discord-ops CLI.
|
|
27
|
+
* Fails silently — Discord notification failures must never block workflows.
|
|
28
|
+
*/
|
|
29
|
+
function sendDiscordMessage(config, channelKey, content, title) {
|
|
30
|
+
const channelId = config.channels[channelKey];
|
|
31
|
+
if (!channelId || !config.guild_id)
|
|
32
|
+
return;
|
|
33
|
+
const token = process.env['DISCORD_BOT_TOKEN'];
|
|
34
|
+
if (!token)
|
|
35
|
+
return;
|
|
36
|
+
try {
|
|
37
|
+
const args = [
|
|
38
|
+
'-y',
|
|
39
|
+
'@bookedsolid/discord-ops@latest',
|
|
40
|
+
'send_message',
|
|
41
|
+
'--channel-id',
|
|
42
|
+
channelId,
|
|
43
|
+
'--guild-id',
|
|
44
|
+
config.guild_id,
|
|
45
|
+
'--content',
|
|
46
|
+
title ? `**${title}**\n${content}` : content,
|
|
47
|
+
];
|
|
48
|
+
execFileSync('npx', args, {
|
|
49
|
+
encoding: 'utf8',
|
|
50
|
+
timeout: 10_000,
|
|
51
|
+
stdio: 'pipe',
|
|
52
|
+
env: { ...process.env, DISCORD_BOT_TOKEN: token },
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Fail silently — Discord notification failure must never block anything
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Discord notifier — sends structured notifications to configured channels.
|
|
61
|
+
* All methods fail silently when Discord is not configured or unavailable.
|
|
62
|
+
*/
|
|
63
|
+
export class DiscordNotifier {
|
|
64
|
+
config;
|
|
65
|
+
constructor(baseDir) {
|
|
66
|
+
this.config = loadDiscordConfig(baseDir);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check whether Discord notifications are enabled.
|
|
70
|
+
*/
|
|
71
|
+
isEnabled() {
|
|
72
|
+
return this.config !== null && this.config.enabled;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Notify Discord that a task was created.
|
|
76
|
+
*/
|
|
77
|
+
async notifyTaskCreated(task) {
|
|
78
|
+
if (!this.config)
|
|
79
|
+
return;
|
|
80
|
+
const content = `Task created: **${task.id}** — ${task.title}` +
|
|
81
|
+
(task.urgency !== 'normal' ? ` [${task.urgency}]` : '') +
|
|
82
|
+
(task.assignee ? ` (assigned to ${task.assignee})` : '');
|
|
83
|
+
sendDiscordMessage(this.config, 'tasks', content, 'Task Created');
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Notify Discord that a task was completed.
|
|
87
|
+
*/
|
|
88
|
+
async notifyTaskCompleted(task) {
|
|
89
|
+
if (!this.config)
|
|
90
|
+
return;
|
|
91
|
+
const content = `Task completed: **${task.id}** — ${task.title}`;
|
|
92
|
+
sendDiscordMessage(this.config, 'tasks', content, 'Task Completed');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Notify Discord that a hook blocked an action.
|
|
96
|
+
*/
|
|
97
|
+
async notifyHookBlocked(hookName, tool, reason) {
|
|
98
|
+
if (!this.config)
|
|
99
|
+
return;
|
|
100
|
+
const content = `Hook **${hookName}** blocked tool \`${tool}\`\nReason: ${reason}`;
|
|
101
|
+
sendDiscordMessage(this.config, 'alerts', content, 'Hook Block');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Notify Discord of a release.
|
|
105
|
+
*/
|
|
106
|
+
async notifyRelease(version, changelog) {
|
|
107
|
+
if (!this.config)
|
|
108
|
+
return;
|
|
109
|
+
const truncated = changelog.length > 500 ? changelog.slice(0, 497) + '...' : changelog;
|
|
110
|
+
const content = `Version **${version}** released\n\n${truncated}`;
|
|
111
|
+
sendDiscordMessage(this.config, 'releases', content, 'Release');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Notify Discord of a security/audit alert.
|
|
115
|
+
*/
|
|
116
|
+
async notifyAuditAlert(message) {
|
|
117
|
+
if (!this.config)
|
|
118
|
+
return;
|
|
119
|
+
sendDiscordMessage(this.config, 'alerts', message, 'Audit Alert');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=discord-notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discord-notifier.js","sourceRoot":"","sources":["../../src/pm/discord-notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,29 @@
|
|
|
1
1
|
export type GitHubMode = 'gh-cli' | 'local-only';
|
|
2
|
+
export interface RepoScaffoldOptions {
|
|
3
|
+
description?: string;
|
|
4
|
+
homepage?: string;
|
|
5
|
+
topics?: string[];
|
|
6
|
+
labels?: Array<{
|
|
7
|
+
name: string;
|
|
8
|
+
color: string;
|
|
9
|
+
description: string;
|
|
10
|
+
}>;
|
|
11
|
+
milestones?: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface RepoScaffoldResult {
|
|
14
|
+
description_set: boolean;
|
|
15
|
+
topics_added: string[];
|
|
16
|
+
labels_created: string[];
|
|
17
|
+
labels_skipped: string[];
|
|
18
|
+
milestones_created: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface ProjectSyncResult {
|
|
21
|
+
project_id: number | null;
|
|
22
|
+
project_url: string | null;
|
|
23
|
+
items_added: number;
|
|
24
|
+
items_skipped: number;
|
|
25
|
+
error?: string;
|
|
26
|
+
}
|
|
2
27
|
export interface GitHubBridgeOptions {
|
|
3
28
|
baseDir: string;
|
|
4
29
|
label?: string;
|
|
@@ -32,5 +57,15 @@ export declare class GitHubBridge {
|
|
|
32
57
|
* Close a GitHub issue when a task is completed.
|
|
33
58
|
*/
|
|
34
59
|
closeGitHubIssue(issueNumber: number): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Scaffold GitHub repo metadata: description, topics, labels, milestones.
|
|
62
|
+
*/
|
|
63
|
+
scaffoldRepo(options: RepoScaffoldOptions): RepoScaffoldResult;
|
|
64
|
+
/**
|
|
65
|
+
* Sync tasks with GitHub issues to a GitHub Projects v2 board.
|
|
66
|
+
* Finds or creates a project board named projectTitle, then adds all
|
|
67
|
+
* tasks that have a github_issue and are not yet on the board.
|
|
68
|
+
*/
|
|
69
|
+
syncToProject(projectTitle?: string): ProjectSyncResult;
|
|
35
70
|
}
|
|
36
71
|
//# sourceMappingURL=github-bridge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-bridge.d.ts","sourceRoot":"","sources":["../../src/pm/github-bridge.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,YAAY,CAAK;gBAEb,OAAO,EAAE,mBAAmB;IAOxC;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB,OAAO,IAAI,UAAU;IAIrB;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoDnE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"github-bridge.d.ts","sourceRoot":"","sources":["../../src/pm/github-bridge.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,YAAY,CAAK;gBAEb,OAAO,EAAE,mBAAmB;IAOxC;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB,OAAO,IAAI,UAAU;IAIrB;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoDnE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAe9C;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB;IA8G9D;;;;OAIG;IACH,aAAa,CAAC,YAAY,SAAY,GAAG,iBAAiB;CAyG3D"}
|
package/dist/pm/github-bridge.js
CHANGED
|
@@ -134,5 +134,190 @@ export class GitHubBridge {
|
|
|
134
134
|
return false;
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Scaffold GitHub repo metadata: description, topics, labels, milestones.
|
|
139
|
+
*/
|
|
140
|
+
scaffoldRepo(options) {
|
|
141
|
+
const result = {
|
|
142
|
+
description_set: false,
|
|
143
|
+
topics_added: [],
|
|
144
|
+
labels_created: [],
|
|
145
|
+
labels_skipped: [],
|
|
146
|
+
milestones_created: [],
|
|
147
|
+
};
|
|
148
|
+
if (this.mode !== 'gh-cli') {
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
// Set description and homepage
|
|
152
|
+
if (options.description || options.homepage) {
|
|
153
|
+
const editArgs = ['repo', 'edit'];
|
|
154
|
+
if (options.description) {
|
|
155
|
+
editArgs.push('--description', options.description);
|
|
156
|
+
}
|
|
157
|
+
if (options.homepage) {
|
|
158
|
+
editArgs.push('--homepage', options.homepage);
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
execFileSync('gh', editArgs, { encoding: 'utf8', timeout: 10000, stdio: 'pipe' });
|
|
162
|
+
result.description_set = true;
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
result.description_set = false;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Add topics
|
|
169
|
+
if (options.topics?.length) {
|
|
170
|
+
for (const topic of options.topics) {
|
|
171
|
+
try {
|
|
172
|
+
execFileSync('gh', ['repo', 'edit', '--add-topic', topic], {
|
|
173
|
+
encoding: 'utf8',
|
|
174
|
+
timeout: 10000,
|
|
175
|
+
stdio: 'pipe',
|
|
176
|
+
});
|
|
177
|
+
result.topics_added.push(topic);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
// Topic may already exist or be invalid — skip silently
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Create labels (idempotent)
|
|
185
|
+
const labelsToCreate = options.labels ?? [];
|
|
186
|
+
for (const label of labelsToCreate) {
|
|
187
|
+
try {
|
|
188
|
+
execFileSync('gh', [
|
|
189
|
+
'label',
|
|
190
|
+
'create',
|
|
191
|
+
label.name,
|
|
192
|
+
'--color',
|
|
193
|
+
label.color,
|
|
194
|
+
'--description',
|
|
195
|
+
label.description,
|
|
196
|
+
], { encoding: 'utf8', timeout: 10000, stdio: 'pipe' });
|
|
197
|
+
result.labels_created.push(label.name);
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
// Already exists error — treat as skipped
|
|
201
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
202
|
+
if (msg.includes('already exists') || msg.includes('Unprocessable Entity')) {
|
|
203
|
+
result.labels_skipped.push(label.name);
|
|
204
|
+
}
|
|
205
|
+
// Other errors — skip silently
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Create milestones
|
|
209
|
+
if (options.milestones?.length) {
|
|
210
|
+
for (const milestone of options.milestones) {
|
|
211
|
+
try {
|
|
212
|
+
// Get current repo owner/name for the API call
|
|
213
|
+
const repoInfo = execFileSync('gh', ['repo', 'view', '--json', 'owner,name'], {
|
|
214
|
+
encoding: 'utf8',
|
|
215
|
+
timeout: 10000,
|
|
216
|
+
stdio: 'pipe',
|
|
217
|
+
});
|
|
218
|
+
const { owner, name } = JSON.parse(repoInfo);
|
|
219
|
+
execFileSync('gh', [
|
|
220
|
+
'api',
|
|
221
|
+
`repos/${owner.login}/${name}/milestones`,
|
|
222
|
+
'-X',
|
|
223
|
+
'POST',
|
|
224
|
+
'-f',
|
|
225
|
+
`title=${milestone}`,
|
|
226
|
+
], { encoding: 'utf8', timeout: 10000, stdio: 'pipe' });
|
|
227
|
+
result.milestones_created.push(milestone);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// May already exist — skip silently
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Sync tasks with GitHub issues to a GitHub Projects v2 board.
|
|
238
|
+
* Finds or creates a project board named projectTitle, then adds all
|
|
239
|
+
* tasks that have a github_issue and are not yet on the board.
|
|
240
|
+
*/
|
|
241
|
+
syncToProject(projectTitle = 'reagent') {
|
|
242
|
+
const result = {
|
|
243
|
+
project_id: null,
|
|
244
|
+
project_url: null,
|
|
245
|
+
items_added: 0,
|
|
246
|
+
items_skipped: 0,
|
|
247
|
+
};
|
|
248
|
+
if (this.mode !== 'gh-cli') {
|
|
249
|
+
result.error = 'GitHub CLI not available. Install gh and run: gh auth login';
|
|
250
|
+
return result;
|
|
251
|
+
}
|
|
252
|
+
try {
|
|
253
|
+
// Get current repo owner
|
|
254
|
+
const repoInfo = execFileSync('gh', ['repo', 'view', '--json', 'owner,name,url'], {
|
|
255
|
+
encoding: 'utf8',
|
|
256
|
+
timeout: 10000,
|
|
257
|
+
stdio: 'pipe',
|
|
258
|
+
});
|
|
259
|
+
const repo = JSON.parse(repoInfo);
|
|
260
|
+
const owner = repo.owner.login;
|
|
261
|
+
// List projects for the owner
|
|
262
|
+
let projectId = null;
|
|
263
|
+
let projectUrl = null;
|
|
264
|
+
try {
|
|
265
|
+
const projectsOutput = execFileSync('gh', ['project', 'list', '--owner', owner, '--format', 'json'], { encoding: 'utf8', timeout: 10000, stdio: 'pipe' });
|
|
266
|
+
const projectsData = JSON.parse(projectsOutput);
|
|
267
|
+
const existing = projectsData.projects?.find((p) => p.title.toLowerCase() === projectTitle.toLowerCase());
|
|
268
|
+
if (existing) {
|
|
269
|
+
projectId = existing.id;
|
|
270
|
+
projectUrl = existing.url;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
// project list may fail if no projects exist — continue to create
|
|
275
|
+
}
|
|
276
|
+
// Create project if not found
|
|
277
|
+
if (!projectId) {
|
|
278
|
+
try {
|
|
279
|
+
const createOutput = execFileSync('gh', ['project', 'create', '--owner', owner, '--title', projectTitle, '--format', 'json'], { encoding: 'utf8', timeout: 15000, stdio: 'pipe' });
|
|
280
|
+
const created = JSON.parse(createOutput);
|
|
281
|
+
projectId = created.id;
|
|
282
|
+
projectUrl = created.url;
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
result.error = `Failed to create project: ${err instanceof Error ? err.message : String(err)}`;
|
|
286
|
+
return result;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
result.project_id = projectId;
|
|
290
|
+
result.project_url = projectUrl;
|
|
291
|
+
// Sync tasks with GitHub issues to the project board
|
|
292
|
+
const tasks = this.store.listTasks();
|
|
293
|
+
for (const task of tasks) {
|
|
294
|
+
if (!task.github_issue) {
|
|
295
|
+
result.items_skipped++;
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
try {
|
|
299
|
+
// Build the issue URL for this task
|
|
300
|
+
const issueUrl = `${repo.url}/issues/${task.github_issue}`;
|
|
301
|
+
execFileSync('gh', ['project', 'item-add', String(projectId), '--owner', owner, '--url', issueUrl], { encoding: 'utf8', timeout: 10000, stdio: 'pipe' });
|
|
302
|
+
result.items_added++;
|
|
303
|
+
}
|
|
304
|
+
catch (err) {
|
|
305
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
306
|
+
// "already exists" means the item is already on the board
|
|
307
|
+
if (msg.includes('already exists') || msg.includes('already on')) {
|
|
308
|
+
result.items_skipped++;
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
result.items_skipped++;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return result;
|
|
316
|
+
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
result.error = `syncToProject failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
319
|
+
return result;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
137
322
|
}
|
|
138
323
|
//# sourceMappingURL=github-bridge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-bridge.js","sourceRoot":"","sources":["../../src/pm/github-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"github-bridge.js","sourceRoot":"","sources":["../../src/pm/github-bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/pm/types.d.ts
CHANGED
|
@@ -16,13 +16,12 @@ export declare const TaskEventSchema: z.ZodObject<{
|
|
|
16
16
|
timestamp: z.ZodString;
|
|
17
17
|
session_id: z.ZodOptional<z.ZodString>;
|
|
18
18
|
}, "strip", z.ZodTypeAny, {
|
|
19
|
-
type: "blocked" | "completed" | "cancelled" | "created" | "started";
|
|
20
|
-
title: string;
|
|
21
19
|
id: string;
|
|
22
|
-
|
|
20
|
+
type: "created" | "started" | "completed" | "blocked" | "cancelled";
|
|
21
|
+
title: string;
|
|
23
22
|
urgency: "critical" | "normal" | "low";
|
|
23
|
+
timestamp: string;
|
|
24
24
|
description?: string | undefined;
|
|
25
|
-
session_id?: string | undefined;
|
|
26
25
|
phase?: string | undefined;
|
|
27
26
|
milestone?: string | undefined;
|
|
28
27
|
assignee?: string | undefined;
|
|
@@ -31,13 +30,13 @@ export declare const TaskEventSchema: z.ZodObject<{
|
|
|
31
30
|
pr_ref?: string | undefined;
|
|
32
31
|
blocked_by?: string | undefined;
|
|
33
32
|
github_issue?: number | undefined;
|
|
33
|
+
session_id?: string | undefined;
|
|
34
34
|
}, {
|
|
35
|
-
type: "blocked" | "completed" | "cancelled" | "created" | "started";
|
|
36
|
-
title: string;
|
|
37
35
|
id: string;
|
|
36
|
+
type: "created" | "started" | "completed" | "blocked" | "cancelled";
|
|
37
|
+
title: string;
|
|
38
38
|
timestamp: string;
|
|
39
39
|
description?: string | undefined;
|
|
40
|
-
session_id?: string | undefined;
|
|
41
40
|
urgency?: "critical" | "normal" | "low" | undefined;
|
|
42
41
|
phase?: string | undefined;
|
|
43
42
|
milestone?: string | undefined;
|
|
@@ -47,6 +46,7 @@ export declare const TaskEventSchema: z.ZodObject<{
|
|
|
47
46
|
pr_ref?: string | undefined;
|
|
48
47
|
blocked_by?: string | undefined;
|
|
49
48
|
github_issue?: number | undefined;
|
|
49
|
+
session_id?: string | undefined;
|
|
50
50
|
}>;
|
|
51
51
|
export type TaskEvent = z.infer<typeof TaskEventSchema>;
|
|
52
52
|
export type TaskEventInput = z.input<typeof TaskEventSchema>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# PostToolUse hook: ci-config-protection.sh
|
|
3
|
+
# Fires AFTER every Write tool call.
|
|
4
|
+
# Scans CI workflow files for dangerous permission or trust-boundary patterns.
|
|
5
|
+
# Advisory only (exit 0) — warns loudly but does not block.
|
|
6
|
+
#
|
|
7
|
+
# Triggers only when file_path matches .github/workflows/
|
|
8
|
+
#
|
|
9
|
+
# Patterns checked:
|
|
10
|
+
# - permissions: write-all
|
|
11
|
+
# - pull_request_target (trust escalation trigger)
|
|
12
|
+
# - secrets: inherit
|
|
13
|
+
#
|
|
14
|
+
# Exit codes:
|
|
15
|
+
# 0 = OK (including advisory warnings — not blocking)
|
|
16
|
+
|
|
17
|
+
set -uo pipefail
|
|
18
|
+
|
|
19
|
+
INPUT=$(cat)
|
|
20
|
+
|
|
21
|
+
# ── Dependency check ──────────────────────────────────────────────────────────
|
|
22
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
23
|
+
printf 'REAGENT ERROR: jq is required but not installed.\n' >&2
|
|
24
|
+
printf 'Install: brew install jq OR apt-get install -y jq\n' >&2
|
|
25
|
+
exit 2
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
# ── HALT check ────────────────────────────────────────────────────────────────
|
|
29
|
+
REAGENT_ROOT="${CLAUDE_PROJECT_DIR:-$(pwd)}"
|
|
30
|
+
HALT_FILE="${REAGENT_ROOT}/.reagent/HALT"
|
|
31
|
+
if [ -f "$HALT_FILE" ]; then
|
|
32
|
+
printf 'REAGENT HALT: %s\nAll agent operations suspended. Run: reagent unfreeze\n' \
|
|
33
|
+
"$(head -c 1024 "$HALT_FILE" 2>/dev/null || echo 'Reason unknown')" >&2
|
|
34
|
+
exit 2
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
FILE_PATH=$(printf '%s' "$INPUT" | jq -r '.tool_input.file_path // empty' 2>/dev/null)
|
|
38
|
+
|
|
39
|
+
# ── Only trigger for .github/workflows/ paths ─────────────────────────────────
|
|
40
|
+
if [[ -z "$FILE_PATH" ]]; then
|
|
41
|
+
exit 0
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
if [[ "$FILE_PATH" != *".github/workflows/"* ]]; then
|
|
45
|
+
exit 0
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# ── Extract written content ───────────────────────────────────────────────────
|
|
49
|
+
CONTENT=$(printf '%s' "$INPUT" | jq -r '.tool_input.content // empty' 2>/dev/null)
|
|
50
|
+
|
|
51
|
+
if [[ -z "$CONTENT" ]]; then
|
|
52
|
+
exit 0
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# ── Scan for dangerous CI patterns ───────────────────────────────────────────
|
|
56
|
+
WARNINGS=()
|
|
57
|
+
|
|
58
|
+
if printf '%s' "$CONTENT" | grep -qE 'permissions:[[:space:]]*write-all'; then
|
|
59
|
+
WARNINGS+=("permissions: write-all — grants all GitHub Actions permissions (read+write). Scope to only required permissions.")
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
if printf '%s' "$CONTENT" | grep -qE 'pull_request_target'; then
|
|
63
|
+
WARNINGS+=("pull_request_target — runs with write permissions from the base repo in context of a PR. Dangerous if combined with checkout of PR head code.")
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
if printf '%s' "$CONTENT" | grep -qE 'secrets:[[:space:]]*inherit'; then
|
|
67
|
+
WARNINGS+=("secrets: inherit — passes all secrets to called workflow. Only use with trusted reusable workflows in the same org.")
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
if [[ ${#WARNINGS[@]} -eq 0 ]]; then
|
|
71
|
+
exit 0
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# ── Print advisory ────────────────────────────────────────────────────────────
|
|
75
|
+
{
|
|
76
|
+
printf 'CI-CONFIG-PROTECTION: Potentially dangerous CI pattern in %s\n' "$(basename "$FILE_PATH")"
|
|
77
|
+
for WARNING in "${WARNINGS[@]}"; do
|
|
78
|
+
printf ' ADVISORY: %s\n' "$WARNING"
|
|
79
|
+
done
|
|
80
|
+
printf 'Note: This is advisory only. Review the workflow carefully before merging.\n'
|
|
81
|
+
printf 'Reference: https://securitylab.github.com/research/github-actions-preventing-pwn-requests/\n'
|
|
82
|
+
} >&2
|
|
83
|
+
|
|
84
|
+
exit 0
|