jfl 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -5
- package/dist/commands/context-hub.d.ts.map +1 -1
- package/dist/commands/context-hub.js +818 -39
- package/dist/commands/context-hub.js.map +1 -1
- package/dist/commands/eval.d.ts +1 -1
- package/dist/commands/eval.d.ts.map +1 -1
- package/dist/commands/eval.js +192 -1
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/findings.d.ts +6 -0
- package/dist/commands/findings.d.ts.map +1 -0
- package/dist/commands/findings.js +203 -0
- package/dist/commands/findings.js.map +1 -0
- package/dist/commands/hud.d.ts.map +1 -1
- package/dist/commands/hud.js +47 -9
- package/dist/commands/hud.js.map +1 -1
- package/dist/commands/ide.d.ts +27 -0
- package/dist/commands/ide.d.ts.map +1 -0
- package/dist/commands/ide.js +546 -0
- package/dist/commands/ide.js.map +1 -0
- package/dist/commands/onboard.d.ts.map +1 -1
- package/dist/commands/onboard.js +212 -2
- package/dist/commands/onboard.js.map +1 -1
- package/dist/commands/openclaw.d.ts +3 -0
- package/dist/commands/openclaw.d.ts.map +1 -1
- package/dist/commands/openclaw.js +76 -2
- package/dist/commands/openclaw.js.map +1 -1
- package/dist/commands/peter.d.ts +3 -0
- package/dist/commands/peter.d.ts.map +1 -1
- package/dist/commands/peter.js +1218 -2
- package/dist/commands/peter.js.map +1 -1
- package/dist/commands/pi-fleet.d.ts +18 -0
- package/dist/commands/pi-fleet.d.ts.map +1 -0
- package/dist/commands/pi-fleet.js +382 -0
- package/dist/commands/pi-fleet.js.map +1 -0
- package/dist/commands/pi.d.ts.map +1 -1
- package/dist/commands/pi.js +18 -3
- package/dist/commands/pi.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +90 -1
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/services.d.ts.map +1 -1
- package/dist/commands/services.js +18 -0
- package/dist/commands/services.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +22 -4
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/viz.d.ts.map +1 -1
- package/dist/commands/viz.js +417 -0
- package/dist/commands/viz.js.map +1 -1
- package/dist/dashboard-static/assets/index-B6b867Pv.js +121 -0
- package/dist/dashboard-static/assets/index-Y4BrqxV-.css +1 -0
- package/dist/dashboard-static/index.html +2 -2
- package/dist/index.js +228 -62
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-config.d.ts +52 -0
- package/dist/lib/agent-config.d.ts.map +1 -0
- package/dist/lib/agent-config.js +231 -0
- package/dist/lib/agent-config.js.map +1 -0
- package/dist/lib/agent-generator.d.ts +10 -0
- package/dist/lib/agent-generator.d.ts.map +1 -1
- package/dist/lib/agent-generator.js +64 -10
- package/dist/lib/agent-generator.js.map +1 -1
- package/dist/lib/agent-session.d.ts +104 -0
- package/dist/lib/agent-session.d.ts.map +1 -0
- package/dist/lib/agent-session.js +627 -0
- package/dist/lib/agent-session.js.map +1 -0
- package/dist/lib/eval-snapshot.d.ts +47 -0
- package/dist/lib/eval-snapshot.d.ts.map +1 -0
- package/dist/lib/eval-snapshot.js +315 -0
- package/dist/lib/eval-snapshot.js.map +1 -0
- package/dist/lib/eval-store.d.ts +5 -0
- package/dist/lib/eval-store.d.ts.map +1 -1
- package/dist/lib/eval-store.js +33 -3
- package/dist/lib/eval-store.js.map +1 -1
- package/dist/lib/findings-engine.d.ts +51 -0
- package/dist/lib/findings-engine.d.ts.map +1 -0
- package/dist/lib/findings-engine.js +338 -0
- package/dist/lib/findings-engine.js.map +1 -0
- package/dist/lib/flow-engine.d.ts +8 -0
- package/dist/lib/flow-engine.d.ts.map +1 -1
- package/dist/lib/flow-engine.js +84 -2
- package/dist/lib/flow-engine.js.map +1 -1
- package/dist/lib/hub-client.d.ts +1 -0
- package/dist/lib/hub-client.d.ts.map +1 -1
- package/dist/lib/hub-client.js +33 -6
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/ide-panes.d.ts +58 -0
- package/dist/lib/ide-panes.d.ts.map +1 -0
- package/dist/lib/ide-panes.js +508 -0
- package/dist/lib/ide-panes.js.map +1 -0
- package/dist/lib/memory-db.js +4 -4
- package/dist/lib/memory-db.js.map +1 -1
- package/dist/lib/memory-indexer.d.ts.map +1 -1
- package/dist/lib/memory-indexer.js +3 -0
- package/dist/lib/memory-indexer.js.map +1 -1
- package/dist/lib/memory-search.d.ts +148 -4
- package/dist/lib/memory-search.d.ts.map +1 -1
- package/dist/lib/memory-search.js +496 -58
- package/dist/lib/memory-search.js.map +1 -1
- package/dist/lib/meta-orchestrator.d.ts +104 -0
- package/dist/lib/meta-orchestrator.d.ts.map +1 -0
- package/dist/lib/meta-orchestrator.js +373 -0
- package/dist/lib/meta-orchestrator.js.map +1 -0
- package/dist/lib/peer-agent-generator.d.ts.map +1 -1
- package/dist/lib/peer-agent-generator.js +43 -19
- package/dist/lib/peer-agent-generator.js.map +1 -1
- package/dist/lib/policy-head.d.ts +25 -0
- package/dist/lib/policy-head.d.ts.map +1 -0
- package/dist/lib/policy-head.js +136 -0
- package/dist/lib/policy-head.js.map +1 -0
- package/dist/lib/replay-buffer.d.ts +93 -0
- package/dist/lib/replay-buffer.d.ts.map +1 -0
- package/dist/lib/replay-buffer.js +302 -0
- package/dist/lib/replay-buffer.js.map +1 -0
- package/dist/lib/sentinel-rl.d.ts +97 -0
- package/dist/lib/sentinel-rl.d.ts.map +1 -0
- package/dist/lib/sentinel-rl.js +430 -0
- package/dist/lib/sentinel-rl.js.map +1 -0
- package/dist/lib/session-lock.d.ts +61 -0
- package/dist/lib/session-lock.d.ts.map +1 -0
- package/dist/lib/session-lock.js +438 -0
- package/dist/lib/session-lock.js.map +1 -0
- package/dist/lib/stratus-client.d.ts +1 -0
- package/dist/lib/stratus-client.d.ts.map +1 -1
- package/dist/lib/stratus-client.js +24 -2
- package/dist/lib/stratus-client.js.map +1 -1
- package/dist/lib/telemetry-agent-v2.d.ts +128 -0
- package/dist/lib/telemetry-agent-v2.d.ts.map +1 -0
- package/dist/lib/telemetry-agent-v2.js +1042 -0
- package/dist/lib/telemetry-agent-v2.js.map +1 -0
- package/dist/lib/telemetry-agent.d.ts.map +1 -1
- package/dist/lib/telemetry-agent.js +27 -6
- package/dist/lib/telemetry-agent.js.map +1 -1
- package/dist/lib/telemetry-digest.d.ts.map +1 -1
- package/dist/lib/telemetry-digest.js +27 -5
- package/dist/lib/telemetry-digest.js.map +1 -1
- package/dist/lib/telemetry.d.ts.map +1 -1
- package/dist/lib/telemetry.js +29 -4
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/lib/text-preprocessing.d.ts +83 -0
- package/dist/lib/text-preprocessing.d.ts.map +1 -0
- package/dist/lib/text-preprocessing.js +261 -0
- package/dist/lib/text-preprocessing.js.map +1 -0
- package/dist/lib/training-buffer.d.ts +86 -0
- package/dist/lib/training-buffer.d.ts.map +1 -0
- package/dist/lib/training-buffer.js +139 -0
- package/dist/lib/training-buffer.js.map +1 -0
- package/dist/lib/tuple-miner.d.ts +30 -0
- package/dist/lib/tuple-miner.d.ts.map +1 -0
- package/dist/lib/tuple-miner.js +427 -0
- package/dist/lib/tuple-miner.js.map +1 -0
- package/dist/lib/vm-backend.d.ts +72 -0
- package/dist/lib/vm-backend.d.ts.map +1 -0
- package/dist/lib/vm-backend.js +175 -0
- package/dist/lib/vm-backend.js.map +1 -0
- package/dist/lib/workspace/backend.d.ts +53 -0
- package/dist/lib/workspace/backend.d.ts.map +1 -0
- package/dist/lib/workspace/backend.js +37 -0
- package/dist/lib/workspace/backend.js.map +1 -0
- package/dist/lib/workspace/cmux-adapter.d.ts +46 -0
- package/dist/lib/workspace/cmux-adapter.d.ts.map +1 -0
- package/dist/lib/workspace/cmux-adapter.js +261 -0
- package/dist/lib/workspace/cmux-adapter.js.map +1 -0
- package/dist/lib/workspace/data-pipeline.d.ts +35 -0
- package/dist/lib/workspace/data-pipeline.d.ts.map +1 -0
- package/dist/lib/workspace/data-pipeline.js +463 -0
- package/dist/lib/workspace/data-pipeline.js.map +1 -0
- package/dist/lib/workspace/engine.d.ts +64 -0
- package/dist/lib/workspace/engine.d.ts.map +1 -0
- package/dist/lib/workspace/engine.js +397 -0
- package/dist/lib/workspace/engine.js.map +1 -0
- package/dist/lib/workspace/notifications.d.ts +14 -0
- package/dist/lib/workspace/notifications.d.ts.map +1 -0
- package/dist/lib/workspace/notifications.js +41 -0
- package/dist/lib/workspace/notifications.js.map +1 -0
- package/dist/lib/workspace/surface-registry.d.ts +49 -0
- package/dist/lib/workspace/surface-registry.d.ts.map +1 -0
- package/dist/lib/workspace/surface-registry.js +217 -0
- package/dist/lib/workspace/surface-registry.js.map +1 -0
- package/dist/lib/workspace/surface-type.d.ts +153 -0
- package/dist/lib/workspace/surface-type.d.ts.map +1 -0
- package/dist/lib/workspace/surface-type.js +9 -0
- package/dist/lib/workspace/surface-type.js.map +1 -0
- package/dist/lib/workspace/surfaces/agent-overview.d.ts +16 -0
- package/dist/lib/workspace/surfaces/agent-overview.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/agent-overview.js +116 -0
- package/dist/lib/workspace/surfaces/agent-overview.js.map +1 -0
- package/dist/lib/workspace/surfaces/agent.d.ts +16 -0
- package/dist/lib/workspace/surfaces/agent.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/agent.js +112 -0
- package/dist/lib/workspace/surfaces/agent.js.map +1 -0
- package/dist/lib/workspace/surfaces/claude.d.ts +15 -0
- package/dist/lib/workspace/surfaces/claude.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/claude.js +23 -0
- package/dist/lib/workspace/surfaces/claude.js.map +1 -0
- package/dist/lib/workspace/surfaces/dashboard.d.ts +21 -0
- package/dist/lib/workspace/surfaces/dashboard.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/dashboard.js +32 -0
- package/dist/lib/workspace/surfaces/dashboard.js.map +1 -0
- package/dist/lib/workspace/surfaces/eval.d.ts +15 -0
- package/dist/lib/workspace/surfaces/eval.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/eval.js +42 -0
- package/dist/lib/workspace/surfaces/eval.js.map +1 -0
- package/dist/lib/workspace/surfaces/event-stream.d.ts +16 -0
- package/dist/lib/workspace/surfaces/event-stream.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/event-stream.js +40 -0
- package/dist/lib/workspace/surfaces/event-stream.js.map +1 -0
- package/dist/lib/workspace/surfaces/flow.d.ts +16 -0
- package/dist/lib/workspace/surfaces/flow.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/flow.js +49 -0
- package/dist/lib/workspace/surfaces/flow.js.map +1 -0
- package/dist/lib/workspace/surfaces/index.d.ts +16 -0
- package/dist/lib/workspace/surfaces/index.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/index.js +16 -0
- package/dist/lib/workspace/surfaces/index.js.map +1 -0
- package/dist/lib/workspace/surfaces/portfolio.d.ts +16 -0
- package/dist/lib/workspace/surfaces/portfolio.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/portfolio.js +102 -0
- package/dist/lib/workspace/surfaces/portfolio.js.map +1 -0
- package/dist/lib/workspace/surfaces/service.d.ts +16 -0
- package/dist/lib/workspace/surfaces/service.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/service.js +45 -0
- package/dist/lib/workspace/surfaces/service.js.map +1 -0
- package/dist/lib/workspace/surfaces/shell.d.ts +15 -0
- package/dist/lib/workspace/surfaces/shell.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/shell.js +19 -0
- package/dist/lib/workspace/surfaces/shell.js.map +1 -0
- package/dist/lib/workspace/surfaces/telemetry.d.ts +16 -0
- package/dist/lib/workspace/surfaces/telemetry.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/telemetry.js +48 -0
- package/dist/lib/workspace/surfaces/telemetry.js.map +1 -0
- package/dist/lib/workspace/surfaces/topology.d.ts +15 -0
- package/dist/lib/workspace/surfaces/topology.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/topology.js +19 -0
- package/dist/lib/workspace/surfaces/topology.js.map +1 -0
- package/dist/lib/workspace/surfaces/training.d.ts +16 -0
- package/dist/lib/workspace/surfaces/training.d.ts.map +1 -0
- package/dist/lib/workspace/surfaces/training.js +22 -0
- package/dist/lib/workspace/surfaces/training.js.map +1 -0
- package/dist/lib/workspace/tmux-adapter.d.ts +27 -0
- package/dist/lib/workspace/tmux-adapter.d.ts.map +1 -0
- package/dist/lib/workspace/tmux-adapter.js +106 -0
- package/dist/lib/workspace/tmux-adapter.js.map +1 -0
- package/dist/mcp/context-hub-mcp.js +7 -24
- package/dist/mcp/context-hub-mcp.js.map +1 -1
- package/dist/types/flows.d.ts +2 -0
- package/dist/types/flows.d.ts.map +1 -1
- package/dist/types/ide.d.ts +49 -0
- package/dist/types/ide.d.ts.map +1 -0
- package/dist/types/ide.js +5 -0
- package/dist/types/ide.js.map +1 -0
- package/dist/types/platform-digest.d.ts +228 -0
- package/dist/types/platform-digest.d.ts.map +1 -0
- package/dist/types/platform-digest.js +5 -0
- package/dist/types/platform-digest.js.map +1 -0
- package/dist/types/telemetry-digest.d.ts +2 -0
- package/dist/types/telemetry-digest.d.ts.map +1 -1
- package/dist/utils/ensure-project.d.ts +1 -0
- package/dist/utils/ensure-project.d.ts.map +1 -1
- package/dist/utils/ensure-project.js +19 -7
- package/dist/utils/ensure-project.js.map +1 -1
- package/dist/utils/jfl-config.d.ts +1 -0
- package/dist/utils/jfl-config.d.ts.map +1 -1
- package/dist/utils/jfl-config.js +19 -1
- package/dist/utils/jfl-config.js.map +1 -1
- package/dist/utils/jfl-paths.d.ts +5 -0
- package/dist/utils/jfl-paths.d.ts.map +1 -1
- package/dist/utils/jfl-paths.js +25 -3
- package/dist/utils/jfl-paths.js.map +1 -1
- package/package.json +3 -2
- package/packages/pi/AGENTS.md +112 -0
- package/packages/pi/extensions/agent-grid.ts +191 -0
- package/packages/pi/extensions/agent-names.ts +178 -0
- package/packages/pi/extensions/autoresearch.ts +427 -0
- package/packages/pi/extensions/bookmarks.ts +85 -0
- package/packages/pi/extensions/context.ts +151 -0
- package/packages/pi/extensions/crm-tool.ts +61 -0
- package/packages/pi/extensions/eval-tool.ts +224 -0
- package/packages/pi/extensions/eval.ts +60 -0
- package/packages/pi/extensions/footer.ts +239 -0
- package/packages/pi/extensions/hud-tool.ts +145 -0
- package/packages/pi/extensions/index.ts +392 -0
- package/packages/pi/extensions/journal.ts +224 -0
- package/packages/pi/extensions/map-bridge.ts +178 -0
- package/packages/pi/extensions/memory-tool.ts +68 -0
- package/packages/pi/extensions/notifications.ts +73 -0
- package/packages/pi/extensions/peter-parker.ts +202 -0
- package/packages/pi/extensions/policy-head-tool.ts +276 -0
- package/packages/pi/extensions/portfolio-bridge.ts +90 -0
- package/packages/pi/extensions/session.ts +90 -0
- package/packages/pi/extensions/shortcuts.ts +259 -0
- package/packages/pi/extensions/stratus-bridge.ts +115 -0
- package/packages/pi/extensions/synopsis-tool.ts +83 -0
- package/packages/pi/extensions/tool-renderers.ts +352 -0
- package/packages/pi/extensions/training-buffer-tool.ts +368 -0
- package/packages/pi/extensions/types.ts +163 -0
- package/packages/pi/package-lock.json +346 -0
- package/packages/pi/package.json +44 -0
- package/packages/pi/skills/agent-browser/SKILL.md +116 -0
- package/packages/pi/skills/brand-architect/SKILL.md +240 -0
- package/packages/pi/skills/brand-architect/config.yaml +137 -0
- package/packages/pi/skills/campaign-hud/config.yaml +112 -0
- package/packages/pi/skills/content-creator/SKILL.md +294 -0
- package/packages/pi/skills/context/SKILL.md +65 -0
- package/packages/pi/skills/debug/MULTI_AGENT.md +360 -0
- package/packages/pi/skills/debug/SKILL.md +554 -0
- package/packages/pi/skills/end/SKILL.md +1782 -0
- package/packages/pi/skills/eval/SKILL.md +75 -0
- package/packages/pi/skills/fly-deploy/SKILL.md +676 -0
- package/packages/pi/skills/founder-video/SKILL.md +467 -0
- package/packages/pi/skills/hud/SKILL.md +160 -0
- package/packages/pi/skills/orchestrate/SKILL.md +74 -0
- package/packages/pi/skills/pi-agents/SKILL.md +78 -0
- package/packages/pi/skills/react-best-practices/AGENTS.md +2249 -0
- package/packages/pi/skills/react-best-practices/README.md +123 -0
- package/packages/pi/skills/react-best-practices/SKILL.md +125 -0
- package/packages/pi/skills/react-best-practices/metadata.json +15 -0
- package/packages/pi/skills/react-best-practices/rules/_sections.md +46 -0
- package/packages/pi/skills/react-best-practices/rules/_template.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/packages/pi/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/packages/pi/skills/react-best-practices/rules/async-api-routes.md +38 -0
- package/packages/pi/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/packages/pi/skills/react-best-practices/rules/async-dependencies.md +36 -0
- package/packages/pi/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-conditional.md +31 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/packages/pi/skills/react-best-practices/rules/bundle-preload.md +50 -0
- package/packages/pi/skills/react-best-practices/rules/client-event-listeners.md +74 -0
- package/packages/pi/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/packages/pi/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/packages/pi/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/packages/pi/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/packages/pi/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/packages/pi/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/packages/pi/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/packages/pi/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/packages/pi/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/packages/pi/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/packages/pi/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/packages/pi/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/packages/pi/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/packages/pi/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/packages/pi/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/packages/pi/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/packages/pi/skills/react-best-practices/rules/server-cache-react.md +26 -0
- package/packages/pi/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
- package/packages/pi/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/packages/pi/skills/remotion-best-practices/SKILL.md +43 -0
- package/packages/pi/skills/remotion-best-practices/rules/3d.md +86 -0
- package/packages/pi/skills/remotion-best-practices/rules/animations.md +29 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/packages/pi/skills/remotion-best-practices/rules/assets.md +78 -0
- package/packages/pi/skills/remotion-best-practices/rules/audio.md +172 -0
- package/packages/pi/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
- package/packages/pi/skills/remotion-best-practices/rules/can-decode.md +75 -0
- package/packages/pi/skills/remotion-best-practices/rules/charts.md +58 -0
- package/packages/pi/skills/remotion-best-practices/rules/compositions.md +146 -0
- package/packages/pi/skills/remotion-best-practices/rules/display-captions.md +126 -0
- package/packages/pi/skills/remotion-best-practices/rules/extract-frames.md +229 -0
- package/packages/pi/skills/remotion-best-practices/rules/fonts.md +152 -0
- package/packages/pi/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/packages/pi/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/packages/pi/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
- package/packages/pi/skills/remotion-best-practices/rules/gifs.md +138 -0
- package/packages/pi/skills/remotion-best-practices/rules/images.md +130 -0
- package/packages/pi/skills/remotion-best-practices/rules/import-srt-captions.md +67 -0
- package/packages/pi/skills/remotion-best-practices/rules/lottie.md +68 -0
- package/packages/pi/skills/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
- package/packages/pi/skills/remotion-best-practices/rules/measuring-text.md +143 -0
- package/packages/pi/skills/remotion-best-practices/rules/sequencing.md +106 -0
- package/packages/pi/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/packages/pi/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/packages/pi/skills/remotion-best-practices/rules/timing.md +179 -0
- package/packages/pi/skills/remotion-best-practices/rules/transcribe-captions.md +19 -0
- package/packages/pi/skills/remotion-best-practices/rules/transitions.md +122 -0
- package/packages/pi/skills/remotion-best-practices/rules/trimming.md +53 -0
- package/packages/pi/skills/remotion-best-practices/rules/videos.md +171 -0
- package/packages/pi/skills/search/SKILL.md +220 -0
- package/packages/pi/skills/spec/SKILL.md +377 -0
- package/packages/pi/skills/startup/SKILL.md +315 -0
- package/packages/pi/skills/web-architect/SKILL.md +309 -0
- package/packages/pi/skills/x-algorithm/SKILL.md +305 -0
- package/packages/pi/teams/dev-team.yaml +63 -0
- package/packages/pi/teams/gtm-team.yaml +79 -0
- package/packages/pi/themes/jfl.theme.json +76 -0
- package/packages/pi/tsconfig.json +21 -0
- package/scripts/collect-tuples.sh +124 -0
- package/scripts/destroy-fleet.sh +37 -0
- package/scripts/jfl-ide.sh +48 -0
- package/scripts/session/session-cleanup.sh +4 -11
- package/scripts/session/session-init.sh +6 -0
- package/scripts/session/session-sync.sh +25 -0
- package/scripts/setup-branch-protection.sh +106 -0
- package/scripts/spawn-fleet.sh +144 -0
- package/scripts/train-policy-head.py +434 -0
- package/scripts/vm-swarm/README.md +301 -0
- package/scripts/vm-swarm/collect-tuples.sh +331 -0
- package/scripts/vm-swarm/create-base-template.sh +339 -0
- package/scripts/vm-swarm/kill-fleet.sh +204 -0
- package/scripts/vm-swarm/monitor-fleet.sh +346 -0
- package/scripts/vm-swarm/spawn-fleet.sh +304 -0
- package/template/.github/workflows/jfl-eval.yml +105 -8
- package/template/.github/workflows/jfl-review.yml +4 -0
- package/template/scripts/session/session-end.sh +69 -6
- package/template/scripts/session/session-init.sh +55 -30
- package/template/scripts/session/session-lock.sh +464 -0
- package/template/templates/service-agent/workflows/jfl-eval.yml +19 -0
- package/dist/dashboard-static/assets/index-B6kRK9Rq.js +0 -116
- package/dist/dashboard-static/assets/index-BpdKJPLu.css +0 -1
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Agent surface — scoped RL agent execution with live round data from session state
|
|
3
|
+
*/
|
|
4
|
+
import { SurfaceType } from "../surface-type.js";
|
|
5
|
+
export class AgentSurface extends SurfaceType {
|
|
6
|
+
type = "agent";
|
|
7
|
+
title = "Agent";
|
|
8
|
+
description = "Scoped RL agent runner";
|
|
9
|
+
getCommand(ctx) {
|
|
10
|
+
const name = ctx.agentName || "default";
|
|
11
|
+
return `jfl peter agent run ${name} 2>/dev/null || echo "Agent ${name} failed to start"`;
|
|
12
|
+
}
|
|
13
|
+
getStatusEntries(ctx, data) {
|
|
14
|
+
const entries = [];
|
|
15
|
+
const agentName = ctx.agentName;
|
|
16
|
+
if (agentName) {
|
|
17
|
+
entries.push({ label: "Agent", value: agentName, color: "cyan" });
|
|
18
|
+
}
|
|
19
|
+
const session = agentName
|
|
20
|
+
? (data.agentSessions || []).find((s) => s.agentName === agentName)
|
|
21
|
+
: null;
|
|
22
|
+
if (session) {
|
|
23
|
+
const trendIcon = session.delta > 0 ? "+" : session.delta < 0 ? "" : "=";
|
|
24
|
+
entries.push({
|
|
25
|
+
label: session.metric,
|
|
26
|
+
value: `${session.currentScore.toFixed(4)} (${trendIcon}${session.delta.toFixed(4)})`,
|
|
27
|
+
color: session.delta > 0 ? "green" : session.delta < 0 ? "red" : "gray",
|
|
28
|
+
});
|
|
29
|
+
entries.push({ label: "Baseline", value: session.baseline.toFixed(4), color: "gray" });
|
|
30
|
+
entries.push({ label: "Round", value: String(session.round), color: "gray" });
|
|
31
|
+
entries.push({
|
|
32
|
+
label: "Explore",
|
|
33
|
+
value: `${(session.explorationRate * 100).toFixed(0)}%`,
|
|
34
|
+
color: session.explorationRate > 0.1 ? "yellow" : "green",
|
|
35
|
+
});
|
|
36
|
+
entries.push({
|
|
37
|
+
label: "Status",
|
|
38
|
+
value: session.status,
|
|
39
|
+
color: session.status === "active" ? "green" : session.status === "failed" ? "red" : "gray",
|
|
40
|
+
});
|
|
41
|
+
const kept = session.rounds.filter((r) => r.kept).length;
|
|
42
|
+
const total = session.rounds.length;
|
|
43
|
+
if (total > 0) {
|
|
44
|
+
entries.push({
|
|
45
|
+
label: "Rounds",
|
|
46
|
+
value: `${kept}/${total} kept`,
|
|
47
|
+
color: kept > total / 2 ? "green" : "yellow",
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
for (const r of session.rounds.slice(-3).reverse()) {
|
|
51
|
+
const icon = r.kept ? "+" : "x";
|
|
52
|
+
const label = `R${r.round}`;
|
|
53
|
+
const delta = r.delta > 0 ? `+${r.delta.toFixed(4)}` : r.delta.toFixed(4);
|
|
54
|
+
entries.push({
|
|
55
|
+
label,
|
|
56
|
+
value: `${icon} ${delta} ${r.task.slice(0, 30)}`,
|
|
57
|
+
color: r.kept ? "green" : "red",
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (session.produces.length > 0) {
|
|
61
|
+
entries.push({ label: "Produces", value: session.produces.join(", "), color: "cyan" });
|
|
62
|
+
}
|
|
63
|
+
if (session.consumes.length > 0) {
|
|
64
|
+
entries.push({ label: "Consumes", value: session.consumes.join(", "), color: "cyan" });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else if (data.agentData) {
|
|
68
|
+
entries.push({ label: "Metric", value: data.agentData.metric, color: "cyan" });
|
|
69
|
+
entries.push({ label: "Score", value: data.agentData.score.toFixed(4), color: "green" });
|
|
70
|
+
entries.push({ label: "Round", value: String(data.agentData.round), color: "gray" });
|
|
71
|
+
entries.push({
|
|
72
|
+
label: "Explore",
|
|
73
|
+
value: `${(data.agentData.explorationRate * 100).toFixed(0)}%`,
|
|
74
|
+
color: data.agentData.explorationRate > 0.1 ? "yellow" : "green",
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return entries;
|
|
78
|
+
}
|
|
79
|
+
getNotificationRules() {
|
|
80
|
+
return [
|
|
81
|
+
{
|
|
82
|
+
event: "agent:round_complete",
|
|
83
|
+
condition: (data) => {
|
|
84
|
+
const sessions = data.agentSessions || [];
|
|
85
|
+
return sessions.some((s) => s.status === "active" && s.rounds.length > 0);
|
|
86
|
+
},
|
|
87
|
+
title: "Agent round complete",
|
|
88
|
+
body: (data) => {
|
|
89
|
+
const s = (data.agentSessions || []).find((s) => s.status === "active");
|
|
90
|
+
if (!s)
|
|
91
|
+
return "Round complete";
|
|
92
|
+
const last = s.rounds[s.rounds.length - 1];
|
|
93
|
+
return last ? `${s.agentName} R${last.round}: ${last.kept ? "kept" : "reverted"} (${last.delta > 0 ? "+" : ""}${last.delta.toFixed(4)})` : `${s.agentName}: score ${s.currentScore.toFixed(4)}`;
|
|
94
|
+
},
|
|
95
|
+
urgency: "low",
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
event: "agent:error",
|
|
99
|
+
condition: (data) => {
|
|
100
|
+
const sessions = data.agentSessions || [];
|
|
101
|
+
return sessions.some((s) => s.status === "failed");
|
|
102
|
+
},
|
|
103
|
+
title: "Agent error",
|
|
104
|
+
urgency: "critical",
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
getUpdateInterval() {
|
|
109
|
+
return 5000;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Claude surface — primary AI assistant pane
|
|
3
|
+
*/
|
|
4
|
+
import type { StatusEntry } from "../backend.js";
|
|
5
|
+
import { SurfaceType } from "../surface-type.js";
|
|
6
|
+
import type { SurfaceContext, LiveData, NotificationRule } from "../surface-type.js";
|
|
7
|
+
export declare class ClaudeSurface extends SurfaceType {
|
|
8
|
+
readonly type = "claude";
|
|
9
|
+
readonly title = "Claude";
|
|
10
|
+
readonly description = "AI assistant (Claude Code)";
|
|
11
|
+
getCommand(_ctx: SurfaceContext): string;
|
|
12
|
+
getStatusEntries(_ctx: SurfaceContext, data: LiveData): StatusEntry[];
|
|
13
|
+
getNotificationRules(): NotificationRule[];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/claude.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEpF,qBAAa,aAAc,SAAQ,WAAW;IAC5C,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,KAAK,YAAW;IACzB,QAAQ,CAAC,WAAW,gCAA+B;IAEnD,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAIxC,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,EAAE;IAQrE,oBAAoB,IAAI,gBAAgB,EAAE;CAG3C"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Claude surface — primary AI assistant pane
|
|
3
|
+
*/
|
|
4
|
+
import { SurfaceType } from "../surface-type.js";
|
|
5
|
+
export class ClaudeSurface extends SurfaceType {
|
|
6
|
+
type = "claude";
|
|
7
|
+
title = "Claude";
|
|
8
|
+
description = "AI assistant (Claude Code)";
|
|
9
|
+
getCommand(_ctx) {
|
|
10
|
+
return "claude";
|
|
11
|
+
}
|
|
12
|
+
getStatusEntries(_ctx, data) {
|
|
13
|
+
const entries = [];
|
|
14
|
+
if (data.telemetryData) {
|
|
15
|
+
entries.push({ label: "Cost today", value: `$${data.telemetryData.costToday.toFixed(2)}`, color: "cyan" });
|
|
16
|
+
}
|
|
17
|
+
return entries;
|
|
18
|
+
}
|
|
19
|
+
getNotificationRules() {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/claude.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGhD,MAAM,OAAO,aAAc,SAAQ,WAAW;IACnC,IAAI,GAAG,QAAQ,CAAA;IACf,KAAK,GAAG,QAAQ,CAAA;IAChB,WAAW,GAAG,4BAA4B,CAAA;IAEnD,UAAU,CAAC,IAAoB;QAC7B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,gBAAgB,CAAC,IAAoB,EAAE,IAAc;QACnD,MAAM,OAAO,GAAkB,EAAE,CAAA;QACjC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5G,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,oBAAoB;QAClB,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Dashboard surface — opens JFL platform dashboard in cmux's built-in browser pane
|
|
3
|
+
*
|
|
4
|
+
* cmux has a scriptable browser (ported from agent-browser). When JFL platform
|
|
5
|
+
* is running locally, we open the dashboard right in the workspace. Agents can
|
|
6
|
+
* interact with it via cmux browser commands.
|
|
7
|
+
*/
|
|
8
|
+
import type { StatusEntry } from "../backend.js";
|
|
9
|
+
import { SurfaceType } from "../surface-type.js";
|
|
10
|
+
import type { SurfaceContext, LiveData, NotificationRule } from "../surface-type.js";
|
|
11
|
+
export declare class DashboardSurface extends SurfaceType {
|
|
12
|
+
readonly type = "dashboard";
|
|
13
|
+
readonly title = "Dashboard";
|
|
14
|
+
readonly description = "JFL platform dashboard (browser pane)";
|
|
15
|
+
getCommand(ctx: SurfaceContext): string;
|
|
16
|
+
isBrowserPane(): boolean;
|
|
17
|
+
getBrowserUrl(): string;
|
|
18
|
+
getStatusEntries(_ctx: SurfaceContext, _data: LiveData): StatusEntry[];
|
|
19
|
+
getNotificationRules(): NotificationRule[];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEpF,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,QAAQ,CAAC,IAAI,eAAc;IAC3B,QAAQ,CAAC,KAAK,eAAc;IAC5B,QAAQ,CAAC,WAAW,2CAA0C;IAE9D,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;IAOvC,aAAa,IAAI,OAAO;IAIxB,aAAa,IAAI,MAAM;IAIvB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,GAAG,WAAW,EAAE;IAItE,oBAAoB,IAAI,gBAAgB,EAAE;CAG3C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Dashboard surface — opens JFL platform dashboard in cmux's built-in browser pane
|
|
3
|
+
*
|
|
4
|
+
* cmux has a scriptable browser (ported from agent-browser). When JFL platform
|
|
5
|
+
* is running locally, we open the dashboard right in the workspace. Agents can
|
|
6
|
+
* interact with it via cmux browser commands.
|
|
7
|
+
*/
|
|
8
|
+
import { SurfaceType } from "../surface-type.js";
|
|
9
|
+
export class DashboardSurface extends SurfaceType {
|
|
10
|
+
type = "dashboard";
|
|
11
|
+
title = "Dashboard";
|
|
12
|
+
description = "JFL platform dashboard (browser pane)";
|
|
13
|
+
getCommand(ctx) {
|
|
14
|
+
// When running inside cmux, we can use the browser pane type.
|
|
15
|
+
// The engine will detect this and use pane.create with type=browser instead.
|
|
16
|
+
// Fallback for tmux: open in default browser
|
|
17
|
+
return 'open http://localhost:3000/dashboard 2>/dev/null || echo "JFL Platform not running. Start with: jfl deploy local"';
|
|
18
|
+
}
|
|
19
|
+
isBrowserPane() {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
getBrowserUrl() {
|
|
23
|
+
return "http://localhost:3000/dashboard";
|
|
24
|
+
}
|
|
25
|
+
getStatusEntries(_ctx, _data) {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
getNotificationRules() {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGhD,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IACtC,IAAI,GAAG,WAAW,CAAA;IAClB,KAAK,GAAG,WAAW,CAAA;IACnB,WAAW,GAAG,uCAAuC,CAAA;IAE9D,UAAU,CAAC,GAAmB;QAC5B,8DAA8D;QAC9D,6EAA6E;QAC7E,6CAA6C;QAC7C,OAAO,mHAAmH,CAAA;IAC5H,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAA;IACb,CAAC;IAED,aAAa;QACX,OAAO,iCAAiC,CAAA;IAC1C,CAAC;IAED,gBAAgB,CAAC,IAAoB,EAAE,KAAe;QACpD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,oBAAoB;QAClB,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Eval surface — metrics dashboard with composite score tracking
|
|
3
|
+
*/
|
|
4
|
+
import type { StatusEntry } from "../backend.js";
|
|
5
|
+
import { SurfaceType } from "../surface-type.js";
|
|
6
|
+
import type { SurfaceContext, LiveData, NotificationRule } from "../surface-type.js";
|
|
7
|
+
export declare class EvalSurface extends SurfaceType {
|
|
8
|
+
readonly type = "eval";
|
|
9
|
+
readonly title = "Eval";
|
|
10
|
+
readonly description = "Eval metrics dashboard (auto-refresh)";
|
|
11
|
+
getCommand(_ctx: SurfaceContext): string;
|
|
12
|
+
getStatusEntries(_ctx: SurfaceContext, data: LiveData): StatusEntry[];
|
|
13
|
+
getNotificationRules(): NotificationRule[];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=eval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/eval.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEpF,qBAAa,WAAY,SAAQ,WAAW;IAC1C,QAAQ,CAAC,IAAI,UAAS;IACtB,QAAQ,CAAC,KAAK,UAAS;IACvB,QAAQ,CAAC,WAAW,2CAA0C;IAE9D,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAIxC,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,EAAE;IAYrE,oBAAoB,IAAI,gBAAgB,EAAE;CAkB3C"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Eval surface — metrics dashboard with composite score tracking
|
|
3
|
+
*/
|
|
4
|
+
import { SurfaceType } from "../surface-type.js";
|
|
5
|
+
export class EvalSurface extends SurfaceType {
|
|
6
|
+
type = "eval";
|
|
7
|
+
title = "Eval";
|
|
8
|
+
description = "Eval metrics dashboard (auto-refresh)";
|
|
9
|
+
getCommand(_ctx) {
|
|
10
|
+
return 'watch -n 5 "cat .jfl/eval/eval.jsonl 2>/dev/null | tail -20 || echo No eval data yet"';
|
|
11
|
+
}
|
|
12
|
+
getStatusEntries(_ctx, data) {
|
|
13
|
+
const entries = [];
|
|
14
|
+
if (data.evalData) {
|
|
15
|
+
const { latestComposite, delta, trend } = data.evalData;
|
|
16
|
+
const trendIcon = trend === "up" ? "^" : trend === "down" ? "v" : "=";
|
|
17
|
+
const color = trend === "up" ? "green" : trend === "down" ? "red" : "gray";
|
|
18
|
+
entries.push({ label: "Composite", value: latestComposite.toFixed(4), color: "cyan" });
|
|
19
|
+
entries.push({ label: "Delta", value: `${delta >= 0 ? "+" : ""}${delta.toFixed(4)} ${trendIcon}`, color });
|
|
20
|
+
}
|
|
21
|
+
return entries;
|
|
22
|
+
}
|
|
23
|
+
getNotificationRules() {
|
|
24
|
+
return [
|
|
25
|
+
{
|
|
26
|
+
event: "eval:improved",
|
|
27
|
+
condition: (data) => (data.evalData?.delta ?? 0) > 0.01,
|
|
28
|
+
title: "Eval score improved",
|
|
29
|
+
body: (data) => `Composite: ${data.evalData?.latestComposite.toFixed(4)} (+${data.evalData?.delta.toFixed(4)})`,
|
|
30
|
+
urgency: "normal",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
event: "eval:regressed",
|
|
34
|
+
condition: (data) => (data.evalData?.delta ?? 0) < -0.01,
|
|
35
|
+
title: "Eval score regressed",
|
|
36
|
+
body: (data) => `Composite: ${data.evalData?.latestComposite.toFixed(4)} (${data.evalData?.delta.toFixed(4)})`,
|
|
37
|
+
urgency: "critical",
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=eval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/eval.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGhD,MAAM,OAAO,WAAY,SAAQ,WAAW;IACjC,IAAI,GAAG,MAAM,CAAA;IACb,KAAK,GAAG,MAAM,CAAA;IACd,WAAW,GAAG,uCAAuC,CAAA;IAE9D,UAAU,CAAC,IAAoB;QAC7B,OAAO,uFAAuF,CAAA;IAChG,CAAC;IAED,gBAAgB,CAAC,IAAoB,EAAE,IAAc;QACnD,MAAM,OAAO,GAAkB,EAAE,CAAA;QACjC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAA;YACvD,MAAM,SAAS,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;YACrE,MAAM,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAA;YAC1E,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YACtF,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QAC5G,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,oBAAoB;QAClB,OAAO;YACL;gBACE,KAAK,EAAE,eAAe;gBACtB,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI;gBACvD,KAAK,EAAE,qBAAqB;gBAC5B,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBAC/G,OAAO,EAAE,QAAQ;aAClB;YACD;gBACE,KAAK,EAAE,gBAAgB;gBACvB,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI;gBACxD,KAAK,EAAE,sBAAsB;gBAC7B,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBAC9G,OAAO,EAAE,UAAU;aACpB;SACF,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Event stream surface — live Context Hub events
|
|
3
|
+
*/
|
|
4
|
+
import type { StatusEntry } from "../backend.js";
|
|
5
|
+
import { SurfaceType } from "../surface-type.js";
|
|
6
|
+
import type { SurfaceContext, LiveData, NotificationRule } from "../surface-type.js";
|
|
7
|
+
export declare class EventStreamSurface extends SurfaceType {
|
|
8
|
+
readonly type = "events";
|
|
9
|
+
readonly title = "Events";
|
|
10
|
+
readonly description = "Live event stream from Context Hub";
|
|
11
|
+
getCommand(_ctx: SurfaceContext): string;
|
|
12
|
+
getStatusEntries(_ctx: SurfaceContext, data: LiveData): StatusEntry[];
|
|
13
|
+
getNotificationRules(): NotificationRule[];
|
|
14
|
+
getUpdateInterval(): number;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=event-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-stream.d.ts","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/event-stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEpF,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,KAAK,YAAW;IACzB,QAAQ,CAAC,WAAW,wCAAuC;IAE3D,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAIxC,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,EAAE;IAerE,oBAAoB,IAAI,gBAAgB,EAAE;IAW1C,iBAAiB,IAAI,MAAM;CAG5B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Event stream surface — live Context Hub events
|
|
3
|
+
*/
|
|
4
|
+
import { SurfaceType } from "../surface-type.js";
|
|
5
|
+
export class EventStreamSurface extends SurfaceType {
|
|
6
|
+
type = "events";
|
|
7
|
+
title = "Events";
|
|
8
|
+
description = "Live event stream from Context Hub";
|
|
9
|
+
getCommand(_ctx) {
|
|
10
|
+
return 'jfl context-hub events --follow 2>/dev/null || echo "Context Hub not running. Run: jfl context-hub start"';
|
|
11
|
+
}
|
|
12
|
+
getStatusEntries(_ctx, data) {
|
|
13
|
+
const entries = [];
|
|
14
|
+
if (data.hubEvents) {
|
|
15
|
+
entries.push({ label: "Events/24h", value: String(data.hubEvents.count24h), color: "cyan" });
|
|
16
|
+
if (data.hubEvents.topTypes.length > 0) {
|
|
17
|
+
const top = data.hubEvents.topTypes[0];
|
|
18
|
+
entries.push({ label: "Top type", value: `${top.type} (${top.count})`, color: "gray" });
|
|
19
|
+
}
|
|
20
|
+
if (data.hubEvents.recentErrors.length > 0) {
|
|
21
|
+
entries.push({ label: "Errors", value: String(data.hubEvents.recentErrors.length), color: "red" });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return entries;
|
|
25
|
+
}
|
|
26
|
+
getNotificationRules() {
|
|
27
|
+
return [
|
|
28
|
+
{
|
|
29
|
+
event: "error",
|
|
30
|
+
condition: (data) => (data.hubEvents?.recentErrors.length ?? 0) > 0,
|
|
31
|
+
title: "Error events detected",
|
|
32
|
+
urgency: "critical",
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
getUpdateInterval() {
|
|
37
|
+
return 10000;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=event-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/event-stream.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGhD,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACxC,IAAI,GAAG,QAAQ,CAAA;IACf,KAAK,GAAG,QAAQ,CAAA;IAChB,WAAW,GAAG,oCAAoC,CAAA;IAE3D,UAAU,CAAC,IAAoB;QAC7B,OAAO,2GAA2G,CAAA;IACpH,CAAC;IAED,gBAAgB,CAAC,IAAoB,EAAE,IAAc;QACnD,MAAM,OAAO,GAAkB,EAAE,CAAA;QACjC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAC5F,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;gBACtC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YACzF,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;YACpG,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,oBAAoB;QAClB,OAAO;YACL;gBACE,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;gBACnE,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,UAAU;aACpB;SACF,CAAA;IACH,CAAC;IAED,iBAAiB;QACf,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Flow surface — active flow monitoring with gate tracking
|
|
3
|
+
*/
|
|
4
|
+
import type { StatusEntry } from "../backend.js";
|
|
5
|
+
import { SurfaceType } from "../surface-type.js";
|
|
6
|
+
import type { SurfaceContext, LiveData, NotificationRule } from "../surface-type.js";
|
|
7
|
+
export declare class FlowSurface extends SurfaceType {
|
|
8
|
+
readonly type = "flows";
|
|
9
|
+
readonly title = "Flows";
|
|
10
|
+
readonly description = "Active flows and automation status";
|
|
11
|
+
getCommand(_ctx: SurfaceContext): string;
|
|
12
|
+
getStatusEntries(_ctx: SurfaceContext, data: LiveData): StatusEntry[];
|
|
13
|
+
getNotificationRules(): NotificationRule[];
|
|
14
|
+
getUpdateInterval(): number;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/flow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEpF,qBAAa,WAAY,SAAQ,WAAW;IAC1C,QAAQ,CAAC,IAAI,WAAU;IACvB,QAAQ,CAAC,KAAK,WAAU;IACxB,QAAQ,CAAC,WAAW,wCAAuC;IAE3D,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAIxC,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,EAAE;IAiBrE,oBAAoB,IAAI,gBAAgB,EAAE;IAkB1C,iBAAiB,IAAI,MAAM;CAG5B"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Flow surface — active flow monitoring with gate tracking
|
|
3
|
+
*/
|
|
4
|
+
import { SurfaceType } from "../surface-type.js";
|
|
5
|
+
export class FlowSurface extends SurfaceType {
|
|
6
|
+
type = "flows";
|
|
7
|
+
title = "Flows";
|
|
8
|
+
description = "Active flows and automation status";
|
|
9
|
+
getCommand(_ctx) {
|
|
10
|
+
return 'watch -n 10 "jfl flows list 2>/dev/null || echo No flows configured"';
|
|
11
|
+
}
|
|
12
|
+
getStatusEntries(_ctx, data) {
|
|
13
|
+
const entries = [];
|
|
14
|
+
if (data.flowData) {
|
|
15
|
+
entries.push({ label: "Active", value: String(data.flowData.activeCount), color: "green" });
|
|
16
|
+
if (data.flowData.gatedCount > 0) {
|
|
17
|
+
entries.push({ label: "Gated", value: String(data.flowData.gatedCount), color: "yellow" });
|
|
18
|
+
}
|
|
19
|
+
if (data.flowData.needsApproval.length > 0) {
|
|
20
|
+
entries.push({ label: "Needs approval", value: String(data.flowData.needsApproval.length), color: "yellow" });
|
|
21
|
+
}
|
|
22
|
+
if (data.flowData.recentFailures > 0) {
|
|
23
|
+
entries.push({ label: "Failed", value: String(data.flowData.recentFailures), color: "red" });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return entries;
|
|
27
|
+
}
|
|
28
|
+
getNotificationRules() {
|
|
29
|
+
return [
|
|
30
|
+
{
|
|
31
|
+
event: "flow:needs_approval",
|
|
32
|
+
condition: (data) => (data.flowData?.needsApproval.length ?? 0) > 0,
|
|
33
|
+
title: "Flow needs approval",
|
|
34
|
+
body: (data) => data.flowData?.needsApproval.join(", ") || "",
|
|
35
|
+
urgency: "normal",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
event: "flow:failed",
|
|
39
|
+
condition: (data) => (data.flowData?.recentFailures ?? 0) > 0,
|
|
40
|
+
title: "Flow execution failed",
|
|
41
|
+
urgency: "critical",
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
getUpdateInterval() {
|
|
46
|
+
return 10000;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/flow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGhD,MAAM,OAAO,WAAY,SAAQ,WAAW;IACjC,IAAI,GAAG,OAAO,CAAA;IACd,KAAK,GAAG,OAAO,CAAA;IACf,WAAW,GAAG,oCAAoC,CAAA;IAE3D,UAAU,CAAC,IAAoB;QAC7B,OAAO,sEAAsE,CAAA;IAC/E,CAAC;IAED,gBAAgB,CAAC,IAAoB,EAAE,IAAc;QACnD,MAAM,OAAO,GAAkB,EAAE,CAAA;QACjC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;YAC3F,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC5F,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC/G,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;YAC9F,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,oBAAoB;QAClB,OAAO;YACL;gBACE,KAAK,EAAE,qBAAqB;gBAC5B,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;gBACnE,KAAK,EAAE,qBAAqB;gBAC5B,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC7D,OAAO,EAAE,QAAQ;aAClB;YACD;gBACE,KAAK,EAAE,aAAa;gBACpB,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC;gBAC7D,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EAAE,UAAU;aACpB;SACF,CAAA;IACH,CAAC;IAED,iBAAiB;QACf,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Barrel export for all surface types
|
|
3
|
+
*/
|
|
4
|
+
export { ClaudeSurface } from "./claude.js";
|
|
5
|
+
export { ShellSurface } from "./shell.js";
|
|
6
|
+
export { EventStreamSurface } from "./event-stream.js";
|
|
7
|
+
export { EvalSurface } from "./eval.js";
|
|
8
|
+
export { FlowSurface } from "./flow.js";
|
|
9
|
+
export { AgentSurface } from "./agent.js";
|
|
10
|
+
export { AgentOverviewSurface } from "./agent-overview.js";
|
|
11
|
+
export { ServiceSurface } from "./service.js";
|
|
12
|
+
export { TelemetrySurface } from "./telemetry.js";
|
|
13
|
+
export { PortfolioSurface } from "./portfolio.js";
|
|
14
|
+
export { TopologySurface } from "./topology.js";
|
|
15
|
+
export { TrainingSurface } from "./training.js";
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Barrel export for all surface types
|
|
3
|
+
*/
|
|
4
|
+
export { ClaudeSurface } from "./claude.js";
|
|
5
|
+
export { ShellSurface } from "./shell.js";
|
|
6
|
+
export { EventStreamSurface } from "./event-stream.js";
|
|
7
|
+
export { EvalSurface } from "./eval.js";
|
|
8
|
+
export { FlowSurface } from "./flow.js";
|
|
9
|
+
export { AgentSurface } from "./agent.js";
|
|
10
|
+
export { AgentOverviewSurface } from "./agent-overview.js";
|
|
11
|
+
export { ServiceSurface } from "./service.js";
|
|
12
|
+
export { TelemetrySurface } from "./telemetry.js";
|
|
13
|
+
export { PortfolioSurface } from "./portfolio.js";
|
|
14
|
+
export { TopologySurface } from "./topology.js";
|
|
15
|
+
export { TrainingSurface } from "./training.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Portfolio surface — aggregate health, eval, agents, and cost across child projects
|
|
3
|
+
*/
|
|
4
|
+
import type { StatusEntry } from "../backend.js";
|
|
5
|
+
import { SurfaceType } from "../surface-type.js";
|
|
6
|
+
import type { SurfaceContext, LiveData, NotificationRule } from "../surface-type.js";
|
|
7
|
+
export declare class PortfolioSurface extends SurfaceType {
|
|
8
|
+
readonly type = "portfolio";
|
|
9
|
+
readonly title = "Portfolio";
|
|
10
|
+
readonly description = "Aggregate health across all products";
|
|
11
|
+
getCommand(_ctx: SurfaceContext): string;
|
|
12
|
+
getStatusEntries(_ctx: SurfaceContext, data: LiveData): StatusEntry[];
|
|
13
|
+
getNotificationRules(): NotificationRule[];
|
|
14
|
+
getUpdateInterval(): number;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=portfolio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portfolio.d.ts","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/portfolio.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEpF,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,QAAQ,CAAC,IAAI,eAAc;IAC3B,QAAQ,CAAC,KAAK,eAAc;IAC5B,QAAQ,CAAC,WAAW,0CAAyC;IAE7D,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAIxC,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,EAAE;IAkErE,oBAAoB,IAAI,gBAAgB,EAAE;IA+B1C,iBAAiB,IAAI,MAAM;CAG5B"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @purpose Portfolio surface — aggregate health, eval, agents, and cost across child projects
|
|
3
|
+
*/
|
|
4
|
+
import { SurfaceType } from "../surface-type.js";
|
|
5
|
+
export class PortfolioSurface extends SurfaceType {
|
|
6
|
+
type = "portfolio";
|
|
7
|
+
title = "Portfolio";
|
|
8
|
+
description = "Aggregate health across all products";
|
|
9
|
+
getCommand(_ctx) {
|
|
10
|
+
return 'watch -n 30 "jfl portfolio health 2>/dev/null || echo No portfolio data"';
|
|
11
|
+
}
|
|
12
|
+
getStatusEntries(_ctx, data) {
|
|
13
|
+
const entries = [];
|
|
14
|
+
const children = data.childProjects || [];
|
|
15
|
+
if (children.length === 0) {
|
|
16
|
+
entries.push({ label: "Products", value: "none discovered", color: "gray" });
|
|
17
|
+
return entries;
|
|
18
|
+
}
|
|
19
|
+
entries.push({
|
|
20
|
+
label: "Products",
|
|
21
|
+
value: `${children.length}`,
|
|
22
|
+
color: "cyan",
|
|
23
|
+
});
|
|
24
|
+
for (const child of children) {
|
|
25
|
+
const healthIcon = child.health === "healthy" ? "●"
|
|
26
|
+
: child.health === "degraded" ? "◐"
|
|
27
|
+
: child.health === "unhealthy" ? "○"
|
|
28
|
+
: "?";
|
|
29
|
+
const healthColor = child.health === "healthy" ? "green"
|
|
30
|
+
: child.health === "degraded" ? "yellow"
|
|
31
|
+
: child.health === "unhealthy" ? "red"
|
|
32
|
+
: "gray";
|
|
33
|
+
let detail = "";
|
|
34
|
+
if (child.evalScore !== undefined) {
|
|
35
|
+
const trend = child.evalTrend === "up" ? "▲" : child.evalTrend === "down" ? "▼" : "=";
|
|
36
|
+
detail += ` eval:${child.evalScore.toFixed(2)}${trend}`;
|
|
37
|
+
}
|
|
38
|
+
if (child.activeAgents !== undefined && child.activeAgents > 0) {
|
|
39
|
+
detail += ` ${child.activeAgents}ag`;
|
|
40
|
+
}
|
|
41
|
+
if (child.activeFlows !== undefined && child.activeFlows > 0) {
|
|
42
|
+
detail += ` ${child.activeFlows}fl`;
|
|
43
|
+
}
|
|
44
|
+
entries.push({
|
|
45
|
+
label: `${healthIcon} ${child.name}`,
|
|
46
|
+
value: detail.trim() || child.type,
|
|
47
|
+
color: healthColor,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
const totalAgents = children.reduce((sum, c) => sum + (c.activeAgents || 0), 0);
|
|
51
|
+
if (totalAgents > 0) {
|
|
52
|
+
entries.push({ label: "Agents", value: `${totalAgents} active across products`, color: "cyan" });
|
|
53
|
+
}
|
|
54
|
+
const totalCost = children.reduce((sum, c) => sum + (c.costToday || 0), 0);
|
|
55
|
+
if (totalCost > 0) {
|
|
56
|
+
entries.push({
|
|
57
|
+
label: "Cost",
|
|
58
|
+
value: `$${totalCost.toFixed(2)}/today`,
|
|
59
|
+
color: totalCost > 10 ? "yellow" : "green",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const contextFlows = children.filter((c) => c.contextScope).length;
|
|
63
|
+
if (contextFlows > 0) {
|
|
64
|
+
entries.push({ label: "Context", value: `${contextFlows} scoped`, color: "cyan" });
|
|
65
|
+
}
|
|
66
|
+
return entries;
|
|
67
|
+
}
|
|
68
|
+
getNotificationRules() {
|
|
69
|
+
return [
|
|
70
|
+
{
|
|
71
|
+
event: "portfolio:child_unhealthy",
|
|
72
|
+
condition: (data) => {
|
|
73
|
+
const children = data.childProjects || [];
|
|
74
|
+
return children.some((c) => c.health === "unhealthy");
|
|
75
|
+
},
|
|
76
|
+
title: "Product unhealthy",
|
|
77
|
+
body: (data) => {
|
|
78
|
+
const unhealthy = (data.childProjects || []).filter((c) => c.health === "unhealthy");
|
|
79
|
+
return unhealthy.map((c) => c.name).join(", ");
|
|
80
|
+
},
|
|
81
|
+
urgency: "critical",
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
event: "portfolio:eval_regression",
|
|
85
|
+
condition: (data) => {
|
|
86
|
+
const children = data.childProjects || [];
|
|
87
|
+
return children.some((c) => c.evalTrend === "down");
|
|
88
|
+
},
|
|
89
|
+
title: "Eval regression in product",
|
|
90
|
+
body: (data) => {
|
|
91
|
+
const regressed = (data.childProjects || []).filter((c) => c.evalTrend === "down");
|
|
92
|
+
return regressed.map((c) => `${c.name}: ${c.evalScore?.toFixed(3)}`).join(", ");
|
|
93
|
+
},
|
|
94
|
+
urgency: "normal",
|
|
95
|
+
},
|
|
96
|
+
];
|
|
97
|
+
}
|
|
98
|
+
getUpdateInterval() {
|
|
99
|
+
return 30000;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=portfolio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../../../src/lib/workspace/surfaces/portfolio.ts"],"names":[],"mappings":"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"}
|