@mawaru/sdk 0.33.0 → 0.34.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.
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest"
|
|
2
|
+
import { MODEL_SERIES } from "../../agent-runner/_agents/models.js"
|
|
2
3
|
import {
|
|
3
4
|
AI_MODEL_GROUPS,
|
|
5
|
+
AI_MODEL_SERIES,
|
|
4
6
|
AI_MODELS,
|
|
5
7
|
agentOfModel,
|
|
6
8
|
aiManifestSchema,
|
|
@@ -52,12 +54,12 @@ describe("aiManifestSchema", () => {
|
|
|
52
54
|
outputs: { main: textOutput },
|
|
53
55
|
})
|
|
54
56
|
expect(manifest.name).toBeUndefined()
|
|
55
|
-
expect(manifest.model).toBe("claude-opus
|
|
57
|
+
expect(manifest.model).toBe("claude-opus")
|
|
56
58
|
expect(manifest.skills).toEqual([])
|
|
57
59
|
expect(manifest.env).toEqual([])
|
|
58
60
|
})
|
|
59
61
|
|
|
60
|
-
it("model は AI_MODELS の enum
|
|
62
|
+
it("model は AI_MODELS の enum(系列か固定 ID。外の値は拒否)", () => {
|
|
61
63
|
for (const model of AI_MODELS) {
|
|
62
64
|
expect(aiManifestSchema.parse({ ...valid, model }).model).toBe(model)
|
|
63
65
|
}
|
|
@@ -80,19 +82,36 @@ describe("aiManifestSchema", () => {
|
|
|
80
82
|
expect(
|
|
81
83
|
aiManifestSchema.parse({ ...valid, model: "gpt-6-astra" }).model,
|
|
82
84
|
).toBe("gpt-6-astra")
|
|
83
|
-
|
|
85
|
+
const { claude, codex } = AI_MODEL_GROUPS
|
|
86
|
+
for (const model of [...claude.series, ...claude.models]) {
|
|
84
87
|
expect(agentOfModel(model)).toBe("claude")
|
|
85
88
|
}
|
|
86
|
-
for (const model of
|
|
89
|
+
for (const model of [...codex.series, ...codex.models]) {
|
|
87
90
|
expect(agentOfModel(model)).toBe("codex")
|
|
88
91
|
}
|
|
89
|
-
//
|
|
90
|
-
expect(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
// 各グループの既定はそのグループの系列(最新追従)
|
|
93
|
+
expect(claude.series).toContain(claude.default)
|
|
94
|
+
expect(codex.series).toContain(codex.default)
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it("系列(最新追従)を選べる。既定は claude-opus", () => {
|
|
98
|
+
for (const model of ["claude-opus", "gpt-sol"]) {
|
|
99
|
+
expect(aiManifestSchema.parse({ ...valid, model }).model).toBe(model)
|
|
100
|
+
}
|
|
101
|
+
expect(AI_MODEL_GROUPS.claude.default).toBe("claude-opus")
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
it("系列の一覧は runner の対応表と一致し、読み替え先は同じグループの固定 ID", () => {
|
|
105
|
+
// runner は npm 公開パッケージで sdk に依存できず、系列名は二重管理になる。
|
|
106
|
+
// どちらかに足し忘れたらここで落ちる
|
|
107
|
+
expect(Object.keys(MODEL_SERIES).sort()).toEqual(
|
|
108
|
+
[...AI_MODEL_SERIES].sort(),
|
|
95
109
|
)
|
|
110
|
+
for (const group of Object.values(AI_MODEL_GROUPS)) {
|
|
111
|
+
for (const series of group.series) {
|
|
112
|
+
expect(group.models).toContain(MODEL_SERIES[series])
|
|
113
|
+
}
|
|
114
|
+
}
|
|
96
115
|
})
|
|
97
116
|
|
|
98
117
|
it("inputs は key 自由・1件以上(in / instruction の固定構成は廃止)", () => {
|
package/_schemas/ai-manifest.ts
CHANGED
|
@@ -6,12 +6,19 @@ import { jsonSchemaSchema, PORT_KEY_PATTERN } from "./node.js"
|
|
|
6
6
|
// config.json に agent のようなフィールドは持たず、model の接頭辞(claude-* / gpt-*)で決まる
|
|
7
7
|
// (runner の _agents/index.ts と同じ規則。AI実行エージェントの抽象化(Claude CodeとCodex).md)。
|
|
8
8
|
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
9
|
+
// model に書けるのは「系列」か「固定 ID」のどちらか
|
|
10
|
+
// (docs/tasks: AIノードのモデルを常に最新にする(系列指定).md)。
|
|
11
|
+
// - series=系列(claude-opus 等)。その系列の最新モデルで走る。どの実 ID に当たるかは
|
|
12
|
+
// runner の対応表(agent-runner の _agents/models.ts)が実行時に決めるので、新モデルが
|
|
13
|
+
// 出たら対応表を直すだけで全ノードが追従する(各 repo の config.json は触らない)。
|
|
14
|
+
// 系列名の一覧はここと runner の二重管理(ai-manifest.test.ts が一致を検証する)
|
|
15
|
+
// - models=固定 ID。そのバージョンで走り続ける(新モデルで崩れたノードを戻す手段)
|
|
16
|
+
// 系列をまたいでは上がらない(費用はユーザー持ち。Opus 指定が Fable になることは無い)。
|
|
17
|
+
// 既定は Opus の系列:下書き品質が価値の中心
|
|
12
18
|
export const AI_MODEL_GROUPS = {
|
|
13
19
|
claude: {
|
|
14
20
|
name: "Claude Code",
|
|
21
|
+
series: ["claude-fable", "claude-opus", "claude-sonnet", "claude-haiku"],
|
|
15
22
|
models: [
|
|
16
23
|
"claude-fable-5-1",
|
|
17
24
|
"claude-fable-5",
|
|
@@ -20,25 +27,34 @@ export const AI_MODEL_GROUPS = {
|
|
|
20
27
|
"claude-sonnet-5",
|
|
21
28
|
"claude-haiku-4-5",
|
|
22
29
|
],
|
|
23
|
-
default: "claude-opus
|
|
30
|
+
default: "claude-opus",
|
|
24
31
|
},
|
|
32
|
+
// astra=最上位 / sol=主力 / luna=軽量。terra は GPT-5.6 世代にしか無いので系列にしない
|
|
25
33
|
codex: {
|
|
26
34
|
name: "Codex",
|
|
35
|
+
series: ["gpt-astra", "gpt-sol", "gpt-luna"],
|
|
27
36
|
models: [
|
|
37
|
+
"gpt-6.1-sol",
|
|
28
38
|
"gpt-6-astra",
|
|
39
|
+
"gpt-6-sol",
|
|
40
|
+
"gpt-6-luna",
|
|
29
41
|
"gpt-5.6-sol",
|
|
30
42
|
"gpt-5.6-terra",
|
|
31
43
|
"gpt-5.6-luna",
|
|
32
|
-
"gpt-5.5",
|
|
33
44
|
],
|
|
34
|
-
default: "gpt-
|
|
45
|
+
default: "gpt-astra",
|
|
35
46
|
},
|
|
36
47
|
} as const
|
|
37
48
|
export const AI_AGENT_IDS = ["claude", "codex"] as const
|
|
38
49
|
export const aiAgentIdSchema = z.enum(AI_AGENT_IDS)
|
|
39
50
|
export type AiAgentId = z.infer<typeof aiAgentIdSchema>
|
|
40
51
|
|
|
52
|
+
export const AI_MODEL_SERIES = [
|
|
53
|
+
...AI_MODEL_GROUPS.claude.series,
|
|
54
|
+
...AI_MODEL_GROUPS.codex.series,
|
|
55
|
+
] as const
|
|
41
56
|
export const AI_MODELS = [
|
|
57
|
+
...AI_MODEL_SERIES,
|
|
42
58
|
...AI_MODEL_GROUPS.claude.models,
|
|
43
59
|
...AI_MODEL_GROUPS.codex.models,
|
|
44
60
|
] as const
|
|
@@ -2,13 +2,15 @@ import { z } from "zod";
|
|
|
2
2
|
export declare const AI_MODEL_GROUPS: {
|
|
3
3
|
readonly claude: {
|
|
4
4
|
readonly name: "Claude Code";
|
|
5
|
+
readonly series: readonly ["claude-fable", "claude-opus", "claude-sonnet", "claude-haiku"];
|
|
5
6
|
readonly models: readonly ["claude-fable-5-1", "claude-fable-5", "claude-opus-5", "claude-opus-4-8", "claude-sonnet-5", "claude-haiku-4-5"];
|
|
6
|
-
readonly default: "claude-opus
|
|
7
|
+
readonly default: "claude-opus";
|
|
7
8
|
};
|
|
8
9
|
readonly codex: {
|
|
9
10
|
readonly name: "Codex";
|
|
10
|
-
readonly
|
|
11
|
-
readonly
|
|
11
|
+
readonly series: readonly ["gpt-astra", "gpt-sol", "gpt-luna"];
|
|
12
|
+
readonly models: readonly ["gpt-6.1-sol", "gpt-6-astra", "gpt-6-sol", "gpt-6-luna", "gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"];
|
|
13
|
+
readonly default: "gpt-astra";
|
|
12
14
|
};
|
|
13
15
|
};
|
|
14
16
|
export declare const AI_AGENT_IDS: readonly ["claude", "codex"];
|
|
@@ -17,22 +19,32 @@ export declare const aiAgentIdSchema: z.ZodEnum<{
|
|
|
17
19
|
codex: "codex";
|
|
18
20
|
}>;
|
|
19
21
|
export type AiAgentId = z.infer<typeof aiAgentIdSchema>;
|
|
20
|
-
export declare const
|
|
22
|
+
export declare const AI_MODEL_SERIES: readonly ["claude-fable", "claude-opus", "claude-sonnet", "claude-haiku", "gpt-astra", "gpt-sol", "gpt-luna"];
|
|
23
|
+
export declare const AI_MODELS: readonly ["claude-fable", "claude-opus", "claude-sonnet", "claude-haiku", "gpt-astra", "gpt-sol", "gpt-luna", "claude-fable-5-1", "claude-fable-5", "claude-opus-5", "claude-opus-4-8", "claude-sonnet-5", "claude-haiku-4-5", "gpt-6.1-sol", "gpt-6-astra", "gpt-6-sol", "gpt-6-luna", "gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"];
|
|
21
24
|
export declare const aiModelSchema: z.ZodEnum<{
|
|
25
|
+
"claude-fable": "claude-fable";
|
|
26
|
+
"claude-opus": "claude-opus";
|
|
27
|
+
"claude-sonnet": "claude-sonnet";
|
|
28
|
+
"claude-haiku": "claude-haiku";
|
|
22
29
|
"claude-fable-5-1": "claude-fable-5-1";
|
|
23
30
|
"claude-fable-5": "claude-fable-5";
|
|
24
31
|
"claude-opus-5": "claude-opus-5";
|
|
25
32
|
"claude-opus-4-8": "claude-opus-4-8";
|
|
26
33
|
"claude-sonnet-5": "claude-sonnet-5";
|
|
27
34
|
"claude-haiku-4-5": "claude-haiku-4-5";
|
|
35
|
+
"gpt-astra": "gpt-astra";
|
|
36
|
+
"gpt-sol": "gpt-sol";
|
|
37
|
+
"gpt-luna": "gpt-luna";
|
|
38
|
+
"gpt-6.1-sol": "gpt-6.1-sol";
|
|
28
39
|
"gpt-6-astra": "gpt-6-astra";
|
|
40
|
+
"gpt-6-sol": "gpt-6-sol";
|
|
41
|
+
"gpt-6-luna": "gpt-6-luna";
|
|
29
42
|
"gpt-5.6-sol": "gpt-5.6-sol";
|
|
30
43
|
"gpt-5.6-terra": "gpt-5.6-terra";
|
|
31
44
|
"gpt-5.6-luna": "gpt-5.6-luna";
|
|
32
|
-
"gpt-5.5": "gpt-5.5";
|
|
33
45
|
}>;
|
|
34
46
|
export type AiModel = z.infer<typeof aiModelSchema>;
|
|
35
|
-
export declare const DEFAULT_AI_MODEL: "claude-opus
|
|
47
|
+
export declare const DEFAULT_AI_MODEL: "claude-opus";
|
|
36
48
|
export declare const agentOfModel: (model: AiModel) => AiAgentId;
|
|
37
49
|
export declare const aiInputDeclSchema: z.ZodObject<{
|
|
38
50
|
schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
@@ -44,17 +56,26 @@ export declare const aiManifestSchema: z.ZodObject<{
|
|
|
44
56
|
description: z.ZodOptional<z.ZodString>;
|
|
45
57
|
prompt: z.ZodString;
|
|
46
58
|
model: z.ZodDefault<z.ZodEnum<{
|
|
59
|
+
"claude-fable": "claude-fable";
|
|
60
|
+
"claude-opus": "claude-opus";
|
|
61
|
+
"claude-sonnet": "claude-sonnet";
|
|
62
|
+
"claude-haiku": "claude-haiku";
|
|
47
63
|
"claude-fable-5-1": "claude-fable-5-1";
|
|
48
64
|
"claude-fable-5": "claude-fable-5";
|
|
49
65
|
"claude-opus-5": "claude-opus-5";
|
|
50
66
|
"claude-opus-4-8": "claude-opus-4-8";
|
|
51
67
|
"claude-sonnet-5": "claude-sonnet-5";
|
|
52
68
|
"claude-haiku-4-5": "claude-haiku-4-5";
|
|
69
|
+
"gpt-astra": "gpt-astra";
|
|
70
|
+
"gpt-sol": "gpt-sol";
|
|
71
|
+
"gpt-luna": "gpt-luna";
|
|
72
|
+
"gpt-6.1-sol": "gpt-6.1-sol";
|
|
53
73
|
"gpt-6-astra": "gpt-6-astra";
|
|
74
|
+
"gpt-6-sol": "gpt-6-sol";
|
|
75
|
+
"gpt-6-luna": "gpt-6-luna";
|
|
54
76
|
"gpt-5.6-sol": "gpt-5.6-sol";
|
|
55
77
|
"gpt-5.6-terra": "gpt-5.6-terra";
|
|
56
78
|
"gpt-5.6-luna": "gpt-5.6-luna";
|
|
57
|
-
"gpt-5.5": "gpt-5.5";
|
|
58
79
|
}>>;
|
|
59
80
|
auth_mode: z.ZodOptional<z.ZodEnum<{
|
|
60
81
|
subscription: "subscription";
|
|
@@ -5,12 +5,19 @@ import { jsonSchemaSchema, PORT_KEY_PATTERN } from "./node.js";
|
|
|
5
5
|
// config.json に agent のようなフィールドは持たず、model の接頭辞(claude-* / gpt-*)で決まる
|
|
6
6
|
// (runner の _agents/index.ts と同じ規則。AI実行エージェントの抽象化(Claude CodeとCodex).md)。
|
|
7
7
|
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
8
|
+
// model に書けるのは「系列」か「固定 ID」のどちらか
|
|
9
|
+
// (docs/tasks: AIノードのモデルを常に最新にする(系列指定).md)。
|
|
10
|
+
// - series=系列(claude-opus 等)。その系列の最新モデルで走る。どの実 ID に当たるかは
|
|
11
|
+
// runner の対応表(agent-runner の _agents/models.ts)が実行時に決めるので、新モデルが
|
|
12
|
+
// 出たら対応表を直すだけで全ノードが追従する(各 repo の config.json は触らない)。
|
|
13
|
+
// 系列名の一覧はここと runner の二重管理(ai-manifest.test.ts が一致を検証する)
|
|
14
|
+
// - models=固定 ID。そのバージョンで走り続ける(新モデルで崩れたノードを戻す手段)
|
|
15
|
+
// 系列をまたいでは上がらない(費用はユーザー持ち。Opus 指定が Fable になることは無い)。
|
|
16
|
+
// 既定は Opus の系列:下書き品質が価値の中心
|
|
11
17
|
export const AI_MODEL_GROUPS = {
|
|
12
18
|
claude: {
|
|
13
19
|
name: "Claude Code",
|
|
20
|
+
series: ["claude-fable", "claude-opus", "claude-sonnet", "claude-haiku"],
|
|
14
21
|
models: [
|
|
15
22
|
"claude-fable-5-1",
|
|
16
23
|
"claude-fable-5",
|
|
@@ -19,23 +26,32 @@ export const AI_MODEL_GROUPS = {
|
|
|
19
26
|
"claude-sonnet-5",
|
|
20
27
|
"claude-haiku-4-5",
|
|
21
28
|
],
|
|
22
|
-
default: "claude-opus
|
|
29
|
+
default: "claude-opus",
|
|
23
30
|
},
|
|
31
|
+
// astra=最上位 / sol=主力 / luna=軽量。terra は GPT-5.6 世代にしか無いので系列にしない
|
|
24
32
|
codex: {
|
|
25
33
|
name: "Codex",
|
|
34
|
+
series: ["gpt-astra", "gpt-sol", "gpt-luna"],
|
|
26
35
|
models: [
|
|
36
|
+
"gpt-6.1-sol",
|
|
27
37
|
"gpt-6-astra",
|
|
38
|
+
"gpt-6-sol",
|
|
39
|
+
"gpt-6-luna",
|
|
28
40
|
"gpt-5.6-sol",
|
|
29
41
|
"gpt-5.6-terra",
|
|
30
42
|
"gpt-5.6-luna",
|
|
31
|
-
"gpt-5.5",
|
|
32
43
|
],
|
|
33
|
-
default: "gpt-
|
|
44
|
+
default: "gpt-astra",
|
|
34
45
|
},
|
|
35
46
|
};
|
|
36
47
|
export const AI_AGENT_IDS = ["claude", "codex"];
|
|
37
48
|
export const aiAgentIdSchema = z.enum(AI_AGENT_IDS);
|
|
49
|
+
export const AI_MODEL_SERIES = [
|
|
50
|
+
...AI_MODEL_GROUPS.claude.series,
|
|
51
|
+
...AI_MODEL_GROUPS.codex.series,
|
|
52
|
+
];
|
|
38
53
|
export const AI_MODELS = [
|
|
54
|
+
...AI_MODEL_SERIES,
|
|
39
55
|
...AI_MODEL_GROUPS.claude.models,
|
|
40
56
|
...AI_MODEL_GROUPS.codex.models,
|
|
41
57
|
];
|
package/docs/development.md
CHANGED
|
@@ -49,7 +49,9 @@ skills/<dir>/ # AI ノードが参照する skill(SKILL.md)
|
|
|
49
49
|
- `config.json` — 正は `_schemas/ai-manifest.ts`。`prompt`(必須)・`model`・
|
|
50
50
|
`skills`(トップレベル `skills/` 配下のディレクトリ名)・`env`・`inputs` / `outputs`
|
|
51
51
|
- `model` が実行主体を決める:`claude-*` は Claude Code、`gpt-*` は Codex で走る
|
|
52
|
-
(選択肢は `AI_MODEL_GROUPS
|
|
52
|
+
(選択肢は `AI_MODEL_GROUPS`)。値は系列(`claude-opus`・`gpt-sol` 等。その系列の最新モデルで
|
|
53
|
+
走り、新モデルが出れば自動で切り替わる)か、固定 ID(`claude-opus-5` 等。そのバージョンで
|
|
54
|
+
走り続ける)。省略時は `claude-opus`。認証は repo の Actions secrets に置く:Claude Code は
|
|
53
55
|
`ANTHROPIC_API_KEY`(または `CLAUDE_CODE_OAUTH_TOKEN`)、Codex は明示的な `auth_mode` と対応する認証情報(下記「Codex の認証方式」参照)
|
|
54
56
|
(`env` に宣言しなくても渡される)
|
|
55
57
|
- `inputs` は1件以上・key 自由。値は `{ "schema": <JSON Schema>, "resume": true }` の形
|
|
@@ -91,7 +93,7 @@ Codex の AI 定義は `auth_mode` を必ず指定する。エディタの「認
|
|
|
91
93
|
```json
|
|
92
94
|
{
|
|
93
95
|
"prompt": "入力に返信してください",
|
|
94
|
-
"model": "gpt-
|
|
96
|
+
"model": "gpt-luna",
|
|
95
97
|
"auth_mode": "subscription",
|
|
96
98
|
"inputs": { "in": { "schema": {} } },
|
|
97
99
|
"outputs": { "main": { "type": "string" } }
|