@mawaru/sdk 0.5.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 (43) hide show
  1. package/_schemas/ai-manifest.test.ts +135 -0
  2. package/_schemas/ai-manifest.ts +76 -0
  3. package/_schemas/graph.test.ts +872 -0
  4. package/_schemas/graph.ts +439 -0
  5. package/_schemas/hook-manifest.test.ts +45 -0
  6. package/_schemas/hook-manifest.ts +25 -0
  7. package/_schemas/node.test.ts +76 -0
  8. package/_schemas/node.ts +54 -0
  9. package/_schemas/port-spec.test.ts +657 -0
  10. package/_schemas/port-spec.ts +405 -0
  11. package/_schemas/program-manifest.test.ts +126 -0
  12. package/_schemas/program-manifest.ts +43 -0
  13. package/dist/_schemas/ai-manifest.d.ts +25 -0
  14. package/dist/_schemas/ai-manifest.js +67 -0
  15. package/dist/_schemas/graph.d.ts +226 -0
  16. package/dist/_schemas/graph.js +372 -0
  17. package/dist/_schemas/hook-manifest.d.ts +18 -0
  18. package/dist/_schemas/hook-manifest.js +21 -0
  19. package/dist/_schemas/node.d.ts +47 -0
  20. package/dist/_schemas/node.js +42 -0
  21. package/dist/_schemas/port-spec.d.ts +62 -0
  22. package/dist/_schemas/port-spec.js +336 -0
  23. package/dist/_schemas/program-manifest.d.ts +10 -0
  24. package/dist/_schemas/program-manifest.js +41 -0
  25. package/dist/cli.d.ts +2 -0
  26. package/dist/cli.js +54 -0
  27. package/dist/index.d.ts +6 -0
  28. package/dist/index.js +9 -0
  29. package/dist/init.d.ts +6 -0
  30. package/dist/init.js +81 -0
  31. package/dist/typegen.d.ts +14 -0
  32. package/dist/typegen.js +206 -0
  33. package/dist/validate.d.ts +6 -0
  34. package/dist/validate.js +130 -0
  35. package/docs/development.md +59 -0
  36. package/index.ts +9 -0
  37. package/package.json +47 -0
  38. package/skills/create-loop/SKILL.md +87 -0
  39. package/templates/CLAUDE.md +23 -0
  40. package/templates/README.md +12 -0
  41. package/templates/echo/config.json +23 -0
  42. package/templates/echo/main.ts +4 -0
  43. package/templates/mawaru-runner.yml +71 -0
