cognitive-modules 0.6.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 +165 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.js +335 -0
- package/dist/commands/add.d.ts +34 -0
- package/dist/commands/add.js +229 -0
- package/dist/commands/index.d.ts +11 -0
- package/dist/commands/index.js +11 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.js +78 -0
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.js +28 -0
- package/dist/commands/pipe.d.ts +9 -0
- package/dist/commands/pipe.js +59 -0
- package/dist/commands/remove.d.ts +10 -0
- package/dist/commands/remove.js +47 -0
- package/dist/commands/run.d.ts +12 -0
- package/dist/commands/run.js +65 -0
- package/dist/commands/update.d.ts +14 -0
- package/dist/commands/update.js +105 -0
- package/dist/commands/versions.d.ts +13 -0
- package/dist/commands/versions.js +60 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +11 -0
- package/dist/modules/index.d.ts +5 -0
- package/dist/modules/index.js +5 -0
- package/dist/modules/loader.d.ts +12 -0
- package/dist/modules/loader.js +197 -0
- package/dist/modules/runner.d.ts +12 -0
- package/dist/modules/runner.js +229 -0
- package/dist/providers/anthropic.d.ts +14 -0
- package/dist/providers/anthropic.js +70 -0
- package/dist/providers/base.d.ts +11 -0
- package/dist/providers/base.js +19 -0
- package/dist/providers/deepseek.d.ts +14 -0
- package/dist/providers/deepseek.js +66 -0
- package/dist/providers/gemini.d.ts +19 -0
- package/dist/providers/gemini.js +94 -0
- package/dist/providers/index.d.ts +19 -0
- package/dist/providers/index.js +74 -0
- package/dist/providers/minimax.d.ts +14 -0
- package/dist/providers/minimax.js +64 -0
- package/dist/providers/moonshot.d.ts +14 -0
- package/dist/providers/moonshot.js +65 -0
- package/dist/providers/ollama.d.ts +13 -0
- package/dist/providers/ollama.js +64 -0
- package/dist/providers/openai.d.ts +14 -0
- package/dist/providers/openai.js +67 -0
- package/dist/providers/qwen.d.ts +14 -0
- package/dist/providers/qwen.js +65 -0
- package/dist/types.d.ts +136 -0
- package/dist/types.js +5 -0
- package/package.json +48 -0
- package/src/cli.ts +375 -0
- package/src/commands/add.ts +315 -0
- package/src/commands/index.ts +12 -0
- package/src/commands/init.ts +94 -0
- package/src/commands/list.ts +33 -0
- package/src/commands/pipe.ts +76 -0
- package/src/commands/remove.ts +57 -0
- package/src/commands/run.ts +80 -0
- package/src/commands/update.ts +130 -0
- package/src/commands/versions.ts +79 -0
- package/src/index.ts +44 -0
- package/src/modules/index.ts +6 -0
- package/src/modules/loader.ts +219 -0
- package/src/modules/runner.ts +278 -0
- package/src/providers/anthropic.ts +89 -0
- package/src/providers/base.ts +29 -0
- package/src/providers/deepseek.ts +83 -0
- package/src/providers/gemini.ts +117 -0
- package/src/providers/index.ts +78 -0
- package/src/providers/minimax.ts +81 -0
- package/src/providers/moonshot.ts +82 -0
- package/src/providers/ollama.ts +83 -0
- package/src/providers/openai.ts +84 -0
- package/src/providers/qwen.ts +82 -0
- package/src/types.ts +184 -0
- package/tsconfig.json +17 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Provider - OpenAI API (and compatible APIs)
|
|
3
|
+
*/
|
|
4
|
+
import { BaseProvider } from './base.js';
|
|
5
|
+
export class OpenAIProvider extends BaseProvider {
|
|
6
|
+
name = 'openai';
|
|
7
|
+
apiKey;
|
|
8
|
+
model;
|
|
9
|
+
baseUrl;
|
|
10
|
+
constructor(apiKey, model = 'gpt-5.2', baseUrl = 'https://api.openai.com/v1') {
|
|
11
|
+
super();
|
|
12
|
+
this.apiKey = apiKey || process.env.OPENAI_API_KEY || '';
|
|
13
|
+
this.model = model;
|
|
14
|
+
this.baseUrl = baseUrl;
|
|
15
|
+
}
|
|
16
|
+
isConfigured() {
|
|
17
|
+
return !!this.apiKey;
|
|
18
|
+
}
|
|
19
|
+
async invoke(params) {
|
|
20
|
+
if (!this.isConfigured()) {
|
|
21
|
+
throw new Error('OpenAI API key not configured. Set OPENAI_API_KEY environment variable.');
|
|
22
|
+
}
|
|
23
|
+
const url = `${this.baseUrl}/chat/completions`;
|
|
24
|
+
const body = {
|
|
25
|
+
model: this.model,
|
|
26
|
+
messages: params.messages,
|
|
27
|
+
temperature: params.temperature ?? 0.7,
|
|
28
|
+
max_tokens: params.maxTokens ?? 4096,
|
|
29
|
+
};
|
|
30
|
+
// Add JSON mode if schema provided
|
|
31
|
+
if (params.jsonSchema) {
|
|
32
|
+
body.response_format = { type: 'json_object' };
|
|
33
|
+
// Append schema instruction to last user message
|
|
34
|
+
const lastUserIdx = params.messages.findLastIndex(m => m.role === 'user');
|
|
35
|
+
if (lastUserIdx >= 0) {
|
|
36
|
+
const messages = [...params.messages];
|
|
37
|
+
messages[lastUserIdx] = {
|
|
38
|
+
...messages[lastUserIdx],
|
|
39
|
+
content: messages[lastUserIdx].content + this.buildJsonPrompt(params.jsonSchema),
|
|
40
|
+
};
|
|
41
|
+
body.messages = messages;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const response = await fetch(url, {
|
|
45
|
+
method: 'POST',
|
|
46
|
+
headers: {
|
|
47
|
+
'Content-Type': 'application/json',
|
|
48
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
49
|
+
},
|
|
50
|
+
body: JSON.stringify(body),
|
|
51
|
+
});
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
const error = await response.text();
|
|
54
|
+
throw new Error(`OpenAI API error: ${response.status} - ${error}`);
|
|
55
|
+
}
|
|
56
|
+
const data = await response.json();
|
|
57
|
+
const content = data.choices?.[0]?.message?.content || '';
|
|
58
|
+
return {
|
|
59
|
+
content,
|
|
60
|
+
usage: data.usage ? {
|
|
61
|
+
promptTokens: data.usage.prompt_tokens || 0,
|
|
62
|
+
completionTokens: data.usage.completion_tokens || 0,
|
|
63
|
+
totalTokens: data.usage.total_tokens || 0,
|
|
64
|
+
} : undefined,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qwen Provider - Alibaba Tongyi Qianwen (通义千问) via DashScope API
|
|
3
|
+
*/
|
|
4
|
+
import { BaseProvider } from './base.js';
|
|
5
|
+
import type { InvokeParams, InvokeResult } from '../types.js';
|
|
6
|
+
export declare class QwenProvider extends BaseProvider {
|
|
7
|
+
name: string;
|
|
8
|
+
private apiKey;
|
|
9
|
+
private model;
|
|
10
|
+
private baseUrl;
|
|
11
|
+
constructor(apiKey?: string, model?: string);
|
|
12
|
+
isConfigured(): boolean;
|
|
13
|
+
invoke(params: InvokeParams): Promise<InvokeResult>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qwen Provider - Alibaba Tongyi Qianwen (通义千问) via DashScope API
|
|
3
|
+
*/
|
|
4
|
+
import { BaseProvider } from './base.js';
|
|
5
|
+
export class QwenProvider extends BaseProvider {
|
|
6
|
+
name = 'qwen';
|
|
7
|
+
apiKey;
|
|
8
|
+
model;
|
|
9
|
+
baseUrl = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
|
|
10
|
+
constructor(apiKey, model = 'qwen3-max') {
|
|
11
|
+
super();
|
|
12
|
+
this.apiKey = apiKey || process.env.DASHSCOPE_API_KEY || process.env.QWEN_API_KEY || '';
|
|
13
|
+
this.model = model;
|
|
14
|
+
}
|
|
15
|
+
isConfigured() {
|
|
16
|
+
return !!this.apiKey;
|
|
17
|
+
}
|
|
18
|
+
async invoke(params) {
|
|
19
|
+
if (!this.isConfigured()) {
|
|
20
|
+
throw new Error('Qwen API key not configured. Set DASHSCOPE_API_KEY or QWEN_API_KEY environment variable.');
|
|
21
|
+
}
|
|
22
|
+
const url = `${this.baseUrl}/chat/completions`;
|
|
23
|
+
const body = {
|
|
24
|
+
model: this.model,
|
|
25
|
+
messages: params.messages.map(m => ({ role: m.role, content: m.content })),
|
|
26
|
+
temperature: params.temperature ?? 0.7,
|
|
27
|
+
max_tokens: params.maxTokens ?? 4096,
|
|
28
|
+
};
|
|
29
|
+
// Add JSON mode if schema provided
|
|
30
|
+
if (params.jsonSchema) {
|
|
31
|
+
body.response_format = { type: 'json_object' };
|
|
32
|
+
const lastUserIdx = params.messages.findLastIndex(m => m.role === 'user');
|
|
33
|
+
if (lastUserIdx >= 0) {
|
|
34
|
+
const messages = [...params.messages];
|
|
35
|
+
messages[lastUserIdx] = {
|
|
36
|
+
...messages[lastUserIdx],
|
|
37
|
+
content: messages[lastUserIdx].content + this.buildJsonPrompt(params.jsonSchema),
|
|
38
|
+
};
|
|
39
|
+
body.messages = messages.map(m => ({ role: m.role, content: m.content }));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const response = await fetch(url, {
|
|
43
|
+
method: 'POST',
|
|
44
|
+
headers: {
|
|
45
|
+
'Content-Type': 'application/json',
|
|
46
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
47
|
+
},
|
|
48
|
+
body: JSON.stringify(body),
|
|
49
|
+
});
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
const error = await response.text();
|
|
52
|
+
throw new Error(`Qwen API error: ${response.status} - ${error}`);
|
|
53
|
+
}
|
|
54
|
+
const data = await response.json();
|
|
55
|
+
const content = data.choices?.[0]?.message?.content || '';
|
|
56
|
+
return {
|
|
57
|
+
content,
|
|
58
|
+
usage: data.usage ? {
|
|
59
|
+
promptTokens: data.usage.prompt_tokens || 0,
|
|
60
|
+
completionTokens: data.usage.completion_tokens || 0,
|
|
61
|
+
totalTokens: data.usage.total_tokens || 0,
|
|
62
|
+
} : undefined,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cognitive Runtime - Core Types
|
|
3
|
+
* Version 2.1 - With envelope format, tools policy, failure contract
|
|
4
|
+
*/
|
|
5
|
+
export interface Provider {
|
|
6
|
+
name: string;
|
|
7
|
+
invoke(params: InvokeParams): Promise<InvokeResult>;
|
|
8
|
+
isConfigured(): boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface InvokeParams {
|
|
11
|
+
messages: Message[];
|
|
12
|
+
jsonSchema?: object;
|
|
13
|
+
temperature?: number;
|
|
14
|
+
maxTokens?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface Message {
|
|
17
|
+
role: 'system' | 'user' | 'assistant';
|
|
18
|
+
content: string;
|
|
19
|
+
}
|
|
20
|
+
export interface InvokeResult {
|
|
21
|
+
content: string;
|
|
22
|
+
usage?: {
|
|
23
|
+
promptTokens: number;
|
|
24
|
+
completionTokens: number;
|
|
25
|
+
totalTokens: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface CognitiveModule {
|
|
29
|
+
name: string;
|
|
30
|
+
version: string;
|
|
31
|
+
responsibility: string;
|
|
32
|
+
excludes: string[];
|
|
33
|
+
constraints?: ModuleConstraints;
|
|
34
|
+
policies?: ModulePolicies;
|
|
35
|
+
tools?: ToolsPolicy;
|
|
36
|
+
output?: OutputContract;
|
|
37
|
+
failure?: FailureContract;
|
|
38
|
+
runtimeRequirements?: RuntimeRequirements;
|
|
39
|
+
context?: 'fork' | 'main';
|
|
40
|
+
prompt: string;
|
|
41
|
+
inputSchema?: object;
|
|
42
|
+
outputSchema?: object;
|
|
43
|
+
errorSchema?: object;
|
|
44
|
+
location: string;
|
|
45
|
+
format: 'v1' | 'v2';
|
|
46
|
+
}
|
|
47
|
+
export interface ModuleConstraints {
|
|
48
|
+
no_network?: boolean;
|
|
49
|
+
no_side_effects?: boolean;
|
|
50
|
+
no_file_write?: boolean;
|
|
51
|
+
no_inventing_data?: boolean;
|
|
52
|
+
behavior_equivalence_false_max_confidence?: number;
|
|
53
|
+
}
|
|
54
|
+
export interface ModulePolicies {
|
|
55
|
+
network?: 'allow' | 'deny';
|
|
56
|
+
filesystem_write?: 'allow' | 'deny';
|
|
57
|
+
side_effects?: 'allow' | 'deny';
|
|
58
|
+
code_execution?: 'allow' | 'deny';
|
|
59
|
+
}
|
|
60
|
+
export interface ToolsPolicy {
|
|
61
|
+
policy?: 'allow_by_default' | 'deny_by_default';
|
|
62
|
+
allowed: string[];
|
|
63
|
+
denied?: string[];
|
|
64
|
+
}
|
|
65
|
+
export interface OutputContract {
|
|
66
|
+
format?: 'json_strict' | 'json_lenient' | 'text';
|
|
67
|
+
envelope?: boolean;
|
|
68
|
+
require?: string[];
|
|
69
|
+
require_confidence?: boolean;
|
|
70
|
+
require_rationale?: boolean;
|
|
71
|
+
require_behavior_equivalence?: boolean;
|
|
72
|
+
}
|
|
73
|
+
export interface FailureContract {
|
|
74
|
+
contract?: 'error_union' | 'throw';
|
|
75
|
+
partial_allowed?: boolean;
|
|
76
|
+
must_return_error_schema?: boolean;
|
|
77
|
+
schema?: object;
|
|
78
|
+
}
|
|
79
|
+
export interface RuntimeRequirements {
|
|
80
|
+
structured_output?: boolean;
|
|
81
|
+
max_input_tokens?: number;
|
|
82
|
+
preferred_capabilities?: string[];
|
|
83
|
+
}
|
|
84
|
+
export interface EnvelopeSuccess<T = unknown> {
|
|
85
|
+
ok: true;
|
|
86
|
+
data: T;
|
|
87
|
+
}
|
|
88
|
+
export interface EnvelopeError {
|
|
89
|
+
ok: false;
|
|
90
|
+
error: {
|
|
91
|
+
code: string;
|
|
92
|
+
message: string;
|
|
93
|
+
};
|
|
94
|
+
partial_data?: unknown;
|
|
95
|
+
}
|
|
96
|
+
export type EnvelopeResponse<T = unknown> = EnvelopeSuccess<T> | EnvelopeError;
|
|
97
|
+
export interface ModuleResultData {
|
|
98
|
+
[key: string]: unknown;
|
|
99
|
+
confidence: number;
|
|
100
|
+
rationale: string;
|
|
101
|
+
behavior_equivalence?: boolean;
|
|
102
|
+
}
|
|
103
|
+
export interface ModuleResult {
|
|
104
|
+
ok: boolean;
|
|
105
|
+
data?: ModuleResultData;
|
|
106
|
+
error?: {
|
|
107
|
+
code: string;
|
|
108
|
+
message: string;
|
|
109
|
+
};
|
|
110
|
+
partial_data?: unknown;
|
|
111
|
+
raw?: string;
|
|
112
|
+
}
|
|
113
|
+
export interface LegacyModuleResult {
|
|
114
|
+
output: unknown;
|
|
115
|
+
confidence: number;
|
|
116
|
+
rationale: string;
|
|
117
|
+
behaviorEquivalence?: boolean;
|
|
118
|
+
raw?: string;
|
|
119
|
+
}
|
|
120
|
+
export interface CommandContext {
|
|
121
|
+
cwd: string;
|
|
122
|
+
provider: Provider;
|
|
123
|
+
verbose?: boolean;
|
|
124
|
+
}
|
|
125
|
+
export interface CommandResult {
|
|
126
|
+
success: boolean;
|
|
127
|
+
data?: unknown;
|
|
128
|
+
error?: string;
|
|
129
|
+
}
|
|
130
|
+
export interface ModuleInput {
|
|
131
|
+
code?: string;
|
|
132
|
+
query?: string;
|
|
133
|
+
language?: string;
|
|
134
|
+
options?: Record<string, unknown>;
|
|
135
|
+
[key: string]: unknown;
|
|
136
|
+
}
|
package/dist/types.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cognitive-modules",
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "Cognitive Modules - Structured AI Task Execution with version management",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"cog": "dist/cli.js",
|
|
9
|
+
"cognitive": "dist/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"start": "node dist/cli.js",
|
|
14
|
+
"dev": "tsx src/cli.ts",
|
|
15
|
+
"prepublishOnly": "npm run build"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"cognitive",
|
|
19
|
+
"ai",
|
|
20
|
+
"llm",
|
|
21
|
+
"structured",
|
|
22
|
+
"modules",
|
|
23
|
+
"cli",
|
|
24
|
+
"npx"
|
|
25
|
+
],
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"author": "ziel-io",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/ziel-io/cognitive-modules.git"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://ziel-io.github.io/cognitive-modules/",
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/ziel-io/cognitive-modules/issues"
|
|
35
|
+
},
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18.0.0"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"js-yaml": "^4.1.1"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/js-yaml": "^4.0.9",
|
|
44
|
+
"@types/node": "^22.0.0",
|
|
45
|
+
"tsx": "^4.21.0",
|
|
46
|
+
"typescript": "^5.9.3"
|
|
47
|
+
}
|
|
48
|
+
}
|