elanous 0.2.7 → 0.2.8
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/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/chunks/4836-3084c58c1725a40b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7032-f4ef698518fba61c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8067-d976b441a104ab74.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8519-5632377cce994f86.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8894-7317998f6cb97d8c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9740-8f5ff96c522b5f55.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-9aa47b0bc6d570ff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f4d2ecbbae6088d6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-2053e49930c82748.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-624f7a2f89b60c8f.js → page-d4b6df905f185055.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/{page-5a5fb385a4df0ffe.js → page-a70ba27c33003dd0.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-186fc6952f027acc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/{page-7457f52683562161.js → page-18166f885d831d3e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-1c9d6cfe68b121c2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-cbbe03c0da7b081a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-c108ff1fdb665c97.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/{page-b7dcf5d48a854b76.js → page-147a328753d983e2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/field/{page-51480757e7d68b92.js → page-799395a9df7d95aa.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-6a8158b71d1fe9d7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-9567560270857531.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/{page-30533117beb53625.js → page-e7ed3d010153d818.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-c0c0d19d51342d3e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-07267f1391b96aba.js → page-2e002ad8faa43291.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-55d50e9b0006a91d.js → page-b672e02e4bec8deb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-1ba4a5d857276334.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-9db2226f38c542fb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/{page-a7e37af7d0399cb8.js → page-70ee65f5f7a151dc.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-0bb8e43203efb23b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-092e1bcf27d751cc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/{page-15e5a15db84c56aa.js → page-eb52580c4b75b905.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-a2e572e4511f2a16.js → page-7464c1987dd76e6d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/{page-dd107bf1c7d52a90.js → page-e573437b0a1c728f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-294300625e49e4d3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-085847b088675978.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-9fe9d38c36999eb4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-d8ab4d1489223459.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-6141f67f531d8b6a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-295a02b1026b8255.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-1eb9a0e1e054209d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/{page-56adbe1a1f1379bd.js → page-82efa177a30f3741.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-d0be51cec4f62606.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-2e367075ffdbc062.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/{page-5d422f38c052967e.js → page-647ed2b66c1d49f1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-ba058c56e38f2792.js +1 -0
- package/apps/pwa/out/_next/static/css/5ef72a618a8994f3.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +13 -13
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +13 -13
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +13 -13
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +13 -13
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +13 -13
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +13 -13
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +13 -13
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +13 -13
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +13 -13
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +13 -13
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +13 -13
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +13 -13
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +13 -13
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +13 -13
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +13 -13
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +13 -13
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +13 -13
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +13 -13
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +13 -13
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +14 -14
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +13 -13
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +13 -13
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +13 -13
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +13 -13
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +13 -13
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +13 -13
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +13 -13
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +13 -13
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +13 -13
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +13 -13
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +13 -13
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +13 -13
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +13 -13
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +13 -13
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +13 -13
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +13 -13
- package/graphs/test-diet/recipes.yaml +9 -0
- package/graphs/test-diet/test-diet.yaml +22 -0
- package/package.json +2 -1
- package/persona-presets/_index.yaml +10 -0
- package/persona-presets/_schema.json +146 -0
- package/persona-presets/dana.yaml +26 -0
- package/persona-presets/haru.yaml +27 -0
- package/persona-presets/kai.yaml +27 -0
- package/persona-presets/leo.yaml +27 -0
- package/persona-presets/mira.yaml +30 -0
- package/persona-presets/nari.yaml +27 -0
- package/persona-presets/sora.yaml +27 -0
- package/persona-presets/yuna.yaml +27 -0
- package/plugins/geo-check/graphs/run-step.ts +34 -10
- package/scripts/field-feed/deliver-node.ts +8 -3
- package/scripts/field-feed/lib.ts +2 -0
- package/scripts/install.sh +20 -11
- package/scripts/persona-presets/lint.ts +79 -0
- package/scripts/release-loop/checklist-gate-node.ts +2 -2
- package/scripts/release-loop/gate-node.ts +27 -3
- package/scripts/release-loop/npm-publish-node.ts +10 -4
- package/scripts/release-loop/ops-upgrade-node.ts +11 -3
- package/scripts/release-loop/publish-node.ts +23 -1
- package/scripts/release-loop/shard-plan.ts +17 -0
- package/scripts/storyboard/storyboard.ts +167 -0
- package/scripts/test-diet/lib.ts +88 -0
- package/scripts/test-diet/node.ts +102 -0
- package/src/acp/auth-methods.ts +30 -0
- package/src/acp/server.ts +5 -5
- package/src/channel-import/detect.ts +191 -0
- package/src/channel-import/run.ts +111 -0
- package/src/cli/config-test-sync.ts +4 -0
- package/src/cli/decisions-cli.ts +13 -3
- package/src/cli/doctor-bundle.ts +128 -0
- package/src/cli/doctor-cli.ts +36 -1
- package/src/cli/doctor-local-llm.ts +95 -0
- package/src/cli/import-cli.ts +60 -0
- package/src/cli/mcp-login.ts +13 -4
- package/src/cli/persona-cli.ts +116 -0
- package/src/cli/release-cli.ts +8 -7
- package/src/cli/skills-cli.ts +173 -0
- package/src/cli/start-cli.ts +13 -4
- package/src/codex/setup.ts +15 -13
- package/src/dashboard/index.ts +17 -1
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +2 -2
- package/src/dashboard/slash-runtime/help-from-registry.ts +4 -2
- package/src/decisions/decision-cards.ts +291 -0
- package/src/decisions/decision-ledger.ts +5 -2
- package/src/decisions/discord-decision-cards.ts +133 -0
- package/src/decisions/telegram-decision-cards.ts +100 -0
- package/src/directives/version-at.ts +77 -0
- package/src/discord.ts +17 -0
- package/src/domains/outbound-alert.ts +44 -1
- package/src/domains/repeated-failure.ts +1 -1
- package/src/error-report/report.ts +200 -0
- package/src/exec-requests/planner.ts +8 -2
- package/src/exec-requests/runner.ts +64 -24
- package/src/exec-requests/store.ts +2 -0
- package/src/field/field-feed-auto.ts +48 -0
- package/src/field/field-reel.ts +8 -1
- package/src/hooks/error-report.ts +210 -0
- package/src/hooks/receiver.ts +41 -1
- package/src/import/apply.ts +128 -0
- package/src/import/plan.ts +197 -0
- package/src/index.ts +82 -7
- package/src/input-core/text-entry.ts +13 -5
- package/src/intake-plane/seat-answer.ts +96 -0
- package/src/intake-plane/seat-doc-route.ts +17 -3
- package/src/nexus/api/consult-requests.ts +19 -8
- package/src/nexus/api/error-reports.ts +108 -0
- package/src/nexus/api/http-server.ts +21 -1
- package/src/nexus/api/outbound-report.ts +7 -0
- package/src/nexus/api/running-runs-background.ts +68 -0
- package/src/nexus/api/running-runs-child.ts +6 -0
- package/src/nexus/api/share-captures.ts +91 -0
- package/src/nexus/api/skill-problems.ts +56 -0
- package/src/nexus/api/terminals.ts +24 -8
- package/src/nexus/index.ts +25 -1
- package/src/nexus/setup-status.ts +7 -2
- package/src/oauth/browser-availability.ts +14 -0
- package/src/oauth/codex-quota-policy.ts +16 -0
- package/src/onboarding/continue-here.ts +13 -8
- package/src/onboarding/web-first.ts +8 -1
- package/src/onboarding.ts +66 -12
- package/src/persona/presets.ts +105 -0
- package/src/release-loop/checklist.ts +28 -5
- package/src/self-dev/orchestrate.ts +18 -11
- package/src/shell-env-bootstrap.ts +44 -7
- package/src/skills/connect-claude-plugin.ts +142 -0
- package/src/skills/connect.ts +70 -0
- package/src/skills/index.ts +29 -1
- package/src/skills/repair.ts +124 -0
- package/src/skills/runner.ts +11 -2
- package/src/skills/trigger-extract.ts +1 -1
- package/src/task-orchestrator/surfaces/pod-command-job.ts +16 -8
- package/src/telegram-commands.ts +13 -0
- package/src/telegram.ts +34 -0
- package/src/user-config.ts +111 -13
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/4836-2eba6079f31b88d4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8067-f74bf14d67ad98f1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8519-f6b5d8a5833a7603.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8894-e92491a164192cc1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9740-67051141115ce775.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9804-64c02c3c127d5014.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-d5ebde04844689e6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-10ed24f413ed66e9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-211810b6c93ab66a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-80497e93a878ddc5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-cee86394de407aa6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-4ff8edab44196b8c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-92e4f44428d5e290.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-2a05dfe80c8bdf16.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-d9979633aa82f8e6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-f7857826c2f97ad7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-9699b1786be6171d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-43dd772aee8af75f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-973ab7af59c718b7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-a9f8d3865b91e436.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-d42b99cdfb9f27c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-2764ff40dad5a995.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-c5f1152db116ff96.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-f933bca81ea38a6f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-c1c95739c0bff3b8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-a7aaffcf771662d8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-71d18eec33b9c667.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-2c4e59079ee357ac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-a81f113f3ef89d72.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-fc27b00e20733146.js +0 -1
- package/apps/pwa/out/_next/static/css/f537bdb19c69306a.css +0 -1
- /package/apps/pwa/out/_next/static/{keajW7DDyghEs1y8oJe6T → lywc8m_HDzH9MKSDQhyEj}/_buildManifest.js +0 -0
- /package/apps/pwa/out/_next/static/{keajW7DDyghEs1y8oJe6T → lywc8m_HDzH9MKSDQhyEj}/_ssgManifest.js +0 -0
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
|
-
2:I[67976,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","
|
|
3
|
-
3:I[12248,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","
|
|
4
|
-
4:I[38519,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","
|
|
5
|
-
5:I[8687,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","
|
|
6
|
-
6:I[94936,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","
|
|
7
|
-
7:I[85039,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","
|
|
8
|
-
8:I[21545,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","
|
|
9
|
-
9:I[
|
|
10
|
-
a:I[51411,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","
|
|
2
|
+
2:I[67976,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","7032","static/chunks/7032-f4ef698518fba61c.js","8519","static/chunks/8519-5632377cce994f86.js","2375","static/chunks/2375-cb6debea56cce4fb.js","9454","static/chunks/9454-a3e0953307216c58.js","8067","static/chunks/8067-d976b441a104ab74.js","8619","static/chunks/8619-4365e03a2862830f.js","5791","static/chunks/5791-bb82743fa6299562.js","7177","static/chunks/app/layout-9567560270857531.js"],"ServiceWorkerRegister"]
|
|
3
|
+
3:I[12248,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","7032","static/chunks/7032-f4ef698518fba61c.js","8519","static/chunks/8519-5632377cce994f86.js","2375","static/chunks/2375-cb6debea56cce4fb.js","9454","static/chunks/9454-a3e0953307216c58.js","8067","static/chunks/8067-d976b441a104ab74.js","8619","static/chunks/8619-4365e03a2862830f.js","5791","static/chunks/5791-bb82743fa6299562.js","7177","static/chunks/app/layout-9567560270857531.js"],"NewBuildBanner"]
|
|
4
|
+
4:I[38519,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","7032","static/chunks/7032-f4ef698518fba61c.js","8519","static/chunks/8519-5632377cce994f86.js","2375","static/chunks/2375-cb6debea56cce4fb.js","9454","static/chunks/9454-a3e0953307216c58.js","8067","static/chunks/8067-d976b441a104ab74.js","8619","static/chunks/8619-4365e03a2862830f.js","5791","static/chunks/5791-bb82743fa6299562.js","7177","static/chunks/app/layout-9567560270857531.js"],"DaemonProvider"]
|
|
5
|
+
5:I[8687,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","7032","static/chunks/7032-f4ef698518fba61c.js","8519","static/chunks/8519-5632377cce994f86.js","2375","static/chunks/2375-cb6debea56cce4fb.js","9454","static/chunks/9454-a3e0953307216c58.js","8067","static/chunks/8067-d976b441a104ab74.js","8619","static/chunks/8619-4365e03a2862830f.js","5791","static/chunks/5791-bb82743fa6299562.js","7177","static/chunks/app/layout-9567560270857531.js"],"NexusClientProvider"]
|
|
6
|
+
6:I[94936,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","7032","static/chunks/7032-f4ef698518fba61c.js","8519","static/chunks/8519-5632377cce994f86.js","2375","static/chunks/2375-cb6debea56cce4fb.js","9454","static/chunks/9454-a3e0953307216c58.js","8067","static/chunks/8067-d976b441a104ab74.js","8619","static/chunks/8619-4365e03a2862830f.js","5791","static/chunks/5791-bb82743fa6299562.js","7177","static/chunks/app/layout-9567560270857531.js"],"ThemeProvider"]
|
|
7
|
+
7:I[85039,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","7032","static/chunks/7032-f4ef698518fba61c.js","8519","static/chunks/8519-5632377cce994f86.js","2375","static/chunks/2375-cb6debea56cce4fb.js","9454","static/chunks/9454-a3e0953307216c58.js","8067","static/chunks/8067-d976b441a104ab74.js","8619","static/chunks/8619-4365e03a2862830f.js","5791","static/chunks/5791-bb82743fa6299562.js","7177","static/chunks/app/layout-9567560270857531.js"],"TooltipProvider"]
|
|
8
|
+
8:I[21545,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","7032","static/chunks/7032-f4ef698518fba61c.js","8519","static/chunks/8519-5632377cce994f86.js","2375","static/chunks/2375-cb6debea56cce4fb.js","9454","static/chunks/9454-a3e0953307216c58.js","8067","static/chunks/8067-d976b441a104ab74.js","8619","static/chunks/8619-4365e03a2862830f.js","5791","static/chunks/5791-bb82743fa6299562.js","7177","static/chunks/app/layout-9567560270857531.js"],"ToastProvider"]
|
|
9
|
+
9:I[85258,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","7032","static/chunks/7032-f4ef698518fba61c.js","8519","static/chunks/8519-5632377cce994f86.js","2375","static/chunks/2375-cb6debea56cce4fb.js","9454","static/chunks/9454-a3e0953307216c58.js","8067","static/chunks/8067-d976b441a104ab74.js","8619","static/chunks/8619-4365e03a2862830f.js","5791","static/chunks/5791-bb82743fa6299562.js","7177","static/chunks/app/layout-9567560270857531.js"],"AppShell"]
|
|
10
|
+
a:I[51411,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","6062","static/chunks/6062-73e68343a9814f6a.js","7990","static/chunks/7990-e12efba616f46e03.js","6998","static/chunks/6998-a654fe5c58271600.js","1201","static/chunks/1201-09613bce624467c0.js","7032","static/chunks/7032-f4ef698518fba61c.js","8519","static/chunks/8519-5632377cce994f86.js","2375","static/chunks/2375-cb6debea56cce4fb.js","9454","static/chunks/9454-a3e0953307216c58.js","8067","static/chunks/8067-d976b441a104ab74.js","8619","static/chunks/8619-4365e03a2862830f.js","5791","static/chunks/5791-bb82743fa6299562.js","7177","static/chunks/app/layout-9567560270857531.js"],"MaturityBanner"]
|
|
11
11
|
b:I[57048,[],""]
|
|
12
12
|
c:I[75854,[],""]
|
|
13
|
-
d:I[70766,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","7990","static/chunks/7990-e12efba616f46e03.js","6416","static/chunks/6416-505ba707cacafbba.js","9454","static/chunks/9454-a3e0953307216c58.js","4345","static/chunks/app/not-found-
|
|
13
|
+
d:I[70766,["2977","static/chunks/2977-e38442e86289f1d3.js","920","static/chunks/920-f7dceb78f1c585ef.js","7990","static/chunks/7990-e12efba616f46e03.js","6416","static/chunks/6416-505ba707cacafbba.js","9454","static/chunks/9454-a3e0953307216c58.js","4345","static/chunks/app/not-found-1ba4a5d857276334.js"],"default"]
|
|
14
14
|
e:I[79013,[],"ClientPageRoot"]
|
|
15
|
-
f:I[81403,["920","static/chunks/920-f7dceb78f1c585ef.js","6998","static/chunks/6998-a654fe5c58271600.js","2375","static/chunks/2375-cb6debea56cce4fb.js","2975","static/chunks/app/worktrees/page-
|
|
15
|
+
f:I[81403,["920","static/chunks/920-f7dceb78f1c585ef.js","6998","static/chunks/6998-a654fe5c58271600.js","2375","static/chunks/2375-cb6debea56cce4fb.js","2975","static/chunks/app/worktrees/page-ba058c56e38f2792.js"],"default"]
|
|
16
16
|
12:I[78357,[],"OutletBoundary"]
|
|
17
17
|
14:I[70112,[],"AsyncMetadataOutlet"]
|
|
18
18
|
16:I[78357,[],"ViewportBoundary"]
|
|
@@ -20,9 +20,9 @@ f:I[81403,["920","static/chunks/920-f7dceb78f1c585ef.js","6998","static/chunks/6
|
|
|
20
20
|
19:"$Sreact.suspense"
|
|
21
21
|
1b:I[26324,[],""]
|
|
22
22
|
:HL["/app/_next/static/media/22a5144ee8d83bca-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
23
|
-
:HL["/app/_next/static/css/
|
|
23
|
+
:HL["/app/_next/static/css/5ef72a618a8994f3.css","style"]
|
|
24
24
|
:HL["/app/_next/static/css/04dabcbcc4bfa6db.css","style"]
|
|
25
|
-
0:{"P":null,"b":"
|
|
25
|
+
0:{"P":null,"b":"lywc8m_HDzH9MKSDQhyEj","p":"/app","c":["","worktrees",""],"i":false,"f":[[["",{"children":["worktrees",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/app/_next/static/css/5ef72a618a8994f3.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/app/_next/static/css/04dabcbcc4bfa6db.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"ko","className":"font-sans __variable_45c93f","children":[["$","head",null,{"children":["$","link",null,{"rel":"preload","as":"font","type":"font/ttf","href":"/app/fonts/JetBrainsMonoNerdFontMono-Regular.ttf","crossOrigin":"anonymous"}]}],["$","body",null,{"className":"min-h-screen bg-background text-foreground antialiased","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","$L4",null,{"children":["$","$L5",null,{"children":["$","$L6",null,{"children":["$","$L7",null,{"children":["$","$L8",null,{"children":["$","$L9",null,{"children":[["$","$La",null,{}],["$","$Lb",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$Lc",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","$Ld",null,{}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]]}]}]}]}]}]}]]}]]}]]}],{"children":["worktrees",["$","$1","c",{"children":[null,["$","$Lb",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$Lc",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$Le",null,{"Component":"$f","searchParams":{},"params":{},"promises":["$@10","$@11"]}],null,["$","$L12",null,{"children":["$L13",["$","$L14",null,{"promise":"$@15"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$L16",null,{"children":"$L17"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L18",null,{"children":["$","div",null,{"hidden":true,"children":["$","$19",null,{"fallback":null,"children":"$L1a"}]}]}]]}],false]],"m":"$undefined","G":["$1b",[]],"s":false,"S":true}
|
|
26
26
|
10:{}
|
|
27
27
|
11:"$0:f:0:1:2:children:2:children:1:props:children:0:props:params"
|
|
28
28
|
17:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1"}],["$","meta","2",{"name":"theme-color","content":"#1e1e2e"}]]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# TD2 — daily test review (shadow): pick a cost-weighted slice from the cursor ledger, measure each file alone on a
|
|
2
|
+
# remote host, judge mechanically, append one ledger line «#a~#b» and draft a card. It never deletes or moves a test.
|
|
3
|
+
# Inputs: budgetSecs (default 1800) · remote (default node-b) · mirror (default ~/mirror/elanous-agent.git)
|
|
4
|
+
graph_id: test-diet
|
|
5
|
+
loop:
|
|
6
|
+
title: 시험 들여다보기
|
|
7
|
+
description: 매일 시험 한 조각을 단독으로 재고 판정 초안을 남긴다
|
|
8
|
+
trigger:
|
|
9
|
+
events: [manual]
|
|
10
|
+
version: 1
|
|
11
|
+
entry_node: pick
|
|
12
|
+
terminal_nodes: [done, failed]
|
|
13
|
+
nodes:
|
|
14
|
+
- { node_id: pick, kind: judge, recipe: 'cmd:pick', max_visits: 1 }
|
|
15
|
+
- { node_id: measure, kind: gate, recipe: 'cmd:measure', max_visits: 1 }
|
|
16
|
+
- { node_id: record, kind: judge, recipe: 'cmd:record', max_visits: 1 }
|
|
17
|
+
- { node_id: done, kind: gate, max_visits: 1 }
|
|
18
|
+
- { node_id: failed, kind: gate, max_visits: 1 }
|
|
19
|
+
edges:
|
|
20
|
+
- { from: pick, on: outcome, map: { ok: measure, fail: failed, error: failed } }
|
|
21
|
+
- { from: measure, on: outcome, map: { ok: record, fail: failed, error: failed } }
|
|
22
|
+
- { from: record, on: outcome, map: { ok: done, fail: failed, error: failed } }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "elanous",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "Self-healing coding harness where eyes, hands, and memory all turn on one sentence — it authors its own goals, implements them in isolated worktrees, and reviews its own work.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Elanvital AI",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"templates/",
|
|
30
30
|
"catalog/",
|
|
31
31
|
"personas/",
|
|
32
|
+
"persona-presets/",
|
|
32
33
|
"graphs/",
|
|
33
34
|
"apps/pwa/out/",
|
|
34
35
|
".python-version",
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Elanous 페르소나 프리셋 — 고르고 꾸미는 AI 동료의 출발점(일반인용 여덟).
|
|
2
|
+
# 파일 하나 = 프리셋 하나(persona-presets/<personaId>.yaml) · 형식 = _schema.json · 쓰는 법 = `elanous persona list|show|add`.
|
|
3
|
+
# 직함(COO·CMO·CTO·CXO)은 고를 수 있는 선택 칸이다 — 기본은 없음.
|
|
4
|
+
# tools 의 optional: true = 공식 묶음에 아직 없는 도구 — 따로 설치했을 때만 쓴다.
|
|
5
|
+
common:
|
|
6
|
+
loop_start: 그림자 — 초안만 만들고 밖으로 보내지 않는다. 사용자가 «이제 맡겨도 돼»를 누르면 실제로 돈다.
|
|
7
|
+
always_ask: [돈이 드는 일, 밖으로 보내는 일(메일·게시·공유), 지우는 일, 다른 사람의 연락처·사진]
|
|
8
|
+
memory: 이 페르소나와의 대화와 맡긴 일만 · 다른 페르소나와 나누려면 사용자가 켠다
|
|
9
|
+
title: 기본 없음 · 사용자가 붙일 수 있다(예 마케터에 «CMO»)
|
|
10
|
+
presets: [haru, mira, sora, kai, dana, yuna, leo, nari]
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://elanous.ai/schemas/persona-preset.json",
|
|
4
|
+
"title": "Elanous persona preset",
|
|
5
|
+
"description": "정본 = persona-presets/<personaId>.yaml. 도구(tools)는 공식 묶음에 있는 것 · 없는 것은 optional: true(따로 설치했을 때만).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"personaId",
|
|
9
|
+
"displayName",
|
|
10
|
+
"names",
|
|
11
|
+
"role",
|
|
12
|
+
"oneLine",
|
|
13
|
+
"voice",
|
|
14
|
+
"tasks",
|
|
15
|
+
"tools",
|
|
16
|
+
"firstQuestions",
|
|
17
|
+
"doesNot",
|
|
18
|
+
"forWhom"
|
|
19
|
+
],
|
|
20
|
+
"additionalProperties": false,
|
|
21
|
+
"properties": {
|
|
22
|
+
"personaId": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"pattern": "^[a-z][a-z0-9-]{1,30}$"
|
|
25
|
+
},
|
|
26
|
+
"displayName": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"description": "기본 이름 · 한국어 · 영어"
|
|
29
|
+
},
|
|
30
|
+
"names": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"minItems": 2,
|
|
33
|
+
"items": {
|
|
34
|
+
"type": "string"
|
|
35
|
+
},
|
|
36
|
+
"description": "이름 후보(첫째가 기본)"
|
|
37
|
+
},
|
|
38
|
+
"role": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"description": "무슨 동료인가 — 비서·마케터… (직함 아님)"
|
|
41
|
+
},
|
|
42
|
+
"title": {
|
|
43
|
+
"type": [
|
|
44
|
+
"string",
|
|
45
|
+
"null"
|
|
46
|
+
],
|
|
47
|
+
"description": "선택 직함(COO·CMO·CTO·CXO) — 기본 null"
|
|
48
|
+
},
|
|
49
|
+
"oneLine": {
|
|
50
|
+
"type": "string"
|
|
51
|
+
},
|
|
52
|
+
"voice": {
|
|
53
|
+
"type": "object",
|
|
54
|
+
"required": [
|
|
55
|
+
"rule",
|
|
56
|
+
"examples"
|
|
57
|
+
],
|
|
58
|
+
"additionalProperties": false,
|
|
59
|
+
"properties": {
|
|
60
|
+
"rule": {
|
|
61
|
+
"type": "string"
|
|
62
|
+
},
|
|
63
|
+
"examples": {
|
|
64
|
+
"type": "array",
|
|
65
|
+
"minItems": 2,
|
|
66
|
+
"maxItems": 2,
|
|
67
|
+
"items": {
|
|
68
|
+
"type": "string"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"tasks": {
|
|
74
|
+
"type": "array",
|
|
75
|
+
"minItems": 3,
|
|
76
|
+
"maxItems": 3,
|
|
77
|
+
"items": {
|
|
78
|
+
"type": "object",
|
|
79
|
+
"required": [
|
|
80
|
+
"when",
|
|
81
|
+
"what"
|
|
82
|
+
],
|
|
83
|
+
"additionalProperties": false,
|
|
84
|
+
"properties": {
|
|
85
|
+
"when": {
|
|
86
|
+
"type": "string"
|
|
87
|
+
},
|
|
88
|
+
"what": {
|
|
89
|
+
"type": "string"
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"tools": {
|
|
95
|
+
"type": "array",
|
|
96
|
+
"minItems": 1,
|
|
97
|
+
"items": {
|
|
98
|
+
"type": "object",
|
|
99
|
+
"required": [
|
|
100
|
+
"name",
|
|
101
|
+
"from"
|
|
102
|
+
],
|
|
103
|
+
"additionalProperties": false,
|
|
104
|
+
"properties": {
|
|
105
|
+
"name": {
|
|
106
|
+
"type": "string"
|
|
107
|
+
},
|
|
108
|
+
"from": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"description": "core | 공식 묶음 이름 | plugins/<이름>"
|
|
111
|
+
},
|
|
112
|
+
"optional": {
|
|
113
|
+
"type": "boolean",
|
|
114
|
+
"description": "공식 묶음에 아직 없는 도구 — 따로 설치했을 때만 쓴다"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"firstQuestions": {
|
|
120
|
+
"type": "array",
|
|
121
|
+
"minItems": 2,
|
|
122
|
+
"maxItems": 3,
|
|
123
|
+
"items": {
|
|
124
|
+
"type": "string"
|
|
125
|
+
},
|
|
126
|
+
"description": "고른 직후 처음 묻는 칸"
|
|
127
|
+
},
|
|
128
|
+
"askBefore": {
|
|
129
|
+
"type": "array",
|
|
130
|
+
"items": {
|
|
131
|
+
"type": "string"
|
|
132
|
+
},
|
|
133
|
+
"description": "공통 칸 외에 이 페르소나가 꼭 묻는 것"
|
|
134
|
+
},
|
|
135
|
+
"doesNot": {
|
|
136
|
+
"type": "array",
|
|
137
|
+
"minItems": 2,
|
|
138
|
+
"items": {
|
|
139
|
+
"type": "string"
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"forWhom": {
|
|
143
|
+
"type": "string"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
personaId: dana
|
|
2
|
+
displayName: 다나 · Dana
|
|
3
|
+
names: [다나, 도윤, Dana]
|
|
4
|
+
role: 코치
|
|
5
|
+
title: null
|
|
6
|
+
oneLine: 목표를 쪼개 매주 같이 점검하는 코치.
|
|
7
|
+
voice:
|
|
8
|
+
rule: 따뜻하지만 분명하게. 칭찬은 구체적으로, 질문은 하나씩.
|
|
9
|
+
examples:
|
|
10
|
+
- 이번 주 계획 다섯 중 넷을 했습니다. 남은 하나는 다음 주로 옮길까요, 줄일까요?
|
|
11
|
+
- 오늘 한 것 한 줄만 알려 주세요.
|
|
12
|
+
tasks:
|
|
13
|
+
- { when: 목표를 정하면, what: 4주 계획으로 쪼갠다 }
|
|
14
|
+
- { when: 매일 저녁, what: 오늘 한 것을 한 줄 묻고 기록한다 }
|
|
15
|
+
- { when: 매주, what: 계획 대비 진행을 정리하고 다음 주를 함께 조정한다 }
|
|
16
|
+
tools:
|
|
17
|
+
- { name: grill-me, from: elanous-basics }
|
|
18
|
+
- { name: job-coach, from: job-coach }
|
|
19
|
+
firstQuestions:
|
|
20
|
+
- 4주 뒤에 무엇이 달라져 있으면 좋겠어요?
|
|
21
|
+
- 하루 중 언제 물어볼까요?
|
|
22
|
+
askBefore: [계획을 크게 바꾸기, 다른 사람에게 진행 공유하기]
|
|
23
|
+
doesNot:
|
|
24
|
+
- 건강·의료·법률 판단을 대신하지 않는다
|
|
25
|
+
- 기록을 다른 사람에게 보여 주지 않는다
|
|
26
|
+
forWhom: 습관·공부·커리어 목표가 있는 사람
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
personaId: haru
|
|
2
|
+
displayName: 하루 · Haru
|
|
3
|
+
names: [하루, 소담, Haru]
|
|
4
|
+
role: 개인 비서
|
|
5
|
+
title: null
|
|
6
|
+
oneLine: 흩어진 링크·문서·사진을 먼저 정리해 두는 비서.
|
|
7
|
+
voice:
|
|
8
|
+
rule: 짧고 정중하게. 해야 할 일을 먼저, 이유는 한 줄로.
|
|
9
|
+
examples:
|
|
10
|
+
- 오늘 받은 링크 세 개를 요약해 «나중에 읽기»에 넣어 두었습니다. 그중 하나는 답장이 필요해 보입니다.
|
|
11
|
+
- 이번 주 정리 한 장을 만들었습니다. 다음 주로 넘어간 일이 두 개 있습니다 — 확인해 주시겠어요?
|
|
12
|
+
tasks:
|
|
13
|
+
- { when: 링크·문서를 받으면, what: 바로 요약해 «나중에 읽기»에 쌓는다 }
|
|
14
|
+
- { when: 서류·영수증 사진을 받으면, what: 글자로 옮겨 찾을 수 있게 둔다 }
|
|
15
|
+
- { when: 매주 금요일, what: 이번 주 맡긴 일과 남은 일을 한 장으로 정리한다 }
|
|
16
|
+
tools:
|
|
17
|
+
- { name: omni-digest, from: elanous-basics }
|
|
18
|
+
- { name: photo-intake-ocr, from: elanous-basics }
|
|
19
|
+
- { name: doc-draft, from: doc-draft, optional: true }
|
|
20
|
+
firstQuestions:
|
|
21
|
+
- 주로 어디서 링크·문서를 받으세요? (메신저 · 메일 · 직접 붙여 넣기)
|
|
22
|
+
- 주간 정리는 무슨 요일, 몇 시에 받을까요?
|
|
23
|
+
askBefore: [대신 답장하기]
|
|
24
|
+
doesNot:
|
|
25
|
+
- 대신 답장하거나 일정을 수락·거절하지 않는다
|
|
26
|
+
- 사진 속 다른 사람의 개인정보를 따로 모으지 않는다
|
|
27
|
+
forWhom: 일이 여러 곳에서 오는 직장인 · 1인 사업자
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
personaId: kai
|
|
2
|
+
displayName: 카이 · Kai
|
|
3
|
+
names: [카이, 준, Kai]
|
|
4
|
+
role: 개발 도우미
|
|
5
|
+
title: null
|
|
6
|
+
oneLine: 한 줄로 맡기면 코드를 고쳐 PR 까지 올려 오는 개발 도우미.
|
|
7
|
+
voice:
|
|
8
|
+
rule: 군더더기 없이. 바꾼 것 · 시험한 것 · 남은 것을 나눠 말한다.
|
|
9
|
+
examples:
|
|
10
|
+
- 상태 명령에 --json 을 넣었습니다. 바꾼 파일 둘 · 시험 통과 · PR 을 열었습니다.
|
|
11
|
+
- 기존 시험 하나가 이 변경과 무관하게 실패합니다 — 고칠까요, 따로 둘까요?
|
|
12
|
+
tasks:
|
|
13
|
+
- { when: 변경을 맡기면, what: 격리된 작업 공간에서 구현하고 시험한 뒤 PR 로 올린다 }
|
|
14
|
+
- { when: 새 저장소를 열면, what: 구조와 실행 방법을 한 장으로 정리한다 }
|
|
15
|
+
- { when: 오류 메시지를 받으면, what: 관련 문서·이슈를 찾아 원인 후보를 정리한다 }
|
|
16
|
+
tools:
|
|
17
|
+
- { name: harness, from: core }
|
|
18
|
+
- { name: project-onboarding, from: elanous-basics }
|
|
19
|
+
- { name: omni-crawl, from: elanous-basics }
|
|
20
|
+
firstQuestions:
|
|
21
|
+
- 작업할 저장소는 어디인가요?
|
|
22
|
+
- PR 을 자동으로 병합해도 될까요, 직접 보고 병합하실래요?
|
|
23
|
+
askBefore: [병합(설정에 따라), 배포, 비밀 키 다루기]
|
|
24
|
+
doesNot:
|
|
25
|
+
- 비밀 키를 출력하거나 저장소에 넣지 않는다
|
|
26
|
+
- 맡기지 않은 파일을 크게 고치지 않는다
|
|
27
|
+
forWhom: 개발자 · 사이드 프로젝트 하는 사람 · 기술 창업자
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
personaId: leo
|
|
2
|
+
displayName: 레오 · Leo
|
|
3
|
+
names: [레오, 태오, Leo]
|
|
4
|
+
role: 영업 파트너
|
|
5
|
+
title: null
|
|
6
|
+
oneLine: 만난 사람을 놓치지 않게 정리하고 다음 연락을 준비하는 영업 파트너.
|
|
7
|
+
voice:
|
|
8
|
+
rule: 실무적으로. 상대 회사의 사실과 추정을 나눠 쓴다.
|
|
9
|
+
examples:
|
|
10
|
+
- 명함의 회사를 찾아 정리했습니다. 확인된 것과 추정한 것을 나눠 적었습니다.
|
|
11
|
+
- 첫 연락 메일 초안입니다. 보내는 것은 직접 해 주세요.
|
|
12
|
+
tasks:
|
|
13
|
+
- { when: 명함을 받으면, what: 상대 회사 분석과 연락 기록 한 줄을 만든다 }
|
|
14
|
+
- { when: 분석이 끝나면, what: 첫 연락 메일 초안을 쓴다 }
|
|
15
|
+
- { when: 미팅 전날, what: 상대 회사 최근 소식을 요약한다 }
|
|
16
|
+
tools:
|
|
17
|
+
- { name: card-followup, from: card-followup, optional: true }
|
|
18
|
+
- { name: omni-crawl, from: elanous-basics }
|
|
19
|
+
- { name: omni-digest, from: elanous-basics }
|
|
20
|
+
firstQuestions:
|
|
21
|
+
- 무엇을 파세요? 한 줄이면 됩니다.
|
|
22
|
+
- 첫 연락은 주로 어떤 말로 하세요? (공식적 · 편하게)
|
|
23
|
+
askBefore: [메일 보내기, 연락처를 다른 곳에 저장하기]
|
|
24
|
+
doesNot:
|
|
25
|
+
- 메일을 대신 보내지 않는다
|
|
26
|
+
- 명함 사진을 분석 말고 다른 곳에 쓰지 않는다(분석은 외부 AI 로 보낸다고 먼저 알린다)
|
|
27
|
+
forWhom: 영업 담당 · 행사·네트워킹이 많은 사람 · 창업자
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
personaId: mira
|
|
2
|
+
displayName: 미라 · Mira
|
|
3
|
+
names: [미라, 하나, Mira]
|
|
4
|
+
role: 마케터
|
|
5
|
+
title: null
|
|
6
|
+
oneLine: 시장과 경쟁을 보고 콘텐츠 초안까지 써 오는 마케터.
|
|
7
|
+
voice:
|
|
8
|
+
rule: 근거 먼저, 숫자는 출처와 함께. 과장하지 않는다.
|
|
9
|
+
examples:
|
|
10
|
+
- 이번 주 업계 소식 다섯 건을 출처와 함께 정리했습니다. 우리와 직접 관련된 것은 두 건입니다.
|
|
11
|
+
- 블로그 초안과 SNS 세 줄을 같은 소재로 만들어 두었습니다. 게시는 확인해 주신 뒤에만 합니다.
|
|
12
|
+
tasks:
|
|
13
|
+
- { when: 매주, what: 우리 분야 뉴스·경쟁 소식을 출처 링크와 함께 정리한다 }
|
|
14
|
+
- { when: 매달, what: 우리 브랜드가 AI 답변에 어떻게 나오는지 점검한다 }
|
|
15
|
+
- { when: 명함을 받으면, what: 상대 회사 분석과 첫 연락 초안을 만든다 }
|
|
16
|
+
tools:
|
|
17
|
+
- { name: omni-crawl, from: elanous-basics }
|
|
18
|
+
- { name: omni-digest, from: elanous-basics }
|
|
19
|
+
- { name: geo-check, from: geo-check, optional: true }
|
|
20
|
+
- { name: card-followup, from: card-followup, optional: true }
|
|
21
|
+
- { name: doc-draft, from: doc-draft, optional: true }
|
|
22
|
+
firstQuestions:
|
|
23
|
+
- 우리 브랜드(또는 회사) 이름과 웹사이트 주소는요?
|
|
24
|
+
- 지켜볼 경쟁사나 키워드를 셋까지 알려 주세요.
|
|
25
|
+
- 초안은 어디에 올릴 글로 쓸까요? (블로그 · 인스타그램 · 링크드인)
|
|
26
|
+
askBefore: [게시, 광고 집행, 메일 보내기]
|
|
27
|
+
doesNot:
|
|
28
|
+
- 확인 없이 게시하거나 광고비를 쓰지 않는다
|
|
29
|
+
- 출처 없는 숫자를 쓰지 않는다
|
|
30
|
+
forWhom: 1인 마케터 · 작은 팀의 홍보 담당 · 창업자
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
personaId: nari
|
|
2
|
+
displayName: 나리 · Nari
|
|
3
|
+
names: [나리, 시우, Nari]
|
|
4
|
+
role: 학습 도우미
|
|
5
|
+
title: null
|
|
6
|
+
oneLine: 필기·자료를 정리된 노트와 복습 문제로 바꿔 주는 학습 도우미.
|
|
7
|
+
voice:
|
|
8
|
+
rule: 쉽게, 단계별로. 어려운 말은 풀어서.
|
|
9
|
+
examples:
|
|
10
|
+
- 손필기 사진 여섯 장을 노트 한 편으로 옮겼습니다. 흐린 두 줄은 표시해 두었습니다.
|
|
11
|
+
- 이 노트로 복습 문제 열 개를 만들었습니다. 오늘 다섯 개만 풀어 볼까요?
|
|
12
|
+
tasks:
|
|
13
|
+
- { when: 필기 사진을 받으면, what: 글자로 옮겨 정리된 노트로 만든다 }
|
|
14
|
+
- { when: 학교·회사 한글 문서를 받으면, what: 읽기 쉬운 글로 옮긴다 }
|
|
15
|
+
- { when: 노트가 생기면, what: 복습 문제를 만들고 시험 날짜에 맞춰 복습 순서를 짠다 }
|
|
16
|
+
tools:
|
|
17
|
+
- { name: photo-intake-ocr, from: elanous-basics }
|
|
18
|
+
- { name: hwp-read, from: elanous-hwp }
|
|
19
|
+
- { name: omni-digest, from: elanous-basics }
|
|
20
|
+
firstQuestions:
|
|
21
|
+
- 무슨 과목(또는 시험)을 준비하세요?
|
|
22
|
+
- 시험이나 발표 날짜가 정해져 있나요?
|
|
23
|
+
askBefore: [노트를 공유·게시하기]
|
|
24
|
+
doesNot:
|
|
25
|
+
- 시험 답을 대신 써 주지 않는다 — 풀이 과정을 같이 본다
|
|
26
|
+
- 다른 사람의 필기를 허락 없이 옮기지 않는다
|
|
27
|
+
forWhom: 학생 · 자격증 준비생 · 사내 교육을 듣는 직장인
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
personaId: sora
|
|
2
|
+
displayName: 소라 · Sora
|
|
3
|
+
names: [소라, 이안, Sora]
|
|
4
|
+
role: 리서처
|
|
5
|
+
title: null
|
|
6
|
+
oneLine: 질문 하나로 자료를 모아 출처를 단 보고서를 써 오는 리서처.
|
|
7
|
+
voice:
|
|
8
|
+
rule: 차분하고 정확하게. 모르는 것은 «확인 못 함»이라고 쓴다.
|
|
9
|
+
examples:
|
|
10
|
+
- 자료 여덟 곳을 읽고 보고서 한 장으로 묶었습니다. 두 곳은 서로 말이 달라 둘 다 적어 두었습니다.
|
|
11
|
+
- 이 숫자는 원문을 찾지 못해 «확인 못 함»으로 남겼습니다.
|
|
12
|
+
tasks:
|
|
13
|
+
- { when: 주제를 맡기면, what: 여러 각도로 찾아 출처가 붙은 보고서로 정리한다 }
|
|
14
|
+
- { when: 매주, what: 지켜보는 주제의 새 소식만 묶어 보낸다 }
|
|
15
|
+
- { when: 긴 글·문서 링크를 받으면, what: 핵심만 요약한다 }
|
|
16
|
+
tools:
|
|
17
|
+
- { name: omni-crawl, from: elanous-basics }
|
|
18
|
+
- { name: omni-digest, from: elanous-basics }
|
|
19
|
+
- { name: doc-draft, from: doc-draft, optional: true }
|
|
20
|
+
firstQuestions:
|
|
21
|
+
- 무엇을 알고 싶으세요? 한 문장이면 됩니다.
|
|
22
|
+
- 보고서는 얼마나 길게 받을까요? (한 장 · 자세히)
|
|
23
|
+
askBefore: [유료 자료 구입, 결론을 밖으로 공유하기]
|
|
24
|
+
doesNot:
|
|
25
|
+
- 출처를 지어내지 않는다
|
|
26
|
+
- 확인하지 못한 것을 사실처럼 쓰지 않는다
|
|
27
|
+
forWhom: 기획자 · 대학원생 · 컨설턴트 · 투자를 검토하는 사람
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
personaId: yuna
|
|
2
|
+
displayName: 유나 · Yuna
|
|
3
|
+
names: [유나, 서하, Yuna]
|
|
4
|
+
role: 작가
|
|
5
|
+
title: null
|
|
6
|
+
oneLine: 메모를 글로, 글을 여러 모양으로 바꿔 주는 작가.
|
|
7
|
+
voice:
|
|
8
|
+
rule: 사용자의 문체를 따라 쓴다. 고친 곳은 이유를 한 줄로.
|
|
9
|
+
examples:
|
|
10
|
+
- 메모 네 개로 초안을 썼습니다. 둘째 문단은 순서를 바꿨습니다 — 결론이 먼저 오게.
|
|
11
|
+
- 같은 글을 뉴스레터 길이와 SNS 세 줄로도 만들어 두었습니다.
|
|
12
|
+
tasks:
|
|
13
|
+
- { when: 메모·자료를 받으면, what: 글 초안으로 만든다 }
|
|
14
|
+
- { when: 글 하나를 받으면, what: 블로그·뉴스레터·SNS 길이로 다시 쓴다 }
|
|
15
|
+
- { when: 한글 문서가 필요하면, what: 정해진 서식(HWPX)에 맞춰 옮긴다 }
|
|
16
|
+
tools:
|
|
17
|
+
- { name: omni-digest, from: elanous-basics }
|
|
18
|
+
- { name: doc-draft, from: doc-draft, optional: true }
|
|
19
|
+
- { name: hwp-write, from: elanous-hwp }
|
|
20
|
+
firstQuestions:
|
|
21
|
+
- 전에 쓴 글을 하나 보여 주시겠어요? 문체를 맞추겠습니다.
|
|
22
|
+
- 주로 어디에 실을 글인가요?
|
|
23
|
+
askBefore: [게시, 다른 사람 글 인용 범위]
|
|
24
|
+
doesNot:
|
|
25
|
+
- 다른 사람의 글을 출처 없이 옮기지 않는다
|
|
26
|
+
- 확인 없이 게시하지 않는다
|
|
27
|
+
forWhom: 블로거 · 뉴스레터 운영자 · 보고서를 자주 쓰는 사람
|
|
@@ -158,18 +158,42 @@ async function run(step: string): Promise<void> {
|
|
|
158
158
|
if (!table.length) throw new Error('missing score table');
|
|
159
159
|
const gaps = table.filter(cell => cell.error || !cell.mention || cell.citation === false).map(cell => ({ question: cell.question, engine: cell.engine, error: cell.error ?? null, mention: cell.mention, citation: cell.citation }));
|
|
160
160
|
if (!gaps.length) { output({ suggestions: [] }); return; }
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
161
|
+
// A5c — the model often rewords a question or the engine name; one such item used to fail the whole step,
|
|
162
|
+
// so the same input passed and failed by turns. Evidence is now picked by id, matched leniently, and a wrong
|
|
163
|
+
// item is dropped (not fatal). Only «no valid suggestion at all» retries once, with a stricter prompt.
|
|
164
|
+
const cells = gaps.map((cell, id) => ({ id, ...cell }));
|
|
165
|
+
const norm = (value: unknown) => text(value).toLowerCase().replace(/["'“”‘’`]/g, '').replace(/\s+/g, ' ').trim();
|
|
166
|
+
const pick = (evidence: unknown) => {
|
|
167
|
+
if (typeof evidence === 'number') return cells[evidence];
|
|
168
|
+
const ev = object(evidence);
|
|
169
|
+
if (typeof ev.id === 'number' && cells[ev.id]) return cells[ev.id];
|
|
170
|
+
const q = norm(ev.question), e = norm(ev.engine);
|
|
171
|
+
const exact = cells.find(cell => norm(cell.question) === q && (!e || norm(cell.engine) === e));
|
|
172
|
+
if (exact) return exact;
|
|
173
|
+
const byQuestion = cells.filter(cell => q && (norm(cell.question).includes(q) || q.includes(norm(cell.question))));
|
|
174
|
+
return byQuestion.length === 1 ? byQuestion[0] : undefined;
|
|
175
|
+
};
|
|
176
|
+
const ask = async (strict: boolean) => parseArray(reply(await invoke(['ask', '--json', `Using ONLY this score table, return a JSON array of 3 to 5 improvement suggestions. Each item: {"suggestion": "<FAQ question, FAQPage/Organization structured data, comparison document, etc.>", "evidence": <id of one cell below>}.${strict ? ' The evidence MUST be one of the listed ids as a number. Return only the JSON array.' : ''} Evidence cells (pick by id): ${JSON.stringify(cells)}. Score table: ${JSON.stringify(table)}`])));
|
|
177
|
+
const collect = (raw: unknown) => {
|
|
178
|
+
if (!Array.isArray(raw)) return [];
|
|
179
|
+
const seen = new Set<string>();
|
|
180
|
+
return raw.slice(0, 5).flatMap(item => {
|
|
165
181
|
const candidate = object(item);
|
|
166
|
-
const
|
|
167
|
-
const
|
|
168
|
-
if (!
|
|
169
|
-
|
|
182
|
+
const match = pick(candidate.evidence);
|
|
183
|
+
const suggestion = text(candidate.suggestion);
|
|
184
|
+
if (!suggestion || !match || seen.has(suggestion)) return [];
|
|
185
|
+
seen.add(suggestion);
|
|
186
|
+
return [{ suggestion, evidence: { question: match.question, engine: match.engine } }];
|
|
170
187
|
});
|
|
171
|
-
|
|
172
|
-
|
|
188
|
+
};
|
|
189
|
+
let calls = 0;
|
|
190
|
+
try {
|
|
191
|
+
calls++;
|
|
192
|
+
let suggestions = collect(await ask(false));
|
|
193
|
+
if (!suggestions.length) { calls++; suggestions = collect(await ask(true)); }
|
|
194
|
+
if (!suggestions.length) throw new Error('suggestion missing valid score evidence');
|
|
195
|
+
output({ suggestions }, calls);
|
|
196
|
+
} catch (e) { output({ outcome: 'fail', suggestions: [], error: errorLine(e) }, calls || 1, 1); }
|
|
173
197
|
} else if (step === 'report') {
|
|
174
198
|
const table = rows(object(outputs.score).table);
|
|
175
199
|
const answers = rows(object(outputs.answers).answers);
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// ⛔ 인스타그램에 올리지 않는다 — 실제 Meta 게시는 다음 판.
|
|
6
6
|
import { copyFileSync, existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
7
7
|
import { join } from 'node:path';
|
|
8
|
-
import {
|
|
8
|
+
import { deliver as sendReport } from '../../src/domains/outbound-alert.js';
|
|
9
9
|
import { coverHtml, readContext, readDraft, result, screenshot, slideHtml, writeDraft } from './lib.js';
|
|
10
10
|
|
|
11
11
|
try {
|
|
@@ -41,12 +41,17 @@ try {
|
|
|
41
41
|
if (reel) copyFileSync(join(folder, draft.reel!), reel);
|
|
42
42
|
|
|
43
43
|
// FIELD_FEED_NOTIFY=0 — 시험·리허설에서 텔레그램으로 나가지 않게.
|
|
44
|
-
|
|
44
|
+
// 경로(daemon=/v1/outbound 수락 · direct=텔레그램 직접 · false=실패)를 그대로 남긴다 — 10-01 운영 실측에서
|
|
45
|
+
// «notified:true» 만 있고 그래프 자식은 debug.log 가 꺼져 있어 도착 근거가 0 이었다. 사람이 «최종 게시»를 누른
|
|
46
|
+
// 직후라 야간 무음 보류는 걸지 않는다(sendOutbound 의 보류 대신 바로 보낸다).
|
|
47
|
+
const notify = process.env.FIELD_FEED_NOTIFY === '0' ? 'off' : sendReport([
|
|
45
48
|
`✅ 승인됨 · 게시 준비 완료 — ${draft.event.title} (${draft.event.date})`,
|
|
46
49
|
`캐러셀 ${included.length + 1}장${reel ? ' ⊕ 릴스 1편' : ''} · 초안 r${draft.revision}${draft.updatedBy === 'human' ? '(사람이 고침)' : ''}`,
|
|
47
50
|
'', text, '', `묶음: ${ready}`, '(인스타그램 게시는 아직 사람이 한다 — 자동 게시는 다음 판)',
|
|
48
51
|
].join('\n'), 'report');
|
|
49
|
-
|
|
52
|
+
const delivered = { at: new Date().toISOString(), path: notify === false ? 'failed' : notify, revision: draft.revision };
|
|
53
|
+
writeDraft(folder, { ...(readDraft(folder) ?? draft), delivered } as typeof draft);
|
|
54
|
+
result({ ready, slides: included.length + 1, reel: Boolean(reel), redrawn, revision: draft.revision, notified: notify === 'daemon' || notify === 'direct', notifyPath: delivered.path });
|
|
50
55
|
} catch (error) {
|
|
51
56
|
console.log(JSON.stringify({ outcome: 'fail', reason: error instanceof Error ? error.message : String(error) }));
|
|
52
57
|
}
|