@beacon-build/sdk 1.15.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/CHANGELOG.md +36 -0
- package/LICENSE +21 -0
- package/dist/cli/backlog.d.ts +14 -0
- package/dist/cli/backlog.d.ts.map +1 -0
- package/dist/cli/backlog.js +228 -0
- package/dist/cli/backlog.js.map +1 -0
- package/dist/cli/claude-md-check.d.ts +18 -0
- package/dist/cli/claude-md-check.d.ts.map +1 -0
- package/dist/cli/claude-md-check.js +57 -0
- package/dist/cli/claude-md-check.js.map +1 -0
- package/dist/cli/context.d.ts +14 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +465 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/help.d.ts +17 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +71 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +22 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +212 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/project-log.d.ts +16 -0
- package/dist/cli/project-log.d.ts.map +1 -0
- package/dist/cli/project-log.js +185 -0
- package/dist/cli/project-log.js.map +1 -0
- package/dist/cli/setup-worktree.d.ts +23 -0
- package/dist/cli/setup-worktree.d.ts.map +1 -0
- package/dist/cli/setup-worktree.js +396 -0
- package/dist/cli/setup-worktree.js.map +1 -0
- package/dist/cli/update-client.d.ts +14 -0
- package/dist/cli/update-client.d.ts.map +1 -0
- package/dist/cli/update-client.js +629 -0
- package/dist/cli/update-client.js.map +1 -0
- package/dist/cli/workflow-sync.d.ts +19 -0
- package/dist/cli/workflow-sync.d.ts.map +1 -0
- package/dist/cli/workflow-sync.js +133 -0
- package/dist/cli/workflow-sync.js.map +1 -0
- package/dist/clients/admin/agents.client.d.ts +38 -0
- package/dist/clients/admin/agents.client.d.ts.map +1 -0
- package/dist/clients/admin/agents.client.js +90 -0
- package/dist/clients/admin/agents.client.js.map +1 -0
- package/dist/clients/admin/alerts.client.d.ts +8 -0
- package/dist/clients/admin/alerts.client.d.ts.map +1 -0
- package/dist/clients/admin/alerts.client.js +11 -0
- package/dist/clients/admin/alerts.client.js.map +1 -0
- package/dist/clients/admin/assets.client.d.ts +19 -0
- package/dist/clients/admin/assets.client.d.ts.map +1 -0
- package/dist/clients/admin/assets.client.js +27 -0
- package/dist/clients/admin/assets.client.js.map +1 -0
- package/dist/clients/admin/board-messages.client.d.ts +13 -0
- package/dist/clients/admin/board-messages.client.d.ts.map +1 -0
- package/dist/clients/admin/board-messages.client.js +16 -0
- package/dist/clients/admin/board-messages.client.js.map +1 -0
- package/dist/clients/admin/conversation-messages.client.d.ts +11 -0
- package/dist/clients/admin/conversation-messages.client.d.ts.map +1 -0
- package/dist/clients/admin/conversation-messages.client.js +27 -0
- package/dist/clients/admin/conversation-messages.client.js.map +1 -0
- package/dist/clients/admin/db.client.d.ts +12 -0
- package/dist/clients/admin/db.client.d.ts.map +1 -0
- package/dist/clients/admin/db.client.js +13 -0
- package/dist/clients/admin/db.client.js.map +1 -0
- package/dist/clients/admin/documents.client.d.ts +23 -0
- package/dist/clients/admin/documents.client.d.ts.map +1 -0
- package/dist/clients/admin/documents.client.js +33 -0
- package/dist/clients/admin/documents.client.js.map +1 -0
- package/dist/clients/admin/github-proxy.client.d.ts +12 -0
- package/dist/clients/admin/github-proxy.client.d.ts.map +1 -0
- package/dist/clients/admin/github-proxy.client.js +10 -0
- package/dist/clients/admin/github-proxy.client.js.map +1 -0
- package/dist/clients/admin/memories.client.d.ts +25 -0
- package/dist/clients/admin/memories.client.d.ts.map +1 -0
- package/dist/clients/admin/memories.client.js +67 -0
- package/dist/clients/admin/memories.client.js.map +1 -0
- package/dist/clients/admin/organizations.client.d.ts +25 -0
- package/dist/clients/admin/organizations.client.d.ts.map +1 -0
- package/dist/clients/admin/organizations.client.js +33 -0
- package/dist/clients/admin/organizations.client.js.map +1 -0
- package/dist/clients/admin/planning.client.d.ts +16 -0
- package/dist/clients/admin/planning.client.d.ts.map +1 -0
- package/dist/clients/admin/planning.client.js +24 -0
- package/dist/clients/admin/planning.client.js.map +1 -0
- package/dist/clients/admin/projects.client.d.ts +10 -0
- package/dist/clients/admin/projects.client.d.ts.map +1 -0
- package/dist/clients/admin/projects.client.js +21 -0
- package/dist/clients/admin/projects.client.js.map +1 -0
- package/dist/clients/admin/sessions.client.d.ts +23 -0
- package/dist/clients/admin/sessions.client.d.ts.map +1 -0
- package/dist/clients/admin/sessions.client.js +53 -0
- package/dist/clients/admin/sessions.client.js.map +1 -0
- package/dist/clients/admin/tasks.client.d.ts +21 -0
- package/dist/clients/admin/tasks.client.d.ts.map +1 -0
- package/dist/clients/admin/tasks.client.js +44 -0
- package/dist/clients/admin/tasks.client.js.map +1 -0
- package/dist/clients/admin/tool-calls.client.d.ts +12 -0
- package/dist/clients/admin/tool-calls.client.d.ts.map +1 -0
- package/dist/clients/admin/tool-calls.client.js +29 -0
- package/dist/clients/admin/tool-calls.client.js.map +1 -0
- package/dist/clients/admin/usage.client.d.ts +23 -0
- package/dist/clients/admin/usage.client.d.ts.map +1 -0
- package/dist/clients/admin/usage.client.js +37 -0
- package/dist/clients/admin/usage.client.js.map +1 -0
- package/dist/clients/admin/users.client.d.ts +17 -0
- package/dist/clients/admin/users.client.d.ts.map +1 -0
- package/dist/clients/admin/users.client.js +24 -0
- package/dist/clients/admin/users.client.js.map +1 -0
- package/dist/clients/agent/messaging.client.d.ts +13 -0
- package/dist/clients/agent/messaging.client.d.ts.map +1 -0
- package/dist/clients/agent/messaging.client.js +37 -0
- package/dist/clients/agent/messaging.client.js.map +1 -0
- package/dist/clients/agent/tasks.client.d.ts +18 -0
- package/dist/clients/agent/tasks.client.d.ts.map +1 -0
- package/dist/clients/agent/tasks.client.js +68 -0
- package/dist/clients/agent/tasks.client.js.map +1 -0
- package/dist/clients/auth.client.d.ts +40 -0
- package/dist/clients/auth.client.d.ts.map +1 -0
- package/dist/clients/auth.client.js +78 -0
- package/dist/clients/auth.client.js.map +1 -0
- package/dist/clients/ops/agents-ops.client.d.ts +46 -0
- package/dist/clients/ops/agents-ops.client.d.ts.map +1 -0
- package/dist/clients/ops/agents-ops.client.js +117 -0
- package/dist/clients/ops/agents-ops.client.js.map +1 -0
- package/dist/clients/ops/board-messages-ops.client.d.ts +14 -0
- package/dist/clients/ops/board-messages-ops.client.d.ts.map +1 -0
- package/dist/clients/ops/board-messages-ops.client.js +26 -0
- package/dist/clients/ops/board-messages-ops.client.js.map +1 -0
- package/dist/clients/ops/conversation-messages-ops.client.d.ts +10 -0
- package/dist/clients/ops/conversation-messages-ops.client.d.ts.map +1 -0
- package/dist/clients/ops/conversation-messages-ops.client.js +20 -0
- package/dist/clients/ops/conversation-messages-ops.client.js.map +1 -0
- package/dist/clients/ops/documents-ops.client.d.ts +20 -0
- package/dist/clients/ops/documents-ops.client.d.ts.map +1 -0
- package/dist/clients/ops/documents-ops.client.js +31 -0
- package/dist/clients/ops/documents-ops.client.js.map +1 -0
- package/dist/clients/ops/memories-ops.client.d.ts +25 -0
- package/dist/clients/ops/memories-ops.client.d.ts.map +1 -0
- package/dist/clients/ops/memories-ops.client.js +71 -0
- package/dist/clients/ops/memories-ops.client.js.map +1 -0
- package/dist/clients/ops/ops-db.client.d.ts +29 -0
- package/dist/clients/ops/ops-db.client.d.ts.map +1 -0
- package/dist/clients/ops/ops-db.client.js +35 -0
- package/dist/clients/ops/ops-db.client.js.map +1 -0
- package/dist/clients/ops/ops-logs.client.d.ts +22 -0
- package/dist/clients/ops/ops-logs.client.d.ts.map +1 -0
- package/dist/clients/ops/ops-logs.client.js +24 -0
- package/dist/clients/ops/ops-logs.client.js.map +1 -0
- package/dist/clients/ops/ops-mq.client.d.ts +19 -0
- package/dist/clients/ops/ops-mq.client.d.ts.map +1 -0
- package/dist/clients/ops/ops-mq.client.js +16 -0
- package/dist/clients/ops/ops-mq.client.js.map +1 -0
- package/dist/clients/ops/ops-northflank.client.d.ts +34 -0
- package/dist/clients/ops/ops-northflank.client.d.ts.map +1 -0
- package/dist/clients/ops/ops-northflank.client.js +42 -0
- package/dist/clients/ops/ops-northflank.client.js.map +1 -0
- package/dist/clients/ops/ops-storage.client.d.ts +34 -0
- package/dist/clients/ops/ops-storage.client.d.ts.map +1 -0
- package/dist/clients/ops/ops-storage.client.js +39 -0
- package/dist/clients/ops/ops-storage.client.js.map +1 -0
- package/dist/clients/ops/projects-ops.client.d.ts +20 -0
- package/dist/clients/ops/projects-ops.client.d.ts.map +1 -0
- package/dist/clients/ops/projects-ops.client.js +18 -0
- package/dist/clients/ops/projects-ops.client.js.map +1 -0
- package/dist/clients/ops/realtime-ops.client.d.ts +14 -0
- package/dist/clients/ops/realtime-ops.client.d.ts.map +1 -0
- package/dist/clients/ops/realtime-ops.client.js +10 -0
- package/dist/clients/ops/realtime-ops.client.js.map +1 -0
- package/dist/clients/ops/sessions-ops.client.d.ts +29 -0
- package/dist/clients/ops/sessions-ops.client.d.ts.map +1 -0
- package/dist/clients/ops/sessions-ops.client.js +69 -0
- package/dist/clients/ops/sessions-ops.client.js.map +1 -0
- package/dist/clients/ops/tasks-ops.client.d.ts +18 -0
- package/dist/clients/ops/tasks-ops.client.d.ts.map +1 -0
- package/dist/clients/ops/tasks-ops.client.js +37 -0
- package/dist/clients/ops/tasks-ops.client.js.map +1 -0
- package/dist/clients/ops/tool-calls-ops.client.d.ts +12 -0
- package/dist/clients/ops/tool-calls-ops.client.d.ts.map +1 -0
- package/dist/clients/ops/tool-calls-ops.client.js +29 -0
- package/dist/clients/ops/tool-calls-ops.client.js.map +1 -0
- package/dist/clients/ops/usage-workflows-ops.client.d.ts +22 -0
- package/dist/clients/ops/usage-workflows-ops.client.d.ts.map +1 -0
- package/dist/clients/ops/usage-workflows-ops.client.js +23 -0
- package/dist/clients/ops/usage-workflows-ops.client.js.map +1 -0
- package/dist/factory/admin-sdk.d.ts +53 -0
- package/dist/factory/admin-sdk.d.ts.map +1 -0
- package/dist/factory/admin-sdk.js +59 -0
- package/dist/factory/admin-sdk.js.map +1 -0
- package/dist/factory/agent-sdk.d.ts +22 -0
- package/dist/factory/agent-sdk.d.ts.map +1 -0
- package/dist/factory/agent-sdk.js +22 -0
- package/dist/factory/agent-sdk.js.map +1 -0
- package/dist/factory/ops-sdk.d.ts +53 -0
- package/dist/factory/ops-sdk.d.ts.map +1 -0
- package/dist/factory/ops-sdk.js +56 -0
- package/dist/factory/ops-sdk.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/legacy/sdk-factory.d.ts +34 -0
- package/dist/legacy/sdk-factory.d.ts.map +1 -0
- package/dist/legacy/sdk-factory.js +34 -0
- package/dist/legacy/sdk-factory.js.map +1 -0
- package/dist/lib/context.d.ts +69 -0
- package/dist/lib/context.d.ts.map +1 -0
- package/dist/lib/context.js +225 -0
- package/dist/lib/context.js.map +1 -0
- package/dist/lib/db.d.ts +16 -0
- package/dist/lib/db.d.ts.map +1 -0
- package/dist/lib/db.js +50 -0
- package/dist/lib/db.js.map +1 -0
- package/dist/lib/logger.d.ts +14 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +14 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/opencode.d.ts +33 -0
- package/dist/lib/opencode.d.ts.map +1 -0
- package/dist/lib/opencode.js +101 -0
- package/dist/lib/opencode.js.map +1 -0
- package/dist/lib/utils.d.ts +18 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +40 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/manifest.d.ts +26 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +700 -0
- package/dist/manifest.js.map +1 -0
- package/dist/realtime/realtime.client.d.ts +76 -0
- package/dist/realtime/realtime.client.d.ts.map +1 -0
- package/dist/realtime/realtime.client.js +168 -0
- package/dist/realtime/realtime.client.js.map +1 -0
- package/dist/transport/binary-client.d.ts +23 -0
- package/dist/transport/binary-client.d.ts.map +1 -0
- package/dist/transport/binary-client.js +69 -0
- package/dist/transport/binary-client.js.map +1 -0
- package/dist/transport/errors.d.ts +14 -0
- package/dist/transport/errors.d.ts.map +1 -0
- package/dist/transport/errors.js +57 -0
- package/dist/transport/errors.js.map +1 -0
- package/dist/transport/http-client.d.ts +23 -0
- package/dist/transport/http-client.d.ts.map +1 -0
- package/dist/transport/http-client.js +88 -0
- package/dist/transport/http-client.js.map +1 -0
- package/dist/transport/multipart-client.d.ts +25 -0
- package/dist/transport/multipart-client.d.ts.map +1 -0
- package/dist/transport/multipart-client.js +87 -0
- package/dist/transport/multipart-client.js.map +1 -0
- package/dist/transport/ops-api-client.d.ts +39 -0
- package/dist/transport/ops-api-client.d.ts.map +1 -0
- package/dist/transport/ops-api-client.js +153 -0
- package/dist/transport/ops-api-client.js.map +1 -0
- package/dist/transport/sse-client.d.ts +33 -0
- package/dist/transport/sse-client.d.ts.map +1 -0
- package/dist/transport/sse-client.js +127 -0
- package/dist/transport/sse-client.js.map +1 -0
- package/package.json +32 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SdkFactory — legacy wrapper for backward compatibility.
|
|
3
|
+
* @deprecated Use createAgentClient() + createOpsClient() instead.
|
|
4
|
+
*
|
|
5
|
+
* Previously in @beacon-build/client. Preserved for mcp/agent migration.
|
|
6
|
+
*/
|
|
7
|
+
import { HttpClient } from '../transport/http-client.js';
|
|
8
|
+
import { OpsApiClient } from '../transport/ops-api-client.js';
|
|
9
|
+
import { AgentTasksClient } from '../clients/agent/tasks.client.js';
|
|
10
|
+
import { AgentMessagingClient } from '../clients/agent/messaging.client.js';
|
|
11
|
+
import { MemoriesOpsClient } from '../clients/ops/memories-ops.client.js';
|
|
12
|
+
import { SessionsOpsClient } from '../clients/ops/sessions-ops.client.js';
|
|
13
|
+
import { ToolCallsOpsClient } from '../clients/ops/tool-calls-ops.client.js';
|
|
14
|
+
import { AgentsOpsClient } from '../clients/ops/agents-ops.client.js';
|
|
15
|
+
/** @deprecated Use createAgentClient() + createOpsClient() instead */
|
|
16
|
+
export class SdkFactory {
|
|
17
|
+
static forAgent(_context, opts) {
|
|
18
|
+
const http = new HttpClient({
|
|
19
|
+
baseUrl: opts.apiUrl,
|
|
20
|
+
basePath: '/api/agent/v1',
|
|
21
|
+
getToken: () => opts.agentToken,
|
|
22
|
+
});
|
|
23
|
+
const opsApi = new OpsApiClient({ baseUrl: opts.apiUrl, apiKey: opts.apiKey });
|
|
24
|
+
return {
|
|
25
|
+
tasks: new AgentTasksClient(http),
|
|
26
|
+
messaging: new AgentMessagingClient(http),
|
|
27
|
+
memories: new MemoriesOpsClient(opsApi),
|
|
28
|
+
sessions: new SessionsOpsClient(opsApi),
|
|
29
|
+
toolCalls: new ToolCallsOpsClient(opsApi),
|
|
30
|
+
agents: new AgentsOpsClient(opsApi),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=sdk-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-factory.js","sourceRoot":"","sources":["../../src/legacy/sdk-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAA;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAoBrE,sEAAsE;AACtE,MAAM,OAAO,UAAU;IACnB,MAAM,CAAC,QAAQ,CAAC,QAAsB,EAAE,IAAqB;QACzD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;YACxB,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,QAAQ,EAAE,eAAe;YACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU;SAClC,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9E,OAAO;YACH,KAAK,EAAE,IAAI,gBAAgB,CAAC,IAAI,CAAC;YACjC,SAAS,EAAE,IAAI,oBAAoB,CAAC,IAAI,CAAC;YACzC,QAAQ,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;YACvC,QAAQ,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;YACvC,SAAS,EAAE,IAAI,kBAAkB,CAAC,MAAM,CAAC;YACzC,MAAM,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;SACtC,CAAA;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* context.ts — AGENTS.md / CLAUDE.md generation helpers (F161)
|
|
3
|
+
*
|
|
4
|
+
* Pure functions — no filesystem access, no side effects.
|
|
5
|
+
* Consumed by CLI scripts and by @beacon-build/mcp-agent (readAgentsMdFrontmatter).
|
|
6
|
+
*/
|
|
7
|
+
/** Sections that belong in AGENTS.md (system-agnostic). */
|
|
8
|
+
export declare const AGENTS_SECTIONS: string[];
|
|
9
|
+
/** Sections that stay in CLAUDE.md (Claude Code-specific). */
|
|
10
|
+
export declare const CLAUDE_SECTIONS: string[];
|
|
11
|
+
export declare const MARKER_START: (section: string) => string;
|
|
12
|
+
export declare const MARKER_END: (section: string) => string;
|
|
13
|
+
/**
|
|
14
|
+
* Merge generated sections into existing file content using marker comments.
|
|
15
|
+
* Sections not in `allowedSections` are skipped.
|
|
16
|
+
* Legacy stale section names are always removed.
|
|
17
|
+
*/
|
|
18
|
+
export declare function mergeSections(existing: string, sections: Record<string, string | null>, allowedSections: string[], staleSections: string[]): string;
|
|
19
|
+
/**
|
|
20
|
+
* Merge generated sections into AGENTS.md content.
|
|
21
|
+
* Only AGENTS_SECTIONS are written; CLAUDE_SECTIONS are ignored.
|
|
22
|
+
*/
|
|
23
|
+
export declare function mergeWithAgentsMd(existing: string, sections: Record<string, string | null>): string;
|
|
24
|
+
/**
|
|
25
|
+
* Generate the default AGENTS.md template for a new project.
|
|
26
|
+
*/
|
|
27
|
+
export declare function agentsMdTemplate(projectName: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Ensure `@AGENTS.md` appears as the first line after the `# CLAUDE.md — …` title.
|
|
30
|
+
* Idempotent: no duplicate insertion if already present.
|
|
31
|
+
*/
|
|
32
|
+
export declare function ensureAgentsMdImport(content: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Merge generated sections into CLAUDE.md content.
|
|
35
|
+
* - Removes CLAUDE_STALE_SECTIONS
|
|
36
|
+
* - Writes only CLAUDE_SECTIONS (triggers)
|
|
37
|
+
* - Ensures @AGENTS.md import after title
|
|
38
|
+
*/
|
|
39
|
+
export declare function mergeWithClaudeMd(existing: string, sections: Record<string, string | null>): string;
|
|
40
|
+
/**
|
|
41
|
+
* Ensure `AGENTS.md` is listed in a .gitignore file.
|
|
42
|
+
* Returns updated content, or minimal new content if file doesn't exist.
|
|
43
|
+
*/
|
|
44
|
+
export declare function ensureAgentsMdInGitignore(existingContent: string | null): string;
|
|
45
|
+
/**
|
|
46
|
+
* Remove `AGENTS.md` from a .gitignore file (inverse of ensureAgentsMdInGitignore).
|
|
47
|
+
* Used by --force to migrate repos where AGENTS.md was previously gitignored.
|
|
48
|
+
* Returns updated content (idempotent if already absent).
|
|
49
|
+
*/
|
|
50
|
+
export declare function removeAgentsMdFromGitignore(content: string): string;
|
|
51
|
+
export interface AgentsMdFrontmatter {
|
|
52
|
+
project?: string;
|
|
53
|
+
agent?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Parse YAML frontmatter from AGENTS.md content.
|
|
57
|
+
* Returns { project?, agent? } or null if no frontmatter present.
|
|
58
|
+
*/
|
|
59
|
+
export declare function parseAgentsMdFrontmatter(content: string): AgentsMdFrontmatter | null;
|
|
60
|
+
/**
|
|
61
|
+
* Write (or replace) YAML frontmatter in AGENTS.md content.
|
|
62
|
+
* Idempotent — existing frontmatter is replaced with new values.
|
|
63
|
+
* `agent` is omitted if falsy (main workspace has no agent field).
|
|
64
|
+
*/
|
|
65
|
+
export declare function writeAgentsMdFrontmatter(content: string, { project, agent }: {
|
|
66
|
+
project: string;
|
|
67
|
+
agent?: string;
|
|
68
|
+
}): string;
|
|
69
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/lib/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,2DAA2D;AAC3D,eAAO,MAAM,eAAe,UAAuC,CAAA;AAEnE,8DAA8D;AAC9D,eAAO,MAAM,eAAe,UAAe,CAAA;AAI3C,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAA+C,CAAA;AAC9F,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,KAAG,MAA6C,CAAA;AAI1F;;;;GAIG;AACH,wBAAgB,aAAa,CACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,EACvC,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,EAAE,MAAM,EAAE,GACxB,MAAM,CAwCR;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GACxC,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA0D5D;AAcD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAW5D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GACxC,MAAM,CAIR;AAID;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAOhF;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKnE;AAID,MAAM,WAAW,mBAAmB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAYpF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,MAAM,EACf,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD,MAAM,CAUR"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* context.ts — AGENTS.md / CLAUDE.md generation helpers (F161)
|
|
3
|
+
*
|
|
4
|
+
* Pure functions — no filesystem access, no side effects.
|
|
5
|
+
* Consumed by CLI scripts and by @beacon-build/mcp-agent (readAgentsMdFrontmatter).
|
|
6
|
+
*/
|
|
7
|
+
// ─── Section routing ─────────────────────────────────────────────────────────
|
|
8
|
+
/** Sections that belong in AGENTS.md (system-agnostic). */
|
|
9
|
+
export const AGENTS_SECTIONS = ['context', 'monorepo', 'code-repo'];
|
|
10
|
+
/** Sections that stay in CLAUDE.md (Claude Code-specific). */
|
|
11
|
+
export const CLAUDE_SECTIONS = ['triggers'];
|
|
12
|
+
// ─── Marker helpers ──────────────────────────────────────────────────────────
|
|
13
|
+
export const MARKER_START = (section) => `<!-- generated:${section}:start -->`;
|
|
14
|
+
export const MARKER_END = (section) => `<!-- generated:${section}:end -->`;
|
|
15
|
+
// ─── Generic merge ────────────────────────────────────────────────────────────
|
|
16
|
+
/**
|
|
17
|
+
* Merge generated sections into existing file content using marker comments.
|
|
18
|
+
* Sections not in `allowedSections` are skipped.
|
|
19
|
+
* Legacy stale section names are always removed.
|
|
20
|
+
*/
|
|
21
|
+
export function mergeSections(existing, sections, allowedSections, staleSections) {
|
|
22
|
+
// Remove stale sections
|
|
23
|
+
for (const section of staleSections) {
|
|
24
|
+
const startMarker = MARKER_START(section);
|
|
25
|
+
const endMarker = MARKER_END(section);
|
|
26
|
+
const startIdx = existing.indexOf(startMarker);
|
|
27
|
+
const endIdx = existing.indexOf(endMarker);
|
|
28
|
+
if (startIdx !== -1 && endIdx !== -1) {
|
|
29
|
+
const afterEnd = endIdx + endMarker.length;
|
|
30
|
+
const trailing = existing[afterEnd] === '\n' ? 1 : 0;
|
|
31
|
+
existing = existing.slice(0, startIdx) + existing.slice(afterEnd + trailing);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Clean up multiple consecutive blank lines
|
|
35
|
+
existing = existing.replace(/\n{3,}/g, '\n\n');
|
|
36
|
+
// Write allowed sections
|
|
37
|
+
for (const [section, content] of Object.entries(sections)) {
|
|
38
|
+
if (!allowedSections.includes(section))
|
|
39
|
+
continue;
|
|
40
|
+
if (!content)
|
|
41
|
+
continue;
|
|
42
|
+
const startMarker = MARKER_START(section);
|
|
43
|
+
const endMarker = MARKER_END(section);
|
|
44
|
+
// Blank line before end marker prevents Prettier from indenting
|
|
45
|
+
// HTML comments that immediately follow a Markdown list item.
|
|
46
|
+
const block = `${startMarker}\n${content.trimEnd()}\n\n${endMarker}`;
|
|
47
|
+
const startIdx = existing.indexOf(startMarker);
|
|
48
|
+
const endIdx = existing.indexOf(endMarker);
|
|
49
|
+
if (startIdx !== -1 && endIdx !== -1) {
|
|
50
|
+
existing =
|
|
51
|
+
existing.slice(0, startIdx) + block + existing.slice(endIdx + endMarker.length);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
existing = existing.trimEnd() + '\n\n' + block + '\n';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return existing;
|
|
58
|
+
}
|
|
59
|
+
// ─── AGENTS.md merge ─────────────────────────────────────────────────────────
|
|
60
|
+
// 'worker' was previously generated; now identity lives in frontmatter only.
|
|
61
|
+
const AGENTS_STALE_SECTIONS = ['worker'];
|
|
62
|
+
/**
|
|
63
|
+
* Merge generated sections into AGENTS.md content.
|
|
64
|
+
* Only AGENTS_SECTIONS are written; CLAUDE_SECTIONS are ignored.
|
|
65
|
+
*/
|
|
66
|
+
export function mergeWithAgentsMd(existing, sections) {
|
|
67
|
+
return mergeSections(existing, sections, AGENTS_SECTIONS, AGENTS_STALE_SECTIONS);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Generate the default AGENTS.md template for a new project.
|
|
71
|
+
*/
|
|
72
|
+
export function agentsMdTemplate(projectName) {
|
|
73
|
+
return [
|
|
74
|
+
`# AGENTS.md — ${projectName}`,
|
|
75
|
+
'',
|
|
76
|
+
'> Canonical context file for AI agents — system-agnostic.',
|
|
77
|
+
'> Claude Code-specific additions: see CLAUDE.md.',
|
|
78
|
+
'',
|
|
79
|
+
'## Session Start',
|
|
80
|
+
'',
|
|
81
|
+
'Read frontmatter (`project` + `agent`). Call `session_start` with:',
|
|
82
|
+
'- `project` → frontmatter `project`',
|
|
83
|
+
'- `alias` → frontmatter `agent`',
|
|
84
|
+
'',
|
|
85
|
+
'Never choose an alias manually.',
|
|
86
|
+
'',
|
|
87
|
+
// Placeholders so mergeSections inserts generated content here, before Memory Hygiene
|
|
88
|
+
MARKER_START('context'),
|
|
89
|
+
'',
|
|
90
|
+
MARKER_END('context'),
|
|
91
|
+
'',
|
|
92
|
+
MARKER_START('monorepo'),
|
|
93
|
+
'',
|
|
94
|
+
MARKER_END('monorepo'),
|
|
95
|
+
'',
|
|
96
|
+
MARKER_START('code-repo'),
|
|
97
|
+
'',
|
|
98
|
+
MARKER_END('code-repo'),
|
|
99
|
+
'',
|
|
100
|
+
'## Memory Hygiene',
|
|
101
|
+
'',
|
|
102
|
+
'Memories are stored via `memory_upsert` in the DB — **NEVER as files in the filesystem**.',
|
|
103
|
+
'',
|
|
104
|
+
'**When to save:**',
|
|
105
|
+
'',
|
|
106
|
+
'- Real corrections that would repeat (type: `correction`)',
|
|
107
|
+
'- Non-obvious patterns not derivable from code (type: `pattern`)',
|
|
108
|
+
'- Explicit user preferences (type: `preference`)',
|
|
109
|
+
'- Architectural decisions not captured in ADRs/docs (type: `decision`)',
|
|
110
|
+
'',
|
|
111
|
+
'**Do NOT save:**',
|
|
112
|
+
'',
|
|
113
|
+
'- Task status, PR numbers, temporary state',
|
|
114
|
+
'- Anything already in CLAUDE.md, ADRs, domain docs or code',
|
|
115
|
+
'- Every minor correction — only what would repeat',
|
|
116
|
+
'',
|
|
117
|
+
'**Board workflow:**',
|
|
118
|
+
'',
|
|
119
|
+
'- Never call `board_mark_read` — resolve actions via `board_resolve`',
|
|
120
|
+
'- ACTION/URGENT messages stay unread until explicitly resolved',
|
|
121
|
+
'- `session_start` auto-marks INFO only; ACTION/URGENT must be resolved manually',
|
|
122
|
+
'',
|
|
123
|
+
'**Cleanup:**',
|
|
124
|
+
'',
|
|
125
|
+
'- `memory_get` to see all memories (with IDs)',
|
|
126
|
+
'- `memory_delete <id>` for stale or redundant entries',
|
|
127
|
+
'- `reinforced_count` as quality signal: often confirmed = valuable, ×1 = check if still relevant',
|
|
128
|
+
'',
|
|
129
|
+
].join('\n');
|
|
130
|
+
}
|
|
131
|
+
// ─── CLAUDE.md merge ─────────────────────────────────────────────────────────
|
|
132
|
+
/**
|
|
133
|
+
* Sections that once lived in CLAUDE.md but now belong in AGENTS.md.
|
|
134
|
+
* Treated as stale and removed from CLAUDE.md on every run.
|
|
135
|
+
*/
|
|
136
|
+
const CLAUDE_MIGRATED_OUT = ['worker', 'context', 'monorepo', 'code-repo'];
|
|
137
|
+
const CLAUDE_LEGACY_STALE = ['status', 'tools', 'stdd', 'structure', 'session', 'ops'];
|
|
138
|
+
const CLAUDE_STALE_SECTIONS = [...CLAUDE_MIGRATED_OUT, ...CLAUDE_LEGACY_STALE];
|
|
139
|
+
/**
|
|
140
|
+
* Ensure `@AGENTS.md` appears as the first line after the `# CLAUDE.md — …` title.
|
|
141
|
+
* Idempotent: no duplicate insertion if already present.
|
|
142
|
+
*/
|
|
143
|
+
export function ensureAgentsMdImport(content) {
|
|
144
|
+
if (/^@AGENTS\.md\s*$/m.test(content))
|
|
145
|
+
return content;
|
|
146
|
+
const lines = content.split('\n');
|
|
147
|
+
const titleIdx = lines.findIndex((l) => l.startsWith('# '));
|
|
148
|
+
if (titleIdx === -1) {
|
|
149
|
+
return `@AGENTS.md\n\n${content}`;
|
|
150
|
+
}
|
|
151
|
+
lines.splice(titleIdx + 1, 0, '', '@AGENTS.md');
|
|
152
|
+
return lines.join('\n').replace(/\n{3,}/g, '\n\n');
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Merge generated sections into CLAUDE.md content.
|
|
156
|
+
* - Removes CLAUDE_STALE_SECTIONS
|
|
157
|
+
* - Writes only CLAUDE_SECTIONS (triggers)
|
|
158
|
+
* - Ensures @AGENTS.md import after title
|
|
159
|
+
*/
|
|
160
|
+
export function mergeWithClaudeMd(existing, sections) {
|
|
161
|
+
let result = mergeSections(existing, sections, CLAUDE_SECTIONS, CLAUDE_STALE_SECTIONS);
|
|
162
|
+
result = ensureAgentsMdImport(result);
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
// ─── .gitignore helper ───────────────────────────────────────────────────────
|
|
166
|
+
/**
|
|
167
|
+
* Ensure `AGENTS.md` is listed in a .gitignore file.
|
|
168
|
+
* Returns updated content, or minimal new content if file doesn't exist.
|
|
169
|
+
*/
|
|
170
|
+
export function ensureAgentsMdInGitignore(existingContent) {
|
|
171
|
+
const lines = (existingContent ?? '').split('\n');
|
|
172
|
+
if (lines.some((l) => l.trim() === 'AGENTS.md')) {
|
|
173
|
+
return existingContent ?? '';
|
|
174
|
+
}
|
|
175
|
+
const base = existingContent ?? '';
|
|
176
|
+
return base.trimEnd() + (base.length > 0 ? '\n' : '') + 'AGENTS.md\n';
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Remove `AGENTS.md` from a .gitignore file (inverse of ensureAgentsMdInGitignore).
|
|
180
|
+
* Used by --force to migrate repos where AGENTS.md was previously gitignored.
|
|
181
|
+
* Returns updated content (idempotent if already absent).
|
|
182
|
+
*/
|
|
183
|
+
export function removeAgentsMdFromGitignore(content) {
|
|
184
|
+
return content
|
|
185
|
+
.split('\n')
|
|
186
|
+
.filter((l) => l.trim() !== 'AGENTS.md')
|
|
187
|
+
.join('\n');
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Parse YAML frontmatter from AGENTS.md content.
|
|
191
|
+
* Returns { project?, agent? } or null if no frontmatter present.
|
|
192
|
+
*/
|
|
193
|
+
export function parseAgentsMdFrontmatter(content) {
|
|
194
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
195
|
+
if (!match)
|
|
196
|
+
return null;
|
|
197
|
+
const result = {};
|
|
198
|
+
for (const line of match[1].split('\n')) {
|
|
199
|
+
const colon = line.indexOf(':');
|
|
200
|
+
if (colon === -1)
|
|
201
|
+
continue;
|
|
202
|
+
const key = line.slice(0, colon).trim();
|
|
203
|
+
const val = line.slice(colon + 1).trim();
|
|
204
|
+
if (key && val)
|
|
205
|
+
result[key] = val;
|
|
206
|
+
}
|
|
207
|
+
return Object.keys(result).length ? result : null;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Write (or replace) YAML frontmatter in AGENTS.md content.
|
|
211
|
+
* Idempotent — existing frontmatter is replaced with new values.
|
|
212
|
+
* `agent` is omitted if falsy (main workspace has no agent field).
|
|
213
|
+
*/
|
|
214
|
+
export function writeAgentsMdFrontmatter(content, { project, agent }) {
|
|
215
|
+
const lines = ['---', `project: ${project}`];
|
|
216
|
+
if (agent)
|
|
217
|
+
lines.push(`agent: ${agent}`);
|
|
218
|
+
lines.push('---');
|
|
219
|
+
const block = lines.join('\n');
|
|
220
|
+
if (/^---\n/.test(content)) {
|
|
221
|
+
return content.replace(/^---\n[\s\S]*?\n---\n?/, block + '\n');
|
|
222
|
+
}
|
|
223
|
+
return block + '\n' + content;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/lib/context.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/db.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db.ts — Database URL resolution for CLI scripts
|
|
3
|
+
*
|
|
4
|
+
* Shared helper for SDK CLI commands that need a PostgreSQL connection.
|
|
5
|
+
* Not part of the public SDK API — internal use only.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Resolve DATABASE_URL from environment or op-cache.
|
|
9
|
+
*
|
|
10
|
+
* Priority:
|
|
11
|
+
* 1. DATABASE_URL env var (most explicit)
|
|
12
|
+
* 2. op-cache: ~/.beacon-platform/op-cache.json (DB_ENV defaults to "production")
|
|
13
|
+
* 3. localhost fallback for local development
|
|
14
|
+
*/
|
|
15
|
+
export declare function getDatabaseUrl(): string;
|
|
16
|
+
//# sourceMappingURL=db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/lib/db.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAqBvC"}
|
package/dist/lib/db.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* db.ts — Database URL resolution for CLI scripts
|
|
3
|
+
*
|
|
4
|
+
* Shared helper for SDK CLI commands that need a PostgreSQL connection.
|
|
5
|
+
* Not part of the public SDK API — internal use only.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
/**
|
|
10
|
+
* Resolve DATABASE_URL from environment or op-cache.
|
|
11
|
+
*
|
|
12
|
+
* Priority:
|
|
13
|
+
* 1. DATABASE_URL env var (most explicit)
|
|
14
|
+
* 2. op-cache: ~/.beacon-platform/op-cache.json (DB_ENV defaults to "production")
|
|
15
|
+
* 3. localhost fallback for local development
|
|
16
|
+
*/
|
|
17
|
+
export function getDatabaseUrl() {
|
|
18
|
+
if (process.env.DATABASE_URL)
|
|
19
|
+
return process.env.DATABASE_URL;
|
|
20
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? '';
|
|
21
|
+
const opCachePath = join(home, '.beacon-platform', 'op-cache.json');
|
|
22
|
+
if (existsSync(opCachePath)) {
|
|
23
|
+
try {
|
|
24
|
+
const cache = JSON.parse(readFileSync(opCachePath, 'utf-8'));
|
|
25
|
+
const env = process.env.DB_ENV ?? 'production';
|
|
26
|
+
const url = cache[`beacon-platform/beacon-platform-${env}`]?.fields?.DATABASE_URL;
|
|
27
|
+
if (url)
|
|
28
|
+
return normalizeDbUrl(url);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// fall through
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return 'postgresql://beacon:beacon@localhost:5432/beacon';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* pg-connection-string@2.x treats sslrootcert as a file path to readFileSync.
|
|
38
|
+
* PostgreSQL 16+ added sslrootcert=system (use system CA store), which the library
|
|
39
|
+
* doesn't recognise — strip it and downgrade sslmode to avoid ENOENT on 'system'.
|
|
40
|
+
*/
|
|
41
|
+
function normalizeDbUrl(url) {
|
|
42
|
+
if (!url.includes('sslrootcert=system'))
|
|
43
|
+
return url;
|
|
44
|
+
return url
|
|
45
|
+
.replace(/[?&]sslrootcert=system/, (match) => (match.startsWith('?') ? '?' : ''))
|
|
46
|
+
.replace('sslmode=verify-full', 'sslmode=require')
|
|
47
|
+
.replace('??', '?')
|
|
48
|
+
.replace(/[?&]$/, '');
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/lib/db.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;IAE7D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAA;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAA;IAEnE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAG1D,CAAA;YACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,YAAY,CAAA;YAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,mCAAmC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,CAAA;YACjF,IAAI,GAAG;gBAAE,OAAO,cAAc,CAAC,GAAG,CAAC,CAAA;QACvC,CAAC;QAAC,MAAM,CAAC;YACL,eAAe;QACnB,CAAC;IACL,CAAC;IAED,OAAO,kDAAkD,CAAA;AAC7D,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,GAAW;IAC/B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAAE,OAAO,GAAG,CAAA;IACnD,OAAO,GAAG;SACL,OAAO,CAAC,wBAAwB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAChF,OAAO,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;SACjD,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;AAC7B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI logger — re-exports createCliLogger from @beacon-build/logger.
|
|
3
|
+
*
|
|
4
|
+
* Writes to:
|
|
5
|
+
* - stderr: pino-pretty (colorized, human-readable)
|
|
6
|
+
* - file: ~/.beacon-platform/logs/beacon-cli-YYYY-MM-DD.log (JSON)
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const log = createCliLogger('backlog')
|
|
10
|
+
* log.info('generating backlog', { project })
|
|
11
|
+
* log.error('failed', { error: err.message })
|
|
12
|
+
*/
|
|
13
|
+
export { createCliLogger } from '@beacon-build/logger';
|
|
14
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI logger — re-exports createCliLogger from @beacon-build/logger.
|
|
3
|
+
*
|
|
4
|
+
* Writes to:
|
|
5
|
+
* - stderr: pino-pretty (colorized, human-readable)
|
|
6
|
+
* - file: ~/.beacon-platform/logs/beacon-cli-YYYY-MM-DD.log (JSON)
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const log = createCliLogger('backlog')
|
|
10
|
+
* log.info('generating backlog', { project })
|
|
11
|
+
* log.error('failed', { error: err.message })
|
|
12
|
+
*/
|
|
13
|
+
export { createCliLogger } from '@beacon-build/logger';
|
|
14
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* opencode.ts — Role→tool mapping and opencode.jsonc generation (C51)
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for MCP server selection per agent role.
|
|
5
|
+
* INV-1: Never duplicate the role→tool mapping elsewhere.
|
|
6
|
+
* INV-3: beacon-platform root is always ~/workspace/beacon-platform.
|
|
7
|
+
* INV-4: mcp-wrapper.mjs lives in ~/.beacon-platform/hooks/.
|
|
8
|
+
*/
|
|
9
|
+
/** Tools always included regardless of role. */
|
|
10
|
+
export declare const ALWAYS_TOOLS: readonly ["beacon-agent", "beacon-docs", "beacon-git"];
|
|
11
|
+
/** Additional tools per role. */
|
|
12
|
+
export declare const ROLE_TOOLS: Record<string, string[]>;
|
|
13
|
+
/** Dist path suffix relative to `<beacon-platform-root>/node_modules/@beacon-build/`. */
|
|
14
|
+
export declare const TOOL_DIST_PATHS: Record<string, string>;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the full set of MCP tools for a given set of roles.
|
|
17
|
+
* Returns: always-tools first, then role-specific tools (deduped, alphabetical).
|
|
18
|
+
* INV-6: Empty roles → always-tools only.
|
|
19
|
+
*/
|
|
20
|
+
export declare function toolsForRoles(roles: string[]): string[];
|
|
21
|
+
export interface GenerateOpencodeConfigOpts {
|
|
22
|
+
alias: string;
|
|
23
|
+
roles: string[];
|
|
24
|
+
model: string;
|
|
25
|
+
beaconPlatformRoot: string;
|
|
26
|
+
mcpWrapperPath: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate the content of opencode.jsonc for an agent worktree.
|
|
30
|
+
* INV-2: This file is always generated — never manually edited.
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateOpencodeConfig(opts: GenerateOpencodeConfigOpts): string;
|
|
33
|
+
//# sourceMappingURL=opencode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/lib/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,gDAAgD;AAChD,eAAO,MAAM,YAAY,wDAAyD,CAAA;AAElF,iCAAiC;AACjC,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAM/C,CAAA;AAED,yFAAyF;AACzF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWlD,CAAA;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAUvD;AAID,MAAM,WAAW,0BAA0B;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,kBAAkB,EAAE,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;CACzB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,0BAA0B,GAAG,MAAM,CAgD/E"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* opencode.ts — Role→tool mapping and opencode.jsonc generation (C51)
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for MCP server selection per agent role.
|
|
5
|
+
* INV-1: Never duplicate the role→tool mapping elsewhere.
|
|
6
|
+
* INV-3: beacon-platform root is always ~/workspace/beacon-platform.
|
|
7
|
+
* INV-4: mcp-wrapper.mjs lives in ~/.beacon-platform/hooks/.
|
|
8
|
+
*/
|
|
9
|
+
// ─── Role → Tool Mapping ─────────────────────────────────────────────────────
|
|
10
|
+
/** Tools always included regardless of role. */
|
|
11
|
+
export const ALWAYS_TOOLS = ['beacon-agent', 'beacon-docs', 'beacon-git'];
|
|
12
|
+
/** Additional tools per role. */
|
|
13
|
+
export const ROLE_TOOLS = {
|
|
14
|
+
analyst: ['project-db', 'project-logs'],
|
|
15
|
+
architect: ['project-code', 'project-db', 'project-files', 'project-logs'],
|
|
16
|
+
builder: ['project-code', 'project-db', 'project-dev', 'project-files', 'project-logs'],
|
|
17
|
+
ops: ['beacon-northflank', 'beacon-ops', 'project-db', 'project-dev', 'project-logs'],
|
|
18
|
+
'release-manager': ['beacon-northflank', 'beacon-ops'],
|
|
19
|
+
};
|
|
20
|
+
/** Dist path suffix relative to `<beacon-platform-root>/node_modules/@beacon-build/`. */
|
|
21
|
+
export const TOOL_DIST_PATHS = {
|
|
22
|
+
'beacon-agent': 'mcp-agent/dist/index.js',
|
|
23
|
+
'beacon-docs': 'mcp-beacon/dist/beacon-docs/index.js',
|
|
24
|
+
'beacon-git': 'mcp-beacon/dist/beacon-git/index.js',
|
|
25
|
+
'beacon-northflank': 'mcp-beacon/dist/beacon-northflank/index.js',
|
|
26
|
+
'beacon-ops': 'mcp-beacon/dist/beacon-ops/index.js',
|
|
27
|
+
'project-code': 'mcp-project/dist/project-code/index.js',
|
|
28
|
+
'project-db': 'mcp-project/dist/project-db/index.js',
|
|
29
|
+
'project-dev': 'mcp-project/dist/project-dev/index.js',
|
|
30
|
+
'project-files': 'mcp-project/dist/project-files/index.js',
|
|
31
|
+
'project-logs': 'mcp-project/dist/project-logs/index.js',
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the full set of MCP tools for a given set of roles.
|
|
35
|
+
* Returns: always-tools first, then role-specific tools (deduped, alphabetical).
|
|
36
|
+
* INV-6: Empty roles → always-tools only.
|
|
37
|
+
*/
|
|
38
|
+
export function toolsForRoles(roles) {
|
|
39
|
+
const extra = new Set();
|
|
40
|
+
for (const role of roles) {
|
|
41
|
+
for (const tool of ROLE_TOOLS[role] ?? []) {
|
|
42
|
+
extra.add(tool);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const alwaysList = [...ALWAYS_TOOLS];
|
|
46
|
+
const extraList = [...extra].filter((t) => !alwaysList.includes(t)).sort();
|
|
47
|
+
return [...alwaysList, ...extraList];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Generate the content of opencode.jsonc for an agent worktree.
|
|
51
|
+
* INV-2: This file is always generated — never manually edited.
|
|
52
|
+
*/
|
|
53
|
+
export function generateOpencodeConfig(opts) {
|
|
54
|
+
const { alias, roles, model, beaconPlatformRoot, mcpWrapperPath } = opts;
|
|
55
|
+
const tools = toolsForRoles(roles);
|
|
56
|
+
const mcpEntries = tools
|
|
57
|
+
.map((tool) => {
|
|
58
|
+
const distPath = TOOL_DIST_PATHS[tool];
|
|
59
|
+
if (!distPath)
|
|
60
|
+
return null;
|
|
61
|
+
const fullPath = `${beaconPlatformRoot}/node_modules/@beacon-build/${distPath}`;
|
|
62
|
+
// Use JSON.stringify to safely escape paths/values (handles \, ", newlines)
|
|
63
|
+
return [
|
|
64
|
+
` ${JSON.stringify(tool)}: {`,
|
|
65
|
+
` "type": "local",`,
|
|
66
|
+
` "command": [`,
|
|
67
|
+
` "node",`,
|
|
68
|
+
` ${JSON.stringify(mcpWrapperPath)},`,
|
|
69
|
+
` ${JSON.stringify(fullPath)}`,
|
|
70
|
+
` ]`,
|
|
71
|
+
` }`,
|
|
72
|
+
].join('\n');
|
|
73
|
+
})
|
|
74
|
+
.filter(Boolean)
|
|
75
|
+
.join(',\n');
|
|
76
|
+
return [
|
|
77
|
+
`// opencode.jsonc — ${alias} agent config (generated by beacon-cli context --write, C51)`,
|
|
78
|
+
`// Do not edit manually — re-run: beacon-cli context <project> --write`,
|
|
79
|
+
`{`,
|
|
80
|
+
` "$schema": "https://opencode.ai/config.json",`,
|
|
81
|
+
``,
|
|
82
|
+
` "model": ${JSON.stringify(model)},`,
|
|
83
|
+
``,
|
|
84
|
+
` "enabled_providers": ["anthropic"],`,
|
|
85
|
+
``,
|
|
86
|
+
` "experimental": {`,
|
|
87
|
+
` "lsp": true`,
|
|
88
|
+
` },`,
|
|
89
|
+
``,
|
|
90
|
+
` "watcher": {`,
|
|
91
|
+
` "ignore": ["node_modules/**", "dist/**", ".turbo/**", ".git/**", "local_cache/**"]`,
|
|
92
|
+
` },`,
|
|
93
|
+
``,
|
|
94
|
+
` "mcp": {`,
|
|
95
|
+
mcpEntries,
|
|
96
|
+
` }`,
|
|
97
|
+
`}`,
|
|
98
|
+
``,
|
|
99
|
+
].join('\n');
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/lib/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gFAAgF;AAEhF,gDAAgD;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,aAAa,EAAE,YAAY,CAAU,CAAA;AAElF,iCAAiC;AACjC,MAAM,CAAC,MAAM,UAAU,GAA6B;IAChD,OAAO,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC;IACvC,SAAS,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,CAAC;IAC1E,OAAO,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,CAAC;IACvF,GAAG,EAAE,CAAC,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC;IACrF,iBAAiB,EAAE,CAAC,mBAAmB,EAAE,YAAY,CAAC;CACzD,CAAA;AAED,yFAAyF;AACzF,MAAM,CAAC,MAAM,eAAe,GAA2B;IACnD,cAAc,EAAE,yBAAyB;IACzC,aAAa,EAAE,sCAAsC;IACrD,YAAY,EAAE,qCAAqC;IACnD,mBAAmB,EAAE,4CAA4C;IACjE,YAAY,EAAE,qCAAqC;IACnD,cAAc,EAAE,wCAAwC;IACxD,YAAY,EAAE,sCAAsC;IACpD,aAAa,EAAE,uCAAuC;IACtD,eAAe,EAAE,yCAAyC;IAC1D,cAAc,EAAE,wCAAwC;CAC3D,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAe;IACzC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAa,CAAC,GAAG,YAAY,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1E,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC,CAAA;AACxC,CAAC;AAYD;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAgC;IACnE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;IACxE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IAElC,MAAM,UAAU,GAAG,KAAK;SACnB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACV,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAA;QAC1B,MAAM,QAAQ,GAAG,GAAG,kBAAkB,+BAA+B,QAAQ,EAAE,CAAA;QAC/E,4EAA4E;QAC5E,OAAO;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK;YAChC,wBAAwB;YACxB,oBAAoB;YACpB,iBAAiB;YACjB,WAAW,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG;YAC5C,WAAW,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACrC,SAAS;YACT,OAAO;SACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,KAAK,CAAC,CAAA;IAEhB,OAAO;QACH,uBAAuB,KAAK,8DAA8D;QAC1F,wEAAwE;QACxE,GAAG;QACH,iDAAiD;QACjD,EAAE;QACF,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG;QACtC,EAAE;QACF,uCAAuC;QACvC,EAAE;QACF,qBAAqB;QACrB,iBAAiB;QACjB,MAAM;QACN,EAAE;QACF,gBAAgB;QAChB,wFAAwF;QACxF,MAAM;QACN,EAAE;QACF,YAAY;QACZ,UAAU;QACV,KAAK;QACL,GAAG;QACH,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* utils.ts — Shared utilities for @beacon-build/sdk scripts
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Load and parse beacon-agent.yaml from the given project root.
|
|
6
|
+
* Returns null if the file does not exist.
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadBeaconAgentYaml(projectPath: string): Record<string, unknown> | null;
|
|
9
|
+
/**
|
|
10
|
+
* Read DATABASE_URL from ~/.beacon-platform/op-cache.json for production.
|
|
11
|
+
* Key format: <slug>/<slug>-production
|
|
12
|
+
* Returns { databaseUrl, warning } where warning is true if not found.
|
|
13
|
+
*/
|
|
14
|
+
export declare function readOpCacheDatabaseUrl(projectSlug: string): {
|
|
15
|
+
databaseUrl: string;
|
|
16
|
+
warning: boolean;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAIvF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG;IACzD,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;CACnB,CAqBA"}
|