@autonav/core 1.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.
- package/README.md +115 -0
- package/dist/adapter/claude-adapter.d.ts +136 -0
- package/dist/adapter/claude-adapter.d.ts.map +1 -0
- package/dist/adapter/claude-adapter.js +340 -0
- package/dist/adapter/claude-adapter.js.map +1 -0
- package/dist/adapter/index.d.ts +7 -0
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/adapter/index.js +7 -0
- package/dist/adapter/index.js.map +1 -0
- package/dist/cli/autonav.d.ts +11 -0
- package/dist/cli/autonav.d.ts.map +1 -0
- package/dist/cli/autonav.js +79 -0
- package/dist/cli/autonav.js.map +1 -0
- package/dist/cli/nav-chat.d.ts +3 -0
- package/dist/cli/nav-chat.d.ts.map +1 -0
- package/dist/cli/nav-chat.js +151 -0
- package/dist/cli/nav-chat.js.map +1 -0
- package/dist/cli/nav-init.d.ts +3 -0
- package/dist/cli/nav-init.d.ts.map +1 -0
- package/dist/cli/nav-init.js +366 -0
- package/dist/cli/nav-init.js.map +1 -0
- package/dist/cli/nav-query.d.ts +3 -0
- package/dist/cli/nav-query.d.ts.map +1 -0
- package/dist/cli/nav-query.js +217 -0
- package/dist/cli/nav-query.js.map +1 -0
- package/dist/conversation/App.d.ts +14 -0
- package/dist/conversation/App.d.ts.map +1 -0
- package/dist/conversation/App.js +229 -0
- package/dist/conversation/App.js.map +1 -0
- package/dist/conversation/index.d.ts +29 -0
- package/dist/conversation/index.d.ts.map +1 -0
- package/dist/conversation/index.js +44 -0
- package/dist/conversation/index.js.map +1 -0
- package/dist/conversation/prompts.d.ts +9 -0
- package/dist/conversation/prompts.d.ts.map +1 -0
- package/dist/conversation/prompts.js +47 -0
- package/dist/conversation/prompts.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/interview/App.d.ts +14 -0
- package/dist/interview/App.d.ts.map +1 -0
- package/dist/interview/App.js +159 -0
- package/dist/interview/App.js.map +1 -0
- package/dist/interview/index.d.ts +30 -0
- package/dist/interview/index.d.ts.map +1 -0
- package/dist/interview/index.js +52 -0
- package/dist/interview/index.js.map +1 -0
- package/dist/interview/prompts.d.ts +36 -0
- package/dist/interview/prompts.d.ts.map +1 -0
- package/dist/interview/prompts.js +116 -0
- package/dist/interview/prompts.js.map +1 -0
- package/dist/pack-installer/github.d.ts +41 -0
- package/dist/pack-installer/github.d.ts.map +1 -0
- package/dist/pack-installer/github.js +294 -0
- package/dist/pack-installer/github.js.map +1 -0
- package/dist/pack-installer/index.d.ts +57 -0
- package/dist/pack-installer/index.d.ts.map +1 -0
- package/dist/pack-installer/index.js +257 -0
- package/dist/pack-installer/index.js.map +1 -0
- package/dist/plugins/config-schema.d.ts +32 -0
- package/dist/plugins/config-schema.d.ts.map +1 -0
- package/dist/plugins/config-schema.js +26 -0
- package/dist/plugins/config-schema.js.map +1 -0
- package/dist/plugins/implementations/file-watcher/index.d.ts +110 -0
- package/dist/plugins/implementations/file-watcher/index.d.ts.map +1 -0
- package/dist/plugins/implementations/file-watcher/index.js +212 -0
- package/dist/plugins/implementations/file-watcher/index.js.map +1 -0
- package/dist/plugins/implementations/github/index.d.ts +201 -0
- package/dist/plugins/implementations/github/index.d.ts.map +1 -0
- package/dist/plugins/implementations/github/index.js +337 -0
- package/dist/plugins/implementations/github/index.js.map +1 -0
- package/dist/plugins/implementations/slack/index.d.ts +153 -0
- package/dist/plugins/implementations/slack/index.d.ts.map +1 -0
- package/dist/plugins/implementations/slack/index.js +221 -0
- package/dist/plugins/implementations/slack/index.js.map +1 -0
- package/dist/plugins/index.d.ts +23 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +35 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/plugin-manager.d.ts +66 -0
- package/dist/plugins/plugin-manager.d.ts.map +1 -0
- package/dist/plugins/plugin-manager.js +198 -0
- package/dist/plugins/plugin-manager.js.map +1 -0
- package/dist/plugins/types.d.ts +102 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +38 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/plugins/utils/security.d.ts +43 -0
- package/dist/plugins/utils/security.d.ts.map +1 -0
- package/dist/plugins/utils/security.js +115 -0
- package/dist/plugins/utils/security.js.map +1 -0
- package/dist/query-engine/index.d.ts +10 -0
- package/dist/query-engine/index.d.ts.map +1 -0
- package/dist/query-engine/index.js +10 -0
- package/dist/query-engine/index.js.map +1 -0
- package/dist/query-engine/navigator-loader.d.ts +37 -0
- package/dist/query-engine/navigator-loader.d.ts.map +1 -0
- package/dist/query-engine/navigator-loader.js +167 -0
- package/dist/query-engine/navigator-loader.js.map +1 -0
- package/dist/query-engine/output-formatter.d.ts +55 -0
- package/dist/query-engine/output-formatter.d.ts.map +1 -0
- package/dist/query-engine/output-formatter.js +165 -0
- package/dist/query-engine/output-formatter.js.map +1 -0
- package/dist/query-engine/response-validator.d.ts +55 -0
- package/dist/query-engine/response-validator.d.ts.map +1 -0
- package/dist/query-engine/response-validator.js +92 -0
- package/dist/query-engine/response-validator.js.map +1 -0
- package/dist/templates/.gitignore.template +23 -0
- package/dist/templates/CLAUDE-pack.md.template +32 -0
- package/dist/templates/CLAUDE.md.template +128 -0
- package/dist/templates/README.md.template +174 -0
- package/dist/templates/config-pack.json.template +16 -0
- package/dist/templates/config.json.template +11 -0
- package/dist/templates/index.d.ts +22 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +32 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/plugins.json.template +33 -0
- package/dist/templates/system-configuration.md.template +66 -0
- package/dist/tools/handler.d.ts +20 -0
- package/dist/tools/handler.d.ts.map +1 -0
- package/dist/tools/handler.js +202 -0
- package/dist/tools/handler.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +10 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/response.d.ts +30 -0
- package/dist/tools/response.d.ts.map +1 -0
- package/dist/tools/response.js +68 -0
- package/dist/tools/response.js.map +1 -0
- package/dist/tools/self-config.d.ts +54 -0
- package/dist/tools/self-config.d.ts.map +1 -0
- package/dist/tools/self-config.js +84 -0
- package/dist/tools/self-config.js.map +1 -0
- package/dist/validation/index.d.ts +19 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +91 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +71 -0
package/README.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# @autonav/core
|
|
2
|
+
|
|
3
|
+
CLI and SDK adapter for knowledge navigators.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @autonav/core
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## CLI
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Create a navigator
|
|
15
|
+
autonav init my-docs
|
|
16
|
+
|
|
17
|
+
# Query it
|
|
18
|
+
autonav query my-docs "How do I deploy?"
|
|
19
|
+
|
|
20
|
+
# Interactive chat mode
|
|
21
|
+
autonav chat my-docs
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Knowledge Packs
|
|
25
|
+
|
|
26
|
+
Knowledge packs are starter templates with pre-built documentation and configuration for specific domains.
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Install from a pack server
|
|
30
|
+
autonav init my-nav --pack platform-engineering
|
|
31
|
+
|
|
32
|
+
# Install from GitHub (full URL)
|
|
33
|
+
autonav init my-nav --pack https://github.com/owner/repo/tree/main/packs/my-pack
|
|
34
|
+
|
|
35
|
+
# Install from GitHub (shorthand)
|
|
36
|
+
autonav init my-nav --pack github:owner/repo/packs/my-pack
|
|
37
|
+
|
|
38
|
+
# Install from GitHub via SSH (uses your SSH keys)
|
|
39
|
+
autonav init my-nav --pack git@github.com:owner/repo/packs/my-pack
|
|
40
|
+
|
|
41
|
+
# Install specific version
|
|
42
|
+
autonav init my-nav --pack github:owner/repo/packs/my-pack@v1.0.0
|
|
43
|
+
|
|
44
|
+
# Install from local file
|
|
45
|
+
autonav init my-nav --pack-file ./my-pack.tar.gz
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
A knowledge pack must contain:
|
|
49
|
+
- `metadata.json` - Pack name and version
|
|
50
|
+
- `system-configuration.md` and/or `knowledge/` directory
|
|
51
|
+
|
|
52
|
+
**Note:** Currently, navigators support one knowledge pack. Multiple packs may be supported in a future release.
|
|
53
|
+
|
|
54
|
+
## Programmatic use
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
import { ClaudeAdapter } from "@autonav/core";
|
|
58
|
+
|
|
59
|
+
const adapter = new ClaudeAdapter();
|
|
60
|
+
const nav = await adapter.loadNavigator("./my-docs");
|
|
61
|
+
const response = await adapter.query(nav, "How do I deploy?");
|
|
62
|
+
|
|
63
|
+
console.log(response.answer);
|
|
64
|
+
console.log(response.sources);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Navigator structure
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
my-docs/
|
|
71
|
+
├── config.json # Name, version, settings
|
|
72
|
+
├── CLAUDE.md # System prompt
|
|
73
|
+
├── knowledge-base/ # Your documentation
|
|
74
|
+
└── .claude/
|
|
75
|
+
└── plugins.json # Plugin configuration
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Response format
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"query": "How do I deploy?",
|
|
83
|
+
"answer": "Run kubectl apply -f prod.yaml",
|
|
84
|
+
"sources": [
|
|
85
|
+
{
|
|
86
|
+
"filePath": "deployment.md",
|
|
87
|
+
"excerpt": "kubectl apply -f prod.yaml"
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"confidence": "high"
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Environment
|
|
95
|
+
|
|
96
|
+
`ANTHROPIC_API_KEY` - Required for queries.
|
|
97
|
+
|
|
98
|
+
## FAQ
|
|
99
|
+
|
|
100
|
+
**Why would I use this instead of just using Claude Code directly?**
|
|
101
|
+
|
|
102
|
+
You should keep using Claude Code! Autonav is designed to *augment* Claude Code, not replace it.
|
|
103
|
+
|
|
104
|
+
The recommended workflow is:
|
|
105
|
+
1. Create a navigator with `autonav init`
|
|
106
|
+
2. Work with it using Claude Code (`cd my-nav && claude`)
|
|
107
|
+
3. Use `autonav query` when you need programmatic access
|
|
108
|
+
|
|
109
|
+
Autonav is **batteries-included for navigators** - it standardizes the concept so navs are portable and integratable:
|
|
110
|
+
- **Portable**: Your nav is just a directory - run it anywhere Claude Code runs, or via the SDK on servers and CI/CD pipelines
|
|
111
|
+
- **Shareable**: Knowledge packs let you share curated context with others
|
|
112
|
+
- **Programmable**: `autonav query` gives consistent JSON output for automation
|
|
113
|
+
- **Batteries-included**: Plugins, validation, and scaffolding designed specifically for knowledge navigators
|
|
114
|
+
|
|
115
|
+
Claude Code is general-purpose and extensible too, but Autonav gives you the nav-specific tooling out of the box.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { NavigatorConfig, NavigatorResponse, type ValidationResult } from "@autonav/communication-layer";
|
|
2
|
+
import { PluginManager } from "../plugins/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Configuration options for Claude Adapter
|
|
5
|
+
*/
|
|
6
|
+
export interface ClaudeAdapterOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Claude model to use (defaults to claude-sonnet-4-20250514)
|
|
9
|
+
*/
|
|
10
|
+
model?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Maximum turns for agentic loop (defaults to 10)
|
|
13
|
+
*/
|
|
14
|
+
maxTurns?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Loaded navigator with all necessary context
|
|
18
|
+
*/
|
|
19
|
+
export interface LoadedNavigator {
|
|
20
|
+
config: NavigatorConfig;
|
|
21
|
+
systemPrompt: string;
|
|
22
|
+
navigatorPath: string;
|
|
23
|
+
knowledgeBasePath: string;
|
|
24
|
+
pluginManager?: PluginManager;
|
|
25
|
+
pluginsConfigPath?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Query options
|
|
29
|
+
*/
|
|
30
|
+
export interface QueryOptions {
|
|
31
|
+
/**
|
|
32
|
+
* Enable self-configuration tools (defaults to true)
|
|
33
|
+
*/
|
|
34
|
+
enableSelfConfig?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Maximum turns for agentic loop (defaults to 10)
|
|
37
|
+
*/
|
|
38
|
+
maxTurns?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Claude Agent SDK Adapter
|
|
42
|
+
*
|
|
43
|
+
* Bridges Claude Agent SDK to the Communication Layer protocol.
|
|
44
|
+
* Loads navigators, executes queries, and validates responses.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const adapter = new ClaudeAdapter({
|
|
49
|
+
* model: 'claude-sonnet-4-20250514',
|
|
50
|
+
* maxTurns: 10
|
|
51
|
+
* });
|
|
52
|
+
*
|
|
53
|
+
* const navigator = adapter.loadNavigator('./my-navigator');
|
|
54
|
+
* const response = await adapter.query(navigator, 'How do I deploy?');
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare class ClaudeAdapter {
|
|
58
|
+
private readonly options;
|
|
59
|
+
/**
|
|
60
|
+
* Create a new Claude Adapter
|
|
61
|
+
*
|
|
62
|
+
* @param options - Configuration options
|
|
63
|
+
*/
|
|
64
|
+
constructor(options?: ClaudeAdapterOptions);
|
|
65
|
+
/**
|
|
66
|
+
* Load a navigator from a directory
|
|
67
|
+
*
|
|
68
|
+
* Reads and validates config.json and CLAUDE.md (or custom instructions file).
|
|
69
|
+
* Verifies that the knowledge base directory exists.
|
|
70
|
+
* If .claude/plugins.json exists, initializes configured plugins.
|
|
71
|
+
*
|
|
72
|
+
* @param navigatorPath - Path to the navigator directory
|
|
73
|
+
* @returns Loaded navigator with config, system prompt, paths, and optional plugin manager
|
|
74
|
+
* @throws {Error} If directory doesn't exist, config is invalid, or required files are missing
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const adapter = new ClaudeAdapter();
|
|
79
|
+
* const navigator = await adapter.loadNavigator('./my-navigator');
|
|
80
|
+
* console.log(`Loaded: ${navigator.config.name}`);
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
loadNavigator(navigatorPath: string): Promise<LoadedNavigator>;
|
|
84
|
+
/**
|
|
85
|
+
* Execute a query using Claude Agent SDK
|
|
86
|
+
*
|
|
87
|
+
* Sends the question to Claude with the navigator's system prompt,
|
|
88
|
+
* handles tool use via the built-in agentic loop, parses the response,
|
|
89
|
+
* and validates it against the knowledge base.
|
|
90
|
+
*
|
|
91
|
+
* @param navigator - Loaded navigator to query
|
|
92
|
+
* @param question - Question to ask
|
|
93
|
+
* @param options - Query options (enableSelfConfig, maxTurns)
|
|
94
|
+
* @returns Validated navigator response with answer and sources
|
|
95
|
+
* @throws {Error} If API call fails, response parsing fails, or validation fails
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* const response = await adapter.query(navigator, 'How do I deploy?');
|
|
100
|
+
* console.log(response.answer);
|
|
101
|
+
* console.log(`Confidence: ${response.confidence}`);
|
|
102
|
+
* console.log(`Sources: ${response.sources.map(s => s.filePath).join(', ')}`);
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
query(navigator: LoadedNavigator, question: string, options?: QueryOptions): Promise<NavigatorResponse>;
|
|
106
|
+
/**
|
|
107
|
+
* Parse Claude's response into a NavigatorResponse
|
|
108
|
+
*
|
|
109
|
+
* Extracts JSON from the response text (either from code blocks or raw JSON)
|
|
110
|
+
* and validates it against the NavigatorResponseSchema.
|
|
111
|
+
*
|
|
112
|
+
* @param rawResponse - Raw text response from Claude
|
|
113
|
+
* @param query - Original query (used to populate missing query field)
|
|
114
|
+
* @returns Parsed and validated NavigatorResponse
|
|
115
|
+
* @throws {Error} If JSON cannot be extracted or schema validation fails
|
|
116
|
+
*
|
|
117
|
+
* @internal
|
|
118
|
+
*/
|
|
119
|
+
parseResponse(rawResponse: string, query: string): NavigatorResponse;
|
|
120
|
+
/**
|
|
121
|
+
* Validate a NavigatorResponse
|
|
122
|
+
*
|
|
123
|
+
* Runs comprehensive validation including:
|
|
124
|
+
* - Source file existence checks
|
|
125
|
+
* - Hallucination pattern detection
|
|
126
|
+
* - Confidence level validation
|
|
127
|
+
*
|
|
128
|
+
* @param response - Navigator response to validate
|
|
129
|
+
* @param knowledgeBasePath - Path to knowledge base directory
|
|
130
|
+
* @returns Validation result with errors and warnings
|
|
131
|
+
*
|
|
132
|
+
* @internal
|
|
133
|
+
*/
|
|
134
|
+
validate(response: NavigatorResponse, knowledgeBasePath: string): ValidationResult;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=claude-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/claude-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EAEf,iBAAiB,EAKjB,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAuB,aAAa,EAA0B,MAAM,qBAAqB,CAAC;AAIjG;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IAEzD;;;;OAIG;gBACS,OAAO,GAAE,oBAAyB;IAO9C;;;;;;;;;;;;;;;;;OAiBG;IACG,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAmHpE;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,KAAK,CACT,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,iBAAiB,CAAC;IAwJ7B;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB;IAoCpE;;;;;;;;;;;;;OAaG;IACH,QAAQ,CACN,QAAQ,EAAE,iBAAiB,EAC3B,iBAAiB,EAAE,MAAM,GACxB,gBAAgB;CAGpB"}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { NavigatorConfigSchema, NavigatorResponseSchema, createAnswerQuestionPrompt, validateResponse, SELF_CONFIG_RULES, } from "@autonav/communication-layer";
|
|
5
|
+
import { createPluginManager, PluginConfigFileSchema } from "../plugins/index.js";
|
|
6
|
+
import { sanitizeError } from "../plugins/utils/security.js";
|
|
7
|
+
import { createSelfConfigMcpServer, createResponseMcpServer, SUBMIT_ANSWER_TOOL } from "../tools/index.js";
|
|
8
|
+
/**
|
|
9
|
+
* Claude Agent SDK Adapter
|
|
10
|
+
*
|
|
11
|
+
* Bridges Claude Agent SDK to the Communication Layer protocol.
|
|
12
|
+
* Loads navigators, executes queries, and validates responses.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const adapter = new ClaudeAdapter({
|
|
17
|
+
* model: 'claude-sonnet-4-20250514',
|
|
18
|
+
* maxTurns: 10
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* const navigator = adapter.loadNavigator('./my-navigator');
|
|
22
|
+
* const response = await adapter.query(navigator, 'How do I deploy?');
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export class ClaudeAdapter {
|
|
26
|
+
options;
|
|
27
|
+
/**
|
|
28
|
+
* Create a new Claude Adapter
|
|
29
|
+
*
|
|
30
|
+
* @param options - Configuration options
|
|
31
|
+
*/
|
|
32
|
+
constructor(options = {}) {
|
|
33
|
+
this.options = {
|
|
34
|
+
model: options.model || "claude-sonnet-4-20250514",
|
|
35
|
+
maxTurns: options.maxTurns || 10,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Load a navigator from a directory
|
|
40
|
+
*
|
|
41
|
+
* Reads and validates config.json and CLAUDE.md (or custom instructions file).
|
|
42
|
+
* Verifies that the knowledge base directory exists.
|
|
43
|
+
* If .claude/plugins.json exists, initializes configured plugins.
|
|
44
|
+
*
|
|
45
|
+
* @param navigatorPath - Path to the navigator directory
|
|
46
|
+
* @returns Loaded navigator with config, system prompt, paths, and optional plugin manager
|
|
47
|
+
* @throws {Error} If directory doesn't exist, config is invalid, or required files are missing
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const adapter = new ClaudeAdapter();
|
|
52
|
+
* const navigator = await adapter.loadNavigator('./my-navigator');
|
|
53
|
+
* console.log(`Loaded: ${navigator.config.name}`);
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
async loadNavigator(navigatorPath) {
|
|
57
|
+
const configPath = path.join(navigatorPath, "config.json");
|
|
58
|
+
// Validate directory exists
|
|
59
|
+
if (!fs.existsSync(navigatorPath)) {
|
|
60
|
+
throw new Error(`Navigator directory not found: ${navigatorPath}\n` +
|
|
61
|
+
`Make sure the path is correct and the navigator exists.`);
|
|
62
|
+
}
|
|
63
|
+
// Verify it's a directory
|
|
64
|
+
const pathStats = fs.statSync(navigatorPath);
|
|
65
|
+
if (!pathStats.isDirectory()) {
|
|
66
|
+
throw new Error(`Path is not a directory: ${navigatorPath}\n` +
|
|
67
|
+
`Navigator path must point to a directory containing config.json`);
|
|
68
|
+
}
|
|
69
|
+
// Load and validate config.json
|
|
70
|
+
if (!fs.existsSync(configPath)) {
|
|
71
|
+
throw new Error(`config.json not found in ${navigatorPath}\n` +
|
|
72
|
+
`Expected file: ${configPath}\n` +
|
|
73
|
+
`Use 'autonav init' to create a new navigator with the required structure.`);
|
|
74
|
+
}
|
|
75
|
+
const configContent = fs.readFileSync(configPath, "utf-8");
|
|
76
|
+
let config;
|
|
77
|
+
try {
|
|
78
|
+
const configJson = JSON.parse(configContent);
|
|
79
|
+
config = NavigatorConfigSchema.parse(configJson);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw new Error(`Invalid config.json in ${navigatorPath}:\n` +
|
|
83
|
+
`${error instanceof Error ? error.message : String(error)}\n\n` +
|
|
84
|
+
`Config file must match the NavigatorConfig schema.`);
|
|
85
|
+
}
|
|
86
|
+
// Load instructions file (CLAUDE.md or custom)
|
|
87
|
+
const instructionsFile = config.instructionsPath || "CLAUDE.md";
|
|
88
|
+
const actualInstructionsPath = path.join(navigatorPath, instructionsFile);
|
|
89
|
+
if (!fs.existsSync(actualInstructionsPath)) {
|
|
90
|
+
throw new Error(`Instructions file not found: ${instructionsFile}\n` +
|
|
91
|
+
`Expected path: ${actualInstructionsPath}\n` +
|
|
92
|
+
`Create a ${instructionsFile} file with the navigator's system prompt.`);
|
|
93
|
+
}
|
|
94
|
+
const systemPrompt = fs.readFileSync(actualInstructionsPath, "utf-8");
|
|
95
|
+
// Validate knowledge base exists
|
|
96
|
+
const knowledgeBasePath = path.join(navigatorPath, config.knowledgeBase);
|
|
97
|
+
if (!fs.existsSync(knowledgeBasePath)) {
|
|
98
|
+
throw new Error(`Knowledge base directory not found: ${config.knowledgeBase}\n` +
|
|
99
|
+
`Expected path: ${knowledgeBasePath}\n` +
|
|
100
|
+
`Create the directory and add documentation files for the navigator to search.`);
|
|
101
|
+
}
|
|
102
|
+
// Verify knowledge base is a directory
|
|
103
|
+
const kbStats = fs.statSync(knowledgeBasePath);
|
|
104
|
+
if (!kbStats.isDirectory()) {
|
|
105
|
+
throw new Error(`Knowledge base path is not a directory: ${config.knowledgeBase}\n` +
|
|
106
|
+
`The knowledge base must be a directory containing documentation files.`);
|
|
107
|
+
}
|
|
108
|
+
// Load and initialize plugins if .claude/plugins.json exists
|
|
109
|
+
let pluginManager;
|
|
110
|
+
const pluginsConfigPath = path.join(navigatorPath, ".claude", "plugins.json");
|
|
111
|
+
if (fs.existsSync(pluginsConfigPath)) {
|
|
112
|
+
try {
|
|
113
|
+
const pluginsConfigContent = fs.readFileSync(pluginsConfigPath, "utf-8");
|
|
114
|
+
const pluginsConfig = PluginConfigFileSchema.parse(JSON.parse(pluginsConfigContent));
|
|
115
|
+
// Create plugin manager
|
|
116
|
+
pluginManager = createPluginManager(pluginsConfigPath);
|
|
117
|
+
// Actually initialize the plugins
|
|
118
|
+
await pluginManager.loadPlugins(pluginsConfig);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
// Sanitize error to prevent credential leakage in logs
|
|
122
|
+
const safeMessage = sanitizeError(error instanceof Error ? error.message : String(error));
|
|
123
|
+
console.warn(`⚠️ Failed to load plugins: ${safeMessage}`);
|
|
124
|
+
console.warn(" Continuing without plugins...");
|
|
125
|
+
// Continue without plugins (fail-safe)
|
|
126
|
+
pluginManager = undefined;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
config,
|
|
131
|
+
systemPrompt,
|
|
132
|
+
navigatorPath,
|
|
133
|
+
knowledgeBasePath,
|
|
134
|
+
pluginManager,
|
|
135
|
+
pluginsConfigPath,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Execute a query using Claude Agent SDK
|
|
140
|
+
*
|
|
141
|
+
* Sends the question to Claude with the navigator's system prompt,
|
|
142
|
+
* handles tool use via the built-in agentic loop, parses the response,
|
|
143
|
+
* and validates it against the knowledge base.
|
|
144
|
+
*
|
|
145
|
+
* @param navigator - Loaded navigator to query
|
|
146
|
+
* @param question - Question to ask
|
|
147
|
+
* @param options - Query options (enableSelfConfig, maxTurns)
|
|
148
|
+
* @returns Validated navigator response with answer and sources
|
|
149
|
+
* @throws {Error} If API call fails, response parsing fails, or validation fails
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```typescript
|
|
153
|
+
* const response = await adapter.query(navigator, 'How do I deploy?');
|
|
154
|
+
* console.log(response.answer);
|
|
155
|
+
* console.log(`Confidence: ${response.confidence}`);
|
|
156
|
+
* console.log(`Sources: ${response.sources.map(s => s.filePath).join(', ')}`);
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
async query(navigator, question, options = {}) {
|
|
160
|
+
const { enableSelfConfig = true, maxTurns = this.options.maxTurns, } = options;
|
|
161
|
+
// Validate inputs
|
|
162
|
+
if (!question || question.trim().length === 0) {
|
|
163
|
+
throw new Error('Question cannot be empty');
|
|
164
|
+
}
|
|
165
|
+
// Create the prompt
|
|
166
|
+
const prompt = createAnswerQuestionPrompt(question);
|
|
167
|
+
// Build system prompt with self-config rules if enabled
|
|
168
|
+
let systemPrompt = navigator.systemPrompt;
|
|
169
|
+
if (enableSelfConfig && !systemPrompt.includes("Self-Configuration Capabilities")) {
|
|
170
|
+
systemPrompt = `${navigator.systemPrompt}\n\n${SELF_CONFIG_RULES}`;
|
|
171
|
+
}
|
|
172
|
+
// Set up MCP servers
|
|
173
|
+
const mcpServers = {};
|
|
174
|
+
// Always add response tools for structured output
|
|
175
|
+
mcpServers["autonav-response"] = createResponseMcpServer();
|
|
176
|
+
// Add self-config tools if enabled
|
|
177
|
+
if (enableSelfConfig && navigator.pluginsConfigPath) {
|
|
178
|
+
mcpServers["autonav-self-config"] = createSelfConfigMcpServer(navigator.pluginManager, navigator.pluginsConfigPath);
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
// Execute query using Claude Agent SDK
|
|
182
|
+
// The SDK handles the agentic loop automatically
|
|
183
|
+
const queryIterator = query({
|
|
184
|
+
prompt,
|
|
185
|
+
options: {
|
|
186
|
+
model: this.options.model,
|
|
187
|
+
maxTurns,
|
|
188
|
+
systemPrompt,
|
|
189
|
+
cwd: navigator.navigatorPath,
|
|
190
|
+
mcpServers: Object.keys(mcpServers).length > 0 ? mcpServers : undefined,
|
|
191
|
+
// Don't load user/project settings - we control everything
|
|
192
|
+
settingSources: [],
|
|
193
|
+
// Allow the SDK to handle permissions
|
|
194
|
+
permissionMode: "bypassPermissions",
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
// Collect messages and find the result
|
|
198
|
+
let resultMessage;
|
|
199
|
+
let lastAssistantText = "";
|
|
200
|
+
let submitAnswerInput;
|
|
201
|
+
for await (const message of queryIterator) {
|
|
202
|
+
// Log tool usage for debugging
|
|
203
|
+
if (message.type === "assistant") {
|
|
204
|
+
const content = message.message.content;
|
|
205
|
+
for (const block of content) {
|
|
206
|
+
if (block.type === "tool_use") {
|
|
207
|
+
// Check if this is the submit_answer tool
|
|
208
|
+
if (block.name === SUBMIT_ANSWER_TOOL) {
|
|
209
|
+
// Extract the structured response from tool input
|
|
210
|
+
submitAnswerInput = block.input;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else if (block.type === "text") {
|
|
214
|
+
lastAssistantText = block.text;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Capture the result message
|
|
219
|
+
if (message.type === "result") {
|
|
220
|
+
resultMessage = message;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Check for errors
|
|
224
|
+
if (!resultMessage) {
|
|
225
|
+
throw new Error("No result message received from Claude Agent SDK");
|
|
226
|
+
}
|
|
227
|
+
if (resultMessage.subtype !== "success") {
|
|
228
|
+
const errorDetails = "errors" in resultMessage
|
|
229
|
+
? resultMessage.errors.join(", ")
|
|
230
|
+
: "Unknown error";
|
|
231
|
+
throw new Error(`Query failed: ${resultMessage.subtype} - ${errorDetails}`);
|
|
232
|
+
}
|
|
233
|
+
// Build the navigator response
|
|
234
|
+
let navigatorResponse;
|
|
235
|
+
if (submitAnswerInput) {
|
|
236
|
+
// Use structured output from tool call (preferred)
|
|
237
|
+
navigatorResponse = NavigatorResponseSchema.parse({
|
|
238
|
+
query: question,
|
|
239
|
+
answer: submitAnswerInput.answer,
|
|
240
|
+
sources: submitAnswerInput.sources,
|
|
241
|
+
confidence: submitAnswerInput.confidence,
|
|
242
|
+
timestamp: new Date().toISOString(),
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
// Fall back to parsing text response (legacy path)
|
|
247
|
+
const finalText = resultMessage.result || lastAssistantText;
|
|
248
|
+
if (!finalText) {
|
|
249
|
+
throw new Error("No response received from Claude. Expected submit_answer tool call or text response.");
|
|
250
|
+
}
|
|
251
|
+
// Parse the response from text
|
|
252
|
+
navigatorResponse = this.parseResponse(finalText, question);
|
|
253
|
+
}
|
|
254
|
+
// Validate the response
|
|
255
|
+
const validation = this.validate(navigatorResponse, navigator.knowledgeBasePath);
|
|
256
|
+
// Log warnings but don't throw
|
|
257
|
+
if (validation.warnings.length > 0) {
|
|
258
|
+
console.warn("⚠️ Validation warnings:");
|
|
259
|
+
for (const warning of validation.warnings) {
|
|
260
|
+
console.warn(` - ${warning}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Throw on errors
|
|
264
|
+
if (!validation.valid) {
|
|
265
|
+
console.error("❌ Validation failed:");
|
|
266
|
+
for (const error of validation.errors) {
|
|
267
|
+
console.error(` - ${error.message}`);
|
|
268
|
+
}
|
|
269
|
+
throw new Error("Response validation failed. See errors above for details.");
|
|
270
|
+
}
|
|
271
|
+
return navigatorResponse;
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
if (error instanceof Error) {
|
|
275
|
+
throw error;
|
|
276
|
+
}
|
|
277
|
+
throw new Error(`Failed to query Claude: ${error instanceof Error ? error.message : String(error)}`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Parse Claude's response into a NavigatorResponse
|
|
282
|
+
*
|
|
283
|
+
* Extracts JSON from the response text (either from code blocks or raw JSON)
|
|
284
|
+
* and validates it against the NavigatorResponseSchema.
|
|
285
|
+
*
|
|
286
|
+
* @param rawResponse - Raw text response from Claude
|
|
287
|
+
* @param query - Original query (used to populate missing query field)
|
|
288
|
+
* @returns Parsed and validated NavigatorResponse
|
|
289
|
+
* @throws {Error} If JSON cannot be extracted or schema validation fails
|
|
290
|
+
*
|
|
291
|
+
* @internal
|
|
292
|
+
*/
|
|
293
|
+
parseResponse(rawResponse, query) {
|
|
294
|
+
// Try to extract JSON from code blocks
|
|
295
|
+
const jsonMatch = rawResponse.match(/```json\s*([\s\S]*?)\s*```/);
|
|
296
|
+
let jsonText;
|
|
297
|
+
if (jsonMatch && jsonMatch[1]) {
|
|
298
|
+
jsonText = jsonMatch[1];
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
// Try to find JSON object in the text
|
|
302
|
+
const objectMatch = rawResponse.match(/\{[\s\S]*\}/);
|
|
303
|
+
if (objectMatch && objectMatch[0]) {
|
|
304
|
+
jsonText = objectMatch[0];
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
throw new Error("Could not find JSON in Claude's response. Response should contain a JSON object.");
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
try {
|
|
311
|
+
const parsed = JSON.parse(jsonText);
|
|
312
|
+
// Ensure query field is set
|
|
313
|
+
if (!parsed.query) {
|
|
314
|
+
parsed.query = query;
|
|
315
|
+
}
|
|
316
|
+
return NavigatorResponseSchema.parse(parsed);
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
throw new Error(`Failed to parse response: ${error instanceof Error ? error.message : String(error)}\n\nRaw response:\n${rawResponse}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Validate a NavigatorResponse
|
|
324
|
+
*
|
|
325
|
+
* Runs comprehensive validation including:
|
|
326
|
+
* - Source file existence checks
|
|
327
|
+
* - Hallucination pattern detection
|
|
328
|
+
* - Confidence level validation
|
|
329
|
+
*
|
|
330
|
+
* @param response - Navigator response to validate
|
|
331
|
+
* @param knowledgeBasePath - Path to knowledge base directory
|
|
332
|
+
* @returns Validation result with errors and warnings
|
|
333
|
+
*
|
|
334
|
+
* @internal
|
|
335
|
+
*/
|
|
336
|
+
validate(response, knowledgeBasePath) {
|
|
337
|
+
return validateResponse(response, knowledgeBasePath);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=claude-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-adapter.js","sourceRoot":"","sources":["../../src/adapter/claude-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude SDK Adapter
|
|
3
|
+
*
|
|
4
|
+
* Execution engine that bridges Claude API to Communication Layer protocol
|
|
5
|
+
*/
|
|
6
|
+
export { ClaudeAdapter, type ClaudeAdapterOptions, type LoadedNavigator, type QueryOptions, } from "./claude-adapter.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,GAId,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Main autonav CLI dispatcher
|
|
4
|
+
*
|
|
5
|
+
* Routes commands to appropriate handlers:
|
|
6
|
+
* - autonav init -> nav-init.ts
|
|
7
|
+
* - autonav query -> nav-query.ts
|
|
8
|
+
* - autonav chat -> nav-chat.ts
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=autonav.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autonav.d.ts","sourceRoot":"","sources":["../../src/cli/autonav.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG"}
|