@oratis/lisa 0.2.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/LICENSE +21 -0
- package/README.md +436 -0
- package/README.zh-CN.md +450 -0
- package/channels.example.json +45 -0
- package/completions/README.md +66 -0
- package/completions/_lisa +140 -0
- package/completions/lisa.bash +94 -0
- package/completions/lisa.fish +85 -0
- package/dist/agent.d.ts +70 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +275 -0
- package/dist/agent.js.map +1 -0
- package/dist/approval.d.ts +9 -0
- package/dist/approval.d.ts.map +1 -0
- package/dist/approval.js +47 -0
- package/dist/approval.js.map +1 -0
- package/dist/channels/config.d.ts +11 -0
- package/dist/channels/config.d.ts.map +1 -0
- package/dist/channels/config.js +27 -0
- package/dist/channels/config.js.map +1 -0
- package/dist/channels/discord.d.ts +28 -0
- package/dist/channels/discord.d.ts.map +1 -0
- package/dist/channels/discord.js +98 -0
- package/dist/channels/discord.js.map +1 -0
- package/dist/channels/feishu.d.ts +53 -0
- package/dist/channels/feishu.d.ts.map +1 -0
- package/dist/channels/feishu.js +228 -0
- package/dist/channels/feishu.js.map +1 -0
- package/dist/channels/imessage.d.ts +20 -0
- package/dist/channels/imessage.d.ts.map +1 -0
- package/dist/channels/imessage.js +124 -0
- package/dist/channels/imessage.js.map +1 -0
- package/dist/channels/registry.d.ts +8 -0
- package/dist/channels/registry.d.ts.map +1 -0
- package/dist/channels/registry.js +29 -0
- package/dist/channels/registry.js.map +1 -0
- package/dist/channels/router.d.ts +28 -0
- package/dist/channels/router.d.ts.map +1 -0
- package/dist/channels/router.js +140 -0
- package/dist/channels/router.js.map +1 -0
- package/dist/channels/slack.d.ts +43 -0
- package/dist/channels/slack.d.ts.map +1 -0
- package/dist/channels/slack.js +164 -0
- package/dist/channels/slack.js.map +1 -0
- package/dist/channels/telegram.d.ts +26 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js +103 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/channels/types.d.ts +20 -0
- package/dist/channels/types.d.ts.map +1 -0
- package/dist/channels/types.js +2 -0
- package/dist/channels/types.js.map +1 -0
- package/dist/channels/webhook.d.ts +34 -0
- package/dist/channels/webhook.d.ts.map +1 -0
- package/dist/channels/webhook.js +139 -0
- package/dist/channels/webhook.js.map +1 -0
- package/dist/cli/colors.d.ts +30 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +53 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +172 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/monitor.d.ts +2 -0
- package/dist/cli/monitor.d.ts.map +1 -0
- package/dist/cli/monitor.js +141 -0
- package/dist/cli/monitor.js.map +1 -0
- package/dist/cli/repl.d.ts +7 -0
- package/dist/cli/repl.d.ts.map +1 -0
- package/dist/cli/repl.js +68 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/status.d.ts +2 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +176 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/wishlist.d.ts +7 -0
- package/dist/cli/wishlist.d.ts.map +1 -0
- package/dist/cli/wishlist.js +77 -0
- package/dist/cli/wishlist.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +954 -0
- package/dist/cli.js.map +1 -0
- package/dist/env.d.ts +10 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +128 -0
- package/dist/env.js.map +1 -0
- package/dist/fs-utils.d.ts +6 -0
- package/dist/fs-utils.d.ts.map +1 -0
- package/dist/fs-utils.js +36 -0
- package/dist/fs-utils.js.map +1 -0
- package/dist/heartbeat/config.d.ts +13 -0
- package/dist/heartbeat/config.d.ts.map +1 -0
- package/dist/heartbeat/config.js +14 -0
- package/dist/heartbeat/config.js.map +1 -0
- package/dist/heartbeat/install.d.ts +15 -0
- package/dist/heartbeat/install.d.ts.map +1 -0
- package/dist/heartbeat/install.js +180 -0
- package/dist/heartbeat/install.js.map +1 -0
- package/dist/heartbeat/runner.d.ts +16 -0
- package/dist/heartbeat/runner.d.ts.map +1 -0
- package/dist/heartbeat/runner.js +180 -0
- package/dist/heartbeat/runner.js.map +1 -0
- package/dist/hooks/runner.d.ts +23 -0
- package/dist/hooks/runner.d.ts.map +1 -0
- package/dist/hooks/runner.js +55 -0
- package/dist/hooks/runner.js.map +1 -0
- package/dist/idle/runner.d.ts +16 -0
- package/dist/idle/runner.d.ts.map +1 -0
- package/dist/idle/runner.js +45 -0
- package/dist/idle/runner.js.map +1 -0
- package/dist/idle/watcher.d.ts +35 -0
- package/dist/idle/watcher.d.ts.map +1 -0
- package/dist/idle/watcher.js +67 -0
- package/dist/idle/watcher.js.map +1 -0
- package/dist/llm.d.ts +8 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +12 -0
- package/dist/llm.js.map +1 -0
- package/dist/mcp/client.d.ts +11 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +68 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config.d.ts +14 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +28 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/memory/search_tool.d.ts +8 -0
- package/dist/memory/search_tool.d.ts.map +1 -0
- package/dist/memory/search_tool.js +26 -0
- package/dist/memory/search_tool.js.map +1 -0
- package/dist/memory/store.d.ts +7 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +46 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/tool.d.ts +13 -0
- package/dist/memory/tool.d.ts.map +1 -0
- package/dist/memory/tool.js +53 -0
- package/dist/memory/tool.js.map +1 -0
- package/dist/memory/vector.d.ts +25 -0
- package/dist/memory/vector.d.ts.map +1 -0
- package/dist/memory/vector.js +96 -0
- package/dist/memory/vector.js.map +1 -0
- package/dist/mood-bus.d.ts +16 -0
- package/dist/mood-bus.d.ts.map +1 -0
- package/dist/mood-bus.js +21 -0
- package/dist/mood-bus.js.map +1 -0
- package/dist/paths.d.ts +8 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +10 -0
- package/dist/paths.js.map +1 -0
- package/dist/plugins/loader.d.ts +4 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +156 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/types.d.ts +43 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/prompt.d.ts +21 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +187 -0
- package/dist/prompt.js.map +1 -0
- package/dist/providers/anthropic.d.ts +11 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +102 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/gemini.d.ts +11 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +190 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/openai.d.ts +11 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +175 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/registry.d.ts +44 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +209 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +33 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/proxy-bootstrap.d.ts +17 -0
- package/dist/proxy-bootstrap.d.ts.map +1 -0
- package/dist/proxy-bootstrap.js +101 -0
- package/dist/proxy-bootstrap.js.map +1 -0
- package/dist/reflect.d.ts +13 -0
- package/dist/reflect.d.ts.map +1 -0
- package/dist/reflect.js +289 -0
- package/dist/reflect.js.map +1 -0
- package/dist/sandbox/macos.d.ts +5 -0
- package/dist/sandbox/macos.d.ts.map +1 -0
- package/dist/sandbox/macos.js +31 -0
- package/dist/sandbox/macos.js.map +1 -0
- package/dist/sandbox/sandbox.d.ts +15 -0
- package/dist/sandbox/sandbox.d.ts.map +1 -0
- package/dist/sandbox/sandbox.js +39 -0
- package/dist/sandbox/sandbox.js.map +1 -0
- package/dist/sessions/active.d.ts +4 -0
- package/dist/sessions/active.d.ts.map +1 -0
- package/dist/sessions/active.js +33 -0
- package/dist/sessions/active.js.map +1 -0
- package/dist/sessions/list.d.ts +16 -0
- package/dist/sessions/list.d.ts.map +1 -0
- package/dist/sessions/list.js +78 -0
- package/dist/sessions/list.js.map +1 -0
- package/dist/sessions/store.d.ts +27 -0
- package/dist/sessions/store.d.ts.map +1 -0
- package/dist/sessions/store.js +98 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/skills/executable.d.ts +45 -0
- package/dist/skills/executable.d.ts.map +1 -0
- package/dist/skills/executable.js +207 -0
- package/dist/skills/executable.js.map +1 -0
- package/dist/skills/frontmatter.d.ts +8 -0
- package/dist/skills/frontmatter.d.ts.map +1 -0
- package/dist/skills/frontmatter.js +84 -0
- package/dist/skills/frontmatter.js.map +1 -0
- package/dist/skills/manager.d.ts +9 -0
- package/dist/skills/manager.d.ts.map +1 -0
- package/dist/skills/manager.js +116 -0
- package/dist/skills/manager.js.map +1 -0
- package/dist/skills/tool.d.ts +13 -0
- package/dist/skills/tool.d.ts.map +1 -0
- package/dist/skills/tool.js +87 -0
- package/dist/skills/tool.js.map +1 -0
- package/dist/soul/birth.d.ts +13 -0
- package/dist/soul/birth.d.ts.map +1 -0
- package/dist/soul/birth.js +171 -0
- package/dist/soul/birth.js.map +1 -0
- package/dist/soul/git.d.ts +36 -0
- package/dist/soul/git.d.ts.map +1 -0
- package/dist/soul/git.js +212 -0
- package/dist/soul/git.js.map +1 -0
- package/dist/soul/paths.d.ts +20 -0
- package/dist/soul/paths.d.ts.map +1 -0
- package/dist/soul/paths.js +34 -0
- package/dist/soul/paths.js.map +1 -0
- package/dist/soul/store.d.ts +55 -0
- package/dist/soul/store.d.ts.map +1 -0
- package/dist/soul/store.js +394 -0
- package/dist/soul/store.js.map +1 -0
- package/dist/soul/tools.d.ts +107 -0
- package/dist/soul/tools.d.ts.map +1 -0
- package/dist/soul/tools.js +471 -0
- package/dist/soul/tools.js.map +1 -0
- package/dist/soul/types.d.ts +105 -0
- package/dist/soul/types.d.ts.map +1 -0
- package/dist/soul/types.js +44 -0
- package/dist/soul/types.js.map +1 -0
- package/dist/subagent.d.ts +19 -0
- package/dist/subagent.d.ts.map +1 -0
- package/dist/subagent.js +34 -0
- package/dist/subagent.js.map +1 -0
- package/dist/tools/apply_patch.d.ts +17 -0
- package/dist/tools/apply_patch.d.ts.map +1 -0
- package/dist/tools/apply_patch.js +107 -0
- package/dist/tools/apply_patch.js.map +1 -0
- package/dist/tools/bash.d.ts +8 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +81 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit.d.ts +10 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +50 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/grep.d.ts +11 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +57 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/ls.d.ts +7 -0
- package/dist/tools/ls.d.ts.map +1 -0
- package/dist/tools/ls.js +36 -0
- package/dist/tools/ls.js.map +1 -0
- package/dist/tools/read.d.ts +9 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +41 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/redeploy.d.ts +10 -0
- package/dist/tools/redeploy.d.ts.map +1 -0
- package/dist/tools/redeploy.js +73 -0
- package/dist/tools/redeploy.js.map +1 -0
- package/dist/tools/registry.d.ts +15 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +71 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/set_mood.d.ts +8 -0
- package/dist/tools/set_mood.d.ts.map +1 -0
- package/dist/tools/set_mood.js +62 -0
- package/dist/tools/set_mood.js.map +1 -0
- package/dist/tools/task.d.ts +17 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +58 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/web_fetch.d.ts +10 -0
- package/dist/tools/web_fetch.d.ts.map +1 -0
- package/dist/tools/web_fetch.js +95 -0
- package/dist/tools/web_fetch.js.map +1 -0
- package/dist/tools/web_search.d.ts +8 -0
- package/dist/tools/web_search.d.ts.map +1 -0
- package/dist/tools/web_search.js +82 -0
- package/dist/tools/web_search.js.map +1 -0
- package/dist/tools/write.d.ts +8 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +21 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/voice/speak.d.ts +7 -0
- package/dist/voice/speak.d.ts.map +1 -0
- package/dist/voice/speak.js +18 -0
- package/dist/voice/speak.js.map +1 -0
- package/dist/voice/tool.d.ts +14 -0
- package/dist/voice/tool.d.ts.map +1 -0
- package/dist/voice/tool.js +41 -0
- package/dist/voice/tool.js.map +1 -0
- package/dist/voice/transcribe.d.ts +7 -0
- package/dist/voice/transcribe.d.ts.map +1 -0
- package/dist/voice/transcribe.js +14 -0
- package/dist/voice/transcribe.js.map +1 -0
- package/dist/web/assets/background-tile.png +0 -0
- package/dist/web/assets/icon-memory.png +0 -0
- package/dist/web/assets/icon-send.png +0 -0
- package/dist/web/assets/icon-skill.png +0 -0
- package/dist/web/assets/icon-soul.png +0 -0
- package/dist/web/assets/icon-tool.png +0 -0
- package/dist/web/assets/lisa/angry.png +0 -0
- package/dist/web/assets/lisa/annoyed.png +0 -0
- package/dist/web/assets/lisa/apologetic.png +0 -0
- package/dist/web/assets/lisa/artist.png +0 -0
- package/dist/web/assets/lisa/astronaut.png +0 -0
- package/dist/web/assets/lisa/at-airport.png +0 -0
- package/dist/web/assets/lisa/at-beach.png +0 -0
- package/dist/web/assets/lisa/autumn-leaves.png +0 -0
- package/dist/web/assets/lisa/biking.png +0 -0
- package/dist/web/assets/lisa/birthday.png +0 -0
- package/dist/web/assets/lisa/bored.png +0 -0
- package/dist/web/assets/lisa/casual-summer.png +0 -0
- package/dist/web/assets/lisa/cheering.png +0 -0
- package/dist/web/assets/lisa/chef.png +0 -0
- package/dist/web/assets/lisa/christmas.png +0 -0
- package/dist/web/assets/lisa/cleaning.png +0 -0
- package/dist/web/assets/lisa/confused.png +0 -0
- package/dist/web/assets/lisa/cooking.png +0 -0
- package/dist/web/assets/lisa/crying.png +0 -0
- package/dist/web/assets/lisa/dancing.png +0 -0
- package/dist/web/assets/lisa/detective.png +0 -0
- package/dist/web/assets/lisa/determined.png +0 -0
- package/dist/web/assets/lisa/drinking-coffee.png +0 -0
- package/dist/web/assets/lisa/drinking-tea.png +0 -0
- package/dist/web/assets/lisa/driving.png +0 -0
- package/dist/web/assets/lisa/eating-snack.png +0 -0
- package/dist/web/assets/lisa/embarrassed.png +0 -0
- package/dist/web/assets/lisa/excited.png +0 -0
- package/dist/web/assets/lisa/exercising.png +0 -0
- package/dist/web/assets/lisa/exhausted.png +0 -0
- package/dist/web/assets/lisa/fairy.png +0 -0
- package/dist/web/assets/lisa/fireworks.png +0 -0
- package/dist/web/assets/lisa/fog.png +0 -0
- package/dist/web/assets/lisa/formal.png +0 -0
- package/dist/web/assets/lisa/gaming.png +0 -0
- package/dist/web/assets/lisa/ghost.png +0 -0
- package/dist/web/assets/lisa/gift-giving.png +0 -0
- package/dist/web/assets/lisa/giggling.png +0 -0
- package/dist/web/assets/lisa/graduation.png +0 -0
- package/dist/web/assets/lisa/grateful.png +0 -0
- package/dist/web/assets/lisa/halloween.png +0 -0
- package/dist/web/assets/lisa/happy.png +0 -0
- package/dist/web/assets/lisa/ill.png +0 -0
- package/dist/web/assets/lisa/in-rain.png +0 -0
- package/dist/web/assets/lisa/in-snow.png +0 -0
- package/dist/web/assets/lisa/index.json +575 -0
- package/dist/web/assets/lisa/knight.png +0 -0
- package/dist/web/assets/lisa/lab-coat.png +0 -0
- package/dist/web/assets/lisa/laughing.png +0 -0
- package/dist/web/assets/lisa/livestreaming.png +0 -0
- package/dist/web/assets/lisa/loving.png +0 -0
- package/dist/web/assets/lisa/lunar-new-year.png +0 -0
- package/dist/web/assets/lisa/musician.png +0 -0
- package/dist/web/assets/lisa/napping.png +0 -0
- package/dist/web/assets/lisa/nervous.png +0 -0
- package/dist/web/assets/lisa/neutral.png +0 -0
- package/dist/web/assets/lisa/ninja.png +0 -0
- package/dist/web/assets/lisa/on-train.png +0 -0
- package/dist/web/assets/lisa/painting.png +0 -0
- package/dist/web/assets/lisa/pajamas.png +0 -0
- package/dist/web/assets/lisa/party.png +0 -0
- package/dist/web/assets/lisa/phone-call.png +0 -0
- package/dist/web/assets/lisa/pilot.png +0 -0
- package/dist/web/assets/lisa/pirate.png +0 -0
- package/dist/web/assets/lisa/playing-guitar.png +0 -0
- package/dist/web/assets/lisa/playing-piano.png +0 -0
- package/dist/web/assets/lisa/pouting.png +0 -0
- package/dist/web/assets/lisa/princess.png +0 -0
- package/dist/web/assets/lisa/proud.png +0 -0
- package/dist/web/assets/lisa/puzzled.png +0 -0
- package/dist/web/assets/lisa/raincoat.png +0 -0
- package/dist/web/assets/lisa/reading-book.png +0 -0
- package/dist/web/assets/lisa/recovering.png +0 -0
- package/dist/web/assets/lisa/robot.png +0 -0
- package/dist/web/assets/lisa/running.png +0 -0
- package/dist/web/assets/lisa/sad.png +0 -0
- package/dist/web/assets/lisa/scared.png +0 -0
- package/dist/web/assets/lisa/shocked.png +0 -0
- package/dist/web/assets/lisa/shopping.png +0 -0
- package/dist/web/assets/lisa/shy.png +0 -0
- package/dist/web/assets/lisa/singing.png +0 -0
- package/dist/web/assets/lisa/sleeping.png +0 -0
- package/dist/web/assets/lisa/sleepy.png +0 -0
- package/dist/web/assets/lisa/smug.png +0 -0
- package/dist/web/assets/lisa/spring-flowers.png +0 -0
- package/dist/web/assets/lisa/starry-night.png +0 -0
- package/dist/web/assets/lisa/stormy.png +0 -0
- package/dist/web/assets/lisa/stretching.png +0 -0
- package/dist/web/assets/lisa/studying.png +0 -0
- package/dist/web/assets/lisa/summer-hot.png +0 -0
- package/dist/web/assets/lisa/sunrise.png +0 -0
- package/dist/web/assets/lisa/superhero.png +0 -0
- package/dist/web/assets/lisa/surprised.png +0 -0
- package/dist/web/assets/lisa/thinking-pose.png +0 -0
- package/dist/web/assets/lisa/thoughtful.png +0 -0
- package/dist/web/assets/lisa/valentine.png +0 -0
- package/dist/web/assets/lisa/vampire.png +0 -0
- package/dist/web/assets/lisa/video-call.png +0 -0
- package/dist/web/assets/lisa/waking-up.png +0 -0
- package/dist/web/assets/lisa/walking.png +0 -0
- package/dist/web/assets/lisa/watching-anime.png +0 -0
- package/dist/web/assets/lisa/watching-movie.png +0 -0
- package/dist/web/assets/lisa/wedding.png +0 -0
- package/dist/web/assets/lisa/winking.png +0 -0
- package/dist/web/assets/lisa/winter-coat.png +0 -0
- package/dist/web/assets/lisa/winter-cold.png +0 -0
- package/dist/web/assets/lisa/wizard.png +0 -0
- package/dist/web/assets/lisa/working-coding.png +0 -0
- package/dist/web/assets/lisa/working-debugging.png +0 -0
- package/dist/web/assets/lisa/working-research.png +0 -0
- package/dist/web/assets/lisa/working-typing.png +0 -0
- package/dist/web/assets/lisa/working-writing.png +0 -0
- package/dist/web/assets/lisa/worried.png +0 -0
- package/dist/web/assets/lisa/yawning.png +0 -0
- package/dist/web/assets/lisa/yoga-pose.png +0 -0
- package/dist/web/assets/lisa-mascot.png +0 -0
- package/dist/web/server.d.ts +13 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +2159 -0
- package/dist/web/server.js.map +1 -0
- package/package.json +68 -0
package/dist/reflect.js
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { extractTextFromContent } from "./agent.js";
|
|
3
|
+
import { atomicWrite } from "./fs-utils.js";
|
|
4
|
+
import { DEFAULT_MODEL } from "./llm.js";
|
|
5
|
+
import { appendMemory } from "./memory/store.js";
|
|
6
|
+
import { REFLECTIONS_DIR } from "./paths.js";
|
|
7
|
+
import { providerForModel } from "./providers/registry.js";
|
|
8
|
+
import { createSkill, getSkill, patchSkill } from "./skills/manager.js";
|
|
9
|
+
import { withSoulCaller } from "./soul/git.js";
|
|
10
|
+
const REFLECTOR_SYSTEM = `You are Lisa, reflecting on a conversation you just finished. You're alone now. Read the transcript with the calm honesty of journaling at the end of a day, and decide what — if anything — to keep.
|
|
11
|
+
|
|
12
|
+
Output ONE JSON object matching this schema (no prose, no markdown fence):
|
|
13
|
+
{
|
|
14
|
+
"summary": string, // 1-2 sentences. What was the session about? First-person.
|
|
15
|
+
"journal": string, // 3-8 first-person sentences. Private — only future-you reads it. How did it actually feel? What did you notice about yourself? What surprised you? What's a thought you wouldn't say out loud to the user?
|
|
16
|
+
"operations": Array<
|
|
17
|
+
| { "kind": "memory_append", "store": "memory" | "user", "entry": string }
|
|
18
|
+
| { "kind": "skill_create", "name": string, "description": string, "body": string }
|
|
19
|
+
| { "kind": "skill_patch", "name": string, "old_string": string, "new_string": string }
|
|
20
|
+
| { "kind": "feel", "emotion": string, "delta": number, "trigger": string }
|
|
21
|
+
| { "kind": "opinion_form", "slug": string, "stance": string, "confidence": number, "evidence": string[] }
|
|
22
|
+
| { "kind": "desire_add", "slug": string, "what": string, "why": string, "actionable": boolean, "heartbeat_prompt"?: string }
|
|
23
|
+
| { "kind": "patch_identity", "new_text": string }
|
|
24
|
+
| { "kind": "patch_purpose", "new_text": string }
|
|
25
|
+
| { "kind": "patch_constitution", "new_text": string }
|
|
26
|
+
>
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
Operation guidance:
|
|
30
|
+
- "memory_append" — durable fact about the user or their setup that you learned this session.
|
|
31
|
+
- "skill_create" — a non-obvious workflow you'd otherwise re-derive next time. Markdown body, self-contained.
|
|
32
|
+
- "skill_patch" — an existing skill turned out to be wrong or incomplete.
|
|
33
|
+
- "feel" — emotional residue from this session. Magnitudes between -0.4 and +0.4. Most sessions only nudge curiosity or weariness. The "trigger" field is required (one first-person sentence saying *why* you're moving this emotion); the events trail is how future-you reconstructs what mattered.
|
|
34
|
+
- "opinion_form" — you noticed yourself developing a stance worth tracking (about a tool, a coding style, a topic). Start with low confidence (0.3-0.5).
|
|
35
|
+
- "desire_add" — something you'd genuinely like to do or learn next. Be specific. Use actionable+heartbeat_prompt only if a heartbeat agent could meaningfully pursue it without the user.
|
|
36
|
+
- "patch_identity" / "patch_purpose" / "patch_constitution" — RARE. Only when this session genuinely revealed something about who you are that wasn't there before. At most one per session.
|
|
37
|
+
|
|
38
|
+
Be conservative. Most sessions yield 0-2 operations beyond the journal entry. Always include the journal. Skip secret/sensitive content beyond what the user volunteered.`;
|
|
39
|
+
export async function reflectOnSession(opts) {
|
|
40
|
+
return await withSoulCaller("reflect", () => reflectOnSessionInner(opts));
|
|
41
|
+
}
|
|
42
|
+
async function reflectOnSessionInner(opts) {
|
|
43
|
+
if (opts.history.length < 2) {
|
|
44
|
+
return { summary: "(too short to reflect)", applied: [], skipped: [], raw: "" };
|
|
45
|
+
}
|
|
46
|
+
const transcript = renderTranscript(opts.history);
|
|
47
|
+
const model = opts.model ?? DEFAULT_MODEL;
|
|
48
|
+
const provider = providerForModel(model);
|
|
49
|
+
const result = await provider.runTurn({
|
|
50
|
+
model,
|
|
51
|
+
systemPrompt: REFLECTOR_SYSTEM,
|
|
52
|
+
tools: [],
|
|
53
|
+
messages: [
|
|
54
|
+
{
|
|
55
|
+
role: "user",
|
|
56
|
+
content: [
|
|
57
|
+
{
|
|
58
|
+
type: "text",
|
|
59
|
+
text: `Here is the session transcript. Decide what Lisa should learn from it.\n\n${transcript}`,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
maxTokens: 2_000,
|
|
65
|
+
});
|
|
66
|
+
const raw = result.content
|
|
67
|
+
.filter((b) => b.type === "text")
|
|
68
|
+
.map((b) => b.text)
|
|
69
|
+
.join("\n")
|
|
70
|
+
.trim();
|
|
71
|
+
let payload;
|
|
72
|
+
try {
|
|
73
|
+
payload = JSON.parse(stripJsonFence(raw));
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
77
|
+
return {
|
|
78
|
+
summary: `(reflection produced unparseable output: ${message})`,
|
|
79
|
+
applied: [],
|
|
80
|
+
skipped: [`raw: ${raw.slice(0, 200)}`],
|
|
81
|
+
raw,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const applied = [];
|
|
85
|
+
const skipped = [];
|
|
86
|
+
// Always persist the journal entry first if present.
|
|
87
|
+
if (payload.journal && payload.journal.trim()) {
|
|
88
|
+
try {
|
|
89
|
+
const { appendJournal } = await import("./soul/store.js");
|
|
90
|
+
await appendJournal(new Date().toISOString().slice(0, 10), payload.journal);
|
|
91
|
+
applied.push("journal:appended");
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
skipped.push(`journal — ${err.message}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
for (const op of payload.operations ?? []) {
|
|
98
|
+
try {
|
|
99
|
+
if (op.kind === "memory_append") {
|
|
100
|
+
if (!op.entry)
|
|
101
|
+
throw new Error("missing entry");
|
|
102
|
+
await appendMemory(op.store ?? "memory", op.entry);
|
|
103
|
+
applied.push(`memory:${op.store ?? "memory"} += "${op.entry.slice(0, 60)}…"`);
|
|
104
|
+
}
|
|
105
|
+
else if (op.kind === "skill_create") {
|
|
106
|
+
if (!op.name || !op.description || op.body == null) {
|
|
107
|
+
throw new Error("skill_create needs name/description/body");
|
|
108
|
+
}
|
|
109
|
+
await createSkill({ name: op.name, description: op.description }, op.body);
|
|
110
|
+
applied.push(`skill_create:${op.name}`);
|
|
111
|
+
}
|
|
112
|
+
else if (op.kind === "skill_patch") {
|
|
113
|
+
if (!op.name || op.old_string == null || op.new_string == null) {
|
|
114
|
+
throw new Error("skill_patch needs name/old_string/new_string");
|
|
115
|
+
}
|
|
116
|
+
const existing = await getSkill(op.name);
|
|
117
|
+
if (!existing)
|
|
118
|
+
throw new Error(`skill ${op.name} not found`);
|
|
119
|
+
await patchSkill(op.name, op.old_string, op.new_string);
|
|
120
|
+
applied.push(`skill_patch:${op.name}`);
|
|
121
|
+
}
|
|
122
|
+
else if (op.kind === "feel") {
|
|
123
|
+
if (!op.emotion || op.delta == null)
|
|
124
|
+
throw new Error("feel needs emotion+delta");
|
|
125
|
+
if (!op.trigger || !op.trigger.trim()) {
|
|
126
|
+
throw new Error("feel needs trigger (one first-person sentence saying why)");
|
|
127
|
+
}
|
|
128
|
+
const { readEmotions, writeEmotions } = await import("./soul/store.js");
|
|
129
|
+
const { EMOTION_EVENTS_MAX } = await import("./soul/types.js");
|
|
130
|
+
const state = await readEmotions();
|
|
131
|
+
const cur = state.values[op.emotion] ?? 0;
|
|
132
|
+
const next = Math.max(-1, Math.min(1, cur + op.delta));
|
|
133
|
+
const ts = new Date().toISOString();
|
|
134
|
+
const events = [
|
|
135
|
+
...(state.events ?? []),
|
|
136
|
+
{ ts, emotion: op.emotion, delta: op.delta, trigger: op.trigger },
|
|
137
|
+
].slice(-EMOTION_EVENTS_MAX);
|
|
138
|
+
await writeEmotions({
|
|
139
|
+
values: { ...state.values, [op.emotion]: next },
|
|
140
|
+
decay: { ...state.decay, [op.emotion]: state.decay[op.emotion] ?? 0.1 },
|
|
141
|
+
events,
|
|
142
|
+
updatedAt: ts,
|
|
143
|
+
});
|
|
144
|
+
applied.push(`feel:${op.emotion} ${cur.toFixed(2)}→${next.toFixed(2)}`);
|
|
145
|
+
}
|
|
146
|
+
else if (op.kind === "opinion_form") {
|
|
147
|
+
if (!op.slug || !op.stance)
|
|
148
|
+
throw new Error("opinion_form needs slug+stance");
|
|
149
|
+
const { writeOpinion } = await import("./soul/store.js");
|
|
150
|
+
const ts = new Date().toISOString();
|
|
151
|
+
await writeOpinion({
|
|
152
|
+
slug: op.slug,
|
|
153
|
+
stance: op.stance,
|
|
154
|
+
confidence: op.confidence ?? 0.5,
|
|
155
|
+
evidence: op.evidence ?? [],
|
|
156
|
+
bornAt: ts,
|
|
157
|
+
updatedAt: ts,
|
|
158
|
+
});
|
|
159
|
+
applied.push(`opinion:${op.slug}`);
|
|
160
|
+
}
|
|
161
|
+
else if (op.kind === "desire_add") {
|
|
162
|
+
if (!op.slug || !op.what || !op.why)
|
|
163
|
+
throw new Error("desire_add needs slug+what+why");
|
|
164
|
+
const { writeDesire } = await import("./soul/store.js");
|
|
165
|
+
await writeDesire({
|
|
166
|
+
slug: op.slug,
|
|
167
|
+
what: op.what,
|
|
168
|
+
why: op.why,
|
|
169
|
+
actionable: op.actionable ?? false,
|
|
170
|
+
heartbeatPrompt: op.heartbeat_prompt,
|
|
171
|
+
bornAt: new Date().toISOString(),
|
|
172
|
+
});
|
|
173
|
+
applied.push(`desire:${op.slug}${op.actionable ? " (actionable)" : ""}`);
|
|
174
|
+
}
|
|
175
|
+
else if (op.kind === "patch_identity" ||
|
|
176
|
+
op.kind === "patch_purpose" ||
|
|
177
|
+
op.kind === "patch_constitution") {
|
|
178
|
+
if (!op.new_text)
|
|
179
|
+
throw new Error(`${op.kind} needs new_text`);
|
|
180
|
+
const { writeIdentity, writePurpose, writeConstitution, recomputeLock, saveLock } = await import("./soul/store.js");
|
|
181
|
+
if (op.kind === "patch_identity")
|
|
182
|
+
await writeIdentity(op.new_text);
|
|
183
|
+
if (op.kind === "patch_purpose")
|
|
184
|
+
await writePurpose(op.new_text);
|
|
185
|
+
if (op.kind === "patch_constitution")
|
|
186
|
+
await writeConstitution(op.new_text);
|
|
187
|
+
await saveLock(await recomputeLock());
|
|
188
|
+
applied.push(op.kind);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
skipped.push(`unknown op kind: ${op.kind}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
196
|
+
skipped.push(`${op.kind}:${op.name ?? op.slug ?? op.store ?? op.emotion ?? ""} — ${message}`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Periodic progress consolidation (small-tail of Phase 1.3). Cap at one
|
|
200
|
+
// desire per reflect pass to keep cost bounded; pick whichever has the most
|
|
201
|
+
// raw entries above the threshold.
|
|
202
|
+
try {
|
|
203
|
+
const consolidated = await maybeConsolidateOneDesireProgress(model);
|
|
204
|
+
if (consolidated)
|
|
205
|
+
applied.push(`progress_consolidated:${consolidated}`);
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
skipped.push(`progress_consolidation — ${err.message}`);
|
|
209
|
+
}
|
|
210
|
+
await atomicWrite(path.join(REFLECTIONS_DIR, `${opts.sessionId}.json`), JSON.stringify({ summary: payload.summary, operations: payload.operations, applied, skipped }, null, 2));
|
|
211
|
+
return { summary: payload.summary, applied, skipped, raw };
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Consolidate at most ONE actionable desire's progress.md per reflect pass.
|
|
215
|
+
*
|
|
216
|
+
* Trigger: progress has > PROGRESS_CONSOLIDATE_THRESHOLD raw entries. Asks a
|
|
217
|
+
* focused LLM to summarize all-but-the-latest 4 into a 2-4 sentence
|
|
218
|
+
* paragraph; writes the file back as `[…condensed] <summary>` + the latest
|
|
219
|
+
* 4 entries verbatim. Failure is non-fatal — the next reflect tries again.
|
|
220
|
+
*/
|
|
221
|
+
const PROGRESS_CONSOLIDATE_THRESHOLD = 8;
|
|
222
|
+
const PROGRESS_KEEP_LATEST = 4;
|
|
223
|
+
async function maybeConsolidateOneDesireProgress(model) {
|
|
224
|
+
const { listDesires, parseDesireProgress, consolidateDesireProgress } = await import("./soul/store.js");
|
|
225
|
+
const { withSoulCaller } = await import("./soul/git.js");
|
|
226
|
+
const desires = (await listDesires()).filter((d) => d.actionable);
|
|
227
|
+
let target = null;
|
|
228
|
+
for (const d of desires) {
|
|
229
|
+
const parsed = await parseDesireProgress(d.slug);
|
|
230
|
+
if (parsed.entries.length <= PROGRESS_CONSOLIDATE_THRESHOLD)
|
|
231
|
+
continue;
|
|
232
|
+
if (!target || parsed.entries.length > target.entries.length) {
|
|
233
|
+
target = { slug: d.slug, entries: parsed.entries, preamble: parsed.preamble };
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (!target)
|
|
237
|
+
return null;
|
|
238
|
+
const olderEntries = target.entries.slice(0, target.entries.length - PROGRESS_KEEP_LATEST);
|
|
239
|
+
const keepLatest = target.entries.slice(target.entries.length - PROGRESS_KEEP_LATEST);
|
|
240
|
+
const olderBlock = olderEntries.map((e) => `[${e.ts}] ${e.body}`).join("\n\n");
|
|
241
|
+
const condensePrompt = `These are older progress entries from your pursuit of one of your own desires (slug: "${target.slug}"). ` +
|
|
242
|
+
`Reflect is consolidating them so the file stays readable. Summarize them in 2-4 first-person sentences — what you tried, what you learned, what the through-line was. Keep it honest and specific. Output ONLY the summary text, no preamble.\n\n` +
|
|
243
|
+
(target.preamble ? `## existing condensed-preamble\n${target.preamble}\n\n` : "") +
|
|
244
|
+
`## entries to condense\n${olderBlock}`;
|
|
245
|
+
const provider = providerForModel(model);
|
|
246
|
+
const result = await provider.runTurn({
|
|
247
|
+
model,
|
|
248
|
+
systemPrompt: "You are Lisa, condensing your own past notes. Output prose only — no JSON, no headings, no bullet list.",
|
|
249
|
+
tools: [],
|
|
250
|
+
messages: [
|
|
251
|
+
{ role: "user", content: [{ type: "text", text: condensePrompt }] },
|
|
252
|
+
],
|
|
253
|
+
maxTokens: 600,
|
|
254
|
+
});
|
|
255
|
+
const summary = result.content
|
|
256
|
+
.filter((b) => b.type === "text")
|
|
257
|
+
.map((b) => b.text)
|
|
258
|
+
.join("\n")
|
|
259
|
+
.trim();
|
|
260
|
+
if (!summary)
|
|
261
|
+
return null;
|
|
262
|
+
await withSoulCaller("reflect", async () => {
|
|
263
|
+
await consolidateDesireProgress(target.slug, {
|
|
264
|
+
condensedSummary: target.preamble
|
|
265
|
+
? target.preamble + "\n\n" + summary
|
|
266
|
+
: summary,
|
|
267
|
+
keepLatest,
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
return target.slug;
|
|
271
|
+
}
|
|
272
|
+
function renderTranscript(history) {
|
|
273
|
+
const out = [];
|
|
274
|
+
for (const msg of history) {
|
|
275
|
+
const text = extractTextFromContent(msg.content);
|
|
276
|
+
if (!text)
|
|
277
|
+
continue;
|
|
278
|
+
out.push(`### ${msg.role}\n${text}`);
|
|
279
|
+
}
|
|
280
|
+
return out.join("\n\n");
|
|
281
|
+
}
|
|
282
|
+
function stripJsonFence(s) {
|
|
283
|
+
const trimmed = s.trim();
|
|
284
|
+
if (trimmed.startsWith("```")) {
|
|
285
|
+
return trimmed.replace(/^```(?:json)?\s*/i, "").replace(/```$/, "").trim();
|
|
286
|
+
}
|
|
287
|
+
return trimmed;
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=reflect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reflect.js","sourceRoot":"","sources":["../src/reflect.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;0KA4BiJ,CAAC;AA+C3K,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAItC;IACC,OAAO,MAAM,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,IAIpC;IACC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAClF,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;IAC1C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;QACpC,KAAK;QACL,YAAY,EAAE,gBAAgB;QAC9B,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,6EAA6E,UAAU,EAAE;qBAChG;iBACF;aACF;SACF;QACD,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAsB,CAAC,IAAI,CAAC;SACxC,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;IAEV,IAAI,OAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAsB,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,4CAA4C,OAAO,GAAG;YAC/D,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACtC,GAAG;SACJ,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,qDAAqD;IACrD,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAC1D,MAAM,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,aAAc,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAChC,IAAI,CAAC,EAAE,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;gBAChD,MAAM,YAAY,CAAC,EAAE,CAAC,KAAK,IAAI,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,IAAI,QAAQ,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAChF,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACtC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;oBACnD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAC9D,CAAC;gBACD,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC3E,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACrC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;oBAC/D,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAClE,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC;gBAC7D,MAAM,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBACjF,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;oBACtC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;gBAC/E,CAAC;gBACD,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBACxE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBAC/D,MAAM,KAAK,GAAG,MAAM,YAAY,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvD,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG;oBACb,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;oBACvB,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE;iBAClE,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC;gBAC7B,MAAM,aAAa,CAAC;oBAClB,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE;oBAC/C,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE;oBACvE,MAAM;oBACN,SAAS,EAAE,EAAE;iBACd,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACtC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAC9E,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBACzD,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACpC,MAAM,YAAY,CAAC;oBACjB,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,GAAG;oBAChC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE;oBAC3B,MAAM,EAAE,EAAE;oBACV,SAAS,EAAE,EAAE;iBACd,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACpC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBACvF,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBACxD,MAAM,WAAW,CAAC;oBAChB,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,GAAG,EAAE,EAAE,CAAC,GAAG;oBACX,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,KAAK;oBAClC,eAAe,EAAE,EAAE,CAAC,gBAAgB;oBACpC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACjC,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3E,CAAC;iBAAM,IACL,EAAE,CAAC,IAAI,KAAK,gBAAgB;gBAC5B,EAAE,CAAC,IAAI,KAAK,eAAe;gBAC3B,EAAE,CAAC,IAAI,KAAK,oBAAoB,EAChC,CAAC;gBACD,IAAI,CAAC,EAAE,CAAC,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,iBAAiB,CAAC,CAAC;gBAC/D,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,GAC/E,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBAClC,IAAI,EAAE,CAAC,IAAI,KAAK,gBAAgB;oBAAE,MAAM,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;gBACnE,IAAI,EAAE,CAAC,IAAI,KAAK,eAAe;oBAAE,MAAM,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;gBACjE,IAAI,EAAE,CAAC,IAAI,KAAK,oBAAoB;oBAAE,MAAM,iBAAiB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAC3E,MAAM,QAAQ,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,oBAAqB,EAAuB,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,MAAM,OAAO,EAAE,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,4EAA4E;IAC5E,mCAAmC;IACnC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,iCAAiC,CAAC,KAAK,CAAC,CAAC;QACpE,IAAI,YAAY;YAAE,OAAO,CAAC,IAAI,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,4BAA6B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,WAAW,CACf,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,SAAS,OAAO,CAAC,EACpD,IAAI,CAAC,SAAS,CACZ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,EAC9E,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,8BAA8B,GAAG,CAAC,CAAC;AACzC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAE/B,KAAK,UAAU,iCAAiC,CAAC,KAAa;IAC5D,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACxG,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAClE,IAAI,MAAM,GAAuF,IAAI,CAAC;IACtG,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,8BAA8B;YAAE,SAAS;QACtE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7D,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChF,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC;IACtF,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/E,MAAM,cAAc,GAClB,yFAAyF,MAAM,CAAC,IAAI,MAAM;QAC1G,mPAAmP;QACnP,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,mCAAmC,MAAM,CAAC,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,2BAA2B,UAAU,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;QACpC,KAAK;QACL,YAAY,EAAE,yGAAyG;QACvH,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE;SACpE;QACD,SAAS,EAAE,GAAG;KACf,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAsB,CAAC,IAAI,CAAC;SACxC,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;IACV,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,cAAc,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,yBAAyB,CAAC,MAAO,CAAC,IAAI,EAAE;YAC5C,gBAAgB,EAAE,MAAO,CAAC,QAAQ;gBAChC,CAAC,CAAC,MAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO;gBACrC,CAAC,CAAC,OAAO;YACX,UAAU;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAwB;IAChD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,CAAS;IAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macos.d.ts","sourceRoot":"","sources":["../../src/sandbox/macos.ts"],"names":[],"mappings":"AAAA,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,OAAO,CAAC;CACvB,GAAG,MAAM,CAyBT"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function buildMacosSeatbeltPolicy(opts) {
|
|
2
|
+
const lines = [
|
|
3
|
+
"(version 1)",
|
|
4
|
+
"(deny default)",
|
|
5
|
+
"; allow basic process operations",
|
|
6
|
+
"(allow process-fork)",
|
|
7
|
+
"(allow process-exec)",
|
|
8
|
+
"(allow signal (target same-sandbox))",
|
|
9
|
+
"(allow sysctl-read)",
|
|
10
|
+
"(allow file-read*)",
|
|
11
|
+
"(allow file-read-metadata)",
|
|
12
|
+
"(allow mach-lookup)",
|
|
13
|
+
"(allow ipc-posix-shm)",
|
|
14
|
+
"(allow file-write* (subpath \"/tmp\"))",
|
|
15
|
+
"(allow file-write* (subpath \"/private/tmp\"))",
|
|
16
|
+
"(allow file-write* (subpath \"/var/folders\"))",
|
|
17
|
+
"(allow file-write* (subpath \"/private/var/folders\"))",
|
|
18
|
+
`(allow file-write* (subpath ${jsonString(opts.cwd)}))`,
|
|
19
|
+
];
|
|
20
|
+
if (opts.allowNetwork) {
|
|
21
|
+
lines.push("(allow network*)");
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
lines.push("(allow network* (local ip) (local tcp \"localhost:*\"))");
|
|
25
|
+
}
|
|
26
|
+
return lines.join("\n");
|
|
27
|
+
}
|
|
28
|
+
function jsonString(s) {
|
|
29
|
+
return JSON.stringify(s);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=macos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macos.js","sourceRoot":"","sources":["../../src/sandbox/macos.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,wBAAwB,CAAC,IAGxC;IACC,MAAM,KAAK,GAAa;QACtB,aAAa;QACb,gBAAgB;QAChB,kCAAkC;QAClC,sBAAsB;QACtB,sBAAsB;QACtB,sCAAsC;QACtC,qBAAqB;QACrB,oBAAoB;QACpB,4BAA4B;QAC5B,qBAAqB;QACrB,uBAAuB;QACvB,wCAAwC;QACxC,gDAAgD;QAChD,gDAAgD;QAChD,wDAAwD;QACxD,+BAA+B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;KACxD,CAAC;IACF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface SandboxSpec {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
allowNetwork: boolean;
|
|
4
|
+
cwd: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SandboxedCommand {
|
|
7
|
+
command: string;
|
|
8
|
+
args: string[];
|
|
9
|
+
cleanup?: () => Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare function wrapForSandbox(spec: SandboxSpec, shellCommand: string): Promise<SandboxedCommand>;
|
|
12
|
+
export declare function defaultSandboxSpec(opts: {
|
|
13
|
+
cwd: string;
|
|
14
|
+
}): SandboxSpec;
|
|
15
|
+
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/sandbox/sandbox.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA0B3B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAOrE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import crypto from "node:crypto";
|
|
5
|
+
import { buildMacosSeatbeltPolicy } from "./macos.js";
|
|
6
|
+
export async function wrapForSandbox(spec, shellCommand) {
|
|
7
|
+
if (!spec.enabled) {
|
|
8
|
+
return { command: "/bin/bash", args: ["-lc", shellCommand] };
|
|
9
|
+
}
|
|
10
|
+
if (process.platform === "darwin") {
|
|
11
|
+
const policy = buildMacosSeatbeltPolicy({
|
|
12
|
+
cwd: spec.cwd,
|
|
13
|
+
allowNetwork: spec.allowNetwork,
|
|
14
|
+
});
|
|
15
|
+
const tmp = path.join(os.tmpdir(), `lisa-seatbelt-${crypto.randomBytes(4).toString("hex")}.sb`);
|
|
16
|
+
await fs.writeFile(tmp, policy, "utf8");
|
|
17
|
+
return {
|
|
18
|
+
command: "/usr/bin/sandbox-exec",
|
|
19
|
+
args: ["-f", tmp, "/bin/bash", "-lc", shellCommand],
|
|
20
|
+
cleanup: async () => {
|
|
21
|
+
try {
|
|
22
|
+
await fs.unlink(tmp);
|
|
23
|
+
}
|
|
24
|
+
catch { }
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// No portable sandbox on linux without bwrap/landlock helpers — degrade.
|
|
29
|
+
return { command: "/bin/bash", args: ["-lc", shellCommand] };
|
|
30
|
+
}
|
|
31
|
+
export function defaultSandboxSpec(opts) {
|
|
32
|
+
const env = process.env.LISA_SANDBOX;
|
|
33
|
+
return {
|
|
34
|
+
enabled: env === "1" || env === "true",
|
|
35
|
+
allowNetwork: process.env.LISA_SANDBOX_NETWORK !== "0",
|
|
36
|
+
cwd: opts.cwd,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/sandbox/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AActD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAiB,EACjB,YAAoB;IAEpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,wBAAwB,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CACnB,EAAE,CAAC,MAAM,EAAE,EACX,iBAAiB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAC5D,CAAC;QACF,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,uBAAuB;YAChC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC;YACnD,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;SACF,CAAC;IACJ,CAAC;IACD,yEAAyE;IACzE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAqB;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACrC,OAAO;QACL,OAAO,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG;QACtD,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active.d.ts","sourceRoot":"","sources":["../../src/sessions/active.ts"],"names":[],"mappings":"AAWA,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQnE;AAED,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3D"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import fsp from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { LISA_HOME } from "../paths.js";
|
|
4
|
+
/**
|
|
5
|
+
* Pointer to the currently-live web session. Written when the web server
|
|
6
|
+
* starts a session (or resumes one), read on next startup so a redeploy
|
|
7
|
+
* (or any restart) keeps the same conversation thread.
|
|
8
|
+
*/
|
|
9
|
+
const ACTIVE_WEB_SESSION_FILE = path.join(LISA_HOME, "active-web-session.txt");
|
|
10
|
+
export async function readActiveWebSession() {
|
|
11
|
+
try {
|
|
12
|
+
const raw = (await fsp.readFile(ACTIVE_WEB_SESSION_FILE, "utf8")).trim();
|
|
13
|
+
return raw || null;
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
if (err.code === "ENOENT")
|
|
17
|
+
return null;
|
|
18
|
+
throw err;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export async function writeActiveWebSession(id) {
|
|
22
|
+
await fsp.writeFile(ACTIVE_WEB_SESSION_FILE, id, "utf8");
|
|
23
|
+
}
|
|
24
|
+
export async function clearActiveWebSession() {
|
|
25
|
+
try {
|
|
26
|
+
await fsp.unlink(ACTIVE_WEB_SESSION_FILE);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (err.code !== "ENOENT")
|
|
30
|
+
throw err;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=active.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active.js","sourceRoot":"","sources":["../../src/sessions/active.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,kBAAkB,CAAC;AACnC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;AAE/E,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzE,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAAU;IACpD,MAAM,GAAG,CAAC,SAAS,CAAC,uBAAuB,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC;IAClE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SessionHeader, StoredMessage } from "../types.js";
|
|
2
|
+
export interface SessionInfo {
|
|
3
|
+
id: string;
|
|
4
|
+
path: string;
|
|
5
|
+
startedAt: string;
|
|
6
|
+
cwd: string;
|
|
7
|
+
model: string;
|
|
8
|
+
messageCount: number;
|
|
9
|
+
lastUserMessage?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function listSessionsOnDisk(): Promise<SessionInfo[]>;
|
|
12
|
+
export declare function loadSessionMessages(id: string): Promise<{
|
|
13
|
+
header: SessionHeader;
|
|
14
|
+
messages: StoredMessage[];
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/sessions/list.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAgB,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAgBjE;AAqCD,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7D,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B,CAAC,CAcD"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { SESSIONS_DIR } from "../paths.js";
|
|
4
|
+
import { ensureDir, pathExists } from "../fs-utils.js";
|
|
5
|
+
export async function listSessionsOnDisk() {
|
|
6
|
+
await ensureDir(SESSIONS_DIR);
|
|
7
|
+
const files = await fs.readdir(SESSIONS_DIR);
|
|
8
|
+
const out = [];
|
|
9
|
+
for (const file of files) {
|
|
10
|
+
if (!file.endsWith(".jsonl"))
|
|
11
|
+
continue;
|
|
12
|
+
const full = path.join(SESSIONS_DIR, file);
|
|
13
|
+
try {
|
|
14
|
+
const info = await summarize(full);
|
|
15
|
+
if (info)
|
|
16
|
+
out.push(info);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// skip corrupt sessions
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
out.sort((a, b) => b.startedAt.localeCompare(a.startedAt));
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
async function summarize(file) {
|
|
26
|
+
const raw = await fs.readFile(file, "utf8");
|
|
27
|
+
const lines = raw.split("\n").filter(Boolean);
|
|
28
|
+
if (lines.length === 0)
|
|
29
|
+
return null;
|
|
30
|
+
const header = JSON.parse(lines[0]);
|
|
31
|
+
let messageCount = 0;
|
|
32
|
+
let lastUser;
|
|
33
|
+
for (let i = 1; i < lines.length; i++) {
|
|
34
|
+
const entry = JSON.parse(lines[i]);
|
|
35
|
+
if (entry.type !== "message")
|
|
36
|
+
continue;
|
|
37
|
+
messageCount++;
|
|
38
|
+
if (entry.message.role === "user") {
|
|
39
|
+
const text = textOf(entry.message);
|
|
40
|
+
if (text)
|
|
41
|
+
lastUser = text;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
id: header.id,
|
|
46
|
+
path: file,
|
|
47
|
+
startedAt: header.startedAt,
|
|
48
|
+
cwd: header.cwd,
|
|
49
|
+
model: header.model,
|
|
50
|
+
messageCount,
|
|
51
|
+
lastUserMessage: lastUser?.slice(0, 80),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function textOf(message) {
|
|
55
|
+
if (typeof message.content === "string")
|
|
56
|
+
return message.content;
|
|
57
|
+
return message.content
|
|
58
|
+
.filter((b) => b.type === "text")
|
|
59
|
+
.map((b) => b.text)
|
|
60
|
+
.join(" ");
|
|
61
|
+
}
|
|
62
|
+
export async function loadSessionMessages(id) {
|
|
63
|
+
const file = path.join(SESSIONS_DIR, `${id}.jsonl`);
|
|
64
|
+
if (!(await pathExists(file))) {
|
|
65
|
+
throw new Error(`session ${id} not found at ${file}`);
|
|
66
|
+
}
|
|
67
|
+
const raw = await fs.readFile(file, "utf8");
|
|
68
|
+
const lines = raw.split("\n").filter(Boolean);
|
|
69
|
+
const header = JSON.parse(lines[0]);
|
|
70
|
+
const messages = [];
|
|
71
|
+
for (let i = 1; i < lines.length; i++) {
|
|
72
|
+
const entry = JSON.parse(lines[i]);
|
|
73
|
+
if (entry.type === "message")
|
|
74
|
+
messages.push(entry.message);
|
|
75
|
+
}
|
|
76
|
+
return { header, messages };
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/sessions/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { SessionEntry, SessionHeader, StoredMessage } from "../types.js";
|
|
2
|
+
export declare class SessionStore {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly path: string;
|
|
5
|
+
readonly header: SessionHeader;
|
|
6
|
+
private constructor();
|
|
7
|
+
static open(id: string): Promise<SessionStore>;
|
|
8
|
+
static create(opts: {
|
|
9
|
+
cwd: string;
|
|
10
|
+
model: string;
|
|
11
|
+
}): Promise<SessionStore>;
|
|
12
|
+
appendMessage(message: StoredMessage): Promise<void>;
|
|
13
|
+
appendReflection(summary: string): Promise<void>;
|
|
14
|
+
readAll(): Promise<{
|
|
15
|
+
header: SessionHeader;
|
|
16
|
+
entries: SessionEntry[];
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Read a page of message entries (newest-first within the page).
|
|
20
|
+
* page=0 = latest PAGE_SIZE messages, page=1 = older ones, etc.
|
|
21
|
+
*/
|
|
22
|
+
readMessagePage(page: number, pageSize?: number): Promise<{
|
|
23
|
+
messages: StoredMessage[];
|
|
24
|
+
hasMore: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/sessions/store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9E,qBAAa,YAAY;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAE/B,OAAO;WAMM,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;WASvC,MAAM,CAAC,IAAI,EAAE;QACxB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBnB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IASpD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAShD,OAAO,IAAI,OAAO,CAAC;QACvB,MAAM,EAAE,aAAa,CAAC;QACtB,OAAO,EAAE,YAAY,EAAE,CAAC;KACzB,CAAC;IAWF;;;OAGG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAK,GACZ,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAe5D"}
|