@runcore-sh/runcore 0.1.2
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 +353 -0
- package/dist/activity/log.d.ts +37 -0
- package/dist/activity/log.d.ts.map +1 -0
- package/dist/activity/log.js +259 -0
- package/dist/activity/log.js.map +1 -0
- package/dist/adapters/storage/gdrive-backup.d.ts +20 -0
- package/dist/adapters/storage/gdrive-backup.d.ts.map +1 -0
- package/dist/adapters/storage/gdrive-backup.js +244 -0
- package/dist/adapters/storage/gdrive-backup.js.map +1 -0
- package/dist/adapters/storage/local.d.ts +19 -0
- package/dist/adapters/storage/local.d.ts.map +1 -0
- package/dist/adapters/storage/local.js +101 -0
- package/dist/adapters/storage/local.js.map +1 -0
- package/dist/adapters/storage/types.d.ts +44 -0
- package/dist/adapters/storage/types.d.ts.map +1 -0
- package/dist/adapters/storage/types.js +6 -0
- package/dist/adapters/storage/types.js.map +1 -0
- package/dist/agents/autonomous.d.ts +67 -0
- package/dist/agents/autonomous.d.ts.map +1 -0
- package/dist/agents/autonomous.js +710 -0
- package/dist/agents/autonomous.js.map +1 -0
- package/dist/agents/commit.d.ts +22 -0
- package/dist/agents/commit.d.ts.map +1 -0
- package/dist/agents/commit.js +120 -0
- package/dist/agents/commit.js.map +1 -0
- package/dist/agents/continue.d.ts +19 -0
- package/dist/agents/continue.d.ts.map +1 -0
- package/dist/agents/continue.js +158 -0
- package/dist/agents/continue.js.map +1 -0
- package/dist/agents/cooldown.d.ts +127 -0
- package/dist/agents/cooldown.d.ts.map +1 -0
- package/dist/agents/cooldown.js +396 -0
- package/dist/agents/cooldown.js.map +1 -0
- package/dist/agents/dedup-guard.d.ts +15 -0
- package/dist/agents/dedup-guard.d.ts.map +1 -0
- package/dist/agents/dedup-guard.js +128 -0
- package/dist/agents/dedup-guard.js.map +1 -0
- package/dist/agents/index.d.ts +34 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +51 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/instance-manager.d.ts +262 -0
- package/dist/agents/instance-manager.d.ts.map +1 -0
- package/dist/agents/instance-manager.js +850 -0
- package/dist/agents/instance-manager.js.map +1 -0
- package/dist/agents/locks.d.ts +81 -0
- package/dist/agents/locks.d.ts.map +1 -0
- package/dist/agents/locks.js +234 -0
- package/dist/agents/locks.js.map +1 -0
- package/dist/agents/memory.d.ts +37 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/memory.js +92 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/monitor.d.ts +16 -0
- package/dist/agents/monitor.d.ts.map +1 -0
- package/dist/agents/monitor.js +235 -0
- package/dist/agents/monitor.js.map +1 -0
- package/dist/agents/orchestration.d.ts +218 -0
- package/dist/agents/orchestration.d.ts.map +1 -0
- package/dist/agents/orchestration.js +715 -0
- package/dist/agents/orchestration.js.map +1 -0
- package/dist/agents/recover.d.ts +30 -0
- package/dist/agents/recover.d.ts.map +1 -0
- package/dist/agents/recover.js +166 -0
- package/dist/agents/recover.js.map +1 -0
- package/dist/agents/reflection.d.ts +36 -0
- package/dist/agents/reflection.d.ts.map +1 -0
- package/dist/agents/reflection.js +198 -0
- package/dist/agents/reflection.js.map +1 -0
- package/dist/agents/runtime/bus.d.ts +46 -0
- package/dist/agents/runtime/bus.d.ts.map +1 -0
- package/dist/agents/runtime/bus.js +174 -0
- package/dist/agents/runtime/bus.js.map +1 -0
- package/dist/agents/runtime/config.d.ts +14 -0
- package/dist/agents/runtime/config.d.ts.map +1 -0
- package/dist/agents/runtime/config.js +100 -0
- package/dist/agents/runtime/config.js.map +1 -0
- package/dist/agents/runtime/driver.d.ts +25 -0
- package/dist/agents/runtime/driver.d.ts.map +1 -0
- package/dist/agents/runtime/driver.js +215 -0
- package/dist/agents/runtime/driver.js.map +1 -0
- package/dist/agents/runtime/errors.d.ts +30 -0
- package/dist/agents/runtime/errors.d.ts.map +1 -0
- package/dist/agents/runtime/errors.js +40 -0
- package/dist/agents/runtime/errors.js.map +1 -0
- package/dist/agents/runtime/index.d.ts +29 -0
- package/dist/agents/runtime/index.d.ts.map +1 -0
- package/dist/agents/runtime/index.js +54 -0
- package/dist/agents/runtime/index.js.map +1 -0
- package/dist/agents/runtime/lifecycle.d.ts +46 -0
- package/dist/agents/runtime/lifecycle.d.ts.map +1 -0
- package/dist/agents/runtime/lifecycle.js +116 -0
- package/dist/agents/runtime/lifecycle.js.map +1 -0
- package/dist/agents/runtime/manager.d.ts +129 -0
- package/dist/agents/runtime/manager.d.ts.map +1 -0
- package/dist/agents/runtime/manager.js +947 -0
- package/dist/agents/runtime/manager.js.map +1 -0
- package/dist/agents/runtime/registry.d.ts +66 -0
- package/dist/agents/runtime/registry.d.ts.map +1 -0
- package/dist/agents/runtime/registry.js +195 -0
- package/dist/agents/runtime/registry.js.map +1 -0
- package/dist/agents/runtime/resources.d.ts +49 -0
- package/dist/agents/runtime/resources.d.ts.map +1 -0
- package/dist/agents/runtime/resources.js +146 -0
- package/dist/agents/runtime/resources.js.map +1 -0
- package/dist/agents/runtime/types.d.ts +168 -0
- package/dist/agents/runtime/types.d.ts.map +1 -0
- package/dist/agents/runtime/types.js +24 -0
- package/dist/agents/runtime/types.js.map +1 -0
- package/dist/agents/runtime.d.ts +240 -0
- package/dist/agents/runtime.d.ts.map +1 -0
- package/dist/agents/runtime.js +577 -0
- package/dist/agents/runtime.js.map +1 -0
- package/dist/agents/spawn.d.ts +49 -0
- package/dist/agents/spawn.d.ts.map +1 -0
- package/dist/agents/spawn.js +975 -0
- package/dist/agents/spawn.js.map +1 -0
- package/dist/agents/store.d.ts +29 -0
- package/dist/agents/store.d.ts.map +1 -0
- package/dist/agents/store.js +174 -0
- package/dist/agents/store.js.map +1 -0
- package/dist/agents/triage.d.ts +23 -0
- package/dist/agents/triage.d.ts.map +1 -0
- package/dist/agents/triage.js +81 -0
- package/dist/agents/triage.js.map +1 -0
- package/dist/agents/types.d.ts +37 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/workflow.d.ts +137 -0
- package/dist/agents/workflow.d.ts.map +1 -0
- package/dist/agents/workflow.js +542 -0
- package/dist/agents/workflow.js.map +1 -0
- package/dist/auth/crypto.d.ts +22 -0
- package/dist/auth/crypto.d.ts.map +1 -0
- package/dist/auth/crypto.js +42 -0
- package/dist/auth/crypto.js.map +1 -0
- package/dist/auth/identity.d.ts +89 -0
- package/dist/auth/identity.d.ts.map +1 -0
- package/dist/auth/identity.js +264 -0
- package/dist/auth/identity.js.map +1 -0
- package/dist/avatar/client.d.ts +34 -0
- package/dist/avatar/client.d.ts.map +1 -0
- package/dist/avatar/client.js +172 -0
- package/dist/avatar/client.js.map +1 -0
- package/dist/avatar/sidecar.d.ts +16 -0
- package/dist/avatar/sidecar.d.ts.map +1 -0
- package/dist/avatar/sidecar.js +125 -0
- package/dist/avatar/sidecar.js.map +1 -0
- package/dist/board/provider.d.ts +13 -0
- package/dist/board/provider.d.ts.map +1 -0
- package/dist/board/provider.js +19 -0
- package/dist/board/provider.js.map +1 -0
- package/dist/board/types.d.ts +76 -0
- package/dist/board/types.d.ts.map +1 -0
- package/dist/board/types.js +7 -0
- package/dist/board/types.js.map +1 -0
- package/dist/brain/skills.d.ts +177 -0
- package/dist/brain/skills.d.ts.map +1 -0
- package/dist/brain/skills.js +452 -0
- package/dist/brain/skills.js.map +1 -0
- package/dist/brain.d.ts +42 -0
- package/dist/brain.d.ts.map +1 -0
- package/dist/brain.js +98 -0
- package/dist/brain.js.map +1 -0
- package/dist/browser/sessions.d.ts +23 -0
- package/dist/browser/sessions.d.ts.map +1 -0
- package/dist/browser/sessions.js +121 -0
- package/dist/browser/sessions.js.map +1 -0
- package/dist/cache/file.d.ts +56 -0
- package/dist/cache/file.d.ts.map +1 -0
- package/dist/cache/file.js +176 -0
- package/dist/cache/file.js.map +1 -0
- package/dist/cache/index.d.ts +64 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +108 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/keys.d.ts +29 -0
- package/dist/cache/keys.d.ts.map +1 -0
- package/dist/cache/keys.js +52 -0
- package/dist/cache/keys.js.map +1 -0
- package/dist/cache/llm-cache.d.ts +70 -0
- package/dist/cache/llm-cache.d.ts.map +1 -0
- package/dist/cache/llm-cache.js +165 -0
- package/dist/cache/llm-cache.js.map +1 -0
- package/dist/cache/memory.d.ts +53 -0
- package/dist/cache/memory.d.ts.map +1 -0
- package/dist/cache/memory.js +114 -0
- package/dist/cache/memory.js.map +1 -0
- package/dist/calendar/google-adapter.d.ts +16 -0
- package/dist/calendar/google-adapter.d.ts.map +1 -0
- package/dist/calendar/google-adapter.js +163 -0
- package/dist/calendar/google-adapter.js.map +1 -0
- package/dist/calendar/index.d.ts +8 -0
- package/dist/calendar/index.d.ts.map +1 -0
- package/dist/calendar/index.js +7 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/calendar/routes.d.ts +7 -0
- package/dist/calendar/routes.d.ts.map +1 -0
- package/dist/calendar/routes.js +199 -0
- package/dist/calendar/routes.js.map +1 -0
- package/dist/calendar/store.d.ts +73 -0
- package/dist/calendar/store.d.ts.map +1 -0
- package/dist/calendar/store.js +373 -0
- package/dist/calendar/store.js.map +1 -0
- package/dist/calendar/types.d.ts +99 -0
- package/dist/calendar/types.d.ts.map +1 -0
- package/dist/calendar/types.js +7 -0
- package/dist/calendar/types.js.map +1 -0
- package/dist/capabilities/definitions/board.d.ts +7 -0
- package/dist/capabilities/definitions/board.d.ts.map +1 -0
- package/dist/capabilities/definitions/board.js +232 -0
- package/dist/capabilities/definitions/board.js.map +1 -0
- package/dist/capabilities/definitions/browser.d.ts +18 -0
- package/dist/capabilities/definitions/browser.d.ts.map +1 -0
- package/dist/capabilities/definitions/browser.js +242 -0
- package/dist/capabilities/definitions/browser.js.map +1 -0
- package/dist/capabilities/definitions/calendar-context.d.ts +8 -0
- package/dist/capabilities/definitions/calendar-context.d.ts.map +1 -0
- package/dist/capabilities/definitions/calendar-context.js +41 -0
- package/dist/capabilities/definitions/calendar-context.js.map +1 -0
- package/dist/capabilities/definitions/calendar.d.ts +7 -0
- package/dist/capabilities/definitions/calendar.d.ts.map +1 -0
- package/dist/capabilities/definitions/calendar.js +173 -0
- package/dist/capabilities/definitions/calendar.js.map +1 -0
- package/dist/capabilities/definitions/docs.d.ts +6 -0
- package/dist/capabilities/definitions/docs.d.ts.map +1 -0
- package/dist/capabilities/definitions/docs.js +62 -0
- package/dist/capabilities/definitions/docs.js.map +1 -0
- package/dist/capabilities/definitions/email-context.d.ts +7 -0
- package/dist/capabilities/definitions/email-context.d.ts.map +1 -0
- package/dist/capabilities/definitions/email-context.js +55 -0
- package/dist/capabilities/definitions/email-context.js.map +1 -0
- package/dist/capabilities/definitions/email.d.ts +7 -0
- package/dist/capabilities/definitions/email.d.ts.map +1 -0
- package/dist/capabilities/definitions/email.js +94 -0
- package/dist/capabilities/definitions/email.js.map +1 -0
- package/dist/capabilities/definitions/task-done.d.ts +10 -0
- package/dist/capabilities/definitions/task-done.d.ts.map +1 -0
- package/dist/capabilities/definitions/task-done.js +83 -0
- package/dist/capabilities/definitions/task-done.js.map +1 -0
- package/dist/capabilities/definitions/vault-context.d.ts +12 -0
- package/dist/capabilities/definitions/vault-context.d.ts.map +1 -0
- package/dist/capabilities/definitions/vault-context.js +62 -0
- package/dist/capabilities/definitions/vault-context.js.map +1 -0
- package/dist/capabilities/definitions/web-search-context.d.ts +22 -0
- package/dist/capabilities/definitions/web-search-context.d.ts.map +1 -0
- package/dist/capabilities/definitions/web-search-context.js +60 -0
- package/dist/capabilities/definitions/web-search-context.js.map +1 -0
- package/dist/capabilities/index.d.ts +18 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +21 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/registry.d.ts +84 -0
- package/dist/capabilities/registry.d.ts.map +1 -0
- package/dist/capabilities/registry.js +248 -0
- package/dist/capabilities/registry.js.map +1 -0
- package/dist/capabilities/types.d.ts +157 -0
- package/dist/capabilities/types.d.ts.map +1 -0
- package/dist/capabilities/types.js +35 -0
- package/dist/capabilities/types.js.map +1 -0
- package/dist/channels/whatsapp.d.ts +88 -0
- package/dist/channels/whatsapp.d.ts.map +1 -0
- package/dist/channels/whatsapp.js +200 -0
- package/dist/channels/whatsapp.js.map +1 -0
- package/dist/cli/backup.d.ts +13 -0
- package/dist/cli/backup.d.ts.map +1 -0
- package/dist/cli/backup.js +176 -0
- package/dist/cli/backup.js.map +1 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +231 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +45 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +54 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/contacts/index.d.ts +3 -0
- package/dist/contacts/index.d.ts.map +1 -0
- package/dist/contacts/index.js +2 -0
- package/dist/contacts/index.js.map +1 -0
- package/dist/contacts/store.d.ts +58 -0
- package/dist/contacts/store.d.ts.map +1 -0
- package/dist/contacts/store.js +278 -0
- package/dist/contacts/store.js.map +1 -0
- package/dist/contacts/types.d.ts +47 -0
- package/dist/contacts/types.d.ts.map +1 -0
- package/dist/contacts/types.js +5 -0
- package/dist/contacts/types.js.map +1 -0
- package/dist/context/assembler.d.ts +26 -0
- package/dist/context/assembler.d.ts.map +1 -0
- package/dist/context/assembler.js +65 -0
- package/dist/context/assembler.js.map +1 -0
- package/dist/context/compaction.d.ts +34 -0
- package/dist/context/compaction.d.ts.map +1 -0
- package/dist/context/compaction.js +84 -0
- package/dist/context/compaction.js.map +1 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +2 -0
- package/dist/context/index.js.map +1 -0
- package/dist/core/registry/index.d.ts +12 -0
- package/dist/core/registry/index.d.ts.map +1 -0
- package/dist/core/registry/index.js +14 -0
- package/dist/core/registry/index.js.map +1 -0
- package/dist/core/registry/publisher.d.ts +22 -0
- package/dist/core/registry/publisher.d.ts.map +1 -0
- package/dist/core/registry/publisher.js +195 -0
- package/dist/core/registry/publisher.js.map +1 -0
- package/dist/core/registry/registry.d.ts +92 -0
- package/dist/core/registry/registry.d.ts.map +1 -0
- package/dist/core/registry/registry.js +254 -0
- package/dist/core/registry/registry.js.map +1 -0
- package/dist/core/registry/search.d.ts +12 -0
- package/dist/core/registry/search.d.ts.map +1 -0
- package/dist/core/registry/search.js +132 -0
- package/dist/core/registry/search.js.map +1 -0
- package/dist/core/registry/store.d.ts +55 -0
- package/dist/core/registry/store.d.ts.map +1 -0
- package/dist/core/registry/store.js +185 -0
- package/dist/core/registry/store.js.map +1 -0
- package/dist/core/registry/types.d.ts +141 -0
- package/dist/core/registry/types.d.ts.map +1 -0
- package/dist/core/registry/types.js +30 -0
- package/dist/core/registry/types.js.map +1 -0
- package/dist/core/registry/versions.d.ts +56 -0
- package/dist/core/registry/versions.d.ts.map +1 -0
- package/dist/core/registry/versions.js +101 -0
- package/dist/core/registry/versions.js.map +1 -0
- package/dist/credentials/store.d.ts +59 -0
- package/dist/credentials/store.d.ts.map +1 -0
- package/dist/credentials/store.js +178 -0
- package/dist/credentials/store.js.map +1 -0
- package/dist/files/agent-api.d.ts +50 -0
- package/dist/files/agent-api.d.ts.map +1 -0
- package/dist/files/agent-api.js +126 -0
- package/dist/files/agent-api.js.map +1 -0
- package/dist/files/compress.d.ts +20 -0
- package/dist/files/compress.d.ts.map +1 -0
- package/dist/files/compress.js +83 -0
- package/dist/files/compress.js.map +1 -0
- package/dist/files/extract.d.ts +11 -0
- package/dist/files/extract.d.ts.map +1 -0
- package/dist/files/extract.js +33 -0
- package/dist/files/extract.js.map +1 -0
- package/dist/files/gdrive.d.ts +56 -0
- package/dist/files/gdrive.d.ts.map +1 -0
- package/dist/files/gdrive.js +246 -0
- package/dist/files/gdrive.js.map +1 -0
- package/dist/files/ingest-folder.d.ts +22 -0
- package/dist/files/ingest-folder.d.ts.map +1 -0
- package/dist/files/ingest-folder.js +71 -0
- package/dist/files/ingest-folder.js.map +1 -0
- package/dist/files/ingest.d.ts +13 -0
- package/dist/files/ingest.d.ts.map +1 -0
- package/dist/files/ingest.js +127 -0
- package/dist/files/ingest.js.map +1 -0
- package/dist/files/manager.d.ts +117 -0
- package/dist/files/manager.d.ts.map +1 -0
- package/dist/files/manager.js +306 -0
- package/dist/files/manager.js.map +1 -0
- package/dist/files/store.d.ts +41 -0
- package/dist/files/store.d.ts.map +1 -0
- package/dist/files/store.js +271 -0
- package/dist/files/store.js.map +1 -0
- package/dist/files/templates.d.ts +45 -0
- package/dist/files/templates.d.ts.map +1 -0
- package/dist/files/templates.js +179 -0
- package/dist/files/templates.js.map +1 -0
- package/dist/files/types.d.ts +115 -0
- package/dist/files/types.d.ts.map +1 -0
- package/dist/files/types.js +20 -0
- package/dist/files/types.js.map +1 -0
- package/dist/files/validate.d.ts +15 -0
- package/dist/files/validate.d.ts.map +1 -0
- package/dist/files/validate.js +213 -0
- package/dist/files/validate.js.map +1 -0
- package/dist/files/version.d.ts +31 -0
- package/dist/files/version.d.ts.map +1 -0
- package/dist/files/version.js +129 -0
- package/dist/files/version.js.map +1 -0
- package/dist/github/client.d.ts +83 -0
- package/dist/github/client.d.ts.map +1 -0
- package/dist/github/client.js +408 -0
- package/dist/github/client.js.map +1 -0
- package/dist/github/commit-analysis.d.ts +30 -0
- package/dist/github/commit-analysis.d.ts.map +1 -0
- package/dist/github/commit-analysis.js +276 -0
- package/dist/github/commit-analysis.js.map +1 -0
- package/dist/github/contributor-stats.d.ts +18 -0
- package/dist/github/contributor-stats.d.ts.map +1 -0
- package/dist/github/contributor-stats.js +119 -0
- package/dist/github/contributor-stats.js.map +1 -0
- package/dist/github/issue-sla.d.ts +25 -0
- package/dist/github/issue-sla.d.ts.map +1 -0
- package/dist/github/issue-sla.js +220 -0
- package/dist/github/issue-sla.js.map +1 -0
- package/dist/github/issue-triage.d.ts +49 -0
- package/dist/github/issue-triage.d.ts.map +1 -0
- package/dist/github/issue-triage.js +286 -0
- package/dist/github/issue-triage.js.map +1 -0
- package/dist/github/pr-readiness.d.ts +18 -0
- package/dist/github/pr-readiness.d.ts.map +1 -0
- package/dist/github/pr-readiness.js +197 -0
- package/dist/github/pr-readiness.js.map +1 -0
- package/dist/github/pr-review.d.ts +17 -0
- package/dist/github/pr-review.d.ts.map +1 -0
- package/dist/github/pr-review.js +410 -0
- package/dist/github/pr-review.js.map +1 -0
- package/dist/github/release-notes.d.ts +32 -0
- package/dist/github/release-notes.d.ts.map +1 -0
- package/dist/github/release-notes.js +227 -0
- package/dist/github/release-notes.js.map +1 -0
- package/dist/github/repo-health.d.ts +17 -0
- package/dist/github/repo-health.d.ts.map +1 -0
- package/dist/github/repo-health.js +303 -0
- package/dist/github/repo-health.js.map +1 -0
- package/dist/github/retry.d.ts +39 -0
- package/dist/github/retry.d.ts.map +1 -0
- package/dist/github/retry.js +117 -0
- package/dist/github/retry.js.map +1 -0
- package/dist/github/types.d.ts +527 -0
- package/dist/github/types.d.ts.map +1 -0
- package/dist/github/types.js +8 -0
- package/dist/github/types.js.map +1 -0
- package/dist/github/webhooks.d.ts +36 -0
- package/dist/github/webhooks.d.ts.map +1 -0
- package/dist/github/webhooks.js +153 -0
- package/dist/github/webhooks.js.map +1 -0
- package/dist/goals/loop.d.ts +27 -0
- package/dist/goals/loop.d.ts.map +1 -0
- package/dist/goals/loop.js +239 -0
- package/dist/goals/loop.js.map +1 -0
- package/dist/goals/notifications.d.ts +20 -0
- package/dist/goals/notifications.d.ts.map +1 -0
- package/dist/goals/notifications.js +101 -0
- package/dist/goals/notifications.js.map +1 -0
- package/dist/goals/timer.d.ts +21 -0
- package/dist/goals/timer.d.ts.map +1 -0
- package/dist/goals/timer.js +60 -0
- package/dist/goals/timer.js.map +1 -0
- package/dist/google/auth.d.ts +84 -0
- package/dist/google/auth.d.ts.map +1 -0
- package/dist/google/auth.js +323 -0
- package/dist/google/auth.js.map +1 -0
- package/dist/google/calendar-timer.d.ts +20 -0
- package/dist/google/calendar-timer.d.ts.map +1 -0
- package/dist/google/calendar-timer.js +91 -0
- package/dist/google/calendar-timer.js.map +1 -0
- package/dist/google/calendar.d.ts +126 -0
- package/dist/google/calendar.d.ts.map +1 -0
- package/dist/google/calendar.js +270 -0
- package/dist/google/calendar.js.map +1 -0
- package/dist/google/docs.d.ts +87 -0
- package/dist/google/docs.d.ts.map +1 -0
- package/dist/google/docs.js +309 -0
- package/dist/google/docs.js.map +1 -0
- package/dist/google/gmail-send.d.ts +58 -0
- package/dist/google/gmail-send.d.ts.map +1 -0
- package/dist/google/gmail-send.js +219 -0
- package/dist/google/gmail-send.js.map +1 -0
- package/dist/google/gmail-timer.d.ts +34 -0
- package/dist/google/gmail-timer.d.ts.map +1 -0
- package/dist/google/gmail-timer.js +223 -0
- package/dist/google/gmail-timer.js.map +1 -0
- package/dist/google/gmail.d.ts +172 -0
- package/dist/google/gmail.d.ts.map +1 -0
- package/dist/google/gmail.js +470 -0
- package/dist/google/gmail.js.map +1 -0
- package/dist/google/tasks-timer.d.ts +20 -0
- package/dist/google/tasks-timer.d.ts.map +1 -0
- package/dist/google/tasks-timer.js +107 -0
- package/dist/google/tasks-timer.js.map +1 -0
- package/dist/google/tasks.d.ts +167 -0
- package/dist/google/tasks.d.ts.map +1 -0
- package/dist/google/tasks.js +331 -0
- package/dist/google/tasks.js.map +1 -0
- package/dist/google/temporal.d.ts +76 -0
- package/dist/google/temporal.d.ts.map +1 -0
- package/dist/google/temporal.js +176 -0
- package/dist/google/temporal.js.map +1 -0
- package/dist/health/alert-defaults.d.ts +12 -0
- package/dist/health/alert-defaults.d.ts.map +1 -0
- package/dist/health/alert-defaults.js +88 -0
- package/dist/health/alert-defaults.js.map +1 -0
- package/dist/health/alert-types.d.ts +97 -0
- package/dist/health/alert-types.d.ts.map +1 -0
- package/dist/health/alert-types.js +8 -0
- package/dist/health/alert-types.js.map +1 -0
- package/dist/health/alerting.d.ts +66 -0
- package/dist/health/alerting.d.ts.map +1 -0
- package/dist/health/alerting.js +373 -0
- package/dist/health/alerting.js.map +1 -0
- package/dist/health/checker.d.ts +32 -0
- package/dist/health/checker.d.ts.map +1 -0
- package/dist/health/checker.js +138 -0
- package/dist/health/checker.js.map +1 -0
- package/dist/health/checks/openrouter.d.ts +29 -0
- package/dist/health/checks/openrouter.d.ts.map +1 -0
- package/dist/health/checks/openrouter.js +75 -0
- package/dist/health/checks/openrouter.js.map +1 -0
- package/dist/health/checks.d.ts +26 -0
- package/dist/health/checks.d.ts.map +1 -0
- package/dist/health/checks.js +122 -0
- package/dist/health/checks.js.map +1 -0
- package/dist/health/components.d.ts +38 -0
- package/dist/health/components.d.ts.map +1 -0
- package/dist/health/components.js +112 -0
- package/dist/health/components.js.map +1 -0
- package/dist/health/index.d.ts +19 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +23 -0
- package/dist/health/index.js.map +1 -0
- package/dist/health/recovery.d.ts +42 -0
- package/dist/health/recovery.d.ts.map +1 -0
- package/dist/health/recovery.js +138 -0
- package/dist/health/recovery.js.map +1 -0
- package/dist/health/types.d.ts +68 -0
- package/dist/health/types.d.ts.map +1 -0
- package/dist/health/types.js +5 -0
- package/dist/health/types.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/instance.d.ts +24 -0
- package/dist/instance.d.ts.map +1 -0
- package/dist/instance.js +48 -0
- package/dist/instance.js.map +1 -0
- package/dist/integrations/github.d.ts +83 -0
- package/dist/integrations/github.d.ts.map +1 -0
- package/dist/integrations/github.js +331 -0
- package/dist/integrations/github.js.map +1 -0
- package/dist/integrations/google-tasks.d.ts +232 -0
- package/dist/integrations/google-tasks.d.ts.map +1 -0
- package/dist/integrations/google-tasks.js +432 -0
- package/dist/integrations/google-tasks.js.map +1 -0
- package/dist/learning/extractor.d.ts +28 -0
- package/dist/learning/extractor.d.ts.map +1 -0
- package/dist/learning/extractor.js +135 -0
- package/dist/learning/extractor.js.map +1 -0
- package/dist/lib/BasePlugin.d.ts +58 -0
- package/dist/lib/BasePlugin.d.ts.map +1 -0
- package/dist/lib/BasePlugin.js +181 -0
- package/dist/lib/BasePlugin.js.map +1 -0
- package/dist/lib/PluginRegistry.d.ts +56 -0
- package/dist/lib/PluginRegistry.d.ts.map +1 -0
- package/dist/lib/PluginRegistry.js +172 -0
- package/dist/lib/PluginRegistry.js.map +1 -0
- package/dist/lib/brain-io.d.ts +60 -0
- package/dist/lib/brain-io.d.ts.map +1 -0
- package/dist/lib/brain-io.js +180 -0
- package/dist/lib/brain-io.js.map +1 -0
- package/dist/lib/encryption-config.d.ts +16 -0
- package/dist/lib/encryption-config.d.ts.map +1 -0
- package/dist/lib/encryption-config.js +40 -0
- package/dist/lib/encryption-config.js.map +1 -0
- package/dist/lib/encryption.d.ts +19 -0
- package/dist/lib/encryption.d.ts.map +1 -0
- package/dist/lib/encryption.js +65 -0
- package/dist/lib/encryption.js.map +1 -0
- package/dist/lib/key-store.d.ts +24 -0
- package/dist/lib/key-store.d.ts.map +1 -0
- package/dist/lib/key-store.js +38 -0
- package/dist/lib/key-store.js.map +1 -0
- package/dist/lib/schema-migration.d.ts +34 -0
- package/dist/lib/schema-migration.d.ts.map +1 -0
- package/dist/lib/schema-migration.js +77 -0
- package/dist/lib/schema-migration.js.map +1 -0
- package/dist/library/brain-shadow.d.ts +10 -0
- package/dist/library/brain-shadow.d.ts.map +1 -0
- package/dist/library/brain-shadow.js +158 -0
- package/dist/library/brain-shadow.js.map +1 -0
- package/dist/library/index.d.ts +7 -0
- package/dist/library/index.d.ts.map +1 -0
- package/dist/library/index.js +6 -0
- package/dist/library/index.js.map +1 -0
- package/dist/library/routes.d.ts +7 -0
- package/dist/library/routes.d.ts.map +1 -0
- package/dist/library/routes.js +473 -0
- package/dist/library/routes.js.map +1 -0
- package/dist/library/store.d.ts +54 -0
- package/dist/library/store.d.ts.map +1 -0
- package/dist/library/store.js +403 -0
- package/dist/library/store.js.map +1 -0
- package/dist/library/types.d.ts +56 -0
- package/dist/library/types.d.ts.map +1 -0
- package/dist/library/types.js +12 -0
- package/dist/library/types.js.map +1 -0
- package/dist/llm/cache.d.ts +42 -0
- package/dist/llm/cache.d.ts.map +1 -0
- package/dist/llm/cache.js +104 -0
- package/dist/llm/cache.js.map +1 -0
- package/dist/llm/complete.d.ts +24 -0
- package/dist/llm/complete.d.ts.map +1 -0
- package/dist/llm/complete.js +56 -0
- package/dist/llm/complete.js.map +1 -0
- package/dist/llm/errors.d.ts +28 -0
- package/dist/llm/errors.d.ts.map +1 -0
- package/dist/llm/errors.js +82 -0
- package/dist/llm/errors.js.map +1 -0
- package/dist/llm/ollama.d.ts +21 -0
- package/dist/llm/ollama.d.ts.map +1 -0
- package/dist/llm/ollama.js +116 -0
- package/dist/llm/ollama.js.map +1 -0
- package/dist/llm/openrouter.d.ts +13 -0
- package/dist/llm/openrouter.d.ts.map +1 -0
- package/dist/llm/openrouter.js +105 -0
- package/dist/llm/openrouter.js.map +1 -0
- package/dist/llm/providers/anthropic.d.ts +8 -0
- package/dist/llm/providers/anthropic.d.ts.map +1 -0
- package/dist/llm/providers/anthropic.js +189 -0
- package/dist/llm/providers/anthropic.js.map +1 -0
- package/dist/llm/providers/index.d.ts +20 -0
- package/dist/llm/providers/index.d.ts.map +1 -0
- package/dist/llm/providers/index.js +47 -0
- package/dist/llm/providers/index.js.map +1 -0
- package/dist/llm/providers/ollama.d.ts +13 -0
- package/dist/llm/providers/ollama.d.ts.map +1 -0
- package/dist/llm/providers/ollama.js +188 -0
- package/dist/llm/providers/ollama.js.map +1 -0
- package/dist/llm/providers/openai.d.ts +8 -0
- package/dist/llm/providers/openai.d.ts.map +1 -0
- package/dist/llm/providers/openai.js +144 -0
- package/dist/llm/providers/openai.js.map +1 -0
- package/dist/llm/providers/openrouter.d.ts +7 -0
- package/dist/llm/providers/openrouter.d.ts.map +1 -0
- package/dist/llm/providers/openrouter.js +158 -0
- package/dist/llm/providers/openrouter.js.map +1 -0
- package/dist/llm/providers/types.d.ts +29 -0
- package/dist/llm/providers/types.d.ts.map +1 -0
- package/dist/llm/providers/types.js +6 -0
- package/dist/llm/providers/types.js.map +1 -0
- package/dist/llm/retry.d.ts +29 -0
- package/dist/llm/retry.d.ts.map +1 -0
- package/dist/llm/retry.js +139 -0
- package/dist/llm/retry.js.map +1 -0
- package/dist/memory/file-backed.d.ts +36 -0
- package/dist/memory/file-backed.d.ts.map +1 -0
- package/dist/memory/file-backed.js +178 -0
- package/dist/memory/file-backed.js.map +1 -0
- package/dist/memory/index.d.ts +7 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +6 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/long-term.d.ts +38 -0
- package/dist/memory/long-term.d.ts.map +1 -0
- package/dist/memory/long-term.js +58 -0
- package/dist/memory/long-term.js.map +1 -0
- package/dist/memory/vector-index.d.ts +55 -0
- package/dist/memory/vector-index.d.ts.map +1 -0
- package/dist/memory/vector-index.js +207 -0
- package/dist/memory/vector-index.js.map +1 -0
- package/dist/memory/visual.d.ts +53 -0
- package/dist/memory/visual.d.ts.map +1 -0
- package/dist/memory/visual.js +218 -0
- package/dist/memory/visual.js.map +1 -0
- package/dist/memory/working.d.ts +12 -0
- package/dist/memory/working.d.ts.map +1 -0
- package/dist/memory/working.js +34 -0
- package/dist/memory/working.js.map +1 -0
- package/dist/metrics/aggregator.d.ts +58 -0
- package/dist/metrics/aggregator.d.ts.map +1 -0
- package/dist/metrics/aggregator.js +253 -0
- package/dist/metrics/aggregator.js.map +1 -0
- package/dist/metrics/collector.d.ts +26 -0
- package/dist/metrics/collector.d.ts.map +1 -0
- package/dist/metrics/collector.js +346 -0
- package/dist/metrics/collector.js.map +1 -0
- package/dist/metrics/firewall-metrics.d.ts +95 -0
- package/dist/metrics/firewall-metrics.d.ts.map +1 -0
- package/dist/metrics/firewall-metrics.js +261 -0
- package/dist/metrics/firewall-metrics.js.map +1 -0
- package/dist/metrics/index.d.ts +20 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +23 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/instruments.d.ts +89 -0
- package/dist/metrics/instruments.d.ts.map +1 -0
- package/dist/metrics/instruments.js +172 -0
- package/dist/metrics/instruments.js.map +1 -0
- package/dist/metrics/middleware.d.ts +12 -0
- package/dist/metrics/middleware.d.ts.map +1 -0
- package/dist/metrics/middleware.js +47 -0
- package/dist/metrics/middleware.js.map +1 -0
- package/dist/metrics/prometheus.d.ts +39 -0
- package/dist/metrics/prometheus.d.ts.map +1 -0
- package/dist/metrics/prometheus.js +115 -0
- package/dist/metrics/prometheus.js.map +1 -0
- package/dist/metrics/registry.d.ts +58 -0
- package/dist/metrics/registry.d.ts.map +1 -0
- package/dist/metrics/registry.js +145 -0
- package/dist/metrics/registry.js.map +1 -0
- package/dist/metrics/reporter.d.ts +21 -0
- package/dist/metrics/reporter.d.ts.map +1 -0
- package/dist/metrics/reporter.js +207 -0
- package/dist/metrics/reporter.js.map +1 -0
- package/dist/metrics/store.d.ts +47 -0
- package/dist/metrics/store.d.ts.map +1 -0
- package/dist/metrics/store.js +209 -0
- package/dist/metrics/store.js.map +1 -0
- package/dist/metrics/system.d.ts +20 -0
- package/dist/metrics/system.d.ts.map +1 -0
- package/dist/metrics/system.js +109 -0
- package/dist/metrics/system.js.map +1 -0
- package/dist/metrics/types.d.ts +101 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +6 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/modules/index.d.ts +6 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/index.js +6 -0
- package/dist/modules/index.js.map +1 -0
- package/dist/modules/registry.d.ts +36 -0
- package/dist/modules/registry.d.ts.map +1 -0
- package/dist/modules/registry.js +155 -0
- package/dist/modules/registry.js.map +1 -0
- package/dist/modules/types.d.ts +37 -0
- package/dist/modules/types.d.ts.map +1 -0
- package/dist/modules/types.js +9 -0
- package/dist/modules/types.js.map +1 -0
- package/dist/notifications/channel.d.ts +25 -0
- package/dist/notifications/channel.d.ts.map +1 -0
- package/dist/notifications/channel.js +83 -0
- package/dist/notifications/channel.js.map +1 -0
- package/dist/notifications/email.d.ts +27 -0
- package/dist/notifications/email.d.ts.map +1 -0
- package/dist/notifications/email.js +72 -0
- package/dist/notifications/email.js.map +1 -0
- package/dist/notifications/index.d.ts +16 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +12 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/phone.d.ts +16 -0
- package/dist/notifications/phone.d.ts.map +1 -0
- package/dist/notifications/phone.js +48 -0
- package/dist/notifications/phone.js.map +1 -0
- package/dist/notifications/sms.d.ts +26 -0
- package/dist/notifications/sms.d.ts.map +1 -0
- package/dist/notifications/sms.js +65 -0
- package/dist/notifications/sms.js.map +1 -0
- package/dist/notifications/webhook.d.ts +28 -0
- package/dist/notifications/webhook.d.ts.map +1 -0
- package/dist/notifications/webhook.js +65 -0
- package/dist/notifications/webhook.js.map +1 -0
- package/dist/openloop/foldback.d.ts +24 -0
- package/dist/openloop/foldback.d.ts.map +1 -0
- package/dist/openloop/foldback.js +127 -0
- package/dist/openloop/foldback.js.map +1 -0
- package/dist/openloop/index.d.ts +11 -0
- package/dist/openloop/index.d.ts.map +1 -0
- package/dist/openloop/index.js +9 -0
- package/dist/openloop/index.js.map +1 -0
- package/dist/openloop/lifecycle.d.ts +16 -0
- package/dist/openloop/lifecycle.d.ts.map +1 -0
- package/dist/openloop/lifecycle.js +304 -0
- package/dist/openloop/lifecycle.js.map +1 -0
- package/dist/openloop/resolution-scanner.d.ts +17 -0
- package/dist/openloop/resolution-scanner.d.ts.map +1 -0
- package/dist/openloop/resolution-scanner.js +551 -0
- package/dist/openloop/resolution-scanner.js.map +1 -0
- package/dist/openloop/scanner.d.ts +28 -0
- package/dist/openloop/scanner.d.ts.map +1 -0
- package/dist/openloop/scanner.js +587 -0
- package/dist/openloop/scanner.js.map +1 -0
- package/dist/openloop/store.d.ts +41 -0
- package/dist/openloop/store.d.ts.map +1 -0
- package/dist/openloop/store.js +154 -0
- package/dist/openloop/store.js.map +1 -0
- package/dist/openloop/types.d.ts +94 -0
- package/dist/openloop/types.d.ts.map +1 -0
- package/dist/openloop/types.js +6 -0
- package/dist/openloop/types.js.map +1 -0
- package/dist/plugins/google-tasks/index.d.ts +55 -0
- package/dist/plugins/google-tasks/index.d.ts.map +1 -0
- package/dist/plugins/google-tasks/index.js +135 -0
- package/dist/plugins/google-tasks/index.js.map +1 -0
- package/dist/pulse/activation-event.d.ts +66 -0
- package/dist/pulse/activation-event.d.ts.map +1 -0
- package/dist/pulse/activation-event.js +139 -0
- package/dist/pulse/activation-event.js.map +1 -0
- package/dist/pulse/activation-log.d.ts +37 -0
- package/dist/pulse/activation-log.d.ts.map +1 -0
- package/dist/pulse/activation-log.js +101 -0
- package/dist/pulse/activation-log.js.map +1 -0
- package/dist/pulse/index.d.ts +11 -0
- package/dist/pulse/index.d.ts.map +1 -0
- package/dist/pulse/index.js +13 -0
- package/dist/pulse/index.js.map +1 -0
- package/dist/pulse/pressure.d.ts +69 -0
- package/dist/pulse/pressure.d.ts.map +1 -0
- package/dist/pulse/pressure.js +304 -0
- package/dist/pulse/pressure.js.map +1 -0
- package/dist/pulse/types.d.ts +89 -0
- package/dist/pulse/types.d.ts.map +1 -0
- package/dist/pulse/types.js +6 -0
- package/dist/pulse/types.js.map +1 -0
- package/dist/queue/grooming.d.ts +16 -0
- package/dist/queue/grooming.d.ts.map +1 -0
- package/dist/queue/grooming.js +269 -0
- package/dist/queue/grooming.js.map +1 -0
- package/dist/queue/provider.d.ts +50 -0
- package/dist/queue/provider.d.ts.map +1 -0
- package/dist/queue/provider.js +131 -0
- package/dist/queue/provider.js.map +1 -0
- package/dist/queue/store.d.ts +97 -0
- package/dist/queue/store.d.ts.map +1 -0
- package/dist/queue/store.js +448 -0
- package/dist/queue/store.js.map +1 -0
- package/dist/queue/types.d.ts +47 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/queue/types.js +22 -0
- package/dist/queue/types.js.map +1 -0
- package/dist/rate-limit.d.ts +26 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +74 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/registry/discovery.d.ts +30 -0
- package/dist/registry/discovery.d.ts.map +1 -0
- package/dist/registry/discovery.js +171 -0
- package/dist/registry/discovery.js.map +1 -0
- package/dist/registry/index.d.ts +14 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +18 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/installer.d.ts +45 -0
- package/dist/registry/installer.d.ts.map +1 -0
- package/dist/registry/installer.js +175 -0
- package/dist/registry/installer.js.map +1 -0
- package/dist/registry/registry.d.ts +70 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +153 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/registry/store.d.ts +69 -0
- package/dist/registry/store.d.ts.map +1 -0
- package/dist/registry/store.js +242 -0
- package/dist/registry/store.js.map +1 -0
- package/dist/registry/types.d.ts +116 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +9 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/registry/validator.d.ts +24 -0
- package/dist/registry/validator.d.ts.map +1 -0
- package/dist/registry/validator.js +203 -0
- package/dist/registry/validator.js.map +1 -0
- package/dist/scheduling/index.d.ts +4 -0
- package/dist/scheduling/index.d.ts.map +1 -0
- package/dist/scheduling/index.js +3 -0
- package/dist/scheduling/index.js.map +1 -0
- package/dist/scheduling/store.d.ts +41 -0
- package/dist/scheduling/store.d.ts.map +1 -0
- package/dist/scheduling/store.js +237 -0
- package/dist/scheduling/store.js.map +1 -0
- package/dist/scheduling/timer.d.ts +25 -0
- package/dist/scheduling/timer.d.ts.map +1 -0
- package/dist/scheduling/timer.js +118 -0
- package/dist/scheduling/timer.js.map +1 -0
- package/dist/scheduling/types.d.ts +43 -0
- package/dist/scheduling/types.d.ts.map +1 -0
- package/dist/scheduling/types.js +5 -0
- package/dist/scheduling/types.js.map +1 -0
- package/dist/search/brain-docs.d.ts +20 -0
- package/dist/search/brain-docs.d.ts.map +1 -0
- package/dist/search/brain-docs.js +103 -0
- package/dist/search/brain-docs.js.map +1 -0
- package/dist/search/browse.d.ts +45 -0
- package/dist/search/browse.d.ts.map +1 -0
- package/dist/search/browse.js +225 -0
- package/dist/search/browse.js.map +1 -0
- package/dist/search/classify.d.ts +23 -0
- package/dist/search/classify.d.ts.map +1 -0
- package/dist/search/classify.js +132 -0
- package/dist/search/classify.js.map +1 -0
- package/dist/search/client.d.ts +32 -0
- package/dist/search/client.d.ts.map +1 -0
- package/dist/search/client.js +72 -0
- package/dist/search/client.js.map +1 -0
- package/dist/search/perplexity.d.ts +13 -0
- package/dist/search/perplexity.d.ts.map +1 -0
- package/dist/search/perplexity.js +41 -0
- package/dist/search/perplexity.js.map +1 -0
- package/dist/search/sidecar.d.ts +20 -0
- package/dist/search/sidecar.d.ts.map +1 -0
- package/dist/search/sidecar.js +103 -0
- package/dist/search/sidecar.js.map +1 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +4851 -0
- package/dist/server.js.map +1 -0
- package/dist/services/backlogReview.d.ts +66 -0
- package/dist/services/backlogReview.d.ts.map +1 -0
- package/dist/services/backlogReview.js +285 -0
- package/dist/services/backlogReview.js.map +1 -0
- package/dist/services/backup.d.ts +43 -0
- package/dist/services/backup.d.ts.map +1 -0
- package/dist/services/backup.js +334 -0
- package/dist/services/backup.js.map +1 -0
- package/dist/services/credit-monitor.d.ts +40 -0
- package/dist/services/credit-monitor.d.ts.map +1 -0
- package/dist/services/credit-monitor.js +147 -0
- package/dist/services/credit-monitor.js.map +1 -0
- package/dist/services/morningBriefing.d.ts +125 -0
- package/dist/services/morningBriefing.d.ts.map +1 -0
- package/dist/services/morningBriefing.js +660 -0
- package/dist/services/morningBriefing.js.map +1 -0
- package/dist/services/routine-patterns.d.ts +21 -0
- package/dist/services/routine-patterns.d.ts.map +1 -0
- package/dist/services/routine-patterns.js +46 -0
- package/dist/services/routine-patterns.js.map +1 -0
- package/dist/services/traceInsights.d.ts +53 -0
- package/dist/services/traceInsights.d.ts.map +1 -0
- package/dist/services/traceInsights.js +762 -0
- package/dist/services/traceInsights.js.map +1 -0
- package/dist/services/training.d.ts +63 -0
- package/dist/services/training.d.ts.map +1 -0
- package/dist/services/training.js +697 -0
- package/dist/services/training.js.map +1 -0
- package/dist/services/whatsapp.d.ts +45 -0
- package/dist/services/whatsapp.d.ts.map +1 -0
- package/dist/services/whatsapp.js +194 -0
- package/dist/services/whatsapp.js.map +1 -0
- package/dist/sessions/store.d.ts +21 -0
- package/dist/sessions/store.d.ts.map +1 -0
- package/dist/sessions/store.js +47 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/settings.d.ts +111 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +256 -0
- package/dist/settings.js.map +1 -0
- package/dist/skills/index.d.ts +10 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +11 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loader.d.ts +22 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +65 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/registry.d.ts +161 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +664 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/skills/types.d.ts +83 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +31 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/validator.d.ts +36 -0
- package/dist/skills/validator.d.ts.map +1 -0
- package/dist/skills/validator.js +114 -0
- package/dist/skills/validator.js.map +1 -0
- package/dist/slack/channels.d.ts +102 -0
- package/dist/slack/channels.d.ts.map +1 -0
- package/dist/slack/channels.js +277 -0
- package/dist/slack/channels.js.map +1 -0
- package/dist/slack/client.d.ts +151 -0
- package/dist/slack/client.d.ts.map +1 -0
- package/dist/slack/client.js +468 -0
- package/dist/slack/client.js.map +1 -0
- package/dist/slack/retry.d.ts +36 -0
- package/dist/slack/retry.d.ts.map +1 -0
- package/dist/slack/retry.js +100 -0
- package/dist/slack/retry.js.map +1 -0
- package/dist/slack/types.d.ts +271 -0
- package/dist/slack/types.d.ts.map +1 -0
- package/dist/slack/types.js +52 -0
- package/dist/slack/types.js.map +1 -0
- package/dist/slack/webhooks.d.ts +55 -0
- package/dist/slack/webhooks.d.ts.map +1 -0
- package/dist/slack/webhooks.js +285 -0
- package/dist/slack/webhooks.js.map +1 -0
- package/dist/stt/client.d.ts +18 -0
- package/dist/stt/client.d.ts.map +1 -0
- package/dist/stt/client.js +66 -0
- package/dist/stt/client.js.map +1 -0
- package/dist/stt/sidecar.d.ts +16 -0
- package/dist/stt/sidecar.d.ts.map +1 -0
- package/dist/stt/sidecar.js +115 -0
- package/dist/stt/sidecar.js.map +1 -0
- package/dist/tracing/bridge.d.ts +14 -0
- package/dist/tracing/bridge.d.ts.map +1 -0
- package/dist/tracing/bridge.js +70 -0
- package/dist/tracing/bridge.js.map +1 -0
- package/dist/tracing/correlation.d.ts +34 -0
- package/dist/tracing/correlation.d.ts.map +1 -0
- package/dist/tracing/correlation.js +49 -0
- package/dist/tracing/correlation.js.map +1 -0
- package/dist/tracing/index.d.ts +15 -0
- package/dist/tracing/index.d.ts.map +1 -0
- package/dist/tracing/index.js +18 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/tracing/init.d.ts +42 -0
- package/dist/tracing/init.d.ts.map +1 -0
- package/dist/tracing/init.js +81 -0
- package/dist/tracing/init.js.map +1 -0
- package/dist/tracing/instrument.d.ts +39 -0
- package/dist/tracing/instrument.d.ts.map +1 -0
- package/dist/tracing/instrument.js +145 -0
- package/dist/tracing/instrument.js.map +1 -0
- package/dist/tracing/middleware.d.ts +18 -0
- package/dist/tracing/middleware.d.ts.map +1 -0
- package/dist/tracing/middleware.js +69 -0
- package/dist/tracing/middleware.js.map +1 -0
- package/dist/tracing/tracer.d.ts +105 -0
- package/dist/tracing/tracer.d.ts.map +1 -0
- package/dist/tracing/tracer.js +327 -0
- package/dist/tracing/tracer.js.map +1 -0
- package/dist/tts/client.d.ts +18 -0
- package/dist/tts/client.d.ts.map +1 -0
- package/dist/tts/client.js +48 -0
- package/dist/tts/client.js.map +1 -0
- package/dist/tts/sidecar.d.ts +16 -0
- package/dist/tts/sidecar.d.ts.map +1 -0
- package/dist/tts/sidecar.js +148 -0
- package/dist/tts/sidecar.js.map +1 -0
- package/dist/twilio/call.d.ts +22 -0
- package/dist/twilio/call.d.ts.map +1 -0
- package/dist/twilio/call.js +79 -0
- package/dist/twilio/call.js.map +1 -0
- package/dist/types/plugin.d.ts +342 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +10 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types.d.ts +97 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/logger.d.ts +53 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +169 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/vault/matcher.d.ts +39 -0
- package/dist/vault/matcher.d.ts.map +1 -0
- package/dist/vault/matcher.js +197 -0
- package/dist/vault/matcher.js.map +1 -0
- package/dist/vault/personal.d.ts +60 -0
- package/dist/vault/personal.d.ts.map +1 -0
- package/dist/vault/personal.js +162 -0
- package/dist/vault/personal.js.map +1 -0
- package/dist/vault/store.d.ts +39 -0
- package/dist/vault/store.d.ts.map +1 -0
- package/dist/vault/store.js +111 -0
- package/dist/vault/store.js.map +1 -0
- package/dist/webhooks/config.d.ts +64 -0
- package/dist/webhooks/config.d.ts.map +1 -0
- package/dist/webhooks/config.js +214 -0
- package/dist/webhooks/config.js.map +1 -0
- package/dist/webhooks/event-log.d.ts +90 -0
- package/dist/webhooks/event-log.d.ts.map +1 -0
- package/dist/webhooks/event-log.js +132 -0
- package/dist/webhooks/event-log.js.map +1 -0
- package/dist/webhooks/handler.d.ts +92 -0
- package/dist/webhooks/handler.d.ts.map +1 -0
- package/dist/webhooks/handler.js +103 -0
- package/dist/webhooks/handler.js.map +1 -0
- package/dist/webhooks/handlers.d.ts +100 -0
- package/dist/webhooks/handlers.d.ts.map +1 -0
- package/dist/webhooks/handlers.js +178 -0
- package/dist/webhooks/handlers.js.map +1 -0
- package/dist/webhooks/index.d.ts +29 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +33 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/mount.d.ts +77 -0
- package/dist/webhooks/mount.d.ts.map +1 -0
- package/dist/webhooks/mount.js +400 -0
- package/dist/webhooks/mount.js.map +1 -0
- package/dist/webhooks/registry.d.ts +52 -0
- package/dist/webhooks/registry.d.ts.map +1 -0
- package/dist/webhooks/registry.js +143 -0
- package/dist/webhooks/registry.js.map +1 -0
- package/dist/webhooks/relay.d.ts +25 -0
- package/dist/webhooks/relay.d.ts.map +1 -0
- package/dist/webhooks/relay.js +53 -0
- package/dist/webhooks/relay.js.map +1 -0
- package/dist/webhooks/retry.d.ts +92 -0
- package/dist/webhooks/retry.d.ts.map +1 -0
- package/dist/webhooks/retry.js +270 -0
- package/dist/webhooks/retry.js.map +1 -0
- package/dist/webhooks/router.d.ts +94 -0
- package/dist/webhooks/router.d.ts.map +1 -0
- package/dist/webhooks/router.js +290 -0
- package/dist/webhooks/router.js.map +1 -0
- package/dist/webhooks/twilio.d.ts +63 -0
- package/dist/webhooks/twilio.d.ts.map +1 -0
- package/dist/webhooks/twilio.js +129 -0
- package/dist/webhooks/twilio.js.map +1 -0
- package/dist/webhooks/types.d.ts +142 -0
- package/dist/webhooks/types.d.ts.map +1 -0
- package/dist/webhooks/types.js +8 -0
- package/dist/webhooks/types.js.map +1 -0
- package/dist/webhooks/verify.d.ts +51 -0
- package/dist/webhooks/verify.d.ts.map +1 -0
- package/dist/webhooks/verify.js +98 -0
- package/dist/webhooks/verify.js.map +1 -0
- package/package.json +70 -0
- package/public/board.html +1316 -0
- package/public/browser.html +600 -0
- package/public/help.html +655 -0
- package/public/index.html +4689 -0
- package/public/library.html +3642 -0
- package/public/observatory.html +1693 -0
- package/public/ops.html +1129 -0
- package/public/share-modal.js +211 -0
- package/skills/README.md +34 -0
- package/skills/core-architecture.md +33 -0
- package/skills/form-fill.md +98 -0
- package/skills/form-review.md +110 -0
- package/skills/form-scout.md +94 -0
- package/skills/log-decision.md +27 -0
- package/skills/onboard.md +98 -0
- package/skills/voice-guide.md +22 -0
- package/skills/write-blog.md +43 -0
|
@@ -0,0 +1,697 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paired Human Training — observes board craft, observatory usage, and
|
|
3
|
+
* system tuning to provide coaching nudges and track proficiency.
|
|
4
|
+
*
|
|
5
|
+
* No LLM calls. All heuristics are regex-based (same patterns as grooming.ts).
|
|
6
|
+
* Piggybacks on existing timers — no new intervals.
|
|
7
|
+
*
|
|
8
|
+
* Data:
|
|
9
|
+
* brain/training/proficiency.jsonl — append-only observations (source of truth)
|
|
10
|
+
* brain/training/progress.json — rewritable snapshot (derived cache)
|
|
11
|
+
*/
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import { writeFile, mkdir } from "node:fs/promises";
|
|
14
|
+
import { existsSync, statSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
15
|
+
import { createLogger } from "../utils/logger.js";
|
|
16
|
+
import { appendBrainLine, appendBrainLineSync, ensureBrainFileSync, } from "../lib/brain-io.js";
|
|
17
|
+
import { logActivity, getActivities } from "../activity/log.js";
|
|
18
|
+
import { pushNotification } from "../goals/notifications.js";
|
|
19
|
+
const log = createLogger("training");
|
|
20
|
+
// ─── Paths ────────────────────────────────────────────────────────────────────
|
|
21
|
+
const BRAIN_DIR = join(process.cwd(), "brain");
|
|
22
|
+
const TRAINING_DIR = join(BRAIN_DIR, "training");
|
|
23
|
+
const PROFICIENCY_FILE = join(TRAINING_DIR, "proficiency.jsonl");
|
|
24
|
+
const PROGRESS_FILE = join(TRAINING_DIR, "progress.json");
|
|
25
|
+
const SCHEMA_LINE = JSON.stringify({ _schema: "proficiency", _version: "1.0" });
|
|
26
|
+
const BOARD_CRAFT_SKILLS = [
|
|
27
|
+
{ id: "bc.title", label: "Clear titles", tree: "board_craft" },
|
|
28
|
+
{ id: "bc.description", label: "Meaningful descriptions", tree: "board_craft" },
|
|
29
|
+
{ id: "bc.acceptance", label: "Acceptance criteria", tree: "board_craft" },
|
|
30
|
+
{ id: "bc.priority", label: "Sets priority", tree: "board_craft" },
|
|
31
|
+
{ id: "bc.file_paths", label: "References files", tree: "board_craft" },
|
|
32
|
+
{ id: "bc.exchanges", label: "Engages in grooming", tree: "board_craft" },
|
|
33
|
+
];
|
|
34
|
+
const OBSERVATORY_SKILLS = [
|
|
35
|
+
{ id: "ol.observatory", label: "Opens Observatory", tree: "observatory_literacy" },
|
|
36
|
+
{ id: "ol.briefing", label: "Reads briefing", tree: "observatory_literacy" },
|
|
37
|
+
{ id: "ol.bridge", label: "Reads bridge reports", tree: "observatory_literacy" },
|
|
38
|
+
{ id: "ol.grooming", label: "Acts on grooming nudges", tree: "observatory_literacy" },
|
|
39
|
+
];
|
|
40
|
+
const TUNING_SKILLS = [
|
|
41
|
+
{ id: "tc.settings", label: "Adjusts settings", tree: "tuning_core" },
|
|
42
|
+
{ id: "tc.goals", label: "Maintains goals", tree: "tuning_core" },
|
|
43
|
+
{ id: "tc.patterns", label: "Adjusts routine patterns", tree: "tuning_core" },
|
|
44
|
+
];
|
|
45
|
+
const ALL_SKILLS = [...BOARD_CRAFT_SKILLS, ...OBSERVATORY_SKILLS, ...TUNING_SKILLS];
|
|
46
|
+
// ─── Nudge messages ───────────────────────────────────────────────────────────
|
|
47
|
+
const INTRODUCE_MESSAGES = {
|
|
48
|
+
"bc.title": "Tip: Board item titles work best with a verb + object (e.g. \"Add retry logic to webhook handler\"). Helps me understand the task at a glance.",
|
|
49
|
+
"bc.description": "Tip: Adding 80+ characters of description to board items — file paths, expected behavior, constraints — helps me spec tasks before I start.",
|
|
50
|
+
"bc.acceptance": "Tip: Adding acceptance criteria ('should', 'must', 'when X then Y') to board items helps me know when the work is done.",
|
|
51
|
+
"bc.priority": "Tip: Setting priority on board items (P0–P3) helps me decide what to work on first when multiple items are ready.",
|
|
52
|
+
"bc.file_paths": "Tip: Referencing file paths (src/, brain/, .ts, .md) in board item descriptions helps me find the right code immediately.",
|
|
53
|
+
"bc.exchanges": "Tip: Commenting on board items (grooming exchanges) adds context I can use when I pick up the task.",
|
|
54
|
+
"ol.observatory": "Tip: The Observatory (/observatory) shows real-time system health, activity, and insights. Worth checking regularly.",
|
|
55
|
+
"ol.briefing": "Tip: I send a morning briefing daily. Reading it helps you know what happened overnight and what needs attention.",
|
|
56
|
+
"ol.bridge": "Tip: Bridge reports summarize what I tried, what worked, and what failed. They're the best way to understand my autonomous work.",
|
|
57
|
+
"ol.grooming": "Tip: When I nudge about vague board items, grooming them within 24h keeps the pipeline flowing.",
|
|
58
|
+
"tc.settings": "Tip: brain/settings.json controls my behavior — provider, models, timers. Adjusting it tunes how I work.",
|
|
59
|
+
"tc.goals": "Tip: Keeping brain/operations/goals.yaml up to date helps me prioritize autonomous work toward your actual goals.",
|
|
60
|
+
"tc.patterns": "Tip: Discussing or adjusting routine patterns (timer intervals, autonomous behavior) helps me match your workflow.",
|
|
61
|
+
};
|
|
62
|
+
const CELEBRATE_MESSAGES = {
|
|
63
|
+
"bc.title": "Your recent board items all have clear verb-noun titles. That's second nature now.",
|
|
64
|
+
"bc.description": "Your board item descriptions are consistently detailed. I can spec tasks without guessing.",
|
|
65
|
+
"bc.acceptance": "You've been adding acceptance criteria to board items reliably. That's a big help.",
|
|
66
|
+
"bc.priority": "Priority settings on your board items are consistent. I know what matters most.",
|
|
67
|
+
"bc.file_paths": "You regularly reference file paths in board items. I can jump straight to the code.",
|
|
68
|
+
"bc.exchanges": "You're actively grooming board items with exchanges. Great collaboration signal.",
|
|
69
|
+
"ol.observatory": "You're checking the Observatory regularly. You have good situational awareness.",
|
|
70
|
+
"ol.briefing": "You consistently read the morning briefing. We're in sync on daily status.",
|
|
71
|
+
"ol.bridge": "You read bridge reports and act on them. That feedback loop keeps me effective.",
|
|
72
|
+
"ol.grooming": "You act on grooming nudges quickly. The backlog stays clean.",
|
|
73
|
+
"tc.settings": "You've tuned the settings to match your workflow. System is well-calibrated.",
|
|
74
|
+
"tc.goals": "Goals are up to date. My autonomous work stays aligned with your priorities.",
|
|
75
|
+
"tc.patterns": "You've adjusted routine patterns. The system matches how you work.",
|
|
76
|
+
};
|
|
77
|
+
// ─── State ────────────────────────────────────────────────────────────────────
|
|
78
|
+
let progress = {
|
|
79
|
+
lastScan: null,
|
|
80
|
+
lastBoardWatermark: null,
|
|
81
|
+
lastActivityId: 0,
|
|
82
|
+
trees: {},
|
|
83
|
+
nextNudge: null,
|
|
84
|
+
};
|
|
85
|
+
/** Rolling window of recent observations (in-memory, loaded from JSONL). */
|
|
86
|
+
let observations = [];
|
|
87
|
+
/** Nudge cooldowns: skillId → last nudge ISO timestamp. */
|
|
88
|
+
const nudgeCooldowns = new Map();
|
|
89
|
+
/** Daily nudge counter: "YYYY-MM-DD" → count. */
|
|
90
|
+
let dailyNudges = { date: "", count: 0 };
|
|
91
|
+
let initialized = false;
|
|
92
|
+
// ─── Init ─────────────────────────────────────────────────────────────────────
|
|
93
|
+
/**
|
|
94
|
+
* Load progress.json into memory, create dir/files if missing.
|
|
95
|
+
* Called once at server startup.
|
|
96
|
+
*/
|
|
97
|
+
export function initTraining() {
|
|
98
|
+
if (initialized)
|
|
99
|
+
return;
|
|
100
|
+
initialized = true;
|
|
101
|
+
try {
|
|
102
|
+
ensureBrainFileSync(PROFICIENCY_FILE, SCHEMA_LINE);
|
|
103
|
+
// Load progress snapshot
|
|
104
|
+
if (existsSync(PROGRESS_FILE)) {
|
|
105
|
+
const raw = JSON.parse(readFileSync(PROGRESS_FILE, "utf-8"));
|
|
106
|
+
progress = raw;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// Write default progress
|
|
110
|
+
progress = buildDefaultProgress();
|
|
111
|
+
writeProgressSync(progress);
|
|
112
|
+
}
|
|
113
|
+
// Load recent observations (30d window) from JSONL
|
|
114
|
+
loadObservations();
|
|
115
|
+
log.info("Training system initialized");
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
log.warn(`Training init failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function buildDefaultProgress() {
|
|
122
|
+
return {
|
|
123
|
+
lastScan: null,
|
|
124
|
+
lastBoardWatermark: null,
|
|
125
|
+
lastActivityId: 0,
|
|
126
|
+
trees: {
|
|
127
|
+
board_craft: {
|
|
128
|
+
label: "Board Craft",
|
|
129
|
+
level: 1,
|
|
130
|
+
unlocked: true,
|
|
131
|
+
skills: Object.fromEntries(BOARD_CRAFT_SKILLS.map((s) => [s.id, { signal: 0, observations: 0, status: "undiscovered" }])),
|
|
132
|
+
},
|
|
133
|
+
observatory_literacy: {
|
|
134
|
+
label: "Observatory Literacy",
|
|
135
|
+
level: 2,
|
|
136
|
+
unlocked: false,
|
|
137
|
+
skills: Object.fromEntries(OBSERVATORY_SKILLS.map((s) => [s.id, { signal: 0, observations: 0, status: "undiscovered" }])),
|
|
138
|
+
},
|
|
139
|
+
tuning_core: {
|
|
140
|
+
label: "Tuning Core",
|
|
141
|
+
level: 3,
|
|
142
|
+
unlocked: false,
|
|
143
|
+
skills: Object.fromEntries(TUNING_SKILLS.map((s) => [s.id, { signal: 0, observations: 0, status: "undiscovered" }])),
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
nextNudge: null,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
function writeProgressSync(p) {
|
|
150
|
+
try {
|
|
151
|
+
const dir = TRAINING_DIR;
|
|
152
|
+
if (!existsSync(dir)) {
|
|
153
|
+
mkdirSync(dir, { recursive: true });
|
|
154
|
+
}
|
|
155
|
+
writeFileSync(PROGRESS_FILE, JSON.stringify(p, null, 2) + "\n", "utf-8");
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
log.warn(`Failed to write progress.json: ${err instanceof Error ? err.message : String(err)}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function loadObservations() {
|
|
162
|
+
try {
|
|
163
|
+
const raw = readFileSync(PROFICIENCY_FILE, "utf-8");
|
|
164
|
+
const cutoff = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString();
|
|
165
|
+
observations = [];
|
|
166
|
+
for (const line of raw.split("\n")) {
|
|
167
|
+
const trimmed = line.trim();
|
|
168
|
+
if (!trimmed)
|
|
169
|
+
continue;
|
|
170
|
+
try {
|
|
171
|
+
const obj = JSON.parse(trimmed);
|
|
172
|
+
if (obj._schema)
|
|
173
|
+
continue;
|
|
174
|
+
if (obj.type === "observation" && obj.timestamp >= cutoff) {
|
|
175
|
+
observations.push(obj);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// skip malformed
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
observations = [];
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// ─── Board Craft heuristics ───────────────────────────────────────────────────
|
|
188
|
+
function assessBoardCraft(task) {
|
|
189
|
+
const now = new Date().toISOString();
|
|
190
|
+
const obs = [];
|
|
191
|
+
const id = task.identifier;
|
|
192
|
+
const desc = task.description || "";
|
|
193
|
+
const title = task.title || "";
|
|
194
|
+
// bc.title: >5 words, contains a verb
|
|
195
|
+
const wordCount = title.trim().split(/\s+/).length;
|
|
196
|
+
const hasVerb = /\b(?:add|create|fix|update|remove|implement|refactor|build|design|configure|integrate|migrate|optimize|enable|disable|set up|write|deploy|test|validate|handle|extract|convert|move|rename|replace|rewrite|clean|improve|extend)\b/i.test(title);
|
|
197
|
+
obs.push({
|
|
198
|
+
type: "observation",
|
|
199
|
+
skillId: "bc.title",
|
|
200
|
+
timestamp: now,
|
|
201
|
+
positive: wordCount > 5 && hasVerb,
|
|
202
|
+
context: `${id}: ${wordCount} words${hasVerb ? ", has verb" : ", no verb"}`,
|
|
203
|
+
});
|
|
204
|
+
// bc.description: >80 chars OR has file paths/acceptance keywords
|
|
205
|
+
const hasFilePaths = /(?:src\/|brain\/|public\/|\.ts|\.js|\.md)/.test(desc);
|
|
206
|
+
const hasActionableDetail = /(?:acceptance|criteria|deliverable|must|should|implement|add|create|fix|update|remove|when|endpoint|route|component)/i.test(desc);
|
|
207
|
+
obs.push({
|
|
208
|
+
type: "observation",
|
|
209
|
+
skillId: "bc.description",
|
|
210
|
+
timestamp: now,
|
|
211
|
+
positive: desc.length >= 80 || hasFilePaths || hasActionableDetail,
|
|
212
|
+
context: `${id}: ${desc.length} chars${hasFilePaths ? ", has paths" : ""}${hasActionableDetail ? ", has detail" : ""}`,
|
|
213
|
+
});
|
|
214
|
+
// bc.acceptance: contains should/must/when/deliverable
|
|
215
|
+
const hasAcceptance = /\b(?:should|must|when|deliverable|given|then|expect|verify|assert)\b/i.test(desc);
|
|
216
|
+
obs.push({
|
|
217
|
+
type: "observation",
|
|
218
|
+
skillId: "bc.acceptance",
|
|
219
|
+
timestamp: now,
|
|
220
|
+
positive: hasAcceptance,
|
|
221
|
+
context: `${id}: ${hasAcceptance ? "has" : "no"} acceptance keywords`,
|
|
222
|
+
});
|
|
223
|
+
// bc.priority: priority !== 0
|
|
224
|
+
obs.push({
|
|
225
|
+
type: "observation",
|
|
226
|
+
skillId: "bc.priority",
|
|
227
|
+
timestamp: now,
|
|
228
|
+
positive: task.priority !== 0,
|
|
229
|
+
context: `${id}: priority=${task.priority}`,
|
|
230
|
+
});
|
|
231
|
+
// bc.file_paths: description references src/ or brain/ or .ts/.md
|
|
232
|
+
obs.push({
|
|
233
|
+
type: "observation",
|
|
234
|
+
skillId: "bc.file_paths",
|
|
235
|
+
timestamp: now,
|
|
236
|
+
positive: hasFilePaths,
|
|
237
|
+
context: `${id}: ${hasFilePaths ? "references files" : "no file refs"}`,
|
|
238
|
+
});
|
|
239
|
+
// bc.exchanges: has human-authored exchanges (source: "chat")
|
|
240
|
+
const humanExchanges = (task.exchanges ?? []).filter((ex) => ex.source === "chat");
|
|
241
|
+
obs.push({
|
|
242
|
+
type: "observation",
|
|
243
|
+
skillId: "bc.exchanges",
|
|
244
|
+
timestamp: now,
|
|
245
|
+
positive: humanExchanges.length > 0,
|
|
246
|
+
context: `${id}: ${humanExchanges.length} chat exchange(s)`,
|
|
247
|
+
});
|
|
248
|
+
return obs;
|
|
249
|
+
}
|
|
250
|
+
// ─── Observatory Literacy heuristics ──────────────────────────────────────────
|
|
251
|
+
async function assessObservatoryLiteracy() {
|
|
252
|
+
const now = new Date().toISOString();
|
|
253
|
+
const obs = [];
|
|
254
|
+
const activities = await getActivities(progress.lastActivityId);
|
|
255
|
+
// ol.observatory: check for observatory access in activity log
|
|
256
|
+
const hasObservatoryAccess = activities.some((a) => a.summary.toLowerCase().includes("observatory") ||
|
|
257
|
+
a.source === "system" && a.summary.includes("/observatory"));
|
|
258
|
+
if (hasObservatoryAccess) {
|
|
259
|
+
obs.push({
|
|
260
|
+
type: "observation",
|
|
261
|
+
skillId: "ol.observatory",
|
|
262
|
+
timestamp: now,
|
|
263
|
+
positive: true,
|
|
264
|
+
context: "Observatory accessed recently",
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
// ol.briefing: chat activity within hours of briefing delivery
|
|
268
|
+
const briefingActivity = activities.find((a) => a.source === "system" && a.summary.includes("Morning briefing delivered"));
|
|
269
|
+
if (briefingActivity) {
|
|
270
|
+
const briefingTime = new Date(briefingActivity.timestamp).getTime();
|
|
271
|
+
const chatAfterBriefing = activities.some((a) => (a.source === "board" || a.source === "agent") &&
|
|
272
|
+
new Date(a.timestamp).getTime() > briefingTime &&
|
|
273
|
+
new Date(a.timestamp).getTime() < briefingTime + 4 * 60 * 60 * 1000);
|
|
274
|
+
obs.push({
|
|
275
|
+
type: "observation",
|
|
276
|
+
skillId: "ol.briefing",
|
|
277
|
+
timestamp: now,
|
|
278
|
+
positive: chatAfterBriefing,
|
|
279
|
+
context: chatAfterBriefing ? "Activity seen after briefing" : "No activity after briefing",
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
// ol.bridge: references bridge report or acts on failed task
|
|
283
|
+
const bridgeRef = activities.some((a) => a.summary.toLowerCase().includes("bridge") ||
|
|
284
|
+
a.summary.toLowerCase().includes("bridge report"));
|
|
285
|
+
if (bridgeRef) {
|
|
286
|
+
obs.push({
|
|
287
|
+
type: "observation",
|
|
288
|
+
skillId: "ol.bridge",
|
|
289
|
+
timestamp: now,
|
|
290
|
+
positive: true,
|
|
291
|
+
context: "Bridge report referenced in activity",
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
// ol.grooming: check if user groomed items within 24h of a grooming nudge
|
|
295
|
+
const groomingNudge = activities.find((a) => a.source === "board" && a.summary.includes("Grooming"));
|
|
296
|
+
if (groomingNudge) {
|
|
297
|
+
const nudgeTime = new Date(groomingNudge.timestamp).getTime();
|
|
298
|
+
const groomedAfter = activities.some((a) => a.source === "board" &&
|
|
299
|
+
a.summary.includes("exchange") &&
|
|
300
|
+
new Date(a.timestamp).getTime() > nudgeTime &&
|
|
301
|
+
new Date(a.timestamp).getTime() < nudgeTime + 24 * 60 * 60 * 1000);
|
|
302
|
+
if (groomedAfter) {
|
|
303
|
+
obs.push({
|
|
304
|
+
type: "observation",
|
|
305
|
+
skillId: "ol.grooming",
|
|
306
|
+
timestamp: now,
|
|
307
|
+
positive: true,
|
|
308
|
+
context: "Groomed items within 24h of nudge",
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return obs;
|
|
313
|
+
}
|
|
314
|
+
// ─── Tuning Core heuristics ───────────────────────────────────────────────────
|
|
315
|
+
function assessTuningCore() {
|
|
316
|
+
const now = new Date().toISOString();
|
|
317
|
+
const obs = [];
|
|
318
|
+
// tc.settings: check if settings.json differs from defaults
|
|
319
|
+
try {
|
|
320
|
+
const settingsPath = join(BRAIN_DIR, "settings.json");
|
|
321
|
+
if (existsSync(settingsPath)) {
|
|
322
|
+
const content = readFileSync(settingsPath, "utf-8");
|
|
323
|
+
const settings = JSON.parse(content);
|
|
324
|
+
// If settings has been customized (more than just default keys)
|
|
325
|
+
const keys = Object.keys(settings);
|
|
326
|
+
const isCustomized = keys.length > 2; // default has ~2 keys
|
|
327
|
+
obs.push({
|
|
328
|
+
type: "observation",
|
|
329
|
+
skillId: "tc.settings",
|
|
330
|
+
timestamp: now,
|
|
331
|
+
positive: isCustomized,
|
|
332
|
+
context: `settings.json has ${keys.length} keys`,
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
// can't read settings — skip
|
|
338
|
+
}
|
|
339
|
+
// tc.goals: check if goals.yaml was updated in last 30 days
|
|
340
|
+
try {
|
|
341
|
+
const goalsPath = join(BRAIN_DIR, "operations", "goals.yaml");
|
|
342
|
+
if (existsSync(goalsPath)) {
|
|
343
|
+
const stat = statSync(goalsPath);
|
|
344
|
+
const thirtyDaysAgo = Date.now() - 30 * 24 * 60 * 60 * 1000;
|
|
345
|
+
obs.push({
|
|
346
|
+
type: "observation",
|
|
347
|
+
skillId: "tc.goals",
|
|
348
|
+
timestamp: now,
|
|
349
|
+
positive: stat.mtimeMs > thirtyDaysAgo,
|
|
350
|
+
context: `goals.yaml last modified ${Math.round((Date.now() - stat.mtimeMs) / (24 * 60 * 60 * 1000))}d ago`,
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
catch {
|
|
355
|
+
// can't stat goals — skip
|
|
356
|
+
}
|
|
357
|
+
// tc.patterns: check activity log for settings/routine discussions
|
|
358
|
+
// This is a lightweight check — just see if there have been chat exchanges about patterns
|
|
359
|
+
// We'll rely on the activity log scan in assessObservatoryLiteracy for the full picture
|
|
360
|
+
return obs;
|
|
361
|
+
}
|
|
362
|
+
// ─── Signal computation ───────────────────────────────────────────────────────
|
|
363
|
+
function computeSkillStatus(skillId) {
|
|
364
|
+
const cutoff = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString();
|
|
365
|
+
const relevant = observations.filter((o) => o.skillId === skillId && o.timestamp >= cutoff);
|
|
366
|
+
const total = relevant.length;
|
|
367
|
+
const positive = relevant.filter((o) => o.positive).length;
|
|
368
|
+
const signal = total > 0 ? positive / total : 0;
|
|
369
|
+
let status;
|
|
370
|
+
if (total === 0) {
|
|
371
|
+
status = "undiscovered";
|
|
372
|
+
}
|
|
373
|
+
else if (total <= 3) {
|
|
374
|
+
status = "introduced";
|
|
375
|
+
}
|
|
376
|
+
else if (signal < 0.5) {
|
|
377
|
+
status = "learning";
|
|
378
|
+
}
|
|
379
|
+
else if (signal < 0.8) {
|
|
380
|
+
status = "practicing";
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
status = "practiced";
|
|
384
|
+
}
|
|
385
|
+
return { signal: Math.round(signal * 100) / 100, observations: total, status };
|
|
386
|
+
}
|
|
387
|
+
// ─── Level progression ────────────────────────────────────────────────────────
|
|
388
|
+
function checkTreeUnlocks(trees) {
|
|
389
|
+
let changed = false;
|
|
390
|
+
// Level 2 (Observatory Literacy): unlocks when 3+ Board Craft skills are practicing/practiced
|
|
391
|
+
const bcSkills = Object.values(trees.board_craft?.skills ?? {});
|
|
392
|
+
const bcProficient = bcSkills.filter((s) => s.status === "practicing" || s.status === "practiced").length;
|
|
393
|
+
const olShouldUnlock = bcProficient >= 3;
|
|
394
|
+
if (trees.observatory_literacy && trees.observatory_literacy.unlocked !== olShouldUnlock) {
|
|
395
|
+
trees.observatory_literacy.unlocked = olShouldUnlock;
|
|
396
|
+
changed = true;
|
|
397
|
+
}
|
|
398
|
+
// Level 3 (Tuning Core): unlocks when 2+ Observatory Literacy skills are practicing/practiced
|
|
399
|
+
const olSkills = Object.values(trees.observatory_literacy?.skills ?? {});
|
|
400
|
+
const olProficient = olSkills.filter((s) => s.status === "practicing" || s.status === "practiced").length;
|
|
401
|
+
const tcShouldUnlock = olProficient >= 2;
|
|
402
|
+
if (trees.tuning_core && trees.tuning_core.unlocked !== tcShouldUnlock) {
|
|
403
|
+
trees.tuning_core.unlocked = tcShouldUnlock;
|
|
404
|
+
changed = true;
|
|
405
|
+
}
|
|
406
|
+
return changed;
|
|
407
|
+
}
|
|
408
|
+
// ─── Nudge engine ─────────────────────────────────────────────────────────────
|
|
409
|
+
const MAX_DAILY_NUDGES = 3;
|
|
410
|
+
const SKILL_COOLDOWN_MS = 24 * 60 * 60 * 1000; // 24h
|
|
411
|
+
function canNudge(skillId) {
|
|
412
|
+
// Daily limit
|
|
413
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
414
|
+
if (dailyNudges.date !== today) {
|
|
415
|
+
dailyNudges = { date: today, count: 0 };
|
|
416
|
+
}
|
|
417
|
+
if (dailyNudges.count >= MAX_DAILY_NUDGES)
|
|
418
|
+
return false;
|
|
419
|
+
// Per-skill cooldown
|
|
420
|
+
const lastNudge = nudgeCooldowns.get(skillId);
|
|
421
|
+
if (lastNudge) {
|
|
422
|
+
const elapsed = Date.now() - new Date(lastNudge).getTime();
|
|
423
|
+
if (elapsed < SKILL_COOLDOWN_MS)
|
|
424
|
+
return false;
|
|
425
|
+
}
|
|
426
|
+
return true;
|
|
427
|
+
}
|
|
428
|
+
function recordNudge(skillId) {
|
|
429
|
+
const now = new Date().toISOString();
|
|
430
|
+
nudgeCooldowns.set(skillId, now);
|
|
431
|
+
const today = now.slice(0, 10);
|
|
432
|
+
if (dailyNudges.date !== today) {
|
|
433
|
+
dailyNudges = { date: today, count: 1 };
|
|
434
|
+
}
|
|
435
|
+
else {
|
|
436
|
+
dailyNudges.count++;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
function pickNudge(trees) {
|
|
440
|
+
// Priority 1: celebrate — skill just crossed 0.8
|
|
441
|
+
for (const tree of Object.values(trees)) {
|
|
442
|
+
if (!tree.unlocked)
|
|
443
|
+
continue;
|
|
444
|
+
for (const [skillId, snap] of Object.entries(tree.skills)) {
|
|
445
|
+
if (snap.status === "practiced" && canNudge(skillId)) {
|
|
446
|
+
// Check if this is a "just crossed" event by looking at previous progress
|
|
447
|
+
const prev = progress.trees[getTreeKey(skillId)]?.skills[skillId];
|
|
448
|
+
if (prev && prev.status !== "practiced") {
|
|
449
|
+
return { skillId, type: "celebrate" };
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
// Priority 2: level_up — new tree just unlocked
|
|
455
|
+
for (const [key, tree] of Object.entries(trees)) {
|
|
456
|
+
const prevTree = progress.trees[key];
|
|
457
|
+
if (tree.unlocked && prevTree && !prevTree.unlocked) {
|
|
458
|
+
const firstSkill = Object.keys(tree.skills)[0];
|
|
459
|
+
if (firstSkill && canNudge(firstSkill)) {
|
|
460
|
+
return { skillId: firstSkill, type: "level_up" };
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
// Priority 3: introduce — lowest-ordered undiscovered skill in active tree
|
|
465
|
+
for (const tree of Object.values(trees)) {
|
|
466
|
+
if (!tree.unlocked)
|
|
467
|
+
continue;
|
|
468
|
+
for (const [skillId, snap] of Object.entries(tree.skills)) {
|
|
469
|
+
if (snap.status === "undiscovered" && canNudge(skillId)) {
|
|
470
|
+
return { skillId, type: "introduce" };
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
// Priority 4: practice — lowest-signal skill in active tree
|
|
475
|
+
let lowestSignal = Infinity;
|
|
476
|
+
let lowestSkill = null;
|
|
477
|
+
for (const tree of Object.values(trees)) {
|
|
478
|
+
if (!tree.unlocked)
|
|
479
|
+
continue;
|
|
480
|
+
for (const [skillId, snap] of Object.entries(tree.skills)) {
|
|
481
|
+
if (snap.observations >= 4 && snap.signal < 0.5 && snap.signal < lowestSignal && canNudge(skillId)) {
|
|
482
|
+
lowestSignal = snap.signal;
|
|
483
|
+
lowestSkill = skillId;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
if (lowestSkill) {
|
|
488
|
+
return { skillId: lowestSkill, type: "practice" };
|
|
489
|
+
}
|
|
490
|
+
return null;
|
|
491
|
+
}
|
|
492
|
+
function getTreeKey(skillId) {
|
|
493
|
+
const prefix = skillId.split(".")[0];
|
|
494
|
+
if (prefix === "bc")
|
|
495
|
+
return "board_craft";
|
|
496
|
+
if (prefix === "ol")
|
|
497
|
+
return "observatory_literacy";
|
|
498
|
+
if (prefix === "tc")
|
|
499
|
+
return "tuning_core";
|
|
500
|
+
return "board_craft";
|
|
501
|
+
}
|
|
502
|
+
function formatNudgeMessage(nudge) {
|
|
503
|
+
switch (nudge.type) {
|
|
504
|
+
case "introduce":
|
|
505
|
+
return INTRODUCE_MESSAGES[nudge.skillId] ?? `Training tip for ${nudge.skillId}.`;
|
|
506
|
+
case "celebrate":
|
|
507
|
+
return CELEBRATE_MESSAGES[nudge.skillId] ?? `Great work on ${nudge.skillId}!`;
|
|
508
|
+
case "level_up": {
|
|
509
|
+
const tree = getTreeKey(nudge.skillId);
|
|
510
|
+
const label = tree === "observatory_literacy" ? "Observatory Literacy" : "Tuning Core";
|
|
511
|
+
return `Level up! ${label} unlocked. You've got the previous skills down — let's build on that.`;
|
|
512
|
+
}
|
|
513
|
+
case "practice":
|
|
514
|
+
return INTRODUCE_MESSAGES[nudge.skillId]
|
|
515
|
+
? `Reminder: ${INTRODUCE_MESSAGES[nudge.skillId]}`
|
|
516
|
+
: `Keep practicing ${nudge.skillId}.`;
|
|
517
|
+
default:
|
|
518
|
+
return "";
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
// ─── Main scan ────────────────────────────────────────────────────────────────
|
|
522
|
+
/**
|
|
523
|
+
* Primary training scan. Called after grooming completes.
|
|
524
|
+
* 1. Assess Board Craft from passed-in tasks
|
|
525
|
+
* 2. Assess Observatory Literacy from activity log
|
|
526
|
+
* 3. Assess Tuning Core from file checks
|
|
527
|
+
* 4. Append observations, recompute status, write snapshot, nudge
|
|
528
|
+
*/
|
|
529
|
+
async function runTrainingScan(tasks) {
|
|
530
|
+
const now = new Date().toISOString();
|
|
531
|
+
const newObs = [];
|
|
532
|
+
// 1. Board Craft — assess tasks updated since last watermark
|
|
533
|
+
const watermark = progress.lastBoardWatermark ?? "1970-01-01T00:00:00Z";
|
|
534
|
+
for (const task of tasks) {
|
|
535
|
+
if (task.state === "done" || task.state === "cancelled")
|
|
536
|
+
continue;
|
|
537
|
+
if (task.updatedAt > watermark || task.createdAt > watermark) {
|
|
538
|
+
newObs.push(...assessBoardCraft(task));
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
// 2. Observatory Literacy (if tree unlocked)
|
|
542
|
+
if (progress.trees.observatory_literacy?.unlocked) {
|
|
543
|
+
const olObs = await assessObservatoryLiteracy();
|
|
544
|
+
newObs.push(...olObs);
|
|
545
|
+
}
|
|
546
|
+
// 3. Tuning Core (if tree unlocked)
|
|
547
|
+
if (progress.trees.tuning_core?.unlocked) {
|
|
548
|
+
newObs.push(...assessTuningCore());
|
|
549
|
+
}
|
|
550
|
+
if (newObs.length === 0) {
|
|
551
|
+
log.debug("Training scan: no new observations");
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
|
+
// 4. Append observations to JSONL
|
|
555
|
+
for (const ob of newObs) {
|
|
556
|
+
try {
|
|
557
|
+
await appendBrainLine(PROFICIENCY_FILE, JSON.stringify(ob));
|
|
558
|
+
}
|
|
559
|
+
catch {
|
|
560
|
+
try {
|
|
561
|
+
appendBrainLineSync(PROFICIENCY_FILE, JSON.stringify(ob));
|
|
562
|
+
}
|
|
563
|
+
catch {
|
|
564
|
+
// non-critical
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
observations.push(ob);
|
|
568
|
+
}
|
|
569
|
+
// Trim observations to 30d window
|
|
570
|
+
const cutoff = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString();
|
|
571
|
+
observations = observations.filter((o) => o.timestamp >= cutoff);
|
|
572
|
+
// 5. Recompute skill snapshots
|
|
573
|
+
const trees = { ...progress.trees };
|
|
574
|
+
for (const skill of ALL_SKILLS) {
|
|
575
|
+
const treeKey = getTreeKey(skill.id);
|
|
576
|
+
if (!trees[treeKey])
|
|
577
|
+
continue;
|
|
578
|
+
trees[treeKey].skills[skill.id] = computeSkillStatus(skill.id);
|
|
579
|
+
}
|
|
580
|
+
// 6. Check tree unlocks
|
|
581
|
+
const leveledUp = checkTreeUnlocks(trees);
|
|
582
|
+
// 7. Pick nudge
|
|
583
|
+
const nudge = pickNudge(trees);
|
|
584
|
+
// 8. Append status rollups to JSONL
|
|
585
|
+
for (const skill of ALL_SKILLS) {
|
|
586
|
+
const treeKey = getTreeKey(skill.id);
|
|
587
|
+
const snap = trees[treeKey]?.skills[skill.id];
|
|
588
|
+
if (!snap || snap.observations === 0)
|
|
589
|
+
continue;
|
|
590
|
+
const rollup = {
|
|
591
|
+
type: "status",
|
|
592
|
+
skillId: skill.id,
|
|
593
|
+
timestamp: now,
|
|
594
|
+
signal: snap.signal,
|
|
595
|
+
observations: snap.observations,
|
|
596
|
+
positive: Math.round(snap.signal * snap.observations),
|
|
597
|
+
};
|
|
598
|
+
try {
|
|
599
|
+
await appendBrainLine(PROFICIENCY_FILE, JSON.stringify(rollup));
|
|
600
|
+
}
|
|
601
|
+
catch {
|
|
602
|
+
// non-critical
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
// 9. Update and write progress snapshot
|
|
606
|
+
// Find highest activity ID from recent activities
|
|
607
|
+
try {
|
|
608
|
+
const activities = await getActivities(progress.lastActivityId);
|
|
609
|
+
if (activities.length > 0) {
|
|
610
|
+
progress.lastActivityId = activities[activities.length - 1].id;
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
catch {
|
|
614
|
+
// non-critical
|
|
615
|
+
}
|
|
616
|
+
progress = {
|
|
617
|
+
lastScan: now,
|
|
618
|
+
lastBoardWatermark: now,
|
|
619
|
+
lastActivityId: progress.lastActivityId,
|
|
620
|
+
trees,
|
|
621
|
+
nextNudge: nudge,
|
|
622
|
+
};
|
|
623
|
+
try {
|
|
624
|
+
await mkdir(TRAINING_DIR, { recursive: true });
|
|
625
|
+
await writeFile(PROGRESS_FILE, JSON.stringify(progress, null, 2) + "\n", "utf-8");
|
|
626
|
+
}
|
|
627
|
+
catch {
|
|
628
|
+
writeProgressSync(progress);
|
|
629
|
+
}
|
|
630
|
+
// 10. Deliver nudge
|
|
631
|
+
if (nudge) {
|
|
632
|
+
const message = formatNudgeMessage(nudge);
|
|
633
|
+
if (message) {
|
|
634
|
+
pushNotification({
|
|
635
|
+
timestamp: now,
|
|
636
|
+
source: "training",
|
|
637
|
+
message,
|
|
638
|
+
});
|
|
639
|
+
recordNudge(nudge.skillId);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
logActivity({
|
|
643
|
+
source: "system",
|
|
644
|
+
summary: `Training scan: ${newObs.length} observations${nudge ? `, nudged ${nudge.skillId} (${nudge.type})` : ""}`,
|
|
645
|
+
});
|
|
646
|
+
}
|
|
647
|
+
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
648
|
+
/**
|
|
649
|
+
* Hook: called by grooming timer after runGroomingCheck completes.
|
|
650
|
+
* Fire-and-forget — errors logged, never thrown to caller.
|
|
651
|
+
*/
|
|
652
|
+
export async function onGroomingComplete(tasks) {
|
|
653
|
+
if (!initialized)
|
|
654
|
+
initTraining();
|
|
655
|
+
try {
|
|
656
|
+
await runTrainingScan(tasks);
|
|
657
|
+
}
|
|
658
|
+
catch (err) {
|
|
659
|
+
log.warn(`Training scan failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
/**
|
|
663
|
+
* Sync: returns formatted training summary for morning briefing.
|
|
664
|
+
* Returns null if no training data exists yet.
|
|
665
|
+
*/
|
|
666
|
+
export function getTrainingSummary() {
|
|
667
|
+
if (!initialized)
|
|
668
|
+
return null;
|
|
669
|
+
const parts = [];
|
|
670
|
+
for (const [, tree] of Object.entries(progress.trees)) {
|
|
671
|
+
if (!tree.unlocked)
|
|
672
|
+
continue;
|
|
673
|
+
const skills = Object.values(tree.skills);
|
|
674
|
+
const total = skills.length;
|
|
675
|
+
const proficient = skills.filter((s) => s.status === "practicing" || s.status === "practiced").length;
|
|
676
|
+
parts.push(`${tree.label}: ${proficient}/${total} skills practiced`);
|
|
677
|
+
}
|
|
678
|
+
if (parts.length === 0)
|
|
679
|
+
return null;
|
|
680
|
+
// Add next nudge hint
|
|
681
|
+
if (progress.nextNudge) {
|
|
682
|
+
const skill = ALL_SKILLS.find((s) => s.id === progress.nextNudge?.skillId);
|
|
683
|
+
if (skill) {
|
|
684
|
+
parts.push(`Next: ${skill.label.toLowerCase()}`);
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
return " " + parts.join(". ") + ".";
|
|
688
|
+
}
|
|
689
|
+
/**
|
|
690
|
+
* Sync: returns cached progress for API endpoint.
|
|
691
|
+
*/
|
|
692
|
+
export function getTrainingProgress() {
|
|
693
|
+
if (!initialized)
|
|
694
|
+
initTraining();
|
|
695
|
+
return progress;
|
|
696
|
+
}
|
|
697
|
+
//# sourceMappingURL=training.js.map
|