golem-cc 2.1.2 → 3.0.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.
Files changed (84) hide show
  1. package/.claude/commands/golem/build.md +18 -0
  2. package/.claude/commands/golem/config.md +39 -0
  3. package/.claude/commands/golem/continue.md +73 -0
  4. package/.claude/commands/golem/doctor.md +46 -0
  5. package/.claude/commands/golem/document.md +138 -0
  6. package/.claude/commands/golem/help.md +58 -0
  7. package/.claude/commands/golem/pause.md +130 -0
  8. package/.claude/commands/golem/plan.md +111 -0
  9. package/.claude/commands/golem/review.md +166 -0
  10. package/.claude/commands/golem/security.md +186 -0
  11. package/.claude/commands/golem/simplify.md +76 -0
  12. package/.claude/commands/golem/spec.md +105 -0
  13. package/.claude/commands/golem/status.md +33 -0
  14. package/.golem/agents/code-simplifier.md +54 -0
  15. package/.golem/agents/review-architecture.md +59 -0
  16. package/.golem/agents/review-logic.md +50 -0
  17. package/.golem/agents/review-security.md +50 -0
  18. package/.golem/agents/review-style.md +48 -0
  19. package/.golem/agents/review-tests.md +48 -0
  20. package/.golem/agents/spec-builder.md +60 -0
  21. package/.golem/bin/golem.mjs +270 -0
  22. package/.golem/lib/build.mjs +557 -0
  23. package/.golem/lib/claude.mjs +95 -0
  24. package/.golem/lib/config.mjs +421 -0
  25. package/.golem/lib/display.mjs +191 -0
  26. package/.golem/lib/doctor.mjs +197 -0
  27. package/.golem/lib/document.mjs +792 -0
  28. package/.golem/lib/gates.mjs +78 -0
  29. package/.golem/lib/init.mjs +166 -0
  30. package/.golem/lib/output.mjs +40 -0
  31. package/.golem/lib/ratelimit.mjs +86 -0
  32. package/.golem/lib/security.mjs +603 -0
  33. package/.golem/lib/simplify.mjs +101 -0
  34. package/.golem/lib/tui.mjs +368 -0
  35. package/.golem/lib/usage.mjs +119 -0
  36. package/.golem/lib/worktree.mjs +509 -0
  37. package/.golem/prompts/build.md +23 -0
  38. package/.golem/prompts/document-inline.md +66 -0
  39. package/.golem/prompts/document-markdown.md +80 -0
  40. package/.golem/prompts/simplify.md +35 -0
  41. package/README.md +141 -142
  42. package/bin/golem-shim.mjs +36 -0
  43. package/bin/install.mjs +193 -0
  44. package/package.json +27 -32
  45. package/.env.example +0 -17
  46. package/bin/golem +0 -1040
  47. package/commands/golem/build.md +0 -235
  48. package/commands/golem/config.md +0 -55
  49. package/commands/golem/doctor.md +0 -137
  50. package/commands/golem/help.md +0 -212
  51. package/commands/golem/plan.md +0 -214
  52. package/commands/golem/review.md +0 -376
  53. package/commands/golem/security.md +0 -204
  54. package/commands/golem/simplify.md +0 -94
  55. package/commands/golem/spec.md +0 -226
  56. package/commands/golem/status.md +0 -60
  57. package/dist/api/freshworks.d.ts +0 -61
  58. package/dist/api/freshworks.d.ts.map +0 -1
  59. package/dist/api/freshworks.js +0 -119
  60. package/dist/api/freshworks.js.map +0 -1
  61. package/dist/api/gitea.d.ts +0 -96
  62. package/dist/api/gitea.d.ts.map +0 -1
  63. package/dist/api/gitea.js +0 -154
  64. package/dist/api/gitea.js.map +0 -1
  65. package/dist/cli/index.d.ts +0 -9
  66. package/dist/cli/index.d.ts.map +0 -1
  67. package/dist/cli/index.js +0 -352
  68. package/dist/cli/index.js.map +0 -1
  69. package/dist/sync/ticket-sync.d.ts +0 -53
  70. package/dist/sync/ticket-sync.d.ts.map +0 -1
  71. package/dist/sync/ticket-sync.js +0 -226
  72. package/dist/sync/ticket-sync.js.map +0 -1
  73. package/dist/types.d.ts +0 -125
  74. package/dist/types.d.ts.map +0 -1
  75. package/dist/types.js +0 -5
  76. package/dist/types.js.map +0 -1
  77. package/dist/worktree/manager.d.ts +0 -54
  78. package/dist/worktree/manager.d.ts.map +0 -1
  79. package/dist/worktree/manager.js +0 -190
  80. package/dist/worktree/manager.js.map +0 -1
  81. package/golem/agents/code-simplifier.md +0 -81
  82. package/golem/agents/spec-builder.md +0 -90
  83. package/golem/prompts/PROMPT_build.md +0 -71
  84. package/golem/prompts/PROMPT_plan.md +0 -102