@@ -0,0 +1,23 @@
1
+ # mawaru 実行 repo
2
+
3
+ この repo は mawaru(loop=回路で業務を自動化するサービス)の**実行リポジトリ**。
4
+ ここにはユーザーのカスタマイズ(Program / AI ノードの実装)とその履歴だけを置き、
5
+ 実行基盤の実態は npm パッケージ側にある(repo に焼くものは最小・本体は npm で解決)。
6
+
7
+ ## 構成
8
+
9
+ - `nodes/program/<dir>/` — Program ノード(`config.json` + `main.ts`)。`main.ts` は
10
+ `run(input, ctx)` を export し、戻り値は `{ <出口ポートのkey>: <データ> }` の単一キー封筒
11
+ - `nodes/ai/<dir>/` — AI ノード定義(`config.json`。prompt / model / skills / 入出力スキーマ / env)
12
+ - `.github/workflows/mawaru-runner.yml` — mawaru 所有の実行シム。**編集しない**
13
+ (`npx @mawaru/sdk init` が再生成する)
14
+
15
+ ## 開発の進め方(AI エージェント向け)
16
+
17
+ loop / node 開発にとりかかる前に、必ず `node_modules/@mawaru/sdk/docs/` の開発ドキュメントを読むこと。
18
+ 契約(config.json・graph API)の正は `node_modules/@mawaru/sdk/_schemas/` の Zod スキーマ
19
+ (日本語コメント付き)。ドキュメントとスキーマが食い違ったらスキーマが正。
20
+
21
+ - 型生成:`npx mawaru typegen`(config.json → `types.d.ts`)
22
+ - 規約検証:`npx mawaru validate`(CI 向け。error で exit 1)
23
+ - ループの作成・更新:`.claude/skills/create-loop` スキルに従う
@@ -0,0 +1,12 @@
1
+ # mawaru 実行リポジトリ
2
+
3
+ この repo は [mawaru](https://mawaru.ai) の実行リポジトリです。loop(回路)につないだ
4
+ Program / AI ノードの実装をここに置き、実行は mawaru が GitHub Actions
5
+ (`.github/workflows/mawaru-runner.yml`)経由で起動します。
6
+
7
+ - `nodes/program/<dir>/` — Program ノードの実装(`config.json` + `main.ts`)
8
+ - `nodes/ai/<dir>/` — AI ノードの定義(`config.json`)
9
+ - `mawaru-runner.yml` は mawaru 所有です。編集せず、更新は `npx @mawaru/sdk init` の再実行で行ってください
10
+
11
+ 開発の詳細は `CLAUDE.md`(AI エージェント向けの入口)と
12
+ `node_modules/@mawaru/sdk/docs/` を参照してください。
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "エコー",
3
+ "description": "入力をそのまま出力するサンプル Program。動作確認用",
4
+ "env": [],
5
+ "inputs": {
6
+ "in": {
7
+ "type": "object",
8
+ "properties": {
9
+ "message": { "type": "string", "description": "そのまま返す文字列" }
10
+ },
11
+ "required": ["message"]
12
+ }
13
+ },
14
+ "outputs": {
15
+ "main": {
16
+ "type": "object",
17
+ "properties": {
18
+ "message": { "type": "string" }
19
+ },
20
+ "required": ["message"]
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,4 @@
1
+ // サンプル handler:入力をそのまま main 出口へ返す。
2
+ // 戻り値は { <出口ポートのkey>: <データ> } の単一キー封筒(出口の選別を戻り値自身が運ぶ)。
3
+ // 入出力の形は同じディレクトリの config.json が正(`npx mawaru typegen` で型も生成できる)
4
+ export const run = async (input: { message: string }) => ({ main: input })
@@ -0,0 +1,71 @@
1
+ # mawaru の汎用ランナー(mawaru が所有。`npx @mawaru/sdk init` が生成・再生成する。編集しない)。
2
+ # デフォルトブランチに .github/workflows/mawaru-runner.yml として置くこと
3
+ # (repository_dispatch はデフォルトブランチの workflow 定義でしか起動しない)。
4
+ #
5
+ # 実行の分岐(handler=Program / agent=AI)は yml では持たず、ラッパー
6
+ # (client_payload.runner が npm 指定。既定 @mawaru/agent-runner)が payload.json を読んで
7
+ # 自分で分岐する。ラッパーは config.json(nodes/program/<dir>/・nodes/ai/<dir>/)の env 宣言で
8
+ # secrets を絞り、結果を検証して end_url へ「自分で」報告する。
9
+ # Program handler は main.ts が run(input, ctx) を export し、戻り値={ <出口ポートのkey>: <データ> }
10
+ # の単一キー封筒(出口の選別を戻り値自身が運ぶ)か "pending"(完了保留)で結末を表す。
11
+ # ファイル I/O(input.json / output.json / pending.json)はラッパーが肩代わりする
12
+ # (run を export しない旧スクリプト規約も後方互換で動く)。
13
+ # client_payload.step_id は冪等キー:is_irreversible な処理は step_id で二重実行を弾くこと。
14
+ name: mawaru-runner
15
+ # title=「{loop名}#{run連番}」(backend が payload で配る。無い旧 payload は従来表記)
16
+ run-name: "${{ github.event.client_payload.title || format('mawaru {0}', github.event.client_payload.step_id) }}"
17
+ on:
18
+ repository_dispatch:
19
+ types: [mawaru-run]
20
+ jobs:
21
+ run:
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ # 自分の Actions run の URL を mawaru に自己申告する(画面のリンク表示用)。
25
+ # repository_dispatch は起動した run の ID を返さないため、URL を知っているのは
26
+ # run の中だけ。checkout より前に置く=以降のどの失敗でもログへ飛べる。
27
+ # 表示専用なので失敗しても実行は続ける(continue-on-error)。
28
+ # 旧 backend からの payload(resource_url 無し)では if でスキップ
29
+ - name: report run url
30
+ if: ${{ github.event.client_payload.resource_url }}
31
+ continue-on-error: true
32
+ run: |
33
+ curl -sf --retry 2 --retry-connrefused --retry-delay 2 \
34
+ -X PATCH "${{ github.event.client_payload.resource_url }}" \
35
+ -H "content-type: application/json" \
36
+ -H "x-api-key: ${{ github.event.client_payload.api_key }}" \
37
+ -d "{\"action_url\": \"${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}\"}"
38
+
39
+ - uses: actions/checkout@v7
40
+ with: { ref: "${{ github.event.client_payload.ref || github.ref }}" }
41
+ - uses: actions/setup-node@v7
42
+ with: { node-version: 22 }
43
+
44
+ # handler(Program)の依存だけ npm ci する(agent はラッパー自身を npx が入れる)
45
+ - name: install deps
46
+ if: ${{ github.event.client_payload.handler }}
47
+ run: npm ci
48
+
49
+ - name: write payload.json
50
+ run: echo '${{ toJSON(github.event.client_payload) }}' > payload.json
51
+ # SECRETS_JSON は全 repo secrets を注入するが、子プロセス(handler / Claude Code)には
52
+ # ラッパーが config.json の env 宣言分だけを展開して渡す(最小権限)
53
+ # 実行時間の上限はラッパーが config.json の timeout_minutes(既定:program 30分 /
54
+ # ai 360分)で締めて理由付きの failed を報告する。ここでは縛らず、暴走の最終
55
+ # backstop は GHA のジョブ上限(6時間)に任せる。step の停止は mawaru の run キャンセル
56
+ - name: run
57
+ id: run
58
+ env: { SECRETS_JSON: "${{ toJSON(secrets) }}" }
59
+ run: npx --yes "${{ github.event.client_payload.runner }}" payload.json
60
+
61
+ # ラッパー自体が起動できなかった事故(npx 失敗等)の backstop。
62
+ # ラッパーが報告済みで exit 1 したケースは /end 側の条件付き UPDATE が no-op にする。
63
+ # failure() が無いと暗黙の success() が付いて失敗後に発火しない(GitHub Actions の if 仕様)
64
+ - name: report failure (backstop)
65
+ if: ${{ failure() && steps.run.outcome == 'failure' }}
66
+ run: |
67
+ curl -sf --retry 5 --retry-connrefused --retry-delay 2 \
68
+ -X POST "${{ github.event.client_payload.end_url }}" \
69
+ -H "content-type: application/json" \
70
+ -H "x-api-key: ${{ github.event.client_payload.api_key }}" \
71
+ -d '{"status": "failed", "error": "runner failed in GitHub Actions"}'