{"_id":"@scholai/openclaw-scholai","_rev":"33-cb91cc523d0f3855d0f6b0fc46c7a721","name":"@scholai/openclaw-scholai","dist-tags":{"latest":"0.1.20"},"versions":{"0.1.1":{"name":"@scholai/openclaw-scholai","version":"0.1.1","_id":"@scholai/openclaw-scholai@0.1.1","maintainers":[{"name":"sean521","email":"shaolong521@gmail.com"}],"dist":{"shasum":"cd78be94430aea47a67e6a61dc908ab7e51b0d4d","tarball":"https://registry.npmjs.org/@scholai/openclaw-scholai/-/openclaw-scholai-0.1.1.tgz","fileCount":11,"integrity":"sha512-+Di9Vc5PHL3ggWszFguVVkaJ5/bJSQjUE03l5CLB+Jmm0S3kBmzr6DjgiPY2VN6goNMpR4tSSS1NWQI5qwhfpw==","signatures":[{"sig":"MEUCIQCbFNh0SHmIFyzWirx74FdwffG1YUyZZKgrHnofqW/OLwIgdXGpmaxSIRTNbs3pRqhTmxLebitszDAtyb8oS3+VFm8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35456},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}}},"gitHead":"579c492b8c02a344bc73dc73756a1d7c10236ada","scripts":{"test":"vitest run","build":"tsdown","clean":"rm -rf dist","format":"prettier --write src/**/*.ts index.ts tests/**/*.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check src/**/*.ts index.ts tests/**/*.ts"},"_npmUser":{"name":"sean521","email":"shaolong521@gmail.com"},"openclaw":{"install":{"npmSpec":"@scholai/openclaw-scholai","localPath":"extensions/scholai","defaultChoice":"npm"},"extensions":["./dist/index.mjs"]},"deprecated":"early test release, please upgrade to latest 0.1.x","_npmVersion":"11.12.1","description":"OpenClaw scholai courseware plugin (MVP: article via lobster pipeline)","directories":{},"_nodeVersion":"25.9.0","dependencies":{"axios":"^1.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.21.4","vitest":"^4.1.1","openclaw":"^2026.4.9","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3"},"peerDependencies":{"openclaw":">=2026.3.22"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scholai_0.1.1_1777967383172_0.03251574942507807","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@scholai/openclaw-scholai","version":"0.1.2","_id":"@scholai/openclaw-scholai@0.1.2","maintainers":[{"name":"sean521","email":"shaolong521@gmail.com"}],"dist":{"shasum":"414e21467dcd9440e38a8ca8fbc07afb6556bd8b","tarball":"https://registry.npmjs.org/@scholai/openclaw-scholai/-/openclaw-scholai-0.1.2.tgz","fileCount":13,"integrity":"sha512-G+4RUnqGMvNA2CQf9erhPyiGQ9W7ADZz4R7u6XIMYBiS/pcvgyyIDIj3gcWqWt/vbbhT5NHJ+55fOgZkRMB5+Q==","signatures":[{"sig":"MEUCIGqctyEY7ExAq8ReMOF7pf0sjtJOvG/85Ee7zZgoGVB3AiEAuXr1ZF90tko7RiDyIutAlBBmlgUfI3ZiTwIH6qQS7sY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44668},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}}},"gitHead":"8e6ef141fdde796c783e1a02088be0b7a470a8a2","scripts":{"test":"vitest run","build":"tsdown","clean":"rm -rf dist","format":"prettier --write src/**/*.ts index.ts tests/**/*.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check src/**/*.ts index.ts tests/**/*.ts"},"_npmUser":{"name":"sean521","email":"shaolong521@gmail.com"},"openclaw":{"install":{"npmSpec":"@scholai/openclaw-scholai","localPath":"extensions/scholai","defaultChoice":"npm"},"extensions":["./dist/index.mjs"]},"deprecated":"early test release, please upgrade to latest 0.1.x","_npmVersion":"11.12.1","description":"OpenClaw scholai courseware plugin (MVP: article via lobster pipeline)","directories":{},"_nodeVersion":"25.9.0","dependencies":{"axios":"^1.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.21.4","vitest":"^4.1.1","openclaw":"^2026.4.9","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3"},"peerDependencies":{"openclaw":">=2026.3.22"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scholai_0.1.2_1778292358834_0.30868373322047216","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@scholai/openclaw-scholai","version":"0.1.3","_id":"@scholai/openclaw-scholai@0.1.3","maintainers":[{"name":"sean521","email":"shaolong521@gmail.com"}],"dist":{"shasum":"045f3da3a397f890f75cab6761ae789815121efb","tarball":"https://registry.npmjs.org/@scholai/openclaw-scholai/-/openclaw-scholai-0.1.3.tgz","fileCount":13,"integrity":"sha512-rZZgRIueFW8UjTxhUHcNSg1HZezyM904LyV8lPiLmIpqa7KJIqGcLYJwrR8jI/9TkP5SBgoT0z9tidnPJMDpcA==","signatures":[{"sig":"MEQCIAziOG5morOqHSKC2aOBUjcaLDKal6swbb4nh+QSMbWcAiB6hfnaDUveqc9nI3una4gvsv9KA2OfAmzA156XdTOV7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49991},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}}},"gitHead":"33e0d28371360e9870c1afc782326b7e259454d5","scripts":{"test":"vitest run","build":"tsdown","clean":"rm -rf dist","format":"prettier --write src/**/*.ts index.ts tests/**/*.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check src/**/*.ts index.ts tests/**/*.ts"},"_npmUser":{"name":"sean521","email":"shaolong521@gmail.com"},"openclaw":{"install":{"npmSpec":"@scholai/openclaw-scholai","localPath":"extensions/scholai","defaultChoice":"npm"},"extensions":["./dist/index.mjs"]},"deprecated":"early test release, please upgrade to latest 0.1.x","_npmVersion":"10.9.7","description":"OpenClaw scholai courseware plugin (MVP: article via lobster pipeline)","directories":{},"_nodeVersion":"22.22.2","dependencies":{"axios":"^1.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.21.4","vitest":"^4.1.1","openclaw":"^2026.4.9","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3"},"peerDependencies":{"openclaw":">=2026.3.22"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scholai_0.1.3_1778318638532_0.3471009115421959","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@scholai/openclaw-scholai","version":"0.1.4","_id":"@scholai/openclaw-scholai@0.1.4","maintainers":[{"name":"sean521","email":"shaolong521@gmail.com"}],"dist":{"shasum":"1aabc44c8014982d016b817abc86be8637c6c830","tarball":"https://registry.npmjs.org/@scholai/openclaw-scholai/-/openclaw-scholai-0.1.4.tgz","fileCount":13,"integrity":"sha512-B0GG+Bku3QzmK0paTvEOBs+t4jqDq/nGpKAEuOFTkvbTYgDNFO4vWNeLSM3ciWZSHYcwlyfVBeCqk+2doB4dHg==","signatures":[{"sig":"MEUCIAjpFlPtSZLNP5pYIZ+lIAKAM4RmW1j3pYHUrZo09c4fAiEA8unnZuiTS1j/Gw4A/kTI4bQEKNABJ4m9I8H6hZAkERU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50989},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}}},"gitHead":"8391630ee630415930ee73dec765c11e07e192ee","scripts":{"test":"vitest run","build":"tsdown","clean":"rm -rf dist","format":"prettier --write src/**/*.ts index.ts tests/**/*.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check src/**/*.ts index.ts tests/**/*.ts"},"_npmUser":{"name":"sean521","email":"shaolong521@gmail.com"},"openclaw":{"install":{"npmSpec":"@scholai/openclaw-scholai","localPath":"extensions/scholai","defaultChoice":"npm"},"extensions":["./dist/index.mjs"]},"deprecated":"early test release, please upgrade to latest 0.1.x","_npmVersion":"11.12.1","description":"OpenClaw scholai courseware plugin (MVP: article via lobster pipeline)","directories":{},"_nodeVersion":"25.9.0","dependencies":{"axios":"^1.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.21.4","vitest":"^4.1.1","openclaw":"^2026.4.9","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3"},"peerDependencies":{"openclaw":">=2026.3.22"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scholai_0.1.4_1778324560992_0.9708893808336636","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@scholai/openclaw-scholai","version":"0.1.16","_id":"@scholai/openclaw-scholai@0.1.16","maintainers":[{"name":"sean521","email":"shaolong521@gmail.com"}],"dist":{"shasum":"9959eba2a23409f42f2a4a12318ed564709e98e5","tarball":"https://registry.npmjs.org/@scholai/openclaw-scholai/-/openclaw-scholai-0.1.16.tgz","fileCount":21,"integrity":"sha512-UoYorQ4QDNVqFKgxqAEsydoGaiVzzcEDS4LJGMTJmaGbW2yvxNcND8ZDwn420+uHPVibiziUW8wyoziz2I0+UA==","signatures":[{"sig":"MEYCIQDm8BCx2aAZLv4v/8O+TMvChlHlqlFb8QxUR304cVsqgQIhAKGYVSck2+TMYHleTq5lEa7OHXyNR6UWA5JVMZEYR23v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108074},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}}},"gitHead":"c979c2545aef5b7b88638be29a941a8d6f38378f","scripts":{"test":"vitest run","build":"tsdown","clean":"rm -rf dist","format":"prettier --write src/**/*.ts index.ts tests/**/*.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check src/**/*.ts index.ts tests/**/*.ts"},"_npmUser":{"name":"sean521","email":"shaolong521@gmail.com"},"openclaw":{"install":{"npmSpec":"@scholai/openclaw-scholai","localPath":"extensions/scholai","defaultChoice":"npm"},"extensions":["./dist/index.mjs"]},"_npmVersion":"11.12.1","description":"OpenClaw scholai courseware plugin (MVP: article via lobster pipeline)","directories":{},"_nodeVersion":"25.9.0","dependencies":{"axios":"^1.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.21.4","vitest":"^4.1.1","openclaw":"^2026.4.9","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3"},"peerDependencies":{"openclaw":">=2026.3.22"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scholai_0.1.16_1778750668122_0.1512827840276998","host":"s3://npm-registry-packages-npm-production"},"deprecated":"开发期旧版本，已弃用，请升级到最新版"},"0.1.17":{"name":"@scholai/openclaw-scholai","version":"0.1.17","_id":"@scholai/openclaw-scholai@0.1.17","maintainers":[{"name":"sean521","email":"shaolong521@gmail.com"}],"dist":{"shasum":"cfdbdb60bd72036390c22a6ae917327a331dd937","tarball":"https://registry.npmjs.org/@scholai/openclaw-scholai/-/openclaw-scholai-0.1.17.tgz","fileCount":21,"integrity":"sha512-6ERCe5jOiK6sjMGJRuwm0gnzmFCj3HBsFXJomR6yu6rT649UzBnTYU3fNvh01Hqet77hfPDutAUuhRiE5WUtkw==","signatures":[{"sig":"MEYCIQC1bgDUlg5MszLPz0MpK32xYmNxlpaQir3ndPK2Ut5sVgIhALB3YJ6f8KtqexXCE8CVQiwcpvhy1IncyRwqvx6wrY31","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112976},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}}},"gitHead":"9c336834ffc718ff7f2b894cbbcf40372968d752","scripts":{"test":"vitest run","build":"tsdown","clean":"rm -rf dist","format":"prettier --write src/**/*.ts index.ts tests/**/*.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check src/**/*.ts index.ts tests/**/*.ts"},"_npmUser":{"name":"sean521","email":"shaolong521@gmail.com"},"openclaw":{"install":{"npmSpec":"@scholai/openclaw-scholai","localPath":"extensions/scholai","defaultChoice":"npm"},"extensions":["./dist/index.mjs"]},"deprecated":"开发期旧版本，已弃用，请升级到最新版","_npmVersion":"11.12.1","description":"OpenClaw scholai courseware plugin (MVP: article via lobster pipeline)","directories":{},"_nodeVersion":"25.9.0","dependencies":{"axios":"^1.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.21.4","vitest":"^4.1.1","openclaw":"^2026.4.9","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3"},"peerDependencies":{"openclaw":">=2026.3.22"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scholai_0.1.17_1778837795932_0.18889226049774033","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@scholai/openclaw-scholai","version":"0.1.18","_id":"@scholai/openclaw-scholai@0.1.18","maintainers":[{"name":"sean521","email":"shaolong521@gmail.com"}],"dist":{"shasum":"e86c4ae8e8d9a5ea284be986ef111b8093ee5c1a","tarball":"https://registry.npmjs.org/@scholai/openclaw-scholai/-/openclaw-scholai-0.1.18.tgz","fileCount":21,"integrity":"sha512-qYESXT10d2lmkL69lyzcHLlGay+L0wU53ZNm6Dl7a1N92gnuU2JrbCHGVCTMTFdM28WLVez+H0SXXG7rqVoW0g==","signatures":[{"sig":"MEQCIENldm6BbJPiot32PbqmHj3HkUhLjj3kguFLy7w+wnpBAiAl6yubf+0e52BGpER/X17b35mMFFyAieriwjCkRO98Qg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111961},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}}},"gitHead":"28b82c9a607302e301e947a283436d1dd871a58d","scripts":{"test":"vitest run","build":"tsdown","clean":"rm -rf dist","format":"prettier --write src/**/*.ts index.ts tests/**/*.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check src/**/*.ts index.ts tests/**/*.ts"},"_npmUser":{"name":"sean521","email":"shaolong521@gmail.com"},"openclaw":{"install":{"npmSpec":"@scholai/openclaw-scholai","localPath":"extensions/scholai","defaultChoice":"npm"},"extensions":["./dist/index.mjs"]},"deprecated":"开发期旧版本，已弃用，请升级到最新版","_npmVersion":"11.12.1","description":"OpenClaw scholai courseware plugin (MVP: article via lobster pipeline)","directories":{},"_nodeVersion":"25.9.0","dependencies":{"axios":"^1.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.21.4","vitest":"^4.1.1","openclaw":"^2026.4.9","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3"},"peerDependencies":{"openclaw":">=2026.3.22"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scholai_0.1.18_1779363072414_0.33744918273559565","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@scholai/openclaw-scholai","version":"0.1.19","_id":"@scholai/openclaw-scholai@0.1.19","maintainers":[{"name":"sean521","email":"shaolong521@gmail.com"}],"dist":{"shasum":"8e2353ce280023db14937632bc81d2c96a109576","tarball":"https://registry.npmjs.org/@scholai/openclaw-scholai/-/openclaw-scholai-0.1.19.tgz","fileCount":23,"integrity":"sha512-wU//En1sZ4gsy7cw7CCXKvu7WgvM3R0ZmsN5wGSUe6ngnxAjHpSoqZ5Gm60Qf2AyYZsDgItgn+4Qqx+Z8fg1ow==","signatures":[{"sig":"MEUCIDFs7rbsX6F32xE+GSEn14nT8MyefAtJWdRz1yP4wR9XAiEA64U2PyQIwp3TNHdzmuPmuWndnkrV+dHUn3STvWjIIEw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147631},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}}},"gitHead":"7a632fdf5c3432fd35e849f5aa5ae364edb3019b","scripts":{"test":"vitest run","build":"tsdown","clean":"rm -rf dist","format":"prettier --write src/**/*.ts index.ts tests/**/*.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check src/**/*.ts index.ts tests/**/*.ts"},"_npmUser":{"name":"sean521","email":"shaolong521@gmail.com"},"openclaw":{"install":{"npmSpec":"@scholai/openclaw-scholai","localPath":"extensions/scholai","defaultChoice":"npm"},"extensions":["./dist/index.mjs"]},"_npmVersion":"11.12.1","description":"OpenClaw scholai courseware plugin (MVP: article via lobster pipeline)","directories":{},"_nodeVersion":"25.9.0","dependencies":{"axios":"^1.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.21.4","vitest":"^4.1.1","openclaw":"^2026.4.9","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3"},"peerDependencies":{"openclaw":">=2026.3.22"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scholai_0.1.19_1779695908037_0.8961362578751666","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"@scholai/openclaw-scholai","version":"0.1.20","_id":"@scholai/openclaw-scholai@0.1.20","maintainers":[{"name":"sean521","email":"shaolong521@gmail.com"}],"dist":{"shasum":"e58f9ec881abad5bc86f2d1bc2bd5aa46ced0d28","tarball":"https://registry.npmjs.org/@scholai/openclaw-scholai/-/openclaw-scholai-0.1.20.tgz","fileCount":23,"integrity":"sha512-LCXRrE9nNb2T2nqK9v+qvkoFUAQWbUs1nH0/JS1Pb1CoX8U6PmG4rZo1Gw6emnwr1N4igW5C/U2vScL/nnZ2aA==","signatures":[{"sig":"MEUCIGKLuYc3pef8SYAAa+jVBT9O4E7ixXSnWUNxnBMmxxYkAiEAzbZxzN67ApPs71+VE/8qKof74GlKlR/N3VK/k5ndSYY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148166},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}}},"gitHead":"87a47d2cfd67060e65547f28496fa7a28031416b","scripts":{"test":"vitest run","build":"tsdown","clean":"rm -rf dist","format":"prettier --write src/**/*.ts index.ts tests/**/*.ts","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check src/**/*.ts index.ts tests/**/*.ts"},"_npmUser":{"name":"sean521","email":"shaolong521@gmail.com"},"openclaw":{"install":{"npmSpec":"@scholai/openclaw-scholai","localPath":"extensions/scholai","defaultChoice":"npm"},"extensions":["./dist/index.mjs"]},"_npmVersion":"11.12.1","description":"OpenClaw scholai courseware plugin (MVP: article via lobster pipeline)","directories":{},"_nodeVersion":"25.9.0","dependencies":{"axios":"^1.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.21.4","vitest":"^4.1.1","openclaw":"^2026.4.9","prettier":"^3.8.1","typescript":"^5.9.3","@types/node":"^25.2.3"},"peerDependencies":{"openclaw":">=2026.3.22"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scholai_0.1.20_1779790708453_0.174871020600458","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-05-05T07:49:43.112Z","modified":"2026-05-26T10:29:41.048Z","0.1.1":"2026-05-05T07:49:43.350Z","0.1.2":"2026-05-09T02:05:58.986Z","0.1.3":"2026-05-09T09:23:58.666Z","0.1.4":"2026-05-09T11:02:41.133Z","0.1.5":"2026-05-11T02:41:28.283Z","0.1.6":"2026-05-11T10:06:39.312Z","0.1.7":"2026-05-12T09:07:55.137Z","0.1.8":"2026-05-12T13:52:20.994Z","0.1.10":"2026-05-13T03:41:02.263Z","0.1.11":"2026-05-13T04:09:08.805Z","0.1.12":"2026-05-13T04:30:22.024Z","0.1.13":"2026-05-13T07:48:23.496Z","0.1.14":"2026-05-13T08:53:39.270Z","0.1.15":"2026-05-14T02:55:21.356Z","0.1.16":"2026-05-14T09:24:28.254Z","0.1.17":"2026-05-15T09:36:36.076Z","0.1.18":"2026-05-21T11:31:12.564Z","0.1.19":"2026-05-25T07:58:28.230Z","0.1.20":"2026-05-26T10:18:28.600Z"},"description":"OpenClaw scholai courseware plugin (MVP: article via lobster pipeline)","maintainers":[{"name":"sean521","email":"shaolong521@gmail.com"}],"readme":"# @scholai/openclaw-scholai\n\nOpenClaw plugin providing scholai courseware generation pipelines as a skill.\n\n后台异步执行的课件生成管线：用户发命令 → 主会话立即返回 → 后台 subagent 通过 Lobster\n顺序跑 Python CLI atom 链 → 完成后通过 OpenClaw announce 自动回传消息。**MVP 已支持 article / mindmap / exercise / video 四个 kind**，输入源可以是 URL，也可以是飞书**视频**消息（回复一条视频 + 命令；其他媒体类型如 mp3 / pdf 暂未作为输入支持）。\n\n## Skill\n\n| 命令 | 状态 | 说明 | publish payload |\n|------|------|------|-----------------|\n| `/scholai article <url>` 或 回复视频 + `/scholai article` | ✅ MVP | 生成 HTML 图文教材（含 LLM 生成的配图），发布到 Scholai 平台 | `output/article.html` |\n| `/scholai mindmap <url>` 或 回复视频 + `/scholai mindmap` | ✅ MVP | 生成 markmap 思维导图（Markdown，scholai 后端 markmap 渲染） | `output/mindmap.md` |\n| `/scholai exercise <url>` 或 回复视频 + `/scholai exercise` | ✅ MVP | 生成混合题型习题集（Markdown，后端 `MARKDOWN_KINDS` 白名单） | `output/exercise.md` |\n| `/scholai video <url>` 或 回复视频 + `/scholai video` | ✅ MVP | 6-atom pipeline → ≤180s 短视频，自动推回原 IM 会话 | 无（MVP 跳过 OSS/publish；直接 lark-send） |\n\n每个 kind 一份 lobster pipeline + 一份 references doc：\n- article — `skills/scholai/pipelines/article.lobster` + `skills/scholai/references/article.md`\n- mindmap — `skills/scholai/pipelines/mindmap.lobster` + `skills/scholai/references/mindmap.md`\n- exercise — `skills/scholai/pipelines/exercise.lobster` + `skills/scholai/references/exercise.md`\n- video — `skills/scholai/pipelines/video.lobster` + `skills/scholai/references/video.md`\n\n主入口（kind-agnostic 主会话流程、卡片协议、subagent 派发约定）见 `skills/scholai/SKILL.md`。新增 kind 直接照已有 kind 的形态加一份 lobster pipeline + references doc + SKILL.md 命令索引一行即可。\n\n## 飞书裸媒体拦截钩子\n\n插件注册了一个 `before_dispatch` 钩子，会**静默吞掉**飞书 channel 上的裸媒体消息（任何 `<media:*>` 包络：`<media:video>` / `<media:audio>` / `<media:image>` / `<media:document>` / `<media:sticker>` 等），让模型不会在用户的 `/scholai` 命令到达之前就自作主张地分析这条媒体。\n\n**\"回复媒体 + `/scholai <kind>`\"** 的正常工作流不受影响 —— 那条后续消息携带的是普通文本，不是 `<media:*>` 包络。\n\n每次 claim 会向 `<state-dir>/logs/scholai-inbound.log` 追加一行。`state-dir` 的解析顺序：`$SCHOLAI_INBOUND_LOG_PATH`（操作员显式指定）→ `$OPENCLAW_STATE_DIR`（openclaw 注入时使用）→ `$HOME/.openclaw`（普通安装）→ `os.tmpdir()`（最后兜底）。\n\n```\n[openclaw-scholai inbound_claim] claimed feishu bare-media (kind=document, file=audio.mp3, msgId=om_xxx, session=..., sender=...)\n```\n\n诊断用 env（追加到 openclaw service env 文件，例如 macOS 下的 `<state-dir>/service-env/ai.openclaw.gateway.env`，然后 `launchctl kickstart -k gui/$(id -u)/ai.openclaw.gateway` 重启服务）：\n\n| Env | 默认值 | 用途 |\n|------|--------|------|\n| `SCHOLAI_DEBUG_INBOUND` | _未设置_ | 设为 `1` 时，每条入站事件都会以 `[hook=before_dispatch]` tag 输出完整 payload。日志量较大，仅排查时打开。 |\n| `SCHOLAI_INBOUND_LOG_PATH` | _见上面的解析顺序_ | 覆盖 fs append 的目标路径。 |\n\n实现见 [src/hooks/inbound-media-claim.ts](src/hooks/inbound-media-claim.ts)。注册到的是 `before_dispatch` 而不是 `inbound_claim` —— 实测在 OpenClaw v2026.5.x 上，`inbound_claim` 钩子对飞书入站事件不触发。\n\n## 执行架构\n\n```\nSKILL.md (kind-agnostic)\n    │ user 输入：\n    │   (A) /scholai <kind> <url>   — URL 模式\n    │   (B) 回复一条视频消息 + /scholai <kind> — 视频模式（通过 parent_msg_id 回溯）\n    ▼\nMainAgent\n    │ 1. 解析输入源（URL / 飞书 file_key），写 source.json\n    │ 2. 生成 run_id (UUID v4)\n    │ 3. 创建 cardkit 进度卡片 → 推到 requester channel\n    │ 4. sessions_spawn (context: isolated, runTimeoutSeconds: per-kind)\n    │ 5. 立即回 \"📋 进度卡片已发送\"\n    ▼\nSubagent (后台一次性会话，主会话不阻塞)\n    │ 调 lobster agent tool\n    │   pipeline: skills/scholai/pipelines/<kind>.lobster\n    │   argsJson: {\"run_id\":\"...\",\"source_json\":\"...\",\"card_id\":\"...\",\"plugin_dir\":\"...\"}\n    ▼\nLobster runtime — 顺序跑 atoms，每个 atom 后接 notify_<id> 翻卡片行\n    │\n    │   article.lobster (5 业务步, ~5–15 分钟):\n    │     setup → vfd → iod → pd → txd_gen → txd_imagegen\n    │              → txd_render_html → publish\n    │\n    │   mindmap.lobster (3 业务步, ~1–3 分钟):\n    │     setup → vfd → iod → mmd_gen → mmd_render_html → publish\n    │\n    │   exercise.lobster (3 业务步, ~1–3 分钟):\n    │     setup → vfd → iod → esd_gen → publish\n    │\n    │   video.lobster (6 业务步, ≤180s):\n    │     setup → vfd-url → ssd-gen → ssd-imagegen → tts-gen\n    │              → video-compose → lark-send\n    ▼\nSubagent → PATCH 卡片 footer 为 🎉 + URL 或 ❌ + error → 输出 NO_REPLY\n    │\n    ▼ (footer PATCH 失败 OR card_id 为空时回退) OpenClaw 自动 announce 到 requester channel\n```\n\n各 kind 的具体超时、atom 失败映射、subagent task 模板：\n- [skills/scholai/references/article.md](skills/scholai/references/article.md)\n- [skills/scholai/references/mindmap.md](skills/scholai/references/mindmap.md)\n- [skills/scholai/references/exercise.md](skills/scholai/references/exercise.md)\n- [skills/scholai/references/video.md](skills/scholai/references/video.md)\n\n## Installation\n\n```bash\nopenclaw plugin install @scholai/openclaw-scholai\n```\n\nSkill 声明了 `metadata.openclaw.install: [kind: uv, package: scholai-cli]`，\nopenclaw 在首次调用 skill 时会自动通过 uv 安装 Python atom CLI（`scholai`）。\n\n### Prerequisites\n\n- **Node ≥ 22**（plugin 本身）\n- **openclaw**（自带 `lobster` agent tool plugin，本 skill 必需）\n- **`uv` ≥ 0.7 on PATH** — 用于 Python atom 安装，见 https://docs.astral.sh/uv/\n- **`lobster` CLI on PATH** — `@openclaw/lobster` 插件需要 spawn 这个 binary。openclaw 当前不会自动安装它（详见 [openclaw#TBD]），手动一次：\n  ```bash\n  npm i -g @clawdbot/lobster\n  # 或 npm install -g @clawdbot/lobster\n  ```\n  装完 `which lobster` 应能找到。\n\n## Configuration\n\n用户通过 `@scholai/openclaw-scholai-tools install`（separate package, `npm run onboard` 走的就是它）配置以下凭据 / 模型：\n\n| 变量 | 必需 | 用途 |\n|------|------|------|\n| `LLM_TEXT_API_KEY` | ✅ | 文本模型 API key |\n| `LLM_TEXT_BASE_URL` | ✅ | 文本模型 OpenAI-兼容网关 base URL |\n| `LLM_TEXT_MODEL` | ✅ | 文本模型 ID（用于 iod / pd / txd-gen / mmd-gen） |\n| `LLM_IMAGE_API_KEY` | ✅ | 图像模型 API key |\n| `LLM_IMAGE_BASE_URL` | ✅ | 图像模型 OpenAI-兼容网关 base URL |\n| `LLM_IMAGE_MODEL` | ✅ | 图像模型 ID（用于 article kind 的 txd-imagegen） |\n| `SCHOLAI_API_KEY` | ✅ | publish 到 scholai 后端的鉴权 token |\n| `SCHOLAI_API_URL` | ✅ | scholai 平台 base URL，publish 拼接 `/api/document` |\n| `VOLC_ASR_API_KEY` | ✅ | 火山 ASR（语音识别）凭证，飞书视频 / 音频输入用 |\n| `VOLC_VISION_API_KEY` | ✅ | 火山 VISION（视觉理解）凭证，飞书视频 / PPT 输入用 |\n| `TENCENTCLOUD_SECRET_ID` | ✅ | 腾讯云 COS 凭证 ID，PPT 输入上传中转用 |\n| `TENCENTCLOUD_SECRET_KEY` | ✅ | 腾讯云 COS 凭证 Key |\n| `TENCENTCLOUD_COS_BUCKET` | ✅ | 腾讯云 COS bucket 名 |\n| `TENCENTCLOUD_COS_REGION` | ✅ | 腾讯云 COS 区域（如 `ap-shanghai`） |\n\nAtom 通过 OpenAI 兼容 SDK 调 LLM（不是 Gemini），所以接火山 / DeepSeek / OpenAI 自己 / 任何 OpenAI-compatible 网关都行，只要给对应的 base URL + API key + 模型 ID 即可。\n\nKeys 通过 openclaw 的 `skills.entries.<skill>.env` 机制注入到 skill 运行时。\n\n## Development\n\n```bash\nnpm run build --workspace=@scholai/openclaw-scholai\nnpm test --workspace=@scholai/openclaw-scholai\nnpm run typecheck --workspace=@scholai/openclaw-scholai\n```\n","readmeFilename":"README.md"}