@oxagen/cli 0.4.0 → 0.6.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 +68 -5
- package/dist/agent/__tests__/code-graph.test.d.ts +2 -0
- package/dist/agent/__tests__/code-graph.test.d.ts.map +1 -0
- package/dist/agent/__tests__/code-graph.test.js +83 -0
- package/dist/agent/__tests__/code-graph.test.js.map +1 -0
- package/dist/agent/__tests__/evaluator.test.d.ts +2 -0
- package/dist/agent/__tests__/evaluator.test.d.ts.map +1 -0
- package/dist/agent/__tests__/evaluator.test.js +96 -0
- package/dist/agent/__tests__/evaluator.test.js.map +1 -0
- package/dist/agent/__tests__/fleet-memory.test.d.ts +2 -0
- package/dist/agent/__tests__/fleet-memory.test.d.ts.map +1 -0
- package/dist/agent/__tests__/fleet-memory.test.js +107 -0
- package/dist/agent/__tests__/fleet-memory.test.js.map +1 -0
- package/dist/agent/__tests__/fleet-store.test.d.ts +2 -0
- package/dist/agent/__tests__/fleet-store.test.d.ts.map +1 -0
- package/dist/agent/__tests__/fleet-store.test.js +93 -0
- package/dist/agent/__tests__/fleet-store.test.js.map +1 -0
- package/dist/agent/__tests__/git-isolation.test.d.ts +2 -0
- package/dist/agent/__tests__/git-isolation.test.d.ts.map +1 -0
- package/dist/agent/__tests__/git-isolation.test.js +119 -0
- package/dist/agent/__tests__/git-isolation.test.js.map +1 -0
- package/dist/agent/__tests__/judge.test.d.ts +2 -0
- package/dist/agent/__tests__/judge.test.d.ts.map +1 -0
- package/dist/agent/__tests__/judge.test.js +135 -0
- package/dist/agent/__tests__/judge.test.js.map +1 -0
- package/dist/agent/__tests__/loop-errors.test.d.ts +2 -0
- package/dist/agent/__tests__/loop-errors.test.d.ts.map +1 -0
- package/dist/agent/__tests__/loop-errors.test.js +44 -0
- package/dist/agent/__tests__/loop-errors.test.js.map +1 -0
- package/dist/agent/__tests__/model-router.test.d.ts +2 -0
- package/dist/agent/__tests__/model-router.test.d.ts.map +1 -0
- package/dist/agent/__tests__/model-router.test.js +122 -0
- package/dist/agent/__tests__/model-router.test.js.map +1 -0
- package/dist/agent/__tests__/orchestrator-isolation.test.d.ts +2 -0
- package/dist/agent/__tests__/orchestrator-isolation.test.d.ts.map +1 -0
- package/dist/agent/__tests__/orchestrator-isolation.test.js +134 -0
- package/dist/agent/__tests__/orchestrator-isolation.test.js.map +1 -0
- package/dist/agent/__tests__/orchestrator.test.d.ts +2 -0
- package/dist/agent/__tests__/orchestrator.test.d.ts.map +1 -0
- package/dist/agent/__tests__/orchestrator.test.js +201 -0
- package/dist/agent/__tests__/orchestrator.test.js.map +1 -0
- package/dist/agent/__tests__/pipeline.test.d.ts +2 -0
- package/dist/agent/__tests__/pipeline.test.d.ts.map +1 -0
- package/dist/agent/__tests__/pipeline.test.js +226 -0
- package/dist/agent/__tests__/pipeline.test.js.map +1 -0
- package/dist/agent/__tests__/planner.test.d.ts +2 -0
- package/dist/agent/__tests__/planner.test.d.ts.map +1 -0
- package/dist/agent/__tests__/planner.test.js +98 -0
- package/dist/agent/__tests__/planner.test.js.map +1 -0
- package/dist/agent/__tests__/prompt-enhancer.test.d.ts +2 -0
- package/dist/agent/__tests__/prompt-enhancer.test.d.ts.map +1 -0
- package/dist/agent/__tests__/prompt-enhancer.test.js +107 -0
- package/dist/agent/__tests__/prompt-enhancer.test.js.map +1 -0
- package/dist/agent/__tests__/trace-format.test.d.ts +2 -0
- package/dist/agent/__tests__/trace-format.test.d.ts.map +1 -0
- package/dist/agent/__tests__/trace-format.test.js +104 -0
- package/dist/agent/__tests__/trace-format.test.js.map +1 -0
- package/dist/agent/__tests__/trace-store.test.d.ts +2 -0
- package/dist/agent/__tests__/trace-store.test.d.ts.map +1 -0
- package/dist/agent/__tests__/trace-store.test.js +113 -0
- package/dist/agent/__tests__/trace-store.test.js.map +1 -0
- package/dist/agent/code-graph.d.ts +18 -0
- package/dist/agent/code-graph.d.ts.map +1 -0
- package/dist/agent/code-graph.js +119 -0
- package/dist/agent/code-graph.js.map +1 -0
- package/dist/agent/env.d.ts +11 -0
- package/dist/agent/env.d.ts.map +1 -0
- package/dist/agent/env.js +82 -0
- package/dist/agent/env.js.map +1 -0
- package/dist/agent/evaluator.d.ts +13 -0
- package/dist/agent/evaluator.d.ts.map +1 -0
- package/dist/agent/evaluator.js +146 -0
- package/dist/agent/evaluator.js.map +1 -0
- package/dist/agent/fleet/git-isolation.d.ts +142 -0
- package/dist/agent/fleet/git-isolation.d.ts.map +1 -0
- package/dist/agent/fleet/git-isolation.js +290 -0
- package/dist/agent/fleet/git-isolation.js.map +1 -0
- package/dist/agent/fleet/memory.d.ts +21 -0
- package/dist/agent/fleet/memory.d.ts.map +1 -0
- package/dist/agent/fleet/memory.js +129 -0
- package/dist/agent/fleet/memory.js.map +1 -0
- package/dist/agent/fleet/orchestrator.d.ts +103 -0
- package/dist/agent/fleet/orchestrator.d.ts.map +1 -0
- package/dist/agent/fleet/orchestrator.js +355 -0
- package/dist/agent/fleet/orchestrator.js.map +1 -0
- package/dist/agent/fleet/store.d.ts +13 -0
- package/dist/agent/fleet/store.d.ts.map +1 -0
- package/dist/agent/fleet/store.js +79 -0
- package/dist/agent/fleet/store.js.map +1 -0
- package/dist/agent/fleet/types.d.ts +105 -0
- package/dist/agent/fleet/types.d.ts.map +1 -0
- package/dist/agent/fleet/types.js +17 -0
- package/dist/agent/fleet/types.js.map +1 -0
- package/dist/agent/judge.d.ts +38 -0
- package/dist/agent/judge.d.ts.map +1 -0
- package/dist/agent/judge.js +170 -0
- package/dist/agent/judge.js.map +1 -0
- package/dist/agent/loop.d.ts +61 -0
- package/dist/agent/loop.d.ts.map +1 -0
- package/dist/agent/loop.js +134 -0
- package/dist/agent/loop.js.map +1 -0
- package/dist/agent/memory.d.ts +14 -0
- package/dist/agent/memory.d.ts.map +1 -0
- package/dist/agent/memory.js +118 -0
- package/dist/agent/memory.js.map +1 -0
- package/dist/agent/model-router.d.ts +79 -0
- package/dist/agent/model-router.d.ts.map +1 -0
- package/dist/agent/model-router.js +141 -0
- package/dist/agent/model-router.js.map +1 -0
- package/dist/agent/model.d.ts +9 -0
- package/dist/agent/model.d.ts.map +1 -0
- package/dist/agent/model.js +24 -0
- package/dist/agent/model.js.map +1 -0
- package/dist/agent/pipeline.d.ts +82 -0
- package/dist/agent/pipeline.d.ts.map +1 -0
- package/dist/agent/pipeline.js +320 -0
- package/dist/agent/pipeline.js.map +1 -0
- package/dist/agent/planner.d.ts +16 -0
- package/dist/agent/planner.d.ts.map +1 -0
- package/dist/agent/planner.js +126 -0
- package/dist/agent/planner.js.map +1 -0
- package/dist/agent/project-context.d.ts +13 -0
- package/dist/agent/project-context.d.ts.map +1 -0
- package/dist/agent/project-context.js +66 -0
- package/dist/agent/project-context.js.map +1 -0
- package/dist/agent/prompt-enhancer.d.ts +37 -0
- package/dist/agent/prompt-enhancer.d.ts.map +1 -0
- package/dist/agent/prompt-enhancer.js +115 -0
- package/dist/agent/prompt-enhancer.js.map +1 -0
- package/dist/agent/system-prompt.d.ts +9 -0
- package/dist/agent/system-prompt.d.ts.map +1 -0
- package/dist/agent/system-prompt.js +38 -0
- package/dist/agent/system-prompt.js.map +1 -0
- package/dist/agent/tools.d.ts +19 -0
- package/dist/agent/tools.d.ts.map +1 -0
- package/dist/agent/tools.js +323 -0
- package/dist/agent/tools.js.map +1 -0
- package/dist/agent/trace-format.d.ts +6 -0
- package/dist/agent/trace-format.d.ts.map +1 -0
- package/dist/agent/trace-format.js +74 -0
- package/dist/agent/trace-format.js.map +1 -0
- package/dist/agent/trace-store.d.ts +19 -0
- package/dist/agent/trace-store.d.ts.map +1 -0
- package/dist/agent/trace-store.js +82 -0
- package/dist/agent/trace-store.js.map +1 -0
- package/dist/agent/trace.d.ts +121 -0
- package/dist/agent/trace.d.ts.map +1 -0
- package/dist/agent/trace.js +2 -0
- package/dist/agent/trace.js.map +1 -0
- package/dist/commands/__tests__/replay.test.d.ts +2 -0
- package/dist/commands/__tests__/replay.test.d.ts.map +1 -0
- package/dist/commands/__tests__/replay.test.js +76 -0
- package/dist/commands/__tests__/replay.test.js.map +1 -0
- package/dist/commands/agent.mcp.consent.list.d.ts +3 -0
- package/dist/commands/agent.mcp.consent.list.d.ts.map +1 -0
- package/dist/commands/agent.mcp.consent.list.js +30 -0
- package/dist/commands/agent.mcp.consent.list.js.map +1 -0
- package/dist/commands/agent.mcp.consent.resolve.d.ts +3 -0
- package/dist/commands/agent.mcp.consent.resolve.d.ts.map +1 -0
- package/dist/commands/agent.mcp.consent.resolve.js +34 -0
- package/dist/commands/agent.mcp.consent.resolve.js.map +1 -0
- package/dist/commands/agent.mcp.delete.d.ts +3 -0
- package/dist/commands/agent.mcp.delete.d.ts.map +1 -0
- package/dist/commands/agent.mcp.delete.js +27 -0
- package/dist/commands/agent.mcp.delete.js.map +1 -0
- package/dist/commands/agent.mcp.set_enabled.d.ts +3 -0
- package/dist/commands/agent.mcp.set_enabled.d.ts.map +1 -0
- package/dist/commands/agent.mcp.set_enabled.js +33 -0
- package/dist/commands/agent.mcp.set_enabled.js.map +1 -0
- package/dist/commands/agent.skill.load.d.ts +3 -0
- package/dist/commands/agent.skill.load.d.ts.map +1 -0
- package/dist/commands/agent.skill.load.js +57 -0
- package/dist/commands/agent.skill.load.js.map +1 -0
- package/dist/commands/audit.log.query.d.ts +3 -0
- package/dist/commands/audit.log.query.d.ts.map +1 -0
- package/dist/commands/audit.log.query.js +42 -0
- package/dist/commands/audit.log.query.js.map +1 -0
- package/dist/commands/automation.create.d.ts.map +1 -1
- package/dist/commands/automation.create.js +43 -4
- package/dist/commands/automation.create.js.map +1 -1
- package/dist/commands/automation.disable.d.ts +3 -0
- package/dist/commands/automation.disable.d.ts.map +1 -0
- package/dist/commands/automation.disable.js +24 -0
- package/dist/commands/automation.disable.js.map +1 -0
- package/dist/commands/automation.enable.d.ts +3 -0
- package/dist/commands/automation.enable.d.ts.map +1 -0
- package/dist/commands/automation.enable.js +24 -0
- package/dist/commands/automation.enable.js.map +1 -0
- package/dist/commands/automation.update.d.ts +3 -0
- package/dist/commands/automation.update.d.ts.map +1 -0
- package/dist/commands/automation.update.js +42 -0
- package/dist/commands/automation.update.js.map +1 -0
- package/dist/commands/code.d.ts +14 -0
- package/dist/commands/code.d.ts.map +1 -0
- package/dist/commands/code.js +100 -0
- package/dist/commands/code.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +66 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/conversation.files.list.d.ts +3 -0
- package/dist/commands/conversation.files.list.d.ts.map +1 -0
- package/dist/commands/conversation.files.list.js +39 -0
- package/dist/commands/conversation.files.list.js.map +1 -0
- package/dist/commands/env.d.ts +19 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +64 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/graph.search.d.ts +10 -0
- package/dist/commands/graph.search.d.ts.map +1 -0
- package/dist/commands/graph.search.js +25 -0
- package/dist/commands/graph.search.js.map +1 -0
- package/dist/commands/markdown.generate.d.ts +3 -0
- package/dist/commands/markdown.generate.d.ts.map +1 -0
- package/dist/commands/markdown.generate.js +37 -0
- package/dist/commands/markdown.generate.js.map +1 -0
- package/dist/commands/mcp.add.d.ts +13 -0
- package/dist/commands/mcp.add.d.ts.map +1 -0
- package/dist/commands/mcp.add.js +110 -0
- package/dist/commands/mcp.add.js.map +1 -0
- package/dist/commands/mcp.auth.d.ts +10 -0
- package/dist/commands/mcp.auth.d.ts.map +1 -0
- package/dist/commands/mcp.auth.js +132 -0
- package/dist/commands/mcp.auth.js.map +1 -0
- package/dist/commands/mcp.check.d.ts +10 -0
- package/dist/commands/mcp.check.d.ts.map +1 -0
- package/dist/commands/mcp.check.js +114 -0
- package/dist/commands/mcp.check.js.map +1 -0
- package/dist/commands/mcp.list.d.ts +9 -0
- package/dist/commands/mcp.list.d.ts.map +1 -0
- package/dist/commands/mcp.list.js +93 -0
- package/dist/commands/mcp.list.js.map +1 -0
- package/dist/commands/mcp.permit.d.ts +12 -0
- package/dist/commands/mcp.permit.d.ts.map +1 -0
- package/dist/commands/mcp.permit.js +117 -0
- package/dist/commands/mcp.permit.js.map +1 -0
- package/dist/commands/mcp.remove.d.ts +9 -0
- package/dist/commands/mcp.remove.d.ts.map +1 -0
- package/dist/commands/mcp.remove.js +65 -0
- package/dist/commands/mcp.remove.js.map +1 -0
- package/dist/commands/mermaid.generate.d.ts +3 -0
- package/dist/commands/mermaid.generate.d.ts.map +1 -0
- package/dist/commands/mermaid.generate.js +33 -0
- package/dist/commands/mermaid.generate.js.map +1 -0
- package/dist/commands/ontology.neighbors.d.ts +3 -0
- package/dist/commands/ontology.neighbors.d.ts.map +1 -0
- package/dist/commands/ontology.neighbors.js +34 -0
- package/dist/commands/ontology.neighbors.js.map +1 -0
- package/dist/commands/ontology.query.d.ts +3 -0
- package/dist/commands/ontology.query.d.ts.map +1 -0
- package/dist/commands/ontology.query.js +36 -0
- package/dist/commands/ontology.query.js.map +1 -0
- package/dist/commands/plugin.org.install_bulk.js +1 -1
- package/dist/commands/plugin.org.install_bulk.js.map +1 -1
- package/dist/commands/privacy.erase.d.ts.map +1 -1
- package/dist/commands/privacy.erase.js +2 -1
- package/dist/commands/privacy.erase.js.map +1 -1
- package/dist/commands/privacy.erase.test.d.ts +2 -0
- package/dist/commands/privacy.erase.test.d.ts.map +1 -0
- package/dist/commands/privacy.erase.test.js +132 -0
- package/dist/commands/privacy.erase.test.js.map +1 -0
- package/dist/commands/replay.d.ts +5 -0
- package/dist/commands/replay.d.ts.map +1 -0
- package/dist/commands/replay.js +28 -0
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/schema/schema.config.d.ts +3 -0
- package/dist/commands/schema/schema.config.d.ts.map +1 -0
- package/dist/commands/schema/schema.config.js +34 -0
- package/dist/commands/schema/schema.config.js.map +1 -0
- package/dist/commands/schema/schema.disable.d.ts +3 -0
- package/dist/commands/schema/schema.disable.d.ts.map +1 -0
- package/dist/commands/schema/schema.disable.js +22 -0
- package/dist/commands/schema/schema.disable.js.map +1 -0
- package/dist/commands/schema/schema.enable.d.ts +3 -0
- package/dist/commands/schema/schema.enable.d.ts.map +1 -0
- package/dist/commands/schema/schema.enable.js +22 -0
- package/dist/commands/schema/schema.enable.js.map +1 -0
- package/dist/commands/schema/schema.export.d.ts +3 -0
- package/dist/commands/schema/schema.export.d.ts.map +1 -0
- package/dist/commands/schema/schema.export.js +31 -0
- package/dist/commands/schema/schema.export.js.map +1 -0
- package/dist/commands/schema/schema.get.d.ts +3 -0
- package/dist/commands/schema/schema.get.d.ts.map +1 -0
- package/dist/commands/schema/schema.get.js +23 -0
- package/dist/commands/schema/schema.get.js.map +1 -0
- package/dist/commands/schema/schema.label.d.ts +5 -0
- package/dist/commands/schema/schema.label.d.ts.map +1 -0
- package/dist/commands/schema/schema.label.js +60 -0
- package/dist/commands/schema/schema.label.js.map +1 -0
- package/dist/commands/schema/schema.list.d.ts +3 -0
- package/dist/commands/schema/schema.list.d.ts.map +1 -0
- package/dist/commands/schema/schema.list.js +30 -0
- package/dist/commands/schema/schema.list.js.map +1 -0
- package/dist/commands/schema/schema.prop.d.ts +5 -0
- package/dist/commands/schema/schema.prop.d.ts.map +1 -0
- package/dist/commands/schema/schema.prop.js +72 -0
- package/dist/commands/schema/schema.prop.js.map +1 -0
- package/dist/commands/schema/schema.reconcile.d.ts +10 -0
- package/dist/commands/schema/schema.reconcile.d.ts.map +1 -0
- package/dist/commands/schema/schema.reconcile.js +65 -0
- package/dist/commands/schema/schema.reconcile.js.map +1 -0
- package/dist/commands/schema/schema.rel.d.ts +5 -0
- package/dist/commands/schema/schema.rel.d.ts.map +1 -0
- package/dist/commands/schema/schema.rel.js +65 -0
- package/dist/commands/schema/schema.rel.js.map +1 -0
- package/dist/commands/schema/schema.version.d.ts +7 -0
- package/dist/commands/schema/schema.version.d.ts.map +1 -0
- package/dist/commands/schema/schema.version.js +96 -0
- package/dist/commands/schema/schema.version.js.map +1 -0
- package/dist/commands/secret.d.ts +23 -0
- package/dist/commands/secret.d.ts.map +1 -0
- package/dist/commands/secret.js +90 -0
- package/dist/commands/secret.js.map +1 -0
- package/dist/commands/skill.create.d.ts +3 -0
- package/dist/commands/skill.create.d.ts.map +1 -0
- package/dist/commands/skill.create.js +52 -0
- package/dist/commands/skill.create.js.map +1 -0
- package/dist/commands/skill.edit.d.ts +3 -0
- package/dist/commands/skill.edit.d.ts.map +1 -0
- package/dist/commands/skill.edit.js +28 -0
- package/dist/commands/skill.edit.js.map +1 -0
- package/dist/commands/skill.enable.d.ts +3 -0
- package/dist/commands/skill.enable.d.ts.map +1 -0
- package/dist/commands/skill.enable.js +31 -0
- package/dist/commands/skill.enable.js.map +1 -0
- package/dist/commands/skill.export.d.ts +3 -0
- package/dist/commands/skill.export.d.ts.map +1 -0
- package/dist/commands/skill.export.js +25 -0
- package/dist/commands/skill.export.js.map +1 -0
- package/dist/commands/skill.metrics.read.d.ts +3 -0
- package/dist/commands/skill.metrics.read.d.ts.map +1 -0
- package/dist/commands/skill.metrics.read.js +56 -0
- package/dist/commands/skill.metrics.read.js.map +1 -0
- package/dist/commands/skill.version.activate.d.ts +3 -0
- package/dist/commands/skill.version.activate.d.ts.map +1 -0
- package/dist/commands/skill.version.activate.js +24 -0
- package/dist/commands/skill.version.activate.js.map +1 -0
- package/dist/commands/skill.version.get.d.ts +3 -0
- package/dist/commands/skill.version.get.d.ts.map +1 -0
- package/dist/commands/skill.version.get.js +43 -0
- package/dist/commands/skill.version.get.js.map +1 -0
- package/dist/commands/skill.version.list.d.ts +3 -0
- package/dist/commands/skill.version.list.d.ts.map +1 -0
- package/dist/commands/skill.version.list.js +38 -0
- package/dist/commands/skill.version.list.js.map +1 -0
- package/dist/commands/skill.version.upload.d.ts +3 -0
- package/dist/commands/skill.version.upload.d.ts.map +1 -0
- package/dist/commands/skill.version.upload.js +28 -0
- package/dist/commands/skill.version.upload.js.map +1 -0
- package/dist/commands/skill.workspace.install.d.ts +3 -0
- package/dist/commands/skill.workspace.install.d.ts.map +1 -0
- package/dist/commands/skill.workspace.install.js +52 -0
- package/dist/commands/skill.workspace.install.js.map +1 -0
- package/dist/commands.test.js +1391 -337
- package/dist/commands.test.js.map +1 -1
- package/dist/components/DevStatus.d.ts.map +1 -1
- package/dist/components/DevStatus.js +3 -2
- package/dist/components/DevStatus.js.map +1 -1
- package/dist/daemon/client.d.ts +30 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +97 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/code-graph/builder.d.ts +6 -0
- package/dist/daemon/code-graph/builder.d.ts.map +1 -0
- package/dist/daemon/code-graph/builder.js +215 -0
- package/dist/daemon/code-graph/builder.js.map +1 -0
- package/dist/daemon/code-graph/query.d.ts +29 -0
- package/dist/daemon/code-graph/query.d.ts.map +1 -0
- package/dist/daemon/code-graph/query.js +98 -0
- package/dist/daemon/code-graph/query.js.map +1 -0
- package/dist/daemon/code-graph/types.d.ts +37 -0
- package/dist/daemon/code-graph/types.d.ts.map +1 -0
- package/dist/daemon/code-graph/types.js +5 -0
- package/dist/daemon/code-graph/types.js.map +1 -0
- package/dist/daemon/code-graph/watcher.d.ts +37 -0
- package/dist/daemon/code-graph/watcher.d.ts.map +1 -0
- package/dist/daemon/code-graph/watcher.js +79 -0
- package/dist/daemon/code-graph/watcher.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +6 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -0
- package/dist/daemon/lifecycle.js +132 -0
- package/dist/daemon/lifecycle.js.map +1 -0
- package/dist/daemon/protocol.d.ts +113 -0
- package/dist/daemon/protocol.d.ts.map +1 -0
- package/dist/daemon/protocol.js +16 -0
- package/dist/daemon/protocol.js.map +1 -0
- package/dist/daemon/server.d.ts +26 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +168 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +262 -310
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +5 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +52 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +3 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +16 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/config.test.js +21 -3
- package/dist/lib/config.test.js.map +1 -1
- package/dist/lib/differential-context.d.ts +46 -0
- package/dist/lib/differential-context.d.ts.map +1 -0
- package/dist/lib/differential-context.js +89 -0
- package/dist/lib/differential-context.js.map +1 -0
- package/dist/lib/resolve.d.ts +3 -0
- package/dist/lib/resolve.d.ts.map +1 -0
- package/dist/lib/resolve.js +29 -0
- package/dist/lib/resolve.js.map +1 -0
- package/dist/lib/structured-tool-io.d.ts +31 -0
- package/dist/lib/structured-tool-io.d.ts.map +1 -0
- package/dist/lib/structured-tool-io.js +56 -0
- package/dist/lib/structured-tool-io.js.map +1 -0
- package/dist/repl/__tests__/_queue_demo.test.d.ts +2 -0
- package/dist/repl/__tests__/_queue_demo.test.d.ts.map +1 -0
- package/dist/repl/__tests__/_queue_demo.test.js +40 -0
- package/dist/repl/__tests__/_queue_demo.test.js.map +1 -0
- package/dist/repl/__tests__/components.test.d.ts +2 -0
- package/dist/repl/__tests__/components.test.d.ts.map +1 -0
- package/dist/repl/__tests__/components.test.js +38 -0
- package/dist/repl/__tests__/components.test.js.map +1 -0
- package/dist/repl/__tests__/interactive.queue.test.d.ts +2 -0
- package/dist/repl/__tests__/interactive.queue.test.d.ts.map +1 -0
- package/dist/repl/__tests__/interactive.queue.test.js +124 -0
- package/dist/repl/__tests__/interactive.queue.test.js.map +1 -0
- package/dist/repl/components.d.ts +59 -0
- package/dist/repl/components.d.ts.map +1 -0
- package/dist/repl/components.js +152 -0
- package/dist/repl/components.js.map +1 -0
- package/dist/repl/interactive.d.ts +12 -0
- package/dist/repl/interactive.d.ts.map +1 -0
- package/dist/repl/interactive.js +326 -0
- package/dist/repl/interactive.js.map +1 -0
- package/dist/repl/one-shot.d.ts +9 -0
- package/dist/repl/one-shot.d.ts.map +1 -0
- package/dist/repl/one-shot.js +83 -0
- package/dist/repl/one-shot.js.map +1 -0
- package/dist/tui/__tests__/app.test.d.ts +2 -0
- package/dist/tui/__tests__/app.test.d.ts.map +1 -0
- package/dist/tui/__tests__/app.test.js +136 -0
- package/dist/tui/__tests__/app.test.js.map +1 -0
- package/dist/tui/__tests__/banner.test.d.ts +2 -0
- package/dist/tui/__tests__/banner.test.d.ts.map +1 -0
- package/dist/tui/__tests__/banner.test.js +15 -0
- package/dist/tui/__tests__/banner.test.js.map +1 -0
- package/dist/tui/__tests__/command-form.test.d.ts +2 -0
- package/dist/tui/__tests__/command-form.test.d.ts.map +1 -0
- package/dist/tui/__tests__/command-form.test.js +96 -0
- package/dist/tui/__tests__/command-form.test.js.map +1 -0
- package/dist/tui/__tests__/command-tree.test.d.ts +2 -0
- package/dist/tui/__tests__/command-tree.test.d.ts.map +1 -0
- package/dist/tui/__tests__/command-tree.test.js +55 -0
- package/dist/tui/__tests__/command-tree.test.js.map +1 -0
- package/dist/tui/__tests__/runner.test.d.ts +2 -0
- package/dist/tui/__tests__/runner.test.d.ts.map +1 -0
- package/dist/tui/__tests__/runner.test.js +38 -0
- package/dist/tui/__tests__/runner.test.js.map +1 -0
- package/dist/tui/__tests__/theme.test.d.ts +2 -0
- package/dist/tui/__tests__/theme.test.d.ts.map +1 -0
- package/dist/tui/__tests__/theme.test.js +11 -0
- package/dist/tui/__tests__/theme.test.js.map +1 -0
- package/dist/tui/agent-view/activity-feed.d.ts +3 -0
- package/dist/tui/agent-view/activity-feed.d.ts.map +1 -0
- package/dist/tui/agent-view/activity-feed.js +34 -0
- package/dist/tui/agent-view/activity-feed.js.map +1 -0
- package/dist/tui/agent-view/budget-bar.d.ts +3 -0
- package/dist/tui/agent-view/budget-bar.d.ts.map +1 -0
- package/dist/tui/agent-view/budget-bar.js +53 -0
- package/dist/tui/agent-view/budget-bar.js.map +1 -0
- package/dist/tui/agent-view/compile-panel.d.ts +3 -0
- package/dist/tui/agent-view/compile-panel.d.ts.map +1 -0
- package/dist/tui/agent-view/compile-panel.js +34 -0
- package/dist/tui/agent-view/compile-panel.js.map +1 -0
- package/dist/tui/agent-view/index.d.ts +4 -0
- package/dist/tui/agent-view/index.d.ts.map +1 -0
- package/dist/tui/agent-view/index.js +31 -0
- package/dist/tui/agent-view/index.js.map +1 -0
- package/dist/tui/agent-view/memory-panel.d.ts +3 -0
- package/dist/tui/agent-view/memory-panel.d.ts.map +1 -0
- package/dist/tui/agent-view/memory-panel.js +80 -0
- package/dist/tui/agent-view/memory-panel.js.map +1 -0
- package/dist/tui/agent-view/session-panel.d.ts +3 -0
- package/dist/tui/agent-view/session-panel.d.ts.map +1 -0
- package/dist/tui/agent-view/session-panel.js +44 -0
- package/dist/tui/agent-view/session-panel.js.map +1 -0
- package/dist/tui/agent-view/status-bar.d.ts +7 -0
- package/dist/tui/agent-view/status-bar.d.ts.map +1 -0
- package/dist/tui/agent-view/status-bar.js +22 -0
- package/dist/tui/agent-view/status-bar.js.map +1 -0
- package/dist/tui/app.d.ts +9 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +115 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/banner.d.ts +5 -0
- package/dist/tui/banner.d.ts.map +1 -0
- package/dist/tui/banner.js +17 -0
- package/dist/tui/banner.js.map +1 -0
- package/dist/tui/command-form.d.ts +9 -0
- package/dist/tui/command-form.d.ts.map +1 -0
- package/dist/tui/command-form.js +76 -0
- package/dist/tui/command-form.js.map +1 -0
- package/dist/tui/command-tree.d.ts +30 -0
- package/dist/tui/command-tree.d.ts.map +1 -0
- package/dist/tui/command-tree.js +43 -0
- package/dist/tui/command-tree.js.map +1 -0
- package/dist/tui/fleet-view/agent-row.d.ts +10 -0
- package/dist/tui/fleet-view/agent-row.d.ts.map +1 -0
- package/dist/tui/fleet-view/agent-row.js +80 -0
- package/dist/tui/fleet-view/agent-row.js.map +1 -0
- package/dist/tui/fleet-view/dispatch-input.d.ts +5 -0
- package/dist/tui/fleet-view/dispatch-input.d.ts.map +1 -0
- package/dist/tui/fleet-view/dispatch-input.js +36 -0
- package/dist/tui/fleet-view/dispatch-input.js.map +1 -0
- package/dist/tui/fleet-view/fleet-app.d.ts +11 -0
- package/dist/tui/fleet-view/fleet-app.d.ts.map +1 -0
- package/dist/tui/fleet-view/fleet-app.js +95 -0
- package/dist/tui/fleet-view/fleet-app.js.map +1 -0
- package/dist/tui/fleet-view/fleet-summary.d.ts +6 -0
- package/dist/tui/fleet-view/fleet-summary.d.ts.map +1 -0
- package/dist/tui/fleet-view/fleet-summary.js +19 -0
- package/dist/tui/fleet-view/fleet-summary.js.map +1 -0
- package/dist/tui/fleet-view/index.d.ts +16 -0
- package/dist/tui/fleet-view/index.d.ts.map +1 -0
- package/dist/tui/fleet-view/index.js +61 -0
- package/dist/tui/fleet-view/index.js.map +1 -0
- package/dist/tui/runner.d.ts +7 -0
- package/dist/tui/runner.d.ts.map +1 -0
- package/dist/tui/runner.js +36 -0
- package/dist/tui/runner.js.map +1 -0
- package/dist/tui/theme.d.ts +8 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +10 -0
- package/dist/tui/theme.js.map +1 -0
- package/package.json +12 -7
- package/README.html +0 -379
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatic prompt enhancement.
|
|
3
|
+
*
|
|
4
|
+
* Before a prompt is handed to the agent (or split into a plan), this enriches it
|
|
5
|
+
* with the context the CLI already has about the repository: the code graph (a
|
|
6
|
+
* local symbol + import index — where things are defined, what imports them) and
|
|
7
|
+
* the fleet's recorded lessons. The user types "fix the login bug"; the agent
|
|
8
|
+
* receives that plus the exact files and symbols involved and the gotchas it
|
|
9
|
+
* learned last time. That is what makes the agent both faster (less blind
|
|
10
|
+
* grepping) and cheaper (fewer exploratory tool calls before it acts).
|
|
11
|
+
*
|
|
12
|
+
* The code graph is the knowledge graph the CLI carries offline; when the
|
|
13
|
+
* platform knowledge graph is reachable it can augment this, but enhancement
|
|
14
|
+
* never depends on the network and degrades to a no-op if the graph can't build.
|
|
15
|
+
*/
|
|
16
|
+
import { queryCodeGraph } from "./code-graph.js";
|
|
17
|
+
import { formatLessons } from "./fleet/memory.js";
|
|
18
|
+
const CODEY_EXT = /\.(ts|tsx|js|jsx|mjs|cjs|json|md|mdx|css|scss|sql|py|go|rs|sh|yml|yaml|toml)$/;
|
|
19
|
+
/**
|
|
20
|
+
* Pull likely code references out of a natural-language prompt: backticked spans,
|
|
21
|
+
* file paths, and identifier-shaped tokens (CamelCase / snake_case / dotted).
|
|
22
|
+
*/
|
|
23
|
+
export function extractCandidates(prompt) {
|
|
24
|
+
const symbols = new Set();
|
|
25
|
+
const paths = new Set();
|
|
26
|
+
// Backticked spans are the strongest signal — the user is quoting code.
|
|
27
|
+
for (const m of prompt.matchAll(/`([^`]+)`/g)) {
|
|
28
|
+
const inner = (m[1] ?? "").trim();
|
|
29
|
+
if (!inner)
|
|
30
|
+
continue;
|
|
31
|
+
if (inner.includes("/") || CODEY_EXT.test(inner))
|
|
32
|
+
paths.add(inner);
|
|
33
|
+
else if (/^[\w.$]+$/.test(inner))
|
|
34
|
+
symbols.add(inner);
|
|
35
|
+
}
|
|
36
|
+
// Bare file paths and identifiers in the surrounding prose.
|
|
37
|
+
for (const m of prompt.matchAll(/[A-Za-z0-9_./-]+/g)) {
|
|
38
|
+
const tok = m[0];
|
|
39
|
+
if (CODEY_EXT.test(tok) || (tok.includes("/") && tok.length > 3)) {
|
|
40
|
+
paths.add(tok.replace(/^\.\//, ""));
|
|
41
|
+
}
|
|
42
|
+
else if (/^[A-Z][A-Za-z0-9]{2,}$/.test(tok) || /^[a-z]+_[a-z0-9_]+$/.test(tok)) {
|
|
43
|
+
// CamelCase (Foo, GraphNode) or snake_case (build_tools) — likely symbols.
|
|
44
|
+
symbols.add(tok);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { symbols: [...symbols], paths: [...paths] };
|
|
48
|
+
}
|
|
49
|
+
/** True when a code-graph result string represents a real hit (not a "No …" miss). */
|
|
50
|
+
function isHit(result) {
|
|
51
|
+
return result.length > 0 && !/^No (symbols?|file) /.test(result) && !/^Nothing imports/.test(result);
|
|
52
|
+
}
|
|
53
|
+
export async function enhancePrompt(opts) {
|
|
54
|
+
const { prompt, cwd } = opts;
|
|
55
|
+
const max = opts.maxSymbols ?? 6;
|
|
56
|
+
// Lessons first — they need no code graph and must surface even if it fails.
|
|
57
|
+
const lessons = opts.memory?.recall(prompt, { limit: 4 }) ?? [];
|
|
58
|
+
const sections = [];
|
|
59
|
+
const resolved = [];
|
|
60
|
+
try {
|
|
61
|
+
const { symbols, paths } = extractCandidates(prompt);
|
|
62
|
+
// Evaluator-supplied hints are authoritative — the model explicitly named them
|
|
63
|
+
// — so classify each directly (like a backticked span) rather than mining it
|
|
64
|
+
// from prose. They sharpen retrieval without polluting the visible prompt text.
|
|
65
|
+
const symSet = new Set(symbols);
|
|
66
|
+
const pathSet = new Set(paths);
|
|
67
|
+
for (const q of opts.extraQueries ?? []) {
|
|
68
|
+
const t = q.trim();
|
|
69
|
+
if (!t)
|
|
70
|
+
continue;
|
|
71
|
+
if (t.includes("/") || CODEY_EXT.test(t))
|
|
72
|
+
pathSet.add(t.replace(/^\.\//, ""));
|
|
73
|
+
else if (/^[\w.$]+$/.test(t))
|
|
74
|
+
symSet.add(t);
|
|
75
|
+
// Multi-word topics that aren't identifiers are skipped — they won't resolve.
|
|
76
|
+
}
|
|
77
|
+
// Symbol definitions — "where is X defined".
|
|
78
|
+
for (const sym of [...symSet].slice(0, max)) {
|
|
79
|
+
const res = await queryCodeGraph(cwd, "search", sym, 4);
|
|
80
|
+
if (isHit(res)) {
|
|
81
|
+
sections.push(`Definitions of \`${sym}\`:\n${res}`);
|
|
82
|
+
resolved.push(sym);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// File context — symbols a referenced file defines, plus its dependents
|
|
86
|
+
// (what a change to it could break). This is the impact-analysis the agent
|
|
87
|
+
// would otherwise have to discover by hand.
|
|
88
|
+
for (const p of [...pathSet].slice(0, max)) {
|
|
89
|
+
const syms = await queryCodeGraph(cwd, "file_symbols", p, 12);
|
|
90
|
+
if (isHit(syms)) {
|
|
91
|
+
sections.push(`Symbols in ${p}:\n${syms}`);
|
|
92
|
+
resolved.push(p);
|
|
93
|
+
const deps = await queryCodeGraph(cwd, "dependents", p, 8);
|
|
94
|
+
if (isHit(deps))
|
|
95
|
+
sections.push(deps);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
/* code graph unavailable (e.g. unreadable cwd) — enhancement is optional */
|
|
101
|
+
}
|
|
102
|
+
const parts = [];
|
|
103
|
+
if (sections.length > 0) {
|
|
104
|
+
parts.push("## Relevant code context (auto-retrieved from the code graph)\n" +
|
|
105
|
+
"Use this to skip exploration and go straight to the right files.\n\n" +
|
|
106
|
+
sections.join("\n\n"));
|
|
107
|
+
}
|
|
108
|
+
if (lessons.length > 0) {
|
|
109
|
+
parts.push("## Lessons from past work on this repo (recalled memory)\n" + formatLessons(lessons));
|
|
110
|
+
}
|
|
111
|
+
const context = parts.join("\n\n");
|
|
112
|
+
const enhanced = context ? `${prompt}\n\n${context}` : prompt;
|
|
113
|
+
return { prompt: enhanced, context, resolved, lessons };
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=prompt-enhancer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-enhancer.js","sourceRoot":"","sources":["../../src/agent/prompt-enhancer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ProjectContext } from "./project-context.js";
|
|
2
|
+
export interface SystemPromptOptions {
|
|
3
|
+
cwd: string;
|
|
4
|
+
projectContext?: ProjectContext;
|
|
5
|
+
/** When true, the agent must not mutate the filesystem or run commands. */
|
|
6
|
+
readOnly?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildSystemPrompt(opts: SystemPromptOptions): string;
|
|
9
|
+
//# sourceMappingURL=system-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CA0CnE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System prompt for the local agentic coding loop.
|
|
3
|
+
*
|
|
4
|
+
* Intentionally compact and stable: a stable prefix keeps the provider prompt
|
|
5
|
+
* cache warm across turns (cache-aware layout — see CONTEXT_ENGINE_SPEC).
|
|
6
|
+
* Project rules are loaded once per session and included here (stable). Per-turn
|
|
7
|
+
* recalled memory is injected by the loop as a separate section, not here.
|
|
8
|
+
*/
|
|
9
|
+
import { platform, release } from "node:os";
|
|
10
|
+
export function buildSystemPrompt(opts) {
|
|
11
|
+
const { cwd, projectContext, readOnly } = opts;
|
|
12
|
+
const lines = [
|
|
13
|
+
"You are oxagen, an agentic coding assistant running locally in the user's terminal,",
|
|
14
|
+
"backed by Oxagen's knowledge-graph context engine.",
|
|
15
|
+
"You operate directly on the user's working directory using the provided tools.",
|
|
16
|
+
"",
|
|
17
|
+
"Operating rules:",
|
|
18
|
+
"- Act, don't narrate intentions at length. Read before you edit, and edit precisely.",
|
|
19
|
+
"- Prefer `edit_file` for surgical changes; only `write_file` for new files or full rewrites.",
|
|
20
|
+
"- Before editing a file you have not read this session, `read_file` it first.",
|
|
21
|
+
"- Use `grep` and `glob` to locate code instead of guessing paths.",
|
|
22
|
+
"- Use `code_graph` for structural questions — `search` to find where a symbol is",
|
|
23
|
+
" defined, `dependents` to see what imports a file before you change it. It is a",
|
|
24
|
+
" precomputed symbol/import index, more precise than grep for those questions.",
|
|
25
|
+
"- Use `bash` for builds, tests, git, and anything the dedicated tools don't cover.",
|
|
26
|
+
"- Keep changes minimal and consistent with the surrounding code's style and conventions.",
|
|
27
|
+
"- When the task is done, give a short summary of what changed. Do not pad the response.",
|
|
28
|
+
];
|
|
29
|
+
if (readOnly) {
|
|
30
|
+
lines.push("", "READ-ONLY MODE: you may read, search, and explain, but you MUST NOT modify files or run commands.", "The write_file, edit_file, and bash tools are disabled. Explain the change instead of making it.");
|
|
31
|
+
}
|
|
32
|
+
lines.push("", `Environment: ${platform()} ${release()} · cwd: ${cwd}`);
|
|
33
|
+
if (projectContext && projectContext.text) {
|
|
34
|
+
lines.push("", `## Project rules (from ${projectContext.sources.join(", ")})`, "Follow these as binding instructions for this repository:", "", projectContext.text);
|
|
35
|
+
}
|
|
36
|
+
return lines.join("\n");
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=system-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAU5C,MAAM,UAAU,iBAAiB,CAAC,IAAyB;IACzD,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAE/C,MAAM,KAAK,GAAG;QACZ,qFAAqF;QACrF,oDAAoD;QACpD,gFAAgF;QAChF,EAAE;QACF,kBAAkB;QAClB,sFAAsF;QACtF,8FAA8F;QAC9F,+EAA+E;QAC/E,mEAAmE;QACnE,kFAAkF;QAClF,kFAAkF;QAClF,gFAAgF;QAChF,oFAAoF;QACpF,0FAA0F;QAC1F,yFAAyF;KAC1F,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CACR,EAAE,EACF,mGAAmG,EACnG,kGAAkG,CACnG,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,QAAQ,EAAE,IAAI,OAAO,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC;IAExE,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CACR,EAAE,EACF,0BAA0B,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAC9D,2DAA2D,EAC3D,EAAE,EACF,cAAc,CAAC,IAAI,CACpB,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local coding tools for the agent loop.
|
|
3
|
+
*
|
|
4
|
+
* These are the host-filesystem / shell primitives that Claude Code-style
|
|
5
|
+
* agentic coding needs and that the Oxagen platform deliberately does NOT expose
|
|
6
|
+
* (the platform only has a sandboxed `agent.code.execute`, not host-fs tools).
|
|
7
|
+
* Each is an AI SDK `tool()` whose `execute` operates on the local working
|
|
8
|
+
* directory and returns a string the model can read.
|
|
9
|
+
*
|
|
10
|
+
* Safety note (v1): tools execute without an interactive permission prompt. The
|
|
11
|
+
* user invoked `oxagen` against their own repo, so this mirrors a developer
|
|
12
|
+
* running commands. Per-tool approval gating is a planned enhancement (it maps
|
|
13
|
+
* onto the same approval flow the platform already has for risky capabilities).
|
|
14
|
+
*/
|
|
15
|
+
import { type ToolSet } from "ai";
|
|
16
|
+
export declare function buildTools(cwd: string, opts?: {
|
|
17
|
+
readOnly?: boolean;
|
|
18
|
+
}): ToolSet;
|
|
19
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/agent/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AAkFxC,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,OAAO,CAqOT"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local coding tools for the agent loop.
|
|
3
|
+
*
|
|
4
|
+
* These are the host-filesystem / shell primitives that Claude Code-style
|
|
5
|
+
* agentic coding needs and that the Oxagen platform deliberately does NOT expose
|
|
6
|
+
* (the platform only has a sandboxed `agent.code.execute`, not host-fs tools).
|
|
7
|
+
* Each is an AI SDK `tool()` whose `execute` operates on the local working
|
|
8
|
+
* directory and returns a string the model can read.
|
|
9
|
+
*
|
|
10
|
+
* Safety note (v1): tools execute without an interactive permission prompt. The
|
|
11
|
+
* user invoked `oxagen` against their own repo, so this mirrors a developer
|
|
12
|
+
* running commands. Per-tool approval gating is a planned enhancement (it maps
|
|
13
|
+
* onto the same approval flow the platform already has for risky capabilities).
|
|
14
|
+
*/
|
|
15
|
+
import { tool } from "ai";
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
import { promises as fs } from "node:fs";
|
|
18
|
+
import { exec } from "node:child_process";
|
|
19
|
+
import { promisify } from "node:util";
|
|
20
|
+
import { resolve, relative, join, isAbsolute } from "node:path";
|
|
21
|
+
import { queryCodeGraph } from "./code-graph.js";
|
|
22
|
+
const execAsync = promisify(exec);
|
|
23
|
+
const MAX_OUTPUT = 30_000; // chars; keep tool output from blowing the context window
|
|
24
|
+
const IGNORE_DIRS = new Set([
|
|
25
|
+
"node_modules",
|
|
26
|
+
".git",
|
|
27
|
+
".next",
|
|
28
|
+
"dist",
|
|
29
|
+
"build",
|
|
30
|
+
"coverage",
|
|
31
|
+
".turbo",
|
|
32
|
+
".vercel",
|
|
33
|
+
]);
|
|
34
|
+
function clip(text) {
|
|
35
|
+
if (text.length <= MAX_OUTPUT)
|
|
36
|
+
return text;
|
|
37
|
+
return (text.slice(0, MAX_OUTPUT) +
|
|
38
|
+
`\n… [truncated ${text.length - MAX_OUTPUT} chars]`);
|
|
39
|
+
}
|
|
40
|
+
/** Resolve a user-supplied path against cwd; absolute paths are honored as-is. */
|
|
41
|
+
function resolvePath(cwd, p) {
|
|
42
|
+
return isAbsolute(p) ? p : resolve(cwd, p);
|
|
43
|
+
}
|
|
44
|
+
function globToRegExp(pattern) {
|
|
45
|
+
// Minimal glob → regex: ** matches across dirs, * within a segment, ? one char.
|
|
46
|
+
let re = "";
|
|
47
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
48
|
+
const c = pattern[i];
|
|
49
|
+
if (c === "*") {
|
|
50
|
+
if (pattern[i + 1] === "*") {
|
|
51
|
+
re += ".*";
|
|
52
|
+
i++;
|
|
53
|
+
if (pattern[i + 1] === "/")
|
|
54
|
+
i++; // consume the slash after **
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
re += "[^/]*";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (c === "?") {
|
|
61
|
+
re += "[^/]";
|
|
62
|
+
}
|
|
63
|
+
else if (".+^${}()|[]\\".includes(c)) {
|
|
64
|
+
re += "\\" + c;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
re += c;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return new RegExp("^" + re + "$");
|
|
71
|
+
}
|
|
72
|
+
async function* walk(dir, cwd) {
|
|
73
|
+
let entries;
|
|
74
|
+
try {
|
|
75
|
+
const dirents = await fs.readdir(dir, { withFileTypes: true });
|
|
76
|
+
entries = dirents.map((d) => ({ name: d.name, isDir: d.isDirectory() }));
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
for (const entry of entries) {
|
|
82
|
+
if (entry.isDir && IGNORE_DIRS.has(entry.name))
|
|
83
|
+
continue;
|
|
84
|
+
const abs = join(dir, entry.name);
|
|
85
|
+
const rel = relative(cwd, abs);
|
|
86
|
+
if (entry.isDir) {
|
|
87
|
+
yield* walk(abs, cwd);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
yield { abs, rel };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export function buildTools(cwd, opts = {}) {
|
|
95
|
+
const tools = {
|
|
96
|
+
read_file: tool({
|
|
97
|
+
description: "Read a file from the working directory. Returns the file contents (optionally a line range).",
|
|
98
|
+
inputSchema: z.object({
|
|
99
|
+
path: z.string().describe("File path, relative to cwd or absolute."),
|
|
100
|
+
offset: z
|
|
101
|
+
.number()
|
|
102
|
+
.int()
|
|
103
|
+
.optional()
|
|
104
|
+
.describe("1-based start line (optional)."),
|
|
105
|
+
limit: z
|
|
106
|
+
.number()
|
|
107
|
+
.int()
|
|
108
|
+
.optional()
|
|
109
|
+
.describe("Max number of lines to return (optional)."),
|
|
110
|
+
}),
|
|
111
|
+
execute: async ({ path, offset, limit }) => {
|
|
112
|
+
try {
|
|
113
|
+
const text = await fs.readFile(resolvePath(cwd, path), "utf8");
|
|
114
|
+
if (offset == null && limit == null)
|
|
115
|
+
return clip(text);
|
|
116
|
+
const lines = text.split("\n");
|
|
117
|
+
const start = offset ? offset - 1 : 0;
|
|
118
|
+
const end = limit ? start + limit : lines.length;
|
|
119
|
+
return clip(lines.slice(start, end).join("\n"));
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
return `Error reading ${path}: ${err instanceof Error ? err.message : String(err)}`;
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
}),
|
|
126
|
+
write_file: tool({
|
|
127
|
+
description: "Write (create or overwrite) a file with the given content. Creates parent directories as needed.",
|
|
128
|
+
inputSchema: z.object({
|
|
129
|
+
path: z.string(),
|
|
130
|
+
content: z.string(),
|
|
131
|
+
}),
|
|
132
|
+
execute: async ({ path, content }) => {
|
|
133
|
+
try {
|
|
134
|
+
const abs = resolvePath(cwd, path);
|
|
135
|
+
await fs.mkdir(resolve(abs, ".."), { recursive: true });
|
|
136
|
+
await fs.writeFile(abs, content, "utf8");
|
|
137
|
+
return `Wrote ${content.length} bytes to ${path}`;
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
return `Error writing ${path}: ${err instanceof Error ? err.message : String(err)}`;
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
}),
|
|
144
|
+
edit_file: tool({
|
|
145
|
+
description: "Replace an exact substring in a file. old_string must appear exactly once. Use for surgical edits.",
|
|
146
|
+
inputSchema: z.object({
|
|
147
|
+
path: z.string(),
|
|
148
|
+
old_string: z.string().describe("Exact text to replace (must be unique)."),
|
|
149
|
+
new_string: z.string().describe("Replacement text."),
|
|
150
|
+
}),
|
|
151
|
+
execute: async ({ path, old_string, new_string }) => {
|
|
152
|
+
try {
|
|
153
|
+
const abs = resolvePath(cwd, path);
|
|
154
|
+
const text = await fs.readFile(abs, "utf8");
|
|
155
|
+
const count = text.split(old_string).length - 1;
|
|
156
|
+
if (count === 0)
|
|
157
|
+
return `Error: old_string not found in ${path}.`;
|
|
158
|
+
if (count > 1)
|
|
159
|
+
return `Error: old_string appears ${count} times in ${path}; make it unique.`;
|
|
160
|
+
await fs.writeFile(abs, text.replace(old_string, new_string), "utf8");
|
|
161
|
+
return `Edited ${path}`;
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
return `Error editing ${path}: ${err instanceof Error ? err.message : String(err)}`;
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
}),
|
|
168
|
+
list_dir: tool({
|
|
169
|
+
description: "List the entries of a directory (non-recursive).",
|
|
170
|
+
inputSchema: z.object({
|
|
171
|
+
path: z.string().optional().describe("Directory (default: cwd)."),
|
|
172
|
+
}),
|
|
173
|
+
execute: async ({ path }) => {
|
|
174
|
+
try {
|
|
175
|
+
const abs = resolvePath(cwd, path ?? ".");
|
|
176
|
+
const dirents = await fs.readdir(abs, { withFileTypes: true });
|
|
177
|
+
const lines = dirents
|
|
178
|
+
.map((d) => (d.isDirectory() ? `${d.name}/` : d.name))
|
|
179
|
+
.sort();
|
|
180
|
+
return clip(lines.join("\n") || "(empty)");
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
return `Error listing ${path ?? "."}: ${err instanceof Error ? err.message : String(err)}`;
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
}),
|
|
187
|
+
glob: tool({
|
|
188
|
+
description: "Find files matching a glob pattern (e.g. 'src/**/*.ts'). Skips node_modules/.git/dist.",
|
|
189
|
+
inputSchema: z.object({
|
|
190
|
+
pattern: z.string(),
|
|
191
|
+
}),
|
|
192
|
+
execute: async ({ pattern }) => {
|
|
193
|
+
const re = globToRegExp(pattern);
|
|
194
|
+
const matches = [];
|
|
195
|
+
for await (const { rel } of walk(cwd, cwd)) {
|
|
196
|
+
if (re.test(rel))
|
|
197
|
+
matches.push(rel);
|
|
198
|
+
if (matches.length >= 500)
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
return clip(matches.sort().join("\n") || "(no matches)");
|
|
202
|
+
},
|
|
203
|
+
}),
|
|
204
|
+
grep: tool({
|
|
205
|
+
description: "Search file contents with a regular expression. Returns matching file:line:text. Skips node_modules/.git/dist.",
|
|
206
|
+
inputSchema: z.object({
|
|
207
|
+
pattern: z.string().describe("JavaScript regular expression."),
|
|
208
|
+
path: z
|
|
209
|
+
.string()
|
|
210
|
+
.optional()
|
|
211
|
+
.describe("Subdirectory to search (default: cwd)."),
|
|
212
|
+
glob: z
|
|
213
|
+
.string()
|
|
214
|
+
.optional()
|
|
215
|
+
.describe("Restrict to files matching this glob (e.g. '*.ts')."),
|
|
216
|
+
}),
|
|
217
|
+
execute: async ({ pattern, path, glob }) => {
|
|
218
|
+
let re;
|
|
219
|
+
try {
|
|
220
|
+
re = new RegExp(pattern);
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
return `Invalid regex: ${err instanceof Error ? err.message : String(err)}`;
|
|
224
|
+
}
|
|
225
|
+
const fileRe = glob ? globToRegExp(glob.includes("/") ? glob : `**/${glob}`) : null;
|
|
226
|
+
const root = resolvePath(cwd, path ?? ".");
|
|
227
|
+
const hits = [];
|
|
228
|
+
for await (const { abs, rel } of walk(root, cwd)) {
|
|
229
|
+
if (fileRe && !fileRe.test(rel))
|
|
230
|
+
continue;
|
|
231
|
+
let text;
|
|
232
|
+
try {
|
|
233
|
+
text = await fs.readFile(abs, "utf8");
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
continue; // binary / unreadable
|
|
237
|
+
}
|
|
238
|
+
const lines = text.split("\n");
|
|
239
|
+
for (let i = 0; i < lines.length; i++) {
|
|
240
|
+
if (re.test(lines[i])) {
|
|
241
|
+
hits.push(`${rel}:${i + 1}:${lines[i].slice(0, 200)}`);
|
|
242
|
+
if (hits.length >= 200)
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (hits.length >= 200)
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
return clip(hits.join("\n") || "(no matches)");
|
|
250
|
+
},
|
|
251
|
+
}),
|
|
252
|
+
code_graph: tool({
|
|
253
|
+
description: "Query the repository's code graph — a precomputed index of symbols and " +
|
|
254
|
+
"import relationships — for STRUCTURAL answers, instead of guessing paths " +
|
|
255
|
+
"or grepping. Prefer this over `grep` for \"where is X defined\" and for " +
|
|
256
|
+
"impact analysis before a change. Operations: 'search' finds where a " +
|
|
257
|
+
"symbol (function/class/type/interface) is defined by name; 'file_symbols' " +
|
|
258
|
+
"lists the top-level symbols a file defines; 'dependents' lists the files " +
|
|
259
|
+
"that import a given file (what a change could break); 'imports' lists the " +
|
|
260
|
+
"local files a given file imports.",
|
|
261
|
+
inputSchema: z.object({
|
|
262
|
+
operation: z.enum(["search", "file_symbols", "dependents", "imports"]),
|
|
263
|
+
query: z
|
|
264
|
+
.string()
|
|
265
|
+
.describe("A symbol name for 'search'; a file path (relative to cwd, or a suffix " +
|
|
266
|
+
"like 'agent/loop.ts') for 'file_symbols' / 'dependents' / 'imports'."),
|
|
267
|
+
limit: z
|
|
268
|
+
.number()
|
|
269
|
+
.int()
|
|
270
|
+
.optional()
|
|
271
|
+
.describe("Max results to return (default 25)."),
|
|
272
|
+
}),
|
|
273
|
+
execute: async ({ operation, query, limit }) => {
|
|
274
|
+
try {
|
|
275
|
+
return clip(await queryCodeGraph(cwd, operation, query, limit));
|
|
276
|
+
}
|
|
277
|
+
catch (err) {
|
|
278
|
+
return `code_graph error: ${err instanceof Error ? err.message : String(err)}`;
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
}),
|
|
282
|
+
bash: tool({
|
|
283
|
+
description: "Run a shell command in the working directory. Use for builds, tests, git, package managers. Has a timeout.",
|
|
284
|
+
inputSchema: z.object({
|
|
285
|
+
command: z.string(),
|
|
286
|
+
timeout_ms: z
|
|
287
|
+
.number()
|
|
288
|
+
.int()
|
|
289
|
+
.optional()
|
|
290
|
+
.describe("Timeout in milliseconds (default 120000, max 600000)."),
|
|
291
|
+
}),
|
|
292
|
+
execute: async ({ command, timeout_ms }) => {
|
|
293
|
+
const timeout = Math.min(timeout_ms ?? 120_000, 600_000);
|
|
294
|
+
try {
|
|
295
|
+
const { stdout, stderr } = await execAsync(command, {
|
|
296
|
+
cwd,
|
|
297
|
+
timeout,
|
|
298
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
299
|
+
shell: "/bin/bash",
|
|
300
|
+
});
|
|
301
|
+
const out = [stdout, stderr].filter(Boolean).join("\n").trim();
|
|
302
|
+
return clip(out || "(no output)");
|
|
303
|
+
}
|
|
304
|
+
catch (err) {
|
|
305
|
+
const e = err;
|
|
306
|
+
if (e.killed)
|
|
307
|
+
return `Command timed out after ${timeout}ms.`;
|
|
308
|
+
const out = [e.stdout, e.stderr, e.message].filter(Boolean).join("\n").trim();
|
|
309
|
+
return clip(`Command failed:\n${out}`);
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
}),
|
|
313
|
+
};
|
|
314
|
+
// Read-only mode: withhold every mutating tool so the model literally cannot
|
|
315
|
+
// change the filesystem or run commands.
|
|
316
|
+
if (opts.readOnly) {
|
|
317
|
+
delete tools["write_file"];
|
|
318
|
+
delete tools["edit_file"];
|
|
319
|
+
delete tools["bash"];
|
|
320
|
+
}
|
|
321
|
+
return tools;
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/agent/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { TurnTrace } from "./trace.js";
|
|
2
|
+
/** Render one trace as a human-readable, plain-text report. */
|
|
3
|
+
export declare function formatTraceText(trace: TurnTrace): string;
|
|
4
|
+
/** Render a recent-turns list (newest first) as plain text. */
|
|
5
|
+
export declare function formatTraceList(traces: TurnTrace[]): string;
|
|
6
|
+
//# sourceMappingURL=trace-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-format.d.ts","sourceRoot":"","sources":["../../src/agent/trace-format.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAW5C,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CA+DxD;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAU3D"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plain-text rendering of a turn trace.
|
|
3
|
+
*
|
|
4
|
+
* The REPL renders a trace with Ink ({@link TraceView}); this module produces the
|
|
5
|
+
* same information as plain text for the non-interactive `oxagen replay` command,
|
|
6
|
+
* so the full chain of thought is inspectable in a pipe, a log, or CI. Kept pure
|
|
7
|
+
* (no Ink, no AI SDK) so it is trivially testable.
|
|
8
|
+
*/
|
|
9
|
+
import { formatUsd } from "./model-router.js";
|
|
10
|
+
function bar(score) {
|
|
11
|
+
const filled = Math.round((Math.max(0, Math.min(100, score)) / 100) * 10);
|
|
12
|
+
return "█".repeat(filled) + "░".repeat(10 - filled);
|
|
13
|
+
}
|
|
14
|
+
function bullets(items, glyph = "-") {
|
|
15
|
+
return items.map((i) => ` ${glyph} ${i}`).join("\n");
|
|
16
|
+
}
|
|
17
|
+
/** Render one trace as a human-readable, plain-text report. */
|
|
18
|
+
export function formatTraceText(trace) {
|
|
19
|
+
const { evaluation: ev, enhancement: en } = trace;
|
|
20
|
+
const lines = [];
|
|
21
|
+
lines.push(`↻ replay ${trace.id} · ${Math.round(trace.durationMs / 100) / 10}s · ` +
|
|
22
|
+
`${formatUsd(trace.usage.costUsd)} · ${trace.finalComplete ? "complete" : "gaps remain"}`);
|
|
23
|
+
lines.push("", "1 · Original prompt", ` ${trace.originalPrompt}`);
|
|
24
|
+
lines.push("", `2 · Evaluation${ev.fallback ? " (heuristic)" : ` · ${ev.model.split("/").pop()}`}`, ` completeness ${bar(ev.completeness)} ${ev.completeness}/100`, ` complexity ${bar(ev.complexity)} ${ev.complexity}/100`);
|
|
25
|
+
if (ev.missing.length)
|
|
26
|
+
lines.push(" missing from prompt:", bullets(ev.missing, "?"));
|
|
27
|
+
if (ev.removed.length)
|
|
28
|
+
lines.push(" pruned as low-value:", bullets(ev.removed, "−"));
|
|
29
|
+
if (ev.reasoning)
|
|
30
|
+
lines.push(` ${ev.reasoning}`);
|
|
31
|
+
if (ev.refinedPrompt !== trace.originalPrompt) {
|
|
32
|
+
lines.push("", "3 · Refined prompt (noise removed)", ` ${ev.refinedPrompt}`);
|
|
33
|
+
}
|
|
34
|
+
lines.push("", `4 · Injected context · ${en.source}`);
|
|
35
|
+
lines.push(en.resolved.length
|
|
36
|
+
? ` code refs: ${en.resolved.join(", ")}`
|
|
37
|
+
: " no code-graph references resolved");
|
|
38
|
+
lines.push(` recalled lessons: ${en.lessonCount}`);
|
|
39
|
+
lines.push("", "5 · Model selected", ` ${trace.selectedModel.split("/").pop()} (${trace.selectedTier}) — ${trace.selectionRationale}`);
|
|
40
|
+
lines.push("", "6 · Completeness review (advisor)");
|
|
41
|
+
if (trace.judgeRounds.length === 0) {
|
|
42
|
+
lines.push(" not judged (bare mode)");
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
for (let i = 0; i < trace.judgeRounds.length; i++) {
|
|
46
|
+
const v = trace.judgeRounds[i];
|
|
47
|
+
if (!v)
|
|
48
|
+
continue;
|
|
49
|
+
lines.push(` round ${i + 1}: ${v.complete ? "COMPLETE" : "INCOMPLETE"} · ` +
|
|
50
|
+
`${v.confidence}% confident · advisor ${v.model.split("/").pop()}` +
|
|
51
|
+
(v.fallback ? " (heuristic)" : ""));
|
|
52
|
+
if (v.findings.length)
|
|
53
|
+
lines.push(bullets(v.findings, "✗"));
|
|
54
|
+
if (v.reasoning)
|
|
55
|
+
lines.push(` ${v.reasoning}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
lines.push("", `${trace.steps} steps · ${trace.filesTouched.length} file(s) touched` +
|
|
59
|
+
(trace.filesTouched.length ? `: ${trace.filesTouched.slice(0, 5).join(", ")}` : ""));
|
|
60
|
+
return lines.join("\n");
|
|
61
|
+
}
|
|
62
|
+
/** Render a recent-turns list (newest first) as plain text. */
|
|
63
|
+
export function formatTraceList(traces) {
|
|
64
|
+
if (traces.length === 0)
|
|
65
|
+
return "No turns recorded yet.";
|
|
66
|
+
return traces
|
|
67
|
+
.map((t, i) => {
|
|
68
|
+
const mark = t.finalComplete ? "✓" : "✗";
|
|
69
|
+
const prompt = t.originalPrompt.length > 56 ? t.originalPrompt.slice(0, 56) + "…" : t.originalPrompt;
|
|
70
|
+
return `${i + 1}. ${mark} ${prompt} [${t.selectedModel.split("/").pop()} · ${formatUsd(t.usage.costUsd)}]`;
|
|
71
|
+
})
|
|
72
|
+
.join("\n");
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=trace-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-format.js","sourceRoot":"","sources":["../../src/agent/trace-format.ts"],"names":[],"mappings":"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"}
|