agentblueprint 0.4.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 (83) hide show
  1. package/README.md +137 -0
  2. package/dist/__tests__/cli.test.d.ts +1 -0
  3. package/dist/__tests__/cli.test.js +136 -0
  4. package/dist/__tests__/cli.test.js.map +1 -0
  5. package/dist/__tests__/client.test.d.ts +1 -0
  6. package/dist/__tests__/client.test.js +99 -0
  7. package/dist/__tests__/client.test.js.map +1 -0
  8. package/dist/__tests__/config.test.d.ts +1 -0
  9. package/dist/__tests__/config.test.js +37 -0
  10. package/dist/__tests__/config.test.js.map +1 -0
  11. package/dist/__tests__/renderers.test.d.ts +1 -0
  12. package/dist/__tests__/renderers.test.js +471 -0
  13. package/dist/__tests__/renderers.test.js.map +1 -0
  14. package/dist/__tests__/token-store.test.d.ts +1 -0
  15. package/dist/__tests__/token-store.test.js +61 -0
  16. package/dist/__tests__/token-store.test.js.map +1 -0
  17. package/dist/__tests__/tools.test.d.ts +1 -0
  18. package/dist/__tests__/tools.test.js +379 -0
  19. package/dist/__tests__/tools.test.js.map +1 -0
  20. package/dist/cli.d.ts +2 -0
  21. package/dist/cli.js +233 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/client.d.ts +80 -0
  24. package/dist/client.js +56 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/config.d.ts +5 -0
  27. package/dist/config.js +11 -0
  28. package/dist/config.js.map +1 -0
  29. package/dist/download.d.ts +9 -0
  30. package/dist/download.js +113 -0
  31. package/dist/download.js.map +1 -0
  32. package/dist/errors.d.ts +5 -0
  33. package/dist/errors.js +18 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.js +4 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/renderers.d.ts +16 -0
  39. package/dist/renderers.js +1468 -0
  40. package/dist/renderers.js.map +1 -0
  41. package/dist/resources/blueprint.d.ts +14 -0
  42. package/dist/resources/blueprint.js +46 -0
  43. package/dist/resources/blueprint.js.map +1 -0
  44. package/dist/resources/blueprints.d.ts +14 -0
  45. package/dist/resources/blueprints.js +33 -0
  46. package/dist/resources/blueprints.js.map +1 -0
  47. package/dist/resources/business-profile.d.ts +14 -0
  48. package/dist/resources/business-profile.js +33 -0
  49. package/dist/resources/business-profile.js.map +1 -0
  50. package/dist/resources/spec.d.ts +14 -0
  51. package/dist/resources/spec.js +33 -0
  52. package/dist/resources/spec.js.map +1 -0
  53. package/dist/server.d.ts +3 -0
  54. package/dist/server.js +47 -0
  55. package/dist/server.js.map +1 -0
  56. package/dist/token-store.d.ts +7 -0
  57. package/dist/token-store.js +34 -0
  58. package/dist/token-store.js.map +1 -0
  59. package/dist/tools/download-blueprint.d.ts +17 -0
  60. package/dist/tools/download-blueprint.js +55 -0
  61. package/dist/tools/download-blueprint.js.map +1 -0
  62. package/dist/tools/get-blueprint.d.ts +17 -0
  63. package/dist/tools/get-blueprint.js +65 -0
  64. package/dist/tools/get-blueprint.js.map +1 -0
  65. package/dist/tools/get-business-case.d.ts +17 -0
  66. package/dist/tools/get-business-case.js +66 -0
  67. package/dist/tools/get-business-case.js.map +1 -0
  68. package/dist/tools/get-business-profile.d.ts +14 -0
  69. package/dist/tools/get-business-profile.js +21 -0
  70. package/dist/tools/get-business-profile.js.map +1 -0
  71. package/dist/tools/get-implementation-plan.d.ts +17 -0
  72. package/dist/tools/get-implementation-plan.js +67 -0
  73. package/dist/tools/get-implementation-plan.js.map +1 -0
  74. package/dist/tools/get-implementation-spec.d.ts +31 -0
  75. package/dist/tools/get-implementation-spec.js +35 -0
  76. package/dist/tools/get-implementation-spec.js.map +1 -0
  77. package/dist/tools/get-use-case.d.ts +31 -0
  78. package/dist/tools/get-use-case.js +35 -0
  79. package/dist/tools/get-use-case.js.map +1 -0
  80. package/dist/tools/list-blueprints.d.ts +22 -0
  81. package/dist/tools/list-blueprints.js +29 -0
  82. package/dist/tools/list-blueprints.js.map +1 -0
  83. package/package.json +38 -0
