feat: AICODE-06 春季后半 7 课大纲 + 第 12 课教案 + prototype 工程产物
## 主要变更 ### 课程设计 - 大纲扩展到 18 课(新增第 12-18 课:单词塔防 3D 大项目) - 引入 AI 三角色协作工作流(Planner / Reviewer / Tester)作为整学期框架 - 每课详化:核心概念 + 误概念预设 + 教学锚点 + 学生产出 + 老师课前要准备 ### 第 12 课教案(完整逐字稿) - 主题:Skills 入门 - 用 game-studio 做跳一跳 - 90 分钟 4C 结构 + 诊断点 + 分支策略 - 5 个误概念预设 + AI 助教提示词模板 + 教师备课指南 ### prototype 工程产物(可玩 demo) - 跳一跳-3d/index.html:Three.js 3D 跳一跳(蓄力 + Web Audio 音效 + PERFECT 命中) - 单词塔防/game-3d.html:完整 3D 塔防(三阶段 + 商店 + 卡片 + 战斗循环,15 击杀完美胜利) - 单词塔防/level-editor-3d.html:3D 关卡设计器(Kenney GLB 模型 + localStorage 保存) - 单词塔防/level-editor.html:2D 关卡设计器(原型保留) - 单词塔防/index.html:2D 塔防原型(原型保留) ### 工程加固 - .gitignore 加强:排除 token、Kenney 大素材、调试截图、第三方插件、Playwright 临时 - 从 git tracking 移除 scripts/.dingtalk_token.json(本地保留) - scripts/sync_to_dingtalk.py:OAuth 流程改为手动 authCode 粘贴(避免本地 server 受限) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -94,20 +94,20 @@ def do_oauth(config):
|
||||
f"&prompt=consent"
|
||||
)
|
||||
|
||||
print("正在启动本地服务器等待授权回调...")
|
||||
print(f"请在浏览器中完成钉钉登录授权。")
|
||||
print(f"如果浏览器没有自动打开,请手动访问:\n{auth_url}\n")
|
||||
|
||||
# 启动本地 HTTP 服务器
|
||||
server = HTTPServer(("127.0.0.1", 18765), OAuthCallbackHandler)
|
||||
# 直接手动模式:打印链接,让用户粘贴 authCode
|
||||
print("=" * 60)
|
||||
print("请用浏览器打开以下链接,完成钉钉登录授权:")
|
||||
print(f"\n{auth_url}\n")
|
||||
print("授权后浏览器地址栏会出现类似:")
|
||||
print(" http://127.0.0.1:18765/callback?authCode=xxxxxx&...")
|
||||
print("\n从地址栏复制 authCode= 后面的值粘贴到这里:")
|
||||
print("=" * 60)
|
||||
webbrowser.open(auth_url)
|
||||
auth_code = input("authCode: ").strip()
|
||||
if not auth_code:
|
||||
print("[auth] 未输入 authCode,授权取消")
|
||||
return None
|
||||
|
||||
# 等待回调
|
||||
while OAuthCallbackHandler.auth_code is None:
|
||||
server.handle_request()
|
||||
|
||||
auth_code = OAuthCallbackHandler.auth_code
|
||||
server.server_close()
|
||||
print(f"[auth] 收到授权码")
|
||||
|
||||
# 用 auth_code 换取 user access token
|
||||
|
||||
Reference in New Issue
Block a user