@jack200714/mafw 4.5.1
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/.opencode/mafw/.backup-v61/parametric/base-skill-manifest.yaml +2 -0
- package/.opencode/mafw/STATUS.md +6 -0
- package/.opencode/mafw/ledger.md +20 -0
- package/.opencode/mafw/memory/.harmonic_index.json +28 -0
- package/.opencode/mafw/memory/.review_queue.json +1 -0
- package/.opencode/mafw/memory/tier3/parametric.json +13 -0
- package/.opencode/mafw/memory/tier3/test-goal.json +19 -0
- package/.opencode/mafw/memory-index.json +6 -0
- package/.opencode/mafw/parametric/base-skill-manifest.yaml +2 -0
- package/.opencode/mafw/waves.json +4 -0
- package/.opencode/opencode.json +3 -0
- package/.opencode/plugins/mafw-plugin.ts +8 -0
- package/.opencode/skills/banner-design/SKILL.md +196 -0
- package/.opencode/skills/banner-design/references/banner-sizes-and-styles.md +118 -0
- package/.opencode/skills/brand/SKILL.md +97 -0
- package/.opencode/skills/brand/references/approval-checklist.md +169 -0
- package/.opencode/skills/brand/references/asset-organization.md +157 -0
- package/.opencode/skills/brand/references/brand-guideline-template.md +140 -0
- package/.opencode/skills/brand/references/color-palette-management.md +186 -0
- package/.opencode/skills/brand/references/consistency-checklist.md +94 -0
- package/.opencode/skills/brand/references/logo-usage-rules.md +185 -0
- package/.opencode/skills/brand/references/messaging-framework.md +85 -0
- package/.opencode/skills/brand/references/typography-specifications.md +214 -0
- package/.opencode/skills/brand/references/update.md +118 -0
- package/.opencode/skills/brand/references/visual-identity.md +96 -0
- package/.opencode/skills/brand/references/voice-framework.md +88 -0
- package/.opencode/skills/brand/scripts/extract-colors.cjs +341 -0
- package/.opencode/skills/brand/scripts/inject-brand-context.cjs +349 -0
- package/.opencode/skills/brand/scripts/sync-brand-to-tokens.cjs +248 -0
- package/.opencode/skills/brand/scripts/tests/test_sync_brand_to_tokens.py +52 -0
- package/.opencode/skills/brand/scripts/validate-asset.cjs +387 -0
- package/.opencode/skills/brand/templates/brand-guidelines-starter.md +275 -0
- package/.opencode/skills/design/SKILL.md +313 -0
- package/.opencode/skills/design/data/cip/deliverables.csv +51 -0
- package/.opencode/skills/design/data/cip/industries.csv +21 -0
- package/.opencode/skills/design/data/cip/mockup-contexts.csv +21 -0
- package/.opencode/skills/design/data/cip/styles.csv +21 -0
- package/.opencode/skills/design/data/icon/styles.csv +16 -0
- package/.opencode/skills/design/data/logo/colors.csv +56 -0
- package/.opencode/skills/design/data/logo/industries.csv +56 -0
- package/.opencode/skills/design/data/logo/styles.csv +56 -0
- package/.opencode/skills/design/references/banner-sizes-and-styles.md +118 -0
- package/.opencode/skills/design/references/cip-deliverable-guide.md +95 -0
- package/.opencode/skills/design/references/cip-design.md +121 -0
- package/.opencode/skills/design/references/cip-prompt-engineering.md +84 -0
- package/.opencode/skills/design/references/cip-style-guide.md +68 -0
- package/.opencode/skills/design/references/design-routing.md +207 -0
- package/.opencode/skills/design/references/icon-design.md +122 -0
- package/.opencode/skills/design/references/logo-color-psychology.md +101 -0
- package/.opencode/skills/design/references/logo-design.md +92 -0
- package/.opencode/skills/design/references/logo-prompt-engineering.md +158 -0
- package/.opencode/skills/design/references/logo-style-guide.md +109 -0
- package/.opencode/skills/design/references/slides-copywriting-formulas.md +84 -0
- package/.opencode/skills/design/references/slides-create.md +4 -0
- package/.opencode/skills/design/references/slides-html-template.md +295 -0
- package/.opencode/skills/design/references/slides-layout-patterns.md +137 -0
- package/.opencode/skills/design/references/slides-strategies.md +94 -0
- package/.opencode/skills/design/references/slides.md +42 -0
- package/.opencode/skills/design/references/social-photos-design.md +329 -0
- package/.opencode/skills/design/scripts/cip/core.py +215 -0
- package/.opencode/skills/design/scripts/cip/generate.py +484 -0
- package/.opencode/skills/design/scripts/cip/render-html.py +424 -0
- package/.opencode/skills/design/scripts/cip/search.py +127 -0
- package/.opencode/skills/design/scripts/icon/generate.py +487 -0
- package/.opencode/skills/design/scripts/logo/core.py +175 -0
- package/.opencode/skills/design/scripts/logo/generate.py +362 -0
- package/.opencode/skills/design/scripts/logo/search.py +114 -0
- package/.opencode/skills/design-system/SKILL.md +244 -0
- package/.opencode/skills/design-system/data/slide-backgrounds.csv +11 -0
- package/.opencode/skills/design-system/data/slide-charts.csv +26 -0
- package/.opencode/skills/design-system/data/slide-color-logic.csv +14 -0
- package/.opencode/skills/design-system/data/slide-copy.csv +26 -0
- package/.opencode/skills/design-system/data/slide-layout-logic.csv +16 -0
- package/.opencode/skills/design-system/data/slide-layouts.csv +26 -0
- package/.opencode/skills/design-system/data/slide-strategies.csv +16 -0
- package/.opencode/skills/design-system/data/slide-typography.csv +15 -0
- package/.opencode/skills/design-system/references/component-specs.md +236 -0
- package/.opencode/skills/design-system/references/component-tokens.md +214 -0
- package/.opencode/skills/design-system/references/primitive-tokens.md +203 -0
- package/.opencode/skills/design-system/references/semantic-tokens.md +215 -0
- package/.opencode/skills/design-system/references/states-and-variants.md +241 -0
- package/.opencode/skills/design-system/references/tailwind-integration.md +251 -0
- package/.opencode/skills/design-system/references/token-architecture.md +224 -0
- package/.opencode/skills/design-system/scripts/embed-tokens.cjs +99 -0
- package/.opencode/skills/design-system/scripts/fetch-background.py +317 -0
- package/.opencode/skills/design-system/scripts/generate-slide.py +770 -0
- package/.opencode/skills/design-system/scripts/generate-tokens.cjs +205 -0
- package/.opencode/skills/design-system/scripts/html-token-validator.py +327 -0
- package/.opencode/skills/design-system/scripts/search-slides.py +218 -0
- package/.opencode/skills/design-system/scripts/slide-token-validator.py +35 -0
- package/.opencode/skills/design-system/scripts/slide_search_core.py +453 -0
- package/.opencode/skills/design-system/scripts/tests/test_validate_tokens.py +48 -0
- package/.opencode/skills/design-system/scripts/validate-tokens.cjs +246 -0
- package/.opencode/skills/design-system/templates/design-tokens-starter.json +143 -0
- package/.opencode/skills/frontend-design/LICENSE.txt +21 -0
- package/.opencode/skills/frontend-design/SKILL.md +115 -0
- package/.opencode/skills/mafw-automation-interview/SKILL.md +43 -0
- package/.opencode/skills/mafw-cli-scanner/SKILL.md +37 -0
- package/.opencode/skills/mafw-compression-verifier/SKILL.md +52 -0
- package/.opencode/skills/mafw-desktop-inspector/SKILL.md +170 -0
- package/.opencode/skills/mafw-execute/SKILL.md +62 -0
- package/.opencode/skills/mafw-gateway-restart/SKILL.md +87 -0
- package/.opencode/skills/mafw-github-scanner/SKILL.md +38 -0
- package/.opencode/skills/mafw-goal/SKILL.md +76 -0
- package/.opencode/skills/mafw-interview/SKILL.md +68 -0
- package/.opencode/skills/mafw-memory-extractor/SKILL.md +65 -0
- package/.opencode/skills/mafw-plan/SKILL.md +58 -0
- package/.opencode/skills/mafw-review/SKILL.md +85 -0
- package/.opencode/skills/runtime-plugin-authoring/SKILL.md +791 -0
- package/.opencode/skills/slides/SKILL.md +40 -0
- package/.opencode/skills/slides/references/copywriting-formulas.md +84 -0
- package/.opencode/skills/slides/references/create.md +4 -0
- package/.opencode/skills/slides/references/html-template.md +295 -0
- package/.opencode/skills/slides/references/layout-patterns.md +137 -0
- package/.opencode/skills/slides/references/slide-strategies.md +94 -0
- package/.opencode/skills/ui-styling/LICENSE.txt +202 -0
- package/.opencode/skills/ui-styling/SKILL.md +324 -0
- package/.opencode/skills/ui-styling/references/canvas-design-system.md +320 -0
- package/.opencode/skills/ui-styling/references/shadcn-accessibility.md +471 -0
- package/.opencode/skills/ui-styling/references/shadcn-components.md +424 -0
- package/.opencode/skills/ui-styling/references/shadcn-theming.md +373 -0
- package/.opencode/skills/ui-styling/references/tailwind-customization.md +483 -0
- package/.opencode/skills/ui-styling/references/tailwind-responsive.md +382 -0
- package/.opencode/skills/ui-styling/references/tailwind-utilities.md +455 -0
- package/.opencode/skills/ui-styling/scripts/requirements.txt +17 -0
- package/.opencode/skills/ui-styling/scripts/shadcn_add.py +308 -0
- package/.opencode/skills/ui-styling/scripts/tailwind_config_gen.py +473 -0
- package/.opencode/skills/ui-styling/scripts/tests/coverage-ui.json +1 -0
- package/.opencode/skills/ui-styling/scripts/tests/requirements.txt +3 -0
- package/.opencode/skills/ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/.opencode/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +394 -0
- package/.opencode/skills/ui-ux-pro-max/SKILL.md +388 -0
- package/.opencode/skills/ui-ux-pro-max/data/app-interface.csv +31 -0
- package/.opencode/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/.opencode/skills/ui-ux-pro-max/data/colors.csv +193 -0
- package/.opencode/skills/ui-ux-pro-max/data/google-fonts.csv +1924 -0
- package/.opencode/skills/ui-ux-pro-max/data/icons.csv +106 -0
- package/.opencode/skills/ui-ux-pro-max/data/landing.csv +35 -0
- package/.opencode/skills/ui-ux-pro-max/data/motion.csv +17 -0
- package/.opencode/skills/ui-ux-pro-max/data/products.csv +193 -0
- package/.opencode/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/angular.csv +51 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/avalonia.csv +57 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/javafx.csv +76 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/laravel.csv +51 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +71 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/threejs.csv +54 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/uno.csv +60 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/uwp.csv +56 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/winui.csv +60 -0
- package/.opencode/skills/ui-ux-pro-max/data/stacks/wpf.csv +57 -0
- package/.opencode/skills/ui-ux-pro-max/data/styles.csv +85 -0
- package/.opencode/skills/ui-ux-pro-max/data/typography.csv +75 -0
- package/.opencode/skills/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
- package/.opencode/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.opencode/skills/ui-ux-pro-max/scripts/core.py +464 -0
- package/.opencode/skills/ui-ux-pro-max/scripts/design_system.py +1479 -0
- package/.opencode/skills/ui-ux-pro-max/scripts/search.py +162 -0
- package/.opencode/skills/ui-ux-pro-max/scripts/tests/test_core.py +134 -0
- package/.opencode/skills/ui-ux-pro-max/scripts/tests/test_design_system_mode.py +159 -0
- package/.opencode/skills/ui-ux-pro-max/scripts/validate_data.py +114 -0
- package/LICENSE +21 -0
- package/README.md +199 -0
- package/bin/mafw.js +436 -0
- package/dist/hooks/bash-python-guide.d.ts +4 -0
- package/dist/hooks/bash-python-guide.d.ts.map +1 -0
- package/dist/hooks/bash-python-guide.js +67 -0
- package/dist/hooks/bash-python-guide.js.map +1 -0
- package/dist/hooks/handoff.d.ts +9 -0
- package/dist/hooks/handoff.d.ts.map +1 -0
- package/dist/hooks/handoff.js +8 -0
- package/dist/hooks/handoff.js.map +1 -0
- package/dist/hooks/hook-manager.d.ts +32 -0
- package/dist/hooks/hook-manager.d.ts.map +1 -0
- package/dist/hooks/hook-manager.js +91 -0
- package/dist/hooks/hook-manager.js.map +1 -0
- package/dist/hooks/llm-after.d.ts +8 -0
- package/dist/hooks/llm-after.d.ts.map +1 -0
- package/dist/hooks/llm-after.js +8 -0
- package/dist/hooks/llm-after.js.map +1 -0
- package/dist/hooks/media-ingest.d.ts +43 -0
- package/dist/hooks/media-ingest.d.ts.map +1 -0
- package/dist/hooks/media-ingest.js +269 -0
- package/dist/hooks/media-ingest.js.map +1 -0
- package/dist/hooks/memory-guide.d.ts +3 -0
- package/dist/hooks/memory-guide.d.ts.map +1 -0
- package/dist/hooks/memory-guide.js +47 -0
- package/dist/hooks/memory-guide.js.map +1 -0
- package/dist/hooks/observation-capture.d.ts +17 -0
- package/dist/hooks/observation-capture.d.ts.map +1 -0
- package/dist/hooks/observation-capture.js +20 -0
- package/dist/hooks/observation-capture.js.map +1 -0
- package/dist/hooks/session-compacting.d.ts +6 -0
- package/dist/hooks/session-compacting.d.ts.map +1 -0
- package/dist/hooks/session-compacting.js +6 -0
- package/dist/hooks/session-compacting.js.map +1 -0
- package/dist/hooks/session-ending.d.ts +20 -0
- package/dist/hooks/session-ending.d.ts.map +1 -0
- package/dist/hooks/session-ending.js +113 -0
- package/dist/hooks/session-ending.js.map +1 -0
- package/dist/hooks/session-recall.d.ts +2 -0
- package/dist/hooks/session-recall.d.ts.map +1 -0
- package/dist/hooks/session-recall.js +103 -0
- package/dist/hooks/session-recall.js.map +1 -0
- package/dist/hooks/session-start.d.ts +9 -0
- package/dist/hooks/session-start.d.ts.map +1 -0
- package/dist/hooks/session-start.js +42 -0
- package/dist/hooks/session-start.js.map +1 -0
- package/dist/hooks/tool-before.d.ts +10 -0
- package/dist/hooks/tool-before.d.ts.map +1 -0
- package/dist/hooks/tool-before.js +6 -0
- package/dist/hooks/tool-before.js.map +1 -0
- package/dist/hooks/tool-executed.d.ts +19 -0
- package/dist/hooks/tool-executed.d.ts.map +1 -0
- package/dist/hooks/tool-executed.js +12 -0
- package/dist/hooks/tool-executed.js.map +1 -0
- package/dist/hooks/user-profile.d.ts +2 -0
- package/dist/hooks/user-profile.d.ts.map +1 -0
- package/dist/hooks/user-profile.js +30 -0
- package/dist/hooks/user-profile.js.map +1 -0
- package/dist/hooks/user-prompt.d.ts +9 -0
- package/dist/hooks/user-prompt.d.ts.map +1 -0
- package/dist/hooks/user-prompt.js +8 -0
- package/dist/hooks/user-prompt.js.map +1 -0
- package/dist/hooks/voice-guide.d.ts +8 -0
- package/dist/hooks/voice-guide.d.ts.map +1 -0
- package/dist/hooks/voice-guide.js +101 -0
- package/dist/hooks/voice-guide.js.map +1 -0
- package/dist/plugin.d.ts +55 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +342 -0
- package/dist/plugin.js.map +1 -0
- package/dist/tools/add-memory.d.ts +17 -0
- package/dist/tools/add-memory.d.ts.map +1 -0
- package/dist/tools/add-memory.js +60 -0
- package/dist/tools/add-memory.js.map +1 -0
- package/dist/tools/media-ask.d.ts +14 -0
- package/dist/tools/media-ask.d.ts.map +1 -0
- package/dist/tools/media-ask.js +224 -0
- package/dist/tools/media-ask.js.map +1 -0
- package/dist/tools/media-speak.d.ts +16 -0
- package/dist/tools/media-speak.d.ts.map +1 -0
- package/dist/tools/media-speak.js +78 -0
- package/dist/tools/media-speak.js.map +1 -0
- package/dist/tools/media-upload.d.ts +14 -0
- package/dist/tools/media-upload.d.ts.map +1 -0
- package/dist/tools/media-upload.js +155 -0
- package/dist/tools/media-upload.js.map +1 -0
- package/dist/tools/python-exec.d.ts +13 -0
- package/dist/tools/python-exec.d.ts.map +1 -0
- package/dist/tools/python-exec.js +99 -0
- package/dist/tools/python-exec.js.map +1 -0
- package/dist/tools/python-restart.d.ts +11 -0
- package/dist/tools/python-restart.d.ts.map +1 -0
- package/dist/tools/python-restart.js +33 -0
- package/dist/tools/python-restart.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +23 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +75 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/config-loader.d.ts +20 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +194 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/fallback.d.ts +7 -0
- package/dist/utils/fallback.d.ts.map +1 -0
- package/dist/utils/fallback.js +20 -0
- package/dist/utils/fallback.js.map +1 -0
- package/dist/utils/git.d.ts +24 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +71 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/github.d.ts +37 -0
- package/dist/utils/github.d.ts.map +1 -0
- package/dist/utils/github.js +53 -0
- package/dist/utils/github.js.map +1 -0
- package/dist/utils/global-path.d.ts +2 -0
- package/dist/utils/global-path.d.ts.map +1 -0
- package/dist/utils/global-path.js +32 -0
- package/dist/utils/global-path.js.map +1 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +69 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/obs-capture.d.ts +7 -0
- package/dist/utils/obs-capture.d.ts.map +1 -0
- package/dist/utils/obs-capture.js +49 -0
- package/dist/utils/obs-capture.js.map +1 -0
- package/dist/utils/retry.d.ts +11 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +45 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/self-wiring.d.ts +13 -0
- package/dist/utils/self-wiring.d.ts.map +1 -0
- package/dist/utils/self-wiring.js +86 -0
- package/dist/utils/self-wiring.js.map +1 -0
- package/dist/utils/state.d.ts +106 -0
- package/dist/utils/state.d.ts.map +1 -0
- package/dist/utils/state.js +166 -0
- package/dist/utils/state.js.map +1 -0
- package/dist/utils/status.d.ts +47 -0
- package/dist/utils/status.d.ts.map +1 -0
- package/dist/utils/status.js +147 -0
- package/dist/utils/status.js.map +1 -0
- package/dist/utils/ttl-map.d.ts +17 -0
- package/dist/utils/ttl-map.d.ts.map +1 -0
- package/dist/utils/ttl-map.js +67 -0
- package/dist/utils/ttl-map.js.map +1 -0
- package/gateway/dist/automation-engine.js +729 -0
- package/gateway/dist/chat/chat-sessions.js +95 -0
- package/gateway/dist/chat/graph-runner.js +76 -0
- package/gateway/dist/chat/index.js +7 -0
- package/gateway/dist/chat/intent-classifier.js +23 -0
- package/gateway/dist/config.js +416 -0
- package/gateway/dist/core/auth.js +96 -0
- package/gateway/dist/core/budget-guard.js +52 -0
- package/gateway/dist/core/compression/bm25-index.js +176 -0
- package/gateway/dist/core/compression/compression-pipeline.js +157 -0
- package/gateway/dist/core/compression/compression-strategy-selector.js +32 -0
- package/gateway/dist/core/compression/compression-verifier.js +79 -0
- package/gateway/dist/core/compression/diff-compressor.js +69 -0
- package/gateway/dist/core/compression/hybrid-compressor.js +104 -0
- package/gateway/dist/core/compression/lesson-compactor.js +114 -0
- package/gateway/dist/core/compression/memory-index.js +190 -0
- package/gateway/dist/core/compression/observation-classifier.js +41 -0
- package/gateway/dist/core/compression/observation-deduplicator.js +43 -0
- package/gateway/dist/core/compression/rrf-fusion.js +63 -0
- package/gateway/dist/core/compression/session-pruner.js +137 -0
- package/gateway/dist/core/compression/token-budget-allocator.js +141 -0
- package/gateway/dist/core/compression/vector-index.js +117 -0
- package/gateway/dist/core/compression/zero-token-compressor.js +80 -0
- package/gateway/dist/core/cost/cognitive-router.js +41 -0
- package/gateway/dist/core/cost/cost-estimator.js +63 -0
- package/gateway/dist/core/cost/types.js +19 -0
- package/gateway/dist/core/engine/degradation.js +159 -0
- package/gateway/dist/core/engine/goal-worktree-manager.js +131 -0
- package/gateway/dist/core/engine/lesson-manager.js +222 -0
- package/gateway/dist/core/engine/optimistic-sync.js +100 -0
- package/gateway/dist/core/engine/phase-orchestrator.js +153 -0
- package/gateway/dist/core/engine/report-generator.js +131 -0
- package/gateway/dist/core/engine/state-lock.js +91 -0
- package/gateway/dist/core/engine/task-branch-manager.js +102 -0
- package/gateway/dist/core/engine/wave-dependency.js +67 -0
- package/gateway/dist/core/engine/wave-executor.js +112 -0
- package/gateway/dist/core/goal-budget.js +63 -0
- package/gateway/dist/core/graph/entity-extractor.js +53 -0
- package/gateway/dist/core/graph/graph-searcher.js +120 -0
- package/gateway/dist/core/graph/knowledge-graph-manager.js +138 -0
- package/gateway/dist/core/graph/relation-inferencer.js +67 -0
- package/gateway/dist/core/graph/types.js +2 -0
- package/gateway/dist/core/hooks/handoff.js +7 -0
- package/gateway/dist/core/hooks/hook-manager.js +91 -0
- package/gateway/dist/core/hooks/llm-after.js +7 -0
- package/gateway/dist/core/hooks/observation-capture.js +19 -0
- package/gateway/dist/core/hooks/session-compacting.js +5 -0
- package/gateway/dist/core/hooks/session-ending.js +123 -0
- package/gateway/dist/core/hooks/session-start.js +51 -0
- package/gateway/dist/core/hooks/tool-before.js +5 -0
- package/gateway/dist/core/hooks/tool-executed.js +11 -0
- package/gateway/dist/core/hooks/user-prompt.js +7 -0
- package/gateway/dist/core/index.js +119 -0
- package/gateway/dist/core/langchain/agent-adapter.js +39 -0
- package/gateway/dist/core/langchain/index.js +12 -0
- package/gateway/dist/core/langchain/memory.js +35 -0
- package/gateway/dist/core/langchain/node-runner.js +115 -0
- package/gateway/dist/core/langchain/retriever.js +28 -0
- package/gateway/dist/core/langgraph/checkpointer.js +200 -0
- package/gateway/dist/core/langgraph/graph.js +57 -0
- package/gateway/dist/core/langgraph/index.js +25 -0
- package/gateway/dist/core/langgraph/loop-state.js +71 -0
- package/gateway/dist/core/langgraph/nodes/archive.node.js +27 -0
- package/gateway/dist/core/langgraph/nodes/execute.node.js +5 -0
- package/gateway/dist/core/langgraph/nodes/plan.node.js +101 -0
- package/gateway/dist/core/langgraph/nodes/review.node.js +89 -0
- package/gateway/dist/core/langgraph/nodes/sync.node.js +70 -0
- package/gateway/dist/core/langgraph/review-parser.js +35 -0
- package/gateway/dist/core/langgraph/signature-detector.js +23 -0
- package/gateway/dist/core/manager/goal-snapshot.js +73 -0
- package/gateway/dist/core/manager/milestone-push.js +81 -0
- package/gateway/dist/core/manager/question-ledger.js +121 -0
- package/gateway/dist/core/manager/system-rule-templates.js +76 -0
- package/gateway/dist/core/mcp/tools.js +562 -0
- package/gateway/dist/core/mcp/validator.js +165 -0
- package/gateway/dist/core/mcp-server.js +86 -0
- package/gateway/dist/core/memory/abstraction-distiller.js +44 -0
- package/gateway/dist/core/memory/cognitive-graph.js +103 -0
- package/gateway/dist/core/memory/energy-system.js +69 -0
- package/gateway/dist/core/memory/extractor.js +164 -0
- package/gateway/dist/core/memory/harmonic-index.js +530 -0
- package/gateway/dist/core/memory/harmonic-types.js +6 -0
- package/gateway/dist/core/memory/injector.js +111 -0
- package/gateway/dist/core/memory/l5-store.js +141 -0
- package/gateway/dist/core/memory/matcher.js +66 -0
- package/gateway/dist/core/memory/merger.js +95 -0
- package/gateway/dist/core/memory/migrate-v6.1.js +133 -0
- package/gateway/dist/core/memory/minhash-merger.js +195 -0
- package/gateway/dist/core/memory/observation-service.js +87 -0
- package/gateway/dist/core/memory/privacy-filter.js +163 -0
- package/gateway/dist/core/memory/reranker.js +208 -0
- package/gateway/dist/core/memory/review-scheduler.js +100 -0
- package/gateway/dist/core/memory/salience-perceptor.js +24 -0
- package/gateway/dist/core/memory/store.js +284 -0
- package/gateway/dist/core/memory/t1-store.js +183 -0
- package/gateway/dist/core/memory/t1-to-t2-compressor.js +119 -0
- package/gateway/dist/core/memory/validator.js +66 -0
- package/gateway/dist/core/plugin.js +902 -0
- package/gateway/dist/core/skills/mafw-execute/entry.js +226 -0
- package/gateway/dist/core/skills/mafw-goal/entry.js +203 -0
- package/gateway/dist/core/skills/mafw-plan/entry.js +184 -0
- package/gateway/dist/core/skills/mafw-review/entry.js +200 -0
- package/gateway/dist/core/storage/file-storage.js +120 -0
- package/gateway/dist/core/storage/sqlite-storage.js +205 -0
- package/gateway/dist/core/storage/types.js +2 -0
- package/gateway/dist/core/tools/archive-worktree.js +208 -0
- package/gateway/dist/core/tools/remote-cli.js +106 -0
- package/gateway/dist/core/tools/run-ask-user.js +79 -0
- package/gateway/dist/core/tools/run-execute-wave.js +32 -0
- package/gateway/dist/core/tools/run-plan.js +42 -0
- package/gateway/dist/core/tools/run-record-feedback.js +55 -0
- package/gateway/dist/core/tools/run-review.js +46 -0
- package/gateway/dist/core/tools/write-lesson.js +97 -0
- package/gateway/dist/core/utils/circuit-breaker.js +74 -0
- package/gateway/dist/core/utils/config-loader.js +203 -0
- package/gateway/dist/core/utils/fallback.js +19 -0
- package/gateway/dist/core/utils/git.js +70 -0
- package/gateway/dist/core/utils/github.js +52 -0
- package/gateway/dist/core/utils/global-path.js +41 -0
- package/gateway/dist/core/utils/logger.js +71 -0
- package/gateway/dist/core/utils/retry.js +44 -0
- package/gateway/dist/core/utils/state.js +175 -0
- package/gateway/dist/core/utils/status.js +156 -0
- package/gateway/dist/cost/service.js +17 -0
- package/gateway/dist/dashboard/api.js +1156 -0
- package/gateway/dist/dashboard/public/assets/index-DOXm39dm.css +1 -0
- package/gateway/dist/dashboard/public/index.html +13 -0
- package/gateway/dist/dashboard/server.js +140 -0
- package/gateway/dist/dashboard/types.js +2 -0
- package/gateway/dist/desktop-client.js +124 -0
- package/gateway/dist/eval-endpoint.js +219 -0
- package/gateway/dist/event-bus.js +7 -0
- package/gateway/dist/feedback/anchor-promotion.js +99 -0
- package/gateway/dist/feedback/deferred-memory.js +13 -0
- package/gateway/dist/feedback/miss-attribution.js +20 -0
- package/gateway/dist/graph/anchor-graph-store.js +113 -0
- package/gateway/dist/graph/anchor-graph.js +48 -0
- package/gateway/dist/health.js +53 -0
- package/gateway/dist/heartbeat.js +109 -0
- package/gateway/dist/index.js +6377 -0
- package/gateway/dist/interceptors/memory-injector.js +79 -0
- package/gateway/dist/ledger.js +121 -0
- package/gateway/dist/loop-monitor.js +74 -0
- package/gateway/dist/mcp/handlers/add-memory.js +113 -0
- package/gateway/dist/mcp/handlers/ask-user.js +63 -0
- package/gateway/dist/mcp/handlers/commit-heuristic.js +19 -0
- package/gateway/dist/mcp/handlers/create-goal.js +83 -0
- package/gateway/dist/mcp/handlers/desktop-click.js +18 -0
- package/gateway/dist/mcp/handlers/desktop-get-state.js +15 -0
- package/gateway/dist/mcp/handlers/desktop-navigate.js +18 -0
- package/gateway/dist/mcp/handlers/desktop-screenshot.js +16 -0
- package/gateway/dist/mcp/handlers/desktop-scroll.js +19 -0
- package/gateway/dist/mcp/handlers/desktop-type.js +19 -0
- package/gateway/dist/mcp/handlers/draft-automation-rule.js +45 -0
- package/gateway/dist/mcp/handlers/get-automation-history.js +15 -0
- package/gateway/dist/mcp/handlers/get-automation-rule.js +26 -0
- package/gateway/dist/mcp/handlers/get-axioms.js +14 -0
- package/gateway/dist/mcp/handlers/get-deltas.js +77 -0
- package/gateway/dist/mcp/handlers/get-memory.js +67 -0
- package/gateway/dist/mcp/handlers/get-model-route.js +16 -0
- package/gateway/dist/mcp/handlers/get-triage-item.js +17 -0
- package/gateway/dist/mcp/handlers/list-automation-rules.js +24 -0
- package/gateway/dist/mcp/handlers/list-triage-items.js +14 -0
- package/gateway/dist/mcp/handlers/load-state.js +54 -0
- package/gateway/dist/mcp/handlers/manager-answer-question.js +67 -0
- package/gateway/dist/mcp/handlers/manager-cancel-goal.js +58 -0
- package/gateway/dist/mcp/handlers/manager-get-evidence.js +57 -0
- package/gateway/dist/mcp/handlers/manager-get-goal-status.js +58 -0
- package/gateway/dist/mcp/handlers/manager-list-goals.js +60 -0
- package/gateway/dist/mcp/handlers/manager-list-pending-questions.js +67 -0
- package/gateway/dist/mcp/handlers/manager-set-goal.js +78 -0
- package/gateway/dist/mcp/handlers/merge-memory.js +184 -0
- package/gateway/dist/mcp/handlers/pin-memory.js +53 -0
- package/gateway/dist/mcp/handlers/propose-triage-decision.js +38 -0
- package/gateway/dist/mcp/handlers/record-feedback.js +59 -0
- package/gateway/dist/mcp/handlers/resolve-merge.js +92 -0
- package/gateway/dist/mcp/handlers/restart-agent.js +22 -0
- package/gateway/dist/mcp/handlers/run-automation.js +28 -0
- package/gateway/dist/mcp/handlers/search-hybrid.js +181 -0
- package/gateway/dist/mcp/handlers/supersede-memory.js +47 -0
- package/gateway/dist/mcp/handlers/update-state.js +59 -0
- package/gateway/dist/mcp/handlers/validate-rule.js +39 -0
- package/gateway/dist/mcp/sse-transport.js +97 -0
- package/gateway/dist/mcp/streamable-endpoint.js +98 -0
- package/gateway/dist/mcp/tool-registry.js +630 -0
- package/gateway/dist/media/media-agent.js +755 -0
- package/gateway/dist/media/media-plugin-loader.js +254 -0
- package/gateway/dist/media/media-runtime-executor.js +227 -0
- package/gateway/dist/media/media-service.js +199 -0
- package/gateway/dist/media/pi-adapter.js +159 -0
- package/gateway/dist/media/plugin-context.js +14 -0
- package/gateway/dist/media/tts-service.js +173 -0
- package/gateway/dist/memory/abstraction-matcher.js +28 -0
- package/gateway/dist/memory/consolidation-service.js +209 -0
- package/gateway/dist/memory/derived-terms.js +50 -0
- package/gateway/dist/memory/embedding-provider.js +330 -0
- package/gateway/dist/memory/embedding-runtime.js +174 -0
- package/gateway/dist/memory/event-log.js +84 -0
- package/gateway/dist/memory/gateway-db.js +465 -0
- package/gateway/dist/memory/harmonic-file-store.js +338 -0
- package/gateway/dist/memory/llamacpp-provider.js +370 -0
- package/gateway/dist/memory/okf-index-renderer.js +61 -0
- package/gateway/dist/memory/okf-migrator.js +71 -0
- package/gateway/dist/memory/okf-parser.js +57 -0
- package/gateway/dist/memory/okf-writer.js +107 -0
- package/gateway/dist/memory/service.js +81 -0
- package/gateway/dist/memory/t1-db.js +139 -0
- package/gateway/dist/memory/unmerge-cleanup.js +82 -0
- package/gateway/dist/memory/vector-store.js +246 -0
- package/gateway/dist/memory/write-queue.js +31 -0
- package/gateway/dist/metrics/collector.js +28 -0
- package/gateway/dist/mobile/device-store.js +123 -0
- package/gateway/dist/mobile/mdns-advertiser.js +55 -0
- package/gateway/dist/mobile/media-proxy.js +292 -0
- package/gateway/dist/mobile/pairing.js +139 -0
- package/gateway/dist/mobile/push-gateway.js +126 -0
- package/gateway/dist/mobile/tts-artifact.js +43 -0
- package/gateway/dist/opencode-adapter.js +241 -0
- package/gateway/dist/orchestration/outcome-recorder.js +218 -0
- package/gateway/dist/orchestration/policy.js +57 -0
- package/gateway/dist/orchestration/registry.js +47 -0
- package/gateway/dist/plugins/hub.js +188 -0
- package/gateway/dist/poll.js +110 -0
- package/gateway/dist/python/kernel-service.js +762 -0
- package/gateway/dist/recall/constraints-migrate.js +108 -0
- package/gateway/dist/recall/data-dir-migrate.js +120 -0
- package/gateway/dist/recall/gateway-db-migrate.js +134 -0
- package/gateway/dist/recall/index-scan.js +437 -0
- package/gateway/dist/recall/inject-format.js +222 -0
- package/gateway/dist/recall/legacy-t1-archive.js +86 -0
- package/gateway/dist/recall/memory-worker.js +128 -0
- package/gateway/dist/recall/pipeline-rules.js +76 -0
- package/gateway/dist/recall/recall-context.js +297 -0
- package/gateway/dist/recall/reflect-cursor.js +50 -0
- package/gateway/dist/recall/reflection.js +318 -0
- package/gateway/dist/recall/session-worker-pool.js +100 -0
- package/gateway/dist/recall/stale-verify.js +72 -0
- package/gateway/dist/recall/step-inject.js +173 -0
- package/gateway/dist/recall/time-anchor.js +143 -0
- package/gateway/dist/recall/ttl-map.js +72 -0
- package/gateway/dist/recall/turn-completion.js +44 -0
- package/gateway/dist/recall/turn-pipeline.js +150 -0
- package/gateway/dist/recovery.js +158 -0
- package/gateway/dist/resources/sdk-session.js +202 -0
- package/gateway/dist/retrieval/guided-retriever.js +131 -0
- package/gateway/dist/retrieval/idf-stats.js +31 -0
- package/gateway/dist/routes/embedding-config.js +100 -0
- package/gateway/dist/routes/goal-sessions.js +45 -0
- package/gateway/dist/routes/manager-rotate.js +55 -0
- package/gateway/dist/routes/media-switch.js +78 -0
- package/gateway/dist/routes/model-config.js +132 -0
- package/gateway/dist/routes/note-board.js +51 -0
- package/gateway/dist/routes/permission.js +43 -0
- package/gateway/dist/routes/pinned-recall.js +36 -0
- package/gateway/dist/routes/plugins.js +77 -0
- package/gateway/dist/routes/restart-agent.js +28 -0
- package/gateway/dist/routes/runtime-switch.js +80 -0
- package/gateway/dist/routes/session-branch.js +63 -0
- package/gateway/dist/routes/session-mutations.js +58 -0
- package/gateway/dist/routes/session-summarize.js +49 -0
- package/gateway/dist/routes/usage-plugins.js +251 -0
- package/gateway/dist/runtime/agent-definition.js +2 -0
- package/gateway/dist/runtime/auth.js +80 -0
- package/gateway/dist/runtime/completion-http.js +97 -0
- package/gateway/dist/runtime/contract.js +37 -0
- package/gateway/dist/runtime/loader.js +240 -0
- package/gateway/dist/runtime/normalize.js +59 -0
- package/gateway/dist/runtime/opencode-runtime.js +336 -0
- package/gateway/dist/runtime/pi/pi-agent-config.js +294 -0
- package/gateway/dist/runtime/pi/pi-approval-bridge.js +44 -0
- package/gateway/dist/runtime/pi/pi-approval-extension.js +62 -0
- package/gateway/dist/runtime/pi/pi-events.js +122 -0
- package/gateway/dist/runtime/pi/pi-messages.js +20 -0
- package/gateway/dist/runtime/pi/pi-provider.js +19 -0
- package/gateway/dist/runtime/pi/pi-session-storage.js +44 -0
- package/gateway/dist/runtime/pi/pi-session.js +328 -0
- package/gateway/dist/runtime/plugins/pi-runtime.js +285 -0
- package/gateway/dist/runtime/serve-for-runtime.js +22 -0
- package/gateway/dist/runtime/serve-sidecar.js +164 -0
- package/gateway/dist/runtime/serve-supervisor.js +80 -0
- package/gateway/dist/self-update.js +309 -0
- package/gateway/dist/skills/manager-agent-config.js +37 -0
- package/gateway/dist/skills/manager-identity.js +11 -0
- package/gateway/dist/skills/memory-curator-agent.js +55 -0
- package/gateway/dist/trajectory/api.js +154 -0
- package/gateway/dist/trajectory/backfill-provider.js +41 -0
- package/gateway/dist/trajectory/collector.js +337 -0
- package/gateway/dist/trajectory/trajectory-store.js +336 -0
- package/gateway/dist/trajectory/types.js +17 -0
- package/gateway/dist/tray/index.js +131 -0
- package/gateway/dist/tray/tray.ps1 +96 -0
- package/gateway/dist/types.js +2 -0
- package/gateway/dist/usage/builtin-plugins/commandcode.js +71 -0
- package/gateway/dist/usage/builtin-plugins/deepseek.js +56 -0
- package/gateway/dist/usage/builtin-plugins/gateway.js +127 -0
- package/gateway/dist/usage/builtin-plugins/kimi-for-coding.js +93 -0
- package/gateway/dist/usage/builtin-plugins/kimi.js +48 -0
- package/gateway/dist/usage/builtin-plugins/opencode-go.js +54 -0
- package/gateway/dist/usage/builtin-plugins/openrouter.js +48 -0
- package/gateway/dist/usage/builtin-plugins/siliconflow-cn.js +49 -0
- package/gateway/dist/usage/builtin-plugins/zhipuai-coding-plan.js +44 -0
- package/gateway/dist/usage/model-prices.js +39 -0
- package/gateway/dist/usage/model-stats.js +21 -0
- package/gateway/dist/usage/plugin-context.js +79 -0
- package/gateway/dist/usage/plugin-loader.js +280 -0
- package/gateway/dist/usage/templates.js +227 -0
- package/gateway/dist/usage/types.js +2 -0
- package/gateway/dist/usage/usage-poller.js +216 -0
- package/gateway/package.json +37 -0
- package/package.json +78 -0
- package/packages/tui/dist/cli.js +4664 -0
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.GatewayDatabase = void 0;
|
|
40
|
+
// Gateway unified database (SQLite). Owns the T1 observation store (single
|
|
41
|
+
// writer = this gateway; the opencode-side plugin pushes observations via
|
|
42
|
+
// POST /api/obs/capture) plus a generic kv_store for small critical state
|
|
43
|
+
// (manager sessions, reflect cursor, registry snapshot) that must move with
|
|
44
|
+
// the data directory and never be lost to project-directory operations.
|
|
45
|
+
//
|
|
46
|
+
// Turn IDs are database-driven, so plugin/serve restarts can never renumber
|
|
47
|
+
// turns or duplicate writes (database-level UNIQUE dedup on observations).
|
|
48
|
+
const fs = __importStar(require("fs"));
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
51
|
+
class GatewayDatabase {
|
|
52
|
+
db;
|
|
53
|
+
constructor(dbPath) {
|
|
54
|
+
const dir = path.dirname(dbPath);
|
|
55
|
+
if (!fs.existsSync(dir))
|
|
56
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
57
|
+
this.db = new better_sqlite3_1.default(dbPath);
|
|
58
|
+
this.db.pragma('journal_mode = WAL');
|
|
59
|
+
this.db.exec(`
|
|
60
|
+
CREATE TABLE IF NOT EXISTS t1_observations (
|
|
61
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
62
|
+
session_id TEXT NOT NULL,
|
|
63
|
+
turn_id INTEGER NOT NULL,
|
|
64
|
+
source TEXT NOT NULL,
|
|
65
|
+
content TEXT NOT NULL,
|
|
66
|
+
failure INTEGER DEFAULT 0,
|
|
67
|
+
created_at INTEGER DEFAULT (unixepoch()),
|
|
68
|
+
UNIQUE(session_id, turn_id, source, content)
|
|
69
|
+
);
|
|
70
|
+
CREATE INDEX IF NOT EXISTS idx_t1_session ON t1_observations(session_id, turn_id);
|
|
71
|
+
|
|
72
|
+
CREATE TABLE IF NOT EXISTS trajectory_events (
|
|
73
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
74
|
+
project_id TEXT NOT NULL,
|
|
75
|
+
session_id TEXT NOT NULL,
|
|
76
|
+
turn_id INTEGER NOT NULL,
|
|
77
|
+
seq INTEGER NOT NULL,
|
|
78
|
+
event_type TEXT NOT NULL,
|
|
79
|
+
tool_name TEXT,
|
|
80
|
+
call_id TEXT,
|
|
81
|
+
tool_state TEXT,
|
|
82
|
+
agent TEXT,
|
|
83
|
+
model TEXT,
|
|
84
|
+
input_summary TEXT,
|
|
85
|
+
output_summary TEXT,
|
|
86
|
+
error TEXT,
|
|
87
|
+
tokens TEXT,
|
|
88
|
+
cost REAL,
|
|
89
|
+
finish TEXT,
|
|
90
|
+
time_ms REAL NOT NULL,
|
|
91
|
+
duration_ms REAL,
|
|
92
|
+
created_at INTEGER DEFAULT (unixepoch())
|
|
93
|
+
);
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_traj_evt_session ON trajectory_events(session_id, turn_id, seq);
|
|
95
|
+
CREATE INDEX IF NOT EXISTS idx_traj_evt_ttl ON trajectory_events(created_at);
|
|
96
|
+
|
|
97
|
+
CREATE TABLE IF NOT EXISTS trajectory_turns (
|
|
98
|
+
project_id TEXT NOT NULL,
|
|
99
|
+
session_id TEXT NOT NULL,
|
|
100
|
+
turn_id INTEGER NOT NULL,
|
|
101
|
+
turn_start_ms REAL NOT NULL,
|
|
102
|
+
turn_end_ms REAL,
|
|
103
|
+
duration_ms REAL,
|
|
104
|
+
tool_count INTEGER DEFAULT 0,
|
|
105
|
+
tool_error_count INTEGER DEFAULT 0,
|
|
106
|
+
reasoning_count INTEGER DEFAULT 0,
|
|
107
|
+
agent_switch_count INTEGER DEFAULT 0,
|
|
108
|
+
tokens TEXT,
|
|
109
|
+
cost REAL DEFAULT 0,
|
|
110
|
+
finish TEXT,
|
|
111
|
+
model TEXT,
|
|
112
|
+
provider TEXT,
|
|
113
|
+
agent TEXT,
|
|
114
|
+
user_text TEXT,
|
|
115
|
+
created_at INTEGER DEFAULT (unixepoch()),
|
|
116
|
+
PRIMARY KEY (session_id, turn_id)
|
|
117
|
+
);
|
|
118
|
+
CREATE INDEX IF NOT EXISTS idx_traj_turn_ttl ON trajectory_turns(created_at);
|
|
119
|
+
|
|
120
|
+
CREATE TABLE IF NOT EXISTS anchor_units (
|
|
121
|
+
anchor TEXT NOT NULL,
|
|
122
|
+
unit_id TEXT NOT NULL,
|
|
123
|
+
weight REAL DEFAULT 1,
|
|
124
|
+
created_at INTEGER DEFAULT (unixepoch()),
|
|
125
|
+
PRIMARY KEY (anchor, unit_id)
|
|
126
|
+
);
|
|
127
|
+
CREATE INDEX IF NOT EXISTS idx_anchor_units_anchor ON anchor_units(anchor);
|
|
128
|
+
CREATE INDEX IF NOT EXISTS idx_anchor_units_unit ON anchor_units(unit_id);
|
|
129
|
+
|
|
130
|
+
CREATE TABLE IF NOT EXISTS anchor_edges (
|
|
131
|
+
unit_a TEXT NOT NULL,
|
|
132
|
+
unit_b TEXT NOT NULL,
|
|
133
|
+
shared_anchors INTEGER NOT NULL,
|
|
134
|
+
weight REAL NOT NULL,
|
|
135
|
+
updated_at INTEGER DEFAULT (unixepoch()),
|
|
136
|
+
PRIMARY KEY (unit_a, unit_b)
|
|
137
|
+
);
|
|
138
|
+
CREATE INDEX IF NOT EXISTS idx_anchor_edges_a ON anchor_edges(unit_a);
|
|
139
|
+
CREATE INDEX IF NOT EXISTS idx_anchor_edges_b ON anchor_edges(unit_b);
|
|
140
|
+
|
|
141
|
+
CREATE TABLE IF NOT EXISTS kv_store (
|
|
142
|
+
scope TEXT NOT NULL,
|
|
143
|
+
key TEXT NOT NULL,
|
|
144
|
+
value TEXT NOT NULL,
|
|
145
|
+
updated_at INTEGER DEFAULT (unixepoch()),
|
|
146
|
+
PRIMARY KEY (scope, key)
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
CREATE TABLE IF NOT EXISTS t1_archive (
|
|
150
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
151
|
+
session_id TEXT NOT NULL,
|
|
152
|
+
turn_id INTEGER NOT NULL,
|
|
153
|
+
source TEXT NOT NULL,
|
|
154
|
+
content TEXT NOT NULL,
|
|
155
|
+
failure INTEGER DEFAULT 0,
|
|
156
|
+
created_at INTEGER NOT NULL,
|
|
157
|
+
archived_at INTEGER DEFAULT (unixepoch())
|
|
158
|
+
);
|
|
159
|
+
CREATE INDEX IF NOT EXISTS idx_t1_archive_session ON t1_archive(session_id, turn_id);
|
|
160
|
+
|
|
161
|
+
CREATE TABLE IF NOT EXISTS t1_noop_log (
|
|
162
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
163
|
+
session_id TEXT NOT NULL,
|
|
164
|
+
turn_id INTEGER NOT NULL,
|
|
165
|
+
reason TEXT NOT NULL,
|
|
166
|
+
created_at INTEGER DEFAULT (unixepoch())
|
|
167
|
+
);
|
|
168
|
+
CREATE INDEX IF NOT EXISTS idx_noop_session ON t1_noop_log(session_id);
|
|
169
|
+
CREATE INDEX IF NOT EXISTS idx_noop_created ON t1_noop_log(created_at);
|
|
170
|
+
|
|
171
|
+
CREATE TABLE IF NOT EXISTS goal_outcomes (
|
|
172
|
+
goal_id TEXT PRIMARY KEY,
|
|
173
|
+
project_id TEXT,
|
|
174
|
+
verdict TEXT NOT NULL,
|
|
175
|
+
rounds INTEGER DEFAULT 0,
|
|
176
|
+
duration_ms INTEGER,
|
|
177
|
+
tokens_input INTEGER,
|
|
178
|
+
tokens_output INTEGER,
|
|
179
|
+
total_cost REAL,
|
|
180
|
+
tool_error_count INTEGER,
|
|
181
|
+
thumbs_up INTEGER DEFAULT 0,
|
|
182
|
+
thumbs_down INTEGER DEFAULT 0,
|
|
183
|
+
policy_version TEXT NOT NULL DEFAULT 'builtin-v1',
|
|
184
|
+
evolution_proposal_id TEXT,
|
|
185
|
+
failure_kind TEXT,
|
|
186
|
+
failure_signature TEXT,
|
|
187
|
+
created_at TEXT,
|
|
188
|
+
archived_at TEXT NOT NULL
|
|
189
|
+
);
|
|
190
|
+
CREATE INDEX IF NOT EXISTS idx_goal_outcomes_policy ON goal_outcomes(policy_version, verdict);
|
|
191
|
+
CREATE INDEX IF NOT EXISTS idx_goal_outcomes_project ON goal_outcomes(project_id, policy_version);
|
|
192
|
+
|
|
193
|
+
CREATE TABLE IF NOT EXISTS goal_sessions (
|
|
194
|
+
goal_id TEXT NOT NULL,
|
|
195
|
+
session_id TEXT NOT NULL,
|
|
196
|
+
phase TEXT NOT NULL,
|
|
197
|
+
loop INTEGER DEFAULT 1,
|
|
198
|
+
created_at TEXT NOT NULL,
|
|
199
|
+
PRIMARY KEY (goal_id, session_id)
|
|
200
|
+
);
|
|
201
|
+
CREATE INDEX IF NOT EXISTS idx_goal_sessions_session ON goal_sessions(session_id);
|
|
202
|
+
|
|
203
|
+
CREATE TABLE IF NOT EXISTS evolution_proposals (
|
|
204
|
+
id TEXT PRIMARY KEY,
|
|
205
|
+
requires TEXT NOT NULL DEFAULT 'policy',
|
|
206
|
+
component_diffs TEXT NOT NULL,
|
|
207
|
+
declared_prediction TEXT,
|
|
208
|
+
rationale TEXT,
|
|
209
|
+
status TEXT NOT NULL DEFAULT 'proposed',
|
|
210
|
+
validation_result TEXT,
|
|
211
|
+
created_at TEXT NOT NULL,
|
|
212
|
+
updated_at TEXT NOT NULL
|
|
213
|
+
);
|
|
214
|
+
`);
|
|
215
|
+
// Migration: add assistant_text column to trajectory_turns if not exists
|
|
216
|
+
try {
|
|
217
|
+
this.db.exec(`ALTER TABLE trajectory_turns ADD COLUMN assistant_text TEXT`);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Column already exists, ignore
|
|
221
|
+
}
|
|
222
|
+
// Migration: add provider column to trajectory_turns if not exists
|
|
223
|
+
try {
|
|
224
|
+
this.db.exec(`ALTER TABLE trajectory_turns ADD COLUMN provider TEXT`);
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
// Column already exists, ignore
|
|
228
|
+
}
|
|
229
|
+
// Migration: add worker_role column to trajectory_turns if not exists
|
|
230
|
+
try {
|
|
231
|
+
this.db.exec(`ALTER TABLE trajectory_turns ADD COLUMN worker_role TEXT`);
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// Column already exists, ignore
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// ── T1 observations ─────────────────────────────────────────────────────
|
|
238
|
+
/**
|
|
239
|
+
* Next turn ID for a new user message: max existing turn for the session + 1.
|
|
240
|
+
* No rows yet → 1.
|
|
241
|
+
*/
|
|
242
|
+
nextTurnId(session_id) {
|
|
243
|
+
const row = this.db
|
|
244
|
+
.prepare('SELECT COALESCE(MAX(turn_id), 0) AS m FROM t1_observations WHERE session_id = ?')
|
|
245
|
+
.get(session_id);
|
|
246
|
+
return row.m + 1;
|
|
247
|
+
}
|
|
248
|
+
/** Current turn ID for non-user observations: max existing turn, or 0. */
|
|
249
|
+
currentTurnId(session_id) {
|
|
250
|
+
const row = this.db
|
|
251
|
+
.prepare('SELECT COALESCE(MAX(turn_id), 0) AS m FROM t1_observations WHERE session_id = ?')
|
|
252
|
+
.get(session_id);
|
|
253
|
+
return row.m;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Insert one observation. Database-level dedup via the UNIQUE constraint:
|
|
257
|
+
* a duplicate (same session/turn/source/content) is silently ignored.
|
|
258
|
+
* Returns the row id, or null when deduplicated.
|
|
259
|
+
*/
|
|
260
|
+
append(obs) {
|
|
261
|
+
const result = this.db
|
|
262
|
+
.prepare(`INSERT OR IGNORE INTO t1_observations (session_id, turn_id, source, content, failure)
|
|
263
|
+
VALUES (?, ?, ?, ?, ?)`)
|
|
264
|
+
.run(obs.session_id, obs.turn_id, obs.source, obs.content, obs.failure);
|
|
265
|
+
return result.changes > 0 ? Number(result.lastInsertRowid) : null;
|
|
266
|
+
}
|
|
267
|
+
/** Per-session turn summaries (grouped), optionally filtered to a session. */
|
|
268
|
+
listTurns(session_id) {
|
|
269
|
+
const where = session_id ? 'WHERE session_id = ?' : '';
|
|
270
|
+
const rows = this.db
|
|
271
|
+
.prepare(`SELECT session_id, turn_id,
|
|
272
|
+
COUNT(*) AS count,
|
|
273
|
+
MAX(CASE WHEN source = 'user_input' THEN 1 ELSE 0 END) AS has_user_input,
|
|
274
|
+
SUM(CASE WHEN source IN ('assistant_reply','tool_result','reasoning') AND length(trim(content)) > 0 THEN 1 ELSE 0 END) AS response_count,
|
|
275
|
+
MAX(created_at) AS last_ts
|
|
276
|
+
FROM t1_observations
|
|
277
|
+
${where}
|
|
278
|
+
GROUP BY session_id, turn_id
|
|
279
|
+
ORDER BY session_id, turn_id`)
|
|
280
|
+
.all(...(session_id ? [session_id] : []));
|
|
281
|
+
return rows;
|
|
282
|
+
}
|
|
283
|
+
readTurn(session_id, turn_id) {
|
|
284
|
+
return this.db
|
|
285
|
+
.prepare('SELECT * FROM t1_observations WHERE session_id = ? AND turn_id = ? ORDER BY id')
|
|
286
|
+
.all(session_id, turn_id);
|
|
287
|
+
}
|
|
288
|
+
/** Remove all observations for a session up to (and including) a turn. */
|
|
289
|
+
deleteTurn(session_id, turn_id) {
|
|
290
|
+
const result = this.db
|
|
291
|
+
.prepare('DELETE FROM t1_observations WHERE session_id = ? AND turn_id = ?')
|
|
292
|
+
.run(session_id, turn_id);
|
|
293
|
+
return result.changes;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Archive a processed turn: move from t1_observations to t1_archive, then
|
|
297
|
+
* delete from t1_observations. Preserves the raw observation data for future
|
|
298
|
+
* re-extraction with upgraded pipelines. Returns the number of rows archived.
|
|
299
|
+
*/
|
|
300
|
+
archiveTurn(session_id, turn_id) {
|
|
301
|
+
const txn = this.db.transaction(() => {
|
|
302
|
+
this.db
|
|
303
|
+
.prepare(`INSERT INTO t1_archive (session_id, turn_id, source, content, failure, created_at)
|
|
304
|
+
SELECT session_id, turn_id, source, content, failure, created_at
|
|
305
|
+
FROM t1_observations WHERE session_id = ? AND turn_id = ?`)
|
|
306
|
+
.run(session_id, turn_id);
|
|
307
|
+
const del = this.db
|
|
308
|
+
.prepare('DELETE FROM t1_observations WHERE session_id = ? AND turn_id = ?')
|
|
309
|
+
.run(session_id, turn_id);
|
|
310
|
+
return del.changes;
|
|
311
|
+
});
|
|
312
|
+
return txn();
|
|
313
|
+
}
|
|
314
|
+
/** Read archived observations for a specific turn. */
|
|
315
|
+
readArchiveTurn(session_id, turn_id) {
|
|
316
|
+
return this.db
|
|
317
|
+
.prepare('SELECT * FROM t1_archive WHERE session_id = ? AND turn_id = ? ORDER BY id')
|
|
318
|
+
.all(session_id, turn_id);
|
|
319
|
+
}
|
|
320
|
+
/** List archived turns (grouped), optionally filtered to a session. */
|
|
321
|
+
listArchiveTurns(session_id) {
|
|
322
|
+
const where = session_id ? 'WHERE session_id = ?' : '';
|
|
323
|
+
return this.db
|
|
324
|
+
.prepare(`SELECT session_id, turn_id,
|
|
325
|
+
COUNT(*) AS count,
|
|
326
|
+
MAX(CASE WHEN source = 'user_input' THEN 1 ELSE 0 END) AS has_user_input,
|
|
327
|
+
SUM(CASE WHEN source IN ('assistant_reply','tool_result','reasoning') AND length(trim(content)) > 0 THEN 1 ELSE 0 END) AS response_count,
|
|
328
|
+
MAX(created_at) AS last_ts
|
|
329
|
+
FROM t1_archive
|
|
330
|
+
${where}
|
|
331
|
+
GROUP BY session_id, turn_id
|
|
332
|
+
ORDER BY session_id, turn_id`)
|
|
333
|
+
.all(...(session_id ? [session_id] : []));
|
|
334
|
+
}
|
|
335
|
+
archiveCount() {
|
|
336
|
+
return this.db.prepare('SELECT COUNT(*) AS c FROM t1_archive').get().c;
|
|
337
|
+
}
|
|
338
|
+
// ── Noop log (extraction coverage monitoring) ──────────────────────────
|
|
339
|
+
/**
|
|
340
|
+
* Log a turn where the extraction worker decided nothing was worth saving.
|
|
341
|
+
* Enables weekly review of what the worker skips — critical for diagnosing
|
|
342
|
+
* whether preference/temporal misses happen at extraction or retrieval.
|
|
343
|
+
*/
|
|
344
|
+
logNoop(session_id, turn_id, reason) {
|
|
345
|
+
this.db
|
|
346
|
+
.prepare('INSERT INTO t1_noop_log (session_id, turn_id, reason) VALUES (?, ?, ?)')
|
|
347
|
+
.run(session_id, turn_id, reason);
|
|
348
|
+
}
|
|
349
|
+
/** List noop log entries, optionally filtered by session and/or since timestamp. */
|
|
350
|
+
listNoops(opts) {
|
|
351
|
+
const conditions = [];
|
|
352
|
+
const params = [];
|
|
353
|
+
if (opts?.session_id) {
|
|
354
|
+
conditions.push('session_id = ?');
|
|
355
|
+
params.push(opts.session_id);
|
|
356
|
+
}
|
|
357
|
+
if (opts?.since) {
|
|
358
|
+
conditions.push('created_at >= ?');
|
|
359
|
+
params.push(opts.since);
|
|
360
|
+
}
|
|
361
|
+
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
362
|
+
const limit = opts?.limit ?? 100;
|
|
363
|
+
return this.db
|
|
364
|
+
.prepare(`SELECT * FROM t1_noop_log ${where} ORDER BY created_at DESC LIMIT ?`)
|
|
365
|
+
.all(...params, limit);
|
|
366
|
+
}
|
|
367
|
+
deleteSession(session_id) {
|
|
368
|
+
return this.db.prepare('DELETE FROM t1_observations WHERE session_id = ?').run(session_id).changes;
|
|
369
|
+
}
|
|
370
|
+
count() {
|
|
371
|
+
return this.db.prepare('SELECT COUNT(*) AS c FROM t1_observations').get().c;
|
|
372
|
+
}
|
|
373
|
+
// ── KV store (small critical state) ─────────────────────────────────────
|
|
374
|
+
kvGet(scope, key) {
|
|
375
|
+
const row = this.db.prepare('SELECT value FROM kv_store WHERE scope = ? AND key = ?').get(scope, key);
|
|
376
|
+
if (!row)
|
|
377
|
+
return null;
|
|
378
|
+
try {
|
|
379
|
+
return JSON.parse(row.value);
|
|
380
|
+
}
|
|
381
|
+
catch {
|
|
382
|
+
return row.value;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
kvSet(scope, key, value) {
|
|
386
|
+
this.db
|
|
387
|
+
.prepare(`INSERT INTO kv_store (scope, key, value) VALUES (?, ?, ?)
|
|
388
|
+
ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value, updated_at = unixepoch()`)
|
|
389
|
+
.run(scope, key, JSON.stringify(value));
|
|
390
|
+
}
|
|
391
|
+
kvDelete(scope, key) {
|
|
392
|
+
this.db.prepare('DELETE FROM kv_store WHERE scope = ? AND key = ?').run(scope, key);
|
|
393
|
+
}
|
|
394
|
+
kvAll(scope) {
|
|
395
|
+
const rows = this.db.prepare('SELECT key, value FROM kv_store WHERE scope = ? ORDER BY key').all(scope);
|
|
396
|
+
return rows.map((r) => {
|
|
397
|
+
try {
|
|
398
|
+
return { key: r.key, value: JSON.parse(r.value) };
|
|
399
|
+
}
|
|
400
|
+
catch {
|
|
401
|
+
return { key: r.key, value: r.value };
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
// ── Goal outcomes (RSI Phase 1) ─────────────────────────────────────────
|
|
406
|
+
upsertGoalOutcome(o) {
|
|
407
|
+
this.db.prepare(`
|
|
408
|
+
INSERT INTO goal_outcomes (goal_id, project_id, verdict, rounds, duration_ms,
|
|
409
|
+
tokens_input, tokens_output, total_cost, tool_error_count, thumbs_up, thumbs_down,
|
|
410
|
+
policy_version, evolution_proposal_id, failure_kind, failure_signature, created_at, archived_at)
|
|
411
|
+
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
|
|
412
|
+
ON CONFLICT(goal_id) DO UPDATE SET
|
|
413
|
+
verdict=excluded.verdict, rounds=excluded.rounds, duration_ms=excluded.duration_ms,
|
|
414
|
+
tokens_input=excluded.tokens_input, tokens_output=excluded.tokens_output, total_cost=excluded.total_cost,
|
|
415
|
+
tool_error_count=excluded.tool_error_count, thumbs_up=excluded.thumbs_up, thumbs_down=excluded.thumbs_down,
|
|
416
|
+
policy_version=excluded.policy_version, evolution_proposal_id=excluded.evolution_proposal_id,
|
|
417
|
+
failure_kind=excluded.failure_kind, failure_signature=excluded.failure_signature,
|
|
418
|
+
created_at=excluded.created_at, archived_at=excluded.archived_at
|
|
419
|
+
`).run(o.goal_id, o.project_id, o.verdict, o.rounds, o.duration_ms, o.tokens_input, o.tokens_output, o.total_cost, o.tool_error_count, o.thumbs_up, o.thumbs_down, o.policy_version, o.evolution_proposal_id, o.failure_kind, o.failure_signature, o.created_at, o.archived_at);
|
|
420
|
+
}
|
|
421
|
+
listGoalOutcomes(filter) {
|
|
422
|
+
const conditions = [];
|
|
423
|
+
const params = [];
|
|
424
|
+
if (filter?.policy) {
|
|
425
|
+
conditions.push('policy_version = ?');
|
|
426
|
+
params.push(filter.policy);
|
|
427
|
+
}
|
|
428
|
+
if (filter?.verdict) {
|
|
429
|
+
conditions.push('verdict = ?');
|
|
430
|
+
params.push(filter.verdict);
|
|
431
|
+
}
|
|
432
|
+
if (filter?.project) {
|
|
433
|
+
conditions.push('project_id = ?');
|
|
434
|
+
params.push(filter.project);
|
|
435
|
+
}
|
|
436
|
+
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
437
|
+
const limit = filter?.limit ?? 100;
|
|
438
|
+
return this.db.prepare(`SELECT * FROM goal_outcomes ${where} ORDER BY archived_at DESC LIMIT ?`).all(...params, limit);
|
|
439
|
+
}
|
|
440
|
+
addGoalSession(s) {
|
|
441
|
+
this.db.prepare(`
|
|
442
|
+
INSERT OR IGNORE INTO goal_sessions (goal_id, session_id, phase, loop, created_at)
|
|
443
|
+
VALUES (?,?,?,?,datetime('now'))
|
|
444
|
+
`).run(s.goal_id, s.session_id, s.phase, s.loop);
|
|
445
|
+
}
|
|
446
|
+
listGoalSessions(goalId) {
|
|
447
|
+
return this.db.prepare('SELECT session_id, phase, loop FROM goal_sessions WHERE goal_id = ?').all(goalId);
|
|
448
|
+
}
|
|
449
|
+
/** Most recent archived outcome among the goals a session participated in
|
|
450
|
+
* (goal_sessions → goal_outcomes join). Powers the turn-compress curator's
|
|
451
|
+
* outcome-feedback signal (env-probing curation, grade gi). */
|
|
452
|
+
getOutcomeForSession(sessionId) {
|
|
453
|
+
const row = this.db.prepare(`
|
|
454
|
+
SELECT o.* FROM goal_outcomes o
|
|
455
|
+
JOIN goal_sessions s ON s.goal_id = o.goal_id
|
|
456
|
+
WHERE s.session_id = ?
|
|
457
|
+
ORDER BY o.archived_at DESC LIMIT 1
|
|
458
|
+
`).get(sessionId);
|
|
459
|
+
return row ?? null;
|
|
460
|
+
}
|
|
461
|
+
close() {
|
|
462
|
+
this.db.close();
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
exports.GatewayDatabase = GatewayDatabase;
|