package/README.md ADDED
@@ -0,0 +1,137 @@
1
+ # agentblueprint
2
+
3
+ CLI and MCP server for [Agent Blueprint](https://app.agentblueprint.ai) — gives your coding agent read access to your AI blueprints, business cases, implementation plans, and specs.
4
+
5
+ ## CLI Quick Start
6
+
7
+ ```bash
8
+ # Install globally
9
+ npm install -g agentblueprint
10
+
11
+ # Store your API token (one-time)
12
+ agentblueprint login
13
+
14
+ # List blueprints
15
+ agentblueprint list
16
+
17
+ # Get a blueprint summary (JSON to stdout)
18
+ agentblueprint get blueprint <id>
19
+
20
+ # Get other artifacts
21
+ agentblueprint get business-case <id>
22
+ agentblueprint get use-case <id>
23
+ agentblueprint get implementation-plan <id>
24
+ agentblueprint get implementation-spec <id>
25
+ agentblueprint get business-profile
26
+
27
+ # Download as Agent Skills directory
28
+ agentblueprint download <id>
29
+
30
+ # Partner cross-org access
31
+ agentblueprint list --org <customer-org-id>
32
+ agentblueprint get blueprint <id> --org <customer-org-id>
33
+ ```
34
+
35
+ Or run without installing via npx:
36
+
37
+ ```bash
38
+ npx agentblueprint list --token <your-api-key>
39
+ npx agentblueprint get blueprint <id> --token <your-api-key>
40
+ ```
41
+
42
+ ## MCP Server Setup
43
+
44
+ The same binary auto-detects MCP mode when stdin is piped (non-interactive). No separate command needed.
45
+
46
+ Add to your Claude Code MCP config (`.claude/settings.json` or project settings):
47
+
48
+ ```json
49
+ {
50
+ "mcpServers": {
51
+ "agent-blueprint": {
52
+ "command": "npx",
53
+ "args": ["@agentblueprint/mcp-server"],
54
+ "env": {
55
+ "AGENT_BLUEPRINT_API_KEY": "<your-api-key>"
56
+ }
57
+ }
58
+ }
59
+ }
60
+ ```
61
+
62
+ You can also start the MCP server explicitly with `agentblueprint serve`.
63
+
64
+ ## Get an API Key
65
+
66
+ 1. Go to [Agent Blueprint Settings > API Tokens](https://app.agentblueprint.ai/settings/api-tokens)
67
+ 2. Click "Create Token"
68
+ 3. Copy the token (shown once)
69
+
70
+ ## Download Blueprint as Agent Skills
71
+
72
+ Download a blueprint as a local Agent Skills directory that any coding agent can read from the filesystem. This is the recommended way to work with blueprints.
73
+
74
+ ```bash
75
+ # Using the CLI (after `agentblueprint login`)
76
+ agentblueprint download <id>
77
+ agentblueprint download <id> --dir ./my-skills
78
+
79
+ # Or via npx
80
+ npx agentblueprint download --token <key> --blueprint <id>
81
+ ```
82
+
83
+ This creates an Agent Skills directory structure:
84
+
85
+ ```
86
+ .agent-blueprint/<blueprint-slug>/
87
+ ├── SKILL.md # Overview + frontmatter (auto-discovered by agents)
88
+ ├── references/
89
+ │ ├── business-context.md # Use case, pain points, transformation story
90
+ │ ├── agent-specifications.md # Full agent specs with tools, guardrails, metrics
91
+ │ ├── financial-case.md # ROI, cost breakdown, sensitivity, 5-year projection
92
+ │ ├── implementation-roadmap.md # Epics, stories, timeline, roles, dependencies
93
+ │ ├── architecture-decisions.md # Platform, pattern, integration gaps, feasibility
94
+ │ └── guardrails-and-governance.md # Risks, mitigation, per-agent guardrails
95
+ └── scripts/
96
+ └── validate-spec.sh # Structure completeness checker
97
+ ```
98
+
99
+ The [Agent Skills](https://agentskills.io) standard is supported by Claude Code, Codex, Cursor, GitHub Copilot, Windsurf, and 18+ other coding agents. SKILL.md loads automatically at activation (~100 tokens), reference files load on demand.
100
+
101
+ ## Available Tools
102
+
103
+ | Tool | Description |
104
+ |------|-------------|
105
+ | `list_blueprints` | List all blueprints (summaries) |
106
+ | `get_blueprint` | Blueprint summary — title, agents, phases, pattern |
107
+ | `get_business_case` | Business case summary — ROI, pilot economics, recommendation |
108
+ | `get_implementation_plan` | Implementation plan summary — epics, timeline, story counts |
109
+ | `get_use_case` | Use case analysis for a blueprint |
110
+ | `get_implementation_spec` | Implementation spec metadata |
111
+ | `get_business_profile` | Organization business profile |
112
+ | `download_blueprint` | Download full blueprint as Agent Skills file manifest |
113
+
114
+ The `get_blueprint`, `get_business_case`, and `get_implementation_plan` tools return concise summaries optimized for agent context windows. For full details (agent specs, financial projections, user stories), use `download_blueprint` to get the complete Agent Skills directory.
115
+
116
+ ## Available Resources
117
+
118
+ | URI | Description |
119
+ |-----|-------------|
120
+ | `agentblueprint://blueprints` | Blueprint list (JSON) |
121
+ | `agentblueprint://blueprints/{id}` | Blueprint detail (Markdown) |
122
+ | `agentblueprint://blueprints/{id}/spec` | Implementation spec (Markdown) |
123
+
124
+ ## Authentication
125
+
126
+ Three ways to provide your API token (checked in this order):
127
+
128
+ 1. `--token <key>` flag on any command
129
+ 2. `AGENT_BLUEPRINT_API_KEY` environment variable
130
+ 3. `agentblueprint login` (saved to `~/.config/agentblueprint/config.json`)
131
+
132
+ ## Environment Variables
133
+
134
+ | Variable | Required | Default | Description |
135
+ |----------|----------|---------|-------------|
136
+ | `AGENT_BLUEPRINT_API_KEY` | No | — | Your API token (alternative to `agentblueprint login`) |
137
+ | `AGENT_BLUEPRINT_API_URL` | No | `https://app.agentblueprint.ai` | API base URL |
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,136 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { execFile } from 'node:child_process';
3
+ import { promisify } from 'node:util';
4
+ import { join } from 'node:path';
5
+ import { parseDownloadArgs } from '../download.js';
6
+ const exec = promisify(execFile);
7
+ const CLI_PATH = join(import.meta.dirname, '../../dist/cli.js');
8
+ describe('parseDownloadArgs', () => {
9
+ it('parses positional blueprint ID', () => {
10
+ const result = parseDownloadArgs(['abc-123']);
11
+ expect(result.blueprintId).toBe('abc-123');
12
+ expect(result.dir).toBe('.agent-blueprint');
13
+ });
14
+ it('parses --org flag', () => {
15
+ const result = parseDownloadArgs(['abc-123', '--org', 'org-456']);
16
+ expect(result.blueprintId).toBe('abc-123');
17
+ expect(result.customerOrgId).toBe('org-456');
18
+ });
19
+ it('parses --blueprint flag alongside --org', () => {
20
+ const result = parseDownloadArgs(['--blueprint', 'bp-789', '--org', 'org-456', '--dir', '/tmp/out']);
21
+ expect(result.blueprintId).toBe('bp-789');
22
+ expect(result.customerOrgId).toBe('org-456');
23
+ expect(result.dir).toBe('/tmp/out');
24
+ });
25
+ it('parses --list flag', () => {
26
+ const result = parseDownloadArgs(['--list']);
27
+ expect(result.list).toBe(true);
28
+ expect(result.blueprintId).toBeUndefined();
29
+ });
30
+ it('--blueprint takes priority over positional', () => {
31
+ const result = parseDownloadArgs(['--blueprint', 'bp-flag', 'bp-positional']);
32
+ expect(result.blueprintId).toBe('bp-flag');
33
+ });
34
+ it('defaults dir to .agent-blueprint', () => {
35
+ const result = parseDownloadArgs([]);
36
+ expect(result.dir).toBe('.agent-blueprint');
37
+ expect(result.list).toBe(false);
38
+ });
39
+ });
40
+ describe('CLI binary', () => {
41
+ it('shows help with --help', async () => {
42
+ const { stderr } = await exec('node', [CLI_PATH, '--help']);
43
+ expect(stderr).toContain('Agent Blueprint CLI');
44
+ expect(stderr).toContain('agentblueprint login');
45
+ expect(stderr).toContain('agentblueprint list');
46
+ expect(stderr).toContain('agentblueprint get');
47
+ expect(stderr).toContain('agentblueprint download');
48
+ });
49
+ it('shows version with --version', async () => {
50
+ const { stdout } = await exec('node', [CLI_PATH, '--version']);
51
+ expect(stdout.trim()).toMatch(/^\d+\.\d+\.\d+$/);
52
+ });
53
+ it('starts MCP server with no arguments on piped stdin (non-TTY)', async () => {
54
+ // When stdin is piped (as in execFile), no-args triggers MCP mode.
55
+ // Without a token, it errors with missing API key.
56
+ try {
57
+ await exec('node', [CLI_PATH], {
58
+ env: { ...process.env, AGENT_BLUEPRINT_API_KEY: '', HOME: '/tmp/nonexistent-cli-test' },
59
+ });
60
+ expect.fail('should have exited with error');
61
+ }
62
+ catch (err) {
63
+ const error = err;
64
+ expect(error.stderr).toContain('Missing API key');
65
+ }
66
+ });
67
+ it('errors on unknown command', async () => {
68
+ try {
69
+ await exec('node', [CLI_PATH, 'foobar']);
70
+ expect.fail('should have exited with error');
71
+ }
72
+ catch (err) {
73
+ const error = err;
74
+ expect(error.stderr).toContain('Unknown command');
75
+ expect(error.code).toBe(1);
76
+ }
77
+ });
78
+ it('errors on get without type', async () => {
79
+ try {
80
+ await exec('node', [CLI_PATH, 'get']);
81
+ expect.fail('should have exited with error');
82
+ }
83
+ catch (err) {
84
+ const error = err;
85
+ expect(error.stderr).toContain('Missing artifact type');
86
+ }
87
+ });
88
+ it('errors on get with unknown type', async () => {
89
+ try {
90
+ await exec('node', [CLI_PATH, 'get', 'foobar', 'some-id', '--token', 'ab_live_fake']);
91
+ expect.fail('should have exited with error');
92
+ }
93
+ catch (err) {
94
+ const error = err;
95
+ expect(error.stderr).toContain('Unknown type');
96
+ }
97
+ });
98
+ it('errors on get blueprint without ID', async () => {
99
+ try {
100
+ await exec('node', [CLI_PATH, 'get', 'blueprint', '--token', 'ab_live_fake']);
101
+ expect.fail('should have exited with error');
102
+ }
103
+ catch (err) {
104
+ const error = err;
105
+ expect(error.stderr).toContain('Missing blueprint ID');
106
+ }
107
+ });
108
+ it('errors on get implementation-spec without ID', async () => {
109
+ try {
110
+ await exec('node', [CLI_PATH, 'get', 'implementation-spec', '--token', 'ab_live_fake']);
111
+ expect.fail('should have exited with error');
112
+ }
113
+ catch (err) {
114
+ const error = err;
115
+ expect(error.stderr).toContain('Missing blueprint ID');
116
+ }
117
+ });
118
+ it('errors on list without token', async () => {
119
+ try {
120
+ await exec('node', [CLI_PATH, 'list'], {
121
+ env: { ...process.env, AGENT_BLUEPRINT_API_KEY: '', HOME: '/tmp/nonexistent-cli-test' },
122
+ });
123
+ expect.fail('should have exited with error');
124
+ }
125
+ catch (err) {
126
+ const error = err;
127
+ expect(error.stderr).toContain('Missing API key');
128
+ }
129
+ });
130
+ it('help includes implementation-spec and serve', async () => {
131
+ const { stderr } = await exec('node', [CLI_PATH, '--help']);
132
+ expect(stderr).toContain('implementation-spec');
133
+ expect(stderr).toContain('When stdin is piped');
134
+ });
135
+ });
136
+ //# sourceMappingURL=cli.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAM,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AAEhE,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QACrG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,aAAa,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,mEAAmE;QACnE,mDAAmD;QACnD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE;gBAC7B,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,uBAAuB,EAAE,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE;aACxF,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAAuC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAAuC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAAuC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YACtF,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAAuC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAAuC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YACxF,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAAuC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACrC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,uBAAuB,EAAE,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE;aACxF,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAAuC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,99 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { AgentBlueprintClient } from '../client.js';
3
+ import { ApiError } from '../errors.js';
4
+ const mockConfig = {
5
+ apiKey: 'ab_live_test1234567890',
6
+ apiUrl: 'https://test.agentblueprint.ai',
7
+ };
8
+ describe('AgentBlueprintClient', () => {
9
+ let client;
10
+ beforeEach(() => {
11
+ client = new AgentBlueprintClient(mockConfig);
12
+ vi.restoreAllMocks();
13
+ });
14
+ it('getBusinessProfile calls correct endpoint', async () => {
15
+ const profileData = { id: 'prof-1', companyName: 'Acme Corp', industry: 'Technology' };
16
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
17
+ ok: true,
18
+ json: () => Promise.resolve({ success: true, data: profileData, timestamp: '' }),
19
+ }));
20
+ const result = await client.getBusinessProfile();
21
+ expect(result).toEqual(profileData);
22
+ expect(fetch).toHaveBeenCalledWith('https://test.agentblueprint.ai/api/v1/business-profile', expect.objectContaining({
23
+ headers: expect.objectContaining({
24
+ 'Authorization': 'Bearer ab_live_test1234567890',
25
+ }),
26
+ }));
27
+ });
28
+ it('listBlueprints sends correct request', async () => {
29
+ const mockData = [
30
+ { id: 'bp-1', title: 'Test BP', version: 1, platform: 'general', agentCount: 2 },
31
+ ];
32
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
33
+ ok: true,
34
+ json: () => Promise.resolve({ success: true, data: mockData, timestamp: new Date().toISOString() }),
35
+ }));
36
+ const result = await client.listBlueprints();
37
+ expect(result).toEqual(mockData);
38
+ expect(fetch).toHaveBeenCalledWith('https://test.agentblueprint.ai/api/v1/blueprints', expect.objectContaining({
39
+ headers: expect.objectContaining({
40
+ 'Authorization': 'Bearer ab_live_test1234567890',
41
+ }),
42
+ }));
43
+ });
44
+ it('getBlueprint encodes ID in URL', async () => {
45
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
46
+ ok: true,
47
+ json: () => Promise.resolve({ success: true, data: { id: 'bp-1' }, timestamp: '' }),
48
+ }));
49
+ await client.getBlueprint('bp-1');
50
+ expect(fetch).toHaveBeenCalledWith('https://test.agentblueprint.ai/api/v1/blueprints/bp-1', expect.anything());
51
+ });
52
+ it('throws ApiError on non-ok response', async () => {
53
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
54
+ ok: false,
55
+ status: 401,
56
+ statusText: 'Unauthorized',
57
+ json: () => Promise.resolve({ error: 'Invalid token' }),
58
+ }));
59
+ await expect(client.listBlueprints()).rejects.toThrow(ApiError);
60
+ await expect(client.listBlueprints()).rejects.toThrow('Invalid token');
61
+ });
62
+ it('getBusinessCase calls correct endpoint', async () => {
63
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
64
+ ok: true,
65
+ json: () => Promise.resolve({ success: true, data: { id: 'bc-1' }, timestamp: '' }),
66
+ }));
67
+ await client.getBusinessCase('bp-1');
68
+ expect(fetch).toHaveBeenCalledWith('https://test.agentblueprint.ai/api/v1/blueprints/bp-1/business-case', expect.anything());
69
+ });
70
+ it('getImplementationPlan calls correct endpoint', async () => {
71
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
72
+ ok: true,
73
+ json: () => Promise.resolve({ success: true, data: { id: 'ip-1' }, timestamp: '' }),
74
+ }));
75
+ await client.getImplementationPlan('bp-1');
76
+ expect(fetch).toHaveBeenCalledWith('https://test.agentblueprint.ai/api/v1/blueprints/bp-1/implementation-plan', expect.anything());
77
+ });
78
+ it('getUseCase calls correct endpoint', async () => {
79
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
80
+ ok: true,
81
+ json: () => Promise.resolve({ success: true, data: { id: 'uc-1' }, timestamp: '' }),
82
+ }));
83
+ await client.getUseCase('bp-1');
84
+ expect(fetch).toHaveBeenCalledWith('https://test.agentblueprint.ai/api/v1/blueprints/bp-1/use-case', expect.anything());
85
+ });
86
+ it('getImplementationSpec calls correct endpoint', async () => {
87
+ vi.stubGlobal('fetch', vi.fn().mockResolvedValue({
88
+ ok: true,
89
+ json: () => Promise.resolve({
90
+ success: true,
91
+ data: { blueprintId: 'bp-1', filename: 'test.zip', metadata: {} },
92
+ timestamp: '',
93
+ }),
94
+ }));
95
+ await client.getImplementationSpec('bp-1');
96
+ expect(fetch).toHaveBeenCalledWith('https://test.agentblueprint.ai/api/v1/blueprints/bp-1/implementation-spec', expect.anything());
97
+ });
98
+ });
99
+ //# sourceMappingURL=client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,37 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { loadConfig } from '../config.js';
3
+ describe('loadConfig', () => {
4
+ const originalEnv = { ...process.env };
5
+ beforeEach(() => {
6
+ vi.unstubAllEnvs();
7
+ });
8
+ afterEach(() => {
9
+ process.env = { ...originalEnv };
10
+ });
11
+ it('loads API key from token override', () => {
12
+ const config = loadConfig('ab_live_test123');
13
+ expect(config.apiKey).toBe('ab_live_test123');
14
+ expect(config.apiUrl).toBe('https://app.agentblueprint.ai');
15
+ });
16
+ it('loads API key from environment', () => {
17
+ process.env.AGENT_BLUEPRINT_API_KEY = 'ab_live_envkey';
18
+ const config = loadConfig();
19
+ expect(config.apiKey).toBe('ab_live_envkey');
20
+ });
21
+ it('uses custom API URL from environment', () => {
22
+ process.env.AGENT_BLUEPRINT_API_KEY = 'ab_live_test';
23
+ process.env.AGENT_BLUEPRINT_API_URL = 'http://localhost:3000';
24
+ const config = loadConfig();
25
+ expect(config.apiUrl).toBe('http://localhost:3000');
26
+ });
27
+ it('throws when no API key provided', () => {
28
+ delete process.env.AGENT_BLUEPRINT_API_KEY;
29
+ expect(() => loadConfig()).toThrow('Missing API key');
30
+ });
31
+ it('token override takes precedence over env', () => {
32
+ process.env.AGENT_BLUEPRINT_API_KEY = 'ab_live_env';
33
+ const config = loadConfig('ab_live_override');
34
+ expect(config.apiKey).toBe('ab_live_override');
35
+ });
36
+ });
37
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,gBAAgB,CAAC;QACvD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,cAAc,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QAC9D,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC3C,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,aAAa,CAAC;QACpD,MAAM,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};