@@ -1,119 +0,0 @@
1
- /**
2
- * Freshservice API client
3
- *
4
- * API Docs: https://api.freshservice.com/
5
- */
6
- export class FreshworksClient {
7
- baseUrl;
8
- headers;
9
- constructor(config) {
10
- this.baseUrl = `https://${config.domain}/api/v2`;
11
- // Freshservice uses Basic Auth with API key as username, 'X' as password
12
- const auth = Buffer.from(`${config.apiKey}:X`).toString('base64');
13
- this.headers = new Headers({
14
- 'Authorization': `Basic ${auth}`,
15
- 'Content-Type': 'application/json',
16
- });
17
- }
18
- async request(method, endpoint, body) {
19
- const response = await fetch(`${this.baseUrl}${endpoint}`, {
20
- method,
21
- headers: this.headers,
22
- body: body ? JSON.stringify(body) : undefined,
23
- });
24
- if (!response.ok) {
25
- const text = await response.text();
26
- throw new Error(`Freshservice API error ${response.status}: ${text}`);
27
- }
28
- return response.json();
29
- }
30
- /**
31
- * Get a ticket by ID
32
- */
33
- async getTicket(id) {
34
- const result = await this.request('GET', `/tickets/${id}`);
35
- return result.ticket;
36
- }
37
- /**
38
- * Get tickets assigned to current user
39
- */
40
- async getMyTickets() {
41
- // Filter: new_and_my_open gets tickets assigned to me that are open
42
- const result = await this.request('GET', '/tickets?filter=new_and_my_open');
43
- return result.tickets;
44
- }
45
- /**
46
- * Create a new ticket
47
- */
48
- async createTicket(payload) {
49
- const result = await this.request('POST', '/tickets', { ticket: payload });
50
- return result.ticket;
51
- }
52
- /**
53
- * Update a ticket
54
- */
55
- async updateTicket(id, updates) {
56
- const result = await this.request('PUT', `/tickets/${id}`, { ticket: updates });
57
- return result.ticket;
58
- }
59
- /**
60
- * Get current agent info
61
- */
62
- async getCurrentAgent() {
63
- const result = await this.request('GET', '/agents/me');
64
- return result.agent;
65
- }
66
- /**
67
- * Add a note to a ticket
68
- */
69
- async addNote(ticketId, body, isPrivate = true) {
70
- await this.request('POST', `/tickets/${ticketId}/notes`, {
71
- body,
72
- private: isPrivate,
73
- });
74
- }
75
- /**
76
- * Close/resolve a ticket
77
- * Note: Freshservice requires responder_id and resolution_notes when closing
78
- */
79
- async closeTicket(id, resolution) {
80
- // Get current agent to assign as responder (required for closing)
81
- const agent = await this.getCurrentAgent();
82
- const resolutionText = resolution || 'Completed via Golem';
83
- const updates = {
84
- status: 4, // Resolved in Freshservice (5 = Closed requires additional workflow)
85
- responder_id: agent.id,
86
- resolution_notes: resolutionText,
87
- };
88
- return this.updateTicket(id, updates);
89
- }
90
- /**
91
- * Format ticket ID for display (e.g., "INC-1234")
92
- */
93
- static formatTicketId(id, type = 'Incident') {
94
- const prefix = type === 'Incident' ? 'INC' : 'SR';
95
- return `${prefix}-${id}`;
96
- }
97
- /**
98
- * Parse ticket ID from string (e.g., "INC-1234" -> 1234)
99
- */
100
- static parseTicketId(idString) {
101
- const match = idString.match(/(?:INC|SR)-?(\d+)/i);
102
- if (!match) {
103
- throw new Error(`Invalid ticket ID format: ${idString}`);
104
- }
105
- return parseInt(match[1], 10);
106
- }
107
- }
108
- /**
109
- * Create client from environment variables
110
- */
111
- export function createFreshworksClient() {
112
- const domain = process.env.FRESH_DOMAIN;
113
- const apiKey = process.env.FRESH_API_KEY;
114
- if (!domain || !apiKey) {
115
- throw new Error('Missing FRESH_DOMAIN or FRESH_API_KEY environment variables');
116
- }
117
- return new FreshworksClient({ domain, apiKey });
118
- }
119
- //# sourceMappingURL=freshworks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"freshworks.js","sourceRoot":"","sources":["../../src/api/freshworks.ts"],"names":[],"mappings":"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"}
@@ -1,96 +0,0 @@
1
- /**
2
- * Gitea API client
3
- *
4
- * API Docs: https://docs.gitea.com/api/1.20/
5
- * Swagger: {your-gitea}/api/swagger
6
- */
7
- import type { GiteaIssue, GiteaIssueCreatePayload, GiteaPullRequest } from '../types.js';
8
- export interface GiteaConfig {
9
- baseUrl: string;
10
- token: string;
11
- org: string;
12
- }
13
- export declare class GiteaClient {
14
- private baseUrl;
15
- private headers;
16
- private defaultOrg;
17
- constructor(config: GiteaConfig);
18
- private request;
19
- private repoPath;
20
- /**
21
- * Get an issue by number
22
- */
23
- getIssue(repo: string, number: number): Promise<GiteaIssue>;
24
- /**
25
- * List issues for a repo
26
- */
27
- listIssues(repo: string, options?: {
28
- state?: 'open' | 'closed' | 'all';
29
- labels?: string[];
30
- }): Promise<GiteaIssue[]>;
31
- /**
32
- * Find an issue by ticket ID prefix in the title (e.g., "[INC-123]")
33
- * Returns the first matching issue or null if not found
34
- */
35
- findIssueByTicketId(repo: string, ticketId: string): Promise<GiteaIssue | null>;
36
- /**
37
- * Create a new issue
38
- */
39
- createIssue(repo: string, payload: GiteaIssueCreatePayload): Promise<GiteaIssue>;
40
- /**
41
- * Update an issue
42
- */
43
- updateIssue(repo: string, number: number, updates: Partial<GiteaIssueCreatePayload> & {
44
- state?: 'open' | 'closed';
45
- }): Promise<GiteaIssue>;
46
- /**
47
- * Add a comment to an issue
48
- */
49
- addIssueComment(repo: string, number: number, body: string): Promise<void>;
50
- /**
51
- * Close an issue
52
- */
53
- closeIssue(repo: string, number: number): Promise<GiteaIssue>;
54
- /**
55
- * Get a pull request by number
56
- */
57
- getPullRequest(repo: string, number: number): Promise<GiteaPullRequest>;
58
- /**
59
- * Create a pull request
60
- */
61
- createPullRequest(repo: string, payload: {
62
- title: string;
63
- body: string;
64
- head: string;
65
- base: string;
66
- }): Promise<GiteaPullRequest>;
67
- /**
68
- * Merge a pull request
69
- */
70
- mergePullRequest(repo: string, number: number, options?: {
71
- mergeStyle?: 'merge' | 'rebase' | 'squash';
72
- title?: string;
73
- message?: string;
74
- }): Promise<void>;
75
- /**
76
- * List repos in the default org
77
- */
78
- listOrgRepos(): Promise<{
79
- name: string;
80
- full_name: string;
81
- html_url: string;
82
- }[]>;
83
- /**
84
- * Get repo info
85
- */
86
- getRepo(repo: string): Promise<{
87
- name: string;
88
- full_name: string;
89
- default_branch: string;
90
- }>;
91
- }
92
- /**
93
- * Create client from environment variables
94
- */
95
- export declare function createGiteaClient(): GiteaClient;
96
- //# sourceMappingURL=gitea.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gitea.d.ts","sourceRoot":"","sources":["../../src/api/gitea.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,WAAW;YASjB,OAAO;IAwBrB,OAAO,CAAC,QAAQ;IAUhB;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKjE;;OAEG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAO,GACrE,OAAO,CAAC,UAAU,EAAE,CAAC;IAaxB;;;OAGG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQrF;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKtF;;OAEG;IACG,WAAW,CACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,GACxE,OAAO,CAAC,UAAU,CAAC;IAKtB;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhF;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMnE;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAK7E;;OAEG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,GACA,OAAO,CAAC,gBAAgB,CAAC;IAK5B;;OAEG;IACG,gBAAgB,CACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QACP,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KACb,GACL,OAAO,CAAC,IAAI,CAAC;IAWhB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAItF;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAIlG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAU/C"}
package/dist/api/gitea.js DELETED
@@ -1,154 +0,0 @@
1
- /**
2
- * Gitea API client
3
- *
4
- * API Docs: https://docs.gitea.com/api/1.20/
5
- * Swagger: {your-gitea}/api/swagger
6
- */
7
- export class GiteaClient {
8
- baseUrl;
9
- headers;
10
- defaultOrg;
11
- constructor(config) {
12
- this.baseUrl = `${config.baseUrl}/api/v1`;
13
- this.defaultOrg = config.org;
14
- this.headers = new Headers({
15
- 'Authorization': `token ${config.token}`,
16
- 'Content-Type': 'application/json',
17
- });
18
- }
19
- async request(method, endpoint, body) {
20
- const response = await fetch(`${this.baseUrl}${endpoint}`, {
21
- method,
22
- headers: this.headers,
23
- body: body ? JSON.stringify(body) : undefined,
24
- });
25
- if (!response.ok) {
26
- const text = await response.text();
27
- throw new Error(`Gitea API error ${response.status}: ${text}`);
28
- }
29
- // Handle empty responses (204 No Content)
30
- if (response.status === 204) {
31
- return undefined;
32
- }
33
- return response.json();
34
- }
35
- repoPath(repo) {
36
- // If repo doesn't include org, prepend default org
37
- if (!repo.includes('/')) {
38
- return `${this.defaultOrg}/${repo}`;
39
- }
40
- return repo;
41
- }
42
- // ============ Issues ============
43
- /**
44
- * Get an issue by number
45
- */
46
- async getIssue(repo, number) {
47
- const path = this.repoPath(repo);
48
- return this.request('GET', `/repos/${path}/issues/${number}`);
49
- }
50
- /**
51
- * List issues for a repo
52
- */
53
- async listIssues(repo, options = {}) {
54
- const path = this.repoPath(repo);
55
- const params = new URLSearchParams();
56
- if (options.state)
57
- params.set('state', options.state);
58
- if (options.labels?.length)
59
- params.set('labels', options.labels.join(','));
60
- const query = params.toString();
61
- return this.request('GET', `/repos/${path}/issues${query ? `?${query}` : ''}`);
62
- }
63
- /**
64
- * Find an issue by ticket ID prefix in the title (e.g., "[INC-123]")
65
- * Returns the first matching issue or null if not found
66
- */
67
- async findIssueByTicketId(repo, ticketId) {
68
- // Search all issues (open and closed) for one with the ticket ID in the title
69
- const issues = await this.listIssues(repo, { state: 'all' });
70
- const prefix = `[${ticketId}]`;
71
- const match = issues.find(issue => issue.title.startsWith(prefix));
72
- return match || null;
73
- }
74
- /**
75
- * Create a new issue
76
- */
77
- async createIssue(repo, payload) {
78
- const path = this.repoPath(repo);
79
- return this.request('POST', `/repos/${path}/issues`, payload);
80
- }
81
- /**
82
- * Update an issue
83
- */
84
- async updateIssue(repo, number, updates) {
85
- const path = this.repoPath(repo);
86
- return this.request('PATCH', `/repos/${path}/issues/${number}`, updates);
87
- }
88
- /**
89
- * Add a comment to an issue
90
- */
91
- async addIssueComment(repo, number, body) {
92
- const path = this.repoPath(repo);
93
- await this.request('POST', `/repos/${path}/issues/${number}/comments`, { body });
94
- }
95
- /**
96
- * Close an issue
97
- */
98
- async closeIssue(repo, number) {
99
- return this.updateIssue(repo, number, { state: 'closed' });
100
- }
101
- // ============ Pull Requests ============
102
- /**
103
- * Get a pull request by number
104
- */
105
- async getPullRequest(repo, number) {
106
- const path = this.repoPath(repo);
107
- return this.request('GET', `/repos/${path}/pulls/${number}`);
108
- }
109
- /**
110
- * Create a pull request
111
- */
112
- async createPullRequest(repo, payload) {
113
- const path = this.repoPath(repo);
114
- return this.request('POST', `/repos/${path}/pulls`, payload);
115
- }
116
- /**
117
- * Merge a pull request
118
- */
119
- async mergePullRequest(repo, number, options = {}) {
120
- const path = this.repoPath(repo);
121
- await this.request('POST', `/repos/${path}/pulls/${number}/merge`, {
122
- Do: options.mergeStyle || 'squash',
123
- MergeTitleField: options.title,
124
- MergeMessageField: options.message,
125
- });
126
- }
127
- // ============ Repos ============
128
- /**
129
- * List repos in the default org
130
- */
131
- async listOrgRepos() {
132
- return this.request('GET', `/orgs/${this.defaultOrg}/repos`);
133
- }
134
- /**
135
- * Get repo info
136
- */
137
- async getRepo(repo) {
138
- const path = this.repoPath(repo);
139
- return this.request('GET', `/repos/${path}`);
140
- }
141
- }
142
- /**
143
- * Create client from environment variables
144
- */
145
- export function createGiteaClient() {
146
- const baseUrl = process.env.GITEA_URL;
147
- const token = process.env.GITEA_TOKEN;
148
- const org = process.env.GITEA_ORG;
149
- if (!baseUrl || !token || !org) {
150
- throw new Error('Missing GITEA_URL, GITEA_TOKEN, or GITEA_ORG environment variables');
151
- }
152
- return new GiteaClient({ baseUrl, token, org });
153
- }
154
- //# sourceMappingURL=gitea.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gitea.js","sourceRoot":"","sources":["../../src/api/gitea.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * golem-api CLI
4
- *
5
- * TypeScript helper for API operations, called by the main golem bash script.
6
- * Handles JSON parsing and API communication cleanly.
7
- */
8
- export {};
9
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}